@deephaven/components 0.5.2-beta.0 → 0.6.1-demo.8

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 (119) hide show
  1. package/dist/AutoCompleteInput.js +410 -448
  2. package/dist/AutoCompleteInput.js.map +1 -1
  3. package/dist/AutoResizeTextarea.js +17 -46
  4. package/dist/AutoResizeTextarea.js.map +1 -1
  5. package/dist/BasicModal.js +18 -19
  6. package/dist/BasicModal.js.map +1 -1
  7. package/dist/Button.js +30 -21
  8. package/dist/Button.js.map +1 -1
  9. package/dist/ButtonGroup.js +6 -4
  10. package/dist/ButtonGroup.js.map +1 -1
  11. package/dist/ButtonOld.js +10 -8
  12. package/dist/ButtonOld.js.map +1 -1
  13. package/dist/CardFlip.js +10 -8
  14. package/dist/CardFlip.js.map +1 -1
  15. package/dist/Checkbox.js +18 -31
  16. package/dist/Checkbox.js.map +1 -1
  17. package/dist/Collapse.js +65 -105
  18. package/dist/Collapse.js.map +1 -1
  19. package/dist/ComboBox.js +432 -460
  20. package/dist/ComboBox.js.map +1 -1
  21. package/dist/CustomTimeSelect.js +485 -517
  22. package/dist/CustomTimeSelect.js.map +1 -1
  23. package/dist/DebouncedSearchInput.js +61 -91
  24. package/dist/DebouncedSearchInput.js.map +1 -1
  25. package/dist/DeephavenSpinner.js +6 -6
  26. package/dist/DeephavenSpinner.js.map +1 -1
  27. package/dist/DragUtils.js +65 -113
  28. package/dist/DragUtils.js.map +1 -1
  29. package/dist/DraggableItemList.d.ts +1 -0
  30. package/dist/DraggableItemList.d.ts.map +1 -1
  31. package/dist/DraggableItemList.js +219 -257
  32. package/dist/DraggableItemList.js.map +1 -1
  33. package/dist/HierarchicalCheckboxMenu.js +160 -227
  34. package/dist/HierarchicalCheckboxMenu.js.map +1 -1
  35. package/dist/ItemList.d.ts +4 -2
  36. package/dist/ItemList.d.ts.map +1 -1
  37. package/dist/ItemList.js +595 -598
  38. package/dist/ItemList.js.map +1 -1
  39. package/dist/ItemListItem.js +194 -215
  40. package/dist/ItemListItem.js.map +1 -1
  41. package/dist/LoadingOverlay.js +9 -10
  42. package/dist/LoadingOverlay.js.map +1 -1
  43. package/dist/LoadingSpinner.js +4 -3
  44. package/dist/LoadingSpinner.js.map +1 -1
  45. package/dist/MaskedInput.js +59 -70
  46. package/dist/MaskedInput.js.map +1 -1
  47. package/dist/Option.js +5 -3
  48. package/dist/Option.js.map +1 -1
  49. package/dist/RadioGroup.js +16 -34
  50. package/dist/RadioGroup.js.map +1 -1
  51. package/dist/RadioItem.js +14 -33
  52. package/dist/RadioItem.js.map +1 -1
  53. package/dist/SearchInput.js +42 -75
  54. package/dist/SearchInput.js.map +1 -1
  55. package/dist/Select.js +10 -8
  56. package/dist/Select.js.map +1 -1
  57. package/dist/SelectValueList.js +97 -134
  58. package/dist/SelectValueList.js.map +1 -1
  59. package/dist/SocketedButton.js +13 -11
  60. package/dist/SocketedButton.js.map +1 -1
  61. package/dist/ThemeExport.js.map +1 -1
  62. package/dist/TimeInput.js +16 -53
  63. package/dist/TimeInput.js.map +1 -1
  64. package/dist/TimeSlider.js +62 -88
  65. package/dist/TimeSlider.js.map +1 -1
  66. package/dist/ToastNotification.js +14 -13
  67. package/dist/ToastNotification.js.map +1 -1
  68. package/dist/UISwitch.js +9 -8
  69. package/dist/UISwitch.js.map +1 -1
  70. package/dist/context-actions/ContextActionUtils.js +173 -231
  71. package/dist/context-actions/ContextActionUtils.js.map +1 -1
  72. package/dist/context-actions/ContextActions.js +135 -177
  73. package/dist/context-actions/ContextActions.js.map +1 -1
  74. package/dist/context-actions/ContextMenu.js +509 -543
  75. package/dist/context-actions/ContextMenu.js.map +1 -1
  76. package/dist/context-actions/ContextMenuItem.js +32 -22
  77. package/dist/context-actions/ContextMenuItem.js.map +1 -1
  78. package/dist/context-actions/ContextMenuRoot.js +112 -152
  79. package/dist/context-actions/ContextMenuRoot.js.map +1 -1
  80. package/dist/context-actions/GlobalContextAction.js +49 -84
  81. package/dist/context-actions/GlobalContextAction.js.map +1 -1
  82. package/dist/context-actions/GlobalContextActions.js +25 -57
  83. package/dist/context-actions/GlobalContextActions.js.map +1 -1
  84. package/dist/context-actions/index.js +4 -4
  85. package/dist/context-actions/index.js.map +1 -1
  86. package/dist/index.js +39 -39
  87. package/dist/index.js.map +1 -1
  88. package/dist/menu-actions/DropdownMenu.js +126 -159
  89. package/dist/menu-actions/DropdownMenu.js.map +1 -1
  90. package/dist/menu-actions/Menu.js +215 -245
  91. package/dist/menu-actions/Menu.js.map +1 -1
  92. package/dist/menu-actions/index.js +1 -1
  93. package/dist/menu-actions/index.js.map +1 -1
  94. package/dist/navigation/Menu.js +14 -18
  95. package/dist/navigation/Menu.js.map +1 -1
  96. package/dist/navigation/MenuItem.js +15 -14
  97. package/dist/navigation/MenuItem.js.map +1 -1
  98. package/dist/navigation/Page.js +7 -5
  99. package/dist/navigation/Page.js.map +1 -1
  100. package/dist/navigation/Stack.js +14 -39
  101. package/dist/navigation/Stack.js.map +1 -1
  102. package/dist/navigation/index.js +4 -4
  103. package/dist/navigation/index.js.map +1 -1
  104. package/dist/popper/Popper.js +209 -235
  105. package/dist/popper/Popper.js.map +1 -1
  106. package/dist/popper/Tooltip.js +227 -257
  107. package/dist/popper/Tooltip.js.map +1 -1
  108. package/dist/popper/index.js +2 -2
  109. package/dist/popper/index.js.map +1 -1
  110. package/dist/shortcuts/GlobalShortcuts.js +2 -2
  111. package/dist/shortcuts/GlobalShortcuts.js.map +1 -1
  112. package/dist/shortcuts/Shortcut.js +263 -291
  113. package/dist/shortcuts/Shortcut.js.map +1 -1
  114. package/dist/shortcuts/ShortcutRegistry.js +48 -71
  115. package/dist/shortcuts/ShortcutRegistry.js.map +1 -1
  116. package/dist/shortcuts/index.js +4 -4
  117. package/dist/shortcuts/index.js.map +1 -1
  118. package/dist/tsconfig.tsbuildinfo +1 -1
  119. package/package.json +30 -54
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/CustomTimeSelect.tsx"],"names":["React","Component","FontAwesomeIcon","vsCheck","dhSort","TimeUtils","classNames","TimeInput","DropdownMenu","CUSTOM_OPTION","MENU_NAVIGATION_DIRECTION","CustomTimeSelect","props","value","valueToTime","toggleMenu","bind","handleMenuKeyDown","closeMenu","handleOptionClick","handleOptionFocus","handleMenuOpened","handleMenuExited","handleCustomInput","csContainer","createRef","menuContainer","button","input","state","keyboardOptionIndex","menuIsOpen","inputWidth","customTime","inputFocused","options","placeholder","i","length","option","title","formatTime","current","setState","getBoundingClientRect","width","focus","onChange","setInputWidth","event","key","updateFromCustom","updateInputValue","stopPropagation","preventDefault","shiftKey","handleMenuNavigation","UP","DOWN","direction","menuOptionsLength","newKeyboardOptionIndex","focusInput","focusOption","scrollOptionIntoView","optionIndex","Number","currentTarget","timeToValue","update","updateAndClose","target","activeOption","querySelector","HTMLElement","valueIndex","map","indexOf","index","children","item","openMenu","updateKeyboardIndex","focusButton","offsetTop","DROP_DOWN_MENU_HEIGHT","scrollTop","renderOptions","icon","customText","matchFound","optionArray","push","disabled","invalid","popperOptions","placement","modifiers","preventOverflow","enabled","getSelectedText","menuElement","renderMenuElement","maxWidth","Math","round","time"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAOA,KAAP,IAAgBC,SAAhB,QAAiC,OAAjC;AAEA,SAASC,eAAT,QAAgC,gCAAhC;AACA,SAASC,OAAT,EAAkBC,MAAlB,QAAgD,kBAAhD;AACA,SAASC,SAAT,QAA0B,kBAA1B;AACA,OAAOC,UAAP,MAAuB,YAAvB;AACA,OAAOC,SAAP,MAAsB,aAAtB;AACA,OAAOC,YAAP,MAAyB,6BAAzB;AACA;AACA;AAEA,IAAMC,aAAa,GAAG,CAAC,CAAvB;IAEKC,yB;;WAAAA,yB;AAAAA,EAAAA,yB;AAAAA,EAAAA,yB;GAAAA,yB,KAAAA,yB;;IA+BCC,gB;;;;;AAuBJ,4BAAYC,KAAZ,EAA0C;AAAA;;AAAA;;AACxC,8BAAMA,KAAN;;AADwC;;AAAA;;AAAA;;AAAA;;AAGxC,QAAQC,KAAR,GAA+BD,KAA/B,CAAQC,KAAR;AAAA,QAAeC,WAAf,GAA+BF,KAA/B,CAAeE,WAAf;AAEA,UAAKC,UAAL,GAAkB,MAAKA,UAAL,CAAgBC,IAAhB,+BAAlB;AACA,UAAKC,iBAAL,GAAyB,MAAKA,iBAAL,CAAuBD,IAAvB,+BAAzB;AACA,UAAKE,SAAL,GAAiB,MAAKA,SAAL,CAAeF,IAAf,+BAAjB;AAEA,UAAKG,iBAAL,GAAyB,MAAKA,iBAAL,CAAuBH,IAAvB,+BAAzB;AACA,UAAKI,iBAAL,GAAyB,MAAKA,iBAAL,CAAuBJ,IAAvB,+BAAzB;AAEA,UAAKK,gBAAL,GAAwB,MAAKA,gBAAL,CAAsBL,IAAtB,+BAAxB;AACA,UAAKM,gBAAL,GAAwB,MAAKA,gBAAL,CAAsBN,IAAtB,+BAAxB;AACA,UAAKO,iBAAL,GAAyB,MAAKA,iBAAL,CAAuBP,IAAvB,+BAAzB;AAEA,UAAKQ,WAAL,gBAAmBxB,KAAK,CAACyB,SAAN,EAAnB;AACA,UAAKC,aAAL,gBAAqB1B,KAAK,CAACyB,SAAN,EAArB;AACA,UAAKE,MAAL,gBAAc3B,KAAK,CAACyB,SAAN,EAAd;AACA,UAAKG,KAAL,gBAAa5B,KAAK,CAACyB,SAAN,EAAb;AAEA,UAAKI,KAAL,GAAa;AACXC,MAAAA,mBAAmB,EAAE,CADV;AAEXC,MAAAA,UAAU,EAAE,KAFD;AAGXC,MAAAA,UAAU,EAAE,GAHD;AAIXC,MAAAA,UAAU,EAAEnB,WAAW,CAACD,KAAD,CAJZ;AAKXqB,MAAAA,YAAY,EAAE;AALH,KAAb;AArBwC;AA4BzC;;;;WAUD,2BAA0B;AACxB,wBAAwC,KAAKtB,KAA7C;AAAA,UAAQuB,OAAR,eAAQA,OAAR;AAAA,UAAiBtB,KAAjB,eAAiBA,KAAjB;AAAA,UAAwBuB,WAAxB,eAAwBA,WAAxB;AACA,UAAQH,UAAR,GAAuB,KAAKJ,KAA5B,CAAQI,UAAR;;AAEA,UAAIpB,KAAK,KAAK,IAAd,EAAoB;AAClB,eAAOuB,WAAP;AACD;;AAED,WAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGF,OAAO,CAACG,MAA5B,EAAoCD,CAAC,IAAI,CAAzC,EAA4C;AAC1C,YAAME,MAAM,GAAGJ,OAAO,CAACE,CAAD,CAAtB;;AACA,YAAIE,MAAM,CAAC1B,KAAP,KAAiBA,KAArB,EAA4B;AAC1B,iBAAO0B,MAAM,CAACC,KAAd;AACD;AACF;;AAED,aAAOnC,SAAS,CAACoC,UAAV,CAAqBR,UAArB,CAAP;AACD;;;WAED,yBAAsB;AACpB,UAAI,KAAKT,WAAL,CAAiBkB,OAArB,EAA8B;AAC5B,aAAKC,QAAL,CAAc;AACZX,UAAAA,UAAU,EAAE,KAAKR,WAAL,CAAiBkB,OAAjB,CAAyBE,qBAAzB,GAAiDC;AADjD,SAAd;AAGD;AACF;;;WAED,iBAAc;AAAA;;AACZ,mCAAKlB,MAAL,CAAYe,OAAZ,8EAAqBI,KAArB;AACD;;;WAED,0BAAiBjC,KAAjB,EAAsC;AACpC,UAAQkC,QAAR,GAAqB,KAAKnC,KAA1B,CAAQmC,QAAR;AACAA,MAAAA,QAAQ,CAAClC,KAAD,CAAR;AACD;;;WAED,wBAAqB;AACnB,WAAKmC,aAAL;AACD;;;WAED,2BAAkBC,KAAlB,EAAoE;AAAA;;AAClE,wBAA8C,KAAKpB,KAAnD;AAAA,UAAQC,mBAAR,eAAQA,mBAAR;AAAA,UAA6BI,YAA7B,eAA6BA,YAA7B;AACA,UAAQC,OAAR,GAAoB,KAAKvB,KAAzB,CAAQuB,OAAR;;AAEA,cAAQc,KAAK,CAACC,GAAd;AACE,aAAK,OAAL;AACA,aAAK,GAAL;AAAU;AACR,cAAIhB,YAAJ,EAAkB;AAChB,iBAAKiB,gBAAL;AACD,WAFD,MAEO;AACL,iBAAKC,gBAAL,CAAsBjB,OAAO,CAACL,mBAAD,CAAP,CAA6BjB,KAAnD;AACD;;AACD,eAAKK,SAAL;AACA,wCAAKS,MAAL,CAAYe,OAAZ,gFAAqBI,KAArB;AACAG,UAAAA,KAAK,CAACI,eAAN;AACAJ,UAAAA,KAAK,CAACK,cAAN;AACA;;AACF,aAAK,KAAL;AACE,cAAIL,KAAK,CAACM,QAAV,EAAoB;AAClB,iBAAKC,oBAAL,CACE7C,gBAAgB,CAACD,yBAAjB,CAA2C+C,EAD7C;AAGD,WAJD,MAIO;AACL,iBAAKD,oBAAL,CACE7C,gBAAgB,CAACD,yBAAjB,CAA2CgD,IAD7C;AAGD;;AACDT,UAAAA,KAAK,CAACI,eAAN;AACAJ,UAAAA,KAAK,CAACK,cAAN;AACA;;AACF,aAAK,SAAL;AACE,eAAKE,oBAAL,CACE7C,gBAAgB,CAACD,yBAAjB,CAA2C+C,EAD7C;AAGAR,UAAAA,KAAK,CAACI,eAAN;AACAJ,UAAAA,KAAK,CAACK,cAAN;AACA;;AACF,aAAK,WAAL;AACE,eAAKE,oBAAL,CACE7C,gBAAgB,CAACD,yBAAjB,CAA2CgD,IAD7C;AAGAT,UAAAA,KAAK,CAACI,eAAN;AACAJ,UAAAA,KAAK,CAACK,cAAN;AACA;;AACF,aAAK,QAAL;AACE,eAAKpC,SAAL;AACA;;AACF;AACE;AA5CJ;AA8CD;;;WAED,8BAAqByC,SAArB,EAAiE;AAC/D,yBAA8C,KAAK9B,KAAnD;AAAA,UAAQC,mBAAR,gBAAQA,mBAAR;AAAA,UAA6BI,YAA7B,gBAA6BA,YAA7B;AACA,UAAQC,OAAR,GAAoB,KAAKvB,KAAzB,CAAQuB,OAAR;AACA,UAAMyB,iBAAiB,GAAGzB,OAAO,CAACG,MAAlC;AACA,UAAIuB,sBAAsB,GAAG/B,mBAA7B;;AACA,cAAQ6B,SAAR;AACE,aAAKhD,gBAAgB,CAACD,yBAAjB,CAA2C+C,EAAhD;AACE,cAAI,CAACvB,YAAD,IAAiBJ,mBAAmB,KAAK,CAA7C,EAAgD;AAC9C,iBAAKgC,UAAL;AACA;AACD,WAHD,MAGO,IAAI5B,YAAJ,EAAkB;AACvB,iBAAK6B,WAAL,CAAiBjC,mBAAjB;AACD;;AAED,cAAIA,mBAAmB,GAAG,CAAtB,IAA2B,CAACI,YAAhC,EAA8C;AAC5C2B,YAAAA,sBAAsB,GACpB,CAACA,sBAAsB,GAAG,CAA1B,IAA+BD,iBADjC;AAEA,iBAAKjB,QAAL,CAAc;AACZb,cAAAA,mBAAmB,EAAE+B;AADT,aAAd;AAGD,WAND,MAMO,IAAI/B,mBAAmB,KAAK,CAA5B,EAA+B;AACpC+B,YAAAA,sBAAsB,GAAGD,iBAAiB,GAAG,CAA7C;AACA,iBAAKjB,QAAL,CAAc;AACZb,cAAAA,mBAAmB,EAAE+B;AADT,aAAd;AAGD;;AACD,eAAKG,oBAAL,CAA0BH,sBAA1B;AACA;;AACF,aAAKlD,gBAAgB,CAACD,yBAAjB,CAA2CgD,IAAhD;AACE,cAAI,CAACxB,YAAD,IAAiBJ,mBAAmB,KAAK8B,iBAAiB,GAAG,CAAjE,EAAoE;AAClE,iBAAKE,UAAL;AACA;AACD,WAHD,MAGO,IAAI5B,YAAJ,EAAkB;AACvB,iBAAK6B,WAAL,CAAiBjC,mBAAjB;AACD;;AAED,cACEA,mBAAmB,GAAG8B,iBAAtB,IACA,EAAE1B,YAAY,IAAIJ,mBAAmB,KAAK,CAA1C,CAFF,EAGE;AACA+B,YAAAA,sBAAsB,GACpB,CAACA,sBAAsB,GAAG,CAA1B,IAA+BD,iBADjC;AAEA,iBAAKjB,QAAL,CAAc;AACZb,cAAAA,mBAAmB,EAAE+B;AADT,aAAd;AAGD;;AACD,eAAKG,oBAAL,CAA0BH,sBAA1B;AACA;;AACF;AACE;AA5CJ;AA8CD;;;WAED,2BAAkBZ,KAAlB,EAAoE;AAClE,UAAMgB,WAAW,GAAGC,MAAM,CAACjB,KAAK,CAACkB,aAAN,CAAoBtD,KAArB,CAA1B;AACA,yBAAiC,KAAKD,KAAtC;AAAA,UAAQuB,OAAR,gBAAQA,OAAR;AAAA,UAAiBiC,WAAjB,gBAAiBA,WAAjB;AACA,UAAQnC,UAAR,GAAuB,KAAKJ,KAA5B,CAAQI,UAAR;;AAEA,UAAIgC,WAAW,KAAKxD,aAApB,EAAmC;AACjC,YAAM4D,MAAM,GAAGD,WAAW,CAACnC,UAAD,CAA1B;AACA,aAAKqC,cAAL,CAAoBD,MAApB;AACD,OAHD,MAGO;AACL,aAAKC,cAAL,CAAoBnC,OAAO,CAAC8B,WAAD,CAAP,CAAqBpD,KAAzC;AACD;AACF;;;WAED,wBAAewD,MAAf,EAAqC;AAAA;;AACnC,WAAKjB,gBAAL,CAAsBiB,MAAtB;AACA,WAAKnD,SAAL;AACA,oCAAKS,MAAL,CAAYe,OAAZ,gFAAqBI,KAArB;AACD;;;WAED,2BAAkBG,KAAlB,EAAoE;AAClE,WAAKN,QAAL,CAAc;AAAEb,QAAAA,mBAAmB,EAAEoC,MAAM,CAACjB,KAAK,CAACsB,MAAN,CAAa1D,KAAd;AAA7B,OAAd;AACD;;;WAED,4BAAyB;AAAA;;AACvB,yBAA2B,KAAKD,KAAhC;AAAA,UAAQuB,OAAR,gBAAQA,OAAR;AAAA,UAAiBtB,KAAjB,gBAAiBA,KAAjB;AACA,UAAQiB,mBAAR,GAAgC,KAAKD,KAArC,CAAQC,mBAAR;AACA,WAAKkC,oBAAL,CAA0BlC,mBAA1B;AACA,UAAM0C,YAAY,4BAAG,KAAK9C,aAAL,CAAmBgB,OAAtB,0DAAG,sBAA4B+B,aAA5B,CACnB,gCADmB,CAArB;;AAGA,UAAID,YAAY,YAAYE,WAA5B,EAAyC;AACvCF,QAAAA,YAAY,CAAC1B,KAAb;AACD;;AAED,UAAIjC,KAAK,KAAK,IAAd,EAAoB;AAClB;AACD;;AACD,UAAM8D,UAAU,GAAGxC,OAAO,CAACyC,GAAR,CAAY,UAAArC,MAAM;AAAA,eAAIA,MAAM,CAAC1B,KAAX;AAAA,OAAlB,EAAoCgE,OAApC,CAA4ChE,KAA5C,CAAnB;;AACA,UAAI8D,UAAU,GAAG,CAAjB,EAAoB;AAClB;AACA,aAAKb,UAAL;AACD;AACF;;;WAED,sBAAmB;AAAA;;AACjB,kCAAKlC,KAAL,CAAWc,OAAX,4EAAoBI,KAApB;AACD;;;WAED,qBAAYgC,KAAZ,EAAiC;AAAA;;AAC/B,UAAM3C,OAAO,6BAAG,KAAKT,aAAL,CAAmBgB,OAAtB,2DAAG,uBAA4B+B,aAA5B,CAA0C,aAA1C,CAAhB;;AACA,UAAItC,OAAO,IAAIA,OAAO,CAAC4C,QAAvB,EAAiC;AAC/B,YAAMxC,MAAM,GAAGJ,OAAO,CAAC4C,QAAR,CAAiBC,IAAjB,CAAsBF,KAAtB,CAAf;;AACA,YAAIvC,MAAM,YAAYmC,WAAtB,EAAmC;AACjCnC,UAAAA,MAAM,CAACO,KAAP;AACD;AACF;AACF;;;WAED,4BAAyB;AACvB,UAAQf,UAAR,GAAuB,KAAKF,KAA5B,CAAQE,UAAR;;AACA,UAAIA,UAAJ,EAAgB;AACd,aAAKY,QAAL,CAAc;AAAEZ,UAAAA,UAAU,EAAE,KAAd;AAAqBD,UAAAA,mBAAmB,EAAE;AAA1C,SAAd;AACD;AACF;;;WAED,2BAAkBjB,KAAlB,EAAuC;AACrC,UAAQuD,WAAR,GAAwB,KAAKxD,KAA7B,CAAQwD,WAAR;AAEA,UAAMC,MAAM,GAAGD,WAAW,CAACvD,KAAD,CAA1B;AACA,WAAKuC,gBAAL,CAAsBiB,MAAtB;AACA,WAAK1B,QAAL,CAAc;AACZV,QAAAA,UAAU,EAAEpB;AADA,OAAd;AAGD;;;WAED,4BAAyB;AACvB,UAAQuD,WAAR,GAAwB,KAAKxD,KAA7B,CAAQwD,WAAR;AACA,UAAQnC,UAAR,GAAuB,KAAKJ,KAA5B,CAAQI,UAAR;AAEA,UAAMoC,MAAM,GAAGD,WAAW,CAACnC,UAAD,CAA1B;AACA,WAAKmB,gBAAL,CAAsBiB,MAAtB;AACD;;;WAED,oBAAWpB,KAAX,EAA6D;AAC3D,UAAQlB,UAAR,GAAuB,KAAKF,KAA5B,CAAQE,UAAR;;AACA,UAAIA,UAAJ,EAAgB;AACd,aAAKb,SAAL;AACD,OAFD,MAEO;AACL,aAAK+D,QAAL;AACD;;AACDhC,MAAAA,KAAK,CAACI,eAAN;AACD;;;WAED,oBAAiB;AACf,WAAK6B,mBAAL;AACA,WAAKlC,aAAL;AACA,WAAKL,QAAL,CAAc;AAAEZ,QAAAA,UAAU,EAAE;AAAd,OAAd;AACD;;;WAED,qBAAoC;AAAA,UAA1BoD,WAA0B,uEAAZ,IAAY;AAClC,WAAKxC,QAAL,CAAc;AAAEZ,QAAAA,UAAU,EAAE;AAAd,OAAd;;AACA,UAAIoD,WAAJ,EAAiB;AAAA;;AACf,sCAAKxD,MAAL,CAAYe,OAAZ,gFAAqBI,KAArB;AACD;AACF;;;WAED,+BAA4B;AAC1B,yBAA2B,KAAKlC,KAAhC;AAAA,UAAQuB,OAAR,gBAAQA,OAAR;AAAA,UAAiBtB,KAAjB,gBAAiBA,KAAjB;;AACA,UAAIA,KAAK,KAAK,IAAd,EAAoB;AAClB;AACD;;AACD,UAAM8D,UAAU,GAAGxC,OAAO,CAACyC,GAAR,CAAY,UAAArC,MAAM;AAAA,eAAIA,MAAM,CAAC1B,KAAX;AAAA,OAAlB,EAAoCgE,OAApC,CAA4ChE,KAA5C,CAAnB;;AACA,UAAI8D,UAAU,GAAG,CAAjB,EAAoB;AAClB,aAAKhC,QAAL,CAAc;AAAEb,UAAAA,mBAAmB,EAAE6C;AAAvB,SAAd;AACD;AACF;;;WAED,8BAAqBG,KAArB,EAA0C;AAAA;;AACxC,UAAM3C,OAAO,6BAAG,KAAKT,aAAL,CAAmBgB,OAAtB,2DAAG,uBAA4B+B,aAA5B,CAA0C,aAA1C,CAAhB;;AACA,UAAItC,OAAO,IAAIA,OAAO,CAAC4C,QAAvB,EAAiC;AAC/B,YAAMP,YAAY,GAAGrC,OAAO,CAAC4C,QAAR,CAAiBC,IAAjB,CAAsBF,KAAtB,CAArB;;AACA,YACEN,YAAY,YAAYE,WAAxB,IACAF,YAAY,CAACY,SAAb,GAAyBzE,gBAAgB,CAAC0E,qBAF5C,EAGE;AACAlD,UAAAA,OAAO,CAACmD,SAAR,GACEd,YAAY,CAACY,SAAb,GAAyBzE,gBAAgB,CAAC0E,qBAD5C;AAED,SAND,MAMO,IACJb,YAAY,YAAYE,WAAxB,IAAuCF,YAAY,CAACY,SAAb,GAAyB,CAAjE,IACAN,KAAK,KAAK,CAFL,EAGL;AACA3C,UAAAA,OAAO,CAACmD,SAAR,GAAoB,CAApB;AACD;AACF;AACF;;;WAED,6BAAiC;AAC/B,UAAQtD,UAAR,GAAuB,KAAKH,KAA5B,CAAQG,UAAR;AACA,0BACE;AACE,QAAA,SAAS,EAAC,mBADZ;AAEE,QAAA,GAAG,EAAE,KAAKN,aAFZ;AAGE,QAAA,IAAI,EAAC,cAHP;AAIE,QAAA,SAAS,EAAE,KAAKT,iBAJlB;AAKE,QAAA,OAAO,EAAE,iBAAAgC,KAAK,EAAI;AAChBA,UAAAA,KAAK,CAACI,eAAN;AACD,SAPH;AAQE,QAAA,KAAK,EAAE;AAAER,UAAAA,KAAK,EAAEb;AAAT;AART,sBAUE;AAAK,QAAA,SAAS,EAAC;AAAf,sBACE;AAAK,QAAA,SAAS,EAAC;AAAf,SAA6B,KAAKuD,aAAL,EAA7B,CADF,CAVF,CADF;AAgBD;;;WAED,yBAAiC;AAAA;;AAC/B,yBAA6C,KAAK3E,KAAlD;AAAA,UAAQuB,OAAR,gBAAQA,OAAR;AAAA,UAAiBtB,KAAjB,gBAAiBA,KAAjB;AAAA,UAAwB2E,IAAxB,gBAAwBA,IAAxB;AAAA,UAA8BC,UAA9B,gBAA8BA,UAA9B;AACA,yBAA0D,KAAK5D,KAA/D;AAAA,UAAQC,mBAAR,gBAAQA,mBAAR;AAAA,UAA6BG,UAA7B,gBAA6BA,UAA7B;AAAA,UAAyCC,YAAzC,gBAAyCA,YAAzC;AAEA,UAAIwD,UAAU,GAAG,KAAjB;AACA,UAAMC,WAA0B,GAAG,EAAnC;;AACA,WAAK,IAAIb,KAAK,GAAG,CAAjB,EAAoBA,KAAK,GAAG3C,OAAO,CAACG,MAApC,EAA4CwC,KAAK,IAAI,CAArD,EAAwD;AACtD,YAAMvC,MAAM,GAAGJ,OAAO,CAAC2C,KAAD,CAAtB;AACA,YAAM5B,GAAG,oBAAa4B,KAAb,cAAsBvC,MAAM,CAAC1B,KAA7B,CAAT;AACA6E,QAAAA,UAAU,GAAGA,UAAU,IAAInD,MAAM,CAAC1B,KAAP,KAAiBA,KAA5C;AACA8E,QAAAA,WAAW,CAACC,IAAZ,eACE;AACE,UAAA,GAAG,EAAE1C,GADP;AAEE,UAAA,IAAI,EAAC,QAFP;AAGE,UAAA,KAAK,EAAE4B,KAHT;AAIE,UAAA,SAAS,EAAExE,UAAU,CAAC,eAAD,EAAkB;AACrC,+BAAmBwB,mBAAmB,KAAKgD,KAAxB,IAAiC,CAAC5C;AADhB,WAAlB,CAJvB;AAOE,UAAA,OAAO,EAAE,KAAKf,iBAPhB;AAQE,UAAA,OAAO,EAAE,KAAKC;AARhB,WAUGmB,MAAM,CAAC1B,KAAP,KAAiBA,KAAjB,iBACC,oBAAC,eAAD;AAAiB,UAAA,IAAI,EAAE2E,IAAvB;AAA6B,UAAA,SAAS,EAAC;AAAvC,UAXJ,EAaGjD,MAAM,CAAC1B,KAAP,KAAiBA,KAAjB,iBAA0B;AAAM,UAAA,SAAS,EAAC;AAAhB,UAb7B,EAcG0B,MAAM,CAACC,KAdV,CADF;AAkBD;;AAEDmD,MAAAA,WAAW,CAACC,IAAZ,eAAiB;AAAI,QAAA,SAAS,EAAC,YAAd;AAA2B,QAAA,GAAG,EAAC;AAA/B,QAAjB;AAEAD,MAAAA,WAAW,CAACC,IAAZ,eACE;AACE,QAAA,GAAG,EAAC,qBADN;AAEE,QAAA,IAAI,EAAC,QAFP;AAGE,QAAA,KAAK,EAAEnF,aAHT;AAIE,QAAA,SAAS,EAAEH,UAAU,CAAC,eAAD,EAAkB;AACrC,6BAAmB4B;AADkB,SAAlB,CAJvB;AAOE,QAAA,OAAO,EAAE,KAAKf,iBAPhB;AAQE,QAAA,OAAO,EAAE,KAAKC;AARhB,SAUG,CAACsE,UAAD,IAAe7E,KAAK,KAAK,IAAzB,gBACC,oBAAC,eAAD;AAAiB,QAAA,IAAI,EAAE2E,IAAvB;AAA6B,QAAA,SAAS,EAAC;AAAvC,QADD,gBAGC;AAAM,QAAA,SAAS,EAAC;AAAhB,QAbJ,EAeGC,UAfH,CADF;AAoBAE,MAAAA,WAAW,CAACC,IAAZ,eACE;AAAK,QAAA,GAAG,EAAC,qBAAT;AAA+B,QAAA,SAAS,EAAC;AAAzC,sBACE;AAAM,QAAA,SAAS,EAAC;AAAhB,QADF,eAEE,oBAAC,SAAD;AACE,QAAA,GAAG,EAAC,cADN;AAEE,QAAA,GAAG,EAAE,KAAKhE,KAFZ;AAGE,QAAA,QAAQ,EAAE,KAAKL,iBAHjB;AAIE,QAAA,KAAK,EAAEU,UAJT;AAKE,QAAA,OAAO,EAAE;AAAA,iBAAM,MAAI,CAACU,QAAL,CAAc;AAAET,YAAAA,YAAY,EAAE;AAAhB,WAAd,CAAN;AAAA,SALX;AAME,QAAA,MAAM,EAAE;AAAA,iBAAM,MAAI,CAACS,QAAL,CAAc;AAAET,YAAAA,YAAY,EAAE;AAAhB,WAAd,CAAN;AAAA;AANV,QAFF,eAUE;AAAM,QAAA,SAAS,EAAC;AAAhB,QAVF,CADF;AAeAyD,MAAAA,WAAW,CAACC,IAAZ,eAAiB;AAAI,QAAA,GAAG,EAAC,YAAR;AAAqB,QAAA,SAAS,EAAC;AAA/B,QAAjB;AAEA,aAAOD,WAAP;AACD;;;WAED,kBAAsB;AACpB,yBAAqC,KAAK/E,KAA1C;AAAA,UAAQiF,QAAR,gBAAQA,QAAR;AAAA,UAAkBC,OAAlB,gBAAkBA,OAAlB;AAAA,UAA2BjF,KAA3B,gBAA2BA,KAA3B;AACA,UAAQkB,UAAR,GAAuB,KAAKF,KAA5B,CAAQE,UAAR;AACA,UAAMgE,aAAN,GAAwB,KAAKnF,KAA7B,CAAMmF,aAAN;AACAA,MAAAA,aAAa;AACXC,QAAAA,SAAS,EAAE,YADA;AAEXC,QAAAA,SAAS,EAAE;AACTC,UAAAA,eAAe,EAAE;AAAEC,YAAAA,OAAO,EAAE;AAAX;AADR;AAFA,SAKRJ,aALQ,CAAb;AAQA,0BACE;AACE,QAAA,SAAS,EAAC,uCADZ;AAEE,QAAA,GAAG,EAAE,KAAKvE;AAFZ,sBAIE;AACE,QAAA,SAAS,EAAElB,UAAU,CAAC,gCAAD,EAAmC;AACtD,iCAAuBwF;AAD+B,SAAnC;AADvB,sBAKE;AACE,QAAA,IAAI,EAAC,QADP;AAEE,QAAA,SAAS,EAAExF,UAAU,CAAC,yBAAD,EAA4B;AAC/C,4BAAkBwF;AAD6B,SAA5B,CAFvB;AAKE,QAAA,GAAG,EAAE,KAAKnE,MALZ;AAME,QAAA,OAAO,EAAE,KAAKZ,UANhB;AAOE,QAAA,QAAQ,EAAE8E;AAPZ,sBASE;AACE,QAAA,SAAS,EAAEvF,UAAU,CAAC;AACpB,wBAAcO,KAAK,KAAK;AADJ,SAAD;AADvB,SAKG,KAAKuF,eAAL,EALH,CATF,eAgBE,+CACE,oBAAC,eAAD;AAAiB,QAAA,IAAI,EAAEhG,MAAvB;AAA+B,QAAA,SAAS,EAAC;AAAzC,QADF,CAhBF,eAmBE,oBAAC,YAAD;AACE,QAAA,OAAO,EAAE2B,UADX;AAEE,QAAA,OAAO,EAAE;AAAEsE,UAAAA,WAAW,EAAE,KAAKC,iBAAL;AAAf,SAFX;AAGE,QAAA,aAAa,EAAEP,aAHjB;AAIE,QAAA,eAAe,EAAC,kBAJlB;AAKE,QAAA,YAAY,EAAE,KAAK1E,gBALrB;AAME,QAAA,YAAY,EAAE,KAAKC,gBANrB;AAOE,QAAA,SAAS,EAAE;AAAEiF,UAAAA,QAAQ,EAAE;AAAZ;AAPb,QAnBF,CALF,CAJF,CADF;AA0CD;;;;EAve4BtG,S;;gBAAzBU,gB,+BAI+BD,yB;;gBAJ/BC,gB,2BAM2B,G;;gBAN3BA,gB,kBAQkD;AACpDoC,EAAAA,QADoD,sBACnC,CACf;AACD,GAHmD;AAIpDlC,EAAAA,KAAK,EAAE,IAJ6C;AAKpDgF,EAAAA,QAAQ,EAAE,KAL0C;AAMpDE,EAAAA,aAAa,EAAE,EANqC;AAOpDP,EAAAA,IAAI,EAAErF,OAP8C;AAQpDsF,EAAAA,UAAU,EAAE,QARwC;AASpDrD,EAAAA,WAAW,EAAE,eATuC;AAUpDtB,EAAAA,WAAW,EAAE,qBAAAD,KAAK;AAAA,WAAKA,KAAK,KAAK,IAAV,GAAiB,CAAjB,GAAqB2F,IAAI,CAACC,KAAL,CAAW5F,KAAK,GAAG,IAAnB,CAA1B;AAAA,GAVkC;AAWpDuD,EAAAA,WAAW,EAAE,qBAAAsC,IAAI;AAAA,WAAIA,IAAI,GAAG,IAAX;AAAA,GAXmC;AAYpDZ,EAAAA,OAAO,EAAE;AAZ2C,C;;AAkexD,eAAenF,gBAAf","sourcesContent":["import React, { Component } from 'react';\nimport { PopperOptions } from 'popper.js';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsCheck, dhSort, IconDefinition } from '@deephaven/icons';\nimport { TimeUtils } from '@deephaven/utils';\nimport classNames from 'classnames';\nimport TimeInput from './TimeInput';\nimport DropdownMenu from './menu-actions/DropdownMenu';\nimport './CustomTimeSelect.scss';\nimport './context-actions/ContextActions.scss';\n\nconst CUSTOM_OPTION = -1;\n\nenum MENU_NAVIGATION_DIRECTION {\n UP = 'UP',\n DOWN = 'DOWN',\n}\n\ntype CustomTimeSelectProps = {\n options: { title: string; value: number }[];\n popperOptions: PopperOptions;\n value: number | null;\n onChange(value: number): void;\n disabled: boolean;\n icon: IconDefinition;\n placeholder: string;\n customText: string;\n // Defaults to converting the value in milliseconds to time in seconds\n valueToTime(val: number | null): number;\n // Defaults to converting the time in seconds to value in milliseconds\n timeToValue(time: number): number;\n invalid: boolean;\n};\n\ntype TimeInSeconds = number;\n\ntype CustomTimeSelectState = {\n keyboardOptionIndex: number;\n menuIsOpen: boolean;\n inputWidth: number;\n customTime: TimeInSeconds;\n inputFocused: boolean;\n};\n\nclass CustomTimeSelect extends Component<\n CustomTimeSelectProps,\n CustomTimeSelectState\n> {\n static MENU_NAVIGATION_DIRECTION = MENU_NAVIGATION_DIRECTION;\n\n static DROP_DOWN_MENU_HEIGHT = 125;\n\n static defaultProps: Partial<CustomTimeSelectProps> = {\n onChange(): void {\n // no-op\n },\n value: null,\n disabled: false,\n popperOptions: {},\n icon: vsCheck,\n customText: 'Custom',\n placeholder: 'Select a time',\n valueToTime: value => (value === null ? 0 : Math.round(value / 1000)),\n timeToValue: time => time * 1000,\n invalid: false,\n };\n\n constructor(props: CustomTimeSelectProps) {\n super(props);\n\n const { value, valueToTime } = props;\n\n this.toggleMenu = this.toggleMenu.bind(this);\n this.handleMenuKeyDown = this.handleMenuKeyDown.bind(this);\n this.closeMenu = this.closeMenu.bind(this);\n\n this.handleOptionClick = this.handleOptionClick.bind(this);\n this.handleOptionFocus = this.handleOptionFocus.bind(this);\n\n this.handleMenuOpened = this.handleMenuOpened.bind(this);\n this.handleMenuExited = this.handleMenuExited.bind(this);\n this.handleCustomInput = this.handleCustomInput.bind(this);\n\n this.csContainer = React.createRef();\n this.menuContainer = React.createRef();\n this.button = React.createRef();\n this.input = React.createRef();\n\n this.state = {\n keyboardOptionIndex: 0,\n menuIsOpen: false,\n inputWidth: 100,\n customTime: valueToTime(value),\n inputFocused: false,\n };\n }\n\n csContainer: React.RefObject<HTMLDivElement>;\n\n menuContainer: React.RefObject<HTMLDivElement>;\n\n button: React.RefObject<HTMLButtonElement>;\n\n input: React.RefObject<HTMLInputElement>;\n\n getSelectedText(): string {\n const { options, value, placeholder } = this.props;\n const { customTime } = this.state;\n\n if (value === null) {\n return placeholder;\n }\n\n for (let i = 0; i < options.length; i += 1) {\n const option = options[i];\n if (option.value === value) {\n return option.title;\n }\n }\n\n return TimeUtils.formatTime(customTime);\n }\n\n setInputWidth(): void {\n if (this.csContainer.current) {\n this.setState({\n inputWidth: this.csContainer.current.getBoundingClientRect().width,\n });\n }\n }\n\n focus(): void {\n this.button.current?.focus();\n }\n\n updateInputValue(value: number): void {\n const { onChange } = this.props;\n onChange(value);\n }\n\n handleResize(): void {\n this.setInputWidth();\n }\n\n handleMenuKeyDown(event: React.KeyboardEvent<HTMLDivElement>): void {\n const { keyboardOptionIndex, inputFocused } = this.state;\n const { options } = this.props;\n\n switch (event.key) {\n case 'Enter':\n case ' ': // Space Bar\n if (inputFocused) {\n this.updateFromCustom();\n } else {\n this.updateInputValue(options[keyboardOptionIndex].value);\n }\n this.closeMenu();\n this.button.current?.focus();\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'Tab':\n if (event.shiftKey) {\n this.handleMenuNavigation(\n CustomTimeSelect.MENU_NAVIGATION_DIRECTION.UP\n );\n } else {\n this.handleMenuNavigation(\n CustomTimeSelect.MENU_NAVIGATION_DIRECTION.DOWN\n );\n }\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'ArrowUp':\n this.handleMenuNavigation(\n CustomTimeSelect.MENU_NAVIGATION_DIRECTION.UP\n );\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'ArrowDown':\n this.handleMenuNavigation(\n CustomTimeSelect.MENU_NAVIGATION_DIRECTION.DOWN\n );\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'Escape':\n this.closeMenu();\n break;\n default:\n break;\n }\n }\n\n handleMenuNavigation(direction: MENU_NAVIGATION_DIRECTION): void {\n const { keyboardOptionIndex, inputFocused } = this.state;\n const { options } = this.props;\n const menuOptionsLength = options.length;\n let newKeyboardOptionIndex = keyboardOptionIndex;\n switch (direction) {\n case CustomTimeSelect.MENU_NAVIGATION_DIRECTION.UP:\n if (!inputFocused && keyboardOptionIndex === 0) {\n this.focusInput();\n break;\n } else if (inputFocused) {\n this.focusOption(keyboardOptionIndex);\n }\n\n if (keyboardOptionIndex > 0 && !inputFocused) {\n newKeyboardOptionIndex =\n (newKeyboardOptionIndex - 1) % menuOptionsLength;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex,\n });\n } else if (keyboardOptionIndex === 0) {\n newKeyboardOptionIndex = menuOptionsLength - 1;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex,\n });\n }\n this.scrollOptionIntoView(newKeyboardOptionIndex);\n break;\n case CustomTimeSelect.MENU_NAVIGATION_DIRECTION.DOWN:\n if (!inputFocused && keyboardOptionIndex === menuOptionsLength - 1) {\n this.focusInput();\n break;\n } else if (inputFocused) {\n this.focusOption(keyboardOptionIndex);\n }\n\n if (\n keyboardOptionIndex < menuOptionsLength &&\n !(inputFocused && keyboardOptionIndex === 0)\n ) {\n newKeyboardOptionIndex =\n (newKeyboardOptionIndex + 1) % menuOptionsLength;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex,\n });\n }\n this.scrollOptionIntoView(newKeyboardOptionIndex);\n break;\n default:\n break;\n }\n }\n\n handleOptionClick(event: React.MouseEvent<HTMLButtonElement>): void {\n const optionIndex = Number(event.currentTarget.value);\n const { options, timeToValue } = this.props;\n const { customTime } = this.state;\n\n if (optionIndex === CUSTOM_OPTION) {\n const update = timeToValue(customTime);\n this.updateAndClose(update);\n } else {\n this.updateAndClose(options[optionIndex].value);\n }\n }\n\n updateAndClose(update: number): void {\n this.updateInputValue(update);\n this.closeMenu();\n this.button.current?.focus();\n }\n\n handleOptionFocus(event: React.FocusEvent<HTMLButtonElement>): void {\n this.setState({ keyboardOptionIndex: Number(event.target.value) });\n }\n\n handleMenuOpened(): void {\n const { options, value } = this.props;\n const { keyboardOptionIndex } = this.state;\n this.scrollOptionIntoView(keyboardOptionIndex);\n const activeOption = this.menuContainer.current?.querySelector(\n '.cs-option-btn.keyboard-active'\n );\n if (activeOption instanceof HTMLElement) {\n activeOption.focus();\n }\n\n if (value === null) {\n return;\n }\n const valueIndex = options.map(option => option.value).indexOf(value);\n if (valueIndex < 0) {\n // The custom option should be selected\n this.focusInput();\n }\n }\n\n focusInput(): void {\n this.input.current?.focus();\n }\n\n focusOption(index: number): void {\n const options = this.menuContainer.current?.querySelector('.cs-options');\n if (options && options.children) {\n const option = options.children.item(index);\n if (option instanceof HTMLElement) {\n option.focus();\n }\n }\n }\n\n handleMenuExited(): void {\n const { menuIsOpen } = this.state;\n if (menuIsOpen) {\n this.setState({ menuIsOpen: false, keyboardOptionIndex: 0 });\n }\n }\n\n handleCustomInput(value: number): void {\n const { timeToValue } = this.props;\n\n const update = timeToValue(value);\n this.updateInputValue(update);\n this.setState({\n customTime: value,\n });\n }\n\n updateFromCustom(): void {\n const { timeToValue } = this.props;\n const { customTime } = this.state;\n\n const update = timeToValue(customTime);\n this.updateInputValue(update);\n }\n\n toggleMenu(event: React.MouseEvent<HTMLButtonElement>): void {\n const { menuIsOpen } = this.state;\n if (menuIsOpen) {\n this.closeMenu();\n } else {\n this.openMenu();\n }\n event.stopPropagation();\n }\n\n openMenu(): void {\n this.updateKeyboardIndex();\n this.setInputWidth();\n this.setState({ menuIsOpen: true });\n }\n\n closeMenu(focusButton = true): void {\n this.setState({ menuIsOpen: false });\n if (focusButton) {\n this.button.current?.focus();\n }\n }\n\n updateKeyboardIndex(): void {\n const { options, value } = this.props;\n if (value === null) {\n return;\n }\n const valueIndex = options.map(option => option.value).indexOf(value);\n if (valueIndex > 0) {\n this.setState({ keyboardOptionIndex: valueIndex });\n }\n }\n\n scrollOptionIntoView(index: number): void {\n const options = this.menuContainer.current?.querySelector('.cs-options');\n if (options && options.children) {\n const activeOption = options.children.item(index);\n if (\n activeOption instanceof HTMLElement &&\n activeOption.offsetTop > CustomTimeSelect.DROP_DOWN_MENU_HEIGHT\n ) {\n options.scrollTop =\n activeOption.offsetTop - CustomTimeSelect.DROP_DOWN_MENU_HEIGHT;\n } else if (\n (activeOption instanceof HTMLElement && activeOption.offsetTop < 0) ||\n index === 0\n ) {\n options.scrollTop = 0;\n }\n }\n }\n\n renderMenuElement(): JSX.Element {\n const { inputWidth } = this.state;\n return (\n <div\n className=\"cs-menu-container\"\n ref={this.menuContainer}\n role=\"presentation\"\n onKeyDown={this.handleMenuKeyDown}\n onClick={event => {\n event.stopPropagation();\n }}\n style={{ width: inputWidth }}\n >\n <div className=\"cs-options-container\">\n <div className=\"cs-options\">{this.renderOptions()}</div>\n </div>\n </div>\n );\n }\n\n renderOptions(): React.ReactNode {\n const { options, value, icon, customText } = this.props;\n const { keyboardOptionIndex, customTime, inputFocused } = this.state;\n\n let matchFound = false;\n const optionArray: JSX.Element[] = [];\n for (let index = 0; index < options.length; index += 1) {\n const option = options[index];\n const key = `option-${index}-${option.value}`;\n matchFound = matchFound || option.value === value;\n optionArray.push(\n <button\n key={key}\n type=\"button\"\n value={index}\n className={classNames('cs-option-btn', {\n 'keyboard-active': keyboardOptionIndex === index && !inputFocused,\n })}\n onClick={this.handleOptionClick}\n onFocus={this.handleOptionFocus}\n >\n {option.value === value && (\n <FontAwesomeIcon icon={icon} className=\"mr-2\" />\n )}\n {option.value !== value && <span className=\"mr-4\" />}\n {option.title}\n </button>\n );\n }\n\n optionArray.push(<hr className=\"cs-divider\" key=\"option-divider\" />);\n\n optionArray.push(\n <button\n key=\"option-custom-label\"\n type=\"button\"\n value={CUSTOM_OPTION}\n className={classNames('cs-option-btn', {\n 'keyboard-active': inputFocused,\n })}\n onClick={this.handleOptionClick}\n onFocus={this.handleOptionFocus}\n >\n {!matchFound && value !== null ? (\n <FontAwesomeIcon icon={icon} className=\"mr-2\" />\n ) : (\n <span className=\"mr-4\" />\n )}\n {customText}\n </button>\n );\n\n optionArray.push(\n <div key=\"cs-custom-container\" className=\"cs-custom-container\">\n <span className=\"mr-2\" />\n <TimeInput\n key=\"option-input\"\n ref={this.input}\n onChange={this.handleCustomInput}\n value={customTime}\n onFocus={() => this.setState({ inputFocused: true })}\n onBlur={() => this.setState({ inputFocused: false })}\n />\n <span className=\"ml-2\" />\n </div>\n );\n\n optionArray.push(<hr key=\"option-end\" className=\"mb-2\" />);\n\n return optionArray;\n }\n\n render(): JSX.Element {\n const { disabled, invalid, value } = this.props;\n const { menuIsOpen } = this.state;\n let { popperOptions } = this.props;\n popperOptions = {\n placement: 'bottom-end',\n modifiers: {\n preventOverflow: { enabled: false },\n },\n ...popperOptions,\n };\n\n return (\n <div\n className=\"input-group cs-container context-menu\"\n ref={this.csContainer}\n >\n <div\n className={classNames('input-group-append cs-dropdown', {\n 'cs-dropdown-invalid': invalid,\n })}\n >\n <button\n type=\"button\"\n className={classNames('btn cs-btn form-control', {\n 'cs-btn-invalid': invalid,\n })}\n ref={this.button}\n onClick={this.toggleMenu}\n disabled={disabled}\n >\n <span\n className={classNames({\n 'text-muted': value === null,\n })}\n >\n {this.getSelectedText()}\n </span>\n <span>\n <FontAwesomeIcon icon={dhSort} className=\"cs-caret\" />\n </span>\n <DropdownMenu\n isShown={menuIsOpen}\n actions={{ menuElement: this.renderMenuElement() }}\n popperOptions={popperOptions}\n popperClassName=\"CustomTimeSelect\"\n onMenuOpened={this.handleMenuOpened}\n onMenuClosed={this.handleMenuExited}\n menuStyle={{ maxWidth: '100rem' }}\n />\n </button>\n </div>\n </div>\n );\n }\n}\n\nexport default CustomTimeSelect;\n"],"file":"CustomTimeSelect.js"}
1
+ {"version":3,"sources":["../src/CustomTimeSelect.tsx"],"names":["React","Component","FontAwesomeIcon","vsCheck","dhSort","TimeUtils","classNames","TimeInput","DropdownMenu","CUSTOM_OPTION","MENU_NAVIGATION_DIRECTION","CustomTimeSelect","constructor","props","value","valueToTime","toggleMenu","bind","handleMenuKeyDown","closeMenu","handleOptionClick","handleOptionFocus","handleMenuOpened","handleMenuExited","handleCustomInput","csContainer","createRef","menuContainer","button","input","state","keyboardOptionIndex","menuIsOpen","inputWidth","customTime","inputFocused","getSelectedText","options","placeholder","i","length","option","title","formatTime","setInputWidth","current","setState","getBoundingClientRect","width","focus","updateInputValue","onChange","handleResize","event","key","updateFromCustom","stopPropagation","preventDefault","shiftKey","handleMenuNavigation","UP","DOWN","direction","menuOptionsLength","newKeyboardOptionIndex","focusInput","focusOption","scrollOptionIntoView","optionIndex","Number","currentTarget","timeToValue","update","updateAndClose","target","activeOption","querySelector","HTMLElement","valueIndex","map","indexOf","index","children","item","openMenu","updateKeyboardIndex","focusButton","offsetTop","DROP_DOWN_MENU_HEIGHT","scrollTop","renderMenuElement","renderOptions","icon","customText","matchFound","optionArray","push","render","disabled","invalid","popperOptions","placement","modifiers","preventOverflow","enabled","menuElement","maxWidth","Math","round","time"],"mappings":"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","sourcesContent":["import React, { Component } from 'react';\nimport { PopperOptions } from 'popper.js';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsCheck, dhSort, IconDefinition } from '@deephaven/icons';\nimport { TimeUtils } from '@deephaven/utils';\nimport classNames from 'classnames';\nimport TimeInput from './TimeInput';\nimport DropdownMenu from './menu-actions/DropdownMenu';\nimport './CustomTimeSelect.scss';\nimport './context-actions/ContextActions.scss';\n\nconst CUSTOM_OPTION = -1;\n\nenum MENU_NAVIGATION_DIRECTION {\n UP = 'UP',\n DOWN = 'DOWN',\n}\n\ntype CustomTimeSelectProps = {\n options: { title: string; value: number }[];\n popperOptions: PopperOptions;\n value: number | null;\n onChange(value: number): void;\n disabled: boolean;\n icon: IconDefinition;\n placeholder: string;\n customText: string;\n // Defaults to converting the value in milliseconds to time in seconds\n valueToTime(val: number | null): number;\n // Defaults to converting the time in seconds to value in milliseconds\n timeToValue(time: number): number;\n invalid: boolean;\n};\n\ntype TimeInSeconds = number;\n\ntype CustomTimeSelectState = {\n keyboardOptionIndex: number;\n menuIsOpen: boolean;\n inputWidth: number;\n customTime: TimeInSeconds;\n inputFocused: boolean;\n};\n\nclass CustomTimeSelect extends Component<\n CustomTimeSelectProps,\n CustomTimeSelectState\n> {\n static MENU_NAVIGATION_DIRECTION = MENU_NAVIGATION_DIRECTION;\n\n static DROP_DOWN_MENU_HEIGHT = 125;\n\n static defaultProps: Partial<CustomTimeSelectProps> = {\n onChange(): void {\n // no-op\n },\n value: null,\n disabled: false,\n popperOptions: {},\n icon: vsCheck,\n customText: 'Custom',\n placeholder: 'Select a time',\n valueToTime: value => (value === null ? 0 : Math.round(value / 1000)),\n timeToValue: time => time * 1000,\n invalid: false,\n };\n\n constructor(props: CustomTimeSelectProps) {\n super(props);\n\n const { value, valueToTime } = props;\n\n this.toggleMenu = this.toggleMenu.bind(this);\n this.handleMenuKeyDown = this.handleMenuKeyDown.bind(this);\n this.closeMenu = this.closeMenu.bind(this);\n\n this.handleOptionClick = this.handleOptionClick.bind(this);\n this.handleOptionFocus = this.handleOptionFocus.bind(this);\n\n this.handleMenuOpened = this.handleMenuOpened.bind(this);\n this.handleMenuExited = this.handleMenuExited.bind(this);\n this.handleCustomInput = this.handleCustomInput.bind(this);\n\n this.csContainer = React.createRef();\n this.menuContainer = React.createRef();\n this.button = React.createRef();\n this.input = React.createRef();\n\n this.state = {\n keyboardOptionIndex: 0,\n menuIsOpen: false,\n inputWidth: 100,\n customTime: valueToTime(value),\n inputFocused: false,\n };\n }\n\n csContainer: React.RefObject<HTMLDivElement>;\n\n menuContainer: React.RefObject<HTMLDivElement>;\n\n button: React.RefObject<HTMLButtonElement>;\n\n input: React.RefObject<HTMLInputElement>;\n\n getSelectedText(): string {\n const { options, value, placeholder } = this.props;\n const { customTime } = this.state;\n\n if (value === null) {\n return placeholder;\n }\n\n for (let i = 0; i < options.length; i += 1) {\n const option = options[i];\n if (option.value === value) {\n return option.title;\n }\n }\n\n return TimeUtils.formatTime(customTime);\n }\n\n setInputWidth(): void {\n if (this.csContainer.current) {\n this.setState({\n inputWidth: this.csContainer.current.getBoundingClientRect().width,\n });\n }\n }\n\n focus(): void {\n this.button.current?.focus();\n }\n\n updateInputValue(value: number): void {\n const { onChange } = this.props;\n onChange(value);\n }\n\n handleResize(): void {\n this.setInputWidth();\n }\n\n handleMenuKeyDown(event: React.KeyboardEvent<HTMLDivElement>): void {\n const { keyboardOptionIndex, inputFocused } = this.state;\n const { options } = this.props;\n\n switch (event.key) {\n case 'Enter':\n case ' ': // Space Bar\n if (inputFocused) {\n this.updateFromCustom();\n } else {\n this.updateInputValue(options[keyboardOptionIndex].value);\n }\n this.closeMenu();\n this.button.current?.focus();\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'Tab':\n if (event.shiftKey) {\n this.handleMenuNavigation(\n CustomTimeSelect.MENU_NAVIGATION_DIRECTION.UP\n );\n } else {\n this.handleMenuNavigation(\n CustomTimeSelect.MENU_NAVIGATION_DIRECTION.DOWN\n );\n }\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'ArrowUp':\n this.handleMenuNavigation(\n CustomTimeSelect.MENU_NAVIGATION_DIRECTION.UP\n );\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'ArrowDown':\n this.handleMenuNavigation(\n CustomTimeSelect.MENU_NAVIGATION_DIRECTION.DOWN\n );\n event.stopPropagation();\n event.preventDefault();\n break;\n case 'Escape':\n this.closeMenu();\n break;\n default:\n break;\n }\n }\n\n handleMenuNavigation(direction: MENU_NAVIGATION_DIRECTION): void {\n const { keyboardOptionIndex, inputFocused } = this.state;\n const { options } = this.props;\n const menuOptionsLength = options.length;\n let newKeyboardOptionIndex = keyboardOptionIndex;\n switch (direction) {\n case CustomTimeSelect.MENU_NAVIGATION_DIRECTION.UP:\n if (!inputFocused && keyboardOptionIndex === 0) {\n this.focusInput();\n break;\n } else if (inputFocused) {\n this.focusOption(keyboardOptionIndex);\n }\n\n if (keyboardOptionIndex > 0 && !inputFocused) {\n newKeyboardOptionIndex =\n (newKeyboardOptionIndex - 1) % menuOptionsLength;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex,\n });\n } else if (keyboardOptionIndex === 0) {\n newKeyboardOptionIndex = menuOptionsLength - 1;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex,\n });\n }\n this.scrollOptionIntoView(newKeyboardOptionIndex);\n break;\n case CustomTimeSelect.MENU_NAVIGATION_DIRECTION.DOWN:\n if (!inputFocused && keyboardOptionIndex === menuOptionsLength - 1) {\n this.focusInput();\n break;\n } else if (inputFocused) {\n this.focusOption(keyboardOptionIndex);\n }\n\n if (\n keyboardOptionIndex < menuOptionsLength &&\n !(inputFocused && keyboardOptionIndex === 0)\n ) {\n newKeyboardOptionIndex =\n (newKeyboardOptionIndex + 1) % menuOptionsLength;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex,\n });\n }\n this.scrollOptionIntoView(newKeyboardOptionIndex);\n break;\n default:\n break;\n }\n }\n\n handleOptionClick(event: React.MouseEvent<HTMLButtonElement>): void {\n const optionIndex = Number(event.currentTarget.value);\n const { options, timeToValue } = this.props;\n const { customTime } = this.state;\n\n if (optionIndex === CUSTOM_OPTION) {\n const update = timeToValue(customTime);\n this.updateAndClose(update);\n } else {\n this.updateAndClose(options[optionIndex].value);\n }\n }\n\n updateAndClose(update: number): void {\n this.updateInputValue(update);\n this.closeMenu();\n this.button.current?.focus();\n }\n\n handleOptionFocus(event: React.FocusEvent<HTMLButtonElement>): void {\n this.setState({ keyboardOptionIndex: Number(event.target.value) });\n }\n\n handleMenuOpened(): void {\n const { options, value } = this.props;\n const { keyboardOptionIndex } = this.state;\n this.scrollOptionIntoView(keyboardOptionIndex);\n const activeOption = this.menuContainer.current?.querySelector(\n '.cs-option-btn.keyboard-active'\n );\n if (activeOption instanceof HTMLElement) {\n activeOption.focus();\n }\n\n if (value === null) {\n return;\n }\n const valueIndex = options.map(option => option.value).indexOf(value);\n if (valueIndex < 0) {\n // The custom option should be selected\n this.focusInput();\n }\n }\n\n focusInput(): void {\n this.input.current?.focus();\n }\n\n focusOption(index: number): void {\n const options = this.menuContainer.current?.querySelector('.cs-options');\n if (options && options.children) {\n const option = options.children.item(index);\n if (option instanceof HTMLElement) {\n option.focus();\n }\n }\n }\n\n handleMenuExited(): void {\n const { menuIsOpen } = this.state;\n if (menuIsOpen) {\n this.setState({ menuIsOpen: false, keyboardOptionIndex: 0 });\n }\n }\n\n handleCustomInput(value: number): void {\n const { timeToValue } = this.props;\n\n const update = timeToValue(value);\n this.updateInputValue(update);\n this.setState({\n customTime: value,\n });\n }\n\n updateFromCustom(): void {\n const { timeToValue } = this.props;\n const { customTime } = this.state;\n\n const update = timeToValue(customTime);\n this.updateInputValue(update);\n }\n\n toggleMenu(event: React.MouseEvent<HTMLButtonElement>): void {\n const { menuIsOpen } = this.state;\n if (menuIsOpen) {\n this.closeMenu();\n } else {\n this.openMenu();\n }\n event.stopPropagation();\n }\n\n openMenu(): void {\n this.updateKeyboardIndex();\n this.setInputWidth();\n this.setState({ menuIsOpen: true });\n }\n\n closeMenu(focusButton = true): void {\n this.setState({ menuIsOpen: false });\n if (focusButton) {\n this.button.current?.focus();\n }\n }\n\n updateKeyboardIndex(): void {\n const { options, value } = this.props;\n if (value === null) {\n return;\n }\n const valueIndex = options.map(option => option.value).indexOf(value);\n if (valueIndex > 0) {\n this.setState({ keyboardOptionIndex: valueIndex });\n }\n }\n\n scrollOptionIntoView(index: number): void {\n const options = this.menuContainer.current?.querySelector('.cs-options');\n if (options && options.children) {\n const activeOption = options.children.item(index);\n if (\n activeOption instanceof HTMLElement &&\n activeOption.offsetTop > CustomTimeSelect.DROP_DOWN_MENU_HEIGHT\n ) {\n options.scrollTop =\n activeOption.offsetTop - CustomTimeSelect.DROP_DOWN_MENU_HEIGHT;\n } else if (\n (activeOption instanceof HTMLElement && activeOption.offsetTop < 0) ||\n index === 0\n ) {\n options.scrollTop = 0;\n }\n }\n }\n\n renderMenuElement(): JSX.Element {\n const { inputWidth } = this.state;\n return (\n <div\n className=\"cs-menu-container\"\n ref={this.menuContainer}\n role=\"presentation\"\n onKeyDown={this.handleMenuKeyDown}\n onClick={event => {\n event.stopPropagation();\n }}\n style={{ width: inputWidth }}\n >\n <div className=\"cs-options-container\">\n <div className=\"cs-options\">{this.renderOptions()}</div>\n </div>\n </div>\n );\n }\n\n renderOptions(): React.ReactNode {\n const { options, value, icon, customText } = this.props;\n const { keyboardOptionIndex, customTime, inputFocused } = this.state;\n\n let matchFound = false;\n const optionArray: JSX.Element[] = [];\n for (let index = 0; index < options.length; index += 1) {\n const option = options[index];\n const key = `option-${index}-${option.value}`;\n matchFound = matchFound || option.value === value;\n optionArray.push(\n <button\n key={key}\n type=\"button\"\n value={index}\n className={classNames('cs-option-btn', {\n 'keyboard-active': keyboardOptionIndex === index && !inputFocused,\n })}\n onClick={this.handleOptionClick}\n onFocus={this.handleOptionFocus}\n >\n {option.value === value && (\n <FontAwesomeIcon icon={icon} className=\"mr-2\" />\n )}\n {option.value !== value && <span className=\"mr-4\" />}\n {option.title}\n </button>\n );\n }\n\n optionArray.push(<hr className=\"cs-divider\" key=\"option-divider\" />);\n\n optionArray.push(\n <button\n key=\"option-custom-label\"\n type=\"button\"\n value={CUSTOM_OPTION}\n className={classNames('cs-option-btn', {\n 'keyboard-active': inputFocused,\n })}\n onClick={this.handleOptionClick}\n onFocus={this.handleOptionFocus}\n >\n {!matchFound && value !== null ? (\n <FontAwesomeIcon icon={icon} className=\"mr-2\" />\n ) : (\n <span className=\"mr-4\" />\n )}\n {customText}\n </button>\n );\n\n optionArray.push(\n <div key=\"cs-custom-container\" className=\"cs-custom-container\">\n <span className=\"mr-2\" />\n <TimeInput\n key=\"option-input\"\n ref={this.input}\n onChange={this.handleCustomInput}\n value={customTime}\n onFocus={() => this.setState({ inputFocused: true })}\n onBlur={() => this.setState({ inputFocused: false })}\n />\n <span className=\"ml-2\" />\n </div>\n );\n\n optionArray.push(<hr key=\"option-end\" className=\"mb-2\" />);\n\n return optionArray;\n }\n\n render(): JSX.Element {\n const { disabled, invalid, value } = this.props;\n const { menuIsOpen } = this.state;\n let { popperOptions } = this.props;\n popperOptions = {\n placement: 'bottom-end',\n modifiers: {\n preventOverflow: { enabled: false },\n },\n ...popperOptions,\n };\n\n return (\n <div\n className=\"input-group cs-container context-menu\"\n ref={this.csContainer}\n >\n <div\n className={classNames('input-group-append cs-dropdown', {\n 'cs-dropdown-invalid': invalid,\n })}\n >\n <button\n type=\"button\"\n className={classNames('btn cs-btn form-control', {\n 'cs-btn-invalid': invalid,\n })}\n ref={this.button}\n onClick={this.toggleMenu}\n disabled={disabled}\n >\n <span\n className={classNames({\n 'text-muted': value === null,\n })}\n >\n {this.getSelectedText()}\n </span>\n <span>\n <FontAwesomeIcon icon={dhSort} className=\"cs-caret\" />\n </span>\n <DropdownMenu\n isShown={menuIsOpen}\n actions={{ menuElement: this.renderMenuElement() }}\n popperOptions={popperOptions}\n popperClassName=\"CustomTimeSelect\"\n onMenuOpened={this.handleMenuOpened}\n onMenuClosed={this.handleMenuExited}\n menuStyle={{ maxWidth: '100rem' }}\n />\n </button>\n </div>\n </div>\n );\n }\n}\n\nexport default CustomTimeSelect;\n"],"file":"CustomTimeSelect.js"}
@@ -1,110 +1,80 @@
1
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
2
-
3
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
4
-
5
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
6
-
7
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
8
-
9
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
10
-
11
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
12
-
13
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
14
-
15
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
16
-
17
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
18
-
19
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
20
-
21
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
22
-
23
1
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
24
2
 
25
3
  import React, { PureComponent } from 'react';
26
4
  import debounce from 'lodash.debounce';
27
- import SearchInput from './SearchInput';
28
-
29
- var DebouncedSearchInput = /*#__PURE__*/function (_PureComponent) {
30
- _inherits(DebouncedSearchInput, _PureComponent);
31
-
32
- var _super = _createSuper(DebouncedSearchInput);
33
-
34
- function DebouncedSearchInput(props) {
35
- var _this;
36
-
37
- _classCallCheck(this, DebouncedSearchInput);
5
+ import SearchInput from "./SearchInput.js";
38
6
 
39
- _this = _super.call(this, props);
7
+ class DebouncedSearchInput extends PureComponent {
8
+ constructor(props) {
9
+ super(props);
40
10
 
41
- _defineProperty(_assertThisInitialized(_this), "searchInput", void 0);
11
+ _defineProperty(this, "searchInput", void 0);
42
12
 
43
- _this.searchInput = /*#__PURE__*/React.createRef();
44
- _this.handleChange = _this.handleChange.bind(_assertThisInitialized(_this));
45
- _this.sendUpdate = debounce(_this.sendUpdate.bind(_assertThisInitialized(_this)), props.debounceMs);
46
- _this.state = {
13
+ this.searchInput = /*#__PURE__*/React.createRef();
14
+ this.handleChange = this.handleChange.bind(this);
15
+ this.sendUpdate = debounce(this.sendUpdate.bind(this), props.debounceMs);
16
+ this.state = {
47
17
  value: props.value
48
18
  };
49
- return _this;
50
19
  }
51
20
 
52
- _createClass(DebouncedSearchInput, [{
53
- key: "componentDidUpdate",
54
- value: function componentDidUpdate(prevProps) {
55
- var value = this.props.value;
21
+ componentDidUpdate(prevProps) {
22
+ var {
23
+ value
24
+ } = this.props;
56
25
 
57
- if (prevProps.value !== value) {
58
- // eslint-disable-next-line react/no-did-update-set-state
59
- this.setState({
60
- value: value
61
- });
62
- }
63
- }
64
- }, {
65
- key: "focus",
66
- value: function focus() {
67
- var _this$searchInput$cur;
68
-
69
- (_this$searchInput$cur = this.searchInput.current) === null || _this$searchInput$cur === void 0 ? void 0 : _this$searchInput$cur.focus();
70
- }
71
- }, {
72
- key: "handleChange",
73
- value: function handleChange(event) {
26
+ if (prevProps.value !== value) {
27
+ // eslint-disable-next-line react/no-did-update-set-state
74
28
  this.setState({
75
- value: event.target.value
76
- }, this.sendUpdate);
77
- }
78
- }, {
79
- key: "sendUpdate",
80
- value: function sendUpdate() {
81
- var onChange = this.props.onChange;
82
- var value = this.state.value;
83
- onChange(value);
84
- }
85
- }, {
86
- key: "render",
87
- value: function render() {
88
- var _this$props = this.props,
89
- placeholder = _this$props.placeholder,
90
- className = _this$props.className,
91
- matchCount = _this$props.matchCount,
92
- id = _this$props.id;
93
- var value = this.state.value;
94
- return /*#__PURE__*/React.createElement(SearchInput, {
95
- value: value,
96
- placeholder: placeholder,
97
- onChange: this.handleChange,
98
- className: className,
99
- matchCount: matchCount,
100
- ref: this.searchInput,
101
- id: id
29
+ value
102
30
  });
103
31
  }
104
- }]);
32
+ }
33
+
34
+ focus() {
35
+ var _this$searchInput$cur;
36
+
37
+ (_this$searchInput$cur = this.searchInput.current) === null || _this$searchInput$cur === void 0 ? void 0 : _this$searchInput$cur.focus();
38
+ }
39
+
40
+ handleChange(event) {
41
+ this.setState({
42
+ value: event.target.value
43
+ }, this.sendUpdate);
44
+ }
45
+
46
+ sendUpdate() {
47
+ var {
48
+ onChange
49
+ } = this.props;
50
+ var {
51
+ value
52
+ } = this.state;
53
+ onChange(value);
54
+ }
55
+
56
+ render() {
57
+ var {
58
+ placeholder,
59
+ className,
60
+ matchCount,
61
+ id
62
+ } = this.props;
63
+ var {
64
+ value
65
+ } = this.state;
66
+ return /*#__PURE__*/React.createElement(SearchInput, {
67
+ value: value,
68
+ placeholder: placeholder,
69
+ onChange: this.handleChange,
70
+ className: className,
71
+ matchCount: matchCount,
72
+ ref: this.searchInput,
73
+ id: id
74
+ });
75
+ }
105
76
 
106
- return DebouncedSearchInput;
107
- }(PureComponent);
77
+ }
108
78
 
109
79
  _defineProperty(DebouncedSearchInput, "defaultProps", {
110
80
  placeholder: 'Search',
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/DebouncedSearchInput.tsx"],"names":["React","PureComponent","debounce","SearchInput","DebouncedSearchInput","props","searchInput","createRef","handleChange","bind","sendUpdate","debounceMs","state","value","prevProps","setState","current","focus","event","target","onChange","placeholder","className","matchCount","id"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAOA,KAAP,IAAgBC,aAAhB,QAAqC,OAArC;AACA,OAAOC,QAAP,MAAqB,iBAArB;AACA,OAAOC,WAAP,MAAwB,eAAxB;;IAgBMC,oB;;;;;AAYJ,gCAAYC,KAAZ,EAA8C;AAAA;;AAAA;;AAC5C,8BAAMA,KAAN;;AAD4C;;AAE5C,UAAKC,WAAL,gBAAmBN,KAAK,CAACO,SAAN,EAAnB;AACA,UAAKC,YAAL,GAAoB,MAAKA,YAAL,CAAkBC,IAAlB,+BAApB;AACA,UAAKC,UAAL,GAAkBR,QAAQ,CAAC,MAAKQ,UAAL,CAAgBD,IAAhB,+BAAD,EAA6BJ,KAAK,CAACM,UAAnC,CAA1B;AAEA,UAAKC,KAAL,GAAa;AACXC,MAAAA,KAAK,EAAER,KAAK,CAACQ;AADF,KAAb;AAN4C;AAS7C;;;;WAED,4BAAmBC,SAAnB,EAA+D;AAC7D,UAAQD,KAAR,GAAkB,KAAKR,KAAvB,CAAQQ,KAAR;;AACA,UAAIC,SAAS,CAACD,KAAV,KAAoBA,KAAxB,EAA+B;AAC7B;AACA,aAAKE,QAAL,CAAc;AAAEF,UAAAA,KAAK,EAALA;AAAF,SAAd;AACD;AACF;;;WAID,iBAAc;AAAA;;AACZ,oCAAKP,WAAL,CAAiBU,OAAjB,gFAA0BC,KAA1B;AACD;;;WAED,sBAAaC,KAAb,EAA+D;AAC7D,WAAKH,QAAL,CAAc;AAAEF,QAAAA,KAAK,EAAEK,KAAK,CAACC,MAAN,CAAaN;AAAtB,OAAd,EAA6C,KAAKH,UAAlD;AACD;;;WAED,sBAAmB;AACjB,UAAQU,QAAR,GAAqB,KAAKf,KAA1B,CAAQe,QAAR;AACA,UAAQP,KAAR,GAAkB,KAAKD,KAAvB,CAAQC,KAAR;AACAO,MAAAA,QAAQ,CAACP,KAAD,CAAR;AACD;;;WAED,kBAAsB;AACpB,wBAAmD,KAAKR,KAAxD;AAAA,UAAQgB,WAAR,eAAQA,WAAR;AAAA,UAAqBC,SAArB,eAAqBA,SAArB;AAAA,UAAgCC,UAAhC,eAAgCA,UAAhC;AAAA,UAA4CC,EAA5C,eAA4CA,EAA5C;AACA,UAAQX,KAAR,GAAkB,KAAKD,KAAvB,CAAQC,KAAR;AACA,0BACE,oBAAC,WAAD;AACE,QAAA,KAAK,EAAEA,KADT;AAEE,QAAA,WAAW,EAAEQ,WAFf;AAGE,QAAA,QAAQ,EAAE,KAAKb,YAHjB;AAIE,QAAA,SAAS,EAAEc,SAJb;AAKE,QAAA,UAAU,EAAEC,UALd;AAME,QAAA,GAAG,EAAE,KAAKjB,WANZ;AAOE,QAAA,EAAE,EAAEkB;AAPN,QADF;AAWD;;;;EA7DgCvB,a;;gBAA7BG,oB,kBAIkB;AACpBiB,EAAAA,WAAW,EAAE,QADO;AAEpBC,EAAAA,SAAS,EAAE,EAFS;AAGpBC,EAAAA,UAAU,EAAE,IAHQ;AAIpBZ,EAAAA,UAAU,EAAE,GAJQ;AAKpBa,EAAAA,EAAE,EAAE;AALgB,C;;AA4DxB,eAAepB,oBAAf","sourcesContent":["import React, { PureComponent } from 'react';\nimport debounce from 'lodash.debounce';\nimport SearchInput from './SearchInput';\n\ninterface DebouncedSearchInputProps {\n value: string;\n placeholder: string;\n onChange(value: string): void;\n className: string;\n matchCount: number;\n debounceMs: number;\n id: string;\n}\n\ninterface DebouncedSearchInputState {\n value: string;\n}\n\nclass DebouncedSearchInput extends PureComponent<\n DebouncedSearchInputProps,\n DebouncedSearchInputState\n> {\n static defaultProps = {\n placeholder: 'Search',\n className: '',\n matchCount: null,\n debounceMs: 250,\n id: '',\n };\n\n constructor(props: DebouncedSearchInputProps) {\n super(props);\n this.searchInput = React.createRef();\n this.handleChange = this.handleChange.bind(this);\n this.sendUpdate = debounce(this.sendUpdate.bind(this), props.debounceMs);\n\n this.state = {\n value: props.value,\n };\n }\n\n componentDidUpdate(prevProps: DebouncedSearchInputProps): void {\n const { value } = this.props;\n if (prevProps.value !== value) {\n // eslint-disable-next-line react/no-did-update-set-state\n this.setState({ value });\n }\n }\n\n searchInput: React.RefObject<SearchInput>;\n\n focus(): void {\n this.searchInput.current?.focus();\n }\n\n handleChange(event: React.ChangeEvent<HTMLInputElement>): void {\n this.setState({ value: event.target.value }, this.sendUpdate);\n }\n\n sendUpdate(): void {\n const { onChange } = this.props;\n const { value } = this.state;\n onChange(value);\n }\n\n render(): JSX.Element {\n const { placeholder, className, matchCount, id } = this.props;\n const { value } = this.state;\n return (\n <SearchInput\n value={value}\n placeholder={placeholder}\n onChange={this.handleChange}\n className={className}\n matchCount={matchCount}\n ref={this.searchInput}\n id={id}\n />\n );\n }\n}\n\nexport default DebouncedSearchInput;\n"],"file":"DebouncedSearchInput.js"}
1
+ {"version":3,"sources":["../src/DebouncedSearchInput.tsx"],"names":["React","PureComponent","debounce","SearchInput","DebouncedSearchInput","constructor","props","searchInput","createRef","handleChange","bind","sendUpdate","debounceMs","state","value","componentDidUpdate","prevProps","setState","focus","current","event","target","onChange","render","placeholder","className","matchCount","id"],"mappings":";;AAAA,OAAOA,KAAP,IAAgBC,aAAhB,QAAqC,OAArC;AACA,OAAOC,QAAP,MAAqB,iBAArB;OACOC,W;;AAgBP,MAAMC,oBAAN,SAAmCH,aAAnC,CAGE;AASAI,EAAAA,WAAW,CAACC,KAAD,EAAmC;AAC5C,UAAMA,KAAN;;AAD4C;;AAE5C,SAAKC,WAAL,gBAAmBP,KAAK,CAACQ,SAAN,EAAnB;AACA,SAAKC,YAAL,GAAoB,KAAKA,YAAL,CAAkBC,IAAlB,CAAuB,IAAvB,CAApB;AACA,SAAKC,UAAL,GAAkBT,QAAQ,CAAC,KAAKS,UAAL,CAAgBD,IAAhB,CAAqB,IAArB,CAAD,EAA6BJ,KAAK,CAACM,UAAnC,CAA1B;AAEA,SAAKC,KAAL,GAAa;AACXC,MAAAA,KAAK,EAAER,KAAK,CAACQ;AADF,KAAb;AAGD;;AAEDC,EAAAA,kBAAkB,CAACC,SAAD,EAA6C;AAC7D,QAAM;AAAEF,MAAAA;AAAF,QAAY,KAAKR,KAAvB;;AACA,QAAIU,SAAS,CAACF,KAAV,KAAoBA,KAAxB,EAA+B;AAC7B;AACA,WAAKG,QAAL,CAAc;AAAEH,QAAAA;AAAF,OAAd;AACD;AACF;;AAIDI,EAAAA,KAAK,GAAS;AAAA;;AACZ,kCAAKX,WAAL,CAAiBY,OAAjB,gFAA0BD,KAA1B;AACD;;AAEDT,EAAAA,YAAY,CAACW,KAAD,EAAmD;AAC7D,SAAKH,QAAL,CAAc;AAAEH,MAAAA,KAAK,EAAEM,KAAK,CAACC,MAAN,CAAaP;AAAtB,KAAd,EAA6C,KAAKH,UAAlD;AACD;;AAEDA,EAAAA,UAAU,GAAS;AACjB,QAAM;AAAEW,MAAAA;AAAF,QAAe,KAAKhB,KAA1B;AACA,QAAM;AAAEQ,MAAAA;AAAF,QAAY,KAAKD,KAAvB;AACAS,IAAAA,QAAQ,CAACR,KAAD,CAAR;AACD;;AAEDS,EAAAA,MAAM,GAAgB;AACpB,QAAM;AAAEC,MAAAA,WAAF;AAAeC,MAAAA,SAAf;AAA0BC,MAAAA,UAA1B;AAAsCC,MAAAA;AAAtC,QAA6C,KAAKrB,KAAxD;AACA,QAAM;AAAEQ,MAAAA;AAAF,QAAY,KAAKD,KAAvB;AACA,wBACE,oBAAC,WAAD;AACE,MAAA,KAAK,EAAEC,KADT;AAEE,MAAA,WAAW,EAAEU,WAFf;AAGE,MAAA,QAAQ,EAAE,KAAKf,YAHjB;AAIE,MAAA,SAAS,EAAEgB,SAJb;AAKE,MAAA,UAAU,EAAEC,UALd;AAME,MAAA,GAAG,EAAE,KAAKnB,WANZ;AAOE,MAAA,EAAE,EAAEoB;AAPN,MADF;AAWD;;AA1DD;;gBAHIvB,oB,kBAIkB;AACpBoB,EAAAA,WAAW,EAAE,QADO;AAEpBC,EAAAA,SAAS,EAAE,EAFS;AAGpBC,EAAAA,UAAU,EAAE,IAHQ;AAIpBd,EAAAA,UAAU,EAAE,GAJQ;AAKpBe,EAAAA,EAAE,EAAE;AALgB,C;;AA4DxB,eAAevB,oBAAf","sourcesContent":["import React, { PureComponent } from 'react';\nimport debounce from 'lodash.debounce';\nimport SearchInput from './SearchInput';\n\ninterface DebouncedSearchInputProps {\n value: string;\n placeholder: string;\n onChange(value: string): void;\n className: string;\n matchCount: number;\n debounceMs: number;\n id: string;\n}\n\ninterface DebouncedSearchInputState {\n value: string;\n}\n\nclass DebouncedSearchInput extends PureComponent<\n DebouncedSearchInputProps,\n DebouncedSearchInputState\n> {\n static defaultProps = {\n placeholder: 'Search',\n className: '',\n matchCount: null,\n debounceMs: 250,\n id: '',\n };\n\n constructor(props: DebouncedSearchInputProps) {\n super(props);\n this.searchInput = React.createRef();\n this.handleChange = this.handleChange.bind(this);\n this.sendUpdate = debounce(this.sendUpdate.bind(this), props.debounceMs);\n\n this.state = {\n value: props.value,\n };\n }\n\n componentDidUpdate(prevProps: DebouncedSearchInputProps): void {\n const { value } = this.props;\n if (prevProps.value !== value) {\n // eslint-disable-next-line react/no-did-update-set-state\n this.setState({ value });\n }\n }\n\n searchInput: React.RefObject<SearchInput>;\n\n focus(): void {\n this.searchInput.current?.focus();\n }\n\n handleChange(event: React.ChangeEvent<HTMLInputElement>): void {\n this.setState({ value: event.target.value }, this.sendUpdate);\n }\n\n sendUpdate(): void {\n const { onChange } = this.props;\n const { value } = this.state;\n onChange(value);\n }\n\n render(): JSX.Element {\n const { placeholder, className, matchCount, id } = this.props;\n const { value } = this.state;\n return (\n <SearchInput\n value={value}\n placeholder={placeholder}\n onChange={this.handleChange}\n className={className}\n matchCount={matchCount}\n ref={this.searchInput}\n id={id}\n />\n );\n }\n}\n\nexport default DebouncedSearchInput;\n"],"file":"DebouncedSearchInput.js"}
@@ -7,14 +7,14 @@ import classNames from 'classnames';
7
7
  * CSS animations that reach into the svg are blocking since SVG aren't drawn by the gpu, only animations
8
8
  * that are performed on the whole svg remain hardware accelerated.
9
9
  */
10
- var DeephavenSpinner = function DeephavenSpinner(_ref) {
11
- var _ref$className = _ref.className,
12
- className = _ref$className === void 0 ? '' : _ref$className,
13
- _ref$show = _ref.show,
14
- show = _ref$show === void 0 ? true : _ref$show;
10
+ var DeephavenSpinner = (_ref) => {
11
+ var {
12
+ className = '',
13
+ show = true
14
+ } = _ref;
15
15
  return /*#__PURE__*/React.createElement("div", {
16
16
  className: classNames('dh-loader', className, {
17
- show: show
17
+ show
18
18
  })
19
19
  }, /*#__PURE__*/React.createElement("svg", {
20
20
  className: "dh-outer-shape",
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/DeephavenSpinner.tsx"],"names":["React","classNames","DeephavenSpinner","className","show"],"mappings":"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","sourcesContent":["import React from 'react';\nimport './DeephavenSpinner.scss';\nimport classNames from 'classnames';\n\ninterface DeephavenSpinnerProps {\n className?: string;\n show?: boolean;\n}\n\n/**\n * Break apart a generated svg into indivdual svg layers, to allow each to be animated on the GPU\n * CSS animations that reach into the svg are blocking since SVG aren't drawn by the gpu, only animations\n * that are performed on the whole svg remain hardware accelerated.\n */\nconst DeephavenSpinner = ({\n className = '',\n show = true,\n}: DeephavenSpinnerProps): JSX.Element => (\n <div className={classNames('dh-loader', className, { show })}>\n <svg className=\"dh-outer-shape\" viewBox=\"0 0 182 182\">\n <g transform=\"translate(91,91.0033) translate(-64,-64.0033)\">\n <path\n d=\"M82.7429,0L82.7429,41.3714L45.2571,41.3714L45.2571,0L0,0L0,128L45.2571,128L45.2571,86.6286L82.5143,86.6286L82.5143,128L128,128L128,0L82.7429,0ZM41.3714,124.114L4.11429,124.114L4.11429,86.6286L41.3714,86.6286L41.3714,124.114ZM41.3714,82.7429L4.11429,82.7429L4.11429,45.2571L41.3714,45.2571L41.3714,82.7429ZM41.3714,41.3714L4.11429,41.3714L4.11429,4.11429L41.3714,4.11429L41.3714,41.3714ZM45.2571,82.7429L45.2571,45.2571L82.5143,45.2571L82.5143,82.5143L45.2571,82.5143ZM124.114,124.114L86.6286,124.114L86.6286,86.6286L123.886,86.6286L123.886,124.114ZM124.114,82.7429L86.6286,82.7429L86.6286,45.2571L123.886,45.2571L123.886,82.7429ZM86.6286,41.3714L86.6286,4.11429L123.886,4.11429L123.886,41.3714L86.6286,41.3714Z\"\n fill=\"#f0f0ee\"\n />\n </g>\n </svg>\n <svg className=\"dh-loader-tile dh-loader-tile-3\" viewBox=\"0 0 182 182\">\n <g transform=\"translate(91,91.0033) translate(-64,-64.0033)\">\n <g transform=\"translate(63.9589,64.0492) translate(-59.9751,-63.9508)\">\n <rect\n width=\"37.3438\"\n height=\"37.6389\"\n fill=\"#5189e5\"\n transform=\"translate(-21.9838,29.7957) translate(21.9838,15.3027)\"\n />\n </g>\n </g>\n </svg>\n <svg className=\"dh-loader-tile dh-loader-tile-2\" viewBox=\"0 0 182 182\">\n <g transform=\"translate(91,91.0033) translate(-64,-64.0033)\">\n <g transform=\"translate(63.9589,64.0492) translate(-59.9751,-63.9508)\">\n <rect\n width=\"37.2755\"\n height=\"37.4675\"\n fill=\"#5189e5\"\n transform=\"translate(-21.9838,69.7957) translate(22.0822,16.7783)\"\n />\n </g>\n </g>\n </svg>\n <svg className=\"dh-loader-tile dh-loader-tile-5\" viewBox=\"0 0 182 182\">\n <g transform=\"translate(91,91.0033) translate(-64,-64.0033)\">\n <g transform=\"translate(63.9589,64.0492) translate(-59.9751,-63.9508)\">\n <rect\n width=\"37.3512\"\n height=\"41.3781\"\n fill=\"#35618c\"\n transform=\"translate(18.0162,72.7957) translate(23.1643,13.7278)\"\n />\n </g>\n </g>\n </svg>\n <svg className=\"dh-loader-tile dh-loader-tile-6\" viewBox=\"0 0 182 182\">\n <g transform=\"translate(91,91.0033) translate(-64,-64.0033)\">\n <g transform=\"translate(63.9589,64.0492) translate(-59.9751,-63.9508)\">\n <rect\n width=\"37.2483\"\n height=\"37.5869\"\n fill=\"#35618c\"\n transform=\"translate(59.0162,29.7957) translate(23.6379,15.3564)\"\n />\n </g>\n </g>\n </svg>\n <svg className=\"dh-loader-tile dh-loader-tile-7\" viewBox=\"0 0 182 182\">\n <g transform=\"translate(91,91.0033) translate(-64,-64.0033)\">\n <g transform=\"translate(63.9589,64.0492) translate(-59.9751,-63.9508)\">\n <rect\n width=\"37.5664\"\n height=\"41.2747\"\n fill=\"#35618c\"\n transform=\"translate(17.0162,-13.2043) translate(24.2531,13.2043)\"\n />\n </g>\n </g>\n </svg>\n <svg className=\"dh-loader-tile dh-loader-tile-4\" viewBox=\"0 0 182 182\">\n <g transform=\"translate(91,91.0033) translate(-64,-64.0033)\">\n <g transform=\"translate(63.9589,64.0492) translate(-59.9751,-63.9508)\">\n <rect\n width=\"37.2854\"\n height=\"37.3014\"\n fill=\"#5189e5\"\n transform=\"translate(-21.9838,-13.2043) translate(22.0822,17.1792)\"\n />\n </g>\n </g>\n </svg>\n </div>\n);\n\nexport default DeephavenSpinner;\n"],"file":"DeephavenSpinner.js"}
1
+ {"version":3,"sources":["../src/DeephavenSpinner.tsx"],"names":["React","classNames","DeephavenSpinner","className","show"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;;AAEA,OAAOC,UAAP,MAAuB,YAAvB;;AAOA;AACA;AACA;AACA;AACA;AACA,IAAMC,gBAAgB,GAAG;AAAA,MAAC;AACxBC,IAAAA,SAAS,GAAG,EADY;AAExBC,IAAAA,IAAI,GAAG;AAFiB,GAAD;AAAA,sBAIvB;AAAK,IAAA,SAAS,EAAEH,UAAU,CAAC,WAAD,EAAcE,SAAd,EAAyB;AAAEC,MAAAA;AAAF,KAAzB;AAA1B,kBACE;AAAK,IAAA,SAAS,EAAC,gBAAf;AAAgC,IAAA,OAAO,EAAC;AAAxC,kBACE;AAAG,IAAA,SAAS,EAAC;AAAb,kBACE;AACE,IAAA,CAAC,EAAC,wsBADJ;AAEE,IAAA,IAAI,EAAC;AAFP,IADF,CADF,CADF,eASE;AAAK,IAAA,SAAS,EAAC,iCAAf;AAAiD,IAAA,OAAO,EAAC;AAAzD,kBACE;AAAG,IAAA,SAAS,EAAC;AAAb,kBACE;AAAG,IAAA,SAAS,EAAC;AAAb,kBACE;AACE,IAAA,KAAK,EAAC,SADR;AAEE,IAAA,MAAM,EAAC,SAFT;AAGE,IAAA,IAAI,EAAC,SAHP;AAIE,IAAA,SAAS,EAAC;AAJZ,IADF,CADF,CADF,CATF,eAqBE;AAAK,IAAA,SAAS,EAAC,iCAAf;AAAiD,IAAA,OAAO,EAAC;AAAzD,kBACE;AAAG,IAAA,SAAS,EAAC;AAAb,kBACE;AAAG,IAAA,SAAS,EAAC;AAAb,kBACE;AACE,IAAA,KAAK,EAAC,SADR;AAEE,IAAA,MAAM,EAAC,SAFT;AAGE,IAAA,IAAI,EAAC,SAHP;AAIE,IAAA,SAAS,EAAC;AAJZ,IADF,CADF,CADF,CArBF,eAiCE;AAAK,IAAA,SAAS,EAAC,iCAAf;AAAiD,IAAA,OAAO,EAAC;AAAzD,kBACE;AAAG,IAAA,SAAS,EAAC;AAAb,kBACE;AAAG,IAAA,SAAS,EAAC;AAAb,kBACE;AACE,IAAA,KAAK,EAAC,SADR;AAEE,IAAA,MAAM,EAAC,SAFT;AAGE,IAAA,IAAI,EAAC,SAHP;AAIE,IAAA,SAAS,EAAC;AAJZ,IADF,CADF,CADF,CAjCF,eA6CE;AAAK,IAAA,SAAS,EAAC,iCAAf;AAAiD,IAAA,OAAO,EAAC;AAAzD,kBACE;AAAG,IAAA,SAAS,EAAC;AAAb,kBACE;AAAG,IAAA,SAAS,EAAC;AAAb,kBACE;AACE,IAAA,KAAK,EAAC,SADR;AAEE,IAAA,MAAM,EAAC,SAFT;AAGE,IAAA,IAAI,EAAC,SAHP;AAIE,IAAA,SAAS,EAAC;AAJZ,IADF,CADF,CADF,CA7CF,eAyDE;AAAK,IAAA,SAAS,EAAC,iCAAf;AAAiD,IAAA,OAAO,EAAC;AAAzD,kBACE;AAAG,IAAA,SAAS,EAAC;AAAb,kBACE;AAAG,IAAA,SAAS,EAAC;AAAb,kBACE;AACE,IAAA,KAAK,EAAC,SADR;AAEE,IAAA,MAAM,EAAC,SAFT;AAGE,IAAA,IAAI,EAAC,SAHP;AAIE,IAAA,SAAS,EAAC;AAJZ,IADF,CADF,CADF,CAzDF,eAqEE;AAAK,IAAA,SAAS,EAAC,iCAAf;AAAiD,IAAA,OAAO,EAAC;AAAzD,kBACE;AAAG,IAAA,SAAS,EAAC;AAAb,kBACE;AAAG,IAAA,SAAS,EAAC;AAAb,kBACE;AACE,IAAA,KAAK,EAAC,SADR;AAEE,IAAA,MAAM,EAAC,SAFT;AAGE,IAAA,IAAI,EAAC,SAHP;AAIE,IAAA,SAAS,EAAC;AAJZ,IADF,CADF,CADF,CArEF,CAJuB;AAAA,CAAzB;;AAwFA,eAAeF,gBAAf","sourcesContent":["import React from 'react';\nimport './DeephavenSpinner.scss';\nimport classNames from 'classnames';\n\ninterface DeephavenSpinnerProps {\n className?: string;\n show?: boolean;\n}\n\n/**\n * Break apart a generated svg into indivdual svg layers, to allow each to be animated on the GPU\n * CSS animations that reach into the svg are blocking since SVG aren't drawn by the gpu, only animations\n * that are performed on the whole svg remain hardware accelerated.\n */\nconst DeephavenSpinner = ({\n className = '',\n show = true,\n}: DeephavenSpinnerProps): JSX.Element => (\n <div className={classNames('dh-loader', className, { show })}>\n <svg className=\"dh-outer-shape\" viewBox=\"0 0 182 182\">\n <g transform=\"translate(91,91.0033) translate(-64,-64.0033)\">\n <path\n d=\"M82.7429,0L82.7429,41.3714L45.2571,41.3714L45.2571,0L0,0L0,128L45.2571,128L45.2571,86.6286L82.5143,86.6286L82.5143,128L128,128L128,0L82.7429,0ZM41.3714,124.114L4.11429,124.114L4.11429,86.6286L41.3714,86.6286L41.3714,124.114ZM41.3714,82.7429L4.11429,82.7429L4.11429,45.2571L41.3714,45.2571L41.3714,82.7429ZM41.3714,41.3714L4.11429,41.3714L4.11429,4.11429L41.3714,4.11429L41.3714,41.3714ZM45.2571,82.7429L45.2571,45.2571L82.5143,45.2571L82.5143,82.5143L45.2571,82.5143ZM124.114,124.114L86.6286,124.114L86.6286,86.6286L123.886,86.6286L123.886,124.114ZM124.114,82.7429L86.6286,82.7429L86.6286,45.2571L123.886,45.2571L123.886,82.7429ZM86.6286,41.3714L86.6286,4.11429L123.886,4.11429L123.886,41.3714L86.6286,41.3714Z\"\n fill=\"#f0f0ee\"\n />\n </g>\n </svg>\n <svg className=\"dh-loader-tile dh-loader-tile-3\" viewBox=\"0 0 182 182\">\n <g transform=\"translate(91,91.0033) translate(-64,-64.0033)\">\n <g transform=\"translate(63.9589,64.0492) translate(-59.9751,-63.9508)\">\n <rect\n width=\"37.3438\"\n height=\"37.6389\"\n fill=\"#5189e5\"\n transform=\"translate(-21.9838,29.7957) translate(21.9838,15.3027)\"\n />\n </g>\n </g>\n </svg>\n <svg className=\"dh-loader-tile dh-loader-tile-2\" viewBox=\"0 0 182 182\">\n <g transform=\"translate(91,91.0033) translate(-64,-64.0033)\">\n <g transform=\"translate(63.9589,64.0492) translate(-59.9751,-63.9508)\">\n <rect\n width=\"37.2755\"\n height=\"37.4675\"\n fill=\"#5189e5\"\n transform=\"translate(-21.9838,69.7957) translate(22.0822,16.7783)\"\n />\n </g>\n </g>\n </svg>\n <svg className=\"dh-loader-tile dh-loader-tile-5\" viewBox=\"0 0 182 182\">\n <g transform=\"translate(91,91.0033) translate(-64,-64.0033)\">\n <g transform=\"translate(63.9589,64.0492) translate(-59.9751,-63.9508)\">\n <rect\n width=\"37.3512\"\n height=\"41.3781\"\n fill=\"#35618c\"\n transform=\"translate(18.0162,72.7957) translate(23.1643,13.7278)\"\n />\n </g>\n </g>\n </svg>\n <svg className=\"dh-loader-tile dh-loader-tile-6\" viewBox=\"0 0 182 182\">\n <g transform=\"translate(91,91.0033) translate(-64,-64.0033)\">\n <g transform=\"translate(63.9589,64.0492) translate(-59.9751,-63.9508)\">\n <rect\n width=\"37.2483\"\n height=\"37.5869\"\n fill=\"#35618c\"\n transform=\"translate(59.0162,29.7957) translate(23.6379,15.3564)\"\n />\n </g>\n </g>\n </svg>\n <svg className=\"dh-loader-tile dh-loader-tile-7\" viewBox=\"0 0 182 182\">\n <g transform=\"translate(91,91.0033) translate(-64,-64.0033)\">\n <g transform=\"translate(63.9589,64.0492) translate(-59.9751,-63.9508)\">\n <rect\n width=\"37.5664\"\n height=\"41.2747\"\n fill=\"#35618c\"\n transform=\"translate(17.0162,-13.2043) translate(24.2531,13.2043)\"\n />\n </g>\n </g>\n </svg>\n <svg className=\"dh-loader-tile dh-loader-tile-4\" viewBox=\"0 0 182 182\">\n <g transform=\"translate(91,91.0033) translate(-64,-64.0033)\">\n <g transform=\"translate(63.9589,64.0492) translate(-59.9751,-63.9508)\">\n <rect\n width=\"37.2854\"\n height=\"37.3014\"\n fill=\"#5189e5\"\n transform=\"translate(-21.9838,-13.2043) translate(22.0822,17.1792)\"\n />\n </g>\n </g>\n </svg>\n </div>\n);\n\nexport default DeephavenSpinner;\n"],"file":"DeephavenSpinner.js"}
package/dist/DragUtils.js CHANGED
@@ -1,128 +1,80 @@
1
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
2
-
3
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
4
-
5
- function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
6
-
7
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
8
-
9
- function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
10
-
11
- function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
12
-
13
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
1
+ import flatten from 'lodash.flatten';
14
2
 
15
- function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }
3
+ class DragUtils {
4
+ /**
5
+ * Re-orders the provided item lists in place based on the selectedRanges and destinationIndex provided
6
+ * @param sourceList Array of the source items
7
+ * @param selectedRanges Array of the selected ranges in the source list
8
+ * @param destinationList Destination items. If dragging within the same list, set it to sourceItems
9
+ * @param destinationIndex The index items are being dropped in the destinationList, adjusted for the removed items
10
+ * @returns The items that were dragged
11
+ */
12
+ static reorder(sourceList, selectedRanges, destinationList, destinationIndex) {
13
+ var insertIndex = sourceList === destinationList ? DragUtils.adjustDestinationIndex(destinationIndex, selectedRanges) : destinationIndex;
14
+ var draggedItems = DragUtils.removeItems(sourceList, selectedRanges);
15
+ destinationList.splice(insertIndex, 0, ...draggedItems);
16
+ return draggedItems;
17
+ }
18
+ /**
19
+ * Removes the provided ranges from the list in place
20
+ * @param list Array of items to remove the ranges.
21
+ * @param ranges Array of the ranges to remove.
22
+ * @returns The removed items, in the order of the ranges removed.
23
+ */
24
+
25
+
26
+ static removeItems(list, ranges) {
27
+ var items = []; // Sort them in reverse, so we don't screw up the range indexes
28
+
29
+ var sortedRanges = ranges.map((range, index) => ({
30
+ range,
31
+ index
32
+ })).sort((a, b) => b.range[0] - a.range[0]);
33
+
34
+ for (var i = 0; i < sortedRanges.length; i += 1) {
35
+ var {
36
+ range,
37
+ index
38
+ } = sortedRanges[i];
39
+ var [start, end] = range;
40
+ items[index] = list.splice(start, end - start + 1);
41
+ }
16
42
 
17
- function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
43
+ return flatten(items);
44
+ }
45
+ /**
46
+ * Adjusts the destination index for when dropping into the same list you're dragging from.
47
+ * @param destinationIndex The original destination index
48
+ * @param ranges The ranges that are moving
49
+ * @returns Index where item should be inserted after all ranges are removed
50
+ */
18
51
 
19
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
20
52
 
21
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
53
+ static adjustDestinationIndex(destinationIndex, ranges) {
54
+ var adjustedIndex = destinationIndex;
22
55
 
23
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
56
+ for (var i = 0; i < ranges.length; i += 1) {
57
+ var [start, end] = ranges[i];
24
58
 
25
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
59
+ if (start > destinationIndex) {
60
+ break;
61
+ }
26
62
 
27
- import flatten from 'lodash.flatten';
63
+ adjustedIndex -= Math.min(end, destinationIndex - 1) - start + 1;
64
+ }
28
65
 
29
- var DragUtils = /*#__PURE__*/function () {
30
- function DragUtils() {
31
- _classCallCheck(this, DragUtils);
66
+ return adjustedIndex;
32
67
  }
33
68
 
34
- _createClass(DragUtils, null, [{
35
- key: "reorder",
36
- value:
37
- /**
38
- * Re-orders the provided item lists in place based on the selectedRanges and destinationIndex provided
39
- * @param sourceList Array of the source items
40
- * @param selectedRanges Array of the selected ranges in the source list
41
- * @param destinationList Destination items. If dragging within the same list, set it to sourceItems
42
- * @param destinationIndex The index items are being dropped in the destinationList, adjusted for the removed items
43
- * @returns The items that were dragged
44
- */
45
- function reorder(sourceList, selectedRanges, destinationList, destinationIndex) {
46
- var insertIndex = sourceList === destinationList ? DragUtils.adjustDestinationIndex(destinationIndex, selectedRanges) : destinationIndex;
47
- var draggedItems = DragUtils.removeItems(sourceList, selectedRanges);
48
- destinationList.splice.apply(destinationList, [insertIndex, 0].concat(_toConsumableArray(draggedItems)));
49
- return draggedItems;
50
- }
51
- /**
52
- * Removes the provided ranges from the list in place
53
- * @param list Array of items to remove the ranges.
54
- * @param ranges Array of the ranges to remove.
55
- * @returns The removed items, in the order of the ranges removed.
56
- */
57
-
58
- }, {
59
- key: "removeItems",
60
- value: function removeItems(list, ranges) {
61
- var items = []; // Sort them in reverse, so we don't screw up the range indexes
62
-
63
- var sortedRanges = ranges.map(function (range, index) {
64
- return {
65
- range: range,
66
- index: index
67
- };
68
- }).sort(function (a, b) {
69
- return b.range[0] - a.range[0];
70
- });
71
-
72
- for (var i = 0; i < sortedRanges.length; i += 1) {
73
- var _sortedRanges$i = sortedRanges[i],
74
- range = _sortedRanges$i.range,
75
- index = _sortedRanges$i.index;
76
-
77
- var _range = _slicedToArray(range, 2),
78
- start = _range[0],
79
- end = _range[1];
80
-
81
- items[index] = list.splice(start, end - start + 1);
82
- }
83
-
84
- return flatten(items);
85
- }
86
- /**
87
- * Adjusts the destination index for when dropping into the same list you're dragging from.
88
- * @param destinationIndex The original destination index
89
- * @param ranges The ranges that are moving
90
- * @returns Index where item should be inserted after all ranges are removed
91
- */
92
-
93
- }, {
94
- key: "adjustDestinationIndex",
95
- value: function adjustDestinationIndex(destinationIndex, ranges) {
96
- var adjustedIndex = destinationIndex;
97
-
98
- for (var i = 0; i < ranges.length; i += 1) {
99
- var _ranges$i = _slicedToArray(ranges[i], 2),
100
- start = _ranges$i[0],
101
- end = _ranges$i[1];
102
-
103
- if (start > destinationIndex) {
104
- break;
105
- }
106
-
107
- adjustedIndex -= Math.min(end, destinationIndex - 1) - start + 1;
108
- }
69
+ static startDragging() {
70
+ document.documentElement.classList.add('drag-pointer-events-none');
71
+ }
109
72
 
110
- return adjustedIndex;
111
- }
112
- }, {
113
- key: "startDragging",
114
- value: function startDragging() {
115
- document.documentElement.classList.add('drag-pointer-events-none');
116
- }
117
- }, {
118
- key: "stopDragging",
119
- value: function stopDragging() {
120
- document.documentElement.classList.remove('drag-pointer-events-none');
121
- }
122
- }]);
73
+ static stopDragging() {
74
+ document.documentElement.classList.remove('drag-pointer-events-none');
75
+ }
123
76
 
124
- return DragUtils;
125
- }();
77
+ }
126
78
 
127
79
  export default DragUtils;
128
80
  //# sourceMappingURL=DragUtils.js.map