@unif/react-native-chat 2.0.0 → 2.1.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/README.md +39 -30
- package/lib/module/components/Composer/Composer.js +131 -83
- package/lib/module/components/Composer/Composer.js.map +1 -1
- package/lib/module/components/Composer/ComposerIconAction.js +60 -0
- package/lib/module/components/Composer/ComposerIconAction.js.map +1 -0
- package/lib/module/components/Composer/ComposerMenuItem.js +57 -0
- package/lib/module/components/Composer/ComposerMenuItem.js.map +1 -0
- package/lib/module/components/Composer/constants.js +9 -1
- package/lib/module/components/Composer/constants.js.map +1 -1
- package/lib/module/components/Composer/styles.js +143 -13
- package/lib/module/components/Composer/styles.js.map +1 -1
- package/lib/module/components/Composer/useMousePress.js +28 -0
- package/lib/module/components/Composer/useMousePress.js.map +1 -0
- package/lib/module/components/Suggestions/Suggestions.js +6 -2
- package/lib/module/components/Suggestions/Suggestions.js.map +1 -1
- package/lib/module/components/Suggestions/constants.js +4 -0
- package/lib/module/components/Suggestions/constants.js.map +1 -0
- package/lib/typescript/src/components/Composer/Composer.d.ts.map +1 -1
- package/lib/typescript/src/components/Composer/ComposerIconAction.d.ts +3 -0
- package/lib/typescript/src/components/Composer/ComposerIconAction.d.ts.map +1 -0
- package/lib/typescript/src/components/Composer/ComposerMenuItem.d.ts +3 -0
- package/lib/typescript/src/components/Composer/ComposerMenuItem.d.ts.map +1 -0
- package/lib/typescript/src/components/Composer/constants.d.ts +8 -1
- package/lib/typescript/src/components/Composer/constants.d.ts.map +1 -1
- package/lib/typescript/src/components/Composer/styles.d.ts +150 -7
- package/lib/typescript/src/components/Composer/styles.d.ts.map +1 -1
- package/lib/typescript/src/components/Composer/types.d.ts +19 -1
- package/lib/typescript/src/components/Composer/types.d.ts.map +1 -1
- package/lib/typescript/src/components/Composer/useMousePress.d.ts +9 -0
- package/lib/typescript/src/components/Composer/useMousePress.d.ts.map +1 -0
- package/lib/typescript/src/components/Suggestions/Suggestions.d.ts.map +1 -1
- package/lib/typescript/src/components/Suggestions/constants.d.ts +2 -0
- package/lib/typescript/src/components/Suggestions/constants.d.ts.map +1 -0
- package/lib/typescript/src/components/Suggestions/types.d.ts +1 -0
- package/lib/typescript/src/components/Suggestions/types.d.ts.map +1 -1
- package/package.json +10 -10
- package/src/components/Composer/Composer.tsx +165 -95
- package/src/components/Composer/ComposerIconAction.tsx +71 -0
- package/src/components/Composer/ComposerMenuItem.tsx +56 -0
- package/src/components/Composer/constants.ts +10 -1
- package/src/components/Composer/styles.ts +123 -13
- package/src/components/Composer/types.ts +21 -1
- package/src/components/Composer/useMousePress.ts +32 -0
- package/src/components/Suggestions/Suggestions.tsx +12 -2
- package/src/components/Suggestions/constants.ts +1 -0
- package/src/components/Suggestions/types.ts +1 -0
package/README.md
CHANGED
|
@@ -1,48 +1,57 @@
|
|
|
1
1
|
# @unif/react-native-chat
|
|
2
2
|
|
|
3
|
-
基于 `@unif/react-native-design`
|
|
3
|
+
基于 `@unif/react-native-design` 的 TypeScript 聊天 UI 组件库,支持独立组件和完整聊天布局,可供其他 React Native 项目复用。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
[文档站](https://unif-design.github.io/react-native-chat/) · [组件源码](src/index.tsx) · [运行示例](example/README.md) · [常见问题](https://unif-design.github.io/react-native-chat/docs/faq) · [开发资料](docs/DEVELOPMENT.md)
|
|
6
6
|
|
|
7
|
-
##
|
|
8
|
-
|
|
9
|
-
仓库自带 Yarn 4.11.0;Node 基线见 .nvmrc,支持范围见 package.json。
|
|
10
|
-
|
|
11
|
-
```sh
|
|
12
|
-
yarn install --immutable --mode=skip-build
|
|
13
|
-
yarn typecheck
|
|
14
|
-
yarn example typecheck
|
|
15
|
-
yarn lint
|
|
16
|
-
yarn format:check
|
|
17
|
-
yarn test --runInBand --runTestsByPath example/src/__tests__/App.test.tsx
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
没有全局 Yarn 时,使用 `node .yarn/releases/yarn-4.11.0.cjs` 代替 yarn。示例服务使用 `yarn example start` 或 `yarn example web`。构建和全量测试遵循 AGENTS.md 的执行边界。
|
|
7
|
+
## 提供什么
|
|
21
8
|
|
|
22
|
-
|
|
9
|
+
| 用途 | 组件 |
|
|
10
|
+
| -------------- | ---------------------------------- |
|
|
11
|
+
| 聊天布局与消息 | Chat、MessageList、Message |
|
|
12
|
+
| 输入与附件 | Composer、Attachments、Suggestions |
|
|
13
|
+
| 交互与反馈 | Confirmation、Process、Feedback |
|
|
14
|
+
| 来源与引用 | Sources、Citation |
|
|
23
15
|
|
|
24
|
-
|
|
16
|
+
组件负责展示和事件;应用负责会话、草稿、文件上传、Agent 请求和业务处理。Markdown 使用 `react-native-marked`。
|
|
25
17
|
|
|
26
|
-
##
|
|
18
|
+
## 最小用法
|
|
27
19
|
|
|
28
|
-
|
|
20
|
+
在已配置 Design `ThemeProvider` 的应用中使用受控输入:
|
|
29
21
|
|
|
30
22
|
```tsx
|
|
23
|
+
import { useState } from 'react';
|
|
31
24
|
import { Composer } from '@unif/react-native-chat';
|
|
32
25
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
26
|
+
export function ChatInput({ onSend }: { onSend: (text: string) => void }) {
|
|
27
|
+
const [text, setText] = useState('');
|
|
28
|
+
|
|
29
|
+
return (
|
|
30
|
+
<Composer
|
|
31
|
+
value={text}
|
|
32
|
+
onChangeText={setText}
|
|
33
|
+
primaryAction={{ kind: 'send', onPress: onSend }}
|
|
34
|
+
/>
|
|
35
|
+
);
|
|
36
|
+
}
|
|
38
37
|
```
|
|
39
38
|
|
|
40
|
-
|
|
39
|
+
发送事件交付原始文字;发送后是否清空输入由应用决定。键盘避让由页面负责,MessageList 的父容器需要有界高度。
|
|
41
40
|
|
|
42
|
-
|
|
41
|
+
## 本地开始
|
|
42
|
+
|
|
43
|
+
从仓库根目录执行,Node 版本见 [.nvmrc](.nvmrc):
|
|
44
|
+
|
|
45
|
+
```sh
|
|
46
|
+
yarn install --immutable --mode=skip-build
|
|
47
|
+
yarn web
|
|
48
|
+
```
|
|
43
49
|
|
|
44
|
-
|
|
50
|
+
仓库自带 Yarn;没有全局命令时可用 `node .yarn/releases/yarn-4.11.0.cjs` 代替 `yarn`。原生示例及检查入口见 [example](example/README.md)。
|
|
45
51
|
|
|
46
|
-
|
|
52
|
+
## 文档
|
|
47
53
|
|
|
48
|
-
|
|
54
|
+
- [LLM 文档索引](https://unif-design.github.io/react-native-chat/llms.txt):按需查询组件与 FAQ。
|
|
55
|
+
- [公共导出](src/index.tsx)与[组件类型](src/components/):查询当前可用 API。
|
|
56
|
+
- [开发资料](docs/DEVELOPMENT.md):架构契约、依赖说明和验证入口。
|
|
57
|
+
- [研发技能](https://github.com/unif-skill/unif-portal-dev-skills) · [贡献指南](CONTRIBUTING.md) · [MIT 许可](LICENSE)
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import { forwardRef, useEffect, useImperativeHandle, useRef, useState } from 'react';
|
|
4
|
-
import { Text, View } from 'react-native';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
4
|
+
import { Pressable, Text, View, useWindowDimensions } from 'react-native';
|
|
5
|
+
import { fixed, Textarea, useTheme, useThemedStyles } from '@unif/react-native-design';
|
|
6
|
+
import { COMPOSER_INPUT_LINE_HEIGHT, COMPOSER_INPUT_MAX_LINES, COMPOSER_PLAIN_VERTICAL_INSET, PRIMARY_LABELS, VOICE_LABELS } from "./constants.js";
|
|
7
|
+
import { ComposerIconAction } from "./ComposerIconAction.js";
|
|
8
|
+
import { ComposerMenuItem } from "./ComposerMenuItem.js";
|
|
7
9
|
import { createStyles } from "./styles.js";
|
|
8
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
10
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
9
11
|
export const Composer = /*#__PURE__*/forwardRef(function ComposerInput({
|
|
10
12
|
value,
|
|
11
13
|
onChangeText,
|
|
@@ -30,13 +32,22 @@ export const Composer = /*#__PURE__*/forwardRef(function ComposerInput({
|
|
|
30
32
|
const {
|
|
31
33
|
fontScale
|
|
32
34
|
} = useTheme();
|
|
35
|
+
const {
|
|
36
|
+
height: windowHeight
|
|
37
|
+
} = useWindowDimensions();
|
|
33
38
|
const inputRef = useRef(null);
|
|
34
39
|
const lastHeight = useRef(undefined);
|
|
35
40
|
const [menuOpen, setMenuOpen] = useState(false);
|
|
41
|
+
const [focused, setFocused] = useState(false);
|
|
36
42
|
const voiceActive = voice !== undefined && voice.status !== 'idle';
|
|
43
|
+
const expanded = focused || value.length > 0;
|
|
37
44
|
const minHeight = Number.isFinite(minInputHeight) ? Math.max(fixed.hitTarget, minInputHeight) : fixed.hitTarget;
|
|
38
|
-
const defaultMaxHeight = Math.max(minHeight,
|
|
45
|
+
const defaultMaxHeight = Math.max(minHeight, COMPOSER_INPUT_LINE_HEIGHT * COMPOSER_INPUT_MAX_LINES * fontScale + COMPOSER_PLAIN_VERTICAL_INSET);
|
|
39
46
|
const maxHeight = Number.isFinite(maxInputHeight) ? Math.max(minHeight, maxInputHeight) : defaultMaxHeight;
|
|
47
|
+
const showPrimary = primaryAction.kind !== 'send' || primaryAction.allowEmpty || value.trim().length > 0;
|
|
48
|
+
const primaryDisabled = disabled || primaryAction.kind === 'busy' || primaryAction.disabled;
|
|
49
|
+
const showToolbar = expanded && actions.length > 0 || Boolean(voice) || showPrimary;
|
|
50
|
+
const primaryLabel = primaryAction.label?.trim() ? primaryAction.label : PRIMARY_LABELS[primaryAction.kind];
|
|
40
51
|
useImperativeHandle(ref, () => ({
|
|
41
52
|
focus: () => {
|
|
42
53
|
if (!disabled && !voiceActive) inputRef.current?.focus();
|
|
@@ -44,10 +55,19 @@ export const Composer = /*#__PURE__*/forwardRef(function ComposerInput({
|
|
|
44
55
|
blur: () => inputRef.current?.blur()
|
|
45
56
|
}), [disabled, voiceActive]);
|
|
46
57
|
useEffect(() => {
|
|
47
|
-
if (voiceActive)
|
|
58
|
+
if (voiceActive) {
|
|
59
|
+
inputRef.current?.blur();
|
|
60
|
+
setFocused(false);
|
|
61
|
+
}
|
|
48
62
|
if (voiceActive || disabled) setMenuOpen(false);
|
|
49
63
|
}, [voiceActive, disabled]);
|
|
50
|
-
const
|
|
64
|
+
const moreAction = actions.length > 0 ? /*#__PURE__*/_jsx(ComposerIconAction, {
|
|
65
|
+
icon: "plus",
|
|
66
|
+
label: "\u66F4\u591A\u64CD\u4F5C",
|
|
67
|
+
expanded: menuOpen,
|
|
68
|
+
disabled: disabled,
|
|
69
|
+
onPress: () => setMenuOpen(open => !open)
|
|
70
|
+
}) : null;
|
|
51
71
|
return /*#__PURE__*/_jsxs(View, {
|
|
52
72
|
testID: testID,
|
|
53
73
|
style: [styles.root, surface === 'card' && styles.card, style],
|
|
@@ -61,89 +81,117 @@ export const Composer = /*#__PURE__*/forwardRef(function ComposerInput({
|
|
|
61
81
|
onHeightChange?.(layout.height);
|
|
62
82
|
}
|
|
63
83
|
},
|
|
64
|
-
children: [header
|
|
65
|
-
style:
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
maxHeight: maxHeight,
|
|
77
|
-
submitBehavior: "newline",
|
|
78
|
-
onFocus: () => {
|
|
79
|
-
setMenuOpen(false);
|
|
80
|
-
onFocusChange?.(true);
|
|
81
|
-
},
|
|
82
|
-
onBlur: () => onFocusChange?.(false)
|
|
83
|
-
}), /*#__PURE__*/_jsxs(View, {
|
|
84
|
-
style: styles.toolbar,
|
|
85
|
-
children: [actions.length > 0 ? /*#__PURE__*/_jsx(IconButton, {
|
|
86
|
-
icon: "more-h",
|
|
87
|
-
size: "lg",
|
|
88
|
-
accessibilityLabel: "\u66F4\u591A\u64CD\u4F5C",
|
|
89
|
-
accessibilityState: {
|
|
90
|
-
expanded: menuOpen
|
|
91
|
-
},
|
|
92
|
-
disabled: disabled,
|
|
93
|
-
onPress: () => setMenuOpen(open => !open)
|
|
94
|
-
}) : null, voice ? /*#__PURE__*/_jsx(IconButton, {
|
|
95
|
-
icon: "mic",
|
|
96
|
-
size: "lg",
|
|
97
|
-
accessibilityLabel: "\u5F00\u59CB\u8BED\u97F3\u8F93\u5165",
|
|
98
|
-
disabled: disabled || voice.disabled,
|
|
99
|
-
onPress: voice.onStart
|
|
100
|
-
}) : null, /*#__PURE__*/_jsx(Button, {
|
|
101
|
-
label: primaryAction.label ?? PRIMARY_LABELS[primaryAction.kind],
|
|
102
|
-
size: "lg",
|
|
103
|
-
style: styles.primary,
|
|
104
|
-
disabled: primaryDisabled,
|
|
105
|
-
loading: primaryAction.kind === 'busy',
|
|
106
|
-
onPress: () => {
|
|
107
|
-
if (primaryDisabled) return;
|
|
108
|
-
if (primaryAction.kind === 'send') primaryAction.onPress(value);else if (primaryAction.kind === 'stop') primaryAction.onPress();
|
|
109
|
-
}
|
|
110
|
-
})]
|
|
111
|
-
}), menuOpen && actions.length > 0 ? /*#__PURE__*/_jsx(View, {
|
|
84
|
+
children: [header != null ? /*#__PURE__*/_jsx(View, {
|
|
85
|
+
style: styles.accessory,
|
|
86
|
+
children: header
|
|
87
|
+
}) : null, menuOpen && !disabled && !voiceActive && actions.length > 0 ? /*#__PURE__*/_jsxs(_Fragment, {
|
|
88
|
+
children: [/*#__PURE__*/_jsx(Pressable, {
|
|
89
|
+
style: [styles.backdrop, {
|
|
90
|
+
height: windowHeight
|
|
91
|
+
}],
|
|
92
|
+
accessibilityRole: "button",
|
|
93
|
+
accessibilityLabel: "\u6536\u8D77\u66F4\u591A\u64CD\u4F5C",
|
|
94
|
+
onPress: () => setMenuOpen(false)
|
|
95
|
+
}), /*#__PURE__*/_jsx(View, {
|
|
112
96
|
style: styles.menu,
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
97
|
+
testID: "composer-menu",
|
|
98
|
+
children: /*#__PURE__*/_jsx(View, {
|
|
99
|
+
style: styles.menuClip,
|
|
100
|
+
testID: "composer-menu-content",
|
|
101
|
+
children: actions.map(action => /*#__PURE__*/_jsx(ComposerMenuItem, {
|
|
102
|
+
action: action,
|
|
103
|
+
disabled: disabled,
|
|
104
|
+
onPress: () => {
|
|
105
|
+
if (disabled || action.disabled || action.loading) return;
|
|
106
|
+
setMenuOpen(false);
|
|
107
|
+
action.onPress();
|
|
108
|
+
}
|
|
109
|
+
}, action.id))
|
|
110
|
+
})
|
|
111
|
+
})]
|
|
112
|
+
}) : null, /*#__PURE__*/_jsxs(View, {
|
|
113
|
+
testID: "composer-regular",
|
|
114
|
+
style: [styles.regular, expanded && styles.expanded, voiceActive && styles.hidden],
|
|
115
|
+
importantForAccessibility: voiceActive ? 'no-hide-descendants' : 'auto',
|
|
116
|
+
children: [moreAction ? /*#__PURE__*/_jsx(View, {
|
|
117
|
+
style: [styles.more, expanded && styles.moreExpanded],
|
|
118
|
+
children: moreAction
|
|
119
|
+
}, "more") : null, /*#__PURE__*/_jsx(View, {
|
|
120
|
+
style: [styles.input, expanded && styles.inputExpanded],
|
|
121
|
+
children: /*#__PURE__*/_jsx(Textarea, {
|
|
122
|
+
ref: inputRef,
|
|
123
|
+
surface: "plain",
|
|
124
|
+
value: value,
|
|
125
|
+
onChangeText: onChangeText,
|
|
126
|
+
editable: editable,
|
|
127
|
+
disabled: disabled || voiceActive,
|
|
128
|
+
placeholder: placeholder,
|
|
129
|
+
accessibilityLabel: inputAccessibilityLabel,
|
|
130
|
+
minHeight: minHeight,
|
|
131
|
+
maxHeight: maxHeight,
|
|
132
|
+
submitBehavior: "newline",
|
|
133
|
+
onPressIn: () => setMenuOpen(false),
|
|
134
|
+
onFocus: () => {
|
|
122
135
|
setMenuOpen(false);
|
|
123
|
-
|
|
136
|
+
setFocused(true);
|
|
137
|
+
onFocusChange?.(true);
|
|
138
|
+
},
|
|
139
|
+
onBlur: () => {
|
|
140
|
+
setFocused(false);
|
|
141
|
+
onFocusChange?.(false);
|
|
124
142
|
}
|
|
125
|
-
}
|
|
126
|
-
})
|
|
143
|
+
})
|
|
144
|
+
}, "input"), showToolbar ? /*#__PURE__*/_jsx(View, {
|
|
145
|
+
style: [styles.toolbar, expanded && styles.toolbarExpanded, expanded && moreAction != null && styles.toolbarWithMore],
|
|
146
|
+
children: /*#__PURE__*/_jsxs(View, {
|
|
147
|
+
style: styles.trailingActions,
|
|
148
|
+
children: [voice ? /*#__PURE__*/_jsx(ComposerIconAction, {
|
|
149
|
+
icon: "mic",
|
|
150
|
+
label: "\u5F00\u59CB\u8BED\u97F3\u8F93\u5165",
|
|
151
|
+
disabled: disabled || voice.disabled,
|
|
152
|
+
onPress: () => {
|
|
153
|
+
setMenuOpen(false);
|
|
154
|
+
voice.onStart();
|
|
155
|
+
}
|
|
156
|
+
}) : null, showPrimary ? /*#__PURE__*/_jsx(ComposerIconAction, {
|
|
157
|
+
icon: primaryAction.kind === 'send' ? 'send' : 'stop',
|
|
158
|
+
label: primaryLabel,
|
|
159
|
+
visual: "primary",
|
|
160
|
+
disabled: primaryDisabled,
|
|
161
|
+
busy: primaryAction.kind === 'busy',
|
|
162
|
+
onPress: () => {
|
|
163
|
+
if (primaryDisabled) return;
|
|
164
|
+
setMenuOpen(false);
|
|
165
|
+
if (primaryAction.kind === 'send') primaryAction.onPress(value);else if (primaryAction.kind === 'stop') primaryAction.onPress();
|
|
166
|
+
}
|
|
167
|
+
}) : null]
|
|
168
|
+
})
|
|
169
|
+
}, "toolbar") : null]
|
|
127
170
|
}), voice && voice.status !== 'idle' ? /*#__PURE__*/_jsxs(View, {
|
|
128
171
|
style: styles.voice,
|
|
129
|
-
children: [/*#__PURE__*/_jsx(
|
|
130
|
-
|
|
172
|
+
children: [/*#__PURE__*/_jsx(ComposerIconAction, {
|
|
173
|
+
icon: "close",
|
|
174
|
+
visual: "cancel",
|
|
175
|
+
label: "\u53D6\u6D88\u8BED\u97F3\u8F93\u5165",
|
|
176
|
+
disabled: disabled || voice.disabled,
|
|
177
|
+
onPress: voice.onCancel
|
|
178
|
+
}), /*#__PURE__*/_jsx(Text, {
|
|
179
|
+
numberOfLines: 1,
|
|
180
|
+
ellipsizeMode: "head",
|
|
181
|
+
style: [styles.transcript, !voice.transcript && styles.transcriptPlaceholder],
|
|
131
182
|
accessibilityLiveRegion: "polite",
|
|
132
183
|
children: voice.status === 'starting' ? VOICE_LABELS.starting : voice.transcript || VOICE_LABELS[voice.status]
|
|
133
|
-
}), /*#__PURE__*/
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
})]
|
|
145
|
-
})]
|
|
146
|
-
}) : null, footer]
|
|
184
|
+
}), voice.status === 'listening' ? /*#__PURE__*/_jsx(ComposerIconAction, {
|
|
185
|
+
icon: "stop",
|
|
186
|
+
visual: "primary",
|
|
187
|
+
label: "\u505C\u6B62\u8BED\u97F3\u8F93\u5165",
|
|
188
|
+
disabled: disabled || voice.disabled,
|
|
189
|
+
onPress: voice.onStop
|
|
190
|
+
}) : null]
|
|
191
|
+
}) : null, footer != null ? /*#__PURE__*/_jsx(View, {
|
|
192
|
+
style: styles.accessory,
|
|
193
|
+
children: footer
|
|
194
|
+
}) : null]
|
|
147
195
|
});
|
|
148
196
|
});
|
|
149
197
|
//# sourceMappingURL=Composer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["forwardRef","useEffect","useImperativeHandle","useRef","useState","Text","View","
|
|
1
|
+
{"version":3,"names":["forwardRef","useEffect","useImperativeHandle","useRef","useState","Pressable","Text","View","useWindowDimensions","fixed","Textarea","useTheme","useThemedStyles","COMPOSER_INPUT_LINE_HEIGHT","COMPOSER_INPUT_MAX_LINES","COMPOSER_PLAIN_VERTICAL_INSET","PRIMARY_LABELS","VOICE_LABELS","ComposerIconAction","ComposerMenuItem","createStyles","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","Composer","ComposerInput","value","onChangeText","primaryAction","editable","disabled","placeholder","inputAccessibilityLabel","actions","voice","header","footer","surface","minInputHeight","maxInputHeight","onFocusChange","onHeightChange","style","testID","ref","styles","fontScale","height","windowHeight","inputRef","lastHeight","undefined","menuOpen","setMenuOpen","focused","setFocused","voiceActive","status","expanded","length","minHeight","Number","isFinite","Math","max","hitTarget","defaultMaxHeight","maxHeight","showPrimary","kind","allowEmpty","trim","primaryDisabled","showToolbar","Boolean","primaryLabel","label","focus","current","blur","moreAction","icon","onPress","open","root","card","onLayout","nativeEvent","layout","children","accessory","backdrop","accessibilityRole","accessibilityLabel","menu","menuClip","map","action","loading","id","regular","hidden","importantForAccessibility","more","moreExpanded","input","inputExpanded","submitBehavior","onPressIn","onFocus","onBlur","toolbar","toolbarExpanded","toolbarWithMore","trailingActions","onStart","visual","busy","onCancel","numberOfLines","ellipsizeMode","transcript","transcriptPlaceholder","accessibilityLiveRegion","starting","onStop"],"sourceRoot":"../../../../src","sources":["components/Composer/Composer.tsx"],"mappings":";;AAAA,SACEA,UAAU,EACVC,SAAS,EACTC,mBAAmB,EACnBC,MAAM,EACNC,QAAQ,QACH,OAAO;AACd,SAASC,SAAS,EAAEC,IAAI,EAAEC,IAAI,EAAEC,mBAAmB,QAAQ,cAAc;AACzE,SACEC,KAAK,EACLC,QAAQ,EACRC,QAAQ,EACRC,eAAe,QACV,2BAA2B;AAElC,SACEC,0BAA0B,EAC1BC,wBAAwB,EACxBC,6BAA6B,EAC7BC,cAAc,EACdC,YAAY,QACP,gBAAa;AACpB,SAASC,kBAAkB,QAAQ,yBAAsB;AACzD,SAASC,gBAAgB,QAAQ,uBAAoB;AACrD,SAASC,YAAY,QAAQ,aAAU;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,QAAA,IAAAC,SAAA,EAAAC,IAAA,IAAAC,KAAA;AAGxC,OAAO,MAAMC,QAAQ,gBAAG3B,UAAU,CAChC,SAAS4B,aAAaA,CACpB;EACEC,KAAK;EACLC,YAAY;EACZC,aAAa;EACbC,QAAQ,GAAG,IAAI;EACfC,QAAQ,GAAG,KAAK;EAChBC,WAAW,GAAG,OAAO;EACrBC,uBAAuB,GAAG,OAAO;EACjCC,OAAO,GAAG,EAAE;EACZC,KAAK;EACLC,MAAM;EACNC,MAAM;EACNC,OAAO,GAAG,MAAM;EAChBC,cAAc;EACdC,cAAc;EACdC,aAAa;EACbC,cAAc;EACdC,KAAK;EACLC;AACF,CAAC,EACDC,GAAG,EACH;EACA,MAAMC,MAAM,GAAGpC,eAAe,CAACQ,YAAY,CAAC;EAC5C,MAAM;IAAE6B;EAAU,CAAC,GAAGtC,QAAQ,CAAC,CAAC;EAChC,MAAM;IAAEuC,MAAM,EAAEC;EAAa,CAAC,GAAG3C,mBAAmB,CAAC,CAAC;EACtD,MAAM4C,QAAQ,GAAGjD,MAAM,CAAkB,IAAI,CAAC;EAC9C,MAAMkD,UAAU,GAAGlD,MAAM,CAAqBmD,SAAS,CAAC;EACxD,MAAM,CAACC,QAAQ,EAAEC,WAAW,CAAC,GAAGpD,QAAQ,CAAC,KAAK,CAAC;EAC/C,MAAM,CAACqD,OAAO,EAAEC,UAAU,CAAC,GAAGtD,QAAQ,CAAC,KAAK,CAAC;EAC7C,MAAMuD,WAAW,GAAGtB,KAAK,KAAKiB,SAAS,IAAIjB,KAAK,CAACuB,MAAM,KAAK,MAAM;EAClE,MAAMC,QAAQ,GAAGJ,OAAO,IAAI5B,KAAK,CAACiC,MAAM,GAAG,CAAC;EAC5C,MAAMC,SAAS,GAAGC,MAAM,CAACC,QAAQ,CAACxB,cAAc,CAAC,GAC7CyB,IAAI,CAACC,GAAG,CAAC1D,KAAK,CAAC2D,SAAS,EAAE3B,cAAe,CAAC,GAC1ChC,KAAK,CAAC2D,SAAS;EACnB,MAAMC,gBAAgB,GAAGH,IAAI,CAACC,GAAG,CAC/BJ,SAAS,EACTlD,0BAA0B,GAAGC,wBAAwB,GAAGmC,SAAS,GAC/DlC,6BACJ,CAAC;EACD,MAAMuD,SAAS,GAAGN,MAAM,CAACC,QAAQ,CAACvB,cAAc,CAAC,GAC7CwB,IAAI,CAACC,GAAG,CAACJ,SAAS,EAAErB,cAAe,CAAC,GACpC2B,gBAAgB;EACpB,MAAME,WAAW,GACfxC,aAAa,CAACyC,IAAI,KAAK,MAAM,IAC7BzC,aAAa,CAAC0C,UAAU,IACxB5C,KAAK,CAAC6C,IAAI,CAAC,CAAC,CAACZ,MAAM,GAAG,CAAC;EACzB,MAAMa,eAAe,GACnB1C,QAAQ,IAAIF,aAAa,CAACyC,IAAI,KAAK,MAAM,IAAIzC,aAAa,CAACE,QAAQ;EACrE,MAAM2C,WAAW,GACdf,QAAQ,IAAIzB,OAAO,CAAC0B,MAAM,GAAG,CAAC,IAAKe,OAAO,CAACxC,KAAK,CAAC,IAAIkC,WAAW;EACnE,MAAMO,YAAY,GAAG/C,aAAa,CAACgD,KAAK,EAAEL,IAAI,CAAC,CAAC,GAC5C3C,aAAa,CAACgD,KAAK,GACnB/D,cAAc,CAACe,aAAa,CAACyC,IAAI,CAAC;EAEtCtE,mBAAmB,CACjB6C,GAAG,EACH,OAAO;IACLiC,KAAK,EAAEA,CAAA,KAAM;MACX,IAAI,CAAC/C,QAAQ,IAAI,CAAC0B,WAAW,EAAEP,QAAQ,CAAC6B,OAAO,EAAED,KAAK,CAAC,CAAC;IAC1D,CAAC;IACDE,IAAI,EAAEA,CAAA,KAAM9B,QAAQ,CAAC6B,OAAO,EAAEC,IAAI,CAAC;EACrC,CAAC,CAAC,EACF,CAACjD,QAAQ,EAAE0B,WAAW,CACxB,CAAC;EAED1D,SAAS,CAAC,MAAM;IACd,IAAI0D,WAAW,EAAE;MACfP,QAAQ,CAAC6B,OAAO,EAAEC,IAAI,CAAC,CAAC;MACxBxB,UAAU,CAAC,KAAK,CAAC;IACnB;IACA,IAAIC,WAAW,IAAI1B,QAAQ,EAAEuB,WAAW,CAAC,KAAK,CAAC;EACjD,CAAC,EAAE,CAACG,WAAW,EAAE1B,QAAQ,CAAC,CAAC;EAE3B,MAAMkD,UAAU,GACd/C,OAAO,CAAC0B,MAAM,GAAG,CAAC,gBAChBxC,IAAA,CAACJ,kBAAkB;IACjBkE,IAAI,EAAC,MAAM;IACXL,KAAK,EAAC,0BAAM;IACZlB,QAAQ,EAAEN,QAAS;IACnBtB,QAAQ,EAAEA,QAAS;IACnBoD,OAAO,EAAEA,CAAA,KAAM7B,WAAW,CAAE8B,IAAI,IAAK,CAACA,IAAI;EAAE,CAC7C,CAAC,GACA,IAAI;EAEV,oBACE5D,KAAA,CAACnB,IAAI;IACHuC,MAAM,EAAEA,MAAO;IACfD,KAAK,EAAE,CAACG,MAAM,CAACuC,IAAI,EAAE/C,OAAO,KAAK,MAAM,IAAIQ,MAAM,CAACwC,IAAI,EAAE3C,KAAK,CAAE;IAC/D4C,QAAQ,EAAEA,CAAC;MAAEC,WAAW,EAAE;QAAEC;MAAO;IAAE,CAAC,KAAK;MACzC,IAAIA,MAAM,CAACzC,MAAM,KAAKG,UAAU,CAAC4B,OAAO,EAAE;QACxC5B,UAAU,CAAC4B,OAAO,GAAGU,MAAM,CAACzC,MAAM;QAClCN,cAAc,GAAG+C,MAAM,CAACzC,MAAM,CAAC;MACjC;IACF,CAAE;IAAA0C,QAAA,GAEDtD,MAAM,IAAI,IAAI,gBAAGhB,IAAA,CAACf,IAAI;MAACsC,KAAK,EAAEG,MAAM,CAAC6C,SAAU;MAAAD,QAAA,EAAEtD;IAAM,CAAO,CAAC,GAAG,IAAI,EACtEiB,QAAQ,IAAI,CAACtB,QAAQ,IAAI,CAAC0B,WAAW,IAAIvB,OAAO,CAAC0B,MAAM,GAAG,CAAC,gBAC1DpC,KAAA,CAAAF,SAAA;MAAAoE,QAAA,gBACEtE,IAAA,CAACjB,SAAS;QACRwC,KAAK,EAAE,CAACG,MAAM,CAAC8C,QAAQ,EAAE;UAAE5C,MAAM,EAAEC;QAAa,CAAC,CAAE;QACnD4C,iBAAiB,EAAC,QAAQ;QAC1BC,kBAAkB,EAAC,sCAAQ;QAC3BX,OAAO,EAAEA,CAAA,KAAM7B,WAAW,CAAC,KAAK;MAAE,CACnC,CAAC,eACFlC,IAAA,CAACf,IAAI;QAACsC,KAAK,EAAEG,MAAM,CAACiD,IAAK;QAACnD,MAAM,EAAC,eAAe;QAAA8C,QAAA,eAC9CtE,IAAA,CAACf,IAAI;UAACsC,KAAK,EAAEG,MAAM,CAACkD,QAAS;UAACpD,MAAM,EAAC,uBAAuB;UAAA8C,QAAA,EACzDxD,OAAO,CAAC+D,GAAG,CAAEC,MAAM,iBAClB9E,IAAA,CAACH,gBAAgB;YAEfiF,MAAM,EAAEA,MAAO;YACfnE,QAAQ,EAAEA,QAAS;YACnBoD,OAAO,EAAEA,CAAA,KAAM;cACb,IAAIpD,QAAQ,IAAImE,MAAM,CAACnE,QAAQ,IAAImE,MAAM,CAACC,OAAO,EAAE;cACnD7C,WAAW,CAAC,KAAK,CAAC;cAClB4C,MAAM,CAACf,OAAO,CAAC,CAAC;YAClB;UAAE,GAPGe,MAAM,CAACE,EAQb,CACF;QAAC,CACE;MAAC,CACH,CAAC;IAAA,CACP,CAAC,GACD,IAAI,eACR5E,KAAA,CAACnB,IAAI;MACHuC,MAAM,EAAC,kBAAkB;MACzBD,KAAK,EAAE,CACLG,MAAM,CAACuD,OAAO,EACd1C,QAAQ,IAAIb,MAAM,CAACa,QAAQ,EAC3BF,WAAW,IAAIX,MAAM,CAACwD,MAAM,CAC5B;MACFC,yBAAyB,EACvB9C,WAAW,GAAG,qBAAqB,GAAG,MACvC;MAAAiC,QAAA,GAEAT,UAAU,gBACT7D,IAAA,CAACf,IAAI;QAEHsC,KAAK,EAAE,CAACG,MAAM,CAAC0D,IAAI,EAAE7C,QAAQ,IAAIb,MAAM,CAAC2D,YAAY,CAAE;QAAAf,QAAA,EAErDT;MAAU,GAHP,MAIA,CAAC,GACL,IAAI,eACR7D,IAAA,CAACf,IAAI;QAEHsC,KAAK,EAAE,CAACG,MAAM,CAAC4D,KAAK,EAAE/C,QAAQ,IAAIb,MAAM,CAAC6D,aAAa,CAAE;QAAAjB,QAAA,eAExDtE,IAAA,CAACZ,QAAQ;UACPqC,GAAG,EAAEK,QAAS;UACdZ,OAAO,EAAC,OAAO;UACfX,KAAK,EAAEA,KAAM;UACbC,YAAY,EAAEA,YAAa;UAC3BE,QAAQ,EAAEA,QAAS;UACnBC,QAAQ,EAAEA,QAAQ,IAAI0B,WAAY;UAClCzB,WAAW,EAAEA,WAAY;UACzB8D,kBAAkB,EAAE7D,uBAAwB;UAC5C4B,SAAS,EAAEA,SAAU;UACrBO,SAAS,EAAEA,SAAU;UACrBwC,cAAc,EAAC,SAAS;UACxBC,SAAS,EAAEA,CAAA,KAAMvD,WAAW,CAAC,KAAK,CAAE;UACpCwD,OAAO,EAAEA,CAAA,KAAM;YACbxD,WAAW,CAAC,KAAK,CAAC;YAClBE,UAAU,CAAC,IAAI,CAAC;YAChBf,aAAa,GAAG,IAAI,CAAC;UACvB,CAAE;UACFsE,MAAM,EAAEA,CAAA,KAAM;YACZvD,UAAU,CAAC,KAAK,CAAC;YACjBf,aAAa,GAAG,KAAK,CAAC;UACxB;QAAE,CACH;MAAC,GAzBE,OA0BA,CAAC,EACNiC,WAAW,gBACVtD,IAAA,CAACf,IAAI;QAEHsC,KAAK,EAAE,CACLG,MAAM,CAACkE,OAAO,EACdrD,QAAQ,IAAIb,MAAM,CAACmE,eAAe,EAClCtD,QAAQ,IAAIsB,UAAU,IAAI,IAAI,IAAInC,MAAM,CAACoE,eAAe,CACxD;QAAAxB,QAAA,eAEFlE,KAAA,CAACnB,IAAI;UAACsC,KAAK,EAAEG,MAAM,CAACqE,eAAgB;UAAAzB,QAAA,GACjCvD,KAAK,gBACJf,IAAA,CAACJ,kBAAkB;YACjBkE,IAAI,EAAC,KAAK;YACVL,KAAK,EAAC,sCAAQ;YACd9C,QAAQ,EAAEA,QAAQ,IAAII,KAAK,CAACJ,QAAS;YACrCoD,OAAO,EAAEA,CAAA,KAAM;cACb7B,WAAW,CAAC,KAAK,CAAC;cAClBnB,KAAK,CAACiF,OAAO,CAAC,CAAC;YACjB;UAAE,CACH,CAAC,GACA,IAAI,EACP/C,WAAW,gBACVjD,IAAA,CAACJ,kBAAkB;YACjBkE,IAAI,EAAErD,aAAa,CAACyC,IAAI,KAAK,MAAM,GAAG,MAAM,GAAG,MAAO;YACtDO,KAAK,EAAED,YAAa;YACpByC,MAAM,EAAC,SAAS;YAChBtF,QAAQ,EAAE0C,eAAgB;YAC1B6C,IAAI,EAAEzF,aAAa,CAACyC,IAAI,KAAK,MAAO;YACpCa,OAAO,EAAEA,CAAA,KAAM;cACb,IAAIV,eAAe,EAAE;cACrBnB,WAAW,CAAC,KAAK,CAAC;cAClB,IAAIzB,aAAa,CAACyC,IAAI,KAAK,MAAM,EAC/BzC,aAAa,CAACsD,OAAO,CAACxD,KAAK,CAAC,CAAC,KAC1B,IAAIE,aAAa,CAACyC,IAAI,KAAK,MAAM,EACpCzC,aAAa,CAACsD,OAAO,CAAC,CAAC;YAC3B;UAAE,CACH,CAAC,GACA,IAAI;QAAA,CACJ;MAAC,GApCH,SAqCA,CAAC,GACL,IAAI;IAAA,CACJ,CAAC,EACNhD,KAAK,IAAIA,KAAK,CAACuB,MAAM,KAAK,MAAM,gBAC/BlC,KAAA,CAACnB,IAAI;MAACsC,KAAK,EAAEG,MAAM,CAACX,KAAM;MAAAuD,QAAA,gBACxBtE,IAAA,CAACJ,kBAAkB;QACjBkE,IAAI,EAAC,OAAO;QACZmC,MAAM,EAAC,QAAQ;QACfxC,KAAK,EAAC,sCAAQ;QACd9C,QAAQ,EAAEA,QAAQ,IAAII,KAAK,CAACJ,QAAS;QACrCoD,OAAO,EAAEhD,KAAK,CAACoF;MAAS,CACzB,CAAC,eACFnG,IAAA,CAAChB,IAAI;QACHoH,aAAa,EAAE,CAAE;QACjBC,aAAa,EAAC,MAAM;QACpB9E,KAAK,EAAE,CACLG,MAAM,CAAC4E,UAAU,EACjB,CAACvF,KAAK,CAACuF,UAAU,IAAI5E,MAAM,CAAC6E,qBAAqB,CACjD;QACFC,uBAAuB,EAAC,QAAQ;QAAAlC,QAAA,EAE/BvD,KAAK,CAACuB,MAAM,KAAK,UAAU,GACxB3C,YAAY,CAAC8G,QAAQ,GACrB1F,KAAK,CAACuF,UAAU,IAAI3G,YAAY,CAACoB,KAAK,CAACuB,MAAM;MAAC,CAC9C,CAAC,EACNvB,KAAK,CAACuB,MAAM,KAAK,WAAW,gBAC3BtC,IAAA,CAACJ,kBAAkB;QACjBkE,IAAI,EAAC,MAAM;QACXmC,MAAM,EAAC,SAAS;QAChBxC,KAAK,EAAC,sCAAQ;QACd9C,QAAQ,EAAEA,QAAQ,IAAII,KAAK,CAACJ,QAAS;QACrCoD,OAAO,EAAEhD,KAAK,CAAC2F;MAAO,CACvB,CAAC,GACA,IAAI;IAAA,CACJ,CAAC,GACL,IAAI,EACPzF,MAAM,IAAI,IAAI,gBAAGjB,IAAA,CAACf,IAAI;MAACsC,KAAK,EAAEG,MAAM,CAAC6C,SAAU;MAAAD,QAAA,EAAErD;IAAM,CAAO,CAAC,GAAG,IAAI;EAAA,CACnE,CAAC;AAEX,CACF,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { ActivityIndicator, Pressable, View } from 'react-native';
|
|
4
|
+
import { Icon, useColors, useThemedStyles } from '@unif/react-native-design';
|
|
5
|
+
import { COMPOSER_ACTION_ICON_SIZE, COMPOSER_PRIMARY_ICON_SIZE } from "./constants.js";
|
|
6
|
+
import { createStyles } from "./styles.js";
|
|
7
|
+
import { useMousePress } from "./useMousePress.js";
|
|
8
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
9
|
+
export function ComposerIconAction({
|
|
10
|
+
icon,
|
|
11
|
+
label,
|
|
12
|
+
onPress,
|
|
13
|
+
disabled = false,
|
|
14
|
+
busy = false,
|
|
15
|
+
expanded,
|
|
16
|
+
visual = 'icon'
|
|
17
|
+
}) {
|
|
18
|
+
const colors = useColors();
|
|
19
|
+
const styles = useThemedStyles(createStyles);
|
|
20
|
+
const unavailable = disabled || busy;
|
|
21
|
+
const {
|
|
22
|
+
mousePressed,
|
|
23
|
+
...mouseHandlers
|
|
24
|
+
} = useMousePress(unavailable);
|
|
25
|
+
const primary = visual === 'primary';
|
|
26
|
+
const color = primary ? disabled ? colors.foregroundSubtle : colors.onPrimary : colors.foregroundMuted;
|
|
27
|
+
return /*#__PURE__*/_jsx(Pressable, {
|
|
28
|
+
accessibilityRole: "button",
|
|
29
|
+
accessibilityLabel: label,
|
|
30
|
+
accessibilityState: {
|
|
31
|
+
disabled: unavailable,
|
|
32
|
+
busy,
|
|
33
|
+
expanded
|
|
34
|
+
},
|
|
35
|
+
disabled: unavailable,
|
|
36
|
+
onPress: unavailable ? undefined : onPress,
|
|
37
|
+
...mouseHandlers,
|
|
38
|
+
style: styles.action,
|
|
39
|
+
children: ({
|
|
40
|
+
pressed
|
|
41
|
+
}) => /*#__PURE__*/_jsx(View, {
|
|
42
|
+
pointerEvents: "none",
|
|
43
|
+
style: [styles.actionVisual, primary && styles.primary, visual === 'cancel' && styles.cancel, (pressed || mousePressed) && (primary ? styles.primaryPressed : styles.actionPressed), disabled && (primary ? styles.primaryDisabled : styles.actionDisabled)],
|
|
44
|
+
children: busy ? /*#__PURE__*/_jsx(ActivityIndicator, {
|
|
45
|
+
size: "small",
|
|
46
|
+
color: color
|
|
47
|
+
}) : /*#__PURE__*/_jsx(Icon, {
|
|
48
|
+
name: icon,
|
|
49
|
+
size: primary ? COMPOSER_PRIMARY_ICON_SIZE : COMPOSER_ACTION_ICON_SIZE,
|
|
50
|
+
color: color,
|
|
51
|
+
style: expanded ? {
|
|
52
|
+
transform: [{
|
|
53
|
+
rotate: '45deg'
|
|
54
|
+
}]
|
|
55
|
+
} : undefined
|
|
56
|
+
})
|
|
57
|
+
})
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=ComposerIconAction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["ActivityIndicator","Pressable","View","Icon","useColors","useThemedStyles","COMPOSER_ACTION_ICON_SIZE","COMPOSER_PRIMARY_ICON_SIZE","createStyles","useMousePress","jsx","_jsx","ComposerIconAction","icon","label","onPress","disabled","busy","expanded","visual","colors","styles","unavailable","mousePressed","mouseHandlers","primary","color","foregroundSubtle","onPrimary","foregroundMuted","accessibilityRole","accessibilityLabel","accessibilityState","undefined","style","action","children","pressed","pointerEvents","actionVisual","cancel","primaryPressed","actionPressed","primaryDisabled","actionDisabled","size","name","transform","rotate"],"sourceRoot":"../../../../src","sources":["components/Composer/ComposerIconAction.tsx"],"mappings":";;AAAA,SAASA,iBAAiB,EAAEC,SAAS,EAAEC,IAAI,QAAQ,cAAc;AACjE,SAASC,IAAI,EAAEC,SAAS,EAAEC,eAAe,QAAQ,2BAA2B;AAC5E,SACEC,yBAAyB,EACzBC,0BAA0B,QACrB,gBAAa;AACpB,SAASC,YAAY,QAAQ,aAAU;AACvC,SAASC,aAAa,QAAQ,oBAAiB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAGhD,OAAO,SAASC,kBAAkBA,CAAC;EACjCC,IAAI;EACJC,KAAK;EACLC,OAAO;EACPC,QAAQ,GAAG,KAAK;EAChBC,IAAI,GAAG,KAAK;EACZC,QAAQ;EACRC,MAAM,GAAG;AACc,CAAC,EAAE;EAC1B,MAAMC,MAAM,GAAGhB,SAAS,CAAC,CAAC;EAC1B,MAAMiB,MAAM,GAAGhB,eAAe,CAACG,YAAY,CAAC;EAC5C,MAAMc,WAAW,GAAGN,QAAQ,IAAIC,IAAI;EACpC,MAAM;IAAEM,YAAY;IAAE,GAAGC;EAAc,CAAC,GAAGf,aAAa,CAACa,WAAW,CAAC;EACrE,MAAMG,OAAO,GAAGN,MAAM,KAAK,SAAS;EACpC,MAAMO,KAAK,GAAGD,OAAO,GACjBT,QAAQ,GACNI,MAAM,CAACO,gBAAgB,GACvBP,MAAM,CAACQ,SAAS,GAClBR,MAAM,CAACS,eAAe;EAC1B,oBACElB,IAAA,CAACV,SAAS;IACR6B,iBAAiB,EAAC,QAAQ;IAC1BC,kBAAkB,EAAEjB,KAAM;IAC1BkB,kBAAkB,EAAE;MAAEhB,QAAQ,EAAEM,WAAW;MAAEL,IAAI;MAAEC;IAAS,CAAE;IAC9DF,QAAQ,EAAEM,WAAY;IACtBP,OAAO,EAAEO,WAAW,GAAGW,SAAS,GAAGlB,OAAQ;IAAA,GACvCS,aAAa;IACjBU,KAAK,EAAEb,MAAM,CAACc,MAAO;IAAAC,QAAA,EAEpBA,CAAC;MAAEC;IAAQ,CAAC,kBACX1B,IAAA,CAACT,IAAI;MACHoC,aAAa,EAAC,MAAM;MACpBJ,KAAK,EAAE,CACLb,MAAM,CAACkB,YAAY,EACnBd,OAAO,IAAIJ,MAAM,CAACI,OAAO,EACzBN,MAAM,KAAK,QAAQ,IAAIE,MAAM,CAACmB,MAAM,EACpC,CAACH,OAAO,IAAId,YAAY,MACrBE,OAAO,GAAGJ,MAAM,CAACoB,cAAc,GAAGpB,MAAM,CAACqB,aAAa,CAAC,EAC1D1B,QAAQ,KACLS,OAAO,GAAGJ,MAAM,CAACsB,eAAe,GAAGtB,MAAM,CAACuB,cAAc,CAAC,CAC5D;MAAAR,QAAA,EAEDnB,IAAI,gBACHN,IAAA,CAACX,iBAAiB;QAAC6C,IAAI,EAAC,OAAO;QAACnB,KAAK,EAAEA;MAAM,CAAE,CAAC,gBAEhDf,IAAA,CAACR,IAAI;QACH2C,IAAI,EAAEjC,IAAK;QACXgC,IAAI,EACFpB,OAAO,GAAGlB,0BAA0B,GAAGD,yBACxC;QACDoB,KAAK,EAAEA,KAAM;QACbQ,KAAK,EACHhB,QAAQ,GAAG;UAAE6B,SAAS,EAAE,CAAC;YAAEC,MAAM,EAAE;UAAQ,CAAC;QAAE,CAAC,GAAGf;MACnD,CACF;IACF,CACG;EACP,CACQ,CAAC;AAEhB","ignoreList":[]}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { ActivityIndicator, Pressable, Text, View } from 'react-native';
|
|
4
|
+
import { Icon, useColors, useThemedStyles } from '@unif/react-native-design';
|
|
5
|
+
import { COMPOSER_MENU_ICON_SIZE } from "./constants.js";
|
|
6
|
+
import { useMousePress } from "./useMousePress.js";
|
|
7
|
+
import { createStyles } from "./styles.js";
|
|
8
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
9
|
+
export function ComposerMenuItem({
|
|
10
|
+
action,
|
|
11
|
+
disabled,
|
|
12
|
+
onPress
|
|
13
|
+
}) {
|
|
14
|
+
const styles = useThemedStyles(createStyles);
|
|
15
|
+
const colors = useColors();
|
|
16
|
+
const busy = action.loading === true;
|
|
17
|
+
const named = action.label.trim().length > 0;
|
|
18
|
+
const unavailable = disabled || action.disabled === true || busy || !named;
|
|
19
|
+
const {
|
|
20
|
+
mousePressed,
|
|
21
|
+
...mouseHandlers
|
|
22
|
+
} = useMousePress(unavailable);
|
|
23
|
+
return /*#__PURE__*/_jsxs(Pressable, {
|
|
24
|
+
accessible: named,
|
|
25
|
+
accessibilityRole: named ? 'button' : undefined,
|
|
26
|
+
accessibilityLabel: named ? action.label : undefined,
|
|
27
|
+
accessibilityHint: action.accessibilityHint,
|
|
28
|
+
accessibilityState: {
|
|
29
|
+
disabled: unavailable,
|
|
30
|
+
busy
|
|
31
|
+
},
|
|
32
|
+
disabled: unavailable,
|
|
33
|
+
onPress: unavailable ? undefined : onPress,
|
|
34
|
+
...mouseHandlers,
|
|
35
|
+
style: ({
|
|
36
|
+
pressed
|
|
37
|
+
}) => [styles.menuRow, (pressed || mousePressed) && styles.menuRowPressed, unavailable && styles.actionDisabled],
|
|
38
|
+
children: [action.icon || busy ? /*#__PURE__*/_jsx(View, {
|
|
39
|
+
testID: `composer-menu-icon-${action.id}`,
|
|
40
|
+
style: styles.menuIcon,
|
|
41
|
+
accessibilityElementsHidden: true,
|
|
42
|
+
importantForAccessibility: "no-hide-descendants",
|
|
43
|
+
children: busy ? /*#__PURE__*/_jsx(ActivityIndicator, {
|
|
44
|
+
size: "small",
|
|
45
|
+
color: colors.foregroundMuted
|
|
46
|
+
}) : action.icon ? /*#__PURE__*/_jsx(Icon, {
|
|
47
|
+
name: action.icon,
|
|
48
|
+
size: COMPOSER_MENU_ICON_SIZE,
|
|
49
|
+
color: colors.foreground
|
|
50
|
+
}) : null
|
|
51
|
+
}) : null, /*#__PURE__*/_jsx(Text, {
|
|
52
|
+
style: styles.menuLabel,
|
|
53
|
+
children: action.label
|
|
54
|
+
})]
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=ComposerMenuItem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["ActivityIndicator","Pressable","Text","View","Icon","useColors","useThemedStyles","COMPOSER_MENU_ICON_SIZE","useMousePress","createStyles","jsx","_jsx","jsxs","_jsxs","ComposerMenuItem","action","disabled","onPress","styles","colors","busy","loading","named","label","trim","length","unavailable","mousePressed","mouseHandlers","accessible","accessibilityRole","undefined","accessibilityLabel","accessibilityHint","accessibilityState","style","pressed","menuRow","menuRowPressed","actionDisabled","children","icon","testID","id","menuIcon","accessibilityElementsHidden","importantForAccessibility","size","color","foregroundMuted","name","foreground","menuLabel"],"sourceRoot":"../../../../src","sources":["components/Composer/ComposerMenuItem.tsx"],"mappings":";;AAAA,SAASA,iBAAiB,EAAEC,SAAS,EAAEC,IAAI,EAAEC,IAAI,QAAQ,cAAc;AACvE,SAASC,IAAI,EAAEC,SAAS,EAAEC,eAAe,QAAQ,2BAA2B;AAC5E,SAASC,uBAAuB,QAAQ,gBAAa;AACrD,SAASC,aAAa,QAAQ,oBAAiB;AAC/C,SAASC,YAAY,QAAQ,aAAU;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAGxC,OAAO,SAASC,gBAAgBA,CAAC;EAC/BC,MAAM;EACNC,QAAQ;EACRC;AACqB,CAAC,EAAE;EACxB,MAAMC,MAAM,GAAGZ,eAAe,CAACG,YAAY,CAAC;EAC5C,MAAMU,MAAM,GAAGd,SAAS,CAAC,CAAC;EAC1B,MAAMe,IAAI,GAAGL,MAAM,CAACM,OAAO,KAAK,IAAI;EACpC,MAAMC,KAAK,GAAGP,MAAM,CAACQ,KAAK,CAACC,IAAI,CAAC,CAAC,CAACC,MAAM,GAAG,CAAC;EAC5C,MAAMC,WAAW,GAAGV,QAAQ,IAAID,MAAM,CAACC,QAAQ,KAAK,IAAI,IAAII,IAAI,IAAI,CAACE,KAAK;EAC1E,MAAM;IAAEK,YAAY;IAAE,GAAGC;EAAc,CAAC,GAAGpB,aAAa,CAACkB,WAAW,CAAC;EACrE,oBACEb,KAAA,CAACZ,SAAS;IACR4B,UAAU,EAAEP,KAAM;IAClBQ,iBAAiB,EAAER,KAAK,GAAG,QAAQ,GAAGS,SAAU;IAChDC,kBAAkB,EAAEV,KAAK,GAAGP,MAAM,CAACQ,KAAK,GAAGQ,SAAU;IACrDE,iBAAiB,EAAElB,MAAM,CAACkB,iBAAkB;IAC5CC,kBAAkB,EAAE;MAAElB,QAAQ,EAAEU,WAAW;MAAEN;IAAK,CAAE;IACpDJ,QAAQ,EAAEU,WAAY;IACtBT,OAAO,EAAES,WAAW,GAAGK,SAAS,GAAGd,OAAQ;IAAA,GACvCW,aAAa;IACjBO,KAAK,EAAEA,CAAC;MAAEC;IAAQ,CAAC,KAAK,CACtBlB,MAAM,CAACmB,OAAO,EACd,CAACD,OAAO,IAAIT,YAAY,KAAKT,MAAM,CAACoB,cAAc,EAClDZ,WAAW,IAAIR,MAAM,CAACqB,cAAc,CACpC;IAAAC,QAAA,GAEDzB,MAAM,CAAC0B,IAAI,IAAIrB,IAAI,gBAClBT,IAAA,CAACR,IAAI;MACHuC,MAAM,EAAE,sBAAsB3B,MAAM,CAAC4B,EAAE,EAAG;MAC1CR,KAAK,EAAEjB,MAAM,CAAC0B,QAAS;MACvBC,2BAA2B;MAC3BC,yBAAyB,EAAC,qBAAqB;MAAAN,QAAA,EAE9CpB,IAAI,gBACHT,IAAA,CAACX,iBAAiB;QAAC+C,IAAI,EAAC,OAAO;QAACC,KAAK,EAAE7B,MAAM,CAAC8B;MAAgB,CAAE,CAAC,GAC/DlC,MAAM,CAAC0B,IAAI,gBACb9B,IAAA,CAACP,IAAI;QACH8C,IAAI,EAAEnC,MAAM,CAAC0B,IAAK;QAClBM,IAAI,EAAExC,uBAAwB;QAC9ByC,KAAK,EAAE7B,MAAM,CAACgC;MAAW,CAC1B,CAAC,GACA;IAAI,CACJ,CAAC,GACL,IAAI,eACRxC,IAAA,CAACT,IAAI;MAACiC,KAAK,EAAEjB,MAAM,CAACkC,SAAU;MAAAZ,QAAA,EAAEzB,MAAM,CAACQ;IAAK,CAAO,CAAC;EAAA,CAC3C,CAAC;AAEhB","ignoreList":[]}
|
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
import { space, type } from '@unif/react-native-design';
|
|
4
|
+
export const COMPOSER_INPUT_LINE_HEIGHT = Math.round(type.body * 1.4);
|
|
5
|
+
export const COMPOSER_INPUT_MAX_LINES = 4;
|
|
6
|
+
export const COMPOSER_PLAIN_VERTICAL_INSET = 2 * space[4];
|
|
7
|
+
export const COMPOSER_ACTION_VISUAL_SIZE = 34;
|
|
8
|
+
export const COMPOSER_ACTION_ICON_SIZE = 22;
|
|
9
|
+
export const COMPOSER_PRIMARY_ICON_SIZE = 18;
|
|
10
|
+
export const COMPOSER_MENU_ICON_CONTAINER_SIZE = 40;
|
|
11
|
+
export const COMPOSER_MENU_ICON_SIZE = 20;
|
|
4
12
|
export const PRIMARY_LABELS = {
|
|
5
13
|
send: '发送',
|
|
6
14
|
stop: '停止回复',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["space","type","COMPOSER_INPUT_LINE_HEIGHT","Math","round","body","COMPOSER_INPUT_MAX_LINES","COMPOSER_PLAIN_VERTICAL_INSET","COMPOSER_ACTION_VISUAL_SIZE","COMPOSER_ACTION_ICON_SIZE","COMPOSER_PRIMARY_ICON_SIZE","COMPOSER_MENU_ICON_CONTAINER_SIZE","COMPOSER_MENU_ICON_SIZE","PRIMARY_LABELS","send","stop","busy","VOICE_LABELS","starting","listening","finishing"],"sourceRoot":"../../../../src","sources":["components/Composer/constants.ts"],"mappings":";;AAAA,SAASA,KAAK,EAAEC,IAAI,QAAQ,2BAA2B;AAEvD,OAAO,MAAMC,0BAA0B,GAAGC,IAAI,CAACC,KAAK,CAACH,IAAI,CAACI,IAAI,GAAG,GAAG,CAAC;AACrE,OAAO,MAAMC,wBAAwB,GAAG,CAAC;AACzC,OAAO,MAAMC,6BAA6B,GAAG,CAAC,GAAGP,KAAK,CAAC,CAAC,CAAC;AACzD,OAAO,MAAMQ,2BAA2B,GAAG,EAAE;AAC7C,OAAO,MAAMC,yBAAyB,GAAG,EAAE;AAC3C,OAAO,MAAMC,0BAA0B,GAAG,EAAE;AAC5C,OAAO,MAAMC,iCAAiC,GAAG,EAAE;AACnD,OAAO,MAAMC,uBAAuB,GAAG,EAAE;AACzC,OAAO,MAAMC,cAAc,GAAG;EAC5BC,IAAI,EAAE,IAAI;EACVC,IAAI,EAAE,MAAM;EACZC,IAAI,EAAE;AACR,CAAU;AACV,OAAO,MAAMC,YAAY,GAAG;EAC1BC,QAAQ,EAAE,WAAW;EACrBC,SAAS,EAAE,OAAO;EAClBC,SAAS,EAAE;AACb,CAAU","ignoreList":[]}
|