@pingux/astro 2.20.0-alpha.7 → 2.20.0-alpha.9
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/lib/cjs/components/ListView/ListView.js +8 -2
- package/lib/cjs/components/TreeView/TreeView.js +100 -0
- package/lib/cjs/components/TreeView/TreeView.mdx +16 -0
- package/lib/cjs/components/TreeView/TreeView.stories.js +89 -0
- package/lib/cjs/components/TreeView/TreeView.styles.js +32 -0
- package/lib/cjs/components/TreeView/TreeView.test.js +124 -0
- package/lib/cjs/components/TreeView/TreeViewItem.js +74 -0
- package/lib/cjs/components/TreeView/TreeViewRow.js +147 -0
- package/lib/cjs/components/TreeView/TreeViewSection.js +88 -0
- package/lib/cjs/components/TreeView/index.js +28 -0
- package/lib/cjs/context/TreeViewContext/index.js +14 -0
- package/lib/cjs/index.d.ts +3 -1
- package/lib/cjs/index.js +30 -4
- package/lib/cjs/styles/variants/variants.js +3 -1
- package/lib/components/ListView/ListView.js +8 -2
- package/lib/components/TreeView/TreeView.js +89 -0
- package/lib/components/TreeView/TreeView.mdx +16 -0
- package/lib/components/TreeView/TreeView.stories.js +79 -0
- package/lib/components/TreeView/TreeView.styles.js +24 -0
- package/lib/components/TreeView/TreeView.test.js +121 -0
- package/lib/components/TreeView/TreeViewItem.js +60 -0
- package/lib/components/TreeView/TreeViewRow.js +135 -0
- package/lib/components/TreeView/TreeViewSection.js +74 -0
- package/lib/components/TreeView/index.js +3 -0
- package/lib/context/TreeViewContext/index.js +5 -0
- package/lib/index.js +3 -1
- package/lib/styles/variants/variants.js +3 -1
- package/package.json +1 -1
@@ -0,0 +1,60 @@
|
|
1
|
+
import _includesInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/includes";
|
2
|
+
import _Array$from from "@babel/runtime-corejs3/core-js-stable/array/from";
|
3
|
+
import React, { forwardRef, useImperativeHandle, useRef } from 'react';
|
4
|
+
import FileIcon from '@pingux/mdi-react/FileIcon';
|
5
|
+
import PropTypes from 'prop-types';
|
6
|
+
import { useTreeViewContext } from '../../context/TreeViewContext';
|
7
|
+
import { Box } from '../../index';
|
8
|
+
import TreeViewRow from './TreeViewRow';
|
9
|
+
import { jsx as ___EmotionJSX } from "@emotion/react";
|
10
|
+
var TreeViewItem = /*#__PURE__*/forwardRef(function (props, ref) {
|
11
|
+
var _context, _context2, _context3;
|
12
|
+
var item = props.item,
|
13
|
+
title = props.title;
|
14
|
+
var treeItemRef = useRef();
|
15
|
+
/* istanbul ignore next */
|
16
|
+
useImperativeHandle(ref, function () {
|
17
|
+
return treeItemRef.current;
|
18
|
+
});
|
19
|
+
var _useTreeViewContext = useTreeViewContext(),
|
20
|
+
state = _useTreeViewContext.state,
|
21
|
+
tree = _useTreeViewContext.tree;
|
22
|
+
var isExpanded = _includesInstanceProperty(_context = _Array$from(state.expandedKeys)).call(_context, item.key);
|
23
|
+
var isSelected = _includesInstanceProperty(_context2 = _Array$from(tree.selectedKeys)).call(_context2, item.key);
|
24
|
+
var isDisabled = _includesInstanceProperty(_context3 = _Array$from(state.disabledKeys)).call(_context3, item.key);
|
25
|
+
|
26
|
+
// this component may seem unnecessary, but it will be where the
|
27
|
+
// useOption and dragAndDrop stuff will go
|
28
|
+
// this comment will be removed at that time.
|
29
|
+
|
30
|
+
return ___EmotionJSX(Box, {
|
31
|
+
as: "li",
|
32
|
+
isRow: true,
|
33
|
+
ref: treeItemRef,
|
34
|
+
role: "treeitem",
|
35
|
+
"aria-selected": isSelected,
|
36
|
+
"aria-disabled": isDisabled,
|
37
|
+
sx: {
|
38
|
+
width: '100%',
|
39
|
+
ml: '36px',
|
40
|
+
':not(:last-child)': {
|
41
|
+
pb: 'sm'
|
42
|
+
}
|
43
|
+
}
|
44
|
+
}, ___EmotionJSX(TreeViewRow, {
|
45
|
+
item: item,
|
46
|
+
title: title,
|
47
|
+
mainIcon: FileIcon,
|
48
|
+
isSelected: isSelected,
|
49
|
+
isExpanded: isExpanded,
|
50
|
+
isDisabled: isDisabled
|
51
|
+
}));
|
52
|
+
});
|
53
|
+
TreeViewItem.propTypes = {
|
54
|
+
item: PropTypes.shape({
|
55
|
+
key: PropTypes.string
|
56
|
+
}),
|
57
|
+
name: PropTypes.string,
|
58
|
+
title: PropTypes.string
|
59
|
+
};
|
60
|
+
export default TreeViewItem;
|
@@ -0,0 +1,135 @@
|
|
1
|
+
import _Object$keys from "@babel/runtime-corejs3/core-js-stable/object/keys";
|
2
|
+
import _Object$getOwnPropertySymbols from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols";
|
3
|
+
import _filterInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/filter";
|
4
|
+
import _Object$getOwnPropertyDescriptor from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor";
|
5
|
+
import _forEachInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/for-each";
|
6
|
+
import _Object$getOwnPropertyDescriptors from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors";
|
7
|
+
import _Object$defineProperties from "@babel/runtime-corejs3/core-js-stable/object/define-properties";
|
8
|
+
import _Object$defineProperty from "@babel/runtime-corejs3/core-js-stable/object/define-property";
|
9
|
+
import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
|
10
|
+
import _defineProperty from "@babel/runtime-corejs3/helpers/esm/defineProperty";
|
11
|
+
import _objectWithoutProperties from "@babel/runtime-corejs3/helpers/esm/objectWithoutProperties";
|
12
|
+
var _excluded = ["title", "mainIcon", "lastIcon", "item", "items", "isExpanded", "isSelected", "isDisabled", "iconButtonProps"];
|
13
|
+
function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
14
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context, _context2; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context = ownKeys(Object(source), !0)).call(_context, function (key) { _defineProperty(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context2 = ownKeys(Object(source))).call(_context2, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
|
15
|
+
import React, { forwardRef, useImperativeHandle, useRef } from 'react';
|
16
|
+
import FolderIcon from '@pingux/mdi-react/FolderIcon';
|
17
|
+
import LockIcon from '@pingux/mdi-react/LockIcon';
|
18
|
+
import MenuDownIcon from '@pingux/mdi-react/MenuDownIcon';
|
19
|
+
import MenuRight from '@pingux/mdi-react/MenuRightIcon';
|
20
|
+
import { useHover, usePress } from '@react-aria/interactions';
|
21
|
+
import { mergeProps } from '@react-aria/utils';
|
22
|
+
import PropTypes from 'prop-types';
|
23
|
+
import { useTreeViewContext } from '../../context/TreeViewContext';
|
24
|
+
import { useStatusClasses } from '../../hooks';
|
25
|
+
import { Box, Icon, IconButtonToggle, Text } from '../../index';
|
26
|
+
import { jsx as ___EmotionJSX } from "@emotion/react";
|
27
|
+
var TreeViewRow = /*#__PURE__*/forwardRef(function (props, ref) {
|
28
|
+
var title = props.title,
|
29
|
+
_props$mainIcon = props.mainIcon,
|
30
|
+
mainIcon = _props$mainIcon === void 0 ? FolderIcon : _props$mainIcon,
|
31
|
+
_props$lastIcon = props.lastIcon,
|
32
|
+
lastIcon = _props$lastIcon === void 0 ? LockIcon : _props$lastIcon,
|
33
|
+
item = props.item,
|
34
|
+
items = props.items,
|
35
|
+
isExpanded = props.isExpanded,
|
36
|
+
isSelected = props.isSelected,
|
37
|
+
isDisabled = props.isDisabled,
|
38
|
+
iconButtonProps = props.iconButtonProps,
|
39
|
+
others = _objectWithoutProperties(props, _excluded);
|
40
|
+
var treeRowRef = useRef();
|
41
|
+
/* istanbul ignore next */
|
42
|
+
useImperativeHandle(ref, function () {
|
43
|
+
return treeRowRef.current;
|
44
|
+
});
|
45
|
+
var key = item.key;
|
46
|
+
var _useTreeViewContext = useTreeViewContext(),
|
47
|
+
state = _useTreeViewContext.state,
|
48
|
+
tree = _useTreeViewContext.tree;
|
49
|
+
var _useHover = useHover({}),
|
50
|
+
hoverProps = _useHover.hoverProps,
|
51
|
+
isHovered = _useHover.isHovered;
|
52
|
+
var pressIcon = function pressIcon(e) {
|
53
|
+
state.toggleKey(item.key);
|
54
|
+
if (iconButtonProps !== null && iconButtonProps !== void 0 && iconButtonProps.onPress) {
|
55
|
+
iconButtonProps.onPress(e);
|
56
|
+
}
|
57
|
+
};
|
58
|
+
var pressRow = function pressRow() {
|
59
|
+
tree.setSelectedKeys([item.key]);
|
60
|
+
};
|
61
|
+
var _usePress = usePress(_objectSpread(_objectSpread({}, others), {}, {
|
62
|
+
ref: treeRowRef,
|
63
|
+
onPress: pressRow
|
64
|
+
})),
|
65
|
+
isPressed = _usePress.isPressed,
|
66
|
+
pressProps = _usePress.pressProps;
|
67
|
+
var _useStatusClasses = useStatusClasses('', {
|
68
|
+
isHovered: isHovered,
|
69
|
+
isSelected: isSelected,
|
70
|
+
isExpanded: isExpanded,
|
71
|
+
isPressed: isPressed,
|
72
|
+
isDisabled: isDisabled
|
73
|
+
}),
|
74
|
+
classNames = _useStatusClasses.classNames;
|
75
|
+
var mergedProps = mergeProps(hoverProps, pressProps, others);
|
76
|
+
return ___EmotionJSX(Box, _extends({
|
77
|
+
ref: treeRowRef,
|
78
|
+
isRow: true,
|
79
|
+
alignItems: "center",
|
80
|
+
gap: "xs",
|
81
|
+
sx: {
|
82
|
+
flexGrow: 1
|
83
|
+
},
|
84
|
+
className: classNames,
|
85
|
+
key: "".concat(key, " box")
|
86
|
+
}, mergedProps), (items === null || items === void 0 ? void 0 : items.length) > 0 && ___EmotionJSX(IconButtonToggle, {
|
87
|
+
onToggle: pressIcon,
|
88
|
+
isToggled: isExpanded,
|
89
|
+
defaultIcon: MenuRight,
|
90
|
+
toggledIcon: MenuDownIcon,
|
91
|
+
iconProps: {
|
92
|
+
size: 25,
|
93
|
+
title: "".concat(title, " expand or collapse button")
|
94
|
+
},
|
95
|
+
buttonProps: {
|
96
|
+
'aria-label': "".concat(title, " expand or collapse button")
|
97
|
+
}
|
98
|
+
}), ___EmotionJSX(Box, {
|
99
|
+
isRow: true,
|
100
|
+
className: classNames,
|
101
|
+
alignItems: "center",
|
102
|
+
gap: "xs",
|
103
|
+
variant: "treeView.treeRow"
|
104
|
+
}, ___EmotionJSX(Icon, {
|
105
|
+
color: "focus",
|
106
|
+
icon: mainIcon,
|
107
|
+
size: 25,
|
108
|
+
title: "folder icon",
|
109
|
+
alt: "folder icon"
|
110
|
+
}), ___EmotionJSX(Text, {
|
111
|
+
className: classNames
|
112
|
+
}, title), ___EmotionJSX(Icon, {
|
113
|
+
icon: lastIcon,
|
114
|
+
size: 15,
|
115
|
+
color: "accent.80",
|
116
|
+
title: "lock icon",
|
117
|
+
alt: "lock icon"
|
118
|
+
})));
|
119
|
+
});
|
120
|
+
TreeViewRow.propTypes = {
|
121
|
+
isSelected: PropTypes.bool,
|
122
|
+
isDisabled: PropTypes.bool,
|
123
|
+
isExpanded: PropTypes.bool,
|
124
|
+
title: PropTypes.string,
|
125
|
+
items: PropTypes.arrayOf(PropTypes.shape({})),
|
126
|
+
iconButtonProps: PropTypes.shape({
|
127
|
+
onPress: PropTypes.func
|
128
|
+
}),
|
129
|
+
item: PropTypes.shape({
|
130
|
+
key: PropTypes.string
|
131
|
+
}),
|
132
|
+
mainIcon: PropTypes.elementType,
|
133
|
+
lastIcon: PropTypes.elementType
|
134
|
+
};
|
135
|
+
export default TreeViewRow;
|
@@ -0,0 +1,74 @@
|
|
1
|
+
import _includesInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/includes";
|
2
|
+
import _Array$from from "@babel/runtime-corejs3/core-js-stable/array/from";
|
3
|
+
import _mapInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/map";
|
4
|
+
import React, { forwardRef, useImperativeHandle, useRef } from 'react';
|
5
|
+
import PropTypes from 'prop-types';
|
6
|
+
import { useTreeViewContext } from '../../context/TreeViewContext';
|
7
|
+
import { Box, TreeViewItem } from '../../index';
|
8
|
+
import { SectionOrItemRender } from './TreeView';
|
9
|
+
import TreeViewRow from './TreeViewRow';
|
10
|
+
import { jsx as ___EmotionJSX } from "@emotion/react";
|
11
|
+
var TreeViewSection = /*#__PURE__*/forwardRef(function (props, ref) {
|
12
|
+
var _context, _context2, _context3, _context4;
|
13
|
+
var item = props.item,
|
14
|
+
items = props.items,
|
15
|
+
title = props.title;
|
16
|
+
var treeSectionRef = useRef();
|
17
|
+
/* istanbul ignore next */
|
18
|
+
useImperativeHandle(ref, function () {
|
19
|
+
return treeSectionRef.current;
|
20
|
+
});
|
21
|
+
var _useTreeViewContext = useTreeViewContext(),
|
22
|
+
state = _useTreeViewContext.state,
|
23
|
+
tree = _useTreeViewContext.tree;
|
24
|
+
var isExpanded = _includesInstanceProperty(_context = _Array$from(state.expandedKeys)).call(_context, item.key);
|
25
|
+
var isSelected = _includesInstanceProperty(_context2 = _Array$from(tree.selectedKeys)).call(_context2, item.key);
|
26
|
+
var isDisabled = _includesInstanceProperty(_context3 = _Array$from(state.disabledKeys)).call(_context3, item.key);
|
27
|
+
return ___EmotionJSX(Box, {
|
28
|
+
ref: treeSectionRef,
|
29
|
+
as: "li",
|
30
|
+
sx: {
|
31
|
+
':not(:last-child)': {
|
32
|
+
pb: 'sm'
|
33
|
+
}
|
34
|
+
},
|
35
|
+
role: "treeitem",
|
36
|
+
"aria-expanded": isExpanded,
|
37
|
+
"aria-selected": isSelected,
|
38
|
+
"aria-disabled": isDisabled
|
39
|
+
}, ___EmotionJSX(TreeViewRow, {
|
40
|
+
item: item,
|
41
|
+
title: title,
|
42
|
+
items: items,
|
43
|
+
isExpanded: isExpanded,
|
44
|
+
isSelected: isSelected,
|
45
|
+
isDisabled: isDisabled
|
46
|
+
}), isExpanded && ___EmotionJSX(Box, {
|
47
|
+
as: "ul",
|
48
|
+
role: "group",
|
49
|
+
key: "".concat(item.key, " ul"),
|
50
|
+
sx: {
|
51
|
+
pl: 'md'
|
52
|
+
}
|
53
|
+
}, _mapInstanceProperty(_context4 = _Array$from(items)).call(_context4, function (_item) {
|
54
|
+
var _item$value$items;
|
55
|
+
return SectionOrItemRender(((_item$value$items = _item.value.items) === null || _item$value$items === void 0 ? void 0 : _item$value$items.length) > 0, ___EmotionJSX(TreeViewSection, {
|
56
|
+
item: _item,
|
57
|
+
items: _item.children,
|
58
|
+
title: _item.value.title,
|
59
|
+
key: _item.value.title
|
60
|
+
}), ___EmotionJSX(TreeViewItem, {
|
61
|
+
item: _item,
|
62
|
+
title: _item.value.title,
|
63
|
+
key: _item.value.title
|
64
|
+
}));
|
65
|
+
})));
|
66
|
+
});
|
67
|
+
TreeViewSection.propTypes = {
|
68
|
+
items: PropTypes.arrayOf(PropTypes.shape({})),
|
69
|
+
item: PropTypes.shape({
|
70
|
+
key: PropTypes.string
|
71
|
+
}),
|
72
|
+
title: PropTypes.string
|
73
|
+
};
|
74
|
+
export default TreeViewSection;
|
package/lib/index.js
CHANGED
@@ -163,6 +163,8 @@ export * from './components/TextField';
|
|
163
163
|
export { default as TimeZonePicker } from './components/TimeZonePicker';
|
164
164
|
export { default as TooltipTrigger } from './components/TooltipTrigger';
|
165
165
|
export * from './components/TooltipTrigger';
|
166
|
+
export { default as TreeView } from './components/TreeView';
|
167
|
+
export * from './components/TreeView';
|
166
168
|
export { default as PageHeader } from './experimental/PageHeader';
|
167
169
|
export * from './experimental/PageHeader';
|
168
170
|
|
@@ -172,7 +174,7 @@ export { default as DataTable } from './components/DataTable';
|
|
172
174
|
export * from './components/DataTable';
|
173
175
|
export * from './types';
|
174
176
|
export { OverlayProvider, useOverlayPosition, useOverlayTrigger } from 'react-aria';
|
175
|
-
export { Item, Section, useOverlayTriggerState } from 'react-stately';
|
177
|
+
export { Item, Section, useOverlayTriggerState, useTreeData } from 'react-stately';
|
176
178
|
export { TableBody as DataTableBody, Cell as DataTableCell, Column as DataTableColumn, TableHeader as DataTableHeader, Row as DataTableRow } from 'react-stately';
|
177
179
|
|
178
180
|
// Experimental
|
@@ -45,6 +45,7 @@ import table from '../../components/Table/Table.styles';
|
|
45
45
|
import * as tab from '../../components/Tabs/Tabs.style';
|
46
46
|
import timeZone from '../../components/TimeZonePicker/TimeZone.styles';
|
47
47
|
import tooltip from '../../components/TooltipTrigger/Tooltip.styles';
|
48
|
+
import treeView from '../../components/TreeView/TreeView.styles';
|
48
49
|
import panelHeader from '../../experimental/PanelHeader/PanelHeader.styles';
|
49
50
|
export default _objectSpread({
|
50
51
|
accordion: accordion,
|
@@ -82,5 +83,6 @@ export default _objectSpread({
|
|
82
83
|
stepper: stepper,
|
83
84
|
table: table,
|
84
85
|
timeZone: timeZone,
|
85
|
-
tooltip: tooltip
|
86
|
+
tooltip: tooltip,
|
87
|
+
treeView: treeView
|
86
88
|
}, tab);
|