@deephaven/components 0.16.1-sept8-monaco.10 → 0.16.1-vite.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AutoCompleteInput.js.map +1 -1
- package/dist/AutoResizeTextarea.js.map +1 -1
- package/dist/BasicModal.js.map +1 -1
- package/dist/Button.js.map +1 -1
- package/dist/ButtonGroup.js.map +1 -1
- package/dist/ButtonOld.js.map +1 -1
- package/dist/CardFlip.js.map +1 -1
- package/dist/Checkbox.js.map +1 -1
- package/dist/Collapse.js.map +1 -1
- package/dist/ComboBox.js.map +1 -1
- package/dist/CustomTimeSelect.js.map +1 -1
- package/dist/DebouncedSearchInput.js.map +1 -1
- package/dist/DeephavenSpinner.js.map +1 -1
- package/dist/DragUtils.js.map +1 -1
- package/dist/DraggableItemList.js +1 -1
- package/dist/DraggableItemList.js.map +1 -1
- package/dist/EditableItemList.d.ts +11 -0
- package/dist/EditableItemList.d.ts.map +1 -0
- package/dist/EditableItemList.js +107 -0
- package/dist/EditableItemList.js.map +1 -0
- package/dist/HierarchicalCheckboxMenu.js.map +1 -1
- package/dist/ItemList.js +1 -1
- package/dist/ItemList.js.map +1 -1
- package/dist/ItemListItem.js.map +1 -1
- package/dist/LoadingOverlay.js.map +1 -1
- package/dist/LoadingSpinner.js.map +1 -1
- package/dist/MaskedInput.js.map +1 -1
- package/dist/Option.js.map +1 -1
- package/dist/RadioGroup.js.map +1 -1
- package/dist/RadioItem.js.map +1 -1
- package/dist/SearchInput.js.map +1 -1
- package/dist/Select.js.map +1 -1
- package/dist/SelectValueList.js.map +1 -1
- package/dist/SocketedButton.js.map +1 -1
- package/dist/ThemeExport.js.map +1 -1
- package/dist/TimeInput.js.map +1 -1
- package/dist/TimeSlider.js.map +1 -1
- package/dist/ToastNotification.js.map +1 -1
- package/dist/UISwitch.js.map +1 -1
- package/dist/ValidateLabelInput.js.map +1 -1
- package/dist/context-actions/ContextActionUtils.js.map +1 -1
- package/dist/context-actions/ContextActions.js.map +1 -1
- package/dist/context-actions/ContextMenu.js.map +1 -1
- package/dist/context-actions/ContextMenuItem.js.map +1 -1
- package/dist/context-actions/ContextMenuRoot.js.map +1 -1
- package/dist/context-actions/GlobalContextAction.js.map +1 -1
- package/dist/context-actions/GlobalContextActions.js.map +1 -1
- package/dist/context-actions/index.js.map +1 -1
- package/dist/declaration.d.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/menu-actions/DropdownMenu.js.map +1 -1
- package/dist/menu-actions/Menu.js.map +1 -1
- package/dist/menu-actions/index.js.map +1 -1
- package/dist/modal/Modal.js.map +1 -1
- package/dist/modal/ModalBody.js.map +1 -1
- package/dist/modal/ModalFooter.js.map +1 -1
- package/dist/modal/ModalHeader.js.map +1 -1
- package/dist/modal/index.js.map +1 -1
- package/dist/navigation/Menu.js.map +1 -1
- package/dist/navigation/MenuItem.js.map +1 -1
- package/dist/navigation/Page.js.map +1 -1
- package/dist/navigation/Stack.js.map +1 -1
- package/dist/navigation/index.js.map +1 -1
- package/dist/popper/Popper.js.map +1 -1
- package/dist/popper/Tooltip.js.map +1 -1
- package/dist/popper/index.js.map +1 -1
- package/dist/shortcuts/GlobalShortcuts.js.map +1 -1
- package/dist/shortcuts/Shortcut.js.map +1 -1
- package/dist/shortcuts/ShortcutRegistry.js.map +1 -1
- package/dist/shortcuts/index.js.map +1 -1
- package/package.json +10 -9
- package/scss/BaseStyleSheet.scss +847 -0
- package/dist/BaseStyleSheet.css +0 -11560
- package/dist/BaseStyleSheet.css.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/AutoCompleteInput.tsx"],"names":["React","Component","PropTypes","memoize","classNames","debounce","Popper","DEBOUNCE_DELAY","MENU_NAVIGATION_DIRECTION","AutoCompleteInput","constructor","props","options","input","filter","option","title","toLowerCase","indexOf","popperOptions","placement","modifiers","preventOverflow","enabled","state","filteredOptions","keyboardOptionIndex","menuIsOpen","inputWidth","invalid","handleMenuKeyDown","bind","handleMenuBlur","handleInputChange","handleInputKeyDown","handleInputBlur","handelInputFocus","handleInputClick","updateInputValue","handleOptionClick","handleMenuOpened","handleMenuExited","popper","createRef","cbContainer","menuContainer","setInputWidth","current","setState","getBoundingClientRect","width","getValueAndValidate","value","isValid","result","length","processFilterChange","fireOnChange","onChange","getCachedFilteredOptions","perfectMatch","closeMenu","scheduleUpdate","resetValue","handleResize","event","key","stopPropagation","preventDefault","focus","navigateMenu","UP","DOWN","shiftKey","direction","newKeyboardOptionIndex","scrollOptionIntoView","onEnter","openMenu","target","relatedTarget","Element","element","contains","window","requestAnimationFrame","show","focusInput","hide","index","children","item","scrollIntoView","behavior","block","renderMenuElement","renderOptions","noMatchText","map","renderOption","render","inputPlaceholder","disabled","className","defaultTitle","spellCheck","dataTestId","arrayOf","shape","string","isRequired","func","bool","undefined"],"mappings":"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","sourcesContent":["/**\n * An Input component that pops and filters auto complete options as you type.\n *\n * props:\n * @param options :[{\n * title: 'option title for display',\n * value: 'option value' //option value\n * }]\n * @param popperOptions options for the Popper\n * @param onChange called when the value is changed from the pulldown\n * @param inputPlaceholder place holder for the input box\n * @param disabled disable both input & drop down\n * @param className an optional class name applied to the input element\n * @param defaultTitle the default title to display\n * @param spellCheck flag to disable spell checking, defaults to true\n * @param onEnter called when the Enter key is typed in the input element\n *\n */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport memoize from 'memoizee';\nimport classNames from 'classnames';\nimport debounce from 'lodash.debounce';\nimport { PopperOptions } from 'popper.js';\nimport { Popper } from './popper';\n\nimport './AutoCompleteInput.scss';\n\nconst DEBOUNCE_DELAY = 100;\n\nenum MENU_NAVIGATION_DIRECTION {\n UP = 'UP',\n DOWN = 'DOWN',\n}\n\ninterface AutoCompleteOption {\n title: string;\n value: string;\n}\n\ninterface AutoCompleteInputProps {\n options: AutoCompleteOption[];\n popperOptions: PopperOptions;\n onChange(value: string, isValid: boolean): void;\n inputPlaceholder: string;\n disabled: boolean;\n className: string;\n defaultTitle: string;\n spellCheck: boolean;\n onEnter(): void;\n noMatchText: string;\n 'data-testid'?: string;\n}\n\ninterface AutoCompleteInputState {\n title: string;\n filteredOptions: AutoCompleteOption[];\n keyboardOptionIndex: number;\n menuIsOpen: boolean;\n inputWidth: number;\n invalid: boolean;\n popperOptions: PopperOptions;\n}\n\nclass AutoCompleteInput extends Component<\n AutoCompleteInputProps,\n AutoCompleteInputState\n> {\n static propTypes = {\n options: PropTypes.arrayOf(\n PropTypes.shape({\n title: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n })\n ).isRequired,\n popperOptions: PropTypes.shape({}),\n onChange: PropTypes.func,\n inputPlaceholder: PropTypes.string,\n disabled: PropTypes.bool,\n className: PropTypes.string,\n defaultTitle: PropTypes.string,\n spellCheck: PropTypes.bool,\n onEnter: PropTypes.func,\n noMatchText: PropTypes.string,\n 'data-testid': PropTypes.string,\n };\n\n static defaultProps = {\n onChange(): void {\n // no-op\n },\n inputPlaceholder: '',\n disabled: false,\n className: '',\n defaultTitle: '',\n popperOptions: null,\n spellCheck: true,\n onEnter(): void {\n // no-op\n },\n noMatchText: 'No matching items found',\n 'data-testid': undefined,\n };\n\n static MENU_NAVIGATION_DIRECTION = MENU_NAVIGATION_DIRECTION;\n\n constructor(props: AutoCompleteInputProps) {\n super(props);\n\n let { popperOptions } = this.props;\n popperOptions = {\n placement: 'bottom-end',\n modifiers: {\n preventOverflow: { enabled: false },\n },\n ...popperOptions,\n };\n\n this.state = {\n title: '',\n filteredOptions: [],\n keyboardOptionIndex: 0,\n menuIsOpen: false,\n inputWidth: 100,\n invalid: false,\n popperOptions,\n };\n\n this.handleMenuKeyDown = this.handleMenuKeyDown.bind(this);\n this.handleMenuBlur = this.handleMenuBlur.bind(this);\n\n this.handleInputChange = this.handleInputChange.bind(this);\n this.handleInputKeyDown = this.handleInputKeyDown.bind(this);\n this.handleInputBlur = this.handleInputBlur.bind(this);\n this.handelInputFocus = this.handelInputFocus.bind(this);\n this.handleInputClick = this.handleInputClick.bind(this);\n\n this.updateInputValue = debounce(this.updateInputValue, DEBOUNCE_DELAY);\n\n this.handleOptionClick = this.handleOptionClick.bind(this);\n\n this.handleMenuOpened = this.handleMenuOpened.bind(this);\n this.handleMenuExited = this.handleMenuExited.bind(this);\n\n this.popper = React.createRef();\n this.cbContainer = React.createRef();\n this.menuContainer = React.createRef();\n this.input = React.createRef();\n }\n\n popper: React.RefObject<Popper>;\n\n cbContainer: React.RefObject<HTMLDivElement>;\n\n menuContainer: React.RefObject<HTMLDivElement>;\n\n input: React.RefObject<HTMLInputElement>;\n\n setInputWidth(): void {\n if (this.cbContainer.current) {\n this.setState({\n inputWidth: this.cbContainer.current.getBoundingClientRect().width,\n });\n }\n }\n\n getCachedFilteredOptions = memoize(\n (options: AutoCompleteOption[], input: string) =>\n options.filter(\n // supports partial match\n option => option.title.toLowerCase().indexOf(input.toLowerCase()) >= 0\n )\n );\n\n // validation needs to be an exact case-sensitve match on value\n getValueAndValidate(title: string): { value: string; isValid: boolean } {\n if (!title) {\n this.setState({ invalid: false });\n return { value: title, isValid: false };\n }\n\n // validate\n const { options } = this.props;\n const result = options.filter(\n option => option.title.toLowerCase() === title.toLowerCase()\n );\n if (result.length < 1) {\n this.setState({ invalid: true });\n return { value: title, isValid: false };\n }\n\n this.setState({ invalid: false });\n return { value: result[0].value, isValid: true };\n }\n\n // validate typed entries emit change event using value\n updateInputValue(title: string): void {\n const { menuIsOpen } = this.state;\n const { value, isValid } = this.getValueAndValidate(title);\n if (menuIsOpen) this.processFilterChange(title);\n this.fireOnChange(value, isValid);\n }\n\n fireOnChange(value: string, isValid = true): void {\n const { onChange } = this.props;\n onChange(value, isValid);\n }\n\n processFilterChange(filter: string): void {\n const { options } = this.props;\n const { menuIsOpen } = this.state;\n const filteredOptions = filter\n ? this.getCachedFilteredOptions(options, filter)\n : options;\n const perfectMatch =\n filteredOptions.length === 1 && filteredOptions[0].title === filter;\n this.setState({\n filteredOptions,\n keyboardOptionIndex: 0,\n });\n if (perfectMatch && menuIsOpen) {\n this.closeMenu();\n return;\n }\n this.popper.current?.scheduleUpdate(); // filtered options list can change size, may need to be repositioned\n }\n\n resetValue(): void {\n this.setState({ title: '' });\n this.fireOnChange('');\n }\n\n handleResize(): void {\n this.setInputWidth();\n }\n\n handleMenuKeyDown(event: React.KeyboardEvent): void {\n const { filteredOptions, keyboardOptionIndex } = this.state;\n const option = filteredOptions[keyboardOptionIndex];\n\n switch (event.key) {\n case 'Enter':\n case 'ArrowRight':\n event.stopPropagation();\n event.preventDefault();\n if (option) {\n this.setState({ title: option.title, invalid: false });\n this.fireOnChange(option.value);\n }\n this.closeMenu();\n this.input.current?.focus();\n break;\n case 'ArrowUp':\n event.stopPropagation();\n event.preventDefault();\n this.navigateMenu(AutoCompleteInput.MENU_NAVIGATION_DIRECTION.UP);\n break;\n case 'ArrowDown':\n event.stopPropagation();\n event.preventDefault();\n this.navigateMenu(AutoCompleteInput.MENU_NAVIGATION_DIRECTION.DOWN);\n break;\n case 'Tab':\n event.stopPropagation();\n event.preventDefault();\n if (event.shiftKey) {\n this.navigateMenu(AutoCompleteInput.MENU_NAVIGATION_DIRECTION.UP);\n break;\n }\n this.navigateMenu(AutoCompleteInput.MENU_NAVIGATION_DIRECTION.DOWN);\n break;\n case 'Escape':\n event.preventDefault();\n event.stopPropagation();\n this.closeMenu();\n break;\n default:\n break;\n }\n }\n\n navigateMenu(direction: MENU_NAVIGATION_DIRECTION): void {\n const { filteredOptions, keyboardOptionIndex } = this.state;\n let newKeyboardOptionIndex = keyboardOptionIndex;\n if (direction === AutoCompleteInput.MENU_NAVIGATION_DIRECTION.UP) {\n if (keyboardOptionIndex > 0) {\n newKeyboardOptionIndex =\n (newKeyboardOptionIndex - 1) % filteredOptions.length;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex,\n });\n } else if (keyboardOptionIndex === 0) {\n newKeyboardOptionIndex = filteredOptions.length - 1;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex,\n });\n }\n } else if (direction === AutoCompleteInput.MENU_NAVIGATION_DIRECTION.DOWN) {\n if (keyboardOptionIndex < filteredOptions.length) {\n newKeyboardOptionIndex =\n (newKeyboardOptionIndex + 1) % filteredOptions.length;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex,\n });\n }\n }\n this.scrollOptionIntoView(newKeyboardOptionIndex);\n }\n\n handleInputKeyDown(event: React.KeyboardEvent): void {\n const { onEnter } = this.props;\n const { menuIsOpen } = this.state;\n\n if (menuIsOpen) {\n this.handleMenuKeyDown(event);\n } else if (event.key === 'Enter') {\n onEnter();\n } else if (event.key === 'Escape') {\n this.resetValue();\n event.preventDefault();\n event.stopPropagation();\n } else if (\n !(\n event.key === 'ArrowRight' ||\n event.key === 'ArrowLeft' ||\n event.key === 'Tab' ||\n event.key === 'Shift'\n )\n ) {\n this.openMenu();\n }\n }\n\n handleInputChange(event: React.ChangeEvent<HTMLInputElement>): void {\n this.setState({ title: event.target.value });\n this.updateInputValue(event.target.value);\n }\n\n handleOptionClick(option: AutoCompleteOption): void {\n this.setState({ title: option.title, invalid: false });\n this.fireOnChange(option.value);\n this.closeMenu();\n this.input.current?.focus();\n }\n\n handelInputFocus(): void {\n const { menuIsOpen } = this.state;\n if (!menuIsOpen) {\n this.openMenu();\n }\n }\n\n handleInputClick(): void {\n const { menuIsOpen } = this.state;\n if (!menuIsOpen) {\n this.openMenu();\n }\n }\n\n handleInputBlur(event: React.FocusEvent<HTMLInputElement>): void {\n const { menuIsOpen } = this.state;\n if (\n menuIsOpen &&\n event.relatedTarget instanceof Element &&\n this.popper.current?.element.contains(event.relatedTarget)\n ) {\n return;\n }\n this.closeMenu(false);\n }\n\n handleMenuBlur(event: React.FocusEvent<HTMLDivElement>): void {\n // if blur event is caused by focusing on the input or focus on options don't close menu\n if (\n event.relatedTarget === this.input.current ||\n (event.relatedTarget instanceof Element &&\n this.popper.current?.element.contains(event.relatedTarget))\n ) {\n return;\n }\n this.closeMenu(false);\n }\n\n handleMenuOpened(): void {\n this.input.current?.focus();\n }\n\n handleMenuExited(): void {\n const { menuIsOpen } = this.state;\n if (menuIsOpen) {\n this.setState({ menuIsOpen: false, keyboardOptionIndex: 0 });\n }\n }\n\n openMenu(): void {\n const { title } = this.state;\n this.processFilterChange(title);\n this.setInputWidth();\n this.setState({ menuIsOpen: true });\n\n // https://github.com/reactjs/react-transition-group/issues/382\n window.requestAnimationFrame(() => {\n this.popper.current?.show();\n });\n }\n\n closeMenu(focusInput = true): void {\n this.setState({ menuIsOpen: false, keyboardOptionIndex: 0 });\n if (focusInput) {\n this.input.current?.focus();\n }\n this.popper.current?.hide();\n }\n\n scrollOptionIntoView(index: number): void {\n if (this.menuContainer.current) {\n this.menuContainer.current.children.item(index)?.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n });\n }\n }\n\n renderMenuElement(): JSX.Element {\n const { inputWidth } = this.state;\n return (\n <div\n className={classNames('aci-options')}\n ref={this.menuContainer}\n role=\"presentation\"\n onKeyDown={this.handleMenuKeyDown}\n style={{ width: inputWidth }}\n onBlur={this.handleMenuBlur}\n >\n {this.renderOptions()}\n </div>\n );\n }\n\n renderOptions(): React.ReactNode {\n const { noMatchText } = this.props;\n const { title, filteredOptions } = this.state;\n\n if (title && filteredOptions.length === 0) {\n return <div className=\"no-match\">{noMatchText}</div>;\n }\n\n return filteredOptions.map((option, index) =>\n this.renderOption(option, index)\n );\n }\n\n renderOption(option: AutoCompleteOption, index: number): JSX.Element {\n const { keyboardOptionIndex } = this.state;\n const key = `option-${index}-${option.value}`;\n return (\n <button\n key={key}\n type=\"button\"\n className={classNames('aci-option-btn', {\n 'keyboard-active': keyboardOptionIndex === index,\n })}\n onClick={() => this.handleOptionClick(option)}\n onFocus={() => this.setState({ keyboardOptionIndex: index })}\n >\n {option.title}\n </button>\n );\n }\n\n render(): JSX.Element {\n const {\n options,\n inputPlaceholder,\n disabled,\n className,\n defaultTitle,\n spellCheck,\n 'data-testid': dataTestId,\n } = this.props;\n const { title, menuIsOpen, popperOptions, invalid } = this.state;\n\n return (\n <div className=\"aci-container\" ref={this.cbContainer}>\n <input\n value={title || defaultTitle}\n className={classNames('form-control', className, 'aci-input', {\n 'is-invalid': invalid && !menuIsOpen,\n })}\n ref={this.input}\n onChange={this.handleInputChange}\n placeholder={inputPlaceholder || options[0].title}\n disabled={disabled}\n onFocus={this.handelInputFocus}\n onClick={this.handleInputClick}\n onBlur={this.handleInputBlur}\n onKeyDown={this.handleInputKeyDown}\n spellCheck={spellCheck}\n data-testid={dataTestId}\n />\n <Popper\n ref={this.popper}\n options={popperOptions}\n className={classNames('aci-options-popper interactive')}\n onEntered={this.handleMenuOpened}\n onExited={this.handleMenuExited}\n >\n {this.renderMenuElement()}\n </Popper>\n </div>\n );\n }\n}\n\nexport default AutoCompleteInput;\n"],"file":"AutoCompleteInput.js"}
|
|
1
|
+
{"version":3,"file":"AutoCompleteInput.js","names":["React","Component","PropTypes","memoize","classNames","debounce","Popper","DEBOUNCE_DELAY","MENU_NAVIGATION_DIRECTION","AutoCompleteInput","constructor","props","options","input","filter","option","title","toLowerCase","indexOf","popperOptions","placement","modifiers","preventOverflow","enabled","state","filteredOptions","keyboardOptionIndex","menuIsOpen","inputWidth","invalid","handleMenuKeyDown","bind","handleMenuBlur","handleInputChange","handleInputKeyDown","handleInputBlur","handelInputFocus","handleInputClick","updateInputValue","handleOptionClick","handleMenuOpened","handleMenuExited","popper","createRef","cbContainer","menuContainer","setInputWidth","current","setState","getBoundingClientRect","width","getValueAndValidate","value","isValid","result","length","processFilterChange","fireOnChange","onChange","getCachedFilteredOptions","perfectMatch","closeMenu","scheduleUpdate","resetValue","handleResize","event","key","stopPropagation","preventDefault","focus","navigateMenu","UP","DOWN","shiftKey","direction","newKeyboardOptionIndex","scrollOptionIntoView","onEnter","openMenu","target","relatedTarget","Element","element","contains","window","requestAnimationFrame","show","focusInput","hide","index","children","item","scrollIntoView","behavior","block","renderMenuElement","renderOptions","noMatchText","map","renderOption","render","inputPlaceholder","disabled","className","defaultTitle","spellCheck","dataTestId","arrayOf","shape","string","isRequired","func","bool","undefined"],"sources":["../src/AutoCompleteInput.tsx"],"sourcesContent":["/**\n * An Input component that pops and filters auto complete options as you type.\n *\n * props:\n * @param options :[{\n * title: 'option title for display',\n * value: 'option value' //option value\n * }]\n * @param popperOptions options for the Popper\n * @param onChange called when the value is changed from the pulldown\n * @param inputPlaceholder place holder for the input box\n * @param disabled disable both input & drop down\n * @param className an optional class name applied to the input element\n * @param defaultTitle the default title to display\n * @param spellCheck flag to disable spell checking, defaults to true\n * @param onEnter called when the Enter key is typed in the input element\n *\n */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport memoize from 'memoizee';\nimport classNames from 'classnames';\nimport debounce from 'lodash.debounce';\nimport { PopperOptions } from 'popper.js';\nimport { Popper } from './popper';\n\nimport './AutoCompleteInput.scss';\n\nconst DEBOUNCE_DELAY = 100;\n\nenum MENU_NAVIGATION_DIRECTION {\n UP = 'UP',\n DOWN = 'DOWN',\n}\n\ninterface AutoCompleteOption {\n title: string;\n value: string;\n}\n\ninterface AutoCompleteInputProps {\n options: AutoCompleteOption[];\n popperOptions: PopperOptions;\n onChange(value: string, isValid: boolean): void;\n inputPlaceholder: string;\n disabled: boolean;\n className: string;\n defaultTitle: string;\n spellCheck: boolean;\n onEnter(): void;\n noMatchText: string;\n 'data-testid'?: string;\n}\n\ninterface AutoCompleteInputState {\n title: string;\n filteredOptions: AutoCompleteOption[];\n keyboardOptionIndex: number;\n menuIsOpen: boolean;\n inputWidth: number;\n invalid: boolean;\n popperOptions: PopperOptions;\n}\n\nclass AutoCompleteInput extends Component<\n AutoCompleteInputProps,\n AutoCompleteInputState\n> {\n static propTypes = {\n options: PropTypes.arrayOf(\n PropTypes.shape({\n title: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n })\n ).isRequired,\n popperOptions: PropTypes.shape({}),\n onChange: PropTypes.func,\n inputPlaceholder: PropTypes.string,\n disabled: PropTypes.bool,\n className: PropTypes.string,\n defaultTitle: PropTypes.string,\n spellCheck: PropTypes.bool,\n onEnter: PropTypes.func,\n noMatchText: PropTypes.string,\n 'data-testid': PropTypes.string,\n };\n\n static defaultProps = {\n onChange(): void {\n // no-op\n },\n inputPlaceholder: '',\n disabled: false,\n className: '',\n defaultTitle: '',\n popperOptions: null,\n spellCheck: true,\n onEnter(): void {\n // no-op\n },\n noMatchText: 'No matching items found',\n 'data-testid': undefined,\n };\n\n static MENU_NAVIGATION_DIRECTION = MENU_NAVIGATION_DIRECTION;\n\n constructor(props: AutoCompleteInputProps) {\n super(props);\n\n let { popperOptions } = this.props;\n popperOptions = {\n placement: 'bottom-end',\n modifiers: {\n preventOverflow: { enabled: false },\n },\n ...popperOptions,\n };\n\n this.state = {\n title: '',\n filteredOptions: [],\n keyboardOptionIndex: 0,\n menuIsOpen: false,\n inputWidth: 100,\n invalid: false,\n popperOptions,\n };\n\n this.handleMenuKeyDown = this.handleMenuKeyDown.bind(this);\n this.handleMenuBlur = this.handleMenuBlur.bind(this);\n\n this.handleInputChange = this.handleInputChange.bind(this);\n this.handleInputKeyDown = this.handleInputKeyDown.bind(this);\n this.handleInputBlur = this.handleInputBlur.bind(this);\n this.handelInputFocus = this.handelInputFocus.bind(this);\n this.handleInputClick = this.handleInputClick.bind(this);\n\n this.updateInputValue = debounce(this.updateInputValue, DEBOUNCE_DELAY);\n\n this.handleOptionClick = this.handleOptionClick.bind(this);\n\n this.handleMenuOpened = this.handleMenuOpened.bind(this);\n this.handleMenuExited = this.handleMenuExited.bind(this);\n\n this.popper = React.createRef();\n this.cbContainer = React.createRef();\n this.menuContainer = React.createRef();\n this.input = React.createRef();\n }\n\n popper: React.RefObject<Popper>;\n\n cbContainer: React.RefObject<HTMLDivElement>;\n\n menuContainer: React.RefObject<HTMLDivElement>;\n\n input: React.RefObject<HTMLInputElement>;\n\n setInputWidth(): void {\n if (this.cbContainer.current) {\n this.setState({\n inputWidth: this.cbContainer.current.getBoundingClientRect().width,\n });\n }\n }\n\n getCachedFilteredOptions = memoize(\n (options: AutoCompleteOption[], input: string) =>\n options.filter(\n // supports partial match\n option => option.title.toLowerCase().indexOf(input.toLowerCase()) >= 0\n )\n );\n\n // validation needs to be an exact case-sensitve match on value\n getValueAndValidate(title: string): { value: string; isValid: boolean } {\n if (!title) {\n this.setState({ invalid: false });\n return { value: title, isValid: false };\n }\n\n // validate\n const { options } = this.props;\n const result = options.filter(\n option => option.title.toLowerCase() === title.toLowerCase()\n );\n if (result.length < 1) {\n this.setState({ invalid: true });\n return { value: title, isValid: false };\n }\n\n this.setState({ invalid: false });\n return { value: result[0].value, isValid: true };\n }\n\n // validate typed entries emit change event using value\n updateInputValue(title: string): void {\n const { menuIsOpen } = this.state;\n const { value, isValid } = this.getValueAndValidate(title);\n if (menuIsOpen) this.processFilterChange(title);\n this.fireOnChange(value, isValid);\n }\n\n fireOnChange(value: string, isValid = true): void {\n const { onChange } = this.props;\n onChange(value, isValid);\n }\n\n processFilterChange(filter: string): void {\n const { options } = this.props;\n const { menuIsOpen } = this.state;\n const filteredOptions = filter\n ? this.getCachedFilteredOptions(options, filter)\n : options;\n const perfectMatch =\n filteredOptions.length === 1 && filteredOptions[0].title === filter;\n this.setState({\n filteredOptions,\n keyboardOptionIndex: 0,\n });\n if (perfectMatch && menuIsOpen) {\n this.closeMenu();\n return;\n }\n this.popper.current?.scheduleUpdate(); // filtered options list can change size, may need to be repositioned\n }\n\n resetValue(): void {\n this.setState({ title: '' });\n this.fireOnChange('');\n }\n\n handleResize(): void {\n this.setInputWidth();\n }\n\n handleMenuKeyDown(event: React.KeyboardEvent): void {\n const { filteredOptions, keyboardOptionIndex } = this.state;\n const option = filteredOptions[keyboardOptionIndex];\n\n switch (event.key) {\n case 'Enter':\n case 'ArrowRight':\n event.stopPropagation();\n event.preventDefault();\n if (option) {\n this.setState({ title: option.title, invalid: false });\n this.fireOnChange(option.value);\n }\n this.closeMenu();\n this.input.current?.focus();\n break;\n case 'ArrowUp':\n event.stopPropagation();\n event.preventDefault();\n this.navigateMenu(AutoCompleteInput.MENU_NAVIGATION_DIRECTION.UP);\n break;\n case 'ArrowDown':\n event.stopPropagation();\n event.preventDefault();\n this.navigateMenu(AutoCompleteInput.MENU_NAVIGATION_DIRECTION.DOWN);\n break;\n case 'Tab':\n event.stopPropagation();\n event.preventDefault();\n if (event.shiftKey) {\n this.navigateMenu(AutoCompleteInput.MENU_NAVIGATION_DIRECTION.UP);\n break;\n }\n this.navigateMenu(AutoCompleteInput.MENU_NAVIGATION_DIRECTION.DOWN);\n break;\n case 'Escape':\n event.preventDefault();\n event.stopPropagation();\n this.closeMenu();\n break;\n default:\n break;\n }\n }\n\n navigateMenu(direction: MENU_NAVIGATION_DIRECTION): void {\n const { filteredOptions, keyboardOptionIndex } = this.state;\n let newKeyboardOptionIndex = keyboardOptionIndex;\n if (direction === AutoCompleteInput.MENU_NAVIGATION_DIRECTION.UP) {\n if (keyboardOptionIndex > 0) {\n newKeyboardOptionIndex =\n (newKeyboardOptionIndex - 1) % filteredOptions.length;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex,\n });\n } else if (keyboardOptionIndex === 0) {\n newKeyboardOptionIndex = filteredOptions.length - 1;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex,\n });\n }\n } else if (direction === AutoCompleteInput.MENU_NAVIGATION_DIRECTION.DOWN) {\n if (keyboardOptionIndex < filteredOptions.length) {\n newKeyboardOptionIndex =\n (newKeyboardOptionIndex + 1) % filteredOptions.length;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex,\n });\n }\n }\n this.scrollOptionIntoView(newKeyboardOptionIndex);\n }\n\n handleInputKeyDown(event: React.KeyboardEvent): void {\n const { onEnter } = this.props;\n const { menuIsOpen } = this.state;\n\n if (menuIsOpen) {\n this.handleMenuKeyDown(event);\n } else if (event.key === 'Enter') {\n onEnter();\n } else if (event.key === 'Escape') {\n this.resetValue();\n event.preventDefault();\n event.stopPropagation();\n } else if (\n !(\n event.key === 'ArrowRight' ||\n event.key === 'ArrowLeft' ||\n event.key === 'Tab' ||\n event.key === 'Shift'\n )\n ) {\n this.openMenu();\n }\n }\n\n handleInputChange(event: React.ChangeEvent<HTMLInputElement>): void {\n this.setState({ title: event.target.value });\n this.updateInputValue(event.target.value);\n }\n\n handleOptionClick(option: AutoCompleteOption): void {\n this.setState({ title: option.title, invalid: false });\n this.fireOnChange(option.value);\n this.closeMenu();\n this.input.current?.focus();\n }\n\n handelInputFocus(): void {\n const { menuIsOpen } = this.state;\n if (!menuIsOpen) {\n this.openMenu();\n }\n }\n\n handleInputClick(): void {\n const { menuIsOpen } = this.state;\n if (!menuIsOpen) {\n this.openMenu();\n }\n }\n\n handleInputBlur(event: React.FocusEvent<HTMLInputElement>): void {\n const { menuIsOpen } = this.state;\n if (\n menuIsOpen &&\n event.relatedTarget instanceof Element &&\n this.popper.current?.element.contains(event.relatedTarget)\n ) {\n return;\n }\n this.closeMenu(false);\n }\n\n handleMenuBlur(event: React.FocusEvent<HTMLDivElement>): void {\n // if blur event is caused by focusing on the input or focus on options don't close menu\n if (\n event.relatedTarget === this.input.current ||\n (event.relatedTarget instanceof Element &&\n this.popper.current?.element.contains(event.relatedTarget))\n ) {\n return;\n }\n this.closeMenu(false);\n }\n\n handleMenuOpened(): void {\n this.input.current?.focus();\n }\n\n handleMenuExited(): void {\n const { menuIsOpen } = this.state;\n if (menuIsOpen) {\n this.setState({ menuIsOpen: false, keyboardOptionIndex: 0 });\n }\n }\n\n openMenu(): void {\n const { title } = this.state;\n this.processFilterChange(title);\n this.setInputWidth();\n this.setState({ menuIsOpen: true });\n\n // https://github.com/reactjs/react-transition-group/issues/382\n window.requestAnimationFrame(() => {\n this.popper.current?.show();\n });\n }\n\n closeMenu(focusInput = true): void {\n this.setState({ menuIsOpen: false, keyboardOptionIndex: 0 });\n if (focusInput) {\n this.input.current?.focus();\n }\n this.popper.current?.hide();\n }\n\n scrollOptionIntoView(index: number): void {\n if (this.menuContainer.current) {\n this.menuContainer.current.children.item(index)?.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n });\n }\n }\n\n renderMenuElement(): JSX.Element {\n const { inputWidth } = this.state;\n return (\n <div\n className={classNames('aci-options')}\n ref={this.menuContainer}\n role=\"presentation\"\n onKeyDown={this.handleMenuKeyDown}\n style={{ width: inputWidth }}\n onBlur={this.handleMenuBlur}\n >\n {this.renderOptions()}\n </div>\n );\n }\n\n renderOptions(): React.ReactNode {\n const { noMatchText } = this.props;\n const { title, filteredOptions } = this.state;\n\n if (title && filteredOptions.length === 0) {\n return <div className=\"no-match\">{noMatchText}</div>;\n }\n\n return filteredOptions.map((option, index) =>\n this.renderOption(option, index)\n );\n }\n\n renderOption(option: AutoCompleteOption, index: number): JSX.Element {\n const { keyboardOptionIndex } = this.state;\n const key = `option-${index}-${option.value}`;\n return (\n <button\n key={key}\n type=\"button\"\n className={classNames('aci-option-btn', {\n 'keyboard-active': keyboardOptionIndex === index,\n })}\n onClick={() => this.handleOptionClick(option)}\n onFocus={() => this.setState({ keyboardOptionIndex: index })}\n >\n {option.title}\n </button>\n );\n }\n\n render(): JSX.Element {\n const {\n options,\n inputPlaceholder,\n disabled,\n className,\n defaultTitle,\n spellCheck,\n 'data-testid': dataTestId,\n } = this.props;\n const { title, menuIsOpen, popperOptions, invalid } = this.state;\n\n return (\n <div className=\"aci-container\" ref={this.cbContainer}>\n <input\n value={title || defaultTitle}\n className={classNames('form-control', className, 'aci-input', {\n 'is-invalid': invalid && !menuIsOpen,\n })}\n ref={this.input}\n onChange={this.handleInputChange}\n placeholder={inputPlaceholder || options[0].title}\n disabled={disabled}\n onFocus={this.handelInputFocus}\n onClick={this.handleInputClick}\n onBlur={this.handleInputBlur}\n onKeyDown={this.handleInputKeyDown}\n spellCheck={spellCheck}\n data-testid={dataTestId}\n />\n <Popper\n ref={this.popper}\n options={popperOptions}\n className={classNames('aci-options-popper interactive')}\n onEntered={this.handleMenuOpened}\n onExited={this.handleMenuExited}\n >\n {this.renderMenuElement()}\n </Popper>\n </div>\n );\n }\n}\n\nexport default AutoCompleteInput;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"AutoResizeTextarea.js","names":["React","useState","useRef","useEffect","PropTypes","classNames","AutoResizeTextarea","className","value","propsValue","onChange","spellCheck","placeholder","disabled","delimiter","id","dataTestId","setValue","isPastedChange","setIsPastedChange","element","syncStateWithProp","explode","input","trim","split","filter","string","join","implode","map","reCalculateLayout","current","style","height","resizedHeight","scrollHeight","offsetHeight","clientHeight","handleChange","event","newValue","target","handleFocus","scrollLeft","handleMouseDown","document","activeElement","focus","handleBlur","handlePaste","reCalculate","propTypes","isRequired","func","bool","defaultProps","undefined"],"sources":["../src/AutoResizeTextarea.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\n\nimport './AutoResizeTextarea.scss';\n\ninterface AutoResizeTextareaProps {\n value: string;\n onChange: (val: string) => void;\n className?: string;\n spellCheck?: boolean;\n placeholder?: string;\n disabled?: boolean;\n delimiter?: string;\n id?: string;\n 'data-testid'?: string;\n}\n\n/**\n * Makes a textarea that auto resizes based on contents, its height grows with new lines.\n * If a delimeter is set, such as \" -\" or \" \", as used by jvm args or env vars\n * then the field will also \"explode\" the value by the delimiter over new lines\n * on focus, and implode on blur. By default, it doesn't word wrap.\n */\nconst AutoResizeTextarea = ({\n className = '',\n value: propsValue,\n onChange,\n spellCheck = false,\n placeholder = '',\n disabled = false,\n delimiter = '',\n id = '',\n 'data-testid': dataTestId,\n}: AutoResizeTextareaProps): JSX.Element => {\n const [value, setValue] = useState(propsValue);\n const [isPastedChange, setIsPastedChange] = useState(false);\n const element = useRef<HTMLTextAreaElement>(null);\n\n useEffect(\n function syncStateWithProp() {\n // keep state value in sync with prop changes\n setValue(propsValue);\n },\n [propsValue]\n );\n\n function explode(input: string) {\n // split by delimiter, commonly \" \" or \" -\"\n // strip empty strings (if delimiter is space, and there are multiple spaces in a row)\n // and join with new line and a trimmed delimeter (get rid of leading spaces)\n return input\n .trim()\n .split(delimiter)\n .filter(string => string) // remove empty strings\n .join(`\\n${delimiter.trim()}`);\n }\n\n function implode(input: string) {\n return input\n .split('\\n')\n .map(string => string.trim())\n .join(' ');\n }\n\n function reCalculateLayout() {\n if (!element.current) {\n return;\n }\n element.current.style.height = '0'; // shrink component to get scrollHeight\n const resizedHeight =\n element.current.scrollHeight +\n (element.current.offsetHeight - element.current.clientHeight);\n // accounts for border, padding is captured by scroll height\n if (resizedHeight > 0) element.current.style.height = `${resizedHeight}px`;\n }\n\n function handleChange(event: React.ChangeEvent<HTMLTextAreaElement>) {\n let newValue = event.target.value;\n if (isPastedChange) {\n if (delimiter) newValue = explode(newValue);\n setIsPastedChange(false);\n }\n setValue(newValue);\n onChange(newValue);\n }\n\n function handleFocus() {\n if (!element.current) {\n return;\n }\n if (delimiter) {\n setValue(explode(value));\n reCalculateLayout();\n }\n element.current.scrollLeft = 0;\n // scroll left as it can be disorienting if you click on a long line\n }\n\n // make it explode when dragging the resize handle\n // by making it trigger focus (which normally doesn't\n // trigger when just resizing).\n function handleMouseDown() {\n if (!element.current) return;\n if (document.activeElement === element.current) return;\n element.current.focus();\n }\n\n function handleBlur() {\n if (delimiter) {\n setValue(implode(value));\n onChange(implode(value));\n }\n }\n\n function handlePaste() {\n setIsPastedChange(true);\n }\n\n useEffect(\n function reCalculate() {\n reCalculateLayout();\n },\n [value]\n );\n\n return (\n <textarea\n ref={element}\n id={id}\n className={classNames(className, 'auto-resize-textarea form-control')}\n placeholder={placeholder}\n value={value}\n rows={1}\n onChange={handleChange}\n onFocus={handleFocus}\n onMouseDown={handleMouseDown}\n onBlur={handleBlur}\n onPaste={handlePaste}\n spellCheck={spellCheck}\n disabled={disabled}\n data-testid={dataTestId}\n />\n );\n};\n\nAutoResizeTextarea.propTypes = {\n value: PropTypes.string.isRequired,\n onChange: PropTypes.func.isRequired,\n className: PropTypes.string,\n placeholder: PropTypes.string,\n spellCheck: PropTypes.bool,\n disabled: PropTypes.bool,\n delimiter: PropTypes.string,\n id: PropTypes.string,\n 'data-testid': PropTypes.string,\n};\n\nAutoResizeTextarea.defaultProps = {\n className: '',\n id: '',\n placeholder: '',\n disabled: false,\n spellCheck: false,\n delimiter: '',\n 'data-testid': undefined,\n};\n\nexport default AutoResizeTextarea;\n"],"mappings":"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"}
|
package/dist/BasicModal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"BasicModal.js","names":["React","useRef","useCallback","PropTypes","ButtonGroup","Button","Modal","ModalBody","ModalFooter","ModalHeader","BasicModal","props","isOpen","headerText","bodyText","onCancel","onConfirm","onDiscard","onModalDisable","cancelButtonText","confirmButtonText","discardButtonText","children","dataTestId","confirmButton","disableModalCheckbox","onConfirmClicked","current","checked","modalBody","focus","undefined","propTypes","bool","isRequired","string","oneOfType","func","node","defaultProps"],"sources":["../src/BasicModal.tsx"],"sourcesContent":["import React, { useRef, useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport ButtonGroup from './ButtonGroup';\nimport Button from './Button';\nimport { Modal, ModalBody, ModalFooter, ModalHeader } from './modal';\n\ninterface BasicModalProps {\n isOpen: boolean;\n headerText: string;\n bodyText: string | (() => string);\n onCancel?: () => void;\n onConfirm: () => void;\n onDiscard?: () => void;\n onModalDisable?: () => void;\n cancelButtonText?: string;\n confirmButtonText?: string;\n discardButtonText?: string;\n children?: React.ReactNode;\n 'data-testid'?: string;\n}\n\n/**\n * A basic modal dialog with two buttons: cancel / confirm.\n *\n * @param isOpen indicates if the modal dialog is open\n * @param headerText text displayed in the modal header\n * @param bodyText text displayed in the modal body\n * @param onCancel callback for the cancel button; if not provided, button not shown\n * @param onConfirm callback for the confirm button\n * @param onDiscard callback for the discard button; if not provided, button not shown\n * @param cancelButtonText optional text for the cancel button, defaults to 'Cancel'\n * @param confirmButtonText optional text for the confirm button, defaults to 'Okay'\n * @param discardButtonText optional text for the discard button, defaults to 'Discard'\n */\nconst BasicModal: React.FC<BasicModalProps> = props => {\n const {\n isOpen,\n headerText,\n bodyText,\n onCancel,\n onConfirm,\n onDiscard,\n onModalDisable,\n cancelButtonText = 'Cancel',\n confirmButtonText = 'Okay',\n discardButtonText = 'Discard',\n children,\n 'data-testid': dataTestId,\n } = props;\n\n const confirmButton = useRef<HTMLButtonElement>(null);\n\n const disableModalCheckbox = useRef<HTMLInputElement>(null);\n\n const onConfirmClicked = useCallback(() => {\n if (disableModalCheckbox.current?.checked && onModalDisable) {\n onModalDisable();\n }\n onConfirm();\n }, [onConfirm, onModalDisable]);\n\n let modalBody = '';\n if (isOpen) {\n modalBody = typeof bodyText === 'function' ? bodyText() : bodyText;\n }\n\n return (\n <Modal\n isOpen={isOpen}\n className=\"theme-bg-light\"\n onOpened={() => {\n confirmButton.current?.focus();\n }}\n >\n <ModalHeader closeButton={false}>{headerText}</ModalHeader>\n <ModalBody>{modalBody}</ModalBody>\n <ModalFooter>\n {onModalDisable && (\n <div className=\"custom-control custom-checkbox form-group mr-auto\">\n <input\n type=\"checkbox\"\n className=\"custom-control-input\"\n id=\"move-confirmation-checkbox\"\n defaultChecked={false}\n ref={disableModalCheckbox}\n data-testid={\n dataTestId ? `${dataTestId}-checkbox-confirm` : undefined\n }\n />\n <label\n className=\"custom-control-label\"\n htmlFor=\"move-confirmation-checkbox\"\n >\n Don't ask me again\n </label>\n </div>\n )}\n {onDiscard && (\n <button\n type=\"button\"\n className=\"btn btn-outline-primary mr-auto\"\n data-dismiss=\"modal\"\n onClick={onDiscard}\n data-testid={dataTestId ? `${dataTestId}-btn-discard` : undefined}\n >\n {discardButtonText}\n </button>\n )}\n {onCancel && (\n <button\n type=\"button\"\n className=\"btn btn-outline-primary\"\n data-dismiss=\"modal\"\n onClick={onCancel}\n data-testid={dataTestId ? `${dataTestId}-btn-cancel` : undefined}\n >\n {cancelButtonText}\n </button>\n )}\n <ButtonGroup>\n <Button\n kind=\"primary\"\n onClick={onConfirmClicked}\n ref={confirmButton}\n data-testid={dataTestId ? `${dataTestId}-btn-confirm` : undefined}\n >\n {confirmButtonText}\n </Button>\n {children}\n </ButtonGroup>\n </ModalFooter>\n </Modal>\n );\n};\n\nBasicModal.propTypes = {\n isOpen: PropTypes.bool.isRequired,\n headerText: PropTypes.string.isRequired,\n bodyText: PropTypes.oneOfType([PropTypes.string, PropTypes.func]).isRequired,\n onCancel: PropTypes.func,\n onConfirm: PropTypes.func.isRequired,\n onDiscard: PropTypes.func,\n onModalDisable: PropTypes.func,\n cancelButtonText: PropTypes.string,\n confirmButtonText: PropTypes.string,\n discardButtonText: PropTypes.string,\n children: PropTypes.node,\n 'data-testid': PropTypes.string,\n};\n\nBasicModal.defaultProps = {\n children: undefined,\n cancelButtonText: 'Cancel',\n confirmButtonText: 'Okay',\n discardButtonText: 'Discard',\n onCancel: undefined,\n onDiscard: undefined,\n onModalDisable: undefined,\n 'data-testid': undefined,\n};\n\nexport default BasicModal;\n"],"mappings":"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"}
|
package/dist/Button.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"Button.js","names":["React","PropTypes","classNames","FontAwesomeIcon","Tooltip","BUTTON_KINDS","VARIANT_KINDS","getClassName","kind","iconOnly","getVariantClasses","Button","forwardRef","props","ref","variant","type","tooltip","icon","disabled","active","onClick","className","style","children","dataTestId","btnClassName","variantClassName","iconElem","isValidElement","tooltipElem","button","displayName","propTypes","oneOf","isRequired","Error","iconName","bool","undefined","node","string","object","defaultProps"],"sources":["../src/Button.tsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { IconDefinition } from '@fortawesome/fontawesome-svg-core';\nimport { Tooltip } from './popper';\n\nconst BUTTON_KINDS = [\n 'primary',\n 'secondary',\n 'tertiary',\n 'success',\n 'danger',\n 'inline',\n 'ghost',\n] as const;\ntype ButtonTuple = typeof BUTTON_KINDS;\ntype ButtonKind = ButtonTuple[number];\n\nconst VARIANT_KINDS = ['group-end'] as const;\ntype VariantTuple = typeof VARIANT_KINDS;\ntype VariantKind = VariantTuple[number];\n\ntype ButtonTypes = 'submit' | 'reset' | 'button';\n\ninterface BaseButtonProps extends React.ComponentPropsWithRef<'button'> {\n kind: ButtonKind;\n type?: ButtonTypes;\n variant?: VariantKind;\n tooltip?: string | JSX.Element;\n icon?: IconDefinition | JSX.Element;\n active?: boolean;\n 'data-testid'?: string;\n}\n\ntype ButtonWithChildren = BaseButtonProps & {\n children: React.ReactNode;\n};\n\ntype IconOnlyButton = BaseButtonProps & {\n tooltip: string | JSX.Element;\n icon: IconDefinition | JSX.Element;\n children?: undefined;\n};\n\ntype ButtonProps = IconOnlyButton | ButtonWithChildren;\n\nfunction getClassName(kind: ButtonKind, iconOnly: boolean): string {\n switch (kind) {\n case 'primary':\n return 'btn-primary';\n case 'secondary':\n return 'btn-outline-primary';\n case 'tertiary':\n return 'btn-secondary';\n case 'success':\n return 'btn-success';\n case 'danger':\n return 'btn-danger';\n case 'inline':\n return 'btn-inline';\n case 'ghost':\n return classNames('btn-link', {\n 'btn-link-icon': iconOnly,\n 'px-2': iconOnly,\n });\n }\n}\n\nfunction getVariantClasses(kind: VariantKind): string {\n switch (kind) {\n case 'group-end':\n return classNames('pl-2', 'pr-3');\n }\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (props: ButtonProps, ref) => {\n const {\n kind,\n variant,\n type,\n tooltip,\n icon,\n disabled,\n active,\n onClick,\n className,\n style,\n children,\n 'data-testid': dataTestId,\n } = props;\n\n const iconOnly = (icon && !children) as boolean;\n const btnClassName = getClassName(kind, iconOnly);\n\n let variantClassName;\n if (variant) {\n variantClassName = getVariantClasses(variant);\n }\n\n let iconElem: JSX.Element | undefined;\n if (icon) {\n iconElem = React.isValidElement(icon) ? (\n icon\n ) : (\n <FontAwesomeIcon icon={icon as IconDefinition} />\n );\n }\n\n let tooltipElem: JSX.Element | undefined;\n if (tooltip) {\n tooltipElem =\n typeof tooltip === 'string' ? <Tooltip>{tooltip}</Tooltip> : tooltip;\n }\n\n const button = (\n <button\n data-testid={dataTestId}\n ref={ref}\n // eslint-disable-next-line react/button-has-type\n type={type}\n className={classNames(\n 'btn',\n btnClassName,\n variantClassName,\n { active },\n className\n )}\n onClick={onClick}\n style={style}\n disabled={disabled}\n >\n {icon && iconElem}\n {children}\n {tooltip && !disabled && tooltipElem}\n </button>\n );\n\n // disabled buttons tooltips need a wrapped element to receive pointer events\n // https://jakearchibald.com/2017/events-and-disabled-form-fields/\n\n return disabled ? (\n <span className=\"btn-disabled-wrapper\">\n {button}\n {tooltip && tooltipElem}\n </span>\n ) : (\n button\n );\n }\n);\n\nButton.displayName = 'Button';\n\nButton.propTypes = {\n kind: PropTypes.oneOf(BUTTON_KINDS).isRequired,\n variant: PropTypes.oneOf(VARIANT_KINDS),\n type: PropTypes.oneOf<ButtonTypes>(['submit', 'reset', 'button']),\n tooltip(props) {\n const { tooltip, icon, children } = props;\n if (!tooltip && icon && !children) {\n return new Error('Tooltip is required for icon only buttons');\n }\n return null;\n },\n icon(props) {\n const { children, icon } = props;\n if (!icon && !children) {\n return new Error('Icon is required if no children are provided');\n }\n\n if (!children && !React.isValidElement(icon) && !icon?.iconName) {\n return new Error(\n 'Icon must be react element or fontawesome IconDefinition'\n );\n }\n\n return null;\n },\n disabled: PropTypes.bool,\n active: PropTypes.bool,\n onClick(props) {\n const { onClick, type } = props;\n if (type === 'button' && typeof onClick !== 'function') {\n return new Error('type button requires an onClick function');\n }\n if (onClick !== undefined && typeof onClick !== 'function') {\n return new Error('onClick must be a function');\n }\n return null;\n },\n children: PropTypes.node,\n className: PropTypes.string,\n style: PropTypes.object,\n 'data-testid': PropTypes.string,\n};\n\nButton.defaultProps = {\n type: 'button',\n onClick: undefined,\n variant: undefined,\n tooltip: undefined,\n icon: undefined,\n disabled: false,\n active: undefined,\n children: undefined,\n className: undefined,\n style: {},\n 'data-testid': undefined,\n};\n\nexport default Button;\n"],"mappings":"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"}
|
package/dist/ButtonGroup.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"ButtonGroup.js","names":["React","classNames","PropTypes","ButtonGroup","props","children","className","style","dataTestId","displayName","propTypes","node","isRequired","string","object","defaultProps","undefined"],"sources":["../src/ButtonGroup.tsx"],"sourcesContent":["import React from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\n\ninterface ButtonGroupProps {\n children?: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n 'data-testid'?: string;\n}\n\nconst ButtonGroup = (props: ButtonGroupProps): JSX.Element => {\n const { children, className, style, 'data-testid': dataTestId } = props;\n\n return (\n <div\n className={classNames('btn-group', className)}\n style={style}\n role=\"group\"\n data-testid={dataTestId}\n >\n {children}\n </div>\n );\n};\n\nButtonGroup.displayName = 'ButtonGroup';\n\nButtonGroup.propTypes = {\n children: PropTypes.node.isRequired,\n className: PropTypes.string,\n style: PropTypes.object,\n 'data-testid': PropTypes.string,\n};\n\nButtonGroup.defaultProps = {\n className: null,\n style: {},\n 'data-testid': undefined,\n};\n\nexport default ButtonGroup;\n"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,OAAOC,UAAP,MAAuB,YAAvB;AACA,OAAOC,SAAP,MAAsB,YAAtB;;AASA,IAAMC,WAAW,GAAIC,KAAD,IAA0C;EAC5D,IAAM;IAAEC,QAAF;IAAYC,SAAZ;IAAuBC,KAAvB;IAA8B,eAAeC;EAA7C,IAA4DJ,KAAlE;EAEA,oBACE;IACE,SAAS,EAAEH,UAAU,CAAC,WAAD,EAAcK,SAAd,CADvB;IAEE,KAAK,EAAEC,KAFT;IAGE,IAAI,EAAC,OAHP;IAIE,eAAaC;EAJf,GAMGH,QANH,CADF;AAUD,CAbD;;AAeAF,WAAW,CAACM,WAAZ,GAA0B,aAA1B;AAEAN,WAAW,CAACO,SAAZ,GAAwB;EACtBL,QAAQ,EAAEH,SAAS,CAACS,IAAV,CAAeC,UADH;EAEtBN,SAAS,EAAEJ,SAAS,CAACW,MAFC;EAGtBN,KAAK,EAAEL,SAAS,CAACY,MAHK;EAItB,eAAeZ,SAAS,CAACW;AAJH,CAAxB;AAOAV,WAAW,CAACY,YAAZ,GAA2B;EACzBT,SAAS,EAAE,IADc;EAEzBC,KAAK,EAAE,EAFkB;EAGzB,eAAeS;AAHU,CAA3B;AAMA,eAAeb,WAAf"}
|
package/dist/ButtonOld.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"ButtonOld.js","names":["React","classNames","PropTypes","Button","forwardRef","props","ref","children","className","disabled","onClick","style","id","displayName","propTypes","node","string","bool","func","shape","defaultProps"],"sources":["../src/ButtonOld.tsx"],"sourcesContent":["import React, { MouseEventHandler } from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\n\ninterface ButtonProps {\n children?: React.ReactNode;\n className?: string;\n disabled?: boolean;\n onClick?: MouseEventHandler<HTMLButtonElement>;\n style?: React.CSSProperties;\n id?: string;\n}\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (props: ButtonProps, ref) => {\n const { children, className, disabled, onClick, style, id } = props;\n return (\n <button\n ref={ref}\n type=\"button\"\n className={classNames('btn', className)}\n onClick={onClick}\n style={style}\n disabled={disabled}\n id={id}\n >\n {children}\n </button>\n );\n }\n);\n\nButton.displayName = 'Button';\n\nButton.propTypes = {\n children: PropTypes.node,\n className: PropTypes.string,\n disabled: PropTypes.bool,\n onClick: PropTypes.func,\n style: PropTypes.shape({}),\n id: PropTypes.string,\n};\n\nButton.defaultProps = {\n children: null,\n className: '',\n disabled: false,\n onClick: () => null,\n style: {},\n id: '',\n};\n\nexport default Button;\n"],"mappings":"AAAA,OAAOA,KAAP,MAAyC,OAAzC;AACA,OAAOC,UAAP,MAAuB,YAAvB;AACA,OAAOC,SAAP,MAAsB,YAAtB;AAUA,IAAMC,MAAM,gBAAGH,KAAK,CAACI,UAAN,CACb,CAACC,KAAD,EAAqBC,GAArB,KAA6B;EAC3B,IAAM;IAAEC,QAAF;IAAYC,SAAZ;IAAuBC,QAAvB;IAAiCC,OAAjC;IAA0CC,KAA1C;IAAiDC;EAAjD,IAAwDP,KAA9D;EACA,oBACE;IACE,GAAG,EAAEC,GADP;IAEE,IAAI,EAAC,QAFP;IAGE,SAAS,EAAEL,UAAU,CAAC,KAAD,EAAQO,SAAR,CAHvB;IAIE,OAAO,EAAEE,OAJX;IAKE,KAAK,EAAEC,KALT;IAME,QAAQ,EAAEF,QANZ;IAOE,EAAE,EAAEG;EAPN,GASGL,QATH,CADF;AAaD,CAhBY,CAAf;AAmBAJ,MAAM,CAACU,WAAP,GAAqB,QAArB;AAEAV,MAAM,CAACW,SAAP,GAAmB;EACjBP,QAAQ,EAAEL,SAAS,CAACa,IADH;EAEjBP,SAAS,EAAEN,SAAS,CAACc,MAFJ;EAGjBP,QAAQ,EAAEP,SAAS,CAACe,IAHH;EAIjBP,OAAO,EAAER,SAAS,CAACgB,IAJF;EAKjBP,KAAK,EAAET,SAAS,CAACiB,KAAV,CAAgB,EAAhB,CALU;EAMjBP,EAAE,EAAEV,SAAS,CAACc;AANG,CAAnB;AASAb,MAAM,CAACiB,YAAP,GAAsB;EACpBb,QAAQ,EAAE,IADU;EAEpBC,SAAS,EAAE,EAFS;EAGpBC,QAAQ,EAAE,KAHU;EAIpBC,OAAO,EAAE,MAAM,IAJK;EAKpBC,KAAK,EAAE,EALa;EAMpBC,EAAE,EAAE;AANgB,CAAtB;AASA,eAAeT,MAAf"}
|
package/dist/CardFlip.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"CardFlip.js","names":["React","useCallback","useEffect","useRef","classNames","CardFlip","className","isFlipped","children","dataTestId","getComponent","key","length","Error","front","transitionStart","event","target","currentTarget","document","body","classList","add","transitionEnd","remove","setIsFlippingClassOnTransitionStart","current","addEventListener","refObj","cleanupListener","removeEventListener"],"sources":["../src/CardFlip.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useRef } from 'react';\nimport classNames from 'classnames';\nimport './CardFlip.scss';\n\ntype CardFlipProps = {\n isFlipped: boolean;\n children: [React.ReactNode, React.ReactNode];\n className?: string;\n 'data-testid'?: string;\n};\n\n/**\n * Card flip component, switches between a front and back face being visible.\n * Has logic to handle overflow on body, caused by perspective transforms\n * and moves z-index to top during transition.\n * @param isFlipped true shows second child, false shows first child\n * @param children Expects exactly two children\n * @returns\n */\nconst CardFlip = ({\n className,\n isFlipped,\n children,\n 'data-testid': dataTestId,\n}: CardFlipProps): JSX.Element => {\n const getComponent = (key: 0 | 1) => {\n if (children.length !== 2) {\n throw new Error('CardFlip requires 2 children to function');\n }\n return children[key];\n };\n\n const front = useRef<HTMLDivElement>(null);\n\n const transitionStart = useCallback(event => {\n if (event.target === event.currentTarget) {\n document.body.classList.add('card-flip--is-flipping');\n }\n }, []);\n\n const transitionEnd = useCallback(event => {\n if (event.target === event.currentTarget) {\n document.body.classList.remove('card-flip--is-flipping');\n }\n }, []);\n\n useEffect(\n function setIsFlippingClassOnTransitionStart() {\n if (!front.current) throw Error('ref undefined');\n front.current.addEventListener('transitionstart', transitionStart);\n\n const refObj = front.current;\n return function cleanupListener() {\n if (refObj) {\n return refObj.removeEventListener('transitionstart', transitionStart);\n }\n };\n },\n [transitionStart]\n );\n\n return (\n <div\n className={classNames(className, {\n 'card-flip--show-front': isFlipped,\n 'card-flip--show-back': !isFlipped,\n })}\n data-testid={dataTestId}\n >\n <div className=\"card-flip--back\">{getComponent(0)}</div>\n <div\n ref={front}\n className=\"card-flip--front\"\n onTransitionEnd={transitionEnd}\n >\n {getComponent(1)}\n </div>\n </div>\n );\n};\n\nexport default CardFlip;\n"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,WAAhB,EAA6BC,SAA7B,EAAwCC,MAAxC,QAAsD,OAAtD;AACA,OAAOC,UAAP,MAAuB,YAAvB;;;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAMC,QAAQ,GAAG,QAKiB;EAAA,IALhB;IAChBC,SADgB;IAEhBC,SAFgB;IAGhBC,QAHgB;IAIhB,eAAeC;EAJC,CAKgB;;EAChC,IAAMC,YAAY,GAAIC,GAAD,IAAgB;IACnC,IAAIH,QAAQ,CAACI,MAAT,KAAoB,CAAxB,EAA2B;MACzB,MAAM,IAAIC,KAAJ,CAAU,0CAAV,CAAN;IACD;;IACD,OAAOL,QAAQ,CAACG,GAAD,CAAf;EACD,CALD;;EAOA,IAAMG,KAAK,GAAGX,MAAM,CAAiB,IAAjB,CAApB;EAEA,IAAMY,eAAe,GAAGd,WAAW,CAACe,KAAK,IAAI;IAC3C,IAAIA,KAAK,CAACC,MAAN,KAAiBD,KAAK,CAACE,aAA3B,EAA0C;MACxCC,QAAQ,CAACC,IAAT,CAAcC,SAAd,CAAwBC,GAAxB,CAA4B,wBAA5B;IACD;EACF,CAJkC,EAIhC,EAJgC,CAAnC;EAMA,IAAMC,aAAa,GAAGtB,WAAW,CAACe,KAAK,IAAI;IACzC,IAAIA,KAAK,CAACC,MAAN,KAAiBD,KAAK,CAACE,aAA3B,EAA0C;MACxCC,QAAQ,CAACC,IAAT,CAAcC,SAAd,CAAwBG,MAAxB,CAA+B,wBAA/B;IACD;EACF,CAJgC,EAI9B,EAJ8B,CAAjC;EAMAtB,SAAS,CACP,SAASuB,mCAAT,GAA+C;IAC7C,IAAI,CAACX,KAAK,CAACY,OAAX,EAAoB,MAAMb,KAAK,CAAC,eAAD,CAAX;IACpBC,KAAK,CAACY,OAAN,CAAcC,gBAAd,CAA+B,iBAA/B,EAAkDZ,eAAlD;IAEA,IAAMa,MAAM,GAAGd,KAAK,CAACY,OAArB;IACA,OAAO,SAASG,eAAT,GAA2B;MAChC,IAAID,MAAJ,EAAY;QACV,OAAOA,MAAM,CAACE,mBAAP,CAA2B,iBAA3B,EAA8Cf,eAA9C,CAAP;MACD;IACF,CAJD;EAKD,CAXM,EAYP,CAACA,eAAD,CAZO,CAAT;EAeA,oBACE;IACE,SAAS,EAAEX,UAAU,CAACE,SAAD,EAAY;MAC/B,yBAAyBC,SADM;MAE/B,wBAAwB,CAACA;IAFM,CAAZ,CADvB;IAKE,eAAaE;EALf,gBAOE;IAAK,SAAS,EAAC;EAAf,GAAkCC,YAAY,CAAC,CAAD,CAA9C,CAPF,eAQE;IACE,GAAG,EAAEI,KADP;IAEE,SAAS,EAAC,kBAFZ;IAGE,eAAe,EAAES;EAHnB,GAKGb,YAAY,CAAC,CAAD,CALf,CARF,CADF;AAkBD,CA5DD;;AA8DA,eAAeL,QAAf"}
|
package/dist/Checkbox.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"Checkbox.js","names":["React","useState","useEffect","useCallback","classNames","PropTypes","shortid","useForwardedRef","Checkbox","forwardRef","props","forwardedRef","checked","children","className","disabled","inputClassName","isInvalid","labelClassName","name","onChange","dataTestId","id","ref","setIndeterminateProperty","current","indeterminate","handleOnChange","event","displayName","propTypes","propName","checkedType","Error","node","isRequired","string","bool","func","defaultProps","undefined"],"sources":["../src/Checkbox.tsx"],"sourcesContent":["import React, { useState, useEffect, useCallback } from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport shortid from 'shortid';\nimport { useForwardedRef } from '@deephaven/react-hooks';\n\ninterface CheckboxProps {\n checked: boolean | null;\n className?: string;\n disabled?: boolean;\n inputClassName?: string;\n isInvalid?: boolean;\n labelClassName?: string;\n name?: string;\n onChange?: React.ChangeEventHandler<HTMLInputElement>;\n children?: React.ReactNode;\n 'data-testid'?: string;\n}\n\n/**\n * A simple checkbox component. Automatically generates an id so htmlFor/id attributes are unique.\n */\nconst Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(\n (props, forwardedRef) => {\n const {\n checked = false,\n children,\n className,\n disabled,\n inputClassName,\n isInvalid,\n labelClassName,\n name,\n onChange,\n 'data-testid': dataTestId,\n } = props;\n\n const [id] = useState(shortid());\n\n const ref = useForwardedRef<HTMLInputElement>(forwardedRef);\n\n useEffect(\n function setIndeterminateProperty() {\n if (ref.current) {\n // indeterminate is not actually an html attr, can only be set via JS\n ref.current.indeterminate = checked === null;\n }\n },\n [ref, checked]\n );\n\n const handleOnChange: React.ChangeEventHandler<HTMLInputElement> = useCallback(\n event => {\n if (ref.current) {\n // ref.current can be null in tests, doesn't impact behaviour\n ref.current.indeterminate = checked === null;\n }\n\n if (onChange) {\n onChange(event);\n }\n },\n [ref, checked, onChange]\n );\n\n return (\n <div className={classNames('custom-control custom-checkbox', className)}>\n <input\n type=\"checkbox\"\n ref={ref}\n checked={checked ?? false} // checked attr must always have a value to remain as a controlled component\n className={classNames('custom-control-input', inputClassName, {\n 'is-invalid': isInvalid,\n })}\n disabled={disabled}\n id={id}\n name={name}\n onChange={handleOnChange}\n data-testid={dataTestId}\n />\n <label\n className={classNames('custom-control-label', labelClassName)}\n htmlFor={id}\n >\n {children}\n </label>\n </div>\n );\n }\n);\n\n// Forward ref causes a false positive for display-name in eslint:\n// https://github.com/yannickcr/eslint-plugin-react/issues/2269\nCheckbox.displayName = 'Checkbox';\n\nCheckbox.propTypes = {\n /** Current value of the checkbox. */\n checked: (props, propName) => {\n const { [propName]: checkedType } = props;\n if (checkedType !== null && typeof checkedType !== 'boolean') {\n return new Error('Checked must be a boolean or null for indeterminate');\n }\n return null;\n },\n\n /** The node/text to put in the label of this checkbox */\n children: PropTypes.node.isRequired,\n\n /** An extra class name to add to the outer div component */\n className: PropTypes.string,\n\n /** An extra class for disabling the checkbox component */\n disabled: PropTypes.bool,\n\n /** An extra class name for the input component */\n inputClassName: PropTypes.string,\n\n /** Convenience for styling appropriately for an invalid value */\n isInvalid: PropTypes.bool,\n\n /** An extra class name for the label component */\n labelClassName: PropTypes.string,\n\n /** Checkbox input name attribute */\n name: PropTypes.string,\n\n /** Triggered when the input is checked/unchecked */\n onChange: PropTypes.func,\n\n 'data-testid': PropTypes.string,\n};\n\nCheckbox.defaultProps = {\n checked: false,\n className: '',\n disabled: false,\n inputClassName: '',\n isInvalid: false,\n labelClassName: '',\n name: undefined,\n onChange: undefined,\n 'data-testid': undefined,\n};\n\nexport default Checkbox;\n"],"mappings":"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"}
|
package/dist/Collapse.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"Collapse.js","names":["React","Component","classNames","PropTypes","CSSTransition","Collapse","handleEnter","elemParam","elem","style","height","handleEntering","getHeight","handleExiting","handleExit","scrollBarWidth","scrollWidth","clientWidth","scrollHeight","constructor","props","handleEntered","bind","autoFocusOnShow","input","querySelector","focus","render","children","className","in","inTransition","dataTestId","enterActive","enterDone","exitActive","exitDone","state","collapse","string","bool","isRequired","node","undefined"],"sources":["../src/Collapse.tsx"],"sourcesContent":["// Port of https://github.com/react-bootstrap/react-bootstrap/blob/master/src/Collapse.js\nimport React, { Component } from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { CSSTransition } from 'react-transition-group';\n\ninterface CollapseProps {\n className?: string;\n in: boolean;\n children: React.ReactNode;\n autoFocusOnShow?: boolean;\n 'data-testid'?: string;\n}\n\nclass Collapse extends Component<CollapseProps> {\n static propTypes = {\n className: PropTypes.string,\n in: PropTypes.bool.isRequired,\n children: PropTypes.node.isRequired,\n autoFocusOnShow: PropTypes.bool,\n 'data-testid': PropTypes.string,\n };\n\n static defaultProps = {\n className: '',\n autoFocusOnShow: false,\n 'data-testid': undefined,\n };\n\n static handleEnter(elemParam: HTMLElement): void {\n const elem = elemParam;\n elem.style.height = '0';\n }\n\n static handleEntering(elemParam: HTMLElement): void {\n const elem = elemParam;\n elem.style.height = `${Collapse.getHeight(elem)}px`;\n }\n\n static handleExiting(elemParam: HTMLElement): void {\n const elem = elemParam;\n elem.style.height = '0';\n }\n\n static handleExit(elemParam: HTMLElement): void {\n const elem = elemParam;\n elem.style.height = `${Collapse.getHeight(elem)}px`;\n }\n\n static getHeight(elem: HTMLElement): number {\n const scrollBarWidth = elem.scrollWidth - elem.clientWidth;\n return elem.scrollHeight - scrollBarWidth;\n }\n\n constructor(props: CollapseProps) {\n super(props);\n\n this.handleEntered = this.handleEntered.bind(this);\n }\n\n handleEntered(elemParam: HTMLElement): void {\n const elem = elemParam;\n elem.style.height = '';\n\n const { autoFocusOnShow } = this.props;\n if (autoFocusOnShow) {\n const input = elem.querySelector(\n 'input, select, textarea'\n ) as HTMLInputElement;\n\n if (input) {\n input.focus();\n }\n }\n }\n\n render(): JSX.Element {\n const {\n children,\n className,\n in: inTransition,\n 'data-testid': dataTestId,\n } = this.props;\n return (\n <CSSTransition\n in={inTransition}\n classNames={{\n enterActive: 'collapsing',\n enterDone: 'collapse show',\n exitActive: 'collapsing',\n exitDone: 'collapse',\n }}\n onEnter={Collapse.handleEnter}\n onEntering={Collapse.handleEntering}\n onEntered={this.handleEntered}\n onExit={Collapse.handleExit}\n onExiting={Collapse.handleExiting}\n timeout={350}\n >\n {state => (\n <div\n className={classNames({ collapse: state === 'exited' }, className)}\n data-testid={dataTestId}\n >\n {children}\n </div>\n )}\n </CSSTransition>\n );\n }\n}\n\nexport default Collapse;\n"],"mappings":"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"}
|
package/dist/ComboBox.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ComboBox.tsx"],"names":["React","Component","PropTypes","FontAwesomeIcon","vsTriangleDown","memoize","classNames","SearchInput","Popper","MENU_NAVIGATION_DIRECTION","ComboBox","constructor","props","options","input","filter","option","title","toLowerCase","indexOf","value","state","filteredOptions","keyboardOptionIndex","menuIsOpen","inputWidth","toggleMenu","bind","handleMenuKeyDown","handleMenuBlur","closeMenu","handleInputChange","handleInputKeyDown","handleInputBlur","handleFilterChange","handleOptionClick","handleOptionFocus","handleMenuOpened","handleMenuExited","popper","createRef","cbContainer","toggleButton","menuContainer","searchInput","componentDidUpdate","scrollOptionIntoView","setInputWidth","current","setState","getBoundingClientRect","width","focus","resetValue","updateInputValue","onChange","handleResize","event","menuOptions","key","stopPropagation","preventDefault","handleMenuNavigation","UP","DOWN","shiftKey","length","direction","menuOptionsLength","delta","onEnter","openMenu","target","optionIndex","Number","currentTarget","getCachedFilteredOptions","scheduleUpdate","relatedTarget","Element","element","contains","hide","updateKeyboardIndex","window","requestAnimationFrame","show","focusInput","valueIndex","findIndex","activeOption","querySelector","HTMLElement","scrollIntoView","block","inline","renderMenuElement","searchPlaceholder","renderOptions","map","index","render","inputPlaceholder","disabled","className","defaultValue","spellCheck","dataTestId","popperOptions","placement","modifiers","preventOverflow","enabled","undefined","arrayOf","shape","string","isRequired","func","bool"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAOA,KAAP,IAAgBC,SAAhB,QAAiC,OAAjC;AACA,OAAOC,SAAP,MAAsB,YAAtB;AACA,SAASC,eAAT,QAAgC,gCAAhC;AACA,SAASC,cAAT,QAA+B,kBAA/B;AACA,OAAOC,OAAP,MAAoB,UAApB;AACA,OAAOC,UAAP,MAAuB,YAAvB;OAEOC,W;SACEC,M;;IAgCJC,yB;;WAAAA,yB;AAAAA,EAAAA,yB;AAAAA,EAAAA,yB;GAAAA,yB,KAAAA,yB;;AAKL,MAAMC,QAAN,SAAuBT,SAAvB,CAA+D;AA4C7DU,EAAAA,WAAW,CAACC,KAAD,EAAuB;AAChC,UAAMA,KAAN;;AADgC;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA,sDA8DPP,OAAO,CAChC,CAACQ,OAAD,EAA4BC,KAA5B,KACED,OAAO,CAACE,MAAR,CACEC,MAAM,IACJA,MAAM,CAACC,KAAP,CAAaC,WAAb,GAA2BC,OAA3B,CAAmCL,KAAK,CAACI,WAAN,EAAnC,KAA2D,CAA3D,IACAF,MAAM,CAACI,KAAP,CAAaF,WAAb,GAA2BC,OAA3B,CAAmCL,KAAK,CAACI,WAAN,EAAnC,KAA2D,CAH/D,CAF8B,CA9DA;;AAEhC,SAAKG,KAAL,GAAa;AACXD,MAAAA,KAAK,EAAE,EADI;AAEXL,MAAAA,MAAM,EAAE,EAFG;AAGXO,MAAAA,eAAe,EAAEV,KAAK,CAACC,OAHZ;AAIXU,MAAAA,mBAAmB,EAAE,CAAC,CAJX;AAKXC,MAAAA,UAAU,EAAE,KALD;AAMXC,MAAAA,UAAU,EAAE;AAND,KAAb;AASA,SAAKC,UAAL,GAAkB,KAAKA,UAAL,CAAgBC,IAAhB,CAAqB,IAArB,CAAlB;AACA,SAAKC,iBAAL,GAAyB,KAAKA,iBAAL,CAAuBD,IAAvB,CAA4B,IAA5B,CAAzB;AACA,SAAKE,cAAL,GAAsB,KAAKA,cAAL,CAAoBF,IAApB,CAAyB,IAAzB,CAAtB;AACA,SAAKG,SAAL,GAAiB,KAAKA,SAAL,CAAeH,IAAf,CAAoB,IAApB,CAAjB;AAEA,SAAKI,iBAAL,GAAyB,KAAKA,iBAAL,CAAuBJ,IAAvB,CAA4B,IAA5B,CAAzB;AACA,SAAKK,kBAAL,GAA0B,KAAKA,kBAAL,CAAwBL,IAAxB,CAA6B,IAA7B,CAA1B;AACA,SAAKM,eAAL,GAAuB,KAAKA,eAAL,CAAqBN,IAArB,CAA0B,IAA1B,CAAvB;AACA,SAAKO,kBAAL,GAA0B,KAAKA,kBAAL,CAAwBP,IAAxB,CAA6B,IAA7B,CAA1B;AAEA,SAAKQ,iBAAL,GAAyB,KAAKA,iBAAL,CAAuBR,IAAvB,CAA4B,IAA5B,CAAzB;AACA,SAAKS,iBAAL,GAAyB,KAAKA,iBAAL,CAAuBT,IAAvB,CAA4B,IAA5B,CAAzB;AAEA,SAAKU,gBAAL,GAAwB,KAAKA,gBAAL,CAAsBV,IAAtB,CAA2B,IAA3B,CAAxB;AACA,SAAKW,gBAAL,GAAwB,KAAKA,gBAAL,CAAsBX,IAAtB,CAA2B,IAA3B,CAAxB;AAEA,SAAKY,MAAL,gBAAcvC,KAAK,CAACwC,SAAN,EAAd;AACA,SAAKC,WAAL,gBAAmBzC,KAAK,CAACwC,SAAN,EAAnB;AACA,SAAKE,YAAL,gBAAoB1C,KAAK,CAACwC,SAAN,EAApB;AACA,SAAKG,aAAL,gBAAqB3C,KAAK,CAACwC,SAAN,EAArB;AACA,SAAK1B,KAAL,gBAAad,KAAK,CAACwC,SAAN,EAAb;AACA,SAAKI,WAAL,gBAAmB5C,KAAK,CAACwC,SAAN,EAAnB;AACD;;AAEDK,EAAAA,kBAAkB,GAAS;AACzB,QAAM;AAAErB,MAAAA,UAAF;AAAcD,MAAAA;AAAd,QAAsC,KAAKF,KAAjD;;AACA,QAAIG,UAAU,IAAID,mBAAmB,IAAI,CAAzC,EAA4C;AAC1C,WAAKuB,oBAAL;AACD;AACF;;AAcDC,EAAAA,aAAa,GAAS;AACpB,QAAI,KAAKN,WAAL,CAAiBO,OAArB,EAA8B;AAC5B,WAAKC,QAAL,CAAc;AACZxB,QAAAA,UAAU,EAAE,KAAKgB,WAAL,CAAiBO,OAAjB,CAAyBE,qBAAzB,GAAiDC;AADjD,OAAd;AAGD;AACF;;AAWDC,EAAAA,KAAK,GAAS;AAAA;;AACZ,gCAAKtC,KAAL,CAAWkC,OAAX,4EAAoBI,KAApB;AACD;;AAEDC,EAAAA,UAAU,GAAS;AACjB,SAAKJ,QAAL,CAAc;AAAE7B,MAAAA,KAAK,EAAE;AAAT,KAAd;AACD;;AAEDkC,EAAAA,gBAAgB,CAAClC,KAAD,EAAsB;AACpC,QAAM;AAAEmC,MAAAA;AAAF,QAAe,KAAK3C,KAA1B;AACA,SAAKqC,QAAL,CAAc;AAAE7B,MAAAA;AAAF,KAAd;AACAmC,IAAAA,QAAQ,CAACnC,KAAD,CAAR;AACD;;AAEDoC,EAAAA,YAAY,GAAS;AACnB,SAAKT,aAAL;AACD;;AAEDnB,EAAAA,iBAAiB,CAAC6B,KAAD,EAAmC;AAAA;;AAClD,QAAM;AAAE1C,MAAAA,MAAF;AAAUO,MAAAA,eAAV;AAA2BC,MAAAA;AAA3B,QAAmD,KAAKF,KAA9D;AACA,QAAM;AAAER,MAAAA;AAAF,QAAc,KAAKD,KAAzB;AACA,QAAM8C,WAAW,GAAG3C,MAAM,GAAGO,eAAH,GAAqBT,OAA/C;;AAEA,YAAQ4C,KAAK,CAACE,GAAd;AACE,WAAK,OAAL;AACE,YAAI,0BAAAD,WAAW,CAACnC,mBAAD,CAAX,gFAAkCH,KAAlC,KAA2C,IAA/C,EAAqD;AACnD,eAAKkC,gBAAL,CAAsBI,WAAW,CAACnC,mBAAD,CAAX,CAAiCH,KAAvD;AACD;;AACD,aAAKU,SAAL;AACA,qCAAKhB,KAAL,CAAWkC,OAAX,8EAAoBI,KAApB;AACAK,QAAAA,KAAK,CAACG,eAAN;AACAH,QAAAA,KAAK,CAACI,cAAN;AACA;;AACF,WAAK,SAAL;AACE,aAAKC,oBAAL,CAA0BpD,QAAQ,CAACD,yBAAT,CAAmCsD,EAA7D;AACAN,QAAAA,KAAK,CAACG,eAAN;AACAH,QAAAA,KAAK,CAACI,cAAN;AACA;;AACF,WAAK,WAAL;AACE,aAAKC,oBAAL,CAA0BpD,QAAQ,CAACD,yBAAT,CAAmCuD,IAA7D;AACAP,QAAAA,KAAK,CAACG,eAAN;AACAH,QAAAA,KAAK,CAACI,cAAN;AACA;;AACF,WAAK,QAAL;AACE,YAAI9C,MAAM,KAAK,EAAf,EAAmB;AACjB,eAAKkC,QAAL,CAAc;AAAElC,YAAAA,MAAM,EAAE;AAAV,WAAd;AACA0C,UAAAA,KAAK,CAACG,eAAN,GAFiB,CAEQ;AAC1B,SAHD,MAGO;AACL,eAAK9B,SAAL;AACD;;AACD;;AACF,WAAK,KAAL;AACE,YAAI,CAAC2B,KAAK,CAACQ,QAAP,IAAmB1C,mBAAmB,KAAKmC,WAAW,CAACQ,MAAZ,GAAqB,CAApE,EAAuE;AACrE,eAAKpC,SAAL;AACD;;AACD;;AACF;AACE;AAlCJ;AAoCD;;AAEDgC,EAAAA,oBAAoB,CAACK,SAAD,EAA6C;AAC/D,QAAM;AAAEpD,MAAAA,MAAF;AAAUO,MAAAA,eAAV;AAA2BC,MAAAA;AAA3B,QAAmD,KAAKF,KAA9D;AACA,QAAM;AAAER,MAAAA;AAAF,QAAc,KAAKD,KAAzB;AACA,QAAM8C,WAAW,GAAG3C,MAAM,GAAGO,eAAH,GAAqBT,OAA/C;AACA,QAAMuD,iBAAiB,GAAGV,WAAW,CAACQ,MAAtC;AACA,QAAIG,KAAK,GAAG,CAAZ;;AACA,YAAQF,SAAR;AACE,WAAKzD,QAAQ,CAACD,yBAAT,CAAmCsD,EAAxC;AACEM,QAAAA,KAAK,GAAG,CAAC,CAAT;AACA;;AACF,WAAK3D,QAAQ,CAACD,yBAAT,CAAmCuD,IAAxC;AACEK,QAAAA,KAAK,GAAG,CAAR;AACA;AANJ;;AASA,QAAIA,KAAK,KAAK,CAAd,EAAiB;AACf,WAAKpB,QAAL,CAAc;AACZ1B,QAAAA,mBAAmB,EACjB,CAACA,mBAAmB,GAAG8C,KAAtB,GAA8BD,iBAA/B,IAAoDA;AAF1C,OAAd;AAID;AACF;;AAEDpC,EAAAA,kBAAkB,CAACyB,KAAD,EAAmC;AACnD,QAAM;AAAEa,MAAAA;AAAF,QAAc,KAAK1D,KAAzB;AACA,QAAM;AAAEY,MAAAA;AAAF,QAAiB,KAAKH,KAA5B;;AACA,QAAIoC,KAAK,CAACE,GAAN,KAAc,WAAd,IAA6BF,KAAK,CAACE,GAAN,KAAc,SAA/C,EAA0D;AACxD,UAAI,CAACnC,UAAL,EAAiB;AACf,aAAK+C,QAAL;AACD;AACF,KAJD,MAIO,IAAId,KAAK,CAACE,GAAN,KAAc,OAAlB,EAA2B;AAChCW,MAAAA,OAAO;AACR;AACF;;AAEDvC,EAAAA,iBAAiB,CAAC0B,KAAD,EAAmD;AAClE,SAAKH,gBAAL,CAAsBG,KAAK,CAACe,MAAN,CAAapD,KAAnC;AACD;;AAEDe,EAAAA,iBAAiB,CAACsB,KAAD,EAAmD;AAAA;;AAClE,QAAMgB,WAAW,GAAGC,MAAM,CAACjB,KAAK,CAACkB,aAAN,CAAoBvD,KAArB,CAA1B;AACA,QAAM;AAAEL,MAAAA,MAAF;AAAUO,MAAAA;AAAV,QAA8B,KAAKD,KAAzC;AACA,QAAM;AAAER,MAAAA;AAAF,QAAc,KAAKD,KAAzB;AACA,QAAM8C,WAAW,GAAG3C,MAAM,GAAGO,eAAH,GAAqBT,OAA/C;AAEA,SAAKyC,gBAAL,CAAsBI,WAAW,CAACe,WAAD,CAAX,CAAyBrD,KAA/C;AACA,SAAKU,SAAL;AACA,iCAAKhB,KAAL,CAAWkC,OAAX,8EAAoBI,KAApB;AACD;;AAEDhB,EAAAA,iBAAiB,CAACqB,KAAD,EAAmD;AAClE,SAAKR,QAAL,CAAc;AAAE1B,MAAAA,mBAAmB,EAAEmD,MAAM,CAACjB,KAAK,CAACe,MAAN,CAAapD,KAAd;AAA7B,KAAd;AACD;;AAEDc,EAAAA,kBAAkB,CAACuB,KAAD,EAAmD;AAAA;;AACnE,QAAM;AAAE5C,MAAAA;AAAF,QAAc,KAAKD,KAAzB;AACA,QAAMG,MAAM,GAAG0C,KAAK,CAACe,MAAN,CAAapD,KAA5B;AACA,QAAME,eAAe,GAAG,KAAKsD,wBAAL,CAA8B/D,OAA9B,EAAuCE,MAAvC,CAAxB;AAEA,SAAKkC,QAAL,CAAc;AACZlC,MAAAA,MADY;AAEZO,MAAAA,eAFY;AAGZC,MAAAA,mBAAmB,EAAE;AAHT,KAAd;AAKA,iCAAKgB,MAAL,CAAYS,OAAZ,8EAAqB6B,cAArB;AACD;;AAEDhD,EAAAA,cAAc,CAAC4B,KAAD,EAAgC;AAAA;;AAC5C;AACA,QACGA,KAAK,CAACqB,aAAN,YAA+BC,OAA/B,6BACC,KAAKxC,MAAL,CAAYS,OADb,kDACC,sBAAqBgC,OAArB,CAA6BC,QAA7B,CAAsCxB,KAAK,CAACqB,aAA5C,CADF,IAEArB,KAAK,CAACqB,aAAN,KAAwB,KAAKpC,YAAL,CAAkBM,OAH5C,EAIE;AACA;AACD;;AACD,SAAKlB,SAAL,CAAe,KAAf;AACD;;AAEDG,EAAAA,eAAe,CAACwB,KAAD,EAAkD;AAAA;;AAC/D;AACA,QAAM;AAAEjC,MAAAA;AAAF,QAAiB,KAAKH,KAA5B;;AACA,QACEG,UAAU,IACViC,KAAK,CAACqB,aAAN,YAA+BC,OAD/B,6BAEA,KAAKxC,MAAL,CAAYS,OAFZ,kDAEA,sBAAqBgC,OAArB,CAA6BC,QAA7B,CAAsCxB,KAAK,CAACqB,aAA5C,CAHF,EAIE;AACA;AACD;;AACD,SAAKhD,SAAL,CAAe,KAAf;AACD;;AAEDO,EAAAA,gBAAgB,GAAS;AAAA;;AACvB,SAAKS,oBAAL;AACA,kCAAKF,WAAL,CAAiBI,OAAjB,gFAA0BI,KAA1B;AACD;;AAEDd,EAAAA,gBAAgB,GAAS;AACvB,QAAM;AAAEd,MAAAA;AAAF,QAAiB,KAAKH,KAA5B;;AACA,QAAIG,UAAJ,EAAgB;AAAA;;AACd,WAAKyB,QAAL,CAAc;AAAEzB,QAAAA,UAAU,EAAE;AAAd,OAAd;AACA,oCAAKe,MAAL,CAAYS,OAAZ,gFAAqBkC,IAArB;AACD;;AACD,SAAKjC,QAAL,CAAc;AAAElC,MAAAA,MAAM,EAAE;AAAV,KAAd;AACD;;AAEDW,EAAAA,UAAU,CAAC+B,KAAD,EAAmD;AAC3D,QAAM;AAAEjC,MAAAA;AAAF,QAAiB,KAAKH,KAA5B;;AACA,QAAIG,UAAJ,EAAgB;AACd,WAAKM,SAAL;AACD,KAFD,MAEO;AACL,WAAKyC,QAAL;AACD;;AACDd,IAAAA,KAAK,CAACG,eAAN;AACD;;AAEDW,EAAAA,QAAQ,GAAS;AACf,SAAKY,mBAAL;AACA,SAAKpC,aAAL;AACA,SAAKE,QAAL,CAAc;AAAEzB,MAAAA,UAAU,EAAE;AAAd,KAAd;AAEA4D,IAAAA,MAAM,CAACC,qBAAP,CAA6B,MAAM;AAAA;;AACjC,oCAAK9C,MAAL,CAAYS,OAAZ,gFAAqBsC,IAArB;AACD,KAFD;AAGD;;AAEDxD,EAAAA,SAAS,GAA0B;AAAA;;AAAA,QAAzByD,UAAyB,uEAAZ,IAAY;AACjC,SAAKtC,QAAL,CAAc;AAAEzB,MAAAA,UAAU,EAAE;AAAd,KAAd;;AACA,QAAI+D,UAAJ,EAAgB;AAAA;;AACd,mCAAKzE,KAAL,CAAWkC,OAAX,8EAAoBI,KAApB;AACD;;AACD,kCAAKb,MAAL,CAAYS,OAAZ,gFAAqBkC,IAArB;AACD;;AAEDC,EAAAA,mBAAmB,GAAS;AAC1B,QAAM;AAAE/D,MAAAA,KAAF;AAASL,MAAAA,MAAT;AAAiBO,MAAAA;AAAjB,QAAqC,KAAKD,KAAhD;AACA,QAAM;AAAER,MAAAA;AAAF,QAAc,KAAKD,KAAzB;AACA,QAAM8C,WAAW,GAAG3C,MAAM,GAAGO,eAAH,GAAqBT,OAA/C;AACA,QAAM2E,UAAU,GAAG9B,WAAW,CAAC+B,SAAZ,CAAsBzE,MAAM,IAAIA,MAAM,CAACI,KAAP,KAAiBA,KAAjD,CAAnB;AACA,SAAK6B,QAAL,CAAc;AAAE1B,MAAAA,mBAAmB,EAAEiE;AAAvB,KAAd;AACD;;AAED1C,EAAAA,oBAAoB,GAAS;AAAA;;AAC3B,QAAM4C,YAAY,4BAAG,KAAK/C,aAAL,CAAmBK,OAAtB,0DAAG,sBAA4B2C,aAA5B,CACnB,gCADmB,CAArB;;AAGA,QAAID,YAAY,YAAYE,WAA5B,EAAyC;AACvCF,MAAAA,YAAY,CAACG,cAAb,CAA4B;AAC1BC,QAAAA,KAAK,EAAE,SADmB;AAE1BC,QAAAA,MAAM,EAAE;AAFkB,OAA5B;AAID;AACF;;AAEDC,EAAAA,iBAAiB,GAAgB;AAC/B,QAAM;AAAEC,MAAAA;AAAF,QAAwB,KAAKrF,KAAnC;AACA,QAAM;AAAEG,MAAAA,MAAF;AAAUU,MAAAA;AAAV,QAAyB,KAAKJ,KAApC;AACA,wBACE;AACE,MAAA,SAAS,EAAC,mBADZ;AAEE,MAAA,GAAG,EAAE,KAAKsB,aAFZ;AAGE,MAAA,IAAI,EAAC,cAHP;AAIE,MAAA,SAAS,EAAE,KAAKf,iBAJlB;AAKE,MAAA,OAAO,EAAE6B,KAAK,IAAI;AAChBA,QAAAA,KAAK,CAACG,eAAN;AACD,OAPH;AAQE,MAAA,KAAK,EAAE;AAAET,QAAAA,KAAK,EAAE1B;AAAT,OART;AASE,MAAA,MAAM,EAAE,KAAKI;AATf,oBAWE;AAAK,MAAA,SAAS,EAAC;AAAf,oBACE,oBAAC,WAAD;AACE,MAAA,KAAK,EAAEd,MADT;AAEE,MAAA,GAAG,EAAE,KAAK6B,WAFZ;AAGE,MAAA,QAAQ,EAAE,KAAKV,kBAHjB;AAIE,MAAA,SAAS,EAAC,iBAJZ;AAKE,MAAA,WAAW,EAAE+D;AALf,MADF,CAXF,eAoBE;AAAK,MAAA,SAAS,EAAC;AAAf,oBACE;AAAK,MAAA,SAAS,EAAC;AAAf,OAA6B,KAAKC,aAAL,EAA7B,CADF,CApBF,CADF;AA0BD;;AAEDA,EAAAA,aAAa,GAAoB;AAC/B,QAAM;AAAErF,MAAAA;AAAF,QAAc,KAAKD,KAAzB;AACA,QAAM;AAAEW,MAAAA,mBAAF;AAAuBR,MAAAA,MAAvB;AAA+BO,MAAAA;AAA/B,QAAmD,KAAKD,KAA9D;AACA,QAAMqC,WAAW,GAAG3C,MAAM,GAAGO,eAAH,GAAqBT,OAA/C;AAEA,WAAO6C,WAAW,CAACyC,GAAZ,CAAgB,CAACnF,MAAD,EAASoF,KAAT,KAAmB;AACxC,UAAMzC,GAAG,oBAAayC,KAAb,cAAsBpF,MAAM,CAACI,KAA7B,CAAT;AACA,0BACE;AACE,QAAA,GAAG,EAAEuC,GADP;AAEE,QAAA,IAAI,EAAC,QAFP;AAGE,QAAA,KAAK,EAAEyC,KAHT;AAIE,QAAA,SAAS,EAAE9F,UAAU,CAAC,eAAD,EAAkB;AACrC,6BAAmBiB,mBAAmB,KAAK6E;AADN,SAAlB,CAJvB;AAOE,QAAA,OAAO,EAAE,KAAKjE,iBAPhB;AAQE,QAAA,OAAO,EAAE,KAAKC;AARhB,SAUGpB,MAAM,CAACC,KAVV,CADF;AAcD,KAhBM,CAAP;AAiBD;;AAEDoF,EAAAA,MAAM,GAAgB;AACpB,QAAM;AACJxF,MAAAA,OADI;AAEJyF,MAAAA,gBAFI;AAGJC,MAAAA,QAHI;AAIJC,MAAAA,SAJI;AAKJC,MAAAA,YALI;AAMJC,MAAAA,UANI;AAOJ,qBAAeC;AAPX,QAQF,KAAK/F,KART;AASA,QAAM;AAAEQ,MAAAA;AAAF,QAAY,KAAKC,KAAvB;AACA,QAAI;AAAEuF,MAAAA;AAAF,QAAoB,KAAKhG,KAA7B;AACAgG,IAAAA,aAAa;AACXC,MAAAA,SAAS,EAAE,YADA;AAEXC,MAAAA,SAAS,EAAE;AACTC,QAAAA,eAAe,EAAE;AAAEC,UAAAA,OAAO,EAAE;AAAX;AADR;AAFA,OAKRJ,aALQ,CAAb;AAQA,wBACE;AAAK,MAAA,SAAS,EAAC,0BAAf;AAA0C,MAAA,GAAG,EAAE,KAAKnE;AAApD,oBACE;AACE,MAAA,KAAK,EAAErB,KAAK,IAAIqF,YADlB;AAEE,MAAA,SAAS,EAAEnG,UAAU,CAAC,cAAD,EAAiBkG,SAAjB,EAA4B,UAA5B,CAFvB;AAGE,MAAA,GAAG,EAAE,KAAK1F,KAHZ;AAIE,MAAA,QAAQ,EAAE,KAAKiB,iBAJjB;AAKE,MAAA,WAAW,EAAEuE,gBAAgB,IAAKzF,OAAO,CAAC,CAAD,CAAP,IAAcA,OAAO,CAAC,CAAD,CAAP,CAAWI,KAL7D;AAME,MAAA,QAAQ,EAAEsF,QANZ;AAOE,MAAA,MAAM,EAAE,KAAKtE,eAPf;AAQE,MAAA,SAAS,EAAE,KAAKD,kBARlB;AASE,MAAA,UAAU,EAAE0E,UATd;AAUE,qBAAaC,UAAU,aAAMA,UAAN,cAA2BM;AAVpD,MADF,eAaE;AAAK,MAAA,SAAS,EAAC;AAAf,oBACE;AACE,MAAA,IAAI,EAAC,QADP;AAEE,MAAA,SAAS,EAAC,yBAFZ;AAGE,MAAA,GAAG,EAAE,KAAKvE,YAHZ;AAIE,MAAA,OAAO,EAAE,KAAKhB,UAJhB;AAKE,MAAA,SAAS,EAAE,KAAKM,kBALlB;AAME,MAAA,QAAQ,EAAEuE,QANZ;AAOE,qBAAaI,UAAU,aAAMA,UAAN,YAAyBM;AAPlD,oBASE,oBAAC,eAAD;AAAiB,MAAA,IAAI,EAAE7G;AAAvB,MATF,eAUE,oBAAC,MAAD;AACE,MAAA,GAAG,EAAE,KAAKmC,MADZ;AAEE,MAAA,OAAO,EAAEqE,aAFX;AAGE,MAAA,SAAS,EAAEtG,UAAU,CAAC,sBAAD,CAHvB;AAIE,MAAA,SAAS,EAAE,KAAK+B,gBAJlB;AAKE,MAAA,QAAQ,EAAE,KAAKC;AALjB,OAOG,KAAK0D,iBAAL,EAPH,CAVF,CADF,CAbF,CADF;AAsCD;;AA3b4D;;gBAAzDtF,Q,+BAC+BD,yB;;gBAD/BC,Q,2BAG2B,G;;gBAH3BA,Q,eAKe;AACjBG,EAAAA,OAAO,EAAEX,SAAS,CAACgH,OAAV,CACPhH,SAAS,CAACiH,KAAV,CAAgB;AACdlG,IAAAA,KAAK,EAAEf,SAAS,CAACkH,MAAV,CAAiBC,UADV;AAEdjG,IAAAA,KAAK,EAAElB,SAAS,CAACkH,MAAV,CAAiBC;AAFV,GAAhB,CADO,EAKPA,UANe;AAOjBT,EAAAA,aAAa,EAAE1G,SAAS,CAACiH,KAAV,CAAgB;AAC7BlG,IAAAA,KAAK,EAAEf,SAAS,CAACkH,MAAV,CAAiBC,UADK;AAE7BjG,IAAAA,KAAK,EAAElB,SAAS,CAACkH,MAAV,CAAiBC;AAFK,GAAhB,CAPE;AAWjB9D,EAAAA,QAAQ,EAAErD,SAAS,CAACoH,IAXH;AAYjBhB,EAAAA,gBAAgB,EAAEpG,SAAS,CAACkH,MAZX;AAajBnB,EAAAA,iBAAiB,EAAE/F,SAAS,CAACkH,MAbZ;AAcjBb,EAAAA,QAAQ,EAAErG,SAAS,CAACqH,IAdH;AAejBf,EAAAA,SAAS,EAAEtG,SAAS,CAACkH,MAfJ;AAgBjBX,EAAAA,YAAY,EAAEvG,SAAS,CAACkH,MAhBP;AAiBjBV,EAAAA,UAAU,EAAExG,SAAS,CAACqH,IAjBL;AAkBjBjD,EAAAA,OAAO,EAAEpE,SAAS,CAACoH,IAlBF;AAmBjB,iBAAepH,SAAS,CAACkH;AAnBR,C;;gBALf1G,Q,kBA2BkB;AACpB6C,EAAAA,QAAQ,GAAS,CACf;AACD,GAHmB;;AAIpB+C,EAAAA,gBAAgB,EAAE,EAJE;AAKpBL,EAAAA,iBAAiB,EAAE,QALC;AAMpBM,EAAAA,QAAQ,EAAE,KANU;AAOpBC,EAAAA,SAAS,EAAE,EAPS;AAQpBC,EAAAA,YAAY,EAAE,EARM;AASpBG,EAAAA,aAAa,EAAE,IATK;AAUpBF,EAAAA,UAAU,EAAE,IAVQ;;AAWpBpC,EAAAA,OAAO,GAAS,CACd;AACD,GAbmB;;AAcpB,iBAAe2C;AAdK,C;;AAmaxB,eAAevG,QAAf","sourcesContent":["/**\n * Combobox that combines a input box with a searchable dropdown menu\n *\n * props:\n * @param {array} options :[{\n * title: 'option title for display',\n * value: 'option value' //option value\n * }]\n * @param {string} inputPlaceholder place holder for the input box\n * @param {string} searchPlaceholder place holder for the search box in drop down search box\n * @param {boolean} disabled disable both input & drop down\n *\n *\n */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsTriangleDown } from '@deephaven/icons';\nimport memoize from 'memoizee';\nimport classNames from 'classnames';\nimport { PopperOptions } from 'popper.js';\nimport SearchInput from './SearchInput';\nimport { Popper } from './popper';\n\nimport './ComboBox.scss';\n\ninterface ComboBoxOption {\n title: string;\n value: string;\n}\n\ninterface ComboBoxProps {\n options: ComboBoxOption[];\n popperOptions: PopperOptions;\n onChange(value: string): void;\n inputPlaceholder: string;\n searchPlaceholder: string;\n disabled: boolean;\n className: string;\n defaultValue: string;\n spellCheck: boolean;\n onEnter(): void;\n 'data-testid'?: string;\n}\n\ninterface ComboBoxState {\n value: string;\n filter: string;\n filteredOptions: ComboBoxOption[];\n keyboardOptionIndex: number;\n menuIsOpen: boolean;\n inputWidth: number;\n}\n\nenum MENU_NAVIGATION_DIRECTION {\n UP = 'UP',\n DOWN = 'DOWN',\n}\n\nclass ComboBox extends Component<ComboBoxProps, ComboBoxState> {\n static MENU_NAVIGATION_DIRECTION = MENU_NAVIGATION_DIRECTION;\n\n static DROP_DOWN_MENU_HEIGHT = 200;\n\n static propTypes = {\n options: PropTypes.arrayOf(\n PropTypes.shape({\n title: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n })\n ).isRequired,\n popperOptions: PropTypes.shape({\n title: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n }),\n onChange: PropTypes.func,\n inputPlaceholder: PropTypes.string,\n searchPlaceholder: PropTypes.string,\n disabled: PropTypes.bool,\n className: PropTypes.string,\n defaultValue: PropTypes.string,\n spellCheck: PropTypes.bool,\n onEnter: PropTypes.func,\n 'data-testid': PropTypes.string,\n };\n\n static defaultProps = {\n onChange(): void {\n // no-op\n },\n inputPlaceholder: '',\n searchPlaceholder: 'Search',\n disabled: false,\n className: '',\n defaultValue: '',\n popperOptions: null,\n spellCheck: true,\n onEnter(): void {\n // no-op\n },\n 'data-testid': undefined,\n };\n\n constructor(props: ComboBoxProps) {\n super(props);\n this.state = {\n value: '',\n filter: '',\n filteredOptions: props.options,\n keyboardOptionIndex: -1,\n menuIsOpen: false,\n inputWidth: 100,\n };\n\n this.toggleMenu = this.toggleMenu.bind(this);\n this.handleMenuKeyDown = this.handleMenuKeyDown.bind(this);\n this.handleMenuBlur = this.handleMenuBlur.bind(this);\n this.closeMenu = this.closeMenu.bind(this);\n\n this.handleInputChange = this.handleInputChange.bind(this);\n this.handleInputKeyDown = this.handleInputKeyDown.bind(this);\n this.handleInputBlur = this.handleInputBlur.bind(this);\n this.handleFilterChange = this.handleFilterChange.bind(this);\n\n this.handleOptionClick = this.handleOptionClick.bind(this);\n this.handleOptionFocus = this.handleOptionFocus.bind(this);\n\n this.handleMenuOpened = this.handleMenuOpened.bind(this);\n this.handleMenuExited = this.handleMenuExited.bind(this);\n\n this.popper = React.createRef();\n this.cbContainer = React.createRef();\n this.toggleButton = React.createRef();\n this.menuContainer = React.createRef();\n this.input = React.createRef();\n this.searchInput = React.createRef();\n }\n\n componentDidUpdate(): void {\n const { menuIsOpen, keyboardOptionIndex } = this.state;\n if (menuIsOpen && keyboardOptionIndex >= 0) {\n this.scrollOptionIntoView();\n }\n }\n\n popper: React.RefObject<Popper>;\n\n cbContainer: React.RefObject<HTMLDivElement>;\n\n toggleButton: React.RefObject<HTMLButtonElement>;\n\n menuContainer: React.RefObject<HTMLDivElement>;\n\n input: React.RefObject<HTMLInputElement>;\n\n searchInput: React.RefObject<SearchInput>;\n\n setInputWidth(): void {\n if (this.cbContainer.current) {\n this.setState({\n inputWidth: this.cbContainer.current.getBoundingClientRect().width,\n });\n }\n }\n\n getCachedFilteredOptions = memoize(\n (options: ComboBoxOption[], input: string) =>\n options.filter(\n option =>\n option.title.toLowerCase().indexOf(input.toLowerCase()) >= 0 ||\n option.value.toLowerCase().indexOf(input.toLowerCase()) >= 0\n )\n );\n\n focus(): void {\n this.input.current?.focus();\n }\n\n resetValue(): void {\n this.setState({ value: '' });\n }\n\n updateInputValue(value: string): void {\n const { onChange } = this.props;\n this.setState({ value });\n onChange(value);\n }\n\n handleResize(): void {\n this.setInputWidth();\n }\n\n handleMenuKeyDown(event: React.KeyboardEvent): void {\n const { filter, filteredOptions, keyboardOptionIndex } = this.state;\n const { options } = this.props;\n const menuOptions = filter ? filteredOptions : options;\n\n switch (event.key) {\n case 'Enter':\n if (menuOptions[keyboardOptionIndex]?.value != null) {\n this.updateInputValue(menuOptions[keyboardOptionIndex].value);\n }\n this.closeMenu();\n this.input.current?.focus();\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'ArrowUp':\n this.handleMenuNavigation(ComboBox.MENU_NAVIGATION_DIRECTION.UP);\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'ArrowDown':\n this.handleMenuNavigation(ComboBox.MENU_NAVIGATION_DIRECTION.DOWN);\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'Escape':\n if (filter !== '') {\n this.setState({ filter: '' });\n event.stopPropagation(); // Don't trigger blur on input element\n } else {\n this.closeMenu();\n }\n break;\n case 'Tab':\n if (!event.shiftKey && keyboardOptionIndex === menuOptions.length - 1) {\n this.closeMenu();\n }\n break;\n default:\n break;\n }\n }\n\n handleMenuNavigation(direction: MENU_NAVIGATION_DIRECTION): void {\n const { filter, filteredOptions, keyboardOptionIndex } = this.state;\n const { options } = this.props;\n const menuOptions = filter ? filteredOptions : options;\n const menuOptionsLength = menuOptions.length;\n let delta = 0;\n switch (direction) {\n case ComboBox.MENU_NAVIGATION_DIRECTION.UP:\n delta = -1;\n break;\n case ComboBox.MENU_NAVIGATION_DIRECTION.DOWN:\n delta = 1;\n break;\n }\n\n if (delta !== 0) {\n this.setState({\n keyboardOptionIndex:\n (keyboardOptionIndex + delta + menuOptionsLength) % menuOptionsLength,\n });\n }\n }\n\n handleInputKeyDown(event: React.KeyboardEvent): void {\n const { onEnter } = this.props;\n const { menuIsOpen } = this.state;\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n if (!menuIsOpen) {\n this.openMenu();\n }\n } else if (event.key === 'Enter') {\n onEnter();\n }\n }\n\n handleInputChange(event: React.ChangeEvent<HTMLInputElement>): void {\n this.updateInputValue(event.target.value);\n }\n\n handleOptionClick(event: React.MouseEvent<HTMLButtonElement>): void {\n const optionIndex = Number(event.currentTarget.value);\n const { filter, filteredOptions } = this.state;\n const { options } = this.props;\n const menuOptions = filter ? filteredOptions : options;\n\n this.updateInputValue(menuOptions[optionIndex].value);\n this.closeMenu();\n this.input.current?.focus();\n }\n\n handleOptionFocus(event: React.FocusEvent<HTMLButtonElement>): void {\n this.setState({ keyboardOptionIndex: Number(event.target.value) });\n }\n\n handleFilterChange(event: React.ChangeEvent<HTMLInputElement>): void {\n const { options } = this.props;\n const filter = event.target.value;\n const filteredOptions = this.getCachedFilteredOptions(options, filter);\n\n this.setState({\n filter,\n filteredOptions,\n keyboardOptionIndex: 0,\n });\n this.popper.current?.scheduleUpdate();\n }\n\n handleMenuBlur(event: React.FocusEvent): void {\n // close if menu blurs, unless its an internal option or the toggleButton which triggers close via click\n if (\n (event.relatedTarget instanceof Element &&\n this.popper.current?.element.contains(event.relatedTarget)) ||\n event.relatedTarget === this.toggleButton.current\n ) {\n return;\n }\n this.closeMenu(false);\n }\n\n handleInputBlur(event: React.FocusEvent<HTMLInputElement>): void {\n // if blur event is caused by focusing on search input or open menu by keyboard, don't close the menu\n const { menuIsOpen } = this.state;\n if (\n menuIsOpen &&\n event.relatedTarget instanceof Element &&\n this.popper.current?.element.contains(event.relatedTarget)\n ) {\n return;\n }\n this.closeMenu(false);\n }\n\n handleMenuOpened(): void {\n this.scrollOptionIntoView();\n this.searchInput.current?.focus();\n }\n\n handleMenuExited(): void {\n const { menuIsOpen } = this.state;\n if (menuIsOpen) {\n this.setState({ menuIsOpen: false });\n this.popper.current?.hide();\n }\n this.setState({ filter: '' });\n }\n\n toggleMenu(event: React.MouseEvent<HTMLButtonElement>): void {\n const { menuIsOpen } = this.state;\n if (menuIsOpen) {\n this.closeMenu();\n } else {\n this.openMenu();\n }\n event.stopPropagation();\n }\n\n openMenu(): void {\n this.updateKeyboardIndex();\n this.setInputWidth();\n this.setState({ menuIsOpen: true });\n\n window.requestAnimationFrame(() => {\n this.popper.current?.show();\n });\n }\n\n closeMenu(focusInput = true): void {\n this.setState({ menuIsOpen: false });\n if (focusInput) {\n this.input.current?.focus();\n }\n this.popper.current?.hide();\n }\n\n updateKeyboardIndex(): void {\n const { value, filter, filteredOptions } = this.state;\n const { options } = this.props;\n const menuOptions = filter ? filteredOptions : options;\n const valueIndex = menuOptions.findIndex(option => option.value === value);\n this.setState({ keyboardOptionIndex: valueIndex });\n }\n\n scrollOptionIntoView(): void {\n const activeOption = this.menuContainer.current?.querySelector(\n '.cb-option-btn.keyboard-active'\n );\n if (activeOption instanceof HTMLElement) {\n activeOption.scrollIntoView({\n block: 'nearest',\n inline: 'nearest',\n });\n }\n }\n\n renderMenuElement(): JSX.Element {\n const { searchPlaceholder } = this.props;\n const { filter, inputWidth } = this.state;\n return (\n <div\n className=\"cb-menu-container\"\n ref={this.menuContainer}\n role=\"presentation\"\n onKeyDown={this.handleMenuKeyDown}\n onClick={event => {\n event.stopPropagation();\n }}\n style={{ width: inputWidth }}\n onBlur={this.handleMenuBlur}\n >\n <div className=\"cb-search-input-container\">\n <SearchInput\n value={filter}\n ref={this.searchInput}\n onChange={this.handleFilterChange}\n className=\"cb-search-input\"\n placeholder={searchPlaceholder}\n />\n </div>\n <div className=\"cb-options-container\">\n <div className=\"cb-options\">{this.renderOptions()}</div>\n </div>\n </div>\n );\n }\n\n renderOptions(): React.ReactNode {\n const { options } = this.props;\n const { keyboardOptionIndex, filter, filteredOptions } = this.state;\n const menuOptions = filter ? filteredOptions : options;\n\n return menuOptions.map((option, index) => {\n const key = `option-${index}-${option.value}`;\n return (\n <button\n key={key}\n type=\"button\"\n value={index}\n className={classNames('cb-option-btn', {\n 'keyboard-active': keyboardOptionIndex === index,\n })}\n onClick={this.handleOptionClick}\n onFocus={this.handleOptionFocus}\n >\n {option.title}\n </button>\n );\n });\n }\n\n render(): JSX.Element {\n const {\n options,\n inputPlaceholder,\n disabled,\n className,\n defaultValue,\n spellCheck,\n 'data-testid': dataTestId,\n } = this.props;\n const { value } = this.state;\n let { popperOptions } = this.props;\n popperOptions = {\n placement: 'bottom-end',\n modifiers: {\n preventOverflow: { enabled: false },\n },\n ...popperOptions,\n };\n\n return (\n <div className=\"input-group cb-container\" ref={this.cbContainer}>\n <input\n value={value || defaultValue}\n className={classNames('form-control', className, 'cb-input')}\n ref={this.input}\n onChange={this.handleInputChange}\n placeholder={inputPlaceholder || (options[0] && options[0].title)}\n disabled={disabled}\n onBlur={this.handleInputBlur}\n onKeyDown={this.handleInputKeyDown}\n spellCheck={spellCheck}\n data-testid={dataTestId ? `${dataTestId}-input` : undefined}\n />\n <div className=\"input-group-append cb-dropdown\">\n <button\n type=\"button\"\n className=\"btn cb-btn form-control\"\n ref={this.toggleButton}\n onClick={this.toggleMenu}\n onKeyDown={this.handleInputKeyDown}\n disabled={disabled}\n data-testid={dataTestId ? `${dataTestId}-btn` : undefined}\n >\n <FontAwesomeIcon icon={vsTriangleDown} />\n <Popper\n ref={this.popper}\n options={popperOptions}\n className={classNames('combobox interactive')}\n onEntered={this.handleMenuOpened}\n onExited={this.handleMenuExited}\n >\n {this.renderMenuElement()}\n </Popper>\n </button>\n </div>\n </div>\n );\n }\n}\n\nexport default ComboBox;\n"],"file":"ComboBox.js"}
|
|
1
|
+
{"version":3,"file":"ComboBox.js","names":["React","Component","PropTypes","FontAwesomeIcon","vsTriangleDown","memoize","classNames","SearchInput","Popper","MENU_NAVIGATION_DIRECTION","ComboBox","constructor","props","options","input","filter","option","title","toLowerCase","indexOf","value","state","filteredOptions","keyboardOptionIndex","menuIsOpen","inputWidth","toggleMenu","bind","handleMenuKeyDown","handleMenuBlur","closeMenu","handleInputChange","handleInputKeyDown","handleInputBlur","handleFilterChange","handleOptionClick","handleOptionFocus","handleMenuOpened","handleMenuExited","popper","createRef","cbContainer","toggleButton","menuContainer","searchInput","componentDidUpdate","scrollOptionIntoView","setInputWidth","current","setState","getBoundingClientRect","width","focus","resetValue","updateInputValue","onChange","handleResize","event","menuOptions","key","stopPropagation","preventDefault","handleMenuNavigation","UP","DOWN","shiftKey","length","direction","menuOptionsLength","delta","onEnter","openMenu","target","optionIndex","Number","currentTarget","getCachedFilteredOptions","scheduleUpdate","relatedTarget","Element","element","contains","hide","updateKeyboardIndex","window","requestAnimationFrame","show","focusInput","valueIndex","findIndex","activeOption","querySelector","HTMLElement","scrollIntoView","block","inline","renderMenuElement","searchPlaceholder","renderOptions","map","index","render","inputPlaceholder","disabled","className","defaultValue","spellCheck","dataTestId","popperOptions","placement","modifiers","preventOverflow","enabled","undefined","arrayOf","shape","string","isRequired","func","bool"],"sources":["../src/ComboBox.tsx"],"sourcesContent":["/**\n * Combobox that combines a input box with a searchable dropdown menu\n *\n * props:\n * @param {array} options :[{\n * title: 'option title for display',\n * value: 'option value' //option value\n * }]\n * @param {string} inputPlaceholder place holder for the input box\n * @param {string} searchPlaceholder place holder for the search box in drop down search box\n * @param {boolean} disabled disable both input & drop down\n *\n *\n */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsTriangleDown } from '@deephaven/icons';\nimport memoize from 'memoizee';\nimport classNames from 'classnames';\nimport { PopperOptions } from 'popper.js';\nimport SearchInput from './SearchInput';\nimport { Popper } from './popper';\n\nimport './ComboBox.scss';\n\ninterface ComboBoxOption {\n title: string;\n value: string;\n}\n\ninterface ComboBoxProps {\n options: ComboBoxOption[];\n popperOptions: PopperOptions;\n onChange(value: string): void;\n inputPlaceholder: string;\n searchPlaceholder: string;\n disabled: boolean;\n className: string;\n defaultValue: string;\n spellCheck: boolean;\n onEnter(): void;\n 'data-testid'?: string;\n}\n\ninterface ComboBoxState {\n value: string;\n filter: string;\n filteredOptions: ComboBoxOption[];\n keyboardOptionIndex: number;\n menuIsOpen: boolean;\n inputWidth: number;\n}\n\nenum MENU_NAVIGATION_DIRECTION {\n UP = 'UP',\n DOWN = 'DOWN',\n}\n\nclass ComboBox extends Component<ComboBoxProps, ComboBoxState> {\n static MENU_NAVIGATION_DIRECTION = MENU_NAVIGATION_DIRECTION;\n\n static DROP_DOWN_MENU_HEIGHT = 200;\n\n static propTypes = {\n options: PropTypes.arrayOf(\n PropTypes.shape({\n title: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n })\n ).isRequired,\n popperOptions: PropTypes.shape({\n title: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n }),\n onChange: PropTypes.func,\n inputPlaceholder: PropTypes.string,\n searchPlaceholder: PropTypes.string,\n disabled: PropTypes.bool,\n className: PropTypes.string,\n defaultValue: PropTypes.string,\n spellCheck: PropTypes.bool,\n onEnter: PropTypes.func,\n 'data-testid': PropTypes.string,\n };\n\n static defaultProps = {\n onChange(): void {\n // no-op\n },\n inputPlaceholder: '',\n searchPlaceholder: 'Search',\n disabled: false,\n className: '',\n defaultValue: '',\n popperOptions: null,\n spellCheck: true,\n onEnter(): void {\n // no-op\n },\n 'data-testid': undefined,\n };\n\n constructor(props: ComboBoxProps) {\n super(props);\n this.state = {\n value: '',\n filter: '',\n filteredOptions: props.options,\n keyboardOptionIndex: -1,\n menuIsOpen: false,\n inputWidth: 100,\n };\n\n this.toggleMenu = this.toggleMenu.bind(this);\n this.handleMenuKeyDown = this.handleMenuKeyDown.bind(this);\n this.handleMenuBlur = this.handleMenuBlur.bind(this);\n this.closeMenu = this.closeMenu.bind(this);\n\n this.handleInputChange = this.handleInputChange.bind(this);\n this.handleInputKeyDown = this.handleInputKeyDown.bind(this);\n this.handleInputBlur = this.handleInputBlur.bind(this);\n this.handleFilterChange = this.handleFilterChange.bind(this);\n\n this.handleOptionClick = this.handleOptionClick.bind(this);\n this.handleOptionFocus = this.handleOptionFocus.bind(this);\n\n this.handleMenuOpened = this.handleMenuOpened.bind(this);\n this.handleMenuExited = this.handleMenuExited.bind(this);\n\n this.popper = React.createRef();\n this.cbContainer = React.createRef();\n this.toggleButton = React.createRef();\n this.menuContainer = React.createRef();\n this.input = React.createRef();\n this.searchInput = React.createRef();\n }\n\n componentDidUpdate(): void {\n const { menuIsOpen, keyboardOptionIndex } = this.state;\n if (menuIsOpen && keyboardOptionIndex >= 0) {\n this.scrollOptionIntoView();\n }\n }\n\n popper: React.RefObject<Popper>;\n\n cbContainer: React.RefObject<HTMLDivElement>;\n\n toggleButton: React.RefObject<HTMLButtonElement>;\n\n menuContainer: React.RefObject<HTMLDivElement>;\n\n input: React.RefObject<HTMLInputElement>;\n\n searchInput: React.RefObject<SearchInput>;\n\n setInputWidth(): void {\n if (this.cbContainer.current) {\n this.setState({\n inputWidth: this.cbContainer.current.getBoundingClientRect().width,\n });\n }\n }\n\n getCachedFilteredOptions = memoize(\n (options: ComboBoxOption[], input: string) =>\n options.filter(\n option =>\n option.title.toLowerCase().indexOf(input.toLowerCase()) >= 0 ||\n option.value.toLowerCase().indexOf(input.toLowerCase()) >= 0\n )\n );\n\n focus(): void {\n this.input.current?.focus();\n }\n\n resetValue(): void {\n this.setState({ value: '' });\n }\n\n updateInputValue(value: string): void {\n const { onChange } = this.props;\n this.setState({ value });\n onChange(value);\n }\n\n handleResize(): void {\n this.setInputWidth();\n }\n\n handleMenuKeyDown(event: React.KeyboardEvent): void {\n const { filter, filteredOptions, keyboardOptionIndex } = this.state;\n const { options } = this.props;\n const menuOptions = filter ? filteredOptions : options;\n\n switch (event.key) {\n case 'Enter':\n if (menuOptions[keyboardOptionIndex]?.value != null) {\n this.updateInputValue(menuOptions[keyboardOptionIndex].value);\n }\n this.closeMenu();\n this.input.current?.focus();\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'ArrowUp':\n this.handleMenuNavigation(ComboBox.MENU_NAVIGATION_DIRECTION.UP);\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'ArrowDown':\n this.handleMenuNavigation(ComboBox.MENU_NAVIGATION_DIRECTION.DOWN);\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'Escape':\n if (filter !== '') {\n this.setState({ filter: '' });\n event.stopPropagation(); // Don't trigger blur on input element\n } else {\n this.closeMenu();\n }\n break;\n case 'Tab':\n if (!event.shiftKey && keyboardOptionIndex === menuOptions.length - 1) {\n this.closeMenu();\n }\n break;\n default:\n break;\n }\n }\n\n handleMenuNavigation(direction: MENU_NAVIGATION_DIRECTION): void {\n const { filter, filteredOptions, keyboardOptionIndex } = this.state;\n const { options } = this.props;\n const menuOptions = filter ? filteredOptions : options;\n const menuOptionsLength = menuOptions.length;\n let delta = 0;\n switch (direction) {\n case ComboBox.MENU_NAVIGATION_DIRECTION.UP:\n delta = -1;\n break;\n case ComboBox.MENU_NAVIGATION_DIRECTION.DOWN:\n delta = 1;\n break;\n }\n\n if (delta !== 0) {\n this.setState({\n keyboardOptionIndex:\n (keyboardOptionIndex + delta + menuOptionsLength) % menuOptionsLength,\n });\n }\n }\n\n handleInputKeyDown(event: React.KeyboardEvent): void {\n const { onEnter } = this.props;\n const { menuIsOpen } = this.state;\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n if (!menuIsOpen) {\n this.openMenu();\n }\n } else if (event.key === 'Enter') {\n onEnter();\n }\n }\n\n handleInputChange(event: React.ChangeEvent<HTMLInputElement>): void {\n this.updateInputValue(event.target.value);\n }\n\n handleOptionClick(event: React.MouseEvent<HTMLButtonElement>): void {\n const optionIndex = Number(event.currentTarget.value);\n const { filter, filteredOptions } = this.state;\n const { options } = this.props;\n const menuOptions = filter ? filteredOptions : options;\n\n this.updateInputValue(menuOptions[optionIndex].value);\n this.closeMenu();\n this.input.current?.focus();\n }\n\n handleOptionFocus(event: React.FocusEvent<HTMLButtonElement>): void {\n this.setState({ keyboardOptionIndex: Number(event.target.value) });\n }\n\n handleFilterChange(event: React.ChangeEvent<HTMLInputElement>): void {\n const { options } = this.props;\n const filter = event.target.value;\n const filteredOptions = this.getCachedFilteredOptions(options, filter);\n\n this.setState({\n filter,\n filteredOptions,\n keyboardOptionIndex: 0,\n });\n this.popper.current?.scheduleUpdate();\n }\n\n handleMenuBlur(event: React.FocusEvent): void {\n // close if menu blurs, unless its an internal option or the toggleButton which triggers close via click\n if (\n (event.relatedTarget instanceof Element &&\n this.popper.current?.element.contains(event.relatedTarget)) ||\n event.relatedTarget === this.toggleButton.current\n ) {\n return;\n }\n this.closeMenu(false);\n }\n\n handleInputBlur(event: React.FocusEvent<HTMLInputElement>): void {\n // if blur event is caused by focusing on search input or open menu by keyboard, don't close the menu\n const { menuIsOpen } = this.state;\n if (\n menuIsOpen &&\n event.relatedTarget instanceof Element &&\n this.popper.current?.element.contains(event.relatedTarget)\n ) {\n return;\n }\n this.closeMenu(false);\n }\n\n handleMenuOpened(): void {\n this.scrollOptionIntoView();\n this.searchInput.current?.focus();\n }\n\n handleMenuExited(): void {\n const { menuIsOpen } = this.state;\n if (menuIsOpen) {\n this.setState({ menuIsOpen: false });\n this.popper.current?.hide();\n }\n this.setState({ filter: '' });\n }\n\n toggleMenu(event: React.MouseEvent<HTMLButtonElement>): void {\n const { menuIsOpen } = this.state;\n if (menuIsOpen) {\n this.closeMenu();\n } else {\n this.openMenu();\n }\n event.stopPropagation();\n }\n\n openMenu(): void {\n this.updateKeyboardIndex();\n this.setInputWidth();\n this.setState({ menuIsOpen: true });\n\n window.requestAnimationFrame(() => {\n this.popper.current?.show();\n });\n }\n\n closeMenu(focusInput = true): void {\n this.setState({ menuIsOpen: false });\n if (focusInput) {\n this.input.current?.focus();\n }\n this.popper.current?.hide();\n }\n\n updateKeyboardIndex(): void {\n const { value, filter, filteredOptions } = this.state;\n const { options } = this.props;\n const menuOptions = filter ? filteredOptions : options;\n const valueIndex = menuOptions.findIndex(option => option.value === value);\n this.setState({ keyboardOptionIndex: valueIndex });\n }\n\n scrollOptionIntoView(): void {\n const activeOption = this.menuContainer.current?.querySelector(\n '.cb-option-btn.keyboard-active'\n );\n if (activeOption instanceof HTMLElement) {\n activeOption.scrollIntoView({\n block: 'nearest',\n inline: 'nearest',\n });\n }\n }\n\n renderMenuElement(): JSX.Element {\n const { searchPlaceholder } = this.props;\n const { filter, inputWidth } = this.state;\n return (\n <div\n className=\"cb-menu-container\"\n ref={this.menuContainer}\n role=\"presentation\"\n onKeyDown={this.handleMenuKeyDown}\n onClick={event => {\n event.stopPropagation();\n }}\n style={{ width: inputWidth }}\n onBlur={this.handleMenuBlur}\n >\n <div className=\"cb-search-input-container\">\n <SearchInput\n value={filter}\n ref={this.searchInput}\n onChange={this.handleFilterChange}\n className=\"cb-search-input\"\n placeholder={searchPlaceholder}\n />\n </div>\n <div className=\"cb-options-container\">\n <div className=\"cb-options\">{this.renderOptions()}</div>\n </div>\n </div>\n );\n }\n\n renderOptions(): React.ReactNode {\n const { options } = this.props;\n const { keyboardOptionIndex, filter, filteredOptions } = this.state;\n const menuOptions = filter ? filteredOptions : options;\n\n return menuOptions.map((option, index) => {\n const key = `option-${index}-${option.value}`;\n return (\n <button\n key={key}\n type=\"button\"\n value={index}\n className={classNames('cb-option-btn', {\n 'keyboard-active': keyboardOptionIndex === index,\n })}\n onClick={this.handleOptionClick}\n onFocus={this.handleOptionFocus}\n >\n {option.title}\n </button>\n );\n });\n }\n\n render(): JSX.Element {\n const {\n options,\n inputPlaceholder,\n disabled,\n className,\n defaultValue,\n spellCheck,\n 'data-testid': dataTestId,\n } = this.props;\n const { value } = this.state;\n let { popperOptions } = this.props;\n popperOptions = {\n placement: 'bottom-end',\n modifiers: {\n preventOverflow: { enabled: false },\n },\n ...popperOptions,\n };\n\n return (\n <div className=\"input-group cb-container\" ref={this.cbContainer}>\n <input\n value={value || defaultValue}\n className={classNames('form-control', className, 'cb-input')}\n ref={this.input}\n onChange={this.handleInputChange}\n placeholder={inputPlaceholder || (options[0] && options[0].title)}\n disabled={disabled}\n onBlur={this.handleInputBlur}\n onKeyDown={this.handleInputKeyDown}\n spellCheck={spellCheck}\n data-testid={dataTestId ? `${dataTestId}-input` : undefined}\n />\n <div className=\"input-group-append cb-dropdown\">\n <button\n type=\"button\"\n className=\"btn cb-btn form-control\"\n ref={this.toggleButton}\n onClick={this.toggleMenu}\n onKeyDown={this.handleInputKeyDown}\n disabled={disabled}\n data-testid={dataTestId ? `${dataTestId}-btn` : undefined}\n >\n <FontAwesomeIcon icon={vsTriangleDown} />\n <Popper\n ref={this.popper}\n options={popperOptions}\n className={classNames('combobox interactive')}\n onEntered={this.handleMenuOpened}\n onExited={this.handleMenuExited}\n >\n {this.renderMenuElement()}\n </Popper>\n </button>\n </div>\n </div>\n );\n }\n}\n\nexport default ComboBox;\n"],"mappings":"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"}
|