@xyo-network/react-card 2.37.23 → 2.37.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/dist/cjs/components/CardContentEx.d.ts +3 -1
  2. package/dist/cjs/components/CardContentEx.d.ts.map +1 -1
  3. package/dist/cjs/components/CardContentEx.js +15 -5
  4. package/dist/cjs/components/CardContentEx.js.map +1 -1
  5. package/dist/cjs/components/CardEx.d.ts +2 -1
  6. package/dist/cjs/components/CardEx.d.ts.map +1 -1
  7. package/dist/cjs/components/CardEx.js +7 -5
  8. package/dist/cjs/components/CardEx.js.map +1 -1
  9. package/dist/cjs/components/PageCard.d.ts +1 -1
  10. package/dist/cjs/components/PageCard.d.ts.map +1 -1
  11. package/dist/cjs/components/PageCard.js +6 -4
  12. package/dist/cjs/components/PageCard.js.map +1 -1
  13. package/dist/docs.json +2491 -141
  14. package/dist/esm/components/CardContentEx.d.ts +3 -1
  15. package/dist/esm/components/CardContentEx.d.ts.map +1 -1
  16. package/dist/esm/components/CardContentEx.js +11 -3
  17. package/dist/esm/components/CardContentEx.js.map +1 -1
  18. package/dist/esm/components/CardEx.d.ts +2 -1
  19. package/dist/esm/components/CardEx.d.ts.map +1 -1
  20. package/dist/esm/components/CardEx.js +6 -3
  21. package/dist/esm/components/CardEx.js.map +1 -1
  22. package/dist/esm/components/PageCard.d.ts +1 -1
  23. package/dist/esm/components/PageCard.d.ts.map +1 -1
  24. package/dist/esm/components/PageCard.js +6 -3
  25. package/dist/esm/components/PageCard.js.map +1 -1
  26. package/package.json +2 -2
  27. package/src/components/CardContentEx.stories.tsx +26 -7
  28. package/src/components/CardContentEx.tsx +14 -3
  29. package/src/components/CardEx.tsx +8 -2
  30. package/src/components/PageCard.stories.tsx +5 -1
  31. package/src/components/PageCard.tsx +8 -4
@@ -2,6 +2,8 @@
2
2
  import { CardContentProps } from '@mui/material';
3
3
  export declare type CardContentExProps = CardContentProps & {
4
4
  variant?: 'scrollable' | 'normal';
5
+ scrollToTop?: boolean;
5
6
  };
6
- export declare const CardContentEx: React.FC<CardContentExProps>;
7
+ export declare const CardContentExWithRef: import("react").ForwardRefExoticComponent<Pick<CardContentExProps, keyof import("@mui/material/OverridableComponent").CommonProps | "slot" | "title" | "key" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "hidden" | "id" | "lang" | "placeholder" | "spellCheck" | "tabIndex" | "translate" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "color" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "children" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "sx" | "variant" | "scrollToTop"> & import("react").RefAttributes<HTMLDivElement | null>>;
8
+ export declare const CardContentEx: import("react").ForwardRefExoticComponent<Pick<CardContentExProps, keyof import("@mui/material/OverridableComponent").CommonProps | "slot" | "title" | "key" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "hidden" | "id" | "lang" | "placeholder" | "spellCheck" | "tabIndex" | "translate" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "color" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "children" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "sx" | "variant" | "scrollToTop"> & import("react").RefAttributes<HTMLDivElement | null>>;
7
9
  //# sourceMappingURL=CardContentEx.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CardContentEx.d.ts","sourceRoot":"","sources":["../../../src/components/CardContentEx.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAe,gBAAgB,EAAU,MAAM,eAAe,CAAA;AAgBrE,oBAAY,kBAAkB,GAAG,gBAAgB,GAAG;IAClD,OAAO,CAAC,EAAE,YAAY,GAAG,QAAQ,CAAA;CAClC,CAAA;AAED,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAEtD,CAAA"}
1
+ {"version":3,"file":"CardContentEx.d.ts","sourceRoot":"","sources":["../../../src/components/CardContentEx.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAe,gBAAgB,EAAU,MAAM,eAAe,CAAA;AAiBrE,oBAAY,kBAAkB,GAAG,gBAAgB,GAAG;IAClD,OAAO,CAAC,EAAE,YAAY,GAAG,QAAQ,CAAA;IACjC,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB,CAAA;AAED,eAAO,MAAM,oBAAoB,8rJAO/B,CAAA;AAIF,eAAO,MAAM,aAAa,8rJAAuB,CAAA"}
@@ -1,5 +1,6 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { CardContent, styled } from '@mui/material';
3
+ import { forwardRef, useEffect } from 'react';
3
4
  const CardContentExRoot = styled(CardContent, {
4
5
  name: 'CardContentEx',
5
6
  shouldForwardProp: (prop) => prop !== 'variant',
@@ -13,7 +14,14 @@ const CardContentExRoot = styled(CardContent, {
13
14
  paddingTop: 0,
14
15
  }),
15
16
  }));
16
- export const CardContentEx = (props) => {
17
- return _jsx(CardContentExRoot, { ...props });
18
- };
17
+ export const CardContentExWithRef = forwardRef(({ scrollToTop, ...props }, ref) => {
18
+ useEffect(() => {
19
+ if (ref !== null && typeof ref === 'object') {
20
+ ref?.current?.scroll({ behavior: 'smooth', top: 0 });
21
+ }
22
+ }, [ref, scrollToTop]);
23
+ return _jsx(CardContentExRoot, { ref: ref, ...props });
24
+ });
25
+ CardContentExWithRef.displayName = 'CardContentEx';
26
+ export const CardContentEx = CardContentExWithRef;
19
27
  //# sourceMappingURL=CardContentEx.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CardContentEx.js","sourceRoot":"","sources":["../../../src/components/CardContentEx.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAoB,MAAM,EAAE,MAAM,eAAe,CAAA;AAErE,MAAM,iBAAiB,GAAG,MAAM,CAAC,WAAW,EAAE;IAC5C,IAAI,EAAE,eAAe;IACrB,iBAAiB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,SAAS;IAC/C,IAAI,EAAE,MAAM;CACb,CAAC,CAAqB,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;IACvC,GAAG,CAAC,OAAO,KAAK,YAAY,IAAI;QAC9B,CAAC,aAAa,CAAC,EAAE;YACf,aAAa,EAAE,CAAC;SACjB;QACD,QAAQ,EAAE,MAAM;QAChB,UAAU,EAAE,CAAC;KACd,CAAC;CACH,CAAC,CAAC,CAAA;AAMH,MAAM,CAAC,MAAM,aAAa,GAAiC,CAAC,KAAK,EAAE,EAAE;IACnE,OAAO,KAAC,iBAAiB,OAAK,KAAK,GAAI,CAAA;AACzC,CAAC,CAAA"}
1
+ {"version":3,"file":"CardContentEx.js","sourceRoot":"","sources":["../../../src/components/CardContentEx.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAoB,MAAM,EAAE,MAAM,eAAe,CAAA;AACrE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAE7C,MAAM,iBAAiB,GAAG,MAAM,CAAC,WAAW,EAAE;IAC5C,IAAI,EAAE,eAAe;IACrB,iBAAiB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,SAAS;IAC/C,IAAI,EAAE,MAAM;CACb,CAAC,CAAqB,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;IACvC,GAAG,CAAC,OAAO,KAAK,YAAY,IAAI;QAC9B,CAAC,aAAa,CAAC,EAAE;YACf,aAAa,EAAE,CAAC;SACjB;QACD,QAAQ,EAAE,MAAM;QAChB,UAAU,EAAE,CAAC;KACd,CAAC;CACH,CAAC,CAAC,CAAA;AAOH,MAAM,CAAC,MAAM,oBAAoB,GAAG,UAAU,CAA4C,CAAC,EAAE,WAAW,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE;IAC3H,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;YAC3C,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA;SACrD;IACH,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAA;IACtB,OAAO,KAAC,iBAAiB,IAAC,GAAG,EAAE,GAAG,KAAM,KAAK,GAAI,CAAA;AACnD,CAAC,CAAC,CAAA;AAEF,oBAAoB,CAAC,WAAW,GAAG,eAAe,CAAA;AAElD,MAAM,CAAC,MAAM,aAAa,GAAG,oBAAoB,CAAA"}
@@ -3,5 +3,6 @@ import { CardProps } from '@mui/material';
3
3
  export declare type CardExProps = CardProps & {
4
4
  gradient?: 'border' | 'background';
5
5
  };
6
- export declare const CardEx: React.FC<CardExProps>;
6
+ export declare const CardExWithRef: React.FC<CardExProps>;
7
+ export declare const CardEx: import("react").FC<CardExProps>;
7
8
  //# sourceMappingURL=CardEx.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CardEx.d.ts","sourceRoot":"","sources":["../../../src/components/CardEx.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAQ,SAAS,EAAE,MAAM,eAAe,CAAA;AAG/C,oBAAY,WAAW,GAAG,SAAS,GAAG;IACpC,QAAQ,CAAC,EAAE,QAAQ,GAAG,YAAY,CAAA;CACnC,CAAA;AAED,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CAYxC,CAAA"}
1
+ {"version":3,"file":"CardEx.d.ts","sourceRoot":"","sources":["../../../src/components/CardEx.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAQ,SAAS,EAAE,MAAM,eAAe,CAAA;AAI/C,oBAAY,WAAW,GAAG,SAAS,GAAG;IACpC,QAAQ,CAAC,EAAE,QAAQ,GAAG,YAAY,CAAA;CACnC,CAAA;AAED,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CAa9C,CAAA;AAIF,eAAO,MAAM,MAAM,iCAAgB,CAAA"}
@@ -1,12 +1,15 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { Card } from '@mui/material';
3
3
  import { useGradientStyles } from '@xyo-network/react-shared';
4
- export const CardEx = ({ style, gradient, ...props }) => {
4
+ import { forwardRef } from 'react';
5
+ export const CardExWithRef = forwardRef(({ style, gradient, ...props }, ref) => {
5
6
  const { styles } = useGradientStyles();
6
7
  const gradientStyle = gradient === 'border' ? styles.border : gradient === 'background' ? styles.background : {};
7
8
  return (_jsx(Card, { style: {
8
9
  ...gradientStyle,
9
10
  ...style,
10
- }, ...props }));
11
- };
11
+ }, ref: ref, ...props }));
12
+ });
13
+ CardExWithRef.displayName = 'CardEx';
14
+ export const CardEx = CardExWithRef;
12
15
  //# sourceMappingURL=CardEx.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CardEx.js","sourceRoot":"","sources":["../../../src/components/CardEx.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAa,MAAM,eAAe,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAM7D,MAAM,CAAC,MAAM,MAAM,GAA0B,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE;IAC7E,MAAM,EAAE,MAAM,EAAE,GAAG,iBAAiB,EAAE,CAAA;IACtC,MAAM,aAAa,GAAG,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAA;IAChH,OAAO,CACL,KAAC,IAAI,IACH,KAAK,EAAE;YACL,GAAG,aAAa;YAChB,GAAG,KAAK;SACT,KACG,KAAK,GACT,CACH,CAAA;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"CardEx.js","sourceRoot":"","sources":["../../../src/components/CardEx.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAa,MAAM,eAAe,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAMlC,MAAM,CAAC,MAAM,aAAa,GAA0B,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE;IACpG,MAAM,EAAE,MAAM,EAAE,GAAG,iBAAiB,EAAE,CAAA;IACtC,MAAM,aAAa,GAAG,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAA;IAChH,OAAO,CACL,KAAC,IAAI,IACH,KAAK,EAAE;YACL,GAAG,aAAa;YAChB,GAAG,KAAK;SACT,EACD,GAAG,EAAE,GAAG,KACJ,KAAK,GACT,CACH,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,aAAa,CAAC,WAAW,GAAG,QAAQ,CAAA;AAEpC,MAAM,CAAC,MAAM,MAAM,GAAG,aAAa,CAAA"}
@@ -6,5 +6,5 @@ export interface PageCardProps extends CardExProps {
6
6
  subheader?: CardHeaderProps['subheader'];
7
7
  action?: ReactNode;
8
8
  }
9
- export declare const PageCard: React.FC<PageCardProps>;
9
+ export declare const PageCard: import("react").FC<PageCardProps>;
10
10
  //# sourceMappingURL=PageCard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PageCard.d.ts","sourceRoot":"","sources":["../../../src/components/PageCard.tsx"],"names":[],"mappings":"AACA,OAAO,EAAc,eAAe,EAAc,MAAM,eAAe,CAAA;AAEvE,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEjC,OAAO,EAAU,WAAW,EAAE,MAAM,UAAU,CAAA;AAE9C,MAAM,WAAW,aAAc,SAAQ,WAAW;IAChD,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB,SAAS,CAAC,EAAE,eAAe,CAAC,WAAW,CAAC,CAAA;IACxC,MAAM,CAAC,EAAE,SAAS,CAAA;CACnB;AAED,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CA2B5C,CAAA"}
1
+ {"version":3,"file":"PageCard.d.ts","sourceRoot":"","sources":["../../../src/components/PageCard.tsx"],"names":[],"mappings":"AACA,OAAO,EAAc,eAAe,EAAc,MAAM,eAAe,CAAA;AAEvE,OAAO,EAAc,SAAS,EAAE,MAAM,OAAO,CAAA;AAE7C,OAAO,EAAU,WAAW,EAAE,MAAM,UAAU,CAAA;AAE9C,MAAM,WAAW,aAAc,SAAQ,WAAW;IAChD,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB,SAAS,CAAC,EAAE,eAAe,CAAC,WAAW,CAAC,CAAA;IACxC,MAAM,CAAC,EAAE,SAAS,CAAA;CACnB;AAiCD,eAAO,MAAM,QAAQ,mCAAkB,CAAA"}
@@ -2,8 +2,11 @@ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-run
2
2
  import RefreshIcon from '@mui/icons-material/Refresh';
3
3
  import { CardHeader, IconButton } from '@mui/material';
4
4
  import { TypographyEx } from '@xyo-network/react-shared';
5
+ import { forwardRef } from 'react';
5
6
  import { CardEx } from './CardEx';
6
- export const PageCard = ({ subheader, title, onRefresh, children, action, style, ...props }) => {
7
- return (_jsxs(CardEx, { style: { backgroundColor: 'transparent', position: 'relative', ...style }, elevation: 0, ...props, children: [_jsx(CardHeader, { title: _jsx(TypographyEx, { variant: "h5", gutterBottom: true, children: title }), subheader: _jsx(TypographyEx, { variant: "subtitle1", children: subheader }), action: action ? (action) : (_jsx(_Fragment, { children: onRefresh ? (_jsx(IconButton, { onClick: () => onRefresh?.(), children: _jsx(RefreshIcon, {}) })) : null })) }), children] }));
8
- };
7
+ const PageCardWithRef = forwardRef(({ subheader, title, onRefresh, children, action, style, ...props }, ref) => {
8
+ return (_jsxs(CardEx, { style: { backgroundColor: 'transparent', position: 'relative', ...style }, elevation: 0, ref: ref, ...props, children: [_jsx(CardHeader, { title: _jsx(TypographyEx, { variant: "h5", gutterBottom: true, children: title }), subheader: _jsx(TypographyEx, { variant: "subtitle1", children: subheader }), action: action ? (action) : (_jsx(_Fragment, { children: onRefresh ? (_jsx(IconButton, { onClick: () => onRefresh?.(), children: _jsx(RefreshIcon, {}) })) : null })) }), children] }));
9
+ });
10
+ PageCardWithRef.displayName = 'PageCard';
11
+ export const PageCard = PageCardWithRef;
9
12
  //# sourceMappingURL=PageCard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PageCard.js","sourceRoot":"","sources":["../../../src/components/PageCard.tsx"],"names":[],"mappings":";AAAA,OAAO,WAAW,MAAM,6BAA6B,CAAA;AACrD,OAAO,EAAE,UAAU,EAAmB,UAAU,EAAE,MAAM,eAAe,CAAA;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAGxD,OAAO,EAAE,MAAM,EAAe,MAAM,UAAU,CAAA;AAQ9C,MAAM,CAAC,MAAM,QAAQ,GAA4B,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE;IACtH,OAAO,CACL,MAAC,MAAM,IAAC,KAAK,EAAE,EAAE,eAAe,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,KAAM,KAAK,aACxG,KAAC,UAAU,IACT,KAAK,EACH,KAAC,YAAY,IAAC,OAAO,EAAC,IAAI,EAAC,YAAY,kBACpC,KAAK,GACO,EAEjB,SAAS,EAAE,KAAC,YAAY,IAAC,OAAO,EAAC,WAAW,YAAE,SAAS,GAAgB,EACvE,MAAM,EACJ,MAAM,CAAC,CAAC,CAAC,CACP,MAAM,CACP,CAAC,CAAC,CAAC,CACF,4BACG,SAAS,CAAC,CAAC,CAAC,CACX,KAAC,UAAU,IAAC,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,EAAE,YACtC,KAAC,WAAW,KAAG,GACJ,CACd,CAAC,CAAC,CAAC,IAAI,GACP,CACJ,GAEH,EACD,QAAQ,IACF,CACV,CAAA;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"PageCard.js","sourceRoot":"","sources":["../../../src/components/PageCard.tsx"],"names":[],"mappings":";AAAA,OAAO,WAAW,MAAM,6BAA6B,CAAA;AACrD,OAAO,EAAE,UAAU,EAAmB,UAAU,EAAE,MAAM,eAAe,CAAA;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,UAAU,EAAa,MAAM,OAAO,CAAA;AAE7C,OAAO,EAAE,MAAM,EAAe,MAAM,UAAU,CAAA;AAQ9C,MAAM,eAAe,GAA4B,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE;IACtI,OAAO,CACL,MAAC,MAAM,IAAC,KAAK,EAAE,EAAE,eAAe,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,KAAM,KAAK,aAClH,KAAC,UAAU,IACT,KAAK,EACH,KAAC,YAAY,IAAC,OAAO,EAAC,IAAI,EAAC,YAAY,kBACpC,KAAK,GACO,EAEjB,SAAS,EAAE,KAAC,YAAY,IAAC,OAAO,EAAC,WAAW,YAAE,SAAS,GAAgB,EACvE,MAAM,EACJ,MAAM,CAAC,CAAC,CAAC,CACP,MAAM,CACP,CAAC,CAAC,CAAC,CACF,4BACG,SAAS,CAAC,CAAC,CAAC,CACX,KAAC,UAAU,IAAC,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,EAAE,YACtC,KAAC,WAAW,KAAG,GACJ,CACd,CAAC,CAAC,CAAC,IAAI,GACP,CACJ,GAEH,EACD,QAAQ,IACF,CACV,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,CAAC,WAAW,GAAG,UAAU,CAAA;AAExC,MAAM,CAAC,MAAM,QAAQ,GAAG,eAAe,CAAA"}
package/package.json CHANGED
@@ -11,7 +11,7 @@
11
11
  },
12
12
  "dependencies": {
13
13
  "@xylabs/react-flexbox": "^2.15.1",
14
- "@xyo-network/react-shared": "^2.37.23",
14
+ "@xyo-network/react-shared": "^2.37.25",
15
15
  "tslib": "^2.4.0"
16
16
  },
17
17
  "peerDependencies": {
@@ -65,5 +65,5 @@
65
65
  },
66
66
  "sideEffects": false,
67
67
  "types": "dist/esm/index.d.ts",
68
- "version": "2.37.23"
68
+ "version": "2.37.25"
69
69
  }
@@ -1,16 +1,32 @@
1
1
  /* eslint-disable import/no-internal-modules */
2
- import { Typography } from '@mui/material'
2
+ import { Button, Typography } from '@mui/material'
3
3
  import { ComponentStory, DecoratorFn, Meta } from '@storybook/react'
4
4
  import { FlexGrowCol } from '@xylabs/react-flexbox'
5
+ import { WithRefDecorator } from '@xyo-network/react-storybook'
6
+ import { useRef, useState } from 'react'
5
7
 
6
8
  import { CardContentEx } from './CardContentEx'
7
9
  import { PageCard } from './PageCard'
8
10
 
9
- const ScrollableDecoratorFn: DecoratorFn = (Story, args) => (
10
- <FlexGrowCol alignItems="stretch" position="absolute" height="calc(100vh - 2rem)" style={{ inset: 0 }}>
11
- <Story {...args} />
12
- </FlexGrowCol>
13
- )
11
+ const ScrollableDecoratorFn: DecoratorFn = (Story, args) => {
12
+ const [scrollToTop, setScrollToTop] = useState(false)
13
+ const ref = useRef<HTMLDivElement | null>(null)
14
+
15
+ args.args.ref = ref
16
+ args.args.scrollToTop = scrollToTop
17
+
18
+ const onScrollToTop = () => {
19
+ setScrollToTop(!scrollToTop)
20
+ }
21
+ return (
22
+ <FlexGrowCol alignItems="stretch" position="absolute" height="calc(100vh - 2rem)" style={{ inset: 0 }}>
23
+ <Button variant="contained" onClick={onScrollToTop} sx={{ marginBottom: 2 }}>
24
+ ScrollToTop
25
+ </Button>
26
+ <Story {...args} />
27
+ </FlexGrowCol>
28
+ )
29
+ }
14
30
 
15
31
  const StorybookEntry: Meta = {
16
32
  argTypes: {},
@@ -38,11 +54,14 @@ const Template: ComponentStory<typeof CardContentEx> = (props) => {
38
54
  const Default = Template.bind({})
39
55
  Default.args = {}
40
56
 
57
+ const WithRef = Template.bind({})
58
+ WithRef.decorators = [WithRefDecorator]
59
+
41
60
  const WithVariant = Template.bind({})
42
61
  WithVariant.args = { variant: 'scrollable' }
43
62
  WithVariant.decorators = [ScrollableDecoratorFn]
44
63
 
45
- export { Default, WithVariant }
64
+ export { Default, WithRef, WithVariant }
46
65
 
47
66
  // eslint-disable-next-line import/no-default-export
48
67
  export default StorybookEntry
@@ -1,4 +1,5 @@
1
1
  import { CardContent, CardContentProps, styled } from '@mui/material'
2
+ import { forwardRef, useEffect } from 'react'
2
3
 
3
4
  const CardContentExRoot = styled(CardContent, {
4
5
  name: 'CardContentEx',
@@ -16,8 +17,18 @@ const CardContentExRoot = styled(CardContent, {
16
17
 
17
18
  export type CardContentExProps = CardContentProps & {
18
19
  variant?: 'scrollable' | 'normal'
20
+ scrollToTop?: boolean
19
21
  }
20
22
 
21
- export const CardContentEx: React.FC<CardContentExProps> = (props) => {
22
- return <CardContentExRoot {...props} />
23
- }
23
+ export const CardContentExWithRef = forwardRef<HTMLDivElement | null, CardContentExProps>(({ scrollToTop, ...props }, ref) => {
24
+ useEffect(() => {
25
+ if (ref !== null && typeof ref === 'object') {
26
+ ref?.current?.scroll({ behavior: 'smooth', top: 0 })
27
+ }
28
+ }, [ref, scrollToTop])
29
+ return <CardContentExRoot ref={ref} {...props} />
30
+ })
31
+
32
+ CardContentExWithRef.displayName = 'CardContentEx'
33
+
34
+ export const CardContentEx = CardContentExWithRef
@@ -1,11 +1,12 @@
1
1
  import { Card, CardProps } from '@mui/material'
2
2
  import { useGradientStyles } from '@xyo-network/react-shared'
3
+ import { forwardRef } from 'react'
3
4
 
4
5
  export type CardExProps = CardProps & {
5
6
  gradient?: 'border' | 'background'
6
7
  }
7
8
 
8
- export const CardEx: React.FC<CardExProps> = ({ style, gradient, ...props }) => {
9
+ export const CardExWithRef: React.FC<CardExProps> = forwardRef(({ style, gradient, ...props }, ref) => {
9
10
  const { styles } = useGradientStyles()
10
11
  const gradientStyle = gradient === 'border' ? styles.border : gradient === 'background' ? styles.background : {}
11
12
  return (
@@ -14,7 +15,12 @@ export const CardEx: React.FC<CardExProps> = ({ style, gradient, ...props }) =>
14
15
  ...gradientStyle,
15
16
  ...style,
16
17
  }}
18
+ ref={ref}
17
19
  {...props}
18
20
  />
19
21
  )
20
- }
22
+ })
23
+
24
+ CardExWithRef.displayName = 'CardEx'
25
+
26
+ export const CardEx = CardExWithRef
@@ -1,6 +1,7 @@
1
1
  /* eslint-disable import/no-internal-modules */
2
2
  import { CardContent, Typography } from '@mui/material'
3
3
  import { ComponentStory, Meta } from '@storybook/react'
4
+ import { WithRefDecorator } from '@xyo-network/react-storybook'
4
5
  import { useState } from 'react'
5
6
 
6
7
  import { PageCard } from './PageCard'
@@ -56,7 +57,10 @@ WithNoOnRefresh.parameters = {
56
57
  actions: { argTypesRegex: '' },
57
58
  }
58
59
 
59
- export { Default, WithNoOnRefresh }
60
+ const WithRef = Template.bind({})
61
+ WithRef.decorators = [WithRefDecorator]
62
+
63
+ export { Default, WithNoOnRefresh, WithRef }
60
64
 
61
65
  // eslint-disable-next-line import/no-default-export
62
66
  export default StorybookEntry
@@ -1,7 +1,7 @@
1
1
  import RefreshIcon from '@mui/icons-material/Refresh'
2
2
  import { CardHeader, CardHeaderProps, IconButton } from '@mui/material'
3
3
  import { TypographyEx } from '@xyo-network/react-shared'
4
- import { ReactNode } from 'react'
4
+ import { forwardRef, ReactNode } from 'react'
5
5
 
6
6
  import { CardEx, CardExProps } from './CardEx'
7
7
 
@@ -11,9 +11,9 @@ export interface PageCardProps extends CardExProps {
11
11
  action?: ReactNode
12
12
  }
13
13
 
14
- export const PageCard: React.FC<PageCardProps> = ({ subheader, title, onRefresh, children, action, style, ...props }) => {
14
+ const PageCardWithRef: React.FC<PageCardProps> = forwardRef(({ subheader, title, onRefresh, children, action, style, ...props }, ref) => {
15
15
  return (
16
- <CardEx style={{ backgroundColor: 'transparent', position: 'relative', ...style }} elevation={0} {...props}>
16
+ <CardEx style={{ backgroundColor: 'transparent', position: 'relative', ...style }} elevation={0} ref={ref} {...props}>
17
17
  <CardHeader
18
18
  title={
19
19
  <TypographyEx variant="h5" gutterBottom>
@@ -38,4 +38,8 @@ export const PageCard: React.FC<PageCardProps> = ({ subheader, title, onRefresh,
38
38
  {children}
39
39
  </CardEx>
40
40
  )
41
- }
41
+ })
42
+
43
+ PageCardWithRef.displayName = 'PageCard'
44
+
45
+ export const PageCard = PageCardWithRef