@transferwise/components 0.0.0-experimental-def0600 → 0.0.0-experimental-f4ca4fa

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 (109) hide show
  1. package/build/Prompt/PrimitivePrompt/PrimitivePrompt.js +2 -1
  2. package/build/Prompt/PrimitivePrompt/PrimitivePrompt.js.map +1 -1
  3. package/build/Prompt/PrimitivePrompt/PrimitivePrompt.mjs +2 -1
  4. package/build/Prompt/PrimitivePrompt/PrimitivePrompt.mjs.map +1 -1
  5. package/build/Provider/Provider.js +24 -1
  6. package/build/Provider/Provider.js.map +1 -1
  7. package/build/Provider/Provider.mjs +24 -1
  8. package/build/Provider/Provider.mjs.map +1 -1
  9. package/build/Snackbar/Snackbar.js +179 -102
  10. package/build/Snackbar/Snackbar.js.map +1 -1
  11. package/build/Snackbar/Snackbar.messages.js +14 -0
  12. package/build/Snackbar/Snackbar.messages.js.map +1 -0
  13. package/build/Snackbar/Snackbar.messages.mjs +10 -0
  14. package/build/Snackbar/Snackbar.messages.mjs.map +1 -0
  15. package/build/Snackbar/Snackbar.mjs +181 -101
  16. package/build/Snackbar/Snackbar.mjs.map +1 -1
  17. package/build/Snackbar/SnackbarContext.js.map +1 -1
  18. package/build/Snackbar/SnackbarContext.mjs.map +1 -1
  19. package/build/Snackbar/SnackbarPortal.js +12 -0
  20. package/build/Snackbar/SnackbarPortal.js.map +1 -0
  21. package/build/Snackbar/SnackbarPortal.mjs +8 -0
  22. package/build/Snackbar/SnackbarPortal.mjs.map +1 -0
  23. package/build/Snackbar/SnackbarProvider.js +24 -28
  24. package/build/Snackbar/SnackbarProvider.js.map +1 -1
  25. package/build/Snackbar/SnackbarProvider.mjs +25 -29
  26. package/build/Snackbar/SnackbarProvider.mjs.map +1 -1
  27. package/build/Snackbar/constants.js +17 -0
  28. package/build/Snackbar/constants.js.map +1 -0
  29. package/build/Snackbar/constants.mjs +11 -0
  30. package/build/Snackbar/constants.mjs.map +1 -0
  31. package/build/Snackbar/useSnackbarAutoDismiss.js +66 -0
  32. package/build/Snackbar/useSnackbarAutoDismiss.js.map +1 -0
  33. package/build/Snackbar/useSnackbarAutoDismiss.mjs +62 -0
  34. package/build/Snackbar/useSnackbarAutoDismiss.mjs.map +1 -0
  35. package/build/Snackbar/useSnackbarManager.js +153 -0
  36. package/build/Snackbar/useSnackbarManager.js.map +1 -0
  37. package/build/Snackbar/useSnackbarManager.mjs +149 -0
  38. package/build/Snackbar/useSnackbarManager.mjs.map +1 -0
  39. package/build/Snackbar/useSnackbarSwipeDismiss.js +135 -0
  40. package/build/Snackbar/useSnackbarSwipeDismiss.js.map +1 -0
  41. package/build/Snackbar/useSnackbarSwipeDismiss.mjs +131 -0
  42. package/build/Snackbar/useSnackbarSwipeDismiss.mjs.map +1 -0
  43. package/build/i18n/en.json +1 -0
  44. package/build/i18n/en.json.js +1 -0
  45. package/build/i18n/en.json.js.map +1 -1
  46. package/build/i18n/en.json.mjs +1 -0
  47. package/build/i18n/en.json.mjs.map +1 -1
  48. package/build/main.css +119 -57
  49. package/build/styles/IconButton/IconButton.css +3 -4
  50. package/build/styles/Snackbar/Snackbar.css +117 -54
  51. package/build/styles/main.css +119 -57
  52. package/build/types/Prompt/PrimitivePrompt/PrimitivePrompt.d.ts +11 -0
  53. package/build/types/Prompt/PrimitivePrompt/PrimitivePrompt.d.ts.map +1 -1
  54. package/build/types/Snackbar/Snackbar.d.ts +55 -9
  55. package/build/types/Snackbar/Snackbar.d.ts.map +1 -1
  56. package/build/types/Snackbar/Snackbar.messages.d.ts +9 -0
  57. package/build/types/Snackbar/Snackbar.messages.d.ts.map +1 -0
  58. package/build/types/Snackbar/Snackbar.types.d.ts +12 -0
  59. package/build/types/Snackbar/Snackbar.types.d.ts.map +1 -0
  60. package/build/types/Snackbar/SnackbarContext.d.ts +2 -2
  61. package/build/types/Snackbar/SnackbarContext.d.ts.map +1 -1
  62. package/build/types/Snackbar/SnackbarPortal.d.ts +4 -0
  63. package/build/types/Snackbar/SnackbarPortal.d.ts.map +1 -0
  64. package/build/types/Snackbar/SnackbarProvider.d.ts +7 -0
  65. package/build/types/Snackbar/SnackbarProvider.d.ts.map +1 -1
  66. package/build/types/Snackbar/constants.d.ts +9 -0
  67. package/build/types/Snackbar/constants.d.ts.map +1 -0
  68. package/build/types/Snackbar/index.d.ts +1 -1
  69. package/build/types/Snackbar/index.d.ts.map +1 -1
  70. package/build/types/Snackbar/useSnackbar.d.ts +1 -1
  71. package/build/types/Snackbar/useSnackbar.d.ts.map +1 -1
  72. package/build/types/Snackbar/useSnackbarAutoDismiss.d.ts +13 -0
  73. package/build/types/Snackbar/useSnackbarAutoDismiss.d.ts.map +1 -0
  74. package/build/types/Snackbar/useSnackbarManager.d.ts +20 -0
  75. package/build/types/Snackbar/useSnackbarManager.d.ts.map +1 -0
  76. package/build/types/Snackbar/useSnackbarSwipeDismiss.d.ts +22 -0
  77. package/build/types/Snackbar/useSnackbarSwipeDismiss.d.ts.map +1 -0
  78. package/build/types/index.d.ts +1 -1
  79. package/build/types/index.d.ts.map +1 -1
  80. package/build/types/test-utils/index.d.ts +2 -0
  81. package/build/types/test-utils/index.d.ts.map +1 -1
  82. package/package.json +1 -1
  83. package/src/IconButton/IconButton.css +3 -4
  84. package/src/IconButton/IconButton.less +14 -1
  85. package/src/Prompt/PrimitivePrompt/PrimitivePrompt.test.tsx +24 -1
  86. package/src/Prompt/PrimitivePrompt/PrimitivePrompt.tsx +8 -2
  87. package/src/Provider/Provider.tsx +1 -1
  88. package/src/Snackbar/Snackbar.css +117 -54
  89. package/src/Snackbar/Snackbar.less +139 -60
  90. package/src/Snackbar/Snackbar.messages.ts +9 -0
  91. package/src/Snackbar/Snackbar.test.tsx +992 -119
  92. package/src/Snackbar/Snackbar.tsx +209 -93
  93. package/src/Snackbar/Snackbar.types.ts +17 -0
  94. package/src/Snackbar/SnackbarContext.ts +2 -2
  95. package/src/Snackbar/SnackbarPortal.tsx +8 -0
  96. package/src/Snackbar/SnackbarProvider.test.tsx +783 -0
  97. package/src/Snackbar/SnackbarProvider.tsx +27 -19
  98. package/src/Snackbar/_stories/Snackbar.accessibility.docs.mdx +58 -0
  99. package/src/Snackbar/_stories/Snackbar.rtl.test.story.tsx +16 -8
  100. package/src/Snackbar/_stories/Snackbar.story.tsx +388 -61
  101. package/src/Snackbar/_stories/Snackbar.test.story.tsx +171 -47
  102. package/src/Snackbar/constants.ts +10 -0
  103. package/src/Snackbar/index.ts +1 -1
  104. package/src/Snackbar/useSnackbarAutoDismiss.ts +74 -0
  105. package/src/Snackbar/useSnackbarManager.ts +169 -0
  106. package/src/Snackbar/useSnackbarSwipeDismiss.ts +169 -0
  107. package/src/i18n/en.json +1 -0
  108. package/src/index.ts +1 -1
  109. package/src/main.css +119 -57
@@ -15,6 +15,7 @@ const PrimitivePrompt = /*#__PURE__*/React.forwardRef(({
15
15
  media,
16
16
  actions,
17
17
  onDismiss,
18
+ dismissButtonPriority = 'secondary',
18
19
  className,
19
20
  children,
20
21
  ...restProps
@@ -37,7 +38,7 @@ const PrimitivePrompt = /*#__PURE__*/React.forwardRef(({
37
38
  children: media
38
39
  }), children, onDismiss && /*#__PURE__*/jsxRuntime.jsx(IconButton.default, {
39
40
  size: 24,
40
- priority: "secondary",
41
+ priority: dismissButtonPriority,
41
42
  "aria-label": intl.formatMessage(CloseButton_messages.default.ariaLabel),
42
43
  className: "wds-prompt__dismiss",
43
44
  onClick: onDismiss,
@@ -1 +1 @@
1
- {"version":3,"file":"PrimitivePrompt.js","sources":["../../../src/Prompt/PrimitivePrompt/PrimitivePrompt.tsx"],"sourcesContent":["import { Cross } from '@transferwise/icons';\nimport { clsx } from 'clsx';\nimport SentimentSurface, { Emphasis, Sentiment } from '../../SentimentSurface';\nimport IconButton from '../../IconButton';\nimport { useIntl } from 'react-intl';\nimport closeBtnMessages from '../../common/CloseButton/CloseButton.messages';\nimport { forwardRef, HTMLAttributes, ReactNode } from 'react';\n\nexport type PrimitivePromptProps = HTMLAttributes<HTMLDivElement> & {\n /**\n * The sentiment determines the colour scheme.\n * @default success\n */\n sentiment?: Sentiment;\n /**\n * The emphasis level affecting background and text contrast.\n * @default 'base'\n */\n emphasis?: Emphasis;\n /**\n * Media to be displayed on the prompt (icon/image/etc).\n */\n media: ReactNode;\n /**\n * Any actions to be displayed on the prompt.\n */\n actions?: ReactNode;\n /**\n * Handler called when the close button is clicked. If not provided, then the close button is hidden.\n */\n onDismiss?: () => void;\n /**\n * Test ID for testing tools\n */\n 'data-testid'?: string;\n};\n\n/**\n * PrimitivePrompt is a low-level component that provides the structure, sentiment support and styling for various prompts.\n * Uses several css variables to handle styling from within the consuming component, e.g. --Prompt-padding-x. */\nexport const PrimitivePrompt = forwardRef<HTMLDivElement, PrimitivePromptProps>(\n (\n {\n sentiment = 'success',\n emphasis = 'base',\n media,\n actions,\n onDismiss,\n className,\n children,\n ...restProps\n },\n ref,\n ) => {\n const intl = useIntl();\n\n return (\n <SentimentSurface\n // @ts-expect-error - SentimentSurface forwardRef types don't expose ref in props\n ref={ref}\n sentiment={sentiment}\n emphasis={emphasis}\n className={clsx('wds-prompt', `wds-prompt--${sentiment}`, className)}\n {...restProps}\n >\n <div\n className={clsx('wds-prompt__content-wrapper', {\n 'wds-prompt__content-wrapper--with-dismiss': !!onDismiss,\n })}\n >\n <div className={clsx('wds-prompt__media-wrapper')}>{media}</div>\n {children}\n {onDismiss && (\n <IconButton\n size={24}\n priority=\"secondary\"\n aria-label={intl.formatMessage(closeBtnMessages.ariaLabel)}\n className=\"wds-prompt__dismiss\"\n onClick={onDismiss}\n >\n <Cross />\n </IconButton>\n )}\n {actions && <div className=\"wds-prompt__actions-wrapper\">{actions}</div>}\n </div>\n </SentimentSurface>\n );\n },\n);\n\nPrimitivePrompt.displayName = 'PrimitivePrompt';\n"],"names":["PrimitivePrompt","forwardRef","sentiment","emphasis","media","actions","onDismiss","className","children","restProps","ref","intl","useIntl","_jsx","SentimentSurface","clsx","_jsxs","IconButton","size","priority","formatMessage","closeBtnMessages","ariaLabel","onClick","Cross","displayName"],"mappings":";;;;;;;;;;;AAwCO,MAAMA,eAAe,gBAAGC,gBAAU,CACvC,CACE;AACEC,EAAAA,SAAS,GAAG,SAAS;AACrBC,EAAAA,QAAQ,GAAG,MAAM;EACjBC,KAAK;EACLC,OAAO;EACPC,SAAS;EACTC,SAAS;EACTC,QAAQ;EACR,GAAGC;AAAS,CACb,EACDC,GAAG,KACD;AACF,EAAA,MAAMC,IAAI,GAAGC,iBAAO,EAAE;AAEtB,EAAA,oBACEC,cAAA,CAACC;AACC;AAAA,IAAA;AACAJ,IAAAA,GAAG,EAAEA,GAAI;AACTR,IAAAA,SAAS,EAAEA,SAAU;AACrBC,IAAAA,QAAQ,EAAEA,QAAS;IACnBI,SAAS,EAAEQ,SAAI,CAAC,YAAY,EAAE,eAAeb,SAAS,CAAA,CAAE,EAAEK,SAAS,CAAE;AAAA,IAAA,GACjEE,SAAS;AAAAD,IAAAA,QAAA,eAEbQ,eAAA,CAAA,KAAA,EAAA;AACET,MAAAA,SAAS,EAAEQ,SAAI,CAAC,6BAA6B,EAAE;QAC7C,2CAA2C,EAAE,CAAC,CAACT;AAChD,OAAA,CAAE;AAAAE,MAAAA,QAAA,gBAEHK,cAAA,CAAA,KAAA,EAAA;AAAKN,QAAAA,SAAS,EAAEQ,SAAI,CAAC,2BAA2B,CAAE;AAAAP,QAAAA,QAAA,EAAEJ;OAAW,CAC/D,EAACI,QAAQ,EACRF,SAAS,iBACRO,cAAA,CAACI,kBAAU,EAAA;AACTC,QAAAA,IAAI,EAAE,EAAG;AACTC,QAAAA,QAAQ,EAAC,WAAW;AACpB,QAAA,YAAA,EAAYR,IAAI,CAACS,aAAa,CAACC,4BAAgB,CAACC,SAAS,CAAE;AAC3Df,QAAAA,SAAS,EAAC,qBAAqB;AAC/BgB,QAAAA,OAAO,EAAEjB,SAAU;AAAAE,QAAAA,QAAA,eAEnBK,cAAA,CAACW,WAAK,EAAA,EAAA;AACR,OAAY,CACb,EACAnB,OAAO,iBAAIQ,cAAA,CAAA,KAAA,EAAA;AAAKN,QAAAA,SAAS,EAAC,6BAA6B;AAAAC,QAAAA,QAAA,EAAEH;AAAO,OAAM,CAAC;KACrE;AACP,GAAkB,CAAC;AAEvB,CAAC;AAGHL,eAAe,CAACyB,WAAW,GAAG,iBAAiB;;"}
1
+ {"version":3,"file":"PrimitivePrompt.js","sources":["../../../src/Prompt/PrimitivePrompt/PrimitivePrompt.tsx"],"sourcesContent":["import { Cross } from '@transferwise/icons';\nimport { clsx } from 'clsx';\nimport SentimentSurface, { Emphasis, Sentiment } from '../../SentimentSurface';\nimport IconButton, { type IconButtonProps } from '../../IconButton';\nimport { useIntl } from 'react-intl';\nimport closeBtnMessages from '../../common/CloseButton/CloseButton.messages';\nimport { forwardRef, HTMLAttributes, ReactNode } from 'react';\n\nexport type PrimitivePromptProps = HTMLAttributes<HTMLDivElement> & {\n /**\n * The sentiment determines the colour scheme.\n * @default success\n */\n sentiment?: Sentiment;\n /**\n * The emphasis level affecting background and text contrast.\n * @default 'base'\n */\n emphasis?: Emphasis;\n /**\n * Media to be displayed on the prompt (icon/image/etc).\n */\n media: ReactNode;\n /**\n * Any actions to be displayed on the prompt.\n */\n actions?: ReactNode;\n /**\n * Handler called when the close button is clicked. If not provided, then the close button is hidden.\n */\n onDismiss?: () => void;\n /**\n * The priority of the dismiss IconButton.\n * @default 'secondary'\n */\n dismissButtonPriority?: IconButtonProps['priority'];\n /**\n * Test ID for testing tools\n */\n 'data-testid'?: string;\n};\n\n/**\n * PrimitivePrompt is a low-level component that provides the structure, sentiment support and styling for various prompts.\n * Uses several css variables to handle styling from within the consuming component, e.g. --Prompt-padding-x. */\nexport const PrimitivePrompt = forwardRef<HTMLDivElement, PrimitivePromptProps>(\n (\n {\n sentiment = 'success',\n emphasis = 'base',\n media,\n actions,\n onDismiss,\n dismissButtonPriority = 'secondary',\n className,\n children,\n ...restProps\n },\n ref,\n ) => {\n const intl = useIntl();\n\n return (\n <SentimentSurface\n // @ts-expect-error - SentimentSurface forwardRef types don't expose ref in props\n ref={ref}\n sentiment={sentiment}\n emphasis={emphasis}\n className={clsx('wds-prompt', `wds-prompt--${sentiment}`, className)}\n {...restProps}\n >\n <div\n className={clsx('wds-prompt__content-wrapper', {\n 'wds-prompt__content-wrapper--with-dismiss': !!onDismiss,\n })}\n >\n <div className={clsx('wds-prompt__media-wrapper')}>{media}</div>\n {children}\n {onDismiss && (\n <IconButton\n size={24}\n priority={dismissButtonPriority}\n aria-label={intl.formatMessage(closeBtnMessages.ariaLabel)}\n className=\"wds-prompt__dismiss\"\n onClick={onDismiss}\n >\n <Cross />\n </IconButton>\n )}\n {actions && <div className=\"wds-prompt__actions-wrapper\">{actions}</div>}\n </div>\n </SentimentSurface>\n );\n },\n);\n\nPrimitivePrompt.displayName = 'PrimitivePrompt';\n"],"names":["PrimitivePrompt","forwardRef","sentiment","emphasis","media","actions","onDismiss","dismissButtonPriority","className","children","restProps","ref","intl","useIntl","_jsx","SentimentSurface","clsx","_jsxs","IconButton","size","priority","formatMessage","closeBtnMessages","ariaLabel","onClick","Cross","displayName"],"mappings":";;;;;;;;;;;AA6CO,MAAMA,eAAe,gBAAGC,gBAAU,CACvC,CACE;AACEC,EAAAA,SAAS,GAAG,SAAS;AACrBC,EAAAA,QAAQ,GAAG,MAAM;EACjBC,KAAK;EACLC,OAAO;EACPC,SAAS;AACTC,EAAAA,qBAAqB,GAAG,WAAW;EACnCC,SAAS;EACTC,QAAQ;EACR,GAAGC;AAAS,CACb,EACDC,GAAG,KACD;AACF,EAAA,MAAMC,IAAI,GAAGC,iBAAO,EAAE;AAEtB,EAAA,oBACEC,cAAA,CAACC;AACC;AAAA,IAAA;AACAJ,IAAAA,GAAG,EAAEA,GAAI;AACTT,IAAAA,SAAS,EAAEA,SAAU;AACrBC,IAAAA,QAAQ,EAAEA,QAAS;IACnBK,SAAS,EAAEQ,SAAI,CAAC,YAAY,EAAE,eAAed,SAAS,CAAA,CAAE,EAAEM,SAAS,CAAE;AAAA,IAAA,GACjEE,SAAS;AAAAD,IAAAA,QAAA,eAEbQ,eAAA,CAAA,KAAA,EAAA;AACET,MAAAA,SAAS,EAAEQ,SAAI,CAAC,6BAA6B,EAAE;QAC7C,2CAA2C,EAAE,CAAC,CAACV;AAChD,OAAA,CAAE;AAAAG,MAAAA,QAAA,gBAEHK,cAAA,CAAA,KAAA,EAAA;AAAKN,QAAAA,SAAS,EAAEQ,SAAI,CAAC,2BAA2B,CAAE;AAAAP,QAAAA,QAAA,EAAEL;OAAW,CAC/D,EAACK,QAAQ,EACRH,SAAS,iBACRQ,cAAA,CAACI,kBAAU,EAAA;AACTC,QAAAA,IAAI,EAAE,EAAG;AACTC,QAAAA,QAAQ,EAAEb,qBAAsB;AAChC,QAAA,YAAA,EAAYK,IAAI,CAACS,aAAa,CAACC,4BAAgB,CAACC,SAAS,CAAE;AAC3Df,QAAAA,SAAS,EAAC,qBAAqB;AAC/BgB,QAAAA,OAAO,EAAElB,SAAU;AAAAG,QAAAA,QAAA,eAEnBK,cAAA,CAACW,WAAK,EAAA,EAAA;AACR,OAAY,CACb,EACApB,OAAO,iBAAIS,cAAA,CAAA,KAAA,EAAA;AAAKN,QAAAA,SAAS,EAAC,6BAA6B;AAAAC,QAAAA,QAAA,EAAEJ;AAAO,OAAM,CAAC;KACrE;AACP,GAAkB,CAAC;AAEvB,CAAC;AAGHL,eAAe,CAAC0B,WAAW,GAAG,iBAAiB;;"}
@@ -13,6 +13,7 @@ const PrimitivePrompt = /*#__PURE__*/forwardRef(({
13
13
  media,
14
14
  actions,
15
15
  onDismiss,
16
+ dismissButtonPriority = 'secondary',
16
17
  className,
17
18
  children,
18
19
  ...restProps
@@ -35,7 +36,7 @@ const PrimitivePrompt = /*#__PURE__*/forwardRef(({
35
36
  children: media
36
37
  }), children, onDismiss && /*#__PURE__*/jsx(IconButton, {
37
38
  size: 24,
38
- priority: "secondary",
39
+ priority: dismissButtonPriority,
39
40
  "aria-label": intl.formatMessage(closeBtnMessages.ariaLabel),
40
41
  className: "wds-prompt__dismiss",
41
42
  onClick: onDismiss,
@@ -1 +1 @@
1
- {"version":3,"file":"PrimitivePrompt.mjs","sources":["../../../src/Prompt/PrimitivePrompt/PrimitivePrompt.tsx"],"sourcesContent":["import { Cross } from '@transferwise/icons';\nimport { clsx } from 'clsx';\nimport SentimentSurface, { Emphasis, Sentiment } from '../../SentimentSurface';\nimport IconButton from '../../IconButton';\nimport { useIntl } from 'react-intl';\nimport closeBtnMessages from '../../common/CloseButton/CloseButton.messages';\nimport { forwardRef, HTMLAttributes, ReactNode } from 'react';\n\nexport type PrimitivePromptProps = HTMLAttributes<HTMLDivElement> & {\n /**\n * The sentiment determines the colour scheme.\n * @default success\n */\n sentiment?: Sentiment;\n /**\n * The emphasis level affecting background and text contrast.\n * @default 'base'\n */\n emphasis?: Emphasis;\n /**\n * Media to be displayed on the prompt (icon/image/etc).\n */\n media: ReactNode;\n /**\n * Any actions to be displayed on the prompt.\n */\n actions?: ReactNode;\n /**\n * Handler called when the close button is clicked. If not provided, then the close button is hidden.\n */\n onDismiss?: () => void;\n /**\n * Test ID for testing tools\n */\n 'data-testid'?: string;\n};\n\n/**\n * PrimitivePrompt is a low-level component that provides the structure, sentiment support and styling for various prompts.\n * Uses several css variables to handle styling from within the consuming component, e.g. --Prompt-padding-x. */\nexport const PrimitivePrompt = forwardRef<HTMLDivElement, PrimitivePromptProps>(\n (\n {\n sentiment = 'success',\n emphasis = 'base',\n media,\n actions,\n onDismiss,\n className,\n children,\n ...restProps\n },\n ref,\n ) => {\n const intl = useIntl();\n\n return (\n <SentimentSurface\n // @ts-expect-error - SentimentSurface forwardRef types don't expose ref in props\n ref={ref}\n sentiment={sentiment}\n emphasis={emphasis}\n className={clsx('wds-prompt', `wds-prompt--${sentiment}`, className)}\n {...restProps}\n >\n <div\n className={clsx('wds-prompt__content-wrapper', {\n 'wds-prompt__content-wrapper--with-dismiss': !!onDismiss,\n })}\n >\n <div className={clsx('wds-prompt__media-wrapper')}>{media}</div>\n {children}\n {onDismiss && (\n <IconButton\n size={24}\n priority=\"secondary\"\n aria-label={intl.formatMessage(closeBtnMessages.ariaLabel)}\n className=\"wds-prompt__dismiss\"\n onClick={onDismiss}\n >\n <Cross />\n </IconButton>\n )}\n {actions && <div className=\"wds-prompt__actions-wrapper\">{actions}</div>}\n </div>\n </SentimentSurface>\n );\n },\n);\n\nPrimitivePrompt.displayName = 'PrimitivePrompt';\n"],"names":["PrimitivePrompt","forwardRef","sentiment","emphasis","media","actions","onDismiss","className","children","restProps","ref","intl","useIntl","_jsx","SentimentSurface","clsx","_jsxs","IconButton","size","priority","formatMessage","closeBtnMessages","ariaLabel","onClick","Cross","displayName"],"mappings":";;;;;;;;;AAwCO,MAAMA,eAAe,gBAAGC,UAAU,CACvC,CACE;AACEC,EAAAA,SAAS,GAAG,SAAS;AACrBC,EAAAA,QAAQ,GAAG,MAAM;EACjBC,KAAK;EACLC,OAAO;EACPC,SAAS;EACTC,SAAS;EACTC,QAAQ;EACR,GAAGC;AAAS,CACb,EACDC,GAAG,KACD;AACF,EAAA,MAAMC,IAAI,GAAGC,OAAO,EAAE;AAEtB,EAAA,oBACEC,GAAA,CAACC;AACC;AAAA,IAAA;AACAJ,IAAAA,GAAG,EAAEA,GAAI;AACTR,IAAAA,SAAS,EAAEA,SAAU;AACrBC,IAAAA,QAAQ,EAAEA,QAAS;IACnBI,SAAS,EAAEQ,IAAI,CAAC,YAAY,EAAE,eAAeb,SAAS,CAAA,CAAE,EAAEK,SAAS,CAAE;AAAA,IAAA,GACjEE,SAAS;AAAAD,IAAAA,QAAA,eAEbQ,IAAA,CAAA,KAAA,EAAA;AACET,MAAAA,SAAS,EAAEQ,IAAI,CAAC,6BAA6B,EAAE;QAC7C,2CAA2C,EAAE,CAAC,CAACT;AAChD,OAAA,CAAE;AAAAE,MAAAA,QAAA,gBAEHK,GAAA,CAAA,KAAA,EAAA;AAAKN,QAAAA,SAAS,EAAEQ,IAAI,CAAC,2BAA2B,CAAE;AAAAP,QAAAA,QAAA,EAAEJ;OAAW,CAC/D,EAACI,QAAQ,EACRF,SAAS,iBACRO,GAAA,CAACI,UAAU,EAAA;AACTC,QAAAA,IAAI,EAAE,EAAG;AACTC,QAAAA,QAAQ,EAAC,WAAW;AACpB,QAAA,YAAA,EAAYR,IAAI,CAACS,aAAa,CAACC,gBAAgB,CAACC,SAAS,CAAE;AAC3Df,QAAAA,SAAS,EAAC,qBAAqB;AAC/BgB,QAAAA,OAAO,EAAEjB,SAAU;AAAAE,QAAAA,QAAA,eAEnBK,GAAA,CAACW,KAAK,EAAA,EAAA;AACR,OAAY,CACb,EACAnB,OAAO,iBAAIQ,GAAA,CAAA,KAAA,EAAA;AAAKN,QAAAA,SAAS,EAAC,6BAA6B;AAAAC,QAAAA,QAAA,EAAEH;AAAO,OAAM,CAAC;KACrE;AACP,GAAkB,CAAC;AAEvB,CAAC;AAGHL,eAAe,CAACyB,WAAW,GAAG,iBAAiB;;"}
1
+ {"version":3,"file":"PrimitivePrompt.mjs","sources":["../../../src/Prompt/PrimitivePrompt/PrimitivePrompt.tsx"],"sourcesContent":["import { Cross } from '@transferwise/icons';\nimport { clsx } from 'clsx';\nimport SentimentSurface, { Emphasis, Sentiment } from '../../SentimentSurface';\nimport IconButton, { type IconButtonProps } from '../../IconButton';\nimport { useIntl } from 'react-intl';\nimport closeBtnMessages from '../../common/CloseButton/CloseButton.messages';\nimport { forwardRef, HTMLAttributes, ReactNode } from 'react';\n\nexport type PrimitivePromptProps = HTMLAttributes<HTMLDivElement> & {\n /**\n * The sentiment determines the colour scheme.\n * @default success\n */\n sentiment?: Sentiment;\n /**\n * The emphasis level affecting background and text contrast.\n * @default 'base'\n */\n emphasis?: Emphasis;\n /**\n * Media to be displayed on the prompt (icon/image/etc).\n */\n media: ReactNode;\n /**\n * Any actions to be displayed on the prompt.\n */\n actions?: ReactNode;\n /**\n * Handler called when the close button is clicked. If not provided, then the close button is hidden.\n */\n onDismiss?: () => void;\n /**\n * The priority of the dismiss IconButton.\n * @default 'secondary'\n */\n dismissButtonPriority?: IconButtonProps['priority'];\n /**\n * Test ID for testing tools\n */\n 'data-testid'?: string;\n};\n\n/**\n * PrimitivePrompt is a low-level component that provides the structure, sentiment support and styling for various prompts.\n * Uses several css variables to handle styling from within the consuming component, e.g. --Prompt-padding-x. */\nexport const PrimitivePrompt = forwardRef<HTMLDivElement, PrimitivePromptProps>(\n (\n {\n sentiment = 'success',\n emphasis = 'base',\n media,\n actions,\n onDismiss,\n dismissButtonPriority = 'secondary',\n className,\n children,\n ...restProps\n },\n ref,\n ) => {\n const intl = useIntl();\n\n return (\n <SentimentSurface\n // @ts-expect-error - SentimentSurface forwardRef types don't expose ref in props\n ref={ref}\n sentiment={sentiment}\n emphasis={emphasis}\n className={clsx('wds-prompt', `wds-prompt--${sentiment}`, className)}\n {...restProps}\n >\n <div\n className={clsx('wds-prompt__content-wrapper', {\n 'wds-prompt__content-wrapper--with-dismiss': !!onDismiss,\n })}\n >\n <div className={clsx('wds-prompt__media-wrapper')}>{media}</div>\n {children}\n {onDismiss && (\n <IconButton\n size={24}\n priority={dismissButtonPriority}\n aria-label={intl.formatMessage(closeBtnMessages.ariaLabel)}\n className=\"wds-prompt__dismiss\"\n onClick={onDismiss}\n >\n <Cross />\n </IconButton>\n )}\n {actions && <div className=\"wds-prompt__actions-wrapper\">{actions}</div>}\n </div>\n </SentimentSurface>\n );\n },\n);\n\nPrimitivePrompt.displayName = 'PrimitivePrompt';\n"],"names":["PrimitivePrompt","forwardRef","sentiment","emphasis","media","actions","onDismiss","dismissButtonPriority","className","children","restProps","ref","intl","useIntl","_jsx","SentimentSurface","clsx","_jsxs","IconButton","size","priority","formatMessage","closeBtnMessages","ariaLabel","onClick","Cross","displayName"],"mappings":";;;;;;;;;AA6CO,MAAMA,eAAe,gBAAGC,UAAU,CACvC,CACE;AACEC,EAAAA,SAAS,GAAG,SAAS;AACrBC,EAAAA,QAAQ,GAAG,MAAM;EACjBC,KAAK;EACLC,OAAO;EACPC,SAAS;AACTC,EAAAA,qBAAqB,GAAG,WAAW;EACnCC,SAAS;EACTC,QAAQ;EACR,GAAGC;AAAS,CACb,EACDC,GAAG,KACD;AACF,EAAA,MAAMC,IAAI,GAAGC,OAAO,EAAE;AAEtB,EAAA,oBACEC,GAAA,CAACC;AACC;AAAA,IAAA;AACAJ,IAAAA,GAAG,EAAEA,GAAI;AACTT,IAAAA,SAAS,EAAEA,SAAU;AACrBC,IAAAA,QAAQ,EAAEA,QAAS;IACnBK,SAAS,EAAEQ,IAAI,CAAC,YAAY,EAAE,eAAed,SAAS,CAAA,CAAE,EAAEM,SAAS,CAAE;AAAA,IAAA,GACjEE,SAAS;AAAAD,IAAAA,QAAA,eAEbQ,IAAA,CAAA,KAAA,EAAA;AACET,MAAAA,SAAS,EAAEQ,IAAI,CAAC,6BAA6B,EAAE;QAC7C,2CAA2C,EAAE,CAAC,CAACV;AAChD,OAAA,CAAE;AAAAG,MAAAA,QAAA,gBAEHK,GAAA,CAAA,KAAA,EAAA;AAAKN,QAAAA,SAAS,EAAEQ,IAAI,CAAC,2BAA2B,CAAE;AAAAP,QAAAA,QAAA,EAAEL;OAAW,CAC/D,EAACK,QAAQ,EACRH,SAAS,iBACRQ,GAAA,CAACI,UAAU,EAAA;AACTC,QAAAA,IAAI,EAAE,EAAG;AACTC,QAAAA,QAAQ,EAAEb,qBAAsB;AAChC,QAAA,YAAA,EAAYK,IAAI,CAACS,aAAa,CAACC,gBAAgB,CAACC,SAAS,CAAE;AAC3Df,QAAAA,SAAS,EAAC,qBAAqB;AAC/BgB,QAAAA,OAAO,EAAElB,SAAU;AAAAG,QAAAA,QAAA,eAEnBK,GAAA,CAACW,KAAK,EAAA,EAAA;AACR,OAAY,CACb,EACApB,OAAO,iBAAIS,GAAA,CAAA,KAAA,EAAA;AAAKN,QAAAA,SAAS,EAAC,6BAA6B;AAAAC,QAAAA,QAAA,EAAEJ;AAAO,OAAM,CAAC;KACrE;AACP,GAAkB,CAAC;AAEvB,CAAC;AAGHL,eAAe,CAAC0B,WAAW,GAAG,iBAAiB;;"}
@@ -3,10 +3,33 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var reactIntl = require('react-intl');
6
+ require('../common/theme.js');
7
+ require('../common/direction.js');
8
+ require('@transferwise/neptune-tokens');
9
+ require('../common/PropsValues/control.js');
10
+ require('../common/PropsValues/size.js');
11
+ require('../common/PropsValues/typography.js');
12
+ require('../common/PropsValues/width.js');
13
+ require('../common/PropsValues/type.js');
14
+ require('../common/PropsValues/dateMode.js');
15
+ require('../common/PropsValues/monthFormat.js');
16
+ require('../common/PropsValues/position.js');
17
+ require('../common/PropsValues/layouts.js');
18
+ require('../common/PropsValues/status.js');
19
+ require('../common/PropsValues/sentiment.js');
20
+ require('../common/PropsValues/profileType.js');
21
+ require('../common/PropsValues/variant.js');
22
+ require('../common/PropsValues/scroll.js');
23
+ require('../common/PropsValues/markdownNodeType.js');
24
+ require('../common/fileType.js');
6
25
  var index = require('../common/Locale/index.js');
26
+ require('@transferwise/icons');
27
+ require('clsx');
28
+ require('react');
29
+ require('../common/CloseButton/CloseButton.messages.js');
30
+ var jsxRuntime = require('react/jsx-runtime');
7
31
  var en = require('../i18n/en.json.js');
8
32
  var DirectionProvider = require('./Direction/DirectionProvider.js');
9
- var jsxRuntime = require('react/jsx-runtime');
10
33
 
11
34
  function Provider({
12
35
  i18n,
@@ -1 +1 @@
1
- {"version":3,"file":"Provider.js","sources":["../../src/Provider/Provider.tsx"],"sourcesContent":["import { IntlProvider, ResolvedIntlConfig } from 'react-intl';\n\nimport { adjustLocale, DEFAULT_LOCALE, getDirectionFromLocale } from '../common/Locale';\nimport en from '../i18n/en.json';\n\nimport { DirectionProvider } from './Direction';\n\nexport interface ProviderProps {\n i18n: Pick<ResolvedIntlConfig, 'locale' | 'messages'> &\n Partial<Pick<ResolvedIntlConfig, 'defaultRichTextElements'>>;\n children?: React.ReactNode;\n}\n\nexport default function Provider({ i18n, children }: ProviderProps) {\n const { locale, messages, defaultRichTextElements } = i18n;\n const adjustedLocale = adjustLocale(locale);\n let intlConfig;\n\n if (adjustedLocale === null) {\n // eslint-disable-next-line no-console\n console.warn(\n `Unsupported locale value was provided: '${locale}', defaulting to '${DEFAULT_LOCALE}'`,\n );\n\n intlConfig = { locale: DEFAULT_LOCALE, messages: { ...en, ...messages } };\n } else {\n intlConfig = { locale: adjustedLocale, messages };\n }\n\n return (\n <DirectionProvider direction={getDirectionFromLocale(locale)}>\n <IntlProvider\n defaultLocale={DEFAULT_LOCALE}\n locale={intlConfig.locale}\n messages={intlConfig.messages}\n defaultRichTextElements={defaultRichTextElements}\n >\n {children}\n </IntlProvider>\n </DirectionProvider>\n );\n}\n"],"names":["Provider","i18n","children","locale","messages","defaultRichTextElements","adjustedLocale","adjustLocale","intlConfig","console","warn","DEFAULT_LOCALE","en","_jsx","DirectionProvider","direction","getDirectionFromLocale","IntlProvider","defaultLocale"],"mappings":";;;;;;;;;;AAac,SAAUA,QAAQA,CAAC;EAAEC,IAAI;AAAEC,EAAAA;AAAQ,CAAiB,EAAA;EAChE,MAAM;IAAEC,MAAM;IAAEC,QAAQ;AAAEC,IAAAA;AAAuB,GAAE,GAAGJ,IAAI;AAC1D,EAAA,MAAMK,cAAc,GAAGC,kBAAY,CAACJ,MAAM,CAAC;AAC3C,EAAA,IAAIK,UAAU;EAEd,IAAIF,cAAc,KAAK,IAAI,EAAE;AAC3B;IACAG,OAAO,CAACC,IAAI,CACV,CAAA,wCAAA,EAA2CP,MAAM,CAAA,kBAAA,EAAqBQ,oBAAc,GAAG,CACxF;AAEDH,IAAAA,UAAU,GAAG;AAAEL,MAAAA,MAAM,EAAEQ,oBAAc;AAAEP,MAAAA,QAAQ,EAAE;AAAE,QAAA,GAAGQ,UAAE;QAAE,GAAGR;AAAQ;KAAI;AAC3E,EAAA,CAAC,MAAM;AACLI,IAAAA,UAAU,GAAG;AAAEL,MAAAA,MAAM,EAAEG,cAAc;AAAEF,MAAAA;KAAU;AACnD,EAAA;EAEA,oBACES,cAAA,CAACC,mCAAiB,EAAA;AAACC,IAAAA,SAAS,EAAEC,4BAAsB,CAACb,MAAM,CAAE;IAAAD,QAAA,eAC3DW,cAAA,CAACI,sBAAY,EAAA;AACXC,MAAAA,aAAa,EAAEP,oBAAe;MAC9BR,MAAM,EAAEK,UAAU,CAACL,MAAO;MAC1BC,QAAQ,EAAEI,UAAU,CAACJ,QAAS;AAC9BC,MAAAA,uBAAuB,EAAEA,uBAAwB;AAAAH,MAAAA,QAAA,EAEhDA;KACW;AAChB,GAAmB,CAAC;AAExB;;"}
1
+ {"version":3,"file":"Provider.js","sources":["../../src/Provider/Provider.tsx"],"sourcesContent":["import { IntlProvider, ResolvedIntlConfig } from 'react-intl';\n\nimport { adjustLocale, DEFAULT_LOCALE, getDirectionFromLocale } from '../common';\nimport en from '../i18n/en.json';\n\nimport { DirectionProvider } from './Direction';\n\nexport interface ProviderProps {\n i18n: Pick<ResolvedIntlConfig, 'locale' | 'messages'> &\n Partial<Pick<ResolvedIntlConfig, 'defaultRichTextElements'>>;\n children?: React.ReactNode;\n}\n\nexport default function Provider({ i18n, children }: ProviderProps) {\n const { locale, messages, defaultRichTextElements } = i18n;\n const adjustedLocale = adjustLocale(locale);\n let intlConfig;\n\n if (adjustedLocale === null) {\n // eslint-disable-next-line no-console\n console.warn(\n `Unsupported locale value was provided: '${locale}', defaulting to '${DEFAULT_LOCALE}'`,\n );\n\n intlConfig = { locale: DEFAULT_LOCALE, messages: { ...en, ...messages } };\n } else {\n intlConfig = { locale: adjustedLocale, messages };\n }\n\n return (\n <DirectionProvider direction={getDirectionFromLocale(locale)}>\n <IntlProvider\n defaultLocale={DEFAULT_LOCALE}\n locale={intlConfig.locale}\n messages={intlConfig.messages}\n defaultRichTextElements={defaultRichTextElements}\n >\n {children}\n </IntlProvider>\n </DirectionProvider>\n );\n}\n"],"names":["Provider","i18n","children","locale","messages","defaultRichTextElements","adjustedLocale","adjustLocale","intlConfig","console","warn","DEFAULT_LOCALE","en","_jsx","DirectionProvider","direction","getDirectionFromLocale","IntlProvider","defaultLocale"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAac,SAAUA,QAAQA,CAAC;EAAEC,IAAI;AAAEC,EAAAA;AAAQ,CAAiB,EAAA;EAChE,MAAM;IAAEC,MAAM;IAAEC,QAAQ;AAAEC,IAAAA;AAAuB,GAAE,GAAGJ,IAAI;AAC1D,EAAA,MAAMK,cAAc,GAAGC,kBAAY,CAACJ,MAAM,CAAC;AAC3C,EAAA,IAAIK,UAAU;EAEd,IAAIF,cAAc,KAAK,IAAI,EAAE;AAC3B;IACAG,OAAO,CAACC,IAAI,CACV,CAAA,wCAAA,EAA2CP,MAAM,CAAA,kBAAA,EAAqBQ,oBAAc,GAAG,CACxF;AAEDH,IAAAA,UAAU,GAAG;AAAEL,MAAAA,MAAM,EAAEQ,oBAAc;AAAEP,MAAAA,QAAQ,EAAE;AAAE,QAAA,GAAGQ,UAAE;QAAE,GAAGR;AAAQ;KAAI;AAC3E,EAAA,CAAC,MAAM;AACLI,IAAAA,UAAU,GAAG;AAAEL,MAAAA,MAAM,EAAEG,cAAc;AAAEF,MAAAA;KAAU;AACnD,EAAA;EAEA,oBACES,cAAA,CAACC,mCAAiB,EAAA;AAACC,IAAAA,SAAS,EAAEC,4BAAsB,CAACb,MAAM,CAAE;IAAAD,QAAA,eAC3DW,cAAA,CAACI,sBAAY,EAAA;AACXC,MAAAA,aAAa,EAAEP,oBAAe;MAC9BR,MAAM,EAAEK,UAAU,CAACL,MAAO;MAC1BC,QAAQ,EAAEI,UAAU,CAACJ,QAAS;AAC9BC,MAAAA,uBAAuB,EAAEA,uBAAwB;AAAAH,MAAAA,QAAA,EAEhDA;KACW;AAChB,GAAmB,CAAC;AAExB;;"}
@@ -1,8 +1,31 @@
1
1
  import { IntlProvider } from 'react-intl';
2
+ import '../common/theme.mjs';
3
+ import '../common/direction.mjs';
4
+ import '@transferwise/neptune-tokens';
5
+ import '../common/PropsValues/control.mjs';
6
+ import '../common/PropsValues/size.mjs';
7
+ import '../common/PropsValues/typography.mjs';
8
+ import '../common/PropsValues/width.mjs';
9
+ import '../common/PropsValues/type.mjs';
10
+ import '../common/PropsValues/dateMode.mjs';
11
+ import '../common/PropsValues/monthFormat.mjs';
12
+ import '../common/PropsValues/position.mjs';
13
+ import '../common/PropsValues/layouts.mjs';
14
+ import '../common/PropsValues/status.mjs';
15
+ import '../common/PropsValues/sentiment.mjs';
16
+ import '../common/PropsValues/profileType.mjs';
17
+ import '../common/PropsValues/variant.mjs';
18
+ import '../common/PropsValues/scroll.mjs';
19
+ import '../common/PropsValues/markdownNodeType.mjs';
20
+ import '../common/fileType.mjs';
2
21
  import { adjustLocale, DEFAULT_LOCALE, getDirectionFromLocale } from '../common/Locale/index.mjs';
22
+ import '@transferwise/icons';
23
+ import 'clsx';
24
+ import 'react';
25
+ import '../common/CloseButton/CloseButton.messages.mjs';
26
+ import { jsx } from 'react/jsx-runtime';
3
27
  import en from '../i18n/en.json.mjs';
4
28
  import { DirectionProvider } from './Direction/DirectionProvider.mjs';
5
- import { jsx } from 'react/jsx-runtime';
6
29
 
7
30
  function Provider({
8
31
  i18n,
@@ -1 +1 @@
1
- {"version":3,"file":"Provider.mjs","sources":["../../src/Provider/Provider.tsx"],"sourcesContent":["import { IntlProvider, ResolvedIntlConfig } from 'react-intl';\n\nimport { adjustLocale, DEFAULT_LOCALE, getDirectionFromLocale } from '../common/Locale';\nimport en from '../i18n/en.json';\n\nimport { DirectionProvider } from './Direction';\n\nexport interface ProviderProps {\n i18n: Pick<ResolvedIntlConfig, 'locale' | 'messages'> &\n Partial<Pick<ResolvedIntlConfig, 'defaultRichTextElements'>>;\n children?: React.ReactNode;\n}\n\nexport default function Provider({ i18n, children }: ProviderProps) {\n const { locale, messages, defaultRichTextElements } = i18n;\n const adjustedLocale = adjustLocale(locale);\n let intlConfig;\n\n if (adjustedLocale === null) {\n // eslint-disable-next-line no-console\n console.warn(\n `Unsupported locale value was provided: '${locale}', defaulting to '${DEFAULT_LOCALE}'`,\n );\n\n intlConfig = { locale: DEFAULT_LOCALE, messages: { ...en, ...messages } };\n } else {\n intlConfig = { locale: adjustedLocale, messages };\n }\n\n return (\n <DirectionProvider direction={getDirectionFromLocale(locale)}>\n <IntlProvider\n defaultLocale={DEFAULT_LOCALE}\n locale={intlConfig.locale}\n messages={intlConfig.messages}\n defaultRichTextElements={defaultRichTextElements}\n >\n {children}\n </IntlProvider>\n </DirectionProvider>\n );\n}\n"],"names":["Provider","i18n","children","locale","messages","defaultRichTextElements","adjustedLocale","adjustLocale","intlConfig","console","warn","DEFAULT_LOCALE","en","_jsx","DirectionProvider","direction","getDirectionFromLocale","IntlProvider","defaultLocale"],"mappings":";;;;;;AAac,SAAUA,QAAQA,CAAC;EAAEC,IAAI;AAAEC,EAAAA;AAAQ,CAAiB,EAAA;EAChE,MAAM;IAAEC,MAAM;IAAEC,QAAQ;AAAEC,IAAAA;AAAuB,GAAE,GAAGJ,IAAI;AAC1D,EAAA,MAAMK,cAAc,GAAGC,YAAY,CAACJ,MAAM,CAAC;AAC3C,EAAA,IAAIK,UAAU;EAEd,IAAIF,cAAc,KAAK,IAAI,EAAE;AAC3B;IACAG,OAAO,CAACC,IAAI,CACV,CAAA,wCAAA,EAA2CP,MAAM,CAAA,kBAAA,EAAqBQ,cAAc,GAAG,CACxF;AAEDH,IAAAA,UAAU,GAAG;AAAEL,MAAAA,MAAM,EAAEQ,cAAc;AAAEP,MAAAA,QAAQ,EAAE;AAAE,QAAA,GAAGQ,EAAE;QAAE,GAAGR;AAAQ;KAAI;AAC3E,EAAA,CAAC,MAAM;AACLI,IAAAA,UAAU,GAAG;AAAEL,MAAAA,MAAM,EAAEG,cAAc;AAAEF,MAAAA;KAAU;AACnD,EAAA;EAEA,oBACES,GAAA,CAACC,iBAAiB,EAAA;AAACC,IAAAA,SAAS,EAAEC,sBAAsB,CAACb,MAAM,CAAE;IAAAD,QAAA,eAC3DW,GAAA,CAACI,YAAY,EAAA;AACXC,MAAAA,aAAa,EAAEP,cAAe;MAC9BR,MAAM,EAAEK,UAAU,CAACL,MAAO;MAC1BC,QAAQ,EAAEI,UAAU,CAACJ,QAAS;AAC9BC,MAAAA,uBAAuB,EAAEA,uBAAwB;AAAAH,MAAAA,QAAA,EAEhDA;KACW;AAChB,GAAmB,CAAC;AAExB;;"}
1
+ {"version":3,"file":"Provider.mjs","sources":["../../src/Provider/Provider.tsx"],"sourcesContent":["import { IntlProvider, ResolvedIntlConfig } from 'react-intl';\n\nimport { adjustLocale, DEFAULT_LOCALE, getDirectionFromLocale } from '../common';\nimport en from '../i18n/en.json';\n\nimport { DirectionProvider } from './Direction';\n\nexport interface ProviderProps {\n i18n: Pick<ResolvedIntlConfig, 'locale' | 'messages'> &\n Partial<Pick<ResolvedIntlConfig, 'defaultRichTextElements'>>;\n children?: React.ReactNode;\n}\n\nexport default function Provider({ i18n, children }: ProviderProps) {\n const { locale, messages, defaultRichTextElements } = i18n;\n const adjustedLocale = adjustLocale(locale);\n let intlConfig;\n\n if (adjustedLocale === null) {\n // eslint-disable-next-line no-console\n console.warn(\n `Unsupported locale value was provided: '${locale}', defaulting to '${DEFAULT_LOCALE}'`,\n );\n\n intlConfig = { locale: DEFAULT_LOCALE, messages: { ...en, ...messages } };\n } else {\n intlConfig = { locale: adjustedLocale, messages };\n }\n\n return (\n <DirectionProvider direction={getDirectionFromLocale(locale)}>\n <IntlProvider\n defaultLocale={DEFAULT_LOCALE}\n locale={intlConfig.locale}\n messages={intlConfig.messages}\n defaultRichTextElements={defaultRichTextElements}\n >\n {children}\n </IntlProvider>\n </DirectionProvider>\n );\n}\n"],"names":["Provider","i18n","children","locale","messages","defaultRichTextElements","adjustedLocale","adjustLocale","intlConfig","console","warn","DEFAULT_LOCALE","en","_jsx","DirectionProvider","direction","getDirectionFromLocale","IntlProvider","defaultLocale"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAac,SAAUA,QAAQA,CAAC;EAAEC,IAAI;AAAEC,EAAAA;AAAQ,CAAiB,EAAA;EAChE,MAAM;IAAEC,MAAM;IAAEC,QAAQ;AAAEC,IAAAA;AAAuB,GAAE,GAAGJ,IAAI;AAC1D,EAAA,MAAMK,cAAc,GAAGC,YAAY,CAACJ,MAAM,CAAC;AAC3C,EAAA,IAAIK,UAAU;EAEd,IAAIF,cAAc,KAAK,IAAI,EAAE;AAC3B;IACAG,OAAO,CAACC,IAAI,CACV,CAAA,wCAAA,EAA2CP,MAAM,CAAA,kBAAA,EAAqBQ,cAAc,GAAG,CACxF;AAEDH,IAAAA,UAAU,GAAG;AAAEL,MAAAA,MAAM,EAAEQ,cAAc;AAAEP,MAAAA,QAAQ,EAAE;AAAE,QAAA,GAAGQ,EAAE;QAAE,GAAGR;AAAQ;KAAI;AAC3E,EAAA,CAAC,MAAM;AACLI,IAAAA,UAAU,GAAG;AAAEL,MAAAA,MAAM,EAAEG,cAAc;AAAEF,MAAAA;KAAU;AACnD,EAAA;EAEA,oBACES,GAAA,CAACC,iBAAiB,EAAA;AAACC,IAAAA,SAAS,EAAEC,sBAAsB,CAACb,MAAM,CAAE;IAAAD,QAAA,eAC3DW,GAAA,CAACI,YAAY,EAAA;AACXC,MAAAA,aAAa,EAAEP,cAAe;MAC9BR,MAAM,EAAEK,UAAU,CAACL,MAAO;MAC1BC,QAAQ,EAAEI,UAAU,CAACJ,QAAS;AAC9BC,MAAAA,uBAAuB,EAAEA,uBAAwB;AAAAH,MAAAA,QAAA,EAEhDA;KACW;AAChB,GAAmB,CAAC;AAExB;;"}
@@ -1,128 +1,205 @@
1
1
  'use strict';
2
2
 
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
3
+ var icons = require('@transferwise/icons');
5
4
  var React = require('react');
5
+ var reactIntl = require('react-intl');
6
6
  var reactTransitionGroup = require('react-transition-group');
7
7
  var Button_resolver = require('../Button/Button.resolver.js');
8
8
  var Body = require('../Body/Body.js');
9
- var WithNextPortal = require('../WithNextPortal/WithNextPortal.js');
9
+ require('../common/theme.js');
10
+ require('../common/direction.js');
11
+ require('@transferwise/neptune-tokens');
12
+ require('../common/PropsValues/control.js');
13
+ require('../common/PropsValues/size.js');
14
+ require('../common/PropsValues/typography.js');
15
+ require('../common/PropsValues/width.js');
16
+ require('../common/PropsValues/type.js');
17
+ require('../common/PropsValues/dateMode.js');
18
+ require('../common/PropsValues/monthFormat.js');
19
+ require('../common/PropsValues/position.js');
20
+ require('../common/PropsValues/layouts.js');
21
+ require('../common/PropsValues/status.js');
22
+ require('../common/PropsValues/sentiment.js');
23
+ require('../common/PropsValues/profileType.js');
24
+ require('../common/PropsValues/variant.js');
25
+ require('../common/PropsValues/scroll.js');
26
+ require('../common/PropsValues/markdownNodeType.js');
27
+ require('../common/fileType.js');
28
+ require('@transferwise/formatting');
29
+ require('clsx');
30
+ require('../common/CloseButton/CloseButton.messages.js');
10
31
  var jsxRuntime = require('react/jsx-runtime');
32
+ var LiveRegion = require('../common/LiveRegion/LiveRegion.js');
33
+ var PrimitivePrompt = require('../Prompt/PrimitivePrompt/PrimitivePrompt.js');
34
+ var ProcessIndicator = require('../ProcessIndicator/ProcessIndicator.js');
35
+ var StatusIcon = require('../StatusIcon/StatusIcon.js');
36
+ var constants = require('./constants.js');
37
+ var Snackbar_messages = require('./Snackbar.messages.js');
38
+ var useSnackbarAutoDismiss = require('./useSnackbarAutoDismiss.js');
39
+ var useSnackbarSwipeDismiss = require('./useSnackbarSwipeDismiss.js');
11
40
 
12
- const CSS_TRANSITION_DURATION = 400;
13
- const Snackbar = props => {
14
- const bodyRef = React.useRef(null);
15
- const leaveTimeout = React.useRef(0);
16
- const transitionTimeout = React.useRef(0);
17
- /** The props of the last committed render, as `this.props` was in the class component. */
18
- const committedProps = React.useRef(props);
19
- const [state, setState] = React.useState({
20
- visible: false,
21
- text: ''
41
+ const Snackbar = ({
42
+ action,
43
+ announcementKey,
44
+ duration,
45
+ loading = false,
46
+ media,
47
+ onDismissRequest,
48
+ onExited,
49
+ sentiment = 'neutral',
50
+ text,
51
+ timeout,
52
+ visible
53
+ }) => {
54
+ const {
55
+ formatMessage
56
+ } = reactIntl.useIntl();
57
+ const {
58
+ handleBlur,
59
+ handleEntered,
60
+ handleFocus,
61
+ handleMouseEnter,
62
+ handleMouseLeave,
63
+ setSwiping,
64
+ surfaceRef
65
+ } = useSnackbarAutoDismiss.default({
66
+ duration,
67
+ loading,
68
+ onDismissRequest,
69
+ timeout,
70
+ visible
22
71
  });
23
- React.useEffect(() => () => {
24
- window.clearTimeout(leaveTimeout.current);
25
- window.clearTimeout(transitionTimeout.current);
26
- }, []);
27
- // Runs after every render to mirror the componentDidUpdate lifecycle this component previously
28
- // relied on, including the shouldComponentUpdate guard that ignored every update without text.
29
- // Layout, not passive, so a notification is shown or replaced before the browser paints, as
30
- // componentDidUpdate did. Both rules below are disabled on purpose: the dependency-less effect
31
- // and its synchronous state updates are what keep this conversion behaviour-identical.
32
- /* eslint-disable react-hooks/exhaustive-deps, react-hooks/set-state-in-effect */
33
- React.useLayoutEffect(() => {
34
- const previousProps = committedProps.current;
35
- committedProps.current = props;
36
- const {
37
- action,
38
- text,
39
- timestamp
40
- } = props;
41
- // shouldComponentUpdate bailed out whenever the incoming text was empty. That also blocked the
42
- // updates scheduled below, so a Snackbar whose text is cleared stays on screen until it is
43
- // given text again. Preserved here deliberately to keep this refactor behaviour-identical.
44
- const updateWhileTextIsPresent = update => {
45
- if (committedProps.current.text) {
46
- update();
72
+ const {
73
+ clearSwipePosition,
74
+ containerRef,
75
+ handleClickCapture,
76
+ handlePointerCancel,
77
+ handlePointerDown,
78
+ handlePointerMove,
79
+ handlePointerUp
80
+ } = useSnackbarSwipeDismiss.default({
81
+ onDismissRequest,
82
+ onSwipeChange: setSwiping,
83
+ visible
84
+ });
85
+ React.useEffect(() => {
86
+ if (!visible) {
87
+ return undefined;
88
+ }
89
+ const handleKeyDown = event => {
90
+ if (event.key === 'Escape' && !event.defaultPrevented && !event.isComposing) {
91
+ onDismissRequest();
47
92
  }
48
93
  };
49
- const setLeaveTimeout = () => {
50
- leaveTimeout.current = window.setTimeout(() => {
51
- updateWhileTextIsPresent(() => setState(current => ({
52
- ...current,
53
- visible: false
54
- })));
55
- }, committedProps.current.timeout);
56
- };
57
- const show = () => {
58
- setState(current => ({
59
- ...current,
60
- visible: true,
61
- action,
62
- text
63
- }));
64
- setLeaveTimeout();
65
- };
66
- if (!text) {
67
- return;
94
+ // Let document-level overlays consume Escape before this fallback handles it.
95
+ window.addEventListener('keydown', handleKeyDown);
96
+ return () => window.removeEventListener('keydown', handleKeyDown);
97
+ }, [visible, onDismissRequest]);
98
+ const handleActionClick = event => {
99
+ try {
100
+ action?.onClick?.(event);
101
+ } finally {
102
+ onDismissRequest();
68
103
  }
69
- if (!previousProps.text) {
70
- show();
71
- } else if (previousProps.timestamp !== timestamp) {
72
- window.clearTimeout(leaveTimeout.current);
73
- if (state.visible) {
74
- setState(current => ({
75
- ...current,
76
- visible: false
77
- }));
78
- transitionTimeout.current = window.setTimeout(() => {
79
- updateWhileTextIsPresent(show);
80
- }, CSS_TRANSITION_DURATION);
81
- } else {
82
- show();
83
- }
104
+ };
105
+ const renderMedia = () => {
106
+ if (loading) {
107
+ return /*#__PURE__*/jsxRuntime.jsx(ProcessIndicator.default, {
108
+ className: "wds-Snackbar__process-indicator",
109
+ "data-testid": "Snackbar_ProcessIndicator",
110
+ size: "xs"
111
+ });
84
112
  }
85
- });
86
- /* eslint-enable react-hooks/exhaustive-deps, react-hooks/set-state-in-effect */
87
- const {
88
- action,
89
- text,
90
- visible
91
- } = state;
92
- const {
93
- timeout
94
- } = props;
113
+ if (media) {
114
+ return /*#__PURE__*/jsxRuntime.jsx("span", {
115
+ className: "wds-Snackbar__media-asset",
116
+ children: media
117
+ });
118
+ }
119
+ if (sentiment === 'proposition') {
120
+ return /*#__PURE__*/jsxRuntime.jsx("span", {
121
+ className: "wds-Snackbar__media-asset",
122
+ children: /*#__PURE__*/jsxRuntime.jsx(icons.Tags, {
123
+ "aria-hidden": true,
124
+ size: 24
125
+ })
126
+ });
127
+ }
128
+ return /*#__PURE__*/jsxRuntime.jsx(StatusIcon.default, {
129
+ sentiment: sentiment,
130
+ size: 24
131
+ });
132
+ };
95
133
  return /*#__PURE__*/jsxRuntime.jsx("div", {
96
- className: "snackbar",
97
- "aria-live": "assertive",
98
- role: "alert",
134
+ ref: containerRef,
135
+ className: "wds-Snackbar",
136
+ style: {
137
+ '--Snackbar-enter-duration': `${constants.SNACKBAR_ENTER_DURATION}ms`,
138
+ '--Snackbar-exit-duration': `${constants.SNACKBAR_EXIT_DURATION}ms`
139
+ },
99
140
  children: /*#__PURE__*/jsxRuntime.jsx(reactTransitionGroup.CSSTransition, {
100
- nodeRef: bodyRef,
141
+ appear: true,
142
+ nodeRef: surfaceRef,
101
143
  in: visible,
102
- classNames: "snackbar__text-container",
144
+ classNames: "wds-Snackbar-container",
103
145
  timeout: {
104
- appear: 0,
105
- enter: timeout,
106
- exit: CSS_TRANSITION_DURATION
146
+ appear: constants.SNACKBAR_ENTER_DURATION,
147
+ enter: constants.SNACKBAR_ENTER_DURATION,
148
+ exit: constants.SNACKBAR_EXIT_DURATION
107
149
  },
108
150
  unmountOnExit: true,
109
- children: /*#__PURE__*/jsxRuntime.jsxs(Body.default, {
110
- ref: bodyRef,
111
- as: "span",
112
- className: "snackbar__text",
113
- children: [text, action ? /*#__PURE__*/jsxRuntime.jsx(Button_resolver.default, {
114
- className: "snackbar__text__action",
115
- v2: true,
116
- size: "sm",
117
- onClick: action.onClick,
118
- children: action.label
119
- }) : null]
151
+ onEntered: handleEntered,
152
+ onExited: () => {
153
+ clearSwipePosition();
154
+ onExited();
155
+ },
156
+ children: /*#__PURE__*/jsxRuntime.jsx(PrimitivePrompt.PrimitivePrompt, {
157
+ ref: surfaceRef,
158
+ className: "wds-Snackbar-container",
159
+ sentiment: loading ? 'neutral' : sentiment,
160
+ emphasis: "elevated",
161
+ media: renderMedia(),
162
+ dismissButtonPriority: "minimal",
163
+ onDismiss: onDismissRequest,
164
+ onMouseEnter: handleMouseEnter,
165
+ onMouseLeave: handleMouseLeave,
166
+ onFocus: handleFocus,
167
+ onBlur: handleBlur,
168
+ onClickCapture: handleClickCapture,
169
+ onDragStart: event => event.preventDefault(),
170
+ onPointerDown: visible ? handlePointerDown : undefined,
171
+ onPointerMove: handlePointerMove,
172
+ onPointerUp: handlePointerUp,
173
+ onPointerCancel: handlePointerCancel,
174
+ children: /*#__PURE__*/jsxRuntime.jsxs("div", {
175
+ className: "wds-Snackbar__content",
176
+ children: [/*#__PURE__*/jsxRuntime.jsx(LiveRegion.LiveRegion, {
177
+ "aria-live": "polite",
178
+ announceOnChange: announcementKey,
179
+ className: "wds-Snackbar__message",
180
+ children: /*#__PURE__*/jsxRuntime.jsxs(Body.default, {
181
+ as: "span",
182
+ className: "wds-Snackbar__body",
183
+ children: [text, /*#__PURE__*/jsxRuntime.jsxs("span", {
184
+ className: "sr-only",
185
+ children: [" ", formatMessage(Snackbar_messages.default.escapeDismissHint)]
186
+ })]
187
+ })
188
+ }), action ? /*#__PURE__*/jsxRuntime.jsx(Button_resolver.default, {
189
+ className: "wds-Snackbar__action",
190
+ v2: true,
191
+ size: "sm",
192
+ priority: "secondary",
193
+ href: action.href,
194
+ target: action.target,
195
+ onClick: handleActionClick,
196
+ children: action.label
197
+ }) : null]
198
+ })
120
199
  })
121
200
  })
122
201
  });
123
202
  };
124
- var SnackbarPortal = WithNextPortal.default(Snackbar);
125
203
 
126
204
  exports.Snackbar = Snackbar;
127
- exports.default = SnackbarPortal;
128
205
  //# sourceMappingURL=Snackbar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Snackbar.js","sources":["../../src/Snackbar/Snackbar.tsx"],"sourcesContent":["import { useEffect, useLayoutEffect, useRef, useState } from 'react';\nimport { CSSTransition } from 'react-transition-group';\n\nimport Button from '../Button';\nimport Body from '../Body';\nimport type { ThemeDark, ThemeLight } from '../common';\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 Has no effect. Snackbar theming is based on ThemeProvider. */\n theme?: ThemeLight | ThemeDark;\n timeout: number;\n timestamp: number;\n}\n\ninterface SnackbarState extends Pick<SnackbarProps, 'action' | 'text'> {\n visible: boolean;\n}\n\nexport const Snackbar = (props: SnackbarProps) => {\n const bodyRef = useRef<HTMLSpanElement>(null);\n const leaveTimeout = useRef(0);\n const transitionTimeout = useRef(0);\n /** The props of the last committed render, as `this.props` was in the class component. */\n const committedProps = useRef(props);\n\n const [state, setState] = useState<SnackbarState>({\n visible: false,\n text: '',\n });\n\n useEffect(\n () => () => {\n window.clearTimeout(leaveTimeout.current);\n window.clearTimeout(transitionTimeout.current);\n },\n [],\n );\n\n // Runs after every render to mirror the componentDidUpdate lifecycle this component previously\n // relied on, including the shouldComponentUpdate guard that ignored every update without text.\n // Layout, not passive, so a notification is shown or replaced before the browser paints, as\n // componentDidUpdate did. Both rules below are disabled on purpose: the dependency-less effect\n // and its synchronous state updates are what keep this conversion behaviour-identical.\n /* eslint-disable react-hooks/exhaustive-deps, react-hooks/set-state-in-effect */\n useLayoutEffect(() => {\n const previousProps = committedProps.current;\n committedProps.current = props;\n\n const { action, text, timestamp } = props;\n\n // shouldComponentUpdate bailed out whenever the incoming text was empty. That also blocked the\n // updates scheduled below, so a Snackbar whose text is cleared stays on screen until it is\n // given text again. Preserved here deliberately to keep this refactor behaviour-identical.\n const updateWhileTextIsPresent = (update: () => void) => {\n if (committedProps.current.text) {\n update();\n }\n };\n\n const setLeaveTimeout = () => {\n leaveTimeout.current = window.setTimeout(() => {\n updateWhileTextIsPresent(() => setState((current) => ({ ...current, visible: false })));\n }, committedProps.current.timeout);\n };\n\n const show = () => {\n setState((current) => ({ ...current, visible: true, action, text }));\n setLeaveTimeout();\n };\n\n if (!text) {\n return;\n }\n\n if (!previousProps.text) {\n show();\n } else if (previousProps.timestamp !== timestamp) {\n window.clearTimeout(leaveTimeout.current);\n\n if (state.visible) {\n setState((current) => ({ ...current, visible: false }));\n transitionTimeout.current = window.setTimeout(() => {\n updateWhileTextIsPresent(show);\n }, CSS_TRANSITION_DURATION);\n } else {\n show();\n }\n }\n });\n /* eslint-enable react-hooks/exhaustive-deps, react-hooks/set-state-in-effect */\n\n const { action, text, visible } = state;\n const { timeout } = props;\n\n return (\n <div className=\"snackbar\" aria-live=\"assertive\" role=\"alert\">\n <CSSTransition\n nodeRef={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={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\nexport default withNextPortal(Snackbar);\n"],"names":["CSS_TRANSITION_DURATION","Snackbar","props","bodyRef","useRef","leaveTimeout","transitionTimeout","committedProps","state","setState","useState","visible","text","useEffect","window","clearTimeout","current","useLayoutEffect","previousProps","action","timestamp","updateWhileTextIsPresent","update","setLeaveTimeout","setTimeout","timeout","show","_jsx","className","role","children","CSSTransition","nodeRef","in","classNames","appear","enter","exit","unmountOnExit","_jsxs","Body","ref","as","Button","v2","size","onClick","label","withNextPortal"],"mappings":"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"}
1
+ {"version":3,"file":"Snackbar.js","sources":["../../src/Snackbar/Snackbar.tsx"],"sourcesContent":["import { Tags } from '@transferwise/icons';\nimport { useEffect } from 'react';\nimport { useIntl } from 'react-intl';\nimport { CSSTransition } from 'react-transition-group';\n\nimport Button, { type ButtonReferenceType } from '../Button';\nimport Body from '../Body';\nimport { LiveRegion } from '../common';\nimport type { ThemeDark, ThemeLight } from '../common';\nimport { PrimitivePrompt } from '../Prompt/PrimitivePrompt';\nimport ProcessIndicator from '../ProcessIndicator';\nimport type { Sentiment } from '../SentimentSurface';\nimport StatusIcon from '../StatusIcon';\n\nimport { SNACKBAR_ENTER_DURATION, SNACKBAR_EXIT_DURATION } from './constants';\nimport messages from './Snackbar.messages';\nimport type { SnackbarAction, SnackbarDuration } from './Snackbar.types';\nimport useSnackbarAutoDismiss from './useSnackbarAutoDismiss';\nimport useSnackbarSwipeDismiss from './useSnackbarSwipeDismiss';\n\n/**\n * Props for the controlled Snackbar surface, including provider-managed lifecycle controls.\n * Use SnackbarCreationProps when creating notifications through SnackbarProvider/useSnackbar.\n */\nexport interface SnackbarProps {\n /** One optional callback or navigation action. Activating it dismisses after its callback runs. */\n action?: SnackbarAction;\n /** Changes for each new Snackbar so LiveRegion re-announces it. */\n announcementKey: number;\n /**\n * Controls auto-dismiss with a four-second, six-second or indefinite duration after entry finishes.\n * Takes precedence over the deprecated `timeout`.\n * When neither option is supplied, the default is 4000ms (previously 4500ms).\n * @default 'default'\n */\n duration?: SnackbarDuration;\n /**\n * Replaces the media with a progress indicator, uses neutral styling and prevents auto-dismiss.\n * Takes precedence over `media`, `sentiment`, `duration` and the deprecated `timeout`.\n * @default false\n */\n loading?: boolean;\n /** Overrides sentiment-derived media with content for the 24×24px media slot. */\n media?: React.ReactNode;\n /**\n * Called once after this Snackbar finishes exiting, including after an action (e.g. Undo)\n * or replacement by a newer Snackbar. The action callback runs first.\n * Not called for Snackbars discarded before being shown, such as earlier creates batched\n * before the first render.\n */\n onDismiss?: () => void;\n /** Requests an exit; the provider retains the surface until onExited confirms it has finished. */\n onDismissRequest: () => void;\n /** Called after the exit animation so the provider can unmount active or show its replacement. */\n onExited: () => void;\n /**\n * Controls the sentiment surface and default media.\n * @default 'neutral'\n */\n sentiment?: Sentiment;\n /** Message content. Empty strings or absent text dismiss without creating a blank replacement. */\n text: React.ReactNode;\n /** @deprecated Has no effect. Snackbar theming is based on ThemeProvider. */\n theme?: ThemeLight | ThemeDark;\n /**\n * @deprecated Use `duration` instead. Explicit millisecond values remain supported and are not\n * automatically remapped when no `duration` is supplied.\n * To migrate, use `default` for 0–5000ms, `extended` for values above 5000ms, and `indefinite`\n * for intentionally persistent notifications.\n */\n timeout?: number;\n /** @deprecated Has no effect when using SnackbarProvider, which manages Snackbar identity. */\n timestamp?: number;\n /** Controls entry/exit; the surface does not manage visibility itself. */\n visible: boolean;\n}\n\nexport const Snackbar = ({\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}: SnackbarProps) => {\n const { formatMessage } = useIntl();\n const {\n handleBlur,\n handleEntered,\n handleFocus,\n handleMouseEnter,\n handleMouseLeave,\n setSwiping,\n surfaceRef,\n } = useSnackbarAutoDismiss({\n duration,\n loading,\n onDismissRequest,\n timeout,\n visible,\n });\n const {\n clearSwipePosition,\n containerRef,\n handleClickCapture,\n handlePointerCancel,\n handlePointerDown,\n handlePointerMove,\n handlePointerUp,\n } = useSnackbarSwipeDismiss({ onDismissRequest, onSwipeChange: setSwiping, visible });\n\n useEffect(() => {\n if (!visible) {\n return undefined;\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && !event.defaultPrevented && !event.isComposing) {\n onDismissRequest();\n }\n };\n\n // Let document-level overlays consume Escape before this fallback handles it.\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [visible, onDismissRequest]);\n\n const handleActionClick: React.MouseEventHandler<ButtonReferenceType> = (event) => {\n try {\n action?.onClick?.(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 return (\n <div\n ref={containerRef}\n className=\"wds-Snackbar\"\n style={\n {\n '--Snackbar-enter-duration': `${SNACKBAR_ENTER_DURATION}ms`,\n '--Snackbar-exit-duration': `${SNACKBAR_EXIT_DURATION}ms`,\n } as React.CSSProperties\n }\n >\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 onEntered={handleEntered}\n onExited={() => {\n clearSwipePosition();\n onExited();\n }}\n >\n <PrimitivePrompt\n ref={surfaceRef}\n className=\"wds-Snackbar-container\"\n sentiment={loading ? 'neutral' : sentiment}\n emphasis=\"elevated\"\n media={renderMedia()}\n dismissButtonPriority=\"minimal\"\n onDismiss={onDismissRequest}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onClickCapture={handleClickCapture}\n onDragStart={(event) => event.preventDefault()}\n onPointerDown={visible ? handlePointerDown : undefined}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n onPointerCancel={handlePointerCancel}\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 default Snackbar;\n"],"names":["Snackbar","action","announcementKey","duration","loading","media","onDismissRequest","onExited","sentiment","text","timeout","visible","formatMessage","useIntl","handleBlur","handleEntered","handleFocus","handleMouseEnter","handleMouseLeave","setSwiping","surfaceRef","useSnackbarAutoDismiss","clearSwipePosition","containerRef","handleClickCapture","handlePointerCancel","handlePointerDown","handlePointerMove","handlePointerUp","useSnackbarSwipeDismiss","onSwipeChange","useEffect","undefined","handleKeyDown","event","key","defaultPrevented","isComposing","window","addEventListener","removeEventListener","handleActionClick","onClick","renderMedia","_jsx","ProcessIndicator","className","size","children","Tags","StatusIcon","ref","style","SNACKBAR_ENTER_DURATION","SNACKBAR_EXIT_DURATION","CSSTransition","appear","nodeRef","in","classNames","enter","exit","unmountOnExit","onEntered","PrimitivePrompt","emphasis","dismissButtonPriority","onDismiss","onMouseEnter","onMouseLeave","onFocus","onBlur","onClickCapture","onDragStart","preventDefault","onPointerDown","onPointerMove","onPointerUp","onPointerCancel","_jsxs","LiveRegion","announceOnChange","Body","as","messages","escapeDismissHint","Button","v2","priority","href","target","label"],"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,10 @@
1
+ import { defineMessages } from 'react-intl';
2
+
3
+ var messages = defineMessages({
4
+ escapeDismissHint: {
5
+ id: "neptune.Snackbar.escapeDismissHint"
6
+ }
7
+ });
8
+
9
+ export { messages as default };
10
+ //# sourceMappingURL=Snackbar.messages.mjs.map
@@ -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;;"}