@i-novus/n2o-components 7.29.14 → 7.29.16

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 (65) hide show
  1. package/README.md +34 -0
  2. package/lib/display/Collapse/Collapse.d.ts +4 -20
  3. package/lib/display/Collapse/Collapse.js +27 -12
  4. package/lib/display/Collapse/Collapse.js.map +1 -1
  5. package/lib/display/Collapse/helpers.d.ts +2 -0
  6. package/lib/display/Collapse/helpers.js +16 -0
  7. package/lib/display/Collapse/helpers.js.map +1 -0
  8. package/lib/display/Collapse/renderExpandIcon.d.ts +2 -0
  9. package/lib/display/Collapse/renderExpandIcon.js +11 -0
  10. package/lib/display/Collapse/renderExpandIcon.js.map +1 -0
  11. package/lib/display/Collapse/types.d.ts +24 -0
  12. package/lib/display/Collapse/types.js +2 -0
  13. package/lib/display/Collapse/types.js.map +1 -0
  14. package/lib/display/Collapse/useCollapse.d.ts +5 -0
  15. package/lib/display/Collapse/useCollapse.js +20 -0
  16. package/lib/display/Collapse/useCollapse.js.map +1 -0
  17. package/lib/display/HelpPopover.d.ts +8 -7
  18. package/lib/display/HelpPopover.js +4 -4
  19. package/lib/display/HelpPopover.js.map +1 -1
  20. package/lib/display/Icon.d.ts +2 -2
  21. package/lib/display/Icon.js +6 -5
  22. package/lib/display/Icon.js.map +1 -1
  23. package/lib/display/Panel/Content.d.ts +3 -0
  24. package/lib/display/Panel/Content.js +13 -0
  25. package/lib/display/Panel/Content.js.map +1 -0
  26. package/lib/display/Panel/Header.d.ts +3 -0
  27. package/lib/display/Panel/Header.js +8 -0
  28. package/lib/display/Panel/Header.js.map +1 -0
  29. package/lib/display/Panel/Panel.d.ts +6 -10
  30. package/lib/display/Panel/Panel.js +28 -9
  31. package/lib/display/Panel/Panel.js.map +1 -1
  32. package/lib/display/Panel/types.d.ts +36 -0
  33. package/lib/display/Panel/types.js +2 -0
  34. package/lib/display/Panel/types.js.map +1 -0
  35. package/lib/display/Panel/usePanelHeight.d.ts +6 -0
  36. package/lib/display/Panel/usePanelHeight.js +53 -0
  37. package/lib/display/Panel/usePanelHeight.js.map +1 -0
  38. package/lib/inputs/Checkbox/Checkbox.d.ts +6 -4
  39. package/lib/inputs/Checkbox/Checkbox.js +2 -2
  40. package/lib/inputs/Checkbox/Checkbox.js.map +1 -1
  41. package/lib/inputs/DatePicker/DateInputGroup.d.ts +1 -0
  42. package/lib/inputs/DatePicker/DateInputGroup.js +2 -2
  43. package/lib/inputs/DatePicker/DateInputGroup.js.map +1 -1
  44. package/lib/inputs/DatePicker/DateMask/WithDecorators.js +3 -2
  45. package/lib/inputs/DatePicker/DateMask/WithDecorators.js.map +1 -1
  46. package/lib/inputs/DatePicker/DateMask/types.d.ts +1 -0
  47. package/lib/inputs/DatePicker/DateTimeControl.js +1 -1
  48. package/lib/inputs/DatePicker/DateTimeControl.js.map +1 -1
  49. package/lib/inputs/DatePicker/types.d.ts +1 -0
  50. package/lib/inputs/InputSelect/InputContent.d.ts +5 -2
  51. package/lib/inputs/InputSelect/InputContent.js +2 -2
  52. package/lib/inputs/InputSelect/InputContent.js.map +1 -1
  53. package/lib/inputs/InputSelect/InputSelect.js +12 -3
  54. package/lib/inputs/InputSelect/InputSelect.js.map +1 -1
  55. package/lib/inputs/InputSelect/InputSelectGroup.d.ts +3 -0
  56. package/lib/inputs/InputSelect/InputSelectGroup.js.map +1 -1
  57. package/lib/inputs/InputSelect/SelectedItems.d.ts +5 -3
  58. package/lib/inputs/InputSelect/SelectedItems.js +15 -6
  59. package/lib/inputs/InputSelect/SelectedItems.js.map +1 -1
  60. package/lib/inputs/TextArea.d.ts +1 -0
  61. package/lib/inputs/TextArea.js +2 -2
  62. package/lib/inputs/TextArea.js.map +1 -1
  63. package/lib/layouts/Scroll/useSticky.js +3 -2
  64. package/lib/layouts/Scroll/useSticky.js.map +1 -1
  65. package/package.json +1 -2
package/README.md ADDED
@@ -0,0 +1,34 @@
1
+ # @i-novus/n2o-components
2
+
3
+ UI‑библиотека React-компонентов для **N2O framework**.
4
+
5
+ - Пакет: `@i-novus/n2o-components`
6
+ - Назначение: базовые UI-компоненты (inputs, кнопки, лэйауты, навигация, типографика, display-компоненты), стили и утилиты, используемые в экосистеме N2O.
7
+ - Стек: **React + TypeScript**, стили на **SCSS** (внутри пакета есть `src/styles`).
8
+
9
+ ---
10
+ ### Notes
11
+ - **lib** — собранный артефакт (build result; сюда попадает JS/d.ts/scss styles).
12
+ - **Исходники** находятся в `src/`. Новые компоненты рекомендуется добавлять в соответствующие папки (`inputs/`, `navigation/`, …).
13
+ - **Стили** хранятся в `src/styles`. Компонентные стили/миксины/переменные должны переиспользоваться оттуда.
14
+
15
+ ---
16
+ ## Основная структура src
17
+
18
+ #### Компоненты
19
+ - inputs — инпуты и контролы ввода: поля, селекты, чекбоксы, маски, редакторы и т.п.
20
+ Обычно здесь же находятся адаптеры/обёртки над сторонними input-библиотеками и общие для inputs интерфейсы.
21
+ - button — кнопки и близкие сущности (варианты кнопок, группы, иконки/лоадеры на кнопках и т.д.).
22
+ - display — компоненты отображения данных (не ввод): бейджи, теги, статусы, лейблы, превью/значения, различные “view”-компоненты.
23
+ - layouts — компоненты размептки: контейнеры, панели, сетки/колонки, обёртки для выравнивания, «каркасы» для страниц/виджетов.
24
+ - navigation — навигация: меню, хлебные крошки, вкладки, сайдбар/хедер-навигация и т.п.
25
+ - Typography — типографика: заголовки, текстовые стили, компоненты для единообразного вывода текста.
26
+
27
+ #### Стили
28
+ - styles — SCSS-стили: базовые переменные/миксины, темы, общие стили компонентов.
29
+
30
+ #### Вспомогательные ресурсы
31
+ - helpers — вспомогательные функции/обёртки “прикладного” уровня: форматирование, маппинги, небольшие хелперы для компонентов.
32
+ - utils — более “низкоуровневые” утилиты общего назначения (работа с типами, объектами, датами, проверками и т.п.), не привязанные к конкретным компонентам.
33
+ - types.ts — общие TypeScript-типы/интерфейсы, которые переиспользуются по всему пакету.
34
+ - tests — тесты.
@@ -1,24 +1,8 @@
1
- import { ReactNode } from 'react';
2
- /**
3
- * Компонент Collapse
4
- * @param {string | array} activeKey - активный ключ панели (При совпадении с ключами Panel происходит открытие последней)
5
- * @param {boolean} collapsible - флаг выключения возможности сворачивания
6
- * @returns {*}
7
- * @constructor
8
- */
9
- export interface Props {
10
- className?: string;
11
- children: ReactNode;
12
- collapsible?: boolean;
13
- defaultActiveKey?: string | null;
14
- destroyInactivePanel?: boolean;
15
- accordion?: boolean;
16
- dataKey?: string;
17
- isVisible?: boolean;
18
- onChange?(): void;
19
- }
1
+ import React from 'react';
2
+ import { type CollapseProps, type CollapseContextType } from './types';
3
+ export declare const CollapseContext: React.Context<CollapseContextType>;
20
4
  export declare const Collapse: {
21
- ({ className, children, collapsible, destroyInactivePanel, accordion, dataKey, isVisible, onChange, ...rest }: Props): JSX.Element;
5
+ ({ className, children, collapsible, destroyInactivePanel, accordion, isVisible, onChange, defaultActiveKey, activeKey, expandIcon, style, ...rest }: CollapseProps): JSX.Element | null;
22
6
  displayName: string;
23
7
  };
24
8
  export default Collapse;
@@ -1,19 +1,34 @@
1
1
  import { __rest } from "tslib";
2
- import React from 'react';
3
- // @ts-ignore import from js file
4
- import CollapseBody from 'rc-collapse';
2
+ import React, { useMemo, createContext } from 'react';
5
3
  import classNames from 'classnames';
6
- import { Icon } from '../Icon';
7
- const renderIcon = ({ isActive }, collapsible) => {
8
- if (!collapsible) {
4
+ import { useCollapse } from './useCollapse';
5
+ import { renderExpandIcon } from './renderExpandIcon';
6
+ export const CollapseContext = createContext({
7
+ activeKeys: [],
8
+ togglePanel: () => { },
9
+ });
10
+ export const Collapse = (_a) => {
11
+ var { className, children, collapsible = true, destroyInactivePanel = false, accordion = false, isVisible = true, onChange, defaultActiveKey, activeKey, expandIcon, style } = _a, rest = __rest(_a, ["className", "children", "collapsible", "destroyInactivePanel", "accordion", "isVisible", "onChange", "defaultActiveKey", "activeKey", "expandIcon", "style"]);
12
+ const { activeKeys, togglePanel } = useCollapse({
13
+ activeKey,
14
+ defaultActiveKey,
15
+ accordion,
16
+ collapsible,
17
+ onChange,
18
+ });
19
+ const value = useMemo(() => ({
20
+ activeKeys,
21
+ togglePanel,
22
+ collapsible,
23
+ destroyInactivePanel,
24
+ accordion,
25
+ expandIcon: expandIcon || renderExpandIcon,
26
+ }), [activeKeys, togglePanel, collapsible, destroyInactivePanel, accordion, expandIcon]);
27
+ if (!isVisible) {
9
28
  return null;
10
29
  }
11
- return (React.createElement("div", { className: "n2o-collapse-icon-wrapper" },
12
- React.createElement(Icon, { className: classNames('n2o-collapse-icon', { isActive }), name: "fa fa-angle-right" })));
13
- };
14
- export const Collapse = (_a) => {
15
- var { className = '', children, collapsible = true, destroyInactivePanel = false, accordion = false, dataKey = 'items', isVisible = true, onChange = () => { } } = _a, rest = __rest(_a, ["className", "children", "collapsible", "destroyInactivePanel", "accordion", "dataKey", "isVisible", "onChange"]);
16
- return (React.createElement(CollapseBody, Object.assign({ className: classNames('n2o-collapse', className), expandIcon: (props) => renderIcon(props, collapsible), destroyInactivePanel: destroyInactivePanel, accordion: accordion, dataKey: dataKey, isVisible: isVisible, onChange: onChange }, rest), children));
30
+ return (React.createElement(CollapseContext.Provider, { value: value },
31
+ React.createElement("div", Object.assign({ className: classNames('collapse-wrapper', className), style: style }, rest), children)));
17
32
  };
18
33
  Collapse.displayName = '@n2o-components/display/Collapse';
19
34
  export default Collapse;
@@ -1 +1 @@
1
- {"version":3,"file":"Collapse.js","sourceRoot":"","sources":["../../../src/display/Collapse/Collapse.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAoB,MAAM,OAAO,CAAA;AACxC,iCAAiC;AACjC,OAAO,YAAY,MAAM,aAAa,CAAA;AACtC,OAAO,UAAU,MAAM,YAAY,CAAA;AAEnC,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAE9B,MAAM,UAAU,GAAG,CAAC,EAAE,QAAQ,EAAyB,EAAE,WAAoB,EAAE,EAAE;IAC7E,IAAI,CAAC,WAAW,EAAE;QAAE,OAAO,IAAI,CAAA;KAAE;IAEjC,OAAO,CACH,6BAAK,SAAS,EAAC,2BAA2B;QACtC,oBAAC,IAAI,IACD,SAAS,EAAE,UAAU,CAAC,mBAAmB,EAAE,EAAE,QAAQ,EAAE,CAAC,EACxD,IAAI,EAAC,mBAAmB,GAC1B,CACA,CACT,CAAA;AACL,CAAC,CAAA;AAsBD,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,EAUjB,EAAE,EAAE;QAVa,EACrB,SAAS,GAAG,EAAE,EACd,QAAQ,EACR,WAAW,GAAG,IAAI,EAClB,oBAAoB,GAAG,KAAK,EAC5B,SAAS,GAAG,KAAK,EACjB,OAAO,GAAG,OAAO,EACjB,SAAS,GAAG,IAAI,EAChB,QAAQ,GAAG,GAAG,EAAE,GAAE,CAAC,OAEf,EADD,IAAI,cATc,iHAUxB,CADU;IAEP,OAAO,CACH,oBAAC,YAAY,kBACT,SAAS,EAAE,UAAU,CAAC,cAAc,EAAE,SAAS,CAAC,EAChD,UAAU,EAAE,CAAC,KAA4B,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC,EAC5E,oBAAoB,EAAE,oBAAoB,EAC1C,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,IACd,IAAI,GAEP,QAAQ,CACE,CAClB,CAAA;AACL,CAAC,CAAA;AAED,QAAQ,CAAC,WAAW,GAAG,kCAAkC,CAAA;AAEzD,eAAe,QAAQ,CAAA"}
1
+ {"version":3,"file":"Collapse.js","sourceRoot":"","sources":["../../../src/display/Collapse/Collapse.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AACrD,OAAO,UAAU,MAAM,YAAY,CAAA;AAGnC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAErD,MAAM,CAAC,MAAM,eAAe,GAAG,aAAa,CAAsB;IAC9D,UAAU,EAAE,EAAE;IACd,WAAW,EAAE,GAAG,EAAE,GAAE,CAAC;CACxB,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,EAaT,EAAE,EAAE;QAbK,EACrB,SAAS,EACT,QAAQ,EACR,WAAW,GAAG,IAAI,EAClB,oBAAoB,GAAG,KAAK,EAC5B,SAAS,GAAG,KAAK,EACjB,SAAS,GAAG,IAAI,EAChB,QAAQ,EACR,gBAAgB,EAChB,SAAS,EACT,UAAU,EACV,KAAK,OAEO,EADT,IAAI,cAZc,8JAaxB,CADU;IAEP,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,WAAW,CAAC;QAC5C,SAAS;QACT,gBAAgB;QAChB,SAAS;QACT,WAAW;QACX,QAAQ;KACX,CAAC,CAAA;IAEF,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACzB,UAAU;QACV,WAAW;QACX,WAAW;QACX,oBAAoB;QACpB,SAAS;QACT,UAAU,EAAE,UAAU,IAAI,gBAAgB;KAC7C,CAAC,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,oBAAoB,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAA;IAExF,IAAI,CAAC,SAAS,EAAE;QAAE,OAAO,IAAI,CAAA;KAAE;IAE/B,OAAO,CACH,oBAAC,eAAe,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK;QAClC,2CAAK,SAAS,EAAE,UAAU,CAAC,kBAAkB,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,IAAM,IAAI,GAC5E,QAAQ,CACP,CACiB,CAC9B,CAAA;AACL,CAAC,CAAA;AAED,QAAQ,CAAC,WAAW,GAAG,kCAAkC,CAAA;AAEzD,eAAe,QAAQ,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const normalizeToArray: (key?: string | string[] | null) => string[];
2
+ export declare const getNewActiveKeys: (activeKeys: string[], key: string, accordion?: boolean) => string[];
@@ -0,0 +1,16 @@
1
+ export const normalizeToArray = (key) => {
2
+ if (key == null) {
3
+ return [];
4
+ }
5
+ return Array.isArray(key) ? key : [key];
6
+ };
7
+ export const getNewActiveKeys = (activeKeys, key, accordion) => {
8
+ if (accordion) {
9
+ return activeKeys.includes(key) ? [] : [key];
10
+ }
11
+ if (activeKeys.includes(key)) {
12
+ return activeKeys.filter(k => k !== key);
13
+ }
14
+ return [...activeKeys, key];
15
+ };
16
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/display/Collapse/helpers.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,GAA8B,EAAY,EAAE;IACzE,IAAI,GAAG,IAAI,IAAI,EAAE;QAAE,OAAO,EAAE,CAAA;KAAE;IAE9B,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;AAC3C,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,UAAoB,EAAE,GAAW,EAAE,SAAmB,EAAY,EAAE;IACjG,IAAI,SAAS,EAAE;QACX,OAAO,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;KAC/C;IACD,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;QAC1B,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAA;KAC3C;IAED,OAAO,CAAC,GAAG,UAAU,EAAE,GAAG,CAAC,CAAA;AAC/B,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ /// <reference types="react" />
2
+ export declare const renderExpandIcon: (isActive: boolean, collapsible?: boolean) => JSX.Element | null;
@@ -0,0 +1,11 @@
1
+ import classNames from 'classnames';
2
+ import React from 'react';
3
+ import { Icon } from '../Icon';
4
+ export const renderExpandIcon = (isActive, collapsible = true) => {
5
+ if (!collapsible) {
6
+ return null;
7
+ }
8
+ return (React.createElement("div", { className: "n2o-collapse-icon-wrapper collapse-icon-wrapper" },
9
+ React.createElement(Icon, { className: classNames('collapse-icon', { isActive }), name: "fa fa-angle-right" })));
10
+ };
11
+ //# sourceMappingURL=renderExpandIcon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderExpandIcon.js","sourceRoot":"","sources":["../../../src/display/Collapse/renderExpandIcon.tsx"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAE9B,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,QAAiB,EAAE,WAAW,GAAG,IAAI,EAAE,EAAE;IACtE,IAAI,CAAC,WAAW,EAAE;QAAE,OAAO,IAAI,CAAA;KAAE;IAEjC,OAAO,CACH,6BAAK,SAAS,EAAC,iDAAiD;QAC5D,oBAAC,IAAI,IAAC,SAAS,EAAE,UAAU,CAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAC,mBAAmB,GAAG,CACrF,CACT,CAAA;AACL,CAAC,CAAA"}
@@ -0,0 +1,24 @@
1
+ import React, { ReactNode } from 'react';
2
+ export interface useCollapseProps {
3
+ collapsible?: boolean;
4
+ defaultActiveKey?: string | string[] | null;
5
+ activeKey?: string | string[];
6
+ accordion?: boolean;
7
+ onChange?(activeKey: string | string[]): void;
8
+ }
9
+ export interface CollapseProps extends useCollapseProps {
10
+ className?: string;
11
+ children: ReactNode;
12
+ destroyInactivePanel?: boolean;
13
+ isVisible?: boolean;
14
+ expandIcon?(isActive: boolean, collapsible?: boolean): ReactNode;
15
+ style?: React.CSSProperties;
16
+ }
17
+ export interface CollapseContextType {
18
+ activeKeys: string[];
19
+ togglePanel(key: string): void;
20
+ collapsible?: boolean;
21
+ destroyInactivePanel?: boolean;
22
+ accordion?: boolean;
23
+ expandIcon?(isActive: boolean, collapsible?: boolean): ReactNode;
24
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/display/Collapse/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ import { type useCollapseProps } from './types';
2
+ export declare const useCollapse: ({ activeKey, defaultActiveKey, accordion, collapsible, onChange, }: useCollapseProps) => {
3
+ activeKeys: string[];
4
+ togglePanel: (key: string) => void;
5
+ };
@@ -0,0 +1,20 @@
1
+ import { useState, useCallback, useMemo } from 'react';
2
+ import { NOOP_FUNCTION } from '../../utils/emptyTypes';
3
+ import { normalizeToArray, getNewActiveKeys } from './helpers';
4
+ export const useCollapse = ({ activeKey, defaultActiveKey, accordion, collapsible, onChange = NOOP_FUNCTION, }) => {
5
+ const [uncontrolledActiveKeys, setUncontrolledActiveKeys] = useState(() => normalizeToArray(defaultActiveKey));
6
+ const isControlled = activeKey !== undefined;
7
+ const activeKeys = useMemo(() => (isControlled ? normalizeToArray(activeKey) : uncontrolledActiveKeys), [isControlled, activeKey, uncontrolledActiveKeys]);
8
+ const togglePanel = useCallback((key) => {
9
+ if (!collapsible) {
10
+ return;
11
+ }
12
+ const newActiveKeys = getNewActiveKeys(activeKeys, key, accordion);
13
+ if (!isControlled) {
14
+ setUncontrolledActiveKeys(newActiveKeys);
15
+ }
16
+ onChange(accordion ? newActiveKeys[0] || '' : newActiveKeys);
17
+ }, [activeKeys, accordion, collapsible, isControlled, onChange]);
18
+ return { activeKeys, togglePanel };
19
+ };
20
+ //# sourceMappingURL=useCollapse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCollapse.js","sourceRoot":"","sources":["../../../src/display/Collapse/useCollapse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAEtD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAGtD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAE9D,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,EACxB,SAAS,EACT,gBAAgB,EAChB,SAAS,EACT,WAAW,EACX,QAAQ,GAAG,aAAa,GACT,EAAE,EAAE;IACnB,MAAM,CAAC,sBAAsB,EAAE,yBAAyB,CAAC,GAAG,QAAQ,CAAW,GAAG,EAAE,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,CAAA;IAExH,MAAM,YAAY,GAAG,SAAS,KAAK,SAAS,CAAA;IAE5C,MAAM,UAAU,GAAG,OAAO,CACtB,GAAG,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,EAC3E,CAAC,YAAY,EAAE,SAAS,EAAE,sBAAsB,CAAC,CACpD,CAAA;IAED,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,GAAW,EAAE,EAAE;QAC5C,IAAI,CAAC,WAAW,EAAE;YAAE,OAAM;SAAE;QAE5B,MAAM,aAAa,GAAG,gBAAgB,CAAC,UAAU,EAAE,GAAG,EAAE,SAAS,CAAC,CAAA;QAElE,IAAI,CAAC,YAAY,EAAE;YAAE,yBAAyB,CAAC,aAAa,CAAC,CAAA;SAAE;QAE/D,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAA;IAChE,CAAC,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAA;IAEhE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,CAAA;AACtC,CAAC,CAAA"}
@@ -1,16 +1,17 @@
1
1
  import React, { RefObject, MouseEvent } from 'react';
2
2
  import { PopoverProps } from 'reactstrap';
3
- declare type Props = {
4
- help: string | null;
3
+ export interface HelpPopoverProps {
4
+ help?: string | null | Node;
5
5
  icon?: string;
6
- placement?: PopoverProps['placement'];
7
- };
8
- export declare class HelpPopover extends React.Component<Props> {
6
+ helpPlacement?: PopoverProps['placement'];
7
+ helpTrigger?: 'hover' | 'focus' | 'click';
8
+ className?: string;
9
+ }
10
+ export declare class HelpPopover extends React.Component<HelpPopoverProps> {
9
11
  fieldId: string;
10
12
  button: RefObject<HTMLButtonElement>;
11
- constructor(props: Props);
13
+ constructor(props: HelpPopoverProps);
12
14
  focusOnClick: (e: MouseEvent<HTMLButtonElement>) => void;
13
15
  render(): JSX.Element | null;
14
16
  static displayName: string;
15
17
  }
16
- export {};
@@ -1,6 +1,7 @@
1
1
  import React, { createRef } from 'react';
2
2
  import { UncontrolledPopover, PopoverBody } from 'reactstrap';
3
3
  import DOMPurify from 'dompurify';
4
+ import classNames from 'classnames';
4
5
  import { id } from '../utils/id';
5
6
  import { Text } from '../Typography/Text';
6
7
  export class HelpPopover extends React.Component {
@@ -16,17 +17,16 @@ export class HelpPopover extends React.Component {
16
17
  this.button = createRef();
17
18
  }
18
19
  render() {
19
- const { help, placement = 'right', icon = 'fa fa-question-circle', } = this.props;
20
+ const { help, className, helpTrigger = 'focus', helpPlacement = 'right', icon = 'fa fa-question-circle', } = this.props;
20
21
  if (!help) {
21
22
  return null;
22
23
  }
23
- return (React.createElement("div", { className: "n2o-popover" },
24
+ return (React.createElement("div", { className: classNames('n2o-popover', className) },
24
25
  React.createElement("button", { onClick: this.focusOnClick, className: "n2o-popover-btn", id: this.fieldId, ref: this.button, type: "button", "aria-label": "popover-btn" },
25
26
  React.createElement("i", { className: icon })),
26
- React.createElement(UncontrolledPopover, { className: "n2o-popover-body", placement: placement, target: this.fieldId, trigger: "focus" },
27
+ React.createElement(UncontrolledPopover, { className: "n2o-popover-body", placement: helpPlacement, trigger: helpTrigger, target: this.fieldId },
27
28
  React.createElement(PopoverBody, null, typeof help === 'string'
28
29
  ? React.createElement(Text, null, help)
29
- /* eslint-disable-next-line react/no-danger */
30
30
  : React.createElement("div", { dangerouslySetInnerHTML: { __html: DOMPurify.sanitize(help) } })))));
31
31
  }
32
32
  }
@@ -1 +1 @@
1
- {"version":3,"file":"HelpPopover.js","sourceRoot":"","sources":["../../src/display/HelpPopover.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAa,SAAS,EAAc,MAAM,OAAO,CAAA;AAC/D,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAgB,MAAM,YAAY,CAAA;AAC3E,OAAO,SAAS,MAAM,WAAW,CAAA;AAEjC,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AAQzC,MAAM,OAAO,WAAY,SAAQ,KAAK,CAAC,SAAgB;IAKnD,YAAY,KAAY;QACpB,KAAK,CAAC,KAAK,CAAC,CAAA;QAMhB,iBAAY,GAAG,CAAC,CAAgC,EAAE,EAAE;;YAChD,CAAC,CAAC,eAAe,EAAE,CAAA;YACnB,CAAC,CAAC,cAAc,EAAE,CAAA;YAClB,MAAA,IAAI,CAAC,MAAM,CAAC,OAAO,0CAAE,KAAK,EAAE,CAAA;QAChC,CAAC,CAAA;QARG,IAAI,CAAC,OAAO,GAAG,EAAE,EAAE,CAAA;QACnB,IAAI,CAAC,MAAM,GAAG,SAAS,EAAE,CAAA;IAC7B,CAAC;IAQD,MAAM;QACF,MAAM,EACF,IAAI,EACJ,SAAS,GAAG,OAAO,EACnB,IAAI,GAAG,uBAAuB,GACjC,GAAG,IAAI,CAAC,KAAK,CAAA;QAEd,IAAI,CAAC,IAAI,EAAE;YAAE,OAAO,IAAI,CAAA;SAAE;QAE1B,OAAO,CACH,6BAAK,SAAS,EAAC,aAAa;YACxB,gCACI,OAAO,EAAE,IAAI,CAAC,YAAY,EAC1B,SAAS,EAAC,iBAAiB,EAC3B,EAAE,EAAE,IAAI,CAAC,OAAO,EAChB,GAAG,EAAE,IAAI,CAAC,MAAM,EAChB,IAAI,EAAC,QAAQ,gBACF,aAAa;gBAExB,2BAAG,SAAS,EAAE,IAAI,GAAI,CACjB;YACT,oBAAC,mBAAmB,IAChB,SAAS,EAAC,kBAAkB,EAC5B,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,IAAI,CAAC,OAAO,EACpB,OAAO,EAAC,OAAO;gBAEf,oBAAC,WAAW,QAEJ,OAAO,IAAI,KAAK,QAAQ;oBACpB,CAAC,CAAC,oBAAC,IAAI,QAAE,IAAI,CAAQ;oBACrB,8CAA8C;oBAC9C,CAAC,CAAC,6BAAK,uBAAuB,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAI,CAEtE,CACI,CACpB,CACT,CAAA;IACL,CAAC;;AAEM,uBAAW,GAAG,qCAAqC,CAAA"}
1
+ {"version":3,"file":"HelpPopover.js","sourceRoot":"","sources":["../../src/display/HelpPopover.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAa,SAAS,EAAc,MAAM,OAAO,CAAA;AAC/D,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAgB,MAAM,YAAY,CAAA;AAC3E,OAAO,SAAS,MAAM,WAAW,CAAA;AACjC,OAAO,UAAU,MAAM,YAAY,CAAA;AAEnC,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AAUzC,MAAM,OAAO,WAAY,SAAQ,KAAK,CAAC,SAA2B;IAK9D,YAAY,KAAuB;QAC/B,KAAK,CAAC,KAAK,CAAC,CAAA;QAMhB,iBAAY,GAAG,CAAC,CAAgC,EAAE,EAAE;;YAChD,CAAC,CAAC,eAAe,EAAE,CAAA;YACnB,CAAC,CAAC,cAAc,EAAE,CAAA;YAClB,MAAA,IAAI,CAAC,MAAM,CAAC,OAAO,0CAAE,KAAK,EAAE,CAAA;QAChC,CAAC,CAAA;QARG,IAAI,CAAC,OAAO,GAAG,EAAE,EAAE,CAAA;QACnB,IAAI,CAAC,MAAM,GAAG,SAAS,EAAE,CAAA;IAC7B,CAAC;IAQD,MAAM;QACF,MAAM,EACF,IAAI,EACJ,SAAS,EACT,WAAW,GAAG,OAAO,EACrB,aAAa,GAAG,OAAO,EACvB,IAAI,GAAG,uBAAuB,GACjC,GAAG,IAAI,CAAC,KAAK,CAAA;QAEd,IAAI,CAAC,IAAI,EAAE;YAAE,OAAO,IAAI,CAAA;SAAE;QAE1B,OAAO,CACH,6BAAK,SAAS,EAAE,UAAU,CAAC,aAAa,EAAE,SAAS,CAAC;YAChD,gCACI,OAAO,EAAE,IAAI,CAAC,YAAY,EAC1B,SAAS,EAAC,iBAAiB,EAC3B,EAAE,EAAE,IAAI,CAAC,OAAO,EAChB,GAAG,EAAE,IAAI,CAAC,MAAM,EAChB,IAAI,EAAC,QAAQ,gBACF,aAAa;gBAExB,2BAAG,SAAS,EAAE,IAAI,GAAI,CACjB;YACT,oBAAC,mBAAmB,IAChB,SAAS,EAAC,kBAAkB,EAC5B,SAAS,EAAE,aAAa,EACxB,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,IAAI,CAAC,OAAO;gBAEpB,oBAAC,WAAW,QACP,OAAO,IAAI,KAAK,QAAQ;oBACrB,CAAC,CAAC,oBAAC,IAAI,QAAE,IAAI,CAAQ;oBACrB,CAAC,CAAC,6BAAK,uBAAuB,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAI,CAClE,CACI,CACpB,CACT,CAAA;IACL,CAAC;;AAEM,uBAAW,GAAG,qCAAqC,CAAA"}
@@ -1,6 +1,6 @@
1
- import { ComponentProps } from 'react';
1
+ import { ComponentProps, ReactNode } from 'react';
2
2
  declare type Props = ComponentProps<'i'> & {
3
- name?: string;
3
+ name?: ReactNode | string;
4
4
  disabled?: boolean;
5
5
  };
6
6
  export declare function Icon({ name, className, disabled, ...props }: Props): JSX.Element | null;
@@ -1,14 +1,15 @@
1
1
  import { __rest } from "tslib";
2
- import React from 'react';
2
+ import React, { isValidElement } from 'react';
3
3
  import classNames from 'classnames';
4
4
  export function Icon(_a) {
5
- var { name = '', className, disabled = false } = _a, props = __rest(_a, ["name", "className", "disabled"]);
5
+ var { name, className, disabled = false } = _a, props = __rest(_a, ["name", "className", "disabled"]);
6
6
  if (!name) {
7
7
  return null;
8
8
  }
9
- const iconClass = classNames('n2o-icon', {
10
- [name]: name,
11
- [className || '']: className,
9
+ if (isValidElement(name)) {
10
+ return name;
11
+ }
12
+ const iconClass = classNames('n2o-icon', name, className, {
12
13
  disabled,
13
14
  });
14
15
  return React.createElement("i", Object.assign({ className: iconClass }, props));
@@ -1 +1 @@
1
- {"version":3,"file":"Icon.js","sourceRoot":"","sources":["../../src/display/Icon.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAyB,MAAM,OAAO,CAAA;AAC7C,OAAO,UAAU,MAAM,YAAY,CAAA;AAOnC,MAAM,UAAU,IAAI,CAAC,EAKb;QALa,EACjB,IAAI,GAAG,EAAE,EACT,SAAS,EACT,QAAQ,GAAG,KAAK,OAEZ,EADD,KAAK,cAJS,iCAKpB,CADW;IAER,IAAI,CAAC,IAAI,EAAE;QAAE,OAAO,IAAI,CAAA;KAAE;IAE1B,MAAM,SAAS,GAAG,UAAU,CAAC,UAAU,EAAE;QACrC,CAAC,IAAI,CAAC,EAAE,IAAI;QACZ,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,SAAS;QAC5B,QAAQ;KACX,CAAC,CAAA;IAEF,OAAO,yCAAG,SAAS,EAAE,SAAS,IAAM,KAAK,EAAI,CAAA;AACjD,CAAC"}
1
+ {"version":3,"file":"Icon.js","sourceRoot":"","sources":["../../src/display/Icon.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,EAAkB,cAAc,EAAa,MAAM,OAAO,CAAA;AACxE,OAAO,UAAU,MAAM,YAAY,CAAA;AAOnC,MAAM,UAAU,IAAI,CAAC,EAKb;QALa,EACjB,IAAI,EACJ,SAAS,EACT,QAAQ,GAAG,KAAK,OAEZ,EADD,KAAK,cAJS,iCAKpB,CADW;IAER,IAAI,CAAC,IAAI,EAAE;QAAE,OAAO,IAAI,CAAA;KAAE;IAE1B,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAA;KAAE;IAEzC,MAAM,SAAS,GAAG,UAAU,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE;QACtD,QAAQ;KACX,CAAC,CAAA;IAEF,OAAO,yCAAG,SAAS,EAAE,SAAS,IAAM,KAAK,EAAI,CAAA;AACjD,CAAC"}
@@ -0,0 +1,3 @@
1
+ /// <reference types="react" />
2
+ import { ContentProps } from './types';
3
+ export declare const Content: ({ children, isActive, openAnimation, forceRender, destroyInactivePanel, contentRef, }: ContentProps) => JSX.Element;
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ import classNames from 'classnames';
3
+ export const Content = ({ children, isActive, openAnimation, forceRender, destroyInactivePanel, contentRef, }) => {
4
+ const shouldRenderChildren = forceRender || isActive || !destroyInactivePanel;
5
+ return (React.createElement("div", { ref: contentRef, className: classNames('collapse-panel-content', {
6
+ 'collapse-panel-content-active': isActive,
7
+ 'collapse-panel-content-inactive': !isActive,
8
+ }), "aria-hidden": !isActive, style: {
9
+ transition: `height ${openAnimation.duration}ms ${openAnimation.easing}, opacity ${openAnimation.duration}ms ${openAnimation.easing}`,
10
+ } },
11
+ React.createElement("div", { className: "collapse-panel-content-box" }, shouldRenderChildren ? children : null)));
12
+ };
13
+ //# sourceMappingURL=Content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Content.js","sourceRoot":"","sources":["../../../src/display/Panel/Content.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,UAAU,MAAM,YAAY,CAAA;AAInC,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,EACpB,QAAQ,EACR,QAAQ,EACR,aAAa,EACb,WAAW,EACX,oBAAoB,EACpB,UAAU,GACC,EAAE,EAAE;IACf,MAAM,oBAAoB,GAAG,WAAW,IAAI,QAAQ,IAAI,CAAC,oBAAoB,CAAA;IAE7E,OAAO,CACH,6BACI,GAAG,EAAE,UAAU,EACf,SAAS,EAAE,UAAU,CAAC,wBAAwB,EAAE;YAC5C,+BAA+B,EAAE,QAAQ;YACzC,iCAAiC,EAAE,CAAC,QAAQ;SAC/C,CAAC,iBACW,CAAC,QAAQ,EACtB,KAAK,EAAE;YACH,UAAU,EAAE,UAAU,aAAa,CAAC,QAAQ,MAAM,aAAa,CAAC,MAAM,aAAa,aAAa,CAAC,QAAQ,MAAM,aAAa,CAAC,MAAM,EAAE;SACxI;QAED,6BAAK,SAAS,EAAC,4BAA4B,IACtC,oBAAoB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CACrC,CACJ,CACT,CAAA;AACL,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ /// <reference types="react" />
2
+ import { type HeaderProps } from './types';
3
+ export declare const Header: ({ header, headerClass, showArrow, expandIcon, extra, hasSeparator, isActive, isDisabled, onClick, collapsible, }: HeaderProps) => JSX.Element;
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import classNames from 'classnames';
3
+ export const Header = ({ header, headerClass, showArrow, expandIcon, extra, hasSeparator, isActive, isDisabled, onClick, collapsible, }) => (React.createElement("div", { className: classNames('collapse-panel-header', headerClass), onClick: onClick, role: "button", tabIndex: isDisabled ? -1 : 0, "aria-expanded": isActive, "aria-disabled": isDisabled },
4
+ showArrow && (expandIcon === null || expandIcon === void 0 ? void 0 : expandIcon(isActive, collapsible)),
5
+ React.createElement("div", { className: "n2o-panel-header-text collapse-panel-header-text" }, header),
6
+ extra && React.createElement("div", { className: "collapse-panel-extra" }, extra),
7
+ hasSeparator && React.createElement("div", { className: "divider" })));
8
+ //# sourceMappingURL=Header.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Header.js","sourceRoot":"","sources":["../../../src/display/Panel/Header.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,UAAU,MAAM,YAAY,CAAA;AAInC,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,EACnB,MAAM,EACN,WAAW,EACX,SAAS,EACT,UAAU,EACV,KAAK,EACL,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,OAAO,EACP,WAAW,GACD,EAAE,EAAE,CAAC,CACf,6BACI,SAAS,EAAE,UAAU,CAAC,uBAAuB,EAAE,WAAW,CAAC,EAC3D,OAAO,EAAE,OAAO,EAChB,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,mBACd,QAAQ,mBACR,UAAU;IAExB,SAAS,KAAI,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAG,QAAQ,EAAE,WAAW,CAAC,CAAA;IACjD,6BAAK,SAAS,EAAC,kDAAkD,IAAE,MAAM,CAAO;IAC/E,KAAK,IAAI,6BAAK,SAAS,EAAC,sBAAsB,IAAE,KAAK,CAAO;IAC5D,YAAY,IAAI,6BAAK,SAAS,EAAC,SAAS,GAAG,CAC1C,CACT,CAAA"}
@@ -1,11 +1,7 @@
1
- import { ReactNode } from 'react';
2
- export declare type Props = {
3
- className: string;
4
- header: JSX.Element;
5
- headerClass: string;
6
- children: ReactNode;
1
+ /// <reference types="react" />
2
+ import { type PanelProps } from './types';
3
+ export declare const Panel: {
4
+ ({ header, children, className, headerClass, hasSeparator, collapsible: panelCollapsible, forceRender, showArrow, disabled, style, extra, openAnimation, key, panelKey, destroyInactivePanel: panelDestroyInactivePanel, }: PanelProps): JSX.Element;
5
+ displayName: string;
7
6
  };
8
- export declare function Panel({ children, className, header, headerClass, ...rest }: Props): JSX.Element;
9
- export declare namespace Panel {
10
- var displayName: string;
11
- }
7
+ export default Panel;
@@ -1,11 +1,30 @@
1
- import { __rest } from "tslib";
2
- import React from 'react';
3
- // @ts-ignore import from js file
4
- import { Panel as PanelBody } from 'rc-collapse';
5
- import { Text } from '../../Typography/Text';
6
- export function Panel(_a) {
7
- var { children, className, header, headerClass } = _a, rest = __rest(_a, ["children", "className", "header", "headerClass"]);
8
- return (React.createElement(PanelBody, Object.assign({ header: React.createElement(Text, null, header), className: className, headerClass: headerClass }, rest), children));
9
- }
1
+ import React, { useContext, useRef } from 'react';
2
+ import classNames from 'classnames';
3
+ import { CollapseContext } from '../Collapse/Collapse';
4
+ import { usePanelHeight } from './usePanelHeight';
5
+ import { Header } from './Header';
6
+ import { Content } from './Content';
7
+ export const Panel = ({ header, children, className, headerClass, hasSeparator, collapsible: panelCollapsible, forceRender = false, showArrow = true, disabled = false, style, extra, openAnimation = { duration: 300, easing: 'ease' }, key, panelKey, destroyInactivePanel: panelDestroyInactivePanel, }) => {
8
+ const { activeKeys, togglePanel, collapsible: globalCollapsible, destroyInactivePanel: globalDestroyInactivePanel, expandIcon, } = useContext(CollapseContext);
9
+ const contentRef = useRef(null);
10
+ const keyValue = panelKey || key || '';
11
+ const collapsible = typeof panelCollapsible === 'boolean' ? panelCollapsible : globalCollapsible;
12
+ const isActive = activeKeys.includes(keyValue) || !collapsible;
13
+ const isDisabled = disabled || !collapsible;
14
+ usePanelHeight({ isActive, ref: contentRef });
15
+ const onClick = () => {
16
+ if (!isDisabled) {
17
+ togglePanel(keyValue);
18
+ }
19
+ };
20
+ const destroyInactivePanel = panelDestroyInactivePanel !== null && panelDestroyInactivePanel !== void 0 ? panelDestroyInactivePanel : globalDestroyInactivePanel;
21
+ return (React.createElement("div", { className: classNames('collapse-panel', className, {
22
+ 'collapse-panel-active': isActive,
23
+ 'collapse-panel-disabled': isDisabled,
24
+ }), style: style },
25
+ React.createElement(Header, { header: header, headerClass: headerClass, showArrow: showArrow, expandIcon: expandIcon, extra: extra, hasSeparator: hasSeparator, isActive: isActive, isDisabled: isDisabled, onClick: onClick, collapsible: collapsible }),
26
+ React.createElement(Content, { contentRef: contentRef, isActive: isActive, openAnimation: openAnimation, forceRender: forceRender, destroyInactivePanel: destroyInactivePanel }, children)));
27
+ };
10
28
  Panel.displayName = '@n2o-components/display/Panel';
29
+ export default Panel;
11
30
  //# sourceMappingURL=Panel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Panel.js","sourceRoot":"","sources":["../../../src/display/Panel/Panel.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAoB,MAAM,OAAO,CAAA;AACxC,iCAAiC;AACjC,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,aAAa,CAAA;AAEhD,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;AAS5C,MAAM,UAAU,KAAK,CAAC,EAA4D;QAA5D,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,OAAkB,EAAb,IAAI,cAAnD,kDAAqD,CAAF;IACrE,OAAO,CACH,oBAAC,SAAS,kBACN,MAAM,EAAE,oBAAC,IAAI,QAAE,MAAM,CAAQ,EAC7B,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,WAAW,IACpB,IAAI,GAEP,QAAQ,CACD,CACf,CAAA;AACL,CAAC;AAED,KAAK,CAAC,WAAW,GAAG,+BAA+B,CAAA"}
1
+ {"version":3,"file":"Panel.js","sourceRoot":"","sources":["../../../src/display/Panel/Panel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AACjD,OAAO,UAAU,MAAM,YAAY,CAAA;AAEnC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAEtD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGnC,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,EAClB,MAAM,EACN,QAAQ,EACR,SAAS,EACT,WAAW,EACX,YAAY,EACZ,WAAW,EAAE,gBAAgB,EAC7B,WAAW,GAAG,KAAK,EACnB,SAAS,GAAG,IAAI,EAChB,QAAQ,GAAG,KAAK,EAChB,KAAK,EACL,KAAK,EACL,aAAa,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,EACjD,GAAG,EACH,QAAQ,EACR,oBAAoB,EAAE,yBAAyB,GACtC,EAAE,EAAE;IACb,MAAM,EACF,UAAU,EACV,WAAW,EACX,WAAW,EAAE,iBAAiB,EAC9B,oBAAoB,EAAE,0BAA0B,EAChD,UAAU,GACb,GAAG,UAAU,CAAC,eAAe,CAAC,CAAA;IAE/B,MAAM,UAAU,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAA;IAC/C,MAAM,QAAQ,GAAG,QAAQ,IAAI,GAAG,IAAI,EAAE,CAAA;IACtC,MAAM,WAAW,GAAG,OAAO,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,iBAAiB,CAAA;IAChG,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAA;IAC9D,MAAM,UAAU,GAAG,QAAQ,IAAI,CAAC,WAAW,CAAA;IAE3C,cAAc,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAA;IAE7C,MAAM,OAAO,GAAG,GAAG,EAAE;QACjB,IAAI,CAAC,UAAU,EAAE;YAAE,WAAW,CAAC,QAAQ,CAAC,CAAA;SAAE;IAC9C,CAAC,CAAA;IAED,MAAM,oBAAoB,GAAG,yBAAyB,aAAzB,yBAAyB,cAAzB,yBAAyB,GAAI,0BAA0B,CAAA;IAEpF,OAAO,CACH,6BACI,SAAS,EAAE,UAAU,CAAC,gBAAgB,EAAE,SAAS,EAAE;YAC/C,uBAAuB,EAAE,QAAQ;YACjC,yBAAyB,EAAE,UAAU;SACxC,CAAC,EACF,KAAK,EAAE,KAAK;QAEZ,oBAAC,MAAM,IACH,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,KAAK,EACZ,YAAY,EAAE,YAAY,EAC1B,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,WAAW,GAC1B;QACF,oBAAC,OAAO,IACJ,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,WAAW,EACxB,oBAAoB,EAAE,oBAAoB,IAEzC,QAAQ,CACH,CACR,CACT,CAAA;AACL,CAAC,CAAA;AAED,KAAK,CAAC,WAAW,GAAG,+BAA+B,CAAA;AAEnD,eAAe,KAAK,CAAA"}
@@ -0,0 +1,36 @@
1
+ import { ReactNode, CSSProperties, RefObject } from 'react';
2
+ export interface PanelHeaderProps {
3
+ header: ReactNode;
4
+ headerClass?: string;
5
+ showArrow?: boolean;
6
+ expandIcon?(isActive: boolean, collapsible?: boolean): ReactNode;
7
+ extra?: ReactNode;
8
+ hasSeparator?: boolean;
9
+ collapsible?: boolean;
10
+ }
11
+ export interface PanelContentProps {
12
+ children: ReactNode;
13
+ forceRender?: boolean;
14
+ destroyInactivePanel?: boolean;
15
+ openAnimation?: {
16
+ duration?: number;
17
+ easing?: string;
18
+ };
19
+ }
20
+ export interface HeaderProps extends PanelHeaderProps {
21
+ isActive: boolean;
22
+ isDisabled: boolean;
23
+ onClick(): void;
24
+ }
25
+ export interface ContentProps extends PanelContentProps {
26
+ isActive: boolean;
27
+ openAnimation: NonNullable<PanelContentProps['openAnimation']>;
28
+ contentRef: RefObject<HTMLDivElement>;
29
+ }
30
+ export interface PanelProps extends PanelHeaderProps, PanelContentProps {
31
+ key?: string;
32
+ panelKey?: string;
33
+ className?: string;
34
+ style?: CSSProperties;
35
+ disabled?: boolean;
36
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/display/Panel/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ import { RefObject } from 'react';
2
+ export interface UsePanelHeightProps {
3
+ isActive: boolean;
4
+ ref: RefObject<HTMLDivElement>;
5
+ }
6
+ export declare const usePanelHeight: ({ isActive, ref }: UsePanelHeightProps) => void;
@@ -0,0 +1,53 @@
1
+ import { useEffect, useRef } from 'react';
2
+ // Эффект для управления высотой при изменении isActive
3
+ export const usePanelHeight = ({ isActive, ref }) => {
4
+ const isFirstRender = useRef(true);
5
+ useEffect(() => {
6
+ const contentElement = ref.current;
7
+ if (!contentElement) {
8
+ return;
9
+ }
10
+ // На первом рендере высота без анимации
11
+ if (isFirstRender.current) {
12
+ if (isActive) {
13
+ contentElement.style.height = 'auto';
14
+ }
15
+ else {
16
+ contentElement.style.height = '0px';
17
+ contentElement.style.overflow = 'hidden';
18
+ }
19
+ isFirstRender.current = false;
20
+ return;
21
+ }
22
+ if (isActive) {
23
+ contentElement.style.height = '0px';
24
+ contentElement.style.overflow = 'hidden';
25
+ requestAnimationFrame(() => {
26
+ const currentElement = ref.current;
27
+ if (!currentElement) {
28
+ return;
29
+ }
30
+ const height = currentElement.scrollHeight;
31
+ currentElement.style.height = `${height}px`;
32
+ setTimeout(() => {
33
+ if (currentElement) {
34
+ currentElement.style.height = 'auto';
35
+ currentElement.style.overflow = 'visible';
36
+ }
37
+ }, 300);
38
+ });
39
+ }
40
+ else {
41
+ const height = contentElement.scrollHeight;
42
+ contentElement.style.height = `${height}px`;
43
+ contentElement.style.overflow = 'hidden';
44
+ requestAnimationFrame(() => {
45
+ const currentElement = ref.current;
46
+ if (currentElement) {
47
+ currentElement.style.height = '0px';
48
+ }
49
+ });
50
+ }
51
+ }, [isActive]);
52
+ };
53
+ //# sourceMappingURL=usePanelHeight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePanelHeight.js","sourceRoot":"","sources":["../../../src/display/Panel/usePanelHeight.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAa,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAOpD,uDAAuD;AACvD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAuB,EAAE,EAAE;IACrE,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;IAElC,SAAS,CAAC,GAAG,EAAE;QACX,MAAM,cAAc,GAAG,GAAG,CAAC,OAAO,CAAA;QAElC,IAAI,CAAC,cAAc,EAAE;YAAE,OAAM;SAAE;QAE/B,wCAAwC;QACxC,IAAI,aAAa,CAAC,OAAO,EAAE;YACvB,IAAI,QAAQ,EAAE;gBACV,cAAc,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAA;aACvC;iBAAM;gBACH,cAAc,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAA;gBACnC,cAAc,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAA;aAC3C;YACD,aAAa,CAAC,OAAO,GAAG,KAAK,CAAA;YAE7B,OAAM;SACT;QAED,IAAI,QAAQ,EAAE;YACV,cAAc,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAA;YACnC,cAAc,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAA;YAExC,qBAAqB,CAAC,GAAG,EAAE;gBACvB,MAAM,cAAc,GAAG,GAAG,CAAC,OAAO,CAAA;gBAElC,IAAI,CAAC,cAAc,EAAE;oBAAE,OAAM;iBAAE;gBAE/B,MAAM,MAAM,GAAG,cAAc,CAAC,YAAY,CAAA;gBAE1C,cAAc,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAA;gBAE3C,UAAU,CAAC,GAAG,EAAE;oBACZ,IAAI,cAAc,EAAE;wBAChB,cAAc,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAA;wBACpC,cAAc,CAAC,KAAK,CAAC,QAAQ,GAAG,SAAS,CAAA;qBAC5C;gBACL,CAAC,EAAE,GAAG,CAAC,CAAA;YACX,CAAC,CAAC,CAAA;SACL;aAAM;YACH,MAAM,MAAM,GAAG,cAAc,CAAC,YAAY,CAAA;YAE1C,cAAc,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAA;YAC3C,cAAc,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAA;YAExC,qBAAqB,CAAC,GAAG,EAAE;gBACvB,MAAM,cAAc,GAAG,GAAG,CAAC,OAAO,CAAA;gBAElC,IAAI,cAAc,EAAE;oBAChB,cAAc,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAA;iBACtC;YACL,CAAC,CAAC,CAAA;SACL;IACL,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;AAClB,CAAC,CAAA"}
@@ -1,5 +1,6 @@
1
1
  import { MouseEvent, RefObject, LegacyRef, Component } from 'react';
2
- import { TBaseInputProps, TBaseProps } from '../../types';
2
+ import type { TBaseInputProps, TBaseProps } from '../../types';
3
+ import { type HelpPopoverProps } from '../../display/HelpPopover';
3
4
  /**
4
5
  * Альтернативный чекбокс
5
6
  * @reactProps {string|number} value - уникально определяет элемент
@@ -12,9 +13,9 @@ import { TBaseInputProps, TBaseProps } from '../../types';
12
13
  * @reactProps {string} help - подсказка в popover
13
14
  * @reactProps {boolean} inline - в ряд
14
15
  */
15
- export declare type Props = TBaseProps & TBaseInputProps<any> & {
16
+ declare type Enhancer = HelpPopoverProps & TBaseProps & TBaseInputProps<unknown>;
17
+ export interface Props extends Enhancer {
16
18
  checked?: boolean;
17
- help?: string;
18
19
  inline?: boolean;
19
20
  label?: string;
20
21
  onClick?(event: MouseEvent<HTMLDivElement>): void;
@@ -22,7 +23,7 @@ export declare type Props = TBaseProps & TBaseInputProps<any> & {
22
23
  forwardedRef?: RefObject<HTMLDivElement>;
23
24
  inputRef?: LegacyRef<HTMLInputElement>;
24
25
  preventDefault?: boolean;
25
- };
26
+ }
26
27
  export declare class Checkbox extends Component<Props> {
27
28
  state: {
28
29
  id: string;
@@ -30,3 +31,4 @@ export declare class Checkbox extends Component<Props> {
30
31
  componentDidMount(): void;
31
32
  render(): JSX.Element;
32
33
  }
34
+ export {};