@deephaven/file-explorer 1.2.1-plotly-rc.3 → 1.3.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.
@@ -1 +1 @@
1
- {"version":3,"file":"FileUtils.js","names":["ValidationError","FileNotFoundError","MIME_TYPE","FileUtils","fileExists","fileStorage","name","_asyncToGenerator","info","e","fileExtensionToString","extension","arguments","length","undefined","concat","getDepth","_name$match","hasPath","Error","matches","match","getExtension","components","getBaseName","split","_components$pop","pop","_name$split$pop","getCopyFileName","originalName","extensionPosition","lastIndexOf","substring","copyName","getUniqueCopyFileName","getMimeType","toLowerCase","GROOVY","PYTHON","PYTHON_COMPILED","SCALA","PLAIN_TEXT","UNKNOWN","getParent","parts","join","getPath","startsWith","isPath","endsWith","makePath","replaceExtension","newExtension","index","nameWithoutExtension","extensionString","validateName","reservedNames","invalidCharsRegex","invalidCharLabels","Map","includes","test","_name$match$reduce$ma","_name$match2","reduce","acc","next","map","char","has","get","reducePaths","paths","folders","filter","path","some","folder","removeRoot","root","filename","addRoot"],"sources":["../src/FileUtils.ts"],"sourcesContent":["import { ValidationError } from '@deephaven/utils';\nimport FileNotFoundError from './FileNotFoundError';\nimport { type FileStorage } from './FileStorage';\n\n/**\n * A basic list of some common MIME types.\n */\nexport enum MIME_TYPE {\n GROOVY = 'text/x-groovy',\n PLAIN_TEXT = 'text/plain',\n PYTHON = 'text/x-python',\n PYTHON_COMPILED = 'application/x-python-code',\n SCALA = 'text/x-scala',\n UNKNOWN = '',\n}\n\n/**\n * Collection of utils for operating on file names\n */\nexport class FileUtils {\n static async fileExists(\n fileStorage: FileStorage,\n name: string\n ): Promise<boolean> {\n try {\n await fileStorage.info(name);\n return true;\n } catch (e) {\n // Should probably make sure it's a `FileNotFoundError`, and re-throw the error if it is not\n if (!(e instanceof FileNotFoundError)) {\n throw e;\n }\n return false;\n }\n }\n\n /**\n * Format file extension\n * @param extension File extension to format, defaults to empty string\n * @returns Formatted string - '' for no extension, '.' for empty extension, '.ext' for non-empty extension\n */\n static fileExtensionToString(extension = ''): string {\n return extension.length === 0 ? '' : `.${extension}`;\n }\n\n /**\n * Get the depth (how many directories deep it is) of the provided filename with path.\n * @param name The full file name to get the depth of\n */\n static getDepth(name: string): number {\n if (!FileUtils.hasPath(name)) {\n throw new Error(`Invalid path provided: ${name}`);\n }\n const matches = name.match(/\\//g) ?? [];\n return matches.length - 1;\n }\n\n /**\n * Get just the extension of file name.\n * Note that it just returns the last extension, so 'example.tar.gz' would just return 'gz'.\n * @param name The file name with or without path to get the extension of\n * @returns The file extension\n */\n static getExtension(name: string): string {\n const components = this.getBaseName(name).split('.');\n if (components.length > 1) {\n return components.pop() ?? '';\n }\n return '';\n }\n\n /**\n * Get the base name portion of the file, eg '/foo/bar.txt' => 'bar.txt'\n * @param name The full name including path of the file\n * @returns Just the file name part of the file\n */\n static getBaseName(name: string): string {\n return name.split('/').pop() ?? '';\n }\n\n /**\n * Create copy file name, used for copying unsaved files so doesn't have to be unique\n * @param originalName File name\n * @returns The file name of the copy\n */\n static getCopyFileName(originalName: string): string {\n const extensionPosition = originalName.lastIndexOf('.');\n let extension = null;\n let name = null;\n if (extensionPosition < 0) {\n // No extension\n name = originalName;\n } else {\n name = originalName.substring(0, extensionPosition);\n extension = originalName.substring(extensionPosition + 1);\n }\n const copyName = name ? `${name}-copy` : 'Copy';\n return extension !== null ? `${copyName}.${extension}` : copyName;\n }\n\n static async getUniqueCopyFileName(\n fileStorage: FileStorage,\n originalName: string\n ): Promise<string> {\n let copyName = FileUtils.getCopyFileName(originalName);\n // await in loop is fine here, this isn't a parallel task\n // eslint-disable-next-line no-await-in-loop\n while (await FileUtils.fileExists(fileStorage, copyName)) {\n copyName = FileUtils.getCopyFileName(copyName);\n }\n return copyName;\n }\n\n /**\n * Return a MIME type for the provided file\n * @param name The file name to get the type for\n * @returns A known MIME type if recognized\n */\n static getMimeType(name: string): MIME_TYPE {\n const extension = this.getExtension(name).toLowerCase();\n switch (extension) {\n case 'groovy':\n return MIME_TYPE.GROOVY;\n case 'py':\n return MIME_TYPE.PYTHON;\n case 'pyc':\n return MIME_TYPE.PYTHON_COMPILED;\n case 'scala':\n return MIME_TYPE.SCALA;\n case 'txt':\n return MIME_TYPE.PLAIN_TEXT;\n default:\n return MIME_TYPE.UNKNOWN;\n }\n }\n\n /**\n * Pop the last part of the filename component to return the parent path\n * @param name The file name to get the parent path of\n */\n static getParent(name: string): string {\n if (!FileUtils.hasPath(name)) {\n throw new Error(`Invalid name provided: ${name}`);\n }\n\n const parts = name.split('/');\n while (parts.pop() === '');\n if (parts.length === 0) {\n throw new Error(`No parent for path provided: ${name}`);\n }\n return `${parts.join('/')}/`;\n }\n\n /**\n * Get the path name portion of the file\n * @param name The full path with or without filename to get the path of\n * @returns Just the path with out the file name part, including trailing slash\n */\n static getPath(name: string): string {\n if (!FileUtils.hasPath(name)) {\n throw new Error(`Invalid filename provided: ${name}`);\n }\n const parts = name.split('/');\n parts.pop();\n return `${parts.join('/')}/`;\n }\n\n /**\n * Check if a given file name includes the full path\n * @param name The file name to check\n * @returns True if it's a full path, false otherwise\n */\n static hasPath(name: string): boolean {\n return name.startsWith('/');\n }\n\n /**\n * Check a given file name is a path\n * @param name The file name to check\n * @returns True if it's a full path, false otherwise\n */\n static isPath(name: string): boolean {\n return name.startsWith('/') && name.endsWith('/');\n }\n\n /**\n * Turns a directory file name into a path. Basically ensures there's a trailing slash\n * @param name The directory name to make a path\n */\n static makePath(name: string): string {\n if (!name.endsWith('/')) {\n return `${name}/`;\n }\n return name;\n }\n\n /**\n * Replace extension in the item name\n * @param name Name to replace the extension in\n * @param newExtension New extension, defaults to no extension\n */\n static replaceExtension(name: string, newExtension = ''): string {\n const index = name.lastIndexOf('.');\n const nameWithoutExtension = index > -1 ? name.substring(0, index) : name;\n const extensionString = FileUtils.fileExtensionToString(newExtension);\n return `${nameWithoutExtension}${extensionString}`;\n }\n\n /**\n * Validate the provided name. Throws an error if validation fails\n * @param name The item name to validate\n */\n static validateName(name: string): void {\n // Static checks\n const reservedNames = ['.', '..'];\n // Global flag to show all invalid chars, not just the first match\n const invalidCharsRegex = /[\\\\/\\0]/g;\n const invalidCharLabels = new Map([['\\0', 'null']]);\n\n if (!name) {\n throw new ValidationError(`Name cannot be empty`);\n }\n if (reservedNames.includes(name)) {\n throw new ValidationError(`\"${name}\" is a reserved name`);\n }\n if (invalidCharsRegex.test(name)) {\n throw new ValidationError(\n `Invalid characters in name: \"${\n name\n .match(invalidCharsRegex)\n // Filter out duplicates\n ?.reduce(\n (acc, next) => (acc.includes(next) ? acc : [...acc, next]),\n [] as string[]\n )\n .map(char =>\n invalidCharLabels.has(char) ? invalidCharLabels.get(char) : char\n )\n .join('\", \"') ?? ''\n }\"`\n );\n }\n }\n\n /**\n * Reduce the provided paths to the minimum selection.\n * Removes any nested files or directories if a parent is already selected.\n * @param paths The paths to reduce\n */\n static reducePaths(paths: string[]): string[] {\n const folders = paths.filter(path => FileUtils.isPath(path));\n return paths.filter(\n path =>\n !folders.some(folder => path !== folder && path.startsWith(folder))\n );\n }\n\n /**\n * Removes the root path from the provided file name. Throws if the filename does not start with root.\n * @param root The root to remove\n * @param filename Filename to remove the root path from\n * @returns Filename without the root\n */\n static removeRoot(root: string, filename: string): string {\n if (root.length === 0) {\n return filename;\n }\n if (!filename.startsWith(root)) {\n throw new Error(\n `Filename ${filename} does not start with expected root ${root}`\n );\n }\n\n return filename.substring(root.length);\n }\n\n /**\n * Add root to the filename as prefix\n * @param path Filename to prefix root to\n * @returns Filename with root at the prefix\n */\n static addRoot(root: string, path: string): string {\n return `${root}${path}`;\n }\n}\n\nexport default FileUtils;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"FileUtils.js","names":["ValidationError","FileNotFoundError","MIME_TYPE","FileUtils","fileExists","fileStorage","name","_asyncToGenerator","info","e","fileExtensionToString","extension","arguments","length","undefined","concat","getDepth","_name$match","hasPath","Error","matches","match","getExtension","components","getBaseName","split","_components$pop","pop","_name$split$pop","getCopyFileName","originalName","extensionPosition","lastIndexOf","substring","copyName","getUniqueCopyFileName","getMimeType","toLowerCase","GROOVY","PYTHON","PYTHON_COMPILED","SCALA","PLAIN_TEXT","UNKNOWN","getParent","parts","join","getPath","startsWith","isPath","endsWith","makePath","replaceExtension","newExtension","index","nameWithoutExtension","extensionString","validateName","reservedNames","invalidCharsRegex","invalidCharLabels","Map","includes","test","_name$match$reduce$ma","_name$match2","reduce","acc","next","map","char","has","get","reducePaths","paths","folders","filter","path","some","folder","removeRoot","root","filename","addRoot"],"sources":["../src/FileUtils.ts"],"sourcesContent":["import { ValidationError } from '@deephaven/utils';\nimport FileNotFoundError from './FileNotFoundError';\nimport { type FileStorage } from './FileStorage';\n\n/**\n * A basic list of some common MIME types.\n */\nexport enum MIME_TYPE {\n GROOVY = 'text/x-groovy',\n PLAIN_TEXT = 'text/plain',\n PYTHON = 'text/x-python',\n PYTHON_COMPILED = 'application/x-python-code',\n SCALA = 'text/x-scala',\n UNKNOWN = '',\n}\n\n/**\n * Collection of utils for operating on file names\n */\nexport class FileUtils {\n static async fileExists(\n fileStorage: FileStorage,\n name: string\n ): Promise<boolean> {\n try {\n await fileStorage.info(name);\n return true;\n } catch (e) {\n // Should probably make sure it's a `FileNotFoundError`, and re-throw the error if it is not\n if (!(e instanceof FileNotFoundError)) {\n throw e;\n }\n return false;\n }\n }\n\n /**\n * Format file extension\n * @param extension File extension to format, defaults to empty string\n * @returns Formatted string - '' for no extension, '.' for empty extension, '.ext' for non-empty extension\n */\n static fileExtensionToString(extension = ''): string {\n return extension.length === 0 ? '' : `.${extension}`;\n }\n\n /**\n * Get the depth (how many directories deep it is) of the provided filename with path.\n * @param name The full file name to get the depth of\n */\n static getDepth(name: string): number {\n if (!FileUtils.hasPath(name)) {\n throw new Error(`Invalid path provided: ${name}`);\n }\n const matches = name.match(/\\//g) ?? [];\n return matches.length - 1;\n }\n\n /**\n * Get just the extension of file name.\n * Note that it just returns the last extension, so 'example.tar.gz' would just return 'gz'.\n * @param name The file name with or without path to get the extension of\n * @returns The file extension\n */\n static getExtension(name: string): string {\n const components = this.getBaseName(name).split('.');\n if (components.length > 1) {\n return components.pop() ?? '';\n }\n return '';\n }\n\n /**\n * Get the base name portion of the file, eg '/foo/bar.txt' => 'bar.txt'\n * @param name The full name including path of the file\n * @returns Just the file name part of the file\n */\n static getBaseName(name: string): string {\n return name.split('/').pop() ?? '';\n }\n\n /**\n * Create copy file name, used for copying unsaved files so doesn't have to be unique\n * @param originalName File name\n * @returns The file name of the copy\n */\n static getCopyFileName(originalName: string): string {\n const extensionPosition = originalName.lastIndexOf('.');\n let extension = null;\n let name = null;\n if (extensionPosition < 0) {\n // No extension\n name = originalName;\n } else {\n name = originalName.substring(0, extensionPosition);\n extension = originalName.substring(extensionPosition + 1);\n }\n const copyName = name ? `${name}-copy` : 'Copy';\n return extension !== null ? `${copyName}.${extension}` : copyName;\n }\n\n static async getUniqueCopyFileName(\n fileStorage: FileStorage,\n originalName: string\n ): Promise<string> {\n let copyName = FileUtils.getCopyFileName(originalName);\n // await in loop is fine here, this isn't a parallel task\n // eslint-disable-next-line no-await-in-loop\n while (await FileUtils.fileExists(fileStorage, copyName)) {\n copyName = FileUtils.getCopyFileName(copyName);\n }\n return copyName;\n }\n\n /**\n * Return a MIME type for the provided file\n * @param name The file name to get the type for\n * @returns A known MIME type if recognized\n */\n static getMimeType(name: string): MIME_TYPE {\n const extension = this.getExtension(name).toLowerCase();\n switch (extension) {\n case 'groovy':\n return MIME_TYPE.GROOVY;\n case 'py':\n return MIME_TYPE.PYTHON;\n case 'pyc':\n return MIME_TYPE.PYTHON_COMPILED;\n case 'scala':\n return MIME_TYPE.SCALA;\n case 'txt':\n return MIME_TYPE.PLAIN_TEXT;\n default:\n return MIME_TYPE.UNKNOWN;\n }\n }\n\n /**\n * Pop the last part of the filename component to return the parent path\n * @param name The file name to get the parent path of\n */\n static getParent(name: string): string {\n if (!FileUtils.hasPath(name)) {\n throw new Error(`Invalid name provided: ${name}`);\n }\n\n const parts = name.split('/');\n while (parts.pop() === '');\n if (parts.length === 0) {\n throw new Error(`No parent for path provided: ${name}`);\n }\n return `${parts.join('/')}/`;\n }\n\n /**\n * Get the path name portion of the file\n * @param name The full path with or without filename to get the path of\n * @returns Just the path with out the file name part, including trailing slash\n */\n static getPath(name: string): string {\n if (!FileUtils.hasPath(name)) {\n throw new Error(`Invalid filename provided: ${name}`);\n }\n const parts = name.split('/');\n parts.pop();\n return `${parts.join('/')}/`;\n }\n\n /**\n * Check if a given file name includes the full path\n * @param name The file name to check\n * @returns True if it's a full path, false otherwise\n */\n static hasPath(name: string): boolean {\n return name.startsWith('/');\n }\n\n /**\n * Check a given file name is a path\n * @param name The file name to check\n * @returns True if it's a full path, false otherwise\n */\n static isPath(name: string): boolean {\n return name.startsWith('/') && name.endsWith('/');\n }\n\n /**\n * Turns a directory file name into a path. Basically ensures there's a trailing slash\n * @param name The directory name to make a path\n */\n static makePath(name: string): string {\n if (!name.endsWith('/')) {\n return `${name}/`;\n }\n return name;\n }\n\n /**\n * Replace extension in the item name\n * @param name Name to replace the extension in\n * @param newExtension New extension, defaults to no extension\n */\n static replaceExtension(name: string, newExtension = ''): string {\n const index = name.lastIndexOf('.');\n const nameWithoutExtension = index > -1 ? name.substring(0, index) : name;\n const extensionString = FileUtils.fileExtensionToString(newExtension);\n return `${nameWithoutExtension}${extensionString}`;\n }\n\n /**\n * Validate the provided name. Throws an error if validation fails\n * @param name The item name to validate\n */\n static validateName(name: string): void {\n // Static checks\n const reservedNames = ['.', '..'];\n // Global flag to show all invalid chars, not just the first match\n const invalidCharsRegex = /[\\\\/\\0]/g;\n const invalidCharLabels = new Map([['\\0', 'null']]);\n\n if (!name) {\n throw new ValidationError(`Name cannot be empty`);\n }\n if (reservedNames.includes(name)) {\n throw new ValidationError(`\"${name}\" is a reserved name`);\n }\n if (invalidCharsRegex.test(name)) {\n throw new ValidationError(\n `Invalid characters in name: \"${\n name\n .match(invalidCharsRegex)\n // Filter out duplicates\n ?.reduce(\n (acc, next) => (acc.includes(next) ? acc : [...acc, next]),\n [] as string[]\n )\n .map(char =>\n invalidCharLabels.has(char) ? invalidCharLabels.get(char) : char\n )\n .join('\", \"') ?? ''\n }\"`\n );\n }\n }\n\n /**\n * Reduce the provided paths to the minimum selection.\n * Removes any nested files or directories if a parent is already selected.\n * @param paths The paths to reduce\n */\n static reducePaths(paths: string[]): string[] {\n const folders = paths.filter(path => FileUtils.isPath(path));\n return paths.filter(\n path =>\n !folders.some(folder => path !== folder && path.startsWith(folder))\n );\n }\n\n /**\n * Removes the root path from the provided file name. Throws if the filename does not start with root.\n * @param root The root to remove\n * @param filename Filename to remove the root path from\n * @returns Filename without the root\n */\n static removeRoot(root: string, filename: string): string {\n if (root.length === 0) {\n return filename;\n }\n if (!filename.startsWith(root)) {\n throw new Error(\n `Filename ${filename} does not start with expected root ${root}`\n );\n }\n\n return filename.substring(root.length);\n }\n\n /**\n * Add root to the filename as prefix\n * @param path Filename to prefix root to\n * @returns Filename with root at the prefix\n */\n static addRoot(root: string, path: string): string {\n return `${root}${path}`;\n }\n}\n\nexport default FileUtils;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sourceRoot":"","sources":["../../../node_modules/@deephaven/components/scss/custom.scss","../../../node_modules/@deephaven/components/scss/bootstrap_overrides.scss","../src/NewItemModal.scss"],"names":[],"mappings":"AAAA;AC6LA;ACvLE;EACE,ODWO;;ACRT;EACE;EACA,eD+IY;EC9IZ;EACA,QAXe;EAYf;EACA;;AAGF;EACE,OD2EM","file":"NewItemModal.css","sourcesContent":["/* stylelint-disable scss/at-import-no-partial-leading-underscore */\n// Consumers should be able to resolve bootstrap/ to node_modules/bootstrap\n\n//Make bootstrap functions available for use in overrides\n@import 'bootstrap/scss/_functions.scss';\n@import './bootstrap_overrides.scss';\n\n//_variable imports come after bootstrap default overrides,\n// makes all other variables and mixins from bootstrap available\n/// with just importing customer.scss\n@import 'bootstrap/scss/_variables.scss';\n@import 'bootstrap/scss/_mixins.scss';\n\n//New variables come after imports\n@import './new_variables.scss';\n@import './util.scss';\n","// Styling overrides for bootstrap\n@use 'sass:map';\n\n// Override / set color variables\n$red: var(--dh-color-visual-red);\n$orange: var(--dh-color-visual-orange);\n$yellow: var(--dh-color-visual-yellow);\n$green: var(--dh-color-visual-green);\n$blue: var(--dh-color-visual-blue);\n$purple: var(--dh-color-visual-purple);\n\n// Fallback colors are used if theme isn't loaded\n// this is required for error messages if the API doesn't load\n\n//Define our Gray scale\n$gray-100: var(--dh-color-gray-900, #fcfcfa);\n$gray-200: var(--dh-color-gray-800);\n$gray-300: var(--dh-color-gray-700);\n$gray-400: var(--dh-color-gray-600);\n$gray-500: var(--dh-color-gray-500);\n// intentional duplicate, scale doesn't line up otherwise\n// as we have gray-850 and spectrum doesn't and it is needed\n$gray-600: var(--dh-color-gray-500);\n$gray-700: var(--dh-color-gray-400);\n$gray-800: var(--dh-color-gray-300);\n$gray-850: var(--dh-color-gray-200);\n$gray-900: var(--dh-color-gray-75);\n$black: var(--dh-color-black, #1a171a);\n$white: var(--dh-color-white, #f0f0ee);\n\n//Define some UI colors\n$interfacegray: var(--dh-color-content-bg, #2d2a2e);\n$interfaceblue: var(--dh-color-accent-bg);\n$interfacewhite: $white;\n$interfaceblack: $black;\n$content-bg: var(--dh-color-content-bg, #2d2a2e);\n$background: var(--dh-color-bg, #1a171a);\n$foreground: var(--dh-color-fg, #f0f0ee);\n\n// Extend default Bootstrap $grays map\n$grays-custom: (\n '850': $gray-850,\n);\n$grays: () !default;\n$grays: map-merge($grays, $grays-custom);\n\n// Extend default Bootstrap $colors map\n$colors-custom: (\n 'black': $black,\n);\n$colors: () !default;\n$colors: map-merge($colors, $colors-custom);\n\n// Override default Bootstrap $theme-colors map by mapping each key to itself.\n// These will then be re-mapped inside of `button-outline-variant` and\n// `button-outline-variant` mixins in `bootstrap_override_mixins_buttons.scss`\n$theme-colors-self-map: ();\n@each $key\n in (\n 'primary',\n 'secondary',\n 'success',\n 'info',\n 'warning',\n 'danger',\n 'light',\n 'dark'\n )\n{\n $theme-colors-self-map: map.set($theme-colors-self-map, $key, $key);\n}\n$theme-colors: () !default;\n$theme-colors: map-merge($theme-colors, $theme-colors-self-map);\n\n// Used by bootstrap_override_mixins_buttons.scss to map Bootstrap colors to\n// DH semantic colors\n$bootstrap-dh-semantic-map: (\n 'primary': 'accent',\n 'secondary': 'neutral',\n 'success': 'positive',\n 'info': 'info',\n 'warning': 'notice',\n 'danger': 'negative',\n // We shouldn't be using these, but mapping so they work with our custom\n // `color-yiq` mixin. If we find a way to remove $light + $dark that are\n // defined in Bootstrap _variables.scss, we should remove these\n 'light': 'neutral',\n 'dark': 'neutral',\n);\n\n//Set default colors\n$body-bg: $black;\n$body-color: $interfacewhite;\n\n// Set brand colors\n$primary: var(--dh-color-accent-bg);\n$primary-hover: var(--dh-color-accent-hover-bg);\n$primary-dark: var(--dh-color-accent-down-bg);\n$secondary: var(--dh-color-neutral-bg);\n$secondary-hover: var(--dh-color-neutral-hover-bg);\n$success: $green;\n$info: $yellow;\n$warning: $orange;\n$danger: var(--dh-color-negative-bg);\n$danger-hover: var(--dh-color-negative-hover-bg);\n// We really don't want to use $light or $dark variables, but Bootstrap defines\n// them in _variables.scss. Explicitly setting them to ensure we are in control\n// of their values. If we can find a way to remove them, we should\n$light: var(--dh-color-gray-light);\n$dark: var(--dh-color-gray-dark);\n// Bootstrap doesn't define $mid, and we want to move away from this particular\n// semantic. Should be deleted by #1635\n$mid: var(--dh-color-gray-mid);\n\n$semantic-colors: (\n 'primary-hover': $primary-hover,\n 'primary-dark': $primary-dark,\n 'mid': $mid,\n 'content-bg': $interfacegray,\n 'background': $interfaceblack,\n 'foreground': $interfacewhite,\n 'secondary-hover': $secondary-hover,\n 'danger-hover': $danger-hover,\n);\n\n$component-active-bg: $primary;\n$theme-color-interval: 9%;\n$yiq-contrasted-threshold: 180;\n\n// Override fonts\n$font-family-sans-serif:\n 'Fira Sans',\n -apple-system,\n blinkmacsystemfont,\n 'Segoe UI',\n 'Roboto',\n 'Helvetica Neue',\n arial,\n sans-serif; //fira sans then native system ui fallbacks\n$font-family-monospace: 'Fira Mono', menlo, monaco, consolas, 'Liberation Mono',\n 'Courier New', monospace;\n$font-family-base: $font-family-sans-serif;\n\n$headings-font-weight: 400;\n\n//Text overides\n$text-muted: $gray-400;\n\n//Style Selection highlight color\n$text-select-color: var(--dh-color-text-highlight);\n\n//Grid variables, same value as default just making easily accessible\n$grid-gutter-width: 30px;\n\n//Visual Overrides\n$border-radius: 4px;\n$box-shadow: 0 0.1rem 1rem var(--dh-color-dropshadow);\n\n//Override Btn\n$btn-border-radius: 4rem;\n$btn-padding-x: 1.5rem;\n$btn-transition:\n color 0.12s ease-in-out,\n background-color 0.12s ease-in-out,\n border-color 0.12s ease-in-out,\n box-shadow 0.12s ease-in-out; //default 0.15 is too long\n$btn-border-width: 2px;\n$btn-font-weight: var(--spectrum-global-font-weight-bold);\n$btn-line-height: 1.3;\n\n//Override Inputs\n$input-bg: var(--dh-color-input-bg);\n$input-disabled-bg: var(--dh-color-input-disabled-bg);\n$input-color: var(--dh-color-input-fg);\n$input-border-color: var(--dh-color-input-border);\n$input-placeholder-color: var(--dh-color-input-placeholder);\n$input-focus-border-color: var(--dh-color-input-focus-border);\n\n$input-btn-focus-width: 0.2rem;\n$input-btn-focus-color: color-mix(\n in srgb,\n var(--dh-color-accent) 35%,\n transparent\n);\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color;\n$input-btn-line-height: 1.3;\n// Bootstrap uses a calc expression to determine the input height (calc(line-height + 2*padding-y + border)).\n// The padding-y value has to be in rem to match units as it is a SASS calc.\n// Using 0.42145rem with 1.3 line height gets us to spectrum's 32px.\n/* stylelint-disable-next-line number-max-precision */\n$input-btn-padding-y: 0.42145rem;\n\n//checkbox\n$custom-control-indicator-bg: var(--dh-color-input-bg);\n$custom-control-indicator-border-color: var(--dh-color-input-border);\n$custom-checkbox-indicator-border-radius: 2px;\n$custom-control-indicator-border-width: 2px;\n$custom-control-indicator-active-bg: var(--dh-color-input-bg);\n$custom-control-indicator-active-border-color: var(--dh-color-input-fg);\n$custom-control-indicator-checked-bg: var(--dh-color-input-fg);\n$custom-control-indicator-checked-color: black; // used as mask fill color\n$custom-checkbox-indicator-indeterminate-bg: var(--dh-color-input-fg);\n$custom-control-indicator-bg-size: 75% 75%;\n$custom-control-indicator-disabled-bg: var(--dh-color-input-disabled-bg);\n$custom-control-indicator-checked-disabled-bg: var(\n --dh-color-input-disabled-bg\n);\n$custom-control-label-disabled-color: var(--dh-color-input-disabled-fg);\n\n// The $custom-select-indicator variable is used by Bootstrap to provide the\n// icon for the select dropdown. Inline svgs can't use CSS variables, so we hard\n// code the color to #929192 (the default value of --dh-color-gray-600). PR #1651\n// overrides this icon altogether for known dropdowns, so technically we may not\n// need this, but it's here in case there are any remaining instances.\n$custom-select-indicator-color: #929192;\n$custom-select-bg: var(--dh-color-selector-bg);\n$custom-select-bg-size: 16px 16px;\n//dhSort icon encoded\n$custom-select-indicator: str-replace(\n url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='#{$custom-select-indicator-color}' d='M4 7l-.4-.8 4-3.7h.8l4 3.7-.4.8H4zm0 2l-.4.8 4 3.7h.8l4-3.7L12 9H4z'/%3E%3C/svg%3E\"),\n '#',\n '%23'\n);\n$custom-select-focus-box-shadow: $input-btn-focus-box-shadow;\n$custom-select-disabled-color: $gray-500;\n$custom-select-disabled-bg: $gray-800;\n\n//modal\n$modal-content-bg: $content-bg;\n$modal-content-border-width: 0;\n$modal-md: 550px;\n$close-color: var(--dh-color-text);\n$close-text-shadow: none;\n\n// Toast notification\n$toast-bg: var(--dh-color-accent-100);\n$toast-color: var(--dh-color-text);\n$toast-error-bg: var(--dh-color-negative-bg);\n$toast-error-color: var(--dh-color-text);\n\n//tooltips\n$tooltip-bg: var(--dh-color-tooltip-bg);\n$tooltip-color: var(--dh-color-tooltip-fg);\n$tooltip-box-shadow: 0 0.1rem 1.5rem 0.1rem var(--dh-color-tooltip-box-shadow);\n\n//drowdowns\n$dropdown-bg: $gray-600;\n$dropdown-link-color: $foreground;\n$dropdown-link-hover-color: $foreground;\n$dropdown-link-hover-bg: var(--dh-color-item-list-hover-bg);\n$dropdown-divider-bg: $gray-700;\n\n//context menus\n$contextmenu-bg: var(--dh-color-popover-bg);\n$contextmenu-color: var(--dh-color-text);\n$contextmenu-disabled-color: var(--dh-color-input-disabled-fg);\n$contextmenu-keyboard-selected-bg: var(--dh-color-keyboard-selected-bg);\n$contextmenu-selected-bg: var(--dh-color-item-list-hover-bg);\n$contextmenu-selected-color: var(--dh-color-item-list-selected-fg);\n\n//hr\n$hr-border-color: var(--dh-color-hr);\n\n//links\n$link-color: $gray-400;\n$link-hover-color: $foreground;\n\n//progress-bar\n$progress-bg: $gray-600;\n$progress-border-radius: 1rem;\n\n// Set global options\n$enable-shadows: false;\n$enable-gradients: false;\n$enable-print-styles: false; //I don't think anyone should expect to \"print\" this app.\n\n// Transition times\n$transition: 0.15s;\n$transition-mid: 0.2s;\n$transition-long: 0.3s;\n$transition-slow: 0.6s;\n\n//form-validation icon, uses vsWarning icon encoded here as svg\n$form-feedback-icon-invalid-color: $danger;\n$form-feedback-icon-invalid: str-replace(\n url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cg fill='none'%3E%3Cg fill='#{$form-feedback-icon-invalid-color}'%3E%3Cpath d='M7.56 1h.88l6.54 12.26-.44.74H1.44L1 13.26 7.56 1zM8 2.28 2.28 13H13.7L8 2.28zM8.625 12v-1h-1.25v1h1.25zm-1.25-2V6h1.25v4h-1.25z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E \"),\n '#',\n '%23'\n);\n\n// This section of variables is not consumed directly by DH, but they need to be\n// defined for sass to compile _variables\n$table-dark-bg: $gray-800;\n$table-dark-accent-bg: var(--dh-color-highlight-hover);\n$table-dark-hover-bg: var(--dh-color-highlight-active);\n$table-dark-border-color: $gray-700;\n$popover-bg: var(--dh-color-tooltip-bg);\n$popover-border-color: var(--dh-color-overlay-modal-bg);\n$popover-header-bg: #000;\n$popover-arrow-outer-color: var(--dh-color-dropshadow);\n$custom-range-thumb-active-bg: var(--dh-color-accent-1100);\n","@import '@deephaven/components/scss/custom.scss';\n\n$min-modal-content-height: 250px;\n$file-list-height: 250px;\n\n.new-file-modal-content {\n .new-item-destination {\n color: $text-muted;\n }\n\n .file-explorer-container {\n border: 1px solid $input-border-color;\n border-radius: $input-border-radius;\n overflow: hidden;\n height: $file-list-height;\n display: flex;\n flex-direction: column;\n }\n\n .directory-breadcrumbs {\n color: $primary;\n }\n}\n"]}
1
+ {"version":3,"sourceRoot":"","sources":["../../../node_modules/@deephaven/components/scss/custom.scss","../../../node_modules/@deephaven/components/scss/bootstrap_overrides.scss","../src/NewItemModal.scss"],"names":[],"mappings":"AAAA;AC6LA;ACvLE;EACE,ODWO;;ACRT;EACE;EACA,eD+IY;EC9IZ;EACA,QAXe;EAYf;EACA;;AAGF;EACE,OD2EM","file":"NewItemModal.css","sourcesContent":["/* stylelint-disable scss/at-import-no-partial-leading-underscore */\n// Consumers should be able to resolve bootstrap/ to node_modules/bootstrap\n\n//Make bootstrap functions available for use in overrides\n@import 'bootstrap/scss/_functions.scss';\n@import './bootstrap_overrides.scss';\n\n//_variable imports come after bootstrap default overrides,\n// makes all other variables and mixins from bootstrap available\n/// with just importing customer.scss\n@import 'bootstrap/scss/_variables.scss';\n@import 'bootstrap/scss/_mixins.scss';\n\n//New variables come after imports\n@import './new_variables.scss';\n@import './util.scss';\n","// Styling overrides for bootstrap\n@use 'sass:map';\n\n// Override / set color variables\n$red: var(--dh-color-visual-red);\n$orange: var(--dh-color-visual-orange);\n$yellow: var(--dh-color-visual-yellow);\n$green: var(--dh-color-visual-green);\n$blue: var(--dh-color-visual-blue);\n$purple: var(--dh-color-visual-purple);\n\n// Fallback colors are used if theme isn't loaded\n// this is required for error messages if the API doesn't load\n\n//Define our Gray scale\n$gray-100: var(--dh-color-gray-900, #fcfcfa);\n$gray-200: var(--dh-color-gray-800);\n$gray-300: var(--dh-color-gray-700);\n$gray-400: var(--dh-color-gray-600);\n$gray-500: var(--dh-color-gray-500);\n// intentional duplicate, scale doesn't line up otherwise\n// as we have gray-850 and spectrum doesn't and it is needed\n$gray-600: var(--dh-color-gray-500);\n$gray-700: var(--dh-color-gray-400);\n$gray-800: var(--dh-color-gray-300);\n$gray-850: var(--dh-color-gray-200);\n$gray-900: var(--dh-color-gray-75);\n$black: var(--dh-color-black, #1a171a);\n$white: var(--dh-color-white, #f0f0ee);\n\n//Define some UI colors\n$interfacegray: var(--dh-color-content-bg, #2d2a2e);\n$interfaceblue: var(--dh-color-accent-bg);\n$interfacewhite: $white;\n$interfaceblack: $black;\n$content-bg: var(--dh-color-content-bg, #2d2a2e);\n$background: var(--dh-color-bg, #1a171a);\n$foreground: var(--dh-color-fg, #f0f0ee);\n\n// Extend default Bootstrap $grays map\n$grays-custom: (\n '850': $gray-850,\n);\n$grays: () !default;\n$grays: map-merge($grays, $grays-custom);\n\n// Extend default Bootstrap $colors map\n$colors-custom: (\n 'black': $black,\n);\n$colors: () !default;\n$colors: map-merge($colors, $colors-custom);\n\n// Override default Bootstrap $theme-colors map by mapping each key to itself.\n// These will then be re-mapped inside of `button-outline-variant` and\n// `button-outline-variant` mixins in `bootstrap_override_mixins_buttons.scss`\n$theme-colors-self-map: ();\n@each $key\n in (\n 'primary',\n 'secondary',\n 'success',\n 'info',\n 'warning',\n 'danger',\n 'light',\n 'dark'\n )\n{\n $theme-colors-self-map: map.set($theme-colors-self-map, $key, $key);\n}\n$theme-colors: () !default;\n$theme-colors: map-merge($theme-colors, $theme-colors-self-map);\n\n// Used by bootstrap_override_mixins_buttons.scss to map Bootstrap colors to\n// DH semantic colors\n$bootstrap-dh-semantic-map: (\n 'primary': 'accent',\n 'secondary': 'neutral',\n 'success': 'positive',\n 'info': 'info',\n 'warning': 'notice',\n 'danger': 'negative',\n // We shouldn't be using these, but mapping so they work with our custom\n // `color-yiq` mixin. If we find a way to remove $light + $dark that are\n // defined in Bootstrap _variables.scss, we should remove these\n 'light': 'neutral',\n 'dark': 'neutral',\n);\n\n//Set default colors\n$body-bg: $black;\n$body-color: $interfacewhite;\n\n// Set brand colors\n$primary: var(--dh-color-accent-bg);\n$primary-hover: var(--dh-color-accent-hover-bg);\n$primary-dark: var(--dh-color-accent-down-bg);\n$secondary: var(--dh-color-neutral-bg);\n$secondary-hover: var(--dh-color-neutral-hover-bg);\n$success: $green;\n$info: $yellow;\n$warning: $orange;\n$danger: var(--dh-color-negative-bg);\n$danger-hover: var(--dh-color-negative-hover-bg);\n// We really don't want to use $light or $dark variables, but Bootstrap defines\n// them in _variables.scss. Explicitly setting them to ensure we are in control\n// of their values. If we can find a way to remove them, we should\n$light: var(--dh-color-gray-light);\n$dark: var(--dh-color-gray-dark);\n// Bootstrap doesn't define $mid, and we want to move away from this particular\n// semantic. Should be deleted by #1635\n$mid: var(--dh-color-gray-mid);\n\n$semantic-colors: (\n 'primary-hover': $primary-hover,\n 'primary-dark': $primary-dark,\n 'mid': $mid,\n 'content-bg': $interfacegray,\n 'background': $interfaceblack,\n 'foreground': $interfacewhite,\n 'secondary-hover': $secondary-hover,\n 'danger-hover': $danger-hover,\n);\n\n$component-active-bg: $primary;\n$theme-color-interval: 9%;\n$yiq-contrasted-threshold: 180;\n\n// Override fonts\n$font-family-sans-serif:\n 'Fira Sans',\n -apple-system,\n blinkmacsystemfont,\n 'Segoe UI',\n 'Roboto',\n 'Helvetica Neue',\n arial,\n sans-serif; //fira sans then native system ui fallbacks\n$font-family-monospace: 'Fira Mono', menlo, monaco, consolas, 'Liberation Mono',\n 'Courier New', monospace;\n$font-family-base: $font-family-sans-serif;\n\n$headings-font-weight: 400;\n\n//Text overides\n$text-muted: $gray-400;\n\n//Style Selection highlight color\n$text-select-color: var(--dh-color-text-highlight);\n\n//Grid variables, same value as default just making easily accessible\n$grid-gutter-width: 30px;\n\n//Visual Overrides\n$border-radius: 4px;\n$box-shadow: 0 0.1rem 1rem var(--dh-color-dropshadow);\n\n//Override Btn\n$btn-border-radius: 4rem;\n$btn-padding-x: 1.5rem;\n$btn-transition:\n color 0.12s ease-in-out,\n background-color 0.12s ease-in-out,\n border-color 0.12s ease-in-out,\n box-shadow 0.12s ease-in-out; //default 0.15 is too long\n$btn-border-width: 2px;\n$btn-font-weight: var(--spectrum-global-font-weight-bold);\n$btn-line-height: 1.3;\n\n//Override Inputs\n$input-bg: var(--dh-color-input-bg);\n$input-disabled-bg: var(--dh-color-input-disabled-bg);\n$input-color: var(--dh-color-input-fg);\n$input-border-color: var(--dh-color-input-border);\n$input-placeholder-color: var(--dh-color-input-placeholder);\n$input-focus-border-color: var(--dh-color-input-focus-border);\n\n$input-btn-focus-width: 0.2rem;\n$input-btn-focus-color: color-mix(\n in srgb,\n var(--dh-color-accent) 35%,\n transparent\n);\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color;\n$input-btn-line-height: 1.3;\n// Bootstrap uses a calc expression to determine the input height (calc(line-height + 2*padding-y + border)).\n// The padding-y value has to be in rem to match units as it is a SASS calc.\n// Using 0.42145rem with 1.3 line height gets us to spectrum's 32px.\n/* stylelint-disable-next-line number-max-precision */\n$input-btn-padding-y: 0.42145rem;\n\n//checkbox\n$custom-control-indicator-bg: var(--dh-color-input-bg);\n$custom-control-indicator-border-color: var(--dh-color-input-border);\n$custom-checkbox-indicator-border-radius: 2px;\n$custom-control-indicator-border-width: 2px;\n$custom-control-indicator-active-bg: var(--dh-color-input-bg);\n$custom-control-indicator-active-border-color: var(--dh-color-input-fg);\n$custom-control-indicator-checked-bg: var(--dh-color-input-fg);\n$custom-control-indicator-checked-color: black; // used as mask fill color\n$custom-checkbox-indicator-indeterminate-bg: var(--dh-color-input-fg);\n$custom-control-indicator-bg-size: 75% 75%;\n$custom-control-indicator-disabled-bg: var(--dh-color-input-disabled-bg);\n$custom-control-indicator-checked-disabled-bg: var(\n --dh-color-input-disabled-bg\n);\n$custom-control-label-disabled-color: var(--dh-color-input-disabled-fg);\n\n// The $custom-select-indicator variable is used by Bootstrap to provide the\n// icon for the select dropdown. Inline svgs can't use CSS variables, so we hard\n// code the color to #929192 (the default value of --dh-color-gray-600). PR #1651\n// overrides this icon altogether for known dropdowns, so technically we may not\n// need this, but it's here in case there are any remaining instances.\n$custom-select-indicator-color: #929192;\n$custom-select-bg: var(--dh-color-selector-bg);\n$custom-select-bg-size: 16px 16px;\n//dhSort icon encoded\n$custom-select-indicator: str-replace(\n url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='#{$custom-select-indicator-color}' d='M4 7l-.4-.8 4-3.7h.8l4 3.7-.4.8H4zm0 2l-.4.8 4 3.7h.8l4-3.7L12 9H4z'/%3E%3C/svg%3E\"),\n '#',\n '%23'\n);\n$custom-select-focus-box-shadow: $input-btn-focus-box-shadow;\n$custom-select-disabled-color: $gray-500;\n$custom-select-disabled-bg: $gray-800;\n\n//modal\n$modal-content-bg: $content-bg;\n$modal-content-border-width: 0;\n$modal-md: 550px;\n$close-color: var(--dh-color-text);\n$close-text-shadow: none;\n\n// Toast notification\n$toast-bg: var(--dh-color-accent-100);\n$toast-color: var(--dh-color-text);\n$toast-error-bg: var(--dh-color-negative-bg);\n$toast-error-color: var(--dh-color-text);\n\n//tooltips\n$tooltip-bg: var(--dh-color-tooltip-bg);\n$tooltip-color: var(--dh-color-tooltip-fg);\n$tooltip-box-shadow: 0 0.1rem 1.5rem 0.1rem var(--dh-color-tooltip-box-shadow);\n\n//drowdowns\n$dropdown-bg: $gray-600;\n$dropdown-link-color: $foreground;\n$dropdown-link-hover-color: $foreground;\n$dropdown-link-hover-bg: var(--dh-color-item-list-hover-bg);\n$dropdown-divider-bg: $gray-700;\n\n//context menus\n$contextmenu-bg: var(--dh-color-popover-bg);\n$contextmenu-color: var(--dh-color-text);\n$contextmenu-disabled-color: var(--dh-color-text-disabled);\n$contextmenu-keyboard-selected-bg: var(--dh-color-keyboard-selected-bg);\n$contextmenu-selected-bg: var(--dh-color-item-list-hover-bg);\n$contextmenu-selected-color: var(--dh-color-item-list-selected-fg);\n\n//hr\n$hr-border-color: var(--dh-color-hr);\n\n//links\n$link-color: $gray-400;\n$link-hover-color: $foreground;\n\n//progress-bar\n$progress-bg: $gray-600;\n$progress-border-radius: 1rem;\n\n// Set global options\n$enable-shadows: false;\n$enable-gradients: false;\n$enable-print-styles: false; //I don't think anyone should expect to \"print\" this app.\n\n// Transition times\n$transition: 0.15s;\n$transition-mid: 0.2s;\n$transition-long: 0.3s;\n$transition-slow: 0.6s;\n\n//form-validation icon, uses vsWarning icon encoded here as svg\n$form-feedback-icon-invalid-color: $danger;\n$form-feedback-icon-invalid: str-replace(\n url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cg fill='none'%3E%3Cg fill='#{$form-feedback-icon-invalid-color}'%3E%3Cpath d='M7.56 1h.88l6.54 12.26-.44.74H1.44L1 13.26 7.56 1zM8 2.28 2.28 13H13.7L8 2.28zM8.625 12v-1h-1.25v1h1.25zm-1.25-2V6h1.25v4h-1.25z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E \"),\n '#',\n '%23'\n);\n\n// This section of variables is not consumed directly by DH, but they need to be\n// defined for sass to compile _variables\n$table-dark-bg: $gray-800;\n$table-dark-accent-bg: var(--dh-color-highlight-hover);\n$table-dark-hover-bg: var(--dh-color-highlight-active);\n$table-dark-border-color: $gray-700;\n$popover-bg: var(--dh-color-tooltip-bg);\n$popover-border-color: var(--dh-color-overlay-modal-bg);\n$popover-header-bg: #000;\n$popover-arrow-outer-color: var(--dh-color-dropshadow);\n$custom-range-thumb-active-bg: var(--dh-color-accent-1100);\n","@import '@deephaven/components/scss/custom.scss';\n\n$min-modal-content-height: 250px;\n$file-list-height: 250px;\n\n.new-file-modal-content {\n .new-item-destination {\n color: $text-muted;\n }\n\n .file-explorer-container {\n border: 1px solid $input-border-color;\n border-radius: $input-border-radius;\n overflow: hidden;\n height: $file-list-height;\n display: flex;\n flex-direction: column;\n }\n\n .directory-breadcrumbs {\n color: $primary;\n }\n}\n"]}
@@ -1 +1 @@
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","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","log","module","NewItemModal","getValidationMessage","err","info","type","concat","handleError","isCanceled","error","constructor","props","_defineProperty","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","arguments","length","makeCancelable","validateName","_this","_asyncToGenerator","storage","existingFile","e","newName","then","catch","focusRenameInput","submitModal","event","target","item","debug","makePath","filename","basename","key","stopPropagation","preventDefault","onCancel","onSubmit","_ref","newValue","replaceExtension","input","inputRef","current","selectionEnd","lastIndexOf","focus","setSelectionRange","skipExtensionCheck","_ref2","notifyOnExtensionChange","newExtension","newItemName","directoryPath","renderPathButtons","pathAsList","split","pop","map","index","i","children","kind","className","onClick","icon","transform","tooltip","render","placeholder","title","isDirectory","prevExtensionText","fileExtensionToString","newExtensionText","submitBtnLabel","nameInputLabel","toggle","onOpened","htmlFor","id","autoComplete","autoCapitalize","autoCorrect","spellCheck","ref","onKeyDown","onChange","onSelect","focusedPath","disabled","headerText","bodyText","onConfirm","cancelButtonText","confirmButtonText","bool","string","isRequired","oneOf","func","shape","isOverwrite"],"sources":["../src/NewItemModal.tsx"],"sourcesContent":["import React, {\n type ChangeEvent,\n type KeyboardEvent,\n PureComponent,\n} 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 type 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 { type FileStorageItem, type FileType } from './FileStorage';\nimport type FileStorage 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, isOverwrite?: boolean) => 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, isOverwrite?: boolean): 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 =\n this.handleExtensionChangeCancel.bind(this);\n this.handleExtensionChangeConfirm =\n this.handleExtensionChangeConfirm.bind(this);\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\n onSubmit(`${path}${value}`, true);\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\"\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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","ignoreList":[]}
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","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","log","module","NewItemModal","getValidationMessage","err","info","type","concat","handleError","isCanceled","error","constructor","props","_defineProperty","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","arguments","length","makeCancelable","validateName","_this","_asyncToGenerator","storage","existingFile","e","newName","then","catch","focusRenameInput","submitModal","event","target","item","debug","makePath","filename","basename","key","stopPropagation","preventDefault","onCancel","onSubmit","_ref","newValue","replaceExtension","input","inputRef","current","selectionEnd","lastIndexOf","focus","setSelectionRange","skipExtensionCheck","_ref2","notifyOnExtensionChange","newExtension","newItemName","directoryPath","renderPathButtons","pathAsList","split","pop","map","index","i","children","kind","className","onClick","icon","transform","tooltip","render","placeholder","title","isDirectory","prevExtensionText","fileExtensionToString","newExtensionText","submitBtnLabel","nameInputLabel","toggle","onOpened","htmlFor","id","autoComplete","autoCapitalize","autoCorrect","spellCheck","ref","onKeyDown","onChange","onSelect","focusedPath","disabled","headerText","bodyText","onConfirm","cancelButtonText","confirmButtonText","bool","string","isRequired","oneOf","func","shape","isOverwrite"],"sources":["../src/NewItemModal.tsx"],"sourcesContent":["import React, {\n type ChangeEvent,\n type KeyboardEvent,\n PureComponent,\n} 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 type 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 { type FileStorageItem, type FileType } from './FileStorage';\nimport type FileStorage 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, isOverwrite?: boolean) => 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, isOverwrite?: boolean): 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 =\n this.handleExtensionChangeCancel.bind(this);\n this.handleExtensionChangeConfirm =\n this.handleExtensionChangeConfirm.bind(this);\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\n onSubmit(`${path}${value}`, true);\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\"\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/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["FileExplorer","default","FileExistsError","FileNotFoundError","SHORTCUTS","NewItemModal","FileExplorerToolbar","FileUtils"],"sources":["../src/index.ts"],"sourcesContent":["import FileExplorer from './FileExplorer';\n\nexport * from './FileExplorer';\nexport * from './FileListContainer';\nexport * from './FileList';\nexport * from './FileListItem';\nexport * from './FileListUtils';\nexport * from './FileStorage';\nexport { default as FileExistsError } from './FileExistsError';\nexport { default as FileNotFoundError } from './FileNotFoundError';\nexport { default as SHORTCUTS } from './FileExplorerShortcuts';\nexport { default as NewItemModal } from './NewItemModal';\nexport { default as FileExplorerToolbar } from './FileExplorerToolbar';\nexport { default as FileUtils } from './FileUtils';\n\nexport default FileExplorer;\n"],"mappings":"OAAOA,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAQVC,OAAO,IAAIC,eAAe;AAAA,SAC1BD,OAAO,IAAIE,iBAAiB;AAAA,SAC5BF,OAAO,IAAIG,SAAS;AAAA,SACpBH,OAAO,IAAII,YAAY;AAAA,SACvBJ,OAAO,IAAIK,mBAAmB;AAAA,SAC9BL,OAAO,IAAIM,SAAS;AAE7B,eAAeP,YAAY","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["FileExplorer","default","FileExistsError","FileNotFoundError","SHORTCUTS","NewItemModal","FileExplorerToolbar","FileUtils"],"sources":["../src/index.ts"],"sourcesContent":["import FileExplorer from './FileExplorer';\n\nexport * from './FileExplorer';\nexport * from './FileListContainer';\nexport * from './FileList';\nexport * from './FileListItem';\nexport * from './FileListUtils';\nexport * from './FileStorage';\nexport { default as FileExistsError } from './FileExistsError';\nexport { default as FileNotFoundError } from './FileNotFoundError';\nexport { default as SHORTCUTS } from './FileExplorerShortcuts';\nexport { default as NewItemModal } from './NewItemModal';\nexport { default as FileExplorerToolbar } from './FileExplorerToolbar';\nexport { default as FileUtils } from './FileUtils';\n\nexport default FileExplorer;\n"],"mappings":"OAAOA,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAQVC,OAAO,IAAIC,eAAe;AAAA,SAC1BD,OAAO,IAAIE,iBAAiB;AAAA,SAC5BF,OAAO,IAAIG,SAAS;AAAA,SACpBH,OAAO,IAAII,YAAY;AAAA,SACvBJ,OAAO,IAAIK,mBAAmB;AAAA,SAC9BL,OAAO,IAAIM,SAAS;AAE7B,eAAeP,YAAY"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deephaven/file-explorer",
3
- "version": "1.2.1-plotly-rc.3+e5413268",
3
+ "version": "1.3.0",
4
4
  "description": "Deephaven File Explorer React component",
5
5
  "author": "Deephaven Data Labs LLC",
6
6
  "license": "Apache-2.0",
@@ -22,11 +22,11 @@
22
22
  "build:sass": "sass --embed-sources --load-path=../../node_modules ./src:./dist"
23
23
  },
24
24
  "dependencies": {
25
- "@deephaven/components": "^1.2.1-plotly-rc.3+e5413268",
26
- "@deephaven/icons": "^1.2.1-plotly-rc.3+e5413268",
27
- "@deephaven/log": "^1.2.1-plotly-rc.3+e5413268",
28
- "@deephaven/storage": "^1.2.1-plotly-rc.3+e5413268",
29
- "@deephaven/utils": "^1.2.1-plotly-rc.3+e5413268",
25
+ "@deephaven/components": "^1.3.0",
26
+ "@deephaven/icons": "^1.2.0",
27
+ "@deephaven/log": "^1.1.0",
28
+ "@deephaven/storage": "^1.1.0",
29
+ "@deephaven/utils": "^1.1.0",
30
30
  "@fortawesome/fontawesome-svg-core": "^6.2.1",
31
31
  "@fortawesome/react-fontawesome": "^0.2.0",
32
32
  "classnames": "^2.3.1",
@@ -37,8 +37,8 @@
37
37
  "react": ">=16.8.0"
38
38
  },
39
39
  "devDependencies": {
40
- "@deephaven/mocks": "^1.2.1-plotly-rc.3+e5413268",
41
- "@deephaven/test-utils": "^1.2.1-plotly-rc.3+e5413268"
40
+ "@deephaven/mocks": "^1.1.0",
41
+ "@deephaven/test-utils": "^1.1.0"
42
42
  },
43
43
  "files": [
44
44
  "dist"
@@ -49,5 +49,5 @@
49
49
  "publishConfig": {
50
50
  "access": "public"
51
51
  },
52
- "gitHead": "e5413268aa9efb6ebfdd6044ae56cdd285fcb932"
52
+ "gitHead": "d65ed4062477ccc16a1d09b3106d4256f772913b"
53
53
  }