react-cosmos-ui 6.0.0-alpha.9 → 6.0.0-beta.2

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 (175) hide show
  1. package/dist/components/Icon.d.ts +7 -3
  2. package/dist/components/Icon.js +2 -2
  3. package/dist/components/Illustration.d.ts +1 -0
  4. package/dist/components/KeyBox.d.ts +1 -0
  5. package/dist/components/SidePanel.d.ts +1 -0
  6. package/dist/components/SidePanel.js +1 -1
  7. package/dist/components/Space.d.ts +1 -0
  8. package/dist/components/ValueInputTree/ExpandCollapseValues.d.ts +1 -0
  9. package/dist/components/ValueInputTree/ValueInput/BooleanValueInput.d.ts +1 -0
  10. package/dist/components/ValueInputTree/ValueInput/NullValueInput.d.ts +1 -0
  11. package/dist/components/ValueInputTree/ValueInput/NumberValueInput.d.ts +1 -0
  12. package/dist/components/ValueInputTree/ValueInput/StringValueInput.d.ts +1 -0
  13. package/dist/components/ValueInputTree/ValueInput/UndefinedValueInput.d.ts +1 -0
  14. package/dist/components/ValueInputTree/ValueInput/UnserializableValueInput.d.ts +1 -0
  15. package/dist/components/ValueInputTree/ValueInput/ValueInput.d.ts +1 -0
  16. package/dist/components/ValueInputTree/ValueInput/ValueInput.js +1 -1
  17. package/dist/components/ValueInputTree/ValueInputDir.d.ts +1 -0
  18. package/dist/components/ValueInputTree/index.d.ts +3 -3
  19. package/dist/components/ValueInputTree/index.js +2 -2
  20. package/dist/components/ValueInputTree/shared.d.ts +1 -2
  21. package/dist/components/ValueInputTree/shared.js +0 -4
  22. package/dist/components/ValueInputTree/valueTreeExpansion.js +2 -1
  23. package/dist/components/icons/index.d.ts +4 -6
  24. package/dist/components/icons/index.js +1 -1
  25. package/dist/components/illustrations/ArtificialIntelligence.d.ts +1 -0
  26. package/dist/components/illustrations/Astronaut.d.ts +1 -0
  27. package/dist/components/illustrations/BlankCanvas.d.ts +1 -0
  28. package/dist/components/inputs/NumberInput.d.ts +1 -0
  29. package/dist/components/inputs/Select.d.ts +1 -0
  30. package/dist/cosmos.loadPlugins.js +14 -10
  31. package/dist/index.d.ts +0 -1
  32. package/dist/index.js +0 -1
  33. package/dist/playground.bundle.js +602 -599
  34. package/dist/playground.bundle.js.map +1 -1
  35. package/dist/playground.js +13 -2
  36. package/dist/playgroundConfig.d.ts +2 -0
  37. package/dist/plugins/ClassStatePanel/ClassStatePanel/ComponentClassState.d.ts +1 -0
  38. package/dist/plugins/ClassStatePanel/ClassStatePanel/ComponentClassState.js +3 -3
  39. package/dist/plugins/ControlPanel/ControlPanel.d.ts +1 -0
  40. package/dist/plugins/ControlPanel/ControlPanel.js +1 -1
  41. package/dist/plugins/ControlSelect/SelectValueInput.d.ts +1 -0
  42. package/dist/plugins/ControlSelect/SelectValueInput.js +1 -1
  43. package/dist/plugins/Core/index.js +0 -5
  44. package/dist/plugins/Core/spec.d.ts +0 -2
  45. package/dist/plugins/FixtureBookmark/BookmarkFixtureButton.d.ts +1 -0
  46. package/dist/plugins/FixtureBookmark/FixtureBookmarks.d.ts +5 -5
  47. package/dist/plugins/FixtureBookmark/FixtureBookmarks.js +10 -7
  48. package/dist/plugins/FixtureBookmark/index.js +7 -17
  49. package/dist/plugins/FixtureSearch/FixtureSearchHeader.d.ts +3 -2
  50. package/dist/plugins/FixtureSearch/FixtureSearchHeader.js +3 -3
  51. package/dist/plugins/FixtureSearch/FixtureSearchOverlay.d.ts +1 -0
  52. package/dist/plugins/FixtureSearch/FixtureSearchOverlay.js +2 -2
  53. package/dist/plugins/FixtureSearch/FixtureSearchResult.d.ts +1 -0
  54. package/dist/plugins/FixtureSearch/FixtureSearchShortcuts.d.ts +1 -0
  55. package/dist/plugins/FixtureSearch/index.js +2 -1
  56. package/dist/plugins/FixtureTree/BlankState.d.ts +1 -0
  57. package/dist/plugins/FixtureTree/BlankState.js +23 -24
  58. package/dist/plugins/FixtureTree/FixtureTree/FixtureButton.d.ts +2 -2
  59. package/dist/plugins/FixtureTree/FixtureTree/FixtureButton.js +2 -2
  60. package/dist/plugins/FixtureTree/FixtureTree/FixtureDir.d.ts +1 -0
  61. package/dist/plugins/FixtureTree/FixtureTree/FixtureTree.js +6 -8
  62. package/dist/plugins/FixtureTree/FixtureTree/MultiFixtureButton.d.ts +3 -2
  63. package/dist/plugins/FixtureTree/FixtureTree/MultiFixtureButton.js +16 -11
  64. package/dist/plugins/FixtureTree/FixtureTreeContainer.d.ts +2 -2
  65. package/dist/plugins/FixtureTree/FixtureTreeContainer.js +1 -3
  66. package/dist/plugins/FixtureTree/FixtureTreeHeader.d.ts +1 -0
  67. package/dist/plugins/FixtureTree/index.js +1 -1
  68. package/dist/plugins/FixtureTree/revealFixture.js +2 -2
  69. package/dist/plugins/FixtureTree/shared.d.ts +1 -1
  70. package/dist/plugins/FullScreenButton/FullScreenButton.d.ts +1 -0
  71. package/dist/plugins/FullScreenButton/index.js +11 -5
  72. package/dist/plugins/Notifications/Notifications.d.ts +1 -0
  73. package/dist/plugins/PluginList/PluginList.d.ts +1 -0
  74. package/dist/plugins/PropsPanel/BlankState.d.ts +1 -0
  75. package/dist/plugins/PropsPanel/BlankState.js +14 -12
  76. package/dist/plugins/PropsPanel/PropsPanel/ComponentProps.d.ts +1 -0
  77. package/dist/plugins/PropsPanel/index.js +1 -4
  78. package/dist/plugins/RemoteRenderer/RemoteButton/index.d.ts +3 -2
  79. package/dist/plugins/RemoteRenderer/RemoteButton/index.js +5 -4
  80. package/dist/plugins/RemoteRenderer/index.js +2 -1
  81. package/dist/plugins/RendererCore/index.js +23 -5
  82. package/dist/plugins/RendererCore/onRouterFixtureReselect.d.ts +3 -0
  83. package/dist/plugins/RendererCore/onRouterFixtureReselect.js +7 -0
  84. package/dist/plugins/RendererCore/onRouterFixtureSelect.d.ts +3 -0
  85. package/dist/plugins/RendererCore/onRouterFixtureSelect.js +9 -0
  86. package/dist/plugins/RendererCore/onRouterFixtureUnselect.d.ts +2 -0
  87. package/dist/plugins/RendererCore/onRouterFixtureUnselect.js +9 -0
  88. package/dist/plugins/RendererCore/receiveResponse/fixtureStateChange.js +4 -4
  89. package/dist/plugins/RendererCore/receiveResponse/rendererReady.js +15 -21
  90. package/dist/plugins/RendererCore/reloadRenderer.d.ts +2 -0
  91. package/dist/plugins/RendererCore/reloadRenderer.js +5 -0
  92. package/dist/plugins/RendererCore/shared/postRequest.d.ts +1 -0
  93. package/dist/plugins/RendererCore/shared/postRequest.js +8 -0
  94. package/dist/plugins/RendererCore/spec.d.ts +6 -1
  95. package/dist/plugins/RendererPreview/RendererOverlay/RemoteRendererConnected.d.ts +2 -0
  96. package/dist/plugins/RendererPreview/RendererOverlay/RemoteRendererConnected.js +19 -0
  97. package/dist/plugins/RendererPreview/RendererOverlay/RemoteRendererOverlay.d.ts +6 -0
  98. package/dist/plugins/RendererPreview/RendererOverlay/RemoteRendererOverlay.js +6 -0
  99. package/dist/plugins/RendererPreview/RendererOverlay/RendererOverlay.d.ts +7 -0
  100. package/dist/plugins/RendererPreview/RendererOverlay/RendererOverlay.js +11 -0
  101. package/dist/plugins/RendererPreview/RendererOverlay/WaitingForRenderer.d.ts +2 -0
  102. package/dist/plugins/RendererPreview/RendererOverlay/WaitingForRenderer.js +65 -0
  103. package/dist/plugins/RendererPreview/RendererOverlay/rendererOverlayShared.d.ts +3 -0
  104. package/dist/plugins/RendererPreview/RendererOverlay/rendererOverlayShared.js +27 -0
  105. package/dist/plugins/RendererPreview/RendererPreview.d.ts +3 -0
  106. package/dist/plugins/RendererPreview/RendererPreview.js +10 -3
  107. package/dist/plugins/RendererPreview/handleRendererRequests.js +7 -6
  108. package/dist/plugins/RendererPreview/handleWindowMessages.js +10 -1
  109. package/dist/plugins/RendererPreview/index.js +7 -13
  110. package/dist/plugins/RendererPreview/shared.d.ts +0 -6
  111. package/dist/plugins/RendererPreview/spec.d.ts +0 -3
  112. package/dist/plugins/ResponsivePreview/ResponsivePreview/{Header.d.ts → ResponsiveHeader.d.ts} +1 -1
  113. package/dist/plugins/ResponsivePreview/ResponsivePreview/{Header.js → ResponsiveHeader.js} +2 -2
  114. package/dist/plugins/ResponsivePreview/ResponsivePreview/ResponsivePreview.d.ts +1 -2
  115. package/dist/plugins/ResponsivePreview/ResponsivePreview/ResponsivePreview.js +4 -4
  116. package/dist/plugins/ResponsivePreview/ToggleButton/index.d.ts +1 -0
  117. package/dist/plugins/ResponsivePreview/index.js +5 -6
  118. package/dist/plugins/ResponsivePreview/shared.js +13 -10
  119. package/dist/plugins/Root/GlobalHeader.d.ts +2 -4
  120. package/dist/plugins/Root/GlobalHeader.js +2 -23
  121. package/dist/plugins/{ContentOverlay/shared.d.ts → Root/HomeOverlay/ContentOverlay.d.ts} +1 -4
  122. package/dist/plugins/{ContentOverlay/shared.js → Root/HomeOverlay/ContentOverlay.js} +3 -3
  123. package/dist/plugins/Root/HomeOverlay/HomeOverlay.d.ts +8 -0
  124. package/dist/plugins/Root/HomeOverlay/HomeOverlay.js +6 -0
  125. package/dist/plugins/{ContentOverlay → Root/HomeOverlay}/KeyShortcut.d.ts +1 -0
  126. package/dist/plugins/{ContentOverlay → Root/HomeOverlay}/KeyShortcut.js +2 -2
  127. package/dist/plugins/{ContentOverlay → Root/HomeOverlay}/NoFixtureSelected.d.ts +1 -0
  128. package/dist/plugins/{ContentOverlay → Root/HomeOverlay}/NoFixtureSelected.js +5 -5
  129. package/dist/plugins/{ContentOverlay → Root/HomeOverlay}/WelcomeCosmos.d.ts +1 -0
  130. package/dist/plugins/Root/HomeOverlay/WelcomeCosmos.js +159 -0
  131. package/dist/plugins/Root/HomeOverlay/welcomeDismiss.d.ts +7 -0
  132. package/dist/plugins/{ContentOverlay → Root/HomeOverlay}/welcomeDismiss.js +6 -4
  133. package/dist/plugins/Root/RendererHeader.d.ts +1 -1
  134. package/dist/plugins/Root/RendererHeader.js +13 -5
  135. package/dist/plugins/Root/Root.d.ts +7 -5
  136. package/dist/plugins/Root/Root.js +9 -10
  137. package/dist/plugins/Root/ToggleNavButton.d.ts +1 -0
  138. package/dist/plugins/Root/index.js +6 -5
  139. package/dist/plugins/Root/panelOpen.js +0 -5
  140. package/dist/plugins/Router/index.js +23 -11
  141. package/dist/plugins/Router/spec.d.ts +5 -3
  142. package/dist/plugins/StandardControl/storage.d.ts +1 -1
  143. package/dist/plugins/pluginEntry.d.ts +0 -1
  144. package/dist/plugins/pluginEntry.js +0 -1
  145. package/dist/shared/fixtureTree.d.ts +1 -2
  146. package/dist/shared/fixtureTree.js +5 -10
  147. package/dist/shared/url.d.ts +6 -5
  148. package/dist/shared/url.js +6 -6
  149. package/dist/slots/ControlActionSlot.d.ts +1 -0
  150. package/dist/slots/ControlSlot.d.ts +1 -0
  151. package/dist/slots/FixtureActionSlot.d.ts +3 -2
  152. package/dist/slots/NavRowSlot.d.ts +1 -0
  153. package/dist/slots/RendererActionSlot.d.ts +1 -0
  154. package/dist/slots/SidePanelRowSlot.d.ts +1 -0
  155. package/dist/testHelpers/pluginMocks.d.ts +8 -7
  156. package/dist/testHelpers/pluginMocks.js +5 -3
  157. package/package.json +4 -4
  158. package/dist/plugins/ContentOverlay/ContentOverlay.d.ts +0 -13
  159. package/dist/plugins/ContentOverlay/ContentOverlay.js +0 -34
  160. package/dist/plugins/ContentOverlay/RendererNotResponding.d.ts +0 -1
  161. package/dist/plugins/ContentOverlay/RendererNotResponding.js +0 -109
  162. package/dist/plugins/ContentOverlay/WelcomeCosmos.js +0 -158
  163. package/dist/plugins/ContentOverlay/cosmos.decorator.d.ts +0 -5
  164. package/dist/plugins/ContentOverlay/cosmos.decorator.js +0 -13
  165. package/dist/plugins/ContentOverlay/index.d.ts +0 -2
  166. package/dist/plugins/ContentOverlay/index.js +0 -19
  167. package/dist/plugins/ContentOverlay/spec.d.ts +0 -3
  168. package/dist/plugins/ContentOverlay/spec.js +0 -1
  169. package/dist/plugins/ContentOverlay/welcomeDismiss.d.ts +0 -7
  170. package/dist/plugins/RendererCore/isValidFixtureSelected.d.ts +0 -2
  171. package/dist/plugins/RendererCore/isValidFixtureSelected.js +0 -16
  172. package/dist/plugins/RendererCore/onRouterFixtureChange.d.ts +0 -3
  173. package/dist/plugins/RendererCore/onRouterFixtureChange.js +0 -18
  174. package/dist/plugins/RendererPreview/checkRendererStatus.d.ts +0 -2
  175. package/dist/plugins/RendererPreview/checkRendererStatus.js +0 -31
@@ -1,10 +1,9 @@
1
+ /// <reference types="react" />
1
2
  import { FixtureId, FixtureState, FlatFixtureTreeItem, StateUpdater } from 'react-cosmos-core';
2
3
  type Props = {
3
- storageCacheReady: boolean;
4
4
  fixtureItems: FlatFixtureTreeItem[];
5
5
  selectedFixtureId: FixtureId | null;
6
6
  rendererConnected: boolean;
7
- validFixtureSelected: boolean;
8
7
  fixtureState: FixtureState;
9
8
  navOpen: boolean;
10
9
  panelOpen: boolean;
@@ -18,11 +17,14 @@ type Props = {
18
17
  rendererActionOrder: string[];
19
18
  onToggleNav: () => unknown;
20
19
  onTogglePanel: () => unknown;
21
- onFixtureSelect: (fixtureId: FixtureId) => unknown;
22
- onFixtureClose: () => unknown;
20
+ onReloadRenderer: () => unknown;
21
+ onCloseFixture: () => unknown;
23
22
  onFixtureStateChange: (stateUpdater: StateUpdater<FixtureState>) => void;
24
23
  setNavWidth: (width: number) => unknown;
25
24
  setPanelWidth: (width: number) => unknown;
25
+ welcomeDismissed: boolean;
26
+ onDismissWelcome: () => unknown;
27
+ onShowWelcome: () => unknown;
26
28
  };
27
- export declare function Root({ storageCacheReady, fixtureItems, selectedFixtureId, rendererConnected, validFixtureSelected, fixtureState, navOpen, panelOpen, navWidth, panelWidth, sidePanelRowOrder, globalActionOrder, globalOrder, navRowOrder, fixtureActionOrder, rendererActionOrder, onToggleNav, onTogglePanel, onFixtureSelect, onFixtureClose, onFixtureStateChange, setNavWidth, setPanelWidth, }: Props): JSX.Element;
29
+ export declare function Root({ fixtureItems, selectedFixtureId, rendererConnected, fixtureState, navOpen, panelOpen, navWidth, panelWidth, sidePanelRowOrder, globalActionOrder, globalOrder, navRowOrder, fixtureActionOrder, rendererActionOrder, onToggleNav, onTogglePanel, onReloadRenderer, onCloseFixture, onFixtureStateChange, setNavWidth, setPanelWidth, welcomeDismissed, onDismissWelcome, onShowWelcome, }: Props): JSX.Element;
28
30
  export {};
@@ -5,9 +5,10 @@ import { useDrag } from '../../hooks/useDrag.js';
5
5
  import { NavRowSlot } from '../../slots/NavRowSlot.js';
6
6
  import { grey32, grey8, white10 } from '../../style/colors.js';
7
7
  import { GlobalHeader } from './GlobalHeader.js';
8
+ import { HomeOverlay } from './HomeOverlay/HomeOverlay.js';
8
9
  import { RendererHeader } from './RendererHeader.js';
9
10
  import { SidePanel } from './SidePanel.js';
10
- export function Root({ storageCacheReady, fixtureItems, selectedFixtureId, rendererConnected, validFixtureSelected, fixtureState, navOpen, panelOpen, navWidth, panelWidth, sidePanelRowOrder, globalActionOrder, globalOrder, navRowOrder, fixtureActionOrder, rendererActionOrder, onToggleNav, onTogglePanel, onFixtureSelect, onFixtureClose, onFixtureStateChange, setNavWidth, setPanelWidth, }) {
11
+ export function Root({ fixtureItems, selectedFixtureId, rendererConnected, fixtureState, navOpen, panelOpen, navWidth, panelWidth, sidePanelRowOrder, globalActionOrder, globalOrder, navRowOrder, fixtureActionOrder, rendererActionOrder, onToggleNav, onTogglePanel, onReloadRenderer, onCloseFixture, onFixtureStateChange, setNavWidth, setPanelWidth, welcomeDismissed, onDismissWelcome, onShowWelcome, }) {
11
12
  const navDrag = useDrag({
12
13
  value: navWidth,
13
14
  onChange: setNavWidth,
@@ -17,29 +18,27 @@ export function Root({ storageCacheReady, fixtureItems, selectedFixtureId, rende
17
18
  reverse: true,
18
19
  onChange: setPanelWidth,
19
20
  });
20
- if (!storageCacheReady) {
21
- return React.createElement(Container, null);
22
- }
23
- const showNav = rendererConnected && (navOpen || !validFixtureSelected);
21
+ const showNav = navOpen || !selectedFixtureId;
24
22
  const dragging = navDrag.dragging || panelDrag.dragging;
25
23
  // z-indexes are set here on purpose to show the layer hierarchy at a glance
26
24
  return (React.createElement(Container, { dragging: dragging },
27
25
  showNav && (React.createElement(Draggable, { style: { width: navWidth, zIndex: 2 } },
28
- React.createElement(Nav, null, rendererConnected && (React.createElement(NavRowSlot, { slotProps: { onCloseNav: onToggleNav }, plugOrder: navRowOrder }))),
26
+ React.createElement(Nav, null,
27
+ React.createElement(NavRowSlot, { slotProps: { onCloseNav: onToggleNav }, plugOrder: navRowOrder })),
29
28
  navDrag.dragging && React.createElement(DragOverlay, null),
30
29
  React.createElement(NavDragHandle, { ref: navDrag.dragElRef }))),
31
30
  React.createElement(MainContainer, { key: "main", style: { zIndex: 1 } },
32
- !validFixtureSelected && (React.createElement(GlobalHeader, { selectedFixtureId: selectedFixtureId, rendererConnected: rendererConnected, validFixtureSelected: validFixtureSelected, globalActionOrder: globalActionOrder })),
31
+ !selectedFixtureId && (React.createElement(GlobalHeader, { rendererConnected: rendererConnected, globalActionOrder: globalActionOrder })),
33
32
  React.createElement(RendererContainer, { key: "rendererContainer" },
34
- selectedFixtureId && validFixtureSelected && (React.createElement(RendererHeader, { fixtureItems: fixtureItems, fixtureId: selectedFixtureId, navOpen: navOpen, panelOpen: panelOpen, fixtureActionOrder: fixtureActionOrder, rendererActionOrder: rendererActionOrder, onOpenNav: onToggleNav, onTogglePanel: onTogglePanel, onFixtureSelect: onFixtureSelect, onClose: onFixtureClose })),
33
+ selectedFixtureId && (React.createElement(RendererHeader, { fixtureItems: fixtureItems, fixtureId: selectedFixtureId, navOpen: navOpen, panelOpen: panelOpen, fixtureActionOrder: fixtureActionOrder, rendererActionOrder: rendererActionOrder, onOpenNav: onToggleNav, onTogglePanel: onTogglePanel, onReloadRenderer: onReloadRenderer, onClose: onCloseFixture })),
35
34
  React.createElement(RendererBody, { key: "rendererBody" },
36
35
  React.createElement(Slot, { name: "rendererPreview" }),
37
36
  dragging && React.createElement(DragOverlay, null),
38
- panelOpen && selectedFixtureId && (React.createElement(ControlPanelContainer, { style: { width: panelWidth, zIndex: 3 } },
37
+ selectedFixtureId && panelOpen && (React.createElement(ControlPanelContainer, { style: { width: panelWidth, zIndex: 3 } },
39
38
  React.createElement(SidePanel, { fixtureId: selectedFixtureId, fixtureState: fixtureState, sidePanelRowOrder: sidePanelRowOrder, onFixtureStateChange: onFixtureStateChange }),
40
39
  panelDrag.dragging && React.createElement(DragOverlay, null),
41
40
  React.createElement(PanelDragHandle, { ref: panelDrag.dragElRef })))),
42
- React.createElement(Slot, { name: "contentOverlay" }))),
41
+ !selectedFixtureId && (React.createElement(HomeOverlay, { welcomeDismissed: welcomeDismissed, onDismissWelcome: onDismissWelcome, onShowWelcome: onShowWelcome })))),
43
42
  React.createElement("div", { style: { zIndex: 4 } },
44
43
  React.createElement(ArraySlot, { name: "global", plugOrder: globalOrder }))));
45
44
  }
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  type Props = {
2
3
  disabled?: boolean;
3
4
  selected: boolean;
@@ -1,11 +1,12 @@
1
1
  import React from 'react';
2
2
  import { createFixtureTree, flattenFixtureTree } from 'react-cosmos-core';
3
3
  import { createPlugin } from 'react-plugin';
4
+ import { useWelcomeDismiss } from './HomeOverlay/welcomeDismiss.js';
5
+ import { Root } from './Root.js';
4
6
  import { isNavOpen, openNav } from './navOpen.js';
5
7
  import { getNavWidthApi } from './navWidth.js';
6
8
  import { isPanelOpen, openPanel } from './panelOpen.js';
7
9
  import { getPanelWidthApi } from './panelWidth.js';
8
- import { Root } from './Root.js';
9
10
  const { onLoad, plug, register } = createPlugin({
10
11
  name: 'root',
11
12
  defaultConfig: {
@@ -41,14 +42,14 @@ plug('root', ({ pluginContext }) => {
41
42
  const fixtureItems = useFixtureItems(pluginContext);
42
43
  const onToggleNav = useOpenNav(pluginContext);
43
44
  const onTogglePanel = useOpenPanel(pluginContext);
45
+ const welcomeDismiss = useWelcomeDismiss(pluginContext);
44
46
  const { storageCacheReady } = getState();
45
- if (!storageCacheReady) {
46
- return (React.createElement(Root, { storageCacheReady: false, fixtureItems: [], selectedFixtureId: null, rendererConnected: false, validFixtureSelected: false, fixtureState: {}, navOpen: false, panelOpen: false, navWidth: 0, panelWidth: 0, sidePanelRowOrder: [], globalActionOrder: [], globalOrder: [], navRowOrder: [], fixtureActionOrder: [], rendererActionOrder: [], onToggleNav: () => { }, onTogglePanel: () => { }, onFixtureSelect: () => { }, onFixtureClose: () => { }, onFixtureStateChange: () => { }, setNavWidth: () => { }, setPanelWidth: () => { } }));
47
- }
47
+ if (!storageCacheReady)
48
+ return null;
48
49
  const { navWidth, setNavWidth } = getNavWidthApi(pluginContext);
49
50
  const { panelWidth, setPanelWidth } = getPanelWidthApi(pluginContext);
50
51
  const { sidePanelRowOrder, globalActionOrder, globalOrder, navRowOrder, fixtureActionOrder, rendererActionOrder, } = getConfig();
51
- return (React.createElement(Root, { storageCacheReady: true, fixtureItems: fixtureItems, selectedFixtureId: router.getSelectedFixtureId(), rendererConnected: rendererCore.isRendererConnected(), validFixtureSelected: rendererCore.isValidFixtureSelected(), fixtureState: rendererCore.getFixtureState(), navOpen: isNavOpen(pluginContext), panelOpen: isPanelOpen(pluginContext), navWidth: navWidth, panelWidth: panelWidth, sidePanelRowOrder: sidePanelRowOrder, globalActionOrder: globalActionOrder, globalOrder: globalOrder, navRowOrder: navRowOrder, fixtureActionOrder: fixtureActionOrder, rendererActionOrder: rendererActionOrder, onToggleNav: onToggleNav, onTogglePanel: onTogglePanel, onFixtureSelect: router.selectFixture, onFixtureClose: router.unselectFixture, onFixtureStateChange: rendererCore.setFixtureState, setNavWidth: setNavWidth, setPanelWidth: setPanelWidth }));
52
+ return (React.createElement(Root, { fixtureItems: fixtureItems, selectedFixtureId: router.getSelectedFixtureId(), rendererConnected: rendererCore.isRendererConnected(), fixtureState: rendererCore.getFixtureState(), navOpen: isNavOpen(pluginContext), panelOpen: isPanelOpen(pluginContext), navWidth: navWidth, panelWidth: panelWidth, sidePanelRowOrder: sidePanelRowOrder, globalActionOrder: globalActionOrder, globalOrder: globalOrder, navRowOrder: navRowOrder, fixtureActionOrder: fixtureActionOrder, rendererActionOrder: rendererActionOrder, onToggleNav: onToggleNav, onTogglePanel: onTogglePanel, onReloadRenderer: rendererCore.reloadRenderer, onCloseFixture: router.unselectFixture, onFixtureStateChange: rendererCore.setFixtureState, setNavWidth: setNavWidth, setPanelWidth: setPanelWidth, welcomeDismissed: welcomeDismiss.isWelcomeDismissed(), onDismissWelcome: welcomeDismiss.onDismissWelcome, onShowWelcome: welcomeDismiss.onShowWelcome }));
52
53
  });
53
54
  export { register };
54
55
  if (process.env.NODE_ENV !== 'test')
@@ -1,11 +1,6 @@
1
1
  export const PANEL_OPEN_STORAGE_KEY = 'sidePanelOpen';
2
2
  const PANEL_OPEN_DEFAULT = true;
3
3
  export function isPanelOpen(context) {
4
- const { getMethodsOf } = context;
5
- const rendererCore = getMethodsOf('rendererCore');
6
- if (!rendererCore.isValidFixtureSelected()) {
7
- return false;
8
- }
9
4
  const storage = context.getMethodsOf('storage');
10
5
  const open = storage.getItem(PANEL_OPEN_STORAGE_KEY);
11
6
  return typeof open === 'boolean' ? open : PANEL_OPEN_DEFAULT;
@@ -20,7 +20,7 @@ onLoad(context => {
20
20
  const fixtureChanged = !isEqual(urlParams.fixtureId, fixtureId);
21
21
  setState({ urlParams }, () => {
22
22
  if (fixtureChanged) {
23
- emitFixtureChangeEvent(context);
23
+ emitFixtureChangeEvent(context, true);
24
24
  }
25
25
  });
26
26
  });
@@ -41,16 +41,28 @@ function setUrlParams(context, nextUrlParams) {
41
41
  const { urlParams } = context.getState();
42
42
  const fixtureChanged = !isEqual(nextUrlParams.fixtureId, urlParams.fixtureId);
43
43
  const urlParamsEqual = isEqual(nextUrlParams, urlParams);
44
- context.setState({ urlParams: nextUrlParams }, () => {
45
- // Setting identical url params is considered a "reset" request
46
- if (fixtureChanged || urlParamsEqual) {
47
- emitFixtureChangeEvent(context);
48
- }
49
- if (!urlParamsEqual) {
44
+ if (urlParamsEqual) {
45
+ // Setting identical URL params can be considered a "reset" request, but
46
+ // this will only re-render the fixture if the renderer implements an
47
+ // auto-incrementing render key in its state
48
+ emitFixtureChangeEvent(context, false);
49
+ }
50
+ else {
51
+ context.setState({ urlParams: nextUrlParams }, () => {
50
52
  pushUrlParams(context.getState().urlParams);
51
- }
52
- });
53
+ emitFixtureChangeEvent(context, fixtureChanged);
54
+ });
55
+ }
53
56
  }
54
- function emitFixtureChangeEvent(context) {
55
- context.emit('fixtureChange', getSelectedFixtureId(context));
57
+ function emitFixtureChangeEvent(context, fixtureChanged) {
58
+ const fixtureId = getSelectedFixtureId(context);
59
+ if (!fixtureId) {
60
+ context.emit('fixtureUnselect');
61
+ }
62
+ else if (fixtureChanged) {
63
+ context.emit('fixtureSelect', fixtureId);
64
+ }
65
+ else {
66
+ context.emit('fixtureReselect', fixtureId);
67
+ }
56
68
  }
@@ -1,8 +1,8 @@
1
- import { FixtureId, PlaygroundUrlParams } from 'react-cosmos-core';
1
+ import { FixtureId, PlaygroundParams } from 'react-cosmos-core';
2
2
  export type RouterSpec = {
3
3
  name: 'router';
4
4
  state: {
5
- urlParams: PlaygroundUrlParams;
5
+ urlParams: PlaygroundParams;
6
6
  };
7
7
  methods: {
8
8
  getSelectedFixtureId(): null | FixtureId;
@@ -10,6 +10,8 @@ export type RouterSpec = {
10
10
  unselectFixture(): void;
11
11
  };
12
12
  events: {
13
- fixtureChange(fixtureId: null | FixtureId): void;
13
+ fixtureSelect(fixtureId: FixtureId): void;
14
+ fixtureReselect(fixtureId: FixtureId): void;
15
+ fixtureUnselect(): void;
14
16
  };
15
17
  };
@@ -2,6 +2,6 @@ import { PluginContext } from 'react-plugin';
2
2
  import { TreeExpansion } from '../../shared/treeExpansion.js';
3
3
  import { StandardControlSpec } from './spec.js';
4
4
  export declare function useTreeExpansionStorage(pluginContext: PluginContext<StandardControlSpec>): {
5
- expansion: TreeExpansion;
5
+ expansion: {};
6
6
  setExpansion: (newTreeExpansion: TreeExpansion) => void;
7
7
  };
@@ -1,6 +1,5 @@
1
1
  import './BuildNotifications/index.js';
2
2
  import './ClassStatePanel/index.js';
3
- import './ContentOverlay/index.js';
4
3
  import './ControlPanel/index.js';
5
4
  import './ControlSelect/index.js';
6
5
  import './Core/index.js';
@@ -1,7 +1,6 @@
1
1
  import { enablePlugin } from 'react-plugin';
2
2
  import './BuildNotifications/index.js';
3
3
  import './ClassStatePanel/index.js';
4
- import './ContentOverlay/index.js';
5
4
  import './ControlPanel/index.js';
6
5
  import './ControlSelect/index.js';
7
6
  import './Core/index.js';
@@ -1,3 +1,2 @@
1
1
  import { FixtureId, FixtureTreeNode } from 'react-cosmos-core';
2
- export declare function recordContainsFixtureId(fixtureIds: Record<string, FixtureId>, fixtureId: FixtureId): boolean;
3
- export declare function nodeContainsFixtureId({ data, children }: FixtureTreeNode, fixtureId: FixtureId): boolean;
2
+ export declare function fixtureTreeNodeContainsFixtureId({ data, children }: FixtureTreeNode, fixtureId: FixtureId): boolean;
@@ -1,12 +1,7 @@
1
- import { isEqual } from 'lodash-es';
2
- export function recordContainsFixtureId(fixtureIds, fixtureId) {
3
- return Object.keys(fixtureIds).some(fixtureName => isEqual(fixtureIds[fixtureName], fixtureId));
4
- }
5
- export function nodeContainsFixtureId({ data, children }, fixtureId) {
6
- if (data.type === 'fixture')
7
- return isEqual(data.fixtureId, fixtureId);
8
- if (data.type === 'multiFixture')
9
- return recordContainsFixtureId(data.fixtureIds, fixtureId);
1
+ export function fixtureTreeNodeContainsFixtureId({ data, children }, fixtureId) {
2
+ if (data.type === 'fixture' || data.type === 'multiFixture') {
3
+ return data.path === fixtureId.path;
4
+ }
10
5
  return (children !== undefined &&
11
- Object.keys(children).some(childName => nodeContainsFixtureId(children[childName], fixtureId)));
6
+ Object.keys(children).some(childName => fixtureTreeNodeContainsFixtureId(children[childName], fixtureId)));
12
7
  }
@@ -1,5 +1,6 @@
1
- import { PlaygroundUrlParams } from 'react-cosmos-core';
2
- export declare function getUrlParams(): PlaygroundUrlParams;
3
- export declare function pushUrlParams(urlParams: PlaygroundUrlParams): void;
4
- export declare function subscribeToLocationChanges(userHandler: (urlParams: PlaygroundUrlParams) => unknown): () => void;
5
- export declare function createRelativePlaygroundUrl(urlParams: PlaygroundUrlParams): string;
1
+ import { PlaygroundParams } from 'react-cosmos-core';
2
+ export declare function getUrlParams(): PlaygroundParams;
3
+ export declare function pushUrlParams(urlParams: PlaygroundParams): void;
4
+ export declare function subscribeToLocationChanges(userHandler: (urlParams: PlaygroundParams) => unknown): () => void;
5
+ export declare function createRelativePlaygroundUrl(urlParams: PlaygroundParams): string;
6
+ export declare function createRelativeUrlWithQuery(query: string): string;
@@ -1,9 +1,9 @@
1
- import { parsePlaygroundUrlQuery, stringifyPlaygroundUrlQuery, } from 'react-cosmos-core';
1
+ import { buildPlaygroundQueryString, parsePlaygroundQueryString, } from 'react-cosmos-core';
2
2
  export function getUrlParams() {
3
- return parsePlaygroundUrlQuery(location.search);
3
+ return parsePlaygroundQueryString(location.search);
4
4
  }
5
5
  export function pushUrlParams(urlParams) {
6
- const query = stringifyPlaygroundUrlQuery(urlParams);
6
+ const query = buildPlaygroundQueryString(urlParams);
7
7
  // Refresh page completely when pushState isn't supported
8
8
  if (!history.pushState) {
9
9
  location.search = query;
@@ -22,12 +22,12 @@ export function subscribeToLocationChanges(userHandler) {
22
22
  };
23
23
  }
24
24
  export function createRelativePlaygroundUrl(urlParams) {
25
- const query = stringifyPlaygroundUrlQuery(urlParams);
25
+ const query = buildPlaygroundQueryString(urlParams);
26
26
  return createRelativeUrlWithQuery(query);
27
27
  }
28
- function createRelativeUrlWithQuery(query) {
28
+ export function createRelativeUrlWithQuery(query) {
29
29
  // NOTE: "./" is used to return to the home URL. Passing an empty string
30
30
  // doesn't do anything. And passing "/" doesn't work if Cosmos is not hosted
31
31
  // at root (sub)domain level.
32
- return query.length > 0 ? `?${query}` : './';
32
+ return query || './';
33
33
  }
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import { FixtureStateControls } from 'react-cosmos-core';
2
3
  export type ControlActionSlotProps = {
3
4
  controls: FixtureStateControls;
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import { FixtureState, FixtureStateControl, StateUpdater } from 'react-cosmos-core';
2
3
  export type ControlSlotProps<TControl extends FixtureStateControl> = {
3
4
  controlName: string;
@@ -1,6 +1,7 @@
1
- import { FixtureId } from 'react-cosmos-core';
1
+ /// <reference types="react" />
2
+ import { FlatFixtureTreeItem } from 'react-cosmos-core';
2
3
  export type FixtureActionSlotProps = {
3
- fixtureId: FixtureId;
4
+ fixtureItem: FlatFixtureTreeItem;
4
5
  };
5
6
  type Props = {
6
7
  slotProps: FixtureActionSlotProps;
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  export type NavRowSlotProps = {
2
3
  onCloseNav: () => unknown;
3
4
  };
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import { FixtureId } from 'react-cosmos-core';
2
3
  export type RendererActionSlotProps = {
3
4
  fixtureId: FixtureId;
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import { FixtureId, FixtureState, StateUpdater } from 'react-cosmos-core';
2
3
  export type SidePanelRowSlotProps = {
3
4
  fixtureId: FixtureId;
@@ -30,15 +30,15 @@ export declare function getCoreMethods(): {
30
30
  fixtureFileSuffix: string;
31
31
  };
32
32
  isDevServerOn(): boolean;
33
- getWebRendererUrl(): string | null;
34
33
  };
35
34
  export declare function getRendererCoreMethods(): {
35
+ getRendererUrl(): string | null;
36
36
  getConnectedRendererIds(): string[];
37
37
  getPrimaryRendererId(): string | null;
38
38
  getFixtures(): import("react-cosmos-core").FixtureList;
39
39
  getFixtureState(): import("react-cosmos-core").FixtureState;
40
40
  isRendererConnected(): boolean;
41
- isValidFixtureSelected(): boolean;
41
+ reloadRenderer(): void;
42
42
  setFixtureState(stateUpdater: import("react-cosmos-core").StateUpdater<import("react-cosmos-core").FixtureState>): void;
43
43
  selectPrimaryRenderer(primaryRendererId: string): void;
44
44
  receiveResponse(msg: import("react-cosmos-core").MessageType): void;
@@ -49,7 +49,6 @@ export declare function getNotificationsMethods(): {
49
49
  pushTimedNotification(notification: import("../plugins/Notifications/spec.js").NotificationItem): void;
50
50
  };
51
51
  export declare function getRendererPreviewMethods(): {
52
- getUrlStatus(): import("../plugins/RendererPreview/spec.js").UrlStatus;
53
52
  getRuntimeStatus(): import("../plugins/RendererPreview/spec.js").RuntimeStatus;
54
53
  };
55
54
  export declare function mockStorage(methods?: MethodsOf<StorageSpec>): {
@@ -71,25 +70,25 @@ export declare function mockCore(methods?: MethodsOf<CoreSpec>): {
71
70
  fixtureFileSuffix: string;
72
71
  });
73
72
  isDevServerOn: jest.Mock<any, any, any> | ((context: import("react-plugin").PluginContext<CoreSpec>) => boolean);
74
- getWebRendererUrl: jest.Mock<any, any, any> | ((context: import("react-plugin").PluginContext<CoreSpec>) => string | null);
75
73
  };
76
74
  export declare function mockMessageHandler(methods?: MethodsOf<MessageHandlerSpec>): {
77
75
  postRendererRequest: jest.Mock<any, any, any> | ((context: import("react-plugin").PluginContext<MessageHandlerSpec>, msg: import("react-cosmos-core").MessageType) => unknown);
78
76
  };
79
77
  export declare function mockRendererCore(methods?: MethodsOf<RendererCoreSpec>): {
78
+ getRendererUrl: jest.Mock<any, any, any> | ((context: import("react-plugin").PluginContext<RendererCoreSpec>) => string | null);
80
79
  getConnectedRendererIds: jest.Mock<any, any, any> | ((context: import("react-plugin").PluginContext<RendererCoreSpec>) => string[]);
81
80
  getPrimaryRendererId: jest.Mock<any, any, any> | ((context: import("react-plugin").PluginContext<RendererCoreSpec>) => string | null);
82
81
  getFixtures: jest.Mock<any, any, any> | ((context: import("react-plugin").PluginContext<RendererCoreSpec>) => import("react-cosmos-core").FixtureList);
83
82
  getFixtureState: jest.Mock<any, any, any> | ((context: import("react-plugin").PluginContext<RendererCoreSpec>) => import("react-cosmos-core").FixtureState);
84
83
  isRendererConnected: jest.Mock<any, any, any> | ((context: import("react-plugin").PluginContext<RendererCoreSpec>) => boolean);
85
- isValidFixtureSelected: jest.Mock<any, any, any> | ((context: import("react-plugin").PluginContext<RendererCoreSpec>) => boolean);
84
+ reloadRenderer: jest.Mock<any, any, any> | ((context: import("react-plugin").PluginContext<RendererCoreSpec>) => void);
86
85
  setFixtureState: jest.Mock<any, any, any> | ((context: import("react-plugin").PluginContext<RendererCoreSpec>, stateUpdater: import("react-cosmos-core").StateUpdater<import("react-cosmos-core").FixtureState>) => void);
87
86
  selectPrimaryRenderer: jest.Mock<any, any, any> | ((context: import("react-plugin").PluginContext<RendererCoreSpec>, primaryRendererId: string) => void);
88
87
  receiveResponse: jest.Mock<any, any, any> | ((context: import("react-plugin").PluginContext<RendererCoreSpec>, msg: import("react-cosmos-core").MessageType) => void);
89
88
  };
90
89
  export declare function mockRendererPreview(methods?: MethodsOf<RendererPreviewSpec>): {
91
- getUrlStatus: jest.Mock<any, any, any> | ((context: import("react-plugin").PluginContext<RendererPreviewSpec>) => import("../plugins/RendererPreview/spec.js").UrlStatus);
92
90
  getRuntimeStatus: jest.Mock<any, any, any> | ((context: import("react-plugin").PluginContext<RendererPreviewSpec>) => import("../plugins/RendererPreview/spec.js").RuntimeStatus);
91
+ getUrlStatus: jest.Mock<any, any, any>;
93
92
  };
94
93
  export declare function mockNotifications(methods?: MethodsOf<NotificationsSpec>): {
95
94
  pushStickyNotification: jest.Mock<any, any, any> | ((context: import("react-plugin").PluginContext<NotificationsSpec>, notification: import("../plugins/Notifications/spec.js").NotificationItem) => void);
@@ -103,7 +102,9 @@ export declare function mockFixtureTree(methods?: MethodsOf<FixtureTreeSpec>): {
103
102
  }, fixtureId: import("react-cosmos-core").FixtureId) => unknown);
104
103
  };
105
104
  export declare function onRouter(events?: EventsOf<RouterSpec>): {
106
- fixtureChange: jest.Mock<any, any, any> | import("ui-plugin/dist/types/PluginContextHandlers.js").PluginEventHandler<any, [fixtureId: import("react-cosmos-core").FixtureId | null]>;
105
+ fixtureSelect: jest.Mock<any, any, any> | import("ui-plugin/dist/types/PluginContextHandlers.js").PluginEventHandler<any, [fixtureId: import("react-cosmos-core").FixtureId]>;
106
+ fixtureReselect: jest.Mock<any, any, any> | import("ui-plugin/dist/types/PluginContextHandlers.js").PluginEventHandler<any, [fixtureId: import("react-cosmos-core").FixtureId]>;
107
+ fixtureUnselect: jest.Mock<any, any, any> | import("ui-plugin/dist/types/PluginContextHandlers.js").PluginEventHandler<any, []>;
107
108
  };
108
109
  export declare function onMessageHandler(events?: EventsOf<MessageHandlerSpec>): {
109
110
  serverMessage: jest.Mock<any, any, any> | import("ui-plugin/dist/types/PluginContextHandlers.js").PluginEventHandler<any, [msg: import("react-cosmos-core").MessageType]>;
@@ -54,7 +54,6 @@ export function mockCore(methods = {}) {
54
54
  getProjectId: jest.fn(),
55
55
  getFixtureFileVars: jest.fn(),
56
56
  isDevServerOn: jest.fn(),
57
- getWebRendererUrl: jest.fn(),
58
57
  ...methods,
59
58
  };
60
59
  mockMethodsOf('core', allMethods);
@@ -70,12 +69,13 @@ export function mockMessageHandler(methods = {}) {
70
69
  }
71
70
  export function mockRendererCore(methods = {}) {
72
71
  const allMethods = {
72
+ getRendererUrl: jest.fn(),
73
73
  getConnectedRendererIds: jest.fn(),
74
74
  getPrimaryRendererId: jest.fn(),
75
75
  getFixtures: jest.fn(),
76
76
  getFixtureState: jest.fn(),
77
77
  isRendererConnected: jest.fn(),
78
- isValidFixtureSelected: jest.fn(),
78
+ reloadRenderer: jest.fn(),
79
79
  setFixtureState: jest.fn(),
80
80
  selectPrimaryRenderer: jest.fn(),
81
81
  receiveResponse: jest.fn(),
@@ -113,7 +113,9 @@ export function mockFixtureTree(methods = {}) {
113
113
  }
114
114
  export function onRouter(events = {}) {
115
115
  const allEvents = {
116
- fixtureChange: jest.fn(),
116
+ fixtureSelect: jest.fn(),
117
+ fixtureReselect: jest.fn(),
118
+ fixtureUnselect: jest.fn(),
117
119
  ...events,
118
120
  };
119
121
  on('router', allEvents);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-cosmos-ui",
3
- "version": "6.0.0-alpha.9",
3
+ "version": "6.0.0-beta.2",
4
4
  "description": "React Cosmos UI",
5
5
  "repository": "https://github.com/react-cosmos/react-cosmos/tree/main/packages/react-cosmos-ui",
6
6
  "license": "MIT",
@@ -15,13 +15,13 @@
15
15
  },
16
16
  "dependencies": {
17
17
  "lodash-es": "^4.17.21",
18
- "react-cosmos-core": "^6.0.0-alpha.9"
18
+ "react-cosmos-core": "6.0.0-beta.2"
19
19
  },
20
20
  "devDependencies": {
21
21
  "fuzzaldrin-plus": "^0.6.0",
22
22
  "localforage": "^1.10.0",
23
23
  "react-plugin": "^3.0.0-alpha.4",
24
- "styled-components": "^5.3.8"
24
+ "styled-components": "^5.3.10"
25
25
  },
26
- "gitHead": "b155b223f904f5cc29e2f13ac79ab7c4b302ed2b"
26
+ "gitHead": "f3e3893b0439132e083228f312c62e4379f39762"
27
27
  }
@@ -1,13 +0,0 @@
1
- import { RuntimeStatus, UrlStatus } from '../RendererPreview/shared.js';
2
- type Props = {
3
- fixtureSelected: boolean;
4
- validFixtureSelected: boolean;
5
- rendererConnected: boolean;
6
- rendererPreviewUrlStatus: UrlStatus;
7
- rendererPreviewRuntimeStatus: RuntimeStatus;
8
- welcomeDismissed: boolean;
9
- onDismissWelcome: () => unknown;
10
- onShowWelcome: () => unknown;
11
- };
12
- export declare function ContentOverlay({ fixtureSelected, validFixtureSelected, rendererConnected, rendererPreviewUrlStatus, rendererPreviewRuntimeStatus, welcomeDismissed, onDismissWelcome, onShowWelcome, }: Props): JSX.Element | null;
13
- export {};
@@ -1,34 +0,0 @@
1
- import React from 'react';
2
- import { NoFixtureSelected } from './NoFixtureSelected.js';
3
- import { RendererNotResponding } from './RendererNotResponding.js';
4
- import { ContentContainer, OverlayContainer } from './shared.js';
5
- import { WelcomeCosmos } from './WelcomeCosmos.js';
6
- export function ContentOverlay({ fixtureSelected, validFixtureSelected, rendererConnected, rendererPreviewUrlStatus, rendererPreviewRuntimeStatus, welcomeDismissed, onDismissWelcome, onShowWelcome, }) {
7
- if (rendererPreviewUrlStatus === 'error') {
8
- return (React.createElement(OverlayContainer, { "data-testid": "rendererNotResponding" },
9
- React.createElement(RendererNotResponding, null)));
10
- }
11
- if (validFixtureSelected || rendererPreviewRuntimeStatus === 'error') {
12
- // Usually the content overlay is only hidden when a valid fixture is
13
- // selected. However, when the renderer is in error state, we also hide the
14
- // content overlay to avoid showing a blank screen and to uncover the error
15
- // message.
16
- return null;
17
- }
18
- if (!rendererConnected) {
19
- // Delay "waiting for renderer" state to avoid rapidly changing visual
20
- // states when renderer is already compiled and will respond immediately
21
- return (React.createElement(OverlayContainer, { "data-testid": "waiting" },
22
- React.createElement(ContentContainer, null)));
23
- }
24
- if (fixtureSelected) {
25
- return (React.createElement(OverlayContainer, { "data-testid": "notFound" },
26
- React.createElement(ContentContainer, null)));
27
- }
28
- if (welcomeDismissed) {
29
- return (React.createElement(OverlayContainer, { "data-testid": "blank" },
30
- React.createElement(NoFixtureSelected, { onShowWelcome: onShowWelcome })));
31
- }
32
- return (React.createElement(OverlayContainer, { "data-testid": "welcome" },
33
- React.createElement(WelcomeCosmos, { onDismissWelcome: onDismissWelcome })));
34
- }
@@ -1 +0,0 @@
1
- export declare function RendererNotResponding(): JSX.Element;
@@ -1,109 +0,0 @@
1
- import React from 'react';
2
- import { Slot } from 'react-plugin';
3
- import styled from 'styled-components';
4
- import { ArtificialIntelligenceIllustration } from '../../components/illustrations/ArtificialIntelligence.js';
5
- import { screenGrey3, screenGrey5, screenPrimary2, screenPrimary3, } from '../../style/colors.js';
6
- import { ContentContainer, IllustrationContainer, NoWrap, TextContainer, } from './shared.js';
7
- export function RendererNotResponding() {
8
- return (React.createElement(ContentContainer, null,
9
- React.createElement(TextContainer, null,
10
- React.createElement(Header, null,
11
- "Renderer ",
12
- React.createElement(NoWrap, null, "not responding")),
13
- React.createElement(Paragraph, null, `It's usually one of the following...`),
14
- React.createElement(List, null,
15
- React.createElement("li", null,
16
- React.createElement(No, null, "1"),
17
- React.createElement("span", null,
18
- React.createElement("strong", null, "Please check your terminal for errors."),
19
- React.createElement("br", null),
20
- "Your build might be broken.")),
21
- React.createElement("li", null,
22
- React.createElement(No, null, "2"),
23
- React.createElement("span", null,
24
- React.createElement(Slot, { name: "rendererError" },
25
- "If you use a bundler plugin,",
26
- ' ',
27
- React.createElement("strong", null,
28
- "make sure",
29
- React.createElement("br", null),
30
- "your build is generating an index.html page."))))),
31
- React.createElement(Paragraph, null,
32
- React.createElement(ActionLink, { href: "https://react-cosmos.slack.com/join/shared_invite/zt-g9rsalqq-clCoV7DWttVvzO5FAAmVAw", rel: "noopener noreferrer", target: "_blank" }, "ask for help"))),
33
- React.createElement(IllustrationContainer, null,
34
- React.createElement(ArtificialIntelligenceIllustration, { title: "robot" }))));
35
- }
36
- const Header = styled.h1 `
37
- position: relative;
38
- margin: 0 0 64px 0;
39
- color: ${screenPrimary2};
40
- font-size: 30px;
41
- font-weight: 700;
42
- line-height: 1.2em;
43
- text-transform: uppercase;
44
- letter-spacing: 0.015em;
45
-
46
- ::after {
47
- content: '';
48
- position: absolute;
49
- bottom: -12px;
50
- left: 0;
51
- width: 64px;
52
- height: 3px;
53
- background: ${screenPrimary2};
54
- }
55
- `;
56
- const Paragraph = styled.p `
57
- margin: 16px 0;
58
-
59
- :last-child {
60
- margin-bottom: 0;
61
- }
62
- `;
63
- const List = styled.ul `
64
- margin: 0 0 48px 0;
65
- padding: 0;
66
- list-style: none;
67
-
68
- li {
69
- display: flex;
70
- flex-direction: row;
71
- align-items: flex-start;
72
- margin-bottom: 12px;
73
- }
74
- `;
75
- const No = styled.span `
76
- flex-shrink: 0;
77
- display: flex;
78
- align-items: center;
79
- justify-content: flex-end;
80
- box-sizing: border-box;
81
- width: 32px;
82
- height: 32px;
83
- margin: 6px 16px 0 0;
84
- padding: 0 6px 0 0;
85
- border-radius: 100%;
86
- font-size: 18px;
87
- font-weight: 600;
88
- background: ${screenGrey5};
89
- color: ${screenGrey3};
90
-
91
- ::after {
92
- content: '.';
93
- }
94
- `;
95
- const actionLinkHeight = 36;
96
- const ActionLink = styled.a `
97
- display: inline-block;
98
- height: ${actionLinkHeight}px;
99
- padding: 0 16px;
100
- background: ${screenPrimary3};
101
- color: #fff;
102
- border-radius: 5px;
103
- font-size: 12px;
104
- font-weight: 700;
105
- line-height: ${actionLinkHeight}px;
106
- text-transform: uppercase;
107
- letter-spacing: 0.1em;
108
- text-decoration: none;
109
- `;