@ray-js/t-agent-ui-ray 0.2.0-beta-5 → 0.2.0-beta-7

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.
@@ -10,13 +10,13 @@ import cx from 'clsx';
10
10
  import { ChatAgentContext, MessageContext, RenderContext } from '../contexts';
11
11
  import { defaultRenderOptions } from '../renderOption';
12
12
  import logger from '../logger';
13
+ import { systemInfo } from '../utils';
13
14
  export default function ChatContainer(props) {
14
15
  const [keyboardHeight, setKeyboardHeight] = useState(0);
15
16
  const [windowSize, setWindowSize] = useState(() => {
16
- const info = ty.getSystemInfoSync();
17
17
  return {
18
- width: info.windowWidth,
19
- height: info.windowHeight
18
+ width: systemInfo.windowWidth,
19
+ height: systemInfo.windowHeight
20
20
  };
21
21
  });
22
22
  const {
@@ -92,7 +92,7 @@ export default function ChatContainer(props) {
92
92
  break;
93
93
  case 'update':
94
94
  setMessages(prev => {
95
- if (ty.getSystemInfoSync().platform === 'android') {
95
+ if (systemInfo.platform === 'android') {
96
96
  var _prev;
97
97
  // Android 上有兼容问题,需要手动滚动到底部
98
98
  if (((_prev = prev[prev.length - 1]) === null || _prev === void 0 ? void 0 : _prev.id) === message.id) {
@@ -1,5 +1,6 @@
1
1
  import Render from './index.rjs';
2
2
  import logger from '../logger';
3
+ import { systemInfo } from '../utils';
3
4
 
4
5
  // eslint-disable-next-line no-undef
5
6
  Component({
@@ -47,7 +48,7 @@ Component({
47
48
  const data = JSON.parse(content);
48
49
  if (data.option) {
49
50
  // eslint-disable-next-line no-undef
50
- const pixelRatio = ty.getSystemInfoSync().pixelRatio;
51
+ const pixelRatio = systemInfo.pixelRatio;
51
52
  this.rjs.update(this.data.canvasId, pixelRatio, data.option);
52
53
  this.setData({
53
54
  loading: false,
@@ -31,6 +31,10 @@ const AsrInput = props => {
31
31
  y: 0
32
32
  };
33
33
  props.onCancel();
34
+ ty.showToast({
35
+ icon: 'none',
36
+ title: t('t-agent.input.asr.error.too-short')
37
+ });
34
38
  return;
35
39
  }
36
40
  props.onConfirm();
@@ -1,10 +1,17 @@
1
1
  import '../index.less';
2
2
  import React from 'react';
3
+ interface AttachmentOptions {
4
+ image?: boolean;
5
+ video?: boolean;
6
+ imageCount?: number;
7
+ videoCount?: number;
8
+ }
3
9
  interface Props {
4
10
  className?: string;
5
11
  renderTop?: React.ReactNode;
6
12
  placeholder?: string;
7
13
  style?: React.CSSProperties;
14
+ attachment?: boolean | AttachmentOptions;
8
15
  }
9
16
  export default function MessageInputAIStream(props: Props): React.JSX.Element;
10
17
  export {};
@@ -12,8 +12,6 @@ import { Emitter, EmitterEvent } from '@ray-js/t-agent';
12
12
  import cx from 'clsx';
13
13
  import imageSvg from '../icons/image.svg';
14
14
  import videoSvg from '../icons/video.svg';
15
- import loadingSvg from '../icons/loading.svg';
16
- import closeCircleSvg from '../icons/close-circle.svg';
17
15
  import { useAgentSessionValue, useAttachmentInput, useChatAgent, useEmitEvent, useIsUnmounted, useOnEvent, useTranslate } from '../../hooks';
18
16
  import AsrInput from './AsrInput';
19
17
  import { useSleep } from '../../hooks/useSleep';
@@ -28,6 +26,18 @@ export default function MessageInputAIStream(props) {
28
26
  confirm: null,
29
27
  cancel: null
30
28
  });
29
+ const attachmentOptions = {
30
+ image: true,
31
+ video: true,
32
+ imageCount: 1,
33
+ videoCount: 1
34
+ };
35
+ if (props.attachment === false) {
36
+ attachmentOptions.image = false;
37
+ attachmentOptions.video = false;
38
+ } else if (typeof props.attachment === 'object') {
39
+ Object.assign(attachmentOptions, props.attachment);
40
+ }
31
41
  const attachmentInput = useAttachmentInput({
32
42
  local: true
33
43
  });
@@ -179,6 +189,7 @@ export default function MessageInputAIStream(props) {
179
189
  }
180
190
  setText('');
181
191
  setMode('voice');
192
+ setMoreOpen(false);
182
193
  },
183
194
  className: "t-agent-message-input-button t-agent-message-input-button-voice"
184
195
  })), /*#__PURE__*/React.createElement(Button, {
@@ -243,12 +254,11 @@ export default function MessageInputAIStream(props) {
243
254
  });
244
255
  }
245
256
  });
246
- emitter.addEventListener('error', event => {
257
+ emitter.addEventListener('error', () => {
247
258
  ty.showToast({
248
259
  icon: 'error',
249
- title: t('t-agent.input.voice.recording-failed')
260
+ title: t('t-agent.input.asr.error.empty')
250
261
  });
251
- console.error(event);
252
262
  setRecord({
253
263
  startAt: 0,
254
264
  recording: false,
@@ -270,7 +280,11 @@ export default function MessageInputAIStream(props) {
270
280
  var _record$cancel;
271
281
  (_record$cancel = record.cancel) === null || _record$cancel === void 0 || _record$cancel.call(record);
272
282
  },
273
- onBack: () => setMode('text'),
283
+ onBack: () => {
284
+ setText('');
285
+ setMode('text');
286
+ setMoreOpen(false);
287
+ },
274
288
  onAbort: () => {
275
289
  if (responding && acRef.current) {
276
290
  acRef.current.abort('User abort');
@@ -310,8 +324,7 @@ export default function MessageInputAIStream(props) {
310
324
  content = /*#__PURE__*/React.createElement(View, {
311
325
  className: "t-agent-message-input-uploaded-file-loading",
312
326
  key: file.id
313
- }, /*#__PURE__*/React.createElement(Image, {
314
- src: loadingSvg,
327
+ }, /*#__PURE__*/React.createElement(View, {
315
328
  className: "t-agent-message-input-uploaded-file-loading-icon"
316
329
  }));
317
330
  break;
@@ -321,21 +334,27 @@ export default function MessageInputAIStream(props) {
321
334
  return /*#__PURE__*/React.createElement(View, {
322
335
  key: file.id,
323
336
  className: "t-agent-message-input-uploaded-file"
324
- }, /*#__PURE__*/React.createElement(Image, {
337
+ }, /*#__PURE__*/React.createElement(View, {
325
338
  onClick: () => {
326
339
  setUploaded(prev => prev.filter(f => f.id !== file.id));
327
340
  },
328
- className: "t-agent-message-input-uploaded-file-delete",
329
- src: closeCircleSvg
341
+ className: "t-agent-message-input-uploaded-file-delete"
330
342
  }), content);
331
343
  })), container), /*#__PURE__*/React.createElement(View, {
332
344
  className: "t-agent-message-input-panel ".concat(moreOpen ? '' : 't-agent-message-input-panel-close')
333
345
  }, /*#__PURE__*/React.createElement(View, {
334
346
  className: "t-agent-message-input-panel-content"
335
- }, /*#__PURE__*/React.createElement(Button, {
347
+ }, attachmentOptions.image && /*#__PURE__*/React.createElement(Button, {
336
348
  className: "t-agent-message-input-panel-button",
337
349
  onClick: async () => {
338
350
  try {
351
+ if (uploaded.filter(f => f.type === 'image').length >= (attachmentOptions.imageCount || 1)) {
352
+ ty.showToast({
353
+ icon: 'none',
354
+ title: t('t-agent.input.upload.image.max-reached')
355
+ });
356
+ return;
357
+ }
339
358
  await upload('image', 1);
340
359
  } catch (e) {
341
360
  ty.showToast({
@@ -348,10 +367,17 @@ export default function MessageInputAIStream(props) {
348
367
  className: "t-agent-message-input-panel-button-icon"
349
368
  }, /*#__PURE__*/React.createElement(Image, {
350
369
  src: imageSvg
351
- }))), /*#__PURE__*/React.createElement(Button, {
370
+ }))), attachmentOptions.video && /*#__PURE__*/React.createElement(Button, {
352
371
  className: "t-agent-message-input-panel-button",
353
372
  onClick: async () => {
354
373
  try {
374
+ if (uploaded.filter(f => f.type === 'video').length >= (attachmentOptions.videoCount || 1)) {
375
+ ty.showToast({
376
+ icon: 'none',
377
+ title: t('t-agent.input.upload.image.max-reached')
378
+ });
379
+ return;
380
+ }
355
381
  await upload('video', 1);
356
382
  } catch (e) {
357
383
  ty.showToast({
@@ -53,6 +53,10 @@
53
53
  width: 64rpx;
54
54
  height: 64rpx;
55
55
  animation: t-agent-message-input-rotating 2s infinite;
56
+ background-repeat: no-repeat;
57
+ background-position: center;
58
+ background-image: url('icons/loading.svg');
59
+ background-size: cover;
56
60
  }
57
61
 
58
62
  .t-agent-message-input-uploaded-file-image {
@@ -67,6 +71,10 @@
67
71
  right: 10rpx;
68
72
  width: 32rpx;
69
73
  height: 32rpx;
74
+ background-repeat: no-repeat;
75
+ background-position: center;
76
+ background-size: cover;
77
+ background-image: url('icons/close-circle.svg');
70
78
  }
71
79
 
72
80
  .t-agent-message-input-text-bar {
@@ -13,6 +13,7 @@ import MessageRender from '../MessageRender';
13
13
  import { useAgentMessage, useAgentSessionValue, useOnEvent } from '../hooks';
14
14
  import { useDebouncedFn } from '../hooks/useDebouncedFn';
15
15
  import { useSleep } from '../hooks/useSleep';
16
+ import { systemInfo } from '../utils';
16
17
  export default function MessageList(props) {
17
18
  const {
18
19
  className,
@@ -36,7 +37,7 @@ export default function MessageList(props) {
36
37
  // @ts-ignore
37
38
  const {
38
39
  containerVersion
39
- } = ty.getSystemInfoSync();
40
+ } = systemInfo;
40
41
  return {
41
42
  // 在 2.27.2 版本之前,pageScrollTo 在某些场景不生效
42
43
  scroll: containerVersion && isVersionMatch('>=2.27.2', containerVersion)
@@ -1,11 +1,15 @@
1
1
  /// <reference types="react" />
2
2
  import { InputBlock } from '@ray-js/t-agent';
3
- export interface UploadFile {
3
+ export type UploadFile = {
4
4
  id: string;
5
- type: 'image' | 'video' | 'loading';
5
+ type: 'image' | 'video';
6
6
  url?: string;
7
7
  thumbUrl?: string;
8
- }
8
+ size: number;
9
+ } | {
10
+ id: string;
11
+ type: 'loading';
12
+ };
9
13
  export declare function useAttachmentInput({ local }?: {
10
14
  local: boolean;
11
15
  }): {
@@ -7,6 +7,7 @@ import { useCallback, useMemo, useState } from 'react';
7
7
  import { chooseImage, chooseVideo, uploadImage, uploadVideo } from '../utils/file';
8
8
  import { generateId } from '@ray-js/t-agent';
9
9
  import { useRenderOptions } from './context';
10
+ import { useTranslate } from './useTranslate';
10
11
  export function useAttachmentInput() {
11
12
  let {
12
13
  local
@@ -15,6 +16,7 @@ export function useAttachmentInput() {
15
16
  };
16
17
  const [uploaded, setUploaded] = useState([]);
17
18
  const uploading = useMemo(() => uploaded.some(file => file.type === 'loading'), [uploaded]);
19
+ const t = useTranslate();
18
20
  const blocks = useMemo(() => {
19
21
  const b = [];
20
22
  if (uploaded.length) {
@@ -24,7 +26,8 @@ export function useAttachmentInput() {
24
26
  b.push({
25
27
  type: 'image_path',
26
28
  image_path: {
27
- path: uploadFile.url
29
+ path: uploadFile.url,
30
+ size: uploadFile.size
28
31
  }
29
32
  });
30
33
  } else {
@@ -42,7 +45,8 @@ export function useAttachmentInput() {
42
45
  type: 'video_path',
43
46
  video_path: {
44
47
  path: uploadFile.url,
45
- thumb_path: uploadFile.thumbUrl
48
+ thumb_path: uploadFile.thumbUrl,
49
+ size: uploadFile.size
46
50
  }
47
51
  });
48
52
  } else {
@@ -66,15 +70,31 @@ export function useAttachmentInput() {
66
70
  uploaded.push({
67
71
  id: generateId(),
68
72
  type: 'image',
69
- url: block.image_url.url
73
+ url: block.image_url.url,
74
+ size: 0
70
75
  });
71
- }
72
- if (block.type === 'video_url') {
76
+ } else if (block.type === 'video_url') {
73
77
  uploaded.push({
74
78
  id: generateId(),
75
79
  type: 'video',
76
80
  url: block.video_url.url,
77
- thumbUrl: block.video_url.thumb_url
81
+ thumbUrl: block.video_url.thumb_url,
82
+ size: 0
83
+ });
84
+ } else if (block.type === 'image_path') {
85
+ uploaded.push({
86
+ id: generateId(),
87
+ type: 'image',
88
+ url: block.image_path.path,
89
+ size: block.image_path.size || 0
90
+ });
91
+ } else if (block.type === 'video_path') {
92
+ uploaded.push({
93
+ id: generateId(),
94
+ type: 'video',
95
+ url: block.video_path.path,
96
+ thumbUrl: block.video_path.thumb_path,
97
+ size: block.video_path.size || 0
78
98
  });
79
99
  }
80
100
  }
@@ -90,20 +110,60 @@ export function useAttachmentInput() {
90
110
  const upload = useCallback(async function (type) {
91
111
  let count = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
92
112
  if (type === 'image') {
93
- let paths = [];
113
+ let file = [];
94
114
  try {
95
- paths = await chooseImage(count);
115
+ const sourceType = await new Promise(resolve => {
116
+ ty.showActionSheet({
117
+ itemList: [t('t-agent.input.upload.source-type.camera'), t('t-agent.input.upload.source-type.album')],
118
+ success: _ref => {
119
+ let {
120
+ tapIndex
121
+ } = _ref;
122
+ if (tapIndex === 0) {
123
+ ty.authorize({
124
+ scope: 'scope.camera',
125
+ success() {
126
+ resolve('camera');
127
+ },
128
+ fail() {
129
+ ty.showToast({
130
+ title: t('t-agent.input.upload.source-type.camera.require-permission'),
131
+ icon: 'none'
132
+ });
133
+ resolve('');
134
+ }
135
+ });
136
+ } else if (tapIndex === 1) {
137
+ resolve('album');
138
+ } else {
139
+ resolve('');
140
+ }
141
+ },
142
+ fail() {
143
+ resolve('');
144
+ }
145
+ });
146
+ });
147
+ if (!sourceType) {
148
+ return;
149
+ }
150
+ file = await chooseImage(count, sourceType);
96
151
  } catch (err) {
97
152
  return;
98
153
  }
99
- await Promise.all(paths.map(async path => {
154
+ await Promise.all(file.map(async _ref2 => {
155
+ let {
156
+ path,
157
+ size
158
+ } = _ref2;
100
159
  const id = generateId();
101
160
  try {
102
161
  if (local) {
103
162
  setUploaded(prev => [...prev, {
104
163
  id,
105
164
  type: 'image',
106
- url: path
165
+ url: path,
166
+ size
107
167
  }]);
108
168
  } else {
109
169
  setUploaded(prev => [...prev, {
@@ -116,7 +176,8 @@ export function useAttachmentInput() {
116
176
  setUploaded(prev => prev.map(item => item.id === id ? {
117
177
  id,
118
178
  type: 'image',
119
- url: publicUrl
179
+ url: publicUrl,
180
+ size
120
181
  } : item));
121
182
  }
122
183
  } catch (error) {
@@ -145,7 +206,8 @@ export function useAttachmentInput() {
145
206
  id,
146
207
  type: 'video',
147
208
  url: file.tempFilePath,
148
- thumbUrl: file.thumbTempFilePath
209
+ thumbUrl: file.thumbTempFilePath,
210
+ size: file.size
149
211
  }]);
150
212
  } else {
151
213
  const [thumb, video] = await Promise.all([uploadImage(file.thumbTempFilePath, getStaticResourceBizType(file.thumbTempFilePath, 'videoThumb:upload')), uploadVideo(file.tempFilePath, getStaticResourceBizType(file.tempFilePath, 'video:upload'))]);
@@ -153,7 +215,8 @@ export function useAttachmentInput() {
153
215
  id,
154
216
  type: 'video',
155
217
  url: video.publicUrl,
156
- thumbUrl: thumb.publicUrl
218
+ thumbUrl: thumb.publicUrl,
219
+ size: 0
157
220
  } : item));
158
221
  }
159
222
  } catch (error) {
@@ -7,6 +7,7 @@ import { useState, useEffect, useCallback } from 'react';
7
7
  import logger from '../logger';
8
8
  import { useChatAgent, useEmitEvent } from './context';
9
9
  import { useTranslate } from './useTranslate';
10
+ import { systemInfo } from '../utils';
10
11
 
11
12
  /**
12
13
  * 预定义动作类型
@@ -42,7 +43,6 @@ export function useLongPress() {
42
43
  });
43
44
  useEffect(() => {
44
45
  try {
45
- const systemInfo = ty.getSystemInfoSync();
46
46
  setScreenSize({
47
47
  width: systemInfo.windowWidth,
48
48
  height: systemInfo.windowHeight
@@ -232,7 +232,7 @@ export function useLongPress() {
232
232
  isClosing: false,
233
233
  menuPosition: adjustedPosition
234
234
  });
235
- if (ty.getSystemInfoSync().brand !== 'devtools') {
235
+ if (systemInfo.brand !== 'devtools') {
236
236
  ty.vibrateShort({
237
237
  type: 'light'
238
238
  });
@@ -3,9 +3,10 @@ import "core-js/modules/web.dom-collections.iterator.js";
3
3
  import { useRenderOptions } from './context';
4
4
  import { useCallback } from 'react';
5
5
  import strings from '../i18n/strings';
6
+ import { systemInfo } from '../utils';
6
7
  const keyRE = /^t-agent\./;
7
8
  const langRE = {
8
- 'zh-Hans': /^zh([-_](hans|cn|zh))/i,
9
+ 'zh-Hans': /^zh([-_](hans|cn|zh))?/i,
9
10
  'zh-Hant': /^zh([-_](hant|tw|hk|mo))/i,
10
11
  en: /^en([-_](us|gb))/i,
11
12
  ja: /^ja([-_](jp))/i,
@@ -39,12 +40,13 @@ export const translateWith = (key, i18nTranslate) => {
39
40
  return translateCache.get(key);
40
41
  }
41
42
  const result = i18nTranslate(key);
43
+
42
44
  // result 全等于 key 说明没有翻译,使用内置翻译
43
45
  if (result === key && keyRE.test(key)) {
44
46
  var _strings$language;
45
47
  let {
46
48
  language
47
- } = ty.getSystemInfoSync();
49
+ } = systemInfo;
48
50
  language = normalizeLanguage(language);
49
51
  if ((_strings$language = strings[language]) !== null && _strings$language !== void 0 && _strings$language[key]) {
50
52
  translateCache.set(key, strings[language][key]);
@@ -20,6 +20,8 @@ declare const _default: {
20
20
  't-agent.input.asr.oninput.text.top': string;
21
21
  't-agent.input.asr.oninput.text.center': string;
22
22
  't-agent.input.asr.ptt': string;
23
+ 't-agent.input.asr.error.too-short': string;
24
+ 't-agent.input.asr.error.empty': string;
23
25
  't-agent.message.feedback.success': string;
24
26
  't-agent.message.bubble.aborted': string;
25
27
  't-agent.message.action.copy': string;
@@ -67,6 +69,13 @@ declare const _default: {
67
69
  't-agent.expand.scene.auto': string;
68
70
  't-agent.expand.no.details': string;
69
71
  't-agent.unknown-error': string;
72
+ 't-agent.input.upload.source-type.camera': string;
73
+ 't-agent.input.upload.source-type.camera.require-permission': string;
74
+ 't-agent.input.upload.source-type.album': string;
75
+ 't-agent.input.upload.source-type.album.require-permission': string;
76
+ 't-agent.input.upload.image.max-reached': string;
77
+ 't-agent.input.upload.video.max-reached': string;
78
+ 't-agent.file-tile.unknown-filename': string;
70
79
  };
71
80
  'zh-Hant': {
72
81
  't-agent.build-in.button.create_scene_manually': string;
@@ -153,6 +162,8 @@ declare const _default: {
153
162
  't-agent.input.asr.oninput.text.top': string;
154
163
  't-agent.input.asr.oninput.text.center': string;
155
164
  't-agent.input.asr.ptt': string;
165
+ 't-agent.input.asr.error.too-short': string;
166
+ 't-agent.input.asr.error.empty': string;
156
167
  't-agent.message.feedback.success': string;
157
168
  't-agent.message.bubble.aborted': string;
158
169
  't-agent.message.action.copy': string;
@@ -200,6 +211,13 @@ declare const _default: {
200
211
  't-agent.expand.scene.auto': string;
201
212
  't-agent.expand.no.details': string;
202
213
  't-agent.unknown-error': string;
214
+ 't-agent.input.upload.source-type.camera': string;
215
+ 't-agent.input.upload.source-type.camera.require-permission': string;
216
+ 't-agent.input.upload.source-type.album': string;
217
+ 't-agent.input.upload.source-type.album.require-permission': string;
218
+ 't-agent.input.upload.image.max-reached': string;
219
+ 't-agent.input.upload.video.max-reached': string;
220
+ 't-agent.file-tile.unknown-filename': string;
203
221
  };
204
222
  ja: {
205
223
  't-agent.build-in.button.create_scene_manually': string;
@@ -20,6 +20,8 @@ export default {
20
20
  't-agent.input.asr.oninput.text.top': '我在听,请说话',
21
21
  't-agent.input.asr.oninput.text.center': '松开发送,上划取消',
22
22
  't-agent.input.asr.ptt': '按住说话',
23
+ 't-agent.input.asr.error.too-short': '说话时间太短',
24
+ 't-agent.input.asr.error.empty': '未能从语音中识别到文字',
23
25
  't-agent.message.feedback.success': '反馈成功',
24
26
  't-agent.message.bubble.aborted': '用户中断',
25
27
  't-agent.message.action.copy': '复制消息',
@@ -66,7 +68,14 @@ export default {
66
68
  't-agent.expand.scene.one-click': '一键执行',
67
69
  't-agent.expand.scene.auto': '自动执行',
68
70
  't-agent.expand.no.details': '没有可显示的详情内容',
69
- 't-agent.unknown-error': '未知错误'
71
+ 't-agent.unknown-error': '未知错误',
72
+ 't-agent.input.upload.source-type.camera': '拍照',
73
+ 't-agent.input.upload.source-type.camera.require-permission': '拍照需要摄像头权限,请在设置中开启',
74
+ 't-agent.input.upload.source-type.album': '从相册中选择',
75
+ 't-agent.input.upload.source-type.album.require-permission': '从相册中选择需要相册权限,请在设置中开启',
76
+ 't-agent.input.upload.image.max-reached': '已达到图片上传上限',
77
+ 't-agent.input.upload.video.max-reached': '已达到视频上传上限',
78
+ 't-agent.file-tile.unknown-filename': '文件'
70
79
  },
71
80
  'zh-Hant': {
72
81
  't-agent.build-in.button.create_scene_manually': '手動創建場景',
@@ -156,6 +165,10 @@ export default {
156
165
  // 交互操作指引
157
166
  't-agent.input.asr.ptt': 'Press & hold to talk',
158
167
  // Push-to-Talk 按钮提示
168
+ 't-agent.input.asr.error.too-short': 'Speaking time too short',
169
+ // 语音输入时间过短
170
+ 't-agent.input.asr.error.empty': 'No text recognized from voice',
171
+ // 语音识别未能识别到文字
159
172
  't-agent.message.feedback.success': 'Feedback Successful',
160
173
  't-agent.message.bubble.aborted': 'User Aborted',
161
174
  't-agent.message.action.copy': 'Copy Message',
@@ -202,7 +215,14 @@ export default {
202
215
  't-agent.expand.scene.one-click': 'One-click Execution',
203
216
  't-agent.expand.scene.auto': 'Automatic Execution',
204
217
  't-agent.expand.no.details': 'No details available',
205
- 't-agent.unknown-error': 'Unknown Error'
218
+ 't-agent.unknown-error': 'Unknown Error',
219
+ 't-agent.input.upload.source-type.camera': 'Take a photo',
220
+ 't-agent.input.upload.source-type.camera.require-permission': 'Taking a photo requires camera permission, please enable it in settings',
221
+ 't-agent.input.upload.source-type.album': 'Pick from album',
222
+ 't-agent.input.upload.source-type.album.require-permission': 'Selecting from album requires album permission, please enable it in settings',
223
+ 't-agent.input.upload.image.max-reached': 'Image upload limit reached',
224
+ 't-agent.input.upload.video.max-reached': 'Video upload limit reached',
225
+ 't-agent.file-tile.unknown-filename': 'File'
206
226
  },
207
227
  ja: {
208
228
  't-agent.build-in.button.create_scene_manually': 'シーンを手動で作成',
@@ -7,16 +7,12 @@ import "core-js/modules/web.dom-collections.iterator.js";
7
7
  import './index.less';
8
8
  import { View } from '@ray-js/components';
9
9
  import React, { memo, useCallback, useMemo } from 'react';
10
- import { Image } from '@ray-js/ray';
11
10
  import { BubbleTileStatus, ChatMessageStatus } from '@ray-js/t-agent';
12
11
  import TileRender from '../../TileRender';
13
- import noticeSvg from './notice.svg';
14
- import noticeWarnSvg from './notice-warn.svg';
15
- import { useChatAgent, useLongPress, useRenderOptions, useTranslate } from '../../hooks';
12
+ import { useLongPress, useRenderOptions, useTranslate } from '../../hooks';
16
13
  import RollBack from '../WorkflowTile/RollBack';
17
14
  const BubbleTile = props => {
18
15
  var _workflowTile$data;
19
- useChatAgent();
20
16
  const {
21
17
  renderLongPressAs
22
18
  } = useRenderOptions();
@@ -95,8 +91,7 @@ const BubbleTile = props => {
95
91
  return /*#__PURE__*/React.createElement(View, _extends({
96
92
  className: "t-agent-bubble-tile t-agent-bubble-tile-error-alert",
97
93
  "data-testid": "t-agent-bubble-tile"
98
- }, longPressRes.longPressProps), /*#__PURE__*/React.createElement(Image, {
99
- src: noticeSvg,
94
+ }, longPressRes.longPressProps), /*#__PURE__*/React.createElement(View, {
100
95
  className: "t-agent-bubble-tile-error",
101
96
  "data-testid": "t-agent-bubble-tile-error"
102
97
  }), /*#__PURE__*/React.createElement(View, {
@@ -137,18 +132,16 @@ const ErrorNotice = /*#__PURE__*/memo(_ref => {
137
132
  showInfo
138
133
  } = _ref;
139
134
  if (bubbleStatus === BubbleTileStatus.ERROR) {
140
- return /*#__PURE__*/React.createElement(Image, {
135
+ return /*#__PURE__*/React.createElement(View, {
141
136
  onClick: showInfo,
142
- src: noticeSvg,
143
137
  className: "t-agent-bubble-tile-error",
144
138
  "data-testid": "t-agent-bubble-tile-error"
145
139
  });
146
140
  }
147
141
  if (bubbleStatus === BubbleTileStatus.WARNING) {
148
- return /*#__PURE__*/React.createElement(Image, {
142
+ return /*#__PURE__*/React.createElement(View, {
149
143
  onClick: showInfo,
150
- src: noticeWarnSvg,
151
- className: "t-agent-bubble-tile-error",
144
+ className: "t-agent-bubble-tile-warning",
152
145
  "data-testid": "t-agent-bubble-tile-warning"
153
146
  });
154
147
  }
@@ -22,6 +22,7 @@
22
22
  background: var(--app-M2_1);
23
23
  border-radius: 32rpx;
24
24
  padding: 24rpx;
25
+ max-width: 686rpx;
25
26
 
26
27
  .t-agent-bubble-tile-error {
27
28
  margin: 0 12rpx 0 0;
@@ -30,9 +31,6 @@
30
31
  .t-agent-bubble-tile-error-alert-text {
31
32
  flex: 0 1 auto;
32
33
  min-width: 0;
33
- white-space: nowrap;
34
- overflow: hidden;
35
- text-overflow: ellipsis;
36
34
  }
37
35
  }
38
36
 
@@ -115,10 +113,17 @@
115
113
  text-align: center;
116
114
  }
117
115
 
116
+ .t-agent-bubble-tile-warning,
118
117
  .t-agent-bubble-tile-error {
119
118
  width: 32rpx;
120
119
  height: 32rpx;
121
120
  margin: 0 18rpx;
121
+ flex: 1 0 auto;
122
+ background: url("./notice.svg") no-repeat center center;
123
+ }
124
+
125
+ .t-agent-bubble-tile-warning {
126
+ background: url("./notice-warn.svg") no-repeat center center;
122
127
  }
123
128
 
124
129
  @keyframes t-agent-bubble-tile-blink {
@@ -0,0 +1 @@
1
+ <?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1748237763652" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6368" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M637.194862 113.714901l0 189.396581 182.346001 0L649.150148 113.714901 637.194862 113.714901zM816.682769 896.959605c6.27696-6.275937 10.255575-14.8318 10.255575-24.52865L826.938344 355.018689l-195.461717 0 0 0c-12.534478 0-24.489764-5.13802-32.467459-13.693884l0 0c-8.555863-7.985882-13.674441-19.391652-13.674441-32.515554L585.334727 113.714901 229.169935 113.714901l0 0c-9.685593 0-18.232247 3.418866-24.498974 9.69685-6.26775 6.27696-9.69685 14.832823-9.69685 24.529673l0 0 0 724.489532 0 0c0 9.69685 3.429099 18.252713 9.69685 24.52865 6.26775 6.277984 14.813381 10.276041 24.498974 10.276041l0 0 563.02307 0 0 0C801.868365 907.235646 810.425252 903.236566 816.682769 896.959605L816.682769 896.959605zM229.169935 61.798485l442.211541 0 2.838651 0 1.719154 1.708921L876.518552 284.850583l1.720178 1.719154 0 2.278903 0 583.583338c0 23.968901-9.69685 45.639456-25.071002 61.051471l0 0c-15.392572 15.393595-37.044708 25.090445-60.974723 25.090445l0 0-563.02307 0 0 0c-23.360034 0-45.02138-9.69685-60.974723-25.090445-15.383362-15.413038-25.069979-37.08257-25.069979-61.051471L143.125233 147.941424c0-23.38971 9.686616-45.070498 25.069979-61.043285C184.148555 71.494311 205.809901 61.798485 229.169935 61.798485L229.169935 61.798485z" fill="#7b7c7e" p-id="6369"></path></svg>
@@ -1,7 +1,10 @@
1
+ import "core-js/modules/web.dom-collections.iterator.js";
1
2
  import './index.less';
2
3
  import { View } from '@ray-js/components';
3
4
  import React, { useMemo } from 'react';
4
- const baseImg = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAA0CAYAAADFeBvrAAAAAXNSR0IArs4c6QAAAARzQklUCAgICHwIZIgAAAIHSURBVGiB7ZrbasJAEIa/HExEEFoQLJUKQguFXvf9H6CP0ItCX6B3vbA16cVkSUyN0d2JWUM+EAVz2D//zOwhG9DMBAiBHAiOHHdpciADfk89YQJMETG+EgIpELcdmABR583RI0bafJAEv11pIqQiyrgRI7G566NFjuTFdwxkxpGIM5LMQ3ZUUiXmOkOtTghMwuJH1nNjNMiAMMSvPsaVfAihViUYmqBBFIM9RkG+MzhBraPVBhbAiiMDQ0e+gY/i+yxsHVrTnRiAGfBkc6KtQ2bc9GZ5fhuvWD6wMYeOcIuEYoTE/5fitU9G06EN5Yx3rXjds9AUVJ0c9jaN1xT0iYjaIiHXC5o59EVPeVPlklUuBe66vommQ233eUaKxhwJyU7WMLpwaMN/Jx4pO8ob4AVxTB1tQRtknPdAWbrXiCtVEkTUQvn+qiFnxBiWSGfbNISJinNmSIVUQcuhFYef9injsSWSXyohqCFoBdw7XmOOiJq5NsZVkIYYQ4KIcirtroK0xBgipKBYM7jpwyioYKvaisNYvdqxFfSOxQLGGWxx6Js6GYL0RDrmkO+MgnxnkILy1qOuiMG9Y40ow+7andpLn2lfrVAkhXKFMyg+1+qS2dqzt99iEJuX6iRcbq1Og4iamPqi+o5izwxioa8haDYAAvxU/zhWss2mJp/KutkumlETYvgDMKQ0sd0CIwwAAAAASUVORK5CYII=';
5
+ import { Image } from '@ray-js/ray';
6
+ import cx from 'clsx';
7
+ import { useTranslate } from '../../hooks';
5
8
  export default function FileTile(props) {
6
9
  const {
7
10
  mimeType,
@@ -9,6 +12,7 @@ export default function FileTile(props) {
9
12
  path,
10
13
  src
11
14
  } = props.tile.data;
15
+ const t = useTranslate();
12
16
  const showName = useMemo(() => {
13
17
  if (name) {
14
18
  return name;
@@ -17,26 +21,50 @@ export default function FileTile(props) {
17
21
  const pathArr = path.split('/');
18
22
  return pathArr[pathArr.length - 1];
19
23
  }
20
- return 'unknow';
24
+ return t('t-agent.file-tile.unknown-filename');
21
25
  }, [name, path]);
22
- const showSrc = useMemo(() => src || path || baseImg, [src, path]);
23
- if (mimeType === 'image') {
24
- return /*#__PURE__*/React.createElement(View, {
25
- className: "t-agent-file-tile",
26
- onClick: async () => {
27
- props.emitTileEvent({
28
- type: '@buildIn/FileTileClick',
29
- data: props.tile.data
30
- });
26
+ let inner;
27
+ const size = useMemo(() => {
28
+ const s = props.tile.data.size;
29
+ if (!s) {
30
+ return '';
31
+ }
32
+ if (s < 1024) {
33
+ return "".concat(s, " B");
34
+ }
35
+ if (s < 1024 * 1024) {
36
+ return "".concat((s / 1024).toFixed(2), " KB");
37
+ }
38
+ return "".concat((s / (1024 * 1024)).toFixed(2), " MB");
39
+ }, [props.tile.data.size]);
40
+ const [hasError, setHasError] = React.useState(false);
41
+ if (mimeType.startsWith('image')) {
42
+ inner = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Image, {
43
+ mode: "aspectFit",
44
+ className: cx('t-agent-file-tile-file-icon', 't-agent-file-tile-image-preview', {
45
+ 't-agent-file-tile-image-error': hasError
46
+ }),
47
+ src: src || path,
48
+ onError: () => {
49
+ setHasError(true);
31
50
  }
51
+ }), /*#__PURE__*/React.createElement(View, {
52
+ className: "t-agent-file-tile-info"
32
53
  }, /*#__PURE__*/React.createElement(View, {
33
- className: "t-agent-file-tile-image-preview",
34
- style: {
35
- backgroundImage: "url(".concat(showSrc, ")")
36
- }
54
+ className: "t-agent-file-tile-filename"
55
+ }, showName), size && /*#__PURE__*/React.createElement(View, {
56
+ className: "t-agent-file-tile-filesize"
57
+ }, size)));
58
+ } else {
59
+ inner = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(View, {
60
+ className: "t-agent-file-tile-file-icon"
37
61
  }), /*#__PURE__*/React.createElement(View, {
38
- className: "t-agent-file-tile-image-text"
39
- }, " ", showName));
62
+ className: "t-agent-file-tile-info"
63
+ }, /*#__PURE__*/React.createElement(View, {
64
+ className: "t-agent-file-tile-filename"
65
+ }, showName), size && /*#__PURE__*/React.createElement(View, {
66
+ className: "t-agent-file-tile-filesize"
67
+ }, size)));
40
68
  }
41
69
  return /*#__PURE__*/React.createElement(View, {
42
70
  className: "t-agent-file-tile",
@@ -46,12 +74,5 @@ export default function FileTile(props) {
46
74
  data: props.tile.data
47
75
  });
48
76
  }
49
- }, /*#__PURE__*/React.createElement(View, {
50
- className: "t-agent-file-tile-image-preview",
51
- style: {
52
- backgroundImage: "url(".concat(baseImg, ")")
53
- }
54
- }), /*#__PURE__*/React.createElement(View, {
55
- className: "t-agent-file-tile-image-text"
56
- }, " ", showName));
77
+ }, inner);
57
78
  }
@@ -17,28 +17,45 @@
17
17
  }
18
18
  }
19
19
 
20
- .t-agent-file-tile-image-preview {
20
+ .t-agent-file-tile-file-icon {
21
21
  width: 104rpx;
22
22
  height: 104rpx;
23
23
  background-repeat: no-repeat;
24
24
  background-position: center;
25
- background-size: cover;
25
+ background-size: 56rpx;
26
+ position: relative;
27
+ border-radius: 32rpx;
28
+ overflow: hidden;
29
+
30
+ background-image: url("./file.svg")
26
31
  }
27
32
 
28
- .t-agent-file-tile-image-text {
33
+ .t-agent-file-tile-info {
29
34
  margin-left: 16rpx;
30
35
  font-size: 12px;
31
36
  color: var(--app-B3-N1);
32
37
  width: 248rpx;
33
38
  height: 104rpx;
39
+ display: flex;
40
+ flex-direction: column;
41
+ justify-content: center;
42
+ }
43
+
44
+ .t-agent-file-tile-filename {
34
45
  word-break: break-all; /* 允许单词内断行 */
35
46
 
36
47
  /* 限制两行 */
37
48
  display: -webkit-box;
38
- -webkit-line-clamp: 3; /* 控制显示行数 */
49
+ -webkit-line-clamp: 2; /* 控制显示行数 */
39
50
  -webkit-box-orient: vertical;
51
+ height: 66rpx;
52
+
40
53
 
41
54
  /* 溢出省略号 */
42
55
  overflow: hidden;
43
56
  text-overflow: ellipsis;
44
57
  }
58
+
59
+ .t-agent-file-tile-filesize {
60
+ text-align: right;
61
+ }
@@ -1,8 +1,9 @@
1
- import React, { useMemo } from 'react';
1
+ import React from 'react';
2
2
  import { View } from '@ray-js/components';
3
3
  import './index.less';
4
4
  import MarkdownRender from '../../MarkdownRender';
5
5
  import { useRenderOptions } from '../../hooks';
6
+ import { systemInfo } from '../../utils';
6
7
  const TextTile = props => {
7
8
  const {
8
9
  text,
@@ -12,7 +13,7 @@ const TextTile = props => {
12
13
  renderCustomBlockAs,
13
14
  customBlockTypes
14
15
  } = useRenderOptions();
15
- const theme = useMemo(() => ty.getSystemInfoSync().theme, []);
16
+ const theme = systemInfo.theme;
16
17
  return markdown ? /*#__PURE__*/React.createElement(MarkdownRender, {
17
18
  theme: theme,
18
19
  text: text,
@@ -17,8 +17,12 @@ export declare function getUrlByCloudKey(key: string): string | undefined;
17
17
  export declare function setUrlByCloudKey(key: string, url: string): void;
18
18
  export declare function resetUrlByCloudKey(key: string): void;
19
19
  export declare const downloadSign: (cloudKey: string, bizType: string) => Promise<string> | undefined;
20
- export declare function chooseImage(count?: number): Promise<string[]>;
20
+ export declare function chooseImage(count?: number, sourceType?: 'camera' | 'album'): Promise<{
21
+ path: string;
22
+ size: number;
23
+ }[]>;
21
24
  export declare function chooseVideo(count?: number): Promise<{
22
25
  thumbTempFilePath: string;
23
26
  tempFilePath: string;
27
+ size: number;
24
28
  }[]>;
@@ -1,5 +1,7 @@
1
1
  import "core-js/modules/es.regexp.exec.js";
2
2
  import "core-js/modules/es.string.replace.js";
3
+ import "core-js/modules/esnext.iterator.constructor.js";
4
+ import "core-js/modules/esnext.iterator.map.js";
3
5
  import "core-js/modules/web.dom-collections.iterator.js";
4
6
  import { generateId } from '@ray-js/t-agent';
5
7
  import Url from 'url-parse';
@@ -158,12 +160,23 @@ export const downloadSign = cloudKey => {
158
160
  };
159
161
  export async function chooseImage() {
160
162
  let count = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
163
+ let sourceType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'album';
161
164
  const paths = await new Promise((resolve, reject) => {
162
165
  ty.chooseImage({
163
166
  count,
164
167
  sizeType: ['compressed'],
168
+ sourceType: [sourceType],
165
169
  success(res) {
166
- resolve(res.tempFilePaths);
170
+ resolve(res.tempFiles.map(_ref => {
171
+ let {
172
+ path,
173
+ size
174
+ } = _ref;
175
+ return {
176
+ path,
177
+ size: size || 0
178
+ };
179
+ }));
167
180
  },
168
181
  fail(err) {
169
182
  reject(err);
@@ -1,2 +1,3 @@
1
1
  export declare function routeScene(sceneId: string): void;
2
+ export declare const systemInfo: any;
2
3
  export * from './formatMessage';
@@ -10,4 +10,5 @@ export function routeScene(sceneId) {
10
10
  }
11
11
  });
12
12
  }
13
+ export const systemInfo = ty.getSystemInfoSync();
13
14
  export * from './formatMessage';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ray-js/t-agent-ui-ray",
3
- "version": "0.2.0-beta-5",
3
+ "version": "0.2.0-beta-7",
4
4
  "author": "Tuya.inc",
5
5
  "license": "MIT",
6
6
  "private": false,
@@ -40,5 +40,5 @@
40
40
  "@types/echarts": "^4.9.22",
41
41
  "@types/markdown-it": "^14.1.1"
42
42
  },
43
- "gitHead": "a0beda17c8e1c3ef81c718300c02a23d88a3ee4a"
43
+ "gitHead": "622a593292ba773b94c6257f7c117d6a2c7baff9"
44
44
  }
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="32" height="32" viewBox="0 0 32 32"><defs><clipPath id="master_svg0_160_1801"><rect x="0" y="0" width="32" height="32" rx="0"/></clipPath></defs><g clip-path="url(#master_svg0_160_1801)"><g><rect x="5" y="5" width="22" height="22" rx="0" fill="#FFFFFF" fill-opacity="0.009999999776482582" style="mix-blend-mode:passthrough"/></g><g><rect x="5" y="5" width="22" height="22" rx="0" fill="#FFFFFF" fill-opacity="0.009999999776482582" style="mix-blend-mode:passthrough"/></g><g><path d="M26,16Q26,16.2455,25.988,16.4907Q25.9759,16.7359,25.9518,16.9802Q25.9278,17.2245,25.8918,17.4673Q25.8557,17.7101,25.8078,17.9509Q25.76,18.1917,25.7003,18.4298Q25.6407,18.6679,25.5694,18.9028Q25.4981,19.1378,25.4154,19.3689Q25.3327,19.6,25.2388,19.8268Q25.1448,20.0536,25.0399,20.2755Q24.9349,20.497500000000002,24.8192,20.714Q24.7035,20.930500000000002,24.5773,21.141Q24.4511,21.351599999999998,24.3147,21.5557Q24.1783,21.7598,24.0321,21.957Q23.8858,22.1542,23.7301,22.3439Q23.5744,22.5337,23.4095,22.7156Q23.2446,22.8975,23.0711,23.0711Q22.8975,23.2446,22.7156,23.4095Q22.5337,23.5744,22.3439,23.7301Q22.1542,23.8858,21.957,24.0321Q21.7598,24.1783,21.5557,24.3147Q21.351599999999998,24.4511,21.141,24.5773Q20.930500000000002,24.7035,20.714,24.8192Q20.497500000000002,24.9349,20.2755,25.0399Q20.0536,25.1448,19.8268,25.2388Q19.6,25.3327,19.3689,25.4154Q19.1378,25.4981,18.9028,25.5694Q18.6679,25.6407,18.4298,25.7003Q18.1917,25.76,17.9509,25.8078Q17.7101,25.8557,17.4673,25.8918Q17.2245,25.9278,16.9802,25.9518Q16.7359,25.9759,16.4907,25.988Q16.2455,26,16,26Q15.75451,26,15.50932,25.988Q15.26413,25.9759,15.01983,25.9518Q14.77552,25.9278,14.53269,25.8918Q14.28987,25.8557,14.0491,25.8078Q13.80833,25.76,13.5702,25.7003Q13.33207,25.6407,13.09715,25.5694Q12.86224,25.4981,12.6311,25.4154Q12.39996,25.3327,12.17316,25.2388Q11.94636,25.1448,11.724450000000001,25.0399Q11.50253,24.9349,11.28603,24.8192Q11.06953,24.7035,10.85897,24.5773Q10.64841,24.4511,10.4443,24.3147Q10.240179999999999,24.1783,10.043009999999999,24.0321Q9.84583,23.8858,9.65607,23.7301Q9.4663,23.5744,9.28441,23.4095Q9.10252,23.2446,8.92893,23.0711Q8.75535,22.8975,8.590489999999999,22.7156Q8.42563,22.5337,8.2699,22.3439Q8.11416,22.1542,7.9679199999999994,21.957Q7.82169,21.7598,7.6853,21.5557Q7.54892,21.351599999999998,7.42271,21.141Q7.29651,20.930500000000002,7.18079,20.714Q7.06507,20.497500000000002,6.960107,20.2755Q6.855148,20.0536,6.761205,19.8268Q6.667261,19.6,6.5845590000000005,19.3689Q6.501857,19.1378,6.430597,18.9028Q6.359336,18.6679,6.299687,18.4298Q6.240039,18.1917,6.192147,17.9509Q6.144255,17.7101,6.108235,17.4673Q6.0722146,17.2245,6.0481527,16.9802Q6.0240909,16.7359,6.0120454,16.4907Q6,16.2455,6,16Q6,15.75451,6.0120454,15.50932Q6.0240909,15.26413,6.0481527,15.01983Q6.0722146,14.77552,6.108235,14.53269Q6.144255,14.28987,6.192147,14.0491Q6.240039,13.80833,6.299687,13.5702Q6.359336,13.33207,6.430597,13.09715Q6.501857,12.86224,6.5845590000000005,12.6311Q6.667261,12.39996,6.761205,12.17316Q6.855148,11.94636,6.960107,11.724450000000001Q7.06507,11.50253,7.18079,11.28603Q7.29651,11.06953,7.42271,10.85897Q7.54892,10.64841,7.6853,10.4443Q7.82169,10.240179999999999,7.9679199999999994,10.043009999999999Q8.11416,9.84583,8.2699,9.65607Q8.42563,9.4663,8.590489999999999,9.28441Q8.75535,9.10252,8.92893,8.92893Q9.10252,8.75535,9.28441,8.590489999999999Q9.4663,8.42563,9.65607,8.2699Q9.84583,8.11416,10.043009999999999,7.9679199999999994Q10.240179999999999,7.82169,10.4443,7.6853Q10.64841,7.54892,10.85897,7.42271Q11.06953,7.29651,11.28603,7.18079Q11.50253,7.06507,11.724450000000001,6.960107Q11.94636,6.855148,12.17316,6.761205Q12.39996,6.667261,12.6311,6.5845590000000005Q12.86224,6.501857,13.09715,6.430597Q13.33207,6.359336,13.5702,6.299687Q13.80833,6.240039,14.0491,6.192147Q14.28987,6.144255,14.53269,6.108235Q14.77552,6.0722146,15.01983,6.0481527Q15.26413,6.0240909,15.50932,6.0120454Q15.75451,6,16,6Q16.2455,6,16.4907,6.0120454Q16.7359,6.0240909,16.9802,6.0481527Q17.2245,6.0722146,17.4673,6.108235Q17.7101,6.144255,17.9509,6.192147Q18.1917,6.240039,18.4298,6.299687Q18.6679,6.359336,18.9028,6.430597Q19.1378,6.501857,19.3689,6.5845590000000005Q19.6,6.667261,19.8268,6.761205Q20.0536,6.855148,20.2755,6.960107Q20.497500000000002,7.06507,20.714,7.18079Q20.930500000000002,7.29651,21.141,7.42271Q21.351599999999998,7.54892,21.5557,7.6853Q21.7598,7.82169,21.957,7.9679199999999994Q22.1542,8.11416,22.3439,8.2699Q22.5337,8.42563,22.7156,8.590489999999999Q22.8975,8.75535,23.0711,8.92893Q23.2446,9.10252,23.4095,9.28441Q23.5744,9.4663,23.7301,9.65607Q23.8858,9.84583,24.0321,10.043009999999999Q24.1783,10.240179999999999,24.3147,10.4443Q24.4511,10.64841,24.5773,10.85897Q24.7035,11.06953,24.8192,11.28603Q24.9349,11.50253,25.0399,11.724450000000001Q25.1448,11.94636,25.2388,12.17316Q25.3327,12.39996,25.4154,12.6311Q25.4981,12.86224,25.5694,13.09715Q25.6407,13.33207,25.7003,13.5702Q25.76,13.80833,25.8078,14.0491Q25.8557,14.28987,25.8918,14.53269Q25.9278,14.77552,25.9518,15.01983Q25.9759,15.26413,25.988,15.50932Q26,15.75451,26,16Z" fill="#000000" fill-opacity="0.699999988079071"/></g><g><path d="M13.0207959765625,12.56251701171875Q13.0207959765625,12.61880701171875,13.0152759765625,12.674827011718751Q13.0097559765625,12.73084701171875,12.9987759765625,12.78605701171875Q12.9877959765625,12.84126701171875,12.971455976562499,12.89513701171875Q12.9551159765625,12.94900701171875,12.9335659765625,13.00100701171875Q12.9120259765625,13.053017011718751,12.885495976562499,13.10266701171875Q12.8589559765625,13.15230701171875,12.827685976562499,13.19910701171875Q12.7964159765625,13.245917011718749,12.7606959765625,13.28942701171875Q12.7249859765625,13.33294701171875,12.6851859765625,13.37274701171875Q12.6453859765625,13.41254701171875,12.6018659765625,13.44825701171875Q12.558355976562499,13.48397701171875,12.5115459765625,13.515247011718749Q12.4647459765625,13.54651701171875,12.4151059765625,13.573057011718749Q12.365455976562501,13.59958701171875,12.3134459765625,13.62112701171875Q12.2614459765625,13.64267701171875,12.2075759765625,13.659017011718749Q12.1537059765625,13.67535701171875,12.0984959765625,13.68633701171875Q12.0432859765625,13.69731701171875,11.987265976562501,13.70283701171875Q11.9312459765625,13.70835701171875,11.8749559765625,13.70835701171875Q11.8186659765625,13.70835701171875,11.7626459765625,13.70283701171875Q11.7066279765625,13.69731701171875,11.6514179765625,13.68633701171875Q11.596208976562501,13.67535701171875,11.5423409765625,13.659017011718749Q11.4884739765625,13.64267701171875,11.4364679765625,13.62112701171875Q11.3844619765625,13.59958701171875,11.3348169765625,13.573057011718749Q11.2851729765625,13.54651701171875,11.2383679765625,13.515247011718749Q11.1915639765625,13.48397701171875,11.1480499765625,13.44825701171875Q11.1045369765625,13.41254701171875,11.0647329765625,13.37274701171875Q11.0249289765625,13.33294701171875,10.9892179765625,13.28942701171875Q10.9535069765625,13.245917011718749,10.9222339765625,13.19910701171875Q10.8909599765625,13.15230701171875,10.8644249765625,13.10266701171875Q10.8378889765625,13.053017011718751,10.8163473765625,13.00100701171875Q10.7948056765625,12.94900701171875,10.7784651765625,12.89513701171875Q10.7621246765625,12.84126701171875,10.7511428765625,12.78605701171875Q10.7401609765625,12.73084701171875,10.7346434765625,12.674827011718751Q10.7291259765625,12.61880701171875,10.7291259765625,12.56251701171875Q10.7291259765625,12.50622701171875,10.7346434765625,12.45020701171875Q10.7401609765625,12.39418901171875,10.7511428765625,12.33897901171875Q10.7621246765625,12.283770011718751,10.7784651765625,12.22990201171875Q10.7948056765625,12.17603501171875,10.8163473765625,12.12402901171875Q10.8378889765625,12.07202301171875,10.8644249765625,12.02237801171875Q10.8909599765625,11.97273401171875,10.9222339765625,11.92592901171875Q10.9535069765625,11.87912501171875,10.9892179765625,11.83561101171875Q11.0249289765625,11.79209801171875,11.0647329765625,11.75229401171875Q11.1045369765625,11.71249001171875,11.1480499765625,11.67677901171875Q11.1915639765625,11.64106801171875,11.2383679765625,11.60979501171875Q11.2851729765625,11.57852101171875,11.3348169765625,11.55198601171875Q11.3844619765625,11.52545001171875,11.4364679765625,11.50390841171875Q11.4884739765625,11.48236671171875,11.5423409765625,11.46602621171875Q11.596208976562501,11.44968571171875,11.6514179765625,11.43870391171875Q11.7066279765625,11.42772201171875,11.7626459765625,11.42220451171875Q11.8186659765625,11.41668701171875,11.8749559765625,11.41668701171875Q11.9312459765625,11.41668701171875,11.987265976562501,11.42220451171875Q12.0432859765625,11.42772201171875,12.0984959765625,11.43870391171875Q12.1537059765625,11.44968571171875,12.2075759765625,11.46602621171875Q12.2614459765625,11.48236671171875,12.3134459765625,11.50390841171875Q12.365455976562501,11.52545001171875,12.4151059765625,11.55198601171875Q12.4647459765625,11.57852101171875,12.5115459765625,11.60979501171875Q12.558355976562499,11.64106801171875,12.6018659765625,11.67677901171875Q12.6453859765625,11.71249001171875,12.6851859765625,11.75229401171875Q12.7249859765625,11.79209801171875,12.7606959765625,11.83561101171875Q12.7964159765625,11.87912501171875,12.827685976562499,11.92592901171875Q12.8589559765625,11.97273401171875,12.885495976562499,12.02237801171875Q12.9120259765625,12.07202301171875,12.9335659765625,12.12402901171875Q12.9551159765625,12.17603501171875,12.971455976562499,12.22990201171875Q12.9877959765625,12.283770011718751,12.9987759765625,12.33897901171875Q13.0097559765625,12.39418901171875,13.0152759765625,12.45020701171875Q13.0207959765625,12.50622701171875,13.0207959765625,12.56251701171875Z" fill="#FFFFFF" fill-opacity="1" style="mix-blend-mode:passthrough"/></g><g><path d="M13.0207959765625,16.22914298828125Q13.0207959765625,16.28543298828125,13.0152759765625,16.34145298828125Q13.0097559765625,16.39747298828125,12.9987759765625,16.45268298828125Q12.9877959765625,16.50789298828125,12.971455976562499,16.56176298828125Q12.9551159765625,16.61563298828125,12.9335659765625,16.667632988281248Q12.9120259765625,16.71964298828125,12.885495976562499,16.76929298828125Q12.8589559765625,16.81893298828125,12.827685976562499,16.86573298828125Q12.7964159765625,16.91254298828125,12.7606959765625,16.95605298828125Q12.7249859765625,16.99957298828125,12.6851859765625,17.03937298828125Q12.6453859765625,17.07917298828125,12.6018659765625,17.11488298828125Q12.558355976562499,17.15060298828125,12.5115459765625,17.18187298828125Q12.4647459765625,17.21314298828125,12.4151059765625,17.23968298828125Q12.365455976562501,17.26621298828125,12.3134459765625,17.287752988281248Q12.2614459765625,17.30930298828125,12.2075759765625,17.32564298828125Q12.1537059765625,17.34198298828125,12.0984959765625,17.35296298828125Q12.0432859765625,17.36394298828125,11.987265976562501,17.36946298828125Q11.9312459765625,17.37498298828125,11.8749559765625,17.37498298828125Q11.8186659765625,17.37498298828125,11.7626459765625,17.36946298828125Q11.7066279765625,17.36394298828125,11.6514179765625,17.35296298828125Q11.596208976562501,17.34198298828125,11.5423409765625,17.32564298828125Q11.4884739765625,17.30930298828125,11.4364679765625,17.287752988281248Q11.3844619765625,17.26621298828125,11.3348169765625,17.23968298828125Q11.2851729765625,17.21314298828125,11.2383679765625,17.18187298828125Q11.1915639765625,17.15060298828125,11.1480499765625,17.11488298828125Q11.1045369765625,17.07917298828125,11.0647329765625,17.03937298828125Q11.0249289765625,16.99957298828125,10.9892179765625,16.95605298828125Q10.9535069765625,16.91254298828125,10.9222339765625,16.86573298828125Q10.8909599765625,16.81893298828125,10.8644249765625,16.76929298828125Q10.8378889765625,16.71964298828125,10.8163473765625,16.667632988281248Q10.7948056765625,16.61563298828125,10.7784651765625,16.56176298828125Q10.7621246765625,16.50789298828125,10.7511428765625,16.45268298828125Q10.7401609765625,16.39747298828125,10.7346434765625,16.34145298828125Q10.7291259765625,16.28543298828125,10.7291259765625,16.22914298828125Q10.7291259765625,16.17285298828125,10.7346434765625,16.11683298828125Q10.7401609765625,16.06081498828125,10.7511428765625,16.00560498828125Q10.7621246765625,15.950395988281251,10.7784651765625,15.89652798828125Q10.7948056765625,15.84266098828125,10.8163473765625,15.79065498828125Q10.8378889765625,15.73864898828125,10.8644249765625,15.68900398828125Q10.8909599765625,15.63935998828125,10.9222339765625,15.59255498828125Q10.9535069765625,15.54575098828125,10.9892179765625,15.50223698828125Q11.0249289765625,15.45872398828125,11.0647329765625,15.41891998828125Q11.1045369765625,15.37911598828125,11.1480499765625,15.34340498828125Q11.1915639765625,15.30769398828125,11.2383679765625,15.27642098828125Q11.2851729765625,15.24514698828125,11.3348169765625,15.21861198828125Q11.3844619765625,15.19207598828125,11.4364679765625,15.17053438828125Q11.4884739765625,15.14899268828125,11.5423409765625,15.13265218828125Q11.596208976562501,15.11631168828125,11.6514179765625,15.10532988828125Q11.7066279765625,15.09434798828125,11.7626459765625,15.08883048828125Q11.8186659765625,15.08331298828125,11.8749559765625,15.08331298828125Q11.9312459765625,15.08331298828125,11.987265976562501,15.08883048828125Q12.0432859765625,15.09434798828125,12.0984959765625,15.10532988828125Q12.1537059765625,15.11631168828125,12.2075759765625,15.13265218828125Q12.2614459765625,15.14899268828125,12.3134459765625,15.17053438828125Q12.365455976562501,15.19207598828125,12.4151059765625,15.21861198828125Q12.4647459765625,15.24514698828125,12.5115459765625,15.27642098828125Q12.558355976562499,15.30769398828125,12.6018659765625,15.34340498828125Q12.6453859765625,15.37911598828125,12.6851859765625,15.41891998828125Q12.7249859765625,15.45872398828125,12.7606959765625,15.50223698828125Q12.7964159765625,15.54575098828125,12.827685976562499,15.59255498828125Q12.8589559765625,15.63935998828125,12.885495976562499,15.68900398828125Q12.9120259765625,15.73864898828125,12.9335659765625,15.79065498828125Q12.9551159765625,15.84266098828125,12.971455976562499,15.89652798828125Q12.9877959765625,15.950395988281251,12.9987759765625,16.00560498828125Q13.0097559765625,16.06081498828125,13.0152759765625,16.11683298828125Q13.0207959765625,16.17285298828125,13.0207959765625,16.22914298828125Z" fill="#FFFFFF" fill-opacity="1" style="mix-blend-mode:passthrough"/></g><g><path d="M17.1457959765625,12.56251701171875Q17.1457959765625,12.61880701171875,17.1402759765625,12.674827011718751Q17.1347559765625,12.73084701171875,17.1237759765625,12.78605701171875Q17.1127959765625,12.84126701171875,17.0964559765625,12.89513701171875Q17.0801159765625,12.94900701171875,17.058565976562498,13.00100701171875Q17.0370259765625,13.053017011718751,17.0104959765625,13.10266701171875Q16.9839559765625,13.15230701171875,16.9526859765625,13.19910701171875Q16.9214159765625,13.245917011718749,16.8856959765625,13.28942701171875Q16.8499859765625,13.33294701171875,16.8101859765625,13.37274701171875Q16.7703859765625,13.41254701171875,16.7268659765625,13.44825701171875Q16.6833559765625,13.48397701171875,16.6365459765625,13.515247011718749Q16.5897459765625,13.54651701171875,16.5401059765625,13.573057011718749Q16.4904559765625,13.59958701171875,16.438445976562498,13.62112701171875Q16.3864459765625,13.64267701171875,16.3325759765625,13.659017011718749Q16.2787059765625,13.67535701171875,16.2234959765625,13.68633701171875Q16.1682859765625,13.69731701171875,16.1122659765625,13.70283701171875Q16.0562459765625,13.70835701171875,15.9999559765625,13.70835701171875Q15.9436659765625,13.70835701171875,15.8876459765625,13.70283701171875Q15.8316279765625,13.69731701171875,15.7764179765625,13.68633701171875Q15.721208976562501,13.67535701171875,15.6673409765625,13.659017011718749Q15.6134739765625,13.64267701171875,15.5614679765625,13.62112701171875Q15.5094619765625,13.59958701171875,15.4598169765625,13.573057011718749Q15.4101729765625,13.54651701171875,15.3633679765625,13.515247011718749Q15.3165639765625,13.48397701171875,15.2730499765625,13.44825701171875Q15.2295369765625,13.41254701171875,15.1897329765625,13.37274701171875Q15.1499289765625,13.33294701171875,15.1142179765625,13.28942701171875Q15.0785069765625,13.245917011718749,15.0472339765625,13.19910701171875Q15.0159599765625,13.15230701171875,14.9894249765625,13.10266701171875Q14.9628889765625,13.053017011718751,14.9413473765625,13.00100701171875Q14.9198056765625,12.94900701171875,14.9034651765625,12.89513701171875Q14.8871246765625,12.84126701171875,14.8761428765625,12.78605701171875Q14.8651609765625,12.73084701171875,14.8596434765625,12.674827011718751Q14.8541259765625,12.61880701171875,14.8541259765625,12.56251701171875Q14.8541259765625,12.50622701171875,14.8596434765625,12.45020701171875Q14.8651609765625,12.39418901171875,14.8761428765625,12.33897901171875Q14.8871246765625,12.283770011718751,14.9034651765625,12.22990201171875Q14.9198056765625,12.17603501171875,14.9413473765625,12.12402901171875Q14.9628889765625,12.07202301171875,14.9894249765625,12.02237801171875Q15.0159599765625,11.97273401171875,15.0472339765625,11.92592901171875Q15.0785069765625,11.87912501171875,15.1142179765625,11.83561101171875Q15.1499289765625,11.79209801171875,15.1897329765625,11.75229401171875Q15.2295369765625,11.71249001171875,15.2730499765625,11.67677901171875Q15.3165639765625,11.64106801171875,15.3633679765625,11.60979501171875Q15.4101729765625,11.57852101171875,15.4598169765625,11.55198601171875Q15.5094619765625,11.52545001171875,15.5614679765625,11.50390841171875Q15.6134739765625,11.48236671171875,15.6673409765625,11.46602621171875Q15.721208976562501,11.44968571171875,15.7764179765625,11.43870391171875Q15.8316279765625,11.42772201171875,15.8876459765625,11.42220451171875Q15.9436659765625,11.41668701171875,15.9999559765625,11.41668701171875Q16.0562459765625,11.41668701171875,16.1122659765625,11.42220451171875Q16.1682859765625,11.42772201171875,16.2234959765625,11.43870391171875Q16.2787059765625,11.44968571171875,16.3325759765625,11.46602621171875Q16.3864459765625,11.48236671171875,16.438445976562498,11.50390841171875Q16.4904559765625,11.52545001171875,16.5401059765625,11.55198601171875Q16.5897459765625,11.57852101171875,16.6365459765625,11.60979501171875Q16.6833559765625,11.64106801171875,16.7268659765625,11.67677901171875Q16.7703859765625,11.71249001171875,16.8101859765625,11.75229401171875Q16.8499859765625,11.79209801171875,16.8856959765625,11.83561101171875Q16.9214159765625,11.87912501171875,16.9526859765625,11.92592901171875Q16.9839559765625,11.97273401171875,17.0104959765625,12.02237801171875Q17.0370259765625,12.07202301171875,17.058565976562498,12.12402901171875Q17.0801159765625,12.17603501171875,17.0964559765625,12.22990201171875Q17.1127959765625,12.283770011718751,17.1237759765625,12.33897901171875Q17.1347559765625,12.39418901171875,17.1402759765625,12.45020701171875Q17.1457959765625,12.50622701171875,17.1457959765625,12.56251701171875Z" fill="#FFFFFF" fill-opacity="1" style="mix-blend-mode:passthrough"/></g><g><path d="M17.1457959765625,16.22914298828125Q17.1457959765625,16.28543298828125,17.1402759765625,16.34145298828125Q17.1347559765625,16.39747298828125,17.1237759765625,16.45268298828125Q17.1127959765625,16.50789298828125,17.0964559765625,16.56176298828125Q17.0801159765625,16.61563298828125,17.058565976562498,16.667632988281248Q17.0370259765625,16.71964298828125,17.0104959765625,16.76929298828125Q16.9839559765625,16.81893298828125,16.9526859765625,16.86573298828125Q16.9214159765625,16.91254298828125,16.8856959765625,16.95605298828125Q16.8499859765625,16.99957298828125,16.8101859765625,17.03937298828125Q16.7703859765625,17.07917298828125,16.7268659765625,17.11488298828125Q16.6833559765625,17.15060298828125,16.6365459765625,17.18187298828125Q16.5897459765625,17.21314298828125,16.5401059765625,17.23968298828125Q16.4904559765625,17.26621298828125,16.438445976562498,17.287752988281248Q16.3864459765625,17.30930298828125,16.3325759765625,17.32564298828125Q16.2787059765625,17.34198298828125,16.2234959765625,17.35296298828125Q16.1682859765625,17.36394298828125,16.1122659765625,17.36946298828125Q16.0562459765625,17.37498298828125,15.9999559765625,17.37498298828125Q15.9436659765625,17.37498298828125,15.8876459765625,17.36946298828125Q15.8316279765625,17.36394298828125,15.7764179765625,17.35296298828125Q15.721208976562501,17.34198298828125,15.6673409765625,17.32564298828125Q15.6134739765625,17.30930298828125,15.5614679765625,17.287752988281248Q15.5094619765625,17.26621298828125,15.4598169765625,17.23968298828125Q15.4101729765625,17.21314298828125,15.3633679765625,17.18187298828125Q15.3165639765625,17.15060298828125,15.2730499765625,17.11488298828125Q15.2295369765625,17.07917298828125,15.1897329765625,17.03937298828125Q15.1499289765625,16.99957298828125,15.1142179765625,16.95605298828125Q15.0785069765625,16.91254298828125,15.0472339765625,16.86573298828125Q15.0159599765625,16.81893298828125,14.9894249765625,16.76929298828125Q14.9628889765625,16.71964298828125,14.9413473765625,16.667632988281248Q14.9198056765625,16.61563298828125,14.9034651765625,16.56176298828125Q14.8871246765625,16.50789298828125,14.8761428765625,16.45268298828125Q14.8651609765625,16.39747298828125,14.8596434765625,16.34145298828125Q14.8541259765625,16.28543298828125,14.8541259765625,16.22914298828125Q14.8541259765625,16.17285298828125,14.8596434765625,16.11683298828125Q14.8651609765625,16.06081498828125,14.8761428765625,16.00560498828125Q14.8871246765625,15.950395988281251,14.9034651765625,15.89652798828125Q14.9198056765625,15.84266098828125,14.9413473765625,15.79065498828125Q14.9628889765625,15.73864898828125,14.9894249765625,15.68900398828125Q15.0159599765625,15.63935998828125,15.0472339765625,15.59255498828125Q15.0785069765625,15.54575098828125,15.1142179765625,15.50223698828125Q15.1499289765625,15.45872398828125,15.1897329765625,15.41891998828125Q15.2295369765625,15.37911598828125,15.2730499765625,15.34340498828125Q15.3165639765625,15.30769398828125,15.3633679765625,15.27642098828125Q15.4101729765625,15.24514698828125,15.4598169765625,15.21861198828125Q15.5094619765625,15.19207598828125,15.5614679765625,15.17053438828125Q15.6134739765625,15.14899268828125,15.6673409765625,15.13265218828125Q15.721208976562501,15.11631168828125,15.7764179765625,15.10532988828125Q15.8316279765625,15.09434798828125,15.8876459765625,15.08883048828125Q15.9436659765625,15.08331298828125,15.9999559765625,15.08331298828125Q16.0562459765625,15.08331298828125,16.1122659765625,15.08883048828125Q16.1682859765625,15.09434798828125,16.2234959765625,15.10532988828125Q16.2787059765625,15.11631168828125,16.3325759765625,15.13265218828125Q16.3864459765625,15.14899268828125,16.438445976562498,15.17053438828125Q16.4904559765625,15.19207598828125,16.5401059765625,15.21861198828125Q16.5897459765625,15.24514698828125,16.6365459765625,15.27642098828125Q16.6833559765625,15.30769398828125,16.7268659765625,15.34340498828125Q16.7703859765625,15.37911598828125,16.8101859765625,15.41891998828125Q16.8499859765625,15.45872398828125,16.8856959765625,15.50223698828125Q16.9214159765625,15.54575098828125,16.9526859765625,15.59255498828125Q16.9839559765625,15.63935998828125,17.0104959765625,15.68900398828125Q17.0370259765625,15.73864898828125,17.058565976562498,15.79065498828125Q17.0801159765625,15.84266098828125,17.0964559765625,15.89652798828125Q17.1127959765625,15.950395988281251,17.1237759765625,16.00560498828125Q17.1347559765625,16.06081498828125,17.1402759765625,16.11683298828125Q17.1457959765625,16.17285298828125,17.1457959765625,16.22914298828125Z" fill="#FFFFFF" fill-opacity="1" style="mix-blend-mode:passthrough"/></g><g><path d="M21.2707959765625,12.56251701171875Q21.2707959765625,12.61880701171875,21.2652759765625,12.674827011718751Q21.2597559765625,12.73084701171875,21.2487759765625,12.78605701171875Q21.2377959765625,12.84126701171875,21.2214559765625,12.89513701171875Q21.2051159765625,12.94900701171875,21.183565976562498,13.00100701171875Q21.1620259765625,13.053017011718751,21.1354959765625,13.10266701171875Q21.1089559765625,13.15230701171875,21.0776859765625,13.19910701171875Q21.0464159765625,13.245917011718749,21.0106959765625,13.28942701171875Q20.9749859765625,13.33294701171875,20.9351859765625,13.37274701171875Q20.8953859765625,13.41254701171875,20.8518659765625,13.44825701171875Q20.8083559765625,13.48397701171875,20.7615459765625,13.515247011718749Q20.7147459765625,13.54651701171875,20.6651059765625,13.573057011718749Q20.6154559765625,13.59958701171875,20.563445976562498,13.62112701171875Q20.5114459765625,13.64267701171875,20.4575759765625,13.659017011718749Q20.4037059765625,13.67535701171875,20.3484959765625,13.68633701171875Q20.2932859765625,13.69731701171875,20.2372659765625,13.70283701171875Q20.1812459765625,13.70835701171875,20.1249559765625,13.70835701171875Q20.0686659765625,13.70835701171875,20.0126459765625,13.70283701171875Q19.9566279765625,13.69731701171875,19.9014179765625,13.68633701171875Q19.8462089765625,13.67535701171875,19.7923409765625,13.659017011718749Q19.7384739765625,13.64267701171875,19.6864679765625,13.62112701171875Q19.6344619765625,13.59958701171875,19.5848169765625,13.573057011718749Q19.5351729765625,13.54651701171875,19.4883679765625,13.515247011718749Q19.4415639765625,13.48397701171875,19.3980499765625,13.44825701171875Q19.3545369765625,13.41254701171875,19.3147329765625,13.37274701171875Q19.2749289765625,13.33294701171875,19.2392179765625,13.28942701171875Q19.2035069765625,13.245917011718749,19.1722339765625,13.19910701171875Q19.1409599765625,13.15230701171875,19.1144249765625,13.10266701171875Q19.0878889765625,13.053017011718751,19.0663473765625,13.00100701171875Q19.0448056765625,12.94900701171875,19.0284651765625,12.89513701171875Q19.0121246765625,12.84126701171875,19.0011428765625,12.78605701171875Q18.9901609765625,12.73084701171875,18.9846434765625,12.674827011718751Q18.9791259765625,12.61880701171875,18.9791259765625,12.56251701171875Q18.9791259765625,12.50622701171875,18.9846434765625,12.45020701171875Q18.9901609765625,12.39418901171875,19.0011428765625,12.33897901171875Q19.0121246765625,12.283770011718751,19.0284651765625,12.22990201171875Q19.0448056765625,12.17603501171875,19.0663473765625,12.12402901171875Q19.0878889765625,12.07202301171875,19.1144249765625,12.02237801171875Q19.1409599765625,11.97273401171875,19.1722339765625,11.92592901171875Q19.2035069765625,11.87912501171875,19.2392179765625,11.83561101171875Q19.2749289765625,11.79209801171875,19.3147329765625,11.75229401171875Q19.3545369765625,11.71249001171875,19.3980499765625,11.67677901171875Q19.4415639765625,11.64106801171875,19.4883679765625,11.60979501171875Q19.5351729765625,11.57852101171875,19.5848169765625,11.55198601171875Q19.6344619765625,11.52545001171875,19.6864679765625,11.50390841171875Q19.7384739765625,11.48236671171875,19.7923409765625,11.46602621171875Q19.8462089765625,11.44968571171875,19.9014179765625,11.43870391171875Q19.9566279765625,11.42772201171875,20.0126459765625,11.42220451171875Q20.0686659765625,11.41668701171875,20.1249559765625,11.41668701171875Q20.1812459765625,11.41668701171875,20.2372659765625,11.42220451171875Q20.2932859765625,11.42772201171875,20.3484959765625,11.43870391171875Q20.4037059765625,11.44968571171875,20.4575759765625,11.46602621171875Q20.5114459765625,11.48236671171875,20.563445976562498,11.50390841171875Q20.6154559765625,11.52545001171875,20.6651059765625,11.55198601171875Q20.7147459765625,11.57852101171875,20.7615459765625,11.60979501171875Q20.8083559765625,11.64106801171875,20.8518659765625,11.67677901171875Q20.8953859765625,11.71249001171875,20.9351859765625,11.75229401171875Q20.9749859765625,11.79209801171875,21.0106959765625,11.83561101171875Q21.0464159765625,11.87912501171875,21.0776859765625,11.92592901171875Q21.1089559765625,11.97273401171875,21.1354959765625,12.02237801171875Q21.1620259765625,12.07202301171875,21.183565976562498,12.12402901171875Q21.2051159765625,12.17603501171875,21.2214559765625,12.22990201171875Q21.2377959765625,12.283770011718751,21.2487759765625,12.33897901171875Q21.2597559765625,12.39418901171875,21.2652759765625,12.45020701171875Q21.2707959765625,12.50622701171875,21.2707959765625,12.56251701171875Z" fill="#FFFFFF" fill-opacity="1" style="mix-blend-mode:passthrough"/></g><g><path d="M21.2707959765625,16.22914298828125Q21.2707959765625,16.28543298828125,21.2652759765625,16.34145298828125Q21.2597559765625,16.39747298828125,21.2487759765625,16.45268298828125Q21.2377959765625,16.50789298828125,21.2214559765625,16.56176298828125Q21.2051159765625,16.61563298828125,21.183565976562498,16.667632988281248Q21.1620259765625,16.71964298828125,21.1354959765625,16.76929298828125Q21.1089559765625,16.81893298828125,21.0776859765625,16.86573298828125Q21.0464159765625,16.91254298828125,21.0106959765625,16.95605298828125Q20.9749859765625,16.99957298828125,20.9351859765625,17.03937298828125Q20.8953859765625,17.07917298828125,20.8518659765625,17.11488298828125Q20.8083559765625,17.15060298828125,20.7615459765625,17.18187298828125Q20.7147459765625,17.21314298828125,20.6651059765625,17.23968298828125Q20.6154559765625,17.26621298828125,20.563445976562498,17.287752988281248Q20.5114459765625,17.30930298828125,20.4575759765625,17.32564298828125Q20.4037059765625,17.34198298828125,20.3484959765625,17.35296298828125Q20.2932859765625,17.36394298828125,20.2372659765625,17.36946298828125Q20.1812459765625,17.37498298828125,20.1249559765625,17.37498298828125Q20.0686659765625,17.37498298828125,20.0126459765625,17.36946298828125Q19.9566279765625,17.36394298828125,19.9014179765625,17.35296298828125Q19.8462089765625,17.34198298828125,19.7923409765625,17.32564298828125Q19.7384739765625,17.30930298828125,19.6864679765625,17.287752988281248Q19.6344619765625,17.26621298828125,19.5848169765625,17.23968298828125Q19.5351729765625,17.21314298828125,19.4883679765625,17.18187298828125Q19.4415639765625,17.15060298828125,19.3980499765625,17.11488298828125Q19.3545369765625,17.07917298828125,19.3147329765625,17.03937298828125Q19.2749289765625,16.99957298828125,19.2392179765625,16.95605298828125Q19.2035069765625,16.91254298828125,19.1722339765625,16.86573298828125Q19.1409599765625,16.81893298828125,19.1144249765625,16.76929298828125Q19.0878889765625,16.71964298828125,19.0663473765625,16.667632988281248Q19.0448056765625,16.61563298828125,19.0284651765625,16.56176298828125Q19.0121246765625,16.50789298828125,19.0011428765625,16.45268298828125Q18.9901609765625,16.39747298828125,18.9846434765625,16.34145298828125Q18.9791259765625,16.28543298828125,18.9791259765625,16.22914298828125Q18.9791259765625,16.17285298828125,18.9846434765625,16.11683298828125Q18.9901609765625,16.06081498828125,19.0011428765625,16.00560498828125Q19.0121246765625,15.950395988281251,19.0284651765625,15.89652798828125Q19.0448056765625,15.84266098828125,19.0663473765625,15.79065498828125Q19.0878889765625,15.73864898828125,19.1144249765625,15.68900398828125Q19.1409599765625,15.63935998828125,19.1722339765625,15.59255498828125Q19.2035069765625,15.54575098828125,19.2392179765625,15.50223698828125Q19.2749289765625,15.45872398828125,19.3147329765625,15.41891998828125Q19.3545369765625,15.37911598828125,19.3980499765625,15.34340498828125Q19.4415639765625,15.30769398828125,19.4883679765625,15.27642098828125Q19.5351729765625,15.24514698828125,19.5848169765625,15.21861198828125Q19.6344619765625,15.19207598828125,19.6864679765625,15.17053438828125Q19.7384739765625,15.14899268828125,19.7923409765625,15.13265218828125Q19.8462089765625,15.11631168828125,19.9014179765625,15.10532988828125Q19.9566279765625,15.09434798828125,20.0126459765625,15.08883048828125Q20.0686659765625,15.08331298828125,20.1249559765625,15.08331298828125Q20.1812459765625,15.08331298828125,20.2372659765625,15.08883048828125Q20.2932859765625,15.09434798828125,20.3484959765625,15.10532988828125Q20.4037059765625,15.11631168828125,20.4575759765625,15.13265218828125Q20.5114459765625,15.14899268828125,20.563445976562498,15.17053438828125Q20.6154559765625,15.19207598828125,20.6651059765625,15.21861198828125Q20.7147459765625,15.24514698828125,20.7615459765625,15.27642098828125Q20.8083559765625,15.30769398828125,20.8518659765625,15.34340498828125Q20.8953859765625,15.37911598828125,20.9351859765625,15.41891998828125Q20.9749859765625,15.45872398828125,21.0106959765625,15.50223698828125Q21.0464159765625,15.54575098828125,21.0776859765625,15.59255498828125Q21.1089559765625,15.63935998828125,21.1354959765625,15.68900398828125Q21.1620259765625,15.73864898828125,21.183565976562498,15.79065498828125Q21.2051159765625,15.84266098828125,21.2214559765625,15.89652798828125Q21.2377959765625,15.950395988281251,21.2487759765625,16.00560498828125Q21.2597559765625,16.06081498828125,21.2652759765625,16.11683298828125Q21.2707959765625,16.17285298828125,21.2707959765625,16.22914298828125Z" fill="#FFFFFF" fill-opacity="1" style="mix-blend-mode:passthrough"/></g><g><path d="M12.7916259765625,19.125L19.2082959765625,19.125Q19.3067859765625,19.125,19.4033859765625,19.144215Q19.4999859765625,19.163429999999998,19.5909759765625,19.201121Q19.681965976562502,19.238812,19.7638659765625,19.29353Q19.8457559765625,19.348249,19.9153959765625,19.417893Q19.9850459765625,19.487537,20.0397659765625,19.56943Q20.0944759765625,19.651322,20.1321759765625,19.742317Q20.169865976562498,19.833311,20.1890759765625,19.92991Q20.2082959765625,20.0265086,20.2082959765625,20.125Q20.2082959765625,20.2234914,20.1890759765625,20.32009Q20.169865976562498,20.416689,20.1321759765625,20.507683Q20.0944759765625,20.598678,20.0397659765625,20.68057Q19.9850459765625,20.762463,19.9153959765625,20.832107Q19.8457559765625,20.901751,19.7638659765625,20.95647Q19.681965976562502,21.011188,19.5909759765625,21.048879Q19.4999859765625,21.086570000000002,19.4033859765625,21.105785Q19.3067859765625,21.125,19.2082959765625,21.125L12.7916259765625,21.125Q12.6931345765625,21.125,12.5965359765625,21.105785Q12.4999369765625,21.086570000000002,12.4089429765625,21.048879Q12.3179479765625,21.011188,12.2360559765625,20.95647Q12.1541629765625,20.901751,12.0845189765625,20.832107Q12.0148749765625,20.762463,11.9601559765625,20.68057Q11.9054379765625,20.598678,11.8677469765625,20.507683Q11.8300559765625,20.416689,11.810840976562499,20.32009Q11.7916259765625,20.2234914,11.7916259765625,20.125Q11.7916259765625,20.0265086,11.810840976562499,19.92991Q11.8300559765625,19.833311,11.8677469765625,19.742317Q11.9054379765625,19.651322,11.9601559765625,19.56943Q12.0148749765625,19.487537,12.0845189765625,19.417893Q12.1541629765625,19.348249,12.2360559765625,19.29353Q12.3179479765625,19.238812,12.4089429765625,19.201121Q12.4999369765625,19.163429999999998,12.5965359765625,19.144215Q12.6931345765625,19.125,12.7916259765625,19.125Z" fill-rule="evenodd" fill="#FFFFFF" fill-opacity="1" style="mix-blend-mode:passthrough"/></g></g></svg>