@transferwise/components 0.0.0-experimental-4b93e2b → 0.0.0-experimental-f144cf1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/Calendar/DateHeader/DateHeader.js +6 -2
- package/build/Calendar/DateHeader/DateHeader.js.map +1 -1
- package/build/Calendar/DateHeader/DateHeader.mjs +7 -3
- package/build/Calendar/DateHeader/DateHeader.mjs.map +1 -1
- package/build/Carousel/Carousel.js +2 -2
- package/build/Carousel/Carousel.js.map +1 -1
- package/build/Carousel/Carousel.mjs +3 -3
- package/build/Carousel/Carousel.mjs.map +1 -1
- package/build/Inputs/SelectInput/OptionContent/SelectInputOptionContent.js +3 -4
- package/build/Inputs/SelectInput/OptionContent/SelectInputOptionContent.js.map +1 -1
- package/build/Inputs/SelectInput/OptionContent/SelectInputOptionContent.mjs +3 -4
- package/build/Inputs/SelectInput/OptionContent/SelectInputOptionContent.mjs.map +1 -1
- package/build/ListItem/Navigation/ListItemNavigation.js +1 -1
- package/build/ListItem/Navigation/ListItemNavigation.js.map +1 -1
- package/build/ListItem/Navigation/ListItemNavigation.mjs +2 -2
- package/build/ListItem/Navigation/ListItemNavigation.mjs.map +1 -1
- package/build/PhoneNumberInput/PhoneNumberInput.js +1 -2
- package/build/PhoneNumberInput/PhoneNumberInput.js.map +1 -1
- package/build/PhoneNumberInput/PhoneNumberInput.mjs +1 -2
- package/build/PhoneNumberInput/PhoneNumberInput.mjs.map +1 -1
- package/build/PromoCard/Indicator/PromoCardIndicator.js +1 -1
- package/build/PromoCard/Indicator/PromoCardIndicator.js.map +1 -1
- package/build/PromoCard/Indicator/PromoCardIndicator.mjs +2 -2
- package/build/PromoCard/Indicator/PromoCardIndicator.mjs.map +1 -1
- package/build/Snackbar/Snackbar.js +212 -108
- package/build/Snackbar/Snackbar.js.map +1 -1
- package/build/Snackbar/Snackbar.messages.js +14 -0
- package/build/Snackbar/Snackbar.messages.js.map +1 -0
- package/build/Snackbar/Snackbar.messages.mjs +10 -0
- package/build/Snackbar/Snackbar.messages.mjs.map +1 -0
- package/build/Snackbar/Snackbar.mjs +213 -107
- package/build/Snackbar/Snackbar.mjs.map +1 -1
- package/build/Snackbar/SnackbarContext.js.map +1 -1
- package/build/Snackbar/SnackbarContext.mjs.map +1 -1
- package/build/Snackbar/SnackbarPortal.js +92 -0
- package/build/Snackbar/SnackbarPortal.js.map +1 -0
- package/build/Snackbar/SnackbarPortal.mjs +89 -0
- package/build/Snackbar/SnackbarPortal.mjs.map +1 -0
- package/build/Snackbar/SnackbarProvider.js +21 -31
- package/build/Snackbar/SnackbarProvider.js.map +1 -1
- package/build/Snackbar/SnackbarProvider.mjs +22 -32
- package/build/Snackbar/SnackbarProvider.mjs.map +1 -1
- package/build/Snackbar/constants.js +14 -0
- package/build/Snackbar/constants.js.map +1 -0
- package/build/Snackbar/constants.mjs +8 -0
- package/build/Snackbar/constants.mjs.map +1 -0
- package/build/Snackbar/useSnackbarAutoDismiss.js +135 -0
- package/build/Snackbar/useSnackbarAutoDismiss.js.map +1 -0
- package/build/Snackbar/useSnackbarAutoDismiss.mjs +131 -0
- package/build/Snackbar/useSnackbarAutoDismiss.mjs.map +1 -0
- package/build/Snackbar/useSnackbarManager.js +164 -0
- package/build/Snackbar/useSnackbarManager.js.map +1 -0
- package/build/Snackbar/useSnackbarManager.mjs +160 -0
- package/build/Snackbar/useSnackbarManager.mjs.map +1 -0
- package/build/Snackbar/useSnackbarSwipeDismiss.js +114 -0
- package/build/Snackbar/useSnackbarSwipeDismiss.js.map +1 -0
- package/build/Snackbar/useSnackbarSwipeDismiss.mjs +110 -0
- package/build/Snackbar/useSnackbarSwipeDismiss.mjs.map +1 -0
- package/build/common/PropsValues/typography.js +0 -6
- package/build/common/PropsValues/typography.js.map +1 -1
- package/build/common/PropsValues/typography.mjs +0 -6
- package/build/common/PropsValues/typography.mjs.map +1 -1
- package/build/i18n/en.json +1 -0
- package/build/i18n/en.json.js +1 -0
- package/build/i18n/en.json.js.map +1 -1
- package/build/i18n/en.json.mjs +1 -0
- package/build/i18n/en.json.mjs.map +1 -1
- package/build/index.js +3 -1
- package/build/index.js.map +1 -1
- package/build/index.mjs +2 -1
- package/build/index.mjs.map +1 -1
- package/build/main.css +864 -1509
- package/build/styles/Button/Button.css +3 -0
- package/build/styles/DateInput/DateInput.css +0 -13
- package/build/styles/Inputs/Input/Input.css +24 -0
- package/build/styles/Inputs/TextArea/TextArea.css +24 -0
- package/build/styles/ListItem/ListItem.css +1 -1
- package/build/styles/PhoneNumberInput/PhoneNumberInput.css +0 -3
- package/build/styles/Popover/Popover.css +6 -0
- package/build/styles/PromoCard/PromoCard.css +3 -0
- package/build/styles/Snackbar/Snackbar.css +182 -61
- package/build/styles/_deprecated/Select/Select.css +6 -0
- package/build/styles/css/accordion.css +12 -0
- package/build/styles/css/button-groups.css +6 -0
- package/build/styles/css/buttons.css +2 -0
- package/build/styles/css/decision.css +12 -0
- package/build/styles/css/dropdowns.css +18 -2
- package/build/styles/css/droppable.css +6 -0
- package/build/styles/css/footer.css +12 -0
- package/build/styles/css/input-groups.css +42 -2
- package/build/styles/css/list-group.css +6 -0
- package/build/styles/css/navbar.css +18 -2
- package/build/styles/css/neptune-core.css +512 -4
- package/build/styles/css/neptune.css +640 -1426
- package/build/styles/css/popovers.css +18 -0
- package/build/styles/css/tooltip.css +6 -0
- package/build/styles/less/neptune-tokens.less +0 -8
- package/build/styles/main.css +864 -1509
- package/build/styles/props/neptune-tokens.css +0 -8
- package/build/styles/styles/less/accordion.css +12 -0
- package/build/styles/styles/less/button-groups.css +6 -0
- package/build/styles/styles/less/buttons.css +2 -0
- package/build/styles/styles/less/decision.css +12 -0
- package/build/styles/styles/less/dropdowns.css +18 -2
- package/build/styles/styles/less/droppable.css +6 -0
- package/build/styles/styles/less/footer.css +12 -0
- package/build/styles/styles/less/forms/bootstrap-forms.css +24 -2
- package/build/styles/styles/less/input-groups.css +42 -2
- package/build/styles/styles/less/list-group.css +6 -0
- package/build/styles/styles/less/navbar.css +18 -2
- package/build/styles/styles/less/neptune-core.css +512 -4
- package/build/styles/styles/less/neptune.css +640 -1426
- package/build/styles/styles/less/popovers.css +18 -0
- package/build/styles/styles/less/tooltip.css +6 -0
- package/build/types/Inputs/SelectInput/OptionContent/SelectInputOptionContent.d.ts +1 -2
- package/build/types/Inputs/SelectInput/OptionContent/SelectInputOptionContent.d.ts.map +1 -1
- package/build/types/PhoneNumberInput/PhoneNumberInput.d.ts.map +1 -1
- package/build/types/Snackbar/Snackbar.d.ts +41 -24
- package/build/types/Snackbar/Snackbar.d.ts.map +1 -1
- package/build/types/Snackbar/Snackbar.messages.d.ts +9 -0
- package/build/types/Snackbar/Snackbar.messages.d.ts.map +1 -0
- package/build/types/Snackbar/Snackbar.types.d.ts +21 -0
- package/build/types/Snackbar/Snackbar.types.d.ts.map +1 -0
- package/build/types/Snackbar/SnackbarContext.d.ts +2 -2
- package/build/types/Snackbar/SnackbarContext.d.ts.map +1 -1
- package/build/types/Snackbar/SnackbarPortal.d.ts +5 -0
- package/build/types/Snackbar/SnackbarPortal.d.ts.map +1 -0
- package/build/types/Snackbar/SnackbarProvider.d.ts +6 -0
- package/build/types/Snackbar/SnackbarProvider.d.ts.map +1 -1
- package/build/types/Snackbar/constants.d.ts +6 -0
- package/build/types/Snackbar/constants.d.ts.map +1 -0
- package/build/types/Snackbar/index.d.ts +3 -1
- package/build/types/Snackbar/index.d.ts.map +1 -1
- package/build/types/Snackbar/useSnackbar.d.ts +1 -1
- package/build/types/Snackbar/useSnackbar.d.ts.map +1 -1
- package/build/types/Snackbar/useSnackbarAutoDismiss.d.ts +18 -0
- package/build/types/Snackbar/useSnackbarAutoDismiss.d.ts.map +1 -0
- package/build/types/Snackbar/useSnackbarManager.d.ts +17 -0
- package/build/types/Snackbar/useSnackbarManager.d.ts.map +1 -0
- package/build/types/Snackbar/useSnackbarSwipeDismiss.d.ts +11 -0
- package/build/types/Snackbar/useSnackbarSwipeDismiss.d.ts.map +1 -0
- package/build/types/common/PropsValues/typography.d.ts +1 -13
- package/build/types/common/PropsValues/typography.d.ts.map +1 -1
- package/build/types/index.d.ts +2 -2
- package/build/types/index.d.ts.map +1 -1
- package/build/types/test-utils/index.d.ts +2 -0
- package/build/types/test-utils/index.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/Button/Button.css +3 -0
- package/src/Button/Button.less +16 -0
- package/src/Button/_stories/Button.test.story.tsx +12 -12
- package/src/Calendar/DateHeader/DateHeader.tsx +3 -3
- package/src/Carousel/Carousel.tsx +3 -3
- package/src/DateInput/DateInput.css +0 -13
- package/src/DateInput/DateInput.less +2 -10
- package/src/DateInput/_stories/DateInput.test.story.tsx +13 -0
- package/src/Display/_stories/Display.story.tsx +6 -20
- package/src/ExpressiveMoneyInput/_stories/ExpressiveMoneyInput.rtl.test.story.tsx +1 -1
- package/src/InputWithDisplayFormat/_stories/InputWithDisplayFormat.test.story.tsx +0 -52
- package/src/Inputs/Input/Input.css +24 -0
- package/src/Inputs/SelectInput/OptionContent/SelectInputOptionContent.tsx +1 -4
- package/src/Inputs/SelectInput/SelectInput.test.tsx +0 -74
- package/src/Inputs/TextArea/TextArea.css +24 -0
- package/src/ListItem/ListItem.css +1 -1
- package/src/ListItem/ListItem.grid.less +4 -4
- package/src/ListItem/ListItem.less +1 -1
- package/src/ListItem/Navigation/ListItemNavigation.tsx +2 -2
- package/src/PhoneNumberInput/PhoneNumberInput.css +0 -3
- package/src/PhoneNumberInput/PhoneNumberInput.less +2 -10
- package/src/PhoneNumberInput/PhoneNumberInput.tsx +0 -1
- package/src/PhoneNumberInput/_stories/PhoneNumberInput.rtl.test.story.tsx +1 -1
- package/src/Popover/Popover.css +6 -0
- package/src/PromoCard/Indicator/PromoCardIndicator.tsx +2 -2
- package/src/PromoCard/PromoCard.css +3 -0
- package/src/PromoCard/PromoCard.less +5 -0
- package/src/Prompt/CriticalBanner/_stories/CriticalBanner.test.story.tsx +1 -1
- package/src/Snackbar/Snackbar.css +182 -61
- package/src/Snackbar/Snackbar.less +185 -56
- package/src/Snackbar/Snackbar.messages.ts +9 -0
- package/src/Snackbar/Snackbar.test.tsx +697 -0
- package/src/Snackbar/Snackbar.tsx +227 -96
- package/src/Snackbar/Snackbar.types.ts +26 -0
- package/src/Snackbar/SnackbarContext.ts +2 -2
- package/src/Snackbar/SnackbarPortal.tsx +110 -0
- package/src/Snackbar/SnackbarProvider.test.tsx +202 -0
- package/src/Snackbar/SnackbarProvider.tsx +25 -25
- package/src/Snackbar/_stories/Snackbar.accessibility.docs.mdx +73 -0
- package/src/Snackbar/_stories/Snackbar.rtl.test.story.tsx +1 -12
- package/src/Snackbar/_stories/Snackbar.story.tsx +447 -62
- package/src/Snackbar/_stories/Snackbar.test.story.tsx +91 -16
- package/src/Snackbar/constants.ts +5 -0
- package/src/Snackbar/index.ts +3 -1
- package/src/Snackbar/useSnackbarAutoDismiss.ts +155 -0
- package/src/Snackbar/useSnackbarManager.ts +181 -0
- package/src/Snackbar/useSnackbarSwipeDismiss.ts +129 -0
- package/src/_deprecated/Select/Select.css +6 -0
- package/src/common/PropsValues/typography.ts +1 -20
- package/src/i18n/en.json +1 -1
- package/src/index.ts +7 -2
- package/src/main.css +864 -1509
- package/src/styles/less/accordion.css +12 -0
- package/src/styles/less/button-groups.css +6 -0
- package/src/styles/less/buttons.css +2 -0
- package/src/styles/less/core/_typography.less +194 -26
- package/src/styles/less/decision.css +12 -0
- package/src/styles/less/dropdowns.css +18 -2
- package/src/styles/less/droppable.css +6 -0
- package/src/styles/less/footer.css +12 -0
- package/src/styles/less/forms/bootstrap-forms.css +24 -2
- package/src/styles/less/input-groups.css +42 -2
- package/src/styles/less/list-group.css +6 -0
- package/src/styles/less/navbar.css +18 -2
- package/src/styles/less/neptune-core.css +512 -4
- package/src/styles/less/neptune.bundle.less +0 -2
- package/src/styles/less/neptune.css +640 -1426
- package/src/styles/less/popovers.css +18 -0
- package/src/styles/less/tooltip.css +6 -0
- package/src/DateInput/_stories/DateInput.rtl.test.story.tsx +0 -36
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Snackbar.js","sources":["../../src/Snackbar/Snackbar.tsx"],"sourcesContent":["import { Component, createRef } from 'react';\nimport { CSSTransition } from 'react-transition-group';\n\nimport Button from '../Button';\nimport Body from '../Body';\nimport type { ThemeDark, ThemeLight } from '../common';\nimport { DirectionContext } from '../Provider/Direction';\nimport withNextPortal from '../WithNextPortal/WithNextPortal';\n\nconst CSS_TRANSITION_DURATION = 400;\n\nexport interface SnackbarProps {\n action?: {\n label: string;\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\n };\n text: React.ReactNode;\n /** @deprecated */\n theme?: ThemeLight | ThemeDark;\n timeout: number;\n timestamp: number;\n}\n\ninterface SnackbarState extends Pick<SnackbarProps, 'action' | 'text' | 'theme'> {\n visible: boolean;\n}\n\nexport class Snackbar extends Component<SnackbarProps, SnackbarState> {\n bodyRef = createRef<HTMLSpanElement>();\n timeout = 0;\n transitionTimeout = 0;\n\n constructor(props: SnackbarProps) {\n super(props);\n this.state = {\n visible: false,\n text: '',\n };\n }\n\n componentWillUnmount() {\n window.clearTimeout(this.timeout);\n window.clearTimeout(this.transitionTimeout);\n }\n\n shouldComponentUpdate(nextProps: SnackbarProps, nextState: SnackbarState) {\n if (!nextProps.text) {\n return false;\n }\n if (\n nextProps.timestamp === this.props.timestamp &&\n nextState.visible === this.state.visible &&\n nextState.text === this.state.text\n ) {\n return false;\n }\n\n return true;\n }\n\n setLeaveTimeout = () => {\n const { timeout } = this.props;\n\n this.timeout = window.setTimeout(() => {\n this.setState({ visible: false });\n }, timeout);\n };\n\n componentDidUpdate(previousProps: SnackbarProps) {\n const { action, text, timestamp } = this.props;\n\n if (!previousProps.text) {\n this.setState({ visible: true, action, text }, () => {\n this.setLeaveTimeout();\n });\n } else if (previousProps.timestamp !== timestamp) {\n window.clearTimeout(this.timeout);\n\n if (this.state.visible) {\n this.setState({ visible: false }, () => {\n this.transitionTimeout = window.setTimeout(() => {\n this.setState({ visible: true, action, text });\n this.setLeaveTimeout();\n }, CSS_TRANSITION_DURATION);\n });\n } else {\n this.setState({ visible: true, action, text });\n this.setLeaveTimeout();\n }\n }\n }\n\n render() {\n const { action, text, visible } = this.state;\n const { timeout } = this.props;\n\n return (\n <div className=\"snackbar\" aria-live=\"assertive\" role=\"alert\">\n <CSSTransition\n nodeRef={this.bodyRef}\n in={visible}\n classNames=\"snackbar__text-container\"\n timeout={{\n appear: 0,\n enter: timeout,\n exit: CSS_TRANSITION_DURATION,\n }}\n unmountOnExit\n >\n <Body ref={this.bodyRef} as=\"span\" className=\"snackbar__text\">\n {text}\n {action ? (\n <Button className=\"snackbar__text__action\" v2 size=\"sm\" onClick={action.onClick}>\n {action.label}\n </Button>\n ) : null}\n </Body>\n </CSSTransition>\n </div>\n );\n }\n}\n\nSnackbar.contextType = DirectionContext;\n\nexport default withNextPortal(Snackbar);\n"],"names":["CSS_TRANSITION_DURATION","Snackbar","Component","bodyRef","createRef","timeout","transitionTimeout","constructor","props","state","visible","text","componentWillUnmount","window","clearTimeout","shouldComponentUpdate","nextProps","nextState","timestamp","setLeaveTimeout","setTimeout","setState","componentDidUpdate","previousProps","action","render","_jsx","className","role","children","CSSTransition","nodeRef","in","classNames","appear","enter","exit","unmountOnExit","_jsxs","Body","ref","as","Button","v2","size","onClick","label","contextType","DirectionContext","withNextPortal"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Snackbar.js","sources":["../../src/Snackbar/Snackbar.tsx"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport { useIntl } from 'react-intl';\nimport { Tags } from '@transferwise/icons';\n\nimport Button from '../Button';\nimport type { ButtonReferenceType } from '../Button/Button.types';\nimport Body from '../Body';\nimport { LiveRegion } from '../common';\nimport type { ThemeDark, ThemeLight } from '../common';\nimport ProcessIndicator from '../ProcessIndicator';\nimport { PrimitivePrompt } from '../Prompt/PrimitivePrompt';\nimport type { Sentiment } from '../SentimentSurface';\nimport StatusIcon from '../StatusIcon';\nimport { SNACKBAR_ENTER_DURATION, SNACKBAR_EXIT_DURATION } from './constants';\nimport messages from './Snackbar.messages';\nimport type { SnackbarAction, SnackbarDuration, SnackbarInternalProps } from './Snackbar.types';\nimport useSnackbarAutoDismiss from './useSnackbarAutoDismiss';\nimport useSnackbarSwipeDismiss from './useSnackbarSwipeDismiss';\n\nexport interface SnackbarProps {\n /** One optional action. Supports callbacks and navigation through the Button API. */\n action?: SnackbarAction;\n /**\n * Controls auto-dismiss using the design-defined duration presets.\n * @default 'default'\n */\n duration?: SnackbarDuration;\n /**\n * Replaces the sentiment-derived default media.\n * Custom media should fit the 24x24px media slot.\n * The asset should include its own accessibility attributes if it conveys meaning.\n */\n media?: React.ReactNode;\n /**\n * Replaces the media with a progress indicator and uses neutral sentiment styling.\n * @default false\n */\n loading?: boolean;\n /** Called after the Snackbar completes dismissal. */\n onDismiss?: () => void;\n /**\n * Determines the colour scheme and default media.\n * @default 'neutral'\n */\n sentiment?: Sentiment;\n /** Short Snackbar message. Plain text is recommended. */\n text: React.ReactNode;\n /**\n * @deprecated Theme no longer changes Snackbar appearance. Use `sentiment` for the semantic\n * colour scheme. This prop remains available temporarily for existing implementations.\n */\n theme?: ThemeLight | ThemeDark;\n /**\n * @deprecated Use `duration` instead. Existing millisecond values remain supported during\n * migration: use `default` for 0–5000ms, `extended` above 5000ms, and `indefinite` only when\n * the existing usage is intentionally persistent. `duration` takes precedence when both are\n * provided.\n */\n timeout?: number;\n}\n\nexport const SnackbarInternal = ({\n action,\n announcementKey,\n duration,\n loading = false,\n media,\n onDismissRequest,\n onExited,\n sentiment = 'neutral',\n text,\n timeout,\n visible,\n}: SnackbarInternalProps) => {\n const { formatMessage } = useIntl();\n const {\n clearSwipePosition,\n containerRef,\n handleClickCapture,\n handlePointerCancel,\n handlePointerDown,\n handlePointerMove,\n handlePointerUp,\n } = useSnackbarSwipeDismiss(onDismissRequest);\n const { handleBlur, handleFocus, handleMouseEnter, handleMouseLeave, surfaceRef } =\n useSnackbarAutoDismiss({\n duration,\n loading,\n onDismissRequest,\n timeout,\n visible,\n resetKey: announcementKey,\n });\n\n const handleExited = () => {\n clearSwipePosition();\n onExited();\n };\n\n const handleActionClick: React.MouseEventHandler<ButtonReferenceType> = (event) => {\n const handleClick: React.MouseEventHandler<ButtonReferenceType> | undefined = action?.onClick;\n try {\n handleClick?.(event);\n } finally {\n onDismissRequest();\n }\n };\n\n const renderMedia = () => {\n if (loading) {\n return (\n <ProcessIndicator\n className=\"wds-Snackbar__process-indicator\"\n data-testid=\"Snackbar_ProcessIndicator\"\n size=\"xs\"\n />\n );\n }\n\n if (media) {\n return <span className=\"wds-Snackbar__media-asset\">{media}</span>;\n }\n\n if (sentiment === 'proposition') {\n return (\n <span className=\"wds-Snackbar__media-asset\">\n <Tags aria-hidden size={24} />\n </span>\n );\n }\n\n return <StatusIcon sentiment={sentiment} size={24} />;\n };\n\n useEffect(() => {\n if (visible) {\n clearSwipePosition();\n }\n }, [clearSwipePosition, visible]);\n\n useEffect(() => {\n if (!visible) {\n return undefined;\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && !event.defaultPrevented) {\n onDismissRequest();\n }\n };\n\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [onDismissRequest, visible]);\n\n return (\n <div ref={containerRef} className=\"wds-Snackbar\">\n <CSSTransition\n appear\n nodeRef={surfaceRef}\n in={visible}\n classNames=\"wds-Snackbar-container\"\n timeout={{\n appear: SNACKBAR_ENTER_DURATION,\n enter: SNACKBAR_ENTER_DURATION,\n exit: SNACKBAR_EXIT_DURATION,\n }}\n unmountOnExit\n onExited={handleExited}\n >\n <PrimitivePrompt\n ref={surfaceRef}\n className=\"wds-Snackbar-container\"\n sentiment={loading ? 'neutral' : sentiment}\n emphasis=\"elevated\"\n media={renderMedia()}\n onDismiss={onDismissRequest}\n onBlur={handleBlur}\n onFocus={handleFocus}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n onClickCapture={handleClickCapture}\n onPointerCancel={handlePointerCancel}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n >\n <div className=\"wds-Snackbar__content\">\n <LiveRegion\n aria-live=\"polite\"\n announceOnChange={announcementKey}\n className=\"wds-Snackbar__message\"\n >\n <Body as=\"span\" className=\"wds-Snackbar__body\">\n {text}\n <span className=\"sr-only\"> {formatMessage(messages.escapeDismissHint)}</span>\n </Body>\n </LiveRegion>\n {action ? (\n <Button\n className=\"wds-Snackbar__action\"\n v2\n size=\"sm\"\n priority=\"secondary\"\n href={action.href}\n target={action.target}\n onClick={handleActionClick}\n >\n {action.label}\n </Button>\n ) : null}\n </div>\n </PrimitivePrompt>\n </CSSTransition>\n </div>\n );\n};\n\nexport const Snackbar = ({ onDismiss, ...props }: SnackbarProps) => {\n const [mounted, setMounted] = useState(true);\n const [visible, setVisible] = useState(true);\n const [announcementKey, setAnnouncementKey] = useState(0);\n const previousText = useRef(props.text);\n const handleDismissRequest = useCallback(() => setVisible(false), []);\n const handleExited = useCallback(() => {\n setMounted(false);\n onDismiss?.();\n }, [onDismiss]);\n\n useEffect(() => {\n if (previousText.current === props.text) {\n return;\n }\n\n previousText.current = props.text;\n // Direct Snackbars do not have a Provider-generated instance id, so text changes advance this\n // key to schedule a fresh announcement and restart the semantic duration.\n setMounted(true);\n setVisible(true);\n setAnnouncementKey((key) => key + 1);\n }, [props.text]);\n\n if (!mounted) {\n return null;\n }\n\n return (\n <SnackbarInternal\n {...props}\n announcementKey={announcementKey}\n visible={visible}\n onDismissRequest={handleDismissRequest}\n onExited={handleExited}\n />\n );\n};\n"],"names":["SnackbarInternal","action","announcementKey","duration","loading","media","onDismissRequest","onExited","sentiment","text","timeout","visible","formatMessage","useIntl","clearSwipePosition","containerRef","handleClickCapture","handlePointerCancel","handlePointerDown","handlePointerMove","handlePointerUp","useSnackbarSwipeDismiss","handleBlur","handleFocus","handleMouseEnter","handleMouseLeave","surfaceRef","useSnackbarAutoDismiss","resetKey","handleExited","handleActionClick","event","handleClick","onClick","renderMedia","_jsx","ProcessIndicator","className","size","children","Tags","StatusIcon","useEffect","undefined","handleKeyDown","key","defaultPrevented","document","addEventListener","removeEventListener","ref","CSSTransition","appear","nodeRef","in","classNames","SNACKBAR_ENTER_DURATION","enter","exit","SNACKBAR_EXIT_DURATION","unmountOnExit","PrimitivePrompt","emphasis","onDismiss","onBlur","onFocus","onMouseEnter","onMouseLeave","onClickCapture","onPointerCancel","onPointerDown","onPointerMove","onPointerUp","_jsxs","LiveRegion","announceOnChange","Body","as","messages","escapeDismissHint","Button","v2","priority","href","target","label","Snackbar","props","mounted","setMounted","useState","setVisible","setAnnouncementKey","previousText","useRef","handleDismissRequest","useCallback","current"],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var reactIntl = require('react-intl');
|
|
6
|
+
|
|
7
|
+
var messages = reactIntl.defineMessages({
|
|
8
|
+
escapeDismissHint: {
|
|
9
|
+
id: "neptune.Snackbar.escapeDismissHint"
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
exports.default = messages;
|
|
14
|
+
//# sourceMappingURL=Snackbar.messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Snackbar.messages.js","sources":["../../src/Snackbar/Snackbar.messages.ts"],"sourcesContent":["import { defineMessages } from 'react-intl';\n\nexport default defineMessages({\n escapeDismissHint: {\n id: 'neptune.Snackbar.escapeDismissHint',\n defaultMessage: 'Press Escape to dismiss.',\n description: 'Screen-reader instruction for dismissing a Snackbar without moving focus',\n },\n});\n"],"names":["defineMessages","escapeDismissHint","id"],"mappings":";;;;;;AAEA,eAAeA,wBAAc,CAAC;AAC5BC,EAAAA,iBAAiB,EAAE;IACjBC,EAAE,EAAA;AAGH;AACF,CAAA,CAAC;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Snackbar.messages.mjs","sources":["../../src/Snackbar/Snackbar.messages.ts"],"sourcesContent":["import { defineMessages } from 'react-intl';\n\nexport default defineMessages({\n escapeDismissHint: {\n id: 'neptune.Snackbar.escapeDismissHint',\n defaultMessage: 'Press Escape to dismiss.',\n description: 'Screen-reader instruction for dismissing a Snackbar without moving focus',\n },\n});\n"],"names":["defineMessages","escapeDismissHint","id"],"mappings":";;AAEA,eAAeA,cAAc,CAAC;AAC5BC,EAAAA,iBAAiB,EAAE;IACjBC,EAAE,EAAA;AAGH;AACF,CAAA,CAAC;;"}
|
|
@@ -1,126 +1,232 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useState, useRef, useCallback, useEffect } from 'react';
|
|
2
2
|
import { CSSTransition } from 'react-transition-group';
|
|
3
|
+
import { useIntl } from 'react-intl';
|
|
4
|
+
import { Tags } from '@transferwise/icons';
|
|
3
5
|
import Button from '../Button/Button.resolver.mjs';
|
|
4
6
|
import Body from '../Body/Body.mjs';
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
+
import '../common/theme.mjs';
|
|
8
|
+
import '../common/direction.mjs';
|
|
9
|
+
import '@transferwise/neptune-tokens';
|
|
10
|
+
import '../common/PropsValues/control.mjs';
|
|
11
|
+
import '../common/PropsValues/size.mjs';
|
|
12
|
+
import '../common/PropsValues/typography.mjs';
|
|
13
|
+
import '../common/PropsValues/width.mjs';
|
|
14
|
+
import '../common/PropsValues/type.mjs';
|
|
15
|
+
import '../common/PropsValues/dateMode.mjs';
|
|
16
|
+
import '../common/PropsValues/monthFormat.mjs';
|
|
17
|
+
import '../common/PropsValues/position.mjs';
|
|
18
|
+
import '../common/PropsValues/layouts.mjs';
|
|
19
|
+
import '../common/PropsValues/status.mjs';
|
|
20
|
+
import '../common/PropsValues/sentiment.mjs';
|
|
21
|
+
import '../common/PropsValues/profileType.mjs';
|
|
22
|
+
import '../common/PropsValues/variant.mjs';
|
|
23
|
+
import '../common/PropsValues/scroll.mjs';
|
|
24
|
+
import '../common/PropsValues/markdownNodeType.mjs';
|
|
25
|
+
import '../common/fileType.mjs';
|
|
26
|
+
import '@transferwise/formatting';
|
|
27
|
+
import 'clsx';
|
|
28
|
+
import '../common/CloseButton/CloseButton.messages.mjs';
|
|
7
29
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
30
|
+
import { LiveRegion } from '../common/LiveRegion/LiveRegion.mjs';
|
|
31
|
+
import ProcessIndicator from '../ProcessIndicator/ProcessIndicator.mjs';
|
|
32
|
+
import { PrimitivePrompt } from '../Prompt/PrimitivePrompt/PrimitivePrompt.mjs';
|
|
33
|
+
import StatusIcon from '../StatusIcon/StatusIcon.mjs';
|
|
34
|
+
import { SNACKBAR_EXIT_DURATION, SNACKBAR_ENTER_DURATION } from './constants.mjs';
|
|
35
|
+
import messages from './Snackbar.messages.mjs';
|
|
36
|
+
import useSnackbarAutoDismiss from './useSnackbarAutoDismiss.mjs';
|
|
37
|
+
import useSnackbarSwipeDismiss from './useSnackbarSwipeDismiss.mjs';
|
|
8
38
|
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
39
|
+
const SnackbarInternal = ({
|
|
40
|
+
action,
|
|
41
|
+
announcementKey,
|
|
42
|
+
duration,
|
|
43
|
+
loading = false,
|
|
44
|
+
media,
|
|
45
|
+
onDismissRequest,
|
|
46
|
+
onExited,
|
|
47
|
+
sentiment = 'neutral',
|
|
48
|
+
text,
|
|
49
|
+
timeout,
|
|
50
|
+
visible
|
|
51
|
+
}) => {
|
|
52
|
+
const {
|
|
53
|
+
formatMessage
|
|
54
|
+
} = useIntl();
|
|
55
|
+
const {
|
|
56
|
+
clearSwipePosition,
|
|
57
|
+
containerRef,
|
|
58
|
+
handleClickCapture,
|
|
59
|
+
handlePointerCancel,
|
|
60
|
+
handlePointerDown,
|
|
61
|
+
handlePointerMove,
|
|
62
|
+
handlePointerUp
|
|
63
|
+
} = useSnackbarSwipeDismiss(onDismissRequest);
|
|
64
|
+
const {
|
|
65
|
+
handleBlur,
|
|
66
|
+
handleFocus,
|
|
67
|
+
handleMouseEnter,
|
|
68
|
+
handleMouseLeave,
|
|
69
|
+
surfaceRef
|
|
70
|
+
} = useSnackbarAutoDismiss({
|
|
71
|
+
duration,
|
|
72
|
+
loading,
|
|
73
|
+
onDismissRequest,
|
|
74
|
+
timeout,
|
|
75
|
+
visible,
|
|
76
|
+
resetKey: announcementKey
|
|
77
|
+
});
|
|
78
|
+
const handleExited = () => {
|
|
79
|
+
clearSwipePosition();
|
|
80
|
+
onExited();
|
|
81
|
+
};
|
|
82
|
+
const handleActionClick = event => {
|
|
83
|
+
const handleClick = action?.onClick;
|
|
84
|
+
try {
|
|
85
|
+
handleClick?.(event);
|
|
86
|
+
} finally {
|
|
87
|
+
onDismissRequest();
|
|
28
88
|
}
|
|
29
|
-
|
|
30
|
-
|
|
89
|
+
};
|
|
90
|
+
const renderMedia = () => {
|
|
91
|
+
if (loading) {
|
|
92
|
+
return /*#__PURE__*/jsx(ProcessIndicator, {
|
|
93
|
+
className: "wds-Snackbar__process-indicator",
|
|
94
|
+
"data-testid": "Snackbar_ProcessIndicator",
|
|
95
|
+
size: "xs"
|
|
96
|
+
});
|
|
31
97
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
timeout
|
|
37
|
-
} = this.props;
|
|
38
|
-
this.timeout = window.setTimeout(() => {
|
|
39
|
-
this.setState({
|
|
40
|
-
visible: false
|
|
98
|
+
if (media) {
|
|
99
|
+
return /*#__PURE__*/jsx("span", {
|
|
100
|
+
className: "wds-Snackbar__media-asset",
|
|
101
|
+
children: media
|
|
41
102
|
});
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
if (!previousProps.text) {
|
|
51
|
-
this.setState({
|
|
52
|
-
visible: true,
|
|
53
|
-
action,
|
|
54
|
-
text
|
|
55
|
-
}, () => {
|
|
56
|
-
this.setLeaveTimeout();
|
|
103
|
+
}
|
|
104
|
+
if (sentiment === 'proposition') {
|
|
105
|
+
return /*#__PURE__*/jsx("span", {
|
|
106
|
+
className: "wds-Snackbar__media-asset",
|
|
107
|
+
children: /*#__PURE__*/jsx(Tags, {
|
|
108
|
+
"aria-hidden": true,
|
|
109
|
+
size: 24
|
|
110
|
+
})
|
|
57
111
|
});
|
|
58
|
-
} else if (previousProps.timestamp !== timestamp) {
|
|
59
|
-
window.clearTimeout(this.timeout);
|
|
60
|
-
if (this.state.visible) {
|
|
61
|
-
this.setState({
|
|
62
|
-
visible: false
|
|
63
|
-
}, () => {
|
|
64
|
-
this.transitionTimeout = window.setTimeout(() => {
|
|
65
|
-
this.setState({
|
|
66
|
-
visible: true,
|
|
67
|
-
action,
|
|
68
|
-
text
|
|
69
|
-
});
|
|
70
|
-
this.setLeaveTimeout();
|
|
71
|
-
}, CSS_TRANSITION_DURATION);
|
|
72
|
-
});
|
|
73
|
-
} else {
|
|
74
|
-
this.setState({
|
|
75
|
-
visible: true,
|
|
76
|
-
action,
|
|
77
|
-
text
|
|
78
|
-
});
|
|
79
|
-
this.setLeaveTimeout();
|
|
80
|
-
}
|
|
81
112
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
113
|
+
return /*#__PURE__*/jsx(StatusIcon, {
|
|
114
|
+
sentiment: sentiment,
|
|
115
|
+
size: 24
|
|
116
|
+
});
|
|
117
|
+
};
|
|
118
|
+
useEffect(() => {
|
|
119
|
+
if (visible) {
|
|
120
|
+
clearSwipePosition();
|
|
121
|
+
}
|
|
122
|
+
}, [clearSwipePosition, visible]);
|
|
123
|
+
useEffect(() => {
|
|
124
|
+
if (!visible) {
|
|
125
|
+
return undefined;
|
|
126
|
+
}
|
|
127
|
+
const handleKeyDown = event => {
|
|
128
|
+
if (event.key === 'Escape' && !event.defaultPrevented) {
|
|
129
|
+
onDismissRequest();
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
document.addEventListener('keydown', handleKeyDown);
|
|
133
|
+
return () => document.removeEventListener('keydown', handleKeyDown);
|
|
134
|
+
}, [onDismissRequest, visible]);
|
|
135
|
+
return /*#__PURE__*/jsx("div", {
|
|
136
|
+
ref: containerRef,
|
|
137
|
+
className: "wds-Snackbar",
|
|
138
|
+
children: /*#__PURE__*/jsx(CSSTransition, {
|
|
139
|
+
appear: true,
|
|
140
|
+
nodeRef: surfaceRef,
|
|
141
|
+
in: visible,
|
|
142
|
+
classNames: "wds-Snackbar-container",
|
|
143
|
+
timeout: {
|
|
144
|
+
appear: SNACKBAR_ENTER_DURATION,
|
|
145
|
+
enter: SNACKBAR_ENTER_DURATION,
|
|
146
|
+
exit: SNACKBAR_EXIT_DURATION
|
|
147
|
+
},
|
|
148
|
+
unmountOnExit: true,
|
|
149
|
+
onExited: handleExited,
|
|
150
|
+
children: /*#__PURE__*/jsx(PrimitivePrompt, {
|
|
151
|
+
ref: surfaceRef,
|
|
152
|
+
className: "wds-Snackbar-container",
|
|
153
|
+
sentiment: loading ? 'neutral' : sentiment,
|
|
154
|
+
emphasis: "elevated",
|
|
155
|
+
media: renderMedia(),
|
|
156
|
+
onDismiss: onDismissRequest,
|
|
157
|
+
onBlur: handleBlur,
|
|
158
|
+
onFocus: handleFocus,
|
|
159
|
+
onMouseEnter: handleMouseEnter,
|
|
160
|
+
onMouseLeave: handleMouseLeave,
|
|
161
|
+
onClickCapture: handleClickCapture,
|
|
162
|
+
onPointerCancel: handlePointerCancel,
|
|
163
|
+
onPointerDown: handlePointerDown,
|
|
164
|
+
onPointerMove: handlePointerMove,
|
|
165
|
+
onPointerUp: handlePointerUp,
|
|
166
|
+
children: /*#__PURE__*/jsxs("div", {
|
|
167
|
+
className: "wds-Snackbar__content",
|
|
168
|
+
children: [/*#__PURE__*/jsx(LiveRegion, {
|
|
169
|
+
"aria-live": "polite",
|
|
170
|
+
announceOnChange: announcementKey,
|
|
171
|
+
className: "wds-Snackbar__message",
|
|
172
|
+
children: /*#__PURE__*/jsxs(Body, {
|
|
173
|
+
as: "span",
|
|
174
|
+
className: "wds-Snackbar__body",
|
|
175
|
+
children: [text, /*#__PURE__*/jsxs("span", {
|
|
176
|
+
className: "sr-only",
|
|
177
|
+
children: [" ", formatMessage(messages.escapeDismissHint)]
|
|
178
|
+
})]
|
|
179
|
+
})
|
|
180
|
+
}), action ? /*#__PURE__*/jsx(Button, {
|
|
181
|
+
className: "wds-Snackbar__action",
|
|
112
182
|
v2: true,
|
|
113
183
|
size: "sm",
|
|
114
|
-
|
|
184
|
+
priority: "secondary",
|
|
185
|
+
href: action.href,
|
|
186
|
+
target: action.target,
|
|
187
|
+
onClick: handleActionClick,
|
|
115
188
|
children: action.label
|
|
116
189
|
}) : null]
|
|
117
190
|
})
|
|
118
191
|
})
|
|
119
|
-
})
|
|
192
|
+
})
|
|
193
|
+
});
|
|
194
|
+
};
|
|
195
|
+
const Snackbar = ({
|
|
196
|
+
onDismiss,
|
|
197
|
+
...props
|
|
198
|
+
}) => {
|
|
199
|
+
const [mounted, setMounted] = useState(true);
|
|
200
|
+
const [visible, setVisible] = useState(true);
|
|
201
|
+
const [announcementKey, setAnnouncementKey] = useState(0);
|
|
202
|
+
const previousText = useRef(props.text);
|
|
203
|
+
const handleDismissRequest = useCallback(() => setVisible(false), []);
|
|
204
|
+
const handleExited = useCallback(() => {
|
|
205
|
+
setMounted(false);
|
|
206
|
+
onDismiss?.();
|
|
207
|
+
}, [onDismiss]);
|
|
208
|
+
useEffect(() => {
|
|
209
|
+
if (previousText.current === props.text) {
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
previousText.current = props.text;
|
|
213
|
+
// Direct Snackbars do not have a Provider-generated instance id, so text changes advance this
|
|
214
|
+
// key to schedule a fresh announcement and restart the semantic duration.
|
|
215
|
+
setMounted(true);
|
|
216
|
+
setVisible(true);
|
|
217
|
+
setAnnouncementKey(key => key + 1);
|
|
218
|
+
}, [props.text]);
|
|
219
|
+
if (!mounted) {
|
|
220
|
+
return null;
|
|
120
221
|
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
222
|
+
return /*#__PURE__*/jsx(SnackbarInternal, {
|
|
223
|
+
...props,
|
|
224
|
+
announcementKey: announcementKey,
|
|
225
|
+
visible: visible,
|
|
226
|
+
onDismissRequest: handleDismissRequest,
|
|
227
|
+
onExited: handleExited
|
|
228
|
+
});
|
|
229
|
+
};
|
|
124
230
|
|
|
125
|
-
export { Snackbar,
|
|
231
|
+
export { Snackbar, SnackbarInternal };
|
|
126
232
|
//# sourceMappingURL=Snackbar.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Snackbar.mjs","sources":["../../src/Snackbar/Snackbar.tsx"],"sourcesContent":["import { Component, createRef } from 'react';\nimport { CSSTransition } from 'react-transition-group';\n\nimport Button from '../Button';\nimport Body from '../Body';\nimport type { ThemeDark, ThemeLight } from '../common';\nimport { DirectionContext } from '../Provider/Direction';\nimport withNextPortal from '../WithNextPortal/WithNextPortal';\n\nconst CSS_TRANSITION_DURATION = 400;\n\nexport interface SnackbarProps {\n action?: {\n label: string;\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\n };\n text: React.ReactNode;\n /** @deprecated */\n theme?: ThemeLight | ThemeDark;\n timeout: number;\n timestamp: number;\n}\n\ninterface SnackbarState extends Pick<SnackbarProps, 'action' | 'text' | 'theme'> {\n visible: boolean;\n}\n\nexport class Snackbar extends Component<SnackbarProps, SnackbarState> {\n bodyRef = createRef<HTMLSpanElement>();\n timeout = 0;\n transitionTimeout = 0;\n\n constructor(props: SnackbarProps) {\n super(props);\n this.state = {\n visible: false,\n text: '',\n };\n }\n\n componentWillUnmount() {\n window.clearTimeout(this.timeout);\n window.clearTimeout(this.transitionTimeout);\n }\n\n shouldComponentUpdate(nextProps: SnackbarProps, nextState: SnackbarState) {\n if (!nextProps.text) {\n return false;\n }\n if (\n nextProps.timestamp === this.props.timestamp &&\n nextState.visible === this.state.visible &&\n nextState.text === this.state.text\n ) {\n return false;\n }\n\n return true;\n }\n\n setLeaveTimeout = () => {\n const { timeout } = this.props;\n\n this.timeout = window.setTimeout(() => {\n this.setState({ visible: false });\n }, timeout);\n };\n\n componentDidUpdate(previousProps: SnackbarProps) {\n const { action, text, timestamp } = this.props;\n\n if (!previousProps.text) {\n this.setState({ visible: true, action, text }, () => {\n this.setLeaveTimeout();\n });\n } else if (previousProps.timestamp !== timestamp) {\n window.clearTimeout(this.timeout);\n\n if (this.state.visible) {\n this.setState({ visible: false }, () => {\n this.transitionTimeout = window.setTimeout(() => {\n this.setState({ visible: true, action, text });\n this.setLeaveTimeout();\n }, CSS_TRANSITION_DURATION);\n });\n } else {\n this.setState({ visible: true, action, text });\n this.setLeaveTimeout();\n }\n }\n }\n\n render() {\n const { action, text, visible } = this.state;\n const { timeout } = this.props;\n\n return (\n <div className=\"snackbar\" aria-live=\"assertive\" role=\"alert\">\n <CSSTransition\n nodeRef={this.bodyRef}\n in={visible}\n classNames=\"snackbar__text-container\"\n timeout={{\n appear: 0,\n enter: timeout,\n exit: CSS_TRANSITION_DURATION,\n }}\n unmountOnExit\n >\n <Body ref={this.bodyRef} as=\"span\" className=\"snackbar__text\">\n {text}\n {action ? (\n <Button className=\"snackbar__text__action\" v2 size=\"sm\" onClick={action.onClick}>\n {action.label}\n </Button>\n ) : null}\n </Body>\n </CSSTransition>\n </div>\n );\n }\n}\n\nSnackbar.contextType = DirectionContext;\n\nexport default withNextPortal(Snackbar);\n"],"names":["CSS_TRANSITION_DURATION","Snackbar","Component","bodyRef","createRef","timeout","transitionTimeout","constructor","props","state","visible","text","componentWillUnmount","window","clearTimeout","shouldComponentUpdate","nextProps","nextState","timestamp","setLeaveTimeout","setTimeout","setState","componentDidUpdate","previousProps","action","render","_jsx","className","role","children","CSSTransition","nodeRef","in","classNames","appear","enter","exit","unmountOnExit","_jsxs","Body","ref","as","Button","v2","size","onClick","label","contextType","DirectionContext","withNextPortal"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Snackbar.mjs","sources":["../../src/Snackbar/Snackbar.tsx"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport { useIntl } from 'react-intl';\nimport { Tags } from '@transferwise/icons';\n\nimport Button from '../Button';\nimport type { ButtonReferenceType } from '../Button/Button.types';\nimport Body from '../Body';\nimport { LiveRegion } from '../common';\nimport type { ThemeDark, ThemeLight } from '../common';\nimport ProcessIndicator from '../ProcessIndicator';\nimport { PrimitivePrompt } from '../Prompt/PrimitivePrompt';\nimport type { Sentiment } from '../SentimentSurface';\nimport StatusIcon from '../StatusIcon';\nimport { SNACKBAR_ENTER_DURATION, SNACKBAR_EXIT_DURATION } from './constants';\nimport messages from './Snackbar.messages';\nimport type { SnackbarAction, SnackbarDuration, SnackbarInternalProps } from './Snackbar.types';\nimport useSnackbarAutoDismiss from './useSnackbarAutoDismiss';\nimport useSnackbarSwipeDismiss from './useSnackbarSwipeDismiss';\n\nexport interface SnackbarProps {\n /** One optional action. Supports callbacks and navigation through the Button API. */\n action?: SnackbarAction;\n /**\n * Controls auto-dismiss using the design-defined duration presets.\n * @default 'default'\n */\n duration?: SnackbarDuration;\n /**\n * Replaces the sentiment-derived default media.\n * Custom media should fit the 24x24px media slot.\n * The asset should include its own accessibility attributes if it conveys meaning.\n */\n media?: React.ReactNode;\n /**\n * Replaces the media with a progress indicator and uses neutral sentiment styling.\n * @default false\n */\n loading?: boolean;\n /** Called after the Snackbar completes dismissal. */\n onDismiss?: () => void;\n /**\n * Determines the colour scheme and default media.\n * @default 'neutral'\n */\n sentiment?: Sentiment;\n /** Short Snackbar message. Plain text is recommended. */\n text: React.ReactNode;\n /**\n * @deprecated Theme no longer changes Snackbar appearance. Use `sentiment` for the semantic\n * colour scheme. This prop remains available temporarily for existing implementations.\n */\n theme?: ThemeLight | ThemeDark;\n /**\n * @deprecated Use `duration` instead. Existing millisecond values remain supported during\n * migration: use `default` for 0–5000ms, `extended` above 5000ms, and `indefinite` only when\n * the existing usage is intentionally persistent. `duration` takes precedence when both are\n * provided.\n */\n timeout?: number;\n}\n\nexport const SnackbarInternal = ({\n action,\n announcementKey,\n duration,\n loading = false,\n media,\n onDismissRequest,\n onExited,\n sentiment = 'neutral',\n text,\n timeout,\n visible,\n}: SnackbarInternalProps) => {\n const { formatMessage } = useIntl();\n const {\n clearSwipePosition,\n containerRef,\n handleClickCapture,\n handlePointerCancel,\n handlePointerDown,\n handlePointerMove,\n handlePointerUp,\n } = useSnackbarSwipeDismiss(onDismissRequest);\n const { handleBlur, handleFocus, handleMouseEnter, handleMouseLeave, surfaceRef } =\n useSnackbarAutoDismiss({\n duration,\n loading,\n onDismissRequest,\n timeout,\n visible,\n resetKey: announcementKey,\n });\n\n const handleExited = () => {\n clearSwipePosition();\n onExited();\n };\n\n const handleActionClick: React.MouseEventHandler<ButtonReferenceType> = (event) => {\n const handleClick: React.MouseEventHandler<ButtonReferenceType> | undefined = action?.onClick;\n try {\n handleClick?.(event);\n } finally {\n onDismissRequest();\n }\n };\n\n const renderMedia = () => {\n if (loading) {\n return (\n <ProcessIndicator\n className=\"wds-Snackbar__process-indicator\"\n data-testid=\"Snackbar_ProcessIndicator\"\n size=\"xs\"\n />\n );\n }\n\n if (media) {\n return <span className=\"wds-Snackbar__media-asset\">{media}</span>;\n }\n\n if (sentiment === 'proposition') {\n return (\n <span className=\"wds-Snackbar__media-asset\">\n <Tags aria-hidden size={24} />\n </span>\n );\n }\n\n return <StatusIcon sentiment={sentiment} size={24} />;\n };\n\n useEffect(() => {\n if (visible) {\n clearSwipePosition();\n }\n }, [clearSwipePosition, visible]);\n\n useEffect(() => {\n if (!visible) {\n return undefined;\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && !event.defaultPrevented) {\n onDismissRequest();\n }\n };\n\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [onDismissRequest, visible]);\n\n return (\n <div ref={containerRef} className=\"wds-Snackbar\">\n <CSSTransition\n appear\n nodeRef={surfaceRef}\n in={visible}\n classNames=\"wds-Snackbar-container\"\n timeout={{\n appear: SNACKBAR_ENTER_DURATION,\n enter: SNACKBAR_ENTER_DURATION,\n exit: SNACKBAR_EXIT_DURATION,\n }}\n unmountOnExit\n onExited={handleExited}\n >\n <PrimitivePrompt\n ref={surfaceRef}\n className=\"wds-Snackbar-container\"\n sentiment={loading ? 'neutral' : sentiment}\n emphasis=\"elevated\"\n media={renderMedia()}\n onDismiss={onDismissRequest}\n onBlur={handleBlur}\n onFocus={handleFocus}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n onClickCapture={handleClickCapture}\n onPointerCancel={handlePointerCancel}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n >\n <div className=\"wds-Snackbar__content\">\n <LiveRegion\n aria-live=\"polite\"\n announceOnChange={announcementKey}\n className=\"wds-Snackbar__message\"\n >\n <Body as=\"span\" className=\"wds-Snackbar__body\">\n {text}\n <span className=\"sr-only\"> {formatMessage(messages.escapeDismissHint)}</span>\n </Body>\n </LiveRegion>\n {action ? (\n <Button\n className=\"wds-Snackbar__action\"\n v2\n size=\"sm\"\n priority=\"secondary\"\n href={action.href}\n target={action.target}\n onClick={handleActionClick}\n >\n {action.label}\n </Button>\n ) : null}\n </div>\n </PrimitivePrompt>\n </CSSTransition>\n </div>\n );\n};\n\nexport const Snackbar = ({ onDismiss, ...props }: SnackbarProps) => {\n const [mounted, setMounted] = useState(true);\n const [visible, setVisible] = useState(true);\n const [announcementKey, setAnnouncementKey] = useState(0);\n const previousText = useRef(props.text);\n const handleDismissRequest = useCallback(() => setVisible(false), []);\n const handleExited = useCallback(() => {\n setMounted(false);\n onDismiss?.();\n }, [onDismiss]);\n\n useEffect(() => {\n if (previousText.current === props.text) {\n return;\n }\n\n previousText.current = props.text;\n // Direct Snackbars do not have a Provider-generated instance id, so text changes advance this\n // key to schedule a fresh announcement and restart the semantic duration.\n setMounted(true);\n setVisible(true);\n setAnnouncementKey((key) => key + 1);\n }, [props.text]);\n\n if (!mounted) {\n return null;\n }\n\n return (\n <SnackbarInternal\n {...props}\n announcementKey={announcementKey}\n visible={visible}\n onDismissRequest={handleDismissRequest}\n onExited={handleExited}\n />\n );\n};\n"],"names":["SnackbarInternal","action","announcementKey","duration","loading","media","onDismissRequest","onExited","sentiment","text","timeout","visible","formatMessage","useIntl","clearSwipePosition","containerRef","handleClickCapture","handlePointerCancel","handlePointerDown","handlePointerMove","handlePointerUp","useSnackbarSwipeDismiss","handleBlur","handleFocus","handleMouseEnter","handleMouseLeave","surfaceRef","useSnackbarAutoDismiss","resetKey","handleExited","handleActionClick","event","handleClick","onClick","renderMedia","_jsx","ProcessIndicator","className","size","children","Tags","StatusIcon","useEffect","undefined","handleKeyDown","key","defaultPrevented","document","addEventListener","removeEventListener","ref","CSSTransition","appear","nodeRef","in","classNames","SNACKBAR_ENTER_DURATION","enter","exit","SNACKBAR_EXIT_DURATION","unmountOnExit","PrimitivePrompt","emphasis","onDismiss","onBlur","onFocus","onMouseEnter","onMouseLeave","onClickCapture","onPointerCancel","onPointerDown","onPointerMove","onPointerUp","_jsxs","LiveRegion","announceOnChange","Body","as","messages","escapeDismissHint","Button","v2","priority","href","target","label","Snackbar","props","mounted","setMounted","useState","setVisible","setAnnouncementKey","previousText","useRef","handleDismissRequest","useCallback","current"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SnackbarContext.js","sources":["../../src/Snackbar/SnackbarContext.ts"],"sourcesContent":["import { createContext } from 'react';\n\nimport {
|
|
1
|
+
{"version":3,"file":"SnackbarContext.js","sources":["../../src/Snackbar/SnackbarContext.ts"],"sourcesContent":["import { createContext } from 'react';\n\nimport type { SnackbarCreationProps } from './Snackbar.types';\n\nexport type SnackbarContextType = {\n createSnackbar: (props: SnackbarCreationProps) => void;\n};\n\nexport const SnackbarContext = createContext<SnackbarContextType>({ createSnackbar: () => {} });\n\nexport const SnackbarConsumer = SnackbarContext.Consumer;\n"],"names":["SnackbarContext","createContext","createSnackbar","SnackbarConsumer","Consumer"],"mappings":";;;;AAQO,MAAMA,eAAe,gBAAGC,mBAAa,CAAsB;EAAEC,cAAc,EAAEA,MAAK,CAAE;AAAC,CAAE;AAEvF,MAAMC,gBAAgB,GAAGH,eAAe,CAACI;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SnackbarContext.mjs","sources":["../../src/Snackbar/SnackbarContext.ts"],"sourcesContent":["import { createContext } from 'react';\n\nimport {
|
|
1
|
+
{"version":3,"file":"SnackbarContext.mjs","sources":["../../src/Snackbar/SnackbarContext.ts"],"sourcesContent":["import { createContext } from 'react';\n\nimport type { SnackbarCreationProps } from './Snackbar.types';\n\nexport type SnackbarContextType = {\n createSnackbar: (props: SnackbarCreationProps) => void;\n};\n\nexport const SnackbarContext = createContext<SnackbarContextType>({ createSnackbar: () => {} });\n\nexport const SnackbarConsumer = SnackbarContext.Consumer;\n"],"names":["SnackbarContext","createContext","createSnackbar","SnackbarConsumer","Consumer"],"mappings":";;AAQO,MAAMA,eAAe,gBAAGC,aAAa,CAAsB;EAAEC,cAAc,EAAEA,MAAK,CAAE;AAAC,CAAE;AAEvF,MAAMC,gBAAgB,GAAGH,eAAe,CAACI;;"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var React = require('react');
|
|
4
|
+
var WithNextPortal = require('../WithNextPortal/WithNextPortal.js');
|
|
5
|
+
var Snackbar = require('./Snackbar.js');
|
|
6
|
+
var useSnackbarManager = require('./useSnackbarManager.js');
|
|
7
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
8
|
+
|
|
9
|
+
const PortalledSnackbar = WithNextPortal.default(Snackbar.SnackbarInternal);
|
|
10
|
+
const hasSnackbarText = text => text !== null && text !== undefined && text !== '';
|
|
11
|
+
const SnackbarPortal = ({
|
|
12
|
+
action,
|
|
13
|
+
duration,
|
|
14
|
+
loading,
|
|
15
|
+
media,
|
|
16
|
+
onDismiss,
|
|
17
|
+
sentiment,
|
|
18
|
+
text,
|
|
19
|
+
theme,
|
|
20
|
+
timeout,
|
|
21
|
+
timestamp
|
|
22
|
+
}) => {
|
|
23
|
+
const hasText = hasSnackbarText(text);
|
|
24
|
+
const previousTimestamp = React.useRef(timestamp);
|
|
25
|
+
const previousText = React.useRef(text);
|
|
26
|
+
const isInitialRender = React.useRef(true);
|
|
27
|
+
const {
|
|
28
|
+
active,
|
|
29
|
+
announcementKey,
|
|
30
|
+
dismissSnackbar,
|
|
31
|
+
handleExited,
|
|
32
|
+
showSnackbar,
|
|
33
|
+
updateSnackbar,
|
|
34
|
+
visible
|
|
35
|
+
} = useSnackbarManager.default(hasText ? {
|
|
36
|
+
action,
|
|
37
|
+
duration,
|
|
38
|
+
loading,
|
|
39
|
+
media,
|
|
40
|
+
onDismiss,
|
|
41
|
+
sentiment,
|
|
42
|
+
text,
|
|
43
|
+
theme,
|
|
44
|
+
timeout
|
|
45
|
+
} : undefined);
|
|
46
|
+
React.useEffect(() => {
|
|
47
|
+
if (isInitialRender.current) {
|
|
48
|
+
isInitialRender.current = false;
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
if (!hasText) {
|
|
52
|
+
dismissSnackbar();
|
|
53
|
+
previousTimestamp.current = timestamp;
|
|
54
|
+
previousText.current = text;
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
const snackbar = {
|
|
58
|
+
action,
|
|
59
|
+
duration,
|
|
60
|
+
loading,
|
|
61
|
+
media,
|
|
62
|
+
onDismiss,
|
|
63
|
+
sentiment,
|
|
64
|
+
text,
|
|
65
|
+
theme,
|
|
66
|
+
timeout
|
|
67
|
+
};
|
|
68
|
+
if (timestamp === undefined) {
|
|
69
|
+
// Without the legacy identity prop, update in place so recreated callbacks/media do not
|
|
70
|
+
// repeatedly restart the exit animation or auto-dismiss timer.
|
|
71
|
+
updateSnackbar(snackbar, !hasSnackbarText(previousText.current));
|
|
72
|
+
} else if (!hasSnackbarText(previousText.current) || previousTimestamp.current !== timestamp) {
|
|
73
|
+
showSnackbar(snackbar);
|
|
74
|
+
}
|
|
75
|
+
previousTimestamp.current = timestamp;
|
|
76
|
+
previousText.current = text;
|
|
77
|
+
}, [dismissSnackbar, showSnackbar, action, duration, hasText, loading, media, onDismiss, sentiment, text, theme, timeout, timestamp, updateSnackbar]);
|
|
78
|
+
if (!active) {
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
return /*#__PURE__*/jsxRuntime.jsx(PortalledSnackbar, {
|
|
82
|
+
...active.props,
|
|
83
|
+
announcementKey: announcementKey,
|
|
84
|
+
visible: visible,
|
|
85
|
+
onDismissRequest: dismissSnackbar,
|
|
86
|
+
onExited: handleExited
|
|
87
|
+
});
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
exports.PortalledSnackbar = PortalledSnackbar;
|
|
91
|
+
exports.SnackbarPortal = SnackbarPortal;
|
|
92
|
+
//# sourceMappingURL=SnackbarPortal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SnackbarPortal.js","sources":["../../src/Snackbar/SnackbarPortal.tsx"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport withNextPortal from '../WithNextPortal/WithNextPortal';\nimport { SnackbarInternal } from './Snackbar';\nimport type { SnackbarPortalProps } from './Snackbar.types';\nimport useSnackbarManager from './useSnackbarManager';\n\nexport const PortalledSnackbar = withNextPortal(SnackbarInternal);\n\nconst hasSnackbarText = (text: SnackbarPortalProps['text']) =>\n text !== null && text !== undefined && text !== '';\n\nexport const SnackbarPortal = ({\n action,\n duration,\n loading,\n media,\n onDismiss,\n sentiment,\n text,\n theme,\n timeout,\n timestamp,\n}: SnackbarPortalProps) => {\n const hasText = hasSnackbarText(text);\n const previousTimestamp = useRef(timestamp);\n const previousText = useRef(text);\n const isInitialRender = useRef(true);\n const {\n active,\n announcementKey,\n dismissSnackbar,\n handleExited,\n showSnackbar,\n updateSnackbar,\n visible,\n } = useSnackbarManager(\n hasText\n ? { action, duration, loading, media, onDismiss, sentiment, text, theme, timeout }\n : undefined,\n );\n\n useEffect(() => {\n if (isInitialRender.current) {\n isInitialRender.current = false;\n return;\n }\n\n if (!hasText) {\n dismissSnackbar();\n previousTimestamp.current = timestamp;\n previousText.current = text;\n return;\n }\n\n const snackbar = {\n action,\n duration,\n loading,\n media,\n onDismiss,\n sentiment,\n text,\n theme,\n timeout,\n };\n\n if (timestamp === undefined) {\n // Without the legacy identity prop, update in place so recreated callbacks/media do not\n // repeatedly restart the exit animation or auto-dismiss timer.\n updateSnackbar(snackbar, !hasSnackbarText(previousText.current));\n } else if (!hasSnackbarText(previousText.current) || previousTimestamp.current !== timestamp) {\n showSnackbar(snackbar);\n }\n\n previousTimestamp.current = timestamp;\n previousText.current = text;\n }, [\n dismissSnackbar,\n showSnackbar,\n action,\n duration,\n hasText,\n loading,\n media,\n onDismiss,\n sentiment,\n text,\n theme,\n timeout,\n timestamp,\n updateSnackbar,\n ]);\n\n if (!active) {\n return null;\n }\n\n return (\n <PortalledSnackbar\n {...active.props}\n announcementKey={announcementKey}\n visible={visible}\n onDismissRequest={dismissSnackbar}\n onExited={handleExited}\n />\n );\n};\n\nexport default SnackbarPortal;\n"],"names":["PortalledSnackbar","withNextPortal","SnackbarInternal","hasSnackbarText","text","undefined","SnackbarPortal","action","duration","loading","media","onDismiss","sentiment","theme","timeout","timestamp","hasText","previousTimestamp","useRef","previousText","isInitialRender","active","announcementKey","dismissSnackbar","handleExited","showSnackbar","updateSnackbar","visible","useSnackbarManager","useEffect","current","snackbar","_jsx","props","onDismissRequest","onExited"],"mappings":";;;;;;;;MAOaA,iBAAiB,GAAGC,sBAAc,CAACC,yBAAgB;AAEhE,MAAMC,eAAe,GAAIC,IAAiC,IACxDA,IAAI,KAAK,IAAI,IAAIA,IAAI,KAAKC,SAAS,IAAID,IAAI,KAAK,EAAE;AAE7C,MAAME,cAAc,GAAGA,CAAC;EAC7BC,MAAM;EACNC,QAAQ;EACRC,OAAO;EACPC,KAAK;EACLC,SAAS;EACTC,SAAS;EACTR,IAAI;EACJS,KAAK;EACLC,OAAO;AACPC,EAAAA;AAAS,CACW,KAAI;AACxB,EAAA,MAAMC,OAAO,GAAGb,eAAe,CAACC,IAAI,CAAC;AACrC,EAAA,MAAMa,iBAAiB,GAAGC,YAAM,CAACH,SAAS,CAAC;AAC3C,EAAA,MAAMI,YAAY,GAAGD,YAAM,CAACd,IAAI,CAAC;AACjC,EAAA,MAAMgB,eAAe,GAAGF,YAAM,CAAC,IAAI,CAAC;EACpC,MAAM;IACJG,MAAM;IACNC,eAAe;IACfC,eAAe;IACfC,YAAY;IACZC,YAAY;IACZC,cAAc;AACdC,IAAAA;GACD,GAAGC,0BAAkB,CACpBZ,OAAO,GACH;IAAET,MAAM;IAAEC,QAAQ;IAAEC,OAAO;IAAEC,KAAK;IAAEC,SAAS;IAAEC,SAAS;IAAER,IAAI;IAAES,KAAK;AAAEC,IAAAA;GAAS,GAChFT,SAAS,CACd;AAEDwB,EAAAA,eAAS,CAAC,MAAK;IACb,IAAIT,eAAe,CAACU,OAAO,EAAE;MAC3BV,eAAe,CAACU,OAAO,GAAG,KAAK;AAC/B,MAAA;AACF,IAAA;IAEA,IAAI,CAACd,OAAO,EAAE;AACZO,MAAAA,eAAe,EAAE;MACjBN,iBAAiB,CAACa,OAAO,GAAGf,SAAS;MACrCI,YAAY,CAACW,OAAO,GAAG1B,IAAI;AAC3B,MAAA;AACF,IAAA;AAEA,IAAA,MAAM2B,QAAQ,GAAG;MACfxB,MAAM;MACNC,QAAQ;MACRC,OAAO;MACPC,KAAK;MACLC,SAAS;MACTC,SAAS;MACTR,IAAI;MACJS,KAAK;AACLC,MAAAA;KACD;IAED,IAAIC,SAAS,KAAKV,SAAS,EAAE;AAC3B;AACA;MACAqB,cAAc,CAACK,QAAQ,EAAE,CAAC5B,eAAe,CAACgB,YAAY,CAACW,OAAO,CAAC,CAAC;AAClE,IAAA,CAAC,MAAM,IAAI,CAAC3B,eAAe,CAACgB,YAAY,CAACW,OAAO,CAAC,IAAIb,iBAAiB,CAACa,OAAO,KAAKf,SAAS,EAAE;MAC5FU,YAAY,CAACM,QAAQ,CAAC;AACxB,IAAA;IAEAd,iBAAiB,CAACa,OAAO,GAAGf,SAAS;IACrCI,YAAY,CAACW,OAAO,GAAG1B,IAAI;AAC7B,EAAA,CAAC,EAAE,CACDmB,eAAe,EACfE,YAAY,EACZlB,MAAM,EACNC,QAAQ,EACRQ,OAAO,EACPP,OAAO,EACPC,KAAK,EACLC,SAAS,EACTC,SAAS,EACTR,IAAI,EACJS,KAAK,EACLC,OAAO,EACPC,SAAS,EACTW,cAAc,CACf,CAAC;EAEF,IAAI,CAACL,MAAM,EAAE;AACX,IAAA,OAAO,IAAI;AACb,EAAA;EAEA,oBACEW,cAAA,CAAChC,iBAAiB,EAAA;IAAA,GACZqB,MAAM,CAACY,KAAK;AAChBX,IAAAA,eAAe,EAAEA,eAAgB;AACjCK,IAAAA,OAAO,EAAEA,OAAQ;AACjBO,IAAAA,gBAAgB,EAAEX,eAAgB;AAClCY,IAAAA,QAAQ,EAAEX;AAAa,GAAA,CACvB;AAEN;;;"}
|