@rpg-engine/long-bow 0.1.41 → 0.1.42

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.
@@ -0,0 +1,7 @@
1
+ import { IChatMessage } from '@rpg-engine/shared';
2
+ import React from 'react';
3
+ export interface IChatProps {
4
+ chatMessages: IChatMessage[];
5
+ onSendChatMessage: (message: string) => void;
6
+ }
7
+ export declare const Chat: React.FC<IChatProps>;
@@ -10,5 +10,6 @@ export interface IRPGUIContainerProps {
10
10
  children: React.ReactNode;
11
11
  width?: string;
12
12
  height?: string;
13
+ className?: string;
13
14
  }
14
15
  export declare const RPGUIContainer: React.FC<IRPGUIContainerProps>;
@@ -0,0 +1,8 @@
1
+ interface IColumn {
2
+ flex?: number;
3
+ alignItems?: string;
4
+ justifyContent?: string;
5
+ flexWrap?: string;
6
+ }
7
+ export declare const Column: import("styled-components").StyledComponent<"div", any, IColumn, never>;
8
+ export {};
@@ -0,0 +1,3 @@
1
+ export declare const colors: {
2
+ darkGrey: string;
3
+ };
@@ -215,11 +215,12 @@ var RPGUIContainer = function RPGUIContainer(_ref) {
215
215
  type = _ref.type,
216
216
  _ref$width = _ref.width,
217
217
  width = _ref$width === void 0 ? '50%' : _ref$width,
218
- height = _ref.height;
218
+ height = _ref.height,
219
+ className = _ref.className;
219
220
  return React__default.createElement(Container$1, {
220
221
  width: width,
221
222
  height: height || 'auto',
222
- className: "rpgui-container " + type
223
+ className: "rpgui-container " + type + " " + className
223
224
  }, children);
224
225
  };
225
226
  var Container$1 = /*#__PURE__*/styled.div.withConfig({
@@ -1 +1 @@
1
- {"version":3,"file":"long-bow.cjs.development.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 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","_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","displayText","percentageWidth","minWidth","calculatePercentageValue","TextOverlay","ProgressBarText","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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"}
1
+ {"version":3,"file":"long-bow.cjs.development.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 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","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","_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","displayText","percentageWidth","minWidth","calculatePercentageValue","TextOverlay","ProgressBarText","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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"}
@@ -1,2 +1,2 @@
1
- "use strict";function e(e){return e&&"object"==typeof e&&"default"in e?e.default:e}Object.defineProperty(exports,"__esModule",{value:!0});var t=require("react"),n=e(t),r=e(require("styled-components")),i=require("uuid");function o(){return(o=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}require("rpgui/rpgui.min.css"),require("rpgui/rpgui.min.js");var a,l=["children","buttonType"];(a=exports.ButtonTypes||(exports.ButtonTypes={})).RPGUIButton="rpgui-button",a.RPGUIGoldButton="rpgui-button golden";var u,s=r.button.withConfig({displayName:"Button__ButtonContainer",componentId:"sc-obzd3o-0"})(["height:45px;font-size:11.5px;"]),c=RPGUI,d=r.div.withConfig({displayName:"ListMenu__Container",componentId:"sc-i9097t-0"})(["display:flex;flex-direction:column;width:100%;justify-content:start;align-items:flex-start;position:absolute;top:","px;left:","px;li{font-size:","em;}"],(function(e){return e.y||0}),(function(e){return e.x||0}),(function(e){return e.fontSize})),p=r.li.withConfig({displayName:"ListMenu__ListElement",componentId:"sc-i9097t-1"})(["margin-right:0.5rem;"]);(u=exports.RPGUIContainerTypes||(exports.RPGUIContainerTypes={})).Framed="framed",u.FramedGold="framed-golden",u.FramedGold2="framed-golden-2",u.FramedGrey="framed-grey";var m=function(e){var t=e.width;return n.createElement(f,{width:void 0===t?"50%":t,height:e.height||"auto",className:"rpgui-container "+e.type},e.children)},f=r.div.withConfig({displayName:"RPGUIContainer__Container",componentId:"sc-a8l4p8-0"})(["height:",";width:",";display:flex;flex-wrap:wrap;image-rendering:pixelated;"],(function(e){return e.height}),(function(e){return e.width}));const g=require("./alice.png"),x=require("./space.gif");var h,v=function(e){var r=e.text,i=e.onFinish,o=e.onStart,a=t.useState(""),l=a[0],u=a[1];return t.useEffect((function(){var e=0,t=setInterval((function(){0===e&&o&&o(),e<r.length?(u(r.substring(0,e+1)),e++):(clearInterval(t),i&&i())}),50);return function(){clearInterval(t)}}),[r]),n.createElement(y,null,l)},y=r.p.withConfig({displayName:"DynamicText__TextContainer",componentId:"sc-1ggl9nd-0"})(["font-size:0.7rem !important;color:white;text-shadow:1px 1px 0px #000000;letter-spacing:1.2px;word-break:normal;"]),w=function(e){var r=e.onClose,i=e.onEndStep,o=e.onStartStep,a=e.text.match(new RegExp(".{1,85}","g")),l=t.useState(0),u=l[0],s=l[1],c=function(e){"Space"===e.code&&((null==a?void 0:a[u+1])?s((function(e){return e+1})):r())};return t.useEffect((function(){return document.addEventListener("keydown",c),function(){return document.removeEventListener("keydown",c)}}),[u]),n.createElement(E,null,n.createElement(v,{text:(null==a?void 0:a[u])||"",onFinish:i,onStart:o}))},E=r.div.withConfig({displayName:"NPCDialogText__Container",componentId:"sc-1cxkdh9-0"})([""]),b=function(e,t,r){void 0===r&&(r=window);var i=n.useRef();n.useEffect((function(){i.current=t}),[t]),n.useEffect((function(){var t=function(e){return i.current(e)};return r.addEventListener(e,t),function(){r.removeEventListener(e,t)}}),[e,r])},C=function(e){var r=e.questions,i=e.answers,o=e.onClose,a=t.useState(r[0]),l=a[0],u=a[1],s=t.useState(!1),c=s[0],d=s[1],p=function(){if(!l.answerIds||0===l.answerIds.length)return null;var e=l.answerIds[0];return i.find((function(t){return t.id===e}))},m=t.useState(p()),f=m[0],g=m[1];t.useEffect((function(){g(p())}),[l]);var x=function(e){return e.map((function(e){return i.find((function(t){return t.id===e}))}))};return b("keydown",(function(e){switch(e.key){case"ArrowDown":var t=x(l.answerIds).findIndex((function(e){return(null==e?void 0:e.id)===f.id+1})),n=l.answerIds[t],i=x(l.answerIds).find((function(e){return(null==e?void 0:e.id)===n}));g(i||p());break;case"ArrowUp":var a=x(l.answerIds).findIndex((function(e){return(null==e?void 0:e.id)===f.id-1})),s=l.answerIds&&l.answerIds[a],c=x(l.answerIds).find((function(e){return(null==e?void 0:e.id)===s}));g(c||x(l.answerIds).pop());break;case"Enter":if(d(!1),null==f||!f.nextQuestionId)return void o();u(r.find((function(e){return e.id===f.nextQuestionId})))}})),n.createElement(I,null,n.createElement(N,null,n.createElement(v,{text:l.text,onStart:function(){return d(!1)},onFinish:function(){return d(!0)}})),c&&n.createElement(_,null,function(){var e=l.answerIds;if(!e)return null;var t=x(e);return t?t.map((function(e){var t=(null==f?void 0:f.id)===(null==e?void 0:e.id),i=t?"yellow":"white";return e?n.createElement(P,{key:"answer_"+e.id},n.createElement(S,{color:i},t?"X":null),n.createElement(T,{key:e.id,onClick:function(){return function(e){d(!1),e.nextQuestionId?u(r.find((function(t){return t.id===e.nextQuestionId}))):o()}(e)},color:i},e.text)):null})):null}()))},I=r.div.withConfig({displayName:"QuestionDialog__Container",componentId:"sc-bxc5u0-0"})(["display:flex;word-break:break-all;box-sizing:border-box;justify-content:flex-start;align-items:flex-start;flex-wrap:wrap;"]),N=r.div.withConfig({displayName:"QuestionDialog__QuestionContainer",componentId:"sc-bxc5u0-1"})(["flex:100%;width:100%;"]),_=r.div.withConfig({displayName:"QuestionDialog__AnswersContainer",componentId:"sc-bxc5u0-2"})(["flex:100%;"]),T=r.p.withConfig({displayName:"QuestionDialog__Answer",componentId:"sc-bxc5u0-3"})(["flex:auto;color:"," !important;font-size:0.65rem !important;background:inherit;border:none;"],(function(e){return e.color})),S=r.span.withConfig({displayName:"QuestionDialog__AnswerSelectedIcon",componentId:"sc-bxc5u0-4"})(["flex:5% 0 0;color:"," !important;"],(function(e){return e.color})),P=r.div.withConfig({displayName:"QuestionDialog__AnswerRow",componentId:"sc-bxc5u0-5"})(["display:flex;flex-wrap:wrap;justify-content:center;align-items:center;margin-bottom:0.5rem;height:22px;p{line-height:unset;margin-top:0;margin-bottom:0rem;}"]);(h=exports.NPCDialogType||(exports.NPCDialogType={})).TextOnly="TextOnly",h.TextAndThumbnail="TextAndThumbnail";var k,D=r.div.withConfig({displayName:"NPCDialog__Container",componentId:"sc-1b4aw74-0"})(["display:flex;width:100%;height:100%;box-sizing:border-box;justify-content:center;align-items:flex-start;position:relative;"]),R=r.div.withConfig({displayName:"NPCDialog__TextContainer",componentId:"sc-1b4aw74-1"})(["flex:"," 0 0;width:355px;"],(function(e){return e.flex})),G=r.div.withConfig({displayName:"NPCDialog__ThumbnailContainer",componentId:"sc-1b4aw74-2"})(["flex:30% 0 0;display:flex;justify-content:flex-end;"]),z=r.img.withConfig({displayName:"NPCDialog__NPCThumbnail",componentId:"sc-1b4aw74-3"})(["image-rendering:pixelated;height:128px;width:128px;"]),j=r.img.withConfig({displayName:"NPCDialog__PressSpaceIndicator",componentId:"sc-1b4aw74-4"})(["position:absolute;right:",";bottom:1rem;height:20.7px;image-rendering:-webkit-optimize-contrast;"],(function(e){return e.right})),q=r.span.withConfig({displayName:"ProgressBar__ProgressBarText",componentId:"sc-qa6fzh-0"})(["font-size:1rem;color:white;text-align:center;z-index:1;position:absolute;left:50%;transform:translateX(-50%);top:12px;"]),B=r.div.withConfig({displayName:"ProgressBar__TextOverlay",componentId:"sc-qa6fzh-1"})(["width:100%;position:relative;"]),A=r.div.withConfig({displayName:"ProgressBar__Container",componentId:"sc-qa6fzh-2"})(["display:flex;flex-direction:column;min-width:","px;width:","%;justify-content:start;align-items:flex-start;",""],(function(e){return e.minWidth}),(function(e){return e.percentageWidth}),(function(e){return e.style}));(k=exports.RangeSliderType||(exports.RangeSliderType={})).Slider="rpgui-slider",k.GoldSlider="rpgui-slider golden";var L=r.input.withConfig({displayName:"RangeSlider__Input",componentId:"sc-v8mte9-0"})(["opacity:0;"]),O=r.div.withConfig({displayName:"Truncate__Container",componentId:"sc-6x00qb-0"})(["display:-webkit-box;max-width:100%;max-height:100%;-webkit-line-clamp:",";-webkit-box-orient:vertical;overflow:hidden;"],(function(e){return e.maxLines}));exports.Button=function(e){var t=e.children,r=e.buttonType,i=function(e,t){if(null==e)return{};var n,r,i={},o=Object.keys(e);for(r=0;r<o.length;r++)t.indexOf(n=o[r])>=0||(i[n]=e[n]);return i}(e,l);return n.createElement(s,Object.assign({className:""+r},i),n.createElement("p",null,t))},exports.CheckButton=function(e){var r=e.items,i=e.onChange,a=t.useState(function(){var e={};return r.forEach((function(t){e[t.label]=!1})),e}()),l=a[0],u=a[1];return t.useEffect((function(){l&&i(l)}),[l]),n.createElement("div",{id:"elemento-checkbox"},null==r?void 0:r.map((function(e,t){return n.createElement("div",{key:e.label+"_"+t},n.createElement("input",{className:"rpgui-checkbox",type:"checkbox",checked:l[e.label],onChange:function(){}}),n.createElement("label",{onClick:function(){var t,n;u(o({},l,((n={})[t=e.label]=!l[t],n)))}},e.label),n.createElement("br",null))})))},exports.Dropdown=function(e){var r=e.options,o=e.width,a=e.onChange,l=i.v4(),u=t.useState(""),s=u[0],d=u[1];return t.useEffect((function(){var e=document.getElementById("rpgui-dropdown-"+l),t=c.get_value(e);d(t),null==e||e.addEventListener("change",(function(e){d(null==e?void 0:e.target.value)}))}),[]),t.useEffect((function(){s&&a(s)}),[s]),n.createElement("select",{id:"rpgui-dropdown-"+l,style:{width:o},className:"rpgui-dropdown"},r.map((function(e){return n.createElement("option",{key:e.id,value:e.value},e.option)})))},exports.DynamicText=v,exports.Input=function(e){var t=o({},e);return n.createElement("input",Object.assign({},t))},exports.InputRadio=function(e){var r=e.name,i=e.items,o=e.onChange,a=t.useState(),l=a[0],u=a[1],s=function(){var e=document.querySelector("input[name="+r+"]:checked");u(e.value)};return t.useEffect((function(){l&&o(l)}),[l]),n.createElement("div",{id:"elemento-radio"},i.map((function(e){return n.createElement(n.Fragment,null,n.createElement("input",{key:e.value,className:"rpgui-radio",value:e.value,name:r,type:"radio"}),n.createElement("label",{onClick:s},e.label),n.createElement("br",null))})))},exports.ListMenu=function(e){var t=e.onSelected,r=e.fontSize;return n.createElement(d,{x:e.x,y:e.y,fontSize:void 0===r?.8:r},n.createElement("ul",{className:"rpgui-list-imp",style:{overflow:"hidden"}},e.options.map((function(e){return n.createElement(p,{key:e.text,onClick:function(){t(e.id)}},e.text)}))))},exports.NPCDialog=function(e){var r=e.text,i=e.type,o=e.onClose,a=e.imagePath,l=e.isQuestionDialog,u=void 0!==l&&l,s=e.questions,c=e.answers,d=t.useState(!1),p=d[0],f=d[1];return n.createElement(m,{type:exports.RPGUIContainerTypes.FramedGold,width:u?"600px":"50%",height:"180px"},u&&s&&c?n.createElement(n.Fragment,null,n.createElement(R,{flex:i===exports.NPCDialogType.TextAndThumbnail?"70%":"100%"},n.createElement(C,{questions:s,answers:c,onClose:function(){o&&o()}})),i===exports.NPCDialogType.TextAndThumbnail&&n.createElement(G,null,n.createElement(z,{src:a||g}))):n.createElement(n.Fragment,null,n.createElement(D,null,n.createElement(R,{flex:i===exports.NPCDialogType.TextAndThumbnail?"70%":"100%"},n.createElement(w,{onStartStep:function(){return f(!1)},onEndStep:function(){return f(!0)},text:r||"No text provided.",onClose:function(){o&&o()}})),i===exports.NPCDialogType.TextAndThumbnail&&n.createElement(G,null,n.createElement(z,{src:a||g}))),p&&n.createElement(j,{right:i===exports.NPCDialogType.TextOnly?"1rem":"10.5rem",src:x})))},exports.ProgressBar=function(e){var t=e.max,r=e.value,i=e.color,o=e.displayText,a=void 0===o||o,l=e.percentageWidth,u=void 0===l?40:l,s=e.minWidth,c=void 0===s?100:s,d=e.style,p=function(e,t){return t>e&&(t=e),100*t/e};return n.createElement(A,{className:"rpgui-progress","data-value":p(t,r)/100,"data-rpguitype":"progress",percentageWidth:u,minWidth:c,style:d},a&&n.createElement(B,null,n.createElement(q,null,r,"/",t)),n.createElement("div",{className:" rpgui-progress-track"},n.createElement("div",{className:"rpgui-progress-fill "+i+" ",style:{left:"0px",width:p(t,r)+"%"}})),n.createElement("div",{className:" rpgui-progress-left-edge"}),n.createElement("div",{className:" rpgui-progress-right-edge"}))},exports.QuestionDialog=C,exports.RPGUIContainer=m,exports.RPGUIRoot=function(e){return n.createElement("div",{className:"rpgui-content"},e.children)},exports.RangeSlider=function(e){var r=e.type,o=e.valueMin,a=e.valueMax,l=e.width,u=e.onChange,s=i.v4(),d=t.useState(!1),p=d[0],m=d[1];b("mouseup",(function(){p&&f(),m(!1)}));var f=function(){var e=document.getElementById("rpgui-slider-"+s),t=c.get_value(e);u(Number(t))};return n.createElement("div",{onMouseUp:f,onMouseDown:function(){return m(!0)}},n.createElement(L,{className:r===exports.RangeSliderType.Slider?exports.RangeSliderType.Slider:exports.RangeSliderType.GoldSlider,type:"range",style:{width:l},min:o,max:a,id:"rpgui-slider-"+s}))},exports.TextArea=function(e){var t=o({},e);return n.createElement("textarea",Object.assign({},t))},exports.Truncate=function(e){var t=e.maxLines;return n.createElement(O,{maxLines:void 0===t?1:t},e.children)},exports._RPGUI=c,exports.useEventListener=b;
1
+ "use strict";function e(e){return e&&"object"==typeof e&&"default"in e?e.default:e}Object.defineProperty(exports,"__esModule",{value:!0});var t=require("react"),n=e(t),r=e(require("styled-components")),i=require("uuid");function o(){return(o=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}require("rpgui/rpgui.min.css"),require("rpgui/rpgui.min.js");var a,l=["children","buttonType"];(a=exports.ButtonTypes||(exports.ButtonTypes={})).RPGUIButton="rpgui-button",a.RPGUIGoldButton="rpgui-button golden";var u,s=r.button.withConfig({displayName:"Button__ButtonContainer",componentId:"sc-obzd3o-0"})(["height:45px;font-size:11.5px;"]),c=RPGUI,d=r.div.withConfig({displayName:"ListMenu__Container",componentId:"sc-i9097t-0"})(["display:flex;flex-direction:column;width:100%;justify-content:start;align-items:flex-start;position:absolute;top:","px;left:","px;li{font-size:","em;}"],(function(e){return e.y||0}),(function(e){return e.x||0}),(function(e){return e.fontSize})),p=r.li.withConfig({displayName:"ListMenu__ListElement",componentId:"sc-i9097t-1"})(["margin-right:0.5rem;"]);(u=exports.RPGUIContainerTypes||(exports.RPGUIContainerTypes={})).Framed="framed",u.FramedGold="framed-golden",u.FramedGold2="framed-golden-2",u.FramedGrey="framed-grey";var m=function(e){var t=e.width;return n.createElement(f,{width:void 0===t?"50%":t,height:e.height||"auto",className:"rpgui-container "+e.type+" "+e.className},e.children)},f=r.div.withConfig({displayName:"RPGUIContainer__Container",componentId:"sc-a8l4p8-0"})(["height:",";width:",";display:flex;flex-wrap:wrap;image-rendering:pixelated;"],(function(e){return e.height}),(function(e){return e.width}));const g=require("./alice.png"),x=require("./space.gif");var h,v=function(e){var r=e.text,i=e.onFinish,o=e.onStart,a=t.useState(""),l=a[0],u=a[1];return t.useEffect((function(){var e=0,t=setInterval((function(){0===e&&o&&o(),e<r.length?(u(r.substring(0,e+1)),e++):(clearInterval(t),i&&i())}),50);return function(){clearInterval(t)}}),[r]),n.createElement(y,null,l)},y=r.p.withConfig({displayName:"DynamicText__TextContainer",componentId:"sc-1ggl9nd-0"})(["font-size:0.7rem !important;color:white;text-shadow:1px 1px 0px #000000;letter-spacing:1.2px;word-break:normal;"]),w=function(e){var r=e.onClose,i=e.onEndStep,o=e.onStartStep,a=e.text.match(new RegExp(".{1,85}","g")),l=t.useState(0),u=l[0],s=l[1],c=function(e){"Space"===e.code&&((null==a?void 0:a[u+1])?s((function(e){return e+1})):r())};return t.useEffect((function(){return document.addEventListener("keydown",c),function(){return document.removeEventListener("keydown",c)}}),[u]),n.createElement(E,null,n.createElement(v,{text:(null==a?void 0:a[u])||"",onFinish:i,onStart:o}))},E=r.div.withConfig({displayName:"NPCDialogText__Container",componentId:"sc-1cxkdh9-0"})([""]),b=function(e,t,r){void 0===r&&(r=window);var i=n.useRef();n.useEffect((function(){i.current=t}),[t]),n.useEffect((function(){var t=function(e){return i.current(e)};return r.addEventListener(e,t),function(){r.removeEventListener(e,t)}}),[e,r])},C=function(e){var r=e.questions,i=e.answers,o=e.onClose,a=t.useState(r[0]),l=a[0],u=a[1],s=t.useState(!1),c=s[0],d=s[1],p=function(){if(!l.answerIds||0===l.answerIds.length)return null;var e=l.answerIds[0];return i.find((function(t){return t.id===e}))},m=t.useState(p()),f=m[0],g=m[1];t.useEffect((function(){g(p())}),[l]);var x=function(e){return e.map((function(e){return i.find((function(t){return t.id===e}))}))};return b("keydown",(function(e){switch(e.key){case"ArrowDown":var t=x(l.answerIds).findIndex((function(e){return(null==e?void 0:e.id)===f.id+1})),n=l.answerIds[t],i=x(l.answerIds).find((function(e){return(null==e?void 0:e.id)===n}));g(i||p());break;case"ArrowUp":var a=x(l.answerIds).findIndex((function(e){return(null==e?void 0:e.id)===f.id-1})),s=l.answerIds&&l.answerIds[a],c=x(l.answerIds).find((function(e){return(null==e?void 0:e.id)===s}));g(c||x(l.answerIds).pop());break;case"Enter":if(d(!1),null==f||!f.nextQuestionId)return void o();u(r.find((function(e){return e.id===f.nextQuestionId})))}})),n.createElement(I,null,n.createElement(N,null,n.createElement(v,{text:l.text,onStart:function(){return d(!1)},onFinish:function(){return d(!0)}})),c&&n.createElement(_,null,function(){var e=l.answerIds;if(!e)return null;var t=x(e);return t?t.map((function(e){var t=(null==f?void 0:f.id)===(null==e?void 0:e.id),i=t?"yellow":"white";return e?n.createElement(P,{key:"answer_"+e.id},n.createElement(S,{color:i},t?"X":null),n.createElement(T,{key:e.id,onClick:function(){return function(e){d(!1),e.nextQuestionId?u(r.find((function(t){return t.id===e.nextQuestionId}))):o()}(e)},color:i},e.text)):null})):null}()))},I=r.div.withConfig({displayName:"QuestionDialog__Container",componentId:"sc-bxc5u0-0"})(["display:flex;word-break:break-all;box-sizing:border-box;justify-content:flex-start;align-items:flex-start;flex-wrap:wrap;"]),N=r.div.withConfig({displayName:"QuestionDialog__QuestionContainer",componentId:"sc-bxc5u0-1"})(["flex:100%;width:100%;"]),_=r.div.withConfig({displayName:"QuestionDialog__AnswersContainer",componentId:"sc-bxc5u0-2"})(["flex:100%;"]),T=r.p.withConfig({displayName:"QuestionDialog__Answer",componentId:"sc-bxc5u0-3"})(["flex:auto;color:"," !important;font-size:0.65rem !important;background:inherit;border:none;"],(function(e){return e.color})),S=r.span.withConfig({displayName:"QuestionDialog__AnswerSelectedIcon",componentId:"sc-bxc5u0-4"})(["flex:5% 0 0;color:"," !important;"],(function(e){return e.color})),P=r.div.withConfig({displayName:"QuestionDialog__AnswerRow",componentId:"sc-bxc5u0-5"})(["display:flex;flex-wrap:wrap;justify-content:center;align-items:center;margin-bottom:0.5rem;height:22px;p{line-height:unset;margin-top:0;margin-bottom:0rem;}"]);(h=exports.NPCDialogType||(exports.NPCDialogType={})).TextOnly="TextOnly",h.TextAndThumbnail="TextAndThumbnail";var k,D=r.div.withConfig({displayName:"NPCDialog__Container",componentId:"sc-1b4aw74-0"})(["display:flex;width:100%;height:100%;box-sizing:border-box;justify-content:center;align-items:flex-start;position:relative;"]),R=r.div.withConfig({displayName:"NPCDialog__TextContainer",componentId:"sc-1b4aw74-1"})(["flex:"," 0 0;width:355px;"],(function(e){return e.flex})),G=r.div.withConfig({displayName:"NPCDialog__ThumbnailContainer",componentId:"sc-1b4aw74-2"})(["flex:30% 0 0;display:flex;justify-content:flex-end;"]),z=r.img.withConfig({displayName:"NPCDialog__NPCThumbnail",componentId:"sc-1b4aw74-3"})(["image-rendering:pixelated;height:128px;width:128px;"]),j=r.img.withConfig({displayName:"NPCDialog__PressSpaceIndicator",componentId:"sc-1b4aw74-4"})(["position:absolute;right:",";bottom:1rem;height:20.7px;image-rendering:-webkit-optimize-contrast;"],(function(e){return e.right})),q=r.span.withConfig({displayName:"ProgressBar__ProgressBarText",componentId:"sc-qa6fzh-0"})(["font-size:1rem;color:white;text-align:center;z-index:1;position:absolute;left:50%;transform:translateX(-50%);top:12px;"]),B=r.div.withConfig({displayName:"ProgressBar__TextOverlay",componentId:"sc-qa6fzh-1"})(["width:100%;position:relative;"]),A=r.div.withConfig({displayName:"ProgressBar__Container",componentId:"sc-qa6fzh-2"})(["display:flex;flex-direction:column;min-width:","px;width:","%;justify-content:start;align-items:flex-start;",""],(function(e){return e.minWidth}),(function(e){return e.percentageWidth}),(function(e){return e.style}));(k=exports.RangeSliderType||(exports.RangeSliderType={})).Slider="rpgui-slider",k.GoldSlider="rpgui-slider golden";var L=r.input.withConfig({displayName:"RangeSlider__Input",componentId:"sc-v8mte9-0"})(["opacity:0;"]),O=r.div.withConfig({displayName:"Truncate__Container",componentId:"sc-6x00qb-0"})(["display:-webkit-box;max-width:100%;max-height:100%;-webkit-line-clamp:",";-webkit-box-orient:vertical;overflow:hidden;"],(function(e){return e.maxLines}));exports.Button=function(e){var t=e.children,r=e.buttonType,i=function(e,t){if(null==e)return{};var n,r,i={},o=Object.keys(e);for(r=0;r<o.length;r++)t.indexOf(n=o[r])>=0||(i[n]=e[n]);return i}(e,l);return n.createElement(s,Object.assign({className:""+r},i),n.createElement("p",null,t))},exports.CheckButton=function(e){var r=e.items,i=e.onChange,a=t.useState(function(){var e={};return r.forEach((function(t){e[t.label]=!1})),e}()),l=a[0],u=a[1];return t.useEffect((function(){l&&i(l)}),[l]),n.createElement("div",{id:"elemento-checkbox"},null==r?void 0:r.map((function(e,t){return n.createElement("div",{key:e.label+"_"+t},n.createElement("input",{className:"rpgui-checkbox",type:"checkbox",checked:l[e.label],onChange:function(){}}),n.createElement("label",{onClick:function(){var t,n;u(o({},l,((n={})[t=e.label]=!l[t],n)))}},e.label),n.createElement("br",null))})))},exports.Dropdown=function(e){var r=e.options,o=e.width,a=e.onChange,l=i.v4(),u=t.useState(""),s=u[0],d=u[1];return t.useEffect((function(){var e=document.getElementById("rpgui-dropdown-"+l),t=c.get_value(e);d(t),null==e||e.addEventListener("change",(function(e){d(null==e?void 0:e.target.value)}))}),[]),t.useEffect((function(){s&&a(s)}),[s]),n.createElement("select",{id:"rpgui-dropdown-"+l,style:{width:o},className:"rpgui-dropdown"},r.map((function(e){return n.createElement("option",{key:e.id,value:e.value},e.option)})))},exports.DynamicText=v,exports.Input=function(e){var t=o({},e);return n.createElement("input",Object.assign({},t))},exports.InputRadio=function(e){var r=e.name,i=e.items,o=e.onChange,a=t.useState(),l=a[0],u=a[1],s=function(){var e=document.querySelector("input[name="+r+"]:checked");u(e.value)};return t.useEffect((function(){l&&o(l)}),[l]),n.createElement("div",{id:"elemento-radio"},i.map((function(e){return n.createElement(n.Fragment,null,n.createElement("input",{key:e.value,className:"rpgui-radio",value:e.value,name:r,type:"radio"}),n.createElement("label",{onClick:s},e.label),n.createElement("br",null))})))},exports.ListMenu=function(e){var t=e.onSelected,r=e.fontSize;return n.createElement(d,{x:e.x,y:e.y,fontSize:void 0===r?.8:r},n.createElement("ul",{className:"rpgui-list-imp",style:{overflow:"hidden"}},e.options.map((function(e){return n.createElement(p,{key:e.text,onClick:function(){t(e.id)}},e.text)}))))},exports.NPCDialog=function(e){var r=e.text,i=e.type,o=e.onClose,a=e.imagePath,l=e.isQuestionDialog,u=void 0!==l&&l,s=e.questions,c=e.answers,d=t.useState(!1),p=d[0],f=d[1];return n.createElement(m,{type:exports.RPGUIContainerTypes.FramedGold,width:u?"600px":"50%",height:"180px"},u&&s&&c?n.createElement(n.Fragment,null,n.createElement(R,{flex:i===exports.NPCDialogType.TextAndThumbnail?"70%":"100%"},n.createElement(C,{questions:s,answers:c,onClose:function(){o&&o()}})),i===exports.NPCDialogType.TextAndThumbnail&&n.createElement(G,null,n.createElement(z,{src:a||g}))):n.createElement(n.Fragment,null,n.createElement(D,null,n.createElement(R,{flex:i===exports.NPCDialogType.TextAndThumbnail?"70%":"100%"},n.createElement(w,{onStartStep:function(){return f(!1)},onEndStep:function(){return f(!0)},text:r||"No text provided.",onClose:function(){o&&o()}})),i===exports.NPCDialogType.TextAndThumbnail&&n.createElement(G,null,n.createElement(z,{src:a||g}))),p&&n.createElement(j,{right:i===exports.NPCDialogType.TextOnly?"1rem":"10.5rem",src:x})))},exports.ProgressBar=function(e){var t=e.max,r=e.value,i=e.color,o=e.displayText,a=void 0===o||o,l=e.percentageWidth,u=void 0===l?40:l,s=e.minWidth,c=void 0===s?100:s,d=e.style,p=function(e,t){return t>e&&(t=e),100*t/e};return n.createElement(A,{className:"rpgui-progress","data-value":p(t,r)/100,"data-rpguitype":"progress",percentageWidth:u,minWidth:c,style:d},a&&n.createElement(B,null,n.createElement(q,null,r,"/",t)),n.createElement("div",{className:" rpgui-progress-track"},n.createElement("div",{className:"rpgui-progress-fill "+i+" ",style:{left:"0px",width:p(t,r)+"%"}})),n.createElement("div",{className:" rpgui-progress-left-edge"}),n.createElement("div",{className:" rpgui-progress-right-edge"}))},exports.QuestionDialog=C,exports.RPGUIContainer=m,exports.RPGUIRoot=function(e){return n.createElement("div",{className:"rpgui-content"},e.children)},exports.RangeSlider=function(e){var r=e.type,o=e.valueMin,a=e.valueMax,l=e.width,u=e.onChange,s=i.v4(),d=t.useState(!1),p=d[0],m=d[1];b("mouseup",(function(){p&&f(),m(!1)}));var f=function(){var e=document.getElementById("rpgui-slider-"+s),t=c.get_value(e);u(Number(t))};return n.createElement("div",{onMouseUp:f,onMouseDown:function(){return m(!0)}},n.createElement(L,{className:r===exports.RangeSliderType.Slider?exports.RangeSliderType.Slider:exports.RangeSliderType.GoldSlider,type:"range",style:{width:l},min:o,max:a,id:"rpgui-slider-"+s}))},exports.TextArea=function(e){var t=o({},e);return n.createElement("textarea",Object.assign({},t))},exports.Truncate=function(e){var t=e.maxLines;return n.createElement(O,{maxLines:void 0===t?1:t},e.children)},exports._RPGUI=c,exports.useEventListener=b;
2
2
  //# sourceMappingURL=long-bow.cjs.production.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"long-bow.cjs.production.min.js","sources":["../src/components/Button.tsx","../src/components/RPGUIContainer.tsx","../src/components/RPGUIRoot.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/NPCDialog/NPCDialog.tsx","../src/components/typography/DynamicText.tsx","../src/components/NPCDialog/NPCDialogText.tsx","../src/hooks/useEventListener.ts","../src/components/NPCDialog/QuestionDialog/QuestionDialog.tsx","../src/components/RangeSlider.tsx","../src/components/ProgressBar.tsx","../src/components/Truncate.tsx","../src/components/CheckButton.tsx","../src/components/Dropdown.tsx","../src/components/Input.tsx","../src/components/RadioButton.tsx","../src/components/TextArea.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 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","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 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, { 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, { 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 { 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';\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","/* 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","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, { 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, { 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 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"],"names":["ButtonTypes","RPGUIContainerTypes","ButtonContainer","styled","button","_RPGUI","RPGUI","Container","div","props","y","x","fontSize","ListElement","li","RPGUIContainer","width","React","height","className","type","children","img","require","NPCDialogType","DynamicText","text","onFinish","onStart","useState","textState","setTextState","useEffect","i","interval","setInterval","length","substring","clearInterval","TextContainer","p","NPCDialogText","onClose","onEndStep","onStartStep","textChunks","match","RegExp","chunkIndex","setChunkIndex","onHandleSpacePress","event","code","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","id","currentAnswer","setCurrentAnswer","onGetAnswers","map","answerId","key","nextAnswerIndex","findIndex","nextAnswerID","nextAnswer","previousAnswerIndex","previousAnswerID","previousAnswer","pop","nextQuestionId","question","QuestionContainer","AnswersContainer","isSelected","selectedColor","AnswerRow","AnswerSelectedIcon","color","Answer","onClick","onAnswerClick","onRenderCurrentAnswers","span","RangeSliderType","flex","ThumbnailContainer","NPCThumbnail","PressSpaceIndicator","right","ProgressBarText","TextOverlay","minWidth","percentageWidth","style","Input","input","maxLines","buttonType","items","onChange","selectedValues","forEach","item","label","generateSelectedValuesList","setSelectedValues","element","index","checked","options","dropdownId","uuidv4","selectedValue","setSelectedValue","getElementById","dropdownValue","get_value","target","value","option","name","handleClick","querySelector","onSelected","overflow","params","imagePath","isQuestionDialog","showGoNextIndicator","setShowGoNextIndicator","FramedGold","TextAndThumbnail","src","aliceDefaultThumbnail","TextOnly","pressSpaceGif","max","displayText","calculatePercentageValue","left","valueMin","valueMax","sliderId","wasMouseDownFirst","setWasMouseDownFirst","onHandleMouseUp","rpguiSlider","Number","onMouseUp","onMouseDown","Slider","GoldSlider","min"],"mappings":"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"}
1
+ {"version":3,"file":"long-bow.cjs.production.min.js","sources":["../src/components/Button.tsx","../src/components/RPGUIContainer.tsx","../src/components/RPGUIRoot.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/NPCDialog/NPCDialog.tsx","../src/components/typography/DynamicText.tsx","../src/components/NPCDialog/NPCDialogText.tsx","../src/hooks/useEventListener.ts","../src/components/NPCDialog/QuestionDialog/QuestionDialog.tsx","../src/components/RangeSlider.tsx","../src/components/ProgressBar.tsx","../src/components/Truncate.tsx","../src/components/CheckButton.tsx","../src/components/Dropdown.tsx","../src/components/Input.tsx","../src/components/RadioButton.tsx","../src/components/TextArea.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 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 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 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, { 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, { 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 { 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';\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","/* 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","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, { 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, { 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 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"],"names":["ButtonTypes","RPGUIContainerTypes","ButtonContainer","styled","button","displayName","componentId","_RPGUI","RPGUI","Container","div","props","y","x","fontSize","ListElement","li","RPGUIContainer","width","React","height","className","type","children","img","require","NPCDialogType","DynamicText","text","onFinish","onStart","useState","textState","setTextState","useEffect","i","interval","setInterval","length","substring","clearInterval","TextContainer","p","NPCDialogText","onClose","onEndStep","onStartStep","textChunks","match","RegExp","chunkIndex","setChunkIndex","onHandleSpacePress","event","code","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","id","currentAnswer","setCurrentAnswer","onGetAnswers","map","answerId","key","nextAnswerIndex","findIndex","nextAnswerID","nextAnswer","previousAnswerIndex","previousAnswerID","previousAnswer","pop","nextQuestionId","question","QuestionContainer","AnswersContainer","isSelected","selectedColor","AnswerRow","AnswerSelectedIcon","color","Answer","onClick","onAnswerClick","onRenderCurrentAnswers","span","RangeSliderType","flex","ThumbnailContainer","NPCThumbnail","PressSpaceIndicator","right","ProgressBarText","TextOverlay","minWidth","percentageWidth","style","Input","input","maxLines","buttonType","items","onChange","selectedValues","forEach","item","label","generateSelectedValuesList","setSelectedValues","element","index","checked","options","dropdownId","uuidv4","selectedValue","setSelectedValue","getElementById","dropdownValue","get_value","target","value","option","name","handleClick","querySelector","onSelected","overflow","params","imagePath","isQuestionDialog","showGoNextIndicator","setShowGoNextIndicator","FramedGold","TextAndThumbnail","src","aliceDefaultThumbnail","TextOnly","pressSpaceGif","max","displayText","calculatePercentageValue","left","valueMin","valueMax","sliderId","wasMouseDownFirst","setWasMouseDownFirst","onHandleMouseUp","rpguiSlider","Number","onMouseUp","onMouseDown","Slider","GoldSlider","min"],"mappings":"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"}
@@ -211,11 +211,12 @@ var RPGUIContainer = function RPGUIContainer(_ref) {
211
211
  type = _ref.type,
212
212
  _ref$width = _ref.width,
213
213
  width = _ref$width === void 0 ? '50%' : _ref$width,
214
- height = _ref.height;
214
+ height = _ref.height,
215
+ className = _ref.className;
215
216
  return React.createElement(Container$1, {
216
217
  width: width,
217
218
  height: height || 'auto',
218
- className: "rpgui-container " + type
219
+ className: "rpgui-container " + type + " " + className
219
220
  }, children);
220
221
  };
221
222
  var Container$1 = /*#__PURE__*/styled.div.withConfig({
@@ -1 +1 @@
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 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","_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","displayText","percentageWidth","minWidth","calculatePercentageValue","TextOverlay","ProgressBarText","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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"}
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 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","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","_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","displayText","percentageWidth","minWidth","calculatePercentageValue","TextOverlay","ProgressBarText","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,6 +1,6 @@
1
1
  {
2
2
  "name": "@rpg-engine/long-bow",
3
- "version": "0.1.41",
3
+ "version": "0.1.42",
4
4
  "license": "MIT",
5
5
  "main": "dist/index.js",
6
6
  "typings": "dist/index.d.ts",
@@ -34,11 +34,6 @@
34
34
  "peerDependencies": {
35
35
  "react": ">=16"
36
36
  },
37
- "husky": {
38
- "hooks": {
39
- "pre-commit": "tsdx lint"
40
- }
41
- },
42
37
  "prettier": {
43
38
  "printWidth": 80,
44
39
  "semi": true,
@@ -72,6 +67,7 @@
72
67
  "babel-loader": "^8.2.3",
73
68
  "babel-plugin-styled-components": "^2.0.6",
74
69
  "husky": "^7.0.4",
70
+ "pretty-quick": "^3.1.3",
75
71
  "react": "^17.0.2",
76
72
  "react-dom": "^17.0.2",
77
73
  "react-is": "^17.0.2",
@@ -85,6 +81,8 @@
85
81
  },
86
82
  "dependencies": {
87
83
  "@rollup/plugin-image": "^2.1.1",
84
+ "@rpg-engine/shared": "^0.2.49",
85
+ "dayjs": "^1.11.2",
88
86
  "rollup-plugin-image-files": "^1.4.2",
89
87
  "rpgui": "^1.0.3"
90
88
  }
@@ -0,0 +1,127 @@
1
+ import { IChatMessage } from '@rpg-engine/shared';
2
+ import dayjs from 'dayjs';
3
+ import React, { useEffect, useState } from 'react';
4
+ import styled from 'styled-components';
5
+ import { colors } from '../../constants/uiColors';
6
+ import { Button, ButtonTypes } from '../Button';
7
+ import { Input } from '../Input';
8
+ import { RPGUIContainer, RPGUIContainerTypes } from '../RPGUIContainer';
9
+ import { Column } from '../shared/Column';
10
+
11
+ export interface IChatProps {
12
+ chatMessages: IChatMessage[];
13
+ onSendChatMessage: (message: string) => void;
14
+ }
15
+
16
+ export const Chat: React.FC<IChatProps> = ({
17
+ chatMessages,
18
+ onSendChatMessage,
19
+ }) => {
20
+ const [message, setMessage] = useState('');
21
+
22
+ useEffect(() => {
23
+ scrollChatToBottom();
24
+ }, []);
25
+
26
+ useEffect(() => {
27
+ scrollChatToBottom();
28
+ }, [chatMessages]);
29
+
30
+ const scrollChatToBottom = () => {
31
+ const scrollingElement = document.querySelector('.chat-body');
32
+ console.log(scrollingElement);
33
+ if (scrollingElement) {
34
+ scrollingElement.scrollTop = scrollingElement.scrollHeight;
35
+ }
36
+ };
37
+
38
+ const handleSubmit = (event: React.SyntheticEvent<HTMLFormElement>) => {
39
+ event.preventDefault();
40
+ onSendChatMessage(message);
41
+ };
42
+ const getInputValue = (value: string) => {
43
+ setMessage(value);
44
+ };
45
+
46
+ return (
47
+ <>
48
+ <CustomContainer
49
+ type={RPGUIContainerTypes.FramedGrey}
50
+ width={'100%'}
51
+ height={'250px'}
52
+ className="chat-container"
53
+ >
54
+ <RPGUIContainer
55
+ type={RPGUIContainerTypes.FramedGrey}
56
+ width={'100%'}
57
+ height={'80%'}
58
+ className="chat-body dark-background"
59
+ >
60
+ {chatMessages.length ? (
61
+ chatMessages.map(({ _id, createdAt, emitter, message }, index) => (
62
+ <MessageText key={`${_id}_${index}`}>{`${dayjs(createdAt).format(
63
+ 'HH:mm'
64
+ )} ${emitter.name}: ${message}`}</MessageText>
65
+ ))
66
+ ) : (
67
+ <MessageText>No messages available.</MessageText>
68
+ )}
69
+ </RPGUIContainer>
70
+ <Form onSubmit={handleSubmit}>
71
+ <Column flex={70}>
72
+ <CustomInput
73
+ value={message}
74
+ id="inputMessage"
75
+ onChange={(e) => getInputValue(e.target.value)}
76
+ height={20}
77
+ className="dark-background"
78
+ />
79
+ </Column>
80
+ <Column justifyContent="flex-end">
81
+ <Button buttonType={ButtonTypes.RPGUIButton}>Send</Button>
82
+ </Column>
83
+ </Form>
84
+ </CustomContainer>
85
+ </>
86
+ );
87
+ };
88
+
89
+ const CustomInput = styled(Input)`
90
+ height: 30px;
91
+ width: 100%;
92
+
93
+ .rpgui-content .input {
94
+ min-height: 39px;
95
+ }
96
+ `;
97
+
98
+ const CustomContainer = styled(RPGUIContainer)`
99
+ display: block;
100
+
101
+ .dark-background {
102
+ background-color: ${colors.darkGrey} !important;
103
+ }
104
+
105
+ .chat-body {
106
+ &.rpgui-container.framed-grey {
107
+ background: unset;
108
+ }
109
+ max-height: 170px;
110
+ overflow-y: auto;
111
+ }
112
+ `;
113
+
114
+ const Form = styled.form`
115
+ display: flex;
116
+ width: 100%;
117
+ justify-content: center;
118
+ align-items: center;
119
+ `;
120
+
121
+ const MessageText = styled.p`
122
+ display: block !important;
123
+ width: 100%;
124
+ font-size: 0.7rem !important;
125
+ overflow-y: auto;
126
+ margin: 0;
127
+ `;
@@ -12,6 +12,7 @@ export interface IRPGUIContainerProps {
12
12
  children: React.ReactNode;
13
13
  width?: string;
14
14
  height?: string;
15
+ className?: string;
15
16
  }
16
17
 
17
18
  export const RPGUIContainer: React.FC<IRPGUIContainerProps> = ({
@@ -19,12 +20,13 @@ export const RPGUIContainer: React.FC<IRPGUIContainerProps> = ({
19
20
  type,
20
21
  width = '50%',
21
22
  height,
23
+ className,
22
24
  }) => {
23
25
  return (
24
26
  <Container
25
27
  width={width}
26
28
  height={height || 'auto'}
27
- className={`rpgui-container ${type}`}
29
+ className={`rpgui-container ${type} ${className}`}
28
30
  >
29
31
  {children}
30
32
  </Container>
@@ -0,0 +1,16 @@
1
+ import styled from 'styled-components';
2
+
3
+ interface IColumn {
4
+ flex?: number;
5
+ alignItems?: string;
6
+ justifyContent?: string;
7
+ flexWrap?: string;
8
+ }
9
+
10
+ export const Column = styled.div<IColumn>`
11
+ flex: ${(props) => props.flex || 'auto'};
12
+ display: flex;
13
+ flex-wrap: ${(props) => props.flexWrap || 'nowrap'};
14
+ align-items: ${(props) => props.alignItems || 'flex-start'};
15
+ justify-content: ${(props) => props.justifyContent || 'flex-start'};
16
+ `;
@@ -0,0 +1,3 @@
1
+ export const colors = {
2
+ darkGrey: '#3e3e3e',
3
+ };