react-cosmos-ui 6.0.0-beta.1 → 6.0.0-beta.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 (134) hide show
  1. package/dist/components/BaseSvg.d.ts +1 -1
  2. package/dist/components/Icon.d.ts +2 -2
  3. package/dist/components/Illustration.d.ts +2 -2
  4. package/dist/components/KeyBox.d.ts +2 -2
  5. package/dist/components/SidePanel.d.ts +2 -2
  6. package/dist/components/Space.d.ts +2 -2
  7. package/dist/components/TreeView.d.ts +2 -2
  8. package/dist/components/ValueInputTree/ExpandCollapseValues.d.ts +2 -2
  9. package/dist/components/ValueInputTree/ValueInput/BooleanValueInput.d.ts +2 -2
  10. package/dist/components/ValueInputTree/ValueInput/NullValueInput.d.ts +2 -2
  11. package/dist/components/ValueInputTree/ValueInput/NumberValueInput.d.ts +2 -2
  12. package/dist/components/ValueInputTree/ValueInput/StringValueInput.d.ts +2 -2
  13. package/dist/components/ValueInputTree/ValueInput/UndefinedValueInput.d.ts +2 -2
  14. package/dist/components/ValueInputTree/ValueInput/UnserializableValueInput.d.ts +2 -2
  15. package/dist/components/ValueInputTree/ValueInput/ValueInput.d.ts +2 -2
  16. package/dist/components/ValueInputTree/ValueInputDir.d.ts +4 -3
  17. package/dist/components/ValueInputTree/ValueInputDir.js +2 -6
  18. package/dist/components/ValueInputTree/ValueInputTree.js +17 -2
  19. package/dist/components/ValueInputTree/shared.d.ts +1 -0
  20. package/dist/components/ValueInputTree/valueTree.d.ts +1 -1
  21. package/dist/components/ValueInputTree/valueTree.js +10 -5
  22. package/dist/components/buttons/Button32.d.ts +1 -1
  23. package/dist/components/buttons/Button8.d.ts +1 -1
  24. package/dist/components/buttons/IconButton32.d.ts +1 -1
  25. package/dist/components/buttons/IconButton8.d.ts +1 -1
  26. package/dist/components/buttons/shared.js +4 -1
  27. package/dist/components/icons/index.d.ts +30 -30
  28. package/dist/components/illustrations/ArtificialIntelligence.d.ts +2 -2
  29. package/dist/components/illustrations/Astronaut.d.ts +2 -2
  30. package/dist/components/illustrations/BlankCanvas.d.ts +2 -2
  31. package/dist/components/inputs/NumberInput.d.ts +2 -2
  32. package/dist/components/inputs/Select.d.ts +2 -2
  33. package/dist/cosmos.decorator.d.ts +1 -1
  34. package/dist/index.d.ts +0 -1
  35. package/dist/index.js +0 -1
  36. package/dist/playground.bundle.js +326 -317
  37. package/dist/playground.bundle.js.map +1 -1
  38. package/dist/playground.js +2 -2
  39. package/dist/pluginMocks.d.ts +1 -0
  40. package/dist/pluginMocks.js +1 -0
  41. package/dist/plugins/ClassStatePanel/ClassStatePanel/ComponentClassState.d.ts +6 -5
  42. package/dist/plugins/ClassStatePanel/ClassStatePanel/ComponentClassState.js +8 -8
  43. package/dist/plugins/ClassStatePanel/ClassStatePanel/index.d.ts +4 -3
  44. package/dist/plugins/ClassStatePanel/ClassStatePanel/index.js +5 -5
  45. package/dist/plugins/ClassStatePanel/ClassStatePanel/shared.d.ts +2 -2
  46. package/dist/plugins/ClassStatePanel/ClassStatePanel/shared.js +6 -9
  47. package/dist/plugins/ClassStatePanel/index.js +5 -3
  48. package/dist/plugins/ClassStatePanel/shared.d.ts +2 -0
  49. package/dist/plugins/ControlPanel/ControlPanel.d.ts +6 -5
  50. package/dist/plugins/ControlPanel/ControlPanel.js +3 -3
  51. package/dist/plugins/ControlPanel/index.js +4 -2
  52. package/dist/plugins/ControlPanel/shared.d.ts +2 -0
  53. package/dist/plugins/ControlPanel/shared.js +1 -0
  54. package/dist/plugins/ControlSelect/SelectValueInput.d.ts +5 -5
  55. package/dist/plugins/ControlSelect/index.js +3 -6
  56. package/dist/plugins/FixtureBookmark/BookmarkFixtureButton.d.ts +2 -2
  57. package/dist/plugins/FixtureBookmark/FixtureBookmarks.d.ts +2 -2
  58. package/dist/plugins/FixtureSearch/FixtureSearchHeader.d.ts +2 -2
  59. package/dist/plugins/FixtureSearch/FixtureSearchOverlay.d.ts +2 -2
  60. package/dist/plugins/FixtureSearch/FixtureSearchOverlay.js +10 -4
  61. package/dist/plugins/FixtureSearch/FixtureSearchResult.d.ts +2 -2
  62. package/dist/plugins/FixtureSearch/FixtureSearchShortcuts.d.ts +2 -2
  63. package/dist/plugins/FixtureTree/BlankState.d.ts +2 -2
  64. package/dist/plugins/FixtureTree/FixtureTree/FixtureButton.d.ts +2 -2
  65. package/dist/plugins/FixtureTree/FixtureTree/FixtureDir.d.ts +2 -2
  66. package/dist/plugins/FixtureTree/FixtureTree/FixtureLink.d.ts +2 -2
  67. package/dist/plugins/FixtureTree/FixtureTree/MultiFixtureButton.d.ts +2 -2
  68. package/dist/plugins/FixtureTree/FixtureTree/MultiFixtureChildButton.d.ts +2 -2
  69. package/dist/plugins/FixtureTree/FixtureTreeContainer.d.ts +2 -2
  70. package/dist/plugins/FixtureTree/FixtureTreeHeader.d.ts +2 -2
  71. package/dist/plugins/FullScreenButton/FullScreenButton.d.ts +2 -2
  72. package/dist/plugins/MessageHandler/socket.js +1 -1
  73. package/dist/plugins/Notifications/Notifications.d.ts +2 -2
  74. package/dist/plugins/PluginList/PluginList.d.ts +2 -2
  75. package/dist/plugins/PropsPanel/BlankState.d.ts +2 -2
  76. package/dist/plugins/PropsPanel/PropsPanel/ComponentProps.d.ts +6 -5
  77. package/dist/plugins/PropsPanel/PropsPanel/ComponentProps.js +14 -12
  78. package/dist/plugins/PropsPanel/PropsPanel/index.d.ts +4 -3
  79. package/dist/plugins/PropsPanel/PropsPanel/index.js +5 -5
  80. package/dist/plugins/PropsPanel/PropsPanel/shared.d.ts +2 -2
  81. package/dist/plugins/PropsPanel/PropsPanel/shared.js +6 -9
  82. package/dist/plugins/PropsPanel/index.js +14 -9
  83. package/dist/plugins/PropsPanel/shared.d.ts +2 -0
  84. package/dist/plugins/RemoteRenderer/RemoteButton/index.d.ts +2 -2
  85. package/dist/plugins/RendererCore/index.js +11 -3
  86. package/dist/plugins/RendererCore/onRouterFixtureReselect.js +2 -2
  87. package/dist/plugins/RendererCore/onRouterFixtureSelect.js +2 -2
  88. package/dist/plugins/RendererCore/receiveResponse/rendererReady.js +8 -3
  89. package/dist/plugins/RendererCore/setFixtureState.d.ts +2 -2
  90. package/dist/plugins/RendererCore/setFixtureState.js +5 -4
  91. package/dist/plugins/RendererCore/setGlobalFixtureState.d.ts +2 -0
  92. package/dist/plugins/RendererCore/setGlobalFixtureState.js +15 -0
  93. package/dist/plugins/RendererCore/shared/postRequest.d.ts +1 -1
  94. package/dist/plugins/RendererCore/spec.d.ts +8 -3
  95. package/dist/plugins/RendererPreview/RendererOverlay/RemoteRendererConnected.d.ts +2 -2
  96. package/dist/plugins/RendererPreview/RendererOverlay/RemoteRendererOverlay.d.ts +2 -2
  97. package/dist/plugins/RendererPreview/RendererOverlay/RendererOverlay.d.ts +2 -2
  98. package/dist/plugins/RendererPreview/RendererOverlay/WaitingForRenderer.d.ts +2 -2
  99. package/dist/plugins/RendererPreview/RendererPreview.js +1 -1
  100. package/dist/plugins/ResponsivePreview/ResponsivePreview/ResponsiveHeader.d.ts +4 -3
  101. package/dist/plugins/ResponsivePreview/ResponsivePreview/ResponsivePreview.d.ts +6 -5
  102. package/dist/plugins/ResponsivePreview/ResponsivePreview/style.d.ts +4 -4
  103. package/dist/plugins/ResponsivePreview/ToggleButton/index.d.ts +2 -2
  104. package/dist/plugins/ResponsivePreview/index.js +10 -15
  105. package/dist/plugins/ResponsivePreview/shared.d.ts +3 -6
  106. package/dist/plugins/ResponsivePreview/spec.d.ts +2 -5
  107. package/dist/plugins/Root/GlobalHeader.d.ts +2 -2
  108. package/dist/plugins/Root/HomeOverlay/HomeOverlay.d.ts +2 -2
  109. package/dist/plugins/Root/HomeOverlay/KeyShortcut.d.ts +2 -2
  110. package/dist/plugins/Root/HomeOverlay/NoFixtureSelected.d.ts +2 -2
  111. package/dist/plugins/Root/HomeOverlay/WelcomeCosmos.d.ts +2 -2
  112. package/dist/plugins/Root/Root.d.ts +6 -5
  113. package/dist/plugins/Root/Root.js +2 -2
  114. package/dist/plugins/Root/SidePanel.d.ts +4 -3
  115. package/dist/plugins/Root/SidePanel.js +2 -2
  116. package/dist/plugins/Root/ToggleNavButton.d.ts +2 -2
  117. package/dist/plugins/Root/index.js +1 -1
  118. package/dist/plugins/Root/navOpen.js +1 -1
  119. package/dist/plugins/Root/panelOpen.js +1 -1
  120. package/dist/plugins/Router/index.js +8 -1
  121. package/dist/plugins/Router/spec.d.ts +3 -0
  122. package/dist/plugins/StandardControl/index.js +3 -6
  123. package/dist/slots/ControlActionSlot.d.ts +4 -4
  124. package/dist/slots/ControlSlot.d.ts +5 -5
  125. package/dist/slots/FixtureActionSlot.d.ts +2 -2
  126. package/dist/slots/NavRowSlot.d.ts +2 -2
  127. package/dist/slots/RendererActionSlot.d.ts +2 -2
  128. package/dist/slots/SidePanelRowSlot.d.ts +6 -5
  129. package/dist/slots/ValueInputSlot.d.ts +2 -2
  130. package/dist/testHelpers/pluginMocks.d.ts +8 -4
  131. package/dist/testHelpers/pluginMocks.js +4 -2
  132. package/package.json +8 -8
  133. package/pluginMocks.d.ts +1 -0
  134. package/pluginMocks.js +1 -0
@@ -2,12 +2,12 @@ import React from 'react';
2
2
  import { hasFsValues, sortFsValueGroups, stringifyElementId, } from '../../../components/ValueInputTree/index.js';
3
3
  import { ComponentProps } from './ComponentProps.js';
4
4
  export const PropsPanel = React.memo(function PropsPanel({ fixtureState, fixtureExpansion, onFixtureStateChange, onElementExpansionChange, }) {
5
- if (!fixtureState.props) {
5
+ if (!fixtureState) {
6
6
  return null;
7
7
  }
8
- const propsWithValues = fixtureState.props.filter(hasFsValues);
9
- return (React.createElement(React.Fragment, null, sortFsValueGroups(propsWithValues).map(fsProps => {
10
- const strElementId = stringifyElementId(fsProps.elementId);
11
- return (React.createElement(ComponentProps, { key: strElementId, fsProps: fsProps, fixtureExpansion: fixtureExpansion, onFixtureStateChange: onFixtureStateChange, onElementExpansionChange: onElementExpansionChange }));
8
+ const propsWithValues = fixtureState.filter(hasFsValues);
9
+ return (React.createElement(React.Fragment, null, sortFsValueGroups(propsWithValues).map(fsItem => {
10
+ const strElementId = stringifyElementId(fsItem.elementId);
11
+ return (React.createElement(ComponentProps, { key: strElementId, propsFsItem: fsItem, fixtureExpansion: fixtureExpansion, onFixtureStateChange: onFixtureStateChange, onElementExpansionChange: onElementExpansionChange }));
12
12
  })));
13
13
  });
@@ -1,2 +1,2 @@
1
- import { FixtureElementId, FixtureState, FixtureStateProps, StateUpdater } from 'react-cosmos-core';
2
- export declare function createPropsFsUpdater(elementId: FixtureElementId, cb: (prevFs: FixtureState) => FixtureStateProps[]): StateUpdater<FixtureState>;
1
+ import { FixtureElementId, FixtureStateUpdater, PropsFixtureState } from 'react-cosmos-core';
2
+ export declare function propsFsItemUpdater(elementId: FixtureElementId, cb: FixtureStateUpdater<PropsFixtureState>): FixtureStateUpdater<PropsFixtureState>;
@@ -1,16 +1,13 @@
1
- import { findFixtureStateProps, } from 'react-cosmos-core';
1
+ import { findPropsFixtureStateItem, } from 'react-cosmos-core';
2
2
  import { stringifyElementId } from '../../../components/ValueInputTree/index.js';
3
- export function createPropsFsUpdater(elementId, cb) {
3
+ export function propsFsItemUpdater(elementId, cb) {
4
4
  return prevFs => {
5
- const fsProps = findFixtureStateProps(prevFs, elementId);
6
- if (!fsProps) {
5
+ const fsItem = findPropsFixtureStateItem(prevFs, elementId);
6
+ if (!fsItem) {
7
7
  const elId = stringifyElementId(elementId);
8
8
  console.warn(`Trying to update missing element with ID: ${elId}`);
9
- return prevFs;
9
+ return prevFs ?? [];
10
10
  }
11
- return {
12
- ...prevFs,
13
- props: cb(prevFs),
14
- };
11
+ return cb(prevFs);
15
12
  };
16
13
  }
@@ -1,15 +1,17 @@
1
- import React from 'react';
1
+ import React, { useCallback } from 'react';
2
2
  import { createPlugin } from 'react-plugin';
3
3
  import { getFixtureExpansion, hasFsValues, updateElementExpansion, } from '../../components/ValueInputTree/index.js';
4
4
  import { BlankState } from './BlankState.js';
5
5
  import { PropsPanel } from './PropsPanel/index.js';
6
- import { PROPS_TREE_EXPANSION_STORAGE_KEY } from './shared.js';
6
+ import { PROPS_TREE_EXPANSION_STORAGE_KEY, } from './shared.js';
7
7
  const { namedPlug, register } = createPlugin({
8
8
  name: 'propsPanel',
9
9
  });
10
10
  namedPlug('sidePanelRow', 'props', ({ pluginContext, slotProps }) => {
11
- const { fixtureId, fixtureState, onFixtureStateChange } = slotProps;
11
+ const { fixtureId, getFixtureState, setFixtureState } = slotProps;
12
12
  const { fixtureExpansion, onElementExpansionChange } = useFixtureExpansion(pluginContext, fixtureId);
13
+ const fixtureState = getFixtureState('props');
14
+ const onFixtureStateChange = useCallback(change => setFixtureState('props', change), [setFixtureState]);
13
15
  return (React.createElement(PropsPanel, { fixtureState: fixtureState, fixtureExpansion: fixtureExpansion, onFixtureStateChange: onFixtureStateChange, onElementExpansionChange: onElementExpansionChange }));
14
16
  });
15
17
  // WARNING: This plug has to be aware of all control types and only show up
@@ -17,8 +19,8 @@ namedPlug('sidePanelRow', 'props', ({ pluginContext, slotProps }) => {
17
19
  // TODO: Replace this with a more generic blank state (controls in general not
18
20
  // just props)
19
21
  namedPlug('sidePanelRow', 'blankState', ({ slotProps }) => {
20
- const { fixtureState } = slotProps;
21
- return shouldShowBlankState(fixtureState) ? React.createElement(BlankState, null) : null;
22
+ const { getFixtureState } = slotProps;
23
+ return shouldShowBlankState(getFixtureState) ? React.createElement(BlankState, null) : null;
22
24
  });
23
25
  export { register };
24
26
  if (process.env.NODE_ENV !== 'test')
@@ -38,14 +40,17 @@ function useFixtureExpansion(context, fixtureId) {
38
40
  onElementExpansionChange,
39
41
  };
40
42
  }
41
- function shouldShowBlankState(fixtureState) {
42
- const hasProps = fixtureState.props && fixtureState.props.some(hasFsValues);
43
+ function shouldShowBlankState(getFixtureState) {
44
+ const props = getFixtureState('props');
45
+ const hasProps = props && props.some(hasFsValues);
43
46
  if (hasProps)
44
47
  return false;
45
- const hasClassState = fixtureState.classState && fixtureState.classState.some(hasFsValues);
48
+ const classState = getFixtureState('classState');
49
+ const hasClassState = classState && classState.some(hasFsValues);
46
50
  if (hasClassState)
47
51
  return false;
48
- const hasControls = fixtureState.controls && Object.keys(fixtureState.controls).length > 0;
52
+ const controls = getFixtureState('controls');
53
+ const hasControls = controls && Object.keys(controls).length > 0;
49
54
  if (hasControls)
50
55
  return false;
51
56
  return true;
@@ -1 +1,3 @@
1
+ import { FixtureStateUpdater, PropsFixtureState } from 'react-cosmos-core';
2
+ export type SetPropsFixtureState = (updater: FixtureStateUpdater<PropsFixtureState>) => void;
1
3
  export declare const PROPS_TREE_EXPANSION_STORAGE_KEY = "propsTreeExpansion";
@@ -1,9 +1,9 @@
1
- /// <reference types="react" />
1
+ import React from 'react';
2
2
  import { NotificationItem } from '../../Notifications/spec.js';
3
3
  type Props = {
4
4
  devServerOn: boolean;
5
5
  rendererUrl: null | string;
6
6
  pushNotification: (notification: NotificationItem) => unknown;
7
7
  };
8
- export declare function RemoteButton({ devServerOn, rendererUrl, pushNotification, }: Props): JSX.Element | null;
8
+ export declare function RemoteButton({ devServerOn, rendererUrl, pushNotification, }: Props): React.JSX.Element | null;
9
9
  export {};
@@ -1,3 +1,4 @@
1
+ import { fixtureStateByName } from 'react-cosmos-core';
1
2
  import { createPlugin } from 'react-plugin';
2
3
  import { onRouterFixtureReselect } from './onRouterFixtureReselect.js';
3
4
  import { onRouterFixtureSelect } from './onRouterFixtureSelect.js';
@@ -5,6 +6,7 @@ import { onRouterFixtureUnselect } from './onRouterFixtureUnselect.js';
5
6
  import { receiveResponse } from './receiveResponse/index.js';
6
7
  import { reloadRenderer } from './reloadRenderer.js';
7
8
  import { setFixtureState } from './setFixtureState.js';
9
+ import { setGlobalFixtureState } from './setGlobalFixtureState.js';
8
10
  const { on, register, onLoad } = createPlugin({
9
11
  name: 'rendererCore',
10
12
  defaultConfig: {
@@ -16,18 +18,21 @@ const { on, register, onLoad } = createPlugin({
16
18
  primaryRendererId: null,
17
19
  fixtures: {},
18
20
  fixtureState: {},
21
+ globalFixtureState: {},
19
22
  },
20
23
  methods: {
21
24
  getRendererUrl,
22
25
  getConnectedRendererIds,
23
26
  getPrimaryRendererId,
24
27
  getFixtures,
25
- getFixtureState,
26
28
  isRendererConnected,
27
29
  reloadRenderer,
28
- setFixtureState,
29
30
  selectPrimaryRenderer,
30
31
  receiveResponse,
32
+ getAllFixtureState,
33
+ getFixtureState,
34
+ setFixtureState,
35
+ setGlobalFixtureState,
31
36
  },
32
37
  });
33
38
  onLoad(({ getConfig, setState }) => {
@@ -54,9 +59,12 @@ function getPrimaryRendererId({ getState }) {
54
59
  function getFixtures({ getState }) {
55
60
  return getState().fixtures;
56
61
  }
57
- function getFixtureState({ getState }) {
62
+ function getAllFixtureState({ getState }) {
58
63
  return getState().fixtureState;
59
64
  }
65
+ function getFixtureState({ getState }, name) {
66
+ return fixtureStateByName(getState().fixtureState, name);
67
+ }
60
68
  function isRendererConnected({ getState }) {
61
69
  return getState().connectedRendererIds.length > 0;
62
70
  }
@@ -1,7 +1,7 @@
1
1
  import { postSelectFixtureRequest } from './shared/postRequest.js';
2
2
  export function onRouterFixtureReselect(context, fixtureId) {
3
- const { connectedRendererIds } = context.getState();
3
+ const { connectedRendererIds, globalFixtureState } = context.getState();
4
4
  connectedRendererIds.forEach(rendererId => {
5
- postSelectFixtureRequest(context, rendererId, fixtureId, {});
5
+ postSelectFixtureRequest(context, rendererId, fixtureId, globalFixtureState);
6
6
  });
7
7
  }
@@ -1,9 +1,9 @@
1
1
  import { postSelectFixtureRequest } from './shared/postRequest.js';
2
2
  export function onRouterFixtureSelect(context, fixtureId) {
3
3
  context.setState(prevState => ({ ...prevState, fixtureState: {} }), () => {
4
- const { connectedRendererIds } = context.getState();
4
+ const { connectedRendererIds, globalFixtureState } = context.getState();
5
5
  connectedRendererIds.forEach(rendererId => {
6
- postSelectFixtureRequest(context, rendererId, fixtureId, {});
6
+ postSelectFixtureRequest(context, rendererId, fixtureId, globalFixtureState);
7
7
  });
8
8
  });
9
9
  }
@@ -1,8 +1,8 @@
1
1
  import { isEqual } from 'lodash-es';
2
- import { postSelectFixtureRequest } from '../shared/postRequest.js';
2
+ import { postSelectFixtureRequest, postSetFixtureStateRequest, } from '../shared/postRequest.js';
3
3
  export function receiveRendererReadyResponse(context, { payload }) {
4
4
  const { rendererId } = payload;
5
- const { connectedRendererIds: prevRendererIds } = context.getState();
5
+ const { connectedRendererIds: prevRendererIds, globalFixtureState } = context.getState();
6
6
  context.setState(stateUpdater, afterStateChanged);
7
7
  function stateUpdater(prevState) {
8
8
  // The first announced renderer becomes the primary one
@@ -12,7 +12,7 @@ export function receiveRendererReadyResponse(context, { payload }) {
12
12
  ...prevState,
13
13
  connectedRendererIds: addToSet(connectedRendererIds, rendererId),
14
14
  primaryRendererId,
15
- fixtureState: rendererId === primaryRendererId ? {} : fixtureState,
15
+ fixtureState: rendererId === primaryRendererId ? globalFixtureState : fixtureState,
16
16
  };
17
17
  }
18
18
  function afterStateChanged() {
@@ -23,6 +23,11 @@ export function receiveRendererReadyResponse(context, { payload }) {
23
23
  const { fixtureState } = context.getState();
24
24
  postSelectFixtureRequest(context, rendererId, routerFixtureId, fixtureState);
25
25
  }
26
+ else if (rendererFixtureId) {
27
+ if (Object.keys(globalFixtureState).length > 0) {
28
+ postSetFixtureStateRequest(context, rendererId, rendererFixtureId, globalFixtureState);
29
+ }
30
+ }
26
31
  // Notify about connected renderers that weren't connected before
27
32
  if (!prevRendererIds.includes(rendererId)) {
28
33
  notifyRendererConnection(context, rendererId);
@@ -1,3 +1,3 @@
1
- import { FixtureState, StateUpdater } from 'react-cosmos-core';
1
+ import { FixtureStateChange } from 'react-cosmos-core';
2
2
  import { RendererCoreContext } from './shared/index.js';
3
- export declare function setFixtureState(context: RendererCoreContext, stateUpdater: StateUpdater<FixtureState>): void;
3
+ export declare function setFixtureState(context: RendererCoreContext, name: string, change: FixtureStateChange<unknown>): void;
@@ -1,18 +1,19 @@
1
+ import { updateFixtureState, } from 'react-cosmos-core';
1
2
  import { postSetFixtureStateRequest } from './shared/postRequest.js';
2
3
  import { getSelectedFixtureId } from './shared/router.js';
3
- export function setFixtureState(context, stateUpdater) {
4
+ export function setFixtureState(context, name, change) {
4
5
  const fixtureId = getSelectedFixtureId(context);
5
6
  if (!fixtureId) {
6
7
  console.warn('[Renderer] Trying to set fixture state with no fixture selected');
7
8
  return;
8
9
  }
9
- context.setState(change, () => {
10
+ context.setState(stateUpdater, () => {
10
11
  postRendererRequest(fixtureId);
11
12
  });
12
- function change(prevState) {
13
+ function stateUpdater(prevState) {
13
14
  return {
14
15
  ...prevState,
15
- fixtureState: stateUpdater(prevState.fixtureState),
16
+ fixtureState: updateFixtureState(prevState.fixtureState, name, change),
16
17
  };
17
18
  }
18
19
  function postRendererRequest(selectedFixtureId) {
@@ -0,0 +1,2 @@
1
+ import { RendererCoreContext } from './shared/index.js';
2
+ export declare function setGlobalFixtureState(context: RendererCoreContext, name: string, state: unknown): void;
@@ -0,0 +1,15 @@
1
+ import { setFixtureState } from './setFixtureState.js';
2
+ import { getSelectedFixtureId } from './shared/router.js';
3
+ export function setGlobalFixtureState(context, name, state) {
4
+ context.setState(prevState => ({
5
+ ...prevState,
6
+ globalFixtureState: {
7
+ ...prevState.globalFixtureState,
8
+ [name]: state,
9
+ },
10
+ }));
11
+ const fixtureId = getSelectedFixtureId(context);
12
+ if (fixtureId) {
13
+ setFixtureState(context, name, state);
14
+ }
15
+ }
@@ -1,5 +1,5 @@
1
1
  import { FixtureId, FixtureState, RendererId } from 'react-cosmos-core';
2
- import { RendererCoreContext } from '../shared/index.js';
2
+ import { RendererCoreContext } from './index.js';
3
3
  export declare function postReloadRendererRequest(context: RendererCoreContext, rendererId: RendererId): void;
4
4
  export declare function postSelectFixtureRequest(context: RendererCoreContext, rendererId: RendererId, fixtureId: FixtureId, fixtureState: FixtureState): void;
5
5
  export declare function postUnselectFixtureRequest(context: RendererCoreContext, rendererId: RendererId): void;
@@ -1,4 +1,6 @@
1
- import { FixtureList, FixtureState, MessageType, RendererId, StateUpdater } from 'react-cosmos-core';
1
+ import { FixtureList, FixtureState, FixtureStateChange, MessageType, RendererId } from 'react-cosmos-core';
2
+ export type GetFixtureState = <T>(name: string) => T | undefined;
3
+ export type SetFixtureStateByName = <T>(name: string, change: FixtureStateChange<T>) => void;
2
4
  export type RendererCoreSpec = {
3
5
  name: 'rendererCore';
4
6
  config: {
@@ -10,18 +12,21 @@ export type RendererCoreSpec = {
10
12
  primaryRendererId: null | RendererId;
11
13
  fixtures: FixtureList;
12
14
  fixtureState: FixtureState;
15
+ globalFixtureState: FixtureState;
13
16
  };
14
17
  methods: {
15
18
  getRendererUrl(): null | string;
16
19
  getConnectedRendererIds(): RendererId[];
17
20
  getPrimaryRendererId(): null | RendererId;
18
21
  getFixtures(): FixtureList;
19
- getFixtureState(): FixtureState;
20
22
  isRendererConnected(): boolean;
21
23
  reloadRenderer(): void;
22
- setFixtureState(stateUpdater: StateUpdater<FixtureState>): void;
23
24
  selectPrimaryRenderer(primaryRendererId: RendererId): void;
24
25
  receiveResponse(msg: MessageType): void;
26
+ getAllFixtureState(): FixtureState;
27
+ getFixtureState: GetFixtureState;
28
+ setFixtureState: SetFixtureStateByName;
29
+ setGlobalFixtureState<T>(name: string, state: T): void;
25
30
  };
26
31
  events: {
27
32
  request(msg: MessageType): void;
@@ -1,2 +1,2 @@
1
- /// <reference types="react" />
2
- export declare function RemoteRendererConnected(): JSX.Element;
1
+ import React from 'react';
2
+ export declare function RemoteRendererConnected(): React.JSX.Element;
@@ -1,6 +1,6 @@
1
- /// <reference types="react" />
1
+ import React from 'react';
2
2
  type Props = {
3
3
  rendererConnected: boolean;
4
4
  };
5
- export declare function RemoteRendererOverlay({ rendererConnected }: Props): JSX.Element;
5
+ export declare function RemoteRendererOverlay({ rendererConnected }: Props): React.JSX.Element;
6
6
  export {};
@@ -1,7 +1,7 @@
1
- /// <reference types="react" />
1
+ import React from 'react';
2
2
  import { RuntimeStatus } from '../spec.js';
3
3
  type Props = {
4
4
  runtimeStatus: RuntimeStatus;
5
5
  };
6
- export declare function RendererOverlay({ runtimeStatus }: Props): JSX.Element | null;
6
+ export declare function RendererOverlay({ runtimeStatus }: Props): React.JSX.Element | null;
7
7
  export {};
@@ -1,2 +1,2 @@
1
- /// <reference types="react" />
2
- export declare function WaitingForRenderer(): JSX.Element;
1
+ import React from 'react';
2
+ export declare function WaitingForRenderer(): React.JSX.Element;
@@ -12,7 +12,7 @@ export const RendererPreview = React.memo(function RendererPreview({ rendererUrl
12
12
  }
13
13
  return (React.createElement(Slot, { name: "rendererPreviewOuter" },
14
14
  React.createElement(Container, null,
15
- React.createElement(Iframe, { "data-testid": "previewIframe", ref: onIframeRef, src: createRendererUrl(rendererUrl), frameBorder: 0, allow: "clipboard-write *" }),
15
+ React.createElement(Iframe, { "data-testid": "previewIframe", ref: onIframeRef, src: createRendererUrl(rendererUrl), frameBorder: 0, allow: "clipboard-write *; fullscreen *;" }),
16
16
  React.createElement(RendererOverlay, { runtimeStatus: runtimeStatus }))));
17
17
  });
18
18
  const Container = styled.div `
@@ -1,11 +1,12 @@
1
1
  import React from 'react';
2
- import { ResponsiveDevice, ResponsiveViewport } from '../spec.js';
2
+ import { Viewport } from 'react-cosmos-core';
3
+ import { ResponsiveDevice } from '../spec.js';
3
4
  type Props = {
4
5
  devices: ResponsiveDevice[];
5
- selectedViewport: ResponsiveViewport;
6
+ selectedViewport: Viewport;
6
7
  scaleFactor: number;
7
8
  scaled: boolean;
8
- selectViewport: (viewport: ResponsiveViewport) => unknown;
9
+ selectViewport: (viewport: Viewport) => unknown;
9
10
  toggleScale: () => unknown;
10
11
  };
11
12
  export declare const ResponsiveHeader: React.NamedExoticComponent<Props>;
@@ -1,13 +1,14 @@
1
- import { Dispatch, ReactNode, SetStateAction } from 'react';
2
- import { ResponsiveDevice, ResponsiveViewport } from '../spec.js';
1
+ import React, { Dispatch, ReactNode, SetStateAction } from 'react';
2
+ import { Viewport } from 'react-cosmos-core';
3
+ import { ResponsiveDevice } from '../spec.js';
3
4
  type Props = {
4
5
  children?: ReactNode;
5
6
  devices: ResponsiveDevice[];
6
7
  enabled: boolean;
7
- viewport: ResponsiveViewport;
8
+ viewport: Viewport;
8
9
  scaled: boolean;
9
- setViewport: Dispatch<SetStateAction<ResponsiveViewport>>;
10
+ setViewport: Dispatch<SetStateAction<Viewport>>;
10
11
  setScaled: (scaled: boolean) => unknown;
11
12
  };
12
- export declare function ResponsivePreview({ children, devices, enabled, viewport, scaled, setViewport, setScaled, }: Props): JSX.Element;
13
+ export declare function ResponsivePreview({ children, devices, enabled, viewport, scaled, setViewport, setScaled, }: Props): React.JSX.Element;
13
14
  export {};
@@ -1,4 +1,4 @@
1
- import { ResponsiveViewport } from '../spec.js';
1
+ import { Viewport } from 'react-cosmos-core';
2
2
  export declare const responsivePreviewPadding: {
3
3
  top: number;
4
4
  bottom: number;
@@ -11,8 +11,8 @@ export declare const stretchStyle: {
11
11
  flex: number;
12
12
  };
13
13
  export declare function getStyles({ container, viewport, scaled, }: {
14
- container: ResponsiveViewport;
15
- viewport: ResponsiveViewport;
14
+ container: Viewport;
15
+ viewport: Viewport;
16
16
  scaled: boolean;
17
17
  }): {
18
18
  maskContainerStyle: {
@@ -42,4 +42,4 @@ export declare function getStyles({ container, viewport, scaled, }: {
42
42
  transform: string;
43
43
  };
44
44
  };
45
- export declare function getViewportScaleFactor(viewport: ResponsiveViewport, container: ResponsiveViewport): number;
45
+ export declare function getViewportScaleFactor(viewport: Viewport, container: Viewport): number;
@@ -1,7 +1,7 @@
1
- /// <reference types="react" />
1
+ import React from 'react';
2
2
  type Props = {
3
3
  selected: boolean;
4
4
  onToggle: () => unknown;
5
5
  };
6
- export declare function ToggleButton({ selected, onToggle }: Props): JSX.Element;
6
+ export declare function ToggleButton({ selected, onToggle }: Props): React.JSX.Element;
7
7
  export {};
@@ -27,11 +27,11 @@ namedPlug('rendererAction', 'responsivePreview', ({ pluginContext }) => {
27
27
  return (React.createElement(ToggleButton, { selected: enabled, onToggle: () => {
28
28
  if (enabled) {
29
29
  setViewportState(pluginContext, { ...viewportState, enabled: false });
30
- setFixtureStateViewport(pluginContext, null);
30
+ setViewportFixtureState(pluginContext, null);
31
31
  }
32
32
  else {
33
33
  setViewportState(pluginContext, { ...viewportState, enabled: true });
34
- setFixtureStateViewport(pluginContext, viewport);
34
+ setViewportFixtureState(pluginContext, viewport);
35
35
  }
36
36
  } }));
37
37
  });
@@ -40,12 +40,10 @@ if (process.env.NODE_ENV !== 'test')
40
40
  register();
41
41
  function useViewportChange(context) {
42
42
  const viewportState = getViewportState(context);
43
- return React.useCallback((viewportChange) => {
44
- const viewport = typeof viewportChange === 'function'
45
- ? viewportChange(viewportState.viewport)
46
- : viewportChange;
43
+ return React.useCallback((change) => {
44
+ const viewport = typeof change === 'function' ? change(viewportState.viewport) : change;
47
45
  setViewportState(context, { ...viewportState, enabled: true, viewport });
48
- setFixtureStateViewport(context, viewport);
46
+ setViewportFixtureState(context, viewport);
49
47
  }, [context, viewportState]);
50
48
  }
51
49
  function useScaledChange(context) {
@@ -58,9 +56,9 @@ function getViewportState(context) {
58
56
  const viewportState = storage.getItem(VIEWPORT_STORAGE_KEY) ||
59
57
  DEFAULT_VIEWPORT_STATE;
60
58
  const rendererCore = getMethodsOf('rendererCore');
61
- const fixtureState = rendererCore.getFixtureState();
62
- return fixtureState.viewport
63
- ? { ...viewportState, enabled: true, viewport: fixtureState.viewport }
59
+ const viewport = rendererCore.getFixtureState('viewport');
60
+ return viewport
61
+ ? { ...viewportState, enabled: true, viewport }
64
62
  : viewportState;
65
63
  }
66
64
  function setViewportState(context, viewportState) {
@@ -68,11 +66,8 @@ function setViewportState(context, viewportState) {
68
66
  const storage = getMethodsOf('storage');
69
67
  storage.setItem(VIEWPORT_STORAGE_KEY, viewportState);
70
68
  }
71
- function setFixtureStateViewport(context, viewport) {
69
+ function setViewportFixtureState(context, viewport) {
72
70
  const { getMethodsOf } = context;
73
71
  const rendererCore = getMethodsOf('rendererCore');
74
- rendererCore.setFixtureState(fixtureState => ({
75
- ...fixtureState,
76
- viewport,
77
- }));
72
+ rendererCore.setFixtureState('viewport', viewport);
78
73
  }
@@ -1,16 +1,13 @@
1
- import { FixtureState } from 'react-cosmos-core';
1
+ import { Viewport } from 'react-cosmos-core';
2
2
  import { PluginContext } from 'react-plugin';
3
3
  import { StorageSpec } from '../Storage/spec.js';
4
- import { ResponsivePreviewSpec, ResponsiveViewport } from './spec.js';
4
+ import { ResponsivePreviewSpec } from './spec.js';
5
5
  export type ResponsivePreviewContext = PluginContext<ResponsivePreviewSpec>;
6
6
  export type StorageMethods = StorageSpec['methods'];
7
- export type FixtureStateWithViewport = FixtureState & {
8
- viewport?: ResponsiveViewport;
9
- };
10
7
  export type ViewportState = {
11
8
  enabled: boolean;
12
9
  scaled: boolean;
13
- viewport: ResponsiveViewport;
10
+ viewport: Viewport;
14
11
  };
15
12
  export declare const DEFAULT_DEVICES: {
16
13
  label: string;
@@ -1,8 +1,5 @@
1
- export type ResponsiveViewport = {
2
- width: number;
3
- height: number;
4
- };
5
- export type ResponsiveDevice = ResponsiveViewport & {
1
+ import { Viewport } from 'react-cosmos-core';
2
+ export type ResponsiveDevice = Viewport & {
6
3
  label: string;
7
4
  };
8
5
  export type ResponsivePreviewSpec = {
@@ -1,7 +1,7 @@
1
- /// <reference types="react" />
1
+ import React from 'react';
2
2
  type Props = {
3
3
  rendererConnected: boolean;
4
4
  globalActionOrder: string[];
5
5
  };
6
- export declare function GlobalHeader({ rendererConnected, globalActionOrder }: Props): JSX.Element;
6
+ export declare function GlobalHeader({ rendererConnected, globalActionOrder }: Props): React.JSX.Element;
7
7
  export {};
@@ -1,8 +1,8 @@
1
- /// <reference types="react" />
1
+ import React from 'react';
2
2
  type Props = {
3
3
  welcomeDismissed: boolean;
4
4
  onDismissWelcome: () => unknown;
5
5
  onShowWelcome: () => unknown;
6
6
  };
7
- export declare function HomeOverlay({ welcomeDismissed, onDismissWelcome, onShowWelcome, }: Props): JSX.Element;
7
+ export declare function HomeOverlay({ welcomeDismissed, onDismissWelcome, onShowWelcome, }: Props): React.JSX.Element;
8
8
  export {};
@@ -1,7 +1,7 @@
1
- /// <reference types="react" />
1
+ import React from 'react';
2
2
  type Props = {
3
3
  keys: string[];
4
4
  label: string;
5
5
  };
6
- export declare function KeyShortcut({ keys, label }: Props): JSX.Element;
6
+ export declare function KeyShortcut({ keys, label }: Props): React.JSX.Element;
7
7
  export {};
@@ -1,6 +1,6 @@
1
- /// <reference types="react" />
1
+ import React from 'react';
2
2
  type Props = {
3
3
  onShowWelcome: () => unknown;
4
4
  };
5
- export declare function NoFixtureSelected({ onShowWelcome }: Props): JSX.Element;
5
+ export declare function NoFixtureSelected({ onShowWelcome }: Props): React.JSX.Element;
6
6
  export {};
@@ -1,6 +1,6 @@
1
- /// <reference types="react" />
1
+ import React from 'react';
2
2
  type Props = {
3
3
  onDismissWelcome: () => unknown;
4
4
  };
5
- export declare function WelcomeCosmos({ onDismissWelcome }: Props): JSX.Element;
5
+ export declare function WelcomeCosmos({ onDismissWelcome }: Props): React.JSX.Element;
6
6
  export {};
@@ -1,10 +1,12 @@
1
- /// <reference types="react" />
2
- import { FixtureId, FixtureState, FlatFixtureTreeItem, StateUpdater } from 'react-cosmos-core';
1
+ import React from 'react';
2
+ import { FixtureId, FlatFixtureTreeItem } from 'react-cosmos-core';
3
+ import { GetFixtureState, SetFixtureStateByName } from '../RendererCore/spec.js';
3
4
  type Props = {
4
5
  fixtureItems: FlatFixtureTreeItem[];
5
6
  selectedFixtureId: FixtureId | null;
6
7
  rendererConnected: boolean;
7
- fixtureState: FixtureState;
8
+ getFixtureState: GetFixtureState;
9
+ setFixtureState: SetFixtureStateByName;
8
10
  navOpen: boolean;
9
11
  panelOpen: boolean;
10
12
  navWidth: number;
@@ -19,12 +21,11 @@ type Props = {
19
21
  onTogglePanel: () => unknown;
20
22
  onReloadRenderer: () => unknown;
21
23
  onCloseFixture: () => unknown;
22
- onFixtureStateChange: (stateUpdater: StateUpdater<FixtureState>) => void;
23
24
  setNavWidth: (width: number) => unknown;
24
25
  setPanelWidth: (width: number) => unknown;
25
26
  welcomeDismissed: boolean;
26
27
  onDismissWelcome: () => unknown;
27
28
  onShowWelcome: () => unknown;
28
29
  };
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;
30
+ export declare function Root({ fixtureItems, selectedFixtureId, rendererConnected, getFixtureState, setFixtureState, navOpen, panelOpen, navWidth, panelWidth, sidePanelRowOrder, globalActionOrder, globalOrder, navRowOrder, fixtureActionOrder, rendererActionOrder, onToggleNav, onTogglePanel, onReloadRenderer, onCloseFixture, setNavWidth, setPanelWidth, welcomeDismissed, onDismissWelcome, onShowWelcome, }: Props): React.JSX.Element;
30
31
  export {};