@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.
Files changed (113) hide show
  1. package/dist/AutoCompleteInput.js.map +1 -1
  2. package/dist/AutoResizeTextarea.js.map +1 -1
  3. package/dist/BasicModal.js.map +1 -1
  4. package/dist/BulkActionBar.js.map +1 -1
  5. package/dist/Button.js.map +1 -1
  6. package/dist/ButtonGroup.js.map +1 -1
  7. package/dist/ButtonOld.js.map +1 -1
  8. package/dist/CardFlip.js.map +1 -1
  9. package/dist/Checkbox.js.map +1 -1
  10. package/dist/Collapse.js.map +1 -1
  11. package/dist/ComboBox.js.map +1 -1
  12. package/dist/CopyButton.js.map +1 -1
  13. package/dist/CustomTimeSelect.js.map +1 -1
  14. package/dist/DateInput.js.map +1 -1
  15. package/dist/DateInputUtils.js.map +1 -1
  16. package/dist/DateTimeInput.js.map +1 -1
  17. package/dist/DateTimeInputUtils.js.map +1 -1
  18. package/dist/DebouncedSearchInput.js.map +1 -1
  19. package/dist/DragUtils.js.map +1 -1
  20. package/dist/DraggableItemList.js.map +1 -1
  21. package/dist/EditableItemList.js.map +1 -1
  22. package/dist/HierarchicalCheckboxMenu.js.map +1 -1
  23. package/dist/ItemList.js.map +1 -1
  24. package/dist/ItemListItem.js.map +1 -1
  25. package/dist/LoadingOverlay.js.map +1 -1
  26. package/dist/LoadingSpinner.js.map +1 -1
  27. package/dist/MaskedInput.js.map +1 -1
  28. package/dist/MaskedInputUtils.js.map +1 -1
  29. package/dist/Option.js.map +1 -1
  30. package/dist/RadioGroup.js.map +1 -1
  31. package/dist/RadioItem.js.map +1 -1
  32. package/dist/RandomAreaPlotAnimation.js.map +1 -1
  33. package/dist/SearchInput.js.map +1 -1
  34. package/dist/SearchableCombobox.js.map +1 -1
  35. package/dist/Select.js.map +1 -1
  36. package/dist/SelectValueList.js.map +1 -1
  37. package/dist/SocketedButton.js.map +1 -1
  38. package/dist/SpectrumUtils.d.ts.map +1 -1
  39. package/dist/SpectrumUtils.js +3 -4
  40. package/dist/SpectrumUtils.js.map +1 -1
  41. package/dist/TableViewEmptyState.js.map +1 -1
  42. package/dist/TextWithTooltip.js.map +1 -1
  43. package/dist/ThemeExport.js.map +1 -1
  44. package/dist/TimeInput.js.map +1 -1
  45. package/dist/TimeSlider.js.map +1 -1
  46. package/dist/ToastNotification.js.map +1 -1
  47. package/dist/UISwitch.js.map +1 -1
  48. package/dist/ValidateLabelInput.js.map +1 -1
  49. package/dist/actions/ConfirmActionButton.js.map +1 -1
  50. package/dist/actions/IconActionButton.js.map +1 -1
  51. package/dist/context-actions/ContextActionUtils.js +2 -0
  52. package/dist/context-actions/ContextActionUtils.js.map +1 -1
  53. package/dist/context-actions/ContextActions.js.map +1 -1
  54. package/dist/context-actions/ContextMenu.js.map +1 -1
  55. package/dist/context-actions/ContextMenuItem.js.map +1 -1
  56. package/dist/context-actions/ContextMenuRoot.js.map +1 -1
  57. package/dist/context-actions/GlobalContextAction.js.map +1 -1
  58. package/dist/context-actions/GlobalContextActions.js.map +1 -1
  59. package/dist/declaration.d.js.map +1 -1
  60. package/dist/dialogs/ActionButtonDialogTrigger.js.map +1 -1
  61. package/dist/dialogs/ConfirmationDialog.js.map +1 -1
  62. package/dist/menu-actions/DropdownMenu.js.map +1 -1
  63. package/dist/menu-actions/Menu.js.map +1 -1
  64. package/dist/modal/DebouncedModal.js.map +1 -1
  65. package/dist/modal/InfoModal.js.map +1 -1
  66. package/dist/modal/Modal.js.map +1 -1
  67. package/dist/modal/ModalBody.js.map +1 -1
  68. package/dist/modal/ModalFooter.js.map +1 -1
  69. package/dist/modal/ModalHeader.js.map +1 -1
  70. package/dist/navigation/Menu.js.map +1 -1
  71. package/dist/navigation/MenuItem.js.map +1 -1
  72. package/dist/navigation/Page.js.map +1 -1
  73. package/dist/navigation/Stack.js.map +1 -1
  74. package/dist/popper/Popper.js +3 -0
  75. package/dist/popper/Popper.js.map +1 -1
  76. package/dist/popper/Tooltip.js +3 -0
  77. package/dist/popper/Tooltip.js.map +1 -1
  78. package/dist/shortcuts/Shortcut.js.map +1 -1
  79. package/dist/shortcuts/ShortcutRegistry.js.map +1 -1
  80. package/dist/theme/SpectrumThemeProvider.d.ts +17 -0
  81. package/dist/theme/SpectrumThemeProvider.d.ts.map +1 -0
  82. package/dist/theme/SpectrumThemeProvider.js +31 -0
  83. package/dist/theme/SpectrumThemeProvider.js.map +1 -0
  84. package/dist/theme/ThemeProvider.d.ts.map +1 -1
  85. package/dist/theme/ThemeProvider.js +26 -12
  86. package/dist/theme/ThemeProvider.js.map +1 -1
  87. package/dist/theme/ThemeUtils.js.map +1 -1
  88. package/dist/theme/theme-dark/index.d.ts +24 -0
  89. package/dist/theme/theme-dark/index.d.ts.map +1 -1
  90. package/dist/theme/theme-dark/index.js +26 -1
  91. package/dist/theme/theme-dark/index.js.map +1 -1
  92. package/dist/theme/theme-dark/theme-dark-components.css +8 -0
  93. package/dist/theme/theme-dark/theme-dark-components.css.map +1 -0
  94. package/dist/theme/theme-dark/theme-dark-semantic-editor.css +3 -1
  95. package/dist/theme/theme-dark/theme-dark-semantic-editor.css.map +1 -1
  96. package/dist/theme/theme-dark/theme-dark-semantic.css +51 -4
  97. package/dist/theme/theme-dark/theme-dark-semantic.css.map +1 -1
  98. package/dist/theme/theme-spectrum/index.d.ts +16 -0
  99. package/dist/theme/theme-spectrum/index.d.ts.map +1 -0
  100. package/dist/theme/theme-spectrum/index.js +22 -0
  101. package/dist/theme/theme-spectrum/index.js.map +1 -0
  102. package/dist/theme/theme-spectrum/theme-spectrum-alias.module.css +192 -0
  103. package/dist/theme/theme-spectrum/theme-spectrum-alias.module.css.map +1 -0
  104. package/dist/theme/theme-spectrum/theme-spectrum-overrides.module.css +7 -0
  105. package/dist/theme/theme-spectrum/theme-spectrum-overrides.module.css.map +1 -0
  106. package/dist/theme/theme-spectrum/theme-spectrum-palette.module.css +211 -0
  107. package/dist/theme/theme-spectrum/theme-spectrum-palette.module.css.map +1 -0
  108. package/dist/theme/useTheme.js.map +1 -1
  109. package/package.json +7 -7
  110. package/dist/SpectrumThemeDark.module.css +0 -9
  111. package/dist/SpectrumThemeDark.module.css.map +0 -1
  112. package/dist/SpectrumThemeLight.module.css +0 -9
  113. package/dist/SpectrumThemeLight.module.css.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ComboBox.js","names":["React","Component","PropTypes","FontAwesomeIcon","vsTriangleDown","memoize","classNames","SearchInput","Popper","MENU_NAVIGATION_DIRECTION","ComboBox","constructor","props","options","input","filter","option","title","toLowerCase","indexOf","value","state","filteredOptions","keyboardOptionIndex","menuIsOpen","inputWidth","toggleMenu","bind","handleMenuKeyDown","handleMenuBlur","closeMenu","handleInputChange","handleInputKeyDown","handleInputBlur","handleFilterChange","handleOptionClick","handleOptionFocus","handleMenuOpened","handleMenuExited","popper","createRef","cbContainer","toggleButton","menuContainer","searchInput","componentDidUpdate","scrollOptionIntoView","setInputWidth","current","setState","getBoundingClientRect","width","focus","resetValue","updateInputValue","onChange","handleResize","event","menuOptions","key","stopPropagation","preventDefault","handleMenuNavigation","UP","DOWN","shiftKey","length","direction","menuOptionsLength","delta","onEnter","openMenu","target","optionIndex","Number","currentTarget","getCachedFilteredOptions","scheduleUpdate","relatedTarget","Element","element","contains","hide","updateKeyboardIndex","window","requestAnimationFrame","show","focusInput","valueIndex","findIndex","activeOption","querySelector","HTMLElement","scrollIntoView","block","inline","renderMenuElement","searchPlaceholder","renderOptions","map","index","render","inputPlaceholder","disabled","className","defaultValue","spellCheck","dataTestId","popperOptions","placement","modifiers","preventOverflow","enabled","undefined","arrayOf","shape","string","isRequired","func","bool"],"sources":["../src/ComboBox.tsx"],"sourcesContent":["/**\n * Combobox that combines a input box with a searchable dropdown menu\n *\n * props:\n * @param {array} options :[{\n * title: 'option title for display',\n * value: 'option value' //option value\n * }]\n * @param {string} inputPlaceholder place holder for the input box\n * @param {string} searchPlaceholder place holder for the search box in drop down search box\n * @param {boolean} disabled disable both input & drop down\n *\n *\n */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsTriangleDown } from '@deephaven/icons';\nimport memoize from 'memoizee';\nimport classNames from 'classnames';\nimport { PopperOptions } from 'popper.js';\nimport SearchInput from './SearchInput';\nimport { Popper } from './popper';\n\nimport './ComboBox.scss';\n\ninterface ComboBoxOption {\n title: string;\n value: string;\n}\n\ninterface ComboBoxProps {\n options: ComboBoxOption[];\n popperOptions: PopperOptions;\n onChange(value: string): void;\n inputPlaceholder: string;\n searchPlaceholder: string;\n disabled: boolean;\n className: string;\n defaultValue: string;\n spellCheck: boolean;\n onEnter(): void;\n 'data-testid'?: string;\n}\n\ninterface ComboBoxState {\n value: string;\n filter: string;\n filteredOptions: ComboBoxOption[];\n keyboardOptionIndex: number;\n menuIsOpen: boolean;\n inputWidth: number;\n}\n\nenum MENU_NAVIGATION_DIRECTION {\n UP = 'UP',\n DOWN = 'DOWN',\n}\n\nclass ComboBox extends Component<ComboBoxProps, ComboBoxState> {\n static MENU_NAVIGATION_DIRECTION = MENU_NAVIGATION_DIRECTION;\n\n static DROP_DOWN_MENU_HEIGHT = 200;\n\n static propTypes = {\n options: PropTypes.arrayOf(\n PropTypes.shape({\n title: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n })\n ).isRequired,\n popperOptions: PropTypes.shape({\n title: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n }),\n onChange: PropTypes.func,\n inputPlaceholder: PropTypes.string,\n searchPlaceholder: PropTypes.string,\n disabled: PropTypes.bool,\n className: PropTypes.string,\n defaultValue: PropTypes.string,\n spellCheck: PropTypes.bool,\n onEnter: PropTypes.func,\n 'data-testid': PropTypes.string,\n };\n\n static defaultProps = {\n onChange(): void {\n // no-op\n },\n inputPlaceholder: '',\n searchPlaceholder: 'Search',\n disabled: false,\n className: '',\n defaultValue: '',\n popperOptions: null,\n spellCheck: true,\n onEnter(): void {\n // no-op\n },\n 'data-testid': undefined,\n };\n\n constructor(props: ComboBoxProps) {\n super(props);\n this.state = {\n value: '',\n filter: '',\n filteredOptions: props.options,\n keyboardOptionIndex: -1,\n menuIsOpen: false,\n inputWidth: 100,\n };\n\n this.toggleMenu = this.toggleMenu.bind(this);\n this.handleMenuKeyDown = this.handleMenuKeyDown.bind(this);\n this.handleMenuBlur = this.handleMenuBlur.bind(this);\n this.closeMenu = this.closeMenu.bind(this);\n\n this.handleInputChange = this.handleInputChange.bind(this);\n this.handleInputKeyDown = this.handleInputKeyDown.bind(this);\n this.handleInputBlur = this.handleInputBlur.bind(this);\n this.handleFilterChange = this.handleFilterChange.bind(this);\n\n this.handleOptionClick = this.handleOptionClick.bind(this);\n this.handleOptionFocus = this.handleOptionFocus.bind(this);\n\n this.handleMenuOpened = this.handleMenuOpened.bind(this);\n this.handleMenuExited = this.handleMenuExited.bind(this);\n\n this.popper = React.createRef();\n this.cbContainer = React.createRef();\n this.toggleButton = React.createRef();\n this.menuContainer = React.createRef();\n this.input = React.createRef();\n this.searchInput = React.createRef();\n }\n\n componentDidUpdate(): void {\n const { menuIsOpen, keyboardOptionIndex } = this.state;\n if (menuIsOpen && keyboardOptionIndex >= 0) {\n this.scrollOptionIntoView();\n }\n }\n\n popper: React.RefObject<Popper>;\n\n cbContainer: React.RefObject<HTMLDivElement>;\n\n toggleButton: React.RefObject<HTMLButtonElement>;\n\n menuContainer: React.RefObject<HTMLDivElement>;\n\n input: React.RefObject<HTMLInputElement>;\n\n searchInput: React.RefObject<SearchInput>;\n\n setInputWidth(): void {\n if (this.cbContainer.current) {\n this.setState({\n inputWidth: this.cbContainer.current.getBoundingClientRect().width,\n });\n }\n }\n\n getCachedFilteredOptions = memoize(\n (options: ComboBoxOption[], input: string) =>\n options.filter(\n option =>\n option.title.toLowerCase().indexOf(input.toLowerCase()) >= 0 ||\n option.value.toLowerCase().indexOf(input.toLowerCase()) >= 0\n )\n );\n\n focus(): void {\n this.input.current?.focus();\n }\n\n resetValue(): void {\n this.setState({ value: '' });\n }\n\n updateInputValue(value: string): void {\n const { onChange } = this.props;\n this.setState({ value });\n onChange(value);\n }\n\n handleResize(): void {\n this.setInputWidth();\n }\n\n handleMenuKeyDown(event: React.KeyboardEvent): void {\n const { filter, filteredOptions, keyboardOptionIndex } = this.state;\n const { options } = this.props;\n const menuOptions = filter ? filteredOptions : options;\n\n switch (event.key) {\n case 'Enter':\n if (menuOptions[keyboardOptionIndex]?.value != null) {\n this.updateInputValue(menuOptions[keyboardOptionIndex].value);\n }\n this.closeMenu();\n this.input.current?.focus();\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'ArrowUp':\n this.handleMenuNavigation(ComboBox.MENU_NAVIGATION_DIRECTION.UP);\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'ArrowDown':\n this.handleMenuNavigation(ComboBox.MENU_NAVIGATION_DIRECTION.DOWN);\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'Escape':\n if (filter !== '') {\n this.setState({ filter: '' });\n event.stopPropagation(); // Don't trigger blur on input element\n } else {\n this.closeMenu();\n }\n break;\n case 'Tab':\n if (!event.shiftKey && keyboardOptionIndex === menuOptions.length - 1) {\n this.closeMenu();\n }\n break;\n default:\n break;\n }\n }\n\n handleMenuNavigation(direction: MENU_NAVIGATION_DIRECTION): void {\n const { filter, filteredOptions, keyboardOptionIndex } = this.state;\n const { options } = this.props;\n const menuOptions = filter ? filteredOptions : options;\n const menuOptionsLength = menuOptions.length;\n let delta = 0;\n switch (direction) {\n case ComboBox.MENU_NAVIGATION_DIRECTION.UP:\n delta = -1;\n break;\n case ComboBox.MENU_NAVIGATION_DIRECTION.DOWN:\n delta = 1;\n break;\n }\n\n if (delta !== 0) {\n this.setState({\n keyboardOptionIndex:\n (keyboardOptionIndex + delta + menuOptionsLength) % menuOptionsLength,\n });\n }\n }\n\n handleInputKeyDown(event: React.KeyboardEvent): void {\n const { onEnter } = this.props;\n const { menuIsOpen } = this.state;\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n if (!menuIsOpen) {\n this.openMenu();\n }\n } else if (event.key === 'Enter') {\n onEnter();\n }\n }\n\n handleInputChange(event: React.ChangeEvent<HTMLInputElement>): void {\n this.updateInputValue(event.target.value);\n }\n\n handleOptionClick(event: React.MouseEvent<HTMLButtonElement>): void {\n const optionIndex = Number(event.currentTarget.value);\n const { filter, filteredOptions } = this.state;\n const { options } = this.props;\n const menuOptions = filter ? filteredOptions : options;\n\n this.updateInputValue(menuOptions[optionIndex].value);\n this.closeMenu();\n this.input.current?.focus();\n }\n\n handleOptionFocus(event: React.FocusEvent<HTMLButtonElement>): void {\n this.setState({ keyboardOptionIndex: Number(event.target.value) });\n }\n\n handleFilterChange(event: React.ChangeEvent<HTMLInputElement>): void {\n const { options } = this.props;\n const filter = event.target.value;\n const filteredOptions = this.getCachedFilteredOptions(options, filter);\n\n this.setState({\n filter,\n filteredOptions,\n keyboardOptionIndex: 0,\n });\n this.popper.current?.scheduleUpdate();\n }\n\n handleMenuBlur(event: React.FocusEvent): void {\n // close if menu blurs, unless its an internal option or the toggleButton which triggers close via click\n if (\n (event.relatedTarget instanceof Element &&\n this.popper.current != null &&\n this.popper.current.element.contains(event.relatedTarget)) ||\n event.relatedTarget === this.toggleButton.current\n ) {\n return;\n }\n this.closeMenu(false);\n }\n\n handleInputBlur(event: React.FocusEvent<HTMLInputElement>): void {\n // if blur event is caused by focusing on search input or open menu by keyboard, don't close the menu\n const { menuIsOpen } = this.state;\n if (\n menuIsOpen &&\n event.relatedTarget instanceof Element &&\n this.popper.current != null &&\n this.popper.current.element.contains(event.relatedTarget)\n ) {\n return;\n }\n this.closeMenu(false);\n }\n\n handleMenuOpened(): void {\n this.scrollOptionIntoView();\n this.searchInput.current?.focus();\n }\n\n handleMenuExited(): void {\n const { menuIsOpen } = this.state;\n if (menuIsOpen) {\n this.setState({ menuIsOpen: false });\n this.popper.current?.hide();\n }\n this.setState({ filter: '' });\n }\n\n toggleMenu(event: React.MouseEvent<HTMLButtonElement>): void {\n const { menuIsOpen } = this.state;\n if (menuIsOpen) {\n this.closeMenu();\n } else {\n this.openMenu();\n }\n event.stopPropagation();\n }\n\n openMenu(): void {\n this.updateKeyboardIndex();\n this.setInputWidth();\n this.setState({ menuIsOpen: true });\n\n window.requestAnimationFrame(() => {\n this.popper.current?.show();\n });\n }\n\n closeMenu(focusInput = true): void {\n this.setState({ menuIsOpen: false });\n if (focusInput) {\n this.input.current?.focus();\n }\n this.popper.current?.hide();\n }\n\n updateKeyboardIndex(): void {\n const { value, filter, filteredOptions } = this.state;\n const { options } = this.props;\n const menuOptions = filter ? filteredOptions : options;\n const valueIndex = menuOptions.findIndex(option => option.value === value);\n this.setState({ keyboardOptionIndex: valueIndex });\n }\n\n scrollOptionIntoView(): void {\n const activeOption = this.menuContainer.current?.querySelector(\n '.cb-option-btn.keyboard-active'\n );\n if (activeOption instanceof HTMLElement) {\n activeOption.scrollIntoView({\n block: 'nearest',\n inline: 'nearest',\n });\n }\n }\n\n renderMenuElement(): JSX.Element {\n const { searchPlaceholder } = this.props;\n const { filter, inputWidth } = this.state;\n return (\n <div\n className=\"cb-menu-container\"\n ref={this.menuContainer}\n role=\"presentation\"\n onKeyDown={this.handleMenuKeyDown}\n onClick={event => {\n event.stopPropagation();\n }}\n style={{ width: inputWidth }}\n onBlur={this.handleMenuBlur}\n >\n <div className=\"cb-search-input-container\">\n <SearchInput\n value={filter}\n ref={this.searchInput}\n onChange={this.handleFilterChange}\n className=\"cb-search-input\"\n placeholder={searchPlaceholder}\n />\n </div>\n <div className=\"cb-options-container\">\n <div className=\"cb-options\">{this.renderOptions()}</div>\n </div>\n </div>\n );\n }\n\n renderOptions(): React.ReactNode {\n const { options } = this.props;\n const { keyboardOptionIndex, filter, filteredOptions } = this.state;\n const menuOptions = filter ? filteredOptions : options;\n\n return menuOptions.map((option, index) => {\n const key = `option-${index}-${option.value}`;\n return (\n <button\n key={key}\n type=\"button\"\n value={index}\n className={classNames('cb-option-btn', {\n 'keyboard-active': keyboardOptionIndex === index,\n })}\n onClick={this.handleOptionClick}\n onFocus={this.handleOptionFocus}\n >\n {option.title}\n </button>\n );\n });\n }\n\n render(): JSX.Element {\n const {\n options,\n inputPlaceholder,\n disabled,\n className,\n defaultValue,\n spellCheck,\n 'data-testid': dataTestId,\n } = this.props;\n const { value } = this.state;\n let { popperOptions } = this.props;\n popperOptions = {\n placement: 'bottom-end',\n modifiers: {\n preventOverflow: { enabled: false },\n },\n ...popperOptions,\n };\n\n return (\n <div className=\"input-group cb-container\" ref={this.cbContainer}>\n <input\n value={value || defaultValue}\n className={classNames('form-control', className, 'cb-input')}\n ref={this.input}\n onChange={this.handleInputChange}\n placeholder={\n inputPlaceholder ||\n (options[0] != null ? options[0].title : undefined)\n }\n disabled={disabled}\n onBlur={this.handleInputBlur}\n onKeyDown={this.handleInputKeyDown}\n spellCheck={spellCheck}\n data-testid={\n dataTestId !== undefined ? `${dataTestId}-input` : undefined\n }\n />\n <div className=\"input-group-append cb-dropdown\">\n <button\n type=\"button\"\n className=\"btn cb-btn form-control\"\n ref={this.toggleButton}\n onClick={this.toggleMenu}\n onKeyDown={this.handleInputKeyDown}\n disabled={disabled}\n data-testid={\n dataTestId !== undefined ? `${dataTestId}-btn` : undefined\n }\n >\n <FontAwesomeIcon icon={vsTriangleDown} />\n <Popper\n ref={this.popper}\n options={popperOptions}\n className={classNames('combobox interactive')}\n onEntered={this.handleMenuOpened}\n onExited={this.handleMenuExited}\n >\n {this.renderMenuElement()}\n </Popper>\n </button>\n </div>\n </div>\n );\n }\n}\n\nexport default ComboBox;\n"],"mappings":"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"}
1
+ {"version":3,"file":"ComboBox.js","names":["React","Component","PropTypes","FontAwesomeIcon","vsTriangleDown","memoize","classNames","SearchInput","Popper","jsx","_jsx","jsxs","_jsxs","MENU_NAVIGATION_DIRECTION","ComboBox","constructor","props","_defineProperty","options","input","filter","option","title","toLowerCase","indexOf","value","state","filteredOptions","keyboardOptionIndex","menuIsOpen","inputWidth","toggleMenu","bind","handleMenuKeyDown","handleMenuBlur","closeMenu","handleInputChange","handleInputKeyDown","handleInputBlur","handleFilterChange","handleOptionClick","handleOptionFocus","handleMenuOpened","handleMenuExited","popper","createRef","cbContainer","toggleButton","menuContainer","searchInput","componentDidUpdate","scrollOptionIntoView","setInputWidth","current","setState","getBoundingClientRect","width","focus","_this$input$current","resetValue","updateInputValue","onChange","handleResize","event","_menuOptions$keyboard","_this$input$current2","menuOptions","key","stopPropagation","preventDefault","handleMenuNavigation","UP","DOWN","shiftKey","length","direction","menuOptionsLength","delta","onEnter","openMenu","target","_this$input$current3","optionIndex","Number","currentTarget","_this$popper$current","getCachedFilteredOptions","scheduleUpdate","relatedTarget","Element","element","contains","_this$searchInput$cur","_this$popper$current2","hide","updateKeyboardIndex","window","requestAnimationFrame","_this$popper$current3","show","_this$popper$current4","focusInput","arguments","undefined","_this$input$current4","valueIndex","findIndex","_this$menuContainer$c","activeOption","querySelector","HTMLElement","scrollIntoView","block","inline","renderMenuElement","searchPlaceholder","className","ref","role","onKeyDown","onClick","style","onBlur","children","placeholder","renderOptions","map","index","concat","type","onFocus","render","inputPlaceholder","disabled","defaultValue","spellCheck","dataTestId","popperOptions","_objectSpread","placement","modifiers","preventOverflow","enabled","icon","onEntered","onExited","arrayOf","shape","string","isRequired","func","bool"],"sources":["../src/ComboBox.tsx"],"sourcesContent":["/**\n * Combobox that combines a input box with a searchable dropdown menu\n *\n * props:\n * @param {array} options :[{\n * title: 'option title for display',\n * value: 'option value' //option value\n * }]\n * @param {string} inputPlaceholder place holder for the input box\n * @param {string} searchPlaceholder place holder for the search box in drop down search box\n * @param {boolean} disabled disable both input & drop down\n *\n *\n */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsTriangleDown } from '@deephaven/icons';\nimport memoize from 'memoizee';\nimport classNames from 'classnames';\nimport { PopperOptions } from 'popper.js';\nimport SearchInput from './SearchInput';\nimport { Popper } from './popper';\n\nimport './ComboBox.scss';\n\ninterface ComboBoxOption {\n title: string;\n value: string;\n}\n\ninterface ComboBoxProps {\n options: ComboBoxOption[];\n popperOptions: PopperOptions;\n onChange(value: string): void;\n inputPlaceholder: string;\n searchPlaceholder: string;\n disabled: boolean;\n className: string;\n defaultValue: string;\n spellCheck: boolean;\n onEnter(): void;\n 'data-testid'?: string;\n}\n\ninterface ComboBoxState {\n value: string;\n filter: string;\n filteredOptions: ComboBoxOption[];\n keyboardOptionIndex: number;\n menuIsOpen: boolean;\n inputWidth: number;\n}\n\nenum MENU_NAVIGATION_DIRECTION {\n UP = 'UP',\n DOWN = 'DOWN',\n}\n\nclass ComboBox extends Component<ComboBoxProps, ComboBoxState> {\n static MENU_NAVIGATION_DIRECTION = MENU_NAVIGATION_DIRECTION;\n\n static DROP_DOWN_MENU_HEIGHT = 200;\n\n static propTypes = {\n options: PropTypes.arrayOf(\n PropTypes.shape({\n title: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n })\n ).isRequired,\n popperOptions: PropTypes.shape({\n title: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n }),\n onChange: PropTypes.func,\n inputPlaceholder: PropTypes.string,\n searchPlaceholder: PropTypes.string,\n disabled: PropTypes.bool,\n className: PropTypes.string,\n defaultValue: PropTypes.string,\n spellCheck: PropTypes.bool,\n onEnter: PropTypes.func,\n 'data-testid': PropTypes.string,\n };\n\n static defaultProps = {\n onChange(): void {\n // no-op\n },\n inputPlaceholder: '',\n searchPlaceholder: 'Search',\n disabled: false,\n className: '',\n defaultValue: '',\n popperOptions: null,\n spellCheck: true,\n onEnter(): void {\n // no-op\n },\n 'data-testid': undefined,\n };\n\n constructor(props: ComboBoxProps) {\n super(props);\n this.state = {\n value: '',\n filter: '',\n filteredOptions: props.options,\n keyboardOptionIndex: -1,\n menuIsOpen: false,\n inputWidth: 100,\n };\n\n this.toggleMenu = this.toggleMenu.bind(this);\n this.handleMenuKeyDown = this.handleMenuKeyDown.bind(this);\n this.handleMenuBlur = this.handleMenuBlur.bind(this);\n this.closeMenu = this.closeMenu.bind(this);\n\n this.handleInputChange = this.handleInputChange.bind(this);\n this.handleInputKeyDown = this.handleInputKeyDown.bind(this);\n this.handleInputBlur = this.handleInputBlur.bind(this);\n this.handleFilterChange = this.handleFilterChange.bind(this);\n\n this.handleOptionClick = this.handleOptionClick.bind(this);\n this.handleOptionFocus = this.handleOptionFocus.bind(this);\n\n this.handleMenuOpened = this.handleMenuOpened.bind(this);\n this.handleMenuExited = this.handleMenuExited.bind(this);\n\n this.popper = React.createRef();\n this.cbContainer = React.createRef();\n this.toggleButton = React.createRef();\n this.menuContainer = React.createRef();\n this.input = React.createRef();\n this.searchInput = React.createRef();\n }\n\n componentDidUpdate(): void {\n const { menuIsOpen, keyboardOptionIndex } = this.state;\n if (menuIsOpen && keyboardOptionIndex >= 0) {\n this.scrollOptionIntoView();\n }\n }\n\n popper: React.RefObject<Popper>;\n\n cbContainer: React.RefObject<HTMLDivElement>;\n\n toggleButton: React.RefObject<HTMLButtonElement>;\n\n menuContainer: React.RefObject<HTMLDivElement>;\n\n input: React.RefObject<HTMLInputElement>;\n\n searchInput: React.RefObject<SearchInput>;\n\n setInputWidth(): void {\n if (this.cbContainer.current) {\n this.setState({\n inputWidth: this.cbContainer.current.getBoundingClientRect().width,\n });\n }\n }\n\n getCachedFilteredOptions = memoize(\n (options: ComboBoxOption[], input: string) =>\n options.filter(\n option =>\n option.title.toLowerCase().indexOf(input.toLowerCase()) >= 0 ||\n option.value.toLowerCase().indexOf(input.toLowerCase()) >= 0\n )\n );\n\n focus(): void {\n this.input.current?.focus();\n }\n\n resetValue(): void {\n this.setState({ value: '' });\n }\n\n updateInputValue(value: string): void {\n const { onChange } = this.props;\n this.setState({ value });\n onChange(value);\n }\n\n handleResize(): void {\n this.setInputWidth();\n }\n\n handleMenuKeyDown(event: React.KeyboardEvent): void {\n const { filter, filteredOptions, keyboardOptionIndex } = this.state;\n const { options } = this.props;\n const menuOptions = filter ? filteredOptions : options;\n\n switch (event.key) {\n case 'Enter':\n if (menuOptions[keyboardOptionIndex]?.value != null) {\n this.updateInputValue(menuOptions[keyboardOptionIndex].value);\n }\n this.closeMenu();\n this.input.current?.focus();\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'ArrowUp':\n this.handleMenuNavigation(ComboBox.MENU_NAVIGATION_DIRECTION.UP);\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'ArrowDown':\n this.handleMenuNavigation(ComboBox.MENU_NAVIGATION_DIRECTION.DOWN);\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'Escape':\n if (filter !== '') {\n this.setState({ filter: '' });\n event.stopPropagation(); // Don't trigger blur on input element\n } else {\n this.closeMenu();\n }\n break;\n case 'Tab':\n if (!event.shiftKey && keyboardOptionIndex === menuOptions.length - 1) {\n this.closeMenu();\n }\n break;\n default:\n break;\n }\n }\n\n handleMenuNavigation(direction: MENU_NAVIGATION_DIRECTION): void {\n const { filter, filteredOptions, keyboardOptionIndex } = this.state;\n const { options } = this.props;\n const menuOptions = filter ? filteredOptions : options;\n const menuOptionsLength = menuOptions.length;\n let delta = 0;\n switch (direction) {\n case ComboBox.MENU_NAVIGATION_DIRECTION.UP:\n delta = -1;\n break;\n case ComboBox.MENU_NAVIGATION_DIRECTION.DOWN:\n delta = 1;\n break;\n }\n\n if (delta !== 0) {\n this.setState({\n keyboardOptionIndex:\n (keyboardOptionIndex + delta + menuOptionsLength) % menuOptionsLength,\n });\n }\n }\n\n handleInputKeyDown(event: React.KeyboardEvent): void {\n const { onEnter } = this.props;\n const { menuIsOpen } = this.state;\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n if (!menuIsOpen) {\n this.openMenu();\n }\n } else if (event.key === 'Enter') {\n onEnter();\n }\n }\n\n handleInputChange(event: React.ChangeEvent<HTMLInputElement>): void {\n this.updateInputValue(event.target.value);\n }\n\n handleOptionClick(event: React.MouseEvent<HTMLButtonElement>): void {\n const optionIndex = Number(event.currentTarget.value);\n const { filter, filteredOptions } = this.state;\n const { options } = this.props;\n const menuOptions = filter ? filteredOptions : options;\n\n this.updateInputValue(menuOptions[optionIndex].value);\n this.closeMenu();\n this.input.current?.focus();\n }\n\n handleOptionFocus(event: React.FocusEvent<HTMLButtonElement>): void {\n this.setState({ keyboardOptionIndex: Number(event.target.value) });\n }\n\n handleFilterChange(event: React.ChangeEvent<HTMLInputElement>): void {\n const { options } = this.props;\n const filter = event.target.value;\n const filteredOptions = this.getCachedFilteredOptions(options, filter);\n\n this.setState({\n filter,\n filteredOptions,\n keyboardOptionIndex: 0,\n });\n this.popper.current?.scheduleUpdate();\n }\n\n handleMenuBlur(event: React.FocusEvent): void {\n // close if menu blurs, unless its an internal option or the toggleButton which triggers close via click\n if (\n (event.relatedTarget instanceof Element &&\n this.popper.current != null &&\n this.popper.current.element.contains(event.relatedTarget)) ||\n event.relatedTarget === this.toggleButton.current\n ) {\n return;\n }\n this.closeMenu(false);\n }\n\n handleInputBlur(event: React.FocusEvent<HTMLInputElement>): void {\n // if blur event is caused by focusing on search input or open menu by keyboard, don't close the menu\n const { menuIsOpen } = this.state;\n if (\n menuIsOpen &&\n event.relatedTarget instanceof Element &&\n this.popper.current != null &&\n this.popper.current.element.contains(event.relatedTarget)\n ) {\n return;\n }\n this.closeMenu(false);\n }\n\n handleMenuOpened(): void {\n this.scrollOptionIntoView();\n this.searchInput.current?.focus();\n }\n\n handleMenuExited(): void {\n const { menuIsOpen } = this.state;\n if (menuIsOpen) {\n this.setState({ menuIsOpen: false });\n this.popper.current?.hide();\n }\n this.setState({ filter: '' });\n }\n\n toggleMenu(event: React.MouseEvent<HTMLButtonElement>): void {\n const { menuIsOpen } = this.state;\n if (menuIsOpen) {\n this.closeMenu();\n } else {\n this.openMenu();\n }\n event.stopPropagation();\n }\n\n openMenu(): void {\n this.updateKeyboardIndex();\n this.setInputWidth();\n this.setState({ menuIsOpen: true });\n\n window.requestAnimationFrame(() => {\n this.popper.current?.show();\n });\n }\n\n closeMenu(focusInput = true): void {\n this.setState({ menuIsOpen: false });\n if (focusInput) {\n this.input.current?.focus();\n }\n this.popper.current?.hide();\n }\n\n updateKeyboardIndex(): void {\n const { value, filter, filteredOptions } = this.state;\n const { options } = this.props;\n const menuOptions = filter ? filteredOptions : options;\n const valueIndex = menuOptions.findIndex(option => option.value === value);\n this.setState({ keyboardOptionIndex: valueIndex });\n }\n\n scrollOptionIntoView(): void {\n const activeOption = this.menuContainer.current?.querySelector(\n '.cb-option-btn.keyboard-active'\n );\n if (activeOption instanceof HTMLElement) {\n activeOption.scrollIntoView({\n block: 'nearest',\n inline: 'nearest',\n });\n }\n }\n\n renderMenuElement(): JSX.Element {\n const { searchPlaceholder } = this.props;\n const { filter, inputWidth } = this.state;\n return (\n <div\n className=\"cb-menu-container\"\n ref={this.menuContainer}\n role=\"presentation\"\n onKeyDown={this.handleMenuKeyDown}\n onClick={event => {\n event.stopPropagation();\n }}\n style={{ width: inputWidth }}\n onBlur={this.handleMenuBlur}\n >\n <div className=\"cb-search-input-container\">\n <SearchInput\n value={filter}\n ref={this.searchInput}\n onChange={this.handleFilterChange}\n className=\"cb-search-input\"\n placeholder={searchPlaceholder}\n />\n </div>\n <div className=\"cb-options-container\">\n <div className=\"cb-options\">{this.renderOptions()}</div>\n </div>\n </div>\n );\n }\n\n renderOptions(): React.ReactNode {\n const { options } = this.props;\n const { keyboardOptionIndex, filter, filteredOptions } = this.state;\n const menuOptions = filter ? filteredOptions : options;\n\n return menuOptions.map((option, index) => {\n const key = `option-${index}-${option.value}`;\n return (\n <button\n key={key}\n type=\"button\"\n value={index}\n className={classNames('cb-option-btn', {\n 'keyboard-active': keyboardOptionIndex === index,\n })}\n onClick={this.handleOptionClick}\n onFocus={this.handleOptionFocus}\n >\n {option.title}\n </button>\n );\n });\n }\n\n render(): JSX.Element {\n const {\n options,\n inputPlaceholder,\n disabled,\n className,\n defaultValue,\n spellCheck,\n 'data-testid': dataTestId,\n } = this.props;\n const { value } = this.state;\n let { popperOptions } = this.props;\n popperOptions = {\n placement: 'bottom-end',\n modifiers: {\n preventOverflow: { enabled: false },\n },\n ...popperOptions,\n };\n\n return (\n <div className=\"input-group cb-container\" ref={this.cbContainer}>\n <input\n value={value || defaultValue}\n className={classNames('form-control', className, 'cb-input')}\n ref={this.input}\n onChange={this.handleInputChange}\n placeholder={\n inputPlaceholder ||\n (options[0] != null ? options[0].title : undefined)\n }\n disabled={disabled}\n onBlur={this.handleInputBlur}\n onKeyDown={this.handleInputKeyDown}\n spellCheck={spellCheck}\n data-testid={\n dataTestId !== undefined ? `${dataTestId}-input` : undefined\n }\n />\n <div className=\"input-group-append cb-dropdown\">\n <button\n type=\"button\"\n className=\"btn cb-btn form-control\"\n ref={this.toggleButton}\n onClick={this.toggleMenu}\n onKeyDown={this.handleInputKeyDown}\n disabled={disabled}\n data-testid={\n dataTestId !== undefined ? `${dataTestId}-btn` : undefined\n }\n >\n <FontAwesomeIcon icon={vsTriangleDown} />\n <Popper\n ref={this.popper}\n options={popperOptions}\n className={classNames('combobox interactive')}\n onEntered={this.handleMenuOpened}\n onExited={this.handleMenuExited}\n >\n {this.renderMenuElement()}\n </Popper>\n </button>\n </div>\n </div>\n );\n }\n}\n\nexport default ComboBox;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"CopyButton.js","names":["React","vsPassFilled","vsCopy","useCopyToClipboard","Button","CopyButton","copy","kind","tooltip","className","dataTestId","children","copied","copyToClipboard"],"sources":["../src/CopyButton.tsx"],"sourcesContent":["import React from 'react';\nimport { vsPassFilled, vsCopy } from '@deephaven/icons';\nimport { useCopyToClipboard } from '@deephaven/react-hooks';\nimport Button, { ButtonKind } from './Button';\n\ntype CopyButtonProps = {\n /** The value to copy when clicked, accepts string or function returning a string. */\n copy: string | (() => string);\n /** The kind of button */\n kind?: ButtonKind;\n /** Optional tooltip label ex. 'Copy column name' */\n tooltip?: string;\n /** Optional extra classname */\n className?: string;\n /** Optional extra testid */\n 'data-testid'?: string;\n /** Optional button children */\n children?: React.ReactNode;\n};\n\n/**\n * Button that has a copy icon, and copies text to a clipboard when clicked.\n */\nfunction CopyButton({\n copy,\n kind = 'ghost',\n tooltip = 'Copy',\n className,\n 'data-testid': dataTestId,\n children,\n}: CopyButtonProps): JSX.Element {\n const [copied, copyToClipboard] = useCopyToClipboard();\n return (\n <Button\n kind={kind}\n className={className}\n data-testid={dataTestId}\n icon={copied ? vsPassFilled : vsCopy}\n tooltip={copied ? 'Copied' : tooltip}\n onClick={() => {\n copyToClipboard(typeof copy === 'function' ? copy() : copy);\n }}\n >\n {children}\n </Button>\n );\n}\n\nexport default CopyButton;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,YAAY,EAAEC,MAAM,QAAQ,kBAAkB;AACvD,SAASC,kBAAkB,QAAQ,wBAAwB;AAAC,OACrDC,MAAM;AAAA;AAiBb;AACA;AACA;AACA,SAASC,UAAU,OAOc;EAAA,IAPb;IAClBC,IAAI;IACJC,IAAI,GAAG,OAAO;IACdC,OAAO,GAAG,MAAM;IAChBC,SAAS;IACT,aAAa,EAAEC,UAAU;IACzBC;EACe,CAAC;EAChB,IAAM,CAACC,MAAM,EAAEC,eAAe,CAAC,GAAGV,kBAAkB,EAAE;EACtD,oBACE,KAAC,MAAM;IACL,IAAI,EAAEI,IAAK;IACX,SAAS,EAAEE,SAAU;IACrB,eAAaC,UAAW;IACxB,IAAI,EAAEE,MAAM,GAAGX,YAAY,GAAGC,MAAO;IACrC,OAAO,EAAEU,MAAM,GAAG,QAAQ,GAAGJ,OAAQ;IACrC,OAAO,EAAE,MAAM;MACbK,eAAe,CAAC,OAAOP,IAAI,KAAK,UAAU,GAAGA,IAAI,EAAE,GAAGA,IAAI,CAAC;IAC7D,CAAE;IAAA,UAEDK;EAAQ,EACF;AAEb;AAEA,eAAeN,UAAU"}
1
+ {"version":3,"file":"CopyButton.js","names":["React","vsPassFilled","vsCopy","useCopyToClipboard","Button","jsx","_jsx","CopyButton","_ref","copy","kind","tooltip","className","dataTestId","children","copied","copyToClipboard","icon","onClick"],"sources":["../src/CopyButton.tsx"],"sourcesContent":["import React from 'react';\nimport { vsPassFilled, vsCopy } from '@deephaven/icons';\nimport { useCopyToClipboard } from '@deephaven/react-hooks';\nimport Button, { ButtonKind } from './Button';\n\ntype CopyButtonProps = {\n /** The value to copy when clicked, accepts string or function returning a string. */\n copy: string | (() => string);\n /** The kind of button */\n kind?: ButtonKind;\n /** Optional tooltip label ex. 'Copy column name' */\n tooltip?: string;\n /** Optional extra classname */\n className?: string;\n /** Optional extra testid */\n 'data-testid'?: string;\n /** Optional button children */\n children?: React.ReactNode;\n};\n\n/**\n * Button that has a copy icon, and copies text to a clipboard when clicked.\n */\nfunction CopyButton({\n copy,\n kind = 'ghost',\n tooltip = 'Copy',\n className,\n 'data-testid': dataTestId,\n children,\n}: CopyButtonProps): JSX.Element {\n const [copied, copyToClipboard] = useCopyToClipboard();\n return (\n <Button\n kind={kind}\n className={className}\n data-testid={dataTestId}\n icon={copied ? vsPassFilled : vsCopy}\n tooltip={copied ? 'Copied' : tooltip}\n onClick={() => {\n copyToClipboard(typeof copy === 'function' ? copy() : copy);\n }}\n >\n {children}\n </Button>\n );\n}\n\nexport default CopyButton;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,YAAY,EAAEC,MAAM,QAAQ,kBAAkB;AACvD,SAASC,kBAAkB,QAAQ,wBAAwB;AAAC,OACrDC,MAAM;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAiBb;AACA;AACA;AACA,SAASC,UAAUA,CAAAC,IAAA,EAOc;EAAA,IAPb;IAClBC,IAAI;IACJC,IAAI,GAAG,OAAO;IACdC,OAAO,GAAG,MAAM;IAChBC,SAAS;IACT,aAAa,EAAEC,UAAU;IACzBC;EACe,CAAC,GAAAN,IAAA;EAChB,IAAM,CAACO,MAAM,EAAEC,eAAe,CAAC,GAAGb,kBAAkB,CAAC,CAAC;EACtD,oBACEG,IAAA,CAACF,MAAM;IACLM,IAAI,EAAEA,IAAK;IACXE,SAAS,EAAEA,SAAU;IACrB,eAAaC,UAAW;IACxBI,IAAI,EAAEF,MAAM,GAAGd,YAAY,GAAGC,MAAO;IACrCS,OAAO,EAAEI,MAAM,GAAG,QAAQ,GAAGJ,OAAQ;IACrCO,OAAO,EAAEA,CAAA,KAAM;MACbF,eAAe,CAAC,OAAOP,IAAI,KAAK,UAAU,GAAGA,IAAI,CAAC,CAAC,GAAGA,IAAI,CAAC;IAC7D,CAAE;IAAAK,QAAA,EAEDA;EAAQ,CACH,CAAC;AAEb;AAEA,eAAeP,UAAU"}
@@ -1 +1 @@
1
- {"version":3,"file":"CustomTimeSelect.js","names":["React","Component","FontAwesomeIcon","vsCheck","dhSort","TimeUtils","classNames","TimeInput","DropdownMenu","CUSTOM_OPTION","MENU_NAVIGATION_DIRECTION","CustomTimeSelect","constructor","props","value","valueToTime","toggleMenu","bind","handleMenuKeyDown","closeMenu","handleOptionClick","handleOptionFocus","handleMenuOpened","handleMenuExited","handleCustomInput","csContainer","createRef","menuContainer","button","input","state","keyboardOptionIndex","menuIsOpen","inputWidth","customTime","inputFocused","getSelectedText","options","placeholder","i","length","option","title","formatTime","setInputWidth","current","setState","getBoundingClientRect","width","focus","updateInputValue","onChange","handleResize","event","key","updateFromCustom","stopPropagation","preventDefault","shiftKey","handleMenuNavigation","UP","DOWN","direction","menuOptionsLength","newKeyboardOptionIndex","focusInput","focusOption","scrollOptionIntoView","optionIndex","Number","currentTarget","timeToValue","update","updateAndClose","target","activeOption","querySelector","HTMLElement","valueIndex","map","indexOf","index","children","item","openMenu","updateKeyboardIndex","focusButton","offsetTop","DROP_DOWN_MENU_HEIGHT","scrollTop","renderMenuElement","renderOptions","icon","customText","matchFound","optionArray","push","render","disabled","invalid","dataTestId","popperOptions","placement","modifiers","preventOverflow","enabled","menuElement","maxWidth","Math","round","time","undefined"],"sources":["../src/CustomTimeSelect.tsx"],"sourcesContent":["import React, { Component } from 'react';\nimport { PopperOptions } from 'popper.js';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsCheck, dhSort, IconDefinition } from '@deephaven/icons';\nimport { TimeUtils } from '@deephaven/utils';\nimport classNames from 'classnames';\nimport TimeInput, { TimeInputElement } from './TimeInput';\nimport DropdownMenu from './menu-actions/DropdownMenu';\nimport './CustomTimeSelect.scss';\n\nconst CUSTOM_OPTION = -1;\n\nenum MENU_NAVIGATION_DIRECTION {\n UP = 'UP',\n DOWN = 'DOWN',\n}\n\ntype CustomTimeSelectProps = {\n options: { title: string; value: number }[];\n popperOptions: PopperOptions;\n value: number | null;\n onChange(value: number): void;\n disabled: boolean;\n icon: IconDefinition;\n placeholder: string;\n customText: string;\n // Defaults to converting the value in milliseconds to time in seconds\n valueToTime(val: number | null): number;\n // Defaults to converting the time in seconds to value in milliseconds\n timeToValue(time: number): number;\n invalid: boolean;\n 'data-testid'?: string;\n};\n\ntype TimeInSeconds = number;\n\ntype CustomTimeSelectState = {\n keyboardOptionIndex: number;\n menuIsOpen: boolean;\n inputWidth: number;\n customTime: TimeInSeconds;\n inputFocused: boolean;\n};\n\nclass CustomTimeSelect extends Component<\n CustomTimeSelectProps,\n CustomTimeSelectState\n> {\n static MENU_NAVIGATION_DIRECTION = MENU_NAVIGATION_DIRECTION;\n\n static DROP_DOWN_MENU_HEIGHT = 125;\n\n static defaultProps: Partial<CustomTimeSelectProps> = {\n onChange(): void {\n // no-op\n },\n value: null,\n disabled: false,\n popperOptions: {},\n icon: vsCheck,\n customText: 'Custom',\n placeholder: 'Select a time',\n valueToTime: value => (value === null ? 0 : Math.round(value / 1000)),\n timeToValue: time => time * 1000,\n invalid: false,\n 'data-testid': undefined,\n };\n\n constructor(props: CustomTimeSelectProps) {\n super(props);\n\n const { value, valueToTime } = props;\n\n this.toggleMenu = this.toggleMenu.bind(this);\n this.handleMenuKeyDown = this.handleMenuKeyDown.bind(this);\n this.closeMenu = this.closeMenu.bind(this);\n\n this.handleOptionClick = this.handleOptionClick.bind(this);\n this.handleOptionFocus = this.handleOptionFocus.bind(this);\n\n this.handleMenuOpened = this.handleMenuOpened.bind(this);\n this.handleMenuExited = this.handleMenuExited.bind(this);\n this.handleCustomInput = this.handleCustomInput.bind(this);\n\n this.csContainer = React.createRef();\n this.menuContainer = React.createRef();\n this.button = React.createRef();\n this.input = React.createRef();\n\n this.state = {\n keyboardOptionIndex: 0,\n menuIsOpen: false,\n inputWidth: 100,\n customTime: valueToTime(value),\n inputFocused: false,\n };\n }\n\n csContainer: React.RefObject<HTMLDivElement>;\n\n menuContainer: React.RefObject<HTMLDivElement>;\n\n button: React.RefObject<HTMLButtonElement>;\n\n input: React.RefObject<TimeInputElement>;\n\n getSelectedText(): string {\n const { options, value, placeholder } = this.props;\n const { customTime } = this.state;\n\n if (value === null) {\n return placeholder;\n }\n\n for (let i = 0; i < options.length; i += 1) {\n const option = options[i];\n if (option.value === value) {\n return option.title;\n }\n }\n\n return TimeUtils.formatTime(customTime);\n }\n\n setInputWidth(): void {\n if (this.csContainer.current) {\n this.setState({\n inputWidth: this.csContainer.current.getBoundingClientRect().width,\n });\n }\n }\n\n focus(): void {\n this.button.current?.focus();\n }\n\n updateInputValue(value: number): void {\n const { onChange } = this.props;\n onChange(value);\n }\n\n handleResize(): void {\n this.setInputWidth();\n }\n\n handleMenuKeyDown(event: React.KeyboardEvent<HTMLDivElement>): void {\n const { keyboardOptionIndex, inputFocused } = this.state;\n const { options } = this.props;\n\n switch (event.key) {\n case 'Enter':\n case ' ': // Space Bar\n if (inputFocused) {\n this.updateFromCustom();\n } else {\n this.updateInputValue(options[keyboardOptionIndex].value);\n }\n this.closeMenu();\n this.button.current?.focus();\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'Tab':\n if (event.shiftKey) {\n this.handleMenuNavigation(\n CustomTimeSelect.MENU_NAVIGATION_DIRECTION.UP\n );\n } else {\n this.handleMenuNavigation(\n CustomTimeSelect.MENU_NAVIGATION_DIRECTION.DOWN\n );\n }\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'ArrowUp':\n this.handleMenuNavigation(\n CustomTimeSelect.MENU_NAVIGATION_DIRECTION.UP\n );\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'ArrowDown':\n this.handleMenuNavigation(\n CustomTimeSelect.MENU_NAVIGATION_DIRECTION.DOWN\n );\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'Escape':\n this.closeMenu();\n break;\n default:\n break;\n }\n }\n\n handleMenuNavigation(direction: MENU_NAVIGATION_DIRECTION): void {\n const { keyboardOptionIndex, inputFocused } = this.state;\n const { options } = this.props;\n const menuOptionsLength = options.length;\n let newKeyboardOptionIndex = keyboardOptionIndex;\n switch (direction) {\n case CustomTimeSelect.MENU_NAVIGATION_DIRECTION.UP:\n if (!inputFocused && keyboardOptionIndex === 0) {\n this.focusInput();\n break;\n } else if (inputFocused) {\n this.focusOption(keyboardOptionIndex);\n }\n\n if (keyboardOptionIndex > 0 && !inputFocused) {\n newKeyboardOptionIndex =\n (newKeyboardOptionIndex - 1) % menuOptionsLength;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex,\n });\n } else if (keyboardOptionIndex === 0) {\n newKeyboardOptionIndex = menuOptionsLength - 1;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex,\n });\n }\n this.scrollOptionIntoView(newKeyboardOptionIndex);\n break;\n case CustomTimeSelect.MENU_NAVIGATION_DIRECTION.DOWN:\n if (!inputFocused && keyboardOptionIndex === menuOptionsLength - 1) {\n this.focusInput();\n break;\n } else if (inputFocused) {\n this.focusOption(keyboardOptionIndex);\n }\n\n if (\n keyboardOptionIndex < menuOptionsLength &&\n !(inputFocused && keyboardOptionIndex === 0)\n ) {\n newKeyboardOptionIndex =\n (newKeyboardOptionIndex + 1) % menuOptionsLength;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex,\n });\n }\n this.scrollOptionIntoView(newKeyboardOptionIndex);\n break;\n default:\n break;\n }\n }\n\n handleOptionClick(event: React.MouseEvent<HTMLButtonElement>): void {\n const optionIndex = Number(event.currentTarget.value);\n const { options, timeToValue } = this.props;\n const { customTime } = this.state;\n\n if (optionIndex === CUSTOM_OPTION) {\n const update = timeToValue(customTime);\n this.updateAndClose(update);\n } else {\n this.updateAndClose(options[optionIndex].value);\n }\n }\n\n updateAndClose(update: number): void {\n this.updateInputValue(update);\n this.closeMenu();\n this.button.current?.focus();\n }\n\n handleOptionFocus(event: React.FocusEvent<HTMLButtonElement>): void {\n this.setState({ keyboardOptionIndex: Number(event.target.value) });\n }\n\n handleMenuOpened(): void {\n const { options, value } = this.props;\n const { keyboardOptionIndex } = this.state;\n this.scrollOptionIntoView(keyboardOptionIndex);\n const activeOption = this.menuContainer.current?.querySelector(\n '.cs-option-btn.keyboard-active'\n );\n if (activeOption instanceof HTMLElement) {\n activeOption.focus();\n }\n\n if (value === null) {\n return;\n }\n const valueIndex = options.map(option => option.value).indexOf(value);\n if (valueIndex < 0) {\n // The custom option should be selected\n this.focusInput();\n }\n }\n\n focusInput(): void {\n this.input.current?.focus();\n }\n\n focusOption(index: number): void {\n const options = this.menuContainer.current?.querySelector('.cs-options');\n if (options && options.children != null) {\n const option = options.children.item(index);\n if (option instanceof HTMLElement) {\n option.focus();\n }\n }\n }\n\n handleMenuExited(): void {\n const { menuIsOpen } = this.state;\n if (menuIsOpen) {\n this.setState({ menuIsOpen: false, keyboardOptionIndex: 0 });\n }\n }\n\n handleCustomInput(value: number): void {\n const { timeToValue } = this.props;\n\n const update = timeToValue(value);\n this.updateInputValue(update);\n this.setState({\n customTime: value,\n });\n }\n\n updateFromCustom(): void {\n const { timeToValue } = this.props;\n const { customTime } = this.state;\n\n const update = timeToValue(customTime);\n this.updateInputValue(update);\n }\n\n toggleMenu(event: React.MouseEvent<HTMLButtonElement>): void {\n const { menuIsOpen } = this.state;\n if (menuIsOpen) {\n this.closeMenu();\n } else {\n this.openMenu();\n }\n event.stopPropagation();\n }\n\n openMenu(): void {\n this.updateKeyboardIndex();\n this.setInputWidth();\n this.setState({ menuIsOpen: true });\n }\n\n closeMenu(focusButton = true): void {\n this.setState({ menuIsOpen: false });\n if (focusButton) {\n this.button.current?.focus();\n }\n }\n\n updateKeyboardIndex(): void {\n const { options, value } = this.props;\n if (value === null) {\n return;\n }\n const valueIndex = options.map(option => option.value).indexOf(value);\n if (valueIndex > 0) {\n this.setState({ keyboardOptionIndex: valueIndex });\n }\n }\n\n scrollOptionIntoView(index: number): void {\n const options = this.menuContainer.current?.querySelector('.cs-options');\n if (options && options.children != null) {\n const activeOption = options.children.item(index);\n if (\n activeOption instanceof HTMLElement &&\n activeOption.offsetTop > CustomTimeSelect.DROP_DOWN_MENU_HEIGHT\n ) {\n options.scrollTop =\n activeOption.offsetTop - CustomTimeSelect.DROP_DOWN_MENU_HEIGHT;\n } else if (\n (activeOption instanceof HTMLElement && activeOption.offsetTop < 0) ||\n index === 0\n ) {\n options.scrollTop = 0;\n }\n }\n }\n\n renderMenuElement(): JSX.Element {\n const { inputWidth } = this.state;\n return (\n <div\n className=\"cs-menu-container\"\n ref={this.menuContainer}\n role=\"presentation\"\n onKeyDown={this.handleMenuKeyDown}\n onClick={event => {\n event.stopPropagation();\n }}\n style={{ width: inputWidth }}\n >\n <div className=\"cs-options-container\">\n <div className=\"cs-options\">{this.renderOptions()}</div>\n </div>\n </div>\n );\n }\n\n renderOptions(): React.ReactNode {\n const { options, value, icon, customText } = this.props;\n const { keyboardOptionIndex, customTime, inputFocused } = this.state;\n\n let matchFound = false;\n const optionArray: JSX.Element[] = [];\n for (let index = 0; index < options.length; index += 1) {\n const option = options[index];\n const key = `option-${index}-${option.value}`;\n matchFound = matchFound || option.value === value;\n optionArray.push(\n <button\n key={key}\n type=\"button\"\n value={index}\n className={classNames('cs-option-btn', {\n 'keyboard-active': keyboardOptionIndex === index && !inputFocused,\n })}\n onClick={this.handleOptionClick}\n onFocus={this.handleOptionFocus}\n >\n {option.value === value && (\n <FontAwesomeIcon icon={icon} className=\"mr-2\" />\n )}\n {option.value !== value && <span className=\"mr-4\" />}\n {option.title}\n </button>\n );\n }\n\n optionArray.push(<hr className=\"cs-divider\" key=\"option-divider\" />);\n\n optionArray.push(\n <button\n key=\"option-custom-label\"\n type=\"button\"\n value={CUSTOM_OPTION}\n className={classNames('cs-option-btn', {\n 'keyboard-active': inputFocused,\n })}\n onClick={this.handleOptionClick}\n onFocus={this.handleOptionFocus}\n >\n {!matchFound && value !== null ? (\n <FontAwesomeIcon icon={icon} className=\"mr-2\" />\n ) : (\n <span className=\"mr-4\" />\n )}\n {customText}\n </button>\n );\n\n optionArray.push(\n <div key=\"cs-custom-container\" className=\"cs-custom-container\">\n <span className=\"mr-2\" />\n <TimeInput\n key=\"option-input\"\n ref={this.input}\n onChange={this.handleCustomInput}\n value={customTime}\n onFocus={() => this.setState({ inputFocused: true })}\n onBlur={() => this.setState({ inputFocused: false })}\n />\n <span className=\"ml-2\" />\n </div>\n );\n\n optionArray.push(<hr key=\"option-end\" className=\"mb-2\" />);\n\n return optionArray;\n }\n\n render(): JSX.Element {\n const { disabled, invalid, value, 'data-testid': dataTestId } = this.props;\n const { menuIsOpen } = this.state;\n let { popperOptions } = this.props;\n popperOptions = {\n placement: 'bottom-end',\n modifiers: {\n preventOverflow: { enabled: false },\n },\n ...popperOptions,\n };\n\n return (\n <div\n className=\"input-group cs-container context-menu\"\n ref={this.csContainer}\n data-testid={dataTestId}\n >\n <div\n className={classNames('input-group-append cs-dropdown', {\n 'cs-dropdown-invalid': invalid,\n })}\n >\n <button\n type=\"button\"\n className={classNames('btn cs-btn form-control', {\n 'cs-btn-invalid': invalid,\n })}\n ref={this.button}\n onClick={this.toggleMenu}\n disabled={disabled}\n >\n <span\n className={classNames({\n 'text-muted': value === null,\n })}\n >\n {this.getSelectedText()}\n </span>\n <span>\n <FontAwesomeIcon icon={dhSort} className=\"cs-caret\" />\n </span>\n <DropdownMenu\n isShown={menuIsOpen}\n actions={{ menuElement: this.renderMenuElement() }}\n popperOptions={popperOptions}\n popperClassName=\"CustomTimeSelect\"\n onMenuOpened={this.handleMenuOpened}\n onMenuClosed={this.handleMenuExited}\n menuStyle={{ maxWidth: '100rem' }}\n />\n </button>\n </div>\n </div>\n );\n }\n}\n\nexport default CustomTimeSelect;\n"],"mappings":"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"}
1
+ {"version":3,"file":"CustomTimeSelect.js","names":["React","Component","FontAwesomeIcon","vsCheck","dhSort","TimeUtils","classNames","TimeInput","DropdownMenu","jsx","_jsx","jsxs","_jsxs","CUSTOM_OPTION","MENU_NAVIGATION_DIRECTION","CustomTimeSelect","constructor","props","_defineProperty","value","valueToTime","toggleMenu","bind","handleMenuKeyDown","closeMenu","handleOptionClick","handleOptionFocus","handleMenuOpened","handleMenuExited","handleCustomInput","csContainer","createRef","menuContainer","button","input","state","keyboardOptionIndex","menuIsOpen","inputWidth","customTime","inputFocused","getSelectedText","options","placeholder","i","length","option","title","formatTime","setInputWidth","current","setState","getBoundingClientRect","width","focus","_this$button$current","updateInputValue","onChange","handleResize","event","_this$button$current2","key","updateFromCustom","stopPropagation","preventDefault","shiftKey","handleMenuNavigation","UP","DOWN","direction","menuOptionsLength","newKeyboardOptionIndex","focusInput","focusOption","scrollOptionIntoView","optionIndex","Number","currentTarget","timeToValue","update","updateAndClose","_this$button$current3","target","_this$menuContainer$c","activeOption","querySelector","HTMLElement","valueIndex","map","indexOf","_this$input$current","index","_this$menuContainer$c2","children","item","openMenu","updateKeyboardIndex","focusButton","arguments","undefined","_this$button$current4","_this$menuContainer$c3","offsetTop","DROP_DOWN_MENU_HEIGHT","scrollTop","renderMenuElement","className","ref","role","onKeyDown","onClick","style","renderOptions","icon","customText","matchFound","optionArray","concat","push","type","onFocus","onBlur","render","disabled","invalid","dataTestId","popperOptions","_objectSpread","placement","modifiers","preventOverflow","enabled","isShown","actions","menuElement","popperClassName","onMenuOpened","onMenuClosed","menuStyle","maxWidth","Math","round","time"],"sources":["../src/CustomTimeSelect.tsx"],"sourcesContent":["import React, { Component } from 'react';\nimport { PopperOptions } from 'popper.js';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsCheck, dhSort, IconDefinition } from '@deephaven/icons';\nimport { TimeUtils } from '@deephaven/utils';\nimport classNames from 'classnames';\nimport TimeInput, { TimeInputElement } from './TimeInput';\nimport DropdownMenu from './menu-actions/DropdownMenu';\nimport './CustomTimeSelect.scss';\n\nconst CUSTOM_OPTION = -1;\n\nenum MENU_NAVIGATION_DIRECTION {\n UP = 'UP',\n DOWN = 'DOWN',\n}\n\ntype CustomTimeSelectProps = {\n options: { title: string; value: number }[];\n popperOptions: PopperOptions;\n value: number | null;\n onChange(value: number): void;\n disabled: boolean;\n icon: IconDefinition;\n placeholder: string;\n customText: string;\n // Defaults to converting the value in milliseconds to time in seconds\n valueToTime(val: number | null): number;\n // Defaults to converting the time in seconds to value in milliseconds\n timeToValue(time: number): number;\n invalid: boolean;\n 'data-testid'?: string;\n};\n\ntype TimeInSeconds = number;\n\ntype CustomTimeSelectState = {\n keyboardOptionIndex: number;\n menuIsOpen: boolean;\n inputWidth: number;\n customTime: TimeInSeconds;\n inputFocused: boolean;\n};\n\nclass CustomTimeSelect extends Component<\n CustomTimeSelectProps,\n CustomTimeSelectState\n> {\n static MENU_NAVIGATION_DIRECTION = MENU_NAVIGATION_DIRECTION;\n\n static DROP_DOWN_MENU_HEIGHT = 125;\n\n static defaultProps: Partial<CustomTimeSelectProps> = {\n onChange(): void {\n // no-op\n },\n value: null,\n disabled: false,\n popperOptions: {},\n icon: vsCheck,\n customText: 'Custom',\n placeholder: 'Select a time',\n valueToTime: value => (value === null ? 0 : Math.round(value / 1000)),\n timeToValue: time => time * 1000,\n invalid: false,\n 'data-testid': undefined,\n };\n\n constructor(props: CustomTimeSelectProps) {\n super(props);\n\n const { value, valueToTime } = props;\n\n this.toggleMenu = this.toggleMenu.bind(this);\n this.handleMenuKeyDown = this.handleMenuKeyDown.bind(this);\n this.closeMenu = this.closeMenu.bind(this);\n\n this.handleOptionClick = this.handleOptionClick.bind(this);\n this.handleOptionFocus = this.handleOptionFocus.bind(this);\n\n this.handleMenuOpened = this.handleMenuOpened.bind(this);\n this.handleMenuExited = this.handleMenuExited.bind(this);\n this.handleCustomInput = this.handleCustomInput.bind(this);\n\n this.csContainer = React.createRef();\n this.menuContainer = React.createRef();\n this.button = React.createRef();\n this.input = React.createRef();\n\n this.state = {\n keyboardOptionIndex: 0,\n menuIsOpen: false,\n inputWidth: 100,\n customTime: valueToTime(value),\n inputFocused: false,\n };\n }\n\n csContainer: React.RefObject<HTMLDivElement>;\n\n menuContainer: React.RefObject<HTMLDivElement>;\n\n button: React.RefObject<HTMLButtonElement>;\n\n input: React.RefObject<TimeInputElement>;\n\n getSelectedText(): string {\n const { options, value, placeholder } = this.props;\n const { customTime } = this.state;\n\n if (value === null) {\n return placeholder;\n }\n\n for (let i = 0; i < options.length; i += 1) {\n const option = options[i];\n if (option.value === value) {\n return option.title;\n }\n }\n\n return TimeUtils.formatTime(customTime);\n }\n\n setInputWidth(): void {\n if (this.csContainer.current) {\n this.setState({\n inputWidth: this.csContainer.current.getBoundingClientRect().width,\n });\n }\n }\n\n focus(): void {\n this.button.current?.focus();\n }\n\n updateInputValue(value: number): void {\n const { onChange } = this.props;\n onChange(value);\n }\n\n handleResize(): void {\n this.setInputWidth();\n }\n\n handleMenuKeyDown(event: React.KeyboardEvent<HTMLDivElement>): void {\n const { keyboardOptionIndex, inputFocused } = this.state;\n const { options } = this.props;\n\n switch (event.key) {\n case 'Enter':\n case ' ': // Space Bar\n if (inputFocused) {\n this.updateFromCustom();\n } else {\n this.updateInputValue(options[keyboardOptionIndex].value);\n }\n this.closeMenu();\n this.button.current?.focus();\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'Tab':\n if (event.shiftKey) {\n this.handleMenuNavigation(\n CustomTimeSelect.MENU_NAVIGATION_DIRECTION.UP\n );\n } else {\n this.handleMenuNavigation(\n CustomTimeSelect.MENU_NAVIGATION_DIRECTION.DOWN\n );\n }\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'ArrowUp':\n this.handleMenuNavigation(\n CustomTimeSelect.MENU_NAVIGATION_DIRECTION.UP\n );\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'ArrowDown':\n this.handleMenuNavigation(\n CustomTimeSelect.MENU_NAVIGATION_DIRECTION.DOWN\n );\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'Escape':\n this.closeMenu();\n break;\n default:\n break;\n }\n }\n\n handleMenuNavigation(direction: MENU_NAVIGATION_DIRECTION): void {\n const { keyboardOptionIndex, inputFocused } = this.state;\n const { options } = this.props;\n const menuOptionsLength = options.length;\n let newKeyboardOptionIndex = keyboardOptionIndex;\n switch (direction) {\n case CustomTimeSelect.MENU_NAVIGATION_DIRECTION.UP:\n if (!inputFocused && keyboardOptionIndex === 0) {\n this.focusInput();\n break;\n } else if (inputFocused) {\n this.focusOption(keyboardOptionIndex);\n }\n\n if (keyboardOptionIndex > 0 && !inputFocused) {\n newKeyboardOptionIndex =\n (newKeyboardOptionIndex - 1) % menuOptionsLength;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex,\n });\n } else if (keyboardOptionIndex === 0) {\n newKeyboardOptionIndex = menuOptionsLength - 1;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex,\n });\n }\n this.scrollOptionIntoView(newKeyboardOptionIndex);\n break;\n case CustomTimeSelect.MENU_NAVIGATION_DIRECTION.DOWN:\n if (!inputFocused && keyboardOptionIndex === menuOptionsLength - 1) {\n this.focusInput();\n break;\n } else if (inputFocused) {\n this.focusOption(keyboardOptionIndex);\n }\n\n if (\n keyboardOptionIndex < menuOptionsLength &&\n !(inputFocused && keyboardOptionIndex === 0)\n ) {\n newKeyboardOptionIndex =\n (newKeyboardOptionIndex + 1) % menuOptionsLength;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex,\n });\n }\n this.scrollOptionIntoView(newKeyboardOptionIndex);\n break;\n default:\n break;\n }\n }\n\n handleOptionClick(event: React.MouseEvent<HTMLButtonElement>): void {\n const optionIndex = Number(event.currentTarget.value);\n const { options, timeToValue } = this.props;\n const { customTime } = this.state;\n\n if (optionIndex === CUSTOM_OPTION) {\n const update = timeToValue(customTime);\n this.updateAndClose(update);\n } else {\n this.updateAndClose(options[optionIndex].value);\n }\n }\n\n updateAndClose(update: number): void {\n this.updateInputValue(update);\n this.closeMenu();\n this.button.current?.focus();\n }\n\n handleOptionFocus(event: React.FocusEvent<HTMLButtonElement>): void {\n this.setState({ keyboardOptionIndex: Number(event.target.value) });\n }\n\n handleMenuOpened(): void {\n const { options, value } = this.props;\n const { keyboardOptionIndex } = this.state;\n this.scrollOptionIntoView(keyboardOptionIndex);\n const activeOption = this.menuContainer.current?.querySelector(\n '.cs-option-btn.keyboard-active'\n );\n if (activeOption instanceof HTMLElement) {\n activeOption.focus();\n }\n\n if (value === null) {\n return;\n }\n const valueIndex = options.map(option => option.value).indexOf(value);\n if (valueIndex < 0) {\n // The custom option should be selected\n this.focusInput();\n }\n }\n\n focusInput(): void {\n this.input.current?.focus();\n }\n\n focusOption(index: number): void {\n const options = this.menuContainer.current?.querySelector('.cs-options');\n if (options && options.children != null) {\n const option = options.children.item(index);\n if (option instanceof HTMLElement) {\n option.focus();\n }\n }\n }\n\n handleMenuExited(): void {\n const { menuIsOpen } = this.state;\n if (menuIsOpen) {\n this.setState({ menuIsOpen: false, keyboardOptionIndex: 0 });\n }\n }\n\n handleCustomInput(value: number): void {\n const { timeToValue } = this.props;\n\n const update = timeToValue(value);\n this.updateInputValue(update);\n this.setState({\n customTime: value,\n });\n }\n\n updateFromCustom(): void {\n const { timeToValue } = this.props;\n const { customTime } = this.state;\n\n const update = timeToValue(customTime);\n this.updateInputValue(update);\n }\n\n toggleMenu(event: React.MouseEvent<HTMLButtonElement>): void {\n const { menuIsOpen } = this.state;\n if (menuIsOpen) {\n this.closeMenu();\n } else {\n this.openMenu();\n }\n event.stopPropagation();\n }\n\n openMenu(): void {\n this.updateKeyboardIndex();\n this.setInputWidth();\n this.setState({ menuIsOpen: true });\n }\n\n closeMenu(focusButton = true): void {\n this.setState({ menuIsOpen: false });\n if (focusButton) {\n this.button.current?.focus();\n }\n }\n\n updateKeyboardIndex(): void {\n const { options, value } = this.props;\n if (value === null) {\n return;\n }\n const valueIndex = options.map(option => option.value).indexOf(value);\n if (valueIndex > 0) {\n this.setState({ keyboardOptionIndex: valueIndex });\n }\n }\n\n scrollOptionIntoView(index: number): void {\n const options = this.menuContainer.current?.querySelector('.cs-options');\n if (options && options.children != null) {\n const activeOption = options.children.item(index);\n if (\n activeOption instanceof HTMLElement &&\n activeOption.offsetTop > CustomTimeSelect.DROP_DOWN_MENU_HEIGHT\n ) {\n options.scrollTop =\n activeOption.offsetTop - CustomTimeSelect.DROP_DOWN_MENU_HEIGHT;\n } else if (\n (activeOption instanceof HTMLElement && activeOption.offsetTop < 0) ||\n index === 0\n ) {\n options.scrollTop = 0;\n }\n }\n }\n\n renderMenuElement(): JSX.Element {\n const { inputWidth } = this.state;\n return (\n <div\n className=\"cs-menu-container\"\n ref={this.menuContainer}\n role=\"presentation\"\n onKeyDown={this.handleMenuKeyDown}\n onClick={event => {\n event.stopPropagation();\n }}\n style={{ width: inputWidth }}\n >\n <div className=\"cs-options-container\">\n <div className=\"cs-options\">{this.renderOptions()}</div>\n </div>\n </div>\n );\n }\n\n renderOptions(): React.ReactNode {\n const { options, value, icon, customText } = this.props;\n const { keyboardOptionIndex, customTime, inputFocused } = this.state;\n\n let matchFound = false;\n const optionArray: JSX.Element[] = [];\n for (let index = 0; index < options.length; index += 1) {\n const option = options[index];\n const key = `option-${index}-${option.value}`;\n matchFound = matchFound || option.value === value;\n optionArray.push(\n <button\n key={key}\n type=\"button\"\n value={index}\n className={classNames('cs-option-btn', {\n 'keyboard-active': keyboardOptionIndex === index && !inputFocused,\n })}\n onClick={this.handleOptionClick}\n onFocus={this.handleOptionFocus}\n >\n {option.value === value && (\n <FontAwesomeIcon icon={icon} className=\"mr-2\" />\n )}\n {option.value !== value && <span className=\"mr-4\" />}\n {option.title}\n </button>\n );\n }\n\n optionArray.push(<hr className=\"cs-divider\" key=\"option-divider\" />);\n\n optionArray.push(\n <button\n key=\"option-custom-label\"\n type=\"button\"\n value={CUSTOM_OPTION}\n className={classNames('cs-option-btn', {\n 'keyboard-active': inputFocused,\n })}\n onClick={this.handleOptionClick}\n onFocus={this.handleOptionFocus}\n >\n {!matchFound && value !== null ? (\n <FontAwesomeIcon icon={icon} className=\"mr-2\" />\n ) : (\n <span className=\"mr-4\" />\n )}\n {customText}\n </button>\n );\n\n optionArray.push(\n <div key=\"cs-custom-container\" className=\"cs-custom-container\">\n <span className=\"mr-2\" />\n <TimeInput\n key=\"option-input\"\n ref={this.input}\n onChange={this.handleCustomInput}\n value={customTime}\n onFocus={() => this.setState({ inputFocused: true })}\n onBlur={() => this.setState({ inputFocused: false })}\n />\n <span className=\"ml-2\" />\n </div>\n );\n\n optionArray.push(<hr key=\"option-end\" className=\"mb-2\" />);\n\n return optionArray;\n }\n\n render(): JSX.Element {\n const { disabled, invalid, value, 'data-testid': dataTestId } = this.props;\n const { menuIsOpen } = this.state;\n let { popperOptions } = this.props;\n popperOptions = {\n placement: 'bottom-end',\n modifiers: {\n preventOverflow: { enabled: false },\n },\n ...popperOptions,\n };\n\n return (\n <div\n className=\"input-group cs-container context-menu\"\n ref={this.csContainer}\n data-testid={dataTestId}\n >\n <div\n className={classNames('input-group-append cs-dropdown', {\n 'cs-dropdown-invalid': invalid,\n })}\n >\n <button\n type=\"button\"\n className={classNames('btn cs-btn form-control', {\n 'cs-btn-invalid': invalid,\n })}\n ref={this.button}\n onClick={this.toggleMenu}\n disabled={disabled}\n >\n <span\n className={classNames({\n 'text-muted': value === null,\n })}\n >\n {this.getSelectedText()}\n </span>\n <span>\n <FontAwesomeIcon icon={dhSort} className=\"cs-caret\" />\n </span>\n <DropdownMenu\n isShown={menuIsOpen}\n actions={{ menuElement: this.renderMenuElement() }}\n popperOptions={popperOptions}\n popperClassName=\"CustomTimeSelect\"\n onMenuOpened={this.handleMenuOpened}\n onMenuClosed={this.handleMenuExited}\n menuStyle={{ maxWidth: '100rem' }}\n />\n </button>\n </div>\n </div>\n );\n }\n}\n\nexport default CustomTimeSelect;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"DateInput.js","names":["React","useCallback","useState","classNames","Log","MaskedInput","getNextSegmentValue","log","module","DATE_PATTERN","EXAMPLES","DATE_FORMAT","DateInput","forwardRef","props","ref","className","onChange","undefined","defaultValue","onFocus","onBlur","dataTestId","value","setValue","selection","setSelection","handleChange","newValue","debug","displayName","defaultProps"],"sources":["../src/DateInput.tsx"],"sourcesContent":["import React, { useCallback, useState } from 'react';\nimport classNames from 'classnames';\nimport Log from '@deephaven/log';\nimport MaskedInput, { SelectionSegment } from './MaskedInput';\nimport { getNextSegmentValue } from './DateInputUtils';\n\nconst log = Log.module('DateInput');\n\nconst DATE_PATTERN = '[12][0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])';\nconst EXAMPLES = ['2000-01-01', '2022-12-31'];\nconst DATE_FORMAT = 'YYYY-MM-DD';\n\ntype DateInputProps = {\n className?: string;\n onChange?(date?: string): void;\n defaultValue?: string;\n onFocus?(): void;\n onBlur?(): void;\n 'data-testid'?: string;\n};\n\nconst DateInput = React.forwardRef<HTMLInputElement, DateInputProps>(\n (props: DateInputProps, ref) => {\n const {\n className = '',\n onChange = () => undefined,\n defaultValue = '',\n onFocus = () => undefined,\n onBlur = () => undefined,\n 'data-testid': dataTestId,\n } = props;\n const [value, setValue] = useState(defaultValue);\n const [selection, setSelection] = useState<SelectionSegment>();\n\n const handleChange = useCallback(\n (newValue: string): void => {\n log.debug('handleChange', newValue);\n setValue(newValue);\n onChange(newValue);\n },\n [onChange]\n );\n\n return (\n <div className=\"d-flex flex-row align-items-center\">\n <MaskedInput\n ref={ref}\n className={classNames(className)}\n example={EXAMPLES}\n getNextSegmentValue={getNextSegmentValue}\n onChange={handleChange}\n onSelect={setSelection}\n pattern={DATE_PATTERN}\n placeholder={DATE_FORMAT}\n selection={selection}\n value={value}\n onFocus={onFocus}\n onBlur={onBlur}\n data-testid={dataTestId}\n />\n </div>\n );\n }\n);\n\nDateInput.displayName = 'DateInput';\n\nDateInput.defaultProps = {\n className: '',\n onChange: () => false,\n defaultValue: '',\n onFocus: () => false,\n onBlur: () => false,\n 'data-testid': undefined,\n};\n\nexport default DateInput;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,WAAW,EAAEC,QAAQ,QAAQ,OAAO;AACpD,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAOC,GAAG,MAAM,gBAAgB;AAAC,OAC1BC,WAAW;AAAA,SACTC,mBAAmB;AAAA;AAE5B,IAAMC,GAAG,GAAGH,GAAG,CAACI,MAAM,CAAC,WAAW,CAAC;AAEnC,IAAMC,YAAY,GAAG,yDAAyD;AAC9E,IAAMC,QAAQ,GAAG,CAAC,YAAY,EAAE,YAAY,CAAC;AAC7C,IAAMC,WAAW,GAAG,YAAY;AAWhC,IAAMC,SAAS,gBAAGZ,KAAK,CAACa,UAAU,CAChC,CAACC,KAAqB,EAAEC,GAAG,KAAK;EAC9B,IAAM;IACJC,SAAS,GAAG,EAAE;IACdC,QAAQ,GAAG,MAAMC,SAAS;IAC1BC,YAAY,GAAG,EAAE;IACjBC,OAAO,GAAG,MAAMF,SAAS;IACzBG,MAAM,GAAG,MAAMH,SAAS;IACxB,aAAa,EAAEI;EACjB,CAAC,GAAGR,KAAK;EACT,IAAM,CAACS,KAAK,EAAEC,QAAQ,CAAC,GAAGtB,QAAQ,CAACiB,YAAY,CAAC;EAChD,IAAM,CAACM,SAAS,EAAEC,YAAY,CAAC,GAAGxB,QAAQ,EAAoB;EAE9D,IAAMyB,YAAY,GAAG1B,WAAW,CAC7B2B,QAAgB,IAAW;IAC1BrB,GAAG,CAACsB,KAAK,CAAC,cAAc,EAAED,QAAQ,CAAC;IACnCJ,QAAQ,CAACI,QAAQ,CAAC;IAClBX,QAAQ,CAACW,QAAQ,CAAC;EACpB,CAAC,EACD,CAACX,QAAQ,CAAC,CACX;EAED,oBACE;IAAK,SAAS,EAAC,oCAAoC;IAAA,uBACjD,KAAC,WAAW;MACV,GAAG,EAAEF,GAAI;MACT,SAAS,EAAEZ,UAAU,CAACa,SAAS,CAAE;MACjC,OAAO,EAAEN,QAAS;MAClB,mBAAmB,EAAEJ,mBAAoB;MACzC,QAAQ,EAAEqB,YAAa;MACvB,QAAQ,EAAED,YAAa;MACvB,OAAO,EAAEjB,YAAa;MACtB,WAAW,EAAEE,WAAY;MACzB,SAAS,EAAEc,SAAU;MACrB,KAAK,EAAEF,KAAM;MACb,OAAO,EAAEH,OAAQ;MACjB,MAAM,EAAEC,MAAO;MACf,eAAaC;IAAW;EACxB,EACE;AAEV,CAAC,CACF;AAEDV,SAAS,CAACkB,WAAW,GAAG,WAAW;AAEnClB,SAAS,CAACmB,YAAY,GAAG;EACvBf,SAAS,EAAE,EAAE;EACbC,QAAQ,EAAE,MAAM,KAAK;EACrBE,YAAY,EAAE,EAAE;EAChBC,OAAO,EAAE,MAAM,KAAK;EACpBC,MAAM,EAAE,MAAM,KAAK;EACnB,aAAa,EAAEH;AACjB,CAAC;AAED,eAAeN,SAAS"}
1
+ {"version":3,"file":"DateInput.js","names":["React","useCallback","useState","classNames","Log","MaskedInput","getNextSegmentValue","jsx","_jsx","log","module","DATE_PATTERN","EXAMPLES","DATE_FORMAT","DateInput","forwardRef","props","ref","className","onChange","undefined","defaultValue","onFocus","onBlur","dataTestId","value","setValue","selection","setSelection","handleChange","newValue","debug","children","example","onSelect","pattern","placeholder","displayName","defaultProps"],"sources":["../src/DateInput.tsx"],"sourcesContent":["import React, { useCallback, useState } from 'react';\nimport classNames from 'classnames';\nimport Log from '@deephaven/log';\nimport MaskedInput, { SelectionSegment } from './MaskedInput';\nimport { getNextSegmentValue } from './DateInputUtils';\n\nconst log = Log.module('DateInput');\n\nconst DATE_PATTERN = '[12][0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])';\nconst EXAMPLES = ['2000-01-01', '2022-12-31'];\nconst DATE_FORMAT = 'YYYY-MM-DD';\n\ntype DateInputProps = {\n className?: string;\n onChange?(date?: string): void;\n defaultValue?: string;\n onFocus?(): void;\n onBlur?(): void;\n 'data-testid'?: string;\n};\n\nconst DateInput = React.forwardRef<HTMLInputElement, DateInputProps>(\n (props: DateInputProps, ref) => {\n const {\n className = '',\n onChange = () => undefined,\n defaultValue = '',\n onFocus = () => undefined,\n onBlur = () => undefined,\n 'data-testid': dataTestId,\n } = props;\n const [value, setValue] = useState(defaultValue);\n const [selection, setSelection] = useState<SelectionSegment>();\n\n const handleChange = useCallback(\n (newValue: string): void => {\n log.debug('handleChange', newValue);\n setValue(newValue);\n onChange(newValue);\n },\n [onChange]\n );\n\n return (\n <div className=\"d-flex flex-row align-items-center\">\n <MaskedInput\n ref={ref}\n className={classNames(className)}\n example={EXAMPLES}\n getNextSegmentValue={getNextSegmentValue}\n onChange={handleChange}\n onSelect={setSelection}\n pattern={DATE_PATTERN}\n placeholder={DATE_FORMAT}\n selection={selection}\n value={value}\n onFocus={onFocus}\n onBlur={onBlur}\n data-testid={dataTestId}\n />\n </div>\n );\n }\n);\n\nDateInput.displayName = 'DateInput';\n\nDateInput.defaultProps = {\n className: '',\n onChange: () => false,\n defaultValue: '',\n onFocus: () => false,\n onBlur: () => false,\n 'data-testid': undefined,\n};\n\nexport default DateInput;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,WAAW,EAAEC,QAAQ,QAAQ,OAAO;AACpD,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAOC,GAAG,MAAM,gBAAgB;AAAC,OAC1BC,WAAW;AAAA,SACTC,mBAAmB;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAE5B,IAAMC,GAAG,GAAGL,GAAG,CAACM,MAAM,CAAC,WAAW,CAAC;AAEnC,IAAMC,YAAY,GAAG,yDAAyD;AAC9E,IAAMC,QAAQ,GAAG,CAAC,YAAY,EAAE,YAAY,CAAC;AAC7C,IAAMC,WAAW,GAAG,YAAY;AAWhC,IAAMC,SAAS,gBAAGd,KAAK,CAACe,UAAU,CAChC,CAACC,KAAqB,EAAEC,GAAG,KAAK;EAC9B,IAAM;IACJC,SAAS,GAAG,EAAE;IACdC,QAAQ,GAAGA,CAAA,KAAMC,SAAS;IAC1BC,YAAY,GAAG,EAAE;IACjBC,OAAO,GAAGA,CAAA,KAAMF,SAAS;IACzBG,MAAM,GAAGA,CAAA,KAAMH,SAAS;IACxB,aAAa,EAAEI;EACjB,CAAC,GAAGR,KAAK;EACT,IAAM,CAACS,KAAK,EAAEC,QAAQ,CAAC,GAAGxB,QAAQ,CAACmB,YAAY,CAAC;EAChD,IAAM,CAACM,SAAS,EAAEC,YAAY,CAAC,GAAG1B,QAAQ,CAAmB,CAAC;EAE9D,IAAM2B,YAAY,GAAG5B,WAAW,CAC7B6B,QAAgB,IAAW;IAC1BrB,GAAG,CAACsB,KAAK,CAAC,cAAc,EAAED,QAAQ,CAAC;IACnCJ,QAAQ,CAACI,QAAQ,CAAC;IAClBX,QAAQ,CAACW,QAAQ,CAAC;EACpB,CAAC,EACD,CAACX,QAAQ,CACX,CAAC;EAED,oBACEX,IAAA;IAAKU,SAAS,EAAC,oCAAoC;IAAAc,QAAA,eACjDxB,IAAA,CAACH,WAAW;MACVY,GAAG,EAAEA,GAAI;MACTC,SAAS,EAAEf,UAAU,CAACe,SAAS,CAAE;MACjCe,OAAO,EAAErB,QAAS;MAClBN,mBAAmB,EAAEA,mBAAoB;MACzCa,QAAQ,EAAEU,YAAa;MACvBK,QAAQ,EAAEN,YAAa;MACvBO,OAAO,EAAExB,YAAa;MACtByB,WAAW,EAAEvB,WAAY;MACzBc,SAAS,EAAEA,SAAU;MACrBF,KAAK,EAAEA,KAAM;MACbH,OAAO,EAAEA,OAAQ;MACjBC,MAAM,EAAEA,MAAO;MACf,eAAaC;IAAW,CACzB;EAAC,CACC,CAAC;AAEV,CACF,CAAC;AAEDV,SAAS,CAACuB,WAAW,GAAG,WAAW;AAEnCvB,SAAS,CAACwB,YAAY,GAAG;EACvBpB,SAAS,EAAE,EAAE;EACbC,QAAQ,EAAEA,CAAA,KAAM,KAAK;EACrBE,YAAY,EAAE,EAAE;EAChBC,OAAO,EAAEA,CAAA,KAAM,KAAK;EACpBC,MAAM,EAAEA,CAAA,KAAM,KAAK;EACnB,aAAa,EAAEH;AACjB,CAAC;AAED,eAAeN,SAAS"}
@@ -1 +1 @@
1
- {"version":3,"file":"DateInputUtils.js","names":["getNextNumberSegmentValue","delta","segmentValue","lowerBound","upperBound","length","modValue","newSegmentValue","parseInt","padStart","getNextSegmentValue","range","selectionStart"],"sources":["../src/DateInputUtils.ts"],"sourcesContent":["import { SelectionSegment } from './MaskedInput';\n\nexport function getNextNumberSegmentValue(\n delta: number,\n segmentValue: string,\n lowerBound: number,\n upperBound: number,\n length: number\n): string {\n const modValue = upperBound - lowerBound + 1;\n const newSegmentValue =\n ((((parseInt(segmentValue, 10) - delta - lowerBound) % modValue) +\n modValue) %\n modValue) +\n lowerBound;\n return `${newSegmentValue}`.padStart(length, '0');\n}\n\nexport function getNextSegmentValue(\n range: SelectionSegment,\n delta: number,\n segmentValue: string\n): string {\n const { selectionStart } = range;\n if (selectionStart === 0) {\n return getNextNumberSegmentValue(delta, segmentValue, 1900, 2099, 4);\n }\n if (selectionStart === 5) {\n return getNextNumberSegmentValue(delta, segmentValue, 1, 12, 2);\n }\n if (selectionStart === 8) {\n return getNextNumberSegmentValue(delta, segmentValue, 1, 31, 2);\n }\n if (selectionStart === 11) {\n // Hours input\n return getNextNumberSegmentValue(delta, segmentValue, 0, 23, 2);\n }\n if (selectionStart === 17 || selectionStart === 14) {\n // Minutes/seconds input\n return getNextNumberSegmentValue(delta, segmentValue, 0, 59, 2);\n }\n if (selectionStart === 20 || selectionStart === 24 || selectionStart === 28) {\n // Milli, micro, and nanosecond input\n return getNextNumberSegmentValue(delta, segmentValue, 0, 999, 3);\n }\n\n return segmentValue;\n}\n"],"mappings":"AAEA,OAAO,SAASA,yBAAyB,CACvCC,KAAa,EACbC,YAAoB,EACpBC,UAAkB,EAClBC,UAAkB,EAClBC,MAAc,EACN;EACR,IAAMC,QAAQ,GAAGF,UAAU,GAAGD,UAAU,GAAG,CAAC;EAC5C,IAAMI,eAAe,GAClB,CAAE,CAACC,QAAQ,CAACN,YAAY,EAAE,EAAE,CAAC,GAAGD,KAAK,GAAGE,UAAU,IAAIG,QAAQ,GAC7DA,QAAQ,IACRA,QAAQ,GACVH,UAAU;EACZ,OAAO,UAAGI,eAAe,EAAGE,QAAQ,CAACJ,MAAM,EAAE,GAAG,CAAC;AACnD;AAEA,OAAO,SAASK,mBAAmB,CACjCC,KAAuB,EACvBV,KAAa,EACbC,YAAoB,EACZ;EACR,IAAM;IAAEU;EAAe,CAAC,GAAGD,KAAK;EAChC,IAAIC,cAAc,KAAK,CAAC,EAAE;IACxB,OAAOZ,yBAAyB,CAACC,KAAK,EAAEC,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;EACtE;EACA,IAAIU,cAAc,KAAK,CAAC,EAAE;IACxB,OAAOZ,yBAAyB,CAACC,KAAK,EAAEC,YAAY,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;EACjE;EACA,IAAIU,cAAc,KAAK,CAAC,EAAE;IACxB,OAAOZ,yBAAyB,CAACC,KAAK,EAAEC,YAAY,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;EACjE;EACA,IAAIU,cAAc,KAAK,EAAE,EAAE;IACzB;IACA,OAAOZ,yBAAyB,CAACC,KAAK,EAAEC,YAAY,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;EACjE;EACA,IAAIU,cAAc,KAAK,EAAE,IAAIA,cAAc,KAAK,EAAE,EAAE;IAClD;IACA,OAAOZ,yBAAyB,CAACC,KAAK,EAAEC,YAAY,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;EACjE;EACA,IAAIU,cAAc,KAAK,EAAE,IAAIA,cAAc,KAAK,EAAE,IAAIA,cAAc,KAAK,EAAE,EAAE;IAC3E;IACA,OAAOZ,yBAAyB,CAACC,KAAK,EAAEC,YAAY,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;EAClE;EAEA,OAAOA,YAAY;AACrB"}
1
+ {"version":3,"file":"DateInputUtils.js","names":["getNextNumberSegmentValue","delta","segmentValue","lowerBound","upperBound","length","modValue","newSegmentValue","parseInt","concat","padStart","getNextSegmentValue","range","selectionStart"],"sources":["../src/DateInputUtils.ts"],"sourcesContent":["import { SelectionSegment } from './MaskedInput';\n\nexport function getNextNumberSegmentValue(\n delta: number,\n segmentValue: string,\n lowerBound: number,\n upperBound: number,\n length: number\n): string {\n const modValue = upperBound - lowerBound + 1;\n const newSegmentValue =\n ((((parseInt(segmentValue, 10) - delta - lowerBound) % modValue) +\n modValue) %\n modValue) +\n lowerBound;\n return `${newSegmentValue}`.padStart(length, '0');\n}\n\nexport function getNextSegmentValue(\n range: SelectionSegment,\n delta: number,\n segmentValue: string\n): string {\n const { selectionStart } = range;\n if (selectionStart === 0) {\n return getNextNumberSegmentValue(delta, segmentValue, 1900, 2099, 4);\n }\n if (selectionStart === 5) {\n return getNextNumberSegmentValue(delta, segmentValue, 1, 12, 2);\n }\n if (selectionStart === 8) {\n return getNextNumberSegmentValue(delta, segmentValue, 1, 31, 2);\n }\n if (selectionStart === 11) {\n // Hours input\n return getNextNumberSegmentValue(delta, segmentValue, 0, 23, 2);\n }\n if (selectionStart === 17 || selectionStart === 14) {\n // Minutes/seconds input\n return getNextNumberSegmentValue(delta, segmentValue, 0, 59, 2);\n }\n if (selectionStart === 20 || selectionStart === 24 || selectionStart === 28) {\n // Milli, micro, and nanosecond input\n return getNextNumberSegmentValue(delta, segmentValue, 0, 999, 3);\n }\n\n return segmentValue;\n}\n"],"mappings":"AAEA,OAAO,SAASA,yBAAyBA,CACvCC,KAAa,EACbC,YAAoB,EACpBC,UAAkB,EAClBC,UAAkB,EAClBC,MAAc,EACN;EACR,IAAMC,QAAQ,GAAGF,UAAU,GAAGD,UAAU,GAAG,CAAC;EAC5C,IAAMI,eAAe,GAClB,CAAE,CAACC,QAAQ,CAACN,YAAY,EAAE,EAAE,CAAC,GAAGD,KAAK,GAAGE,UAAU,IAAIG,QAAQ,GAC7DA,QAAQ,IACRA,QAAQ,GACVH,UAAU;EACZ,OAAO,GAAAM,MAAA,CAAGF,eAAe,EAAGG,QAAQ,CAACL,MAAM,EAAE,GAAG,CAAC;AACnD;AAEA,OAAO,SAASM,mBAAmBA,CACjCC,KAAuB,EACvBX,KAAa,EACbC,YAAoB,EACZ;EACR,IAAM;IAAEW;EAAe,CAAC,GAAGD,KAAK;EAChC,IAAIC,cAAc,KAAK,CAAC,EAAE;IACxB,OAAOb,yBAAyB,CAACC,KAAK,EAAEC,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;EACtE;EACA,IAAIW,cAAc,KAAK,CAAC,EAAE;IACxB,OAAOb,yBAAyB,CAACC,KAAK,EAAEC,YAAY,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;EACjE;EACA,IAAIW,cAAc,KAAK,CAAC,EAAE;IACxB,OAAOb,yBAAyB,CAACC,KAAK,EAAEC,YAAY,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;EACjE;EACA,IAAIW,cAAc,KAAK,EAAE,EAAE;IACzB;IACA,OAAOb,yBAAyB,CAACC,KAAK,EAAEC,YAAY,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;EACjE;EACA,IAAIW,cAAc,KAAK,EAAE,IAAIA,cAAc,KAAK,EAAE,EAAE;IAClD;IACA,OAAOb,yBAAyB,CAACC,KAAK,EAAEC,YAAY,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;EACjE;EACA,IAAIW,cAAc,KAAK,EAAE,IAAIA,cAAc,KAAK,EAAE,IAAIA,cAAc,KAAK,EAAE,EAAE;IAC3E;IACA,OAAOb,yBAAyB,CAACC,KAAK,EAAEC,YAAY,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;EAClE;EAEA,OAAOA,YAAY;AACrB"}
@@ -1 +1 @@
1
- {"version":3,"file":"DateTimeInput.js","names":["React","useCallback","useState","classNames","Log","MaskedInput","getNextSegmentValue","addSeparators","log","module","DATE_PATTERN","TIME_PATTERN","FULL_DATE_PATTERN","DATE_VALUE_STRING","DEFAULT_VALUE_STRING","FULL_DATE_FORMAT","fixIncompleteValue","value","length","substring","replace","removeSeparators","EXAMPLES","DateTimeInput","forwardRef","props","ref","className","onChange","undefined","defaultValue","onFocus","onBlur","onSubmit","dataTestId","setValue","selection","setSelection","handleChange","newValue","debug","handleBlur","prevValue","fixedValue","displayName","defaultProps"],"sources":["../src/DateTimeInput.tsx"],"sourcesContent":["import React, { KeyboardEvent, useCallback, useState } from 'react';\nimport classNames from 'classnames';\nimport Log from '@deephaven/log';\nimport MaskedInput, { SelectionSegment } from './MaskedInput';\nimport { getNextSegmentValue } from './DateInputUtils';\nimport { addSeparators } from './DateTimeInputUtils';\n\nconst log = Log.module('DateTimeInput');\n\n// This could be more restrictive and restrict days to the number of days in the month...\n// But then gotta take leap year into account and everything.\nconst DATE_PATTERN = '[12][0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])';\n// Put zero width spaces in the nanosecond part of the date to allow jumping between segments\nconst TIME_PATTERN =\n '([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]\\\\.[0-9]{3}\\u200B[0-9]{3}\\u200B[0-9]{3}';\nconst FULL_DATE_PATTERN = `${DATE_PATTERN} ${TIME_PATTERN}`;\nconst DATE_VALUE_STRING = '2022-01-01';\nconst DEFAULT_VALUE_STRING = `${DATE_VALUE_STRING} 00:00:00.000000000`;\nconst FULL_DATE_FORMAT = 'YYYY-MM-DD HH:MM:SS.SSSSSSSSS';\n\ntype DateTimeInputProps = {\n className?: string;\n onChange?(value?: string): void;\n defaultValue?: string;\n onFocus?(): void;\n onBlur?(): void;\n onSubmit?(event?: KeyboardEvent<HTMLInputElement>): void;\n 'data-testid'?: string;\n};\n\nfunction fixIncompleteValue(value: string): string {\n if (value != null && value.length >= DATE_VALUE_STRING.length) {\n return `${value.substring(0, DATE_VALUE_STRING.length)}${value\n .substring(DATE_VALUE_STRING.length)\n .replace(/\\u2007/g, '0')}${DEFAULT_VALUE_STRING.substring(value.length)}`;\n }\n return value;\n}\n\nfunction removeSeparators(value: string): string {\n return value.replace(/\\u200B/g, '');\n}\n\nconst EXAMPLES = [addSeparators(DEFAULT_VALUE_STRING)];\n\nconst DateTimeInput = React.forwardRef<HTMLInputElement, DateTimeInputProps>(\n (props: DateTimeInputProps, ref) => {\n const {\n className = '',\n onChange = () => undefined,\n defaultValue = '',\n onFocus = () => undefined,\n onBlur = () => undefined,\n onSubmit,\n 'data-testid': dataTestId,\n } = props;\n const [value, setValue] = useState(\n defaultValue.length > 0 ? addSeparators(defaultValue) : ''\n );\n const [selection, setSelection] = useState<SelectionSegment>();\n\n const handleChange = useCallback(\n (newValue: string): void => {\n log.debug('handleChange', newValue);\n setValue(newValue);\n onChange(fixIncompleteValue(removeSeparators(newValue)));\n },\n [onChange]\n );\n\n const handleBlur = useCallback((): void => {\n const prevValue = removeSeparators(value);\n const fixedValue = fixIncompleteValue(prevValue);\n // Update the value displayed in the input\n // onChange with the fixed value already triggered in handleChange\n if (fixedValue !== prevValue) {\n setValue(addSeparators(fixedValue));\n }\n onBlur();\n }, [value, onBlur]);\n\n return (\n <div className=\"d-flex flex-row align-items-center\">\n <MaskedInput\n ref={ref}\n className={classNames(className)}\n example={EXAMPLES}\n getNextSegmentValue={getNextSegmentValue}\n onChange={handleChange}\n onSelect={setSelection}\n onSubmit={onSubmit}\n pattern={FULL_DATE_PATTERN}\n placeholder={FULL_DATE_FORMAT}\n selection={selection}\n value={value}\n onFocus={onFocus}\n onBlur={handleBlur}\n data-testid={dataTestId}\n />\n </div>\n );\n }\n);\n\nDateTimeInput.displayName = 'DateTimeInput';\n\nDateTimeInput.defaultProps = {\n className: '',\n onChange: () => undefined,\n defaultValue: '',\n onFocus: () => undefined,\n onBlur: () => undefined,\n 'data-testid': undefined,\n};\n\nexport default DateTimeInput;\n"],"mappings":"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"}
1
+ {"version":3,"file":"DateTimeInput.js","names":["React","useCallback","useState","classNames","Log","MaskedInput","getNextSegmentValue","addSeparators","jsx","_jsx","log","module","DATE_PATTERN","TIME_PATTERN","FULL_DATE_PATTERN","concat","DATE_VALUE_STRING","DEFAULT_VALUE_STRING","FULL_DATE_FORMAT","fixIncompleteValue","value","length","substring","replace","removeSeparators","EXAMPLES","DateTimeInput","forwardRef","props","ref","className","onChange","undefined","defaultValue","onFocus","onBlur","onSubmit","dataTestId","setValue","selection","setSelection","handleChange","newValue","debug","handleBlur","prevValue","fixedValue","children","example","onSelect","pattern","placeholder","displayName","defaultProps"],"sources":["../src/DateTimeInput.tsx"],"sourcesContent":["import React, { KeyboardEvent, useCallback, useState } from 'react';\nimport classNames from 'classnames';\nimport Log from '@deephaven/log';\nimport MaskedInput, { SelectionSegment } from './MaskedInput';\nimport { getNextSegmentValue } from './DateInputUtils';\nimport { addSeparators } from './DateTimeInputUtils';\n\nconst log = Log.module('DateTimeInput');\n\n// This could be more restrictive and restrict days to the number of days in the month...\n// But then gotta take leap year into account and everything.\nconst DATE_PATTERN = '[12][0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])';\n// Put zero width spaces in the nanosecond part of the date to allow jumping between segments\nconst TIME_PATTERN =\n '([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]\\\\.[0-9]{3}\\u200B[0-9]{3}\\u200B[0-9]{3}';\nconst FULL_DATE_PATTERN = `${DATE_PATTERN} ${TIME_PATTERN}`;\nconst DATE_VALUE_STRING = '2022-01-01';\nconst DEFAULT_VALUE_STRING = `${DATE_VALUE_STRING} 00:00:00.000000000`;\nconst FULL_DATE_FORMAT = 'YYYY-MM-DD HH:MM:SS.SSSSSSSSS';\n\ntype DateTimeInputProps = {\n className?: string;\n onChange?(value?: string): void;\n defaultValue?: string;\n onFocus?(): void;\n onBlur?(): void;\n onSubmit?(event?: KeyboardEvent<HTMLInputElement>): void;\n 'data-testid'?: string;\n};\n\nfunction fixIncompleteValue(value: string): string {\n if (value != null && value.length >= DATE_VALUE_STRING.length) {\n return `${value.substring(0, DATE_VALUE_STRING.length)}${value\n .substring(DATE_VALUE_STRING.length)\n .replace(/\\u2007/g, '0')}${DEFAULT_VALUE_STRING.substring(value.length)}`;\n }\n return value;\n}\n\nfunction removeSeparators(value: string): string {\n return value.replace(/\\u200B/g, '');\n}\n\nconst EXAMPLES = [addSeparators(DEFAULT_VALUE_STRING)];\n\nconst DateTimeInput = React.forwardRef<HTMLInputElement, DateTimeInputProps>(\n (props: DateTimeInputProps, ref) => {\n const {\n className = '',\n onChange = () => undefined,\n defaultValue = '',\n onFocus = () => undefined,\n onBlur = () => undefined,\n onSubmit,\n 'data-testid': dataTestId,\n } = props;\n const [value, setValue] = useState(\n defaultValue.length > 0 ? addSeparators(defaultValue) : ''\n );\n const [selection, setSelection] = useState<SelectionSegment>();\n\n const handleChange = useCallback(\n (newValue: string): void => {\n log.debug('handleChange', newValue);\n setValue(newValue);\n onChange(fixIncompleteValue(removeSeparators(newValue)));\n },\n [onChange]\n );\n\n const handleBlur = useCallback((): void => {\n const prevValue = removeSeparators(value);\n const fixedValue = fixIncompleteValue(prevValue);\n // Update the value displayed in the input\n // onChange with the fixed value already triggered in handleChange\n if (fixedValue !== prevValue) {\n setValue(addSeparators(fixedValue));\n }\n onBlur();\n }, [value, onBlur]);\n\n return (\n <div className=\"d-flex flex-row align-items-center\">\n <MaskedInput\n ref={ref}\n className={classNames(className)}\n example={EXAMPLES}\n getNextSegmentValue={getNextSegmentValue}\n onChange={handleChange}\n onSelect={setSelection}\n onSubmit={onSubmit}\n pattern={FULL_DATE_PATTERN}\n placeholder={FULL_DATE_FORMAT}\n selection={selection}\n value={value}\n onFocus={onFocus}\n onBlur={handleBlur}\n data-testid={dataTestId}\n />\n </div>\n );\n }\n);\n\nDateTimeInput.displayName = 'DateTimeInput';\n\nDateTimeInput.defaultProps = {\n className: '',\n onChange: () => undefined,\n defaultValue: '',\n onFocus: () => undefined,\n onBlur: () => undefined,\n 'data-testid': undefined,\n};\n\nexport default DateTimeInput;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"DateTimeInputUtils.js","names":["addSeparators","value","dateTimeMillis","substring","micros","nanos","filter","v","join"],"sources":["../src/DateTimeInputUtils.ts"],"sourcesContent":["/* eslint-disable import/prefer-default-export */\nexport function addSeparators(value: string): string {\n const dateTimeMillis = value.substring(0, 23);\n const micros = value.substring(23, 26);\n const nanos = value.substring(26);\n return [dateTimeMillis, micros, nanos].filter(v => v !== '').join('\\u200B');\n}\n"],"mappings":"AAAA;AACA,OAAO,SAASA,aAAa,CAACC,KAAa,EAAU;EACnD,IAAMC,cAAc,GAAGD,KAAK,CAACE,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC;EAC7C,IAAMC,MAAM,GAAGH,KAAK,CAACE,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;EACtC,IAAME,KAAK,GAAGJ,KAAK,CAACE,SAAS,CAAC,EAAE,CAAC;EACjC,OAAO,CAACD,cAAc,EAAEE,MAAM,EAAEC,KAAK,CAAC,CAACC,MAAM,CAACC,CAAC,IAAIA,CAAC,KAAK,EAAE,CAAC,CAACC,IAAI,CAAC,QAAQ,CAAC;AAC7E"}
1
+ {"version":3,"file":"DateTimeInputUtils.js","names":["addSeparators","value","dateTimeMillis","substring","micros","nanos","filter","v","join"],"sources":["../src/DateTimeInputUtils.ts"],"sourcesContent":["/* eslint-disable import/prefer-default-export */\nexport function addSeparators(value: string): string {\n const dateTimeMillis = value.substring(0, 23);\n const micros = value.substring(23, 26);\n const nanos = value.substring(26);\n return [dateTimeMillis, micros, nanos].filter(v => v !== '').join('\\u200B');\n}\n"],"mappings":"AAAA;AACA,OAAO,SAASA,aAAaA,CAACC,KAAa,EAAU;EACnD,IAAMC,cAAc,GAAGD,KAAK,CAACE,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC;EAC7C,IAAMC,MAAM,GAAGH,KAAK,CAACE,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;EACtC,IAAME,KAAK,GAAGJ,KAAK,CAACE,SAAS,CAAC,EAAE,CAAC;EACjC,OAAO,CAACD,cAAc,EAAEE,MAAM,EAAEC,KAAK,CAAC,CAACC,MAAM,CAACC,CAAC,IAAIA,CAAC,KAAK,EAAE,CAAC,CAACC,IAAI,CAAC,QAAQ,CAAC;AAC7E"}
@@ -1 +1 @@
1
- {"version":3,"file":"DebouncedSearchInput.js","names":["React","PureComponent","debounce","SearchInput","DebouncedSearchInput","constructor","props","searchInput","createRef","handleChange","bind","sendUpdate","debounceMs","state","value","componentDidUpdate","prevProps","setState","focus","current","event","target","onChange","render","placeholder","className","matchCount","id","dataTestId","undefined"],"sources":["../src/DebouncedSearchInput.tsx"],"sourcesContent":["import React, { PureComponent } from 'react';\nimport debounce from 'lodash.debounce';\nimport SearchInput from './SearchInput';\n\ninterface DebouncedSearchInputProps {\n value: string;\n placeholder: string;\n onChange(value: string): void;\n className: string;\n matchCount: number;\n debounceMs: number;\n id: string;\n 'data-testid'?: string;\n}\n\ninterface DebouncedSearchInputState {\n value: string;\n}\n\nclass DebouncedSearchInput extends PureComponent<\n DebouncedSearchInputProps,\n DebouncedSearchInputState\n> {\n static defaultProps = {\n placeholder: 'Search',\n className: '',\n matchCount: null,\n debounceMs: 250,\n id: '',\n 'data-testid': undefined,\n };\n\n constructor(props: DebouncedSearchInputProps) {\n super(props);\n this.searchInput = React.createRef();\n this.handleChange = this.handleChange.bind(this);\n this.sendUpdate = debounce(this.sendUpdate.bind(this), props.debounceMs);\n\n this.state = {\n value: props.value,\n };\n }\n\n componentDidUpdate(prevProps: DebouncedSearchInputProps): void {\n const { value } = this.props;\n if (prevProps.value !== value) {\n // eslint-disable-next-line react/no-did-update-set-state\n this.setState({ value });\n }\n }\n\n searchInput: React.RefObject<SearchInput>;\n\n focus(): void {\n this.searchInput.current?.focus();\n }\n\n handleChange(event: React.ChangeEvent<HTMLInputElement>): void {\n this.setState({ value: event.target.value }, this.sendUpdate);\n }\n\n sendUpdate(): void {\n const { onChange } = this.props;\n const { value } = this.state;\n onChange(value);\n }\n\n render(): JSX.Element {\n const {\n placeholder,\n className,\n matchCount,\n id,\n 'data-testid': dataTestId,\n } = this.props;\n const { value } = this.state;\n return (\n <SearchInput\n value={value}\n placeholder={placeholder}\n onChange={this.handleChange}\n className={className}\n matchCount={matchCount}\n ref={this.searchInput}\n id={id}\n data-testid={dataTestId}\n />\n );\n }\n}\n\nexport default DebouncedSearchInput;\n"],"mappings":";;;AAAA,OAAOA,KAAK,IAAIC,aAAa,QAAQ,OAAO;AAC5C,OAAOC,QAAQ,MAAM,iBAAiB;AAAC,OAChCC,WAAW;AAAA;AAiBlB,MAAMC,oBAAoB,SAASH,aAAa,CAG9C;EAUAI,WAAW,CAACC,KAAgC,EAAE;IAC5C,KAAK,CAACA,KAAK,CAAC;IAAC;IACb,IAAI,CAACC,WAAW,gBAAGP,KAAK,CAACQ,SAAS,EAAE;IACpC,IAAI,CAACC,YAAY,GAAG,IAAI,CAACA,YAAY,CAACC,IAAI,CAAC,IAAI,CAAC;IAChD,IAAI,CAACC,UAAU,GAAGT,QAAQ,CAAC,IAAI,CAACS,UAAU,CAACD,IAAI,CAAC,IAAI,CAAC,EAAEJ,KAAK,CAACM,UAAU,CAAC;IAExE,IAAI,CAACC,KAAK,GAAG;MACXC,KAAK,EAAER,KAAK,CAACQ;IACf,CAAC;EACH;EAEAC,kBAAkB,CAACC,SAAoC,EAAQ;IAC7D,IAAM;MAAEF;IAAM,CAAC,GAAG,IAAI,CAACR,KAAK;IAC5B,IAAIU,SAAS,CAACF,KAAK,KAAKA,KAAK,EAAE;MAC7B;MACA,IAAI,CAACG,QAAQ,CAAC;QAAEH;MAAM,CAAC,CAAC;IAC1B;EACF;EAIAI,KAAK,GAAS;IAAA;IACZ,6BAAI,CAACX,WAAW,CAACY,OAAO,0DAAxB,sBAA0BD,KAAK,EAAE;EACnC;EAEAT,YAAY,CAACW,KAA0C,EAAQ;IAC7D,IAAI,CAACH,QAAQ,CAAC;MAAEH,KAAK,EAAEM,KAAK,CAACC,MAAM,CAACP;IAAM,CAAC,EAAE,IAAI,CAACH,UAAU,CAAC;EAC/D;EAEAA,UAAU,GAAS;IACjB,IAAM;MAAEW;IAAS,CAAC,GAAG,IAAI,CAAChB,KAAK;IAC/B,IAAM;MAAEQ;IAAM,CAAC,GAAG,IAAI,CAACD,KAAK;IAC5BS,QAAQ,CAACR,KAAK,CAAC;EACjB;EAEAS,MAAM,GAAgB;IACpB,IAAM;MACJC,WAAW;MACXC,SAAS;MACTC,UAAU;MACVC,EAAE;MACF,aAAa,EAAEC;IACjB,CAAC,GAAG,IAAI,CAACtB,KAAK;IACd,IAAM;MAAEQ;IAAM,CAAC,GAAG,IAAI,CAACD,KAAK;IAC5B,oBACE,KAAC,WAAW;MACV,KAAK,EAAEC,KAAM;MACb,WAAW,EAAEU,WAAY;MACzB,QAAQ,EAAE,IAAI,CAACf,YAAa;MAC5B,SAAS,EAAEgB,SAAU;MACrB,UAAU,EAAEC,UAAW;MACvB,GAAG,EAAE,IAAI,CAACnB,WAAY;MACtB,EAAE,EAAEoB,EAAG;MACP,eAAaC;IAAW,EACxB;EAEN;AACF;AAAC,gBAtEKxB,oBAAoB,kBAIF;EACpBoB,WAAW,EAAE,QAAQ;EACrBC,SAAS,EAAE,EAAE;EACbC,UAAU,EAAE,IAAI;EAChBd,UAAU,EAAE,GAAG;EACfe,EAAE,EAAE,EAAE;EACN,aAAa,EAAEE;AACjB,CAAC;AA6DH,eAAezB,oBAAoB"}
1
+ {"version":3,"file":"DebouncedSearchInput.js","names":["React","PureComponent","debounce","SearchInput","jsx","_jsx","DebouncedSearchInput","constructor","props","_defineProperty","searchInput","createRef","handleChange","bind","sendUpdate","debounceMs","state","value","componentDidUpdate","prevProps","setState","focus","_this$searchInput$cur","current","event","target","onChange","render","placeholder","className","matchCount","id","dataTestId","ref","undefined"],"sources":["../src/DebouncedSearchInput.tsx"],"sourcesContent":["import React, { PureComponent } from 'react';\nimport debounce from 'lodash.debounce';\nimport SearchInput from './SearchInput';\n\ninterface DebouncedSearchInputProps {\n value: string;\n placeholder: string;\n onChange(value: string): void;\n className: string;\n matchCount: number;\n debounceMs: number;\n id: string;\n 'data-testid'?: string;\n}\n\ninterface DebouncedSearchInputState {\n value: string;\n}\n\nclass DebouncedSearchInput extends PureComponent<\n DebouncedSearchInputProps,\n DebouncedSearchInputState\n> {\n static defaultProps = {\n placeholder: 'Search',\n className: '',\n matchCount: null,\n debounceMs: 250,\n id: '',\n 'data-testid': undefined,\n };\n\n constructor(props: DebouncedSearchInputProps) {\n super(props);\n this.searchInput = React.createRef();\n this.handleChange = this.handleChange.bind(this);\n this.sendUpdate = debounce(this.sendUpdate.bind(this), props.debounceMs);\n\n this.state = {\n value: props.value,\n };\n }\n\n componentDidUpdate(prevProps: DebouncedSearchInputProps): void {\n const { value } = this.props;\n if (prevProps.value !== value) {\n // eslint-disable-next-line react/no-did-update-set-state\n this.setState({ value });\n }\n }\n\n searchInput: React.RefObject<SearchInput>;\n\n focus(): void {\n this.searchInput.current?.focus();\n }\n\n handleChange(event: React.ChangeEvent<HTMLInputElement>): void {\n this.setState({ value: event.target.value }, this.sendUpdate);\n }\n\n sendUpdate(): void {\n const { onChange } = this.props;\n const { value } = this.state;\n onChange(value);\n }\n\n render(): JSX.Element {\n const {\n placeholder,\n className,\n matchCount,\n id,\n 'data-testid': dataTestId,\n } = this.props;\n const { value } = this.state;\n return (\n <SearchInput\n value={value}\n placeholder={placeholder}\n onChange={this.handleChange}\n className={className}\n matchCount={matchCount}\n ref={this.searchInput}\n id={id}\n data-testid={dataTestId}\n />\n );\n }\n}\n\nexport default DebouncedSearchInput;\n"],"mappings":";;;AAAA,OAAOA,KAAK,IAAIC,aAAa,QAAQ,OAAO;AAC5C,OAAOC,QAAQ,MAAM,iBAAiB;AAAC,OAChCC,WAAW;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAiBlB,MAAMC,oBAAoB,SAASL,aAAa,CAG9C;EAUAM,WAAWA,CAACC,KAAgC,EAAE;IAC5C,KAAK,CAACA,KAAK,CAAC;IAACC,eAAA;IACb,IAAI,CAACC,WAAW,gBAAGV,KAAK,CAACW,SAAS,CAAC,CAAC;IACpC,IAAI,CAACC,YAAY,GAAG,IAAI,CAACA,YAAY,CAACC,IAAI,CAAC,IAAI,CAAC;IAChD,IAAI,CAACC,UAAU,GAAGZ,QAAQ,CAAC,IAAI,CAACY,UAAU,CAACD,IAAI,CAAC,IAAI,CAAC,EAAEL,KAAK,CAACO,UAAU,CAAC;IAExE,IAAI,CAACC,KAAK,GAAG;MACXC,KAAK,EAAET,KAAK,CAACS;IACf,CAAC;EACH;EAEAC,kBAAkBA,CAACC,SAAoC,EAAQ;IAC7D,IAAM;MAAEF;IAAM,CAAC,GAAG,IAAI,CAACT,KAAK;IAC5B,IAAIW,SAAS,CAACF,KAAK,KAAKA,KAAK,EAAE;MAC7B;MACA,IAAI,CAACG,QAAQ,CAAC;QAAEH;MAAM,CAAC,CAAC;IAC1B;EACF;EAIAI,KAAKA,CAAA,EAAS;IAAA,IAAAC,qBAAA;IACZ,CAAAA,qBAAA,OAAI,CAACZ,WAAW,CAACa,OAAO,cAAAD,qBAAA,uBAAxBA,qBAAA,CAA0BD,KAAK,CAAC,CAAC;EACnC;EAEAT,YAAYA,CAACY,KAA0C,EAAQ;IAC7D,IAAI,CAACJ,QAAQ,CAAC;MAAEH,KAAK,EAAEO,KAAK,CAACC,MAAM,CAACR;IAAM,CAAC,EAAE,IAAI,CAACH,UAAU,CAAC;EAC/D;EAEAA,UAAUA,CAAA,EAAS;IACjB,IAAM;MAAEY;IAAS,CAAC,GAAG,IAAI,CAAClB,KAAK;IAC/B,IAAM;MAAES;IAAM,CAAC,GAAG,IAAI,CAACD,KAAK;IAC5BU,QAAQ,CAACT,KAAK,CAAC;EACjB;EAEAU,MAAMA,CAAA,EAAgB;IACpB,IAAM;MACJC,WAAW;MACXC,SAAS;MACTC,UAAU;MACVC,EAAE;MACF,aAAa,EAAEC;IACjB,CAAC,GAAG,IAAI,CAACxB,KAAK;IACd,IAAM;MAAES;IAAM,CAAC,GAAG,IAAI,CAACD,KAAK;IAC5B,oBACEX,IAAA,CAACF,WAAW;MACVc,KAAK,EAAEA,KAAM;MACbW,WAAW,EAAEA,WAAY;MACzBF,QAAQ,EAAE,IAAI,CAACd,YAAa;MAC5BiB,SAAS,EAAEA,SAAU;MACrBC,UAAU,EAAEA,UAAW;MACvBG,GAAG,EAAE,IAAI,CAACvB,WAAY;MACtBqB,EAAE,EAAEA,EAAG;MACP,eAAaC;IAAW,CACzB,CAAC;EAEN;AACF;AAACvB,eAAA,CAtEKH,oBAAoB,kBAIF;EACpBsB,WAAW,EAAE,QAAQ;EACrBC,SAAS,EAAE,EAAE;EACbC,UAAU,EAAE,IAAI;EAChBf,UAAU,EAAE,GAAG;EACfgB,EAAE,EAAE,EAAE;EACN,aAAa,EAAEG;AACjB,CAAC;AA6DH,eAAe5B,oBAAoB"}
@@ -1 +1 @@
1
- {"version":3,"file":"DragUtils.js","names":["flatten","DragUtils","reorder","sourceList","selectedRanges","destinationList","destinationIndex","insertIndex","adjustDestinationIndex","draggedItems","removeItems","splice","list","ranges","items","sortedRanges","map","range","index","sort","a","b","i","length","start","end","adjustedIndex","Math","min","startDragging","document","documentElement","classList","add","stopDragging","remove"],"sources":["../src/DragUtils.ts"],"sourcesContent":["import flatten from 'lodash.flatten';\n\ntype Range = [number, number];\n\nclass DragUtils {\n /**\n * Re-orders the provided item lists in place based on the selectedRanges and destinationIndex provided\n * @param sourceList Array of the source items\n * @param selectedRanges Array of the selected ranges in the source list\n * @param destinationList Destination items. If dragging within the same list, set it to sourceItems\n * @param destinationIndex The index items are being dropped in the destinationList, adjusted for the removed items\n * @returns The items that were dragged\n */\n static reorder<T>(\n sourceList: T[],\n selectedRanges: Range[],\n destinationList: T[],\n destinationIndex: number\n ): T[] {\n const insertIndex =\n sourceList === destinationList\n ? DragUtils.adjustDestinationIndex(destinationIndex, selectedRanges)\n : destinationIndex;\n const draggedItems = DragUtils.removeItems(sourceList, selectedRanges);\n destinationList.splice(insertIndex, 0, ...draggedItems);\n return draggedItems;\n }\n\n /**\n * Removes the provided ranges from the list in place\n * @param list Array of items to remove the ranges.\n * @param ranges Array of the ranges to remove.\n * @returns The removed items, in the order of the ranges removed.\n */\n static removeItems<T>(list: T[], ranges: Range[]): T[] {\n const items = [];\n\n // Sort them in reverse, so we don't screw up the range indexes\n const sortedRanges = ranges\n .map((range, index) => ({ range, index }))\n .sort((a, b) => b.range[0] - a.range[0]);\n for (let i = 0; i < sortedRanges.length; i += 1) {\n const { range, index } = sortedRanges[i];\n const [start, end] = range;\n items[index] = list.splice(start, end - start + 1);\n }\n\n return flatten(items);\n }\n\n /**\n * Adjusts the destination index for when dropping into the same list you're dragging from.\n * @param destinationIndex The original destination index\n * @param ranges The ranges that are moving\n * @returns Index where item should be inserted after all ranges are removed\n */\n static adjustDestinationIndex(\n destinationIndex: number,\n ranges: Range[]\n ): number {\n let adjustedIndex = destinationIndex;\n for (let i = 0; i < ranges.length; i += 1) {\n const [start, end] = ranges[i];\n if (start > destinationIndex) {\n break;\n }\n\n adjustedIndex -= Math.min(end, destinationIndex - 1) - start + 1;\n }\n return adjustedIndex;\n }\n\n static startDragging(): void {\n document.documentElement.classList.add('drag-pointer-events-none');\n }\n\n static stopDragging(): void {\n document.documentElement.classList.remove('drag-pointer-events-none');\n }\n}\n\nexport default DragUtils;\n"],"mappings":"AAAA,OAAOA,OAAO,MAAM,gBAAgB;AAIpC,MAAMC,SAAS,CAAC;EACd;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE,OAAOC,OAAO,CACZC,UAAe,EACfC,cAAuB,EACvBC,eAAoB,EACpBC,gBAAwB,EACnB;IACL,IAAMC,WAAW,GACfJ,UAAU,KAAKE,eAAe,GAC1BJ,SAAS,CAACO,sBAAsB,CAACF,gBAAgB,EAAEF,cAAc,CAAC,GAClEE,gBAAgB;IACtB,IAAMG,YAAY,GAAGR,SAAS,CAACS,WAAW,CAACP,UAAU,EAAEC,cAAc,CAAC;IACtEC,eAAe,CAACM,MAAM,CAACJ,WAAW,EAAE,CAAC,EAAE,GAAGE,YAAY,CAAC;IACvD,OAAOA,YAAY;EACrB;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE,OAAOC,WAAW,CAAIE,IAAS,EAAEC,MAAe,EAAO;IACrD,IAAMC,KAAK,GAAG,EAAE;;IAEhB;IACA,IAAMC,YAAY,GAAGF,MAAM,CACxBG,GAAG,CAAC,CAACC,KAAK,EAAEC,KAAK,MAAM;MAAED,KAAK;MAAEC;IAAM,CAAC,CAAC,CAAC,CACzCC,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKA,CAAC,CAACJ,KAAK,CAAC,CAAC,CAAC,GAAGG,CAAC,CAACH,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1C,KAAK,IAAIK,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGP,YAAY,CAACQ,MAAM,EAAED,CAAC,IAAI,CAAC,EAAE;MAC/C,IAAM;QAAEL,KAAK;QAAEC;MAAM,CAAC,GAAGH,YAAY,CAACO,CAAC,CAAC;MACxC,IAAM,CAACE,KAAK,EAAEC,GAAG,CAAC,GAAGR,KAAK;MAC1BH,KAAK,CAACI,KAAK,CAAC,GAAGN,IAAI,CAACD,MAAM,CAACa,KAAK,EAAEC,GAAG,GAAGD,KAAK,GAAG,CAAC,CAAC;IACpD;IAEA,OAAOxB,OAAO,CAACc,KAAK,CAAC;EACvB;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE,OAAON,sBAAsB,CAC3BF,gBAAwB,EACxBO,MAAe,EACP;IACR,IAAIa,aAAa,GAAGpB,gBAAgB;IACpC,KAAK,IAAIgB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGT,MAAM,CAACU,MAAM,EAAED,CAAC,IAAI,CAAC,EAAE;MACzC,IAAM,CAACE,KAAK,EAAEC,GAAG,CAAC,GAAGZ,MAAM,CAACS,CAAC,CAAC;MAC9B,IAAIE,KAAK,GAAGlB,gBAAgB,EAAE;QAC5B;MACF;MAEAoB,aAAa,IAAIC,IAAI,CAACC,GAAG,CAACH,GAAG,EAAEnB,gBAAgB,GAAG,CAAC,CAAC,GAAGkB,KAAK,GAAG,CAAC;IAClE;IACA,OAAOE,aAAa;EACtB;EAEA,OAAOG,aAAa,GAAS;IAC3BC,QAAQ,CAACC,eAAe,CAACC,SAAS,CAACC,GAAG,CAAC,0BAA0B,CAAC;EACpE;EAEA,OAAOC,YAAY,GAAS;IAC1BJ,QAAQ,CAACC,eAAe,CAACC,SAAS,CAACG,MAAM,CAAC,0BAA0B,CAAC;EACvE;AACF;AAEA,eAAelC,SAAS"}
1
+ {"version":3,"file":"DragUtils.js","names":["flatten","DragUtils","reorder","sourceList","selectedRanges","destinationList","destinationIndex","insertIndex","adjustDestinationIndex","draggedItems","removeItems","splice","list","ranges","items","sortedRanges","map","range","index","sort","a","b","i","length","start","end","adjustedIndex","Math","min","startDragging","document","documentElement","classList","add","stopDragging","remove"],"sources":["../src/DragUtils.ts"],"sourcesContent":["import flatten from 'lodash.flatten';\n\ntype Range = [number, number];\n\nclass DragUtils {\n /**\n * Re-orders the provided item lists in place based on the selectedRanges and destinationIndex provided\n * @param sourceList Array of the source items\n * @param selectedRanges Array of the selected ranges in the source list\n * @param destinationList Destination items. If dragging within the same list, set it to sourceItems\n * @param destinationIndex The index items are being dropped in the destinationList, adjusted for the removed items\n * @returns The items that were dragged\n */\n static reorder<T>(\n sourceList: T[],\n selectedRanges: Range[],\n destinationList: T[],\n destinationIndex: number\n ): T[] {\n const insertIndex =\n sourceList === destinationList\n ? DragUtils.adjustDestinationIndex(destinationIndex, selectedRanges)\n : destinationIndex;\n const draggedItems = DragUtils.removeItems(sourceList, selectedRanges);\n destinationList.splice(insertIndex, 0, ...draggedItems);\n return draggedItems;\n }\n\n /**\n * Removes the provided ranges from the list in place\n * @param list Array of items to remove the ranges.\n * @param ranges Array of the ranges to remove.\n * @returns The removed items, in the order of the ranges removed.\n */\n static removeItems<T>(list: T[], ranges: Range[]): T[] {\n const items = [];\n\n // Sort them in reverse, so we don't screw up the range indexes\n const sortedRanges = ranges\n .map((range, index) => ({ range, index }))\n .sort((a, b) => b.range[0] - a.range[0]);\n for (let i = 0; i < sortedRanges.length; i += 1) {\n const { range, index } = sortedRanges[i];\n const [start, end] = range;\n items[index] = list.splice(start, end - start + 1);\n }\n\n return flatten(items);\n }\n\n /**\n * Adjusts the destination index for when dropping into the same list you're dragging from.\n * @param destinationIndex The original destination index\n * @param ranges The ranges that are moving\n * @returns Index where item should be inserted after all ranges are removed\n */\n static adjustDestinationIndex(\n destinationIndex: number,\n ranges: Range[]\n ): number {\n let adjustedIndex = destinationIndex;\n for (let i = 0; i < ranges.length; i += 1) {\n const [start, end] = ranges[i];\n if (start > destinationIndex) {\n break;\n }\n\n adjustedIndex -= Math.min(end, destinationIndex - 1) - start + 1;\n }\n return adjustedIndex;\n }\n\n static startDragging(): void {\n document.documentElement.classList.add('drag-pointer-events-none');\n }\n\n static stopDragging(): void {\n document.documentElement.classList.remove('drag-pointer-events-none');\n }\n}\n\nexport default DragUtils;\n"],"mappings":"AAAA,OAAOA,OAAO,MAAM,gBAAgB;AAIpC,MAAMC,SAAS,CAAC;EACd;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE,OAAOC,OAAOA,CACZC,UAAe,EACfC,cAAuB,EACvBC,eAAoB,EACpBC,gBAAwB,EACnB;IACL,IAAMC,WAAW,GACfJ,UAAU,KAAKE,eAAe,GAC1BJ,SAAS,CAACO,sBAAsB,CAACF,gBAAgB,EAAEF,cAAc,CAAC,GAClEE,gBAAgB;IACtB,IAAMG,YAAY,GAAGR,SAAS,CAACS,WAAW,CAACP,UAAU,EAAEC,cAAc,CAAC;IACtEC,eAAe,CAACM,MAAM,CAACJ,WAAW,EAAE,CAAC,EAAE,GAAGE,YAAY,CAAC;IACvD,OAAOA,YAAY;EACrB;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE,OAAOC,WAAWA,CAAIE,IAAS,EAAEC,MAAe,EAAO;IACrD,IAAMC,KAAK,GAAG,EAAE;;IAEhB;IACA,IAAMC,YAAY,GAAGF,MAAM,CACxBG,GAAG,CAAC,CAACC,KAAK,EAAEC,KAAK,MAAM;MAAED,KAAK;MAAEC;IAAM,CAAC,CAAC,CAAC,CACzCC,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKA,CAAC,CAACJ,KAAK,CAAC,CAAC,CAAC,GAAGG,CAAC,CAACH,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1C,KAAK,IAAIK,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGP,YAAY,CAACQ,MAAM,EAAED,CAAC,IAAI,CAAC,EAAE;MAC/C,IAAM;QAAEL,KAAK;QAAEC;MAAM,CAAC,GAAGH,YAAY,CAACO,CAAC,CAAC;MACxC,IAAM,CAACE,KAAK,EAAEC,GAAG,CAAC,GAAGR,KAAK;MAC1BH,KAAK,CAACI,KAAK,CAAC,GAAGN,IAAI,CAACD,MAAM,CAACa,KAAK,EAAEC,GAAG,GAAGD,KAAK,GAAG,CAAC,CAAC;IACpD;IAEA,OAAOxB,OAAO,CAACc,KAAK,CAAC;EACvB;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE,OAAON,sBAAsBA,CAC3BF,gBAAwB,EACxBO,MAAe,EACP;IACR,IAAIa,aAAa,GAAGpB,gBAAgB;IACpC,KAAK,IAAIgB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGT,MAAM,CAACU,MAAM,EAAED,CAAC,IAAI,CAAC,EAAE;MACzC,IAAM,CAACE,KAAK,EAAEC,GAAG,CAAC,GAAGZ,MAAM,CAACS,CAAC,CAAC;MAC9B,IAAIE,KAAK,GAAGlB,gBAAgB,EAAE;QAC5B;MACF;MAEAoB,aAAa,IAAIC,IAAI,CAACC,GAAG,CAACH,GAAG,EAAEnB,gBAAgB,GAAG,CAAC,CAAC,GAAGkB,KAAK,GAAG,CAAC;IAClE;IACA,OAAOE,aAAa;EACtB;EAEA,OAAOG,aAAaA,CAAA,EAAS;IAC3BC,QAAQ,CAACC,eAAe,CAACC,SAAS,CAACC,GAAG,CAAC,0BAA0B,CAAC;EACpE;EAEA,OAAOC,YAAYA,CAAA,EAAS;IAC1BJ,QAAQ,CAACC,eAAe,CAACC,SAAS,CAACG,MAAM,CAAC,0BAA0B,CAAC;EACvE;AACF;AAEA,eAAelC,SAAS"}