@deephaven/iris-grid 0.49.1 → 0.49.2-beta.3
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/AdvancedFilterCreator.css.map +1 -1
- package/dist/AdvancedFilterCreatorFilterItem.css.map +1 -1
- package/dist/AdvancedFilterCreatorSelectValue.css.map +1 -1
- package/dist/ColumnStatistics.css +4 -0
- package/dist/ColumnStatistics.css.map +1 -1
- package/dist/ColumnStatistics.js +1 -1
- package/dist/ColumnStatistics.js.map +1 -1
- package/dist/CrossColumnSearch.css.map +1 -1
- package/dist/FilterInputField.css.map +1 -1
- package/dist/GotoRow.css.map +1 -1
- package/dist/IrisGrid.css.map +1 -1
- package/dist/IrisGridBottomBar.css +2 -1
- package/dist/IrisGridBottomBar.css.map +1 -1
- package/dist/IrisGridCopyHandler.css.map +1 -1
- package/dist/IrisGridCopyHandler.d.ts.map +1 -1
- package/dist/IrisGridCopyHandler.js +3 -1
- package/dist/IrisGridCopyHandler.js.map +1 -1
- package/dist/IrisGridPartitionSelector.css.map +1 -1
- package/dist/IrisGridTheme.module.css.map +1 -1
- package/dist/PartitionSelectorSearch.css.map +1 -1
- package/dist/PartitionSelectorSearch.js +3 -1
- package/dist/PartitionSelectorSearch.js.map +1 -1
- package/dist/PendingDataBottomBar.css.map +1 -1
- package/dist/PendingDataBottomBar.js +3 -1
- package/dist/PendingDataBottomBar.js.map +1 -1
- package/dist/mousehandlers/IrisGridContextMenuHandler.css.map +1 -1
- package/dist/sidebar/ChartBuilder.css.map +1 -1
- package/dist/sidebar/CustomColumnBuilder.css.map +1 -1
- package/dist/sidebar/CustomColumnBuilder.js +3 -1
- package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
- package/dist/sidebar/InputEditor.css.map +1 -1
- package/dist/sidebar/RollupRows.css.map +1 -1
- package/dist/sidebar/SelectDistinctBuilder.css.map +1 -1
- package/dist/sidebar/TableCsvExporter.css.map +1 -1
- package/dist/sidebar/TableCsvExporter.js +3 -1
- package/dist/sidebar/TableCsvExporter.js.map +1 -1
- package/dist/sidebar/aggregations/AggregationEdit.css.map +1 -1
- package/dist/sidebar/aggregations/Aggregations.css.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormatEditor.css.map +1 -1
- package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.css.map +1 -1
- package/dist/sidebar/conditional-formatting/StyleEditor.css.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingBuilder.css.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/VisibilityOrderingGroup.css.map +1 -1
- package/dist/sidebar/visibility-ordering-builder/sortable-tree/TreeItem.css.map +1 -1
- package/package.json +15 -15
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IrisGridCopyHandler.js","names":["React","Component","classNames","CSSTransition","Button","LoadingSpinner","ThemeExport","GridRange","GridUtils","CanceledPromiseError","copyToClipboard","PromiseUtils","Log","IrisGridUtils","IrisGridBottomBar","log","module","IrisGridCopyHandler","getStatusMessageText","copyState","rowCount","COPY_STATES","CONFIRMATION_REQUIRED","toLocaleString","CLICK_REQUIRED","FETCH_ERROR","FETCH_IN_PROGRESS","DONE","getCopyButtonText","buttonState","BUTTON_STATES","CLICK_TO_COPY","RETRY","constructor","props","handleBackgroundClick","bind","handleCancelClick","handleCopyClick","handleHideTimeout","state","error","undefined","IDLE","COPY","isShown","componentDidMount","copyOperation","startCopy","componentDidUpdate","prevProps","componentWillUnmount","stopCopy","debug2","setState","ranges","debug","startHideTimer","NO_PROMPT_THRESHOLD","startFetch","textData","stopFetch","stopHideTimer","copyText","showCopyDone","e","text","model","includeHeaders","userColumnWidths","movedColumns","formatValues","hiddenColumns","getHiddenColumns","modelRanges","getModelRanges","length","subtractRanges","map","makeColumn","subtractRangesFromRanges","formatValue","value","column","displayString","type","name","fetchPromise","makeCancelable","textSnapshot","cancel","hideTimer","setTimeout","HIDE_TIMEOUT","clearTimeout","render","onEntering","onEntered","onExiting","onExited","animation","copyButtonText","statusMessageText","isButtonContainerVisible","isFetching","isDone","transitionMs"],"sources":["../src/IrisGridCopyHandler.tsx"],"sourcesContent":["import React, { Component } from 'react';\nimport classNames from 'classnames';\nimport { CSSTransition } from 'react-transition-group';\nimport { Button, LoadingSpinner, ThemeExport } from '@deephaven/components';\nimport {\n GridRange,\n GridUtils,\n ModelSizeMap,\n MoveOperation,\n} from '@deephaven/grid';\nimport {\n CancelablePromise,\n CanceledPromiseError,\n copyToClipboard,\n PromiseUtils,\n} from '@deephaven/utils';\nimport Log from '@deephaven/log';\nimport type { Column } from '@deephaven/jsapi-types';\nimport IrisGridUtils from './IrisGridUtils';\nimport IrisGridBottomBar from './IrisGridBottomBar';\nimport './IrisGridCopyHandler.scss';\nimport IrisGridModel from './IrisGridModel';\n\nconst log = Log.module('IrisGridCopyHandler');\n\ntype Values<T> = T[keyof T];\n\ntype ButtonStateType = Values<typeof IrisGridCopyHandler.BUTTON_STATES>;\n\nexport type CopyOperation = {\n ranges: readonly GridRange[];\n includeHeaders: boolean;\n formatValues?: boolean;\n movedColumns: readonly MoveOperation[];\n userColumnWidths: ModelSizeMap;\n error?: string;\n};\n\ninterface IrisGridCopyHandlerProps {\n model: IrisGridModel;\n copyOperation: CopyOperation;\n onEntering: () => void;\n onEntered: () => void;\n onExiting: () => void;\n onExited: () => void;\n}\n\ninterface IrisGridCopyHandlerState {\n error?: string;\n copyState: string;\n buttonState: string;\n isShown: boolean;\n rowCount: number;\n}\n/**\n * Component for handling copying of data from the Iris Grid.\n * - Prompts if necessary (large amount of rows copied)\n * - Tries to async copy, falls back to showing a \"Click to Copy\" button if that fails\n */\nclass IrisGridCopyHandler extends Component<\n IrisGridCopyHandlerProps,\n IrisGridCopyHandlerState\n> {\n static NO_PROMPT_THRESHOLD = 10000;\n\n static HIDE_TIMEOUT = 3000;\n\n /**\n * Different states for the current copy operation\n */\n static COPY_STATES = {\n // No copy operation in progress\n IDLE: 'IDLE',\n\n // Large copy operation, confirmation required\n CONFIRMATION_REQUIRED: 'CONFIRMATION_REQUIRED',\n\n // Fetch is currently in progress\n FETCH_IN_PROGRESS: 'FETCH_IN_PROGRESS',\n\n // There was an error fetching the data\n FETCH_ERROR: 'FETCH_ERROR',\n\n // Click is required to copy\n CLICK_REQUIRED: 'CLICK_REQUIRED',\n\n // The copy operation is completed and successfully copied to the clipboard\n DONE: 'DONE',\n };\n\n static BUTTON_STATES = {\n COPY: 'COPY',\n FETCH_IN_PROGRESS: 'FETCH_IN_PROGRESS',\n CLICK_TO_COPY: 'CLICK_TO_COPY',\n RETRY: 'RETRY',\n };\n\n static defaultProps = {\n copyOperation: null,\n onEntering: (): void => undefined,\n onEntered: (): void => undefined,\n onExiting: (): void => undefined,\n onExited: (): void => undefined,\n };\n\n static getStatusMessageText(copyState: string, rowCount: number): string {\n switch (copyState) {\n case IrisGridCopyHandler.COPY_STATES.CONFIRMATION_REQUIRED:\n return `Are you sure you want to copy ${rowCount.toLocaleString()} rows to your clipboard?`;\n case IrisGridCopyHandler.COPY_STATES.CLICK_REQUIRED:\n return `Fetched ${rowCount.toLocaleString()} rows!`;\n case IrisGridCopyHandler.COPY_STATES.FETCH_ERROR:\n return 'Unable to copy data.';\n case IrisGridCopyHandler.COPY_STATES.FETCH_IN_PROGRESS:\n return `Fetching ${rowCount.toLocaleString()} rows for clipboard...`;\n case IrisGridCopyHandler.COPY_STATES.DONE:\n return 'Copied to Clipboard!';\n default:\n return '';\n }\n }\n\n static getCopyButtonText(buttonState: ButtonStateType): string {\n switch (buttonState) {\n case IrisGridCopyHandler.BUTTON_STATES.FETCH_IN_PROGRESS:\n return 'Fetching';\n case IrisGridCopyHandler.BUTTON_STATES.CLICK_TO_COPY:\n return 'Click to Copy';\n case IrisGridCopyHandler.BUTTON_STATES.RETRY:\n return 'Retry';\n default:\n return 'Copy';\n }\n }\n\n constructor(props: IrisGridCopyHandlerProps) {\n super(props);\n\n this.handleBackgroundClick = this.handleBackgroundClick.bind(this);\n this.handleCancelClick = this.handleCancelClick.bind(this);\n this.handleCopyClick = this.handleCopyClick.bind(this);\n this.handleHideTimeout = this.handleHideTimeout.bind(this);\n\n this.state = {\n error: undefined,\n copyState: IrisGridCopyHandler.COPY_STATES.IDLE,\n buttonState: IrisGridCopyHandler.BUTTON_STATES.COPY,\n isShown: false,\n rowCount: 0,\n };\n }\n\n componentDidMount(): void {\n const { copyOperation } = this.props;\n if (copyOperation != null) {\n this.startCopy();\n }\n }\n\n componentDidUpdate(prevProps: IrisGridCopyHandlerProps): void {\n const { copyOperation } = this.props;\n if (prevProps.copyOperation !== copyOperation) {\n this.startCopy();\n }\n }\n\n componentWillUnmount(): void {\n this.stopCopy();\n }\n\n textData?: string;\n\n hideTimer?: ReturnType<typeof setTimeout>;\n\n fetchPromise?: CancelablePromise<string>;\n\n startCopy(): void {\n log.debug2('startCopy');\n\n this.stopCopy();\n\n const { copyOperation } = this.props;\n if (copyOperation == null) {\n log.debug2('No copy operation set, cancelling out');\n this.setState({ isShown: false });\n return;\n }\n\n const { ranges, error } = copyOperation;\n if (error != null) {\n log.debug('Showing copy error', error);\n this.setState({\n isShown: true,\n copyState: IrisGridCopyHandler.COPY_STATES.DONE,\n error,\n });\n this.startHideTimer();\n return;\n }\n\n const rowCount = GridRange.rowCount(ranges);\n\n this.setState({ rowCount, isShown: true, error: undefined });\n\n if (rowCount > IrisGridCopyHandler.NO_PROMPT_THRESHOLD) {\n this.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.COPY,\n copyState: IrisGridCopyHandler.COPY_STATES.CONFIRMATION_REQUIRED,\n });\n } else {\n this.startFetch();\n }\n }\n\n stopCopy(): void {\n this.textData = undefined;\n this.stopFetch();\n this.stopHideTimer();\n }\n\n handleBackgroundClick(): void {\n log.debug2('handleBackgroundClick');\n\n const { copyState } = this.state;\n if (copyState === IrisGridCopyHandler.COPY_STATES.DONE) {\n this.setState({ isShown: false });\n }\n }\n\n handleCancelClick(): void {\n log.debug2('handleCancelClick');\n\n this.stopFetch();\n this.setState({ isShown: false });\n }\n\n async handleCopyClick(): Promise<void> {\n log.debug2('handleCopyClick');\n\n if (this.textData != null) {\n try {\n await this.copyText(this.textData);\n this.showCopyDone();\n } catch (e) {\n log.error('Error copying text', e);\n this.setState({\n error: 'Unable to copy. Verify your browser permissions.',\n });\n }\n } else {\n this.startFetch();\n }\n }\n\n handleHideTimeout(): void {\n log.debug2('handleHideTimeout');\n\n this.stopHideTimer();\n\n this.setState({ isShown: false });\n }\n\n async copyText(text: string): Promise<void> {\n log.debug2('copyText', text);\n\n this.textData = text;\n\n await copyToClipboard(text);\n }\n\n showCopyDone(): void {\n this.setState({ copyState: IrisGridCopyHandler.COPY_STATES.DONE });\n this.startHideTimer();\n }\n\n async startFetch(): Promise<void> {\n this.stopFetch();\n\n this.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.FETCH_IN_PROGRESS,\n copyState: IrisGridCopyHandler.COPY_STATES.FETCH_IN_PROGRESS,\n });\n\n const { model, copyOperation } = this.props;\n const {\n ranges,\n includeHeaders,\n userColumnWidths,\n movedColumns,\n formatValues,\n } = copyOperation;\n log.debug('startFetch', ranges);\n\n const hiddenColumns = IrisGridUtils.getHiddenColumns(userColumnWidths);\n let modelRanges = GridUtils.getModelRanges(ranges, movedColumns);\n if (hiddenColumns.length > 0) {\n const subtractRanges = hiddenColumns.map(GridRange.makeColumn);\n modelRanges = GridRange.subtractRangesFromRanges(\n modelRanges,\n subtractRanges\n );\n }\n\n // Remove the hidden columns from the snapshot\n const formatValue =\n formatValues != null && formatValues\n ? (value: unknown, column: Column) =>\n model.displayString(value, column.type, column.name)\n : (value: unknown) => `${value}`;\n\n this.fetchPromise = PromiseUtils.makeCancelable(\n model.textSnapshot(modelRanges, includeHeaders, formatValue)\n );\n try {\n const text = await this.fetchPromise;\n this.fetchPromise = undefined;\n try {\n await this.copyText(text);\n this.showCopyDone();\n } catch (e) {\n log.error('Error copying text', e);\n this.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.CLICK_TO_COPY,\n copyState: IrisGridCopyHandler.COPY_STATES.CLICK_REQUIRED,\n });\n }\n } catch (e) {\n if (e instanceof CanceledPromiseError) {\n log.debug('User cancelled copy.');\n } else {\n log.error('Error fetching contents', e);\n this.fetchPromise = undefined;\n this.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.RETRY,\n copyState: IrisGridCopyHandler.COPY_STATES.FETCH_ERROR,\n });\n }\n }\n }\n\n stopFetch(): void {\n if (this.fetchPromise) {\n log.debug2('stopFetch');\n this.fetchPromise.cancel();\n this.fetchPromise = undefined;\n }\n }\n\n startHideTimer(): void {\n this.stopHideTimer();\n\n this.hideTimer = setTimeout(\n this.handleHideTimeout,\n IrisGridCopyHandler.HIDE_TIMEOUT\n );\n }\n\n stopHideTimer(): void {\n if (this.hideTimer != null) {\n clearTimeout(this.hideTimer);\n this.hideTimer = undefined;\n }\n }\n\n render(): JSX.Element {\n const { onEntering, onEntered, onExiting, onExited } = this.props;\n const { buttonState, copyState, isShown, rowCount, error } = this.state;\n\n const animation =\n copyState === IrisGridCopyHandler.COPY_STATES.DONE\n ? 'fade'\n : 'copy-slide-up';\n const copyButtonText = IrisGridCopyHandler.getCopyButtonText(buttonState);\n const statusMessageText =\n error ?? IrisGridCopyHandler.getStatusMessageText(copyState, rowCount);\n const isButtonContainerVisible =\n copyState !== IrisGridCopyHandler.COPY_STATES.DONE;\n const isFetching =\n buttonState === IrisGridCopyHandler.BUTTON_STATES.FETCH_IN_PROGRESS;\n const isDone = copyState === IrisGridCopyHandler.COPY_STATES.DONE;\n\n return (\n <IrisGridBottomBar\n animation={animation}\n isShown={isShown}\n className={classNames('iris-grid-copy-handler', {\n 'copy-done': isDone,\n })}\n onClick={this.handleBackgroundClick}\n onEntering={onEntering}\n onEntered={onEntered}\n onExiting={onExiting}\n onExited={onExited}\n >\n <div className=\"status-message\">\n <span>{statusMessageText}</span>\n </div>\n <CSSTransition\n in={isButtonContainerVisible}\n timeout={ThemeExport.transitionMs}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n >\n <div className=\"buttons-container\">\n <button\n type=\"button\"\n className=\"btn btn-outline-secondary btn-cancel\"\n onClick={this.handleCancelClick}\n >\n Cancel\n </button>\n <Button\n kind={isFetching ? 'tertiary' : 'primary'}\n className={classNames('btn-copy', {\n 'btn-spinner': isFetching,\n })}\n onClick={this.handleCopyClick}\n disabled={isFetching}\n >\n {isFetching && <LoadingSpinner />}\n {copyButtonText}\n </Button>\n </div>\n </CSSTransition>\n </IrisGridBottomBar>\n );\n }\n}\n\nexport default IrisGridCopyHandler;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"IrisGridCopyHandler.js","names":["React","Component","classNames","CSSTransition","Button","LoadingSpinner","ThemeExport","GridRange","GridUtils","CanceledPromiseError","copyToClipboard","PromiseUtils","Log","IrisGridUtils","IrisGridBottomBar","log","module","IrisGridCopyHandler","getStatusMessageText","copyState","rowCount","COPY_STATES","CONFIRMATION_REQUIRED","toLocaleString","CLICK_REQUIRED","FETCH_ERROR","FETCH_IN_PROGRESS","DONE","getCopyButtonText","buttonState","BUTTON_STATES","CLICK_TO_COPY","RETRY","constructor","props","handleBackgroundClick","bind","handleCancelClick","handleCopyClick","handleHideTimeout","state","error","undefined","IDLE","COPY","isShown","componentDidMount","copyOperation","startCopy","componentDidUpdate","prevProps","componentWillUnmount","stopCopy","debug2","setState","ranges","debug","startHideTimer","NO_PROMPT_THRESHOLD","startFetch","textData","stopFetch","stopHideTimer","copyText","showCopyDone","e","text","model","includeHeaders","userColumnWidths","movedColumns","formatValues","hiddenColumns","getHiddenColumns","modelRanges","getModelRanges","length","subtractRanges","map","makeColumn","subtractRangesFromRanges","formatValue","value","column","displayString","type","name","fetchPromise","makeCancelable","textSnapshot","cancel","hideTimer","setTimeout","HIDE_TIMEOUT","clearTimeout","render","onEntering","onEntered","onExiting","onExited","animation","copyButtonText","statusMessageText","isButtonContainerVisible","isFetching","isDone","transitionMs"],"sources":["../src/IrisGridCopyHandler.tsx"],"sourcesContent":["import React, { Component } from 'react';\nimport classNames from 'classnames';\nimport { CSSTransition } from 'react-transition-group';\nimport { Button, LoadingSpinner, ThemeExport } from '@deephaven/components';\nimport {\n GridRange,\n GridUtils,\n ModelSizeMap,\n MoveOperation,\n} from '@deephaven/grid';\nimport {\n CancelablePromise,\n CanceledPromiseError,\n copyToClipboard,\n PromiseUtils,\n} from '@deephaven/utils';\nimport Log from '@deephaven/log';\nimport type { Column } from '@deephaven/jsapi-types';\nimport IrisGridUtils from './IrisGridUtils';\nimport IrisGridBottomBar from './IrisGridBottomBar';\nimport './IrisGridCopyHandler.scss';\nimport IrisGridModel from './IrisGridModel';\n\nconst log = Log.module('IrisGridCopyHandler');\n\ntype Values<T> = T[keyof T];\n\ntype ButtonStateType = Values<typeof IrisGridCopyHandler.BUTTON_STATES>;\n\nexport type CopyOperation = {\n ranges: readonly GridRange[];\n includeHeaders: boolean;\n formatValues?: boolean;\n movedColumns: readonly MoveOperation[];\n userColumnWidths: ModelSizeMap;\n error?: string;\n};\n\ninterface IrisGridCopyHandlerProps {\n model: IrisGridModel;\n copyOperation: CopyOperation;\n onEntering: () => void;\n onEntered: () => void;\n onExiting: () => void;\n onExited: () => void;\n}\n\ninterface IrisGridCopyHandlerState {\n error?: string;\n copyState: string;\n buttonState: string;\n isShown: boolean;\n rowCount: number;\n}\n/**\n * Component for handling copying of data from the Iris Grid.\n * - Prompts if necessary (large amount of rows copied)\n * - Tries to async copy, falls back to showing a \"Click to Copy\" button if that fails\n */\nclass IrisGridCopyHandler extends Component<\n IrisGridCopyHandlerProps,\n IrisGridCopyHandlerState\n> {\n static NO_PROMPT_THRESHOLD = 10000;\n\n static HIDE_TIMEOUT = 3000;\n\n /**\n * Different states for the current copy operation\n */\n static COPY_STATES = {\n // No copy operation in progress\n IDLE: 'IDLE',\n\n // Large copy operation, confirmation required\n CONFIRMATION_REQUIRED: 'CONFIRMATION_REQUIRED',\n\n // Fetch is currently in progress\n FETCH_IN_PROGRESS: 'FETCH_IN_PROGRESS',\n\n // There was an error fetching the data\n FETCH_ERROR: 'FETCH_ERROR',\n\n // Click is required to copy\n CLICK_REQUIRED: 'CLICK_REQUIRED',\n\n // The copy operation is completed and successfully copied to the clipboard\n DONE: 'DONE',\n };\n\n static BUTTON_STATES = {\n COPY: 'COPY',\n FETCH_IN_PROGRESS: 'FETCH_IN_PROGRESS',\n CLICK_TO_COPY: 'CLICK_TO_COPY',\n RETRY: 'RETRY',\n };\n\n static defaultProps = {\n copyOperation: null,\n onEntering: (): void => undefined,\n onEntered: (): void => undefined,\n onExiting: (): void => undefined,\n onExited: (): void => undefined,\n };\n\n static getStatusMessageText(copyState: string, rowCount: number): string {\n switch (copyState) {\n case IrisGridCopyHandler.COPY_STATES.CONFIRMATION_REQUIRED:\n return `Are you sure you want to copy ${rowCount.toLocaleString()} rows to your clipboard?`;\n case IrisGridCopyHandler.COPY_STATES.CLICK_REQUIRED:\n return `Fetched ${rowCount.toLocaleString()} rows!`;\n case IrisGridCopyHandler.COPY_STATES.FETCH_ERROR:\n return 'Unable to copy data.';\n case IrisGridCopyHandler.COPY_STATES.FETCH_IN_PROGRESS:\n return `Fetching ${rowCount.toLocaleString()} rows for clipboard...`;\n case IrisGridCopyHandler.COPY_STATES.DONE:\n return 'Copied to Clipboard!';\n default:\n return '';\n }\n }\n\n static getCopyButtonText(buttonState: ButtonStateType): string {\n switch (buttonState) {\n case IrisGridCopyHandler.BUTTON_STATES.FETCH_IN_PROGRESS:\n return 'Fetching';\n case IrisGridCopyHandler.BUTTON_STATES.CLICK_TO_COPY:\n return 'Click to Copy';\n case IrisGridCopyHandler.BUTTON_STATES.RETRY:\n return 'Retry';\n default:\n return 'Copy';\n }\n }\n\n constructor(props: IrisGridCopyHandlerProps) {\n super(props);\n\n this.handleBackgroundClick = this.handleBackgroundClick.bind(this);\n this.handleCancelClick = this.handleCancelClick.bind(this);\n this.handleCopyClick = this.handleCopyClick.bind(this);\n this.handleHideTimeout = this.handleHideTimeout.bind(this);\n\n this.state = {\n error: undefined,\n copyState: IrisGridCopyHandler.COPY_STATES.IDLE,\n buttonState: IrisGridCopyHandler.BUTTON_STATES.COPY,\n isShown: false,\n rowCount: 0,\n };\n }\n\n componentDidMount(): void {\n const { copyOperation } = this.props;\n if (copyOperation != null) {\n this.startCopy();\n }\n }\n\n componentDidUpdate(prevProps: IrisGridCopyHandlerProps): void {\n const { copyOperation } = this.props;\n if (prevProps.copyOperation !== copyOperation) {\n this.startCopy();\n }\n }\n\n componentWillUnmount(): void {\n this.stopCopy();\n }\n\n textData?: string;\n\n hideTimer?: ReturnType<typeof setTimeout>;\n\n fetchPromise?: CancelablePromise<string>;\n\n startCopy(): void {\n log.debug2('startCopy');\n\n this.stopCopy();\n\n const { copyOperation } = this.props;\n if (copyOperation == null) {\n log.debug2('No copy operation set, cancelling out');\n this.setState({ isShown: false });\n return;\n }\n\n const { ranges, error } = copyOperation;\n if (error != null) {\n log.debug('Showing copy error', error);\n this.setState({\n isShown: true,\n copyState: IrisGridCopyHandler.COPY_STATES.DONE,\n error,\n });\n this.startHideTimer();\n return;\n }\n\n const rowCount = GridRange.rowCount(ranges);\n\n this.setState({ rowCount, isShown: true, error: undefined });\n\n if (rowCount > IrisGridCopyHandler.NO_PROMPT_THRESHOLD) {\n this.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.COPY,\n copyState: IrisGridCopyHandler.COPY_STATES.CONFIRMATION_REQUIRED,\n });\n } else {\n this.startFetch();\n }\n }\n\n stopCopy(): void {\n this.textData = undefined;\n this.stopFetch();\n this.stopHideTimer();\n }\n\n handleBackgroundClick(): void {\n log.debug2('handleBackgroundClick');\n\n const { copyState } = this.state;\n if (copyState === IrisGridCopyHandler.COPY_STATES.DONE) {\n this.setState({ isShown: false });\n }\n }\n\n handleCancelClick(): void {\n log.debug2('handleCancelClick');\n\n this.stopFetch();\n this.setState({ isShown: false });\n }\n\n async handleCopyClick(): Promise<void> {\n log.debug2('handleCopyClick');\n\n if (this.textData != null) {\n try {\n await this.copyText(this.textData);\n this.showCopyDone();\n } catch (e) {\n log.error('Error copying text', e);\n this.setState({\n error: 'Unable to copy. Verify your browser permissions.',\n });\n }\n } else {\n this.startFetch();\n }\n }\n\n handleHideTimeout(): void {\n log.debug2('handleHideTimeout');\n\n this.stopHideTimer();\n\n this.setState({ isShown: false });\n }\n\n async copyText(text: string): Promise<void> {\n log.debug2('copyText', text);\n\n this.textData = text;\n\n await copyToClipboard(text);\n }\n\n showCopyDone(): void {\n this.setState({ copyState: IrisGridCopyHandler.COPY_STATES.DONE });\n this.startHideTimer();\n }\n\n async startFetch(): Promise<void> {\n this.stopFetch();\n\n this.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.FETCH_IN_PROGRESS,\n copyState: IrisGridCopyHandler.COPY_STATES.FETCH_IN_PROGRESS,\n });\n\n const { model, copyOperation } = this.props;\n const {\n ranges,\n includeHeaders,\n userColumnWidths,\n movedColumns,\n formatValues,\n } = copyOperation;\n log.debug('startFetch', ranges);\n\n const hiddenColumns = IrisGridUtils.getHiddenColumns(userColumnWidths);\n let modelRanges = GridUtils.getModelRanges(ranges, movedColumns);\n if (hiddenColumns.length > 0) {\n const subtractRanges = hiddenColumns.map(GridRange.makeColumn);\n modelRanges = GridRange.subtractRangesFromRanges(\n modelRanges,\n subtractRanges\n );\n }\n\n // Remove the hidden columns from the snapshot\n const formatValue =\n formatValues != null && formatValues\n ? (value: unknown, column: Column) =>\n model.displayString(value, column.type, column.name)\n : (value: unknown) => `${value}`;\n\n this.fetchPromise = PromiseUtils.makeCancelable(\n model.textSnapshot(modelRanges, includeHeaders, formatValue)\n );\n try {\n const text = await this.fetchPromise;\n this.fetchPromise = undefined;\n try {\n await this.copyText(text);\n this.showCopyDone();\n } catch (e) {\n log.error('Error copying text', e);\n this.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.CLICK_TO_COPY,\n copyState: IrisGridCopyHandler.COPY_STATES.CLICK_REQUIRED,\n });\n }\n } catch (e) {\n if (e instanceof CanceledPromiseError) {\n log.debug('User cancelled copy.');\n } else {\n log.error('Error fetching contents', e);\n this.fetchPromise = undefined;\n this.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.RETRY,\n copyState: IrisGridCopyHandler.COPY_STATES.FETCH_ERROR,\n });\n }\n }\n }\n\n stopFetch(): void {\n if (this.fetchPromise) {\n log.debug2('stopFetch');\n this.fetchPromise.cancel();\n this.fetchPromise = undefined;\n }\n }\n\n startHideTimer(): void {\n this.stopHideTimer();\n\n this.hideTimer = setTimeout(\n this.handleHideTimeout,\n IrisGridCopyHandler.HIDE_TIMEOUT\n );\n }\n\n stopHideTimer(): void {\n if (this.hideTimer != null) {\n clearTimeout(this.hideTimer);\n this.hideTimer = undefined;\n }\n }\n\n render(): JSX.Element {\n const { onEntering, onEntered, onExiting, onExited } = this.props;\n const { buttonState, copyState, isShown, rowCount, error } = this.state;\n\n const animation =\n copyState === IrisGridCopyHandler.COPY_STATES.DONE\n ? 'fade'\n : 'copy-slide-up';\n const copyButtonText = IrisGridCopyHandler.getCopyButtonText(buttonState);\n const statusMessageText =\n error ?? IrisGridCopyHandler.getStatusMessageText(copyState, rowCount);\n const isButtonContainerVisible =\n copyState !== IrisGridCopyHandler.COPY_STATES.DONE;\n const isFetching =\n buttonState === IrisGridCopyHandler.BUTTON_STATES.FETCH_IN_PROGRESS;\n const isDone = copyState === IrisGridCopyHandler.COPY_STATES.DONE;\n\n return (\n <IrisGridBottomBar\n animation={animation}\n isShown={isShown}\n className={classNames('iris-grid-copy-handler', {\n 'copy-done': isDone,\n })}\n onClick={this.handleBackgroundClick}\n onEntering={onEntering}\n onEntered={onEntered}\n onExiting={onExiting}\n onExited={onExited}\n >\n <div className=\"status-message\">\n <span>{statusMessageText}</span>\n </div>\n <CSSTransition\n in={isButtonContainerVisible}\n timeout={ThemeExport.transitionMs}\n classNames=\"fade\"\n mountOnEnter\n unmountOnExit\n >\n <div className=\"buttons-container\">\n <button\n type=\"button\"\n className=\"btn btn-outline-secondary btn-cancel\"\n onClick={this.handleCancelClick}\n >\n Cancel\n </button>\n <Button\n kind={isFetching ? 'tertiary' : 'primary'}\n className={classNames('btn-copy', {\n 'btn-spinner': isFetching,\n })}\n onClick={this.handleCopyClick}\n disabled={isFetching}\n >\n {isFetching && (\n <LoadingSpinner className=\"loading-spinner-vertical-align\" />\n )}\n {copyButtonText}\n </Button>\n </div>\n </CSSTransition>\n </IrisGridBottomBar>\n );\n }\n}\n\nexport default IrisGridCopyHandler;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sourceRoot":"","sources":["../../../node_modules/@deephaven/components/scss/custom.scss","../src/IrisGridPartitionSelector.scss","../../../node_modules/@deephaven/components/scss/bootstrap_overrides.scss"],"names":[],"mappings":"AAAA;ACGA;EACE;EACA;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;EACA;EACA;;AAEF;EACE;;AAEF;EACE;EACA;;AACA;EACE;EACA;EACA;EACA,QAxB4B;;AA0B9B;EACE;EACA;;AAGJ;EACE;;AAEF;EACE,OCxBa;EDyBb,cCzBa;ED0Bb;EACA;;AAEF;EACE;EACA;EACA","file":"IrisGridPartitionSelector.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 '@deephaven/components/scss/custom.scss';\n$partition-selector-color: $white;\n$partition-selector-input-height: 2.25em;\n.iris-grid-partition-selector {\n display: flex;\n flex-wrap: wrap;\n background: transparent;\n vertical-align: middle;\n .status-message {\n text-overflow: ellipsis;\n display: flex;\n flex-direction: row;\n align-items: center;\n padding: 0.5em;\n white-space: nowrap;\n }\n div {\n flex-grow: 0;\n }\n .input-group {\n width: auto;\n align-items: center;\n .form-control {\n background-color: transparent;\n border: 2px solid $partition-selector-color;\n border-right: none;\n height: $partition-selector-input-height;\n }\n .btn {\n background-color: transparent;\n margin: 0;\n }\n }\n .iris-grid-partition-selector-spacer {\n flex-grow: 1;\n }\n .btn-outline-primary {\n color: $white;\n border-color: $white;\n margin: 0.35em 0.3em;\n padding: 0.25em 0.5em;\n }\n .btn-close {\n padding: 0 0.5em;\n margin: 0.25em 0.25em 0.25em 0;\n min-width: 0;\n }\n}\n","// Styling overrides for bootstrap\n\n// Override / set color variables\n$red: #f95d84;\n$orange: #f37e3f;\n$yellow: #fcd65b;\n$green: #9edc6f;\n$blue: #76d9e4;\n$purple: #aa9af4;\n\n//Define some UI colors\n$interfacegray: #2d2a2e;\n$interfaceblue: #4878ea;\n$interfacewhite: #f0f0ee; //same as gray-200\n$interfaceblack: #1a171a;\n\n//Define our Gray scale\n$white: $interfacewhite;\n$gray-100: #fcfcfa;\n$gray-200: $interfacewhite;\n$gray-300: #c0bfbf;\n$gray-400: #929192;\n$gray-500: #5b5a5c;\n$gray-600: #555356;\n$gray-700: #403e41;\n$gray-800: #373438;\n$gray-850: #322f33;\n$gray-900: #211f22;\n$black: $interfaceblack;\n$content-bg: $interfacegray;\n$background: $interfaceblack;\n$foreground: $interfacewhite;\n\n//Load colors into map\n$colors: ();\n$colors: map-merge(\n (\n 'red': $red,\n 'orange': $orange,\n 'yellow': $yellow,\n 'green': $green,\n 'blue': $blue,\n 'purple': $purple,\n 'white': $white,\n 'black': $black,\n ),\n $colors\n);\n\n//Set default colors\n$body-bg: $black;\n$body-color: $interfacewhite;\n\n// Set brand colors\n$primary: $interfaceblue;\n$primary-hover: darken($primary, 8%);\n$primary-dark: mix($primary, $content-bg, 25%);\n$primary-light: scale-color($primary, $lightness: -25%);\n$secondary: $gray-500;\n$secondary-hover: darken($secondary, 8%);\n$success: $green;\n$info: $yellow;\n$warning: $orange;\n$danger: $red;\n$danger-hover: darken($danger, 8%);\n$light: $gray-100;\n$mid: $gray-400; //Added a mid color, useful for input styling\n$dark: $gray-800;\n$green-dark: scale-color($green, $lightness: -45%, $saturation: -10%);\n\n$theme-colors: () !default;\n$theme-colors: map-merge(\n (\n 'primary': $primary,\n 'primary-hover': $primary-hover,\n 'primary-light': $primary-light,\n 'primary-dark': $primary-dark,\n 'secondary': $secondary,\n 'success': $success,\n 'info': $info,\n 'warning': $warning,\n 'danger': $danger,\n 'light': $light,\n 'dark': $dark,\n 'mid': $mid,\n 'content-bg': $interfacegray,\n 'background': $interfaceblack,\n 'foreground': $interfacewhite,\n ),\n $theme-colors\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
|
|
1
|
+
{"version":3,"sourceRoot":"","sources":["../../../node_modules/@deephaven/components/scss/custom.scss","../src/IrisGridPartitionSelector.scss","../../../node_modules/@deephaven/components/scss/bootstrap_overrides.scss"],"names":[],"mappings":"AAAA;ACGA;EACE;EACA;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;EACA;EACA;;AAEF;EACE;;AAEF;EACE;EACA;;AACA;EACE;EACA;EACA;EACA,QAxB4B;;AA0B9B;EACE;EACA;;AAGJ;EACE;;AAEF;EACE,OCxBa;EDyBb,cCzBa;ED0Bb;EACA;;AAEF;EACE;EACA;EACA","file":"IrisGridPartitionSelector.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 '@deephaven/components/scss/custom.scss';\n$partition-selector-color: $white;\n$partition-selector-input-height: 2.25em;\n.iris-grid-partition-selector {\n display: flex;\n flex-wrap: wrap;\n background: transparent;\n vertical-align: middle;\n .status-message {\n text-overflow: ellipsis;\n display: flex;\n flex-direction: row;\n align-items: center;\n padding: 0.5em;\n white-space: nowrap;\n }\n div {\n flex-grow: 0;\n }\n .input-group {\n width: auto;\n align-items: center;\n .form-control {\n background-color: transparent;\n border: 2px solid $partition-selector-color;\n border-right: none;\n height: $partition-selector-input-height;\n }\n .btn {\n background-color: transparent;\n margin: 0;\n }\n }\n .iris-grid-partition-selector-spacer {\n flex-grow: 1;\n }\n .btn-outline-primary {\n color: $white;\n border-color: $white;\n margin: 0.35em 0.3em;\n padding: 0.25em 0.5em;\n }\n .btn-close {\n padding: 0 0.5em;\n margin: 0.25em 0.25em 0.25em 0;\n min-width: 0;\n }\n}\n","// Styling overrides for bootstrap\n\n// Override / set color variables\n$red: #f95d84;\n$orange: #f37e3f;\n$yellow: #fcd65b;\n$green: #9edc6f;\n$blue: #76d9e4;\n$purple: #aa9af4;\n\n//Define some UI colors\n$interfacegray: #2d2a2e;\n$interfaceblue: #4878ea;\n$interfacewhite: #f0f0ee; //same as gray-200\n$interfaceblack: #1a171a;\n\n//Define our Gray scale\n$white: $interfacewhite;\n$gray-100: #fcfcfa;\n$gray-200: $interfacewhite;\n$gray-300: #c0bfbf;\n$gray-400: #929192;\n$gray-500: #5b5a5c;\n$gray-600: #555356;\n$gray-700: #403e41;\n$gray-800: #373438;\n$gray-850: #322f33;\n$gray-900: #211f22;\n$black: $interfaceblack;\n$content-bg: $interfacegray;\n$background: $interfaceblack;\n$foreground: $interfacewhite;\n\n//Load colors into map\n$colors: ();\n$colors: map-merge(\n (\n 'red': $red,\n 'orange': $orange,\n 'yellow': $yellow,\n 'green': $green,\n 'blue': $blue,\n 'purple': $purple,\n 'white': $white,\n 'black': $black,\n ),\n $colors\n);\n\n//Set default colors\n$body-bg: $black;\n$body-color: $interfacewhite;\n\n// Set brand colors\n$primary: $interfaceblue;\n$primary-hover: darken($primary, 8%);\n$primary-dark: mix($primary, $content-bg, 25%);\n$primary-light: scale-color($primary, $lightness: -25%);\n$secondary: $gray-500;\n$secondary-hover: darken($secondary, 8%);\n$success: $green;\n$info: $yellow;\n$warning: $orange;\n$danger: $red;\n$danger-hover: darken($danger, 8%);\n$light: $gray-100;\n$mid: $gray-400; //Added a mid color, useful for input styling\n$dark: $gray-800;\n$green-dark: scale-color($green, $lightness: -45%, $saturation: -10%);\n\n$theme-colors: () !default;\n$theme-colors: map-merge(\n (\n 'primary': $primary,\n 'primary-hover': $primary-hover,\n 'primary-light': $primary-light,\n 'primary-dark': $primary-dark,\n 'secondary': $secondary,\n 'success': $success,\n 'info': $info,\n 'warning': $warning,\n 'danger': $danger,\n 'light': $light,\n 'dark': $dark,\n 'mid': $mid,\n 'content-bg': $interfacegray,\n 'background': $interfaceblack,\n 'foreground': $interfacewhite,\n ),\n $theme-colors\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//so browsers add alpha to your color by default, ignoring opacity 1\n//by setting rgba with 0.99 it tricks browser into thinking there is alpha applied\n$text-select-color: $primary-hover;\n$text-select-color-editor: lighten(\n $gray-700,\n 15%\n); //we lighten it abit to account for that 0.01 loss, and because it needs some anyways.\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 rgba($black, 45%); //because our UI is so dark, we need darker default shadows\n$box-shadow-900: 0 0.1rem 1rem rgba(0, 0, 0, 45%); //darkest shadow for $black popups over $black UI\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\n//Override Inputs\n$input-bg: $gray-600;\n$input-disabled-bg: $gray-800;\n$input-color: $foreground;\n$input-border-color: $gray-400;\n$input-placeholder-color: $gray-400;\n$input-focus-border-color: rgba($primary, 85%);\n\n$input-btn-focus-width: 0.2rem;\n$input-btn-focus-color: rgba($component-active-bg, 35%);\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color;\n\n//checkbox\n$custom-control-indicator-bg: $gray-600;\n$custom-control-indicator-bg-size: 75% 75%;\n$custom-control-indicator-disabled-bg: $gray-800;\n$custom-control-indicator-checked-disabled-bg: $gray-800;\n$custom-control-label-disabled-color: $gray-400;\n\n//Custom Select\n$custom-select-indicator-color: $gray-400;\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: darken($gray-400, 5%);\n$custom-select-disabled-bg: $gray-800;\n\n//modal\n$modal-content-bg: $gray-200;\n$modal-content-border-width: 0;\n$modal-md: 550px;\n\n// Toast notification\n$toast-bg: $primary-dark;\n$toast-color: $foreground;\n$toast-error-bg: mix($danger, $content-bg, 15%);\n$toast-error-color: $foreground;\n\n//tooltips\n$tooltip-bg: $gray-700;\n$tooltip-color: $foreground;\n$tooltip-box-shadow: 0 0.1rem 1.5rem 0.1rem rgba($black, 80%);\n\n//drowdowns\n$dropdown-bg: $gray-600;\n$dropdown-link-color: $foreground;\n$dropdown-link-hover-color: $foreground;\n$dropdown-link-hover-bg: $primary;\n$dropdown-divider-bg: $gray-700;\n\n//context menus\n$contextmenu-bg: $gray-600;\n$contextmenu-color: $foreground;\n$contextmenu-disabled-color: $text-muted;\n$contextmenu-keyboard-selected-bg: rgba($primary, 50%);\n$contextmenu-selected-bg: $primary;\n$contextmenu-selected-color: $foreground;\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: theme-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"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sourceRoot":"","sources":["../src/IrisGridTheme.module.scss","../../../node_modules/@deephaven/components/scss/custom.scss","../../../node_modules/@deephaven/components/scss/bootstrap_overrides.scss"],"names":[],"mappings":"AAAA;ACAA;ADaA;EACE,SEaS;EFZT,MACE;EAEF,OELe;EFMf,OELe;EFMf,WETc;EFUd,cERe;EFSf,eAXc;EAYd,wBEIS;EFHT,8BEHS;EFIT,qCEbc;EFcd,uBElBO;EFmBP,0BEyCW;EFxCX,yBEDS;EFET,aACE;EAEF,YAzBW;EA0BX;EACA,iBA/BgB;EAgChB,yBE5BK;EF6BL,gCETS;EFUT,cA7Ba;EA8Bb;EACA;EAEA,eEfS;EFgBT,qBEjBS;EFkBT,yBEpBS;EFqBT,yBElBS;EFmBT,kBEvBS;EFwBT,wBEzBS;EF0BT,yBE3BS;EF6BT,YEpCe;EFqCf,iBEtCc;EFuCd,uBE7CM;EF8CN,uBEjDI;EFkDJ,mBEhDO;EFiDP,YEjDO;EFkDP;EACA,kBErDI;EFsDJ,mBEpCS;EFuCT;EAKA,yBErDc;EFsDd,wBEzCS;EF0CT;EAKA;EAKA,4BExDS;EFyDT,wBE3EI;EF4EJ,mBEnEc;EFqEd,aEtDS;EFuDT,8BE1EO;EF2EP,iCEfW;EFgBX;EACA,iBE/DS;EFgET,mBElES;EFmET,yBErES;EFsET,8BE1Ee;EF4Ef,yBEnES;EFoET,gCEnES;EFoET,8BEpES;EFqET,8BElES;EFoET,uBE3ES;EF4ET,6BE9ES;EFgFT,iBE5ES;EF6ET,oBE7FM;EF8FN,oBEjGI","file":"IrisGridTheme.module.css","sourcesContent":["/* stylelint-disable */\n@import '@deephaven/components/scss/custom.scss';\n\n$selection-color: rgba($blue, 0.09);\n$selection-outline-color: $blue;\n$selection-outline-casing-color: $gray-900;\n$font-size: 12px;\n$row-height: 19px;\n$row-hover-bg: mix($gray-600, $gray-700, 50%);\n$header-bg: $content-bg;\n$header-separator-color: $gray-900;\n$header-height: 30px;\n\n:export {\n grid-bg: $gray-900;\n font:\n $font-size Fira Sans,\n sans-serif; // must be preloaded\n white: $white;\n black: $black;\n header-bg: $header-bg;\n header-color: $foreground;\n header-height: $header-height;\n header-separator-color: $header-separator-color;\n header-separator-hover-color: $gray-400;\n header-hidden-separator-hover-color: $primary;\n header-sort-bar-color: $purple;\n header-reverse-bar-color: $green-dark;\n header-bar-casing-color: $gray-900;\n header-font:\n 600 $font-size Fira Sans,\n sans-serif; // must be preloaded\n row-height: $row-height;\n row-background-colors: $gray-800 $content-bg;\n selection-color: $selection-color;\n selection-outline-color: $selection-outline-color;\n selection-outline-casing-color: $selection-outline-casing-color;\n row-hover-bg: $row-hover-bg;\n selected-row-hover-bg: rgba($blue, 0.25);\n scroll-bar-active-selection-tick-color: rgba($blue, 0.5);\n\n scroll-bar-bg: $gray-850;\n scroll-bar-hover-bg: $gray-800;\n scroll-bar-casing-color: $gray-600;\n scroll-bar-corner-color: $gray-850;\n scroll-bar-color: $gray-500;\n scroll-bar-hover-color: $gray-400;\n scroll-bar-active-color: $gray-300;\n\n text-color: $white;\n hyperlink-color: $primary;\n positive-number-color: $green;\n negative-number-color: $red;\n zero-number-color: $yellow;\n date-color: $yellow;\n pending-text-color: lighten($yellow, 10%);\n error-text-color: $danger;\n null-string-color: $gray-400;\n\n $filter-color: $primary; // local to just the following\n filter-bar-active-bg: scale-color(\n $filter-color,\n $saturation: -65%,\n $lightness: -40%\n );\n filter-bar-active-color: $filter-color;\n filter-bar-expanded-bg: $gray-800;\n filter-bar-expanded-active-bg: scale-color(\n $filter-color,\n $saturation: -75%,\n $lightness: -60%\n );\n filter-bar-expanded-active-cell-bg: scale-color(\n $filter-color,\n $saturation: -50%,\n $lightness: -40%\n );\n filter-bar-separator-color: $gray-400;\n filter-bar-error-color: $danger;\n filter-icon-color: $filter-color;\n\n scrim-color: $gray-900;\n context-menu-sort-icon-color: $purple;\n context-menu-reverse-icon-color: $green-dark;\n linker-column-hover-bg: rgba($blue, 0.09);\n tree-line-color: $gray-500;\n tree-marker-color: $gray-300;\n tree-marker-hover-color: $gray-100;\n grouped-column-divider-color: $black;\n\n floating-grid-row-color: $gray-600;\n floating-row-background-colors: $gray-700;\n floating-divider-inner-color: $gray-700;\n floating-divider-outer-color: $gray-900;\n\n overflow-button-color: $gray-300;\n overflow-button-hover-color: $gray-100;\n\n zero-line-color: $gray-500;\n positive-bar-color: $green;\n negative-bar-color: $red;\n}\n","/* 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","// Styling overrides for bootstrap\n\n// Override / set color variables\n$red: #f95d84;\n$orange: #f37e3f;\n$yellow: #fcd65b;\n$green: #9edc6f;\n$blue: #76d9e4;\n$purple: #aa9af4;\n\n//Define some UI colors\n$interfacegray: #2d2a2e;\n$interfaceblue: #4878ea;\n$interfacewhite: #f0f0ee; //same as gray-200\n$interfaceblack: #1a171a;\n\n//Define our Gray scale\n$white: $interfacewhite;\n$gray-100: #fcfcfa;\n$gray-200: $interfacewhite;\n$gray-300: #c0bfbf;\n$gray-400: #929192;\n$gray-500: #5b5a5c;\n$gray-600: #555356;\n$gray-700: #403e41;\n$gray-800: #373438;\n$gray-850: #322f33;\n$gray-900: #211f22;\n$black: $interfaceblack;\n$content-bg: $interfacegray;\n$background: $interfaceblack;\n$foreground: $interfacewhite;\n\n//Load colors into map\n$colors: ();\n$colors: map-merge(\n (\n 'red': $red,\n 'orange': $orange,\n 'yellow': $yellow,\n 'green': $green,\n 'blue': $blue,\n 'purple': $purple,\n 'white': $white,\n 'black': $black,\n ),\n $colors\n);\n\n//Set default colors\n$body-bg: $black;\n$body-color: $interfacewhite;\n\n// Set brand colors\n$primary: $interfaceblue;\n$primary-hover: darken($primary, 8%);\n$primary-dark: mix($primary, $content-bg, 25%);\n$primary-light: scale-color($primary, $lightness: -25%);\n$secondary: $gray-500;\n$secondary-hover: darken($secondary, 8%);\n$success: $green;\n$info: $yellow;\n$warning: $orange;\n$danger: $red;\n$danger-hover: darken($danger, 8%);\n$light: $gray-100;\n$mid: $gray-400; //Added a mid color, useful for input styling\n$dark: $gray-800;\n$green-dark: scale-color($green, $lightness: -45%, $saturation: -10%);\n\n$theme-colors: () !default;\n$theme-colors: map-merge(\n (\n 'primary': $primary,\n 'primary-hover': $primary-hover,\n 'primary-light': $primary-light,\n 'primary-dark': $primary-dark,\n 'secondary': $secondary,\n 'success': $success,\n 'info': $info,\n 'warning': $warning,\n 'danger': $danger,\n 'light': $light,\n 'dark': $dark,\n 'mid': $mid,\n 'content-bg': $interfacegray,\n 'background': $interfaceblack,\n 'foreground': $interfacewhite,\n ),\n $theme-colors\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: 'Fira Sans', -apple-system, blinkmacsystemfont,\n 'Segoe UI', 'Roboto', 'Helvetica Neue', arial, 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//so browsers add alpha to your color by default, ignoring opacity 1\n//by setting rgba with 0.99 it tricks browser into thinking there is alpha applied\n$text-select-color: $primary-hover;\n$text-select-color-editor: lighten(\n $gray-700,\n 15%\n); //we lighten it abit to account for that 0.01 loss, and because it needs some anyways.\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 rgba($black, 45%); //because our UI is so dark, we need darker default shadows\n$box-shadow-900: 0 0.1rem 1rem rgba(0, 0, 0, 45%); //darkest shadow for $black popups over $black UI\n\n//Override Btn\n$btn-border-radius: 4rem;\n$btn-padding-x: 1.5rem;\n$btn-transition: color 0.12s ease-in-out, background-color 0.12s ease-in-out,\n border-color 0.12s ease-in-out, box-shadow 0.12s ease-in-out; //default 0.15 is too long\n$btn-border-width: 2px;\n\n//Override Inputs\n$input-bg: $gray-600;\n$input-disabled-bg: $gray-800;\n$input-color: $foreground;\n$input-border-color: $gray-400;\n$input-placeholder-color: $gray-400;\n$input-focus-border-color: rgba($primary, 85%);\n\n$input-btn-focus-width: 0.2rem;\n$input-btn-focus-color: rgba($component-active-bg, 35%);\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color;\n\n//checkbox\n$custom-control-indicator-bg: $gray-600;\n$custom-control-indicator-bg-size: 75% 75%;\n$custom-control-indicator-disabled-bg: $gray-800;\n$custom-control-indicator-checked-disabled-bg: $gray-800;\n$custom-control-label-disabled-color: $gray-400;\n\n//Custom Select\n$custom-select-indicator-color: $gray-400;\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: darken($gray-400, 5%);\n$custom-select-disabled-bg: $gray-800;\n\n//modal\n$modal-content-bg: $gray-200;\n$modal-content-border-width: 0;\n$modal-md: 550px;\n\n// Toast notification\n$toast-bg: $primary-dark;\n$toast-color: $foreground;\n$toast-error-bg: mix($danger, $content-bg, 15%);\n$toast-error-color: $foreground;\n\n//tooltips\n$tooltip-bg: $gray-700;\n$tooltip-color: $foreground;\n$tooltip-box-shadow: 0 0.1rem 1.5rem 0.1rem rgba($black, 80%);\n\n//drowdowns\n$dropdown-bg: $gray-600;\n$dropdown-link-color: $foreground;\n$dropdown-link-hover-color: $foreground;\n$dropdown-link-hover-bg: $primary;\n$dropdown-divider-bg: $gray-700;\n\n//context menus\n$contextmenu-bg: $gray-600;\n$contextmenu-color: $foreground;\n$contextmenu-disabled-color: $text-muted;\n$contextmenu-keyboard-selected-bg: rgba($primary, 50%);\n$contextmenu-selected-bg: $primary;\n$contextmenu-selected-color: $foreground;\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: theme-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"]}
|
|
1
|
+
{"version":3,"sourceRoot":"","sources":["../src/IrisGridTheme.module.scss","../../../node_modules/@deephaven/components/scss/custom.scss","../../../node_modules/@deephaven/components/scss/bootstrap_overrides.scss"],"names":[],"mappings":"AAAA;ACAA;ADaA;EACE,SEaS;EFZT,MACE;EAEF,OELe;EFMf,OELe;EFMf,WETc;EFUd,cERe;EFSf,eAXc;EAYd,wBEIS;EFHT,8BEHS;EFIT,qCEbc;EFcd,uBElBO;EFmBP,0BEyCW;EFxCX,yBEDS;EFET,aACE;EAEF,YAzBW;EA0BX;EACA,iBA/BgB;EAgChB,yBE5BK;EF6BL,gCETS;EFUT,cA7Ba;EA8Bb;EACA;EAEA,eEfS;EFgBT,qBEjBS;EFkBT,yBEpBS;EFqBT,yBElBS;EFmBT,kBEvBS;EFwBT,wBEzBS;EF0BT,yBE3BS;EF6BT,YEpCe;EFqCf,iBEtCc;EFuCd,uBE7CM;EF8CN,uBEjDI;EFkDJ,mBEhDO;EFiDP,YEjDO;EFkDP;EACA,kBErDI;EFsDJ,mBEpCS;EFuCT;EAKA,yBErDc;EFsDd,wBEzCS;EF0CT;EAKA;EAKA,4BExDS;EFyDT,wBE3EI;EF4EJ,mBEnEc;EFqEd,aEtDS;EFuDT,8BE1EO;EF2EP,iCEfW;EFgBX;EACA,iBE/DS;EFgET,mBElES;EFmET,yBErES;EFsET,8BE1Ee;EF4Ef,yBEnES;EFoET,gCEnES;EFoET,8BEpES;EFqET,8BElES;EFoET,uBE3ES;EF4ET,6BE9ES;EFgFT,iBE5ES;EF6ET,oBE7FM;EF8FN,oBEjGI","file":"IrisGridTheme.module.css","sourcesContent":["/* stylelint-disable */\n@import '@deephaven/components/scss/custom.scss';\n\n$selection-color: rgba($blue, 0.09);\n$selection-outline-color: $blue;\n$selection-outline-casing-color: $gray-900;\n$font-size: 12px;\n$row-height: 19px;\n$row-hover-bg: mix($gray-600, $gray-700, 50%);\n$header-bg: $content-bg;\n$header-separator-color: $gray-900;\n$header-height: 30px;\n\n:export {\n grid-bg: $gray-900;\n font:\n $font-size Fira Sans,\n sans-serif; // must be preloaded\n white: $white;\n black: $black;\n header-bg: $header-bg;\n header-color: $foreground;\n header-height: $header-height;\n header-separator-color: $header-separator-color;\n header-separator-hover-color: $gray-400;\n header-hidden-separator-hover-color: $primary;\n header-sort-bar-color: $purple;\n header-reverse-bar-color: $green-dark;\n header-bar-casing-color: $gray-900;\n header-font:\n 600 $font-size Fira Sans,\n sans-serif; // must be preloaded\n row-height: $row-height;\n row-background-colors: $gray-800 $content-bg;\n selection-color: $selection-color;\n selection-outline-color: $selection-outline-color;\n selection-outline-casing-color: $selection-outline-casing-color;\n row-hover-bg: $row-hover-bg;\n selected-row-hover-bg: rgba($blue, 0.25);\n scroll-bar-active-selection-tick-color: rgba($blue, 0.5);\n\n scroll-bar-bg: $gray-850;\n scroll-bar-hover-bg: $gray-800;\n scroll-bar-casing-color: $gray-600;\n scroll-bar-corner-color: $gray-850;\n scroll-bar-color: $gray-500;\n scroll-bar-hover-color: $gray-400;\n scroll-bar-active-color: $gray-300;\n\n text-color: $white;\n hyperlink-color: $primary;\n positive-number-color: $green;\n negative-number-color: $red;\n zero-number-color: $yellow;\n date-color: $yellow;\n pending-text-color: lighten($yellow, 10%);\n error-text-color: $danger;\n null-string-color: $gray-400;\n\n $filter-color: $primary; // local to just the following\n filter-bar-active-bg: scale-color(\n $filter-color,\n $saturation: -65%,\n $lightness: -40%\n );\n filter-bar-active-color: $filter-color;\n filter-bar-expanded-bg: $gray-800;\n filter-bar-expanded-active-bg: scale-color(\n $filter-color,\n $saturation: -75%,\n $lightness: -60%\n );\n filter-bar-expanded-active-cell-bg: scale-color(\n $filter-color,\n $saturation: -50%,\n $lightness: -40%\n );\n filter-bar-separator-color: $gray-400;\n filter-bar-error-color: $danger;\n filter-icon-color: $filter-color;\n\n scrim-color: $gray-900;\n context-menu-sort-icon-color: $purple;\n context-menu-reverse-icon-color: $green-dark;\n linker-column-hover-bg: rgba($blue, 0.09);\n tree-line-color: $gray-500;\n tree-marker-color: $gray-300;\n tree-marker-hover-color: $gray-100;\n grouped-column-divider-color: $black;\n\n floating-grid-row-color: $gray-600;\n floating-row-background-colors: $gray-700;\n floating-divider-inner-color: $gray-700;\n floating-divider-outer-color: $gray-900;\n\n overflow-button-color: $gray-300;\n overflow-button-hover-color: $gray-100;\n\n zero-line-color: $gray-500;\n positive-bar-color: $green;\n negative-bar-color: $red;\n}\n","/* 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","// Styling overrides for bootstrap\n\n// Override / set color variables\n$red: #f95d84;\n$orange: #f37e3f;\n$yellow: #fcd65b;\n$green: #9edc6f;\n$blue: #76d9e4;\n$purple: #aa9af4;\n\n//Define some UI colors\n$interfacegray: #2d2a2e;\n$interfaceblue: #4878ea;\n$interfacewhite: #f0f0ee; //same as gray-200\n$interfaceblack: #1a171a;\n\n//Define our Gray scale\n$white: $interfacewhite;\n$gray-100: #fcfcfa;\n$gray-200: $interfacewhite;\n$gray-300: #c0bfbf;\n$gray-400: #929192;\n$gray-500: #5b5a5c;\n$gray-600: #555356;\n$gray-700: #403e41;\n$gray-800: #373438;\n$gray-850: #322f33;\n$gray-900: #211f22;\n$black: $interfaceblack;\n$content-bg: $interfacegray;\n$background: $interfaceblack;\n$foreground: $interfacewhite;\n\n//Load colors into map\n$colors: ();\n$colors: map-merge(\n (\n 'red': $red,\n 'orange': $orange,\n 'yellow': $yellow,\n 'green': $green,\n 'blue': $blue,\n 'purple': $purple,\n 'white': $white,\n 'black': $black,\n ),\n $colors\n);\n\n//Set default colors\n$body-bg: $black;\n$body-color: $interfacewhite;\n\n// Set brand colors\n$primary: $interfaceblue;\n$primary-hover: darken($primary, 8%);\n$primary-dark: mix($primary, $content-bg, 25%);\n$primary-light: scale-color($primary, $lightness: -25%);\n$secondary: $gray-500;\n$secondary-hover: darken($secondary, 8%);\n$success: $green;\n$info: $yellow;\n$warning: $orange;\n$danger: $red;\n$danger-hover: darken($danger, 8%);\n$light: $gray-100;\n$mid: $gray-400; //Added a mid color, useful for input styling\n$dark: $gray-800;\n$green-dark: scale-color($green, $lightness: -45%, $saturation: -10%);\n\n$theme-colors: () !default;\n$theme-colors: map-merge(\n (\n 'primary': $primary,\n 'primary-hover': $primary-hover,\n 'primary-light': $primary-light,\n 'primary-dark': $primary-dark,\n 'secondary': $secondary,\n 'success': $success,\n 'info': $info,\n 'warning': $warning,\n 'danger': $danger,\n 'light': $light,\n 'dark': $dark,\n 'mid': $mid,\n 'content-bg': $interfacegray,\n 'background': $interfaceblack,\n 'foreground': $interfacewhite,\n ),\n $theme-colors\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//so browsers add alpha to your color by default, ignoring opacity 1\n//by setting rgba with 0.99 it tricks browser into thinking there is alpha applied\n$text-select-color: $primary-hover;\n$text-select-color-editor: lighten(\n $gray-700,\n 15%\n); //we lighten it abit to account for that 0.01 loss, and because it needs some anyways.\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 rgba($black, 45%); //because our UI is so dark, we need darker default shadows\n$box-shadow-900: 0 0.1rem 1rem rgba(0, 0, 0, 45%); //darkest shadow for $black popups over $black UI\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\n//Override Inputs\n$input-bg: $gray-600;\n$input-disabled-bg: $gray-800;\n$input-color: $foreground;\n$input-border-color: $gray-400;\n$input-placeholder-color: $gray-400;\n$input-focus-border-color: rgba($primary, 85%);\n\n$input-btn-focus-width: 0.2rem;\n$input-btn-focus-color: rgba($component-active-bg, 35%);\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color;\n\n//checkbox\n$custom-control-indicator-bg: $gray-600;\n$custom-control-indicator-bg-size: 75% 75%;\n$custom-control-indicator-disabled-bg: $gray-800;\n$custom-control-indicator-checked-disabled-bg: $gray-800;\n$custom-control-label-disabled-color: $gray-400;\n\n//Custom Select\n$custom-select-indicator-color: $gray-400;\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: darken($gray-400, 5%);\n$custom-select-disabled-bg: $gray-800;\n\n//modal\n$modal-content-bg: $gray-200;\n$modal-content-border-width: 0;\n$modal-md: 550px;\n\n// Toast notification\n$toast-bg: $primary-dark;\n$toast-color: $foreground;\n$toast-error-bg: mix($danger, $content-bg, 15%);\n$toast-error-color: $foreground;\n\n//tooltips\n$tooltip-bg: $gray-700;\n$tooltip-color: $foreground;\n$tooltip-box-shadow: 0 0.1rem 1.5rem 0.1rem rgba($black, 80%);\n\n//drowdowns\n$dropdown-bg: $gray-600;\n$dropdown-link-color: $foreground;\n$dropdown-link-hover-color: $foreground;\n$dropdown-link-hover-bg: $primary;\n$dropdown-divider-bg: $gray-700;\n\n//context menus\n$contextmenu-bg: $gray-600;\n$contextmenu-color: $foreground;\n$contextmenu-disabled-color: $text-muted;\n$contextmenu-keyboard-selected-bg: rgba($primary, 50%);\n$contextmenu-selected-bg: $primary;\n$contextmenu-selected-color: $foreground;\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: theme-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"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sourceRoot":"","sources":["../../../node_modules/@deephaven/components/scss/custom.scss","../src/PartitionSelectorSearch.scss","../../../node_modules/@deephaven/components/scss/bootstrap_overrides.scss"],"names":[],"mappings":"AAAA;ACII;EACE;;AAGJ;EACE,OCYO;EDXP;EACA;;AAEF;EACE,OCOO;EDNP;EACA;;AAEF;EACE;;AACA;EACE,kBCCK","file":"PartitionSelectorSearch.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 '@deephaven/components/scss/custom.scss';\n$partition-selector-search-input-bg: $gray-500;\n.iris-grid-partition-selector-search {\n .iris-grid-partition-selector-search-list {\n .item-list-scroll-pane {\n border: none;\n }\n }\n .iris-grid-partition-selector-search-empty {\n color: $text-muted;\n padding: $input-padding-y $input-btn-padding-x;\n text-align: center;\n }\n .iris-grid-partition-selector-loading {\n color: $text-muted;\n padding: $input-padding-y $input-btn-padding-x;\n text-align: center;\n }\n .search-container {\n padding: $tooltip-padding-y $tooltip-padding-x;\n .form-control {\n background-color: $partition-selector-search-input-bg;\n }\n }\n}\n","// Styling overrides for bootstrap\n\n// Override / set color variables\n$red: #f95d84;\n$orange: #f37e3f;\n$yellow: #fcd65b;\n$green: #9edc6f;\n$blue: #76d9e4;\n$purple: #aa9af4;\n\n//Define some UI colors\n$interfacegray: #2d2a2e;\n$interfaceblue: #4878ea;\n$interfacewhite: #f0f0ee; //same as gray-200\n$interfaceblack: #1a171a;\n\n//Define our Gray scale\n$white: $interfacewhite;\n$gray-100: #fcfcfa;\n$gray-200: $interfacewhite;\n$gray-300: #c0bfbf;\n$gray-400: #929192;\n$gray-500: #5b5a5c;\n$gray-600: #555356;\n$gray-700: #403e41;\n$gray-800: #373438;\n$gray-850: #322f33;\n$gray-900: #211f22;\n$black: $interfaceblack;\n$content-bg: $interfacegray;\n$background: $interfaceblack;\n$foreground: $interfacewhite;\n\n//Load colors into map\n$colors: ();\n$colors: map-merge(\n (\n 'red': $red,\n 'orange': $orange,\n 'yellow': $yellow,\n 'green': $green,\n 'blue': $blue,\n 'purple': $purple,\n 'white': $white,\n 'black': $black,\n ),\n $colors\n);\n\n//Set default colors\n$body-bg: $black;\n$body-color: $interfacewhite;\n\n// Set brand colors\n$primary: $interfaceblue;\n$primary-hover: darken($primary, 8%);\n$primary-dark: mix($primary, $content-bg, 25%);\n$primary-light: scale-color($primary, $lightness: -25%);\n$secondary: $gray-500;\n$secondary-hover: darken($secondary, 8%);\n$success: $green;\n$info: $yellow;\n$warning: $orange;\n$danger: $red;\n$danger-hover: darken($danger, 8%);\n$light: $gray-100;\n$mid: $gray-400; //Added a mid color, useful for input styling\n$dark: $gray-800;\n$green-dark: scale-color($green, $lightness: -45%, $saturation: -10%);\n\n$theme-colors: () !default;\n$theme-colors: map-merge(\n (\n 'primary': $primary,\n 'primary-hover': $primary-hover,\n 'primary-light': $primary-light,\n 'primary-dark': $primary-dark,\n 'secondary': $secondary,\n 'success': $success,\n 'info': $info,\n 'warning': $warning,\n 'danger': $danger,\n 'light': $light,\n 'dark': $dark,\n 'mid': $mid,\n 'content-bg': $interfacegray,\n 'background': $interfaceblack,\n 'foreground': $interfacewhite,\n ),\n $theme-colors\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
|
|
1
|
+
{"version":3,"sourceRoot":"","sources":["../../../node_modules/@deephaven/components/scss/custom.scss","../src/PartitionSelectorSearch.scss","../../../node_modules/@deephaven/components/scss/bootstrap_overrides.scss"],"names":[],"mappings":"AAAA;ACII;EACE;;AAGJ;EACE,OCYO;EDXP;EACA;;AAEF;EACE,OCOO;EDNP;EACA;;AAEF;EACE;;AACA;EACE,kBCCK","file":"PartitionSelectorSearch.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 '@deephaven/components/scss/custom.scss';\n$partition-selector-search-input-bg: $gray-500;\n.iris-grid-partition-selector-search {\n .iris-grid-partition-selector-search-list {\n .item-list-scroll-pane {\n border: none;\n }\n }\n .iris-grid-partition-selector-search-empty {\n color: $text-muted;\n padding: $input-padding-y $input-btn-padding-x;\n text-align: center;\n }\n .iris-grid-partition-selector-loading {\n color: $text-muted;\n padding: $input-padding-y $input-btn-padding-x;\n text-align: center;\n }\n .search-container {\n padding: $tooltip-padding-y $tooltip-padding-x;\n .form-control {\n background-color: $partition-selector-search-input-bg;\n }\n }\n}\n","// Styling overrides for bootstrap\n\n// Override / set color variables\n$red: #f95d84;\n$orange: #f37e3f;\n$yellow: #fcd65b;\n$green: #9edc6f;\n$blue: #76d9e4;\n$purple: #aa9af4;\n\n//Define some UI colors\n$interfacegray: #2d2a2e;\n$interfaceblue: #4878ea;\n$interfacewhite: #f0f0ee; //same as gray-200\n$interfaceblack: #1a171a;\n\n//Define our Gray scale\n$white: $interfacewhite;\n$gray-100: #fcfcfa;\n$gray-200: $interfacewhite;\n$gray-300: #c0bfbf;\n$gray-400: #929192;\n$gray-500: #5b5a5c;\n$gray-600: #555356;\n$gray-700: #403e41;\n$gray-800: #373438;\n$gray-850: #322f33;\n$gray-900: #211f22;\n$black: $interfaceblack;\n$content-bg: $interfacegray;\n$background: $interfaceblack;\n$foreground: $interfacewhite;\n\n//Load colors into map\n$colors: ();\n$colors: map-merge(\n (\n 'red': $red,\n 'orange': $orange,\n 'yellow': $yellow,\n 'green': $green,\n 'blue': $blue,\n 'purple': $purple,\n 'white': $white,\n 'black': $black,\n ),\n $colors\n);\n\n//Set default colors\n$body-bg: $black;\n$body-color: $interfacewhite;\n\n// Set brand colors\n$primary: $interfaceblue;\n$primary-hover: darken($primary, 8%);\n$primary-dark: mix($primary, $content-bg, 25%);\n$primary-light: scale-color($primary, $lightness: -25%);\n$secondary: $gray-500;\n$secondary-hover: darken($secondary, 8%);\n$success: $green;\n$info: $yellow;\n$warning: $orange;\n$danger: $red;\n$danger-hover: darken($danger, 8%);\n$light: $gray-100;\n$mid: $gray-400; //Added a mid color, useful for input styling\n$dark: $gray-800;\n$green-dark: scale-color($green, $lightness: -45%, $saturation: -10%);\n\n$theme-colors: () !default;\n$theme-colors: map-merge(\n (\n 'primary': $primary,\n 'primary-hover': $primary-hover,\n 'primary-light': $primary-light,\n 'primary-dark': $primary-dark,\n 'secondary': $secondary,\n 'success': $success,\n 'info': $info,\n 'warning': $warning,\n 'danger': $danger,\n 'light': $light,\n 'dark': $dark,\n 'mid': $mid,\n 'content-bg': $interfacegray,\n 'background': $interfaceblack,\n 'foreground': $interfacewhite,\n ),\n $theme-colors\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//so browsers add alpha to your color by default, ignoring opacity 1\n//by setting rgba with 0.99 it tricks browser into thinking there is alpha applied\n$text-select-color: $primary-hover;\n$text-select-color-editor: lighten(\n $gray-700,\n 15%\n); //we lighten it abit to account for that 0.01 loss, and because it needs some anyways.\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 rgba($black, 45%); //because our UI is so dark, we need darker default shadows\n$box-shadow-900: 0 0.1rem 1rem rgba(0, 0, 0, 45%); //darkest shadow for $black popups over $black UI\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\n//Override Inputs\n$input-bg: $gray-600;\n$input-disabled-bg: $gray-800;\n$input-color: $foreground;\n$input-border-color: $gray-400;\n$input-placeholder-color: $gray-400;\n$input-focus-border-color: rgba($primary, 85%);\n\n$input-btn-focus-width: 0.2rem;\n$input-btn-focus-color: rgba($component-active-bg, 35%);\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color;\n\n//checkbox\n$custom-control-indicator-bg: $gray-600;\n$custom-control-indicator-bg-size: 75% 75%;\n$custom-control-indicator-disabled-bg: $gray-800;\n$custom-control-indicator-checked-disabled-bg: $gray-800;\n$custom-control-label-disabled-color: $gray-400;\n\n//Custom Select\n$custom-select-indicator-color: $gray-400;\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: darken($gray-400, 5%);\n$custom-select-disabled-bg: $gray-800;\n\n//modal\n$modal-content-bg: $gray-200;\n$modal-content-border-width: 0;\n$modal-md: 550px;\n\n// Toast notification\n$toast-bg: $primary-dark;\n$toast-color: $foreground;\n$toast-error-bg: mix($danger, $content-bg, 15%);\n$toast-error-color: $foreground;\n\n//tooltips\n$tooltip-bg: $gray-700;\n$tooltip-color: $foreground;\n$tooltip-box-shadow: 0 0.1rem 1.5rem 0.1rem rgba($black, 80%);\n\n//drowdowns\n$dropdown-bg: $gray-600;\n$dropdown-link-color: $foreground;\n$dropdown-link-hover-color: $foreground;\n$dropdown-link-hover-bg: $primary;\n$dropdown-divider-bg: $gray-700;\n\n//context menus\n$contextmenu-bg: $gray-600;\n$contextmenu-color: $foreground;\n$contextmenu-disabled-color: $text-muted;\n$contextmenu-keyboard-selected-bg: rgba($primary, 50%);\n$contextmenu-selected-bg: $primary;\n$contextmenu-selected-color: $foreground;\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: theme-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"]}
|
|
@@ -305,7 +305,9 @@ class PartitionSelectorSearch extends Component {
|
|
|
305
305
|
children: "No results"
|
|
306
306
|
}), isLoading && /*#__PURE__*/_jsxs("div", {
|
|
307
307
|
className: "iris-grid-partition-selector-loading",
|
|
308
|
-
children: [/*#__PURE__*/_jsx(LoadingSpinner, {
|
|
308
|
+
children: [/*#__PURE__*/_jsx(LoadingSpinner, {
|
|
309
|
+
className: "loading-spinner-vertical-align"
|
|
310
|
+
}), "\xA0Loading..."]
|
|
309
311
|
})]
|
|
310
312
|
});
|
|
311
313
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PartitionSelectorSearch.js","names":["React","Component","PropTypes","debounce","TableUtils","ItemList","LoadingSpinner","Log","CanceledPromiseError","log","module","DEBOUNCE_UPDATE_FILTER","PartitionSelectorSearch","handleError","error","constructor","props","updateFilter","handleFilterChange","bind","handleKeyDown","handleListKeydown","handleSelect","handleTableUpdate","handleTextChange","handleViewportChange","itemList","searchInput","timer","dh","tableUtils","state","offset","itemCount","items","text","isLoading","componentDidMount","startListening","componentDidUpdate","prevProps","prevState","onListResized","componentWillUnmount","debounceUpdateFilter","cancel","stopListening","event","key","selectedValue","length","value","trim","onSelect","stopPropagation","preventDefault","focusItem","focus","debug2","table","size","setState","itemIndex","offsetIndex","data","detail","getFormattedString","column","columns","r","rows","row","get","displayValue","type","name","push","target","isIntegerType","parseInt","toString","topRow","bottomRow","delta","Math","max","top","bottom","setViewport","initialPageSize","addEventListener","Table","EVENT_UPDATED","EVENT_FILTERCHANGED","removeEventListener","filterText","filters","filter","makeQuickFilterFromComponent","isStringType","Error","applyFilter","render","listHeight","min","MAX_VISIBLE_ITEMS","DEFAULT_ROW_HEIGHT","inputType","isNumberType","height","undefined","func","isRequired","shape","arrayOf","string","number"],"sources":["../src/PartitionSelectorSearch.tsx"],"sourcesContent":["import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport debounce from 'lodash.debounce';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport type { dh as DhType, Table } from '@deephaven/jsapi-types';\nimport { ItemList, LoadingSpinner } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport { CanceledPromiseError } from '@deephaven/utils';\nimport './PartitionSelectorSearch.scss';\nimport { ModelIndex } from '@deephaven/grid';\n\nconst log = Log.module('PartitionSelectorSearch');\nconst DEBOUNCE_UPDATE_FILTER = 150;\n\ninterface Item {\n value: string;\n displayValue: string;\n}\n\ninterface PartitionSelectorSearchProps<T> {\n dh: DhType;\n getFormattedString: (value: T, type: string, name: string) => string;\n table: Table;\n initialPageSize: number;\n onSelect: (value: string) => void;\n onListResized: () => void;\n}\ninterface PartitionSelectorSearchState {\n offset: number;\n itemCount: number;\n items: Item[];\n text: string;\n isLoading: boolean;\n}\nclass PartitionSelectorSearch<T> extends Component<\n PartitionSelectorSearchProps<T>,\n PartitionSelectorSearchState\n> {\n static MAX_VISIBLE_ITEMS = 12;\n\n static defaultProps = {\n initialPageSize: 100,\n onSelect: (): void => undefined,\n onListResized: (): void => undefined,\n };\n\n static propTypes = {\n getFormattedString: PropTypes.func.isRequired,\n table: PropTypes.shape({\n addEventListener: PropTypes.func.isRequired,\n removeEventListener: PropTypes.func.isRequired,\n columns: PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string.isRequired,\n type: PropTypes.string.isRequired,\n filter: PropTypes.func.isRequired,\n })\n ),\n size: PropTypes.number.isRequired,\n applyFilter: PropTypes.func.isRequired,\n setViewport: PropTypes.func.isRequired,\n }).isRequired,\n initialPageSize: PropTypes.number,\n onSelect: PropTypes.func,\n onListResized: PropTypes.func,\n };\n\n static handleError(error: unknown): void {\n if (!(error instanceof CanceledPromiseError)) {\n log.error(error);\n }\n }\n\n constructor(props: PartitionSelectorSearchProps<T>) {\n super(props);\n\n this.handleFilterChange = this.handleFilterChange.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleListKeydown = this.handleListKeydown.bind(this);\n this.handleSelect = this.handleSelect.bind(this);\n this.handleTableUpdate = this.handleTableUpdate.bind(this);\n this.handleTextChange = this.handleTextChange.bind(this);\n this.handleViewportChange = this.handleViewportChange.bind(this);\n\n this.itemList = null;\n this.searchInput = null;\n this.timer = null;\n\n const { dh } = props;\n this.tableUtils = new TableUtils(dh);\n\n this.state = {\n offset: 0,\n itemCount: 0,\n items: [],\n text: '',\n isLoading: true,\n };\n }\n\n componentDidMount(): void {\n this.startListening();\n }\n\n componentDidUpdate(\n prevProps: PartitionSelectorSearchProps<T>,\n prevState: PartitionSelectorSearchState\n ): void {\n const { isLoading, itemCount } = this.state;\n const { onListResized } = this.props;\n if (\n itemCount !== prevState.itemCount ||\n isLoading !== prevState.isLoading\n ) {\n onListResized();\n }\n }\n\n componentWillUnmount(): void {\n this.debounceUpdateFilter.cancel();\n\n this.stopListening();\n }\n\n itemList: ItemList<Item> | null;\n\n searchInput: HTMLInputElement | null;\n\n timer: null;\n\n tableUtils: TableUtils;\n\n handleKeyDown(event: React.KeyboardEvent<HTMLInputElement>): boolean {\n if (this.itemList == null) {\n return false;\n }\n\n const { items, itemCount } = this.state;\n switch (event.key) {\n case 'Enter': {\n let selectedValue = null;\n if (items.length > 0) {\n selectedValue = items[0].value;\n } else {\n const { text } = this.state;\n selectedValue = text.trim();\n }\n\n if (selectedValue.length > 0) {\n const { onSelect } = this.props;\n onSelect(selectedValue);\n }\n\n event.stopPropagation();\n event.preventDefault();\n return true;\n }\n case 'ArrowDown':\n if (itemCount > 0) {\n this.itemList.focusItem(1);\n }\n event.stopPropagation();\n event.preventDefault();\n return true;\n default:\n return false;\n }\n }\n\n handleListKeydown(event: React.KeyboardEvent<HTMLDivElement>): void {\n switch (event.key) {\n case 'Escape':\n // Do nothing\n break;\n default:\n this.focus();\n break;\n }\n }\n\n handleFilterChange(): void {\n log.debug2('handleFilterChange');\n\n const { table } = this.props;\n const itemCount = table.size;\n this.setState({ itemCount, isLoading: true });\n }\n\n handleSelect(itemIndex: ModelIndex): void {\n log.debug2('handleSelect', itemIndex);\n\n const { onSelect } = this.props;\n const { offset, items } = this.state;\n const offsetIndex = itemIndex - offset;\n if (offsetIndex < 0 || items.length <= offsetIndex) {\n log.error('No data for item', itemIndex);\n return;\n }\n\n const { value } = items[offsetIndex];\n onSelect(value);\n }\n\n handleTableUpdate(event: CustomEvent): void {\n const data = event.detail;\n const { offset } = data;\n\n const items = [] as Item[];\n const { getFormattedString, table } = this.props;\n const column = table.columns[0];\n for (let r = 0; r < data.rows.length; r += 1) {\n const row = data.rows[r];\n const value = row.get(column);\n const displayValue = getFormattedString(value, column.type, column.name);\n items.push({\n displayValue,\n value,\n });\n }\n\n const itemCount = table.size;\n log.debug2('handleTableUpdate', itemCount, offset, items.length);\n this.setState({ itemCount, items, offset, isLoading: false });\n }\n\n handleTextChange(event: React.ChangeEvent<HTMLInputElement>): void {\n log.debug2('handleTextChange');\n\n const { table } = this.props;\n const { value: text } = event.target;\n\n if (text !== '' && TableUtils.isIntegerType(table.columns[0].type)) {\n this.setState({ text: parseInt(text, 10).toString() });\n } else {\n this.setState({ text });\n }\n\n this.debounceUpdateFilter();\n }\n\n handleViewportChange(topRow: number, bottomRow: number): void {\n log.debug2('handleViewportChange', topRow, bottomRow);\n\n const delta = Math.max(1, bottomRow - topRow);\n const top = Math.max(0, topRow - delta);\n const bottom = bottomRow + delta;\n\n const { table } = this.props;\n table.setViewport(top, bottom);\n }\n\n debounceUpdateFilter = debounce((): void => {\n this.updateFilter();\n }, DEBOUNCE_UPDATE_FILTER);\n\n focus(): void {\n if (this.searchInput) {\n this.searchInput.focus();\n }\n }\n\n startListening(): void {\n const { dh, initialPageSize, table } = this.props;\n table.addEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n table.addEventListener(\n dh.Table.EVENT_FILTERCHANGED,\n this.handleFilterChange\n );\n table.setViewport(0, initialPageSize);\n }\n\n stopListening(): void {\n const { dh, table } = this.props;\n table.removeEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n table.removeEventListener(\n dh.Table.EVENT_FILTERCHANGED,\n this.handleFilterChange\n );\n }\n\n updateFilter(): void {\n const { initialPageSize, table } = this.props;\n const { text } = this.state;\n const filterText = text.trim();\n const filters = [];\n if (filterText.length > 0) {\n const column = table.columns[0];\n const filter = this.tableUtils.makeQuickFilterFromComponent(\n column,\n TableUtils.isStringType(column.type) ? `~${filterText}` : filterText\n );\n if (!filter) {\n throw new Error(\n 'Unable to create column filter for partition selector'\n );\n }\n filters.push(filter);\n }\n\n log.debug2('updateFilter', filters);\n\n table.applyFilter(filters);\n table.setViewport(0, initialPageSize);\n }\n\n render(): JSX.Element {\n const { table } = this.props;\n const { isLoading, itemCount, items, offset, text } = this.state;\n\n const listHeight =\n Math.min(itemCount, PartitionSelectorSearch.MAX_VISIBLE_ITEMS) *\n ItemList.DEFAULT_ROW_HEIGHT +\n // Adjust for ListItem vertical padding - .375rem ~ 5.25px\n 11;\n const inputType = TableUtils.isNumberType(table.columns[0].type)\n ? 'number'\n : 'text';\n return (\n <div className=\"iris-grid-partition-selector-search\">\n <div className=\"search-container\">\n <input\n type={inputType}\n ref={searchInput => {\n this.searchInput = searchInput;\n }}\n value={text}\n placeholder=\"Available Partitions\"\n onChange={this.handleTextChange}\n onKeyDown={this.handleKeyDown}\n className=\"form-control input-partition\"\n />\n </div>\n {!isLoading && itemCount > 0 && (\n <div\n className=\"iris-grid-partition-selector-search-list\"\n onKeyDown={this.handleListKeydown}\n role=\"presentation\"\n style={{ height: listHeight }}\n >\n <ItemList\n ref={itemList => {\n this.itemList = itemList;\n }}\n itemCount={itemCount}\n items={items}\n offset={offset}\n onSelect={this.handleSelect}\n onViewportChange={this.handleViewportChange}\n />\n </div>\n )}\n {!isLoading && itemCount === 0 && (\n <div className=\"iris-grid-partition-selector-search-empty\">\n No results\n </div>\n )}\n {isLoading && (\n <div className=\"iris-grid-partition-selector-loading\">\n <LoadingSpinner />\n Loading...\n </div>\n )}\n </div>\n );\n }\n}\n\nexport default PartitionSelectorSearch;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PartitionSelectorSearch.js","names":["React","Component","PropTypes","debounce","TableUtils","ItemList","LoadingSpinner","Log","CanceledPromiseError","log","module","DEBOUNCE_UPDATE_FILTER","PartitionSelectorSearch","handleError","error","constructor","props","updateFilter","handleFilterChange","bind","handleKeyDown","handleListKeydown","handleSelect","handleTableUpdate","handleTextChange","handleViewportChange","itemList","searchInput","timer","dh","tableUtils","state","offset","itemCount","items","text","isLoading","componentDidMount","startListening","componentDidUpdate","prevProps","prevState","onListResized","componentWillUnmount","debounceUpdateFilter","cancel","stopListening","event","key","selectedValue","length","value","trim","onSelect","stopPropagation","preventDefault","focusItem","focus","debug2","table","size","setState","itemIndex","offsetIndex","data","detail","getFormattedString","column","columns","r","rows","row","get","displayValue","type","name","push","target","isIntegerType","parseInt","toString","topRow","bottomRow","delta","Math","max","top","bottom","setViewport","initialPageSize","addEventListener","Table","EVENT_UPDATED","EVENT_FILTERCHANGED","removeEventListener","filterText","filters","filter","makeQuickFilterFromComponent","isStringType","Error","applyFilter","render","listHeight","min","MAX_VISIBLE_ITEMS","DEFAULT_ROW_HEIGHT","inputType","isNumberType","height","undefined","func","isRequired","shape","arrayOf","string","number"],"sources":["../src/PartitionSelectorSearch.tsx"],"sourcesContent":["import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport debounce from 'lodash.debounce';\nimport { TableUtils } from '@deephaven/jsapi-utils';\nimport type { dh as DhType, Table } from '@deephaven/jsapi-types';\nimport { ItemList, LoadingSpinner } from '@deephaven/components';\nimport Log from '@deephaven/log';\nimport { CanceledPromiseError } from '@deephaven/utils';\nimport './PartitionSelectorSearch.scss';\nimport { ModelIndex } from '@deephaven/grid';\n\nconst log = Log.module('PartitionSelectorSearch');\nconst DEBOUNCE_UPDATE_FILTER = 150;\n\ninterface Item {\n value: string;\n displayValue: string;\n}\n\ninterface PartitionSelectorSearchProps<T> {\n dh: DhType;\n getFormattedString: (value: T, type: string, name: string) => string;\n table: Table;\n initialPageSize: number;\n onSelect: (value: string) => void;\n onListResized: () => void;\n}\ninterface PartitionSelectorSearchState {\n offset: number;\n itemCount: number;\n items: Item[];\n text: string;\n isLoading: boolean;\n}\nclass PartitionSelectorSearch<T> extends Component<\n PartitionSelectorSearchProps<T>,\n PartitionSelectorSearchState\n> {\n static MAX_VISIBLE_ITEMS = 12;\n\n static defaultProps = {\n initialPageSize: 100,\n onSelect: (): void => undefined,\n onListResized: (): void => undefined,\n };\n\n static propTypes = {\n getFormattedString: PropTypes.func.isRequired,\n table: PropTypes.shape({\n addEventListener: PropTypes.func.isRequired,\n removeEventListener: PropTypes.func.isRequired,\n columns: PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string.isRequired,\n type: PropTypes.string.isRequired,\n filter: PropTypes.func.isRequired,\n })\n ),\n size: PropTypes.number.isRequired,\n applyFilter: PropTypes.func.isRequired,\n setViewport: PropTypes.func.isRequired,\n }).isRequired,\n initialPageSize: PropTypes.number,\n onSelect: PropTypes.func,\n onListResized: PropTypes.func,\n };\n\n static handleError(error: unknown): void {\n if (!(error instanceof CanceledPromiseError)) {\n log.error(error);\n }\n }\n\n constructor(props: PartitionSelectorSearchProps<T>) {\n super(props);\n\n this.handleFilterChange = this.handleFilterChange.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleListKeydown = this.handleListKeydown.bind(this);\n this.handleSelect = this.handleSelect.bind(this);\n this.handleTableUpdate = this.handleTableUpdate.bind(this);\n this.handleTextChange = this.handleTextChange.bind(this);\n this.handleViewportChange = this.handleViewportChange.bind(this);\n\n this.itemList = null;\n this.searchInput = null;\n this.timer = null;\n\n const { dh } = props;\n this.tableUtils = new TableUtils(dh);\n\n this.state = {\n offset: 0,\n itemCount: 0,\n items: [],\n text: '',\n isLoading: true,\n };\n }\n\n componentDidMount(): void {\n this.startListening();\n }\n\n componentDidUpdate(\n prevProps: PartitionSelectorSearchProps<T>,\n prevState: PartitionSelectorSearchState\n ): void {\n const { isLoading, itemCount } = this.state;\n const { onListResized } = this.props;\n if (\n itemCount !== prevState.itemCount ||\n isLoading !== prevState.isLoading\n ) {\n onListResized();\n }\n }\n\n componentWillUnmount(): void {\n this.debounceUpdateFilter.cancel();\n\n this.stopListening();\n }\n\n itemList: ItemList<Item> | null;\n\n searchInput: HTMLInputElement | null;\n\n timer: null;\n\n tableUtils: TableUtils;\n\n handleKeyDown(event: React.KeyboardEvent<HTMLInputElement>): boolean {\n if (this.itemList == null) {\n return false;\n }\n\n const { items, itemCount } = this.state;\n switch (event.key) {\n case 'Enter': {\n let selectedValue = null;\n if (items.length > 0) {\n selectedValue = items[0].value;\n } else {\n const { text } = this.state;\n selectedValue = text.trim();\n }\n\n if (selectedValue.length > 0) {\n const { onSelect } = this.props;\n onSelect(selectedValue);\n }\n\n event.stopPropagation();\n event.preventDefault();\n return true;\n }\n case 'ArrowDown':\n if (itemCount > 0) {\n this.itemList.focusItem(1);\n }\n event.stopPropagation();\n event.preventDefault();\n return true;\n default:\n return false;\n }\n }\n\n handleListKeydown(event: React.KeyboardEvent<HTMLDivElement>): void {\n switch (event.key) {\n case 'Escape':\n // Do nothing\n break;\n default:\n this.focus();\n break;\n }\n }\n\n handleFilterChange(): void {\n log.debug2('handleFilterChange');\n\n const { table } = this.props;\n const itemCount = table.size;\n this.setState({ itemCount, isLoading: true });\n }\n\n handleSelect(itemIndex: ModelIndex): void {\n log.debug2('handleSelect', itemIndex);\n\n const { onSelect } = this.props;\n const { offset, items } = this.state;\n const offsetIndex = itemIndex - offset;\n if (offsetIndex < 0 || items.length <= offsetIndex) {\n log.error('No data for item', itemIndex);\n return;\n }\n\n const { value } = items[offsetIndex];\n onSelect(value);\n }\n\n handleTableUpdate(event: CustomEvent): void {\n const data = event.detail;\n const { offset } = data;\n\n const items = [] as Item[];\n const { getFormattedString, table } = this.props;\n const column = table.columns[0];\n for (let r = 0; r < data.rows.length; r += 1) {\n const row = data.rows[r];\n const value = row.get(column);\n const displayValue = getFormattedString(value, column.type, column.name);\n items.push({\n displayValue,\n value,\n });\n }\n\n const itemCount = table.size;\n log.debug2('handleTableUpdate', itemCount, offset, items.length);\n this.setState({ itemCount, items, offset, isLoading: false });\n }\n\n handleTextChange(event: React.ChangeEvent<HTMLInputElement>): void {\n log.debug2('handleTextChange');\n\n const { table } = this.props;\n const { value: text } = event.target;\n\n if (text !== '' && TableUtils.isIntegerType(table.columns[0].type)) {\n this.setState({ text: parseInt(text, 10).toString() });\n } else {\n this.setState({ text });\n }\n\n this.debounceUpdateFilter();\n }\n\n handleViewportChange(topRow: number, bottomRow: number): void {\n log.debug2('handleViewportChange', topRow, bottomRow);\n\n const delta = Math.max(1, bottomRow - topRow);\n const top = Math.max(0, topRow - delta);\n const bottom = bottomRow + delta;\n\n const { table } = this.props;\n table.setViewport(top, bottom);\n }\n\n debounceUpdateFilter = debounce((): void => {\n this.updateFilter();\n }, DEBOUNCE_UPDATE_FILTER);\n\n focus(): void {\n if (this.searchInput) {\n this.searchInput.focus();\n }\n }\n\n startListening(): void {\n const { dh, initialPageSize, table } = this.props;\n table.addEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n table.addEventListener(\n dh.Table.EVENT_FILTERCHANGED,\n this.handleFilterChange\n );\n table.setViewport(0, initialPageSize);\n }\n\n stopListening(): void {\n const { dh, table } = this.props;\n table.removeEventListener(dh.Table.EVENT_UPDATED, this.handleTableUpdate);\n table.removeEventListener(\n dh.Table.EVENT_FILTERCHANGED,\n this.handleFilterChange\n );\n }\n\n updateFilter(): void {\n const { initialPageSize, table } = this.props;\n const { text } = this.state;\n const filterText = text.trim();\n const filters = [];\n if (filterText.length > 0) {\n const column = table.columns[0];\n const filter = this.tableUtils.makeQuickFilterFromComponent(\n column,\n TableUtils.isStringType(column.type) ? `~${filterText}` : filterText\n );\n if (!filter) {\n throw new Error(\n 'Unable to create column filter for partition selector'\n );\n }\n filters.push(filter);\n }\n\n log.debug2('updateFilter', filters);\n\n table.applyFilter(filters);\n table.setViewport(0, initialPageSize);\n }\n\n render(): JSX.Element {\n const { table } = this.props;\n const { isLoading, itemCount, items, offset, text } = this.state;\n\n const listHeight =\n Math.min(itemCount, PartitionSelectorSearch.MAX_VISIBLE_ITEMS) *\n ItemList.DEFAULT_ROW_HEIGHT +\n // Adjust for ListItem vertical padding - .375rem ~ 5.25px\n 11;\n const inputType = TableUtils.isNumberType(table.columns[0].type)\n ? 'number'\n : 'text';\n return (\n <div className=\"iris-grid-partition-selector-search\">\n <div className=\"search-container\">\n <input\n type={inputType}\n ref={searchInput => {\n this.searchInput = searchInput;\n }}\n value={text}\n placeholder=\"Available Partitions\"\n onChange={this.handleTextChange}\n onKeyDown={this.handleKeyDown}\n className=\"form-control input-partition\"\n />\n </div>\n {!isLoading && itemCount > 0 && (\n <div\n className=\"iris-grid-partition-selector-search-list\"\n onKeyDown={this.handleListKeydown}\n role=\"presentation\"\n style={{ height: listHeight }}\n >\n <ItemList\n ref={itemList => {\n this.itemList = itemList;\n }}\n itemCount={itemCount}\n items={items}\n offset={offset}\n onSelect={this.handleSelect}\n onViewportChange={this.handleViewportChange}\n />\n </div>\n )}\n {!isLoading && itemCount === 0 && (\n <div className=\"iris-grid-partition-selector-search-empty\">\n No results\n </div>\n )}\n {isLoading && (\n <div className=\"iris-grid-partition-selector-loading\">\n <LoadingSpinner className=\"loading-spinner-vertical-align\" />\n Loading...\n </div>\n )}\n </div>\n );\n }\n}\n\nexport default PartitionSelectorSearch;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sourceRoot":"","sources":["../../../node_modules/@deephaven/components/scss/custom.scss","../src/PendingDataBottomBar.scss","../../../node_modules/@deephaven/components/scss/bootstrap_overrides.scss"],"names":[],"mappings":"AAAA;ACEA;EACE,kBCQc;;ADNZ;EACE,OCYK;EDXL,cCWK;;ADVL;EACE,kBCuDO","file":"PendingDataBottomBar.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 '@deephaven/components/scss/custom.scss';\n\n.pending-data-bottom-bar {\n background-color: $content-bg;\n .buttons-container {\n .btn-outline-primary {\n color: $gray-100;\n border-color: $gray-100;\n &:hover {\n background-color: $danger-hover;\n }\n }\n }\n}\n","// Styling overrides for bootstrap\n\n// Override / set color variables\n$red: #f95d84;\n$orange: #f37e3f;\n$yellow: #fcd65b;\n$green: #9edc6f;\n$blue: #76d9e4;\n$purple: #aa9af4;\n\n//Define some UI colors\n$interfacegray: #2d2a2e;\n$interfaceblue: #4878ea;\n$interfacewhite: #f0f0ee; //same as gray-200\n$interfaceblack: #1a171a;\n\n//Define our Gray scale\n$white: $interfacewhite;\n$gray-100: #fcfcfa;\n$gray-200: $interfacewhite;\n$gray-300: #c0bfbf;\n$gray-400: #929192;\n$gray-500: #5b5a5c;\n$gray-600: #555356;\n$gray-700: #403e41;\n$gray-800: #373438;\n$gray-850: #322f33;\n$gray-900: #211f22;\n$black: $interfaceblack;\n$content-bg: $interfacegray;\n$background: $interfaceblack;\n$foreground: $interfacewhite;\n\n//Load colors into map\n$colors: ();\n$colors: map-merge(\n (\n 'red': $red,\n 'orange': $orange,\n 'yellow': $yellow,\n 'green': $green,\n 'blue': $blue,\n 'purple': $purple,\n 'white': $white,\n 'black': $black,\n ),\n $colors\n);\n\n//Set default colors\n$body-bg: $black;\n$body-color: $interfacewhite;\n\n// Set brand colors\n$primary: $interfaceblue;\n$primary-hover: darken($primary, 8%);\n$primary-dark: mix($primary, $content-bg, 25%);\n$primary-light: scale-color($primary, $lightness: -25%);\n$secondary: $gray-500;\n$secondary-hover: darken($secondary, 8%);\n$success: $green;\n$info: $yellow;\n$warning: $orange;\n$danger: $red;\n$danger-hover: darken($danger, 8%);\n$light: $gray-100;\n$mid: $gray-400; //Added a mid color, useful for input styling\n$dark: $gray-800;\n$green-dark: scale-color($green, $lightness: -45%, $saturation: -10%);\n\n$theme-colors: () !default;\n$theme-colors: map-merge(\n (\n 'primary': $primary,\n 'primary-hover': $primary-hover,\n 'primary-light': $primary-light,\n 'primary-dark': $primary-dark,\n 'secondary': $secondary,\n 'success': $success,\n 'info': $info,\n 'warning': $warning,\n 'danger': $danger,\n 'light': $light,\n 'dark': $dark,\n 'mid': $mid,\n 'content-bg': $interfacegray,\n 'background': $interfaceblack,\n 'foreground': $interfacewhite,\n ),\n $theme-colors\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
|
|
1
|
+
{"version":3,"sourceRoot":"","sources":["../../../node_modules/@deephaven/components/scss/custom.scss","../src/PendingDataBottomBar.scss","../../../node_modules/@deephaven/components/scss/bootstrap_overrides.scss"],"names":[],"mappings":"AAAA;ACEA;EACE,kBCQc;;ADNZ;EACE,OCYK;EDXL,cCWK;;ADVL;EACE,kBCuDO","file":"PendingDataBottomBar.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 '@deephaven/components/scss/custom.scss';\n\n.pending-data-bottom-bar {\n background-color: $content-bg;\n .buttons-container {\n .btn-outline-primary {\n color: $gray-100;\n border-color: $gray-100;\n &:hover {\n background-color: $danger-hover;\n }\n }\n }\n}\n","// Styling overrides for bootstrap\n\n// Override / set color variables\n$red: #f95d84;\n$orange: #f37e3f;\n$yellow: #fcd65b;\n$green: #9edc6f;\n$blue: #76d9e4;\n$purple: #aa9af4;\n\n//Define some UI colors\n$interfacegray: #2d2a2e;\n$interfaceblue: #4878ea;\n$interfacewhite: #f0f0ee; //same as gray-200\n$interfaceblack: #1a171a;\n\n//Define our Gray scale\n$white: $interfacewhite;\n$gray-100: #fcfcfa;\n$gray-200: $interfacewhite;\n$gray-300: #c0bfbf;\n$gray-400: #929192;\n$gray-500: #5b5a5c;\n$gray-600: #555356;\n$gray-700: #403e41;\n$gray-800: #373438;\n$gray-850: #322f33;\n$gray-900: #211f22;\n$black: $interfaceblack;\n$content-bg: $interfacegray;\n$background: $interfaceblack;\n$foreground: $interfacewhite;\n\n//Load colors into map\n$colors: ();\n$colors: map-merge(\n (\n 'red': $red,\n 'orange': $orange,\n 'yellow': $yellow,\n 'green': $green,\n 'blue': $blue,\n 'purple': $purple,\n 'white': $white,\n 'black': $black,\n ),\n $colors\n);\n\n//Set default colors\n$body-bg: $black;\n$body-color: $interfacewhite;\n\n// Set brand colors\n$primary: $interfaceblue;\n$primary-hover: darken($primary, 8%);\n$primary-dark: mix($primary, $content-bg, 25%);\n$primary-light: scale-color($primary, $lightness: -25%);\n$secondary: $gray-500;\n$secondary-hover: darken($secondary, 8%);\n$success: $green;\n$info: $yellow;\n$warning: $orange;\n$danger: $red;\n$danger-hover: darken($danger, 8%);\n$light: $gray-100;\n$mid: $gray-400; //Added a mid color, useful for input styling\n$dark: $gray-800;\n$green-dark: scale-color($green, $lightness: -45%, $saturation: -10%);\n\n$theme-colors: () !default;\n$theme-colors: map-merge(\n (\n 'primary': $primary,\n 'primary-hover': $primary-hover,\n 'primary-light': $primary-light,\n 'primary-dark': $primary-dark,\n 'secondary': $secondary,\n 'success': $success,\n 'info': $info,\n 'warning': $warning,\n 'danger': $danger,\n 'light': $light,\n 'dark': $dark,\n 'mid': $mid,\n 'content-bg': $interfacegray,\n 'background': $interfaceblack,\n 'foreground': $interfacewhite,\n ),\n $theme-colors\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//so browsers add alpha to your color by default, ignoring opacity 1\n//by setting rgba with 0.99 it tricks browser into thinking there is alpha applied\n$text-select-color: $primary-hover;\n$text-select-color-editor: lighten(\n $gray-700,\n 15%\n); //we lighten it abit to account for that 0.01 loss, and because it needs some anyways.\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 rgba($black, 45%); //because our UI is so dark, we need darker default shadows\n$box-shadow-900: 0 0.1rem 1rem rgba(0, 0, 0, 45%); //darkest shadow for $black popups over $black UI\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\n//Override Inputs\n$input-bg: $gray-600;\n$input-disabled-bg: $gray-800;\n$input-color: $foreground;\n$input-border-color: $gray-400;\n$input-placeholder-color: $gray-400;\n$input-focus-border-color: rgba($primary, 85%);\n\n$input-btn-focus-width: 0.2rem;\n$input-btn-focus-color: rgba($component-active-bg, 35%);\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color;\n\n//checkbox\n$custom-control-indicator-bg: $gray-600;\n$custom-control-indicator-bg-size: 75% 75%;\n$custom-control-indicator-disabled-bg: $gray-800;\n$custom-control-indicator-checked-disabled-bg: $gray-800;\n$custom-control-label-disabled-color: $gray-400;\n\n//Custom Select\n$custom-select-indicator-color: $gray-400;\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: darken($gray-400, 5%);\n$custom-select-disabled-bg: $gray-800;\n\n//modal\n$modal-content-bg: $gray-200;\n$modal-content-border-width: 0;\n$modal-md: 550px;\n\n// Toast notification\n$toast-bg: $primary-dark;\n$toast-color: $foreground;\n$toast-error-bg: mix($danger, $content-bg, 15%);\n$toast-error-color: $foreground;\n\n//tooltips\n$tooltip-bg: $gray-700;\n$tooltip-color: $foreground;\n$tooltip-box-shadow: 0 0.1rem 1.5rem 0.1rem rgba($black, 80%);\n\n//drowdowns\n$dropdown-bg: $gray-600;\n$dropdown-link-color: $foreground;\n$dropdown-link-hover-color: $foreground;\n$dropdown-link-hover-bg: $primary;\n$dropdown-divider-bg: $gray-700;\n\n//context menus\n$contextmenu-bg: $gray-600;\n$contextmenu-color: $foreground;\n$contextmenu-disabled-color: $text-muted;\n$contextmenu-keyboard-selected-bg: rgba($primary, 50%);\n$contextmenu-selected-bg: $primary;\n$contextmenu-selected-color: $foreground;\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: theme-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"]}
|
|
@@ -60,7 +60,9 @@ export function PendingDataBottomBar(_ref) {
|
|
|
60
60
|
var pendingRowCount = pendingDataMap.size;
|
|
61
61
|
var commitIcon;
|
|
62
62
|
if (isSaving) {
|
|
63
|
-
commitIcon = /*#__PURE__*/_jsx(LoadingSpinner, {
|
|
63
|
+
commitIcon = /*#__PURE__*/_jsx(LoadingSpinner, {
|
|
64
|
+
className: "loading-spinner-vertical-align"
|
|
65
|
+
});
|
|
64
66
|
} else if (wasSuccessShown) {
|
|
65
67
|
commitIcon = vsPass;
|
|
66
68
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PendingDataBottomBar.js","names":["React","useEffect","useMemo","useRef","useState","FontAwesomeIcon","vsPass","vsWarning","Button","LoadingSpinner","usePrevious","IrisGridBottomBar","HIDE_TIMEOUT","MAX_NUMBER_ROWS_SHOWN","PendingDataBottomBar","isSaving","onSave","onDiscard","discardTooltip","saveTooltip","error","pendingDataErrors","pendingDataMap","onEntering","onEntered","onExiting","onExited","isSuccessShown","setIsSuccessShown","wasSuccessShown","setWasSuccessShown","successTimeout","prevIsSaving","errorMessage","size","Array","from","keys","join","trim","showSuccessMessage","current","setTimeout","hideSuccessMessage","clearTimeout","cleanupTimeout","undefined","pendingRowCount","commitIcon"],"sources":["../src/PendingDataBottomBar.tsx"],"sourcesContent":["import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsPass, vsWarning } from '@deephaven/icons';\nimport { Button, LoadingSpinner } from '@deephaven/components';\nimport { usePrevious } from '@deephaven/react-hooks';\nimport IrisGridBottomBar from './IrisGridBottomBar';\nimport './PendingDataBottomBar.scss';\nimport { PendingDataErrorMap, PendingDataMap } from './CommonTypes';\n\nconst HIDE_TIMEOUT = 3000;\n\nconst MAX_NUMBER_ROWS_SHOWN = 5;\n\nexport type PendingDataBottomBarProps = {\n onSave: () => Promise<void>;\n onDiscard: () => Promise<void>;\n discardTooltip?: string;\n saveTooltip?: string;\n isSaving?: boolean;\n error?: string | null;\n pendingDataErrors: PendingDataErrorMap;\n pendingDataMap: PendingDataMap;\n onEntering?: () => void;\n onEntered?: () => void;\n onExiting?: () => void;\n onExited?: () => void;\n};\n\nexport function PendingDataBottomBar({\n isSaving = false,\n onSave,\n onDiscard,\n discardTooltip,\n saveTooltip,\n error,\n pendingDataErrors,\n pendingDataMap,\n onEntering,\n onEntered,\n onExiting,\n onExited,\n}: PendingDataBottomBarProps): JSX.Element {\n const [isSuccessShown, setIsSuccessShown] = useState(false);\n const [wasSuccessShown, setWasSuccessShown] = useState(false);\n const successTimeout = useRef<ReturnType<typeof setTimeout>>();\n const prevIsSaving = usePrevious(isSaving);\n const errorMessage = useMemo(() => {\n if (pendingDataErrors.size === 0) {\n return error;\n }\n if (pendingDataErrors.size <= MAX_NUMBER_ROWS_SHOWN) {\n return `Key can't be empty (on pending row${\n pendingDataErrors.size > 1 ? 's' : ''\n } ${Array.from(pendingDataErrors.keys()).join(', ').trim()})`;\n }\n return `Key can't be empty (on ${pendingDataErrors.size} rows)`;\n }, [error, pendingDataErrors]);\n\n useEffect(\n function showSuccessMessage() {\n if (\n prevIsSaving != null &&\n prevIsSaving &&\n !isSaving &&\n errorMessage == null\n ) {\n setIsSuccessShown(true);\n setWasSuccessShown(true);\n successTimeout.current = setTimeout(() => {\n setIsSuccessShown(false);\n }, HIDE_TIMEOUT);\n }\n },\n [errorMessage, isSaving, prevIsSaving]\n );\n\n useEffect(\n function hideSuccessMessage() {\n if (successTimeout.current && pendingDataMap.size > 0) {\n // A change just occurred while the success message was still being shown, just hide the success message\n clearTimeout(successTimeout.current);\n setIsSuccessShown(false);\n setWasSuccessShown(false);\n }\n },\n [pendingDataMap]\n );\n\n useEffect(function cleanupTimeout() {\n return () =>\n successTimeout.current ? clearTimeout(successTimeout.current) : undefined;\n }, []);\n\n const pendingRowCount = pendingDataMap.size;\n let commitIcon;\n if (isSaving) {\n commitIcon = <LoadingSpinner />;\n } else if (wasSuccessShown) {\n commitIcon = vsPass;\n }\n\n return (\n <IrisGridBottomBar\n className=\"pending-data-bottom-bar\"\n isShown={pendingRowCount > 0 || isSuccessShown || errorMessage != null}\n onEntering={onEntering}\n onEntered={onEntered}\n onExiting={onExiting}\n onExited={() => {\n setWasSuccessShown(false);\n if (onExited) {\n onExited();\n }\n }}\n >\n {errorMessage != null && errorMessage !== '' && (\n <div className=\"error-message\">\n <FontAwesomeIcon icon={vsWarning} />\n <span>{`${errorMessage}`}</span>\n </div>\n )}\n {(errorMessage == null || errorMessage === '') && (\n <div className=\"status-message\">\n {pendingRowCount > 0 && (\n <span>{`${pendingRowCount} row${\n pendingRowCount > 1 ? 's' : ''\n } pending`}</span>\n )}\n </div>\n )}\n <div className=\"buttons-container\">\n {!isSaving && !wasSuccessShown && (\n <Button kind=\"secondary\" onClick={onDiscard} tooltip={discardTooltip}>\n Discard\n </Button>\n )}\n <Button\n kind={wasSuccessShown ? 'success' : 'primary'}\n onClick={onSave}\n icon={commitIcon}\n disabled={isSaving || wasSuccessShown || errorMessage != null}\n tooltip={saveTooltip}\n >\n {isSaving && `Committing...`}\n {!isSaving && wasSuccessShown && `Success`}\n {!isSaving && !wasSuccessShown && `Commit`}\n </Button>\n </div>\n </IrisGridBottomBar>\n );\n}\n\nexport default PendingDataBottomBar;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,SAAS,EAAEC,OAAO,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AACnE,SAASC,eAAe,QAAQ,gCAAgC;AAChE,SAASC,MAAM,EAAEC,SAAS,QAAQ,kBAAkB;AACpD,SAASC,MAAM,EAAEC,cAAc,QAAQ,uBAAuB;AAC9D,SAASC,WAAW,QAAQ,wBAAwB;AAAC,OAC9CC,iBAAiB;AAAA;AAAA;AAAA;AAIxB,IAAMC,YAAY,GAAG,IAAI;AAEzB,IAAMC,qBAAqB,GAAG,CAAC;AAiB/B,OAAO,SAASC,oBAAoB,OAaO;EAAA,IAbN;IACnCC,QAAQ,GAAG,KAAK;IAChBC,MAAM;IACNC,SAAS;IACTC,cAAc;IACdC,WAAW;IACXC,KAAK;IACLC,iBAAiB;IACjBC,cAAc;IACdC,UAAU;IACVC,SAAS;IACTC,SAAS;IACTC,QAAQ,EAARA;EACyB,CAAC;EAC1B,IAAM,CAACC,cAAc,EAAEC,iBAAiB,CAAC,GAAGxB,QAAQ,CAAC,KAAK,CAAC;EAC3D,IAAM,CAACyB,eAAe,EAAEC,kBAAkB,CAAC,GAAG1B,QAAQ,CAAC,KAAK,CAAC;EAC7D,IAAM2B,cAAc,GAAG5B,MAAM,EAAiC;EAC9D,IAAM6B,YAAY,GAAGtB,WAAW,CAACK,QAAQ,CAAC;EAC1C,IAAMkB,YAAY,GAAG/B,OAAO,CAAC,MAAM;IACjC,IAAImB,iBAAiB,CAACa,IAAI,KAAK,CAAC,EAAE;MAChC,OAAOd,KAAK;IACd;IACA,IAAIC,iBAAiB,CAACa,IAAI,IAAIrB,qBAAqB,EAAE;MACnD,mDACEQ,iBAAiB,CAACa,IAAI,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE,cACnCC,KAAK,CAACC,IAAI,CAACf,iBAAiB,CAACgB,IAAI,EAAE,CAAC,CAACC,IAAI,CAAC,IAAI,CAAC,CAACC,IAAI,EAAE;IAC5D;IACA,wCAAiClB,iBAAiB,CAACa,IAAI;EACzD,CAAC,EAAE,CAACd,KAAK,EAAEC,iBAAiB,CAAC,CAAC;EAE9BpB,SAAS,CACP,SAASuC,kBAAkB,GAAG;IAC5B,IACER,YAAY,IAAI,IAAI,IACpBA,YAAY,IACZ,CAACjB,QAAQ,IACTkB,YAAY,IAAI,IAAI,EACpB;MACAL,iBAAiB,CAAC,IAAI,CAAC;MACvBE,kBAAkB,CAAC,IAAI,CAAC;MACxBC,cAAc,CAACU,OAAO,GAAGC,UAAU,CAAC,MAAM;QACxCd,iBAAiB,CAAC,KAAK,CAAC;MAC1B,CAAC,EAAEhB,YAAY,CAAC;IAClB;EACF,CAAC,EACD,CAACqB,YAAY,EAAElB,QAAQ,EAAEiB,YAAY,CAAC,CACvC;EAED/B,SAAS,CACP,SAAS0C,kBAAkB,GAAG;IAC5B,IAAIZ,cAAc,CAACU,OAAO,IAAInB,cAAc,CAACY,IAAI,GAAG,CAAC,EAAE;MACrD;MACAU,YAAY,CAACb,cAAc,CAACU,OAAO,CAAC;MACpCb,iBAAiB,CAAC,KAAK,CAAC;MACxBE,kBAAkB,CAAC,KAAK,CAAC;IAC3B;EACF,CAAC,EACD,CAACR,cAAc,CAAC,CACjB;EAEDrB,SAAS,CAAC,SAAS4C,cAAc,GAAG;IAClC,OAAO,MACLd,cAAc,CAACU,OAAO,GAAGG,YAAY,CAACb,cAAc,CAACU,OAAO,CAAC,GAAGK,SAAS;EAC7E,CAAC,EAAE,EAAE,CAAC;EAEN,IAAMC,eAAe,GAAGzB,cAAc,CAACY,IAAI;EAC3C,IAAIc,UAAU;EACd,IAAIjC,QAAQ,EAAE;IACZiC,UAAU,gBAAG,KAAC,cAAc,
|
|
1
|
+
{"version":3,"file":"PendingDataBottomBar.js","names":["React","useEffect","useMemo","useRef","useState","FontAwesomeIcon","vsPass","vsWarning","Button","LoadingSpinner","usePrevious","IrisGridBottomBar","HIDE_TIMEOUT","MAX_NUMBER_ROWS_SHOWN","PendingDataBottomBar","isSaving","onSave","onDiscard","discardTooltip","saveTooltip","error","pendingDataErrors","pendingDataMap","onEntering","onEntered","onExiting","onExited","isSuccessShown","setIsSuccessShown","wasSuccessShown","setWasSuccessShown","successTimeout","prevIsSaving","errorMessage","size","Array","from","keys","join","trim","showSuccessMessage","current","setTimeout","hideSuccessMessage","clearTimeout","cleanupTimeout","undefined","pendingRowCount","commitIcon"],"sources":["../src/PendingDataBottomBar.tsx"],"sourcesContent":["import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsPass, vsWarning } from '@deephaven/icons';\nimport { Button, LoadingSpinner } from '@deephaven/components';\nimport { usePrevious } from '@deephaven/react-hooks';\nimport IrisGridBottomBar from './IrisGridBottomBar';\nimport './PendingDataBottomBar.scss';\nimport { PendingDataErrorMap, PendingDataMap } from './CommonTypes';\n\nconst HIDE_TIMEOUT = 3000;\n\nconst MAX_NUMBER_ROWS_SHOWN = 5;\n\nexport type PendingDataBottomBarProps = {\n onSave: () => Promise<void>;\n onDiscard: () => Promise<void>;\n discardTooltip?: string;\n saveTooltip?: string;\n isSaving?: boolean;\n error?: string | null;\n pendingDataErrors: PendingDataErrorMap;\n pendingDataMap: PendingDataMap;\n onEntering?: () => void;\n onEntered?: () => void;\n onExiting?: () => void;\n onExited?: () => void;\n};\n\nexport function PendingDataBottomBar({\n isSaving = false,\n onSave,\n onDiscard,\n discardTooltip,\n saveTooltip,\n error,\n pendingDataErrors,\n pendingDataMap,\n onEntering,\n onEntered,\n onExiting,\n onExited,\n}: PendingDataBottomBarProps): JSX.Element {\n const [isSuccessShown, setIsSuccessShown] = useState(false);\n const [wasSuccessShown, setWasSuccessShown] = useState(false);\n const successTimeout = useRef<ReturnType<typeof setTimeout>>();\n const prevIsSaving = usePrevious(isSaving);\n const errorMessage = useMemo(() => {\n if (pendingDataErrors.size === 0) {\n return error;\n }\n if (pendingDataErrors.size <= MAX_NUMBER_ROWS_SHOWN) {\n return `Key can't be empty (on pending row${\n pendingDataErrors.size > 1 ? 's' : ''\n } ${Array.from(pendingDataErrors.keys()).join(', ').trim()})`;\n }\n return `Key can't be empty (on ${pendingDataErrors.size} rows)`;\n }, [error, pendingDataErrors]);\n\n useEffect(\n function showSuccessMessage() {\n if (\n prevIsSaving != null &&\n prevIsSaving &&\n !isSaving &&\n errorMessage == null\n ) {\n setIsSuccessShown(true);\n setWasSuccessShown(true);\n successTimeout.current = setTimeout(() => {\n setIsSuccessShown(false);\n }, HIDE_TIMEOUT);\n }\n },\n [errorMessage, isSaving, prevIsSaving]\n );\n\n useEffect(\n function hideSuccessMessage() {\n if (successTimeout.current && pendingDataMap.size > 0) {\n // A change just occurred while the success message was still being shown, just hide the success message\n clearTimeout(successTimeout.current);\n setIsSuccessShown(false);\n setWasSuccessShown(false);\n }\n },\n [pendingDataMap]\n );\n\n useEffect(function cleanupTimeout() {\n return () =>\n successTimeout.current ? clearTimeout(successTimeout.current) : undefined;\n }, []);\n\n const pendingRowCount = pendingDataMap.size;\n let commitIcon;\n if (isSaving) {\n commitIcon = <LoadingSpinner className=\"loading-spinner-vertical-align\" />;\n } else if (wasSuccessShown) {\n commitIcon = vsPass;\n }\n\n return (\n <IrisGridBottomBar\n className=\"pending-data-bottom-bar\"\n isShown={pendingRowCount > 0 || isSuccessShown || errorMessage != null}\n onEntering={onEntering}\n onEntered={onEntered}\n onExiting={onExiting}\n onExited={() => {\n setWasSuccessShown(false);\n if (onExited) {\n onExited();\n }\n }}\n >\n {errorMessage != null && errorMessage !== '' && (\n <div className=\"error-message\">\n <FontAwesomeIcon icon={vsWarning} />\n <span>{`${errorMessage}`}</span>\n </div>\n )}\n {(errorMessage == null || errorMessage === '') && (\n <div className=\"status-message\">\n {pendingRowCount > 0 && (\n <span>{`${pendingRowCount} row${\n pendingRowCount > 1 ? 's' : ''\n } pending`}</span>\n )}\n </div>\n )}\n <div className=\"buttons-container\">\n {!isSaving && !wasSuccessShown && (\n <Button kind=\"secondary\" onClick={onDiscard} tooltip={discardTooltip}>\n Discard\n </Button>\n )}\n <Button\n kind={wasSuccessShown ? 'success' : 'primary'}\n onClick={onSave}\n icon={commitIcon}\n disabled={isSaving || wasSuccessShown || errorMessage != null}\n tooltip={saveTooltip}\n >\n {isSaving && `Committing...`}\n {!isSaving && wasSuccessShown && `Success`}\n {!isSaving && !wasSuccessShown && `Commit`}\n </Button>\n </div>\n </IrisGridBottomBar>\n );\n}\n\nexport default PendingDataBottomBar;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sourceRoot":"","sources":["../../../../node_modules/@deephaven/components/scss/custom.scss","../../src/mousehandlers/IrisGridContextMenuHandler.scss","../../../../node_modules/@deephaven/components/scss/bootstrap_overrides.scss"],"names":[],"mappings":"AAAA;ACIA;EACE;EACA,YCKc;EDJd;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE","file":"IrisGridContextMenuHandler.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 '@deephaven/components/scss/custom.scss';\n\n$padding-x: 2rem;\n\n.iris-grid-filter-menu-item-value {\n user-select: none;\n background: $content-bg;\n border-radius: $border-radius $border-radius 0 0;\n padding: $input-btn-padding-y $padding-x;\n text-overflow: ellipsis;\n overflow: hidden;\n}\n\n.advanced-filter-button-container {\n transition: $transition opacity;\n}\n\n.advanced-filter-button-container.hidden {\n opacity: 0;\n}\n","// Styling overrides for bootstrap\n\n// Override / set color variables\n$red: #f95d84;\n$orange: #f37e3f;\n$yellow: #fcd65b;\n$green: #9edc6f;\n$blue: #76d9e4;\n$purple: #aa9af4;\n\n//Define some UI colors\n$interfacegray: #2d2a2e;\n$interfaceblue: #4878ea;\n$interfacewhite: #f0f0ee; //same as gray-200\n$interfaceblack: #1a171a;\n\n//Define our Gray scale\n$white: $interfacewhite;\n$gray-100: #fcfcfa;\n$gray-200: $interfacewhite;\n$gray-300: #c0bfbf;\n$gray-400: #929192;\n$gray-500: #5b5a5c;\n$gray-600: #555356;\n$gray-700: #403e41;\n$gray-800: #373438;\n$gray-850: #322f33;\n$gray-900: #211f22;\n$black: $interfaceblack;\n$content-bg: $interfacegray;\n$background: $interfaceblack;\n$foreground: $interfacewhite;\n\n//Load colors into map\n$colors: ();\n$colors: map-merge(\n (\n 'red': $red,\n 'orange': $orange,\n 'yellow': $yellow,\n 'green': $green,\n 'blue': $blue,\n 'purple': $purple,\n 'white': $white,\n 'black': $black,\n ),\n $colors\n);\n\n//Set default colors\n$body-bg: $black;\n$body-color: $interfacewhite;\n\n// Set brand colors\n$primary: $interfaceblue;\n$primary-hover: darken($primary, 8%);\n$primary-dark: mix($primary, $content-bg, 25%);\n$primary-light: scale-color($primary, $lightness: -25%);\n$secondary: $gray-500;\n$secondary-hover: darken($secondary, 8%);\n$success: $green;\n$info: $yellow;\n$warning: $orange;\n$danger: $red;\n$danger-hover: darken($danger, 8%);\n$light: $gray-100;\n$mid: $gray-400; //Added a mid color, useful for input styling\n$dark: $gray-800;\n$green-dark: scale-color($green, $lightness: -45%, $saturation: -10%);\n\n$theme-colors: () !default;\n$theme-colors: map-merge(\n (\n 'primary': $primary,\n 'primary-hover': $primary-hover,\n 'primary-light': $primary-light,\n 'primary-dark': $primary-dark,\n 'secondary': $secondary,\n 'success': $success,\n 'info': $info,\n 'warning': $warning,\n 'danger': $danger,\n 'light': $light,\n 'dark': $dark,\n 'mid': $mid,\n 'content-bg': $interfacegray,\n 'background': $interfaceblack,\n 'foreground': $interfacewhite,\n ),\n $theme-colors\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
|
|
1
|
+
{"version":3,"sourceRoot":"","sources":["../../../../node_modules/@deephaven/components/scss/custom.scss","../../src/mousehandlers/IrisGridContextMenuHandler.scss","../../../../node_modules/@deephaven/components/scss/bootstrap_overrides.scss"],"names":[],"mappings":"AAAA;ACIA;EACE;EACA,YCKc;EDJd;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE","file":"IrisGridContextMenuHandler.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 '@deephaven/components/scss/custom.scss';\n\n$padding-x: 2rem;\n\n.iris-grid-filter-menu-item-value {\n user-select: none;\n background: $content-bg;\n border-radius: $border-radius $border-radius 0 0;\n padding: $input-btn-padding-y $padding-x;\n text-overflow: ellipsis;\n overflow: hidden;\n}\n\n.advanced-filter-button-container {\n transition: $transition opacity;\n}\n\n.advanced-filter-button-container.hidden {\n opacity: 0;\n}\n","// Styling overrides for bootstrap\n\n// Override / set color variables\n$red: #f95d84;\n$orange: #f37e3f;\n$yellow: #fcd65b;\n$green: #9edc6f;\n$blue: #76d9e4;\n$purple: #aa9af4;\n\n//Define some UI colors\n$interfacegray: #2d2a2e;\n$interfaceblue: #4878ea;\n$interfacewhite: #f0f0ee; //same as gray-200\n$interfaceblack: #1a171a;\n\n//Define our Gray scale\n$white: $interfacewhite;\n$gray-100: #fcfcfa;\n$gray-200: $interfacewhite;\n$gray-300: #c0bfbf;\n$gray-400: #929192;\n$gray-500: #5b5a5c;\n$gray-600: #555356;\n$gray-700: #403e41;\n$gray-800: #373438;\n$gray-850: #322f33;\n$gray-900: #211f22;\n$black: $interfaceblack;\n$content-bg: $interfacegray;\n$background: $interfaceblack;\n$foreground: $interfacewhite;\n\n//Load colors into map\n$colors: ();\n$colors: map-merge(\n (\n 'red': $red,\n 'orange': $orange,\n 'yellow': $yellow,\n 'green': $green,\n 'blue': $blue,\n 'purple': $purple,\n 'white': $white,\n 'black': $black,\n ),\n $colors\n);\n\n//Set default colors\n$body-bg: $black;\n$body-color: $interfacewhite;\n\n// Set brand colors\n$primary: $interfaceblue;\n$primary-hover: darken($primary, 8%);\n$primary-dark: mix($primary, $content-bg, 25%);\n$primary-light: scale-color($primary, $lightness: -25%);\n$secondary: $gray-500;\n$secondary-hover: darken($secondary, 8%);\n$success: $green;\n$info: $yellow;\n$warning: $orange;\n$danger: $red;\n$danger-hover: darken($danger, 8%);\n$light: $gray-100;\n$mid: $gray-400; //Added a mid color, useful for input styling\n$dark: $gray-800;\n$green-dark: scale-color($green, $lightness: -45%, $saturation: -10%);\n\n$theme-colors: () !default;\n$theme-colors: map-merge(\n (\n 'primary': $primary,\n 'primary-hover': $primary-hover,\n 'primary-light': $primary-light,\n 'primary-dark': $primary-dark,\n 'secondary': $secondary,\n 'success': $success,\n 'info': $info,\n 'warning': $warning,\n 'danger': $danger,\n 'light': $light,\n 'dark': $dark,\n 'mid': $mid,\n 'content-bg': $interfacegray,\n 'background': $interfaceblack,\n 'foreground': $interfacewhite,\n ),\n $theme-colors\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//so browsers add alpha to your color by default, ignoring opacity 1\n//by setting rgba with 0.99 it tricks browser into thinking there is alpha applied\n$text-select-color: $primary-hover;\n$text-select-color-editor: lighten(\n $gray-700,\n 15%\n); //we lighten it abit to account for that 0.01 loss, and because it needs some anyways.\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 rgba($black, 45%); //because our UI is so dark, we need darker default shadows\n$box-shadow-900: 0 0.1rem 1rem rgba(0, 0, 0, 45%); //darkest shadow for $black popups over $black UI\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\n//Override Inputs\n$input-bg: $gray-600;\n$input-disabled-bg: $gray-800;\n$input-color: $foreground;\n$input-border-color: $gray-400;\n$input-placeholder-color: $gray-400;\n$input-focus-border-color: rgba($primary, 85%);\n\n$input-btn-focus-width: 0.2rem;\n$input-btn-focus-color: rgba($component-active-bg, 35%);\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color;\n\n//checkbox\n$custom-control-indicator-bg: $gray-600;\n$custom-control-indicator-bg-size: 75% 75%;\n$custom-control-indicator-disabled-bg: $gray-800;\n$custom-control-indicator-checked-disabled-bg: $gray-800;\n$custom-control-label-disabled-color: $gray-400;\n\n//Custom Select\n$custom-select-indicator-color: $gray-400;\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: darken($gray-400, 5%);\n$custom-select-disabled-bg: $gray-800;\n\n//modal\n$modal-content-bg: $gray-200;\n$modal-content-border-width: 0;\n$modal-md: 550px;\n\n// Toast notification\n$toast-bg: $primary-dark;\n$toast-color: $foreground;\n$toast-error-bg: mix($danger, $content-bg, 15%);\n$toast-error-color: $foreground;\n\n//tooltips\n$tooltip-bg: $gray-700;\n$tooltip-color: $foreground;\n$tooltip-box-shadow: 0 0.1rem 1.5rem 0.1rem rgba($black, 80%);\n\n//drowdowns\n$dropdown-bg: $gray-600;\n$dropdown-link-color: $foreground;\n$dropdown-link-hover-color: $foreground;\n$dropdown-link-hover-bg: $primary;\n$dropdown-divider-bg: $gray-700;\n\n//context menus\n$contextmenu-bg: $gray-600;\n$contextmenu-color: $foreground;\n$contextmenu-disabled-color: $text-muted;\n$contextmenu-keyboard-selected-bg: rgba($primary, 50%);\n$contextmenu-selected-bg: $primary;\n$contextmenu-selected-color: $foreground;\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: theme-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"]}
|