@veracity/vui 1.7.0-beta.0 → 1.7.0-beta.1
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/cjs/accordion/accordion.d.ts +1 -1
- package/dist/cjs/accordion/accordion.d.ts.map +1 -1
- package/dist/cjs/accordion/accordion.js +7 -7
- package/dist/cjs/accordion/accordion.types.d.ts +11 -0
- package/dist/cjs/accordion/accordion.types.d.ts.map +1 -1
- package/dist/cjs/accordion/accordionItem.d.ts.map +1 -1
- package/dist/cjs/accordion/accordionItem.js +3 -3
- package/dist/cjs/accordion/accordionItemArrow.d.ts +1 -1
- package/dist/cjs/accordion/accordionItemArrow.d.ts.map +1 -1
- package/dist/cjs/accordion/accordionItemArrow.js +10 -3
- package/dist/cjs/accordion/accordionItemHorizontal.d.ts +5 -0
- package/dist/cjs/accordion/accordionItemHorizontal.d.ts.map +1 -0
- package/dist/cjs/accordion/accordionItemHorizontal.js +70 -0
- package/dist/cjs/accordion/index.d.ts +1 -0
- package/dist/cjs/accordion/index.d.ts.map +1 -1
- package/dist/cjs/accordion/index.js +1 -0
- package/dist/esm/accordion/accordion.d.ts +1 -1
- package/dist/esm/accordion/accordion.d.ts.map +1 -1
- package/dist/esm/accordion/accordion.js +6 -6
- package/dist/esm/accordion/accordion.types.d.ts +11 -0
- package/dist/esm/accordion/accordion.types.d.ts.map +1 -1
- package/dist/esm/accordion/accordionItem.d.ts.map +1 -1
- package/dist/esm/accordion/accordionItem.js +3 -3
- package/dist/esm/accordion/accordionItemArrow.d.ts +1 -1
- package/dist/esm/accordion/accordionItemArrow.d.ts.map +1 -1
- package/dist/esm/accordion/accordionItemArrow.js +10 -3
- package/dist/esm/accordion/accordionItemHorizontal.d.ts +5 -0
- package/dist/esm/accordion/accordionItemHorizontal.d.ts.map +1 -0
- package/dist/esm/accordion/accordionItemHorizontal.js +29 -0
- package/dist/esm/accordion/index.d.ts +1 -0
- package/dist/esm/accordion/index.d.ts.map +1 -1
- package/dist/esm/accordion/index.js +1 -0
- package/package.json +1 -1
- package/src/accordion/accordion.tsx +14 -7
- package/src/accordion/accordion.types.ts +12 -7
- package/src/accordion/accordionItem.tsx +11 -4
- package/src/accordion/accordionItemArrow.tsx +13 -3
- package/src/accordion/accordionItemHorizontal.tsx +85 -0
- package/src/accordion/index.ts +1 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { AccordionProps } from './accordion.types';
|
|
2
2
|
export declare const AccordionBase: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, import("..").SystemProps, never>;
|
|
3
|
-
/**
|
|
3
|
+
/** Allows to show and hide sections of related content on a page. */
|
|
4
4
|
export declare const Accordion: import("../core").VuiComponent<"div", AccordionProps>;
|
|
5
5
|
export default Accordion;
|
|
6
6
|
//# sourceMappingURL=accordion.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accordion.d.ts","sourceRoot":"","sources":["../../../src/accordion/accordion.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAsB,cAAc,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"accordion.d.ts","sourceRoot":"","sources":["../../../src/accordion/accordion.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAsB,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAKtE,eAAO,MAAM,aAAa,+HAIzB,CAAA;AAED,qEAAqE;AACrE,eAAO,MAAM,SAAS,uDAyBpB,CAAA;AAEF,eAAe,SAAS,CAAA"}
|
|
@@ -43,23 +43,23 @@ const core_1 = require("../core");
|
|
|
43
43
|
const list_1 = __importDefault(require("../list"));
|
|
44
44
|
const utils_1 = require("../utils");
|
|
45
45
|
const accordionItem_1 = __importDefault(require("./accordionItem"));
|
|
46
|
+
const accordionItemHorizontal_1 = __importDefault(require("./accordionItemHorizontal"));
|
|
46
47
|
const context_1 = require("./context");
|
|
47
48
|
exports.AccordionBase = core_1.styled.divBox `
|
|
48
49
|
display: flex;
|
|
49
50
|
min-width: 0;
|
|
50
51
|
transition-duration: normal;
|
|
51
52
|
`;
|
|
52
|
-
/**
|
|
53
|
+
/** Allows to show and hide sections of related content on a page. */
|
|
53
54
|
exports.Accordion = (0, core_1.vui)((props, ref) => {
|
|
54
|
-
var _a;
|
|
55
|
-
const { children, className, items, size } = props, rest = __rest(props, ["children", "className", "items", "size"]);
|
|
55
|
+
var _a, _b;
|
|
56
|
+
const { children, className, orientation = 'vertical', items, size } = props, rest = __rest(props, ["children", "className", "orientation", "items", "size"]);
|
|
56
57
|
const styles = (0, core_1.useStyleConfig)('Accordion', props);
|
|
57
58
|
const context = (0, react_1.useMemo)(() => (0, utils_1.filterUndefined)({ size }), [size]);
|
|
58
59
|
const aliasedProps = (0, utils_1.filterUndefined)({});
|
|
59
60
|
return (react_1.default.createElement(context_1.AccordionProvider, { value: context },
|
|
60
|
-
react_1.default.createElement(exports.AccordionBase, Object.assign({ className: (0, utils_1.cs)('vui-accordion', className), ref: ref }, styles, aliasedProps, rest),
|
|
61
|
-
react_1.default.createElement(
|
|
62
|
-
|
|
63
|
-
: children))));
|
|
61
|
+
react_1.default.createElement(exports.AccordionBase, Object.assign({ className: (0, utils_1.cs)('vui-accordion', className), ref: ref }, styles, aliasedProps, rest), orientation === 'vertical' ? (react_1.default.createElement(list_1.default, { w: "100%" }, items
|
|
62
|
+
? (_a = items === null || items === void 0 ? void 0 : items.map) === null || _a === void 0 ? void 0 : _a.call(items, (item, key) => react_1.default.createElement(accordionItem_1.default, Object.assign({ key: key }, item)))
|
|
63
|
+
: children)) : items ? ((_b = items === null || items === void 0 ? void 0 : items.map) === null || _b === void 0 ? void 0 : _b.call(items, (item, key) => react_1.default.createElement(accordionItemHorizontal_1.default, Object.assign({ key: key }, item)))) : (children))));
|
|
64
64
|
});
|
|
65
65
|
exports.default = exports.Accordion;
|
|
@@ -2,7 +2,10 @@ import { ReactNode } from 'react';
|
|
|
2
2
|
import { ListItemProps } from '../list';
|
|
3
3
|
import { SystemProps } from '../system';
|
|
4
4
|
import { ThemingProps } from '../theme';
|
|
5
|
+
export declare type Orientation = 'vertical' | 'horizontal';
|
|
5
6
|
export declare type AccordionProps = SystemProps & ThemingProps<'Accordion'> & {
|
|
7
|
+
/** Items orientation @default 'vertical' */
|
|
8
|
+
orientation?: Orientation;
|
|
6
9
|
items?: AccordionItemProps[];
|
|
7
10
|
};
|
|
8
11
|
export declare type AccordionItemId = string | number;
|
|
@@ -11,15 +14,23 @@ export declare type AccordionOnToggleEvent = {
|
|
|
11
14
|
collapsed: boolean;
|
|
12
15
|
};
|
|
13
16
|
export declare type AccordionItemProps = ListItemProps & {
|
|
17
|
+
/** Unique ID */
|
|
14
18
|
id: AccordionItemId;
|
|
19
|
+
/** Custom class name */
|
|
15
20
|
className?: string;
|
|
21
|
+
/** Content */
|
|
16
22
|
children?: ReactNode;
|
|
23
|
+
/** Alternative way to provide content */
|
|
17
24
|
content?: ReactNode;
|
|
25
|
+
/** Collapsed state */
|
|
18
26
|
collapsed?: boolean;
|
|
27
|
+
/** Title */
|
|
19
28
|
title?: string | ReactNode;
|
|
29
|
+
/** Collapse change state */
|
|
20
30
|
onToggle?: (event: AccordionOnToggleEvent) => void;
|
|
21
31
|
};
|
|
22
32
|
export declare type AccordionItemArrowProps = {
|
|
23
33
|
collapsed?: boolean;
|
|
34
|
+
orientation?: Orientation;
|
|
24
35
|
};
|
|
25
36
|
//# sourceMappingURL=accordion.types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accordion.types.d.ts","sourceRoot":"","sources":["../../../src/accordion/accordion.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEjC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAEvC,oBAAY,cAAc,GAAG,WAAW,GACtC,YAAY,CAAC,WAAW,CAAC,GAAG;IAC1B,KAAK,CAAC,EAAE,kBAAkB,EAAE,CAAA;CAC7B,CAAA;AAEH,oBAAY,eAAe,GAAG,MAAM,GAAG,MAAM,CAAA;AAE7C,oBAAY,sBAAsB,GAAG;IACnC,EAAE,EAAE,eAAe,CAAA;IACnB,SAAS,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,oBAAY,kBAAkB,GAAG,aAAa,GAAG;
|
|
1
|
+
{"version":3,"file":"accordion.types.d.ts","sourceRoot":"","sources":["../../../src/accordion/accordion.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEjC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAEvC,oBAAY,WAAW,GAAG,UAAU,GAAG,YAAY,CAAA;AAEnD,oBAAY,cAAc,GAAG,WAAW,GACtC,YAAY,CAAC,WAAW,CAAC,GAAG;IAC1B,4CAA4C;IAC5C,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,KAAK,CAAC,EAAE,kBAAkB,EAAE,CAAA;CAC7B,CAAA;AAEH,oBAAY,eAAe,GAAG,MAAM,GAAG,MAAM,CAAA;AAE7C,oBAAY,sBAAsB,GAAG;IACnC,EAAE,EAAE,eAAe,CAAA;IACnB,SAAS,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,oBAAY,kBAAkB,GAAG,aAAa,GAAG;IAC/C,gBAAgB;IAChB,EAAE,EAAE,eAAe,CAAA;IACnB,wBAAwB;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc;IACd,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,yCAAyC;IACzC,OAAO,CAAC,EAAE,SAAS,CAAA;IACnB,sBAAsB;IACtB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,YAAY;IACZ,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1B,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,sBAAsB,KAAK,IAAI,CAAA;CACnD,CAAA;AAED,oBAAY,uBAAuB,GAAG;IACpC,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,WAAW,CAAC,EAAE,WAAW,CAAA;CAC1B,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accordionItem.d.ts","sourceRoot":"","sources":["../../../src/accordion/accordionItem.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAItD,yBAAyB;AACzB,eAAO,MAAM,aAAa,UAAW,kBAAkB,
|
|
1
|
+
{"version":3,"file":"accordionItem.d.ts","sourceRoot":"","sources":["../../../src/accordion/accordionItem.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAItD,yBAAyB;AACzB,eAAO,MAAM,aAAa,UAAW,kBAAkB,gBAkDtD,CAAA;AAED,eAAe,aAAa,CAAA"}
|
|
@@ -59,12 +59,12 @@ const AccordionItem = (props) => {
|
|
|
59
59
|
setIsCollapsedInternal(!collapsedInternal);
|
|
60
60
|
}
|
|
61
61
|
};
|
|
62
|
-
return (react_1.default.createElement(list_1.ListItem, Object.assign({ borderBottom: "1px solid grey.40", className: (0, utils_1.cs)('vui-accordion-item', className), disabled: disabled, flexDirection: "column", h: "auto",
|
|
63
|
-
react_1.default.createElement(box_1.Box, { cursor: disabled ? 'not-allowed' : 'pointer', justifyContent: "space-between", onClick: toggle, w: "100%" },
|
|
62
|
+
return (react_1.default.createElement(list_1.ListItem, Object.assign({ borderBottom: "1px solid grey.40", className: (0, utils_1.cs)('vui-accordion-item', className), disabled: disabled, flexDirection: "column", h: "auto", id: `${id}`, p: 0, w: "100%" }, rest),
|
|
63
|
+
react_1.default.createElement(box_1.Box, Object.assign({ cursor: disabled ? 'not-allowed' : 'pointer', hoverBg: "blue.10", justifyContent: "space-between", onClick: toggle, px: 2, w: "100%" }, styles.item),
|
|
64
64
|
react_1.default.createElement(box_1.Box, { fontWeight: typeof title === 'string' ? '500' : 'inherit' }, title),
|
|
65
65
|
react_1.default.createElement(box_1.Box, null,
|
|
66
66
|
react_1.default.createElement(accordionItemArrow_1.default, { collapsed: collapsedInternal }))),
|
|
67
|
-
!collapsedInternal && (react_1.default.createElement(box_1.Box, { mb: 2, mt: 2, w: "100%" }, children !== null && children !== void 0 ? children : content))));
|
|
67
|
+
!collapsedInternal && (react_1.default.createElement(box_1.Box, { mb: 2, mt: 2, px: 2, py: 1, w: "100%" }, children !== null && children !== void 0 ? children : content))));
|
|
68
68
|
};
|
|
69
69
|
exports.AccordionItem = AccordionItem;
|
|
70
70
|
exports.default = exports.AccordionItem;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { AccordionItemArrowProps } from './accordion.types';
|
|
3
|
-
declare const _default: React.MemoExoticComponent<(
|
|
3
|
+
declare const _default: React.MemoExoticComponent<({ collapsed, orientation }: AccordionItemArrowProps) => JSX.Element>;
|
|
4
4
|
export default _default;
|
|
5
5
|
//# sourceMappingURL=accordionItemArrow.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accordionItemArrow.d.ts","sourceRoot":"","sources":["../../../src/accordion/accordionItemArrow.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAA;;
|
|
1
|
+
{"version":3,"file":"accordionItemArrow.d.ts","sourceRoot":"","sources":["../../../src/accordion/accordionItemArrow.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAA;;AAiB3D,wBAA6C"}
|
|
@@ -5,8 +5,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const react_1 = __importDefault(require("react"));
|
|
7
7
|
const icon_1 = __importDefault(require("../icon"));
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
const names = {
|
|
9
|
+
horizontal: {
|
|
10
|
+
collapsed: 'falChevronRight',
|
|
11
|
+
expanded: 'falChevronLeft'
|
|
12
|
+
},
|
|
13
|
+
vertical: {
|
|
14
|
+
collapsed: 'falChevronDown',
|
|
15
|
+
expanded: 'falChevronUp'
|
|
16
|
+
}
|
|
11
17
|
};
|
|
18
|
+
const AccordionItemArrow = ({ collapsed, orientation = 'vertical' }) => (react_1.default.createElement(icon_1.default, { name: names[orientation][collapsed ? 'collapsed' : 'expanded'], size: "xs" }));
|
|
12
19
|
exports.default = react_1.default.memo(AccordionItemArrow);
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { AccordionItemProps } from './accordion.types';
|
|
2
|
+
/** [Beta] An accordion item (horizontal orientation). */
|
|
3
|
+
export declare const AccordionItemHorizontal: (props: AccordionItemProps) => JSX.Element;
|
|
4
|
+
export default AccordionItemHorizontal;
|
|
5
|
+
//# sourceMappingURL=accordionItemHorizontal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accordionItemHorizontal.d.ts","sourceRoot":"","sources":["../../../src/accordion/accordionItemHorizontal.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAItD,yDAAyD;AACzD,eAAO,MAAM,uBAAuB,UAAW,kBAAkB,gBAwEhE,CAAA;AAED,eAAe,uBAAuB,CAAA"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
26
|
+
var t = {};
|
|
27
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
28
|
+
t[p] = s[p];
|
|
29
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
30
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
31
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
32
|
+
t[p[i]] = s[p[i]];
|
|
33
|
+
}
|
|
34
|
+
return t;
|
|
35
|
+
};
|
|
36
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
37
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
38
|
+
};
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.AccordionItemHorizontal = void 0;
|
|
41
|
+
const react_1 = __importStar(require("react"));
|
|
42
|
+
const box_1 = __importDefault(require("../box"));
|
|
43
|
+
const core_1 = require("../core");
|
|
44
|
+
const utils_1 = require("../utils");
|
|
45
|
+
const accordionItemArrow_1 = __importDefault(require("./accordionItemArrow"));
|
|
46
|
+
const context_1 = require("./context");
|
|
47
|
+
/** [Beta] An accordion item (horizontal orientation). */
|
|
48
|
+
const AccordionItemHorizontal = (props) => {
|
|
49
|
+
const _a = (0, core_1.omitThemingProps)(props), { className, children, id, content, disabled, title, collapsed, onToggle } = _a, rest = __rest(_a, ["className", "children", "id", "content", "disabled", "title", "collapsed", "onToggle"]);
|
|
50
|
+
const [collapsedInternal, setIsCollapsedInternal] = (0, react_1.useState)(false);
|
|
51
|
+
const styles = (0, core_1.useStyleConfig)('Accordion', (0, context_1.useAccordionContext)());
|
|
52
|
+
(0, react_1.useEffect)(() => {
|
|
53
|
+
setIsCollapsedInternal(!!collapsed);
|
|
54
|
+
}, [collapsed]);
|
|
55
|
+
const toggle = () => {
|
|
56
|
+
if (!disabled) {
|
|
57
|
+
onToggle === null || onToggle === void 0 ? void 0 : onToggle({ id, collapsed: !collapsedInternal });
|
|
58
|
+
setIsCollapsedInternal(!collapsedInternal);
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
const cursor = disabled ? 'not-allowed' : 'pointer';
|
|
62
|
+
const fontWeight = typeof title === 'string' ? '500' : 'inherit';
|
|
63
|
+
return (react_1.default.createElement(box_1.default, Object.assign({ alignItems: collapsedInternal ? 'normal' : 'baseline', bg: disabled ? 'disabled.bg' : undefined, borderRight: "1px solid grey.40", className: (0, utils_1.cs)('vui-accordion-item-horizontal', className), color: disabled ? 'disabled.color' : undefined, column: true, cursor: disabled ? 'not-allowed' : undefined, id: `${id}`, maxW: collapsedInternal ? styles.item.minH : 'auto', minW: styles.item.minH, p: 0, transitionDuration: "0ms", userSelect: disabled ? 'none' : undefined }, rest),
|
|
64
|
+
react_1.default.createElement(box_1.default, Object.assign({}, styles.item, { cursor: cursor, hoverBg: "blue.10", justifyContent: "space-between", minH: styles.item.minH, onClick: toggle, p: styles.item.pt, w: "100%" }),
|
|
65
|
+
!collapsedInternal && react_1.default.createElement(box_1.default, { fontWeight: fontWeight }, title),
|
|
66
|
+
react_1.default.createElement(accordionItemArrow_1.default, { collapsed: collapsedInternal, orientation: "horizontal" })),
|
|
67
|
+
!collapsedInternal ? (react_1.default.createElement(box_1.default, { p: styles.item.pt, pt: 0, transitionDuration: "0ms" }, children !== null && children !== void 0 ? children : content)) : (react_1.default.createElement(box_1.default, { cursor: cursor, flexDirection: "row-reverse", fontWeight: fontWeight, mb: styles.item.minH, mt: styles.item.pt, onClick: toggle, transform: "rotate(-90deg)", transitionDuration: "0ms", whiteSpace: "nowrap" }, title))));
|
|
68
|
+
};
|
|
69
|
+
exports.AccordionItemHorizontal = AccordionItemHorizontal;
|
|
70
|
+
exports.default = exports.AccordionItemHorizontal;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/accordion/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,iBAAiB,CAAA;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,cAAc,mBAAmB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/accordion/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,2BAA2B,CAAA;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,cAAc,mBAAmB,CAAA"}
|
|
@@ -20,6 +20,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
20
20
|
exports.default = void 0;
|
|
21
21
|
__exportStar(require("./accordion"), exports);
|
|
22
22
|
__exportStar(require("./accordionItem"), exports);
|
|
23
|
+
__exportStar(require("./accordionItemHorizontal"), exports);
|
|
23
24
|
var accordion_1 = require("./accordion");
|
|
24
25
|
Object.defineProperty(exports, "default", { enumerable: true, get: function () { return __importDefault(accordion_1).default; } });
|
|
25
26
|
__exportStar(require("./accordion.types"), exports);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { AccordionProps } from './accordion.types';
|
|
2
2
|
export declare const AccordionBase: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, import("..").SystemProps, never>;
|
|
3
|
-
/**
|
|
3
|
+
/** Allows to show and hide sections of related content on a page. */
|
|
4
4
|
export declare const Accordion: import("../core").VuiComponent<"div", AccordionProps>;
|
|
5
5
|
export default Accordion;
|
|
6
6
|
//# sourceMappingURL=accordion.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accordion.d.ts","sourceRoot":"","sources":["../../../src/accordion/accordion.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAsB,cAAc,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"accordion.d.ts","sourceRoot":"","sources":["../../../src/accordion/accordion.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAsB,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAKtE,eAAO,MAAM,aAAa,+HAIzB,CAAA;AAED,qEAAqE;AACrE,eAAO,MAAM,SAAS,uDAyBpB,CAAA;AAEF,eAAe,SAAS,CAAA"}
|
|
@@ -3,22 +3,22 @@ import { styled, useStyleConfig, vui } from '../core';
|
|
|
3
3
|
import List from '../list';
|
|
4
4
|
import { cs, filterUndefined } from '../utils';
|
|
5
5
|
import AccordionItem from './accordionItem';
|
|
6
|
+
import AccordionItemHorizontal from './accordionItemHorizontal';
|
|
6
7
|
import { AccordionProvider } from './context';
|
|
7
8
|
export const AccordionBase = styled.divBox `
|
|
8
9
|
display: flex;
|
|
9
10
|
min-width: 0;
|
|
10
11
|
transition-duration: normal;
|
|
11
12
|
`;
|
|
12
|
-
/**
|
|
13
|
+
/** Allows to show and hide sections of related content on a page. */
|
|
13
14
|
export const Accordion = vui((props, ref) => {
|
|
14
|
-
const { children, className, items, size, ...rest } = props;
|
|
15
|
+
const { children, className, orientation = 'vertical', items, size, ...rest } = props;
|
|
15
16
|
const styles = useStyleConfig('Accordion', props);
|
|
16
17
|
const context = useMemo(() => filterUndefined({ size }), [size]);
|
|
17
18
|
const aliasedProps = filterUndefined({});
|
|
18
19
|
return (React.createElement(AccordionProvider, { value: context },
|
|
19
|
-
React.createElement(AccordionBase, { className: cs('vui-accordion', className), ref: ref, ...styles, ...aliasedProps, ...rest },
|
|
20
|
-
React.createElement(
|
|
21
|
-
|
|
22
|
-
: children))));
|
|
20
|
+
React.createElement(AccordionBase, { className: cs('vui-accordion', className), ref: ref, ...styles, ...aliasedProps, ...rest }, orientation === 'vertical' ? (React.createElement(List, { w: "100%" }, items
|
|
21
|
+
? items?.map?.((item, key) => React.createElement(AccordionItem, { key: key, ...item }))
|
|
22
|
+
: children)) : items ? (items?.map?.((item, key) => React.createElement(AccordionItemHorizontal, { key: key, ...item }))) : (children))));
|
|
23
23
|
});
|
|
24
24
|
export default Accordion;
|
|
@@ -2,7 +2,10 @@ import { ReactNode } from 'react';
|
|
|
2
2
|
import { ListItemProps } from '../list';
|
|
3
3
|
import { SystemProps } from '../system';
|
|
4
4
|
import { ThemingProps } from '../theme';
|
|
5
|
+
export declare type Orientation = 'vertical' | 'horizontal';
|
|
5
6
|
export declare type AccordionProps = SystemProps & ThemingProps<'Accordion'> & {
|
|
7
|
+
/** Items orientation @default 'vertical' */
|
|
8
|
+
orientation?: Orientation;
|
|
6
9
|
items?: AccordionItemProps[];
|
|
7
10
|
};
|
|
8
11
|
export declare type AccordionItemId = string | number;
|
|
@@ -11,15 +14,23 @@ export declare type AccordionOnToggleEvent = {
|
|
|
11
14
|
collapsed: boolean;
|
|
12
15
|
};
|
|
13
16
|
export declare type AccordionItemProps = ListItemProps & {
|
|
17
|
+
/** Unique ID */
|
|
14
18
|
id: AccordionItemId;
|
|
19
|
+
/** Custom class name */
|
|
15
20
|
className?: string;
|
|
21
|
+
/** Content */
|
|
16
22
|
children?: ReactNode;
|
|
23
|
+
/** Alternative way to provide content */
|
|
17
24
|
content?: ReactNode;
|
|
25
|
+
/** Collapsed state */
|
|
18
26
|
collapsed?: boolean;
|
|
27
|
+
/** Title */
|
|
19
28
|
title?: string | ReactNode;
|
|
29
|
+
/** Collapse change state */
|
|
20
30
|
onToggle?: (event: AccordionOnToggleEvent) => void;
|
|
21
31
|
};
|
|
22
32
|
export declare type AccordionItemArrowProps = {
|
|
23
33
|
collapsed?: boolean;
|
|
34
|
+
orientation?: Orientation;
|
|
24
35
|
};
|
|
25
36
|
//# sourceMappingURL=accordion.types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accordion.types.d.ts","sourceRoot":"","sources":["../../../src/accordion/accordion.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEjC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAEvC,oBAAY,cAAc,GAAG,WAAW,GACtC,YAAY,CAAC,WAAW,CAAC,GAAG;IAC1B,KAAK,CAAC,EAAE,kBAAkB,EAAE,CAAA;CAC7B,CAAA;AAEH,oBAAY,eAAe,GAAG,MAAM,GAAG,MAAM,CAAA;AAE7C,oBAAY,sBAAsB,GAAG;IACnC,EAAE,EAAE,eAAe,CAAA;IACnB,SAAS,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,oBAAY,kBAAkB,GAAG,aAAa,GAAG;
|
|
1
|
+
{"version":3,"file":"accordion.types.d.ts","sourceRoot":"","sources":["../../../src/accordion/accordion.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEjC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAEvC,oBAAY,WAAW,GAAG,UAAU,GAAG,YAAY,CAAA;AAEnD,oBAAY,cAAc,GAAG,WAAW,GACtC,YAAY,CAAC,WAAW,CAAC,GAAG;IAC1B,4CAA4C;IAC5C,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,KAAK,CAAC,EAAE,kBAAkB,EAAE,CAAA;CAC7B,CAAA;AAEH,oBAAY,eAAe,GAAG,MAAM,GAAG,MAAM,CAAA;AAE7C,oBAAY,sBAAsB,GAAG;IACnC,EAAE,EAAE,eAAe,CAAA;IACnB,SAAS,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,oBAAY,kBAAkB,GAAG,aAAa,GAAG;IAC/C,gBAAgB;IAChB,EAAE,EAAE,eAAe,CAAA;IACnB,wBAAwB;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc;IACd,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,yCAAyC;IACzC,OAAO,CAAC,EAAE,SAAS,CAAA;IACnB,sBAAsB;IACtB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,YAAY;IACZ,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1B,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,sBAAsB,KAAK,IAAI,CAAA;CACnD,CAAA;AAED,oBAAY,uBAAuB,GAAG;IACpC,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,WAAW,CAAC,EAAE,WAAW,CAAA;CAC1B,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accordionItem.d.ts","sourceRoot":"","sources":["../../../src/accordion/accordionItem.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAItD,yBAAyB;AACzB,eAAO,MAAM,aAAa,UAAW,kBAAkB,
|
|
1
|
+
{"version":3,"file":"accordionItem.d.ts","sourceRoot":"","sources":["../../../src/accordion/accordionItem.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAItD,yBAAyB;AACzB,eAAO,MAAM,aAAa,UAAW,kBAAkB,gBAkDtD,CAAA;AAED,eAAe,aAAa,CAAA"}
|
|
@@ -19,11 +19,11 @@ export const AccordionItem = (props) => {
|
|
|
19
19
|
setIsCollapsedInternal(!collapsedInternal);
|
|
20
20
|
}
|
|
21
21
|
};
|
|
22
|
-
return (React.createElement(ListItem, { borderBottom: "1px solid grey.40", className: cs('vui-accordion-item', className), disabled: disabled, flexDirection: "column", h: "auto",
|
|
23
|
-
React.createElement(Box, { cursor: disabled ? 'not-allowed' : 'pointer', justifyContent: "space-between", onClick: toggle, w: "100%" },
|
|
22
|
+
return (React.createElement(ListItem, { borderBottom: "1px solid grey.40", className: cs('vui-accordion-item', className), disabled: disabled, flexDirection: "column", h: "auto", id: `${id}`, p: 0, w: "100%", ...rest },
|
|
23
|
+
React.createElement(Box, { cursor: disabled ? 'not-allowed' : 'pointer', hoverBg: "blue.10", justifyContent: "space-between", onClick: toggle, px: 2, w: "100%", ...styles.item },
|
|
24
24
|
React.createElement(Box, { fontWeight: typeof title === 'string' ? '500' : 'inherit' }, title),
|
|
25
25
|
React.createElement(Box, null,
|
|
26
26
|
React.createElement(AccordionItemArrow, { collapsed: collapsedInternal }))),
|
|
27
|
-
!collapsedInternal && (React.createElement(Box, { mb: 2, mt: 2, w: "100%" }, children ?? content))));
|
|
27
|
+
!collapsedInternal && (React.createElement(Box, { mb: 2, mt: 2, px: 2, py: 1, w: "100%" }, children ?? content))));
|
|
28
28
|
};
|
|
29
29
|
export default AccordionItem;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { AccordionItemArrowProps } from './accordion.types';
|
|
3
|
-
declare const _default: React.MemoExoticComponent<(
|
|
3
|
+
declare const _default: React.MemoExoticComponent<({ collapsed, orientation }: AccordionItemArrowProps) => JSX.Element>;
|
|
4
4
|
export default _default;
|
|
5
5
|
//# sourceMappingURL=accordionItemArrow.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accordionItemArrow.d.ts","sourceRoot":"","sources":["../../../src/accordion/accordionItemArrow.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAA;;
|
|
1
|
+
{"version":3,"file":"accordionItemArrow.d.ts","sourceRoot":"","sources":["../../../src/accordion/accordionItemArrow.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAA;;AAiB3D,wBAA6C"}
|
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import Icon from '../icon';
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
const names = {
|
|
4
|
+
horizontal: {
|
|
5
|
+
collapsed: 'falChevronRight',
|
|
6
|
+
expanded: 'falChevronLeft'
|
|
7
|
+
},
|
|
8
|
+
vertical: {
|
|
9
|
+
collapsed: 'falChevronDown',
|
|
10
|
+
expanded: 'falChevronUp'
|
|
11
|
+
}
|
|
6
12
|
};
|
|
13
|
+
const AccordionItemArrow = ({ collapsed, orientation = 'vertical' }) => (React.createElement(Icon, { name: names[orientation][collapsed ? 'collapsed' : 'expanded'], size: "xs" }));
|
|
7
14
|
export default React.memo(AccordionItemArrow);
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { AccordionItemProps } from './accordion.types';
|
|
2
|
+
/** [Beta] An accordion item (horizontal orientation). */
|
|
3
|
+
export declare const AccordionItemHorizontal: (props: AccordionItemProps) => JSX.Element;
|
|
4
|
+
export default AccordionItemHorizontal;
|
|
5
|
+
//# sourceMappingURL=accordionItemHorizontal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accordionItemHorizontal.d.ts","sourceRoot":"","sources":["../../../src/accordion/accordionItemHorizontal.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAItD,yDAAyD;AACzD,eAAO,MAAM,uBAAuB,UAAW,kBAAkB,gBAwEhE,CAAA;AAED,eAAe,uBAAuB,CAAA"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import React, { useEffect, useState } from 'react';
|
|
2
|
+
import Box from '../box';
|
|
3
|
+
import { omitThemingProps, useStyleConfig } from '../core';
|
|
4
|
+
import { cs } from '../utils';
|
|
5
|
+
import AccordionItemArrow from './accordionItemArrow';
|
|
6
|
+
import { useAccordionContext } from './context';
|
|
7
|
+
/** [Beta] An accordion item (horizontal orientation). */
|
|
8
|
+
export const AccordionItemHorizontal = (props) => {
|
|
9
|
+
const { className, children, id, content, disabled, title, collapsed, onToggle, ...rest } = omitThemingProps(props);
|
|
10
|
+
const [collapsedInternal, setIsCollapsedInternal] = useState(false);
|
|
11
|
+
const styles = useStyleConfig('Accordion', useAccordionContext());
|
|
12
|
+
useEffect(() => {
|
|
13
|
+
setIsCollapsedInternal(!!collapsed);
|
|
14
|
+
}, [collapsed]);
|
|
15
|
+
const toggle = () => {
|
|
16
|
+
if (!disabled) {
|
|
17
|
+
onToggle?.({ id, collapsed: !collapsedInternal });
|
|
18
|
+
setIsCollapsedInternal(!collapsedInternal);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
const cursor = disabled ? 'not-allowed' : 'pointer';
|
|
22
|
+
const fontWeight = typeof title === 'string' ? '500' : 'inherit';
|
|
23
|
+
return (React.createElement(Box, { alignItems: collapsedInternal ? 'normal' : 'baseline', bg: disabled ? 'disabled.bg' : undefined, borderRight: "1px solid grey.40", className: cs('vui-accordion-item-horizontal', className), color: disabled ? 'disabled.color' : undefined, column: true, cursor: disabled ? 'not-allowed' : undefined, id: `${id}`, maxW: collapsedInternal ? styles.item.minH : 'auto', minW: styles.item.minH, p: 0, transitionDuration: "0ms", userSelect: disabled ? 'none' : undefined, ...rest },
|
|
24
|
+
React.createElement(Box, { ...styles.item, cursor: cursor, hoverBg: "blue.10", justifyContent: "space-between", minH: styles.item.minH, onClick: toggle, p: styles.item.pt, w: "100%" },
|
|
25
|
+
!collapsedInternal && React.createElement(Box, { fontWeight: fontWeight }, title),
|
|
26
|
+
React.createElement(AccordionItemArrow, { collapsed: collapsedInternal, orientation: "horizontal" })),
|
|
27
|
+
!collapsedInternal ? (React.createElement(Box, { p: styles.item.pt, pt: 0, transitionDuration: "0ms" }, children ?? content)) : (React.createElement(Box, { cursor: cursor, flexDirection: "row-reverse", fontWeight: fontWeight, mb: styles.item.minH, mt: styles.item.pt, onClick: toggle, transform: "rotate(-90deg)", transitionDuration: "0ms", whiteSpace: "nowrap" }, title))));
|
|
28
|
+
};
|
|
29
|
+
export default AccordionItemHorizontal;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/accordion/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,iBAAiB,CAAA;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,cAAc,mBAAmB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/accordion/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,2BAA2B,CAAA;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrC,cAAc,mBAAmB,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@veracity/vui",
|
|
3
|
-
"version": "1.7.0-beta.
|
|
3
|
+
"version": "1.7.0-beta.1",
|
|
4
4
|
"description": "Veracity UI is a React component library crafted for use within Veracity applications and pages. Based on Styled Components and @xstyled.",
|
|
5
5
|
"module": "./dist/esm/index.js",
|
|
6
6
|
"main": "./dist/cjs/index.js",
|
|
@@ -5,6 +5,7 @@ import List from '../list'
|
|
|
5
5
|
import { cs, filterUndefined } from '../utils'
|
|
6
6
|
import { AccordionItemProps, AccordionProps } from './accordion.types'
|
|
7
7
|
import AccordionItem from './accordionItem'
|
|
8
|
+
import AccordionItemHorizontal from './accordionItemHorizontal'
|
|
8
9
|
import { AccordionProvider } from './context'
|
|
9
10
|
|
|
10
11
|
export const AccordionBase = styled.divBox`
|
|
@@ -13,9 +14,9 @@ export const AccordionBase = styled.divBox`
|
|
|
13
14
|
transition-duration: normal;
|
|
14
15
|
`
|
|
15
16
|
|
|
16
|
-
/**
|
|
17
|
+
/** Allows to show and hide sections of related content on a page. */
|
|
17
18
|
export const Accordion = vui<'div', AccordionProps>((props, ref) => {
|
|
18
|
-
const { children, className, items, size, ...rest } = props
|
|
19
|
+
const { children, className, orientation = 'vertical', items, size, ...rest } = props
|
|
19
20
|
const styles = useStyleConfig('Accordion', props)
|
|
20
21
|
|
|
21
22
|
const context = useMemo(() => filterUndefined({ size }), [size])
|
|
@@ -25,11 +26,17 @@ export const Accordion = vui<'div', AccordionProps>((props, ref) => {
|
|
|
25
26
|
return (
|
|
26
27
|
<AccordionProvider value={context}>
|
|
27
28
|
<AccordionBase className={cs('vui-accordion', className)} ref={ref} {...styles} {...aliasedProps} {...rest}>
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
29
|
+
{orientation === 'vertical' ? (
|
|
30
|
+
<List w="100%">
|
|
31
|
+
{items
|
|
32
|
+
? items?.map?.((item: AccordionItemProps, key: number) => <AccordionItem key={key} {...item} />)
|
|
33
|
+
: children}
|
|
34
|
+
</List>
|
|
35
|
+
) : items ? (
|
|
36
|
+
items?.map?.((item: AccordionItemProps, key: number) => <AccordionItemHorizontal key={key} {...item} />)
|
|
37
|
+
) : (
|
|
38
|
+
children
|
|
39
|
+
)}
|
|
33
40
|
</AccordionBase>
|
|
34
41
|
</AccordionProvider>
|
|
35
42
|
)
|
|
@@ -4,8 +4,12 @@ import { ListItemProps } from '../list'
|
|
|
4
4
|
import { SystemProps } from '../system'
|
|
5
5
|
import { ThemingProps } from '../theme'
|
|
6
6
|
|
|
7
|
+
export type Orientation = 'vertical' | 'horizontal'
|
|
8
|
+
|
|
7
9
|
export type AccordionProps = SystemProps &
|
|
8
10
|
ThemingProps<'Accordion'> & {
|
|
11
|
+
/** Items orientation @default 'vertical' */
|
|
12
|
+
orientation?: Orientation
|
|
9
13
|
items?: AccordionItemProps[]
|
|
10
14
|
}
|
|
11
15
|
|
|
@@ -17,22 +21,23 @@ export type AccordionOnToggleEvent = {
|
|
|
17
21
|
}
|
|
18
22
|
|
|
19
23
|
export type AccordionItemProps = ListItemProps & {
|
|
20
|
-
|
|
24
|
+
/** Unique ID */
|
|
21
25
|
id: AccordionItemId
|
|
22
|
-
|
|
26
|
+
/** Custom class name */
|
|
23
27
|
className?: string
|
|
24
|
-
|
|
28
|
+
/** Content */
|
|
25
29
|
children?: ReactNode
|
|
26
|
-
|
|
30
|
+
/** Alternative way to provide content */
|
|
27
31
|
content?: ReactNode
|
|
28
|
-
|
|
32
|
+
/** Collapsed state */
|
|
29
33
|
collapsed?: boolean
|
|
30
|
-
|
|
34
|
+
/** Title */
|
|
31
35
|
title?: string | ReactNode
|
|
32
|
-
|
|
36
|
+
/** Collapse change state */
|
|
33
37
|
onToggle?: (event: AccordionOnToggleEvent) => void
|
|
34
38
|
}
|
|
35
39
|
|
|
36
40
|
export type AccordionItemArrowProps = {
|
|
37
41
|
collapsed?: boolean
|
|
42
|
+
orientation?: Orientation
|
|
38
43
|
}
|
|
@@ -33,20 +33,27 @@ export const AccordionItem = (props: AccordionItemProps) => {
|
|
|
33
33
|
disabled={disabled}
|
|
34
34
|
flexDirection="column"
|
|
35
35
|
h="auto"
|
|
36
|
-
hoverBg="blue.10"
|
|
37
36
|
id={`${id}`}
|
|
37
|
+
p={0}
|
|
38
38
|
w="100%"
|
|
39
|
-
{...styles.item}
|
|
40
39
|
{...rest}
|
|
41
40
|
>
|
|
42
|
-
<Box
|
|
41
|
+
<Box
|
|
42
|
+
cursor={disabled ? 'not-allowed' : 'pointer'}
|
|
43
|
+
hoverBg="blue.10"
|
|
44
|
+
justifyContent="space-between"
|
|
45
|
+
onClick={toggle}
|
|
46
|
+
px={2}
|
|
47
|
+
w="100%"
|
|
48
|
+
{...styles.item}
|
|
49
|
+
>
|
|
43
50
|
<Box fontWeight={typeof title === 'string' ? '500' : 'inherit'}>{title}</Box>
|
|
44
51
|
<Box>
|
|
45
52
|
<AccordionItemArrow collapsed={collapsedInternal} />
|
|
46
53
|
</Box>
|
|
47
54
|
</Box>
|
|
48
55
|
{!collapsedInternal && (
|
|
49
|
-
<Box mb={2} mt={2} w="100%">
|
|
56
|
+
<Box mb={2} mt={2} px={2} py={1} w="100%">
|
|
50
57
|
{children ?? content}
|
|
51
58
|
</Box>
|
|
52
59
|
)}
|
|
@@ -3,9 +3,19 @@ import React from 'react'
|
|
|
3
3
|
import Icon from '../icon'
|
|
4
4
|
import { AccordionItemArrowProps } from './accordion.types'
|
|
5
5
|
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
const names = {
|
|
7
|
+
horizontal: {
|
|
8
|
+
collapsed: 'falChevronRight',
|
|
9
|
+
expanded: 'falChevronLeft'
|
|
10
|
+
},
|
|
11
|
+
vertical: {
|
|
12
|
+
collapsed: 'falChevronDown',
|
|
13
|
+
expanded: 'falChevronUp'
|
|
14
|
+
}
|
|
9
15
|
}
|
|
10
16
|
|
|
17
|
+
const AccordionItemArrow = ({ collapsed, orientation = 'vertical' }: AccordionItemArrowProps) => (
|
|
18
|
+
<Icon name={names[orientation][collapsed ? 'collapsed' : 'expanded']} size="xs" />
|
|
19
|
+
)
|
|
20
|
+
|
|
11
21
|
export default React.memo(AccordionItemArrow)
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import React, { useEffect, useState } from 'react'
|
|
2
|
+
|
|
3
|
+
import Box from '../box'
|
|
4
|
+
import { omitThemingProps, useStyleConfig } from '../core'
|
|
5
|
+
import { cs } from '../utils'
|
|
6
|
+
import { AccordionItemProps } from './accordion.types'
|
|
7
|
+
import AccordionItemArrow from './accordionItemArrow'
|
|
8
|
+
import { useAccordionContext } from './context'
|
|
9
|
+
|
|
10
|
+
/** [Beta] An accordion item (horizontal orientation). */
|
|
11
|
+
export const AccordionItemHorizontal = (props: AccordionItemProps) => {
|
|
12
|
+
const { className, children, id, content, disabled, title, collapsed, onToggle, ...rest } = omitThemingProps(props)
|
|
13
|
+
const [collapsedInternal, setIsCollapsedInternal] = useState<boolean>(false)
|
|
14
|
+
|
|
15
|
+
const styles = useStyleConfig('Accordion', useAccordionContext())
|
|
16
|
+
|
|
17
|
+
useEffect(() => {
|
|
18
|
+
setIsCollapsedInternal(!!collapsed)
|
|
19
|
+
}, [collapsed])
|
|
20
|
+
|
|
21
|
+
const toggle = () => {
|
|
22
|
+
if (!disabled) {
|
|
23
|
+
onToggle?.({ id, collapsed: !collapsedInternal })
|
|
24
|
+
setIsCollapsedInternal(!collapsedInternal)
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const cursor = disabled ? 'not-allowed' : 'pointer'
|
|
29
|
+
const fontWeight = typeof title === 'string' ? '500' : 'inherit'
|
|
30
|
+
|
|
31
|
+
return (
|
|
32
|
+
<Box
|
|
33
|
+
alignItems={collapsedInternal ? 'normal' : 'baseline'}
|
|
34
|
+
bg={disabled ? 'disabled.bg' : undefined}
|
|
35
|
+
borderRight="1px solid grey.40"
|
|
36
|
+
className={cs('vui-accordion-item-horizontal', className)}
|
|
37
|
+
color={disabled ? 'disabled.color' : undefined}
|
|
38
|
+
column
|
|
39
|
+
cursor={disabled ? 'not-allowed' : undefined}
|
|
40
|
+
id={`${id}`}
|
|
41
|
+
maxW={collapsedInternal ? styles.item.minH : 'auto'}
|
|
42
|
+
minW={styles.item.minH}
|
|
43
|
+
p={0}
|
|
44
|
+
transitionDuration="0ms"
|
|
45
|
+
userSelect={disabled ? 'none' : undefined}
|
|
46
|
+
{...rest}
|
|
47
|
+
>
|
|
48
|
+
<Box
|
|
49
|
+
{...styles.item}
|
|
50
|
+
cursor={cursor}
|
|
51
|
+
hoverBg="blue.10"
|
|
52
|
+
justifyContent="space-between"
|
|
53
|
+
minH={styles.item.minH}
|
|
54
|
+
onClick={toggle}
|
|
55
|
+
p={styles.item.pt}
|
|
56
|
+
w="100%"
|
|
57
|
+
>
|
|
58
|
+
{!collapsedInternal && <Box fontWeight={fontWeight}>{title}</Box>}
|
|
59
|
+
<AccordionItemArrow collapsed={collapsedInternal} orientation="horizontal" />
|
|
60
|
+
</Box>
|
|
61
|
+
|
|
62
|
+
{!collapsedInternal ? (
|
|
63
|
+
<Box p={styles.item.pt} pt={0} transitionDuration="0ms">
|
|
64
|
+
{children ?? content}
|
|
65
|
+
</Box>
|
|
66
|
+
) : (
|
|
67
|
+
<Box
|
|
68
|
+
cursor={cursor}
|
|
69
|
+
flexDirection="row-reverse"
|
|
70
|
+
fontWeight={fontWeight}
|
|
71
|
+
mb={styles.item.minH}
|
|
72
|
+
mt={styles.item.pt}
|
|
73
|
+
onClick={toggle}
|
|
74
|
+
transform="rotate(-90deg)"
|
|
75
|
+
transitionDuration="0ms"
|
|
76
|
+
whiteSpace="nowrap"
|
|
77
|
+
>
|
|
78
|
+
{title}
|
|
79
|
+
</Box>
|
|
80
|
+
)}
|
|
81
|
+
</Box>
|
|
82
|
+
)
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export default AccordionItemHorizontal
|