@sima-land/ui-nucleons 45.0.0-alpha.6 → 45.0.0-alpha.7

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.
package/colors.scss CHANGED
@@ -18,6 +18,7 @@ $basic-white: #fff;
18
18
  $additional-deep-red: #d50000;
19
19
  $additional-red: #fb3a2f;
20
20
  $additional-light-red: #feebea;
21
+ $additional-dark-teal: #089176;
21
22
  $additional-teal: #09ab8b;
22
23
  $additional-green: #00c853;
23
24
  $additional-light-green: #64dd17;
@@ -39,3 +40,4 @@ $additional-brown: #795548;
39
40
  $additional-blue-gray: #607d8b;
40
41
  $additional-deep-blue: #00599d;
41
42
  $additional-dark-blue: #002b41;
43
+ $additional-unlit-blue: #1b75c2;
@@ -12,16 +12,12 @@
12
12
  .item {
13
13
  display: block;
14
14
  padding: 0;
15
- max-width: 100%;
15
+ max-width: calc(100% - var(--expandable-gap, 0));
16
16
  height: var(--expandable-item-height);
17
17
  margin: 0 (var(--expandable-gap)) var(--expandable-gap) 0;
18
18
  &.hidden {
19
19
  display: none;
20
20
  }
21
- &.invisible {
22
- opacity: 0;
23
- pointer-events: none;
24
- }
25
21
  &.opener {
26
22
  width: var(--expandable-opener-width);
27
23
  }
@@ -1,42 +1,12 @@
1
- import { ReactNode, MouseEventHandler, CSSProperties } from 'react';
2
- export interface ExpandableGroupProps {
3
- /** Расстояние между элементами группы в пикселях. */
4
- gap?: number;
5
- /** Высота каждого элемента группы в пикселях. */
6
- itemHeight?: number;
7
- /** Развернут ли список по умолчанию. */
8
- defaultExpanded?: boolean;
9
- /** Количество строк в свернутом состоянии группы. */
10
- lineLimit?: number;
11
- /** Содержимое. */
12
- children?: ReactNode;
13
- /** Функция, возвращающая содержимое кнопки разворачивания списка. */
14
- opener?: (data: {
15
- hiddenCount: number;
16
- }) => ReactNode;
17
- /** Сработает при разворачивании списка. */
18
- onExpand?: () => void;
19
- /** CSS-класс корневого элемента. */
20
- className?: string;
21
- /** Стили корневого элемента. */
22
- style?: CSSProperties;
23
- /** Нужно ли выводить список развернутым. */
24
- expanded?: boolean;
25
- /** Ширина открывающего элемента. */
26
- openerWidth?: number;
27
- }
28
- export interface GroupItemProps {
29
- children?: ReactNode;
30
- onClick?: MouseEventHandler;
31
- 'data-testid'?: string;
32
- }
1
+ /// <reference types="react" />
2
+ import { ExpandableGroupProps, ExpandableGroupItemProps } from './types';
33
3
  /**
34
4
  * Группа элементов с ограничением на число выводимых строк и возможностью показать все.
35
5
  * @param props Свойства.
36
6
  * @return Элемент.
37
7
  */
38
- export declare function ExpandableGroup({ gap, itemHeight, lineLimit, defaultExpanded, children, onExpand, opener, className, style, expanded: expandedProp, openerWidth, }: ExpandableGroupProps): JSX.Element;
8
+ export declare function ExpandableGroup(props: ExpandableGroupProps): JSX.Element;
39
9
  export declare const Expandable: {
40
10
  readonly Group: typeof ExpandableGroup;
41
- readonly Item: import("react").ForwardRefExoticComponent<GroupItemProps & import("react").RefAttributes<HTMLLIElement>>;
11
+ readonly Item: import("react").ForwardRefExoticComponent<ExpandableGroupItemProps & import("react").RefAttributes<HTMLLIElement>>;
42
12
  };
@@ -6,56 +6,103 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.Expandable = exports.ExpandableGroup = void 0;
7
7
  const jsx_runtime_1 = require("react/jsx-runtime");
8
8
  const react_1 = require("react");
9
+ const hooks_1 = require("../hooks");
9
10
  const utils_1 = require("./utils");
10
11
  const bind_1 = __importDefault(require("classnames/bind"));
11
12
  const expandable_group_module_scss_1 = __importDefault(require("./expandable-group.module.scss"));
12
13
  const cx = bind_1.default.bind(expandable_group_module_scss_1.default);
13
14
  const ItemContext = (0, react_1.createContext)({});
15
+ const initialState = {
16
+ status: 'initial',
17
+ lastVisibleIndex: -1,
18
+ };
19
+ const expandedState = {
20
+ status: 'expanded',
21
+ lastVisibleIndex: -1,
22
+ };
14
23
  /**
15
24
  * Группа элементов с ограничением на число выводимых строк и возможностью показать все.
16
25
  * @param props Свойства.
17
26
  * @return Элемент.
18
27
  */
19
- function ExpandableGroup({ gap = 8, itemHeight = 32, lineLimit = 2, defaultExpanded = false, children, onExpand, opener = data => (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["\u0415\u0449\u0451 ", data.hiddenCount] }), className, style, expanded: expandedProp, openerWidth = 72, }) {
20
- const wrapperRef = (0, react_1.useRef)(null);
21
- const containerRef = (0, react_1.useRef)(null);
28
+ function ExpandableGroup(props) {
29
+ const time = (0, react_1.useRef)(1);
30
+ // @todo зациклить если каким-то невероятным образом уйдет за границу number
31
+ time.current = time.current + 1;
32
+ // ВАЖНО: рендер вызванный родительским компонентом должен приводить к пересчету, поэтому передаем уникальный time
33
+ return (0, jsx_runtime_1.jsx)(ExpandableGroupInner, { ...props, time: time.current });
34
+ }
35
+ exports.ExpandableGroup = ExpandableGroup;
36
+ /**
37
+ * Внутренний компонент, необходимый для корректной обработки повторных render'ов.
38
+ * @param props Свойства.
39
+ * @return Элемент.
40
+ */
41
+ function ExpandableGroupInner({ gap = 8, itemHeight = 32, lineLimit = 2, defaultExpanded = false, children, opener: renderOpener = data => (0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["\u0415\u0449\u0451 ", data.hiddenCount] }), className, style, expanded: expandedProp, onExpand, openerWidth = 72, time, }) {
42
+ const outerRef = (0, react_1.useRef)(null);
43
+ const innerRef = (0, react_1.useRef)(null);
22
44
  const openerRef = (0, react_1.useRef)(null);
23
45
  const [mounted, setMounted] = (0, react_1.useState)(false);
24
- const [expanded, setExpanded] = (0, react_1.useState)(defaultExpanded);
25
- const items = react_1.Children.toArray(children).reduce((result, child) => {
26
- if ((0, react_1.isValidElement)(child) && child.type === ExpandableItem) {
27
- result.push(child);
28
- }
29
- return result;
30
- }, []);
46
+ const [state, setState] = (0, react_1.useState)(() => (defaultExpanded ? expandedState : initialState));
31
47
  (0, react_1.useEffect)(() => {
32
48
  setMounted(true);
33
49
  }, []);
50
+ // даем возможность управлять состоянием с помощью пропса "expanded"
34
51
  (0, react_1.useEffect)(() => {
35
- expandedProp !== undefined && setExpanded(expandedProp);
52
+ if (typeof expandedProp === 'boolean') {
53
+ setState(expandedProp ? expandedState : initialState);
54
+ }
36
55
  }, [expandedProp]);
37
- const { hiddenCount } = (0, utils_1.useExpandable)({
38
- expanded,
39
- wrapperRef,
40
- containerRef,
41
- openerRef,
42
- gap,
56
+ // если "time" обновился - это сигнал о том что надо пересчитать состояние
57
+ (0, react_1.useEffect)(() => {
58
+ setState(current => (current.status === 'expanded' ? current : initialState));
59
+ }, [time]);
60
+ // следим за изменением ширины чтобы запустить перерасчет
61
+ (0, utils_1.useObserveWidth)(outerRef, () => {
62
+ setState(current => (current.status === 'expanded' ? current : initialState));
43
63
  });
44
- return ((0, jsx_runtime_1.jsx)("div", { ref: wrapperRef, className: cx('root', className), style: {
45
- ...style,
46
- maxHeight: expanded ? undefined : `${itemHeight * lineLimit + gap * (lineLimit - 1)}px`,
47
- '--expandable-item-height': `${itemHeight}px`,
48
- '--expandable-opener-width': `${openerWidth}px`,
49
- '--expandable-gap': `${gap}px`,
50
- }, children: (0, jsx_runtime_1.jsxs)("ul", { ref: containerRef, className: expandable_group_module_scss_1.default.inner, children: [items, mounted && !expanded && ((0, jsx_runtime_1.jsx)(ItemContext.Provider, { value: { invisible: hiddenCount === 0, opener: true }, children: (0, jsx_runtime_1.jsx)(ExpandableItem, { ref: openerRef, onClick: () => {
51
- setExpanded(true);
52
- onExpand === null || onExpand === void 0 ? void 0 : onExpand();
53
- }, "data-testid": 'expandable:opener', children: opener({ hiddenCount }) }) }))] }) }));
64
+ // выполняем расчет
65
+ (0, hooks_1.useIsomorphicLayoutEffect)(() => {
66
+ if (state.status === 'initial') {
67
+ const outer = outerRef.current;
68
+ const inner = innerRef.current;
69
+ const opener = openerRef.current;
70
+ if (outer && inner && opener) {
71
+ const { lastVisibleIndex } = (0, utils_1.defineLastVisible)({ outer, inner, gap, opener, openerWidth });
72
+ setState({
73
+ status: lastVisibleIndex !== -1 ? 'some-hidden' : 'all-visible',
74
+ lastVisibleIndex,
75
+ });
76
+ }
77
+ }
78
+ }, [state, mounted]);
79
+ const rootStyle = {
80
+ ...style,
81
+ maxHeight: state.status === 'expanded'
82
+ ? undefined
83
+ : `${itemHeight * lineLimit + gap * (lineLimit - 1)}px`,
84
+ '--expandable-gap': `${gap}px`,
85
+ '--expandable-item-height': `${itemHeight}px`,
86
+ '--expandable-opener-width': `${openerWidth}px`,
87
+ };
88
+ const handleExpand = (0, react_1.useCallback)(() => {
89
+ setState(expandedState);
90
+ onExpand === null || onExpand === void 0 ? void 0 : onExpand();
91
+ }, [onExpand]);
92
+ const items = react_1.Children.toArray(children).reduce((result, child, index) => {
93
+ if ((0, react_1.isValidElement)(child) && child.type === ExpandableItem) {
94
+ result.push((0, jsx_runtime_1.jsx)(ItemContext.Provider, { value: {
95
+ hidden: state.status === 'some-hidden' && index > state.lastVisibleIndex,
96
+ }, children: child }, child.key));
97
+ }
98
+ return result;
99
+ }, []);
100
+ // ВАЖНО: root нужен для того чтобы формировать ограничение по высоте
101
+ return ((0, jsx_runtime_1.jsx)("div", { ref: outerRef, className: cx('root', className), style: rootStyle, children: (0, jsx_runtime_1.jsxs)("ul", { ref: innerRef, className: cx('inner'), children: [items, mounted && state.status !== 'expanded' && ((0, jsx_runtime_1.jsx)(ItemContext.Provider, { value: { hidden: state.status !== 'some-hidden' }, children: (0, jsx_runtime_1.jsx)(ExpandableItem, { ref: openerRef, onClick: handleExpand, "data-testid": 'expandable:opener', children: renderOpener({ hiddenCount: items.length - state.lastVisibleIndex - 1 }) }) }))] }) }));
54
102
  }
55
- exports.ExpandableGroup = ExpandableGroup;
56
103
  const ExpandableItem = (0, react_1.forwardRef)(({ children, onClick, 'data-testid': testId = 'expandable:item' }, ref) => {
57
- const context = (0, react_1.useContext)(ItemContext);
58
- return ((0, jsx_runtime_1.jsx)("li", { ref: ref, className: cx('item', context), "data-testid": testId, onClick: onClick, children: children }));
104
+ const { hidden } = (0, react_1.useContext)(ItemContext);
105
+ return ((0, jsx_runtime_1.jsx)("li", { ref: ref, className: cx('item', { hidden }), "data-testid": testId, onClick: onClick, children: children }));
59
106
  });
60
107
  exports.Expandable = {
61
108
  Group: ExpandableGroup,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/expandable/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/expandable/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import type { CSSProperties, MouseEventHandler, ReactNode } from 'react';
2
+ import type { WithTestId } from '../types';
3
+ export interface ExpandableGroupInnerStyle extends CSSProperties {
4
+ '--expandable-item-height'?: string;
5
+ '--expandable-opener-width'?: string;
6
+ '--expandable-gap'?: string;
7
+ }
8
+ export interface ExpandableGroupProps {
9
+ /** Расстояние между элементами группы в пикселях. */
10
+ gap?: number;
11
+ /** Высота каждого элемента группы в пикселях. */
12
+ itemHeight?: number;
13
+ /** Развернут ли список по умолчанию. */
14
+ defaultExpanded?: boolean;
15
+ /** Количество строк в свернутом состоянии группы. */
16
+ lineLimit?: number;
17
+ /** Содержимое. */
18
+ children?: ReactNode;
19
+ /** Функция, возвращающая содержимое кнопки разворачивания списка. */
20
+ opener?: (data: {
21
+ hiddenCount: number;
22
+ }) => ReactNode;
23
+ /** Сработает при разворачивании списка. */
24
+ onExpand?: () => void;
25
+ /** CSS-класс корневого элемента. */
26
+ className?: string;
27
+ /** Стили корневого элемента. */
28
+ style?: CSSProperties;
29
+ /** Нужно ли выводить список развернутым. */
30
+ expanded?: boolean;
31
+ /** Ширина открывающего элемента. */
32
+ openerWidth?: number;
33
+ }
34
+ export interface ExpandableGroupItemProps extends WithTestId {
35
+ /** Содержимое. */
36
+ children?: ReactNode;
37
+ /** Сработает при клике. */
38
+ onClick?: MouseEventHandler;
39
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/expandable/types.ts"],"names":[],"mappings":""}
@@ -1,31 +1,30 @@
1
1
  import { RefObject } from 'react';
2
- export interface ViewState {
3
- lastVisibleIndex: number;
4
- }
5
2
  /**
6
- * Хук состояния группы элементов ограниченных несколькими строками с возможностью показать все.
7
- * @param options.expanded Развернут ли список.
8
- * @param options.wrapperRef Реф элемента, формирующего ограничение по высоте.
9
- * @param options.containerRef Реф элемента, содержащего список.
10
- * @param options.openerRef Реф элемента "открывашки".
11
- * @param options.gap Расстояние между элементами списка.
12
- * @return Рассчитанные данные: кол-во скрытых элементов.
3
+ * Определяет последний дочерний элемент который должен быть виден чтобы влезла "открывашка".
4
+ * @param payload Данные.
5
+ * @return Результат.
6
+ *
7
+ * ВАЖНО: lastVisibleIndex: -1 означает что все элементы видны и "открывашка" не нужна.
13
8
  */
14
- export declare function useExpandable({ expanded, wrapperRef, containerRef, openerRef, gap, }: {
15
- expanded: boolean;
16
- wrapperRef: RefObject<HTMLElement>;
17
- containerRef: RefObject<HTMLElement>;
18
- openerRef: RefObject<HTMLElement>;
9
+ export declare function defineLastVisible({ outer, inner, gap, opener, openerWidth, }: {
10
+ outer: Element;
11
+ inner: Element;
19
12
  gap: number;
13
+ opener: Element;
14
+ openerWidth: number;
20
15
  }): {
21
- hiddenCount: number;
16
+ lastVisibleIndex: number;
22
17
  };
23
18
  /**
24
- * Определяет индекс последнего видимого элемента для свернутого списка.
25
- * @param wrapper Элемент, формирующий ограничение по высоте.
26
- * @param items Элементы, все кроме "закрывашки".
27
- * @param opener Элемент "закрывашки".
28
- * @param gap Расстояние между элементами списка.
29
- * @return Состояние.
19
+ * Регистрирует обработчик изменения ширины элемента.
20
+ * @param element Элемент.
21
+ * @param callback Callback.
22
+ * @return Функция отписки.
23
+ */
24
+ export declare function observeWidth(element: Element, callback: VoidFunction): () => void;
25
+ /**
26
+ * Хук для регистрации обработчика изменения ширины элемента.
27
+ * @param ref Ref элемента.
28
+ * @param callback Callback.
30
29
  */
31
- export declare function defineViewState(wrapper: HTMLElement, items: Element[], opener: HTMLElement, gap: number): ViewState;
30
+ export declare function useObserveWidth(ref: RefObject<Element>, callback: VoidFunction): void;
@@ -1,92 +1,77 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.defineViewState = exports.useExpandable = void 0;
3
+ exports.useObserveWidth = exports.observeWidth = exports.defineLastVisible = void 0;
7
4
  const react_1 = require("react");
8
- const hooks_1 = require("../hooks");
9
- const on_1 = require("../helpers/on");
10
- const expandable_group_module_scss_1 = __importDefault(require("./expandable-group.module.scss"));
11
5
  /**
12
- * Хук состояния группы элементов ограниченных несколькими строками с возможностью показать все.
13
- * @param options.expanded Развернут ли список.
14
- * @param options.wrapperRef Реф элемента, формирующего ограничение по высоте.
15
- * @param options.containerRef Реф элемента, содержащего список.
16
- * @param options.openerRef Реф элемента "открывашки".
17
- * @param options.gap Расстояние между элементами списка.
18
- * @return Рассчитанные данные: кол-во скрытых элементов.
6
+ * Определяет последний дочерний элемент который должен быть виден чтобы влезла "открывашка".
7
+ * @param payload Данные.
8
+ * @return Результат.
9
+ *
10
+ * ВАЖНО: lastVisibleIndex: -1 означает что все элементы видны и "открывашка" не нужна.
19
11
  */
20
- function useExpandable({ expanded, wrapperRef, containerRef, openerRef, gap, }) {
21
- const [hiddenCount, setHiddenCount] = (0, react_1.useState)(0);
22
- const calc = (0, react_1.useCallback)(() => {
23
- const wrapperEl = wrapperRef.current;
24
- const containerEl = containerRef.current;
25
- const openerEl = openerRef.current;
26
- if (expanded) {
27
- if (containerEl) {
28
- for (const item of containerEl.children) {
29
- item.classList.remove(expandable_group_module_scss_1.default.hidden);
30
- }
31
- }
32
- }
33
- else {
34
- if (wrapperEl && containerEl && openerEl) {
35
- const items = [...containerEl.children].filter(child => child !== openerEl);
36
- // делаем все элементы списка видимыми чтобы правильно считать размеры
37
- for (const item of items) {
38
- item.classList.remove(expandable_group_module_scss_1.default.hidden);
39
- }
40
- // определяем какие элементы не влезли в ограничение по высоте
41
- const state = defineViewState(wrapperEl, items, openerEl, gap);
42
- if (state.lastVisibleIndex !== -1) {
43
- // делаем невидимыми элементы списка которые не влезли
44
- for (const [index, item] of items.entries()) {
45
- if (item !== openerEl && index >= state.lastVisibleIndex) {
46
- item.classList.add(expandable_group_module_scss_1.default.hidden);
47
- }
48
- }
49
- }
50
- setHiddenCount(state.lastVisibleIndex !== -1 ? items.length - state.lastVisibleIndex : 0);
51
- }
52
- }
53
- }, [expanded, gap, wrapperRef, containerRef, openerRef]);
54
- // пересчитываем после каждого rerender'а
55
- (0, hooks_1.useIsomorphicLayoutEffect)(calc);
56
- // пересчитываем при resize
57
- (0, react_1.useEffect)(() => (0, on_1.on)(window, 'resize', calc), [calc]);
58
- return { hiddenCount };
12
+ function defineLastVisible({ outer, inner, gap, opener, openerWidth, }) {
13
+ const items = [...inner.children].filter(el => el !== opener);
14
+ // если список пуст или состоит из одного элемента - видны все, открывашка не нужна
15
+ if (items.length <= 1) {
16
+ return { lastVisibleIndex: -1 };
17
+ }
18
+ const bounds = outer.getBoundingClientRect();
19
+ // индекс последнего элемента который должен быть виден
20
+ let lastVisibleIndex = items.length - 1;
21
+ while (items[lastVisibleIndex] &&
22
+ items[lastVisibleIndex].getBoundingClientRect().bottom > bounds.bottom) {
23
+ lastVisibleIndex--;
24
+ }
25
+ const last = items[items.length - 1];
26
+ // если последний видимый является последним в списке - видны все, открывашка не нужна
27
+ if (last === items[lastVisibleIndex]) {
28
+ return { lastVisibleIndex: -1 };
29
+ }
30
+ while (lastVisibleIndex >= 1 &&
31
+ items[lastVisibleIndex] &&
32
+ bounds.right - items[lastVisibleIndex].getBoundingClientRect().right < openerWidth + gap) {
33
+ lastVisibleIndex--;
34
+ }
35
+ // @todo он не должен быть первым на строке
36
+ return { lastVisibleIndex };
59
37
  }
60
- exports.useExpandable = useExpandable;
38
+ exports.defineLastVisible = defineLastVisible;
61
39
  /**
62
- * Определяет индекс последнего видимого элемента для свернутого списка.
63
- * @param wrapper Элемент, формирующий ограничение по высоте.
64
- * @param items Элементы, все кроме "закрывашки".
65
- * @param opener Элемент "закрывашки".
66
- * @param gap Расстояние между элементами списка.
67
- * @return Состояние.
40
+ * Регистрирует обработчик изменения ширины элемента.
41
+ * @param element Элемент.
42
+ * @param callback Callback.
43
+ * @return Функция отписки.
68
44
  */
69
- function defineViewState(wrapper, items, opener, gap) {
70
- const state = { lastVisibleIndex: -1 };
71
- const parentRect = wrapper.getBoundingClientRect();
72
- const firstHiddenNodeIndex = items.findIndex(child => {
73
- const childRect = child.getBoundingClientRect();
74
- return childRect.top - parentRect.top >= parentRect.height;
45
+ function observeWidth(element, callback) {
46
+ // eslint-disable-next-line require-jsdoc
47
+ const getWidth = () => element.getBoundingClientRect().width;
48
+ let lastWidth = getWidth();
49
+ const observer = new ResizeObserver(() => {
50
+ requestAnimationFrame(() => {
51
+ const actualWidth = getWidth();
52
+ if (lastWidth !== actualWidth) {
53
+ lastWidth = actualWidth;
54
+ callback();
55
+ }
56
+ });
75
57
  });
76
- if (firstHiddenNodeIndex !== -1) {
77
- const lastVisibleIndex = firstHiddenNodeIndex - 1;
78
- const lastVisible = items[lastVisibleIndex];
79
- if (lastVisible) {
80
- const rightBound = lastVisible.getBoundingClientRect().right;
81
- const rightContainerBound = wrapper.getBoundingClientRect().right;
82
- // хватает ли кнопке места после последнего видимого дочернего элемента с учетом отступа между элементами
83
- const isOpenerFit = rightContainerBound - rightBound - gap >= opener.clientWidth;
84
- // если хватает места - ставим кнопку после последнего, иначе - вместо
85
- // @todo возможна ситуация когда нужно будет удалить N элементов чтобы влезла кнопка
86
- state.lastVisibleIndex = lastVisibleIndex + Number(isOpenerFit);
58
+ observer.observe(element);
59
+ return () => observer.disconnect();
60
+ }
61
+ exports.observeWidth = observeWidth;
62
+ /**
63
+ * Хук для регистрации обработчика изменения ширины элемента.
64
+ * @param ref Ref элемента.
65
+ * @param callback Callback.
66
+ */
67
+ function useObserveWidth(ref, callback) {
68
+ const callbackRef = (0, react_1.useRef)(callback);
69
+ callbackRef.current = callback;
70
+ (0, react_1.useEffect)(() => {
71
+ if (ref.current) {
72
+ return observeWidth(ref.current, () => callbackRef.current());
87
73
  }
88
- }
89
- return state;
74
+ }, [ref]);
90
75
  }
91
- exports.defineViewState = defineViewState;
76
+ exports.useObserveWidth = useObserveWidth;
92
77
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/expandable/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/expandable/utils.ts"],"names":[],"mappings":";;;AAAA,iCAAqD;AAErD;;;;;;GAMG;AACH,SAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,KAAK,EACL,GAAG,EACH,MAAM,EACN,WAAW,GAOZ;IACC,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;IAE9D,mFAAmF;IACnF,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE;QACrB,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC,EAAE,CAAC;KACjC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,qBAAqB,EAAE,CAAC;IAE7C,uDAAuD;IACvD,IAAI,gBAAgB,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAExC,OACE,KAAK,CAAC,gBAAgB,CAAC;QACvB,KAAK,CAAC,gBAAgB,CAAC,CAAC,qBAAqB,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EACtE;QACA,gBAAgB,EAAE,CAAC;KACpB;IAED,MAAM,IAAI,GAAwB,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE1D,sFAAsF;IACtF,IAAI,IAAI,KAAK,KAAK,CAAC,gBAAgB,CAAC,EAAE;QACpC,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC,EAAE,CAAC;KACjC;IAED,OACE,gBAAgB,IAAI,CAAC;QACrB,KAAK,CAAC,gBAAgB,CAAC;QACvB,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC,qBAAqB,EAAE,CAAC,KAAK,GAAG,WAAW,GAAG,GAAG,EACxF;QACA,gBAAgB,EAAE,CAAC;KACpB;IAED,2CAA2C;IAC3C,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAC9B,CAAC;AAjDD,8CAiDC;AAED;;;;;GAKG;AACH,SAAgB,YAAY,CAAC,OAAgB,EAAE,QAAsB;IACnE,yCAAyC;IACzC,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC;IAE7D,IAAI,SAAS,GAAG,QAAQ,EAAE,CAAC;IAE3B,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,GAAG,EAAE;QACvC,qBAAqB,CAAC,GAAG,EAAE;YACzB,MAAM,WAAW,GAAG,QAAQ,EAAE,CAAC;YAE/B,IAAI,SAAS,KAAK,WAAW,EAAE;gBAC7B,SAAS,GAAG,WAAW,CAAC;gBACxB,QAAQ,EAAE,CAAC;aACZ;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAE1B,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;AACrC,CAAC;AApBD,oCAoBC;AAED;;;;GAIG;AACH,SAAgB,eAAe,CAAC,GAAuB,EAAE,QAAsB;IAC7E,MAAM,WAAW,GAAG,IAAA,cAAM,EAAC,QAAQ,CAAC,CAAC;IACrC,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC;IAE/B,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,GAAG,CAAC,OAAO,EAAE;YACf,OAAO,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;SAC/D;IACH,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACZ,CAAC;AATD,0CASC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sima-land/ui-nucleons",
3
- "version": "45.0.0-alpha.6",
3
+ "version": "45.0.0-alpha.7",
4
4
  "repository": "ssh://git@github.com:sima-land/ui-nucleons.git",
5
5
  "author": "www.sima-land.ru team",
6
6
  "license": "Apache-2.0",
@@ -1,10 +1,10 @@
1
1
  /** @deprecated */
2
- export declare const color: (value: "basic-blue" | "basic-gray87" | "basic-gray76" | "basic-gray66" | "basic-gray54" | "basic-gray38" | "basic-gray24" | "basic-gray12" | "basic-gray8" | "basic-gray4" | "basic-gray2" | "basic-white" | "additional-deep-red" | "additional-red" | "additional-light-red" | "additional-teal" | "additional-green" | "additional-light-green" | "additional-lime" | "additional-faded-green" | "additional-pink" | "additional-purple" | "additional-violet" | "additional-deep-purple" | "additional-electric-blue" | "additional-light-blue" | "additional-cyan" | "additional-sky" | "additional-deep-orange" | "additional-amber" | "additional-yellow" | "additional-gold" | "additional-brown" | "additional-blue-gray" | "additional-deep-blue" | "additional-dark-blue") => string | undefined;
2
+ export declare const color: (value: "basic-blue" | "basic-gray87" | "basic-gray76" | "basic-gray66" | "basic-gray54" | "basic-gray38" | "basic-gray24" | "basic-gray12" | "basic-gray8" | "basic-gray4" | "basic-gray2" | "basic-white" | "additional-deep-red" | "additional-red" | "additional-light-red" | "additional-dark-teal" | "additional-teal" | "additional-green" | "additional-light-green" | "additional-lime" | "additional-faded-green" | "additional-pink" | "additional-purple" | "additional-violet" | "additional-deep-purple" | "additional-electric-blue" | "additional-light-blue" | "additional-cyan" | "additional-sky" | "additional-deep-orange" | "additional-amber" | "additional-yellow" | "additional-gold" | "additional-brown" | "additional-blue-gray" | "additional-deep-blue" | "additional-dark-blue" | "additional-unlit-blue") => string | undefined;
3
3
  /** @deprecated */
4
- export declare const hoverColor: (value: "basic-blue" | "basic-gray87" | "basic-gray76" | "basic-gray66" | "basic-gray54" | "basic-gray38" | "basic-gray24" | "basic-gray12" | "basic-gray8" | "basic-gray4" | "basic-gray2" | "basic-white" | "additional-deep-red" | "additional-red" | "additional-light-red" | "additional-teal" | "additional-green" | "additional-light-green" | "additional-lime" | "additional-faded-green" | "additional-pink" | "additional-purple" | "additional-violet" | "additional-deep-purple" | "additional-electric-blue" | "additional-light-blue" | "additional-cyan" | "additional-sky" | "additional-deep-orange" | "additional-amber" | "additional-yellow" | "additional-gold" | "additional-brown" | "additional-blue-gray" | "additional-deep-blue" | "additional-dark-blue") => string | undefined;
4
+ export declare const hoverColor: (value: "basic-blue" | "basic-gray87" | "basic-gray76" | "basic-gray66" | "basic-gray54" | "basic-gray38" | "basic-gray24" | "basic-gray12" | "basic-gray8" | "basic-gray4" | "basic-gray2" | "basic-white" | "additional-deep-red" | "additional-red" | "additional-light-red" | "additional-dark-teal" | "additional-teal" | "additional-green" | "additional-light-green" | "additional-lime" | "additional-faded-green" | "additional-pink" | "additional-purple" | "additional-violet" | "additional-deep-purple" | "additional-electric-blue" | "additional-light-blue" | "additional-cyan" | "additional-sky" | "additional-deep-orange" | "additional-amber" | "additional-yellow" | "additional-gold" | "additional-brown" | "additional-blue-gray" | "additional-deep-blue" | "additional-dark-blue" | "additional-unlit-blue") => string | undefined;
5
5
  /** @deprecated */
6
- export declare const bgColor: (value: "basic-blue" | "basic-gray87" | "basic-gray76" | "basic-gray66" | "basic-gray54" | "basic-gray38" | "basic-gray24" | "basic-gray12" | "basic-gray8" | "basic-gray4" | "basic-gray2" | "basic-white" | "additional-deep-red" | "additional-red" | "additional-light-red" | "additional-teal" | "additional-green" | "additional-light-green" | "additional-lime" | "additional-faded-green" | "additional-pink" | "additional-purple" | "additional-violet" | "additional-deep-purple" | "additional-electric-blue" | "additional-light-blue" | "additional-cyan" | "additional-sky" | "additional-deep-orange" | "additional-amber" | "additional-yellow" | "additional-gold" | "additional-brown" | "additional-blue-gray" | "additional-deep-blue" | "additional-dark-blue") => string | undefined;
6
+ export declare const bgColor: (value: "basic-blue" | "basic-gray87" | "basic-gray76" | "basic-gray66" | "basic-gray54" | "basic-gray38" | "basic-gray24" | "basic-gray12" | "basic-gray8" | "basic-gray4" | "basic-gray2" | "basic-white" | "additional-deep-red" | "additional-red" | "additional-light-red" | "additional-dark-teal" | "additional-teal" | "additional-green" | "additional-light-green" | "additional-lime" | "additional-faded-green" | "additional-pink" | "additional-purple" | "additional-violet" | "additional-deep-purple" | "additional-electric-blue" | "additional-light-blue" | "additional-cyan" | "additional-sky" | "additional-deep-orange" | "additional-amber" | "additional-yellow" | "additional-gold" | "additional-brown" | "additional-blue-gray" | "additional-deep-blue" | "additional-dark-blue" | "additional-unlit-blue") => string | undefined;
7
7
  /** @deprecated */
8
- export declare const stroke: (value: "basic-blue" | "basic-gray87" | "basic-gray76" | "basic-gray66" | "basic-gray54" | "basic-gray38" | "basic-gray24" | "basic-gray12" | "basic-gray8" | "basic-gray4" | "basic-gray2" | "basic-white" | "additional-deep-red" | "additional-red" | "additional-light-red" | "additional-teal" | "additional-green" | "additional-light-green" | "additional-lime" | "additional-faded-green" | "additional-pink" | "additional-purple" | "additional-violet" | "additional-deep-purple" | "additional-electric-blue" | "additional-light-blue" | "additional-cyan" | "additional-sky" | "additional-deep-orange" | "additional-amber" | "additional-yellow" | "additional-gold" | "additional-brown" | "additional-blue-gray" | "additional-deep-blue" | "additional-dark-blue") => string | undefined;
8
+ export declare const stroke: (value: "basic-blue" | "basic-gray87" | "basic-gray76" | "basic-gray66" | "basic-gray54" | "basic-gray38" | "basic-gray24" | "basic-gray12" | "basic-gray8" | "basic-gray4" | "basic-gray2" | "basic-white" | "additional-deep-red" | "additional-red" | "additional-light-red" | "additional-dark-teal" | "additional-teal" | "additional-green" | "additional-light-green" | "additional-lime" | "additional-faded-green" | "additional-pink" | "additional-purple" | "additional-violet" | "additional-deep-purple" | "additional-electric-blue" | "additional-light-blue" | "additional-cyan" | "additional-sky" | "additional-deep-orange" | "additional-amber" | "additional-yellow" | "additional-gold" | "additional-brown" | "additional-blue-gray" | "additional-deep-blue" | "additional-dark-blue" | "additional-unlit-blue") => string | undefined;
9
9
  /** @deprecated */
10
- export declare const fill: (value: "basic-blue" | "basic-gray87" | "basic-gray76" | "basic-gray66" | "basic-gray54" | "basic-gray38" | "basic-gray24" | "basic-gray12" | "basic-gray8" | "basic-gray4" | "basic-gray2" | "basic-white" | "additional-deep-red" | "additional-red" | "additional-light-red" | "additional-teal" | "additional-green" | "additional-light-green" | "additional-lime" | "additional-faded-green" | "additional-pink" | "additional-purple" | "additional-violet" | "additional-deep-purple" | "additional-electric-blue" | "additional-light-blue" | "additional-cyan" | "additional-sky" | "additional-deep-orange" | "additional-amber" | "additional-yellow" | "additional-gold" | "additional-brown" | "additional-blue-gray" | "additional-deep-blue" | "additional-dark-blue") => string | undefined;
10
+ export declare const fill: (value: "basic-blue" | "basic-gray87" | "basic-gray76" | "basic-gray66" | "basic-gray54" | "basic-gray38" | "basic-gray24" | "basic-gray12" | "basic-gray8" | "basic-gray4" | "basic-gray2" | "basic-white" | "additional-deep-red" | "additional-red" | "additional-light-red" | "additional-dark-teal" | "additional-teal" | "additional-green" | "additional-light-green" | "additional-lime" | "additional-faded-green" | "additional-pink" | "additional-purple" | "additional-violet" | "additional-deep-purple" | "additional-electric-blue" | "additional-light-blue" | "additional-cyan" | "additional-sky" | "additional-deep-orange" | "additional-amber" | "additional-yellow" | "additional-gold" | "additional-brown" | "additional-blue-gray" | "additional-deep-blue" | "additional-dark-blue" | "additional-unlit-blue") => string | undefined;
package/avatar/user.d.ts DELETED
@@ -1,10 +0,0 @@
1
- /// <reference types="react" />
2
- import { AvatarProps } from '.';
3
- export type UserAvatarProps = Omit<AvatarProps, 'bgColor' | 'bgOpacity' | 'textColor'>;
4
- export declare const colorKey: unique symbol;
5
- /**
6
- * Компонент аватара пользователя (не сотрудника).
7
- * @param props Свойства. Поддерживаются свойства Avatar.
8
- * @return Элемент.
9
- */
10
- export declare function UserAvatar(props: UserAvatarProps): JSX.Element;