@deephaven/iris-grid 0.21.2-dhe-vite.5 → 0.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/AdvancedFilterCreator.d.ts +1 -1
  2. package/dist/AdvancedFilterCreator.d.ts.map +1 -1
  3. package/dist/AdvancedFilterCreator.js +56 -58
  4. package/dist/AdvancedFilterCreator.js.map +1 -1
  5. package/dist/AdvancedFilterCreatorFilterItem.d.ts.map +1 -1
  6. package/dist/AdvancedFilterCreatorFilterItem.js +8 -9
  7. package/dist/AdvancedFilterCreatorFilterItem.js.map +1 -1
  8. package/dist/AdvancedFilterCreatorSelectValue.d.ts.map +1 -1
  9. package/dist/AdvancedFilterCreatorSelectValue.js +5 -6
  10. package/dist/AdvancedFilterCreatorSelectValue.js.map +1 -1
  11. package/dist/ColumnStatistics.js +12 -11
  12. package/dist/ColumnStatistics.js.map +1 -1
  13. package/dist/FilterInputField.d.ts.map +1 -1
  14. package/dist/FilterInputField.js +4 -3
  15. package/dist/FilterInputField.js.map +1 -1
  16. package/dist/IrisGrid.d.ts +1 -1
  17. package/dist/IrisGrid.d.ts.map +1 -1
  18. package/dist/IrisGrid.js +30 -22
  19. package/dist/IrisGrid.js.map +1 -1
  20. package/dist/IrisGridCopyHandler.d.ts.map +1 -1
  21. package/dist/IrisGridCopyHandler.js +4 -6
  22. package/dist/IrisGridCopyHandler.js.map +1 -1
  23. package/dist/IrisGridShortcuts.js +1 -1
  24. package/dist/IrisGridShortcuts.js.map +1 -1
  25. package/dist/sidebar/ChartBuilder.js +19 -19
  26. package/dist/sidebar/ChartBuilder.js.map +1 -1
  27. package/dist/sidebar/CustomColumnBuilder.d.ts.map +1 -1
  28. package/dist/sidebar/CustomColumnBuilder.js +14 -17
  29. package/dist/sidebar/CustomColumnBuilder.js.map +1 -1
  30. package/dist/sidebar/CustomColumnInput.d.ts.map +1 -1
  31. package/dist/sidebar/CustomColumnInput.js +8 -8
  32. package/dist/sidebar/CustomColumnInput.js.map +1 -1
  33. package/dist/sidebar/SelectDistinctBuilder.d.ts.map +1 -1
  34. package/dist/sidebar/SelectDistinctBuilder.js +16 -15
  35. package/dist/sidebar/SelectDistinctBuilder.js.map +1 -1
  36. package/dist/sidebar/TableCsvExporter.d.ts.map +1 -1
  37. package/dist/sidebar/TableCsvExporter.js +4 -4
  38. package/dist/sidebar/TableCsvExporter.js.map +1 -1
  39. package/dist/sidebar/VisibilityOrderingBuilder.d.ts.map +1 -1
  40. package/dist/sidebar/VisibilityOrderingBuilder.js +48 -41
  41. package/dist/sidebar/VisibilityOrderingBuilder.js.map +1 -1
  42. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.d.ts.map +1 -1
  43. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js +7 -7
  44. package/dist/sidebar/conditional-formatting/ConditionalFormattingMenu.js.map +1 -1
  45. package/package.json +17 -25
@@ -1 +1 @@
1
- {"version":3,"file":"IrisGridCopyHandler.d.ts","sourceRoot":"","sources":["../src/IrisGridCopyHandler.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAQzC,OAAO,EACL,SAAS,EAET,YAAY,EACZ,aAAa,EACd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,iBAAiB,EAGlB,MAAM,kBAAkB,CAAC;AAK1B,OAAO,4BAA4B,CAAC;AACpC,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAI5C,aAAK,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAE5B,aAAK,eAAe,GAAG,MAAM,CAAC,OAAO,mBAAmB,CAAC,aAAa,CAAC,CAAC;AAExE,oBAAY,aAAa,GAAG;IAC1B,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,aAAa,EAAE,CAAC;IAC9B,gBAAgB,EAAE,YAAY,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,UAAU,wBAAwB;IAChC,KAAK,EAAE,aAAa,CAAC;IACrB,aAAa,EAAE,aAAa,CAAC;IAC7B,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,UAAU,wBAAwB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AACD;;;;GAIG;AACH,cAAM,mBAAoB,SAAQ,SAAS,CACzC,wBAAwB,EACxB,wBAAwB,CACzB;IACC,MAAM,CAAC,mBAAmB,SAAS;IAEnC,MAAM,CAAC,YAAY,SAAQ;IAE3B;;OAEG;IACH,MAAM,CAAC,WAAW;;;;;;;MAkBhB;IAEF,MAAM,CAAC,aAAa;;;;;MAKlB;IAEF,MAAM,CAAC,YAAY;;0BAED,IAAI;yBACL,IAAI;yBACJ,IAAI;wBACL,IAAI;MAClB;IAEF,MAAM,CAAC,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAiBxE,MAAM,CAAC,iBAAiB,CAAC,WAAW,EAAE,eAAe,GAAG,MAAM;gBAalD,KAAK,EAAE,wBAAwB;IAiB3C,iBAAiB,IAAI,IAAI;IAOzB,kBAAkB,CAAC,SAAS,EAAE,wBAAwB,GAAG,IAAI;IAO7D,oBAAoB,IAAI,IAAI;IAI5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,SAAS,CAAC,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;IAE1C,YAAY,CAAC,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAEzC,SAAS,IAAI,IAAI;IAsCjB,QAAQ,IAAI,IAAI;IAMhB,qBAAqB,IAAI,IAAI;IAS7B,iBAAiB,IAAI,IAAI;IAOzB,eAAe,IAAI,IAAI;IAUvB,iBAAiB,IAAI,IAAI;IAQzB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAoB5B,UAAU,IAAI,IAAI;IAyDlB,SAAS,IAAI,IAAI;IAQjB,cAAc,IAAI,IAAI;IAStB,aAAa,IAAI,IAAI;IAOrB,MAAM,IAAI,GAAG,CAAC,OAAO;CAkEtB;AAED,eAAe,mBAAmB,CAAC"}
1
+ {"version":3,"file":"IrisGridCopyHandler.d.ts","sourceRoot":"","sources":["../src/IrisGridCopyHandler.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AASzC,OAAO,EACL,SAAS,EAET,YAAY,EACZ,aAAa,EACd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,iBAAiB,EAGlB,MAAM,kBAAkB,CAAC;AAK1B,OAAO,4BAA4B,CAAC;AACpC,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAI5C,aAAK,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAE5B,aAAK,eAAe,GAAG,MAAM,CAAC,OAAO,mBAAmB,CAAC,aAAa,CAAC,CAAC;AAExE,oBAAY,aAAa,GAAG;IAC1B,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,aAAa,EAAE,CAAC;IAC9B,gBAAgB,EAAE,YAAY,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,UAAU,wBAAwB;IAChC,KAAK,EAAE,aAAa,CAAC;IACrB,aAAa,EAAE,aAAa,CAAC;IAC7B,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,UAAU,wBAAwB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AACD;;;;GAIG;AACH,cAAM,mBAAoB,SAAQ,SAAS,CACzC,wBAAwB,EACxB,wBAAwB,CACzB;IACC,MAAM,CAAC,mBAAmB,SAAS;IAEnC,MAAM,CAAC,YAAY,SAAQ;IAE3B;;OAEG;IACH,MAAM,CAAC,WAAW;;;;;;;MAkBhB;IAEF,MAAM,CAAC,aAAa;;;;;MAKlB;IAEF,MAAM,CAAC,YAAY;;0BAED,IAAI;yBACL,IAAI;yBACJ,IAAI;wBACL,IAAI;MAClB;IAEF,MAAM,CAAC,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAiBxE,MAAM,CAAC,iBAAiB,CAAC,WAAW,EAAE,eAAe,GAAG,MAAM;gBAalD,KAAK,EAAE,wBAAwB;IAiB3C,iBAAiB,IAAI,IAAI;IAOzB,kBAAkB,CAAC,SAAS,EAAE,wBAAwB,GAAG,IAAI;IAO7D,oBAAoB,IAAI,IAAI;IAI5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,SAAS,CAAC,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;IAE1C,YAAY,CAAC,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAEzC,SAAS,IAAI,IAAI;IAsCjB,QAAQ,IAAI,IAAI;IAMhB,qBAAqB,IAAI,IAAI;IAS7B,iBAAiB,IAAI,IAAI;IAOzB,eAAe,IAAI,IAAI;IAUvB,iBAAiB,IAAI,IAAI;IAQzB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAoB5B,UAAU,IAAI,IAAI;IAyDlB,SAAS,IAAI,IAAI;IAQjB,cAAc,IAAI,IAAI;IAStB,aAAa,IAAI,IAAI;IAOrB,MAAM,IAAI,GAAG,CAAC,OAAO;CAgEtB;AAED,eAAe,mBAAmB,CAAC"}
@@ -3,7 +3,7 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
3
3
  import React, { Component } from 'react';
4
4
  import classNames from 'classnames';
5
5
  import { CSSTransition } from 'react-transition-group';
6
- import { ContextActionUtils, LoadingSpinner, ThemeExport } from '@deephaven/components';
6
+ import { Button, ContextActionUtils, LoadingSpinner, ThemeExport } from '@deephaven/components';
7
7
  import { GridRange, GridUtils } from '@deephaven/grid';
8
8
  import { CanceledPromiseError, PromiseUtils } from '@deephaven/utils';
9
9
  import Log from '@deephaven/log';
@@ -326,11 +326,9 @@ class IrisGridCopyHandler extends Component {
326
326
  type: "button",
327
327
  className: "btn btn-outline-secondary btn-cancel",
328
328
  onClick: this.handleCancelClick
329
- }, "Cancel"), /*#__PURE__*/React.createElement("button", {
330
- type: "button",
331
- className: classNames('btn', 'btn-copy', {
332
- 'btn-primary': !isFetching,
333
- 'btn-secondary': isFetching,
329
+ }, "Cancel"), /*#__PURE__*/React.createElement(Button, {
330
+ kind: isFetching ? 'tertiary' : 'primary',
331
+ className: classNames('btn-copy', {
334
332
  'btn-spinner': isFetching
335
333
  }),
336
334
  onClick: this.handleCopyClick,
@@ -1 +1 @@
1
- {"version":3,"file":"IrisGridCopyHandler.js","names":["React","Component","classNames","CSSTransition","ContextActionUtils","LoadingSpinner","ThemeExport","GridRange","GridUtils","CanceledPromiseError","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","text","copyToClipboard","then","model","includeHeaders","userColumnWidths","movedColumns","formatValues","hiddenColumns","getHiddenColumns","modelRanges","getModelRanges","length","subtractRanges","map","makeColumn","subtractRangesFromRanges","formatValue","value","column","displayString","type","name","fetchPromise","makeCancelable","textSnapshot","catch","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 {\n ContextActionUtils,\n LoadingSpinner,\n ThemeExport,\n} from '@deephaven/components';\nimport {\n GridRange,\n GridUtils,\n ModelSizeMap,\n MoveOperation,\n} from '@deephaven/grid';\nimport {\n CancelablePromise,\n CanceledPromiseError,\n PromiseUtils,\n} from '@deephaven/utils';\nimport Log from '@deephaven/log';\nimport { Column } from '@deephaven/jsapi-shim';\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: GridRange[];\n includeHeaders: boolean;\n formatValues?: boolean;\n movedColumns: 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 handleCopyClick(): void {\n log.debug2('handleCopyClick');\n\n if (this.textData != null) {\n this.copyText(this.textData);\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 copyText(text: string): void {\n log.debug2('copyText', text);\n\n this.textData = text;\n\n ContextActionUtils.copyToClipboard(text).then(\n () => {\n this.setState({ copyState: IrisGridCopyHandler.COPY_STATES.DONE });\n this.startHideTimer();\n },\n error => {\n log.error('copyText error', error);\n this.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.CLICK_TO_COPY,\n copyState: IrisGridCopyHandler.COPY_STATES.CLICK_REQUIRED,\n });\n }\n );\n }\n\n startFetch(): 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 this.fetchPromise\n .then((text: string) => {\n this.fetchPromise = undefined;\n this.copyText(text);\n })\n .catch((error: unknown) => {\n if (error instanceof CanceledPromiseError) {\n log.debug('User cancelled copy.');\n } else {\n log.error('Error fetching contents', error);\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 type=\"button\"\n className={classNames('btn', 'btn-copy', {\n 'btn-primary': !isFetching,\n 'btn-secondary': isFetching,\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","ContextActionUtils","LoadingSpinner","ThemeExport","GridRange","GridUtils","CanceledPromiseError","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","text","copyToClipboard","then","model","includeHeaders","userColumnWidths","movedColumns","formatValues","hiddenColumns","getHiddenColumns","modelRanges","getModelRanges","length","subtractRanges","map","makeColumn","subtractRangesFromRanges","formatValue","value","column","displayString","type","name","fetchPromise","makeCancelable","textSnapshot","catch","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 {\n Button,\n ContextActionUtils,\n LoadingSpinner,\n ThemeExport,\n} from '@deephaven/components';\nimport {\n GridRange,\n GridUtils,\n ModelSizeMap,\n MoveOperation,\n} from '@deephaven/grid';\nimport {\n CancelablePromise,\n CanceledPromiseError,\n PromiseUtils,\n} from '@deephaven/utils';\nimport Log from '@deephaven/log';\nimport { Column } from '@deephaven/jsapi-shim';\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: GridRange[];\n includeHeaders: boolean;\n formatValues?: boolean;\n movedColumns: 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 handleCopyClick(): void {\n log.debug2('handleCopyClick');\n\n if (this.textData != null) {\n this.copyText(this.textData);\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 copyText(text: string): void {\n log.debug2('copyText', text);\n\n this.textData = text;\n\n ContextActionUtils.copyToClipboard(text).then(\n () => {\n this.setState({ copyState: IrisGridCopyHandler.COPY_STATES.DONE });\n this.startHideTimer();\n },\n error => {\n log.error('copyText error', error);\n this.setState({\n buttonState: IrisGridCopyHandler.BUTTON_STATES.CLICK_TO_COPY,\n copyState: IrisGridCopyHandler.COPY_STATES.CLICK_REQUIRED,\n });\n }\n );\n }\n\n startFetch(): 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 this.fetchPromise\n .then((text: string) => {\n this.fetchPromise = undefined;\n this.copyText(text);\n })\n .catch((error: unknown) => {\n if (error instanceof CanceledPromiseError) {\n log.debug('User cancelled copy.');\n } else {\n log.error('Error fetching contents', error);\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":";;AAAA,OAAOA,KAAP,IAAgBC,SAAhB,QAAiC,OAAjC;AACA,OAAOC,UAAP,MAAuB,YAAvB;AACA,SAASC,aAAT,QAA8B,wBAA9B;AACA,SACEC,MADF,EAEEC,kBAFF,EAGEC,cAHF,EAIEC,WAJF,QAKO,uBALP;AAMA,SACEC,SADF,EAEEC,SAFF,QAKO,iBALP;AAMA,SAEEC,oBAFF,EAGEC,YAHF,QAIO,kBAJP;AAKA,OAAOC,GAAP,MAAgB,gBAAhB;OAEOC,a;OACAC,iB;;AAIP,IAAMC,GAAG,GAAGH,GAAG,CAACI,MAAJ,CAAW,qBAAX,CAAZ;;AA+BA;AACA;AACA;AACA;AACA;AACA,MAAMC,mBAAN,SAAkChB,SAAlC,CAGE;EAKA;AACF;AACA;EAoC6B,OAApBiB,oBAAoB,CAACC,SAAD,EAAoBC,QAApB,EAA8C;IACvE,QAAQD,SAAR;MACE,KAAKF,mBAAmB,CAACI,WAApB,CAAgCC,qBAArC;QACE,+CAAwCF,QAAQ,CAACG,cAAT,EAAxC;;MACF,KAAKN,mBAAmB,CAACI,WAApB,CAAgCG,cAArC;QACE,yBAAkBJ,QAAQ,CAACG,cAAT,EAAlB;;MACF,KAAKN,mBAAmB,CAACI,WAApB,CAAgCI,WAArC;QACE,OAAO,sBAAP;;MACF,KAAKR,mBAAmB,CAACI,WAApB,CAAgCK,iBAArC;QACE,0BAAmBN,QAAQ,CAACG,cAAT,EAAnB;;MACF,KAAKN,mBAAmB,CAACI,WAApB,CAAgCM,IAArC;QACE,OAAO,sBAAP;;MACF;QACE,OAAO,EAAP;IAZJ;EAcD;;EAEuB,OAAjBC,iBAAiB,CAACC,WAAD,EAAuC;IAC7D,QAAQA,WAAR;MACE,KAAKZ,mBAAmB,CAACa,aAApB,CAAkCJ,iBAAvC;QACE,OAAO,UAAP;;MACF,KAAKT,mBAAmB,CAACa,aAApB,CAAkCC,aAAvC;QACE,OAAO,eAAP;;MACF,KAAKd,mBAAmB,CAACa,aAApB,CAAkCE,KAAvC;QACE,OAAO,OAAP;;MACF;QACE,OAAO,MAAP;IARJ;EAUD;;EAEDC,WAAW,CAACC,KAAD,EAAkC;IAC3C,MAAMA,KAAN;;IAD2C;;IAAA;;IAAA;;IAG3C,KAAKC,qBAAL,GAA6B,KAAKA,qBAAL,CAA2BC,IAA3B,CAAgC,IAAhC,CAA7B;IACA,KAAKC,iBAAL,GAAyB,KAAKA,iBAAL,CAAuBD,IAAvB,CAA4B,IAA5B,CAAzB;IACA,KAAKE,eAAL,GAAuB,KAAKA,eAAL,CAAqBF,IAArB,CAA0B,IAA1B,CAAvB;IACA,KAAKG,iBAAL,GAAyB,KAAKA,iBAAL,CAAuBH,IAAvB,CAA4B,IAA5B,CAAzB;IAEA,KAAKI,KAAL,GAAa;MACXC,KAAK,EAAEC,SADI;MAEXvB,SAAS,EAAEF,mBAAmB,CAACI,WAApB,CAAgCsB,IAFhC;MAGXd,WAAW,EAAEZ,mBAAmB,CAACa,aAApB,CAAkCc,IAHpC;MAIXC,OAAO,EAAE,KAJE;MAKXzB,QAAQ,EAAE;IALC,CAAb;EAOD;;EAED0B,iBAAiB,GAAS;IACxB,IAAM;MAAEC;IAAF,IAAoB,KAAKb,KAA/B;;IACA,IAAIa,aAAa,IAAI,IAArB,EAA2B;MACzB,KAAKC,SAAL;IACD;EACF;;EAEDC,kBAAkB,CAACC,SAAD,EAA4C;IAC5D,IAAM;MAAEH;IAAF,IAAoB,KAAKb,KAA/B;;IACA,IAAIgB,SAAS,CAACH,aAAV,KAA4BA,aAAhC,EAA+C;MAC7C,KAAKC,SAAL;IACD;EACF;;EAEDG,oBAAoB,GAAS;IAC3B,KAAKC,QAAL;EACD;;EAQDJ,SAAS,GAAS;IAChBjC,GAAG,CAACsC,MAAJ,CAAW,WAAX;IAEA,KAAKD,QAAL;IAEA,IAAM;MAAEL;IAAF,IAAoB,KAAKb,KAA/B;;IACA,IAAIa,aAAa,IAAI,IAArB,EAA2B;MACzBhC,GAAG,CAACsC,MAAJ,CAAW,uCAAX;MACA,KAAKC,QAAL,CAAc;QAAET,OAAO,EAAE;MAAX,CAAd;MACA;IACD;;IAED,IAAM;MAAEU,MAAF;MAAUd;IAAV,IAAoBM,aAA1B;;IACA,IAAIN,KAAK,IAAI,IAAb,EAAmB;MACjB1B,GAAG,CAACyC,KAAJ,CAAU,oBAAV,EAAgCf,KAAhC;MACA,KAAKa,QAAL,CAAc;QACZT,OAAO,EAAE,IADG;QAEZ1B,SAAS,EAAEF,mBAAmB,CAACI,WAApB,CAAgCM,IAF/B;QAGZc;MAHY,CAAd;MAKA,KAAKgB,cAAL;MACA;IACD;;IAED,IAAMrC,QAAQ,GAAGZ,SAAS,CAACY,QAAV,CAAmBmC,MAAnB,CAAjB;IAEA,KAAKD,QAAL,CAAc;MAAElC,QAAF;MAAYyB,OAAO,EAAE,IAArB;MAA2BJ,KAAK,EAAEC;IAAlC,CAAd;;IAEA,IAAItB,QAAQ,GAAGH,mBAAmB,CAACyC,mBAAnC,EAAwD;MACtD,KAAKJ,QAAL,CAAc;QACZzB,WAAW,EAAEZ,mBAAmB,CAACa,aAApB,CAAkCc,IADnC;QAEZzB,SAAS,EAAEF,mBAAmB,CAACI,WAApB,CAAgCC;MAF/B,CAAd;IAID,CALD,MAKO;MACL,KAAKqC,UAAL;IACD;EACF;;EAEDP,QAAQ,GAAS;IACf,KAAKQ,QAAL,GAAgBlB,SAAhB;IACA,KAAKmB,SAAL;IACA,KAAKC,aAAL;EACD;;EAED3B,qBAAqB,GAAS;IAC5BpB,GAAG,CAACsC,MAAJ,CAAW,uBAAX;IAEA,IAAM;MAAElC;IAAF,IAAgB,KAAKqB,KAA3B;;IACA,IAAIrB,SAAS,KAAKF,mBAAmB,CAACI,WAApB,CAAgCM,IAAlD,EAAwD;MACtD,KAAK2B,QAAL,CAAc;QAAET,OAAO,EAAE;MAAX,CAAd;IACD;EACF;;EAEDR,iBAAiB,GAAS;IACxBtB,GAAG,CAACsC,MAAJ,CAAW,mBAAX;IAEA,KAAKQ,SAAL;IACA,KAAKP,QAAL,CAAc;MAAET,OAAO,EAAE;IAAX,CAAd;EACD;;EAEDP,eAAe,GAAS;IACtBvB,GAAG,CAACsC,MAAJ,CAAW,iBAAX;;IAEA,IAAI,KAAKO,QAAL,IAAiB,IAArB,EAA2B;MACzB,KAAKG,QAAL,CAAc,KAAKH,QAAnB;IACD,CAFD,MAEO;MACL,KAAKD,UAAL;IACD;EACF;;EAEDpB,iBAAiB,GAAS;IACxBxB,GAAG,CAACsC,MAAJ,CAAW,mBAAX;IAEA,KAAKS,aAAL;IAEA,KAAKR,QAAL,CAAc;MAAET,OAAO,EAAE;IAAX,CAAd;EACD;;EAEDkB,QAAQ,CAACC,IAAD,EAAqB;IAC3BjD,GAAG,CAACsC,MAAJ,CAAW,UAAX,EAAuBW,IAAvB;IAEA,KAAKJ,QAAL,GAAgBI,IAAhB;IAEA3D,kBAAkB,CAAC4D,eAAnB,CAAmCD,IAAnC,EAAyCE,IAAzC,CACE,MAAM;MACJ,KAAKZ,QAAL,CAAc;QAAEnC,SAAS,EAAEF,mBAAmB,CAACI,WAApB,CAAgCM;MAA7C,CAAd;MACA,KAAK8B,cAAL;IACD,CAJH,EAKEhB,KAAK,IAAI;MACP1B,GAAG,CAAC0B,KAAJ,CAAU,gBAAV,EAA4BA,KAA5B;MACA,KAAKa,QAAL,CAAc;QACZzB,WAAW,EAAEZ,mBAAmB,CAACa,aAApB,CAAkCC,aADnC;QAEZZ,SAAS,EAAEF,mBAAmB,CAACI,WAApB,CAAgCG;MAF/B,CAAd;IAID,CAXH;EAaD;;EAEDmC,UAAU,GAAS;IACjB,KAAKE,SAAL;IAEA,KAAKP,QAAL,CAAc;MACZzB,WAAW,EAAEZ,mBAAmB,CAACa,aAApB,CAAkCJ,iBADnC;MAEZP,SAAS,EAAEF,mBAAmB,CAACI,WAApB,CAAgCK;IAF/B,CAAd;IAKA,IAAM;MAAEyC,KAAF;MAASpB;IAAT,IAA2B,KAAKb,KAAtC;IACA,IAAM;MACJqB,MADI;MAEJa,cAFI;MAGJC,gBAHI;MAIJC,YAJI;MAKJC;IALI,IAMFxB,aANJ;IAOAhC,GAAG,CAACyC,KAAJ,CAAU,YAAV,EAAwBD,MAAxB;IAEA,IAAMiB,aAAa,GAAG3D,aAAa,CAAC4D,gBAAd,CAA+BJ,gBAA/B,CAAtB;IACA,IAAIK,WAAW,GAAGjE,SAAS,CAACkE,cAAV,CAAyBpB,MAAzB,EAAiCe,YAAjC,CAAlB;;IACA,IAAIE,aAAa,CAACI,MAAd,GAAuB,CAA3B,EAA8B;MAC5B,IAAMC,cAAc,GAAGL,aAAa,CAACM,GAAd,CAAkBtE,SAAS,CAACuE,UAA5B,CAAvB;MACAL,WAAW,GAAGlE,SAAS,CAACwE,wBAAV,CACZN,WADY,EAEZG,cAFY,CAAd;IAID,CA1BgB,CA4BjB;;;IACA,IAAMI,WAAW,GACfV,YAAY,IAAI,IAAhB,IAAwBA,YAAxB,GACI,CAACW,KAAD,EAAiBC,MAAjB,KACEhB,KAAK,CAACiB,aAAN,CAAoBF,KAApB,EAA2BC,MAAM,CAACE,IAAlC,EAAwCF,MAAM,CAACG,IAA/C,CAFN,GAGKJ,KAAD,cAAuBA,KAAvB,CAJN;IAMA,KAAKK,YAAL,GAAoB5E,YAAY,CAAC6E,cAAb,CAClBrB,KAAK,CAACsB,YAAN,CAAmBf,WAAnB,EAAgCN,cAAhC,EAAgDa,WAAhD,CADkB,CAApB;IAGA,KAAKM,YAAL,CACGrB,IADH,CACSF,IAAD,IAAkB;MACtB,KAAKuB,YAAL,GAAoB7C,SAApB;MACA,KAAKqB,QAAL,CAAcC,IAAd;IACD,CAJH,EAKG0B,KALH,CAKUjD,KAAD,IAAoB;MACzB,IAAIA,KAAK,YAAY/B,oBAArB,EAA2C;QACzCK,GAAG,CAACyC,KAAJ,CAAU,sBAAV;MACD,CAFD,MAEO;QACLzC,GAAG,CAAC0B,KAAJ,CAAU,yBAAV,EAAqCA,KAArC;QACA,KAAK8C,YAAL,GAAoB7C,SAApB;QACA,KAAKY,QAAL,CAAc;UACZzB,WAAW,EAAEZ,mBAAmB,CAACa,aAApB,CAAkCE,KADnC;UAEZb,SAAS,EAAEF,mBAAmB,CAACI,WAApB,CAAgCI;QAF/B,CAAd;MAID;IACF,CAhBH;EAiBD;;EAEDoC,SAAS,GAAS;IAChB,IAAI,KAAK0B,YAAT,EAAuB;MACrBxE,GAAG,CAACsC,MAAJ,CAAW,WAAX;MACA,KAAKkC,YAAL,CAAkBI,MAAlB;MACA,KAAKJ,YAAL,GAAoB7C,SAApB;IACD;EACF;;EAEDe,cAAc,GAAS;IACrB,KAAKK,aAAL;IAEA,KAAK8B,SAAL,GAAiBC,UAAU,CACzB,KAAKtD,iBADoB,EAEzBtB,mBAAmB,CAAC6E,YAFK,CAA3B;EAID;;EAEDhC,aAAa,GAAS;IACpB,IAAI,KAAK8B,SAAL,IAAkB,IAAtB,EAA4B;MAC1BG,YAAY,CAAC,KAAKH,SAAN,CAAZ;MACA,KAAKA,SAAL,GAAiBlD,SAAjB;IACD;EACF;;EAEDsD,MAAM,GAAgB;IACpB,IAAM;MAAEC,UAAF;MAAcC,SAAd;MAAyBC,SAAzB;MAAoCC;IAApC,IAAiD,KAAKlE,KAA5D;IACA,IAAM;MAAEL,WAAF;MAAeV,SAAf;MAA0B0B,OAA1B;MAAmCzB,QAAnC;MAA6CqB;IAA7C,IAAuD,KAAKD,KAAlE;IAEA,IAAM6D,SAAS,GACblF,SAAS,KAAKF,mBAAmB,CAACI,WAApB,CAAgCM,IAA9C,GACI,MADJ,GAEI,eAHN;IAIA,IAAM2E,cAAc,GAAGrF,mBAAmB,CAACW,iBAApB,CAAsCC,WAAtC,CAAvB;IACA,IAAM0E,iBAAiB,GACrB9D,KADqB,aACrBA,KADqB,cACrBA,KADqB,GACZxB,mBAAmB,CAACC,oBAApB,CAAyCC,SAAzC,EAAoDC,QAApD,CADX;IAEA,IAAMoF,wBAAwB,GAC5BrF,SAAS,KAAKF,mBAAmB,CAACI,WAApB,CAAgCM,IADhD;IAEA,IAAM8E,UAAU,GACd5E,WAAW,KAAKZ,mBAAmB,CAACa,aAApB,CAAkCJ,iBADpD;IAEA,IAAMgF,MAAM,GAAGvF,SAAS,KAAKF,mBAAmB,CAACI,WAApB,CAAgCM,IAA7D;IAEA,oBACE,oBAAC,iBAAD;MACE,SAAS,EAAE0E,SADb;MAEE,OAAO,EAAExD,OAFX;MAGE,SAAS,EAAE3C,UAAU,CAAC,wBAAD,EAA2B;QAC9C,aAAawG;MADiC,CAA3B,CAHvB;MAME,OAAO,EAAE,KAAKvE,qBANhB;MAOE,UAAU,EAAE8D,UAPd;MAQE,SAAS,EAAEC,SARb;MASE,SAAS,EAAEC,SATb;MAUE,QAAQ,EAAEC;IAVZ,gBAYE;MAAK,SAAS,EAAC;IAAf,gBACE,kCAAOG,iBAAP,CADF,CAZF,eAeE,oBAAC,aAAD;MACE,EAAE,EAAEC,wBADN;MAEE,OAAO,EAAEjG,WAAW,CAACoG,YAFvB;MAGE,UAAU,EAAC,MAHb;MAIE,YAAY,MAJd;MAKE,aAAa;IALf,gBAOE;MAAK,SAAS,EAAC;IAAf,gBACE;MACE,IAAI,EAAC,QADP;MAEE,SAAS,EAAC,sCAFZ;MAGE,OAAO,EAAE,KAAKtE;IAHhB,YADF,eAQE,oBAAC,MAAD;MACE,IAAI,EAAEoE,UAAU,GAAG,UAAH,GAAgB,SADlC;MAEE,SAAS,EAAEvG,UAAU,CAAC,UAAD,EAAa;QAChC,eAAeuG;MADiB,CAAb,CAFvB;MAKE,OAAO,EAAE,KAAKnE,eALhB;MAME,QAAQ,EAAEmE;IANZ,GAQGA,UAAU,iBAAI,oBAAC,cAAD,OARjB,EASGH,cATH,CARF,CAPF,CAfF,CADF;EA8CD;;AApWD;;gBAHIrF,mB,yBAIyB,K;;gBAJzBA,mB,kBAMkB,I;;gBANlBA,mB,iBAWiB;EACnB;EACA0B,IAAI,EAAE,MAFa;EAInB;EACArB,qBAAqB,EAAE,uBALJ;EAOnB;EACAI,iBAAiB,EAAE,mBARA;EAUnB;EACAD,WAAW,EAAE,aAXM;EAanB;EACAD,cAAc,EAAE,gBAdG;EAgBnB;EACAG,IAAI,EAAE;AAjBa,C;;gBAXjBV,mB,mBA+BmB;EACrB2B,IAAI,EAAE,MADe;EAErBlB,iBAAiB,EAAE,mBAFE;EAGrBK,aAAa,EAAE,eAHM;EAIrBC,KAAK,EAAE;AAJc,C;;gBA/BnBf,mB,kBAsCkB;EACpB8B,aAAa,EAAE,IADK;EAEpBkD,UAAU,EAAE,MAAYvD,SAFJ;EAGpBwD,SAAS,EAAE,MAAYxD,SAHH;EAIpByD,SAAS,EAAE,MAAYzD,SAJH;EAKpB0D,QAAQ,EAAE,MAAY1D;AALF,C;;AAoUxB,eAAezB,mBAAf"}
@@ -32,7 +32,7 @@ var TABLE = {
32
32
  }),
33
33
  GOTO_ROW: ShortcutRegistry.createAndAdd({
34
34
  id: 'TABLE.GOTO_ROW',
35
- name: 'GOTO_ROW',
35
+ name: 'Go to Row',
36
36
  shortcut: [MODIFIER.CTRL, KEY.G],
37
37
  macShortcut: [MODIFIER.CMD, KEY.G]
38
38
  })
@@ -1 +1 @@
1
- {"version":3,"file":"IrisGridShortcuts.js","names":["ShortcutRegistry","MODIFIER","KEY","TABLE","TOGGLE_QUICK_FILTER","createAndAdd","id","name","shortcut","CTRL","F","macShortcut","CMD","CLEAR_ALL_FILTERS","E","CLEAR_FILTERS","SHIFT","REVERSE","I","TOGGLE_SEARCH","GOTO_ROW","G","INPUT_TABLE","COMMIT","S","DISCARD","ALT","OPTION","IRIS_GRID_SHORTCUTS"],"sources":["../src/IrisGridShortcuts.ts"],"sourcesContent":["import { ShortcutRegistry, MODIFIER, KEY } from '@deephaven/components';\n\nconst TABLE = {\n TOGGLE_QUICK_FILTER: ShortcutRegistry.createAndAdd({\n id: 'TABLE.TOGGLE_QUICK_FILTER',\n name: 'Toggle Quick Filter',\n shortcut: [MODIFIER.CTRL, KEY.F],\n macShortcut: [MODIFIER.CMD, KEY.F],\n }),\n CLEAR_ALL_FILTERS: ShortcutRegistry.createAndAdd({\n id: 'TABLE.CLEAR_ALL_FILTERS',\n name: 'Clear All Table Filters',\n shortcut: [MODIFIER.CTRL, KEY.E],\n macShortcut: [MODIFIER.CMD, KEY.E],\n }),\n CLEAR_FILTERS: ShortcutRegistry.createAndAdd({\n id: 'TABLE.CLEAR_FILTERS',\n name: 'Clear Active Table Filters',\n shortcut: [MODIFIER.CTRL, MODIFIER.SHIFT, KEY.E],\n macShortcut: [MODIFIER.CMD, MODIFIER.SHIFT, KEY.E],\n }),\n REVERSE: ShortcutRegistry.createAndAdd({\n id: 'TABLE.REVERSE',\n name: 'Reverse',\n shortcut: [MODIFIER.CTRL, KEY.I],\n macShortcut: [MODIFIER.CMD, KEY.I],\n }),\n TOGGLE_SEARCH: ShortcutRegistry.createAndAdd({\n id: 'TABLE.TOGGLE_SEARCH',\n name: 'Toggle Search',\n shortcut: [MODIFIER.CTRL, MODIFIER.SHIFT, KEY.F],\n macShortcut: [MODIFIER.CMD, MODIFIER.SHIFT, KEY.F],\n }),\n GOTO_ROW: ShortcutRegistry.createAndAdd({\n id: 'TABLE.GOTO_ROW',\n name: 'GOTO_ROW',\n shortcut: [MODIFIER.CTRL, KEY.G],\n macShortcut: [MODIFIER.CMD, KEY.G],\n }),\n};\n\nconst INPUT_TABLE = {\n COMMIT: ShortcutRegistry.createAndAdd({\n id: 'INPUT_TABLE.COMMIT',\n name: 'Commit',\n shortcut: [MODIFIER.CTRL, KEY.S],\n macShortcut: [MODIFIER.CMD, KEY.S],\n }),\n DISCARD: ShortcutRegistry.createAndAdd({\n id: 'INPUT_TABLE.DISCARD',\n name: 'Discard',\n shortcut: [MODIFIER.CTRL, MODIFIER.ALT, KEY.S],\n macShortcut: [MODIFIER.CMD, MODIFIER.OPTION, KEY.S],\n }),\n};\n\nconst IRIS_GRID_SHORTCUTS = {\n TABLE,\n INPUT_TABLE,\n};\n\nexport default IRIS_GRID_SHORTCUTS;\n"],"mappings":"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"}
1
+ {"version":3,"file":"IrisGridShortcuts.js","names":["ShortcutRegistry","MODIFIER","KEY","TABLE","TOGGLE_QUICK_FILTER","createAndAdd","id","name","shortcut","CTRL","F","macShortcut","CMD","CLEAR_ALL_FILTERS","E","CLEAR_FILTERS","SHIFT","REVERSE","I","TOGGLE_SEARCH","GOTO_ROW","G","INPUT_TABLE","COMMIT","S","DISCARD","ALT","OPTION","IRIS_GRID_SHORTCUTS"],"sources":["../src/IrisGridShortcuts.ts"],"sourcesContent":["import { ShortcutRegistry, MODIFIER, KEY } from '@deephaven/components';\n\nconst TABLE = {\n TOGGLE_QUICK_FILTER: ShortcutRegistry.createAndAdd({\n id: 'TABLE.TOGGLE_QUICK_FILTER',\n name: 'Toggle Quick Filter',\n shortcut: [MODIFIER.CTRL, KEY.F],\n macShortcut: [MODIFIER.CMD, KEY.F],\n }),\n CLEAR_ALL_FILTERS: ShortcutRegistry.createAndAdd({\n id: 'TABLE.CLEAR_ALL_FILTERS',\n name: 'Clear All Table Filters',\n shortcut: [MODIFIER.CTRL, KEY.E],\n macShortcut: [MODIFIER.CMD, KEY.E],\n }),\n CLEAR_FILTERS: ShortcutRegistry.createAndAdd({\n id: 'TABLE.CLEAR_FILTERS',\n name: 'Clear Active Table Filters',\n shortcut: [MODIFIER.CTRL, MODIFIER.SHIFT, KEY.E],\n macShortcut: [MODIFIER.CMD, MODIFIER.SHIFT, KEY.E],\n }),\n REVERSE: ShortcutRegistry.createAndAdd({\n id: 'TABLE.REVERSE',\n name: 'Reverse',\n shortcut: [MODIFIER.CTRL, KEY.I],\n macShortcut: [MODIFIER.CMD, KEY.I],\n }),\n TOGGLE_SEARCH: ShortcutRegistry.createAndAdd({\n id: 'TABLE.TOGGLE_SEARCH',\n name: 'Toggle Search',\n shortcut: [MODIFIER.CTRL, MODIFIER.SHIFT, KEY.F],\n macShortcut: [MODIFIER.CMD, MODIFIER.SHIFT, KEY.F],\n }),\n GOTO_ROW: ShortcutRegistry.createAndAdd({\n id: 'TABLE.GOTO_ROW',\n name: 'Go to Row',\n shortcut: [MODIFIER.CTRL, KEY.G],\n macShortcut: [MODIFIER.CMD, KEY.G],\n }),\n};\n\nconst INPUT_TABLE = {\n COMMIT: ShortcutRegistry.createAndAdd({\n id: 'INPUT_TABLE.COMMIT',\n name: 'Commit',\n shortcut: [MODIFIER.CTRL, KEY.S],\n macShortcut: [MODIFIER.CMD, KEY.S],\n }),\n DISCARD: ShortcutRegistry.createAndAdd({\n id: 'INPUT_TABLE.DISCARD',\n name: 'Discard',\n shortcut: [MODIFIER.CTRL, MODIFIER.ALT, KEY.S],\n macShortcut: [MODIFIER.CMD, MODIFIER.OPTION, KEY.S],\n }),\n};\n\nconst IRIS_GRID_SHORTCUTS = {\n TABLE,\n INPUT_TABLE,\n};\n\nexport default IRIS_GRID_SHORTCUTS;\n"],"mappings":"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"}
@@ -3,7 +3,7 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
3
3
  import React, { PureComponent } from 'react';
4
4
  import classNames from 'classnames';
5
5
  import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
6
- import { RadioGroup, RadioItem } from '@deephaven/components';
6
+ import { Button, RadioGroup, RadioItem } from '@deephaven/components';
7
7
  import { vsLink, dhUnlink, dhTable, dhNewCircleLargeFilled, vsCircleLargeFilled, vsTrash } from '@deephaven/icons';
8
8
  import dh from '@deephaven/jsapi-shim';
9
9
  import Log from '@deephaven/log';
@@ -385,25 +385,24 @@ class ChartBuilder extends PureComponent {
385
385
  key: column.name,
386
386
  value: column.name,
387
387
  "data-index": i
388
- }, column.name))), seriesItems.length > 1 && /*#__PURE__*/React.createElement("button", {
389
- type: "button",
390
- className: "btn btn-link btn-link-icon btn-delete-series ml-2 px-2",
388
+ }, column.name))), seriesItems.length > 1 && /*#__PURE__*/React.createElement(Button, {
389
+ kind: "ghost",
390
+ className: "btn-delete-series ml-2 px-2",
391
391
  "data-index": i,
392
392
  "data-testid": "delete-series-".concat(i),
393
- onClick: this.handleSeriesDeleteClick
394
- }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
395
- icon: vsTrash
396
- })))), isAddSeriesVisible && /*#__PURE__*/React.createElement("div", {
393
+ onClick: this.handleSeriesDeleteClick,
394
+ icon: vsTrash,
395
+ tooltip: "Delete"
396
+ }))), isAddSeriesVisible && /*#__PURE__*/React.createElement("div", {
397
397
  className: "form-row"
398
398
  }, /*#__PURE__*/React.createElement("div", {
399
399
  className: "col-2"
400
- }), /*#__PURE__*/React.createElement("button", {
401
- type: "button",
402
- className: "btn btn-link btn-add-series mt-1",
403
- onClick: this.handleAddSeries
404
- }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
400
+ }), /*#__PURE__*/React.createElement(Button, {
401
+ kind: "ghost",
402
+ className: "btn-add-series mt-1",
403
+ onClick: this.handleAddSeries,
405
404
  icon: dhNewCircleLargeFilled
406
- }), "Add Series")), /*#__PURE__*/React.createElement("div", {
405
+ }, "Add Series")), /*#__PURE__*/React.createElement("div", {
407
406
  className: "form-row chart-builder-link"
408
407
  }, /*#__PURE__*/React.createElement("label", {
409
408
  className: "col-2 label-right"
@@ -431,13 +430,14 @@ class ChartBuilder extends PureComponent {
431
430
  className: "col chart-builder-link-info"
432
431
  }, isLinked ? 'Charts with synced state will update to match any filters or user modifications applied to the parent table.' : 'Freeze State disconnects the chart state from the parent table. New filters or user modifications on the parent table will not be applied.')), /*#__PURE__*/React.createElement("div", {
433
432
  className: classNames('form-row', 'justify-content-end', 'my-3')
434
- }, /*#__PURE__*/React.createElement("button", {
435
- type: "button",
436
- className: "btn btn-outline-primary btn-reset",
433
+ }, /*#__PURE__*/React.createElement(Button, {
434
+ kind: "secondary",
435
+ className: "btn-reset",
437
436
  onClick: this.handleReset
438
- }, "Reset"), /*#__PURE__*/React.createElement("button", {
437
+ }, "Reset"), /*#__PURE__*/React.createElement(Button, {
438
+ kind: "primary",
439
439
  type: "submit",
440
- className: "btn btn-primary btn-submit"
440
+ className: "btn-submit"
441
441
  }, "Create"))));
442
442
  }
443
443
 
@@ -1 +1 @@
1
- {"version":3,"file":"ChartBuilder.js","names":["React","PureComponent","classNames","FontAwesomeIcon","RadioGroup","RadioItem","vsLink","dhUnlink","dhTable","dhNewCircleLargeFilled","vsCircleLargeFilled","vsTrash","dh","Log","shortid","BarIcon","HistogramIcon","LineIcon","PieIcon","ScatterIcon","log","module","ChartBuilder","getTypeName","type","plot","SeriesPlotStyle","LINE","BAR","SCATTER","PIE","HISTOGRAM","getTypeIcon","getMaxSeriesCount","getXAxisLabel","getSeriesLabel","makeSeriesItem","value","id","generate","makeDefaultSeriesItems","columns","maxSeriesCount","length","name","getDefaultXAxis","constructor","props","handleAddSeries","bind","handleLinkStateChange","handleReset","handleSeriesChange","handleSeriesDeleteClick","handleSubmit","handleTypeClick","handleXAxisChange","sendChange","model","types","xAxis","seriesItems","state","isLinked","setState","push","event","target","index","getAttribute","intIndex","parseInt","changeEvent","splice","preventDefault","onSubmit","series","map","item","debug2","slice","onChange","render","xAxisLabel","seriesLabel","isSeriesVisible","isAddSeriesVisible","chartType","key","active","column","seriesItem","i"],"sources":["../../src/sidebar/ChartBuilder.tsx"],"sourcesContent":["import React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { RadioGroup, RadioItem } from '@deephaven/components';\nimport {\n vsLink,\n dhUnlink,\n dhTable,\n dhNewCircleLargeFilled,\n vsCircleLargeFilled,\n vsTrash,\n} from '@deephaven/icons';\nimport dh, { Column, SeriesPlotStyle } from '@deephaven/jsapi-shim';\nimport Log from '@deephaven/log';\nimport shortid from 'shortid';\nimport {\n BarIcon,\n HistogramIcon,\n LineIcon,\n PieIcon,\n ScatterIcon,\n} from './icons';\nimport './ChartBuilder.scss';\nimport IrisGridModel from '../IrisGridModel';\n\nconst log = Log.module('ChartBuilder');\n\nexport type ChartBuilderSettings = {\n type: SeriesPlotStyle;\n series: unknown;\n xAxis: string;\n isLinked: boolean;\n};\nexport type SeriesItem = {\n id: string;\n value: string;\n};\n\ninterface ChartBuilderProps {\n model: IrisGridModel;\n onSubmit: (obj: ChartBuilderSettings) => void;\n onChange: (obj: ChartBuilderSettings) => void;\n}\ninterface ChartBuilderState {\n /** The selected chart type */\n type: SeriesPlotStyle;\n\n /** Array of column names of the series to display */\n seriesItems: SeriesItem[];\n\n /** The column name to use as the x-axis */\n xAxis: string;\n\n /** Whether the newly created chart should be linked with the table (update when filters update) */\n isLinked: boolean;\n}\n/**\n * Form for configuring all the settings when creating a console.\n */\nclass ChartBuilder extends PureComponent<ChartBuilderProps, ChartBuilderState> {\n static types = [\n dh.plot.SeriesPlotStyle.LINE,\n dh.plot.SeriesPlotStyle.BAR,\n dh.plot.SeriesPlotStyle.SCATTER,\n dh.plot.SeriesPlotStyle.PIE,\n // IDS-6808: Disable Histogram in Chart Builder until we pipe histogram creation through the API\n // dh.plot.SeriesPlotStyle.HISTOGRAM,\n ];\n\n /**\n * Converts the provided chart type into a readable type.\n * Just replaces underscores with spaces and capitals the first letter of each word.\n */\n static getTypeName(type: SeriesPlotStyle): string | SeriesPlotStyle {\n switch (type) {\n case dh.plot.SeriesPlotStyle.LINE:\n return 'Line';\n case dh.plot.SeriesPlotStyle.BAR:\n return 'Bar';\n case dh.plot.SeriesPlotStyle.SCATTER:\n return 'Scatter';\n case dh.plot.SeriesPlotStyle.PIE:\n return 'Pie';\n case dh.plot.SeriesPlotStyle.HISTOGRAM:\n return 'Histogram';\n default:\n return type;\n }\n }\n\n static getTypeIcon(type: SeriesPlotStyle): React.ReactElement | null {\n switch (type) {\n case dh.plot.SeriesPlotStyle.LINE:\n return <LineIcon />;\n case dh.plot.SeriesPlotStyle.BAR:\n return <BarIcon />;\n case dh.plot.SeriesPlotStyle.SCATTER:\n return <ScatterIcon />;\n case dh.plot.SeriesPlotStyle.PIE:\n return <PieIcon />;\n case dh.plot.SeriesPlotStyle.HISTOGRAM:\n return <HistogramIcon />;\n default:\n return null;\n }\n }\n\n static getMaxSeriesCount(type: SeriesPlotStyle): number {\n switch (type) {\n case dh.plot.SeriesPlotStyle.PIE:\n return 1;\n case dh.plot.SeriesPlotStyle.HISTOGRAM:\n return 0;\n default:\n return 100;\n }\n }\n\n static getXAxisLabel(type: SeriesPlotStyle): string {\n switch (type) {\n case dh.plot.SeriesPlotStyle.PIE:\n return 'Labels';\n case dh.plot.SeriesPlotStyle.HISTOGRAM:\n return 'Data';\n default:\n return 'X-Axis';\n }\n }\n\n static getSeriesLabel(type: SeriesPlotStyle): string {\n switch (type) {\n case dh.plot.SeriesPlotStyle.PIE:\n return 'Values';\n default:\n return 'Series';\n }\n }\n\n static makeSeriesItem(value: string): SeriesItem {\n return { id: shortid.generate(), value };\n }\n\n static makeDefaultSeriesItems(\n type: SeriesPlotStyle,\n columns: Column[]\n ): SeriesItem[] {\n const maxSeriesCount = ChartBuilder.getMaxSeriesCount(type);\n if (maxSeriesCount === 0 || columns == null || columns.length === 0) {\n return [];\n }\n\n const value = columns.length > 1 ? columns[1].name : columns[0].name;\n return [ChartBuilder.makeSeriesItem(value)];\n }\n\n static getDefaultXAxis(\n type: SeriesPlotStyle,\n columns: Column[]\n ): string | null {\n if (columns != null && columns.length > 0) {\n return columns[0].name;\n }\n\n return null;\n }\n\n constructor(props: ChartBuilderProps) {\n super(props);\n\n this.handleAddSeries = this.handleAddSeries.bind(this);\n this.handleLinkStateChange = this.handleLinkStateChange.bind(this);\n this.handleReset = this.handleReset.bind(this);\n this.handleSeriesChange = this.handleSeriesChange.bind(this);\n this.handleSeriesDeleteClick = this.handleSeriesDeleteClick.bind(this);\n this.handleSubmit = this.handleSubmit.bind(this);\n this.handleTypeClick = this.handleTypeClick.bind(this);\n this.handleXAxisChange = this.handleXAxisChange.bind(this);\n this.sendChange = this.sendChange.bind(this);\n\n const { model } = props;\n const { columns } = model;\n\n const type = ChartBuilder.types[0];\n const xAxis = ChartBuilder.getDefaultXAxis(type, columns) as string;\n const seriesItems = ChartBuilder.makeDefaultSeriesItems(type, columns);\n\n this.state = {\n /** The selected chart type */\n type,\n\n /** Array of column names of the series to display */\n seriesItems,\n\n /** The column name to use as the x-axis */\n xAxis,\n\n /** Whether the newly created chart should be linked with the table (update when filters update) */\n isLinked: true,\n };\n }\n\n handleAddSeries(): void {\n this.setState(state => {\n let { seriesItems } = state;\n seriesItems = [...seriesItems];\n\n const { model } = this.props;\n const { columns } = model;\n seriesItems.push({\n id: shortid.generate(),\n value: columns[0].name,\n });\n\n return { seriesItems };\n }, this.sendChange);\n }\n\n handleLinkStateChange(event: React.ChangeEvent<HTMLInputElement>): void {\n this.setState({ isLinked: event.target.value === 'true' }, this.sendChange);\n }\n\n handleReset(): void {\n const { model } = this.props;\n const { columns } = model;\n\n const type = ChartBuilder.types[0];\n const xAxis = ChartBuilder.getDefaultXAxis(type, columns) as string;\n const seriesItems = ChartBuilder.makeDefaultSeriesItems(type, columns);\n const isLinked = true;\n\n this.setState({ type, seriesItems, xAxis, isLinked }, this.sendChange);\n }\n\n handleSeriesChange(event: React.ChangeEvent<HTMLSelectElement>): void {\n const { value } = event.target;\n const index = event.target.getAttribute('data-index') as string;\n const intIndex = parseInt(index, 10);\n\n this.setState(state => {\n let { seriesItems } = state;\n\n seriesItems = [...seriesItems];\n seriesItems[intIndex].value = value;\n\n return { seriesItems };\n }, this.sendChange);\n }\n\n handleSeriesDeleteClick(event: React.MouseEvent<HTMLButtonElement>): void {\n const changeEvent = (event as unknown) as React.ChangeEvent<HTMLButtonElement>;\n const index = changeEvent.target.getAttribute('data-index') as string;\n const intIndex = parseInt(index, 10);\n\n this.setState(state => {\n let { seriesItems } = state;\n\n seriesItems = [...seriesItems];\n seriesItems.splice(intIndex, 1);\n\n return { seriesItems };\n }, this.sendChange);\n }\n\n handleSubmit(event: React.FormEvent<HTMLFormElement>): void {\n event.preventDefault();\n\n const { onSubmit } = this.props;\n const { type, seriesItems, xAxis, isLinked } = this.state;\n const series = seriesItems.map(item => item.value);\n onSubmit({\n type: (`${type}` as unknown) as SeriesPlotStyle,\n series,\n xAxis,\n isLinked,\n });\n }\n\n handleTypeClick(event: React.MouseEvent<HTMLButtonElement>): void {\n const changeEvent = (event as unknown) as React.ChangeEvent<HTMLButtonElement>;\n const index = changeEvent.target.getAttribute('data-index') as string;\n const intIndex = parseInt(index, 10);\n\n const type = ChartBuilder.types[intIndex];\n\n log.debug2('handleTypeSelect', type);\n\n this.setState(state => {\n const maxSeriesCount = ChartBuilder.getMaxSeriesCount(type);\n let { seriesItems } = state;\n seriesItems = seriesItems.slice(0, maxSeriesCount);\n if (seriesItems.length === 0 && maxSeriesCount > 0) {\n const { model } = this.props;\n const { columns } = model;\n seriesItems = ChartBuilder.makeDefaultSeriesItems(type, columns);\n }\n\n return { type, seriesItems };\n }, this.sendChange);\n }\n\n handleXAxisChange(event: React.ChangeEvent<HTMLSelectElement>): void {\n const xAxis = event.target.value;\n log.debug2('x-axis change', xAxis);\n\n this.setState({ xAxis }, this.sendChange);\n }\n\n sendChange(): void {\n const { onChange } = this.props;\n const { isLinked, type, seriesItems, xAxis } = this.state;\n const series = seriesItems.map(item => item.value);\n\n onChange({ type, series, xAxis, isLinked });\n }\n\n render(): JSX.Element {\n const { model } = this.props;\n const { columns } = model;\n const { seriesItems, type, xAxis, isLinked } = this.state;\n const maxSeriesCount = ChartBuilder.getMaxSeriesCount(type);\n const xAxisLabel = ChartBuilder.getXAxisLabel(type);\n const seriesLabel = ChartBuilder.getSeriesLabel(type);\n const isSeriesVisible = seriesItems.length > 0;\n const isAddSeriesVisible = seriesItems.length < maxSeriesCount;\n\n return (\n <div className=\"chart-builder\">\n <form onSubmit={this.handleSubmit}>\n <div className=\"form-row\">\n <label>Select Chart Type</label>\n <div className=\"form-row\">\n {ChartBuilder.types.map((chartType, index) => {\n const key = (chartType as unknown) as React.Key;\n return (\n <div key={key} className=\"col col-chart-type\">\n <button\n type=\"button\"\n className={classNames(\n 'btn',\n 'btn-icon',\n 'btn-chart-type',\n {\n active: chartType === type,\n }\n )}\n data-index={index}\n onClick={this.handleTypeClick}\n >\n {ChartBuilder.getTypeIcon(chartType)}\n {ChartBuilder.getTypeName(chartType)}\n </button>\n </div>\n );\n })}\n </div>\n </div>\n <hr />\n <div className=\"form-row form-inline\">\n <label className=\"col-2 label-left\">{xAxisLabel}</label>\n <select\n className=\"form-control custom-select select-x-axis col\"\n value={xAxis}\n onChange={this.handleXAxisChange}\n >\n {columns.map(column => (\n <option key={column.name} value={column.name}>\n {column.name}\n </option>\n ))}\n </select>\n </div>\n {isSeriesVisible && <hr />}\n {seriesItems.map((seriesItem, i) => (\n <div\n className=\"form-row form-inline form-series-item\"\n key={seriesItem.id}\n data-testid={`form-series-item-${i}`}\n >\n <label className=\"col-2 label-left\">\n {i === 0 ? seriesLabel : ''}\n </label>\n <select\n className=\"form-control custom-select select-series col\"\n value={seriesItem.value}\n onChange={this.handleSeriesChange}\n data-testid={`select-series-item-${i}`}\n data-index={i}\n >\n {columns.map(column => (\n <option key={column.name} value={column.name} data-index={i}>\n {column.name}\n </option>\n ))}\n </select>\n {seriesItems.length > 1 && (\n <button\n type=\"button\"\n className=\"btn btn-link btn-link-icon btn-delete-series ml-2 px-2\"\n data-index={i}\n data-testid={`delete-series-${i}`}\n onClick={this.handleSeriesDeleteClick}\n >\n <FontAwesomeIcon icon={vsTrash} />\n </button>\n )}\n </div>\n ))}\n {isAddSeriesVisible && (\n <div className=\"form-row\">\n <div className=\"col-2\" />\n <button\n type=\"button\"\n className=\"btn btn-link btn-add-series mt-1\"\n onClick={this.handleAddSeries}\n >\n <FontAwesomeIcon icon={dhNewCircleLargeFilled} />\n Add Series\n </button>\n </div>\n )}\n <div className=\"form-row chart-builder-link\">\n <label className=\"col-2 label-right\">\n <div className=\"fa-md fa-layers\">\n <FontAwesomeIcon\n mask={dhTable}\n icon={vsCircleLargeFilled}\n transform=\"right-5 down-5\"\n />\n <FontAwesomeIcon\n icon={isLinked ? vsLink : dhUnlink}\n transform=\"grow-2 right-8 down-6\"\n />\n </div>\n </label>\n <RadioGroup\n onChange={this.handleLinkStateChange}\n value={`${isLinked}`}\n >\n <RadioItem value=\"true\">Sync State</RadioItem>\n <RadioItem value=\"false\">Freeze State</RadioItem>\n </RadioGroup>\n </div>\n <div className=\"form-row\">\n <div className=\"col-2 label-right\" />\n <div className=\"col chart-builder-link-info\">\n {isLinked\n ? 'Charts with synced state will update to match any filters or user modifications applied to the parent table.'\n : 'Freeze State disconnects the chart state from the parent table. New filters or user modifications on the parent table will not be applied.'}\n </div>\n </div>\n <div\n className={classNames('form-row', 'justify-content-end', 'my-3')}\n >\n <button\n type=\"button\"\n className=\"btn btn-outline-primary btn-reset\"\n onClick={this.handleReset}\n >\n Reset\n </button>\n <button type=\"submit\" className=\"btn btn-primary btn-submit\">\n Create\n </button>\n </div>\n </form>\n </div>\n );\n }\n}\n\nexport default ChartBuilder;\n"],"mappings":"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"}
1
+ {"version":3,"file":"ChartBuilder.js","names":["React","PureComponent","classNames","FontAwesomeIcon","Button","RadioGroup","RadioItem","vsLink","dhUnlink","dhTable","dhNewCircleLargeFilled","vsCircleLargeFilled","vsTrash","dh","Log","shortid","BarIcon","HistogramIcon","LineIcon","PieIcon","ScatterIcon","log","module","ChartBuilder","getTypeName","type","plot","SeriesPlotStyle","LINE","BAR","SCATTER","PIE","HISTOGRAM","getTypeIcon","getMaxSeriesCount","getXAxisLabel","getSeriesLabel","makeSeriesItem","value","id","generate","makeDefaultSeriesItems","columns","maxSeriesCount","length","name","getDefaultXAxis","constructor","props","handleAddSeries","bind","handleLinkStateChange","handleReset","handleSeriesChange","handleSeriesDeleteClick","handleSubmit","handleTypeClick","handleXAxisChange","sendChange","model","types","xAxis","seriesItems","state","isLinked","setState","push","event","target","index","getAttribute","intIndex","parseInt","changeEvent","splice","preventDefault","onSubmit","series","map","item","debug2","slice","onChange","render","xAxisLabel","seriesLabel","isSeriesVisible","isAddSeriesVisible","chartType","key","active","column","seriesItem","i"],"sources":["../../src/sidebar/ChartBuilder.tsx"],"sourcesContent":["import React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, RadioGroup, RadioItem } from '@deephaven/components';\nimport {\n vsLink,\n dhUnlink,\n dhTable,\n dhNewCircleLargeFilled,\n vsCircleLargeFilled,\n vsTrash,\n} from '@deephaven/icons';\nimport dh, { Column, SeriesPlotStyle } from '@deephaven/jsapi-shim';\nimport Log from '@deephaven/log';\nimport shortid from 'shortid';\nimport {\n BarIcon,\n HistogramIcon,\n LineIcon,\n PieIcon,\n ScatterIcon,\n} from './icons';\nimport './ChartBuilder.scss';\nimport IrisGridModel from '../IrisGridModel';\n\nconst log = Log.module('ChartBuilder');\n\nexport type ChartBuilderSettings = {\n type: SeriesPlotStyle;\n series: unknown;\n xAxis: string;\n isLinked: boolean;\n};\nexport type SeriesItem = {\n id: string;\n value: string;\n};\n\ninterface ChartBuilderProps {\n model: IrisGridModel;\n onSubmit: (obj: ChartBuilderSettings) => void;\n onChange: (obj: ChartBuilderSettings) => void;\n}\ninterface ChartBuilderState {\n /** The selected chart type */\n type: SeriesPlotStyle;\n\n /** Array of column names of the series to display */\n seriesItems: SeriesItem[];\n\n /** The column name to use as the x-axis */\n xAxis: string;\n\n /** Whether the newly created chart should be linked with the table (update when filters update) */\n isLinked: boolean;\n}\n/**\n * Form for configuring all the settings when creating a console.\n */\nclass ChartBuilder extends PureComponent<ChartBuilderProps, ChartBuilderState> {\n static types = [\n dh.plot.SeriesPlotStyle.LINE,\n dh.plot.SeriesPlotStyle.BAR,\n dh.plot.SeriesPlotStyle.SCATTER,\n dh.plot.SeriesPlotStyle.PIE,\n // IDS-6808: Disable Histogram in Chart Builder until we pipe histogram creation through the API\n // dh.plot.SeriesPlotStyle.HISTOGRAM,\n ];\n\n /**\n * Converts the provided chart type into a readable type.\n * Just replaces underscores with spaces and capitals the first letter of each word.\n */\n static getTypeName(type: SeriesPlotStyle): string | SeriesPlotStyle {\n switch (type) {\n case dh.plot.SeriesPlotStyle.LINE:\n return 'Line';\n case dh.plot.SeriesPlotStyle.BAR:\n return 'Bar';\n case dh.plot.SeriesPlotStyle.SCATTER:\n return 'Scatter';\n case dh.plot.SeriesPlotStyle.PIE:\n return 'Pie';\n case dh.plot.SeriesPlotStyle.HISTOGRAM:\n return 'Histogram';\n default:\n return type;\n }\n }\n\n static getTypeIcon(type: SeriesPlotStyle): React.ReactElement | null {\n switch (type) {\n case dh.plot.SeriesPlotStyle.LINE:\n return <LineIcon />;\n case dh.plot.SeriesPlotStyle.BAR:\n return <BarIcon />;\n case dh.plot.SeriesPlotStyle.SCATTER:\n return <ScatterIcon />;\n case dh.plot.SeriesPlotStyle.PIE:\n return <PieIcon />;\n case dh.plot.SeriesPlotStyle.HISTOGRAM:\n return <HistogramIcon />;\n default:\n return null;\n }\n }\n\n static getMaxSeriesCount(type: SeriesPlotStyle): number {\n switch (type) {\n case dh.plot.SeriesPlotStyle.PIE:\n return 1;\n case dh.plot.SeriesPlotStyle.HISTOGRAM:\n return 0;\n default:\n return 100;\n }\n }\n\n static getXAxisLabel(type: SeriesPlotStyle): string {\n switch (type) {\n case dh.plot.SeriesPlotStyle.PIE:\n return 'Labels';\n case dh.plot.SeriesPlotStyle.HISTOGRAM:\n return 'Data';\n default:\n return 'X-Axis';\n }\n }\n\n static getSeriesLabel(type: SeriesPlotStyle): string {\n switch (type) {\n case dh.plot.SeriesPlotStyle.PIE:\n return 'Values';\n default:\n return 'Series';\n }\n }\n\n static makeSeriesItem(value: string): SeriesItem {\n return { id: shortid.generate(), value };\n }\n\n static makeDefaultSeriesItems(\n type: SeriesPlotStyle,\n columns: Column[]\n ): SeriesItem[] {\n const maxSeriesCount = ChartBuilder.getMaxSeriesCount(type);\n if (maxSeriesCount === 0 || columns == null || columns.length === 0) {\n return [];\n }\n\n const value = columns.length > 1 ? columns[1].name : columns[0].name;\n return [ChartBuilder.makeSeriesItem(value)];\n }\n\n static getDefaultXAxis(\n type: SeriesPlotStyle,\n columns: Column[]\n ): string | null {\n if (columns != null && columns.length > 0) {\n return columns[0].name;\n }\n\n return null;\n }\n\n constructor(props: ChartBuilderProps) {\n super(props);\n\n this.handleAddSeries = this.handleAddSeries.bind(this);\n this.handleLinkStateChange = this.handleLinkStateChange.bind(this);\n this.handleReset = this.handleReset.bind(this);\n this.handleSeriesChange = this.handleSeriesChange.bind(this);\n this.handleSeriesDeleteClick = this.handleSeriesDeleteClick.bind(this);\n this.handleSubmit = this.handleSubmit.bind(this);\n this.handleTypeClick = this.handleTypeClick.bind(this);\n this.handleXAxisChange = this.handleXAxisChange.bind(this);\n this.sendChange = this.sendChange.bind(this);\n\n const { model } = props;\n const { columns } = model;\n\n const type = ChartBuilder.types[0];\n const xAxis = ChartBuilder.getDefaultXAxis(type, columns) as string;\n const seriesItems = ChartBuilder.makeDefaultSeriesItems(type, columns);\n\n this.state = {\n /** The selected chart type */\n type,\n\n /** Array of column names of the series to display */\n seriesItems,\n\n /** The column name to use as the x-axis */\n xAxis,\n\n /** Whether the newly created chart should be linked with the table (update when filters update) */\n isLinked: true,\n };\n }\n\n handleAddSeries(): void {\n this.setState(state => {\n let { seriesItems } = state;\n seriesItems = [...seriesItems];\n\n const { model } = this.props;\n const { columns } = model;\n seriesItems.push({\n id: shortid.generate(),\n value: columns[0].name,\n });\n\n return { seriesItems };\n }, this.sendChange);\n }\n\n handleLinkStateChange(event: React.ChangeEvent<HTMLInputElement>): void {\n this.setState({ isLinked: event.target.value === 'true' }, this.sendChange);\n }\n\n handleReset(): void {\n const { model } = this.props;\n const { columns } = model;\n\n const type = ChartBuilder.types[0];\n const xAxis = ChartBuilder.getDefaultXAxis(type, columns) as string;\n const seriesItems = ChartBuilder.makeDefaultSeriesItems(type, columns);\n const isLinked = true;\n\n this.setState({ type, seriesItems, xAxis, isLinked }, this.sendChange);\n }\n\n handleSeriesChange(event: React.ChangeEvent<HTMLSelectElement>): void {\n const { value } = event.target;\n const index = event.target.getAttribute('data-index') as string;\n const intIndex = parseInt(index, 10);\n\n this.setState(state => {\n let { seriesItems } = state;\n\n seriesItems = [...seriesItems];\n seriesItems[intIndex].value = value;\n\n return { seriesItems };\n }, this.sendChange);\n }\n\n handleSeriesDeleteClick(event: React.MouseEvent<HTMLButtonElement>): void {\n const changeEvent = (event as unknown) as React.ChangeEvent<HTMLButtonElement>;\n const index = changeEvent.target.getAttribute('data-index') as string;\n const intIndex = parseInt(index, 10);\n\n this.setState(state => {\n let { seriesItems } = state;\n\n seriesItems = [...seriesItems];\n seriesItems.splice(intIndex, 1);\n\n return { seriesItems };\n }, this.sendChange);\n }\n\n handleSubmit(event: React.FormEvent<HTMLFormElement>): void {\n event.preventDefault();\n\n const { onSubmit } = this.props;\n const { type, seriesItems, xAxis, isLinked } = this.state;\n const series = seriesItems.map(item => item.value);\n onSubmit({\n type: (`${type}` as unknown) as SeriesPlotStyle,\n series,\n xAxis,\n isLinked,\n });\n }\n\n handleTypeClick(event: React.MouseEvent<HTMLButtonElement>): void {\n const changeEvent = (event as unknown) as React.ChangeEvent<HTMLButtonElement>;\n const index = changeEvent.target.getAttribute('data-index') as string;\n const intIndex = parseInt(index, 10);\n\n const type = ChartBuilder.types[intIndex];\n\n log.debug2('handleTypeSelect', type);\n\n this.setState(state => {\n const maxSeriesCount = ChartBuilder.getMaxSeriesCount(type);\n let { seriesItems } = state;\n seriesItems = seriesItems.slice(0, maxSeriesCount);\n if (seriesItems.length === 0 && maxSeriesCount > 0) {\n const { model } = this.props;\n const { columns } = model;\n seriesItems = ChartBuilder.makeDefaultSeriesItems(type, columns);\n }\n\n return { type, seriesItems };\n }, this.sendChange);\n }\n\n handleXAxisChange(event: React.ChangeEvent<HTMLSelectElement>): void {\n const xAxis = event.target.value;\n log.debug2('x-axis change', xAxis);\n\n this.setState({ xAxis }, this.sendChange);\n }\n\n sendChange(): void {\n const { onChange } = this.props;\n const { isLinked, type, seriesItems, xAxis } = this.state;\n const series = seriesItems.map(item => item.value);\n\n onChange({ type, series, xAxis, isLinked });\n }\n\n render(): JSX.Element {\n const { model } = this.props;\n const { columns } = model;\n const { seriesItems, type, xAxis, isLinked } = this.state;\n const maxSeriesCount = ChartBuilder.getMaxSeriesCount(type);\n const xAxisLabel = ChartBuilder.getXAxisLabel(type);\n const seriesLabel = ChartBuilder.getSeriesLabel(type);\n const isSeriesVisible = seriesItems.length > 0;\n const isAddSeriesVisible = seriesItems.length < maxSeriesCount;\n\n return (\n <div className=\"chart-builder\">\n <form onSubmit={this.handleSubmit}>\n <div className=\"form-row\">\n <label>Select Chart Type</label>\n <div className=\"form-row\">\n {ChartBuilder.types.map((chartType, index) => {\n const key = (chartType as unknown) as React.Key;\n return (\n <div key={key} className=\"col col-chart-type\">\n <button\n type=\"button\"\n className={classNames(\n 'btn',\n 'btn-icon',\n 'btn-chart-type',\n {\n active: chartType === type,\n }\n )}\n data-index={index}\n onClick={this.handleTypeClick}\n >\n {ChartBuilder.getTypeIcon(chartType)}\n {ChartBuilder.getTypeName(chartType)}\n </button>\n </div>\n );\n })}\n </div>\n </div>\n <hr />\n <div className=\"form-row form-inline\">\n <label className=\"col-2 label-left\">{xAxisLabel}</label>\n <select\n className=\"form-control custom-select select-x-axis col\"\n value={xAxis}\n onChange={this.handleXAxisChange}\n >\n {columns.map(column => (\n <option key={column.name} value={column.name}>\n {column.name}\n </option>\n ))}\n </select>\n </div>\n {isSeriesVisible && <hr />}\n {seriesItems.map((seriesItem, i) => (\n <div\n className=\"form-row form-inline form-series-item\"\n key={seriesItem.id}\n data-testid={`form-series-item-${i}`}\n >\n <label className=\"col-2 label-left\">\n {i === 0 ? seriesLabel : ''}\n </label>\n <select\n className=\"form-control custom-select select-series col\"\n value={seriesItem.value}\n onChange={this.handleSeriesChange}\n data-testid={`select-series-item-${i}`}\n data-index={i}\n >\n {columns.map(column => (\n <option key={column.name} value={column.name} data-index={i}>\n {column.name}\n </option>\n ))}\n </select>\n {seriesItems.length > 1 && (\n <Button\n kind=\"ghost\"\n className=\"btn-delete-series ml-2 px-2\"\n data-index={i}\n data-testid={`delete-series-${i}`}\n onClick={this.handleSeriesDeleteClick}\n icon={vsTrash}\n tooltip=\"Delete\"\n />\n )}\n </div>\n ))}\n {isAddSeriesVisible && (\n <div className=\"form-row\">\n <div className=\"col-2\" />\n <Button\n kind=\"ghost\"\n className=\"btn-add-series mt-1\"\n onClick={this.handleAddSeries}\n icon={dhNewCircleLargeFilled}\n >\n Add Series\n </Button>\n </div>\n )}\n <div className=\"form-row chart-builder-link\">\n <label className=\"col-2 label-right\">\n <div className=\"fa-md fa-layers\">\n <FontAwesomeIcon\n mask={dhTable}\n icon={vsCircleLargeFilled}\n transform=\"right-5 down-5\"\n />\n <FontAwesomeIcon\n icon={isLinked ? vsLink : dhUnlink}\n transform=\"grow-2 right-8 down-6\"\n />\n </div>\n </label>\n <RadioGroup\n onChange={this.handleLinkStateChange}\n value={`${isLinked}`}\n >\n <RadioItem value=\"true\">Sync State</RadioItem>\n <RadioItem value=\"false\">Freeze State</RadioItem>\n </RadioGroup>\n </div>\n <div className=\"form-row\">\n <div className=\"col-2 label-right\" />\n <div className=\"col chart-builder-link-info\">\n {isLinked\n ? 'Charts with synced state will update to match any filters or user modifications applied to the parent table.'\n : 'Freeze State disconnects the chart state from the parent table. New filters or user modifications on the parent table will not be applied.'}\n </div>\n </div>\n <div\n className={classNames('form-row', 'justify-content-end', 'my-3')}\n >\n <Button\n kind=\"secondary\"\n className=\"btn-reset\"\n onClick={this.handleReset}\n >\n Reset\n </Button>\n <Button kind=\"primary\" type=\"submit\" className=\"btn-submit\">\n Create\n </Button>\n </div>\n </form>\n </div>\n );\n }\n}\n\nexport default ChartBuilder;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"CustomColumnBuilder.d.ts","sourceRoot":"","sources":["../../src/sidebar/CustomColumnBuilder.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAIvD,OAAO,EAA8B,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAK7E,OAAO,4BAA4B,CAAC;AACpC,OAAO,aAAa,MAAM,kBAAkB,CAAC;AAE7C,oBAAY,eAAe,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,CAAC;AAE9D,aAAK,KAAK,GAAG;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AACF,UAAU,wBAAwB;IAChC,KAAK,EAAE,aAAa,CAAC;IACrB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACpC,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,UAAU,wBAAwB;IAChC,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,sBAAsB,EAAE,OAAO,CAAC;IAChC,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AACD,cAAM,mBAAoB,SAAQ,SAAS,CACzC,wBAAwB,EACxB,wBAAwB,CACzB;IACC,MAAM,CAAC,qBAAqB,SAAO;IAEnC,MAAM,CAAC,YAAY;;sBAEL,IAAI;wBACF,IAAI;MAClB;IAEF,MAAM,CAAC,6BAA6B,IAAI,MAAM;IAI9C,MAAM,CAAC,uBAAuB,IAAI,KAAK;gBAQ3B,KAAK,EAAE,wBAAwB;IAyB3C,iBAAiB,IAAI,IAAI;IAMzB,oBAAoB,IAAI,IAAI;IAO5B,SAAS,EAAE,cAAc,GAAG,IAAI,CAAC;IAEjC,kBAAkB,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,IAAI,CAAC;IAEzD,QAAQ,WAAoB,KAAK,EAAE,OAAO,MAAM,uBAE9C;IAEF,aAAa,WAAoB,KAAK,EAAE,OAAO,MAAM,YAEnD;IAEF,iBAAiB,IAAI,IAAI;IAIzB,cAAc,IAAI,IAAI;IAgBtB,aAAa,IAAI,IAAI;IAgBrB,kBAAkB,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,IAAI;IAkBjD,oBAAoB,IAAI,IAAI;IAS5B,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAa1C,iBAAiB,CACf,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,eAAe,EACrB,KAAK,EAAE,MAAM,GACZ,IAAI;IAeP,yBAAyB,IAAI,IAAI;IAgBjC,mBAAmB,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IA0BvC,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAmBvC,yBAAyB,CAAC,gBAAgB,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAsB5E,eAAe,IAAI,IAAI;IAkBvB,kBAAkB,IAAI,IAAI;IAS1B,YAAY,IAAI,YAAY,EAAE;IAqB9B,gBAAgB,IAAI,YAAY;IAkChC,MAAM,IAAI,YAAY;CAgEvB;AAED,eAAe,mBAAmB,CAAC"}
1
+ {"version":3,"file":"CustomColumnBuilder.d.ts","sourceRoot":"","sources":["../../src/sidebar/CustomColumnBuilder.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAIvD,OAAO,EAA8B,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAK7E,OAAO,4BAA4B,CAAC;AACpC,OAAO,aAAa,MAAM,kBAAkB,CAAC;AAE7C,oBAAY,eAAe,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,CAAC;AAE9D,aAAK,KAAK,GAAG;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AACF,UAAU,wBAAwB;IAChC,KAAK,EAAE,aAAa,CAAC;IACrB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACpC,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,UAAU,wBAAwB;IAChC,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,sBAAsB,EAAE,OAAO,CAAC;IAChC,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AACD,cAAM,mBAAoB,SAAQ,SAAS,CACzC,wBAAwB,EACxB,wBAAwB,CACzB;IACC,MAAM,CAAC,qBAAqB,SAAO;IAEnC,MAAM,CAAC,YAAY;;sBAEL,IAAI;wBACF,IAAI;MAClB;IAEF,MAAM,CAAC,6BAA6B,IAAI,MAAM;IAI9C,MAAM,CAAC,uBAAuB,IAAI,KAAK;gBAQ3B,KAAK,EAAE,wBAAwB;IAyB3C,iBAAiB,IAAI,IAAI;IAMzB,oBAAoB,IAAI,IAAI;IAO5B,SAAS,EAAE,cAAc,GAAG,IAAI,CAAC;IAEjC,kBAAkB,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,IAAI,CAAC;IAEzD,QAAQ,WAAoB,KAAK,EAAE,OAAO,MAAM,uBAE9C;IAEF,aAAa,WAAoB,KAAK,EAAE,OAAO,MAAM,YAEnD;IAEF,iBAAiB,IAAI,IAAI;IAIzB,cAAc,IAAI,IAAI;IAgBtB,aAAa,IAAI,IAAI;IAgBrB,kBAAkB,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,IAAI;IAkBjD,oBAAoB,IAAI,IAAI;IAS5B,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAa1C,iBAAiB,CACf,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,eAAe,EACrB,KAAK,EAAE,MAAM,GACZ,IAAI;IAeP,yBAAyB,IAAI,IAAI;IAgBjC,mBAAmB,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IA0BvC,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAmBvC,yBAAyB,CAAC,gBAAgB,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAsB5E,eAAe,IAAI,IAAI;IAkBvB,kBAAkB,IAAI,IAAI;IAS1B,YAAY,IAAI,YAAY,EAAE;IAqB9B,gBAAgB,IAAI,YAAY;IA8BhC,MAAM,IAAI,YAAY;CA2DvB;AAED,eAAe,mBAAmB,CAAC"}
@@ -12,7 +12,7 @@ import shortid from 'shortid';
12
12
  import memoize from 'memoize-one';
13
13
  import { DragDropContext, Droppable } from 'react-beautiful-dnd';
14
14
  import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
15
- import { DragUtils, LoadingSpinner } from '@deephaven/components';
15
+ import { Button, DragUtils, LoadingSpinner } from '@deephaven/components';
16
16
  import { dhNewCircleLargeFilled, vsWarning, vsPass } from '@deephaven/icons';
17
17
  import CustomColumnInput from "./CustomColumnInput.js";
18
18
  import "./CustomColumnBuilder.css";
@@ -332,11 +332,11 @@ class CustomColumnBuilder extends Component {
332
332
  isSuccessShowing
333
333
  } = this.state;
334
334
  var saveText = inputs.length > 1 ? 'Save Columns' : 'Save Column';
335
- return /*#__PURE__*/React.createElement("button", {
336
- type: "button",
337
- className: classNames('btn btn-apply', {
335
+ return /*#__PURE__*/React.createElement(Button, {
336
+ kind: isSuccessShowing ? 'success' : 'primary',
337
+ className: classNames('btn-apply', {
338
338
  'btn-spinner': isCustomColumnApplying
339
- }, isSuccessShowing ? 'btn-success' : 'btn-primary'),
339
+ }),
340
340
  disabled: isSuccessShowing || isCustomColumnApplying,
341
341
  onClick: this.handleSaveClick
342
342
  }, isCustomColumnApplying && /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(LoadingSpinner, null), /*#__PURE__*/React.createElement("span", {
@@ -363,9 +363,7 @@ class CustomColumnBuilder extends Component {
363
363
  },
364
364
  onClick: this.resetRequestFailed,
365
365
  onFocus: this.resetRequestFailed
366
- }, /*#__PURE__*/React.createElement("div", {
367
- className: "section-title"
368
- }, "Custom Column Name and Formula"), /*#__PURE__*/React.createElement("hr", null), /*#__PURE__*/React.createElement(DragDropContext, {
366
+ }, /*#__PURE__*/React.createElement("hr", null), /*#__PURE__*/React.createElement(DragDropContext, {
369
367
  onDragStart: DragUtils.startDragging,
370
368
  onDragEnd: this.handleDragEnd
371
369
  }, /*#__PURE__*/React.createElement(Droppable, {
@@ -379,21 +377,20 @@ class CustomColumnBuilder extends Component {
379
377
  })
380
378
  }), this.renderInputs(), provided.placeholder))), /*#__PURE__*/React.createElement("div", {
381
379
  className: "pt-1 px-3"
382
- }, /*#__PURE__*/React.createElement("button", {
383
- type: "button",
384
- className: "btn btn-link btn-add-column",
385
- onClick: this.handleAddColumnClick
386
- }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
380
+ }, /*#__PURE__*/React.createElement(Button, {
381
+ kind: "ghost",
382
+ className: "btn-add-column",
383
+ onClick: this.handleAddColumnClick,
387
384
  icon: dhNewCircleLargeFilled
388
- }), "Add Another Column")), /*#__PURE__*/React.createElement("div", {
385
+ }, "Add Another Column")), /*#__PURE__*/React.createElement("div", {
389
386
  className: "custom-column-builder-footer"
390
387
  }, errorMessage && /*#__PURE__*/React.createElement("div", {
391
388
  className: "error-message"
392
389
  }, errorMessage), /*#__PURE__*/React.createElement("div", {
393
390
  className: "d-flex justify-content-end"
394
- }, /*#__PURE__*/React.createElement("button", {
395
- type: "button",
396
- className: "btn btn-outline-primary mr-2",
391
+ }, /*#__PURE__*/React.createElement(Button, {
392
+ kind: "secondary",
393
+ className: "mr-2",
397
394
  onClick: onCancel
398
395
  }, "Cancel"), this.renderSaveButton())));
399
396
  }
@@ -1 +1 @@
1
- {"version":3,"file":"CustomColumnBuilder.js","names":["React","Component","classNames","shortid","memoize","DragDropContext","Droppable","FontAwesomeIcon","DragUtils","LoadingSpinner","dhNewCircleLargeFilled","vsWarning","vsPass","CustomColumnInput","IrisGridModel","CustomColumnBuilder","makeCustomColumnInputEventKey","generate","createCustomColumnInput","eventKey","name","formula","constructor","props","inputs","key","find","input","findIndex","handleAddColumnClick","bind","handleSaveClick","handleInputChange","handleDeleteColumn","handleCustomColumnUpdated","handleRequestFailed","handleDragEnd","resetRequestFailed","handleEditorTabNavigation","state","isCustomColumnApplying","errorMessage","hasRequestFailed","isSuccessShowing","container","successButtonTimer","componentDidMount","customColumns","parseCustomColumns","startListening","componentWillUnmount","stopListening","clearTimeout","resetErrorMessage","setState","model","addEventListener","EVENT","COLUMNS_CHANGED","UPDATED","REQUEST_FAILED","removeEventListener","length","customColumnInputs","map","customColumn","split","newInputs","push","customColumnIndex","getInputIndex","splice","type","value","customColumnInput","getInput","newCustomInput","setTimeout","SUCCESS_SHOW_DURATION","event","customEvent","detail","JSON","stringify","configuration","result","stopDragging","destination","sourceIndex","source","index","destinationIndex","sourceInput","focusEditorIndex","shiftKey","querySelectorAll","focus","nextFocusIndex","onSave","forEach","renderInputs","renderSaveButton","saveText","render","onCancel","startDragging","provided","snapshot","innerRef","droppableProps","dragging","draggingFromThisWith","placeholder","undefined"],"sources":["../../src/sidebar/CustomColumnBuilder.tsx"],"sourcesContent":["import React, { Component, ReactElement } from 'react';\nimport classNames from 'classnames';\nimport shortid from 'shortid';\nimport memoize from 'memoize-one';\nimport { DragDropContext, Droppable, DropResult } from 'react-beautiful-dnd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { DragUtils, LoadingSpinner } from '@deephaven/components';\nimport { dhNewCircleLargeFilled, vsWarning, vsPass } from '@deephaven/icons';\nimport CustomColumnInput from './CustomColumnInput';\nimport './CustomColumnBuilder.scss';\nimport IrisGridModel from '../IrisGridModel';\n\nexport type CustomColumnKey = 'eventKey' | 'name' | 'formula';\n\ntype Input = {\n eventKey: string;\n name: string;\n formula: string;\n};\ninterface CustomColumnBuilderProps {\n model: IrisGridModel;\n customColumns: string[];\n onSave: (columns: string[]) => void;\n onCancel: () => void;\n}\n\ninterface CustomColumnBuilderState {\n inputs: Input[];\n isCustomColumnApplying: boolean;\n errorMessage: ReactElement | null;\n hasRequestFailed: boolean;\n isSuccessShowing: boolean;\n}\nclass CustomColumnBuilder extends Component<\n CustomColumnBuilderProps,\n CustomColumnBuilderState\n> {\n static SUCCESS_SHOW_DURATION = 750;\n\n static defaultProps = {\n customColumns: [],\n onSave: (): void => undefined,\n onCancel: (): void => undefined,\n };\n\n static makeCustomColumnInputEventKey(): string {\n return shortid.generate();\n }\n\n static createCustomColumnInput(): Input {\n return {\n eventKey: shortid.generate(),\n name: '',\n formula: '',\n };\n }\n\n constructor(props: CustomColumnBuilderProps) {\n super(props);\n\n this.handleAddColumnClick = this.handleAddColumnClick.bind(this);\n this.handleSaveClick = this.handleSaveClick.bind(this);\n this.handleInputChange = this.handleInputChange.bind(this);\n this.handleDeleteColumn = this.handleDeleteColumn.bind(this);\n this.handleCustomColumnUpdated = this.handleCustomColumnUpdated.bind(this);\n this.handleRequestFailed = this.handleRequestFailed.bind(this);\n this.handleDragEnd = this.handleDragEnd.bind(this);\n this.resetRequestFailed = this.resetRequestFailed.bind(this);\n\n this.handleEditorTabNavigation = this.handleEditorTabNavigation.bind(this);\n\n this.state = {\n inputs: [],\n isCustomColumnApplying: false,\n errorMessage: null,\n hasRequestFailed: false,\n isSuccessShowing: false,\n };\n this.container = null;\n this.successButtonTimer = null;\n }\n\n componentDidMount(): void {\n const { customColumns } = this.props;\n this.parseCustomColumns(customColumns);\n this.startListening();\n }\n\n componentWillUnmount(): void {\n this.stopListening();\n if (this.successButtonTimer) {\n clearTimeout(this.successButtonTimer);\n }\n }\n\n container: HTMLDivElement | null;\n\n successButtonTimer: ReturnType<typeof setTimeout> | null;\n\n getInput = memoize((inputs: Input[], key: string) =>\n inputs.find(input => input.eventKey === key)\n );\n\n getInputIndex = memoize((inputs: Input[], key: string) =>\n inputs.findIndex(input => input.eventKey === key)\n );\n\n resetErrorMessage(): void {\n this.setState({ errorMessage: null });\n }\n\n startListening(): void {\n const { model } = this.props;\n model.addEventListener(\n IrisGridModel.EVENT.COLUMNS_CHANGED,\n this.handleCustomColumnUpdated\n );\n model.addEventListener(\n IrisGridModel.EVENT.UPDATED,\n this.handleCustomColumnUpdated\n );\n model.addEventListener(\n IrisGridModel.EVENT.REQUEST_FAILED,\n this.handleRequestFailed\n );\n }\n\n stopListening(): void {\n const { model } = this.props;\n model.removeEventListener(\n IrisGridModel.EVENT.COLUMNS_CHANGED,\n this.handleCustomColumnUpdated\n );\n model.removeEventListener(\n IrisGridModel.EVENT.UPDATED,\n this.handleCustomColumnUpdated\n );\n model.removeEventListener(\n IrisGridModel.EVENT.REQUEST_FAILED,\n this.handleRequestFailed\n );\n }\n\n parseCustomColumns(customColumns: string[]): void {\n if (customColumns.length > 0) {\n const customColumnInputs = customColumns.map(customColumn => {\n const input = customColumn.split(/=(.+)/, 2);\n return {\n eventKey: CustomColumnBuilder.makeCustomColumnInputEventKey(),\n name: input[0],\n formula: input[1],\n };\n });\n this.setState({ inputs: customColumnInputs });\n } else {\n this.setState({\n inputs: [CustomColumnBuilder.createCustomColumnInput()],\n });\n }\n }\n\n handleAddColumnClick(): void {\n const { inputs } = this.state;\n const newInputs = [...inputs];\n newInputs.push(CustomColumnBuilder.createCustomColumnInput());\n this.setState({\n inputs: newInputs,\n });\n }\n\n handleDeleteColumn(eventKey: string): void {\n const { inputs } = this.state;\n const customColumnIndex = this.getInputIndex(inputs, eventKey);\n const newInputs = [...inputs];\n newInputs.splice(customColumnIndex, 1);\n if (newInputs.length === 0) {\n newInputs.push(CustomColumnBuilder.createCustomColumnInput());\n }\n this.setState({\n inputs: newInputs,\n });\n }\n\n handleInputChange(\n eventKey: string,\n type: CustomColumnKey,\n value: string\n ): void {\n const { inputs } = this.state;\n const customColumnIndex = this.getInputIndex(inputs, eventKey);\n const customColumnInput = this.getInput(inputs, eventKey);\n\n const newCustomInput = { ...customColumnInput } as Input;\n newCustomInput[type] = value;\n\n const newInputs = [...inputs];\n newInputs.splice(customColumnIndex, 1, newCustomInput);\n this.setState({\n inputs: newInputs,\n });\n }\n\n handleCustomColumnUpdated(): void {\n const { isCustomColumnApplying } = this.state;\n if (!isCustomColumnApplying) {\n return;\n }\n this.setState(\n { isCustomColumnApplying: false, isSuccessShowing: true },\n () => {\n this.successButtonTimer = setTimeout(\n () => this.setState({ isSuccessShowing: false }),\n CustomColumnBuilder.SUCCESS_SHOW_DURATION\n );\n }\n );\n }\n\n handleRequestFailed(event: Event): void {\n const customEvent = event as CustomEvent;\n const { isCustomColumnApplying } = this.state;\n if (!isCustomColumnApplying) {\n return;\n }\n\n this.setState({\n isCustomColumnApplying: false,\n errorMessage: (\n <>\n <p>\n <FontAwesomeIcon icon={vsWarning} /> Failed to apply custom columns.\n </p>\n <div className=\"error-box\">\n {customEvent.detail.errorMessage}\n <br />\n Table configuration:{' '}\n {JSON.stringify(customEvent.detail.configuration)}\n </div>\n </>\n ),\n hasRequestFailed: true,\n });\n }\n\n handleDragEnd(result: DropResult): void {\n DragUtils.stopDragging();\n\n // if dropped outside the list\n if (!result.destination) {\n return;\n }\n const { inputs } = this.state;\n const sourceIndex = result.source.index;\n const destinationIndex = result.destination.index;\n const newInputs = [...inputs];\n const sourceInput = inputs[sourceIndex];\n\n newInputs.splice(sourceIndex, 1);\n newInputs.splice(destinationIndex, 0, sourceInput);\n\n this.setState({ inputs: newInputs });\n }\n\n handleEditorTabNavigation(focusEditorIndex: number, shiftKey: boolean): void {\n const { inputs } = this.state;\n // focus on drag handle\n if (shiftKey) {\n (this.container?.querySelectorAll(`.btn-drag-handle`)[\n focusEditorIndex\n ] as HTMLButtonElement).focus();\n return;\n }\n if (focusEditorIndex === inputs.length - 1) {\n (this.container?.querySelectorAll(`.btn-add-column`)[\n focusEditorIndex\n ] as HTMLButtonElement).focus();\n } else {\n // focus on next column name input\n const nextFocusIndex = focusEditorIndex + 1;\n (this.container?.querySelectorAll(`.custom-column-input`)[\n nextFocusIndex\n ] as HTMLInputElement).focus();\n }\n }\n\n handleSaveClick(): void {\n const { onSave } = this.props;\n const { inputs, isCustomColumnApplying } = this.state;\n if (isCustomColumnApplying) {\n return;\n }\n const customColumns = [] as string[];\n inputs.forEach(input => {\n const { name, formula } = input;\n if (name && formula) {\n customColumns.push(`${name}=${formula}`);\n }\n });\n this.resetErrorMessage();\n this.setState({ isCustomColumnApplying: true });\n onSave(customColumns);\n }\n\n resetRequestFailed(): void {\n this.setState(({ hasRequestFailed }) => {\n if (hasRequestFailed) {\n return { hasRequestFailed: false };\n }\n return null;\n });\n }\n\n renderInputs(): ReactElement[] {\n const { inputs, hasRequestFailed } = this.state;\n\n return inputs.map((input, index) => {\n const { eventKey, name, formula } = input;\n return (\n <CustomColumnInput\n key={eventKey}\n inputIndex={index}\n eventKey={eventKey}\n name={name}\n formula={formula}\n onChange={this.handleInputChange}\n onDeleteColumn={this.handleDeleteColumn}\n onTabInEditor={this.handleEditorTabNavigation}\n invalid={hasRequestFailed}\n />\n );\n });\n }\n\n renderSaveButton(): ReactElement {\n const { inputs, isCustomColumnApplying, isSuccessShowing } = this.state;\n const saveText = inputs.length > 1 ? 'Save Columns' : 'Save Column';\n\n return (\n <button\n type=\"button\"\n className={classNames(\n 'btn btn-apply',\n {\n 'btn-spinner': isCustomColumnApplying,\n },\n isSuccessShowing ? 'btn-success' : 'btn-primary'\n )}\n disabled={isSuccessShowing || isCustomColumnApplying}\n onClick={this.handleSaveClick}\n >\n {isCustomColumnApplying && (\n <span>\n <LoadingSpinner />\n <span className=\"btn-normal-content\">Applying</span>\n <span className=\"btn-hover-content\">Applying</span>\n </span>\n )}\n {!isSuccessShowing && !isCustomColumnApplying && saveText}\n {isSuccessShowing && (\n <>\n <FontAwesomeIcon icon={vsPass} /> Success\n </>\n )}\n </button>\n );\n }\n\n render(): ReactElement {\n const { onCancel } = this.props;\n const { errorMessage } = this.state;\n return (\n <div\n role=\"presentation\"\n className=\"custom-column-builder-container\"\n ref={container => {\n this.container = container;\n }}\n onClick={this.resetRequestFailed}\n onFocus={this.resetRequestFailed}\n >\n <div className=\"section-title\">Custom Column Name and Formula</div>\n <hr />\n <DragDropContext\n onDragStart={DragUtils.startDragging}\n onDragEnd={this.handleDragEnd}\n >\n <Droppable droppableId=\"droppable-custom-columns\">\n {(provided, snapshot) => (\n <div\n ref={provided.innerRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.droppableProps}\n className={classNames('droppable-container', {\n dragging: snapshot.draggingFromThisWith,\n })}\n >\n {this.renderInputs()}\n {provided.placeholder}\n </div>\n )}\n </Droppable>\n </DragDropContext>\n\n <div className=\"pt-1 px-3\">\n <button\n type=\"button\"\n className=\"btn btn-link btn-add-column\"\n onClick={this.handleAddColumnClick}\n >\n <FontAwesomeIcon icon={dhNewCircleLargeFilled} />\n Add Another Column\n </button>\n </div>\n\n <div className=\"custom-column-builder-footer\">\n {errorMessage && <div className=\"error-message\">{errorMessage}</div>}\n\n <div className=\"d-flex justify-content-end\">\n <button\n type=\"button\"\n className=\"btn btn-outline-primary mr-2\"\n onClick={onCancel}\n >\n Cancel\n </button>\n {this.renderSaveButton()}\n </div>\n </div>\n </div>\n );\n }\n}\n\nexport default CustomColumnBuilder;\n"],"mappings":"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"}
1
+ {"version":3,"file":"CustomColumnBuilder.js","names":["React","Component","classNames","shortid","memoize","DragDropContext","Droppable","FontAwesomeIcon","Button","DragUtils","LoadingSpinner","dhNewCircleLargeFilled","vsWarning","vsPass","CustomColumnInput","IrisGridModel","CustomColumnBuilder","makeCustomColumnInputEventKey","generate","createCustomColumnInput","eventKey","name","formula","constructor","props","inputs","key","find","input","findIndex","handleAddColumnClick","bind","handleSaveClick","handleInputChange","handleDeleteColumn","handleCustomColumnUpdated","handleRequestFailed","handleDragEnd","resetRequestFailed","handleEditorTabNavigation","state","isCustomColumnApplying","errorMessage","hasRequestFailed","isSuccessShowing","container","successButtonTimer","componentDidMount","customColumns","parseCustomColumns","startListening","componentWillUnmount","stopListening","clearTimeout","resetErrorMessage","setState","model","addEventListener","EVENT","COLUMNS_CHANGED","UPDATED","REQUEST_FAILED","removeEventListener","length","customColumnInputs","map","customColumn","split","newInputs","push","customColumnIndex","getInputIndex","splice","type","value","customColumnInput","getInput","newCustomInput","setTimeout","SUCCESS_SHOW_DURATION","event","customEvent","detail","JSON","stringify","configuration","result","stopDragging","destination","sourceIndex","source","index","destinationIndex","sourceInput","focusEditorIndex","shiftKey","querySelectorAll","focus","nextFocusIndex","onSave","forEach","renderInputs","renderSaveButton","saveText","render","onCancel","startDragging","provided","snapshot","innerRef","droppableProps","dragging","draggingFromThisWith","placeholder","undefined"],"sources":["../../src/sidebar/CustomColumnBuilder.tsx"],"sourcesContent":["import React, { Component, ReactElement } from 'react';\nimport classNames from 'classnames';\nimport shortid from 'shortid';\nimport memoize from 'memoize-one';\nimport { DragDropContext, Droppable, DropResult } from 'react-beautiful-dnd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { Button, DragUtils, LoadingSpinner } from '@deephaven/components';\nimport { dhNewCircleLargeFilled, vsWarning, vsPass } from '@deephaven/icons';\nimport CustomColumnInput from './CustomColumnInput';\nimport './CustomColumnBuilder.scss';\nimport IrisGridModel from '../IrisGridModel';\n\nexport type CustomColumnKey = 'eventKey' | 'name' | 'formula';\n\ntype Input = {\n eventKey: string;\n name: string;\n formula: string;\n};\ninterface CustomColumnBuilderProps {\n model: IrisGridModel;\n customColumns: string[];\n onSave: (columns: string[]) => void;\n onCancel: () => void;\n}\n\ninterface CustomColumnBuilderState {\n inputs: Input[];\n isCustomColumnApplying: boolean;\n errorMessage: ReactElement | null;\n hasRequestFailed: boolean;\n isSuccessShowing: boolean;\n}\nclass CustomColumnBuilder extends Component<\n CustomColumnBuilderProps,\n CustomColumnBuilderState\n> {\n static SUCCESS_SHOW_DURATION = 750;\n\n static defaultProps = {\n customColumns: [],\n onSave: (): void => undefined,\n onCancel: (): void => undefined,\n };\n\n static makeCustomColumnInputEventKey(): string {\n return shortid.generate();\n }\n\n static createCustomColumnInput(): Input {\n return {\n eventKey: shortid.generate(),\n name: '',\n formula: '',\n };\n }\n\n constructor(props: CustomColumnBuilderProps) {\n super(props);\n\n this.handleAddColumnClick = this.handleAddColumnClick.bind(this);\n this.handleSaveClick = this.handleSaveClick.bind(this);\n this.handleInputChange = this.handleInputChange.bind(this);\n this.handleDeleteColumn = this.handleDeleteColumn.bind(this);\n this.handleCustomColumnUpdated = this.handleCustomColumnUpdated.bind(this);\n this.handleRequestFailed = this.handleRequestFailed.bind(this);\n this.handleDragEnd = this.handleDragEnd.bind(this);\n this.resetRequestFailed = this.resetRequestFailed.bind(this);\n\n this.handleEditorTabNavigation = this.handleEditorTabNavigation.bind(this);\n\n this.state = {\n inputs: [],\n isCustomColumnApplying: false,\n errorMessage: null,\n hasRequestFailed: false,\n isSuccessShowing: false,\n };\n this.container = null;\n this.successButtonTimer = null;\n }\n\n componentDidMount(): void {\n const { customColumns } = this.props;\n this.parseCustomColumns(customColumns);\n this.startListening();\n }\n\n componentWillUnmount(): void {\n this.stopListening();\n if (this.successButtonTimer) {\n clearTimeout(this.successButtonTimer);\n }\n }\n\n container: HTMLDivElement | null;\n\n successButtonTimer: ReturnType<typeof setTimeout> | null;\n\n getInput = memoize((inputs: Input[], key: string) =>\n inputs.find(input => input.eventKey === key)\n );\n\n getInputIndex = memoize((inputs: Input[], key: string) =>\n inputs.findIndex(input => input.eventKey === key)\n );\n\n resetErrorMessage(): void {\n this.setState({ errorMessage: null });\n }\n\n startListening(): void {\n const { model } = this.props;\n model.addEventListener(\n IrisGridModel.EVENT.COLUMNS_CHANGED,\n this.handleCustomColumnUpdated\n );\n model.addEventListener(\n IrisGridModel.EVENT.UPDATED,\n this.handleCustomColumnUpdated\n );\n model.addEventListener(\n IrisGridModel.EVENT.REQUEST_FAILED,\n this.handleRequestFailed\n );\n }\n\n stopListening(): void {\n const { model } = this.props;\n model.removeEventListener(\n IrisGridModel.EVENT.COLUMNS_CHANGED,\n this.handleCustomColumnUpdated\n );\n model.removeEventListener(\n IrisGridModel.EVENT.UPDATED,\n this.handleCustomColumnUpdated\n );\n model.removeEventListener(\n IrisGridModel.EVENT.REQUEST_FAILED,\n this.handleRequestFailed\n );\n }\n\n parseCustomColumns(customColumns: string[]): void {\n if (customColumns.length > 0) {\n const customColumnInputs = customColumns.map(customColumn => {\n const input = customColumn.split(/=(.+)/, 2);\n return {\n eventKey: CustomColumnBuilder.makeCustomColumnInputEventKey(),\n name: input[0],\n formula: input[1],\n };\n });\n this.setState({ inputs: customColumnInputs });\n } else {\n this.setState({\n inputs: [CustomColumnBuilder.createCustomColumnInput()],\n });\n }\n }\n\n handleAddColumnClick(): void {\n const { inputs } = this.state;\n const newInputs = [...inputs];\n newInputs.push(CustomColumnBuilder.createCustomColumnInput());\n this.setState({\n inputs: newInputs,\n });\n }\n\n handleDeleteColumn(eventKey: string): void {\n const { inputs } = this.state;\n const customColumnIndex = this.getInputIndex(inputs, eventKey);\n const newInputs = [...inputs];\n newInputs.splice(customColumnIndex, 1);\n if (newInputs.length === 0) {\n newInputs.push(CustomColumnBuilder.createCustomColumnInput());\n }\n this.setState({\n inputs: newInputs,\n });\n }\n\n handleInputChange(\n eventKey: string,\n type: CustomColumnKey,\n value: string\n ): void {\n const { inputs } = this.state;\n const customColumnIndex = this.getInputIndex(inputs, eventKey);\n const customColumnInput = this.getInput(inputs, eventKey);\n\n const newCustomInput = { ...customColumnInput } as Input;\n newCustomInput[type] = value;\n\n const newInputs = [...inputs];\n newInputs.splice(customColumnIndex, 1, newCustomInput);\n this.setState({\n inputs: newInputs,\n });\n }\n\n handleCustomColumnUpdated(): void {\n const { isCustomColumnApplying } = this.state;\n if (!isCustomColumnApplying) {\n return;\n }\n this.setState(\n { isCustomColumnApplying: false, isSuccessShowing: true },\n () => {\n this.successButtonTimer = setTimeout(\n () => this.setState({ isSuccessShowing: false }),\n CustomColumnBuilder.SUCCESS_SHOW_DURATION\n );\n }\n );\n }\n\n handleRequestFailed(event: Event): void {\n const customEvent = event as CustomEvent;\n const { isCustomColumnApplying } = this.state;\n if (!isCustomColumnApplying) {\n return;\n }\n\n this.setState({\n isCustomColumnApplying: false,\n errorMessage: (\n <>\n <p>\n <FontAwesomeIcon icon={vsWarning} /> Failed to apply custom columns.\n </p>\n <div className=\"error-box\">\n {customEvent.detail.errorMessage}\n <br />\n Table configuration:{' '}\n {JSON.stringify(customEvent.detail.configuration)}\n </div>\n </>\n ),\n hasRequestFailed: true,\n });\n }\n\n handleDragEnd(result: DropResult): void {\n DragUtils.stopDragging();\n\n // if dropped outside the list\n if (!result.destination) {\n return;\n }\n const { inputs } = this.state;\n const sourceIndex = result.source.index;\n const destinationIndex = result.destination.index;\n const newInputs = [...inputs];\n const sourceInput = inputs[sourceIndex];\n\n newInputs.splice(sourceIndex, 1);\n newInputs.splice(destinationIndex, 0, sourceInput);\n\n this.setState({ inputs: newInputs });\n }\n\n handleEditorTabNavigation(focusEditorIndex: number, shiftKey: boolean): void {\n const { inputs } = this.state;\n // focus on drag handle\n if (shiftKey) {\n (this.container?.querySelectorAll(`.btn-drag-handle`)[\n focusEditorIndex\n ] as HTMLButtonElement).focus();\n return;\n }\n if (focusEditorIndex === inputs.length - 1) {\n (this.container?.querySelectorAll(`.btn-add-column`)[\n focusEditorIndex\n ] as HTMLButtonElement).focus();\n } else {\n // focus on next column name input\n const nextFocusIndex = focusEditorIndex + 1;\n (this.container?.querySelectorAll(`.custom-column-input`)[\n nextFocusIndex\n ] as HTMLInputElement).focus();\n }\n }\n\n handleSaveClick(): void {\n const { onSave } = this.props;\n const { inputs, isCustomColumnApplying } = this.state;\n if (isCustomColumnApplying) {\n return;\n }\n const customColumns = [] as string[];\n inputs.forEach(input => {\n const { name, formula } = input;\n if (name && formula) {\n customColumns.push(`${name}=${formula}`);\n }\n });\n this.resetErrorMessage();\n this.setState({ isCustomColumnApplying: true });\n onSave(customColumns);\n }\n\n resetRequestFailed(): void {\n this.setState(({ hasRequestFailed }) => {\n if (hasRequestFailed) {\n return { hasRequestFailed: false };\n }\n return null;\n });\n }\n\n renderInputs(): ReactElement[] {\n const { inputs, hasRequestFailed } = this.state;\n\n return inputs.map((input, index) => {\n const { eventKey, name, formula } = input;\n return (\n <CustomColumnInput\n key={eventKey}\n inputIndex={index}\n eventKey={eventKey}\n name={name}\n formula={formula}\n onChange={this.handleInputChange}\n onDeleteColumn={this.handleDeleteColumn}\n onTabInEditor={this.handleEditorTabNavigation}\n invalid={hasRequestFailed}\n />\n );\n });\n }\n\n renderSaveButton(): ReactElement {\n const { inputs, isCustomColumnApplying, isSuccessShowing } = this.state;\n const saveText = inputs.length > 1 ? 'Save Columns' : 'Save Column';\n\n return (\n <Button\n kind={isSuccessShowing ? 'success' : 'primary'}\n className={classNames('btn-apply', {\n 'btn-spinner': isCustomColumnApplying,\n })}\n disabled={isSuccessShowing || isCustomColumnApplying}\n onClick={this.handleSaveClick}\n >\n {isCustomColumnApplying && (\n <span>\n <LoadingSpinner />\n <span className=\"btn-normal-content\">Applying</span>\n <span className=\"btn-hover-content\">Applying</span>\n </span>\n )}\n {!isSuccessShowing && !isCustomColumnApplying && saveText}\n {isSuccessShowing && (\n <>\n <FontAwesomeIcon icon={vsPass} /> Success\n </>\n )}\n </Button>\n );\n }\n\n render(): ReactElement {\n const { onCancel } = this.props;\n const { errorMessage } = this.state;\n return (\n <div\n role=\"presentation\"\n className=\"custom-column-builder-container\"\n ref={container => {\n this.container = container;\n }}\n onClick={this.resetRequestFailed}\n onFocus={this.resetRequestFailed}\n >\n <hr />\n <DragDropContext\n onDragStart={DragUtils.startDragging}\n onDragEnd={this.handleDragEnd}\n >\n <Droppable droppableId=\"droppable-custom-columns\">\n {(provided, snapshot) => (\n <div\n ref={provided.innerRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.droppableProps}\n className={classNames('droppable-container', {\n dragging: snapshot.draggingFromThisWith,\n })}\n >\n {this.renderInputs()}\n {provided.placeholder}\n </div>\n )}\n </Droppable>\n </DragDropContext>\n\n <div className=\"pt-1 px-3\">\n <Button\n kind=\"ghost\"\n className=\"btn-add-column\"\n onClick={this.handleAddColumnClick}\n icon={dhNewCircleLargeFilled}\n >\n Add Another Column\n </Button>\n </div>\n\n <div className=\"custom-column-builder-footer\">\n {errorMessage && <div className=\"error-message\">{errorMessage}</div>}\n\n <div className=\"d-flex justify-content-end\">\n <Button kind=\"secondary\" className=\"mr-2\" onClick={onCancel}>\n Cancel\n </Button>\n {this.renderSaveButton()}\n </div>\n </div>\n </div>\n );\n }\n}\n\nexport default CustomColumnBuilder;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"CustomColumnInput.d.ts","sourceRoot":"","sources":["../../src/sidebar/CustomColumnInput.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAO3D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,UAAU,sBAAsB;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,CACR,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,eAAe,EAC1B,KAAK,EAAE,MAAM,KACV,IAAI,CAAC;IACV,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,aAAa,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAChE,OAAO,EAAE,OAAO,CAAC;CAClB;AACD,cAAM,iBAAkB,SAAQ,aAAa,CAC3C,sBAAsB,EACtB,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CACtB;IACC,MAAM,CAAC,UAAU;;;MAGf;IAEF,MAAM,CAAC,YAAY;;;;wBAIH,IAAI;8BACE,IAAI;6BACL,IAAI;;MAEvB;gBAEU,KAAK,EAAE,sBAAsB;IAOzC,iCAAiC,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI;IAY9D,MAAM,IAAI,YAAY;CA8EvB;AAED,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"CustomColumnInput.d.ts","sourceRoot":"","sources":["../../src/sidebar/CustomColumnInput.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAO3D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,UAAU,sBAAsB;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,CACR,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,eAAe,EAC1B,KAAK,EAAE,MAAM,KACV,IAAI,CAAC;IACV,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,aAAa,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAChE,OAAO,EAAE,OAAO,CAAC;CAClB;AACD,cAAM,iBAAkB,SAAQ,aAAa,CAC3C,sBAAsB,EACtB,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CACtB;IACC,MAAM,CAAC,UAAU;;;MAGf;IAEF,MAAM,CAAC,YAAY;;;;wBAIH,IAAI;8BACE,IAAI;6BACL,IAAI;;MAEvB;gBAEU,KAAK,EAAE,sBAAsB;IAOzC,iCAAiC,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI;IAY9D,MAAM,IAAI,YAAY;CA6EvB;AAED,eAAe,iBAAiB,CAAC"}