@deephaven/file-explorer 0.22.3-deep-bot-test.14 → 0.23.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/FileExistsError.js +0 -7
- package/dist/FileExistsError.js.map +1 -1
- package/dist/FileExplorer.d.ts +4 -4
- package/dist/FileExplorer.d.ts.map +1 -1
- package/dist/FileExplorer.js +4 -19
- package/dist/FileExplorer.js.map +1 -1
- package/dist/FileExplorerShortcuts.js.map +1 -1
- package/dist/FileExplorerToolbar.d.ts +2 -2
- package/dist/FileExplorerToolbar.d.ts.map +1 -1
- package/dist/FileExplorerToolbar.js +2 -2
- package/dist/FileExplorerToolbar.js.map +1 -1
- package/dist/FileList.d.ts +4 -4
- package/dist/FileList.d.ts.map +1 -1
- package/dist/FileList.js +18 -56
- package/dist/FileList.js.map +1 -1
- package/dist/FileListContainer.d.ts +4 -4
- package/dist/FileListContainer.d.ts.map +1 -1
- package/dist/FileListContainer.js +2 -16
- package/dist/FileListContainer.js.map +1 -1
- package/dist/FileListItemEditor.d.ts +1 -1
- package/dist/FileListItemEditor.d.ts.map +1 -1
- package/dist/FileListItemEditor.js +4 -7
- package/dist/FileListItemEditor.js.map +1 -1
- package/dist/FileNotFoundError.js +0 -4
- package/dist/FileNotFoundError.js.map +1 -1
- package/dist/FileStorage.d.ts +1 -1
- package/dist/FileStorage.d.ts.map +1 -1
- package/dist/FileStorage.js +2 -0
- package/dist/FileStorage.js.map +1 -1
- package/dist/FileUtils.d.ts.map +1 -1
- package/dist/FileUtils.js +23 -65
- package/dist/FileUtils.js.map +1 -1
- package/dist/NewItemModal.d.ts +3 -3
- package/dist/NewItemModal.d.ts.map +1 -1
- package/dist/NewItemModal.js +5 -65
- package/dist/NewItemModal.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +8 -8
package/dist/FileList.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileList.js","names":["ItemList","Tooltip","dhPython","vsCode","vsFolder","vsFolderOpened","Log","RangeUtils","FontAwesomeIcon","classNames","React","useCallback","useEffect","useMemo","useRef","useState","isDirectory","FileUtils","MIME_TYPE","log","module","getPathFromItem","file","makePath","filename","getPath","DEFAULT_ROW_HEIGHT","DRAG_HOVER_TIMEOUT","ITEM_LIST_CLASS_NAME","renderFileListItem","props","children","draggedItems","isDragInProgress","isDropTargetValid","isSelected","item","itemIndex","dropTargetItem","onDragStart","onDragOver","onDragEnd","onDrop","isDragged","some","draggedItem","id","itemPath","dropTargetPath","isExactDropTarget","isInDropTarget","isInvalidDropTarget","icon","getItemIcon","depth","getDepth","depthLines","Array","fill","map","value","index","e","basename","modifiers","preventOverflow","boundariesElement","placement","isExpanded","mimeType","getMimeType","PYTHON","getMoveOperation","targetItem","length","Error","targetPath","startsWith","files","FileList","isMultiSelect","table","onFocusChange","undefined","onMove","onSelect","onSelectionChange","renderItem","rowHeight","overscanCount","DEFAULT_OVERSCAN","loadedViewport","setLoadedViewport","items","offset","itemCount","viewport","setViewport","top","bottom","setDropTargetItem","setDraggedItems","dragPlaceholder","setDragPlaceholder","selectedRanges","setSelectedRanges","itemList","fileList","getItems","ranges","i","range","j","push","getItem","getDragPlaceholderText","count","dropItems","debug","current","focusItem","err","error","handleSelect","event","setExpanded","handleItemDragStart","debug2","draggedRanges","resetMouseState","newDragPlaceholder","document","createElement","innerHTML","className","body","appendChild","dataTransfer","setDragImage","effectAllowed","handleItemDragOver","preventDefault","handleItemDragEnd","remove","handleItemDrop","handleItemDragExit","handleListDragOver","target","Element","classList","contains","type","handleListDrop","handleSelectionChange","newSelectedRanges","selectedItems","handleFocusChange","focusIndex","focusedItem","handleViewportChange","focusedPath","collapseAll","updateTableViewport","Math","max","setLoadedViewportAndReturnCleanup","listenerRemover","onUpdate","newViewport","itemName","size","expandFolderOnHover","timeout","setTimeout","clearTimeout","renderWrapper","itemProps","onDragExit"],"sources":["../src/FileList.tsx"],"sourcesContent":["import {\n ItemList,\n Range,\n RenderItemProps,\n Tooltip,\n} from '@deephaven/components';\nimport { dhPython, vsCode, vsFolder, vsFolderOpened } from '@deephaven/icons';\nimport Log from '@deephaven/log';\nimport { RangeUtils } from '@deephaven/utils';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { IconDefinition } from '@fortawesome/fontawesome-svg-core';\nimport classNames from 'classnames';\nimport React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { FileStorageItem, FileStorageTable, isDirectory } from './FileStorage';\nimport './FileList.scss';\nimport FileUtils, { MIME_TYPE } from './FileUtils';\n\nconst log = Log.module('FileList');\n\nexport type LoadedViewport = {\n items: FileStorageItem[];\n offset: number;\n itemCount: number;\n};\n\nexport type ListViewport = {\n top: number;\n bottom: number;\n};\n\nexport type FileListRenderItemProps = RenderItemProps<FileStorageItem> & {\n children?: JSX.Element;\n dropTargetItem?: FileStorageItem;\n draggedItems?: FileStorageItem[];\n isDragInProgress: boolean;\n isDropTargetValid: boolean;\n\n onDragStart(index: number, e: React.DragEvent<HTMLDivElement>): void;\n onDragOver(index: number, e: React.DragEvent<HTMLDivElement>): void;\n onDragEnd(index: number, e: React.DragEvent<HTMLDivElement>): void;\n onDrop(index: number, e: React.DragEvent<HTMLDivElement>): void;\n};\n\nexport interface FileListProps {\n table: FileStorageTable;\n\n isMultiSelect?: boolean;\n focusedPath?: string;\n\n onFocusChange?: (focusedItem?: FileStorageItem) => void;\n onMove: (files: FileStorageItem[], path: string) => void;\n onSelect: (file: FileStorageItem, event: React.SyntheticEvent) => void;\n onSelectionChange?: (selectedItems: FileStorageItem[]) => void;\n\n renderItem?: (props: FileListRenderItemProps) => JSX.Element;\n\n /** Height of each item in the list */\n rowHeight?: number;\n\n overscanCount?: number;\n}\n\nexport const getPathFromItem = (file: FileStorageItem): string =>\n isDirectory(file)\n ? FileUtils.makePath(file.filename)\n : FileUtils.getPath(file.filename);\n\nexport const DEFAULT_ROW_HEIGHT = 26;\n\n// How long you need to hover over a directory before it expands\nexport const DRAG_HOVER_TIMEOUT = 500;\n\nconst ITEM_LIST_CLASS_NAME = 'item-list-scroll-pane';\n\nexport const renderFileListItem = (\n props: FileListRenderItemProps\n): JSX.Element => {\n const {\n children,\n draggedItems,\n isDragInProgress,\n isDropTargetValid,\n isSelected,\n item,\n itemIndex,\n dropTargetItem,\n onDragStart,\n onDragOver,\n onDragEnd,\n onDrop,\n } = props;\n\n const isDragged =\n draggedItems?.some(draggedItem => draggedItem.id === item.id) ?? false;\n const itemPath = getPathFromItem(item);\n const dropTargetPath =\n isDragInProgress && dropTargetItem ? getPathFromItem(dropTargetItem) : null;\n\n const isExactDropTarget =\n isDragInProgress &&\n isDropTargetValid &&\n isDirectory(item) &&\n dropTargetPath === itemPath;\n const isInDropTarget =\n isDragInProgress && isDropTargetValid && dropTargetPath === itemPath;\n const isInvalidDropTarget =\n isDragInProgress && !isDropTargetValid && dropTargetPath === itemPath;\n\n const icon = getItemIcon(item);\n const depth = FileUtils.getDepth(item.filename);\n const depthLines = Array(depth)\n .fill(null)\n .map((value, index) => (\n // eslint-disable-next-line react/no-array-index-key\n <span className=\"file-list-depth-line\" key={index} />\n ));\n\n return (\n <div\n className={classNames(\n 'd-flex w-100 align-items-center',\n 'file-list-item',\n {\n 'is-dragged': isDragged,\n 'is-exact-drop-target': isExactDropTarget,\n 'is-in-drop-target': isInDropTarget,\n 'is-invalid-drop-target': isInvalidDropTarget,\n 'is-selected': isSelected,\n }\n )}\n onDragStart={e => onDragStart(itemIndex, e)}\n onDragOver={e => onDragOver(itemIndex, e)}\n onDragEnd={e => onDragEnd(itemIndex, e)}\n onDrop={e => onDrop(itemIndex, e)}\n draggable\n role=\"presentation\"\n aria-label={item.basename}\n >\n {depthLines}{' '}\n <FontAwesomeIcon icon={icon} className=\"item-icon\" fixedWidth />{' '}\n <span className=\"truncation-wrapper\">\n {children ?? item.basename}\n <Tooltip\n options={{\n modifiers: { preventOverflow: { boundariesElement: 'window' } },\n placement: 'left',\n }}\n >\n {children ?? item.basename}\n </Tooltip>\n </span>\n </div>\n );\n};\n\n/**\n * Get the icon definition for a file or folder item\n * @param item Item to get the icon for\n * @returns Icon definition to pass in the FontAwesomeIcon icon prop\n */\nexport function getItemIcon(item: FileStorageItem): IconDefinition {\n if (isDirectory(item)) {\n return item.isExpanded ? vsFolderOpened : vsFolder;\n }\n const mimeType = FileUtils.getMimeType(item.basename);\n switch (mimeType) {\n case MIME_TYPE.PYTHON:\n return dhPython;\n default:\n return vsCode;\n }\n}\n\n/**\n * Get the move operation for the current selection and the given target. Throws if the operation is invalid.\n */\nexport function getMoveOperation(\n draggedItems: FileStorageItem[],\n targetItem: FileStorageItem\n): { files: FileStorageItem[]; targetPath: string } {\n if (draggedItems.length === 0 || targetItem == null) {\n throw new Error('No items to move');\n }\n\n const targetPath = getPathFromItem(targetItem);\n if (\n draggedItems.some(\n ({ filename }) => FileUtils.getPath(filename) === targetPath\n )\n ) {\n // Cannot drop if target is one of the dragged items is already in the target folder\n throw new Error('File already in the destination folder');\n }\n if (\n draggedItems.some(\n item =>\n isDirectory(item) &&\n targetPath.startsWith(FileUtils.makePath(item.filename))\n )\n ) {\n // Cannot drop if target is a child of one of the directories being moved\n throw new Error('Destination folder cannot be a child of a dragged folder');\n }\n return { files: draggedItems, targetPath };\n}\n\n/**\n * Component that displays and allows interaction with the file system in the provided FileStorageTable.\n */\nexport const FileList = (props: FileListProps): JSX.Element => {\n const {\n isMultiSelect = false,\n table,\n onFocusChange = () => undefined,\n onMove,\n onSelect,\n onSelectionChange = () => undefined,\n renderItem = renderFileListItem,\n rowHeight = DEFAULT_ROW_HEIGHT,\n overscanCount = ItemList.DEFAULT_OVERSCAN,\n } = props;\n const [loadedViewport, setLoadedViewport] = useState<LoadedViewport>(() => ({\n items: [],\n offset: 0,\n itemCount: 0,\n }));\n const [viewport, setViewport] = useState<ListViewport>({\n top: 0,\n bottom: 0,\n });\n\n const [dropTargetItem, setDropTargetItem] = useState<FileStorageItem>();\n const [draggedItems, setDraggedItems] = useState<FileStorageItem[]>();\n const [dragPlaceholder, setDragPlaceholder] = useState<HTMLDivElement>();\n const [selectedRanges, setSelectedRanges] = useState([] as Range[]);\n\n const itemList = useRef<ItemList<FileStorageItem>>(null);\n const fileList = useRef<HTMLDivElement>(null);\n\n const getItems = useCallback(\n (ranges: Range[]): FileStorageItem[] => {\n if (ranges.length === 0 || loadedViewport == null) {\n return [];\n }\n\n const items = [] as FileStorageItem[];\n for (let i = 0; i < ranges.length; i += 1) {\n const range = ranges[i];\n for (let j = range[0]; j <= range[1]; j += 1) {\n if (\n j >= loadedViewport.offset &&\n j < loadedViewport.offset + loadedViewport.items.length\n ) {\n items.push(loadedViewport.items[j - loadedViewport.offset]);\n }\n }\n }\n return items;\n },\n [loadedViewport]\n );\n\n const getItem = useCallback(\n (itemIndex: number): FileStorageItem | undefined => {\n const items = getItems([[itemIndex, itemIndex]]);\n if (items.length > 0) {\n return items[0];\n }\n },\n [getItems]\n );\n\n /**\n * Get the placeholder text to show when a drag operation is in progress\n */\n const getDragPlaceholderText = useCallback(() => {\n const count = RangeUtils.count(selectedRanges);\n if (count === 0) {\n return null;\n }\n\n if (count === 1) {\n const index = selectedRanges[0][0];\n const item = getItem(index);\n if (item != null) {\n return item.filename;\n }\n }\n return `${count} items`;\n }, [getItem, selectedRanges]);\n\n /**\n * Drop the currently dragged items at the currently set drop target.\n * If an itemIndex is provided, focus that index after the drop.\n */\n const dropItems = useCallback(\n (itemIndex?: number) => {\n if (!draggedItems || !dropTargetItem) {\n return;\n }\n\n log.debug('dropItems', draggedItems, 'to', itemIndex);\n\n try {\n const { files, targetPath } = getMoveOperation(\n draggedItems,\n dropTargetItem\n );\n onMove(files, targetPath);\n if (itemIndex != null) {\n setSelectedRanges([[itemIndex, itemIndex]]);\n itemList.current?.focusItem(itemIndex);\n }\n } catch (err) {\n log.error('Unable to complete move', err);\n }\n },\n [draggedItems, dropTargetItem, onMove]\n );\n\n const handleSelect = useCallback(\n (itemIndex: number, event: React.SyntheticEvent) => {\n const item = loadedViewport.items[itemIndex - loadedViewport.offset];\n if (item !== undefined) {\n log.debug('handleItemClick', item);\n\n onSelect(item, event);\n if (isDirectory(item)) {\n table?.setExpanded(item.filename, !item.isExpanded);\n }\n }\n },\n [loadedViewport, onSelect, table]\n );\n\n const handleItemDragStart = useCallback(\n (itemIndex: number, e: React.DragEvent<HTMLDivElement>) => {\n log.debug2('handleItemDragStart', itemIndex, selectedRanges);\n\n let draggedRanges = selectedRanges;\n if (!RangeUtils.isSelected(selectedRanges, itemIndex)) {\n draggedRanges = [[itemIndex, itemIndex]];\n setSelectedRanges(draggedRanges);\n }\n\n setDraggedItems(getItems(draggedRanges));\n\n // We need to reset reset the mouse state since we steal the drag\n itemList.current?.resetMouseState();\n\n const newDragPlaceholder = document.createElement('div');\n newDragPlaceholder.innerHTML = `<div class=\"dnd-placeholder-content\">${getDragPlaceholderText()}</div>`;\n newDragPlaceholder.className = 'file-list-dnd-placeholder';\n document.body.appendChild(newDragPlaceholder);\n e.dataTransfer.setDragImage(newDragPlaceholder, 0, 0);\n e.dataTransfer.effectAllowed = 'move';\n setDragPlaceholder(newDragPlaceholder);\n },\n [getDragPlaceholderText, getItems, selectedRanges]\n );\n\n const handleItemDragOver = useCallback(\n (itemIndex: number, e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n\n log.debug2('handleItemDragOver', e);\n setDropTargetItem(getItem(itemIndex));\n },\n [getItem]\n );\n\n const handleItemDragEnd = useCallback(\n (itemIndex: number, e: React.DragEvent<HTMLDivElement>) => {\n log.debug('handleItemDragEnd', itemIndex);\n\n dragPlaceholder?.remove();\n\n // Drag end is triggered after drop\n // Also drop isn't triggered if drag end is outside of the list\n setDraggedItems(undefined);\n setDropTargetItem(undefined);\n setDragPlaceholder(undefined);\n },\n [dragPlaceholder]\n );\n\n const handleItemDrop = useCallback(\n (itemIndex: number, e: React.DragEvent<HTMLDivElement>) => {\n dropItems(itemIndex);\n },\n [dropItems]\n );\n\n const handleItemDragExit = useCallback(() => {\n log.debug2('handleItemDragExit');\n setDropTargetItem(undefined);\n }, []);\n\n const handleListDragOver = useCallback(\n (e: React.DragEvent<HTMLDivElement>) => {\n if (\n e.target instanceof Element &&\n e.target.classList.contains(ITEM_LIST_CLASS_NAME)\n ) {\n // Need to prevent default to enable drop\n // https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API/Drag_operations#droptargets\n e.preventDefault();\n\n log.debug2('handleListDragOver', e);\n setDropTargetItem({\n type: 'directory',\n filename: '/',\n basename: '/',\n id: '/',\n });\n }\n },\n []\n );\n\n const handleListDrop = useCallback(\n (e: React.DragEvent<HTMLDivElement>) => {\n if (\n e.target instanceof Element &&\n e.target.classList.contains(ITEM_LIST_CLASS_NAME)\n ) {\n log.debug('handleListDrop');\n dropItems();\n }\n },\n [dropItems]\n );\n\n const handleSelectionChange = useCallback(\n newSelectedRanges => {\n log.debug2('handleSelectionChange', newSelectedRanges);\n if (newSelectedRanges !== selectedRanges) {\n setSelectedRanges(newSelectedRanges);\n const selectedItems = getItems(newSelectedRanges);\n onSelectionChange(selectedItems);\n }\n },\n [getItems, onSelectionChange, selectedRanges]\n );\n\n const handleFocusChange = useCallback(\n focusIndex => {\n log.debug2('handleFocusChange', focusIndex);\n if (focusIndex != null) {\n const [focusedItem] = getItems([[focusIndex, focusIndex]]);\n onFocusChange(focusedItem);\n } else {\n onFocusChange();\n }\n },\n [getItems, onFocusChange]\n );\n\n const handleViewportChange = useCallback(\n (top: number, bottom: number) => {\n log.debug('handleViewportChange', top, bottom);\n if (top !== viewport.top || bottom !== viewport.bottom) {\n setViewport({ top, bottom });\n }\n },\n [viewport]\n );\n\n const isDropTargetValid = useMemo(() => {\n if (!draggedItems || !dropTargetItem) {\n return false;\n }\n\n try {\n getMoveOperation(draggedItems, dropTargetItem);\n log.debug('handleValidateDropTarget true');\n return true;\n } catch (e) {\n log.debug('handleValidateDropTarget false');\n return false;\n }\n }, [draggedItems, dropTargetItem]);\n\n const { focusedPath } = props;\n useEffect(() => {\n if (focusedPath !== undefined) {\n if (focusedPath === '/') {\n table.collapseAll();\n } else {\n table.setExpanded(focusedPath, false);\n table.setExpanded(focusedPath, true);\n }\n }\n }, [table, focusedPath]);\n\n useEffect(\n function updateTableViewport() {\n log.debug('updating table viewport', viewport);\n table?.setViewport({\n top: Math.max(0, viewport.top - overscanCount),\n bottom: viewport.bottom + overscanCount,\n });\n },\n [overscanCount, table, viewport]\n );\n\n // Listen for table updates\n useEffect(\n function setLoadedViewportAndReturnCleanup() {\n const listenerRemover = table.onUpdate(newViewport => {\n setLoadedViewport({\n items: newViewport.items.map(item => ({\n ...item,\n itemName: item.basename,\n })),\n offset: newViewport.offset,\n itemCount: table.size,\n });\n });\n return () => {\n listenerRemover();\n };\n },\n [table]\n );\n\n // Expand a folder if hovering over it\n useEffect(\n function expandFolderOnHover() {\n if (\n dropTargetItem != null &&\n isDirectory(dropTargetItem) &&\n dropTargetItem.filename !== '/'\n ) {\n const timeout = setTimeout(() => {\n if (!dropTargetItem.isExpanded) {\n table?.setExpanded(dropTargetItem.filename, true);\n }\n }, DRAG_HOVER_TIMEOUT);\n return () => clearTimeout(timeout);\n }\n },\n [dropTargetItem, table]\n );\n\n const renderWrapper = useCallback(\n itemProps =>\n renderItem({\n ...itemProps,\n isDragInProgress: draggedItems != null,\n dropTargetItem,\n draggedItems,\n isDropTargetValid,\n onDragStart: handleItemDragStart,\n onDragEnd: handleItemDragEnd,\n onDragOver: handleItemDragOver,\n onDragExit: handleItemDragExit,\n onDrop: handleItemDrop,\n }),\n [\n handleItemDragEnd,\n handleItemDragExit,\n handleItemDragOver,\n handleItemDragStart,\n handleItemDrop,\n draggedItems,\n dropTargetItem,\n isDropTargetValid,\n renderItem,\n ]\n );\n\n return (\n <div\n ref={fileList}\n className={classNames('file-list', {\n 'is-dragging': draggedItems != null,\n })}\n onDragOver={handleListDragOver}\n onDrop={handleListDrop}\n >\n <ItemList\n ref={itemList}\n items={loadedViewport.items}\n itemCount={loadedViewport.itemCount}\n offset={loadedViewport.offset}\n onFocusChange={handleFocusChange}\n onSelect={handleSelect}\n onSelectionChange={handleSelectionChange}\n onViewportChange={handleViewportChange}\n selectedRanges={selectedRanges}\n renderItem={renderWrapper}\n rowHeight={rowHeight}\n isMultiSelect={isMultiSelect}\n isDragSelect={false}\n isDeselectOnClick={false}\n />\n </div>\n );\n};\n\nexport default FileList;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FileList.js","names":["ItemList","Tooltip","dhPython","vsCode","vsFolder","vsFolderOpened","Log","RangeUtils","FontAwesomeIcon","classNames","React","useCallback","useEffect","useMemo","useRef","useState","isDirectory","FileUtils","MIME_TYPE","log","module","getPathFromItem","file","makePath","filename","getPath","DEFAULT_ROW_HEIGHT","DRAG_HOVER_TIMEOUT","ITEM_LIST_CLASS_NAME","renderFileListItem","props","children","draggedItems","isDragInProgress","isDropTargetValid","isSelected","item","itemIndex","dropTargetItem","onDragStart","onDragOver","onDragEnd","onDrop","isDragged","some","draggedItem","id","itemPath","dropTargetPath","isExactDropTarget","isInDropTarget","isInvalidDropTarget","icon","getItemIcon","depth","getDepth","depthLines","Array","fill","map","value","index","e","basename","modifiers","preventOverflow","boundariesElement","placement","isExpanded","mimeType","getMimeType","PYTHON","getMoveOperation","targetItem","length","Error","targetPath","startsWith","files","FileList","isMultiSelect","table","onFocusChange","undefined","onMove","onSelect","onSelectionChange","renderItem","rowHeight","overscanCount","DEFAULT_OVERSCAN","loadedViewport","setLoadedViewport","items","offset","itemCount","viewport","setViewport","top","bottom","setDropTargetItem","setDraggedItems","dragPlaceholder","setDragPlaceholder","selectedRanges","setSelectedRanges","itemList","fileList","getItems","ranges","i","range","j","push","getItem","getDragPlaceholderText","count","dropItems","debug","current","focusItem","err","error","handleSelect","event","setExpanded","handleItemDragStart","debug2","draggedRanges","resetMouseState","newDragPlaceholder","document","createElement","innerHTML","className","body","appendChild","dataTransfer","setDragImage","effectAllowed","handleItemDragOver","preventDefault","handleItemDragEnd","remove","handleItemDrop","handleItemDragExit","handleListDragOver","target","Element","classList","contains","type","handleListDrop","handleSelectionChange","newSelectedRanges","selectedItems","handleFocusChange","focusIndex","focusedItem","handleViewportChange","focusedPath","collapseAll","updateTableViewport","Math","max","setLoadedViewportAndReturnCleanup","listenerRemover","onUpdate","newViewport","itemName","size","expandFolderOnHover","timeout","setTimeout","clearTimeout","renderWrapper","itemProps","onDragExit"],"sources":["../src/FileList.tsx"],"sourcesContent":["import {\n ItemList,\n Range,\n RenderItemProps,\n Tooltip,\n} from '@deephaven/components';\nimport { dhPython, vsCode, vsFolder, vsFolderOpened } from '@deephaven/icons';\nimport Log from '@deephaven/log';\nimport { RangeUtils } from '@deephaven/utils';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { IconDefinition } from '@fortawesome/fontawesome-svg-core';\nimport classNames from 'classnames';\nimport React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { FileStorageItem, FileStorageTable, isDirectory } from './FileStorage';\nimport './FileList.scss';\nimport FileUtils, { MIME_TYPE } from './FileUtils';\n\nconst log = Log.module('FileList');\n\nexport type LoadedViewport = {\n items: FileStorageItem[];\n offset: number;\n itemCount: number;\n};\n\nexport type ListViewport = {\n top: number;\n bottom: number;\n};\n\nexport type FileListRenderItemProps = RenderItemProps<FileStorageItem> & {\n children?: JSX.Element;\n dropTargetItem?: FileStorageItem;\n draggedItems?: FileStorageItem[];\n isDragInProgress: boolean;\n isDropTargetValid: boolean;\n\n onDragStart(index: number, e: React.DragEvent<HTMLDivElement>): void;\n onDragOver(index: number, e: React.DragEvent<HTMLDivElement>): void;\n onDragEnd(index: number, e: React.DragEvent<HTMLDivElement>): void;\n onDrop(index: number, e: React.DragEvent<HTMLDivElement>): void;\n};\n\nexport interface FileListProps {\n table: FileStorageTable;\n\n isMultiSelect?: boolean;\n focusedPath?: string;\n\n onFocusChange?: (focusedItem?: FileStorageItem) => void;\n onMove: (files: FileStorageItem[], path: string) => void;\n onSelect: (file: FileStorageItem, event: React.SyntheticEvent) => void;\n onSelectionChange?: (selectedItems: FileStorageItem[]) => void;\n\n renderItem?: (props: FileListRenderItemProps) => JSX.Element;\n\n /** Height of each item in the list */\n rowHeight?: number;\n\n overscanCount?: number;\n}\n\nexport const getPathFromItem = (file: FileStorageItem): string =>\n isDirectory(file)\n ? FileUtils.makePath(file.filename)\n : FileUtils.getPath(file.filename);\n\nexport const DEFAULT_ROW_HEIGHT = 26;\n\n// How long you need to hover over a directory before it expands\nexport const DRAG_HOVER_TIMEOUT = 500;\n\nconst ITEM_LIST_CLASS_NAME = 'item-list-scroll-pane';\n\nexport const renderFileListItem = (\n props: FileListRenderItemProps\n): JSX.Element => {\n const {\n children,\n draggedItems,\n isDragInProgress,\n isDropTargetValid,\n isSelected,\n item,\n itemIndex,\n dropTargetItem,\n onDragStart,\n onDragOver,\n onDragEnd,\n onDrop,\n } = props;\n\n const isDragged =\n draggedItems?.some(draggedItem => draggedItem.id === item.id) ?? false;\n const itemPath = getPathFromItem(item);\n const dropTargetPath =\n isDragInProgress && dropTargetItem ? getPathFromItem(dropTargetItem) : null;\n\n const isExactDropTarget =\n isDragInProgress &&\n isDropTargetValid &&\n isDirectory(item) &&\n dropTargetPath === itemPath;\n const isInDropTarget =\n isDragInProgress && isDropTargetValid && dropTargetPath === itemPath;\n const isInvalidDropTarget =\n isDragInProgress && !isDropTargetValid && dropTargetPath === itemPath;\n\n const icon = getItemIcon(item);\n const depth = FileUtils.getDepth(item.filename);\n const depthLines = Array(depth)\n .fill(null)\n .map((value, index) => (\n // eslint-disable-next-line react/no-array-index-key\n <span className=\"file-list-depth-line\" key={index} />\n ));\n\n return (\n <div\n className={classNames(\n 'd-flex w-100 align-items-center',\n 'file-list-item',\n {\n 'is-dragged': isDragged,\n 'is-exact-drop-target': isExactDropTarget,\n 'is-in-drop-target': isInDropTarget,\n 'is-invalid-drop-target': isInvalidDropTarget,\n 'is-selected': isSelected,\n }\n )}\n onDragStart={e => onDragStart(itemIndex, e)}\n onDragOver={e => onDragOver(itemIndex, e)}\n onDragEnd={e => onDragEnd(itemIndex, e)}\n onDrop={e => onDrop(itemIndex, e)}\n draggable\n role=\"presentation\"\n aria-label={item.basename}\n >\n {depthLines}{' '}\n <FontAwesomeIcon icon={icon} className=\"item-icon\" fixedWidth />{' '}\n <span className=\"truncation-wrapper\">\n {children ?? item.basename}\n <Tooltip\n options={{\n modifiers: { preventOverflow: { boundariesElement: 'window' } },\n placement: 'left',\n }}\n >\n {children ?? item.basename}\n </Tooltip>\n </span>\n </div>\n );\n};\n\n/**\n * Get the icon definition for a file or folder item\n * @param item Item to get the icon for\n * @returns Icon definition to pass in the FontAwesomeIcon icon prop\n */\nexport function getItemIcon(item: FileStorageItem): IconDefinition {\n if (isDirectory(item)) {\n return item.isExpanded ? vsFolderOpened : vsFolder;\n }\n const mimeType = FileUtils.getMimeType(item.basename);\n switch (mimeType) {\n case MIME_TYPE.PYTHON:\n return dhPython;\n default:\n return vsCode;\n }\n}\n\n/**\n * Get the move operation for the current selection and the given target. Throws if the operation is invalid.\n */\nexport function getMoveOperation(\n draggedItems: FileStorageItem[],\n targetItem: FileStorageItem\n): { files: FileStorageItem[]; targetPath: string } {\n if (draggedItems.length === 0 || targetItem == null) {\n throw new Error('No items to move');\n }\n\n const targetPath = getPathFromItem(targetItem);\n if (\n draggedItems.some(\n ({ filename }) => FileUtils.getPath(filename) === targetPath\n )\n ) {\n // Cannot drop if target is one of the dragged items is already in the target folder\n throw new Error('File already in the destination folder');\n }\n if (\n draggedItems.some(\n item =>\n isDirectory(item) &&\n targetPath.startsWith(FileUtils.makePath(item.filename))\n )\n ) {\n // Cannot drop if target is a child of one of the directories being moved\n throw new Error('Destination folder cannot be a child of a dragged folder');\n }\n return { files: draggedItems, targetPath };\n}\n\n/**\n * Component that displays and allows interaction with the file system in the provided FileStorageTable.\n */\nexport function FileList(props: FileListProps): JSX.Element {\n const {\n isMultiSelect = false,\n table,\n onFocusChange = () => undefined,\n onMove,\n onSelect,\n onSelectionChange = () => undefined,\n renderItem = renderFileListItem,\n rowHeight = DEFAULT_ROW_HEIGHT,\n overscanCount = ItemList.DEFAULT_OVERSCAN,\n } = props;\n const [loadedViewport, setLoadedViewport] = useState<LoadedViewport>(() => ({\n items: [],\n offset: 0,\n itemCount: 0,\n }));\n const [viewport, setViewport] = useState<ListViewport>({\n top: 0,\n bottom: 0,\n });\n\n const [dropTargetItem, setDropTargetItem] = useState<FileStorageItem>();\n const [draggedItems, setDraggedItems] = useState<FileStorageItem[]>();\n const [dragPlaceholder, setDragPlaceholder] = useState<HTMLDivElement>();\n const [selectedRanges, setSelectedRanges] = useState([] as Range[]);\n\n const itemList = useRef<ItemList<FileStorageItem>>(null);\n const fileList = useRef<HTMLDivElement>(null);\n\n const getItems = useCallback(\n (ranges: Range[]): FileStorageItem[] => {\n if (ranges.length === 0 || loadedViewport == null) {\n return [];\n }\n\n const items = [] as FileStorageItem[];\n for (let i = 0; i < ranges.length; i += 1) {\n const range = ranges[i];\n for (let j = range[0]; j <= range[1]; j += 1) {\n if (\n j >= loadedViewport.offset &&\n j < loadedViewport.offset + loadedViewport.items.length\n ) {\n items.push(loadedViewport.items[j - loadedViewport.offset]);\n }\n }\n }\n return items;\n },\n [loadedViewport]\n );\n\n const getItem = useCallback(\n (itemIndex: number): FileStorageItem | undefined => {\n const items = getItems([[itemIndex, itemIndex]]);\n if (items.length > 0) {\n return items[0];\n }\n },\n [getItems]\n );\n\n /**\n * Get the placeholder text to show when a drag operation is in progress\n */\n const getDragPlaceholderText = useCallback(() => {\n const count = RangeUtils.count(selectedRanges);\n if (count === 0) {\n return null;\n }\n\n if (count === 1) {\n const index = selectedRanges[0][0];\n const item = getItem(index);\n if (item != null) {\n return item.filename;\n }\n }\n return `${count} items`;\n }, [getItem, selectedRanges]);\n\n /**\n * Drop the currently dragged items at the currently set drop target.\n * If an itemIndex is provided, focus that index after the drop.\n */\n const dropItems = useCallback(\n (itemIndex?: number) => {\n if (!draggedItems || !dropTargetItem) {\n return;\n }\n\n log.debug('dropItems', draggedItems, 'to', itemIndex);\n\n try {\n const { files, targetPath } = getMoveOperation(\n draggedItems,\n dropTargetItem\n );\n onMove(files, targetPath);\n if (itemIndex != null) {\n setSelectedRanges([[itemIndex, itemIndex]]);\n itemList.current?.focusItem(itemIndex);\n }\n } catch (err) {\n log.error('Unable to complete move', err);\n }\n },\n [draggedItems, dropTargetItem, onMove]\n );\n\n const handleSelect = useCallback(\n (itemIndex: number, event: React.SyntheticEvent) => {\n const item = loadedViewport.items[itemIndex - loadedViewport.offset];\n if (item !== undefined) {\n log.debug('handleItemClick', item);\n\n onSelect(item, event);\n if (isDirectory(item)) {\n table?.setExpanded(item.filename, !item.isExpanded);\n }\n }\n },\n [loadedViewport, onSelect, table]\n );\n\n const handleItemDragStart = useCallback(\n (itemIndex: number, e: React.DragEvent<HTMLDivElement>) => {\n log.debug2('handleItemDragStart', itemIndex, selectedRanges);\n\n let draggedRanges = selectedRanges;\n if (!RangeUtils.isSelected(selectedRanges, itemIndex)) {\n draggedRanges = [[itemIndex, itemIndex]];\n setSelectedRanges(draggedRanges);\n }\n\n setDraggedItems(getItems(draggedRanges));\n\n // We need to reset reset the mouse state since we steal the drag\n itemList.current?.resetMouseState();\n\n const newDragPlaceholder = document.createElement('div');\n newDragPlaceholder.innerHTML = `<div class=\"dnd-placeholder-content\">${getDragPlaceholderText()}</div>`;\n newDragPlaceholder.className = 'file-list-dnd-placeholder';\n document.body.appendChild(newDragPlaceholder);\n e.dataTransfer.setDragImage(newDragPlaceholder, 0, 0);\n e.dataTransfer.effectAllowed = 'move';\n setDragPlaceholder(newDragPlaceholder);\n },\n [getDragPlaceholderText, getItems, selectedRanges]\n );\n\n const handleItemDragOver = useCallback(\n (itemIndex: number, e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n\n log.debug2('handleItemDragOver', e);\n setDropTargetItem(getItem(itemIndex));\n },\n [getItem]\n );\n\n const handleItemDragEnd = useCallback(\n (itemIndex: number, e: React.DragEvent<HTMLDivElement>) => {\n log.debug('handleItemDragEnd', itemIndex);\n\n dragPlaceholder?.remove();\n\n // Drag end is triggered after drop\n // Also drop isn't triggered if drag end is outside of the list\n setDraggedItems(undefined);\n setDropTargetItem(undefined);\n setDragPlaceholder(undefined);\n },\n [dragPlaceholder]\n );\n\n const handleItemDrop = useCallback(\n (itemIndex: number, e: React.DragEvent<HTMLDivElement>) => {\n dropItems(itemIndex);\n },\n [dropItems]\n );\n\n const handleItemDragExit = useCallback(() => {\n log.debug2('handleItemDragExit');\n setDropTargetItem(undefined);\n }, []);\n\n const handleListDragOver = useCallback(\n (e: React.DragEvent<HTMLDivElement>) => {\n if (\n e.target instanceof Element &&\n e.target.classList.contains(ITEM_LIST_CLASS_NAME)\n ) {\n // Need to prevent default to enable drop\n // https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API/Drag_operations#droptargets\n e.preventDefault();\n\n log.debug2('handleListDragOver', e);\n setDropTargetItem({\n type: 'directory',\n filename: '/',\n basename: '/',\n id: '/',\n });\n }\n },\n []\n );\n\n const handleListDrop = useCallback(\n (e: React.DragEvent<HTMLDivElement>) => {\n if (\n e.target instanceof Element &&\n e.target.classList.contains(ITEM_LIST_CLASS_NAME)\n ) {\n log.debug('handleListDrop');\n dropItems();\n }\n },\n [dropItems]\n );\n\n const handleSelectionChange = useCallback(\n newSelectedRanges => {\n log.debug2('handleSelectionChange', newSelectedRanges);\n if (newSelectedRanges !== selectedRanges) {\n setSelectedRanges(newSelectedRanges);\n const selectedItems = getItems(newSelectedRanges);\n onSelectionChange(selectedItems);\n }\n },\n [getItems, onSelectionChange, selectedRanges]\n );\n\n const handleFocusChange = useCallback(\n focusIndex => {\n log.debug2('handleFocusChange', focusIndex);\n if (focusIndex != null) {\n const [focusedItem] = getItems([[focusIndex, focusIndex]]);\n onFocusChange(focusedItem);\n } else {\n onFocusChange();\n }\n },\n [getItems, onFocusChange]\n );\n\n const handleViewportChange = useCallback(\n (top: number, bottom: number) => {\n log.debug('handleViewportChange', top, bottom);\n if (top !== viewport.top || bottom !== viewport.bottom) {\n setViewport({ top, bottom });\n }\n },\n [viewport]\n );\n\n const isDropTargetValid = useMemo(() => {\n if (!draggedItems || !dropTargetItem) {\n return false;\n }\n\n try {\n getMoveOperation(draggedItems, dropTargetItem);\n log.debug('handleValidateDropTarget true');\n return true;\n } catch (e) {\n log.debug('handleValidateDropTarget false');\n return false;\n }\n }, [draggedItems, dropTargetItem]);\n\n const { focusedPath } = props;\n useEffect(() => {\n if (focusedPath !== undefined) {\n if (focusedPath === '/') {\n table.collapseAll();\n } else {\n table.setExpanded(focusedPath, false);\n table.setExpanded(focusedPath, true);\n }\n }\n }, [table, focusedPath]);\n\n useEffect(\n function updateTableViewport() {\n log.debug('updating table viewport', viewport);\n table?.setViewport({\n top: Math.max(0, viewport.top - overscanCount),\n bottom: viewport.bottom + overscanCount,\n });\n },\n [overscanCount, table, viewport]\n );\n\n // Listen for table updates\n useEffect(\n function setLoadedViewportAndReturnCleanup() {\n const listenerRemover = table.onUpdate(newViewport => {\n setLoadedViewport({\n items: newViewport.items.map(item => ({\n ...item,\n itemName: item.basename,\n })),\n offset: newViewport.offset,\n itemCount: table.size,\n });\n });\n return () => {\n listenerRemover();\n };\n },\n [table]\n );\n\n // Expand a folder if hovering over it\n useEffect(\n function expandFolderOnHover() {\n if (\n dropTargetItem != null &&\n isDirectory(dropTargetItem) &&\n dropTargetItem.filename !== '/'\n ) {\n const timeout = setTimeout(() => {\n if (!dropTargetItem.isExpanded) {\n table?.setExpanded(dropTargetItem.filename, true);\n }\n }, DRAG_HOVER_TIMEOUT);\n return () => clearTimeout(timeout);\n }\n },\n [dropTargetItem, table]\n );\n\n const renderWrapper = useCallback(\n itemProps =>\n renderItem({\n ...itemProps,\n isDragInProgress: draggedItems != null,\n dropTargetItem,\n draggedItems,\n isDropTargetValid,\n onDragStart: handleItemDragStart,\n onDragEnd: handleItemDragEnd,\n onDragOver: handleItemDragOver,\n onDragExit: handleItemDragExit,\n onDrop: handleItemDrop,\n }),\n [\n handleItemDragEnd,\n handleItemDragExit,\n handleItemDragOver,\n handleItemDragStart,\n handleItemDrop,\n draggedItems,\n dropTargetItem,\n isDropTargetValid,\n renderItem,\n ]\n );\n\n return (\n <div\n ref={fileList}\n className={classNames('file-list', {\n 'is-dragging': draggedItems != null,\n })}\n onDragOver={handleListDragOver}\n onDrop={handleListDrop}\n >\n <ItemList\n ref={itemList}\n items={loadedViewport.items}\n itemCount={loadedViewport.itemCount}\n offset={loadedViewport.offset}\n onFocusChange={handleFocusChange}\n onSelect={handleSelect}\n onSelectionChange={handleSelectionChange}\n onViewportChange={handleViewportChange}\n selectedRanges={selectedRanges}\n renderItem={renderWrapper}\n rowHeight={rowHeight}\n isMultiSelect={isMultiSelect}\n isDragSelect={false}\n isDeselectOnClick={false}\n />\n </div>\n );\n}\n\nexport default FileList;\n"],"mappings":"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"}
|
|
@@ -21,9 +21,9 @@ export interface FileListContainerProps {
|
|
|
21
21
|
/**
|
|
22
22
|
* Component that displays and allows interaction with the file system in the provided FileStorage.
|
|
23
23
|
*/
|
|
24
|
-
export declare
|
|
25
|
-
|
|
26
|
-
displayName: string;
|
|
27
|
-
}
|
|
24
|
+
export declare function FileListContainer(props: FileListContainerProps): JSX.Element;
|
|
25
|
+
export declare namespace FileListContainer {
|
|
26
|
+
var displayName: string;
|
|
27
|
+
}
|
|
28
28
|
export default FileListContainer;
|
|
29
29
|
//# sourceMappingURL=FileListContainer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileListContainer.d.ts","sourceRoot":"","sources":["../src/FileListContainer.tsx"],"names":[],"mappings":"AACA,OAAO,KAAyC,MAAM,OAAO,CAAC;AAM9D,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAe,MAAM,eAAe,CAAC;AAE/E,OAAO,qBAAqB,CAAC;AAI7B,MAAM,WAAW,sBAAsB;IACrC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,KAAK,EAAE,gBAAgB,CAAC;IAExB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,cAAc,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;IACzC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,IAAI,CAAC;IAC9C,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1D,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5D,QAAQ,EAAE,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,CAAC,cAAc,KAAK,IAAI,CAAC;IACvE,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3E,iBAAiB,CAAC,EAAE,CAAC,aAAa,EAAE,eAAe,EAAE,KAAK,IAAI,CAAC;IAE/D,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,
|
|
1
|
+
{"version":3,"file":"FileListContainer.d.ts","sourceRoot":"","sources":["../src/FileListContainer.tsx"],"names":[],"mappings":"AACA,OAAO,KAAyC,MAAM,OAAO,CAAC;AAM9D,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAe,MAAM,eAAe,CAAC;AAE/E,OAAO,qBAAqB,CAAC;AAI7B,MAAM,WAAW,sBAAsB;IACrC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,KAAK,EAAE,gBAAgB,CAAC;IAExB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,cAAc,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;IACzC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,IAAI,CAAC;IAC9C,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1D,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5D,QAAQ,EAAE,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,CAAC,cAAc,KAAK,IAAI,CAAC;IACvE,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3E,iBAAiB,CAAC,EAAE,CAAC,aAAa,EAAE,eAAe,EAAE,KAAK,IAAI,CAAC;IAE/D,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,GAAG,GAAG,CAAC,OAAO,CAgM5E;yBAhMe,iBAAiB;;;AAoMjC,eAAe,iBAAiB,CAAC"}
|
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
2
|
-
|
|
3
2
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
4
|
-
|
|
5
3
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
6
|
-
|
|
7
4
|
import { ContextActions } from '@deephaven/components';
|
|
8
5
|
import React, { useCallback, useMemo, useState } from 'react';
|
|
9
6
|
import FileList, { renderFileListItem, DEFAULT_ROW_HEIGHT } from "./FileList.js";
|
|
@@ -12,11 +9,10 @@ import SHORTCUTS from "./FileExplorerShortcuts.js";
|
|
|
12
9
|
import "./FileExplorer.css";
|
|
13
10
|
import FileUtils from "./FileUtils.js";
|
|
14
11
|
import FileListItemEditor from "./FileListItemEditor.js";
|
|
15
|
-
|
|
16
12
|
/**
|
|
17
13
|
* Component that displays and allows interaction with the file system in the provided FileStorage.
|
|
18
14
|
*/
|
|
19
|
-
export
|
|
15
|
+
export function FileListContainer(props) {
|
|
20
16
|
var {
|
|
21
17
|
isMultiSelect = false,
|
|
22
18
|
focusedPath,
|
|
@@ -80,9 +76,7 @@ export var FileListContainer = props => {
|
|
|
80
76
|
// While renaming, we don't want to enable any of the context actions or it may interfere with renaming input
|
|
81
77
|
return [];
|
|
82
78
|
}
|
|
83
|
-
|
|
84
79
|
var result = [];
|
|
85
|
-
|
|
86
80
|
if (onCreateFile) {
|
|
87
81
|
result.push({
|
|
88
82
|
title: 'New File',
|
|
@@ -91,7 +85,6 @@ export var FileListContainer = props => {
|
|
|
91
85
|
group: ContextActions.groups.medium
|
|
92
86
|
});
|
|
93
87
|
}
|
|
94
|
-
|
|
95
88
|
if (onCreateFolder) {
|
|
96
89
|
result.push({
|
|
97
90
|
title: 'New Folder',
|
|
@@ -100,7 +93,6 @@ export var FileListContainer = props => {
|
|
|
100
93
|
group: ContextActions.groups.medium
|
|
101
94
|
});
|
|
102
95
|
}
|
|
103
|
-
|
|
104
96
|
if (onCopy) {
|
|
105
97
|
result.push({
|
|
106
98
|
title: 'Copy',
|
|
@@ -110,7 +102,6 @@ export var FileListContainer = props => {
|
|
|
110
102
|
disabled: focusedItem == null || isDirectory(focusedItem)
|
|
111
103
|
});
|
|
112
104
|
}
|
|
113
|
-
|
|
114
105
|
if (onDelete && selectedItems.length > 0) {
|
|
115
106
|
result.push({
|
|
116
107
|
title: 'Delete',
|
|
@@ -120,7 +111,6 @@ export var FileListContainer = props => {
|
|
|
120
111
|
group: ContextActions.groups.low
|
|
121
112
|
});
|
|
122
113
|
}
|
|
123
|
-
|
|
124
114
|
if (onRename) {
|
|
125
115
|
result.push({
|
|
126
116
|
title: 'Rename',
|
|
@@ -131,21 +121,18 @@ export var FileListContainer = props => {
|
|
|
131
121
|
disabled: focusedItem == null
|
|
132
122
|
});
|
|
133
123
|
}
|
|
134
|
-
|
|
135
124
|
return result;
|
|
136
125
|
}, [handleCopyAction, handleDeleteAction, handleNewFileAction, handleNewFolderAction, handleRenameAction, focusedItem, onCopy, onCreateFile, onCreateFolder, onDelete, onRename, selectedItems, renameItem]);
|
|
137
126
|
var validateRenameItem = useCallback(newName => {
|
|
138
127
|
if (renameItem) {
|
|
139
128
|
return validateRename(renameItem, newName);
|
|
140
129
|
}
|
|
141
|
-
|
|
142
130
|
return Promise.reject(new Error('No rename item'));
|
|
143
131
|
}, [renameItem, validateRename]);
|
|
144
132
|
var renderItem = useCallback(itemProps => {
|
|
145
133
|
var {
|
|
146
134
|
item
|
|
147
135
|
} = itemProps;
|
|
148
|
-
|
|
149
136
|
if (renameItem && renameItem.filename === item.filename) {
|
|
150
137
|
return renderFileListItem(_objectSpread(_objectSpread({}, itemProps), {}, {
|
|
151
138
|
children: /*#__PURE__*/React.createElement(FileListItemEditor, {
|
|
@@ -156,7 +143,6 @@ export var FileListContainer = props => {
|
|
|
156
143
|
})
|
|
157
144
|
}));
|
|
158
145
|
}
|
|
159
|
-
|
|
160
146
|
return renderFileListItem(itemProps);
|
|
161
147
|
}, [handleRenameCancel, handleRenameSubmit, renameItem, validateRenameItem]);
|
|
162
148
|
return /*#__PURE__*/React.createElement("div", {
|
|
@@ -174,7 +160,7 @@ export var FileListContainer = props => {
|
|
|
174
160
|
}), showContextMenu && /*#__PURE__*/React.createElement(ContextActions, {
|
|
175
161
|
actions: actions
|
|
176
162
|
}));
|
|
177
|
-
}
|
|
163
|
+
}
|
|
178
164
|
FileListContainer.displayName = 'FileListContainer';
|
|
179
165
|
export default FileListContainer;
|
|
180
166
|
//# sourceMappingURL=FileListContainer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileListContainer.js","names":["ContextActions","React","useCallback","useMemo","useState","FileList","renderFileListItem","DEFAULT_ROW_HEIGHT","isDirectory","SHORTCUTS","FileUtils","FileListItemEditor","FileListContainer","props","isMultiSelect","focusedPath","showContextMenu","onCreateFile","onCreateFolder","onCopy","onDelete","onMove","undefined","onRename","onSelect","onSelectionChange","table","rowHeight","validateRename","Promise","resolve","renameItem","setRenameItem","selectedItems","setSelectedItems","focusedItem","setFocusedItem","handleSelectionChange","newSelectedItems","handleFocusChange","newFocusedItem","handleCopyAction","handleDeleteAction","length","handleNewFileAction","handleNewFolderAction","getPath","filename","handleRenameAction","handleRenameCancel","handleRenameSubmit","newName","actions","result","push","title","description","action","group","groups","medium","low","disabled","shortcut","FILE_EXPLORER","DELETE","RENAME","validateRenameItem","reject","Error","renderItem","itemProps","item","children","displayName"],"sources":["../src/FileListContainer.tsx"],"sourcesContent":["import { ContextAction, ContextActions } from '@deephaven/components';\nimport React, { useCallback, useMemo, useState } from 'react';\nimport FileList, {\n renderFileListItem,\n DEFAULT_ROW_HEIGHT,\n FileListRenderItemProps,\n} from './FileList';\nimport { FileStorageItem, FileStorageTable, isDirectory } from './FileStorage';\nimport SHORTCUTS from './FileExplorerShortcuts';\nimport './FileExplorer.scss';\nimport FileUtils from './FileUtils';\nimport FileListItemEditor from './FileListItemEditor';\n\nexport interface FileListContainerProps {\n showContextMenu?: boolean;\n table: FileStorageTable;\n\n isMultiSelect?: boolean;\n focusedPath?: string;\n\n onCreateFile?: (path?: string) => void;\n onCreateFolder?: (path?: string) => void;\n onCopy?: (file: FileStorageItem) => void;\n onDelete?: (files: FileStorageItem[]) => void;\n onMove?: (files: FileStorageItem[], path: string) => void;\n onRename?: (file: FileStorageItem, newName: string) => void;\n onSelect: (file: FileStorageItem, event: React.SyntheticEvent) => void;\n validateRename?: (file: FileStorageItem, newName: string) => Promise<void>;\n onSelectionChange?: (selectedItems: FileStorageItem[]) => void;\n\n /** Height of each item in the list */\n rowHeight?: number;\n}\n\n/**\n * Component that displays and allows interaction with the file system in the provided FileStorage.\n */\nexport const FileListContainer = (\n props: FileListContainerProps\n): JSX.Element => {\n const {\n isMultiSelect = false,\n focusedPath,\n showContextMenu = false,\n onCreateFile,\n onCreateFolder,\n onCopy,\n onDelete,\n onMove = () => undefined,\n onRename,\n onSelect,\n onSelectionChange,\n table,\n rowHeight = DEFAULT_ROW_HEIGHT,\n validateRename = () => Promise.resolve(),\n } = props;\n const [renameItem, setRenameItem] = useState<FileStorageItem>();\n const [selectedItems, setSelectedItems] = useState([] as FileStorageItem[]);\n const [focusedItem, setFocusedItem] = useState<FileStorageItem>();\n\n const handleSelectionChange = useCallback(\n newSelectedItems => {\n setSelectedItems(newSelectedItems);\n onSelectionChange?.(newSelectedItems);\n },\n [onSelectionChange]\n );\n\n const handleFocusChange = useCallback(newFocusedItem => {\n setFocusedItem(newFocusedItem);\n }, []);\n\n const handleCopyAction = useCallback(() => {\n if (focusedItem) {\n onCopy?.(focusedItem);\n }\n }, [focusedItem, onCopy]);\n\n const handleDeleteAction = useCallback(() => {\n if (selectedItems.length > 0) {\n onDelete?.(selectedItems);\n }\n }, [onDelete, selectedItems]);\n\n const handleNewFileAction = useCallback(() => {\n onCreateFile?.();\n }, [onCreateFile]);\n\n const handleNewFolderAction = useCallback(() => {\n if (focusedItem) {\n onCreateFolder?.(FileUtils.getPath(focusedItem.filename));\n }\n }, [focusedItem, onCreateFolder]);\n\n const handleRenameAction = useCallback(() => {\n if (focusedItem) {\n setRenameItem(focusedItem);\n }\n }, [focusedItem]);\n\n const handleRenameCancel = useCallback((): void => {\n setRenameItem(undefined);\n }, []);\n\n const handleRenameSubmit = useCallback(\n (newName: string): void => {\n if (renameItem) {\n onRename?.(renameItem, newName);\n setRenameItem(undefined);\n }\n },\n [onRename, renameItem]\n );\n\n const actions = useMemo(() => {\n if (renameItem) {\n // While renaming, we don't want to enable any of the context actions or it may interfere with renaming input\n return [];\n }\n\n const result = [] as ContextAction[];\n if (onCreateFile) {\n result.push({\n title: 'New File',\n description: 'Create new file',\n action: handleNewFileAction,\n group: ContextActions.groups.medium,\n });\n }\n if (onCreateFolder) {\n result.push({\n title: 'New Folder',\n description: 'Create new folder',\n action: handleNewFolderAction,\n group: ContextActions.groups.medium,\n });\n }\n if (onCopy) {\n result.push({\n title: 'Copy',\n description: 'Copy',\n action: handleCopyAction,\n group: ContextActions.groups.low,\n disabled: focusedItem == null || isDirectory(focusedItem),\n });\n }\n if (onDelete && selectedItems.length > 0) {\n result.push({\n title: 'Delete',\n description: 'Delete',\n shortcut: SHORTCUTS.FILE_EXPLORER.DELETE,\n action: handleDeleteAction,\n group: ContextActions.groups.low,\n });\n }\n if (onRename) {\n result.push({\n title: 'Rename',\n description: 'Rename',\n shortcut: SHORTCUTS.FILE_EXPLORER.RENAME,\n action: handleRenameAction,\n group: ContextActions.groups.low,\n disabled: focusedItem == null,\n });\n }\n return result;\n }, [\n handleCopyAction,\n handleDeleteAction,\n handleNewFileAction,\n handleNewFolderAction,\n handleRenameAction,\n focusedItem,\n onCopy,\n onCreateFile,\n onCreateFolder,\n onDelete,\n onRename,\n selectedItems,\n renameItem,\n ]);\n\n const validateRenameItem = useCallback(\n (newName: string): Promise<void> => {\n if (renameItem) {\n return validateRename(renameItem, newName);\n }\n return Promise.reject(new Error('No rename item'));\n },\n [renameItem, validateRename]\n );\n\n const renderItem = useCallback(\n (itemProps: FileListRenderItemProps): JSX.Element => {\n const { item } = itemProps;\n if (renameItem && renameItem.filename === item.filename) {\n return renderFileListItem({\n ...itemProps,\n children: (\n <FileListItemEditor\n item={item}\n validate={validateRenameItem}\n onSubmit={handleRenameSubmit}\n onCancel={handleRenameCancel}\n />\n ),\n });\n }\n return renderFileListItem(itemProps);\n },\n [handleRenameCancel, handleRenameSubmit, renameItem, validateRenameItem]\n );\n\n return (\n <div className=\"file-list-container\">\n {table != null && (\n <FileList\n onMove={onMove}\n onSelect={onSelect}\n onSelectionChange={handleSelectionChange}\n onFocusChange={handleFocusChange}\n renderItem={renderItem}\n rowHeight={rowHeight}\n table={table}\n isMultiSelect={isMultiSelect}\n focusedPath={focusedPath}\n />\n )}\n {showContextMenu && <ContextActions actions={actions} />}\n </div>\n );\n};\n\nFileListContainer.displayName = 'FileListContainer';\n\nexport default FileListContainer;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FileListContainer.js","names":["ContextActions","React","useCallback","useMemo","useState","FileList","renderFileListItem","DEFAULT_ROW_HEIGHT","isDirectory","SHORTCUTS","FileUtils","FileListItemEditor","FileListContainer","props","isMultiSelect","focusedPath","showContextMenu","onCreateFile","onCreateFolder","onCopy","onDelete","onMove","undefined","onRename","onSelect","onSelectionChange","table","rowHeight","validateRename","Promise","resolve","renameItem","setRenameItem","selectedItems","setSelectedItems","focusedItem","setFocusedItem","handleSelectionChange","newSelectedItems","handleFocusChange","newFocusedItem","handleCopyAction","handleDeleteAction","length","handleNewFileAction","handleNewFolderAction","getPath","filename","handleRenameAction","handleRenameCancel","handleRenameSubmit","newName","actions","result","push","title","description","action","group","groups","medium","low","disabled","shortcut","FILE_EXPLORER","DELETE","RENAME","validateRenameItem","reject","Error","renderItem","itemProps","item","children","displayName"],"sources":["../src/FileListContainer.tsx"],"sourcesContent":["import { ContextAction, ContextActions } from '@deephaven/components';\nimport React, { useCallback, useMemo, useState } from 'react';\nimport FileList, {\n renderFileListItem,\n DEFAULT_ROW_HEIGHT,\n FileListRenderItemProps,\n} from './FileList';\nimport { FileStorageItem, FileStorageTable, isDirectory } from './FileStorage';\nimport SHORTCUTS from './FileExplorerShortcuts';\nimport './FileExplorer.scss';\nimport FileUtils from './FileUtils';\nimport FileListItemEditor from './FileListItemEditor';\n\nexport interface FileListContainerProps {\n showContextMenu?: boolean;\n table: FileStorageTable;\n\n isMultiSelect?: boolean;\n focusedPath?: string;\n\n onCreateFile?: (path?: string) => void;\n onCreateFolder?: (path?: string) => void;\n onCopy?: (file: FileStorageItem) => void;\n onDelete?: (files: FileStorageItem[]) => void;\n onMove?: (files: FileStorageItem[], path: string) => void;\n onRename?: (file: FileStorageItem, newName: string) => void;\n onSelect: (file: FileStorageItem, event: React.SyntheticEvent) => void;\n validateRename?: (file: FileStorageItem, newName: string) => Promise<void>;\n onSelectionChange?: (selectedItems: FileStorageItem[]) => void;\n\n /** Height of each item in the list */\n rowHeight?: number;\n}\n\n/**\n * Component that displays and allows interaction with the file system in the provided FileStorage.\n */\nexport function FileListContainer(props: FileListContainerProps): JSX.Element {\n const {\n isMultiSelect = false,\n focusedPath,\n showContextMenu = false,\n onCreateFile,\n onCreateFolder,\n onCopy,\n onDelete,\n onMove = () => undefined,\n onRename,\n onSelect,\n onSelectionChange,\n table,\n rowHeight = DEFAULT_ROW_HEIGHT,\n validateRename = () => Promise.resolve(),\n } = props;\n const [renameItem, setRenameItem] = useState<FileStorageItem>();\n const [selectedItems, setSelectedItems] = useState([] as FileStorageItem[]);\n const [focusedItem, setFocusedItem] = useState<FileStorageItem>();\n\n const handleSelectionChange = useCallback(\n newSelectedItems => {\n setSelectedItems(newSelectedItems);\n onSelectionChange?.(newSelectedItems);\n },\n [onSelectionChange]\n );\n\n const handleFocusChange = useCallback(newFocusedItem => {\n setFocusedItem(newFocusedItem);\n }, []);\n\n const handleCopyAction = useCallback(() => {\n if (focusedItem) {\n onCopy?.(focusedItem);\n }\n }, [focusedItem, onCopy]);\n\n const handleDeleteAction = useCallback(() => {\n if (selectedItems.length > 0) {\n onDelete?.(selectedItems);\n }\n }, [onDelete, selectedItems]);\n\n const handleNewFileAction = useCallback(() => {\n onCreateFile?.();\n }, [onCreateFile]);\n\n const handleNewFolderAction = useCallback(() => {\n if (focusedItem) {\n onCreateFolder?.(FileUtils.getPath(focusedItem.filename));\n }\n }, [focusedItem, onCreateFolder]);\n\n const handleRenameAction = useCallback(() => {\n if (focusedItem) {\n setRenameItem(focusedItem);\n }\n }, [focusedItem]);\n\n const handleRenameCancel = useCallback((): void => {\n setRenameItem(undefined);\n }, []);\n\n const handleRenameSubmit = useCallback(\n (newName: string): void => {\n if (renameItem) {\n onRename?.(renameItem, newName);\n setRenameItem(undefined);\n }\n },\n [onRename, renameItem]\n );\n\n const actions = useMemo(() => {\n if (renameItem) {\n // While renaming, we don't want to enable any of the context actions or it may interfere with renaming input\n return [];\n }\n\n const result = [] as ContextAction[];\n if (onCreateFile) {\n result.push({\n title: 'New File',\n description: 'Create new file',\n action: handleNewFileAction,\n group: ContextActions.groups.medium,\n });\n }\n if (onCreateFolder) {\n result.push({\n title: 'New Folder',\n description: 'Create new folder',\n action: handleNewFolderAction,\n group: ContextActions.groups.medium,\n });\n }\n if (onCopy) {\n result.push({\n title: 'Copy',\n description: 'Copy',\n action: handleCopyAction,\n group: ContextActions.groups.low,\n disabled: focusedItem == null || isDirectory(focusedItem),\n });\n }\n if (onDelete && selectedItems.length > 0) {\n result.push({\n title: 'Delete',\n description: 'Delete',\n shortcut: SHORTCUTS.FILE_EXPLORER.DELETE,\n action: handleDeleteAction,\n group: ContextActions.groups.low,\n });\n }\n if (onRename) {\n result.push({\n title: 'Rename',\n description: 'Rename',\n shortcut: SHORTCUTS.FILE_EXPLORER.RENAME,\n action: handleRenameAction,\n group: ContextActions.groups.low,\n disabled: focusedItem == null,\n });\n }\n return result;\n }, [\n handleCopyAction,\n handleDeleteAction,\n handleNewFileAction,\n handleNewFolderAction,\n handleRenameAction,\n focusedItem,\n onCopy,\n onCreateFile,\n onCreateFolder,\n onDelete,\n onRename,\n selectedItems,\n renameItem,\n ]);\n\n const validateRenameItem = useCallback(\n (newName: string): Promise<void> => {\n if (renameItem) {\n return validateRename(renameItem, newName);\n }\n return Promise.reject(new Error('No rename item'));\n },\n [renameItem, validateRename]\n );\n\n const renderItem = useCallback(\n (itemProps: FileListRenderItemProps): JSX.Element => {\n const { item } = itemProps;\n if (renameItem && renameItem.filename === item.filename) {\n return renderFileListItem({\n ...itemProps,\n children: (\n <FileListItemEditor\n item={item}\n validate={validateRenameItem}\n onSubmit={handleRenameSubmit}\n onCancel={handleRenameCancel}\n />\n ),\n });\n }\n return renderFileListItem(itemProps);\n },\n [handleRenameCancel, handleRenameSubmit, renameItem, validateRenameItem]\n );\n\n return (\n <div className=\"file-list-container\">\n {table != null && (\n <FileList\n onMove={onMove}\n onSelect={onSelect}\n onSelectionChange={handleSelectionChange}\n onFocusChange={handleFocusChange}\n renderItem={renderItem}\n rowHeight={rowHeight}\n table={table}\n isMultiSelect={isMultiSelect}\n focusedPath={focusedPath}\n />\n )}\n {showContextMenu && <ContextActions actions={actions} />}\n </div>\n );\n}\n\nFileListContainer.displayName = 'FileListContainer';\n\nexport default FileListContainer;\n"],"mappings":"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"}
|
|
@@ -7,6 +7,6 @@ export interface FileListItemEditorProps {
|
|
|
7
7
|
onSubmit: (newName: string) => void;
|
|
8
8
|
validate?: (newName: string) => Promise<void>;
|
|
9
9
|
}
|
|
10
|
-
export declare
|
|
10
|
+
export declare function FileListItemEditor({ item, onCancel, onSubmit, validate, }: FileListItemEditorProps): JSX.Element;
|
|
11
11
|
export default FileListItemEditor;
|
|
12
12
|
//# sourceMappingURL=FileListItemEditor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileListItemEditor.d.ts","sourceRoot":"","sources":["../src/FileListItemEditor.tsx"],"names":[],"mappings":";AAYA,OAAO,2BAA2B,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAIhD,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,eAAe,CAAC;IACtB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C;AAED,
|
|
1
|
+
{"version":3,"file":"FileListItemEditor.d.ts","sourceRoot":"","sources":["../src/FileListItemEditor.tsx"],"names":[],"mappings":";AAYA,OAAO,2BAA2B,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAIhD,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,eAAe,CAAC;IACtB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C;AAED,wBAAgB,kBAAkB,CAAC,EACjC,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,QAAkC,GACnC,EAAE,uBAAuB,GAAG,GAAG,CAAC,OAAO,CAqGvC;AAED,eAAe,kBAAkB,CAAC"}
|
|
@@ -4,7 +4,7 @@ import Log from '@deephaven/log';
|
|
|
4
4
|
import { PromiseUtils } from '@deephaven/utils';
|
|
5
5
|
import "./FileListItemEditor.css";
|
|
6
6
|
var log = Log.module('FileListItemEditor');
|
|
7
|
-
export
|
|
7
|
+
export function FileListItemEditor(_ref) {
|
|
8
8
|
var {
|
|
9
9
|
item,
|
|
10
10
|
onCancel,
|
|
@@ -17,8 +17,8 @@ export var FileListItemEditor = _ref => {
|
|
|
17
17
|
var [validationPromise, setValidationPromise] = useState(Promise.resolve());
|
|
18
18
|
var focus = useCallback(() => {
|
|
19
19
|
var _input$current;
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
(_input$current = input.current) === null || _input$current === void 0 ? void 0 : _input$current.focus();
|
|
21
|
+
// Select the proper range based on the type...
|
|
22
22
|
}, [input]);
|
|
23
23
|
var stopPropagation = useCallback(e => e.stopPropagation(), []);
|
|
24
24
|
var validateAndSubmit = useCallback(() => {
|
|
@@ -54,20 +54,17 @@ export var FileListItemEditor = _ref => {
|
|
|
54
54
|
var {
|
|
55
55
|
key
|
|
56
56
|
} = e;
|
|
57
|
-
|
|
58
57
|
switch (key) {
|
|
59
58
|
case 'Enter':
|
|
60
59
|
{
|
|
61
60
|
validateAndSubmit();
|
|
62
61
|
break;
|
|
63
62
|
}
|
|
64
|
-
|
|
65
63
|
case 'Escape':
|
|
66
64
|
{
|
|
67
65
|
onCancel();
|
|
68
66
|
break;
|
|
69
67
|
}
|
|
70
|
-
|
|
71
68
|
default:
|
|
72
69
|
}
|
|
73
70
|
}, [onCancel, validateAndSubmit]);
|
|
@@ -89,6 +86,6 @@ export var FileListItemEditor = _ref => {
|
|
|
89
86
|
}), validationError && /*#__PURE__*/React.createElement("div", {
|
|
90
87
|
className: "invalid-feedback"
|
|
91
88
|
}, "".concat(validationError)));
|
|
92
|
-
}
|
|
89
|
+
}
|
|
93
90
|
export default FileListItemEditor;
|
|
94
91
|
//# sourceMappingURL=FileListItemEditor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileListItemEditor.js","names":["React","useCallback","useEffect","useRef","useState","classNames","Log","PromiseUtils","log","module","FileListItemEditor","item","onCancel","onSubmit","validate","Promise","resolve","input","value","setValue","basename","validationError","setValidationError","validationPromise","setValidationPromise","focus","current","stopPropagation","e","validateAndSubmit","then","catch","info","validateValueAndSetPromise","validatePromise","makeCancelable","undefined","isCanceled","cancel","selectRange","handleBlur","debug2","handleChange","newValue","target","handleKeyDown","key"],"sources":["../src/FileListItemEditor.tsx"],"sourcesContent":["import React, {\n ChangeEvent,\n KeyboardEvent,\n MouseEvent,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport classNames from 'classnames';\nimport Log from '@deephaven/log';\nimport { PromiseUtils } from '@deephaven/utils';\nimport './FileListItemEditor.scss';\nimport { FileStorageItem } from './FileStorage';\n\nconst log = Log.module('FileListItemEditor');\n\nexport interface FileListItemEditorProps {\n item: FileStorageItem;\n onCancel: () => void;\n onSubmit: (newName: string) => void;\n validate?: (newName: string) => Promise<void>;\n}\n\nexport
|
|
1
|
+
{"version":3,"file":"FileListItemEditor.js","names":["React","useCallback","useEffect","useRef","useState","classNames","Log","PromiseUtils","log","module","FileListItemEditor","item","onCancel","onSubmit","validate","Promise","resolve","input","value","setValue","basename","validationError","setValidationError","validationPromise","setValidationPromise","focus","current","stopPropagation","e","validateAndSubmit","then","catch","info","validateValueAndSetPromise","validatePromise","makeCancelable","undefined","isCanceled","cancel","selectRange","handleBlur","debug2","handleChange","newValue","target","handleKeyDown","key"],"sources":["../src/FileListItemEditor.tsx"],"sourcesContent":["import React, {\n ChangeEvent,\n KeyboardEvent,\n MouseEvent,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport classNames from 'classnames';\nimport Log from '@deephaven/log';\nimport { PromiseUtils } from '@deephaven/utils';\nimport './FileListItemEditor.scss';\nimport { FileStorageItem } from './FileStorage';\n\nconst log = Log.module('FileListItemEditor');\n\nexport interface FileListItemEditorProps {\n item: FileStorageItem;\n onCancel: () => void;\n onSubmit: (newName: string) => void;\n validate?: (newName: string) => Promise<void>;\n}\n\nexport function FileListItemEditor({\n item,\n onCancel,\n onSubmit,\n validate = () => Promise.resolve(),\n}: FileListItemEditorProps): JSX.Element {\n const input = useRef<HTMLInputElement>(null);\n const [value, setValue] = useState(item.basename);\n const [validationError, setValidationError] = useState<Error>();\n const [validationPromise, setValidationPromise] = useState<Promise<void>>(\n Promise.resolve()\n );\n\n const focus = useCallback(() => {\n input.current?.focus();\n // Select the proper range based on the type...\n }, [input]);\n\n const stopPropagation = useCallback(\n (e: MouseEvent) => e.stopPropagation(),\n []\n );\n\n const validateAndSubmit = useCallback(() => {\n validationPromise\n .then(() => {\n onSubmit(value);\n })\n .catch(e => log.info('Unable to validate name', e));\n }, [onSubmit, value, validationPromise]);\n\n useEffect(\n function validateValueAndSetPromise() {\n const validatePromise = PromiseUtils.makeCancelable(validate(value));\n validatePromise\n .then(() => setValidationError(undefined))\n .catch(e => {\n if (!PromiseUtils.isCanceled(e)) {\n setValidationError(e);\n }\n });\n setValidationPromise(validatePromise);\n return () => validatePromise.cancel();\n },\n [validate, value]\n );\n\n useEffect(\n function selectRange() {\n focus();\n },\n [focus]\n );\n\n const handleBlur = useCallback(() => {\n log.debug2('handleBlur');\n validateAndSubmit();\n }, [validateAndSubmit]);\n\n const handleChange = useCallback((e: ChangeEvent<HTMLInputElement>) => {\n const { value: newValue } = e.target;\n setValue(newValue);\n }, []);\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n e.stopPropagation();\n\n const { key } = e;\n switch (key) {\n case 'Enter': {\n validateAndSubmit();\n break;\n }\n case 'Escape': {\n onCancel();\n break;\n }\n default:\n }\n },\n [onCancel, validateAndSubmit]\n );\n\n return (\n <div className=\"file-list-item-editor\">\n <input\n type=\"text\"\n className={classNames('form-control file-list-item-editor-input', {\n 'is-invalid': validationError,\n })}\n value={value}\n ref={input}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n onChange={handleChange}\n onClick={stopPropagation}\n onDoubleClick={stopPropagation}\n onMouseDown={stopPropagation}\n />\n\n {validationError && (\n <div className=\"invalid-feedback\">{`${validationError}`}</div>\n )}\n </div>\n );\n}\n\nexport default FileListItemEditor;\n"],"mappings":"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"}
|
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
2
|
-
|
|
3
2
|
class FileNotFoundError extends Error {
|
|
4
3
|
constructor() {
|
|
5
4
|
super('No file exists at the path specified');
|
|
6
|
-
|
|
7
5
|
_defineProperty(this, "isFileNotFound", true);
|
|
8
6
|
}
|
|
9
|
-
|
|
10
7
|
}
|
|
11
|
-
|
|
12
8
|
export default FileNotFoundError;
|
|
13
9
|
//# sourceMappingURL=FileNotFoundError.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileNotFoundError.js","names":["FileNotFoundError","Error","constructor"],"sources":["../src/FileNotFoundError.ts"],"sourcesContent":["class FileNotFoundError extends Error {\n constructor() {\n super('No file exists at the path specified');\n }\n\n isFileNotFound = true;\n}\n\nexport default FileNotFoundError;\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"FileNotFoundError.js","names":["FileNotFoundError","Error","constructor"],"sources":["../src/FileNotFoundError.ts"],"sourcesContent":["class FileNotFoundError extends Error {\n constructor() {\n super('No file exists at the path specified');\n }\n\n isFileNotFound = true;\n}\n\nexport default FileNotFoundError;\n"],"mappings":";AAAA,MAAMA,iBAAiB,SAASC,KAAK,CAAC;EACpCC,WAAW,GAAG;IACZ,KAAK,CAAC,sCAAsC,CAAC;IAAC,wCAG/B,IAAI;EAFrB;AAGF;AAEA,eAAeF,iBAAiB"}
|
package/dist/FileStorage.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ export interface FileMetadata {
|
|
|
8
8
|
/** Just the file name part of the file (no path) */
|
|
9
9
|
basename: string;
|
|
10
10
|
}
|
|
11
|
-
export
|
|
11
|
+
export type FileType = 'file' | 'directory';
|
|
12
12
|
export interface FileStorageItem extends StorageItem, FileMetadata {
|
|
13
13
|
type: FileType;
|
|
14
14
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileStorage.d.ts","sourceRoot":"","sources":["../src/FileStorage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,CAAC;IAEjB,oDAAoD;IACpD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,
|
|
1
|
+
{"version":3,"file":"FileStorage.d.ts","sourceRoot":"","sources":["../src/FileStorage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,4BAA4B;IAC5B,QAAQ,EAAE,MAAM,CAAC;IAEjB,oDAAoD;IACpD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;AAE5C,MAAM,WAAW,eAAgB,SAAQ,WAAW,EAAE,YAAY;IAChE,IAAI,EAAE,QAAQ,CAAC;CAChB;AAED,MAAM,WAAW,oBAAqB,SAAQ,eAAe;IAC3D,IAAI,EAAE,WAAW,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,WAAW,CACzB,IAAI,EAAE,eAAe,GACpB,IAAI,IAAI,oBAAoB,CAE9B;AAED;;GAEG;AACH,MAAM,WAAW,IAAK,SAAQ,YAAY;IACxC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAiB,SAAQ,YAAY,CAAC,eAAe,CAAC;IACrE,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAEhC;;;OAGG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IAEnD;;OAEG;IACH,WAAW,IAAI,IAAI,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,QAAQ,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAEtC;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpC;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtC;;;OAGG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExC;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvD;;;;;OAKG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAE7C;;;OAGG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;CACzD;AAED,eAAe,WAAW,CAAC"}
|
package/dist/FileStorage.js
CHANGED
package/dist/FileStorage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileStorage.js","names":["isDirectory","file","type"],"sources":["../src/FileStorage.ts"],"sourcesContent":["import { StorageTable, StorageItem } from '@deephaven/storage';\n\n/**\n * Basic metadata of the file\n */\nexport interface FileMetadata {\n /** Full path of the file */\n filename: string;\n\n /** Just the file name part of the file (no path) */\n basename: string;\n}\n\nexport type FileType = 'file' | 'directory';\n\nexport interface FileStorageItem extends StorageItem, FileMetadata {\n type: FileType;\n}\n\nexport interface DirectoryStorageItem extends FileStorageItem {\n type: 'directory';\n isExpanded: boolean;\n}\n\nexport function isDirectory(\n file: FileStorageItem\n): file is DirectoryStorageItem {\n return file.type === 'directory';\n}\n\n/**\n * A file including it's contents\n */\nexport interface File extends FileMetadata {\n content: string;\n}\n\nexport interface FileStorageTable extends StorageTable<FileStorageItem> {\n setSearch(search: string): void;\n\n /**\n * @param path The path to expand\n * @param expanded What expanded state to set\n */\n setExpanded(path: string, expanded: boolean): void;\n\n /**\n * Collapses all directories\n */\n collapseAll(): void;\n}\n\n/**\n * FileStorage abstraction. Has methods for managing files, and for retrieving a table to browse files.\n */\nexport interface FileStorage {\n /**\n * Retrieve a table to view the file list\n */\n getTable(): Promise<FileStorageTable>;\n\n /**\n * Save a file\n * @param file The file to save\n */\n saveFile(file: File): Promise<File>;\n\n /**\n * Load the contents of a file\n * @param name The file to load, including the full path\n */\n loadFile(name: string): Promise<File>;\n\n /**\n * Delete a file\n * @param name The full name of the file to delete\n */\n deleteFile(name: string): Promise<void>;\n\n /**\n * Move a file to a new location\n * @param name Source file name\n * @param newName The new file name, including path\n */\n moveFile(name: string, newName: string): Promise<void>;\n\n /**\n * Get the info for the file at the specified path.\n * If the file does not exists, rejects with a FileNotFoundError\n * @param name The file name to check, including path\n * @returns The FileStorageItem for the path specified, or reject with a FileNotFoundError if it does not exist.\n */\n info(name: string): Promise<FileStorageItem>;\n\n /**\n * Create the directory at the given path\n * @param name The full directory path\n */\n createDirectory(name: string): Promise<FileStorageItem>;\n}\n\nexport default FileStorage;\n"],"mappings":"AAEA;AACA;AACA
|
|
1
|
+
{"version":3,"file":"FileStorage.js","names":["isDirectory","file","type"],"sources":["../src/FileStorage.ts"],"sourcesContent":["import { StorageTable, StorageItem } from '@deephaven/storage';\n\n/**\n * Basic metadata of the file\n */\nexport interface FileMetadata {\n /** Full path of the file */\n filename: string;\n\n /** Just the file name part of the file (no path) */\n basename: string;\n}\n\nexport type FileType = 'file' | 'directory';\n\nexport interface FileStorageItem extends StorageItem, FileMetadata {\n type: FileType;\n}\n\nexport interface DirectoryStorageItem extends FileStorageItem {\n type: 'directory';\n isExpanded: boolean;\n}\n\nexport function isDirectory(\n file: FileStorageItem\n): file is DirectoryStorageItem {\n return file.type === 'directory';\n}\n\n/**\n * A file including it's contents\n */\nexport interface File extends FileMetadata {\n content: string;\n}\n\nexport interface FileStorageTable extends StorageTable<FileStorageItem> {\n setSearch(search: string): void;\n\n /**\n * @param path The path to expand\n * @param expanded What expanded state to set\n */\n setExpanded(path: string, expanded: boolean): void;\n\n /**\n * Collapses all directories\n */\n collapseAll(): void;\n}\n\n/**\n * FileStorage abstraction. Has methods for managing files, and for retrieving a table to browse files.\n */\nexport interface FileStorage {\n /**\n * Retrieve a table to view the file list\n */\n getTable(): Promise<FileStorageTable>;\n\n /**\n * Save a file\n * @param file The file to save\n */\n saveFile(file: File): Promise<File>;\n\n /**\n * Load the contents of a file\n * @param name The file to load, including the full path\n */\n loadFile(name: string): Promise<File>;\n\n /**\n * Delete a file\n * @param name The full name of the file to delete\n */\n deleteFile(name: string): Promise<void>;\n\n /**\n * Move a file to a new location\n * @param name Source file name\n * @param newName The new file name, including path\n */\n moveFile(name: string, newName: string): Promise<void>;\n\n /**\n * Get the info for the file at the specified path.\n * If the file does not exists, rejects with a FileNotFoundError\n * @param name The file name to check, including path\n * @returns The FileStorageItem for the path specified, or reject with a FileNotFoundError if it does not exist.\n */\n info(name: string): Promise<FileStorageItem>;\n\n /**\n * Create the directory at the given path\n * @param name The full directory path\n */\n createDirectory(name: string): Promise<FileStorageItem>;\n}\n\nexport default FileStorage;\n"],"mappings":"AAEA;AACA;AACA;;AAoBA,OAAO,SAASA,WAAW,CACzBC,IAAqB,EACS;EAC9B,OAAOA,IAAI,CAACC,IAAI,KAAK,WAAW;AAClC;;AAEA;AACA;AACA"}
|
package/dist/FileUtils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileUtils.d.ts","sourceRoot":"","sources":["../src/FileUtils.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,oBAAY,SAAS;IACnB,MAAM,kBAAkB;IACxB,UAAU,eAAe;IACzB,MAAM,kBAAkB;IACxB,eAAe,8BAA8B;IAC7C,KAAK,iBAAiB;IACtB,OAAO,KAAK;CACb;AAED;;GAEG;AACH,qBAAa,SAAS;IACpB;;;;OAIG;IACH,MAAM,CAAC,qBAAqB,CAAC,SAAS,SAAK,GAAG,MAAM;IAIpD;;;OAGG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAQrC;;;;;OAKG;IACH,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAQzC;;;;OAIG;IACH,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIxC;;;;OAIG;IACH,MAAM,CAAC,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAepD;;;;OAIG;IACH,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS;IAkB3C;;;OAGG;IACH,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAatC;;;;OAIG;IACH,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IASpC;;;;OAIG;IACH,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIrC;;;;OAIG;IACH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIpC;;;OAGG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAOrC;;;;OAIG;IACH,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,SAAK,GAAG,MAAM;IAOhE;;;OAGG;IACH,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"FileUtils.d.ts","sourceRoot":"","sources":["../src/FileUtils.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,oBAAY,SAAS;IACnB,MAAM,kBAAkB;IACxB,UAAU,eAAe;IACzB,MAAM,kBAAkB;IACxB,eAAe,8BAA8B;IAC7C,KAAK,iBAAiB;IACtB,OAAO,KAAK;CACb;AAED;;GAEG;AACH,qBAAa,SAAS;IACpB;;;;OAIG;IACH,MAAM,CAAC,qBAAqB,CAAC,SAAS,SAAK,GAAG,MAAM;IAIpD;;;OAGG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAQrC;;;;;OAKG;IACH,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAQzC;;;;OAIG;IACH,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIxC;;;;OAIG;IACH,MAAM,CAAC,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAepD;;;;OAIG;IACH,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS;IAkB3C;;;OAGG;IACH,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAatC;;;;OAIG;IACH,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IASpC;;;;OAIG;IACH,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIrC;;;;OAIG;IACH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIpC;;;OAGG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAOrC;;;;OAIG;IACH,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,SAAK,GAAG,MAAM;IAOhE;;;OAGG;IACH,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAgCvC;;;;OAIG;IACH,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;IAQ7C;;;;;OAKG;IACH,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAazD;;;;OAIG;IACH,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM;CAGnD;AAED,eAAe,SAAS,CAAC"}
|