@common-origin/design-system 2.19.0 → 2.21.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.
- package/dist/client.js +1012 -512
- package/dist/client.js.map +1 -1
- package/dist/components/atoms/AILabel/AILabel.d.mts +30 -0
- package/dist/components/atoms/AILabel/AILabel.d.ts +30 -0
- package/dist/components/atoms/AILabel/AILabel.mjs +94 -0
- package/dist/components/atoms/AILabel/AILabel.mjs.map +1 -0
- package/dist/components/atoms/AILabel/index.d.mts +1 -0
- package/dist/components/atoms/AILabel/index.d.ts +1 -0
- package/dist/components/atoms/Avatar/Avatar.d.mts +8 -0
- package/dist/components/atoms/Avatar/Avatar.mjs +103 -0
- package/dist/components/atoms/Avatar/Avatar.mjs.map +1 -0
- package/dist/components/atoms/Avatar/index.d.mts +1 -0
- package/dist/components/atoms/Badge/Badge.d.mts +25 -0
- package/dist/components/atoms/Badge/Badge.mjs +98 -0
- package/dist/components/atoms/Badge/Badge.mjs.map +1 -0
- package/dist/components/atoms/Badge/index.d.mts +2 -0
- package/dist/components/atoms/Box/Box.d.mts +62 -0
- package/dist/components/atoms/Box/Box.mjs +246 -0
- package/dist/components/atoms/Box/Box.mjs.map +1 -0
- package/dist/components/atoms/Box/index.d.mts +1 -0
- package/dist/components/atoms/Button/Button.d.mts +40 -0
- package/dist/components/atoms/Button/Button.mjs +208 -0
- package/dist/components/atoms/Button/Button.mjs.map +1 -0
- package/dist/components/atoms/Button/index.d.mts +1 -0
- package/dist/components/atoms/CategoryBadge/CategoryBadge.d.mts +29 -0
- package/dist/components/atoms/CategoryBadge/CategoryBadge.mjs +29 -0
- package/dist/components/atoms/CategoryBadge/CategoryBadge.mjs.map +1 -0
- package/dist/components/atoms/CategoryBadge/index.d.mts +2 -0
- package/dist/components/atoms/CategoryLabel/CategoryLabel.d.mts +69 -0
- package/dist/components/atoms/CategoryLabel/CategoryLabel.mjs +151 -0
- package/dist/components/atoms/CategoryLabel/CategoryLabel.mjs.map +1 -0
- package/dist/components/atoms/CategoryLabel/index.d.mts +2 -0
- package/dist/components/atoms/Chip/BooleanChip.d.mts +28 -0
- package/dist/components/atoms/Chip/BooleanChip.mjs +76 -0
- package/dist/components/atoms/Chip/BooleanChip.mjs.map +1 -0
- package/dist/components/atoms/Chip/Chip.d.mts +37 -0
- package/dist/components/atoms/Chip/Chip.mjs +76 -0
- package/dist/components/atoms/Chip/Chip.mjs.map +1 -0
- package/dist/components/atoms/Chip/FilterChip.d.mts +13 -0
- package/dist/components/atoms/Chip/FilterChip.mjs +14 -0
- package/dist/components/atoms/Chip/FilterChip.mjs.map +1 -0
- package/dist/components/atoms/Chip/InputChip.d.mts +27 -0
- package/dist/components/atoms/Chip/InputChip.mjs +97 -0
- package/dist/components/atoms/Chip/InputChip.mjs.map +1 -0
- package/dist/components/atoms/Chip/SuggestionChip.d.mts +24 -0
- package/dist/components/atoms/Chip/SuggestionChip.d.ts +24 -0
- package/dist/components/atoms/Chip/SuggestionChip.mjs +61 -0
- package/dist/components/atoms/Chip/SuggestionChip.mjs.map +1 -0
- package/dist/components/atoms/Chip/index.d.mts +5 -0
- package/dist/components/atoms/Chip/index.d.ts +1 -0
- package/dist/components/atoms/Chip/shared/ChipBase.d.mts +12 -0
- package/dist/components/atoms/Chip/shared/ChipBase.mjs +45 -0
- package/dist/components/atoms/Chip/shared/ChipBase.mjs.map +1 -0
- package/dist/components/atoms/Chip/shared/types.d.mts +34 -0
- package/dist/components/atoms/Chip/shared/utils.d.mts +10 -0
- package/dist/components/atoms/Chip/shared/utils.mjs +46 -0
- package/dist/components/atoms/Chip/shared/utils.mjs.map +1 -0
- package/dist/components/atoms/Container/Container.d.mts +6 -0
- package/dist/components/atoms/Container/Container.mjs +24 -0
- package/dist/components/atoms/Container/Container.mjs.map +1 -0
- package/dist/components/atoms/Container/index.d.mts +1 -0
- package/dist/components/atoms/DateFormatter/DateFormatter.d.mts +23 -0
- package/dist/components/atoms/DateFormatter/DateFormatter.mjs +64 -0
- package/dist/components/atoms/DateFormatter/DateFormatter.mjs.map +1 -0
- package/dist/components/atoms/DateFormatter/index.d.mts +1 -0
- package/dist/components/atoms/Divider/Divider.d.mts +30 -0
- package/dist/components/atoms/Divider/Divider.mjs +134 -0
- package/dist/components/atoms/Divider/Divider.mjs.map +1 -0
- package/dist/components/atoms/Divider/index.d.mts +1 -0
- package/dist/components/atoms/Icon/Icon.d.mts +22 -0
- package/dist/components/atoms/Icon/Icon.mjs +95 -0
- package/dist/components/atoms/Icon/Icon.mjs.map +1 -0
- package/dist/components/atoms/Icon/index.d.mts +1 -0
- package/dist/components/atoms/IconButton/IconButton.d.mts +14 -0
- package/dist/components/atoms/IconButton/IconButton.mjs +150 -0
- package/dist/components/atoms/IconButton/IconButton.mjs.map +1 -0
- package/dist/components/atoms/IconButton/index.d.mts +1 -0
- package/dist/components/atoms/MoneyDisplay/MoneyDisplay.d.mts +26 -0
- package/dist/components/atoms/MoneyDisplay/MoneyDisplay.mjs +126 -0
- package/dist/components/atoms/MoneyDisplay/MoneyDisplay.mjs.map +1 -0
- package/dist/components/atoms/MoneyDisplay/index.d.mts +2 -0
- package/dist/components/atoms/Picture/Picture.d.mts +12 -0
- package/dist/components/atoms/Picture/Picture.mjs +65 -0
- package/dist/components/atoms/Picture/Picture.mjs.map +1 -0
- package/dist/components/atoms/Picture/index.d.mts +1 -0
- package/dist/components/atoms/ProgressBar/ProgressBar.d.mts +21 -0
- package/dist/components/atoms/ProgressBar/ProgressBar.mjs +91 -0
- package/dist/components/atoms/ProgressBar/ProgressBar.mjs.map +1 -0
- package/dist/components/atoms/ProgressBar/index.d.mts +2 -0
- package/dist/components/atoms/Stack/Stack.d.mts +16 -0
- package/dist/components/atoms/Stack/Stack.mjs +71 -0
- package/dist/components/atoms/Stack/Stack.mjs.map +1 -0
- package/dist/components/atoms/Stack/index.d.mts +1 -0
- package/dist/components/atoms/StatusBadge/StatusBadge.d.mts +23 -0
- package/dist/components/atoms/StatusBadge/StatusBadge.mjs +18 -0
- package/dist/components/atoms/StatusBadge/StatusBadge.mjs.map +1 -0
- package/dist/components/atoms/StatusBadge/index.d.mts +2 -0
- package/dist/components/atoms/StatusLabel/StatusLabel.d.mts +17 -0
- package/dist/components/atoms/StatusLabel/StatusLabel.mjs +28 -0
- package/dist/components/atoms/StatusLabel/StatusLabel.mjs.map +1 -0
- package/dist/components/atoms/StatusLabel/StatusLabelBase.d.mts +49 -0
- package/dist/components/atoms/StatusLabel/StatusLabelBase.mjs +161 -0
- package/dist/components/atoms/StatusLabel/StatusLabelBase.mjs.map +1 -0
- package/dist/components/atoms/StatusLabel/index.d.mts +2 -0
- package/dist/components/atoms/Tag/Tag.d.mts +36 -0
- package/dist/components/atoms/Tag/Tag.mjs +115 -0
- package/dist/components/atoms/Tag/Tag.mjs.map +1 -0
- package/dist/components/atoms/Tag/index.d.mts +2 -0
- package/dist/components/atoms/Typography/Typography.d.mts +34 -0
- package/dist/components/atoms/Typography/Typography.mjs +139 -0
- package/dist/components/atoms/Typography/Typography.mjs.map +1 -0
- package/dist/components/atoms/Typography/index.d.mts +1 -0
- package/dist/components/atoms/index.d.mts +21 -0
- package/dist/components/atoms/index.d.ts +1 -0
- package/dist/components/index.d.mts +4 -0
- package/dist/components/layout/GridSystem/GridSystem.d.mts +58 -0
- package/dist/components/layout/GridSystem/GridSystem.mjs +221 -0
- package/dist/components/layout/GridSystem/GridSystem.mjs.map +1 -0
- package/dist/components/layout/GridSystem/index.d.mts +1 -0
- package/dist/components/layout/index.d.mts +1 -0
- package/dist/components/molecules/AccountCard/AccountCard.d.mts +44 -0
- package/dist/components/molecules/AccountCard/AccountCard.mjs +191 -0
- package/dist/components/molecules/AccountCard/AccountCard.mjs.map +1 -0
- package/dist/components/molecules/AccountCard/index.d.mts +2 -0
- package/dist/components/molecules/ActionSheet/ActionSheet.d.mts +111 -0
- package/dist/components/molecules/ActionSheet/ActionSheet.mjs +283 -0
- package/dist/components/molecules/ActionSheet/ActionSheet.mjs.map +1 -0
- package/dist/components/molecules/ActionSheet/index.d.mts +2 -0
- package/dist/components/molecules/AgentInput/AgentInput.d.mts +92 -0
- package/dist/components/molecules/AgentInput/AgentInput.d.ts +63 -1
- package/dist/components/molecules/AgentInput/AgentInput.mjs +1099 -0
- package/dist/components/molecules/AgentInput/AgentInput.mjs.map +1 -0
- package/dist/components/molecules/AgentInput/agentInputSpeech.d.mts +45 -0
- package/dist/components/molecules/AgentInput/agentInputSpeech.d.ts +2 -0
- package/dist/components/molecules/AgentInput/agentInputSpeech.mjs +53 -0
- package/dist/components/molecules/AgentInput/agentInputSpeech.mjs.map +1 -0
- package/dist/components/molecules/AgentInput/agentInputStateMachine.d.mts +29 -0
- package/dist/components/molecules/AgentInput/agentInputStateMachine.mjs +55 -0
- package/dist/components/molecules/AgentInput/agentInputStateMachine.mjs.map +1 -0
- package/dist/components/molecules/AgentInput/index.d.mts +3 -0
- package/dist/components/molecules/AgentInput/index.d.ts +1 -1
- package/dist/components/molecules/Alert/Alert.d.mts +68 -0
- package/dist/components/molecules/Alert/Alert.mjs +284 -0
- package/dist/components/molecules/Alert/Alert.mjs.map +1 -0
- package/dist/components/molecules/Alert/index.d.mts +1 -0
- package/dist/components/molecules/Breadcrumbs/Breadcrumbs.d.mts +16 -0
- package/dist/components/molecules/Breadcrumbs/Breadcrumbs.mjs +74 -0
- package/dist/components/molecules/Breadcrumbs/Breadcrumbs.mjs.map +1 -0
- package/dist/components/molecules/Breadcrumbs/index.d.mts +1 -0
- package/dist/components/molecules/CardLarge/CardLarge.d.mts +12 -0
- package/dist/components/molecules/CardLarge/CardLarge.mjs +76 -0
- package/dist/components/molecules/CardLarge/CardLarge.mjs.map +1 -0
- package/dist/components/molecules/CardLarge/index.d.mts +1 -0
- package/dist/components/molecules/CardSmall/CardSmall.d.mts +16 -0
- package/dist/components/molecules/CardSmall/CardSmall.mjs +73 -0
- package/dist/components/molecules/CardSmall/CardSmall.mjs.map +1 -0
- package/dist/components/molecules/CardSmall/index.d.mts +1 -0
- package/dist/components/molecules/Checkbox/Checkbox.d.mts +64 -0
- package/dist/components/molecules/Checkbox/Checkbox.mjs +139 -0
- package/dist/components/molecules/Checkbox/Checkbox.mjs.map +1 -0
- package/dist/components/molecules/Checkbox/SelectableInputBase.d.mts +40 -0
- package/dist/components/molecules/Checkbox/SelectableInputBase.mjs +99 -0
- package/dist/components/molecules/Checkbox/SelectableInputBase.mjs.map +1 -0
- package/dist/components/molecules/Checkbox/index.d.mts +3 -0
- package/dist/components/molecules/ChipGroup/ChipGroup.d.mts +7 -0
- package/dist/components/molecules/ChipGroup/ChipGroup.mjs +56 -0
- package/dist/components/molecules/ChipGroup/ChipGroup.mjs.map +1 -0
- package/dist/components/molecules/ChipGroup/index.d.mts +1 -0
- package/dist/components/molecules/CodeBlock/CodeBlock.d.mts +46 -0
- package/dist/components/molecules/CodeBlock/CodeBlock.mjs +231 -0
- package/dist/components/molecules/CodeBlock/CodeBlock.mjs.map +1 -0
- package/dist/components/molecules/CodeBlock/index.d.mts +1 -0
- package/dist/components/molecules/DateGroup/DateGroup.d.mts +37 -0
- package/dist/components/molecules/DateGroup/DateGroup.mjs +104 -0
- package/dist/components/molecules/DateGroup/DateGroup.mjs.map +1 -0
- package/dist/components/molecules/DateGroup/index.d.mts +2 -0
- package/dist/components/molecules/Dropdown/Dropdown.d.mts +27 -0
- package/dist/components/molecules/Dropdown/Dropdown.mjs +282 -0
- package/dist/components/molecules/Dropdown/Dropdown.mjs.map +1 -0
- package/dist/components/molecules/Dropdown/index.d.mts +1 -0
- package/dist/components/molecules/EmptyState/EmptyState.d.mts +32 -0
- package/dist/components/molecules/EmptyState/EmptyState.mjs +133 -0
- package/dist/components/molecules/EmptyState/EmptyState.mjs.map +1 -0
- package/dist/components/molecules/EmptyState/index.d.mts +2 -0
- package/dist/components/molecules/FeatureBlock/FeatureBlock.d.mts +14 -0
- package/dist/components/molecules/FeatureBlock/FeatureBlock.mjs +100 -0
- package/dist/components/molecules/FeatureBlock/FeatureBlock.mjs.map +1 -0
- package/dist/components/molecules/FeatureBlock/index.d.mts +1 -0
- package/dist/components/molecules/InlineAlert/InlineAlert.d.mts +54 -0
- package/dist/components/molecules/InlineAlert/InlineAlert.mjs +140 -0
- package/dist/components/molecules/InlineAlert/InlineAlert.mjs.map +1 -0
- package/dist/components/molecules/InlineAlert/index.d.mts +2 -0
- package/dist/components/molecules/List/List.d.mts +30 -0
- package/dist/components/molecules/List/List.mjs +45 -0
- package/dist/components/molecules/List/List.mjs.map +1 -0
- package/dist/components/molecules/List/ListContext.d.mts +6 -0
- package/dist/components/molecules/List/ListContext.mjs +11 -0
- package/dist/components/molecules/List/ListContext.mjs.map +1 -0
- package/dist/components/molecules/List/ListItem.d.mts +101 -0
- package/dist/components/molecules/List/ListItem.mjs +224 -0
- package/dist/components/molecules/List/ListItem.mjs.map +1 -0
- package/dist/components/molecules/List/index.d.mts +4 -0
- package/dist/components/molecules/Modal/Modal.d.mts +69 -0
- package/dist/components/molecules/Modal/Modal.mjs +259 -0
- package/dist/components/molecules/Modal/Modal.mjs.map +1 -0
- package/dist/components/molecules/Modal/index.d.mts +2 -0
- package/dist/components/molecules/NumberInput/NumberInput.d.mts +86 -0
- package/dist/components/molecules/NumberInput/NumberInput.mjs +268 -0
- package/dist/components/molecules/NumberInput/NumberInput.mjs.map +1 -0
- package/dist/components/molecules/NumberInput/index.d.mts +2 -0
- package/dist/components/molecules/PageTitle/PageTitle.d.mts +21 -0
- package/dist/components/molecules/PageTitle/PageTitle.mjs +77 -0
- package/dist/components/molecules/PageTitle/PageTitle.mjs.map +1 -0
- package/dist/components/molecules/PageTitle/index.d.mts +1 -0
- package/dist/components/molecules/PasswordField/PasswordField.d.mts +55 -0
- package/dist/components/molecules/PasswordField/PasswordField.mjs +146 -0
- package/dist/components/molecules/PasswordField/PasswordField.mjs.map +1 -0
- package/dist/components/molecules/PasswordField/index.d.mts +2 -0
- package/dist/components/molecules/SearchField/SearchField.d.mts +108 -0
- package/dist/components/molecules/SearchField/SearchField.mjs +340 -0
- package/dist/components/molecules/SearchField/SearchField.mjs.map +1 -0
- package/dist/components/molecules/SearchField/index.d.mts +2 -0
- package/dist/components/molecules/Sheet/Sheet.d.mts +96 -0
- package/dist/components/molecules/Sheet/Sheet.mjs +243 -0
- package/dist/components/molecules/Sheet/Sheet.mjs.map +1 -0
- package/dist/components/molecules/Sheet/index.d.mts +2 -0
- package/dist/components/molecules/Slider/Slider.d.mts +102 -0
- package/dist/components/molecules/Slider/Slider.mjs +462 -0
- package/dist/components/molecules/Slider/Slider.mjs.map +1 -0
- package/dist/components/molecules/Slider/index.d.mts +2 -0
- package/dist/components/molecules/TabBar/TabBar.d.mts +82 -0
- package/dist/components/molecules/TabBar/TabBar.mjs +213 -0
- package/dist/components/molecules/TabBar/TabBar.mjs.map +1 -0
- package/dist/components/molecules/TabBar/index.d.mts +2 -0
- package/dist/components/molecules/TextField/InputBase.d.mts +22 -0
- package/dist/components/molecules/TextField/InputBase.mjs +56 -0
- package/dist/components/molecules/TextField/InputBase.mjs.map +1 -0
- package/dist/components/molecules/TextField/TextField.d.mts +56 -0
- package/dist/components/molecules/TextField/TextField.mjs +115 -0
- package/dist/components/molecules/TextField/TextField.mjs.map +1 -0
- package/dist/components/molecules/TextField/index.d.mts +4 -0
- package/dist/components/molecules/TransactionListItem/TransactionListItem.d.mts +39 -0
- package/dist/components/molecules/TransactionListItem/TransactionListItem.mjs +224 -0
- package/dist/components/molecules/TransactionListItem/TransactionListItem.mjs.map +1 -0
- package/dist/components/molecules/TransactionListItem/index.d.mts +2 -0
- package/dist/components/molecules/index.d.mts +26 -0
- package/dist/data.js +316 -3
- package/dist/data.js.map +1 -1
- package/dist/index.d.mts +3 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +57 -0
- package/dist/index.mjs.map +1 -0
- package/dist/lib/cssTokens.d.mts +14 -0
- package/dist/lib/cssTokens.mjs +19 -0
- package/dist/lib/cssTokens.mjs.map +1 -0
- package/dist/lib/cssVariables.d.mts +15 -0
- package/dist/lib/cssVariables.mjs +37 -0
- package/dist/lib/cssVariables.mjs.map +1 -0
- package/dist/lib/styleUtils.d.mts +42 -0
- package/dist/lib/styleUtils.mjs +160 -0
- package/dist/lib/styleUtils.mjs.map +1 -0
- package/dist/lib/tokenAliases.d.mts +13 -0
- package/dist/lib/tokenAliases.mjs +122 -0
- package/dist/lib/tokenAliases.mjs.map +1 -0
- package/dist/lib/usePresence.d.mts +16 -0
- package/dist/lib/usePresence.mjs +50 -0
- package/dist/lib/usePresence.mjs.map +1 -0
- package/dist/styles/icons.json +30 -1
- package/dist/{data.esm.js → styles/icons.json.mjs} +33 -1466
- package/dist/styles/icons.json.mjs.map +1 -0
- package/dist/styles/tokens.d.mts +3718 -0
- package/dist/styles/tokens.d.ts +545 -1
- package/dist/styles/tokens.json +284 -2
- package/dist/styles/tokens.json.mjs +1736 -0
- package/dist/{tokens/index.esm.js.map → styles/tokens.json.mjs.map} +1 -1
- package/dist/tokens/index.js +284 -2
- package/dist/tokens/index.js.map +1 -1
- package/dist/tokens/{index.esm.js → index.mjs} +285 -3
- package/dist/tokens/index.mjs.map +1 -0
- package/dist/tokens/styles/tokens.d.mts +3718 -0
- package/dist/tokens/styles/tokens.d.ts +545 -1
- package/dist/tokens/tokens.d.mts +4 -0
- package/dist/tokens/types/tokens.d.mts +6 -0
- package/dist/tokens.css +242 -0
- package/dist/tokens.css.d.mts +4 -0
- package/dist/types/icons.d.mts +25 -0
- package/dist/types/icons.d.ts +1 -1
- package/dist/types/icons.mjs +10 -0
- package/dist/types/icons.mjs.map +1 -0
- package/dist/types/index.d.mts +1 -0
- package/dist/types/tokens.d.mts +6 -0
- package/dist/types/tokens.mjs +10 -0
- package/dist/types/tokens.mjs.map +1 -0
- package/dist/vendor/tslib/tslib.es6.mjs +99 -0
- package/dist/vendor/tslib/tslib.es6.mjs.map +1 -0
- package/package.json +26 -12
- package/dist/client.esm.js +0 -8289
- package/dist/client.esm.js.map +0 -1
- package/dist/data.esm.js.map +0 -1
- package/dist/index.esm.js +0 -8
- package/dist/index.esm.js.map +0 -1
|
@@ -0,0 +1,1099 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { __makeTemplateObject, __awaiter, __spreadArray, __generator } from '../../../vendor/tslib/tslib.es6.mjs';
|
|
3
|
+
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
4
|
+
import { forwardRef, useState, useRef, useId, useEffect, useCallback, useImperativeHandle, useMemo, useLayoutEffect } from 'react';
|
|
5
|
+
import styled$module, { keyframes, css } from 'styled-components';
|
|
6
|
+
const styled = styled$module.default || styled$module;
|
|
7
|
+
import { Button } from '../../atoms/Button/Button.mjs';
|
|
8
|
+
import '../../atoms/Chip/shared/ChipBase.mjs';
|
|
9
|
+
import '../../atoms/Icon/Icon.mjs';
|
|
10
|
+
import { SuggestionChip } from '../../atoms/Chip/SuggestionChip.mjs';
|
|
11
|
+
import { IconButton } from '../../atoms/IconButton/IconButton.mjs';
|
|
12
|
+
import { Typography } from '../../atoms/Typography/Typography.mjs';
|
|
13
|
+
import { reducedMotion, visuallyHidden } from '../../../lib/styleUtils.mjs';
|
|
14
|
+
import { usePresence, EXIT_DURATION_MS, useInert } from '../../../lib/usePresence.mjs';
|
|
15
|
+
import tokens from '../../../lib/cssTokens.mjs';
|
|
16
|
+
import { normalizeTranscript, normalizeMessage, detectSpeechRecognitionConstructor, defaultVoiceErrorMessage, mapSpeechErrorCode } from './agentInputSpeech.mjs';
|
|
17
|
+
import { agentInputStateTransition } from './agentInputStateMachine.mjs';
|
|
18
|
+
|
|
19
|
+
var semantic = tokens.semantic,
|
|
20
|
+
component = tokens.component;
|
|
21
|
+
var DEFAULT_LISTENING_MESSAGE = 'Listening… speak now';
|
|
22
|
+
var DEFAULT_PROCESSING_MESSAGE = 'Finishing voice input…';
|
|
23
|
+
// The counter appears from this share of maxLength
|
|
24
|
+
var COUNTER_THRESHOLD = 0.8;
|
|
25
|
+
// Layout effects warn during server rendering in React 18
|
|
26
|
+
var useIsomorphicLayoutEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect;
|
|
27
|
+
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"])));
|
|
28
|
+
var Container = /*#__PURE__*/styled.div.withConfig({
|
|
29
|
+
shouldForwardProp: function shouldForwardProp(prop) {
|
|
30
|
+
return !prop.startsWith('$');
|
|
31
|
+
},
|
|
32
|
+
displayName: "AgentInput__Container",
|
|
33
|
+
componentId: "sc-fhl996-0"
|
|
34
|
+
})(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n display: flex;\n flex-direction: column;\n gap: ", ";\n width: 100%;\n\n ", "\n"], ["\n display: flex;\n flex-direction: column;\n gap: ", ";\n width: 100%;\n\n ", "\n"])), semantic.space[200], function (_a) {
|
|
35
|
+
var $docked = _a.$docked;
|
|
36
|
+
return $docked && css(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n position: sticky;\n bottom: 0;\n z-index: ", ";\n /* The band hides content scrolling past the field and status line (decisions 0006, 0031) */\n background-color: ", ";\n padding-top: ", ";\n /* Clears the home indicator; zero unless the page sets viewport-fit=cover */\n padding-bottom: env(safe-area-inset-bottom, 0px);\n "], ["\n position: sticky;\n bottom: 0;\n z-index: ", ";\n /* The band hides content scrolling past the field and status line (decisions 0006, 0031) */\n background-color: ", ";\n padding-top: ", ";\n /* Clears the home indicator; zero unless the page sets viewport-fit=cover */\n padding-bottom: env(safe-area-inset-bottom, 0px);\n "])), semantic.layer.sticky, semantic.surface.base, semantic.space[300]);
|
|
37
|
+
});
|
|
38
|
+
var ControlsRow = /*#__PURE__*/styled.div.withConfig({
|
|
39
|
+
displayName: "AgentInput__ControlsRow",
|
|
40
|
+
componentId: "sc-fhl996-1"
|
|
41
|
+
})(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n width: 100%;\n"], ["\n width: 100%;\n"])));
|
|
42
|
+
var InputShell = /*#__PURE__*/styled.div.withConfig({
|
|
43
|
+
displayName: "AgentInput__InputShell",
|
|
44
|
+
componentId: "sc-fhl996-2"
|
|
45
|
+
})(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n display: flex;\n /* Actions sit beside the last line as the field grows */\n align-items: flex-end;\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 /* Actions sit beside the last line as the field grows */\n align-items: flex-end;\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"
|
|
46
|
+
// One row is a control-height field; it grows with its content to six rows, then scrolls.
|
|
47
|
+
// The height is set from scrollHeight in resizeField; 1lh is the body line height.
|
|
48
|
+
])), 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);
|
|
49
|
+
// One row is a control-height field; it grows with its content to six rows, then scrolls.
|
|
50
|
+
// The height is set from scrollHeight in resizeField; 1lh is the body line height.
|
|
51
|
+
var Input = /*#__PURE__*/styled.textarea.withConfig({
|
|
52
|
+
displayName: "AgentInput__Input",
|
|
53
|
+
componentId: "sc-fhl996-3"
|
|
54
|
+
})(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n display: block;\n flex: 1;\n min-width: 0;\n box-sizing: border-box;\n height: ", ";\n min-height: ", ";\n max-height: calc(5lh + ", ");\n margin: 0;\n padding: calc((", " - 1lh) / 2) 0;\n resize: none;\n overflow-y: hidden;\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 display: block;\n flex: 1;\n min-width: 0;\n box-sizing: border-box;\n height: ", ";\n min-height: ", ";\n max-height: calc(5lh + ", ");\n margin: 0;\n padding: calc((", " - 1lh) / 2) 0;\n resize: none;\n overflow-y: hidden;\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.size.control.lg, semantic.size.control.lg, semantic.size.control.lg, semantic.typography.body, semantic.color.text["default"], component.input.placeholder.textColor, semantic.color.text.disabled);
|
|
55
|
+
var InputActions = /*#__PURE__*/styled.div.withConfig({
|
|
56
|
+
displayName: "AgentInput__InputActions",
|
|
57
|
+
componentId: "sc-fhl996-4"
|
|
58
|
+
})(templateObject_7 || (templateObject_7 = __makeTemplateObject(["\n display: inline-flex;\n align-items: center;\n gap: ", ";\n /* Centres the buttons on a one-row field, and keeps them level with the last line as it grows */\n padding-bottom: calc((", " - ", ") / 2);\n"], ["\n display: inline-flex;\n align-items: center;\n gap: ", ";\n /* Centres the buttons on a one-row field, and keeps them level with the last line as it grows */\n padding-bottom: calc((", " - ", ") / 2);\n"])), semantic.space[200], semantic.size.control.lg, semantic.size.control.md);
|
|
59
|
+
var CircularActionIconButton = /*#__PURE__*/styled(IconButton).withConfig({
|
|
60
|
+
displayName: "AgentInput__CircularActionIconButton",
|
|
61
|
+
componentId: "sc-fhl996-5"
|
|
62
|
+
})(templateObject_8 || (templateObject_8 = __makeTemplateObject(["\n border-radius: ", ";\n"], ["\n border-radius: ", ";\n"])), semantic.radius.full);
|
|
63
|
+
var InputWrapper = /*#__PURE__*/styled.div.withConfig({
|
|
64
|
+
displayName: "AgentInput__InputWrapper",
|
|
65
|
+
componentId: "sc-fhl996-6"
|
|
66
|
+
})(templateObject_9 || (templateObject_9 = __makeTemplateObject(["\n flex: 1;\n min-width: 0;\n"], ["\n flex: 1;\n min-width: 0;\n"])));
|
|
67
|
+
var MicButtonWrapper = /*#__PURE__*/styled.div.withConfig({
|
|
68
|
+
shouldForwardProp: function shouldForwardProp(prop) {
|
|
69
|
+
return !prop.startsWith('$');
|
|
70
|
+
},
|
|
71
|
+
displayName: "AgentInput__MicButtonWrapper",
|
|
72
|
+
componentId: "sc-fhl996-7"
|
|
73
|
+
})(templateObject_10 || (templateObject_10 = __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"
|
|
74
|
+
// Masks read only alpha, so the opaque stop is a mask value, not a colour (decision 0010).
|
|
75
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
76
|
+
])), semantic.radius.full);
|
|
77
|
+
// Masks read only alpha, so the opaque stop is a mask value, not a colour (decision 0010).
|
|
78
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
79
|
+
var ringMask = css(templateObject_11 || (templateObject_11 = __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)))"])));
|
|
80
|
+
var MicListeningRing = /*#__PURE__*/styled.span.withConfig({
|
|
81
|
+
shouldForwardProp: function shouldForwardProp(prop) {
|
|
82
|
+
return !prop.startsWith('$');
|
|
83
|
+
},
|
|
84
|
+
displayName: "AgentInput__MicListeningRing",
|
|
85
|
+
componentId: "sc-fhl996-8"
|
|
86
|
+
})(templateObject_13 || (templateObject_13 = __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"
|
|
87
|
+
// Maximum suggestions shown (decision 0046, #280)
|
|
88
|
+
])), 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) {
|
|
89
|
+
var $reducedMotion = _a.$reducedMotion;
|
|
90
|
+
return !$reducedMotion && css(templateObject_12 || (templateObject_12 = __makeTemplateObject(["\n animation: ", " 1300ms linear infinite;\n "], ["\n animation: ", " 1300ms linear infinite;\n "])), rotateRing);
|
|
91
|
+
});
|
|
92
|
+
// Maximum suggestions shown (decision 0046, #280)
|
|
93
|
+
var MAX_SUGGESTIONS = 3;
|
|
94
|
+
var regionEnter = keyframes(templateObject_14 || (templateObject_14 = __makeTemplateObject(["\n from {\n opacity: 0;\n transform: translateY(", ");\n }\n"], ["\n from {\n opacity: 0;\n transform: translateY(", ");\n }\n"])), semantic.motion.distance.sm);
|
|
95
|
+
var regionFadeIn = keyframes(templateObject_15 || (templateObject_15 = __makeTemplateObject(["\n from {\n opacity: 0;\n }\n"], ["\n from {\n opacity: 0;\n }\n"
|
|
96
|
+
// Leaving content fades, then its space closes, as with Alert's dismiss (decision 0015). A grid
|
|
97
|
+
// row from 1fr to 0fr collapses to the content's own height without measuring it.
|
|
98
|
+
])));
|
|
99
|
+
// Leaving content fades, then its space closes, as with Alert's dismiss (decision 0015). A grid
|
|
100
|
+
// row from 1fr to 0fr collapses to the content's own height without measuring it.
|
|
101
|
+
var regionFadeThenCollapse = keyframes(templateObject_16 || (templateObject_16 = __makeTemplateObject(["\n 0%, 50% {\n grid-template-rows: 1fr;\n }\n 0% {\n opacity: 1;\n }\n 50%, 100% {\n opacity: 0;\n }\n 100% {\n grid-template-rows: 0fr;\n }\n"], ["\n 0%, 50% {\n grid-template-rows: 1fr;\n }\n 0% {\n opacity: 1;\n }\n 50%, 100% {\n opacity: 0;\n }\n 100% {\n grid-template-rows: 0fr;\n }\n"])));
|
|
102
|
+
var regionFadeOut = keyframes(templateObject_17 || (templateObject_17 = __makeTemplateObject(["\n to {\n opacity: 0;\n }\n"], ["\n to {\n opacity: 0;\n }\n"
|
|
103
|
+
// One part of the region above the field: the review bar or the suggestions
|
|
104
|
+
])));
|
|
105
|
+
// One part of the region above the field: the review bar or the suggestions
|
|
106
|
+
var RegionItem = /*#__PURE__*/styled.div.withConfig({
|
|
107
|
+
shouldForwardProp: function shouldForwardProp(prop) {
|
|
108
|
+
return !prop.startsWith('$');
|
|
109
|
+
},
|
|
110
|
+
displayName: "AgentInput__RegionItem",
|
|
111
|
+
componentId: "sc-fhl996-9"
|
|
112
|
+
})(templateObject_21 || (templateObject_21 = __makeTemplateObject(["\n display: grid;\n grid-template-rows: 1fr;\n animation: ", " ", " ", ";\n\n ", " {\n animation-name: ", ";\n }\n\n ", "\n"], ["\n display: grid;\n grid-template-rows: 1fr;\n animation: ", " ", " ", ";\n\n ", " {\n animation-name: ", ";\n }\n\n ", "\n"
|
|
113
|
+
// Clips while the row collapses. Its bottom padding is the space to the next part, so it closes too.
|
|
114
|
+
])), regionEnter, semantic.motion.duration.moderate, semantic.motion.easing.decelerate, reducedMotion, regionFadeIn, function (_a) {
|
|
115
|
+
var $exiting = _a.$exiting,
|
|
116
|
+
$reducedExit = _a.$reducedExit;
|
|
117
|
+
return $exiting && css(templateObject_20 || (templateObject_20 = __makeTemplateObject(["\n pointer-events: none;\n animation: ", ";\n "], ["\n pointer-events: none;\n animation: ", ";\n "])), $reducedExit ? css(templateObject_18 || (templateObject_18 = __makeTemplateObject(["", " ", " ", " forwards"], ["", " ", " ", " forwards"])), regionFadeOut, semantic.motion.duration.fast, semantic.motion.easing.accelerate) : css(templateObject_19 || (templateObject_19 = __makeTemplateObject(["", " calc(2 * ", ") ", " forwards"], ["", " calc(2 * ", ") ", " forwards"])), regionFadeThenCollapse, semantic.motion.duration.fast, semantic.motion.easing.accelerate));
|
|
118
|
+
});
|
|
119
|
+
// Clips while the row collapses. Its bottom padding is the space to the next part, so it closes too.
|
|
120
|
+
var RegionItemContent = /*#__PURE__*/styled.div.withConfig({
|
|
121
|
+
displayName: "AgentInput__RegionItemContent",
|
|
122
|
+
componentId: "sc-fhl996-10"
|
|
123
|
+
})(templateObject_22 || (templateObject_22 = __makeTemplateObject(["\n min-height: 0;\n overflow: hidden;\n padding-bottom: ", ";\n padding-left: ", ";\n"], ["\n min-height: 0;\n overflow: hidden;\n padding-bottom: ", ";\n padding-left: ", ";\n"
|
|
124
|
+
// The summary first, then the actions, left-aligned after it; they wrap below on narrow screens (0021)
|
|
125
|
+
])), semantic.space[200], semantic.space[500]);
|
|
126
|
+
// The summary first, then the actions, left-aligned after it; they wrap below on narrow screens (0021)
|
|
127
|
+
var ReviewBar = /*#__PURE__*/styled.div.withConfig({
|
|
128
|
+
displayName: "AgentInput__ReviewBar",
|
|
129
|
+
componentId: "sc-fhl996-11"
|
|
130
|
+
})(templateObject_23 || (templateObject_23 = __makeTemplateObject(["\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n column-gap: ", ";\n row-gap: ", ";\n"], ["\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n column-gap: ", ";\n row-gap: ", ";\n"])), semantic.space[300], semantic.space[200]);
|
|
131
|
+
var ReviewActions = /*#__PURE__*/styled.div.withConfig({
|
|
132
|
+
displayName: "AgentInput__ReviewActions",
|
|
133
|
+
componentId: "sc-fhl996-12"
|
|
134
|
+
})(templateObject_24 || (templateObject_24 = __makeTemplateObject(["\n display: flex;\n flex-wrap: wrap;\n gap: ", ";\n"], ["\n display: flex;\n flex-wrap: wrap;\n gap: ", ";\n"])), semantic.space[200]);
|
|
135
|
+
var SuggestionList = /*#__PURE__*/styled.ul.withConfig({
|
|
136
|
+
displayName: "AgentInput__SuggestionList",
|
|
137
|
+
componentId: "sc-fhl996-13"
|
|
138
|
+
})(templateObject_25 || (templateObject_25 = __makeTemplateObject(["\n display: flex;\n flex-wrap: wrap;\n gap: ", ";\n margin: 0;\n padding: 0;\n list-style: none;\n\n & > li {\n max-width: 100%;\n }\n"], ["\n display: flex;\n flex-wrap: wrap;\n gap: ", ";\n margin: 0;\n padding: 0;\n list-style: none;\n\n & > li {\n max-width: 100%;\n }\n"])), semantic.space[200]);
|
|
139
|
+
var StatusRow = /*#__PURE__*/styled.div.withConfig({
|
|
140
|
+
displayName: "AgentInput__StatusRow",
|
|
141
|
+
componentId: "sc-fhl996-14"
|
|
142
|
+
})(templateObject_26 || (templateObject_26 = __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]);
|
|
143
|
+
var StatusText = /*#__PURE__*/styled.div.withConfig({
|
|
144
|
+
shouldForwardProp: function shouldForwardProp(prop) {
|
|
145
|
+
return !prop.startsWith('$');
|
|
146
|
+
},
|
|
147
|
+
displayName: "AgentInput__StatusText",
|
|
148
|
+
componentId: "sc-fhl996-15"
|
|
149
|
+
})(templateObject_27 || (templateObject_27 = __makeTemplateObject(["\n padding-left: ", ";\n"], ["\n padding-left: ", ";\n"])), semantic.space[500]);
|
|
150
|
+
var StatusAnnouncement = /*#__PURE__*/styled.div.withConfig({
|
|
151
|
+
displayName: "AgentInput__StatusAnnouncement",
|
|
152
|
+
componentId: "sc-fhl996-16"
|
|
153
|
+
})(templateObject_28 || (templateObject_28 = __makeTemplateObject([""], [""])));
|
|
154
|
+
var StatusEnd = /*#__PURE__*/styled.div.withConfig({
|
|
155
|
+
displayName: "AgentInput__StatusEnd",
|
|
156
|
+
componentId: "sc-fhl996-17"
|
|
157
|
+
})(templateObject_29 || (templateObject_29 = __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[300]);
|
|
158
|
+
var VisuallyHidden = /*#__PURE__*/styled.span.withConfig({
|
|
159
|
+
displayName: "AgentInput__VisuallyHidden",
|
|
160
|
+
componentId: "sc-fhl996-18"
|
|
161
|
+
})(templateObject_30 || (templateObject_30 = __makeTemplateObject(["\n ", "\n"], ["\n ", "\n"])), visuallyHidden);
|
|
162
|
+
var MeterContainer = /*#__PURE__*/styled.div.withConfig({
|
|
163
|
+
displayName: "AgentInput__MeterContainer",
|
|
164
|
+
componentId: "sc-fhl996-19"
|
|
165
|
+
})(templateObject_31 || (templateObject_31 = __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]);
|
|
166
|
+
var MeterBar = /*#__PURE__*/styled.div.withConfig({
|
|
167
|
+
shouldForwardProp: function shouldForwardProp(prop) {
|
|
168
|
+
return !prop.startsWith('$');
|
|
169
|
+
},
|
|
170
|
+
displayName: "AgentInput__MeterBar",
|
|
171
|
+
componentId: "sc-fhl996-20"
|
|
172
|
+
})(templateObject_32 || (templateObject_32 = __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) {
|
|
173
|
+
var $height = _a.$height;
|
|
174
|
+
return "".concat($height * 100, "%");
|
|
175
|
+
}, semantic.motion.duration.fast, semantic.motion.easing.decelerate);
|
|
176
|
+
var VisuallyHiddenLabel = /*#__PURE__*/styled.label.withConfig({
|
|
177
|
+
displayName: "AgentInput__VisuallyHiddenLabel",
|
|
178
|
+
componentId: "sc-fhl996-21"
|
|
179
|
+
})(templateObject_33 || (templateObject_33 = __makeTemplateObject(["\n ", "\n"], ["\n ", "\n"])), visuallyHidden);
|
|
180
|
+
function getInitialState(hasText) {
|
|
181
|
+
return hasText ? 'typing' : 'idle';
|
|
182
|
+
}
|
|
183
|
+
function createMeterBars(level) {
|
|
184
|
+
var clampedLevel = Math.max(0, Math.min(level, 1));
|
|
185
|
+
return [0.25 + clampedLevel * 0.75, 0.2 + clampedLevel * 0.6, 0.3 + clampedLevel * 0.7, 0.2 + clampedLevel * 0.5];
|
|
186
|
+
}
|
|
187
|
+
// Declared separately so the react-hooks lint rules analyse it (they skip functions inline in forwardRef)
|
|
188
|
+
// Development builds warn about props that break the pattern. Bundlers replace process.env.NODE_ENV
|
|
189
|
+
// with a literal; without a bundler, a browser has no process, so reading it throws.
|
|
190
|
+
function readIsProduction() {
|
|
191
|
+
try {
|
|
192
|
+
return process.env.NODE_ENV === 'production';
|
|
193
|
+
} catch (_a) {
|
|
194
|
+
return false;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
var isProduction = readIsProduction();
|
|
198
|
+
// A part of the region above the field. It stays mounted while it fades out and its space closes.
|
|
199
|
+
function RegionPart(_a) {
|
|
200
|
+
var show = _a.show,
|
|
201
|
+
reducedExit = _a.reducedExit,
|
|
202
|
+
children = _a.children;
|
|
203
|
+
var _b = usePresence(show, reducedExit ? EXIT_DURATION_MS : EXIT_DURATION_MS * 2),
|
|
204
|
+
isPresent = _b.isPresent,
|
|
205
|
+
isExiting = _b.isExiting;
|
|
206
|
+
var ref = useRef(null);
|
|
207
|
+
// Leaving controls drop out of the tab order and can't be activated
|
|
208
|
+
useInert(ref, isExiting);
|
|
209
|
+
if (!isPresent) return null;
|
|
210
|
+
return jsx(RegionItem, {
|
|
211
|
+
ref: ref,
|
|
212
|
+
"$exiting": isExiting,
|
|
213
|
+
"$reducedExit": reducedExit,
|
|
214
|
+
"aria-hidden": isExiting || undefined,
|
|
215
|
+
children: jsx(RegionItemContent, {
|
|
216
|
+
children: children
|
|
217
|
+
})
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
function AgentInputWithRef(_a, ref) {
|
|
221
|
+
var _this = this;
|
|
222
|
+
var _b;
|
|
223
|
+
var value = _a.value,
|
|
224
|
+
_c = _a.defaultValue,
|
|
225
|
+
defaultValue = _c === void 0 ? '' : _c,
|
|
226
|
+
onChange = _a.onChange,
|
|
227
|
+
onSubmit = _a.onSubmit,
|
|
228
|
+
onStop = _a.onStop,
|
|
229
|
+
review = _a.review,
|
|
230
|
+
suggestions = _a.suggestions,
|
|
231
|
+
onSuggestionSelect = _a.onSuggestionSelect,
|
|
232
|
+
_d = _a.placeholder,
|
|
233
|
+
placeholder = _d === void 0 ? 'Ask a question' : _d,
|
|
234
|
+
maxLength = _a.maxLength,
|
|
235
|
+
_e = _a.disabled,
|
|
236
|
+
disabled = _e === void 0 ? false : _e,
|
|
237
|
+
isSubmitting = _a.isSubmitting,
|
|
238
|
+
_f = _a.enableVoice,
|
|
239
|
+
enableVoice = _f === void 0 ? true : _f,
|
|
240
|
+
_g = _a.autoSubmitOnVoiceFinal,
|
|
241
|
+
autoSubmitOnVoiceFinal = _g === void 0 ? true : _g,
|
|
242
|
+
_h = _a.voiceLanguage,
|
|
243
|
+
voiceLanguage = _h === void 0 ? 'en-AU' : _h,
|
|
244
|
+
_j = _a.noSpeechTimeoutMs,
|
|
245
|
+
noSpeechTimeoutMs = _j === void 0 ? 8000 : _j,
|
|
246
|
+
onVoiceStart = _a.onVoiceStart,
|
|
247
|
+
onVoiceStop = _a.onVoiceStop,
|
|
248
|
+
onVoiceInterim = _a.onVoiceInterim,
|
|
249
|
+
onVoiceFinal = _a.onVoiceFinal,
|
|
250
|
+
onVoiceError = _a.onVoiceError,
|
|
251
|
+
_k = _a.helperText,
|
|
252
|
+
helperText = _k === void 0 ? '' : _k,
|
|
253
|
+
statusMessage = _a.statusMessage,
|
|
254
|
+
errorMessage = _a.errorMessage,
|
|
255
|
+
_l = _a.label,
|
|
256
|
+
label = _l === void 0 ? 'Agent input' : _l,
|
|
257
|
+
_m = _a.docked,
|
|
258
|
+
docked = _m === void 0 ? false : _m,
|
|
259
|
+
dataTestId = _a["data-testid"];
|
|
260
|
+
var isControlled = value !== undefined;
|
|
261
|
+
var _o = useState(defaultValue),
|
|
262
|
+
internalValue = _o[0],
|
|
263
|
+
setInternalValue = _o[1];
|
|
264
|
+
var _p = useState(getInitialState(normalizeTranscript(value !== null && value !== void 0 ? value : defaultValue).length > 0)),
|
|
265
|
+
machineState = _p[0],
|
|
266
|
+
setMachineState = _p[1];
|
|
267
|
+
var _q = useState(''),
|
|
268
|
+
interimTranscript = _q[0],
|
|
269
|
+
setInterimTranscript = _q[1];
|
|
270
|
+
var _r = useState(false),
|
|
271
|
+
internalSubmitting = _r[0],
|
|
272
|
+
setInternalSubmitting = _r[1];
|
|
273
|
+
var _s = useState(undefined),
|
|
274
|
+
internalErrorMessage = _s[0],
|
|
275
|
+
setInternalErrorMessage = _s[1];
|
|
276
|
+
var _t = useState(false),
|
|
277
|
+
voiceSupported = _t[0],
|
|
278
|
+
setVoiceSupported = _t[1];
|
|
279
|
+
var _u = useState(false),
|
|
280
|
+
prefersReducedMotion = _u[0],
|
|
281
|
+
setPrefersReducedMotion = _u[1];
|
|
282
|
+
var _v = useState(0),
|
|
283
|
+
meterLevel = _v[0],
|
|
284
|
+
setMeterLevel = _v[1];
|
|
285
|
+
var recognitionRef = useRef(null);
|
|
286
|
+
var noSpeechTimeoutRef = useRef(null);
|
|
287
|
+
var isStoppingRef = useRef(false);
|
|
288
|
+
var hasSubmittedVoiceFinalRef = useRef(false);
|
|
289
|
+
var audioStreamRef = useRef(null);
|
|
290
|
+
var audioContextRef = useRef(null);
|
|
291
|
+
var meterRafRef = useRef(null);
|
|
292
|
+
var inputRef = useRef(null);
|
|
293
|
+
var inputId = useId();
|
|
294
|
+
var statusId = "".concat(inputId, "-status");
|
|
295
|
+
var counterId = "".concat(inputId, "-counter");
|
|
296
|
+
var currentValue = isControlled ? value !== null && value !== void 0 ? value : '' : internalValue;
|
|
297
|
+
// Read after onSubmit settles, when the closure's value may be stale
|
|
298
|
+
var currentValueRef = useRef(currentValue);
|
|
299
|
+
useEffect(function () {
|
|
300
|
+
currentValueRef.current = currentValue;
|
|
301
|
+
}, [currentValue]);
|
|
302
|
+
var hasText = normalizeTranscript(currentValue).length > 0;
|
|
303
|
+
var messageLength = normalizeMessage(currentValue).length;
|
|
304
|
+
var isOverLimit = maxLength !== undefined && messageLength > maxLength;
|
|
305
|
+
var effectiveSubmitting = isSubmitting !== null && isSubmitting !== void 0 ? isSubmitting : internalSubmitting;
|
|
306
|
+
var effectiveState = disabled ? 'disabled' : machineState;
|
|
307
|
+
var isListening = effectiveState === 'listening';
|
|
308
|
+
var hasVoice = enableVoice && voiceSupported;
|
|
309
|
+
var updateMachineState = useCallback(function (event) {
|
|
310
|
+
setMachineState(function (previousState) {
|
|
311
|
+
return agentInputStateTransition(previousState, event);
|
|
312
|
+
});
|
|
313
|
+
}, []);
|
|
314
|
+
var updateValue = useCallback(function (nextValue) {
|
|
315
|
+
if (!isControlled) {
|
|
316
|
+
setInternalValue(nextValue);
|
|
317
|
+
}
|
|
318
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(nextValue);
|
|
319
|
+
}, [isControlled, onChange]);
|
|
320
|
+
var clearNoSpeechTimeout = useCallback(function () {
|
|
321
|
+
if (noSpeechTimeoutRef.current) {
|
|
322
|
+
window.clearTimeout(noSpeechTimeoutRef.current);
|
|
323
|
+
noSpeechTimeoutRef.current = null;
|
|
324
|
+
}
|
|
325
|
+
}, []);
|
|
326
|
+
var stopMeter = useCallback(function () {
|
|
327
|
+
return __awaiter(_this, void 0, void 0, function () {
|
|
328
|
+
return __generator(this, function (_a) {
|
|
329
|
+
switch (_a.label) {
|
|
330
|
+
case 0:
|
|
331
|
+
if (meterRafRef.current) {
|
|
332
|
+
window.cancelAnimationFrame(meterRafRef.current);
|
|
333
|
+
meterRafRef.current = null;
|
|
334
|
+
}
|
|
335
|
+
if (audioStreamRef.current) {
|
|
336
|
+
audioStreamRef.current.getTracks().forEach(function (track) {
|
|
337
|
+
return track.stop();
|
|
338
|
+
});
|
|
339
|
+
audioStreamRef.current = null;
|
|
340
|
+
}
|
|
341
|
+
if (!audioContextRef.current) return [3 /*break*/, 2];
|
|
342
|
+
return [4 /*yield*/, audioContextRef.current.close()];
|
|
343
|
+
case 1:
|
|
344
|
+
_a.sent();
|
|
345
|
+
audioContextRef.current = null;
|
|
346
|
+
_a.label = 2;
|
|
347
|
+
case 2:
|
|
348
|
+
setMeterLevel(0);
|
|
349
|
+
return [2 /*return*/];
|
|
350
|
+
}
|
|
351
|
+
});
|
|
352
|
+
});
|
|
353
|
+
}, []);
|
|
354
|
+
var startMeter = useCallback(function () {
|
|
355
|
+
return __awaiter(_this, void 0, void 0, function () {
|
|
356
|
+
var stream, audioContext, analyser_1, source, data_1, _loop_;
|
|
357
|
+
var _b;
|
|
358
|
+
return __generator(this, function (_c) {
|
|
359
|
+
switch (_c.label) {
|
|
360
|
+
case 0:
|
|
361
|
+
if (prefersReducedMotion || !((_b = navigator === null || navigator === void 0 ? void 0 : navigator.mediaDevices) === null || _b === void 0 ? void 0 : _b.getUserMedia)) {
|
|
362
|
+
return [2 /*return*/];
|
|
363
|
+
}
|
|
364
|
+
_c.label = 1;
|
|
365
|
+
case 1:
|
|
366
|
+
_c.trys.push([1, 3,, 4]);
|
|
367
|
+
return [4 /*yield*/, navigator.mediaDevices.getUserMedia({
|
|
368
|
+
audio: true
|
|
369
|
+
})];
|
|
370
|
+
case 2:
|
|
371
|
+
stream = _c.sent();
|
|
372
|
+
audioContext = new AudioContext();
|
|
373
|
+
analyser_1 = audioContext.createAnalyser();
|
|
374
|
+
analyser_1.fftSize = 256;
|
|
375
|
+
source = audioContext.createMediaStreamSource(stream);
|
|
376
|
+
source.connect(analyser_1);
|
|
377
|
+
data_1 = new Uint8Array(analyser_1.frequencyBinCount);
|
|
378
|
+
audioStreamRef.current = stream;
|
|
379
|
+
audioContextRef.current = audioContext;
|
|
380
|
+
_loop_ = function loop_1() {
|
|
381
|
+
analyser_1.getByteTimeDomainData(data_1);
|
|
382
|
+
var sum = 0;
|
|
383
|
+
for (var index = 0; index < data_1.length; index += 1) {
|
|
384
|
+
var centered = data_1[index] / 128 - 1;
|
|
385
|
+
sum += centered * centered;
|
|
386
|
+
}
|
|
387
|
+
var rms = Math.sqrt(sum / data_1.length);
|
|
388
|
+
var nextLevel = Math.max(0.05, Math.min(rms * 3, 1));
|
|
389
|
+
setMeterLevel(nextLevel);
|
|
390
|
+
meterRafRef.current = window.requestAnimationFrame(_loop_);
|
|
391
|
+
};
|
|
392
|
+
meterRafRef.current = window.requestAnimationFrame(_loop_);
|
|
393
|
+
return [3 /*break*/, 4];
|
|
394
|
+
case 3:
|
|
395
|
+
_c.sent();
|
|
396
|
+
setMeterLevel(0);
|
|
397
|
+
return [3 /*break*/, 4];
|
|
398
|
+
case 4:
|
|
399
|
+
return [2 /*return*/];
|
|
400
|
+
}
|
|
401
|
+
});
|
|
402
|
+
});
|
|
403
|
+
}, [prefersReducedMotion]);
|
|
404
|
+
var emitVoiceError = useCallback(function (code, fallback) {
|
|
405
|
+
var message = fallback !== null && fallback !== void 0 ? fallback : defaultVoiceErrorMessage(code);
|
|
406
|
+
setInternalErrorMessage(message);
|
|
407
|
+
updateMachineState({
|
|
408
|
+
type: 'VOICE_ERROR'
|
|
409
|
+
});
|
|
410
|
+
onVoiceError === null || onVoiceError === void 0 ? void 0 : onVoiceError({
|
|
411
|
+
code: code,
|
|
412
|
+
message: message
|
|
413
|
+
});
|
|
414
|
+
}, [onVoiceError, updateMachineState]);
|
|
415
|
+
var submitPayload = useCallback(function (rawText, source) {
|
|
416
|
+
return __awaiter(_this, void 0, void 0, function () {
|
|
417
|
+
var text;
|
|
418
|
+
return __generator(this, function (_b) {
|
|
419
|
+
switch (_b.label) {
|
|
420
|
+
case 0:
|
|
421
|
+
text = source === 'text' ? normalizeMessage(rawText) : normalizeTranscript(rawText);
|
|
422
|
+
if (!text || disabled || effectiveSubmitting) {
|
|
423
|
+
return [2 /*return*/];
|
|
424
|
+
}
|
|
425
|
+
if (maxLength !== undefined && text.length > maxLength) {
|
|
426
|
+
// A long transcript goes into the field to be shortened, unless the user has typed since
|
|
427
|
+
if (source === 'voice-final' && !normalizeMessage(currentValueRef.current)) {
|
|
428
|
+
updateValue(text);
|
|
429
|
+
}
|
|
430
|
+
return [2 /*return*/];
|
|
431
|
+
}
|
|
432
|
+
updateMachineState({
|
|
433
|
+
type: 'SUBMIT'
|
|
434
|
+
});
|
|
435
|
+
setInternalErrorMessage(undefined);
|
|
436
|
+
if (isSubmitting === undefined) {
|
|
437
|
+
setInternalSubmitting(true);
|
|
438
|
+
}
|
|
439
|
+
_b.label = 1;
|
|
440
|
+
case 1:
|
|
441
|
+
_b.trys.push([1, 3, 4, 5]);
|
|
442
|
+
return [4 /*yield*/, onSubmit({
|
|
443
|
+
text: text,
|
|
444
|
+
source: source,
|
|
445
|
+
timestamp: new Date().toISOString()
|
|
446
|
+
})];
|
|
447
|
+
case 2:
|
|
448
|
+
_b.sent();
|
|
449
|
+
updateMachineState({
|
|
450
|
+
type: 'SUBMIT_SUCCESS'
|
|
451
|
+
});
|
|
452
|
+
setInterimTranscript('');
|
|
453
|
+
// Keep a follow-up typed while submitting
|
|
454
|
+
if (normalizeMessage(currentValueRef.current) === text) {
|
|
455
|
+
updateValue('');
|
|
456
|
+
}
|
|
457
|
+
return [3 /*break*/, 5];
|
|
458
|
+
case 3:
|
|
459
|
+
_b.sent();
|
|
460
|
+
updateMachineState({
|
|
461
|
+
type: 'SUBMIT_ERROR'
|
|
462
|
+
});
|
|
463
|
+
// Restore the transcript unless the user has typed something since
|
|
464
|
+
if (source === 'voice-final' && !normalizeMessage(currentValueRef.current)) {
|
|
465
|
+
updateValue(text);
|
|
466
|
+
}
|
|
467
|
+
setInternalErrorMessage('Submission failed. Please try again.');
|
|
468
|
+
return [3 /*break*/, 5];
|
|
469
|
+
case 4:
|
|
470
|
+
if (isSubmitting === undefined) {
|
|
471
|
+
setInternalSubmitting(false);
|
|
472
|
+
}
|
|
473
|
+
return [7 /*endfinally*/];
|
|
474
|
+
case 5:
|
|
475
|
+
return [2 /*return*/];
|
|
476
|
+
}
|
|
477
|
+
});
|
|
478
|
+
});
|
|
479
|
+
}, [disabled, effectiveSubmitting, isSubmitting, maxLength, onSubmit, updateMachineState, updateValue]);
|
|
480
|
+
var stopListening = useCallback(function (emitStopEvent_1) {
|
|
481
|
+
var args_1 = [];
|
|
482
|
+
for (var _i = 1; _i < arguments.length; _i++) {
|
|
483
|
+
args_1[_i - 1] = arguments[_i];
|
|
484
|
+
}
|
|
485
|
+
return __awaiter(_this, __spreadArray([emitStopEvent_1], args_1, true), void 0, function (emitStopEvent, preserveState) {
|
|
486
|
+
if (preserveState === void 0) {
|
|
487
|
+
preserveState = false;
|
|
488
|
+
}
|
|
489
|
+
return __generator(this, function (_a) {
|
|
490
|
+
switch (_a.label) {
|
|
491
|
+
case 0:
|
|
492
|
+
isStoppingRef.current = true;
|
|
493
|
+
clearNoSpeechTimeout();
|
|
494
|
+
setInterimTranscript('');
|
|
495
|
+
if (recognitionRef.current) {
|
|
496
|
+
try {
|
|
497
|
+
recognitionRef.current.stop();
|
|
498
|
+
} catch (_b) {
|
|
499
|
+
// no-op
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
return [4 /*yield*/, stopMeter()];
|
|
503
|
+
case 1:
|
|
504
|
+
_a.sent();
|
|
505
|
+
if (emitStopEvent) {
|
|
506
|
+
onVoiceStop === null || onVoiceStop === void 0 ? void 0 : onVoiceStop();
|
|
507
|
+
}
|
|
508
|
+
if (!preserveState) {
|
|
509
|
+
updateMachineState({
|
|
510
|
+
type: 'MIC_STOP',
|
|
511
|
+
hasText: hasText
|
|
512
|
+
});
|
|
513
|
+
}
|
|
514
|
+
isStoppingRef.current = false;
|
|
515
|
+
return [2 /*return*/];
|
|
516
|
+
}
|
|
517
|
+
});
|
|
518
|
+
});
|
|
519
|
+
}, [clearNoSpeechTimeout, hasText, onVoiceStop, stopMeter, updateMachineState]);
|
|
520
|
+
var onNoSpeechTimeout = useCallback(function () {
|
|
521
|
+
return __awaiter(_this, void 0, void 0, function () {
|
|
522
|
+
var message;
|
|
523
|
+
return __generator(this, function (_a) {
|
|
524
|
+
switch (_a.label) {
|
|
525
|
+
case 0:
|
|
526
|
+
clearNoSpeechTimeout();
|
|
527
|
+
updateMachineState({
|
|
528
|
+
type: 'TIMEOUT_NO_SPEECH'
|
|
529
|
+
});
|
|
530
|
+
message = defaultVoiceErrorMessage('no-speech');
|
|
531
|
+
setInternalErrorMessage(message);
|
|
532
|
+
onVoiceError === null || onVoiceError === void 0 ? void 0 : onVoiceError({
|
|
533
|
+
code: 'no-speech',
|
|
534
|
+
message: message
|
|
535
|
+
});
|
|
536
|
+
return [4 /*yield*/, stopListening(true, true)];
|
|
537
|
+
case 1:
|
|
538
|
+
_a.sent();
|
|
539
|
+
return [2 /*return*/];
|
|
540
|
+
}
|
|
541
|
+
});
|
|
542
|
+
});
|
|
543
|
+
}, [clearNoSpeechTimeout, onVoiceError, stopListening, updateMachineState]);
|
|
544
|
+
var beginListening = useCallback(function () {
|
|
545
|
+
return __awaiter(_this, void 0, void 0, function () {
|
|
546
|
+
return __generator(this, function (_b) {
|
|
547
|
+
switch (_b.label) {
|
|
548
|
+
case 0:
|
|
549
|
+
if (!recognitionRef.current || disabled || effectiveSubmitting) {
|
|
550
|
+
return [2 /*return*/];
|
|
551
|
+
}
|
|
552
|
+
setInternalErrorMessage(undefined);
|
|
553
|
+
hasSubmittedVoiceFinalRef.current = false;
|
|
554
|
+
_b.label = 1;
|
|
555
|
+
case 1:
|
|
556
|
+
_b.trys.push([1, 3,, 4]);
|
|
557
|
+
recognitionRef.current.start();
|
|
558
|
+
updateMachineState({
|
|
559
|
+
type: 'MIC_START'
|
|
560
|
+
});
|
|
561
|
+
onVoiceStart === null || onVoiceStart === void 0 ? void 0 : onVoiceStart();
|
|
562
|
+
clearNoSpeechTimeout();
|
|
563
|
+
noSpeechTimeoutRef.current = window.setTimeout(onNoSpeechTimeout, noSpeechTimeoutMs);
|
|
564
|
+
return [4 /*yield*/, startMeter()];
|
|
565
|
+
case 2:
|
|
566
|
+
_b.sent();
|
|
567
|
+
return [3 /*break*/, 4];
|
|
568
|
+
case 3:
|
|
569
|
+
_b.sent();
|
|
570
|
+
emitVoiceError('unknown');
|
|
571
|
+
return [3 /*break*/, 4];
|
|
572
|
+
case 4:
|
|
573
|
+
return [2 /*return*/];
|
|
574
|
+
}
|
|
575
|
+
});
|
|
576
|
+
});
|
|
577
|
+
}, [clearNoSpeechTimeout, disabled, effectiveSubmitting, emitVoiceError, noSpeechTimeoutMs, onNoSpeechTimeout, onVoiceStart, startMeter, updateMachineState]);
|
|
578
|
+
useEffect(function () {
|
|
579
|
+
var constructor = detectSpeechRecognitionConstructor(window);
|
|
580
|
+
setVoiceSupported(Boolean(constructor));
|
|
581
|
+
if (!enableVoice || !constructor) {
|
|
582
|
+
return;
|
|
583
|
+
}
|
|
584
|
+
var recognition = new constructor();
|
|
585
|
+
recognition.lang = voiceLanguage;
|
|
586
|
+
recognition.interimResults = true;
|
|
587
|
+
recognition.continuous = false;
|
|
588
|
+
recognition.onresult = function (event) {
|
|
589
|
+
return __awaiter(_this, void 0, void 0, function () {
|
|
590
|
+
var interim, finalText, index, result, normalizedInterim, normalizedFinal;
|
|
591
|
+
return __generator(this, function (_a) {
|
|
592
|
+
switch (_a.label) {
|
|
593
|
+
case 0:
|
|
594
|
+
clearNoSpeechTimeout();
|
|
595
|
+
noSpeechTimeoutRef.current = window.setTimeout(onNoSpeechTimeout, noSpeechTimeoutMs);
|
|
596
|
+
interim = '';
|
|
597
|
+
finalText = '';
|
|
598
|
+
for (index = event.resultIndex; index < event.results.length; index += 1) {
|
|
599
|
+
result = event.results[index];
|
|
600
|
+
if (!result || !result[0]) continue;
|
|
601
|
+
if (result.isFinal) {
|
|
602
|
+
finalText += " ".concat(result[0].transcript);
|
|
603
|
+
} else {
|
|
604
|
+
interim += " ".concat(result[0].transcript);
|
|
605
|
+
}
|
|
606
|
+
}
|
|
607
|
+
normalizedInterim = normalizeTranscript(interim);
|
|
608
|
+
setInterimTranscript(normalizedInterim);
|
|
609
|
+
updateMachineState({
|
|
610
|
+
type: 'VOICE_INTERIM'
|
|
611
|
+
});
|
|
612
|
+
if (normalizedInterim) {
|
|
613
|
+
onVoiceInterim === null || onVoiceInterim === void 0 ? void 0 : onVoiceInterim(normalizedInterim);
|
|
614
|
+
}
|
|
615
|
+
normalizedFinal = normalizeTranscript(finalText);
|
|
616
|
+
if (!normalizedFinal || hasSubmittedVoiceFinalRef.current) {
|
|
617
|
+
return [2 /*return*/];
|
|
618
|
+
}
|
|
619
|
+
hasSubmittedVoiceFinalRef.current = true;
|
|
620
|
+
updateMachineState({
|
|
621
|
+
type: 'VOICE_FINAL'
|
|
622
|
+
});
|
|
623
|
+
setInterimTranscript('');
|
|
624
|
+
onVoiceFinal === null || onVoiceFinal === void 0 ? void 0 : onVoiceFinal(normalizedFinal);
|
|
625
|
+
return [4 /*yield*/, stopMeter()];
|
|
626
|
+
case 1:
|
|
627
|
+
_a.sent();
|
|
628
|
+
if (!autoSubmitOnVoiceFinal) return [3 /*break*/, 3];
|
|
629
|
+
return [4 /*yield*/, submitPayload(normalizedFinal, 'voice-final')];
|
|
630
|
+
case 2:
|
|
631
|
+
_a.sent();
|
|
632
|
+
return [3 /*break*/, 4];
|
|
633
|
+
case 3:
|
|
634
|
+
updateValue(normalizedFinal);
|
|
635
|
+
updateMachineState({
|
|
636
|
+
type: 'MIC_STOP',
|
|
637
|
+
hasText: true
|
|
638
|
+
});
|
|
639
|
+
_a.label = 4;
|
|
640
|
+
case 4:
|
|
641
|
+
return [2 /*return*/];
|
|
642
|
+
}
|
|
643
|
+
});
|
|
644
|
+
});
|
|
645
|
+
};
|
|
646
|
+
recognition.onerror = function (event) {
|
|
647
|
+
return __awaiter(_this, void 0, void 0, function () {
|
|
648
|
+
var mappedCode;
|
|
649
|
+
return __generator(this, function (_a) {
|
|
650
|
+
switch (_a.label) {
|
|
651
|
+
case 0:
|
|
652
|
+
mappedCode = mapSpeechErrorCode(event.error);
|
|
653
|
+
emitVoiceError(mappedCode);
|
|
654
|
+
return [4 /*yield*/, stopListening(true, true)];
|
|
655
|
+
case 1:
|
|
656
|
+
_a.sent();
|
|
657
|
+
return [2 /*return*/];
|
|
658
|
+
}
|
|
659
|
+
});
|
|
660
|
+
});
|
|
661
|
+
};
|
|
662
|
+
recognition.onend = function () {
|
|
663
|
+
return __awaiter(_this, void 0, void 0, function () {
|
|
664
|
+
return __generator(this, function (_a) {
|
|
665
|
+
switch (_a.label) {
|
|
666
|
+
case 0:
|
|
667
|
+
if (isStoppingRef.current) return [2 /*return*/];
|
|
668
|
+
clearNoSpeechTimeout();
|
|
669
|
+
return [4 /*yield*/, stopMeter()];
|
|
670
|
+
case 1:
|
|
671
|
+
_a.sent();
|
|
672
|
+
if (!hasSubmittedVoiceFinalRef.current) {
|
|
673
|
+
updateMachineState({
|
|
674
|
+
type: 'MIC_STOP',
|
|
675
|
+
hasText: hasText
|
|
676
|
+
});
|
|
677
|
+
}
|
|
678
|
+
return [2 /*return*/];
|
|
679
|
+
}
|
|
680
|
+
});
|
|
681
|
+
});
|
|
682
|
+
};
|
|
683
|
+
recognitionRef.current = recognition;
|
|
684
|
+
return function () {
|
|
685
|
+
var _a;
|
|
686
|
+
clearNoSpeechTimeout();
|
|
687
|
+
(_a = recognitionRef.current) === null || _a === void 0 ? void 0 : _a.abort();
|
|
688
|
+
recognitionRef.current = null;
|
|
689
|
+
stopMeter();
|
|
690
|
+
};
|
|
691
|
+
}, [autoSubmitOnVoiceFinal, clearNoSpeechTimeout, emitVoiceError, enableVoice, hasText, noSpeechTimeoutMs, onNoSpeechTimeout, onVoiceFinal, onVoiceInterim, stopListening, stopMeter, submitPayload, updateMachineState, updateValue, voiceLanguage]);
|
|
692
|
+
var focusField = useCallback(function (cursor) {
|
|
693
|
+
var input = inputRef.current;
|
|
694
|
+
if (!input) return;
|
|
695
|
+
input.focus();
|
|
696
|
+
if (!cursor) return;
|
|
697
|
+
var placeCursor = function placeCursor() {
|
|
698
|
+
if (cursor === 'all') {
|
|
699
|
+
input.select();
|
|
700
|
+
return;
|
|
701
|
+
}
|
|
702
|
+
var position = cursor === 'start' ? 0 : input.value.length;
|
|
703
|
+
input.setSelectionRange(position, position);
|
|
704
|
+
};
|
|
705
|
+
placeCursor();
|
|
706
|
+
// Again after the render a prefill in the same handler triggers, so 'end' lands after the new text
|
|
707
|
+
window.setTimeout(placeCursor, 0);
|
|
708
|
+
}, []);
|
|
709
|
+
useImperativeHandle(ref, function () {
|
|
710
|
+
return {
|
|
711
|
+
focus: function focus(options) {
|
|
712
|
+
return focusField(options === null || options === void 0 ? void 0 : options.cursor);
|
|
713
|
+
},
|
|
714
|
+
clear: function clear() {
|
|
715
|
+
setInterimTranscript('');
|
|
716
|
+
updateValue('');
|
|
717
|
+
}
|
|
718
|
+
};
|
|
719
|
+
}, [focusField, updateValue]);
|
|
720
|
+
// The region above the field (decision 0046). The last review and suggestions shown are kept, so
|
|
721
|
+
// they can fade out after the product removes them.
|
|
722
|
+
var _w = useState(review),
|
|
723
|
+
shownReview = _w[0],
|
|
724
|
+
setShownReview = _w[1];
|
|
725
|
+
var _x = useState(null),
|
|
726
|
+
lastReviewAction = _x[0],
|
|
727
|
+
setLastReviewAction = _x[1];
|
|
728
|
+
if (review && review !== shownReview) {
|
|
729
|
+
setShownReview(review);
|
|
730
|
+
// A new proposal or change replaces what the last Discard or Undo announced
|
|
731
|
+
if (lastReviewAction) setLastReviewAction(null);
|
|
732
|
+
}
|
|
733
|
+
// A proposal replacing an open one is announced as an update (decision 0047). Consecutive
|
|
734
|
+
// replacements alternate a trailing no-break space, so the live region's text changes each time
|
|
735
|
+
// even when the summary doesn't; screen readers don't speak it.
|
|
736
|
+
var openProposalId = (review === null || review === void 0 ? void 0 : review.state) === 'proposal' ? review.id : null;
|
|
737
|
+
var _y = useState(openProposalId),
|
|
738
|
+
announcedProposalId = _y[0],
|
|
739
|
+
setAnnouncedProposalId = _y[1];
|
|
740
|
+
var _z = useState(0),
|
|
741
|
+
replacementCount = _z[0],
|
|
742
|
+
setReplacementCount = _z[1];
|
|
743
|
+
if (openProposalId !== announcedProposalId) {
|
|
744
|
+
setAnnouncedProposalId(openProposalId);
|
|
745
|
+
setReplacementCount(openProposalId !== null && announcedProposalId !== null ? replacementCount + 1 : 0);
|
|
746
|
+
}
|
|
747
|
+
var cappedSuggestions = useMemo(function () {
|
|
748
|
+
return (suggestions !== null && suggestions !== void 0 ? suggestions : []).slice(0, MAX_SUGGESTIONS);
|
|
749
|
+
}, [suggestions]);
|
|
750
|
+
var showSuggestions = cappedSuggestions.length > 0 && !hasText && (review === null || review === void 0 ? void 0 : review.state) !== 'proposal';
|
|
751
|
+
var _0 = useState(cappedSuggestions),
|
|
752
|
+
shownSuggestions = _0[0],
|
|
753
|
+
setShownSuggestions = _0[1];
|
|
754
|
+
if (showSuggestions && cappedSuggestions !== shownSuggestions) {
|
|
755
|
+
setShownSuggestions(cappedSuggestions);
|
|
756
|
+
}
|
|
757
|
+
var suggestionCount = (_b = suggestions === null || suggestions === void 0 ? void 0 : suggestions.length) !== null && _b !== void 0 ? _b : 0;
|
|
758
|
+
useEffect(function () {
|
|
759
|
+
if (!isProduction && suggestionCount > MAX_SUGGESTIONS) {
|
|
760
|
+
console.warn("AgentInput shows at most ".concat(MAX_SUGGESTIONS, " suggestions (decision 0046); ").concat(suggestionCount, " were passed, so the rest are hidden."));
|
|
761
|
+
}
|
|
762
|
+
}, [suggestionCount]);
|
|
763
|
+
var reviewAnnouncement = review ? review.state === 'proposal' ? "".concat(replacementCount > 0 ? 'Proposal updated. ' : '').concat(review.summary, ". Accept or discard.").concat(replacementCount > 0 && replacementCount % 2 === 0 ? "\xA0" : '') : 'Changes applied. Undo available.' : lastReviewAction === 'discarded' ? 'Suggestion discarded.' : lastReviewAction === 'undone' ? 'Changes undone.' : '';
|
|
764
|
+
var onReviewDiscard = function onReviewDiscard(onDiscard) {
|
|
765
|
+
setLastReviewAction('discarded');
|
|
766
|
+
onDiscard();
|
|
767
|
+
// The bar is leaving, so focus goes to the field rather than being lost
|
|
768
|
+
focusField();
|
|
769
|
+
};
|
|
770
|
+
var onReviewUndo = function onReviewUndo(onUndo) {
|
|
771
|
+
setLastReviewAction('undone');
|
|
772
|
+
onUndo();
|
|
773
|
+
focusField();
|
|
774
|
+
};
|
|
775
|
+
var onPickSuggestion = function onPickSuggestion(text) {
|
|
776
|
+
updateValue(text);
|
|
777
|
+
onSuggestionSelect === null || onSuggestionSelect === void 0 ? void 0 : onSuggestionSelect(text);
|
|
778
|
+
// Fills, never sends: the user reviews the text in the field first
|
|
779
|
+
focusField('end');
|
|
780
|
+
};
|
|
781
|
+
useEffect(function () {
|
|
782
|
+
var mediaQuery = window.matchMedia('(prefers-reduced-motion: reduce)');
|
|
783
|
+
var sync = function sync() {
|
|
784
|
+
return setPrefersReducedMotion(mediaQuery.matches);
|
|
785
|
+
};
|
|
786
|
+
sync();
|
|
787
|
+
mediaQuery.addEventListener('change', sync);
|
|
788
|
+
return function () {
|
|
789
|
+
return mediaQuery.removeEventListener('change', sync);
|
|
790
|
+
};
|
|
791
|
+
}, []);
|
|
792
|
+
useEffect(function () {
|
|
793
|
+
if (effectiveState === 'error' && !internalErrorMessage && !errorMessage) {
|
|
794
|
+
updateMachineState({
|
|
795
|
+
type: 'RESET_ERROR',
|
|
796
|
+
hasText: hasText
|
|
797
|
+
});
|
|
798
|
+
}
|
|
799
|
+
}, [effectiveState, errorMessage, hasText, internalErrorMessage, updateMachineState]);
|
|
800
|
+
useEffect(function () {
|
|
801
|
+
if (!disabled && (machineState === 'idle' || machineState === 'typing')) {
|
|
802
|
+
updateMachineState({
|
|
803
|
+
type: 'INPUT_CHANGE',
|
|
804
|
+
hasText: hasText
|
|
805
|
+
});
|
|
806
|
+
}
|
|
807
|
+
}, [disabled, hasText, machineState, updateMachineState]);
|
|
808
|
+
var displayedValue = useMemo(function () {
|
|
809
|
+
if (!interimTranscript) {
|
|
810
|
+
return currentValue;
|
|
811
|
+
}
|
|
812
|
+
return normalizeMessage([currentValue, interimTranscript].filter(Boolean).join(' '));
|
|
813
|
+
}, [currentValue, interimTranscript]);
|
|
814
|
+
var lastFieldWidthRef = useRef(0);
|
|
815
|
+
var resizeField = useCallback(function () {
|
|
816
|
+
var field = inputRef.current;
|
|
817
|
+
// Hidden (for example in a closed sheet): measure when it's shown, via the observer below
|
|
818
|
+
if (!field || field.clientWidth === 0) return;
|
|
819
|
+
lastFieldWidthRef.current = field.clientWidth;
|
|
820
|
+
// Collapsing the field to measure it shrinks the page for a moment; some engines clamp a page
|
|
821
|
+
// scrolled to the bottom when that happens, so restore its scroll position
|
|
822
|
+
var scrollX = window.scrollX,
|
|
823
|
+
scrollY = window.scrollY;
|
|
824
|
+
field.style.height = 'auto';
|
|
825
|
+
field.style.height = "".concat(field.scrollHeight, "px");
|
|
826
|
+
if (window.scrollY !== scrollY) window.scrollTo(scrollX, scrollY);
|
|
827
|
+
// Scroll only once max-height (six rows) clips the content
|
|
828
|
+
field.style.overflowY = field.scrollHeight > field.clientHeight ? 'auto' : 'hidden';
|
|
829
|
+
}, []);
|
|
830
|
+
useIsomorphicLayoutEffect(function () {
|
|
831
|
+
resizeField();
|
|
832
|
+
}, [displayedValue, resizeField]);
|
|
833
|
+
// Text rewraps when the field's width changes (layout, or being shown), not only the window's
|
|
834
|
+
useEffect(function () {
|
|
835
|
+
var field = inputRef.current;
|
|
836
|
+
if (!field || typeof ResizeObserver === 'undefined') return;
|
|
837
|
+
var observer = new ResizeObserver(function () {
|
|
838
|
+
// Its own height changes trigger this too; only a width change can rewrap the text
|
|
839
|
+
if (field.clientWidth !== lastFieldWidthRef.current) resizeField();
|
|
840
|
+
});
|
|
841
|
+
observer.observe(field);
|
|
842
|
+
return function () {
|
|
843
|
+
return observer.disconnect();
|
|
844
|
+
};
|
|
845
|
+
}, [resizeField]);
|
|
846
|
+
var onTextChange = function onTextChange(event) {
|
|
847
|
+
updateValue(event.target.value);
|
|
848
|
+
if (effectiveState === 'error') {
|
|
849
|
+
setInternalErrorMessage(undefined);
|
|
850
|
+
updateMachineState({
|
|
851
|
+
type: 'RESET_ERROR',
|
|
852
|
+
hasText: normalizeTranscript(event.target.value).length > 0
|
|
853
|
+
});
|
|
854
|
+
}
|
|
855
|
+
};
|
|
856
|
+
var onInputKeyDown = function onInputKeyDown(event) {
|
|
857
|
+
return __awaiter(_this, void 0, void 0, function () {
|
|
858
|
+
var isComposing;
|
|
859
|
+
return __generator(this, function (_a) {
|
|
860
|
+
switch (_a.label) {
|
|
861
|
+
case 0:
|
|
862
|
+
isComposing = event.nativeEvent.isComposing || event.keyCode === 229;
|
|
863
|
+
// Escape during an IME composition cancels the composition, not the request
|
|
864
|
+
if (event.key === 'Escape' && onStop && effectiveSubmitting && !isComposing) {
|
|
865
|
+
event.preventDefault();
|
|
866
|
+
onStop();
|
|
867
|
+
return [2 /*return*/];
|
|
868
|
+
}
|
|
869
|
+
if (!(event.key === 'Escape' && isListening)) return [3 /*break*/, 2];
|
|
870
|
+
event.preventDefault();
|
|
871
|
+
return [4 /*yield*/, stopListening(true)];
|
|
872
|
+
case 1:
|
|
873
|
+
_a.sent();
|
|
874
|
+
return [2 /*return*/];
|
|
875
|
+
case 2:
|
|
876
|
+
if (!(event.key === 'Enter' && !event.shiftKey && !isComposing)) return [3 /*break*/, 4];
|
|
877
|
+
event.preventDefault();
|
|
878
|
+
return [4 /*yield*/, submitPayload(currentValue, 'text')];
|
|
879
|
+
case 3:
|
|
880
|
+
_a.sent();
|
|
881
|
+
_a.label = 4;
|
|
882
|
+
case 4:
|
|
883
|
+
return [2 /*return*/];
|
|
884
|
+
}
|
|
885
|
+
});
|
|
886
|
+
});
|
|
887
|
+
};
|
|
888
|
+
var onMicToggle = function onMicToggle() {
|
|
889
|
+
return __awaiter(_this, void 0, void 0, function () {
|
|
890
|
+
return __generator(this, function (_a) {
|
|
891
|
+
switch (_a.label) {
|
|
892
|
+
case 0:
|
|
893
|
+
if (!hasVoice) return [2 /*return*/];
|
|
894
|
+
if (!isListening) return [3 /*break*/, 2];
|
|
895
|
+
return [4 /*yield*/, stopListening(true)];
|
|
896
|
+
case 1:
|
|
897
|
+
_a.sent();
|
|
898
|
+
return [2 /*return*/];
|
|
899
|
+
case 2:
|
|
900
|
+
return [4 /*yield*/, beginListening()];
|
|
901
|
+
case 3:
|
|
902
|
+
_a.sent();
|
|
903
|
+
return [2 /*return*/];
|
|
904
|
+
}
|
|
905
|
+
});
|
|
906
|
+
});
|
|
907
|
+
};
|
|
908
|
+
var statusByState = {
|
|
909
|
+
idle: statusMessage || helperText,
|
|
910
|
+
typing: statusMessage || helperText,
|
|
911
|
+
listening: statusMessage || DEFAULT_LISTENING_MESSAGE,
|
|
912
|
+
processingFinalTranscript: statusMessage || DEFAULT_PROCESSING_MESSAGE,
|
|
913
|
+
submitting: statusMessage || 'Submitting…',
|
|
914
|
+
error: errorMessage || internalErrorMessage || 'Voice input failed. Try again.',
|
|
915
|
+
disabled: statusMessage || helperText
|
|
916
|
+
};
|
|
917
|
+
var overLimitMessage = isOverLimit && maxLength !== undefined ? "Over the ".concat(maxLength, "-character limit. Shorten your message to send.") : undefined;
|
|
918
|
+
// A product-set error shows in any state. Unsupported voice hides the mic without a message.
|
|
919
|
+
var resolvedStatus = errorMessage || overLimitMessage || statusByState[effectiveState];
|
|
920
|
+
var isStatusError = Boolean(errorMessage) || isOverLimit || effectiveState === 'error';
|
|
921
|
+
var meterBars = createMeterBars(meterLevel);
|
|
922
|
+
var showStop = Boolean(onStop) && effectiveSubmitting;
|
|
923
|
+
var sendDisabled = disabled || effectiveSubmitting || isOverLimit || messageLength === 0;
|
|
924
|
+
var showCounter = maxLength !== undefined && messageLength >= maxLength * COUNTER_THRESHOLD;
|
|
925
|
+
// Announced once when the limit is reached; going over is announced by the status line
|
|
926
|
+
var limitAnnouncement = maxLength !== undefined && messageLength === maxLength ? "Character limit reached: ".concat(maxLength, " characters") : '';
|
|
927
|
+
return jsxs(Container, {
|
|
928
|
+
"data-testid": dataTestId,
|
|
929
|
+
"$docked": docked,
|
|
930
|
+
"data-docked": docked || undefined,
|
|
931
|
+
children: [jsx(VisuallyHiddenLabel, {
|
|
932
|
+
htmlFor: inputId,
|
|
933
|
+
children: label
|
|
934
|
+
}), jsxs(ControlsRow, {
|
|
935
|
+
children: [jsx(RegionPart, {
|
|
936
|
+
show: Boolean(review),
|
|
937
|
+
reducedExit: prefersReducedMotion,
|
|
938
|
+
children: shownReview && jsxs(ReviewBar, {
|
|
939
|
+
"data-testid": "agent-input-review",
|
|
940
|
+
children: [jsx(Typography, {
|
|
941
|
+
variant: "small",
|
|
942
|
+
color: "default",
|
|
943
|
+
children: shownReview.state === 'proposal' ? shownReview.summary : 'Changes applied'
|
|
944
|
+
}), jsx(ReviewActions, {
|
|
945
|
+
children: shownReview.state === 'proposal' ? jsxs(Fragment, {
|
|
946
|
+
children: [jsx(Button, {
|
|
947
|
+
variant: "primary",
|
|
948
|
+
size: "small",
|
|
949
|
+
onClick: shownReview.onAccept,
|
|
950
|
+
children: "Accept"
|
|
951
|
+
}), jsx(Button, {
|
|
952
|
+
variant: "secondary",
|
|
953
|
+
size: "small",
|
|
954
|
+
onClick: function onClick() {
|
|
955
|
+
return onReviewDiscard(shownReview.onDiscard);
|
|
956
|
+
},
|
|
957
|
+
children: "Discard"
|
|
958
|
+
})]
|
|
959
|
+
}) : jsx(Button, {
|
|
960
|
+
variant: "naked",
|
|
961
|
+
size: "small",
|
|
962
|
+
onClick: function onClick() {
|
|
963
|
+
return onReviewUndo(shownReview.onUndo);
|
|
964
|
+
},
|
|
965
|
+
children: "Undo"
|
|
966
|
+
})
|
|
967
|
+
})]
|
|
968
|
+
})
|
|
969
|
+
}), jsx(RegionPart, {
|
|
970
|
+
show: showSuggestions,
|
|
971
|
+
reducedExit: prefersReducedMotion,
|
|
972
|
+
children: jsx(SuggestionList, {
|
|
973
|
+
"aria-label": "Suggestions",
|
|
974
|
+
"data-testid": "agent-input-suggestions",
|
|
975
|
+
children: shownSuggestions.map(function (suggestion, index) {
|
|
976
|
+
return jsx("li", {
|
|
977
|
+
children: jsx(SuggestionChip, {
|
|
978
|
+
onClick: function onClick() {
|
|
979
|
+
return onPickSuggestion(suggestion);
|
|
980
|
+
},
|
|
981
|
+
children: suggestion
|
|
982
|
+
})
|
|
983
|
+
}, "".concat(index, "-").concat(suggestion));
|
|
984
|
+
})
|
|
985
|
+
})
|
|
986
|
+
}), jsx(VisuallyHidden, {
|
|
987
|
+
"aria-live": "polite",
|
|
988
|
+
"aria-atomic": "true",
|
|
989
|
+
"data-testid": "agent-input-review-announcement",
|
|
990
|
+
children: reviewAnnouncement
|
|
991
|
+
}), jsx(InputWrapper, {
|
|
992
|
+
children: jsxs(InputShell, {
|
|
993
|
+
"data-disabled": disabled,
|
|
994
|
+
children: [jsx(Input, {
|
|
995
|
+
ref: inputRef,
|
|
996
|
+
id: inputId,
|
|
997
|
+
rows: 1,
|
|
998
|
+
enterKeyHint: "send",
|
|
999
|
+
"aria-label": label,
|
|
1000
|
+
value: displayedValue,
|
|
1001
|
+
onChange: onTextChange,
|
|
1002
|
+
onKeyDown: onInputKeyDown,
|
|
1003
|
+
placeholder: placeholder,
|
|
1004
|
+
disabled: disabled,
|
|
1005
|
+
readOnly: isListening,
|
|
1006
|
+
"aria-describedby": showCounter ? "".concat(statusId, " ").concat(counterId) : statusId,
|
|
1007
|
+
"aria-invalid": isOverLimit || undefined
|
|
1008
|
+
}), jsxs(InputActions, {
|
|
1009
|
+
children: [hasVoice && jsxs(MicButtonWrapper, {
|
|
1010
|
+
"$isListening": isListening,
|
|
1011
|
+
"$reducedMotion": prefersReducedMotion,
|
|
1012
|
+
children: [isListening && jsx(MicListeningRing, {
|
|
1013
|
+
"$reducedMotion": prefersReducedMotion,
|
|
1014
|
+
"aria-hidden": "true",
|
|
1015
|
+
"data-testid": "agent-input-listening-ring",
|
|
1016
|
+
"data-animated": prefersReducedMotion ? 'false' : 'true'
|
|
1017
|
+
}), jsx(CircularActionIconButton, {
|
|
1018
|
+
variant: "naked",
|
|
1019
|
+
size: "medium",
|
|
1020
|
+
iconName: 'mic',
|
|
1021
|
+
onClick: onMicToggle,
|
|
1022
|
+
"aria-pressed": isListening,
|
|
1023
|
+
"aria-label": isListening ? 'Stop voice input' : 'Start voice input',
|
|
1024
|
+
disabled: disabled || effectiveSubmitting,
|
|
1025
|
+
type: "button"
|
|
1026
|
+
})]
|
|
1027
|
+
}), showStop ? jsx(CircularActionIconButton, {
|
|
1028
|
+
variant: "secondary",
|
|
1029
|
+
size: "medium",
|
|
1030
|
+
iconName: "stop",
|
|
1031
|
+
onClick: function onClick() {
|
|
1032
|
+
return onStop === null || onStop === void 0 ? void 0 : onStop();
|
|
1033
|
+
},
|
|
1034
|
+
disabled: disabled,
|
|
1035
|
+
"aria-label": "Stop",
|
|
1036
|
+
type: "button"
|
|
1037
|
+
}) : jsx(CircularActionIconButton, {
|
|
1038
|
+
variant: "secondary",
|
|
1039
|
+
size: "medium",
|
|
1040
|
+
iconName: "directionUp",
|
|
1041
|
+
onClick: function onClick() {
|
|
1042
|
+
return submitPayload(currentValue, 'text');
|
|
1043
|
+
},
|
|
1044
|
+
disabled: sendDisabled,
|
|
1045
|
+
"aria-label": "Send message",
|
|
1046
|
+
type: "button"
|
|
1047
|
+
})]
|
|
1048
|
+
})]
|
|
1049
|
+
})
|
|
1050
|
+
})]
|
|
1051
|
+
}), jsxs(StatusRow, {
|
|
1052
|
+
children: [jsx(StatusText, {
|
|
1053
|
+
"$isError": isStatusError,
|
|
1054
|
+
children: jsx(StatusAnnouncement, {
|
|
1055
|
+
id: statusId,
|
|
1056
|
+
role: "status",
|
|
1057
|
+
"aria-live": "polite",
|
|
1058
|
+
"aria-atomic": "true",
|
|
1059
|
+
children: resolvedStatus && jsx(Typography, {
|
|
1060
|
+
variant: "small",
|
|
1061
|
+
color: isStatusError ? 'error' : 'subdued',
|
|
1062
|
+
children: resolvedStatus
|
|
1063
|
+
})
|
|
1064
|
+
})
|
|
1065
|
+
}), jsxs(StatusEnd, {
|
|
1066
|
+
children: [isListening && !prefersReducedMotion && jsx(MeterContainer, {
|
|
1067
|
+
"aria-hidden": "true",
|
|
1068
|
+
children: meterBars.map(function (barHeight, index) {
|
|
1069
|
+
return jsx(MeterBar, {
|
|
1070
|
+
"$height": barHeight
|
|
1071
|
+
}, "meter-".concat(index));
|
|
1072
|
+
})
|
|
1073
|
+
}), showCounter && jsx(Typography, {
|
|
1074
|
+
variant: "small",
|
|
1075
|
+
color: isOverLimit ? 'error' : 'subdued',
|
|
1076
|
+
children: jsxs("span", {
|
|
1077
|
+
id: counterId,
|
|
1078
|
+
"data-testid": "agent-input-counter",
|
|
1079
|
+
children: [messageLength, "/", maxLength, jsx(VisuallyHidden, {
|
|
1080
|
+
children: " characters"
|
|
1081
|
+
})]
|
|
1082
|
+
})
|
|
1083
|
+
})]
|
|
1084
|
+
}), maxLength !== undefined && jsx(VisuallyHidden, {
|
|
1085
|
+
role: "status",
|
|
1086
|
+
"aria-live": "polite",
|
|
1087
|
+
"aria-atomic": "true",
|
|
1088
|
+
"data-testid": "agent-input-limit-announcement",
|
|
1089
|
+
children: limitAnnouncement
|
|
1090
|
+
})]
|
|
1091
|
+
})]
|
|
1092
|
+
});
|
|
1093
|
+
}
|
|
1094
|
+
var AgentInput = /*#__PURE__*/forwardRef(AgentInputWithRef);
|
|
1095
|
+
AgentInput.displayName = 'AgentInput';
|
|
1096
|
+
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, templateObject_19, templateObject_20, templateObject_21, templateObject_22, templateObject_23, templateObject_24, templateObject_25, templateObject_26, templateObject_27, templateObject_28, templateObject_29, templateObject_30, templateObject_31, templateObject_32, templateObject_33;
|
|
1097
|
+
|
|
1098
|
+
export { AgentInput };
|
|
1099
|
+
//# sourceMappingURL=AgentInput.mjs.map
|