@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.
Files changed (36) hide show
  1. package/build/components/Chat/Chat.constants.js +5 -1
  2. package/build/components/Chat/Chat.constants.js.map +1 -1
  3. package/build/components/Chat/Chat.js +9 -5
  4. package/build/components/Chat/Chat.js.map +1 -1
  5. package/build/components/Chat/components/Aura/Aura.js +126 -36
  6. package/build/components/Chat/components/Aura/Aura.js.map +1 -1
  7. package/build/components/Chat/components/Aura/Aura.l10n.js +15 -0
  8. package/build/components/Chat/components/Aura/Aura.l10n.js.map +1 -0
  9. package/build/components/Chat/components/Aura/Aura.module.css +109 -4
  10. package/build/components/Chat/components/{AiHalo/AiHalo.js → Aura/Aura.waveform.js} +27 -43
  11. package/build/components/Chat/components/Aura/Aura.waveform.js.map +1 -0
  12. package/build/components/Chat/components/Aura/helpers/elevenLabs.js +42 -0
  13. package/build/components/Chat/components/Aura/helpers/elevenLabs.js.map +1 -0
  14. package/build/components/Chat/components/Aura/helpers/index.js +17 -0
  15. package/build/components/Chat/components/Aura/helpers/index.js.map +1 -0
  16. package/build/components/Chat/components/Aura/hooks/useOpenAiRealtimeSession.js +237 -0
  17. package/build/components/Chat/components/Aura/hooks/useOpenAiRealtimeSession.js.map +1 -0
  18. package/build/components/Chat/components/Input/Input.js +3 -8
  19. package/build/components/Chat/components/Input/Input.js.map +1 -1
  20. package/build/components/Chat/components/Welcome/Welcome.js +37 -105
  21. package/build/components/Chat/components/Welcome/Welcome.js.map +1 -1
  22. package/build/components/Chat/components/Welcome/Welcome.l10n.js +14 -2
  23. package/build/components/Chat/components/Welcome/Welcome.l10n.js.map +1 -1
  24. package/build/components/Chat/components/Welcome/Welcome.module.css +29 -9
  25. package/build/components/helpers/ICON.js +1 -0
  26. package/build/components/helpers/ICON.js.map +1 -1
  27. package/package.json +1 -1
  28. package/build/components/Chat/components/AiHalo/AiHalo.js.map +0 -1
  29. package/build/components/Chat/components/AiHalo/AiHalo.module.css +0 -92
  30. package/build/components/Chat/components/AiHalo/index.js +0 -13
  31. package/build/components/Chat/components/AiHalo/index.js.map +0 -1
  32. package/build/components/Chat/components/Welcome/Welcome.Destination.js +0 -133
  33. package/build/components/Chat/components/Welcome/Welcome.Destination.js.map +0 -1
  34. package/build/components/Chat/components/Welcome/Welcome.Destination.module.css +0 -93
  35. package/build/components/Chat/helpers/auraHelpers.js +0 -135
  36. 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.AiHalo = void 0;
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("./AiHalo.module.css"));
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
- 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); }
15
- 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; }
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
- children,
20
- active = false,
21
- sensitivity = 1,
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 * sensitivity, 1);
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 * sensitivity, 1);
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, sensitivity]);
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
- const getAuraOpacity = () => {
76
- if (!active) return 0;
77
- return Math.max(0.3, currentAudioLevel * 0.7);
78
- };
79
- const auraStyle = {
80
- '--aura-scale': getAuraScale(),
81
- '--aura-opacity': getAuraOpacity(),
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("div", {
90
- className: style.auraPulse
91
- }), /*#__PURE__*/_react.default.createElement("div", {
92
- className: style.auraGlow
93
- }), /*#__PURE__*/_react.default.createElement("div", {
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
- }, children));
82
+ }));
96
83
  };
97
- exports.AiHalo = AiHalo;
98
- AiHalo.displayName = 'Mirai:Core:Chat.AiHalo';
99
- AiHalo.propTypes = {
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=AiHalo.js.map
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", "hasAura", "value", "onValue"];
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
- })), hasAura && /*#__PURE__*/_react.default.createElement(_react.Suspense, {
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":[]}