@transferwise/components 46.167.0 → 46.168.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 (173) hide show
  1. package/README.md +1 -1
  2. package/build/Link/Link.js.map +1 -1
  3. package/build/Link/Link.mjs.map +1 -1
  4. package/build/Loader/Loader.js.map +1 -1
  5. package/build/Loader/Loader.mjs.map +1 -1
  6. package/build/Prompt/PrimitivePrompt/PrimitivePrompt.js +2 -1
  7. package/build/Prompt/PrimitivePrompt/PrimitivePrompt.js.map +1 -1
  8. package/build/Prompt/PrimitivePrompt/PrimitivePrompt.mjs +2 -1
  9. package/build/Prompt/PrimitivePrompt/PrimitivePrompt.mjs.map +1 -1
  10. package/build/Prompt/Snackbar/Snackbar.js +205 -0
  11. package/build/Prompt/Snackbar/Snackbar.js.map +1 -0
  12. package/build/Prompt/Snackbar/Snackbar.messages.js +14 -0
  13. package/build/Prompt/Snackbar/Snackbar.messages.js.map +1 -0
  14. package/build/Prompt/Snackbar/Snackbar.messages.mjs +10 -0
  15. package/build/Prompt/Snackbar/Snackbar.messages.mjs.map +1 -0
  16. package/build/Prompt/Snackbar/Snackbar.mjs +203 -0
  17. package/build/Prompt/Snackbar/Snackbar.mjs.map +1 -0
  18. package/build/Prompt/Snackbar/SnackbarContext.js.map +1 -0
  19. package/build/Prompt/Snackbar/SnackbarContext.mjs.map +1 -0
  20. package/build/Prompt/Snackbar/SnackbarPortal.js +12 -0
  21. package/build/Prompt/Snackbar/SnackbarPortal.js.map +1 -0
  22. package/build/Prompt/Snackbar/SnackbarPortal.mjs +8 -0
  23. package/build/Prompt/Snackbar/SnackbarPortal.mjs.map +1 -0
  24. package/build/Prompt/Snackbar/SnackbarProvider.js +42 -0
  25. package/build/Prompt/Snackbar/SnackbarProvider.js.map +1 -0
  26. package/build/Prompt/Snackbar/SnackbarProvider.mjs +38 -0
  27. package/build/Prompt/Snackbar/SnackbarProvider.mjs.map +1 -0
  28. package/build/Prompt/Snackbar/constants.js +17 -0
  29. package/build/Prompt/Snackbar/constants.js.map +1 -0
  30. package/build/Prompt/Snackbar/constants.mjs +11 -0
  31. package/build/Prompt/Snackbar/constants.mjs.map +1 -0
  32. package/build/Prompt/Snackbar/useSnackbar.js.map +1 -0
  33. package/build/Prompt/Snackbar/useSnackbar.mjs.map +1 -0
  34. package/build/Prompt/Snackbar/useSnackbarAutoDismiss.js +66 -0
  35. package/build/Prompt/Snackbar/useSnackbarAutoDismiss.js.map +1 -0
  36. package/build/Prompt/Snackbar/useSnackbarAutoDismiss.mjs +62 -0
  37. package/build/Prompt/Snackbar/useSnackbarAutoDismiss.mjs.map +1 -0
  38. package/build/Prompt/Snackbar/useSnackbarManager.js +153 -0
  39. package/build/Prompt/Snackbar/useSnackbarManager.js.map +1 -0
  40. package/build/Prompt/Snackbar/useSnackbarManager.mjs +149 -0
  41. package/build/Prompt/Snackbar/useSnackbarManager.mjs.map +1 -0
  42. package/build/Prompt/Snackbar/useSnackbarSwipeDismiss.js +135 -0
  43. package/build/Prompt/Snackbar/useSnackbarSwipeDismiss.js.map +1 -0
  44. package/build/Prompt/Snackbar/useSnackbarSwipeDismiss.mjs +131 -0
  45. package/build/Prompt/Snackbar/useSnackbarSwipeDismiss.mjs.map +1 -0
  46. package/build/Section/Section.js.map +1 -1
  47. package/build/Section/Section.mjs.map +1 -1
  48. package/build/_deprecated/Select/Select.js +1 -1
  49. package/build/_deprecated/Select/Select.js.map +1 -1
  50. package/build/_deprecated/Select/Select.mjs +1 -1
  51. package/build/_deprecated/Select/Select.mjs.map +1 -1
  52. package/build/common/BottomSheet/BottomSheet.js +1 -3
  53. package/build/common/BottomSheet/BottomSheet.js.map +1 -1
  54. package/build/common/BottomSheet/BottomSheet.mjs +1 -3
  55. package/build/common/BottomSheet/BottomSheet.mjs.map +1 -1
  56. package/build/i18n/en.json +1 -0
  57. package/build/i18n/en.json.js +1 -0
  58. package/build/i18n/en.json.js.map +1 -1
  59. package/build/i18n/en.json.mjs +1 -0
  60. package/build/i18n/en.json.mjs.map +1 -1
  61. package/build/index.js +3 -3
  62. package/build/index.mjs +3 -3
  63. package/build/main.css +137 -75
  64. package/build/styles/IconButton/IconButton.css +3 -4
  65. package/build/styles/Prompt/Snackbar/Snackbar.css +134 -0
  66. package/build/styles/main.css +137 -75
  67. package/build/types/Link/Link.d.ts +1 -1
  68. package/build/types/Loader/Loader.d.ts +1 -1
  69. package/build/types/Prompt/PrimitivePrompt/PrimitivePrompt.d.ts +11 -0
  70. package/build/types/Prompt/PrimitivePrompt/PrimitivePrompt.d.ts.map +1 -1
  71. package/build/types/Prompt/Snackbar/Snackbar.d.ts +62 -0
  72. package/build/types/Prompt/Snackbar/Snackbar.d.ts.map +1 -0
  73. package/build/types/Prompt/Snackbar/Snackbar.messages.d.ts +9 -0
  74. package/build/types/Prompt/Snackbar/Snackbar.messages.d.ts.map +1 -0
  75. package/build/types/Prompt/Snackbar/Snackbar.types.d.ts +12 -0
  76. package/build/types/Prompt/Snackbar/Snackbar.types.d.ts.map +1 -0
  77. package/build/types/{Snackbar → Prompt/Snackbar}/SnackbarContext.d.ts +2 -2
  78. package/build/types/Prompt/Snackbar/SnackbarContext.d.ts.map +1 -0
  79. package/build/types/Prompt/Snackbar/SnackbarPortal.d.ts +4 -0
  80. package/build/types/Prompt/Snackbar/SnackbarPortal.d.ts.map +1 -0
  81. package/build/types/Prompt/Snackbar/SnackbarProvider.d.ts +13 -0
  82. package/build/types/Prompt/Snackbar/SnackbarProvider.d.ts.map +1 -0
  83. package/build/types/Prompt/Snackbar/constants.d.ts +9 -0
  84. package/build/types/Prompt/Snackbar/constants.d.ts.map +1 -0
  85. package/build/types/{Snackbar → Prompt/Snackbar}/index.d.ts +1 -1
  86. package/build/types/Prompt/Snackbar/index.d.ts.map +1 -0
  87. package/build/types/Prompt/Snackbar/useSnackbar.d.ts +3 -0
  88. package/build/types/Prompt/Snackbar/useSnackbar.d.ts.map +1 -0
  89. package/build/types/Prompt/Snackbar/useSnackbarAutoDismiss.d.ts +13 -0
  90. package/build/types/Prompt/Snackbar/useSnackbarAutoDismiss.d.ts.map +1 -0
  91. package/build/types/Prompt/Snackbar/useSnackbarManager.d.ts +20 -0
  92. package/build/types/Prompt/Snackbar/useSnackbarManager.d.ts.map +1 -0
  93. package/build/types/Prompt/Snackbar/useSnackbarSwipeDismiss.d.ts +22 -0
  94. package/build/types/Prompt/Snackbar/useSnackbarSwipeDismiss.d.ts.map +1 -0
  95. package/build/types/Section/Section.d.ts +1 -1
  96. package/build/types/_deprecated/Select/Select.d.ts +1 -1
  97. package/build/types/common/BottomSheet/BottomSheet.d.ts +1 -3
  98. package/build/types/common/BottomSheet/BottomSheet.d.ts.map +1 -1
  99. package/build/types/index.d.ts +5 -5
  100. package/build/types/index.d.ts.map +1 -1
  101. package/build/types/test-utils/index.d.ts +2 -0
  102. package/build/types/test-utils/index.d.ts.map +1 -1
  103. package/package.json +2 -2
  104. package/src/IconButton/IconButton.css +3 -4
  105. package/src/IconButton/IconButton.less +14 -1
  106. package/src/Link/Link.tsx +1 -1
  107. package/src/ListItem/AdditionalInfo/_stories/ListItemAdditionalInfo.story.tsx +1 -1
  108. package/src/ListItem/AvatarView/_stories/ListItemAvatarView.story.tsx +3 -3
  109. package/src/ListItem/_stories/ListItem.disabled.story.tsx +1 -1
  110. package/src/ListItem/_stories/ListItem.scenarios.story.tsx +2 -2
  111. package/src/Loader/Loader.tsx +1 -1
  112. package/src/Prompt/PrimitivePrompt/PrimitivePrompt.test.tsx +24 -1
  113. package/src/Prompt/PrimitivePrompt/PrimitivePrompt.tsx +8 -2
  114. package/src/Prompt/Snackbar/Snackbar.css +134 -0
  115. package/src/Prompt/Snackbar/Snackbar.less +159 -0
  116. package/src/Prompt/Snackbar/Snackbar.messages.ts +9 -0
  117. package/src/Prompt/Snackbar/Snackbar.test.tsx +1079 -0
  118. package/src/Prompt/Snackbar/Snackbar.tsx +245 -0
  119. package/src/Prompt/Snackbar/Snackbar.types.ts +17 -0
  120. package/src/{Snackbar → Prompt/Snackbar}/SnackbarContext.ts +2 -2
  121. package/src/Prompt/Snackbar/SnackbarPortal.tsx +8 -0
  122. package/src/Prompt/Snackbar/SnackbarProvider.test.tsx +783 -0
  123. package/src/Prompt/Snackbar/SnackbarProvider.tsx +41 -0
  124. package/src/Prompt/Snackbar/_stories/Snackbar.accessibility.docs.mdx +58 -0
  125. package/src/{Snackbar → Prompt/Snackbar}/_stories/Snackbar.rtl.test.story.tsx +17 -9
  126. package/src/Prompt/Snackbar/_stories/Snackbar.story.tsx +416 -0
  127. package/src/Prompt/Snackbar/_stories/Snackbar.test.story.tsx +263 -0
  128. package/src/Prompt/Snackbar/constants.ts +10 -0
  129. package/src/{Snackbar → Prompt/Snackbar}/index.ts +1 -1
  130. package/src/Prompt/Snackbar/useSnackbarAutoDismiss.ts +74 -0
  131. package/src/Prompt/Snackbar/useSnackbarManager.ts +169 -0
  132. package/src/Prompt/Snackbar/useSnackbarSwipeDismiss.ts +169 -0
  133. package/src/Section/Section.tsx +1 -1
  134. package/src/_deprecated/Select/Select.tsx +1 -1
  135. package/src/_deprecated/Select/_stories/Select.story.tsx +1 -1
  136. package/src/common/BottomSheet/BottomSheet.tsx +1 -3
  137. package/src/i18n/en.json +1 -0
  138. package/src/index.ts +5 -5
  139. package/src/main.css +137 -75
  140. package/src/main.less +1 -1
  141. package/build/Snackbar/Snackbar.js +0 -128
  142. package/build/Snackbar/Snackbar.js.map +0 -1
  143. package/build/Snackbar/Snackbar.mjs +0 -123
  144. package/build/Snackbar/Snackbar.mjs.map +0 -1
  145. package/build/Snackbar/SnackbarContext.js.map +0 -1
  146. package/build/Snackbar/SnackbarContext.mjs.map +0 -1
  147. package/build/Snackbar/SnackbarProvider.js +0 -46
  148. package/build/Snackbar/SnackbarProvider.js.map +0 -1
  149. package/build/Snackbar/SnackbarProvider.mjs +0 -42
  150. package/build/Snackbar/SnackbarProvider.mjs.map +0 -1
  151. package/build/Snackbar/useSnackbar.js.map +0 -1
  152. package/build/Snackbar/useSnackbar.mjs.map +0 -1
  153. package/build/styles/Snackbar/Snackbar.css +0 -71
  154. package/build/types/Snackbar/Snackbar.d.ts +0 -16
  155. package/build/types/Snackbar/Snackbar.d.ts.map +0 -1
  156. package/build/types/Snackbar/SnackbarContext.d.ts.map +0 -1
  157. package/build/types/Snackbar/SnackbarProvider.d.ts +0 -6
  158. package/build/types/Snackbar/SnackbarProvider.d.ts.map +0 -1
  159. package/build/types/Snackbar/index.d.ts.map +0 -1
  160. package/build/types/Snackbar/useSnackbar.d.ts +0 -3
  161. package/build/types/Snackbar/useSnackbar.d.ts.map +0 -1
  162. package/src/Snackbar/Snackbar.css +0 -71
  163. package/src/Snackbar/Snackbar.less +0 -80
  164. package/src/Snackbar/Snackbar.test.tsx +0 -206
  165. package/src/Snackbar/Snackbar.tsx +0 -129
  166. package/src/Snackbar/SnackbarProvider.tsx +0 -33
  167. package/src/Snackbar/_stories/Snackbar.story.tsx +0 -89
  168. package/src/Snackbar/_stories/Snackbar.test.story.tsx +0 -139
  169. /package/build/{Snackbar → Prompt/Snackbar}/SnackbarContext.js +0 -0
  170. /package/build/{Snackbar → Prompt/Snackbar}/SnackbarContext.mjs +0 -0
  171. /package/build/{Snackbar → Prompt/Snackbar}/useSnackbar.js +0 -0
  172. /package/build/{Snackbar → Prompt/Snackbar}/useSnackbar.mjs +0 -0
  173. /package/src/{Snackbar → Prompt/Snackbar}/useSnackbar.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"BottomSheet.mjs","sources":["../../../src/common/BottomSheet/BottomSheet.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport {\n CSSProperties,\n HTMLAttributes,\n PropsWithChildren,\n SyntheticEvent,\n useContext,\n useRef,\n useState,\n} from 'react';\nimport { Breakpoint } from '@transferwise/neptune-tokens';\n\nimport Dimmer from '../../Dimmer';\nimport Drawer from '../../Drawer';\nimport { OverlayIdContext } from '../../Provider/overlay/OverlayIdProvider';\nimport SlidingPanel from '../../SlidingPanel';\nimport { CloseButton } from '../CloseButton';\nimport { CommonProps } from '../commonProps';\nimport { isServerSide } from '../DomHelpers';\nimport { useConditionalListener } from '../hooks';\nimport { useMedia } from '../hooks/useMedia';\nimport { Position } from '../PropsValues/position';\n\nconst INITIAL_Y_POSITION = 0;\n\nconst CONTENT_SCROLL_THRESHOLD = 1;\n\nconst MOVE_OFFSET_THRESHOLD = 50;\n\nexport type BottomSheetProps = PropsWithChildren<\n {\n onClose?: (event: Event | SyntheticEvent) => void;\n open: boolean;\n } & CommonProps &\n Pick<HTMLAttributes<HTMLDivElement>, 'role' | 'aria-labelledby' | 'aria-label'>\n>;\n\n/**\n * Neptune: https://transferwise.github.io/neptune/components/bottom-sheet/\n *\n * Neptune Web: https://transferwise.github.io/neptune-web/components/overlays/BottomSheet\n *\n */\nconst BottomSheet = ({ role = 'dialog', ...props }: BottomSheetProps) => {\n const bottomSheetReference = useRef<HTMLDivElement>(null);\n const topBarReference = useRef<HTMLDivElement>(null);\n const contentReference = useRef<HTMLDivElement>(null);\n\n const [pressed, setPressed] = useState<boolean>(false);\n\n /**\n * Used to track `requestAnimationFrame` requests\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame#return_value\n */\n const animationId = useRef<number>(0);\n\n /**\n * Difference between initial coordinate ({@link initialYCoordinate})\n * and new position (when user moves component), it's get calculated on `onTouchMove` and `onMouseMove` events\n *\n * @see {@link calculateOffsetAfterMove}\n */\n const moveOffset = useRef<number>(0);\n const initialYCoordinate = useRef<number>(0);\n\n // apply shadow to the bottom of top-bar when scroll over content\n useConditionalListener({\n attachListener: props.open && !isServerSide(),\n callback: () => {\n if (topBarReference.current !== null) {\n const { classList } = topBarReference.current;\n if (!isContentScrollPositionAtTop()) {\n classList.add('np-bottom-sheet--top-bar--shadow');\n } else {\n classList.remove('np-bottom-sheet--top-bar--shadow');\n }\n }\n },\n eventType: 'scroll',\n parent: isServerSide() ? undefined : document,\n });\n\n function move(newHeight: number): void {\n if (bottomSheetReference.current !== null) {\n bottomSheetReference.current.style.transform = `translateY(${newHeight}px)`;\n }\n }\n\n function close(event: Event | SyntheticEvent): void {\n setPressed(false);\n moveOffset.current = INITIAL_Y_POSITION;\n if (bottomSheetReference.current !== null) {\n bottomSheetReference.current.style.removeProperty('transform');\n }\n if (props.onClose) {\n props.onClose(event);\n }\n }\n\n const onSwipeStart = (\n event: React.MouseEvent<HTMLDivElement> | React.TouchEvent<HTMLDivElement>,\n ): void => {\n initialYCoordinate.current = ('touches' in event ? event.touches[0] : event).clientY;\n setPressed(true);\n };\n\n const onSwipeMove = (\n event: React.MouseEvent<HTMLDivElement> | React.TouchEvent<HTMLDivElement>,\n ): void => {\n if (pressed) {\n const { clientY } = 'touches' in event ? event.touches[0] : event;\n\n const offset = calculateOffsetAfterMove(clientY);\n // check whether move is to the bottom only and content scroll position is at the top\n if (offset > INITIAL_Y_POSITION && isContentScrollPositionAtTop()) {\n moveOffset.current = offset;\n animationId.current = requestAnimationFrame(() => {\n if (animationId.current !== undefined && bottomSheetReference.current !== null) {\n move(offset);\n }\n });\n }\n }\n };\n\n function onSwipeEnd(\n event: React.MouseEvent<HTMLDivElement> | React.TouchEvent<HTMLDivElement>,\n ): void {\n // stop moving component\n cancelAnimationFrame(animationId.current);\n setPressed(false);\n // check whether move down is strong enough\n // and content scroll position is at the top to close the component\n if (moveOffset.current > MOVE_OFFSET_THRESHOLD && isContentScrollPositionAtTop()) {\n close(event);\n }\n // otherwise move component back to default (initial) position\n else {\n move(INITIAL_Y_POSITION);\n }\n moveOffset.current = INITIAL_Y_POSITION;\n }\n\n function isContentScrollPositionAtTop(): boolean {\n return (\n contentReference?.current?.scrollTop !== undefined &&\n contentReference.current.scrollTop <= CONTENT_SCROLL_THRESHOLD\n );\n }\n\n /**\n * Calculates how hard user moves component,\n * result value used to determine whether to hide component or re-position to default state\n *\n * @param afterMoveYCoordinate\n */\n function calculateOffsetAfterMove(afterMoveYCoordinate: number): number {\n return afterMoveYCoordinate - initialYCoordinate.current;\n }\n\n /**\n * Set `max-height` for content part (in order to keep it scrollable for content overflow cases) of the component\n * and ensures space for safe zone (32px) at the top.\n */\n function setContentMaxHeight(): CSSProperties {\n const safeZoneHeight = '64px';\n const topbarHeight = '32px';\n const windowHight: number = isServerSide() ? 0 : window.innerHeight;\n /**\n * Calculate _real_ height of the screen (taking into account parts of browser interface).\n *\n * See https://css-tricks.com/the-trick-to-viewport-units-on-mobile for more details.\n */\n const screenHeight = `${windowHight * 0.01 * 100}px`;\n return {\n maxHeight: `calc(${screenHeight} - ${safeZoneHeight} - ${topbarHeight})`,\n };\n }\n\n const is400Zoom = useMedia(`(max-width: ${Breakpoint.EXTRA_SMALL}px)`);\n\n const overlayId = useContext(OverlayIdContext);\n\n return is400Zoom ? (\n <Drawer\n aria-labelledby={props['aria-labelledby']}\n aria-label={props['aria-label']}\n role={role}\n open={props.open}\n className={props.className}\n onClose={close}\n >\n {props.children}\n </Drawer>\n ) : (\n <Dimmer open={props.open} fadeContentOnEnter fadeContentOnExit onClose={close}>\n <SlidingPanel\n ref={bottomSheetReference}\n open={props.open}\n position={Position.BOTTOM}\n className={clsx('np-bottom-sheet', props.className)}\n >\n <div\n id={overlayId}\n aria-labelledby={props['aria-labelledby'] || undefined}\n aria-label={props['aria-label'] || undefined}\n role={role}\n aria-modal\n onTouchStart={onSwipeStart}\n onTouchMove={onSwipeMove}\n onTouchEnd={onSwipeEnd}\n onMouseDown={onSwipeStart}\n onMouseMove={onSwipeMove}\n onMouseUp={onSwipeEnd}\n >\n <div ref={topBarReference} className=\"np-bottom-sheet--top-bar\">\n <div className=\"np-bottom-sheet--handler\" />\n <CloseButton size=\"sm\" className=\"sr-only np-bottom-sheet--close-btn\" onClick={close} />\n </div>\n <div\n ref={contentReference}\n style={setContentMaxHeight()}\n className=\"np-bottom-sheet--content\"\n >\n {props.children}\n </div>\n </div>\n </SlidingPanel>\n </Dimmer>\n );\n};\n\nexport default BottomSheet;\n"],"names":["INITIAL_Y_POSITION","CONTENT_SCROLL_THRESHOLD","MOVE_OFFSET_THRESHOLD","BottomSheet","role","props","bottomSheetReference","useRef","topBarReference","contentReference","pressed","setPressed","useState","animationId","moveOffset","initialYCoordinate","useConditionalListener","attachListener","open","isServerSide","callback","current","classList","isContentScrollPositionAtTop","add","remove","eventType","parent","undefined","document","move","newHeight","style","transform","close","event","removeProperty","onClose","onSwipeStart","touches","clientY","onSwipeMove","offset","calculateOffsetAfterMove","requestAnimationFrame","onSwipeEnd","cancelAnimationFrame","scrollTop","afterMoveYCoordinate","setContentMaxHeight","safeZoneHeight","topbarHeight","windowHight","window","innerHeight","screenHeight","maxHeight","is400Zoom","useMedia","Breakpoint","EXTRA_SMALL","overlayId","useContext","OverlayIdContext","_jsx","Drawer","className","children","Dimmer","fadeContentOnEnter","fadeContentOnExit","SlidingPanel","ref","position","Position","BOTTOM","clsx","_jsxs","id","onTouchStart","onTouchMove","onTouchEnd","onMouseDown","onMouseMove","onMouseUp","CloseButton","size","onClick"],"mappings":"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"}
1
+ {"version":3,"file":"BottomSheet.mjs","sources":["../../../src/common/BottomSheet/BottomSheet.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport {\n CSSProperties,\n HTMLAttributes,\n PropsWithChildren,\n SyntheticEvent,\n useContext,\n useRef,\n useState,\n} from 'react';\nimport { Breakpoint } from '@transferwise/neptune-tokens';\n\nimport Dimmer from '../../Dimmer';\nimport Drawer from '../../Drawer';\nimport { OverlayIdContext } from '../../Provider/overlay/OverlayIdProvider';\nimport SlidingPanel from '../../SlidingPanel';\nimport { CloseButton } from '../CloseButton';\nimport { CommonProps } from '../commonProps';\nimport { isServerSide } from '../DomHelpers';\nimport { useConditionalListener } from '../hooks';\nimport { useMedia } from '../hooks/useMedia';\nimport { Position } from '../PropsValues/position';\n\nconst INITIAL_Y_POSITION = 0;\n\nconst CONTENT_SCROLL_THRESHOLD = 1;\n\nconst MOVE_OFFSET_THRESHOLD = 50;\n\nexport type BottomSheetProps = PropsWithChildren<\n {\n onClose?: (event: Event | SyntheticEvent) => void;\n open: boolean;\n } & CommonProps &\n Pick<HTMLAttributes<HTMLDivElement>, 'role' | 'aria-labelledby' | 'aria-label'>\n>;\n\n/**\n * Design guidance: https://docs.wise.design/components/bottom-sheet/\n *\n */\nconst BottomSheet = ({ role = 'dialog', ...props }: BottomSheetProps) => {\n const bottomSheetReference = useRef<HTMLDivElement>(null);\n const topBarReference = useRef<HTMLDivElement>(null);\n const contentReference = useRef<HTMLDivElement>(null);\n\n const [pressed, setPressed] = useState<boolean>(false);\n\n /**\n * Used to track `requestAnimationFrame` requests\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame#return_value\n */\n const animationId = useRef<number>(0);\n\n /**\n * Difference between initial coordinate ({@link initialYCoordinate})\n * and new position (when user moves component), it's get calculated on `onTouchMove` and `onMouseMove` events\n *\n * @see {@link calculateOffsetAfterMove}\n */\n const moveOffset = useRef<number>(0);\n const initialYCoordinate = useRef<number>(0);\n\n // apply shadow to the bottom of top-bar when scroll over content\n useConditionalListener({\n attachListener: props.open && !isServerSide(),\n callback: () => {\n if (topBarReference.current !== null) {\n const { classList } = topBarReference.current;\n if (!isContentScrollPositionAtTop()) {\n classList.add('np-bottom-sheet--top-bar--shadow');\n } else {\n classList.remove('np-bottom-sheet--top-bar--shadow');\n }\n }\n },\n eventType: 'scroll',\n parent: isServerSide() ? undefined : document,\n });\n\n function move(newHeight: number): void {\n if (bottomSheetReference.current !== null) {\n bottomSheetReference.current.style.transform = `translateY(${newHeight}px)`;\n }\n }\n\n function close(event: Event | SyntheticEvent): void {\n setPressed(false);\n moveOffset.current = INITIAL_Y_POSITION;\n if (bottomSheetReference.current !== null) {\n bottomSheetReference.current.style.removeProperty('transform');\n }\n if (props.onClose) {\n props.onClose(event);\n }\n }\n\n const onSwipeStart = (\n event: React.MouseEvent<HTMLDivElement> | React.TouchEvent<HTMLDivElement>,\n ): void => {\n initialYCoordinate.current = ('touches' in event ? event.touches[0] : event).clientY;\n setPressed(true);\n };\n\n const onSwipeMove = (\n event: React.MouseEvent<HTMLDivElement> | React.TouchEvent<HTMLDivElement>,\n ): void => {\n if (pressed) {\n const { clientY } = 'touches' in event ? event.touches[0] : event;\n\n const offset = calculateOffsetAfterMove(clientY);\n // check whether move is to the bottom only and content scroll position is at the top\n if (offset > INITIAL_Y_POSITION && isContentScrollPositionAtTop()) {\n moveOffset.current = offset;\n animationId.current = requestAnimationFrame(() => {\n if (animationId.current !== undefined && bottomSheetReference.current !== null) {\n move(offset);\n }\n });\n }\n }\n };\n\n function onSwipeEnd(\n event: React.MouseEvent<HTMLDivElement> | React.TouchEvent<HTMLDivElement>,\n ): void {\n // stop moving component\n cancelAnimationFrame(animationId.current);\n setPressed(false);\n // check whether move down is strong enough\n // and content scroll position is at the top to close the component\n if (moveOffset.current > MOVE_OFFSET_THRESHOLD && isContentScrollPositionAtTop()) {\n close(event);\n }\n // otherwise move component back to default (initial) position\n else {\n move(INITIAL_Y_POSITION);\n }\n moveOffset.current = INITIAL_Y_POSITION;\n }\n\n function isContentScrollPositionAtTop(): boolean {\n return (\n contentReference?.current?.scrollTop !== undefined &&\n contentReference.current.scrollTop <= CONTENT_SCROLL_THRESHOLD\n );\n }\n\n /**\n * Calculates how hard user moves component,\n * result value used to determine whether to hide component or re-position to default state\n *\n * @param afterMoveYCoordinate\n */\n function calculateOffsetAfterMove(afterMoveYCoordinate: number): number {\n return afterMoveYCoordinate - initialYCoordinate.current;\n }\n\n /**\n * Set `max-height` for content part (in order to keep it scrollable for content overflow cases) of the component\n * and ensures space for safe zone (32px) at the top.\n */\n function setContentMaxHeight(): CSSProperties {\n const safeZoneHeight = '64px';\n const topbarHeight = '32px';\n const windowHight: number = isServerSide() ? 0 : window.innerHeight;\n /**\n * Calculate _real_ height of the screen (taking into account parts of browser interface).\n *\n * See https://css-tricks.com/the-trick-to-viewport-units-on-mobile for more details.\n */\n const screenHeight = `${windowHight * 0.01 * 100}px`;\n return {\n maxHeight: `calc(${screenHeight} - ${safeZoneHeight} - ${topbarHeight})`,\n };\n }\n\n const is400Zoom = useMedia(`(max-width: ${Breakpoint.EXTRA_SMALL}px)`);\n\n const overlayId = useContext(OverlayIdContext);\n\n return is400Zoom ? (\n <Drawer\n aria-labelledby={props['aria-labelledby']}\n aria-label={props['aria-label']}\n role={role}\n open={props.open}\n className={props.className}\n onClose={close}\n >\n {props.children}\n </Drawer>\n ) : (\n <Dimmer open={props.open} fadeContentOnEnter fadeContentOnExit onClose={close}>\n <SlidingPanel\n ref={bottomSheetReference}\n open={props.open}\n position={Position.BOTTOM}\n className={clsx('np-bottom-sheet', props.className)}\n >\n <div\n id={overlayId}\n aria-labelledby={props['aria-labelledby'] || undefined}\n aria-label={props['aria-label'] || undefined}\n role={role}\n aria-modal\n onTouchStart={onSwipeStart}\n onTouchMove={onSwipeMove}\n onTouchEnd={onSwipeEnd}\n onMouseDown={onSwipeStart}\n onMouseMove={onSwipeMove}\n onMouseUp={onSwipeEnd}\n >\n <div ref={topBarReference} className=\"np-bottom-sheet--top-bar\">\n <div className=\"np-bottom-sheet--handler\" />\n <CloseButton size=\"sm\" className=\"sr-only np-bottom-sheet--close-btn\" onClick={close} />\n </div>\n <div\n ref={contentReference}\n style={setContentMaxHeight()}\n className=\"np-bottom-sheet--content\"\n >\n {props.children}\n </div>\n </div>\n </SlidingPanel>\n </Dimmer>\n );\n};\n\nexport default BottomSheet;\n"],"names":["INITIAL_Y_POSITION","CONTENT_SCROLL_THRESHOLD","MOVE_OFFSET_THRESHOLD","BottomSheet","role","props","bottomSheetReference","useRef","topBarReference","contentReference","pressed","setPressed","useState","animationId","moveOffset","initialYCoordinate","useConditionalListener","attachListener","open","isServerSide","callback","current","classList","isContentScrollPositionAtTop","add","remove","eventType","parent","undefined","document","move","newHeight","style","transform","close","event","removeProperty","onClose","onSwipeStart","touches","clientY","onSwipeMove","offset","calculateOffsetAfterMove","requestAnimationFrame","onSwipeEnd","cancelAnimationFrame","scrollTop","afterMoveYCoordinate","setContentMaxHeight","safeZoneHeight","topbarHeight","windowHight","window","innerHeight","screenHeight","maxHeight","is400Zoom","useMedia","Breakpoint","EXTRA_SMALL","overlayId","useContext","OverlayIdContext","_jsx","Drawer","className","children","Dimmer","fadeContentOnEnter","fadeContentOnExit","SlidingPanel","ref","position","Position","BOTTOM","clsx","_jsxs","id","onTouchStart","onTouchMove","onTouchEnd","onMouseDown","onMouseMove","onMouseUp","CloseButton","size","onClick"],"mappings":"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"}
@@ -38,6 +38,7 @@
38
38
  "neptune.PhoneNumberInput.phoneNumberPrefix": "Prefix",
39
39
  "neptune.Select.searchPlaceholder": "Search...",
40
40
  "neptune.SelectInput.noResultsFound": "No results found",
41
+ "neptune.Snackbar.escapeDismissHint": "Press Escape to dismiss.",
41
42
  "neptune.StatusIcon.iconLabel.error": "Error:",
42
43
  "neptune.StatusIcon.iconLabel.information": "Information:",
43
44
  "neptune.StatusIcon.iconLabel.pending": "Pending:",
@@ -42,6 +42,7 @@ var en = {
42
42
  "neptune.PhoneNumberInput.phoneNumberPrefix": "Prefix",
43
43
  "neptune.Select.searchPlaceholder": "Search...",
44
44
  "neptune.SelectInput.noResultsFound": "No results found",
45
+ "neptune.Snackbar.escapeDismissHint": "Press Escape to dismiss.",
45
46
  "neptune.StatusIcon.iconLabel.error": "Error:",
46
47
  "neptune.StatusIcon.iconLabel.information": "Information:",
47
48
  "neptune.StatusIcon.iconLabel.pending": "Pending:",
@@ -1 +1 @@
1
- {"version":3,"file":"en.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"en.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -38,6 +38,7 @@ var en = {
38
38
  "neptune.PhoneNumberInput.phoneNumberPrefix": "Prefix",
39
39
  "neptune.Select.searchPlaceholder": "Search...",
40
40
  "neptune.SelectInput.noResultsFound": "No results found",
41
+ "neptune.Snackbar.escapeDismissHint": "Press Escape to dismiss.",
41
42
  "neptune.StatusIcon.iconLabel.error": "Error:",
42
43
  "neptune.StatusIcon.iconLabel.information": "Information:",
43
44
  "neptune.StatusIcon.iconLabel.pending": "Pending:",
@@ -1 +1 @@
1
- {"version":3,"file":"en.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"en.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/build/index.js CHANGED
@@ -105,8 +105,8 @@ var SegmentedControl = require('./SegmentedControl/SegmentedControl.js');
105
105
  var Select = require('./_deprecated/Select/Select.js');
106
106
  var SentimentSurface = require('./SentimentSurface/SentimentSurface.js');
107
107
  var SlidingPanel = require('./SlidingPanel/SlidingPanel.js');
108
- var SnackbarContext = require('./Snackbar/SnackbarContext.js');
109
- var SnackbarProvider = require('./Snackbar/SnackbarProvider.js');
108
+ var SnackbarContext = require('./Prompt/Snackbar/SnackbarContext.js');
109
+ var SnackbarProvider = require('./Prompt/Snackbar/SnackbarProvider.js');
110
110
  var StatusIcon = require('./StatusIcon/StatusIcon.js');
111
111
  var Stepper = require('./Stepper/Stepper.js');
112
112
  var Sticky = require('./Sticky/Sticky.js');
@@ -129,7 +129,7 @@ require('@transferwise/neptune-validation');
129
129
  var useDirection = require('./common/hooks/useDirection/useDirection.js');
130
130
  var useLayout = require('./common/hooks/useLayout/useLayout.js');
131
131
  var useScreenSize = require('./common/hooks/useScreenSize.js');
132
- var useSnackbar = require('./Snackbar/useSnackbar.js');
132
+ var useSnackbar = require('./Prompt/Snackbar/useSnackbar.js');
133
133
  var neptuneTokens = require('@transferwise/neptune-tokens');
134
134
  var documentIosClick = require('./common/DomHelpers/documentIosClick.js');
135
135
  var theme = require('./common/theme.js');
package/build/index.mjs CHANGED
@@ -103,8 +103,8 @@ export { default as SegmentedControl } from './SegmentedControl/SegmentedControl
103
103
  export { default as Select } from './_deprecated/Select/Select.mjs';
104
104
  export { default as SentimentSurface } from './SentimentSurface/SentimentSurface.mjs';
105
105
  export { default as SlidingPanel } from './SlidingPanel/SlidingPanel.mjs';
106
- export { SnackbarConsumer, SnackbarContext } from './Snackbar/SnackbarContext.mjs';
107
- export { default as SnackbarProvider } from './Snackbar/SnackbarProvider.mjs';
106
+ export { SnackbarConsumer, SnackbarContext } from './Prompt/Snackbar/SnackbarContext.mjs';
107
+ export { default as SnackbarProvider } from './Prompt/Snackbar/SnackbarProvider.mjs';
108
108
  export { default as StatusIcon } from './StatusIcon/StatusIcon.mjs';
109
109
  export { default as Stepper } from './Stepper/Stepper.mjs';
110
110
  export { default as Sticky } from './Sticky/Sticky.mjs';
@@ -127,7 +127,7 @@ import '@transferwise/neptune-validation';
127
127
  export { useDirection } from './common/hooks/useDirection/useDirection.mjs';
128
128
  export { useLayout } from './common/hooks/useLayout/useLayout.mjs';
129
129
  export { useScreenSize } from './common/hooks/useScreenSize.mjs';
130
- export { default as useSnackbar } from './Snackbar/useSnackbar.mjs';
130
+ export { default as useSnackbar } from './Prompt/Snackbar/useSnackbar.mjs';
131
131
  export { Breakpoint } from '@transferwise/neptune-tokens';
132
132
  export { isBrowser, isServerSide } from './common/DomHelpers/documentIosClick.mjs';
133
133
  export { Theme } from './common/theme.mjs';
package/build/main.css CHANGED
@@ -26948,15 +26948,14 @@ a[data-toggle="tooltip"] {
26948
26948
  color: var(--color-white);
26949
26949
  }
26950
26950
  .np-icon-button-minimal-default {
26951
- color: var(--color-interactive-primary);
26952
- background-color: var(--color-background-screen);
26951
+ color: var(--color-sentiment-content-primary, var(--color-interactive-primary));
26953
26952
  background-color: transparent;
26954
26953
  }
26955
26954
  .np-icon-button-minimal-default:not(.disabled):not(:disabled):hover {
26956
- background-color: var(--color-background-screen-hover);
26955
+ background-color: var(--color-sentiment-interactive-secondary-neutral-hover, var(--color-background-screen-hover));
26957
26956
  }
26958
26957
  .np-icon-button-minimal-default:not(.disabled):not(:disabled):active {
26959
- background-color: var(--color-background-screen-active);
26958
+ background-color: var(--color-sentiment-interactive-secondary-neutral-active, var(--color-background-screen-active));
26960
26959
  }
26961
26960
  .np-icon-button-secondary-default {
26962
26961
  color: var(--color-sentiment-content-primary, var(--color-interactive-primary));
@@ -31414,6 +31413,140 @@ button.np-link {
31414
31413
  overflow: visible;
31415
31414
  }
31416
31415
  }
31416
+ .wds-Snackbar {
31417
+ display: flex;
31418
+ justify-content: center;
31419
+ box-sizing: border-box;
31420
+ padding-inline: var(--size-16);
31421
+ padding-block-end: calc(var(--size-16) + env(safe-area-inset-bottom));
31422
+ position: fixed;
31423
+ inset-block-end: 0;
31424
+ inset-inline: 0;
31425
+ z-index: 1060;
31426
+ }
31427
+ @media (min-width: 600px) {
31428
+ .wds-Snackbar {
31429
+ padding-block-end: var(--size-24);
31430
+ }
31431
+ }
31432
+ .wds-Snackbar--swipe-dismiss {
31433
+ transition: transform var(--Snackbar-exit-duration) cubic-bezier(1, 0, 1, 1);
31434
+ }
31435
+ .wds-Snackbar--swipe-settle {
31436
+ transition: transform var(--Snackbar-exit-duration) cubic-bezier(0, 0, 0, 1);
31437
+ }
31438
+ .wds-Snackbar-container {
31439
+ --Prompt-border-radius: var(--radius-medium);
31440
+ --Prompt-gap: var(--size-8);
31441
+ --Prompt-padding-x: var(--size-12);
31442
+ --Prompt-padding-y: var(--size-12);
31443
+ box-sizing: border-box;
31444
+ max-inline-size: 480px;
31445
+ text-align: start;
31446
+ cursor: grab;
31447
+ touch-action: pan-x pinch-zoom;
31448
+ }
31449
+ .wds-Snackbar-container .wds-prompt__content-wrapper--with-dismiss {
31450
+ grid-template-columns: auto minmax(0, 1fr);
31451
+ }
31452
+ @media (min-width: 600px) {
31453
+ .wds-Snackbar-container .wds-prompt__content-wrapper--with-dismiss {
31454
+ grid-template-columns: auto minmax(0, 1fr) auto;
31455
+ }
31456
+ }
31457
+ .wds-Snackbar-container .wds-prompt__media-wrapper {
31458
+ display: flex;
31459
+ align-items: center;
31460
+ min-block-size: max(var(--size-32), 1lh);
31461
+ padding-block-start: 0;
31462
+ color: var(--color-sentiment-content-primary);
31463
+ }
31464
+ .wds-Snackbar-container .wds-prompt__media-wrapper:has(+ .wds-Snackbar__content .wds-Snackbar__action) {
31465
+ min-block-size: max(var(--size-32), calc(1lh + var(--size-5) * 2));
31466
+ }
31467
+ .wds-Snackbar__media-asset {
31468
+ display: flex;
31469
+ }
31470
+ .wds-Snackbar__media-asset svg {
31471
+ inline-size: var(--size-24);
31472
+ block-size: var(--size-24);
31473
+ }
31474
+ .wds-Snackbar__process-indicator .process-circle {
31475
+ stroke: currentColor;
31476
+ }
31477
+ .wds-Snackbar-container .wds-prompt__dismiss {
31478
+ display: none;
31479
+ align-self: flex-start;
31480
+ margin-block-start: calc(var(--size-4) - 1px);
31481
+ }
31482
+ @media (min-width: 600px) {
31483
+ .wds-Snackbar-container .wds-prompt__dismiss {
31484
+ display: flex;
31485
+ }
31486
+ }
31487
+ .wds-Snackbar__action {
31488
+ flex-shrink: 0;
31489
+ }
31490
+ .wds-Snackbar__content {
31491
+ display: flex;
31492
+ align-items: flex-start;
31493
+ gap: var(--size-8);
31494
+ flex: 1 0 0;
31495
+ min-block-size: var(--size-32);
31496
+ min-inline-size: 0;
31497
+ }
31498
+ .wds-Snackbar__message {
31499
+ display: flex;
31500
+ flex-direction: column;
31501
+ justify-content: center;
31502
+ inline-size: auto;
31503
+ flex: 1 0 0;
31504
+ min-inline-size: 0;
31505
+ align-self: stretch;
31506
+ }
31507
+ .wds-Snackbar__body {
31508
+ display: block;
31509
+ }
31510
+ .wds-Snackbar-container-appear,
31511
+ .wds-Snackbar-container-enter {
31512
+ opacity: 0;
31513
+ transform: translateY(80px) scale(0.5);
31514
+ }
31515
+ .wds-Snackbar-container-appear-active,
31516
+ .wds-Snackbar-container-enter-active {
31517
+ opacity: 1;
31518
+ transform: translateY(0) scale(1);
31519
+ transition: opacity 150ms linear, transform var(--Snackbar-enter-duration) cubic-bezier(0, 0, 0, 1);
31520
+ }
31521
+ .wds-Snackbar-container-exit {
31522
+ opacity: 1;
31523
+ transform: translateY(0) scale(1);
31524
+ }
31525
+ .wds-Snackbar-container-exit-active {
31526
+ opacity: 0;
31527
+ transform: translateY(80px) scale(0.5);
31528
+ transition: opacity 50ms linear 50ms, transform var(--Snackbar-exit-duration) cubic-bezier(1, 0, 1, 1);
31529
+ }
31530
+ @media (prefers-reduced-motion: reduce) {
31531
+ .wds-Snackbar--swipe-dismiss,
31532
+ .wds-Snackbar--swipe-settle {
31533
+ transition: none;
31534
+ }
31535
+ .wds-Snackbar-container-appear,
31536
+ .wds-Snackbar-container-appear-active,
31537
+ .wds-Snackbar-container-enter,
31538
+ .wds-Snackbar-container-enter-active,
31539
+ .wds-Snackbar-container-exit {
31540
+ opacity: 1;
31541
+ transform: none;
31542
+ transition: none;
31543
+ }
31544
+ .wds-Snackbar-container-exit-active {
31545
+ opacity: 0;
31546
+ transform: none;
31547
+ transition: none;
31548
+ }
31549
+ }
31417
31550
  .wds-expander-toggle {
31418
31551
  align-self: flex-start;
31419
31552
  flex-shrink: 0;
@@ -31516,77 +31649,6 @@ button.np-link {
31516
31649
  [dir="rtl"] .np-theme-personal .sliding-panel.sliding-panel--border-left {
31517
31650
  box-shadow: inset 1px 0 0 0 var(--color-border-neutral);
31518
31651
  }
31519
- .snackbar {
31520
- text-align: center;
31521
- position: fixed;
31522
- inset-block-end: 0;
31523
- inset-inline-start: 0;
31524
- inset-inline-end: 0;
31525
- z-index: 1060;
31526
- }
31527
- .snackbar__text {
31528
- background: #37517e;
31529
- color: #ffffff;
31530
- display: inline-flex;
31531
- border-radius: 2px;
31532
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.25);
31533
- align-items: center;
31534
- justify-content: space-between;
31535
- text-align: start;
31536
- font-size: var(--wds-font-size-body);
31537
- margin-block: 0;
31538
- margin-inline: var(--size-16);
31539
- padding-block: var(--size-8);
31540
- padding-inline: var(--size-16);
31541
- inline-size: calc(100% - var(--size-32));
31542
- transition: 400ms cubic-bezier(0.215, 0.61, 0.355, 1);
31543
- }
31544
- .np-theme-personal .snackbar__text {
31545
- box-shadow: 0 2px 4px 0 rgba(69, 71, 69, 0.35);
31546
- position: relative;
31547
- background: var(--color-contrast-theme);
31548
- border-radius: var(--radius-small);
31549
- color: var(--color-contrast-overlay);
31550
- }
31551
- .np-theme-personal .snackbar__text::after {
31552
- display: block;
31553
- border-radius: inherit;
31554
- block-size: 100%;
31555
- inline-size: 100%;
31556
- content: "";
31557
- position: absolute;
31558
- inset-inline-start: 0;
31559
- inset-block-start: 0;
31560
- z-index: -1;
31561
- background-color: var(--color-background-neutral);
31562
- }
31563
- .np-theme-personal--dark .snackbar__text,
31564
- .np-theme-personal--forest-green .snackbar__text {
31565
- box-shadow: none;
31566
- }
31567
- @media (min-width: 600px) {
31568
- .snackbar__text {
31569
- inline-size: auto;
31570
- max-inline-size: 600px;
31571
- }
31572
- }
31573
- .snackbar__text__action {
31574
- flex-shrink: 0;
31575
- margin-inline-start: var(--size-16);
31576
- }
31577
- .snackbar__text-container-enter,
31578
- .snackbar__text-container-exit {
31579
- transform: translateY(calc(100% + 10px));
31580
- }
31581
- .snackbar__text-container-enter-active {
31582
- transform: translateY(-16px);
31583
- transform: translateY(calc(-16px - env(safe-area-inset-bottom)));
31584
- }
31585
- @media (min-width: 600px) {
31586
- .snackbar__text-container-enter-active {
31587
- transform: translateY(-24px);
31588
- }
31589
- }
31590
31652
  .status-circle.negative,
31591
31653
  .status-circle.error {
31592
31654
  background-color: var(--color-sentiment-interactive-primary, var(--color-sentiment-negative));
@@ -35,15 +35,14 @@
35
35
  color: var(--color-white);
36
36
  }
37
37
  .np-icon-button-minimal-default {
38
- color: var(--color-interactive-primary);
39
- background-color: var(--color-background-screen);
38
+ color: var(--color-sentiment-content-primary, var(--color-interactive-primary));
40
39
  background-color: transparent;
41
40
  }
42
41
  .np-icon-button-minimal-default:not(.disabled):not(:disabled):hover {
43
- background-color: var(--color-background-screen-hover);
42
+ background-color: var(--color-sentiment-interactive-secondary-neutral-hover, var(--color-background-screen-hover));
44
43
  }
45
44
  .np-icon-button-minimal-default:not(.disabled):not(:disabled):active {
46
- background-color: var(--color-background-screen-active);
45
+ background-color: var(--color-sentiment-interactive-secondary-neutral-active, var(--color-background-screen-active));
47
46
  }
48
47
  .np-icon-button-secondary-default {
49
48
  color: var(--color-sentiment-content-primary, var(--color-interactive-primary));
@@ -0,0 +1,134 @@
1
+ .wds-Snackbar {
2
+ display: flex;
3
+ justify-content: center;
4
+ box-sizing: border-box;
5
+ padding-inline: var(--size-16);
6
+ padding-block-end: calc(var(--size-16) + env(safe-area-inset-bottom));
7
+ position: fixed;
8
+ inset-block-end: 0;
9
+ inset-inline: 0;
10
+ z-index: 1060;
11
+ }
12
+ @media (min-width: 600px) {
13
+ .wds-Snackbar {
14
+ padding-block-end: var(--size-24);
15
+ }
16
+ }
17
+ .wds-Snackbar--swipe-dismiss {
18
+ transition: transform var(--Snackbar-exit-duration) cubic-bezier(1, 0, 1, 1);
19
+ }
20
+ .wds-Snackbar--swipe-settle {
21
+ transition: transform var(--Snackbar-exit-duration) cubic-bezier(0, 0, 0, 1);
22
+ }
23
+ .wds-Snackbar-container {
24
+ --Prompt-border-radius: var(--radius-medium);
25
+ --Prompt-gap: var(--size-8);
26
+ --Prompt-padding-x: var(--size-12);
27
+ --Prompt-padding-y: var(--size-12);
28
+ box-sizing: border-box;
29
+ max-inline-size: 480px;
30
+ text-align: start;
31
+ cursor: grab;
32
+ touch-action: pan-x pinch-zoom;
33
+ }
34
+ .wds-Snackbar-container .wds-prompt__content-wrapper--with-dismiss {
35
+ grid-template-columns: auto minmax(0, 1fr);
36
+ }
37
+ @media (min-width: 600px) {
38
+ .wds-Snackbar-container .wds-prompt__content-wrapper--with-dismiss {
39
+ grid-template-columns: auto minmax(0, 1fr) auto;
40
+ }
41
+ }
42
+ .wds-Snackbar-container .wds-prompt__media-wrapper {
43
+ display: flex;
44
+ align-items: center;
45
+ min-block-size: max(var(--size-32), 1lh);
46
+ padding-block-start: 0;
47
+ color: var(--color-sentiment-content-primary);
48
+ }
49
+ .wds-Snackbar-container .wds-prompt__media-wrapper:has(+ .wds-Snackbar__content .wds-Snackbar__action) {
50
+ min-block-size: max(var(--size-32), calc(1lh + var(--size-5) * 2));
51
+ }
52
+ .wds-Snackbar__media-asset {
53
+ display: flex;
54
+ }
55
+ .wds-Snackbar__media-asset svg {
56
+ inline-size: var(--size-24);
57
+ block-size: var(--size-24);
58
+ }
59
+ .wds-Snackbar__process-indicator .process-circle {
60
+ stroke: currentColor;
61
+ }
62
+ .wds-Snackbar-container .wds-prompt__dismiss {
63
+ display: none;
64
+ align-self: flex-start;
65
+ margin-block-start: calc(var(--size-4) - 1px);
66
+ }
67
+ @media (min-width: 600px) {
68
+ .wds-Snackbar-container .wds-prompt__dismiss {
69
+ display: flex;
70
+ }
71
+ }
72
+ .wds-Snackbar__action {
73
+ flex-shrink: 0;
74
+ }
75
+ .wds-Snackbar__content {
76
+ display: flex;
77
+ align-items: flex-start;
78
+ gap: var(--size-8);
79
+ flex: 1 0 0;
80
+ min-block-size: var(--size-32);
81
+ min-inline-size: 0;
82
+ }
83
+ .wds-Snackbar__message {
84
+ display: flex;
85
+ flex-direction: column;
86
+ justify-content: center;
87
+ inline-size: auto;
88
+ flex: 1 0 0;
89
+ min-inline-size: 0;
90
+ align-self: stretch;
91
+ }
92
+ .wds-Snackbar__body {
93
+ display: block;
94
+ }
95
+ .wds-Snackbar-container-appear,
96
+ .wds-Snackbar-container-enter {
97
+ opacity: 0;
98
+ transform: translateY(80px) scale(0.5);
99
+ }
100
+ .wds-Snackbar-container-appear-active,
101
+ .wds-Snackbar-container-enter-active {
102
+ opacity: 1;
103
+ transform: translateY(0) scale(1);
104
+ transition: opacity 150ms linear, transform var(--Snackbar-enter-duration) cubic-bezier(0, 0, 0, 1);
105
+ }
106
+ .wds-Snackbar-container-exit {
107
+ opacity: 1;
108
+ transform: translateY(0) scale(1);
109
+ }
110
+ .wds-Snackbar-container-exit-active {
111
+ opacity: 0;
112
+ transform: translateY(80px) scale(0.5);
113
+ transition: opacity 50ms linear 50ms, transform var(--Snackbar-exit-duration) cubic-bezier(1, 0, 1, 1);
114
+ }
115
+ @media (prefers-reduced-motion: reduce) {
116
+ .wds-Snackbar--swipe-dismiss,
117
+ .wds-Snackbar--swipe-settle {
118
+ transition: none;
119
+ }
120
+ .wds-Snackbar-container-appear,
121
+ .wds-Snackbar-container-appear-active,
122
+ .wds-Snackbar-container-enter,
123
+ .wds-Snackbar-container-enter-active,
124
+ .wds-Snackbar-container-exit {
125
+ opacity: 1;
126
+ transform: none;
127
+ transition: none;
128
+ }
129
+ .wds-Snackbar-container-exit-active {
130
+ opacity: 0;
131
+ transform: none;
132
+ transition: none;
133
+ }
134
+ }