@veracity/vui 1.7.0-beta.1 → 1.7.0-beta.3

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 (63) hide show
  1. package/dist/cjs/accordion/accordion.d.ts.map +1 -1
  2. package/dist/cjs/accordion/accordion.js +3 -3
  3. package/dist/cjs/accordion/accordion.types.d.ts +4 -0
  4. package/dist/cjs/accordion/accordion.types.d.ts.map +1 -1
  5. package/dist/cjs/accordion/accordionItem.d.ts.map +1 -1
  6. package/dist/cjs/accordion/accordionItem.js +2 -2
  7. package/dist/cjs/accordion/accordionItemHorizontal.d.ts +1 -1
  8. package/dist/cjs/accordion/accordionItemHorizontal.d.ts.map +1 -1
  9. package/dist/cjs/accordion/accordionItemHorizontal.js +3 -3
  10. package/dist/cjs/button/button.d.ts.map +1 -1
  11. package/dist/cjs/button/button.js +3 -3
  12. package/dist/cjs/copyToClipboard/copyToClipboard.d.ts +12 -0
  13. package/dist/cjs/copyToClipboard/copyToClipboard.d.ts.map +1 -0
  14. package/dist/cjs/copyToClipboard/copyToClipboard.js +36 -0
  15. package/dist/cjs/copyToClipboard/copyToClipboard.types.d.ts +9 -0
  16. package/dist/cjs/copyToClipboard/copyToClipboard.types.d.ts.map +1 -0
  17. package/dist/cjs/copyToClipboard/copyToClipboard.types.js +2 -0
  18. package/dist/cjs/copyToClipboard/index.d.ts +5 -0
  19. package/dist/cjs/copyToClipboard/index.d.ts.map +1 -0
  20. package/dist/cjs/copyToClipboard/index.js +25 -0
  21. package/dist/cjs/copyToClipboard/useCopyToClipboard.d.ts +5 -0
  22. package/dist/cjs/copyToClipboard/useCopyToClipboard.d.ts.map +1 -0
  23. package/dist/cjs/copyToClipboard/useCopyToClipboard.js +17 -0
  24. package/dist/cjs/index.d.ts +1 -0
  25. package/dist/cjs/index.d.ts.map +1 -1
  26. package/dist/cjs/index.js +1 -0
  27. package/dist/esm/accordion/accordion.d.ts.map +1 -1
  28. package/dist/esm/accordion/accordion.js +3 -3
  29. package/dist/esm/accordion/accordion.types.d.ts +4 -0
  30. package/dist/esm/accordion/accordion.types.d.ts.map +1 -1
  31. package/dist/esm/accordion/accordionItem.d.ts.map +1 -1
  32. package/dist/esm/accordion/accordionItem.js +2 -2
  33. package/dist/esm/accordion/accordionItemHorizontal.d.ts +1 -1
  34. package/dist/esm/accordion/accordionItemHorizontal.d.ts.map +1 -1
  35. package/dist/esm/accordion/accordionItemHorizontal.js +3 -3
  36. package/dist/esm/button/button.d.ts.map +1 -1
  37. package/dist/esm/button/button.js +3 -3
  38. package/dist/esm/copyToClipboard/copyToClipboard.d.ts +12 -0
  39. package/dist/esm/copyToClipboard/copyToClipboard.d.ts.map +1 -0
  40. package/dist/esm/copyToClipboard/copyToClipboard.js +19 -0
  41. package/dist/esm/copyToClipboard/copyToClipboard.types.d.ts +9 -0
  42. package/dist/esm/copyToClipboard/copyToClipboard.types.d.ts.map +1 -0
  43. package/dist/esm/copyToClipboard/copyToClipboard.types.js +1 -0
  44. package/dist/esm/copyToClipboard/index.d.ts +5 -0
  45. package/dist/esm/copyToClipboard/index.d.ts.map +1 -0
  46. package/dist/esm/copyToClipboard/index.js +4 -0
  47. package/dist/esm/copyToClipboard/useCopyToClipboard.d.ts +5 -0
  48. package/dist/esm/copyToClipboard/useCopyToClipboard.d.ts.map +1 -0
  49. package/dist/esm/copyToClipboard/useCopyToClipboard.js +14 -0
  50. package/dist/esm/index.d.ts +1 -0
  51. package/dist/esm/index.d.ts.map +1 -1
  52. package/dist/esm/index.js +1 -0
  53. package/package.json +1 -1
  54. package/src/accordion/accordion.tsx +7 -3
  55. package/src/accordion/accordion.types.ts +4 -0
  56. package/src/accordion/accordionItem.tsx +13 -2
  57. package/src/accordion/accordionItemHorizontal.tsx +14 -3
  58. package/src/button/button.tsx +2 -4
  59. package/src/copyToClipboard/copyToClipboard.tsx +36 -0
  60. package/src/copyToClipboard/copyToClipboard.types.ts +10 -0
  61. package/src/copyToClipboard/index.ts +4 -0
  62. package/src/copyToClipboard/useCopyToClipboard.ts +15 -0
  63. package/src/index.ts +1 -0
@@ -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;AAKtE,eAAO,MAAM,aAAa,+HAIzB,CAAA;AAED,qEAAqE;AACrE,eAAO,MAAM,SAAS,uDAyBpB,CAAA;AAEF,eAAe,SAAS,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,uDA6BpB,CAAA;AAEF,eAAe,SAAS,CAAA"}
@@ -53,13 +53,13 @@ exports.AccordionBase = core_1.styled.divBox `
53
53
  /** Allows to show and hide sections of related content on a page. */
54
54
  exports.Accordion = (0, core_1.vui)((props, ref) => {
55
55
  var _a, _b;
56
- const { children, className, orientation = 'vertical', items, size } = props, rest = __rest(props, ["children", "className", "orientation", "items", "size"]);
56
+ const { children, className, itemTitleHoverBg = 'blue.10', items, orientation = 'vertical', size } = props, rest = __rest(props, ["children", "className", "itemTitleHoverBg", "items", "orientation", "size"]);
57
57
  const styles = (0, core_1.useStyleConfig)('Accordion', props);
58
58
  const context = (0, react_1.useMemo)(() => (0, utils_1.filterUndefined)({ size }), [size]);
59
59
  const aliasedProps = (0, utils_1.filterUndefined)({});
60
60
  return (react_1.default.createElement(context_1.AccordionProvider, { value: context },
61
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))));
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({ itemTitleHoverBg: itemTitleHoverBg, 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({ itemTitleHoverBg: itemTitleHoverBg, key: key }, item))))) : (children))));
64
64
  });
65
65
  exports.default = exports.Accordion;
@@ -6,6 +6,8 @@ export declare type Orientation = 'vertical' | 'horizontal';
6
6
  export declare type AccordionProps = SystemProps & ThemingProps<'Accordion'> & {
7
7
  /** Items orientation @default 'vertical' */
8
8
  orientation?: Orientation;
9
+ /** Hover color for the item title @default "blue.10" */
10
+ itemTitleHoverBg?: string;
9
11
  items?: AccordionItemProps[];
10
12
  };
11
13
  export declare type AccordionItemId = string | number;
@@ -24,6 +26,8 @@ export declare type AccordionItemProps = ListItemProps & {
24
26
  content?: ReactNode;
25
27
  /** Collapsed state */
26
28
  collapsed?: boolean;
29
+ /** Hover color for the item title @default "blue.10" */
30
+ itemTitleHoverBg?: string;
27
31
  /** Title */
28
32
  title?: string | ReactNode;
29
33
  /** Collapse change state */
@@ -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,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
+ {"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,wDAAwD;IACxD,gBAAgB,CAAC,EAAE,MAAM,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,wDAAwD;IACxD,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,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,gBAkDtD,CAAA;AAED,eAAe,aAAa,CAAA"}
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,gBA6DtD,CAAA;AAED,eAAe,aAAa,CAAA"}
@@ -47,7 +47,7 @@ const accordionItemArrow_1 = __importDefault(require("./accordionItemArrow"));
47
47
  const context_1 = require("./context");
48
48
  /** An accordion item. */
49
49
  const AccordionItem = (props) => {
50
- 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 _a = (0, core_1.omitThemingProps)(props), { className, children, collapsed, content, disabled, id, itemTitleHoverBg = 'blue.10', title, onToggle } = _a, rest = __rest(_a, ["className", "children", "collapsed", "content", "disabled", "id", "itemTitleHoverBg", "title", "onToggle"]);
51
51
  const [collapsedInternal, setIsCollapsedInternal] = (0, react_1.useState)(false);
52
52
  const styles = (0, core_1.useStyleConfig)('Accordion', (0, context_1.useAccordionContext)());
53
53
  (0, react_1.useEffect)(() => {
@@ -60,7 +60,7 @@ const AccordionItem = (props) => {
60
60
  }
61
61
  };
62
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),
63
+ react_1.default.createElement(box_1.Box, Object.assign({ cursor: disabled ? 'not-allowed' : 'pointer', hoverBg: itemTitleHoverBg, 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 }))),
@@ -1,5 +1,5 @@
1
1
  import { AccordionItemProps } from './accordion.types';
2
- /** [Beta] An accordion item (horizontal orientation). */
2
+ /** An accordion item (horizontal orientation). */
3
3
  export declare const AccordionItemHorizontal: (props: AccordionItemProps) => JSX.Element;
4
4
  export default AccordionItemHorizontal;
5
5
  //# sourceMappingURL=accordionItemHorizontal.d.ts.map
@@ -1 +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"}
1
+ {"version":3,"file":"accordionItemHorizontal.d.ts","sourceRoot":"","sources":["../../../src/accordion/accordionItemHorizontal.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAItD,kDAAkD;AAClD,eAAO,MAAM,uBAAuB,UAAW,kBAAkB,gBAmFhE,CAAA;AAED,eAAe,uBAAuB,CAAA"}
@@ -44,9 +44,9 @@ const core_1 = require("../core");
44
44
  const utils_1 = require("../utils");
45
45
  const accordionItemArrow_1 = __importDefault(require("./accordionItemArrow"));
46
46
  const context_1 = require("./context");
47
- /** [Beta] An accordion item (horizontal orientation). */
47
+ /** An accordion item (horizontal orientation). */
48
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"]);
49
+ const _a = (0, core_1.omitThemingProps)(props), { className, children, collapsed, content, disabled, id, itemTitleHoverBg = 'blue.10', title, onToggle } = _a, rest = __rest(_a, ["className", "children", "collapsed", "content", "disabled", "id", "itemTitleHoverBg", "title", "onToggle"]);
50
50
  const [collapsedInternal, setIsCollapsedInternal] = (0, react_1.useState)(false);
51
51
  const styles = (0, core_1.useStyleConfig)('Accordion', (0, context_1.useAccordionContext)());
52
52
  (0, react_1.useEffect)(() => {
@@ -61,7 +61,7 @@ const AccordionItemHorizontal = (props) => {
61
61
  const cursor = disabled ? 'not-allowed' : 'pointer';
62
62
  const fontWeight = typeof title === 'string' ? '500' : 'inherit';
63
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%" }),
64
+ react_1.default.createElement(box_1.default, Object.assign({}, styles.item, { cursor: cursor, hoverBg: itemTitleHoverBg, justifyContent: "space-between", minH: styles.item.minH, onClick: toggle, p: styles.item.pt, w: "100%" }),
65
65
  !collapsedInternal && react_1.default.createElement(box_1.default, { fontWeight: fontWeight }, title),
66
66
  react_1.default.createElement(accordionItemArrow_1.default, { collapsed: collapsedInternal, orientation: "horizontal" })),
67
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))));
@@ -1 +1 @@
1
- {"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../../src/button/button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAA;AAGtC,OAAO,EAA+B,YAAY,EAAE,MAAM,SAAS,CAAA;AAEnE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,UAAU,MAAM,cAAc,CAAA;AACrC,OAAO,UAAU,MAAM,cAAc,CAAA;AAiBrC,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;SAoBtB,CAAA;AACD;;;;;;GAMG;AACH,eAAO,MAAM,MAAM;UAuHX,iBAAiB;UACjB,iBAAiB;CACxB,CAAA;AAKD,eAAe,MAAM,CAAA"}
1
+ {"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../../src/button/button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAA;AAGtC,OAAO,EAA+B,YAAY,EAAE,MAAM,SAAS,CAAA;AAEnE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,UAAU,MAAM,cAAc,CAAA;AACrC,OAAO,UAAU,MAAM,cAAc,CAAA;AAiBrC,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;SAoBtB,CAAA;AACD;;;;;;GAMG;AACH,eAAO,MAAM,MAAM;UAqHX,iBAAiB;UACjB,iBAAiB;CACxB,CAAA;AAKD,eAAe,MAAM,CAAA"}
@@ -130,15 +130,15 @@ exports.Button = (0, core_1.vui)((props, ref) => {
130
130
  w: isFullWidth ? '100%' : undefined
131
131
  });
132
132
  return (react_1.default.createElement(context_2.ButtonProvider, { value: context },
133
- react_1.default.createElement(exports.ButtonBase, Object.assign({ borderWidth: border, className: (0, utils_1.cs)('vui-button', className, isActive && utils_1.activeClassName), disabled: disabled, focusRing: 3, h: h, pl: pl, pr: pr, ref: ref, type: "button", variant: variant }, buttonStyles, disabledProps, aliasedProps, rest),
133
+ react_1.default.createElement(exports.ButtonBase, Object.assign({ borderWidth: border, className: (0, utils_1.cs)('vui-button', className, isActive && utils_1.activeClassName), disabled: disabled, focusRing: 3, h: h, pl: pl, pr: isDropDown ? 0 : pr, ref: ref, type: "button", variant: variant }, buttonStyles, disabledProps, aliasedProps, rest),
134
134
  hasState && (react_1.default.createElement(StateWrapper, Object.assign({ onClick: (e) => e.stopPropagation() }, stateProps),
135
135
  react_1.default.createElement(buttonIcon_1.default, Object.assign({ m: "auto" }, stateIconProps)))),
136
136
  react_1.default.createElement(Content, null,
137
137
  (0, utils_1.isString)(icon) ? react_1.default.createElement(buttonIcon_1.default, { name: icon }) : icon,
138
138
  !icon && (react_1.default.createElement(react_1.default.Fragment, null,
139
139
  (0, utils_1.isString)(iconLeft) ? react_1.default.createElement(buttonIcon_1.default, { mr: isDropDown ? 0 : iconLeftMr, name: iconLeft }) : iconLeft, children !== null && children !== void 0 ? children : ((0, utils_1.isReactText)(text) ? react_1.default.createElement(buttonText_1.default, Object.assign({}, { isTruncated, text })) : text),
140
- isDropDown && react_1.default.createElement(buttonIcon_1.default, { name: "falAngleDown" }),
141
- (0, utils_1.isString)(iconRight) ? react_1.default.createElement(buttonIcon_1.default, { ml: iconRightMl, name: iconRight }) : iconRight))))));
140
+ (0, utils_1.isString)(iconRight) ? react_1.default.createElement(buttonIcon_1.default, { ml: iconRightMl, name: iconRight }) : iconRight)),
141
+ isDropDown && react_1.default.createElement(buttonIcon_1.default, { name: "falAngleDown" })))));
142
142
  });
143
143
  exports.Button.Icon = buttonIcon_1.default;
144
144
  exports.Button.Text = buttonText_1.default;
@@ -0,0 +1,12 @@
1
+ import { CopyToClipboardProps } from './copyToClipboard.types';
2
+ /**
3
+ * A helper button component.
4
+ *
5
+ * Copies the provided text to clipboard.
6
+ *
7
+ * Copying is available only for a secure environment (https://), otherwise the button is disabled.
8
+ *
9
+ */
10
+ export declare const CopyToClipboard: import("../core").VuiComponent<"button", CopyToClipboardProps>;
11
+ export default CopyToClipboard;
12
+ //# sourceMappingURL=copyToClipboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copyToClipboard.d.ts","sourceRoot":"","sources":["../../../src/copyToClipboard/copyToClipboard.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAG9D;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,gEAiB1B,CAAA;AAEF,eAAe,eAAe,CAAA"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ var __rest = (this && this.__rest) || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
+ t[p] = s[p];
6
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
+ t[p[i]] = s[p[i]];
10
+ }
11
+ return t;
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.CopyToClipboard = void 0;
18
+ const react_1 = __importDefault(require("react"));
19
+ const button_1 = __importDefault(require("../button"));
20
+ const core_1 = require("../core");
21
+ const utils_1 = require("../utils");
22
+ const useCopyToClipboard_1 = require("./useCopyToClipboard");
23
+ /**
24
+ * A helper button component.
25
+ *
26
+ * Copies the provided text to clipboard.
27
+ *
28
+ * Copying is available only for a secure environment (https://), otherwise the button is disabled.
29
+ *
30
+ */
31
+ exports.CopyToClipboard = (0, core_1.vui)((props, ref) => {
32
+ const { disabled, copyText, className, size = 'xs', variant = 'text' } = props, rest = __rest(props, ["disabled", "copyText", "className", "size", "variant"]);
33
+ const { copy, isCopyDisabled } = (0, useCopyToClipboard_1.useCopyToClipboard)(copyText);
34
+ return (react_1.default.createElement(button_1.default, Object.assign({ className: (0, utils_1.cs)('vui-copy-to-clipboard', className), disabled: disabled || isCopyDisabled, icon: "falCopy", onClick: () => copy(), ref: ref, size: size, variant: variant }, rest)));
35
+ });
36
+ exports.default = exports.CopyToClipboard;
@@ -0,0 +1,9 @@
1
+ import { SystemProps } from '../system';
2
+ import { ThemingProps } from '../theme';
3
+ export declare type CopyToClipboardProps = SystemProps & ThemingProps<'Button'> & {
4
+ /** Text string for copying */
5
+ copyText: string;
6
+ /** Button size @default "xs" */
7
+ size?: 'xs' | 'sm' | 'md' | 'lg';
8
+ };
9
+ //# sourceMappingURL=copyToClipboard.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copyToClipboard.types.d.ts","sourceRoot":"","sources":["../../../src/copyToClipboard/copyToClipboard.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAEvC,oBAAY,oBAAoB,GAAG,WAAW,GAC5C,YAAY,CAAC,QAAQ,CAAC,GAAG;IACvB,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAA;IAChB,gCAAgC;IAChC,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;CACjC,CAAA"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,5 @@
1
+ export * from './copyToClipboard';
2
+ export { default } from './copyToClipboard';
3
+ export * from './copyToClipboard.types';
4
+ export * from './useCopyToClipboard';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/copyToClipboard/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAC3C,cAAc,yBAAyB,CAAA;AACvC,cAAc,sBAAsB,CAAA"}
@@ -0,0 +1,25 @@
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ var __importDefault = (this && this.__importDefault) || function (mod) {
17
+ return (mod && mod.__esModule) ? mod : { "default": mod };
18
+ };
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.default = void 0;
21
+ __exportStar(require("./copyToClipboard"), exports);
22
+ var copyToClipboard_1 = require("./copyToClipboard");
23
+ Object.defineProperty(exports, "default", { enumerable: true, get: function () { return __importDefault(copyToClipboard_1).default; } });
24
+ __exportStar(require("./copyToClipboard.types"), exports);
25
+ __exportStar(require("./useCopyToClipboard"), exports);
@@ -0,0 +1,5 @@
1
+ export declare const useCopyToClipboard: (copyText: string) => {
2
+ copy: () => void;
3
+ isCopyDisabled: boolean;
4
+ };
5
+ //# sourceMappingURL=useCopyToClipboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCopyToClipboard.d.ts","sourceRoot":"","sources":["../../../src/copyToClipboard/useCopyToClipboard.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,kBAAkB,aAAc,MAAM;;;CAYlD,CAAA"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useCopyToClipboard = void 0;
4
+ const toast_1 = require("../toast");
5
+ const useCopyToClipboard = (copyText) => {
6
+ var _a, _b;
7
+ const { showSuccess, showError } = (0, toast_1.useToast)();
8
+ const isCopyDisabled = !((_b = (_a = window === null || window === void 0 ? void 0 : window.navigator) === null || _a === void 0 ? void 0 : _a.clipboard) === null || _b === void 0 ? void 0 : _b.writeText);
9
+ const copy = () => {
10
+ var _a, _b, _c;
11
+ if (!isCopyDisabled) {
12
+ (_c = (_a = window === null || window === void 0 ? void 0 : window.navigator) === null || _a === void 0 ? void 0 : (_b = _a.clipboard).writeText) === null || _c === void 0 ? void 0 : _c.call(_b, copyText).then(() => showSuccess(`Copied to clipboard: ${copyText}`)).catch(() => showError('Copy failed'));
13
+ }
14
+ };
15
+ return { copy, isCopyDisabled };
16
+ };
17
+ exports.useCopyToClipboard = useCopyToClipboard;
@@ -6,6 +6,7 @@ export * from './buttonGroup';
6
6
  export * from './buttonToggleGroup';
7
7
  export * from './card';
8
8
  export * from './checkbox';
9
+ export * from './copyToClipboard';
9
10
  export * from './core';
10
11
  export * from './dialog';
11
12
  export * from './divider';
@@ -1 +1 @@
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,YAAY,CAAA;AAC1B,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,mBAAmB,CAAA;AACjC,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,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA"}
package/dist/cjs/index.js CHANGED
@@ -22,6 +22,7 @@ __exportStar(require("./buttonGroup"), exports);
22
22
  __exportStar(require("./buttonToggleGroup"), exports);
23
23
  __exportStar(require("./card"), exports);
24
24
  __exportStar(require("./checkbox"), exports);
25
+ __exportStar(require("./copyToClipboard"), exports);
25
26
  __exportStar(require("./core"), exports);
26
27
  __exportStar(require("./dialog"), exports);
27
28
  __exportStar(require("./divider"), exports);
@@ -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;AAKtE,eAAO,MAAM,aAAa,+HAIzB,CAAA;AAED,qEAAqE;AACrE,eAAO,MAAM,SAAS,uDAyBpB,CAAA;AAEF,eAAe,SAAS,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,uDA6BpB,CAAA;AAEF,eAAe,SAAS,CAAA"}
@@ -12,13 +12,13 @@ export const AccordionBase = styled.divBox `
12
12
  `;
13
13
  /** Allows to show and hide sections of related content on a page. */
14
14
  export const Accordion = vui((props, ref) => {
15
- const { children, className, orientation = 'vertical', items, size, ...rest } = props;
15
+ const { children, className, itemTitleHoverBg = 'blue.10', items, orientation = 'vertical', size, ...rest } = props;
16
16
  const styles = useStyleConfig('Accordion', props);
17
17
  const context = useMemo(() => filterUndefined({ size }), [size]);
18
18
  const aliasedProps = filterUndefined({});
19
19
  return (React.createElement(AccordionProvider, { value: context },
20
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))));
21
+ ? items?.map?.((item, key) => (React.createElement(AccordionItem, { itemTitleHoverBg: itemTitleHoverBg, key: key, ...item })))
22
+ : children)) : items ? (items?.map?.((item, key) => (React.createElement(AccordionItemHorizontal, { itemTitleHoverBg: itemTitleHoverBg, key: key, ...item })))) : (children))));
23
23
  });
24
24
  export default Accordion;
@@ -6,6 +6,8 @@ export declare type Orientation = 'vertical' | 'horizontal';
6
6
  export declare type AccordionProps = SystemProps & ThemingProps<'Accordion'> & {
7
7
  /** Items orientation @default 'vertical' */
8
8
  orientation?: Orientation;
9
+ /** Hover color for the item title @default "blue.10" */
10
+ itemTitleHoverBg?: string;
9
11
  items?: AccordionItemProps[];
10
12
  };
11
13
  export declare type AccordionItemId = string | number;
@@ -24,6 +26,8 @@ export declare type AccordionItemProps = ListItemProps & {
24
26
  content?: ReactNode;
25
27
  /** Collapsed state */
26
28
  collapsed?: boolean;
29
+ /** Hover color for the item title @default "blue.10" */
30
+ itemTitleHoverBg?: string;
27
31
  /** Title */
28
32
  title?: string | ReactNode;
29
33
  /** Collapse change state */
@@ -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,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
+ {"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,wDAAwD;IACxD,gBAAgB,CAAC,EAAE,MAAM,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,wDAAwD;IACxD,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,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,gBAkDtD,CAAA;AAED,eAAe,aAAa,CAAA"}
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,gBA6DtD,CAAA;AAED,eAAe,aAAa,CAAA"}
@@ -7,7 +7,7 @@ import AccordionItemArrow from './accordionItemArrow';
7
7
  import { useAccordionContext } from './context';
8
8
  /** An accordion item. */
9
9
  export const AccordionItem = (props) => {
10
- const { className, children, id, content, disabled, title, collapsed, onToggle, ...rest } = omitThemingProps(props);
10
+ const { className, children, collapsed, content, disabled, id, itemTitleHoverBg = 'blue.10', title, onToggle, ...rest } = omitThemingProps(props);
11
11
  const [collapsedInternal, setIsCollapsedInternal] = useState(false);
12
12
  const styles = useStyleConfig('Accordion', useAccordionContext());
13
13
  useEffect(() => {
@@ -20,7 +20,7 @@ export const AccordionItem = (props) => {
20
20
  }
21
21
  };
22
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 },
23
+ React.createElement(Box, { cursor: disabled ? 'not-allowed' : 'pointer', hoverBg: itemTitleHoverBg, 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 }))),
@@ -1,5 +1,5 @@
1
1
  import { AccordionItemProps } from './accordion.types';
2
- /** [Beta] An accordion item (horizontal orientation). */
2
+ /** An accordion item (horizontal orientation). */
3
3
  export declare const AccordionItemHorizontal: (props: AccordionItemProps) => JSX.Element;
4
4
  export default AccordionItemHorizontal;
5
5
  //# sourceMappingURL=accordionItemHorizontal.d.ts.map
@@ -1 +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"}
1
+ {"version":3,"file":"accordionItemHorizontal.d.ts","sourceRoot":"","sources":["../../../src/accordion/accordionItemHorizontal.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAItD,kDAAkD;AAClD,eAAO,MAAM,uBAAuB,UAAW,kBAAkB,gBAmFhE,CAAA;AAED,eAAe,uBAAuB,CAAA"}
@@ -4,9 +4,9 @@ import { omitThemingProps, useStyleConfig } from '../core';
4
4
  import { cs } from '../utils';
5
5
  import AccordionItemArrow from './accordionItemArrow';
6
6
  import { useAccordionContext } from './context';
7
- /** [Beta] An accordion item (horizontal orientation). */
7
+ /** An accordion item (horizontal orientation). */
8
8
  export const AccordionItemHorizontal = (props) => {
9
- const { className, children, id, content, disabled, title, collapsed, onToggle, ...rest } = omitThemingProps(props);
9
+ const { className, children, collapsed, content, disabled, id, itemTitleHoverBg = 'blue.10', title, onToggle, ...rest } = omitThemingProps(props);
10
10
  const [collapsedInternal, setIsCollapsedInternal] = useState(false);
11
11
  const styles = useStyleConfig('Accordion', useAccordionContext());
12
12
  useEffect(() => {
@@ -21,7 +21,7 @@ export const AccordionItemHorizontal = (props) => {
21
21
  const cursor = disabled ? 'not-allowed' : 'pointer';
22
22
  const fontWeight = typeof title === 'string' ? '500' : 'inherit';
23
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%" },
24
+ React.createElement(Box, { ...styles.item, cursor: cursor, hoverBg: itemTitleHoverBg, justifyContent: "space-between", minH: styles.item.minH, onClick: toggle, p: styles.item.pt, w: "100%" },
25
25
  !collapsedInternal && React.createElement(Box, { fontWeight: fontWeight }, title),
26
26
  React.createElement(AccordionItemArrow, { collapsed: collapsedInternal, orientation: "horizontal" })),
27
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))));
@@ -1 +1 @@
1
- {"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../../src/button/button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAA;AAGtC,OAAO,EAA+B,YAAY,EAAE,MAAM,SAAS,CAAA;AAEnE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,UAAU,MAAM,cAAc,CAAA;AACrC,OAAO,UAAU,MAAM,cAAc,CAAA;AAiBrC,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;SAoBtB,CAAA;AACD;;;;;;GAMG;AACH,eAAO,MAAM,MAAM;UAuHX,iBAAiB;UACjB,iBAAiB;CACxB,CAAA;AAKD,eAAe,MAAM,CAAA"}
1
+ {"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../../src/button/button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAA;AAGtC,OAAO,EAA+B,YAAY,EAAE,MAAM,SAAS,CAAA;AAEnE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,UAAU,MAAM,cAAc,CAAA;AACrC,OAAO,UAAU,MAAM,cAAc,CAAA;AAiBrC,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;SAoBtB,CAAA;AACD;;;;;;GAMG;AACH,eAAO,MAAM,MAAM;UAqHX,iBAAiB;UACjB,iBAAiB;CACxB,CAAA;AAKD,eAAe,MAAM,CAAA"}
@@ -89,7 +89,7 @@ export const Button = vui((props, ref) => {
89
89
  w: isFullWidth ? '100%' : undefined
90
90
  });
91
91
  return (React.createElement(ButtonProvider, { value: context },
92
- React.createElement(ButtonBase, { borderWidth: border, className: cs('vui-button', className, isActive && activeClassName), disabled: disabled, focusRing: 3, h: h, pl: pl, pr: pr, ref: ref, type: "button", variant: variant, ...buttonStyles, ...disabledProps, ...aliasedProps, ...rest },
92
+ React.createElement(ButtonBase, { borderWidth: border, className: cs('vui-button', className, isActive && activeClassName), disabled: disabled, focusRing: 3, h: h, pl: pl, pr: isDropDown ? 0 : pr, ref: ref, type: "button", variant: variant, ...buttonStyles, ...disabledProps, ...aliasedProps, ...rest },
93
93
  hasState && (React.createElement(StateWrapper, { onClick: (e) => e.stopPropagation(), ...stateProps },
94
94
  React.createElement(ButtonIcon, { m: "auto", ...stateIconProps }))),
95
95
  React.createElement(Content, null,
@@ -97,8 +97,8 @@ export const Button = vui((props, ref) => {
97
97
  !icon && (React.createElement(React.Fragment, null,
98
98
  isString(iconLeft) ? React.createElement(ButtonIcon, { mr: isDropDown ? 0 : iconLeftMr, name: iconLeft }) : iconLeft,
99
99
  children ?? (isReactText(text) ? React.createElement(ButtonText, { ...{ isTruncated, text } }) : text),
100
- isDropDown && React.createElement(ButtonIcon, { name: "falAngleDown" }),
101
- isString(iconRight) ? React.createElement(ButtonIcon, { ml: iconRightMl, name: iconRight }) : iconRight))))));
100
+ isString(iconRight) ? React.createElement(ButtonIcon, { ml: iconRightMl, name: iconRight }) : iconRight)),
101
+ isDropDown && React.createElement(ButtonIcon, { name: "falAngleDown" })))));
102
102
  });
103
103
  Button.Icon = ButtonIcon;
104
104
  Button.Text = ButtonText;
@@ -0,0 +1,12 @@
1
+ import { CopyToClipboardProps } from './copyToClipboard.types';
2
+ /**
3
+ * A helper button component.
4
+ *
5
+ * Copies the provided text to clipboard.
6
+ *
7
+ * Copying is available only for a secure environment (https://), otherwise the button is disabled.
8
+ *
9
+ */
10
+ export declare const CopyToClipboard: import("../core").VuiComponent<"button", CopyToClipboardProps>;
11
+ export default CopyToClipboard;
12
+ //# sourceMappingURL=copyToClipboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copyToClipboard.d.ts","sourceRoot":"","sources":["../../../src/copyToClipboard/copyToClipboard.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAG9D;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,gEAiB1B,CAAA;AAEF,eAAe,eAAe,CAAA"}
@@ -0,0 +1,19 @@
1
+ import React from 'react';
2
+ import Button from '../button';
3
+ import { vui } from '../core';
4
+ import { cs } from '../utils';
5
+ import { useCopyToClipboard } from './useCopyToClipboard';
6
+ /**
7
+ * A helper button component.
8
+ *
9
+ * Copies the provided text to clipboard.
10
+ *
11
+ * Copying is available only for a secure environment (https://), otherwise the button is disabled.
12
+ *
13
+ */
14
+ export const CopyToClipboard = vui((props, ref) => {
15
+ const { disabled, copyText, className, size = 'xs', variant = 'text', ...rest } = props;
16
+ const { copy, isCopyDisabled } = useCopyToClipboard(copyText);
17
+ return (React.createElement(Button, { className: cs('vui-copy-to-clipboard', className), disabled: disabled || isCopyDisabled, icon: "falCopy", onClick: () => copy(), ref: ref, size: size, variant: variant, ...rest }));
18
+ });
19
+ export default CopyToClipboard;
@@ -0,0 +1,9 @@
1
+ import { SystemProps } from '../system';
2
+ import { ThemingProps } from '../theme';
3
+ export declare type CopyToClipboardProps = SystemProps & ThemingProps<'Button'> & {
4
+ /** Text string for copying */
5
+ copyText: string;
6
+ /** Button size @default "xs" */
7
+ size?: 'xs' | 'sm' | 'md' | 'lg';
8
+ };
9
+ //# sourceMappingURL=copyToClipboard.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copyToClipboard.types.d.ts","sourceRoot":"","sources":["../../../src/copyToClipboard/copyToClipboard.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAEvC,oBAAY,oBAAoB,GAAG,WAAW,GAC5C,YAAY,CAAC,QAAQ,CAAC,GAAG;IACvB,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAA;IAChB,gCAAgC;IAChC,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;CACjC,CAAA"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,5 @@
1
+ export * from './copyToClipboard';
2
+ export { default } from './copyToClipboard';
3
+ export * from './copyToClipboard.types';
4
+ export * from './useCopyToClipboard';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/copyToClipboard/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAC3C,cAAc,yBAAyB,CAAA;AACvC,cAAc,sBAAsB,CAAA"}
@@ -0,0 +1,4 @@
1
+ export * from './copyToClipboard';
2
+ export { default } from './copyToClipboard';
3
+ export * from './copyToClipboard.types';
4
+ export * from './useCopyToClipboard';
@@ -0,0 +1,5 @@
1
+ export declare const useCopyToClipboard: (copyText: string) => {
2
+ copy: () => void;
3
+ isCopyDisabled: boolean;
4
+ };
5
+ //# sourceMappingURL=useCopyToClipboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCopyToClipboard.d.ts","sourceRoot":"","sources":["../../../src/copyToClipboard/useCopyToClipboard.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,kBAAkB,aAAc,MAAM;;;CAYlD,CAAA"}
@@ -0,0 +1,14 @@
1
+ import { useToast } from '../toast';
2
+ export const useCopyToClipboard = (copyText) => {
3
+ const { showSuccess, showError } = useToast();
4
+ const isCopyDisabled = !window?.navigator?.clipboard?.writeText;
5
+ const copy = () => {
6
+ if (!isCopyDisabled) {
7
+ window?.navigator?.clipboard
8
+ .writeText?.(copyText)
9
+ .then(() => showSuccess(`Copied to clipboard: ${copyText}`))
10
+ .catch(() => showError('Copy failed'));
11
+ }
12
+ };
13
+ return { copy, isCopyDisabled };
14
+ };
@@ -6,6 +6,7 @@ export * from './buttonGroup';
6
6
  export * from './buttonToggleGroup';
7
7
  export * from './card';
8
8
  export * from './checkbox';
9
+ export * from './copyToClipboard';
9
10
  export * from './core';
10
11
  export * from './dialog';
11
12
  export * from './divider';
@@ -1 +1 @@
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,YAAY,CAAA;AAC1B,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,mBAAmB,CAAA;AACjC,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,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA"}
package/dist/esm/index.js CHANGED
@@ -6,6 +6,7 @@ export * from './buttonGroup';
6
6
  export * from './buttonToggleGroup';
7
7
  export * from './card';
8
8
  export * from './checkbox';
9
+ export * from './copyToClipboard';
9
10
  export * from './core';
10
11
  export * from './dialog';
11
12
  export * from './divider';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@veracity/vui",
3
- "version": "1.7.0-beta.1",
3
+ "version": "1.7.0-beta.3",
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",
@@ -16,7 +16,7 @@ export const AccordionBase = styled.divBox`
16
16
 
17
17
  /** Allows to show and hide sections of related content on a page. */
18
18
  export const Accordion = vui<'div', AccordionProps>((props, ref) => {
19
- const { children, className, orientation = 'vertical', items, size, ...rest } = props
19
+ const { children, className, itemTitleHoverBg = 'blue.10', items, orientation = 'vertical', size, ...rest } = props
20
20
  const styles = useStyleConfig('Accordion', props)
21
21
 
22
22
  const context = useMemo(() => filterUndefined({ size }), [size])
@@ -29,11 +29,15 @@ export const Accordion = vui<'div', AccordionProps>((props, ref) => {
29
29
  {orientation === 'vertical' ? (
30
30
  <List w="100%">
31
31
  {items
32
- ? items?.map?.((item: AccordionItemProps, key: number) => <AccordionItem key={key} {...item} />)
32
+ ? items?.map?.((item: AccordionItemProps, key: number) => (
33
+ <AccordionItem itemTitleHoverBg={itemTitleHoverBg} key={key} {...item} />
34
+ ))
33
35
  : children}
34
36
  </List>
35
37
  ) : items ? (
36
- items?.map?.((item: AccordionItemProps, key: number) => <AccordionItemHorizontal key={key} {...item} />)
38
+ items?.map?.((item: AccordionItemProps, key: number) => (
39
+ <AccordionItemHorizontal itemTitleHoverBg={itemTitleHoverBg} key={key} {...item} />
40
+ ))
37
41
  ) : (
38
42
  children
39
43
  )}
@@ -10,6 +10,8 @@ export type AccordionProps = SystemProps &
10
10
  ThemingProps<'Accordion'> & {
11
11
  /** Items orientation @default 'vertical' */
12
12
  orientation?: Orientation
13
+ /** Hover color for the item title @default "blue.10" */
14
+ itemTitleHoverBg?: string
13
15
  items?: AccordionItemProps[]
14
16
  }
15
17
 
@@ -31,6 +33,8 @@ export type AccordionItemProps = ListItemProps & {
31
33
  content?: ReactNode
32
34
  /** Collapsed state */
33
35
  collapsed?: boolean
36
+ /** Hover color for the item title @default "blue.10" */
37
+ itemTitleHoverBg?: string
34
38
  /** Title */
35
39
  title?: string | ReactNode
36
40
  /** Collapse change state */
@@ -10,7 +10,18 @@ import { useAccordionContext } from './context'
10
10
 
11
11
  /** An accordion item. */
12
12
  export const AccordionItem = (props: AccordionItemProps) => {
13
- const { className, children, id, content, disabled, title, collapsed, onToggle, ...rest } = omitThemingProps(props)
13
+ const {
14
+ className,
15
+ children,
16
+ collapsed,
17
+ content,
18
+ disabled,
19
+ id,
20
+ itemTitleHoverBg = 'blue.10',
21
+ title,
22
+ onToggle,
23
+ ...rest
24
+ } = omitThemingProps(props)
14
25
  const [collapsedInternal, setIsCollapsedInternal] = useState<boolean>(false)
15
26
 
16
27
  const styles = useStyleConfig('Accordion', useAccordionContext())
@@ -40,7 +51,7 @@ export const AccordionItem = (props: AccordionItemProps) => {
40
51
  >
41
52
  <Box
42
53
  cursor={disabled ? 'not-allowed' : 'pointer'}
43
- hoverBg="blue.10"
54
+ hoverBg={itemTitleHoverBg}
44
55
  justifyContent="space-between"
45
56
  onClick={toggle}
46
57
  px={2}
@@ -7,9 +7,20 @@ import { AccordionItemProps } from './accordion.types'
7
7
  import AccordionItemArrow from './accordionItemArrow'
8
8
  import { useAccordionContext } from './context'
9
9
 
10
- /** [Beta] An accordion item (horizontal orientation). */
10
+ /** An accordion item (horizontal orientation). */
11
11
  export const AccordionItemHorizontal = (props: AccordionItemProps) => {
12
- const { className, children, id, content, disabled, title, collapsed, onToggle, ...rest } = omitThemingProps(props)
12
+ const {
13
+ className,
14
+ children,
15
+ collapsed,
16
+ content,
17
+ disabled,
18
+ id,
19
+ itemTitleHoverBg = 'blue.10',
20
+ title,
21
+ onToggle,
22
+ ...rest
23
+ } = omitThemingProps(props)
13
24
  const [collapsedInternal, setIsCollapsedInternal] = useState<boolean>(false)
14
25
 
15
26
  const styles = useStyleConfig('Accordion', useAccordionContext())
@@ -48,7 +59,7 @@ export const AccordionItemHorizontal = (props: AccordionItemProps) => {
48
59
  <Box
49
60
  {...styles.item}
50
61
  cursor={cursor}
51
- hoverBg="blue.10"
62
+ hoverBg={itemTitleHoverBg}
52
63
  justifyContent="space-between"
53
64
  minH={styles.item.minH}
54
65
  onClick={toggle}
@@ -135,7 +135,7 @@ export const Button = vui<'button', ButtonProps>((props, ref) => {
135
135
  focusRing={3}
136
136
  h={h}
137
137
  pl={pl}
138
- pr={pr}
138
+ pr={isDropDown ? 0 : pr}
139
139
  ref={ref}
140
140
  type="button"
141
141
  variant={variant}
@@ -152,18 +152,16 @@ export const Button = vui<'button', ButtonProps>((props, ref) => {
152
152
 
153
153
  <Content>
154
154
  {isString(icon) ? <ButtonIcon name={icon} /> : icon}
155
-
156
155
  {!icon && (
157
156
  <>
158
157
  {isString(iconLeft) ? <ButtonIcon mr={isDropDown ? 0 : iconLeftMr} name={iconLeft} /> : iconLeft}
159
158
 
160
159
  {children ?? (isReactText(text) ? <ButtonText {...{ isTruncated, text }} /> : text)}
161
160
 
162
- {isDropDown && <ButtonIcon name="falAngleDown" />}
163
-
164
161
  {isString(iconRight) ? <ButtonIcon ml={iconRightMl} name={iconRight} /> : iconRight}
165
162
  </>
166
163
  )}
164
+ {isDropDown && <ButtonIcon name="falAngleDown" />}
167
165
  </Content>
168
166
  </ButtonBase>
169
167
  </ButtonProvider>
@@ -0,0 +1,36 @@
1
+ import React from 'react'
2
+
3
+ import Button from '../button'
4
+ import { vui } from '../core'
5
+ import { cs } from '../utils'
6
+ import { CopyToClipboardProps } from './copyToClipboard.types'
7
+ import { useCopyToClipboard } from './useCopyToClipboard'
8
+
9
+ /**
10
+ * A helper button component.
11
+ *
12
+ * Copies the provided text to clipboard.
13
+ *
14
+ * Copying is available only for a secure environment (https://), otherwise the button is disabled.
15
+ *
16
+ */
17
+ export const CopyToClipboard = vui<'button', CopyToClipboardProps>((props, ref) => {
18
+ const { disabled, copyText, className, size = 'xs', variant = 'text', ...rest } = props
19
+
20
+ const { copy, isCopyDisabled } = useCopyToClipboard(copyText)
21
+
22
+ return (
23
+ <Button
24
+ className={cs('vui-copy-to-clipboard', className)}
25
+ disabled={disabled || isCopyDisabled}
26
+ icon="falCopy"
27
+ onClick={() => copy()}
28
+ ref={ref}
29
+ size={size}
30
+ variant={variant}
31
+ {...rest}
32
+ />
33
+ )
34
+ })
35
+
36
+ export default CopyToClipboard
@@ -0,0 +1,10 @@
1
+ import { SystemProps } from '../system'
2
+ import { ThemingProps } from '../theme'
3
+
4
+ export type CopyToClipboardProps = SystemProps &
5
+ ThemingProps<'Button'> & {
6
+ /** Text string for copying */
7
+ copyText: string
8
+ /** Button size @default "xs" */
9
+ size?: 'xs' | 'sm' | 'md' | 'lg'
10
+ }
@@ -0,0 +1,4 @@
1
+ export * from './copyToClipboard'
2
+ export { default } from './copyToClipboard'
3
+ export * from './copyToClipboard.types'
4
+ export * from './useCopyToClipboard'
@@ -0,0 +1,15 @@
1
+ import { useToast } from '../toast'
2
+
3
+ export const useCopyToClipboard = (copyText: string) => {
4
+ const { showSuccess, showError } = useToast()
5
+ const isCopyDisabled = !window?.navigator?.clipboard?.writeText
6
+ const copy = () => {
7
+ if (!isCopyDisabled) {
8
+ window?.navigator?.clipboard
9
+ .writeText?.(copyText)
10
+ .then(() => showSuccess(`Copied to clipboard: ${copyText}`))
11
+ .catch(() => showError('Copy failed'))
12
+ }
13
+ }
14
+ return { copy, isCopyDisabled }
15
+ }
package/src/index.ts CHANGED
@@ -6,6 +6,7 @@ export * from './buttonGroup'
6
6
  export * from './buttonToggleGroup'
7
7
  export * from './card'
8
8
  export * from './checkbox'
9
+ export * from './copyToClipboard'
9
10
  export * from './core'
10
11
  export * from './dialog'
11
12
  export * from './divider'