@yuntijs/ui 1.0.0-beta.66 → 1.0.0-beta.68
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/es/LogViewer/index.js +21 -1
- package/es/index.d.ts +1 -0
- package/es/index.js +3 -0
- package/es/useSpeechSynthes/const/polyfill.d.ts +3 -0
- package/es/useSpeechSynthes/const/polyfill.js +21 -0
- package/es/useSpeechSynthes/index.d.ts +13 -0
- package/es/useSpeechSynthes/index.js +69 -0
- package/package.json +4 -3
- package/umd/index.min.js +1 -1
- package/umd/index.min.js.map +1 -1
package/es/LogViewer/index.js
CHANGED
|
@@ -35,10 +35,16 @@ export var LogViewer = function LogViewer(_ref) {
|
|
|
35
35
|
_useState4 = _slicedToArray(_useState3, 2),
|
|
36
36
|
loading = _useState4[0],
|
|
37
37
|
setLoading = _useState4[1];
|
|
38
|
+
var _useState5 = useState(false),
|
|
39
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
40
|
+
followAfterLoaded = _useState6[0],
|
|
41
|
+
setFollowAfterLoaded = _useState6[1];
|
|
38
42
|
var setLoadingTimeout = useRef();
|
|
43
|
+
var setFollowAfterLoadedTimeout = useRef();
|
|
39
44
|
useEffect(function () {
|
|
40
45
|
return function () {
|
|
41
46
|
clearTimeout(setLoadingTimeout.current);
|
|
47
|
+
clearTimeout(setFollowAfterLoadedTimeout.current);
|
|
42
48
|
};
|
|
43
49
|
}, []);
|
|
44
50
|
useEffect(function () {
|
|
@@ -55,6 +61,9 @@ export var LogViewer = function LogViewer(_ref) {
|
|
|
55
61
|
};
|
|
56
62
|
}, [refreshInterval, urlFromProps, websocket]);
|
|
57
63
|
var url = useMemo(function () {
|
|
64
|
+
if (!urlFromProps) {
|
|
65
|
+
return urlFromProps;
|
|
66
|
+
}
|
|
58
67
|
// workaround for onLoad exec twice
|
|
59
68
|
setLoadingTimeout.current = setTimeout(function () {
|
|
60
69
|
setLoading(true);
|
|
@@ -63,11 +72,22 @@ export var LogViewer = function LogViewer(_ref) {
|
|
|
63
72
|
return "".concat(urlFromProps, "#").concat(urlHash);
|
|
64
73
|
}, [urlFromProps, urlHash]);
|
|
65
74
|
var handleOnLoad = useCallback(function () {
|
|
75
|
+
// if has log line clear setLoading timeout
|
|
76
|
+
if (document.querySelector('.react-lazylog .log-line')) {
|
|
77
|
+
clearTimeout(setLoadingTimeout.current);
|
|
78
|
+
}
|
|
66
79
|
setLoading(false);
|
|
80
|
+
|
|
81
|
+
// scroll to bottom
|
|
82
|
+
setFollowAfterLoaded(true);
|
|
83
|
+
setFollowAfterLoadedTimeout.current = setTimeout(function () {
|
|
84
|
+
return setFollowAfterLoaded(false);
|
|
85
|
+
}, 100);
|
|
67
86
|
onLoad === null || onLoad === void 0 || onLoad();
|
|
68
87
|
}, [onLoad]);
|
|
69
88
|
var handleOnError = useCallback(function (error) {
|
|
70
89
|
setLoading(false);
|
|
90
|
+
clearTimeout(setLoadingTimeout.current);
|
|
71
91
|
onError === null || onError === void 0 || onError(error);
|
|
72
92
|
}, [onError]);
|
|
73
93
|
return /*#__PURE__*/_jsxs("div", {
|
|
@@ -84,7 +104,7 @@ export var LogViewer = function LogViewer(_ref) {
|
|
|
84
104
|
url: url,
|
|
85
105
|
websocket: websocket
|
|
86
106
|
}, props), {}, {
|
|
87
|
-
follow: follow,
|
|
107
|
+
follow: followAfterLoaded || follow,
|
|
88
108
|
height: height,
|
|
89
109
|
iconFilterLines: /*#__PURE__*/_jsx(Icon, {
|
|
90
110
|
className: styles.searchBarIcon,
|
package/es/index.d.ts
CHANGED
|
@@ -31,6 +31,7 @@ export * from './ChatItem';
|
|
|
31
31
|
export * from './EditableMessage';
|
|
32
32
|
export * from './Highlighter';
|
|
33
33
|
export * from './styles';
|
|
34
|
+
export * from './useSpeechSynthes';
|
|
34
35
|
export { Affix, type AffixProps, Anchor, type AnchorProps, type MentionProps as AntdMentionProps, Mentions as AntdMentions, AutoComplete, type AutoCompleteProps, Avatar, type AvatarProps, BackTop, type BackTopProps, Badge, // @todo composed type
|
|
35
36
|
type BadgeProps, Button, // @todo dependence unifiedLink. link type, hover primary color, back button
|
|
36
37
|
type ButtonProps, Calendar, type CalendarProps, Carousel, type CarouselProps, Cascader, type CascaderProps, Checkbox, type CheckboxProps, Col, Collapse, type CollapseProps, ColorPicker, type ColorPickerProps, type ColProps, // @todo center style
|
package/es/index.js
CHANGED
|
@@ -36,6 +36,9 @@ export * from "./EditableMessage";
|
|
|
36
36
|
export * from "./Highlighter";
|
|
37
37
|
export * from "./styles";
|
|
38
38
|
|
|
39
|
+
// ~ custom @lobehub/tts
|
|
40
|
+
export * from "./useSpeechSynthes";
|
|
41
|
+
|
|
39
42
|
// ~ antd
|
|
40
43
|
export { Affix, Anchor, Mentions as AntdMentions, AutoComplete, Avatar, BackTop, Badge // @todo composed type
|
|
41
44
|
, Button // @todo dependence unifiedLink. link type, hover primary color, back button
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
var getSpeechRecognition = function getSpeechRecognition() {
|
|
2
|
+
try {
|
|
3
|
+
var _window, _window2;
|
|
4
|
+
return (globalThis === null || globalThis === void 0 ? void 0 : globalThis.SpeechRecognition) || ((_window = window) === null || _window === void 0 ? void 0 : _window.SpeechRecognition) || ((_window2 = window) === null || _window2 === void 0 ? void 0 : _window2.webkitSpeechRecognition);
|
|
5
|
+
} catch (_unused) {}
|
|
6
|
+
};
|
|
7
|
+
var getSpeechSynthesis = function getSpeechSynthesis() {
|
|
8
|
+
try {
|
|
9
|
+
var _window3, _window4;
|
|
10
|
+
return (globalThis === null || globalThis === void 0 ? void 0 : globalThis.speechSynthesis) || ((_window3 = window) === null || _window3 === void 0 ? void 0 : _window3.speechSynthesis) || ((_window4 = window) === null || _window4 === void 0 ? void 0 : _window4.webkitSpeechSynthesis);
|
|
11
|
+
} catch (_unused2) {}
|
|
12
|
+
};
|
|
13
|
+
var getSpeechSynthesisUtterance = function getSpeechSynthesisUtterance() {
|
|
14
|
+
try {
|
|
15
|
+
var _window5, _window6;
|
|
16
|
+
return (globalThis === null || globalThis === void 0 ? void 0 : globalThis.SpeechSynthesisUtterance) || ((_window5 = window) === null || _window5 === void 0 ? void 0 : _window5.SpeechSynthesisUtterance) || ((_window6 = window) === null || _window6 === void 0 ? void 0 : _window6.webkitSpeechSynthesisUtterance);
|
|
17
|
+
} catch (_unused3) {}
|
|
18
|
+
};
|
|
19
|
+
export var SpeechRecognition = getSpeechRecognition();
|
|
20
|
+
export var SpeechSynthesis = getSpeechSynthesis();
|
|
21
|
+
export var SpeechSynthesisUtterance = getSpeechSynthesisUtterance();
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { type SsmlOptions } from '@lobehub/tts/core/utils/genSSML';
|
|
3
|
+
export interface SpeechSynthesOptions extends Pick<SsmlOptions, 'voice' | 'rate' | 'pitch'> {
|
|
4
|
+
onStart?: () => void;
|
|
5
|
+
onStop?: () => void;
|
|
6
|
+
}
|
|
7
|
+
export declare const useSpeechSynthes: (defaultText: string, { voice, rate, pitch, ...options }: SpeechSynthesOptions) => {
|
|
8
|
+
isLoading: boolean;
|
|
9
|
+
setText: import("react").Dispatch<import("react").SetStateAction<string>>;
|
|
10
|
+
start: () => void;
|
|
11
|
+
stop: () => void;
|
|
12
|
+
};
|
|
13
|
+
export default useSpeechSynthes;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
2
|
+
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
|
|
3
|
+
var _excluded = ["voice", "rate", "pitch"];
|
|
4
|
+
import { useCallback, useEffect, useMemo, useState } from 'react';
|
|
5
|
+
import { SpeechSynthesis, SpeechSynthesisUtterance } from "./const/polyfill";
|
|
6
|
+
export var useSpeechSynthes = function useSpeechSynthes(defaultText, _ref) {
|
|
7
|
+
var voice = _ref.voice,
|
|
8
|
+
rate = _ref.rate,
|
|
9
|
+
pitch = _ref.pitch,
|
|
10
|
+
options = _objectWithoutProperties(_ref, _excluded);
|
|
11
|
+
var _useState = useState(SpeechSynthesis === null || SpeechSynthesis === void 0 ? void 0 : SpeechSynthesis.getVoices()),
|
|
12
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
13
|
+
voiceList = _useState2[0],
|
|
14
|
+
setVoiceList = _useState2[1];
|
|
15
|
+
var _useState3 = useState(defaultText),
|
|
16
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
17
|
+
text = _useState4[0],
|
|
18
|
+
setText = _useState4[1];
|
|
19
|
+
var _useState5 = useState(false),
|
|
20
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
21
|
+
isLoading = _useState6[0],
|
|
22
|
+
setIsLoading = _useState6[1];
|
|
23
|
+
var speechSynthesisUtterance = useMemo(function () {
|
|
24
|
+
if (!SpeechSynthesisUtterance) return;
|
|
25
|
+
var utterance = new SpeechSynthesisUtterance(text);
|
|
26
|
+
utterance.voice = voiceList.find(function (item) {
|
|
27
|
+
return item.name === voice;
|
|
28
|
+
});
|
|
29
|
+
utterance.onstart = function () {
|
|
30
|
+
return setIsLoading(true);
|
|
31
|
+
};
|
|
32
|
+
utterance.onend = function () {
|
|
33
|
+
return setIsLoading(false);
|
|
34
|
+
};
|
|
35
|
+
if (pitch) utterance.pitch = pitch * 10;
|
|
36
|
+
if (rate) utterance.rate = rate * 10;
|
|
37
|
+
return utterance;
|
|
38
|
+
}, [text, voiceList, rate, pitch, voice]);
|
|
39
|
+
useEffect(function () {
|
|
40
|
+
if (!SpeechSynthesis) return;
|
|
41
|
+
SpeechSynthesis.onvoiceschanged = function () {
|
|
42
|
+
setVoiceList(SpeechSynthesis === null || SpeechSynthesis === void 0 ? void 0 : SpeechSynthesis.getVoices());
|
|
43
|
+
};
|
|
44
|
+
SpeechSynthesis.onstart = function () {
|
|
45
|
+
return setIsLoading(true);
|
|
46
|
+
};
|
|
47
|
+
SpeechSynthesis.onend = function () {
|
|
48
|
+
return setIsLoading(false);
|
|
49
|
+
};
|
|
50
|
+
}, []);
|
|
51
|
+
var handleStart = useCallback(function () {
|
|
52
|
+
var _options$onStart;
|
|
53
|
+
options === null || options === void 0 || (_options$onStart = options.onStart) === null || _options$onStart === void 0 || _options$onStart.call(options);
|
|
54
|
+
SpeechSynthesis === null || SpeechSynthesis === void 0 || SpeechSynthesis.speak(speechSynthesisUtterance);
|
|
55
|
+
}, [options, speechSynthesisUtterance]);
|
|
56
|
+
var handleStop = useCallback(function () {
|
|
57
|
+
var _options$onStop, _speechSynthesis;
|
|
58
|
+
options === null || options === void 0 || (_options$onStop = options.onStop) === null || _options$onStop === void 0 || _options$onStop.call(options);
|
|
59
|
+
(_speechSynthesis = speechSynthesis) === null || _speechSynthesis === void 0 || _speechSynthesis.cancel();
|
|
60
|
+
setIsLoading(false);
|
|
61
|
+
}, [options]);
|
|
62
|
+
return {
|
|
63
|
+
isLoading: isLoading,
|
|
64
|
+
setText: setText,
|
|
65
|
+
start: handleStart,
|
|
66
|
+
stop: handleStop
|
|
67
|
+
};
|
|
68
|
+
};
|
|
69
|
+
export default useSpeechSynthes;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yuntijs/ui",
|
|
3
|
-
"version": "1.0.0-beta.
|
|
3
|
+
"version": "1.0.0-beta.68",
|
|
4
4
|
"description": "☁️ Yunti UI - an open-source UI component library for building Cloud Native web apps",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"yuntijs",
|
|
@@ -86,6 +86,7 @@
|
|
|
86
86
|
"@lexical/selection": "^0.16.1",
|
|
87
87
|
"@lexical/text": "^0.16.1",
|
|
88
88
|
"@lexical/utils": "^0.16.1",
|
|
89
|
+
"@lobehub/tts": "^1.25.1",
|
|
89
90
|
"@lobehub/ui": "^1.147.0",
|
|
90
91
|
"@melloware/react-logviewer": "^5.2.0",
|
|
91
92
|
"@monaco-editor/loader": "^1.4.0",
|
|
@@ -117,8 +118,8 @@
|
|
|
117
118
|
"babel-plugin-antd-style": "latest",
|
|
118
119
|
"commitlint": "^18",
|
|
119
120
|
"dayjs": "^1.11.10",
|
|
120
|
-
"dumi": "^2.4.
|
|
121
|
-
"dumi-theme-yunti": "^1.1
|
|
121
|
+
"dumi": "^2.4.9",
|
|
122
|
+
"dumi-theme-yunti": "^1.7.1",
|
|
122
123
|
"eslint": "^8.56.0",
|
|
123
124
|
"father": "^4.3.8",
|
|
124
125
|
"husky": "^8",
|