@deephaven/grid 1.22.1 → 1.22.2-alpha-pivot-builder.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 (58) hide show
  1. package/dist/CellInputField.js +41 -22
  2. package/dist/CellInputField.js.map +1 -1
  3. package/dist/CellRenderer.js +19 -27
  4. package/dist/CellRenderer.js.map +1 -1
  5. package/dist/DataBarCellRenderer.js +61 -87
  6. package/dist/DataBarCellRenderer.js.map +1 -1
  7. package/dist/Grid.d.ts.map +1 -1
  8. package/dist/Grid.js +291 -453
  9. package/dist/Grid.js.map +1 -1
  10. package/dist/GridColorUtils.js +23 -21
  11. package/dist/GridColorUtils.js.map +1 -1
  12. package/dist/GridMetricCalculator.js +192 -303
  13. package/dist/GridMetricCalculator.js.map +1 -1
  14. package/dist/GridRange.js +18 -28
  15. package/dist/GridRange.js.map +1 -1
  16. package/dist/GridRenderer.js +429 -600
  17. package/dist/GridRenderer.js.map +1 -1
  18. package/dist/GridUtils.js +130 -163
  19. package/dist/GridUtils.js.map +1 -1
  20. package/dist/MockGridModel.js +17 -10
  21. package/dist/MockGridModel.js.map +1 -1
  22. package/dist/MockTreeGridModel.js +36 -31
  23. package/dist/MockTreeGridModel.js.map +1 -1
  24. package/dist/TextCellRenderer.js +36 -57
  25. package/dist/TextCellRenderer.js.map +1 -1
  26. package/dist/key-handlers/EditKeyHandler.js +4 -7
  27. package/dist/key-handlers/EditKeyHandler.js.map +1 -1
  28. package/dist/key-handlers/PasteKeyHandler.js +1 -3
  29. package/dist/key-handlers/PasteKeyHandler.js.map +1 -1
  30. package/dist/key-handlers/SelectionKeyHandler.js +40 -71
  31. package/dist/key-handlers/SelectionKeyHandler.js.map +1 -1
  32. package/dist/key-handlers/TreeKeyHandler.js +4 -10
  33. package/dist/key-handlers/TreeKeyHandler.js.map +1 -1
  34. package/dist/mouse-handlers/EditMouseHandler.js +3 -7
  35. package/dist/mouse-handlers/EditMouseHandler.js.map +1 -1
  36. package/dist/mouse-handlers/GridColumnMoveMouseHandler.js +54 -82
  37. package/dist/mouse-handlers/GridColumnMoveMouseHandler.js.map +1 -1
  38. package/dist/mouse-handlers/GridColumnSeparatorMouseHandler.js +4 -8
  39. package/dist/mouse-handlers/GridColumnSeparatorMouseHandler.js.map +1 -1
  40. package/dist/mouse-handlers/GridHorizontalScrollBarMouseHandler.js +31 -55
  41. package/dist/mouse-handlers/GridHorizontalScrollBarMouseHandler.js.map +1 -1
  42. package/dist/mouse-handlers/GridRowMoveMouseHandler.js +26 -46
  43. package/dist/mouse-handlers/GridRowMoveMouseHandler.js.map +1 -1
  44. package/dist/mouse-handlers/GridRowSeparatorMouseHandler.js +2 -4
  45. package/dist/mouse-handlers/GridRowSeparatorMouseHandler.js.map +1 -1
  46. package/dist/mouse-handlers/GridRowTreeMouseHandler.js +14 -22
  47. package/dist/mouse-handlers/GridRowTreeMouseHandler.js.map +1 -1
  48. package/dist/mouse-handlers/GridScrollBarCornerMouseHandler.js +8 -16
  49. package/dist/mouse-handlers/GridScrollBarCornerMouseHandler.js.map +1 -1
  50. package/dist/mouse-handlers/GridSelectionMouseHandler.js +47 -75
  51. package/dist/mouse-handlers/GridSelectionMouseHandler.js.map +1 -1
  52. package/dist/mouse-handlers/GridSeparatorMouseHandler.js +9 -23
  53. package/dist/mouse-handlers/GridSeparatorMouseHandler.js.map +1 -1
  54. package/dist/mouse-handlers/GridTokenMouseHandler.js +24 -39
  55. package/dist/mouse-handlers/GridTokenMouseHandler.js.map +1 -1
  56. package/dist/mouse-handlers/GridVerticalScrollBarMouseHandler.js +31 -55
  57. package/dist/mouse-handlers/GridVerticalScrollBarMouseHandler.js.map +1 -1
  58. package/package.json +3 -3
@@ -1,3 +1,9 @@
1
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
2
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
4
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
5
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
6
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
1
7
  import React, { useCallback, useEffect, useRef, useState } from 'react';
2
8
  import classNames from 'classnames';
3
9
  import { EMPTY_FUNCTION } from '@deephaven/utils';
@@ -20,31 +26,46 @@ var directionForKey = key => {
20
26
  }
21
27
  };
22
28
  export function CellInputField(_ref) {
23
- var {
24
- selectionRange,
25
- className = '',
26
- disabled = false,
27
- value: propsValue = '',
28
- isQuickEdit: propsIsQuickEdit = true,
29
- onChange = EMPTY_FUNCTION,
30
- onCancel = EMPTY_FUNCTION,
31
- onDone = EMPTY_FUNCTION,
32
- onContextMenu = EMPTY_FUNCTION,
33
- style
34
- } = _ref;
29
+ var selectionRange = _ref.selectionRange,
30
+ _ref$className = _ref.className,
31
+ className = _ref$className === void 0 ? '' : _ref$className,
32
+ _ref$disabled = _ref.disabled,
33
+ disabled = _ref$disabled === void 0 ? false : _ref$disabled,
34
+ _ref$value = _ref.value,
35
+ propsValue = _ref$value === void 0 ? '' : _ref$value,
36
+ _ref$isQuickEdit = _ref.isQuickEdit,
37
+ propsIsQuickEdit = _ref$isQuickEdit === void 0 ? true : _ref$isQuickEdit,
38
+ _ref$onChange = _ref.onChange,
39
+ onChange = _ref$onChange === void 0 ? EMPTY_FUNCTION : _ref$onChange,
40
+ _ref$onCancel = _ref.onCancel,
41
+ onCancel = _ref$onCancel === void 0 ? EMPTY_FUNCTION : _ref$onCancel,
42
+ _ref$onDone = _ref.onDone,
43
+ onDone = _ref$onDone === void 0 ? EMPTY_FUNCTION : _ref$onDone,
44
+ _ref$onContextMenu = _ref.onContextMenu,
45
+ onContextMenu = _ref$onContextMenu === void 0 ? EMPTY_FUNCTION : _ref$onContextMenu,
46
+ style = _ref.style;
35
47
  var inputField = useRef(null);
36
48
  // Use a ref for `isCancelled` as we need to know when it's cancelled after it's called by the event handlers as well
37
49
  var isCancelled = useRef(false);
38
- var [initialValue] = useState(propsValue);
39
- var [isChanged, setIsChanged] = useState(false);
40
- var [isQuickEdit, setIsQuickEdit] = useState(propsIsQuickEdit);
41
- var [value, setValue] = useState(propsValue);
50
+ var _useState = useState(propsValue),
51
+ _useState2 = _slicedToArray(_useState, 1),
52
+ initialValue = _useState2[0];
53
+ var _useState3 = useState(false),
54
+ _useState4 = _slicedToArray(_useState3, 2),
55
+ isChanged = _useState4[0],
56
+ setIsChanged = _useState4[1];
57
+ var _useState5 = useState(propsIsQuickEdit),
58
+ _useState6 = _slicedToArray(_useState5, 2),
59
+ isQuickEdit = _useState6[0],
60
+ setIsQuickEdit = _useState6[1];
61
+ var _useState7 = useState(propsValue),
62
+ _useState8 = _slicedToArray(_useState7, 2),
63
+ value = _useState8[0],
64
+ setValue = _useState8[1];
42
65
 
43
66
  // Init field selection
44
67
  useEffect(function selectInputField() {
45
- var {
46
- current: field
47
- } = inputField;
68
+ var field = inputField.current;
48
69
  if (field == null) {
49
70
  return;
50
71
  }
@@ -59,9 +80,7 @@ export function CellInputField(_ref) {
59
80
  onChange(newValue);
60
81
  }, [onChange]);
61
82
  var handleChange = useCallback(event => {
62
- var {
63
- value: newValue
64
- } = event.target;
83
+ var newValue = event.target.value;
65
84
  setValue(newValue);
66
85
  setIsChanged(true);
67
86
  sendUpdate(newValue);
@@ -1 +1 @@
1
- {"version":3,"file":"CellInputField.js","names":["React","useCallback","useEffect","useRef","useState","classNames","EMPTY_FUNCTION","SELECTION_DIRECTION","GridUtils","jsx","_jsx","directionForKey","key","DOWN","UP","LEFT","RIGHT","undefined","CellInputField","_ref","selectionRange","className","disabled","value","propsValue","isQuickEdit","propsIsQuickEdit","onChange","onCancel","onDone","onContextMenu","style","inputField","isCancelled","initialValue","isChanged","setIsChanged","setIsQuickEdit","setValue","selectInputField","current","field","focus","setSelectionRange","length","sendUpdate","newValue","handleChange","event","target","handleCancel","handleClick","handleCommit","direction","fillRange","arguments","handleBlur","handleKeyDown","stopPropagation","preventDefault","isModifierKeyDown","altKey","concat","shiftKey","handleContextMenu","ref","onBlur","onKeyDown","onClick","autoComplete","autoCorrect","autoCapitalize","spellCheck"],"sources":["../src/CellInputField.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport classNames from 'classnames';\nimport { EMPTY_FUNCTION } from '@deephaven/utils';\nimport { SELECTION_DIRECTION } from './GridRange';\nimport GridUtils from './GridUtils';\nimport './CellInputField.scss';\n\nexport type CellInputFieldProps = {\n selectionRange?: number[];\n className?: string;\n disabled?: boolean;\n isQuickEdit?: boolean;\n value?: string;\n onChange?: (value: string) => void;\n onCancel?: () => void;\n onDone?: (\n value: string,\n options: {\n direction?: SELECTION_DIRECTION | null;\n fillRange?: boolean;\n }\n ) => void;\n onContextMenu?: React.MouseEventHandler<HTMLTextAreaElement>;\n style?: React.CSSProperties;\n};\n\nconst directionForKey = (key: string): SELECTION_DIRECTION | undefined => {\n switch (key) {\n case 'ArrowDown':\n return SELECTION_DIRECTION.DOWN;\n case 'ArrowUp':\n return SELECTION_DIRECTION.UP;\n case 'ArrowLeft':\n return SELECTION_DIRECTION.LEFT;\n case 'ArrowRight':\n return SELECTION_DIRECTION.RIGHT;\n default:\n return undefined;\n }\n};\n\nexport function CellInputField({\n selectionRange,\n className = '',\n disabled = false,\n value: propsValue = '',\n isQuickEdit: propsIsQuickEdit = true,\n onChange = EMPTY_FUNCTION,\n onCancel = EMPTY_FUNCTION,\n onDone = EMPTY_FUNCTION,\n onContextMenu = EMPTY_FUNCTION,\n style,\n}: CellInputFieldProps): JSX.Element {\n const inputField = useRef<HTMLTextAreaElement>(null);\n // Use a ref for `isCancelled` as we need to know when it's cancelled after it's called by the event handlers as well\n const isCancelled = useRef<boolean>(false);\n const [initialValue] = useState(propsValue);\n const [isChanged, setIsChanged] = useState(false);\n const [isQuickEdit, setIsQuickEdit] = useState(propsIsQuickEdit);\n const [value, setValue] = useState(propsValue);\n\n // Init field selection\n useEffect(\n function selectInputField() {\n const { current: field } = inputField;\n if (field == null) {\n return;\n }\n\n field.focus();\n if (selectionRange) {\n field.setSelectionRange(selectionRange[0], selectionRange[1]);\n } else {\n field.setSelectionRange(field.value.length, field.value.length);\n }\n },\n [selectionRange]\n );\n\n const sendUpdate = useCallback(\n (newValue: string) => {\n onChange(newValue);\n },\n [onChange]\n );\n\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLTextAreaElement>) => {\n const { value: newValue } = event.target;\n setValue(newValue);\n setIsChanged(true);\n sendUpdate(newValue);\n },\n [sendUpdate, setValue, setIsChanged]\n );\n\n const handleCancel = useCallback(() => {\n isCancelled.current = true;\n if (isChanged) {\n sendUpdate(initialValue);\n }\n\n setIsChanged(false);\n onCancel();\n }, [initialValue, isChanged, onCancel, sendUpdate]);\n\n const handleClick = useCallback(() => {\n setIsQuickEdit(false);\n }, [setIsQuickEdit]);\n\n const handleCommit = useCallback(\n (direction?: SELECTION_DIRECTION | null, fillRange = false) => {\n onDone(value, { direction, fillRange });\n },\n [onDone, value]\n );\n\n const handleBlur = useCallback(() => {\n if (isCancelled.current) {\n return;\n }\n\n handleCommit(null);\n }, [isCancelled, handleCommit]);\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLTextAreaElement>) => {\n event.stopPropagation();\n\n switch (event.key) {\n case 'Escape':\n event.preventDefault();\n handleCancel();\n break;\n case 'Enter':\n event.preventDefault();\n if (GridUtils.isModifierKeyDown(event)) {\n handleCommit(undefined, true);\n } else if (event.altKey) {\n const newValue = `${value}\\n`;\n setValue(newValue);\n setIsChanged(true);\n sendUpdate(newValue);\n } else {\n handleCommit(\n event.shiftKey ? SELECTION_DIRECTION.UP : SELECTION_DIRECTION.DOWN\n );\n }\n break;\n case 'Tab':\n event.preventDefault();\n handleCommit(\n event.shiftKey\n ? SELECTION_DIRECTION.LEFT\n : SELECTION_DIRECTION.RIGHT\n );\n break;\n case 'ArrowDown':\n case 'ArrowUp':\n case 'ArrowLeft':\n case 'ArrowRight':\n if (isQuickEdit) {\n event.preventDefault();\n handleCommit(directionForKey(event.key));\n }\n break;\n default:\n break;\n }\n },\n [\n handleCancel,\n handleCommit,\n isQuickEdit,\n setValue,\n setIsChanged,\n sendUpdate,\n value,\n ]\n );\n\n const handleContextMenu = useCallback(\n (event: React.MouseEvent<HTMLTextAreaElement, MouseEvent>) => {\n onContextMenu(event);\n },\n [onContextMenu]\n );\n\n return (\n <textarea\n ref={inputField}\n className={classNames('grid-cell-input-field', className)}\n value={value}\n onBlur={handleBlur}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n onContextMenu={handleContextMenu}\n onClick={handleClick}\n autoComplete=\"off\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n spellCheck=\"false\"\n disabled={disabled}\n style={style}\n />\n );\n}\n\nexport default CellInputField;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,WAAW,EAAEC,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AACvE,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,cAAc,QAAQ,kBAAkB;AAAC,SACzCC,mBAAmB;AAAA,OACrBC,SAAS;AAAA;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAsBhB,IAAMC,eAAe,GAAIC,GAAW,IAAsC;EACxE,QAAQA,GAAG;IACT,KAAK,WAAW;MACd,OAAOL,mBAAmB,CAACM,IAAI;IACjC,KAAK,SAAS;MACZ,OAAON,mBAAmB,CAACO,EAAE;IAC/B,KAAK,WAAW;MACd,OAAOP,mBAAmB,CAACQ,IAAI;IACjC,KAAK,YAAY;MACf,OAAOR,mBAAmB,CAACS,KAAK;IAClC;MACE,OAAOC,SAAS;EACpB;AACF,CAAC;AAED,OAAO,SAASC,cAAcA,CAAAC,IAAA,EAWO;EAAA,IAXN;IAC7BC,cAAc;IACdC,SAAS,GAAG,EAAE;IACdC,QAAQ,GAAG,KAAK;IAChBC,KAAK,EAAEC,UAAU,GAAG,EAAE;IACtBC,WAAW,EAAEC,gBAAgB,GAAG,IAAI;IACpCC,QAAQ,GAAGrB,cAAc;IACzBsB,QAAQ,GAAGtB,cAAc;IACzBuB,MAAM,GAAGvB,cAAc;IACvBwB,aAAa,GAAGxB,cAAc;IAC9ByB;EACmB,CAAC,GAAAZ,IAAA;EACpB,IAAMa,UAAU,GAAG7B,MAAM,CAAsB,IAAI,CAAC;EACpD;EACA,IAAM8B,WAAW,GAAG9B,MAAM,CAAU,KAAK,CAAC;EAC1C,IAAM,CAAC+B,YAAY,CAAC,GAAG9B,QAAQ,CAACoB,UAAU,CAAC;EAC3C,IAAM,CAACW,SAAS,EAAEC,YAAY,CAAC,GAAGhC,QAAQ,CAAC,KAAK,CAAC;EACjD,IAAM,CAACqB,WAAW,EAAEY,cAAc,CAAC,GAAGjC,QAAQ,CAACsB,gBAAgB,CAAC;EAChE,IAAM,CAACH,KAAK,EAAEe,QAAQ,CAAC,GAAGlC,QAAQ,CAACoB,UAAU,CAAC;;EAE9C;EACAtB,SAAS,CACP,SAASqC,gBAAgBA,CAAA,EAAG;IAC1B,IAAM;MAAEC,OAAO,EAAEC;IAAM,CAAC,GAAGT,UAAU;IACrC,IAAIS,KAAK,IAAI,IAAI,EAAE;MACjB;IACF;IAEAA,KAAK,CAACC,KAAK,CAAC,CAAC;IACb,IAAItB,cAAc,EAAE;MAClBqB,KAAK,CAACE,iBAAiB,CAACvB,cAAc,CAAC,CAAC,CAAC,EAAEA,cAAc,CAAC,CAAC,CAAC,CAAC;IAC/D,CAAC,MAAM;MACLqB,KAAK,CAACE,iBAAiB,CAACF,KAAK,CAAClB,KAAK,CAACqB,MAAM,EAAEH,KAAK,CAAClB,KAAK,CAACqB,MAAM,CAAC;IACjE;EACF,CAAC,EACD,CAACxB,cAAc,CACjB,CAAC;EAED,IAAMyB,UAAU,GAAG5C,WAAW,CAC3B6C,QAAgB,IAAK;IACpBnB,QAAQ,CAACmB,QAAQ,CAAC;EACpB,CAAC,EACD,CAACnB,QAAQ,CACX,CAAC;EAED,IAAMoB,YAAY,GAAG9C,WAAW,CAC7B+C,KAA6C,IAAK;IACjD,IAAM;MAAEzB,KAAK,EAAEuB;IAAS,CAAC,GAAGE,KAAK,CAACC,MAAM;IACxCX,QAAQ,CAACQ,QAAQ,CAAC;IAClBV,YAAY,CAAC,IAAI,CAAC;IAClBS,UAAU,CAACC,QAAQ,CAAC;EACtB,CAAC,EACD,CAACD,UAAU,EAAEP,QAAQ,EAAEF,YAAY,CACrC,CAAC;EAED,IAAMc,YAAY,GAAGjD,WAAW,CAAC,MAAM;IACrCgC,WAAW,CAACO,OAAO,GAAG,IAAI;IAC1B,IAAIL,SAAS,EAAE;MACbU,UAAU,CAACX,YAAY,CAAC;IAC1B;IAEAE,YAAY,CAAC,KAAK,CAAC;IACnBR,QAAQ,CAAC,CAAC;EACZ,CAAC,EAAE,CAACM,YAAY,EAAEC,SAAS,EAAEP,QAAQ,EAAEiB,UAAU,CAAC,CAAC;EAEnD,IAAMM,WAAW,GAAGlD,WAAW,CAAC,MAAM;IACpCoC,cAAc,CAAC,KAAK,CAAC;EACvB,CAAC,EAAE,CAACA,cAAc,CAAC,CAAC;EAEpB,IAAMe,YAAY,GAAGnD,WAAW,CAC9B,UAACoD,SAAsC,EAAwB;IAAA,IAAtBC,SAAS,GAAAC,SAAA,CAAAX,MAAA,QAAAW,SAAA,QAAAtC,SAAA,GAAAsC,SAAA,MAAG,KAAK;IACxD1B,MAAM,CAACN,KAAK,EAAE;MAAE8B,SAAS;MAAEC;IAAU,CAAC,CAAC;EACzC,CAAC,EACD,CAACzB,MAAM,EAAEN,KAAK,CAChB,CAAC;EAED,IAAMiC,UAAU,GAAGvD,WAAW,CAAC,MAAM;IACnC,IAAIgC,WAAW,CAACO,OAAO,EAAE;MACvB;IACF;IAEAY,YAAY,CAAC,IAAI,CAAC;EACpB,CAAC,EAAE,CAACnB,WAAW,EAAEmB,YAAY,CAAC,CAAC;EAE/B,IAAMK,aAAa,GAAGxD,WAAW,CAC9B+C,KAA+C,IAAK;IACnDA,KAAK,CAACU,eAAe,CAAC,CAAC;IAEvB,QAAQV,KAAK,CAACpC,GAAG;MACf,KAAK,QAAQ;QACXoC,KAAK,CAACW,cAAc,CAAC,CAAC;QACtBT,YAAY,CAAC,CAAC;QACd;MACF,KAAK,OAAO;QACVF,KAAK,CAACW,cAAc,CAAC,CAAC;QACtB,IAAInD,SAAS,CAACoD,iBAAiB,CAACZ,KAAK,CAAC,EAAE;UACtCI,YAAY,CAACnC,SAAS,EAAE,IAAI,CAAC;QAC/B,CAAC,MAAM,IAAI+B,KAAK,CAACa,MAAM,EAAE;UACvB,IAAMf,QAAQ,MAAAgB,MAAA,CAAMvC,KAAK,OAAI;UAC7Be,QAAQ,CAACQ,QAAQ,CAAC;UAClBV,YAAY,CAAC,IAAI,CAAC;UAClBS,UAAU,CAACC,QAAQ,CAAC;QACtB,CAAC,MAAM;UACLM,YAAY,CACVJ,KAAK,CAACe,QAAQ,GAAGxD,mBAAmB,CAACO,EAAE,GAAGP,mBAAmB,CAACM,IAChE,CAAC;QACH;QACA;MACF,KAAK,KAAK;QACRmC,KAAK,CAACW,cAAc,CAAC,CAAC;QACtBP,YAAY,CACVJ,KAAK,CAACe,QAAQ,GACVxD,mBAAmB,CAACQ,IAAI,GACxBR,mBAAmB,CAACS,KAC1B,CAAC;QACD;MACF,KAAK,WAAW;MAChB,KAAK,SAAS;MACd,KAAK,WAAW;MAChB,KAAK,YAAY;QACf,IAAIS,WAAW,EAAE;UACfuB,KAAK,CAACW,cAAc,CAAC,CAAC;UACtBP,YAAY,CAACzC,eAAe,CAACqC,KAAK,CAACpC,GAAG,CAAC,CAAC;QAC1C;QACA;MACF;QACE;IACJ;EACF,CAAC,EACD,CACEsC,YAAY,EACZE,YAAY,EACZ3B,WAAW,EACXa,QAAQ,EACRF,YAAY,EACZS,UAAU,EACVtB,KAAK,CAET,CAAC;EAED,IAAMyC,iBAAiB,GAAG/D,WAAW,CAClC+C,KAAwD,IAAK;IAC5DlB,aAAa,CAACkB,KAAK,CAAC;EACtB,CAAC,EACD,CAAClB,aAAa,CAChB,CAAC;EAED,oBACEpB,IAAA;IACEuD,GAAG,EAAEjC,UAAW;IAChBX,SAAS,EAAEhB,UAAU,CAAC,uBAAuB,EAAEgB,SAAS,CAAE;IAC1DE,KAAK,EAAEA,KAAM;IACb2C,MAAM,EAAEV,UAAW;IACnB7B,QAAQ,EAAEoB,YAAa;IACvBoB,SAAS,EAAEV,aAAc;IACzB3B,aAAa,EAAEkC,iBAAkB;IACjCI,OAAO,EAAEjB,WAAY;IACrBkB,YAAY,EAAC,KAAK;IAClBC,WAAW,EAAC,KAAK;IACjBC,cAAc,EAAC,KAAK;IACpBC,UAAU,EAAC,OAAO;IAClBlD,QAAQ,EAAEA,QAAS;IACnBS,KAAK,EAAEA;EAAM,CACd,CAAC;AAEN;AAEA,eAAeb,cAAc","ignoreList":[]}
1
+ {"version":3,"file":"CellInputField.js","names":["React","useCallback","useEffect","useRef","useState","classNames","EMPTY_FUNCTION","SELECTION_DIRECTION","GridUtils","jsx","_jsx","directionForKey","key","DOWN","UP","LEFT","RIGHT","undefined","CellInputField","_ref","selectionRange","_ref$className","className","_ref$disabled","disabled","_ref$value","value","propsValue","_ref$isQuickEdit","isQuickEdit","propsIsQuickEdit","_ref$onChange","onChange","_ref$onCancel","onCancel","_ref$onDone","onDone","_ref$onContextMenu","onContextMenu","style","inputField","isCancelled","_useState","_useState2","_slicedToArray","initialValue","_useState3","_useState4","isChanged","setIsChanged","_useState5","_useState6","setIsQuickEdit","_useState7","_useState8","setValue","selectInputField","field","current","focus","setSelectionRange","length","sendUpdate","newValue","handleChange","event","target","handleCancel","handleClick","handleCommit","direction","fillRange","arguments","handleBlur","handleKeyDown","stopPropagation","preventDefault","isModifierKeyDown","altKey","concat","shiftKey","handleContextMenu","ref","onBlur","onKeyDown","onClick","autoComplete","autoCorrect","autoCapitalize","spellCheck"],"sources":["../src/CellInputField.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport classNames from 'classnames';\nimport { EMPTY_FUNCTION } from '@deephaven/utils';\nimport { SELECTION_DIRECTION } from './GridRange';\nimport GridUtils from './GridUtils';\nimport './CellInputField.scss';\n\nexport type CellInputFieldProps = {\n selectionRange?: number[];\n className?: string;\n disabled?: boolean;\n isQuickEdit?: boolean;\n value?: string;\n onChange?: (value: string) => void;\n onCancel?: () => void;\n onDone?: (\n value: string,\n options: {\n direction?: SELECTION_DIRECTION | null;\n fillRange?: boolean;\n }\n ) => void;\n onContextMenu?: React.MouseEventHandler<HTMLTextAreaElement>;\n style?: React.CSSProperties;\n};\n\nconst directionForKey = (key: string): SELECTION_DIRECTION | undefined => {\n switch (key) {\n case 'ArrowDown':\n return SELECTION_DIRECTION.DOWN;\n case 'ArrowUp':\n return SELECTION_DIRECTION.UP;\n case 'ArrowLeft':\n return SELECTION_DIRECTION.LEFT;\n case 'ArrowRight':\n return SELECTION_DIRECTION.RIGHT;\n default:\n return undefined;\n }\n};\n\nexport function CellInputField({\n selectionRange,\n className = '',\n disabled = false,\n value: propsValue = '',\n isQuickEdit: propsIsQuickEdit = true,\n onChange = EMPTY_FUNCTION,\n onCancel = EMPTY_FUNCTION,\n onDone = EMPTY_FUNCTION,\n onContextMenu = EMPTY_FUNCTION,\n style,\n}: CellInputFieldProps): JSX.Element {\n const inputField = useRef<HTMLTextAreaElement>(null);\n // Use a ref for `isCancelled` as we need to know when it's cancelled after it's called by the event handlers as well\n const isCancelled = useRef<boolean>(false);\n const [initialValue] = useState(propsValue);\n const [isChanged, setIsChanged] = useState(false);\n const [isQuickEdit, setIsQuickEdit] = useState(propsIsQuickEdit);\n const [value, setValue] = useState(propsValue);\n\n // Init field selection\n useEffect(\n function selectInputField() {\n const { current: field } = inputField;\n if (field == null) {\n return;\n }\n\n field.focus();\n if (selectionRange) {\n field.setSelectionRange(selectionRange[0], selectionRange[1]);\n } else {\n field.setSelectionRange(field.value.length, field.value.length);\n }\n },\n [selectionRange]\n );\n\n const sendUpdate = useCallback(\n (newValue: string) => {\n onChange(newValue);\n },\n [onChange]\n );\n\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLTextAreaElement>) => {\n const { value: newValue } = event.target;\n setValue(newValue);\n setIsChanged(true);\n sendUpdate(newValue);\n },\n [sendUpdate, setValue, setIsChanged]\n );\n\n const handleCancel = useCallback(() => {\n isCancelled.current = true;\n if (isChanged) {\n sendUpdate(initialValue);\n }\n\n setIsChanged(false);\n onCancel();\n }, [initialValue, isChanged, onCancel, sendUpdate]);\n\n const handleClick = useCallback(() => {\n setIsQuickEdit(false);\n }, [setIsQuickEdit]);\n\n const handleCommit = useCallback(\n (direction?: SELECTION_DIRECTION | null, fillRange = false) => {\n onDone(value, { direction, fillRange });\n },\n [onDone, value]\n );\n\n const handleBlur = useCallback(() => {\n if (isCancelled.current) {\n return;\n }\n\n handleCommit(null);\n }, [isCancelled, handleCommit]);\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLTextAreaElement>) => {\n event.stopPropagation();\n\n switch (event.key) {\n case 'Escape':\n event.preventDefault();\n handleCancel();\n break;\n case 'Enter':\n event.preventDefault();\n if (GridUtils.isModifierKeyDown(event)) {\n handleCommit(undefined, true);\n } else if (event.altKey) {\n const newValue = `${value}\\n`;\n setValue(newValue);\n setIsChanged(true);\n sendUpdate(newValue);\n } else {\n handleCommit(\n event.shiftKey ? SELECTION_DIRECTION.UP : SELECTION_DIRECTION.DOWN\n );\n }\n break;\n case 'Tab':\n event.preventDefault();\n handleCommit(\n event.shiftKey\n ? SELECTION_DIRECTION.LEFT\n : SELECTION_DIRECTION.RIGHT\n );\n break;\n case 'ArrowDown':\n case 'ArrowUp':\n case 'ArrowLeft':\n case 'ArrowRight':\n if (isQuickEdit) {\n event.preventDefault();\n handleCommit(directionForKey(event.key));\n }\n break;\n default:\n break;\n }\n },\n [\n handleCancel,\n handleCommit,\n isQuickEdit,\n setValue,\n setIsChanged,\n sendUpdate,\n value,\n ]\n );\n\n const handleContextMenu = useCallback(\n (event: React.MouseEvent<HTMLTextAreaElement, MouseEvent>) => {\n onContextMenu(event);\n },\n [onContextMenu]\n );\n\n return (\n <textarea\n ref={inputField}\n className={classNames('grid-cell-input-field', className)}\n value={value}\n onBlur={handleBlur}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n onContextMenu={handleContextMenu}\n onClick={handleClick}\n autoComplete=\"off\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n spellCheck=\"false\"\n disabled={disabled}\n style={style}\n />\n );\n}\n\nexport default CellInputField;\n"],"mappings":"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","ignoreList":[]}
@@ -13,27 +13,21 @@ class CellRenderer {
13
13
  }));
14
14
  }
15
15
  drawCellRowTreeMarker(context, state, row) {
16
- var {
17
- metrics,
18
- model,
19
- mouseX,
20
- mouseY,
21
- theme
22
- } = state;
23
- var {
24
- firstColumn,
25
- gridX,
26
- gridY,
27
- allColumnXs,
28
- allColumnWidths,
29
- allRowYs,
30
- allRowHeights,
31
- visibleRowTreeBoxes
32
- } = metrics;
33
- var {
34
- treeMarkerColor,
35
- treeMarkerHoverColor
36
- } = theme;
16
+ var metrics = state.metrics,
17
+ model = state.model,
18
+ mouseX = state.mouseX,
19
+ mouseY = state.mouseY,
20
+ theme = state.theme;
21
+ var firstColumn = metrics.firstColumn,
22
+ gridX = metrics.gridX,
23
+ gridY = metrics.gridY,
24
+ allColumnXs = metrics.allColumnXs,
25
+ allColumnWidths = metrics.allColumnWidths,
26
+ allRowYs = metrics.allRowYs,
27
+ allRowHeights = metrics.allRowHeights,
28
+ visibleRowTreeBoxes = metrics.visibleRowTreeBoxes;
29
+ var treeMarkerColor = theme.treeMarkerColor,
30
+ treeMarkerHoverColor = theme.treeMarkerHoverColor;
37
31
  var columnX = getOrThrow(allColumnXs, firstColumn);
38
32
  var columnWidth = getOrThrow(allColumnWidths, firstColumn);
39
33
  var rowY = getOrThrow(allRowYs, row);
@@ -46,12 +40,10 @@ class CellRenderer {
46
40
  this.drawTreeMarker(context, state, columnX, rowY, treeBox, color, model.isRowExpanded(row));
47
41
  }
48
42
  drawTreeMarker(context, state, columnX, rowY, treeBox, color, isExpanded) {
49
- var {
50
- x1,
51
- y1,
52
- x2,
53
- y2
54
- } = treeBox;
43
+ var x1 = treeBox.x1,
44
+ y1 = treeBox.y1,
45
+ x2 = treeBox.x2,
46
+ y2 = treeBox.y2;
55
47
  var markerText = isExpanded ? '⊟' : '⊞';
56
48
  var textX = columnX + (x1 + x2) * 0.5 + 0.5;
57
49
  var textY = rowY + (y1 + y2) * 0.5 + 0.5;
@@ -1 +1 @@
1
- {"version":3,"file":"CellRenderer.js","names":["getOrThrow","isExpandableGridModel","GridRenderer","memoizeClear","CellRenderer","constructor","_defineProperty","context","text","width","fontWidthLower","fontWidthUpper","truncationChar","truncateToWidth","max","drawCellRowTreeMarker","state","row","metrics","model","mouseX","mouseY","theme","firstColumn","gridX","gridY","allColumnXs","allColumnWidths","allRowYs","allRowHeights","visibleRowTreeBoxes","treeMarkerColor","treeMarkerHoverColor","columnX","columnWidth","rowY","rowHeight","isRowExpandable","treeBox","color","drawTreeMarker","isRowExpanded","isExpanded","x1","y1","x2","y2","markerText","textX","textY","fillStyle","textAlign","fillText"],"sources":["../src/CellRenderer.ts"],"sourcesContent":["/* eslint-disable class-methods-use-this */\nimport { getOrThrow } from '@deephaven/utils';\nimport { isExpandableGridModel } from './ExpandableGridModel';\nimport {\n type VisibleIndex,\n type Coordinate,\n type BoxCoordinates,\n} from './GridMetrics';\nimport GridRenderer from './GridRenderer';\nimport { type GridRenderState } from './GridRendererTypes';\nimport { type GridColor } from './GridTheme';\nimport memoizeClear from './memoizeClear';\n\nexport type CellRenderType = 'text' | 'dataBar';\n\nabstract class CellRenderer {\n abstract drawCellContent(\n context: CanvasRenderingContext2D,\n state: GridRenderState,\n column: VisibleIndex,\n row: VisibleIndex\n ): void;\n\n drawCellRowTreeMarker(\n context: CanvasRenderingContext2D,\n state: GridRenderState,\n row: VisibleIndex\n ): void {\n const { metrics, model, mouseX, mouseY, theme } = state;\n const {\n firstColumn,\n gridX,\n gridY,\n allColumnXs,\n allColumnWidths,\n allRowYs,\n allRowHeights,\n visibleRowTreeBoxes,\n } = metrics;\n const { treeMarkerColor, treeMarkerHoverColor } = theme;\n const columnX = getOrThrow(allColumnXs, firstColumn);\n const columnWidth = getOrThrow(allColumnWidths, firstColumn);\n const rowY = getOrThrow(allRowYs, row);\n const rowHeight = getOrThrow(allRowHeights, row);\n if (!isExpandableGridModel(model) || !model.isRowExpandable(row)) {\n return;\n }\n\n const treeBox = getOrThrow(visibleRowTreeBoxes, row);\n const color =\n mouseX != null &&\n mouseY != null &&\n mouseX >= gridX + columnX &&\n mouseX <= gridX + columnX + columnWidth &&\n mouseY >= gridY + rowY &&\n mouseY <= gridY + rowY + rowHeight\n ? treeMarkerHoverColor\n : treeMarkerColor;\n\n this.drawTreeMarker(\n context,\n state,\n columnX,\n rowY,\n treeBox,\n color,\n model.isRowExpanded(row)\n );\n }\n\n drawTreeMarker(\n context: CanvasRenderingContext2D,\n state: GridRenderState,\n columnX: Coordinate,\n rowY: Coordinate,\n treeBox: BoxCoordinates,\n color: GridColor,\n isExpanded: boolean\n ): void {\n const { x1, y1, x2, y2 } = treeBox;\n const markerText = isExpanded ? '⊟' : '⊞';\n const textX = columnX + (x1 + x2) * 0.5 + 0.5;\n const textY = rowY + (y1 + y2) * 0.5 + 0.5;\n context.fillStyle = color;\n context.textAlign = 'center';\n context.fillText(markerText, textX, textY);\n }\n\n getCachedTruncatedString = memoizeClear(\n (\n context: CanvasRenderingContext2D,\n text: string,\n width: number,\n fontWidthLower?: number,\n fontWidthUpper?: number,\n truncationChar?: string\n ): string =>\n GridRenderer.truncateToWidth(\n context,\n text,\n width,\n fontWidthLower,\n fontWidthUpper,\n truncationChar\n ),\n { max: 10000 }\n );\n}\n\nexport default CellRenderer;\n"],"mappings":";;;AAAA;AACA,SAASA,UAAU,QAAQ,kBAAkB;AAAC,SACrCC,qBAAqB;AAAA,OAMvBC,YAAY;AAAA,OAGZC,YAAY;AAInB,MAAeC,YAAY,CAAC;EAAAC,YAAA;IAAAC,eAAA,mCAyECH,YAAY,CACrC,CACEI,OAAiC,EACjCC,IAAY,EACZC,KAAa,EACbC,cAAuB,EACvBC,cAAuB,EACvBC,cAAuB,KAEvBV,YAAY,CAACW,eAAe,CAC1BN,OAAO,EACPC,IAAI,EACJC,KAAK,EACLC,cAAc,EACdC,cAAc,EACdC,cACF,CAAC,EACH;MAAEE,GAAG,EAAE;IAAM,CACf,CAAC;EAAA;EAnFDC,qBAAqBA,CACnBR,OAAiC,EACjCS,KAAsB,EACtBC,GAAiB,EACX;IACN,IAAM;MAAEC,OAAO;MAAEC,KAAK;MAAEC,MAAM;MAAEC,MAAM;MAAEC;IAAM,CAAC,GAAGN,KAAK;IACvD,IAAM;MACJO,WAAW;MACXC,KAAK;MACLC,KAAK;MACLC,WAAW;MACXC,eAAe;MACfC,QAAQ;MACRC,aAAa;MACbC;IACF,CAAC,GAAGZ,OAAO;IACX,IAAM;MAAEa,eAAe;MAAEC;IAAqB,CAAC,GAAGV,KAAK;IACvD,IAAMW,OAAO,GAAGjC,UAAU,CAAC0B,WAAW,EAAEH,WAAW,CAAC;IACpD,IAAMW,WAAW,GAAGlC,UAAU,CAAC2B,eAAe,EAAEJ,WAAW,CAAC;IAC5D,IAAMY,IAAI,GAAGnC,UAAU,CAAC4B,QAAQ,EAAEX,GAAG,CAAC;IACtC,IAAMmB,SAAS,GAAGpC,UAAU,CAAC6B,aAAa,EAAEZ,GAAG,CAAC;IAChD,IAAI,CAAChB,qBAAqB,CAACkB,KAAK,CAAC,IAAI,CAACA,KAAK,CAACkB,eAAe,CAACpB,GAAG,CAAC,EAAE;MAChE;IACF;IAEA,IAAMqB,OAAO,GAAGtC,UAAU,CAAC8B,mBAAmB,EAAEb,GAAG,CAAC;IACpD,IAAMsB,KAAK,GACTnB,MAAM,IAAI,IAAI,IACdC,MAAM,IAAI,IAAI,IACdD,MAAM,IAAII,KAAK,GAAGS,OAAO,IACzBb,MAAM,IAAII,KAAK,GAAGS,OAAO,GAAGC,WAAW,IACvCb,MAAM,IAAII,KAAK,GAAGU,IAAI,IACtBd,MAAM,IAAII,KAAK,GAAGU,IAAI,GAAGC,SAAS,GAC9BJ,oBAAoB,GACpBD,eAAe;IAErB,IAAI,CAACS,cAAc,CACjBjC,OAAO,EACPS,KAAK,EACLiB,OAAO,EACPE,IAAI,EACJG,OAAO,EACPC,KAAK,EACLpB,KAAK,CAACsB,aAAa,CAACxB,GAAG,CACzB,CAAC;EACH;EAEAuB,cAAcA,CACZjC,OAAiC,EACjCS,KAAsB,EACtBiB,OAAmB,EACnBE,IAAgB,EAChBG,OAAuB,EACvBC,KAAgB,EAChBG,UAAmB,EACb;IACN,IAAM;MAAEC,EAAE;MAAEC,EAAE;MAAEC,EAAE;MAAEC;IAAG,CAAC,GAAGR,OAAO;IAClC,IAAMS,UAAU,GAAGL,UAAU,GAAG,GAAG,GAAG,GAAG;IACzC,IAAMM,KAAK,GAAGf,OAAO,GAAG,CAACU,EAAE,GAAGE,EAAE,IAAI,GAAG,GAAG,GAAG;IAC7C,IAAMI,KAAK,GAAGd,IAAI,GAAG,CAACS,EAAE,GAAGE,EAAE,IAAI,GAAG,GAAG,GAAG;IAC1CvC,OAAO,CAAC2C,SAAS,GAAGX,KAAK;IACzBhC,OAAO,CAAC4C,SAAS,GAAG,QAAQ;IAC5B5C,OAAO,CAAC6C,QAAQ,CAACL,UAAU,EAAEC,KAAK,EAAEC,KAAK,CAAC;EAC5C;AAqBF;AAEA,eAAe7C,YAAY","ignoreList":[]}
1
+ {"version":3,"file":"CellRenderer.js","names":["getOrThrow","isExpandableGridModel","GridRenderer","memoizeClear","CellRenderer","constructor","_defineProperty","context","text","width","fontWidthLower","fontWidthUpper","truncationChar","truncateToWidth","max","drawCellRowTreeMarker","state","row","metrics","model","mouseX","mouseY","theme","firstColumn","gridX","gridY","allColumnXs","allColumnWidths","allRowYs","allRowHeights","visibleRowTreeBoxes","treeMarkerColor","treeMarkerHoverColor","columnX","columnWidth","rowY","rowHeight","isRowExpandable","treeBox","color","drawTreeMarker","isRowExpanded","isExpanded","x1","y1","x2","y2","markerText","textX","textY","fillStyle","textAlign","fillText"],"sources":["../src/CellRenderer.ts"],"sourcesContent":["/* eslint-disable class-methods-use-this */\nimport { getOrThrow } from '@deephaven/utils';\nimport { isExpandableGridModel } from './ExpandableGridModel';\nimport {\n type VisibleIndex,\n type Coordinate,\n type BoxCoordinates,\n} from './GridMetrics';\nimport GridRenderer from './GridRenderer';\nimport { type GridRenderState } from './GridRendererTypes';\nimport { type GridColor } from './GridTheme';\nimport memoizeClear from './memoizeClear';\n\nexport type CellRenderType = 'text' | 'dataBar';\n\nabstract class CellRenderer {\n abstract drawCellContent(\n context: CanvasRenderingContext2D,\n state: GridRenderState,\n column: VisibleIndex,\n row: VisibleIndex\n ): void;\n\n drawCellRowTreeMarker(\n context: CanvasRenderingContext2D,\n state: GridRenderState,\n row: VisibleIndex\n ): void {\n const { metrics, model, mouseX, mouseY, theme } = state;\n const {\n firstColumn,\n gridX,\n gridY,\n allColumnXs,\n allColumnWidths,\n allRowYs,\n allRowHeights,\n visibleRowTreeBoxes,\n } = metrics;\n const { treeMarkerColor, treeMarkerHoverColor } = theme;\n const columnX = getOrThrow(allColumnXs, firstColumn);\n const columnWidth = getOrThrow(allColumnWidths, firstColumn);\n const rowY = getOrThrow(allRowYs, row);\n const rowHeight = getOrThrow(allRowHeights, row);\n if (!isExpandableGridModel(model) || !model.isRowExpandable(row)) {\n return;\n }\n\n const treeBox = getOrThrow(visibleRowTreeBoxes, row);\n const color =\n mouseX != null &&\n mouseY != null &&\n mouseX >= gridX + columnX &&\n mouseX <= gridX + columnX + columnWidth &&\n mouseY >= gridY + rowY &&\n mouseY <= gridY + rowY + rowHeight\n ? treeMarkerHoverColor\n : treeMarkerColor;\n\n this.drawTreeMarker(\n context,\n state,\n columnX,\n rowY,\n treeBox,\n color,\n model.isRowExpanded(row)\n );\n }\n\n drawTreeMarker(\n context: CanvasRenderingContext2D,\n state: GridRenderState,\n columnX: Coordinate,\n rowY: Coordinate,\n treeBox: BoxCoordinates,\n color: GridColor,\n isExpanded: boolean\n ): void {\n const { x1, y1, x2, y2 } = treeBox;\n const markerText = isExpanded ? '⊟' : '⊞';\n const textX = columnX + (x1 + x2) * 0.5 + 0.5;\n const textY = rowY + (y1 + y2) * 0.5 + 0.5;\n context.fillStyle = color;\n context.textAlign = 'center';\n context.fillText(markerText, textX, textY);\n }\n\n getCachedTruncatedString = memoizeClear(\n (\n context: CanvasRenderingContext2D,\n text: string,\n width: number,\n fontWidthLower?: number,\n fontWidthUpper?: number,\n truncationChar?: string\n ): string =>\n GridRenderer.truncateToWidth(\n context,\n text,\n width,\n fontWidthLower,\n fontWidthUpper,\n truncationChar\n ),\n { max: 10000 }\n );\n}\n\nexport default CellRenderer;\n"],"mappings":"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","ignoreList":[]}
@@ -32,23 +32,19 @@ class DataBarCellRenderer extends CellRenderer {
32
32
  }));
33
33
  }
34
34
  drawCellContent(context, state, column, row) {
35
- var {
36
- metrics,
37
- model,
38
- theme
39
- } = state;
35
+ var metrics = state.metrics,
36
+ model = state.model,
37
+ theme = state.theme;
40
38
  if (!isDataBarGridModel(model)) {
41
39
  return;
42
40
  }
43
- var {
44
- modelColumns,
45
- modelRows,
46
- allRowHeights,
47
- allRowYs,
48
- firstColumn,
49
- fontWidthsLower,
50
- fontWidthsUpper
51
- } = metrics;
41
+ var modelColumns = metrics.modelColumns,
42
+ modelRows = metrics.modelRows,
43
+ allRowHeights = metrics.allRowHeights,
44
+ allRowYs = metrics.allRowYs,
45
+ firstColumn = metrics.firstColumn,
46
+ fontWidthsLower = metrics.fontWidthsLower,
47
+ fontWidthsUpper = metrics.fontWidthsUpper;
52
48
  var isFirstColumn = column === firstColumn;
53
49
  var rowHeight = getOrThrow(allRowHeights, row);
54
50
  var modelRow = getOrThrow(modelRows, row);
@@ -56,41 +52,38 @@ class DataBarCellRenderer extends CellRenderer {
56
52
  var rowY = getOrThrow(allRowYs, row);
57
53
  var textAlign = model.textAlignForCell(modelColumn, modelRow);
58
54
  var text = model.textForCell(modelColumn, modelRow);
59
- var {
60
- x: textX,
61
- y: textY,
62
- width: textWidth
63
- } = GridUtils.getTextRenderMetrics(state, column, row);
55
+ var _GridUtils$getTextRen = GridUtils.getTextRenderMetrics(state, column, row),
56
+ textX = _GridUtils$getTextRen.x,
57
+ textY = _GridUtils$getTextRen.y,
58
+ textWidth = _GridUtils$getTextRen.width;
64
59
  var fontWidthLower = fontWidthsLower.get(context.font);
65
60
  var fontWidthUpper = fontWidthsUpper.get(context.font);
66
61
  var truncationChar = model.truncationCharForCell(modelColumn, modelRow);
67
62
  var truncatedText = this.getCachedTruncatedString(context, text, textWidth, fontWidthLower, fontWidthUpper, truncationChar);
68
- var {
69
- columnMin,
70
- columnMax,
71
- axis,
72
- color: dataBarColor,
73
- textColor,
74
- valuePlacement,
75
- opacity,
76
- markers,
77
- direction,
78
- value
79
- } = model.dataBarOptionsForCell(modelColumn, modelRow, theme);
63
+ var _model$dataBarOptions = model.dataBarOptionsForCell(modelColumn, modelRow, theme),
64
+ columnMin = _model$dataBarOptions.columnMin,
65
+ columnMax = _model$dataBarOptions.columnMax,
66
+ axis = _model$dataBarOptions.axis,
67
+ dataBarColor = _model$dataBarOptions.color,
68
+ textColor = _model$dataBarOptions.textColor,
69
+ valuePlacement = _model$dataBarOptions.valuePlacement,
70
+ opacity = _model$dataBarOptions.opacity,
71
+ markers = _model$dataBarOptions.markers,
72
+ direction = _model$dataBarOptions.direction,
73
+ value = _model$dataBarOptions.value;
80
74
  var hasGradient = Array.isArray(dataBarColor) && dataBarColor.length > 1;
81
75
  if (columnMin == null || columnMax == null) {
82
76
  return;
83
77
  }
84
- var {
85
- maxWidth,
86
- x: dataBarX,
87
- y: dataBarY,
88
- zeroPosition,
89
- leftmostPosition,
90
- markerXs,
91
- totalValueRange,
92
- dataBarWidth
93
- } = this.getDataBarRenderMetrics(context, state, column, row);
78
+ var _this$getDataBarRende = this.getDataBarRenderMetrics(context, state, column, row),
79
+ maxWidth = _this$getDataBarRende.maxWidth,
80
+ dataBarX = _this$getDataBarRende.x,
81
+ dataBarY = _this$getDataBarRende.y,
82
+ zeroPosition = _this$getDataBarRende.zeroPosition,
83
+ leftmostPosition = _this$getDataBarRende.leftmostPosition,
84
+ markerXs = _this$getDataBarRende.markerXs,
85
+ totalValueRange = _this$getDataBarRende.totalValueRange,
86
+ dataBarWidth = _this$getDataBarRende.dataBarWidth;
94
87
  context.save();
95
88
  context.textAlign = textAlign;
96
89
  context.fillStyle = textColor;
@@ -187,28 +180,22 @@ class DataBarCellRenderer extends CellRenderer {
187
180
  }
188
181
  }
189
182
  getDataBarRenderMetrics(context, state, column, row) {
190
- var {
191
- metrics,
192
- model,
193
- theme
194
- } = state;
183
+ var metrics = state.metrics,
184
+ model = state.model,
185
+ theme = state.theme;
195
186
  if (!isDataBarGridModel(model)) {
196
187
  throw new Error('Grid model is not a data bar grid model');
197
188
  }
198
- var {
199
- firstColumn,
200
- allColumnXs,
201
- allColumnWidths,
202
- allRowYs,
203
- modelColumns,
204
- modelRows,
205
- visibleRows
206
- } = metrics;
207
- var {
208
- cellHorizontalPadding,
209
- treeDepthIndent,
210
- treeHorizontalPadding
211
- } = theme;
189
+ var firstColumn = metrics.firstColumn,
190
+ allColumnXs = metrics.allColumnXs,
191
+ allColumnWidths = metrics.allColumnWidths,
192
+ allRowYs = metrics.allRowYs,
193
+ modelColumns = metrics.modelColumns,
194
+ modelRows = metrics.modelRows,
195
+ visibleRows = metrics.visibleRows;
196
+ var cellHorizontalPadding = theme.cellHorizontalPadding,
197
+ treeDepthIndent = theme.treeDepthIndent,
198
+ treeHorizontalPadding = theme.treeHorizontalPadding;
212
199
  var modelColumn = getOrThrow(modelColumns, column);
213
200
  var modelRow = getOrThrow(modelRows, row);
214
201
  var x = getOrThrow(allColumnXs, column);
@@ -220,15 +207,14 @@ class DataBarCellRenderer extends CellRenderer {
220
207
  treeIndent = treeDepthIndent * (model.depthForRow(row) + 1) + treeHorizontalPadding;
221
208
  }
222
209
  var textAlign = model.textAlignForCell(modelColumn, modelRow);
223
- var {
224
- columnMin,
225
- columnMax,
226
- axis,
227
- valuePlacement,
228
- markers,
229
- direction,
230
- value
231
- } = model.dataBarOptionsForCell(modelColumn, modelRow, theme);
210
+ var _model$dataBarOptions2 = model.dataBarOptionsForCell(modelColumn, modelRow, theme),
211
+ columnMin = _model$dataBarOptions2.columnMin,
212
+ columnMax = _model$dataBarOptions2.columnMax,
213
+ axis = _model$dataBarOptions2.axis,
214
+ valuePlacement = _model$dataBarOptions2.valuePlacement,
215
+ markers = _model$dataBarOptions2.markers,
216
+ direction = _model$dataBarOptions2.direction,
217
+ value = _model$dataBarOptions2.value;
232
218
  var longestValueWidth = this.getCachedWidestValueForColumn(context, visibleRows, modelRows, model, modelColumn);
233
219
  var leftPadding = 2;
234
220
  var rightPadding = valuePlacement === 'beside' && textAlign === 'right' ? 2 : 1;
@@ -267,9 +253,7 @@ class DataBarCellRenderer extends CellRenderer {
267
253
  var zeroPosition = columnMin >= 0 ? 0 : Math.abs(columnMin) / totalValueRange * maxWidth;
268
254
  var dataBarX = value >= 0 ? zeroPosition : zeroPosition - Math.abs(value) / totalValueRange * maxWidth;
269
255
  var markerXs = markers.map(marker => {
270
- var {
271
- value: markerValue
272
- } = marker;
256
+ var markerValue = marker.value;
273
257
  var offset = Math.abs(markerValue) / totalValueRange * maxWidth;
274
258
  return markerValue >= 0 ? zeroPosition + offset : zeroPosition - offset;
275
259
  });
@@ -281,9 +265,7 @@ class DataBarCellRenderer extends CellRenderer {
281
265
  zeroPosition = columnMin >= 0 ? columnWidth : columnWidth - Math.abs(columnMin) / totalValueRange * maxWidth;
282
266
  dataBarX = value >= 0 ? zeroPosition - value / totalValueRange * maxWidth : zeroPosition;
283
267
  markerXs = markers.map(marker => {
284
- var {
285
- value: markerValue
286
- } = marker;
268
+ var markerValue = marker.value;
287
269
  return markerValue >= 0 ? zeroPosition - Math.abs(markerValue) / totalValueRange * maxWidth : zeroPosition + Math.abs(markerValue) / totalValueRange * maxWidth;
288
270
  });
289
271
  }
@@ -293,18 +275,14 @@ class DataBarCellRenderer extends CellRenderer {
293
275
  // Middle, LTR
294
276
  dataBarX = value >= 0 ? zeroPosition : zeroPosition - Math.abs(value) / columnLongest * (maxWidth / 2);
295
277
  markerXs = markers.map(marker => {
296
- var {
297
- value: markerValue
298
- } = marker;
278
+ var markerValue = marker.value;
299
279
  return markerValue >= 0 ? zeroPosition + Math.abs(markerValue) / columnLongest * (maxWidth / 2) : zeroPosition - Math.abs(markerValue) / columnLongest * (maxWidth / 2);
300
280
  });
301
281
  } else if (direction === 'RTL') {
302
282
  // Middle, RTL
303
283
  dataBarX = value <= 0 ? zeroPosition : zeroPosition - Math.abs(value) / columnLongest * (maxWidth / 2);
304
284
  markerXs = markers.map(marker => {
305
- var {
306
- value: markerValue
307
- } = marker;
285
+ var markerValue = marker.value;
308
286
  return markerValue <= 0 ? zeroPosition + Math.abs(markerValue) / columnLongest * (maxWidth / 2) : zeroPosition - Math.abs(markerValue) / columnLongest * (maxWidth / 2);
309
287
  });
310
288
  }
@@ -314,9 +292,7 @@ class DataBarCellRenderer extends CellRenderer {
314
292
  zeroPosition = 0;
315
293
  dataBarX = zeroPosition;
316
294
  markerXs = markers.map(marker => {
317
- var {
318
- value: markerValue
319
- } = marker;
295
+ var markerValue = marker.value;
320
296
  return zeroPosition + Math.abs(markerValue) / columnLongest * maxWidth;
321
297
  });
322
298
  } else if (direction === 'RTL') {
@@ -324,9 +300,7 @@ class DataBarCellRenderer extends CellRenderer {
324
300
  zeroPosition = columnWidth;
325
301
  dataBarX = zeroPosition - Math.abs(value) / columnLongest * maxWidth;
326
302
  markerXs = markers.map(marker => {
327
- var {
328
- value: markerValue
329
- } = marker;
303
+ var markerValue = marker.value;
330
304
  return zeroPosition - Math.abs(markerValue) / columnLongest * maxWidth;
331
305
  });
332
306
  }