@deephaven/file-explorer 0.19.2-beta.5 → 0.20.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/FileStorage.d.ts
CHANGED
|
@@ -29,11 +29,11 @@ export interface FileStorageTable extends StorageTable<FileStorageItem> {
|
|
|
29
29
|
* @param path The path to expand
|
|
30
30
|
* @param expanded What expanded state to set
|
|
31
31
|
*/
|
|
32
|
-
setExpanded(path: string, expanded: boolean):
|
|
32
|
+
setExpanded(path: string, expanded: boolean): void;
|
|
33
33
|
/**
|
|
34
34
|
* Collapses all directories
|
|
35
35
|
*/
|
|
36
|
-
collapseAll():
|
|
36
|
+
collapseAll(): void;
|
|
37
37
|
}
|
|
38
38
|
/**
|
|
39
39
|
* FileStorage abstraction. Has methods for managing files, and for retrieving a table to browse files.
|
|
@@ -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,oBAAY,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,
|
|
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,oBAAY,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.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):
|
|
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,WAAT,CACLC,IADK,EAEyB;EAC9B,OAAOA,IAAI,CAACC,IAAL,KAAc,WAArB;AACD;AAED;AACA;AACA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NewItemModal.d.ts","sourceRoot":"","sources":["../src/NewItemModal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACzE,OAAO,SAAS,MAAM,YAAY,CAAC;AAUnC,OAAO,EACL,iBAAiB,EAGjB,eAAe,EAChB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"NewItemModal.d.ts","sourceRoot":"","sources":["../src/NewItemModal.tsx"],"names":[],"mappings":"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"}
|
package/dist/NewItemModal.js
CHANGED
|
@@ -11,6 +11,7 @@ import { Modal, ModalBody, ModalFooter, ModalHeader, BasicModal, Button } from '
|
|
|
11
11
|
import { Pending, PromiseUtils, ValidationError } from '@deephaven/utils';
|
|
12
12
|
import Log from '@deephaven/log';
|
|
13
13
|
import { vsHome } from '@deephaven/icons';
|
|
14
|
+
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
14
15
|
import FileExplorer from "./FileExplorer.js";
|
|
15
16
|
import FileUtils from "./FileUtils.js";
|
|
16
17
|
import "./NewItemModal.css";
|
|
@@ -399,8 +400,12 @@ class NewItemModal extends PureComponent {
|
|
|
399
400
|
kind: "ghost",
|
|
400
401
|
className: "directory-breadcrumbs",
|
|
401
402
|
onClick: () => this.handleBreadcrumbSelect(directoryPath),
|
|
402
|
-
"aria-label": index === 0 ? '
|
|
403
|
-
icon: index === 0 ?
|
|
403
|
+
"aria-label": index === 0 ? 'Home' : undefined,
|
|
404
|
+
icon: index === 0 ? /*#__PURE__*/React.createElement(FontAwesomeIcon, {
|
|
405
|
+
icon: vsHome,
|
|
406
|
+
transform: "right-1.6"
|
|
407
|
+
}) : undefined,
|
|
408
|
+
tooltip: index === 0 ? 'Home' : undefined
|
|
404
409
|
}, basename), "/");
|
|
405
410
|
});
|
|
406
411
|
}
|
|
@@ -467,15 +472,13 @@ class NewItemModal extends PureComponent {
|
|
|
467
472
|
onSelect: this.handleSelect,
|
|
468
473
|
storage: storage,
|
|
469
474
|
focusedPath: path
|
|
470
|
-
}))))), /*#__PURE__*/React.createElement(ModalFooter, null, /*#__PURE__*/React.createElement(
|
|
471
|
-
|
|
472
|
-
onClick: onCancel
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
className: "btn btn-primary",
|
|
475
|
+
}))))), /*#__PURE__*/React.createElement(ModalFooter, null, /*#__PURE__*/React.createElement(Button, {
|
|
476
|
+
kind: "secondary",
|
|
477
|
+
onClick: onCancel
|
|
478
|
+
}, "Cancel"), /*#__PURE__*/React.createElement(Button, {
|
|
479
|
+
kind: "primary",
|
|
476
480
|
disabled: isSubmitting,
|
|
477
|
-
onClick: this.handleModalSubmit
|
|
478
|
-
type: "button"
|
|
481
|
+
onClick: this.handleModalSubmit
|
|
479
482
|
}, submitBtnLabel))), /*#__PURE__*/React.createElement(BasicModal, {
|
|
480
483
|
isOpen: showOverwriteModal,
|
|
481
484
|
headerText: "Confirm overwrite",
|
package/dist/NewItemModal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NewItemModal.js","names":["React","PureComponent","PropTypes","classNames","Modal","ModalBody","ModalFooter","ModalHeader","BasicModal","Button","Pending","PromiseUtils","ValidationError","Log","vsHome","FileExplorer","FileUtils","FileExistsError","FileNotFoundError","log","module","NewItemModal","getValidationMessage","err","info","type","handleError","isCanceled","error","constructor","props","createRef","Map","handleModalSubmit","bind","handleModalOpened","handleSelect","handleChange","handleKeyDown","handleValidationError","handleOverwriteCancel","handleOverwriteConfirm","handleExtensionChangeCancel","handleExtensionChangeConfirm","handleBreadcrumbSelect","defaultValue","path","hasPath","getPath","state","isSubmitting","prevExtension","getExtension","showExtensionChangeModal","showOverwriteModal","value","getBaseName","componentDidUpdate","prevProps","prevState","isOpen","prevIsOpen","resetValue","isInitialLoad","updateValidationStatus","componentWillUnmount","pending","cancel","cancelableValidatePromise","cancelableExistingItemPromise","setState","validationError","undefined","getValidationPromise","name","checkExisting","makeCancelable","validateName","storage","existingFile","e","newName","then","catch","focusRenameInput","submitModal","event","target","item","debug","makePath","filename","basename","key","stopPropagation","preventDefault","onCancel","onSubmit","newValue","replaceExtension","input","inputRef","current","selectionEnd","length","lastIndexOf","focus","setSelectionRange","skipExtensionCheck","notifyOnExtensionChange","newExtension","newItemName","directoryPath","renderPathButtons","pathAsList","split","pop","map","index","i","render","placeholder","title","isDirectory","prevExtensionText","fileExtensionToString","newExtensionText","submitBtnLabel","nameInputLabel","bool","string","isRequired","oneOf","func","shape"],"sources":["../src/NewItemModal.tsx"],"sourcesContent":["import React, { ChangeEvent, KeyboardEvent, PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport {\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n BasicModal,\n Button,\n} from '@deephaven/components';\nimport {\n CancelablePromise,\n Pending,\n PromiseUtils,\n ValidationError,\n} from '@deephaven/utils';\nimport Log from '@deephaven/log';\nimport { vsHome } from '@deephaven/icons';\nimport FileExplorer from './FileExplorer';\nimport FileStorage, { FileStorageItem, FileType } from './FileStorage';\nimport FileUtils from './FileUtils';\n\nimport './NewItemModal.scss';\nimport FileExistsError from './FileExistsError';\nimport FileNotFoundError from './FileNotFoundError';\n\nconst log = Log.module('NewItemModal');\n\nexport type NewItemModalProps = typeof NewItemModal.defaultProps & {\n isOpen: boolean;\n title: string;\n defaultValue: string;\n type: FileType;\n onSubmit: (name: string) => void;\n onCancel: () => void;\n placeholder: string;\n storage: FileStorage;\n notifyOnExtensionChange?: boolean;\n};\n\nexport type NewItemModalState = {\n path: string;\n isSubmitting: boolean;\n showExtensionChangeModal: boolean;\n showOverwriteModal: boolean;\n validationError?: ValidationError;\n value: string;\n prevExtension?: string;\n newExtension?: string;\n};\n\nclass NewItemModal extends PureComponent<NewItemModalProps, NewItemModalState> {\n static propTypes = {\n isOpen: PropTypes.bool,\n title: PropTypes.string.isRequired,\n defaultValue: PropTypes.string,\n type: PropTypes.oneOf(['file', 'directory']).isRequired,\n onSubmit: PropTypes.func,\n onCancel: PropTypes.func,\n placeholder: PropTypes.string,\n storage: PropTypes.shape({}).isRequired,\n notifyOnExtensionChange: PropTypes.bool,\n };\n\n static defaultProps = {\n isOpen: false,\n defaultValue: '/',\n notifyOnExtensionChange: false,\n placeholder: '',\n onSubmit: (name: string): void => undefined,\n onCancel: (): void => undefined,\n };\n\n static getValidationMessage(err: Error): string {\n if (err instanceof FileExistsError && err.info.type === 'directory') {\n return 'Error: Cannot overwrite existing directory';\n }\n return `${err}`;\n }\n\n static handleError(err: Error): void {\n if (!PromiseUtils.isCanceled(err)) {\n log.error(err);\n }\n }\n\n constructor(props: NewItemModalProps) {\n super(props);\n this.handleModalSubmit = this.handleModalSubmit.bind(this);\n this.handleModalOpened = this.handleModalOpened.bind(this);\n this.handleSelect = this.handleSelect.bind(this);\n this.handleChange = this.handleChange.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleValidationError = this.handleValidationError.bind(this);\n this.handleOverwriteCancel = this.handleOverwriteCancel.bind(this);\n this.handleOverwriteConfirm = this.handleOverwriteConfirm.bind(this);\n this.handleExtensionChangeCancel = this.handleExtensionChangeCancel.bind(\n this\n );\n this.handleExtensionChangeConfirm = this.handleExtensionChangeConfirm.bind(\n this\n );\n this.handleBreadcrumbSelect = this.handleBreadcrumbSelect.bind(this);\n\n const { defaultValue } = props;\n\n const path = FileUtils.hasPath(defaultValue)\n ? FileUtils.getPath(defaultValue)\n : '/';\n\n this.state = {\n isSubmitting: false,\n path,\n prevExtension: FileUtils.getExtension(defaultValue),\n showExtensionChangeModal: false,\n showOverwriteModal: false,\n value: FileUtils.getBaseName(defaultValue),\n };\n }\n\n componentDidUpdate(\n prevProps: NewItemModalProps,\n prevState: NewItemModalState\n ): void {\n const { isOpen } = this.props;\n const { isOpen: prevIsOpen } = prevProps;\n const { value, path } = this.state;\n if (!prevIsOpen && isOpen) {\n this.resetValue();\n this.isInitialLoad = true;\n }\n\n if (prevIsOpen && isOpen) {\n if (\n !this.isInitialLoad &&\n (path !== prevState.path || value !== prevState.value)\n ) {\n this.updateValidationStatus(path, value);\n }\n this.isInitialLoad = false;\n }\n }\n\n componentWillUnmount(): void {\n this.pending.cancel();\n if (this.cancelableValidatePromise) {\n this.cancelableValidatePromise.cancel();\n }\n if (this.cancelableExistingItemPromise) {\n this.cancelableExistingItemPromise.cancel();\n }\n }\n\n private inputRef = React.createRef<HTMLInputElement>();\n\n private cancelableValidatePromise?: CancelablePromise<string>;\n\n private cancelableExistingItemPromise?: CancelablePromise<FileStorageItem | null>;\n\n private pending = new Pending();\n\n private pathMap = new Map();\n\n private isInitialLoad = true;\n\n resetValue(): void {\n const { defaultValue } = this.props as NewItemModalProps;\n const path = FileUtils.hasPath(defaultValue)\n ? FileUtils.getPath(defaultValue)\n : '/';\n this.setState({\n path,\n value: FileUtils.getBaseName(defaultValue),\n validationError: undefined,\n prevExtension: FileUtils.getExtension(defaultValue),\n isSubmitting: false,\n });\n }\n\n getValidationPromise(\n path: string,\n name: string,\n checkExisting = false\n ): CancelablePromise<string> {\n if (this.cancelableValidatePromise) {\n this.cancelableValidatePromise.cancel();\n }\n this.cancelableValidatePromise = PromiseUtils.makeCancelable(\n this.validateName(path, name, checkExisting)\n );\n return this.cancelableValidatePromise;\n }\n\n async validateName(\n path: string,\n name: string,\n checkExisting: boolean\n ): Promise<string> {\n FileUtils.validateName(name);\n\n const { defaultValue, storage } = this.props;\n if (checkExisting) {\n const value = `${path}${name}`;\n if (value !== defaultValue) {\n try {\n const existingFile = await storage.info(value);\n throw new FileExistsError(existingFile);\n } catch (e) {\n if (!(e instanceof FileNotFoundError)) {\n throw e;\n }\n // There is no existing file, ignore\n }\n }\n }\n\n return name;\n }\n\n updateValidationStatus(path: string, newName: string): void {\n this.getValidationPromise(path, newName)\n .then(() => {\n this.setState({ validationError: undefined });\n })\n .catch(this.handleValidationError)\n .catch(NewItemModal.handleError);\n }\n\n handleModalOpened(): void {\n this.focusRenameInput();\n }\n\n handleModalSubmit(): void {\n this.submitModal();\n }\n\n handleChange(event: ChangeEvent<HTMLInputElement>): void {\n const { value } = event.target;\n this.setState({ value });\n }\n\n handleSelect(item: FileStorageItem): void {\n log.debug('handleSelect', item);\n if (item.type === 'directory') {\n this.setState({ path: FileUtils.makePath(item.filename) });\n } else {\n // Use selected item name and folder and focus the input\n const value = item.basename;\n const path = FileUtils.getPath(item.filename);\n this.setState({ value, path }, () => {\n this.focusRenameInput();\n });\n }\n }\n\n // eslint-disable-next-line class-methods-use-this\n handleKeyDown(e: KeyboardEvent): void {\n const { key } = e;\n e.stopPropagation();\n\n switch (key) {\n case 'Enter': {\n // Prevent form submit event\n e.preventDefault();\n this.submitModal();\n break;\n }\n case 'Escape': {\n e.preventDefault();\n const { onCancel } = this.props;\n onCancel();\n break;\n }\n default:\n }\n }\n\n handleValidationError(err: Error): void {\n if (!(err instanceof ValidationError)) {\n throw err;\n }\n log.debug('Validation error', err);\n this.setState({ validationError: err });\n }\n\n handleOverwriteCancel(): void {\n this.setState({\n showOverwriteModal: false,\n isSubmitting: false,\n });\n }\n\n handleOverwriteConfirm(): void {\n this.setState({ showOverwriteModal: false });\n const { onSubmit } = this.props;\n const { path, value } = this.state;\n log.debug('handleOverwriteConfirm', path, value);\n onSubmit(`${path}${value}`);\n }\n\n handleExtensionChangeCancel(): void {\n log.debug('handleExtensionChangeCancel');\n this.setState(({ value, prevExtension }) => {\n const newValue = FileUtils.replaceExtension(value, prevExtension);\n return {\n showExtensionChangeModal: false,\n value: newValue,\n };\n });\n\n this.submitModal(true);\n }\n\n handleExtensionChangeConfirm(): void {\n log.debug('handleExtensionChangeConfirm');\n this.setState({ showExtensionChangeModal: false });\n this.submitModal(true);\n }\n\n /**\n * Focus rename input and select name part for files, select all text for folders\n */\n focusRenameInput(): void {\n const input = this.inputRef.current;\n if (input) {\n const { type } = this.props;\n const { value } = input;\n const selectionEnd =\n type === 'directory' ? value.length : value.lastIndexOf('.');\n input.focus();\n input.setSelectionRange(\n 0,\n selectionEnd > 0 ? selectionEnd : value.length\n );\n }\n }\n\n submitModal(skipExtensionCheck = false): void {\n this.setState(({ prevExtension, value, path }) => {\n const { notifyOnExtensionChange, type } = this.props;\n log.debug('submitModal', prevExtension, value);\n const newExtension = FileUtils.getExtension(value);\n if (\n notifyOnExtensionChange &&\n !skipExtensionCheck &&\n prevExtension !== null &&\n prevExtension !== newExtension\n ) {\n return {\n isSubmitting: false,\n showExtensionChangeModal: true,\n newExtension,\n };\n }\n\n this.getValidationPromise(path, value, true)\n .then((newItemName: string) => {\n const { onSubmit } = this.props;\n onSubmit(`${path}${value}`);\n })\n .catch(e => {\n // Don't allow using existing names for folders\n // For files, prompt if they want to overwrite existing file\n if (e instanceof FileExistsError) {\n if (type !== 'directory' && e.info.type !== 'directory') {\n this.setState({ showOverwriteModal: true });\n return;\n }\n }\n throw e;\n })\n .catch(e => {\n if (PromiseUtils.isCanceled(e)) {\n this.setState({ isSubmitting: false });\n }\n throw e;\n })\n .catch(this.handleValidationError)\n .catch(NewItemModal.handleError);\n\n return {\n isSubmitting: true,\n showExtensionChangeModal: false,\n newExtension: undefined,\n };\n });\n }\n\n handleBreadcrumbSelect(directoryPath: string): void {\n this.setState({ path: directoryPath });\n }\n\n renderPathButtons(path: string): React.ReactNode {\n const pathAsList = path.split('/');\n pathAsList.pop();\n return pathAsList.map((basename, index) => {\n let directoryPath = '';\n for (let i = 0; i < index; i += 1) {\n directoryPath += `${pathAsList[i]}/`;\n }\n directoryPath += `${basename}/`;\n\n return (\n <React.Fragment key={directoryPath}>\n <Button\n kind=\"ghost\"\n className=\"directory-breadcrumbs\"\n onClick={() => this.handleBreadcrumbSelect(directoryPath)}\n aria-label={index === 0 ? 'home' : undefined}\n icon={index === 0 ? vsHome : undefined}\n >\n {basename}\n </Button>\n /\n </React.Fragment>\n );\n });\n }\n\n render(): React.ReactNode {\n const { storage, isOpen, onCancel, placeholder, title, type } = this.props;\n const {\n isSubmitting,\n path,\n showExtensionChangeModal,\n showOverwriteModal,\n validationError,\n value,\n prevExtension,\n newExtension,\n } = this.state;\n\n const isDirectory = type === 'directory';\n const prevExtensionText = FileUtils.fileExtensionToString(prevExtension);\n const newExtensionText = FileUtils.fileExtensionToString(newExtension);\n const submitBtnLabel = isDirectory ? 'Create' : 'Save';\n const nameInputLabel = isDirectory ? 'New folder name' : 'Save file as';\n\n return (\n <>\n <Modal\n isOpen={isOpen}\n toggle={onCancel}\n onOpened={this.handleModalOpened}\n className=\"modal-dialog-centered new-file-modal theme-bg-dark\"\n >\n <ModalHeader toggle={onCancel}>{title}</ModalHeader>\n <ModalBody>\n <form>\n <div className=\"d-flex flex-column new-file-modal-content\">\n <div className=\"flex-grow-0 mb-4\">\n <label htmlFor=\"file-name-input\">{nameInputLabel}</label>\n <input\n id=\"file-name-input\"\n type=\"text\"\n autoComplete=\"off\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n spellCheck=\"false\"\n className={classNames('form-control', {\n 'is-invalid': validationError,\n })}\n value={value}\n placeholder={placeholder}\n ref={this.inputRef}\n onKeyDown={this.handleKeyDown}\n onChange={this.handleChange}\n />\n {validationError && (\n <div className=\"invalid-feedback\">\n {NewItemModal.getValidationMessage(validationError)}\n </div>\n )}\n </div>\n <div className=\"flex-grow-0\">\n <label>Directory: /</label>\n {this.renderPathButtons(path)}\n </div>\n <div className=\"flex-grow-1 file-explorer-container\">\n <FileExplorer\n onSelect={this.handleSelect}\n storage={storage}\n focusedPath={path}\n />\n </div>\n </div>\n </form>\n </ModalBody>\n\n <ModalFooter>\n <button\n className=\"btn btn-outline-primary\"\n onClick={onCancel}\n type=\"button\"\n >\n Cancel\n </button>\n <button\n className=\"btn btn-primary\"\n disabled={isSubmitting}\n onClick={this.handleModalSubmit}\n type=\"button\"\n >\n {submitBtnLabel}\n </button>\n </ModalFooter>\n </Modal>\n <BasicModal\n isOpen={showOverwriteModal}\n headerText=\"Confirm overwrite\"\n bodyText=\"File with this name already exists, are you sure you want to overwrite it?\"\n onCancel={this.handleOverwriteCancel}\n onConfirm={this.handleOverwriteConfirm}\n cancelButtonText=\"Cancel\"\n confirmButtonText=\"Overwrite\"\n />\n <BasicModal\n isOpen={showExtensionChangeModal}\n headerText=\"Confirm extension change\"\n bodyText={`Are you sure you want to change extension from \"${prevExtensionText}\" to \"${newExtensionText}\"?`}\n onCancel={this.handleExtensionChangeCancel}\n onConfirm={this.handleExtensionChangeConfirm}\n cancelButtonText={`Keep \"${prevExtensionText}\"`}\n confirmButtonText={`Use \"${newExtensionText}\"`}\n />\n </>\n );\n }\n}\n\nexport default NewItemModal;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"NewItemModal.js","names":["React","PureComponent","PropTypes","classNames","Modal","ModalBody","ModalFooter","ModalHeader","BasicModal","Button","Pending","PromiseUtils","ValidationError","Log","vsHome","FontAwesomeIcon","FileExplorer","FileUtils","FileExistsError","FileNotFoundError","log","module","NewItemModal","getValidationMessage","err","info","type","handleError","isCanceled","error","constructor","props","createRef","Map","handleModalSubmit","bind","handleModalOpened","handleSelect","handleChange","handleKeyDown","handleValidationError","handleOverwriteCancel","handleOverwriteConfirm","handleExtensionChangeCancel","handleExtensionChangeConfirm","handleBreadcrumbSelect","defaultValue","path","hasPath","getPath","state","isSubmitting","prevExtension","getExtension","showExtensionChangeModal","showOverwriteModal","value","getBaseName","componentDidUpdate","prevProps","prevState","isOpen","prevIsOpen","resetValue","isInitialLoad","updateValidationStatus","componentWillUnmount","pending","cancel","cancelableValidatePromise","cancelableExistingItemPromise","setState","validationError","undefined","getValidationPromise","name","checkExisting","makeCancelable","validateName","storage","existingFile","e","newName","then","catch","focusRenameInput","submitModal","event","target","item","debug","makePath","filename","basename","key","stopPropagation","preventDefault","onCancel","onSubmit","newValue","replaceExtension","input","inputRef","current","selectionEnd","length","lastIndexOf","focus","setSelectionRange","skipExtensionCheck","notifyOnExtensionChange","newExtension","newItemName","directoryPath","renderPathButtons","pathAsList","split","pop","map","index","i","render","placeholder","title","isDirectory","prevExtensionText","fileExtensionToString","newExtensionText","submitBtnLabel","nameInputLabel","bool","string","isRequired","oneOf","func","shape"],"sources":["../src/NewItemModal.tsx"],"sourcesContent":["import React, { ChangeEvent, KeyboardEvent, PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport {\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n BasicModal,\n Button,\n} from '@deephaven/components';\nimport {\n CancelablePromise,\n Pending,\n PromiseUtils,\n ValidationError,\n} from '@deephaven/utils';\nimport Log from '@deephaven/log';\nimport { vsHome } from '@deephaven/icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport FileExplorer from './FileExplorer';\nimport FileStorage, { FileStorageItem, FileType } from './FileStorage';\nimport FileUtils from './FileUtils';\n\nimport './NewItemModal.scss';\nimport FileExistsError from './FileExistsError';\nimport FileNotFoundError from './FileNotFoundError';\n\nconst log = Log.module('NewItemModal');\n\nexport type NewItemModalProps = typeof NewItemModal.defaultProps & {\n isOpen: boolean;\n title: string;\n defaultValue: string;\n type: FileType;\n onSubmit: (name: string) => void;\n onCancel: () => void;\n placeholder: string;\n storage: FileStorage;\n notifyOnExtensionChange?: boolean;\n};\n\nexport type NewItemModalState = {\n path: string;\n isSubmitting: boolean;\n showExtensionChangeModal: boolean;\n showOverwriteModal: boolean;\n validationError?: ValidationError;\n value: string;\n prevExtension?: string;\n newExtension?: string;\n};\n\nclass NewItemModal extends PureComponent<NewItemModalProps, NewItemModalState> {\n static propTypes = {\n isOpen: PropTypes.bool,\n title: PropTypes.string.isRequired,\n defaultValue: PropTypes.string,\n type: PropTypes.oneOf(['file', 'directory']).isRequired,\n onSubmit: PropTypes.func,\n onCancel: PropTypes.func,\n placeholder: PropTypes.string,\n storage: PropTypes.shape({}).isRequired,\n notifyOnExtensionChange: PropTypes.bool,\n };\n\n static defaultProps = {\n isOpen: false,\n defaultValue: '/',\n notifyOnExtensionChange: false,\n placeholder: '',\n onSubmit: (name: string): void => undefined,\n onCancel: (): void => undefined,\n };\n\n static getValidationMessage(err: Error): string {\n if (err instanceof FileExistsError && err.info.type === 'directory') {\n return 'Error: Cannot overwrite existing directory';\n }\n return `${err}`;\n }\n\n static handleError(err: Error): void {\n if (!PromiseUtils.isCanceled(err)) {\n log.error(err);\n }\n }\n\n constructor(props: NewItemModalProps) {\n super(props);\n this.handleModalSubmit = this.handleModalSubmit.bind(this);\n this.handleModalOpened = this.handleModalOpened.bind(this);\n this.handleSelect = this.handleSelect.bind(this);\n this.handleChange = this.handleChange.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleValidationError = this.handleValidationError.bind(this);\n this.handleOverwriteCancel = this.handleOverwriteCancel.bind(this);\n this.handleOverwriteConfirm = this.handleOverwriteConfirm.bind(this);\n this.handleExtensionChangeCancel = this.handleExtensionChangeCancel.bind(\n this\n );\n this.handleExtensionChangeConfirm = this.handleExtensionChangeConfirm.bind(\n this\n );\n this.handleBreadcrumbSelect = this.handleBreadcrumbSelect.bind(this);\n\n const { defaultValue } = props;\n\n const path = FileUtils.hasPath(defaultValue)\n ? FileUtils.getPath(defaultValue)\n : '/';\n\n this.state = {\n isSubmitting: false,\n path,\n prevExtension: FileUtils.getExtension(defaultValue),\n showExtensionChangeModal: false,\n showOverwriteModal: false,\n value: FileUtils.getBaseName(defaultValue),\n };\n }\n\n componentDidUpdate(\n prevProps: NewItemModalProps,\n prevState: NewItemModalState\n ): void {\n const { isOpen } = this.props;\n const { isOpen: prevIsOpen } = prevProps;\n const { value, path } = this.state;\n if (!prevIsOpen && isOpen) {\n this.resetValue();\n this.isInitialLoad = true;\n }\n\n if (prevIsOpen && isOpen) {\n if (\n !this.isInitialLoad &&\n (path !== prevState.path || value !== prevState.value)\n ) {\n this.updateValidationStatus(path, value);\n }\n this.isInitialLoad = false;\n }\n }\n\n componentWillUnmount(): void {\n this.pending.cancel();\n if (this.cancelableValidatePromise) {\n this.cancelableValidatePromise.cancel();\n }\n if (this.cancelableExistingItemPromise) {\n this.cancelableExistingItemPromise.cancel();\n }\n }\n\n private inputRef = React.createRef<HTMLInputElement>();\n\n private cancelableValidatePromise?: CancelablePromise<string>;\n\n private cancelableExistingItemPromise?: CancelablePromise<FileStorageItem | null>;\n\n private pending = new Pending();\n\n private pathMap = new Map();\n\n private isInitialLoad = true;\n\n resetValue(): void {\n const { defaultValue } = this.props as NewItemModalProps;\n const path = FileUtils.hasPath(defaultValue)\n ? FileUtils.getPath(defaultValue)\n : '/';\n this.setState({\n path,\n value: FileUtils.getBaseName(defaultValue),\n validationError: undefined,\n prevExtension: FileUtils.getExtension(defaultValue),\n isSubmitting: false,\n });\n }\n\n getValidationPromise(\n path: string,\n name: string,\n checkExisting = false\n ): CancelablePromise<string> {\n if (this.cancelableValidatePromise) {\n this.cancelableValidatePromise.cancel();\n }\n this.cancelableValidatePromise = PromiseUtils.makeCancelable(\n this.validateName(path, name, checkExisting)\n );\n return this.cancelableValidatePromise;\n }\n\n async validateName(\n path: string,\n name: string,\n checkExisting: boolean\n ): Promise<string> {\n FileUtils.validateName(name);\n\n const { defaultValue, storage } = this.props;\n if (checkExisting) {\n const value = `${path}${name}`;\n if (value !== defaultValue) {\n try {\n const existingFile = await storage.info(value);\n throw new FileExistsError(existingFile);\n } catch (e) {\n if (!(e instanceof FileNotFoundError)) {\n throw e;\n }\n // There is no existing file, ignore\n }\n }\n }\n\n return name;\n }\n\n updateValidationStatus(path: string, newName: string): void {\n this.getValidationPromise(path, newName)\n .then(() => {\n this.setState({ validationError: undefined });\n })\n .catch(this.handleValidationError)\n .catch(NewItemModal.handleError);\n }\n\n handleModalOpened(): void {\n this.focusRenameInput();\n }\n\n handleModalSubmit(): void {\n this.submitModal();\n }\n\n handleChange(event: ChangeEvent<HTMLInputElement>): void {\n const { value } = event.target;\n this.setState({ value });\n }\n\n handleSelect(item: FileStorageItem): void {\n log.debug('handleSelect', item);\n if (item.type === 'directory') {\n this.setState({ path: FileUtils.makePath(item.filename) });\n } else {\n // Use selected item name and folder and focus the input\n const value = item.basename;\n const path = FileUtils.getPath(item.filename);\n this.setState({ value, path }, () => {\n this.focusRenameInput();\n });\n }\n }\n\n // eslint-disable-next-line class-methods-use-this\n handleKeyDown(e: KeyboardEvent): void {\n const { key } = e;\n e.stopPropagation();\n\n switch (key) {\n case 'Enter': {\n // Prevent form submit event\n e.preventDefault();\n this.submitModal();\n break;\n }\n case 'Escape': {\n e.preventDefault();\n const { onCancel } = this.props;\n onCancel();\n break;\n }\n default:\n }\n }\n\n handleValidationError(err: Error): void {\n if (!(err instanceof ValidationError)) {\n throw err;\n }\n log.debug('Validation error', err);\n this.setState({ validationError: err });\n }\n\n handleOverwriteCancel(): void {\n this.setState({\n showOverwriteModal: false,\n isSubmitting: false,\n });\n }\n\n handleOverwriteConfirm(): void {\n this.setState({ showOverwriteModal: false });\n const { onSubmit } = this.props;\n const { path, value } = this.state;\n log.debug('handleOverwriteConfirm', path, value);\n onSubmit(`${path}${value}`);\n }\n\n handleExtensionChangeCancel(): void {\n log.debug('handleExtensionChangeCancel');\n this.setState(({ value, prevExtension }) => {\n const newValue = FileUtils.replaceExtension(value, prevExtension);\n return {\n showExtensionChangeModal: false,\n value: newValue,\n };\n });\n\n this.submitModal(true);\n }\n\n handleExtensionChangeConfirm(): void {\n log.debug('handleExtensionChangeConfirm');\n this.setState({ showExtensionChangeModal: false });\n this.submitModal(true);\n }\n\n /**\n * Focus rename input and select name part for files, select all text for folders\n */\n focusRenameInput(): void {\n const input = this.inputRef.current;\n if (input) {\n const { type } = this.props;\n const { value } = input;\n const selectionEnd =\n type === 'directory' ? value.length : value.lastIndexOf('.');\n input.focus();\n input.setSelectionRange(\n 0,\n selectionEnd > 0 ? selectionEnd : value.length\n );\n }\n }\n\n submitModal(skipExtensionCheck = false): void {\n this.setState(({ prevExtension, value, path }) => {\n const { notifyOnExtensionChange, type } = this.props;\n log.debug('submitModal', prevExtension, value);\n const newExtension = FileUtils.getExtension(value);\n if (\n notifyOnExtensionChange &&\n !skipExtensionCheck &&\n prevExtension !== null &&\n prevExtension !== newExtension\n ) {\n return {\n isSubmitting: false,\n showExtensionChangeModal: true,\n newExtension,\n };\n }\n\n this.getValidationPromise(path, value, true)\n .then((newItemName: string) => {\n const { onSubmit } = this.props;\n onSubmit(`${path}${value}`);\n })\n .catch(e => {\n // Don't allow using existing names for folders\n // For files, prompt if they want to overwrite existing file\n if (e instanceof FileExistsError) {\n if (type !== 'directory' && e.info.type !== 'directory') {\n this.setState({ showOverwriteModal: true });\n return;\n }\n }\n throw e;\n })\n .catch(e => {\n if (PromiseUtils.isCanceled(e)) {\n this.setState({ isSubmitting: false });\n }\n throw e;\n })\n .catch(this.handleValidationError)\n .catch(NewItemModal.handleError);\n\n return {\n isSubmitting: true,\n showExtensionChangeModal: false,\n newExtension: undefined,\n };\n });\n }\n\n handleBreadcrumbSelect(directoryPath: string): void {\n this.setState({ path: directoryPath });\n }\n\n renderPathButtons(path: string): React.ReactNode {\n const pathAsList = path.split('/');\n pathAsList.pop();\n return pathAsList.map((basename, index) => {\n let directoryPath = '';\n for (let i = 0; i < index; i += 1) {\n directoryPath += `${pathAsList[i]}/`;\n }\n directoryPath += `${basename}/`;\n\n return (\n <React.Fragment key={directoryPath}>\n <Button\n kind=\"ghost\"\n className=\"directory-breadcrumbs\"\n onClick={() => this.handleBreadcrumbSelect(directoryPath)}\n aria-label={index === 0 ? 'Home' : undefined}\n icon={\n index === 0 ? (\n <FontAwesomeIcon icon={vsHome} transform=\"right-1.6\" />\n ) : undefined\n }\n tooltip={index === 0 ? 'Home' : undefined}\n >\n {basename}\n </Button>\n /\n </React.Fragment>\n );\n });\n }\n\n render(): React.ReactNode {\n const { storage, isOpen, onCancel, placeholder, title, type } = this.props;\n const {\n isSubmitting,\n path,\n showExtensionChangeModal,\n showOverwriteModal,\n validationError,\n value,\n prevExtension,\n newExtension,\n } = this.state;\n\n const isDirectory = type === 'directory';\n const prevExtensionText = FileUtils.fileExtensionToString(prevExtension);\n const newExtensionText = FileUtils.fileExtensionToString(newExtension);\n const submitBtnLabel = isDirectory ? 'Create' : 'Save';\n const nameInputLabel = isDirectory ? 'New folder name' : 'Save file as';\n\n return (\n <>\n <Modal\n isOpen={isOpen}\n toggle={onCancel}\n onOpened={this.handleModalOpened}\n className=\"modal-dialog-centered new-file-modal theme-bg-dark\"\n >\n <ModalHeader toggle={onCancel}>{title}</ModalHeader>\n <ModalBody>\n <form>\n <div className=\"d-flex flex-column new-file-modal-content\">\n <div className=\"flex-grow-0 mb-4\">\n <label htmlFor=\"file-name-input\">{nameInputLabel}</label>\n <input\n id=\"file-name-input\"\n type=\"text\"\n autoComplete=\"off\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n spellCheck=\"false\"\n className={classNames('form-control', {\n 'is-invalid': validationError,\n })}\n value={value}\n placeholder={placeholder}\n ref={this.inputRef}\n onKeyDown={this.handleKeyDown}\n onChange={this.handleChange}\n />\n {validationError && (\n <div className=\"invalid-feedback\">\n {NewItemModal.getValidationMessage(validationError)}\n </div>\n )}\n </div>\n <div className=\"flex-grow-0\">\n <label>Directory: /</label>\n {this.renderPathButtons(path)}\n </div>\n <div className=\"flex-grow-1 file-explorer-container\">\n <FileExplorer\n onSelect={this.handleSelect}\n storage={storage}\n focusedPath={path}\n />\n </div>\n </div>\n </form>\n </ModalBody>\n\n <ModalFooter>\n <Button kind=\"secondary\" onClick={onCancel}>\n Cancel\n </Button>\n <Button\n kind=\"primary\"\n disabled={isSubmitting}\n onClick={this.handleModalSubmit}\n >\n {submitBtnLabel}\n </Button>\n </ModalFooter>\n </Modal>\n <BasicModal\n isOpen={showOverwriteModal}\n headerText=\"Confirm overwrite\"\n bodyText=\"File with this name already exists, are you sure you want to overwrite it?\"\n onCancel={this.handleOverwriteCancel}\n onConfirm={this.handleOverwriteConfirm}\n cancelButtonText=\"Cancel\"\n confirmButtonText=\"Overwrite\"\n />\n <BasicModal\n isOpen={showExtensionChangeModal}\n headerText=\"Confirm extension change\"\n bodyText={`Are you sure you want to change extension from \"${prevExtensionText}\" to \"${newExtensionText}\"?`}\n onCancel={this.handleExtensionChangeCancel}\n onConfirm={this.handleExtensionChangeConfirm}\n cancelButtonText={`Keep \"${prevExtensionText}\"`}\n confirmButtonText={`Use \"${newExtensionText}\"`}\n />\n </>\n );\n }\n}\n\nexport default NewItemModal;\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deephaven/file-explorer",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.20.0",
|
|
4
4
|
"description": "Deephaven File Explorer React component",
|
|
5
5
|
"author": "Deephaven Data Labs LLC",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -30,11 +30,11 @@
|
|
|
30
30
|
"start": "cross-env NODE_ENV=development npm run watch"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@deephaven/components": "^0.
|
|
34
|
-
"@deephaven/icons": "^0.
|
|
35
|
-
"@deephaven/log": "^0.
|
|
36
|
-
"@deephaven/storage": "^0.
|
|
37
|
-
"@deephaven/utils": "^0.
|
|
33
|
+
"@deephaven/components": "^0.20.0",
|
|
34
|
+
"@deephaven/icons": "^0.20.0",
|
|
35
|
+
"@deephaven/log": "^0.20.0",
|
|
36
|
+
"@deephaven/storage": "^0.20.0",
|
|
37
|
+
"@deephaven/utils": "^0.20.0",
|
|
38
38
|
"@fortawesome/fontawesome-svg-core": "^6.1.1",
|
|
39
39
|
"@fortawesome/react-fontawesome": "^0.1.18",
|
|
40
40
|
"classnames": "^2.3.1",
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"react": "^17.0.0"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
|
-
"@deephaven/tsconfig": "^0.
|
|
48
|
+
"@deephaven/tsconfig": "^0.20.0"
|
|
49
49
|
},
|
|
50
50
|
"files": [
|
|
51
51
|
"dist"
|
|
@@ -53,5 +53,5 @@
|
|
|
53
53
|
"publishConfig": {
|
|
54
54
|
"access": "public"
|
|
55
55
|
},
|
|
56
|
-
"gitHead": "
|
|
56
|
+
"gitHead": "f1df977c5cc020a300015265ab20ad4c67ba51eb"
|
|
57
57
|
}
|