@deephaven/components 0.8.2-beta.1 → 0.9.1-beta.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 (42) hide show
  1. package/dist/AutoCompleteInput.js +8 -0
  2. package/dist/AutoCompleteInput.js.map +1 -1
  3. package/dist/ComboBox.js +12 -0
  4. package/dist/ComboBox.js.map +1 -1
  5. package/dist/CustomTimeSelect.js +9 -0
  6. package/dist/CustomTimeSelect.js.map +1 -1
  7. package/dist/DebouncedSearchInput.js +3 -0
  8. package/dist/DebouncedSearchInput.js.map +1 -1
  9. package/dist/DraggableItemList.js +2 -0
  10. package/dist/DraggableItemList.js.map +1 -1
  11. package/dist/ItemList.js +4 -0
  12. package/dist/ItemList.js.map +1 -1
  13. package/dist/ItemListItem.js +3 -0
  14. package/dist/ItemListItem.js.map +1 -1
  15. package/dist/SearchInput.js +3 -0
  16. package/dist/SearchInput.js.map +1 -1
  17. package/dist/SelectValueList.js +6 -0
  18. package/dist/SelectValueList.js.map +1 -1
  19. package/dist/context-actions/ContextActions.js +3 -0
  20. package/dist/context-actions/ContextActions.js.map +1 -1
  21. package/dist/context-actions/ContextMenu.js +13 -0
  22. package/dist/context-actions/ContextMenu.js.map +1 -1
  23. package/dist/context-actions/ContextMenuRoot.js +7 -0
  24. package/dist/context-actions/ContextMenuRoot.js.map +1 -1
  25. package/dist/menu-actions/DropdownMenu.js +9 -0
  26. package/dist/menu-actions/DropdownMenu.js.map +1 -1
  27. package/dist/menu-actions/Menu.js +7 -0
  28. package/dist/menu-actions/Menu.js.map +1 -1
  29. package/dist/popper/Popper.js +9 -0
  30. package/dist/popper/Popper.js.map +1 -1
  31. package/dist/popper/Tooltip.js +9 -0
  32. package/dist/popper/Tooltip.js.map +1 -1
  33. package/dist/shortcuts/Shortcut.d.ts +6 -1
  34. package/dist/shortcuts/Shortcut.d.ts.map +1 -1
  35. package/dist/shortcuts/Shortcut.js +49 -4
  36. package/dist/shortcuts/Shortcut.js.map +1 -1
  37. package/dist/shortcuts/ShortcutRegistry.d.ts +17 -9
  38. package/dist/shortcuts/ShortcutRegistry.d.ts.map +1 -1
  39. package/dist/shortcuts/ShortcutRegistry.js +48 -21
  40. package/dist/shortcuts/ShortcutRegistry.js.map +1 -1
  41. package/package.json +9 -8
  42. package/dist/tsconfig.tsbuildinfo +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/DraggableItemList.tsx"],"names":["React","PureComponent","classNames","memoize","Draggable","Droppable","FontAwesomeIcon","vsGripper","RangeUtils","ItemList","Tooltip","DraggableItemList","renderHandle","renderBadge","text","renderTextItem","badgeText","className","renderItem","item","isClone","selectedCount","displayValue","value","getDraggableId","draggablePrefix","itemIndex","getDraggableIndex","draggableId","parseInt","split","pop","constructor","props","isFocused","isSelected","isDragDisabled","style","provided","innerRef","draggableProps","dragHandleProps","max","CACHE_SIZE","getCachedDraggableItem","draggingItemClassName","items","offset","snapshot","rubric","state","index","source","handleSelectionChange","bind","itemList","createRef","selectItem","current","focusItem","scrollToItem","selectedRanges","setState","count","onSelectionChange","render","droppableId","isDoubleClickSelect","isDropDisabled","isMultiSelect","isStickyBottom","itemCount","onFocusChange","onSelect","onViewportChange","rowHeight","getCachedRenderClone","draggingFromThisWith","isDraggingOver","draggingOverWith","droppableProps","getCachedRenderDraggableItem","DEFAULT_ROW_HEIGHT","isDeselectOnClick","disableSelect"],"mappings":";;;;AAAA,OAAOA,KAAP,IAAgBC,aAAhB,QAAqC,OAArC;AACA,OAAOC,UAAP,MAAuB,YAAvB;AACA,OAAOC,OAAP,MAAoB,UAApB;AACA,SAASC,SAAT,EAAoBC,SAApB,QAA0D,qBAA1D;AACA,SAASC,eAAT,QAAgC,gCAAhC;AACA,SAASC,SAAT,QAA0B,kBAA1B;AACA,SAASC,UAAT,QAAkC,kBAAlC;OACOC,Q;SAKEC,O;;;AAmCT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,iBAAN,SAAmCV,aAAnC,CAGE;AAmCmB,SAAZW,YAAY,GAAgB;AACjC,wBACE,8CACE,oBAAC,OAAD,2BADF,eAEE,oBAAC,eAAD;AAAiB,MAAA,IAAI,EAAEL;AAAvB,MAFF,CADF;AAMD;;AAEiB,SAAXM,WAAW,OAA+C;AAAA,QAA9C;AAAEC,MAAAA;AAAF,KAA8C;AAC/D,WAAOA,IAAI,gBAAG;AAAM,MAAA,SAAS,EAAC;AAAhB,OAAgCA,IAAhC,CAAH,GAAkD,IAA7D;AACD;;AAEoB,SAAdC,cAAc,QAQL;AAAA,QARM;AACpBD,MAAAA,IADoB;AAEpBE,MAAAA,SAAS,GAAG,EAFQ;AAGpBC,MAAAA,SAAS,GAAG;AAHQ,KAQN;AACd,wBACE;AACE,MAAA,SAAS,EAAEf,UAAU,CACnB,wBADmB,EAEnB,kCAFmB,EAGnBe,SAHmB;AADvB,oBAOE;AAAM,MAAA,SAAS,EAAC;AAAhB,OAAyBH,IAAzB,CAPF,EAQGH,iBAAiB,CAACE,WAAlB,CAA8B;AAAEC,MAAAA,IAAI,EAAEE;AAAR,KAA9B,CARH,EASGL,iBAAiB,CAACC,YAAlB,EATH,CADF;AAaD;;AAEgB,SAAVM,UAAU,QAI4B;AAAA,QAJA;AAC3CC,MAAAA,IAD2C;AAE3CC,MAAAA,OAF2C;AAG3CC,MAAAA;AAH2C,KAIA;AAC3C,QAAMP,IAAI,GAAGK,IAAI,KAAKA,IAAI,CAACG,YAAL,IAAqBH,IAAI,CAACI,KAA1B,cAAsCJ,IAAtC,CAAL,CAAjB;AACA,QAAMH,SAAS,GAAGI,OAAO,aAAMC,aAAN,IAAwB,EAAjD;AACA,QAAMJ,SAAS,GAAGG,OAAO,GAAG,sBAAH,GAA4B,EAArD;AACA,WAAOT,iBAAiB,CAACI,cAAlB,CAAiC;AAAED,MAAAA,IAAF;AAAQE,MAAAA,SAAR;AAAmBC,MAAAA;AAAnB,KAAjC,CAAP;AACD;;AAEoB,SAAdO,cAAc,CAACC,eAAD,EAA0BC,SAA1B,EAAqD;AACxE,qBAAUD,eAAV,cAA6BC,SAA7B;AACD;;AAEuB,SAAjBC,iBAAiB,CAACC,WAAD,EAA8B;AACpD,WAAOC,QAAQ,CAACD,WAAW,CAACE,KAAZ,CAAkB,GAAlB,EAAuBC,GAAvB,MAAgC,EAAjC,EAAqC,EAArC,CAAf;AACD;;AAEDC,EAAAA,WAAW,CAACC,KAAD,EAAmC;AAC5C,UAAMA,KAAN;;AAD4C,oDA0BrB9B,OAAO,CAC9B,CACEsB,eADF,EAEEP,UAFF,EAGEC,IAHF,EAIEO,SAJF,EAKEQ,SALF,EAMEC,UANF,EAOEC,cAPF,EAQEC,KARF,kBAUE,oBAAC,SAAD;AACE,MAAA,GAAG,EAAEX,SADP;AAEE,MAAA,WAAW,EAAEf,iBAAiB,CAACa,cAAlB,CACXC,eADW,EAEXC,SAFW,CAFf;AAME,MAAA,KAAK,EAAEA,SANT;AAOE,MAAA,cAAc,EAAEU;AAPlB,OASGE,QAAQ,iBACP;AACE,MAAA,IAAI,EAAC,UADP;AAEE,MAAA,SAAS,EAAC,0BAFZ;AAGE,MAAA,GAAG,EAAEA,QAAQ,CAACC,QAHhB;AAIE,MAAA,QAAQ,EAAE,CAAC,CAJb,CAKE;;AALF,OAMMD,QAAQ,CAACE,cANf,EAQMF,QAAQ,CAACG,eARf,GAUGvB,UAAU,CAAC;AACVC,MAAAA,IADU;AAEVO,MAAAA,SAFU;AAGVQ,MAAAA,SAHU;AAIVC,MAAAA,UAJU;AAKVE,MAAAA,KALU;AAMVjB,MAAAA,OAAO,EAAE;AANC,KAAD,CAVb,CAVJ,CAX4B,EA2C9B;AAAEsB,MAAAA,GAAG,EAAEjC,QAAQ,CAACkC;AAAhB,KA3C8B,CA1Bc;;AAAA,0DA+EfxC,OAAO,CACpC,CACEsB,eADF,EAEEW,cAFF,EAGElB,UAHF,KAIK;AAAA,UAAC;AACJC,QAAAA,IADI;AAEJO,QAAAA,SAFI;AAGJQ,QAAAA,SAHI;AAIJC,QAAAA,UAJI;AAKJE,QAAAA;AALI,OAAD;AAAA,aAOH,KAAKO,sBAAL,CACEnB,eADF,EAEEP,UAFF,EAGEC,IAHF,EAIEO,SAJF,EAKEQ,SALF,EAMEC,UANF,EAOEC,cAPF,EAQEC,KARF,CAPG;AAAA,KAL+B,EAsBpC;AAAEK,MAAAA,GAAG,EAAE;AAAP,KAtBoC,CA/EQ;;AAAA,kDAwGvBvC,OAAO,CAC5B,CACE0C,qBADF,EAEEC,KAFF,EAGEC,MAHF,EAIE7B,UAJF,KAK0B,CAACoB,QAAD,EAAWU,QAAX,EAAqBC,MAArB,KAAgC;AACxD,UAAM;AAAE5B,QAAAA;AAAF,UAAoB,KAAK6B,KAA/B;AACA,UAAM;AAAEC,QAAAA,KAAK,EAAEzB;AAAT,UAAuBuB,MAAM,CAACG,MAApC;AACA,UAAMjC,IAAI,GAAG2B,KAAK,CAACpB,SAAS,GAAGqB,MAAb,CAAlB;AACA,0BACE;AACE,QAAA,SAAS,EAAE7C,UAAU,CACnB,6CADmB,EAEnB2C,qBAFmB,CADvB,CAKE;;AALF,SAMMP,QAAQ,CAACE,cANf,EAQMF,QAAQ,CAACG,eARf;AASE,QAAA,GAAG,EAAEH,QAAQ,CAACC;AAThB,uBAWE;AACE,QAAA,SAAS,EAAErC,UAAU,CACnB,mCADmB,EAEnB;AAAE,yBAAemB,aAAa,KAAK;AAAnC,SAFmB,EAGnB;AAAE,8BAAoBA,aAAa,GAAG;AAAtC,SAHmB;AADvB,SAOGH,UAAU,CAAC;AACVC,QAAAA,IADU;AAEVO,QAAAA,SAFU;AAGVQ,QAAAA,SAAS,EAAE,KAHD;AAIVC,QAAAA,UAAU,EAAE,IAJF;AAKVE,QAAAA,KAAK,EAAE,EALG;AAMVjB,QAAAA,OAAO,EAAE,IANC;AAOVC,QAAAA;AAPU,OAAD,CAPb,CAXF,CADF;AA+BD,KAzC2B,EA0C5B;AAAEqB,MAAAA,GAAG,EAAE;AAAP,KA1C4B,CAxGgB;;AAG5C,SAAKW,qBAAL,GAA6B,KAAKA,qBAAL,CAA2BC,IAA3B,CAAgC,IAAhC,CAA7B;AAEA,SAAKC,QAAL,gBAAgBvD,KAAK,CAACwD,SAAN,EAAhB;AAEA,SAAKN,KAAL,GAAa;AACX7B,MAAAA,aAAa,EAAE;AADJ,KAAb;AAGD;;AAIDoC,EAAAA,UAAU,CAAC/B,SAAD,EAA0B;AAAA;;AAClC,kCAAK6B,QAAL,CAAcG,OAAd,gFAAuBD,UAAvB,CAAkC/B,SAAlC;AACD;;AAEDiC,EAAAA,SAAS,CAACjC,SAAD,EAA0B;AAAA;;AACjC,mCAAK6B,QAAL,CAAcG,OAAd,kFAAuBC,SAAvB,CAAiCjC,SAAjC;AACD;;AAEDkC,EAAAA,YAAY,CAAClC,SAAD,EAA0B;AAAA;;AACpC,mCAAK6B,QAAL,CAAcG,OAAd,kFAAuBE,YAAvB,CAAoClC,SAApC;AACD;;AAgDD2B,EAAAA,qBAAqB,CAACQ,cAAD,EAAgC;AACnD,SAAKC,QAAL,CAAc;AAAEzC,MAAAA,aAAa,EAAEb,UAAU,CAACuD,KAAX,CAAiBF,cAAjB;AAAjB,KAAd;AAEA,QAAM;AAAEG,MAAAA;AAAF,QAAwB,KAAK/B,KAAnC;AACA+B,IAAAA,iBAAiB,CAACH,cAAD,CAAjB;AACD;;AAwEDI,EAAAA,MAAM,GAAgB;AACpB,QAAM;AACJhD,MAAAA,SADI;AAEJQ,MAAAA,eAFI;AAGJoB,MAAAA,qBAHI;AAIJqB,MAAAA,WAJI;AAKJC,MAAAA,mBALI;AAMJ/B,MAAAA,cANI;AAOJgC,MAAAA,cAPI;AAQJC,MAAAA,aARI;AASJC,MAAAA,cATI;AAUJC,MAAAA,SAVI;AAWJzB,MAAAA,KAXI;AAYJC,MAAAA,MAZI;AAaJyB,MAAAA,aAbI;AAcJC,MAAAA,QAdI;AAeJC,MAAAA,gBAfI;AAgBJxD,MAAAA,UAhBI;AAiBJyD,MAAAA,SAjBI;AAkBJd,MAAAA,cAlBI;AAmBJxB,MAAAA;AAnBI,QAoBF,KAAKJ,KApBT;AAqBA,wBACE,oBAAC,SAAD;AACE,MAAA,cAAc,EAAEmC,cADlB;AAEE,MAAA,WAAW,EAAEF,WAFf;AAGE,MAAA,IAAI,EAAC,SAHP;AAIE,MAAA,WAAW,EAAE,KAAKU,oBAAL,CACX/B,qBADW,EAEXC,KAFW,EAGXC,MAHW,EAIX7B,UAJW;AAJf,OAWG,CAACoB,QAAD,EAAWU,QAAX,kBACC;AACE,MAAA,IAAI,EAAC,MADP;AAEE,MAAA,SAAS,EAAE9C,UAAU,CAAC,qBAAD,EAAwBe,SAAxB,EAAmC;AACtD,4BAAoBmD,cADkC;AAEtD,4BAAoBhC,cAFkC;AAGtD,iCAAyBY,QAAQ,CAAC6B,oBAHoB;AAItD,4BAAoB7B,QAAQ,CAAC8B,cAJyB;AAKtD,uBAAe9B,QAAQ,CAAC+B;AAL8B,OAAnC,CAFvB;AASE,MAAA,KAAK,EAAE1C,KATT;AAUE,MAAA,GAAG,EAAEC,QAAQ,CAACC,QAVhB,CAWE;;AAXF,OAYMD,QAAQ,CAAC0C,cAZf,gBAcE,oBAAC,QAAD;AACE,MAAA,aAAa,EAAC,2BADhB;AAEE,MAAA,mBAAmB,EAAEb,mBAFvB;AAGE,MAAA,YAAY,EAAE,KAHhB;AAIE,MAAA,aAAa,EAAEE,aAJjB;AAKE,MAAA,cAAc,EAAEC,cALlB;AAME,MAAA,SAAS,EAAEC,SANb;AAOE,MAAA,KAAK,EAAEzB,KAPT;AAQE,MAAA,aAAa,EAAE0B,aARjB;AASE,MAAA,QAAQ,EAAEC,QATZ;AAUE,MAAA,iBAAiB,EAAE,KAAKpB,qBAV1B;AAWE,MAAA,gBAAgB,EAAEqB,gBAXpB;AAYE,MAAA,MAAM,EAAE3B,MAZV;AAaE,MAAA,GAAG,EAAE,KAAKQ,QAbZ;AAcE,MAAA,UAAU,EAAE,KAAK0B,4BAAL,CACVxD,eADU,EAEVW,cAFU,EAGVlB,UAHU,CAdd;AAmBE,MAAA,SAAS,EAAEyD,SAnBb;AAoBE,MAAA,cAAc,EAAEd;AApBlB,MAdF,CAZJ,CADF;AAqDD;;AA3TD;;gBAHIlD,iB,wBAIwB,E;;gBAJxBA,iB,kBAMkB;AACpBM,EAAAA,SAAS,EAAE,EADS;AAEpB4B,EAAAA,qBAAqB,EAAE,EAFH;AAGpBE,EAAAA,MAAM,EAAE,CAHY;AAIpBD,EAAAA,KAAK,EAAE,EAJa;AAKpB6B,EAAAA,SAAS,EAAEhE,iBAAiB,CAACuE,kBALT;AAMpBC,EAAAA,iBAAiB,EAAE,IANC;AAOpBhB,EAAAA,mBAAmB,EAAE,IAPD;AAQpBC,EAAAA,cAAc,EAAE,KARI;AASpBhC,EAAAA,cAAc,EAAE,KATI;AAUpBiC,EAAAA,aAAa,EAAE,KAVK;AAWpBC,EAAAA,cAAc,EAAE,KAXI;AAYpBc,EAAAA,aAAa,EAAE,KAZK;AAapB/C,EAAAA,KAAK,EAAE,IAba;;AAcpBmC,EAAAA,aAAa,GAAS,CACpB;AACD,GAhBmB;;AAiBpBC,EAAAA,QAAQ,GAAS,CACf;AACD,GAnBmB;;AAoBpBT,EAAAA,iBAAiB,GAAS,CACxB;AACD,GAtBmB;;AAuBpBU,EAAAA,gBAAgB,GAAS,CACvB;AACD,GAzBmB;;AA0BpBxD,EAAAA,UAAU,EAAEP,iBAAiB,CAACO,UA1BV;AA2BpB2C,EAAAA,cAAc,EAAE,EA3BI;AA4BpBpC,EAAAA,eAAe,EAAE,gBA5BG;AA6BpByC,EAAAA,WAAW,EAAE;AA7BO,C;;AA2TxB,eAAevD,iBAAf","sourcesContent":["import React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport memoize from 'memoizee';\nimport { Draggable, Droppable, DraggableChildrenFn } from 'react-beautiful-dnd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsGripper } from '@deephaven/icons';\nimport { RangeUtils, Range } from '@deephaven/utils';\nimport ItemList, {\n RenderItemProps,\n DefaultListItem,\n ItemListProps,\n} from './ItemList';\nimport { Tooltip } from './popper';\nimport './DraggableItemList.scss';\n\nexport type DraggableRenderItemProps<T> = RenderItemProps<T> & {\n isClone?: boolean;\n selectedCount?: number;\n};\n\ntype DraggableRenderItemFn<T> = (\n props: DraggableRenderItemProps<T>\n) => React.ReactNode;\n\ntype DraggableItemListProps<T> = Omit<\n ItemListProps<T>,\n 'overscanCount' | 'focusSelector' | 'isDragSelect'\n> & {\n className: string;\n draggingItemClassName: string;\n isDropDisabled: boolean;\n // Whether to allow dragging items from this list\n isDragDisabled: boolean;\n\n renderItem: DraggableRenderItemFn<T>;\n style: React.CSSProperties;\n\n // The prefix to add to all draggable item IDs\n draggablePrefix: string;\n // The ID to give the droppable list\n droppableId: string;\n};\n\ntype DraggableItemListState = {\n selectedCount: number;\n};\n\n/**\n * Show a draggable item list. It _must_ be used within a `DragDropContext`.\n * This implementation uses react-beautiful-dnd for handling dragging and dropping of items.\n * We use ItemList to handle selection for multi drag and drop (not built in to react-beautiful-dnd).\n * One caveat with the use of react-beautiful-dnd is that it doesn't allow a drag to be initiated while\n * using a modifier key: https://github.com/atlassian/react-beautiful-dnd/issues/1678\n */\nclass DraggableItemList<T> extends PureComponent<\n DraggableItemListProps<T>,\n DraggableItemListState\n> {\n static DEFAULT_ROW_HEIGHT = 30;\n\n static defaultProps = {\n className: '',\n draggingItemClassName: '',\n offset: 0,\n items: [],\n rowHeight: DraggableItemList.DEFAULT_ROW_HEIGHT,\n isDeselectOnClick: true,\n isDoubleClickSelect: true,\n isDropDisabled: false,\n isDragDisabled: false,\n isMultiSelect: false,\n isStickyBottom: false,\n disableSelect: false,\n style: null,\n onFocusChange(): void {\n // no-op\n },\n onSelect(): void {\n // no-op\n },\n onSelectionChange(): void {\n // no-op\n },\n onViewportChange(): void {\n // no-op\n },\n renderItem: DraggableItemList.renderItem,\n selectedRanges: [],\n draggablePrefix: 'draggable-item',\n droppableId: 'droppable-item-list',\n };\n\n static renderHandle(): JSX.Element {\n return (\n <div>\n <Tooltip>Drag to re-order</Tooltip>\n <FontAwesomeIcon icon={vsGripper} />\n </div>\n );\n }\n\n static renderBadge({ text }: { text?: string }): React.ReactNode {\n return text ? <span className=\"number-badge\">{text}</span> : null;\n }\n\n static renderTextItem({\n text,\n badgeText = '',\n className = '',\n }: {\n text: string;\n badgeText: string;\n className: string;\n }): JSX.Element {\n return (\n <div\n className={classNames(\n 'item-list-item-content',\n 'draggable-item-list-item-content',\n className\n )}\n >\n <span className=\"title\">{text}</span>\n {DraggableItemList.renderBadge({ text: badgeText })}\n {DraggableItemList.renderHandle()}\n </div>\n );\n }\n\n static renderItem<P extends DefaultListItem>({\n item,\n isClone,\n selectedCount,\n }: DraggableRenderItemProps<P>): JSX.Element {\n const text = item && (item.displayValue || item.value || `${item}`);\n const badgeText = isClone ? `${selectedCount}` : '';\n const className = isClone ? 'item-list-item-clone' : '';\n return DraggableItemList.renderTextItem({ text, badgeText, className });\n }\n\n static getDraggableId(draggablePrefix: string, itemIndex: number): string {\n return `${draggablePrefix}/${itemIndex}`;\n }\n\n static getDraggableIndex(draggableId: string): number {\n return parseInt(draggableId.split('/').pop() || '', 10);\n }\n\n constructor(props: DraggableItemListProps<T>) {\n super(props);\n\n this.handleSelectionChange = this.handleSelectionChange.bind(this);\n\n this.itemList = React.createRef();\n\n this.state = {\n selectedCount: 0,\n };\n }\n\n itemList: React.RefObject<ItemList<T>>;\n\n selectItem(itemIndex: number): void {\n this.itemList.current?.selectItem(itemIndex);\n }\n\n focusItem(itemIndex: number): void {\n this.itemList.current?.focusItem(itemIndex);\n }\n\n scrollToItem(itemIndex: number): void {\n this.itemList.current?.scrollToItem(itemIndex);\n }\n\n getCachedDraggableItem = memoize(\n (\n draggablePrefix: string,\n renderItem: DraggableRenderItemFn<T>,\n item: T,\n itemIndex: number,\n isFocused: boolean,\n isSelected: boolean,\n isDragDisabled: boolean,\n style: React.CSSProperties\n ) => (\n <Draggable\n key={itemIndex}\n draggableId={DraggableItemList.getDraggableId(\n draggablePrefix,\n itemIndex\n )}\n index={itemIndex}\n isDragDisabled={isDragDisabled}\n >\n {provided => (\n <div\n role=\"menuitem\"\n className=\"draggable-item-list-item\"\n ref={provided.innerRef}\n tabIndex={-1}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.draggableProps}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.dragHandleProps}\n >\n {renderItem({\n item,\n itemIndex,\n isFocused,\n isSelected,\n style,\n isClone: false,\n })}\n </div>\n )}\n </Draggable>\n ),\n { max: ItemList.CACHE_SIZE }\n );\n\n handleSelectionChange(selectedRanges: Range[]): void {\n this.setState({ selectedCount: RangeUtils.count(selectedRanges) });\n\n const { onSelectionChange } = this.props;\n onSelectionChange(selectedRanges);\n }\n\n getCachedRenderDraggableItem = memoize(\n (\n draggablePrefix: string,\n isDragDisabled: boolean,\n renderItem: DraggableRenderItemFn<T>\n ) => ({\n item,\n itemIndex,\n isFocused,\n isSelected,\n style,\n }: RenderItemProps<T>) =>\n this.getCachedDraggableItem(\n draggablePrefix,\n renderItem,\n item,\n itemIndex,\n isFocused,\n isSelected,\n isDragDisabled,\n style\n ),\n { max: 1 }\n );\n\n getCachedRenderClone = memoize(\n (\n draggingItemClassName: string,\n items: T[],\n offset: number,\n renderItem: DraggableRenderItemFn<T>\n ): DraggableChildrenFn => (provided, snapshot, rubric) => {\n const { selectedCount } = this.state;\n const { index: itemIndex } = rubric.source;\n const item = items[itemIndex - offset];\n return (\n <div\n className={classNames(\n 'draggable-item-list-dragging-item-container',\n draggingItemClassName\n )}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.draggableProps}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.dragHandleProps}\n ref={provided.innerRef}\n >\n <div\n className={classNames(\n 'draggable-item-list-dragging-item',\n { 'two-dragged': selectedCount === 2 },\n { 'multiple-dragged': selectedCount > 2 }\n )}\n >\n {renderItem({\n item,\n itemIndex,\n isFocused: false,\n isSelected: true,\n style: {},\n isClone: true,\n selectedCount,\n })}\n </div>\n </div>\n );\n },\n { max: 1 }\n );\n\n render(): JSX.Element {\n const {\n className,\n draggablePrefix,\n draggingItemClassName,\n droppableId,\n isDoubleClickSelect,\n isDragDisabled,\n isDropDisabled,\n isMultiSelect,\n isStickyBottom,\n itemCount,\n items,\n offset,\n onFocusChange,\n onSelect,\n onViewportChange,\n renderItem,\n rowHeight,\n selectedRanges,\n style,\n } = this.props;\n return (\n <Droppable\n isDropDisabled={isDropDisabled}\n droppableId={droppableId}\n mode=\"virtual\"\n renderClone={this.getCachedRenderClone(\n draggingItemClassName,\n items,\n offset,\n renderItem\n )}\n >\n {(provided, snapshot) => (\n <div\n role=\"menu\"\n className={classNames('draggable-item-list', className, {\n 'is-drop-disabled': isDropDisabled,\n 'is-drag-disabled': isDragDisabled,\n 'is-dragging-from-this': snapshot.draggingFromThisWith,\n 'is-dragging-over': snapshot.isDraggingOver,\n 'is-dropping': snapshot.draggingOverWith,\n })}\n style={style}\n ref={provided.innerRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.droppableProps}\n >\n <ItemList\n focusSelector=\".draggable-item-list-item\"\n isDoubleClickSelect={isDoubleClickSelect}\n isDragSelect={false}\n isMultiSelect={isMultiSelect}\n isStickyBottom={isStickyBottom}\n itemCount={itemCount}\n items={items}\n onFocusChange={onFocusChange}\n onSelect={onSelect}\n onSelectionChange={this.handleSelectionChange}\n onViewportChange={onViewportChange}\n offset={offset}\n ref={this.itemList}\n renderItem={this.getCachedRenderDraggableItem(\n draggablePrefix,\n isDragDisabled,\n renderItem\n )}\n rowHeight={rowHeight}\n selectedRanges={selectedRanges}\n />\n </div>\n )}\n </Droppable>\n );\n }\n}\n\nexport default DraggableItemList;\n"],"file":"DraggableItemList.js"}
1
+ {"version":3,"sources":["../src/DraggableItemList.tsx"],"names":["React","PureComponent","classNames","memoize","Draggable","Droppable","FontAwesomeIcon","vsGripper","RangeUtils","ItemList","Tooltip","DraggableItemList","renderHandle","renderBadge","text","renderTextItem","badgeText","className","renderItem","item","isClone","selectedCount","displayValue","value","getDraggableId","draggablePrefix","itemIndex","getDraggableIndex","draggableId","parseInt","split","pop","constructor","props","isFocused","isSelected","isDragDisabled","style","provided","innerRef","draggableProps","dragHandleProps","max","CACHE_SIZE","getCachedDraggableItem","draggingItemClassName","items","offset","snapshot","rubric","state","index","source","handleSelectionChange","bind","itemList","createRef","selectItem","current","focusItem","scrollToItem","selectedRanges","setState","count","onSelectionChange","render","droppableId","isDoubleClickSelect","isDropDisabled","isMultiSelect","isStickyBottom","itemCount","onFocusChange","onSelect","onViewportChange","rowHeight","getCachedRenderClone","draggingFromThisWith","isDraggingOver","draggingOverWith","droppableProps","getCachedRenderDraggableItem","DEFAULT_ROW_HEIGHT","isDeselectOnClick","disableSelect"],"mappings":"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","sourcesContent":["import React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport memoize from 'memoizee';\nimport { Draggable, Droppable, DraggableChildrenFn } from 'react-beautiful-dnd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsGripper } from '@deephaven/icons';\nimport { RangeUtils, Range } from '@deephaven/utils';\nimport ItemList, {\n RenderItemProps,\n DefaultListItem,\n ItemListProps,\n} from './ItemList';\nimport { Tooltip } from './popper';\nimport './DraggableItemList.scss';\n\nexport type DraggableRenderItemProps<T> = RenderItemProps<T> & {\n isClone?: boolean;\n selectedCount?: number;\n};\n\ntype DraggableRenderItemFn<T> = (\n props: DraggableRenderItemProps<T>\n) => React.ReactNode;\n\ntype DraggableItemListProps<T> = Omit<\n ItemListProps<T>,\n 'overscanCount' | 'focusSelector' | 'isDragSelect'\n> & {\n className: string;\n draggingItemClassName: string;\n isDropDisabled: boolean;\n // Whether to allow dragging items from this list\n isDragDisabled: boolean;\n\n renderItem: DraggableRenderItemFn<T>;\n style: React.CSSProperties;\n\n // The prefix to add to all draggable item IDs\n draggablePrefix: string;\n // The ID to give the droppable list\n droppableId: string;\n};\n\ntype DraggableItemListState = {\n selectedCount: number;\n};\n\n/**\n * Show a draggable item list. It _must_ be used within a `DragDropContext`.\n * This implementation uses react-beautiful-dnd for handling dragging and dropping of items.\n * We use ItemList to handle selection for multi drag and drop (not built in to react-beautiful-dnd).\n * One caveat with the use of react-beautiful-dnd is that it doesn't allow a drag to be initiated while\n * using a modifier key: https://github.com/atlassian/react-beautiful-dnd/issues/1678\n */\nclass DraggableItemList<T> extends PureComponent<\n DraggableItemListProps<T>,\n DraggableItemListState\n> {\n static DEFAULT_ROW_HEIGHT = 30;\n\n static defaultProps = {\n className: '',\n draggingItemClassName: '',\n offset: 0,\n items: [],\n rowHeight: DraggableItemList.DEFAULT_ROW_HEIGHT,\n isDeselectOnClick: true,\n isDoubleClickSelect: true,\n isDropDisabled: false,\n isDragDisabled: false,\n isMultiSelect: false,\n isStickyBottom: false,\n disableSelect: false,\n style: null,\n onFocusChange(): void {\n // no-op\n },\n onSelect(): void {\n // no-op\n },\n onSelectionChange(): void {\n // no-op\n },\n onViewportChange(): void {\n // no-op\n },\n renderItem: DraggableItemList.renderItem,\n selectedRanges: [],\n draggablePrefix: 'draggable-item',\n droppableId: 'droppable-item-list',\n };\n\n static renderHandle(): JSX.Element {\n return (\n <div>\n <Tooltip>Drag to re-order</Tooltip>\n <FontAwesomeIcon icon={vsGripper} />\n </div>\n );\n }\n\n static renderBadge({ text }: { text?: string }): React.ReactNode {\n return text ? <span className=\"number-badge\">{text}</span> : null;\n }\n\n static renderTextItem({\n text,\n badgeText = '',\n className = '',\n }: {\n text: string;\n badgeText: string;\n className: string;\n }): JSX.Element {\n return (\n <div\n className={classNames(\n 'item-list-item-content',\n 'draggable-item-list-item-content',\n className\n )}\n >\n <span className=\"title\">{text}</span>\n {DraggableItemList.renderBadge({ text: badgeText })}\n {DraggableItemList.renderHandle()}\n </div>\n );\n }\n\n static renderItem<P extends DefaultListItem>({\n item,\n isClone,\n selectedCount,\n }: DraggableRenderItemProps<P>): JSX.Element {\n const text = item && (item.displayValue || item.value || `${item}`);\n const badgeText = isClone ? `${selectedCount}` : '';\n const className = isClone ? 'item-list-item-clone' : '';\n return DraggableItemList.renderTextItem({ text, badgeText, className });\n }\n\n static getDraggableId(draggablePrefix: string, itemIndex: number): string {\n return `${draggablePrefix}/${itemIndex}`;\n }\n\n static getDraggableIndex(draggableId: string): number {\n return parseInt(draggableId.split('/').pop() || '', 10);\n }\n\n constructor(props: DraggableItemListProps<T>) {\n super(props);\n\n this.handleSelectionChange = this.handleSelectionChange.bind(this);\n\n this.itemList = React.createRef();\n\n this.state = {\n selectedCount: 0,\n };\n }\n\n itemList: React.RefObject<ItemList<T>>;\n\n selectItem(itemIndex: number): void {\n this.itemList.current?.selectItem(itemIndex);\n }\n\n focusItem(itemIndex: number): void {\n this.itemList.current?.focusItem(itemIndex);\n }\n\n scrollToItem(itemIndex: number): void {\n this.itemList.current?.scrollToItem(itemIndex);\n }\n\n getCachedDraggableItem = memoize(\n (\n draggablePrefix: string,\n renderItem: DraggableRenderItemFn<T>,\n item: T,\n itemIndex: number,\n isFocused: boolean,\n isSelected: boolean,\n isDragDisabled: boolean,\n style: React.CSSProperties\n ) => (\n <Draggable\n key={itemIndex}\n draggableId={DraggableItemList.getDraggableId(\n draggablePrefix,\n itemIndex\n )}\n index={itemIndex}\n isDragDisabled={isDragDisabled}\n >\n {provided => (\n <div\n role=\"menuitem\"\n className=\"draggable-item-list-item\"\n ref={provided.innerRef}\n tabIndex={-1}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.draggableProps}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.dragHandleProps}\n >\n {renderItem({\n item,\n itemIndex,\n isFocused,\n isSelected,\n style,\n isClone: false,\n })}\n </div>\n )}\n </Draggable>\n ),\n { max: ItemList.CACHE_SIZE }\n );\n\n handleSelectionChange(selectedRanges: Range[]): void {\n this.setState({ selectedCount: RangeUtils.count(selectedRanges) });\n\n const { onSelectionChange } = this.props;\n onSelectionChange(selectedRanges);\n }\n\n getCachedRenderDraggableItem = memoize(\n (\n draggablePrefix: string,\n isDragDisabled: boolean,\n renderItem: DraggableRenderItemFn<T>\n ) => ({\n item,\n itemIndex,\n isFocused,\n isSelected,\n style,\n }: RenderItemProps<T>) =>\n this.getCachedDraggableItem(\n draggablePrefix,\n renderItem,\n item,\n itemIndex,\n isFocused,\n isSelected,\n isDragDisabled,\n style\n ),\n { max: 1 }\n );\n\n getCachedRenderClone = memoize(\n (\n draggingItemClassName: string,\n items: T[],\n offset: number,\n renderItem: DraggableRenderItemFn<T>\n ): DraggableChildrenFn => (provided, snapshot, rubric) => {\n const { selectedCount } = this.state;\n const { index: itemIndex } = rubric.source;\n const item = items[itemIndex - offset];\n return (\n <div\n className={classNames(\n 'draggable-item-list-dragging-item-container',\n draggingItemClassName\n )}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.draggableProps}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.dragHandleProps}\n ref={provided.innerRef}\n >\n <div\n className={classNames(\n 'draggable-item-list-dragging-item',\n { 'two-dragged': selectedCount === 2 },\n { 'multiple-dragged': selectedCount > 2 }\n )}\n >\n {renderItem({\n item,\n itemIndex,\n isFocused: false,\n isSelected: true,\n style: {},\n isClone: true,\n selectedCount,\n })}\n </div>\n </div>\n );\n },\n { max: 1 }\n );\n\n render(): JSX.Element {\n const {\n className,\n draggablePrefix,\n draggingItemClassName,\n droppableId,\n isDoubleClickSelect,\n isDragDisabled,\n isDropDisabled,\n isMultiSelect,\n isStickyBottom,\n itemCount,\n items,\n offset,\n onFocusChange,\n onSelect,\n onViewportChange,\n renderItem,\n rowHeight,\n selectedRanges,\n style,\n } = this.props;\n return (\n <Droppable\n isDropDisabled={isDropDisabled}\n droppableId={droppableId}\n mode=\"virtual\"\n renderClone={this.getCachedRenderClone(\n draggingItemClassName,\n items,\n offset,\n renderItem\n )}\n >\n {(provided, snapshot) => (\n <div\n role=\"menu\"\n className={classNames('draggable-item-list', className, {\n 'is-drop-disabled': isDropDisabled,\n 'is-drag-disabled': isDragDisabled,\n 'is-dragging-from-this': snapshot.draggingFromThisWith,\n 'is-dragging-over': snapshot.isDraggingOver,\n 'is-dropping': snapshot.draggingOverWith,\n })}\n style={style}\n ref={provided.innerRef}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...provided.droppableProps}\n >\n <ItemList\n focusSelector=\".draggable-item-list-item\"\n isDoubleClickSelect={isDoubleClickSelect}\n isDragSelect={false}\n isMultiSelect={isMultiSelect}\n isStickyBottom={isStickyBottom}\n itemCount={itemCount}\n items={items}\n onFocusChange={onFocusChange}\n onSelect={onSelect}\n onSelectionChange={this.handleSelectionChange}\n onViewportChange={onViewportChange}\n offset={offset}\n ref={this.itemList}\n renderItem={this.getCachedRenderDraggableItem(\n draggablePrefix,\n isDragDisabled,\n renderItem\n )}\n rowHeight={rowHeight}\n selectedRanges={selectedRanges}\n />\n </div>\n )}\n </Droppable>\n );\n }\n}\n\nexport default DraggableItemList;\n"],"file":"DraggableItemList.js"}
package/dist/ItemList.js CHANGED
@@ -31,6 +31,10 @@ export class ItemList extends PureComponent {
31
31
  constructor(_props) {
32
32
  super(_props);
33
33
 
34
+ _defineProperty(this, "list", void 0);
35
+
36
+ _defineProperty(this, "listContainer", void 0);
37
+
34
38
  _defineProperty(this, "getItemSelected", memoize((index, selectedRanges) => RangeUtils.isSelected(selectedRanges, index), {
35
39
  max: ItemList.CACHE_SIZE
36
40
  }));
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ItemList.tsx"],"names":["React","PureComponent","memoize","FixedSizeList","List","AutoSizer","Log","RangeUtils","ItemListItem","ContextActionUtils","log","module","ItemList","renderItem","item","displayValue","value","constructor","props","index","selectedRanges","isSelected","max","CACHE_SIZE","itemIndex","key","isFocused","style","disableSelect","content","handleItemContextMenu","handleItemDoubleClick","handleItemMouseDown","handleItemFocus","handleItemBlur","handleItemMouseMove","handleItemMouseUp","onKeyDown","component","forwardRef","ref","displayName","items","bind","handleItemsRendered","handleWindowMouseUp","handleKeyDown","handleMouseLeave","handleScroll","handleResize","renderInnerElement","list","createRef","listContainer","isStickyBottom","state","focusIndex","mouseDownIndex","overscanStartIndex","height","isDragging","isStuckToBottom","scrollOffset","componentDidMount","isListAtBottom","scrollToBottom","componentDidUpdate","prevProps","prevState","propSelectedRanges","sendViewportUpdate","setSelectedRanges","onSelectionChange","onFocusChange","componentWillUnmount","window","removeEventListener","focus","current","getElement","focusSelector","elements","querySelectorAll","elementIndex","focusItem","setState","element","HTMLElement","scrollToItem","scrollIntoView","block","e","isModifierDown","isModifierKeyDown","toggleSelect","shiftKey","isDoubleClickSelect","onSelect","selectRange","target","indexOf","tagName","toLowerCase","button","length","selectItem","addEventListener","debug2","currentTarget","relatedTarget","contains","isDragSelect","isMultiSelect","getItemSelected","deselectAll","Math","min","isDeselectOnClick","isShiftDown","resetMouseState","itemCount","oldFocus","newFocus","stopPropagation","preventDefault","lastRange","scrollUpdateWasRequested","isDeselectable","deselectItem","deselectRange","range","validateRange","onViewportChange","rowHeight","topRow","floor","bottomRow","ceil","offset","getCachedItem","render","overscanCount","width","getItemData","getOuterElement","getInnerElement","DEFAULT_ROW_HEIGHT","DEFAULT_OVERSCAN"],"mappings":"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","sourcesContent":["import React, { PureComponent } from 'react';\nimport memoize from 'memoizee';\nimport {\n FixedSizeList as List,\n ListOnItemsRenderedProps,\n ListOnScrollProps,\n} from 'react-window';\nimport AutoSizer, { Size } from 'react-virtualized-auto-sizer';\nimport Log from '@deephaven/log';\nimport { RangeUtils, Range } from '@deephaven/utils';\nimport ItemListItem from './ItemListItem';\nimport { ContextActionUtils } from './context-actions';\nimport './ItemList.scss';\n\nconst log = Log.module('ItemList');\n\nexport interface DefaultListItem {\n value?: string;\n displayValue?: string;\n}\n\nexport type RenderItemProps<T> = {\n item: T;\n itemIndex: number;\n isFocused: boolean;\n isSelected: boolean;\n style: React.CSSProperties;\n};\n\nexport type RenderItemFn<T> = (props: RenderItemProps<T>) => React.ReactNode;\n\nexport type ItemDragEventHandler = (\n index: number,\n event: React.DragEvent<HTMLDivElement>\n) => void;\n\nexport type ItemListProps<T> = {\n // Total item count\n itemCount: number;\n rowHeight: number;\n // Offset of the top item in the items array\n offset: number;\n // Item object format expected by the default renderItem function\n // Can be anything as long as it's supported by the renderItem\n // Default renderItem will look for a `displayValue` property, fallback\n // to the `value` property, or stringify the object if neither are defined\n items: T[];\n // Whether clicking a selected item should deselect in the item list or not. Defaults to true\n isDeselectOnClick: boolean;\n // Whether selection requires a double click or not\n isDoubleClickSelect: boolean;\n // Whether to allow dragging to change the selection after clicking\n isDragSelect: boolean;\n // Whether to allow multiple selections in this item list\n isMultiSelect: boolean;\n // Set to true if you want the list to scroll when new items are added and it's already at the bottom\n isStickyBottom: boolean;\n // Fired when an item gets focused\n onFocusChange(index: number | null): void;\n\n // Fired when an item is clicked. With multiple selection, fired on double click.\n onSelect(index: number, event: React.SyntheticEvent): void;\n onSelectionChange(ranges: Range[]): void;\n onViewportChange(topRow: number, bottomRow: number): void;\n overscanCount: number;\n selectedRanges: Range[];\n disableSelect: boolean;\n renderItem: RenderItemFn<T>;\n focusSelector: string;\n};\n\ntype ItemListState = {\n focusIndex: number | null;\n mouseDownIndex: number | null;\n selectedRanges: Range[];\n overscanStartIndex: number;\n height: number | null;\n isDragging: boolean;\n isStuckToBottom: boolean;\n scrollOffset: number | null;\n};\n\n/**\n * Show items in a long scrollable list.\n * Can be navigated via keyboard or mouse.\n */\nexport class ItemList<T> extends PureComponent<\n ItemListProps<T>,\n ItemListState\n> {\n static CACHE_SIZE = 1000;\n\n static DEFAULT_ROW_HEIGHT = 20;\n\n // By drawing an additional 10 items on each side, tab/keyboard navigation works better (as the next element exists)\n static DEFAULT_OVERSCAN = 10;\n\n static defaultProps = {\n offset: 0,\n items: [],\n rowHeight: ItemList.DEFAULT_ROW_HEIGHT,\n\n isDeselectOnClick: true,\n\n isDoubleClickSelect: false,\n\n isDragSelect: true,\n\n isMultiSelect: false,\n\n isStickyBottom: false,\n\n disableSelect: false,\n\n onFocusChange(): void {\n // no-op\n },\n onSelect(): void {\n // no-op\n },\n onSelectionChange(): void {\n // no-op\n },\n onViewportChange(): void {\n // no-op\n },\n\n overscanCount: ItemList.DEFAULT_OVERSCAN,\n\n renderItem: ItemList.renderItem,\n selectedRanges: [],\n\n focusSelector: '.item-list-item',\n };\n\n static renderItem<P extends DefaultListItem>({\n item,\n }: RenderItemProps<P>): JSX.Element {\n return (\n <div className=\"item-list-item-content\">\n {item && (item.displayValue || item.value || `${item}`)}\n </div>\n );\n }\n\n constructor(props: ItemListProps<T>) {\n super(props);\n\n this.handleItemBlur = this.handleItemBlur.bind(this);\n this.handleItemContextMenu = this.handleItemContextMenu.bind(this);\n this.handleItemFocus = this.handleItemFocus.bind(this);\n this.handleItemDoubleClick = this.handleItemDoubleClick.bind(this);\n this.handleItemMouseDown = this.handleItemMouseDown.bind(this);\n this.handleItemMouseMove = this.handleItemMouseMove.bind(this);\n this.handleItemMouseUp = this.handleItemMouseUp.bind(this);\n this.handleItemsRendered = this.handleItemsRendered.bind(this);\n this.handleWindowMouseUp = this.handleWindowMouseUp.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.handleScroll = this.handleScroll.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.renderInnerElement = this.renderInnerElement.bind(this);\n\n this.list = React.createRef();\n this.listContainer = React.createRef();\n\n const { isStickyBottom, selectedRanges } = props;\n\n this.state = {\n focusIndex: null,\n mouseDownIndex: null,\n selectedRanges,\n overscanStartIndex: 0,\n height: null,\n isDragging: false,\n isStuckToBottom: isStickyBottom,\n scrollOffset: null,\n };\n }\n\n componentDidMount(): void {\n const { isStickyBottom } = this.props;\n if (isStickyBottom && !this.isListAtBottom()) {\n this.scrollToBottom();\n }\n }\n\n componentDidUpdate(\n prevProps: ItemListProps<T>,\n prevState: ItemListState\n ): void {\n const { selectedRanges: propSelectedRanges } = this.props;\n const {\n focusIndex,\n isStuckToBottom,\n scrollOffset,\n height,\n selectedRanges,\n } = this.state;\n if (isStuckToBottom && !this.isListAtBottom()) {\n this.scrollToBottom();\n }\n\n if (\n scrollOffset !== prevState.scrollOffset ||\n height !== prevState.height\n ) {\n this.sendViewportUpdate();\n }\n\n if (\n propSelectedRanges !== prevProps.selectedRanges &&\n propSelectedRanges !== selectedRanges\n ) {\n this.setSelectedRanges(propSelectedRanges);\n } else if (selectedRanges !== prevState.selectedRanges) {\n const { onSelectionChange } = this.props;\n onSelectionChange(selectedRanges);\n }\n\n if (focusIndex !== prevState.focusIndex) {\n const { onFocusChange } = this.props;\n onFocusChange(focusIndex);\n }\n }\n\n componentWillUnmount(): void {\n window.removeEventListener('mouseup', this.handleWindowMouseUp);\n }\n\n list: React.RefObject<List>;\n\n listContainer: React.RefObject<HTMLDivElement>;\n\n getItemSelected = memoize(\n (index: number, selectedRanges: Range[]) =>\n RangeUtils.isSelected(selectedRanges, index),\n { max: ItemList.CACHE_SIZE }\n );\n\n getCachedItem = memoize(\n (\n itemIndex: number,\n key: number,\n item: T,\n isFocused: boolean,\n isSelected: boolean,\n renderItem: RenderItemFn<T>,\n style: React.CSSProperties,\n disableSelect: boolean\n ) => {\n const content = renderItem({\n item,\n itemIndex,\n isFocused,\n isSelected,\n style,\n });\n\n return (\n <ItemListItem\n onContextMenu={this.handleItemContextMenu}\n onDoubleClick={this.handleItemDoubleClick}\n onMouseDown={this.handleItemMouseDown}\n onFocus={this.handleItemFocus}\n onBlur={this.handleItemBlur}\n disableSelect={disableSelect}\n onMouseMove={this.handleItemMouseMove}\n onMouseUp={this.handleItemMouseUp}\n isFocused={isFocused}\n isSelected={isSelected}\n itemIndex={itemIndex}\n style={style}\n key={key}\n >\n {content}\n </ItemListItem>\n );\n },\n { max: ItemList.CACHE_SIZE }\n );\n\n getOuterElement = memoize((onKeyDown: React.KeyboardEventHandler) => {\n const component = React.forwardRef<HTMLDivElement>((props, ref) => (\n // We need to add the tabIndex to make sure it is focusable, otherwise we can't get key events\n <div\n ref={ref}\n tabIndex={-1}\n onKeyDown={onKeyDown}\n role=\"presentation\"\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...props}\n />\n ));\n component.displayName = 'ItemListOuterElement';\n return component;\n });\n\n getInnerElement = memoize(() => {\n const component = React.forwardRef<HTMLDivElement>((props, ref) => (\n <div\n className=\"item-list-inner-element\"\n ref={ref}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...props}\n />\n ));\n component.displayName = 'ItemListInnerElement';\n return component;\n });\n\n getItemData = memoize(\n (items: T[], selectedRanges: Range[], renderItem: RenderItemFn<T>) => ({\n items,\n selectedRanges,\n renderItem,\n })\n );\n\n focus(): void {\n this.listContainer.current?.focus();\n }\n\n getElement(itemIndex: number): Element | null {\n if (this.listContainer.current == null) {\n return null;\n }\n\n const { focusSelector } = this.props;\n const { overscanStartIndex } = this.state;\n const elements = this.listContainer.current.querySelectorAll(focusSelector);\n const elementIndex = itemIndex - overscanStartIndex;\n return elements[elementIndex];\n }\n\n focusItem(itemIndex: number): void {\n const { disableSelect } = this.props;\n if (disableSelect) return;\n\n this.setState({ focusIndex: itemIndex });\n\n const element = this.getElement(itemIndex);\n if (element instanceof HTMLElement) {\n element.focus();\n }\n }\n\n scrollToItem(itemIndex: number): void {\n const element = this.getElement(itemIndex);\n if (element != null) {\n element.scrollIntoView({ block: 'center' });\n }\n }\n\n handleItemContextMenu(\n itemIndex: number,\n e: React.MouseEvent<HTMLDivElement>\n ): void {\n // Update the selection, but don't consume the mouse event - it will trigger the context menu\n const { selectedRanges } = this.state;\n const isSelected = RangeUtils.isSelected(selectedRanges, itemIndex);\n\n // When right-clicking, we want to maintain the current selection if the right click happened within the selection even if the modifier key isn't down\n const isModifierDown =\n isSelected || ContextActionUtils.isModifierKeyDown(e);\n this.toggleSelect(itemIndex, e.shiftKey, isModifierDown, false);\n }\n\n handleItemDoubleClick(itemIndex: number, e: React.MouseEvent): void {\n const { isDoubleClickSelect, onSelect } = this.props;\n\n if (isDoubleClickSelect) {\n this.setState(\n ({ selectedRanges }) => ({\n selectedRanges: RangeUtils.selectRange(selectedRanges, [\n itemIndex,\n itemIndex,\n ]),\n }),\n () => {\n onSelect(itemIndex, e);\n }\n );\n }\n }\n\n handleItemMouseDown(index: number, e: React.MouseEvent): void {\n const { selectedRanges } = this.state;\n\n if (\n e.target instanceof HTMLElement &&\n ['button', 'select', 'input', 'textarea'].indexOf(\n e.target.tagName.toLowerCase()\n ) !== -1\n ) {\n // allow these elements to do their own behaviours\n return;\n }\n\n if (e.button === 2 && selectedRanges.length === 0) {\n // allow right click to act as a selection if selection is empty\n this.focusItem(index);\n this.selectItem(index);\n return;\n }\n\n if (e.button != null && e.button !== 0) {\n return;\n }\n\n this.setState({ mouseDownIndex: index });\n\n window.addEventListener('mouseup', this.handleWindowMouseUp);\n\n // Leave selection until mouse up, to allow for dragging behaviour\n }\n\n handleItemBlur(itemIndex: number, e: React.FocusEvent): void {\n log.debug2('item blur', itemIndex, e.currentTarget, e.relatedTarget);\n if (\n !e.relatedTarget ||\n (this.listContainer.current &&\n e.relatedTarget instanceof HTMLElement &&\n !this.listContainer.current.contains(e.relatedTarget))\n ) {\n // Next focused element is outside of the ItemList\n this.setState({ focusIndex: null });\n }\n }\n\n handleItemFocus(itemIndex: number, e: React.FocusEvent): void {\n log.debug2('item focus', itemIndex, e.target);\n this.setState(state => {\n const { focusIndex } = state;\n if (focusIndex !== itemIndex) {\n return { focusIndex: itemIndex };\n }\n return null;\n });\n }\n\n handleItemMouseMove(itemIndex: number, e: React.MouseEvent): void {\n const { isDragSelect, isMultiSelect, disableSelect } = this.props;\n const { mouseDownIndex, selectedRanges } = this.state;\n\n if (mouseDownIndex == null || disableSelect) return;\n\n this.setState({ isDragging: true });\n\n if (isDragSelect || mouseDownIndex === itemIndex) {\n this.focusItem(itemIndex);\n\n if (isMultiSelect) {\n if (\n !isDragSelect &&\n !this.getItemSelected(itemIndex, selectedRanges) &&\n !ContextActionUtils.isModifierKeyDown(e)\n ) {\n // If there's already a selection and they select outside of that range while dragging without a modifier key, start a new selection with just the new item\n this.deselectAll();\n }\n this.selectRange([\n Math.min(mouseDownIndex, itemIndex),\n Math.max(mouseDownIndex, itemIndex),\n ]);\n } else {\n this.toggleSelect(\n itemIndex,\n e.shiftKey,\n ContextActionUtils.isModifierKeyDown(e),\n false\n );\n }\n }\n }\n\n handleItemMouseUp(index: number, e: React.MouseEvent): void {\n const { isDeselectOnClick, isDoubleClickSelect, onSelect } = this.props;\n const { mouseDownIndex, isDragging } = this.state;\n\n if (\n e.target instanceof HTMLElement &&\n ['button', 'select', 'input', 'textarea'].indexOf(\n e.target.tagName.toLowerCase()\n ) !== -1\n ) {\n return;\n }\n\n if (mouseDownIndex === index && !isDragging) {\n const isShiftDown = e.shiftKey;\n const isModifierDown = ContextActionUtils.isModifierKeyDown(e);\n this.focusItem(index);\n this.toggleSelect(index, isShiftDown, isModifierDown, isDeselectOnClick);\n\n if (!isDoubleClickSelect && !isShiftDown && !isModifierDown) {\n onSelect(index, e);\n }\n }\n\n this.resetMouseState();\n }\n\n handleItemsRendered({ overscanStartIndex }: ListOnItemsRenderedProps): void {\n this.setState({ overscanStartIndex });\n }\n\n handleResize({ height }: Size): void {\n this.setState({ height });\n }\n\n handleMouseLeave(): void {\n this.setState({ mouseDownIndex: null });\n }\n\n handleWindowMouseUp(): void {\n this.resetMouseState();\n window.removeEventListener('mouseup', this.handleWindowMouseUp);\n }\n\n handleKeyDown(e: React.KeyboardEvent): void {\n const { isMultiSelect, itemCount, onSelect } = this.props;\n const { focusIndex: oldFocus } = this.state;\n let newFocus = oldFocus;\n\n if (e.key === 'Enter' || e.key === ' ') {\n if (!isMultiSelect && newFocus != null) {\n this.setState({ selectedRanges: [[newFocus, newFocus]] }, () => {\n if (newFocus != null) {\n onSelect(newFocus, e);\n }\n });\n }\n return;\n }\n\n if (e.key === 'ArrowUp') {\n if (newFocus != null && newFocus >= 0) {\n newFocus = Math.max(0, newFocus - 1);\n } else {\n newFocus = itemCount - 1;\n }\n } else if (e.key === 'ArrowDown') {\n if (newFocus != null && newFocus >= 0) {\n newFocus = Math.min(newFocus + 1, itemCount - 1);\n } else {\n newFocus = 0;\n }\n } else {\n return;\n }\n\n if (oldFocus !== newFocus) {\n e.stopPropagation();\n e.preventDefault();\n\n this.focusItem(newFocus);\n\n const { selectedRanges } = this.state;\n if (e.shiftKey && selectedRanges.length > 0) {\n const lastRange = selectedRanges[selectedRanges.length - 1];\n this.selectRange([\n Math.min(newFocus, lastRange[0]),\n Math.max(newFocus, lastRange[1]),\n ]);\n } else {\n this.deselectAll();\n if (newFocus !== null) {\n this.selectItem(newFocus);\n } else {\n this.listContainer.current?.focus();\n }\n }\n\n this.scrollIntoView(newFocus);\n }\n }\n\n handleScroll({\n scrollUpdateWasRequested,\n scrollOffset,\n }: ListOnScrollProps): void {\n this.setState(state => {\n if (scrollUpdateWasRequested) {\n // The scroll was caused by scrollTo() or scrollToItem()\n // Don't re-calc isStuckToBottom\n return { scrollOffset } as ItemListState;\n }\n\n const { isStickyBottom } = this.props;\n const { height } = state;\n\n const isStuckToBottom =\n isStickyBottom && this.isListAtBottom({ scrollOffset, height });\n return { isStuckToBottom, scrollOffset } as ItemListState;\n });\n }\n\n resetMouseState(): void {\n this.setState({ mouseDownIndex: null, isDragging: false });\n }\n\n scrollToBottom(): void {\n const { itemCount } = this.props;\n if (this.list.current) {\n this.list.current.scrollToItem(itemCount);\n }\n }\n\n scrollIntoView(itemIndex: number): void {\n if (this.list.current) {\n this.list.current.scrollToItem(itemIndex);\n }\n }\n\n /**\n * @param index The index to toggle selection for\n * @param isShiftDown True if the shift modifier key is down\n * @param isModifierDown True if the meta modifier key is down\n * @param isDeselectable True if item should be deselected if already selected\n */\n toggleSelect(\n index: number,\n isShiftDown: boolean,\n isModifierDown: boolean,\n isDeselectable = true\n ): void {\n const { isMultiSelect } = this.props;\n const { selectedRanges } = this.state;\n\n if (isMultiSelect && isShiftDown && selectedRanges.length > 0) {\n const lastRange = selectedRanges[selectedRanges.length - 1];\n this.selectRange([\n Math.min(lastRange[0], index),\n Math.max(index, lastRange[1]),\n ]);\n } else if (\n isMultiSelect &&\n selectedRanges.length === 1 &&\n selectedRanges[0][0] === index &&\n selectedRanges[0][1] === index\n ) {\n if (isDeselectable) {\n this.deselectItem(index);\n }\n } else if (isMultiSelect && isModifierDown) {\n if (this.getItemSelected(index, selectedRanges)) {\n if (isDeselectable) {\n this.deselectItem(index);\n }\n } else {\n this.selectItem(index);\n }\n } else {\n this.deselectAll();\n this.selectItem(index);\n }\n }\n\n deselectAll(): void {\n const { itemCount } = this.props;\n this.deselectRange([0, itemCount]);\n }\n\n deselectItem(index: number): void {\n this.deselectRange([index, index]);\n }\n\n deselectRange(range: Range): void {\n RangeUtils.validateRange(range);\n\n this.setState(({ selectedRanges }) => ({\n selectedRanges: RangeUtils.deselectRange(selectedRanges, range),\n }));\n }\n\n selectItem(index: number): void {\n const { disableSelect } = this.props;\n if (disableSelect) return;\n\n this.selectRange([index, index]);\n }\n\n selectRange(range: Range): void {\n RangeUtils.validateRange(range);\n\n this.setState(({ selectedRanges }) => ({\n selectedRanges: RangeUtils.selectRange(selectedRanges, range),\n }));\n }\n\n setSelectedRanges(selectedRanges: Range[]): void {\n this.setState({ selectedRanges });\n }\n\n sendViewportUpdate(): void {\n const { scrollOffset, height } = this.state;\n if (scrollOffset != null && height != null) {\n const { onViewportChange, rowHeight } = this.props;\n const topRow = Math.floor(scrollOffset / rowHeight);\n const bottomRow = topRow + Math.ceil(height / rowHeight);\n onViewportChange(topRow, bottomRow);\n }\n }\n\n isListAtBottom(\n {\n scrollOffset,\n height,\n }: Pick<ItemListState, 'scrollOffset' | 'height'> = this.state\n ): boolean {\n if (height == null || scrollOffset == null) {\n return false;\n }\n\n const { itemCount, rowHeight } = this.props;\n return scrollOffset + height >= itemCount * rowHeight;\n }\n\n renderInnerElement({\n index: itemIndex,\n style,\n }: {\n index: number;\n style: React.CSSProperties;\n }): React.ReactElement | null {\n const { items, offset, renderItem, disableSelect } = this.props;\n const { focusIndex, selectedRanges } = this.state;\n if (itemIndex < offset || itemIndex >= offset + items.length) {\n return null;\n }\n\n const item = items[itemIndex - offset];\n return this.getCachedItem(\n itemIndex,\n itemIndex,\n item,\n itemIndex === focusIndex && !disableSelect,\n this.getItemSelected(itemIndex, selectedRanges),\n renderItem,\n style,\n disableSelect\n );\n }\n\n render(): JSX.Element {\n const {\n items,\n itemCount,\n overscanCount,\n renderItem,\n rowHeight,\n } = this.props;\n const { selectedRanges } = this.state;\n return (\n <AutoSizer className=\"item-list-auto-sizer\" onResize={this.handleResize}>\n {({ width, height }) => (\n <List\n className=\"item-list-scroll-pane\"\n height={height}\n width={width}\n itemCount={itemCount}\n itemSize={rowHeight}\n // This prop isn't actually used by us, it is passed to the render function by react-window\n // Used here to force a re-render of the List component.\n // Otherwise it doesn't know to call the render again when selection or renderItem changes\n itemData={this.getItemData(items, selectedRanges, renderItem)}\n onScroll={this.handleScroll}\n onItemsRendered={this.handleItemsRendered}\n ref={this.list}\n outerElementType={this.getOuterElement(this.handleKeyDown)}\n outerRef={this.listContainer}\n innerElementType={this.getInnerElement()}\n overscanCount={overscanCount}\n >\n {this.renderInnerElement}\n </List>\n )}\n </AutoSizer>\n );\n }\n}\n\nexport default ItemList;\n"],"file":"ItemList.js"}
1
+ {"version":3,"sources":["../src/ItemList.tsx"],"names":["React","PureComponent","memoize","FixedSizeList","List","AutoSizer","Log","RangeUtils","ItemListItem","ContextActionUtils","log","module","ItemList","renderItem","item","displayValue","value","constructor","props","index","selectedRanges","isSelected","max","CACHE_SIZE","itemIndex","key","isFocused","style","disableSelect","content","handleItemContextMenu","handleItemDoubleClick","handleItemMouseDown","handleItemFocus","handleItemBlur","handleItemMouseMove","handleItemMouseUp","onKeyDown","component","forwardRef","ref","displayName","items","bind","handleItemsRendered","handleWindowMouseUp","handleKeyDown","handleMouseLeave","handleScroll","handleResize","renderInnerElement","list","createRef","listContainer","isStickyBottom","state","focusIndex","mouseDownIndex","overscanStartIndex","height","isDragging","isStuckToBottom","scrollOffset","componentDidMount","isListAtBottom","scrollToBottom","componentDidUpdate","prevProps","prevState","propSelectedRanges","sendViewportUpdate","setSelectedRanges","onSelectionChange","onFocusChange","componentWillUnmount","window","removeEventListener","focus","current","getElement","focusSelector","elements","querySelectorAll","elementIndex","focusItem","setState","element","HTMLElement","scrollToItem","scrollIntoView","block","e","isModifierDown","isModifierKeyDown","toggleSelect","shiftKey","isDoubleClickSelect","onSelect","selectRange","target","indexOf","tagName","toLowerCase","button","length","selectItem","addEventListener","debug2","currentTarget","relatedTarget","contains","isDragSelect","isMultiSelect","getItemSelected","deselectAll","Math","min","isDeselectOnClick","isShiftDown","resetMouseState","itemCount","oldFocus","newFocus","stopPropagation","preventDefault","lastRange","scrollUpdateWasRequested","isDeselectable","deselectItem","deselectRange","range","validateRange","onViewportChange","rowHeight","topRow","floor","bottomRow","ceil","offset","getCachedItem","render","overscanCount","width","getItemData","getOuterElement","getInnerElement","DEFAULT_ROW_HEIGHT","DEFAULT_OVERSCAN"],"mappings":"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","sourcesContent":["import React, { PureComponent } from 'react';\nimport memoize from 'memoizee';\nimport {\n FixedSizeList as List,\n ListOnItemsRenderedProps,\n ListOnScrollProps,\n} from 'react-window';\nimport AutoSizer, { Size } from 'react-virtualized-auto-sizer';\nimport Log from '@deephaven/log';\nimport { RangeUtils, Range } from '@deephaven/utils';\nimport ItemListItem from './ItemListItem';\nimport { ContextActionUtils } from './context-actions';\nimport './ItemList.scss';\n\nconst log = Log.module('ItemList');\n\nexport interface DefaultListItem {\n value?: string;\n displayValue?: string;\n}\n\nexport type RenderItemProps<T> = {\n item: T;\n itemIndex: number;\n isFocused: boolean;\n isSelected: boolean;\n style: React.CSSProperties;\n};\n\nexport type RenderItemFn<T> = (props: RenderItemProps<T>) => React.ReactNode;\n\nexport type ItemDragEventHandler = (\n index: number,\n event: React.DragEvent<HTMLDivElement>\n) => void;\n\nexport type ItemListProps<T> = {\n // Total item count\n itemCount: number;\n rowHeight: number;\n // Offset of the top item in the items array\n offset: number;\n // Item object format expected by the default renderItem function\n // Can be anything as long as it's supported by the renderItem\n // Default renderItem will look for a `displayValue` property, fallback\n // to the `value` property, or stringify the object if neither are defined\n items: T[];\n // Whether clicking a selected item should deselect in the item list or not. Defaults to true\n isDeselectOnClick: boolean;\n // Whether selection requires a double click or not\n isDoubleClickSelect: boolean;\n // Whether to allow dragging to change the selection after clicking\n isDragSelect: boolean;\n // Whether to allow multiple selections in this item list\n isMultiSelect: boolean;\n // Set to true if you want the list to scroll when new items are added and it's already at the bottom\n isStickyBottom: boolean;\n // Fired when an item gets focused\n onFocusChange(index: number | null): void;\n\n // Fired when an item is clicked. With multiple selection, fired on double click.\n onSelect(index: number, event: React.SyntheticEvent): void;\n onSelectionChange(ranges: Range[]): void;\n onViewportChange(topRow: number, bottomRow: number): void;\n overscanCount: number;\n selectedRanges: Range[];\n disableSelect: boolean;\n renderItem: RenderItemFn<T>;\n focusSelector: string;\n};\n\ntype ItemListState = {\n focusIndex: number | null;\n mouseDownIndex: number | null;\n selectedRanges: Range[];\n overscanStartIndex: number;\n height: number | null;\n isDragging: boolean;\n isStuckToBottom: boolean;\n scrollOffset: number | null;\n};\n\n/**\n * Show items in a long scrollable list.\n * Can be navigated via keyboard or mouse.\n */\nexport class ItemList<T> extends PureComponent<\n ItemListProps<T>,\n ItemListState\n> {\n static CACHE_SIZE = 1000;\n\n static DEFAULT_ROW_HEIGHT = 20;\n\n // By drawing an additional 10 items on each side, tab/keyboard navigation works better (as the next element exists)\n static DEFAULT_OVERSCAN = 10;\n\n static defaultProps = {\n offset: 0,\n items: [],\n rowHeight: ItemList.DEFAULT_ROW_HEIGHT,\n\n isDeselectOnClick: true,\n\n isDoubleClickSelect: false,\n\n isDragSelect: true,\n\n isMultiSelect: false,\n\n isStickyBottom: false,\n\n disableSelect: false,\n\n onFocusChange(): void {\n // no-op\n },\n onSelect(): void {\n // no-op\n },\n onSelectionChange(): void {\n // no-op\n },\n onViewportChange(): void {\n // no-op\n },\n\n overscanCount: ItemList.DEFAULT_OVERSCAN,\n\n renderItem: ItemList.renderItem,\n selectedRanges: [],\n\n focusSelector: '.item-list-item',\n };\n\n static renderItem<P extends DefaultListItem>({\n item,\n }: RenderItemProps<P>): JSX.Element {\n return (\n <div className=\"item-list-item-content\">\n {item && (item.displayValue || item.value || `${item}`)}\n </div>\n );\n }\n\n constructor(props: ItemListProps<T>) {\n super(props);\n\n this.handleItemBlur = this.handleItemBlur.bind(this);\n this.handleItemContextMenu = this.handleItemContextMenu.bind(this);\n this.handleItemFocus = this.handleItemFocus.bind(this);\n this.handleItemDoubleClick = this.handleItemDoubleClick.bind(this);\n this.handleItemMouseDown = this.handleItemMouseDown.bind(this);\n this.handleItemMouseMove = this.handleItemMouseMove.bind(this);\n this.handleItemMouseUp = this.handleItemMouseUp.bind(this);\n this.handleItemsRendered = this.handleItemsRendered.bind(this);\n this.handleWindowMouseUp = this.handleWindowMouseUp.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.handleScroll = this.handleScroll.bind(this);\n this.handleResize = this.handleResize.bind(this);\n this.renderInnerElement = this.renderInnerElement.bind(this);\n\n this.list = React.createRef();\n this.listContainer = React.createRef();\n\n const { isStickyBottom, selectedRanges } = props;\n\n this.state = {\n focusIndex: null,\n mouseDownIndex: null,\n selectedRanges,\n overscanStartIndex: 0,\n height: null,\n isDragging: false,\n isStuckToBottom: isStickyBottom,\n scrollOffset: null,\n };\n }\n\n componentDidMount(): void {\n const { isStickyBottom } = this.props;\n if (isStickyBottom && !this.isListAtBottom()) {\n this.scrollToBottom();\n }\n }\n\n componentDidUpdate(\n prevProps: ItemListProps<T>,\n prevState: ItemListState\n ): void {\n const { selectedRanges: propSelectedRanges } = this.props;\n const {\n focusIndex,\n isStuckToBottom,\n scrollOffset,\n height,\n selectedRanges,\n } = this.state;\n if (isStuckToBottom && !this.isListAtBottom()) {\n this.scrollToBottom();\n }\n\n if (\n scrollOffset !== prevState.scrollOffset ||\n height !== prevState.height\n ) {\n this.sendViewportUpdate();\n }\n\n if (\n propSelectedRanges !== prevProps.selectedRanges &&\n propSelectedRanges !== selectedRanges\n ) {\n this.setSelectedRanges(propSelectedRanges);\n } else if (selectedRanges !== prevState.selectedRanges) {\n const { onSelectionChange } = this.props;\n onSelectionChange(selectedRanges);\n }\n\n if (focusIndex !== prevState.focusIndex) {\n const { onFocusChange } = this.props;\n onFocusChange(focusIndex);\n }\n }\n\n componentWillUnmount(): void {\n window.removeEventListener('mouseup', this.handleWindowMouseUp);\n }\n\n list: React.RefObject<List>;\n\n listContainer: React.RefObject<HTMLDivElement>;\n\n getItemSelected = memoize(\n (index: number, selectedRanges: Range[]) =>\n RangeUtils.isSelected(selectedRanges, index),\n { max: ItemList.CACHE_SIZE }\n );\n\n getCachedItem = memoize(\n (\n itemIndex: number,\n key: number,\n item: T,\n isFocused: boolean,\n isSelected: boolean,\n renderItem: RenderItemFn<T>,\n style: React.CSSProperties,\n disableSelect: boolean\n ) => {\n const content = renderItem({\n item,\n itemIndex,\n isFocused,\n isSelected,\n style,\n });\n\n return (\n <ItemListItem\n onContextMenu={this.handleItemContextMenu}\n onDoubleClick={this.handleItemDoubleClick}\n onMouseDown={this.handleItemMouseDown}\n onFocus={this.handleItemFocus}\n onBlur={this.handleItemBlur}\n disableSelect={disableSelect}\n onMouseMove={this.handleItemMouseMove}\n onMouseUp={this.handleItemMouseUp}\n isFocused={isFocused}\n isSelected={isSelected}\n itemIndex={itemIndex}\n style={style}\n key={key}\n >\n {content}\n </ItemListItem>\n );\n },\n { max: ItemList.CACHE_SIZE }\n );\n\n getOuterElement = memoize((onKeyDown: React.KeyboardEventHandler) => {\n const component = React.forwardRef<HTMLDivElement>((props, ref) => (\n // We need to add the tabIndex to make sure it is focusable, otherwise we can't get key events\n <div\n ref={ref}\n tabIndex={-1}\n onKeyDown={onKeyDown}\n role=\"presentation\"\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...props}\n />\n ));\n component.displayName = 'ItemListOuterElement';\n return component;\n });\n\n getInnerElement = memoize(() => {\n const component = React.forwardRef<HTMLDivElement>((props, ref) => (\n <div\n className=\"item-list-inner-element\"\n ref={ref}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...props}\n />\n ));\n component.displayName = 'ItemListInnerElement';\n return component;\n });\n\n getItemData = memoize(\n (items: T[], selectedRanges: Range[], renderItem: RenderItemFn<T>) => ({\n items,\n selectedRanges,\n renderItem,\n })\n );\n\n focus(): void {\n this.listContainer.current?.focus();\n }\n\n getElement(itemIndex: number): Element | null {\n if (this.listContainer.current == null) {\n return null;\n }\n\n const { focusSelector } = this.props;\n const { overscanStartIndex } = this.state;\n const elements = this.listContainer.current.querySelectorAll(focusSelector);\n const elementIndex = itemIndex - overscanStartIndex;\n return elements[elementIndex];\n }\n\n focusItem(itemIndex: number): void {\n const { disableSelect } = this.props;\n if (disableSelect) return;\n\n this.setState({ focusIndex: itemIndex });\n\n const element = this.getElement(itemIndex);\n if (element instanceof HTMLElement) {\n element.focus();\n }\n }\n\n scrollToItem(itemIndex: number): void {\n const element = this.getElement(itemIndex);\n if (element != null) {\n element.scrollIntoView({ block: 'center' });\n }\n }\n\n handleItemContextMenu(\n itemIndex: number,\n e: React.MouseEvent<HTMLDivElement>\n ): void {\n // Update the selection, but don't consume the mouse event - it will trigger the context menu\n const { selectedRanges } = this.state;\n const isSelected = RangeUtils.isSelected(selectedRanges, itemIndex);\n\n // When right-clicking, we want to maintain the current selection if the right click happened within the selection even if the modifier key isn't down\n const isModifierDown =\n isSelected || ContextActionUtils.isModifierKeyDown(e);\n this.toggleSelect(itemIndex, e.shiftKey, isModifierDown, false);\n }\n\n handleItemDoubleClick(itemIndex: number, e: React.MouseEvent): void {\n const { isDoubleClickSelect, onSelect } = this.props;\n\n if (isDoubleClickSelect) {\n this.setState(\n ({ selectedRanges }) => ({\n selectedRanges: RangeUtils.selectRange(selectedRanges, [\n itemIndex,\n itemIndex,\n ]),\n }),\n () => {\n onSelect(itemIndex, e);\n }\n );\n }\n }\n\n handleItemMouseDown(index: number, e: React.MouseEvent): void {\n const { selectedRanges } = this.state;\n\n if (\n e.target instanceof HTMLElement &&\n ['button', 'select', 'input', 'textarea'].indexOf(\n e.target.tagName.toLowerCase()\n ) !== -1\n ) {\n // allow these elements to do their own behaviours\n return;\n }\n\n if (e.button === 2 && selectedRanges.length === 0) {\n // allow right click to act as a selection if selection is empty\n this.focusItem(index);\n this.selectItem(index);\n return;\n }\n\n if (e.button != null && e.button !== 0) {\n return;\n }\n\n this.setState({ mouseDownIndex: index });\n\n window.addEventListener('mouseup', this.handleWindowMouseUp);\n\n // Leave selection until mouse up, to allow for dragging behaviour\n }\n\n handleItemBlur(itemIndex: number, e: React.FocusEvent): void {\n log.debug2('item blur', itemIndex, e.currentTarget, e.relatedTarget);\n if (\n !e.relatedTarget ||\n (this.listContainer.current &&\n e.relatedTarget instanceof HTMLElement &&\n !this.listContainer.current.contains(e.relatedTarget))\n ) {\n // Next focused element is outside of the ItemList\n this.setState({ focusIndex: null });\n }\n }\n\n handleItemFocus(itemIndex: number, e: React.FocusEvent): void {\n log.debug2('item focus', itemIndex, e.target);\n this.setState(state => {\n const { focusIndex } = state;\n if (focusIndex !== itemIndex) {\n return { focusIndex: itemIndex };\n }\n return null;\n });\n }\n\n handleItemMouseMove(itemIndex: number, e: React.MouseEvent): void {\n const { isDragSelect, isMultiSelect, disableSelect } = this.props;\n const { mouseDownIndex, selectedRanges } = this.state;\n\n if (mouseDownIndex == null || disableSelect) return;\n\n this.setState({ isDragging: true });\n\n if (isDragSelect || mouseDownIndex === itemIndex) {\n this.focusItem(itemIndex);\n\n if (isMultiSelect) {\n if (\n !isDragSelect &&\n !this.getItemSelected(itemIndex, selectedRanges) &&\n !ContextActionUtils.isModifierKeyDown(e)\n ) {\n // If there's already a selection and they select outside of that range while dragging without a modifier key, start a new selection with just the new item\n this.deselectAll();\n }\n this.selectRange([\n Math.min(mouseDownIndex, itemIndex),\n Math.max(mouseDownIndex, itemIndex),\n ]);\n } else {\n this.toggleSelect(\n itemIndex,\n e.shiftKey,\n ContextActionUtils.isModifierKeyDown(e),\n false\n );\n }\n }\n }\n\n handleItemMouseUp(index: number, e: React.MouseEvent): void {\n const { isDeselectOnClick, isDoubleClickSelect, onSelect } = this.props;\n const { mouseDownIndex, isDragging } = this.state;\n\n if (\n e.target instanceof HTMLElement &&\n ['button', 'select', 'input', 'textarea'].indexOf(\n e.target.tagName.toLowerCase()\n ) !== -1\n ) {\n return;\n }\n\n if (mouseDownIndex === index && !isDragging) {\n const isShiftDown = e.shiftKey;\n const isModifierDown = ContextActionUtils.isModifierKeyDown(e);\n this.focusItem(index);\n this.toggleSelect(index, isShiftDown, isModifierDown, isDeselectOnClick);\n\n if (!isDoubleClickSelect && !isShiftDown && !isModifierDown) {\n onSelect(index, e);\n }\n }\n\n this.resetMouseState();\n }\n\n handleItemsRendered({ overscanStartIndex }: ListOnItemsRenderedProps): void {\n this.setState({ overscanStartIndex });\n }\n\n handleResize({ height }: Size): void {\n this.setState({ height });\n }\n\n handleMouseLeave(): void {\n this.setState({ mouseDownIndex: null });\n }\n\n handleWindowMouseUp(): void {\n this.resetMouseState();\n window.removeEventListener('mouseup', this.handleWindowMouseUp);\n }\n\n handleKeyDown(e: React.KeyboardEvent): void {\n const { isMultiSelect, itemCount, onSelect } = this.props;\n const { focusIndex: oldFocus } = this.state;\n let newFocus = oldFocus;\n\n if (e.key === 'Enter' || e.key === ' ') {\n if (!isMultiSelect && newFocus != null) {\n this.setState({ selectedRanges: [[newFocus, newFocus]] }, () => {\n if (newFocus != null) {\n onSelect(newFocus, e);\n }\n });\n }\n return;\n }\n\n if (e.key === 'ArrowUp') {\n if (newFocus != null && newFocus >= 0) {\n newFocus = Math.max(0, newFocus - 1);\n } else {\n newFocus = itemCount - 1;\n }\n } else if (e.key === 'ArrowDown') {\n if (newFocus != null && newFocus >= 0) {\n newFocus = Math.min(newFocus + 1, itemCount - 1);\n } else {\n newFocus = 0;\n }\n } else {\n return;\n }\n\n if (oldFocus !== newFocus) {\n e.stopPropagation();\n e.preventDefault();\n\n this.focusItem(newFocus);\n\n const { selectedRanges } = this.state;\n if (e.shiftKey && selectedRanges.length > 0) {\n const lastRange = selectedRanges[selectedRanges.length - 1];\n this.selectRange([\n Math.min(newFocus, lastRange[0]),\n Math.max(newFocus, lastRange[1]),\n ]);\n } else {\n this.deselectAll();\n if (newFocus !== null) {\n this.selectItem(newFocus);\n } else {\n this.listContainer.current?.focus();\n }\n }\n\n this.scrollIntoView(newFocus);\n }\n }\n\n handleScroll({\n scrollUpdateWasRequested,\n scrollOffset,\n }: ListOnScrollProps): void {\n this.setState(state => {\n if (scrollUpdateWasRequested) {\n // The scroll was caused by scrollTo() or scrollToItem()\n // Don't re-calc isStuckToBottom\n return { scrollOffset } as ItemListState;\n }\n\n const { isStickyBottom } = this.props;\n const { height } = state;\n\n const isStuckToBottom =\n isStickyBottom && this.isListAtBottom({ scrollOffset, height });\n return { isStuckToBottom, scrollOffset } as ItemListState;\n });\n }\n\n resetMouseState(): void {\n this.setState({ mouseDownIndex: null, isDragging: false });\n }\n\n scrollToBottom(): void {\n const { itemCount } = this.props;\n if (this.list.current) {\n this.list.current.scrollToItem(itemCount);\n }\n }\n\n scrollIntoView(itemIndex: number): void {\n if (this.list.current) {\n this.list.current.scrollToItem(itemIndex);\n }\n }\n\n /**\n * @param index The index to toggle selection for\n * @param isShiftDown True if the shift modifier key is down\n * @param isModifierDown True if the meta modifier key is down\n * @param isDeselectable True if item should be deselected if already selected\n */\n toggleSelect(\n index: number,\n isShiftDown: boolean,\n isModifierDown: boolean,\n isDeselectable = true\n ): void {\n const { isMultiSelect } = this.props;\n const { selectedRanges } = this.state;\n\n if (isMultiSelect && isShiftDown && selectedRanges.length > 0) {\n const lastRange = selectedRanges[selectedRanges.length - 1];\n this.selectRange([\n Math.min(lastRange[0], index),\n Math.max(index, lastRange[1]),\n ]);\n } else if (\n isMultiSelect &&\n selectedRanges.length === 1 &&\n selectedRanges[0][0] === index &&\n selectedRanges[0][1] === index\n ) {\n if (isDeselectable) {\n this.deselectItem(index);\n }\n } else if (isMultiSelect && isModifierDown) {\n if (this.getItemSelected(index, selectedRanges)) {\n if (isDeselectable) {\n this.deselectItem(index);\n }\n } else {\n this.selectItem(index);\n }\n } else {\n this.deselectAll();\n this.selectItem(index);\n }\n }\n\n deselectAll(): void {\n const { itemCount } = this.props;\n this.deselectRange([0, itemCount]);\n }\n\n deselectItem(index: number): void {\n this.deselectRange([index, index]);\n }\n\n deselectRange(range: Range): void {\n RangeUtils.validateRange(range);\n\n this.setState(({ selectedRanges }) => ({\n selectedRanges: RangeUtils.deselectRange(selectedRanges, range),\n }));\n }\n\n selectItem(index: number): void {\n const { disableSelect } = this.props;\n if (disableSelect) return;\n\n this.selectRange([index, index]);\n }\n\n selectRange(range: Range): void {\n RangeUtils.validateRange(range);\n\n this.setState(({ selectedRanges }) => ({\n selectedRanges: RangeUtils.selectRange(selectedRanges, range),\n }));\n }\n\n setSelectedRanges(selectedRanges: Range[]): void {\n this.setState({ selectedRanges });\n }\n\n sendViewportUpdate(): void {\n const { scrollOffset, height } = this.state;\n if (scrollOffset != null && height != null) {\n const { onViewportChange, rowHeight } = this.props;\n const topRow = Math.floor(scrollOffset / rowHeight);\n const bottomRow = topRow + Math.ceil(height / rowHeight);\n onViewportChange(topRow, bottomRow);\n }\n }\n\n isListAtBottom(\n {\n scrollOffset,\n height,\n }: Pick<ItemListState, 'scrollOffset' | 'height'> = this.state\n ): boolean {\n if (height == null || scrollOffset == null) {\n return false;\n }\n\n const { itemCount, rowHeight } = this.props;\n return scrollOffset + height >= itemCount * rowHeight;\n }\n\n renderInnerElement({\n index: itemIndex,\n style,\n }: {\n index: number;\n style: React.CSSProperties;\n }): React.ReactElement | null {\n const { items, offset, renderItem, disableSelect } = this.props;\n const { focusIndex, selectedRanges } = this.state;\n if (itemIndex < offset || itemIndex >= offset + items.length) {\n return null;\n }\n\n const item = items[itemIndex - offset];\n return this.getCachedItem(\n itemIndex,\n itemIndex,\n item,\n itemIndex === focusIndex && !disableSelect,\n this.getItemSelected(itemIndex, selectedRanges),\n renderItem,\n style,\n disableSelect\n );\n }\n\n render(): JSX.Element {\n const {\n items,\n itemCount,\n overscanCount,\n renderItem,\n rowHeight,\n } = this.props;\n const { selectedRanges } = this.state;\n return (\n <AutoSizer className=\"item-list-auto-sizer\" onResize={this.handleResize}>\n {({ width, height }) => (\n <List\n className=\"item-list-scroll-pane\"\n height={height}\n width={width}\n itemCount={itemCount}\n itemSize={rowHeight}\n // This prop isn't actually used by us, it is passed to the render function by react-window\n // Used here to force a re-render of the List component.\n // Otherwise it doesn't know to call the render again when selection or renderItem changes\n itemData={this.getItemData(items, selectedRanges, renderItem)}\n onScroll={this.handleScroll}\n onItemsRendered={this.handleItemsRendered}\n ref={this.list}\n outerElementType={this.getOuterElement(this.handleKeyDown)}\n outerRef={this.listContainer}\n innerElementType={this.getInnerElement()}\n overscanCount={overscanCount}\n >\n {this.renderInnerElement}\n </List>\n )}\n </AutoSizer>\n );\n }\n}\n\nexport default ItemList;\n"],"file":"ItemList.js"}
@@ -14,6 +14,9 @@ class ItemListItem extends Component {
14
14
 
15
15
  constructor(props) {
16
16
  super(props);
17
+
18
+ _defineProperty(this, "itemRef", void 0);
19
+
17
20
  this.handleBlur = this.handleBlur.bind(this);
18
21
  this.handleFocus = this.handleFocus.bind(this);
19
22
  this.handleClick = this.handleClick.bind(this);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ItemListItem.tsx"],"names":["React","Component","classNames","Log","log","module","ItemListItem","handleKeyDown","constructor","props","handleBlur","bind","handleFocus","handleClick","handleContextMenu","handleDragStart","handleDrag","handleDragOver","handleDragEnd","handleDrop","handleDoubleClick","handleMouseDown","handleMouseMove","handleMouseUp","itemRef","createRef","e","itemIndex","onBlur","onFocus","onClick","onContextMenu","onDragStart","onDrag","preventDefault","onDragOver","onDragEnd","onDrop","onDoubleClick","onMouseMove","onMouseDown","onMouseUp","render","isDraggable","isFocused","isSelected","style","children","active","disableSelect"],"mappings":"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","sourcesContent":["import React, { Component } from 'react';\nimport classNames from 'classnames';\nimport './ItemListItem.scss';\nimport Log from '@deephaven/log';\n\nconst log = Log.module('ItemListItem');\n\ninterface ItemListItemProps {\n isDraggable: boolean;\n isFocused: boolean;\n isSelected: boolean;\n itemIndex: number;\n disableSelect: boolean;\n onBlur(index: number, e: React.FocusEvent<HTMLDivElement>): void;\n onClick(index: number, e: React.MouseEvent<HTMLDivElement>): void;\n onContextMenu(index: number, e: React.MouseEvent<HTMLDivElement>): void;\n onDragStart(index: number, e: React.DragEvent<HTMLDivElement>): void;\n onDrag(index: number, e: React.DragEvent<HTMLDivElement>): void;\n onDragOver(index: number, e: React.DragEvent<HTMLDivElement>): void;\n onDragEnd(index: number, e: React.DragEvent<HTMLDivElement>): void;\n onDrop(index: number, e: React.DragEvent<HTMLDivElement>): void;\n onDoubleClick(index: number, e: React.MouseEvent<HTMLDivElement>): void;\n onFocus(index: number, e: React.FocusEvent<HTMLDivElement>): void;\n onMouseDown(index: number, e: React.MouseEvent<HTMLDivElement>): void;\n onMouseMove(index: number, e: React.MouseEvent<HTMLDivElement>): void;\n onMouseUp(index: number, e: React.MouseEvent<HTMLDivElement>): void;\n style: React.CSSProperties;\n children: React.ReactNode;\n}\n\nclass ItemListItem extends Component<ItemListItemProps, Record<string, never>> {\n static defaultProps = {\n children: null,\n isDraggable: false,\n isFocused: false,\n isSelected: false,\n itemIndex: 0,\n disableSelect: false,\n\n onBlur(): void {\n // no-op\n },\n onClick(): void {\n // no-op\n },\n onContextMenu(): void {\n // no-op\n },\n onDragStart(): void {\n // no-op\n },\n onDrag(): void {\n // no-op\n },\n onDragOver(): void {\n // no-op\n },\n onDragEnd(): void {\n // no-op\n },\n onDrop(): void {\n // no-op\n },\n onDoubleClick(): void {\n // no-op\n },\n onFocus(): void {\n // no-op\n },\n onMouseDown(): void {\n // no-op\n },\n onMouseMove(): void {\n // no-op\n },\n onMouseUp(): void {\n // no-op\n },\n style: {},\n };\n\n static handleKeyDown(): boolean {\n log.log('ItemListItem.handleKeyDown false');\n return false;\n }\n\n constructor(props: ItemListItemProps) {\n super(props);\n\n this.handleBlur = this.handleBlur.bind(this);\n this.handleFocus = this.handleFocus.bind(this);\n this.handleClick = this.handleClick.bind(this);\n this.handleContextMenu = this.handleContextMenu.bind(this);\n this.handleDragStart = this.handleDragStart.bind(this);\n this.handleDrag = this.handleDrag.bind(this);\n this.handleDragOver = this.handleDragOver.bind(this);\n this.handleDragEnd = this.handleDragEnd.bind(this);\n this.handleDrop = this.handleDrop.bind(this);\n this.handleDoubleClick = this.handleDoubleClick.bind(this);\n this.handleMouseDown = this.handleMouseDown.bind(this);\n this.handleMouseMove = this.handleMouseMove.bind(this);\n this.handleMouseUp = this.handleMouseUp.bind(this);\n\n this.itemRef = React.createRef();\n }\n\n itemRef: React.RefObject<HTMLDivElement>;\n\n handleBlur(e: React.FocusEvent<HTMLDivElement>): void {\n const { itemIndex, onBlur } = this.props;\n onBlur(itemIndex, e);\n }\n\n handleFocus(e: React.FocusEvent<HTMLDivElement>): void {\n const { itemIndex, onFocus } = this.props;\n onFocus(itemIndex, e);\n }\n\n handleClick(e: React.MouseEvent<HTMLDivElement>): void {\n const { itemIndex, onClick } = this.props;\n onClick(itemIndex, e);\n }\n\n handleContextMenu(e: React.MouseEvent<HTMLDivElement>): void {\n const { itemIndex, onContextMenu } = this.props;\n onContextMenu(itemIndex, e);\n }\n\n handleDragStart(e: React.DragEvent<HTMLDivElement>): void {\n const { itemIndex, onDragStart } = this.props;\n onDragStart(itemIndex, e);\n }\n\n handleDrag(e: React.DragEvent<HTMLDivElement>): void {\n const { itemIndex, onDrag } = this.props;\n onDrag(itemIndex, e);\n }\n\n handleDragOver(e: React.DragEvent<HTMLDivElement>): void {\n // Have to call preventDefault otherwise onDrop won't get triggered\n e.preventDefault();\n const { itemIndex, onDragOver } = this.props;\n onDragOver(itemIndex, e);\n }\n\n handleDragEnd(e: React.DragEvent<HTMLDivElement>): void {\n const { itemIndex, onDragEnd } = this.props;\n onDragEnd(itemIndex, e);\n }\n\n handleDrop(e: React.DragEvent<HTMLDivElement>): void {\n const { itemIndex, onDrop } = this.props;\n onDrop(itemIndex, e);\n }\n\n handleDoubleClick(e: React.MouseEvent<HTMLDivElement>): void {\n const { itemIndex, onDoubleClick } = this.props;\n onDoubleClick(itemIndex, e);\n }\n\n handleMouseMove(e: React.MouseEvent<HTMLDivElement>): void {\n const { itemIndex, onMouseMove } = this.props;\n onMouseMove(itemIndex, e);\n }\n\n handleMouseDown(e: React.MouseEvent<HTMLDivElement>): void {\n const { itemIndex, onMouseDown } = this.props;\n onMouseDown(itemIndex, e);\n }\n\n handleMouseUp(e: React.MouseEvent<HTMLDivElement>): void {\n const { itemIndex, onMouseUp } = this.props;\n onMouseUp(itemIndex, e);\n }\n\n render(): JSX.Element {\n const { isDraggable, isFocused, isSelected, style, children } = this.props;\n return (\n <div\n className={classNames(\n 'item-list-item',\n { active: isSelected },\n { 'is-focused': isFocused },\n { 'is-draggable': isDraggable }\n )}\n onKeyDown={ItemListItem.handleKeyDown}\n onContextMenu={this.handleContextMenu}\n onClick={this.handleClick}\n onDrag={this.handleDrag}\n onDragStart={this.handleDragStart}\n onDragOver={this.handleDragOver}\n onDragEnd={this.handleDragEnd}\n onDrop={this.handleDrop}\n onDoubleClick={this.handleDoubleClick}\n onMouseDown={this.handleMouseDown}\n onMouseMove={this.handleMouseMove}\n onMouseUp={this.handleMouseUp}\n tabIndex={-1}\n ref={this.itemRef}\n role=\"presentation\"\n style={style}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n draggable={isDraggable}\n >\n {children}\n </div>\n );\n }\n}\n\nexport default ItemListItem;\n"],"file":"ItemListItem.js"}
1
+ {"version":3,"sources":["../src/ItemListItem.tsx"],"names":["React","Component","classNames","Log","log","module","ItemListItem","handleKeyDown","constructor","props","handleBlur","bind","handleFocus","handleClick","handleContextMenu","handleDragStart","handleDrag","handleDragOver","handleDragEnd","handleDrop","handleDoubleClick","handleMouseDown","handleMouseMove","handleMouseUp","itemRef","createRef","e","itemIndex","onBlur","onFocus","onClick","onContextMenu","onDragStart","onDrag","preventDefault","onDragOver","onDragEnd","onDrop","onDoubleClick","onMouseMove","onMouseDown","onMouseUp","render","isDraggable","isFocused","isSelected","style","children","active","disableSelect"],"mappings":"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","sourcesContent":["import React, { Component } from 'react';\nimport classNames from 'classnames';\nimport './ItemListItem.scss';\nimport Log from '@deephaven/log';\n\nconst log = Log.module('ItemListItem');\n\ninterface ItemListItemProps {\n isDraggable: boolean;\n isFocused: boolean;\n isSelected: boolean;\n itemIndex: number;\n disableSelect: boolean;\n onBlur(index: number, e: React.FocusEvent<HTMLDivElement>): void;\n onClick(index: number, e: React.MouseEvent<HTMLDivElement>): void;\n onContextMenu(index: number, e: React.MouseEvent<HTMLDivElement>): void;\n onDragStart(index: number, e: React.DragEvent<HTMLDivElement>): void;\n onDrag(index: number, e: React.DragEvent<HTMLDivElement>): void;\n onDragOver(index: number, e: React.DragEvent<HTMLDivElement>): void;\n onDragEnd(index: number, e: React.DragEvent<HTMLDivElement>): void;\n onDrop(index: number, e: React.DragEvent<HTMLDivElement>): void;\n onDoubleClick(index: number, e: React.MouseEvent<HTMLDivElement>): void;\n onFocus(index: number, e: React.FocusEvent<HTMLDivElement>): void;\n onMouseDown(index: number, e: React.MouseEvent<HTMLDivElement>): void;\n onMouseMove(index: number, e: React.MouseEvent<HTMLDivElement>): void;\n onMouseUp(index: number, e: React.MouseEvent<HTMLDivElement>): void;\n style: React.CSSProperties;\n children: React.ReactNode;\n}\n\nclass ItemListItem extends Component<ItemListItemProps, Record<string, never>> {\n static defaultProps = {\n children: null,\n isDraggable: false,\n isFocused: false,\n isSelected: false,\n itemIndex: 0,\n disableSelect: false,\n\n onBlur(): void {\n // no-op\n },\n onClick(): void {\n // no-op\n },\n onContextMenu(): void {\n // no-op\n },\n onDragStart(): void {\n // no-op\n },\n onDrag(): void {\n // no-op\n },\n onDragOver(): void {\n // no-op\n },\n onDragEnd(): void {\n // no-op\n },\n onDrop(): void {\n // no-op\n },\n onDoubleClick(): void {\n // no-op\n },\n onFocus(): void {\n // no-op\n },\n onMouseDown(): void {\n // no-op\n },\n onMouseMove(): void {\n // no-op\n },\n onMouseUp(): void {\n // no-op\n },\n style: {},\n };\n\n static handleKeyDown(): boolean {\n log.log('ItemListItem.handleKeyDown false');\n return false;\n }\n\n constructor(props: ItemListItemProps) {\n super(props);\n\n this.handleBlur = this.handleBlur.bind(this);\n this.handleFocus = this.handleFocus.bind(this);\n this.handleClick = this.handleClick.bind(this);\n this.handleContextMenu = this.handleContextMenu.bind(this);\n this.handleDragStart = this.handleDragStart.bind(this);\n this.handleDrag = this.handleDrag.bind(this);\n this.handleDragOver = this.handleDragOver.bind(this);\n this.handleDragEnd = this.handleDragEnd.bind(this);\n this.handleDrop = this.handleDrop.bind(this);\n this.handleDoubleClick = this.handleDoubleClick.bind(this);\n this.handleMouseDown = this.handleMouseDown.bind(this);\n this.handleMouseMove = this.handleMouseMove.bind(this);\n this.handleMouseUp = this.handleMouseUp.bind(this);\n\n this.itemRef = React.createRef();\n }\n\n itemRef: React.RefObject<HTMLDivElement>;\n\n handleBlur(e: React.FocusEvent<HTMLDivElement>): void {\n const { itemIndex, onBlur } = this.props;\n onBlur(itemIndex, e);\n }\n\n handleFocus(e: React.FocusEvent<HTMLDivElement>): void {\n const { itemIndex, onFocus } = this.props;\n onFocus(itemIndex, e);\n }\n\n handleClick(e: React.MouseEvent<HTMLDivElement>): void {\n const { itemIndex, onClick } = this.props;\n onClick(itemIndex, e);\n }\n\n handleContextMenu(e: React.MouseEvent<HTMLDivElement>): void {\n const { itemIndex, onContextMenu } = this.props;\n onContextMenu(itemIndex, e);\n }\n\n handleDragStart(e: React.DragEvent<HTMLDivElement>): void {\n const { itemIndex, onDragStart } = this.props;\n onDragStart(itemIndex, e);\n }\n\n handleDrag(e: React.DragEvent<HTMLDivElement>): void {\n const { itemIndex, onDrag } = this.props;\n onDrag(itemIndex, e);\n }\n\n handleDragOver(e: React.DragEvent<HTMLDivElement>): void {\n // Have to call preventDefault otherwise onDrop won't get triggered\n e.preventDefault();\n const { itemIndex, onDragOver } = this.props;\n onDragOver(itemIndex, e);\n }\n\n handleDragEnd(e: React.DragEvent<HTMLDivElement>): void {\n const { itemIndex, onDragEnd } = this.props;\n onDragEnd(itemIndex, e);\n }\n\n handleDrop(e: React.DragEvent<HTMLDivElement>): void {\n const { itemIndex, onDrop } = this.props;\n onDrop(itemIndex, e);\n }\n\n handleDoubleClick(e: React.MouseEvent<HTMLDivElement>): void {\n const { itemIndex, onDoubleClick } = this.props;\n onDoubleClick(itemIndex, e);\n }\n\n handleMouseMove(e: React.MouseEvent<HTMLDivElement>): void {\n const { itemIndex, onMouseMove } = this.props;\n onMouseMove(itemIndex, e);\n }\n\n handleMouseDown(e: React.MouseEvent<HTMLDivElement>): void {\n const { itemIndex, onMouseDown } = this.props;\n onMouseDown(itemIndex, e);\n }\n\n handleMouseUp(e: React.MouseEvent<HTMLDivElement>): void {\n const { itemIndex, onMouseUp } = this.props;\n onMouseUp(itemIndex, e);\n }\n\n render(): JSX.Element {\n const { isDraggable, isFocused, isSelected, style, children } = this.props;\n return (\n <div\n className={classNames(\n 'item-list-item',\n { active: isSelected },\n { 'is-focused': isFocused },\n { 'is-draggable': isDraggable }\n )}\n onKeyDown={ItemListItem.handleKeyDown}\n onContextMenu={this.handleContextMenu}\n onClick={this.handleClick}\n onDrag={this.handleDrag}\n onDragStart={this.handleDragStart}\n onDragOver={this.handleDragOver}\n onDragEnd={this.handleDragEnd}\n onDrop={this.handleDrop}\n onDoubleClick={this.handleDoubleClick}\n onMouseDown={this.handleMouseDown}\n onMouseMove={this.handleMouseMove}\n onMouseUp={this.handleMouseUp}\n tabIndex={-1}\n ref={this.itemRef}\n role=\"presentation\"\n style={style}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n draggable={isDraggable}\n >\n {children}\n </div>\n );\n }\n}\n\nexport default ItemListItem;\n"],"file":"ItemListItem.js"}
@@ -9,6 +9,9 @@ import "./SearchInput.css";
9
9
  class SearchInput extends PureComponent {
10
10
  constructor(props) {
11
11
  super(props);
12
+
13
+ _defineProperty(this, "inputField", void 0);
14
+
12
15
  this.inputField = /*#__PURE__*/React.createRef();
13
16
  }
14
17
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/SearchInput.tsx"],"names":["React","PureComponent","FontAwesomeIcon","vsSearch","classNames","SearchInput","constructor","props","inputField","createRef","focus","current","render","value","placeholder","onChange","className","matchCount","id","onKeyDown"],"mappings":";;AAAA,OAAOA,KAAP,IAAgBC,aAAhB,QAAqC,OAArC;AACA,SAASC,eAAT,QAAgC,gCAAhC;AACA,SAASC,QAAT,QAAyB,kBAAzB;AACA,OAAOC,UAAP,MAAuB,YAAvB;;;AAaA,MAAMC,WAAN,SAA0BJ,aAA1B,CAA0D;AAWxDK,EAAAA,WAAW,CAACC,KAAD,EAA0B;AACnC,UAAMA,KAAN;AACA,SAAKC,UAAL,gBAAkBR,KAAK,CAACS,SAAN,EAAlB;AACD;;AAIDC,EAAAA,KAAK,GAAS;AAAA;;AACZ,kCAAKF,UAAL,CAAgBG,OAAhB,gFAAyBD,KAAzB;AACD;;AAEDE,EAAAA,MAAM,GAAgB;AACpB,QAAM;AACJC,MAAAA,KADI;AAEJC,MAAAA,WAFI;AAGJC,MAAAA,QAHI;AAIJC,MAAAA,SAJI;AAKJC,MAAAA,UALI;AAMJC,MAAAA,EANI;AAOJC,MAAAA;AAPI,QAQF,KAAKZ,KART;AASA,wBACE;AAAK,MAAA,SAAS,EAAEH,UAAU,CAAC,cAAD,EAAiBY,SAAjB;AAA1B,oBACE;AACE,MAAA,IAAI,EAAC,QADP;AAEE,MAAA,KAAK,EAAEH,KAFT;AAGE,MAAA,QAAQ,EAAEE,QAHZ;AAIE,MAAA,SAAS,EAAEI,SAJb;AAKE,MAAA,SAAS,EAAC,cALZ;AAME,MAAA,WAAW,EAAEL,WANf;AAOE,MAAA,GAAG,EAAE,KAAKN,UAPZ;AAQE,MAAA,EAAE,EAAEU;AARN,MADF,EAWGD,UAAU,IAAI,IAAd,iBACC;AAAM,MAAA,SAAS,EAAC;AAAhB,OAAgCA,UAAhC,CAZJ,eAcE;AAAM,MAAA,SAAS,EAAC;AAAhB,oBACE,oBAAC,eAAD;AAAiB,MAAA,IAAI,EAAEd;AAAvB,MADF,CAdF,CADF;AAoBD;;AApDuD;;gBAApDE,W,kBACkB;AACpBS,EAAAA,WAAW,EAAE,QADO;AAEpBE,EAAAA,SAAS,EAAE,EAFS;AAGpBC,EAAAA,UAAU,EAAE,IAHQ;;AAIpBE,EAAAA,SAAS,GAAS,CAChB;AACD,GANmB;;AAOpBD,EAAAA,EAAE,EAAE;AAPgB,C;;AAsDxB,eAAeb,WAAf","sourcesContent":["import React, { PureComponent } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsSearch } from '@deephaven/icons';\nimport classNames from 'classnames';\nimport './SearchInput.scss';\n\ninterface SearchInputProps {\n value: string;\n placeholder: string;\n onChange: React.ChangeEventHandler<HTMLInputElement>;\n onKeyDown: React.KeyboardEventHandler<HTMLInputElement>;\n className: string;\n matchCount: number;\n id: string;\n}\n\nclass SearchInput extends PureComponent<SearchInputProps> {\n static defaultProps = {\n placeholder: 'Search',\n className: '',\n matchCount: null,\n onKeyDown(): void {\n // no-op\n },\n id: '',\n };\n\n constructor(props: SearchInputProps) {\n super(props);\n this.inputField = React.createRef();\n }\n\n inputField: React.RefObject<HTMLInputElement>;\n\n focus(): void {\n this.inputField.current?.focus();\n }\n\n render(): JSX.Element {\n const {\n value,\n placeholder,\n onChange,\n className,\n matchCount,\n id,\n onKeyDown,\n } = this.props;\n return (\n <div className={classNames('search-group', className)}>\n <input\n type=\"search\"\n value={value}\n onChange={onChange}\n onKeyDown={onKeyDown}\n className=\"form-control\"\n placeholder={placeholder}\n ref={this.inputField}\n id={id}\n />\n {matchCount != null && (\n <span className=\"search-match\">{matchCount}</span>\n )}\n <span className=\"search-icon\">\n <FontAwesomeIcon icon={vsSearch} />\n </span>\n </div>\n );\n }\n}\n\nexport default SearchInput;\n"],"file":"SearchInput.js"}
1
+ {"version":3,"sources":["../src/SearchInput.tsx"],"names":["React","PureComponent","FontAwesomeIcon","vsSearch","classNames","SearchInput","constructor","props","inputField","createRef","focus","current","render","value","placeholder","onChange","className","matchCount","id","onKeyDown"],"mappings":";;AAAA,OAAOA,KAAP,IAAgBC,aAAhB,QAAqC,OAArC;AACA,SAASC,eAAT,QAAgC,gCAAhC;AACA,SAASC,QAAT,QAAyB,kBAAzB;AACA,OAAOC,UAAP,MAAuB,YAAvB;;;AAaA,MAAMC,WAAN,SAA0BJ,aAA1B,CAA0D;AAWxDK,EAAAA,WAAW,CAACC,KAAD,EAA0B;AACnC,UAAMA,KAAN;;AADmC;;AAEnC,SAAKC,UAAL,gBAAkBR,KAAK,CAACS,SAAN,EAAlB;AACD;;AAIDC,EAAAA,KAAK,GAAS;AAAA;;AACZ,kCAAKF,UAAL,CAAgBG,OAAhB,gFAAyBD,KAAzB;AACD;;AAEDE,EAAAA,MAAM,GAAgB;AACpB,QAAM;AACJC,MAAAA,KADI;AAEJC,MAAAA,WAFI;AAGJC,MAAAA,QAHI;AAIJC,MAAAA,SAJI;AAKJC,MAAAA,UALI;AAMJC,MAAAA,EANI;AAOJC,MAAAA;AAPI,QAQF,KAAKZ,KART;AASA,wBACE;AAAK,MAAA,SAAS,EAAEH,UAAU,CAAC,cAAD,EAAiBY,SAAjB;AAA1B,oBACE;AACE,MAAA,IAAI,EAAC,QADP;AAEE,MAAA,KAAK,EAAEH,KAFT;AAGE,MAAA,QAAQ,EAAEE,QAHZ;AAIE,MAAA,SAAS,EAAEI,SAJb;AAKE,MAAA,SAAS,EAAC,cALZ;AAME,MAAA,WAAW,EAAEL,WANf;AAOE,MAAA,GAAG,EAAE,KAAKN,UAPZ;AAQE,MAAA,EAAE,EAAEU;AARN,MADF,EAWGD,UAAU,IAAI,IAAd,iBACC;AAAM,MAAA,SAAS,EAAC;AAAhB,OAAgCA,UAAhC,CAZJ,eAcE;AAAM,MAAA,SAAS,EAAC;AAAhB,oBACE,oBAAC,eAAD;AAAiB,MAAA,IAAI,EAAEd;AAAvB,MADF,CAdF,CADF;AAoBD;;AApDuD;;gBAApDE,W,kBACkB;AACpBS,EAAAA,WAAW,EAAE,QADO;AAEpBE,EAAAA,SAAS,EAAE,EAFS;AAGpBC,EAAAA,UAAU,EAAE,IAHQ;;AAIpBE,EAAAA,SAAS,GAAS,CAChB;AACD,GANmB;;AAOpBD,EAAAA,EAAE,EAAE;AAPgB,C;;AAsDxB,eAAeb,WAAf","sourcesContent":["import React, { PureComponent } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsSearch } from '@deephaven/icons';\nimport classNames from 'classnames';\nimport './SearchInput.scss';\n\ninterface SearchInputProps {\n value: string;\n placeholder: string;\n onChange: React.ChangeEventHandler<HTMLInputElement>;\n onKeyDown: React.KeyboardEventHandler<HTMLInputElement>;\n className: string;\n matchCount: number;\n id: string;\n}\n\nclass SearchInput extends PureComponent<SearchInputProps> {\n static defaultProps = {\n placeholder: 'Search',\n className: '',\n matchCount: null,\n onKeyDown(): void {\n // no-op\n },\n id: '',\n };\n\n constructor(props: SearchInputProps) {\n super(props);\n this.inputField = React.createRef();\n }\n\n inputField: React.RefObject<HTMLInputElement>;\n\n focus(): void {\n this.inputField.current?.focus();\n }\n\n render(): JSX.Element {\n const {\n value,\n placeholder,\n onChange,\n className,\n matchCount,\n id,\n onKeyDown,\n } = this.props;\n return (\n <div className={classNames('search-group', className)}>\n <input\n type=\"search\"\n value={value}\n onChange={onChange}\n onKeyDown={onKeyDown}\n className=\"form-control\"\n placeholder={placeholder}\n ref={this.inputField}\n id={id}\n />\n {matchCount != null && (\n <span className=\"search-match\">{matchCount}</span>\n )}\n <span className=\"search-icon\">\n <FontAwesomeIcon icon={vsSearch} />\n </span>\n </div>\n );\n }\n}\n\nexport default SearchInput;\n"],"file":"SearchInput.js"}
@@ -13,6 +13,12 @@ class SelectValueList extends PureComponent {
13
13
  constructor(props) {
14
14
  super(props);
15
15
 
16
+ _defineProperty(this, "list", void 0);
17
+
18
+ _defineProperty(this, "topRow", void 0);
19
+
20
+ _defineProperty(this, "bottomRow", void 0);
21
+
16
22
  _defineProperty(this, "getCachedItem", memoize((itemIndex, key, value, displayValue, rowHeight, isSelected, disabled) => {
17
23
  var style = {
18
24
  height: rowHeight
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/SelectValueList.tsx"],"names":["React","PureComponent","memoize","Checkbox","SelectValueList","constructor","props","itemIndex","key","value","displayValue","rowHeight","isSelected","disabled","style","height","text","handleSelect","max","items","offset","itemElements","i","length","item","element","getCachedItem","push","handleScroll","bind","list","createRef","topRow","bottomRow","componentDidMount","sendViewportUpdate","componentDidUpdate","onSelect","visibleItemIndex","current","clientHeight","onViewportChange","top","scrollTop","bottom","Math","floor","ceil","render","itemCount","getCachedItems","position","left"],"mappings":"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","sourcesContent":["import React, { PureComponent } from 'react';\nimport './SelectValueList.scss';\nimport memoize from 'memoizee';\nimport Checkbox from './Checkbox';\n\ninterface SelectItem<T> {\n value: T;\n displayValue?: string;\n isSelected: boolean;\n}\n\ntype SelectValueListProps<T> = {\n disabled: boolean;\n // Total item count\n itemCount: number;\n rowHeight: number;\n\n // Offset of the top item in the items array\n offset: number;\n items: SelectItem<T>[];\n\n onSelect(itemIndex: number, value: T | null): void;\n onViewportChange(topRow: number, bottomRow: number): void;\n};\n\n/**\n * Select values from a long scrollable list.\n * Swaps items in and out for infinite scrolling\n */\nclass SelectValueList<T> extends PureComponent<SelectValueListProps<T>> {\n static defaultProps = {\n disabled: false,\n rowHeight: 21,\n };\n\n constructor(props: SelectValueListProps<T>) {\n super(props);\n\n this.handleScroll = this.handleScroll.bind(this);\n this.handleSelect = this.handleSelect.bind(this);\n\n this.list = React.createRef();\n this.topRow = null;\n this.bottomRow = null;\n }\n\n componentDidMount(): void {\n this.sendViewportUpdate();\n }\n\n componentDidUpdate(): void {\n this.sendViewportUpdate();\n }\n\n list: React.RefObject<HTMLDivElement>;\n\n topRow: number | null;\n\n bottomRow: number | null;\n\n getCachedItem = memoize(\n (\n itemIndex: number,\n key: number,\n value: T,\n displayValue: string | undefined,\n rowHeight: number,\n isSelected: boolean,\n disabled: boolean\n ): JSX.Element => {\n const style = {\n height: rowHeight,\n };\n const text = displayValue != null ? displayValue : value;\n\n return (\n <li className=\"value-list-item\" style={style} key={key}>\n <Checkbox\n checked={isSelected}\n disabled={disabled}\n onChange={() => this.handleSelect(itemIndex)}\n >\n {text}\n </Checkbox>\n </li>\n );\n },\n { max: 1000 }\n );\n\n getCachedItems = memoize(\n (\n items: SelectItem<T>[],\n rowHeight: number,\n offset: number,\n disabled: boolean\n ): React.ReactNode => {\n const itemElements: JSX.Element[] = [];\n for (let i = 0; i < items.length; i += 1) {\n const item = items[i];\n const { value, displayValue, isSelected } = item;\n const itemIndex = offset + i;\n const key = itemIndex;\n const element = this.getCachedItem(\n itemIndex,\n key,\n value,\n displayValue,\n rowHeight,\n isSelected,\n disabled\n );\n itemElements.push(element);\n }\n return itemElements;\n },\n { max: 1 }\n );\n\n handleScroll(): void {\n this.sendViewportUpdate();\n }\n\n handleSelect(itemIndex: number): void {\n const { items, offset, onSelect } = this.props;\n const visibleItemIndex = itemIndex - offset;\n if (visibleItemIndex >= 0 && visibleItemIndex < items.length) {\n const item = items[visibleItemIndex];\n const { value } = item;\n onSelect(itemIndex, value);\n } else {\n onSelect(itemIndex, null);\n }\n }\n\n sendViewportUpdate(): void {\n if (!this.list.current || this.list.current.clientHeight === 0) {\n return;\n }\n\n const { onViewportChange, rowHeight } = this.props;\n const top = this.list.current.scrollTop;\n const bottom = top + this.list.current.clientHeight;\n\n const topRow = Math.floor(top / rowHeight);\n const bottomRow = Math.ceil(bottom / rowHeight);\n\n if (this.topRow !== topRow || this.bottomRow !== bottomRow) {\n this.topRow = topRow;\n this.bottomRow = bottomRow;\n onViewportChange(topRow, bottomRow);\n }\n }\n\n render(): JSX.Element {\n const { disabled, items, itemCount, offset, rowHeight } = this.props;\n const itemElements = this.getCachedItems(\n items,\n rowHeight,\n offset,\n disabled\n );\n\n return (\n <div\n className=\"select-value-list-scroll-pane h-100 w-100\"\n onScroll={this.handleScroll}\n ref={this.list}\n >\n <div\n className=\"select-value-list\"\n style={{ height: itemCount * rowHeight }}\n >\n <ol\n className=\"select-value-list-content\"\n style={{\n position: 'absolute',\n height: items.length * rowHeight,\n top: offset * rowHeight,\n left: 0,\n }}\n >\n {itemElements}\n </ol>\n </div>\n </div>\n );\n }\n}\n\nexport default SelectValueList;\n"],"file":"SelectValueList.js"}
1
+ {"version":3,"sources":["../src/SelectValueList.tsx"],"names":["React","PureComponent","memoize","Checkbox","SelectValueList","constructor","props","itemIndex","key","value","displayValue","rowHeight","isSelected","disabled","style","height","text","handleSelect","max","items","offset","itemElements","i","length","item","element","getCachedItem","push","handleScroll","bind","list","createRef","topRow","bottomRow","componentDidMount","sendViewportUpdate","componentDidUpdate","onSelect","visibleItemIndex","current","clientHeight","onViewportChange","top","scrollTop","bottom","Math","floor","ceil","render","itemCount","getCachedItems","position","left"],"mappings":"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","sourcesContent":["import React, { PureComponent } from 'react';\nimport './SelectValueList.scss';\nimport memoize from 'memoizee';\nimport Checkbox from './Checkbox';\n\ninterface SelectItem<T> {\n value: T;\n displayValue?: string;\n isSelected: boolean;\n}\n\ntype SelectValueListProps<T> = {\n disabled: boolean;\n // Total item count\n itemCount: number;\n rowHeight: number;\n\n // Offset of the top item in the items array\n offset: number;\n items: SelectItem<T>[];\n\n onSelect(itemIndex: number, value: T | null): void;\n onViewportChange(topRow: number, bottomRow: number): void;\n};\n\n/**\n * Select values from a long scrollable list.\n * Swaps items in and out for infinite scrolling\n */\nclass SelectValueList<T> extends PureComponent<SelectValueListProps<T>> {\n static defaultProps = {\n disabled: false,\n rowHeight: 21,\n };\n\n constructor(props: SelectValueListProps<T>) {\n super(props);\n\n this.handleScroll = this.handleScroll.bind(this);\n this.handleSelect = this.handleSelect.bind(this);\n\n this.list = React.createRef();\n this.topRow = null;\n this.bottomRow = null;\n }\n\n componentDidMount(): void {\n this.sendViewportUpdate();\n }\n\n componentDidUpdate(): void {\n this.sendViewportUpdate();\n }\n\n list: React.RefObject<HTMLDivElement>;\n\n topRow: number | null;\n\n bottomRow: number | null;\n\n getCachedItem = memoize(\n (\n itemIndex: number,\n key: number,\n value: T,\n displayValue: string | undefined,\n rowHeight: number,\n isSelected: boolean,\n disabled: boolean\n ): JSX.Element => {\n const style = {\n height: rowHeight,\n };\n const text = displayValue != null ? displayValue : value;\n\n return (\n <li className=\"value-list-item\" style={style} key={key}>\n <Checkbox\n checked={isSelected}\n disabled={disabled}\n onChange={() => this.handleSelect(itemIndex)}\n >\n {text}\n </Checkbox>\n </li>\n );\n },\n { max: 1000 }\n );\n\n getCachedItems = memoize(\n (\n items: SelectItem<T>[],\n rowHeight: number,\n offset: number,\n disabled: boolean\n ): React.ReactNode => {\n const itemElements: JSX.Element[] = [];\n for (let i = 0; i < items.length; i += 1) {\n const item = items[i];\n const { value, displayValue, isSelected } = item;\n const itemIndex = offset + i;\n const key = itemIndex;\n const element = this.getCachedItem(\n itemIndex,\n key,\n value,\n displayValue,\n rowHeight,\n isSelected,\n disabled\n );\n itemElements.push(element);\n }\n return itemElements;\n },\n { max: 1 }\n );\n\n handleScroll(): void {\n this.sendViewportUpdate();\n }\n\n handleSelect(itemIndex: number): void {\n const { items, offset, onSelect } = this.props;\n const visibleItemIndex = itemIndex - offset;\n if (visibleItemIndex >= 0 && visibleItemIndex < items.length) {\n const item = items[visibleItemIndex];\n const { value } = item;\n onSelect(itemIndex, value);\n } else {\n onSelect(itemIndex, null);\n }\n }\n\n sendViewportUpdate(): void {\n if (!this.list.current || this.list.current.clientHeight === 0) {\n return;\n }\n\n const { onViewportChange, rowHeight } = this.props;\n const top = this.list.current.scrollTop;\n const bottom = top + this.list.current.clientHeight;\n\n const topRow = Math.floor(top / rowHeight);\n const bottomRow = Math.ceil(bottom / rowHeight);\n\n if (this.topRow !== topRow || this.bottomRow !== bottomRow) {\n this.topRow = topRow;\n this.bottomRow = bottomRow;\n onViewportChange(topRow, bottomRow);\n }\n }\n\n render(): JSX.Element {\n const { disabled, items, itemCount, offset, rowHeight } = this.props;\n const itemElements = this.getCachedItems(\n items,\n rowHeight,\n offset,\n disabled\n );\n\n return (\n <div\n className=\"select-value-list-scroll-pane h-100 w-100\"\n onScroll={this.handleScroll}\n ref={this.list}\n >\n <div\n className=\"select-value-list\"\n style={{ height: itemCount * rowHeight }}\n >\n <ol\n className=\"select-value-list-content\"\n style={{\n position: 'absolute',\n height: items.length * rowHeight,\n top: offset * rowHeight,\n left: 0,\n }}\n >\n {itemElements}\n </ol>\n </div>\n </div>\n );\n }\n}\n\nexport default SelectValueList;\n"],"file":"SelectValueList.js"}
@@ -60,6 +60,9 @@ class ContextActions extends Component {
60
60
 
61
61
  constructor(props) {
62
62
  super(props);
63
+
64
+ _defineProperty(this, "container", void 0);
65
+
63
66
  this.handleContextMenu = this.handleContextMenu.bind(this);
64
67
  this.handleKeyDown = this.handleKeyDown.bind(this);
65
68
  this.container = /*#__PURE__*/React.createRef();
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/context-actions/ContextActions.tsx"],"names":["React","Component","Log","ContextActionUtils","GlobalContextActions","log","module","ContextActions","triggerMenu","element","clientX","clientY","actions","mouseEvent","MouseEvent","bubbles","cancelable","contextActions","dispatchEvent","constructor","props","handleContextMenu","bind","handleKeyDown","container","createRef","state","globalActions","keyboardActions","getDerivedStateFromProps","Array","isArray","filter","action","isGlobal","shortcut","componentDidMount","current","parentElement","addEventListener","componentWillUnmount","removeEventListener","e","ignoreClassNames","length","el","target","classList","ignoredClassName","find","className","contains","undefined","debug2","isContextActionEvent","concat","debug","i","keyboardAction","actionsDisabled","matchesEvent","result","stopPropagation","preventDefault","render","default","high","medium","low","global","edit"],"mappings":"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","sourcesContent":["/**\n * Just a simple utility class for displaying a popup menu.\n */\nimport React, { Component } from 'react';\nimport Log from '@deephaven/log';\nimport ContextActionUtils from './ContextActionUtils';\nimport type { ContextAction, ContextActionEvent } from './ContextActionUtils';\nimport GlobalContextActions from './GlobalContextActions';\nimport './ContextActions.scss';\n\nconst log = Log.module('ContextActions');\n\ninterface ContextActionsProps {\n actions: ContextAction[] | (() => ContextAction[]);\n ignoreClassNames?: string[];\n}\n\ninterface ContextActionsState {\n globalActions: ContextAction[];\n keyboardActions: ContextAction[];\n}\n\n/**\n * ContextActions that you add onto any component.\n *\n * Usage:\n * let actions = [{\n * title: 'My Action', // Omit the title to hide it from the context menu\n * action: () => { alert('My Action Clicked!') }\n * actions: [] // Submenu of actions\n * icon: faPrint, // Limited to FontAwesome icons for now.\n * iconColor: '#ff0000, // Color to use for the icon\n * shortcut: Shortcut, // Defaults to null\n * isGlobal: false, // Global context action. Defaults to false.\n * group: ContextActions.groups.default, // What group to group the context action with\n * order: null, // Int where to order within group\n * disabled: true // disable action\n * menuElement: null // Custom menu element for displaying in context menu. When null, creates a default menu item based on title\n * }];\n *\n * <div>\n * Right click in this container\n * <ContextActions actions={actions}/>\n * </div>\n *\n * Right clicking the container will then build the context menu, bubbling up until an element with a ContextMenuRoot is on it.\n * You should generally have a ContextMenuRoot on the root node of your document.\n */\nclass ContextActions extends Component<\n ContextActionsProps,\n ContextActionsState\n> {\n /**\n * Group you can assign to context menu actions to group them together.\n * Lower group IDs appear at the top of the list.\n * Groups are separated by a separator item.\n * Items within groups are ordered by their order property, then by their title.\n */\n static groups = {\n default: null,\n high: 100,\n medium: 5000,\n low: 10000,\n global: 100000,\n\n edit: 100,\n };\n\n static triggerMenu(\n element: Element,\n clientX: number,\n clientY: number,\n actions: ContextAction[]\n ): void {\n if (!element || !clientX || !clientY || !actions) {\n return;\n }\n\n const mouseEvent: Partial<ContextActionEvent> = new MouseEvent(\n 'contextmenu',\n {\n clientX,\n clientY,\n bubbles: true,\n cancelable: true,\n }\n );\n mouseEvent.contextActions = actions;\n\n element.dispatchEvent(mouseEvent as ContextActionEvent);\n }\n\n constructor(props: ContextActionsProps) {\n super(props);\n\n this.handleContextMenu = this.handleContextMenu.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n\n this.container = React.createRef();\n\n this.state = { globalActions: [], keyboardActions: [] };\n }\n\n static getDerivedStateFromProps(\n props: ContextActionsProps\n ): ContextActionsState {\n if (!props.actions || !Array.isArray(props.actions)) {\n return { globalActions: [], keyboardActions: [] };\n }\n const globalActions = props.actions.filter(action => action.isGlobal);\n const keyboardActions = props.actions.filter(\n action => !action.isGlobal && action.shortcut != null\n );\n\n return { globalActions, keyboardActions };\n }\n\n componentDidMount(): void {\n if (this.container.current?.parentElement) {\n this.container.current.parentElement.addEventListener(\n 'contextmenu',\n this.handleContextMenu\n );\n this.container.current.parentElement.addEventListener(\n 'keydown',\n this.handleKeyDown\n );\n }\n }\n\n componentWillUnmount(): void {\n if (this.container.current?.parentElement) {\n this.container.current.parentElement.removeEventListener(\n 'contextmenu',\n this.handleContextMenu\n );\n this.container.current.parentElement.removeEventListener(\n 'keydown',\n this.handleKeyDown\n );\n }\n }\n\n container: React.RefObject<HTMLDivElement>;\n\n handleContextMenu(e: MouseEvent): void {\n const { ignoreClassNames = [] } = this.props;\n if (ignoreClassNames.length > 0) {\n let el = e.target as Element | null;\n while (el != null) {\n const { classList } = el;\n const ignoredClassName = ignoreClassNames.find(className =>\n classList.contains(className)\n );\n if (ignoredClassName !== undefined) {\n log.debug2(\n `Contextmenu event ignored based on the target className \"${ignoredClassName}\"`\n );\n return;\n }\n el = el.parentElement;\n }\n }\n if (!ContextActionUtils.isContextActionEvent(e)) {\n (e as ContextActionEvent).contextActions = [];\n }\n\n if (!ContextActionUtils.isContextActionEvent(e)) {\n return;\n }\n\n const { actions } = this.props;\n if (actions) {\n let contextActions = actions;\n if (Array.isArray(contextActions)) {\n contextActions = contextActions.filter(action => !action.isGlobal);\n }\n\n e.contextActions = e.contextActions.concat(contextActions);\n }\n\n log.debug(\n 'Received context menu event! Menu items are now: ',\n e.contextActions\n );\n }\n\n handleKeyDown(e: KeyboardEvent): void {\n const { keyboardActions } = this.state;\n for (let i = 0; i < keyboardActions.length; i += 1) {\n const keyboardAction = keyboardActions[i];\n if (\n !ContextActionUtils.actionsDisabled &&\n keyboardAction.shortcut?.matchesEvent(e)\n ) {\n log.debug('Context hotkey matched!', e);\n\n const result = keyboardAction.action?.(e);\n\n if (result || result === undefined) {\n e.stopPropagation();\n e.preventDefault();\n return;\n }\n\n log.debug2('Matched hotkey returned false, key event not consumed');\n }\n }\n }\n\n render(): JSX.Element {\n const { globalActions } = this.state;\n return (\n <div className=\"context-actions-listener\" ref={this.container}>\n <GlobalContextActions actions={globalActions} />\n </div>\n );\n }\n}\n\nexport default ContextActions;\n"],"file":"ContextActions.js"}
1
+ {"version":3,"sources":["../../src/context-actions/ContextActions.tsx"],"names":["React","Component","Log","ContextActionUtils","GlobalContextActions","log","module","ContextActions","triggerMenu","element","clientX","clientY","actions","mouseEvent","MouseEvent","bubbles","cancelable","contextActions","dispatchEvent","constructor","props","handleContextMenu","bind","handleKeyDown","container","createRef","state","globalActions","keyboardActions","getDerivedStateFromProps","Array","isArray","filter","action","isGlobal","shortcut","componentDidMount","current","parentElement","addEventListener","componentWillUnmount","removeEventListener","e","ignoreClassNames","length","el","target","classList","ignoredClassName","find","className","contains","undefined","debug2","isContextActionEvent","concat","debug","i","keyboardAction","actionsDisabled","matchesEvent","result","stopPropagation","preventDefault","render","default","high","medium","low","global","edit"],"mappings":"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","sourcesContent":["/**\n * Just a simple utility class for displaying a popup menu.\n */\nimport React, { Component } from 'react';\nimport Log from '@deephaven/log';\nimport ContextActionUtils from './ContextActionUtils';\nimport type { ContextAction, ContextActionEvent } from './ContextActionUtils';\nimport GlobalContextActions from './GlobalContextActions';\nimport './ContextActions.scss';\n\nconst log = Log.module('ContextActions');\n\ninterface ContextActionsProps {\n actions: ContextAction[] | (() => ContextAction[]);\n ignoreClassNames?: string[];\n}\n\ninterface ContextActionsState {\n globalActions: ContextAction[];\n keyboardActions: ContextAction[];\n}\n\n/**\n * ContextActions that you add onto any component.\n *\n * Usage:\n * let actions = [{\n * title: 'My Action', // Omit the title to hide it from the context menu\n * action: () => { alert('My Action Clicked!') }\n * actions: [] // Submenu of actions\n * icon: faPrint, // Limited to FontAwesome icons for now.\n * iconColor: '#ff0000, // Color to use for the icon\n * shortcut: Shortcut, // Defaults to null\n * isGlobal: false, // Global context action. Defaults to false.\n * group: ContextActions.groups.default, // What group to group the context action with\n * order: null, // Int where to order within group\n * disabled: true // disable action\n * menuElement: null // Custom menu element for displaying in context menu. When null, creates a default menu item based on title\n * }];\n *\n * <div>\n * Right click in this container\n * <ContextActions actions={actions}/>\n * </div>\n *\n * Right clicking the container will then build the context menu, bubbling up until an element with a ContextMenuRoot is on it.\n * You should generally have a ContextMenuRoot on the root node of your document.\n */\nclass ContextActions extends Component<\n ContextActionsProps,\n ContextActionsState\n> {\n /**\n * Group you can assign to context menu actions to group them together.\n * Lower group IDs appear at the top of the list.\n * Groups are separated by a separator item.\n * Items within groups are ordered by their order property, then by their title.\n */\n static groups = {\n default: null,\n high: 100,\n medium: 5000,\n low: 10000,\n global: 100000,\n\n edit: 100,\n };\n\n static triggerMenu(\n element: Element,\n clientX: number,\n clientY: number,\n actions: ContextAction[]\n ): void {\n if (!element || !clientX || !clientY || !actions) {\n return;\n }\n\n const mouseEvent: Partial<ContextActionEvent> = new MouseEvent(\n 'contextmenu',\n {\n clientX,\n clientY,\n bubbles: true,\n cancelable: true,\n }\n );\n mouseEvent.contextActions = actions;\n\n element.dispatchEvent(mouseEvent as ContextActionEvent);\n }\n\n constructor(props: ContextActionsProps) {\n super(props);\n\n this.handleContextMenu = this.handleContextMenu.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n\n this.container = React.createRef();\n\n this.state = { globalActions: [], keyboardActions: [] };\n }\n\n static getDerivedStateFromProps(\n props: ContextActionsProps\n ): ContextActionsState {\n if (!props.actions || !Array.isArray(props.actions)) {\n return { globalActions: [], keyboardActions: [] };\n }\n const globalActions = props.actions.filter(action => action.isGlobal);\n const keyboardActions = props.actions.filter(\n action => !action.isGlobal && action.shortcut != null\n );\n\n return { globalActions, keyboardActions };\n }\n\n componentDidMount(): void {\n if (this.container.current?.parentElement) {\n this.container.current.parentElement.addEventListener(\n 'contextmenu',\n this.handleContextMenu\n );\n this.container.current.parentElement.addEventListener(\n 'keydown',\n this.handleKeyDown\n );\n }\n }\n\n componentWillUnmount(): void {\n if (this.container.current?.parentElement) {\n this.container.current.parentElement.removeEventListener(\n 'contextmenu',\n this.handleContextMenu\n );\n this.container.current.parentElement.removeEventListener(\n 'keydown',\n this.handleKeyDown\n );\n }\n }\n\n container: React.RefObject<HTMLDivElement>;\n\n handleContextMenu(e: MouseEvent): void {\n const { ignoreClassNames = [] } = this.props;\n if (ignoreClassNames.length > 0) {\n let el = e.target as Element | null;\n while (el != null) {\n const { classList } = el;\n const ignoredClassName = ignoreClassNames.find(className =>\n classList.contains(className)\n );\n if (ignoredClassName !== undefined) {\n log.debug2(\n `Contextmenu event ignored based on the target className \"${ignoredClassName}\"`\n );\n return;\n }\n el = el.parentElement;\n }\n }\n if (!ContextActionUtils.isContextActionEvent(e)) {\n (e as ContextActionEvent).contextActions = [];\n }\n\n if (!ContextActionUtils.isContextActionEvent(e)) {\n return;\n }\n\n const { actions } = this.props;\n if (actions) {\n let contextActions = actions;\n if (Array.isArray(contextActions)) {\n contextActions = contextActions.filter(action => !action.isGlobal);\n }\n\n e.contextActions = e.contextActions.concat(contextActions);\n }\n\n log.debug(\n 'Received context menu event! Menu items are now: ',\n e.contextActions\n );\n }\n\n handleKeyDown(e: KeyboardEvent): void {\n const { keyboardActions } = this.state;\n for (let i = 0; i < keyboardActions.length; i += 1) {\n const keyboardAction = keyboardActions[i];\n if (\n !ContextActionUtils.actionsDisabled &&\n keyboardAction.shortcut?.matchesEvent(e)\n ) {\n log.debug('Context hotkey matched!', e);\n\n const result = keyboardAction.action?.(e);\n\n if (result || result === undefined) {\n e.stopPropagation();\n e.preventDefault();\n return;\n }\n\n log.debug2('Matched hotkey returned false, key event not consumed');\n }\n }\n }\n\n render(): JSX.Element {\n const { globalActions } = this.state;\n return (\n <div className=\"context-actions-listener\" ref={this.container}>\n <GlobalContextActions actions={globalActions} />\n </div>\n );\n }\n}\n\nexport default ContextActions;\n"],"file":"ContextActions.js"}
@@ -26,6 +26,19 @@ class ContextMenu extends PureComponent {
26
26
 
27
27
  constructor(props) {
28
28
  super(props);
29
+
30
+ _defineProperty(this, "container", void 0);
31
+
32
+ _defineProperty(this, "oldFocus", void 0);
33
+
34
+ _defineProperty(this, "activeSubMenuRef", void 0);
35
+
36
+ _defineProperty(this, "subMenuTimer", void 0);
37
+
38
+ _defineProperty(this, "rAF", void 0);
39
+
40
+ _defineProperty(this, "initialPosition", void 0);
41
+
29
42
  this.handleBlur = this.handleBlur.bind(this);
30
43
  this.handleCloseSubMenu = this.handleCloseSubMenu.bind(this);
31
44
  this.handleKeyDown = this.handleKeyDown.bind(this);