@deephaven/components 1.9.0 → 1.9.1-beta.1
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/DraggableItemList.d.ts +2 -0
- package/dist/DraggableItemList.d.ts.map +1 -1
- package/dist/DraggableItemList.js +5 -3
- package/dist/DraggableItemList.js.map +1 -1
- package/dist/navigation/NavTab.d.ts +8 -1
- package/dist/navigation/NavTab.d.ts.map +1 -1
- package/dist/navigation/NavTab.js +3 -2
- package/dist/navigation/NavTab.js.map +1 -1
- package/dist/navigation/NavTabList.d.ts +9 -1
- package/dist/navigation/NavTabList.d.ts.map +1 -1
- package/dist/navigation/NavTabList.js +4 -2
- package/dist/navigation/NavTabList.js.map +1 -1
- package/package.json +8 -8
|
@@ -13,6 +13,7 @@ type DraggableItemListProps<T> = Omit<ItemListProps<T>, 'overscanCount' | 'focus
|
|
|
13
13
|
className: string;
|
|
14
14
|
draggingItemClassName: string;
|
|
15
15
|
isDropDisabled: boolean;
|
|
16
|
+
hasPlaceholder: boolean;
|
|
16
17
|
isDragDisabled: boolean;
|
|
17
18
|
renderItem: DraggableRenderItemFn<T>;
|
|
18
19
|
style: React.CSSProperties;
|
|
@@ -41,6 +42,7 @@ declare class DraggableItemList<T> extends PureComponent<DraggableItemListProps<
|
|
|
41
42
|
isDeselectOnClick: boolean;
|
|
42
43
|
isDoubleClickSelect: boolean;
|
|
43
44
|
isDropDisabled: boolean;
|
|
45
|
+
hasPlaceholder: boolean;
|
|
44
46
|
isDragDisabled: boolean;
|
|
45
47
|
isMultiSelect: boolean;
|
|
46
48
|
isStickyBottom: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DraggableItemList.d.ts","sourceRoot":"","sources":["../src/DraggableItemList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE7C,OAAO,OAAO,MAAM,UAAU,CAAC;AAC/B,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAc,KAAK,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,QAAQ,EAAE,EACf,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,aAAa,EACnB,MAAM,YAAY,CAAC;AAEpB,OAAO,0BAA0B,CAAC;AAElC,MAAM,MAAM,wBAAwB,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,GAAG;IAC7D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,KAAK,qBAAqB,CAAC,CAAC,IAAI,CAC9B,KAAK,EAAE,wBAAwB,CAAC,CAAC,CAAC,KAC/B,KAAK,CAAC,SAAS,CAAC;AAErB,KAAK,sBAAsB,CAAC,CAAC,IAAI,IAAI,CACnC,aAAa,CAAC,CAAC,CAAC,EAChB,eAAe,GAAG,eAAe,GAAG,cAAc,CACnD,GAAG;IACF,SAAS,EAAE,MAAM,CAAC;IAClB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,cAAc,EAAE,OAAO,CAAC;IAExB,cAAc,EAAE,OAAO,CAAC;IAExB,UAAU,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACrC,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC;IAG3B,eAAe,EAAE,MAAM,CAAC;IAExB,WAAW,EAAE,MAAM,CAAC;IAEpB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,KAAK,sBAAsB,GAAG;IAC5B,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF;;;;;;GAMG;AACH,cAAM,iBAAiB,CAAC,CAAC,CAAE,SAAQ,aAAa,CAC9C,sBAAsB,CAAC,CAAC,CAAC,EACzB,sBAAsB,CACvB;IACC,MAAM,CAAC,kBAAkB,SAAM;IAE/B,MAAM,CAAC,YAAY
|
|
1
|
+
{"version":3,"file":"DraggableItemList.d.ts","sourceRoot":"","sources":["../src/DraggableItemList.tsx"],"names":[],"mappings":"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"}
|
|
@@ -195,6 +195,7 @@ class DraggableItemList extends PureComponent {
|
|
|
195
195
|
isDoubleClickSelect,
|
|
196
196
|
isDragDisabled,
|
|
197
197
|
isDropDisabled,
|
|
198
|
+
hasPlaceholder,
|
|
198
199
|
isMultiSelect,
|
|
199
200
|
isStickyBottom,
|
|
200
201
|
itemCount,
|
|
@@ -215,7 +216,7 @@ class DraggableItemList extends PureComponent {
|
|
|
215
216
|
mode: "virtual",
|
|
216
217
|
renderClone: this.getCachedRenderClone(draggingItemClassName, items, offset, renderItem),
|
|
217
218
|
"data-testid": dataTestId,
|
|
218
|
-
children: (provided, snapshot) => /*#__PURE__*/
|
|
219
|
+
children: (provided, snapshot) => /*#__PURE__*/_jsxs("div", _objectSpread(_objectSpread({
|
|
219
220
|
role: "menu",
|
|
220
221
|
className: classNames('draggable-item-list', className, {
|
|
221
222
|
'is-drop-disabled': isDropDisabled,
|
|
@@ -228,7 +229,7 @@ class DraggableItemList extends PureComponent {
|
|
|
228
229
|
ref: provided.innerRef
|
|
229
230
|
// eslint-disable-next-line react/jsx-props-no-spreading
|
|
230
231
|
}, provided.droppableProps), {}, {
|
|
231
|
-
children: /*#__PURE__*/_jsx(ItemList, {
|
|
232
|
+
children: [/*#__PURE__*/_jsx(ItemList, {
|
|
232
233
|
focusSelector: ".draggable-item-list-item",
|
|
233
234
|
isDoubleClickSelect: isDoubleClickSelect,
|
|
234
235
|
isDragSelect: false,
|
|
@@ -245,7 +246,7 @@ class DraggableItemList extends PureComponent {
|
|
|
245
246
|
renderItem: this.getCachedRenderDraggableItem(draggablePrefix, isDragDisabled, renderItem),
|
|
246
247
|
rowHeight: rowHeight,
|
|
247
248
|
selectedRanges: selectedRanges
|
|
248
|
-
})
|
|
249
|
+
}), hasPlaceholder && provided.placeholder]
|
|
249
250
|
}))
|
|
250
251
|
});
|
|
251
252
|
}
|
|
@@ -261,6 +262,7 @@ _defineProperty(DraggableItemList, "defaultProps", {
|
|
|
261
262
|
isDeselectOnClick: true,
|
|
262
263
|
isDoubleClickSelect: true,
|
|
263
264
|
isDropDisabled: false,
|
|
265
|
+
hasPlaceholder: false,
|
|
264
266
|
isDragDisabled: false,
|
|
265
267
|
isMultiSelect: false,
|
|
266
268
|
isStickyBottom: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DraggableItemList.js","names":["React","PureComponent","classNames","memoize","Draggable","Droppable","FontAwesomeIcon","vsGripper","RangeUtils","ItemList","Tooltip","jsx","_jsx","jsxs","_jsxs","DraggableItemList","renderHandle","children","icon","renderBadge","_ref","text","length","className","renderTextItem","_ref2","badgeText","renderItem","_ref3","_ref4","_item$displayValue","item","isClone","selectedCount","displayValue","value","concat","undefined","getDraggableId","draggablePrefix","itemIndex","getDraggableIndex","draggableId","num","split","pop","parseInt","constructor","props","_defineProperty","isFocused","isSelected","isDragDisabled","style","index","provided","_objectSpread","role","ref","innerRef","tabIndex","draggableProps","dragHandleProps","max","CACHE_SIZE","_ref5","getCachedDraggableItem","draggingItemClassName","items","offset","snapshot","rubric","state","source","handleSelectionChange","bind","itemList","createRef","selectItem","_this$itemList$curren","current","focusItem","_this$itemList$curren2","scrollToItem","_this$itemList$curren3","selectedRanges","setState","count","onSelectionChange","render","droppableId","isDoubleClickSelect","isDropDisabled","isMultiSelect","isStickyBottom","itemCount","onFocusChange","onSelect","onViewportChange","rowHeight","dataTestId","mode","renderClone","getCachedRenderClone","draggingFromThisWith","isDraggingOver","draggingOverWith","droppableProps","focusSelector","isDragSelect","getCachedRenderDraggableItem","_DraggableItemList","DEFAULT_ROW_HEIGHT","isDeselectOnClick","disableSelect"],"sources":["../src/DraggableItemList.tsx"],"sourcesContent":["import React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport memoize from 'memoizee';\nimport {\n Draggable,\n Droppable,\n type DraggableChildrenFn,\n} from '@hello-pangea/dnd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsGripper } from '@deephaven/icons';\nimport { RangeUtils, type Range } from '@deephaven/utils';\nimport ItemList, {\n type RenderItemProps,\n type DefaultListItem,\n type ItemListProps,\n} from './ItemList';\nimport { Tooltip } from './popper';\nimport './DraggableItemList.scss';\n\nexport type DraggableRenderItemProps<T> = RenderItemProps<T> & {\n isClone?: boolean;\n selectedCount?: number;\n};\n\ntype DraggableRenderItemFn<T> = (\n props: DraggableRenderItemProps<T>\n) => React.ReactNode;\n\ntype DraggableItemListProps<T> = Omit<\n ItemListProps<T>,\n 'overscanCount' | 'focusSelector' | 'isDragSelect'\n> & {\n className: string;\n draggingItemClassName: string;\n isDropDisabled: boolean;\n // Whether to allow dragging items from this list\n isDragDisabled: boolean;\n\n renderItem: DraggableRenderItemFn<T>;\n style: React.CSSProperties;\n\n // The prefix to add to all draggable item IDs\n draggablePrefix: string;\n // The ID to give the droppable list\n droppableId: string;\n\n 'data-testid'?: string;\n};\n\ntype DraggableItemListState = {\n selectedCount: number;\n};\n\n/**\n * Show a draggable item list. It _must_ be used within a `DragDropContext`.\n * This implementation uses @hello-pangea/dnd for handling dragging and dropping of items.\n * We use ItemList to handle selection for multi drag and drop (not built in to @hello-pangea/dnd).\n * One caveat with the use of @hello-pangea/dnd is that it doesn't allow a drag to be initiated while\n * using a modifier key: https://github.com/atlassian/@hello-pangea/dnd/issues/1678\n */\nclass DraggableItemList<T> extends PureComponent<\n DraggableItemListProps<T>,\n DraggableItemListState\n> {\n static DEFAULT_ROW_HEIGHT = 30;\n\n static defaultProps = {\n className: '',\n draggingItemClassName: '',\n offset: 0,\n items: [],\n rowHeight: DraggableItemList.DEFAULT_ROW_HEIGHT,\n isDeselectOnClick: true,\n isDoubleClickSelect: true,\n isDropDisabled: false,\n isDragDisabled: false,\n isMultiSelect: false,\n isStickyBottom: false,\n disableSelect: false,\n style: null,\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 renderItem: DraggableItemList.renderItem,\n selectedRanges: [],\n draggablePrefix: 'draggable-item',\n droppableId: 'droppable-item-list',\n 'data-testid': undefined,\n };\n\n static renderHandle(): JSX.Element {\n return (\n <div>\n <Tooltip>Drag to re-order</Tooltip>\n <FontAwesomeIcon icon={vsGripper} />\n </div>\n );\n }\n\n static renderBadge({ text }: { text?: string }): React.ReactNode {\n return text != null && text.length > 0 ? (\n <span className=\"number-badge\">{text}</span>\n ) : null;\n }\n\n static renderTextItem({\n text,\n badgeText = '',\n className = '',\n }: {\n text?: string;\n badgeText?: string;\n className: string;\n }): JSX.Element {\n return (\n <div\n className={classNames(\n 'item-list-item-content',\n 'draggable-item-list-item-content',\n className\n )}\n >\n <span className=\"title\">{text}</span>\n {DraggableItemList.renderBadge({ text: badgeText })}\n {DraggableItemList.renderHandle()}\n </div>\n );\n }\n\n static renderItem<P extends DefaultListItem>({\n item,\n isClone,\n selectedCount,\n }: DraggableRenderItemProps<P>): JSX.Element {\n const text =\n item != null ? item.displayValue ?? item.value ?? `${item}` : '';\n const badgeText =\n isClone !== undefined && isClone ? `${selectedCount}` : '';\n const className =\n isClone !== undefined && isClone ? 'item-list-item-clone' : '';\n return DraggableItemList.renderTextItem({ text, badgeText, className });\n }\n\n static getDraggableId(draggablePrefix: string, itemIndex: number): string {\n return `${draggablePrefix}/${itemIndex}`;\n }\n\n static getDraggableIndex(draggableId: string): number {\n const num = draggableId.split('/').pop();\n return parseInt(num !== undefined ? num : '', 10);\n }\n\n constructor(props: DraggableItemListProps<T>) {\n super(props);\n\n this.handleSelectionChange = this.handleSelectionChange.bind(this);\n\n this.itemList = React.createRef();\n\n this.state = {\n selectedCount: 0,\n };\n }\n\n itemList: React.RefObject<ItemList<T>>;\n\n selectItem(itemIndex: number): void {\n this.itemList.current?.selectItem(itemIndex);\n }\n\n focusItem(itemIndex: number): void {\n this.itemList.current?.focusItem(itemIndex);\n }\n\n scrollToItem(itemIndex: number): void {\n this.itemList.current?.scrollToItem(itemIndex);\n }\n\n getCachedDraggableItem = memoize(\n (\n draggablePrefix: string,\n renderItem: DraggableRenderItemFn<T>,\n item: T,\n itemIndex: number,\n isFocused: boolean,\n isSelected: boolean,\n isDragDisabled: boolean,\n style: React.CSSProperties\n ) => (\n <Draggable\n key={itemIndex}\n draggableId={DraggableItemList.getDraggableId(\n draggablePrefix,\n itemIndex\n )}\n index={itemIndex}\n isDragDisabled={isDragDisabled}\n >\n {provided => (\n <div\n role=\"menuitem\"\n className=\"draggable-item-list-item\"\n ref={provided.innerRef}\n tabIndex={-1}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.draggableProps}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.dragHandleProps}\n >\n {renderItem({\n item,\n itemIndex,\n isFocused,\n isSelected,\n style,\n isClone: false,\n })}\n </div>\n )}\n </Draggable>\n ),\n { max: ItemList.CACHE_SIZE }\n );\n\n handleSelectionChange(selectedRanges: readonly Range[]): void {\n this.setState({ selectedCount: RangeUtils.count(selectedRanges) });\n\n const { onSelectionChange } = this.props;\n onSelectionChange(selectedRanges);\n }\n\n getCachedRenderDraggableItem = memoize(\n (\n draggablePrefix: string,\n isDragDisabled: boolean,\n renderItem: DraggableRenderItemFn<T>\n ) =>\n ({ item, itemIndex, isFocused, isSelected, style }: RenderItemProps<T>) =>\n this.getCachedDraggableItem(\n draggablePrefix,\n renderItem,\n item,\n itemIndex,\n isFocused,\n isSelected,\n isDragDisabled,\n style\n ),\n { max: 1 }\n );\n\n getCachedRenderClone = memoize(\n (\n draggingItemClassName: string,\n items: readonly T[],\n offset: number,\n renderItem: DraggableRenderItemFn<T>\n ): DraggableChildrenFn =>\n // eslint-disable-next-line react/no-unstable-nested-components, react/display-name, react/function-component-definition\n (provided, snapshot, rubric) => {\n // eslint-disable-next-line react/no-this-in-sfc\n const { selectedCount } = this.state;\n const { draggableProps, dragHandleProps, innerRef } = provided;\n const { index: itemIndex } = rubric.source;\n const item = items[itemIndex - offset];\n return (\n <div\n className={classNames(\n 'draggable-item-list-dragging-item-container',\n draggingItemClassName\n )}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...draggableProps}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...dragHandleProps}\n ref={innerRef}\n >\n <div\n className={classNames(\n 'draggable-item-list-dragging-item',\n { 'two-dragged': selectedCount === 2 },\n { 'multiple-dragged': selectedCount > 2 }\n )}\n >\n {renderItem({\n item,\n itemIndex,\n isFocused: false,\n isSelected: true,\n style: {},\n isClone: true,\n selectedCount,\n })}\n </div>\n </div>\n );\n },\n { max: 1 }\n );\n\n render(): JSX.Element {\n const {\n className,\n draggablePrefix,\n draggingItemClassName,\n droppableId,\n isDoubleClickSelect,\n isDragDisabled,\n isDropDisabled,\n isMultiSelect,\n isStickyBottom,\n itemCount,\n items,\n offset,\n onFocusChange,\n onSelect,\n onViewportChange,\n renderItem,\n rowHeight,\n selectedRanges,\n style,\n 'data-testid': dataTestId,\n } = this.props;\n return (\n <Droppable\n isDropDisabled={isDropDisabled}\n droppableId={droppableId}\n mode=\"virtual\"\n renderClone={this.getCachedRenderClone(\n draggingItemClassName,\n items,\n offset,\n renderItem\n )}\n data-testid={dataTestId}\n >\n {(provided, snapshot) => (\n <div\n role=\"menu\"\n className={classNames('draggable-item-list', className, {\n 'is-drop-disabled': isDropDisabled,\n 'is-drag-disabled': isDragDisabled,\n 'is-dragging-from-this': snapshot.draggingFromThisWith,\n 'is-dragging-over': snapshot.isDraggingOver,\n 'is-dropping': snapshot.draggingOverWith,\n })}\n style={style}\n ref={provided.innerRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.droppableProps}\n >\n <ItemList\n focusSelector=\".draggable-item-list-item\"\n isDoubleClickSelect={isDoubleClickSelect}\n isDragSelect={false}\n isMultiSelect={isMultiSelect}\n isStickyBottom={isStickyBottom}\n itemCount={itemCount}\n items={items}\n onFocusChange={onFocusChange}\n onSelect={onSelect}\n onSelectionChange={this.handleSelectionChange}\n onViewportChange={onViewportChange}\n offset={offset}\n ref={this.itemList}\n renderItem={this.getCachedRenderDraggableItem(\n draggablePrefix,\n isDragDisabled,\n renderItem\n )}\n rowHeight={rowHeight}\n selectedRanges={selectedRanges}\n />\n </div>\n )}\n </Droppable>\n );\n }\n}\n\nexport default DraggableItemList;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"DraggableItemList.js","names":["React","PureComponent","classNames","memoize","Draggable","Droppable","FontAwesomeIcon","vsGripper","RangeUtils","ItemList","Tooltip","jsx","_jsx","jsxs","_jsxs","DraggableItemList","renderHandle","children","icon","renderBadge","_ref","text","length","className","renderTextItem","_ref2","badgeText","renderItem","_ref3","_ref4","_item$displayValue","item","isClone","selectedCount","displayValue","value","concat","undefined","getDraggableId","draggablePrefix","itemIndex","getDraggableIndex","draggableId","num","split","pop","parseInt","constructor","props","_defineProperty","isFocused","isSelected","isDragDisabled","style","index","provided","_objectSpread","role","ref","innerRef","tabIndex","draggableProps","dragHandleProps","max","CACHE_SIZE","_ref5","getCachedDraggableItem","draggingItemClassName","items","offset","snapshot","rubric","state","source","handleSelectionChange","bind","itemList","createRef","selectItem","_this$itemList$curren","current","focusItem","_this$itemList$curren2","scrollToItem","_this$itemList$curren3","selectedRanges","setState","count","onSelectionChange","render","droppableId","isDoubleClickSelect","isDropDisabled","hasPlaceholder","isMultiSelect","isStickyBottom","itemCount","onFocusChange","onSelect","onViewportChange","rowHeight","dataTestId","mode","renderClone","getCachedRenderClone","draggingFromThisWith","isDraggingOver","draggingOverWith","droppableProps","focusSelector","isDragSelect","getCachedRenderDraggableItem","placeholder","_DraggableItemList","DEFAULT_ROW_HEIGHT","isDeselectOnClick","disableSelect"],"sources":["../src/DraggableItemList.tsx"],"sourcesContent":["import React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport memoize from 'memoizee';\nimport {\n Draggable,\n Droppable,\n type DraggableChildrenFn,\n} from '@hello-pangea/dnd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsGripper } from '@deephaven/icons';\nimport { RangeUtils, type Range } from '@deephaven/utils';\nimport ItemList, {\n type RenderItemProps,\n type DefaultListItem,\n type ItemListProps,\n} from './ItemList';\nimport { Tooltip } from './popper';\nimport './DraggableItemList.scss';\n\nexport type DraggableRenderItemProps<T> = RenderItemProps<T> & {\n isClone?: boolean;\n selectedCount?: number;\n};\n\ntype DraggableRenderItemFn<T> = (\n props: DraggableRenderItemProps<T>\n) => React.ReactNode;\n\ntype DraggableItemListProps<T> = Omit<\n ItemListProps<T>,\n 'overscanCount' | 'focusSelector' | 'isDragSelect'\n> & {\n className: string;\n draggingItemClassName: string;\n isDropDisabled: boolean;\n // Whether to include the droppable provided.placeholder in the DOM\n hasPlaceholder: boolean;\n // Whether to allow dragging items from this list\n isDragDisabled: boolean;\n\n renderItem: DraggableRenderItemFn<T>;\n style: React.CSSProperties;\n\n // The prefix to add to all draggable item IDs\n draggablePrefix: string;\n // The ID to give the droppable list\n droppableId: string;\n\n 'data-testid'?: string;\n};\n\ntype DraggableItemListState = {\n selectedCount: number;\n};\n\n/**\n * Show a draggable item list. It _must_ be used within a `DragDropContext`.\n * This implementation uses @hello-pangea/dnd for handling dragging and dropping of items.\n * We use ItemList to handle selection for multi drag and drop (not built in to @hello-pangea/dnd).\n * One caveat with the use of @hello-pangea/dnd is that it doesn't allow a drag to be initiated while\n * using a modifier key: https://github.com/atlassian/@hello-pangea/dnd/issues/1678\n */\nclass DraggableItemList<T> extends PureComponent<\n DraggableItemListProps<T>,\n DraggableItemListState\n> {\n static DEFAULT_ROW_HEIGHT = 30;\n\n static defaultProps = {\n className: '',\n draggingItemClassName: '',\n offset: 0,\n items: [],\n rowHeight: DraggableItemList.DEFAULT_ROW_HEIGHT,\n isDeselectOnClick: true,\n isDoubleClickSelect: true,\n isDropDisabled: false,\n hasPlaceholder: false,\n isDragDisabled: false,\n isMultiSelect: false,\n isStickyBottom: false,\n disableSelect: false,\n style: null,\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 renderItem: DraggableItemList.renderItem,\n selectedRanges: [],\n draggablePrefix: 'draggable-item',\n droppableId: 'droppable-item-list',\n 'data-testid': undefined,\n };\n\n static renderHandle(): JSX.Element {\n return (\n <div>\n <Tooltip>Drag to re-order</Tooltip>\n <FontAwesomeIcon icon={vsGripper} />\n </div>\n );\n }\n\n static renderBadge({ text }: { text?: string }): React.ReactNode {\n return text != null && text.length > 0 ? (\n <span className=\"number-badge\">{text}</span>\n ) : null;\n }\n\n static renderTextItem({\n text,\n badgeText = '',\n className = '',\n }: {\n text?: string;\n badgeText?: string;\n className: string;\n }): JSX.Element {\n return (\n <div\n className={classNames(\n 'item-list-item-content',\n 'draggable-item-list-item-content',\n className\n )}\n >\n <span className=\"title\">{text}</span>\n {DraggableItemList.renderBadge({ text: badgeText })}\n {DraggableItemList.renderHandle()}\n </div>\n );\n }\n\n static renderItem<P extends DefaultListItem>({\n item,\n isClone,\n selectedCount,\n }: DraggableRenderItemProps<P>): JSX.Element {\n const text =\n item != null ? item.displayValue ?? item.value ?? `${item}` : '';\n const badgeText =\n isClone !== undefined && isClone ? `${selectedCount}` : '';\n const className =\n isClone !== undefined && isClone ? 'item-list-item-clone' : '';\n return DraggableItemList.renderTextItem({ text, badgeText, className });\n }\n\n static getDraggableId(draggablePrefix: string, itemIndex: number): string {\n return `${draggablePrefix}/${itemIndex}`;\n }\n\n static getDraggableIndex(draggableId: string): number {\n const num = draggableId.split('/').pop();\n return parseInt(num !== undefined ? num : '', 10);\n }\n\n constructor(props: DraggableItemListProps<T>) {\n super(props);\n\n this.handleSelectionChange = this.handleSelectionChange.bind(this);\n\n this.itemList = React.createRef();\n\n this.state = {\n selectedCount: 0,\n };\n }\n\n itemList: React.RefObject<ItemList<T>>;\n\n selectItem(itemIndex: number): void {\n this.itemList.current?.selectItem(itemIndex);\n }\n\n focusItem(itemIndex: number): void {\n this.itemList.current?.focusItem(itemIndex);\n }\n\n scrollToItem(itemIndex: number): void {\n this.itemList.current?.scrollToItem(itemIndex);\n }\n\n getCachedDraggableItem = memoize(\n (\n draggablePrefix: string,\n renderItem: DraggableRenderItemFn<T>,\n item: T,\n itemIndex: number,\n isFocused: boolean,\n isSelected: boolean,\n isDragDisabled: boolean,\n style: React.CSSProperties\n ) => (\n <Draggable\n key={itemIndex}\n draggableId={DraggableItemList.getDraggableId(\n draggablePrefix,\n itemIndex\n )}\n index={itemIndex}\n isDragDisabled={isDragDisabled}\n >\n {provided => (\n <div\n role=\"menuitem\"\n className=\"draggable-item-list-item\"\n ref={provided.innerRef}\n tabIndex={-1}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.draggableProps}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.dragHandleProps}\n >\n {renderItem({\n item,\n itemIndex,\n isFocused,\n isSelected,\n style,\n isClone: false,\n })}\n </div>\n )}\n </Draggable>\n ),\n { max: ItemList.CACHE_SIZE }\n );\n\n handleSelectionChange(selectedRanges: readonly Range[]): void {\n this.setState({ selectedCount: RangeUtils.count(selectedRanges) });\n\n const { onSelectionChange } = this.props;\n onSelectionChange(selectedRanges);\n }\n\n getCachedRenderDraggableItem = memoize(\n (\n draggablePrefix: string,\n isDragDisabled: boolean,\n renderItem: DraggableRenderItemFn<T>\n ) =>\n ({ item, itemIndex, isFocused, isSelected, style }: RenderItemProps<T>) =>\n this.getCachedDraggableItem(\n draggablePrefix,\n renderItem,\n item,\n itemIndex,\n isFocused,\n isSelected,\n isDragDisabled,\n style\n ),\n { max: 1 }\n );\n\n getCachedRenderClone = memoize(\n (\n draggingItemClassName: string,\n items: readonly T[],\n offset: number,\n renderItem: DraggableRenderItemFn<T>\n ): DraggableChildrenFn =>\n // eslint-disable-next-line react/no-unstable-nested-components, react/display-name, react/function-component-definition\n (provided, snapshot, rubric) => {\n // eslint-disable-next-line react/no-this-in-sfc\n const { selectedCount } = this.state;\n const { draggableProps, dragHandleProps, innerRef } = provided;\n const { index: itemIndex } = rubric.source;\n const item = items[itemIndex - offset];\n return (\n <div\n className={classNames(\n 'draggable-item-list-dragging-item-container',\n draggingItemClassName\n )}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...draggableProps}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...dragHandleProps}\n ref={innerRef}\n >\n <div\n className={classNames(\n 'draggable-item-list-dragging-item',\n { 'two-dragged': selectedCount === 2 },\n { 'multiple-dragged': selectedCount > 2 }\n )}\n >\n {renderItem({\n item,\n itemIndex,\n isFocused: false,\n isSelected: true,\n style: {},\n isClone: true,\n selectedCount,\n })}\n </div>\n </div>\n );\n },\n { max: 1 }\n );\n\n render(): JSX.Element {\n const {\n className,\n draggablePrefix,\n draggingItemClassName,\n droppableId,\n isDoubleClickSelect,\n isDragDisabled,\n isDropDisabled,\n hasPlaceholder,\n isMultiSelect,\n isStickyBottom,\n itemCount,\n items,\n offset,\n onFocusChange,\n onSelect,\n onViewportChange,\n renderItem,\n rowHeight,\n selectedRanges,\n style,\n 'data-testid': dataTestId,\n } = this.props;\n return (\n <Droppable\n isDropDisabled={isDropDisabled}\n droppableId={droppableId}\n mode=\"virtual\"\n renderClone={this.getCachedRenderClone(\n draggingItemClassName,\n items,\n offset,\n renderItem\n )}\n data-testid={dataTestId}\n >\n {(provided, snapshot) => (\n <div\n role=\"menu\"\n className={classNames('draggable-item-list', className, {\n 'is-drop-disabled': isDropDisabled,\n 'is-drag-disabled': isDragDisabled,\n 'is-dragging-from-this': snapshot.draggingFromThisWith,\n 'is-dragging-over': snapshot.isDraggingOver,\n 'is-dropping': snapshot.draggingOverWith,\n })}\n style={style}\n ref={provided.innerRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.droppableProps}\n >\n <ItemList\n focusSelector=\".draggable-item-list-item\"\n isDoubleClickSelect={isDoubleClickSelect}\n isDragSelect={false}\n isMultiSelect={isMultiSelect}\n isStickyBottom={isStickyBottom}\n itemCount={itemCount}\n items={items}\n onFocusChange={onFocusChange}\n onSelect={onSelect}\n onSelectionChange={this.handleSelectionChange}\n onViewportChange={onViewportChange}\n offset={offset}\n ref={this.itemList}\n renderItem={this.getCachedRenderDraggableItem(\n draggablePrefix,\n isDragDisabled,\n renderItem\n )}\n rowHeight={rowHeight}\n selectedRanges={selectedRanges}\n />\n {hasPlaceholder && provided.placeholder}\n </div>\n )}\n </Droppable>\n );\n }\n}\n\nexport default DraggableItemList;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -10,7 +10,14 @@ interface NavTabProps {
|
|
|
10
10
|
index: number;
|
|
11
11
|
isDraggable: boolean;
|
|
12
12
|
contextActions?: ResolvableContextAction | ResolvableContextAction[];
|
|
13
|
+
/**
|
|
14
|
+
* Optional render function to render content after the tab title.
|
|
15
|
+
*
|
|
16
|
+
* @param tab The tab to render content for
|
|
17
|
+
* @returns The content to render after the tab title
|
|
18
|
+
*/
|
|
19
|
+
renderAfterTabContent?: (tab: NavTabItem) => React.ReactNode;
|
|
13
20
|
}
|
|
14
|
-
declare const NavTab: React.MemoExoticComponent<({ tab, onClose, onSelect, isActive, activeRef, index, isDraggable, contextActions, }: NavTabProps) => import("react/jsx-runtime").JSX.Element>;
|
|
21
|
+
declare const NavTab: React.MemoExoticComponent<({ tab, onClose, onSelect, isActive, activeRef, index, isDraggable, contextActions, renderAfterTabContent, }: NavTabProps) => import("react/jsx-runtime").JSX.Element>;
|
|
15
22
|
export default NavTab;
|
|
16
23
|
//# sourceMappingURL=NavTab.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NavTab.d.ts","sourceRoot":"","sources":["../../src/navigation/NavTab.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAe,MAAM,OAAO,CAAC;AAKpC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG/C,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAGlE,UAAU,WAAW;IACnB,GAAG,EAAE,UAAU,CAAC;IAChB,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,uBAAuB,GAAG,uBAAuB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"NavTab.d.ts","sourceRoot":"","sources":["../../src/navigation/NavTab.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAe,MAAM,OAAO,CAAC;AAKpC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG/C,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAGlE,UAAU,WAAW;IACnB,GAAG,EAAE,UAAU,CAAC;IAChB,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,uBAAuB,GAAG,uBAAuB,EAAE,CAAC;IACrE;;;;;OAKG;IACH,qBAAqB,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,KAAK,CAAC,SAAS,CAAC;CAC9D;AAED,QAAA,MAAM,MAAM,0IAWP,WAAW,6CAyFf,CAAC;AAIF,eAAe,MAAM,CAAC"}
|
|
@@ -21,7 +21,8 @@ var NavTab = /*#__PURE__*/memo(_ref => {
|
|
|
21
21
|
activeRef,
|
|
22
22
|
index,
|
|
23
23
|
isDraggable,
|
|
24
|
-
contextActions
|
|
24
|
+
contextActions,
|
|
25
|
+
renderAfterTabContent
|
|
25
26
|
} = _ref;
|
|
26
27
|
var {
|
|
27
28
|
key,
|
|
@@ -82,7 +83,7 @@ var NavTab = /*#__PURE__*/memo(_ref => {
|
|
|
82
83
|
children: [title, /*#__PURE__*/_jsx(Tooltip, {
|
|
83
84
|
children: title
|
|
84
85
|
})]
|
|
85
|
-
}), isClosable && /*#__PURE__*/_jsx(Button, {
|
|
86
|
+
}), renderAfterTabContent === null || renderAfterTabContent === void 0 ? void 0 : renderAfterTabContent(tab), isClosable && /*#__PURE__*/_jsx(Button, {
|
|
86
87
|
kind: "ghost",
|
|
87
88
|
className: "btn-nav-tab-close",
|
|
88
89
|
onClick: event => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NavTab.js","names":["React","memo","classNames","Draggable","vsClose","FontAwesomeIcon","Button","ContextActions","Tooltip","jsx","_jsx","jsxs","_jsxs","NavTab","_ref","tab","onClose","onSelect","isActive","activeRef","index","isDraggable","contextActions","key","isClosable","title","icon","iconElem","isValidElement","draggableId","isDragDisabled","children","provided","snapshot","className","ref","_objectSpread","innerRef","draggableProps","dragHandleProps","active","dragging","isDragging","concat","role","tabIndex","onAuxClick","e","button","buttons","onClick","target","focus","onKeyPress","event","kind","stopPropagation","preventDefault","tooltip","actions","displayName"],"sources":["../../src/navigation/NavTab.tsx"],"sourcesContent":["import React, { memo } from 'react';\nimport classNames from 'classnames';\nimport { Draggable } from '@hello-pangea/dnd';\nimport { type IconDefinition, vsClose } from '@deephaven/icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport type { NavTabItem } from './NavTabList';\nimport Button from '../Button';\nimport ContextActions from '../context-actions/ContextActions';\nimport { type ResolvableContextAction } from '../context-actions';\nimport { Tooltip } from '../popper';\n\ninterface NavTabProps {\n tab: NavTabItem;\n onSelect: (key: string) => void;\n onClose?: (key: string) => void;\n isActive: boolean;\n activeRef: React.RefObject<HTMLDivElement>;\n index: number;\n isDraggable: boolean;\n contextActions?: ResolvableContextAction | ResolvableContextAction[];\n}\n\nconst NavTab = memo(\n ({\n tab,\n onClose,\n onSelect,\n isActive,\n activeRef,\n index,\n isDraggable,\n contextActions,\n }: NavTabProps) => {\n const { key, isClosable = onClose != null, title, icon } = tab;\n\n let iconElem: JSX.Element | undefined;\n if (icon != null) {\n iconElem = React.isValidElement(icon) ? (\n icon\n ) : (\n <FontAwesomeIcon icon={icon as IconDefinition} />\n );\n }\n\n return (\n <Draggable\n draggableId={key}\n key={key}\n index={index}\n isDragDisabled={!isDraggable}\n >\n {(provided, snapshot) => (\n <div\n className=\"context-menu-wrapper\"\n ref={isActive ? activeRef : null}\n >\n <div\n ref={provided.innerRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.draggableProps}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.dragHandleProps}\n className={classNames(\n 'btn btn-link btn-nav-tab',\n { active: isActive },\n { dragging: snapshot.isDragging }\n )}\n data-testid={`btn-nav-tab-${title}`}\n role=\"tab\"\n tabIndex={0}\n onAuxClick={e => {\n // Middle mouse button was clicked, and no buttons remain pressed\n if (isClosable && e.button === 1 && e.buttons === 0) {\n onClose?.(key);\n }\n }}\n onClick={e => {\n // have to have seperate check onClick for Safari not supporting AuxClick\n if (isClosable && e.button === 1 && e.buttons === 0) {\n onClose?.(key);\n return;\n }\n // Left mouse button was clicked, and no buttons remain pressed\n if (e.button === 0 && e.buttons === 0) {\n // focus is normally set on mousedown, but dnd calls preventDefault for drag purposes\n // so we can call focus on the firing of the actual click event manually\n (e.target as HTMLDivElement).focus();\n\n onSelect(key);\n }\n }}\n onKeyPress={event => {\n if (event.key === 'Enter') onSelect(key);\n }}\n >\n {iconElem}\n <span className=\"btn-nav-tab-title\">\n {title}\n <Tooltip>{title}</Tooltip>\n </span>\n {isClosable && (\n <Button\n kind=\"ghost\"\n className=\"btn-nav-tab-close\"\n onClick={event => {\n onClose?.(key);\n event.stopPropagation();\n event.preventDefault();\n }}\n icon={vsClose}\n tooltip=\"Close\"\n />\n )}\n </div>\n <ContextActions actions={contextActions} />\n </div>\n )}\n </Draggable>\n );\n }\n);\n\nNavTab.displayName = 'NavTab';\n\nexport default NavTab;\n"],"mappings":";;;;;AAAA,OAAOA,KAAK,IAAIC,IAAI,QAAQ,OAAO;AACnC,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,SAAS,QAAQ,mBAAmB;AAC7C,SAA8BC,OAAO,QAAQ,kBAAkB;AAC/D,SAASC,eAAe,QAAQ,gCAAgC;AAAC,OAE1DC,MAAM;AAAA,OACNC,cAAc;AAAA,SAEZC,OAAO;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;
|
|
1
|
+
{"version":3,"file":"NavTab.js","names":["React","memo","classNames","Draggable","vsClose","FontAwesomeIcon","Button","ContextActions","Tooltip","jsx","_jsx","jsxs","_jsxs","NavTab","_ref","tab","onClose","onSelect","isActive","activeRef","index","isDraggable","contextActions","renderAfterTabContent","key","isClosable","title","icon","iconElem","isValidElement","draggableId","isDragDisabled","children","provided","snapshot","className","ref","_objectSpread","innerRef","draggableProps","dragHandleProps","active","dragging","isDragging","concat","role","tabIndex","onAuxClick","e","button","buttons","onClick","target","focus","onKeyPress","event","kind","stopPropagation","preventDefault","tooltip","actions","displayName"],"sources":["../../src/navigation/NavTab.tsx"],"sourcesContent":["import React, { memo } from 'react';\nimport classNames from 'classnames';\nimport { Draggable } from '@hello-pangea/dnd';\nimport { type IconDefinition, vsClose } from '@deephaven/icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport type { NavTabItem } from './NavTabList';\nimport Button from '../Button';\nimport ContextActions from '../context-actions/ContextActions';\nimport { type ResolvableContextAction } from '../context-actions';\nimport { Tooltip } from '../popper';\n\ninterface NavTabProps {\n tab: NavTabItem;\n onSelect: (key: string) => void;\n onClose?: (key: string) => void;\n isActive: boolean;\n activeRef: React.RefObject<HTMLDivElement>;\n index: number;\n isDraggable: boolean;\n contextActions?: ResolvableContextAction | ResolvableContextAction[];\n /**\n * Optional render function to render content after the tab title.\n *\n * @param tab The tab to render content for\n * @returns The content to render after the tab title\n */\n renderAfterTabContent?: (tab: NavTabItem) => React.ReactNode;\n}\n\nconst NavTab = memo(\n ({\n tab,\n onClose,\n onSelect,\n isActive,\n activeRef,\n index,\n isDraggable,\n contextActions,\n renderAfterTabContent,\n }: NavTabProps) => {\n const { key, isClosable = onClose != null, title, icon } = tab;\n\n let iconElem: JSX.Element | undefined;\n if (icon != null) {\n iconElem = React.isValidElement(icon) ? (\n icon\n ) : (\n <FontAwesomeIcon icon={icon as IconDefinition} />\n );\n }\n\n return (\n <Draggable\n draggableId={key}\n key={key}\n index={index}\n isDragDisabled={!isDraggable}\n >\n {(provided, snapshot) => (\n <div\n className=\"context-menu-wrapper\"\n ref={isActive ? activeRef : null}\n >\n <div\n ref={provided.innerRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.draggableProps}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.dragHandleProps}\n className={classNames(\n 'btn btn-link btn-nav-tab',\n { active: isActive },\n { dragging: snapshot.isDragging }\n )}\n data-testid={`btn-nav-tab-${title}`}\n role=\"tab\"\n tabIndex={0}\n onAuxClick={e => {\n // Middle mouse button was clicked, and no buttons remain pressed\n if (isClosable && e.button === 1 && e.buttons === 0) {\n onClose?.(key);\n }\n }}\n onClick={e => {\n // have to have seperate check onClick for Safari not supporting AuxClick\n if (isClosable && e.button === 1 && e.buttons === 0) {\n onClose?.(key);\n return;\n }\n // Left mouse button was clicked, and no buttons remain pressed\n if (e.button === 0 && e.buttons === 0) {\n // focus is normally set on mousedown, but dnd calls preventDefault for drag purposes\n // so we can call focus on the firing of the actual click event manually\n (e.target as HTMLDivElement).focus();\n\n onSelect(key);\n }\n }}\n onKeyPress={event => {\n if (event.key === 'Enter') onSelect(key);\n }}\n >\n {iconElem}\n <span className=\"btn-nav-tab-title\">\n {title}\n <Tooltip>{title}</Tooltip>\n </span>\n {renderAfterTabContent?.(tab)}\n {isClosable && (\n <Button\n kind=\"ghost\"\n className=\"btn-nav-tab-close\"\n onClick={event => {\n onClose?.(key);\n event.stopPropagation();\n event.preventDefault();\n }}\n icon={vsClose}\n tooltip=\"Close\"\n />\n )}\n </div>\n <ContextActions actions={contextActions} />\n </div>\n )}\n </Draggable>\n );\n }\n);\n\nNavTab.displayName = 'NavTab';\n\nexport default NavTab;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -63,7 +63,15 @@ type NavTabListProps<T extends NavTabItem = NavTabItem> = {
|
|
|
63
63
|
* @returns Additional context items for the tab
|
|
64
64
|
*/
|
|
65
65
|
makeContextActions?: (tab: T) => ContextAction | ContextAction[];
|
|
66
|
+
/**
|
|
67
|
+
* Optional render function to render content after each tab's title.
|
|
68
|
+
* Should be wrapped in useCallback to avoid unnecessary re-renders.
|
|
69
|
+
*
|
|
70
|
+
* @param tab The tab to render content for
|
|
71
|
+
* @returns The content to render after the tab title
|
|
72
|
+
*/
|
|
73
|
+
renderAfterTabContent?: (tab: T) => React.ReactNode;
|
|
66
74
|
};
|
|
67
|
-
declare function NavTabList({ activeKey, tabs, onSelect, onReorder, onClose, makeContextActions, }: NavTabListProps): React.ReactElement;
|
|
75
|
+
declare function NavTabList({ activeKey, tabs, onSelect, onReorder, onClose, makeContextActions, renderAfterTabContent, }: NavTabListProps): React.ReactElement;
|
|
68
76
|
export default NavTabList;
|
|
69
77
|
//# sourceMappingURL=NavTabList.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NavTabList.d.ts","sourceRoot":"","sources":["../../src/navigation/NavTabList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAMN,MAAM,OAAO,CAAC;AASf,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAMxE,OAAO,mBAAmB,CAAC;AAC3B,OAAO,EACL,KAAK,aAAa,EAGnB,MAAM,oBAAoB,CAAC;AAY5B,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,IAAI,CAAC,EAAE,cAAc,GAAG,GAAG,CAAC,OAAO,CAAC;IAEpC;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,KAAK,eAAe,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,IAAI;IACxD;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,IAAI,EAAE,CAAC,EAAE,CAAC;IAEV;;;;OAIG;IACH,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAEhC;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAEhC;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,KAAK,IAAI,CAAC;IAEpE;;;;;;;OAOG;IACH,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,aAAa,GAAG,aAAa,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"NavTabList.d.ts","sourceRoot":"","sources":["../../src/navigation/NavTabList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAMN,MAAM,OAAO,CAAC;AASf,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAMxE,OAAO,mBAAmB,CAAC;AAC3B,OAAO,EACL,KAAK,aAAa,EAGnB,MAAM,oBAAoB,CAAC;AAY5B,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,IAAI,CAAC,EAAE,cAAc,GAAG,GAAG,CAAC,OAAO,CAAC;IAEpC;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,KAAK,eAAe,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,IAAI;IACxD;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,IAAI,EAAE,CAAC,EAAE,CAAC;IAEV;;;;OAIG;IACH,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAEhC;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAEhC;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,KAAK,IAAI,CAAC;IAEpE;;;;;;;OAOG;IACH,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,aAAa,GAAG,aAAa,EAAE,CAAC;IAEjE;;;;;;OAMG;IACH,qBAAqB,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC;CACrD,CAAC;AAoEF,iBAAS,UAAU,CAAC,EAClB,SAAS,EACT,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,OAAO,EACP,kBAAkB,EAClB,qBAAqB,GACtB,EAAE,eAAe,GAAG,KAAK,CAAC,YAAY,CAuXtC;AAED,eAAe,UAAU,CAAC"}
|
|
@@ -88,7 +88,8 @@ function NavTabList(_ref) {
|
|
|
88
88
|
onSelect,
|
|
89
89
|
onReorder,
|
|
90
90
|
onClose,
|
|
91
|
-
makeContextActions
|
|
91
|
+
makeContextActions,
|
|
92
|
+
renderAfterTabContent
|
|
92
93
|
} = _ref;
|
|
93
94
|
var containerRef = useRef();
|
|
94
95
|
var [isOverflowing, setIsOverflowing] = useState(true);
|
|
@@ -289,7 +290,8 @@ function NavTabList(_ref) {
|
|
|
289
290
|
onSelect: onSelect,
|
|
290
291
|
onClose: onClose,
|
|
291
292
|
isDraggable: onReorder != null,
|
|
292
|
-
contextActions: tabContextActionMap.get(key)
|
|
293
|
+
contextActions: tabContextActionMap.get(key),
|
|
294
|
+
renderAfterTabContent: renderAfterTabContent
|
|
293
295
|
}, key);
|
|
294
296
|
});
|
|
295
297
|
useEffect(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NavTabList.js","names":["React","useCallback","useEffect","useMemo","useRef","useState","classNames","clamp","DragDropContext","Droppable","FontAwesomeIcon","vsChevronRight","vsChevronLeft","vsChevronDown","useResizeObserver","DragUtils","Button","NavTab","ContextActions","Popper","DashboardList","GLOBAL_SHORTCUTS","jsx","_jsx","jsxs","_jsxs","CLICK_TIMEOUT","START_SPEED","ACCELERATION","isScrolledLeft","element","scrollLeft","isScrolledRight","Math","abs","clientWidth","scrollWidth","makeBaseContextActions","tab","tabs","onClose","isClosable","key","contextActions","push","title","order","group","action","disabled","i","length","forEach","t","NavTabList","_ref","activeKey","onSelect","onReorder","makeContextActions","containerRef","isOverflowing","setIsOverflowing","isDashboardTabMenuShown","setIsDashboardTabMenuShown","disableScrollLeft","setDisableScrollLeft","disableScrollRight","setDisableScrollRight","handleResize","current","onDragEnd","result","stopDragging","destination","source","index","handleScroll","shouldDisableScrollLeft","shouldDisableScrollRight","continuousScrollRef","cancelClick","handleLeftClick","children","child","offsetLeft","scrollIntoView","behavior","block","inline","handleRightClick","offsetWidth","handleMouseRepeat","direction","startX","deltaX","arguments","undefined","prevTimestamp","container","rAF","requestAnimationFrame","timestamp","startTime","deltaTime","newDeltaX","min","endContinuousScroll","holdTimer","clearTimeout","cancelAnimationFrame","window","removeEventListener","handleMouseDown","setTimeout","addEventListener","handleMouseDownLeft","handleMouseDownRight","handleWheel","_containerRef$current","onWheel","e","stopPropagation","preventDefault","nav","currentTarget","delta","deltaY","_containerRef$current2","tabContextActionMap","tabContextActions","Map","_makeContextActions","set","activeTabRef","activeTab","find","navTabs","map","isActive","activeRef","isDraggable","get","scrollActiveTabIntoView","handleDashboardMenuClick","handleDashboardMenuSelect","handleDashboardMenuClose","className","kind","icon","transform","tooltip","onClick","onMouseDown","onDragStart","startDragging","droppableId","provided","snapshot","_objectSpread","ref","r","innerRef","droppableProps","dragging","draggingFromThisWith","role","onScroll","placeholder","style","visibility","marginLeft","isShown","onExited","options","placement","closeOnBlur","interactive","actions","shortcut","OPEN_DASHBOARD_LIST","isGlobal"],"sources":["../../src/navigation/NavTabList.tsx"],"sourcesContent":["import React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport classNames from 'classnames';\nimport clamp from 'lodash.clamp';\nimport {\n DragDropContext,\n Droppable,\n type OnDragEndResponder,\n} from '@hello-pangea/dnd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { type IconDefinition } from '@fortawesome/fontawesome-svg-core';\nimport { vsChevronRight, vsChevronLeft, vsChevronDown } from '@deephaven/icons';\nimport { useResizeObserver } from '@deephaven/react-hooks';\nimport DragUtils from '../DragUtils';\nimport Button from '../Button';\nimport NavTab from './NavTab';\nimport './NavTabList.scss';\nimport {\n type ContextAction,\n type ResolvableContextAction,\n ContextActions,\n} from '../context-actions';\nimport Popper from '../popper/Popper';\nimport DashboardList from './DashboardList';\nimport { GLOBAL_SHORTCUTS } from '../shortcuts';\n\n// mouse hold timeout to act as hold instead of click\nconst CLICK_TIMEOUT = 500;\n\n// mouse hold acceleration\nconst START_SPEED = 0.01;\nconst ACCELERATION = 0.0005;\n\nexport interface NavTabItem {\n /**\n * Unique key for the tab.\n */\n key: string;\n\n /**\n * Title to display on the tab.\n */\n title: string;\n\n /**\n * Icon to display on the tab.\n */\n icon?: IconDefinition | JSX.Element;\n\n /**\n * Whether the tab is closable.\n * If omitted, the tab will be closeable if onClose exists.\n */\n isClosable?: boolean;\n}\n\ntype NavTabListProps<T extends NavTabItem = NavTabItem> = {\n /**\n * The key of the active tab.\n * If this does not match a tab key, no tab will be active.\n */\n activeKey: string;\n\n /**\n * Array of tabs to display.\n * @see {@link NavTabItem} for the minimum required properties.\n */\n tabs: T[];\n\n /**\n * Function called when a tab is selected.\n *\n * @param key The key of the tab to select\n */\n onSelect: (key: string) => void;\n\n /**\n * Function called when a tab is closed.\n * If the function is provided, all tabs will be closeable by default.\n * Tabs may set their own closeable property to override this behavior.\n *\n * @param key The key of the tab to close\n */\n onClose?: (key: string) => void;\n\n /**\n * Function called when a tab is reordered.\n * If the function is omitted, the tab list will not be reorderable.\n *\n * @param sourceIndex Index in the tab list the drag started from\n * @param destinationIndex Index in the tab list the drag ended at\n */\n onReorder?: (sourceIndex: number, destinationIndex: number) => void;\n\n /**\n * Context actions to add to the tab in addition to the default actions.\n * The default actions are Close, Close to the Right, and Close All.\n * The default actions have a group value of 20.\n *\n * @param tab The tab to make context items for\n * @returns Additional context items for the tab\n */\n makeContextActions?: (tab: T) => ContextAction | ContextAction[];\n};\n\nfunction isScrolledLeft(element: HTMLElement): boolean {\n return element.scrollLeft === 0;\n}\n\nfunction isScrolledRight(element: HTMLElement): boolean {\n return (\n // single pixel buffer to account for sub-pixel rendering\n Math.abs(element.scrollLeft + element.clientWidth - element.scrollWidth) <=\n 1 || element.scrollWidth === 0\n );\n}\n\nfunction makeBaseContextActions(\n tab: NavTabItem,\n tabs: NavTabItem[],\n onClose: ((key: string) => void) | undefined\n): ContextAction[] {\n const { isClosable = false, key } = tab;\n const contextActions: ContextAction[] = [];\n if (isClosable && onClose != null) {\n contextActions.push({\n title: 'Close',\n order: 10,\n group: 20,\n action: () => {\n onClose(key);\n },\n });\n\n let disabled = true;\n for (let i = tabs.length - 1; i > 0; i -= 1) {\n if (tabs[i].key === tab.key) break;\n if (tabs[i].isClosable === true) {\n disabled = false;\n break;\n }\n }\n\n contextActions.push({\n title: 'Close to the Right',\n order: 20,\n group: 20,\n action: () => {\n for (let i = tabs.length - 1; i > 0; i -= 1) {\n if (tabs[i].key === key) break;\n if (tabs[i].isClosable === true) onClose(tabs[i].key);\n }\n },\n disabled,\n });\n\n contextActions.push({\n title: 'Close All',\n order: 30,\n group: 20,\n action: () => {\n tabs.forEach(t => {\n if (t.isClosable === true) onClose(t.key);\n });\n },\n });\n }\n\n return contextActions;\n}\n\nfunction NavTabList({\n activeKey,\n tabs,\n onSelect,\n onReorder,\n onClose,\n makeContextActions,\n}: NavTabListProps): React.ReactElement {\n const containerRef = useRef<HTMLDivElement>();\n const [isOverflowing, setIsOverflowing] = useState(true);\n const [isDashboardTabMenuShown, setIsDashboardTabMenuShown] = useState(false);\n const [disableScrollLeft, setDisableScrollLeft] = useState(true);\n const [disableScrollRight, setDisableScrollRight] = useState(true);\n\n const handleResize = useCallback(() => {\n if (containerRef.current == null) {\n return;\n }\n\n if (\n containerRef.current.clientWidth < containerRef.current.scrollWidth &&\n tabs.length > 0\n ) {\n setIsOverflowing(true);\n } else {\n setIsOverflowing(false);\n }\n\n setDisableScrollLeft(isScrolledLeft(containerRef.current));\n setDisableScrollRight(isScrolledRight(containerRef.current));\n }, [tabs]);\n useResizeObserver(containerRef.current, handleResize);\n\n const onDragEnd: OnDragEndResponder = useCallback(\n result => {\n DragUtils.stopDragging();\n\n // dropped outside the list\n if (!result.destination) {\n return;\n }\n\n onReorder?.(result.source.index, result.destination.index);\n },\n [onReorder]\n );\n\n const handleScroll = useCallback(() => {\n if (containerRef.current == null) {\n return;\n }\n\n const shouldDisableScrollLeft = isScrolledLeft(containerRef.current);\n if (shouldDisableScrollLeft !== disableScrollLeft) {\n setDisableScrollLeft(shouldDisableScrollLeft);\n }\n\n const shouldDisableScrollRight = isScrolledRight(containerRef.current);\n if (shouldDisableScrollRight !== disableScrollRight) {\n setDisableScrollRight(shouldDisableScrollRight);\n }\n }, [disableScrollLeft, disableScrollRight]);\n\n const continuousScrollRef = useRef<{\n holdTimer?: number;\n rAF?: number;\n cancelClick: boolean;\n }>({ cancelClick: false });\n\n const handleLeftClick = useCallback(() => {\n if (\n containerRef.current == null ||\n continuousScrollRef.current.cancelClick\n ) {\n return;\n }\n\n const { children } = containerRef.current;\n for (let i = children.length - 1; i >= 0; i -= 1) {\n const child = children[i] as HTMLElement;\n // Subtract 5px from left edge to account for rounding of offset values\n if (child.offsetLeft < containerRef.current.scrollLeft - 5) {\n child.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'start',\n });\n return;\n }\n }\n }, []);\n\n const handleRightClick = useCallback(() => {\n if (\n containerRef.current == null ||\n continuousScrollRef.current.cancelClick\n ) {\n return;\n }\n\n const { children } = containerRef.current;\n for (let i = 0; i < children.length; i += 1) {\n const child = children[i] as HTMLElement;\n // Subtract 5px from right edge to account for rounding of offset values\n if (\n child.offsetLeft + child.offsetWidth - 5 >\n containerRef.current.scrollLeft + containerRef.current.offsetWidth\n ) {\n child.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'end',\n });\n return;\n }\n }\n }, []);\n\n /**\n * Recurively called after initial timeout on mousedown. Continuously scroll with acceleration.\n * Cancelled by mouseup handler cancelling the animationFrame.\n * @param direction of scroll, left or right\n * @param startX starting position of scroll\n * @param deltaX delta from intial startX calculated recursively\n * @param prevTimestamp called on subsequent delta frames\n */\n const handleMouseRepeat = useCallback(\n (\n direction: 'left' | 'right',\n startX: number,\n deltaX = 0,\n prevTimestamp?: number\n ) => {\n const container = containerRef.current;\n if (container == null) {\n return;\n }\n\n continuousScrollRef.current.cancelClick = true;\n\n if (direction === 'left') {\n // eslint-disable-next-line no-param-reassign\n container.scrollLeft = startX - deltaX;\n } else if (direction === 'right') {\n // eslint-disable-next-line no-param-reassign\n container.scrollLeft = startX + deltaX;\n }\n\n // eslint-disable-next-line no-param-reassign\n continuousScrollRef.current.rAF = requestAnimationFrame(timestamp => {\n const startTime = prevTimestamp ?? timestamp;\n const deltaTime = timestamp - startTime;\n let newDeltaX =\n START_SPEED * deltaTime + 0.5 * ACCELERATION * deltaTime ** 2;\n newDeltaX = Math.min(newDeltaX, container.scrollWidth);\n // scrollLeft enforces a limit but no point letting delta increment beyond scrollWidth\n\n handleMouseRepeat(direction, startX, newDeltaX, startTime);\n });\n },\n []\n );\n\n const endContinuousScroll = useCallback(() => {\n const { holdTimer, rAF } = continuousScrollRef.current;\n if (holdTimer != null) {\n clearTimeout(holdTimer);\n continuousScrollRef.current.holdTimer = undefined;\n }\n if (rAF != null) {\n cancelAnimationFrame(rAF);\n continuousScrollRef.current.rAF = undefined;\n }\n window.removeEventListener('mouseup', endContinuousScroll);\n }, []);\n\n useEffect(\n () => () => window.removeEventListener('mouseup', endContinuousScroll),\n [endContinuousScroll]\n );\n\n const handleMouseDown = useCallback(\n (direction: 'left' | 'right') => {\n if (containerRef.current != null) {\n continuousScrollRef.current.holdTimer = window.setTimeout(\n handleMouseRepeat,\n CLICK_TIMEOUT,\n direction,\n containerRef.current.scrollLeft\n );\n }\n continuousScrollRef.current.cancelClick = false;\n window.addEventListener('mouseup', endContinuousScroll);\n },\n [endContinuousScroll, handleMouseRepeat]\n );\n\n const handleMouseDownLeft = useCallback(() => {\n handleMouseDown('left');\n }, [handleMouseDown]);\n\n const handleMouseDownRight = useCallback(() => {\n handleMouseDown('right');\n }, [handleMouseDown]);\n\n // React binds to the root as a passive listener for wheel\n // This prevents the wheel event from being canceled\n // Bypass React's event system so we can prevent the default behavior\n // https://github.com/facebook/react/issues/14856\n useEffect(function handleWheel() {\n const onWheel = (e: WheelEvent) => {\n e.stopPropagation();\n e.preventDefault();\n const nav = e.currentTarget as HTMLDivElement;\n const delta =\n Math.abs(e.deltaY) > Math.abs(e.deltaX) ? e.deltaY : e.deltaX;\n\n // Scrolling jumps too far sometimes, so clamp to get a smoother scroll\n nav.scrollLeft += clamp(delta, -30, 30);\n };\n\n containerRef.current?.addEventListener('wheel', onWheel);\n return () => {\n containerRef.current?.removeEventListener('wheel', onWheel);\n };\n }, []);\n\n const tabContextActionMap = useMemo(() => {\n const tabContextActions = new Map<string, ResolvableContextAction[]>();\n tabs.forEach(tab => {\n const { key } = tab;\n const contextActions = [\n () => makeBaseContextActions(tab, tabs, onClose),\n () => makeContextActions?.(tab) ?? [],\n ];\n tabContextActions.set(key, contextActions);\n });\n return tabContextActions;\n }, [makeContextActions, tabs, onClose]);\n\n const activeTabRef = useRef<HTMLDivElement>(null);\n const activeTab = tabs.find(tab => tab.key === activeKey);\n const navTabs = tabs.map((tab, index) => {\n const { key } = tab;\n const isActive = tab === activeTab;\n\n return (\n <NavTab\n tab={tab}\n key={key}\n index={index}\n isActive={isActive}\n activeRef={activeTabRef}\n onSelect={onSelect}\n onClose={onClose}\n isDraggable={onReorder != null}\n contextActions={tabContextActionMap.get(key)}\n />\n );\n });\n\n useEffect(\n // Needs to be in a useEffect so the ref is updated\n function scrollActiveTabIntoView() {\n if (activeTabRef.current != null) {\n activeTabRef.current.scrollIntoView({\n block: 'nearest',\n inline: 'nearest',\n });\n }\n },\n [activeKey]\n );\n\n const handleDashboardMenuClick = () => {\n setIsDashboardTabMenuShown(!isDashboardTabMenuShown);\n };\n\n const handleDashboardMenuSelect = (tab: NavTabItem) => {\n setIsDashboardTabMenuShown(false);\n\n onSelect(tab.key);\n };\n\n const handleDashboardMenuClose = () => {\n setIsDashboardTabMenuShown(false);\n };\n\n return (\n <nav className=\"nav-container\">\n {isOverflowing && (\n <Button\n kind=\"ghost\"\n icon={<FontAwesomeIcon icon={vsChevronLeft} transform=\"grow-4\" />}\n className=\"tab-controls-btn tab-controls-btn-left\"\n tooltip=\"Scroll left\"\n onClick={handleLeftClick}\n onMouseDown={handleMouseDownLeft}\n disabled={disableScrollLeft}\n />\n )}\n <DragDropContext\n onDragStart={DragUtils.startDragging}\n onDragEnd={onDragEnd}\n >\n <Droppable\n droppableId=\"droppable-tab-navigation\"\n direction=\"horizontal\"\n >\n {(provided, snapshot) => (\n <div\n ref={r => {\n if (r == null) {\n return;\n }\n containerRef.current = r;\n provided.innerRef(r);\n }}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.droppableProps}\n className={classNames('nav nav-tabs', {\n dragging: snapshot.draggingFromThisWith,\n })}\n role=\"tablist\"\n onScroll={handleScroll}\n >\n {navTabs}\n {provided.placeholder}\n </div>\n )}\n </Droppable>\n </DragDropContext>\n {isOverflowing && (\n <Button\n kind=\"ghost\"\n icon={<FontAwesomeIcon icon={vsChevronRight} transform=\"grow-4\" />}\n className=\"tab-controls-btn tab-controls-btn-right\"\n tooltip=\"Scroll right\"\n onClick={handleRightClick}\n onMouseDown={handleMouseDownRight}\n disabled={disableScrollRight}\n />\n )}\n <Button\n kind=\"ghost\"\n icon={<FontAwesomeIcon icon={vsChevronDown} transform=\"grow-4\" />}\n className=\"btn-dashboard-list-menu btn-show-dashboard-list\"\n tooltip=\"Search open dashboards\"\n onClick={handleDashboardMenuClick}\n disabled={tabs.length < 2}\n style={{\n visibility: isOverflowing ? 'visible' : 'hidden',\n marginLeft: 'auto',\n }}\n >\n <Popper\n isShown={isDashboardTabMenuShown}\n className=\"dashboard-list-menu-popper\"\n onExited={handleDashboardMenuClose}\n options={{\n placement: 'bottom-start',\n }}\n closeOnBlur\n interactive\n >\n <DashboardList tabs={tabs} onSelect={handleDashboardMenuSelect} />\n </Popper>\n </Button>\n <ContextActions\n actions={[\n {\n action: () => {\n setIsDashboardTabMenuShown(!isDashboardTabMenuShown);\n },\n shortcut: GLOBAL_SHORTCUTS.OPEN_DASHBOARD_LIST,\n isGlobal: true,\n },\n ]}\n />\n </nav>\n );\n}\n\nexport default NavTabList;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"NavTabList.js","names":["React","useCallback","useEffect","useMemo","useRef","useState","classNames","clamp","DragDropContext","Droppable","FontAwesomeIcon","vsChevronRight","vsChevronLeft","vsChevronDown","useResizeObserver","DragUtils","Button","NavTab","ContextActions","Popper","DashboardList","GLOBAL_SHORTCUTS","jsx","_jsx","jsxs","_jsxs","CLICK_TIMEOUT","START_SPEED","ACCELERATION","isScrolledLeft","element","scrollLeft","isScrolledRight","Math","abs","clientWidth","scrollWidth","makeBaseContextActions","tab","tabs","onClose","isClosable","key","contextActions","push","title","order","group","action","disabled","i","length","forEach","t","NavTabList","_ref","activeKey","onSelect","onReorder","makeContextActions","renderAfterTabContent","containerRef","isOverflowing","setIsOverflowing","isDashboardTabMenuShown","setIsDashboardTabMenuShown","disableScrollLeft","setDisableScrollLeft","disableScrollRight","setDisableScrollRight","handleResize","current","onDragEnd","result","stopDragging","destination","source","index","handleScroll","shouldDisableScrollLeft","shouldDisableScrollRight","continuousScrollRef","cancelClick","handleLeftClick","children","child","offsetLeft","scrollIntoView","behavior","block","inline","handleRightClick","offsetWidth","handleMouseRepeat","direction","startX","deltaX","arguments","undefined","prevTimestamp","container","rAF","requestAnimationFrame","timestamp","startTime","deltaTime","newDeltaX","min","endContinuousScroll","holdTimer","clearTimeout","cancelAnimationFrame","window","removeEventListener","handleMouseDown","setTimeout","addEventListener","handleMouseDownLeft","handleMouseDownRight","handleWheel","_containerRef$current","onWheel","e","stopPropagation","preventDefault","nav","currentTarget","delta","deltaY","_containerRef$current2","tabContextActionMap","tabContextActions","Map","_makeContextActions","set","activeTabRef","activeTab","find","navTabs","map","isActive","activeRef","isDraggable","get","scrollActiveTabIntoView","handleDashboardMenuClick","handleDashboardMenuSelect","handleDashboardMenuClose","className","kind","icon","transform","tooltip","onClick","onMouseDown","onDragStart","startDragging","droppableId","provided","snapshot","_objectSpread","ref","r","innerRef","droppableProps","dragging","draggingFromThisWith","role","onScroll","placeholder","style","visibility","marginLeft","isShown","onExited","options","placement","closeOnBlur","interactive","actions","shortcut","OPEN_DASHBOARD_LIST","isGlobal"],"sources":["../../src/navigation/NavTabList.tsx"],"sourcesContent":["import React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport classNames from 'classnames';\nimport clamp from 'lodash.clamp';\nimport {\n DragDropContext,\n Droppable,\n type OnDragEndResponder,\n} from '@hello-pangea/dnd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { type IconDefinition } from '@fortawesome/fontawesome-svg-core';\nimport { vsChevronRight, vsChevronLeft, vsChevronDown } from '@deephaven/icons';\nimport { useResizeObserver } from '@deephaven/react-hooks';\nimport DragUtils from '../DragUtils';\nimport Button from '../Button';\nimport NavTab from './NavTab';\nimport './NavTabList.scss';\nimport {\n type ContextAction,\n type ResolvableContextAction,\n ContextActions,\n} from '../context-actions';\nimport Popper from '../popper/Popper';\nimport DashboardList from './DashboardList';\nimport { GLOBAL_SHORTCUTS } from '../shortcuts';\n\n// mouse hold timeout to act as hold instead of click\nconst CLICK_TIMEOUT = 500;\n\n// mouse hold acceleration\nconst START_SPEED = 0.01;\nconst ACCELERATION = 0.0005;\n\nexport interface NavTabItem {\n /**\n * Unique key for the tab.\n */\n key: string;\n\n /**\n * Title to display on the tab.\n */\n title: string;\n\n /**\n * Icon to display on the tab.\n */\n icon?: IconDefinition | JSX.Element;\n\n /**\n * Whether the tab is closable.\n * If omitted, the tab will be closeable if onClose exists.\n */\n isClosable?: boolean;\n}\n\ntype NavTabListProps<T extends NavTabItem = NavTabItem> = {\n /**\n * The key of the active tab.\n * If this does not match a tab key, no tab will be active.\n */\n activeKey: string;\n\n /**\n * Array of tabs to display.\n * @see {@link NavTabItem} for the minimum required properties.\n */\n tabs: T[];\n\n /**\n * Function called when a tab is selected.\n *\n * @param key The key of the tab to select\n */\n onSelect: (key: string) => void;\n\n /**\n * Function called when a tab is closed.\n * If the function is provided, all tabs will be closeable by default.\n * Tabs may set their own closeable property to override this behavior.\n *\n * @param key The key of the tab to close\n */\n onClose?: (key: string) => void;\n\n /**\n * Function called when a tab is reordered.\n * If the function is omitted, the tab list will not be reorderable.\n *\n * @param sourceIndex Index in the tab list the drag started from\n * @param destinationIndex Index in the tab list the drag ended at\n */\n onReorder?: (sourceIndex: number, destinationIndex: number) => void;\n\n /**\n * Context actions to add to the tab in addition to the default actions.\n * The default actions are Close, Close to the Right, and Close All.\n * The default actions have a group value of 20.\n *\n * @param tab The tab to make context items for\n * @returns Additional context items for the tab\n */\n makeContextActions?: (tab: T) => ContextAction | ContextAction[];\n\n /**\n * Optional render function to render content after each tab's title.\n * Should be wrapped in useCallback to avoid unnecessary re-renders.\n *\n * @param tab The tab to render content for\n * @returns The content to render after the tab title\n */\n renderAfterTabContent?: (tab: T) => React.ReactNode;\n};\n\nfunction isScrolledLeft(element: HTMLElement): boolean {\n return element.scrollLeft === 0;\n}\n\nfunction isScrolledRight(element: HTMLElement): boolean {\n return (\n // single pixel buffer to account for sub-pixel rendering\n Math.abs(element.scrollLeft + element.clientWidth - element.scrollWidth) <=\n 1 || element.scrollWidth === 0\n );\n}\n\nfunction makeBaseContextActions(\n tab: NavTabItem,\n tabs: NavTabItem[],\n onClose: ((key: string) => void) | undefined\n): ContextAction[] {\n const { isClosable = false, key } = tab;\n const contextActions: ContextAction[] = [];\n if (isClosable && onClose != null) {\n contextActions.push({\n title: 'Close',\n order: 10,\n group: 20,\n action: () => {\n onClose(key);\n },\n });\n\n let disabled = true;\n for (let i = tabs.length - 1; i > 0; i -= 1) {\n if (tabs[i].key === tab.key) break;\n if (tabs[i].isClosable === true) {\n disabled = false;\n break;\n }\n }\n\n contextActions.push({\n title: 'Close to the Right',\n order: 20,\n group: 20,\n action: () => {\n for (let i = tabs.length - 1; i > 0; i -= 1) {\n if (tabs[i].key === key) break;\n if (tabs[i].isClosable === true) onClose(tabs[i].key);\n }\n },\n disabled,\n });\n\n contextActions.push({\n title: 'Close All',\n order: 30,\n group: 20,\n action: () => {\n tabs.forEach(t => {\n if (t.isClosable === true) onClose(t.key);\n });\n },\n });\n }\n\n return contextActions;\n}\n\nfunction NavTabList({\n activeKey,\n tabs,\n onSelect,\n onReorder,\n onClose,\n makeContextActions,\n renderAfterTabContent,\n}: NavTabListProps): React.ReactElement {\n const containerRef = useRef<HTMLDivElement>();\n const [isOverflowing, setIsOverflowing] = useState(true);\n const [isDashboardTabMenuShown, setIsDashboardTabMenuShown] = useState(false);\n const [disableScrollLeft, setDisableScrollLeft] = useState(true);\n const [disableScrollRight, setDisableScrollRight] = useState(true);\n\n const handleResize = useCallback(() => {\n if (containerRef.current == null) {\n return;\n }\n\n if (\n containerRef.current.clientWidth < containerRef.current.scrollWidth &&\n tabs.length > 0\n ) {\n setIsOverflowing(true);\n } else {\n setIsOverflowing(false);\n }\n\n setDisableScrollLeft(isScrolledLeft(containerRef.current));\n setDisableScrollRight(isScrolledRight(containerRef.current));\n }, [tabs]);\n useResizeObserver(containerRef.current, handleResize);\n\n const onDragEnd: OnDragEndResponder = useCallback(\n result => {\n DragUtils.stopDragging();\n\n // dropped outside the list\n if (!result.destination) {\n return;\n }\n\n onReorder?.(result.source.index, result.destination.index);\n },\n [onReorder]\n );\n\n const handleScroll = useCallback(() => {\n if (containerRef.current == null) {\n return;\n }\n\n const shouldDisableScrollLeft = isScrolledLeft(containerRef.current);\n if (shouldDisableScrollLeft !== disableScrollLeft) {\n setDisableScrollLeft(shouldDisableScrollLeft);\n }\n\n const shouldDisableScrollRight = isScrolledRight(containerRef.current);\n if (shouldDisableScrollRight !== disableScrollRight) {\n setDisableScrollRight(shouldDisableScrollRight);\n }\n }, [disableScrollLeft, disableScrollRight]);\n\n const continuousScrollRef = useRef<{\n holdTimer?: number;\n rAF?: number;\n cancelClick: boolean;\n }>({ cancelClick: false });\n\n const handleLeftClick = useCallback(() => {\n if (\n containerRef.current == null ||\n continuousScrollRef.current.cancelClick\n ) {\n return;\n }\n\n const { children } = containerRef.current;\n for (let i = children.length - 1; i >= 0; i -= 1) {\n const child = children[i] as HTMLElement;\n // Subtract 5px from left edge to account for rounding of offset values\n if (child.offsetLeft < containerRef.current.scrollLeft - 5) {\n child.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'start',\n });\n return;\n }\n }\n }, []);\n\n const handleRightClick = useCallback(() => {\n if (\n containerRef.current == null ||\n continuousScrollRef.current.cancelClick\n ) {\n return;\n }\n\n const { children } = containerRef.current;\n for (let i = 0; i < children.length; i += 1) {\n const child = children[i] as HTMLElement;\n // Subtract 5px from right edge to account for rounding of offset values\n if (\n child.offsetLeft + child.offsetWidth - 5 >\n containerRef.current.scrollLeft + containerRef.current.offsetWidth\n ) {\n child.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'end',\n });\n return;\n }\n }\n }, []);\n\n /**\n * Recurively called after initial timeout on mousedown. Continuously scroll with acceleration.\n * Cancelled by mouseup handler cancelling the animationFrame.\n * @param direction of scroll, left or right\n * @param startX starting position of scroll\n * @param deltaX delta from intial startX calculated recursively\n * @param prevTimestamp called on subsequent delta frames\n */\n const handleMouseRepeat = useCallback(\n (\n direction: 'left' | 'right',\n startX: number,\n deltaX = 0,\n prevTimestamp?: number\n ) => {\n const container = containerRef.current;\n if (container == null) {\n return;\n }\n\n continuousScrollRef.current.cancelClick = true;\n\n if (direction === 'left') {\n // eslint-disable-next-line no-param-reassign\n container.scrollLeft = startX - deltaX;\n } else if (direction === 'right') {\n // eslint-disable-next-line no-param-reassign\n container.scrollLeft = startX + deltaX;\n }\n\n // eslint-disable-next-line no-param-reassign\n continuousScrollRef.current.rAF = requestAnimationFrame(timestamp => {\n const startTime = prevTimestamp ?? timestamp;\n const deltaTime = timestamp - startTime;\n let newDeltaX =\n START_SPEED * deltaTime + 0.5 * ACCELERATION * deltaTime ** 2;\n newDeltaX = Math.min(newDeltaX, container.scrollWidth);\n // scrollLeft enforces a limit but no point letting delta increment beyond scrollWidth\n\n handleMouseRepeat(direction, startX, newDeltaX, startTime);\n });\n },\n []\n );\n\n const endContinuousScroll = useCallback(() => {\n const { holdTimer, rAF } = continuousScrollRef.current;\n if (holdTimer != null) {\n clearTimeout(holdTimer);\n continuousScrollRef.current.holdTimer = undefined;\n }\n if (rAF != null) {\n cancelAnimationFrame(rAF);\n continuousScrollRef.current.rAF = undefined;\n }\n window.removeEventListener('mouseup', endContinuousScroll);\n }, []);\n\n useEffect(\n () => () => window.removeEventListener('mouseup', endContinuousScroll),\n [endContinuousScroll]\n );\n\n const handleMouseDown = useCallback(\n (direction: 'left' | 'right') => {\n if (containerRef.current != null) {\n continuousScrollRef.current.holdTimer = window.setTimeout(\n handleMouseRepeat,\n CLICK_TIMEOUT,\n direction,\n containerRef.current.scrollLeft\n );\n }\n continuousScrollRef.current.cancelClick = false;\n window.addEventListener('mouseup', endContinuousScroll);\n },\n [endContinuousScroll, handleMouseRepeat]\n );\n\n const handleMouseDownLeft = useCallback(() => {\n handleMouseDown('left');\n }, [handleMouseDown]);\n\n const handleMouseDownRight = useCallback(() => {\n handleMouseDown('right');\n }, [handleMouseDown]);\n\n // React binds to the root as a passive listener for wheel\n // This prevents the wheel event from being canceled\n // Bypass React's event system so we can prevent the default behavior\n // https://github.com/facebook/react/issues/14856\n useEffect(function handleWheel() {\n const onWheel = (e: WheelEvent) => {\n e.stopPropagation();\n e.preventDefault();\n const nav = e.currentTarget as HTMLDivElement;\n const delta =\n Math.abs(e.deltaY) > Math.abs(e.deltaX) ? e.deltaY : e.deltaX;\n\n // Scrolling jumps too far sometimes, so clamp to get a smoother scroll\n nav.scrollLeft += clamp(delta, -30, 30);\n };\n\n containerRef.current?.addEventListener('wheel', onWheel);\n return () => {\n containerRef.current?.removeEventListener('wheel', onWheel);\n };\n }, []);\n\n const tabContextActionMap = useMemo(() => {\n const tabContextActions = new Map<string, ResolvableContextAction[]>();\n tabs.forEach(tab => {\n const { key } = tab;\n const contextActions = [\n () => makeBaseContextActions(tab, tabs, onClose),\n () => makeContextActions?.(tab) ?? [],\n ];\n tabContextActions.set(key, contextActions);\n });\n return tabContextActions;\n }, [makeContextActions, tabs, onClose]);\n\n const activeTabRef = useRef<HTMLDivElement>(null);\n const activeTab = tabs.find(tab => tab.key === activeKey);\n const navTabs = tabs.map((tab, index) => {\n const { key } = tab;\n const isActive = tab === activeTab;\n\n return (\n <NavTab\n tab={tab}\n key={key}\n index={index}\n isActive={isActive}\n activeRef={activeTabRef}\n onSelect={onSelect}\n onClose={onClose}\n isDraggable={onReorder != null}\n contextActions={tabContextActionMap.get(key)}\n renderAfterTabContent={renderAfterTabContent}\n />\n );\n });\n\n useEffect(\n // Needs to be in a useEffect so the ref is updated\n function scrollActiveTabIntoView() {\n if (activeTabRef.current != null) {\n activeTabRef.current.scrollIntoView({\n block: 'nearest',\n inline: 'nearest',\n });\n }\n },\n [activeKey]\n );\n\n const handleDashboardMenuClick = () => {\n setIsDashboardTabMenuShown(!isDashboardTabMenuShown);\n };\n\n const handleDashboardMenuSelect = (tab: NavTabItem) => {\n setIsDashboardTabMenuShown(false);\n\n onSelect(tab.key);\n };\n\n const handleDashboardMenuClose = () => {\n setIsDashboardTabMenuShown(false);\n };\n\n return (\n <nav className=\"nav-container\">\n {isOverflowing && (\n <Button\n kind=\"ghost\"\n icon={<FontAwesomeIcon icon={vsChevronLeft} transform=\"grow-4\" />}\n className=\"tab-controls-btn tab-controls-btn-left\"\n tooltip=\"Scroll left\"\n onClick={handleLeftClick}\n onMouseDown={handleMouseDownLeft}\n disabled={disableScrollLeft}\n />\n )}\n <DragDropContext\n onDragStart={DragUtils.startDragging}\n onDragEnd={onDragEnd}\n >\n <Droppable\n droppableId=\"droppable-tab-navigation\"\n direction=\"horizontal\"\n >\n {(provided, snapshot) => (\n <div\n ref={r => {\n if (r == null) {\n return;\n }\n containerRef.current = r;\n provided.innerRef(r);\n }}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.droppableProps}\n className={classNames('nav nav-tabs', {\n dragging: snapshot.draggingFromThisWith,\n })}\n role=\"tablist\"\n onScroll={handleScroll}\n >\n {navTabs}\n {provided.placeholder}\n </div>\n )}\n </Droppable>\n </DragDropContext>\n {isOverflowing && (\n <Button\n kind=\"ghost\"\n icon={<FontAwesomeIcon icon={vsChevronRight} transform=\"grow-4\" />}\n className=\"tab-controls-btn tab-controls-btn-right\"\n tooltip=\"Scroll right\"\n onClick={handleRightClick}\n onMouseDown={handleMouseDownRight}\n disabled={disableScrollRight}\n />\n )}\n <Button\n kind=\"ghost\"\n icon={<FontAwesomeIcon icon={vsChevronDown} transform=\"grow-4\" />}\n className=\"btn-dashboard-list-menu btn-show-dashboard-list\"\n tooltip=\"Search open dashboards\"\n onClick={handleDashboardMenuClick}\n disabled={tabs.length < 2}\n style={{\n visibility: isOverflowing ? 'visible' : 'hidden',\n marginLeft: 'auto',\n }}\n >\n <Popper\n isShown={isDashboardTabMenuShown}\n className=\"dashboard-list-menu-popper\"\n onExited={handleDashboardMenuClose}\n options={{\n placement: 'bottom-start',\n }}\n closeOnBlur\n interactive\n >\n <DashboardList tabs={tabs} onSelect={handleDashboardMenuSelect} />\n </Popper>\n </Button>\n <ContextActions\n actions={[\n {\n action: () => {\n setIsDashboardTabMenuShown(!isDashboardTabMenuShown);\n },\n shortcut: GLOBAL_SHORTCUTS.OPEN_DASHBOARD_LIST,\n isGlobal: true,\n },\n ]}\n />\n </nav>\n );\n}\n\nexport default NavTabList;\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deephaven/components",
|
|
3
|
-
"version": "1.9.
|
|
3
|
+
"version": "1.9.1-beta.1+2d5f9301",
|
|
4
4
|
"description": "Deephaven React component library",
|
|
5
5
|
"author": "Deephaven Data Labs LLC",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -25,10 +25,10 @@
|
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
27
|
"@adobe/react-spectrum": "3.38.0",
|
|
28
|
-
"@deephaven/icons": "^1.
|
|
29
|
-
"@deephaven/log": "^1.
|
|
30
|
-
"@deephaven/react-hooks": "^1.
|
|
31
|
-
"@deephaven/utils": "^1.
|
|
28
|
+
"@deephaven/icons": "^1.9.1-beta.1+2d5f9301",
|
|
29
|
+
"@deephaven/log": "^1.9.1-beta.1+2d5f9301",
|
|
30
|
+
"@deephaven/react-hooks": "^1.9.1-beta.1+2d5f9301",
|
|
31
|
+
"@deephaven/utils": "^1.9.1-beta.1+2d5f9301",
|
|
32
32
|
"@fontsource/fira-mono": "5.0.13",
|
|
33
33
|
"@fontsource/fira-sans": "5.0.20",
|
|
34
34
|
"@fortawesome/fontawesome-svg-core": "^6.2.1",
|
|
@@ -62,8 +62,8 @@
|
|
|
62
62
|
"react-is": ">=16.8.0"
|
|
63
63
|
},
|
|
64
64
|
"devDependencies": {
|
|
65
|
-
"@deephaven/mocks": "^1.1.
|
|
66
|
-
"@deephaven/test-utils": "^1.
|
|
65
|
+
"@deephaven/mocks": "^1.9.1-beta.1+2d5f9301",
|
|
66
|
+
"@deephaven/test-utils": "^1.9.1-beta.1+2d5f9301",
|
|
67
67
|
"react-redux": "^7.2.7"
|
|
68
68
|
},
|
|
69
69
|
"files": [
|
|
@@ -78,5 +78,5 @@
|
|
|
78
78
|
"publishConfig": {
|
|
79
79
|
"access": "public"
|
|
80
80
|
},
|
|
81
|
-
"gitHead": "
|
|
81
|
+
"gitHead": "2d5f9301153fb92641fe610d4c9791c99395c5e0"
|
|
82
82
|
}
|