@evergis/uilib-gl 1.0.113 → 1.0.115
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/dist/index.d.ts +1 -0
- package/dist/organisms/Tree/types.d.ts +2 -2
- package/dist/organisms/TreeDropdown/TreeDropdown.d.ts +3 -0
- package/dist/organisms/TreeDropdown/TreeDropdownItem.d.ts +3 -0
- package/dist/organisms/TreeDropdown/context.d.ts +4 -0
- package/dist/organisms/TreeDropdown/index.d.ts +3 -0
- package/dist/organisms/TreeDropdown/styled.d.ts +24 -0
- package/dist/organisms/TreeDropdown/types.d.ts +30 -0
- package/dist/organisms/TreeDropdown/useTreeDropdown.d.ts +15 -0
- package/dist/organisms/TreeDropdown/useTreeDropdownOpen.d.ts +7 -0
- package/dist/organisms/TreeDropdown/useTreeDropdownSelection.d.ts +3 -0
- package/dist/organisms/TreeDropdown/utils.d.ts +3 -0
- package/dist/uilib-gl.esm.js +425 -2
- package/dist/uilib-gl.esm.js.map +1 -1
- package/package.json +2 -3
package/dist/index.d.ts
CHANGED
|
@@ -84,6 +84,7 @@ export * from "./organisms/ChipAutoComplete";
|
|
|
84
84
|
export * from "./organisms/RangeDateInput";
|
|
85
85
|
export * from "./organisms/RangeNumberInput";
|
|
86
86
|
export * from "./organisms/Tree";
|
|
87
|
+
export * from "./organisms/TreeDropdown";
|
|
87
88
|
export * from "./organisms/JSONEditor";
|
|
88
89
|
export * from "./GlobalsContainer";
|
|
89
90
|
export * from "./injectGlobals";
|
|
@@ -15,7 +15,7 @@ export declare type TreeItemProps<T = any> = {
|
|
|
15
15
|
isLeaf?: boolean;
|
|
16
16
|
loading?: boolean;
|
|
17
17
|
totalCount?: number;
|
|
18
|
-
children?: TreeItemProps[];
|
|
18
|
+
children?: TreeItemProps[] | null;
|
|
19
19
|
additionalInfo?: ReactNode;
|
|
20
20
|
onClick?: VoidFunction;
|
|
21
21
|
};
|
|
@@ -28,7 +28,7 @@ export interface TreeItemComponentProps<T = any> {
|
|
|
28
28
|
isSelected?: boolean;
|
|
29
29
|
isDisabled?: boolean;
|
|
30
30
|
selectable?: boolean;
|
|
31
|
-
renderTree: (children?: TreeItemProps<T>[], isExpanded?: boolean, parentItem?: TreeItemProps<T>) => ReactNode;
|
|
31
|
+
renderTree: (children?: TreeItemProps<T>[] | null, isExpanded?: boolean, parentItem?: TreeItemProps<T>) => ReactNode;
|
|
32
32
|
withLoadMore?: boolean;
|
|
33
33
|
onLoadMore?: (item: TreeItemProps<T>) => Promisable<void>;
|
|
34
34
|
onExpand: (item: TreeItemProps<T>, isExpanded: boolean, onlyReload?: boolean) => Promisable<void>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export declare const FieldIcons: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, import("../../atoms/Grid").FlexProps, never>;
|
|
2
|
+
export declare const CountBadge: import("styled-components").StyledComponent<"span", import("styled-components").DefaultTheme, {}, never>;
|
|
3
|
+
export declare const ResetIcon: import("styled-components").StyledComponent<"span", import("styled-components").DefaultTheme, import("../../atoms/Icon").IIconProps, never>;
|
|
4
|
+
export declare const Chevron: import("styled-components").StyledComponent<"span", import("styled-components").DefaultTheme, import("../../atoms/Icon").IIconProps & {
|
|
5
|
+
isOpen?: boolean | undefined;
|
|
6
|
+
}, never>;
|
|
7
|
+
export declare const Content: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {
|
|
8
|
+
width?: string | undefined;
|
|
9
|
+
}, never>;
|
|
10
|
+
export declare const TreeScroll: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {
|
|
11
|
+
maxHeight?: string | undefined;
|
|
12
|
+
}, never>;
|
|
13
|
+
export declare const SpinnerContainer: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, import("../../atoms/Grid").FlexProps, never>;
|
|
14
|
+
export declare const CheckboxHolder: import("styled-components").StyledComponent<"span", import("styled-components").DefaultTheme, {}, never>;
|
|
15
|
+
/** Зазор chevron→checkbox и icon→text приводим к зазору checkbox→icon (0.625rem — margin-right чекбокса). */
|
|
16
|
+
export declare const RowExpand: import("styled-components").StyledComponent<"span", import("styled-components").DefaultTheme, import("../../atoms/Icon").IIconProps & {
|
|
17
|
+
isExpanded?: boolean | undefined;
|
|
18
|
+
hasChildren?: boolean | undefined;
|
|
19
|
+
}, never>;
|
|
20
|
+
export declare const RowContent: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, import("../../atoms/Grid").FlexProps, never>;
|
|
21
|
+
export declare const RowText: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, {
|
|
22
|
+
isLeaf?: boolean | undefined;
|
|
23
|
+
}, never>;
|
|
24
|
+
export declare const ItemBadge: import("styled-components").StyledComponent<"span", import("styled-components").DefaultTheme, {}, never>;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { TreeId, TreeItemProps, TreeProps } from "../Tree/types";
|
|
2
|
+
export interface ITreeDropdownProps {
|
|
3
|
+
className?: string;
|
|
4
|
+
width?: string;
|
|
5
|
+
menuHeight?: string;
|
|
6
|
+
zIndex?: number;
|
|
7
|
+
placeholder?: string;
|
|
8
|
+
multiSelect?: boolean;
|
|
9
|
+
loading?: boolean;
|
|
10
|
+
data: TreeProps["data"];
|
|
11
|
+
setData?: TreeProps["setData"];
|
|
12
|
+
expanded?: TreeProps["expanded"];
|
|
13
|
+
setExpanded?: TreeProps["setExpanded"];
|
|
14
|
+
onLoadChildren?: TreeProps["loadNode"];
|
|
15
|
+
selectedIds: Set<TreeId>;
|
|
16
|
+
selectedCount?: number;
|
|
17
|
+
selectedLabel?: string;
|
|
18
|
+
searchValue: string;
|
|
19
|
+
onSearchChange: (value: string) => void;
|
|
20
|
+
onOpen?: VoidFunction;
|
|
21
|
+
onClose?: VoidFunction;
|
|
22
|
+
onToggleSelect: (item: TreeItemProps) => void;
|
|
23
|
+
onReset?: VoidFunction;
|
|
24
|
+
}
|
|
25
|
+
export interface ITreeDropdownContextValue {
|
|
26
|
+
selectedIds: Set<TreeId>;
|
|
27
|
+
multiSelect?: boolean;
|
|
28
|
+
onToggleSelect: (item: TreeItemProps) => void;
|
|
29
|
+
getSubtreeBadge: (item: TreeItemProps) => number;
|
|
30
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ChangeEvent } from "react";
|
|
2
|
+
import { ITreeDropdownProps } from "./types";
|
|
3
|
+
export declare const useTreeDropdown: ({ multiSelect, selectedIds, selectedCount, selectedLabel, searchValue, onOpen, onClose, onToggleSelect, onReset, onSearchChange, }: ITreeDropdownProps) => {
|
|
4
|
+
open: boolean;
|
|
5
|
+
openDropdown: () => void;
|
|
6
|
+
closeDropdown: () => void;
|
|
7
|
+
toggleOpen: (event: import("react").MouseEvent<Element, MouseEvent>) => void;
|
|
8
|
+
handleReset: (event: {
|
|
9
|
+
stopPropagation: VoidFunction;
|
|
10
|
+
}) => void;
|
|
11
|
+
contextValue: import("./types").ITreeDropdownContextValue;
|
|
12
|
+
count: number;
|
|
13
|
+
displayValue: string;
|
|
14
|
+
onInputChange: (event: ChangeEvent<HTMLInputElement>) => void;
|
|
15
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { MouseEvent } from "react";
|
|
2
|
+
export declare const useTreeDropdownOpen: (onOpen?: VoidFunction | undefined, onClose?: VoidFunction | undefined) => {
|
|
3
|
+
open: boolean;
|
|
4
|
+
openDropdown: () => void;
|
|
5
|
+
closeDropdown: () => void;
|
|
6
|
+
toggleOpen: (event: MouseEvent) => void;
|
|
7
|
+
};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { ITreeDropdownContextValue } from "./types";
|
|
2
|
+
import { TreeId, TreeItemProps } from "../Tree/types";
|
|
3
|
+
export declare const useTreeDropdownSelection: (selectedIds: Set<TreeId>, onToggleSelect: (item: TreeItemProps) => void, closeDropdown: VoidFunction, multiSelect?: boolean | undefined) => ITreeDropdownContextValue;
|
package/dist/uilib-gl.esm.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { memo, Children, cloneElement, Component, isValidElement, useRef, useEffect, useState, useMemo, useCallback, useLayoutEffect, Fragment } from 'react';
|
|
1
|
+
import { memo, Children, cloneElement, Component, isValidElement, useRef, useEffect, useState, useMemo, useCallback, useLayoutEffect, Fragment, createContext, useContext } from 'react';
|
|
2
2
|
import styled, { ThemeProvider as ThemeProvider$1, css, useTheme as useTheme$1, keyframes, createGlobalStyle } from 'styled-components';
|
|
3
3
|
import merge from 'deepmerge';
|
|
4
4
|
import { rgb, hsl, hsla, opacify, ellipsis, transparentize, rem, normalize } from 'polished';
|
|
@@ -29760,6 +29760,429 @@ const TreeComponent = _ref => {
|
|
|
29760
29760
|
|
|
29761
29761
|
const Tree = /*#__PURE__*/memo(TreeComponent);
|
|
29762
29762
|
|
|
29763
|
+
const FieldIcons = /*#__PURE__*/styled(Flex)`
|
|
29764
|
+
position: absolute;
|
|
29765
|
+
top: 50%;
|
|
29766
|
+
right: 0.5rem;
|
|
29767
|
+
transform: translateY(-50%);
|
|
29768
|
+
align-items: center;
|
|
29769
|
+
gap: 0.25rem;
|
|
29770
|
+
width: max-content;
|
|
29771
|
+
white-space: nowrap;
|
|
29772
|
+
`;
|
|
29773
|
+
const CountBadge = styled.span`
|
|
29774
|
+
display: inline-flex;
|
|
29775
|
+
align-items: center;
|
|
29776
|
+
justify-content: center;
|
|
29777
|
+
min-width: 1.25rem;
|
|
29778
|
+
height: 1rem;
|
|
29779
|
+
padding: 0;
|
|
29780
|
+
border-radius: 0.5rem;
|
|
29781
|
+
background-color: ${_ref => {
|
|
29782
|
+
let {
|
|
29783
|
+
theme: {
|
|
29784
|
+
palette
|
|
29785
|
+
}
|
|
29786
|
+
} = _ref;
|
|
29787
|
+
return palette.primary;
|
|
29788
|
+
}};
|
|
29789
|
+
color: ${_ref2 => {
|
|
29790
|
+
let {
|
|
29791
|
+
theme: {
|
|
29792
|
+
palette
|
|
29793
|
+
}
|
|
29794
|
+
} = _ref2;
|
|
29795
|
+
return palette.background;
|
|
29796
|
+
}};
|
|
29797
|
+
font-size: 0.625rem;
|
|
29798
|
+
font-weight: 600;
|
|
29799
|
+
line-height: 1;
|
|
29800
|
+
`;
|
|
29801
|
+
const ResetIcon = /*#__PURE__*/styled(Icon)`
|
|
29802
|
+
width: 0.875rem;
|
|
29803
|
+
height: 0.875rem;
|
|
29804
|
+
cursor: pointer;
|
|
29805
|
+
color: ${_ref3 => {
|
|
29806
|
+
let {
|
|
29807
|
+
theme: {
|
|
29808
|
+
palette
|
|
29809
|
+
}
|
|
29810
|
+
} = _ref3;
|
|
29811
|
+
return palette.textSecondary;
|
|
29812
|
+
}};
|
|
29813
|
+
|
|
29814
|
+
&:after {
|
|
29815
|
+
font-size: 0.875rem;
|
|
29816
|
+
}
|
|
29817
|
+
|
|
29818
|
+
&:hover {
|
|
29819
|
+
color: ${_ref4 => {
|
|
29820
|
+
let {
|
|
29821
|
+
theme: {
|
|
29822
|
+
palette
|
|
29823
|
+
}
|
|
29824
|
+
} = _ref4;
|
|
29825
|
+
return palette.textPrimary;
|
|
29826
|
+
}};
|
|
29827
|
+
}
|
|
29828
|
+
`;
|
|
29829
|
+
const Chevron = /*#__PURE__*/styled(Icon)`
|
|
29830
|
+
width: 0.875rem;
|
|
29831
|
+
height: 0.875rem;
|
|
29832
|
+
cursor: pointer;
|
|
29833
|
+
transform: ${_ref5 => {
|
|
29834
|
+
let {
|
|
29835
|
+
isOpen
|
|
29836
|
+
} = _ref5;
|
|
29837
|
+
return isOpen ? "rotate(180deg)" : "";
|
|
29838
|
+
}};
|
|
29839
|
+
transition: transform ${transition.press};
|
|
29840
|
+
color: ${_ref6 => {
|
|
29841
|
+
let {
|
|
29842
|
+
theme: {
|
|
29843
|
+
palette
|
|
29844
|
+
}
|
|
29845
|
+
} = _ref6;
|
|
29846
|
+
return palette.textSecondary;
|
|
29847
|
+
}};
|
|
29848
|
+
|
|
29849
|
+
&:after {
|
|
29850
|
+
font-size: 0.875rem;
|
|
29851
|
+
}
|
|
29852
|
+
`;
|
|
29853
|
+
const Content = styled.div`
|
|
29854
|
+
width: ${_ref7 => {
|
|
29855
|
+
let {
|
|
29856
|
+
width
|
|
29857
|
+
} = _ref7;
|
|
29858
|
+
return width || "auto";
|
|
29859
|
+
}};
|
|
29860
|
+
padding: 0.5rem;
|
|
29861
|
+
box-sizing: border-box;
|
|
29862
|
+
`;
|
|
29863
|
+
const TreeScroll = styled.div`
|
|
29864
|
+
max-height: ${_ref8 => {
|
|
29865
|
+
let {
|
|
29866
|
+
maxHeight
|
|
29867
|
+
} = _ref8;
|
|
29868
|
+
return maxHeight || "15rem";
|
|
29869
|
+
}};
|
|
29870
|
+
overflow-y: auto;
|
|
29871
|
+
`;
|
|
29872
|
+
const SpinnerContainer = /*#__PURE__*/styled(Flex)`
|
|
29873
|
+
align-items: center;
|
|
29874
|
+
justify-content: center;
|
|
29875
|
+
min-height: 5rem;
|
|
29876
|
+
`;
|
|
29877
|
+
const CheckboxHolder = styled.span`
|
|
29878
|
+
display: inline-flex;
|
|
29879
|
+
align-items: center;
|
|
29880
|
+
pointer-events: none;
|
|
29881
|
+
`;
|
|
29882
|
+
/** Зазор chevron→checkbox и icon→text приводим к зазору checkbox→icon (0.625rem — margin-right чекбокса). */
|
|
29883
|
+
|
|
29884
|
+
const RowExpand = /*#__PURE__*/styled(TreeExpand)`
|
|
29885
|
+
margin-right: 0.625rem;
|
|
29886
|
+
`;
|
|
29887
|
+
const RowContent = /*#__PURE__*/styled(TreeContent)`
|
|
29888
|
+
gap: 0 0.625rem;
|
|
29889
|
+
`;
|
|
29890
|
+
const RowText = /*#__PURE__*/styled(TreeText)`
|
|
29891
|
+
font-size: 1rem;
|
|
29892
|
+
font-weight: normal;
|
|
29893
|
+
`;
|
|
29894
|
+
const ItemBadge = styled.span`
|
|
29895
|
+
display: inline-flex;
|
|
29896
|
+
align-items: center;
|
|
29897
|
+
justify-content: center;
|
|
29898
|
+
min-width: 1.25rem;
|
|
29899
|
+
height: 1rem;
|
|
29900
|
+
margin-left: 0.25rem;
|
|
29901
|
+
padding: 0;
|
|
29902
|
+
border-radius: 0.5rem;
|
|
29903
|
+
background-color: ${_ref9 => {
|
|
29904
|
+
let {
|
|
29905
|
+
theme: {
|
|
29906
|
+
palette
|
|
29907
|
+
}
|
|
29908
|
+
} = _ref9;
|
|
29909
|
+
return palette.element;
|
|
29910
|
+
}};
|
|
29911
|
+
color: ${_ref10 => {
|
|
29912
|
+
let {
|
|
29913
|
+
theme: {
|
|
29914
|
+
palette
|
|
29915
|
+
}
|
|
29916
|
+
} = _ref10;
|
|
29917
|
+
return palette.textSecondary;
|
|
29918
|
+
}};
|
|
29919
|
+
font-size: 0.625rem;
|
|
29920
|
+
font-weight: 600;
|
|
29921
|
+
line-height: 1;
|
|
29922
|
+
`;
|
|
29923
|
+
|
|
29924
|
+
const TreeDropdownContext = /*#__PURE__*/createContext(null);
|
|
29925
|
+
const useTreeDropdownContext = () => {
|
|
29926
|
+
const context = useContext(TreeDropdownContext);
|
|
29927
|
+
|
|
29928
|
+
if (!context) {
|
|
29929
|
+
throw new Error("useTreeDropdownContext must be used within TreeDropdown");
|
|
29930
|
+
}
|
|
29931
|
+
|
|
29932
|
+
return context;
|
|
29933
|
+
};
|
|
29934
|
+
|
|
29935
|
+
const MAX_BADGE_COUNT = 99;
|
|
29936
|
+
const formatCount = count => count > MAX_BADGE_COUNT ? `${MAX_BADGE_COUNT}+` : `${count}`;
|
|
29937
|
+
const countSelectedDescendants = (item, selectedIds) => {
|
|
29938
|
+
var _item$children;
|
|
29939
|
+
|
|
29940
|
+
if (!((_item$children = item.children) != null && _item$children.length)) {
|
|
29941
|
+
return 0;
|
|
29942
|
+
}
|
|
29943
|
+
|
|
29944
|
+
return item.children.reduce((sum, child) => {
|
|
29945
|
+
const selfCount = selectedIds.has(child.id) ? 1 : 0;
|
|
29946
|
+
return sum + selfCount + countSelectedDescendants(child, selectedIds);
|
|
29947
|
+
}, 0);
|
|
29948
|
+
};
|
|
29949
|
+
|
|
29950
|
+
const NOOP = () => undefined;
|
|
29951
|
+
|
|
29952
|
+
const TreeDropdownItemComponent = _ref => {
|
|
29953
|
+
let {
|
|
29954
|
+
item,
|
|
29955
|
+
parentItem,
|
|
29956
|
+
isExpanded,
|
|
29957
|
+
onExpand,
|
|
29958
|
+
renderTree
|
|
29959
|
+
} = _ref;
|
|
29960
|
+
const {
|
|
29961
|
+
selectedIds,
|
|
29962
|
+
multiSelect,
|
|
29963
|
+
onToggleSelect,
|
|
29964
|
+
getSubtreeBadge
|
|
29965
|
+
} = useTreeDropdownContext();
|
|
29966
|
+
const {
|
|
29967
|
+
id,
|
|
29968
|
+
text,
|
|
29969
|
+
isLeaf,
|
|
29970
|
+
loading,
|
|
29971
|
+
children
|
|
29972
|
+
} = item;
|
|
29973
|
+
const hasChildren = (children == null ? void 0 : children.length) > 0 || !!isLeaf;
|
|
29974
|
+
const isChecked = selectedIds.has(id);
|
|
29975
|
+
const badge = getSubtreeBadge(item);
|
|
29976
|
+
const onChevronClick = useCallback(event => {
|
|
29977
|
+
event.stopPropagation();
|
|
29978
|
+
onExpand(item, !isExpanded);
|
|
29979
|
+
}, [item, isExpanded, onExpand]);
|
|
29980
|
+
const onRowClick = useCallback(() => onToggleSelect(item), [item, onToggleSelect]);
|
|
29981
|
+
return React.createElement(TreeItemWrapper, null, React.createElement(TreeRow, {
|
|
29982
|
+
onClick: onRowClick,
|
|
29983
|
+
hasChildren: hasChildren
|
|
29984
|
+
}, React.createElement(RowExpand, {
|
|
29985
|
+
kind: "expand",
|
|
29986
|
+
isExpanded: isExpanded,
|
|
29987
|
+
hasChildren: hasChildren,
|
|
29988
|
+
onClick: onChevronClick
|
|
29989
|
+
}), multiSelect && React.createElement(CheckboxHolder, null, React.createElement(Checkbox, {
|
|
29990
|
+
checked: isChecked,
|
|
29991
|
+
onChange: NOOP
|
|
29992
|
+
})), React.createElement(RowContent, null, React.createElement(Icon, {
|
|
29993
|
+
kind: hasChildren ? "tree_folder_closed" : "textfile"
|
|
29994
|
+
}), React.createElement(RowText, {
|
|
29995
|
+
isLeaf: hasChildren
|
|
29996
|
+
}, text), badge > 0 && React.createElement(ItemBadge, null, formatCount(badge)))), renderTree(children, isExpanded, parentItem), loading && isExpanded && React.createElement(LoadingContainer, null, React.createElement(CircularProgress, {
|
|
29997
|
+
diameter: 1
|
|
29998
|
+
})));
|
|
29999
|
+
};
|
|
30000
|
+
|
|
30001
|
+
const TreeDropdownItem = /*#__PURE__*/memo(TreeDropdownItemComponent);
|
|
30002
|
+
|
|
30003
|
+
const useTreeDropdownOpen = (onOpen, onClose) => {
|
|
30004
|
+
const [open, setOpen] = useState(false);
|
|
30005
|
+
const openDropdown = useCallback(() => {
|
|
30006
|
+
setOpen(current => {
|
|
30007
|
+
if (!current) {
|
|
30008
|
+
onOpen == null ? void 0 : onOpen();
|
|
30009
|
+
}
|
|
30010
|
+
|
|
30011
|
+
return true;
|
|
30012
|
+
});
|
|
30013
|
+
}, [onOpen]);
|
|
30014
|
+
const closeDropdown = useCallback(() => {
|
|
30015
|
+
setOpen(current => {
|
|
30016
|
+
if (current) {
|
|
30017
|
+
onClose == null ? void 0 : onClose();
|
|
30018
|
+
}
|
|
30019
|
+
|
|
30020
|
+
return false;
|
|
30021
|
+
});
|
|
30022
|
+
}, [onClose]);
|
|
30023
|
+
const toggleOpen = useCallback(event => {
|
|
30024
|
+
event.stopPropagation();
|
|
30025
|
+
setOpen(current => {
|
|
30026
|
+
if (current) {
|
|
30027
|
+
onClose == null ? void 0 : onClose();
|
|
30028
|
+
} else {
|
|
30029
|
+
onOpen == null ? void 0 : onOpen();
|
|
30030
|
+
}
|
|
30031
|
+
|
|
30032
|
+
return !current;
|
|
30033
|
+
});
|
|
30034
|
+
}, [onOpen, onClose]);
|
|
30035
|
+
return {
|
|
30036
|
+
open,
|
|
30037
|
+
openDropdown,
|
|
30038
|
+
closeDropdown,
|
|
30039
|
+
toggleOpen
|
|
30040
|
+
};
|
|
30041
|
+
};
|
|
30042
|
+
|
|
30043
|
+
const useTreeDropdownSelection = (selectedIds, onToggleSelect, closeDropdown, multiSelect) => {
|
|
30044
|
+
const handleToggleSelect = useCallback(item => {
|
|
30045
|
+
onToggleSelect(item);
|
|
30046
|
+
|
|
30047
|
+
if (!multiSelect) {
|
|
30048
|
+
closeDropdown();
|
|
30049
|
+
}
|
|
30050
|
+
}, [multiSelect, onToggleSelect, closeDropdown]);
|
|
30051
|
+
const getSubtreeBadge = useCallback(item => countSelectedDescendants(item, selectedIds), [selectedIds]);
|
|
30052
|
+
return useMemo(() => ({
|
|
30053
|
+
selectedIds,
|
|
30054
|
+
multiSelect,
|
|
30055
|
+
onToggleSelect: handleToggleSelect,
|
|
30056
|
+
getSubtreeBadge
|
|
30057
|
+
}), [selectedIds, multiSelect, handleToggleSelect, getSubtreeBadge]);
|
|
30058
|
+
};
|
|
30059
|
+
|
|
30060
|
+
const useTreeDropdown = _ref => {
|
|
30061
|
+
let {
|
|
30062
|
+
multiSelect,
|
|
30063
|
+
selectedIds,
|
|
30064
|
+
selectedCount,
|
|
30065
|
+
selectedLabel,
|
|
30066
|
+
searchValue,
|
|
30067
|
+
onOpen,
|
|
30068
|
+
onClose,
|
|
30069
|
+
onToggleSelect,
|
|
30070
|
+
onReset,
|
|
30071
|
+
onSearchChange
|
|
30072
|
+
} = _ref;
|
|
30073
|
+
const {
|
|
30074
|
+
open,
|
|
30075
|
+
openDropdown,
|
|
30076
|
+
closeDropdown,
|
|
30077
|
+
toggleOpen
|
|
30078
|
+
} = useTreeDropdownOpen(onOpen, onClose);
|
|
30079
|
+
const contextValue = useTreeDropdownSelection(selectedIds, onToggleSelect, closeDropdown, multiSelect);
|
|
30080
|
+
const handleReset = useCallback(event => {
|
|
30081
|
+
event.stopPropagation();
|
|
30082
|
+
onReset == null ? void 0 : onReset();
|
|
30083
|
+
}, [onReset]);
|
|
30084
|
+
const count = selectedCount ?? selectedIds.size;
|
|
30085
|
+
const displayValue = useMemo(() => open ? searchValue : multiSelect ? "" : selectedLabel ?? "", [open, searchValue, multiSelect, selectedLabel]);
|
|
30086
|
+
const onInputChange = useCallback(event => {
|
|
30087
|
+
openDropdown();
|
|
30088
|
+
onSearchChange(event.target.value);
|
|
30089
|
+
}, [openDropdown, onSearchChange]);
|
|
30090
|
+
return {
|
|
30091
|
+
open,
|
|
30092
|
+
openDropdown,
|
|
30093
|
+
closeDropdown,
|
|
30094
|
+
toggleOpen,
|
|
30095
|
+
handleReset,
|
|
30096
|
+
contextValue,
|
|
30097
|
+
count,
|
|
30098
|
+
displayValue,
|
|
30099
|
+
onInputChange
|
|
30100
|
+
};
|
|
30101
|
+
};
|
|
30102
|
+
|
|
30103
|
+
const INPUT_STYLE = {
|
|
30104
|
+
cursor: "pointer",
|
|
30105
|
+
caretColor: "transparent",
|
|
30106
|
+
userSelect: "none"
|
|
30107
|
+
};
|
|
30108
|
+
|
|
30109
|
+
const preventInputFocus = event => event.preventDefault();
|
|
30110
|
+
|
|
30111
|
+
const TreeDropdownComponent = props => {
|
|
30112
|
+
const {
|
|
30113
|
+
className,
|
|
30114
|
+
width = "19.5rem",
|
|
30115
|
+
menuHeight,
|
|
30116
|
+
zIndex,
|
|
30117
|
+
placeholder,
|
|
30118
|
+
multiSelect,
|
|
30119
|
+
loading,
|
|
30120
|
+
data,
|
|
30121
|
+
setData,
|
|
30122
|
+
expanded,
|
|
30123
|
+
setExpanded,
|
|
30124
|
+
onLoadChildren,
|
|
30125
|
+
onReset
|
|
30126
|
+
} = props;
|
|
30127
|
+
const {
|
|
30128
|
+
open,
|
|
30129
|
+
closeDropdown,
|
|
30130
|
+
toggleOpen,
|
|
30131
|
+
handleReset,
|
|
30132
|
+
contextValue,
|
|
30133
|
+
count,
|
|
30134
|
+
displayValue,
|
|
30135
|
+
onInputChange
|
|
30136
|
+
} = useTreeDropdown(props);
|
|
30137
|
+
const iconAfter = React.createElement(FieldIcons, null, multiSelect && count > 0 && React.createElement(CountBadge, null, formatCount(count)), count > 0 && onReset && React.createElement(ResetIcon, {
|
|
30138
|
+
kind: "close",
|
|
30139
|
+
onClick: handleReset
|
|
30140
|
+
}), React.createElement(Chevron, {
|
|
30141
|
+
kind: "input_dropdown",
|
|
30142
|
+
isOpen: open,
|
|
30143
|
+
onClick: toggleOpen
|
|
30144
|
+
}));
|
|
30145
|
+
return React.createElement(Popover, {
|
|
30146
|
+
open: open,
|
|
30147
|
+
onRequestClose: closeDropdown,
|
|
30148
|
+
anchorOrigin: "bottom-left",
|
|
30149
|
+
targetOrigin: "top-left",
|
|
30150
|
+
animateX: false,
|
|
30151
|
+
zIndex: zIndex,
|
|
30152
|
+
anchor: React.createElement("div", {
|
|
30153
|
+
onClick: toggleOpen
|
|
30154
|
+
}, React.createElement(Input$1, {
|
|
30155
|
+
readOnly: true,
|
|
30156
|
+
style: INPUT_STYLE,
|
|
30157
|
+
className: className,
|
|
30158
|
+
width: width,
|
|
30159
|
+
value: displayValue,
|
|
30160
|
+
placeholder: placeholder,
|
|
30161
|
+
iconAfter: iconAfter,
|
|
30162
|
+
onChange: onInputChange,
|
|
30163
|
+
onMouseDown: preventInputFocus
|
|
30164
|
+
}))
|
|
30165
|
+
}, React.createElement(Content, {
|
|
30166
|
+
width: width
|
|
30167
|
+
}, loading ? React.createElement(SpinnerContainer, null, React.createElement(CircularProgress, {
|
|
30168
|
+
diameter: 2
|
|
30169
|
+
})) : React.createElement(TreeDropdownContext.Provider, {
|
|
30170
|
+
value: contextValue
|
|
30171
|
+
}, React.createElement(TreeScroll, {
|
|
30172
|
+
maxHeight: menuHeight
|
|
30173
|
+
}, React.createElement(Tree, {
|
|
30174
|
+
data: data,
|
|
30175
|
+
setData: setData,
|
|
30176
|
+
expanded: expanded,
|
|
30177
|
+
setExpanded: setExpanded,
|
|
30178
|
+
selectable: false,
|
|
30179
|
+
loadNode: onLoadChildren,
|
|
30180
|
+
Item: TreeDropdownItem
|
|
30181
|
+
})))));
|
|
30182
|
+
};
|
|
30183
|
+
|
|
30184
|
+
const TreeDropdown = /*#__PURE__*/memo(TreeDropdownComponent);
|
|
30185
|
+
|
|
29763
30186
|
const JSONEditorContainer = styled.div`
|
|
29764
30187
|
position: relative;
|
|
29765
30188
|
width: 100%;
|
|
@@ -32047,5 +32470,5 @@ const JSONEditorBase = _ref => {
|
|
|
32047
32470
|
|
|
32048
32471
|
const JSONEditor = /*#__PURE__*/memo(JSONEditorBase);
|
|
32049
32472
|
|
|
32050
|
-
export { ActionButton, Actions, ActionsGroup, AdditionalInfo, AnchorContainer, AutoComplete, BaseButton, Blank, Box, ButtonsGroup, ButtonsGroupComponent, CSSTransition, Card, CardBodyContainer, Header$1 as CardHeader, ImageGradientOverlay as CardImageGradientOverlay, ImageOverlay as CardImageOverlay, CardLoader, Checkbox, CheckboxComponent, Chip, ChipAutoCompleDivider, ChipAutoCompleSlider, ChipAutoComplete, ChipAutoCompleteControlFlex, ChipAutoCompleteMode, ChipAutoCompleteTags, ChipContainer, ChipInput, ChipInputHolder, Circle, CircularProgress, Collapse, CollapseWrapper, ColorButton, ColorInput, ColorPicker, ComparisonOperator, Container$5 as Container, CustomButton, CustomToggle, DATE_FORMAT, DATE_TIME_FORMAT, DataGrid, DatePicker, Description, Dialog, DialogActions, DialogComponent, DialogContent, DialogOverlay, DialogTitle, Divider, DividerLine, DragAreaWrapper, DraggableTree, DraggableTreeContainer, DraggableTreeItem, DropHereTitle, Dropdown, DropdownContainer, DropdownField, DropdownOptionIcon, ElementsArea, Expander, FILE_SIZE_STEP, FadingIcon, FieldValue, FileExt, FileInfoComment, FileInfoName, FileInfoProgress, FileInfoTitle, FileSymbolContainer, FilterInput, FlatButton, Flex, FlexSpan, FocusTrap, GlobalsContainer, H1, H2, H3, H4, Handlers, HueMap, HueSlider, selection as IcoMoonSelection, Icon, IconButton, IconButtonButton, IconButtonInnerChild, IconMenu, IconToggle, IconToggleButton, IconToggleText, Image, ImageLoader, InfiniteScroll, InfiniteScrollContainer, InfiniteScrollLoaderContainer, InjectGlobalStyles, Input$1 as Input, InputLabel, InputsGroup, InputsGroupContainer, InputsGroupELement, InputsGroupElements, InputsGroupLabel, ItemContainer, JSONEditor, JSONEditorContainer, JSONEditorLinearProgress, JSONEditorWrapper, Label$2 as Label, LabeledTextarea, LeftSide, LegendToggler, LinearLoader, LinearProgress, Link, ListTransition, LoadMoreButton, LoadingContainer, MAX_NUMBER, MB_FILE_SIZE, MIN_NUMBER, MaskedComponent, Menu, MenuContainer, Message, MultiSelectContainer, Notifications, NumberInput, NumberRangeContainer, NumberRangeInputContainer, NumberRangeSlider, NumberRangeSliderContainer, NumberRangeSliderLabel, OpacitySlider, Option, OptionContainer, OptionDescription, OptionIcon, OptionText, OptionToggler, OptionValueContainer, OptionValueWrapper, PaginationFull, PaginationSimple, Paragraph, PasswordToggle, Placeholder, Popover, PopoverTransition, Popup$1 as Popup, Portal, Preview, Radio$1 as Radio, RadioGroup, RaisedButton, RangeDateInput, RangeDatePicker, RangeNumberInput, RatioLine, RegularIconButton, SEPARATED_TIME_FORMAT, SearchField, SearchInputContainer, SelectFromComputerTitle, SimpleInput, Slider, SliderContainer$2 as SliderContainer, HandleContainer as SliderHandle, Label$1 as SliderLabel, LowerTrackBackground as SliderLowerTrackBackground, SliderPopover, Track as SliderTrack, SortToggle, Spinner, Stepper, StyledInput, Switch, SwitchArea, SwitchContainer, SwitchTitle, Switcher, SymbolLibrary, SymbolPreview, THROTTLING_DELAY, TIME_FORMAT, TabBlock, TabContainer, TabContainerLine, Tabs, Text, TextTrim, Textarea, ThemeProvider, Tippy, TitleText, Tooltip, TooltipContent, Tree, TreeContainer, TreeContent, TreeDescription, TreeExpand, TreeItem, TreeItemWrapper, TreeItems, TreeRow, TreeText, UnicodeBig, UnicodeSmall, Uploader, UploaderItemArea, UploaderItemsContainer, UploaderTitle, UploaderTitleContainer, UploaderTitleImage, UploaderTitleWrapper, UserChip, UserChipImagePlaceholder, UserChipItem, UserChipItemIcon, UserChipItemImage, ValueLink, ValuePrefix, WaitingButton, WaitingButtonComponent, WithLabelContainer, Wizard, addItem, borderRadius, buttonMixin, clamp, cloneWithRefs, collapseDuration, combineRefs, createColorOrMono, createIconColors, createLinkStates, createMessageColors, createTheme, createToggleStates, createVariants, cropLeftBorderRadius, cropRightBorderRadius, theme$1 as darkTheme, dateFormat, defaultOptions, defaultStub, theme as defaultTheme, fileSizeFormat, findTreeItemById, fonts, getChipColor, getColorOrMono, getHighlightParts, getIconColors, getLinkColors, getLocale, getMessageColors, getNumberFromPixels, getRealChildren, getTagColor, getTextWidth, getTheme, getToggleStates, getUnicodeFromString, getVariant, horizontalDivider, iconTypes, injectIcon, inputMixin, isDefined, isDescendant, isDomNode, isNumeric, isOutside, isReactDomElement, isReactElement, isSimpleStyledComponent, isTextFitElementWidth, isTouchDevice, isValidUrl, mapToSimpleOption, palette, photo, preventDefault, randomInteger, randomRgba, rangeValueFormat, removeItem, replaceTreeItemById, sendRefSafety, shadows, sortNumbers, stub, textOverflowEllipsisMixin, toNumber, toSimpleOption, transition, transparencyDark2, transparencyDark4, Transparency_dark8 as transparencyDark8, transparencyLight2, transparencyLight4, Transparency_light8 as transparencyLight8, typeId, urlify, useAsyncAutocomplete, useDelayedStyleLoader, useDialogShadow, useDragAndDropEffect, useEventListener, useForceUpdate, useMounted, useMutationObserver, usePrevValue, useStyleLoader, useTheme, useThrottling, useToggle, useUndraggableEffect, useUnselectableEffect, verticalDivider, withLabel };
|
|
32473
|
+
export { ActionButton, Actions, ActionsGroup, AdditionalInfo, AnchorContainer, AutoComplete, BaseButton, Blank, Box, ButtonsGroup, ButtonsGroupComponent, CSSTransition, Card, CardBodyContainer, Header$1 as CardHeader, ImageGradientOverlay as CardImageGradientOverlay, ImageOverlay as CardImageOverlay, CardLoader, Checkbox, CheckboxComponent, Chip, ChipAutoCompleDivider, ChipAutoCompleSlider, ChipAutoComplete, ChipAutoCompleteControlFlex, ChipAutoCompleteMode, ChipAutoCompleteTags, ChipContainer, ChipInput, ChipInputHolder, Circle, CircularProgress, Collapse, CollapseWrapper, ColorButton, ColorInput, ColorPicker, ComparisonOperator, Container$5 as Container, CustomButton, CustomToggle, DATE_FORMAT, DATE_TIME_FORMAT, DataGrid, DatePicker, Description, Dialog, DialogActions, DialogComponent, DialogContent, DialogOverlay, DialogTitle, Divider, DividerLine, DragAreaWrapper, DraggableTree, DraggableTreeContainer, DraggableTreeItem, DropHereTitle, Dropdown, DropdownContainer, DropdownField, DropdownOptionIcon, ElementsArea, Expander, FILE_SIZE_STEP, FadingIcon, FieldValue, FileExt, FileInfoComment, FileInfoName, FileInfoProgress, FileInfoTitle, FileSymbolContainer, FilterInput, FlatButton, Flex, FlexSpan, FocusTrap, GlobalsContainer, H1, H2, H3, H4, Handlers, HueMap, HueSlider, selection as IcoMoonSelection, Icon, IconButton, IconButtonButton, IconButtonInnerChild, IconMenu, IconToggle, IconToggleButton, IconToggleText, Image, ImageLoader, InfiniteScroll, InfiniteScrollContainer, InfiniteScrollLoaderContainer, InjectGlobalStyles, Input$1 as Input, InputLabel, InputsGroup, InputsGroupContainer, InputsGroupELement, InputsGroupElements, InputsGroupLabel, ItemContainer, JSONEditor, JSONEditorContainer, JSONEditorLinearProgress, JSONEditorWrapper, Label$2 as Label, LabeledTextarea, LeftSide, LegendToggler, LinearLoader, LinearProgress, Link, ListTransition, LoadMoreButton, LoadingContainer, MAX_NUMBER, MB_FILE_SIZE, MIN_NUMBER, MaskedComponent, Menu, MenuContainer, Message, MultiSelectContainer, Notifications, NumberInput, NumberRangeContainer, NumberRangeInputContainer, NumberRangeSlider, NumberRangeSliderContainer, NumberRangeSliderLabel, OpacitySlider, Option, OptionContainer, OptionDescription, OptionIcon, OptionText, OptionToggler, OptionValueContainer, OptionValueWrapper, PaginationFull, PaginationSimple, Paragraph, PasswordToggle, Placeholder, Popover, PopoverTransition, Popup$1 as Popup, Portal, Preview, Radio$1 as Radio, RadioGroup, RaisedButton, RangeDateInput, RangeDatePicker, RangeNumberInput, RatioLine, RegularIconButton, SEPARATED_TIME_FORMAT, SearchField, SearchInputContainer, SelectFromComputerTitle, SimpleInput, Slider, SliderContainer$2 as SliderContainer, HandleContainer as SliderHandle, Label$1 as SliderLabel, LowerTrackBackground as SliderLowerTrackBackground, SliderPopover, Track as SliderTrack, SortToggle, Spinner, Stepper, StyledInput, Switch, SwitchArea, SwitchContainer, SwitchTitle, Switcher, SymbolLibrary, SymbolPreview, THROTTLING_DELAY, TIME_FORMAT, TabBlock, TabContainer, TabContainerLine, Tabs, Text, TextTrim, Textarea, ThemeProvider, Tippy, TitleText, Tooltip, TooltipContent, Tree, TreeContainer, TreeContent, TreeDescription, TreeDropdown, TreeDropdownItem, TreeExpand, TreeItem, TreeItemWrapper, TreeItems, TreeRow, TreeText, UnicodeBig, UnicodeSmall, Uploader, UploaderItemArea, UploaderItemsContainer, UploaderTitle, UploaderTitleContainer, UploaderTitleImage, UploaderTitleWrapper, UserChip, UserChipImagePlaceholder, UserChipItem, UserChipItemIcon, UserChipItemImage, ValueLink, ValuePrefix, WaitingButton, WaitingButtonComponent, WithLabelContainer, Wizard, addItem, borderRadius, buttonMixin, clamp, cloneWithRefs, collapseDuration, combineRefs, createColorOrMono, createIconColors, createLinkStates, createMessageColors, createTheme, createToggleStates, createVariants, cropLeftBorderRadius, cropRightBorderRadius, theme$1 as darkTheme, dateFormat, defaultOptions, defaultStub, theme as defaultTheme, fileSizeFormat, findTreeItemById, fonts, getChipColor, getColorOrMono, getHighlightParts, getIconColors, getLinkColors, getLocale, getMessageColors, getNumberFromPixels, getRealChildren, getTagColor, getTextWidth, getTheme, getToggleStates, getUnicodeFromString, getVariant, horizontalDivider, iconTypes, injectIcon, inputMixin, isDefined, isDescendant, isDomNode, isNumeric, isOutside, isReactDomElement, isReactElement, isSimpleStyledComponent, isTextFitElementWidth, isTouchDevice, isValidUrl, mapToSimpleOption, palette, photo, preventDefault, randomInteger, randomRgba, rangeValueFormat, removeItem, replaceTreeItemById, sendRefSafety, shadows, sortNumbers, stub, textOverflowEllipsisMixin, toNumber, toSimpleOption, transition, transparencyDark2, transparencyDark4, Transparency_dark8 as transparencyDark8, transparencyLight2, transparencyLight4, Transparency_light8 as transparencyLight8, typeId, urlify, useAsyncAutocomplete, useDelayedStyleLoader, useDialogShadow, useDragAndDropEffect, useEventListener, useForceUpdate, useMounted, useMutationObserver, usePrevValue, useStyleLoader, useTheme, useThrottling, useToggle, useUndraggableEffect, useUnselectableEffect, verticalDivider, withLabel };
|
|
32051
32474
|
//# sourceMappingURL=uilib-gl.esm.js.map
|