react-restyle-components 0.4.23 → 0.4.25

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 (193) hide show
  1. package/lib/src/core-components/src/components/AlertBanner/AlertBanner.d.ts +4 -0
  2. package/lib/src/core-components/src/components/AlertBanner/AlertBanner.d.ts.map +1 -0
  3. package/lib/src/core-components/src/components/AlertBanner/AlertBanner.js +45 -0
  4. package/lib/src/core-components/src/components/AlertBanner/elements.d.ts +27 -0
  5. package/lib/src/core-components/src/components/AlertBanner/elements.d.ts.map +1 -0
  6. package/lib/src/core-components/src/components/AlertBanner/elements.js +233 -0
  7. package/lib/src/core-components/src/components/AlertBanner/index.d.ts +3 -0
  8. package/lib/src/core-components/src/components/AlertBanner/index.d.ts.map +1 -0
  9. package/lib/src/core-components/src/components/AlertBanner/index.js +2 -0
  10. package/lib/src/core-components/src/components/AlertBanner/types.d.ts +46 -0
  11. package/lib/src/core-components/src/components/AlertBanner/types.d.ts.map +1 -0
  12. package/lib/src/core-components/src/components/AlertBanner/types.js +10 -0
  13. package/lib/src/core-components/src/components/AutoComplete/auto-complete-filter-multiple-select-multiple-fields-display/auto-complete-filter-multiple-select-multiple-fields-display.component.d.ts.map +1 -1
  14. package/lib/src/core-components/src/components/Badge/Badge.d.ts +33 -33
  15. package/lib/src/core-components/src/components/Breadcrumb/Breadcrumb.d.ts +28 -0
  16. package/lib/src/core-components/src/components/Breadcrumb/Breadcrumb.d.ts.map +1 -0
  17. package/lib/src/core-components/src/components/Breadcrumb/Breadcrumb.js +83 -0
  18. package/lib/src/core-components/src/components/Breadcrumb/elements.d.ts +44 -0
  19. package/lib/src/core-components/src/components/Breadcrumb/elements.d.ts.map +1 -0
  20. package/lib/src/core-components/src/components/Breadcrumb/elements.js +370 -0
  21. package/lib/src/core-components/src/components/Breadcrumb/index.d.ts +4 -0
  22. package/lib/src/core-components/src/components/Breadcrumb/index.d.ts.map +1 -0
  23. package/lib/src/core-components/src/components/Breadcrumb/index.js +3 -0
  24. package/lib/src/core-components/src/components/Breadcrumb/types.d.ts +14 -0
  25. package/lib/src/core-components/src/components/Breadcrumb/types.d.ts.map +1 -0
  26. package/lib/src/core-components/src/components/Breadcrumb/types.js +3 -0
  27. package/lib/src/core-components/src/components/Button/Button.spec.js +1 -1
  28. package/lib/src/core-components/src/components/Button/button.component.js +1 -1
  29. package/lib/src/core-components/src/components/Chip/Chip.d.ts +5 -0
  30. package/lib/src/core-components/src/components/Chip/Chip.d.ts.map +1 -0
  31. package/lib/src/core-components/src/components/Chip/Chip.js +64 -0
  32. package/lib/src/core-components/src/components/Chip/elements.d.ts +27 -0
  33. package/lib/src/core-components/src/components/Chip/elements.d.ts.map +1 -0
  34. package/lib/src/core-components/src/components/Chip/elements.js +253 -0
  35. package/lib/src/core-components/src/components/Chip/index.d.ts +3 -0
  36. package/lib/src/core-components/src/components/Chip/index.d.ts.map +1 -0
  37. package/lib/src/core-components/src/components/Chip/index.js +2 -0
  38. package/lib/src/core-components/src/components/Chip/types.d.ts +54 -0
  39. package/lib/src/core-components/src/components/Chip/types.d.ts.map +1 -0
  40. package/lib/src/core-components/src/components/Chip/types.js +4 -0
  41. package/lib/src/core-components/src/components/Divider/Divider.d.ts +4 -0
  42. package/lib/src/core-components/src/components/Divider/Divider.d.ts.map +1 -0
  43. package/lib/src/core-components/src/components/Divider/Divider.js +25 -0
  44. package/lib/src/core-components/src/components/Divider/elements.d.ts +22 -0
  45. package/lib/src/core-components/src/components/Divider/elements.d.ts.map +1 -0
  46. package/lib/src/core-components/src/components/Divider/elements.js +103 -0
  47. package/lib/src/core-components/src/components/Divider/index.d.ts +3 -0
  48. package/lib/src/core-components/src/components/Divider/index.d.ts.map +1 -0
  49. package/lib/src/core-components/src/components/Divider/index.js +2 -0
  50. package/lib/src/core-components/src/components/Divider/types.d.ts +30 -0
  51. package/lib/src/core-components/src/components/Divider/types.d.ts.map +1 -0
  52. package/lib/src/core-components/src/components/Divider/types.js +4 -0
  53. package/lib/src/core-components/src/components/DynamicGrid/DynamicGrid.d.ts +6 -0
  54. package/lib/src/core-components/src/components/DynamicGrid/DynamicGrid.d.ts.map +1 -0
  55. package/lib/src/core-components/src/components/DynamicGrid/DynamicGrid.js +147 -0
  56. package/lib/src/core-components/src/components/DynamicGrid/GridContainer.d.ts +12 -0
  57. package/lib/src/core-components/src/components/DynamicGrid/GridContainer.d.ts.map +1 -0
  58. package/lib/src/core-components/src/components/DynamicGrid/GridContainer.js +89 -0
  59. package/lib/src/core-components/src/components/DynamicGrid/elements.d.ts +49 -0
  60. package/lib/src/core-components/src/components/DynamicGrid/elements.d.ts.map +1 -0
  61. package/lib/src/core-components/src/components/DynamicGrid/elements.js +409 -0
  62. package/lib/src/core-components/src/components/DynamicGrid/index.d.ts +4 -0
  63. package/lib/src/core-components/src/components/DynamicGrid/index.d.ts.map +1 -0
  64. package/lib/src/core-components/src/components/DynamicGrid/index.js +3 -0
  65. package/lib/src/core-components/src/components/DynamicGrid/types.d.ts +173 -0
  66. package/lib/src/core-components/src/components/DynamicGrid/types.d.ts.map +1 -0
  67. package/lib/src/core-components/src/components/DynamicGrid/types.js +28 -0
  68. package/lib/src/core-components/src/components/DynamicGrid/utils.d.ts +65 -0
  69. package/lib/src/core-components/src/components/DynamicGrid/utils.d.ts.map +1 -0
  70. package/lib/src/core-components/src/components/DynamicGrid/utils.js +193 -0
  71. package/lib/src/core-components/src/components/Icon/Icon.js +1 -1
  72. package/lib/src/core-components/src/components/Masonry/Masonry.d.ts +7 -0
  73. package/lib/src/core-components/src/components/Masonry/Masonry.d.ts.map +1 -0
  74. package/lib/src/core-components/src/components/Masonry/Masonry.js +73 -0
  75. package/lib/src/core-components/src/components/Masonry/elements.d.ts +31 -0
  76. package/lib/src/core-components/src/components/Masonry/elements.d.ts.map +1 -0
  77. package/lib/src/core-components/src/components/Masonry/elements.js +122 -0
  78. package/lib/src/core-components/src/components/Masonry/hooks.d.ts +21 -0
  79. package/lib/src/core-components/src/components/Masonry/hooks.d.ts.map +1 -0
  80. package/lib/src/core-components/src/components/Masonry/hooks.js +100 -0
  81. package/lib/src/core-components/src/components/Masonry/index.d.ts +4 -0
  82. package/lib/src/core-components/src/components/Masonry/index.d.ts.map +1 -0
  83. package/lib/src/core-components/src/components/Masonry/index.js +3 -0
  84. package/lib/src/core-components/src/components/Masonry/types.d.ts +117 -0
  85. package/lib/src/core-components/src/components/Masonry/types.d.ts.map +1 -0
  86. package/lib/src/core-components/src/components/Masonry/types.js +1 -0
  87. package/lib/src/core-components/src/components/Picker/color-picker-modal/color-picker-modal.component.js +1 -1
  88. package/lib/src/core-components/src/components/Skeleton/Skeleton.d.ts +8 -0
  89. package/lib/src/core-components/src/components/Skeleton/Skeleton.d.ts.map +1 -0
  90. package/lib/src/core-components/src/components/Skeleton/Skeleton.js +51 -0
  91. package/lib/src/core-components/src/components/Skeleton/elements.d.ts +33 -0
  92. package/lib/src/core-components/src/components/Skeleton/elements.d.ts.map +1 -0
  93. package/lib/src/core-components/src/components/Skeleton/elements.js +238 -0
  94. package/lib/src/core-components/src/components/Skeleton/index.d.ts +3 -0
  95. package/lib/src/core-components/src/components/Skeleton/index.d.ts.map +1 -0
  96. package/lib/src/core-components/src/components/Skeleton/index.js +2 -0
  97. package/lib/src/core-components/src/components/Skeleton/types.d.ts +80 -0
  98. package/lib/src/core-components/src/components/Skeleton/types.d.ts.map +1 -0
  99. package/lib/src/core-components/src/components/Skeleton/types.js +4 -0
  100. package/lib/src/core-components/src/components/SpeedDial/SpeedDial.d.ts +4 -0
  101. package/lib/src/core-components/src/components/SpeedDial/SpeedDial.d.ts.map +1 -0
  102. package/lib/src/core-components/src/components/SpeedDial/SpeedDial.js +128 -0
  103. package/lib/src/core-components/src/components/SpeedDial/elements.d.ts +57 -0
  104. package/lib/src/core-components/src/components/SpeedDial/elements.d.ts.map +1 -0
  105. package/lib/src/core-components/src/components/SpeedDial/elements.js +299 -0
  106. package/lib/src/core-components/src/components/SpeedDial/index.d.ts +3 -0
  107. package/lib/src/core-components/src/components/SpeedDial/index.d.ts.map +1 -0
  108. package/lib/src/core-components/src/components/SpeedDial/index.js +2 -0
  109. package/lib/src/core-components/src/components/SpeedDial/types.d.ts +149 -0
  110. package/lib/src/core-components/src/components/SpeedDial/types.d.ts.map +1 -0
  111. package/lib/src/core-components/src/components/SpeedDial/types.js +3 -0
  112. package/lib/src/core-components/src/components/Switch/Switch.d.ts +4 -0
  113. package/lib/src/core-components/src/components/Switch/Switch.d.ts.map +1 -0
  114. package/lib/src/core-components/src/components/Switch/Switch.js +26 -0
  115. package/lib/src/core-components/src/components/Switch/elements.d.ts +33 -0
  116. package/lib/src/core-components/src/components/Switch/elements.d.ts.map +1 -0
  117. package/lib/src/core-components/src/components/Switch/elements.js +167 -0
  118. package/lib/src/core-components/src/components/Switch/index.d.ts +3 -0
  119. package/lib/src/core-components/src/components/Switch/index.d.ts.map +1 -0
  120. package/lib/src/core-components/src/components/Switch/index.js +2 -0
  121. package/lib/src/core-components/src/components/Switch/types.d.ts +32 -0
  122. package/lib/src/core-components/src/components/Switch/types.d.ts.map +1 -0
  123. package/lib/src/core-components/src/components/Switch/types.js +3 -0
  124. package/lib/src/core-components/src/components/Table/Table.d.ts +7 -0
  125. package/lib/src/core-components/src/components/Table/Table.d.ts.map +1 -0
  126. package/lib/src/core-components/src/components/Table/Table.js +695 -0
  127. package/lib/src/core-components/src/components/Table/elements.d.ts +89 -0
  128. package/lib/src/core-components/src/components/Table/elements.d.ts.map +1 -0
  129. package/lib/src/core-components/src/components/Table/elements.js +611 -0
  130. package/lib/src/core-components/src/components/Table/filters.d.ts +23 -0
  131. package/lib/src/core-components/src/components/Table/filters.d.ts.map +1 -0
  132. package/lib/src/core-components/src/components/Table/filters.js +181 -0
  133. package/lib/src/core-components/src/components/Table/hooks.d.ts +107 -0
  134. package/lib/src/core-components/src/components/Table/hooks.d.ts.map +1 -0
  135. package/lib/src/core-components/src/components/Table/hooks.js +451 -0
  136. package/lib/src/core-components/src/components/Table/index.d.ts +5 -0
  137. package/lib/src/core-components/src/components/Table/index.d.ts.map +1 -0
  138. package/lib/src/core-components/src/components/Table/index.js +4 -0
  139. package/lib/src/core-components/src/components/Table/types.d.ts +635 -0
  140. package/lib/src/core-components/src/components/Table/types.d.ts.map +1 -0
  141. package/lib/src/core-components/src/components/Table/types.js +1 -0
  142. package/lib/src/core-components/src/components/Toast/Toast.d.ts +5 -0
  143. package/lib/src/core-components/src/components/Toast/Toast.d.ts.map +1 -0
  144. package/lib/src/core-components/src/components/Toast/Toast.js +50 -0
  145. package/lib/src/core-components/src/components/Toast/elements.d.ts +28 -0
  146. package/lib/src/core-components/src/components/Toast/elements.d.ts.map +1 -0
  147. package/lib/src/core-components/src/components/Toast/elements.js +272 -0
  148. package/lib/src/core-components/src/components/Toast/index.d.ts +3 -0
  149. package/lib/src/core-components/src/components/Toast/index.d.ts.map +1 -0
  150. package/lib/src/core-components/src/components/Toast/index.js +2 -0
  151. package/lib/src/core-components/src/components/Toast/types.d.ts +52 -0
  152. package/lib/src/core-components/src/components/Toast/types.d.ts.map +1 -0
  153. package/lib/src/core-components/src/components/Toast/types.js +9 -0
  154. package/lib/src/core-components/src/components/Tooltip/Tooltip.d.ts +7 -0
  155. package/lib/src/core-components/src/components/Tooltip/Tooltip.d.ts.map +1 -0
  156. package/lib/src/core-components/src/components/Tooltip/Tooltip.js +200 -0
  157. package/lib/src/core-components/src/components/Tooltip/elements.d.ts +19 -0
  158. package/lib/src/core-components/src/components/Tooltip/elements.d.ts.map +1 -0
  159. package/lib/src/core-components/src/components/Tooltip/elements.js +195 -0
  160. package/lib/src/core-components/src/components/Tooltip/index.d.ts +3 -0
  161. package/lib/src/core-components/src/components/Tooltip/index.d.ts.map +1 -0
  162. package/lib/src/core-components/src/components/Tooltip/index.js +2 -0
  163. package/lib/src/core-components/src/components/Tooltip/types.d.ts +81 -17
  164. package/lib/src/core-components/src/components/Tooltip/types.d.ts.map +1 -1
  165. package/lib/src/core-components/src/components/Tooltip/types.js +17 -1
  166. package/lib/src/core-components/src/components/Tooltip/utils.d.ts +26 -0
  167. package/lib/src/core-components/src/components/Tooltip/utils.d.ts.map +1 -0
  168. package/lib/src/core-components/src/components/Tooltip/utils.js +140 -0
  169. package/lib/src/core-components/src/components/TreeSelect/TreeSelect.d.ts +5 -0
  170. package/lib/src/core-components/src/components/TreeSelect/TreeSelect.d.ts.map +1 -0
  171. package/lib/src/core-components/src/components/TreeSelect/TreeSelect.js +303 -0
  172. package/lib/src/core-components/src/components/TreeSelect/elements.d.ts +74 -0
  173. package/lib/src/core-components/src/components/TreeSelect/elements.d.ts.map +1 -0
  174. package/lib/src/core-components/src/components/TreeSelect/elements.js +494 -0
  175. package/lib/src/core-components/src/components/TreeSelect/hooks.d.ts +57 -0
  176. package/lib/src/core-components/src/components/TreeSelect/hooks.d.ts.map +1 -0
  177. package/lib/src/core-components/src/components/TreeSelect/hooks.js +252 -0
  178. package/lib/src/core-components/src/components/TreeSelect/index.d.ts +4 -0
  179. package/lib/src/core-components/src/components/TreeSelect/index.d.ts.map +1 -0
  180. package/lib/src/core-components/src/components/TreeSelect/index.js +3 -0
  181. package/lib/src/core-components/src/components/TreeSelect/types.d.ts +205 -0
  182. package/lib/src/core-components/src/components/TreeSelect/types.d.ts.map +1 -0
  183. package/lib/src/core-components/src/components/TreeSelect/types.js +1 -0
  184. package/lib/src/core-components/src/components/index.d.ts +13 -1
  185. package/lib/src/core-components/src/components/index.d.ts.map +1 -1
  186. package/lib/src/core-components/src/components/index.js +14 -1
  187. package/lib/src/core-components/src/core-components/CoreButton/CoreButton.d.ts +2 -2
  188. package/lib/src/core-components/src/tc.global.css +14 -3
  189. package/lib/src/core-components/src/tc.module.css +2 -2
  190. package/package.json +1 -1
  191. package/lib/src/core-components/src/components/Tooltip/tooltip.component.d.ts +0 -29
  192. package/lib/src/core-components/src/components/Tooltip/tooltip.component.d.ts.map +0 -1
  193. package/lib/src/core-components/src/components/Tooltip/tooltip.component.js +0 -10
@@ -0,0 +1,303 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import React, { forwardRef, useState, useRef, useCallback, useEffect, useMemo, } from 'react';
4
+ import { TreeSelectRoot, Selector, Prefix, SearchInput, Placeholder, SelectedValue, Tag, TagLabel, TagClose, MaxTagPlaceholder, Suffix, ArrowIcon, ClearButton, Dropdown, TreeContainer, TreeNode, ExpandIcon, LeafIndent, Checkbox, NodeIcon, NodeTitle, EmptyState, } from './elements';
5
+ import { useExpandedState, useCheckedState, useAsyncLoading, filterTree, findNodeByValue, getFieldValue, getDescendantValues, } from './hooks';
6
+ // Icons
7
+ const ChevronDownIcon = () => (_jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: _jsx("path", { d: "M6 9l6 6 6-6", strokeLinecap: "round", strokeLinejoin: "round" }) }));
8
+ const ChevronRightIcon = () => (_jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: _jsx("path", { d: "M9 6l6 6-6 6", strokeLinecap: "round", strokeLinejoin: "round" }) }));
9
+ const CloseIcon = () => (_jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: _jsx("path", { d: "M18 6L6 18M6 6l12 12", strokeLinecap: "round", strokeLinejoin: "round" }) }));
10
+ const CheckIcon = () => (_jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "3", children: _jsx("path", { d: "M5 12l5 5L20 7", strokeLinecap: "round", strokeLinejoin: "round" }) }));
11
+ const MinusIcon = () => (_jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "3", children: _jsx("path", { d: "M5 12h14", strokeLinecap: "round" }) }));
12
+ const LoadingIcon = () => (_jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [_jsx("circle", { cx: "12", cy: "12", r: "10", strokeOpacity: "0.25" }), _jsx("path", { d: "M12 2a10 10 0 0 1 10 10", strokeLinecap: "round" })] }));
13
+ const FolderIcon = () => (_jsx("svg", { viewBox: "0 0 24 24", fill: "currentColor", children: _jsx("path", { d: "M2 6a2 2 0 0 1 2-2h5l2 2h9a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6z" }) }));
14
+ const FileIcon = () => (_jsxs("svg", { viewBox: "0 0 24 24", fill: "currentColor", children: [_jsx("path", { d: "M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z" }), _jsx("path", { d: "M14 2v6h6", fill: "none", stroke: "currentColor", strokeWidth: "1" })] }));
15
+ export const TreeSelect = forwardRef(function TreeSelectComponent(props, ref) {
16
+ const { treeData, value, defaultValue, mode = 'single', placeholder = 'Please select', disabled = false, showSearch = false, filterTreeNode, treeNodeFilterProp = 'title', treeLine = false, showTreeIcon = false, checkable = false, checkStrictly = false, defaultExpandedKeys, expandedKeys: controlledExpandedKeys, defaultExpandAll = false, loadData, allowClear = false, autoClearSearchValue = true, maxTagCount, maxTagPlaceholder, placement = 'bottomLeft', open: controlledOpen, defaultOpen = false, variant = 'outlined', size = 'medium', prefix, suffixIcon, clearIcon, listHeight = 256, popupMatchSelectWidth = true, classNames = {}, styles = {}, className, style, status, fieldNames, dropdownRender, tabIndex = 0, autoFocus = false, onChange, onSelect, onSearch, onDropdownVisibleChange, onTreeExpand, onPopupScroll, onFocus, onBlur, onClear, ...rest } = props;
17
+ // Refs
18
+ const rootRef = useRef(null);
19
+ const inputRef = useRef(null);
20
+ // State
21
+ const [internalOpen, setInternalOpen] = useState(defaultOpen);
22
+ const [searchValue, setSearchValue] = useState('');
23
+ const [focused, setFocused] = useState(false);
24
+ const isOpen = controlledOpen !== undefined ? controlledOpen : internalOpen;
25
+ const isMultiple = mode === 'multiple' || mode === 'checkable';
26
+ const isCheckable = mode === 'checkable' || checkable;
27
+ // Selection state
28
+ const [selectedValues, setSelectedValues] = useState(() => {
29
+ if (value !== undefined) {
30
+ return Array.isArray(value) ? value : value ? [value] : [];
31
+ }
32
+ if (defaultValue !== undefined) {
33
+ return Array.isArray(defaultValue) ? defaultValue : defaultValue ? [defaultValue] : [];
34
+ }
35
+ return [];
36
+ });
37
+ // Update when controlled value changes
38
+ useEffect(() => {
39
+ if (value !== undefined) {
40
+ setSelectedValues(Array.isArray(value) ? value : value ? [value] : []);
41
+ }
42
+ }, [value]);
43
+ // Expanded state
44
+ const { expandedKeys, toggleExpand, setExpanded } = useExpandedState(treeData, defaultExpandedKeys, defaultExpandAll, controlledExpandedKeys, fieldNames);
45
+ // Checked state (for checkable mode)
46
+ const { checkedKeys, halfCheckedKeys, toggleCheck } = useCheckedState(treeData, isCheckable ? selectedValues : undefined, checkStrictly, fieldNames);
47
+ // Async loading
48
+ const { isLoading, setLoading, markLoaded } = useAsyncLoading();
49
+ // Filter tree based on search
50
+ const filteredData = useMemo(() => {
51
+ if (!searchValue)
52
+ return treeData;
53
+ return filterTree(treeData, searchValue, filterTreeNode, treeNodeFilterProp, fieldNames);
54
+ }, [treeData, searchValue, filterTreeNode, treeNodeFilterProp, fieldNames]);
55
+ // Get selected labels
56
+ const selectedLabels = useMemo(() => {
57
+ return selectedValues.map((val) => {
58
+ const node = findNodeByValue(treeData, val, fieldNames);
59
+ return node ? getFieldValue(node, 'label', fieldNames) : val;
60
+ });
61
+ }, [selectedValues, treeData, fieldNames]);
62
+ // Toggle dropdown
63
+ const toggleOpen = useCallback((newOpen) => {
64
+ if (disabled)
65
+ return;
66
+ if (controlledOpen === undefined) {
67
+ setInternalOpen(newOpen);
68
+ }
69
+ onDropdownVisibleChange?.(newOpen);
70
+ }, [disabled, controlledOpen, onDropdownVisibleChange]);
71
+ // Handle click outside
72
+ useEffect(() => {
73
+ const handleClickOutside = (e) => {
74
+ if (rootRef.current && !rootRef.current.contains(e.target)) {
75
+ toggleOpen(false);
76
+ }
77
+ };
78
+ if (isOpen) {
79
+ document.addEventListener('mousedown', handleClickOutside);
80
+ return () => document.removeEventListener('mousedown', handleClickOutside);
81
+ }
82
+ }, [isOpen, toggleOpen]);
83
+ // Handle selector click
84
+ const handleSelectorClick = useCallback(() => {
85
+ if (!disabled) {
86
+ toggleOpen(!isOpen);
87
+ if (showSearch) {
88
+ inputRef.current?.focus();
89
+ }
90
+ }
91
+ }, [disabled, isOpen, showSearch, toggleOpen]);
92
+ // Handle search
93
+ const handleSearchChange = useCallback((e) => {
94
+ const val = e.target.value;
95
+ setSearchValue(val);
96
+ onSearch?.(val);
97
+ }, [onSearch]);
98
+ // Handle node select
99
+ const handleNodeSelect = useCallback((node) => {
100
+ const nodeValue = getFieldValue(node, 'value', fieldNames);
101
+ const nodeLabel = getFieldValue(node, 'label', fieldNames);
102
+ if (node.disabled)
103
+ return;
104
+ if (isCheckable) {
105
+ toggleCheck(nodeValue, node);
106
+ const newChecked = checkedKeys.has(nodeValue)
107
+ ? Array.from(checkedKeys).filter((v) => v !== nodeValue)
108
+ : [...Array.from(checkedKeys), nodeValue];
109
+ if (!checkStrictly) {
110
+ // Handle descendants
111
+ const descendants = getDescendantValues(node, fieldNames);
112
+ const isChecking = !checkedKeys.has(nodeValue);
113
+ descendants.forEach((d) => {
114
+ if (isChecking) {
115
+ if (!newChecked.includes(d))
116
+ newChecked.push(d);
117
+ }
118
+ else {
119
+ const idx = newChecked.indexOf(d);
120
+ if (idx > -1)
121
+ newChecked.splice(idx, 1);
122
+ }
123
+ });
124
+ }
125
+ setSelectedValues(newChecked);
126
+ onChange?.(newChecked, newChecked.map((v) => {
127
+ const n = findNodeByValue(treeData, v, fieldNames);
128
+ return n ? getFieldValue(n, 'label', fieldNames) : v;
129
+ }), { triggerValue: nodeValue, triggerNode: node });
130
+ }
131
+ else if (isMultiple) {
132
+ const isSelected = selectedValues.includes(nodeValue);
133
+ const newValues = isSelected
134
+ ? selectedValues.filter((v) => v !== nodeValue)
135
+ : [...selectedValues, nodeValue];
136
+ setSelectedValues(newValues);
137
+ onSelect?.(nodeValue, node, { selected: !isSelected });
138
+ onChange?.(newValues, newValues.map((v) => {
139
+ const n = findNodeByValue(treeData, v, fieldNames);
140
+ return n ? getFieldValue(n, 'label', fieldNames) : v;
141
+ }), { preValue: selectedValues, triggerValue: nodeValue, triggerNode: node });
142
+ }
143
+ else {
144
+ setSelectedValues([nodeValue]);
145
+ onSelect?.(nodeValue, node, { selected: true });
146
+ onChange?.(nodeValue, nodeLabel, {
147
+ preValue: selectedValues[0],
148
+ triggerValue: nodeValue,
149
+ triggerNode: node,
150
+ });
151
+ toggleOpen(false);
152
+ }
153
+ if (autoClearSearchValue) {
154
+ setSearchValue('');
155
+ }
156
+ }, [
157
+ isCheckable,
158
+ isMultiple,
159
+ selectedValues,
160
+ checkedKeys,
161
+ checkStrictly,
162
+ fieldNames,
163
+ treeData,
164
+ toggleCheck,
165
+ autoClearSearchValue,
166
+ onChange,
167
+ onSelect,
168
+ toggleOpen,
169
+ ]);
170
+ // Handle expand toggle
171
+ const handleExpandToggle = useCallback(async (e, node) => {
172
+ e.stopPropagation();
173
+ const nodeValue = getFieldValue(node, 'value', fieldNames);
174
+ const children = getFieldValue(node, 'children', fieldNames);
175
+ // Async loading
176
+ if (loadData &&
177
+ !node.isLeaf &&
178
+ (!children || children.length === 0) &&
179
+ !isLoading(nodeValue)) {
180
+ setLoading(nodeValue, true);
181
+ try {
182
+ await loadData(node);
183
+ markLoaded(nodeValue);
184
+ }
185
+ catch (err) {
186
+ console.error('Failed to load data:', err);
187
+ }
188
+ setLoading(nodeValue, false);
189
+ }
190
+ toggleExpand(nodeValue);
191
+ const newExpanded = expandedKeys.has(nodeValue)
192
+ ? Array.from(expandedKeys).filter((k) => k !== nodeValue)
193
+ : [...Array.from(expandedKeys), nodeValue];
194
+ onTreeExpand?.(newExpanded);
195
+ }, [fieldNames, loadData, isLoading, setLoading, markLoaded, toggleExpand, expandedKeys, onTreeExpand]);
196
+ // Handle tag remove
197
+ const handleTagRemove = useCallback((e, val) => {
198
+ e.stopPropagation();
199
+ const newValues = selectedValues.filter((v) => v !== val);
200
+ setSelectedValues(newValues);
201
+ onChange?.(newValues, newValues.map((v) => {
202
+ const n = findNodeByValue(treeData, v, fieldNames);
203
+ return n ? getFieldValue(n, 'label', fieldNames) : v;
204
+ }), { triggerValue: val });
205
+ }, [selectedValues, treeData, fieldNames, onChange]);
206
+ // Handle clear
207
+ const handleClear = useCallback((e) => {
208
+ e.stopPropagation();
209
+ setSelectedValues([]);
210
+ setSearchValue('');
211
+ onChange?.(isMultiple ? [] : '', isMultiple ? [] : '', {});
212
+ onClear?.();
213
+ }, [isMultiple, onChange, onClear]);
214
+ // Handle focus/blur
215
+ const handleFocus = useCallback((e) => {
216
+ setFocused(true);
217
+ onFocus?.(e);
218
+ }, [onFocus]);
219
+ const handleBlur = useCallback((e) => {
220
+ setFocused(false);
221
+ onBlur?.(e);
222
+ }, [onBlur]);
223
+ // Keyboard navigation
224
+ const handleKeyDown = useCallback((e) => {
225
+ switch (e.key) {
226
+ case 'Enter':
227
+ case ' ':
228
+ if (!isOpen) {
229
+ toggleOpen(true);
230
+ }
231
+ break;
232
+ case 'Escape':
233
+ toggleOpen(false);
234
+ break;
235
+ case 'Backspace':
236
+ if (!searchValue && isMultiple && selectedValues.length > 0) {
237
+ const newValues = selectedValues.slice(0, -1);
238
+ setSelectedValues(newValues);
239
+ onChange?.(newValues, newValues.map((v) => {
240
+ const n = findNodeByValue(treeData, v, fieldNames);
241
+ return n ? getFieldValue(n, 'label', fieldNames) : v;
242
+ }), {});
243
+ }
244
+ break;
245
+ }
246
+ }, [isOpen, searchValue, isMultiple, selectedValues, treeData, fieldNames, onChange, toggleOpen]);
247
+ // Auto focus
248
+ useEffect(() => {
249
+ if (autoFocus && inputRef.current) {
250
+ inputRef.current.focus();
251
+ }
252
+ }, [autoFocus]);
253
+ // Render tree node
254
+ const renderTreeNode = (node, level = 0) => {
255
+ const nodeValue = getFieldValue(node, 'value', fieldNames);
256
+ const nodeLabel = getFieldValue(node, 'label', fieldNames);
257
+ const children = getFieldValue(node, 'children', fieldNames);
258
+ const hasChildren = children && children.length > 0;
259
+ const isExpanded = expandedKeys.has(nodeValue);
260
+ const isSelected = selectedValues.includes(nodeValue);
261
+ const isChecked = checkedKeys.has(nodeValue);
262
+ const isHalfChecked = halfCheckedKeys.has(nodeValue);
263
+ const loading = isLoading(nodeValue);
264
+ const isLeaf = node.isLeaf || (!hasChildren && !loadData);
265
+ const showLine = !!treeLine;
266
+ return (_jsxs(React.Fragment, { children: [_jsxs(TreeNode, { "$level": level, "$isLeaf": isLeaf, "$disabled": !!node.disabled, "$selected": isSelected && !isCheckable, "$checked": isChecked, "$indeterminate": isHalfChecked, "$showLine": showLine, "data-disabled": node.disabled, className: classNames.node, style: styles.node, onClick: () => handleNodeSelect(node), role: "treeitem", "aria-selected": isSelected, "aria-expanded": hasChildren ? isExpanded : undefined, "aria-disabled": node.disabled, children: [isLeaf ? (_jsx(LeafIndent, {})) : (_jsx(ExpandIcon, { "$expanded": isExpanded, "$loading": loading, onClick: (e) => handleExpandToggle(e, node), children: loading ? _jsx(LoadingIcon, {}) : _jsx(ChevronRightIcon, {}) })), isCheckable && node.checkable !== false && (_jsxs(Checkbox, { "$checked": isChecked, "$indeterminate": isHalfChecked && !isChecked, "$disabled": !!node.disableCheckbox || !!node.disabled, className: classNames.nodeCheckbox, style: styles.nodeCheckbox, role: "checkbox", "aria-checked": isHalfChecked ? 'mixed' : isChecked, children: [isChecked && _jsx(CheckIcon, {}), isHalfChecked && !isChecked && _jsx(MinusIcon, {})] })), showTreeIcon && (_jsx(NodeIcon, { children: node.icon || (isLeaf ? _jsx(FileIcon, {}) : _jsx(FolderIcon, {})) })), _jsx(NodeTitle, { "$disabled": !!node.disabled, className: classNames.nodeTitle, style: styles.nodeTitle, children: nodeLabel })] }), hasChildren && isExpanded && (_jsx(_Fragment, { children: children.map((child) => renderTreeNode(child, level + 1)) }))] }, node.key || nodeValue));
267
+ };
268
+ // Render selected tags
269
+ const renderTags = () => {
270
+ if (!isMultiple)
271
+ return null;
272
+ let visibleValues = selectedValues;
273
+ let hiddenCount = 0;
274
+ if (maxTagCount !== undefined && maxTagCount !== 'responsive') {
275
+ visibleValues = selectedValues.slice(0, maxTagCount);
276
+ hiddenCount = selectedValues.length - maxTagCount;
277
+ }
278
+ return (_jsxs(_Fragment, { children: [visibleValues.map((val, idx) => {
279
+ const label = selectedLabels[selectedValues.indexOf(val)];
280
+ const node = findNodeByValue(treeData, val, fieldNames);
281
+ return (_jsxs(Tag, { "$size": size, "$disabled": node?.disabled, className: classNames.tag, style: styles.tag, children: [_jsx(TagLabel, { children: label }), !disabled && !node?.disabled && (_jsx(TagClose, { onClick: (e) => handleTagRemove(e, val), children: _jsx(CloseIcon, {}) }))] }, val));
282
+ }), hiddenCount > 0 && (_jsx(MaxTagPlaceholder, { "$size": size, children: typeof maxTagPlaceholder === 'function'
283
+ ? maxTagPlaceholder(selectedValues.slice(maxTagCount))
284
+ : maxTagPlaceholder || `+${hiddenCount}` }))] }));
285
+ };
286
+ // Render dropdown content
287
+ const renderDropdown = () => {
288
+ const content = (_jsx(TreeContainer, { "$showLine": !!treeLine, className: classNames.tree, style: styles.tree, role: "tree", onScroll: onPopupScroll, children: filteredData.length === 0 ? (_jsx(EmptyState, { children: "No data" })) : (filteredData.map((node) => renderTreeNode(node))) }));
289
+ return dropdownRender ? dropdownRender(content) : content;
290
+ };
291
+ const hasValue = selectedValues.length > 0;
292
+ return (_jsxs(TreeSelectRoot, { ref: (node) => {
293
+ rootRef.current = node;
294
+ if (typeof ref === 'function') {
295
+ ref(node);
296
+ }
297
+ else if (ref) {
298
+ ref.current = node;
299
+ }
300
+ }, "$size": size, "$variant": variant, "$status": status, "$disabled": disabled, "$focused": focused, "data-disabled": disabled, className: className || classNames.root, style: { ...styles.root, ...style }, onKeyDown: handleKeyDown, tabIndex: disabled ? -1 : tabIndex, role: "combobox", "aria-expanded": isOpen, "aria-haspopup": "tree", "aria-disabled": disabled, "aria-label": rest['aria-label'], "aria-labelledby": rest['aria-labelledby'], children: [_jsxs(Selector, { "$size": size, "$variant": variant, "$status": status, "$multiple": isMultiple, "$hasValue": hasValue, className: classNames.selector, style: styles.selector, onClick: handleSelectorClick, onFocus: handleFocus, onBlur: handleBlur, children: [prefix && (_jsx(Prefix, { "$size": size, className: classNames.prefix, style: styles.prefix, children: prefix })), renderTags(), showSearch ? (_jsx(SearchInput, { ref: inputRef, "$size": size, value: searchValue, onChange: handleSearchChange, placeholder: hasValue && !isMultiple ? '' : placeholder, disabled: disabled, className: classNames.search, style: styles.search, "aria-label": "Search" })) : !isMultiple || !hasValue ? (hasValue && !isMultiple ? (_jsx(SelectedValue, { children: selectedLabels[0] })) : (_jsx(Placeholder, { className: classNames.placeholder, style: styles.placeholder, children: placeholder }))) : null, _jsxs(Suffix, { "$size": size, "$open": isOpen, className: classNames.suffix, style: styles.suffix, children: [allowClear && hasValue && !disabled && (_jsx(ClearButton, { onClick: handleClear, "aria-label": "Clear", children: clearIcon || _jsx(CloseIcon, {}) })), _jsx(ArrowIcon, { "$open": isOpen, children: suffixIcon || _jsx(ChevronDownIcon, {}) })] })] }), isOpen && (_jsx(Dropdown, { "$placement": placement, "$maxHeight": listHeight, "$matchWidth": popupMatchSelectWidth, className: classNames.popup, style: styles.popup, role: "listbox", children: renderDropdown() }))] }));
301
+ });
302
+ TreeSelect.displayName = 'TreeSelect';
303
+ export default TreeSelect;
@@ -0,0 +1,74 @@
1
+ /// <reference types="react" />
2
+ export declare const TreeSelectRoot: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {
3
+ $size: 'small' | 'medium' | 'large';
4
+ $variant: 'outlined' | 'borderless' | 'filled' | 'underlined';
5
+ $status?: "error" | "warning" | undefined;
6
+ $disabled: boolean;
7
+ $focused: boolean;
8
+ }>> & string;
9
+ export declare const Selector: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {
10
+ $size: 'small' | 'medium' | 'large';
11
+ $variant: 'outlined' | 'borderless' | 'filled' | 'underlined';
12
+ $status?: "error" | "warning" | undefined;
13
+ $multiple: boolean;
14
+ $hasValue: boolean;
15
+ }>> & string;
16
+ export declare const Prefix: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, {
17
+ $size: 'small' | 'medium' | 'large';
18
+ }>> & string;
19
+ export declare const SearchInput: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<import("react").DetailedHTMLProps<import("react").InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, {
20
+ $size: 'small' | 'medium' | 'large';
21
+ }>> & string;
22
+ export declare const Placeholder: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, never>> & string;
23
+ export declare const SelectedValue: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, never>> & string;
24
+ export declare const Tag: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, {
25
+ $size: 'small' | 'medium' | 'large';
26
+ $disabled?: boolean | undefined;
27
+ }>> & string;
28
+ export declare const TagLabel: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, never>> & string;
29
+ export declare const TagClose: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, never>> & string;
30
+ export declare const MaxTagPlaceholder: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, {
31
+ $size: 'small' | 'medium' | 'large';
32
+ }>> & string;
33
+ export declare const Suffix: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, {
34
+ $size: 'small' | 'medium' | 'large';
35
+ $open: boolean;
36
+ }>> & string;
37
+ export declare const ArrowIcon: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, {
38
+ $open: boolean;
39
+ }>> & string;
40
+ export declare const ClearButton: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, never>> & string;
41
+ export declare const Dropdown: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {
42
+ $placement: 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight';
43
+ $maxHeight: number;
44
+ $matchWidth: boolean | number;
45
+ }>> & string;
46
+ export declare const TreeContainer: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {
47
+ $showLine: boolean;
48
+ }>> & string;
49
+ export declare const TreeNode: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {
50
+ $level: number;
51
+ $isLeaf: boolean;
52
+ $disabled: boolean;
53
+ $selected: boolean;
54
+ $checked: boolean;
55
+ $indeterminate: boolean;
56
+ $showLine: boolean;
57
+ }>> & string;
58
+ export declare const ExpandIcon: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, {
59
+ $expanded: boolean;
60
+ $loading: boolean;
61
+ }>> & string;
62
+ export declare const LeafIndent: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, never>> & string;
63
+ export declare const Checkbox: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, {
64
+ $checked: boolean;
65
+ $indeterminate: boolean;
66
+ $disabled: boolean;
67
+ }>> & string;
68
+ export declare const NodeIcon: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, never>> & string;
69
+ export declare const NodeTitle: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, {
70
+ $disabled: boolean;
71
+ }>> & string;
72
+ export declare const EmptyState: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
73
+ export declare const LoadingIndicator: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
74
+ //# sourceMappingURL=elements.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elements.d.ts","sourceRoot":"","sources":["../../../../../../src/core-components/src/components/TreeSelect/elements.tsx"],"names":[],"mappings":";AAqHA,eAAO,MAAM,cAAc;WAClB,OAAO,GAAG,QAAQ,GAAG,OAAO;cACzB,UAAU,GAAG,YAAY,GAAG,QAAQ,GAAG,YAAY;;eAElD,OAAO;cACR,OAAO;YAYlB,CAAC;AAEF,eAAO,MAAM,QAAQ;WACZ,OAAO,GAAG,QAAQ,GAAG,OAAO;cACzB,UAAU,GAAG,YAAY,GAAG,QAAQ,GAAG,YAAY;;eAElD,OAAO;eACP,OAAO;YAiBnB,CAAC;AAEF,eAAO,MAAM,MAAM;WAAuB,OAAO,GAAG,QAAQ,GAAG,OAAO;YAWrE,CAAC;AAEF,eAAO,MAAM,WAAW;WAAwB,OAAO,GAAG,QAAQ,GAAG,OAAO;YAa3E,CAAC;AAEF,eAAO,MAAM,WAAW,+NAGvB,CAAC;AAEF,eAAO,MAAM,aAAa,+NAMzB,CAAC;AAEF,eAAO,MAAM,GAAG;WACP,OAAO,GAAG,QAAQ,GAAG,OAAO;;YAmBpC,CAAC;AAEF,eAAO,MAAM,QAAQ,+NAIpB,CAAC;AAEF,eAAO,MAAM,QAAQ,yOAuBpB,CAAC;AAEF,eAAO,MAAM,iBAAiB;WAAuB,OAAO,GAAG,QAAQ,GAAG,OAAO;YAShF,CAAC;AAEF,eAAO,MAAM,MAAM;WACV,OAAO,GAAG,QAAQ,GAAG,OAAO;WAC5B,OAAO;YAef,CAAC;AAEF,eAAO,MAAM,SAAS;WAAuB,OAAO;YAYnD,CAAC;AAEF,eAAO,MAAM,WAAW,yOAqBvB,CAAC;AAEF,eAAO,MAAM,QAAQ;gBACP,SAAS,GAAG,UAAU,GAAG,YAAY,GAAG,aAAa;gBACrD,MAAM;iBACL,OAAO,GAAG,MAAM;YAsC9B,CAAC;AAEF,eAAO,MAAM,aAAa;eAA0B,OAAO;YAQ1D,CAAC;AAEF,eAAO,MAAM,QAAQ;YACX,MAAM;aACL,OAAO;eACL,OAAO;eACP,OAAO;cACR,OAAO;oBACD,OAAO;eACZ,OAAO;YA0DnB,CAAC;AAEF,eAAO,MAAM,UAAU;eACV,OAAO;cACR,OAAO;YAuBlB,CAAC;AAEF,eAAO,MAAM,UAAU,+NAItB,CAAC;AAEF,eAAO,MAAM,QAAQ;cACT,OAAO;oBACD,OAAO;eACZ,OAAO;YAuCnB,CAAC;AAEF,eAAO,MAAM,QAAQ,+NAcpB,CAAC;AAEF,eAAO,MAAM,SAAS;eAA2B,OAAO;YAYvD,CAAC;AAEF,eAAO,MAAM,UAAU,6NAOtB,CAAC;AAEF,eAAO,MAAM,gBAAgB,6NAY5B,CAAC"}