@common-origin/design-system 2.19.0 → 2.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (275) hide show
  1. package/dist/client.js +169 -169
  2. package/dist/client.js.map +1 -1
  3. package/dist/components/atoms/Avatar/Avatar.d.mts +8 -0
  4. package/dist/components/atoms/Avatar/Avatar.mjs +103 -0
  5. package/dist/components/atoms/Avatar/Avatar.mjs.map +1 -0
  6. package/dist/components/atoms/Avatar/index.d.mts +1 -0
  7. package/dist/components/atoms/Badge/Badge.d.mts +25 -0
  8. package/dist/components/atoms/Badge/Badge.mjs +98 -0
  9. package/dist/components/atoms/Badge/Badge.mjs.map +1 -0
  10. package/dist/components/atoms/Badge/index.d.mts +2 -0
  11. package/dist/components/atoms/Box/Box.d.mts +62 -0
  12. package/dist/components/atoms/Box/Box.mjs +246 -0
  13. package/dist/components/atoms/Box/Box.mjs.map +1 -0
  14. package/dist/components/atoms/Box/index.d.mts +1 -0
  15. package/dist/components/atoms/Button/Button.d.mts +40 -0
  16. package/dist/components/atoms/Button/Button.mjs +208 -0
  17. package/dist/components/atoms/Button/Button.mjs.map +1 -0
  18. package/dist/components/atoms/Button/index.d.mts +1 -0
  19. package/dist/components/atoms/CategoryBadge/CategoryBadge.d.mts +29 -0
  20. package/dist/components/atoms/CategoryBadge/CategoryBadge.mjs +29 -0
  21. package/dist/components/atoms/CategoryBadge/CategoryBadge.mjs.map +1 -0
  22. package/dist/components/atoms/CategoryBadge/index.d.mts +2 -0
  23. package/dist/components/atoms/CategoryLabel/CategoryLabel.d.mts +69 -0
  24. package/dist/components/atoms/CategoryLabel/CategoryLabel.mjs +151 -0
  25. package/dist/components/atoms/CategoryLabel/CategoryLabel.mjs.map +1 -0
  26. package/dist/components/atoms/CategoryLabel/index.d.mts +2 -0
  27. package/dist/components/atoms/Chip/BooleanChip.d.mts +28 -0
  28. package/dist/components/atoms/Chip/BooleanChip.mjs +76 -0
  29. package/dist/components/atoms/Chip/BooleanChip.mjs.map +1 -0
  30. package/dist/components/atoms/Chip/Chip.d.mts +37 -0
  31. package/dist/components/atoms/Chip/Chip.mjs +76 -0
  32. package/dist/components/atoms/Chip/Chip.mjs.map +1 -0
  33. package/dist/components/atoms/Chip/FilterChip.d.mts +13 -0
  34. package/dist/components/atoms/Chip/FilterChip.mjs +14 -0
  35. package/dist/components/atoms/Chip/FilterChip.mjs.map +1 -0
  36. package/dist/components/atoms/Chip/InputChip.d.mts +27 -0
  37. package/dist/components/atoms/Chip/InputChip.mjs +97 -0
  38. package/dist/components/atoms/Chip/InputChip.mjs.map +1 -0
  39. package/dist/components/atoms/Chip/index.d.mts +4 -0
  40. package/dist/components/atoms/Chip/shared/ChipBase.d.mts +12 -0
  41. package/dist/components/atoms/Chip/shared/ChipBase.mjs +45 -0
  42. package/dist/components/atoms/Chip/shared/ChipBase.mjs.map +1 -0
  43. package/dist/components/atoms/Chip/shared/types.d.mts +34 -0
  44. package/dist/components/atoms/Chip/shared/utils.d.mts +10 -0
  45. package/dist/components/atoms/Chip/shared/utils.mjs +46 -0
  46. package/dist/components/atoms/Chip/shared/utils.mjs.map +1 -0
  47. package/dist/components/atoms/Container/Container.d.mts +6 -0
  48. package/dist/components/atoms/Container/Container.mjs +24 -0
  49. package/dist/components/atoms/Container/Container.mjs.map +1 -0
  50. package/dist/components/atoms/Container/index.d.mts +1 -0
  51. package/dist/components/atoms/DateFormatter/DateFormatter.d.mts +23 -0
  52. package/dist/components/atoms/DateFormatter/DateFormatter.mjs +64 -0
  53. package/dist/components/atoms/DateFormatter/DateFormatter.mjs.map +1 -0
  54. package/dist/components/atoms/DateFormatter/index.d.mts +1 -0
  55. package/dist/components/atoms/Divider/Divider.d.mts +30 -0
  56. package/dist/components/atoms/Divider/Divider.mjs +134 -0
  57. package/dist/components/atoms/Divider/Divider.mjs.map +1 -0
  58. package/dist/components/atoms/Divider/index.d.mts +1 -0
  59. package/dist/components/atoms/Icon/Icon.d.mts +22 -0
  60. package/dist/components/atoms/Icon/Icon.mjs +95 -0
  61. package/dist/components/atoms/Icon/Icon.mjs.map +1 -0
  62. package/dist/components/atoms/Icon/index.d.mts +1 -0
  63. package/dist/components/atoms/IconButton/IconButton.d.mts +14 -0
  64. package/dist/components/atoms/IconButton/IconButton.mjs +150 -0
  65. package/dist/components/atoms/IconButton/IconButton.mjs.map +1 -0
  66. package/dist/components/atoms/IconButton/index.d.mts +1 -0
  67. package/dist/components/atoms/MoneyDisplay/MoneyDisplay.d.mts +26 -0
  68. package/dist/components/atoms/MoneyDisplay/MoneyDisplay.mjs +126 -0
  69. package/dist/components/atoms/MoneyDisplay/MoneyDisplay.mjs.map +1 -0
  70. package/dist/components/atoms/MoneyDisplay/index.d.mts +2 -0
  71. package/dist/components/atoms/Picture/Picture.d.mts +12 -0
  72. package/dist/components/atoms/Picture/Picture.mjs +65 -0
  73. package/dist/components/atoms/Picture/Picture.mjs.map +1 -0
  74. package/dist/components/atoms/Picture/index.d.mts +1 -0
  75. package/dist/components/atoms/ProgressBar/ProgressBar.d.mts +21 -0
  76. package/dist/components/atoms/ProgressBar/ProgressBar.mjs +91 -0
  77. package/dist/components/atoms/ProgressBar/ProgressBar.mjs.map +1 -0
  78. package/dist/components/atoms/ProgressBar/index.d.mts +2 -0
  79. package/dist/components/atoms/Stack/Stack.d.mts +16 -0
  80. package/dist/components/atoms/Stack/Stack.mjs +71 -0
  81. package/dist/components/atoms/Stack/Stack.mjs.map +1 -0
  82. package/dist/components/atoms/Stack/index.d.mts +1 -0
  83. package/dist/components/atoms/StatusBadge/StatusBadge.d.mts +23 -0
  84. package/dist/components/atoms/StatusBadge/StatusBadge.mjs +18 -0
  85. package/dist/components/atoms/StatusBadge/StatusBadge.mjs.map +1 -0
  86. package/dist/components/atoms/StatusBadge/index.d.mts +2 -0
  87. package/dist/components/atoms/StatusLabel/StatusLabel.d.mts +17 -0
  88. package/dist/components/atoms/StatusLabel/StatusLabel.mjs +28 -0
  89. package/dist/components/atoms/StatusLabel/StatusLabel.mjs.map +1 -0
  90. package/dist/components/atoms/StatusLabel/StatusLabelBase.d.mts +49 -0
  91. package/dist/components/atoms/StatusLabel/StatusLabelBase.mjs +161 -0
  92. package/dist/components/atoms/StatusLabel/StatusLabelBase.mjs.map +1 -0
  93. package/dist/components/atoms/StatusLabel/index.d.mts +2 -0
  94. package/dist/components/atoms/Tag/Tag.d.mts +36 -0
  95. package/dist/components/atoms/Tag/Tag.mjs +115 -0
  96. package/dist/components/atoms/Tag/Tag.mjs.map +1 -0
  97. package/dist/components/atoms/Tag/index.d.mts +2 -0
  98. package/dist/components/atoms/Typography/Typography.d.mts +34 -0
  99. package/dist/components/atoms/Typography/Typography.mjs +139 -0
  100. package/dist/components/atoms/Typography/Typography.mjs.map +1 -0
  101. package/dist/components/atoms/Typography/index.d.mts +1 -0
  102. package/dist/components/atoms/index.d.mts +20 -0
  103. package/dist/components/index.d.mts +4 -0
  104. package/dist/components/layout/GridSystem/GridSystem.d.mts +58 -0
  105. package/dist/components/layout/GridSystem/GridSystem.mjs +221 -0
  106. package/dist/components/layout/GridSystem/GridSystem.mjs.map +1 -0
  107. package/dist/components/layout/GridSystem/index.d.mts +1 -0
  108. package/dist/components/layout/index.d.mts +1 -0
  109. package/dist/components/molecules/AccountCard/AccountCard.d.mts +44 -0
  110. package/dist/components/molecules/AccountCard/AccountCard.mjs +191 -0
  111. package/dist/components/molecules/AccountCard/AccountCard.mjs.map +1 -0
  112. package/dist/components/molecules/AccountCard/index.d.mts +2 -0
  113. package/dist/components/molecules/ActionSheet/ActionSheet.d.mts +111 -0
  114. package/dist/components/molecules/ActionSheet/ActionSheet.mjs +283 -0
  115. package/dist/components/molecules/ActionSheet/ActionSheet.mjs.map +1 -0
  116. package/dist/components/molecules/ActionSheet/index.d.mts +2 -0
  117. package/dist/components/molecules/AgentInput/AgentInput.d.mts +30 -0
  118. package/dist/components/molecules/AgentInput/AgentInput.mjs +735 -0
  119. package/dist/components/molecules/AgentInput/AgentInput.mjs.map +1 -0
  120. package/dist/components/molecules/AgentInput/agentInputSpeech.d.mts +43 -0
  121. package/dist/components/molecules/AgentInput/agentInputSpeech.mjs +49 -0
  122. package/dist/components/molecules/AgentInput/agentInputSpeech.mjs.map +1 -0
  123. package/dist/components/molecules/AgentInput/agentInputStateMachine.d.mts +29 -0
  124. package/dist/components/molecules/AgentInput/agentInputStateMachine.mjs +55 -0
  125. package/dist/components/molecules/AgentInput/agentInputStateMachine.mjs.map +1 -0
  126. package/dist/components/molecules/AgentInput/index.d.mts +3 -0
  127. package/dist/components/molecules/Alert/Alert.d.mts +68 -0
  128. package/dist/components/molecules/Alert/Alert.mjs +284 -0
  129. package/dist/components/molecules/Alert/Alert.mjs.map +1 -0
  130. package/dist/components/molecules/Alert/index.d.mts +1 -0
  131. package/dist/components/molecules/Breadcrumbs/Breadcrumbs.d.mts +16 -0
  132. package/dist/components/molecules/Breadcrumbs/Breadcrumbs.mjs +74 -0
  133. package/dist/components/molecules/Breadcrumbs/Breadcrumbs.mjs.map +1 -0
  134. package/dist/components/molecules/Breadcrumbs/index.d.mts +1 -0
  135. package/dist/components/molecules/CardLarge/CardLarge.d.mts +12 -0
  136. package/dist/components/molecules/CardLarge/CardLarge.mjs +75 -0
  137. package/dist/components/molecules/CardLarge/CardLarge.mjs.map +1 -0
  138. package/dist/components/molecules/CardLarge/index.d.mts +1 -0
  139. package/dist/components/molecules/CardSmall/CardSmall.d.mts +16 -0
  140. package/dist/components/molecules/CardSmall/CardSmall.mjs +73 -0
  141. package/dist/components/molecules/CardSmall/CardSmall.mjs.map +1 -0
  142. package/dist/components/molecules/CardSmall/index.d.mts +1 -0
  143. package/dist/components/molecules/Checkbox/Checkbox.d.mts +64 -0
  144. package/dist/components/molecules/Checkbox/Checkbox.mjs +139 -0
  145. package/dist/components/molecules/Checkbox/Checkbox.mjs.map +1 -0
  146. package/dist/components/molecules/Checkbox/SelectableInputBase.d.mts +40 -0
  147. package/dist/components/molecules/Checkbox/SelectableInputBase.mjs +99 -0
  148. package/dist/components/molecules/Checkbox/SelectableInputBase.mjs.map +1 -0
  149. package/dist/components/molecules/Checkbox/index.d.mts +3 -0
  150. package/dist/components/molecules/ChipGroup/ChipGroup.d.mts +7 -0
  151. package/dist/components/molecules/ChipGroup/ChipGroup.mjs +54 -0
  152. package/dist/components/molecules/ChipGroup/ChipGroup.mjs.map +1 -0
  153. package/dist/components/molecules/ChipGroup/index.d.mts +1 -0
  154. package/dist/components/molecules/CodeBlock/CodeBlock.d.mts +46 -0
  155. package/dist/components/molecules/CodeBlock/CodeBlock.mjs +231 -0
  156. package/dist/components/molecules/CodeBlock/CodeBlock.mjs.map +1 -0
  157. package/dist/components/molecules/CodeBlock/index.d.mts +1 -0
  158. package/dist/components/molecules/DateGroup/DateGroup.d.mts +37 -0
  159. package/dist/components/molecules/DateGroup/DateGroup.mjs +104 -0
  160. package/dist/components/molecules/DateGroup/DateGroup.mjs.map +1 -0
  161. package/dist/components/molecules/DateGroup/index.d.mts +2 -0
  162. package/dist/components/molecules/Dropdown/Dropdown.d.mts +27 -0
  163. package/dist/components/molecules/Dropdown/Dropdown.mjs +282 -0
  164. package/dist/components/molecules/Dropdown/Dropdown.mjs.map +1 -0
  165. package/dist/components/molecules/Dropdown/index.d.mts +1 -0
  166. package/dist/components/molecules/EmptyState/EmptyState.d.mts +32 -0
  167. package/dist/components/molecules/EmptyState/EmptyState.mjs +133 -0
  168. package/dist/components/molecules/EmptyState/EmptyState.mjs.map +1 -0
  169. package/dist/components/molecules/EmptyState/index.d.mts +2 -0
  170. package/dist/components/molecules/FeatureBlock/FeatureBlock.d.mts +14 -0
  171. package/dist/components/molecules/FeatureBlock/FeatureBlock.mjs +99 -0
  172. package/dist/components/molecules/FeatureBlock/FeatureBlock.mjs.map +1 -0
  173. package/dist/components/molecules/FeatureBlock/index.d.mts +1 -0
  174. package/dist/components/molecules/InlineAlert/InlineAlert.d.mts +54 -0
  175. package/dist/components/molecules/InlineAlert/InlineAlert.mjs +140 -0
  176. package/dist/components/molecules/InlineAlert/InlineAlert.mjs.map +1 -0
  177. package/dist/components/molecules/InlineAlert/index.d.mts +2 -0
  178. package/dist/components/molecules/List/List.d.mts +30 -0
  179. package/dist/components/molecules/List/List.mjs +45 -0
  180. package/dist/components/molecules/List/List.mjs.map +1 -0
  181. package/dist/components/molecules/List/ListContext.d.mts +6 -0
  182. package/dist/components/molecules/List/ListContext.mjs +11 -0
  183. package/dist/components/molecules/List/ListContext.mjs.map +1 -0
  184. package/dist/components/molecules/List/ListItem.d.mts +101 -0
  185. package/dist/components/molecules/List/ListItem.mjs +224 -0
  186. package/dist/components/molecules/List/ListItem.mjs.map +1 -0
  187. package/dist/components/molecules/List/index.d.mts +4 -0
  188. package/dist/components/molecules/Modal/Modal.d.mts +69 -0
  189. package/dist/components/molecules/Modal/Modal.mjs +259 -0
  190. package/dist/components/molecules/Modal/Modal.mjs.map +1 -0
  191. package/dist/components/molecules/Modal/index.d.mts +2 -0
  192. package/dist/components/molecules/NumberInput/NumberInput.d.mts +86 -0
  193. package/dist/components/molecules/NumberInput/NumberInput.mjs +268 -0
  194. package/dist/components/molecules/NumberInput/NumberInput.mjs.map +1 -0
  195. package/dist/components/molecules/NumberInput/index.d.mts +2 -0
  196. package/dist/components/molecules/PageTitle/PageTitle.d.mts +21 -0
  197. package/dist/components/molecules/PageTitle/PageTitle.mjs +77 -0
  198. package/dist/components/molecules/PageTitle/PageTitle.mjs.map +1 -0
  199. package/dist/components/molecules/PageTitle/index.d.mts +1 -0
  200. package/dist/components/molecules/PasswordField/PasswordField.d.mts +55 -0
  201. package/dist/components/molecules/PasswordField/PasswordField.mjs +146 -0
  202. package/dist/components/molecules/PasswordField/PasswordField.mjs.map +1 -0
  203. package/dist/components/molecules/PasswordField/index.d.mts +2 -0
  204. package/dist/components/molecules/SearchField/SearchField.d.mts +108 -0
  205. package/dist/components/molecules/SearchField/SearchField.mjs +340 -0
  206. package/dist/components/molecules/SearchField/SearchField.mjs.map +1 -0
  207. package/dist/components/molecules/SearchField/index.d.mts +2 -0
  208. package/dist/components/molecules/Sheet/Sheet.d.mts +96 -0
  209. package/dist/components/molecules/Sheet/Sheet.mjs +243 -0
  210. package/dist/components/molecules/Sheet/Sheet.mjs.map +1 -0
  211. package/dist/components/molecules/Sheet/index.d.mts +2 -0
  212. package/dist/components/molecules/Slider/Slider.d.mts +102 -0
  213. package/dist/components/molecules/Slider/Slider.mjs +462 -0
  214. package/dist/components/molecules/Slider/Slider.mjs.map +1 -0
  215. package/dist/components/molecules/Slider/index.d.mts +2 -0
  216. package/dist/components/molecules/TabBar/TabBar.d.mts +82 -0
  217. package/dist/components/molecules/TabBar/TabBar.mjs +213 -0
  218. package/dist/components/molecules/TabBar/TabBar.mjs.map +1 -0
  219. package/dist/components/molecules/TabBar/index.d.mts +2 -0
  220. package/dist/components/molecules/TextField/InputBase.d.mts +22 -0
  221. package/dist/components/molecules/TextField/InputBase.mjs +56 -0
  222. package/dist/components/molecules/TextField/InputBase.mjs.map +1 -0
  223. package/dist/components/molecules/TextField/TextField.d.mts +56 -0
  224. package/dist/components/molecules/TextField/TextField.mjs +115 -0
  225. package/dist/components/molecules/TextField/TextField.mjs.map +1 -0
  226. package/dist/components/molecules/TextField/index.d.mts +4 -0
  227. package/dist/components/molecules/TransactionListItem/TransactionListItem.d.mts +39 -0
  228. package/dist/components/molecules/TransactionListItem/TransactionListItem.mjs +224 -0
  229. package/dist/components/molecules/TransactionListItem/TransactionListItem.mjs.map +1 -0
  230. package/dist/components/molecules/TransactionListItem/index.d.mts +2 -0
  231. package/dist/components/molecules/index.d.mts +26 -0
  232. package/dist/index.d.mts +3 -0
  233. package/dist/index.mjs +55 -0
  234. package/dist/index.mjs.map +1 -0
  235. package/dist/lib/cssTokens.d.mts +14 -0
  236. package/dist/lib/cssTokens.mjs +19 -0
  237. package/dist/lib/cssTokens.mjs.map +1 -0
  238. package/dist/lib/cssVariables.d.mts +15 -0
  239. package/dist/lib/cssVariables.mjs +37 -0
  240. package/dist/lib/cssVariables.mjs.map +1 -0
  241. package/dist/lib/styleUtils.d.mts +42 -0
  242. package/dist/lib/styleUtils.mjs +160 -0
  243. package/dist/lib/styleUtils.mjs.map +1 -0
  244. package/dist/lib/tokenAliases.d.mts +13 -0
  245. package/dist/lib/tokenAliases.mjs +121 -0
  246. package/dist/lib/tokenAliases.mjs.map +1 -0
  247. package/dist/lib/usePresence.d.mts +16 -0
  248. package/dist/lib/usePresence.mjs +50 -0
  249. package/dist/lib/usePresence.mjs.map +1 -0
  250. package/dist/{data.esm.js → styles/icons.json.mjs} +2 -1466
  251. package/dist/styles/icons.json.mjs.map +1 -0
  252. package/dist/styles/tokens.d.mts +3174 -0
  253. package/dist/styles/tokens.json.mjs +1454 -0
  254. package/dist/{tokens/index.esm.js.map → styles/tokens.json.mjs.map} +1 -1
  255. package/dist/tokens/{index.esm.js → index.mjs} +1 -1
  256. package/dist/tokens/index.mjs.map +1 -0
  257. package/dist/tokens/styles/tokens.d.mts +3174 -0
  258. package/dist/tokens/tokens.d.mts +4 -0
  259. package/dist/tokens/types/tokens.d.mts +6 -0
  260. package/dist/tokens.css.d.mts +4 -0
  261. package/dist/types/icons.d.mts +25 -0
  262. package/dist/types/icons.mjs +10 -0
  263. package/dist/types/icons.mjs.map +1 -0
  264. package/dist/types/index.d.mts +1 -0
  265. package/dist/types/tokens.d.mts +6 -0
  266. package/dist/types/tokens.mjs +10 -0
  267. package/dist/types/tokens.mjs.map +1 -0
  268. package/dist/vendor/tslib/tslib.es6.mjs +99 -0
  269. package/dist/vendor/tslib/tslib.es6.mjs.map +1 -0
  270. package/package.json +26 -12
  271. package/dist/client.esm.js +0 -8289
  272. package/dist/client.esm.js.map +0 -1
  273. package/dist/data.esm.js.map +0 -1
  274. package/dist/index.esm.js +0 -8
  275. package/dist/index.esm.js.map +0 -1
@@ -0,0 +1,735 @@
1
+ 'use client';
2
+ import { __makeTemplateObject, __awaiter, __spreadArray, __generator } from '../../../vendor/tslib/tslib.es6.mjs';
3
+ import { jsxs, jsx } from 'react/jsx-runtime';
4
+ import { useState, useRef, useId, useCallback, useEffect, useMemo } from 'react';
5
+ import styled$module, { keyframes, css } from 'styled-components';
6
+ const styled = styled$module.default || styled$module;
7
+ import { IconButton } from '../../atoms/IconButton/IconButton.mjs';
8
+ import { Typography } from '../../atoms/Typography/Typography.mjs';
9
+ import { visuallyHidden } from '../../../lib/styleUtils.mjs';
10
+ import tokens from '../../../lib/cssTokens.mjs';
11
+ import { normalizeTranscript, detectSpeechRecognitionConstructor, defaultVoiceErrorMessage, mapSpeechErrorCode } from './agentInputSpeech.mjs';
12
+ import { agentInputStateTransition } from './agentInputStateMachine.mjs';
13
+
14
+ var semantic = tokens.semantic,
15
+ component = tokens.component;
16
+ var DEFAULT_IDLE_HELPER = 'Ask about transactions, spending, or transfers';
17
+ var DEFAULT_LISTENING_MESSAGE = 'Listening… speak now';
18
+ var DEFAULT_PROCESSING_MESSAGE = 'Finishing voice input…';
19
+ var rotateRing = keyframes(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"], ["\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n"])));
20
+ var Container = /*#__PURE__*/styled.div.withConfig({
21
+ displayName: "AgentInput__Container",
22
+ componentId: "sc-fhl996-0"
23
+ })(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n display: flex;\n flex-direction: column;\n gap: ", ";\n width: 100%;\n"], ["\n display: flex;\n flex-direction: column;\n gap: ", ";\n width: 100%;\n"])), semantic.space[200]);
24
+ var ControlsRow = /*#__PURE__*/styled.div.withConfig({
25
+ displayName: "AgentInput__ControlsRow",
26
+ componentId: "sc-fhl996-1"
27
+ })(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n width: 100%;\n"], ["\n width: 100%;\n"])));
28
+ var InputShell = /*#__PURE__*/styled.div.withConfig({
29
+ displayName: "AgentInput__InputShell",
30
+ componentId: "sc-fhl996-2"
31
+ })(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n display: flex;\n align-items: center;\n gap: ", ";\n width: 100%;\n padding: ", " ", " ", " ", ";\n background-color: ", ";\n border: ", " solid ", ";\n border-radius: ", ";\n box-shadow: ", ";\n transition: border-color ", " ", ", outline ", " ", ";\n\n &:focus-within {\n border-color: ", ";\n outline: ", ";\n outline-offset: ", ";\n }\n\n &[data-disabled='true'] {\n background-color: ", ";\n border-color: ", ";\n }\n"], ["\n display: flex;\n align-items: center;\n gap: ", ";\n width: 100%;\n padding: ", " ", " ", " ", ";\n background-color: ", ";\n border: ", " solid ", ";\n border-radius: ", ";\n box-shadow: ", ";\n transition: border-color ", " ", ", outline ", " ", ";\n\n &:focus-within {\n border-color: ", ";\n outline: ", ";\n outline-offset: ", ";\n }\n\n &[data-disabled='true'] {\n background-color: ", ";\n border-color: ", ";\n }\n"])), semantic.space[200], semantic.space[100], semantic.space[200], semantic.space[100], semantic.space.inset.lg, component.input["default"].backgroundColor, component.input["default"].borderWidth, component.input["default"].borderColor, semantic.radius['3xl'], semantic.elevation.raised, semantic.motion.duration.moderate, semantic.motion.easing.standard, semantic.motion.duration.moderate, semantic.motion.easing.standard, component.input.focus.borderColor, component.input.focus.outline, semantic.border.focusOffset, component.input.disabled.backgroundColor, component.input.disabled.borderColor);
32
+ var Input = /*#__PURE__*/styled.input.withConfig({
33
+ displayName: "AgentInput__Input",
34
+ componentId: "sc-fhl996-3"
35
+ })(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n flex: 1;\n min-width: 0;\n min-height: ", ";\n border: none;\n background: transparent;\n font: ", ";\n color: ", ";\n outline: none;\n\n &::placeholder {\n color: ", ";\n /* Firefox fades placeholders to 0.54 by default, which would undo the 4.5:1 contrast */\n opacity: 1;\n }\n\n &:disabled {\n color: ", ";\n cursor: not-allowed;\n }\n"], ["\n flex: 1;\n min-width: 0;\n min-height: ", ";\n border: none;\n background: transparent;\n font: ", ";\n color: ", ";\n outline: none;\n\n &::placeholder {\n color: ", ";\n /* Firefox fades placeholders to 0.54 by default, which would undo the 4.5:1 contrast */\n opacity: 1;\n }\n\n &:disabled {\n color: ", ";\n cursor: not-allowed;\n }\n"])), semantic.size.control.lg, semantic.typography.body, semantic.color.text["default"], component.input.placeholder.textColor, semantic.color.text.disabled);
36
+ var InputActions = /*#__PURE__*/styled.div.withConfig({
37
+ displayName: "AgentInput__InputActions",
38
+ componentId: "sc-fhl996-4"
39
+ })(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n display: inline-flex;\n align-items: center;\n gap: ", ";\n"], ["\n display: inline-flex;\n align-items: center;\n gap: ", ";\n"])), semantic.space[200]);
40
+ var CircularActionIconButton = /*#__PURE__*/styled(IconButton).withConfig({
41
+ displayName: "AgentInput__CircularActionIconButton",
42
+ componentId: "sc-fhl996-5"
43
+ })(templateObject_7 || (templateObject_7 = __makeTemplateObject(["\n border-radius: ", ";\n"], ["\n border-radius: ", ";\n"])), semantic.radius.full);
44
+ var InputWrapper = /*#__PURE__*/styled.div.withConfig({
45
+ displayName: "AgentInput__InputWrapper",
46
+ componentId: "sc-fhl996-6"
47
+ })(templateObject_8 || (templateObject_8 = __makeTemplateObject(["\n flex: 1;\n min-width: 0;\n"], ["\n flex: 1;\n min-width: 0;\n"])));
48
+ var MicButtonWrapper = /*#__PURE__*/styled.div.withConfig({
49
+ shouldForwardProp: function shouldForwardProp(prop) {
50
+ return !prop.startsWith('$');
51
+ },
52
+ displayName: "AgentInput__MicButtonWrapper",
53
+ componentId: "sc-fhl996-7"
54
+ })(templateObject_9 || (templateObject_9 = __makeTemplateObject(["\n position: relative;\n display: inline-flex;\n border-radius: ", ";\n\n & > button {\n position: relative;\n z-index: 1;\n }\n"], ["\n position: relative;\n display: inline-flex;\n border-radius: ", ";\n\n & > button {\n position: relative;\n z-index: 1;\n }\n"
55
+ // Masks read only alpha, so the opaque stop is a mask value, not a colour (decision 0010).
56
+ // eslint-disable-next-line no-restricted-syntax
57
+ ])), semantic.radius.full);
58
+ // Masks read only alpha, so the opaque stop is a mask value, not a colour (decision 0010).
59
+ // eslint-disable-next-line no-restricted-syntax
60
+ var ringMask = css(templateObject_10 || (templateObject_10 = __makeTemplateObject(["radial-gradient(farthest-side, transparent calc(100% - var(--ring-thickness)), #000 calc(100% - var(--ring-thickness)))"], ["radial-gradient(farthest-side, transparent calc(100% - var(--ring-thickness)), #000 calc(100% - var(--ring-thickness)))"])));
61
+ var MicListeningRing = /*#__PURE__*/styled.span.withConfig({
62
+ shouldForwardProp: function shouldForwardProp(prop) {
63
+ return !prop.startsWith('$');
64
+ },
65
+ displayName: "AgentInput__MicListeningRing",
66
+ componentId: "sc-fhl996-8"
67
+ })(templateObject_12 || (templateObject_12 = __makeTemplateObject(["\n --ring-thickness: ", ";\n position: absolute;\n inset: calc(-1 * ", " - ", ");\n border-radius: ", ";\n pointer-events: none;\n z-index: 0;\n background: conic-gradient(\n from 0deg,\n ", " 0deg,\n ", " 110deg,\n ", " 210deg,\n ", " 300deg,\n ", " 360deg\n );\n mask: ", ";\n -webkit-mask: ", ";\n\n ", "\n\n @media (prefers-reduced-motion: reduce) {\n animation: none;\n }\n"], ["\n --ring-thickness: ", ";\n position: absolute;\n inset: calc(-1 * ", " - ", ");\n border-radius: ", ";\n pointer-events: none;\n z-index: 0;\n background: conic-gradient(\n from 0deg,\n ", " 0deg,\n ", " 110deg,\n ", " 210deg,\n ", " 300deg,\n ", " 360deg\n );\n mask: ", ";\n -webkit-mask: ", ";\n\n ", "\n\n @media (prefers-reduced-motion: reduce) {\n animation: none;\n }\n"])), semantic.border.width.thick, semantic.space[100], semantic.border.focusOffset, semantic.radius.full, semantic.color.fill['accent-muted'], semantic.color.fill.accent, semantic.color.fill['accent-hover'], semantic.color.fill.accent, semantic.color.fill['accent-muted'], ringMask, ringMask, function (_a) {
68
+ var $reducedMotion = _a.$reducedMotion;
69
+ return !$reducedMotion && css(templateObject_11 || (templateObject_11 = __makeTemplateObject(["\n animation: ", " 1300ms linear infinite;\n "], ["\n animation: ", " 1300ms linear infinite;\n "])), rotateRing);
70
+ });
71
+ var StatusRow = /*#__PURE__*/styled.div.withConfig({
72
+ displayName: "AgentInput__StatusRow",
73
+ componentId: "sc-fhl996-9"
74
+ })(templateObject_13 || (templateObject_13 = __makeTemplateObject(["\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: ", ";\n min-height: ", ";\n"], ["\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: ", ";\n min-height: ", ";\n"])), semantic.space[300], semantic.space[600]);
75
+ var StatusText = /*#__PURE__*/styled.div.withConfig({
76
+ shouldForwardProp: function shouldForwardProp(prop) {
77
+ return !prop.startsWith('$');
78
+ },
79
+ displayName: "AgentInput__StatusText",
80
+ componentId: "sc-fhl996-10"
81
+ })(templateObject_14 || (templateObject_14 = __makeTemplateObject(["\n padding-left: ", ";\n"], ["\n padding-left: ", ";\n"])), semantic.space[500]);
82
+ var StatusAnnouncement = /*#__PURE__*/styled.div.withConfig({
83
+ displayName: "AgentInput__StatusAnnouncement",
84
+ componentId: "sc-fhl996-11"
85
+ })(templateObject_15 || (templateObject_15 = __makeTemplateObject([""], [""])));
86
+ var MeterContainer = /*#__PURE__*/styled.div.withConfig({
87
+ displayName: "AgentInput__MeterContainer",
88
+ componentId: "sc-fhl996-12"
89
+ })(templateObject_16 || (templateObject_16 = __makeTemplateObject(["\n display: inline-flex;\n align-items: flex-end;\n gap: ", ";\n height: ", ";\n"], ["\n display: inline-flex;\n align-items: flex-end;\n gap: ", ";\n height: ", ";\n"])), semantic.space[100], semantic.space[400]);
90
+ var MeterBar = /*#__PURE__*/styled.div.withConfig({
91
+ shouldForwardProp: function shouldForwardProp(prop) {
92
+ return !prop.startsWith('$');
93
+ },
94
+ displayName: "AgentInput__MeterBar",
95
+ componentId: "sc-fhl996-13"
96
+ })(templateObject_17 || (templateObject_17 = __makeTemplateObject(["\n width: ", ";\n border-radius: ", ";\n background-color: ", ";\n height: ", ";\n transition: height ", " ", ";\n"], ["\n width: ", ";\n border-radius: ", ";\n background-color: ", ";\n height: ", ";\n transition: height ", " ", ";\n"])), semantic.space[100], semantic.radius.xs, semantic.color.fill.accent, function (_a) {
97
+ var $height = _a.$height;
98
+ return "".concat($height * 100, "%");
99
+ }, semantic.motion.duration.fast, semantic.motion.easing.decelerate);
100
+ var VisuallyHiddenLabel = /*#__PURE__*/styled.label.withConfig({
101
+ displayName: "AgentInput__VisuallyHiddenLabel",
102
+ componentId: "sc-fhl996-14"
103
+ })(templateObject_18 || (templateObject_18 = __makeTemplateObject(["\n ", "\n"], ["\n ", "\n"])), visuallyHidden);
104
+ function getInitialState(hasText) {
105
+ return hasText ? 'typing' : 'idle';
106
+ }
107
+ function createMeterBars(level) {
108
+ var clampedLevel = Math.max(0, Math.min(level, 1));
109
+ return [0.25 + clampedLevel * 0.75, 0.2 + clampedLevel * 0.6, 0.3 + clampedLevel * 0.7, 0.2 + clampedLevel * 0.5];
110
+ }
111
+ var AgentInput = function AgentInput(_a) {
112
+ var value = _a.value,
113
+ _b = _a.defaultValue,
114
+ defaultValue = _b === void 0 ? '' : _b,
115
+ onChange = _a.onChange,
116
+ onSubmit = _a.onSubmit,
117
+ _c = _a.placeholder,
118
+ placeholder = _c === void 0 ? 'Ask a question' : _c,
119
+ _d = _a.disabled,
120
+ disabled = _d === void 0 ? false : _d,
121
+ isSubmitting = _a.isSubmitting,
122
+ _e = _a.enableVoice,
123
+ enableVoice = _e === void 0 ? true : _e,
124
+ _f = _a.autoSubmitOnVoiceFinal,
125
+ autoSubmitOnVoiceFinal = _f === void 0 ? true : _f,
126
+ _g = _a.voiceLanguage,
127
+ voiceLanguage = _g === void 0 ? 'en-AU' : _g,
128
+ _h = _a.noSpeechTimeoutMs,
129
+ noSpeechTimeoutMs = _h === void 0 ? 8000 : _h,
130
+ onVoiceStart = _a.onVoiceStart,
131
+ onVoiceStop = _a.onVoiceStop,
132
+ onVoiceInterim = _a.onVoiceInterim,
133
+ onVoiceFinal = _a.onVoiceFinal,
134
+ onVoiceError = _a.onVoiceError,
135
+ statusMessage = _a.statusMessage,
136
+ errorMessage = _a.errorMessage,
137
+ _j = _a.label,
138
+ label = _j === void 0 ? 'Agent input' : _j,
139
+ dataTestId = _a["data-testid"];
140
+ var isControlled = value !== undefined;
141
+ var _k = useState(defaultValue),
142
+ internalValue = _k[0],
143
+ setInternalValue = _k[1];
144
+ var _l = useState(getInitialState(normalizeTranscript(value !== null && value !== void 0 ? value : defaultValue).length > 0)),
145
+ machineState = _l[0],
146
+ setMachineState = _l[1];
147
+ var _m = useState(''),
148
+ interimTranscript = _m[0],
149
+ setInterimTranscript = _m[1];
150
+ var _o = useState(false),
151
+ internalSubmitting = _o[0],
152
+ setInternalSubmitting = _o[1];
153
+ var _p = useState(undefined),
154
+ internalErrorMessage = _p[0],
155
+ setInternalErrorMessage = _p[1];
156
+ var _q = useState(false),
157
+ voiceSupported = _q[0],
158
+ setVoiceSupported = _q[1];
159
+ var _r = useState(false),
160
+ prefersReducedMotion = _r[0],
161
+ setPrefersReducedMotion = _r[1];
162
+ var _s = useState(0),
163
+ meterLevel = _s[0],
164
+ setMeterLevel = _s[1];
165
+ var recognitionRef = useRef(null);
166
+ var noSpeechTimeoutRef = useRef(null);
167
+ var isStoppingRef = useRef(false);
168
+ var hasSubmittedVoiceFinalRef = useRef(false);
169
+ var audioStreamRef = useRef(null);
170
+ var audioContextRef = useRef(null);
171
+ var meterRafRef = useRef(null);
172
+ var inputId = useId();
173
+ var statusId = "".concat(inputId, "-status");
174
+ var currentValue = isControlled ? value !== null && value !== void 0 ? value : '' : internalValue;
175
+ var hasText = normalizeTranscript(currentValue).length > 0;
176
+ var effectiveSubmitting = isSubmitting !== null && isSubmitting !== void 0 ? isSubmitting : internalSubmitting;
177
+ var effectiveState = disabled ? 'disabled' : machineState;
178
+ var isListening = effectiveState === 'listening';
179
+ var hasVoice = enableVoice && voiceSupported;
180
+ var updateMachineState = useCallback(function (event) {
181
+ setMachineState(function (previousState) {
182
+ return agentInputStateTransition(previousState, event);
183
+ });
184
+ }, []);
185
+ var updateValue = useCallback(function (nextValue) {
186
+ if (!isControlled) {
187
+ setInternalValue(nextValue);
188
+ }
189
+ onChange === null || onChange === void 0 ? void 0 : onChange(nextValue);
190
+ }, [isControlled, onChange]);
191
+ var clearNoSpeechTimeout = useCallback(function () {
192
+ if (noSpeechTimeoutRef.current) {
193
+ window.clearTimeout(noSpeechTimeoutRef.current);
194
+ noSpeechTimeoutRef.current = null;
195
+ }
196
+ }, []);
197
+ var stopMeter = useCallback(function () {
198
+ return __awaiter(void 0, void 0, void 0, function () {
199
+ return __generator(this, function (_a) {
200
+ switch (_a.label) {
201
+ case 0:
202
+ if (meterRafRef.current) {
203
+ window.cancelAnimationFrame(meterRafRef.current);
204
+ meterRafRef.current = null;
205
+ }
206
+ if (audioStreamRef.current) {
207
+ audioStreamRef.current.getTracks().forEach(function (track) {
208
+ return track.stop();
209
+ });
210
+ audioStreamRef.current = null;
211
+ }
212
+ if (!audioContextRef.current) return [3 /*break*/, 2];
213
+ return [4 /*yield*/, audioContextRef.current.close()];
214
+ case 1:
215
+ _a.sent();
216
+ audioContextRef.current = null;
217
+ _a.label = 2;
218
+ case 2:
219
+ setMeterLevel(0);
220
+ return [2 /*return*/];
221
+ }
222
+ });
223
+ });
224
+ }, []);
225
+ var startMeter = useCallback(function () {
226
+ return __awaiter(void 0, void 0, void 0, function () {
227
+ var stream, audioContext, analyser_1, source, data_1, _loop_;
228
+ var _b;
229
+ return __generator(this, function (_c) {
230
+ switch (_c.label) {
231
+ case 0:
232
+ if (prefersReducedMotion || !((_b = navigator === null || navigator === void 0 ? void 0 : navigator.mediaDevices) === null || _b === void 0 ? void 0 : _b.getUserMedia)) {
233
+ return [2 /*return*/];
234
+ }
235
+ _c.label = 1;
236
+ case 1:
237
+ _c.trys.push([1, 3,, 4]);
238
+ return [4 /*yield*/, navigator.mediaDevices.getUserMedia({
239
+ audio: true
240
+ })];
241
+ case 2:
242
+ stream = _c.sent();
243
+ audioContext = new AudioContext();
244
+ analyser_1 = audioContext.createAnalyser();
245
+ analyser_1.fftSize = 256;
246
+ source = audioContext.createMediaStreamSource(stream);
247
+ source.connect(analyser_1);
248
+ data_1 = new Uint8Array(analyser_1.frequencyBinCount);
249
+ audioStreamRef.current = stream;
250
+ audioContextRef.current = audioContext;
251
+ _loop_ = function loop_1() {
252
+ analyser_1.getByteTimeDomainData(data_1);
253
+ var sum = 0;
254
+ for (var index = 0; index < data_1.length; index += 1) {
255
+ var centered = data_1[index] / 128 - 1;
256
+ sum += centered * centered;
257
+ }
258
+ var rms = Math.sqrt(sum / data_1.length);
259
+ var nextLevel = Math.max(0.05, Math.min(rms * 3, 1));
260
+ setMeterLevel(nextLevel);
261
+ meterRafRef.current = window.requestAnimationFrame(_loop_);
262
+ };
263
+ meterRafRef.current = window.requestAnimationFrame(_loop_);
264
+ return [3 /*break*/, 4];
265
+ case 3:
266
+ _c.sent();
267
+ setMeterLevel(0);
268
+ return [3 /*break*/, 4];
269
+ case 4:
270
+ return [2 /*return*/];
271
+ }
272
+ });
273
+ });
274
+ }, [prefersReducedMotion]);
275
+ var emitVoiceError = useCallback(function (code, fallback) {
276
+ var message = fallback !== null && fallback !== void 0 ? fallback : defaultVoiceErrorMessage(code);
277
+ setInternalErrorMessage(message);
278
+ updateMachineState({
279
+ type: 'VOICE_ERROR'
280
+ });
281
+ onVoiceError === null || onVoiceError === void 0 ? void 0 : onVoiceError({
282
+ code: code,
283
+ message: message
284
+ });
285
+ }, [onVoiceError, updateMachineState]);
286
+ var submitPayload = useCallback(function (rawText, source) {
287
+ return __awaiter(void 0, void 0, void 0, function () {
288
+ var text;
289
+ return __generator(this, function (_b) {
290
+ switch (_b.label) {
291
+ case 0:
292
+ text = normalizeTranscript(rawText);
293
+ if (!text || disabled || effectiveSubmitting) {
294
+ return [2 /*return*/];
295
+ }
296
+ updateMachineState({
297
+ type: 'SUBMIT'
298
+ });
299
+ setInternalErrorMessage(undefined);
300
+ if (isSubmitting === undefined) {
301
+ setInternalSubmitting(true);
302
+ }
303
+ _b.label = 1;
304
+ case 1:
305
+ _b.trys.push([1, 3, 4, 5]);
306
+ return [4 /*yield*/, onSubmit({
307
+ text: text,
308
+ source: source,
309
+ timestamp: new Date().toISOString()
310
+ })];
311
+ case 2:
312
+ _b.sent();
313
+ updateMachineState({
314
+ type: 'SUBMIT_SUCCESS'
315
+ });
316
+ setInterimTranscript('');
317
+ updateValue('');
318
+ return [3 /*break*/, 5];
319
+ case 3:
320
+ _b.sent();
321
+ updateMachineState({
322
+ type: 'SUBMIT_ERROR'
323
+ });
324
+ if (source === 'voice-final') {
325
+ updateValue(text);
326
+ }
327
+ setInternalErrorMessage('Submission failed. Please try again.');
328
+ return [3 /*break*/, 5];
329
+ case 4:
330
+ if (isSubmitting === undefined) {
331
+ setInternalSubmitting(false);
332
+ }
333
+ return [7 /*endfinally*/];
334
+ case 5:
335
+ return [2 /*return*/];
336
+ }
337
+ });
338
+ });
339
+ }, [disabled, effectiveSubmitting, isSubmitting, onSubmit, updateMachineState, updateValue]);
340
+ var stopListening = useCallback(function (emitStopEvent_1) {
341
+ var args_1 = [];
342
+ for (var _i = 1; _i < arguments.length; _i++) {
343
+ args_1[_i - 1] = arguments[_i];
344
+ }
345
+ return __awaiter(void 0, __spreadArray([emitStopEvent_1], args_1, true), void 0, function (emitStopEvent, preserveState) {
346
+ if (preserveState === void 0) {
347
+ preserveState = false;
348
+ }
349
+ return __generator(this, function (_a) {
350
+ switch (_a.label) {
351
+ case 0:
352
+ isStoppingRef.current = true;
353
+ clearNoSpeechTimeout();
354
+ setInterimTranscript('');
355
+ if (recognitionRef.current) {
356
+ try {
357
+ recognitionRef.current.stop();
358
+ } catch (_b) {
359
+ // no-op
360
+ }
361
+ }
362
+ return [4 /*yield*/, stopMeter()];
363
+ case 1:
364
+ _a.sent();
365
+ if (emitStopEvent) {
366
+ onVoiceStop === null || onVoiceStop === void 0 ? void 0 : onVoiceStop();
367
+ }
368
+ if (!preserveState) {
369
+ updateMachineState({
370
+ type: 'MIC_STOP',
371
+ hasText: hasText
372
+ });
373
+ }
374
+ isStoppingRef.current = false;
375
+ return [2 /*return*/];
376
+ }
377
+ });
378
+ });
379
+ }, [clearNoSpeechTimeout, hasText, onVoiceStop, stopMeter, updateMachineState]);
380
+ var onNoSpeechTimeout = useCallback(function () {
381
+ return __awaiter(void 0, void 0, void 0, function () {
382
+ var message;
383
+ return __generator(this, function (_a) {
384
+ switch (_a.label) {
385
+ case 0:
386
+ clearNoSpeechTimeout();
387
+ updateMachineState({
388
+ type: 'TIMEOUT_NO_SPEECH'
389
+ });
390
+ message = defaultVoiceErrorMessage('no-speech');
391
+ setInternalErrorMessage(message);
392
+ onVoiceError === null || onVoiceError === void 0 ? void 0 : onVoiceError({
393
+ code: 'no-speech',
394
+ message: message
395
+ });
396
+ return [4 /*yield*/, stopListening(true, true)];
397
+ case 1:
398
+ _a.sent();
399
+ return [2 /*return*/];
400
+ }
401
+ });
402
+ });
403
+ }, [clearNoSpeechTimeout, onVoiceError, stopListening, updateMachineState]);
404
+ var beginListening = useCallback(function () {
405
+ return __awaiter(void 0, void 0, void 0, function () {
406
+ return __generator(this, function (_b) {
407
+ switch (_b.label) {
408
+ case 0:
409
+ if (!recognitionRef.current || disabled || effectiveSubmitting) {
410
+ return [2 /*return*/];
411
+ }
412
+ setInternalErrorMessage(undefined);
413
+ hasSubmittedVoiceFinalRef.current = false;
414
+ _b.label = 1;
415
+ case 1:
416
+ _b.trys.push([1, 3,, 4]);
417
+ recognitionRef.current.start();
418
+ updateMachineState({
419
+ type: 'MIC_START'
420
+ });
421
+ onVoiceStart === null || onVoiceStart === void 0 ? void 0 : onVoiceStart();
422
+ clearNoSpeechTimeout();
423
+ noSpeechTimeoutRef.current = window.setTimeout(onNoSpeechTimeout, noSpeechTimeoutMs);
424
+ return [4 /*yield*/, startMeter()];
425
+ case 2:
426
+ _b.sent();
427
+ return [3 /*break*/, 4];
428
+ case 3:
429
+ _b.sent();
430
+ emitVoiceError('unknown');
431
+ return [3 /*break*/, 4];
432
+ case 4:
433
+ return [2 /*return*/];
434
+ }
435
+ });
436
+ });
437
+ }, [clearNoSpeechTimeout, disabled, effectiveSubmitting, emitVoiceError, noSpeechTimeoutMs, onNoSpeechTimeout, onVoiceStart, startMeter, updateMachineState]);
438
+ useEffect(function () {
439
+ var constructor = detectSpeechRecognitionConstructor(window);
440
+ setVoiceSupported(Boolean(constructor));
441
+ if (!enableVoice || !constructor) {
442
+ return;
443
+ }
444
+ var recognition = new constructor();
445
+ recognition.lang = voiceLanguage;
446
+ recognition.interimResults = true;
447
+ recognition.continuous = false;
448
+ recognition.onresult = function (event) {
449
+ return __awaiter(void 0, void 0, void 0, function () {
450
+ var interim, finalText, index, result, normalizedInterim, normalizedFinal;
451
+ return __generator(this, function (_a) {
452
+ switch (_a.label) {
453
+ case 0:
454
+ clearNoSpeechTimeout();
455
+ noSpeechTimeoutRef.current = window.setTimeout(onNoSpeechTimeout, noSpeechTimeoutMs);
456
+ interim = '';
457
+ finalText = '';
458
+ for (index = event.resultIndex; index < event.results.length; index += 1) {
459
+ result = event.results[index];
460
+ if (!result || !result[0]) continue;
461
+ if (result.isFinal) {
462
+ finalText += " ".concat(result[0].transcript);
463
+ } else {
464
+ interim += " ".concat(result[0].transcript);
465
+ }
466
+ }
467
+ normalizedInterim = normalizeTranscript(interim);
468
+ setInterimTranscript(normalizedInterim);
469
+ updateMachineState({
470
+ type: 'VOICE_INTERIM'
471
+ });
472
+ if (normalizedInterim) {
473
+ onVoiceInterim === null || onVoiceInterim === void 0 ? void 0 : onVoiceInterim(normalizedInterim);
474
+ }
475
+ normalizedFinal = normalizeTranscript(finalText);
476
+ if (!normalizedFinal || hasSubmittedVoiceFinalRef.current) {
477
+ return [2 /*return*/];
478
+ }
479
+ hasSubmittedVoiceFinalRef.current = true;
480
+ updateMachineState({
481
+ type: 'VOICE_FINAL'
482
+ });
483
+ setInterimTranscript('');
484
+ onVoiceFinal === null || onVoiceFinal === void 0 ? void 0 : onVoiceFinal(normalizedFinal);
485
+ return [4 /*yield*/, stopMeter()];
486
+ case 1:
487
+ _a.sent();
488
+ if (!autoSubmitOnVoiceFinal) return [3 /*break*/, 3];
489
+ return [4 /*yield*/, submitPayload(normalizedFinal, 'voice-final')];
490
+ case 2:
491
+ _a.sent();
492
+ return [3 /*break*/, 4];
493
+ case 3:
494
+ updateValue(normalizedFinal);
495
+ updateMachineState({
496
+ type: 'MIC_STOP',
497
+ hasText: true
498
+ });
499
+ _a.label = 4;
500
+ case 4:
501
+ return [2 /*return*/];
502
+ }
503
+ });
504
+ });
505
+ };
506
+ recognition.onerror = function (event) {
507
+ return __awaiter(void 0, void 0, void 0, function () {
508
+ var mappedCode;
509
+ return __generator(this, function (_a) {
510
+ switch (_a.label) {
511
+ case 0:
512
+ mappedCode = mapSpeechErrorCode(event.error);
513
+ emitVoiceError(mappedCode);
514
+ return [4 /*yield*/, stopListening(true, true)];
515
+ case 1:
516
+ _a.sent();
517
+ return [2 /*return*/];
518
+ }
519
+ });
520
+ });
521
+ };
522
+ recognition.onend = function () {
523
+ return __awaiter(void 0, void 0, void 0, function () {
524
+ return __generator(this, function (_a) {
525
+ switch (_a.label) {
526
+ case 0:
527
+ if (isStoppingRef.current) return [2 /*return*/];
528
+ clearNoSpeechTimeout();
529
+ return [4 /*yield*/, stopMeter()];
530
+ case 1:
531
+ _a.sent();
532
+ if (!hasSubmittedVoiceFinalRef.current) {
533
+ updateMachineState({
534
+ type: 'MIC_STOP',
535
+ hasText: hasText
536
+ });
537
+ }
538
+ return [2 /*return*/];
539
+ }
540
+ });
541
+ });
542
+ };
543
+ recognitionRef.current = recognition;
544
+ return function () {
545
+ var _a;
546
+ clearNoSpeechTimeout();
547
+ (_a = recognitionRef.current) === null || _a === void 0 ? void 0 : _a.abort();
548
+ recognitionRef.current = null;
549
+ stopMeter();
550
+ };
551
+ }, [autoSubmitOnVoiceFinal, clearNoSpeechTimeout, emitVoiceError, enableVoice, hasText, noSpeechTimeoutMs, onNoSpeechTimeout, onVoiceFinal, onVoiceInterim, stopListening, stopMeter, submitPayload, updateMachineState, updateValue, voiceLanguage]);
552
+ useEffect(function () {
553
+ var mediaQuery = window.matchMedia('(prefers-reduced-motion: reduce)');
554
+ var sync = function sync() {
555
+ return setPrefersReducedMotion(mediaQuery.matches);
556
+ };
557
+ sync();
558
+ mediaQuery.addEventListener('change', sync);
559
+ return function () {
560
+ return mediaQuery.removeEventListener('change', sync);
561
+ };
562
+ }, []);
563
+ useEffect(function () {
564
+ if (effectiveState === 'error' && !internalErrorMessage && !errorMessage) {
565
+ updateMachineState({
566
+ type: 'RESET_ERROR',
567
+ hasText: hasText
568
+ });
569
+ }
570
+ }, [effectiveState, errorMessage, hasText, internalErrorMessage, updateMachineState]);
571
+ useEffect(function () {
572
+ if (!disabled && (machineState === 'idle' || machineState === 'typing')) {
573
+ updateMachineState({
574
+ type: 'INPUT_CHANGE',
575
+ hasText: hasText
576
+ });
577
+ }
578
+ }, [disabled, hasText, machineState, updateMachineState]);
579
+ var displayedValue = useMemo(function () {
580
+ if (!interimTranscript) {
581
+ return currentValue;
582
+ }
583
+ return normalizeTranscript([currentValue, interimTranscript].filter(Boolean).join(' '));
584
+ }, [currentValue, interimTranscript]);
585
+ var onTextChange = function onTextChange(event) {
586
+ updateValue(event.target.value);
587
+ if (effectiveState === 'error') {
588
+ setInternalErrorMessage(undefined);
589
+ updateMachineState({
590
+ type: 'RESET_ERROR',
591
+ hasText: normalizeTranscript(event.target.value).length > 0
592
+ });
593
+ }
594
+ };
595
+ var onInputKeyDown = function onInputKeyDown(event) {
596
+ return __awaiter(void 0, void 0, void 0, function () {
597
+ return __generator(this, function (_a) {
598
+ switch (_a.label) {
599
+ case 0:
600
+ if (!(event.key === 'Escape' && isListening)) return [3 /*break*/, 2];
601
+ event.preventDefault();
602
+ return [4 /*yield*/, stopListening(true)];
603
+ case 1:
604
+ _a.sent();
605
+ return [2 /*return*/];
606
+ case 2:
607
+ if (!(event.key === 'Enter')) return [3 /*break*/, 4];
608
+ event.preventDefault();
609
+ return [4 /*yield*/, submitPayload(currentValue, 'text')];
610
+ case 3:
611
+ _a.sent();
612
+ _a.label = 4;
613
+ case 4:
614
+ return [2 /*return*/];
615
+ }
616
+ });
617
+ });
618
+ };
619
+ var onMicToggle = function onMicToggle() {
620
+ return __awaiter(void 0, void 0, void 0, function () {
621
+ return __generator(this, function (_a) {
622
+ switch (_a.label) {
623
+ case 0:
624
+ if (!hasVoice) return [2 /*return*/];
625
+ if (!isListening) return [3 /*break*/, 2];
626
+ return [4 /*yield*/, stopListening(true)];
627
+ case 1:
628
+ _a.sent();
629
+ return [2 /*return*/];
630
+ case 2:
631
+ return [4 /*yield*/, beginListening()];
632
+ case 3:
633
+ _a.sent();
634
+ return [2 /*return*/];
635
+ }
636
+ });
637
+ });
638
+ };
639
+ var statusByState = {
640
+ idle: statusMessage || DEFAULT_IDLE_HELPER,
641
+ typing: statusMessage || DEFAULT_IDLE_HELPER,
642
+ listening: statusMessage || DEFAULT_LISTENING_MESSAGE,
643
+ processingFinalTranscript: statusMessage || DEFAULT_PROCESSING_MESSAGE,
644
+ submitting: statusMessage || 'Submitting…',
645
+ error: errorMessage || internalErrorMessage || 'Voice input failed. Try again.',
646
+ disabled: statusMessage || DEFAULT_IDLE_HELPER
647
+ };
648
+ var unsupportedMessage = defaultVoiceErrorMessage('not-supported');
649
+ var shouldShowUnsupported = enableVoice && !hasVoice;
650
+ var resolvedStatus = shouldShowUnsupported ? unsupportedMessage : statusByState[effectiveState];
651
+ var isStatusError = effectiveState === 'error' || shouldShowUnsupported;
652
+ var meterBars = createMeterBars(meterLevel);
653
+ var sendDisabled = disabled || effectiveSubmitting || normalizeTranscript(currentValue).length === 0;
654
+ return jsxs(Container, {
655
+ "data-testid": dataTestId,
656
+ children: [jsx(VisuallyHiddenLabel, {
657
+ htmlFor: inputId,
658
+ children: label
659
+ }), jsx(ControlsRow, {
660
+ children: jsx(InputWrapper, {
661
+ children: jsxs(InputShell, {
662
+ "data-disabled": disabled || effectiveSubmitting,
663
+ children: [jsx(Input, {
664
+ id: inputId,
665
+ type: "text",
666
+ "aria-label": label,
667
+ value: displayedValue,
668
+ onChange: onTextChange,
669
+ onKeyDown: onInputKeyDown,
670
+ placeholder: placeholder,
671
+ disabled: disabled || effectiveSubmitting,
672
+ readOnly: isListening,
673
+ "aria-describedby": statusId
674
+ }), jsxs(InputActions, {
675
+ children: [hasVoice && jsxs(MicButtonWrapper, {
676
+ "$isListening": isListening,
677
+ "$reducedMotion": prefersReducedMotion,
678
+ children: [isListening && jsx(MicListeningRing, {
679
+ "$reducedMotion": prefersReducedMotion,
680
+ "aria-hidden": "true",
681
+ "data-testid": "agent-input-listening-ring",
682
+ "data-animated": prefersReducedMotion ? 'false' : 'true'
683
+ }), jsx(CircularActionIconButton, {
684
+ variant: "naked",
685
+ size: "medium",
686
+ iconName: 'mic',
687
+ onClick: onMicToggle,
688
+ "aria-pressed": isListening,
689
+ "aria-label": isListening ? 'Stop voice input' : 'Start voice input',
690
+ disabled: disabled || effectiveSubmitting,
691
+ type: "button"
692
+ })]
693
+ }), jsx(CircularActionIconButton, {
694
+ variant: "secondary",
695
+ size: "medium",
696
+ iconName: "directionUp",
697
+ onClick: function onClick() {
698
+ return submitPayload(currentValue, 'text');
699
+ },
700
+ disabled: sendDisabled,
701
+ "aria-label": "Send message",
702
+ type: "button"
703
+ })]
704
+ })]
705
+ })
706
+ })
707
+ }), jsxs(StatusRow, {
708
+ children: [jsx(StatusText, {
709
+ "$isError": isStatusError,
710
+ children: jsx(StatusAnnouncement, {
711
+ id: statusId,
712
+ role: "status",
713
+ "aria-live": "polite",
714
+ "aria-atomic": "true",
715
+ children: jsx(Typography, {
716
+ variant: "small",
717
+ color: isStatusError ? 'error' : 'subdued',
718
+ children: resolvedStatus
719
+ })
720
+ })
721
+ }), isListening && !prefersReducedMotion && jsx(MeterContainer, {
722
+ "aria-hidden": "true",
723
+ children: meterBars.map(function (barHeight, index) {
724
+ return jsx(MeterBar, {
725
+ "$height": barHeight
726
+ }, "meter-".concat(index));
727
+ })
728
+ })]
729
+ })]
730
+ });
731
+ };
732
+ var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7, templateObject_8, templateObject_9, templateObject_10, templateObject_11, templateObject_12, templateObject_13, templateObject_14, templateObject_15, templateObject_16, templateObject_17, templateObject_18;
733
+
734
+ export { AgentInput };
735
+ //# sourceMappingURL=AgentInput.mjs.map