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

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
@@ -2,7 +2,7 @@ import React, { useMemo } from 'react';
2
2
  import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
3
3
  import { vsChevronRight } from '@deephaven/icons';
4
4
  import "./MenuItem.css";
5
- import UISwitch from '../UISwitch';
5
+ import UISwitch from "../UISwitch.js";
6
6
 
7
7
  function isSwitchMenuItemType(item) {
8
8
  return item.isOn !== undefined;
@@ -12,18 +12,19 @@ function isSwitchMenuItemType(item) {
12
12
  * @param props.item The menu item to set. Set a SwitchMenuItemDef to show a switch.
13
13
  * @param props.onSelect Called when the menu item is selected
14
14
  */
15
- export var MenuItem = function MenuItem(_ref) {
16
- var item = _ref.item,
17
- _ref$onSelect = _ref.onSelect,
18
- onSelect = _ref$onSelect === void 0 ? function () {
19
- return undefined;
20
- } : _ref$onSelect;
21
- var icon = item.icon,
22
- subtitle = item.subtitle,
23
- title = item.title;
24
- var handleSelect = useMemo(function () {
15
+ export var MenuItem = (_ref) => {
16
+ var {
17
+ item,
18
+ onSelect = () => undefined
19
+ } = _ref;
20
+ var {
21
+ icon,
22
+ subtitle,
23
+ title
24
+ } = item;
25
+ var handleSelect = useMemo(() => {
25
26
  if (isSwitchMenuItemType(item)) {
26
- return function () {
27
+ return () => {
27
28
  item.onChange(!item.isOn);
28
29
  };
29
30
  }
@@ -33,7 +34,7 @@ export var MenuItem = function MenuItem(_ref) {
33
34
  return /*#__PURE__*/React.createElement("div", {
34
35
  className: "btn btn-navigation-menu-item",
35
36
  onClick: handleSelect,
36
- onKeyDown: function onKeyDown(event) {
37
+ onKeyDown: event => {
37
38
  if (event.key === 'Enter' || event.key === ' ') {
38
39
  handleSelect();
39
40
  }
@@ -52,7 +53,7 @@ export var MenuItem = function MenuItem(_ref) {
52
53
  className: "accessory"
53
54
  }, isSwitchMenuItemType(item) && /*#__PURE__*/React.createElement(UISwitch, {
54
55
  on: item.isOn,
55
- onClick: function onClick(event) {
56
+ onClick: event => {
56
57
  event.stopPropagation();
57
58
  handleSelect();
58
59
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/navigation/MenuItem.tsx"],"names":["React","useMemo","FontAwesomeIcon","vsChevronRight","UISwitch","isSwitchMenuItemType","item","isOn","undefined","MenuItem","onSelect","icon","subtitle","title","handleSelect","onChange","event","key","stopPropagation"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,OAAhB,QAA+B,OAA/B;AAEA,SAASC,eAAT,QAAgC,gCAAhC;AACA,SAASC,cAAT,QAA+B,kBAA/B;AACA;AAEA,OAAOC,QAAP,MAAqB,aAArB;;AAaA,SAASC,oBAAT,CAA8BC,IAA9B,EAA4E;AAC1E,SAAQA,IAAD,CAA4BC,IAA5B,KAAqCC,SAA5C;AACD;;AAOD;AACA;AACA;AACA;AACA,OAAO,IAAMC,QAAQ,GAAG,SAAXA,QAAW,OAGU;AAAA,MAFhCH,IAEgC,QAFhCA,IAEgC;AAAA,2BADhCI,QACgC;AAAA,MADhCA,QACgC,8BADrB;AAAA,WAAMF,SAAN;AAAA,GACqB;AAChC,MAAQG,IAAR,GAAkCL,IAAlC,CAAQK,IAAR;AAAA,MAAcC,QAAd,GAAkCN,IAAlC,CAAcM,QAAd;AAAA,MAAwBC,KAAxB,GAAkCP,IAAlC,CAAwBO,KAAxB;AACA,MAAMC,YAAY,GAAGb,OAAO,CAAC,YAAM;AACjC,QAAII,oBAAoB,CAACC,IAAD,CAAxB,EAAgC;AAC9B,aAAO,YAAM;AACXA,QAAAA,IAAI,CAACS,QAAL,CAAc,CAACT,IAAI,CAACC,IAApB;AACD,OAFD;AAGD;;AACD,WAAOG,QAAP;AACD,GAP2B,EAOzB,CAACJ,IAAD,EAAOI,QAAP,CAPyB,CAA5B;AAQA,sBACE;AACE,IAAA,SAAS,EAAC,8BADZ;AAEE,IAAA,OAAO,EAAEI,YAFX;AAGE,IAAA,SAAS,EAAE,mBAAAE,KAAK,EAAI;AAClB,UAAIA,KAAK,CAACC,GAAN,KAAc,OAAd,IAAyBD,KAAK,CAACC,GAAN,KAAc,GAA3C,EAAgD;AAC9CH,QAAAA,YAAY;AACb;AACF,KAPH;AAQE,IAAA,QAAQ,EAAE,CARZ;AASE,IAAA,IAAI,EAAC;AATP,KAWGH,IAAI,iBACH;AAAK,IAAA,SAAS,EAAC;AAAf,kBACE,oBAAC,eAAD;AAAiB,IAAA,IAAI,EAAEA;AAAvB,IADF,CAZJ,eAgBE;AAAK,IAAA,SAAS,EAAC;AAAf,KAAwBE,KAAxB,CAhBF,EAiBGD,QAAQ,iBAAI;AAAK,IAAA,SAAS,EAAC;AAAf,KAA2BA,QAA3B,CAjBf,eAkBE;AAAK,IAAA,SAAS,EAAC;AAAf,KACIP,oBAAoB,CAACC,IAAD,CAApB,iBACA,oBAAC,QAAD;AACE,IAAA,EAAE,EAAEA,IAAI,CAACC,IADX;AAEE,IAAA,OAAO,EAAE,iBAAAS,KAAK,EAAI;AAChBA,MAAAA,KAAK,CAACE,eAAN;AACAJ,MAAAA,YAAY;AACb;AALH,IADD,iBAQK,oBAAC,eAAD;AAAiB,IAAA,IAAI,EAAEX;AAAvB,IATR,CAlBF,CADF;AAgCD,CA7CM;AA+CP,eAAeM,QAAf","sourcesContent":["import React, { useMemo } from 'react';\nimport { IconProp } from '@fortawesome/fontawesome-svg-core';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsChevronRight } from '@deephaven/icons';\nimport './MenuItem.scss';\n\nimport UISwitch from '../UISwitch';\n\nexport type MenuItemDef = {\n title: string;\n subtitle?: string;\n icon?: IconProp;\n};\n\nexport type SwitchMenuItemDef = MenuItemDef & {\n isOn: boolean;\n onChange: (isOn: boolean) => void;\n};\n\nfunction isSwitchMenuItemType(item: MenuItemDef): item is SwitchMenuItemDef {\n return (item as SwitchMenuItemDef).isOn !== undefined;\n}\n\nexport type MenuItemProps = {\n item: MenuItemDef;\n onSelect?: () => void;\n};\n\n/**\n * @param props.item The menu item to set. Set a SwitchMenuItemDef to show a switch.\n * @param props.onSelect Called when the menu item is selected\n */\nexport const MenuItem = ({\n item,\n onSelect = () => undefined,\n}: MenuItemProps): JSX.Element => {\n const { icon, subtitle, title } = item;\n const handleSelect = useMemo(() => {\n if (isSwitchMenuItemType(item)) {\n return () => {\n item.onChange(!item.isOn);\n };\n }\n return onSelect;\n }, [item, onSelect]);\n return (\n <div\n className=\"btn btn-navigation-menu-item\"\n onClick={handleSelect}\n onKeyDown={event => {\n if (event.key === 'Enter' || event.key === ' ') {\n handleSelect();\n }\n }}\n tabIndex={0}\n role=\"menuitem\"\n >\n {icon && (\n <div className=\"icon\">\n <FontAwesomeIcon icon={icon} />\n </div>\n )}\n <div className=\"title\">{title}</div>\n {subtitle && <div className=\"shortcut\">{subtitle}</div>}\n <div className=\"accessory\">\n {(isSwitchMenuItemType(item) && (\n <UISwitch\n on={item.isOn}\n onClick={event => {\n event.stopPropagation();\n handleSelect();\n }}\n />\n )) || <FontAwesomeIcon icon={vsChevronRight} />}\n </div>\n </div>\n );\n};\n\nexport default MenuItem;\n"],"file":"MenuItem.js"}
1
+ {"version":3,"sources":["../../src/navigation/MenuItem.tsx"],"names":["React","useMemo","FontAwesomeIcon","vsChevronRight","UISwitch","isSwitchMenuItemType","item","isOn","undefined","MenuItem","onSelect","icon","subtitle","title","handleSelect","onChange","event","key","stopPropagation"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,OAAhB,QAA+B,OAA/B;AAEA,SAASC,eAAT,QAAgC,gCAAhC;AACA,SAASC,cAAT,QAA+B,kBAA/B;;OAGOC,Q;;AAaP,SAASC,oBAAT,CAA8BC,IAA9B,EAA4E;AAC1E,SAAQA,IAAD,CAA4BC,IAA5B,KAAqCC,SAA5C;AACD;;AAOD;AACA;AACA;AACA;AACA,OAAO,IAAMC,QAAQ,GAAG,UAGU;AAAA,MAHT;AACvBH,IAAAA,IADuB;AAEvBI,IAAAA,QAAQ,GAAG,MAAMF;AAFM,GAGS;AAChC,MAAM;AAAEG,IAAAA,IAAF;AAAQC,IAAAA,QAAR;AAAkBC,IAAAA;AAAlB,MAA4BP,IAAlC;AACA,MAAMQ,YAAY,GAAGb,OAAO,CAAC,MAAM;AACjC,QAAII,oBAAoB,CAACC,IAAD,CAAxB,EAAgC;AAC9B,aAAO,MAAM;AACXA,QAAAA,IAAI,CAACS,QAAL,CAAc,CAACT,IAAI,CAACC,IAApB;AACD,OAFD;AAGD;;AACD,WAAOG,QAAP;AACD,GAP2B,EAOzB,CAACJ,IAAD,EAAOI,QAAP,CAPyB,CAA5B;AAQA,sBACE;AACE,IAAA,SAAS,EAAC,8BADZ;AAEE,IAAA,OAAO,EAAEI,YAFX;AAGE,IAAA,SAAS,EAAEE,KAAK,IAAI;AAClB,UAAIA,KAAK,CAACC,GAAN,KAAc,OAAd,IAAyBD,KAAK,CAACC,GAAN,KAAc,GAA3C,EAAgD;AAC9CH,QAAAA,YAAY;AACb;AACF,KAPH;AAQE,IAAA,QAAQ,EAAE,CARZ;AASE,IAAA,IAAI,EAAC;AATP,KAWGH,IAAI,iBACH;AAAK,IAAA,SAAS,EAAC;AAAf,kBACE,oBAAC,eAAD;AAAiB,IAAA,IAAI,EAAEA;AAAvB,IADF,CAZJ,eAgBE;AAAK,IAAA,SAAS,EAAC;AAAf,KAAwBE,KAAxB,CAhBF,EAiBGD,QAAQ,iBAAI;AAAK,IAAA,SAAS,EAAC;AAAf,KAA2BA,QAA3B,CAjBf,eAkBE;AAAK,IAAA,SAAS,EAAC;AAAf,KACIP,oBAAoB,CAACC,IAAD,CAApB,iBACA,oBAAC,QAAD;AACE,IAAA,EAAE,EAAEA,IAAI,CAACC,IADX;AAEE,IAAA,OAAO,EAAES,KAAK,IAAI;AAChBA,MAAAA,KAAK,CAACE,eAAN;AACAJ,MAAAA,YAAY;AACb;AALH,IADD,iBAQK,oBAAC,eAAD;AAAiB,IAAA,IAAI,EAAEX;AAAvB,IATR,CAlBF,CADF;AAgCD,CA7CM;AA+CP,eAAeM,QAAf","sourcesContent":["import React, { useMemo } from 'react';\nimport { IconProp } from '@fortawesome/fontawesome-svg-core';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsChevronRight } from '@deephaven/icons';\nimport './MenuItem.scss';\n\nimport UISwitch from '../UISwitch';\n\nexport type MenuItemDef = {\n title: string;\n subtitle?: string;\n icon?: IconProp;\n};\n\nexport type SwitchMenuItemDef = MenuItemDef & {\n isOn: boolean;\n onChange: (isOn: boolean) => void;\n};\n\nfunction isSwitchMenuItemType(item: MenuItemDef): item is SwitchMenuItemDef {\n return (item as SwitchMenuItemDef).isOn !== undefined;\n}\n\nexport type MenuItemProps = {\n item: MenuItemDef;\n onSelect?: () => void;\n};\n\n/**\n * @param props.item The menu item to set. Set a SwitchMenuItemDef to show a switch.\n * @param props.onSelect Called when the menu item is selected\n */\nexport const MenuItem = ({\n item,\n onSelect = () => undefined,\n}: MenuItemProps): JSX.Element => {\n const { icon, subtitle, title } = item;\n const handleSelect = useMemo(() => {\n if (isSwitchMenuItemType(item)) {\n return () => {\n item.onChange(!item.isOn);\n };\n }\n return onSelect;\n }, [item, onSelect]);\n return (\n <div\n className=\"btn btn-navigation-menu-item\"\n onClick={handleSelect}\n onKeyDown={event => {\n if (event.key === 'Enter' || event.key === ' ') {\n handleSelect();\n }\n }}\n tabIndex={0}\n role=\"menuitem\"\n >\n {icon && (\n <div className=\"icon\">\n <FontAwesomeIcon icon={icon} />\n </div>\n )}\n <div className=\"title\">{title}</div>\n {subtitle && <div className=\"shortcut\">{subtitle}</div>}\n <div className=\"accessory\">\n {(isSwitchMenuItemType(item) && (\n <UISwitch\n on={item.isOn}\n onClick={event => {\n event.stopPropagation();\n handleSelect();\n }}\n />\n )) || <FontAwesomeIcon icon={vsChevronRight} />}\n </div>\n </div>\n );\n};\n\nexport default MenuItem;\n"],"file":"MenuItem.js"}
@@ -7,11 +7,13 @@ import "./Page.css";
7
7
  * A page view with a back button in the bottom left, a title at the top, and a close button in the top right.
8
8
  * Back and close buttons will only appear if `onBack` and/or `onClose` callbacks are set.
9
9
  */
10
- export var Page = function Page(_ref) {
11
- var children = _ref.children,
12
- onBack = _ref.onBack,
13
- onClose = _ref.onClose,
14
- title = _ref.title;
10
+ export var Page = (_ref) => {
11
+ var {
12
+ children,
13
+ onBack,
14
+ onClose,
15
+ title
16
+ } = _ref;
15
17
  return /*#__PURE__*/React.createElement("div", {
16
18
  className: "navigation-page"
17
19
  }, /*#__PURE__*/React.createElement("div", {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/navigation/Page.tsx"],"names":["React","FontAwesomeIcon","vsClose","vsChevronLeft","Page","children","onBack","onClose","title","undefined"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,eAAT,QAAgC,gCAAhC;AACA,SAASC,OAAT,EAAkBC,aAAlB,QAAuC,kBAAvC;AACA;;AASA;AACA;AACA;AACA;AACA,OAAO,IAAMC,IAAI,GAAG,SAAPA,IAAO;AAAA,MAClBC,QADkB,QAClBA,QADkB;AAAA,MAElBC,MAFkB,QAElBA,MAFkB;AAAA,MAGlBC,OAHkB,QAGlBA,OAHkB;AAAA,MAIlBC,KAJkB,QAIlBA,KAJkB;AAAA,sBAMlB;AAAK,IAAA,SAAS,EAAC;AAAf,kBACE;AAAK,IAAA,SAAS,EAAC;AAAf,kBACE;AAAK,IAAA,SAAS,EAAC;AAAf,KACGF,MAAM,KAAKG,SAAX,iBACC;AACE,IAAA,SAAS,EAAC,uBADZ;AAEE,IAAA,IAAI,EAAC,QAFP;AAGE,IAAA,OAAO,EAAEH;AAHX,kBAKE,oBAAC,eAAD;AAAiB,IAAA,IAAI,EAAEH;AAAvB,IALF,SAFJ,CADF,eAaE;AAAK,IAAA,SAAS,EAAC;AAAf,KAAmCK,KAAnC,CAbF,eAcE;AAAK,IAAA,SAAS,EAAC;AAAf,KACGD,OAAO,KAAKE,SAAZ,iBACC;AACE,IAAA,SAAS,EAAC,+CADZ;AAEE,IAAA,IAAI,EAAC,QAFP;AAGE,IAAA,OAAO,EAAEF;AAHX,kBAKE,oBAAC,eAAD;AAAiB,IAAA,IAAI,EAAEL;AAAvB,IALF,CAFJ,CAdF,CADF,eA2BE;AAAK,IAAA,SAAS,EAAC;AAAf,KAAqCG,QAArC,CA3BF,CANkB;AAAA,CAAb;AAqCP,eAAeD,IAAf","sourcesContent":["import React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsClose, vsChevronLeft } from '@deephaven/icons';\nimport './Page.scss';\n\nexport type PageProps = {\n children: React.ReactNode;\n onBack?: () => void;\n onClose?: () => void;\n title: string;\n};\n\n/**\n * A page view with a back button in the bottom left, a title at the top, and a close button in the top right.\n * Back and close buttons will only appear if `onBack` and/or `onClose` callbacks are set.\n */\nexport const Page = ({\n children,\n onBack,\n onClose,\n title,\n}: PageProps): JSX.Element => (\n <div className=\"navigation-page\">\n <div className=\"navigation-title-bar\">\n <div className=\"navigation-left-buttons\">\n {onBack !== undefined && (\n <button\n className=\"btn btn-link btn-back\"\n type=\"button\"\n onClick={onBack}\n >\n <FontAwesomeIcon icon={vsChevronLeft} />\n Back\n </button>\n )}\n </div>\n <div className=\"navigation-title\">{title}</div>\n <div className=\"navigation-right-buttons\">\n {onClose !== undefined && (\n <button\n className=\"btn btn-link btn-link-icon btn-close px-2 m-1\"\n type=\"button\"\n onClick={onClose}\n >\n <FontAwesomeIcon icon={vsClose} />\n </button>\n )}\n </div>\n </div>\n <div className=\"navigation-content\">{children}</div>\n </div>\n);\n\nexport default Page;\n"],"file":"Page.js"}
1
+ {"version":3,"sources":["../../src/navigation/Page.tsx"],"names":["React","FontAwesomeIcon","vsClose","vsChevronLeft","Page","children","onBack","onClose","title","undefined"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,eAAT,QAAgC,gCAAhC;AACA,SAASC,OAAT,EAAkBC,aAAlB,QAAuC,kBAAvC;;;AAUA;AACA;AACA;AACA;AACA,OAAO,IAAMC,IAAI,GAAG;AAAA,MAAC;AACnBC,IAAAA,QADmB;AAEnBC,IAAAA,MAFmB;AAGnBC,IAAAA,OAHmB;AAInBC,IAAAA;AAJmB,GAAD;AAAA,sBAMlB;AAAK,IAAA,SAAS,EAAC;AAAf,kBACE;AAAK,IAAA,SAAS,EAAC;AAAf,kBACE;AAAK,IAAA,SAAS,EAAC;AAAf,KACGF,MAAM,KAAKG,SAAX,iBACC;AACE,IAAA,SAAS,EAAC,uBADZ;AAEE,IAAA,IAAI,EAAC,QAFP;AAGE,IAAA,OAAO,EAAEH;AAHX,kBAKE,oBAAC,eAAD;AAAiB,IAAA,IAAI,EAAEH;AAAvB,IALF,SAFJ,CADF,eAaE;AAAK,IAAA,SAAS,EAAC;AAAf,KAAmCK,KAAnC,CAbF,eAcE;AAAK,IAAA,SAAS,EAAC;AAAf,KACGD,OAAO,KAAKE,SAAZ,iBACC;AACE,IAAA,SAAS,EAAC,+CADZ;AAEE,IAAA,IAAI,EAAC,QAFP;AAGE,IAAA,OAAO,EAAEF;AAHX,kBAKE,oBAAC,eAAD;AAAiB,IAAA,IAAI,EAAEL;AAAvB,IALF,CAFJ,CAdF,CADF,eA2BE;AAAK,IAAA,SAAS,EAAC;AAAf,KAAqCG,QAArC,CA3BF,CANkB;AAAA,CAAb;AAqCP,eAAeD,IAAf","sourcesContent":["import React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsClose, vsChevronLeft } from '@deephaven/icons';\nimport './Page.scss';\n\nexport type PageProps = {\n children: React.ReactNode;\n onBack?: () => void;\n onClose?: () => void;\n title: string;\n};\n\n/**\n * A page view with a back button in the bottom left, a title at the top, and a close button in the top right.\n * Back and close buttons will only appear if `onBack` and/or `onClose` callbacks are set.\n */\nexport const Page = ({\n children,\n onBack,\n onClose,\n title,\n}: PageProps): JSX.Element => (\n <div className=\"navigation-page\">\n <div className=\"navigation-title-bar\">\n <div className=\"navigation-left-buttons\">\n {onBack !== undefined && (\n <button\n className=\"btn btn-link btn-back\"\n type=\"button\"\n onClick={onBack}\n >\n <FontAwesomeIcon icon={vsChevronLeft} />\n Back\n </button>\n )}\n </div>\n <div className=\"navigation-title\">{title}</div>\n <div className=\"navigation-right-buttons\">\n {onClose !== undefined && (\n <button\n className=\"btn btn-link btn-link-icon btn-close px-2 m-1\"\n type=\"button\"\n onClick={onClose}\n >\n <FontAwesomeIcon icon={vsClose} />\n </button>\n )}\n </div>\n </div>\n <div className=\"navigation-content\">{children}</div>\n </div>\n);\n\nexport default Page;\n"],"file":"Page.js"}
@@ -1,46 +1,22 @@
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 _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); }
6
-
7
- 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; }
8
-
9
- 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; }
10
-
11
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
12
-
13
1
  import React, { useState, useEffect, useMemo, useCallback } from 'react';
14
2
  import { CSSTransition } from 'react-transition-group';
15
3
  import { usePrevious } from '@deephaven/react-hooks';
16
- import ThemeExport from '../ThemeExport';
4
+ import ThemeExport from "../ThemeExport.js";
17
5
  import "./Stack.css";
18
6
 
19
7
  /**
20
8
  * Pass a full navigation stack of children, and then automatically does a sliding animation when the stack changes.
21
9
  * Adding items to the stack will do a "push" animation, and removing items from the stack will do a "pop" animation.
22
10
  */
23
- export var Stack = function Stack(_ref) {
24
- var children = _ref.children;
25
- var childrenArray = useMemo(function () {
26
- return React.Children.toArray(children);
27
- }, [children]);
11
+ export var Stack = (_ref) => {
12
+ var {
13
+ children
14
+ } = _ref;
15
+ var childrenArray = useMemo(() => React.Children.toArray(children), [children]);
28
16
  var prevChildrenArray = usePrevious(childrenArray);
29
-
30
- var _useState = useState(childrenArray[childrenArray.length - 1]),
31
- _useState2 = _slicedToArray(_useState, 2),
32
- mainView = _useState2[0],
33
- setMainView = _useState2[1];
34
-
35
- var _useState3 = useState(null),
36
- _useState4 = _slicedToArray(_useState3, 2),
37
- pushingView = _useState4[0],
38
- setPushingView = _useState4[1];
39
-
40
- var _useState5 = useState(null),
41
- _useState6 = _slicedToArray(_useState5, 2),
42
- poppingView = _useState6[0],
43
- setPoppingView = _useState6[1];
17
+ var [mainView, setMainView] = useState(childrenArray[childrenArray.length - 1]);
18
+ var [pushingView, setPushingView] = useState(null);
19
+ var [poppingView, setPoppingView] = useState(null);
44
20
  /**
45
21
  * To do the animation effect, we just need to set the proper pushing/popping views when the stack changes.
46
22
  * `mainView` - The main view of the stack, stationary, filling the container.
@@ -51,8 +27,7 @@ export var Stack = function Stack(_ref) {
51
27
  * Completion of the animation is handled in `pushComplete` or `popComplete`, and then the stack is in an idle state again.
52
28
  */
53
29
 
54
-
55
- useEffect(function () {
30
+ useEffect(() => {
56
31
  if (prevChildrenArray === undefined || childrenArray === prevChildrenArray) {
57
32
  return;
58
33
  }
@@ -77,11 +52,11 @@ export var Stack = function Stack(_ref) {
77
52
  setPoppingView(prevChildrenArray[prevChildrenArray.length - 1]);
78
53
  }
79
54
  }, [childrenArray, prevChildrenArray, pushingView, poppingView, mainView]);
80
- var pushComplete = useCallback(function () {
55
+ var pushComplete = useCallback(() => {
81
56
  setMainView(pushingView);
82
57
  setPushingView(null);
83
58
  }, [pushingView]);
84
- var popComplete = useCallback(function () {
59
+ var popComplete = useCallback(() => {
85
60
  setPoppingView(null);
86
61
  }, []);
87
62
  return /*#__PURE__*/React.createElement("div", {
@@ -89,14 +64,14 @@ export var Stack = function Stack(_ref) {
89
64
  }, /*#__PURE__*/React.createElement("div", {
90
65
  className: "main-view"
91
66
  }, mainView), /*#__PURE__*/React.createElement(CSSTransition, {
92
- "in": poppingView != null,
67
+ in: poppingView != null,
93
68
  timeout: ThemeExport.transitionMidMs,
94
69
  classNames: "slide-right",
95
70
  onEntered: popComplete
96
71
  }, /*#__PURE__*/React.createElement(React.Fragment, null, poppingView && /*#__PURE__*/React.createElement("div", {
97
72
  className: "popping-view"
98
73
  }, poppingView))), /*#__PURE__*/React.createElement(CSSTransition, {
99
- "in": pushingView != null,
74
+ in: pushingView != null,
100
75
  timeout: ThemeExport.transitionMidMs,
101
76
  classNames: "slide-left",
102
77
  onEntered: pushComplete
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/navigation/Stack.tsx"],"names":["React","useState","useEffect","useMemo","useCallback","CSSTransition","usePrevious","ThemeExport","Stack","children","childrenArray","Children","toArray","prevChildrenArray","length","mainView","setMainView","pushingView","setPushingView","poppingView","setPoppingView","undefined","topChild","pushComplete","popComplete","transitionMidMs"],"mappings":"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","sourcesContent":["import React, { useState, useEffect, useMemo, useCallback } from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport { usePrevious } from '@deephaven/react-hooks';\nimport ThemeExport from '../ThemeExport';\nimport './Stack.scss';\n\nexport type StackProps = {\n children: React.ReactNode | React.ReactNode[];\n};\n\n/**\n * Pass a full navigation stack of children, and then automatically does a sliding animation when the stack changes.\n * Adding items to the stack will do a \"push\" animation, and removing items from the stack will do a \"pop\" animation.\n */\nexport const Stack = ({ children }: StackProps): JSX.Element => {\n const childrenArray = useMemo(() => React.Children.toArray(children), [\n children,\n ]);\n const prevChildrenArray = usePrevious(childrenArray);\n const [mainView, setMainView] = useState<React.ReactNode>(\n childrenArray[childrenArray.length - 1]\n );\n\n const [pushingView, setPushingView] = useState<React.ReactNode>(null);\n const [poppingView, setPoppingView] = useState<React.ReactNode>(null);\n\n /**\n * To do the animation effect, we just need to set the proper pushing/popping views when the stack changes.\n * `mainView` - The main view of the stack, stationary, filling the container.\n * `pushingView` - A view that's currently being pushed. Slides from off screen right to overtop of `mainView`.\n * `poppingView` - A view that's currently being popped. Slides from overtop of `mainView` to right off screen.\n *\n * When the `pushingView` or `poppingView` is set, that will kick off their animation.\n * Completion of the animation is handled in `pushComplete` or `popComplete`, and then the stack is in an idle state again.\n */\n useEffect(() => {\n if (\n prevChildrenArray === undefined ||\n childrenArray === prevChildrenArray\n ) {\n return;\n }\n const topChild = childrenArray[childrenArray.length - 1];\n if (\n childrenArray.length === prevChildrenArray.length ||\n prevChildrenArray.length === 0 ||\n pushingView !== null ||\n poppingView !== null\n ) {\n // 1) Stack is the same size, we've just mounted, or we're already in an animation - just update the view\n if (pushingView !== null && topChild !== pushingView) {\n // Stack was updated mid animation\n setPushingView(topChild);\n } else if (topChild !== poppingView && topChild !== mainView) {\n // Replace the current view\n setMainView(topChild);\n }\n } else if (childrenArray.length > prevChildrenArray.length) {\n // 2) Stack has grown - start the push animation\n setPushingView(topChild);\n } else if (childrenArray.length < prevChildrenArray.length) {\n // 3) Stack has shrunk - start the pop animation\n setMainView(topChild);\n setPoppingView(prevChildrenArray[prevChildrenArray.length - 1]);\n }\n }, [childrenArray, prevChildrenArray, pushingView, poppingView, mainView]);\n\n const pushComplete = useCallback(() => {\n setMainView(pushingView);\n setPushingView(null);\n }, [pushingView]);\n\n const popComplete = useCallback(() => {\n setPoppingView(null);\n }, []);\n\n return (\n <div className=\"navigation-stack\">\n <div className=\"main-view\">{mainView}</div>\n\n <CSSTransition\n in={poppingView != null}\n timeout={ThemeExport.transitionMidMs}\n classNames=\"slide-right\"\n onEntered={popComplete}\n >\n <>{poppingView && <div className=\"popping-view\">{poppingView}</div>}</>\n </CSSTransition>\n <CSSTransition\n in={pushingView != null}\n timeout={ThemeExport.transitionMidMs}\n classNames=\"slide-left\"\n onEntered={pushComplete}\n >\n <>{pushingView && <div className=\"pushing-view\">{pushingView}</div>}</>\n </CSSTransition>\n </div>\n );\n};\n\nexport default Stack;\n"],"file":"Stack.js"}
1
+ {"version":3,"sources":["../../src/navigation/Stack.tsx"],"names":["React","useState","useEffect","useMemo","useCallback","CSSTransition","usePrevious","ThemeExport","Stack","children","childrenArray","Children","toArray","prevChildrenArray","mainView","setMainView","length","pushingView","setPushingView","poppingView","setPoppingView","undefined","topChild","pushComplete","popComplete","transitionMidMs"],"mappings":"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","sourcesContent":["import React, { useState, useEffect, useMemo, useCallback } from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport { usePrevious } from '@deephaven/react-hooks';\nimport ThemeExport from '../ThemeExport';\nimport './Stack.scss';\n\nexport type StackProps = {\n children: React.ReactNode | React.ReactNode[];\n};\n\n/**\n * Pass a full navigation stack of children, and then automatically does a sliding animation when the stack changes.\n * Adding items to the stack will do a \"push\" animation, and removing items from the stack will do a \"pop\" animation.\n */\nexport const Stack = ({ children }: StackProps): JSX.Element => {\n const childrenArray = useMemo(() => React.Children.toArray(children), [\n children,\n ]);\n const prevChildrenArray = usePrevious(childrenArray);\n const [mainView, setMainView] = useState<React.ReactNode>(\n childrenArray[childrenArray.length - 1]\n );\n\n const [pushingView, setPushingView] = useState<React.ReactNode>(null);\n const [poppingView, setPoppingView] = useState<React.ReactNode>(null);\n\n /**\n * To do the animation effect, we just need to set the proper pushing/popping views when the stack changes.\n * `mainView` - The main view of the stack, stationary, filling the container.\n * `pushingView` - A view that's currently being pushed. Slides from off screen right to overtop of `mainView`.\n * `poppingView` - A view that's currently being popped. Slides from overtop of `mainView` to right off screen.\n *\n * When the `pushingView` or `poppingView` is set, that will kick off their animation.\n * Completion of the animation is handled in `pushComplete` or `popComplete`, and then the stack is in an idle state again.\n */\n useEffect(() => {\n if (\n prevChildrenArray === undefined ||\n childrenArray === prevChildrenArray\n ) {\n return;\n }\n const topChild = childrenArray[childrenArray.length - 1];\n if (\n childrenArray.length === prevChildrenArray.length ||\n prevChildrenArray.length === 0 ||\n pushingView !== null ||\n poppingView !== null\n ) {\n // 1) Stack is the same size, we've just mounted, or we're already in an animation - just update the view\n if (pushingView !== null && topChild !== pushingView) {\n // Stack was updated mid animation\n setPushingView(topChild);\n } else if (topChild !== poppingView && topChild !== mainView) {\n // Replace the current view\n setMainView(topChild);\n }\n } else if (childrenArray.length > prevChildrenArray.length) {\n // 2) Stack has grown - start the push animation\n setPushingView(topChild);\n } else if (childrenArray.length < prevChildrenArray.length) {\n // 3) Stack has shrunk - start the pop animation\n setMainView(topChild);\n setPoppingView(prevChildrenArray[prevChildrenArray.length - 1]);\n }\n }, [childrenArray, prevChildrenArray, pushingView, poppingView, mainView]);\n\n const pushComplete = useCallback(() => {\n setMainView(pushingView);\n setPushingView(null);\n }, [pushingView]);\n\n const popComplete = useCallback(() => {\n setPoppingView(null);\n }, []);\n\n return (\n <div className=\"navigation-stack\">\n <div className=\"main-view\">{mainView}</div>\n\n <CSSTransition\n in={poppingView != null}\n timeout={ThemeExport.transitionMidMs}\n classNames=\"slide-right\"\n onEntered={popComplete}\n >\n <>{poppingView && <div className=\"popping-view\">{poppingView}</div>}</>\n </CSSTransition>\n <CSSTransition\n in={pushingView != null}\n timeout={ThemeExport.transitionMidMs}\n classNames=\"slide-left\"\n onEntered={pushComplete}\n >\n <>{pushingView && <div className=\"pushing-view\">{pushingView}</div>}</>\n </CSSTransition>\n </div>\n );\n};\n\nexport default Stack;\n"],"file":"Stack.js"}
@@ -1,5 +1,5 @@
1
- export { default as Menu } from './Menu';
2
- export { default as MenuItem } from './MenuItem';
3
- export { default as Page } from './Page';
4
- export { default as Stack } from './Stack';
1
+ export { default as Menu } from "./Menu.js";
2
+ export { default as MenuItem } from "./MenuItem.js";
3
+ export { default as Page } from "./Page.js";
4
+ export { default as Stack } from "./Stack.js";
5
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/navigation/index.ts"],"names":["default","Menu","MenuItem","Page","Stack"],"mappings":"AAAA,SAASA,OAAO,IAAIC,IAApB,QAAgC,QAAhC;AAEA,SAASD,OAAO,IAAIE,QAApB,QAAoC,YAApC;AAEA,SAASF,OAAO,IAAIG,IAApB,QAAgC,QAAhC;AAEA,SAASH,OAAO,IAAII,KAApB,QAAiC,SAAjC","sourcesContent":["export { default as Menu } from './Menu';\nexport type { MenuProps } from './Menu';\nexport { default as MenuItem } from './MenuItem';\nexport type { SwitchMenuItemDef, MenuItemDef, MenuItemProps } from './MenuItem';\nexport { default as Page } from './Page';\nexport type { PageProps } from './Page';\nexport { default as Stack } from './Stack';\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../src/navigation/index.ts"],"names":["default","Menu","MenuItem","Page","Stack"],"mappings":"SAASA,OAAO,IAAIC,I;SAEXD,OAAO,IAAIE,Q;SAEXF,OAAO,IAAIG,I;SAEXH,OAAO,IAAII,K","sourcesContent":["export { default as Menu } from './Menu';\nexport type { MenuProps } from './Menu';\nexport { default as MenuItem } from './MenuItem';\nexport type { SwitchMenuItemDef, MenuItemDef, MenuItemProps } from './MenuItem';\nexport { default as Page } from './Page';\nexport type { PageProps } from './Page';\nexport { default as Stack } from './Stack';\n"],"file":"index.js"}