@rpg-engine/long-bow 0.1.52 → 0.1.56

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.
@@ -1 +1 @@
1
- {"version":3,"file":"long-bow.esm.js","sources":["../src/components/Button.tsx","../src/components/CheckButton.tsx","../src/constants/uiColors.ts","../src/components/Input.tsx","../src/components/RPGUIContainer.tsx","../src/components/shared/Column.tsx","../src/components/Chat/Chat.tsx","../src/components/RPGUIRoot.tsx","../src/components/Dropdown.tsx","../src/components/ListMenu.tsx","../src/components/NPCDialog/img/npcDialog/npcThumbnails/alice.png","../src/components/NPCDialog/img/space.gif","../src/libs/StringHelpers.ts","../src/components/typography/DynamicText.tsx","../src/components/NPCDialog/NPCDialogText.tsx","../src/hooks/useEventListener.ts","../src/components/NPCDialog/QuestionDialog/QuestionDialog.tsx","../src/components/NPCDialog/NPCDialog.tsx","../src/components/ProgressBar.tsx","../src/components/RadioButton.tsx","../src/components/RangeSlider.tsx","../src/components/TextArea.tsx","../src/components/Truncate.tsx"],"sourcesContent":["import React from 'react';\nimport styled from 'styled-components';\n\nexport enum ButtonTypes {\n RPGUIButton = 'rpgui-button',\n RPGUIGoldButton = 'rpgui-button golden',\n}\n\nexport interface IButtonProps {\n children: React.ReactNode;\n buttonType: ButtonTypes;\n}\n\nexport const Button: React.FC<\n IButtonProps &\n React.DetailedHTMLProps<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n HTMLButtonElement\n >\n> = ({ children, buttonType, ...props }) => {\n return (\n <ButtonContainer className={`${buttonType}`} {...props}>\n <p>{children}</p>\n </ButtonContainer>\n );\n};\n\nconst ButtonContainer = styled.button<any>`\n height: 45px;\n font-size: 11.5px;\n`;\n","import React, { useEffect, useState } from 'react';\n\nexport interface ICheckItems {\n label: string;\n value: string;\n}\n\nexport interface ICheckProps {\n items: ICheckItems[];\n onChange: (selectedValues: IChecklistSelectedValues) => void;\n}\n\ninterface IChecklistSelectedValues {\n [label: string]: boolean;\n}\n\nexport const CheckButton: React.FC<ICheckProps> = ({ items, onChange }) => {\n const generateSelectedValuesList = () => {\n const selectedValues: IChecklistSelectedValues = {};\n\n items.forEach((item) => {\n selectedValues[item.label] = false;\n });\n\n return selectedValues;\n };\n\n const [selectedValues, setSelectedValues] =\n useState<IChecklistSelectedValues>(generateSelectedValuesList());\n\n const handleClick = (label: string) => {\n setSelectedValues({\n ...selectedValues,\n [label]: !selectedValues[label],\n });\n };\n\n useEffect(() => {\n if (selectedValues) {\n onChange(selectedValues);\n }\n }, [selectedValues]);\n\n return (\n <div id=\"elemento-checkbox\">\n {items?.map((element, index) => {\n return (\n <div key={`${element.label}_${index}`}>\n <input\n className=\"rpgui-checkbox\"\n type=\"checkbox\"\n checked={selectedValues[element.label]}\n onChange={() => {}}\n />\n <label onClick={() => handleClick(element.label)}>\n {element.label}\n </label>\n <br />\n </div>\n );\n })}\n </div>\n );\n};\n","export const colors = {\n darkGrey: '#3e3e3e',\n};\n","import React from 'react';\n\nexport interface IInputProps\n extends React.DetailedHTMLProps<\n React.InputHTMLAttributes<HTMLInputElement>,\n HTMLInputElement\n > {}\n\nexport const Input: React.FC<IInputProps> = ({ ...props }) => {\n return <input {...props} />;\n};\n","import React from 'react';\nimport styled from 'styled-components';\n\nexport enum RPGUIContainerTypes {\n Framed = 'framed',\n FramedGold = 'framed-golden',\n FramedGold2 = 'framed-golden-2',\n FramedGrey = 'framed-grey',\n}\nexport interface IRPGUIContainerProps {\n type: RPGUIContainerTypes;\n children: React.ReactNode;\n width?: string;\n height?: string;\n className?: string;\n}\n\nexport const RPGUIContainer: React.FC<IRPGUIContainerProps> = ({\n children,\n type,\n width = '50%',\n height,\n className,\n}) => {\n return (\n <Container\n width={width}\n height={height || 'auto'}\n className={`rpgui-container ${type} ${className}`}\n >\n {children}\n </Container>\n );\n};\n\ninterface IContainerProps {\n width: string;\n height: string;\n}\n\nconst Container = styled.div<IContainerProps>`\n height: ${(props) => props.height};\n width: ${({ width }) => width};\n display: flex;\n flex-wrap: wrap;\n image-rendering: pixelated;\n`;\n","import styled from 'styled-components';\n\ninterface IColumn {\n flex?: number;\n alignItems?: string;\n justifyContent?: string;\n flexWrap?: string;\n}\n\nexport const Column = styled.div<IColumn>`\n flex: ${(props) => props.flex || 'auto'};\n display: flex;\n flex-wrap: ${(props) => props.flexWrap || 'nowrap'};\n align-items: ${(props) => props.alignItems || 'flex-start'};\n justify-content: ${(props) => props.justifyContent || 'flex-start'};\n`;\n","import { IChatMessage } from '@rpg-engine/shared';\nimport dayjs from 'dayjs';\nimport React, { useEffect, useState } from 'react';\nimport { ErrorBoundary } from 'react-error-boundary';\nimport styled from 'styled-components';\nimport { colors } from '../../constants/uiColors';\nimport { Button, ButtonTypes } from '../Button';\nimport { Input } from '../Input';\nimport { RPGUIContainer, RPGUIContainerTypes } from '../RPGUIContainer';\nimport { Column } from '../shared/Column';\n\ninterface IEmitter {\n _id: string;\n name: string;\n}\nexport interface IChatProps {\n chatMessages: IChatMessage[];\n onSendChatMessage: (message: string) => void;\n onCloseButton: () => void;\n opacity?: number;\n width?: string;\n height?: string;\n}\n\nexport const Chat: React.FC<IChatProps> = ({\n chatMessages,\n onSendChatMessage,\n opacity = 1,\n width = '100%',\n height = '250px',\n onCloseButton,\n}) => {\n const [message, setMessage] = useState('');\n\n useEffect(() => {\n scrollChatToBottom();\n }, []);\n\n useEffect(() => {\n scrollChatToBottom();\n }, [chatMessages]);\n\n const scrollChatToBottom = () => {\n const scrollingElement = document.querySelector('.chat-body');\n if (scrollingElement) {\n scrollingElement.scrollTop = scrollingElement.scrollHeight;\n }\n };\n\n const handleSubmit = (event: React.SyntheticEvent<HTMLFormElement>) => {\n event.preventDefault();\n onSendChatMessage(message);\n setMessage('');\n };\n const getInputValue = (value: string) => {\n setMessage(value);\n };\n\n const onRenderMessageLines = (\n emitter: IEmitter,\n createdAt: string | undefined,\n message: string\n ) => {\n return `${dayjs(createdAt || new Date()).format('HH:mm')} ${\n emitter?.name ? `${emitter.name}: ` : 'Unknown: '\n } ${message}`;\n };\n\n const onRenderChatMessages = (chatMessages: IChatMessage[]) => {\n return chatMessages?.length ? (\n chatMessages?.map(({ _id, createdAt, emitter, message }, index) => (\n <MessageText key={`${_id}_${index}`}>\n {onRenderMessageLines(emitter, createdAt, message)}\n </MessageText>\n ))\n ) : (\n <MessageText>No messages available.</MessageText>\n );\n };\n\n return (\n <Container>\n <CustomContainer\n type={RPGUIContainerTypes.FramedGrey}\n width={width}\n height={height}\n className=\"chat-container\"\n opacity={opacity}\n >\n <ErrorBoundary fallback={<p>Oops! Your chat has crashed.</p>}>\n {onCloseButton && (\n <CloseButton onClick={onCloseButton} onTouchStart={onCloseButton}>\n X\n </CloseButton>\n )}\n <RPGUIContainer\n type={RPGUIContainerTypes.FramedGrey}\n width={'100%'}\n height={'80%'}\n className=\"chat-body dark-background\"\n >\n {onRenderChatMessages(chatMessages)}\n </RPGUIContainer>\n\n <Form onSubmit={handleSubmit}>\n <Column flex={70}>\n <CustomInput\n value={message}\n id=\"inputMessage\"\n onChange={(e) => getInputValue(e.target.value)}\n height={20}\n className=\"chat-input dark-background\"\n type=\"text\"\n autoComplete=\"off\"\n />\n </Column>\n <Column justifyContent=\"flex-end\">\n <Button\n buttonType={ButtonTypes.RPGUIButton}\n id=\"chat-send-button\"\n >\n Send\n </Button>\n </Column>\n </Form>\n </ErrorBoundary>\n </CustomContainer>\n </Container>\n );\n};\n\nconst Container = styled.div`\n position: relative;\n`;\n\nconst CloseButton = styled.div`\n position: absolute;\n top: 3px;\n right: 0px;\n color: white;\n z-index: 22;\n font-size: 10px;\n`;\n\nconst CustomInput = styled(Input)`\n height: 30px;\n width: 100%;\n\n .rpgui-content .input {\n min-height: 39px;\n }\n`;\n\ninterface ICustomContainerProps {\n opacity: number;\n}\n\nconst CustomContainer = styled(RPGUIContainer)`\n display: block;\n\n opacity: ${(props: ICustomContainerProps) => props.opacity};\n\n &:hover {\n opacity: 1;\n }\n\n .dark-background {\n background-color: ${colors.darkGrey} !important;\n }\n\n .chat-body {\n &.rpgui-container.framed-grey {\n background: unset;\n }\n max-height: 170px;\n overflow-y: auto;\n }\n`;\n\nconst Form = styled.form`\n display: flex;\n width: 100%;\n justify-content: center;\n align-items: center;\n`;\n\nconst MessageText = styled.p`\n display: block !important;\n width: 100%;\n font-size: 0.7rem !important;\n overflow-y: auto;\n margin: 0;\n`;\n","import React from 'react';\nimport 'rpgui/rpgui.min.css';\nimport 'rpgui/rpgui.min.js';\n\ninterface IProps {\n children: React.ReactNode;\n}\n\n//@ts-ignore\nexport const _RPGUI = RPGUI;\n\nexport const RPGUIRoot: React.FC<IProps> = ({ children }) => {\n return <div className=\"rpgui-content\">{children}</div>;\n};\n","import React, { useEffect, useState } from 'react';\nimport { v4 as uuidv4 } from 'uuid';\nimport { _RPGUI } from './RPGUIRoot';\n\nexport interface IOptionsProps {\n id: number;\n value: string;\n option: string;\n}\n\nexport interface IDropdownProps {\n options: IOptionsProps[];\n width?: string;\n onChange: (value: string) => void;\n}\n\nexport const Dropdown: React.FC<IDropdownProps> = ({\n options,\n width,\n onChange,\n}) => {\n const dropdownId = uuidv4();\n\n const [selectedValue, setSelectedValue] = useState<string>('');\n\n useEffect(() => {\n const element = document.getElementById(`rpgui-dropdown-${dropdownId}`);\n const dropdownValue = _RPGUI.get_value(element);\n setSelectedValue(dropdownValue);\n\n element?.addEventListener('change', (event: any) => {\n setSelectedValue(event?.target.value);\n });\n }, []);\n\n useEffect(() => {\n if (selectedValue) {\n onChange(selectedValue);\n }\n }, [selectedValue]);\n\n return (\n <select\n id={`rpgui-dropdown-${dropdownId}`}\n style={{ width: width }}\n className=\"rpgui-dropdown\"\n >\n {options.map((option) => {\n return (\n <option key={option.id} value={option.value}>\n {option.option}\n </option>\n );\n })}\n </select>\n );\n};\n","import React from 'react';\nimport styled from 'styled-components';\n\ninterface IListMenuOption {\n id: string;\n text: string;\n}\n\nexport interface IListMenuProps {\n x: number;\n y: number;\n options: IListMenuOption[];\n onSelected: (selectedOptionId: string) => void;\n fontSize?: number;\n}\n\nexport const ListMenu: React.FC<IListMenuProps> = ({\n options,\n onSelected,\n x,\n y,\n fontSize = 0.8,\n}) => {\n return (\n <Container x={x} y={y} fontSize={fontSize}>\n <ul className=\"rpgui-list-imp\" style={{ overflow: 'hidden' }}>\n {options.map((params) => (\n <ListElement\n key={params.text}\n onClick={() => {\n onSelected(params.id);\n }}\n >\n {params.text}\n </ListElement>\n ))}\n </ul>\n </Container>\n );\n};\n\ninterface IContainerProps {\n x?: number;\n y?: number;\n fontSize?: number;\n}\n\nconst Container = styled.div<IContainerProps>`\n display: flex;\n flex-direction: column;\n width: 100%;\n justify-content: start;\n align-items: flex-start;\n position: absolute;\n top: ${(props) => props.y || 0}px;\n left: ${(props) => props.x || 0}px;\n\n li {\n font-size: ${(props) => props.fontSize}em;\n }\n`;\n\nconst ListElement = styled.li`\n margin-right: 0.5rem;\n`;\n","const img = require('./alice.png'); export default img;","const img = require('./space.gif'); export default img;","export const chunkString = (str: string, length: number) => {\n return str.match(new RegExp('.{1,' + length + '}', 'g'));\n};\n","import React, { useEffect, useState } from 'react';\nimport styled from 'styled-components';\n\ninterface IProps {\n text: string;\n onFinish?: () => void;\n onStart?: () => void;\n}\n\nexport const DynamicText: React.FC<IProps> = ({ text, onFinish, onStart }) => {\n const [textState, setTextState] = useState<string>('');\n\n useEffect(() => {\n let i = 0;\n const interval = setInterval(() => {\n // on every interval, show one more character\n\n if (i === 0) {\n if (onStart) {\n onStart();\n }\n }\n\n if (i < text.length) {\n setTextState(text.substring(0, i + 1));\n i++;\n } else {\n clearInterval(interval);\n if (onFinish) {\n onFinish();\n }\n }\n }, 50);\n\n return () => {\n clearInterval(interval);\n };\n }, [text]);\n\n return <TextContainer>{textState}</TextContainer>;\n};\n\nconst TextContainer = styled.p`\n font-size: 0.7rem !important;\n color: white;\n text-shadow: 1px 1px 0px #000000;\n letter-spacing: 1.2px;\n word-break: normal;\n`;\n","import React, { useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport { chunkString } from '../../libs/StringHelpers';\nimport { DynamicText } from '../typography/DynamicText';\n\ninterface IProps {\n text: string;\n onClose: () => void;\n onEndStep: () => void;\n onStartStep: () => void;\n}\n\nexport const NPCDialogText: React.FC<IProps> = ({\n text,\n onClose,\n onEndStep,\n onStartStep,\n}) => {\n const textChunks = chunkString(text, 85);\n\n const [chunkIndex, setChunkIndex] = useState<number>(0);\n\n const onHandleSpacePress = (event: KeyboardEvent) => {\n if (event.code === 'Space') {\n const hasNextChunk = textChunks?.[chunkIndex + 1] || false;\n\n if (hasNextChunk) {\n setChunkIndex((prev) => prev + 1);\n } else {\n // if there's no more text chunks, close the dialog\n onClose();\n }\n }\n };\n\n useEffect(() => {\n document.addEventListener('keydown', onHandleSpacePress);\n\n return () => document.removeEventListener('keydown', onHandleSpacePress);\n }, [chunkIndex]);\n\n return (\n <Container>\n <DynamicText\n text={textChunks?.[chunkIndex] || ''}\n onFinish={onEndStep}\n onStart={onStartStep}\n />\n </Container>\n );\n};\n\nconst Container = styled.div``;\n","import React from 'react';\n\n//@ts-ignore\nexport const useEventListener = (type, handler, el = window) => {\n const savedHandler = React.useRef();\n\n React.useEffect(() => {\n savedHandler.current = handler;\n }, [handler]);\n\n React.useEffect(() => {\n //@ts-ignore\n const listener = (e) => savedHandler.current(e);\n\n el.addEventListener(type, listener);\n\n return () => {\n el.removeEventListener(type, listener);\n };\n }, [type, el]);\n};\n","import React, { useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport { useEventListener } from '../../../hooks/useEventListener';\nimport { DynamicText } from '../../typography/DynamicText';\n\nexport interface IQuestionDialogAnswer {\n id: number;\n text: string;\n nextQuestionId?: number;\n}\n\nexport interface IQuestionDialog {\n id: number;\n text: string;\n answerIds?: number[];\n}\n\nexport interface IProps {\n questions: IQuestionDialog[];\n answers: IQuestionDialogAnswer[];\n onClose: () => void;\n}\n\nexport const QuestionDialog: React.FC<IProps> = ({\n questions,\n answers,\n onClose,\n}) => {\n const [currentQuestion, setCurrentQuestion] = useState(questions[0]);\n\n const [canShowAnswers, setCanShowAnswers] = useState<boolean>(false);\n\n const onGetFirstAnswer = () => {\n if (!currentQuestion.answerIds || currentQuestion.answerIds.length === 0) {\n return null;\n }\n\n const firstAnswerId = currentQuestion.answerIds![0];\n\n return answers.find((answer) => answer.id === firstAnswerId);\n };\n\n const [currentAnswer, setCurrentAnswer] =\n useState<IQuestionDialogAnswer | null>(onGetFirstAnswer()!);\n\n useEffect(() => {\n setCurrentAnswer(onGetFirstAnswer()!);\n }, [currentQuestion]);\n\n const onGetAnswers = (answerIds: number[]) => {\n return answerIds.map((answerId: number) =>\n answers.find((answer) => answer.id === answerId)\n );\n };\n\n const onKeyPress = (e: KeyboardEvent) => {\n switch (e.key) {\n case 'ArrowDown':\n // select next answer, if any.\n // if no next answer, select first answer\n // const nextAnswer = onGetAnswers(currentQuestion.answerIds!).find(\n // (answer) => answer?.id === currentAnswer!.id + 1\n // );\n\n const nextAnswerIndex = onGetAnswers(\n currentQuestion.answerIds!\n ).findIndex((answer) => answer?.id === currentAnswer!.id + 1);\n\n const nextAnswerID = currentQuestion.answerIds![nextAnswerIndex];\n\n // console.log(nextAnswerIndex);\n\n const nextAnswer = onGetAnswers(currentQuestion.answerIds!).find(\n (answer) => answer?.id === nextAnswerID\n );\n\n setCurrentAnswer(nextAnswer || onGetFirstAnswer()!);\n\n break;\n case 'ArrowUp':\n // select previous answer, if any.\n // if no previous answer, select last answer\n\n const previousAnswerIndex = onGetAnswers(\n currentQuestion.answerIds!\n ).findIndex((answer) => answer?.id === currentAnswer!.id - 1);\n\n const previousAnswerID =\n currentQuestion.answerIds &&\n currentQuestion.answerIds[previousAnswerIndex];\n\n const previousAnswer = onGetAnswers(currentQuestion.answerIds!).find(\n (answer) => answer?.id === previousAnswerID\n );\n\n if (previousAnswer) {\n setCurrentAnswer(previousAnswer);\n } else {\n setCurrentAnswer(onGetAnswers(currentQuestion.answerIds!).pop()!);\n }\n\n break;\n case 'Enter':\n setCanShowAnswers(false);\n\n if (!currentAnswer?.nextQuestionId) {\n onClose();\n return;\n } else {\n setCurrentQuestion(\n questions.find(\n (question) => question.id === currentAnswer!.nextQuestionId\n )!\n );\n }\n\n break;\n }\n };\n useEventListener('keydown', onKeyPress);\n\n const onAnswerClick = (answer: IQuestionDialogAnswer) => {\n setCanShowAnswers(false);\n if (answer.nextQuestionId) {\n // if there is a next question, go to it\n setCurrentQuestion(\n questions.find((question) => question.id === answer.nextQuestionId)!\n );\n } else {\n // else, finish dialog!\n onClose();\n }\n };\n\n const onRenderCurrentAnswers = () => {\n const answerIds = currentQuestion.answerIds;\n if (!answerIds) {\n return null;\n }\n\n const answers = onGetAnswers(answerIds);\n\n if (!answers) {\n return null;\n }\n\n return answers.map((answer) => {\n const isSelected = currentAnswer?.id === answer?.id;\n const selectedColor = isSelected ? 'yellow' : 'white';\n\n if (answer) {\n return (\n <AnswerRow key={`answer_${answer.id}`}>\n <AnswerSelectedIcon color={selectedColor}>\n {isSelected ? 'X' : null}\n </AnswerSelectedIcon>\n\n <Answer\n key={answer.id}\n onClick={() => onAnswerClick(answer)}\n color={selectedColor}\n >\n {answer.text}\n </Answer>\n </AnswerRow>\n );\n }\n\n return null;\n });\n };\n\n return (\n <Container>\n <QuestionContainer>\n <DynamicText\n text={currentQuestion.text}\n onStart={() => setCanShowAnswers(false)}\n onFinish={() => setCanShowAnswers(true)}\n />\n </QuestionContainer>\n\n {canShowAnswers && (\n <AnswersContainer>{onRenderCurrentAnswers()}</AnswersContainer>\n )}\n </Container>\n );\n};\n\nconst Container = styled.div`\n display: flex;\n\n word-break: break-all;\n\n box-sizing: border-box;\n justify-content: flex-start;\n align-items: flex-start;\n flex-wrap: wrap;\n`;\n\nconst QuestionContainer = styled.div`\n flex: 100%;\n width: 100%;\n`;\n\nconst AnswersContainer = styled.div`\n flex: 100%;\n`;\n\ninterface IAnswerProps {\n color: string;\n}\n\nconst Answer = styled.p<IAnswerProps>`\n flex: auto;\n color: ${(props) => props.color} !important;\n font-size: 0.65rem !important;\n background: inherit;\n border: none;\n`;\n\nconst AnswerSelectedIcon = styled.span<IAnswerProps>`\n flex: 5% 0 0;\n color: ${(props) => props.color} !important;\n`;\n\nconst AnswerRow = styled.div`\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n align-items: center;\n margin-bottom: 0.5rem;\n height: 22px;\n\n p {\n line-height: unset;\n margin-top: 0;\n margin-bottom: 0rem;\n }\n`;\n","import React, { useState } from 'react';\nimport styled from 'styled-components';\nimport { RPGUIContainer, RPGUIContainerTypes } from '../RPGUIContainer';\nimport aliceDefaultThumbnail from './img/npcDialog/npcThumbnails/alice.png';\nimport pressSpaceGif from './img/space.gif';\nimport { NPCDialogText } from './NPCDialogText';\nimport {\n IQuestionDialog,\n IQuestionDialogAnswer,\n QuestionDialog,\n} from './QuestionDialog/QuestionDialog';\n\nexport enum NPCDialogType {\n TextOnly = 'TextOnly',\n TextAndThumbnail = 'TextAndThumbnail',\n}\n\nexport interface INPCDialogProps {\n text?: string;\n type: NPCDialogType;\n imagePath?: string;\n onClose?: () => void;\n isQuestionDialog?: boolean;\n answers?: IQuestionDialogAnswer[];\n questions?: IQuestionDialog[];\n}\n\nexport const NPCDialog: React.FC<INPCDialogProps> = ({\n text,\n type,\n onClose,\n imagePath,\n isQuestionDialog = false,\n questions,\n answers,\n}) => {\n const [showGoNextIndicator, setShowGoNextIndicator] =\n useState<boolean>(false);\n\n return (\n <RPGUIContainer\n type={RPGUIContainerTypes.FramedGold}\n width={isQuestionDialog ? '600px' : '50%'}\n height={'180px'}\n >\n {isQuestionDialog && questions && answers ? (\n <>\n <TextContainer\n flex={type === NPCDialogType.TextAndThumbnail ? '70%' : '100%'}\n >\n <QuestionDialog\n questions={questions}\n answers={answers}\n onClose={() => {\n if (onClose) {\n onClose();\n }\n }}\n />\n </TextContainer>\n {type === NPCDialogType.TextAndThumbnail && (\n <ThumbnailContainer>\n <NPCThumbnail src={imagePath || aliceDefaultThumbnail} />\n </ThumbnailContainer>\n )}\n </>\n ) : (\n <>\n <Container>\n <TextContainer\n flex={type === NPCDialogType.TextAndThumbnail ? '70%' : '100%'}\n >\n <NPCDialogText\n onStartStep={() => setShowGoNextIndicator(false)}\n onEndStep={() => setShowGoNextIndicator(true)}\n text={text || 'No text provided.'}\n onClose={() => {\n if (onClose) {\n onClose();\n }\n }}\n />\n </TextContainer>\n {type === NPCDialogType.TextAndThumbnail && (\n <ThumbnailContainer>\n <NPCThumbnail src={imagePath || aliceDefaultThumbnail} />\n </ThumbnailContainer>\n )}\n </Container>\n {showGoNextIndicator && (\n <PressSpaceIndicator\n right={type === NPCDialogType.TextOnly ? '1rem' : '10.5rem'}\n src={pressSpaceGif}\n />\n )}\n </>\n )}\n </RPGUIContainer>\n );\n};\n\nconst Container = styled.div`\n display: flex;\n width: 100%;\n height: 100%;\n\n box-sizing: border-box;\n justify-content: center;\n align-items: flex-start;\n position: relative;\n`;\n\ninterface ITextContainerProps {\n flex: string;\n}\n\nconst TextContainer = styled.div<ITextContainerProps>`\n flex: ${({ flex }) => flex} 0 0;\n width: 355px;\n`;\n\nconst ThumbnailContainer = styled.div`\n flex: 30% 0 0;\n display: flex;\n justify-content: flex-end;\n`;\n\nconst NPCThumbnail = styled.img`\n image-rendering: pixelated;\n height: 128px;\n width: 128px;\n`;\n\ninterface IPressSpaceIndicatorProps {\n right: string;\n}\n\nconst PressSpaceIndicator = styled.img<IPressSpaceIndicatorProps>`\n position: absolute;\n right: ${({ right }) => right};\n bottom: 1rem;\n height: 20.7px;\n image-rendering: -webkit-optimize-contrast;\n`;\n","import React from 'react';\nimport styled from 'styled-components';\n\nexport interface IBarProps {\n max: number;\n value: number;\n color: 'red' | 'blue' | 'green';\n style?: Record<string, any>;\n displayText?: boolean;\n percentageWidth?: number;\n minWidth?: number;\n}\n\nexport const ProgressBar: React.FC<IBarProps> = ({\n max,\n value,\n color,\n displayText = true,\n percentageWidth = 40,\n minWidth = 100,\n style,\n}) => {\n const calculatePercentageValue = function (max: number, value: number) {\n if (value > max) {\n value = max;\n }\n return (value * 100) / max;\n };\n\n return (\n <Container\n className=\"rpgui-progress\"\n data-value={calculatePercentageValue(max, value) / 100}\n data-rpguitype=\"progress\"\n percentageWidth={percentageWidth}\n minWidth={minWidth}\n style={style}\n >\n {displayText && (\n <TextOverlay>\n <ProgressBarText>\n {value}/{max}\n </ProgressBarText>\n </TextOverlay>\n )}\n <div className=\" rpgui-progress-track\">\n <div\n className={`rpgui-progress-fill ${color} `}\n style={{\n left: '0px',\n width: calculatePercentageValue(max, value) + '%',\n }}\n ></div>\n </div>\n <div className=\" rpgui-progress-left-edge\"></div>\n <div className=\" rpgui-progress-right-edge\"></div>\n </Container>\n );\n};\n\nconst ProgressBarText = styled.span`\n font-size: 1rem;\n color: white;\n text-align: center;\n z-index: 1;\n position: absolute;\n left: 50%;\n transform: translateX(-50%);\n top: 12px;\n`;\n\nconst TextOverlay = styled.div`\n width: 100%;\n position: relative;\n`;\n\ninterface IContainerProps {\n percentageWidth?: number;\n minWidth?: number;\n style?: Record<string, any>;\n}\n\nconst Container = styled.div<IContainerProps>`\n display: flex;\n flex-direction: column;\n min-width: ${(props) => props.minWidth}px;\n width: ${(props) => props.percentageWidth}%;\n justify-content: start;\n align-items: flex-start;\n ${(props) => props.style}\n`;\n","import React, { useEffect, useState } from 'react';\n\nexport interface IRadioItems {\n label: string;\n value: string;\n}\n\nexport interface IRadioProps {\n name: string;\n items: IRadioItems[];\n onChange: (value: string) => void;\n}\n\nexport const InputRadio: React.FC<IRadioProps> = ({\n name,\n items,\n onChange,\n}) => {\n const [selectedValue, setSelectedValue] = useState<string>();\n const handleClick = () => {\n let element = document.querySelector(\n `input[name=${name}]:checked`\n ) as HTMLInputElement;\n const elementValue = element.value;\n setSelectedValue(elementValue);\n };\n\n useEffect(() => {\n if (selectedValue) {\n onChange(selectedValue);\n }\n }, [selectedValue]);\n\n return (\n <div id=\"elemento-radio\">\n {items.map((element) => {\n return (\n <>\n <input\n key={element.value}\n className=\"rpgui-radio\"\n value={element.value}\n name={name}\n type=\"radio\"\n />\n <label onClick={handleClick}>{element.label}</label>\n <br />\n </>\n );\n })}\n </div>\n );\n};\n","import React, { useState } from 'react';\nimport styled from 'styled-components';\nimport { v4 as uuidv4 } from 'uuid';\nimport { useEventListener } from '../hooks/useEventListener';\nimport { _RPGUI } from './RPGUIRoot';\n\nexport enum RangeSliderType {\n Slider = 'rpgui-slider',\n GoldSlider = 'rpgui-slider golden',\n}\n\nexport interface IRangeSliderProps {\n type: RangeSliderType;\n valueMin: number;\n valueMax: number;\n width: string;\n onChange: (value: number) => void;\n}\n\nexport const RangeSlider: React.FC<IRangeSliderProps> = ({\n type,\n valueMin,\n valueMax,\n width,\n onChange,\n}) => {\n const sliderId = uuidv4();\n\n const [wasMouseDownFirst, setWasMouseDownFirst] = useState<boolean>(false);\n\n useEventListener('mouseup', () => {\n if (wasMouseDownFirst) {\n onHandleMouseUp();\n }\n setWasMouseDownFirst(false);\n });\n\n const onHandleMouseUp = () => {\n const rpguiSlider = document.getElementById(`rpgui-slider-${sliderId}`);\n const value = _RPGUI.get_value(rpguiSlider);\n\n onChange(Number(value));\n };\n\n return (\n <div\n onMouseUp={onHandleMouseUp}\n onMouseDown={() => setWasMouseDownFirst(true)}\n >\n <Input\n className={\n type === RangeSliderType.Slider\n ? RangeSliderType.Slider\n : RangeSliderType.GoldSlider\n }\n type=\"range\"\n style={{ width: width }}\n min={valueMin}\n max={valueMax}\n id={`rpgui-slider-${sliderId}`}\n />\n </div>\n );\n};\n\nconst Input = styled.input`\n opacity: 0;\n`;\n","import React from 'react';\n\nexport interface ITextArea\n extends React.DetailedHTMLProps<\n React.TextareaHTMLAttributes<HTMLTextAreaElement>,\n HTMLTextAreaElement\n > {}\n\nexport const TextArea: React.FC<ITextArea> = ({ ...props }) => {\n return <textarea {...props} />;\n};\n","/* eslint-disable react/require-default-props */\nimport React from 'react';\nimport styled from 'styled-components';\n\ninterface IProps {\n maxLines?: number;\n children: React.ReactNode;\n}\n\nexport const Truncate: React.FC<IProps> = ({ maxLines = 1, children }) => {\n return <Container maxLines={maxLines}>{children}</Container>;\n};\n\ninterface IContainerProps {\n maxLines: number;\n}\n\nconst Container = styled.div<IContainerProps>`\n display: -webkit-box;\n max-width: 100%;\n max-height: 100%;\n -webkit-line-clamp: ${(props) => props.maxLines};\n -webkit-box-orient: vertical;\n overflow: hidden;\n`;\n"],"names":["ButtonTypes","Button","children","buttonType","props","React","ButtonContainer","className","styled","button","CheckButton","items","onChange","generateSelectedValuesList","selectedValues","forEach","item","label","useState","setSelectedValues","handleClick","useEffect","id","map","element","index","key","type","checked","onClick","colors","darkGrey","Input","RPGUIContainerTypes","RPGUIContainer","width","height","Container","div","Column","flex","flexWrap","alignItems","justifyContent","Chat","chatMessages","onSendChatMessage","opacity","onCloseButton","message","setMessage","scrollChatToBottom","scrollingElement","document","querySelector","scrollTop","scrollHeight","handleSubmit","event","preventDefault","getInputValue","value","onRenderMessageLines","emitter","createdAt","dayjs","Date","format","name","onRenderChatMessages","length","_id","MessageText","CustomContainer","FramedGrey","ErrorBoundary","fallback","CloseButton","onTouchStart","Form","onSubmit","CustomInput","e","target","autoComplete","RPGUIButton","form","p","_RPGUI","RPGUI","RPGUIRoot","Dropdown","options","dropdownId","uuidv4","selectedValue","setSelectedValue","getElementById","dropdownValue","get_value","addEventListener","style","option","ListMenu","onSelected","x","y","fontSize","overflow","params","ListElement","text","li","img","chunkString","str","match","RegExp","DynamicText","onFinish","onStart","textState","setTextState","i","interval","setInterval","substring","clearInterval","TextContainer","NPCDialogText","onClose","onEndStep","onStartStep","textChunks","chunkIndex","setChunkIndex","onHandleSpacePress","code","hasNextChunk","prev","removeEventListener","useEventListener","handler","el","window","savedHandler","useRef","current","listener","QuestionDialog","questions","answers","currentQuestion","setCurrentQuestion","canShowAnswers","setCanShowAnswers","onGetFirstAnswer","answerIds","firstAnswerId","find","answer","currentAnswer","setCurrentAnswer","onGetAnswers","answerId","onKeyPress","nextAnswerIndex","findIndex","nextAnswerID","nextAnswer","previousAnswerIndex","previousAnswerID","previousAnswer","pop","nextQuestionId","question","onAnswerClick","onRenderCurrentAnswers","isSelected","selectedColor","AnswerRow","AnswerSelectedIcon","color","Answer","QuestionContainer","AnswersContainer","span","NPCDialogType","NPCDialog","imagePath","isQuestionDialog","showGoNextIndicator","setShowGoNextIndicator","FramedGold","TextAndThumbnail","ThumbnailContainer","NPCThumbnail","src","aliceDefaultThumbnail","PressSpaceIndicator","right","TextOnly","pressSpaceGif","ProgressBar","max","displayText","percentageWidth","minWidth","calculatePercentageValue","TextOverlay","ProgressBarText","left","InputRadio","elementValue","RangeSliderType","RangeSlider","valueMin","valueMax","sliderId","wasMouseDownFirst","setWasMouseDownFirst","onHandleMouseUp","rpguiSlider","Number","onMouseUp","onMouseDown","Slider","GoldSlider","min","input","TextArea","Truncate","maxLines"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAGYA;;AAAZ,WAAYA;EACVA,0BAAA,iBAAA;EACAA,8BAAA,wBAAA;AACD,CAHD,EAAYA,WAAW,KAAXA,WAAW,KAAA,CAAvB;;IAUaC,MAAM,GAMf,SANSA,MAMT;MAAGC,gBAAAA;MAAUC,kBAAAA;MAAeC;;EAC9B,OACEC,mBAAA,CAACC,eAAD;IAAiBC,SAAS,OAAKJ;KAAkBC,MAAjD,EACEC,mBAAA,IAAA,MAAA,EAAIH,QAAJ,CADF,CADF;AAKD;AAED,IAAMI,eAAe,gBAAGE,MAAM,CAACC,MAAV;EAAA;EAAA;AAAA,qCAArB;;ICXaC,WAAW,GAA0B,SAArCA,WAAqC;MAAGC,aAAAA;MAAOC,gBAAAA;;EAC1D,IAAMC,0BAA0B,GAAG,SAA7BA,0BAA6B;IACjC,IAAMC,cAAc,GAA6B,EAAjD;IAEAH,KAAK,CAACI,OAAN,CAAc,UAACC,IAAD;MACZF,cAAc,CAACE,IAAI,CAACC,KAAN,CAAd,GAA6B,KAA7B;KADF;IAIA,OAAOH,cAAP;GAPF;;EAUA,gBACEI,QAAQ,CAA2BL,0BAA0B,EAArD,CADV;MAAOC,cAAP;MAAuBK,iBAAvB;;EAGA,IAAMC,WAAW,GAAG,SAAdA,WAAc,CAACH,KAAD;;;IAClBE,iBAAiB,cACZL,cADY,6BAEdG,KAFc,IAEN,CAACH,cAAc,CAACG,KAAD,CAFT,cAAjB;GADF;;EAOAI,SAAS,CAAC;IACR,IAAIP,cAAJ,EAAoB;MAClBF,QAAQ,CAACE,cAAD,CAAR;;GAFK,EAIN,CAACA,cAAD,CAJM,CAAT;EAMA,OACET,mBAAA,MAAA;IAAKiB,EAAE,EAAC;GAAR,EACGX,KADH,oBACGA,KAAK,CAAEY,GAAP,CAAW,UAACC,OAAD,EAAUC,KAAV;IACV,OACEpB,mBAAA,MAAA;MAAKqB,GAAG,EAAKF,OAAO,CAACP,KAAb,SAAsBQ;KAA9B,EACEpB,mBAAA,QAAA;MACEE,SAAS,EAAC;MACVoB,IAAI,EAAC;MACLC,OAAO,EAAEd,cAAc,CAACU,OAAO,CAACP,KAAT;MACvBL,QAAQ,EAAE;KAJZ,CADF,EAOEP,mBAAA,QAAA;MAAOwB,OAAO,EAAE;QAAA,OAAMT,WAAW,CAACI,OAAO,CAACP,KAAT,CAAjB;;KAAhB,EACGO,OAAO,CAACP,KADX,CAPF,EAUEZ,mBAAA,KAAA,MAAA,CAVF,CADF;GADD,CADH,CADF;AAoBD,CA/CM;;AChBA,IAAMyB,MAAM,GAAG;EACpBC,QAAQ,EAAE;AADU,CAAf;;ICQMC,KAAK,GAA0B,SAA/BA,KAA+B;MAAM5B;;EAChD,OAAOC,mBAAA,QAAA,oBAAWD,MAAX,CAAP;AACD,CAFM;;ICLK6B,mBAAZ;;AAAA,WAAYA;EACVA,6BAAA,WAAA;EACAA,iCAAA,kBAAA;EACAA,kCAAA,oBAAA;EACAA,iCAAA,gBAAA;AACD,CALD,EAAYA,mBAAmB,KAAnBA,mBAAmB,KAAA,CAA/B;;AAcA,IAAaC,cAAc,GAAmC,SAAjDA,cAAiD;MAC5DhC,gBAAAA;MACAyB,YAAAA;wBACAQ;MAAAA,gCAAQ;MACRC,cAAAA;MACA7B,iBAAAA;EAEA,OACEF,mBAAA,CAACgC,SAAD;IACEF,KAAK,EAAEA;IACPC,MAAM,EAAEA,MAAM,IAAI;IAClB7B,SAAS,uBAAqBoB,IAArB,SAA6BpB;GAHxC,EAKGL,QALH,CADF;AASD,CAhBM;AAuBP,IAAMmC,SAAS,gBAAG7B,MAAM,CAAC8B,GAAV;EAAA;EAAA;AAAA,sFACH,UAAClC,KAAD;EAAA,OAAWA,KAAK,CAACgC,MAAjB;AAAA,CADG,EAEJ;EAAA,IAAGD,KAAH,SAAGA,KAAH;EAAA,OAAeA,KAAf;AAAA,CAFI,CAAf;;AC/BO,IAAMI,MAAM,gBAAG/B,MAAM,CAAC8B,GAAV;EAAA;EAAA;AAAA,qFACT,UAAClC,KAAD;EAAA,OAAWA,KAAK,CAACoC,IAAN,IAAc,MAAzB;AAAA,CADS,EAGJ,UAACpC,KAAD;EAAA,OAAWA,KAAK,CAACqC,QAAN,IAAkB,QAA7B;AAAA,CAHI,EAIF,UAACrC,KAAD;EAAA,OAAWA,KAAK,CAACsC,UAAN,IAAoB,YAA/B;AAAA,CAJE,EAKE,UAACtC,KAAD;EAAA,OAAWA,KAAK,CAACuC,cAAN,IAAwB,YAAnC;AAAA,CALF,CAAZ;;ICeMC,IAAI,GAAyB,SAA7BA,IAA6B;MACxCC,oBAAAA;MACAC,yBAAAA;0BACAC;MAAAA,oCAAU;wBACVZ;MAAAA,gCAAQ;yBACRC;MAAAA,kCAAS;MACTY,qBAAAA;;EAEA,gBAA8B9B,QAAQ,CAAC,EAAD,CAAtC;MAAO+B,OAAP;MAAgBC,UAAhB;;EAEA7B,SAAS,CAAC;IACR8B,kBAAkB;GADX,EAEN,EAFM,CAAT;EAIA9B,SAAS,CAAC;IACR8B,kBAAkB;GADX,EAEN,CAACN,YAAD,CAFM,CAAT;;EAIA,IAAMM,kBAAkB,GAAG,SAArBA,kBAAqB;IACzB,IAAMC,gBAAgB,GAAGC,QAAQ,CAACC,aAAT,CAAuB,YAAvB,CAAzB;;IACA,IAAIF,gBAAJ,EAAsB;MACpBA,gBAAgB,CAACG,SAAjB,GAA6BH,gBAAgB,CAACI,YAA9C;;GAHJ;;EAOA,IAAMC,YAAY,GAAG,SAAfA,YAAe,CAACC,KAAD;IACnBA,KAAK,CAACC,cAAN;IACAb,iBAAiB,CAACG,OAAD,CAAjB;IACAC,UAAU,CAAC,EAAD,CAAV;GAHF;;EAKA,IAAMU,aAAa,GAAG,SAAhBA,aAAgB,CAACC,KAAD;IACpBX,UAAU,CAACW,KAAD,CAAV;GADF;;EAIA,IAAMC,oBAAoB,GAAG,SAAvBA,oBAAuB,CAC3BC,OAD2B,EAE3BC,SAF2B,EAG3Bf,OAH2B;IAK3B,OAAUgB,KAAK,CAACD,SAAS,IAAI,IAAIE,IAAJ,EAAd,CAAL,CAA+BC,MAA/B,CAAsC,OAAtC,CAAV,UACEJ,OAAO,QAAP,IAAAA,OAAO,CAAEK,IAAT,GAAmBL,OAAO,CAACK,IAA3B,UAAsC,WADxC,UAEInB,OAFJ;GALF;;EAUA,IAAMoB,oBAAoB,GAAG,SAAvBA,oBAAuB,CAACxB,YAAD;IAC3B,OAAOA,YAAY,QAAZ,IAAAA,YAAY,CAAEyB,MAAd,GACLzB,YADK,oBACLA,YAAY,CAAEtB,GAAd,CAAkB,iBAAuCE,KAAvC;MAAA,IAAG8C,GAAH,SAAGA,GAAH;UAAQP,SAAR,SAAQA,SAAR;UAAmBD,OAAnB,SAAmBA,OAAnB;UAA4Bd,OAA5B,SAA4BA,OAA5B;MAAA,OAChB5C,mBAAA,CAACmE,WAAD;QAAa9C,GAAG,EAAK6C,GAAL,SAAY9C;OAA5B,EACGqC,oBAAoB,CAACC,OAAD,EAAUC,SAAV,EAAqBf,OAArB,CADvB,CADgB;KAAlB,CADK,GAOL5C,mBAAA,CAACmE,WAAD,MAAA,0BAAA,CAPF;GADF;;EAYA,OACEnE,mBAAA,CAACgC,WAAD,MAAA,EACEhC,mBAAA,CAACoE,eAAD;IACE9C,IAAI,EAAEM,mBAAmB,CAACyC;IAC1BvC,KAAK,EAAEA;IACPC,MAAM,EAAEA;IACR7B,SAAS,EAAC;IACVwC,OAAO,EAAEA;GALX,EAOE1C,mBAAA,CAACsE,aAAD;IAAeC,QAAQ,EAAEvE,mBAAA,IAAA,MAAA,gCAAA;GAAzB,EACG2C,aAAa,IACZ3C,mBAAA,CAACwE,WAAD;IAAahD,OAAO,EAAEmB;IAAe8B,YAAY,EAAE9B;GAAnD,KAAA,CAFJ,EAME3C,mBAAA,CAAC6B,cAAD;IACEP,IAAI,EAAEM,mBAAmB,CAACyC;IAC1BvC,KAAK,EAAE;IACPC,MAAM,EAAE;IACR7B,SAAS,EAAC;GAJZ,EAMG8D,oBAAoB,CAACxB,YAAD,CANvB,CANF,EAeExC,mBAAA,CAAC0E,IAAD;IAAMC,QAAQ,EAAEvB;GAAhB,EACEpD,mBAAA,CAACkC,MAAD;IAAQC,IAAI,EAAE;GAAd,EACEnC,mBAAA,CAAC4E,WAAD;IACEpB,KAAK,EAAEZ;IACP3B,EAAE,EAAC;IACHV,QAAQ,EAAE,kBAACsE,CAAD;MAAA,OAAOtB,aAAa,CAACsB,CAAC,CAACC,MAAF,CAAStB,KAAV,CAApB;;IACVzB,MAAM,EAAE;IACR7B,SAAS,EAAC;IACVoB,IAAI,EAAC;IACLyD,YAAY,EAAC;GAPf,CADF,CADF,EAYE/E,mBAAA,CAACkC,MAAD;IAAQI,cAAc,EAAC;GAAvB,EACEtC,mBAAA,CAACJ,MAAD;IACEE,UAAU,EAAEH,WAAW,CAACqF;IACxB/D,EAAE,EAAC;GAFL,QAAA,CADF,CAZF,CAfF,CAPF,CADF,CADF;AAiDD,CAzGM;AA2GP,IAAMe,WAAS,gBAAG7B,MAAM,CAAC8B,GAAV;EAAA;EAAA;AAAA,0BAAf;AAIA,IAAMuC,WAAW,gBAAGrE,MAAM,CAAC8B,GAAV;EAAA;EAAA;AAAA,kFAAjB;AASA,IAAM2C,WAAW,gBAAGzE,MAAM,CAACwB,KAAD,CAAT;EAAA;EAAA;AAAA,sEAAjB;AAaA,IAAMyC,eAAe,gBAAGjE,MAAM,CAAC0B,cAAD,CAAT;EAAA;EAAA;AAAA,uMAGR,UAAC9B,KAAD;EAAA,OAAkCA,KAAK,CAAC2C,OAAxC;AAAA,CAHQ,EAUGjB,MAAM,CAACC,QAVV,CAArB;AAsBA,IAAMgD,IAAI,gBAAGvE,MAAM,CAAC8E,IAAV;EAAA;EAAA;AAAA,0EAAV;AAOA,IAAMd,WAAW,gBAAGhE,MAAM,CAAC+E,CAAV;EAAA;EAAA;AAAA,iGAAjB;;ICjLaC,MAAM,GAAGC,KAAf;AAEP,IAAaC,SAAS,GAAqB,SAA9BA,SAA8B;MAAGxF,gBAAAA;EAC5C,OAAOG,mBAAA,MAAA;IAAKE,SAAS,EAAC;GAAf,EAAgCL,QAAhC,CAAP;AACD,CAFM;;ICKMyF,QAAQ,GAA6B,SAArCA,QAAqC;MAChDC,eAAAA;MACAzD,aAAAA;MACAvB,gBAAAA;EAEA,IAAMiF,UAAU,GAAGC,EAAM,EAAzB;;EAEA,gBAA0C5E,QAAQ,CAAS,EAAT,CAAlD;MAAO6E,aAAP;MAAsBC,gBAAtB;;EAEA3E,SAAS,CAAC;IACR,IAAMG,OAAO,GAAG6B,QAAQ,CAAC4C,cAAT,qBAA0CJ,UAA1C,CAAhB;;IACA,IAAMK,aAAa,GAAGV,MAAM,CAACW,SAAP,CAAiB3E,OAAjB,CAAtB;;IACAwE,gBAAgB,CAACE,aAAD,CAAhB;IAEA1E,OAAO,QAAP,YAAAA,OAAO,CAAE4E,gBAAT,CAA0B,QAA1B,EAAoC,UAAC1C,KAAD;MAClCsC,gBAAgB,CAACtC,KAAD,oBAACA,KAAK,CAAEyB,MAAP,CAActB,KAAf,CAAhB;KADF;GALO,EAQN,EARM,CAAT;EAUAxC,SAAS,CAAC;IACR,IAAI0E,aAAJ,EAAmB;MACjBnF,QAAQ,CAACmF,aAAD,CAAR;;GAFK,EAIN,CAACA,aAAD,CAJM,CAAT;EAMA,OACE1F,mBAAA,SAAA;IACEiB,EAAE,sBAAoBuE;IACtBQ,KAAK,EAAE;MAAElE,KAAK,EAAEA;;IAChB5B,SAAS,EAAC;GAHZ,EAKGqF,OAAO,CAACrE,GAAR,CAAY,UAAC+E,MAAD;IACX,OACEjG,mBAAA,SAAA;MAAQqB,GAAG,EAAE4E,MAAM,CAAChF;MAAIuC,KAAK,EAAEyC,MAAM,CAACzC;KAAtC,EACGyC,MAAM,CAACA,MADV,CADF;GADD,CALH,CADF;AAeD,CAxCM;;ICAMC,QAAQ,GAA6B,SAArCA,QAAqC;MAChDX,eAAAA;MACAY,kBAAAA;MACAC,SAAAA;MACAC,SAAAA;2BACAC;MAAAA,sCAAW;EAEX,OACEtG,mBAAA,CAACgC,WAAD;IAAWoE,CAAC,EAAEA;IAAGC,CAAC,EAAEA;IAAGC,QAAQ,EAAEA;GAAjC,EACEtG,mBAAA,KAAA;IAAIE,SAAS,EAAC;IAAiB8F,KAAK,EAAE;MAAEO,QAAQ,EAAE;;GAAlD,EACGhB,OAAO,CAACrE,GAAR,CAAY,UAACsF,MAAD;IAAA,OACXxG,mBAAA,CAACyG,WAAD;MACEpF,GAAG,EAAEmF,MAAM,CAACE;MACZlF,OAAO,EAAE;QACP2E,UAAU,CAACK,MAAM,CAACvF,EAAR,CAAV;;KAHJ,EAMGuF,MAAM,CAACE,IANV,CADW;GAAZ,CADH,CADF,CADF;AAgBD,CAvBM;AA+BP,IAAM1E,WAAS,gBAAG7B,MAAM,CAAC8B,GAAV;EAAA;EAAA;AAAA,kKAON,UAAClC,KAAD;EAAA,OAAWA,KAAK,CAACsG,CAAN,IAAW,CAAtB;AAAA,CAPM,EAQL,UAACtG,KAAD;EAAA,OAAWA,KAAK,CAACqG,CAAN,IAAW,CAAtB;AAAA,CARK,EAWE,UAACrG,KAAD;EAAA,OAAWA,KAAK,CAACuG,QAAjB;AAAA,CAXF,CAAf;AAeA,IAAMG,WAAW,gBAAGtG,MAAM,CAACwG,EAAV;EAAA;EAAA;AAAA,4BAAjB;;AC9DA,MAAM,GAAG,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;;ACAnC,MAAMC,KAAG,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;;ACA5B,IAAMC,WAAW,GAAG,SAAdA,WAAc,CAACC,GAAD,EAAc7C,MAAd;EACzB,OAAO6C,GAAG,CAACC,KAAJ,CAAU,IAAIC,MAAJ,CAAW,SAAS/C,MAAT,GAAkB,GAA7B,EAAkC,GAAlC,CAAV,CAAP;AACD,CAFM;;ICSMgD,WAAW,GAAqB,SAAhCA,WAAgC;MAAGP,YAAAA;MAAMQ,gBAAAA;MAAUC,eAAAA;;EAC9D,gBAAkCtG,QAAQ,CAAS,EAAT,CAA1C;MAAOuG,SAAP;MAAkBC,YAAlB;;EAEArG,SAAS,CAAC;IACR,IAAIsG,CAAC,GAAG,CAAR;IACA,IAAMC,QAAQ,GAAGC,WAAW,CAAC;;MAG3B,IAAIF,CAAC,KAAK,CAAV,EAAa;QACX,IAAIH,OAAJ,EAAa;UACXA,OAAO;;;;MAIX,IAAIG,CAAC,GAAGZ,IAAI,CAACzC,MAAb,EAAqB;QACnBoD,YAAY,CAACX,IAAI,CAACe,SAAL,CAAe,CAAf,EAAkBH,CAAC,GAAG,CAAtB,CAAD,CAAZ;QACAA,CAAC;OAFH,MAGO;QACLI,aAAa,CAACH,QAAD,CAAb;;QACA,IAAIL,QAAJ,EAAc;UACZA,QAAQ;;;KAfc,EAkBzB,EAlByB,CAA5B;IAoBA,OAAO;MACLQ,aAAa,CAACH,QAAD,CAAb;KADF;GAtBO,EAyBN,CAACb,IAAD,CAzBM,CAAT;EA2BA,OAAO1G,mBAAA,CAAC2H,aAAD,MAAA,EAAgBP,SAAhB,CAAP;AACD,CA/BM;AAiCP,IAAMO,aAAa,gBAAGxH,MAAM,CAAC+E,CAAV;EAAA;EAAA;AAAA,uHAAnB;;AC9BO,IAAM0C,aAAa,GAAqB,SAAlCA,aAAkC;MAC7ClB,YAAAA;MACAmB,eAAAA;MACAC,iBAAAA;MACAC,mBAAAA;EAEA,IAAMC,UAAU,GAAGnB,WAAW,CAACH,IAAD,EAAO,EAAP,CAA9B;;EAEA,gBAAoC7F,QAAQ,CAAS,CAAT,CAA5C;MAAOoH,UAAP;MAAmBC,aAAnB;;EAEA,IAAMC,kBAAkB,GAAG,SAArBA,kBAAqB,CAAC9E,KAAD;IACzB,IAAIA,KAAK,CAAC+E,IAAN,KAAe,OAAnB,EAA4B;MAC1B,IAAMC,YAAY,GAAG,CAAAL,UAAU,QAAV,YAAAA,UAAU,CAAGC,UAAU,GAAG,CAAhB,CAAV,KAAgC,KAArD;;MAEA,IAAII,YAAJ,EAAkB;QAChBH,aAAa,CAAC,UAACI,IAAD;UAAA,OAAUA,IAAI,GAAG,CAAjB;SAAD,CAAb;OADF,MAEO;;QAELT,OAAO;;;GARb;;EAaA7G,SAAS,CAAC;IACRgC,QAAQ,CAAC+C,gBAAT,CAA0B,SAA1B,EAAqCoC,kBAArC;IAEA,OAAO;MAAA,OAAMnF,QAAQ,CAACuF,mBAAT,CAA6B,SAA7B,EAAwCJ,kBAAxC,CAAN;KAAP;GAHO,EAIN,CAACF,UAAD,CAJM,CAAT;EAMA,OACEjI,mBAAA,CAACgC,WAAD,MAAA,EACEhC,mBAAA,CAACiH,WAAD;IACEP,IAAI,EAAE,CAAAsB,UAAU,QAAV,YAAAA,UAAU,CAAGC,UAAH,CAAV,KAA4B;IAClCf,QAAQ,EAAEY;IACVX,OAAO,EAAEY;GAHX,CADF,CADF;AASD,CAtCM;AAwCP,IAAM/F,WAAS,gBAAG7B,MAAM,CAAC8B,GAAV;EAAA;EAAA;AAAA,QAAf;;ICjDauG,gBAAgB,GAAG,SAAnBA,gBAAmB,CAAClH,IAAD,EAAOmH,OAAP,EAAgBC,EAAhB;MAAgBA;IAAAA,KAAKC;;;EACnD,IAAMC,YAAY,GAAG5I,KAAK,CAAC6I,MAAN,EAArB;EAEA7I,KAAK,CAACgB,SAAN,CAAgB;IACd4H,YAAY,CAACE,OAAb,GAAuBL,OAAvB;GADF,EAEG,CAACA,OAAD,CAFH;EAIAzI,KAAK,CAACgB,SAAN,CAAgB;;IAEd,IAAM+H,QAAQ,GAAG,SAAXA,QAAW,CAAClE,CAAD;MAAA,OAAO+D,YAAY,CAACE,OAAb,CAAqBjE,CAArB,CAAP;KAAjB;;IAEA6D,EAAE,CAAC3C,gBAAH,CAAoBzE,IAApB,EAA0ByH,QAA1B;IAEA,OAAO;MACLL,EAAE,CAACH,mBAAH,CAAuBjH,IAAvB,EAA6ByH,QAA7B;KADF;GANF,EASG,CAACzH,IAAD,EAAOoH,EAAP,CATH;AAUD,CAjBM;;ICoBMM,cAAc,GAAqB,SAAnCA,cAAmC;MAC9CC,iBAAAA;MACAC,eAAAA;MACArB,eAAAA;;EAEA,gBAA8ChH,QAAQ,CAACoI,SAAS,CAAC,CAAD,CAAV,CAAtD;MAAOE,eAAP;MAAwBC,kBAAxB;;EAEA,iBAA4CvI,QAAQ,CAAU,KAAV,CAApD;MAAOwI,cAAP;MAAuBC,iBAAvB;;EAEA,IAAMC,gBAAgB,GAAG,SAAnBA,gBAAmB;IACvB,IAAI,CAACJ,eAAe,CAACK,SAAjB,IAA8BL,eAAe,CAACK,SAAhB,CAA0BvF,MAA1B,KAAqC,CAAvE,EAA0E;MACxE,OAAO,IAAP;;;IAGF,IAAMwF,aAAa,GAAGN,eAAe,CAACK,SAAhB,CAA2B,CAA3B,CAAtB;IAEA,OAAON,OAAO,CAACQ,IAAR,CAAa,UAACC,MAAD;MAAA,OAAYA,MAAM,CAAC1I,EAAP,KAAcwI,aAA1B;KAAb,CAAP;GAPF;;EAUA,iBACE5I,QAAQ,CAA+B0I,gBAAgB,EAA/C,CADV;MAAOK,aAAP;MAAsBC,gBAAtB;;EAGA7I,SAAS,CAAC;IACR6I,gBAAgB,CAACN,gBAAgB,EAAjB,CAAhB;GADO,EAEN,CAACJ,eAAD,CAFM,CAAT;;EAIA,IAAMW,YAAY,GAAG,SAAfA,YAAe,CAACN,SAAD;IACnB,OAAOA,SAAS,CAACtI,GAAV,CAAc,UAAC6I,QAAD;MAAA,OACnBb,OAAO,CAACQ,IAAR,CAAa,UAACC,MAAD;QAAA,OAAYA,MAAM,CAAC1I,EAAP,KAAc8I,QAA1B;OAAb,CADmB;KAAd,CAAP;GADF;;EAMA,IAAMC,UAAU,GAAG,SAAbA,UAAa,CAACnF,CAAD;IACjB,QAAQA,CAAC,CAACxD,GAAV;MACE,KAAK,WAAL;;;;;;QAOE,IAAM4I,eAAe,GAAGH,YAAY,CAClCX,eAAe,CAACK,SADkB,CAAZ,CAEtBU,SAFsB,CAEZ,UAACP,MAAD;UAAA,OAAY,CAAAA,MAAM,QAAN,YAAAA,MAAM,CAAE1I,EAAR,MAAe2I,aAAc,CAAC3I,EAAf,GAAoB,CAA/C;SAFY,CAAxB;QAIA,IAAMkJ,YAAY,GAAGhB,eAAe,CAACK,SAAhB,CAA2BS,eAA3B,CAArB,CAXF;;QAeE,IAAMG,UAAU,GAAGN,YAAY,CAACX,eAAe,CAACK,SAAjB,CAAZ,CAAyCE,IAAzC,CACjB,UAACC,MAAD;UAAA,OAAY,CAAAA,MAAM,QAAN,YAAAA,MAAM,CAAE1I,EAAR,MAAekJ,YAA3B;SADiB,CAAnB;QAIAN,gBAAgB,CAACO,UAAU,IAAIb,gBAAgB,EAA/B,CAAhB;QAEA;;MACF,KAAK,SAAL;;;QAIE,IAAMc,mBAAmB,GAAGP,YAAY,CACtCX,eAAe,CAACK,SADsB,CAAZ,CAE1BU,SAF0B,CAEhB,UAACP,MAAD;UAAA,OAAY,CAAAA,MAAM,QAAN,YAAAA,MAAM,CAAE1I,EAAR,MAAe2I,aAAc,CAAC3I,EAAf,GAAoB,CAA/C;SAFgB,CAA5B;QAIA,IAAMqJ,gBAAgB,GACpBnB,eAAe,CAACK,SAAhB,IACAL,eAAe,CAACK,SAAhB,CAA0Ba,mBAA1B,CAFF;QAIA,IAAME,cAAc,GAAGT,YAAY,CAACX,eAAe,CAACK,SAAjB,CAAZ,CAAyCE,IAAzC,CACrB,UAACC,MAAD;UAAA,OAAY,CAAAA,MAAM,QAAN,YAAAA,MAAM,CAAE1I,EAAR,MAAeqJ,gBAA3B;SADqB,CAAvB;;QAIA,IAAIC,cAAJ,EAAoB;UAClBV,gBAAgB,CAACU,cAAD,CAAhB;SADF,MAEO;UACLV,gBAAgB,CAACC,YAAY,CAACX,eAAe,CAACK,SAAjB,CAAZ,CAAyCgB,GAAzC,EAAD,CAAhB;;;QAGF;;MACF,KAAK,OAAL;QACElB,iBAAiB,CAAC,KAAD,CAAjB;;QAEA,IAAI,EAACM,aAAD,YAACA,aAAa,CAAEa,cAAhB,CAAJ,EAAoC;UAClC5C,OAAO;UACP;SAFF,MAGO;UACLuB,kBAAkB,CAChBH,SAAS,CAACS,IAAV,CACE,UAACgB,QAAD;YAAA,OAAcA,QAAQ,CAACzJ,EAAT,KAAgB2I,aAAc,CAACa,cAA7C;WADF,CADgB,CAAlB;;;QAOF;;GA7DN;;EAgEAjC,gBAAgB,CAAC,SAAD,EAAYwB,UAAZ,CAAhB;;EAEA,IAAMW,aAAa,GAAG,SAAhBA,aAAgB,CAAChB,MAAD;IACpBL,iBAAiB,CAAC,KAAD,CAAjB;;IACA,IAAIK,MAAM,CAACc,cAAX,EAA2B;;MAEzBrB,kBAAkB,CAChBH,SAAS,CAACS,IAAV,CAAe,UAACgB,QAAD;QAAA,OAAcA,QAAQ,CAACzJ,EAAT,KAAgB0I,MAAM,CAACc,cAArC;OAAf,CADgB,CAAlB;KAFF,MAKO;;MAEL5C,OAAO;;GATX;;EAaA,IAAM+C,sBAAsB,GAAG,SAAzBA,sBAAyB;IAC7B,IAAMpB,SAAS,GAAGL,eAAe,CAACK,SAAlC;;IACA,IAAI,CAACA,SAAL,EAAgB;MACd,OAAO,IAAP;;;IAGF,IAAMN,OAAO,GAAGY,YAAY,CAACN,SAAD,CAA5B;;IAEA,IAAI,CAACN,OAAL,EAAc;MACZ,OAAO,IAAP;;;IAGF,OAAOA,OAAO,CAAChI,GAAR,CAAY,UAACyI,MAAD;MACjB,IAAMkB,UAAU,GAAG,CAAAjB,aAAa,QAAb,YAAAA,aAAa,CAAE3I,EAAf,OAAsB0I,MAAtB,oBAAsBA,MAAM,CAAE1I,EAA9B,CAAnB;MACA,IAAM6J,aAAa,GAAGD,UAAU,GAAG,QAAH,GAAc,OAA9C;;MAEA,IAAIlB,MAAJ,EAAY;QACV,OACE3J,mBAAA,CAAC+K,SAAD;UAAW1J,GAAG,cAAYsI,MAAM,CAAC1I;SAAjC,EACEjB,mBAAA,CAACgL,kBAAD;UAAoBC,KAAK,EAAEH;SAA3B,EACGD,UAAU,GAAG,GAAH,GAAS,IADtB,CADF,EAKE7K,mBAAA,CAACkL,MAAD;UACE7J,GAAG,EAAEsI,MAAM,CAAC1I;UACZO,OAAO,EAAE;YAAA,OAAMmJ,aAAa,CAAChB,MAAD,CAAnB;;UACTsB,KAAK,EAAEH;SAHT,EAKGnB,MAAM,CAACjD,IALV,CALF,CADF;;;MAiBF,OAAO,IAAP;KAtBK,CAAP;GAZF;;EAsCA,OACE1G,mBAAA,CAACgC,WAAD,MAAA,EACEhC,mBAAA,CAACmL,iBAAD,MAAA,EACEnL,mBAAA,CAACiH,WAAD;IACEP,IAAI,EAAEyC,eAAe,CAACzC;IACtBS,OAAO,EAAE;MAAA,OAAMmC,iBAAiB,CAAC,KAAD,CAAvB;;IACTpC,QAAQ,EAAE;MAAA,OAAMoC,iBAAiB,CAAC,IAAD,CAAvB;;GAHZ,CADF,CADF,EASGD,cAAc,IACbrJ,mBAAA,CAACoL,gBAAD,MAAA,EAAmBR,sBAAsB,EAAzC,CAVJ,CADF;AAeD,CApKM;AAsKP,IAAM5I,WAAS,gBAAG7B,MAAM,CAAC8B,GAAV;EAAA;EAAA;AAAA,iIAAf;AAWA,IAAMkJ,iBAAiB,gBAAGhL,MAAM,CAAC8B,GAAV;EAAA;EAAA;AAAA,6BAAvB;AAKA,IAAMmJ,gBAAgB,gBAAGjL,MAAM,CAAC8B,GAAV;EAAA;EAAA;AAAA,kBAAtB;AAQA,IAAMiJ,MAAM,gBAAG/K,MAAM,CAAC+E,CAAV;EAAA;EAAA;AAAA,qGAED,UAACnF,KAAD;EAAA,OAAWA,KAAK,CAACkL,KAAjB;AAAA,CAFC,CAAZ;AAQA,IAAMD,kBAAkB,gBAAG7K,MAAM,CAACkL,IAAV;EAAA;EAAA;AAAA,2CAEb,UAACtL,KAAD;EAAA,OAAWA,KAAK,CAACkL,KAAjB;AAAA,CAFa,CAAxB;AAKA,IAAMF,SAAS,gBAAG5K,MAAM,CAAC8B,GAAV;EAAA;EAAA;AAAA,oKAAf;;ICtNYqJ,aAAZ;;AAAA,WAAYA;EACVA,yBAAA,aAAA;EACAA,iCAAA,qBAAA;AACD,CAHD,EAAYA,aAAa,KAAbA,aAAa,KAAA,CAAzB;;AAeA,IAAaC,SAAS,GAA8B,SAAvCA,SAAuC;MAClD7E,YAAAA;MACApF,YAAAA;MACAuG,gBAAAA;MACA2D,iBAAAA;mCACAC;MAAAA,sDAAmB;MACnBxC,iBAAAA;MACAC,eAAAA;;EAEA,gBACErI,QAAQ,CAAU,KAAV,CADV;MAAO6K,mBAAP;MAA4BC,sBAA5B;;EAGA,OACE3L,mBAAA,CAAC6B,cAAD;IACEP,IAAI,EAAEM,mBAAmB,CAACgK;IAC1B9J,KAAK,EAAE2J,gBAAgB,GAAG,OAAH,GAAa;IACpC1J,MAAM,EAAE;GAHV,EAKG0J,gBAAgB,IAAIxC,SAApB,IAAiCC,OAAjC,GACClJ,mBAAA,eAAA,MAAA,EACEA,mBAAA,CAAC2H,eAAD;IACExF,IAAI,EAAEb,IAAI,KAAKgK,aAAa,CAACO,gBAAvB,GAA0C,KAA1C,GAAkD;GAD1D,EAGE7L,mBAAA,CAACgJ,cAAD;IACEC,SAAS,EAAEA;IACXC,OAAO,EAAEA;IACTrB,OAAO,EAAE;MACP,IAAIA,QAAJ,EAAa;QACXA,QAAO;;;GALb,CAHF,CADF,EAcGvG,IAAI,KAAKgK,aAAa,CAACO,gBAAvB,IACC7L,mBAAA,CAAC8L,kBAAD,MAAA,EACE9L,mBAAA,CAAC+L,YAAD;IAAcC,GAAG,EAAER,SAAS,IAAIS;GAAhC,CADF,CAfJ,CADD,GAsBCjM,mBAAA,eAAA,MAAA,EACEA,mBAAA,CAACgC,WAAD,MAAA,EACEhC,mBAAA,CAAC2H,eAAD;IACExF,IAAI,EAAEb,IAAI,KAAKgK,aAAa,CAACO,gBAAvB,GAA0C,KAA1C,GAAkD;GAD1D,EAGE7L,mBAAA,CAAC4H,aAAD;IACEG,WAAW,EAAE;MAAA,OAAM4D,sBAAsB,CAAC,KAAD,CAA5B;;IACb7D,SAAS,EAAE;MAAA,OAAM6D,sBAAsB,CAAC,IAAD,CAA5B;;IACXjF,IAAI,EAAEA,IAAI,IAAI;IACdmB,OAAO,EAAE;MACP,IAAIA,QAAJ,EAAa;QACXA,QAAO;;;GANb,CAHF,CADF,EAeGvG,IAAI,KAAKgK,aAAa,CAACO,gBAAvB,IACC7L,mBAAA,CAAC8L,kBAAD,MAAA,EACE9L,mBAAA,CAAC+L,YAAD;IAAcC,GAAG,EAAER,SAAS,IAAIS;GAAhC,CADF,CAhBJ,CADF,EAsBGP,mBAAmB,IAClB1L,mBAAA,CAACkM,mBAAD;IACEC,KAAK,EAAE7K,IAAI,KAAKgK,aAAa,CAACc,QAAvB,GAAkC,MAAlC,GAA2C;IAClDJ,GAAG,EAAEK;GAFP,CAvBJ,CA3BJ,CADF;AA4DD,CAxEM;AA0EP,IAAMrK,WAAS,gBAAG7B,MAAM,CAAC8B,GAAV;EAAA;EAAA;AAAA,kIAAf;AAeA,IAAM0F,eAAa,gBAAGxH,MAAM,CAAC8B,GAAV;EAAA;EAAA;AAAA,mCACT;EAAA,IAAGE,IAAH,SAAGA,IAAH;EAAA,OAAcA,IAAd;AAAA,CADS,CAAnB;AAKA,IAAM2J,kBAAkB,gBAAG3L,MAAM,CAAC8B,GAAV;EAAA;EAAA;AAAA,2DAAxB;AAMA,IAAM8J,YAAY,gBAAG5L,MAAM,CAACyG,GAAV;EAAA;EAAA;AAAA,2DAAlB;AAUA,IAAMsF,mBAAmB,gBAAG/L,MAAM,CAACyG,GAAV;EAAA;EAAA;AAAA,0GAEd;EAAA,IAAGuF,KAAH,SAAGA,KAAH;EAAA,OAAeA,KAAf;AAAA,CAFc,CAAzB;;IC5HaG,WAAW,GAAwB,SAAnCA,WAAmC;MAC9CC,WAAAA;MACA/I,aAAAA;MACAyH,aAAAA;8BACAuB;MAAAA,4CAAc;kCACdC;MAAAA,oDAAkB;2BAClBC;MAAAA,sCAAW;MACX1G,aAAAA;;EAEA,IAAM2G,wBAAwB,GAAG,SAA3BA,wBAA2B,CAAUJ,GAAV,EAAuB/I,KAAvB;IAC/B,IAAIA,KAAK,GAAG+I,GAAZ,EAAiB;MACf/I,KAAK,GAAG+I,GAAR;;;IAEF,OAAQ/I,KAAK,GAAG,GAAT,GAAgB+I,GAAvB;GAJF;;EAOA,OACEvM,mBAAA,CAACgC,WAAD;IACE9B,SAAS,EAAC;kBACEyM,wBAAwB,CAACJ,GAAD,EAAM/I,KAAN,CAAxB,GAAuC;sBACpC;IACfiJ,eAAe,EAAEA;IACjBC,QAAQ,EAAEA;IACV1G,KAAK,EAAEA;GANT,EAQGwG,WAAW,IACVxM,mBAAA,CAAC4M,WAAD,MAAA,EACE5M,mBAAA,CAAC6M,eAAD,MAAA,EACGrJ,KADH,KAAA,EACW+I,GADX,CADF,CATJ,EAeEvM,mBAAA,MAAA;IAAKE,SAAS,EAAC;GAAf,EACEF,mBAAA,MAAA;IACEE,SAAS,2BAAyB+K,KAAzB;IACTjF,KAAK,EAAE;MACL8G,IAAI,EAAE,KADD;MAELhL,KAAK,EAAE6K,wBAAwB,CAACJ,GAAD,EAAM/I,KAAN,CAAxB,GAAuC;;GAJlD,CADF,CAfF,EAwBExD,mBAAA,MAAA;IAAKE,SAAS,EAAC;GAAf,CAxBF,EAyBEF,mBAAA,MAAA;IAAKE,SAAS,EAAC;GAAf,CAzBF,CADF;AA6BD,CA7CM;AA+CP,IAAM2M,eAAe,gBAAG1M,MAAM,CAACkL,IAAV;EAAA;EAAA;AAAA,8HAArB;AAWA,IAAMuB,WAAW,gBAAGzM,MAAM,CAAC8B,GAAV;EAAA;EAAA;AAAA,qCAAjB;AAWA,IAAMD,WAAS,gBAAG7B,MAAM,CAAC8B,GAAV;EAAA;EAAA;AAAA,0HAGA,UAAClC,KAAD;EAAA,OAAWA,KAAK,CAAC2M,QAAjB;AAAA,CAHA,EAIJ,UAAC3M,KAAD;EAAA,OAAWA,KAAK,CAAC0M,eAAjB;AAAA,CAJI,EAOX,UAAC1M,KAAD;EAAA,OAAWA,KAAK,CAACiG,KAAjB;AAAA,CAPW,CAAf;;ICrEa+G,UAAU,GAA0B,SAApCA,UAAoC;MAC/ChJ,YAAAA;MACAzD,aAAAA;MACAC,gBAAAA;;EAEA,gBAA0CM,QAAQ,EAAlD;MAAO6E,aAAP;MAAsBC,gBAAtB;;EACA,IAAM5E,WAAW,GAAG,SAAdA,WAAc;IAClB,IAAII,OAAO,GAAG6B,QAAQ,CAACC,aAAT,iBACEc,IADF,eAAd;IAGA,IAAMiJ,YAAY,GAAG7L,OAAO,CAACqC,KAA7B;IACAmC,gBAAgB,CAACqH,YAAD,CAAhB;GALF;;EAQAhM,SAAS,CAAC;IACR,IAAI0E,aAAJ,EAAmB;MACjBnF,QAAQ,CAACmF,aAAD,CAAR;;GAFK,EAIN,CAACA,aAAD,CAJM,CAAT;EAMA,OACE1F,mBAAA,MAAA;IAAKiB,EAAE,EAAC;GAAR,EACGX,KAAK,CAACY,GAAN,CAAU,UAACC,OAAD;IACT,OACEnB,mBAAA,eAAA,MAAA,EACEA,mBAAA,QAAA;MACEqB,GAAG,EAAEF,OAAO,CAACqC;MACbtD,SAAS,EAAC;MACVsD,KAAK,EAAErC,OAAO,CAACqC;MACfO,IAAI,EAAEA;MACNzC,IAAI,EAAC;KALP,CADF,EAQEtB,mBAAA,QAAA;MAAOwB,OAAO,EAAET;KAAhB,EAA8BI,OAAO,CAACP,KAAtC,CARF,EASEZ,mBAAA,KAAA,MAAA,CATF,CADF;GADD,CADH,CADF;AAmBD,CAvCM;;ICPKiN,eAAZ;;AAAA,WAAYA;EACVA,yBAAA,iBAAA;EACAA,6BAAA,wBAAA;AACD,CAHD,EAAYA,eAAe,KAAfA,eAAe,KAAA,CAA3B;;AAaA,IAAaC,WAAW,GAAgC,SAA3CA,WAA2C;MACtD5L,YAAAA;MACA6L,gBAAAA;MACAC,gBAAAA;MACAtL,aAAAA;MACAvB,gBAAAA;EAEA,IAAM8M,QAAQ,GAAG5H,EAAM,EAAvB;;EAEA,gBAAkD5E,QAAQ,CAAU,KAAV,CAA1D;MAAOyM,iBAAP;MAA0BC,oBAA1B;;EAEA/E,gBAAgB,CAAC,SAAD,EAAY;IAC1B,IAAI8E,iBAAJ,EAAuB;MACrBE,eAAe;;;IAEjBD,oBAAoB,CAAC,KAAD,CAApB;GAJc,CAAhB;;EAOA,IAAMC,eAAe,GAAG,SAAlBA,eAAkB;IACtB,IAAMC,WAAW,GAAGzK,QAAQ,CAAC4C,cAAT,mBAAwCyH,QAAxC,CAApB;;IACA,IAAM7J,KAAK,GAAG2B,MAAM,CAACW,SAAP,CAAiB2H,WAAjB,CAAd;;IAEAlN,QAAQ,CAACmN,MAAM,CAAClK,KAAD,CAAP,CAAR;GAJF;;EAOA,OACExD,mBAAA,MAAA;IACE2N,SAAS,EAAEH;IACXI,WAAW,EAAE;MAAA,OAAML,oBAAoB,CAAC,IAAD,CAA1B;;GAFf,EAIEvN,mBAAA,CAAC2B,OAAD;IACEzB,SAAS,EACPoB,IAAI,KAAK2L,eAAe,CAACY,MAAzB,GACIZ,eAAe,CAACY,MADpB,GAEIZ,eAAe,CAACa;IAEtBxM,IAAI,EAAC;IACL0E,KAAK,EAAE;MAAElE,KAAK,EAAEA;;IAChBiM,GAAG,EAAEZ;IACLZ,GAAG,EAAEa;IACLnM,EAAE,oBAAkBoM;GAVtB,CAJF,CADF;AAmBD,CA5CM;AA8CP,IAAM1L,OAAK,gBAAGxB,MAAM,CAAC6N,KAAV;EAAA;EAAA;AAAA,kBAAX;;ICzDaC,QAAQ,GAAwB,SAAhCA,QAAgC;MAAMlO;;EACjD,OAAOC,mBAAA,WAAA,oBAAcD,MAAd,CAAP;AACD,CAFM;;ACRP;AACA,IAQamO,QAAQ,GAAqB,SAA7BA,QAA6B;2BAAGC;MAAAA,sCAAW;MAAGtO,gBAAAA;EACzD,OAAOG,mBAAA,CAACgC,WAAD;IAAWmM,QAAQ,EAAEA;GAArB,EAAgCtO,QAAhC,CAAP;AACD,CAFM;AAQP,IAAMmC,WAAS,gBAAG7B,MAAM,CAAC8B,GAAV;EAAA;EAAA;AAAA,gIAIS,UAAClC,KAAD;EAAA,OAAWA,KAAK,CAACoO,QAAjB;AAAA,CAJT,CAAf;;;;"}
1
+ {"version":3,"file":"long-bow.esm.js","sources":["../src/components/Button.tsx","../src/constants/uiColors.ts","../src/components/Input.tsx","../src/components/RPGUIContainer.tsx","../src/components/shared/Column.tsx","../src/components/Chat/Chat.tsx","../src/components/CheckButton.tsx","../src/components/DraggableContainer.tsx","../src/components/RPGUIRoot.tsx","../src/components/Dropdown.tsx","../src/components/ListMenu.tsx","../src/components/NPCDialog/img/npcDialog/npcThumbnails/alice.png","../src/components/NPCDialog/img/space.gif","../src/libs/StringHelpers.ts","../src/components/typography/DynamicText.tsx","../src/components/NPCDialog/NPCDialogText.tsx","../src/hooks/useEventListener.ts","../src/components/NPCDialog/QuestionDialog/QuestionDialog.tsx","../src/components/NPCDialog/NPCDialog.tsx","../src/components/ProgressBar.tsx","../src/components/RadioButton.tsx","../src/components/RangeSlider.tsx","../src/components/imgExp.png","../src/components/SimpleProgressBar.tsx","../src/components/SkillProgressBar.tsx","../src/components/TextArea.tsx","../src/components/Truncate.tsx"],"sourcesContent":["import React from 'react';\nimport styled from 'styled-components';\n\nexport enum ButtonTypes {\n RPGUIButton = 'rpgui-button',\n RPGUIGoldButton = 'rpgui-button golden',\n}\n\nexport interface IButtonProps {\n children: React.ReactNode;\n buttonType: ButtonTypes;\n}\n\nexport const Button: React.FC<IButtonProps &\n React.DetailedHTMLProps<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n HTMLButtonElement\n >> = ({ children, buttonType, ...props }) => {\n return (\n <ButtonContainer className={`${buttonType}`} {...props}>\n <p>{children}</p>\n </ButtonContainer>\n );\n};\n\nconst ButtonContainer = styled.button<any>`\n height: 45px;\n font-size: 11.5px;\n`;\n","export const colors = {\n darkGrey: '#3e3e3e',\n};\n","import React from 'react';\n\nexport interface IInputProps\n extends React.DetailedHTMLProps<\n React.InputHTMLAttributes<HTMLInputElement>,\n HTMLInputElement\n > {}\n\nexport const Input: React.FC<IInputProps> = ({ ...props }) => {\n return <input {...props} />;\n};\n","import React from 'react';\nimport styled from 'styled-components';\n\nexport enum RPGUIContainerTypes {\n Framed = 'framed',\n FramedGold = 'framed-golden',\n FramedGold2 = 'framed-golden-2',\n FramedGrey = 'framed-grey',\n}\nexport interface IRPGUIContainerProps {\n type: RPGUIContainerTypes;\n children: React.ReactNode;\n width?: string;\n height?: string;\n className?: string;\n}\n\nexport const RPGUIContainer: React.FC<IRPGUIContainerProps> = ({\n children,\n type,\n width = '50%',\n height,\n className,\n}) => {\n return (\n <Container\n width={width}\n height={height || 'auto'}\n className={`rpgui-container ${type} ${className}`}\n >\n {children}\n </Container>\n );\n};\n\ninterface IContainerProps {\n width: string;\n height: string;\n}\n\nconst Container = styled.div<IContainerProps>`\n height: ${props => props.height};\n width: ${({ width }) => width};\n display: flex;\n flex-wrap: wrap;\n image-rendering: pixelated;\n`;\n","import styled from 'styled-components';\n\ninterface IColumn {\n flex?: number;\n alignItems?: string;\n justifyContent?: string;\n flexWrap?: string;\n}\n\nexport const Column = styled.div<IColumn>`\n flex: ${props => props.flex || 'auto'};\n display: flex;\n flex-wrap: ${props => props.flexWrap || 'nowrap'};\n align-items: ${props => props.alignItems || 'flex-start'};\n justify-content: ${props => props.justifyContent || 'flex-start'};\n`;\n","import { IChatMessage } from '@rpg-engine/shared';\nimport dayjs from 'dayjs';\nimport React, { useEffect, useState } from 'react';\nimport { ErrorBoundary } from 'react-error-boundary';\nimport styled from 'styled-components';\nimport { colors } from '../../constants/uiColors';\nimport { Button, ButtonTypes } from '../Button';\nimport { Input } from '../Input';\nimport { RPGUIContainer, RPGUIContainerTypes } from '../RPGUIContainer';\nimport { Column } from '../shared/Column';\n\ninterface IEmitter {\n _id: string;\n name: string;\n}\nexport interface IChatProps {\n chatMessages: IChatMessage[];\n onSendChatMessage: (message: string) => void;\n onCloseButton: () => void;\n opacity?: number;\n width?: string;\n height?: string;\n}\n\nexport const Chat: React.FC<IChatProps> = ({\n chatMessages,\n onSendChatMessage,\n opacity = 1,\n width = '100%',\n height = '250px',\n onCloseButton,\n}) => {\n const [message, setMessage] = useState('');\n\n useEffect(() => {\n scrollChatToBottom();\n }, []);\n\n useEffect(() => {\n scrollChatToBottom();\n }, [chatMessages]);\n\n const scrollChatToBottom = () => {\n const scrollingElement = document.querySelector('.chat-body');\n if (scrollingElement) {\n scrollingElement.scrollTop = scrollingElement.scrollHeight;\n }\n };\n\n const handleSubmit = (event: React.SyntheticEvent<HTMLFormElement>) => {\n event.preventDefault();\n onSendChatMessage(message);\n setMessage('');\n };\n const getInputValue = (value: string) => {\n setMessage(value);\n };\n\n const onRenderMessageLines = (\n emitter: IEmitter,\n createdAt: string | undefined,\n message: string\n ) => {\n return `${dayjs(createdAt || new Date()).format('HH:mm')} ${\n emitter?.name ? `${emitter.name}: ` : 'Unknown: '\n } ${message}`;\n };\n\n const onRenderChatMessages = (chatMessages: IChatMessage[]) => {\n return chatMessages?.length ? (\n chatMessages?.map(({ _id, createdAt, emitter, message }, index) => (\n <MessageText key={`${_id}_${index}`}>\n {onRenderMessageLines(emitter, createdAt, message)}\n </MessageText>\n ))\n ) : (\n <MessageText>No messages available.</MessageText>\n );\n };\n\n return (\n <Container>\n <CustomContainer\n type={RPGUIContainerTypes.FramedGrey}\n width={width}\n height={height}\n className=\"chat-container\"\n opacity={opacity}\n >\n <ErrorBoundary fallback={<p>Oops! Your chat has crashed.</p>}>\n {onCloseButton && (\n <CloseButton onClick={onCloseButton} onTouchStart={onCloseButton}>\n X\n </CloseButton>\n )}\n <RPGUIContainer\n type={RPGUIContainerTypes.FramedGrey}\n width={'100%'}\n height={'80%'}\n className=\"chat-body dark-background\"\n >\n {onRenderChatMessages(chatMessages)}\n </RPGUIContainer>\n\n <Form onSubmit={handleSubmit}>\n <Column flex={70}>\n <CustomInput\n value={message}\n id=\"inputMessage\"\n onChange={e => getInputValue(e.target.value)}\n height={20}\n className=\"chat-input dark-background\"\n type=\"text\"\n autoComplete=\"off\"\n />\n </Column>\n <Column justifyContent=\"flex-end\">\n <Button\n buttonType={ButtonTypes.RPGUIButton}\n id=\"chat-send-button\"\n >\n Send\n </Button>\n </Column>\n </Form>\n </ErrorBoundary>\n </CustomContainer>\n </Container>\n );\n};\n\nconst Container = styled.div`\n position: relative;\n`;\n\nconst CloseButton = styled.div`\n position: absolute;\n top: 3px;\n right: 0px;\n color: white;\n z-index: 22;\n font-size: 10px;\n`;\n\nconst CustomInput = styled(Input)`\n height: 30px;\n width: 100%;\n\n .rpgui-content .input {\n min-height: 39px;\n }\n`;\n\ninterface ICustomContainerProps {\n opacity: number;\n}\n\nconst CustomContainer = styled(RPGUIContainer)`\n display: block;\n\n opacity: ${(props: ICustomContainerProps) => props.opacity};\n\n &:hover {\n opacity: 1;\n }\n\n .dark-background {\n background-color: ${colors.darkGrey} !important;\n }\n\n .chat-body {\n &.rpgui-container.framed-grey {\n background: unset;\n }\n max-height: 170px;\n overflow-y: auto;\n }\n`;\n\nconst Form = styled.form`\n display: flex;\n width: 100%;\n justify-content: center;\n align-items: center;\n`;\n\nconst MessageText = styled.p`\n display: block !important;\n width: 100%;\n font-size: 0.7rem !important;\n overflow-y: auto;\n margin: 0;\n`;\n","import React, { useEffect, useState } from 'react';\n\nexport interface ICheckItems {\n label: string;\n value: string;\n}\n\nexport interface ICheckProps {\n items: ICheckItems[];\n onChange: (selectedValues: IChecklistSelectedValues) => void;\n}\n\ninterface IChecklistSelectedValues {\n [label: string]: boolean;\n}\n\nexport const CheckButton: React.FC<ICheckProps> = ({ items, onChange }) => {\n const generateSelectedValuesList = () => {\n const selectedValues: IChecklistSelectedValues = {};\n\n items.forEach(item => {\n selectedValues[item.label] = false;\n });\n\n return selectedValues;\n };\n\n const [selectedValues, setSelectedValues] = useState<\n IChecklistSelectedValues\n >(generateSelectedValuesList());\n\n const handleClick = (label: string) => {\n setSelectedValues({\n ...selectedValues,\n [label]: !selectedValues[label],\n });\n };\n\n useEffect(() => {\n if (selectedValues) {\n onChange(selectedValues);\n }\n }, [selectedValues]);\n\n return (\n <div id=\"elemento-checkbox\">\n {items?.map((element, index) => {\n return (\n <div key={`${element.label}_${index}`}>\n <input\n className=\"rpgui-checkbox\"\n type=\"checkbox\"\n checked={selectedValues[element.label]}\n onChange={() => {}}\n />\n <label onClick={() => handleClick(element.label)}>\n {element.label}\n </label>\n <br />\n </div>\n );\n })}\n </div>\n );\n};\n","import React from 'react';\nimport Draggable from 'react-draggable';\nimport styled from 'styled-components';\n\nexport interface IDraggableContainerProps {\n children: React.ReactNode;\n width?: string;\n height?: string;\n className?: string;\n title: string;\n imgSrc?: string;\n imgWidth?: string;\n onCloseButton: () => void;\n}\n\nexport const DraggableContainer: React.FC<IDraggableContainerProps> = ({\n children,\n width = '50%',\n height,\n className,\n onCloseButton,\n title,\n imgSrc,\n imgWidth = '20px',\n}) => {\n return (\n <Draggable>\n <Container\n width={width}\n height={height || 'auto'}\n className={`rpgui-container framed-grey ${className} rpgui-draggable`}\n >\n <Title>\n {imgSrc ? (\n <Icon src={imgSrc} width={imgWidth} />\n ) : (\n <Icon width={imgWidth} />\n )}\n {title}\n </Title>\n {onCloseButton && (\n <CloseButton onClick={onCloseButton} onTouchStart={onCloseButton}>\n X\n </CloseButton>\n )}\n\n {children}\n </Container>\n </Draggable>\n );\n};\n\ninterface IContainerProps {\n width: string;\n height: string;\n}\n\nconst Container = styled.div<IContainerProps>`\n height: ${props => props.height};\n width: ${({ width }) => width};\n display: flex;\n flex-wrap: wrap;\n image-rendering: pixelated;\n`;\n\nconst CloseButton = styled.div`\n position: absolute;\n top: 3px;\n right: 0px;\n color: white;\n z-index: 22;\n font-size: 10px;\n`;\n\nconst Title = styled.div`\n position: absolute;\n top: 3px;\n right: 50%;\n color: white;\n z-index: 22;\n font-size: 10px;\n`;\n\ninterface ICustomIconProps {\n width: string;\n}\n\nconst Icon = styled.img`\n color: white;\n z-index: 22;\n font-size: 10px;\n width: ${(props: ICustomIconProps) => props.width};\n margin-right: 0.5rem;\n`;\n","import React from 'react';\nimport 'rpgui/rpgui.min.css';\nimport 'rpgui/rpgui.min.js';\n\ninterface IProps {\n children: React.ReactNode;\n}\n\n//@ts-ignore\nexport const _RPGUI = RPGUI;\n\nexport const RPGUIRoot: React.FC<IProps> = ({ children }) => {\n return <div className=\"rpgui-content\">{children}</div>;\n};\n","import React, { useEffect, useState } from 'react';\nimport { v4 as uuidv4 } from 'uuid';\nimport { _RPGUI } from './RPGUIRoot';\n\nexport interface IOptionsProps {\n id: number;\n value: string;\n option: string;\n}\n\nexport interface IDropdownProps {\n options: IOptionsProps[];\n width?: string;\n onChange: (value: string) => void;\n}\n\nexport const Dropdown: React.FC<IDropdownProps> = ({\n options,\n width,\n onChange,\n}) => {\n const dropdownId = uuidv4();\n\n const [selectedValue, setSelectedValue] = useState<string>('');\n\n useEffect(() => {\n const element = document.getElementById(`rpgui-dropdown-${dropdownId}`);\n const dropdownValue = _RPGUI.get_value(element);\n setSelectedValue(dropdownValue);\n\n element?.addEventListener('change', (event: any) => {\n setSelectedValue(event?.target.value);\n });\n }, []);\n\n useEffect(() => {\n if (selectedValue) {\n onChange(selectedValue);\n }\n }, [selectedValue]);\n\n return (\n <select\n id={`rpgui-dropdown-${dropdownId}`}\n style={{ width: width }}\n className=\"rpgui-dropdown\"\n >\n {options.map(option => {\n return (\n <option key={option.id} value={option.value}>\n {option.option}\n </option>\n );\n })}\n </select>\n );\n};\n","import React from 'react';\nimport styled from 'styled-components';\n\ninterface IListMenuOption {\n id: string;\n text: string;\n}\n\nexport interface IListMenuProps {\n x: number;\n y: number;\n options: IListMenuOption[];\n onSelected: (selectedOptionId: string) => void;\n fontSize?: number;\n}\n\nexport const ListMenu: React.FC<IListMenuProps> = ({\n options,\n onSelected,\n x,\n y,\n fontSize = 0.8,\n}) => {\n return (\n <Container x={x} y={y} fontSize={fontSize}>\n <ul className=\"rpgui-list-imp\" style={{ overflow: 'hidden' }}>\n {options.map(params => (\n <ListElement\n key={params.text}\n onClick={() => {\n onSelected(params.id);\n }}\n >\n {params.text}\n </ListElement>\n ))}\n </ul>\n </Container>\n );\n};\n\ninterface IContainerProps {\n x?: number;\n y?: number;\n fontSize?: number;\n}\n\nconst Container = styled.div<IContainerProps>`\n display: flex;\n flex-direction: column;\n width: 100%;\n justify-content: start;\n align-items: flex-start;\n position: absolute;\n top: ${props => props.y || 0}px;\n left: ${props => props.x || 0}px;\n\n li {\n font-size: ${props => props.fontSize}em;\n }\n`;\n\nconst ListElement = styled.li`\n margin-right: 0.5rem;\n`;\n","const img = require('./alice.png'); export default img;","const img = require('./space.gif'); export default img;","export const chunkString = (str: string, length: number) => {\n return str.match(new RegExp('.{1,' + length + '}', 'g'));\n};\n","import React, { useEffect, useState } from 'react';\nimport styled from 'styled-components';\n\ninterface IProps {\n text: string;\n onFinish?: () => void;\n onStart?: () => void;\n}\n\nexport const DynamicText: React.FC<IProps> = ({ text, onFinish, onStart }) => {\n const [textState, setTextState] = useState<string>('');\n\n useEffect(() => {\n let i = 0;\n const interval = setInterval(() => {\n // on every interval, show one more character\n\n if (i === 0) {\n if (onStart) {\n onStart();\n }\n }\n\n if (i < text.length) {\n setTextState(text.substring(0, i + 1));\n i++;\n } else {\n clearInterval(interval);\n if (onFinish) {\n onFinish();\n }\n }\n }, 50);\n\n return () => {\n clearInterval(interval);\n };\n }, [text]);\n\n return <TextContainer>{textState}</TextContainer>;\n};\n\nconst TextContainer = styled.p`\n font-size: 0.7rem !important;\n color: white;\n text-shadow: 1px 1px 0px #000000;\n letter-spacing: 1.2px;\n word-break: normal;\n`;\n","import React, { useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport { chunkString } from '../../libs/StringHelpers';\nimport { DynamicText } from '../typography/DynamicText';\n\ninterface IProps {\n text: string;\n onClose: () => void;\n onEndStep: () => void;\n onStartStep: () => void;\n}\n\nexport const NPCDialogText: React.FC<IProps> = ({\n text,\n onClose,\n onEndStep,\n onStartStep,\n}) => {\n const textChunks = chunkString(text, 85);\n\n const [chunkIndex, setChunkIndex] = useState<number>(0);\n\n const onHandleSpacePress = (event: KeyboardEvent) => {\n if (event.code === 'Space') {\n const hasNextChunk = textChunks?.[chunkIndex + 1] || false;\n\n if (hasNextChunk) {\n setChunkIndex(prev => prev + 1);\n } else {\n // if there's no more text chunks, close the dialog\n onClose();\n }\n }\n };\n\n useEffect(() => {\n document.addEventListener('keydown', onHandleSpacePress);\n\n return () => document.removeEventListener('keydown', onHandleSpacePress);\n }, [chunkIndex]);\n\n return (\n <Container>\n <DynamicText\n text={textChunks?.[chunkIndex] || ''}\n onFinish={onEndStep}\n onStart={onStartStep}\n />\n </Container>\n );\n};\n\nconst Container = styled.div``;\n","import React from 'react';\n\n//@ts-ignore\nexport const useEventListener = (type, handler, el = window) => {\n const savedHandler = React.useRef();\n\n React.useEffect(() => {\n savedHandler.current = handler;\n }, [handler]);\n\n React.useEffect(() => {\n //@ts-ignore\n const listener = e => savedHandler.current(e);\n\n el.addEventListener(type, listener);\n\n return () => {\n el.removeEventListener(type, listener);\n };\n }, [type, el]);\n};\n","import React, { useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport { useEventListener } from '../../../hooks/useEventListener';\nimport { DynamicText } from '../../typography/DynamicText';\n\nexport interface IQuestionDialogAnswer {\n id: number;\n text: string;\n nextQuestionId?: number;\n}\n\nexport interface IQuestionDialog {\n id: number;\n text: string;\n answerIds?: number[];\n}\n\nexport interface IProps {\n questions: IQuestionDialog[];\n answers: IQuestionDialogAnswer[];\n onClose: () => void;\n}\n\nexport const QuestionDialog: React.FC<IProps> = ({\n questions,\n answers,\n onClose,\n}) => {\n const [currentQuestion, setCurrentQuestion] = useState(questions[0]);\n\n const [canShowAnswers, setCanShowAnswers] = useState<boolean>(false);\n\n const onGetFirstAnswer = () => {\n if (!currentQuestion.answerIds || currentQuestion.answerIds.length === 0) {\n return null;\n }\n\n const firstAnswerId = currentQuestion.answerIds![0];\n\n return answers.find(answer => answer.id === firstAnswerId);\n };\n\n const [\n currentAnswer,\n setCurrentAnswer,\n ] = useState<IQuestionDialogAnswer | null>(onGetFirstAnswer()!);\n\n useEffect(() => {\n setCurrentAnswer(onGetFirstAnswer()!);\n }, [currentQuestion]);\n\n const onGetAnswers = (answerIds: number[]) => {\n return answerIds.map((answerId: number) =>\n answers.find(answer => answer.id === answerId)\n );\n };\n\n const onKeyPress = (e: KeyboardEvent) => {\n switch (e.key) {\n case 'ArrowDown':\n // select next answer, if any.\n // if no next answer, select first answer\n // const nextAnswer = onGetAnswers(currentQuestion.answerIds!).find(\n // (answer) => answer?.id === currentAnswer!.id + 1\n // );\n\n const nextAnswerIndex = onGetAnswers(\n currentQuestion.answerIds!\n ).findIndex(answer => answer?.id === currentAnswer!.id + 1);\n\n const nextAnswerID = currentQuestion.answerIds![nextAnswerIndex];\n\n // console.log(nextAnswerIndex);\n\n const nextAnswer = onGetAnswers(currentQuestion.answerIds!).find(\n answer => answer?.id === nextAnswerID\n );\n\n setCurrentAnswer(nextAnswer || onGetFirstAnswer()!);\n\n break;\n case 'ArrowUp':\n // select previous answer, if any.\n // if no previous answer, select last answer\n\n const previousAnswerIndex = onGetAnswers(\n currentQuestion.answerIds!\n ).findIndex(answer => answer?.id === currentAnswer!.id - 1);\n\n const previousAnswerID =\n currentQuestion.answerIds &&\n currentQuestion.answerIds[previousAnswerIndex];\n\n const previousAnswer = onGetAnswers(currentQuestion.answerIds!).find(\n answer => answer?.id === previousAnswerID\n );\n\n if (previousAnswer) {\n setCurrentAnswer(previousAnswer);\n } else {\n setCurrentAnswer(onGetAnswers(currentQuestion.answerIds!).pop()!);\n }\n\n break;\n case 'Enter':\n setCanShowAnswers(false);\n\n if (!currentAnswer?.nextQuestionId) {\n onClose();\n return;\n } else {\n setCurrentQuestion(\n questions.find(\n question => question.id === currentAnswer!.nextQuestionId\n )!\n );\n }\n\n break;\n }\n };\n useEventListener('keydown', onKeyPress);\n\n const onAnswerClick = (answer: IQuestionDialogAnswer) => {\n setCanShowAnswers(false);\n if (answer.nextQuestionId) {\n // if there is a next question, go to it\n setCurrentQuestion(\n questions.find(question => question.id === answer.nextQuestionId)!\n );\n } else {\n // else, finish dialog!\n onClose();\n }\n };\n\n const onRenderCurrentAnswers = () => {\n const answerIds = currentQuestion.answerIds;\n if (!answerIds) {\n return null;\n }\n\n const answers = onGetAnswers(answerIds);\n\n if (!answers) {\n return null;\n }\n\n return answers.map(answer => {\n const isSelected = currentAnswer?.id === answer?.id;\n const selectedColor = isSelected ? 'yellow' : 'white';\n\n if (answer) {\n return (\n <AnswerRow key={`answer_${answer.id}`}>\n <AnswerSelectedIcon color={selectedColor}>\n {isSelected ? 'X' : null}\n </AnswerSelectedIcon>\n\n <Answer\n key={answer.id}\n onClick={() => onAnswerClick(answer)}\n color={selectedColor}\n >\n {answer.text}\n </Answer>\n </AnswerRow>\n );\n }\n\n return null;\n });\n };\n\n return (\n <Container>\n <QuestionContainer>\n <DynamicText\n text={currentQuestion.text}\n onStart={() => setCanShowAnswers(false)}\n onFinish={() => setCanShowAnswers(true)}\n />\n </QuestionContainer>\n\n {canShowAnswers && (\n <AnswersContainer>{onRenderCurrentAnswers()}</AnswersContainer>\n )}\n </Container>\n );\n};\n\nconst Container = styled.div`\n display: flex;\n\n word-break: break-all;\n\n box-sizing: border-box;\n justify-content: flex-start;\n align-items: flex-start;\n flex-wrap: wrap;\n`;\n\nconst QuestionContainer = styled.div`\n flex: 100%;\n width: 100%;\n`;\n\nconst AnswersContainer = styled.div`\n flex: 100%;\n`;\n\ninterface IAnswerProps {\n color: string;\n}\n\nconst Answer = styled.p<IAnswerProps>`\n flex: auto;\n color: ${props => props.color} !important;\n font-size: 0.65rem !important;\n background: inherit;\n border: none;\n`;\n\nconst AnswerSelectedIcon = styled.span<IAnswerProps>`\n flex: 5% 0 0;\n color: ${props => props.color} !important;\n`;\n\nconst AnswerRow = styled.div`\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n align-items: center;\n margin-bottom: 0.5rem;\n height: 22px;\n\n p {\n line-height: unset;\n margin-top: 0;\n margin-bottom: 0rem;\n }\n`;\n","import React, { useState } from 'react';\nimport styled from 'styled-components';\nimport { RPGUIContainer, RPGUIContainerTypes } from '../RPGUIContainer';\nimport aliceDefaultThumbnail from './img/npcDialog/npcThumbnails/alice.png';\nimport pressSpaceGif from './img/space.gif';\nimport { NPCDialogText } from './NPCDialogText';\nimport {\n IQuestionDialog,\n IQuestionDialogAnswer,\n QuestionDialog,\n} from './QuestionDialog/QuestionDialog';\n\nexport enum NPCDialogType {\n TextOnly = 'TextOnly',\n TextAndThumbnail = 'TextAndThumbnail',\n}\n\nexport interface INPCDialogProps {\n text?: string;\n type: NPCDialogType;\n imagePath?: string;\n onClose?: () => void;\n isQuestionDialog?: boolean;\n answers?: IQuestionDialogAnswer[];\n questions?: IQuestionDialog[];\n}\n\nexport const NPCDialog: React.FC<INPCDialogProps> = ({\n text,\n type,\n onClose,\n imagePath,\n isQuestionDialog = false,\n questions,\n answers,\n}) => {\n const [showGoNextIndicator, setShowGoNextIndicator] = useState<boolean>(\n false\n );\n\n return (\n <RPGUIContainer\n type={RPGUIContainerTypes.FramedGold}\n width={isQuestionDialog ? '600px' : '50%'}\n height={'180px'}\n >\n {isQuestionDialog && questions && answers ? (\n <>\n <TextContainer\n flex={type === NPCDialogType.TextAndThumbnail ? '70%' : '100%'}\n >\n <QuestionDialog\n questions={questions}\n answers={answers}\n onClose={() => {\n if (onClose) {\n onClose();\n }\n }}\n />\n </TextContainer>\n {type === NPCDialogType.TextAndThumbnail && (\n <ThumbnailContainer>\n <NPCThumbnail src={imagePath || aliceDefaultThumbnail} />\n </ThumbnailContainer>\n )}\n </>\n ) : (\n <>\n <Container>\n <TextContainer\n flex={type === NPCDialogType.TextAndThumbnail ? '70%' : '100%'}\n >\n <NPCDialogText\n onStartStep={() => setShowGoNextIndicator(false)}\n onEndStep={() => setShowGoNextIndicator(true)}\n text={text || 'No text provided.'}\n onClose={() => {\n if (onClose) {\n onClose();\n }\n }}\n />\n </TextContainer>\n {type === NPCDialogType.TextAndThumbnail && (\n <ThumbnailContainer>\n <NPCThumbnail src={imagePath || aliceDefaultThumbnail} />\n </ThumbnailContainer>\n )}\n </Container>\n {showGoNextIndicator && (\n <PressSpaceIndicator\n right={type === NPCDialogType.TextOnly ? '1rem' : '10.5rem'}\n src={pressSpaceGif}\n />\n )}\n </>\n )}\n </RPGUIContainer>\n );\n};\n\nconst Container = styled.div`\n display: flex;\n width: 100%;\n height: 100%;\n\n box-sizing: border-box;\n justify-content: center;\n align-items: flex-start;\n position: relative;\n`;\n\ninterface ITextContainerProps {\n flex: string;\n}\n\nconst TextContainer = styled.div<ITextContainerProps>`\n flex: ${({ flex }) => flex} 0 0;\n width: 355px;\n`;\n\nconst ThumbnailContainer = styled.div`\n flex: 30% 0 0;\n display: flex;\n justify-content: flex-end;\n`;\n\nconst NPCThumbnail = styled.img`\n image-rendering: pixelated;\n height: 128px;\n width: 128px;\n`;\n\ninterface IPressSpaceIndicatorProps {\n right: string;\n}\n\nconst PressSpaceIndicator = styled.img<IPressSpaceIndicatorProps>`\n position: absolute;\n right: ${({ right }) => right};\n bottom: 1rem;\n height: 20.7px;\n image-rendering: -webkit-optimize-contrast;\n`;\n","import React from 'react';\nimport styled from 'styled-components';\n\nexport interface IBarProps {\n max: number;\n value: number;\n color: 'red' | 'blue' | 'green';\n style?: Record<string, any>;\n displayText?: boolean;\n percentageWidth?: number;\n minWidth?: number;\n}\n\nexport const ProgressBar: React.FC<IBarProps> = ({\n max,\n value,\n color,\n displayText = true,\n percentageWidth = 40,\n minWidth = 100,\n style,\n}) => {\n const calculatePercentageValue = function(max: number, value: number) {\n if (value > max) {\n value = max;\n }\n return (value * 100) / max;\n };\n\n return (\n <Container\n className=\"rpgui-progress\"\n data-value={calculatePercentageValue(max, value) / 100}\n data-rpguitype=\"progress\"\n percentageWidth={percentageWidth}\n minWidth={minWidth}\n style={style}\n >\n {displayText && (\n <TextOverlay>\n <ProgressBarText>\n {value}/{max}\n </ProgressBarText>\n </TextOverlay>\n )}\n <div className=\" rpgui-progress-track\">\n <div\n className={`rpgui-progress-fill ${color} `}\n style={{\n left: '0px',\n width: calculatePercentageValue(max, value) + '%',\n }}\n ></div>\n </div>\n <div className=\" rpgui-progress-left-edge\"></div>\n <div className=\" rpgui-progress-right-edge\"></div>\n </Container>\n );\n};\n\nconst ProgressBarText = styled.span`\n font-size: 1rem;\n color: white;\n text-align: center;\n z-index: 1;\n position: absolute;\n left: 50%;\n transform: translateX(-50%);\n top: 12px;\n`;\n\nconst TextOverlay = styled.div`\n width: 100%;\n position: relative;\n`;\n\ninterface IContainerProps {\n percentageWidth?: number;\n minWidth?: number;\n style?: Record<string, any>;\n}\n\nconst Container = styled.div<IContainerProps>`\n display: flex;\n flex-direction: column;\n min-width: ${props => props.minWidth}px;\n width: ${props => props.percentageWidth}%;\n justify-content: start;\n align-items: flex-start;\n ${props => props.style}\n`;\n","import React, { useEffect, useState } from 'react';\n\nexport interface IRadioItems {\n label: string;\n value: string;\n}\n\nexport interface IRadioProps {\n name: string;\n items: IRadioItems[];\n onChange: (value: string) => void;\n}\n\nexport const InputRadio: React.FC<IRadioProps> = ({\n name,\n items,\n onChange,\n}) => {\n const [selectedValue, setSelectedValue] = useState<string>();\n const handleClick = () => {\n let element = document.querySelector(\n `input[name=${name}]:checked`\n ) as HTMLInputElement;\n const elementValue = element.value;\n setSelectedValue(elementValue);\n };\n\n useEffect(() => {\n if (selectedValue) {\n onChange(selectedValue);\n }\n }, [selectedValue]);\n\n return (\n <div id=\"elemento-radio\">\n {items.map(element => {\n return (\n <>\n <input\n key={element.value}\n className=\"rpgui-radio\"\n value={element.value}\n name={name}\n type=\"radio\"\n />\n <label onClick={handleClick}>{element.label}</label>\n <br />\n </>\n );\n })}\n </div>\n );\n};\n","import React, { useState } from 'react';\nimport styled from 'styled-components';\nimport { v4 as uuidv4 } from 'uuid';\nimport { useEventListener } from '../hooks/useEventListener';\nimport { _RPGUI } from './RPGUIRoot';\n\nexport enum RangeSliderType {\n Slider = 'rpgui-slider',\n GoldSlider = 'rpgui-slider golden',\n}\n\nexport interface IRangeSliderProps {\n type: RangeSliderType;\n valueMin: number;\n valueMax: number;\n width: string;\n onChange: (value: number) => void;\n}\n\nexport const RangeSlider: React.FC<IRangeSliderProps> = ({\n type,\n valueMin,\n valueMax,\n width,\n onChange,\n}) => {\n const sliderId = uuidv4();\n\n const [wasMouseDownFirst, setWasMouseDownFirst] = useState<boolean>(false);\n\n useEventListener('mouseup', () => {\n if (wasMouseDownFirst) {\n onHandleMouseUp();\n }\n setWasMouseDownFirst(false);\n });\n\n const onHandleMouseUp = () => {\n const rpguiSlider = document.getElementById(`rpgui-slider-${sliderId}`);\n const value = _RPGUI.get_value(rpguiSlider);\n\n onChange(Number(value));\n };\n\n return (\n <div\n onMouseUp={onHandleMouseUp}\n onMouseDown={() => setWasMouseDownFirst(true)}\n >\n <Input\n className={\n type === RangeSliderType.Slider\n ? RangeSliderType.Slider\n : RangeSliderType.GoldSlider\n }\n type=\"range\"\n style={{ width: width }}\n min={valueMin}\n max={valueMax}\n id={`rpgui-slider-${sliderId}`}\n />\n </div>\n );\n};\n\nconst Input = styled.input`\n opacity: 0;\n`;\n","const img = require('./imgExp.png'); export default img;","import React from 'react';\nimport styled from 'styled-components';\n\ninterface IProps {\n value: number;\n height?: string;\n bgColor?: string;\n}\n\nexport const SimpleProgressBar: React.FC<IProps> = ({\n value,\n\n bgColor = 'red',\n}) => {\n return (\n <Container>\n <ProgressBarContainer>\n <BackgroundBar>\n <Progress value={value} bgColor={bgColor} />\n </BackgroundBar>\n </ProgressBarContainer>\n </Container>\n );\n};\n\nconst Container = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n width: 100%;\n`;\n\nconst BackgroundBar = styled.span`\n background-color: rgba(0, 0, 0, 0.075);\n`;\n\ninterface IProgressProps {\n value: number;\n bgColor: string;\n}\n\nconst Progress = styled.span`\n background-color: ${(props: IProgressProps) => props.bgColor};\n width: ${(props: IProgressProps) => props.value}%;\n`;\n\nconst ProgressBarContainer = styled.div`\n border-radius: 60px;\n border: 1px solid #282424;\n overflow: hidden;\n width: 100%;\n span {\n display: block;\n height: 100%;\n }\n\n height: 8px;\n`;\n","import React from 'react';\nimport styled from 'styled-components';\nimport imgSrcTemplate from './imgExp.png';\nimport { SimpleProgressBar } from './SimpleProgressBar';\n\nexport interface ISkillProgressBarProps {\n value: number;\n\n height: string;\n bgColor: string;\n titleName: string;\n\n logoSrc?: string;\n}\n\nexport const SkillProgressBar: React.FC<ISkillProgressBarProps> = ({\n value,\n bgColor,\n titleName,\n\n logoSrc = imgSrcTemplate,\n}) => {\n return (\n <>\n <ProgressTitle>\n <TitleName>{titleName}</TitleName>\n <ValueDisplay>{value}</ValueDisplay>\n </ProgressTitle>\n <ProgressBody>\n <ProgressIconContainer>\n <Icon src={logoSrc} />\n </ProgressIconContainer>\n\n <SimpleProgressBar value={value} bgColor={bgColor} />\n </ProgressBody>\n </>\n );\n};\n\nconst TitleName = styled.span`\n margin-left: 5px;\n`;\n\nconst ValueDisplay = styled.span``;\n\nconst ProgressIconContainer = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nconst ProgressBody = styled.div`\n display: flex;\n flex-direction: row;\n`;\n\nconst ProgressTitle = styled.div`\n width: 100%;\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n span {\n font-size: 0.6rem;\n }\n`;\n\nconst Icon = styled.img`\n margin-right: 10px;\n height: 30px;\n`;\n","import React from 'react';\n\nexport interface ITextArea\n extends React.DetailedHTMLProps<\n React.TextareaHTMLAttributes<HTMLTextAreaElement>,\n HTMLTextAreaElement\n > {}\n\nexport const TextArea: React.FC<ITextArea> = ({ ...props }) => {\n return <textarea {...props} />;\n};\n","/* eslint-disable react/require-default-props */\nimport React from 'react';\nimport styled from 'styled-components';\n\ninterface IProps {\n maxLines?: number;\n children: React.ReactNode;\n}\n\nexport const Truncate: React.FC<IProps> = ({ maxLines = 1, children }) => {\n return <Container maxLines={maxLines}>{children}</Container>;\n};\n\ninterface IContainerProps {\n maxLines: number;\n}\n\nconst Container = styled.div<IContainerProps>`\n display: -webkit-box;\n max-width: 100%;\n max-height: 100%;\n -webkit-line-clamp: ${props => props.maxLines};\n -webkit-box-orient: vertical;\n overflow: hidden;\n`;\n"],"names":["ButtonTypes","Button","children","buttonType","props","React","ButtonContainer","className","styled","button","colors","darkGrey","Input","RPGUIContainerTypes","RPGUIContainer","type","width","height","Container","div","Column","flex","flexWrap","alignItems","justifyContent","Chat","chatMessages","onSendChatMessage","opacity","onCloseButton","useState","message","setMessage","useEffect","scrollChatToBottom","scrollingElement","document","querySelector","scrollTop","scrollHeight","handleSubmit","event","preventDefault","getInputValue","value","onRenderMessageLines","emitter","createdAt","dayjs","Date","format","name","onRenderChatMessages","length","map","index","_id","MessageText","key","CustomContainer","FramedGrey","ErrorBoundary","fallback","CloseButton","onClick","onTouchStart","Form","onSubmit","CustomInput","id","onChange","e","target","autoComplete","RPGUIButton","form","p","CheckButton","items","generateSelectedValuesList","selectedValues","forEach","item","label","setSelectedValues","handleClick","element","checked","DraggableContainer","title","imgSrc","imgWidth","Draggable","Title","Icon","src","img","_RPGUI","RPGUI","RPGUIRoot","Dropdown","options","dropdownId","uuidv4","selectedValue","setSelectedValue","getElementById","dropdownValue","get_value","addEventListener","style","option","ListMenu","onSelected","x","y","fontSize","overflow","params","ListElement","text","li","chunkString","str","match","RegExp","DynamicText","onFinish","onStart","textState","setTextState","i","interval","setInterval","substring","clearInterval","TextContainer","NPCDialogText","onClose","onEndStep","onStartStep","textChunks","chunkIndex","setChunkIndex","onHandleSpacePress","code","hasNextChunk","prev","removeEventListener","useEventListener","handler","el","window","savedHandler","useRef","current","listener","QuestionDialog","questions","answers","currentQuestion","setCurrentQuestion","canShowAnswers","setCanShowAnswers","onGetFirstAnswer","answerIds","firstAnswerId","find","answer","currentAnswer","setCurrentAnswer","onGetAnswers","answerId","onKeyPress","nextAnswerIndex","findIndex","nextAnswerID","nextAnswer","previousAnswerIndex","previousAnswerID","previousAnswer","pop","nextQuestionId","question","onAnswerClick","onRenderCurrentAnswers","isSelected","selectedColor","AnswerRow","AnswerSelectedIcon","color","Answer","QuestionContainer","AnswersContainer","span","NPCDialogType","NPCDialog","imagePath","isQuestionDialog","showGoNextIndicator","setShowGoNextIndicator","FramedGold","TextAndThumbnail","ThumbnailContainer","NPCThumbnail","aliceDefaultThumbnail","PressSpaceIndicator","right","TextOnly","pressSpaceGif","ProgressBar","max","displayText","percentageWidth","minWidth","calculatePercentageValue","TextOverlay","ProgressBarText","left","InputRadio","elementValue","RangeSliderType","RangeSlider","valueMin","valueMax","sliderId","wasMouseDownFirst","setWasMouseDownFirst","onHandleMouseUp","rpguiSlider","Number","onMouseUp","onMouseDown","Slider","GoldSlider","min","input","SimpleProgressBar","bgColor","ProgressBarContainer","BackgroundBar","Progress","SkillProgressBar","titleName","logoSrc","imgSrcTemplate","ProgressTitle","TitleName","ValueDisplay","ProgressBody","ProgressIconContainer","TextArea","Truncate","maxLines"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rpg-engine/long-bow",
3
- "version": "0.1.52",
3
+ "version": "0.1.56",
4
4
  "license": "MIT",
5
5
  "main": "dist/index.js",
6
6
  "typings": "dist/index.d.ts",
@@ -29,7 +29,8 @@
29
29
  "analyze": "size-limit --why",
30
30
  "storybook": "start-storybook -p 6006",
31
31
  "build-storybook": "build-storybook",
32
- "configure": "./environment/download-credentials.sh"
32
+ "configure": "./environment/download-credentials.sh",
33
+ "update:shared-deps": "yarn add @rpg-engine/shared"
33
34
  },
34
35
  "peerDependencies": {
35
36
  "react": ">=16"
@@ -83,7 +84,9 @@
83
84
  "@rollup/plugin-image": "^2.1.1",
84
85
  "@rpg-engine/shared": "^0.2.49",
85
86
  "dayjs": "^1.11.2",
87
+ "react-draggable": "^4.4.5",
86
88
  "react-error-boundary": "^3.1.4",
89
+ "react-resizable": "^3.0.4",
87
90
  "rollup-plugin-image-files": "^1.4.2",
88
91
  "rpgui": "^1.0.3"
89
92
  }
@@ -11,13 +11,11 @@ export interface IButtonProps {
11
11
  buttonType: ButtonTypes;
12
12
  }
13
13
 
14
- export const Button: React.FC<
15
- IButtonProps &
16
- React.DetailedHTMLProps<
17
- React.ButtonHTMLAttributes<HTMLButtonElement>,
18
- HTMLButtonElement
19
- >
20
- > = ({ children, buttonType, ...props }) => {
14
+ export const Button: React.FC<IButtonProps &
15
+ React.DetailedHTMLProps<
16
+ React.ButtonHTMLAttributes<HTMLButtonElement>,
17
+ HTMLButtonElement
18
+ >> = ({ children, buttonType, ...props }) => {
21
19
  return (
22
20
  <ButtonContainer className={`${buttonType}`} {...props}>
23
21
  <p>{children}</p>
@@ -107,7 +107,7 @@ export const Chat: React.FC<IChatProps> = ({
107
107
  <CustomInput
108
108
  value={message}
109
109
  id="inputMessage"
110
- onChange={(e) => getInputValue(e.target.value)}
110
+ onChange={e => getInputValue(e.target.value)}
111
111
  height={20}
112
112
  className="chat-input dark-background"
113
113
  type="text"
@@ -18,15 +18,16 @@ export const CheckButton: React.FC<ICheckProps> = ({ items, onChange }) => {
18
18
  const generateSelectedValuesList = () => {
19
19
  const selectedValues: IChecklistSelectedValues = {};
20
20
 
21
- items.forEach((item) => {
21
+ items.forEach(item => {
22
22
  selectedValues[item.label] = false;
23
23
  });
24
24
 
25
25
  return selectedValues;
26
26
  };
27
27
 
28
- const [selectedValues, setSelectedValues] =
29
- useState<IChecklistSelectedValues>(generateSelectedValuesList());
28
+ const [selectedValues, setSelectedValues] = useState<
29
+ IChecklistSelectedValues
30
+ >(generateSelectedValuesList());
30
31
 
31
32
  const handleClick = (label: string) => {
32
33
  setSelectedValues({
@@ -0,0 +1,94 @@
1
+ import React from 'react';
2
+ import Draggable from 'react-draggable';
3
+ import styled from 'styled-components';
4
+
5
+ export interface IDraggableContainerProps {
6
+ children: React.ReactNode;
7
+ width?: string;
8
+ height?: string;
9
+ className?: string;
10
+ title: string;
11
+ imgSrc?: string;
12
+ imgWidth?: string;
13
+ onCloseButton: () => void;
14
+ }
15
+
16
+ export const DraggableContainer: React.FC<IDraggableContainerProps> = ({
17
+ children,
18
+ width = '50%',
19
+ height,
20
+ className,
21
+ onCloseButton,
22
+ title,
23
+ imgSrc,
24
+ imgWidth = '20px',
25
+ }) => {
26
+ return (
27
+ <Draggable>
28
+ <Container
29
+ width={width}
30
+ height={height || 'auto'}
31
+ className={`rpgui-container framed-grey ${className} rpgui-draggable`}
32
+ >
33
+ <Title>
34
+ {imgSrc ? (
35
+ <Icon src={imgSrc} width={imgWidth} />
36
+ ) : (
37
+ <Icon width={imgWidth} />
38
+ )}
39
+ {title}
40
+ </Title>
41
+ {onCloseButton && (
42
+ <CloseButton onClick={onCloseButton} onTouchStart={onCloseButton}>
43
+ X
44
+ </CloseButton>
45
+ )}
46
+
47
+ {children}
48
+ </Container>
49
+ </Draggable>
50
+ );
51
+ };
52
+
53
+ interface IContainerProps {
54
+ width: string;
55
+ height: string;
56
+ }
57
+
58
+ const Container = styled.div<IContainerProps>`
59
+ height: ${props => props.height};
60
+ width: ${({ width }) => width};
61
+ display: flex;
62
+ flex-wrap: wrap;
63
+ image-rendering: pixelated;
64
+ `;
65
+
66
+ const CloseButton = styled.div`
67
+ position: absolute;
68
+ top: 3px;
69
+ right: 0px;
70
+ color: white;
71
+ z-index: 22;
72
+ font-size: 10px;
73
+ `;
74
+
75
+ const Title = styled.div`
76
+ position: absolute;
77
+ top: 3px;
78
+ right: 50%;
79
+ color: white;
80
+ z-index: 22;
81
+ font-size: 10px;
82
+ `;
83
+
84
+ interface ICustomIconProps {
85
+ width: string;
86
+ }
87
+
88
+ const Icon = styled.img`
89
+ color: white;
90
+ z-index: 22;
91
+ font-size: 10px;
92
+ width: ${(props: ICustomIconProps) => props.width};
93
+ margin-right: 0.5rem;
94
+ `;
@@ -45,7 +45,7 @@ export const Dropdown: React.FC<IDropdownProps> = ({
45
45
  style={{ width: width }}
46
46
  className="rpgui-dropdown"
47
47
  >
48
- {options.map((option) => {
48
+ {options.map(option => {
49
49
  return (
50
50
  <option key={option.id} value={option.value}>
51
51
  {option.option}
@@ -24,7 +24,7 @@ export const ListMenu: React.FC<IListMenuProps> = ({
24
24
  return (
25
25
  <Container x={x} y={y} fontSize={fontSize}>
26
26
  <ul className="rpgui-list-imp" style={{ overflow: 'hidden' }}>
27
- {options.map((params) => (
27
+ {options.map(params => (
28
28
  <ListElement
29
29
  key={params.text}
30
30
  onClick={() => {
@@ -52,11 +52,11 @@ const Container = styled.div<IContainerProps>`
52
52
  justify-content: start;
53
53
  align-items: flex-start;
54
54
  position: absolute;
55
- top: ${(props) => props.y || 0}px;
56
- left: ${(props) => props.x || 0}px;
55
+ top: ${props => props.y || 0}px;
56
+ left: ${props => props.x || 0}px;
57
57
 
58
58
  li {
59
- font-size: ${(props) => props.fontSize}em;
59
+ font-size: ${props => props.fontSize}em;
60
60
  }
61
61
  `;
62
62
 
@@ -34,8 +34,9 @@ export const NPCDialog: React.FC<INPCDialogProps> = ({
34
34
  questions,
35
35
  answers,
36
36
  }) => {
37
- const [showGoNextIndicator, setShowGoNextIndicator] =
38
- useState<boolean>(false);
37
+ const [showGoNextIndicator, setShowGoNextIndicator] = useState<boolean>(
38
+ false
39
+ );
39
40
 
40
41
  return (
41
42
  <RPGUIContainer
@@ -25,7 +25,7 @@ export const NPCDialogText: React.FC<IProps> = ({
25
25
  const hasNextChunk = textChunks?.[chunkIndex + 1] || false;
26
26
 
27
27
  if (hasNextChunk) {
28
- setChunkIndex((prev) => prev + 1);
28
+ setChunkIndex(prev => prev + 1);
29
29
  } else {
30
30
  // if there's no more text chunks, close the dialog
31
31
  onClose();
@@ -37,11 +37,13 @@ export const QuestionDialog: React.FC<IProps> = ({
37
37
 
38
38
  const firstAnswerId = currentQuestion.answerIds![0];
39
39
 
40
- return answers.find((answer) => answer.id === firstAnswerId);
40
+ return answers.find(answer => answer.id === firstAnswerId);
41
41
  };
42
42
 
43
- const [currentAnswer, setCurrentAnswer] =
44
- useState<IQuestionDialogAnswer | null>(onGetFirstAnswer()!);
43
+ const [
44
+ currentAnswer,
45
+ setCurrentAnswer,
46
+ ] = useState<IQuestionDialogAnswer | null>(onGetFirstAnswer()!);
45
47
 
46
48
  useEffect(() => {
47
49
  setCurrentAnswer(onGetFirstAnswer()!);
@@ -49,7 +51,7 @@ export const QuestionDialog: React.FC<IProps> = ({
49
51
 
50
52
  const onGetAnswers = (answerIds: number[]) => {
51
53
  return answerIds.map((answerId: number) =>
52
- answers.find((answer) => answer.id === answerId)
54
+ answers.find(answer => answer.id === answerId)
53
55
  );
54
56
  };
55
57
 
@@ -64,14 +66,14 @@ export const QuestionDialog: React.FC<IProps> = ({
64
66
 
65
67
  const nextAnswerIndex = onGetAnswers(
66
68
  currentQuestion.answerIds!
67
- ).findIndex((answer) => answer?.id === currentAnswer!.id + 1);
69
+ ).findIndex(answer => answer?.id === currentAnswer!.id + 1);
68
70
 
69
71
  const nextAnswerID = currentQuestion.answerIds![nextAnswerIndex];
70
72
 
71
73
  // console.log(nextAnswerIndex);
72
74
 
73
75
  const nextAnswer = onGetAnswers(currentQuestion.answerIds!).find(
74
- (answer) => answer?.id === nextAnswerID
76
+ answer => answer?.id === nextAnswerID
75
77
  );
76
78
 
77
79
  setCurrentAnswer(nextAnswer || onGetFirstAnswer()!);
@@ -83,14 +85,14 @@ export const QuestionDialog: React.FC<IProps> = ({
83
85
 
84
86
  const previousAnswerIndex = onGetAnswers(
85
87
  currentQuestion.answerIds!
86
- ).findIndex((answer) => answer?.id === currentAnswer!.id - 1);
88
+ ).findIndex(answer => answer?.id === currentAnswer!.id - 1);
87
89
 
88
90
  const previousAnswerID =
89
91
  currentQuestion.answerIds &&
90
92
  currentQuestion.answerIds[previousAnswerIndex];
91
93
 
92
94
  const previousAnswer = onGetAnswers(currentQuestion.answerIds!).find(
93
- (answer) => answer?.id === previousAnswerID
95
+ answer => answer?.id === previousAnswerID
94
96
  );
95
97
 
96
98
  if (previousAnswer) {
@@ -109,7 +111,7 @@ export const QuestionDialog: React.FC<IProps> = ({
109
111
  } else {
110
112
  setCurrentQuestion(
111
113
  questions.find(
112
- (question) => question.id === currentAnswer!.nextQuestionId
114
+ question => question.id === currentAnswer!.nextQuestionId
113
115
  )!
114
116
  );
115
117
  }
@@ -124,7 +126,7 @@ export const QuestionDialog: React.FC<IProps> = ({
124
126
  if (answer.nextQuestionId) {
125
127
  // if there is a next question, go to it
126
128
  setCurrentQuestion(
127
- questions.find((question) => question.id === answer.nextQuestionId)!
129
+ questions.find(question => question.id === answer.nextQuestionId)!
128
130
  );
129
131
  } else {
130
132
  // else, finish dialog!
@@ -144,7 +146,7 @@ export const QuestionDialog: React.FC<IProps> = ({
144
146
  return null;
145
147
  }
146
148
 
147
- return answers.map((answer) => {
149
+ return answers.map(answer => {
148
150
  const isSelected = currentAnswer?.id === answer?.id;
149
151
  const selectedColor = isSelected ? 'yellow' : 'white';
150
152
 
@@ -213,7 +215,7 @@ interface IAnswerProps {
213
215
 
214
216
  const Answer = styled.p<IAnswerProps>`
215
217
  flex: auto;
216
- color: ${(props) => props.color} !important;
218
+ color: ${props => props.color} !important;
217
219
  font-size: 0.65rem !important;
218
220
  background: inherit;
219
221
  border: none;
@@ -221,7 +223,7 @@ const Answer = styled.p<IAnswerProps>`
221
223
 
222
224
  const AnswerSelectedIcon = styled.span<IAnswerProps>`
223
225
  flex: 5% 0 0;
224
- color: ${(props) => props.color} !important;
226
+ color: ${props => props.color} !important;
225
227
  `;
226
228
 
227
229
  const AnswerRow = styled.div`