@@ -31,8 +31,7 @@ func (c *ApiController) GetGlobalChats() { | |||
} | |||
func (c *ApiController) GetChats() { | |||
owner := c.Input().Get("owner") | |||
owner := "admin" | |||
chats, err := object.GetChats(owner) | |||
if err != nil { | |||
c.ResponseError(err.Error()) | |||
@@ -81,6 +80,7 @@ func (c *ApiController) AddChat() { | |||
return | |||
} | |||
chat.Owner = "admin" | |||
success, err := object.AddChat(&chat) | |||
if err != nil { | |||
c.ResponseError(err.Error()) | |||
@@ -35,27 +35,26 @@ func (c *ApiController) GetGlobalMessages() { | |||
} | |||
func (c *ApiController) GetMessages() { | |||
owner := c.Input().Get("owner") | |||
owner := "admin" | |||
chat := c.Input().Get("chat") | |||
if owner != "" && chat == "" { | |||
if chat == "" { | |||
messages, err := object.GetMessages(owner) | |||
if err != nil { | |||
c.ResponseError(err.Error()) | |||
return | |||
} | |||
c.ResponseOk(messages) | |||
} else if chat != "" && owner == "" { | |||
messages, err := object.GetChatMessages(chat) | |||
if err != nil { | |||
c.ResponseError(err.Error()) | |||
return | |||
} | |||
c.ResponseOk(messages) | |||
} else { | |||
c.ResponseError("Invalid get messages request") | |||
return | |||
} | |||
messages, err := object.GetChatMessages(chat) | |||
if err != nil { | |||
c.ResponseError(err.Error()) | |||
return | |||
} | |||
c.ResponseOk(messages) | |||
} | |||
func (c *ApiController) GetMessage() { | |||
@@ -31,7 +31,7 @@ func (c *ApiController) GetGlobalProviders() { | |||
} | |||
func (c *ApiController) GetProviders() { | |||
owner := c.Input().Get("owner") | |||
owner := "admin" | |||
providers, err := object.GetProviders(owner) | |||
if err != nil { | |||
@@ -81,6 +81,7 @@ func (c *ApiController) AddProvider() { | |||
return | |||
} | |||
provider.Owner = "admin" | |||
success, err := object.AddProvider(&provider) | |||
if err != nil { | |||
c.ResponseError(err.Error()) | |||
@@ -58,7 +58,7 @@ func GetChats(owner string) ([]*Chat, error) { | |||
} | |||
func getChat(owner, name string) (*Chat, error) { | |||
chat := Chat{Owner: owner, Name: name} | |||
chat := Chat{Owner: "admin", Name: name} | |||
existed, err := adapter.engine.Get(&chat) | |||
if err != nil { | |||
return nil, err | |||
@@ -72,7 +72,7 @@ func GetOwnerAndNameFromId(id string) (string, string) { | |||
panic(errors.New("GetOwnerAndNameFromId() error, wrong token count for ID: " + id)) | |||
} | |||
return tokens[0], tokens[1] | |||
return "admin", tokens[1] | |||
} | |||
func GetOwnerAndNameFromId3(id string) (string, string, string) { | |||
@@ -5,6 +5,8 @@ | |||
"dependencies": { | |||
"@ant-design/cssinjs": "^1.12.0", | |||
"@ant-design/icons": "4.6.2", | |||
"@chatscope/chat-ui-kit-react": "^1.10.1", | |||
"@chatscope/chat-ui-kit-styles": "^1.4.0", | |||
"@craco/craco": "6.4.5", | |||
"@cyntler/react-doc-viewer": "^1.5.2", | |||
"aliplayer-react": "^0.7.0", | |||
@@ -19,6 +21,7 @@ | |||
"eslint-plugin-unused-imports": "^2.0.0", | |||
"file-saver": "^2.0.2", | |||
"i18next": "^19.8.9", | |||
"markdown-it": "^13.0.1", | |||
"moment": "^2.29.1", | |||
"papaparse": "^5.4.1", | |||
"rc-bullets": "^1.5.16", | |||
@@ -100,3 +100,23 @@ img { | |||
color: black; | |||
} | |||
} | |||
.cs-message--incoming .cs-message__content { | |||
background-color: #f3ecfc !important; | |||
} | |||
.cs-message-input__content-editor-wrapper { | |||
background-color: #f3ecfc !important; | |||
} | |||
.cs-message-input__content-editor { | |||
background-color: #f3ecfc !important; | |||
} | |||
.cs-button--send { | |||
color: #614d99; | |||
} | |||
.cs-message--outgoing .cs-message__content { | |||
background-color: #f3ecfc !important; | |||
} |
@@ -13,205 +13,47 @@ | |||
// limitations under the License. | |||
import React from "react"; | |||
import {Alert, Avatar, Input, List, Spin} from "antd"; | |||
import {CopyOutlined, DislikeOutlined, LikeOutlined, SendOutlined} from "@ant-design/icons"; | |||
import i18next from "i18next"; | |||
import {Avatar, ChatContainer, ConversationHeader, MainContainer, Message, MessageInput, MessageList} from "@chatscope/chat-ui-kit-react"; | |||
import "@chatscope/chat-ui-kit-styles/dist/default/styles.min.css"; | |||
const {TextArea} = Input; | |||
const robot = "https://cdn.casbin.com/casdoor/resource/built-in/admin/gpt.png"; | |||
class ChatBox extends React.Component { | |||
constructor(props) { | |||
super(props); | |||
this.state = { | |||
inputValue: "", | |||
}; | |||
this.listContainerRef = React.createRef(); | |||
} | |||
componentDidUpdate(prevProps) { | |||
if (prevProps.messages !== this.props.messages && this.props.messages !== undefined && this.props.messages !== null) { | |||
this.scrollToListItem(this.props.messages.length); | |||
} | |||
} | |||
handleKeyDown = (e) => { | |||
if (e.key === "Enter" && !e.shiftKey) { | |||
e.preventDefault(); | |||
if (this.state.inputValue !== "") { | |||
this.send(this.state.inputValue); | |||
this.setState({inputValue: ""}); | |||
} | |||
} | |||
handleSend = (innerHtml, textContent) => { | |||
this.props.sendMessage(textContent); | |||
}; | |||
scrollToListItem(index) { | |||
const listContainerElement = this.listContainerRef.current; | |||
if (!listContainerElement) { | |||
return; | |||
} | |||
const targetItem = listContainerElement.querySelector( | |||
`#chatbox-list-item-${index}` | |||
); | |||
if (!targetItem) { | |||
return; | |||
} | |||
const scrollDistance = targetItem.offsetTop - listContainerElement.offsetTop; | |||
listContainerElement.scrollTo({ | |||
top: scrollDistance, | |||
behavior: "smooth", | |||
}); | |||
} | |||
send = (text) => { | |||
this.props.sendMessage(text); | |||
this.setState({inputValue: ""}); | |||
}; | |||
renderText(text) { | |||
const lines = text.split("\n").map((line, index) => ( | |||
<React.Fragment key={index}> | |||
{line} | |||
<br /> | |||
</React.Fragment> | |||
)); | |||
return <div>{lines}</div>; | |||
} | |||
renderList() { | |||
if (this.props.messages === undefined || this.props.messages === null) { | |||
return ( | |||
<div style={{display: "flex", justifyContent: "center", alignItems: "center"}}> | |||
<Spin size="large" tip={i18next.t("login:Loading")} style={{paddingTop: "20%"}} /> | |||
</div> | |||
); | |||
} | |||
return ( | |||
<React.Fragment> | |||
<div ref={this.listContainerRef} style={{position: "relative", maxHeight: "calc(100vh - 140px)", overflowY: "auto"}}> | |||
<List | |||
itemLayout="horizontal" | |||
dataSource={[...this.props.messages, {}]} | |||
renderItem={(item, index) => { | |||
if (Object.keys(item).length === 0 && item.constructor === Object) { | |||
return <List.Item id={`chatbox-list-item-${index}`} style={{ | |||
height: "160px", | |||
backgroundColor: index % 2 === 0 ? "white" : "rgb(247,247,248)", | |||
borderBottom: "1px solid rgb(229, 229, 229)", | |||
position: "relative", | |||
}} />; | |||
} | |||
return ( | |||
<List.Item id={`chatbox-list-item-${index}`} style={{ | |||
backgroundColor: index % 2 === 0 ? "white" : "rgb(247,247,248)", | |||
borderBottom: "1px solid rgb(229, 229, 229)", | |||
position: "relative", | |||
}}> | |||
<div style={{width: "800px", margin: "0 auto", position: "relative"}}> | |||
<List.Item.Meta | |||
avatar={<Avatar style={{width: "30px", height: "30px", borderRadius: "3px"}} src={item.author === `${this.props.account.owner}/${this.props.account.name}` ? this.props.account.avatar : "https://cdn.casbin.com/casdoor/resource/built-in/admin/gpt.png"} />} | |||
title={ | |||
<div style={{fontSize: "16px", fontWeight: "normal", lineHeight: "24px", marginTop: "-15px", marginLeft: "5px", marginRight: "80px"}}> | |||
{ | |||
!item.text.includes("#ERROR#") ? this.renderText(item.text) : ( | |||
<Alert message={item.text.slice("#ERROR#: ".length)} type="error" showIcon /> | |||
) | |||
} | |||
</div> | |||
} | |||
/> | |||
<div style={{position: "absolute", top: "0px", right: "0px"}}> | |||
<CopyOutlined style={{color: "rgb(172,172,190)", margin: "5px"}} /> | |||
<LikeOutlined style={{color: "rgb(172,172,190)", margin: "5px"}} /> | |||
<DislikeOutlined style={{color: "rgb(172,172,190)", margin: "5px"}} /> | |||
</div> | |||
</div> | |||
</List.Item> | |||
); | |||
}} | |||
/> | |||
</div> | |||
<div style={{ | |||
position: "absolute", | |||
bottom: 0, | |||
left: 0, | |||
right: 0, | |||
height: "120px", | |||
background: "linear-gradient(transparent 0%, rgba(255, 255, 255, 0.8) 50%, white 100%)", | |||
pointerEvents: "none", | |||
}} /> | |||
</React.Fragment> | |||
); | |||
} | |||
renderInput() { | |||
return ( | |||
<div | |||
style={{ | |||
position: "fixed", | |||
bottom: "90px", | |||
width: "100%", | |||
display: "flex", | |||
justifyContent: "center", | |||
}} | |||
> | |||
<div style={{position: "relative", width: "760px", marginLeft: "-280px"}}> | |||
<TextArea | |||
placeholder={"Send a message..."} | |||
autoSize={{maxRows: 8}} | |||
value={this.state.inputValue} | |||
onChange={(e) => this.setState({inputValue: e.target.value})} | |||
onKeyDown={this.handleKeyDown} | |||
style={{ | |||
fontSize: "16px", | |||
fontWeight: "normal", | |||
lineHeight: "24px", | |||
width: "770px", | |||
height: "48px", | |||
borderRadius: "6px", | |||
borderColor: "rgb(229,229,229)", | |||
boxShadow: "0 0 15px rgba(0, 0, 0, 0.1)", | |||
paddingLeft: "17px", | |||
paddingRight: "17px", | |||
paddingTop: "12px", | |||
paddingBottom: "12px", | |||
}} | |||
suffix={<SendOutlined style={{color: "rgb(210,210,217"}} onClick={() => this.send(this.state.inputValue)} />} | |||
autoComplete="off" | |||
/> | |||
<SendOutlined | |||
style={{ | |||
color: this.state.inputValue === "" ? "rgb(210,210,217)" : "rgb(142,142,160)", | |||
position: "absolute", | |||
bottom: "17px", | |||
right: "17px", | |||
}} | |||
onClick={() => this.send(this.state.inputValue)} | |||
/> | |||
</div> | |||
</div> | |||
); | |||
} | |||
render() { | |||
let messages = this.props.messages; | |||
if (messages === null) { | |||
messages = []; | |||
} | |||
return ( | |||
<div> | |||
{ | |||
this.renderList() | |||
} | |||
{ | |||
this.renderInput() | |||
} | |||
</div> | |||
<MainContainer style={{display: "flex", width: "100%", height: "100%"}} > | |||
<ChatContainer style={{display: "flex", width: "100%", height: "100%"}}> | |||
<ConversationHeader> | |||
<Avatar src={robot} name="AI" /> | |||
<ConversationHeader.Content userName="AI" /> | |||
</ConversationHeader> | |||
<MessageList> | |||
{messages.map((message, index) => ( | |||
<Message key={index} model={{ | |||
message: message.text, | |||
sentTime: "just now", | |||
sender: message.name, | |||
direction: message.author === "AI" ? "incoming" : "outgoing", | |||
}} avatarPosition={message.author === "AI" ? "tl" : "tr"}> | |||
<Avatar src={message.author === "AI" ? robot : this.props.account.avatar} name="GPT" /> | |||
</Message> | |||
))} | |||
</MessageList> | |||
<MessageInput placeholder="Type message here" onSend={this.handleSend} /> | |||
</ChatContainer> | |||
</MainContainer> | |||
); | |||
} | |||
} | |||
@@ -1250,6 +1250,24 @@ | |||
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" | |||
integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== | |||
"@chatscope/chat-ui-kit-react@^1.10.1": | |||
version "1.10.1" | |||
resolved "https://registry.yarnpkg.com/@chatscope/chat-ui-kit-react/-/chat-ui-kit-react-1.10.1.tgz#cdf7ebef607bc527205eb8614ce4b8ac9f585b1e" | |||
integrity sha512-pJIxvM9zR2oPk601P/S3Du1lZZSQcv76+8/IUhhWo88oy1iqiw2yk71T3nzE0sr8kRfZ8FoSSxOjVx9j7amjow== | |||
dependencies: | |||
"@chatscope/chat-ui-kit-styles" "^1.2.0" | |||
"@fortawesome/fontawesome-free" "^5.12.1" | |||
"@fortawesome/fontawesome-svg-core" "^1.2.26" | |||
"@fortawesome/free-solid-svg-icons" "^5.12.0" | |||
"@fortawesome/react-fontawesome" "^0.1.8" | |||
classnames "^2.2.6" | |||
prop-types "^15.7.2" | |||
"@chatscope/chat-ui-kit-styles@^1.2.0", "@chatscope/chat-ui-kit-styles@^1.4.0": | |||
version "1.4.0" | |||
resolved "https://registry.yarnpkg.com/@chatscope/chat-ui-kit-styles/-/chat-ui-kit-styles-1.4.0.tgz#17ded0439d306f7cd2a81f40a2ef197a6ce6bb7b" | |||
integrity sha512-016mBJD3DESw7Nh+lkKcPd22xG92ghA0VpIXIbjQtmXhC7Ve6wRazTy8z1Ahut+Tbv179+JxrftuMngsj/yV8Q== | |||
"@craco/craco@6.4.5": | |||
version "6.4.5" | |||
resolved "https://registry.yarnpkg.com/@craco/craco/-/craco-6.4.5.tgz#471e67082a2ffd3edf73759b215bdc16250d27b3" | |||
@@ -1471,6 +1489,42 @@ | |||
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.44.0.tgz#961a5903c74139390478bdc808bcde3fc45ab7af" | |||
integrity sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw== | |||
"@fortawesome/fontawesome-common-types@^0.2.36": | |||
version "0.2.36" | |||
resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.36.tgz#b44e52db3b6b20523e0c57ef8c42d315532cb903" | |||
integrity sha512-a/7BiSgobHAgBWeN7N0w+lAhInrGxksn13uK7231n2m8EDPE3BMCl9NZLTGrj9ZXfCmC6LM0QLqXidIizVQ6yg== | |||
"@fortawesome/fontawesome-common-types@^0.3.0": | |||
version "0.3.0" | |||
resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.3.0.tgz#949995a05c0d8801be7e0a594f775f1dbaa0d893" | |||
integrity sha512-CA3MAZBTxVsF6SkfkHXDerkhcQs0QPofy43eFdbWJJkZiq3SfiaH1msOkac59rQaqto5EqWnASboY1dBuKen5w== | |||
"@fortawesome/fontawesome-free@^5.12.1": | |||
version "5.15.4" | |||
resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-5.15.4.tgz#ecda5712b61ac852c760d8b3c79c96adca5554e5" | |||
integrity sha512-eYm8vijH/hpzr/6/1CJ/V/Eb1xQFW2nnUKArb3z+yUWv7HTwj6M7SP957oMjfZjAHU6qpoNc2wQvIxBLWYa/Jg== | |||
"@fortawesome/fontawesome-svg-core@^1.2.26": | |||
version "1.3.0" | |||
resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.3.0.tgz#343fac91fa87daa630d26420bfedfba560f85885" | |||
integrity sha512-UIL6crBWhjTNQcONt96ExjUnKt1D68foe3xjEensLDclqQ6YagwCRYVQdrp/hW0ALRp/5Fv/VKw+MqTUWYYvPg== | |||
dependencies: | |||
"@fortawesome/fontawesome-common-types" "^0.3.0" | |||
"@fortawesome/free-solid-svg-icons@^5.12.0": | |||
version "5.15.4" | |||
resolved "https://registry.yarnpkg.com/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.4.tgz#2a68f3fc3ddda12e52645654142b9e4e8fbb6cc5" | |||
integrity sha512-JLmQfz6tdtwxoihXLg6lT78BorrFyCf59SAwBM6qV/0zXyVeDygJVb3fk+j5Qat+Yvcxp1buLTY5iDh1ZSAQ8w== | |||
dependencies: | |||
"@fortawesome/fontawesome-common-types" "^0.2.36" | |||
"@fortawesome/react-fontawesome@^0.1.8": | |||
version "0.1.19" | |||
resolved "https://registry.yarnpkg.com/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.19.tgz#2b36917578596f31934e71f92b7cf9c425fd06e4" | |||
integrity sha512-Hyb+lB8T18cvLNX0S3llz7PcSOAJMLwiVKBuuzwM/nI5uoBw+gQjnf9il0fR1C3DKOI5Kc79pkJ4/xB0Uw9aFQ== | |||
dependencies: | |||
prop-types "^15.8.1" | |||
"@humanwhocodes/config-array@^0.10.4": | |||
version "0.10.7" | |||
resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.10.7.tgz#6d53769fd0c222767e6452e8ebda825c22e9f0dc" | |||
@@ -4668,6 +4722,11 @@ entities@^2.0.0: | |||
resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" | |||
integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== | |||
entities@~3.0.1: | |||
version "3.0.1" | |||
resolved "https://registry.yarnpkg.com/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4" | |||
integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q== | |||
errno@^0.1.1: | |||
version "0.1.8" | |||
resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" | |||
@@ -7136,6 +7195,13 @@ lines-and-columns@^1.1.6: | |||
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" | |||
integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== | |||
linkify-it@^4.0.1: | |||
version "4.0.1" | |||
resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-4.0.1.tgz#01f1d5e508190d06669982ba31a7d9f56a5751ec" | |||
integrity sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw== | |||
dependencies: | |||
uc.micro "^1.0.1" | |||
lint-staged@^13.0.3: | |||
version "13.2.3" | |||
resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-13.2.3.tgz#f899aad6c093473467e9c9e316e3c2d8a28f87a7" | |||
@@ -7379,6 +7445,17 @@ map-obj@^4.0.0: | |||
resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" | |||
integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== | |||
markdown-it@^13.0.1: | |||
version "13.0.1" | |||
resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-13.0.1.tgz#c6ecc431cacf1a5da531423fc6a42807814af430" | |||
integrity sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q== | |||
dependencies: | |||
argparse "^2.0.1" | |||
entities "~3.0.1" | |||
linkify-it "^4.0.1" | |||
mdurl "^1.0.1" | |||
uc.micro "^1.0.5" | |||
mathml-tag-names@^2.1.3: | |||
version "2.1.3" | |||
resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz#4ddadd67308e780cf16a47685878ee27b736a0a3" | |||
@@ -7394,6 +7471,11 @@ mdn-data@2.0.4: | |||
resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" | |||
integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== | |||
mdurl@^1.0.1: | |||
version "1.0.1" | |||
resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" | |||
integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g== | |||
media-typer@0.3.0: | |||
version "0.3.0" | |||
resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" | |||
@@ -11011,6 +11093,11 @@ ua-parser-js@^0.7.24: | |||
resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.35.tgz#8bda4827be4f0b1dda91699a29499575a1f1d307" | |||
integrity sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g== | |||
uc.micro@^1.0.1, uc.micro@^1.0.5: | |||
version "1.0.6" | |||
resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" | |||
integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== | |||
unbox-primitive@^1.0.2: | |||
version "1.0.2" | |||
resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" | |||