@ozen-ui/kit 0.17.0 → 0.19.0

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 (64) hide show
  1. package/ChipNext/package.json +5 -0
  2. package/__inner__/cjs/components/Chip/Chip.d.ts +3 -0
  3. package/__inner__/cjs/components/Chip/Chip.js +3 -0
  4. package/__inner__/cjs/components/ChipNext/Chip.css +108 -0
  5. package/__inner__/cjs/components/ChipNext/Chip.d.ts +42 -0
  6. package/__inner__/cjs/components/ChipNext/Chip.js +46 -0
  7. package/__inner__/cjs/components/ChipNext/constants.d.ts +4 -0
  8. package/__inner__/cjs/components/ChipNext/constants.js +7 -0
  9. package/__inner__/cjs/components/ChipNext/index.d.ts +1 -0
  10. package/__inner__/cjs/components/ChipNext/index.js +4 -0
  11. package/__inner__/cjs/components/FieldIcon/FieldIcon.d.ts +4 -7
  12. package/__inner__/cjs/components/FieldIcon/FieldIcon.js +5 -21
  13. package/__inner__/cjs/components/List/List.css +1 -0
  14. package/__inner__/cjs/components/Menu/Menu.css +0 -1
  15. package/__inner__/cjs/components/Menu/components/MenuItem/MenuItem.js +4 -4
  16. package/__inner__/cjs/components/Menu/components/MenuList/MenuList.d.ts +2 -2
  17. package/__inner__/cjs/components/Menu/components/MenuList/MenuList.js +44 -26
  18. package/__inner__/cjs/components/Menu/useMenuFocusList.js +11 -1
  19. package/__inner__/cjs/components/Modal/Modal.js +3 -7
  20. package/__inner__/cjs/components/Popover/Popover.js +1 -5
  21. package/__inner__/cjs/components/Select/Select.js +2 -5
  22. package/__inner__/cjs/components/ThemeProvider/types.d.ts +2 -0
  23. package/__inner__/cjs/hooks/useFocusList/useFocusList.js +10 -1
  24. package/__inner__/cjs/hooks/useMultiRef/useMultiRef.js +2 -7
  25. package/__inner__/cjs/utils/isKeys.d.ts +3 -0
  26. package/__inner__/cjs/utils/isKeys.js +6 -0
  27. package/__inner__/cjs/utils/renderContent/index.d.ts +1 -0
  28. package/__inner__/cjs/utils/renderContent/index.js +4 -0
  29. package/__inner__/cjs/utils/renderContent/renderContent.d.ts +6 -0
  30. package/__inner__/cjs/utils/renderContent/renderContent.js +29 -0
  31. package/__inner__/cjs/utils/setRef.d.ts +4 -0
  32. package/__inner__/cjs/utils/setRef.js +13 -0
  33. package/__inner__/esm/components/Chip/Chip.d.ts +3 -0
  34. package/__inner__/esm/components/Chip/Chip.js +3 -0
  35. package/__inner__/esm/components/ChipNext/Chip.css +108 -0
  36. package/__inner__/esm/components/ChipNext/Chip.d.ts +42 -0
  37. package/__inner__/esm/components/ChipNext/Chip.js +43 -0
  38. package/__inner__/esm/components/ChipNext/constants.d.ts +4 -0
  39. package/__inner__/esm/components/ChipNext/constants.js +4 -0
  40. package/__inner__/esm/components/ChipNext/index.d.ts +1 -0
  41. package/__inner__/esm/components/ChipNext/index.js +1 -0
  42. package/__inner__/esm/components/FieldIcon/FieldIcon.d.ts +4 -7
  43. package/__inner__/esm/components/FieldIcon/FieldIcon.js +5 -21
  44. package/__inner__/esm/components/List/List.css +1 -0
  45. package/__inner__/esm/components/Menu/Menu.css +0 -1
  46. package/__inner__/esm/components/Menu/components/MenuItem/MenuItem.js +4 -4
  47. package/__inner__/esm/components/Menu/components/MenuList/MenuList.d.ts +2 -2
  48. package/__inner__/esm/components/Menu/components/MenuList/MenuList.js +46 -28
  49. package/__inner__/esm/components/Menu/useMenuFocusList.js +11 -1
  50. package/__inner__/esm/components/Modal/Modal.js +3 -7
  51. package/__inner__/esm/components/Popover/Popover.js +1 -5
  52. package/__inner__/esm/components/Select/Select.js +2 -5
  53. package/__inner__/esm/components/ThemeProvider/types.d.ts +2 -0
  54. package/__inner__/esm/hooks/useFocusList/useFocusList.js +10 -1
  55. package/__inner__/esm/hooks/useMultiRef/useMultiRef.js +2 -7
  56. package/__inner__/esm/utils/isKeys.d.ts +3 -0
  57. package/__inner__/esm/utils/isKeys.js +2 -0
  58. package/__inner__/esm/utils/renderContent/index.d.ts +1 -0
  59. package/__inner__/esm/utils/renderContent/index.js +1 -0
  60. package/__inner__/esm/utils/renderContent/renderContent.d.ts +6 -0
  61. package/__inner__/esm/utils/renderContent/renderContent.js +25 -0
  62. package/__inner__/esm/utils/setRef.d.ts +4 -0
  63. package/__inner__/esm/utils/setRef.js +9 -0
  64. package/package.json +1 -1
@@ -19,7 +19,6 @@ export var Modal = forwardRef(function (_a, ref) {
19
19
  var hasBackdrop = !hideBackdrop;
20
20
  var modalInnerRef = useRef(null);
21
21
  var focusedElement = useRef(null);
22
- var isClickOutSide = useRef(null);
23
22
  var _h = __read(useState(false), 2), openState = _h[0], setOpenState = _h[1];
24
23
  var _j = __read(useState(false), 2), opened = _j[0], setOpened = _j[1];
25
24
  var _k = useModalManager(modalInnerRef, 1000, openState), isTop = _k.isTop, refsClickOutside = _k.refsClickOutside;
@@ -28,7 +27,6 @@ export var Modal = forwardRef(function (_a, ref) {
28
27
  modalInnerRef
29
28
  ], __read(refsClickOutside), false), __read((ignoreClickOutsideRefs || [])), false),
30
29
  handler: function () {
31
- isClickOutSide.current = true;
32
30
  onClose === null || onClose === void 0 ? void 0 : onClose();
33
31
  },
34
32
  active: !disableClickOutside,
@@ -40,7 +38,6 @@ export var Modal = forwardRef(function (_a, ref) {
40
38
  // Сохраняем фокус активного элемента до момента открытия всплывающего окна
41
39
  if (open) {
42
40
  setOpened(true);
43
- isClickOutSide.current = null;
44
41
  focusedElement.current =
45
42
  document.activeElement;
46
43
  (_a = focusedElement.current) === null || _a === void 0 ? void 0 : _a.blur();
@@ -54,10 +51,9 @@ export var Modal = forwardRef(function (_a, ref) {
54
51
  var onExited = useCallback(function () {
55
52
  var _a, _b;
56
53
  // Возвращаем фокус активного элемента
57
- if (!isClickOutSide.current &&
58
- (((_a = modalInnerRef.current) === null || _a === void 0 ? void 0 : _a.contains(document.activeElement)) ||
59
- document.activeElement === document.body)) {
60
- (_b = focusedElement.current) === null || _b === void 0 ? void 0 : _b.focus();
54
+ if (((_a = modalInnerRef.current) === null || _a === void 0 ? void 0 : _a.contains(document.activeElement)) ||
55
+ document.activeElement === document.body) {
56
+ (_b = focusedElement.current) === null || _b === void 0 ? void 0 : _b.focus({ preventScroll: true });
61
57
  }
62
58
  setOpened(false);
63
59
  onExitedProp === null || onExitedProp === void 0 ? void 0 : onExitedProp();
@@ -20,7 +20,6 @@ export var cnPopover = cn('Popover');
20
20
  export var Popover = polymorphicComponentWithRef(function (inProps, ref) {
21
21
  var props = useThemeProps({ props: inProps, name: 'Popover' });
22
22
  var _a = props.arrow, arrow = _a === void 0 ? POPOVER_DEFAULT_ARROW : _a, _b = props.open, open = _b === void 0 ? POPOVER_DEFAULT_OPEN : _b, _c = props.disableInteractive, disableInteractive = _c === void 0 ? POPOVER_DEFAULT_DISABLE_INTERACTIVE : _c, _d = props.disableEnforceFocus, disableEnforceFocus = _d === void 0 ? POPOVER_DEFAULT_DISABLE_ENFORCE_FOCUS : _d, _e = props.disableReturnFocus, disableReturnFocus = _e === void 0 ? POPOVER_DEFAULT_DISABLE_RETURN_FOCUS : _e, _f = props.disableClickOutside, disableClickOutside = _f === void 0 ? POPOVER_DEFAULT_DISABLE_CLICK_OUTSIDE : _f, _g = props.placement, placement = _g === void 0 ? POPOVER_DEFAULT_PLACEMENT : _g, ignoreClickOutsideRefs = props.ignoreClickOutsideRefs, arrowProps = props.arrowProps, anchorRef = props.anchorRef, equalAnchorWidth = props.equalAnchorWidth, offset = props.offset, children = props.children, transitionProps = props.transitionProps, onClose = props.onClose, onEnter = props.onEnter, onEntered = props.onEntered, onExit = props.onExit, onExitedProp = props.onExited, className = props.className, position = props.position, style = props.style, setUpdate = props.setUpdate, _h = props.as, as = _h === void 0 ? POPOVER_DEFAULT_TAG : _h, other = __rest(props, ["arrow", "open", "disableInteractive", "disableEnforceFocus", "disableReturnFocus", "disableClickOutside", "placement", "ignoreClickOutsideRefs", "arrowProps", "anchorRef", "equalAnchorWidth", "offset", "children", "transitionProps", "onClose", "onEnter", "onEntered", "onExit", "onExited", "className", "position", "style", "setUpdate", "as"]);
23
- var isClickOutSide = useRef(null);
24
23
  var _j = __read(useState(false), 2), openState = _j[0], setOpenState = _j[1];
25
24
  var focusedElement = useRef(null);
26
25
  var popoverRef = useRef(null);
@@ -46,7 +45,6 @@ export var Popover = polymorphicComponentWithRef(function (inProps, ref) {
46
45
  popoverRef
47
46
  ], __read(refsClickOutside), false), __read((anchorRef ? [anchorRef] : [])), false), __read((ignoreClickOutsideRefs || [])), false),
48
47
  handler: function () {
49
- isClickOutSide.current = true;
50
48
  onClose === null || onClose === void 0 ? void 0 : onClose();
51
49
  },
52
50
  active: openState && !disableClickOutside,
@@ -55,10 +53,9 @@ export var Popover = polymorphicComponentWithRef(function (inProps, ref) {
55
53
  var _a, _b;
56
54
  // Возвращаем фокус активного элемента
57
55
  if (!disableReturnFocus &&
58
- !isClickOutSide.current &&
59
56
  (((_a = popoverRef.current) === null || _a === void 0 ? void 0 : _a.contains(document.activeElement)) ||
60
57
  document.activeElement === document.body)) {
61
- (_b = focusedElement.current) === null || _b === void 0 ? void 0 : _b.focus();
58
+ (_b = focusedElement.current) === null || _b === void 0 ? void 0 : _b.focus({ preventScroll: true });
62
59
  }
63
60
  onExitedProp === null || onExitedProp === void 0 ? void 0 : onExitedProp();
64
61
  }, [onExitedProp]);
@@ -133,7 +130,6 @@ export var Popover = polymorphicComponentWithRef(function (inProps, ref) {
133
130
  var _a;
134
131
  // Сохраняем фокус активного элемента до момента открытия всплывающего окна
135
132
  if (open && !disableReturnFocus) {
136
- isClickOutSide.current = null;
137
133
  focusedElement.current =
138
134
  document.activeElement;
139
135
  (_a = focusedElement.current) === null || _a === void 0 ? void 0 : _a.blur();
@@ -6,7 +6,7 @@ import { useControlled } from '../../hooks/useControlled';
6
6
  import { useMultiRef } from '../../hooks/useMultiRef';
7
7
  import { useThemeProps } from '../../hooks/useThemeProps';
8
8
  import { cn } from '../../utils/classname';
9
- import { isKey } from '../../utils/isKey';
9
+ import { isKeys } from '../../utils/isKeys';
10
10
  import { DataList, DataListOption } from '../DataList';
11
11
  import { SelectInput } from './components';
12
12
  import { SELECT_DEFAULT_AUTO_FOCUS, SELECT_DEFAULT_DEFAULT_OPEN, SELECT_DEFAULT_DISABLED, SELECT_DEFAULT_FULL_WIDTH, SELECT_DEFAULT_MULTILINE, SELECT_DEFAULT_REQUIRED, SELECT_DEFAULT_SIZE, } from './constants';
@@ -90,10 +90,7 @@ var SelectRender = function (inProps, ref) {
90
90
  };
91
91
  /** Управление элементом контроля через клавиатуру */
92
92
  var handleKeyDown = function (event) {
93
- if ((isKey(event, 'Space') ||
94
- isKey(event, 'ArrowDown') ||
95
- isKey(event, 'ArrowUp')) &&
96
- !open) {
93
+ if (isKeys(event, ['Space', 'ArrowDown', 'ArrowUp']) && !open) {
97
94
  event.preventDefault();
98
95
  handleToggle();
99
96
  }
@@ -8,6 +8,7 @@ import type { CardProps } from '../Card';
8
8
  import type { CheckboxProps } from '../Checkbox';
9
9
  import type { CheckboxGroupProps } from '../CheckboxGroup';
10
10
  import type { ChipProps } from '../Chip';
11
+ import type { ChipProps as ChiPropsNext } from '../ChipNext';
11
12
  import type { CollapseProps } from '../Collapse';
12
13
  import type { ContainerProps } from '../Container';
13
14
  import type { DataListProps } from '../DataList';
@@ -69,6 +70,7 @@ export type Theme = {
69
70
  Checkbox?: Partial<CheckboxProps>;
70
71
  CheckboxGroup?: Partial<CheckboxGroupProps>;
71
72
  Chip?: Partial<ChipProps>;
73
+ ChipNext?: Partial<ChiPropsNext>;
72
74
  Collapse?: Partial<CollapseProps>;
73
75
  Container?: Partial<ContainerProps>;
74
76
  DataList?: Partial<DataListProps>;
@@ -2,15 +2,24 @@ import { useCallback } from 'react';
2
2
  import { getNextIndex } from '../../utils/getNextIndex';
3
3
  import { getPrevIndex } from '../../utils/getPrevIndex';
4
4
  import { isKey } from '../../utils/isKey';
5
+ import { isKeys } from '../../utils/isKeys';
5
6
  import { useUniqueId } from '../useUniqueId';
6
7
  export function useFocusList() {
7
8
  var name = useUniqueId();
8
9
  var onKeyDown = useCallback(function (event) {
9
- if (!isKey(event, 'ArrowUp') && !isKey(event, 'ArrowDown')) {
10
+ if (!isKeys(event, ['ArrowUp', 'ArrowDown', 'Home', 'End'])) {
10
11
  return;
11
12
  }
12
13
  event.preventDefault();
13
14
  var items = document.querySelectorAll("[data-focus-list=\"".concat(name, "\"]"));
15
+ if (isKey(event, 'Home')) {
16
+ items.item(0).focus();
17
+ return;
18
+ }
19
+ if (isKey(event, 'Home')) {
20
+ items.item(items.length - 1).focus();
21
+ return;
22
+ }
14
23
  var currentEl = event.target;
15
24
  var currentIndex = Array.from(items).indexOf(currentEl);
16
25
  var newIndex = isKey(event, 'ArrowUp')
@@ -1,4 +1,5 @@
1
1
  import { useMemo, useRef } from 'react';
2
+ import { setRef } from '../../utils/setRef';
2
3
  /** Создает несколько ссылок (ref) на один DOM-элемент. */
3
4
  export function useMultiRef(refs) {
4
5
  // Мемоизирует массив ref'ов
@@ -9,13 +10,7 @@ export function useMultiRef(refs) {
9
10
  }
10
11
  return function (node) {
11
12
  arrRefs.current.forEach(function (ref) {
12
- if (typeof ref === 'function') {
13
- ref(node);
14
- }
15
- else if (ref) {
16
- // eslint-disable-next-line no-param-reassign
17
- ref.current = node;
18
- }
13
+ setRef(ref, node);
19
14
  });
20
15
  };
21
16
  }, [arrRefs]);
@@ -0,0 +1,3 @@
1
+ import type { KeyboardEvent as ReactKeyboardEvent } from 'react';
2
+ import type { KeyCode } from '../types/KeyCode';
3
+ export declare const isKeys: (event: KeyboardEvent | ReactKeyboardEvent, keys: KeyCode[]) => boolean;
@@ -0,0 +1,2 @@
1
+ import { isKey } from './isKey';
2
+ export var isKeys = function (event, keys) { return keys.some(function (key) { return isKey(event, key); }); };
@@ -0,0 +1 @@
1
+ export * from './renderContent';
@@ -0,0 +1 @@
1
+ export * from './renderContent';
@@ -0,0 +1,6 @@
1
+ import type { FC, ReactElement, ReactNode } from 'react';
2
+ export type RenderContentType<Props extends object> = {
3
+ content?: string | number | FC<Props> | ReactElement<Props> | (() => ReactElement<Props>);
4
+ props?: Props;
5
+ };
6
+ export declare function renderContent<Props extends object>({ content, props, }: RenderContentType<Props>): ReactNode;
@@ -0,0 +1,25 @@
1
+ import { __assign } from "tslib";
2
+ import React, { isValidElement, cloneElement } from 'react';
3
+ import { isElement, isValidElementType } from 'react-is';
4
+ import { mergeDeep } from '../../utils/mergeDeep';
5
+ export function renderContent(_a) {
6
+ var content = _a.content, props = _a.props;
7
+ // primitives: string or number
8
+ if (typeof content === 'string' || typeof content === 'number') {
9
+ return content;
10
+ }
11
+ // react-element
12
+ if (isElement(content)) {
13
+ return cloneElement(content, mergeDeep(props, content.props));
14
+ }
15
+ // render-function
16
+ if (typeof content === 'function' && !isValidElement(content)) {
17
+ return content(props);
18
+ }
19
+ // react-component
20
+ if (isValidElementType(content)) {
21
+ var Content = content;
22
+ return React.createElement(Content, __assign({}, props));
23
+ }
24
+ return null;
25
+ }
@@ -0,0 +1,4 @@
1
+ import type { Dispatch, SetStateAction, Ref as ReactRef } from 'react';
2
+ type Ref<T> = ReactRef<T> | Dispatch<SetStateAction<T | undefined>> | null;
3
+ export declare const setRef: <T>(ref: Ref<T> | undefined, value: T) => void;
4
+ export {};
@@ -0,0 +1,9 @@
1
+ export var setRef = function (ref, value) {
2
+ if (typeof ref === 'function') {
3
+ ref(value);
4
+ }
5
+ else if (ref) {
6
+ // eslint-disable-next-line no-param-reassign
7
+ ref.current = value;
8
+ }
9
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ozen-ui/kit",
3
- "version": "0.17.0",
3
+ "version": "0.19.0",
4
4
  "description": "React component library",
5
5
  "files": [
6
6
  "*"