@veracity/vui 1.4.0 → 1.5.0-beta.0

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 (80) hide show
  1. package/dist/cjs/accordion/accordion.d.ts +6 -0
  2. package/dist/cjs/accordion/accordion.d.ts.map +1 -0
  3. package/dist/cjs/accordion/accordion.js +39 -0
  4. package/dist/cjs/accordion/accordion.types.d.ts +25 -0
  5. package/dist/cjs/accordion/accordion.types.d.ts.map +1 -0
  6. package/dist/cjs/accordion/accordion.types.js +2 -0
  7. package/dist/cjs/accordion/accordionItem.d.ts +5 -0
  8. package/dist/cjs/accordion/accordionItem.d.ts.map +1 -0
  9. package/dist/cjs/accordion/accordionItem.js +68 -0
  10. package/dist/cjs/accordion/accordionItemArrow.d.ts +5 -0
  11. package/dist/cjs/accordion/accordionItemArrow.d.ts.map +1 -0
  12. package/dist/cjs/accordion/accordionItemArrow.js +12 -0
  13. package/dist/cjs/accordion/index.d.ts +5 -0
  14. package/dist/cjs/accordion/index.d.ts.map +1 -0
  15. package/dist/cjs/accordion/index.js +25 -0
  16. package/dist/cjs/accordion/theme.d.ts +8 -0
  17. package/dist/cjs/accordion/theme.d.ts.map +1 -0
  18. package/dist/cjs/accordion/theme.js +12 -0
  19. package/dist/cjs/index.d.ts +1 -0
  20. package/dist/cjs/index.d.ts.map +1 -1
  21. package/dist/cjs/index.js +1 -0
  22. package/dist/cjs/theme/components.d.ts +6 -0
  23. package/dist/cjs/theme/components.d.ts.map +1 -1
  24. package/dist/cjs/theme/components.js +72 -70
  25. package/dist/cjs/theme/defaultTheme.d.ts +6 -0
  26. package/dist/cjs/theme/defaultTheme.d.ts.map +1 -1
  27. package/dist/cjs/toast/toast.d.ts +1 -0
  28. package/dist/cjs/toast/toast.d.ts.map +1 -1
  29. package/dist/cjs/toast/toast.js +3 -1
  30. package/dist/cjs/toast/toast.types.d.ts +3 -1
  31. package/dist/cjs/toast/toast.types.d.ts.map +1 -1
  32. package/dist/cjs/toast/useToast.d.ts +9 -6
  33. package/dist/cjs/toast/useToast.d.ts.map +1 -1
  34. package/dist/cjs/toast/useToast.js +14 -12
  35. package/dist/esm/accordion/accordion.d.ts +6 -0
  36. package/dist/esm/accordion/accordion.d.ts.map +1 -0
  37. package/dist/esm/accordion/accordion.js +21 -0
  38. package/dist/esm/accordion/accordion.types.d.ts +25 -0
  39. package/dist/esm/accordion/accordion.types.d.ts.map +1 -0
  40. package/dist/esm/accordion/accordion.types.js +1 -0
  41. package/dist/esm/accordion/accordionItem.d.ts +5 -0
  42. package/dist/esm/accordion/accordionItem.d.ts.map +1 -0
  43. package/dist/esm/accordion/accordionItem.js +27 -0
  44. package/dist/esm/accordion/accordionItemArrow.d.ts +5 -0
  45. package/dist/esm/accordion/accordionItemArrow.d.ts.map +1 -0
  46. package/dist/esm/accordion/accordionItemArrow.js +7 -0
  47. package/dist/esm/accordion/index.d.ts +5 -0
  48. package/dist/esm/accordion/index.d.ts.map +1 -0
  49. package/dist/esm/accordion/index.js +4 -0
  50. package/dist/esm/accordion/theme.d.ts +8 -0
  51. package/dist/esm/accordion/theme.d.ts.map +1 -0
  52. package/dist/esm/accordion/theme.js +10 -0
  53. package/dist/esm/index.d.ts +1 -0
  54. package/dist/esm/index.d.ts.map +1 -1
  55. package/dist/esm/index.js +1 -0
  56. package/dist/esm/theme/components.d.ts +6 -0
  57. package/dist/esm/theme/components.d.ts.map +1 -1
  58. package/dist/esm/theme/components.js +2 -0
  59. package/dist/esm/theme/defaultTheme.d.ts +6 -0
  60. package/dist/esm/theme/defaultTheme.d.ts.map +1 -1
  61. package/dist/esm/toast/toast.d.ts +1 -0
  62. package/dist/esm/toast/toast.d.ts.map +1 -1
  63. package/dist/esm/toast/toast.js +2 -1
  64. package/dist/esm/toast/toast.types.d.ts +3 -1
  65. package/dist/esm/toast/toast.types.d.ts.map +1 -1
  66. package/dist/esm/toast/useToast.d.ts +9 -6
  67. package/dist/esm/toast/useToast.d.ts.map +1 -1
  68. package/dist/esm/toast/useToast.js +13 -11
  69. package/package.json +1 -1
  70. package/src/accordion/accordion.tsx +33 -0
  71. package/src/accordion/accordion.types.ts +38 -0
  72. package/src/accordion/accordionItem.tsx +59 -0
  73. package/src/accordion/accordionItemArrow.tsx +11 -0
  74. package/src/accordion/index.ts +4 -0
  75. package/src/accordion/theme.ts +14 -0
  76. package/src/index.ts +1 -0
  77. package/src/theme/components.ts +2 -0
  78. package/src/toast/toast.tsx +4 -2
  79. package/src/toast/toast.types.ts +4 -1
  80. package/src/toast/useToast.tsx +20 -11
@@ -0,0 +1,6 @@
1
+ import { AccordionProps } from './accordion.types';
2
+ export declare const AccordionBase: import("styled-components").StyledComponent<"div", import("styled-components").DefaultTheme, import("..").SystemProps, never>;
3
+ /** [BETA] Allows to show and hide sections of related content on a page. */
4
+ export declare const Accordion: import("../core").VuiComponent<"div", AccordionProps>;
5
+ export default Accordion;
6
+ //# sourceMappingURL=accordion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accordion.d.ts","sourceRoot":"","sources":["../../../src/accordion/accordion.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAsB,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAGtE,eAAO,MAAM,aAAa,+HAIzB,CAAA;AAED,4EAA4E;AAC5E,eAAO,MAAM,SAAS,uDAepB,CAAA;AAEF,eAAe,SAAS,CAAA"}
@@ -0,0 +1,21 @@
1
+ import React from 'react';
2
+ import { omitThemingProps, styled, useStyleConfig, vui } from '../core';
3
+ import List from '../list';
4
+ import { cs, filterUndefined } from '../utils';
5
+ import AccordionItem from './accordionItem';
6
+ export const AccordionBase = styled.divBox `
7
+ display: flex;
8
+ min-width: 0;
9
+ transition-duration: normal;
10
+ `;
11
+ /** [BETA] Allows to show and hide sections of related content on a page. */
12
+ export const Accordion = vui((props, ref) => {
13
+ const { className, children, items, ...rest } = omitThemingProps(props);
14
+ const styles = useStyleConfig('Accordion', props);
15
+ const aliasedProps = filterUndefined({});
16
+ return (React.createElement(AccordionBase, { className: cs('vui-accordion', className), ref: ref, ...styles, ...aliasedProps, ...rest },
17
+ React.createElement(List, { w: "100%" }, items
18
+ ? items?.map?.((item, key) => React.createElement(AccordionItem, { key: key, ...item }))
19
+ : children)));
20
+ });
21
+ export default Accordion;
@@ -0,0 +1,25 @@
1
+ import { ReactNode } from 'react';
2
+ import { ListItemProps } from '../list';
3
+ import { SystemProps } from '../system';
4
+ import { ThemingProps } from '../theme';
5
+ export declare type AccordionProps = SystemProps & ThemingProps<'Accordion'> & {
6
+ items?: AccordionItemProps[];
7
+ };
8
+ export declare type AccordionItemId = string | number;
9
+ export declare type AccordionOnToggleEvent = {
10
+ id: AccordionItemId;
11
+ collapsed: boolean;
12
+ };
13
+ export declare type AccordionItemProps = ListItemProps & {
14
+ id: AccordionItemId;
15
+ className?: string;
16
+ children?: ReactNode;
17
+ content?: ReactNode;
18
+ collapsed?: boolean;
19
+ title?: string;
20
+ onToggle?: (event: AccordionOnToggleEvent) => void;
21
+ };
22
+ export declare type AccordionItemArrowProps = {
23
+ collapsed?: boolean;
24
+ };
25
+ //# sourceMappingURL=accordion.types.d.ts.map
@@ -0,0 +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;IAE/C,EAAE,EAAE,eAAe,CAAA;IAEnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB,QAAQ,CAAC,EAAE,SAAS,CAAA;IAEpB,OAAO,CAAC,EAAE,SAAS,CAAA;IAEnB,SAAS,CAAC,EAAE,OAAO,CAAA;IAEnB,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,sBAAsB,KAAK,IAAI,CAAA;CACnD,CAAA;AAED,oBAAY,uBAAuB,GAAG;IACpC,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB,CAAA"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,5 @@
1
+ import { AccordionItemProps } from './accordion.types';
2
+ /** An accordion item. */
3
+ export declare const AccordionItem: (props: AccordionItemProps) => JSX.Element;
4
+ export default AccordionItem;
5
+ //# sourceMappingURL=accordionItem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accordionItem.d.ts","sourceRoot":"","sources":["../../../src/accordion/accordionItem.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAGtD,yBAAyB;AACzB,eAAO,MAAM,aAAa,UAAW,kBAAkB,gBA8CtD,CAAA;AAED,eAAe,aAAa,CAAA"}
@@ -0,0 +1,27 @@
1
+ import React, { useEffect, useState } from 'react';
2
+ import { Box } from '../box';
3
+ import { omitThemingProps } from '../core';
4
+ import { ListItem } from '../list';
5
+ import { cs } from '../utils';
6
+ import AccordionItemArrow from './accordionItemArrow';
7
+ /** An accordion item. */
8
+ export const AccordionItem = (props) => {
9
+ const { className, children, id, content, disabled, title, collapsed, onToggle, ...rest } = omitThemingProps(props);
10
+ const [collapsedInternal, setIsCollapsedInternal] = useState(false);
11
+ useEffect(() => {
12
+ setIsCollapsedInternal(!!collapsed);
13
+ }, [collapsed]);
14
+ const toggle = () => {
15
+ if (!disabled) {
16
+ onToggle?.({ id, collapsed: !collapsedInternal });
17
+ setIsCollapsedInternal(!collapsedInternal);
18
+ }
19
+ };
20
+ return (React.createElement(ListItem, { borderBottom: "1px solid grey.40", className: cs('vui-accordion-item', className), disabled: disabled, flexDirection: "column", h: "auto", hoverBg: "blue.10", id: `${id}`, w: "100%", ...rest },
21
+ React.createElement(Box, { cursor: disabled ? 'not-allowed' : 'pointer', justifyContent: "space-between", onClick: toggle, py: 2, w: "100%" },
22
+ React.createElement(Box, { fontWeight: "500 " }, title),
23
+ React.createElement(Box, null,
24
+ React.createElement(AccordionItemArrow, { collapsed: collapsedInternal }))),
25
+ !collapsedInternal && (React.createElement(Box, { mb: 2, mt: 2, w: "100%" }, children ?? content))));
26
+ };
27
+ export default AccordionItem;
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ import { AccordionItemArrowProps } from './accordion.types';
3
+ declare const _default: React.MemoExoticComponent<(props: AccordionItemArrowProps) => JSX.Element>;
4
+ export default _default;
5
+ //# sourceMappingURL=accordionItemArrow.d.ts.map
@@ -0,0 +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;;AAO3D,wBAA6C"}
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import Icon from '../icon';
3
+ const AccordionItemArrow = (props) => {
4
+ const { collapsed } = props;
5
+ return React.createElement(Icon, { name: collapsed ? 'falChevronDown' : 'falChevronUp', size: "xs" });
6
+ };
7
+ export default React.memo(AccordionItemArrow);
@@ -0,0 +1,5 @@
1
+ export * from './accordion';
2
+ export * from './accordionItem';
3
+ export { default } from './accordion';
4
+ export * from './accordion.types';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,4 @@
1
+ export * from './accordion';
2
+ export * from './accordionItem';
3
+ export { default } from './accordion';
4
+ export * from './accordion.types';
@@ -0,0 +1,8 @@
1
+ declare const _default: {
2
+ baseStyle: {};
3
+ defaultProps: {};
4
+ sizes: {};
5
+ variants: {};
6
+ };
7
+ export default _default;
8
+ //# sourceMappingURL=theme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../../src/accordion/theme.ts"],"names":[],"mappings":";;;;;;AAQA,wBAKC"}
@@ -0,0 +1,10 @@
1
+ const baseStyle = {};
2
+ const defaultProps = {};
3
+ const sizes = {};
4
+ const variants = {};
5
+ export default {
6
+ baseStyle,
7
+ defaultProps,
8
+ sizes,
9
+ variants
10
+ };
@@ -1,3 +1,4 @@
1
+ export * from './accordion';
1
2
  export * from './avatar';
2
3
  export * from './box';
3
4
  export * from './button';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,OAAO,CAAA;AACrB,cAAc,UAAU,CAAA;AACxB,cAAc,eAAe,CAAA;AAC7B,cAAc,qBAAqB,CAAA;AACnC,cAAc,QAAQ,CAAA;AACtB,cAAc,YAAY,CAAA;AAC1B,cAAc,QAAQ,CAAA;AACtB,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,cAAc,UAAU,CAAA;AACxB,cAAc,QAAQ,CAAA;AACtB,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,cAAc,QAAQ,CAAA;AACtB,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA;AACvB,cAAc,QAAQ,CAAA;AACtB,cAAc,QAAQ,CAAA;AACtB,cAAc,QAAQ,CAAA;AACtB,cAAc,QAAQ,CAAA;AACtB,cAAc,WAAW,CAAA;AACzB,cAAc,SAAS,CAAA;AACvB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,KAAK,CAAA;AACnB,cAAc,cAAc,CAAA;AAC5B,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA;AACzB,cAAc,UAAU,CAAA;AACxB,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA;AACvB,cAAc,UAAU,CAAA;AACxB,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AACzB,cAAc,OAAO,CAAA;AACrB,cAAc,UAAU,CAAA;AACxB,cAAc,UAAU,CAAA;AACxB,cAAc,KAAK,CAAA;AACnB,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA;AACzB,cAAc,SAAS,CAAA;AACvB,cAAc,QAAQ,CAAA;AACtB,cAAc,OAAO,CAAA;AACrB,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,UAAU,CAAA;AACxB,cAAc,OAAO,CAAA;AACrB,cAAc,UAAU,CAAA;AACxB,cAAc,eAAe,CAAA;AAC7B,cAAc,qBAAqB,CAAA;AACnC,cAAc,QAAQ,CAAA;AACtB,cAAc,YAAY,CAAA;AAC1B,cAAc,QAAQ,CAAA;AACtB,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,cAAc,UAAU,CAAA;AACxB,cAAc,QAAQ,CAAA;AACtB,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,cAAc,QAAQ,CAAA;AACtB,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA;AACvB,cAAc,QAAQ,CAAA;AACtB,cAAc,QAAQ,CAAA;AACtB,cAAc,QAAQ,CAAA;AACtB,cAAc,QAAQ,CAAA;AACtB,cAAc,WAAW,CAAA;AACzB,cAAc,SAAS,CAAA;AACvB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,KAAK,CAAA;AACnB,cAAc,cAAc,CAAA;AAC5B,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA;AACzB,cAAc,UAAU,CAAA;AACxB,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA;AACvB,cAAc,UAAU,CAAA;AACxB,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AACzB,cAAc,OAAO,CAAA;AACrB,cAAc,UAAU,CAAA;AACxB,cAAc,UAAU,CAAA;AACxB,cAAc,KAAK,CAAA;AACnB,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA;AACzB,cAAc,SAAS,CAAA;AACvB,cAAc,QAAQ,CAAA;AACtB,cAAc,OAAO,CAAA;AACrB,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA"}
package/dist/esm/index.js CHANGED
@@ -1,3 +1,4 @@
1
+ export * from './accordion';
1
2
  export * from './avatar';
2
3
  export * from './box';
3
4
  export * from './button';
@@ -1,4 +1,10 @@
1
1
  declare const _default: {
2
+ Accordion: {
3
+ baseStyle: {};
4
+ defaultProps: {};
5
+ sizes: {};
6
+ variants: {};
7
+ };
2
8
  Avatar: {
3
9
  baseStyle: {};
4
10
  defaultProps: {
@@ -1 +1 @@
1
- {"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../../src/theme/components.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCA,wBAoCC"}
1
+ {"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../../src/theme/components.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCA,wBAqCC"}
@@ -1,3 +1,4 @@
1
+ import Accordion from '../accordion/theme';
1
2
  import Avatar from '../avatar/theme';
2
3
  import Box from '../box/theme';
3
4
  import Button from '../button/theme';
@@ -34,6 +35,7 @@ import Tabs from '../tabs/theme';
34
35
  import Tag from '../tag/theme';
35
36
  import Textarea from '../textarea/theme';
36
37
  export default {
38
+ Accordion,
37
39
  Avatar,
38
40
  Box,
39
41
  Button,
@@ -195,6 +195,12 @@ declare const defaultTheme: {
195
195
  tooltip: number;
196
196
  };
197
197
  components: {
198
+ Accordion: {
199
+ baseStyle: {};
200
+ defaultProps: {};
201
+ sizes: {};
202
+ variants: {};
203
+ };
198
204
  Avatar: {
199
205
  baseStyle: {};
200
206
  defaultProps: {
@@ -1 +1 @@
1
- {"version":3,"file":"defaultTheme.d.ts","sourceRoot":"","sources":["../../../src/theme/defaultTheme.ts"],"names":[],"mappings":"AAGA,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGjB,CAAA;AAED,eAAe,YAAY,CAAA"}
1
+ {"version":3,"file":"defaultTheme.d.ts","sourceRoot":"","sources":["../../../src/theme/defaultTheme.ts"],"names":[],"mappings":"AAGA,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGjB,CAAA;AAED,eAAe,YAAY,CAAA"}
@@ -1,4 +1,5 @@
1
1
  import React from 'react';
2
+ export declare const toasterWidth = 420;
2
3
  declare const _default: React.MemoExoticComponent<() => JSX.Element>;
3
4
  export default _default;
4
5
  //# sourceMappingURL=toast.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"toast.d.ts","sourceRoot":"","sources":["../../../src/toast/toast.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;;AA8BzB,wBAAkC"}
1
+ {"version":3,"file":"toast.d.ts","sourceRoot":"","sources":["../../../src/toast/toast.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAOzB,eAAO,MAAM,YAAY,MAAM,CAAA;;AAyB/B,wBAAkC"}
@@ -2,8 +2,9 @@ import React from 'react';
2
2
  import { Box } from '../box';
3
3
  import { useVuiContext } from '../core';
4
4
  import { zIndices } from '../theme';
5
+ export const toasterWidth = 420;
5
6
  const Toaster = () => {
6
7
  const { toasts } = useVuiContext();
7
- return (React.createElement(Box, { bottom: "1rem", display: "block", maxW: "100%", minW: { md: 600, sm: 600, xs: '100%' }, p: { md: '16px', sm: '4px', xs: '2px' }, position: "fixed", right: { md: '1rem', sm: 0, xs: 0 }, zIndex: zIndices.toast }, toasts?.list?.map?.((toast) => (React.createElement("div", { id: `toast_${toast.id}`, key: toast.id }, toast.component)))));
8
+ return (React.createElement(Box, { bottom: "1rem", display: "block", maxW: { md: toasterWidth, sm: toasterWidth, xs: '100%' }, minW: { md: toasterWidth, sm: toasterWidth, xs: '100%' }, p: { md: '16px', sm: '4px', xs: '2px' }, position: "fixed", right: { md: '1rem', sm: 0, xs: 0 }, zIndex: zIndices.toast }, toasts?.list?.map?.((toast) => (React.createElement("div", { id: `toast_${toast.id}`, key: toast.id }, toast.component)))));
8
9
  };
9
10
  export default React.memo(Toaster);
@@ -1,5 +1,6 @@
1
1
  import { ReactNode } from 'react';
2
2
  import { NotificationProps } from '../notification';
3
+ export declare type ToastDuration = 'fast' | 'slow' | 'sticky';
3
4
  export interface ToastListItem {
4
5
  id: string;
5
6
  component?: ReactNode;
@@ -10,7 +11,8 @@ export interface ToastSetup {
10
11
  }
11
12
  export interface ToastOptions extends NotificationProps {
12
13
  id?: string;
13
- duration?: number;
14
+ duration?: ToastDuration;
15
+ /** @deprecated According to new UX requirements all toasts should be dismissible */
14
16
  dismissible?: boolean;
15
17
  }
16
18
  //# sourceMappingURL=toast.types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"toast.types.d.ts","sourceRoot":"","sources":["../../../src/toast/toast.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAEnD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,YAAY,CAAA;IACrB,aAAa,EAAE,aAAa,EAAE,CAAA;CAC/B;AAED,MAAM,WAAW,YAAa,SAAQ,iBAAiB;IACrD,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB"}
1
+ {"version":3,"file":"toast.types.d.ts","sourceRoot":"","sources":["../../../src/toast/toast.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAEnD,oBAAY,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAA;AAEtD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,YAAY,CAAA;IACrB,aAAa,EAAE,aAAa,EAAE,CAAA;CAC/B;AAED,MAAM,WAAW,YAAa,SAAQ,iBAAiB;IACrD,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,QAAQ,CAAC,EAAE,aAAa,CAAA;IACxB,oFAAoF;IACpF,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB"}
@@ -1,12 +1,15 @@
1
1
  import { ReactNode } from 'react';
2
- import { ToastOptions } from './toast.types';
2
+ import { ToastDuration, ToastOptions } from './toast.types';
3
+ export declare const defaultDuration = "fast";
4
+ export declare const fastToastDuration = 4000;
5
+ export declare const slowToastDuration = 8000;
3
6
  export declare const useToast: () => {
4
7
  showToast: (options?: ToastOptions | undefined) => void;
5
8
  hideToast: (id: string) => void;
6
- showInfo: (text: ReactNode) => void;
7
- showSuccess: (text: ReactNode) => void;
8
- showWarning: (text: ReactNode) => void;
9
- showError: (text: ReactNode) => void;
10
- showLoading: (text: ReactNode) => void;
9
+ showInfo: (text: ReactNode, duration?: ToastDuration) => void;
10
+ showSuccess: (text: ReactNode, duration?: ToastDuration) => void;
11
+ showWarning: (text: ReactNode, duration?: ToastDuration) => void;
12
+ showError: (text: ReactNode, duration?: ToastDuration) => void;
13
+ showLoading: (text: ReactNode, duration?: ToastDuration) => void;
11
14
  };
12
15
  //# sourceMappingURL=useToast.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useToast.d.ts","sourceRoot":"","sources":["../../../src/toast/useToast.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAKxC,OAAO,EAAE,YAAY,EAAc,MAAM,eAAe,CAAA;AAUxD,eAAO,MAAM,QAAQ;uDAKyB,IAAI;oBAFzB,MAAM;qBAqCL,SAAS;wBACN,SAAS;wBACT,SAAS;sBACX,SAAS;wBACP,SAAS;CAGrC,CAAA"}
1
+ {"version":3,"file":"useToast.d.ts","sourceRoot":"","sources":["../../../src/toast/useToast.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAKxC,OAAO,EAAE,aAAa,EAAE,YAAY,EAAc,MAAM,eAAe,CAAA;AAEvE,eAAO,MAAM,eAAe,SAAS,CAAA;AACrC,eAAO,MAAM,iBAAiB,OAAO,CAAA;AACrC,eAAO,MAAM,iBAAiB,OAAO,CAAA;AAWrC,eAAO,MAAM,QAAQ;uDAKyB,IAAI;oBAFzB,MAAM;qBAoCL,SAAS,aAAY,aAAa;wBAE/B,SAAS,aAAY,aAAa;wBAElC,SAAS,aAAY,aAAa;sBAEpC,SAAS,aAAY,aAAa;wBAEhC,SAAS,aAAY,aAAa;CAI9D,CAAA"}
@@ -2,20 +2,22 @@ import React from 'react';
2
2
  import { useVuiContext } from '../core';
3
3
  import { Notification } from '../notification';
4
4
  import { uid } from '../utils';
5
+ export const defaultDuration = 'fast';
6
+ export const fastToastDuration = 4000;
7
+ export const slowToastDuration = 8000;
5
8
  const setup = {
6
9
  options: {
7
- duration: 5000,
8
- dismissible: true
10
+ duration: defaultDuration
9
11
  },
10
12
  componentList: []
11
13
  };
14
+ const getDurationTime = (duration) => (duration === 'fast' ? fastToastDuration : slowToastDuration);
12
15
  export const useToast = () => {
13
16
  const { addToast, removeToast } = useVuiContext();
14
17
  const hideToast = (id) => removeToast(id);
15
18
  const showToast = (options) => {
16
19
  const id = options?.id ? options.id : uid('toast');
17
20
  const { duration = setup.options.duration } = options || {};
18
- const { dismissible = setup.options.dismissible } = options || {};
19
21
  const { status = setup.options.duration } = options || {};
20
22
  const { action } = options || {};
21
23
  const { icon } = options || {};
@@ -24,16 +26,16 @@ export const useToast = () => {
24
26
  const onClose = () => hideToast(id);
25
27
  const toast = {
26
28
  id,
27
- component: (React.createElement(Notification, { action: action, animation: "fadeDown", icon: icon, mt: { md: 1, sm: '4px', xs: '4px' }, onClose: dismissible ? onClose : undefined, shadow: 1, status: status, text: text, title: title, w: 1 }))
29
+ component: (React.createElement(Notification, { action: action, animation: "fadeDown", icon: icon, mt: { md: 1, sm: '4px', xs: '4px' }, onClose: onClose, shadow: 1, status: status, text: text, title: title, w: 1 }))
28
30
  };
29
31
  addToast(toast);
30
- if (duration !== 0)
31
- window.setTimeout(() => hideToast(id), duration);
32
+ if (duration && duration !== 'sticky')
33
+ window.setTimeout(() => hideToast(id), getDurationTime(duration));
32
34
  };
33
- const showInfo = (text) => showToast({ text, status: 'info' });
34
- const showSuccess = (text) => showToast({ text, status: 'success' });
35
- const showWarning = (text) => showToast({ text, status: 'warning' });
36
- const showError = (text) => showToast({ text, status: 'error' });
37
- const showLoading = (text) => showToast({ text, status: 'loading' });
35
+ const showInfo = (text, duration = defaultDuration) => showToast({ text, status: 'info', duration });
36
+ const showSuccess = (text, duration = defaultDuration) => showToast({ text, status: 'success', duration });
37
+ const showWarning = (text, duration = defaultDuration) => showToast({ text, status: 'warning', duration });
38
+ const showError = (text, duration = defaultDuration) => showToast({ text, status: 'error', duration });
39
+ const showLoading = (text, duration = defaultDuration) => showToast({ text, status: 'loading', duration });
38
40
  return { showToast, hideToast, showInfo, showSuccess, showWarning, showError, showLoading };
39
41
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@veracity/vui",
3
- "version": "1.4.0",
3
+ "version": "1.5.0-beta.0",
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",
@@ -0,0 +1,33 @@
1
+ import React from 'react'
2
+
3
+ import { omitThemingProps, styled, useStyleConfig, vui } from '../core'
4
+ import List from '../list'
5
+ import { cs, filterUndefined } from '../utils'
6
+ import { AccordionItemProps, AccordionProps } from './accordion.types'
7
+ import AccordionItem from './accordionItem'
8
+
9
+ export const AccordionBase = styled.divBox`
10
+ display: flex;
11
+ min-width: 0;
12
+ transition-duration: normal;
13
+ `
14
+
15
+ /** [BETA] Allows to show and hide sections of related content on a page. */
16
+ export const Accordion = vui<'div', AccordionProps>((props, ref) => {
17
+ const { className, children, items, ...rest } = omitThemingProps(props)
18
+ const styles = useStyleConfig('Accordion', props)
19
+
20
+ const aliasedProps = filterUndefined<AccordionProps>({})
21
+
22
+ return (
23
+ <AccordionBase className={cs('vui-accordion', className)} ref={ref} {...styles} {...aliasedProps} {...rest}>
24
+ <List w="100%">
25
+ {items
26
+ ? items?.map?.((item: AccordionItemProps, key: number) => <AccordionItem key={key} {...item} />)
27
+ : children}
28
+ </List>
29
+ </AccordionBase>
30
+ )
31
+ })
32
+
33
+ export default Accordion
@@ -0,0 +1,38 @@
1
+ import { ReactNode } from 'react'
2
+
3
+ import { ListItemProps } from '../list'
4
+ import { SystemProps } from '../system'
5
+ import { ThemingProps } from '../theme'
6
+
7
+ export type AccordionProps = SystemProps &
8
+ ThemingProps<'Accordion'> & {
9
+ items?: AccordionItemProps[]
10
+ }
11
+
12
+ export type AccordionItemId = string | number
13
+
14
+ export type AccordionOnToggleEvent = {
15
+ id: AccordionItemId
16
+ collapsed: boolean
17
+ }
18
+
19
+ export type AccordionItemProps = ListItemProps & {
20
+ // Unique ID
21
+ id: AccordionItemId
22
+ // Custom class name
23
+ className?: string
24
+ // Content
25
+ children?: ReactNode
26
+ // Alternative way to provide content
27
+ content?: ReactNode
28
+ // Collapsed state
29
+ collapsed?: boolean
30
+ // Title
31
+ title?: string
32
+ // Collapse change state
33
+ onToggle?: (event: AccordionOnToggleEvent) => void
34
+ }
35
+
36
+ export type AccordionItemArrowProps = {
37
+ collapsed?: boolean
38
+ }
@@ -0,0 +1,59 @@
1
+ import React, { useEffect, useState } from 'react'
2
+
3
+ import { Box } from '../box'
4
+ import { omitThemingProps } from '../core'
5
+ import { ListItem } from '../list'
6
+ import { cs } from '../utils'
7
+ import { AccordionItemProps } from './accordion.types'
8
+ import AccordionItemArrow from './accordionItemArrow'
9
+
10
+ /** An accordion item. */
11
+ export const AccordionItem = (props: AccordionItemProps) => {
12
+ const { className, children, id, content, disabled, title, collapsed, onToggle, ...rest } = omitThemingProps(props)
13
+ const [collapsedInternal, setIsCollapsedInternal] = useState<boolean>(false)
14
+
15
+ useEffect(() => {
16
+ setIsCollapsedInternal(!!collapsed)
17
+ }, [collapsed])
18
+
19
+ const toggle = () => {
20
+ if (!disabled) {
21
+ onToggle?.({ id, collapsed: !collapsedInternal })
22
+ setIsCollapsedInternal(!collapsedInternal)
23
+ }
24
+ }
25
+
26
+ return (
27
+ <ListItem
28
+ borderBottom="1px solid grey.40"
29
+ className={cs('vui-accordion-item', className)}
30
+ disabled={disabled}
31
+ flexDirection="column"
32
+ h="auto"
33
+ hoverBg="blue.10"
34
+ id={`${id}`}
35
+ w="100%"
36
+ {...rest}
37
+ >
38
+ <Box
39
+ cursor={disabled ? 'not-allowed' : 'pointer'}
40
+ justifyContent="space-between"
41
+ onClick={toggle}
42
+ py={2}
43
+ w="100%"
44
+ >
45
+ <Box fontWeight="500 ">{title}</Box>
46
+ <Box>
47
+ <AccordionItemArrow collapsed={collapsedInternal} />
48
+ </Box>
49
+ </Box>
50
+ {!collapsedInternal && (
51
+ <Box mb={2} mt={2} w="100%">
52
+ {children ?? content}
53
+ </Box>
54
+ )}
55
+ </ListItem>
56
+ )
57
+ }
58
+
59
+ export default AccordionItem
@@ -0,0 +1,11 @@
1
+ import React from 'react'
2
+
3
+ import Icon from '../icon'
4
+ import { AccordionItemArrowProps } from './accordion.types'
5
+
6
+ const AccordionItemArrow = (props: AccordionItemArrowProps) => {
7
+ const { collapsed } = props
8
+ return <Icon name={collapsed ? 'falChevronDown' : 'falChevronUp'} size="xs" />
9
+ }
10
+
11
+ export default React.memo(AccordionItemArrow)
@@ -0,0 +1,4 @@
1
+ export * from './accordion'
2
+ export * from './accordionItem'
3
+ export { default } from './accordion'
4
+ export * from './accordion.types'
@@ -0,0 +1,14 @@
1
+ const baseStyle = {}
2
+
3
+ const defaultProps = {}
4
+
5
+ const sizes = {}
6
+
7
+ const variants = {}
8
+
9
+ export default {
10
+ baseStyle,
11
+ defaultProps,
12
+ sizes,
13
+ variants
14
+ }
package/src/index.ts CHANGED
@@ -1,3 +1,4 @@
1
+ export * from './accordion'
1
2
  export * from './avatar'
2
3
  export * from './box'
3
4
  export * from './button'
@@ -1,3 +1,4 @@
1
+ import Accordion from '../accordion/theme'
1
2
  import Avatar from '../avatar/theme'
2
3
  import Box from '../box/theme'
3
4
  import Button from '../button/theme'
@@ -35,6 +36,7 @@ import Tag from '../tag/theme'
35
36
  import Textarea from '../textarea/theme'
36
37
 
37
38
  export default {
39
+ Accordion,
38
40
  Avatar,
39
41
  Box,
40
42
  Button,
@@ -5,6 +5,8 @@ import { useVuiContext } from '../core'
5
5
  import { zIndices } from '../theme'
6
6
  import { ToastListItem } from './toast.types'
7
7
 
8
+ export const toasterWidth = 420
9
+
8
10
  const Toaster = () => {
9
11
  const { toasts } = useVuiContext()
10
12
 
@@ -12,8 +14,8 @@ const Toaster = () => {
12
14
  <Box
13
15
  bottom="1rem"
14
16
  display="block"
15
- maxW="100%"
16
- minW={{ md: 600, sm: 600, xs: '100%' }}
17
+ maxW={{ md: toasterWidth, sm: toasterWidth, xs: '100%' }}
18
+ minW={{ md: toasterWidth, sm: toasterWidth, xs: '100%' }}
17
19
  p={{ md: '16px', sm: '4px', xs: '2px' }}
18
20
  position="fixed"
19
21
  right={{ md: '1rem', sm: 0, xs: 0 }}
@@ -2,6 +2,8 @@ import { ReactNode } from 'react'
2
2
 
3
3
  import { NotificationProps } from '../notification'
4
4
 
5
+ export type ToastDuration = 'fast' | 'slow' | 'sticky'
6
+
5
7
  export interface ToastListItem {
6
8
  id: string
7
9
  component?: ReactNode
@@ -14,6 +16,7 @@ export interface ToastSetup {
14
16
 
15
17
  export interface ToastOptions extends NotificationProps {
16
18
  id?: string
17
- duration?: number
19
+ duration?: ToastDuration
20
+ /** @deprecated According to new UX requirements all toasts should be dismissible */
18
21
  dismissible?: boolean
19
22
  }