@rpg-engine/long-bow 0.1.32 → 0.1.37
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Button.d.ts +4 -4
- package/dist/components/CheckButton.d.ts +14 -0
- package/dist/components/Dropdown.d.ts +12 -0
- package/dist/components/Input.d.ts +4 -0
- package/dist/components/ProgressBar.d.ts +7 -0
- package/dist/components/RadioButton.d.ts +11 -0
- package/dist/components/TextArea.d.ts +4 -0
- package/dist/components/Truncate.d.ts +7 -0
- package/dist/index.d.ts +7 -0
- package/dist/long-bow.cjs.development.js +227 -16
- package/dist/long-bow.cjs.development.js.map +1 -1
- package/dist/long-bow.cjs.production.min.js +1 -1
- package/dist/long-bow.cjs.production.min.js.map +1 -1
- package/dist/long-bow.esm.js +222 -18
- package/dist/long-bow.esm.js.map +1 -1
- package/package.json +1 -1
- package/src/components/Button.tsx +18 -10
- package/src/components/CheckButton.tsx +64 -0
- package/src/components/Dropdown.tsx +57 -0
- package/src/components/Input.tsx +11 -0
- package/src/components/ProgressBar.tsx +45 -0
- package/src/components/RadioButton.tsx +53 -0
- package/src/components/TextArea.tsx +11 -0
- package/src/components/Truncate.tsx +25 -0
- package/src/index.tsx +7 -0
package/dist/long-bow.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"long-bow.esm.js","sources":["../src/components/Button.tsx","../src/components/ListMenu.tsx","../src/components/RPGUIContainer.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/RPGUIRoot.tsx","../src/components/RangeSlider.tsx"],"sourcesContent":["import React from 'react';\n\nexport enum IButtonTypes {\n RPGUIButton = 'rpgui-button',\n RPGUIGoldButton = 'rpgui-button golden',\n}\n\nexport interface IButtonsProps {\n children: React.ReactNode;\n type: IButtonTypes;\n}\n\nexport const Button: React.FC<IButtonsProps> = ({\n children,\n type,\n ...props\n}) => {\n return (\n <button className={type} type=\"button\" {...props}>\n <p>{children}</p>\n </button>\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","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}\n\nexport const RPGUIContainer: React.FC<IRPGUIContainerProps> = ({\n children,\n type,\n width = '50%',\n height,\n}) => {\n return (\n <Container\n width={width}\n height={height || 'auto'}\n className={`rpgui-container ${type}`}\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","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 '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, { 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"],"names":["IButtonTypes","Button","children","type","props","React","className","ListMenu","options","onSelected","x","y","fontSize","Container","style","overflow","map","params","ListElement","key","text","onClick","id","styled","div","li","RPGUIContainerTypes","RPGUIContainer","width","height","img","chunkString","str","length","match","RegExp","DynamicText","onFinish","onStart","useState","textState","setTextState","useEffect","i","interval","setInterval","substring","clearInterval","TextContainer","p","NPCDialogText","onClose","onEndStep","onStartStep","textChunks","chunkIndex","setChunkIndex","onHandleSpacePress","event","code","hasNextChunk","prev","document","addEventListener","removeEventListener","useEventListener","handler","el","window","savedHandler","useRef","current","listener","e","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","flex","TextAndThumbnail","ThumbnailContainer","NPCThumbnail","src","aliceDefaultThumbnail","PressSpaceIndicator","right","TextOnly","pressSpaceGif","_RPGUI","RPGUI","RPGUIRoot","RangeSliderType","RangeSlider","valueMin","valueMax","onChange","sliderId","uuidv4","wasMouseDownFirst","setWasMouseDownFirst","onHandleMouseUp","rpguiSlider","getElementById","value","get_value","Number","onMouseUp","onMouseDown","Input","Slider","GoldSlider","min","max","input"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"long-bow.esm.js","sources":["../src/components/Button.tsx","../src/components/CheckButton.tsx","../src/components/RPGUIRoot.tsx","../src/components/Dropdown.tsx","../src/components/Input.tsx","../src/components/ListMenu.tsx","../src/components/RPGUIContainer.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","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';\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\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","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}\n\nexport const RPGUIContainer: React.FC<IRPGUIContainerProps> = ({\n children,\n type,\n width = '50%',\n height,\n}) => {\n return (\n <Container\n width={width}\n height={height || 'auto'}\n className={`rpgui-container ${type}`}\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","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}\n\nexport const ProgressBar: React.FC<IBarProps> = ({ max, value, color }) => {\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 >\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 Container = styled.div`\n display: flex;\n flex-direction: column;\n width: 20%;\n justify-content: start;\n align-items: flex-start;\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","_RPGUI","RPGUI","RPGUIRoot","Dropdown","options","width","dropdownId","uuidv4","selectedValue","setSelectedValue","document","getElementById","dropdownValue","get_value","addEventListener","event","target","value","style","option","Input","ListMenu","onSelected","x","y","fontSize","Container","overflow","params","ListElement","text","div","li","RPGUIContainerTypes","RPGUIContainer","height","img","chunkString","str","length","match","RegExp","DynamicText","onFinish","onStart","textState","setTextState","i","interval","setInterval","substring","clearInterval","TextContainer","p","NPCDialogText","onClose","onEndStep","onStartStep","textChunks","chunkIndex","setChunkIndex","onHandleSpacePress","code","hasNextChunk","prev","removeEventListener","useEventListener","handler","el","window","savedHandler","useRef","current","listener","e","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","flex","TextAndThumbnail","ThumbnailContainer","NPCThumbnail","src","aliceDefaultThumbnail","PressSpaceIndicator","right","TextOnly","pressSpaceGif","ProgressBar","max","calculatePercentageValue","left","InputRadio","name","querySelector","elementValue","RangeSliderType","RangeSlider","valueMin","valueMax","sliderId","wasMouseDownFirst","setWasMouseDownFirst","onHandleMouseUp","rpguiSlider","Number","onMouseUp","onMouseDown","Slider","GoldSlider","min","input","TextArea","Truncate","maxLines"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,23 +1,31 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
import styled from 'styled-components';
|
|
2
3
|
|
|
3
|
-
export enum
|
|
4
|
+
export enum ButtonTypes {
|
|
4
5
|
RPGUIButton = 'rpgui-button',
|
|
5
6
|
RPGUIGoldButton = 'rpgui-button golden',
|
|
6
7
|
}
|
|
7
8
|
|
|
8
|
-
export interface
|
|
9
|
+
export interface IButtonProps {
|
|
9
10
|
children: React.ReactNode;
|
|
10
|
-
|
|
11
|
+
buttonType: ButtonTypes;
|
|
11
12
|
}
|
|
12
13
|
|
|
13
|
-
export const Button: React.FC<
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
export const Button: React.FC<
|
|
15
|
+
IButtonProps &
|
|
16
|
+
React.DetailedHTMLProps<
|
|
17
|
+
React.ButtonHTMLAttributes<HTMLButtonElement>,
|
|
18
|
+
HTMLButtonElement
|
|
19
|
+
>
|
|
20
|
+
> = ({ children, buttonType, ...props }) => {
|
|
18
21
|
return (
|
|
19
|
-
<
|
|
22
|
+
<ButtonContainer className={`${buttonType}`} {...props}>
|
|
20
23
|
<p>{children}</p>
|
|
21
|
-
</
|
|
24
|
+
</ButtonContainer>
|
|
22
25
|
);
|
|
23
26
|
};
|
|
27
|
+
|
|
28
|
+
const ButtonContainer = styled.button<any>`
|
|
29
|
+
height: 45px;
|
|
30
|
+
font-size: 11.5px;
|
|
31
|
+
`;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import React, { useEffect, useState } from 'react';
|
|
2
|
+
|
|
3
|
+
export interface ICheckItems {
|
|
4
|
+
label: string;
|
|
5
|
+
value: string;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export interface ICheckProps {
|
|
9
|
+
items: ICheckItems[];
|
|
10
|
+
onChange: (selectedValues: IChecklistSelectedValues) => void;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
interface IChecklistSelectedValues {
|
|
14
|
+
[label: string]: boolean;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export const CheckButton: React.FC<ICheckProps> = ({ items, onChange }) => {
|
|
18
|
+
const generateSelectedValuesList = () => {
|
|
19
|
+
const selectedValues: IChecklistSelectedValues = {};
|
|
20
|
+
|
|
21
|
+
items.forEach((item) => {
|
|
22
|
+
selectedValues[item.label] = false;
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
return selectedValues;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
const [selectedValues, setSelectedValues] =
|
|
29
|
+
useState<IChecklistSelectedValues>(generateSelectedValuesList());
|
|
30
|
+
|
|
31
|
+
const handleClick = (label: string) => {
|
|
32
|
+
setSelectedValues({
|
|
33
|
+
...selectedValues,
|
|
34
|
+
[label]: !selectedValues[label],
|
|
35
|
+
});
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
useEffect(() => {
|
|
39
|
+
if (selectedValues) {
|
|
40
|
+
onChange(selectedValues);
|
|
41
|
+
}
|
|
42
|
+
}, [selectedValues]);
|
|
43
|
+
|
|
44
|
+
return (
|
|
45
|
+
<div id="elemento-checkbox">
|
|
46
|
+
{items?.map((element, index) => {
|
|
47
|
+
return (
|
|
48
|
+
<div key={`${element.label}_${index}`}>
|
|
49
|
+
<input
|
|
50
|
+
className="rpgui-checkbox"
|
|
51
|
+
type="checkbox"
|
|
52
|
+
checked={selectedValues[element.label]}
|
|
53
|
+
onChange={() => {}}
|
|
54
|
+
/>
|
|
55
|
+
<label onClick={() => handleClick(element.label)}>
|
|
56
|
+
{element.label}
|
|
57
|
+
</label>
|
|
58
|
+
<br />
|
|
59
|
+
</div>
|
|
60
|
+
);
|
|
61
|
+
})}
|
|
62
|
+
</div>
|
|
63
|
+
);
|
|
64
|
+
};
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import React, { useEffect, useState } from 'react';
|
|
2
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
3
|
+
import { _RPGUI } from './RPGUIRoot';
|
|
4
|
+
|
|
5
|
+
export interface IOptionsProps {
|
|
6
|
+
id: number;
|
|
7
|
+
value: string;
|
|
8
|
+
option: string;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export interface IDropdownProps {
|
|
12
|
+
options: IOptionsProps[];
|
|
13
|
+
width?: string;
|
|
14
|
+
onChange: (value: string) => void;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export const Dropdown: React.FC<IDropdownProps> = ({
|
|
18
|
+
options,
|
|
19
|
+
width,
|
|
20
|
+
onChange,
|
|
21
|
+
}) => {
|
|
22
|
+
const dropdownId = uuidv4();
|
|
23
|
+
|
|
24
|
+
const [selectedValue, setSelectedValue] = useState<string>('');
|
|
25
|
+
|
|
26
|
+
useEffect(() => {
|
|
27
|
+
const element = document.getElementById(`rpgui-dropdown-${dropdownId}`);
|
|
28
|
+
const dropdownValue = _RPGUI.get_value(element);
|
|
29
|
+
setSelectedValue(dropdownValue);
|
|
30
|
+
|
|
31
|
+
element?.addEventListener('change', (event: any) => {
|
|
32
|
+
setSelectedValue(event?.target.value);
|
|
33
|
+
});
|
|
34
|
+
}, []);
|
|
35
|
+
|
|
36
|
+
useEffect(() => {
|
|
37
|
+
if (selectedValue) {
|
|
38
|
+
onChange(selectedValue);
|
|
39
|
+
}
|
|
40
|
+
}, [selectedValue]);
|
|
41
|
+
|
|
42
|
+
return (
|
|
43
|
+
<select
|
|
44
|
+
id={`rpgui-dropdown-${dropdownId}`}
|
|
45
|
+
style={{ width: width }}
|
|
46
|
+
className="rpgui-dropdown"
|
|
47
|
+
>
|
|
48
|
+
{options.map((option) => {
|
|
49
|
+
return (
|
|
50
|
+
<option key={option.id} value={option.value}>
|
|
51
|
+
{option.option}
|
|
52
|
+
</option>
|
|
53
|
+
);
|
|
54
|
+
})}
|
|
55
|
+
</select>
|
|
56
|
+
);
|
|
57
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
export interface IInputProps
|
|
4
|
+
extends React.DetailedHTMLProps<
|
|
5
|
+
React.InputHTMLAttributes<HTMLInputElement>,
|
|
6
|
+
HTMLInputElement
|
|
7
|
+
> {}
|
|
8
|
+
|
|
9
|
+
export const Input: React.FC<IInputProps> = ({ ...props }) => {
|
|
10
|
+
return <input {...props} />;
|
|
11
|
+
};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import styled from 'styled-components';
|
|
3
|
+
|
|
4
|
+
export interface IBarProps {
|
|
5
|
+
max: number;
|
|
6
|
+
value: number;
|
|
7
|
+
color: 'red' | 'blue' | 'green';
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export const ProgressBar: React.FC<IBarProps> = ({ max, value, color }) => {
|
|
11
|
+
const calculatePercentageValue = function (max: number, value: number) {
|
|
12
|
+
if (value > max) {
|
|
13
|
+
value = max;
|
|
14
|
+
}
|
|
15
|
+
return (value * 100) / max;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
return (
|
|
19
|
+
<Container
|
|
20
|
+
className="rpgui-progress"
|
|
21
|
+
data-value={calculatePercentageValue(max, value) / 100}
|
|
22
|
+
data-rpguitype="progress"
|
|
23
|
+
>
|
|
24
|
+
<div className=" rpgui-progress-track">
|
|
25
|
+
<div
|
|
26
|
+
className={`rpgui-progress-fill ${color} `}
|
|
27
|
+
style={{
|
|
28
|
+
left: '0px',
|
|
29
|
+
width: calculatePercentageValue(max, value) + '%',
|
|
30
|
+
}}
|
|
31
|
+
></div>
|
|
32
|
+
</div>
|
|
33
|
+
<div className=" rpgui-progress-left-edge"></div>
|
|
34
|
+
<div className=" rpgui-progress-right-edge"></div>
|
|
35
|
+
</Container>
|
|
36
|
+
);
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
const Container = styled.div`
|
|
40
|
+
display: flex;
|
|
41
|
+
flex-direction: column;
|
|
42
|
+
width: 20%;
|
|
43
|
+
justify-content: start;
|
|
44
|
+
align-items: flex-start;
|
|
45
|
+
`;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import React, { useEffect, useState } from 'react';
|
|
2
|
+
|
|
3
|
+
export interface IRadioItems {
|
|
4
|
+
label: string;
|
|
5
|
+
value: string;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export interface IRadioProps {
|
|
9
|
+
name: string;
|
|
10
|
+
items: IRadioItems[];
|
|
11
|
+
onChange: (value: string) => void;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export const InputRadio: React.FC<IRadioProps> = ({
|
|
15
|
+
name,
|
|
16
|
+
items,
|
|
17
|
+
onChange,
|
|
18
|
+
}) => {
|
|
19
|
+
const [selectedValue, setSelectedValue] = useState<string>();
|
|
20
|
+
const handleClick = () => {
|
|
21
|
+
let element = document.querySelector(
|
|
22
|
+
`input[name=${name}]:checked`
|
|
23
|
+
) as HTMLInputElement;
|
|
24
|
+
const elementValue = element.value;
|
|
25
|
+
setSelectedValue(elementValue);
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
useEffect(() => {
|
|
29
|
+
if (selectedValue) {
|
|
30
|
+
onChange(selectedValue);
|
|
31
|
+
}
|
|
32
|
+
}, [selectedValue]);
|
|
33
|
+
|
|
34
|
+
return (
|
|
35
|
+
<div id="elemento-radio">
|
|
36
|
+
{items.map((element) => {
|
|
37
|
+
return (
|
|
38
|
+
<>
|
|
39
|
+
<input
|
|
40
|
+
key={element.value}
|
|
41
|
+
className="rpgui-radio"
|
|
42
|
+
value={element.value}
|
|
43
|
+
name={name}
|
|
44
|
+
type="radio"
|
|
45
|
+
/>
|
|
46
|
+
<label onClick={handleClick}>{element.label}</label>
|
|
47
|
+
<br />
|
|
48
|
+
</>
|
|
49
|
+
);
|
|
50
|
+
})}
|
|
51
|
+
</div>
|
|
52
|
+
);
|
|
53
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
export interface ITextArea
|
|
4
|
+
extends React.DetailedHTMLProps<
|
|
5
|
+
React.TextareaHTMLAttributes<HTMLTextAreaElement>,
|
|
6
|
+
HTMLTextAreaElement
|
|
7
|
+
> {}
|
|
8
|
+
|
|
9
|
+
export const TextArea: React.FC<ITextArea> = ({ ...props }) => {
|
|
10
|
+
return <textarea {...props} />;
|
|
11
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/* eslint-disable react/require-default-props */
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import styled from 'styled-components';
|
|
4
|
+
|
|
5
|
+
interface IProps {
|
|
6
|
+
maxLines?: number;
|
|
7
|
+
children: React.ReactNode;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export const Truncate: React.FC<IProps> = ({ maxLines = 1, children }) => {
|
|
11
|
+
return <Container maxLines={maxLines}>{children}</Container>;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
interface IContainerProps {
|
|
15
|
+
maxLines: number;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const Container = styled.div<IContainerProps>`
|
|
19
|
+
display: -webkit-box;
|
|
20
|
+
max-width: 100%;
|
|
21
|
+
max-height: 100%;
|
|
22
|
+
-webkit-line-clamp: ${(props) => props.maxLines};
|
|
23
|
+
-webkit-box-orient: vertical;
|
|
24
|
+
overflow: hidden;
|
|
25
|
+
`;
|
package/src/index.tsx
CHANGED
|
@@ -1,9 +1,16 @@
|
|
|
1
1
|
export * from './components/Button';
|
|
2
|
+
export * from './components/CheckButton';
|
|
3
|
+
export * from './components/Dropdown';
|
|
4
|
+
export * from './components/Input';
|
|
2
5
|
export * from './components/ListMenu';
|
|
3
6
|
export * from './components/NPCDialog/NPCDialog';
|
|
4
7
|
export * from './components/NPCDialog/QuestionDialog/QuestionDialog';
|
|
8
|
+
export * from './components/ProgressBar';
|
|
9
|
+
export * from './components/RadioButton';
|
|
5
10
|
export * from './components/RangeSlider';
|
|
6
11
|
export * from './components/RPGUIContainer';
|
|
7
12
|
export * from './components/RPGUIRoot';
|
|
13
|
+
export * from './components/TextArea';
|
|
14
|
+
export * from './components/Truncate';
|
|
8
15
|
export * from './components/typography/DynamicText';
|
|
9
16
|
export { useEventListener } from './hooks/useEventListener';
|