@mirai/core 0.4.464 → 0.4.466
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/build/components/Chat/Chat.constants.js +5 -1
- package/build/components/Chat/Chat.constants.js.map +1 -1
- package/build/components/Chat/Chat.js +9 -5
- package/build/components/Chat/Chat.js.map +1 -1
- package/build/components/Chat/components/Aura/Aura.js +126 -36
- package/build/components/Chat/components/Aura/Aura.js.map +1 -1
- package/build/components/Chat/components/Aura/Aura.l10n.js +15 -0
- package/build/components/Chat/components/Aura/Aura.l10n.js.map +1 -0
- package/build/components/Chat/components/Aura/Aura.module.css +109 -4
- package/build/components/Chat/components/{AiHalo/AiHalo.js → Aura/Aura.waveform.js} +27 -43
- package/build/components/Chat/components/Aura/Aura.waveform.js.map +1 -0
- package/build/components/Chat/components/Aura/helpers/elevenLabs.js +42 -0
- package/build/components/Chat/components/Aura/helpers/elevenLabs.js.map +1 -0
- package/build/components/Chat/components/Aura/helpers/index.js +17 -0
- package/build/components/Chat/components/Aura/helpers/index.js.map +1 -0
- package/build/components/Chat/components/Aura/hooks/useOpenAiRealtimeSession.js +237 -0
- package/build/components/Chat/components/Aura/hooks/useOpenAiRealtimeSession.js.map +1 -0
- package/build/components/Chat/components/Input/Input.js +3 -8
- package/build/components/Chat/components/Input/Input.js.map +1 -1
- package/build/components/Chat/components/Welcome/Welcome.js +37 -105
- package/build/components/Chat/components/Welcome/Welcome.js.map +1 -1
- package/build/components/Chat/components/Welcome/Welcome.l10n.js +14 -2
- package/build/components/Chat/components/Welcome/Welcome.l10n.js.map +1 -1
- package/build/components/Chat/components/Welcome/Welcome.module.css +29 -9
- package/build/components/helpers/ICON.js +1 -0
- package/build/components/helpers/ICON.js.map +1 -1
- package/package.json +1 -1
- package/build/components/Chat/components/AiHalo/AiHalo.js.map +0 -1
- package/build/components/Chat/components/AiHalo/AiHalo.module.css +0 -92
- package/build/components/Chat/components/AiHalo/index.js +0 -13
- package/build/components/Chat/components/AiHalo/index.js.map +0 -1
- package/build/components/Chat/components/Welcome/Welcome.Destination.js +0 -133
- package/build/components/Chat/components/Welcome/Welcome.Destination.js.map +0 -1
- package/build/components/Chat/components/Welcome/Welcome.Destination.module.css +0 -93
- package/build/components/Chat/helpers/auraHelpers.js +0 -135
- package/build/components/Chat/helpers/auraHelpers.js.map +0 -1
|
@@ -3,26 +3,19 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.Waveform = void 0;
|
|
7
7
|
var _ui = require("@mirai/ui");
|
|
8
8
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
9
9
|
var _react = _interopRequireWildcard(require("react"));
|
|
10
|
-
var style = _interopRequireWildcard(require("./
|
|
11
|
-
const _excluded = ["children", "active", "sensitivity", "className", "conversation"];
|
|
10
|
+
var style = _interopRequireWildcard(require("./Aura.module.css"));
|
|
12
11
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
13
12
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
|
|
17
|
-
const AiHalo = _ref => {
|
|
13
|
+
const SENSITIVITY = 1.2;
|
|
14
|
+
const Waveform = _ref => {
|
|
18
15
|
let {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
className,
|
|
23
|
-
conversation
|
|
24
|
-
} = _ref,
|
|
25
|
-
others = _objectWithoutProperties(_ref, _excluded);
|
|
16
|
+
active = false,
|
|
17
|
+
conversation
|
|
18
|
+
} = _ref;
|
|
26
19
|
const [audioLevel, setAudioLevel] = (0, _react.useState)(0);
|
|
27
20
|
const [inputAudioLevel, setInputAudioLevel] = (0, _react.useState)(0);
|
|
28
21
|
const animationFrameRef = (0, _react.useRef)(null);
|
|
@@ -36,17 +29,17 @@ const AiHalo = _ref => {
|
|
|
36
29
|
if (outputDataArray && outputDataArray.length > 0) {
|
|
37
30
|
const sum = outputDataArray.reduce((acc, value) => acc + value, 0);
|
|
38
31
|
const average = sum / outputDataArray.length;
|
|
39
|
-
outputLevel = Math.min(average / 128 *
|
|
32
|
+
outputLevel = Math.min(average / 128 * SENSITIVITY, 1);
|
|
40
33
|
}
|
|
41
34
|
if (inputDataArray && inputDataArray.length > 0) {
|
|
42
35
|
const sum = inputDataArray.reduce((acc, value) => acc + value, 0);
|
|
43
36
|
const average = sum / inputDataArray.length;
|
|
44
|
-
inputLevel = Math.min(average / 128 *
|
|
37
|
+
inputLevel = Math.min(average / 128 * SENSITIVITY, 1);
|
|
45
38
|
}
|
|
46
39
|
setAudioLevel(outputLevel);
|
|
47
40
|
setInputAudioLevel(inputLevel);
|
|
48
41
|
animationFrameRef.current = requestAnimationFrame(analyzeAudio);
|
|
49
|
-
}, [conversation
|
|
42
|
+
}, [conversation]);
|
|
50
43
|
const stopAudioAnalysis = (0, _react.useCallback)(() => {
|
|
51
44
|
isActiveRef.current = false;
|
|
52
45
|
if (animationFrameRef.current) {
|
|
@@ -72,38 +65,29 @@ const AiHalo = _ref => {
|
|
|
72
65
|
if (!active || currentAudioLevel === 0) return 1;
|
|
73
66
|
return 1 + currentAudioLevel * 0.5;
|
|
74
67
|
};
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
'--aura-color': isUserSpeaking ? 'var(--mirai-aura-user-color)' : 'var(--mirai-aura-ai-color)'
|
|
83
|
-
};
|
|
84
|
-
return /*#__PURE__*/_react.default.createElement("div", _extends({}, others, {
|
|
85
|
-
className: (0, _ui.styles)(style.aiHalo, active && style.active, className),
|
|
86
|
-
style: auraStyle
|
|
87
|
-
}), /*#__PURE__*/_react.default.createElement("div", {
|
|
68
|
+
return /*#__PURE__*/_react.default.createElement(_ui.View, {
|
|
69
|
+
className: (0, _ui.styles)(style.waveform, active && style.active),
|
|
70
|
+
style: {
|
|
71
|
+
'--aura-scale': getAuraScale(),
|
|
72
|
+
'--aura-opacity': !active ? 0 : Math.max(0.33, currentAudioLevel * 0.66)
|
|
73
|
+
}
|
|
74
|
+
}, /*#__PURE__*/_react.default.createElement(_ui.View, {
|
|
88
75
|
className: style.aura
|
|
89
|
-
}), /*#__PURE__*/_react.default.createElement(
|
|
90
|
-
className: style.
|
|
91
|
-
}), /*#__PURE__*/_react.default.createElement(
|
|
92
|
-
className: style.
|
|
93
|
-
}), /*#__PURE__*/_react.default.createElement(
|
|
76
|
+
}), /*#__PURE__*/_react.default.createElement(_ui.View, {
|
|
77
|
+
className: style.pulse
|
|
78
|
+
}), /*#__PURE__*/_react.default.createElement(_ui.View, {
|
|
79
|
+
className: style.glow
|
|
80
|
+
}), /*#__PURE__*/_react.default.createElement(_ui.View, {
|
|
94
81
|
className: style.content
|
|
95
|
-
}
|
|
82
|
+
}));
|
|
96
83
|
};
|
|
97
|
-
exports.
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
children: _propTypes.default.node.isRequired,
|
|
84
|
+
exports.Waveform = Waveform;
|
|
85
|
+
Waveform.displayName = 'Mirai:Core:Chat.Aura.Waveform';
|
|
86
|
+
Waveform.propTypes = {
|
|
101
87
|
active: _propTypes.default.bool,
|
|
102
|
-
sensitivity: _propTypes.default.number,
|
|
103
|
-
className: _propTypes.default.string,
|
|
104
88
|
conversation: _propTypes.default.shape({
|
|
105
89
|
getOutputByteFrequencyData: _propTypes.default.func,
|
|
106
90
|
getInputByteFrequencyData: _propTypes.default.func
|
|
107
91
|
})
|
|
108
92
|
};
|
|
109
|
-
//# sourceMappingURL=
|
|
93
|
+
//# sourceMappingURL=Aura.waveform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Aura.waveform.js","names":["_ui","require","_propTypes","_interopRequireDefault","_react","_interopRequireWildcard","style","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","SENSITIVITY","Waveform","_ref","active","conversation","audioLevel","setAudioLevel","useState","inputAudioLevel","setInputAudioLevel","animationFrameRef","useRef","isActiveRef","analyzeAudio","useCallback","current","outputDataArray","getOutputByteFrequencyData","inputDataArray","getInputByteFrequencyData","outputLevel","inputLevel","length","sum","reduce","acc","value","average","Math","min","requestAnimationFrame","stopAudioAnalysis","cancelAnimationFrame","startAudioAnalysis","useEffect","isUserSpeaking","currentAudioLevel","getAuraScale","createElement","View","className","styles","waveform","max","aura","pulse","glow","content","exports","displayName","propTypes","PropTypes","bool","shape","func"],"sources":["../../../../../src/components/Chat/components/Aura/Aura.waveform.jsx"],"sourcesContent":["import { styles, View } from '@mirai/ui';\nimport PropTypes from 'prop-types';\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\n\nimport * as style from './Aura.module.css';\n\nconst SENSITIVITY = 1.2;\n\nconst Waveform = ({ active = false, conversation }) => {\n const [audioLevel, setAudioLevel] = useState(0);\n const [inputAudioLevel, setInputAudioLevel] = useState(0);\n const animationFrameRef = useRef(null);\n const isActiveRef = useRef(false);\n\n const analyzeAudio = useCallback(() => {\n if (!isActiveRef.current) return;\n\n const outputDataArray = conversation.getOutputByteFrequencyData();\n const inputDataArray = conversation.getInputByteFrequencyData();\n\n let outputLevel = 0;\n let inputLevel = 0;\n\n if (outputDataArray && outputDataArray.length > 0) {\n const sum = outputDataArray.reduce((acc, value) => acc + value, 0);\n const average = sum / outputDataArray.length;\n outputLevel = Math.min((average / 128) * SENSITIVITY, 1);\n }\n\n if (inputDataArray && inputDataArray.length > 0) {\n const sum = inputDataArray.reduce((acc, value) => acc + value, 0);\n const average = sum / inputDataArray.length;\n inputLevel = Math.min((average / 128) * SENSITIVITY, 1);\n }\n\n setAudioLevel(outputLevel);\n setInputAudioLevel(inputLevel);\n\n animationFrameRef.current = requestAnimationFrame(analyzeAudio);\n }, [conversation]);\n\n const stopAudioAnalysis = useCallback(() => {\n isActiveRef.current = false;\n if (animationFrameRef.current) {\n cancelAnimationFrame(animationFrameRef.current);\n animationFrameRef.current = null;\n }\n setAudioLevel(0);\n setInputAudioLevel(0);\n }, []);\n\n const startAudioAnalysis = useCallback(() => {\n isActiveRef.current = true;\n analyzeAudio();\n }, [analyzeAudio]);\n\n useEffect(() => {\n if (active) startAudioAnalysis();\n else stopAudioAnalysis();\n\n return () => {\n stopAudioAnalysis();\n };\n }, [active, startAudioAnalysis, stopAudioAnalysis]);\n\n const isUserSpeaking = inputAudioLevel > audioLevel && inputAudioLevel > 0.1;\n const currentAudioLevel = isUserSpeaking ? inputAudioLevel : audioLevel;\n\n const getAuraScale = () => {\n if (!active || currentAudioLevel === 0) return 1;\n return 1 + currentAudioLevel * 0.5;\n };\n\n return (\n <View\n className={styles(style.waveform, active && style.active)}\n style={{\n '--aura-scale': getAuraScale(),\n '--aura-opacity': !active ? 0 : Math.max(0.33, currentAudioLevel * 0.66),\n }}\n >\n <View className={style.aura} />\n <View className={style.pulse} />\n <View className={style.glow} />\n <View className={style.content} />\n </View>\n );\n};\n\nWaveform.displayName = 'Mirai:Core:Chat.Aura.Waveform';\n\nWaveform.propTypes = {\n active: PropTypes.bool,\n conversation: PropTypes.shape({\n getOutputByteFrequencyData: PropTypes.func,\n getInputByteFrequencyData: PropTypes.func,\n }),\n};\n\nexport { Waveform };\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.toolOpenUrl = exports.getSignedUrl = void 0;
|
|
7
|
+
var _dataSources = require("@mirai/data-sources");
|
|
8
|
+
const getSignedUrl = async function () {
|
|
9
|
+
let chain = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
10
|
+
try {
|
|
11
|
+
const response = await (0, _dataSources.request)({
|
|
12
|
+
endpoint: chain ? '/elevenlabs/signed-url?chain=true' : '/elevenlabs/signed-url',
|
|
13
|
+
hostname: process.env.SERVICE_SYNAPSE,
|
|
14
|
+
method: 'GET'
|
|
15
|
+
});
|
|
16
|
+
return (response === null || response === void 0 ? void 0 : response.signedUrl) || null;
|
|
17
|
+
} catch (error) {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
exports.getSignedUrl = getSignedUrl;
|
|
22
|
+
const toolOpenUrl = _ref => {
|
|
23
|
+
let {
|
|
24
|
+
url
|
|
25
|
+
} = _ref;
|
|
26
|
+
try {
|
|
27
|
+
if (!url) return 'Error: No URL provided';
|
|
28
|
+
try {
|
|
29
|
+
const {
|
|
30
|
+
href
|
|
31
|
+
} = new URL(url.startsWith('http') ? url : "https://".concat(url));
|
|
32
|
+
window.location.href = href;
|
|
33
|
+
return "Successfully opened URL: ".concat(href);
|
|
34
|
+
} catch (_unused) {
|
|
35
|
+
return 'Error: Invalid URL format';
|
|
36
|
+
}
|
|
37
|
+
} catch (error) {
|
|
38
|
+
return 'Error: Failed to open URL';
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
exports.toolOpenUrl = toolOpenUrl;
|
|
42
|
+
//# sourceMappingURL=elevenLabs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elevenLabs.js","names":["_dataSources","require","getSignedUrl","chain","arguments","length","undefined","response","request","endpoint","hostname","process","env","SERVICE_SYNAPSE","method","signedUrl","error","exports","toolOpenUrl","_ref","url","href","URL","startsWith","concat","window","location","_unused"],"sources":["../../../../../../src/components/Chat/components/Aura/helpers/elevenLabs.js"],"sourcesContent":["import { request } from '@mirai/data-sources';\n\nexport const getSignedUrl = async (chain = false) => {\n try {\n const response = await request({\n endpoint: chain ? '/elevenlabs/signed-url?chain=true' : '/elevenlabs/signed-url',\n hostname: process.env.SERVICE_SYNAPSE,\n method: 'GET',\n });\n return response?.signedUrl || null;\n } catch (error) {\n return null;\n }\n};\n\nexport const toolOpenUrl = ({ url }) => {\n try {\n if (!url) return 'Error: No URL provided';\n try {\n const { href } = new URL(url.startsWith('http') ? url : `https://${url}`);\n window.location.href = href;\n return `Successfully opened URL: ${href}`;\n } catch {\n return 'Error: Invalid URL format';\n }\n } catch (error) {\n return 'Error: Failed to open URL';\n }\n};\n"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAEO,MAAMC,YAAY,GAAG,eAAAA,CAAA,EAAyB;EAAA,IAAlBC,KAAK,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,KAAK;EAC9C,IAAI;IACF,MAAMG,QAAQ,GAAG,MAAM,IAAAC,oBAAO,EAAC;MAC7BC,QAAQ,EAAEN,KAAK,GAAG,mCAAmC,GAAG,wBAAwB;MAChFO,QAAQ,EAAEC,OAAO,CAACC,GAAG,CAACC,eAAe;MACrCC,MAAM,EAAE;IACV,CAAC,CAAC;IACF,OAAO,CAAAP,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEQ,SAAS,KAAI,IAAI;EACpC,CAAC,CAAC,OAAOC,KAAK,EAAE;IACd,OAAO,IAAI;EACb;AACF,CAAC;AAACC,OAAA,CAAAf,YAAA,GAAAA,YAAA;AAEK,MAAMgB,WAAW,GAAGC,IAAA,IAAa;EAAA,IAAZ;IAAEC;EAAI,CAAC,GAAAD,IAAA;EACjC,IAAI;IACF,IAAI,CAACC,GAAG,EAAE,OAAO,wBAAwB;IACzC,IAAI;MACF,MAAM;QAAEC;MAAK,CAAC,GAAG,IAAIC,GAAG,CAACF,GAAG,CAACG,UAAU,CAAC,MAAM,CAAC,GAAGH,GAAG,cAAAI,MAAA,CAAcJ,GAAG,CAAE,CAAC;MACzEK,MAAM,CAACC,QAAQ,CAACL,IAAI,GAAGA,IAAI;MAC3B,mCAAAG,MAAA,CAAmCH,IAAI;IACzC,CAAC,CAAC,OAAAM,OAAA,EAAM;MACN,OAAO,2BAA2B;IACpC;EACF,CAAC,CAAC,OAAOX,KAAK,EAAE;IACd,OAAO,2BAA2B;EACpC;AACF,CAAC;AAACC,OAAA,CAAAC,WAAA,GAAAA,WAAA","ignoreList":[]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
var _elevenLabs = require("./elevenLabs");
|
|
7
|
+
Object.keys(_elevenLabs).forEach(function (key) {
|
|
8
|
+
if (key === "default" || key === "__esModule") return;
|
|
9
|
+
if (key in exports && exports[key] === _elevenLabs[key]) return;
|
|
10
|
+
Object.defineProperty(exports, key, {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
get: function () {
|
|
13
|
+
return _elevenLabs[key];
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["_elevenLabs","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get"],"sources":["../../../../../../src/components/Chat/components/Aura/helpers/index.js"],"sourcesContent":["export * from './elevenLabs';\n"],"mappings":";;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,WAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,WAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,WAAA,CAAAK,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useOpenAiRealtimeSession = void 0;
|
|
7
|
+
var _dataSources = require("@mirai/data-sources");
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
var _helpers = require("../../../../helpers");
|
|
10
|
+
const useOpenAiRealtimeSession = () => {
|
|
11
|
+
const audioElementRef = (0, _react.useRef)(null);
|
|
12
|
+
const audioContextRef = (0, _react.useRef)(null);
|
|
13
|
+
const peerConnectionRef = (0, _react.useRef)(null);
|
|
14
|
+
const dataChannelRef = (0, _react.useRef)(null);
|
|
15
|
+
const localStreamRef = (0, _react.useRef)(null);
|
|
16
|
+
const pendingUserTranscriptRef = (0, _react.useRef)('');
|
|
17
|
+
const inputSourceRef = (0, _react.useRef)(null);
|
|
18
|
+
const outputSourceRef = (0, _react.useRef)(null);
|
|
19
|
+
const inputFrequencyDataRef = (0, _react.useRef)(null);
|
|
20
|
+
const outputFrequencyDataRef = (0, _react.useRef)(null);
|
|
21
|
+
const audioAnalyzersRef = (0, _react.useRef)({
|
|
22
|
+
inputAnalyser: null,
|
|
23
|
+
outputAnalyser: null,
|
|
24
|
+
getInputByteFrequencyData: () => null,
|
|
25
|
+
getOutputByteFrequencyData: () => null
|
|
26
|
+
});
|
|
27
|
+
const cleanupRealtimeSession = (0, _react.useCallback)(function () {
|
|
28
|
+
let shouldSignal = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
29
|
+
const dataChannel = dataChannelRef.current;
|
|
30
|
+
if (dataChannel) {
|
|
31
|
+
if (shouldSignal && dataChannel.readyState === 'open') {
|
|
32
|
+
dataChannel.send(JSON.stringify({
|
|
33
|
+
type: 'session.close'
|
|
34
|
+
}));
|
|
35
|
+
}
|
|
36
|
+
dataChannel.close();
|
|
37
|
+
dataChannelRef.current = null;
|
|
38
|
+
}
|
|
39
|
+
const peerConnection = peerConnectionRef.current;
|
|
40
|
+
if (peerConnection) {
|
|
41
|
+
peerConnection.getSenders().forEach(sender => {
|
|
42
|
+
if (sender.track) sender.track.stop();
|
|
43
|
+
});
|
|
44
|
+
peerConnection.close();
|
|
45
|
+
peerConnectionRef.current = null;
|
|
46
|
+
}
|
|
47
|
+
const localStream = localStreamRef.current;
|
|
48
|
+
if (localStream) {
|
|
49
|
+
localStream.getTracks().forEach(track => track.stop());
|
|
50
|
+
localStreamRef.current = null;
|
|
51
|
+
}
|
|
52
|
+
if (audioElementRef.current) {
|
|
53
|
+
audioElementRef.current.srcObject = null;
|
|
54
|
+
audioElementRef.current = null;
|
|
55
|
+
}
|
|
56
|
+
if (inputSourceRef.current) {
|
|
57
|
+
inputSourceRef.current.disconnect();
|
|
58
|
+
inputSourceRef.current = null;
|
|
59
|
+
}
|
|
60
|
+
if (outputSourceRef.current) {
|
|
61
|
+
outputSourceRef.current.disconnect();
|
|
62
|
+
outputSourceRef.current = null;
|
|
63
|
+
}
|
|
64
|
+
audioAnalyzersRef.current.inputAnalyser = null;
|
|
65
|
+
audioAnalyzersRef.current.outputAnalyser = null;
|
|
66
|
+
audioAnalyzersRef.current.getInputByteFrequencyData = () => null;
|
|
67
|
+
audioAnalyzersRef.current.getOutputByteFrequencyData = () => null;
|
|
68
|
+
inputFrequencyDataRef.current = null;
|
|
69
|
+
outputFrequencyDataRef.current = null;
|
|
70
|
+
const audioContext = audioContextRef.current;
|
|
71
|
+
if (audioContext) {
|
|
72
|
+
audioContext.close();
|
|
73
|
+
audioContextRef.current = null;
|
|
74
|
+
}
|
|
75
|
+
pendingUserTranscriptRef.current = '';
|
|
76
|
+
}, []);
|
|
77
|
+
const startSession = (0, _react.useCallback)(async _ref => {
|
|
78
|
+
let {
|
|
79
|
+
assistant_name,
|
|
80
|
+
chainId,
|
|
81
|
+
hotelId,
|
|
82
|
+
isChain,
|
|
83
|
+
locale,
|
|
84
|
+
setIsConnecting,
|
|
85
|
+
setReady
|
|
86
|
+
} = _ref;
|
|
87
|
+
cleanupRealtimeSession();
|
|
88
|
+
const fingerprint = localStorage.getItem('MIRAI:FINGERPRINT');
|
|
89
|
+
try {
|
|
90
|
+
const sessionResponse = await (0, _dataSources.request)({
|
|
91
|
+
endpoint: "/audio/session?fingerprint=".concat(fingerprint, "&hotelId=").concat(isChain ? '' : hotelId !== null && hotelId !== void 0 ? hotelId : '', "&chainId=").concat(isChain ? chainId !== null && chainId !== void 0 ? chainId : '' : ''),
|
|
92
|
+
hostname: process.env.SERVICE_SYNAPSE,
|
|
93
|
+
method: 'GET'
|
|
94
|
+
});
|
|
95
|
+
const ephemeralKey = sessionResponse.value;
|
|
96
|
+
const peerConnection = new RTCPeerConnection();
|
|
97
|
+
peerConnectionRef.current = peerConnection;
|
|
98
|
+
audioElementRef.current = document.createElement('audio');
|
|
99
|
+
audioElementRef.current.autoplay = true;
|
|
100
|
+
peerConnection.ontrack = event => {
|
|
101
|
+
// eslint-disable-next-line prefer-destructuring
|
|
102
|
+
audioElementRef.current.srcObject = event.streams[0];
|
|
103
|
+
const [remoteStream] = event.streams;
|
|
104
|
+
if (!audioContextRef.current || !audioAnalyzersRef.current.outputAnalyser || !remoteStream) return;
|
|
105
|
+
if (outputSourceRef.current) outputSourceRef.current.disconnect();
|
|
106
|
+
outputSourceRef.current = audioContextRef.current.createMediaStreamSource(remoteStream);
|
|
107
|
+
outputSourceRef.current.connect(audioAnalyzersRef.current.outputAnalyser);
|
|
108
|
+
};
|
|
109
|
+
const mediaStream = await navigator.mediaDevices.getUserMedia({
|
|
110
|
+
audio: {
|
|
111
|
+
echoCancellation: true,
|
|
112
|
+
noiseSuppression: true,
|
|
113
|
+
autoGainControl: true,
|
|
114
|
+
channelCount: 1,
|
|
115
|
+
sampleRate: 48000
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
localStreamRef.current = mediaStream;
|
|
119
|
+
const [track] = mediaStream.getAudioTracks();
|
|
120
|
+
const AudioContextConstructor = globalThis.AudioContext || globalThis.webkitAudioContext;
|
|
121
|
+
if (!AudioContextConstructor) throw new Error('AudioContext not supported');
|
|
122
|
+
const audioContext = new AudioContextConstructor();
|
|
123
|
+
audioContextRef.current = audioContext;
|
|
124
|
+
if (audioContext.state === 'suspended') await audioContext.resume();
|
|
125
|
+
const inputAnalyser = audioContext.createAnalyser();
|
|
126
|
+
const outputAnalyser = audioContext.createAnalyser();
|
|
127
|
+
inputAnalyser.fftSize = 1024;
|
|
128
|
+
outputAnalyser.fftSize = 1024;
|
|
129
|
+
audioAnalyzersRef.current.inputAnalyser = inputAnalyser;
|
|
130
|
+
audioAnalyzersRef.current.outputAnalyser = outputAnalyser;
|
|
131
|
+
inputFrequencyDataRef.current = new Uint8Array(inputAnalyser.frequencyBinCount);
|
|
132
|
+
outputFrequencyDataRef.current = new Uint8Array(outputAnalyser.frequencyBinCount);
|
|
133
|
+
audioAnalyzersRef.current.getInputByteFrequencyData = () => {
|
|
134
|
+
if (!audioAnalyzersRef.current.inputAnalyser || !inputFrequencyDataRef.current) return null;
|
|
135
|
+
audioAnalyzersRef.current.inputAnalyser.getByteFrequencyData(inputFrequencyDataRef.current);
|
|
136
|
+
return inputFrequencyDataRef.current;
|
|
137
|
+
};
|
|
138
|
+
audioAnalyzersRef.current.getOutputByteFrequencyData = () => {
|
|
139
|
+
if (!audioAnalyzersRef.current.outputAnalyser || !outputFrequencyDataRef.current) return null;
|
|
140
|
+
audioAnalyzersRef.current.outputAnalyser.getByteFrequencyData(outputFrequencyDataRef.current);
|
|
141
|
+
return outputFrequencyDataRef.current;
|
|
142
|
+
};
|
|
143
|
+
const inputSource = audioContext.createMediaStreamSource(mediaStream);
|
|
144
|
+
inputSourceRef.current = inputSource;
|
|
145
|
+
inputSource.connect(inputAnalyser);
|
|
146
|
+
if (track) {
|
|
147
|
+
await track.applyConstraints({
|
|
148
|
+
echoCancellation: true,
|
|
149
|
+
noiseSuppression: true,
|
|
150
|
+
autoGainControl: true
|
|
151
|
+
});
|
|
152
|
+
peerConnection.addTrack(track, mediaStream);
|
|
153
|
+
}
|
|
154
|
+
const dataChannel = peerConnection.createDataChannel('oai-events');
|
|
155
|
+
dataChannelRef.current = dataChannel;
|
|
156
|
+
dataChannel.addEventListener('open', () => {
|
|
157
|
+
pendingUserTranscriptRef.current = '';
|
|
158
|
+
const localeHint = locale || 'en-US';
|
|
159
|
+
const introductionMessage = "Respond in the language that matches the locale code \"".concat(localeHint, "\". Introduce yourself using the following sentence, translated into that language: \"Hello, I am ").concat(assistant_name, ", your virtual assistant. I can help you with information about our services and facilities. What would you like to know today?\"");
|
|
160
|
+
dataChannel.send(JSON.stringify({
|
|
161
|
+
type: 'response.create',
|
|
162
|
+
response: {
|
|
163
|
+
instructions: introductionMessage
|
|
164
|
+
}
|
|
165
|
+
}));
|
|
166
|
+
});
|
|
167
|
+
dataChannel.addEventListener('message', event => {
|
|
168
|
+
var _payload$item;
|
|
169
|
+
const payload = JSON.parse(event.data);
|
|
170
|
+
if (payload.type === 'response.output_item.done' && ((_payload$item = payload.item) === null || _payload$item === void 0 ? void 0 : _payload$item.type) === 'mcp_call') {
|
|
171
|
+
dataChannel.send(JSON.stringify({
|
|
172
|
+
type: 'response.create',
|
|
173
|
+
response: {
|
|
174
|
+
instructions: 'Response to the user'
|
|
175
|
+
}
|
|
176
|
+
}));
|
|
177
|
+
}
|
|
178
|
+
if (payload.type === 'response.function_call_arguments.done' && payload.name === 'open_url') {
|
|
179
|
+
const {
|
|
180
|
+
url
|
|
181
|
+
} = JSON.parse(payload.arguments);
|
|
182
|
+
window.location.href = url;
|
|
183
|
+
}
|
|
184
|
+
if (payload.type === 'conversation.item.input_audio_transcription.completed') {
|
|
185
|
+
var _payload$transcript;
|
|
186
|
+
const transcript = (_payload$transcript = payload.transcript) === null || _payload$transcript === void 0 ? void 0 : _payload$transcript.trim();
|
|
187
|
+
if (transcript) pendingUserTranscriptRef.current += transcript;
|
|
188
|
+
}
|
|
189
|
+
if (payload.type === 'response.output_audio_transcript.done') {
|
|
190
|
+
var _payload$transcript2;
|
|
191
|
+
const transcript = (_payload$transcript2 = payload.transcript) === null || _payload$transcript2 === void 0 ? void 0 : _payload$transcript2.trim();
|
|
192
|
+
if (!transcript || !pendingUserTranscriptRef.current) return;
|
|
193
|
+
const input = pendingUserTranscriptRef.current.trim();
|
|
194
|
+
pendingUserTranscriptRef.current = '';
|
|
195
|
+
const activeLocale = locale || 'en-US';
|
|
196
|
+
_dataSources.Event.publish(_helpers.EVENT.METRICS, {
|
|
197
|
+
id: 'SYNAPSE_RESPONSE',
|
|
198
|
+
fingerprint,
|
|
199
|
+
text: transcript,
|
|
200
|
+
input,
|
|
201
|
+
agent: 'aura',
|
|
202
|
+
locale: activeLocale
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
});
|
|
206
|
+
const offer = await peerConnection.createOffer();
|
|
207
|
+
await peerConnection.setLocalDescription(offer);
|
|
208
|
+
const sdpResponse = await fetch('https://api.openai.com/v1/realtime/calls', {
|
|
209
|
+
method: 'POST',
|
|
210
|
+
body: offer.sdp,
|
|
211
|
+
headers: {
|
|
212
|
+
Authorization: "Bearer ".concat(ephemeralKey),
|
|
213
|
+
'Content-Type': 'application/sdp'
|
|
214
|
+
}
|
|
215
|
+
});
|
|
216
|
+
if (!sdpResponse.ok) throw new Error('Failed to establish OpenAI Realtime session');
|
|
217
|
+
const answer = {
|
|
218
|
+
type: 'answer',
|
|
219
|
+
sdp: await sdpResponse.text()
|
|
220
|
+
};
|
|
221
|
+
await peerConnection.setRemoteDescription(answer);
|
|
222
|
+
} finally {
|
|
223
|
+
setIsConnecting(false);
|
|
224
|
+
setReady(true);
|
|
225
|
+
}
|
|
226
|
+
}, [cleanupRealtimeSession]);
|
|
227
|
+
const endSession = (0, _react.useCallback)(() => {
|
|
228
|
+
cleanupRealtimeSession(true);
|
|
229
|
+
}, [cleanupRealtimeSession]);
|
|
230
|
+
return {
|
|
231
|
+
startSession,
|
|
232
|
+
endSession,
|
|
233
|
+
audioAnalyzers: audioAnalyzersRef.current
|
|
234
|
+
};
|
|
235
|
+
};
|
|
236
|
+
exports.useOpenAiRealtimeSession = useOpenAiRealtimeSession;
|
|
237
|
+
//# sourceMappingURL=useOpenAiRealtimeSession.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useOpenAiRealtimeSession.js","names":["_dataSources","require","_react","_helpers","useOpenAiRealtimeSession","audioElementRef","useRef","audioContextRef","peerConnectionRef","dataChannelRef","localStreamRef","pendingUserTranscriptRef","inputSourceRef","outputSourceRef","inputFrequencyDataRef","outputFrequencyDataRef","audioAnalyzersRef","inputAnalyser","outputAnalyser","getInputByteFrequencyData","getOutputByteFrequencyData","cleanupRealtimeSession","useCallback","shouldSignal","arguments","length","undefined","dataChannel","current","readyState","send","JSON","stringify","type","close","peerConnection","getSenders","forEach","sender","track","stop","localStream","getTracks","srcObject","disconnect","audioContext","startSession","_ref","assistant_name","chainId","hotelId","isChain","locale","setIsConnecting","setReady","fingerprint","localStorage","getItem","sessionResponse","request","endpoint","concat","hostname","process","env","SERVICE_SYNAPSE","method","ephemeralKey","value","RTCPeerConnection","document","createElement","autoplay","ontrack","event","streams","remoteStream","createMediaStreamSource","connect","mediaStream","navigator","mediaDevices","getUserMedia","audio","echoCancellation","noiseSuppression","autoGainControl","channelCount","sampleRate","getAudioTracks","AudioContextConstructor","globalThis","AudioContext","webkitAudioContext","Error","state","resume","createAnalyser","fftSize","Uint8Array","frequencyBinCount","getByteFrequencyData","inputSource","applyConstraints","addTrack","createDataChannel","addEventListener","localeHint","introductionMessage","response","instructions","_payload$item","payload","parse","data","item","name","url","window","location","href","_payload$transcript","transcript","trim","_payload$transcript2","input","activeLocale","Event","publish","EVENT","METRICS","id","text","agent","offer","createOffer","setLocalDescription","sdpResponse","fetch","body","sdp","headers","Authorization","ok","answer","setRemoteDescription","endSession","audioAnalyzers","exports"],"sources":["../../../../../../src/components/Chat/components/Aura/hooks/useOpenAiRealtimeSession.js"],"sourcesContent":["import { Event, request } from '@mirai/data-sources';\nimport { useCallback, useRef } from 'react';\n\nimport { EVENT } from '../../../../helpers';\n\nconst useOpenAiRealtimeSession = () => {\n const audioElementRef = useRef(null);\n const audioContextRef = useRef(null);\n const peerConnectionRef = useRef(null);\n const dataChannelRef = useRef(null);\n const localStreamRef = useRef(null);\n const pendingUserTranscriptRef = useRef('');\n const inputSourceRef = useRef(null);\n const outputSourceRef = useRef(null);\n const inputFrequencyDataRef = useRef(null);\n const outputFrequencyDataRef = useRef(null);\n const audioAnalyzersRef = useRef({\n inputAnalyser: null,\n outputAnalyser: null,\n getInputByteFrequencyData: () => null,\n getOutputByteFrequencyData: () => null,\n });\n\n const cleanupRealtimeSession = useCallback((shouldSignal = false) => {\n const dataChannel = dataChannelRef.current;\n if (dataChannel) {\n if (shouldSignal && dataChannel.readyState === 'open') {\n dataChannel.send(JSON.stringify({ type: 'session.close' }));\n }\n dataChannel.close();\n dataChannelRef.current = null;\n }\n\n const peerConnection = peerConnectionRef.current;\n if (peerConnection) {\n peerConnection.getSenders().forEach((sender) => {\n if (sender.track) sender.track.stop();\n });\n peerConnection.close();\n peerConnectionRef.current = null;\n }\n\n const localStream = localStreamRef.current;\n if (localStream) {\n localStream.getTracks().forEach((track) => track.stop());\n localStreamRef.current = null;\n }\n\n if (audioElementRef.current) {\n audioElementRef.current.srcObject = null;\n audioElementRef.current = null;\n }\n\n if (inputSourceRef.current) {\n inputSourceRef.current.disconnect();\n inputSourceRef.current = null;\n }\n\n if (outputSourceRef.current) {\n outputSourceRef.current.disconnect();\n outputSourceRef.current = null;\n }\n\n audioAnalyzersRef.current.inputAnalyser = null;\n audioAnalyzersRef.current.outputAnalyser = null;\n audioAnalyzersRef.current.getInputByteFrequencyData = () => null;\n audioAnalyzersRef.current.getOutputByteFrequencyData = () => null;\n inputFrequencyDataRef.current = null;\n outputFrequencyDataRef.current = null;\n\n const audioContext = audioContextRef.current;\n if (audioContext) {\n audioContext.close();\n audioContextRef.current = null;\n }\n\n pendingUserTranscriptRef.current = '';\n }, []);\n\n const startSession = useCallback(\n async ({ assistant_name, chainId, hotelId, isChain, locale, setIsConnecting, setReady }) => {\n cleanupRealtimeSession();\n\n const fingerprint = localStorage.getItem('MIRAI:FINGERPRINT');\n\n try {\n const sessionResponse = await request({\n endpoint: `/audio/session?fingerprint=${fingerprint}&hotelId=${isChain ? '' : hotelId ?? ''}&chainId=${\n isChain ? chainId ?? '' : ''\n }`,\n hostname: process.env.SERVICE_SYNAPSE,\n method: 'GET',\n });\n\n const ephemeralKey = sessionResponse.value;\n const peerConnection = new RTCPeerConnection();\n peerConnectionRef.current = peerConnection;\n\n audioElementRef.current = document.createElement('audio');\n audioElementRef.current.autoplay = true;\n peerConnection.ontrack = (event) => {\n // eslint-disable-next-line prefer-destructuring\n audioElementRef.current.srcObject = event.streams[0];\n const [remoteStream] = event.streams;\n if (!audioContextRef.current || !audioAnalyzersRef.current.outputAnalyser || !remoteStream) return;\n if (outputSourceRef.current) outputSourceRef.current.disconnect();\n outputSourceRef.current = audioContextRef.current.createMediaStreamSource(remoteStream);\n outputSourceRef.current.connect(audioAnalyzersRef.current.outputAnalyser);\n };\n\n const mediaStream = await navigator.mediaDevices.getUserMedia({\n audio: {\n echoCancellation: true,\n noiseSuppression: true,\n autoGainControl: true,\n channelCount: 1,\n sampleRate: 48000,\n },\n });\n\n localStreamRef.current = mediaStream;\n const [track] = mediaStream.getAudioTracks();\n\n const AudioContextConstructor = globalThis.AudioContext || globalThis.webkitAudioContext;\n if (!AudioContextConstructor) throw new Error('AudioContext not supported');\n const audioContext = new AudioContextConstructor();\n audioContextRef.current = audioContext;\n if (audioContext.state === 'suspended') await audioContext.resume();\n const inputAnalyser = audioContext.createAnalyser();\n const outputAnalyser = audioContext.createAnalyser();\n inputAnalyser.fftSize = 1024;\n outputAnalyser.fftSize = 1024;\n audioAnalyzersRef.current.inputAnalyser = inputAnalyser;\n audioAnalyzersRef.current.outputAnalyser = outputAnalyser;\n inputFrequencyDataRef.current = new Uint8Array(inputAnalyser.frequencyBinCount);\n outputFrequencyDataRef.current = new Uint8Array(outputAnalyser.frequencyBinCount);\n audioAnalyzersRef.current.getInputByteFrequencyData = () => {\n if (!audioAnalyzersRef.current.inputAnalyser || !inputFrequencyDataRef.current) return null;\n audioAnalyzersRef.current.inputAnalyser.getByteFrequencyData(inputFrequencyDataRef.current);\n return inputFrequencyDataRef.current;\n };\n audioAnalyzersRef.current.getOutputByteFrequencyData = () => {\n if (!audioAnalyzersRef.current.outputAnalyser || !outputFrequencyDataRef.current) return null;\n audioAnalyzersRef.current.outputAnalyser.getByteFrequencyData(outputFrequencyDataRef.current);\n return outputFrequencyDataRef.current;\n };\n\n const inputSource = audioContext.createMediaStreamSource(mediaStream);\n inputSourceRef.current = inputSource;\n inputSource.connect(inputAnalyser);\n\n if (track) {\n await track.applyConstraints({\n echoCancellation: true,\n noiseSuppression: true,\n autoGainControl: true,\n });\n peerConnection.addTrack(track, mediaStream);\n }\n\n const dataChannel = peerConnection.createDataChannel('oai-events');\n dataChannelRef.current = dataChannel;\n\n dataChannel.addEventListener('open', () => {\n pendingUserTranscriptRef.current = '';\n\n const localeHint = locale || 'en-US';\n const introductionMessage = `Respond in the language that matches the locale code \"${localeHint}\". Introduce yourself using the following sentence, translated into that language: \"Hello, I am ${assistant_name}, your virtual assistant. I can help you with information about our services and facilities. What would you like to know today?\"`;\n\n dataChannel.send(\n JSON.stringify({\n type: 'response.create',\n response: {\n instructions: introductionMessage,\n },\n }),\n );\n });\n\n dataChannel.addEventListener('message', (event) => {\n const payload = JSON.parse(event.data);\n\n if (payload.type === 'response.output_item.done' && payload.item?.type === 'mcp_call') {\n dataChannel.send(\n JSON.stringify({\n type: 'response.create',\n response: {\n instructions: 'Response to the user',\n },\n }),\n );\n }\n\n if (payload.type === 'response.function_call_arguments.done' && payload.name === 'open_url') {\n const { url } = JSON.parse(payload.arguments);\n window.location.href = url;\n }\n\n if (payload.type === 'conversation.item.input_audio_transcription.completed') {\n const transcript = payload.transcript?.trim();\n if (transcript) pendingUserTranscriptRef.current += transcript;\n }\n\n if (payload.type === 'response.output_audio_transcript.done') {\n const transcript = payload.transcript?.trim();\n if (!transcript || !pendingUserTranscriptRef.current) return;\n\n const input = pendingUserTranscriptRef.current.trim();\n pendingUserTranscriptRef.current = '';\n\n const activeLocale = locale || 'en-US';\n\n Event.publish(EVENT.METRICS, {\n id: 'SYNAPSE_RESPONSE',\n fingerprint,\n text: transcript,\n input,\n agent: 'aura',\n locale: activeLocale,\n });\n }\n });\n\n const offer = await peerConnection.createOffer();\n await peerConnection.setLocalDescription(offer);\n\n const sdpResponse = await fetch('https://api.openai.com/v1/realtime/calls', {\n method: 'POST',\n body: offer.sdp,\n headers: {\n Authorization: `Bearer ${ephemeralKey}`,\n 'Content-Type': 'application/sdp',\n },\n });\n\n if (!sdpResponse.ok) throw new Error('Failed to establish OpenAI Realtime session');\n\n const answer = { type: 'answer', sdp: await sdpResponse.text() };\n\n await peerConnection.setRemoteDescription(answer);\n } finally {\n setIsConnecting(false);\n setReady(true);\n }\n },\n [cleanupRealtimeSession],\n );\n\n const endSession = useCallback(() => {\n cleanupRealtimeSession(true);\n }, [cleanupRealtimeSession]);\n\n return { startSession, endSession, audioAnalyzers: audioAnalyzersRef.current };\n};\n\nexport { useOpenAiRealtimeSession };\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -13,18 +13,16 @@ var _Input = require("./Input.Context");
|
|
|
13
13
|
var _Input2 = require("./Input.l10n");
|
|
14
14
|
var style = _interopRequireWildcard(require("./Input.module.css"));
|
|
15
15
|
var _helpers = require("../../../helpers");
|
|
16
|
-
const _excluded = ["disabled", "entities", "
|
|
16
|
+
const _excluded = ["disabled", "entities", "value", "onValue"];
|
|
17
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
17
18
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
18
19
|
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
19
20
|
function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
|
|
20
21
|
function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
|
|
21
|
-
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
22
|
-
const Aura = /*#__PURE__*/_react.default.lazy(() => Promise.resolve().then(() => _interopRequireWildcard(require('../Aura'))));
|
|
23
22
|
const Input = _ref => {
|
|
24
23
|
let {
|
|
25
24
|
disabled = false,
|
|
26
25
|
entities = {},
|
|
27
|
-
hasAura = false,
|
|
28
26
|
value: propValue,
|
|
29
27
|
onValue = () => {}
|
|
30
28
|
} = _ref,
|
|
@@ -90,9 +88,7 @@ const Input = _ref => {
|
|
|
90
88
|
}, /*#__PURE__*/_react.default.createElement(_ui.Icon, {
|
|
91
89
|
light: isEmpty,
|
|
92
90
|
value: _helpers.ICON.ARROW_UP
|
|
93
|
-
}))
|
|
94
|
-
fallback: _react.default.Fragment
|
|
95
|
-
}, /*#__PURE__*/_react.default.createElement(Aura, null)));
|
|
91
|
+
})));
|
|
96
92
|
};
|
|
97
93
|
exports.Input = Input;
|
|
98
94
|
Input.propTypes = {
|
|
@@ -106,7 +102,6 @@ Input.propTypes = {
|
|
|
106
102
|
pinCode: _propTypes.default.string,
|
|
107
103
|
promotionCode: _propTypes.default.string
|
|
108
104
|
}),
|
|
109
|
-
hasAura: _propTypes.default.bool,
|
|
110
105
|
value: _propTypes.default.any,
|
|
111
106
|
onValue: _propTypes.default.func
|
|
112
107
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Input.js","names":["_dataSources","require","_locale","_ui","_propTypes","_interopRequireDefault","_react","_interopRequireWildcard","_Input","_Input2","style","_helpers","_excluded","e","__esModule","default","_extends","Object","assign","bind","n","arguments","length","t","r","hasOwnProperty","call","apply","_objectWithoutProperties","o","i","_objectWithoutPropertiesLoose","getOwnPropertySymbols","indexOf","propertyIsEnumerable","WeakMap","f","__proto__","has","get","set","defineProperty","getOwnPropertyDescriptor","Aura","React","lazy","Promise","resolve","then","Input","_ref","disabled","entities","hasAura","value","propValue","onValue","others","isDesktop","useDevice","translate","useLocale","inputRef","useRef","focus","setFocus","useState","setValue","useEffect","_inputRef$current","current","handleChange","event","target","handleKeyPress","key","undefined","handlePress","isEmpty","Event","publish","EVENT","SARAI_MESSAGE_SENT","message","trim","createElement","View","row","className","styles","container","wide","Primitive","autoFocus","name","placeholder","L10N","LABEL_SEND_MESSAGE","ref","tag","onBlur","onChange","onFocus","onKeyPress","input","Context","Button","squared","tooltip","ACTION_SEND","top","onPress","button","Icon","light","ICON","ARROW_UP","Suspense","fallback","Fragment","exports","propTypes","PropTypes","bool","shape","adults","number","bookingId","string","checkIn","checkOut","childrenAges","arrayOf","pinCode","promotionCode","any","func"],"sources":["../../../../../src/components/Chat/components/Input/Input.jsx"],"sourcesContent":["import { Event } from '@mirai/data-sources';\nimport { useLocale } from '@mirai/locale';\nimport { Button, Icon, Primitive, styles, useDevice, View } from '@mirai/ui';\nimport PropTypes from 'prop-types';\nimport React, { Suspense, useEffect, useRef, useState } from 'react';\n\nimport { Context } from './Input.Context';\nimport { L10N } from './Input.l10n';\nimport * as style from './Input.module.css';\nimport { EVENT, ICON } from '../../../helpers';\n\nconst Aura = React.lazy(() => import('../Aura'));\n\nconst Input = ({\n disabled = false,\n entities = {},\n hasAura = false,\n value: propValue,\n onValue = () => {},\n ...others\n}) => {\n const { isDesktop } = useDevice();\n const { translate } = useLocale();\n const inputRef = useRef(null);\n\n const [focus, setFocus] = useState(false);\n const [value, setValue] = useState(propValue);\n\n useEffect(() => {\n setValue(propValue);\n if (!propValue) return;\n\n inputRef.current?.focus();\n setFocus(true);\n }, [propValue]);\n\n const handleChange = (event) => {\n setValue(event.target.value);\n };\n\n const handleKeyPress = ({ key } = {}) => {\n if (key === 'Enter') handlePress();\n };\n\n const handlePress = () => {\n setValue('');\n if (isEmpty) return;\n\n Event.publish(EVENT.SARAI_MESSAGE_SENT, { message: value });\n onValue(value);\n };\n\n const isEmpty = !value || value.trim().length === 0;\n\n return (\n <View {...others} row className={styles(style.container, focus && style.focus, others.className)}>\n <View wide>\n <Primitive\n autoFocus={isDesktop}\n name=\"input\"\n placeholder={translate(L10N.LABEL_SEND_MESSAGE)}\n ref={inputRef}\n tag=\"textarea\"\n value={value}\n onBlur={() => setFocus(false)}\n onChange={handleChange}\n onFocus={() => setFocus(true)}\n onKeyPress={handleKeyPress}\n className={style.input}\n />\n <Context {...entities} />\n </View>\n\n <Button\n disabled={disabled || !value}\n squared\n tooltip={translate(L10N.ACTION_SEND)}\n top\n onPress={handlePress}\n className={style.button}\n >\n <Icon light={isEmpty} value={ICON.ARROW_UP} />\n </Button>\n {hasAura && (\n <Suspense fallback={React.Fragment}>\n <Aura />\n </Suspense>\n )}\n </View>\n );\n};\n\nInput.propTypes = {\n disabled: PropTypes.bool,\n entities: PropTypes.shape({\n adults: PropTypes.number,\n bookingId: PropTypes.string,\n checkIn: PropTypes.string,\n checkOut: PropTypes.string,\n childrenAges: PropTypes.arrayOf(PropTypes.number),\n pinCode: PropTypes.string,\n promotionCode: PropTypes.string,\n }),\n hasAura: PropTypes.bool,\n value: PropTypes.any,\n onValue: PropTypes.func,\n};\n\nexport { Input };\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"Input.js","names":["_dataSources","require","_locale","_ui","_propTypes","_interopRequireDefault","_react","_interopRequireWildcard","_Input","_Input2","style","_helpers","_excluded","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_extends","assign","bind","arguments","length","apply","_objectWithoutProperties","_objectWithoutPropertiesLoose","getOwnPropertySymbols","indexOf","propertyIsEnumerable","Input","_ref","disabled","entities","value","propValue","onValue","others","isDesktop","useDevice","translate","useLocale","inputRef","useRef","focus","setFocus","useState","setValue","useEffect","_inputRef$current","current","handleChange","event","target","handleKeyPress","key","undefined","handlePress","isEmpty","Event","publish","EVENT","SARAI_MESSAGE_SENT","message","trim","createElement","View","row","className","styles","container","wide","Primitive","autoFocus","name","placeholder","L10N","LABEL_SEND_MESSAGE","ref","tag","onBlur","onChange","onFocus","onKeyPress","input","Context","Button","squared","tooltip","ACTION_SEND","top","onPress","button","Icon","light","ICON","ARROW_UP","exports","propTypes","PropTypes","bool","shape","adults","number","bookingId","string","checkIn","checkOut","childrenAges","arrayOf","pinCode","promotionCode","any","func"],"sources":["../../../../../src/components/Chat/components/Input/Input.jsx"],"sourcesContent":["import { Event } from '@mirai/data-sources';\nimport { useLocale } from '@mirai/locale';\nimport { Button, Icon, Primitive, styles, useDevice, View } from '@mirai/ui';\nimport PropTypes from 'prop-types';\nimport React, { useEffect, useRef, useState } from 'react';\n\nimport { Context } from './Input.Context';\nimport { L10N } from './Input.l10n';\nimport * as style from './Input.module.css';\nimport { EVENT, ICON } from '../../../helpers';\n\nconst Input = ({ disabled = false, entities = {}, value: propValue, onValue = () => {}, ...others }) => {\n const { isDesktop } = useDevice();\n const { translate } = useLocale();\n const inputRef = useRef(null);\n\n const [focus, setFocus] = useState(false);\n const [value, setValue] = useState(propValue);\n\n useEffect(() => {\n setValue(propValue);\n if (!propValue) return;\n\n inputRef.current?.focus();\n setFocus(true);\n }, [propValue]);\n\n const handleChange = (event) => {\n setValue(event.target.value);\n };\n\n const handleKeyPress = ({ key } = {}) => {\n if (key === 'Enter') handlePress();\n };\n\n const handlePress = () => {\n setValue('');\n if (isEmpty) return;\n\n Event.publish(EVENT.SARAI_MESSAGE_SENT, { message: value });\n onValue(value);\n };\n\n const isEmpty = !value || value.trim().length === 0;\n\n return (\n <View {...others} row className={styles(style.container, focus && style.focus, others.className)}>\n <View wide>\n <Primitive\n autoFocus={isDesktop}\n name=\"input\"\n placeholder={translate(L10N.LABEL_SEND_MESSAGE)}\n ref={inputRef}\n tag=\"textarea\"\n value={value}\n onBlur={() => setFocus(false)}\n onChange={handleChange}\n onFocus={() => setFocus(true)}\n onKeyPress={handleKeyPress}\n className={style.input}\n />\n <Context {...entities} />\n </View>\n\n <Button\n disabled={disabled || !value}\n squared\n tooltip={translate(L10N.ACTION_SEND)}\n top\n onPress={handlePress}\n className={style.button}\n >\n <Icon light={isEmpty} value={ICON.ARROW_UP} />\n </Button>\n </View>\n );\n};\n\nInput.propTypes = {\n disabled: PropTypes.bool,\n entities: PropTypes.shape({\n adults: PropTypes.number,\n bookingId: PropTypes.string,\n checkIn: PropTypes.string,\n checkOut: PropTypes.string,\n childrenAges: PropTypes.arrayOf(PropTypes.number),\n pinCode: PropTypes.string,\n promotionCode: PropTypes.string,\n }),\n value: PropTypes.any,\n onValue: PropTypes.func,\n};\n\nexport { Input };\n"],"mappings":"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","ignoreList":[]}
|