@deephaven/components 0.94.0 → 0.95.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AutoCompleteInput.d.ts +1 -1
- package/dist/AutoCompleteInput.d.ts.map +1 -1
- package/dist/AutoCompleteInput.js.map +1 -1
- package/dist/Button.d.ts +1 -1
- package/dist/Button.d.ts.map +1 -1
- package/dist/Button.js.map +1 -1
- package/dist/CardFlip.d.ts.map +1 -1
- package/dist/CardFlip.js.map +1 -1
- package/dist/ComponentUtils.d.ts +2 -1
- package/dist/ComponentUtils.d.ts.map +1 -1
- package/dist/ComponentUtils.js.map +1 -1
- package/dist/CopyButton.d.ts +1 -1
- package/dist/CopyButton.d.ts.map +1 -1
- package/dist/CopyButton.js.map +1 -1
- package/dist/CustomTimeSelect.d.ts +3 -3
- package/dist/CustomTimeSelect.d.ts.map +1 -1
- package/dist/CustomTimeSelect.js.map +1 -1
- package/dist/DateInput.js.map +1 -1
- package/dist/DateInputUtils.d.ts +1 -1
- package/dist/DateInputUtils.d.ts.map +1 -1
- package/dist/DateInputUtils.js.map +1 -1
- package/dist/DateTimeInput.d.ts +1 -1
- package/dist/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput.js.map +1 -1
- package/dist/DraggableItemList.d.ts +3 -3
- package/dist/DraggableItemList.d.ts.map +1 -1
- package/dist/DraggableItemList.js.map +1 -1
- package/dist/EditableItemList.js.map +1 -1
- package/dist/ErrorBoundary.d.ts +1 -1
- package/dist/ErrorBoundary.d.ts.map +1 -1
- package/dist/ErrorBoundary.js.map +1 -1
- package/dist/HierarchicalCheckboxMenu.d.ts +1 -1
- package/dist/HierarchicalCheckboxMenu.d.ts.map +1 -1
- package/dist/HierarchicalCheckboxMenu.js.map +1 -1
- package/dist/ItemList.d.ts +3 -3
- package/dist/ItemList.d.ts.map +1 -1
- package/dist/ItemList.js.map +1 -1
- package/dist/MaskedInput.d.ts +1 -1
- package/dist/MaskedInput.d.ts.map +1 -1
- package/dist/MaskedInput.js.map +1 -1
- package/dist/Option.d.ts +1 -1
- package/dist/Option.d.ts.map +1 -1
- package/dist/Option.js.map +1 -1
- package/dist/SearchableCombobox.d.ts +2 -2
- package/dist/SearchableCombobox.d.ts.map +1 -1
- package/dist/SearchableCombobox.js.map +1 -1
- package/dist/TextWithTooltip.d.ts +1 -1
- package/dist/TextWithTooltip.d.ts.map +1 -1
- package/dist/TextWithTooltip.js.map +1 -1
- package/dist/TimeInput.d.ts +1 -1
- package/dist/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput.js.map +1 -1
- package/dist/TimeSlider.d.ts.map +1 -1
- package/dist/TimeSlider.js.map +1 -1
- package/dist/XComponent.d.ts +1 -1
- package/dist/XComponent.d.ts.map +1 -1
- package/dist/XComponent.js.map +1 -1
- package/dist/actions/ConfirmActionButton.d.ts +1 -1
- package/dist/actions/ConfirmActionButton.d.ts.map +1 -1
- package/dist/actions/ConfirmActionButton.js.map +1 -1
- package/dist/actions/IconActionButton.d.ts +1 -1
- package/dist/actions/IconActionButton.d.ts.map +1 -1
- package/dist/actions/IconActionButton.js.map +1 -1
- package/dist/context-actions/ContextActionUtils.d.ts +3 -3
- package/dist/context-actions/ContextActionUtils.d.ts.map +1 -1
- package/dist/context-actions/ContextActionUtils.js.map +1 -1
- package/dist/context-actions/ContextActions.d.ts +1 -1
- package/dist/context-actions/ContextActions.d.ts.map +1 -1
- package/dist/context-actions/ContextActions.js.map +1 -1
- package/dist/context-actions/ContextMenu.d.ts +2 -2
- package/dist/context-actions/ContextMenu.d.ts.map +1 -1
- package/dist/context-actions/ContextMenu.js.map +1 -1
- package/dist/context-actions/ContextMenuItem.js.map +1 -1
- package/dist/context-actions/ContextMenuRoot.d.ts +1 -1
- package/dist/context-actions/ContextMenuRoot.d.ts.map +1 -1
- package/dist/context-actions/ContextMenuRoot.js.map +1 -1
- package/dist/dialogs/ActionButtonDialogTrigger.d.ts +1 -1
- package/dist/dialogs/ActionButtonDialogTrigger.d.ts.map +1 -1
- package/dist/dialogs/ActionButtonDialogTrigger.js.map +1 -1
- package/dist/dialogs/ConfirmationDialog.d.ts +1 -1
- package/dist/dialogs/ConfirmationDialog.d.ts.map +1 -1
- package/dist/dialogs/ConfirmationDialog.js.map +1 -1
- package/dist/menu-actions/DropdownMenu.d.ts +3 -3
- package/dist/menu-actions/DropdownMenu.d.ts.map +1 -1
- package/dist/menu-actions/DropdownMenu.js.map +1 -1
- package/dist/menu-actions/Menu.d.ts +1 -1
- package/dist/menu-actions/Menu.d.ts.map +1 -1
- package/dist/menu-actions/Menu.js.map +1 -1
- package/dist/modal/InfoModal.d.ts +1 -1
- package/dist/modal/InfoModal.d.ts.map +1 -1
- package/dist/modal/InfoModal.js.map +1 -1
- package/dist/modal/Modal.d.ts +1 -1
- package/dist/modal/Modal.d.ts.map +1 -1
- package/dist/modal/Modal.js.map +1 -1
- package/dist/modal/ModalBody.d.ts +1 -1
- package/dist/modal/ModalBody.d.ts.map +1 -1
- package/dist/modal/ModalBody.js.map +1 -1
- package/dist/modal/ModalFooter.d.ts +1 -1
- package/dist/modal/ModalFooter.d.ts.map +1 -1
- package/dist/modal/ModalFooter.js.map +1 -1
- package/dist/modal/ModalHeader.d.ts +1 -1
- package/dist/modal/ModalHeader.d.ts.map +1 -1
- package/dist/modal/ModalHeader.js.map +1 -1
- package/dist/navigation/Menu.d.ts +1 -1
- package/dist/navigation/Menu.d.ts.map +1 -1
- package/dist/navigation/Menu.js.map +1 -1
- package/dist/navigation/MenuItem.d.ts +1 -1
- package/dist/navigation/MenuItem.d.ts.map +1 -1
- package/dist/navigation/MenuItem.js.map +1 -1
- package/dist/navigation/NavTab.d.ts +1 -1
- package/dist/navigation/NavTab.d.ts.map +1 -1
- package/dist/navigation/NavTab.js.map +1 -1
- package/dist/navigation/NavTabList.d.ts +2 -2
- package/dist/navigation/NavTabList.d.ts.map +1 -1
- package/dist/navigation/NavTabList.js.map +1 -1
- package/dist/popper/Popper.d.ts +1 -1
- package/dist/popper/Popper.d.ts.map +1 -1
- package/dist/popper/Popper.js.map +1 -1
- package/dist/popper/Tooltip.d.ts +1 -1
- package/dist/popper/Tooltip.d.ts.map +1 -1
- package/dist/popper/Tooltip.js.map +1 -1
- package/dist/shortcuts/Shortcut.d.ts +2 -2
- package/dist/shortcuts/Shortcut.d.ts.map +1 -1
- package/dist/shortcuts/Shortcut.js.map +1 -1
- package/dist/shortcuts/ShortcutRegistry.d.ts +2 -2
- package/dist/shortcuts/ShortcutRegistry.d.ts.map +1 -1
- package/dist/shortcuts/ShortcutRegistry.js.map +1 -1
- package/dist/spectrum/ActionGroup.d.ts +3 -3
- package/dist/spectrum/ActionGroup.d.ts.map +1 -1
- package/dist/spectrum/ActionGroup.js.map +1 -1
- package/dist/spectrum/ActionMenu.d.ts +3 -3
- package/dist/spectrum/ActionMenu.d.ts.map +1 -1
- package/dist/spectrum/ActionMenu.js.map +1 -1
- package/dist/spectrum/ItemContent.d.ts +2 -2
- package/dist/spectrum/ItemContent.d.ts.map +1 -1
- package/dist/spectrum/ItemContent.js.map +1 -1
- package/dist/spectrum/ItemTooltip.d.ts +2 -2
- package/dist/spectrum/ItemTooltip.d.ts.map +1 -1
- package/dist/spectrum/ItemTooltip.js.map +1 -1
- package/dist/spectrum/ListActionGroup.d.ts +2 -2
- package/dist/spectrum/ListActionGroup.d.ts.map +1 -1
- package/dist/spectrum/ListActionGroup.js.map +1 -1
- package/dist/spectrum/ListActionMenu.d.ts +2 -2
- package/dist/spectrum/ListActionMenu.d.ts.map +1 -1
- package/dist/spectrum/ListActionMenu.js.map +1 -1
- package/dist/spectrum/View.js.map +1 -1
- package/dist/spectrum/comboBox/ComboBox.d.ts +2 -2
- package/dist/spectrum/comboBox/ComboBox.d.ts.map +1 -1
- package/dist/spectrum/comboBox/ComboBox.js.map +1 -1
- package/dist/spectrum/comboBox/ComboBoxNormalized.d.ts +2 -2
- package/dist/spectrum/comboBox/ComboBoxNormalized.d.ts.map +1 -1
- package/dist/spectrum/comboBox/ComboBoxNormalized.js.map +1 -1
- package/dist/spectrum/dateAndTime.d.ts +1 -1
- package/dist/spectrum/dateAndTime.d.ts.map +1 -1
- package/dist/spectrum/dateAndTime.js.map +1 -1
- package/dist/spectrum/listView/ListView.d.ts +3 -3
- package/dist/spectrum/listView/ListView.d.ts.map +1 -1
- package/dist/spectrum/listView/ListView.js.map +1 -1
- package/dist/spectrum/listView/ListViewNormalized.d.ts +1 -1
- package/dist/spectrum/listView/ListViewNormalized.d.ts.map +1 -1
- package/dist/spectrum/listView/ListViewNormalized.js.map +1 -1
- package/dist/spectrum/listView/ListViewWrapper.d.ts +1 -1
- package/dist/spectrum/listView/ListViewWrapper.d.ts.map +1 -1
- package/dist/spectrum/listView/ListViewWrapper.js.map +1 -1
- package/dist/spectrum/picker/Picker.d.ts +1 -1
- package/dist/spectrum/picker/Picker.d.ts.map +1 -1
- package/dist/spectrum/picker/Picker.js.map +1 -1
- package/dist/spectrum/picker/usePickerNormalizedProps.d.ts +3 -3
- package/dist/spectrum/picker/usePickerNormalizedProps.d.ts.map +1 -1
- package/dist/spectrum/picker/usePickerNormalizedProps.js.map +1 -1
- package/dist/spectrum/picker/usePickerProps.d.ts +2 -2
- package/dist/spectrum/picker/usePickerProps.d.ts.map +1 -1
- package/dist/spectrum/picker/usePickerProps.js.map +1 -1
- package/dist/spectrum/utils/itemUtils.d.ts +4 -4
- package/dist/spectrum/utils/itemUtils.d.ts.map +1 -1
- package/dist/spectrum/utils/itemUtils.js.map +1 -1
- package/dist/spectrum/utils/itemWrapperUtils.d.ts +2 -2
- package/dist/spectrum/utils/itemWrapperUtils.d.ts.map +1 -1
- package/dist/spectrum/utils/itemWrapperUtils.js.map +1 -1
- package/dist/spectrum/utils/useOnChangeTrackUncontrolled.d.ts +1 -1
- package/dist/spectrum/utils/useOnChangeTrackUncontrolled.d.ts.map +1 -1
- package/dist/spectrum/utils/useOnChangeTrackUncontrolled.js.map +1 -1
- package/dist/spectrum/utils/useRenderNormalizedItem.d.ts +4 -4
- package/dist/spectrum/utils/useRenderNormalizedItem.d.ts.map +1 -1
- package/dist/spectrum/utils/useRenderNormalizedItem.js.map +1 -1
- package/dist/spectrum/utils/useStaticItemInitialScrollPosition.d.ts +1 -1
- package/dist/spectrum/utils/useStaticItemInitialScrollPosition.d.ts.map +1 -1
- package/dist/spectrum/utils/useStaticItemInitialScrollPosition.js.map +1 -1
- package/dist/spectrum/utils/useStringifiedMultiSelection.d.ts +2 -2
- package/dist/spectrum/utils/useStringifiedMultiSelection.d.ts.map +1 -1
- package/dist/spectrum/utils/useStringifiedMultiSelection.js.map +1 -1
- package/dist/spectrum/utils/useStringifiedSelection.d.ts +2 -2
- package/dist/spectrum/utils/useStringifiedSelection.d.ts.map +1 -1
- package/dist/spectrum/utils/useStringifiedSelection.js.map +1 -1
- package/dist/theme/SpectrumThemeProvider.d.ts +1 -1
- package/dist/theme/SpectrumThemeProvider.d.ts.map +1 -1
- package/dist/theme/SpectrumThemeProvider.js.map +1 -1
- package/dist/theme/ThemePicker.js.map +1 -1
- package/dist/theme/ThemeProvider.d.ts +2 -2
- package/dist/theme/ThemeProvider.d.ts.map +1 -1
- package/dist/theme/ThemeProvider.js.map +1 -1
- package/dist/theme/ThemeUtils.d.ts +1 -1
- package/dist/theme/ThemeUtils.d.ts.map +1 -1
- package/dist/theme/ThemeUtils.js.map +1 -1
- package/dist/theme/colorUtils.d.ts +1 -1
- package/dist/theme/colorUtils.d.ts.map +1 -1
- package/dist/theme/colorUtils.js.map +1 -1
- package/dist/theme/useTheme.d.ts +1 -1
- package/dist/theme/useTheme.d.ts.map +1 -1
- package/dist/theme/useTheme.js.map +1 -1
- package/package.json +8 -8
package/dist/ItemList.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ItemList.js","names":["React","PureComponent","memoize","FixedSizeList","List","AutoSizer","Log","RangeUtils","ItemListItem","ContextActionUtils","jsx","_jsx","log","module","MIN_DRAG_DELTA","ItemList","renderItem","_ref","_ref2","_item$displayValue","item","className","children","displayValue","value","concat","constructor","props","_defineProperty","index","selectedRanges","isSelected","max","CACHE_SIZE","itemIndex","key","isFocused","style","disableSelect","content","onContextMenu","handleItemContextMenu","onDoubleClick","handleItemDoubleClick","onMouseDown","handleItemMouseDown","onFocus","handleItemFocus","onBlur","handleItemBlur","onMouseMove","handleItemMouseMove","onMouseUp","handleItemMouseUp","onKeyDown","component","forwardRef","ref","_objectSpread","tabIndex","role","displayName","items","bind","handleItemsRendered","handleWindowMouseUp","handleKeyDown","handleMouseLeave","handleScroll","handleResize","renderInnerElement","list","createRef","listContainer","isStickyBottom","state","focusIndex","mouseDownIndex","overscanStartIndex","height","isDragging","isStuckToBottom","scrollOffset","mouseX","mouseY","componentDidUpdate","prevProps","prevState","propSelectedRanges","itemCount","isListAtBottom","scrollToBottom","sendViewportUpdate","setSelectedRanges","onSelectionChange","onFocusChange","componentWillUnmount","window","removeEventListener","focus","_this$listContainer$c","current","restoreScrollPosition","_this$listContainer$c2","scrollTo","getElement","focusSelector","elements","querySelectorAll","elementIndex","focusItem","setState","element","HTMLElement","scrollToItem","scrollIntoView","block","e","isModifierDown","isModifierKeyDown","toggleSelect","shiftKey","isDoubleClickSelect","onSelect","_ref3","selectRange","target","indexOf","tagName","toLowerCase","button","length","selectItem","clientX","clientY","addEventListener","debug2","currentTarget","relatedTarget","contains","isDragSelect","isMultiSelect","mouseMoveX","Math","abs","mouseMoveY","getItemSelected","deselectAll","min","isDeselectOnClick","isShiftDown","resetMouseState","_ref4","_ref5","oldFocus","newFocus","stopPropagation","preventDefault","lastRange","_this$listContainer$c3","_ref6","scrollUpdateWasRequested","isDeselectable","arguments","undefined","deselectItem","deselectRange","range","validateRange","_ref7","_ref8","onViewportChange","rowHeight","topRow","floor","bottomRow","ceil","_ref9","offset","getCachedItem","render","overscanCount","dataTestId","onResize","_ref10","width","initialScrollOffset","itemSize","itemData","getItemData","onScroll","onItemsRendered","outerElementType","getOuterElement","outerRef","innerElementType","getInnerElement","DEFAULT_ROW_HEIGHT","DEFAULT_OVERSCAN"],"sources":["../src/ItemList.tsx"],"sourcesContent":["/* eslint-disable react/no-unstable-nested-components */\nimport React, { PureComponent } from 'react';\nimport memoize from 'memoizee';\nimport {\n FixedSizeList as List,\n ListOnItemsRenderedProps,\n ListOnScrollProps,\n} from 'react-window';\nimport AutoSizer, { Size } from 'react-virtualized-auto-sizer';\nimport Log from '@deephaven/log';\nimport { RangeUtils, Range } from '@deephaven/utils';\nimport ItemListItem from './ItemListItem';\nimport { ContextActionUtils } from './context-actions';\nimport './ItemList.scss';\n\nconst log = Log.module('ItemList');\nconst MIN_DRAG_DELTA = 5;\n\nexport interface DefaultListItem {\n value?: string;\n displayValue?: string;\n}\n\nexport type RenderItemProps<T> = {\n item: T;\n itemIndex: number;\n isFocused: boolean;\n isSelected: boolean;\n style: React.CSSProperties;\n};\n\nexport type RenderItemFn<T> = (props: RenderItemProps<T>) => React.ReactNode;\n\nexport type ItemDragEventHandler = (\n index: number,\n event: React.DragEvent<HTMLDivElement>\n) => void;\n\nexport type ItemListProps<T> = {\n // Total item count\n itemCount: number;\n rowHeight: number;\n // Offset of the top item in the items array\n offset: number;\n // Item object format expected by the default renderItem function\n // Can be anything as long as it's supported by the renderItem\n // Default renderItem will look for a `displayValue` property, fallback\n // to the `value` property, or stringify the object if neither are defined\n items: readonly T[];\n // Whether clicking a selected item should deselect in the item list or not. Defaults to true\n isDeselectOnClick: boolean;\n // Whether selection requires a double click or not\n isDoubleClickSelect: boolean;\n // Whether to allow dragging to change the selection after clicking\n isDragSelect: boolean;\n // Whether to allow multiple selections in this item list\n isMultiSelect: boolean;\n // Set to true if you want the list to scroll when new items are added and it's already at the bottom\n isStickyBottom: boolean;\n // Fired when an item gets focused\n onFocusChange: (index: number | null) => void;\n\n // Fired when an item is clicked. With multiple selection, fired on double click.\n onSelect: (index: number, event: React.SyntheticEvent) => void;\n onSelectionChange: (ranges: readonly Range[]) => void;\n onViewportChange: (topRow: number, bottomRow: number) => void;\n overscanCount: number;\n selectedRanges: readonly Range[];\n disableSelect: boolean;\n renderItem: RenderItemFn<T>;\n focusSelector: string;\n 'data-testid'?: string;\n};\n\ntype ItemListState = {\n focusIndex: number | null;\n mouseDownIndex: number | null;\n selectedRanges: readonly Range[];\n overscanStartIndex: number;\n height: number | null;\n isDragging: boolean;\n isStuckToBottom: boolean;\n scrollOffset: number | null;\n mouseX: number | null;\n mouseY: number | null;\n};\n\n/**\n * Show items in a long scrollable list.\n * Can be navigated via keyboard or mouse.\n */\nexport class ItemList<T> extends PureComponent<\n ItemListProps<T>,\n ItemListState\n> {\n static CACHE_SIZE = 1000;\n\n static DEFAULT_ROW_HEIGHT = 20;\n\n // By drawing an additional 10 items on each side, tab/keyboard navigation works better (as the next element exists)\n static DEFAULT_OVERSCAN = 10;\n\n static defaultProps = {\n offset: 0,\n items: [],\n rowHeight: ItemList.DEFAULT_ROW_HEIGHT,\n\n isDeselectOnClick: true,\n\n isDoubleClickSelect: false,\n\n isDragSelect: true,\n\n isMultiSelect: false,\n\n isStickyBottom: false,\n\n disableSelect: false,\n\n onFocusChange(): void {\n // no-op\n },\n onSelect(): void {\n // no-op\n },\n onSelectionChange(): void {\n // no-op\n },\n onViewportChange(): void {\n // no-op\n },\n\n overscanCount: ItemList.DEFAULT_OVERSCAN,\n\n renderItem: ItemList.renderItem,\n selectedRanges: [],\n\n focusSelector: '.item-list-item',\n\n 'data-testid': undefined,\n };\n\n static renderItem<P extends DefaultListItem>({\n item,\n }: RenderItemProps<P>): JSX.Element {\n return (\n <div className=\"item-list-item-content\">\n {item != null && (item.displayValue ?? item.value ?? `${item}`)}\n </div>\n );\n }\n\n constructor(props: ItemListProps<T>) {\n super(props);\n\n this.handleItemBlur = this.handleItemBlur.bind(this);\n this.handleItemContextMenu = this.handleItemContextMenu.bind(this);\n this.handleItemFocus = this.handleItemFocus.bind(this);\n this.handleItemDoubleClick = this.handleItemDoubleClick.bind(this);\n this.handleItemMouseDown = this.handleItemMouseDown.bind(this);\n this.handleItemMouseMove = this.handleItemMouseMove.bind(this);\n this.handleItemMouseUp = this.handleItemMouseUp.bind(this);\n this.handleItemsRendered = this.handleItemsRendered.bind(this);\n this.handleWindowMouseUp = this.handleWindowMouseUp.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.handleScroll = this.handleScroll.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.renderInnerElement = this.renderInnerElement.bind(this);\n\n this.list = React.createRef();\n this.listContainer = React.createRef();\n\n const { isStickyBottom, selectedRanges } = props;\n\n this.state = {\n focusIndex: null,\n mouseDownIndex: null,\n selectedRanges,\n overscanStartIndex: 0,\n height: null,\n isDragging: false,\n isStuckToBottom: isStickyBottom,\n scrollOffset: null,\n mouseX: null,\n mouseY: null,\n };\n }\n\n componentDidUpdate(\n prevProps: ItemListProps<T>,\n prevState: ItemListState\n ): void {\n const { selectedRanges: propSelectedRanges, itemCount } = this.props;\n const {\n focusIndex,\n isStuckToBottom,\n scrollOffset,\n height,\n selectedRanges,\n } = this.state;\n if (isStuckToBottom && !this.isListAtBottom() && itemCount > 0) {\n this.scrollToBottom();\n }\n\n if (\n scrollOffset !== prevState.scrollOffset ||\n height !== prevState.height\n ) {\n this.sendViewportUpdate();\n }\n\n if (\n propSelectedRanges !== prevProps.selectedRanges &&\n propSelectedRanges !== selectedRanges\n ) {\n this.setSelectedRanges(propSelectedRanges);\n } else if (selectedRanges !== prevState.selectedRanges) {\n const { onSelectionChange } = this.props;\n onSelectionChange(selectedRanges);\n }\n\n if (focusIndex !== prevState.focusIndex) {\n const { onFocusChange } = this.props;\n onFocusChange(focusIndex);\n }\n }\n\n componentWillUnmount(): void {\n window.removeEventListener('mouseup', this.handleWindowMouseUp);\n }\n\n list: React.RefObject<List>;\n\n listContainer: React.RefObject<HTMLDivElement>;\n\n getItemSelected = memoize(\n (index: number, selectedRanges: readonly Range[]) =>\n RangeUtils.isSelected(selectedRanges, index),\n { max: ItemList.CACHE_SIZE }\n );\n\n getCachedItem = memoize(\n (\n itemIndex: number,\n key: number,\n item: T,\n isFocused: boolean,\n isSelected: boolean,\n renderItem: RenderItemFn<T>,\n style: React.CSSProperties,\n disableSelect: boolean\n ) => {\n const content = renderItem({\n item,\n itemIndex,\n isFocused,\n isSelected,\n style,\n });\n\n return (\n <ItemListItem\n onContextMenu={this.handleItemContextMenu}\n onDoubleClick={this.handleItemDoubleClick}\n onMouseDown={this.handleItemMouseDown}\n onFocus={this.handleItemFocus}\n onBlur={this.handleItemBlur}\n disableSelect={disableSelect}\n onMouseMove={this.handleItemMouseMove}\n onMouseUp={this.handleItemMouseUp}\n isFocused={isFocused}\n isSelected={isSelected}\n itemIndex={itemIndex}\n style={style}\n key={key}\n >\n {content}\n </ItemListItem>\n );\n },\n { max: ItemList.CACHE_SIZE }\n );\n\n getOuterElement = memoize((onKeyDown: React.KeyboardEventHandler) => {\n const component = React.forwardRef<HTMLDivElement>((props, ref) => (\n // We need to add the tabIndex to make sure it is focusable, otherwise we can't get key events\n <div\n ref={ref}\n tabIndex={-1}\n onKeyDown={onKeyDown}\n role=\"presentation\"\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...props}\n />\n ));\n component.displayName = 'ItemListOuterElement';\n return component;\n });\n\n getInnerElement = memoize(() => {\n const component = React.forwardRef<HTMLDivElement>((props, ref) => (\n <div\n className=\"item-list-inner-element\"\n ref={ref}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...props}\n />\n ));\n component.displayName = 'ItemListInnerElement';\n return component;\n });\n\n getItemData = memoize(\n (\n items: readonly T[],\n selectedRanges: readonly Range[],\n renderItem: RenderItemFn<T>\n ) => ({\n items,\n selectedRanges,\n renderItem,\n })\n );\n\n focus(): void {\n this.listContainer.current?.focus();\n }\n\n restoreScrollPosition(): void {\n const { scrollOffset } = this.state;\n if (scrollOffset != null) {\n // manually restore the scroll containers offset\n // virtual list doesn't restore scrolloffset in a re-render if it's the same\n this.listContainer.current?.scrollTo(0, scrollOffset);\n }\n }\n\n getElement(itemIndex: number): Element | null {\n if (this.listContainer.current == null) {\n return null;\n }\n\n const { focusSelector } = this.props;\n const { overscanStartIndex } = this.state;\n const elements = this.listContainer.current.querySelectorAll(focusSelector);\n const elementIndex = itemIndex - overscanStartIndex;\n return elements[elementIndex];\n }\n\n focusItem(itemIndex: number): void {\n const { disableSelect } = this.props;\n if (disableSelect) return;\n\n this.setState({ focusIndex: itemIndex });\n\n const element = this.getElement(itemIndex);\n if (element instanceof HTMLElement) {\n element.focus();\n }\n }\n\n scrollToItem(itemIndex: number): void {\n const element = this.getElement(itemIndex);\n if (element != null) {\n element.scrollIntoView({ block: 'center' });\n }\n }\n\n handleItemContextMenu(\n itemIndex: number,\n e: React.MouseEvent<HTMLDivElement>\n ): void {\n this.setState({ focusIndex: itemIndex });\n\n // Update the selection, but don't consume the mouse event - it will trigger the context menu\n const { selectedRanges } = this.state;\n const isSelected = RangeUtils.isSelected(selectedRanges, itemIndex);\n\n // When right-clicking, we want to maintain the current selection if the right click happened within the selection even if the modifier key isn't down\n const isModifierDown =\n isSelected || ContextActionUtils.isModifierKeyDown(e);\n this.toggleSelect(itemIndex, e.shiftKey, isModifierDown, false);\n }\n\n handleItemDoubleClick(itemIndex: number, e: React.MouseEvent): void {\n const { isDoubleClickSelect, onSelect } = this.props;\n\n if (isDoubleClickSelect) {\n this.setState(\n ({ selectedRanges }) => ({\n selectedRanges: RangeUtils.selectRange(selectedRanges, [\n itemIndex,\n itemIndex,\n ]),\n }),\n () => {\n onSelect(itemIndex, e);\n }\n );\n }\n }\n\n handleItemMouseDown(index: number, e: React.MouseEvent): void {\n const { selectedRanges } = this.state;\n\n if (\n e.target instanceof HTMLElement &&\n ['button', 'select', 'input', 'textarea'].indexOf(\n e.target.tagName.toLowerCase()\n ) !== -1\n ) {\n // allow these elements to do their own behaviours\n return;\n }\n\n if (e.button === 2 && selectedRanges.length === 0) {\n // allow right click to act as a selection if selection is empty\n this.focusItem(index);\n this.selectItem(index);\n return;\n }\n\n if (e.button != null && e.button !== 0) {\n return;\n }\n\n this.setState({\n mouseDownIndex: index,\n mouseX: e.clientX,\n mouseY: e.clientY,\n });\n\n window.addEventListener('mouseup', this.handleWindowMouseUp);\n\n // Leave selection until mouse up, to allow for dragging behaviour\n }\n\n handleItemBlur(itemIndex: number, e: React.FocusEvent): void {\n log.debug2('item blur', itemIndex, e.currentTarget, e.relatedTarget);\n if (\n !e.relatedTarget ||\n (this.listContainer.current &&\n e.relatedTarget instanceof HTMLElement &&\n !this.listContainer.current.contains(e.relatedTarget))\n ) {\n // Next focused element is outside of the ItemList\n this.setState({ focusIndex: null });\n }\n }\n\n handleItemFocus(itemIndex: number, e: React.FocusEvent): void {\n log.debug2('item focus', itemIndex, e.target);\n this.setState(state => {\n const { focusIndex } = state;\n if (focusIndex !== itemIndex) {\n return { focusIndex: itemIndex };\n }\n return null;\n });\n }\n\n handleItemMouseMove(itemIndex: number, e: React.MouseEvent): void {\n const { isDragSelect, isMultiSelect, disableSelect } = this.props;\n const { mouseDownIndex, selectedRanges, mouseX, mouseY } = this.state;\n\n if (mouseDownIndex == null || disableSelect) return;\n\n const mouseMoveX = Math.abs(e.clientX - (mouseX ?? 0));\n const mouseMoveY = Math.abs(e.clientY - (mouseY ?? 0));\n if (mouseMoveX > MIN_DRAG_DELTA && mouseMoveY > MIN_DRAG_DELTA) {\n this.setState({ isDragging: true });\n }\n if (isDragSelect || mouseDownIndex === itemIndex) {\n this.focusItem(itemIndex);\n\n if (isMultiSelect) {\n if (\n !isDragSelect &&\n !this.getItemSelected(itemIndex, selectedRanges) &&\n !ContextActionUtils.isModifierKeyDown(e)\n ) {\n // If there's already a selection and they select outside of that range while dragging without a modifier key, start a new selection with just the new item\n this.deselectAll();\n }\n this.selectRange([\n Math.min(mouseDownIndex, itemIndex),\n Math.max(mouseDownIndex, itemIndex),\n ]);\n } else {\n this.toggleSelect(\n itemIndex,\n e.shiftKey,\n ContextActionUtils.isModifierKeyDown(e),\n false\n );\n }\n }\n }\n\n handleItemMouseUp(index: number, e: React.MouseEvent): void {\n const { isDeselectOnClick, isDoubleClickSelect, onSelect } = this.props;\n const { mouseDownIndex, isDragging } = this.state;\n\n if (\n e.target instanceof HTMLElement &&\n ['button', 'select', 'input', 'textarea'].indexOf(\n e.target.tagName.toLowerCase()\n ) !== -1\n ) {\n return;\n }\n\n if (mouseDownIndex === index && !isDragging) {\n const isShiftDown = e.shiftKey;\n const isModifierDown = ContextActionUtils.isModifierKeyDown(e);\n this.focusItem(index);\n this.toggleSelect(index, isShiftDown, isModifierDown, isDeselectOnClick);\n\n if (!isDoubleClickSelect && !isShiftDown && !isModifierDown) {\n onSelect(index, e);\n }\n }\n\n this.resetMouseState();\n }\n\n handleItemsRendered({ overscanStartIndex }: ListOnItemsRenderedProps): void {\n this.setState({ overscanStartIndex });\n }\n\n handleResize({ height }: Size): void {\n this.setState({ height });\n }\n\n handleMouseLeave(): void {\n this.setState({ mouseDownIndex: null });\n }\n\n handleWindowMouseUp(): void {\n this.resetMouseState();\n window.removeEventListener('mouseup', this.handleWindowMouseUp);\n }\n\n handleKeyDown(e: React.KeyboardEvent): void {\n const { isMultiSelect, itemCount, onSelect } = this.props;\n const { focusIndex: oldFocus } = this.state;\n let newFocus = oldFocus;\n\n if (e.key === 'Enter' || e.key === ' ') {\n if (!isMultiSelect && newFocus != null) {\n this.setState({ selectedRanges: [[newFocus, newFocus]] }, () => {\n if (newFocus != null) {\n onSelect(newFocus, e);\n }\n });\n }\n return;\n }\n\n if (e.key === 'ArrowUp') {\n if (newFocus != null && newFocus >= 0) {\n newFocus = Math.max(0, newFocus - 1);\n } else {\n newFocus = itemCount - 1;\n }\n } else if (e.key === 'ArrowDown') {\n if (newFocus != null && newFocus >= 0) {\n newFocus = Math.min(newFocus + 1, itemCount - 1);\n } else {\n newFocus = 0;\n }\n } else {\n return;\n }\n\n if (oldFocus !== newFocus) {\n e.stopPropagation();\n e.preventDefault();\n\n this.focusItem(newFocus);\n\n const { selectedRanges } = this.state;\n if (e.shiftKey && selectedRanges.length > 0) {\n const lastRange = selectedRanges[selectedRanges.length - 1];\n this.selectRange([\n Math.min(newFocus, lastRange[0]),\n Math.max(newFocus, lastRange[1]),\n ]);\n } else {\n this.deselectAll();\n if (newFocus !== null) {\n this.selectItem(newFocus);\n } else {\n this.listContainer.current?.focus();\n }\n }\n\n this.scrollIntoView(newFocus);\n }\n }\n\n handleScroll({\n scrollUpdateWasRequested,\n scrollOffset,\n }: ListOnScrollProps): void {\n this.setState(state => {\n if (scrollUpdateWasRequested) {\n // The scroll was caused by scrollTo() or scrollToItem()\n // Don't re-calc isStuckToBottom\n return { scrollOffset } as ItemListState;\n }\n\n const { isStickyBottom } = this.props;\n const { height } = state;\n\n const isStuckToBottom =\n isStickyBottom && this.isListAtBottom({ scrollOffset, height });\n return { isStuckToBottom, scrollOffset } as ItemListState;\n });\n }\n\n resetMouseState(): void {\n this.setState({ mouseDownIndex: null, isDragging: false });\n }\n\n scrollToBottom(): void {\n const { itemCount } = this.props;\n if (this.list.current) {\n this.list.current.scrollToItem(itemCount);\n }\n }\n\n scrollIntoView(itemIndex: number): void {\n if (this.list.current) {\n this.list.current.scrollToItem(itemIndex);\n }\n }\n\n /**\n * @param index The index to toggle selection for\n * @param isShiftDown True if the shift modifier key is down\n * @param isModifierDown True if the meta modifier key is down\n * @param isDeselectable True if item should be deselected if already selected\n */\n toggleSelect(\n index: number,\n isShiftDown: boolean,\n isModifierDown: boolean,\n isDeselectable = true\n ): void {\n const { isMultiSelect } = this.props;\n const { selectedRanges } = this.state;\n\n if (isMultiSelect && isShiftDown && selectedRanges.length > 0) {\n const lastRange = selectedRanges[selectedRanges.length - 1];\n this.selectRange([\n Math.min(lastRange[0], index),\n Math.max(index, lastRange[1]),\n ]);\n } else if (\n isMultiSelect &&\n selectedRanges.length === 1 &&\n selectedRanges[0][0] === index &&\n selectedRanges[0][1] === index\n ) {\n if (isDeselectable) {\n this.deselectItem(index);\n }\n } else if (isMultiSelect && isModifierDown) {\n if (this.getItemSelected(index, selectedRanges)) {\n if (isDeselectable) {\n this.deselectItem(index);\n }\n } else {\n this.selectItem(index);\n }\n } else {\n this.deselectAll();\n this.selectItem(index);\n }\n }\n\n deselectAll(): void {\n const { itemCount } = this.props;\n this.deselectRange([0, itemCount]);\n }\n\n deselectItem(index: number): void {\n this.deselectRange([index, index]);\n }\n\n deselectRange(range: Range): void {\n RangeUtils.validateRange(range);\n\n this.setState(({ selectedRanges }) => ({\n selectedRanges: RangeUtils.deselectRange(selectedRanges, range),\n }));\n }\n\n selectItem(index: number): void {\n const { disableSelect } = this.props;\n if (disableSelect) return;\n\n this.selectRange([index, index]);\n }\n\n selectRange(range: Range): void {\n RangeUtils.validateRange(range);\n\n this.setState(({ selectedRanges }) => ({\n selectedRanges: RangeUtils.selectRange(selectedRanges, range),\n }));\n }\n\n setSelectedRanges(selectedRanges: readonly Range[]): void {\n this.setState({ selectedRanges });\n }\n\n sendViewportUpdate(): void {\n const { scrollOffset, height } = this.state;\n if (scrollOffset != null && height != null) {\n const { onViewportChange, rowHeight } = this.props;\n const topRow = Math.floor(scrollOffset / rowHeight);\n const bottomRow = topRow + Math.ceil(height / rowHeight);\n onViewportChange(topRow, bottomRow);\n }\n }\n\n isListAtBottom(\n {\n scrollOffset,\n height,\n }: Pick<ItemListState, 'scrollOffset' | 'height'> = this.state\n ): boolean {\n if (height == null || scrollOffset == null) {\n return false;\n }\n\n const { itemCount, rowHeight } = this.props;\n return scrollOffset + height >= itemCount * rowHeight;\n }\n\n renderInnerElement({\n index: itemIndex,\n style,\n }: {\n index: number;\n style: React.CSSProperties;\n }): React.ReactElement | null {\n const { items, offset, renderItem, disableSelect } = this.props;\n const { focusIndex, selectedRanges } = this.state;\n if (itemIndex < offset || itemIndex >= offset + items.length) {\n return null;\n }\n\n const item = items[itemIndex - offset];\n return this.getCachedItem(\n itemIndex,\n itemIndex,\n item,\n itemIndex === focusIndex && !disableSelect,\n this.getItemSelected(itemIndex, selectedRanges),\n renderItem,\n style,\n disableSelect\n );\n }\n\n render(): JSX.Element {\n const {\n items,\n itemCount,\n overscanCount,\n renderItem,\n rowHeight,\n 'data-testid': dataTestId,\n } = this.props;\n const { selectedRanges, isStuckToBottom } = this.state;\n return (\n <AutoSizer className=\"item-list-auto-sizer\" onResize={this.handleResize}>\n {({ width, height }) => (\n <List\n className=\"item-list-scroll-pane\"\n height={height}\n width={width}\n initialScrollOffset={isStuckToBottom ? itemCount * rowHeight : 0}\n itemCount={itemCount}\n itemSize={rowHeight}\n // This prop isn't actually used by us, it is passed to the render function by react-window\n // Used here to force a re-render of the List component.\n // Otherwise it doesn't know to call the render again when selection or renderItem changes\n itemData={this.getItemData(items, selectedRanges, renderItem)}\n onScroll={this.handleScroll}\n onItemsRendered={this.handleItemsRendered}\n ref={this.list}\n outerElementType={this.getOuterElement(this.handleKeyDown)}\n outerRef={this.listContainer}\n innerElementType={this.getInnerElement()}\n overscanCount={overscanCount}\n data-testid={dataTestId}\n >\n {this.renderInnerElement}\n </List>\n )}\n </AutoSizer>\n );\n }\n}\n\nexport default ItemList;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ItemList.js","names":["React","PureComponent","memoize","FixedSizeList","List","AutoSizer","Log","RangeUtils","ItemListItem","ContextActionUtils","jsx","_jsx","log","module","MIN_DRAG_DELTA","ItemList","renderItem","_ref","_ref2","_item$displayValue","item","className","children","displayValue","value","concat","constructor","props","_defineProperty","index","selectedRanges","isSelected","max","CACHE_SIZE","itemIndex","key","isFocused","style","disableSelect","content","onContextMenu","handleItemContextMenu","onDoubleClick","handleItemDoubleClick","onMouseDown","handleItemMouseDown","onFocus","handleItemFocus","onBlur","handleItemBlur","onMouseMove","handleItemMouseMove","onMouseUp","handleItemMouseUp","onKeyDown","component","forwardRef","ref","_objectSpread","tabIndex","role","displayName","items","bind","handleItemsRendered","handleWindowMouseUp","handleKeyDown","handleMouseLeave","handleScroll","handleResize","renderInnerElement","list","createRef","listContainer","isStickyBottom","state","focusIndex","mouseDownIndex","overscanStartIndex","height","isDragging","isStuckToBottom","scrollOffset","mouseX","mouseY","componentDidUpdate","prevProps","prevState","propSelectedRanges","itemCount","isListAtBottom","scrollToBottom","sendViewportUpdate","setSelectedRanges","onSelectionChange","onFocusChange","componentWillUnmount","window","removeEventListener","focus","_this$listContainer$c","current","restoreScrollPosition","_this$listContainer$c2","scrollTo","getElement","focusSelector","elements","querySelectorAll","elementIndex","focusItem","setState","element","HTMLElement","scrollToItem","scrollIntoView","block","e","isModifierDown","isModifierKeyDown","toggleSelect","shiftKey","isDoubleClickSelect","onSelect","_ref3","selectRange","target","indexOf","tagName","toLowerCase","button","length","selectItem","clientX","clientY","addEventListener","debug2","currentTarget","relatedTarget","contains","isDragSelect","isMultiSelect","mouseMoveX","Math","abs","mouseMoveY","getItemSelected","deselectAll","min","isDeselectOnClick","isShiftDown","resetMouseState","_ref4","_ref5","oldFocus","newFocus","stopPropagation","preventDefault","lastRange","_this$listContainer$c3","_ref6","scrollUpdateWasRequested","isDeselectable","arguments","undefined","deselectItem","deselectRange","range","validateRange","_ref7","_ref8","onViewportChange","rowHeight","topRow","floor","bottomRow","ceil","_ref9","offset","getCachedItem","render","overscanCount","dataTestId","onResize","_ref10","width","initialScrollOffset","itemSize","itemData","getItemData","onScroll","onItemsRendered","outerElementType","getOuterElement","outerRef","innerElementType","getInnerElement","DEFAULT_ROW_HEIGHT","DEFAULT_OVERSCAN"],"sources":["../src/ItemList.tsx"],"sourcesContent":["/* eslint-disable react/no-unstable-nested-components */\nimport React, { PureComponent } from 'react';\nimport memoize from 'memoizee';\nimport {\n FixedSizeList as List,\n type ListOnItemsRenderedProps,\n type ListOnScrollProps,\n} from 'react-window';\nimport AutoSizer, { type Size } from 'react-virtualized-auto-sizer';\nimport Log from '@deephaven/log';\nimport { RangeUtils, type Range } from '@deephaven/utils';\nimport ItemListItem from './ItemListItem';\nimport { ContextActionUtils } from './context-actions';\nimport './ItemList.scss';\n\nconst log = Log.module('ItemList');\nconst MIN_DRAG_DELTA = 5;\n\nexport interface DefaultListItem {\n value?: string;\n displayValue?: string;\n}\n\nexport type RenderItemProps<T> = {\n item: T;\n itemIndex: number;\n isFocused: boolean;\n isSelected: boolean;\n style: React.CSSProperties;\n};\n\nexport type RenderItemFn<T> = (props: RenderItemProps<T>) => React.ReactNode;\n\nexport type ItemDragEventHandler = (\n index: number,\n event: React.DragEvent<HTMLDivElement>\n) => void;\n\nexport type ItemListProps<T> = {\n // Total item count\n itemCount: number;\n rowHeight: number;\n // Offset of the top item in the items array\n offset: number;\n // Item object format expected by the default renderItem function\n // Can be anything as long as it's supported by the renderItem\n // Default renderItem will look for a `displayValue` property, fallback\n // to the `value` property, or stringify the object if neither are defined\n items: readonly T[];\n // Whether clicking a selected item should deselect in the item list or not. Defaults to true\n isDeselectOnClick: boolean;\n // Whether selection requires a double click or not\n isDoubleClickSelect: boolean;\n // Whether to allow dragging to change the selection after clicking\n isDragSelect: boolean;\n // Whether to allow multiple selections in this item list\n isMultiSelect: boolean;\n // Set to true if you want the list to scroll when new items are added and it's already at the bottom\n isStickyBottom: boolean;\n // Fired when an item gets focused\n onFocusChange: (index: number | null) => void;\n\n // Fired when an item is clicked. With multiple selection, fired on double click.\n onSelect: (index: number, event: React.SyntheticEvent) => void;\n onSelectionChange: (ranges: readonly Range[]) => void;\n onViewportChange: (topRow: number, bottomRow: number) => void;\n overscanCount: number;\n selectedRanges: readonly Range[];\n disableSelect: boolean;\n renderItem: RenderItemFn<T>;\n focusSelector: string;\n 'data-testid'?: string;\n};\n\ntype ItemListState = {\n focusIndex: number | null;\n mouseDownIndex: number | null;\n selectedRanges: readonly Range[];\n overscanStartIndex: number;\n height: number | null;\n isDragging: boolean;\n isStuckToBottom: boolean;\n scrollOffset: number | null;\n mouseX: number | null;\n mouseY: number | null;\n};\n\n/**\n * Show items in a long scrollable list.\n * Can be navigated via keyboard or mouse.\n */\nexport class ItemList<T> extends PureComponent<\n ItemListProps<T>,\n ItemListState\n> {\n static CACHE_SIZE = 1000;\n\n static DEFAULT_ROW_HEIGHT = 20;\n\n // By drawing an additional 10 items on each side, tab/keyboard navigation works better (as the next element exists)\n static DEFAULT_OVERSCAN = 10;\n\n static defaultProps = {\n offset: 0,\n items: [],\n rowHeight: ItemList.DEFAULT_ROW_HEIGHT,\n\n isDeselectOnClick: true,\n\n isDoubleClickSelect: false,\n\n isDragSelect: true,\n\n isMultiSelect: false,\n\n isStickyBottom: false,\n\n disableSelect: false,\n\n onFocusChange(): void {\n // no-op\n },\n onSelect(): void {\n // no-op\n },\n onSelectionChange(): void {\n // no-op\n },\n onViewportChange(): void {\n // no-op\n },\n\n overscanCount: ItemList.DEFAULT_OVERSCAN,\n\n renderItem: ItemList.renderItem,\n selectedRanges: [],\n\n focusSelector: '.item-list-item',\n\n 'data-testid': undefined,\n };\n\n static renderItem<P extends DefaultListItem>({\n item,\n }: RenderItemProps<P>): JSX.Element {\n return (\n <div className=\"item-list-item-content\">\n {item != null && (item.displayValue ?? item.value ?? `${item}`)}\n </div>\n );\n }\n\n constructor(props: ItemListProps<T>) {\n super(props);\n\n this.handleItemBlur = this.handleItemBlur.bind(this);\n this.handleItemContextMenu = this.handleItemContextMenu.bind(this);\n this.handleItemFocus = this.handleItemFocus.bind(this);\n this.handleItemDoubleClick = this.handleItemDoubleClick.bind(this);\n this.handleItemMouseDown = this.handleItemMouseDown.bind(this);\n this.handleItemMouseMove = this.handleItemMouseMove.bind(this);\n this.handleItemMouseUp = this.handleItemMouseUp.bind(this);\n this.handleItemsRendered = this.handleItemsRendered.bind(this);\n this.handleWindowMouseUp = this.handleWindowMouseUp.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.handleScroll = this.handleScroll.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.renderInnerElement = this.renderInnerElement.bind(this);\n\n this.list = React.createRef();\n this.listContainer = React.createRef();\n\n const { isStickyBottom, selectedRanges } = props;\n\n this.state = {\n focusIndex: null,\n mouseDownIndex: null,\n selectedRanges,\n overscanStartIndex: 0,\n height: null,\n isDragging: false,\n isStuckToBottom: isStickyBottom,\n scrollOffset: null,\n mouseX: null,\n mouseY: null,\n };\n }\n\n componentDidUpdate(\n prevProps: ItemListProps<T>,\n prevState: ItemListState\n ): void {\n const { selectedRanges: propSelectedRanges, itemCount } = this.props;\n const {\n focusIndex,\n isStuckToBottom,\n scrollOffset,\n height,\n selectedRanges,\n } = this.state;\n if (isStuckToBottom && !this.isListAtBottom() && itemCount > 0) {\n this.scrollToBottom();\n }\n\n if (\n scrollOffset !== prevState.scrollOffset ||\n height !== prevState.height\n ) {\n this.sendViewportUpdate();\n }\n\n if (\n propSelectedRanges !== prevProps.selectedRanges &&\n propSelectedRanges !== selectedRanges\n ) {\n this.setSelectedRanges(propSelectedRanges);\n } else if (selectedRanges !== prevState.selectedRanges) {\n const { onSelectionChange } = this.props;\n onSelectionChange(selectedRanges);\n }\n\n if (focusIndex !== prevState.focusIndex) {\n const { onFocusChange } = this.props;\n onFocusChange(focusIndex);\n }\n }\n\n componentWillUnmount(): void {\n window.removeEventListener('mouseup', this.handleWindowMouseUp);\n }\n\n list: React.RefObject<List>;\n\n listContainer: React.RefObject<HTMLDivElement>;\n\n getItemSelected = memoize(\n (index: number, selectedRanges: readonly Range[]) =>\n RangeUtils.isSelected(selectedRanges, index),\n { max: ItemList.CACHE_SIZE }\n );\n\n getCachedItem = memoize(\n (\n itemIndex: number,\n key: number,\n item: T,\n isFocused: boolean,\n isSelected: boolean,\n renderItem: RenderItemFn<T>,\n style: React.CSSProperties,\n disableSelect: boolean\n ) => {\n const content = renderItem({\n item,\n itemIndex,\n isFocused,\n isSelected,\n style,\n });\n\n return (\n <ItemListItem\n onContextMenu={this.handleItemContextMenu}\n onDoubleClick={this.handleItemDoubleClick}\n onMouseDown={this.handleItemMouseDown}\n onFocus={this.handleItemFocus}\n onBlur={this.handleItemBlur}\n disableSelect={disableSelect}\n onMouseMove={this.handleItemMouseMove}\n onMouseUp={this.handleItemMouseUp}\n isFocused={isFocused}\n isSelected={isSelected}\n itemIndex={itemIndex}\n style={style}\n key={key}\n >\n {content}\n </ItemListItem>\n );\n },\n { max: ItemList.CACHE_SIZE }\n );\n\n getOuterElement = memoize((onKeyDown: React.KeyboardEventHandler) => {\n const component = React.forwardRef<HTMLDivElement>((props, ref) => (\n // We need to add the tabIndex to make sure it is focusable, otherwise we can't get key events\n <div\n ref={ref}\n tabIndex={-1}\n onKeyDown={onKeyDown}\n role=\"presentation\"\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...props}\n />\n ));\n component.displayName = 'ItemListOuterElement';\n return component;\n });\n\n getInnerElement = memoize(() => {\n const component = React.forwardRef<HTMLDivElement>((props, ref) => (\n <div\n className=\"item-list-inner-element\"\n ref={ref}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...props}\n />\n ));\n component.displayName = 'ItemListInnerElement';\n return component;\n });\n\n getItemData = memoize(\n (\n items: readonly T[],\n selectedRanges: readonly Range[],\n renderItem: RenderItemFn<T>\n ) => ({\n items,\n selectedRanges,\n renderItem,\n })\n );\n\n focus(): void {\n this.listContainer.current?.focus();\n }\n\n restoreScrollPosition(): void {\n const { scrollOffset } = this.state;\n if (scrollOffset != null) {\n // manually restore the scroll containers offset\n // virtual list doesn't restore scrolloffset in a re-render if it's the same\n this.listContainer.current?.scrollTo(0, scrollOffset);\n }\n }\n\n getElement(itemIndex: number): Element | null {\n if (this.listContainer.current == null) {\n return null;\n }\n\n const { focusSelector } = this.props;\n const { overscanStartIndex } = this.state;\n const elements = this.listContainer.current.querySelectorAll(focusSelector);\n const elementIndex = itemIndex - overscanStartIndex;\n return elements[elementIndex];\n }\n\n focusItem(itemIndex: number): void {\n const { disableSelect } = this.props;\n if (disableSelect) return;\n\n this.setState({ focusIndex: itemIndex });\n\n const element = this.getElement(itemIndex);\n if (element instanceof HTMLElement) {\n element.focus();\n }\n }\n\n scrollToItem(itemIndex: number): void {\n const element = this.getElement(itemIndex);\n if (element != null) {\n element.scrollIntoView({ block: 'center' });\n }\n }\n\n handleItemContextMenu(\n itemIndex: number,\n e: React.MouseEvent<HTMLDivElement>\n ): void {\n this.setState({ focusIndex: itemIndex });\n\n // Update the selection, but don't consume the mouse event - it will trigger the context menu\n const { selectedRanges } = this.state;\n const isSelected = RangeUtils.isSelected(selectedRanges, itemIndex);\n\n // When right-clicking, we want to maintain the current selection if the right click happened within the selection even if the modifier key isn't down\n const isModifierDown =\n isSelected || ContextActionUtils.isModifierKeyDown(e);\n this.toggleSelect(itemIndex, e.shiftKey, isModifierDown, false);\n }\n\n handleItemDoubleClick(itemIndex: number, e: React.MouseEvent): void {\n const { isDoubleClickSelect, onSelect } = this.props;\n\n if (isDoubleClickSelect) {\n this.setState(\n ({ selectedRanges }) => ({\n selectedRanges: RangeUtils.selectRange(selectedRanges, [\n itemIndex,\n itemIndex,\n ]),\n }),\n () => {\n onSelect(itemIndex, e);\n }\n );\n }\n }\n\n handleItemMouseDown(index: number, e: React.MouseEvent): void {\n const { selectedRanges } = this.state;\n\n if (\n e.target instanceof HTMLElement &&\n ['button', 'select', 'input', 'textarea'].indexOf(\n e.target.tagName.toLowerCase()\n ) !== -1\n ) {\n // allow these elements to do their own behaviours\n return;\n }\n\n if (e.button === 2 && selectedRanges.length === 0) {\n // allow right click to act as a selection if selection is empty\n this.focusItem(index);\n this.selectItem(index);\n return;\n }\n\n if (e.button != null && e.button !== 0) {\n return;\n }\n\n this.setState({\n mouseDownIndex: index,\n mouseX: e.clientX,\n mouseY: e.clientY,\n });\n\n window.addEventListener('mouseup', this.handleWindowMouseUp);\n\n // Leave selection until mouse up, to allow for dragging behaviour\n }\n\n handleItemBlur(itemIndex: number, e: React.FocusEvent): void {\n log.debug2('item blur', itemIndex, e.currentTarget, e.relatedTarget);\n if (\n !e.relatedTarget ||\n (this.listContainer.current &&\n e.relatedTarget instanceof HTMLElement &&\n !this.listContainer.current.contains(e.relatedTarget))\n ) {\n // Next focused element is outside of the ItemList\n this.setState({ focusIndex: null });\n }\n }\n\n handleItemFocus(itemIndex: number, e: React.FocusEvent): void {\n log.debug2('item focus', itemIndex, e.target);\n this.setState(state => {\n const { focusIndex } = state;\n if (focusIndex !== itemIndex) {\n return { focusIndex: itemIndex };\n }\n return null;\n });\n }\n\n handleItemMouseMove(itemIndex: number, e: React.MouseEvent): void {\n const { isDragSelect, isMultiSelect, disableSelect } = this.props;\n const { mouseDownIndex, selectedRanges, mouseX, mouseY } = this.state;\n\n if (mouseDownIndex == null || disableSelect) return;\n\n const mouseMoveX = Math.abs(e.clientX - (mouseX ?? 0));\n const mouseMoveY = Math.abs(e.clientY - (mouseY ?? 0));\n if (mouseMoveX > MIN_DRAG_DELTA && mouseMoveY > MIN_DRAG_DELTA) {\n this.setState({ isDragging: true });\n }\n if (isDragSelect || mouseDownIndex === itemIndex) {\n this.focusItem(itemIndex);\n\n if (isMultiSelect) {\n if (\n !isDragSelect &&\n !this.getItemSelected(itemIndex, selectedRanges) &&\n !ContextActionUtils.isModifierKeyDown(e)\n ) {\n // If there's already a selection and they select outside of that range while dragging without a modifier key, start a new selection with just the new item\n this.deselectAll();\n }\n this.selectRange([\n Math.min(mouseDownIndex, itemIndex),\n Math.max(mouseDownIndex, itemIndex),\n ]);\n } else {\n this.toggleSelect(\n itemIndex,\n e.shiftKey,\n ContextActionUtils.isModifierKeyDown(e),\n false\n );\n }\n }\n }\n\n handleItemMouseUp(index: number, e: React.MouseEvent): void {\n const { isDeselectOnClick, isDoubleClickSelect, onSelect } = this.props;\n const { mouseDownIndex, isDragging } = this.state;\n\n if (\n e.target instanceof HTMLElement &&\n ['button', 'select', 'input', 'textarea'].indexOf(\n e.target.tagName.toLowerCase()\n ) !== -1\n ) {\n return;\n }\n\n if (mouseDownIndex === index && !isDragging) {\n const isShiftDown = e.shiftKey;\n const isModifierDown = ContextActionUtils.isModifierKeyDown(e);\n this.focusItem(index);\n this.toggleSelect(index, isShiftDown, isModifierDown, isDeselectOnClick);\n\n if (!isDoubleClickSelect && !isShiftDown && !isModifierDown) {\n onSelect(index, e);\n }\n }\n\n this.resetMouseState();\n }\n\n handleItemsRendered({ overscanStartIndex }: ListOnItemsRenderedProps): void {\n this.setState({ overscanStartIndex });\n }\n\n handleResize({ height }: Size): void {\n this.setState({ height });\n }\n\n handleMouseLeave(): void {\n this.setState({ mouseDownIndex: null });\n }\n\n handleWindowMouseUp(): void {\n this.resetMouseState();\n window.removeEventListener('mouseup', this.handleWindowMouseUp);\n }\n\n handleKeyDown(e: React.KeyboardEvent): void {\n const { isMultiSelect, itemCount, onSelect } = this.props;\n const { focusIndex: oldFocus } = this.state;\n let newFocus = oldFocus;\n\n if (e.key === 'Enter' || e.key === ' ') {\n if (!isMultiSelect && newFocus != null) {\n this.setState({ selectedRanges: [[newFocus, newFocus]] }, () => {\n if (newFocus != null) {\n onSelect(newFocus, e);\n }\n });\n }\n return;\n }\n\n if (e.key === 'ArrowUp') {\n if (newFocus != null && newFocus >= 0) {\n newFocus = Math.max(0, newFocus - 1);\n } else {\n newFocus = itemCount - 1;\n }\n } else if (e.key === 'ArrowDown') {\n if (newFocus != null && newFocus >= 0) {\n newFocus = Math.min(newFocus + 1, itemCount - 1);\n } else {\n newFocus = 0;\n }\n } else {\n return;\n }\n\n if (oldFocus !== newFocus) {\n e.stopPropagation();\n e.preventDefault();\n\n this.focusItem(newFocus);\n\n const { selectedRanges } = this.state;\n if (e.shiftKey && selectedRanges.length > 0) {\n const lastRange = selectedRanges[selectedRanges.length - 1];\n this.selectRange([\n Math.min(newFocus, lastRange[0]),\n Math.max(newFocus, lastRange[1]),\n ]);\n } else {\n this.deselectAll();\n if (newFocus !== null) {\n this.selectItem(newFocus);\n } else {\n this.listContainer.current?.focus();\n }\n }\n\n this.scrollIntoView(newFocus);\n }\n }\n\n handleScroll({\n scrollUpdateWasRequested,\n scrollOffset,\n }: ListOnScrollProps): void {\n this.setState(state => {\n if (scrollUpdateWasRequested) {\n // The scroll was caused by scrollTo() or scrollToItem()\n // Don't re-calc isStuckToBottom\n return { scrollOffset } as ItemListState;\n }\n\n const { isStickyBottom } = this.props;\n const { height } = state;\n\n const isStuckToBottom =\n isStickyBottom && this.isListAtBottom({ scrollOffset, height });\n return { isStuckToBottom, scrollOffset } as ItemListState;\n });\n }\n\n resetMouseState(): void {\n this.setState({ mouseDownIndex: null, isDragging: false });\n }\n\n scrollToBottom(): void {\n const { itemCount } = this.props;\n if (this.list.current) {\n this.list.current.scrollToItem(itemCount);\n }\n }\n\n scrollIntoView(itemIndex: number): void {\n if (this.list.current) {\n this.list.current.scrollToItem(itemIndex);\n }\n }\n\n /**\n * @param index The index to toggle selection for\n * @param isShiftDown True if the shift modifier key is down\n * @param isModifierDown True if the meta modifier key is down\n * @param isDeselectable True if item should be deselected if already selected\n */\n toggleSelect(\n index: number,\n isShiftDown: boolean,\n isModifierDown: boolean,\n isDeselectable = true\n ): void {\n const { isMultiSelect } = this.props;\n const { selectedRanges } = this.state;\n\n if (isMultiSelect && isShiftDown && selectedRanges.length > 0) {\n const lastRange = selectedRanges[selectedRanges.length - 1];\n this.selectRange([\n Math.min(lastRange[0], index),\n Math.max(index, lastRange[1]),\n ]);\n } else if (\n isMultiSelect &&\n selectedRanges.length === 1 &&\n selectedRanges[0][0] === index &&\n selectedRanges[0][1] === index\n ) {\n if (isDeselectable) {\n this.deselectItem(index);\n }\n } else if (isMultiSelect && isModifierDown) {\n if (this.getItemSelected(index, selectedRanges)) {\n if (isDeselectable) {\n this.deselectItem(index);\n }\n } else {\n this.selectItem(index);\n }\n } else {\n this.deselectAll();\n this.selectItem(index);\n }\n }\n\n deselectAll(): void {\n const { itemCount } = this.props;\n this.deselectRange([0, itemCount]);\n }\n\n deselectItem(index: number): void {\n this.deselectRange([index, index]);\n }\n\n deselectRange(range: Range): void {\n RangeUtils.validateRange(range);\n\n this.setState(({ selectedRanges }) => ({\n selectedRanges: RangeUtils.deselectRange(selectedRanges, range),\n }));\n }\n\n selectItem(index: number): void {\n const { disableSelect } = this.props;\n if (disableSelect) return;\n\n this.selectRange([index, index]);\n }\n\n selectRange(range: Range): void {\n RangeUtils.validateRange(range);\n\n this.setState(({ selectedRanges }) => ({\n selectedRanges: RangeUtils.selectRange(selectedRanges, range),\n }));\n }\n\n setSelectedRanges(selectedRanges: readonly Range[]): void {\n this.setState({ selectedRanges });\n }\n\n sendViewportUpdate(): void {\n const { scrollOffset, height } = this.state;\n if (scrollOffset != null && height != null) {\n const { onViewportChange, rowHeight } = this.props;\n const topRow = Math.floor(scrollOffset / rowHeight);\n const bottomRow = topRow + Math.ceil(height / rowHeight);\n onViewportChange(topRow, bottomRow);\n }\n }\n\n isListAtBottom(\n {\n scrollOffset,\n height,\n }: Pick<ItemListState, 'scrollOffset' | 'height'> = this.state\n ): boolean {\n if (height == null || scrollOffset == null) {\n return false;\n }\n\n const { itemCount, rowHeight } = this.props;\n return scrollOffset + height >= itemCount * rowHeight;\n }\n\n renderInnerElement({\n index: itemIndex,\n style,\n }: {\n index: number;\n style: React.CSSProperties;\n }): React.ReactElement | null {\n const { items, offset, renderItem, disableSelect } = this.props;\n const { focusIndex, selectedRanges } = this.state;\n if (itemIndex < offset || itemIndex >= offset + items.length) {\n return null;\n }\n\n const item = items[itemIndex - offset];\n return this.getCachedItem(\n itemIndex,\n itemIndex,\n item,\n itemIndex === focusIndex && !disableSelect,\n this.getItemSelected(itemIndex, selectedRanges),\n renderItem,\n style,\n disableSelect\n );\n }\n\n render(): JSX.Element {\n const {\n items,\n itemCount,\n overscanCount,\n renderItem,\n rowHeight,\n 'data-testid': dataTestId,\n } = this.props;\n const { selectedRanges, isStuckToBottom } = this.state;\n return (\n <AutoSizer className=\"item-list-auto-sizer\" onResize={this.handleResize}>\n {({ width, height }) => (\n <List\n className=\"item-list-scroll-pane\"\n height={height}\n width={width}\n initialScrollOffset={isStuckToBottom ? itemCount * rowHeight : 0}\n itemCount={itemCount}\n itemSize={rowHeight}\n // This prop isn't actually used by us, it is passed to the render function by react-window\n // Used here to force a re-render of the List component.\n // Otherwise it doesn't know to call the render again when selection or renderItem changes\n itemData={this.getItemData(items, selectedRanges, renderItem)}\n onScroll={this.handleScroll}\n onItemsRendered={this.handleItemsRendered}\n ref={this.list}\n outerElementType={this.getOuterElement(this.handleKeyDown)}\n outerRef={this.listContainer}\n innerElementType={this.getInnerElement()}\n overscanCount={overscanCount}\n data-testid={dataTestId}\n >\n {this.renderInnerElement}\n </List>\n )}\n </AutoSizer>\n );\n }\n}\n\nexport default ItemList;\n"],"mappings":"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"}
|
package/dist/MaskedInput.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MaskedInput.d.ts","sourceRoot":"","sources":["../src/MaskedInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"MaskedInput.d.ts","sourceRoot":"","sources":["../src/MaskedInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAIZ,KAAK,aAAa,EACnB,MAAM,OAAO,CAAC;AASf,OAAO,oBAAoB,CAAC;AAI5B,QAAA,MAAM,mBAAmB;;;;CAIf,CAAC;AAQX,MAAM,MAAM,gBAAgB,GAAG;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,OAAO,mBAAmB,CAAC,CAAC;CACrF,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACtB,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,wBAAwB;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,2IAA2I;IAC3I,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC3B,iDAAiD;IACjD,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,oCAAoC;IACpC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC/C,mCAAmC;IACnC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IAC5D,qDAAqD;IACrD,mBAAmB,CAAC,EAAE,CACpB,OAAO,EAAE,gBAAgB,EACzB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,KACV,MAAM,CAAC;IACZ,6BAA6B,CAAC,EAAE,CAC9B,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,MAAM,KACjB,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC;IAClC,MAAM,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC;IAEjC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF;;;GAGG;AAIH,QAAA,MAAM,WAAW,2FA2dhB,CAAC;AAuBF,eAAe,WAAW,CAAC"}
|
package/dist/MaskedInput.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MaskedInput.js","names":["React","useMemo","useEffect","useCallback","classNames","Log","useForwardedRef","DEFAULT_GET_PREFERRED_REPLACEMENT_STRING","fillToLength","trimTrailingMask","jsx","_jsx","log","module","SELECTION_DIRECTION","FORWARD","BACKWARD","NONE","FIXED_WIDTH_SPACE","MaskedInput","forwardRef","props","ref","className","example","getNextSegmentValue","range","delta","segmentValue","getPreferredReplacementString","onChange","onSelect","onSubmit","pattern","placeholder","selection","value","onFocus","onBlur","dataTestId","input","examples","Array","isArray","emptyMask","replace","setSelectedSegment","_input$current","debug","selectionStart","selectionEnd","selectionDirection","current","setSelectionRange","getSegment","cursorPosition","testValue","length","i","test","charAt","fillValue","checkValue","exampleValue","arguments","undefined","filledValue","concat","substring","isValid","patternRegex","RegExp","nextSegment","position","currentSegment","nextPosition","previousSegment","previousPosition","nextSegmentValue","segment","newSegmentValue","newValue","handleSelect","event","target","error","debug2","nativeEvent","type","_objectSpread","newSelection","handleSelectCapture","_input$current$select","preventDefault","stopPropagation","handleArrowKey","key","handleKeyDown","startsWith","trimmedValue","altKey","metaKey","ctrlKey","newChars","from","Set","toUpperCase","toLowerCase","newChar","maxReplaceIndex","replaceIndex","newSelectionStart","nextSegmentSelection","onKeyDown","onSelectCapture","defaultProps"],"sources":["../src/MaskedInput.tsx"],"sourcesContent":["import React, { useMemo, useEffect, useCallback, KeyboardEvent } from 'react';\nimport classNames from 'classnames';\nimport Log from '@deephaven/log';\nimport { useForwardedRef } from '@deephaven/react-hooks';\nimport {\n DEFAULT_GET_PREFERRED_REPLACEMENT_STRING,\n fillToLength,\n trimTrailingMask,\n} from './MaskedInputUtils';\nimport './MaskedInput.scss';\n\nconst log = Log.module('MaskedInput');\n\nconst SELECTION_DIRECTION = {\n FORWARD: 'forward',\n BACKWARD: 'backward',\n NONE: 'none',\n} as const;\n\n/**\n * Special space character that's the same size as tabular numbers\n * https://www.fileformat.info/info/unicode/char/2007/index.htm\n */\nconst FIXED_WIDTH_SPACE = '\\u2007';\n\nexport type SelectionSegment = {\n selectionStart: number;\n selectionEnd: number;\n selectionDirection?: (typeof SELECTION_DIRECTION)[keyof typeof SELECTION_DIRECTION];\n};\n\ntype MaskedInputProps = {\n /** An extra class name to add to the component */\n className?: string;\n /** The regex pattern this masked input must match */\n pattern: string;\n /** Input placeholder */\n placeholder?: string;\n /** The current value to display */\n value: string;\n /** One or more examples of valid values. Used when deciding if next keystroke is valid (as rest of the current value may be incomplete) */\n example: string | string[];\n /** The current selection to use for the input */\n selection?: SelectionSegment;\n /** Called when the value changes. Note the value may still be incomplete. */\n onChange?: (value: string) => void;\n /** Called when selection changes */\n onSelect?: (segment: SelectionSegment) => void;\n /** Called when enter is pressed */\n onSubmit?: (event: KeyboardEvent<HTMLInputElement>) => void;\n /** Retrieve the next value for a provided segment */\n getNextSegmentValue?: (\n segment: SelectionSegment,\n delta: number,\n segmentValue: string,\n value: string\n ) => string;\n getPreferredReplacementString?: (\n value: string,\n replaceIndex: number,\n replaceChar: string,\n selectionStart: number,\n selectionEnd: number\n ) => string;\n onFocus?: React.FocusEventHandler;\n onBlur?: React.FocusEventHandler;\n\n 'data-testid'?: string;\n};\n\n/**\n * A masked input for entering data from a template.\n * Won't work by itself, must use within another component and handle updating the value/selection.\n */\n// Forward ref causes a false positive for display-name in eslint:\n// https://github.com/yannickcr/eslint-plugin-react/issues/2269\n// eslint-disable-next-line react/display-name\nconst MaskedInput = React.forwardRef<HTMLInputElement, MaskedInputProps>(\n (props: MaskedInputProps, ref) => {\n const {\n className,\n example,\n getNextSegmentValue = (range, delta, segmentValue) => segmentValue,\n getPreferredReplacementString = DEFAULT_GET_PREFERRED_REPLACEMENT_STRING,\n onChange = () => false,\n onSelect = () => false,\n onSubmit,\n pattern,\n placeholder,\n selection,\n value,\n onFocus = () => false,\n onBlur = () => false,\n 'data-testid': dataTestId,\n } = props;\n const input = useForwardedRef(ref);\n const examples = useMemo(\n () => (Array.isArray(example) ? example : [example]),\n [example]\n );\n const emptyMask = useMemo(\n () => examples[0].replace(/[a-zA-Z0-9]/g, FIXED_WIDTH_SPACE),\n [examples]\n );\n\n useEffect(\n function setSelectedSegment() {\n if (selection != null) {\n log.debug('setting selection...', selection);\n const { selectionStart, selectionEnd, selectionDirection } =\n selection;\n input.current?.setSelectionRange(\n selectionStart,\n selectionEnd,\n selectionDirection\n );\n log.debug('selection set!');\n }\n },\n [selection, input]\n );\n\n /**\n * Returns the selection range for the segment at the given cursor position\n * @param cursorPosition The current position of the cursor\n */\n const getSegment = useCallback(\n (cursorPosition: number) => {\n let selectionStart = cursorPosition;\n let selectionEnd = cursorPosition;\n const testValue = examples.length > 0 ? examples[0] : value;\n\n for (let i = selectionStart - 1; i >= 0; i -= 1) {\n if (!/[a-zA-Z0-9]/g.test(testValue.charAt(i))) {\n break;\n }\n\n selectionStart = i;\n }\n\n for (let i = selectionEnd; i < testValue.length; i += 1) {\n if (!/[a-zA-Z0-9]/g.test(testValue.charAt(i))) {\n break;\n }\n\n selectionEnd = i + 1;\n }\n\n const selectionDirection =\n selectionStart === selectionEnd\n ? SELECTION_DIRECTION.NONE\n : SELECTION_DIRECTION.BACKWARD;\n\n return {\n selectionStart,\n selectionEnd,\n selectionDirection,\n };\n },\n [examples, value]\n );\n\n /**\n * Replaces all blank spaces and everything after the current cursor position with the example value\n * @param checkValue The value to check/fill in\n * @param exampleValue The example to fill in the value from\n * @param cursorPosition The cursor position\n * @returns The filled in value\n */\n function fillValue(\n checkValue: string,\n exampleValue: string,\n cursorPosition = checkValue.length\n ): string {\n let filledValue = '';\n for (let i = 0; i < cursorPosition; i += 1) {\n if (checkValue.charAt(i) !== FIXED_WIDTH_SPACE) {\n filledValue = filledValue.concat(checkValue[i]);\n } else {\n filledValue = filledValue.concat(exampleValue[i]);\n }\n }\n filledValue = filledValue.concat(exampleValue.substring(cursorPosition));\n\n return filledValue;\n }\n\n /**\n * Checks if a given `value` is valid up until the `cursorPosition`.\n * Uses the examples to build the rest of the string\n * @param checkValue The value to check validity of\n * @param cursorPosition The position of the cursor to check up to\n */\n function isValid(\n checkValue: string,\n cursorPosition = checkValue.length\n ): boolean {\n const patternRegex = new RegExp(`^${pattern}$`);\n if (patternRegex.test(checkValue)) {\n return true;\n }\n\n for (let i = 0; i < examples.length; i += 1) {\n const filledValue = fillValue(checkValue, examples[i], cursorPosition);\n if (patternRegex.test(filledValue)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Returns the next segment after the given position\n * @param position The cursor position to start at\n * @returns The new selection range\n */\n function nextSegment(position: number): SelectionSegment {\n const currentSegment = getSegment(position);\n const nextPosition = currentSegment.selectionEnd + 1;\n if (nextPosition >= value.length) {\n return currentSegment;\n }\n\n return getSegment(nextPosition);\n }\n\n /**\n * Returns the previous segment before the given position\n * @param position The cursor position to start at\n * @returns The new selection range\n */\n function previousSegment(position: number): SelectionSegment {\n const currentSegment = getSegment(position);\n const previousPosition = currentSegment.selectionStart - 1;\n if (previousPosition <= 0) {\n return currentSegment;\n }\n\n return getSegment(previousPosition);\n }\n\n function nextSegmentValue(position: number, delta: number): void {\n const segment = getSegment(position);\n const segmentValue = value.substring(\n segment.selectionStart,\n segment.selectionEnd\n );\n const newSegmentValue = getNextSegmentValue(\n segment,\n delta,\n segmentValue,\n value\n );\n const newValue =\n value.substring(0, segment.selectionStart) +\n newSegmentValue +\n value.substring(segment.selectionEnd);\n if (isValid(newValue, segment.selectionEnd)) {\n onChange(newValue);\n onSelect(segment);\n }\n }\n\n const handleSelect = useCallback(\n (event: React.UIEvent<HTMLInputElement>) => {\n const {\n selectionStart = 0,\n selectionEnd = 0,\n selectionDirection = 'none',\n } = event.target as HTMLInputElement;\n\n if (\n selectionStart === null ||\n selectionEnd === null ||\n selectionDirection === null\n ) {\n log.error(\n 'Selection attempted on non-text input element',\n event.target\n );\n return;\n }\n\n log.debug2(\n 'handleSelect',\n selectionStart,\n selectionEnd,\n selectionDirection\n );\n if (\n selection != null &&\n selectionStart === selection.selectionStart &&\n selectionEnd === selection.selectionEnd\n ) {\n return;\n }\n if (\n selection != null &&\n selectionStart === value.length &&\n selectionEnd === value.length &&\n event.nativeEvent.type !== 'mouseup'\n ) {\n // React triggers onSelect event with the cursor at the end of the input content\n // when the component is rendered at a different location in the DOM,\n // i.e. when start/end times switch places in the TimeSlider.\n // Ignore this event and reset the selection to its previous state.\n onSelect({ ...selection });\n return;\n }\n if (selectionStart === selectionEnd) {\n const newSelection = getSegment(selectionStart);\n log.debug(\n 'Selection segment from ',\n selectionStart,\n selectionEnd,\n '=>',\n newSelection\n );\n onSelect(newSelection);\n } else {\n onSelect({ selectionStart, selectionEnd, selectionDirection });\n }\n },\n [getSegment, onSelect, selection, value]\n );\n\n const handleSelectCapture = useCallback(\n (event: React.UIEvent<HTMLInputElement>) => {\n if (!input.current) {\n return;\n }\n log.debug('handleSelectCapture', event);\n const selectionStart = input.current.selectionStart ?? 0;\n if (\n selectionStart === value.length &&\n selection != null &&\n selectionStart !== selection.selectionStart\n ) {\n event.preventDefault();\n event.stopPropagation();\n }\n },\n [input, selection, value]\n );\n\n function handleArrowKey(\n event: React.KeyboardEvent<HTMLInputElement>\n ): void {\n event.preventDefault();\n event.stopPropagation();\n\n if (!input.current) {\n return;\n }\n\n const { key } = event;\n const { selectionStart = 0, selectionEnd = 0 } = input.current;\n if (selectionStart === null || selectionEnd === null) {\n log.error(\n 'Selection arrow nvaigation attempted on non-text input element',\n event.target\n );\n return;\n }\n\n if (key === 'ArrowLeft') {\n onSelect(previousSegment(selectionStart));\n } else if (key === 'ArrowRight') {\n onSelect(nextSegment(selectionEnd));\n } else if (key === 'ArrowUp') {\n nextSegmentValue(selectionStart, -1);\n } else if (key === 'ArrowDown') {\n nextSegmentValue(selectionStart, 1);\n }\n }\n\n function handleKeyDown(event: React.KeyboardEvent<HTMLInputElement>): void {\n if (!input.current) {\n return;\n }\n log.debug('handleKeyDown', event);\n const { key } = event;\n const { selectionStart = 0, selectionEnd = 0 } = input.current;\n if (selectionStart === null || selectionEnd === null) {\n log.error(\n 'Selection key event on non-text input element',\n event.target\n );\n return;\n }\n if (key === 'Enter') {\n onSubmit?.(event);\n return;\n }\n if (key.startsWith('Arrow')) {\n handleArrowKey(event);\n return;\n }\n\n if (key === 'Delete' || key === 'Backspace') {\n event.preventDefault();\n event.stopPropagation();\n\n // Deleting at the end of the value\n if (selectionEnd >= trimTrailingMask(value, emptyMask).length) {\n const newValue = value.substring(\n 0,\n // Delete whole selection or just the char before the cursor\n selectionStart === selectionEnd\n ? selectionStart - 1\n : selectionStart\n );\n const trimmedValue = trimTrailingMask(newValue, emptyMask);\n if (trimmedValue !== value) {\n onChange(trimmedValue);\n onSelect({\n selectionStart: trimmedValue.length,\n selectionEnd: trimmedValue.length,\n selectionDirection: SELECTION_DIRECTION.NONE,\n });\n }\n return;\n }\n\n if (selectionStart !== selectionEnd) {\n // Replace all non-masked characters with blanks, set selection to start\n const newValue =\n value.substring(0, selectionStart) +\n value\n .substring(selectionStart, selectionEnd)\n .replace(/[a-zA-Z0-9]/g, FIXED_WIDTH_SPACE) +\n value.substring(selectionEnd);\n log.debug(\n 'Range ',\n selectionStart,\n selectionEnd,\n 'deleted, setting value',\n newValue\n );\n\n onChange(newValue);\n onSelect({\n selectionStart,\n selectionEnd: selectionStart,\n selectionDirection: SELECTION_DIRECTION.NONE,\n });\n } else if (selectionStart > 0) {\n for (let i = selectionStart - 1; i >= 0; i -= 1) {\n // Only replace non placeholder text\n const newValue =\n value.substring(0, i) +\n value\n .substring(i, selectionStart)\n .replace(/[a-zA-Z0-9]/g, FIXED_WIDTH_SPACE) +\n value.substring(selectionStart);\n\n if (newValue !== value) {\n onChange(newValue);\n onSelect({\n selectionStart: i,\n selectionEnd: i,\n selectionDirection: SELECTION_DIRECTION.NONE,\n });\n return;\n }\n }\n }\n\n return;\n }\n\n if (event.altKey || event.metaKey || event.ctrlKey || key.length > 1) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n // Get the different permutations of the character they entered, remove duplicates\n const newChars = Array.from(\n new Set([key, key.toUpperCase(), key.toLowerCase()])\n );\n for (let i = 0; i < newChars.length; i += 1) {\n const newChar = newChars[i];\n\n // If they're typing an alphanumeric character, be smart and allow it to jump ahead\n const maxReplaceIndex = /[a-zA-Z0-9]/g.test(newChar)\n ? examples[0].length - 1\n : selectionStart;\n for (\n let replaceIndex = selectionStart;\n replaceIndex <= maxReplaceIndex;\n replaceIndex += 1\n ) {\n // Fill with the example chars if necessary\n const filledValue = fillToLength(\n value,\n examples[0],\n replaceIndex + 1\n );\n const newValue = getPreferredReplacementString(\n filledValue,\n replaceIndex,\n newChar,\n selectionStart,\n selectionEnd\n );\n if (isValid(newValue, replaceIndex + 1)) {\n const currentSegment = getSegment(replaceIndex);\n const newSelectionStart = replaceIndex + 1;\n let newSelection: SelectionSegment = {\n selectionStart: newSelectionStart,\n selectionEnd: newSelectionStart,\n selectionDirection: SELECTION_DIRECTION.NONE,\n };\n if (newSelectionStart >= currentSegment.selectionEnd) {\n const nextSegmentSelection = nextSegment(replaceIndex);\n if (\n nextSegmentSelection.selectionStart !==\n currentSegment.selectionStart\n ) {\n newSelection = nextSegmentSelection;\n }\n }\n log.debug('handleKeyDown', key, '=>', newValue, newSelection);\n onChange(newValue);\n onSelect(newSelection);\n return;\n }\n }\n }\n }\n\n // Need to use \"text\" type so we can apply a pattern and make selection properly\n return (\n <input\n ref={input}\n className={classNames('form-control masked-input', className)}\n type=\"text\"\n pattern={pattern}\n placeholder={placeholder}\n value={value}\n onChange={() => undefined}\n onKeyDown={handleKeyDown}\n onSelect={handleSelect}\n onSelectCapture={handleSelectCapture}\n onFocus={onFocus}\n onBlur={onBlur}\n data-testid={dataTestId}\n />\n );\n }\n);\n\nMaskedInput.defaultProps = {\n className: '',\n placeholder: undefined,\n onChange(): void {\n // no-op\n },\n onSelect(): void {\n // no-op\n },\n getNextSegmentValue: (range, delta, segmentValue) => segmentValue,\n getPreferredReplacementString: DEFAULT_GET_PREFERRED_REPLACEMENT_STRING,\n selection: undefined,\n onFocus(): void {\n // no-op\n },\n onBlur(): void {\n // no-op\n },\n 'data-testid': undefined,\n};\n\nexport default MaskedInput;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MaskedInput.js","names":["React","useMemo","useEffect","useCallback","classNames","Log","useForwardedRef","DEFAULT_GET_PREFERRED_REPLACEMENT_STRING","fillToLength","trimTrailingMask","jsx","_jsx","log","module","SELECTION_DIRECTION","FORWARD","BACKWARD","NONE","FIXED_WIDTH_SPACE","MaskedInput","forwardRef","props","ref","className","example","getNextSegmentValue","range","delta","segmentValue","getPreferredReplacementString","onChange","onSelect","onSubmit","pattern","placeholder","selection","value","onFocus","onBlur","dataTestId","input","examples","Array","isArray","emptyMask","replace","setSelectedSegment","_input$current","debug","selectionStart","selectionEnd","selectionDirection","current","setSelectionRange","getSegment","cursorPosition","testValue","length","i","test","charAt","fillValue","checkValue","exampleValue","arguments","undefined","filledValue","concat","substring","isValid","patternRegex","RegExp","nextSegment","position","currentSegment","nextPosition","previousSegment","previousPosition","nextSegmentValue","segment","newSegmentValue","newValue","handleSelect","event","target","error","debug2","nativeEvent","type","_objectSpread","newSelection","handleSelectCapture","_input$current$select","preventDefault","stopPropagation","handleArrowKey","key","handleKeyDown","startsWith","trimmedValue","altKey","metaKey","ctrlKey","newChars","from","Set","toUpperCase","toLowerCase","newChar","maxReplaceIndex","replaceIndex","newSelectionStart","nextSegmentSelection","onKeyDown","onSelectCapture","defaultProps"],"sources":["../src/MaskedInput.tsx"],"sourcesContent":["import React, {\n useMemo,\n useEffect,\n useCallback,\n type KeyboardEvent,\n} from 'react';\nimport classNames from 'classnames';\nimport Log from '@deephaven/log';\nimport { useForwardedRef } from '@deephaven/react-hooks';\nimport {\n DEFAULT_GET_PREFERRED_REPLACEMENT_STRING,\n fillToLength,\n trimTrailingMask,\n} from './MaskedInputUtils';\nimport './MaskedInput.scss';\n\nconst log = Log.module('MaskedInput');\n\nconst SELECTION_DIRECTION = {\n FORWARD: 'forward',\n BACKWARD: 'backward',\n NONE: 'none',\n} as const;\n\n/**\n * Special space character that's the same size as tabular numbers\n * https://www.fileformat.info/info/unicode/char/2007/index.htm\n */\nconst FIXED_WIDTH_SPACE = '\\u2007';\n\nexport type SelectionSegment = {\n selectionStart: number;\n selectionEnd: number;\n selectionDirection?: (typeof SELECTION_DIRECTION)[keyof typeof SELECTION_DIRECTION];\n};\n\ntype MaskedInputProps = {\n /** An extra class name to add to the component */\n className?: string;\n /** The regex pattern this masked input must match */\n pattern: string;\n /** Input placeholder */\n placeholder?: string;\n /** The current value to display */\n value: string;\n /** One or more examples of valid values. Used when deciding if next keystroke is valid (as rest of the current value may be incomplete) */\n example: string | string[];\n /** The current selection to use for the input */\n selection?: SelectionSegment;\n /** Called when the value changes. Note the value may still be incomplete. */\n onChange?: (value: string) => void;\n /** Called when selection changes */\n onSelect?: (segment: SelectionSegment) => void;\n /** Called when enter is pressed */\n onSubmit?: (event: KeyboardEvent<HTMLInputElement>) => void;\n /** Retrieve the next value for a provided segment */\n getNextSegmentValue?: (\n segment: SelectionSegment,\n delta: number,\n segmentValue: string,\n value: string\n ) => string;\n getPreferredReplacementString?: (\n value: string,\n replaceIndex: number,\n replaceChar: string,\n selectionStart: number,\n selectionEnd: number\n ) => string;\n onFocus?: React.FocusEventHandler;\n onBlur?: React.FocusEventHandler;\n\n 'data-testid'?: string;\n};\n\n/**\n * A masked input for entering data from a template.\n * Won't work by itself, must use within another component and handle updating the value/selection.\n */\n// Forward ref causes a false positive for display-name in eslint:\n// https://github.com/yannickcr/eslint-plugin-react/issues/2269\n// eslint-disable-next-line react/display-name\nconst MaskedInput = React.forwardRef<HTMLInputElement, MaskedInputProps>(\n (props: MaskedInputProps, ref) => {\n const {\n className,\n example,\n getNextSegmentValue = (range, delta, segmentValue) => segmentValue,\n getPreferredReplacementString = DEFAULT_GET_PREFERRED_REPLACEMENT_STRING,\n onChange = () => false,\n onSelect = () => false,\n onSubmit,\n pattern,\n placeholder,\n selection,\n value,\n onFocus = () => false,\n onBlur = () => false,\n 'data-testid': dataTestId,\n } = props;\n const input = useForwardedRef(ref);\n const examples = useMemo(\n () => (Array.isArray(example) ? example : [example]),\n [example]\n );\n const emptyMask = useMemo(\n () => examples[0].replace(/[a-zA-Z0-9]/g, FIXED_WIDTH_SPACE),\n [examples]\n );\n\n useEffect(\n function setSelectedSegment() {\n if (selection != null) {\n log.debug('setting selection...', selection);\n const { selectionStart, selectionEnd, selectionDirection } =\n selection;\n input.current?.setSelectionRange(\n selectionStart,\n selectionEnd,\n selectionDirection\n );\n log.debug('selection set!');\n }\n },\n [selection, input]\n );\n\n /**\n * Returns the selection range for the segment at the given cursor position\n * @param cursorPosition The current position of the cursor\n */\n const getSegment = useCallback(\n (cursorPosition: number) => {\n let selectionStart = cursorPosition;\n let selectionEnd = cursorPosition;\n const testValue = examples.length > 0 ? examples[0] : value;\n\n for (let i = selectionStart - 1; i >= 0; i -= 1) {\n if (!/[a-zA-Z0-9]/g.test(testValue.charAt(i))) {\n break;\n }\n\n selectionStart = i;\n }\n\n for (let i = selectionEnd; i < testValue.length; i += 1) {\n if (!/[a-zA-Z0-9]/g.test(testValue.charAt(i))) {\n break;\n }\n\n selectionEnd = i + 1;\n }\n\n const selectionDirection =\n selectionStart === selectionEnd\n ? SELECTION_DIRECTION.NONE\n : SELECTION_DIRECTION.BACKWARD;\n\n return {\n selectionStart,\n selectionEnd,\n selectionDirection,\n };\n },\n [examples, value]\n );\n\n /**\n * Replaces all blank spaces and everything after the current cursor position with the example value\n * @param checkValue The value to check/fill in\n * @param exampleValue The example to fill in the value from\n * @param cursorPosition The cursor position\n * @returns The filled in value\n */\n function fillValue(\n checkValue: string,\n exampleValue: string,\n cursorPosition = checkValue.length\n ): string {\n let filledValue = '';\n for (let i = 0; i < cursorPosition; i += 1) {\n if (checkValue.charAt(i) !== FIXED_WIDTH_SPACE) {\n filledValue = filledValue.concat(checkValue[i]);\n } else {\n filledValue = filledValue.concat(exampleValue[i]);\n }\n }\n filledValue = filledValue.concat(exampleValue.substring(cursorPosition));\n\n return filledValue;\n }\n\n /**\n * Checks if a given `value` is valid up until the `cursorPosition`.\n * Uses the examples to build the rest of the string\n * @param checkValue The value to check validity of\n * @param cursorPosition The position of the cursor to check up to\n */\n function isValid(\n checkValue: string,\n cursorPosition = checkValue.length\n ): boolean {\n const patternRegex = new RegExp(`^${pattern}$`);\n if (patternRegex.test(checkValue)) {\n return true;\n }\n\n for (let i = 0; i < examples.length; i += 1) {\n const filledValue = fillValue(checkValue, examples[i], cursorPosition);\n if (patternRegex.test(filledValue)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Returns the next segment after the given position\n * @param position The cursor position to start at\n * @returns The new selection range\n */\n function nextSegment(position: number): SelectionSegment {\n const currentSegment = getSegment(position);\n const nextPosition = currentSegment.selectionEnd + 1;\n if (nextPosition >= value.length) {\n return currentSegment;\n }\n\n return getSegment(nextPosition);\n }\n\n /**\n * Returns the previous segment before the given position\n * @param position The cursor position to start at\n * @returns The new selection range\n */\n function previousSegment(position: number): SelectionSegment {\n const currentSegment = getSegment(position);\n const previousPosition = currentSegment.selectionStart - 1;\n if (previousPosition <= 0) {\n return currentSegment;\n }\n\n return getSegment(previousPosition);\n }\n\n function nextSegmentValue(position: number, delta: number): void {\n const segment = getSegment(position);\n const segmentValue = value.substring(\n segment.selectionStart,\n segment.selectionEnd\n );\n const newSegmentValue = getNextSegmentValue(\n segment,\n delta,\n segmentValue,\n value\n );\n const newValue =\n value.substring(0, segment.selectionStart) +\n newSegmentValue +\n value.substring(segment.selectionEnd);\n if (isValid(newValue, segment.selectionEnd)) {\n onChange(newValue);\n onSelect(segment);\n }\n }\n\n const handleSelect = useCallback(\n (event: React.UIEvent<HTMLInputElement>) => {\n const {\n selectionStart = 0,\n selectionEnd = 0,\n selectionDirection = 'none',\n } = event.target as HTMLInputElement;\n\n if (\n selectionStart === null ||\n selectionEnd === null ||\n selectionDirection === null\n ) {\n log.error(\n 'Selection attempted on non-text input element',\n event.target\n );\n return;\n }\n\n log.debug2(\n 'handleSelect',\n selectionStart,\n selectionEnd,\n selectionDirection\n );\n if (\n selection != null &&\n selectionStart === selection.selectionStart &&\n selectionEnd === selection.selectionEnd\n ) {\n return;\n }\n if (\n selection != null &&\n selectionStart === value.length &&\n selectionEnd === value.length &&\n event.nativeEvent.type !== 'mouseup'\n ) {\n // React triggers onSelect event with the cursor at the end of the input content\n // when the component is rendered at a different location in the DOM,\n // i.e. when start/end times switch places in the TimeSlider.\n // Ignore this event and reset the selection to its previous state.\n onSelect({ ...selection });\n return;\n }\n if (selectionStart === selectionEnd) {\n const newSelection = getSegment(selectionStart);\n log.debug(\n 'Selection segment from ',\n selectionStart,\n selectionEnd,\n '=>',\n newSelection\n );\n onSelect(newSelection);\n } else {\n onSelect({ selectionStart, selectionEnd, selectionDirection });\n }\n },\n [getSegment, onSelect, selection, value]\n );\n\n const handleSelectCapture = useCallback(\n (event: React.UIEvent<HTMLInputElement>) => {\n if (!input.current) {\n return;\n }\n log.debug('handleSelectCapture', event);\n const selectionStart = input.current.selectionStart ?? 0;\n if (\n selectionStart === value.length &&\n selection != null &&\n selectionStart !== selection.selectionStart\n ) {\n event.preventDefault();\n event.stopPropagation();\n }\n },\n [input, selection, value]\n );\n\n function handleArrowKey(\n event: React.KeyboardEvent<HTMLInputElement>\n ): void {\n event.preventDefault();\n event.stopPropagation();\n\n if (!input.current) {\n return;\n }\n\n const { key } = event;\n const { selectionStart = 0, selectionEnd = 0 } = input.current;\n if (selectionStart === null || selectionEnd === null) {\n log.error(\n 'Selection arrow nvaigation attempted on non-text input element',\n event.target\n );\n return;\n }\n\n if (key === 'ArrowLeft') {\n onSelect(previousSegment(selectionStart));\n } else if (key === 'ArrowRight') {\n onSelect(nextSegment(selectionEnd));\n } else if (key === 'ArrowUp') {\n nextSegmentValue(selectionStart, -1);\n } else if (key === 'ArrowDown') {\n nextSegmentValue(selectionStart, 1);\n }\n }\n\n function handleKeyDown(event: React.KeyboardEvent<HTMLInputElement>): void {\n if (!input.current) {\n return;\n }\n log.debug('handleKeyDown', event);\n const { key } = event;\n const { selectionStart = 0, selectionEnd = 0 } = input.current;\n if (selectionStart === null || selectionEnd === null) {\n log.error(\n 'Selection key event on non-text input element',\n event.target\n );\n return;\n }\n if (key === 'Enter') {\n onSubmit?.(event);\n return;\n }\n if (key.startsWith('Arrow')) {\n handleArrowKey(event);\n return;\n }\n\n if (key === 'Delete' || key === 'Backspace') {\n event.preventDefault();\n event.stopPropagation();\n\n // Deleting at the end of the value\n if (selectionEnd >= trimTrailingMask(value, emptyMask).length) {\n const newValue = value.substring(\n 0,\n // Delete whole selection or just the char before the cursor\n selectionStart === selectionEnd\n ? selectionStart - 1\n : selectionStart\n );\n const trimmedValue = trimTrailingMask(newValue, emptyMask);\n if (trimmedValue !== value) {\n onChange(trimmedValue);\n onSelect({\n selectionStart: trimmedValue.length,\n selectionEnd: trimmedValue.length,\n selectionDirection: SELECTION_DIRECTION.NONE,\n });\n }\n return;\n }\n\n if (selectionStart !== selectionEnd) {\n // Replace all non-masked characters with blanks, set selection to start\n const newValue =\n value.substring(0, selectionStart) +\n value\n .substring(selectionStart, selectionEnd)\n .replace(/[a-zA-Z0-9]/g, FIXED_WIDTH_SPACE) +\n value.substring(selectionEnd);\n log.debug(\n 'Range ',\n selectionStart,\n selectionEnd,\n 'deleted, setting value',\n newValue\n );\n\n onChange(newValue);\n onSelect({\n selectionStart,\n selectionEnd: selectionStart,\n selectionDirection: SELECTION_DIRECTION.NONE,\n });\n } else if (selectionStart > 0) {\n for (let i = selectionStart - 1; i >= 0; i -= 1) {\n // Only replace non placeholder text\n const newValue =\n value.substring(0, i) +\n value\n .substring(i, selectionStart)\n .replace(/[a-zA-Z0-9]/g, FIXED_WIDTH_SPACE) +\n value.substring(selectionStart);\n\n if (newValue !== value) {\n onChange(newValue);\n onSelect({\n selectionStart: i,\n selectionEnd: i,\n selectionDirection: SELECTION_DIRECTION.NONE,\n });\n return;\n }\n }\n }\n\n return;\n }\n\n if (event.altKey || event.metaKey || event.ctrlKey || key.length > 1) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n // Get the different permutations of the character they entered, remove duplicates\n const newChars = Array.from(\n new Set([key, key.toUpperCase(), key.toLowerCase()])\n );\n for (let i = 0; i < newChars.length; i += 1) {\n const newChar = newChars[i];\n\n // If they're typing an alphanumeric character, be smart and allow it to jump ahead\n const maxReplaceIndex = /[a-zA-Z0-9]/g.test(newChar)\n ? examples[0].length - 1\n : selectionStart;\n for (\n let replaceIndex = selectionStart;\n replaceIndex <= maxReplaceIndex;\n replaceIndex += 1\n ) {\n // Fill with the example chars if necessary\n const filledValue = fillToLength(\n value,\n examples[0],\n replaceIndex + 1\n );\n const newValue = getPreferredReplacementString(\n filledValue,\n replaceIndex,\n newChar,\n selectionStart,\n selectionEnd\n );\n if (isValid(newValue, replaceIndex + 1)) {\n const currentSegment = getSegment(replaceIndex);\n const newSelectionStart = replaceIndex + 1;\n let newSelection: SelectionSegment = {\n selectionStart: newSelectionStart,\n selectionEnd: newSelectionStart,\n selectionDirection: SELECTION_DIRECTION.NONE,\n };\n if (newSelectionStart >= currentSegment.selectionEnd) {\n const nextSegmentSelection = nextSegment(replaceIndex);\n if (\n nextSegmentSelection.selectionStart !==\n currentSegment.selectionStart\n ) {\n newSelection = nextSegmentSelection;\n }\n }\n log.debug('handleKeyDown', key, '=>', newValue, newSelection);\n onChange(newValue);\n onSelect(newSelection);\n return;\n }\n }\n }\n }\n\n // Need to use \"text\" type so we can apply a pattern and make selection properly\n return (\n <input\n ref={input}\n className={classNames('form-control masked-input', className)}\n type=\"text\"\n pattern={pattern}\n placeholder={placeholder}\n value={value}\n onChange={() => undefined}\n onKeyDown={handleKeyDown}\n onSelect={handleSelect}\n onSelectCapture={handleSelectCapture}\n onFocus={onFocus}\n onBlur={onBlur}\n data-testid={dataTestId}\n />\n );\n }\n);\n\nMaskedInput.defaultProps = {\n className: '',\n placeholder: undefined,\n onChange(): void {\n // no-op\n },\n onSelect(): void {\n // no-op\n },\n getNextSegmentValue: (range, delta, segmentValue) => segmentValue,\n getPreferredReplacementString: DEFAULT_GET_PREFERRED_REPLACEMENT_STRING,\n selection: undefined,\n onFocus(): void {\n // no-op\n },\n onBlur(): void {\n // no-op\n },\n 'data-testid': undefined,\n};\n\nexport default MaskedInput;\n"],"mappings":"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"}
|
package/dist/Option.d.ts
CHANGED
package/dist/Option.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Option.d.ts","sourceRoot":"","sources":["../src/Option.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Option.d.ts","sourceRoot":"","sources":["../src/Option.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,KAAK,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAEzD,MAAM,MAAM,WAAW,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,GAAG;IAClE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,iBAAS,MAAM,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,WAAW,GAAG,GAAG,CAAC,OAAO,CAGhE;AAED,eAAe,MAAM,CAAC"}
|
package/dist/Option.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Option.js","names":["React","jsx","_jsx","Option","_ref","children","props","_objectWithoutProperties","_excluded","_objectSpread"],"sources":["../src/Option.tsx"],"sourcesContent":["import React, { OptionHTMLAttributes } from 'react';\n\nexport type OptionProps = OptionHTMLAttributes<HTMLOptionElement> & {\n children: React.ReactNode;\n 'data-testid'?: string;\n};\n\nfunction Option({ children, ...props }: OptionProps): JSX.Element {\n // eslint-disable-next-line react/jsx-props-no-spreading\n return <option {...props}>{children}</option>;\n}\n\nexport default Option;\n"],"mappings":";;;;;;;;AAAA,OAAOA,KAAK,
|
|
1
|
+
{"version":3,"file":"Option.js","names":["React","jsx","_jsx","Option","_ref","children","props","_objectWithoutProperties","_excluded","_objectSpread"],"sources":["../src/Option.tsx"],"sourcesContent":["import React, { type OptionHTMLAttributes } from 'react';\n\nexport type OptionProps = OptionHTMLAttributes<HTMLOptionElement> & {\n children: React.ReactNode;\n 'data-testid'?: string;\n};\n\nfunction Option({ children, ...props }: OptionProps): JSX.Element {\n // eslint-disable-next-line react/jsx-props-no-spreading\n return <option {...props}>{children}</option>;\n}\n\nexport default Option;\n"],"mappings":";;;;;;;;AAAA,OAAOA,KAAK,MAAqC,OAAO;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAOzD,SAASC,MAAMA,CAAAC,IAAA,EAAmD;EAAA,IAAlD;MAAEC;IAAgC,CAAC,GAAAD,IAAA;IAApBE,KAAK,GAAAC,wBAAA,CAAAH,IAAA,EAAAI,SAAA;EAClC;EACA,oBAAON,IAAA,WAAAO,aAAA,CAAAA,aAAA,KAAYH,KAAK;IAAAD,QAAA,EAAGA;EAAQ,EAAS,CAAC;AAC/C;AAEA,eAAeF,MAAM"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Key } from 'react';
|
|
1
|
+
import { type Key } from 'react';
|
|
2
2
|
import type { DOMRefValue } from '@react-types/shared';
|
|
3
|
-
import { SpectrumComboBoxProps } from './spectrum';
|
|
3
|
+
import { type SpectrumComboBoxProps } from './spectrum';
|
|
4
4
|
export interface SearchableComboboxProps<TItem, TKey extends Key> extends Omit<SpectrumComboBoxProps<TItem>, 'children' | 'menuTrigger' | 'onSelectionChange'> {
|
|
5
5
|
getItemDisplayText: (item: TItem | null | undefined) => string | null;
|
|
6
6
|
getKey: (item: TItem | null | undefined) => TKey | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchableCombobox.d.ts","sourceRoot":"","sources":["../src/SearchableCombobox.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAe,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"SearchableCombobox.d.ts","sourceRoot":"","sources":["../src/SearchableCombobox.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,GAAG,EAAe,MAAM,OAAO,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAgB,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAA0B,KAAK,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAGhF,MAAM,WAAW,uBAAuB,CAAC,KAAK,EAAE,IAAI,SAAS,GAAG,CAC9D,SAAQ,IAAI,CACV,qBAAqB,CAAC,KAAK,CAAC,EAC5B,UAAU,GAAG,aAAa,GAAG,mBAAmB,CACjD;IACD,kBAAkB,EAAE,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI,GAAG,SAAS,KAAK,MAAM,GAAG,IAAI,CAAC;IACtE,MAAM,EAAE,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI,GAAG,SAAS,KAAK,IAAI,GAAG,IAAI,CAAC;IACxD,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACxC,iBAAiB,EAAE,CAAC,GAAG,EAAE,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC;CAC/C;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,IAAI,SAAS,GAAG,EAAE,EAC1D,SAAS,EACT,kBAAkB,EAClB,MAAM,EACN,GAAG,KAAK,EACT,EAAE,uBAAuB,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,OAAO,CA4BpD;AAED,eAAe,kBAAkB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchableCombobox.js","names":["useCallback","SpectrumComboBox","Item","TextWithTooltip","jsx","_jsx","SearchableCombobox","_ref","scrollRef","getItemDisplayText","getKey","props","_objectWithoutProperties","_excluded","renderItem","item","key","displayText","textValue","String","children","text","_objectSpread","ref","menuTrigger","onSelectionChange"],"sources":["../src/SearchableCombobox.tsx"],"sourcesContent":["/* eslint-disable react/jsx-props-no-spreading */\nimport { Key, useCallback } from 'react';\nimport type { DOMRefValue, FocusableRef } from '@react-types/shared';\nimport { SpectrumComboBox, Item, SpectrumComboBoxProps } from './spectrum';\nimport TextWithTooltip from './TextWithTooltip';\n\nexport interface SearchableComboboxProps<TItem, TKey extends Key>\n extends Omit<\n SpectrumComboBoxProps<TItem>,\n 'children' | 'menuTrigger' | 'onSelectionChange'\n > {\n getItemDisplayText: (item: TItem | null | undefined) => string | null;\n getKey: (item: TItem | null | undefined) => TKey | null;\n scrollRef: React.RefObject<DOMRefValue>;\n onSelectionChange: (key: TKey | null) => void;\n}\n\nexport function SearchableCombobox<TItem, TKey extends Key>({\n scrollRef,\n getItemDisplayText,\n getKey,\n ...props\n}: SearchableComboboxProps<TItem, TKey>): JSX.Element {\n const renderItem = useCallback(\n item => {\n const key = getKey(item);\n const displayText = getItemDisplayText(item);\n\n return (\n <Item key={key} textValue={displayText ?? String(key)}>\n <TextWithTooltip text={displayText} />\n </Item>\n );\n },\n [getItemDisplayText, getKey]\n );\n\n return (\n <SpectrumComboBox\n {...props}\n // The `ref`prop type defined by React Spectrum is incorrect here\n ref={scrollRef as unknown as FocusableRef<HTMLElement>}\n menuTrigger=\"focus\"\n // Type assertion is necessary since <ComboBox> types don't recognize the\n // generic key arg\n onSelectionChange={props.onSelectionChange as (key: Key | null) => void}\n >\n {renderItem}\n </SpectrumComboBox>\n );\n}\n\nexport default SearchableCombobox;\n"],"mappings":";;;;;;;;AAAA;AACA,
|
|
1
|
+
{"version":3,"file":"SearchableCombobox.js","names":["useCallback","SpectrumComboBox","Item","TextWithTooltip","jsx","_jsx","SearchableCombobox","_ref","scrollRef","getItemDisplayText","getKey","props","_objectWithoutProperties","_excluded","renderItem","item","key","displayText","textValue","String","children","text","_objectSpread","ref","menuTrigger","onSelectionChange"],"sources":["../src/SearchableCombobox.tsx"],"sourcesContent":["/* eslint-disable react/jsx-props-no-spreading */\nimport { type Key, useCallback } from 'react';\nimport type { DOMRefValue, FocusableRef } from '@react-types/shared';\nimport { SpectrumComboBox, Item, type SpectrumComboBoxProps } from './spectrum';\nimport TextWithTooltip from './TextWithTooltip';\n\nexport interface SearchableComboboxProps<TItem, TKey extends Key>\n extends Omit<\n SpectrumComboBoxProps<TItem>,\n 'children' | 'menuTrigger' | 'onSelectionChange'\n > {\n getItemDisplayText: (item: TItem | null | undefined) => string | null;\n getKey: (item: TItem | null | undefined) => TKey | null;\n scrollRef: React.RefObject<DOMRefValue>;\n onSelectionChange: (key: TKey | null) => void;\n}\n\nexport function SearchableCombobox<TItem, TKey extends Key>({\n scrollRef,\n getItemDisplayText,\n getKey,\n ...props\n}: SearchableComboboxProps<TItem, TKey>): JSX.Element {\n const renderItem = useCallback(\n item => {\n const key = getKey(item);\n const displayText = getItemDisplayText(item);\n\n return (\n <Item key={key} textValue={displayText ?? String(key)}>\n <TextWithTooltip text={displayText} />\n </Item>\n );\n },\n [getItemDisplayText, getKey]\n );\n\n return (\n <SpectrumComboBox\n {...props}\n // The `ref`prop type defined by React Spectrum is incorrect here\n ref={scrollRef as unknown as FocusableRef<HTMLElement>}\n menuTrigger=\"focus\"\n // Type assertion is necessary since <ComboBox> types don't recognize the\n // generic key arg\n onSelectionChange={props.onSelectionChange as (key: Key | null) => void}\n >\n {renderItem}\n </SpectrumComboBox>\n );\n}\n\nexport default SearchableCombobox;\n"],"mappings":";;;;;;;;AAAA;AACA,SAAmBA,WAAW,QAAQ,OAAO;AAAC,SAErCC,gBAAgB,EAAEC,IAAI;AAAA,OACxBC,eAAe;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAatB,OAAO,SAASC,kBAAkBA,CAAAC,IAAA,EAKoB;EAAA,IALM;MAC1DC,SAAS;MACTC,kBAAkB;MAClBC;IAEoC,CAAC,GAAAH,IAAA;IADlCI,KAAK,GAAAC,wBAAA,CAAAL,IAAA,EAAAM,SAAA;EAER,IAAMC,UAAU,GAAGd,WAAW,CAC5Be,IAAI,IAAI;IACN,IAAMC,GAAG,GAAGN,MAAM,CAACK,IAAI,CAAC;IACxB,IAAME,WAAW,GAAGR,kBAAkB,CAACM,IAAI,CAAC;IAE5C,oBACEV,IAAA,CAACH,IAAI;MAAWgB,SAAS,EAAED,WAAW,aAAXA,WAAW,cAAXA,WAAW,GAAIE,MAAM,CAACH,GAAG,CAAE;MAAAI,QAAA,eACpDf,IAAA,CAACF,eAAe;QAACkB,IAAI,EAAEJ;MAAY,CAAE;IAAC,GAD7BD,GAEL,CAAC;EAEX,CAAC,EACD,CAACP,kBAAkB,EAAEC,MAAM,CAC7B,CAAC;EAED,oBACEL,IAAA,CAACJ,gBAAgB,EAAAqB,aAAA,CAAAA,aAAA,KACXX,KAAK;IACT;IACAY,GAAG,EAAEf,SAAkD;IACvDgB,WAAW,EAAC;IACZ;IACA;IAAA;IACAC,iBAAiB,EAAEd,KAAK,CAACc,iBAA+C;IAAAL,QAAA,EAEvEN;EAAU,EACK,CAAC;AAEvB;AAEA,eAAeR,kBAAkB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextWithTooltip.d.ts","sourceRoot":"","sources":["../src/TextWithTooltip.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAW,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"TextWithTooltip.d.ts","sourceRoot":"","sources":["../src/TextWithTooltip.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,aAAa,EAAW,MAAM,UAAU,CAAC;AAEvD,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;CACxC;AAED,wBAAgB,eAAe,CAAC,EAC9B,IAAI,EACJ,SAAuB,GACxB,EAAE,oBAAoB,GAAG,GAAG,CAAC,OAAO,CAgBpC;AAED,eAAe,eAAe,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextWithTooltip.js","names":["useMemo","Text","stylesCommon","Tooltip","Fragment","_Fragment","jsx","_jsx","jsxs","_jsxs","TextWithTooltip","_ref","text","placement","options","children","UNSAFE_className","spectrumEllipsis"],"sources":["../src/TextWithTooltip.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport { Text } from './spectrum';\nimport stylesCommon from './SpectrumComponent.module.scss';\nimport { PopperOptions, Tooltip } from './popper';\n\nexport interface TextWithTooltipProps {\n text?: string | null;\n placement?: PopperOptions['placement'];\n}\n\nexport function TextWithTooltip({\n text,\n placement = 'top-start',\n}: TextWithTooltipProps): JSX.Element {\n const options = useMemo(() => ({ placement }), [placement]);\n\n return (\n <>\n <Text UNSAFE_className={stylesCommon.spectrumEllipsis}>\n {text ?? (\n /* so that height doesn't collapse when empty */\n <> </>\n )}\n </Text>\n {text == null || text === '' ? null : (\n <Tooltip options={options}>{text}</Tooltip>\n )}\n </>\n );\n}\n\nexport default TextWithTooltip;\n"],"mappings":"AAAA,SAASA,OAAO,QAAQ,OAAO;AAAC,SACvBC,IAAI;AAAA,OACNC,YAAY;AAAA,
|
|
1
|
+
{"version":3,"file":"TextWithTooltip.js","names":["useMemo","Text","stylesCommon","Tooltip","Fragment","_Fragment","jsx","_jsx","jsxs","_jsxs","TextWithTooltip","_ref","text","placement","options","children","UNSAFE_className","spectrumEllipsis"],"sources":["../src/TextWithTooltip.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport { Text } from './spectrum';\nimport stylesCommon from './SpectrumComponent.module.scss';\nimport { type PopperOptions, Tooltip } from './popper';\n\nexport interface TextWithTooltipProps {\n text?: string | null;\n placement?: PopperOptions['placement'];\n}\n\nexport function TextWithTooltip({\n text,\n placement = 'top-start',\n}: TextWithTooltipProps): JSX.Element {\n const options = useMemo(() => ({ placement }), [placement]);\n\n return (\n <>\n <Text UNSAFE_className={stylesCommon.spectrumEllipsis}>\n {text ?? (\n /* so that height doesn't collapse when empty */\n <> </>\n )}\n </Text>\n {text == null || text === '' ? null : (\n <Tooltip options={options}>{text}</Tooltip>\n )}\n </>\n );\n}\n\nexport default TextWithTooltip;\n"],"mappings":"AAAA,SAASA,OAAO,QAAQ,OAAO;AAAC,SACvBC,IAAI;AAAA,OACNC,YAAY;AAAA,SACUC,OAAO;AAAA,SAAAC,QAAA,IAAAC,SAAA;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAAA,SAAAC,IAAA,IAAAC,KAAA;AAOpC,OAAO,SAASC,eAAeA,CAAAC,IAAA,EAGO;EAAA,IAHN;IAC9BC,IAAI;IACJC,SAAS,GAAG;EACQ,CAAC,GAAAF,IAAA;EACrB,IAAMG,OAAO,GAAGd,OAAO,CAAC,OAAO;IAAEa;EAAU,CAAC,CAAC,EAAE,CAACA,SAAS,CAAC,CAAC;EAE3D,oBACEJ,KAAA,CAAAJ,SAAA;IAAAU,QAAA,gBACER,IAAA,CAACN,IAAI;MAACe,gBAAgB,EAAEd,YAAY,CAACe,gBAAiB;MAAAF,QAAA,EACnDH,IAAI,aAAJA,IAAI,cAAJA,IAAI;MAAA;MACH;MACAL,IAAA,CAAAF,SAAA;QAAAU,QAAA,EAAE;MAAM,CAAE;IAAC,CAET,CAAC,EACNH,IAAI,IAAI,IAAI,IAAIA,IAAI,KAAK,EAAE,GAAG,IAAI,gBACjCL,IAAA,CAACJ,OAAO;MAACW,OAAO,EAAEA,OAAQ;MAAAC,QAAA,EAAEH;IAAI,CAAU,CAC3C;EAAA,CACD,CAAC;AAEP;AAEA,eAAeF,eAAe"}
|
package/dist/TimeInput.d.ts
CHANGED
package/dist/TimeInput.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimeInput.d.ts","sourceRoot":"","sources":["../src/TimeInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAMN,MAAM,OAAO,CAAC;AAGf,OAAoB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"TimeInput.d.ts","sourceRoot":"","sources":["../src/TimeInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAMN,MAAM,OAAO,CAAC;AAGf,OAAoB,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGnE,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAOtD,KAAK,cAAc,GAAG;IACpB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,YAAY,EAAE,CAAC,YAAY,EAAE,gBAAgB,KAAK,IAAI,CAAC;CACxD,CAAC;AAeF,QAAA,MAAM,SAAS,yFAqId,CAAC;AAaF,eAAe,SAAS,CAAC"}
|
package/dist/TimeInput.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimeInput.js","names":["React","useCallback","useEffect","useImperativeHandle","useRef","useState","Log","TimeUtils","MaskedInput","DEFAULT_GET_PREFERRED_REPLACEMENT_STRING","jsx","_jsx","log","module","TIME_PATTERN","EXAMPLES","fixIncompleteValue","value","concat","substring","replace","length","TimeInput","forwardRef","props","ref","allowValueWrapping","className","onChange","propsValue","onFocus","onBlur","onSelect","dataTestId","setValue","formatTime","parsedValueRef","selection","setSelection","inputRef","focus","_inputRef$current","current","newSelection","_inputRef$current2","setFormattedTime","getNextSegmentValue","range","delta","segmentValue","maxValue","selectionStart","newSegmentValue","parseInt","Number","isNaN","Math","min","max","padStart","getPreferredReplacementString","replaceValue","replaceIndex","newChar","selectionEnd","handleChange","newValue","debug","parseTime","handleBlur","fixedValue","handleSelect","example","pattern","defaultProps","undefined"],"sources":["../src/TimeInput.tsx"],"sourcesContent":["import React, {\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from 'react';\nimport Log from '@deephaven/log';\nimport { TimeUtils } from '@deephaven/utils';\nimport MaskedInput, { SelectionSegment } from './MaskedInput';\nimport { DEFAULT_GET_PREFERRED_REPLACEMENT_STRING } from './MaskedInputUtils';\n\nexport type { SelectionSegment } from './MaskedInput';\n\nconst log = Log.module('TimeInput');\n\nconst TIME_PATTERN = '([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]';\nconst EXAMPLES = ['00:00:00', '12:34:56', '23:59:59'];\n\ntype TimeInputProps = {\n allowValueWrapping?: boolean;\n className?: string;\n onChange?: (timeInSec: number) => void;\n onSelect?: (selection: SelectionSegment) => void;\n value?: number;\n onFocus?: () => void;\n onBlur?: () => void;\n 'data-testid'?: string;\n};\n\nexport type TimeInputElement = {\n focus: () => void;\n setSelection: (newSelection: SelectionSegment) => void;\n};\n\nfunction fixIncompleteValue(value: string): string {\n // If value is not a complete HH:mm:ss time, fill missing parts with 0\n if (value != null) {\n return `${value\n .substring(0, 8)\n .replace(/\\u2007/g, '0')}${`00:00:00`.substring(value.length)}`;\n }\n return value;\n}\n\n// Forward ref causes a false positive for display-name in eslint:\n// https://github.com/yannickcr/eslint-plugin-react/issues/2269\n// eslint-disable-next-line react/display-name\nconst TimeInput = React.forwardRef<TimeInputElement, TimeInputProps>(\n (props: TimeInputProps, ref) => {\n const {\n allowValueWrapping = true,\n className = '',\n onChange = () => false,\n value: propsValue = 0,\n onFocus = () => false,\n onBlur = () => false,\n onSelect = () => false,\n 'data-testid': dataTestId,\n } = props;\n const [value, setValue] = useState(TimeUtils.formatTime(propsValue));\n const parsedValueRef = useRef<number>(propsValue);\n const [selection, setSelection] = useState<SelectionSegment>();\n const inputRef = useRef<HTMLInputElement>(null);\n\n useImperativeHandle(\n ref,\n () => ({\n focus: () => {\n inputRef.current?.focus();\n },\n setSelection: newSelection => {\n inputRef.current?.focus();\n setSelection(newSelection);\n },\n }),\n []\n );\n\n useEffect(\n function setFormattedTime() {\n // Ignore value prop update if it matches the displayed value\n // to preserve the displayed value while typing\n if (parsedValueRef.current !== propsValue) {\n setValue(TimeUtils.formatTime(propsValue));\n parsedValueRef.current = propsValue;\n }\n },\n [parsedValueRef, propsValue]\n );\n\n function getNextSegmentValue(\n range: SelectionSegment,\n delta: number,\n segmentValue: string\n ): string {\n // Delta is backward because negative Y is up\n const maxValue = range.selectionStart === 0 ? 24 : 60;\n let newSegmentValue = parseInt(segmentValue, 10) - delta;\n if (Number.isNaN(newSegmentValue)) {\n newSegmentValue = 0;\n } else if (allowValueWrapping) {\n // Add max value and re-mod so we don't get negative values after mod\n newSegmentValue = ((newSegmentValue % maxValue) + maxValue) % maxValue;\n } else {\n newSegmentValue = Math.min(Math.max(0, newSegmentValue), maxValue - 1);\n }\n return `${newSegmentValue}`.padStart(2, '0');\n }\n\n function getPreferredReplacementString(\n replaceValue: string,\n replaceIndex: number,\n newChar: string,\n selectionStart: number,\n selectionEnd: number\n ): string {\n if (\n selectionStart === 0 &&\n selectionEnd === 2 &&\n replaceIndex === 1 &&\n parseInt(newChar, 10) > 1\n ) {\n // DH-10082 Special case for when typing `3` when it's already 12\n return `0${newChar}${replaceValue.substring(2)}`;\n }\n return DEFAULT_GET_PREFERRED_REPLACEMENT_STRING(\n replaceValue,\n replaceIndex,\n newChar\n );\n }\n\n const handleChange = useCallback(\n (newValue: string): void => {\n log.debug('handleChange', newValue);\n setValue(newValue);\n parsedValueRef.current = TimeUtils.parseTime(\n fixIncompleteValue(newValue)\n );\n onChange(parsedValueRef.current);\n },\n [onChange]\n );\n\n const handleBlur = useCallback((): void => {\n const fixedValue = fixIncompleteValue(value);\n // Update the value displayed in the input\n // onChange with the fixed value already triggered in handleChange\n if (fixedValue !== value) {\n setValue(fixedValue);\n }\n onBlur();\n }, [value, onBlur]);\n\n const handleSelect = useCallback(\n (newSelection: SelectionSegment) => {\n setSelection(newSelection);\n onSelect(newSelection);\n },\n [onSelect]\n );\n\n return (\n <MaskedInput\n ref={inputRef}\n className={className}\n example={EXAMPLES}\n getNextSegmentValue={getNextSegmentValue}\n getPreferredReplacementString={getPreferredReplacementString}\n onChange={handleChange}\n onSelect={handleSelect}\n pattern={TIME_PATTERN}\n selection={selection}\n value={value}\n onFocus={onFocus}\n onBlur={handleBlur}\n data-testid={dataTestId}\n />\n );\n }\n);\n\nTimeInput.defaultProps = {\n allowValueWrapping: true,\n className: '',\n onChange: () => false,\n onSelect: () => false,\n value: 0,\n onFocus: () => false,\n onBlur: () => false,\n 'data-testid': undefined,\n};\n\nexport default TimeInput;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TimeInput.js","names":["React","useCallback","useEffect","useImperativeHandle","useRef","useState","Log","TimeUtils","MaskedInput","DEFAULT_GET_PREFERRED_REPLACEMENT_STRING","jsx","_jsx","log","module","TIME_PATTERN","EXAMPLES","fixIncompleteValue","value","concat","substring","replace","length","TimeInput","forwardRef","props","ref","allowValueWrapping","className","onChange","propsValue","onFocus","onBlur","onSelect","dataTestId","setValue","formatTime","parsedValueRef","selection","setSelection","inputRef","focus","_inputRef$current","current","newSelection","_inputRef$current2","setFormattedTime","getNextSegmentValue","range","delta","segmentValue","maxValue","selectionStart","newSegmentValue","parseInt","Number","isNaN","Math","min","max","padStart","getPreferredReplacementString","replaceValue","replaceIndex","newChar","selectionEnd","handleChange","newValue","debug","parseTime","handleBlur","fixedValue","handleSelect","example","pattern","defaultProps","undefined"],"sources":["../src/TimeInput.tsx"],"sourcesContent":["import React, {\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from 'react';\nimport Log from '@deephaven/log';\nimport { TimeUtils } from '@deephaven/utils';\nimport MaskedInput, { type SelectionSegment } from './MaskedInput';\nimport { DEFAULT_GET_PREFERRED_REPLACEMENT_STRING } from './MaskedInputUtils';\n\nexport type { SelectionSegment } from './MaskedInput';\n\nconst log = Log.module('TimeInput');\n\nconst TIME_PATTERN = '([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]';\nconst EXAMPLES = ['00:00:00', '12:34:56', '23:59:59'];\n\ntype TimeInputProps = {\n allowValueWrapping?: boolean;\n className?: string;\n onChange?: (timeInSec: number) => void;\n onSelect?: (selection: SelectionSegment) => void;\n value?: number;\n onFocus?: () => void;\n onBlur?: () => void;\n 'data-testid'?: string;\n};\n\nexport type TimeInputElement = {\n focus: () => void;\n setSelection: (newSelection: SelectionSegment) => void;\n};\n\nfunction fixIncompleteValue(value: string): string {\n // If value is not a complete HH:mm:ss time, fill missing parts with 0\n if (value != null) {\n return `${value\n .substring(0, 8)\n .replace(/\\u2007/g, '0')}${`00:00:00`.substring(value.length)}`;\n }\n return value;\n}\n\n// Forward ref causes a false positive for display-name in eslint:\n// https://github.com/yannickcr/eslint-plugin-react/issues/2269\n// eslint-disable-next-line react/display-name\nconst TimeInput = React.forwardRef<TimeInputElement, TimeInputProps>(\n (props: TimeInputProps, ref) => {\n const {\n allowValueWrapping = true,\n className = '',\n onChange = () => false,\n value: propsValue = 0,\n onFocus = () => false,\n onBlur = () => false,\n onSelect = () => false,\n 'data-testid': dataTestId,\n } = props;\n const [value, setValue] = useState(TimeUtils.formatTime(propsValue));\n const parsedValueRef = useRef<number>(propsValue);\n const [selection, setSelection] = useState<SelectionSegment>();\n const inputRef = useRef<HTMLInputElement>(null);\n\n useImperativeHandle(\n ref,\n () => ({\n focus: () => {\n inputRef.current?.focus();\n },\n setSelection: newSelection => {\n inputRef.current?.focus();\n setSelection(newSelection);\n },\n }),\n []\n );\n\n useEffect(\n function setFormattedTime() {\n // Ignore value prop update if it matches the displayed value\n // to preserve the displayed value while typing\n if (parsedValueRef.current !== propsValue) {\n setValue(TimeUtils.formatTime(propsValue));\n parsedValueRef.current = propsValue;\n }\n },\n [parsedValueRef, propsValue]\n );\n\n function getNextSegmentValue(\n range: SelectionSegment,\n delta: number,\n segmentValue: string\n ): string {\n // Delta is backward because negative Y is up\n const maxValue = range.selectionStart === 0 ? 24 : 60;\n let newSegmentValue = parseInt(segmentValue, 10) - delta;\n if (Number.isNaN(newSegmentValue)) {\n newSegmentValue = 0;\n } else if (allowValueWrapping) {\n // Add max value and re-mod so we don't get negative values after mod\n newSegmentValue = ((newSegmentValue % maxValue) + maxValue) % maxValue;\n } else {\n newSegmentValue = Math.min(Math.max(0, newSegmentValue), maxValue - 1);\n }\n return `${newSegmentValue}`.padStart(2, '0');\n }\n\n function getPreferredReplacementString(\n replaceValue: string,\n replaceIndex: number,\n newChar: string,\n selectionStart: number,\n selectionEnd: number\n ): string {\n if (\n selectionStart === 0 &&\n selectionEnd === 2 &&\n replaceIndex === 1 &&\n parseInt(newChar, 10) > 1\n ) {\n // DH-10082 Special case for when typing `3` when it's already 12\n return `0${newChar}${replaceValue.substring(2)}`;\n }\n return DEFAULT_GET_PREFERRED_REPLACEMENT_STRING(\n replaceValue,\n replaceIndex,\n newChar\n );\n }\n\n const handleChange = useCallback(\n (newValue: string): void => {\n log.debug('handleChange', newValue);\n setValue(newValue);\n parsedValueRef.current = TimeUtils.parseTime(\n fixIncompleteValue(newValue)\n );\n onChange(parsedValueRef.current);\n },\n [onChange]\n );\n\n const handleBlur = useCallback((): void => {\n const fixedValue = fixIncompleteValue(value);\n // Update the value displayed in the input\n // onChange with the fixed value already triggered in handleChange\n if (fixedValue !== value) {\n setValue(fixedValue);\n }\n onBlur();\n }, [value, onBlur]);\n\n const handleSelect = useCallback(\n (newSelection: SelectionSegment) => {\n setSelection(newSelection);\n onSelect(newSelection);\n },\n [onSelect]\n );\n\n return (\n <MaskedInput\n ref={inputRef}\n className={className}\n example={EXAMPLES}\n getNextSegmentValue={getNextSegmentValue}\n getPreferredReplacementString={getPreferredReplacementString}\n onChange={handleChange}\n onSelect={handleSelect}\n pattern={TIME_PATTERN}\n selection={selection}\n value={value}\n onFocus={onFocus}\n onBlur={handleBlur}\n data-testid={dataTestId}\n />\n );\n }\n);\n\nTimeInput.defaultProps = {\n allowValueWrapping: true,\n className: '',\n onChange: () => false,\n onSelect: () => false,\n value: 0,\n onFocus: () => false,\n onBlur: () => false,\n 'data-testid': undefined,\n};\n\nexport default TimeInput;\n"],"mappings":"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"}
|
package/dist/TimeSlider.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimeSlider.d.ts","sourceRoot":"","sources":["../src/TimeSlider.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TimeSlider.d.ts","sourceRoot":"","sources":["../src/TimeSlider.tsx"],"names":[],"mappings":"AAgBA,OAAO,mBAAmB,CAAC;AAO3B,KAAK,eAAe,GAAG;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,CAAC,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAClE,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF;;;GAGG;AACH,iBAAS,UAAU,CAAC,EAClB,SAAS,EAAE,aAAa,EACxB,OAAO,EAAE,WAAW,EACpB,QAAQ,EACR,eAAuB,EACvB,aAAqB,EACrB,aAAa,EAAE,UAAU,GAC1B,EAAE,eAAe,GAAG,GAAG,CAAC,OAAO,CAuF/B;AAwSD,eAAe,UAAU,CAAC"}
|