@deephaven/components 0.50.1-beta.4 → 0.51.0
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/BulkActionBar.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/CopyButton.js.map +1 -1
- package/dist/CustomTimeSelect.js.map +1 -1
- package/dist/DateInput.js.map +1 -1
- package/dist/DateInputUtils.js.map +1 -1
- package/dist/DateTimeInput.js.map +1 -1
- package/dist/DateTimeInputUtils.js.map +1 -1
- package/dist/DebouncedSearchInput.js.map +1 -1
- package/dist/DragUtils.js.map +1 -1
- package/dist/DraggableItemList.js.map +1 -1
- package/dist/EditableItemList.js.map +1 -1
- package/dist/HierarchicalCheckboxMenu.js.map +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/MaskedInputUtils.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/RandomAreaPlotAnimation.js.map +1 -1
- package/dist/SearchInput.js.map +1 -1
- package/dist/SearchableCombobox.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/SpectrumUtils.d.ts.map +1 -1
- package/dist/SpectrumUtils.js +3 -4
- package/dist/SpectrumUtils.js.map +1 -1
- package/dist/TableViewEmptyState.js.map +1 -1
- package/dist/TextWithTooltip.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/actions/ConfirmActionButton.js.map +1 -1
- package/dist/actions/IconActionButton.js.map +1 -1
- package/dist/context-actions/ContextActionUtils.js +2 -0
- 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/declaration.d.js.map +1 -1
- package/dist/dialogs/ActionButtonDialogTrigger.js.map +1 -1
- package/dist/dialogs/ConfirmationDialog.js.map +1 -1
- package/dist/menu-actions/DropdownMenu.js.map +1 -1
- package/dist/menu-actions/Menu.js.map +1 -1
- package/dist/modal/DebouncedModal.js.map +1 -1
- package/dist/modal/InfoModal.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/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/popper/Popper.js +3 -0
- package/dist/popper/Popper.js.map +1 -1
- package/dist/popper/Tooltip.js +3 -0
- package/dist/popper/Tooltip.js.map +1 -1
- package/dist/shortcuts/Shortcut.js.map +1 -1
- package/dist/shortcuts/ShortcutRegistry.js.map +1 -1
- package/dist/theme/SpectrumThemeProvider.d.ts +17 -0
- package/dist/theme/SpectrumThemeProvider.d.ts.map +1 -0
- package/dist/theme/SpectrumThemeProvider.js +31 -0
- package/dist/theme/SpectrumThemeProvider.js.map +1 -0
- package/dist/theme/ThemeProvider.d.ts.map +1 -1
- package/dist/theme/ThemeProvider.js +26 -12
- package/dist/theme/ThemeProvider.js.map +1 -1
- package/dist/theme/ThemeUtils.js.map +1 -1
- package/dist/theme/theme-dark/index.d.ts +24 -0
- package/dist/theme/theme-dark/index.d.ts.map +1 -1
- package/dist/theme/theme-dark/index.js +26 -1
- package/dist/theme/theme-dark/index.js.map +1 -1
- package/dist/theme/theme-dark/theme-dark-components.css +8 -0
- package/dist/theme/theme-dark/theme-dark-components.css.map +1 -0
- package/dist/theme/theme-dark/theme-dark-semantic-editor.css +3 -1
- package/dist/theme/theme-dark/theme-dark-semantic-editor.css.map +1 -1
- package/dist/theme/theme-dark/theme-dark-semantic.css +51 -4
- package/dist/theme/theme-dark/theme-dark-semantic.css.map +1 -1
- package/dist/theme/theme-spectrum/index.d.ts +16 -0
- package/dist/theme/theme-spectrum/index.d.ts.map +1 -0
- package/dist/theme/theme-spectrum/index.js +22 -0
- package/dist/theme/theme-spectrum/index.js.map +1 -0
- package/dist/theme/theme-spectrum/theme-spectrum-alias.module.css +192 -0
- package/dist/theme/theme-spectrum/theme-spectrum-alias.module.css.map +1 -0
- package/dist/theme/theme-spectrum/theme-spectrum-overrides.module.css +7 -0
- package/dist/theme/theme-spectrum/theme-spectrum-overrides.module.css.map +1 -0
- package/dist/theme/theme-spectrum/theme-spectrum-palette.module.css +211 -0
- package/dist/theme/theme-spectrum/theme-spectrum-palette.module.css.map +1 -0
- package/dist/theme/useTheme.js.map +1 -1
- package/package.json +7 -7
- package/dist/SpectrumThemeDark.module.css +0 -9
- package/dist/SpectrumThemeDark.module.css.map +0 -1
- package/dist/SpectrumThemeLight.module.css +0 -9
- package/dist/SpectrumThemeLight.module.css.map +0 -1
|
@@ -1 +1 @@
|
|
|
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 != null) {\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 !== null &&\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 !== null &&\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
|
+
{"version":3,"file":"AutoCompleteInput.js","names":["React","Component","PropTypes","memoize","classNames","debounce","Popper","jsx","_jsx","jsxs","_jsxs","DEBOUNCE_DELAY","MENU_NAVIGATION_DIRECTION","AutoCompleteInput","constructor","props","_defineProperty","options","input","filter","option","title","toLowerCase","indexOf","popperOptions","_objectSpread","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","arguments","undefined","onChange","_this$popper$current","getCachedFilteredOptions","perfectMatch","closeMenu","scheduleUpdate","resetValue","handleResize","event","_this$input$current","key","stopPropagation","preventDefault","focus","navigateMenu","UP","DOWN","shiftKey","direction","newKeyboardOptionIndex","scrollOptionIntoView","onEnter","openMenu","target","_this$input$current2","relatedTarget","Element","element","contains","_this$input$current3","window","requestAnimationFrame","_this$popper$current2","show","_this$popper$current3","focusInput","_this$input$current4","hide","index","_this$menuContainer$c","children","item","scrollIntoView","behavior","block","renderMenuElement","className","ref","role","onKeyDown","style","onBlur","renderOptions","noMatchText","map","renderOption","concat","type","onClick","onFocus","render","inputPlaceholder","disabled","defaultTitle","spellCheck","dataTestId","placeholder","onEntered","onExited","arrayOf","shape","string","isRequired","func","bool"],"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 != null) {\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 !== null &&\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 !== null &&\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,"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 */\nfunction 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): 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): string {\n return input\n .split('\\n')\n .map(string => string.trim())\n .join(' ');\n }\n\n function reCalculateLayout(): void {\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>): void {\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(): void {\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(): void {\n if (!element.current) return;\n if (document.activeElement === element.current) return;\n element.current.focus();\n }\n\n function handleBlur(): void {\n if (delimiter) {\n setValue(implode(value));\n onChange(implode(value));\n }\n }\n\n function handlePaste(): void {\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":"AAAA,OAAOA,KAAK,IAAIC,QAAQ,EAAEC,MAAM,EAAEC,SAAS,QAAQ,OAAO;AAC1D,OAAOC,SAAS,MAAM,YAAY;AAClC,OAAOC,UAAU,MAAM,YAAY;AAAC;AAAA;AAgBpC;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,
|
|
1
|
+
{"version":3,"file":"AutoResizeTextarea.js","names":["React","useState","useRef","useEffect","PropTypes","classNames","jsx","_jsx","AutoResizeTextarea","_ref","className","value","propsValue","onChange","spellCheck","placeholder","disabled","delimiter","id","dataTestId","setValue","isPastedChange","setIsPastedChange","element","syncStateWithProp","explode","input","trim","split","filter","string","join","concat","implode","map","reCalculateLayout","current","style","height","resizedHeight","scrollHeight","offsetHeight","clientHeight","handleChange","event","newValue","target","handleFocus","scrollLeft","handleMouseDown","document","activeElement","focus","handleBlur","handlePaste","reCalculate","ref","rows","onFocus","onMouseDown","onBlur","onPaste","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 */\nfunction 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): 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): string {\n return input\n .split('\\n')\n .map(string => string.trim())\n .join(' ');\n }\n\n function reCalculateLayout(): void {\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>): void {\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(): void {\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(): void {\n if (!element.current) return;\n if (document.activeElement === element.current) return;\n element.current.focus();\n }\n\n function handleBlur(): void {\n if (delimiter) {\n setValue(implode(value));\n onChange(implode(value));\n }\n }\n\n function handlePaste(): void {\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,"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","isConfirmDanger","children","dataTestId","confirmButton","disableModalCheckbox","onConfirmClicked","current","checked","onOpened","focus","modalBody","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\nexport interface 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 isConfirmDanger?: boolean;\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 */\nfunction BasicModal(props: BasicModalProps): JSX.Element {\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 isConfirmDanger = false,\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 (\n disableModalCheckbox.current !== null &&\n disableModalCheckbox.current.checked &&\n onModalDisable\n ) {\n onModalDisable();\n }\n onConfirm();\n }, [onConfirm, onModalDisable]);\n\n const onOpened = useCallback(() => {\n confirmButton.current?.focus();\n }, []);\n\n let modalBody = '';\n if (isOpen) {\n modalBody = typeof bodyText === 'function' ? bodyText() : bodyText;\n }\n\n return (\n <Modal isOpen={isOpen} className=\"theme-bg-light\" onOpened={onOpened}>\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 !== undefined\n ? `${dataTestId}-checkbox-confirm`\n : 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 kind=\"secondary\"\n className=\"mr-auto\"\n data-dismiss=\"modal\"\n onClick={onDiscard}\n data-testid={\n dataTestId !== undefined ? `${dataTestId}-btn-discard` : undefined\n }\n >\n {discardButtonText}\n </Button>\n )}\n {onCancel && (\n <Button\n kind=\"secondary\"\n data-dismiss=\"modal\"\n onClick={onCancel}\n data-testid={\n dataTestId !== undefined ? `${dataTestId}-btn-cancel` : undefined\n }\n >\n {cancelButtonText}\n </Button>\n )}\n <ButtonGroup>\n <Button\n kind={isConfirmDanger ? 'danger' : 'primary'}\n onClick={onConfirmClicked}\n ref={confirmButton}\n data-testid={\n dataTestId !== undefined ? `${dataTestId}-btn-confirm` : undefined\n }\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":"AAAA,OAAOA,KAAK,IAAIC,MAAM,EAAEC,WAAW,QAAQ,OAAO;AAClD,OAAOC,SAAS,MAAM,YAAY;AAAC,OAC5BC,WAAW;AAAA,OACXC,MAAM;AAAA,SACJC,KAAK,EAAEC,SAAS,EAAEC,WAAW,EAAEC,WAAW;AAAA;AAAA;AAkBnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,
|
|
1
|
+
{"version":3,"file":"BasicModal.js","names":["React","useRef","useCallback","PropTypes","ButtonGroup","Button","Modal","ModalBody","ModalFooter","ModalHeader","jsx","_jsx","jsxs","_jsxs","BasicModal","props","isOpen","headerText","bodyText","onCancel","onConfirm","onDiscard","onModalDisable","cancelButtonText","confirmButtonText","discardButtonText","isConfirmDanger","children","dataTestId","confirmButton","disableModalCheckbox","onConfirmClicked","current","checked","onOpened","_confirmButton$curren","focus","modalBody","className","closeButton","type","id","defaultChecked","ref","undefined","concat","htmlFor","kind","onClick","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\nexport interface 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 isConfirmDanger?: boolean;\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 */\nfunction BasicModal(props: BasicModalProps): JSX.Element {\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 isConfirmDanger = false,\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 (\n disableModalCheckbox.current !== null &&\n disableModalCheckbox.current.checked &&\n onModalDisable\n ) {\n onModalDisable();\n }\n onConfirm();\n }, [onConfirm, onModalDisable]);\n\n const onOpened = useCallback(() => {\n confirmButton.current?.focus();\n }, []);\n\n let modalBody = '';\n if (isOpen) {\n modalBody = typeof bodyText === 'function' ? bodyText() : bodyText;\n }\n\n return (\n <Modal isOpen={isOpen} className=\"theme-bg-light\" onOpened={onOpened}>\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 !== undefined\n ? `${dataTestId}-checkbox-confirm`\n : 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 kind=\"secondary\"\n className=\"mr-auto\"\n data-dismiss=\"modal\"\n onClick={onDiscard}\n data-testid={\n dataTestId !== undefined ? `${dataTestId}-btn-discard` : undefined\n }\n >\n {discardButtonText}\n </Button>\n )}\n {onCancel && (\n <Button\n kind=\"secondary\"\n data-dismiss=\"modal\"\n onClick={onCancel}\n data-testid={\n dataTestId !== undefined ? `${dataTestId}-btn-cancel` : undefined\n }\n >\n {cancelButtonText}\n </Button>\n )}\n <ButtonGroup>\n <Button\n kind={isConfirmDanger ? 'danger' : 'primary'}\n onClick={onConfirmClicked}\n ref={confirmButton}\n data-testid={\n dataTestId !== undefined ? `${dataTestId}-btn-confirm` : undefined\n }\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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BulkActionBar.js","names":["ActionBar","commonStyles","BulkActionBar","styleProps","selectedItemCount","onClearSelection","spectrumActionBar"],"sources":["../src/BulkActionBar.tsx"],"sourcesContent":["import { ActionBar } from '@adobe/react-spectrum';\nimport type { StyleProps } from '@react-types/shared';\nimport commonStyles from './SpectrumComponent.module.scss';\n\nexport interface BulkActionBarProps {\n styleProps?: StyleProps;\n selectedItemCount: 'all' | number;\n onClearSelection: () => void;\n}\n\nexport function BulkActionBar({\n styleProps,\n selectedItemCount,\n onClearSelection,\n}: BulkActionBarProps): JSX.Element {\n return (\n <ActionBar\n UNSAFE_className={commonStyles.spectrumActionBar}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...styleProps}\n isEmphasized\n selectedItemCount={selectedItemCount}\n onClearSelection={onClearSelection}\n >\n {/* */}\n </ActionBar>\n );\n}\n\nexport default BulkActionBar;\n"],"mappings":";;;;;AAAA,SAASA,SAAS,QAAQ,uBAAuB;AAAC,OAE3CC,YAAY;AAAA;AAQnB,OAAO,SAASC,
|
|
1
|
+
{"version":3,"file":"BulkActionBar.js","names":["ActionBar","commonStyles","jsx","_jsx","BulkActionBar","_ref","styleProps","selectedItemCount","onClearSelection","_objectSpread","UNSAFE_className","spectrumActionBar","isEmphasized"],"sources":["../src/BulkActionBar.tsx"],"sourcesContent":["import { ActionBar } from '@adobe/react-spectrum';\nimport type { StyleProps } from '@react-types/shared';\nimport commonStyles from './SpectrumComponent.module.scss';\n\nexport interface BulkActionBarProps {\n styleProps?: StyleProps;\n selectedItemCount: 'all' | number;\n onClearSelection: () => void;\n}\n\nexport function BulkActionBar({\n styleProps,\n selectedItemCount,\n onClearSelection,\n}: BulkActionBarProps): JSX.Element {\n return (\n <ActionBar\n UNSAFE_className={commonStyles.spectrumActionBar}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...styleProps}\n isEmphasized\n selectedItemCount={selectedItemCount}\n onClearSelection={onClearSelection}\n >\n {/* */}\n </ActionBar>\n );\n}\n\nexport default BulkActionBar;\n"],"mappings":";;;;;AAAA,SAASA,SAAS,QAAQ,uBAAuB;AAAC,OAE3CC,YAAY;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAQnB,OAAO,SAASC,aAAaA,CAAAC,IAAA,EAIO;EAAA,IAJN;IAC5BC,UAAU;IACVC,iBAAiB;IACjBC;EACkB,CAAC,GAAAH,IAAA;EACnB,oBACEF,IAAA,CAACH,SAAS,EAAAS,aAAA,CAAAA,aAAA;IACRC,gBAAgB,EAAET,YAAY,CAACU;IAC/B;EAAA,GACIL,UAAU;IACdM,YAAY;IACZL,iBAAiB,EAAEA,iBAAkB;IACrCC,gBAAgB,EAAEA;EAAiB,EAG1B,CAAC;AAEhB;AAEA,eAAeJ,aAAa"}
|
package/dist/Button.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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","onContextMenu","onMouseDown","onMouseUp","onMouseEnter","onMouseLeave","onKeyDown","className","style","children","tabIndex","dataTestId","ariaLabel","rest","Boolean","btnClassName","variantClassName","iconElem","isValidElement","tooltipElem","undefined","ariaLabelString","button","displayName","propTypes","oneOf","isRequired","Error","iconName","bool","func","number","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;\nexport type 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 IconOnlyButtonStringTooltip = BaseButtonProps & {\n tooltip: string;\n icon: IconDefinition | JSX.Element;\n children?: undefined;\n};\n\ntype IconOnlyButtonJsxTooltip = BaseButtonProps & {\n tooltip: JSX.Element;\n 'aria-label': string;\n icon: IconDefinition | JSX.Element;\n children?: undefined;\n};\n\ntype IconOnlyButton = IconOnlyButtonStringTooltip | IconOnlyButtonJsxTooltip;\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 'btn-link-icon-only': 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 = false,\n active,\n onClick,\n onContextMenu,\n onMouseDown,\n onMouseUp,\n onMouseEnter,\n onMouseLeave,\n onKeyDown,\n className,\n style,\n children,\n tabIndex,\n 'data-testid': dataTestId,\n 'aria-label': ariaLabel,\n ...rest\n } = props;\n\n const iconOnly = Boolean(icon && children == null);\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 !== undefined) {\n tooltipElem =\n typeof tooltip === 'string' ? <Tooltip>{tooltip}</Tooltip> : tooltip;\n }\n\n // use tooltip as arial-label for iconOnly buttons only\n // if tooltip is also a string and aria-label is not set\n let ariaLabelString = ariaLabel;\n if (\n ariaLabel === undefined &&\n iconOnly &&\n tooltip != null &&\n typeof tooltip === 'string'\n ) {\n ariaLabelString = 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 onContextMenu={onContextMenu}\n onMouseUp={onMouseUp}\n onMouseDown={onMouseDown}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n onKeyDown={onKeyDown}\n style={style}\n disabled={disabled}\n tabIndex={tabIndex}\n aria-label={ariaLabelString}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...rest}\n >\n {icon && iconElem}\n {children}\n {tooltip != null && !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 !== undefined && 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 === undefined && icon != null && children == null) {\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 == null && children == null) {\n return new Error('Icon is required if no children are provided');\n }\n\n if (\n children == null &&\n !React.isValidElement(icon) &&\n (icon == null || icon.iconName === '' || icon.iconName == null)\n ) {\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 onContextMenu: PropTypes.func,\n onMouseUp: PropTypes.func,\n onMouseDown: PropTypes.func,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n onKeyDown: PropTypes.func,\n tabIndex: PropTypes.number,\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 onContextMenu: undefined,\n onMouseUp: undefined,\n onMouseDown: undefined,\n onMouseEnter: undefined,\n onMouseLeave: undefined,\n onKeyDown: undefined,\n variant: undefined,\n tooltip: undefined,\n icon: undefined,\n disabled: false,\n active: undefined,\n tabIndex: undefined,\n children: undefined,\n className: undefined,\n style: {},\n 'data-testid': undefined,\n};\n\nexport default Button;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Button.js","names":["React","PropTypes","classNames","FontAwesomeIcon","Tooltip","jsx","_jsx","jsxs","_jsxs","BUTTON_KINDS","VARIANT_KINDS","getClassName","kind","iconOnly","getVariantClasses","Button","forwardRef","props","ref","variant","type","tooltip","icon","disabled","active","onClick","onContextMenu","onMouseDown","onMouseUp","onMouseEnter","onMouseLeave","onKeyDown","className","style","children","tabIndex","dataTestId","ariaLabel","rest","_objectWithoutProperties","_excluded","Boolean","btnClassName","variantClassName","iconElem","isValidElement","tooltipElem","undefined","ariaLabelString","button","_objectSpread","displayName","propTypes","oneOf","isRequired","Error","iconName","bool","func","number","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;\nexport type 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 IconOnlyButtonStringTooltip = BaseButtonProps & {\n tooltip: string;\n icon: IconDefinition | JSX.Element;\n children?: undefined;\n};\n\ntype IconOnlyButtonJsxTooltip = BaseButtonProps & {\n tooltip: JSX.Element;\n 'aria-label': string;\n icon: IconDefinition | JSX.Element;\n children?: undefined;\n};\n\ntype IconOnlyButton = IconOnlyButtonStringTooltip | IconOnlyButtonJsxTooltip;\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 'btn-link-icon-only': 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 = false,\n active,\n onClick,\n onContextMenu,\n onMouseDown,\n onMouseUp,\n onMouseEnter,\n onMouseLeave,\n onKeyDown,\n className,\n style,\n children,\n tabIndex,\n 'data-testid': dataTestId,\n 'aria-label': ariaLabel,\n ...rest\n } = props;\n\n const iconOnly = Boolean(icon && children == null);\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 !== undefined) {\n tooltipElem =\n typeof tooltip === 'string' ? <Tooltip>{tooltip}</Tooltip> : tooltip;\n }\n\n // use tooltip as arial-label for iconOnly buttons only\n // if tooltip is also a string and aria-label is not set\n let ariaLabelString = ariaLabel;\n if (\n ariaLabel === undefined &&\n iconOnly &&\n tooltip != null &&\n typeof tooltip === 'string'\n ) {\n ariaLabelString = 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 onContextMenu={onContextMenu}\n onMouseUp={onMouseUp}\n onMouseDown={onMouseDown}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n onKeyDown={onKeyDown}\n style={style}\n disabled={disabled}\n tabIndex={tabIndex}\n aria-label={ariaLabelString}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...rest}\n >\n {icon && iconElem}\n {children}\n {tooltip != null && !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 !== undefined && 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 === undefined && icon != null && children == null) {\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 == null && children == null) {\n return new Error('Icon is required if no children are provided');\n }\n\n if (\n children == null &&\n !React.isValidElement(icon) &&\n (icon == null || icon.iconName === '' || icon.iconName == null)\n ) {\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 onContextMenu: PropTypes.func,\n onMouseUp: PropTypes.func,\n onMouseDown: PropTypes.func,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n onKeyDown: PropTypes.func,\n tabIndex: PropTypes.number,\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 onContextMenu: undefined,\n onMouseUp: undefined,\n onMouseDown: undefined,\n onMouseEnter: undefined,\n onMouseLeave: undefined,\n onKeyDown: undefined,\n variant: undefined,\n tooltip: undefined,\n icon: undefined,\n disabled: false,\n active: undefined,\n tabIndex: 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,"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\nfunction 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,KAAK,MAAM,OAAO;AACzB,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAOC,SAAS,MAAM,YAAY;AAAC;AASnC,SAASC,
|
|
1
|
+
{"version":3,"file":"ButtonGroup.js","names":["React","classNames","PropTypes","jsx","_jsx","ButtonGroup","props","children","className","style","dataTestId","role","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\nfunction 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,KAAK,MAAM,OAAO;AACzB,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAOC,SAAS,MAAM,YAAY;AAAC,SAAAC,GAAA,IAAAC,IAAA;AASnC,SAASC,WAAWA,CAACC,KAAuB,EAAe;EACzD,IAAM;IAAEC,QAAQ;IAAEC,SAAS;IAAEC,KAAK;IAAE,aAAa,EAAEC;EAAW,CAAC,GAAGJ,KAAK;EAEvE,oBACEF,IAAA;IACEI,SAAS,EAAEP,UAAU,CAAC,WAAW,EAAEO,SAAS,CAAE;IAC9CC,KAAK,EAAEA,KAAM;IACbE,IAAI,EAAC,OAAO;IACZ,eAAaD,UAAW;IAAAH,QAAA,EAEvBA;EAAQ,CACN,CAAC;AAEV;AAEAF,WAAW,CAACO,WAAW,GAAG,aAAa;AAEvCP,WAAW,CAACQ,SAAS,GAAG;EACtBN,QAAQ,EAAEL,SAAS,CAACY,IAAI,CAACC,UAAU;EACnCP,SAAS,EAAEN,SAAS,CAACc,MAAM;EAC3BP,KAAK,EAAEP,SAAS,CAACe,MAAM;EACvB,aAAa,EAAEf,SAAS,CAACc;AAC3B,CAAC;AAEDX,WAAW,CAACa,YAAY,GAAG;EACzBV,SAAS,EAAE,IAAI;EACfC,KAAK,EAAE,CAAC,CAAC;EACT,aAAa,EAAEU;AACjB,CAAC;AAED,eAAed,WAAW"}
|
package/dist/ButtonOld.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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,KAAK,MAA6B,OAAO;AAChD,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAOC,SAAS,MAAM,YAAY;AAAC;AAUnC,IAAMC,MAAM,
|
|
1
|
+
{"version":3,"file":"ButtonOld.js","names":["React","classNames","PropTypes","jsx","_jsx","Button","forwardRef","props","ref","children","className","disabled","onClick","style","id","type","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,KAAK,MAA6B,OAAO;AAChD,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAOC,SAAS,MAAM,YAAY;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAUnC,IAAMC,MAAM,gBAAGL,KAAK,CAACM,UAAU,CAC7B,CAACC,KAAkB,EAAEC,GAAG,KAAK;EAC3B,IAAM;IAAEC,QAAQ;IAAEC,SAAS;IAAEC,QAAQ;IAAEC,OAAO;IAAEC,KAAK;IAAEC;EAAG,CAAC,GAAGP,KAAK;EACnE,oBACEH,IAAA;IACEI,GAAG,EAAEA,GAAI;IACTO,IAAI,EAAC,QAAQ;IACbL,SAAS,EAAET,UAAU,CAAC,KAAK,EAAES,SAAS,CAAE;IACxCE,OAAO,EAAEA,OAAQ;IACjBC,KAAK,EAAEA,KAAM;IACbF,QAAQ,EAAEA,QAAS;IACnBG,EAAE,EAAEA,EAAG;IAAAL,QAAA,EAENA;EAAQ,CACH,CAAC;AAEb,CACF,CAAC;AAEDJ,MAAM,CAACW,WAAW,GAAG,QAAQ;AAE7BX,MAAM,CAACY,SAAS,GAAG;EACjBR,QAAQ,EAAEP,SAAS,CAACgB,IAAI;EACxBR,SAAS,EAAER,SAAS,CAACiB,MAAM;EAC3BR,QAAQ,EAAET,SAAS,CAACkB,IAAI;EACxBR,OAAO,EAAEV,SAAS,CAACmB,IAAI;EACvBR,KAAK,EAAEX,SAAS,CAACoB,KAAK,CAAC,CAAC,CAAC,CAAC;EAC1BR,EAAE,EAAEZ,SAAS,CAACiB;AAChB,CAAC;AAEDd,MAAM,CAACkB,YAAY,GAAG;EACpBd,QAAQ,EAAE,IAAI;EACdC,SAAS,EAAE,EAAE;EACbC,QAAQ,EAAE,KAAK;EACfC,OAAO,EAAEA,CAAA,KAAM,IAAI;EACnBC,KAAK,EAAE,CAAC,CAAC;EACTC,EAAE,EAAE;AACN,CAAC;AAED,eAAeT,MAAM"}
|
package/dist/CardFlip.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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, { ReactNode, 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 */\nfunction CardFlip({\n className,\n isFlipped,\n children,\n 'data-testid': dataTestId,\n}: CardFlipProps): JSX.Element {\n const getComponent = (key: 0 | 1): ReactNode => {\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 != null) {\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,KAAK,IAAeC,WAAW,EAAEC,SAAS,EAAEC,MAAM,QAAQ,OAAO;AACxE,OAAOC,UAAU,MAAM,YAAY;AAAC;AAAA;AAAA;AAUpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,
|
|
1
|
+
{"version":3,"file":"CardFlip.js","names":["React","useCallback","useEffect","useRef","classNames","jsx","_jsx","jsxs","_jsxs","CardFlip","_ref","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","ref","onTransitionEnd"],"sources":["../src/CardFlip.tsx"],"sourcesContent":["import React, { ReactNode, 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 */\nfunction CardFlip({\n className,\n isFlipped,\n children,\n 'data-testid': dataTestId,\n}: CardFlipProps): JSX.Element {\n const getComponent = (key: 0 | 1): ReactNode => {\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 != null) {\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,KAAK,IAAeC,WAAW,EAAEC,SAAS,EAAEC,MAAM,QAAQ,OAAO;AACxE,OAAOC,UAAU,MAAM,YAAY;AAAC;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAAA,SAAAC,IAAA,IAAAC,KAAA;AAUpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,QAAQA,CAAAC,IAAA,EAKc;EAAA,IALb;IAChBC,SAAS;IACTC,SAAS;IACTC,QAAQ;IACR,aAAa,EAAEC;EACF,CAAC,GAAAJ,IAAA;EACd,IAAMK,YAAY,GAAIC,GAAU,IAAgB;IAC9C,IAAIH,QAAQ,CAACI,MAAM,KAAK,CAAC,EAAE;MACzB,MAAM,IAAIC,KAAK,CAAC,0CAA0C,CAAC;IAC7D;IACA,OAAOL,QAAQ,CAACG,GAAG,CAAC;EACtB,CAAC;EAED,IAAMG,KAAK,GAAGhB,MAAM,CAAiB,IAAI,CAAC;EAE1C,IAAMiB,eAAe,GAAGnB,WAAW,CAACoB,KAAK,IAAI;IAC3C,IAAIA,KAAK,CAACC,MAAM,KAAKD,KAAK,CAACE,aAAa,EAAE;MACxCC,QAAQ,CAACC,IAAI,CAACC,SAAS,CAACC,GAAG,CAAC,wBAAwB,CAAC;IACvD;EACF,CAAC,EAAE,EAAE,CAAC;EAEN,IAAMC,aAAa,GAAG3B,WAAW,CAACoB,KAAK,IAAI;IACzC,IAAIA,KAAK,CAACC,MAAM,KAAKD,KAAK,CAACE,aAAa,EAAE;MACxCC,QAAQ,CAACC,IAAI,CAACC,SAAS,CAACG,MAAM,CAAC,wBAAwB,CAAC;IAC1D;EACF,CAAC,EAAE,EAAE,CAAC;EAEN3B,SAAS,CACP,SAAS4B,mCAAmCA,CAAA,EAAG;IAC7C,IAAI,CAACX,KAAK,CAACY,OAAO,EAAE,MAAMb,KAAK,CAAC,eAAe,CAAC;IAChDC,KAAK,CAACY,OAAO,CAACC,gBAAgB,CAAC,iBAAiB,EAAEZ,eAAe,CAAC;IAElE,IAAMa,MAAM,GAAGd,KAAK,CAACY,OAAO;IAC5B,OAAO,SAASG,eAAeA,CAAA,EAAG;MAChC,IAAID,MAAM,IAAI,IAAI,EAAE;QAClB,OAAOA,MAAM,CAACE,mBAAmB,CAAC,iBAAiB,EAAEf,eAAe,CAAC;MACvE;IACF,CAAC;EACH,CAAC,EACD,CAACA,eAAe,CAClB,CAAC;EAED,oBACEZ,KAAA;IACEG,SAAS,EAAEP,UAAU,CAACO,SAAS,EAAE;MAC/B,uBAAuB,EAAEC,SAAS;MAClC,sBAAsB,EAAE,CAACA;IAC3B,CAAC,CAAE;IACH,eAAaE,UAAW;IAAAD,QAAA,gBAExBP,IAAA;MAAKK,SAAS,EAAC,iBAAiB;MAAAE,QAAA,EAAEE,YAAY,CAAC,CAAC;IAAC,CAAM,CAAC,eACxDT,IAAA;MACE8B,GAAG,EAAEjB,KAAM;MACXR,SAAS,EAAC,kBAAkB;MAC5B0B,eAAe,EAAET,aAAc;MAAAf,QAAA,EAE9BE,YAAY,CAAC,CAAC;IAAC,CACb,CAAC;EAAA,CACH,CAAC;AAEV;AAEA,eAAeN,QAAQ"}
|
package/dist/Checkbox.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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> =\n 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":"AAAA,OAAOA,KAAK,IAAIC,QAAQ,EAAEC,SAAS,EAAEC,WAAW,QAAQ,OAAO;AAC/D,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAOC,SAAS,MAAM,YAAY;AAClC,OAAOC,OAAO,MAAM,SAAS;AAC7B,SAASC,eAAe,QAAQ,wBAAwB;AAAC;AAAA;AAezD;AACA;AACA;AACA,IAAMC,QAAQ,
|
|
1
|
+
{"version":3,"file":"Checkbox.js","names":["React","useState","useEffect","useCallback","classNames","PropTypes","shortid","useForwardedRef","jsx","_jsx","jsxs","_jsxs","Checkbox","forwardRef","props","forwardedRef","checked","children","className","disabled","inputClassName","isInvalid","labelClassName","name","onChange","dataTestId","id","ref","setIndeterminateProperty","current","indeterminate","handleOnChange","event","type","htmlFor","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> =\n 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,"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","undefined","input","querySelector","focus","render","children","className","in","inTransition","dataTestId","enterActive","enterDone","exitActive","exitDone","state","collapse","string","bool","isRequired","node"],"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 !== undefined && autoFocusOnShow) {\n const input = elem.querySelector(\n 'input, select, textarea'\n ) as HTMLInputElement;\n\n if (input != null) {\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":";;;AAAA;AACA,OAAOA,KAAK,IAAIC,SAAS,QAAQ,OAAO;AACxC,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAOC,SAAS,MAAM,YAAY;AAClC,SAASC,aAAa,QAAQ,wBAAwB;AAAC;AAUvD,MAAMC,QAAQ,
|
|
1
|
+
{"version":3,"file":"Collapse.js","names":["React","Component","classNames","PropTypes","CSSTransition","jsx","_jsx","Collapse","handleEnter","elemParam","elem","style","height","handleEntering","concat","getHeight","handleExiting","handleExit","scrollBarWidth","scrollWidth","clientWidth","scrollHeight","constructor","props","handleEntered","bind","autoFocusOnShow","undefined","input","querySelector","focus","render","children","className","in","inTransition","dataTestId","enterActive","enterDone","exitActive","exitDone","onEnter","onEntering","onEntered","onExit","onExiting","timeout","state","collapse","_defineProperty","string","bool","isRequired","node"],"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 !== undefined && autoFocusOnShow) {\n const input = elem.querySelector(\n 'input, select, textarea'\n ) as HTMLInputElement;\n\n if (input != null) {\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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"}
|