@transferwise/components 0.0.0-experimental-fa9fbe9 → 0.0.0-experimental-162ecb1

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 (152) hide show
  1. package/build/common/hooks/useResizeObserver.js +3 -3
  2. package/build/common/hooks/useResizeObserver.js.map +1 -1
  3. package/build/common/hooks/useResizeObserver.mjs +3 -3
  4. package/build/common/hooks/useResizeObserver.mjs.map +1 -1
  5. package/build/criticalBanner/CriticalCommsBanner.js +0 -3
  6. package/build/criticalBanner/CriticalCommsBanner.js.map +1 -1
  7. package/build/criticalBanner/CriticalCommsBanner.mjs +0 -3
  8. package/build/criticalBanner/CriticalCommsBanner.mjs.map +1 -1
  9. package/build/field/Field.js +2 -3
  10. package/build/field/Field.js.map +1 -1
  11. package/build/field/Field.mjs +2 -3
  12. package/build/field/Field.mjs.map +1 -1
  13. package/build/i18n/en.json +0 -2
  14. package/build/i18n/en.json.js +0 -2
  15. package/build/i18n/en.json.js.map +1 -1
  16. package/build/i18n/en.json.mjs +0 -2
  17. package/build/i18n/en.json.mjs.map +1 -1
  18. package/build/index.js +0 -2
  19. package/build/index.js.map +1 -1
  20. package/build/index.mjs +0 -1
  21. package/build/index.mjs.map +1 -1
  22. package/build/listItem/Prompt/ListItemPrompt.js +2 -3
  23. package/build/listItem/Prompt/ListItemPrompt.js.map +1 -1
  24. package/build/listItem/Prompt/ListItemPrompt.mjs +2 -3
  25. package/build/listItem/Prompt/ListItemPrompt.mjs.map +1 -1
  26. package/build/logo/Logo.js +70 -25
  27. package/build/logo/Logo.js.map +1 -1
  28. package/build/logo/Logo.mjs +72 -27
  29. package/build/logo/Logo.mjs.map +1 -1
  30. package/build/logo/logo-assets.js +68 -97
  31. package/build/logo/logo-assets.js.map +1 -1
  32. package/build/logo/logo-assets.mjs +62 -90
  33. package/build/logo/logo-assets.mjs.map +1 -1
  34. package/build/main.css +32 -224
  35. package/build/prompt/ActionPrompt/ActionPrompt.js +40 -8
  36. package/build/prompt/ActionPrompt/ActionPrompt.js.map +1 -1
  37. package/build/prompt/ActionPrompt/ActionPrompt.mjs +40 -8
  38. package/build/prompt/ActionPrompt/ActionPrompt.mjs.map +1 -1
  39. package/build/prompt/PrimitivePrompt/PrimitivePrompt.js +4 -11
  40. package/build/prompt/PrimitivePrompt/PrimitivePrompt.js.map +1 -1
  41. package/build/prompt/PrimitivePrompt/PrimitivePrompt.mjs +4 -11
  42. package/build/prompt/PrimitivePrompt/PrimitivePrompt.mjs.map +1 -1
  43. package/build/styles/logo/Logo.css +3 -24
  44. package/build/styles/main.css +32 -224
  45. package/build/table/Table.js +6 -5
  46. package/build/table/Table.js.map +1 -1
  47. package/build/table/Table.mjs +6 -5
  48. package/build/table/Table.mjs.map +1 -1
  49. package/build/typeahead/Typeahead.js +2 -3
  50. package/build/typeahead/Typeahead.js.map +1 -1
  51. package/build/typeahead/Typeahead.mjs +2 -3
  52. package/build/typeahead/Typeahead.mjs.map +1 -1
  53. package/build/types/common/hooks/useResizeObserver.d.ts +1 -1
  54. package/build/types/common/hooks/useResizeObserver.d.ts.map +1 -1
  55. package/build/types/criticalBanner/CriticalCommsBanner.d.ts +0 -3
  56. package/build/types/criticalBanner/CriticalCommsBanner.d.ts.map +1 -1
  57. package/build/types/index.d.ts +2 -2
  58. package/build/types/index.d.ts.map +1 -1
  59. package/build/types/logo/Logo.d.ts +32 -1
  60. package/build/types/logo/Logo.d.ts.map +1 -1
  61. package/build/types/logo/logo-assets.d.ts +33 -9
  62. package/build/types/logo/logo-assets.d.ts.map +1 -1
  63. package/build/types/prompt/ActionPrompt/ActionPrompt.d.ts +11 -2
  64. package/build/types/prompt/ActionPrompt/ActionPrompt.d.ts.map +1 -1
  65. package/build/types/prompt/PrimitivePrompt/PrimitivePrompt.d.ts +3 -35
  66. package/build/types/prompt/PrimitivePrompt/PrimitivePrompt.d.ts.map +1 -1
  67. package/build/types/prompt/index.d.ts +0 -2
  68. package/build/types/prompt/index.d.ts.map +1 -1
  69. package/build/types/table/Table.d.ts.map +1 -1
  70. package/build/types/test-utils/index.d.ts +0 -4
  71. package/build/types/test-utils/index.d.ts.map +1 -1
  72. package/package.json +3 -3
  73. package/src/common/bottomSheet/BottomSheet.test.story.tsx +6 -5
  74. package/src/common/hooks/useResizeObserver.ts +2 -3
  75. package/src/criticalBanner/CriticalCommsBanner.story.tsx +0 -4
  76. package/src/criticalBanner/CriticalCommsBanner.test.story.tsx +1 -1
  77. package/src/criticalBanner/CriticalCommsBanner.tsx +0 -3
  78. package/src/i18n/en.json +0 -2
  79. package/src/index.ts +2 -2
  80. package/src/logo/Logo.css +3 -24
  81. package/src/logo/Logo.less +3 -30
  82. package/src/logo/Logo.story.tsx +123 -89
  83. package/src/logo/Logo.test.story.tsx +12 -23
  84. package/src/logo/Logo.tsx +87 -28
  85. package/src/logo/logo-assets.tsx +36 -92
  86. package/src/main.css +32 -224
  87. package/src/main.less +1 -3
  88. package/src/prompt/ActionPrompt/ActionPrompt.tsx +62 -9
  89. package/src/prompt/PrimitivePrompt/PrimitivePrompt.tsx +40 -56
  90. package/src/prompt/index.ts +0 -4
  91. package/src/sentimentSurface/SentimentSurface.story.tsx +17 -43
  92. package/src/table/Table.story.tsx +1 -1
  93. package/src/table/Table.tsx +6 -5
  94. package/build/common/hooks/useContainerSize.js +0 -30
  95. package/build/common/hooks/useContainerSize.js.map +0 -1
  96. package/build/common/hooks/useContainerSize.mjs +0 -28
  97. package/build/common/hooks/useContainerSize.mjs.map +0 -1
  98. package/build/prompt/CriticalBanner/CriticalBanner.js +0 -142
  99. package/build/prompt/CriticalBanner/CriticalBanner.js.map +0 -1
  100. package/build/prompt/CriticalBanner/CriticalBanner.mjs +0 -140
  101. package/build/prompt/CriticalBanner/CriticalBanner.mjs.map +0 -1
  102. package/build/prompt/CriticalBanner/helpers.js +0 -29
  103. package/build/prompt/CriticalBanner/helpers.js.map +0 -1
  104. package/build/prompt/CriticalBanner/helpers.mjs +0 -26
  105. package/build/prompt/CriticalBanner/helpers.mjs.map +0 -1
  106. package/build/prompt/common/Expander/Expander.js +0 -35
  107. package/build/prompt/common/Expander/Expander.js.map +0 -1
  108. package/build/prompt/common/Expander/Expander.messages.js +0 -17
  109. package/build/prompt/common/Expander/Expander.messages.js.map +0 -1
  110. package/build/prompt/common/Expander/Expander.messages.mjs +0 -13
  111. package/build/prompt/common/Expander/Expander.messages.mjs.map +0 -1
  112. package/build/prompt/common/Expander/Expander.mjs +0 -33
  113. package/build/prompt/common/Expander/Expander.mjs.map +0 -1
  114. package/build/prompt/helpers/promptMedia.js +0 -52
  115. package/build/prompt/helpers/promptMedia.js.map +0 -1
  116. package/build/prompt/helpers/promptMedia.mjs +0 -50
  117. package/build/prompt/helpers/promptMedia.mjs.map +0 -1
  118. package/build/styles/prompt/CriticalBanner/CriticalBanner.css +0 -134
  119. package/build/styles/prompt/CriticalBanner/CriticalBanner.vars.css +0 -0
  120. package/build/styles/prompt/common/Expander/Expander.css +0 -8
  121. package/build/types/common/hooks/useContainerSize.d.ts +0 -14
  122. package/build/types/common/hooks/useContainerSize.d.ts.map +0 -1
  123. package/build/types/prompt/CriticalBanner/CriticalBanner.d.ts +0 -39
  124. package/build/types/prompt/CriticalBanner/CriticalBanner.d.ts.map +0 -1
  125. package/build/types/prompt/CriticalBanner/helpers.d.ts +0 -18
  126. package/build/types/prompt/CriticalBanner/helpers.d.ts.map +0 -1
  127. package/build/types/prompt/CriticalBanner/index.d.ts +0 -3
  128. package/build/types/prompt/CriticalBanner/index.d.ts.map +0 -1
  129. package/build/types/prompt/common/Expander/Expander.d.ts +0 -20
  130. package/build/types/prompt/common/Expander/Expander.d.ts.map +0 -1
  131. package/build/types/prompt/common/Expander/Expander.messages.d.ts +0 -14
  132. package/build/types/prompt/common/Expander/Expander.messages.d.ts.map +0 -1
  133. package/build/types/prompt/helpers/promptMedia.d.ts +0 -22
  134. package/build/types/prompt/helpers/promptMedia.d.ts.map +0 -1
  135. package/src/common/hooks/useContainerSize.test.tsx +0 -121
  136. package/src/common/hooks/useContainerSize.ts +0 -32
  137. package/src/prompt/CriticalBanner/CriticalBanner.accessibility.docs.mdx +0 -113
  138. package/src/prompt/CriticalBanner/CriticalBanner.css +0 -134
  139. package/src/prompt/CriticalBanner/CriticalBanner.less +0 -155
  140. package/src/prompt/CriticalBanner/CriticalBanner.story.tsx +0 -635
  141. package/src/prompt/CriticalBanner/CriticalBanner.test.story.tsx +0 -422
  142. package/src/prompt/CriticalBanner/CriticalBanner.tsx +0 -178
  143. package/src/prompt/CriticalBanner/CriticalBanner.vars.css +0 -0
  144. package/src/prompt/CriticalBanner/CriticalBanner.vars.less +0 -6
  145. package/src/prompt/CriticalBanner/helpers.ts +0 -39
  146. package/src/prompt/CriticalBanner/index.ts +0 -2
  147. package/src/prompt/common/Expander/Expander.css +0 -8
  148. package/src/prompt/common/Expander/Expander.less +0 -9
  149. package/src/prompt/common/Expander/Expander.messages.ts +0 -14
  150. package/src/prompt/common/Expander/Expander.test.tsx +0 -167
  151. package/src/prompt/common/Expander/Expander.tsx +0 -83
  152. package/src/prompt/helpers/promptMedia.tsx +0 -79
@@ -1,28 +0,0 @@
1
- import { useRef, useState } from 'react';
2
- import { useResizeObserver } from './useResizeObserver.mjs';
3
-
4
- /**
5
- * Hook that returns a ref and a boolean indicating if the container
6
- * has a width >= the specified breakpoint.
7
- *
8
- * Useful for synchronizing React state with CSS container queries.
9
- *
10
- * Uses content-box measurements to match CSS container query behavior
11
- * (excludes padding and border).
12
- *
13
- * @param breakpoint - Minimum width in pixels
14
- * @returns [ref, isAboveBreakpoint] tuple
15
- */
16
- function useContainerSize(breakpoint) {
17
- const ref = useRef(null);
18
- const [isAboveBreakpoint, setIsAboveBreakpoint] = useState(false);
19
- useResizeObserver(ref, entry => {
20
- // Use contentRect.width to match CSS container query box model (content-box)
21
- const inlineSize = entry.contentRect.width;
22
- setIsAboveBreakpoint(inlineSize >= breakpoint);
23
- }, 'content-box');
24
- return [ref, isAboveBreakpoint];
25
- }
26
-
27
- export { useContainerSize };
28
- //# sourceMappingURL=useContainerSize.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useContainerSize.mjs","sources":["../../../src/common/hooks/useContainerSize.ts"],"sourcesContent":["import { useRef, useState } from 'react';\n\nimport { useResizeObserver } from './useResizeObserver';\n\n/**\n * Hook that returns a ref and a boolean indicating if the container\n * has a width >= the specified breakpoint.\n *\n * Useful for synchronizing React state with CSS container queries.\n *\n * Uses content-box measurements to match CSS container query behavior\n * (excludes padding and border).\n *\n * @param breakpoint - Minimum width in pixels\n * @returns [ref, isAboveBreakpoint] tuple\n */\nexport function useContainerSize(breakpoint: number): [React.RefObject<HTMLDivElement>, boolean] {\n const ref = useRef<HTMLDivElement>(null);\n const [isAboveBreakpoint, setIsAboveBreakpoint] = useState(false);\n\n useResizeObserver(\n ref,\n (entry) => {\n // Use contentRect.width to match CSS container query box model (content-box)\n const inlineSize = entry.contentRect.width;\n setIsAboveBreakpoint(inlineSize >= breakpoint);\n },\n 'content-box',\n );\n\n return [ref, isAboveBreakpoint];\n}\n"],"names":["useContainerSize","breakpoint","ref","useRef","isAboveBreakpoint","setIsAboveBreakpoint","useState","useResizeObserver","entry","inlineSize","contentRect","width"],"mappings":";;;AAIA;;;;;;;;;;;AAWG;AACG,SAAUA,gBAAgBA,CAACC,UAAkB,EAAA;AACjD,EAAA,MAAMC,GAAG,GAAGC,MAAM,CAAiB,IAAI,CAAC;EACxC,MAAM,CAACC,iBAAiB,EAAEC,oBAAoB,CAAC,GAAGC,QAAQ,CAAC,KAAK,CAAC;AAEjEC,EAAAA,iBAAiB,CACfL,GAAG,EACFM,KAAK,IAAI;AACR;AACA,IAAA,MAAMC,UAAU,GAAGD,KAAK,CAACE,WAAW,CAACC,KAAK;AAC1CN,IAAAA,oBAAoB,CAACI,UAAU,IAAIR,UAAU,CAAC;EAChD,CAAC,EACD,aAAa,CACd;AAED,EAAA,OAAO,CAACC,GAAG,EAAEE,iBAAiB,CAAC;AACjC;;;;"}
@@ -1,142 +0,0 @@
1
- 'use strict';
2
-
3
- var React = require('react');
4
- var clsx = require('clsx');
5
- var Body = require('../../body/Body.js');
6
- var Button_resolver = require('../../button/Button.resolver.js');
7
- require('../../common/theme.js');
8
- require('../../common/direction.js');
9
- require('../../common/propsValues/control.js');
10
- var breakpoint = require('../../common/propsValues/breakpoint.js');
11
- require('../../common/propsValues/size.js');
12
- var typography = require('../../common/propsValues/typography.js');
13
- require('../../common/propsValues/width.js');
14
- require('../../common/propsValues/type.js');
15
- require('../../common/propsValues/dateMode.js');
16
- require('../../common/propsValues/monthFormat.js');
17
- require('../../common/propsValues/position.js');
18
- require('../../common/propsValues/layouts.js');
19
- require('../../common/propsValues/status.js');
20
- require('../../common/propsValues/sentiment.js');
21
- require('../../common/propsValues/profileType.js');
22
- require('../../common/propsValues/variant.js');
23
- require('../../common/propsValues/scroll.js');
24
- require('../../common/propsValues/markdownNodeType.js');
25
- require('../../common/fileType.js');
26
- require('@transferwise/formatting');
27
- require('@transferwise/icons');
28
- require('react-intl');
29
- require('../../common/closeButton/CloseButton.messages.js');
30
- var jsxRuntime = require('react/jsx-runtime');
31
- var LiveRegion = require('../../common/liveRegion/LiveRegion.js');
32
- var PrimitivePrompt = require('../PrimitivePrompt/PrimitivePrompt.js');
33
- var promptMedia = require('../helpers/promptMedia.js');
34
- var Expander = require('../common/Expander/Expander.js');
35
- var helpers = require('./helpers.js');
36
- var useContainerSize = require('../../common/hooks/useContainerSize.js');
37
-
38
- const CriticalBanner = ({
39
- sentiment = 'negative',
40
- title,
41
- description,
42
- media = {},
43
- action,
44
- actionSecondary,
45
- expanded: expandedProp,
46
- onToggle,
47
- id,
48
- className,
49
- 'data-testid': testId
50
- }) => {
51
- const [containerRef, isDesktop] = useContainerSize.useContainerSize(breakpoint.Breakpoint.MEDIUM);
52
- const [internalExpanded, setInternalExpanded] = React.useState(isDesktop ? true : onToggle && expandedProp !== undefined ? expandedProp : true);
53
- const resolvedExpanded = isDesktop ? true : expandedProp ?? internalExpanded;
54
- const handleToggle = onToggle ?? (() => setInternalExpanded(!internalExpanded));
55
- const hasActions = action ?? actionSecondary;
56
- const mediaId = React.useId();
57
- const titleId = React.useId();
58
- const descId = React.useId();
59
- const ariaLabelledByIds = [media['aria-hidden'] ? undefined : mediaId, !title ? undefined : titleId].filter(Boolean).join(' ');
60
- return /*#__PURE__*/jsxRuntime.jsx(LiveRegion.LiveRegion, {
61
- "aria-live": "assertive",
62
- announceOnChange: helpers.buildAnnouncementString({
63
- title,
64
- description,
65
- expanded: resolvedExpanded,
66
- actionLabel: action?.label,
67
- actionSecondaryLabel: actionSecondary?.label
68
- }),
69
- children: /*#__PURE__*/jsxRuntime.jsxs(PrimitivePrompt.PrimitivePrompt, {
70
- ref: containerRef,
71
- id: id,
72
- sentiment: sentiment,
73
- emphasis: sentiment === 'neutral' ? 'base' : 'elevated',
74
- "data-testid": testId,
75
- className: clsx.clsx('wds-critical-banner', {
76
- 'wds-critical-banner--collapsed': !resolvedExpanded,
77
- 'wds-critical-banner--with-two-actions': !!actionSecondary
78
- }, className),
79
- media: promptMedia.renderPromptMedia({
80
- media,
81
- sentiment,
82
- mediaId,
83
- imgClassName: 'wds-critical-banner--media-image'
84
- }),
85
- actions: hasActions ? /*#__PURE__*/jsxRuntime.jsxs("div", {
86
- "aria-hidden": !resolvedExpanded ? true : undefined,
87
- style: {
88
- display: 'contents'
89
- },
90
- children: [actionSecondary &&
91
- /*#__PURE__*/
92
- // @ts-expect-error onClick type mismatch
93
- jsxRuntime.jsx(Button_resolver.default, {
94
- v2: true,
95
- size: "md",
96
- priority: "secondary",
97
- href: actionSecondary.href,
98
- tabIndex: resolvedExpanded ? undefined : -1,
99
- onClick: actionSecondary?.onClick,
100
- children: actionSecondary.label
101
- }), action &&
102
- /*#__PURE__*/
103
- // @ts-expect-error onClick type mismatch
104
- jsxRuntime.jsx(Button_resolver.default, {
105
- v2: true,
106
- size: "md",
107
- priority: "primary",
108
- href: action.href,
109
- tabIndex: resolvedExpanded ? undefined : -1,
110
- onClick: action.onClick,
111
- children: action.label
112
- })]
113
- }) : undefined,
114
- role: "region",
115
- "aria-labelledby": ariaLabelledByIds,
116
- "aria-describedby": descId,
117
- children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
118
- className: "wds-critical-banner__text-wrapper",
119
- children: [title && /*#__PURE__*/jsxRuntime.jsx(Body.default, {
120
- id: titleId,
121
- type: typography.Typography.BODY_LARGE_BOLD,
122
- className: "wds-critical-banner__content wds-critical-banner__title",
123
- children: title
124
- }), description && /*#__PURE__*/jsxRuntime.jsx(Body.default, {
125
- id: descId,
126
- className: clsx.clsx('wds-critical-banner__content', 'wds-critical-banner__description', {
127
- 'wds-critical-banner__description--with-title': !!title
128
- }),
129
- children: description
130
- })]
131
- }), /*#__PURE__*/jsxRuntime.jsx(Expander.ExpanderToggle, {
132
- expanded: resolvedExpanded,
133
- size: 24,
134
- className: "wds-critical-banner__toggle",
135
- onToggle: handleToggle
136
- })]
137
- })
138
- });
139
- };
140
-
141
- exports.CriticalBanner = CriticalBanner;
142
- //# sourceMappingURL=CriticalBanner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CriticalBanner.js","sources":["../../../src/prompt/CriticalBanner/CriticalBanner.tsx"],"sourcesContent":["import { ReactNode, useEffect, useId, useState } from 'react';\nimport { clsx } from 'clsx';\n\nimport Body from '../../body';\nimport Button from '../../button';\nimport { Breakpoint, LiveRegion, Typography } from '../../common';\nimport { ButtonProps } from '../../button/Button.types';\nimport { PrimitivePrompt, PrimitivePromptProps } from '../PrimitivePrompt';\n\nimport { renderPromptMedia, PromptMedia } from '../helpers/promptMedia';\nimport { ExpanderToggle } from '../common/Expander/Expander';\nimport { buildAnnouncementString } from './helpers';\nimport { useContainerSize } from '../../common/hooks/useContainerSize';\n\nexport type CriticalBannerProps = {\n title?: ReactNode;\n description: ReactNode;\n media?: PromptMedia;\n action?: Pick<ButtonProps, 'onClick' | 'href' | 'target'> & {\n label: ButtonProps['children'];\n };\n actionSecondary?: Pick<ButtonProps, 'onClick' | 'href' | 'target'> & {\n label: ButtonProps['children'];\n };\n sentiment?: Exclude<PrimitivePromptProps['sentiment'], 'proposition'>;\n /**\n * Controls whether the description and actions are visible, as a controlled component.\n * When collapsed with a title, only the title is shown.\n * When collapsed without a title, the description is trimmed to 2 lines.\n *\n * Note: On desktop (container width >= 768px), the banner is always expanded\n * regardless of this prop value.\n */\n expanded?: boolean;\n /**\n * Called when the user clicks the chevron toggle.\n * If not provided, the component will manage expanded state internally.\n */\n onToggle?: () => void;\n} & Pick<PrimitivePromptProps, 'id' | 'className' | 'data-testid'>;\n\n/**\n * A full-width, non-dismissible banner for critical messages such as account blocks or\n * time-sensitive actions that require immediate user attention.\n\n * @see {@link https://wise.design/components/critical-banner Design Spec}\n */\nexport const CriticalBanner = ({\n sentiment = 'negative',\n title,\n description,\n media = {},\n action,\n actionSecondary,\n expanded: expandedProp,\n onToggle,\n id,\n className,\n 'data-testid': testId,\n}: CriticalBannerProps) => {\n const [containerRef, isDesktop] = useContainerSize(Breakpoint.MEDIUM);\n const [internalExpanded, setInternalExpanded] = useState(\n isDesktop ? true : onToggle && expandedProp !== undefined ? expandedProp : true,\n );\n const resolvedExpanded = isDesktop ? true : (expandedProp ?? internalExpanded);\n const handleToggle = onToggle ?? (() => setInternalExpanded(!internalExpanded));\n const hasActions = action ?? actionSecondary;\n const mediaId = useId();\n const titleId = useId();\n const descId = useId();\n\n const ariaLabelledByIds = [\n media['aria-hidden'] ? undefined : mediaId,\n !title ? undefined : titleId,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <LiveRegion\n aria-live=\"assertive\"\n announceOnChange={buildAnnouncementString({\n title,\n description,\n expanded: resolvedExpanded,\n actionLabel: action?.label,\n actionSecondaryLabel: actionSecondary?.label,\n })}\n >\n <PrimitivePrompt\n ref={containerRef}\n id={id}\n sentiment={sentiment}\n emphasis={sentiment === 'neutral' ? 'base' : 'elevated'}\n data-testid={testId}\n className={clsx(\n 'wds-critical-banner',\n {\n 'wds-critical-banner--collapsed': !resolvedExpanded,\n 'wds-critical-banner--with-two-actions': !!actionSecondary,\n },\n className,\n )}\n media={renderPromptMedia({\n media,\n sentiment,\n mediaId,\n imgClassName: 'wds-critical-banner--media-image',\n })}\n actions={\n hasActions ? (\n <div aria-hidden={!resolvedExpanded ? true : undefined} style={{ display: 'contents' }}>\n {actionSecondary && (\n // @ts-expect-error onClick type mismatch\n <Button\n v2\n size=\"md\"\n priority=\"secondary\"\n href={actionSecondary.href}\n tabIndex={resolvedExpanded ? undefined : -1}\n onClick={actionSecondary?.onClick}\n >\n {actionSecondary.label}\n </Button>\n )}\n {action && (\n // @ts-expect-error onClick type mismatch\n <Button\n v2\n size=\"md\"\n priority=\"primary\"\n href={action.href}\n tabIndex={resolvedExpanded ? undefined : -1}\n onClick={action.onClick}\n >\n {action.label}\n </Button>\n )}\n </div>\n ) : undefined\n }\n role=\"region\"\n aria-labelledby={ariaLabelledByIds}\n aria-describedby={descId}\n >\n <div className=\"wds-critical-banner__text-wrapper\">\n {title && (\n <Body\n id={titleId}\n type={Typography.BODY_LARGE_BOLD}\n className=\"wds-critical-banner__content wds-critical-banner__title\"\n >\n {title}\n </Body>\n )}\n {description && (\n <Body\n id={descId}\n className={clsx('wds-critical-banner__content', 'wds-critical-banner__description', {\n 'wds-critical-banner__description--with-title': !!title,\n })}\n >\n {description}\n </Body>\n )}\n </div>\n <ExpanderToggle\n expanded={resolvedExpanded}\n size={24}\n className=\"wds-critical-banner__toggle\"\n onToggle={handleToggle}\n />\n </PrimitivePrompt>\n </LiveRegion>\n );\n};\n\nexport default CriticalBanner;\n"],"names":["CriticalBanner","sentiment","title","description","media","action","actionSecondary","expanded","expandedProp","onToggle","id","className","testId","containerRef","isDesktop","useContainerSize","Breakpoint","MEDIUM","internalExpanded","setInternalExpanded","useState","undefined","resolvedExpanded","handleToggle","hasActions","mediaId","useId","titleId","descId","ariaLabelledByIds","filter","Boolean","join","_jsx","LiveRegion","announceOnChange","buildAnnouncementString","actionLabel","label","actionSecondaryLabel","children","_jsxs","PrimitivePrompt","ref","emphasis","clsx","renderPromptMedia","imgClassName","actions","style","display","Button","v2","size","priority","href","tabIndex","onClick","role","Body","type","Typography","BODY_LARGE_BOLD","ExpanderToggle"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+CO,MAAMA,cAAc,GAAGA,CAAC;AAC7BC,EAAAA,SAAS,GAAG,UAAU;EACtBC,KAAK;EACLC,WAAW;EACXC,KAAK,GAAG,EAAE;EACVC,MAAM;EACNC,eAAe;AACfC,EAAAA,QAAQ,EAAEC,YAAY;EACtBC,QAAQ;EACRC,EAAE;EACFC,SAAS;AACT,EAAA,aAAa,EAAEC;AAAM,CACD,KAAI;EACxB,MAAM,CAACC,YAAY,EAAEC,SAAS,CAAC,GAAGC,iCAAgB,CAACC,qBAAU,CAACC,MAAM,CAAC;EACrE,MAAM,CAACC,gBAAgB,EAAEC,mBAAmB,CAAC,GAAGC,cAAQ,CACtDN,SAAS,GAAG,IAAI,GAAGL,QAAQ,IAAID,YAAY,KAAKa,SAAS,GAAGb,YAAY,GAAG,IAAI,CAChF;EACD,MAAMc,gBAAgB,GAAGR,SAAS,GAAG,IAAI,GAAIN,YAAY,IAAIU,gBAAiB;EAC9E,MAAMK,YAAY,GAAGd,QAAQ,KAAK,MAAMU,mBAAmB,CAAC,CAACD,gBAAgB,CAAC,CAAC;AAC/E,EAAA,MAAMM,UAAU,GAAGnB,MAAM,IAAIC,eAAe;AAC5C,EAAA,MAAMmB,OAAO,GAAGC,WAAK,EAAE;AACvB,EAAA,MAAMC,OAAO,GAAGD,WAAK,EAAE;AACvB,EAAA,MAAME,MAAM,GAAGF,WAAK,EAAE;AAEtB,EAAA,MAAMG,iBAAiB,GAAG,CACxBzB,KAAK,CAAC,aAAa,CAAC,GAAGiB,SAAS,GAAGI,OAAO,EAC1C,CAACvB,KAAK,GAAGmB,SAAS,GAAGM,OAAO,CAC7B,CACEG,MAAM,CAACC,OAAO,CAAC,CACfC,IAAI,CAAC,GAAG,CAAC;EAEZ,oBACEC,cAAA,CAACC,qBAAU,EAAA;AACT,IAAA,WAAA,EAAU,WAAW;IACrBC,gBAAgB,EAAEC,+BAAuB,CAAC;MACxClC,KAAK;MACLC,WAAW;AACXI,MAAAA,QAAQ,EAAEe,gBAAgB;MAC1Be,WAAW,EAAEhC,MAAM,EAAEiC,KAAK;MAC1BC,oBAAoB,EAAEjC,eAAe,EAAEgC;AACxC,KAAA,CAAE;IAAAE,QAAA,eAEHC,eAAA,CAACC,+BAAe,EAAA;AACdC,MAAAA,GAAG,EAAE9B,YAAa;AAClBH,MAAAA,EAAE,EAAEA,EAAG;AACPT,MAAAA,SAAS,EAAEA,SAAU;AACrB2C,MAAAA,QAAQ,EAAE3C,SAAS,KAAK,SAAS,GAAG,MAAM,GAAG,UAAW;AACxD,MAAA,aAAA,EAAaW,MAAO;AACpBD,MAAAA,SAAS,EAAEkC,SAAI,CACb,qBAAqB,EACrB;QACE,gCAAgC,EAAE,CAACvB,gBAAgB;QACnD,uCAAuC,EAAE,CAAC,CAAChB;OAC5C,EACDK,SAAS,CACT;MACFP,KAAK,EAAE0C,6BAAiB,CAAC;QACvB1C,KAAK;QACLH,SAAS;QACTwB,OAAO;AACPsB,QAAAA,YAAY,EAAE;AACf,OAAA,CAAE;MACHC,OAAO,EACLxB,UAAU,gBACRiB,eAAA,CAAA,KAAA,EAAA;AAAK,QAAA,aAAA,EAAa,CAACnB,gBAAgB,GAAG,IAAI,GAAGD,SAAU;AAAC4B,QAAAA,KAAK,EAAE;AAAEC,UAAAA,OAAO,EAAE;SAAa;AAAAV,QAAAA,QAAA,GACpFlC,eAAe;AAAA;AACd;AACA2B,QAAAA,cAAA,CAACkB,uBAAM,EAAA;UACLC,EAAE,EAAA,IAAA;AACFC,UAAAA,IAAI,EAAC,IAAI;AACTC,UAAAA,QAAQ,EAAC,WAAW;UACpBC,IAAI,EAAEjD,eAAe,CAACiD,IAAK;AAC3BC,UAAAA,QAAQ,EAAElC,gBAAgB,GAAGD,SAAS,GAAG,EAAG;UAC5CoC,OAAO,EAAEnD,eAAe,EAAEmD,OAAQ;UAAAjB,QAAA,EAEjClC,eAAe,CAACgC;SACX,CACT,EACAjC,MAAM;AAAA;AACL;AACA4B,QAAAA,cAAA,CAACkB,uBAAM,EAAA;UACLC,EAAE,EAAA,IAAA;AACFC,UAAAA,IAAI,EAAC,IAAI;AACTC,UAAAA,QAAQ,EAAC,SAAS;UAClBC,IAAI,EAAElD,MAAM,CAACkD,IAAK;AAClBC,UAAAA,QAAQ,EAAElC,gBAAgB,GAAGD,SAAS,GAAG,EAAG;UAC5CoC,OAAO,EAAEpD,MAAM,CAACoD,OAAQ;UAAAjB,QAAA,EAEvBnC,MAAM,CAACiC;AAAK,SACP,CACT;OACE,CAAC,GACJjB,SACL;AACDqC,MAAAA,IAAI,EAAC,QAAQ;AACb,MAAA,iBAAA,EAAiB7B,iBAAkB;AACnC,MAAA,kBAAA,EAAkBD,MAAO;AAAAY,MAAAA,QAAA,gBAEzBC,eAAA,CAAA,KAAA,EAAA;AAAK9B,QAAAA,SAAS,EAAC,mCAAmC;AAAA6B,QAAAA,QAAA,EAAA,CAC/CtC,KAAK,iBACJ+B,cAAA,CAAC0B,YAAI,EAAA;AACHjD,UAAAA,EAAE,EAAEiB,OAAQ;UACZiC,IAAI,EAAEC,qBAAU,CAACC,eAAgB;AACjCnD,UAAAA,SAAS,EAAC,yDAAyD;AAAA6B,UAAAA,QAAA,EAElEtC;AAAK,SACF,CACP,EACAC,WAAW,iBACV8B,cAAA,CAAC0B,YAAI,EAAA;AACHjD,UAAAA,EAAE,EAAEkB,MAAO;AACXjB,UAAAA,SAAS,EAAEkC,SAAI,CAAC,8BAA8B,EAAE,kCAAkC,EAAE;YAClF,8CAA8C,EAAE,CAAC,CAAC3C;AACnD,WAAA,CAAE;AAAAsC,UAAAA,QAAA,EAEFrC;AAAW,SACR,CACP;AAAA,OACE,CACL,eAAA8B,cAAA,CAAC8B,uBAAc,EAAA;AACbxD,QAAAA,QAAQ,EAAEe,gBAAiB;AAC3B+B,QAAAA,IAAI,EAAE,EAAG;AACT1C,QAAAA,SAAS,EAAC,6BAA6B;AACvCF,QAAAA,QAAQ,EAAEc;AAAa,OAAA,CAE3B;KAAiB;AACnB,GAAY,CAAC;AAEjB;;;;"}
@@ -1,140 +0,0 @@
1
- import { useState, useId } from 'react';
2
- import { clsx } from 'clsx';
3
- import Body from '../../body/Body.mjs';
4
- import Button from '../../button/Button.resolver.mjs';
5
- import '../../common/theme.mjs';
6
- import '../../common/direction.mjs';
7
- import '../../common/propsValues/control.mjs';
8
- import { Breakpoint } from '../../common/propsValues/breakpoint.mjs';
9
- import '../../common/propsValues/size.mjs';
10
- import { Typography } from '../../common/propsValues/typography.mjs';
11
- import '../../common/propsValues/width.mjs';
12
- import '../../common/propsValues/type.mjs';
13
- import '../../common/propsValues/dateMode.mjs';
14
- import '../../common/propsValues/monthFormat.mjs';
15
- import '../../common/propsValues/position.mjs';
16
- import '../../common/propsValues/layouts.mjs';
17
- import '../../common/propsValues/status.mjs';
18
- import '../../common/propsValues/sentiment.mjs';
19
- import '../../common/propsValues/profileType.mjs';
20
- import '../../common/propsValues/variant.mjs';
21
- import '../../common/propsValues/scroll.mjs';
22
- import '../../common/propsValues/markdownNodeType.mjs';
23
- import '../../common/fileType.mjs';
24
- import '@transferwise/formatting';
25
- import '@transferwise/icons';
26
- import 'react-intl';
27
- import '../../common/closeButton/CloseButton.messages.mjs';
28
- import { jsx, jsxs } from 'react/jsx-runtime';
29
- import { LiveRegion } from '../../common/liveRegion/LiveRegion.mjs';
30
- import { PrimitivePrompt } from '../PrimitivePrompt/PrimitivePrompt.mjs';
31
- import { renderPromptMedia } from '../helpers/promptMedia.mjs';
32
- import { ExpanderToggle } from '../common/Expander/Expander.mjs';
33
- import { buildAnnouncementString } from './helpers.mjs';
34
- import { useContainerSize } from '../../common/hooks/useContainerSize.mjs';
35
-
36
- const CriticalBanner = ({
37
- sentiment = 'negative',
38
- title,
39
- description,
40
- media = {},
41
- action,
42
- actionSecondary,
43
- expanded: expandedProp,
44
- onToggle,
45
- id,
46
- className,
47
- 'data-testid': testId
48
- }) => {
49
- const [containerRef, isDesktop] = useContainerSize(Breakpoint.MEDIUM);
50
- const [internalExpanded, setInternalExpanded] = useState(isDesktop ? true : onToggle && expandedProp !== undefined ? expandedProp : true);
51
- const resolvedExpanded = isDesktop ? true : expandedProp ?? internalExpanded;
52
- const handleToggle = onToggle ?? (() => setInternalExpanded(!internalExpanded));
53
- const hasActions = action ?? actionSecondary;
54
- const mediaId = useId();
55
- const titleId = useId();
56
- const descId = useId();
57
- const ariaLabelledByIds = [media['aria-hidden'] ? undefined : mediaId, !title ? undefined : titleId].filter(Boolean).join(' ');
58
- return /*#__PURE__*/jsx(LiveRegion, {
59
- "aria-live": "assertive",
60
- announceOnChange: buildAnnouncementString({
61
- title,
62
- description,
63
- expanded: resolvedExpanded,
64
- actionLabel: action?.label,
65
- actionSecondaryLabel: actionSecondary?.label
66
- }),
67
- children: /*#__PURE__*/jsxs(PrimitivePrompt, {
68
- ref: containerRef,
69
- id: id,
70
- sentiment: sentiment,
71
- emphasis: sentiment === 'neutral' ? 'base' : 'elevated',
72
- "data-testid": testId,
73
- className: clsx('wds-critical-banner', {
74
- 'wds-critical-banner--collapsed': !resolvedExpanded,
75
- 'wds-critical-banner--with-two-actions': !!actionSecondary
76
- }, className),
77
- media: renderPromptMedia({
78
- media,
79
- sentiment,
80
- mediaId,
81
- imgClassName: 'wds-critical-banner--media-image'
82
- }),
83
- actions: hasActions ? /*#__PURE__*/jsxs("div", {
84
- "aria-hidden": !resolvedExpanded ? true : undefined,
85
- style: {
86
- display: 'contents'
87
- },
88
- children: [actionSecondary &&
89
- /*#__PURE__*/
90
- // @ts-expect-error onClick type mismatch
91
- jsx(Button, {
92
- v2: true,
93
- size: "md",
94
- priority: "secondary",
95
- href: actionSecondary.href,
96
- tabIndex: resolvedExpanded ? undefined : -1,
97
- onClick: actionSecondary?.onClick,
98
- children: actionSecondary.label
99
- }), action &&
100
- /*#__PURE__*/
101
- // @ts-expect-error onClick type mismatch
102
- jsx(Button, {
103
- v2: true,
104
- size: "md",
105
- priority: "primary",
106
- href: action.href,
107
- tabIndex: resolvedExpanded ? undefined : -1,
108
- onClick: action.onClick,
109
- children: action.label
110
- })]
111
- }) : undefined,
112
- role: "region",
113
- "aria-labelledby": ariaLabelledByIds,
114
- "aria-describedby": descId,
115
- children: [/*#__PURE__*/jsxs("div", {
116
- className: "wds-critical-banner__text-wrapper",
117
- children: [title && /*#__PURE__*/jsx(Body, {
118
- id: titleId,
119
- type: Typography.BODY_LARGE_BOLD,
120
- className: "wds-critical-banner__content wds-critical-banner__title",
121
- children: title
122
- }), description && /*#__PURE__*/jsx(Body, {
123
- id: descId,
124
- className: clsx('wds-critical-banner__content', 'wds-critical-banner__description', {
125
- 'wds-critical-banner__description--with-title': !!title
126
- }),
127
- children: description
128
- })]
129
- }), /*#__PURE__*/jsx(ExpanderToggle, {
130
- expanded: resolvedExpanded,
131
- size: 24,
132
- className: "wds-critical-banner__toggle",
133
- onToggle: handleToggle
134
- })]
135
- })
136
- });
137
- };
138
-
139
- export { CriticalBanner };
140
- //# sourceMappingURL=CriticalBanner.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CriticalBanner.mjs","sources":["../../../src/prompt/CriticalBanner/CriticalBanner.tsx"],"sourcesContent":["import { ReactNode, useEffect, useId, useState } from 'react';\nimport { clsx } from 'clsx';\n\nimport Body from '../../body';\nimport Button from '../../button';\nimport { Breakpoint, LiveRegion, Typography } from '../../common';\nimport { ButtonProps } from '../../button/Button.types';\nimport { PrimitivePrompt, PrimitivePromptProps } from '../PrimitivePrompt';\n\nimport { renderPromptMedia, PromptMedia } from '../helpers/promptMedia';\nimport { ExpanderToggle } from '../common/Expander/Expander';\nimport { buildAnnouncementString } from './helpers';\nimport { useContainerSize } from '../../common/hooks/useContainerSize';\n\nexport type CriticalBannerProps = {\n title?: ReactNode;\n description: ReactNode;\n media?: PromptMedia;\n action?: Pick<ButtonProps, 'onClick' | 'href' | 'target'> & {\n label: ButtonProps['children'];\n };\n actionSecondary?: Pick<ButtonProps, 'onClick' | 'href' | 'target'> & {\n label: ButtonProps['children'];\n };\n sentiment?: Exclude<PrimitivePromptProps['sentiment'], 'proposition'>;\n /**\n * Controls whether the description and actions are visible, as a controlled component.\n * When collapsed with a title, only the title is shown.\n * When collapsed without a title, the description is trimmed to 2 lines.\n *\n * Note: On desktop (container width >= 768px), the banner is always expanded\n * regardless of this prop value.\n */\n expanded?: boolean;\n /**\n * Called when the user clicks the chevron toggle.\n * If not provided, the component will manage expanded state internally.\n */\n onToggle?: () => void;\n} & Pick<PrimitivePromptProps, 'id' | 'className' | 'data-testid'>;\n\n/**\n * A full-width, non-dismissible banner for critical messages such as account blocks or\n * time-sensitive actions that require immediate user attention.\n\n * @see {@link https://wise.design/components/critical-banner Design Spec}\n */\nexport const CriticalBanner = ({\n sentiment = 'negative',\n title,\n description,\n media = {},\n action,\n actionSecondary,\n expanded: expandedProp,\n onToggle,\n id,\n className,\n 'data-testid': testId,\n}: CriticalBannerProps) => {\n const [containerRef, isDesktop] = useContainerSize(Breakpoint.MEDIUM);\n const [internalExpanded, setInternalExpanded] = useState(\n isDesktop ? true : onToggle && expandedProp !== undefined ? expandedProp : true,\n );\n const resolvedExpanded = isDesktop ? true : (expandedProp ?? internalExpanded);\n const handleToggle = onToggle ?? (() => setInternalExpanded(!internalExpanded));\n const hasActions = action ?? actionSecondary;\n const mediaId = useId();\n const titleId = useId();\n const descId = useId();\n\n const ariaLabelledByIds = [\n media['aria-hidden'] ? undefined : mediaId,\n !title ? undefined : titleId,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <LiveRegion\n aria-live=\"assertive\"\n announceOnChange={buildAnnouncementString({\n title,\n description,\n expanded: resolvedExpanded,\n actionLabel: action?.label,\n actionSecondaryLabel: actionSecondary?.label,\n })}\n >\n <PrimitivePrompt\n ref={containerRef}\n id={id}\n sentiment={sentiment}\n emphasis={sentiment === 'neutral' ? 'base' : 'elevated'}\n data-testid={testId}\n className={clsx(\n 'wds-critical-banner',\n {\n 'wds-critical-banner--collapsed': !resolvedExpanded,\n 'wds-critical-banner--with-two-actions': !!actionSecondary,\n },\n className,\n )}\n media={renderPromptMedia({\n media,\n sentiment,\n mediaId,\n imgClassName: 'wds-critical-banner--media-image',\n })}\n actions={\n hasActions ? (\n <div aria-hidden={!resolvedExpanded ? true : undefined} style={{ display: 'contents' }}>\n {actionSecondary && (\n // @ts-expect-error onClick type mismatch\n <Button\n v2\n size=\"md\"\n priority=\"secondary\"\n href={actionSecondary.href}\n tabIndex={resolvedExpanded ? undefined : -1}\n onClick={actionSecondary?.onClick}\n >\n {actionSecondary.label}\n </Button>\n )}\n {action && (\n // @ts-expect-error onClick type mismatch\n <Button\n v2\n size=\"md\"\n priority=\"primary\"\n href={action.href}\n tabIndex={resolvedExpanded ? undefined : -1}\n onClick={action.onClick}\n >\n {action.label}\n </Button>\n )}\n </div>\n ) : undefined\n }\n role=\"region\"\n aria-labelledby={ariaLabelledByIds}\n aria-describedby={descId}\n >\n <div className=\"wds-critical-banner__text-wrapper\">\n {title && (\n <Body\n id={titleId}\n type={Typography.BODY_LARGE_BOLD}\n className=\"wds-critical-banner__content wds-critical-banner__title\"\n >\n {title}\n </Body>\n )}\n {description && (\n <Body\n id={descId}\n className={clsx('wds-critical-banner__content', 'wds-critical-banner__description', {\n 'wds-critical-banner__description--with-title': !!title,\n })}\n >\n {description}\n </Body>\n )}\n </div>\n <ExpanderToggle\n expanded={resolvedExpanded}\n size={24}\n className=\"wds-critical-banner__toggle\"\n onToggle={handleToggle}\n />\n </PrimitivePrompt>\n </LiveRegion>\n );\n};\n\nexport default CriticalBanner;\n"],"names":["CriticalBanner","sentiment","title","description","media","action","actionSecondary","expanded","expandedProp","onToggle","id","className","testId","containerRef","isDesktop","useContainerSize","Breakpoint","MEDIUM","internalExpanded","setInternalExpanded","useState","undefined","resolvedExpanded","handleToggle","hasActions","mediaId","useId","titleId","descId","ariaLabelledByIds","filter","Boolean","join","_jsx","LiveRegion","announceOnChange","buildAnnouncementString","actionLabel","label","actionSecondaryLabel","children","_jsxs","PrimitivePrompt","ref","emphasis","clsx","renderPromptMedia","imgClassName","actions","style","display","Button","v2","size","priority","href","tabIndex","onClick","role","Body","type","Typography","BODY_LARGE_BOLD","ExpanderToggle"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+CO,MAAMA,cAAc,GAAGA,CAAC;AAC7BC,EAAAA,SAAS,GAAG,UAAU;EACtBC,KAAK;EACLC,WAAW;EACXC,KAAK,GAAG,EAAE;EACVC,MAAM;EACNC,eAAe;AACfC,EAAAA,QAAQ,EAAEC,YAAY;EACtBC,QAAQ;EACRC,EAAE;EACFC,SAAS;AACT,EAAA,aAAa,EAAEC;AAAM,CACD,KAAI;EACxB,MAAM,CAACC,YAAY,EAAEC,SAAS,CAAC,GAAGC,gBAAgB,CAACC,UAAU,CAACC,MAAM,CAAC;EACrE,MAAM,CAACC,gBAAgB,EAAEC,mBAAmB,CAAC,GAAGC,QAAQ,CACtDN,SAAS,GAAG,IAAI,GAAGL,QAAQ,IAAID,YAAY,KAAKa,SAAS,GAAGb,YAAY,GAAG,IAAI,CAChF;EACD,MAAMc,gBAAgB,GAAGR,SAAS,GAAG,IAAI,GAAIN,YAAY,IAAIU,gBAAiB;EAC9E,MAAMK,YAAY,GAAGd,QAAQ,KAAK,MAAMU,mBAAmB,CAAC,CAACD,gBAAgB,CAAC,CAAC;AAC/E,EAAA,MAAMM,UAAU,GAAGnB,MAAM,IAAIC,eAAe;AAC5C,EAAA,MAAMmB,OAAO,GAAGC,KAAK,EAAE;AACvB,EAAA,MAAMC,OAAO,GAAGD,KAAK,EAAE;AACvB,EAAA,MAAME,MAAM,GAAGF,KAAK,EAAE;AAEtB,EAAA,MAAMG,iBAAiB,GAAG,CACxBzB,KAAK,CAAC,aAAa,CAAC,GAAGiB,SAAS,GAAGI,OAAO,EAC1C,CAACvB,KAAK,GAAGmB,SAAS,GAAGM,OAAO,CAC7B,CACEG,MAAM,CAACC,OAAO,CAAC,CACfC,IAAI,CAAC,GAAG,CAAC;EAEZ,oBACEC,GAAA,CAACC,UAAU,EAAA;AACT,IAAA,WAAA,EAAU,WAAW;IACrBC,gBAAgB,EAAEC,uBAAuB,CAAC;MACxClC,KAAK;MACLC,WAAW;AACXI,MAAAA,QAAQ,EAAEe,gBAAgB;MAC1Be,WAAW,EAAEhC,MAAM,EAAEiC,KAAK;MAC1BC,oBAAoB,EAAEjC,eAAe,EAAEgC;AACxC,KAAA,CAAE;IAAAE,QAAA,eAEHC,IAAA,CAACC,eAAe,EAAA;AACdC,MAAAA,GAAG,EAAE9B,YAAa;AAClBH,MAAAA,EAAE,EAAEA,EAAG;AACPT,MAAAA,SAAS,EAAEA,SAAU;AACrB2C,MAAAA,QAAQ,EAAE3C,SAAS,KAAK,SAAS,GAAG,MAAM,GAAG,UAAW;AACxD,MAAA,aAAA,EAAaW,MAAO;AACpBD,MAAAA,SAAS,EAAEkC,IAAI,CACb,qBAAqB,EACrB;QACE,gCAAgC,EAAE,CAACvB,gBAAgB;QACnD,uCAAuC,EAAE,CAAC,CAAChB;OAC5C,EACDK,SAAS,CACT;MACFP,KAAK,EAAE0C,iBAAiB,CAAC;QACvB1C,KAAK;QACLH,SAAS;QACTwB,OAAO;AACPsB,QAAAA,YAAY,EAAE;AACf,OAAA,CAAE;MACHC,OAAO,EACLxB,UAAU,gBACRiB,IAAA,CAAA,KAAA,EAAA;AAAK,QAAA,aAAA,EAAa,CAACnB,gBAAgB,GAAG,IAAI,GAAGD,SAAU;AAAC4B,QAAAA,KAAK,EAAE;AAAEC,UAAAA,OAAO,EAAE;SAAa;AAAAV,QAAAA,QAAA,GACpFlC,eAAe;AAAA;AACd;AACA2B,QAAAA,GAAA,CAACkB,MAAM,EAAA;UACLC,EAAE,EAAA,IAAA;AACFC,UAAAA,IAAI,EAAC,IAAI;AACTC,UAAAA,QAAQ,EAAC,WAAW;UACpBC,IAAI,EAAEjD,eAAe,CAACiD,IAAK;AAC3BC,UAAAA,QAAQ,EAAElC,gBAAgB,GAAGD,SAAS,GAAG,EAAG;UAC5CoC,OAAO,EAAEnD,eAAe,EAAEmD,OAAQ;UAAAjB,QAAA,EAEjClC,eAAe,CAACgC;SACX,CACT,EACAjC,MAAM;AAAA;AACL;AACA4B,QAAAA,GAAA,CAACkB,MAAM,EAAA;UACLC,EAAE,EAAA,IAAA;AACFC,UAAAA,IAAI,EAAC,IAAI;AACTC,UAAAA,QAAQ,EAAC,SAAS;UAClBC,IAAI,EAAElD,MAAM,CAACkD,IAAK;AAClBC,UAAAA,QAAQ,EAAElC,gBAAgB,GAAGD,SAAS,GAAG,EAAG;UAC5CoC,OAAO,EAAEpD,MAAM,CAACoD,OAAQ;UAAAjB,QAAA,EAEvBnC,MAAM,CAACiC;AAAK,SACP,CACT;OACE,CAAC,GACJjB,SACL;AACDqC,MAAAA,IAAI,EAAC,QAAQ;AACb,MAAA,iBAAA,EAAiB7B,iBAAkB;AACnC,MAAA,kBAAA,EAAkBD,MAAO;AAAAY,MAAAA,QAAA,gBAEzBC,IAAA,CAAA,KAAA,EAAA;AAAK9B,QAAAA,SAAS,EAAC,mCAAmC;AAAA6B,QAAAA,QAAA,EAAA,CAC/CtC,KAAK,iBACJ+B,GAAA,CAAC0B,IAAI,EAAA;AACHjD,UAAAA,EAAE,EAAEiB,OAAQ;UACZiC,IAAI,EAAEC,UAAU,CAACC,eAAgB;AACjCnD,UAAAA,SAAS,EAAC,yDAAyD;AAAA6B,UAAAA,QAAA,EAElEtC;AAAK,SACF,CACP,EACAC,WAAW,iBACV8B,GAAA,CAAC0B,IAAI,EAAA;AACHjD,UAAAA,EAAE,EAAEkB,MAAO;AACXjB,UAAAA,SAAS,EAAEkC,IAAI,CAAC,8BAA8B,EAAE,kCAAkC,EAAE;YAClF,8CAA8C,EAAE,CAAC,CAAC3C;AACnD,WAAA,CAAE;AAAAsC,UAAAA,QAAA,EAEFrC;AAAW,SACR,CACP;AAAA,OACE,CACL,eAAA8B,GAAA,CAAC8B,cAAc,EAAA;AACbxD,QAAAA,QAAQ,EAAEe,gBAAiB;AAC3B+B,QAAAA,IAAI,EAAE,EAAG;AACT1C,QAAAA,SAAS,EAAC,6BAA6B;AACvCF,QAAAA,QAAQ,EAAEc;AAAa,OAAA,CAE3B;KAAiB;AACnB,GAAY,CAAC;AAEjB;;;;"}
@@ -1,29 +0,0 @@
1
- 'use strict';
2
-
3
- /**
4
- * Helper to extract string from ReactNode for announcements.
5
- * Complex ReactNodes (JSX elements) return empty string.
6
- */
7
- const getStringValue = node => {
8
- if (typeof node === 'string' || typeof node === 'number') {
9
- return String(node);
10
- }
11
- return '';
12
- };
13
- /**
14
- * Builds the announcement string from visible content only.
15
- * Content visibility depends on expanded state and presence of title.
16
- */
17
- const buildAnnouncementString = ({
18
- title,
19
- description,
20
- expanded,
21
- actionLabel,
22
- actionSecondaryLabel
23
- }) => {
24
- return [title ? getStringValue(title) : undefined, description && (expanded || !title) ? getStringValue(description) : undefined, expanded && actionLabel ? getStringValue(actionLabel) : undefined, expanded && actionSecondaryLabel ? getStringValue(actionSecondaryLabel) : undefined].filter(Boolean).join('|');
25
- };
26
-
27
- exports.buildAnnouncementString = buildAnnouncementString;
28
- exports.getStringValue = getStringValue;
29
- //# sourceMappingURL=helpers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"helpers.js","sources":["../../../src/prompt/CriticalBanner/helpers.ts"],"sourcesContent":["import { ReactNode } from 'react';\n\n/**\n * Helper to extract string from ReactNode for announcements.\n * Complex ReactNodes (JSX elements) return empty string.\n */\nexport const getStringValue = (node: ReactNode): string => {\n if (typeof node === 'string' || typeof node === 'number') {\n return String(node);\n }\n return '';\n};\n\n/**\n * Builds the announcement string from visible content only.\n * Content visibility depends on expanded state and presence of title.\n */\nexport const buildAnnouncementString = ({\n title,\n description,\n expanded,\n actionLabel,\n actionSecondaryLabel,\n}: {\n title?: ReactNode;\n description?: ReactNode;\n expanded: boolean;\n actionLabel?: ReactNode;\n actionSecondaryLabel?: ReactNode;\n}): string => {\n return [\n title ? getStringValue(title) : undefined,\n description && (expanded || !title) ? getStringValue(description) : undefined,\n expanded && actionLabel ? getStringValue(actionLabel) : undefined,\n expanded && actionSecondaryLabel ? getStringValue(actionSecondaryLabel) : undefined,\n ]\n .filter(Boolean)\n .join('|');\n};\n"],"names":["getStringValue","node","String","buildAnnouncementString","title","description","expanded","actionLabel","actionSecondaryLabel","undefined","filter","Boolean","join"],"mappings":";;AAEA;;;AAGG;AACI,MAAMA,cAAc,GAAIC,IAAe,IAAY;EACxD,IAAI,OAAOA,IAAI,KAAK,QAAQ,IAAI,OAAOA,IAAI,KAAK,QAAQ,EAAE;IACxD,OAAOC,MAAM,CAACD,IAAI,CAAC;AACrB,EAAA;AACA,EAAA,OAAO,EAAE;AACX;AAEA;;;AAGG;AACI,MAAME,uBAAuB,GAAGA,CAAC;EACtCC,KAAK;EACLC,WAAW;EACXC,QAAQ;EACRC,WAAW;AACXC,EAAAA;AAAoB,CAOrB,KAAY;EACX,OAAO,CACLJ,KAAK,GAAGJ,cAAc,CAACI,KAAK,CAAC,GAAGK,SAAS,EACzCJ,WAAW,KAAKC,QAAQ,IAAI,CAACF,KAAK,CAAC,GAAGJ,cAAc,CAACK,WAAW,CAAC,GAAGI,SAAS,EAC7EH,QAAQ,IAAIC,WAAW,GAAGP,cAAc,CAACO,WAAW,CAAC,GAAGE,SAAS,EACjEH,QAAQ,IAAIE,oBAAoB,GAAGR,cAAc,CAACQ,oBAAoB,CAAC,GAAGC,SAAS,CACpF,CACEC,MAAM,CAACC,OAAO,CAAC,CACfC,IAAI,CAAC,GAAG,CAAC;AACd;;;;;"}
@@ -1,26 +0,0 @@
1
- /**
2
- * Helper to extract string from ReactNode for announcements.
3
- * Complex ReactNodes (JSX elements) return empty string.
4
- */
5
- const getStringValue = node => {
6
- if (typeof node === 'string' || typeof node === 'number') {
7
- return String(node);
8
- }
9
- return '';
10
- };
11
- /**
12
- * Builds the announcement string from visible content only.
13
- * Content visibility depends on expanded state and presence of title.
14
- */
15
- const buildAnnouncementString = ({
16
- title,
17
- description,
18
- expanded,
19
- actionLabel,
20
- actionSecondaryLabel
21
- }) => {
22
- return [title ? getStringValue(title) : undefined, description && (expanded || !title) ? getStringValue(description) : undefined, expanded && actionLabel ? getStringValue(actionLabel) : undefined, expanded && actionSecondaryLabel ? getStringValue(actionSecondaryLabel) : undefined].filter(Boolean).join('|');
23
- };
24
-
25
- export { buildAnnouncementString, getStringValue };
26
- //# sourceMappingURL=helpers.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"helpers.mjs","sources":["../../../src/prompt/CriticalBanner/helpers.ts"],"sourcesContent":["import { ReactNode } from 'react';\n\n/**\n * Helper to extract string from ReactNode for announcements.\n * Complex ReactNodes (JSX elements) return empty string.\n */\nexport const getStringValue = (node: ReactNode): string => {\n if (typeof node === 'string' || typeof node === 'number') {\n return String(node);\n }\n return '';\n};\n\n/**\n * Builds the announcement string from visible content only.\n * Content visibility depends on expanded state and presence of title.\n */\nexport const buildAnnouncementString = ({\n title,\n description,\n expanded,\n actionLabel,\n actionSecondaryLabel,\n}: {\n title?: ReactNode;\n description?: ReactNode;\n expanded: boolean;\n actionLabel?: ReactNode;\n actionSecondaryLabel?: ReactNode;\n}): string => {\n return [\n title ? getStringValue(title) : undefined,\n description && (expanded || !title) ? getStringValue(description) : undefined,\n expanded && actionLabel ? getStringValue(actionLabel) : undefined,\n expanded && actionSecondaryLabel ? getStringValue(actionSecondaryLabel) : undefined,\n ]\n .filter(Boolean)\n .join('|');\n};\n"],"names":["getStringValue","node","String","buildAnnouncementString","title","description","expanded","actionLabel","actionSecondaryLabel","undefined","filter","Boolean","join"],"mappings":"AAEA;;;AAGG;AACI,MAAMA,cAAc,GAAIC,IAAe,IAAY;EACxD,IAAI,OAAOA,IAAI,KAAK,QAAQ,IAAI,OAAOA,IAAI,KAAK,QAAQ,EAAE;IACxD,OAAOC,MAAM,CAACD,IAAI,CAAC;AACrB,EAAA;AACA,EAAA,OAAO,EAAE;AACX;AAEA;;;AAGG;AACI,MAAME,uBAAuB,GAAGA,CAAC;EACtCC,KAAK;EACLC,WAAW;EACXC,QAAQ;EACRC,WAAW;AACXC,EAAAA;AAAoB,CAOrB,KAAY;EACX,OAAO,CACLJ,KAAK,GAAGJ,cAAc,CAACI,KAAK,CAAC,GAAGK,SAAS,EACzCJ,WAAW,KAAKC,QAAQ,IAAI,CAACF,KAAK,CAAC,GAAGJ,cAAc,CAACK,WAAW,CAAC,GAAGI,SAAS,EAC7EH,QAAQ,IAAIC,WAAW,GAAGP,cAAc,CAACO,WAAW,CAAC,GAAGE,SAAS,EACjEH,QAAQ,IAAIE,oBAAoB,GAAGR,cAAc,CAACQ,oBAAoB,CAAC,GAAGC,SAAS,CACpF,CACEC,MAAM,CAACC,OAAO,CAAC,CACfC,IAAI,CAAC,GAAG,CAAC;AACd;;;;"}
@@ -1,35 +0,0 @@
1
- 'use strict';
2
-
3
- require('react');
4
- var clsx = require('clsx');
5
- var icons = require('@transferwise/icons');
6
- var IconButton = require('../../../iconButton/IconButton.js');
7
- var reactIntl = require('react-intl');
8
- var Expander_messages = require('./Expander.messages.js');
9
- var jsxRuntime = require('react/jsx-runtime');
10
-
11
- // Reusable toggle button component
12
- const ExpanderToggle = ({
13
- expanded,
14
- onToggle,
15
- size = 24,
16
- className,
17
- 'data-testid': testId
18
- }) => {
19
- const intl = reactIntl.useIntl();
20
- return /*#__PURE__*/jsxRuntime.jsx(IconButton.default, {
21
- size: size,
22
- priority: "secondary",
23
- "aria-label": intl.formatMessage(expanded ? Expander_messages.default.collapseAriaLabel : Expander_messages.default.expandAriaLabel),
24
- "aria-expanded": expanded,
25
- className: clsx.clsx('wds-expander-toggle', {
26
- 'wds-expander-toggle--collapsed': !expanded
27
- }, className),
28
- "data-testid": testId,
29
- onClick: onToggle,
30
- children: /*#__PURE__*/jsxRuntime.jsx(icons.ChevronUp, {})
31
- });
32
- };
33
-
34
- exports.ExpanderToggle = ExpanderToggle;
35
- //# sourceMappingURL=Expander.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Expander.js","sources":["../../../../src/prompt/common/Expander/Expander.tsx"],"sourcesContent":["import { useState, useCallback } from 'react';\nimport { clsx } from 'clsx';\nimport { ChevronUp } from '@transferwise/icons';\nimport IconButton from '../../../iconButton';\nimport { useIntl } from 'react-intl';\nimport messages from './Expander.messages';\n\nexport type ExpanderState = {\n expanded: boolean;\n toggle: () => void;\n setExpanded: (expanded: boolean) => void;\n};\n\n// Hook for managing expander state\nexport function useExpanderState(initialExpanded = true): ExpanderState {\n const [expanded, setExpanded] = useState(initialExpanded);\n\n const toggle = useCallback(() => {\n setExpanded((prev) => !prev);\n }, []);\n\n return {\n expanded,\n toggle,\n setExpanded,\n };\n}\n\n// Helper for conditional rendering based on expanded state\nexport function shouldShowWhenExpanded({\n expanded,\n hasContent,\n alwaysShow = false,\n}: {\n expanded: boolean;\n hasContent: boolean;\n alwaysShow?: boolean;\n}): boolean {\n if (alwaysShow) {\n return hasContent;\n }\n\n return expanded && hasContent;\n}\n\nexport type ExpanderToggleProps = {\n expanded: boolean;\n onToggle?: () => void;\n size?: 16 | 24 | 32 | 40 | 48 | 56 | 72;\n className?: string;\n 'data-testid'?: string;\n};\n\n// Reusable toggle button component\nexport const ExpanderToggle = ({\n expanded,\n onToggle,\n size = 24,\n className,\n 'data-testid': testId,\n}: ExpanderToggleProps) => {\n const intl = useIntl();\n\n return (\n <IconButton\n size={size}\n priority=\"secondary\"\n aria-label={intl.formatMessage(\n expanded ? messages.collapseAriaLabel : messages.expandAriaLabel,\n )}\n aria-expanded={expanded}\n className={clsx(\n 'wds-expander-toggle',\n { 'wds-expander-toggle--collapsed': !expanded },\n className,\n )}\n data-testid={testId}\n onClick={onToggle}\n >\n <ChevronUp />\n </IconButton>\n );\n};\n"],"names":["ExpanderToggle","expanded","onToggle","size","className","testId","intl","useIntl","_jsx","IconButton","priority","formatMessage","messages","collapseAriaLabel","expandAriaLabel","clsx","onClick","children","ChevronUp"],"mappings":";;;;;;;;;;AAqDA;AACO,MAAMA,cAAc,GAAGA,CAAC;EAC7BC,QAAQ;EACRC,QAAQ;AACRC,EAAAA,IAAI,GAAG,EAAE;EACTC,SAAS;AACT,EAAA,aAAa,EAAEC;AAAM,CACD,KAAI;AACxB,EAAA,MAAMC,IAAI,GAAGC,iBAAO,EAAE;EAEtB,oBACEC,cAAA,CAACC,kBAAU,EAAA;AACTN,IAAAA,IAAI,EAAEA,IAAK;AACXO,IAAAA,QAAQ,EAAC,WAAW;AACpB,IAAA,YAAA,EAAYJ,IAAI,CAACK,aAAa,CAC5BV,QAAQ,GAAGW,yBAAQ,CAACC,iBAAiB,GAAGD,yBAAQ,CAACE,eAAe,CAChE;AACF,IAAA,eAAA,EAAeb,QAAS;AACxBG,IAAAA,SAAS,EAAEW,SAAI,CACb,qBAAqB,EACrB;AAAE,MAAA,gCAAgC,EAAE,CAACd;KAAU,EAC/CG,SAAS,CACT;AACF,IAAA,aAAA,EAAaC,MAAO;AACpBW,IAAAA,OAAO,EAAEd,QAAS;AAAAe,IAAAA,QAAA,eAElBT,cAAA,CAACU,eAAS,EAAA,EAAA;AACZ,GAAY,CAAC;AAEjB;;;;"}
@@ -1,17 +0,0 @@
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
- expandAriaLabel: {
9
- id: "neptune.Expander.expandAriaLabel"
10
- },
11
- collapseAriaLabel: {
12
- id: "neptune.Expander.collapseAriaLabel"
13
- }
14
- });
15
-
16
- exports.default = messages;
17
- //# sourceMappingURL=Expander.messages.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Expander.messages.js","sources":["../../../../src/prompt/common/Expander/Expander.messages.ts"],"sourcesContent":["import { defineMessages } from 'react-intl';\n\nexport default defineMessages({\n expandAriaLabel: {\n id: 'neptune.Expander.expandAriaLabel',\n defaultMessage: 'Expand',\n description: 'Expand button for expander',\n },\n collapseAriaLabel: {\n id: 'neptune.Expander.collapseAriaLabel',\n defaultMessage: 'Collapse',\n description: 'Collapse button for expander',\n },\n});\n"],"names":["defineMessages","expandAriaLabel","id","collapseAriaLabel"],"mappings":";;;;;;AAEA,eAAeA,wBAAc,CAAC;AAC5BC,EAAAA,eAAe,EAAE;IACfC,EAAE,EAAA;GAGH;AACDC,EAAAA,iBAAiB,EAAE;IACjBD,EAAE,EAAA;AAGH;AACF,CAAA,CAAC;;;;"}
@@ -1,13 +0,0 @@
1
- import { defineMessages } from 'react-intl';
2
-
3
- var messages = defineMessages({
4
- expandAriaLabel: {
5
- id: "neptune.Expander.expandAriaLabel"
6
- },
7
- collapseAriaLabel: {
8
- id: "neptune.Expander.collapseAriaLabel"
9
- }
10
- });
11
-
12
- export { messages as default };
13
- //# sourceMappingURL=Expander.messages.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Expander.messages.mjs","sources":["../../../../src/prompt/common/Expander/Expander.messages.ts"],"sourcesContent":["import { defineMessages } from 'react-intl';\n\nexport default defineMessages({\n expandAriaLabel: {\n id: 'neptune.Expander.expandAriaLabel',\n defaultMessage: 'Expand',\n description: 'Expand button for expander',\n },\n collapseAriaLabel: {\n id: 'neptune.Expander.collapseAriaLabel',\n defaultMessage: 'Collapse',\n description: 'Collapse button for expander',\n },\n});\n"],"names":["defineMessages","expandAriaLabel","id","collapseAriaLabel"],"mappings":";;AAEA,eAAeA,cAAc,CAAC;AAC5BC,EAAAA,eAAe,EAAE;IACfC,EAAE,EAAA;GAGH;AACDC,EAAAA,iBAAiB,EAAE;IACjBD,EAAE,EAAA;AAGH;AACF,CAAA,CAAC;;;;"}
@@ -1,33 +0,0 @@
1
- import 'react';
2
- import { clsx } from 'clsx';
3
- import { ChevronUp } from '@transferwise/icons';
4
- import IconButton from '../../../iconButton/IconButton.mjs';
5
- import { useIntl } from 'react-intl';
6
- import messages from './Expander.messages.mjs';
7
- import { jsx } from 'react/jsx-runtime';
8
-
9
- // Reusable toggle button component
10
- const ExpanderToggle = ({
11
- expanded,
12
- onToggle,
13
- size = 24,
14
- className,
15
- 'data-testid': testId
16
- }) => {
17
- const intl = useIntl();
18
- return /*#__PURE__*/jsx(IconButton, {
19
- size: size,
20
- priority: "secondary",
21
- "aria-label": intl.formatMessage(expanded ? messages.collapseAriaLabel : messages.expandAriaLabel),
22
- "aria-expanded": expanded,
23
- className: clsx('wds-expander-toggle', {
24
- 'wds-expander-toggle--collapsed': !expanded
25
- }, className),
26
- "data-testid": testId,
27
- onClick: onToggle,
28
- children: /*#__PURE__*/jsx(ChevronUp, {})
29
- });
30
- };
31
-
32
- export { ExpanderToggle };
33
- //# sourceMappingURL=Expander.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Expander.mjs","sources":["../../../../src/prompt/common/Expander/Expander.tsx"],"sourcesContent":["import { useState, useCallback } from 'react';\nimport { clsx } from 'clsx';\nimport { ChevronUp } from '@transferwise/icons';\nimport IconButton from '../../../iconButton';\nimport { useIntl } from 'react-intl';\nimport messages from './Expander.messages';\n\nexport type ExpanderState = {\n expanded: boolean;\n toggle: () => void;\n setExpanded: (expanded: boolean) => void;\n};\n\n// Hook for managing expander state\nexport function useExpanderState(initialExpanded = true): ExpanderState {\n const [expanded, setExpanded] = useState(initialExpanded);\n\n const toggle = useCallback(() => {\n setExpanded((prev) => !prev);\n }, []);\n\n return {\n expanded,\n toggle,\n setExpanded,\n };\n}\n\n// Helper for conditional rendering based on expanded state\nexport function shouldShowWhenExpanded({\n expanded,\n hasContent,\n alwaysShow = false,\n}: {\n expanded: boolean;\n hasContent: boolean;\n alwaysShow?: boolean;\n}): boolean {\n if (alwaysShow) {\n return hasContent;\n }\n\n return expanded && hasContent;\n}\n\nexport type ExpanderToggleProps = {\n expanded: boolean;\n onToggle?: () => void;\n size?: 16 | 24 | 32 | 40 | 48 | 56 | 72;\n className?: string;\n 'data-testid'?: string;\n};\n\n// Reusable toggle button component\nexport const ExpanderToggle = ({\n expanded,\n onToggle,\n size = 24,\n className,\n 'data-testid': testId,\n}: ExpanderToggleProps) => {\n const intl = useIntl();\n\n return (\n <IconButton\n size={size}\n priority=\"secondary\"\n aria-label={intl.formatMessage(\n expanded ? messages.collapseAriaLabel : messages.expandAriaLabel,\n )}\n aria-expanded={expanded}\n className={clsx(\n 'wds-expander-toggle',\n { 'wds-expander-toggle--collapsed': !expanded },\n className,\n )}\n data-testid={testId}\n onClick={onToggle}\n >\n <ChevronUp />\n </IconButton>\n );\n};\n"],"names":["ExpanderToggle","expanded","onToggle","size","className","testId","intl","useIntl","_jsx","IconButton","priority","formatMessage","messages","collapseAriaLabel","expandAriaLabel","clsx","onClick","children","ChevronUp"],"mappings":";;;;;;;;AAqDA;AACO,MAAMA,cAAc,GAAGA,CAAC;EAC7BC,QAAQ;EACRC,QAAQ;AACRC,EAAAA,IAAI,GAAG,EAAE;EACTC,SAAS;AACT,EAAA,aAAa,EAAEC;AAAM,CACD,KAAI;AACxB,EAAA,MAAMC,IAAI,GAAGC,OAAO,EAAE;EAEtB,oBACEC,GAAA,CAACC,UAAU,EAAA;AACTN,IAAAA,IAAI,EAAEA,IAAK;AACXO,IAAAA,QAAQ,EAAC,WAAW;AACpB,IAAA,YAAA,EAAYJ,IAAI,CAACK,aAAa,CAC5BV,QAAQ,GAAGW,QAAQ,CAACC,iBAAiB,GAAGD,QAAQ,CAACE,eAAe,CAChE;AACF,IAAA,eAAA,EAAeb,QAAS;AACxBG,IAAAA,SAAS,EAAEW,IAAI,CACb,qBAAqB,EACrB;AAAE,MAAA,gCAAgC,EAAE,CAACd;KAAU,EAC/CG,SAAS,CACT;AACF,IAAA,aAAA,EAAaC,MAAO;AACpBW,IAAAA,OAAO,EAAEd,QAAS;AAAAe,IAAAA,QAAA,eAElBT,GAAA,CAACU,SAAS,EAAA,EAAA;AACZ,GAAY,CAAC;AAEjB;;;;"}
@@ -1,52 +0,0 @@
1
- 'use strict';
2
-
3
- var icons = require('@transferwise/icons');
4
- var AvatarView = require('../../avatarView/AvatarView.js');
5
- var Image = require('../../image/Image.js');
6
- var StatusIcon = require('../../statusIcon/StatusIcon.js');
7
- var jsxRuntime = require('react/jsx-runtime');
8
-
9
- function renderPromptMedia({
10
- media,
11
- sentiment,
12
- mediaId,
13
- imgClassName
14
- }) {
15
- if (media?.imgSrc) {
16
- return /*#__PURE__*/jsxRuntime.jsx(Image.default, {
17
- id: mediaId,
18
- src: media.imgSrc,
19
- className: imgClassName,
20
- alt: media['aria-label'] ?? ''
21
- });
22
- }
23
- if (media?.avatar) {
24
- const badge = media.avatar.badge ? media.avatar.badge : sentiment === 'proposition' ? {} : {
25
- status: sentiment
26
- };
27
- return /*#__PURE__*/jsxRuntime.jsx(AvatarView.default, {
28
- ...media.avatar,
29
- badge: badge,
30
- "aria-label": media['aria-label'],
31
- "aria-hidden": media['aria-hidden'],
32
- id: mediaId,
33
- size: 48,
34
- children: media.avatar.asset
35
- });
36
- }
37
- return sentiment === 'proposition' ? /*#__PURE__*/jsxRuntime.jsx(AvatarView.default, {
38
- id: mediaId,
39
- size: 48,
40
- "aria-label": media['aria-label'],
41
- "aria-hidden": media['aria-hidden'],
42
- children: /*#__PURE__*/jsxRuntime.jsx(icons.GiftBox, {})
43
- }) : /*#__PURE__*/jsxRuntime.jsx(StatusIcon.default, {
44
- id: mediaId,
45
- size: 48,
46
- sentiment: sentiment,
47
- iconLabel: media['aria-hidden'] ? null : media['aria-label']
48
- });
49
- }
50
-
51
- exports.renderPromptMedia = renderPromptMedia;
52
- //# sourceMappingURL=promptMedia.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"promptMedia.js","sources":["../../../src/prompt/helpers/promptMedia.tsx"],"sourcesContent":["import { ReactNode } from 'react';\nimport { GiftBox } from '@transferwise/icons';\n\nimport AvatarView, { AvatarViewProps } from '../../avatarView';\nimport Image from '../../image';\nimport StatusIcon from '../../statusIcon';\nimport { BadgeAssetsProps } from '../../badge';\nimport { PrimitivePromptProps } from '../PrimitivePrompt';\n\nexport type PromptMedia = {\n imgSrc?: string;\n avatar?: Pick<AvatarViewProps, 'imgSrc' | 'profileName' | 'profileType'> & {\n asset?: AvatarViewProps['children'];\n badge?: Pick<BadgeAssetsProps, 'flagCode'>;\n };\n 'aria-label'?: string;\n 'aria-hidden'?: boolean;\n};\n\ntype RenderPromptMediaOptions = {\n media: PromptMedia;\n sentiment: PrimitivePromptProps['sentiment'];\n mediaId: string;\n imgClassName: string;\n};\n\nexport function renderPromptMedia({\n media,\n sentiment,\n mediaId,\n imgClassName,\n}: RenderPromptMediaOptions): ReactNode {\n if (media?.imgSrc) {\n return (\n <Image\n id={mediaId}\n src={media.imgSrc}\n className={imgClassName}\n alt={media['aria-label'] ?? ''}\n />\n );\n }\n if (media?.avatar) {\n const badge = media.avatar.badge\n ? media.avatar.badge\n : sentiment === 'proposition'\n ? {}\n : { status: sentiment };\n return (\n <AvatarView\n {...media.avatar}\n badge={badge}\n aria-label={media['aria-label']}\n aria-hidden={media['aria-hidden']}\n id={mediaId}\n size={48}\n >\n {media.avatar.asset}\n </AvatarView>\n );\n }\n return sentiment === 'proposition' ? (\n <AvatarView\n id={mediaId}\n size={48}\n aria-label={media['aria-label']}\n aria-hidden={media['aria-hidden']}\n >\n <GiftBox />\n </AvatarView>\n ) : (\n <StatusIcon\n id={mediaId}\n size={48}\n sentiment={sentiment}\n iconLabel={media['aria-hidden'] ? null : media['aria-label']}\n />\n );\n}\n"],"names":["renderPromptMedia","media","sentiment","mediaId","imgClassName","imgSrc","_jsx","Image","id","src","className","alt","avatar","badge","status","AvatarView","size","children","asset","GiftBox","StatusIcon","iconLabel"],"mappings":";;;;;;;;AA0BM,SAAUA,iBAAiBA,CAAC;EAChCC,KAAK;EACLC,SAAS;EACTC,OAAO;AACPC,EAAAA;AAAY,CACa,EAAA;EACzB,IAAIH,KAAK,EAAEI,MAAM,EAAE;IACjB,oBACEC,cAAA,CAACC,aAAK,EAAA;AACJC,MAAAA,EAAE,EAAEL,OAAQ;MACZM,GAAG,EAAER,KAAK,CAACI,MAAO;AAClBK,MAAAA,SAAS,EAAEN,YAAa;AACxBO,MAAAA,GAAG,EAAEV,KAAK,CAAC,YAAY,CAAC,IAAI;AAAG,KAAA,CAC/B;AAEN,EAAA;EACA,IAAIA,KAAK,EAAEW,MAAM,EAAE;IACjB,MAAMC,KAAK,GAAGZ,KAAK,CAACW,MAAM,CAACC,KAAK,GAC5BZ,KAAK,CAACW,MAAM,CAACC,KAAK,GAClBX,SAAS,KAAK,aAAa,GACzB,EAAE,GACF;AAAEY,MAAAA,MAAM,EAAEZ;KAAW;IAC3B,oBACEI,cAAA,CAACS,kBAAU,EAAA;MAAA,GACLd,KAAK,CAACW,MAAM;AAChBC,MAAAA,KAAK,EAAEA,KAAM;MACb,YAAA,EAAYZ,KAAK,CAAC,YAAY,CAAE;MAChC,aAAA,EAAaA,KAAK,CAAC,aAAa,CAAE;AAClCO,MAAAA,EAAE,EAAEL,OAAQ;AACZa,MAAAA,IAAI,EAAE,EAAG;AAAAC,MAAAA,QAAA,EAERhB,KAAK,CAACW,MAAM,CAACM;AAAK,KACT,CAAC;AAEjB,EAAA;AACA,EAAA,OAAOhB,SAAS,KAAK,aAAa,gBAChCI,cAAA,CAACS,kBAAU,EAAA;AACTP,IAAAA,EAAE,EAAEL,OAAQ;AACZa,IAAAA,IAAI,EAAE,EAAG;IACT,YAAA,EAAYf,KAAK,CAAC,YAAY,CAAE;IAChC,aAAA,EAAaA,KAAK,CAAC,aAAa,CAAE;AAAAgB,IAAAA,QAAA,eAElCX,cAAA,CAACa,aAAO,EAAA,EAAA;AACV,GAAY,CAAC,gBAEbb,cAAA,CAACc,kBAAU,EAAA;AACTZ,IAAAA,EAAE,EAAEL,OAAQ;AACZa,IAAAA,IAAI,EAAE,EAAG;AACTd,IAAAA,SAAS,EAAEA,SAAU;IACrBmB,SAAS,EAAEpB,KAAK,CAAC,aAAa,CAAC,GAAG,IAAI,GAAGA,KAAK,CAAC,YAAY;AAAE,GAAA,CAEhE;AACH;;;;"}