@plurid/plurid-react 0.0.0-34 → 0.0.0-35

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 (150) hide show
  1. package/README.md +42 -90
  2. package/distribution/index.d.mts +1440 -0
  3. package/distribution/index.d.ts +1345 -107
  4. package/distribution/index.js +10262 -5659
  5. package/distribution/index.js.map +1 -1
  6. package/distribution/index.mjs +11160 -0
  7. package/distribution/index.mjs.map +1 -0
  8. package/package.json +113 -121
  9. package/distribution/components/links/Link/components/Preview/index.d.ts +0 -28
  10. package/distribution/components/links/Link/components/Preview/styled.d.ts +0 -7
  11. package/distribution/components/links/Link/index.d.ts +0 -42
  12. package/distribution/components/links/Link/styled.d.ts +0 -7
  13. package/distribution/components/links/RouterLink/index.d.ts +0 -20
  14. package/distribution/components/links/RouterLink/styled.d.ts +0 -6
  15. package/distribution/components/planes/ExternalPlane/index.d.ts +0 -20
  16. package/distribution/components/planes/ExternalPlane/styled.d.ts +0 -5
  17. package/distribution/components/planes/IframePlane/index.d.ts +0 -20
  18. package/distribution/components/planes/IframePlane/styled.d.ts +0 -5
  19. package/distribution/components/structural/Plane/components/PlaneBridge/index.d.ts +0 -22
  20. package/distribution/components/structural/Plane/components/PlaneBridge/styled.d.ts +0 -9
  21. package/distribution/components/structural/Plane/components/PlaneContent/index.d.ts +0 -6
  22. package/distribution/components/structural/Plane/components/PlaneContent/styled.d.ts +0 -1
  23. package/distribution/components/structural/Plane/components/PlaneControls/components/ControlIsolate/index.d.ts +0 -9
  24. package/distribution/components/structural/Plane/components/PlaneControls/components/ControlRefresh/index.d.ts +0 -9
  25. package/distribution/components/structural/Plane/components/PlaneControls/components/SearchItem/index.d.ts +0 -25
  26. package/distribution/components/structural/Plane/components/PlaneControls/components/SearchItem/styled.d.ts +0 -1
  27. package/distribution/components/structural/Plane/components/PlaneControls/components/SearchList/index.d.ts +0 -23
  28. package/distribution/components/structural/Plane/components/PlaneControls/components/SearchList/styled.d.ts +0 -2
  29. package/distribution/components/structural/Plane/components/PlaneControls/index.d.ts +0 -40
  30. package/distribution/components/structural/Plane/components/PlaneControls/styled.d.ts +0 -11
  31. package/distribution/components/structural/Plane/components/PlaneDebugger/index.d.ts +0 -17
  32. package/distribution/components/structural/Plane/components/PlaneDebugger/styled.d.ts +0 -1
  33. package/distribution/components/structural/Plane/index.d.ts +0 -36
  34. package/distribution/components/structural/Plane/styled.d.ts +0 -11
  35. package/distribution/components/structural/Root/index.d.ts +0 -20
  36. package/distribution/components/structural/Root/styled.d.ts +0 -1
  37. package/distribution/components/structural/Roots/index.d.ts +0 -23
  38. package/distribution/components/structural/Roots/styled.d.ts +0 -3
  39. package/distribution/components/structural/Space/components/SpaceDebugger/index.d.ts +0 -17
  40. package/distribution/components/structural/Space/components/SpaceDebugger/styled.d.ts +0 -1
  41. package/distribution/components/structural/Space/index.d.ts +0 -19
  42. package/distribution/components/structural/Space/styled.d.ts +0 -8
  43. package/distribution/components/utilities/ApplicationConfigurator/index.d.ts +0 -25
  44. package/distribution/components/utilities/ApplicationConfigurator/styled.d.ts +0 -1
  45. package/distribution/components/utilities/ErrorBoundary/index.d.ts +0 -18
  46. package/distribution/components/utilities/NotFound/index.d.ts +0 -17
  47. package/distribution/components/utilities/NotFound/styled.d.ts +0 -1
  48. package/distribution/components/utilities/Origin/index.d.ts +0 -19
  49. package/distribution/components/utilities/Origin/styled.d.ts +0 -7
  50. package/distribution/components/utilities/PlaneConfigurator/index.d.ts +0 -20
  51. package/distribution/components/utilities/PlaneConfigurator/styled.d.ts +0 -1
  52. package/distribution/components/utilities/Portal/index.d.ts +0 -15
  53. package/distribution/components/utilities/Toolbar/Button/index.d.ts +0 -15
  54. package/distribution/components/utilities/Toolbar/Button/styled.d.ts +0 -13
  55. package/distribution/components/utilities/Toolbar/General/components/Drawer/index.d.ts +0 -26
  56. package/distribution/components/utilities/Toolbar/General/components/Drawer/styled.d.ts +0 -3
  57. package/distribution/components/utilities/Toolbar/General/components/MenuMore/components/Global/index.d.ts +0 -26
  58. package/distribution/components/utilities/Toolbar/General/components/MenuMore/components/Shortcuts/index.d.ts +0 -18
  59. package/distribution/components/utilities/Toolbar/General/components/MenuMore/components/Space/index.d.ts +0 -25
  60. package/distribution/components/utilities/Toolbar/General/components/MenuMore/components/Technical/index.d.ts +0 -22
  61. package/distribution/components/utilities/Toolbar/General/components/MenuMore/components/Toolbar/index.d.ts +0 -27
  62. package/distribution/components/utilities/Toolbar/General/components/MenuMore/components/Transform/index.d.ts +0 -24
  63. package/distribution/components/utilities/Toolbar/General/components/MenuMore/components/Viewcube/index.d.ts +0 -25
  64. package/distribution/components/utilities/Toolbar/General/components/MenuMore/data.d.ts +0 -9
  65. package/distribution/components/utilities/Toolbar/General/components/MenuMore/index.d.ts +0 -26
  66. package/distribution/components/utilities/Toolbar/General/components/MenuMore/styled.d.ts +0 -3
  67. package/distribution/components/utilities/Toolbar/General/components/MenuUniverses/index.d.ts +0 -20
  68. package/distribution/components/utilities/Toolbar/General/components/MenuUniverses/styled.d.ts +0 -4
  69. package/distribution/components/utilities/Toolbar/General/components/ToolbarRotate/index.d.ts +0 -32
  70. package/distribution/components/utilities/Toolbar/General/components/ToolbarRotate/styled.d.ts +0 -1
  71. package/distribution/components/utilities/Toolbar/General/components/ToolbarScale/index.d.ts +0 -30
  72. package/distribution/components/utilities/Toolbar/General/components/ToolbarScale/styled.d.ts +0 -1
  73. package/distribution/components/utilities/Toolbar/General/components/ToolbarTranslate/index.d.ts +0 -34
  74. package/distribution/components/utilities/Toolbar/General/components/ToolbarTranslate/styled.d.ts +0 -1
  75. package/distribution/components/utilities/Toolbar/General/components/TransformArrow/data.d.ts +0 -7
  76. package/distribution/components/utilities/Toolbar/General/components/TransformArrow/index.d.ts +0 -24
  77. package/distribution/components/utilities/Toolbar/General/components/TransformArrow/styled.d.ts +0 -6
  78. package/distribution/components/utilities/Toolbar/General/data.d.ts +0 -6
  79. package/distribution/components/utilities/Toolbar/General/index.d.ts +0 -25
  80. package/distribution/components/utilities/Toolbar/General/styled.d.ts +0 -29
  81. package/distribution/components/utilities/UniverseExplorer/index.d.ts +0 -20
  82. package/distribution/components/utilities/UniverseExplorer/styled.d.ts +0 -2
  83. package/distribution/components/utilities/Viewcube/components/ViewcubeFace/data.d.ts +0 -391
  84. package/distribution/components/utilities/Viewcube/components/ViewcubeFace/index.d.ts +0 -38
  85. package/distribution/components/utilities/Viewcube/components/ViewcubeFace/styled.d.ts +0 -16
  86. package/distribution/components/utilities/Viewcube/components/ViewcubeModel/index.d.ts +0 -22
  87. package/distribution/components/utilities/Viewcube/components/ViewcubeModel/styled.d.ts +0 -3
  88. package/distribution/components/utilities/Viewcube/components/ViewcubeTransformAreas/TransformArea/data.d.ts +0 -5
  89. package/distribution/components/utilities/Viewcube/components/ViewcubeTransformAreas/TransformArea/index.d.ts +0 -11
  90. package/distribution/components/utilities/Viewcube/components/ViewcubeTransformAreas/TransformArea/styled.d.ts +0 -17
  91. package/distribution/components/utilities/Viewcube/components/ViewcubeTransformAreas/index.d.ts +0 -17
  92. package/distribution/components/utilities/Viewcube/components/ViewcubeTransformAreas/styled.d.ts +0 -13
  93. package/distribution/components/utilities/Viewcube/index.d.ts +0 -27
  94. package/distribution/components/utilities/Viewcube/styled.d.ts +0 -19
  95. package/distribution/components/virtuals/List/components/ListItem/index.d.ts +0 -9
  96. package/distribution/components/virtuals/List/index.d.ts +0 -21
  97. package/distribution/components/virtuals/List/styled.d.ts +0 -1
  98. package/distribution/containers/Application/View/Container/index.d.ts +0 -5
  99. package/distribution/containers/Application/View/index.d.ts +0 -72
  100. package/distribution/containers/Application/View/styled.d.ts +0 -8
  101. package/distribution/containers/Application/index.d.ts +0 -17
  102. package/distribution/containers/Provider/context.d.ts +0 -4
  103. package/distribution/containers/Provider/index.d.ts +0 -12
  104. package/distribution/containers/RouterBrowser/FadeIn/index.d.ts +0 -6
  105. package/distribution/containers/RouterBrowser/FadeIn/styled.d.ts +0 -3
  106. package/distribution/containers/RouterBrowser/index.d.ts +0 -7
  107. package/distribution/containers/RouterBrowser/styled.d.ts +0 -1
  108. package/distribution/containers/RouterStatic/index.d.ts +0 -19
  109. package/distribution/data/constants/index.d.ts +0 -3
  110. package/distribution/data/interfaces/index.d.ts +0 -20
  111. package/distribution/data/interfaces/utility.d.ts +0 -3
  112. package/distribution/index.es.js +0 -6520
  113. package/distribution/index.es.js.map +0 -1
  114. package/distribution/index.min.js +0 -6306
  115. package/distribution/index.min.js.map +0 -1
  116. package/distribution/services/context/index.d.ts +0 -5
  117. package/distribution/services/engine/index.d.ts +0 -22
  118. package/distribution/services/hooks/event/index.d.ts +0 -4
  119. package/distribution/services/hooks/index.d.ts +0 -2
  120. package/distribution/services/hooks/router/index.d.ts +0 -1
  121. package/distribution/services/logic/animation/index.d.ts +0 -16
  122. package/distribution/services/logic/computing/index.d.ts +0 -17
  123. package/distribution/services/logic/router/index.d.ts +0 -40
  124. package/distribution/services/logic/router/styled.d.ts +0 -5
  125. package/distribution/services/logic/server/index.d.ts +0 -3
  126. package/distribution/services/logic/shortcuts/index.d.ts +0 -114
  127. package/distribution/services/logic/shortcuts/logic.d.ts +0 -6
  128. package/distribution/services/logic/state/index.d.ts +0 -3
  129. package/distribution/services/logic/transform/index.d.ts +0 -3
  130. package/distribution/services/state/actions/index.d.ts +0 -258
  131. package/distribution/services/state/context/index.d.ts +0 -3
  132. package/distribution/services/state/hooks/index.d.ts +0 -4
  133. package/distribution/services/state/modules/configuration/index.d.ts +0 -78
  134. package/distribution/services/state/modules/general/index.d.ts +0 -10
  135. package/distribution/services/state/modules/index.d.ts +0 -16
  136. package/distribution/services/state/modules/shortcuts/index.d.ts +0 -16
  137. package/distribution/services/state/modules/space/index.d.ts +0 -151
  138. package/distribution/services/state/modules/space/selectors.d.ts +0 -23
  139. package/distribution/services/state/modules/space/types.d.ts +0 -41
  140. package/distribution/services/state/modules/themes/index.d.ts +0 -22
  141. package/distribution/services/state/modules/ui/index.d.ts +0 -16
  142. package/distribution/services/state/selectors/index.d.ts +0 -62
  143. package/distribution/services/state/store/development/index.d.ts +0 -5
  144. package/distribution/services/state/store/index.d.ts +0 -23
  145. package/distribution/services/state/store/production/index.d.ts +0 -5
  146. package/distribution/services/state/store/reducer/index.d.ts +0 -10
  147. package/distribution/services/styled/index.d.ts +0 -2
  148. package/distribution/services/utilities/environment/index.d.ts +0 -7
  149. package/distribution/services/utilities/imports/index.d.ts +0 -49
  150. package/distribution/services/utilities/react/index.d.ts +0 -3
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../source/services/utilities/environment/index.ts","../source/services/state/modules/configuration/index.ts","../source/services/state/modules/general/index.ts","../source/services/state/modules/shortcuts/index.ts","../source/services/state/modules/space/index.ts","../source/services/engine/index.ts","../source/services/logic/transform/index.ts","../source/services/state/modules/space/selectors.ts","../source/services/state/modules/themes/index.ts","../source/services/state/modules/ui/index.ts","../source/services/state/modules/index.ts","../source/services/state/store/reducer/index.ts","../source/services/logic/arrangement/signature.ts","../source/services/state/middleware/history.ts","../source/services/state/store/production/index.ts","../source/services/state/store/development/index.ts","../source/services/state/store/index.ts","../source/services/state/context/index.ts","../source/services/logic/viewpoint/index.ts","../source/services/context/index.ts","../source/services/state/actions/index.ts","../source/services/logic/computing/index.ts","../source/services/logic/animation/index.ts","../source/services/logic/shortcuts/logic.ts","../source/services/logic/shortcuts/index.ts","../source/services/state/selectors/index.ts","../source/containers/Application/View/styled.ts","../source/components/utilities/ErrorBoundary/index.tsx","../source/components/structural/Plane/styled.ts","../source/components/structural/Plane/components/PlaneBridge/styled.ts","../source/components/structural/Plane/components/PlaneBridge/index.tsx","../source/components/structural/Plane/components/PlaneControls/components/ControlRefresh/index.tsx","../source/components/structural/Plane/components/PlaneControls/components/ControlIsolate/index.tsx","../source/components/structural/Plane/components/PlaneControls/styled.ts","../source/components/structural/Plane/components/PlaneControls/index.tsx","../source/components/structural/Plane/components/PlaneContent/styled.ts","../source/components/structural/Plane/components/PlaneContent/index.tsx","../source/components/structural/Plane/index.tsx","../source/services/utilities/react/index.ts","../source/components/structural/Root/styled.ts","../source/components/structural/Root/index.tsx","../source/components/structural/PlaneLinks/styled.ts","../source/components/structural/PlaneLinks/logic.ts","../source/components/structural/PlaneLinks/index.tsx","../source/components/structural/AlignmentGuides/styled.ts","../source/components/structural/AlignmentGuides/index.tsx","../source/components/structural/Roots/styled.ts","../source/components/structural/Roots/index.tsx","../source/components/structural/Space/styled.ts","../source/components/structural/Space/index.tsx","../source/components/utilities/Origin/styled.ts","../source/components/utilities/Origin/index.tsx","../source/services/styled/index.ts","../source/components/utilities/Toolbar/General/data.ts","../source/components/utilities/Toolbar/General/styled.ts","../source/components/utilities/Toolbar/General/components/MenuUniverses/styled.ts","../source/components/utilities/Toolbar/General/components/MenuUniverses/index.tsx","../source/components/utilities/Toolbar/General/components/Drawer/styled.ts","../source/components/utilities/Toolbar/General/components/Drawer/index.tsx","../source/components/utilities/Toolbar/General/components/MenuMore/styled.ts","../source/components/utilities/Toolbar/General/components/MenuMore/components/Global/index.tsx","../source/components/utilities/Toolbar/General/components/MenuMore/components/Transform/index.tsx","../source/components/utilities/Toolbar/General/components/MenuMore/components/Space/index.tsx","../source/components/utilities/Toolbar/General/components/MenuMore/components/Toolbar/index.tsx","../source/components/utilities/Toolbar/General/components/MenuMore/components/Viewcube/index.tsx","../source/components/utilities/Toolbar/General/components/MenuMore/components/Minimap/index.tsx","../source/components/utilities/Toolbar/General/components/MenuMore/components/Technical/index.tsx","../source/components/utilities/Toolbar/General/components/MenuMore/components/Shortcuts/index.tsx","../source/components/utilities/Toolbar/General/components/MenuMore/data.tsx","../source/components/utilities/Toolbar/General/components/MenuMore/index.tsx","../source/components/utilities/Toolbar/General/components/ToolbarRotate/styled.ts","../source/components/utilities/Toolbar/General/components/TransformArrow/styled.ts","../source/components/utilities/Toolbar/General/components/TransformArrow/data.ts","../source/components/utilities/Toolbar/General/components/TransformArrow/index.tsx","../source/components/utilities/Toolbar/General/components/ToolbarRotate/index.tsx","../source/components/utilities/Toolbar/General/components/ToolbarScale/styled.ts","../source/components/utilities/Toolbar/General/components/ToolbarScale/index.tsx","../source/components/utilities/Toolbar/General/components/ToolbarTranslate/styled.ts","../source/components/utilities/Toolbar/General/components/ToolbarTranslate/index.tsx","../source/components/utilities/Toolbar/General/index.tsx","../source/components/utilities/Viewcube/styled.ts","../source/components/utilities/Viewcube/components/ViewcubeFace/styled.ts","../source/components/utilities/Viewcube/components/ViewcubeFace/data.ts","../source/components/utilities/Viewcube/components/ViewcubeFace/index.tsx","../source/components/utilities/Viewcube/components/ViewcubeModel/styled.ts","../source/components/utilities/Viewcube/components/ViewcubeModel/index.tsx","../source/components/utilities/Viewcube/index.tsx","../source/components/utilities/Minimap/index.tsx","../source/components/utilities/Shortcuts/data.ts","../source/components/utilities/Shortcuts/styled.ts","../source/components/utilities/Shortcuts/index.tsx","../source/containers/Application/View/Container/index.tsx","../source/containers/Application/View/hooks/useGrabMode.ts","../source/containers/Application/View/hooks/useFlyControls.ts","../source/containers/Application/View/hooks/useViewResize.ts","../source/containers/Application/View/hooks/usePointerGestures.ts","../source/containers/Application/View/hooks/useTreeUpdate.ts","../source/containers/Application/View/hooks/usePluridPubSub.ts","../source/containers/Application/View/hooks/useCollaboration.ts","../source/containers/Application/View/hooks/useEngineEvents.ts","../source/containers/Application/View/hooks/useViewpointURL.ts","../source/containers/Application/View/index.tsx","../source/containers/Application/index.tsx","../source/services/logic/router/styled.ts","../source/services/logic/router/index.tsx","../source/containers/RouterBrowser/styled.ts","../source/containers/RouterBrowser/FadeIn/styled.ts","../source/containers/RouterBrowser/FadeIn/index.tsx","../source/containers/RouterBrowser/index.tsx","../source/containers/RouterStatic/index.tsx","../source/containers/Provider/context.ts","../source/containers/Provider/index.tsx","../source/data/constants/index.ts","../source/components/utilities/Portal/index.tsx","../source/components/links/Link/components/Preview/styled.ts","../source/components/links/Link/components/Preview/index.tsx","../source/components/links/Link/styled.ts","../source/components/links/Link/hooks/useLinkPreview.ts","../source/components/links/Link/index.tsx","../source/components/links/RouterLink/styled.ts","../source/components/links/RouterLink/index.tsx","../source/components/utilities/ApplicationConfigurator/styled.ts","../source/components/utilities/ApplicationConfigurator/index.tsx","../source/components/utilities/PlaneConfigurator/styled.ts","../source/components/utilities/PlaneConfigurator/index.tsx","../source/components/planes/ExternalPlane/styled.ts","../source/components/planes/ExternalPlane/index.tsx","../source/components/planes/IframePlane/styled.ts","../source/components/planes/IframePlane/index.tsx","../source/components/virtuals/List/components/ListItem/index.tsx","../source/components/virtuals/List/index.tsx","../source/components/structural/Plane/components/PlaneDebugger/styled.ts","../source/components/structural/Plane/components/PlaneDebugger/index.tsx","../source/components/structural/Space/components/SpaceDebugger/styled.ts","../source/components/structural/Space/components/SpaceDebugger/index.tsx","../source/services/logic/server/index.tsx","../source/services/hooks/router/index.ts","../source/index.tsx"],"names":["state","actions","reducer","selectors","initialState","createSlice","space","transform","planes","generalEngine","link","store","configureStore","React","context_default","quaternion","matrix","degToRad","translateMatrix","rotateMatrix","scaleMatrix","multiplyArrayOfMatrices","configuration","getTransform","matrix3d","TRANSFORM_MODES","shortcuts","styled","connect","mathematics","useRef","useState","PLURID_PUBSUB_TOPIC","FOCUS_ANCHOR_SUFFIX","mapDispatchToProps","useContext","plane","Plane","pluridProperty","properties","planeProperties","childrenPlanes","mapStateToProperties","mapDispatchToProperties","useEffect","SIZES","css","mapStateToProps","universal","selectedTheme","themes","internatiolate","internationalization","TRANSFORM_TOUCHES","PluridDropdown","PluridSwitch","Space_default","PluridSlider","useDebouncedCallback","name","TOOLBAR_DRAWERS","matrixArrayToCSSMatrix","interaction","Viewcube_default","Minimap_default","fadeIn","keyframes","Shortcuts_default","pubsub","useCallback","useMemo","PluridPubSub","ReduxProvider","defaultConfiguration","view","PluridRoute","DirectPlane","matchedPath","matchedRoute","PluridRouterStatic","PluridContext","Component","objects","PLURID_DEFAULT_RESIZE_DEBOUNCE_TIME","linkCoordinates","pluridPlaneID","plurid","getPluridPlaneIDByData","elementHeight","storage","PLURID_ROUTER_STORAGE","PLURID_ROUTER_LOCATION_STORED","SPACE_LAYOUT","PluridIsoMatcher","pluridRouterNavigate"],"mappings":"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","file":"index.mjs","sourcesContent":["// #region module\n// Read the build/runtime mode without assuming a Node `process` exists. As a published\n// library, plurid-react runs in the browser (no `process`), under SSR (Node), and through\n// bundlers that statically replace `process.env` — so guard the access and default to\n// production (safest: no devtools, no dev-only store wiring).\nconst readEnvMode = (): string => {\n try {\n if (typeof process !== 'undefined' && process.env && process.env.ENV_MODE) {\n return process.env.ENV_MODE;\n }\n } catch (_) {\n // `process` not defined in this runtime (e.g. browser ESM) — fall through.\n }\n\n return 'production';\n};\n\nconst ENV_MODE = readEnvMode();\n\nconst environment = {\n production: ENV_MODE === 'production',\n development: ENV_MODE === 'development',\n local: ENV_MODE === 'local',\n localExternal: ENV_MODE === 'localexternal',\n};\n// #endregion module\n\n\n\n// #region exports\nexport default environment;\n// #endregion exports\n","// #region imports\n // #region libraries\n import {\n createSlice,\n PayloadAction,\n } from '@reduxjs/toolkit';\n\n import {\n PluridConfiguration,\n InternationalizationLanguageType,\n\n SIZES,\n TRANSFORM_MODES,\n TRANSFORM_TOUCHES,\n TOOLBAR_DRAWERS,\n LAYOUT_TYPES,\n\n defaultConfiguration,\n } from '@plurid/plurid-data';\n // #endregion libraries\n\n\n // #region internal\n import type {\n AppState,\n } from '~services/state/store';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nexport interface ConfigurationState extends PluridConfiguration {\n}\n\n\nconst initialState: ConfigurationState = {\n ...defaultConfiguration,\n};\n\n\nexport const configuration = createSlice({\n name: 'configuration',\n initialState,\n reducers: {\n setConfiguration: (\n _state,\n action: PayloadAction<PluridConfiguration>,\n ) => {\n return {\n ...action.payload,\n };\n },\n setConfigurationMicro: (\n state,\n ) => {\n state.elements.toolbar.show = false;\n state.elements.plane.controls.show = false;\n state.elements.viewcube.show = false;\n },\n setConfigurationPlaneControls: (\n state,\n action: PayloadAction<boolean>\n ) => {\n state.elements.plane.controls.show = action.payload;\n },\n setConfigurationPlaneOpacity: (\n state,\n action: PayloadAction<number>,\n ) => {\n state.elements.plane.opacity = action.payload;\n },\n setConfigurationThemeGeneral: (\n state,\n action: PayloadAction<string>,\n ) => {\n const updatedTheme: any = {\n general: action.payload,\n interaction: typeof state.global.theme === 'object'\n ? state.global.theme.interaction\n : 'plurid',\n };\n\n state.global.theme = updatedTheme;\n },\n setConfigurationThemeInteraction: (\n state,\n action: PayloadAction<string>,\n ) => {\n const updatedTheme: any = {\n general: typeof state.global.theme === 'object'\n ? state.global.theme.general\n : 'plurid',\n interaction: action.payload,\n };\n\n state.global.theme = updatedTheme;\n },\n setConfigurationLanguage: (\n state,\n action: PayloadAction<InternationalizationLanguageType>,\n ) => {\n state.global.language = action.payload;\n },\n toggleConfigurationViewcubeHide: (\n state,\n action: PayloadAction<boolean>,\n ) => {\n state.elements.viewcube.show = action.payload;\n },\n toggleConfigurationViewcubeButtons: (\n state,\n action: PayloadAction<boolean>,\n ) => {\n state.elements.viewcube.buttons = action.payload;\n },\n toggleConfigurationViewcubeOpaque: (\n state,\n action: PayloadAction<boolean>,\n ) => {\n state.elements.viewcube.opaque = action.payload;\n },\n toggleConfigurationViewcubeConceal: (\n state,\n ) => {\n const {\n conceal,\n } = state.elements.viewcube;\n\n state.elements.viewcube.conceal = !conceal;\n },\n toggleConfigurationMinimapHide: (\n state,\n action: PayloadAction<boolean>,\n ) => {\n if (state.elements.minimap) {\n state.elements.minimap.show = action.payload;\n }\n },\n toggleConfigurationMinimapTransparent: (\n state,\n action: PayloadAction<boolean>,\n ) => {\n if (state.elements.minimap) {\n state.elements.minimap.transparent = action.payload;\n }\n },\n toggleConfigurationToolbarConceal: (\n state,\n ) => {\n const {\n conceal,\n } = state.elements.toolbar;\n\n state.elements.toolbar.conceal = !conceal;\n },\n toggleConfigurationToolbarTransformIcons: (\n state,\n ) => {\n const {\n transformIcons,\n } = state.elements.toolbar;\n\n state.elements.toolbar.transformIcons = !transformIcons;\n },\n toggleConfigurationToolbarTransformButtons: (\n state,\n ) => {\n const {\n transformButtons,\n } = state.elements.toolbar;\n\n state.elements.toolbar.transformButtons = !transformButtons;\n },\n toggleConfigurationShowTransformOrigin: (\n state,\n ) => {\n const {\n show,\n } = state.space.transformOrigin;\n\n state.space.transformOrigin.show = !show;\n },\n toggleConfigurationToolbarOpaque: (\n state,\n ) => {\n const {\n opaque,\n } = state.elements.toolbar;\n\n state.elements.toolbar.opaque = !opaque;\n },\n toggleConfigurationSpaceTransparentUI: (\n state,\n ) => {\n state.global.transparentUI = !state.global.transparentUI;\n },\n setConfigurationSpaceTransformOriginSize: (\n state,\n action: PayloadAction<SIZES>,\n ) => {\n state.space.transformOrigin.size = action.payload;\n },\n setConfigurationSpaceTransformMode: (\n state,\n action: PayloadAction<TRANSFORM_MODES>,\n ) => {\n if (\n state.space.transformMode !== action.payload\n ) {\n state.space.transformMode = action.payload;\n } else {\n state.space.transformMode = TRANSFORM_MODES.ALL;\n }\n },\n toggleConfigurationSpaceTransformMultimode: (\n state,\n action: PayloadAction<boolean>,\n ) => {\n state.space.transformMultimode = action.payload;\n },\n setConfigurationSpaceTransformTouch: (\n state,\n action: PayloadAction<TRANSFORM_TOUCHES>,\n ) => {\n state.space.transformTouch = action.payload;\n },\n toggleConfigurationSpaceFirstPerson: (\n state,\n ) => {\n const {\n firstPerson,\n } = state.space;\n\n state.space.firstPerson = !firstPerson;\n },\n toggleConfigurationToolbarToggleDrawer: (\n state,\n action: PayloadAction<TOOLBAR_DRAWERS>,\n ) => {\n const {\n toggledDrawers,\n } = state.elements.toolbar;\n\n if (toggledDrawers.includes(action.payload)) {\n const updatedDrawers = toggledDrawers.filter(el => el !== action.payload);\n state.elements.toolbar.toggledDrawers = [...updatedDrawers];\n } else {\n state.elements.toolbar.toggledDrawers = [\n ...toggledDrawers,\n action.payload,\n ];\n }\n },\n setConfigurationSpaceTransformLocks: (\n state,\n action: PayloadAction<any>,\n ) => {\n const {\n transformLocks,\n } = state.space;\n\n const updatedTransformLocks: any = {\n ...transformLocks,\n };\n updatedTransformLocks[action.payload] = !(transformLocks as any)[action.payload];\n state.space.transformLocks = {\n ...updatedTransformLocks,\n };\n },\n setConfigurationSpaceLayout: (\n state,\n action: PayloadAction<any>,\n ) => {\n const layout: any = {\n type: (LAYOUT_TYPES as any)[action.payload],\n };\n\n state.space.layout = {\n ...layout,\n };\n },\n setConfigurationSpaceCullingDistance: (\n state,\n action: PayloadAction<number>,\n ) => {\n state.space.cullingDistance = action.payload;\n },\n },\n});\n// #endregion module\n\n\n\n// #region exports\nexport const actions = configuration.actions;\n\n\nexport const getConfiguration = (state: AppState) => state.configuration;\n\nexport const selectors = {\n getConfiguration,\n};\n\n\nexport const reducer = configuration.reducer;\n// #endregion exports\n","// #region imports\n // #region libraries\n import {\n createSlice,\n // PayloadAction,\n } from '@reduxjs/toolkit';\n // #endregion libraries\n\n\n // #region internal\n import type {\n AppState,\n } from '~services/state/store';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nexport interface GeneralState {\n}\n\n\nconst initialState: GeneralState = {\n};\n\n\nexport const general = createSlice({\n name: 'general',\n initialState,\n reducers: {\n },\n});\n// #endregion module\n\n\n\n// #region exports\nexport const actions = general.actions;\n\n\nexport const getGeneral = (state: AppState) => state.general;\n\nexport const selectors = {\n getGeneral,\n};\n\n\nexport const reducer = general.reducer;\n// #endregion exports\n","// #region imports\n // #region libraries\n import {\n createSlice,\n PayloadAction,\n } from '@reduxjs/toolkit';\n // #endregion libraries\n\n\n // #region internal\n import type {\n AppState,\n } from '~services/state/store';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nexport interface ShortcutsState {\n global: boolean;\n}\n\n\nconst initialState: ShortcutsState = {\n global: true,\n};\n\n\nexport const shortcuts = createSlice({\n name: 'shortcuts',\n initialState,\n reducers: {\n setGlobalShortcuts: (\n state,\n action: PayloadAction<boolean>,\n ) => {\n state.global = action.payload;\n },\n },\n});\n// #endregion module\n\n\n\n// #region exports\nexport const actions = shortcuts.actions;\n\n\nexport const getGlobal = (state: AppState) => state.shortcuts.global;\n\nexport const selectors = {\n getGlobal,\n};\n\n\nexport const reducer = shortcuts.reducer;\n// #endregion exports\n","// #region imports\n // #region libraries\n import {\n createSlice,\n original,\n PayloadAction,\n } from '@reduxjs/toolkit';\n\n\n import {\n mathematics,\n objects,\n } from '@plurid/plurid-functions';\n\n import {\n /** constants */\n ROTATION_STEP,\n TRANSLATION_STEP,\n SCALE_STEP,\n SCALE_LOWER_LIMIT,\n SCALE_UPPER_LIMIT,\n\n PluridStateSpace,\n TreePlane,\n PlaneLink,\n SpaceLocation,\n PluridApplicationView,\n } from '@plurid/plurid-data';\n // #endregion libraries\n\n\n // #region external\n import {\n computeMatrix,\n } from '~services/logic/transform';\n\n import {\n generalEngine,\n space as spaceEngine,\n } from '~services/engine';\n // #endregion external\n\n\n // #region internal\n import {\n ViewSize,\n SpaceSize,\n Coordinates,\n SetSpaceFieldPayload,\n SetTransformPayload,\n UpdateSpaceLinkCoordinatesPayload,\n UpdatePlaneLinkPayload,\n TransformSelectedPlanesPayload,\n } from './types';\n\n import * as selectors from './selectors';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nconst {\n toRadians,\n} = mathematics.geometry;\n\n\nconst initialState: PluridStateSpace = {\n loading: true,\n resolvedLayout: false,\n transform: 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)',\n animatedTransform: false,\n transformTime: 450,\n scale: 1,\n rotationX: 0,\n rotationY: 0,\n translationX: 0,\n translationY: 0,\n translationZ: 0,\n tree: [],\n links: [],\n activeUniverseID: '',\n camera: {\n x: 0,\n y: 0,\n z: 0,\n },\n viewSize: {\n width: typeof window === 'undefined' ? 1440 : window.innerWidth,\n height: typeof window === 'undefined' ? 821 : window.innerHeight,\n },\n spaceSize: {\n width: typeof window === 'undefined' ? 1440 : window.innerWidth,\n height: typeof window === 'undefined' ? 821 : window.innerHeight,\n depth: 0,\n topCorner: {\n x: 0,\n y: 0,\n z: 0,\n },\n },\n view: [],\n culledView: [],\n activePlaneID: '',\n isolatePlane: '',\n lastClosedPlane: '',\n selectedPlaneIDs: [],\n draggingSelection: false,\n};\n\n\nexport const name = 'space' as const;\n\n\nexport const space = createSlice({\n name,\n initialState,\n reducers: {\n setSpaceField: (\n state,\n action: PayloadAction<SetSpaceFieldPayload>,\n ) => {\n const {\n field,\n value,\n } = action.payload;\n\n (state as any)[field] = value;\n },\n setSpaceLoading: (\n state,\n action: PayloadAction<boolean>,\n ) => {\n state.loading = action.payload;\n },\n setTransform: (\n state,\n action: PayloadAction<SetTransformPayload>,\n ) => {\n const {\n translationX,\n translationY,\n translationZ,\n rotationX,\n rotationY,\n scale,\n } = action.payload;\n\n const resolvedTranslationX = translationX ?? state.translationX;\n const resolvedTranslationY = translationY ?? state.translationY;\n const resolvedTranslationZ = translationZ ?? state.translationZ;\n const resolvedRotationX = rotationX ?? state.rotationX;\n const resolvedRotationY = rotationY ?? state.rotationY;\n const resolvedScale = scale ?? state.scale;\n\n state.translationX = resolvedTranslationX;\n state.translationY = resolvedTranslationY;\n state.translationZ = resolvedTranslationZ;\n state.rotationX = resolvedRotationX;\n state.rotationY = resolvedRotationY;\n state.scale = resolvedScale;\n },\n setAnimatedTransform: (\n state,\n action: PayloadAction<boolean>,\n ) => {\n state.animatedTransform = action.payload;\n },\n setTransformTime: (\n state,\n action: PayloadAction<number>,\n ) => {\n state.transformTime = action.payload;\n },\n setSpaceLocation: (\n state,\n action: PayloadAction<Partial<SpaceLocation>>,\n ) => {\n const newState = {\n ...state,\n ...action.payload,\n };\n const transform = computeMatrix(newState);\n\n return {\n ...newState,\n transform,\n };\n },\n viewCameraMoveForward: (\n state,\n ) => {\n state.translationZ = state.translationZ + TRANSLATION_STEP * 6 * Math.cos(toRadians(-state.rotationY));\n state.translationX = state.translationX + TRANSLATION_STEP * 6 * Math.sin(toRadians(-state.rotationY));\n state.transform = computeMatrix(state);\n },\n viewCameraMoveBackward: (\n state,\n ) => {\n state.translationZ = state.translationZ - TRANSLATION_STEP * 6 * Math.cos(toRadians(-state.rotationY));\n state.translationX = state.translationX - TRANSLATION_STEP * 6 * Math.sin(toRadians(-state.rotationY));\n state.transform = computeMatrix(state);\n },\n viewCameraMoveLeft: (\n state,\n ) => {\n state.translationX = state.translationX + TRANSLATION_STEP * 3 * Math.cos(toRadians(state.rotationY));\n state.translationZ = state.translationZ + TRANSLATION_STEP * 3 * Math.sin(toRadians(state.rotationY));\n state.transform = computeMatrix(state);\n },\n viewCameraMoveRight: (\n state,\n ) => {\n state.translationX = state.translationX - TRANSLATION_STEP * 3 * Math.cos(toRadians(state.rotationY));\n state.translationZ = state.translationZ - TRANSLATION_STEP * 3 * Math.sin(toRadians(state.rotationY));\n state.transform = computeMatrix(state);\n },\n viewCameraMoveUp: (\n state,\n ) => {\n state.translationY = state.translationY + TRANSLATION_STEP * 3;\n state.transform = computeMatrix(state);\n },\n viewCameraMoveDown: (\n state,\n ) => {\n state.translationY = state.translationY - TRANSLATION_STEP * 3;\n state.transform = computeMatrix(state);\n },\n viewCameraTurnUp: (\n state,\n ) => {\n state.rotationX = (state.rotationX + ROTATION_STEP) % 360;\n state.transform = computeMatrix(state);\n },\n viewCameraTurnDown: (\n state,\n ) => {\n state.rotationX = (state.rotationX - ROTATION_STEP) % 360;\n state.transform = computeMatrix(state);\n },\n viewCameraTurnLeft: (\n state,\n ) => {\n state.rotationY = (state.rotationY - ROTATION_STEP) % 360;\n state.transform = computeMatrix(state);\n },\n viewCameraTurnRight: (\n state,\n ) => {\n state.rotationY = (state.rotationY + ROTATION_STEP) % 360;\n state.transform = computeMatrix(state);\n },\n rotateUp: (\n state,\n ) => {\n state.rotationX = (state.rotationX + ROTATION_STEP) % 360;\n state.transform = computeMatrix(state);\n },\n rotateDown: (\n state,\n ) => {\n state.rotationX = (state.rotationX - ROTATION_STEP) % 360;\n state.transform = computeMatrix(state);\n },\n rotateX: (\n state,\n action: PayloadAction<number>,\n ) => {\n state.rotationX = action.payload;\n state.transform = computeMatrix(state);\n },\n rotateXWith: (\n state,\n action: PayloadAction<number>,\n ) => {\n state.rotationX = state.rotationX + action.payload;\n state.transform = computeMatrix(state);\n },\n rotateLeft: (\n state,\n ) => {\n state.rotationY = (state.rotationY + ROTATION_STEP) % 360;\n state.transform = computeMatrix(state);\n },\n rotateRight: (\n state,\n ) => {\n state.rotationY = (state.rotationY - ROTATION_STEP) % 360;\n state.transform = computeMatrix(state);\n },\n rotateY: (\n state,\n action: PayloadAction<number>,\n ) => {\n state.rotationY = action.payload;\n state.transform = computeMatrix(state);\n },\n rotateYWith: (\n state,\n action: PayloadAction<number>,\n ) => {\n state.rotationY = state.rotationY + action.payload;\n state.transform = computeMatrix(state);\n },\n translateUp: (\n state,\n ) => {\n state.translationY = state.translationY - TRANSLATION_STEP;\n state.transform = computeMatrix(state);\n },\n translateDown: (\n state,\n ) => {\n state.translationY = state.translationY + TRANSLATION_STEP;\n state.transform = computeMatrix(state);\n },\n translateLeft: (\n state,\n ) => {\n state.translationX = state.translationX - TRANSLATION_STEP * Math.cos(toRadians(state.rotationY));\n state.translationZ = state.translationZ - TRANSLATION_STEP * Math.sin(toRadians(state.rotationY));\n state.transform = computeMatrix(state);\n },\n translateRight: (\n state,\n ) => {\n state.translationX = state.translationX + TRANSLATION_STEP * Math.cos(toRadians(state.rotationY));\n state.translationZ = state.translationZ + TRANSLATION_STEP * Math.sin(toRadians(state.rotationY));\n state.transform = computeMatrix(state);\n },\n translateIn: (\n state,\n ) => {\n state.translationZ = state.translationZ - TRANSLATION_STEP * 3 * Math.cos(toRadians(-state.rotationY));\n state.translationX = state.translationX - TRANSLATION_STEP * 3 * Math.sin(toRadians(-state.rotationY));\n state.transform = computeMatrix(state);\n },\n translateOut: (\n state,\n ) => {\n state.translationZ = state.translationZ + TRANSLATION_STEP * 3 * Math.cos(toRadians(-state.rotationY));\n state.translationX = state.translationX + TRANSLATION_STEP * 3 * Math.sin(toRadians(-state.rotationY));\n state.transform = computeMatrix(state);\n },\n translateXWith: (\n state,\n action: PayloadAction<number>,\n ) => {\n state.translationX = state.translationX + action.payload * Math.cos(toRadians(state.rotationY));\n state.translationZ = state.translationZ + action.payload * Math.sin(toRadians(state.rotationY));\n state.transform = computeMatrix(state);\n },\n translateYWith: (\n state,\n action: PayloadAction<number>,\n ) => {\n state.translationY = state.translationY + action.payload;\n state.transform = computeMatrix(state);\n },\n translateZWith: (\n state,\n action: PayloadAction<number>,\n ) => {\n state.translationZ = state.translationZ + action.payload;\n state.transform = computeMatrix(state);\n },\n scaleUp: (\n state,\n ) => {\n const computedScale = state.scale + SCALE_STEP;\n const scale = computedScale < SCALE_UPPER_LIMIT\n ? computedScale\n : SCALE_UPPER_LIMIT;\n\n state.scale = scale;\n state.transform = computeMatrix(state);\n },\n scaleDown: (\n state,\n ) => {\n const computedScale = state.scale - SCALE_STEP;\n const scale = computedScale > SCALE_LOWER_LIMIT\n ? computedScale\n : SCALE_LOWER_LIMIT;\n\n state.scale = scale;\n state.transform = computeMatrix(state);\n },\n scaleUpWith: (\n state,\n action: PayloadAction<number>,\n ) => {\n const computedScale = state.scale + Math.abs(action.payload);\n const scale = computedScale < SCALE_UPPER_LIMIT\n ? computedScale\n : SCALE_UPPER_LIMIT;\n\n state.scale = scale;\n state.transform = computeMatrix(state);\n },\n zoomAtPoint: (\n state,\n action: PayloadAction<{\n deltaScale: number;\n originX: number;\n originY: number;\n }>,\n ) => {\n // Zoom toward a screen point (e.g. the cursor) instead of the view center.\n // With rotation 0 (the common zoom case) the transform-origin terms in\n // computeMatrix cancel, so a content point maps to screen as\n // screen = scale·point + translation. To keep the content under\n // (originX, originY) fixed as scale s → s', the translation must shift by\n // (origin − translation)·(1 − s'/s). Exact at rotation 0; close otherwise.\n const {\n deltaScale,\n originX,\n originY,\n } = action.payload;\n\n const previousScale = state.scale;\n const computedScale = previousScale + deltaScale;\n const nextScale = Math.min(\n Math.max(computedScale, SCALE_LOWER_LIMIT),\n SCALE_UPPER_LIMIT,\n );\n\n if (nextScale === previousScale) {\n return;\n }\n\n const ratio = 1 - (nextScale / previousScale);\n\n state.translationX += (originX - state.translationX) * ratio;\n state.translationY += (originY - state.translationY) * ratio;\n state.scale = nextScale;\n state.transform = computeMatrix(state);\n },\n scaleDownWith: (\n state,\n action: PayloadAction<number>,\n ) => {\n const computedScale = state.scale - Math.abs(action.payload);\n const scale = computedScale > SCALE_LOWER_LIMIT\n ? computedScale\n : SCALE_LOWER_LIMIT;\n\n state.scale = scale;\n state.transform = computeMatrix(state);\n },\n setTree: (\n state,\n action: PayloadAction<TreePlane[]>,\n ) => {\n // Structural-sharing reconciliation against the REAL previous references (immer's\n // `original`, not the draft proxy or a `current` copy — those would defeat the\n // referential equality consumers rely on). Producers rebuild the whole tree from\n // scratch on relayout/spawn; this swaps every unchanged subtree back to its prior\n // reference so only genuinely-changed planes re-render.\n const previousTree = original(state.tree) as TreePlane[] | undefined;\n state.tree = spaceEngine.tree.logic.reconcileTree(\n previousTree,\n action.payload,\n );\n },\n setActiveUniverse: (\n state,\n action: PayloadAction<string>,\n ) => {\n state.activeUniverseID = action.payload;\n },\n flyMove: (\n state,\n action: PayloadAction<{\n forward?: number;\n strafe?: number;\n vertical?: number;\n yaw?: number;\n pitch?: number;\n }>,\n ) => {\n // Continuous first-person (\"fly\") step. Applies camera-relative translation +\n // look deltas in one shot (driven per animation frame by held keys / mouse),\n // mirroring the viewCamera* sign conventions. Pitch is clamped to avoid flipping\n // the view past vertical.\n const {\n forward = 0,\n strafe = 0,\n vertical = 0,\n yaw = 0,\n pitch = 0,\n } = action.payload;\n\n if (yaw !== 0) {\n state.rotationY = state.rotationY + yaw;\n }\n if (pitch !== 0) {\n state.rotationX = Math.max(-85, Math.min(85, state.rotationX + pitch));\n }\n if (forward !== 0) {\n state.translationZ += forward * Math.cos(toRadians(-state.rotationY));\n state.translationX += forward * Math.sin(toRadians(-state.rotationY));\n }\n if (strafe !== 0) {\n state.translationX += strafe * Math.cos(toRadians(state.rotationY));\n state.translationZ += strafe * Math.sin(toRadians(state.rotationY));\n }\n if (vertical !== 0) {\n state.translationY += vertical;\n }\n\n state.transform = computeMatrix(state);\n },\n spaceResetTransform: (\n state,\n ) => {\n state.scale = 1;\n state.rotationX = 0;\n state.rotationY = 0;\n state.translationX = 0;\n state.translationY = 0;\n state.translationZ = 0;\n state.transform = computeMatrix(state);\n },\n spaceFitToView: (\n state,\n ) => {\n // Frame all root planes: front-on (rotation 0), scaled + centered so the whole\n // layout fits the viewport. At rotation 0 a content point maps to screen as\n // screen = scale·point + translation, so centering the layout's bounding box on\n // the view center gives translation = viewCenter − scale·boxCenter.\n const roots = state.tree;\n if (!roots || roots.length === 0) {\n return;\n }\n\n let minX = Infinity;\n let maxX = -Infinity;\n let minY = Infinity;\n let maxY = -Infinity;\n for (const plane of roots) {\n const x = plane.location.translateX;\n const y = plane.location.translateY;\n const w = plane.width || 0;\n const h = plane.height || 0;\n minX = Math.min(minX, x);\n maxX = Math.max(maxX, x + w);\n minY = Math.min(minY, y);\n maxY = Math.max(maxY, y + h);\n }\n\n const boxWidth = Math.max(maxX - minX, 1);\n const boxHeight = Math.max(maxY - minY, 1);\n const viewWidth = state.viewSize.width;\n const viewHeight = state.viewSize.height;\n\n const margin = 0.85;\n const rawScale = Math.min(viewWidth / boxWidth, viewHeight / boxHeight) * margin;\n const scale = Math.min(Math.max(rawScale, SCALE_LOWER_LIMIT), SCALE_UPPER_LIMIT);\n\n const centerX = (minX + maxX) / 2;\n const centerY = (minY + maxY) / 2;\n\n state.rotationX = 0;\n state.rotationY = 0;\n state.translationZ = 0;\n state.scale = scale;\n state.translationX = viewWidth / 2 - scale * centerX;\n state.translationY = viewHeight / 2 - scale * centerY;\n state.transform = computeMatrix(state);\n },\n setViewSize: (\n state,\n action: PayloadAction<ViewSize>,\n ) => {\n state.viewSize = action.payload;\n },\n setSpaceSize: (\n state,\n action: PayloadAction<SpaceSize>,\n ) => {\n state.spaceSize = action.payload;\n },\n updateSpaceTreePlane: (\n state,\n action: PayloadAction<TreePlane>,\n ) => {\n const updatedTree = generalEngine.tree.updateTreePlane(state.tree, action.payload);\n state.tree = updatedTree;\n },\n updateSpaceLinkCoordinates: (\n state,\n action: PayloadAction<UpdateSpaceLinkCoordinatesPayload>,\n ) => {\n const {\n planeID,\n linkCoordinates,\n } = action.payload;\n\n const updatedTree = generalEngine.tree.updateTreeByPlaneIDWithLinkCoordinates(\n state.tree,\n planeID,\n linkCoordinates,\n );\n\n state.tree = updatedTree;\n },\n spaceSetView: (\n state,\n action: PayloadAction<PluridApplicationView>,\n ) => {\n state.view = action.payload;\n },\n spaceSetCulledView: (\n state,\n action: PayloadAction<PluridApplicationView>,\n ) => {\n state.culledView = action.payload;\n },\n\n removePlane: (\n state,\n action: PayloadAction<string>,\n ) => {\n const updatedTree = spaceEngine.tree.logic.removePlaneFromTree(\n objects.clone(state.tree),\n action.payload,\n );\n state.tree = updatedTree;\n },\n\n // #region link graph\n // Arbitrary plane↔plane relationships, kept separate from the parent→child `tree`.\n addPlaneLink: (\n state,\n action: PayloadAction<PlaneLink>,\n ) => {\n const link = action.payload;\n const exists = state.links.some(existing =>\n existing.id === link.id\n || (existing.sourcePlaneID === link.sourcePlaneID\n && existing.targetPlaneID === link.targetPlaneID\n && existing.kind === link.kind)\n );\n if (!exists) {\n state.links.push(link);\n }\n },\n removePlaneLink: (\n state,\n action: PayloadAction<string>,\n ) => {\n state.links = state.links.filter(\n link => link.id !== action.payload,\n );\n },\n updatePlaneLink: (\n state,\n action: PayloadAction<UpdatePlaneLinkPayload>,\n ) => {\n const {\n id,\n update,\n } = action.payload;\n const link = state.links.find(link => link.id === id);\n if (link) {\n Object.assign(link, update);\n }\n },\n setPlaneLinks: (\n state,\n action: PayloadAction<PlaneLink[]>,\n ) => {\n state.links = action.payload;\n },\n // Atomically replace the whole authored arrangement (tree + links) in ONE action — set\n // DIRECTLY (no `reconcileTree`), so an undo restore or a remote collaboration apply lands\n // EXACTLY, overriding the pinned-location carry in `reconcileNode`. One dispatch = one render,\n // which is what keeps the collaboration echo guard + the undo restore atomic.\n restoreArrangement: (\n state,\n action: PayloadAction<{ tree: TreePlane[]; links: PlaneLink[] }>,\n ) => {\n state.tree = action.payload.tree;\n state.links = action.payload.links;\n },\n // #endregion link graph\n\n // #region selection\n // A multi-selection working set, distinct from the hover-driven `activePlaneID`.\n setSelection: (\n state,\n action: PayloadAction<string[]>,\n ) => {\n // Dedupe defensively; selection is a set.\n state.selectedPlaneIDs = [...new Set(action.payload)];\n },\n toggleSelection: (\n state,\n action: PayloadAction<string>,\n ) => {\n const id = action.payload;\n if (state.selectedPlaneIDs.includes(id)) {\n state.selectedPlaneIDs = state.selectedPlaneIDs.filter(s => s !== id);\n } else {\n state.selectedPlaneIDs.push(id);\n }\n },\n addToSelection: (\n state,\n action: PayloadAction<string>,\n ) => {\n const id = action.payload;\n if (!state.selectedPlaneIDs.includes(id)) {\n state.selectedPlaneIDs.push(id);\n }\n },\n clearSelection: (\n state,\n ) => {\n if (state.selectedPlaneIDs.length > 0) {\n state.selectedPlaneIDs = [];\n }\n },\n setDraggingSelection: (\n state,\n action: PayloadAction<boolean>,\n ) => {\n state.draggingSelection = action.payload;\n },\n // Move every selected plane by a delta (space-local units) and pin it. Mutates the tree\n // DIRECTLY (Immer, no `reconcileTree`) so the move lands; `manuallyPositioned` then makes the\n // reconcile carry this location across later relayouts — see `reconcileNode`.\n transformSelectedPlanes: (\n state,\n action: PayloadAction<TransformSelectedPlanesPayload>,\n ) => {\n const {\n deltaX = 0,\n deltaY = 0,\n deltaZ = 0,\n } = action.payload;\n\n if (state.selectedPlaneIDs.length === 0\n || (deltaX === 0 && deltaY === 0 && deltaZ === 0)) {\n return;\n }\n\n const selected = new Set(state.selectedPlaneIDs);\n const walk = (nodes: TreePlane[]) => {\n for (const node of nodes) {\n if (selected.has(node.planeID)) {\n node.location.translateX += deltaX;\n node.location.translateY += deltaY;\n node.location.translateZ += deltaZ;\n node.manuallyPositioned = true;\n }\n if (node.children) {\n walk(node.children);\n }\n }\n };\n walk(state.tree);\n },\n // Edge-align the selection to nearby planes (typically on drag-release): find the smallest\n // X- and Y-offset (each within `threshold`) that lines a selected plane's left/top edge up with\n // an un-selected plane's, then shift the WHOLE selection by it so the group stays cohesive.\n // Operates on `location` (left/top corners), which live on the tree — plane SIZES are DOM-only.\n snapSelection: (\n state,\n action: PayloadAction<{ threshold?: number } | undefined>,\n ) => {\n const threshold = action.payload?.threshold ?? 12;\n if (state.selectedPlaneIDs.length === 0) {\n return;\n }\n\n const selected = new Set(state.selectedPlaneIDs);\n const all: TreePlane[] = [];\n const collect = (nodes: TreePlane[]) => {\n for (const node of nodes) {\n all.push(node);\n if (node.children) {\n collect(node.children);\n }\n }\n };\n collect(state.tree);\n\n const sel = all.filter(p => selected.has(p.planeID));\n const others = all.filter(p => !selected.has(p.planeID) && p.show !== false);\n if (sel.length === 0 || others.length === 0) {\n return;\n }\n\n // Nearest qualifying alignment offset on an axis (0 if none within threshold).\n const bestOffset = (axis: 'translateX' | 'translateY'): number => {\n let best = 0;\n let bestAbs = threshold;\n for (const s of sel) {\n for (const o of others) {\n const d = o.location[axis] - s.location[axis];\n const abs = Math.abs(d);\n // Strictly closer wins — so equal-distance candidates are a deterministic\n // first-wins, not \"whichever the loop visited last\".\n if (abs < bestAbs) {\n bestAbs = abs;\n best = d;\n }\n }\n }\n return best;\n };\n\n const offsetX = bestOffset('translateX');\n const offsetY = bestOffset('translateY');\n if (offsetX === 0 && offsetY === 0) {\n return;\n }\n\n for (const s of sel) {\n s.location.translateX += offsetX;\n s.location.translateY += offsetY;\n s.manuallyPositioned = true;\n }\n },\n // #endregion selection\n\n // No-op markers — the history middleware intercepts `space/undo` + `space/redo` and does the\n // real work (re-dispatching `setTree` with a snapshot). Defined here only so RTK generates\n // the `undo()` / `redo()` action creators + their types.\n undo: (_state) => {},\n redo: (_state) => {},\n },\n});\n// #endregion module\n\n\n\n// #region exports\nexport const actions = space.actions;\n\nexport {\n selectors,\n};\n\nexport const reducer = space.reducer;\n// #endregion exports\n","// #region imports\n // #region libraries\n import {\n interaction,\n planes,\n space,\n state,\n routing,\n general as generalEngine,\n utilities,\n cleanTemplate,\n } from '@plurid/plurid-engine';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\nconst {\n registerPlanes,\n getRegisteredPlanes,\n getPlanesRegistrar,\n getPluridPlaneIDByData,\n getRegisteredPlane,\n resolvePluridRoutePlaneData,\n resolvePluridPlaneData,\n Registrar: PluridPlanesRegistrar,\n} = planes;\n\nconst {\n IsoMatcher: PluridIsoMatcher,\n resolveRoute,\n computePlaneAddress,\n} = routing;\n// #endregion module\n\n\n\n// #region exports\nexport {\n interaction,\n planes,\n space,\n state,\n routing,\n generalEngine,\n utilities,\n cleanTemplate,\n\n registerPlanes,\n getRegisteredPlanes,\n getPlanesRegistrar,\n getPluridPlaneIDByData,\n getRegisteredPlane,\n resolvePluridRoutePlaneData,\n resolvePluridPlaneData,\n PluridPlanesRegistrar,\n\n PluridIsoMatcher,\n resolveRoute,\n computePlaneAddress,\n};\n// #endregion exports\n","// #region imports\n // #region libraries\n import {\n FOCUS_ANCHOR_SUFFIX,\n\n PluridStateSpace,\n } from '@plurid/plurid-data';\n // #endregion libraries\n\n\n // #region external\n import {\n interaction,\n } from '~services/engine';\n // #endregion external\n// #endregion imports\n\n\n\n// #region module\nconst {\n quaternion,\n matrix,\n} = interaction;\n\nconst {\n degToRad,\n} = quaternion;\n\nconst {\n matrixArrayToCSSMatrix,\n rotateMatrix,\n multiplyArrayOfMatrices,\n scaleMatrix,\n translateMatrix,\n} = matrix;\n\n\n\nexport const computeMatrix = (\n spaceState: PluridStateSpace,\n) => {\n const {\n translationX,\n translationY,\n translationZ,\n rotationX,\n rotationY,\n scale,\n } = spaceState;\n\n // Pivot rotation/scale about the center of the *view container* (tracked in state),\n // not the raw window. This keeps the pivot correct when the space is embedded,\n // resized, or rendered server-side — `window` is only a last-resort fallback.\n const viewWidth = spaceState.viewSize?.width\n ?? (typeof window === 'undefined' ? 1440 : window.innerWidth);\n const viewHeight = spaceState.viewSize?.height\n ?? (typeof window === 'undefined' ? 800 : window.innerHeight);\n\n const innerWidth = viewWidth / 2;\n const innerHeight = viewHeight / 2;\n\n const transformOriginX = translationX * -1 + innerWidth;\n const transformOriginY = translationY * -1 + innerHeight;\n const transformOriginZ = translationZ * -1;\n\n\n const rotationMatrix = rotateMatrix(degToRad(-rotationX), degToRad(-rotationY));\n const translationMatrix = translateMatrix(translationX, translationY, translationZ);\n const scalationMatrix = scaleMatrix(scale);\n\n const transformMatrix = multiplyArrayOfMatrices([\n translationMatrix,\n\n translateMatrix(transformOriginX, transformOriginY, transformOriginZ),\n rotationMatrix,\n translateMatrix(-transformOriginX, -transformOriginY, -transformOriginZ),\n\n scalationMatrix,\n ]);\n\n const transform = matrixArrayToCSSMatrix(transformMatrix);\n\n\n return transform;\n}\n\n\nexport const focusPluridPlaneAnchor = (\n planeID: string,\n) => {\n const selector = `[id='${planeID + FOCUS_ANCHOR_SUFFIX}']`;\n const focusAnchor: HTMLAnchorElement | null = document.querySelector(selector);\n\n if (focusAnchor) {\n focusAnchor.focus();\n }\n}\n// #endregion module\n","// #region imports\n // #region libraries\n import {\n createSelector,\n } from '@reduxjs/toolkit';\n\n import {\n TreePlane,\n PlaneLink,\n SpaceTransform,\n } from '@plurid/plurid-data';\n // #endregion libraries\n\n\n // #region external\n import {\n AppState,\n } from '~services/state/store';\n // #endregion external\n// #endregion imports\n\n\n\n// #region module\nexport const getSpace = (state: AppState) => state.space;\nexport const getLoading = (state: AppState): boolean => state.space.loading;\nexport const getResolvedLayout = (state: AppState): boolean => state.space.resolvedLayout;\nexport const getTransformMatrix = (state: AppState) => state.space.transform;\nexport const getAnimatedTransform = (state: AppState): boolean => state.space.animatedTransform;\nexport const getTransformTime = (state: AppState): number => state.space.transformTime;\n\nexport const getRotationX = (state: AppState): number => state.space.rotationX;\nexport const getRotationY = (state: AppState): number => state.space.rotationY;\nexport const getTranslationX = (state: AppState): number => state.space.translationX;\nexport const getTranslationY = (state: AppState): number => state.space.translationY;\nexport const getTranslationZ = (state: AppState): number => state.space.translationZ;\nexport const getScale = (state: AppState): number => state.space.scale;\nexport const getTree = (state: AppState): TreePlane[] => state.space.tree;\n// Memoized: returns a stable object reference unless one of the six transform scalars\n// changes, so consumers (Viewcube, View) don't re-render on unrelated state updates.\nexport const getTransform = createSelector(\n [\n getRotationX,\n getRotationY,\n getTranslationX,\n getTranslationY,\n getTranslationZ,\n getScale,\n ],\n (\n rotationX,\n rotationY,\n translationX,\n translationY,\n translationZ,\n scale,\n ) => ({\n rotationX,\n rotationY,\n translationX,\n translationY,\n translationZ,\n scale,\n } as SpaceTransform),\n)\nexport const getActiveUniverseID = (state: AppState) => state.space.activeUniverseID;\n\nexport const getView = (state: AppState) => state.space.view;\nexport const getViewSize = (state: AppState) => state.space.viewSize;\nexport const getCulledView = (state: AppState) => state.space.culledView;\n\nexport const getActivePlaneID = (state: AppState) => state.space.activePlaneID;\nexport const getIsolatePlane = (state: AppState) => state.space.isolatePlane;\nexport const getLastClosedPlane = (state: AppState) => state.space.lastClosedPlane;\n\nexport const getSelectedPlaneIDs = (state: AppState): string[] => state.space.selectedPlaneIDs;\nexport const getDraggingSelection = (state: AppState): boolean => state.space.draggingSelection;\n\n/**\n * Factory for a memoized \"is THIS plane selected\" selector. One per connected plane (via `connect`'s\n * `makeMapStateToProps` form), so each plane reads a stable boolean and re-renders only when its own\n * selected-ness flips — not whenever any other plane's selection changes.\n */\nexport const makeGetIsPlaneSelected = () => createSelector(\n [\n getSelectedPlaneIDs,\n (_state: AppState, planeID: string | undefined) => planeID,\n ],\n (selectedPlaneIDs, planeID) => (planeID\n ? selectedPlaneIDs.includes(planeID)\n : false),\n);\n\n\n// Normalized `planeID -> node` index, rebuilt ONLY when the tree reference changes (so it is\n// NOT recomputed during the per-frame transform dispatches of an orbit/pan/zoom gesture, which\n// leave `state.space.tree` untouched). Because tree mutations are structurally shared\n// (`updateTreePlane`), an unchanged plane keeps the SAME node reference across rebuilds.\nconst buildPlaneIndex = (\n tree: TreePlane[],\n): Map<string, TreePlane> => {\n const index = new Map<string, TreePlane>();\n const walk = (planes: TreePlane[]) => {\n for (const plane of planes) {\n if (plane.planeID) {\n index.set(plane.planeID, plane);\n }\n if (plane.children && plane.children.length > 0) {\n walk(plane.children);\n }\n }\n };\n walk(tree);\n return index;\n};\n\nexport const getPlaneIndex = createSelector(\n [getTree],\n buildPlaneIndex,\n);\n\n/**\n * Factory for a PER-INSTANCE memoized \"resolve a plane node by id\" selector. Use one per\n * connected component (via `connect`'s `makeMapStateToProps` factory form) so each plane's\n * lookup is an O(1) `Map.get` off the shared, memoized index — instead of every plane walking\n * the whole tree on every dispatch (which made the orbit hot path O(n²)). Returns a STABLE\n * node reference for an unchanged plane, so `connect` can bail out of its re-render.\n */\nexport const makeGetTreePlaneByID = () => createSelector(\n [\n getPlaneIndex,\n (_state: AppState, planeID: string | undefined) => planeID,\n ],\n (index, planeID) => (planeID ? index.get(planeID) : undefined),\n);\n\n\n// #region link graph\nexport const getPlaneLinks = (state: AppState): PlaneLink[] => state.space.links;\n\n/**\n * Factory for a memoized \"links pointing TO this plane\" selector (backlinks). One per connected\n * component (via `connect`'s `makeMapStateToProps` form). Recomputes only when `links` or the id\n * changes — NOT during the per-frame transform dispatches of an orbit (which leave `links` alone).\n */\nexport const makeGetBacklinks = () => createSelector(\n [\n getPlaneLinks,\n (_state: AppState, planeID: string | undefined) => planeID,\n ],\n (links, planeID) => (planeID\n ? links.filter(link => link.targetPlaneID === planeID)\n : []),\n);\n\n/**\n * Factory for a memoized \"all edges incident to this plane\" selector (either direction).\n */\nexport const makeGetLinksForPlane = () => createSelector(\n [\n getPlaneLinks,\n (_state: AppState, planeID: string | undefined) => planeID,\n ],\n (links, planeID) => (planeID\n ? links.filter(link =>\n link.sourcePlaneID === planeID\n || link.targetPlaneID === planeID)\n : []),\n);\n// #endregion link graph\n// #endregion module\n","// #region imports\n // #region libraries\n import {\n createSlice,\n PayloadAction,\n } from '@reduxjs/toolkit';\n\n\n import {\n Theme,\n plurid,\n } from '@plurid/plurid-themes';\n // #endregion libraries\n\n\n // #region internal\n import type {\n AppState,\n } from '~services/state/store';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nexport interface ThemesState {\n general: Theme;\n interaction: Theme;\n}\n\n\nconst initialState: ThemesState = {\n general: plurid,\n interaction: plurid,\n};\n\n\nexport const themes = createSlice({\n name: 'themes',\n initialState,\n reducers: {\n setGeneralTheme: (\n state,\n action: PayloadAction<Theme>,\n ) => {\n state.general = action.payload;\n },\n setInteractionTheme: (\n state,\n action: PayloadAction<Theme>,\n ) => {\n state.interaction = action.payload;\n },\n },\n});\n// #endregion module\n\n\n\n// #region exports\nexport const actions = themes.actions;\n\n\nexport const getGeneralTheme = (state: AppState) => state.themes.general;\nexport const getInteractionTheme = (state: AppState) => state.themes.general;\n\nexport const selectors = {\n getGeneralTheme,\n getInteractionTheme,\n};\n\n\nexport const reducer = themes.reducer;\n// #endregion exports\n","// #region imports\n // #region libraries\n import {\n createSlice,\n PayloadAction,\n } from '@reduxjs/toolkit';\n // #endregion libraries\n\n\n // #region internal\n import type {\n AppState,\n } from '~services/state/store';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nexport interface UIState {\n toolbarScrollPosition: number;\n}\n\n\nconst initialState: UIState = {\n toolbarScrollPosition: 0,\n};\n\n\nexport const ui = createSlice({\n name: 'ui',\n initialState,\n reducers: {\n setUIToolbarScrollPosition: (\n state,\n action: PayloadAction<number>,\n ) => {\n state.toolbarScrollPosition = action.payload;\n },\n },\n});\n// #endregion module\n\n\n\n// #region exports\nexport const actions = ui.actions;\n\n\nexport const getToolbarScrollPosition = (state: AppState) => state.ui.toolbarScrollPosition;\n\nexport const selectors = {\n getToolbarScrollPosition,\n};\n\n\nexport const reducer = ui.reducer;\n// #endregion exports\n","// #region imports\n // #region internal\n import * as configuration from './configuration';\n import * as general from './general';\n import * as shortcuts from './shortcuts';\n import * as space from './space';\n import * as themes from './themes';\n import * as ui from './ui';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region exports\nexport default {\n configuration,\n general,\n shortcuts,\n space,\n themes,\n ui,\n};\n// #endregion exports\n","// #region imports\n // #region libraries\n import {\n combineReducers,\n } from '@reduxjs/toolkit';\n // #endregion libraries\n\n\n // #region external\n import modules from '~services/state/modules';\n // #endregion external\n// #endregion imports\n\n\n\n// #region module\nconst reducer = combineReducers({\n configuration: modules.configuration.reducer,\n general: modules.general.reducer,\n shortcuts: modules.shortcuts.reducer,\n space: modules.space.reducer,\n themes: modules.themes.reducer,\n ui: modules.ui.reducer,\n});\n// #endregion module\n\n\n\n// #region exports\nexport type AppState = ReturnType<typeof reducer>;\n\nexport default reducer;\n// #endregion exports\n","// #region imports\n // #region libraries\n import {\n TreePlane,\n PlaneLink,\n } from '@plurid/plurid-data';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\n/**\n * A SIGNATURE of the authored arrangement — what a user can deliberately change, and nothing a\n * relayout touches on its own. It folds together:\n * - structure: each plane's `planeID:show`\n * - manual positions: a `manuallyPositioned` plane's rounded location\n * - the link graph: each link's `id:source>target:kind`\n *\n * It DELIBERATELY excludes auto-layout positions. That single choice powers two features:\n * - **undo** records one entry per real authoring change, never per relayout reflow;\n * - **collaboration** emits a sync only on a real change, never a measurement storm.\n * Both consume this so they agree on exactly \"what counts as a change\".\n */\nexport const arrangementSignature = (\n tree: TreePlane[],\n links: PlaneLink[],\n): string => {\n const parts: string[] = [];\n const walk = (nodes: TreePlane[]) => {\n for (const node of nodes) {\n // A node with no stable id can't be a meaningful signature entry — skip it (but still\n // recurse), so a malformed node can't collide with others as \"undefined:…\".\n if (node.planeID) {\n let entry = node.planeID + ':' + (node.show ? 1 : 0);\n if (node.manuallyPositioned) {\n entry += ':' + Math.round(node.location.translateX)\n + ',' + Math.round(node.location.translateY)\n + ',' + Math.round(node.location.translateZ);\n }\n parts.push(entry);\n }\n if (node.children) {\n walk(node.children);\n }\n }\n };\n walk(Array.isArray(tree) ? tree : []);\n parts.sort();\n\n const linkSig = (Array.isArray(links) ? links : [])\n .map(link => link.id + ':' + link.sourcePlaneID + '>' + link.targetPlaneID + ':' + (link.kind || ''))\n .sort()\n .join('|');\n\n return parts.join('|') + '#' + linkSig;\n}\n// #endregion module\n","// #region imports\n // #region libraries\n import {\n Middleware,\n } from '@reduxjs/toolkit';\n // #endregion libraries\n\n\n // #region external\n import {\n arrangementSignature,\n } from '~services/logic/arrangement/signature';\n // #endregion external\n// #endregion imports\n\n\n\n// #region module\nconst UNDO = 'space/undo';\nconst REDO = 'space/redo';\n\n/** Bound stack depth. Snapshots hold tree/link references, so this is cheap; the cap just bounds memory. */\nconst HISTORY_LIMIT = 100;\n\n\ninterface ArrangementSnapshot {\n tree: unknown;\n links: unknown;\n}\n\n\n/**\n * Spatial undo/redo over the engine's authored arrangement: structure (spawn / close / open), manual\n * positions (drag-move / snap), and the link graph.\n *\n * Records one snapshot per change in the shared `arrangementSignature` (structure + pinned positions +\n * links) — so a single user action is one entry, while the relayout reflows it triggers are ignored\n * (they don't change the signature), which is what lets a restore stick instead of being re-reconciled\n * away. It is STATELESS: it compares THIS action's before/after signatures rather than tracking a\n * running `lastSignature` — a tracked signature would go stale across a skipped (`meta.remote`) remote\n * apply and mis-record the next relayout as a phantom entry. Watching the state before/after each\n * action (not specific action types) covers both the `setTree`/`setSpaceField` paths AND the direct-\n * mutation reducers (`transformSelectedPlanes`, `snapSelection`, `addPlaneLink`, …). Restore re-sets\n * tree + links atomically via `restoreArrangement` (raw, exact, no reconcile). Snapshots are references\n * to the immutable state slices, so the stacks are memory-cheap; history is closure-local (never\n * persisted, never serialized, never renders). Remote collaboration mutations (`meta.remote`) are\n * skipped — a peer's change isn't in YOUR undo.\n */\nexport const createHistoryMiddleware = (): Middleware => {\n const undoStack: ArrangementSnapshot[] = [];\n let redoStack: ArrangementSnapshot[] = [];\n let applying = false;\n\n const snapshotOf = (state: any): ArrangementSnapshot => ({\n tree: state.space.tree,\n links: state.space.links,\n });\n\n const restore = (dispatch: any, snapshot: ArrangementSnapshot) => {\n applying = true;\n dispatch({\n type: 'space/restoreArrangement',\n payload: { tree: snapshot.tree, links: snapshot.links },\n });\n applying = false;\n };\n\n return (store) => (next) => (action: any) => {\n if (action.type === UNDO) {\n if (undoStack.length === 0) {\n return undefined;\n }\n const previous = undoStack.pop() as ArrangementSnapshot;\n redoStack.push(snapshotOf(store.getState()));\n restore(store.dispatch, previous);\n return undefined;\n }\n\n if (action.type === REDO) {\n if (redoStack.length === 0) {\n return undefined;\n }\n const future = redoStack.pop() as ArrangementSnapshot;\n undoStack.push(snapshotOf(store.getState()));\n restore(store.dispatch, future);\n return undefined;\n }\n\n const previousState = store.getState() as any;\n const previousTree = previousState.space.tree;\n const previousLinks = previousState.space.links;\n\n const result = next(action);\n\n // Don't record our own restores, or a peer's remotely-applied change.\n if (applying || action.meta?.remote) {\n return result;\n }\n\n const nextState = store.getState() as any;\n // Fast path: neither slice changed reference (e.g. the per-frame orbit transform actions).\n if (nextState.space.tree === previousTree\n && nextState.space.links === previousLinks) {\n return result;\n }\n\n // Compare THIS action's before/after arrangement. A relayout reflow leaves the signature\n // unchanged (it only moves auto-layout positions) and is ignored; a real authoring change\n // (plane added/removed/shown/hidden/moved, link edited) flips it and is recorded.\n const previousSignature = arrangementSignature(previousTree, previousLinks);\n const nextSignature = arrangementSignature(nextState.space.tree, nextState.space.links);\n if (previousSignature !== nextSignature) {\n undoStack.push({ tree: previousTree, links: previousLinks });\n if (undoStack.length > HISTORY_LIMIT) {\n undoStack.shift();\n }\n redoStack = []; // a fresh user action invalidates the redo branch\n }\n\n return result;\n };\n}\n// #endregion module\n\n\n\n// #region exports\nexport default createHistoryMiddleware;\n// #endregion exports\n","// #region imports\n // #region libraries\n import {\n configureStore,\n Store,\n } from '@reduxjs/toolkit';\n // #endregion libraries\n\n\n // #region external\n import reducer, {\n AppState,\n } from '../reducer';\n\n import createHistoryMiddleware from '../../middleware/history';\n // #endregion external\n// #endregion imports\n\n\n\n// #region module\nexport interface PluridStoreOptions {\n /** Include the spatial undo/redo history middleware. Default `true`. */\n history?: boolean;\n}\n\n\nconst store: (\n preloadedState: AppState | {},\n options?: PluridStoreOptions,\n) => Store<AppState> = (\n preloadedState: AppState | {},\n options?: PluridStoreOptions,\n) => configureStore({\n preloadedState,\n reducer,\n devTools: false,\n // `history` defaults to true; an explicit `false` drops the middleware entirely (no per-action\n // signature cost, no snapshot memory) — for hosts owning their own undo or never mutating the\n // arrangement.\n middleware: (getDefaultMiddleware) =>\n options?.history === false\n ? getDefaultMiddleware()\n : getDefaultMiddleware().concat(createHistoryMiddleware()),\n});\n\n\nexport type AppDispatch = ReturnType<typeof store>['dispatch'];\n// #endregion module\n\n\n\n// #region exports\nexport default store;\n// #endregion exports\n","// #region imports\n // #region libraries\n import {\n configureStore,\n Store,\n } from '@reduxjs/toolkit';\n // #endregion libraries\n\n\n // #region external\n import reducer, {\n AppState,\n } from '../reducer';\n\n import createHistoryMiddleware from '../../middleware/history';\n // #endregion external\n// #endregion imports\n\n\n\n// #region module\nexport interface PluridStoreOptions {\n /** Include the spatial undo/redo history middleware. Default `true`. */\n history?: boolean;\n}\n\n\nconst store: (\n preloadedState: AppState | {},\n options?: PluridStoreOptions,\n) => Store<AppState> = (\n preloadedState: AppState | {},\n options?: PluridStoreOptions,\n) => configureStore({\n preloadedState,\n reducer,\n devTools: true,\n // `history` defaults to true; an explicit `false` drops the middleware entirely (no per-action\n // signature cost, no snapshot memory) — for hosts owning their own undo or never mutating the\n // arrangement.\n middleware: (getDefaultMiddleware) =>\n options?.history === false\n ? getDefaultMiddleware()\n : getDefaultMiddleware().concat(createHistoryMiddleware()),\n});\n\n\nexport type AppDispatch = ReturnType<typeof store>['dispatch'];\n// #endregion module\n\n\n\n// #region exports\nexport default store;\n// #endregion exports\n","// #region imports\n // #region libraries\n import {\n ThunkAction,\n Action,\n } from '@reduxjs/toolkit';\n // #endregion libraries\n\n\n // #region external\n import environment from '~services/utilities/environment';\n // #endregion external\n\n\n // #region internal\n import storeProduction, {\n AppDispatch as AppDispatchProduction,\n } from './production';\n\n import storeDevelopment, {\n AppDispatch as AppDispatchDevelopment,\n } from './development';\n\n import type {\n AppState,\n } from './reducer';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\ntype AppDispatch =\n | AppDispatchProduction\n | AppDispatchDevelopment;\n\ntype AppThunk = ThunkAction<void, AppState, unknown, Action>;\n\n\nconst store = environment.production\n ? storeProduction\n : storeDevelopment;\n// #endregion module\n\n\n\n// #region exports\nexport {\n AppState,\n AppDispatch,\n AppThunk,\n};\n\nexport default store;\n// #endregion exports\n","// #region imports\n // #region libraries\n import React from 'react';\n\n import {\n ReactReduxContextValue,\n } from 'react-redux';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\n/**\n * The engine's private react-redux context. Every plurid `connect()` passes `{ context: StateContext }`\n * so the engine store stays isolated from any Redux store the host app already runs — without it, a\n * connected plurid component would silently bind to the host's store (or none) and fail at runtime.\n *\n * Typed as a real `ReactReduxContextValue` context (state generic left `any` to avoid a circular import\n * with the store) and defaulted to `null` — react-redux's own sentinel for \"no Provider above me\", which\n * its hooks/`connect` detect and throw on. The old `createContext<any>({})` swallowed that signal: an\n * empty object reads as a present-but-broken store, turning a clear \"missing Provider\" error into a\n * confusing downstream crash.\n */\nconst StateContext = React.createContext<ReactReduxContextValue<any> | null>(null);\n// #endregion module\n\n\n\n// #region exports\nexport default StateContext;\n// #endregion exports\n","// #region imports\n // #region libraries\n import {\n SpaceTransform,\n } from '@plurid/plurid-data';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\n/**\n * A \"viewpoint\" is the camera/space transform — the 6 scalars in `SpaceTransform`\n * (`rotationX/Y`, `translationX/Y/Z`, `scale`). These helpers make a viewpoint a first-class,\n * encodable value so it can ride the URL (deep-links, \"share from here\"), be bookmarked, or be\n * sequenced into a tour. Restore by dispatching `setSpaceLocation(viewpoint)` — it sets the\n * scalars AND recomputes the rendered `matrix3d` (plain `setTransform` does not recompute).\n */\n\n/** Query-string key the viewpoint rides on, e.g. `?v=12,…,0.4068`. */\nexport const VIEWPOINT_PARAM = 'v';\n\nconst PRECISION = 4;\nconst factor = 10 ** PRECISION;\nconst round = (value: number): number => Math.round(value * factor) / factor;\n\nconst ORDER: (keyof SpaceTransform)[] = [\n 'rotationX',\n 'rotationY',\n 'translationX',\n 'translationY',\n 'translationZ',\n 'scale',\n];\n\n\n/**\n * Encode a viewpoint as a compact, URL-safe, human-readable tuple\n * `rotationX,rotationY,translationX,translationY,translationZ,scale` (each rounded).\n */\nexport const encodeViewpoint = (\n transform: SpaceTransform,\n): string => {\n return ORDER\n .map(key => round(transform[key]))\n .join(',');\n};\n\n\n/**\n * Decode a viewpoint tuple. Returns `null` for anything that is not exactly 6 finite numbers with a\n * positive `scale` — so a malformed or hand-edited `?v=` is ignored rather than corrupting the view.\n */\nexport const decodeViewpoint = (\n encoded: string | null | undefined,\n): SpaceTransform | null => {\n if (!encoded) {\n return null;\n }\n\n const parts = encoded.split(',').map(part => Number(part));\n if (parts.length !== ORDER.length) {\n return null;\n }\n if (parts.some(value => !Number.isFinite(value))) {\n return null;\n }\n\n const [\n rotationX,\n rotationY,\n translationX,\n translationY,\n translationZ,\n scale,\n ] = parts;\n\n if (scale <= 0) {\n return null;\n }\n\n return {\n rotationX,\n rotationY,\n translationX,\n translationY,\n translationZ,\n scale,\n };\n};\n\n\n/**\n * Read the viewpoint encoded in the current URL's `?<param>=` (or `null` if absent/invalid). The\n * param name defaults to `v` but is host-configurable. SSR-safe.\n */\nexport const readViewpointFromURL = (\n param: string = VIEWPOINT_PARAM,\n): SpaceTransform | null => {\n if (typeof window === 'undefined') {\n return null;\n }\n\n const raw = new URLSearchParams(window.location.search).get(param);\n return decodeViewpoint(raw);\n};\n\n\n/**\n * Reflect a viewpoint into the URL `?<param>=` via `replaceState` — preserving pathname, other query\n * params, and hash, and NOT pushing a history entry (the transform changes per-frame during orbit;\n * pushState would flood the back-stack). SSR-safe.\n */\nexport const writeViewpointToURL = (\n transform: SpaceTransform,\n param: string = VIEWPOINT_PARAM,\n): void => {\n if (typeof window === 'undefined') {\n return;\n }\n\n const url = new URL(window.location.href);\n url.searchParams.set(param, encodeViewpoint(transform));\n window.history.replaceState(window.history.state, '', url.toString());\n};\n// #endregion module\n","// #region imports\n // #region libraries\n import React from 'react';\n\n import {\n PluridContext,\n } from '@plurid/plurid-data';\n // #endregion libraries\n\n\n // #region external\n import {\n PluridReactComponent,\n } from '~data/interfaces';\n // #endregion external\n// #endregion imports\n\n\n\n// #region module\nconst Context = React.createContext<PluridContext<PluridReactComponent> | null>(null);\n// #endregion module\n\n\n\n// #region exports\nexport default Context;\n// #endregion exports\n","// #region imports\n // #region external\n import modules from '~services/state/modules';\n // #endregion external\n// #endregion imports\n\n\n\n// #region exports\nexport default {\n configuration: modules.configuration.actions,\n general: modules.general.actions,\n shortcuts: modules.shortcuts.actions,\n space: modules.space.actions,\n themes: modules.themes.actions,\n ui: modules.ui.actions,\n};\n// #endregion exports\n","// #region imports\n // #region libraries\n import {\n PluridPlane,\n TreePlane,\n PluridApplicationView,\n PluridPartialConfiguration,\n } from '@plurid/plurid-data';\n // #endregion libraries\n\n\n // #region external\n import {\n PluridReactComponent,\n } from '~data/interfaces';\n\n import {\n routing,\n interaction,\n space,\n generalEngine,\n\n resolvePluridPlaneData,\n PluridPlanesRegistrar,\n } from '~services/engine';\n // #endregion external\n// #endregion imports\n\n\n\n// #region module\nconst {\n quaternion,\n transform,\n matrix,\n} = interaction;\n\n\nconst {\n degToRad,\n radToDeg,\n} = quaternion;\n\nconst {\n multiplyMatricesArray,\n translateMatrix,\n rotateYMatrix,\n matrixToCSSMatrix,\n arrayToMatrix,\n inverseMatrix,\n} = transform.general;\n\nconst {\n getTransformRotate,\n getTransformTranslate,\n getTransformScale,\n} = transform.matrix3d;\n\nconst {\n rotateMatrix,\n translateMatrix: translateMatrixArray,\n scaleMatrix,\n multiplyArrayOfMatrices,\n} = matrix;\n\n\nexport const computeApplication = (\n planes: PluridPlane<PluridReactComponent>[] | undefined,\n configuration: PluridPartialConfiguration | undefined,\n view: PluridApplicationView | undefined,\n origin = 'origin',\n) => {\n const appConfiguration = generalEngine.configuration.merge(configuration);\n\n const currentView = view || [];\n const absoluteView = [];\n\n for (const viewItem of currentView) {\n if (typeof viewItem === 'string') {\n const viewPath = routing.resolveRoute(viewItem);\n if (!viewPath) {\n continue;\n }\n absoluteView.push(viewPath.route);\n }\n }\n\n const registrar = new PluridPlanesRegistrar(\n planes,\n origin,\n );\n const registrarPlanes = registrar.getAll();\n\n const spaceTree = new space.tree.Tree(\n {\n planes: registrarPlanes,\n configuration: appConfiguration,\n view: absoluteView,\n },\n origin,\n );\n const computedTree = spaceTree.compute();\n\n\n const data = {\n computedTree,\n // planesPropertiesReference,\n appConfiguration,\n };\n\n return data;\n}\n\n\nexport const computePlaneLocation = (\n plane: TreePlane,\n) => {\n const {\n location,\n } = plane;\n\n const {\n translateX,\n translateY,\n translateZ,\n rotateY,\n } = location;\n\n\n const getTransform = () => {\n const innerWidth = typeof window === 'undefined'\n ? 720\n : window.innerWidth / 2;\n const innerHeight = typeof window === 'undefined'\n ? 400\n : window.innerHeight / 2;\n\n const transformOriginX = translateX * -1 + innerWidth;\n const transformOriginY = translateY * -1 + innerHeight;\n const transformOriginZ = translateZ * -1;\n\n const rotationMatrix = rotateMatrix(0, degToRad(rotateY));\n const translationMatrix = translateMatrixArray(translateX, translateY, translateZ);\n const scalationMatrix = scaleMatrix(1);\n\n const transformMatrix = multiplyArrayOfMatrices([\n translationMatrix,\n\n translateMatrixArray(transformOriginX, transformOriginY, transformOriginZ),\n rotationMatrix,\n translateMatrixArray(-transformOriginX, -transformOriginY, -transformOriginZ),\n\n scalationMatrix,\n ]);\n const inverseTransformMatrix = inverseMatrix(\n arrayToMatrix(transformMatrix),\n );\n\n const matrix3dTransformMatrix = matrixToCSSMatrix(inverseTransformMatrix);\n\n const rotate = getTransformRotate(matrix3dTransformMatrix);\n const translate = getTransformTranslate(matrix3dTransformMatrix);\n const scale = getTransformScale(matrix3dTransformMatrix);\n\n const transform = {\n translationX: translate.translateX,\n translationY: translate.translateY,\n translationZ: translate.translateZ,\n rotationX: radToDeg(rotate.rotateX),\n rotationY: radToDeg(rotate.rotateY),\n scale: scale.scale,\n };\n\n return transform;\n }\n const transform = getTransform();\n\n\n const getMatrix3d = () => {\n const zSign1 = rotateY < 100 ? 1 : -1;\n const zSign2 = rotateY < 100 ? -1 : 1;\n const xOffset = rotateY < 100\n ? plane.parentPlaneID ? 200 : 0\n : 0;\n\n const newMatrix = multiplyMatricesArray([\n translateMatrix(-translateX, -translateY, zSign1 * translateZ),\n rotateYMatrix(degToRad(rotateY)),\n translateMatrix(translateX, translateY, zSign2 * translateZ),\n\n translateMatrix(-(translateX + xOffset), -translateY, zSign1 * translateZ),\n ]);\n\n const matrix3d = matrixToCSSMatrix(newMatrix);\n\n return matrix3d;\n }\n const matrix3d = getMatrix3d();\n\n\n return {\n transform,\n matrix3d,\n };\n}\n// #endregion module\n","// #region imports\n // #region libraries\n import { AnyAction, ThunkDispatch } from '@reduxjs/toolkit';\n\n\n import {\n PLURID_DEFAULT_ANIMATED_TRANSFORM_TIMEOUT,\n\n TreePlane,\n } from '@plurid/plurid-data';\n // #endregion libraries\n\n\n // #region external\n import actions from '~services/state/actions';\n import { AppState } from '~services/state/store';\n import {\n DispatchAction,\n } from '~data/interfaces';\n\n import {\n space,\n } from '~services/engine';\n\n import {\n computePlaneLocation,\n } from '../computing';\n\n import {\n focusPluridPlaneAnchor,\n } from '../transform';\n // #endregion external\n// #endregion imports\n\n\n\n// #region module\nexport const factoryUseAnimatedTransform = () => {\n let timeout: ReturnType<typeof setTimeout> | undefined;\n\n return (\n dispatch: ThunkDispatch<{}, {}, AnyAction>,\n ) => {\n const dispatchSetAnimatedTransform: DispatchAction<typeof actions.space.setAnimatedTransform> = (\n payload,\n ) => dispatch(\n actions.space.setAnimatedTransform(payload),\n );\n\n dispatchSetAnimatedTransform(true);\n\n if (timeout) {\n clearTimeout(timeout);\n }\n\n timeout = setTimeout(() => {\n dispatchSetAnimatedTransform(false);\n }, PLURID_DEFAULT_ANIMATED_TRANSFORM_TIMEOUT);\n }\n}\n\nexport const useAnimatedTransform = factoryUseAnimatedTransform();\n\n\n\nexport const navigateToPluridPlane = (\n dispatch: ThunkDispatch<{}, {}, AnyAction>,\n plane: TreePlane | undefined,\n event?: React.MouseEvent,\n deisolate: boolean = true,\n) => {\n if (event && (event.ctrlKey || event.metaKey)) {\n // Only navigate at pure link click.\n return;\n }\n\n if (!plane) {\n return;\n }\n\n\n const dispatchSetTransform: DispatchAction<typeof actions.space.setTransform> = (\n payload,\n ) => dispatch(\n actions.space.setTransform(payload),\n );\n const dispatchSetSpaceField: DispatchAction<typeof actions.space.setSpaceField> = (\n payload,\n ) => dispatch(\n actions.space.setSpaceField(payload),\n );\n\n const {\n matrix3d,\n transform,\n } = computePlaneLocation(plane);\n\n useAnimatedTransform(dispatch);\n\n dispatchSetSpaceField({\n field: 'transform',\n value: matrix3d,\n });\n\n dispatchSetTransform({\n ...transform,\n });\n\n if (deisolate) {\n dispatchSetSpaceField({\n field: 'isolatePlane',\n value: '',\n });\n }\n\n setTimeout(() => {\n focusPluridPlaneAnchor(plane.planeID);\n\n dispatchSetSpaceField({\n field: 'activePlaneID',\n value: plane.planeID,\n });\n }, PLURID_DEFAULT_ANIMATED_TRANSFORM_TIMEOUT);\n}\n\n\n\nexport const getActivePlane = (\n state: AppState,\n) => {\n const {\n activePlaneID,\n tree,\n } = state.space;\n\n if (!activePlaneID) {\n return;\n }\n\n const treePlane = space.tree.logic.getTreePlaneByID(\n tree,\n activePlaneID,\n );\n\n return treePlane;\n}\n\n\nexport const focusActivePlane = (\n dispatch: ThunkDispatch<{}, {}, AnyAction>,\n state: AppState,\n) => {\n const activePlane = getActivePlane(state);\n if (!activePlane) {\n return;\n }\n\n const event = undefined;\n const deisolate = false;\n\n navigateToPluridPlane(\n dispatch,\n activePlane,\n event,\n deisolate,\n );\n}\n\n\nexport const focusParentActivePlane = (\n dispatch: ThunkDispatch<{}, {}, AnyAction>,\n state: AppState,\n) => {\n const activePlane = getActivePlane(state);\n if (!activePlane || !activePlane.parentPlaneID) {\n return;\n }\n\n const parentPlane = space.tree.logic.getTreePlaneByID(\n state.space.tree,\n activePlane.parentPlaneID,\n );\n if (!parentPlane) {\n return;\n }\n\n navigateToPluridPlane(\n dispatch,\n parentPlane,\n );\n}\n\n\nexport const findRootIndex = (\n tree: TreePlane[],\n activePlaneID: string,\n currentRootIndex?: number,\n): number | undefined => {\n for (const [index, plane] of tree.entries()) {\n if (plane.planeID === activePlaneID) {\n return currentRootIndex ?? index;\n }\n\n if (\n plane.children\n ) {\n const rootIndex = findRootIndex(\n plane.children,\n activePlaneID,\n index,\n );\n\n if (typeof rootIndex === 'number') {\n return rootIndex;\n }\n }\n }\n\n return;\n}\n\n\nexport const navigateToRoot = (\n dispatch: ThunkDispatch<{}, {}, AnyAction>,\n state: AppState,\n type: 'previous' | 'next',\n) => {\n const {\n activePlaneID,\n tree,\n } = state.space;\n\n const rootIndex = findRootIndex(\n tree,\n activePlaneID,\n );\n if (typeof rootIndex !== 'number') {\n return;\n }\n\n const treeIndex = type === 'previous'\n ? rootIndex - 1 || 0\n : rootIndex + 1;\n\n let root = tree[treeIndex];\n if (!root) {\n // cycle over tree\n if (type === 'previous') {\n root = tree[tree.length - 1];\n } else {\n root = tree[0];\n }\n\n if (!root) {\n return;\n }\n }\n\n navigateToPluridPlane(\n dispatch,\n root,\n undefined,\n true,\n );\n}\n\n\nexport const focusPreviousRoot = (\n dispatch: ThunkDispatch<{}, {}, AnyAction>,\n state: AppState,\n) => {\n navigateToRoot(\n dispatch,\n state,\n 'previous',\n );\n}\n\n\nexport const focusNextRoot = (\n dispatch: ThunkDispatch<{}, {}, AnyAction>,\n state: AppState,\n) => {\n navigateToRoot(\n dispatch,\n state,\n 'next',\n );\n}\n\n\nexport const focusRootIndex = (\n dispatch: ThunkDispatch<{}, {}, AnyAction>,\n state: AppState,\n index: number,\n) => {\n const {\n tree,\n } = state.space;\n\n const root = tree[index];\n if (!root) {\n return;\n }\n\n navigateToPluridPlane(\n dispatch,\n root,\n undefined,\n true,\n );\n}\n\n\nexport const focusRootID = (\n dispatch: ThunkDispatch<{}, {}, AnyAction>,\n state: AppState,\n id: string,\n) => {\n const {\n tree,\n } = state.space;\n\n const root = tree.find(plane => plane.planeID === id);\n if (!root) {\n return;\n }\n\n navigateToPluridPlane(\n dispatch,\n root,\n undefined,\n true,\n );\n}\n// #endregion module\n","// #region imports\n // #region libraries\n import {\n PLURID_PUBSUB_TOPIC,\n\n PluridPubSub as IPluridPubSub,\n } from '@plurid/plurid-data';\n // #endregion libraries\n\n\n // #region external\n import { AppState } from '~services/state/store';\n // #endregion external\n// #endregion imports\n\n\n\n// #region module\nexport const refreshActivePlane = (\n state: AppState,\n pubsub: IPluridPubSub,\n) => {\n const {\n activePlaneID: id,\n } = state.space;\n\n if (!id) {\n return;\n }\n\n pubsub.publish({\n topic: PLURID_PUBSUB_TOPIC.REFRESH_PLANE,\n data: {\n id,\n },\n });\n}\n\n\nexport const isolateActivePlane = (\n state: AppState,\n pubsub: IPluridPubSub,\n) => {\n const {\n activePlaneID: id,\n isolatePlane,\n } = state.space;\n\n if (isolatePlane) {\n pubsub.publish({\n topic: PLURID_PUBSUB_TOPIC.ISOLATE_PLANE,\n data: {\n id: '',\n },\n });\n return;\n }\n\n if (!id) {\n return;\n }\n\n pubsub.publish({\n topic: PLURID_PUBSUB_TOPIC.ISOLATE_PLANE,\n data: {\n id,\n },\n });\n}\n\n\nexport const openClosedPlane = (\n pubsub: IPluridPubSub,\n) => {\n pubsub.publish({\n topic: PLURID_PUBSUB_TOPIC.OPEN_CLOSED_PLANE,\n });\n}\n\n\nexport const closeActivePlane = (\n state: AppState,\n pubsub: IPluridPubSub,\n) => {\n const {\n activePlaneID: id,\n } = state.space;\n\n if (!id) {\n return;\n }\n\n pubsub.publish({\n topic: PLURID_PUBSUB_TOPIC.CLOSE_PLANE,\n data: {\n id,\n },\n });\n}\n// #endregion module\n","// #region imports\n // #region libraries\n import { AnyAction, ThunkDispatch } from '@reduxjs/toolkit';\n\n\n import {\n dom,\n } from '@plurid/plurid-functions';\n\n import {\n TRANSFORM_MODES,\n directions,\n\n PluridConfigurationSpaceTransformLocks,\n PluridConfigurationSpaceShortcuts,\n PluridShortcutID,\n\n PluridPubSub as IPluridPubSub,\n TransformModes,\n } from '@plurid/plurid-data';\n // #endregion libraries\n\n\n // #region external\n import { AppState } from '~services/state/store';\n import actions from '~services/state/actions';\n\n import {\n focusActivePlane,\n focusParentActivePlane,\n focusPreviousRoot,\n focusNextRoot,\n focusRootIndex,\n } from '~services/logic/animation';\n\n import {\n interaction,\n } from '~services/engine';\n // #endregion external\n\n\n // #region internal\n import {\n refreshActivePlane,\n isolateActivePlane,\n openClosedPlane,\n closeActivePlane,\n } from './logic';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\n/**\n * One keyboard shortcut. `match` replicates the original `if`-condition verbatim (so ORDER + the\n * loose modifier checks are preserved exactly); `code` is the default `event.code` a `keymap` entry\n * remaps; `run` performs the action (calling `ctx.prevent()` itself) and returns `false` to fall\n * through to the next binding (used only by the arrow `transformNudge`, which no-ops when no axis is\n * unlocked). The whole table is data so the config can disable / remap by `id` and a help overlay can\n * generate from it.\n */\ninterface ShortcutContext {\n dispatch: ThunkDispatch<{}, {}, AnyAction>;\n state: AppState;\n pubsub: IPluridPubSub;\n event: KeyboardEvent;\n firstPerson: boolean;\n locks: PluridConfigurationSpaceTransformLocks;\n noModifiers: boolean;\n prevent: () => void;\n}\n\ninterface ShortcutBinding {\n id: PluridShortcutID;\n /** Default `event.code` (omitted for the arrow group, whose triggers are fixed). Remappable via `keymap`. */\n code?: string;\n match: (event: KeyboardEvent, code: string | undefined, ctx: ShortcutContext) => boolean;\n run: (ctx: ShortcutContext) => boolean | void;\n}\n\n\nconst runTransformNudge = (ctx: ShortcutContext): boolean => {\n const { event: e, locks, dispatch, prevent } = ctx;\n\n if (e.key === 'ArrowRight') {\n if (e.shiftKey && locks.rotationY) { prevent(); dispatch(actions.space.rotateLeft()); return true; }\n if (e.altKey && locks.translationX) { prevent(); dispatch(actions.space.translateRight()); return true; }\n }\n if (e.key === 'ArrowLeft') {\n if (e.shiftKey && locks.rotationY) { prevent(); dispatch(actions.space.rotateRight()); return true; }\n if (e.altKey && locks.translationX) { prevent(); dispatch(actions.space.translateLeft()); return true; }\n }\n if (e.key === 'ArrowUp') {\n if (e.shiftKey && e.altKey && locks.translationZ) { prevent(); dispatch(actions.space.translateIn()); return true; }\n if (e.shiftKey && !e.altKey && locks.rotationX) { prevent(); dispatch(actions.space.rotateUp()); return true; }\n if (e.altKey && !e.shiftKey && locks.translationY) { prevent(); dispatch(actions.space.translateUp()); return true; }\n if ((e.metaKey || e.ctrlKey) && locks.scale) { prevent(); dispatch(actions.space.scaleUp()); return true; }\n }\n if (e.key === 'ArrowDown') {\n if (e.shiftKey && e.altKey && locks.translationZ) { prevent(); dispatch(actions.space.translateOut()); return true; }\n if (e.shiftKey && !e.altKey && locks.rotationX) { prevent(); dispatch(actions.space.rotateDown()); return true; }\n if (e.altKey && !e.shiftKey && locks.translationY) { prevent(); dispatch(actions.space.translateDown()); return true; }\n if ((e.metaKey || e.ctrlKey) && locks.scale) { prevent(); dispatch(actions.space.scaleDown()); return true; }\n }\n return false;\n}\n\n\n// The binding table — SAME order and SAME (deliberately loose) match conditions as the original\n// if-ladder, so first-match-wins behavior is byte-for-byte preserved. Only the surrounding\n// disable / remap / unhandled-key plumbing is new.\nconst SHORTCUTS: ShortcutBinding[] = [\n {\n // Cmd/Ctrl+Z = undo, +Shift = redo. The `inputOnPath` guard lets an editor keep its own undo.\n id: 'undo', code: 'KeyZ',\n match: (e, code) => (e.metaKey || e.ctrlKey) && e.code === code,\n run: ({ dispatch, event, prevent }) => {\n prevent();\n dispatch(event.shiftKey ? actions.space.redo() : actions.space.undo());\n },\n },\n {\n // Escape clears the selection — only when something is selected, so an empty Escape still\n // reaches the host (help overlay, etc.) via `onUnhandledKey`.\n id: 'clearSelection', code: 'Escape',\n match: (e, code, ctx) => e.code === code && ctx.state.space.selectedPlaneIDs.length > 0,\n run: ({ dispatch, prevent }) => { prevent(); dispatch(actions.space.clearSelection()); },\n },\n {\n // Frame all planes (CAD \"fit\"): Home or 0.\n id: 'fitToView', code: 'Digit0',\n match: (e, code, ctx) => (e.key === 'Home' || e.code === code) && ctx.noModifiers,\n run: ({ dispatch, prevent }) => { prevent(); dispatch(actions.space.spaceFitToView()); },\n },\n {\n id: 'toggleFirstPerson', code: 'KeyF',\n match: (e, code, ctx) => e.code === code && ctx.noModifiers,\n run: ({ dispatch, prevent }) => { prevent(); dispatch(actions.configuration.toggleConfigurationSpaceFirstPerson()); },\n },\n {\n id: 'modeRotation', code: 'KeyR',\n match: (e, code, ctx) => e.code === code && ctx.noModifiers,\n run: ({ dispatch, prevent }) => { prevent(); dispatch(actions.configuration.setConfigurationSpaceTransformMode(TRANSFORM_MODES.ROTATION)); },\n },\n {\n id: 'modeTranslation', code: 'KeyT',\n match: (e, code, ctx) => e.code === code && ctx.noModifiers,\n run: ({ dispatch, prevent }) => { prevent(); dispatch(actions.configuration.setConfigurationSpaceTransformMode(TRANSFORM_MODES.TRANSLATION)); },\n },\n {\n id: 'modeScale', code: 'KeyS',\n match: (e, code, ctx) => e.code === code && ctx.noModifiers && !ctx.firstPerson,\n run: ({ dispatch, prevent }) => { prevent(); dispatch(actions.configuration.setConfigurationSpaceTransformMode(TRANSFORM_MODES.SCALE)); },\n },\n {\n // Arrow-key transform nudges (rotate / translate / scale by step, gated on the axis locks).\n // Falls through (returns false) when no axis matches, so a plain arrow still reaches the host.\n id: 'transformNudge',\n match: (e) => e.key === 'ArrowRight' || e.key === 'ArrowLeft' || e.key === 'ArrowUp' || e.key === 'ArrowDown',\n run: (ctx) => runTransformNudge(ctx),\n },\n {\n id: 'focusPlane', code: 'KeyF',\n match: (e, code) => e.altKey && e.code === code,\n run: ({ dispatch, state, prevent }) => { prevent(); focusActivePlane(dispatch, state); },\n },\n {\n id: 'focusParent', code: 'KeyB',\n match: (e, code) => e.altKey && e.code === code,\n run: ({ dispatch, state, prevent }) => { prevent(); focusParentActivePlane(dispatch, state); },\n },\n {\n id: 'refreshPlane', code: 'KeyR',\n match: (e, code) => e.altKey && e.code === code,\n run: ({ state, pubsub, prevent }) => { prevent(); refreshActivePlane(state, pubsub); },\n },\n {\n id: 'isolatePlane', code: 'KeyE',\n match: (e, code) => e.altKey && e.code === code,\n run: ({ state, pubsub, prevent }) => { prevent(); isolateActivePlane(state, pubsub); },\n },\n {\n id: 'openClosedPlane', code: 'KeyT',\n match: (e, code) => e.altKey && e.shiftKey && e.code === code,\n run: ({ pubsub, prevent }) => { prevent(); openClosedPlane(pubsub); },\n },\n {\n id: 'closePlane', code: 'KeyW',\n match: (e, code) => e.altKey && e.code === code,\n run: ({ state, pubsub, prevent }) => { prevent(); closeActivePlane(state, pubsub); },\n },\n {\n id: 'focusPreviousRoot', code: 'KeyA',\n match: (e, code) => e.altKey && e.code === code,\n run: ({ dispatch, state, prevent }) => { prevent(); focusPreviousRoot(dispatch, state); },\n },\n {\n id: 'focusNextRoot', code: 'KeyD',\n match: (e, code) => e.altKey && e.code === code,\n run: ({ dispatch, state, prevent }) => { prevent(); focusNextRoot(dispatch, state); },\n },\n {\n id: 'cycleRoot', code: 'Tab',\n match: (e, code) => e.altKey && e.code === code,\n run: ({ dispatch, state, event, prevent }) => {\n prevent();\n if (event.shiftKey) { focusPreviousRoot(dispatch, state); } else { focusNextRoot(dispatch, state); }\n },\n },\n {\n // Alt+Digit jumps to a root by index — `code` matching is `startsWith('Digit')`, not exact, so\n // it ignores `keymap` (kept special).\n id: 'focusRootIndex',\n match: (e) => e.altKey && e.code.startsWith('Digit'),\n run: ({ dispatch, state, event, prevent }) => {\n prevent();\n const index = parseInt(event.code.replace('Digit', '')) - 1;\n focusRootIndex(dispatch, state, index);\n },\n },\n];\n\n\nexport const handleGlobalShortcuts = (\n dispatch: ThunkDispatch<{}, {}, AnyAction>,\n state: AppState,\n pubsub: IPluridPubSub,\n event: KeyboardEvent,\n firstPerson: boolean,\n locks: PluridConfigurationSpaceTransformLocks,\n shortcuts?: PluridConfigurationSpaceShortcuts,\n) => {\n if (event.defaultPrevented) {\n return;\n }\n\n const inputOnPath = dom.verifyPathInputElement(\n dom.getEventPath(event),\n );\n if (inputOnPath) {\n // The engine never consumes keys typed into inputs / editors; `onUnhandledKey` is deliberately\n // NOT fired here either, so a host doesn't react to ordinary typing.\n return;\n }\n\n const disabledAll = shortcuts?.disabled === true;\n const disabledSet = Array.isArray(shortcuts?.disabled)\n ? new Set(shortcuts?.disabled)\n : null;\n const keymap = shortcuts?.keymap;\n\n const ctx: ShortcutContext = {\n dispatch,\n state,\n pubsub,\n event,\n firstPerson,\n locks,\n noModifiers: !event.shiftKey && !event.altKey && !event.ctrlKey && !event.metaKey,\n prevent: () => event.preventDefault(),\n };\n\n if (!disabledAll) {\n for (const binding of SHORTCUTS) {\n if (disabledSet && disabledSet.has(binding.id)) {\n continue;\n }\n const code = (keymap && keymap[binding.id]) || binding.code;\n if (!binding.match(event, code, ctx)) {\n continue;\n }\n // `run` returns `false` only when the matched binding decided not to act (the arrow\n // nudge with every relevant axis locked) — fall through to the next binding / unhandled.\n if (binding.run(ctx) !== false) {\n return;\n }\n }\n }\n\n // Nothing in the engine consumed this key — hand it to the host so it can add its own bindings.\n if (shortcuts?.onUnhandledKey) {\n shortcuts.onUnhandledKey(event);\n }\n}\n\n\n\n// Smooth-zoom tuning: the scale delta is proportional to wheel/trackpad magnitude\n// (continuous, CAD-like) instead of a fixed quantized step, clamped so a single\n// aggressive notch can't jump across the whole scale range.\nconst SCALE_WHEEL_SENSITIVITY = 0.0015;\nconst SCALE_WHEEL_MAX_STEP = 0.2;\n\nexport const handleGlobalWheel = (\n dispatch: ThunkDispatch<{}, {}, AnyAction>,\n event: WheelEvent,\n modes: TransformModes,\n locks: PluridConfigurationSpaceTransformLocks,\n grabMode: boolean = false,\n wheelDisabled: boolean = false,\n) => {\n // `gestures.buttonMap.wheel: 'disabled'` hands the wheel entirely back to the page — plurid\n // neither zooms nor preventDefaults, so native scrolling works everywhere.\n if (wheelDisabled) {\n return;\n }\n\n // The wheel only zooms the space while navigating (grab mode, scale mode, or\n // ⌘/Ctrl+wheel). Otherwise it's left alone so page/plane content scrolls normally.\n const wheelZooms = grabMode;\n if (event.shiftKey\n || event.metaKey\n || event.altKey\n || event.ctrlKey\n || modes.rotation\n || modes.translation\n || modes.scale\n || wheelZooms\n ) {\n event.preventDefault();\n }\n\n const deltas = {\n deltaX: event.deltaX,\n deltaY: event.deltaY,\n };\n const absoluteThreshold = 100;\n const direction = interaction.direction.getWheelDirection(deltas, absoluteThreshold);\n\n if (modes.rotation) {\n if (direction === directions.left && locks.rotationY) {\n return dispatch(actions.space.rotateLeft());\n }\n\n if (direction === directions.right && locks.rotationY) {\n return dispatch(actions.space.rotateRight());\n }\n\n if (direction === directions.up && locks.rotationX) {\n return dispatch(actions.space.rotateUp());\n }\n\n if (direction === directions.down && locks.rotationX) {\n return dispatch(actions.space.rotateDown());\n }\n }\n\n if (event.shiftKey && !event.altKey) {\n if (direction === directions.up && locks.rotationX) {\n return dispatch(actions.space.rotateUp());\n }\n\n if (direction === directions.down && locks.rotationX) {\n return dispatch(actions.space.rotateDown());\n }\n\n if (direction === directions.left && locks.rotationY) {\n return dispatch(actions.space.rotateLeft());\n }\n\n if (direction === directions.right && locks.rotationY) {\n return dispatch(actions.space.rotateRight());\n }\n }\n\n if (modes.translation) {\n if (event.metaKey || event.ctrlKey) {\n if (direction === directions.up) {\n return dispatch(actions.space.translateDown());\n }\n\n if (direction === directions.down) {\n return dispatch(actions.space.translateUp());\n }\n\n return;\n }\n\n if (event.altKey) {\n if (direction === directions.up && locks.translationZ) {\n return dispatch(actions.space.translateIn());\n }\n\n if (direction === directions.down && locks.translationZ) {\n return dispatch(actions.space.translateOut());\n }\n }\n\n if (direction === directions.up && locks.translationY) {\n return dispatch(actions.space.translateDown());\n }\n\n if (direction === directions.down && locks.translationY) {\n return dispatch(actions.space.translateUp());\n }\n\n if (direction === directions.left && locks.translationX) {\n return dispatch(actions.space.translateRight());\n }\n\n if (direction === directions.right && locks.translationX) {\n return dispatch(actions.space.translateLeft());\n }\n }\n\n if (event.altKey && event.shiftKey) {\n if (direction === directions.up && locks.translationZ) {\n return dispatch(actions.space.translateIn());\n }\n\n if (direction === directions.down && locks.translationZ) {\n return dispatch(actions.space.translateOut());\n }\n }\n\n if (event.altKey && !event.shiftKey) {\n if (event.metaKey || event.ctrlKey) {\n if (direction === directions.up) {\n return dispatch(actions.space.translateDown());\n }\n\n if (direction === directions.down) {\n return dispatch(actions.space.translateUp());\n }\n\n return;\n }\n\n if (direction === directions.up && locks.translationY) {\n return dispatch(actions.space.translateDown());\n }\n\n if (direction === directions.down && locks.translationY) {\n return dispatch(actions.space.translateUp());\n }\n\n if (direction === directions.left && locks.translationX) {\n return dispatch(actions.space.translateRight());\n }\n\n if (direction === directions.right && locks.translationX) {\n return dispatch(actions.space.translateLeft());\n }\n }\n\n // Smooth, proportional zoom toward the cursor. The wheel/trackpad magnitude drives\n // the scale delta directly (continuous, not a quantized fixed step), and ⌘/Ctrl+wheel\n // zooms from any mode — matching trackpad pinch. Convention: wheel up (deltaY < 0) =\n // zoom in. The point under the cursor stays anchored (CAD-standard).\n if (modes.scale || event.metaKey || event.ctrlKey || wheelZooms) {\n if (!locks.scale) {\n return;\n }\n\n const zoomAmount = Math.min(\n Math.abs(event.deltaY) * SCALE_WHEEL_SENSITIVITY,\n SCALE_WHEEL_MAX_STEP,\n );\n\n if (zoomAmount === 0) {\n return;\n }\n\n const deltaScale = event.deltaY < 0 ? zoomAmount : -zoomAmount;\n\n const target = event.currentTarget as HTMLElement | null;\n const rect = target && target.getBoundingClientRect\n ? target.getBoundingClientRect()\n : null;\n const originX = rect ? event.clientX - rect.left : event.clientX;\n const originY = rect ? event.clientY - rect.top : event.clientY;\n\n return dispatch(actions.space.zoomAtPoint({\n deltaScale,\n originX,\n originY,\n }));\n }\n\n return;\n}\n// #endregion module\n","// #region imports\n // #region external\n import modules from '~services/state/modules';\n // #endregion external\n// #endregion imports\n\n\n\n// #region exports\nexport default {\n configuration: modules.configuration.selectors,\n general: modules.general.selectors,\n shortcuts: modules.shortcuts.selectors,\n space: modules.space.selectors,\n themes: modules.themes.selectors,\n ui: modules.ui.selectors,\n};\n// #endregion exports\n","// #region imports\n // #region libraries\n import styled from 'styled-components';\n\n import {\n TRANSFORM_MODES,\n } from '@plurid/plurid-data';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\n/**\n * The engine used to inject a `createGlobalStyle` into the HOST document — `html { overflow:\n * hidden; background: black; color: white }` + `html, body { margin/height/width }`. That\n * black-screened (and reset-the-margins-of) any page that mounted the engine: a consumer's\n * own layout would be clobbered by the engine's globals.\n *\n * All of those rules now live on `StyledView` (the engine root) instead, scoped to the engine's\n * own subtree:\n * - the `box-sizing`/font reset → scoped to `&` + descendants (never the host's elements);\n * - `overflow: hidden`, `font-family`, `height/width: 100%` → already on `StyledView`;\n * - `overscroll-behavior-x` → driven by the `preventOverscroll` prop below.\n *\n * `background`/`color` are deliberately NOT forced here: `StyledView` stays transparent so the\n * host's own backdrop shows through the empty space (an opaque surface is opt-in via\n * `StyledEmpty[opaque]`). Sizing the mount point is the host's responsibility (give it height),\n * or set `fullHeight` for a `100vh` engine root.\n */\nexport const StyledView: any = styled.div`\n /* Reset scoped to the engine subtree only — the host page's box model is untouched. */\n &,\n & *,\n & *::after,\n & *::before {\n box-sizing: border-box;\n font-kerning: auto;\n text-rendering: optimizeLegibility;\n }\n\n overscroll-behavior-x: ${(props: any) =>\n props.preventOverscroll ? 'none' : 'auto'};\n\n /* Anchor the engine's typography to its own root so the host page's body/reset font\n can't cascade into the toolbar and the rest of the engine UI. The global html rule\n only sets a default; a consumer styling the body font would otherwise win since body\n is a closer ancestor. Setting it here (the closest engine ancestor) keeps the UI\n consistent regardless of the host's styles. */\n font-family: ${(props: any) =>\n props.theme?.fontFamilySansSerif\n || \"system-ui, -apple-system, 'Segoe UI', Roboto, Ubuntu, sans-serif\"};\n\n height: 100%;\n min-height: ${(props: any) => {\n if (\n props.fullHeight\n ) {\n return '100vh';\n }\n\n return '100%';\n }};\n min-height: ${(props: any) => {\n if (\n props.fullHeight\n ) {\n return '-webkit-fill-available';\n }\n\n return '100%';\n }};\n\n width: 100%;\n position: relative;\n scroll-snap-align: start;\n outline: none;\n overflow: hidden;\n\n /* The space is a navigation surface only when navigating: fly mode, grab mode (G), or\n an explicit rotate/scale/translate mode. Otherwise it behaves like a normal page —\n text is selectable and the default cursor shows. Cursor: grabbing while dragging,\n grab when ready to navigate, a hint cursor for the explicit transform modes. */\n cursor: ${(props: any) => {\n if (props.navDragging) {\n return 'grabbing';\n }\n if (props.firstPerson || props.grabNavigation) {\n return 'grab';\n }\n if (\n props.transformMode === TRANSFORM_MODES.TRANSLATION\n || props.transformMode === TRANSFORM_MODES.ROTATION\n ) {\n return 'all-scroll';\n }\n if (\n props.transformMode === TRANSFORM_MODES.SCALE\n ) {\n return 'ns-resize';\n }\n return 'auto';\n }};\n user-select: ${(props: any) => {\n const navActive = props.firstPerson\n || props.grabNavigation\n || props.transformMode !== 'ALL';\n return navActive ? 'none' : 'auto';\n }};\n touch-action: ${(props: any) => {\n const navActive = props.firstPerson\n || props.grabNavigation\n || props.transformMode !== 'ALL';\n return navActive ? 'none' : 'auto';\n }};\n -webkit-user-drag: none;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n`;\n\n\nexport const StyledEmpty: any = styled.div`\n outline: none;\n background: ${(props: any) => {\n if (props.opaque) {\n const foregroundGradient = props.theme.type === 'dark'\n ? props.theme.backgroundColorTertiary\n : props.theme.backgroundColorPrimary;\n const backgroundGradient = props.theme.type === 'dark'\n ? props.theme.backgroundColorPrimary\n : props.theme.backgroundColorTertiary;\n\n return `radial-gradient(\n ellipse at center,\n ${foregroundGradient} 0%,\n ${backgroundGradient} 100%)\n `;\n }\n\n return 'transparent';\n }};\n`;\n// #endregion module\n","// #region imports\n // #region libraries\n import React from 'react';\n // #endregion libraries\n\n\n // #region external\n import {\n PluridReactComponent,\n } from '~data/interfaces';\n // #endregion external\n// #endregion imports\n\n\n\n// #region module\nexport interface ErrorBoundaryProperties {\n renderError?: PluridReactComponent;\n children?: any;\n}\n\nexport interface ErrorBoundaryState {\n hasError: boolean;\n}\n\nclass ErrorBoundary extends React.Component<ErrorBoundaryProperties, ErrorBoundaryState> {\n constructor(props: ErrorBoundaryProperties) {\n super(props);\n\n this.state = {\n hasError: false,\n };\n }\n\n static getDerivedStateFromError(\n error: any,\n ) {\n return {\n hasError: true,\n };\n }\n\n componentDidCatch(\n error: any,\n errorInfo: any,\n ) {\n }\n\n render() {\n if (this.state.hasError) {\n if (this.props.renderError) {\n return this.props.renderError;\n }\n\n return <h1>Something went wrong.</h1>;\n }\n\n return this.props.children;\n }\n}\n// #endregion module\n\n\n\n// #region exports\nexport default ErrorBoundary;\n// #endregion exports\n","// #region imports\n // #region libraries\n import styled from 'styled-components';\n\n import {\n Theme,\n decomposeColor,\n } from '@plurid/plurid-themes';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\nexport interface IStyledPluridPlane {\n theme: Theme;\n mouseOver: boolean;\n show: boolean;\n transparentUI: boolean;\n planeControls: boolean;\n planeOpacity: number;\n selected: boolean;\n}\n\nexport const StyledPluridPlane = styled.div<IStyledPluridPlane>`\n background-color: ${({\n transparentUI,\n mouseOver,\n theme,\n planeOpacity,\n }) => {\n if (transparentUI && !mouseOver) {\n return theme.backgroundColorPrimaryAlpha;\n }\n\n if (planeOpacity !== 1) {\n const decomposedColor = decomposeColor(theme.backgroundColorPrimary);\n if (decomposedColor) {\n const color = `hsla(${decomposedColor.hue}, ${decomposedColor.saturation}%, ${decomposedColor.lightness}%, ${planeOpacity})`;\n return color;\n }\n return 'transparent';\n }\n return theme.backgroundColorPrimary;\n }};\n box-shadow: ${({\n planeOpacity,\n selected,\n theme,\n }) => {\n // A 3px accent ring marks selection — distinct from the hover/active highlight, and kept\n // even when the plane is fully transparent so a selected-but-faded plane still reads.\n const ring = `0 0 0 3px ${theme.colorPrimary}`;\n if (planeOpacity === 0) {\n return selected ? ring : 'none';\n }\n if (selected) {\n return `${ring}, ${theme.boxShadowUmbra}`;\n }\n return theme.boxShadowUmbra;\n }};\n color: ${({\n theme,\n }) => {\n return theme.colorPrimary;\n }};\n opacity: ${({\n show,\n }) => {\n if (!show) {\n return '0';\n }\n return '1';\n }};\n user-select: ${({\n show,\n }) => {\n if (!show) {\n return 'none';\n }\n return 'auto';\n }};\n\n position: absolute;\n height: auto;\n width: 100%;\n font-size: 0.9rem;\n font-family: ${\n ({\n theme,\n }: IStyledPluridPlane) => theme.fontFamilySansSerif\n };\n transition: background-color 300ms linear;\n\n display: grid;\n grid-template-columns: 1fr;\n grid-template-rows: ${({\n planeControls,\n }) => {\n if (planeControls) {\n return '56px auto';\n }\n return 'auto';\n }};\n\n transform-origin: 0 0 0;\n`;\n\n\nexport const StyledFocusAnchor = styled.a`\n position: absolute;\n top: 0;\n left: 0;\n height: 0;\n width: 0;\n pointer-events: none;\n user-select: none;\n`;\n// #endregion module\n","// #region imports\n // #region libraries\n import styled from 'styled-components';\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\nexport interface IStyledPluridPlaneBridge {\n theme: Theme;\n planeControls: boolean;\n planeOpacity: number;\n transparentUI: boolean;\n mouseOver: boolean;\n bridgeLength: number;\n}\n\nexport const StyledPluridPlaneBridge = styled.div<IStyledPluridPlaneBridge>`\n background-color: ${({\n theme,\n planeControls,\n planeOpacity,\n transparentUI,\n mouseOver,\n }) => {\n if (transparentUI && !mouseOver) {\n return theme.backgroundColorPrimaryAlpha;\n }\n\n if (planeOpacity === 0) {\n return 'transparent';\n }\n\n if (!planeControls) {\n return theme.backgroundColorPrimary;\n }\n\n return theme.backgroundColorDark;\n }};\n\n position: absolute;\n top: 0;\n left: ${({ bridgeLength }) => -bridgeLength}px;\n height: 30px;\n width: ${({ bridgeLength }) => bridgeLength}px;\n opacity: 0.5;\n\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n// #endregion module\n","// #region imports\n // #region libraries\n import React from 'react';\n\n import {\n AnyAction,\n ThunkDispatch,\n } from '@reduxjs/toolkit';\n import { connect } from 'react-redux';\n\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n\n import {\n /** constants */\n PLURID_ENTITY_PLANE_BRIDGE,\n\n /** interfaces */\n PluridConfiguration,\n } from '@plurid/plurid-data';\n // #endregion libraries\n\n\n // #region external\n import { AppState } from '~services/state/store';\n import StateContext from '~services/state/context';\n import selectors from '~services/state/selectors';\n // import actions from '~services/state/actions';\n // #endregion external\n\n\n // #region internal\n import {\n StyledPluridPlaneBridge,\n } from './styled';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nexport interface PluridPlaneBridgeOwnProperties {\n mouseOver: boolean;\n}\n\nexport interface PluridPlaneBridgeStateProperties {\n stateGeneralTheme: Theme;\n stateConfiguration: PluridConfiguration;\n}\n\nexport interface PluridPlaneBridgeDispatchProperties {\n}\n\nexport type PluridPlaneBridgeProperties =\n & PluridPlaneBridgeOwnProperties\n & PluridPlaneBridgeStateProperties\n & PluridPlaneBridgeDispatchProperties;\n\n\nconst PluridPlaneBridge: React.FC<PluridPlaneBridgeProperties> = (\n properties,\n) => {\n // #region properties\n const {\n // #region own\n mouseOver,\n // #endregion own\n\n // #region state\n stateGeneralTheme,\n stateConfiguration,\n // #endregion state\n } = properties;\n\n const {\n controls,\n opacity,\n } = stateConfiguration.elements.plane;\n\n const {\n transparentUI,\n } = stateConfiguration.global;\n\n // Configurable bridge geometry (defaults to the original 100).\n const bridgeLength = stateConfiguration.space.bridge?.length ?? 100;\n // #endregion properties\n\n\n // #region render\n return (\n <StyledPluridPlaneBridge\n theme={stateGeneralTheme}\n planeControls={controls.show}\n planeOpacity={opacity}\n transparentUI={transparentUI}\n mouseOver={mouseOver}\n bridgeLength={bridgeLength}\n data-plurid-entity={PLURID_ENTITY_PLANE_BRIDGE}\n />\n );\n // #endregion render\n}\n\n\nconst mapStateToProperties = (\n state: AppState,\n): PluridPlaneBridgeStateProperties => ({\n stateGeneralTheme: selectors.themes.getGeneralTheme(state),\n stateConfiguration: selectors.configuration.getConfiguration(state),\n});\n\n\nconst mapDispatchToProperties = (\n dispatch: ThunkDispatch<{}, {}, AnyAction>,\n): PluridPlaneBridgeDispatchProperties => ({\n});\n\n\nconst ConnectedPluridPlaneBridge = connect(\n mapStateToProperties,\n mapDispatchToProperties,\n null,\n {\n context: StateContext,\n },\n)(PluridPlaneBridge);\n// #endregion module\n\n\n\n// #region exports\nexport default ConnectedPluridPlaneBridge;\n// #endregion exports\n","// #region imports\n // #region libraries\n import React from 'react';\n\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n\n import {\n PluridIconReset,\n } from '@plurid/plurid-icons-react';\n // #endregion libraries\n// #region imports\n\n\n\n// #region module\nexport interface ControlRefreshProperties {\n // #region required\n // #region values\n theme: Theme;\n refreshing: boolean;\n // #endregion values\n\n // #region methods\n refreshPlane: () => void;\n // #endregion methods\n // #endregion required\n}\n\n\nconst ControlRefresh: React.FC<ControlRefreshProperties> = (\n properties,\n) => {\n // #region properties\n const {\n // #region required\n // #region values\n theme,\n refreshing,\n // #endregion values\n\n // #region methods\n refreshPlane,\n // #endregion methods\n // #endregion required\n } = properties;\n // #endregion properties\n\n\n // #region render\n return (\n <PluridIconReset\n atClick={() => {\n refreshPlane();\n }}\n theme={theme}\n title=\"refresh\"\n style={{\n opacity: refreshing ? '0' : '1',\n pointerEvents: refreshing ? 'none' : undefined,\n }}\n />\n );\n // #endregion render\n}\n// #endregion module\n\n\n\n// #region exports\nexport default ControlRefresh;\n// #endregion exports\n","// #region imports\n // #region libraries\n import React from 'react';\n\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n\n import {\n PluridIconRectangle,\n } from '@plurid/plurid-icons-react';\n // #endregion libraries\n// #region imports\n\n\n\n// #region module\nexport interface ControlIsolateProperties {\n // #region required\n // #region values\n theme: Theme;\n isolated: boolean;\n // #endregion values\n\n // #region methods\n isolatePlane: () => void;\n // #endregion methods\n // #endregion required\n}\n\n\nconst ControlIsolate: React.FC<ControlIsolateProperties> = (\n properties,\n) => {\n // #region properties\n const {\n // #region required\n // #region values\n theme,\n isolated,\n // #endregion values\n\n // #region methods\n isolatePlane,\n // #endregion methods\n // #endregion required\n } = properties;\n // #endregion properties\n\n\n // #region render\n const title = isolated ? 'isolated' : 'isolate';\n const fill = isolated ? true : false;\n\n return (\n <PluridIconRectangle\n atClick={() => {\n isolatePlane();\n }}\n theme={theme}\n title={title}\n fill={fill}\n />\n );\n // #endregion render\n}\n// #endregion module\n\n\n\n// #region exports\nexport default ControlIsolate;\n// #endregion exports\n","// #region imports\n // #region libraries\n import styled, {\n css,\n } from 'styled-components';\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\nexport interface IStyledPluridPlaneControls {\n theme: Theme;\n transparentUI: boolean;\n mouseOver: boolean;\n}\n\nexport const StyledPluridPlaneControls = styled.div<IStyledPluridPlaneControls>`\n background-color: ${({\n transparentUI,\n mouseOver,\n theme,\n }) => {\n if (transparentUI && !mouseOver) {\n return 'transparent';\n }\n\n return theme.backgroundColorDark;\n }};\n box-shadow: ${({\n theme,\n }) => {\n return theme.boxShadowUmbraInset;\n }};\n\n width: 100%;\n display: grid;\n align-items: center;\n justify-content: center;\n grid-template-rows: 1fr;\n grid-template-columns: 1fr 2fr 1fr;\n transition: background-color 300ms linear;\n\n @media (max-width: 800px) {\n grid-template-columns: 1fr 3fr 1fr;\n }\n`;\n\n\n\nexport const styleCommonControls = css`\n margin: 0 1rem;\n display: flex;\n align-items: center;\n gap: 1rem;\n`;\n\n\nexport const StyledPluridPlaneControlsLeft = styled.div`\n ${styleCommonControls}\n`;\n\n\nexport const StyledPluridPlaneControlsCenter = styled.div`\n width: 100%;\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n word-break: break-all;\n`;\n\n\nexport const StyledPluridPlaneControlsRight = styled.div`\n ${styleCommonControls}\n justify-content: right;\n`;\n// #endregion module\n","// #region imports\n // #region libraries\n import React, {\n useState,\n } from 'react';\n\n import {\n AnyAction,\n ThunkDispatch,\n } from '@reduxjs/toolkit';\n import { connect } from 'react-redux';\n\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n\n import {\n clipboard,\n } from '@plurid/plurid-functions';\n\n import {\n PluridIconArrowLeft,\n PluridIconFrame,\n PluridIconDelete,\n } from '@plurid/plurid-icons-react';\n\n import {\n /** constants */\n PLURID_ENTITY_PLANE_CONTROLS,\n\n /** interfaces */\n RegisteredPluridPlane,\n TreePlane,\n PluridConfiguration,\n } from '@plurid/plurid-data';\n // #endregion libraries\n\n\n // #region external\n import {\n PluridReactComponent,\n } from '~data/interfaces';\n\n import { AppState } from '~services/state/store';\n import StateContext from '~services/state/context';\n import selectors from '~services/state/selectors';\n // import actions from '~services/state/actions';\n\n import {\n navigateToPluridPlane,\n } from '~services/logic/animation';\n // #endregion external\n\n\n // #region internal\n // import SearchList from './components/SearchList';\n import ControlRefresh from './components/ControlRefresh';\n import ControlIsolate from './components/ControlIsolate';\n\n import {\n StyledPluridPlaneControls,\n StyledPluridPlaneControlsLeft,\n StyledPluridPlaneControlsCenter,\n StyledPluridPlaneControlsRight,\n } from './styled';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nexport interface PluridPlaneControlsOwnProperties {\n plane: RegisteredPluridPlane<PluridReactComponent>;\n treePlane: TreePlane;\n parentTreePlane: TreePlane | undefined;\n mouseOver: boolean;\n\n refreshing: boolean;\n refreshPlane: () => void;\n isolatePlane: () => void;\n closePlane: () => void;\n}\n\nexport interface PluridPlaneControlsStateProperties {\n configuration: PluridConfiguration;\n stateGeneralTheme: Theme;\n stateInteractionTheme: Theme;\n stateIsolatePlane: string;\n}\n\nexport interface PluridPlaneControlsDispatchProperties {\n dispatch: ThunkDispatch<{}, {}, AnyAction>,\n}\n\nexport type PluridPlaneControlsProperties =\n & PluridPlaneControlsOwnProperties\n & PluridPlaneControlsStateProperties\n & PluridPlaneControlsDispatchProperties;\n\n\nconst PluridPlaneControls: React.FC<PluridPlaneControlsProperties> = (\n properties,\n) => {\n // #region properties\n const {\n // #region own\n plane,\n treePlane,\n parentTreePlane,\n mouseOver,\n\n refreshing,\n refreshPlane,\n isolatePlane,\n closePlane,\n // #endregion own\n\n // #region state\n configuration,\n stateGeneralTheme,\n // stateInteractionTheme,\n stateIsolatePlane,\n // #endregion state\n\n // #region dispatch\n dispatch,\n // #endregion dispatch\n } = properties;\n\n const {\n global,\n elements,\n } = configuration;\n\n const {\n transparentUI,\n } = global;\n\n const {\n title,\n pathbar,\n } = elements.plane.controls;\n\n const {\n planeID,\n route,\n routeDivisions\n } = treePlane;\n\n const {\n protocol,\n host,\n } = routeDivisions;\n\n const gateway = 'gateway';\n\n const gatewayAddress = `${protocol}://${host.value}/${gateway}?plurid=` + encodeURIComponent(route);\n\n const isolated = stateIsolatePlane === planeID;\n // #endregion properties\n\n\n // #region state\n const [path, setPath] = useState(treePlane.route);\n const [showAddress, setShowAddress] = useState(false);\n const [showSearch, setShowSearch] = useState(false);\n // #endregion state\n\n\n // #region handlers\n const onPathInput = (\n event: React.ChangeEvent<HTMLInputElement>,\n ) => {\n setPath(event.target.value);\n\n if (pathbar.onChange) {\n // const id = plane.id || plane.path;\n const id = plane.route.absolute;\n pathbar.onChange(event, id);\n }\n }\n\n const handleOnKeyDown = (\n event: React.KeyboardEvent<HTMLInputElement>,\n ) => {\n if (!showSearch) {\n setShowSearch(true);\n }\n\n if (event.key === 'Escape') {\n setShowSearch(false);\n }\n\n if (pathbar.onKeyDown) {\n // const id = plane.id || plane.path;\n const id = plane.route.absolute;\n pathbar.onKeyDown(event, id);\n }\n }\n\n const copyGatewayLink = () => {\n clipboard.copy(gatewayAddress);\n }\n // #endregion handlers\n\n\n // #region render\n return (\n <StyledPluridPlaneControls\n theme={stateGeneralTheme}\n mouseOver={mouseOver}\n transparentUI={transparentUI}\n data-plurid-entity={PLURID_ENTITY_PLANE_CONTROLS}\n >\n <StyledPluridPlaneControlsLeft>\n {parentTreePlane && (\n <PluridIconArrowLeft\n atClick={(event) => {\n navigateToPluridPlane(\n dispatch,\n parentTreePlane,\n event,\n );\n }}\n theme={stateGeneralTheme}\n title=\"back\"\n />\n )}\n\n <PluridIconFrame\n atClick={(event) => {\n const deisolate = false;\n\n navigateToPluridPlane(\n dispatch,\n treePlane,\n event,\n deisolate,\n );\n }}\n theme={stateGeneralTheme}\n title=\"focus\"\n />\n\n <ControlRefresh\n theme={stateGeneralTheme}\n refreshing={refreshing}\n refreshPlane={refreshPlane}\n />\n\n <ControlIsolate\n theme={stateGeneralTheme}\n isolated={isolated}\n isolatePlane={isolatePlane}\n />\n </StyledPluridPlaneControlsLeft>\n\n <StyledPluridPlaneControlsCenter>\n {title && (\n <>\n {path}\n\n {/* <PluridTextline\n theme={stateInteractionTheme}\n // text={showAddress ? gatewayAddress : path}\n // text={treePlane.route}\n text={path}\n atChange={onPathInput}\n atKeyDown={handleOnKeyDown}\n ariaLabel=\"Plurid Pathbar\"\n /> */}\n\n {/* {showSearch && (\n <SearchList\n hideSearch={() => setShowSearch(false)}\n />\n )} */}\n </>\n )}\n </StyledPluridPlaneControlsCenter>\n\n <StyledPluridPlaneControlsRight>\n {/* <PluridIconCopy\n atClick={() => copyGatewayLink()}\n />\n\n <PluridIconLink\n atClick={() => setShowAddress(show => !show)}\n /> */}\n\n <PluridIconDelete\n atClick={() => {\n closePlane();\n }}\n theme={stateGeneralTheme}\n title=\"close\"\n />\n </StyledPluridPlaneControlsRight>\n </StyledPluridPlaneControls>\n );\n // #endregion render\n}\n\n\nconst mapStateToProps = (\n state: AppState,\n): PluridPlaneControlsStateProperties => ({\n configuration: selectors.configuration.getConfiguration(state),\n stateGeneralTheme: selectors.themes.getGeneralTheme(state),\n stateInteractionTheme: selectors.themes.getInteractionTheme(state),\n stateIsolatePlane: selectors.space.getIsolatePlane(state),\n});\n\n\nconst mapDispatchToProps = (\n dispatch: ThunkDispatch<{}, {}, AnyAction>,\n): PluridPlaneControlsDispatchProperties => ({\n dispatch,\n});\n\n\nconst ConnectedPluridPlaneControls = connect(\n mapStateToProps,\n mapDispatchToProps,\n null,\n {\n context: StateContext,\n },\n)(PluridPlaneControls);\n// #endregion module\n\n\n\n// #region exports\nexport default ConnectedPluridPlaneControls;\n// #endregion exports\n","// #region imports\n // #region libraries\n import styled from 'styled-components';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\nexport const StyledPluridPlaneContent = styled.div`\n position: relative;\n`;\n// #endregion module\n","// #region imports\n // #region libraries\n import React, {\n useRef,\n } from 'react';\n\n\n import {\n /** constants */\n PLURID_ENTITY_PLANE_CONTENT,\n } from '@plurid/plurid-data';\n // #endregion libraries\n\n\n // #region internal\n import {\n StyledPluridPlaneContent,\n } from './styled';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nexport interface PluridPlaneContentOwnProperties {\n // updatePlaneSize: any;\n children: React.ReactNode;\n}\n\n\nconst PluridPlaneContent: React.FC<PluridPlaneContentOwnProperties> = (\n properties,\n) => {\n // #region properties\n const {\n // updatePlaneSize,\n\n children,\n } = properties;\n // #endregion properties\n\n\n // #region references\n const planeContentElement = useRef<HTMLDivElement>(null);\n // #endregion references\n\n\n // #region effects\n // useEffect(() => {\n // if (planeContentElement.current) {\n // // TODO\n // // Implement a resize observer\n\n // const {\n // offsetWidth,\n // offsetHeight,\n // } = planeContentElement.current;\n\n // const size = {\n // width: offsetWidth,\n // height: offsetHeight\n // }\n // updatePlaneSize(size)\n // // console.log(offsetWidth, offsetHeight);\n // }\n // }, [\n // planeContentElement.current,\n // ]);\n // #endregion effects\n\n\n // console.log('render content');\n\n // #region render\n return (\n <StyledPluridPlaneContent\n ref={planeContentElement}\n data-plurid-entity={PLURID_ENTITY_PLANE_CONTENT}\n >\n {children}\n </StyledPluridPlaneContent>\n );\n // #endregion render\n}\n// #endregion module\n\n\n\n// #region exports\nexport default PluridPlaneContent;\n// #endregion exports\n","// #region imports\n // #region libraries\n import React, {\n useContext,\n useRef,\n useState,\n useEffect,\n } from 'react';\n\n import {\n AnyAction,\n ThunkDispatch,\n Dispatch,\n } from '@reduxjs/toolkit';\n import { connect } from 'react-redux';\n\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n\n import {\n mathematics,\n } from '@plurid/plurid-functions';\n\n import {\n useDebouncedCallback,\n } from '@plurid/plurid-functions-react';\n\n import {\n PLURID_PUBSUB_TOPIC,\n FOCUS_ANCHOR_SUFFIX,\n PLURID_ENTITY_PLANE,\n\n RegisteredPluridPlane,\n TreePlane,\n TreePlaneLocation,\n PluridConfiguration,\n } from '@plurid/plurid-data';\n // #endregion libraries\n\n\n // #region external\n import {\n PluridReactComponent,\n } from '~data/interfaces';\n\n import ErrorBoundary from '~components/utilities/ErrorBoundary';\n\n import Context from '~services/context';\n\n import { AppState } from '~services/state/store';\n import StateContext from '~services/state/context';\n // import { ViewSize } from '~services/state/types/space';\n import selectors from '~services/state/selectors';\n import actions from '~services/state/actions';\n import {\n DispatchAction,\n } from '~data/interfaces';\n\n import {\n cleanTemplate,\n space,\n } from '~services/engine';\n // #endregion external\n\n\n // #region internal\n import {\n StyledPluridPlane,\n StyledFocusAnchor,\n } from './styled';\n\n import PlaneBridge from './components/PlaneBridge';\n import PlaneControls from './components/PlaneControls';\n import PlaneContent from './components/PlaneContent';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nexport interface PluridPlaneOwnProperties {\n // #region required\n // #region values\n planeID: string;\n plane: RegisteredPluridPlane<PluridReactComponent>;\n treePlane: TreePlane;\n location: TreePlaneLocation;\n // #endregion values\n // #endregion required\n}\n\nexport interface PluridPlaneStateProperties {\n // Only THIS plane's parent node (resolved by id off the memoized plane index), not the\n // whole tree — so an unrelated mutation (which structural sharing leaves this parent's\n // reference untouched) yields shallow-equal props and react-redux skips the re-render.\n stateParentPlane: TreePlane | undefined;\n // stateViewSize: ViewSize;\n stateViewSize: any;\n // A per-instance DERIVED boolean (`activePlaneID === this planeID`), not the raw shared\n // `activePlaneID` string: `activePlaneID` changes on every hover over ANY plane, so subscribing\n // to the string re-rendered all 40 planes on each hover. The boolean only flips for the two\n // planes whose active-state actually changes.\n stateIsActivePlane: boolean;\n stateIsolatePlane: string;\n // A per-instance DERIVED boolean (this plane is in `selectedPlaneIDs`), same memoization\n // rationale as `stateIsActivePlane` — only flips for the plane whose selection actually changes.\n stateIsSelected: boolean;\n stateGeneralTheme: Theme;\n stateConfiguration: PluridConfiguration;\n}\n\nexport interface PluridPlaneDispatchProperties {\n dispatchSetSpaceField: DispatchAction<typeof actions.space.setSpaceField>;\n dispatchUpdateSpaceTreePlane: DispatchAction<typeof actions.space.updateSpaceTreePlane>;\n dispatchToggleSelection: DispatchAction<typeof actions.space.toggleSelection>;\n}\n\nexport type PluridPlaneProperties =\n & PluridPlaneOwnProperties\n & PluridPlaneStateProperties\n & PluridPlaneDispatchProperties;\n\n\nconst PluridPlane: React.FC<React.PropsWithChildren<PluridPlaneProperties>> = (\n properties,\n) => {\n // #region context\n const context = useContext(Context);\n if (!context) {\n return (<></>);\n }\n\n const {\n planeRenderError,\n defaultPubSub,\n } = context;\n // #endregion context\n\n\n // #region properties\n const {\n // #region required\n // #region values\n planeID,\n plane,\n treePlane,\n\n children,\n // #endregion values\n // #endregion required\n\n // #region state\n stateParentPlane,\n stateViewSize,\n stateIsActivePlane,\n stateIsolatePlane,\n stateIsSelected,\n stateGeneralTheme,\n stateConfiguration,\n // #endregion state\n\n // #region dispatch\n dispatchSetSpaceField,\n dispatchUpdateSpaceTreePlane,\n dispatchToggleSelection,\n // #endregion dispatch\n } = properties;\n\n const {\n global,\n elements,\n } = stateConfiguration;\n\n const {\n transparentUI,\n } = global;\n\n const {\n controls,\n width: planeWidth,\n opacity: planeOpacity,\n } = elements.plane;\n\n const showPlaneControls = controls.show;\n\n const width = mathematics.numbers.checkIntegerNonUnit(planeWidth)\n ? planeWidth\n : planeWidth * stateViewSize.width;\n\n // Resolved in `makeMapStateToProps` off the memoized plane index (no per-render tree walk).\n const parentTreePlane = stateParentPlane;\n // #endregion properties\n\n\n // #region references\n const planeRef = useRef<HTMLDivElement>(null);\n // #endregion references\n\n\n // #region state\n const [\n remountKey,\n setRemountKey,\n ] = useState(0);\n\n const [\n refreshing,\n setRefreshing,\n ] = useState(false);\n\n const [\n mouseOver,\n setMouseOver,\n ] = useState(false);\n\n // based on camera location and world position compute transform matrix\n // #endregion state\n\n\n // #region handlers\n const updatePlaneSize = (\n size: any,\n ) => {\n const updatedTreePlane = {\n ...treePlane,\n };\n updatedTreePlane.width = size.width;\n updatedTreePlane.height = size.height;\n\n dispatchUpdateSpaceTreePlane(updatedTreePlane);\n }\n\n const refreshPlane = () => {\n const REFRESH_TIMEOUT = 250;\n setRefreshing(true);\n\n setTimeout(() => {\n setRemountKey(value => ++value);\n setRefreshing(false);\n }, REFRESH_TIMEOUT);\n }\n\n const isolatePlane = () => {\n const id = stateIsolatePlane !== planeID\n ? planeID\n : '';\n\n defaultPubSub.publish({\n topic: PLURID_PUBSUB_TOPIC.ISOLATE_PLANE,\n data: {\n id,\n },\n });\n }\n\n const closePlane = () => {\n defaultPubSub.publish({\n topic: PLURID_PUBSUB_TOPIC.CLOSE_PLANE,\n data: {\n id: planeID,\n },\n });\n }\n\n const setActivePlane = () => {\n const payload = {\n field: 'activePlaneID' as const,\n value: mouseOver ? planeID : '',\n };\n\n dispatchSetSpaceField(payload);\n }\n\n const handlePlaneClick = (\n event: React.MouseEvent,\n ) => {\n // Shift+click toggles this plane's membership in the multi-selection. Plain clicks pass\n // through untouched so the host's plane content stays fully interactive; `preventDefault`\n // suppresses the stray text-selection a shift+click would otherwise start.\n if (event.shiftKey) {\n event.preventDefault();\n dispatchToggleSelection(planeID);\n }\n }\n\n const debouncedSetActivePlane = useDebouncedCallback(\n () => {\n if (stateIsActivePlane) {\n return;\n }\n\n const payload = {\n field: 'activePlaneID' as const,\n value: planeID,\n };\n\n dispatchSetSpaceField(payload);\n },\n 500,\n );\n\n const computeIsolatePlaneOpacity = () => {\n if (!treePlane.show || !stateIsolatePlane) {\n return;\n }\n\n if (stateIsolatePlane === planeID) {\n return '1';\n }\n\n return '0';\n }\n\n const computeIsolatePointerEvents = () => {\n if (!treePlane.show || !stateIsolatePlane) {\n return;\n }\n\n if (stateIsolatePlane === planeID) {\n return;\n }\n\n return 'none';\n }\n // #endregion handlers\n\n\n // #region effects\n useEffect(() => {\n setActivePlane();\n }, [\n planeID,\n mouseOver,\n ]);\n\n /** PubSub refresh plane */\n useEffect(() => {\n const refreshPlaneIndex = defaultPubSub.subscribe({\n topic: PLURID_PUBSUB_TOPIC.REFRESH_PLANE,\n callback: (data) => {\n const {\n id,\n } = data;\n\n if (id === planeID) {\n refreshPlane();\n }\n },\n });\n\n return () => {\n defaultPubSub.unsubscribe(\n refreshPlaneIndex,\n );\n }\n }, [\n remountKey,\n planeID,\n ]);\n // #endregion effects\n\n\n // #region render\n // console.log('Render plane');\n const key = planeID + '-' + remountKey;\n const focusAnchorID = planeID + FOCUS_ANCHOR_SUFFIX;\n // Render the plane at its computed width (matches the layout's translateX spacing,\n // which is derived from the same `width`). A hardcoded 100% made every plane span the\n // full viewport, so fractional widths and multi-column layouts overlapped.\n const renderWidth = width + 'px';\n const isolatePlaneOpacity = computeIsolatePlaneOpacity();\n const isolatePointerEvents = computeIsolatePointerEvents();\n const transform = cleanTemplate(`\n translateX(${treePlane.location.translateX}px)\n translateY(${treePlane.location.translateY}px)\n translateZ(${treePlane.location.translateZ}px)\n rotateX(${treePlane.location.rotateX}deg)\n rotateY(${treePlane.location.rotateY}deg)\n `);\n\n const planeContentProperties = {\n // updatePlaneSize,\n };\n\n return (\n <StyledPluridPlane\n key={key}\n ref={planeRef}\n theme={stateGeneralTheme}\n planeControls={showPlaneControls}\n planeOpacity={planeOpacity}\n show={treePlane.show}\n id={planeID}\n style={{\n width: renderWidth,\n transform,\n opacity: isolatePlaneOpacity,\n pointerEvents: isolatePointerEvents,\n }}\n onMouseEnter={() => setMouseOver(true)}\n onMouseLeave={() => setMouseOver(false)}\n onMouseOver={() => debouncedSetActivePlane()}\n onMouseMove={() => debouncedSetActivePlane()}\n onClick={handlePlaneClick}\n selected={stateIsSelected}\n transparentUI={transparentUI}\n mouseOver={mouseOver}\n data-plurid-plane={planeID}\n data-plurid-entity={PLURID_ENTITY_PLANE}\n >\n <StyledFocusAnchor\n tabIndex={0}\n id={focusAnchorID}\n />\n\n {treePlane.show && (\n <>\n {treePlane.parentPlaneID && (\n <PlaneBridge\n mouseOver={mouseOver}\n />\n )}\n\n {showPlaneControls && (\n <PlaneControls\n plane={plane}\n treePlane={treePlane}\n parentTreePlane={parentTreePlane}\n mouseOver={mouseOver}\n\n refreshing={refreshing}\n refreshPlane={refreshPlane}\n isolatePlane={isolatePlane}\n closePlane={closePlane}\n />\n )}\n\n {planeRenderError ? (\n <ErrorBoundary\n renderError={typeof planeRenderError !== 'boolean'\n ? planeRenderError : undefined\n }\n >\n <PlaneContent\n {...planeContentProperties}\n >\n {children}\n </PlaneContent>\n </ErrorBoundary>\n ) : (\n <PlaneContent\n {...planeContentProperties}\n >\n {children}\n </PlaneContent>\n )}\n </>\n )}\n </StyledPluridPlane>\n );\n // #endregion render\n}\n\n\n// Factory form (`connect` detects it because it returns a function): each plane instance gets\n// its OWN memoized parent-by-id selector, so the lookup is an O(1) `Map.get` off the shared\n// memoized index — never a per-dispatch tree walk. During an orbit gesture the tree is\n// untouched, so this returns shallow-equal props and the plane skips re-render entirely.\nconst makeMapStateToProps = () => {\n const getParentPlane = selectors.space.makeGetTreePlaneByID();\n const getIsSelected = selectors.space.makeGetIsPlaneSelected();\n\n return (\n state: AppState,\n ownProps: PluridPlaneOwnProperties,\n ): PluridPlaneStateProperties => ({\n stateParentPlane: getParentPlane(state, ownProps.treePlane?.parentPlaneID),\n stateViewSize: selectors.space.getViewSize(state),\n stateIsActivePlane: selectors.space.getActivePlaneID(state) === ownProps.planeID,\n stateIsolatePlane: selectors.space.getIsolatePlane(state),\n stateIsSelected: getIsSelected(state, ownProps.planeID),\n stateGeneralTheme: selectors.themes.getGeneralTheme(state),\n stateConfiguration: selectors.configuration.getConfiguration(state),\n });\n};\n\n\nconst mapDispatchToProps = (\n dispatch: ThunkDispatch<{}, {}, AnyAction>,\n): PluridPlaneDispatchProperties => ({\n dispatchSetSpaceField: (\n payload,\n ) => dispatch(\n actions.space.setSpaceField(payload),\n ),\n dispatchUpdateSpaceTreePlane: (\n payload,\n ) => dispatch(\n actions.space.updateSpaceTreePlane(payload),\n ),\n dispatchToggleSelection: (\n payload,\n ) => dispatch(\n actions.space.toggleSelection(payload),\n ),\n});\n\n\n// `React.memo` so a plane whose own props (its structurally-shared `treePlane` + memoized state\n// props) are unchanged bails out even when an ancestor re-renders — see the matching note in Root.\nconst ConnectedPluridPlane = connect(\n makeMapStateToProps,\n mapDispatchToProps,\n null,\n {\n context: StateContext,\n },\n)(React.memo(PluridPlane));\n// #endregion module\n\n\n\n// #region exports\nexport default ConnectedPluridPlane;\n// #endregion exports\n","// #region imports\n // #region libraries\n import {\n PluridPlaneComponentProperty,\n PluridRouteComponentProperty,\n } from '@plurid/plurid-data';\n // #endregion libraries\n\n\n // #region external\n import {\n PluridReactComponent,\n ElementQLComponent,\n } from '~data/interfaces';\n // #endregion external\n// #endregion imports\n\n\n\n// #region module\nexport const isReactRenderable = (\n component: PluridReactComponent<\n any, PluridPlaneComponentProperty | PluridRouteComponentProperty\n > | undefined,\n) => {\n if (!component) {\n return false;\n }\n\n // Check elementql component.\n if (\n typeof component === 'string'\n || (component as ElementQLComponent).url\n ) {\n return false;\n }\n\n return true;\n}\n// #endregion module\n","// #region imports\n // #region libraries\n import styled from 'styled-components';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\nexport const StyledPluridRoot = styled.div`\n transform-style: preserve-3d;\n`;\n// #endregion module\n","// #region imports\n // #region libraries\n import React, {\n useContext,\n useMemo,\n } from 'react';\n\n import {\n AnyAction,\n ThunkDispatch,\n } from '@reduxjs/toolkit';\n import { connect } from 'react-redux';\n\n\n import {\n /** constants */\n PLURID_ENTITY_ROOT,\n\n /** interfaces */\n TreePlane,\n PluridPlaneComponentProperty,\n } from '@plurid/plurid-data';\n // #endregion libraries\n\n\n // #region external\n import PluridPlane from '~components/structural/Plane';\n\n import Context from '~services/context';\n\n import { AppState } from '~services/state/store';\n import StateContext from '~services/state/context';\n import selectors from '~services/state/selectors';\n // import actions from '~services/state/actions';\n\n import {\n isReactRenderable,\n } from '~services/utilities/react';\n\n import {\n getPlanesRegistrar,\n getRegisteredPlane,\n } from '~services/engine';\n // #endregion external\n\n\n // #region internal\n import {\n StyledPluridRoot,\n } from './styled';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nexport interface PluridRootOwnProperties {\n plane: TreePlane;\n}\n\n// Intentionally empty: PluridRoot no longer subscribes to the whole tree. It renders from its\n// `plane` ownProp (kept current by structural sharing), so it re-renders only when its OWN\n// root subtree changes — not on every unrelated mutation (which previously forced new ownProps\n// onto every child plane and defeated their memoization).\nexport interface PluridRootStateProperties {\n}\n\nexport interface PluridRootDispatchProperties {\n}\n\nexport type PluridRootProperties =\n & PluridRootOwnProperties\n & PluridRootStateProperties\n & PluridRootDispatchProperties;\n\n\nconst PluridRoot: React.FC<PluridRootProperties> = (\n properties,\n) => {\n // #region properties\n const {\n // #region own\n plane,\n // #endregion own\n } = properties;\n\n const {\n location,\n } = plane;\n // #endregion properties\n\n\n // #region context\n const context = useContext(Context);\n if (!context) {\n return (<></>);\n }\n\n const {\n planesRegistrar,\n planeContext: PlaneContext,\n planeContextValue,\n customPlane,\n matchedRoute,\n\n defaultPubSub,\n } = context;\n\n const CustomPluridPlane = customPlane as any; // hack\n // #endregion context\n\n\n // #region handlers\n const computeChildrenPlanes = (\n plane: TreePlane,\n ) => {\n // console.log('computeChildrenPlanesMemo', JSON.stringify(plane));\n if (!plane.children || plane.children.length === 0) {\n return [];\n }\n\n const children: JSX.Element[] = [];\n const planesRegistry = getPlanesRegistrar(planesRegistrar);\n\n plane.children.forEach(child => {\n // console.log('child', child);\n\n if (!planesRegistry) {\n return;\n }\n\n const planeID = child.sourceID;\n // console.log('planeID', planeID);\n const activePlane = planesRegistry.get(planeID);\n // console.log('activePlane', activePlane);\n\n if (\n activePlane\n // && pluridPlaneProperties\n // && child.show\n ) {\n const renderPlane = () => {\n // instead of forcing show here to pass it as prop\n // and change the opacity\n const Plane = activePlane.component as any; // HACK\n\n const pluridProperty: PluridPlaneComponentProperty = {\n plane: {\n value: activePlane.route.absolute,\n planeID: child.planeID,\n parentPlaneID: child.parentPlaneID,\n fragments: activePlane.route.fragments,\n parameters: activePlane.route.parameters,\n query: activePlane.route.query,\n },\n route: {\n value: matchedRoute?.match.value || '',\n parameters: matchedRoute?.match.parameters || {},\n query: matchedRoute?.match.query || {},\n },\n pubSub: defaultPubSub,\n };\n const properties = {\n plurid: {\n ...pluridProperty,\n },\n key: 'plurid-plane-' + child.planeID,\n };\n\n const renderablePlane = isReactRenderable(Plane);\n const renderableCustomPlane = isReactRenderable(CustomPluridPlane);\n const keyBase = 'plurid-plane-child-';\n const planeProperties = {\n key: keyBase + child.planeID,\n plane: activePlane,\n treePlane: child,\n planeID: child.planeID,\n location: child.location,\n };\n\n if (CustomPluridPlane && renderableCustomPlane) {\n return (\n <CustomPluridPlane\n {...planeProperties}\n />\n )\n }\n\n if (renderablePlane) {\n return (\n <PluridPlane\n {...planeProperties}\n >\n {!PlaneContext\n ? (\n <Plane\n {...properties}\n />\n ) : (\n <PlaneContext.Provider\n value={planeContextValue}\n >\n <Plane\n {...properties}\n />\n </PlaneContext.Provider>\n )\n }\n </PluridPlane>\n );\n }\n\n return (<></>);\n }\n\n // Named `renderedPlane` (not `plane`) so it doesn't shadow the `plane`\n // PARAMETER that `renderPlane` closes over.\n const renderedPlane = renderPlane();\n children.push(renderedPlane);\n }\n\n if (child.children) {\n const childrenPlanes = computeChildrenPlanes(child);\n if (childrenPlanes) {\n children.push(...childrenPlanes);\n }\n }\n });\n\n return children;\n }\n // #endregion handlers\n\n\n // #region effects\n const childrenPlanes = useMemo<JSX.Element[]>(\n () => computeChildrenPlanes(plane),\n [\n // Just `plane`: the tree is rebuilt immutably + structurally shared, so this root's\n // node changes identity exactly when its OWN subtree changes — recomputing the\n // child elements only then (and keeping their references stable otherwise, so the\n // child planes can bail out of their own re-render).\n plane,\n ],\n );\n // #endregion effects\n\n\n // #region render\n const pluridPlaneID = plane.sourceID;\n // console.log('Root pluridPlaneID', pluridPlaneID);\n if (!pluridPlaneID) {\n return (<></>);\n }\n\n const pluridPlane = getRegisteredPlane(\n pluridPlaneID,\n planesRegistrar,\n );\n // console.log('Root pluridPlane', pluridPlane, pluridPlaneID, planesRegistrar);\n if (!pluridPlane) {\n return (<></>);\n }\n\n const Plane: any = pluridPlane.component;\n // if (typeof Plane !== 'function') {\n // return (<></>);\n // }\n // console.log('Root Plane', Plane);\n\n\n const pluridProperty: PluridPlaneComponentProperty = {\n plane: {\n value: pluridPlane.route.absolute,\n planeID: plane.planeID,\n parentPlaneID: plane.parentPlaneID,\n fragments: pluridPlane.route.fragments,\n parameters: pluridPlane.route.parameters,\n query: pluridPlane.route.query,\n },\n route: {\n value: matchedRoute?.match.value || '',\n parameters: matchedRoute?.match.parameters || {},\n query: matchedRoute?.match.query || {},\n },\n pubSub: defaultPubSub,\n };\n const planeProperties = {\n plurid: {\n ...pluridProperty,\n },\n key: 'plurid-plane-' + plane.planeID,\n };\n // console.log('Root planeProperties', planeProperties);\n\n\n if (CustomPluridPlane) {\n if (typeof CustomPluridPlane !== 'function') {\n return (<></>);\n }\n\n return (\n <StyledPluridRoot\n data-plurid-entity={PLURID_ENTITY_ROOT}\n >\n <CustomPluridPlane\n plane={pluridPlane}\n treePlane={plane}\n planeID={plane.planeID}\n location={location}\n />\n\n {childrenPlanes}\n </StyledPluridRoot>\n );\n }\n\n return (\n <StyledPluridRoot\n data-plurid-entity={PLURID_ENTITY_ROOT}\n >\n <PluridPlane\n plane={pluridPlane}\n treePlane={plane}\n planeID={plane.planeID}\n location={location}\n >\n {!PlaneContext\n ? (\n <Plane\n {...planeProperties}\n />\n ) : (\n <PlaneContext.Provider\n value={planeContextValue}\n >\n <Plane\n {...planeProperties}\n />\n </PlaneContext.Provider>\n )\n }\n </PluridPlane>\n\n {childrenPlanes}\n </StyledPluridRoot>\n );\n // #endregion render\n}\n\n\nconst mapStateToProperties = (\n _state: AppState,\n): PluridRootStateProperties => ({\n // No tree subscription — PluridRoot bails on unrelated mutations and re-renders only when\n // its `plane` ownProp (structurally shared) changes.\n});\n\n\nconst mapDispatchToProperties = (\n dispatch: ThunkDispatch<{}, {}, AnyAction>,\n): PluridRootDispatchProperties => ({\n});\n\n\n// `React.memo` is REQUIRED, not redundant with `connect`: `<PluridRoots>` subscribes to the\n// per-frame transform matrix, so it re-renders on every orbit frame and every spawn dispatch, and\n// react-redux v9 `connect` re-runs the wrapped component on those parent renders unless it is\n// memoized. With the tree structurally shared (`reconcileTree`), an unchanged root's `plane`\n// ownProp is referentially stable, so `React.memo`'s shallow compare bails the re-render entirely.\nconst ConnectedPluridRoot = connect(\n mapStateToProperties,\n mapDispatchToProperties,\n null,\n {\n context: StateContext,\n },\n)(React.memo(PluridRoot));\n// #endregion module\n\n\n\n// #region exports\nexport default ConnectedPluridRoot;\n// #endregion exports\n","// #region imports\n // #region libraries\n import styled from 'styled-components';\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\n/**\n * The edges layer. Lives inside `StyledPluridRoots` (the camera frame) as a sibling of the roots, so\n * it inherits the camera matrix via `preserve-3d` and the beams orbit with the planes. `top/left: 0`\n * pins it to the shared plane origin; `pointer-events: none` keeps it from intercepting plane clicks.\n */\nexport const StyledPluridPlaneLinks = styled.div`\n position: absolute;\n top: 0;\n left: 0;\n transform-origin: 0 0 0;\n transform-style: preserve-3d;\n pointer-events: none;\n`;\n\n\nexport interface IStyledPluridPlaneLink {\n theme: Theme;\n length: number;\n thickness: number;\n}\n\n/**\n * A single beam. Anchored at its left edge (`transform-origin: 0 0`), sized to the edge length, and\n * positioned/rotated by the inline `transform` from `computeEdgeTransform`.\n */\nexport const StyledPluridPlaneLink = styled.div<IStyledPluridPlaneLink>`\n position: absolute;\n top: 0;\n left: 0;\n height: ${({ thickness }) => thickness}px;\n width: ${({ length }) => length}px;\n transform-origin: 0 0;\n background-color: ${({ theme }) => theme.colorPrimary};\n border-radius: ${({ thickness }) => thickness}px;\n opacity: 0.5;\n`;\n// #endregion module\n","// #region module\nexport interface EdgePoint {\n x: number;\n y: number;\n z: number;\n}\n\nexport interface EdgeGeometry {\n transform: string;\n length: number;\n}\n\n\n/**\n * The CSS-3D \"beam\" transform connecting point `a` to point `b`, in the SAME coordinate frame the\n * planes live in (`StyledPluridRoots`, which carries the camera matrix) — so a beam built from two\n * planes' world positions stays attached to them under orbit/pan/zoom with NO per-frame JavaScript.\n *\n * The beam is a thin box whose natural orientation is along the local +X axis, anchored at its left\n * edge. We translate its start to `a`, then rotate it to point at `b`. Working in CSS coordinates\n * (X right, Y down, Z toward the viewer), applying `rotateY(beta) rotateZ(alpha)` to the local +X\n * unit vector gives:\n * rotateZ(alpha): (1,0,0) -> (cosα, sinα, 0)\n * rotateY(beta) of that -> (cosβ·cosα, sinα, -sinβ·cosα)\n * Setting that equal to the unit direction (dx,dy,dz)/L (with dxz = hypot(dx,dz)) solves to\n * alpha = atan2(dy, dxz) // pitch in the XY plane (rotateZ)\n * beta = atan2(-dz, dx) // yaw in the XZ plane (rotateY)\n * The `-thickness/2` y-offset centres the thin beam on the line through the two anchors.\n */\nexport const computeEdgeTransform = (\n a: EdgePoint,\n b: EdgePoint,\n thickness: number,\n): EdgeGeometry => {\n const dx = b.x - a.x;\n const dy = b.y - a.y;\n const dz = b.z - a.z;\n\n const length = Math.sqrt(dx * dx + dy * dy + dz * dz);\n const dxz = Math.sqrt(dx * dx + dz * dz);\n\n const alpha = Math.atan2(dy, dxz);\n const beta = Math.atan2(-dz, dx);\n\n const transform = `translate3d(${a.x}px, ${a.y - thickness / 2}px, ${a.z}px) `\n + `rotateY(${beta}rad) rotateZ(${alpha}rad)`;\n\n return {\n transform,\n length,\n };\n}\n// #endregion module\n","// #region imports\n // #region libraries\n import React from 'react';\n\n import { connect } from 'react-redux';\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n\n import {\n PlaneLink,\n TreePlane,\n\n PLURID_ENTITY_PLANE_LINKS,\n } from '@plurid/plurid-data';\n // #endregion libraries\n\n\n // #region external\n import { AppState } from '~services/state/store';\n import StateContext from '~services/state/context';\n import selectors from '~services/state/selectors';\n // #endregion external\n\n\n // #region internal\n import {\n StyledPluridPlaneLinks,\n StyledPluridPlaneLink,\n } from './styled';\n\n import {\n computeEdgeTransform,\n EdgePoint,\n } from './logic';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nconst THICKNESS = 3;\n\n\nexport interface PluridPlaneLinksStateProperties {\n stateLinks: PlaneLink[];\n statePlaneIndex: Map<string, TreePlane>;\n stateGeneralTheme: Theme;\n}\n\nexport type PluridPlaneLinksProperties = PluridPlaneLinksStateProperties;\n\n\n/**\n * The world-space anchor of a plane: its centre, in the shared `StyledPluridRoots` frame.\n *\n * `location.translate*` is the plane's top-left corner; the centre is offset by half its size. The\n * tree node doesn't carry a measured size (its `width`/`height` are 0 under the current layout), so\n * we fall back to the rendered element's box. This runs only when the edges layer re-renders (a link\n * or tree change) — never per orbit frame — so the DOM read is cheap and off the hot path.\n */\nconst planeAnchor = (\n plane: TreePlane,\n): EdgePoint => {\n let width = plane.width;\n let height = plane.height;\n\n if ((!width || !height) && typeof document !== 'undefined') {\n const element = document.getElementById(plane.planeID);\n if (element) {\n width = width || element.offsetWidth;\n height = height || element.offsetHeight;\n }\n }\n\n return {\n x: plane.location.translateX + width / 2,\n y: plane.location.translateY + height / 2,\n z: plane.location.translateZ,\n };\n}\n\n\nconst PluridPlaneLinks: React.FC<PluridPlaneLinksProperties> = (\n properties,\n) => {\n // #region properties\n const {\n stateLinks,\n statePlaneIndex,\n stateGeneralTheme,\n } = properties;\n // #endregion properties\n\n\n // #region render\n if (!stateLinks || stateLinks.length === 0) {\n return null;\n }\n\n const beams = stateLinks.map(link => {\n const source = statePlaneIndex.get(link.sourcePlaneID);\n const target = statePlaneIndex.get(link.targetPlaneID);\n\n // A link to a plane that isn't currently in the tree (closed / not yet spawned) draws\n // nothing — the link survives in state and reappears when both endpoints are present.\n if (!source || !target) {\n return null;\n }\n if (source.show === false || target.show === false) {\n return null;\n }\n\n const {\n transform,\n length,\n } = computeEdgeTransform(\n planeAnchor(source),\n planeAnchor(target),\n THICKNESS,\n );\n\n return (\n <StyledPluridPlaneLink\n key={link.id}\n theme={stateGeneralTheme}\n length={length}\n thickness={THICKNESS}\n style={{\n transform,\n }}\n data-plurid-link={link.id}\n />\n );\n });\n\n return (\n <StyledPluridPlaneLinks\n data-plurid-entity={PLURID_ENTITY_PLANE_LINKS}\n >\n {beams}\n </StyledPluridPlaneLinks>\n );\n // #endregion render\n}\n\n\nconst mapStateToProperties = (\n state: AppState,\n): PluridPlaneLinksStateProperties => ({\n stateLinks: selectors.space.getPlaneLinks(state),\n statePlaneIndex: selectors.space.getPlaneIndex(state),\n stateGeneralTheme: selectors.themes.getGeneralTheme(state),\n});\n\n\n// `React.memo` like `PluridRoot`: `<PluridRoots>` re-renders on every orbit frame (it subscribes to\n// the transform matrix), but the edges layer's inputs (`links`, the memoized `planeIndex`, theme) are\n// referentially stable across those frames, so `connect` + `memo` bail the re-render. The beams ride\n// the camera transform on the parent `StyledPluridRoots` — no per-frame JS.\nconst ConnectedPluridPlaneLinks = connect(\n mapStateToProperties,\n null,\n null,\n {\n context: StateContext,\n },\n)(React.memo(PluridPlaneLinks));\n// #endregion module\n\n\n\n// #region exports\nexport default ConnectedPluridPlaneLinks;\n// #endregion exports\n","// #region imports\n // #region libraries\n import styled from 'styled-components';\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\n/** Lives in the camera frame (`StyledPluridRoots`) like the edges layer, so guides track the space. */\nexport const StyledAlignmentGuides = styled.div`\n position: absolute;\n top: 0;\n left: 0;\n transform-origin: 0 0 0;\n transform-style: preserve-3d;\n pointer-events: none;\n`;\n\n\nexport interface IStyledAlignmentGuide {\n theme: Theme;\n}\n\n/** A thin guide line; its length + position/orientation come from the inline `transform` + size. */\nexport const StyledAlignmentGuide = styled.div<IStyledAlignmentGuide>`\n position: absolute;\n top: 0;\n left: 0;\n transform-origin: 0 0;\n background-color: ${({ theme }) => theme.colorPrimary};\n opacity: 0.6;\n`;\n// #endregion module\n","// #region imports\n // #region libraries\n import React from 'react';\n\n import { connect } from 'react-redux';\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n\n import {\n TreePlane,\n\n PLURID_ENTITY_ALIGNMENT_GUIDES,\n } from '@plurid/plurid-data';\n // #endregion libraries\n\n\n // #region external\n import { AppState } from '~services/state/store';\n import StateContext from '~services/state/context';\n import selectors from '~services/state/selectors';\n // #endregion external\n\n\n // #region internal\n import {\n StyledAlignmentGuides,\n StyledAlignmentGuide,\n } from './styled';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nconst THRESHOLD = 12; // px — same as the release snap, so the guide previews exactly where it lands\nconst SPAN = 8000; // px — guide line length (covers the working space)\n\n\nexport interface AlignmentGuidesStateProperties {\n stateDraggingSelection: boolean;\n stateTree: TreePlane[];\n stateSelectedPlaneIDs: string[];\n stateGeneralTheme: Theme;\n}\n\nexport type AlignmentGuidesProperties = AlignmentGuidesStateProperties;\n\n\ninterface Guide {\n axis: 'x' | 'y';\n position: number;\n}\n\n/** The nearest left/top-edge alignment of any selected plane to any other plane, within THRESHOLD. */\nconst nearestEdge = (\n sel: TreePlane[],\n others: TreePlane[],\n axis: 'translateX' | 'translateY',\n): number | null => {\n let position: number | null = null;\n let bestAbs = THRESHOLD;\n for (const s of sel) {\n for (const o of others) {\n const distance = Math.abs(o.location[axis] - s.location[axis]);\n if (distance <= bestAbs) {\n bestAbs = distance;\n position = o.location[axis];\n }\n }\n }\n return position;\n}\n\n\nconst AlignmentGuides: React.FC<AlignmentGuidesProperties> = (\n properties,\n) => {\n const {\n stateDraggingSelection,\n stateTree,\n stateSelectedPlaneIDs,\n stateGeneralTheme,\n } = properties;\n\n\n // #region render\n // Only ever rendered mid-drag, and only the lines a release would actually snap to.\n if (!stateDraggingSelection || stateSelectedPlaneIDs.length === 0) {\n return null;\n }\n\n const all: TreePlane[] = [];\n const collect = (nodes: TreePlane[]) => {\n for (const node of nodes) {\n all.push(node);\n if (node.children) {\n collect(node.children);\n }\n }\n };\n collect(stateTree);\n\n const selected = new Set(stateSelectedPlaneIDs);\n const sel = all.filter(p => selected.has(p.planeID) && p.show !== false);\n const others = all.filter(p => !selected.has(p.planeID) && p.show !== false);\n if (sel.length === 0 || others.length === 0) {\n return null;\n }\n\n const guides: Guide[] = [];\n const x = nearestEdge(sel, others, 'translateX');\n if (x !== null) {\n guides.push({ axis: 'x', position: x });\n }\n const y = nearestEdge(sel, others, 'translateY');\n if (y !== null) {\n guides.push({ axis: 'y', position: y });\n }\n if (guides.length === 0) {\n return null;\n }\n\n return (\n <StyledAlignmentGuides\n data-plurid-entity={PLURID_ENTITY_ALIGNMENT_GUIDES}\n >\n {guides.map((guide, index) => (\n <StyledAlignmentGuide\n key={guide.axis + index}\n theme={stateGeneralTheme}\n data-plurid-guide={guide.axis}\n style={guide.axis === 'x'\n ? {\n width: '1px',\n height: SPAN + 'px',\n transform: `translate3d(${guide.position}px, ${-SPAN / 2}px, 0)`,\n }\n : {\n width: SPAN + 'px',\n height: '1px',\n transform: `translate3d(${-SPAN / 2}px, ${guide.position}px, 0)`,\n }\n }\n />\n ))}\n </StyledAlignmentGuides>\n );\n // #endregion render\n}\n\n\nconst mapStateToProperties = (\n state: AppState,\n): AlignmentGuidesStateProperties => ({\n stateDraggingSelection: selectors.space.getDraggingSelection(state),\n stateTree: selectors.space.getTree(state),\n stateSelectedPlaneIDs: selectors.space.getSelectedPlaneIDs(state),\n stateGeneralTheme: selectors.themes.getGeneralTheme(state),\n});\n\n\nconst ConnectedAlignmentGuides = connect(\n mapStateToProperties,\n null,\n null,\n {\n context: StateContext,\n },\n)(React.memo(AlignmentGuides));\n// #endregion module\n\n\n\n// #region exports\nexport default ConnectedAlignmentGuides;\n// #endregion exports\n","// #region imports\n // #region libraries\n import styled from 'styled-components';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\nexport interface IStyledPluridRoots {}\n\nexport const StyledPluridRoots = styled.div<IStyledPluridRoots>`\n transform-style: preserve-3d;\n transform-origin: 0 0 0;\n`;\n// #endregion module\n","// #region imports\n // #region libraries\n import React from 'react';\n\n import {\n AnyAction,\n ThunkDispatch,\n } from '@reduxjs/toolkit';\n import { connect } from 'react-redux';\n\n\n import {\n /** constants */\n PLURID_ENTITY_ROOTS,\n\n /** interfaces */\n TreePlane,\n PluridConfiguration,\n } from '@plurid/plurid-data';\n // #endregion libraries\n\n\n // #region external\n import PluridRoot from '~components/structural/Root';\n import PluridPlaneLinks from '~components/structural/PlaneLinks';\n import AlignmentGuides from '~components/structural/AlignmentGuides';\n\n import { AppState } from '~services/state/store';\n import StateContext from '~services/state/context';\n import selectors from '~services/state/selectors';\n // import actions from '~services/state/actions';\n // #endregion external\n\n\n // #region internal\n import {\n StyledPluridRoots,\n } from './styled';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nexport interface PluridRootsOwnProperties {\n}\n\nexport interface PluridRootsStateProperties {\n stateConfiguration: PluridConfiguration;\n spaceTransformMatrix: string;\n spaceAnimatedTransform: boolean;\n stateResolvedLayout: boolean;\n spaceTransformTime: number;\n stateTree: TreePlane[];\n}\n\nexport interface PluridRootsDispatchProperties {\n}\n\nexport type PluridRootsProperties =\n & PluridRootsOwnProperties\n & PluridRootsStateProperties\n & PluridRootsDispatchProperties;\n\n\nconst PluridRoots: React.FC<PluridRootsProperties> = (\n properties,\n) => {\n // #region properties\n const {\n // #region state\n stateConfiguration,\n spaceTransformMatrix,\n spaceAnimatedTransform,\n spaceTransformTime,\n stateTree,\n stateResolvedLayout,\n // #endregion state\n } = properties;\n // #endregion properties\n\n\n // #region render\n // TOFIX use user width/height\n const width = '100%';\n const height = stateResolvedLayout\n ? window.innerHeight + 'px'\n : 0;\n\n const transition = spaceAnimatedTransform\n ? `transform ${spaceTransformTime}ms ease-in-out`\n // : firstPerson\n // ? 'transform 100ms linear'\n : 'initial';\n\n return (\n <StyledPluridRoots\n style={{\n width,\n height,\n transition,\n transform: spaceTransformMatrix,\n }}\n data-plurid-entity={PLURID_ENTITY_ROOTS}\n >\n {stateTree.map(plane => (\n <PluridRoot\n key={plane.planeID}\n plane={plane}\n />\n ))}\n\n {stateConfiguration.elements.planeLinks?.show !== false && (\n <PluridPlaneLinks />\n )}\n {stateConfiguration.elements.alignmentGuides?.show !== false && (\n <AlignmentGuides />\n )}\n </StyledPluridRoots>\n );\n // #endregion render\n}\n\n\nconst mapStateToProperties = (\n state: AppState,\n): PluridRootsStateProperties => ({\n stateConfiguration: selectors.configuration.getConfiguration(state),\n spaceTransformMatrix: selectors.space.getTransformMatrix(state),\n spaceAnimatedTransform: selectors.space.getAnimatedTransform(state),\n spaceTransformTime: selectors.space.getTransformTime(state),\n stateTree: selectors.space.getTree(state),\n stateResolvedLayout: selectors.space.getResolvedLayout(state),\n});\n\n\nconst mapDispatchToProperties = (\n dispatch: ThunkDispatch<{}, {}, AnyAction>,\n): PluridRootsDispatchProperties => ({\n});\n\n\nconst ConnectedPluridRoots = connect(\n mapStateToProperties,\n mapDispatchToProperties,\n null,\n {\n context: StateContext,\n },\n)(PluridRoots);\n// #endregion module\n\n\n\n// #region exports\nexport default ConnectedPluridRoots;\n// #endregion exports\n","// #region imports\n // #region libraries\n import styled from 'styled-components';\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\nexport interface IStyledPluridSpace {\n theme: Theme;\n opaque: boolean;\n isMounted: boolean;\n fadeInTime: number;\n}\n\nexport const StyledPluridSpace = styled.div<IStyledPluridSpace>`\n position: relative;\n height: 100%;\n overflow: hidden;\n perspective: 2000px;\n outline: none;\n transition: opacity ${({fadeInTime}) => fadeInTime}ms linear;\n\n background: ${({\n opaque,\n theme,\n }) => {\n if (opaque) {\n const foregroundGradient = theme.type === 'dark'\n ? theme.backgroundColorTertiary\n : theme.backgroundColorPrimary;\n const backgroundGradient = theme.type === 'dark'\n ? theme.backgroundColorPrimary\n : theme.backgroundColorTertiary;\n\n return `radial-gradient(\n ellipse at center,\n ${foregroundGradient} 0%,\n ${backgroundGradient} 100%)\n `;\n }\n\n return 'transparent';\n }};\n`;\n// #endregion module\n","// #region imports\n // #region libraries\n import React, {\n useState,\n useEffect,\n } from 'react';\n\n import {\n AnyAction,\n ThunkDispatch,\n } from '@reduxjs/toolkit';\n import { connect } from 'react-redux';\n\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n\n import {\n PluridConfiguration,\n PLURID_ENTITY_SPACE,\n } from '@plurid/plurid-data';\n // #endregion libraries\n\n\n // #region external\n import PluridRoots from '../Roots';\n\n import { AppState } from '~services/state/store';\n import StateContext from '~services/state/context';\n import selectors from '~services/state/selectors';\n // import actions from '~services/state/actions';\n // #endregion external\n\n\n // #region internal\n import {\n StyledPluridSpace,\n } from './styled';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nexport interface PluridSpaceOwnProperties {\n}\n\nexport interface PluridSpaceStateProperties {\n stateConfiguration: PluridConfiguration,\n stateGeneralTheme: Theme;\n stateResolvedLayout: boolean;\n}\n\nexport interface PluridSpaceDispatchProperties {\n}\n\nexport type PluridSpaceProperties =\n & PluridSpaceOwnProperties\n & PluridSpaceStateProperties\n & PluridSpaceDispatchProperties;\n\n\nconst PluridSpace: React.FC<PluridSpaceProperties> = (\n properties,\n) => {\n // #region properties\n const {\n // #region state\n stateConfiguration,\n stateGeneralTheme,\n stateResolvedLayout,\n // #endregion state\n } = properties;\n\n const {\n space,\n } = stateConfiguration;\n\n const {\n opaque,\n fadeInTime,\n } = space;\n // #endregion properties\n\n\n // #region state\n const [\n isMounted,\n setIsMounted,\n ] = useState(false);\n // #endregion state\n\n\n // #region effects\n useEffect(() => {\n setIsMounted(true);\n }, []);\n // #endregion effects\n\n\n // #region render\n return (\n <StyledPluridSpace\n theme={stateGeneralTheme}\n opaque={opaque}\n isMounted={isMounted}\n fadeInTime={fadeInTime}\n data-plurid-entity={PLURID_ENTITY_SPACE}\n style={{\n opacity: stateResolvedLayout ? 1 : 0\n }}\n >\n <PluridRoots />\n </StyledPluridSpace>\n );\n // #endregion render\n}\n\n\nconst mapStateToProperties = (\n state: AppState,\n): PluridSpaceStateProperties => ({\n stateConfiguration: selectors.configuration.getConfiguration(state),\n stateGeneralTheme: selectors.themes.getGeneralTheme(state),\n stateResolvedLayout: selectors.space.getResolvedLayout(state),\n});\n\n\nconst mapDispatchToProperties = (\n dispatch: ThunkDispatch<{}, {}, AnyAction>,\n): PluridSpaceDispatchProperties => ({\n});\n\n\nconst ConnectedPluridSpace = connect(\n mapStateToProperties,\n mapDispatchToProperties,\n null,\n {\n context: StateContext,\n },\n)(PluridSpace);\n// #endregion module\n\n\n\n// #region exports\nexport default ConnectedPluridSpace;\n// #endregion exports\n","// #region imports\n // #region libraries\n import styled from 'styled-components';\n\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n\n import {\n SIZES,\n } from '@plurid/plurid-data';\n // #region libraries\n// #region imports\n\n\n\n// #region module\nexport interface IStyledOrigin {\n theme: Theme;\n size: keyof typeof SIZES;\n}\n\nconst resolveSize = ({\n size,\n}: IStyledOrigin) => {\n switch (size) {\n case SIZES.SMALL:\n return '5px';\n case SIZES.NORMAL:\n return '10px';\n case SIZES.LARGE:\n return '15px';\n default:\n return '10px';\n }\n}\n\nexport const StyledOrigin = styled.div<IStyledOrigin>`\n background-color: ${\n ({\n theme,\n }) => theme.backgroundColorTertiaryAlpha\n };\n height: ${resolveSize};\n width: ${resolveSize};\n\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translateX(-50%) translateY(-50%);\n z-index: 99999;\n border-radius: 100px;\n user-select: none;\n pointer-events: none;\n touch-action: none;\n`;\n// #region module\n","// #region imports\n // #region libraries\n import React from 'react';\n\n import {\n AnyAction,\n ThunkDispatch,\n } from '@reduxjs/toolkit';\n import { connect } from 'react-redux';\n\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n\n import {\n PluridConfiguration,\n\n PLURID_ENTITY_TRANSFORM_ORIGIN,\n } from '@plurid/plurid-data';\n // #endregion libraries\n\n\n // #region external\n import { AppState } from '~services/state/store';\n import StateContext from '~services/state/context';\n import selectors from '~services/state/selectors';\n // import actions from '~services/state/actions';\n // #endregion external\n\n\n // #region internal\n import {\n StyledOrigin,\n } from './styled';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nexport interface OriginOwnProperties {\n}\n\nexport interface OriginStateProperties {\n stateGeneralTheme: Theme;\n stateInteractionTheme: Theme;\n stateConfiguration: PluridConfiguration;\n}\n\nexport interface OriginDispatchProperties {\n}\n\nexport type OriginProperties =\n & OriginOwnProperties\n & OriginStateProperties\n & OriginDispatchProperties;\n\n\nconst Origin: React.FC<OriginProperties> = (\n properties,\n) => {\n // #region properties\n const {\n // #region state\n stateGeneralTheme,\n // stateInteractionTheme,\n stateConfiguration,\n // #endregion state\n } = properties;\n\n const {\n space,\n } = stateConfiguration;\n\n const {\n transformOrigin,\n } = space;\n\n const {\n show: showTransformOrigin,\n size: transformOriginSize,\n } = transformOrigin;\n // #endregion properties\n\n\n // #region render\n if (!showTransformOrigin) {\n return (<></>);\n }\n\n return (\n <StyledOrigin\n theme={stateGeneralTheme}\n size={transformOriginSize}\n data-plurid-entity={PLURID_ENTITY_TRANSFORM_ORIGIN}\n />\n );\n // #endregion render\n}\n\n\nconst mapStateToProperties = (\n state: AppState,\n): OriginStateProperties => ({\n stateGeneralTheme: selectors.themes.getGeneralTheme(state),\n stateInteractionTheme: selectors.themes.getInteractionTheme(state),\n stateConfiguration: selectors.configuration.getConfiguration(state),\n});\n\n\nconst mapDispatchToProperties = (\n dispatch: ThunkDispatch<{}, {}, AnyAction>,\n): OriginDispatchProperties => ({\n});\n\n\nconst ConnectedOrigin = connect(\n mapStateToProperties,\n mapDispatchToProperties,\n null,\n {\n context: StateContext,\n },\n)(Origin);\n// #endregion module\n\n\n\n// #region exports\nexport default ConnectedOrigin;\n// #endregion exports\n","// #region imports\n // #region libraries\n import {\n keyframes,\n css,\n } from 'styled-components';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\nexport const fadeIn = keyframes`\n from {\n opacity: 0%;\n }\n\n to {\n opacity: 100%;\n }\n`;\n\n\nexport const fadeInAnimation = (\n fadeInTime: number,\n) => css`${fadeIn} ${fadeInTime}ms linear 100ms forwards`;\n// #endregion module\n","// #region module\nexport enum MENUS {\n NONE = 'NONE',\n UNIVERSES = 'UNIVERSES',\n MORE = 'MORE',\n}\n\n\nexport const VIEW_SIZE_WIDTH_LIMIT = 800;\n// #endregion module\n","// #region imports\n // #region libraries\n import styled from 'styled-components';\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n // #endregion libraries\n\n\n // #region external\n import {\n fadeInAnimation,\n } from '~services/styled';\n // #endregion external\n\n\n // #region internal\n import {\n MENUS,\n } from './data';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nexport interface IStyledToolbar {\n mouseIn: boolean;\n conceal: boolean;\n showMenu: keyof typeof MENUS;\n isMounted: boolean;\n fadeInTime: number;\n}\n\nexport const StyledToolbar = styled.div<IStyledToolbar>`\n bottom: ${({\n conceal,\n mouseIn,\n }) => {\n if (!conceal) {\n return '-5px';\n }\n\n if (mouseIn) {\n return '-5px';\n }\n return '-55px';\n }};\n pointer-events: ${({\n showMenu,\n }) => {\n if (showMenu !== MENUS.NONE) {\n return 'all';\n }\n return 'none';\n }};\n opacity: ${({\n fadeInTime,\n }) => {\n if (fadeInTime) {\n return '0';\n }\n\n return '1';\n }};\n animation: ${({\n fadeInTime,\n isMounted,\n }) => {\n if (\n isMounted\n && fadeInTime\n ) {\n return fadeInAnimation(fadeInTime);\n }\n\n return '';\n }};\n\n display: grid;\n position: absolute;\n left: 0;\n right: 0;\n height: 75px;\n z-index: 9999;\n transition: bottom 300ms ease-in-out;\n`;\n\n\nexport interface IStyledToolbarButtons {\n theme: Theme;\n transparentUI: boolean;\n showIcons: boolean;\n showTransformButtons: boolean;\n documentsBased: boolean;\n opaque: boolean;\n mouseIn: boolean;\n}\n\nexport const StyledToolbarButtons = styled.div<IStyledToolbarButtons>`\n color: ${({\n theme,\n }) => {\n return theme.colorPrimary;\n }};\n background-color: ${({\n theme,\n transparentUI,\n }) => {\n if (transparentUI) {\n return theme.backgroundColorPrimaryAlpha;\n }\n\n return theme.backgroundColorSecondary;\n }};\n box-shadow: ${({\n theme,\n }) => {\n return theme.boxShadowUmbra;\n }};\n grid-template-columns: ${({\n showIcons,\n showTransformButtons,\n documentsBased,\n }) => {\n if (\n showIcons\n && !showTransformButtons\n ) {\n if (documentsBased) {\n return 'repeat(6, minmax(min-content, 40px))';\n } else {\n return 'repeat(5, minmax(min-content, 40px))';\n }\n }\n\n if (!showTransformButtons) {\n if (documentsBased) {\n return 'repeat(6, minmax(min-content, 40px))';\n } else {\n return 'repeat(5, minmax(min-content, 40px))';\n }\n }\n\n if (documentsBased) {\n return '40px 200px 200px 200px 40px 40px';\n }\n\n return '40px 200px 200px 200px 40px';\n }};\n opacity: ${({\n opaque,\n mouseIn,\n }) => {\n if (!opaque && !mouseIn) {\n return '0.4';\n }\n return '1';\n }};\n\n z-index: 9999;\n user-select: none;\n /* height: 75px; */\n display: grid;\n pointer-events: all;\n display: grid;\n /* stretch buttons to the full toolbar height so their fill is never short */\n align-items: stretch;\n justify-content: center;\n justify-items: center;\n border-radius: 22.5px;\n margin: 0 auto;\n margin-top: 10px;\n margin-bottom: 20px;\n padding: 0 22.5px;\n font-size: 12px;\n height: 45px;\n transition: opacity 300ms ease-in-out;\n\n :after {\n content: '';\n position: absolute;\n top: 55px;\n height: 20px;\n left: 0;\n right: 20%;\n }\n\n @media (max-width: 900px) {\n :after {\n right: 0;\n }\n }\n`;\n\n\nexport interface IStyledToolbarButton {\n theme: Theme;\n button: boolean;\n active: boolean;\n showIcons: boolean;\n showTransformButtons: boolean;\n}\n\nexport const StyledToolbarButton = styled.div<IStyledToolbarButton>`\n padding: ${({\n button,\n showIcons,\n showTransformButtons,\n }) => {\n if (button) {\n return '0';\n }\n\n if (\n showIcons\n && !showTransformButtons\n ) {\n return '0';\n }\n\n return '0 7px';\n }};\n background-color: ${({\n active,\n theme,\n }) => {\n if (active) {\n return theme.backgroundColorTertiary;\n }\n return 'transparent';\n }};\n min-width: ${({\n button,\n }) => {\n if (button) {\n return '40px';\n }\n\n return '70px';\n }};\n\n /* Original look: a full-height fill on the button, with a smooth fade. Fill the row the\n grid stretches us into (min 45px) so the highlight always spans the toolbar height. */\n min-height: 45px;\n height: 100%;\n display: grid;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n user-select: none;\n transition: background-color 150ms ease;\n\n /* No @media (hover: hover) gate — some setups report hover: none even with a mouse,\n which silently dropped the hover fill. */\n :hover {\n background-color: ${({\n theme,\n }) => {\n return theme.backgroundColorTertiary;\n }};\n }\n`;\n\n\nexport const StyledIcon = styled.div`\n width: 40px;\n height: 100%;\n display: grid;\n place-content: center;\n\n /* svg {\n height: 15px;\n width: 15px;\n fill: white;\n } */\n`;\n// #endregion module\n","// #region imports\n // #region libraries\n import styled from 'styled-components';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\nexport const StyledPluridMenuUniverses = styled.div`\n position: absolute;\n bottom: 75px;\n max-height: 250px;\n width: 380px;\n left: 50%;\n transform: translateX(-50%);\n border-radius: 22.5px;\n padding: 22px;\n font-size: 0.8rem;\n overflow: hidden;\n\n background-color: ${(props: any) => {\n return props.theme.backgroundColorSecondary;\n }};\n box-shadow: ${(props: any) => {\n return props.theme.boxShadowUmbra;\n }};\n\n ul {\n padding: 0;\n list-style: none;\n }\n`;\n\n\nexport const StyledPluridMenuUniversesItem: any = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n position: relative;\n\n margin-bottom: ${(props: any) => {\n if (props.afterline) {\n return '30px';\n }\n return '10px';\n }};\n\n ${(props: any) => {\n if (props.afterline) {\n return `\n ::after {\n position: absolute;\n content: '';\n left: 0;\n right: 0;\n bottom: -15px;\n height: 1px;\n background-color: white;\n }\n `;\n }\n return '';\n }};\n`;\n\n\nexport const StyledPluridMenuUniversesScroll = styled.div`\n max-height: 210px;\n overflow: scroll;\n padding: 0 5px;\n\n /* Hide Scrollbar */\n scrollbar-width: none; /* Firefox 64 */\n -ms-overflow-style: none; /* Internet Explorer 11 */\n ::-webkit-scrollbar { /** WebKit */\n display: none;\n }\n\n h5::first-child {\n margin-top: 0;\n }\n`;\n\n\nexport const StyledMenuUniversesItemList: any = styled.li`\n margin: 10px 0;\n padding: 10px 20px;\n border-radius: 100px;\n\n cursor: ${(props: any) => {\n if (props.active) {\n return 'initial';\n }\n return 'pointer';\n }};\n background-color: ${(props: any) => {\n if (props.active) {\n return props.theme.backgroundColorTertiary;\n }\n return '';\n }};\n box-shadow: ${(props: any) => {\n if (props.active) {\n return 'inset 0px -1px 6px 0px ' + props.theme.boxShadowUmbraColor;\n }\n return '';\n }};\n\n :hover {\n background-color: ${(props: any) => {\n return props.theme.backgroundColorTertiary;\n }};\n box-shadow: ${(props: any) => {\n if (props.active) {\n return 'inset 0px -1px 6px 0px ' + props.theme.boxShadowUmbraColor;\n }\n\n return props.theme.boxShadowUmbra;\n }};\n }\n`;\n// #endregion module\n","// #region imports\n // #region libraries\n import React from 'react';\n\n import {\n AnyAction,\n ThunkDispatch,\n } from '@reduxjs/toolkit';\n import { connect } from 'react-redux';\n\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n\n import {\n Indexed,\n // PluridInternalStateUniverse,\n } from '@plurid/plurid-data';\n // #endregion libraries\n\n\n // #region external\n import { AppState } from '~services/state/store';\n import StateContext from '~services/state/context';\n import selectors from '~services/state/selectors';\n import actions from '~services/state/actions';\n import {\n DispatchAction,\n } from '~data/interfaces';\n // #endregion external\n\n\n // #region internal\n import {\n StyledPluridMenuUniverses,\n // StyledPluridMenuUniversesItem,\n StyledPluridMenuUniversesScroll,\n StyledMenuUniversesItemList,\n } from './styled';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nexport interface PluridMenuUniversesOwnProperties {\n}\n\nexport interface PluridMenuUniversesStateProperties {\n interactionTheme: Theme;\n // documents: Indexed<PluridInternalStateUniverse>;\n activeUniverseID: string;\n}\n\nexport interface PluridMenuUniversesDispatchProperties {\n dispatchSetActiveUniverse: DispatchAction<typeof actions.space.setActiveUniverse>;\n}\n\nexport type PluridMenuUniversesProperties = PluridMenuUniversesOwnProperties\n & PluridMenuUniversesStateProperties\n & PluridMenuUniversesDispatchProperties;\n\n\nconst PluridMenuUniverses: React.FC<PluridMenuUniversesProperties> = (\n properties,\n) => {\n /** properties */\n const {\n /** state */\n interactionTheme,\n // documents,\n activeUniverseID,\n\n /** dispatch */\n dispatchSetActiveUniverse,\n } = properties;\n\n\n /** render */\n return (\n <StyledPluridMenuUniverses\n theme={interactionTheme}\n >\n <StyledPluridMenuUniversesScroll>\n {/* <ul>\n {\n Object.keys(documents).map(documentID => {\n const document = documents[documentID];\n const active = documentID === activeUniverseID;\n\n return (\n <StyledMenuUniversesItemList\n key={documentID}\n theme={interactionTheme}\n onClick={() => !active ? dispatchSetActiveUniverse(documentID) : null}\n active={active}\n >\n {document.name}\n </StyledMenuUniversesItemList>\n )\n })\n }\n </ul> */}\n </StyledPluridMenuUniversesScroll>\n </StyledPluridMenuUniverses>\n );\n}\n\n\nconst mapStateToProps = (\n state: AppState,\n): PluridMenuUniversesStateProperties => ({\n interactionTheme: selectors.themes.getInteractionTheme(state),\n // documents: selectors.data.getUniverses(state),\n activeUniverseID: selectors.space.getActiveUniverseID(state),\n});\n\n\nconst mapDispatchToProps = (\n dispatch: ThunkDispatch<{}, {}, AnyAction>\n): PluridMenuUniversesDispatchProperties => ({\n dispatchSetActiveUniverse: (\n documentID: string,\n ) => dispatch(\n actions.space.setActiveUniverse(documentID),\n ),\n});\n\n\nconst ConnectedPluridMenuUniverses = connect(\n mapStateToProps,\n mapDispatchToProps,\n null,\n {\n context: StateContext,\n },\n)(PluridMenuUniverses);\n// #endregion module\n\n\n\n// #region exports\nexport default ConnectedPluridMenuUniverses;\n// #endregion exports\n","// #region imports\n // #region libraries\n import styled from 'styled-components';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\nexport const StyledPluridDrawer: any = styled.div`\n h5 {\n font-size: 1rem;\n margin: 0;\n }\n\n margin-bottom: 2rem;\n border-top-left-radius: 15px;\n border-top-right-radius: 15px;\n\n padding-bottom: ${(props: any) => {\n if (props.transparentUI && props.toggled) {\n return '0.5rem';\n }\n return '0';\n }};\n background-color: ${(props: any) => {\n if (props.transparentUI && props.mouseOver) {\n return props.theme.backgroundColorSecondary;\n }\n return 'transparent';\n }};\n box-shadow: ${(props: any) => {\n if (props.transparentUI && props.mouseOver) {\n return props.theme.boxShadowUmbra;\n }\n return 'none';\n }};\n color: ${(props: any) => {\n return props.theme.colorPrimary;\n }};\n`;\n\n\nexport const StyledPluridDrawerHeading: any = styled.div`\n user-select: none;\n cursor: pointer;\n padding: 0.5rem;\n margin-bottom: 0.5rem;\n text-align: left;\n transition: box-shadow 150ms ease;\n\n /* Just an underline on hover — NO background fill — drawn with an inset box-shadow so\n it can never reflow / shift the text (a border-bottom toggle nudges the layout). */\n :hover {\n box-shadow: inset 0 -1px 0 0 ${(props: any) => {\n return props.theme.colorPrimary;\n }};\n }\n`;\n\n\nexport const StyledPluridDrawerItems = styled.div`\n`;\n// #endregion module\n","// #region imports\n // #region libraries\n import React, {\n useState,\n } from 'react';\n\n import {\n AnyAction,\n ThunkDispatch,\n } from '@reduxjs/toolkit';\n import { connect } from 'react-redux';\n\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n\n import {\n PluridConfiguration,\n } from '@plurid/plurid-data';\n\n import {\n universal,\n } from '@plurid/plurid-ui-components-react';\n // #endregion libraries\n\n\n // #region external\n import { AppState } from '~services/state/store';\n import StateContext from '~services/state/context';\n import selectors from '~services/state/selectors';\n // import actions from '~services/state/actions';\n // #endregion external\n\n\n // #region internal\n import {\n StyledPluridDrawer,\n StyledPluridDrawerHeading,\n StyledPluridDrawerItems,\n } from './styled';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nconst {\n typography: {\n Heading: PluridHeading,\n },\n} = universal;\n\nexport interface PluridDrawerOwnProperties {\n heading: string;\n items: JSX.Element;\n toggled: boolean;\n toggle(): void;\n}\n\nexport interface PluridDrawerStateProperties {\n interactionTheme: Theme;\n configuration: PluridConfiguration;\n}\n\nexport interface PluridDrawerDispatchProperties {\n}\n\nexport type PluridDrawerProperties = PluridDrawerOwnProperties\n & PluridDrawerStateProperties\n & PluridDrawerDispatchProperties;\n\nconst PluridDrawer: React.FC<PluridDrawerProperties> = (\n properties\n) => {\n /** properties */\n const {\n /** own */\n heading,\n items,\n toggled,\n toggle,\n\n /** state */\n interactionTheme,\n configuration,\n\n /** dispatch */\n } = properties;\n\n const {\n global,\n } = configuration;\n\n const {\n transparentUI,\n } = global;\n\n\n /** state */\n const [mouseOver, setMouseOver] = useState(false);\n\n\n /** render */\n return (\n <StyledPluridDrawer\n theme={interactionTheme}\n onMouseEnter={() => setMouseOver(true)}\n onMouseLeave={() => setMouseOver(false)}\n transparentUI={transparentUI}\n mouseOver={mouseOver}\n toggled={toggled}\n >\n <StyledPluridDrawerHeading\n theme={interactionTheme}\n onClick={() => toggle()}\n >\n <PluridHeading\n theme={interactionTheme}\n type=\"h5\"\n >\n {heading}\n </PluridHeading>\n </StyledPluridDrawerHeading>\n\n {toggled && (\n <StyledPluridDrawerItems>\n {items}\n </StyledPluridDrawerItems>\n )}\n </StyledPluridDrawer>\n );\n}\n\n\nconst mapStateToProps = (\n state: AppState,\n): PluridDrawerStateProperties => ({\n interactionTheme: selectors.themes.getInteractionTheme(state),\n configuration: selectors.configuration.getConfiguration(state),\n});\n\n\nconst mapDispatchToProps = (\n dispatch: ThunkDispatch<{}, {}, AnyAction>\n): PluridDrawerDispatchProperties => ({\n});\n\n\nconst ConnectedPluridDrawer = connect(\n mapStateToProps,\n mapDispatchToProps,\n null,\n {\n context: StateContext,\n },\n)(PluridDrawer);\n// #endregion module\n\n\n\n// #region exports\nexport default ConnectedPluridDrawer;\n// #endregion exports\n","// #region imports\n // #region libraries\n import styled from 'styled-components';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\nexport const StyledPluridMoreMenu: any = styled.div`\n position: absolute;\n bottom: 75px;\n height: 280px;\n width: 380px;\n left: 50%;\n transform: translateX(-50%);\n border-radius: 22.5px;\n padding: 22px;\n font-size: 0.8rem;\n overflow: hidden;\n\n background-color: ${(props: any) => {\n if (props.transparentUI) {\n return props.theme.backgroundColorPrimaryAlpha;\n }\n\n return props.theme.backgroundColorSecondary;\n }};\n box-shadow: ${(props: any) => {\n return props.theme.boxShadowUmbra;\n }};\n`;\n\n\nexport const StyledPluridMoreMenuItem: any = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n position: relative;\n min-height: 30px;\n padding: 0 0.5rem;\n\n margin-bottom: ${(props: any) => {\n if (props.last) {\n return '0';\n }\n if (props.afterline) {\n return '30px';\n }\n return '10px';\n }};\n\n ${(props: any) => {\n if (props.afterline) {\n return `\n ::after {\n position: absolute;\n content: '';\n left: 0;\n right: 0;\n bottom: -15px;\n height: 1px;\n background-color: ${props.theme ? props.theme.colorPrimary : 'white'};\n }\n `;\n }\n return '';\n }};\n`;\n\n\nexport const StyledPluridMoreMenuScroll = styled.div`\n height: 240px;\n overflow: scroll;\n padding: 0 5px;\n\n /* Hide Scrollbar */\n scrollbar-width: none; /* Firefox 64 */\n -ms-overflow-style: none; /* Internet Explorer 11 */\n ::-webkit-scrollbar { /** WebKit */\n display: none;\n }\n\n h5::first-child {\n margin-top: 0;\n }\n`;\n// #endregion module\n","// #region imports\n // #region libraries\n import React, {\n useState,\n useEffect,\n } from 'react';\n\n import {\n AnyAction,\n ThunkDispatch,\n } from '@reduxjs/toolkit';\n import { connect } from 'react-redux';\n\n\n import themes, {\n Theme,\n } from '@plurid/plurid-themes';\n\n import {\n internationalization,\n\n PluridConfiguration,\n InternationalizationLanguageType,\n } from '@plurid/plurid-data';\n\n import {\n internatiolate,\n } from '@plurid/plurid-engine';\n\n import {\n universal,\n } from '@plurid/plurid-ui-components-react';\n // #endregion libraries\n\n\n // #region external\n import {\n StyledPluridMoreMenuItem,\n } from '../../styled';\n\n import { AppState } from '~services/state/store';\n import StateContext from '~services/state/context';\n import selectors from '~services/state/selectors';\n import actions from '~services/state/actions';\n import {\n DispatchAction,\n } from '~data/interfaces';\n // #endregion external\n// #endregion imports\n\n\n\n// #region module\nconst {\n inputs: {\n Dropdown: PluridDropdown,\n },\n} = universal;\n\nexport interface PluridMenuMoreGlobalOwnProperties {\n}\n\nexport interface PluridMenuMoreGlobalStateProperties {\n stateLanguage: InternationalizationLanguageType;\n interactionTheme: Theme;\n configuration: PluridConfiguration;\n}\n\nexport interface PluridMenuMoreGlobalDispatchProperties {\n dispatchSetGeneralTheme: DispatchAction<typeof actions.themes.setGeneralTheme>;\n dispatchSetInteractionTheme: DispatchAction<typeof actions.themes.setInteractionTheme>;\n\n dispatchSetConfigurationThemeGeneralAction: DispatchAction<typeof actions.configuration.setConfigurationThemeGeneral>;\n dispatchSetConfigurationThemeInteractionAction: DispatchAction<typeof actions.configuration.setConfigurationThemeInteraction>;\n dispatchSetConfigurationLanguage: DispatchAction<typeof actions.configuration.setConfigurationLanguage>;\n}\n\nexport type PluridMenuMoreGlobalProperties = PluridMenuMoreGlobalOwnProperties\n & PluridMenuMoreGlobalStateProperties\n & PluridMenuMoreGlobalDispatchProperties;\n\n\nconst PluridMenuMoreGlobal: React.FC<PluridMenuMoreGlobalProperties> = (\n properties,\n) => {\n /** properties */\n const {\n /** state */\n stateLanguage,\n interactionTheme,\n configuration,\n\n /** dispatch */\n dispatchSetGeneralTheme,\n dispatchSetInteractionTheme,\n dispatchSetConfigurationThemeGeneralAction,\n dispatchSetConfigurationThemeInteractionAction,\n dispatchSetConfigurationLanguage,\n } = properties;\n\n const selectedTheme = configuration.global.theme;\n\n const [generalThemeName, setGeneralThemeName] = useState(\n typeof selectedTheme === 'object'\n ? selectedTheme.general\n : selectedTheme\n );\n const [interactionThemeName, setInteractionThemeName] = useState(\n typeof selectedTheme === 'object'\n ? selectedTheme.interaction\n : selectedTheme\n );\n\n const setGeneralTheme = (selectedTheme: any) => {\n dispatchSetGeneralTheme((themes as any)[selectedTheme]);\n dispatchSetConfigurationThemeGeneralAction(selectedTheme);\n }\n\n const setInteractionTheme = (selectedTheme: any) => {\n dispatchSetInteractionTheme((themes as any)[selectedTheme]);\n dispatchSetConfigurationThemeInteractionAction(selectedTheme);\n }\n\n const setLanguage = (\n selectedLanguage: any,\n ) => {\n dispatchSetConfigurationLanguage(selectedLanguage);\n }\n\n useEffect(() => {\n if (typeof selectedTheme === 'object') {\n setGeneralThemeName(selectedTheme.general);\n setInteractionThemeName(selectedTheme.interaction);\n } else {\n setGeneralThemeName(selectedTheme);\n setInteractionThemeName(selectedTheme);\n }\n }, [\n selectedTheme,\n ]);\n\n\n /** render */\n return (\n <>\n <StyledPluridMoreMenuItem>\n {internatiolate(stateLanguage, internationalization.fields.toolbarDrawerGlobalGeneralTheme)}\n\n <PluridDropdown\n selectables={Object.keys(themes)}\n selected={typeof generalThemeName === 'string' ? generalThemeName : ''}\n atSelect={(selection) => setGeneralTheme(selection)}\n theme={interactionTheme}\n filterable={true}\n heightItems={3}\n width={90}\n style={{\n fontSize: '0.8rem',\n }}\n />\n </StyledPluridMoreMenuItem>\n\n <StyledPluridMoreMenuItem>\n {internatiolate(stateLanguage, internationalization.fields.toolbarDrawerGlobalInteractionTheme)}\n\n <PluridDropdown\n selectables={Object.keys(themes)}\n selected={typeof interactionThemeName === 'string' ? interactionThemeName : ''}\n atSelect={(selection) => setInteractionTheme(selection)}\n theme={interactionTheme}\n heightItems={3}\n filterable={true}\n width={90}\n style={{\n fontSize: '0.8rem',\n }}\n />\n </StyledPluridMoreMenuItem>\n\n <StyledPluridMoreMenuItem\n last={true}\n >\n {internatiolate(stateLanguage, internationalization.fields.toolbarDrawerGlobalLanguage)}\n\n <PluridDropdown\n selectables={internationalization.languages}\n selected={stateLanguage}\n atSelect={(selection) => setLanguage(selection)}\n theme={interactionTheme}\n heightItems={3}\n width={90}\n style={{\n fontSize: '0.8rem',\n }}\n />\n </StyledPluridMoreMenuItem>\n </>\n );\n}\n\n\nconst mapStateToProps = (\n state: AppState,\n): PluridMenuMoreGlobalStateProperties => ({\n stateLanguage: selectors.configuration.getConfiguration(state).global.language,\n interactionTheme: selectors.themes.getInteractionTheme(state),\n configuration: selectors.configuration.getConfiguration(state),\n});\n\n\nconst mapDispatchToProps = (\n dispatch: ThunkDispatch<{}, {}, AnyAction>\n): PluridMenuMoreGlobalDispatchProperties => ({\n dispatchSetConfigurationThemeGeneralAction: (theme: string) => dispatch(\n actions.configuration.setConfigurationThemeGeneral(theme)\n ),\n dispatchSetConfigurationThemeInteractionAction: (theme: string) => dispatch(\n actions.configuration.setConfigurationThemeInteraction(theme)\n ),\n dispatchSetConfigurationLanguage: (\n language,\n ) => dispatch(\n actions.configuration.setConfigurationLanguage(language)\n ),\n\n dispatchSetGeneralTheme: (theme: Theme) => dispatch(\n actions.themes.setGeneralTheme(theme)\n ),\n dispatchSetInteractionTheme: (theme: Theme) => dispatch(\n actions.themes.setInteractionTheme(theme)\n ),\n});\n\n\nconst ConnectedPluridMenuMoreGlobal = connect(\n mapStateToProps,\n mapDispatchToProps,\n null,\n {\n context: StateContext,\n },\n)(PluridMenuMoreGlobal);\n// #endregion module\n\n\n\n// #region exports\nexport default ConnectedPluridMenuMoreGlobal;\n// #endregion exports\n","// #region imports\n // #region libraries\n import React from 'react';\n\n import {\n AnyAction,\n ThunkDispatch,\n } from '@reduxjs/toolkit';\n import { connect } from 'react-redux';\n\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n\n import {\n internationalization,\n\n TRANSFORM_TOUCHES,\n\n PluridConfiguration,\n InternationalizationLanguageType,\n } from '@plurid/plurid-data';\n\n import {\n internatiolate,\n } from '@plurid/plurid-engine';\n\n import {\n universal,\n } from '@plurid/plurid-ui-components-react';\n\n import {\n StyledPluridMoreMenuItem,\n } from '../../styled';\n\n import { AppState } from '~services/state/store';\n import StateContext from '~services/state/context';\n import selectors from '~services/state/selectors';\n import actions from '~services/state/actions';\n import {\n DispatchAction,\n } from '~data/interfaces';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\nconst {\n inputs: {\n Switch: PluridSwitch,\n },\n} = universal;\n\nexport interface PluridMenuMoreTransformOwnProperties {\n}\n\nexport interface PluridMenuMoreTransformStateProperties {\n stateLanguage: InternationalizationLanguageType;\n interactionTheme: Theme;\n configuration: PluridConfiguration;\n}\n\nexport interface PluridMenuMoreTransformDispatchProperties {\n dispatchToggleConfigurationSpaceTransformMultimode: DispatchAction<typeof actions.configuration.toggleConfigurationSpaceTransformMultimode>;\n dispatchSetConfigurationSpaceTransformTouch: DispatchAction<typeof actions.configuration.setConfigurationSpaceTransformTouch>;\n dispatchSetConfigurationSpaceTransformLocks: DispatchAction<typeof actions.configuration.setConfigurationSpaceTransformLocks>;\n}\n\nexport type PluridMenuMoreTransformProperties = PluridMenuMoreTransformOwnProperties\n & PluridMenuMoreTransformStateProperties\n & PluridMenuMoreTransformDispatchProperties;\n\n\nconst PluridMenuMoreTransform: React.FC<PluridMenuMoreTransformProperties> = (\n properties,\n) => {\n /** properties */\n const {\n /** state */\n stateLanguage,\n interactionTheme,\n configuration,\n\n /** dispatch */\n dispatchToggleConfigurationSpaceTransformMultimode,\n dispatchSetConfigurationSpaceTransformTouch,\n dispatchSetConfigurationSpaceTransformLocks,\n } = properties;\n\n const {\n transformMultimode,\n transformLocks,\n transformTouch,\n } = configuration.space;\n\n\n /** render */\n return (\n <>\n <StyledPluridMoreMenuItem>\n <div>\n {internatiolate(stateLanguage, internationalization.fields.toolbarDrawerTransformMultiModeTransform)}\n </div>\n\n <PluridSwitch\n theme={interactionTheme}\n checked={transformMultimode}\n atChange={() => dispatchToggleConfigurationSpaceTransformMultimode(!transformMultimode)}\n exclusive={true}\n level={2}\n />\n </StyledPluridMoreMenuItem>\n\n <StyledPluridMoreMenuItem>\n <div>\n {internatiolate(stateLanguage, internationalization.fields.toolbarDrawerTransformAllowRotationX)}\n </div>\n\n <PluridSwitch\n theme={interactionTheme}\n checked={transformLocks.rotationX}\n atChange={() => dispatchSetConfigurationSpaceTransformLocks('rotationX')}\n exclusive={true}\n level={2}\n />\n </StyledPluridMoreMenuItem>\n\n <StyledPluridMoreMenuItem>\n <div>\n {internatiolate(stateLanguage, internationalization.fields.toolbarDrawerTransformAllowRotationY)}\n </div>\n\n <PluridSwitch\n theme={interactionTheme}\n checked={transformLocks.rotationY}\n atChange={() => dispatchSetConfigurationSpaceTransformLocks('rotationY')}\n exclusive={true}\n level={2}\n />\n </StyledPluridMoreMenuItem>\n\n <StyledPluridMoreMenuItem>\n <div>\n {internatiolate(stateLanguage, internationalization.fields.toolbarDrawerTransformAllowTranslationX)}\n </div>\n\n <PluridSwitch\n theme={interactionTheme}\n checked={transformLocks.translationX}\n atChange={() => dispatchSetConfigurationSpaceTransformLocks('translationX')}\n exclusive={true}\n level={2}\n />\n </StyledPluridMoreMenuItem>\n\n <StyledPluridMoreMenuItem>\n <div>\n {internatiolate(stateLanguage, internationalization.fields.toolbarDrawerTransformAllowTranslationY)}\n </div>\n\n <PluridSwitch\n theme={interactionTheme}\n checked={transformLocks.translationY}\n atChange={() => dispatchSetConfigurationSpaceTransformLocks('translationY')}\n exclusive={true}\n level={2}\n />\n </StyledPluridMoreMenuItem>\n\n <StyledPluridMoreMenuItem>\n <div>\n {internatiolate(stateLanguage, internationalization.fields.toolbarDrawerTransformAllowTranslationZ)}\n </div>\n\n <PluridSwitch\n theme={interactionTheme}\n checked={transformLocks.translationZ}\n atChange={() => dispatchSetConfigurationSpaceTransformLocks('translationZ')}\n exclusive={true}\n level={2}\n />\n </StyledPluridMoreMenuItem>\n\n <StyledPluridMoreMenuItem>\n <div>\n {internatiolate(stateLanguage, internationalization.fields.toolbarDrawerTransformAllowScale)}\n </div>\n\n <PluridSwitch\n theme={interactionTheme}\n checked={transformLocks.scale}\n atChange={() => dispatchSetConfigurationSpaceTransformLocks('scale')}\n exclusive={true}\n level={2}\n />\n </StyledPluridMoreMenuItem>\n\n <StyledPluridMoreMenuItem\n last={true}\n >\n <div>\n {internatiolate(stateLanguage, internationalization.fields.toolbarDrawerTransformTouchTransform)}\n :&nbsp;{transformTouch === TRANSFORM_TOUCHES.PAN\n ? 'pan'\n : 'swipe'\n }\n </div>\n\n <PluridSwitch\n theme={interactionTheme}\n checked={transformTouch === TRANSFORM_TOUCHES.PAN}\n atChange={() => transformTouch === TRANSFORM_TOUCHES.PAN\n ? dispatchSetConfigurationSpaceTransformTouch(TRANSFORM_TOUCHES.SWIPE)\n : dispatchSetConfigurationSpaceTransformTouch(TRANSFORM_TOUCHES.PAN)\n }\n level={2}\n />\n </StyledPluridMoreMenuItem>\n </>\n );\n}\n\n\nconst mapStateToProps = (\n state: AppState,\n): PluridMenuMoreTransformStateProperties => ({\n stateLanguage: selectors.configuration.getConfiguration(state).global.language,\n interactionTheme: selectors.themes.getInteractionTheme(state),\n configuration: selectors.configuration.getConfiguration(state),\n});\n\n\nconst mapDispatchToProps = (\n dispatch: ThunkDispatch<{}, {}, AnyAction>\n): PluridMenuMoreTransformDispatchProperties => ({\n dispatchToggleConfigurationSpaceTransformMultimode: (\n multimode,\n ) => dispatch(\n actions.configuration.toggleConfigurationSpaceTransformMultimode(multimode),\n ),\n dispatchSetConfigurationSpaceTransformTouch: (\n touch: keyof typeof TRANSFORM_TOUCHES,\n ) => dispatch(\n actions.configuration.setConfigurationSpaceTransformTouch(touch as any),\n ),\n dispatchSetConfigurationSpaceTransformLocks: (\n lock: string,\n ) => dispatch(\n actions.configuration.setConfigurationSpaceTransformLocks(lock),\n ),\n});\n\n\nconst ConnectedPluridMenuMoreTransform = connect(\n mapStateToProps,\n mapDispatchToProps,\n null,\n {\n context: StateContext,\n },\n)(PluridMenuMoreTransform);\n// #endregion module\n\n\n\n// #region exports\nexport default ConnectedPluridMenuMoreTransform;\n// #endregion exports\n","// #region imports\n // #region libraries\n import React from 'react';\n\n import {\n AnyAction,\n ThunkDispatch,\n } from '@reduxjs/toolkit';\n import { connect } from 'react-redux';\n\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n\n import {\n internationalization,\n layoutNames,\n\n SIZES,\n LAYOUT_TYPES,\n\n PluridConfiguration,\n } from '@plurid/plurid-data';\n\n import {\n internatiolate,\n } from '@plurid/plurid-engine';\n\n import {\n universal,\n } from '@plurid/plurid-ui-components-react';\n // #endregion libraries\n\n\n // #region external\n import {\n StyledPluridMoreMenuItem,\n } from '../../styled';\n\n import { AppState } from '~services/state/store';\n import StateContext from '~services/state/context';\n import selectors from '~services/state/selectors';\n import actions from '~services/state/actions';\n import {\n DispatchAction,\n DispatchActionWithoutPayload,\n } from '~data/interfaces';\n // #endregion external\n// #endregion imports\n\n\n\n// #region module\nconst {\n inputs: {\n Dropdown: PluridDropdown,\n Switch: PluridSwitch,\n Slider: PluridSlider,\n },\n} = universal;\n\nexport interface PluridMenuMoreSpaceOwnProperties {\n}\n\nexport interface PluridMenuMoreSpaceStateProperties {\n interactionTheme: Theme;\n configuration: PluridConfiguration;\n}\n\nexport interface PluridMenuMoreSpaceDispatchProperties {\n dispatchSetConfigurationPlaneOpacity: DispatchAction<typeof actions.configuration.setConfigurationPlaneOpacity>;\n\n dispatchToggleConfigurationSpaceTransparentUI: DispatchActionWithoutPayload<typeof actions.configuration.toggleConfigurationSpaceTransparentUI>;\n dispatchToggleConfigurationSpaceShowTransformOrigin: DispatchActionWithoutPayload<typeof actions.configuration.toggleConfigurationShowTransformOrigin>;\n dispatchSetConfigurationSpaceTransformOriginSize: DispatchAction<typeof actions.configuration.setConfigurationSpaceTransformOriginSize>;\n dispatchSetConfigurationSpaceLayoutType: DispatchAction<typeof actions.configuration.setConfigurationSpaceLayout>;\n}\n\nexport type PluridMenuMoreSpaceProperties = PluridMenuMoreSpaceOwnProperties\n & PluridMenuMoreSpaceStateProperties\n & PluridMenuMoreSpaceDispatchProperties;\n\n\nconst PluridMenuMoreSpace: React.FC<PluridMenuMoreSpaceProperties> = (\n properties,\n) => {\n /** properties */\n const {\n /** state */\n interactionTheme,\n configuration,\n\n /** dispatch */\n dispatchSetConfigurationPlaneOpacity,\n\n dispatchToggleConfigurationSpaceTransparentUI,\n dispatchToggleConfigurationSpaceShowTransformOrigin,\n dispatchSetConfigurationSpaceTransformOriginSize,\n dispatchSetConfigurationSpaceLayoutType,\n } = properties;\n\n const {\n global,\n space,\n elements,\n } = configuration;\n\n const {\n transparentUI,\n language,\n } = global;\n\n const {\n layout,\n transformOrigin,\n } = space;\n\n const layoutType = layoutNames[layout.type];\n\n const {\n show: showTransformOrigin,\n size: transformOriginSize,\n } = transformOrigin;\n\n const planeOpacity = elements.plane.opacity;\n\n\n /** render */\n return (\n <>\n <StyledPluridMoreMenuItem>\n {internatiolate(language, internationalization.fields.toolbarDrawerSpaceTransparentUserInterface)}\n\n <PluridSwitch\n checked={transparentUI}\n atChange={() => dispatchToggleConfigurationSpaceTransparentUI()}\n exclusive={true}\n level={2}\n theme={interactionTheme}\n />\n </StyledPluridMoreMenuItem>\n\n <StyledPluridMoreMenuItem>\n {internatiolate(language, internationalization.fields.toolbarDrawerSpaceShowTransformOrigin)}\n\n <PluridSwitch\n checked={showTransformOrigin}\n atChange={() => dispatchToggleConfigurationSpaceShowTransformOrigin()}\n exclusive={true}\n level={2}\n theme={interactionTheme}\n />\n </StyledPluridMoreMenuItem>\n\n <StyledPluridMoreMenuItem>\n {internatiolate(language, internationalization.fields.toolbarDrawerSpaceTransformOriginSize)}\n\n <PluridDropdown\n selectables={['small', 'normal', 'large']}\n selected={transformOriginSize.toLowerCase()}\n atSelect={(selection: any) => {\n const selected = selection.toUpperCase();\n if (\n selected === SIZES.SMALL\n || selected === SIZES.NORMAL\n || selected === SIZES.LARGE\n ) {\n dispatchSetConfigurationSpaceTransformOriginSize(selected);\n }\n }}\n heightItems={3}\n theme={interactionTheme}\n />\n </StyledPluridMoreMenuItem>\n\n <StyledPluridMoreMenuItem>\n {internatiolate(language, internationalization.fields.toolbarDrawerSpacePlaneOpacity)}\n\n <PluridSlider\n value={planeOpacity}\n max={1}\n min={0}\n step={0.1}\n defaultValue={100}\n atChange={(value: number) => dispatchSetConfigurationPlaneOpacity(value)}\n thumbSize=\"large\"\n level={2}\n theme={interactionTheme}\n />\n </StyledPluridMoreMenuItem>\n\n <StyledPluridMoreMenuItem\n last={true}\n >\n {internatiolate(language, internationalization.fields.toolbarDrawerSpaceLayoutType)}\n\n <PluridDropdown\n selectables={[...Object.values(layoutNames)]}\n selected={layoutType}\n atSelect={(selection: any) => {\n const selected = selection.toUpperCase().replace(/\\s/g, '_');\n dispatchSetConfigurationSpaceLayoutType(selected);\n }}\n heightItems={3}\n theme={interactionTheme}\n width={100}\n />\n </StyledPluridMoreMenuItem>\n </>\n );\n}\n\n\nconst mapStateToProps = (\n state: AppState,\n): PluridMenuMoreSpaceStateProperties => ({\n interactionTheme: selectors.themes.getInteractionTheme(state),\n configuration: selectors.configuration.getConfiguration(state),\n});\n\n\nconst mapDispatchToProps = (\n dispatch: ThunkDispatch<{}, {}, AnyAction>\n): PluridMenuMoreSpaceDispatchProperties => ({\n dispatchSetConfigurationPlaneOpacity: (value) => dispatch(\n actions.configuration.setConfigurationPlaneOpacity(value)\n ),\n\n dispatchToggleConfigurationSpaceTransparentUI: () => dispatch(\n actions.configuration.toggleConfigurationSpaceTransparentUI()\n ),\n dispatchToggleConfigurationSpaceShowTransformOrigin: () => dispatch(\n actions.configuration.toggleConfigurationShowTransformOrigin()\n ),\n dispatchSetConfigurationSpaceTransformOriginSize: (\n size: keyof typeof SIZES,\n ) => dispatch(\n actions.configuration.setConfigurationSpaceTransformOriginSize(size as any)\n ),\n dispatchSetConfigurationSpaceLayoutType: (\n layoutType: keyof typeof LAYOUT_TYPES,\n ) => dispatch(\n actions.configuration.setConfigurationSpaceLayout(layoutType),\n ),\n});\n\n\nconst ConnectedPluridMenuMoreSpace = connect(\n mapStateToProps,\n mapDispatchToProps,\n null,\n {\n context: StateContext,\n },\n)(PluridMenuMoreSpace);\n// #endregion module\n\n\n\n// #region exports\nexport default ConnectedPluridMenuMoreSpace;\n// #endregion exports\n","// #region imports\n // #region libraries\n import React, {\n useState,\n useEffect,\n } from 'react';\n\n import {\n AnyAction,\n ThunkDispatch,\n } from '@reduxjs/toolkit';\n import { connect } from 'react-redux';\n\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n\n import {\n internationalization,\n\n PluridConfiguration,\n InternationalizationLanguageType,\n } from '@plurid/plurid-data';\n\n import {\n internatiolate,\n } from '@plurid/plurid-engine';\n\n import {\n universal,\n } from '@plurid/plurid-ui-components-react';\n // #endregion libraries\n\n\n // #region external\n import {\n StyledPluridMoreMenuItem,\n } from '../../styled';\n\n import { AppState } from '~services/state/store';\n import StateContext from '~services/state/context';\n import selectors from '~services/state/selectors';\n import actions from '~services/state/actions';\n import {\n DispatchActionWithoutPayload,\n } from '~data/interfaces';\n import {\n ViewSize,\n } from '~services/state/modules/space/types';\n // #endregion external\n// #endregion imports\n\n\n\n// #region module\nconst {\n inputs: {\n Switch: PluridSwitch,\n },\n} = universal;\n\nexport interface PluridMenuMoreToolbarOwnProperties {\n}\n\nexport interface PluridMenuMoreToolbarStateProperties {\n stateLanguage: InternationalizationLanguageType;\n interactionTheme: Theme;\n configuration: PluridConfiguration;\n viewSize: ViewSize;\n}\n\nexport interface PluridMenuMoreToolbarDispatchProperties {\n dispatchToggleConfigurationToolbarConceal: DispatchActionWithoutPayload<typeof actions.configuration.toggleConfigurationToolbarConceal>;\n dispatchToggleConfigurationToolbarTransformIcons: DispatchActionWithoutPayload<typeof actions.configuration.toggleConfigurationToolbarTransformIcons>;\n dispatchToggleConfigurationToolbarTransformButtons: DispatchActionWithoutPayload<typeof actions.configuration.toggleConfigurationToolbarTransformButtons>;\n dispatchToggleConfigurationToolbarOpaque: DispatchActionWithoutPayload<typeof actions.configuration.toggleConfigurationToolbarOpaque>;\n}\n\nexport type PluridMenuMoreToolbarProperties = PluridMenuMoreToolbarOwnProperties\n & PluridMenuMoreToolbarStateProperties\n & PluridMenuMoreToolbarDispatchProperties;\n\n\nconst PluridMenuMoreToolbar: React.FC<PluridMenuMoreToolbarProperties> = (\n properties,\n) => {\n /** properties */\n const {\n /** state */\n stateLanguage,\n interactionTheme,\n configuration,\n viewSize,\n\n /** dispatch */\n dispatchToggleConfigurationToolbarConceal,\n dispatchToggleConfigurationToolbarTransformIcons,\n dispatchToggleConfigurationToolbarTransformButtons,\n dispatchToggleConfigurationToolbarOpaque,\n } = properties;\n\n const {\n toolbar,\n } = configuration.elements;\n\n const {\n conceal,\n opaque,\n transformIcons,\n transformButtons,\n } = toolbar;\n\n const [viewSizeSmall, setViewSizeSmall] = useState(false);\n\n useEffect(() => {\n if (viewSize.width < 800) {\n setViewSizeSmall(true);\n } else {\n setViewSizeSmall(false);\n }\n }, [\n viewSize.width,\n ]);\n\n\n /** render */\n return (\n <>\n <StyledPluridMoreMenuItem>\n <div>\n {internatiolate(stateLanguage, internationalization.fields.toolbarDrawerToolbarAlwaysOpaque)}\n </div>\n\n <PluridSwitch\n theme={interactionTheme}\n checked={opaque}\n atChange={() => dispatchToggleConfigurationToolbarOpaque()}\n exclusive={true}\n level={2}\n />\n </StyledPluridMoreMenuItem>\n\n <StyledPluridMoreMenuItem>\n <div>\n {internatiolate(stateLanguage, internationalization.fields.toolbarDrawerToolbarShowTransformIcons)}\n </div>\n\n <PluridSwitch\n theme={interactionTheme}\n checked={transformIcons}\n atChange={() => dispatchToggleConfigurationToolbarTransformIcons()}\n exclusive={true}\n level={2}\n />\n </StyledPluridMoreMenuItem>\n\n {!viewSizeSmall && (\n <StyledPluridMoreMenuItem>\n <div>\n {internatiolate(stateLanguage, internationalization.fields.toolbarDrawerToolbarShowTransformArrows)}\n </div>\n\n <PluridSwitch\n theme={interactionTheme}\n checked={transformButtons}\n atChange={() => dispatchToggleConfigurationToolbarTransformButtons()}\n exclusive={true}\n level={2}\n />\n </StyledPluridMoreMenuItem>\n )}\n\n <StyledPluridMoreMenuItem\n last={true}\n >\n <div>\n {internatiolate(stateLanguage, internationalization.fields.toolbarDrawerToolbarConcealToolbar)}\n </div>\n\n <PluridSwitch\n theme={interactionTheme}\n checked={conceal}\n atChange={() => dispatchToggleConfigurationToolbarConceal()}\n exclusive={true}\n level={2}\n />\n </StyledPluridMoreMenuItem>\n </>\n );\n}\n\n\nconst mapStateToProps = (\n state: AppState,\n): PluridMenuMoreToolbarStateProperties => ({\n stateLanguage: selectors.configuration.getConfiguration(state).global.language,\n interactionTheme: selectors.themes.getInteractionTheme(state),\n configuration: selectors.configuration.getConfiguration(state),\n viewSize: selectors.space.getViewSize(state),\n});\n\n\nconst mapDispatchToProps = (\n dispatch: ThunkDispatch<{}, {}, AnyAction>\n): PluridMenuMoreToolbarDispatchProperties => ({\n dispatchToggleConfigurationToolbarConceal: () => dispatch(\n actions.configuration.toggleConfigurationToolbarConceal(),\n ),\n dispatchToggleConfigurationToolbarTransformIcons: () => dispatch(\n actions.configuration.toggleConfigurationToolbarTransformIcons(),\n ),\n dispatchToggleConfigurationToolbarTransformButtons: () => dispatch(\n actions.configuration.toggleConfigurationToolbarTransformButtons(),\n ),\n dispatchToggleConfigurationToolbarOpaque: () => dispatch(\n actions.configuration.toggleConfigurationToolbarOpaque(),\n ),\n});\n\n\nconst ConnectedPluridMenuMoreToolbar = connect(\n mapStateToProps,\n mapDispatchToProps,\n null,\n {\n context: StateContext,\n },\n)(PluridMenuMoreToolbar);\n// #endregion module\n\n\n\n// #region exports\nexport default ConnectedPluridMenuMoreToolbar;\n// #endregion exports\n","// #region imports\n // #region libraries\n import React from 'react';\n\n import {\n AnyAction,\n ThunkDispatch,\n } from '@reduxjs/toolkit';\n import { connect } from 'react-redux';\n\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n\n import {\n internationalization,\n\n PluridConfiguration,\n InternationalizationLanguageType,\n } from '@plurid/plurid-data';\n\n import {\n internatiolate,\n } from '@plurid/plurid-engine';\n\n import {\n universal,\n } from '@plurid/plurid-ui-components-react';\n // #endregion libraries\n\n\n // #region external\n import {\n StyledPluridMoreMenuItem,\n } from '../../styled';\n\n import { AppState } from '~services/state/store';\n import StateContext from '~services/state/context';\n import selectors from '~services/state/selectors';\n import actions from '~services/state/actions';\n import {\n DispatchAction,\n DispatchActionWithoutPayload,\n } from '~data/interfaces';\n // #endregion external\n// #endregion imports\n\n\n\n// #region module\nconst {\n inputs: {\n Switch: PluridSwitch,\n },\n} = universal;\n\nexport interface PluridMenuMoreViewcubeOwnProperties {\n}\n\nexport interface PluridMenuMoreViewcubeStateProperties {\n stateLanguage: InternationalizationLanguageType;\n interactionTheme: Theme;\n configuration: PluridConfiguration;\n}\n\nexport interface PluridMenuMoreViewcubeDispatchProperties {\n dispatchToggleConfigurationViewcubeHide: DispatchAction<typeof actions.configuration.toggleConfigurationViewcubeHide>;\n dispatchToggleConfigurationViewcubeButtons: DispatchAction<typeof actions.configuration.toggleConfigurationViewcubeButtons>;\n dispatchToggleConfigurationViewcubeOpaque: DispatchAction<typeof actions.configuration.toggleConfigurationViewcubeOpaque>;\n dispatchToggleConfigurationViewcubeConceal: DispatchActionWithoutPayload<typeof actions.configuration.toggleConfigurationViewcubeConceal>;\n}\n\nexport type PluridMenuMoreViewcubeProperties = PluridMenuMoreViewcubeOwnProperties\n & PluridMenuMoreViewcubeStateProperties\n & PluridMenuMoreViewcubeDispatchProperties;\n\n\nconst PluridMenuMoreViewcube: React.FC<PluridMenuMoreViewcubeProperties> = (\n properties,\n) => {\n /** properties */\n const {\n /** state */\n stateLanguage,\n interactionTheme,\n configuration,\n\n /** dispatch */\n dispatchToggleConfigurationViewcubeHide,\n dispatchToggleConfigurationViewcubeButtons,\n dispatchToggleConfigurationViewcubeOpaque,\n dispatchToggleConfigurationViewcubeConceal,\n } = properties;\n\n const {\n viewcube,\n } = configuration.elements;\n\n const {\n show,\n buttons,\n opaque,\n conceal,\n } = viewcube;\n\n\n /** render */\n return (\n <>\n <StyledPluridMoreMenuItem\n last={!show ? true : false}\n >\n <div>\n {internatiolate(stateLanguage, internationalization.fields.toolbarDrawerViewcubeShowViewcube)}\n </div>\n\n <PluridSwitch\n theme={interactionTheme}\n checked={show}\n atChange={() => dispatchToggleConfigurationViewcubeHide(!show)}\n exclusive={true}\n level={2}\n />\n </StyledPluridMoreMenuItem>\n\n {show && (\n <>\n <StyledPluridMoreMenuItem>\n <div>\n {internatiolate(stateLanguage, internationalization.fields.toolbarDrawerViewcubeShowTransformButtons)}\n </div>\n\n <PluridSwitch\n theme={interactionTheme}\n checked={buttons}\n atChange={() => dispatchToggleConfigurationViewcubeButtons(!buttons)}\n exclusive={true}\n level={2}\n />\n </StyledPluridMoreMenuItem>\n\n <StyledPluridMoreMenuItem>\n <div>\n {internatiolate(stateLanguage, internationalization.fields.toolbarDrawerViewcubeAlwaysOpaque)}\n </div>\n\n <PluridSwitch\n theme={interactionTheme}\n checked={opaque}\n atChange={() => dispatchToggleConfigurationViewcubeOpaque(!opaque)}\n exclusive={true}\n level={2}\n />\n </StyledPluridMoreMenuItem>\n\n <StyledPluridMoreMenuItem\n last={true}\n >\n <div>\n {internatiolate(stateLanguage, internationalization.fields.toolbarDrawerViewcubeConcealViewcube)}\n </div>\n\n <PluridSwitch\n theme={interactionTheme}\n checked={conceal}\n atChange={() => dispatchToggleConfigurationViewcubeConceal()}\n exclusive={true}\n level={2}\n />\n </StyledPluridMoreMenuItem>\n </>\n )}\n </>\n );\n}\n\n\nconst mapStateToProps = (\n state: AppState,\n): PluridMenuMoreViewcubeStateProperties => ({\n stateLanguage: selectors.configuration.getConfiguration(state).global.language,\n interactionTheme: selectors.themes.getInteractionTheme(state),\n configuration: selectors.configuration.getConfiguration(state),\n});\n\n\nconst mapDispatchToProps = (\n dispatch: ThunkDispatch<{}, {}, AnyAction>\n): PluridMenuMoreViewcubeDispatchProperties => ({\n dispatchToggleConfigurationViewcubeHide: (toggle: boolean) => dispatch(\n actions.configuration.toggleConfigurationViewcubeHide(toggle)\n ),\n dispatchToggleConfigurationViewcubeButtons: (toggle: boolean) => dispatch(\n actions.configuration.toggleConfigurationViewcubeButtons(toggle)\n ),\n dispatchToggleConfigurationViewcubeOpaque: (toggle: boolean) => dispatch(\n actions.configuration.toggleConfigurationViewcubeOpaque(toggle)\n ),\n dispatchToggleConfigurationViewcubeConceal: () => dispatch(\n actions.configuration.toggleConfigurationViewcubeConceal()\n ),\n});\n\n\nconst ConnectedPluridMenuMoreViewcube = connect(\n mapStateToProps,\n mapDispatchToProps,\n null,\n {\n context: StateContext,\n },\n)(PluridMenuMoreViewcube);\n// #endregion module\n\n\n\n// #region exports\nexport default ConnectedPluridMenuMoreViewcube;\n// #endregion exports\n","// #region imports\n // #region libraries\n import React from 'react';\n\n import {\n AnyAction,\n ThunkDispatch,\n } from '@reduxjs/toolkit';\n import { connect } from 'react-redux';\n\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n\n import {\n internationalization,\n\n PluridConfiguration,\n InternationalizationLanguageType,\n } from '@plurid/plurid-data';\n\n import {\n internatiolate,\n } from '@plurid/plurid-engine';\n\n import {\n universal,\n } from '@plurid/plurid-ui-components-react';\n // #endregion libraries\n\n\n // #region external\n import {\n StyledPluridMoreMenuItem,\n } from '../../styled';\n\n import { AppState } from '~services/state/store';\n import StateContext from '~services/state/context';\n import selectors from '~services/state/selectors';\n import actions from '~services/state/actions';\n import {\n DispatchAction,\n } from '~data/interfaces';\n // #endregion external\n// #endregion imports\n\n\n\n// #region module\nconst {\n inputs: {\n Switch: PluridSwitch,\n },\n} = universal;\n\n\nexport interface PluridMenuMoreMinimapStateProperties {\n stateLanguage: InternationalizationLanguageType;\n interactionTheme: Theme;\n configuration: PluridConfiguration;\n}\n\nexport interface PluridMenuMoreMinimapDispatchProperties {\n dispatchToggleConfigurationMinimapHide: DispatchAction<typeof actions.configuration.toggleConfigurationMinimapHide>;\n dispatchToggleConfigurationMinimapTransparent: DispatchAction<typeof actions.configuration.toggleConfigurationMinimapTransparent>;\n}\n\nexport type PluridMenuMoreMinimapProperties =\n & PluridMenuMoreMinimapStateProperties\n & PluridMenuMoreMinimapDispatchProperties;\n\n\nconst PluridMenuMoreMinimap: React.FC<PluridMenuMoreMinimapProperties> = (\n properties,\n) => {\n /** properties */\n const {\n stateLanguage,\n interactionTheme,\n configuration,\n\n dispatchToggleConfigurationMinimapHide,\n dispatchToggleConfigurationMinimapTransparent,\n } = properties;\n\n const minimap = configuration.elements.minimap;\n const show = minimap?.show ?? false;\n const transparent = minimap?.transparent ?? true;\n\n\n /** render */\n return (\n <>\n <StyledPluridMoreMenuItem\n last={!show ? true : false}\n >\n <div>\n {internatiolate(stateLanguage, internationalization.fields.toolbarDrawerMinimapShowMinimap)}\n </div>\n\n <PluridSwitch\n theme={interactionTheme}\n checked={show}\n atChange={() => dispatchToggleConfigurationMinimapHide(!show)}\n exclusive={true}\n level={2}\n />\n </StyledPluridMoreMenuItem>\n\n {show && (\n <StyledPluridMoreMenuItem\n last={true}\n >\n <div>\n {internatiolate(stateLanguage, internationalization.fields.toolbarDrawerMinimapTransparent)}\n </div>\n\n <PluridSwitch\n theme={interactionTheme}\n checked={transparent}\n atChange={() => dispatchToggleConfigurationMinimapTransparent(!transparent)}\n exclusive={true}\n level={2}\n />\n </StyledPluridMoreMenuItem>\n )}\n </>\n );\n}\n\n\nconst mapStateToProps = (\n state: AppState,\n): PluridMenuMoreMinimapStateProperties => ({\n stateLanguage: selectors.configuration.getConfiguration(state).global.language,\n interactionTheme: selectors.themes.getInteractionTheme(state),\n configuration: selectors.configuration.getConfiguration(state),\n});\n\n\nconst mapDispatchToProps = (\n dispatch: ThunkDispatch<{}, {}, AnyAction>\n): PluridMenuMoreMinimapDispatchProperties => ({\n dispatchToggleConfigurationMinimapHide: (toggle: boolean) => dispatch(\n actions.configuration.toggleConfigurationMinimapHide(toggle)\n ),\n dispatchToggleConfigurationMinimapTransparent: (toggle: boolean) => dispatch(\n actions.configuration.toggleConfigurationMinimapTransparent(toggle)\n ),\n});\n\n\nconst ConnectedPluridMenuMoreMinimap = connect(\n mapStateToProps,\n mapDispatchToProps,\n null,\n {\n context: StateContext,\n },\n)(PluridMenuMoreMinimap);\n// #endregion module\n\n\n\n// #region exports\nexport default ConnectedPluridMenuMoreMinimap;\n// #endregion exports\n","// #region imports\n // #region libraries\n import React, {\n useState,\n } from 'react';\n\n import {\n AnyAction,\n ThunkDispatch,\n } from '@reduxjs/toolkit';\n import { connect } from 'react-redux';\n\n\n import {\n internationalization,\n\n PluridConfiguration,\n InternationalizationLanguageType,\n } from '@plurid/plurid-data';\n\n import {\n internatiolate,\n } from '@plurid/plurid-engine';\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n\n import {\n universal,\n } from '@plurid/plurid-ui-components-react';\n\n import {\n useDebouncedCallback,\n } from '@plurid/plurid-functions-react';\n // #endregion libraries\n\n\n // #region external\n import {\n StyledPluridMoreMenuItem,\n } from '../../styled';\n\n import { AppState } from '~services/state/store';\n import StateContext from '~services/state/context';\n import selectors from '~services/state/selectors';\n import actions from '~services/state/actions';\n import {\n DispatchAction,\n } from '~data/interfaces';\n // #endregion external\n// #endregion imports\n\n\n\n// #region module\nconst {\n inputs: {\n Slider: PluridSlider,\n },\n} = universal;\n\nexport interface PluridMenuMoreTechnicalOwnProperties {\n}\n\nexport interface PluridMenuMoreTechnicalStateProperties {\n stateLanguage: InternationalizationLanguageType;\n stateConfiguration: PluridConfiguration;\n stateInteractionTheme: Theme;\n}\n\nexport interface PluridMenuMoreTechnicalDispatchProperties {\n dispatchSetConfigurationSpaceCullingDistance: DispatchAction<typeof actions.configuration.setConfigurationSpaceCullingDistance>;\n}\n\nexport type PluridMenuMoreTechnicalProperties = PluridMenuMoreTechnicalOwnProperties\n & PluridMenuMoreTechnicalStateProperties\n & PluridMenuMoreTechnicalDispatchProperties;\n\n\nconst PluridMenuMoreTechnical: React.FC<PluridMenuMoreTechnicalProperties> = (\n properties,\n) => {\n /** properties */\n const {\n /** state */\n stateLanguage,\n stateConfiguration,\n stateInteractionTheme,\n\n /** dispatch */\n dispatchSetConfigurationSpaceCullingDistance,\n } = properties;\n\n const {\n cullingDistance,\n } = stateConfiguration.space;\n\n\n /** state */\n const [localCullingDistance, setLocalCullingDistance] = useState(cullingDistance);\n\n\n /** callback */\n const dispatchCullingDistanceUpdateFunction = (\n value: number,\n ) => {\n dispatchSetConfigurationSpaceCullingDistance(value);\n }\n\n const dispatchCullingDistanceUpdate = useDebouncedCallback(\n dispatchCullingDistanceUpdateFunction,\n 300,\n );\n\n\n /** handlers */\n const handleCullingDistance = (\n value: number,\n ) => {\n setLocalCullingDistance(value);\n dispatchCullingDistanceUpdate(value);\n }\n\n\n /** render */\n return (\n <>\n <StyledPluridMoreMenuItem>\n <div>\n {internatiolate(stateLanguage, internationalization.fields.toolbarDrawerTechnicalCullingDistance)}\n </div>\n\n <PluridSlider\n theme={stateInteractionTheme}\n value={localCullingDistance}\n atChange={handleCullingDistance}\n min={1_000}\n max={5_000}\n defaultValue={1_500}\n />\n </StyledPluridMoreMenuItem>\n </>\n );\n}\n\n\nconst mapStateToProps = (\n state: AppState,\n): PluridMenuMoreTechnicalStateProperties => ({\n stateLanguage: selectors.configuration.getConfiguration(state).global.language,\n stateConfiguration: selectors.configuration.getConfiguration(state),\n stateInteractionTheme: selectors.themes.getInteractionTheme(state),\n});\n\n\nconst mapDispatchToProps = (\n dispatch: ThunkDispatch<{}, {}, AnyAction>\n): PluridMenuMoreTechnicalDispatchProperties => ({\n dispatchSetConfigurationSpaceCullingDistance: (\n value,\n ) => dispatch(\n actions.configuration.setConfigurationSpaceCullingDistance(value),\n ),\n});\n\n\nconst ConnectedPluridMenuMoreTechnical = connect(\n mapStateToProps,\n mapDispatchToProps,\n null,\n {\n context: StateContext,\n },\n)(PluridMenuMoreTechnical);\n// #endregion module\n\n\n\n// #region exports\nexport default ConnectedPluridMenuMoreTechnical;\n// #endregion exports\n","// #region imports\n // #region libraries\n import React from 'react';\n\n import {\n AnyAction,\n ThunkDispatch,\n } from '@reduxjs/toolkit';\n import { connect } from 'react-redux';\n\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n\n import {\n defaultShortcuts,\n shortcutsNames,\n\n PluridConfiguration,\n } from '@plurid/plurid-data';\n\n import {\n internatiolate,\n } from '@plurid/plurid-engine';\n // #endregion libraries\n\n\n // #region external\n import {\n StyledPluridMoreMenuItem,\n } from '../../styled';\n\n import { AppState } from '~services/state/store';\n import StateContext from '~services/state/context';\n import selectors from '~services/state/selectors';\n // import actions from '~services/state/actions';\n import {\n DispatchAction,\n } from '~data/interfaces';\n // #endregion external\n// #endregion imports\n\n\n\n// #region module\nexport interface PluridMenuMoreShortcutsOwnProperties {\n}\n\nexport interface PluridMenuMoreShortcutsStateProperties {\n interactionTheme: Theme;\n configuration: PluridConfiguration;\n}\n\nexport interface PluridMenuMoreShortcutsDispatchProperties {\n}\n\nexport type PluridMenuMoreShortcutsProperties = PluridMenuMoreShortcutsOwnProperties\n & PluridMenuMoreShortcutsStateProperties\n & PluridMenuMoreShortcutsDispatchProperties;\n\nconst PluridMenuMoreShortcuts: React.FC<PluridMenuMoreShortcutsProperties> = (\n properties,\n) => {\n /** properties */\n const {\n /** state */\n interactionTheme,\n configuration,\n\n /** dispatch */\n } = properties;\n\n const {\n global,\n } = configuration;\n\n const {\n language,\n } = global;\n\n\n /** render */\n return (\n <>\n {defaultShortcuts.map((shortcut, index) => {\n const {\n type,\n } = shortcut;\n const shortcutData = shortcutsNames[type];\n const {\n name,\n internationalizedKey,\n key,\n modifier,\n } = shortcutData;\n const modifierString = Array.isArray(modifier)\n ? modifier.reduce((total, element) => total + ' + ' + element) + ' +'\n : typeof modifier === 'string'\n ? modifier + ' +'\n : '';\n\n const internationalizedName = internatiolate(language, name);\n\n const keyAsAny: any = key;\n const keyName = internationalizedKey\n ? internatiolate(language, keyAsAny)\n : key;\n\n const afterline = type === 'TURN_DOWN'\n || type === 'TOGGLE_ROTATE'\n || type === 'TOGGLE_TRANSLATE'\n || type === 'TOGGLE_SCALE';\n\n return (\n <StyledPluridMoreMenuItem\n key={name}\n theme={interactionTheme}\n afterline={afterline}\n last={index === defaultShortcuts.length - 1 ? true : false}\n >\n <div>\n {internationalizedName}\n </div>\n\n <div>\n {modifierString} {keyName}\n </div>\n </StyledPluridMoreMenuItem>\n );\n })}\n </>\n );\n}\n\n\nconst mapStateToProps = (\n state: AppState,\n): PluridMenuMoreShortcutsStateProperties => ({\n interactionTheme: selectors.themes.getInteractionTheme(state),\n configuration: selectors.configuration.getConfiguration(state),\n});\n\n\nconst mapDispatchToProps = (\n dispatch: ThunkDispatch<{}, {}, AnyAction>\n): PluridMenuMoreShortcutsDispatchProperties => ({\n});\n\n\nconst ConnectedPluridMenuMoreShortcuts = connect(\n mapStateToProps,\n mapDispatchToProps,\n null,\n {\n context: StateContext,\n },\n)(PluridMenuMoreShortcuts);\n// #endregion module\n\n\n\n// #region exports\nexport default ConnectedPluridMenuMoreShortcuts;\n// #endregion exports\n","// #region imports\n // #region libraries\n import React from 'react';\n\n import {\n internationalization,\n\n TOOLBAR_DRAWERS,\n\n InternationalizationFieldType,\n } from '@plurid/plurid-data';\n // #endregion libraries\n\n\n // #region internal\n import MenuMoreGlobal from './components/Global';\n import MenuMoreTransform from './components/Transform';\n import MenuMoreSpace from './components/Space';\n import MenuMoreToolbar from './components/Toolbar';\n import MenuMoreViewcube from './components/Viewcube';\n import MenuMoreMinimap from './components/Minimap';\n import MenuMoreTechnical from './components/Technical';\n import MenuMoreShortcuts from './components/Shortcuts';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nexport interface MoreMenu {\n name: InternationalizationFieldType;\n drawer: keyof typeof TOOLBAR_DRAWERS,\n component: JSX.Element,\n}\n\n\nexport const moreMenusRecord: Record<string, MoreMenu> = {\n GLOBAL: {\n name: internationalization.fields.toolbarDrawerGlobalTitle,\n drawer: TOOLBAR_DRAWERS.GLOBAL,\n component: (<MenuMoreGlobal />),\n },\n TRANSFORM: {\n name: internationalization.fields.toolbarDrawerTransformTitle,\n drawer: TOOLBAR_DRAWERS.TRANSFORM,\n component: (<MenuMoreTransform />),\n },\n SPACE: {\n name: internationalization.fields.toolbarDrawerSpaceTitle,\n drawer: TOOLBAR_DRAWERS.SPACE,\n component: (<MenuMoreSpace />),\n },\n TOOLBAR: {\n name: internationalization.fields.toolbarDrawerToolbarTitle,\n drawer: TOOLBAR_DRAWERS.TOOLBAR,\n component: (<MenuMoreToolbar />),\n },\n VIEWCUBE: {\n name: internationalization.fields.toolbarDrawerViewcubeTitle,\n drawer: TOOLBAR_DRAWERS.VIEWCUBE,\n component: (<MenuMoreViewcube />),\n },\n MINIMAP: {\n name: internationalization.fields.toolbarDrawerMinimapTitle,\n drawer: TOOLBAR_DRAWERS.MINIMAP,\n component: (<MenuMoreMinimap />),\n },\n TECHNICAL: {\n name: internationalization.fields.toolbarDrawerTechnicalTitle,\n drawer: TOOLBAR_DRAWERS.TECHNICAL,\n component: (<MenuMoreTechnical />),\n },\n SHORTCUTS: {\n name: internationalization.fields.toolbarDrawerShortcutsTitle,\n drawer: TOOLBAR_DRAWERS.SHORTCUTS,\n component: (<MenuMoreShortcuts />),\n },\n};\n\nexport const moreMenus: MoreMenu[] = Object.values(moreMenusRecord);\n// #endregion module\n","// #region imports\n // #region libraries\n import React, {\n useRef,\n useEffect,\n } from 'react';\n\n import {\n AnyAction,\n ThunkDispatch,\n } from '@reduxjs/toolkit';\n import { connect } from 'react-redux';\n\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n\n import {\n TOOLBAR_DRAWERS,\n\n PluridConfiguration,\n InternationalizationLanguageType,\n } from '@plurid/plurid-data';\n\n import {\n internatiolate,\n } from '@plurid/plurid-engine';\n\n import {\n useDebouncedCallback,\n } from '@plurid/plurid-functions-react';\n // #endregion libraries\n\n\n // #region external\n import PluridDrawer from '../Drawer';\n\n import { AppState } from '~services/state/store';\n import StateContext from '~services/state/context';\n import selectors from '~services/state/selectors';\n import actions from '~services/state/actions';\n import {\n DispatchAction,\n } from '~data/interfaces';\n // #endregion external\n\n\n // #region internal\n import {\n StyledPluridMoreMenu,\n StyledPluridMoreMenuScroll,\n } from './styled';\n\n import {\n MoreMenu,\n moreMenus,\n moreMenusRecord,\n } from './data';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nexport const resolveMenus = (\n drawers: (keyof typeof TOOLBAR_DRAWERS)[],\n) => {\n if (drawers.length === 0 || drawers.includes('ALL')) {\n return moreMenus;\n }\n\n const resolvedMenus: MoreMenu[] = [];\n\n for (const drawer of drawers) {\n const menu = moreMenusRecord[drawer];\n resolvedMenus.push(menu);\n }\n\n return resolvedMenus;\n}\n\n\nexport interface PluridMoreMenuOwnProperties {\n}\n\nexport interface PluridMoreMenuStateProperties {\n stateLanguage: InternationalizationLanguageType;\n stateInteractionTheme: Theme;\n stateConfiguration: PluridConfiguration;\n stateToolbarMenuScrollPosition: number;\n}\n\nexport interface PluridMoreMenuDispatchProperties {\n dispatchToggleConfigurationToolbarToggleDrawer: DispatchAction<typeof actions.configuration.toggleConfigurationToolbarToggleDrawer>;\n dispatchSetUIToolbarScrollPosition: DispatchAction<typeof actions.ui.setUIToolbarScrollPosition>;\n}\n\nexport type PluridMoreMenuProperties = PluridMoreMenuOwnProperties\n & PluridMoreMenuStateProperties\n & PluridMoreMenuDispatchProperties;\n\n\nconst PluridMoreMenu: React.FC<PluridMoreMenuProperties> = (\n properties,\n) => {\n // #region properties\n const {\n // #region state\n stateLanguage,\n stateInteractionTheme,\n stateConfiguration,\n stateToolbarMenuScrollPosition,\n // #endregion state\n\n // #region dispatch\n dispatchToggleConfigurationToolbarToggleDrawer,\n dispatchSetUIToolbarScrollPosition,\n // #endregion dispatch\n } = properties;\n\n const {\n global,\n elements,\n } = stateConfiguration;\n\n const {\n transparentUI,\n } = global;\n\n const {\n toolbar,\n } = elements;\n\n const {\n drawers,\n toggledDrawers,\n } = toolbar;\n\n const menus = resolveMenus(drawers);\n // #endregion properties\n\n\n // #region references\n const moreMenuScrollElement = useRef<HTMLDivElement>(null);\n // #endregion references\n\n\n // #region handlers\n const handleWheel = useDebouncedCallback((_event: WheelEvent) => {\n if (moreMenuScrollElement.current) {\n const scrollPosition = moreMenuScrollElement.current.scrollTop;\n dispatchSetUIToolbarScrollPosition(scrollPosition);\n }\n }, 100);\n // #endregion handlers\n\n\n // #region effects\n /** Wheel listener */\n useEffect(() => {\n if (moreMenuScrollElement.current) {\n moreMenuScrollElement.current.addEventListener('wheel', handleWheel);\n }\n\n return () => {\n if (moreMenuScrollElement.current) {\n moreMenuScrollElement.current.removeEventListener('wheel', handleWheel);\n }\n }\n }, [\n moreMenuScrollElement.current,\n ]);\n\n /** Set scrollTop */\n useEffect(() => {\n if (moreMenuScrollElement.current) {\n moreMenuScrollElement.current.scrollTop = stateToolbarMenuScrollPosition;\n }\n }, [\n stateToolbarMenuScrollPosition,\n moreMenuScrollElement.current,\n ]);\n // #endregion effects\n\n\n // #region render\n return (\n <StyledPluridMoreMenu\n theme={stateInteractionTheme}\n transparentUI={transparentUI}\n >\n <StyledPluridMoreMenuScroll\n ref={moreMenuScrollElement}\n >\n {menus.map(moreMenu => {\n const {\n name,\n drawer,\n component,\n } = moreMenu;\n\n const internationalizedName = internatiolate(stateLanguage, name);\n\n return (\n <PluridDrawer\n key={name}\n heading={internationalizedName}\n items={(\n <>{component}</>\n )}\n toggled={toggledDrawers.includes('ALL') || toggledDrawers.includes(drawer)}\n toggle={() => dispatchToggleConfigurationToolbarToggleDrawer(drawer as TOOLBAR_DRAWERS)}\n />\n )\n })}\n </StyledPluridMoreMenuScroll>\n </StyledPluridMoreMenu>\n );\n // #endregion render\n}\n\n\nconst mapStateToProperties = (\n state: AppState,\n): PluridMoreMenuStateProperties => ({\n stateLanguage: selectors.configuration.getConfiguration(state).global.language,\n stateInteractionTheme: selectors.themes.getInteractionTheme(state),\n stateConfiguration: selectors.configuration.getConfiguration(state),\n stateToolbarMenuScrollPosition: selectors.ui.getToolbarScrollPosition(state),\n});\n\n\nconst mapDispatchToProperties = (\n dispatch: ThunkDispatch<{}, {}, AnyAction>\n): PluridMoreMenuDispatchProperties => ({\n dispatchToggleConfigurationToolbarToggleDrawer: (\n drawer,\n ) => dispatch(\n actions.configuration.toggleConfigurationToolbarToggleDrawer(drawer),\n ),\n dispatchSetUIToolbarScrollPosition: (\n value,\n ) => dispatch(\n actions.ui.setUIToolbarScrollPosition(value),\n ),\n});\n\n\nconst ConnectedPluridMoreMenu = connect(\n mapStateToProperties,\n mapDispatchToProperties,\n null,\n {\n context: StateContext,\n },\n)(PluridMoreMenu);\n// #endregion module\n\n\n\n// #region exports\nexport default ConnectedPluridMoreMenu;\n// #endregion exports\n","// #region imports\n // #region libraries\n import styled from 'styled-components';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\nexport const StyledPluridToolbarRotate: any = styled.div`\n display: grid;\n align-items: center;\n justify-items: center;\n grid-template-columns: ${(props: any) => {\n if (!props.showTransformButtons) {\n return '1fr';\n }\n\n return '30px 30px 60px 30px 30px';\n // return '0.5fr 0.5fr 1fr 0.5fr 0.5fr';\n }};\n`;\n// #endregion module\n","// #region imports\n // #region libraries\n import styled from 'styled-components';\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\nexport interface IStyledPluridTransformArrow {\n theme: Theme;\n pressed: boolean;\n}\n\nexport const StyledPluridTransformArrow = styled.div<IStyledPluridTransformArrow>`\n user-select: none;\n cursor: pointer;\n border-radius: 50px;\n width: 25px;\n height: 25px;\n display: grid;\n place-content: center;\n padding: 2px;\n\n background-color: ${\n ({\n pressed,\n theme,\n }: IStyledPluridTransformArrow) => {\n if (pressed) {\n return theme.backgroundColorTertiary;\n }\n\n return 'initial';\n }\n };\n\n :hover {\n background-color: ${\n ({\n theme,\n }: IStyledPluridTransformArrow) => theme.backgroundColorTertiary\n };\n }\n`;\n// #endregion module\n","// #region module\nexport const arrowSigns = {\n left :'◀',\n right :'▶',\n up :'▲',\n down :'▼',\n};\n\n\nexport const events = 'tap press pressup';\n// #endregion module\n","// #region imports\n // #region libraries\n import React, {\n useRef,\n useState,\n } from 'react';\n\n import {\n AnyAction,\n ThunkDispatch,\n } from '@reduxjs/toolkit';\n import { connect } from 'react-redux';\n\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n // #endregion libraries\n\n\n // #region external\n import { AppState } from '~services/state/store';\n import StateContext from '~services/state/context';\n import selectors from '~services/state/selectors';\n // import actions from '~services/state/actions';\n // #endregion external\n\n\n // #region internal\n import {\n StyledPluridTransformArrow,\n } from './styled';\n\n import {\n arrowSigns,\n } from './data';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nexport interface PluridTransformArrowOwnProperties {\n direction: string;\n transform: (\n event: {\n altKey: boolean;\n },\n ) => void;\n}\n\nexport interface PluridTransformArrowStateProperties {\n interactionTheme: Theme;\n}\n\nexport interface PluridTransformArrowDispatchProperties {\n}\n\nexport type PluridTransformArrowProperties =\n & PluridTransformArrowOwnProperties\n & PluridTransformArrowStateProperties\n & PluridTransformArrowDispatchProperties;\n\n\nconst PluridTransformArrow: React.FC<PluridTransformArrowProperties> = (\n properties,\n) => {\n // #region properties\n const {\n // #region own\n direction,\n transform,\n // #endregion own\n\n // #region state\n interactionTheme,\n // #endregion state\n } = properties;\n\n const arrowSign = (arrowSigns as any)[direction] || '';\n // #endregion properties\n\n\n // #region references\n const pressingInterval = useRef<null | ReturnType<typeof setTimeout>>(null);\n // #endregion references\n\n\n // #region state\n const [\n pressed,\n setPressed,\n ] = useState(false);\n // #endregion state\n\n\n // #region handlers\n // Press-and-hold via native Pointer Events (replaces HammerJS tap/press): a click\n // fires one transform; holding repeats it until release or pointer-leave.\n const startPress = (\n event: React.PointerEvent,\n ) => {\n const eventData = {\n altKey: event.altKey,\n };\n\n transform(eventData);\n setPressed(true);\n\n if (pressingInterval.current) {\n clearInterval(pressingInterval.current);\n }\n pressingInterval.current = setInterval(() => {\n transform(eventData);\n }, 40);\n }\n\n const endPress = () => {\n setPressed(false);\n if (pressingInterval.current) {\n clearInterval(pressingInterval.current);\n pressingInterval.current = null;\n }\n }\n // #endregion handlers\n\n\n /** render */\n return (\n <StyledPluridTransformArrow\n theme={interactionTheme}\n pressed={pressed}\n onPointerDown={startPress}\n onPointerUp={endPress}\n onPointerLeave={endPress}\n onPointerCancel={endPress}\n >\n {arrowSign}\n </StyledPluridTransformArrow>\n );\n}\n\n\nconst mapStateToProps = (\n state: AppState,\n): PluridTransformArrowStateProperties => ({\n interactionTheme: selectors.themes.getInteractionTheme(state),\n});\n\n\nconst mapDispatchToProps = (\n dispatch: ThunkDispatch<{}, {}, AnyAction>,\n): PluridTransformArrowDispatchProperties => ({\n});\n\n\nconst ConnectedPluridTransformArrow = connect(\n mapStateToProps,\n mapDispatchToProps,\n null,\n {\n context: StateContext,\n },\n)(PluridTransformArrow);\n// #endregion module\n\n\n\n// #region exports\nexport default ConnectedPluridTransformArrow;\n// #endregion exports\n","// #region imports\n // #region libraries\n import React from 'react';\n\n import {\n AnyAction,\n ThunkDispatch,\n } from '@reduxjs/toolkit';\n import { connect } from 'react-redux';\n\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n\n import {\n PluridIconRotate,\n } from '@plurid/plurid-icons-react';\n\n import {\n internationalization,\n\n TRANSFORM_MODES,\n\n InternationalizationLanguageType,\n } from '@plurid/plurid-data';\n\n import {\n internatiolate,\n } from '@plurid/plurid-engine';\n // #endregion libraries\n\n\n // #region external\n import {\n StyledToolbarButton,\n StyledIcon,\n } from '../../styled';\n\n import { AppState } from '~services/state/store';\n import StateContext from '~services/state/context';\n import selectors from '~services/state/selectors';\n import actions from '~services/state/actions';\n import {\n DispatchActionWithoutPayload,\n } from '~data/interfaces';\n // #endregion external\n\n\n // #region internal\n import {\n StyledPluridToolbarRotate,\n } from './styled';\n\n import PluridTransformArrow from '../TransformArrow';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nexport interface PluridToolbarRotateOwnProperties {\n showTransformButtons: boolean;\n showIcons: boolean;\n transformMode: keyof typeof TRANSFORM_MODES;\n toggleTransform(TYPE: keyof typeof TRANSFORM_MODES): void;\n}\n\nexport interface PluridToolbarRotateStateProperties {\n stateLanguage: InternationalizationLanguageType;\n interactionTheme: Theme;\n}\n\nexport interface PluridToolbarRotateDispatchProperties {\n rotateUp: DispatchActionWithoutPayload<typeof actions.space.rotateUp>;\n rotateDown: DispatchActionWithoutPayload<typeof actions.space.rotateDown>;\n rotateLeft: DispatchActionWithoutPayload<typeof actions.space.rotateLeft>;\n rotateRight: DispatchActionWithoutPayload<typeof actions.space.rotateRight>;\n}\n\nexport type PluridToolbarRotateProperties = PluridToolbarRotateOwnProperties\n & PluridToolbarRotateStateProperties\n & PluridToolbarRotateDispatchProperties;\n\nconst PluridToolbarRotate: React.FC<PluridToolbarRotateProperties> = (\n properties,\n) => {\n /** properties */\n const {\n /** own */\n showTransformButtons,\n showIcons,\n transformMode,\n toggleTransform,\n\n /** state */\n stateLanguage,\n interactionTheme,\n\n /** dispatch */\n rotateUp,\n rotateDown,\n rotateLeft,\n rotateRight,\n } = properties;\n\n\n /** render */\n return (\n <StyledPluridToolbarRotate\n showTransformButtons={showTransformButtons}\n >\n {showTransformButtons && (\n <>\n <PluridTransformArrow\n direction=\"left\"\n transform={() => rotateRight()}\n />\n\n <PluridTransformArrow\n direction=\"up\"\n transform={() => rotateUp()}\n />\n </>\n )}\n\n <StyledToolbarButton\n theme={interactionTheme}\n onClick={() => toggleTransform(TRANSFORM_MODES.ROTATION)}\n active={transformMode === TRANSFORM_MODES.ROTATION}\n showIcons={showIcons}\n showTransformButtons={showTransformButtons}\n button={showIcons}\n >\n {showIcons\n ? (\n <StyledIcon>\n <PluridIconRotate />\n </StyledIcon>\n ) : (\n <>\n {internatiolate(stateLanguage, internationalization.fields.toolbarTransformRotate)}\n </>\n )\n }\n </StyledToolbarButton>\n\n {showTransformButtons && (\n <>\n <PluridTransformArrow\n direction=\"down\"\n transform={() => rotateDown()}\n />\n\n <PluridTransformArrow\n direction=\"right\"\n transform={() => rotateLeft()}\n />\n </>\n )}\n </StyledPluridToolbarRotate>\n );\n}\n\n\nconst mapStateToProps = (\n state: AppState,\n): PluridToolbarRotateStateProperties => ({\n stateLanguage: selectors.configuration.getConfiguration(state).global.language,\n interactionTheme: selectors.themes.getInteractionTheme(state),\n});\n\n\nconst mapDispatchToProps = (\n dispatch: ThunkDispatch<{}, {}, AnyAction>,\n): PluridToolbarRotateDispatchProperties => ({\n rotateUp: () => dispatch(\n actions.space.rotateUp(),\n ),\n rotateDown: () => dispatch(\n actions.space.rotateDown(),\n ),\n rotateLeft: () => dispatch(\n actions.space.rotateLeft(),\n ),\n rotateRight: () => dispatch(\n actions.space.rotateRight(),\n ),\n});\n\n\nconst ConnectedPluridToolbarRotate = connect(\n mapStateToProps,\n mapDispatchToProps,\n null,\n {\n context: StateContext,\n },\n)(PluridToolbarRotate);\n// #endregion module\n\n\n\n// #region exports\nexport default ConnectedPluridToolbarRotate;\n// #endregion exports\n","// #region imports\n // #region libraries\n import styled from 'styled-components';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\nexport const StyledPluridToolbarScale: any = styled.div`\n display: grid;\n align-items: center;\n justify-items: center;\n grid-template-columns: ${(props: any) => {\n if (!props.showTransformButtons) {\n return '1fr';\n }\n\n return '30px 60px 30px';\n // return '0.5fr 1fr 0.5fr';\n }};\n`;\n// #endregion module\n","// #region imports\n // #region libraries\n import React from 'react';\n\n import {\n AnyAction,\n ThunkDispatch,\n } from '@reduxjs/toolkit';\n import { connect } from 'react-redux';\n\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n\n import {\n PluridIconScale,\n } from '@plurid/plurid-icons-react';\n\n import {\n TRANSFORM_MODES,\n internationalization,\n\n InternationalizationLanguageType,\n } from '@plurid/plurid-data';\n\n import {\n internatiolate,\n } from '@plurid/plurid-engine';\n // #endregion libraries\n\n\n // #region external\n import PluridTransformArrow from '../TransformArrow';\n\n import {\n StyledToolbarButton,\n StyledIcon,\n } from '../../styled';\n\n import { AppState } from '~services/state/store';\n import StateContext from '~services/state/context';\n import selectors from '~services/state/selectors';\n import actions from '~services/state/actions';\n import {\n DispatchActionWithoutPayload,\n } from '~data/interfaces';\n // #endregion external\n\n\n // #region internal\n import {\n StyledPluridToolbarScale,\n } from './styled';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nexport interface PluridToolbarScaleOwnProperties {\n showTransformButtons: boolean;\n showIcons: boolean;\n transformMode: keyof typeof TRANSFORM_MODES;\n toggleTransform(TYPE: keyof typeof TRANSFORM_MODES): void;\n}\n\nexport interface PluridToolbarScaleStateProperties {\n stateLanguage: InternationalizationLanguageType;\n interactionTheme: Theme;\n}\n\nexport interface PluridToolbarScaleDispatchProperties {\n scaleUp: DispatchActionWithoutPayload<typeof actions.space.scaleUp>;\n scaleDown: DispatchActionWithoutPayload<typeof actions.space.scaleDown>;\n}\n\nexport type PluridToolbarScaleProperties = PluridToolbarScaleOwnProperties\n & PluridToolbarScaleStateProperties\n & PluridToolbarScaleDispatchProperties;\n\n\nconst PluridToolbarScale: React.FC<PluridToolbarScaleProperties> = (\n properties,\n) => {\n /** properties */\n const {\n /** own */\n showTransformButtons,\n showIcons,\n transformMode,\n toggleTransform,\n\n /** state */\n stateLanguage,\n interactionTheme,\n\n /** dispatch */\n scaleUp,\n scaleDown,\n } = properties;\n\n\n /** render */\n return (\n <StyledPluridToolbarScale\n showTransformButtons={showTransformButtons}\n >\n {showTransformButtons && (\n <PluridTransformArrow\n direction=\"up\"\n transform={() => scaleUp()}\n />\n )}\n\n <StyledToolbarButton\n theme={interactionTheme}\n onClick={() => toggleTransform(TRANSFORM_MODES.SCALE)}\n active={transformMode === TRANSFORM_MODES.SCALE}\n showIcons={showIcons}\n showTransformButtons={showTransformButtons}\n button={showIcons}\n >\n {showIcons\n ? (\n <StyledIcon>\n <PluridIconScale />\n </StyledIcon>\n ) : (\n <>\n {internatiolate(stateLanguage, internationalization.fields.toolbarTransformScale)}\n </>\n )\n }\n </StyledToolbarButton>\n\n {showTransformButtons && (\n <PluridTransformArrow\n direction=\"down\"\n transform={() => scaleDown()}\n />\n )}\n </StyledPluridToolbarScale>\n );\n}\n\n\nconst mapStateToProps = (\n state: AppState,\n): PluridToolbarScaleStateProperties => ({\n stateLanguage: selectors.configuration.getConfiguration(state).global.language,\n interactionTheme: selectors.themes.getInteractionTheme(state),\n});\n\n\nconst mapDispatchToProps = (\n dispatch: ThunkDispatch<{}, {}, AnyAction>,\n): PluridToolbarScaleDispatchProperties => ({\n scaleUp: () => dispatch(actions.space.scaleUp()),\n scaleDown: () => dispatch(actions.space.scaleDown()),\n});\n\n\nconst ConnectedPluridToolbarScale = connect(\n mapStateToProps,\n mapDispatchToProps,\n null,\n {\n context: StateContext,\n },\n)(PluridToolbarScale);\n// #endregion module\n\n\n\n\n// #region exports\nexport default ConnectedPluridToolbarScale;\n// #endregion exports\n","// #region imports\n // #region libraries\n import styled from 'styled-components';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\nexport const StyledPluridToolbarTranslate: any = styled.div`\n display: grid;\n align-items: center;\n justify-items: center;\n grid-template-columns: ${(props: any) => {\n if (!props.showTransformButtons) {\n return '1fr';\n }\n\n return '30px 30px 60px 30px 30px';\n // return '0.5fr 0.5fr 1fr 0.5fr 0.5fr';\n }};\n`;\n// #endregion module\n","// #region imports\n // #region libraries\n import React from 'react';\n\n import {\n AnyAction,\n ThunkDispatch,\n } from '@reduxjs/toolkit';\n import { connect } from 'react-redux';\n\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n\n import {\n PluridIconTranslate,\n } from '@plurid/plurid-icons-react';\n\n import {\n TRANSFORM_MODES,\n internationalization,\n\n InternationalizationLanguageType,\n } from '@plurid/plurid-data';\n\n import {\n internatiolate,\n } from '@plurid/plurid-engine';\n // #endregion libraries\n\n\n // #region external\n import PluridTransformArrow from '../TransformArrow';\n\n import {\n StyledToolbarButton,\n StyledIcon,\n } from '../../styled';\n\n import { AppState } from '~services/state/store';\n import StateContext from '~services/state/context';\n import selectors from '~services/state/selectors';\n import actions from '~services/state/actions';\n import {\n DispatchActionWithoutPayload,\n } from '~data/interfaces';\n // #endregion external\n\n\n // #region internal\n import {\n StyledPluridToolbarTranslate,\n } from './styled';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nexport interface PluridToolbarTranslateOwnProperties {\n showTransformButtons: boolean;\n showIcons: boolean;\n transformMode: keyof typeof TRANSFORM_MODES;\n toggleTransform(TYPE: keyof typeof TRANSFORM_MODES): void;\n}\n\nexport interface PluridToolbarTranslateStateProperties {\n stateLanguage: InternationalizationLanguageType;\n interactionTheme: Theme;\n}\n\nexport interface PluridToolbarTranslateDispatchProperties {\n translateUp: DispatchActionWithoutPayload<typeof actions.space.translateUp>;\n translateDown: DispatchActionWithoutPayload<typeof actions.space.translateDown>;\n translateLeft: DispatchActionWithoutPayload<typeof actions.space.translateLeft>;\n translateRight: DispatchActionWithoutPayload<typeof actions.space.translateRight>;\n translateIn: DispatchActionWithoutPayload<typeof actions.space.translateIn>;\n translateOut: DispatchActionWithoutPayload<typeof actions.space.translateOut>;\n}\n\nexport type PluridToolbarTranslateProperties = PluridToolbarTranslateOwnProperties\n & PluridToolbarTranslateStateProperties\n & PluridToolbarTranslateDispatchProperties;\n\n\nconst PluridToolbarTranslate: React.FC<PluridToolbarTranslateProperties> = (\n properties,\n) => {\n // #region properties\n const {\n // #region own\n showTransformButtons,\n showIcons,\n transformMode,\n toggleTransform,\n // #endregion own\n\n // #region state\n stateLanguage,\n interactionTheme,\n // #endregion state\n\n // #region dispatch\n translateUp,\n translateDown,\n translateLeft,\n translateRight,\n translateIn,\n translateOut,\n // #endregion dispatch\n } = properties;\n // #endregion properties\n\n\n // #region render\n return (\n <StyledPluridToolbarTranslate\n showTransformButtons={showTransformButtons}\n >\n {showTransformButtons && (\n <>\n <PluridTransformArrow\n direction=\"left\"\n transform={() => translateLeft()}\n />\n\n <PluridTransformArrow\n direction=\"up\"\n transform={(event) => {\n if (event.altKey) {\n translateOut();\n } else {\n translateUp();\n }\n }}\n />\n </>\n )}\n\n <StyledToolbarButton\n theme={interactionTheme}\n onClick={() => toggleTransform(TRANSFORM_MODES.TRANSLATION)}\n active={transformMode === TRANSFORM_MODES.TRANSLATION}\n showIcons={showIcons}\n showTransformButtons={showTransformButtons}\n button={showIcons}\n >\n {showIcons\n ? (\n <StyledIcon>\n <PluridIconTranslate />\n </StyledIcon>\n ) : (\n <>\n {internatiolate(stateLanguage, internationalization.fields.toolbarTransformTranslate)}\n </>\n )\n }\n </StyledToolbarButton>\n\n {showTransformButtons && (\n <>\n <PluridTransformArrow\n direction=\"down\"\n transform={(event) => {\n if (event.altKey) {\n translateIn();\n } else {\n translateDown();\n }\n }}\n />\n\n <PluridTransformArrow\n direction=\"right\"\n transform={() => translateRight()}\n />\n </>\n )}\n </StyledPluridToolbarTranslate>\n );\n // #endregion render\n}\n\n\nconst mapStateToProperties = (\n state: AppState,\n): PluridToolbarTranslateStateProperties => ({\n stateLanguage: selectors.configuration.getConfiguration(state).global.language,\n interactionTheme: selectors.themes.getInteractionTheme(state),\n});\n\n\nconst mapDispatchToProperties = (\n dispatch: ThunkDispatch<{}, {}, AnyAction>,\n): PluridToolbarTranslateDispatchProperties => ({\n translateUp: () => dispatch(\n actions.space.translateUp(),\n ),\n translateDown: () => dispatch(\n actions.space.translateDown(),\n ),\n translateLeft: () => dispatch(\n actions.space.translateLeft(),\n ),\n translateRight: () => dispatch(\n actions.space.translateRight(),\n ),\n translateIn: () => dispatch(\n actions.space.translateIn(),\n ),\n translateOut: () => dispatch(\n actions.space.translateOut(),\n ),\n});\n\n\nconst ConnectedPluridToolbarTranslate = connect(\n mapStateToProperties,\n mapDispatchToProperties,\n null,\n {\n context: StateContext,\n },\n)(PluridToolbarTranslate);\n// #endregion module\n\n\n\n// #region exports\nexport default ConnectedPluridToolbarTranslate;\n// #endregion exports\n","// #region imports\n // #region libraries\n import React, {\n useRef,\n useState,\n useEffect,\n } from 'react';\n\n import {\n AnyAction,\n ThunkDispatch,\n } from '@reduxjs/toolkit';\n import { connect } from 'react-redux';\n\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n\n import {\n /** constants */\n PLURID_ENTITY_TOOLBAR,\n\n /** enumerations */\n TRANSFORM_MODES,\n\n /** interfaces */\n PluridConfiguration,\n } from '@plurid/plurid-data';\n\n import {\n PluridIconFirstPerson,\n PluridIconDocuments,\n PluridIconMore,\n } from '@plurid/plurid-icons-react';\n // #endregion libraries\n\n\n // #region external\n import { AppState } from '~services/state/store';\n import StateContext from '~services/state/context';\n import selectors from '~services/state/selectors';\n import actions from '~services/state/actions';\n import {\n DispatchAction,\n } from '~data/interfaces';\n // import {\n // ViewSize,\n // } from '~services/state/types/space';\n // #endregion external\n\n\n // #region internal\n import {\n StyledToolbar,\n StyledToolbarButtons,\n StyledToolbarButton,\n\n StyledIcon,\n } from './styled';\n\n import {\n MENUS,\n\n VIEW_SIZE_WIDTH_LIMIT,\n } from './data';\n\n import MenuUniverses from './components/MenuUniverses';\n import MenuMore from './components/MenuMore';\n\n import ToolbarRotate from './components/ToolbarRotate';\n import ToolbarScale from './components/ToolbarScale';\n import ToolbarTranslate from './components/ToolbarTranslate';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nexport interface PluridToolbarOwnProperties {\n}\n\nexport interface PluridToolbarStateProperties {\n theme: Theme;\n configuration: PluridConfiguration;\n // viewSize: ViewSize;\n viewSize: any;\n // universes: any;\n}\n\nexport interface PluridToolbarDispatchProperties {\n dispatchToggleConfigurationSpaceFirstPerson: DispatchAction<typeof actions.configuration.toggleConfigurationSpaceFirstPerson>;\n dispatchSetConfigurationSpaceTransformMode: DispatchAction<typeof actions.configuration.setConfigurationSpaceTransformMode>;\n}\n\nexport type PluridToolbarProperties = PluridToolbarOwnProperties\n & PluridToolbarStateProperties\n & PluridToolbarDispatchProperties;\n\n\nconst PluridToolbar: React.FC<PluridToolbarProperties> = (\n properties,\n) => {\n // #region properties\n const {\n /** state */\n theme,\n configuration,\n viewSize,\n // universes,\n\n /** dispatch */\n dispatchToggleConfigurationSpaceFirstPerson,\n dispatchSetConfigurationSpaceTransformMode,\n } = properties;\n\n const {\n global,\n elements,\n space,\n } = configuration;\n\n const {\n transparentUI,\n } = global;\n\n const {\n firstPerson,\n transformMode,\n fadeInTime,\n } = space;\n\n const {\n toolbar,\n } = elements;\n\n const {\n conceal,\n opaque,\n transformIcons,\n transformButtons,\n } = toolbar;\n\n const showToolbar = toolbar.show;\n // const universesBased = Object.keys(universes).length > 1;\n // #endregion properties\n\n\n // #region references\n const menuTimeout = useRef<null | ReturnType<typeof setTimeout>>(null);\n // #endregion references\n\n\n // #region state\n const [mouseIn, setMouseIn] = useState(false);\n const [showMenu, setShowMenu] = useState<keyof typeof MENUS>(MENUS.NONE);\n\n const [showIcons, setShowIcons] = useState(transformIcons);\n const [showTransformButtons, setShowTransformButtons] = useState(transformButtons);\n\n const [\n isMounted,\n setIsMounted,\n ] = useState(false);\n // #endregion state\n\n\n // #region handlers\n const toggleTransform = (\n TYPE: keyof typeof TRANSFORM_MODES,\n ) => {\n if (showMenu !== MENUS.NONE) {\n setShowMenu(MENUS.NONE);\n }\n\n dispatchSetConfigurationSpaceTransformMode(TYPE as any);\n }\n\n const handleShowMenu = (\n menu: keyof typeof MENUS,\n ) => {\n if (showMenu === menu) {\n setShowMenu(MENUS.NONE);\n } else {\n dispatchSetConfigurationSpaceTransformMode(TRANSFORM_MODES.ALL);\n setShowMenu(menu);\n }\n }\n // #endregion handlers\n\n\n // #region effects\n useEffect(() => {\n setIsMounted(true);\n }, []);\n\n /** ViewSize Update */\n useEffect(() => {\n if (viewSize.width < VIEW_SIZE_WIDTH_LIMIT) {\n if (transformButtons) {\n setShowTransformButtons(false);\n }\n }\n\n if (viewSize.width > VIEW_SIZE_WIDTH_LIMIT) {\n setShowTransformButtons(transformButtons);\n }\n }, [\n viewSize.width,\n ]);\n\n /** Local State Update */\n useEffect(() => {\n setShowIcons(transformIcons);\n setShowTransformButtons(transformButtons);\n }, [\n transformIcons,\n transformButtons,\n ]);\n\n /** Hide Menu at Mouse Out */\n useEffect(() => {\n if (mouseIn && menuTimeout.current) {\n clearTimeout(menuTimeout.current);\n }\n\n if (!mouseIn) {\n menuTimeout.current = setTimeout(() => {\n setShowMenu(MENUS.NONE);\n }, 400);\n }\n\n return () => {\n if (menuTimeout.current) {\n clearTimeout(menuTimeout.current);\n }\n }\n }, [\n mouseIn,\n ]);\n // #endregion effects\n\n\n // #region render\n if (!showToolbar) {\n return (<></>);\n }\n\n return (\n <StyledToolbar\n onMouseEnter={() => setMouseIn(true)}\n onMouseLeave={() => setMouseIn(false)}\n mouseIn={mouseIn}\n conceal={conceal}\n showMenu={showMenu}\n isMounted={isMounted}\n fadeInTime={fadeInTime}\n data-plurid-entity={PLURID_ENTITY_TOOLBAR}\n >\n <StyledToolbarButtons\n theme={theme}\n showIcons={showIcons}\n showTransformButtons={showTransformButtons}\n documentsBased={false}\n // universesBased={universesBased}\n mouseIn={mouseIn}\n opaque={opaque}\n transparentUI={transparentUI}\n >\n <StyledToolbarButton\n theme={theme}\n onClick={() => dispatchToggleConfigurationSpaceFirstPerson(undefined)}\n active={firstPerson}\n button={true}\n showIcons={showIcons}\n showTransformButtons={showTransformButtons}\n >\n <StyledIcon>\n <PluridIconFirstPerson />\n </StyledIcon>\n </StyledToolbarButton>\n\n\n <ToolbarRotate\n showTransformButtons={showTransformButtons}\n showIcons={showIcons}\n transformMode={transformMode}\n toggleTransform={toggleTransform}\n />\n\n <ToolbarScale\n showTransformButtons={showTransformButtons}\n showIcons={showIcons}\n transformMode={transformMode}\n toggleTransform={toggleTransform}\n />\n\n <ToolbarTranslate\n showTransformButtons={showTransformButtons}\n showIcons={showIcons}\n transformMode={transformMode}\n toggleTransform={toggleTransform}\n />\n\n\n {/* {universesBased && (\n <StyledToolbarButton\n theme={theme}\n onClick={() => handleShowMenu(MENUS.UNIVERSES)}\n active={showMenu === MENUS.UNIVERSES}\n button={true}\n >\n <StyledIcon>\n <PluridIconDocuments />\n </StyledIcon>\n </StyledToolbarButton>\n )} */}\n\n <StyledToolbarButton\n theme={theme}\n onClick={() => handleShowMenu(MENUS.MORE)}\n active={showMenu === MENUS.MORE}\n button={true}\n showIcons={showIcons}\n showTransformButtons={showTransformButtons}\n >\n <StyledIcon>\n <PluridIconMore />\n </StyledIcon>\n </StyledToolbarButton>\n </StyledToolbarButtons>\n\n {showMenu === MENUS.UNIVERSES && (\n <MenuUniverses />\n )}\n\n {showMenu === MENUS.MORE && (\n <MenuMore />\n )}\n </StyledToolbar>\n );\n // #endregion render\n}\n\n\nconst mapStateToProperties = (\n state: AppState,\n): PluridToolbarStateProperties => ({\n configuration: selectors.configuration.getConfiguration(state),\n theme: selectors.themes.getInteractionTheme(state),\n viewSize: selectors.space.getViewSize(state),\n // universes: selectors.data.getUniverses(state),\n});\n\n\nconst mapDispatchToProperties = (\n dispatch: ThunkDispatch<{}, {}, AnyAction>,\n): PluridToolbarDispatchProperties => ({\n dispatchToggleConfigurationSpaceFirstPerson: () => dispatch(\n actions.configuration.toggleConfigurationSpaceFirstPerson(),\n ),\n\n dispatchSetConfigurationSpaceTransformMode: (\n mode,\n ) => dispatch(\n actions.configuration.setConfigurationSpaceTransformMode(mode)\n ),\n});\n\n\nconst ConnectedPluridToolbar = connect(\n mapStateToProperties,\n mapDispatchToProperties,\n null,\n {\n context: StateContext,\n },\n)(PluridToolbar);\n// #endregion module\n\n\n\n// #region exports\nexport default ConnectedPluridToolbar;\n// #endregion exports\n","// #region imports\n // #region libraries\n import styled from 'styled-components';\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n // #endregion libraries\n\n\n // #region external\n import {\n fadeInAnimation,\n } from '~services/styled';\n // #endregion external\n// #endregion imports\n\n\n\n// #region module\nexport interface IStyledPluridViewcube {\n conceal: boolean;\n mouseOver: boolean;\n isMounted: boolean;\n fadeInTime: number;\n}\n\nexport const StyledPluridViewcube = styled.div<IStyledPluridViewcube>`\n position: absolute;\n @media (max-width: 800px) {\n top: ${({\n conceal,\n mouseOver,\n }) => {\n if (conceal && !mouseOver) {\n return '-90px';\n }\n return '0';\n }};\n }\n bottom: ${({\n conceal,\n mouseOver,\n }) => {\n if (conceal && !mouseOver) {\n return '-90px';\n }\n return '0';\n }};\n right: ${({\n conceal,\n mouseOver,\n }) => {\n if (conceal && !mouseOver) {\n return '-100px';\n }\n return '0';\n }};\n position: absolute;\n user-select: none;\n transition: all 300ms ease-in-out;\n z-index: 9998;\n height: 175px;\n display: grid;\n grid-template-areas: \"PVScale PVScale PVScale PVScale\"\n \"PVEmptyOne PVRotateUp PVEmptyTwo PVTranslateY\"\n \"PVRotateLeft PVModel PVRotateRight PVTranslateY\"\n \"PVEmptyThree PVRotateDown PVFitview PVTranslateY\"\n \"PVTranslateX PVTranslateX PVTranslateX PVTranslateX\";\n grid-template-rows: 20px 15px 105px 15px 20px;\n grid-template-columns: 15px 100px 15px 20px;\n\n opacity: ${({\n fadeInTime,\n }) => {\n if (fadeInTime) {\n return '0';\n }\n\n return '1';\n }};\n animation: ${({\n fadeInTime,\n isMounted,\n }) => {\n if (\n isMounted\n && fadeInTime\n ) {\n return fadeInAnimation(fadeInTime);\n }\n\n return '';\n }};\n\n :hover {\n opacity: 1;\n }\n`;\n\n\nexport interface IStyledPluridViewcubeArrow {\n theme: Theme;\n}\n\nexport const StyledPluridViewcubeArrow = styled.div<IStyledPluridViewcubeArrow>`\n display: grid;\n place-content: center;\n\n /* TODO\n * Themed color\n */\n color: white;\n`;\n\n\nexport interface IStyledPluridViewcubeArrowIcon {\n theme: Theme;\n}\n\nexport const StyledPluridViewcubeArrowIcon = styled.div<IStyledPluridViewcubeArrowIcon>`\n user-select: none;\n font-size: 0.6rem;\n width: 1.2rem;\n height: 1.2rem;\n border-radius: 0.6rem;\n display: grid;\n place-content: center;\n cursor: pointer;\n\n :hover {\n background-color: ${({\n theme,\n }) => {\n return theme.backgroundColorTertiary;\n }};\n }\n`;\n\n\nexport interface IStyledFitView {\n}\n\nexport const StyledFitView = styled.div<IStyledFitView>`\n grid-area: PVFitview;\n display: grid;\n place-content: center;\n cursor: pointer;\n user-select: none;\n\n svg {\n height: 0.8rem;\n width: 0.8rem;\n fill: white;\n }\n`;\n// #endregion module\n","// #region imports\n // #region libraries\n import styled from 'styled-components';\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\nexport interface IStyledPluridViewcubeFace {\n theme: Theme;\n mouseOver: boolean;\n opaque: boolean;\n face: string;\n}\n\nexport const StyledPluridViewcubeFace = styled.div<IStyledPluridViewcubeFace>`\n font-size: 0.6rem;\n position: absolute;\n height: 50px;\n width: 50px;\n pointer-events: none;\n display: grid;\n transform-style: preserve-3d;\n grid-template-areas: \"PVFTopLeft PVFTopCenter PVFTopRight\"\n \"PVFMiddleLeft PVFMiddleCenter PVFMiddleRight\"\n \"PVFBottomLeft PVFBottomCenter PVFBottomRight\";\n grid-template-rows: 10px 30px 10px;\n grid-template-columns: 10px 30px 10px;\n box-sizing: content-box;\n transition: all 300ms linear;\n\n border: 1px solid ${({\n mouseOver,\n theme,\n }) => {\n if (mouseOver) {\n return theme.colorTertiary;\n }\n return theme.backgroundColorSecondary;\n }};\n box-shadow: ${({\n face,\n theme,\n }) => {\n if (face === 'base') {\n return '0px 0px 12px 2px ' + theme.boxShadowPenumbraColor;\n }\n return '';\n }};\n opacity: ${({\n opaque,\n mouseOver,\n }) => {\n if (!opaque) {\n if (mouseOver) {\n return '0.8';\n }\n if (!mouseOver) {\n return '0.4';\n }\n }\n return '1';\n }};\n transform: ${({\n face,\n }) => {\n switch (face) {\n case 'front':\n return 'translateZ(25px) rotateY(0deg)';\n case 'back':\n return 'translateZ(-25px) rotateY(-180deg)';\n case 'left':\n return 'translateX(-25px) rotateY(-90deg)';\n case 'right':\n return 'translateX(25px) rotateY(90deg)';\n case 'top':\n return 'translateY(-25px) rotateX(90deg)';\n case 'base':\n return 'translateY(25px) rotateX(-90deg)';\n }\n\n return '';\n }};\n`;\n\n\nexport interface IStyledPluridViewcubeFaceZone {\n theme: Theme;\n type: string;\n hovered: boolean;\n transparentUI: boolean;\n active: boolean;\n}\n\nexport const StyledPluridViewcubeFaceZone = styled.div<IStyledPluridViewcubeFaceZone>`\n display: grid;\n place-content: center;\n cursor: pointer;\n pointer-events: all;\n\n grid-area: ${({\n type,\n }) => `PVF${type}`};\n color: ${({\n theme,\n hovered,\n }) => {\n if (hovered) {\n return theme.colorPrimary;\n }\n return theme.colorSecondary;\n }};\n background-color: ${({\n theme,\n transparentUI,\n hovered,\n active,\n }) => {\n if (transparentUI && !hovered) {\n return theme.backgroundColorPrimaryAlpha;\n }\n\n if (active) {\n return theme.backgroundColorTertiary;\n }\n if (hovered) {\n return theme.backgroundColorTertiary;\n }\n return theme.backgroundColorSecondary;\n }};\n border: 1px solid ${({\n theme,\n transparentUI,\n hovered,\n }) => {\n if (transparentUI && !hovered) {\n return 'transparent';\n }\n\n if (hovered) {\n return theme.colorTertiary;\n }\n return theme.backgroundColorSecondary;\n }};\n\n :hover {\n background-color: ${({\n theme,\n }) => {\n return theme.backgroundColorTertiary;\n }};\n }\n`;\n// #endregion module\n","// #region module\nexport const faceTypes = {\n topLeft: 'TopLeft',\n topCenter: 'TopCenter',\n topRight: 'TopRight',\n\n middleLeft: 'MiddleLeft',\n middleCenter: 'MiddleCenter',\n middleRight: 'MiddleRight',\n\n bottomLeft: 'BottomLeft',\n bottomCenter: 'BottomCenter',\n bottomRight: 'BottomRight',\n};\n\n\nexport const zoneCodes = {\n frontTopLeft: 'A1',\n frontTopCenter: 'A2',\n frontTopRight: 'A3',\n frontMiddleLeft: 'B1',\n frontMiddleCenter: 'B2',\n frontMiddleRight: 'B3',\n frontBottomLeft: 'C1',\n frontBottomCenter: 'C2',\n frontBottomRight: 'C3',\n\n rightTopLeft: 'A3',\n rightTopCenter: 'A4',\n rightTopRight: 'A5',\n rightMiddleLeft: 'B3',\n rightMiddleCenter: 'B4',\n rightMiddleRight: 'B5',\n rightBottomLeft: 'C3',\n rightBottomCenter: 'C4',\n rightBottomRight: 'C5',\n\n backTopLeft: 'A5',\n backTopCenter: 'A6',\n backTopRight: 'A7',\n backMiddleLeft: 'B5',\n backMiddleCenter: 'B6',\n backMiddleRight: 'B7',\n backBottomLeft: 'C5',\n backBottomCenter: 'C6',\n backBottomRight: 'C7',\n\n leftTopLeft: 'A7',\n leftTopCenter: 'A8',\n leftTopRight: 'A1',\n leftMiddleLeft: 'B7',\n leftMiddleCenter: 'B8',\n leftMiddleRight: 'B1',\n leftBottomLeft: 'C7',\n leftBottomCenter: 'C8',\n leftBottomRight: 'C1',\n\n topTopLeft: 'A7',\n topTopCenter: 'A6',\n topTopRight: 'A5',\n topMiddleLeft: 'A8',\n topMiddleCenter: 'D1',\n topMiddleRight: 'A4',\n topBottomLeft: 'A1',\n topBottomCenter: 'A2',\n topBottomRight: 'A3',\n\n baseTopLeft: 'C1',\n baseTopCenter: 'C2',\n baseTopRight: 'C3',\n baseMiddleLeft: 'C8',\n baseMiddleCenter: 'E1',\n baseMiddleRight: 'C4',\n baseBottomLeft: 'C7',\n baseBottomCenter: 'C6',\n baseBottomRight: 'C5',\n};\n\n\nexport const faceTransform = {\n A1: { rotateX: -45, rotateY: 45 },\n A2: { rotateX: -45, rotateY: 0 },\n A3: { rotateX: -45, rotateY: -45 },\n B1: { rotateX: 0, rotateY: 45 },\n B2: { rotateX: 0, rotateY: 0 },\n B3: { rotateX: 0, rotateY: -45 },\n C1: { rotateX: 45, rotateY: 45 },\n C2: { rotateX: 45, rotateY: 0 },\n C3: { rotateX: 45, rotateY: -45 },\n\n A4: { rotateX: -45, rotateY: 270.1 },\n A5: { rotateX: -45, rotateY: 225 },\n B4: { rotateX: 0, rotateY: 270.1 },\n B5: { rotateX: 0, rotateY: 225 },\n C4: { rotateX: 45, rotateY: 270.1 },\n C5: { rotateX: 45, rotateY: 225 },\n\n A6: { rotateX: -45, rotateY: 180 },\n A7: { rotateX: -45, rotateY: 135 },\n B6: { rotateX: 0, rotateY: 180.1 },\n B7: { rotateX: 0, rotateY: 135 },\n C6: { rotateX: 45, rotateY: 180.1 },\n C7: { rotateX: 45, rotateY: 135 },\n\n A8: { rotateX: -45, rotateY: 90.1 },\n B8: { rotateX: 0, rotateY: 90.1 },\n C8: { rotateX: 45, rotateY: 90.1 },\n\n D1: { rotateX: -90.1, rotateY: 0 },\n\n E1: { rotateX: 90.1, rotateY: 0 },\n};\n\n\nexport const zoneClickTransforms = {\n frontTopLeft: { rotateX: -45, rotateY: 45 },\n frontTopCenter: { rotateX: -45, rotateY: 0 },\n frontTopRight: { rotateX: -45, rotateY: -45 },\n frontMiddleLeft: { rotateX: 0, rotateY: 45 },\n frontMiddleCenter: { rotateX: 0, rotateY: 0 },\n frontMiddleRight: { rotateX: 0, rotateY: -45 },\n frontBottomLeft: { rotateX: 45, rotateY: 45 },\n frontBottomCenter: { rotateX: 45, rotateY: 0 },\n frontBottomRight: { rotateX: 45, rotateY: -45 },\n\n rightTopLeft: { rotateX: -45, rotateY: -45 },\n rightTopCenter: { rotateX: -45, rotateY: 270.1 },\n rightTopRight: { rotateX: -45, rotateY: 225 },\n rightMiddleLeft: { rotateX: 0, rotateY: 315 },\n rightMiddleCenter: { rotateX: 0, rotateY: 270.1 },\n rightMiddleRight: { rotateX: 0, rotateY: 225 },\n rightBottomLeft: { rotateX: 45, rotateY: -45 },\n rightBottomCenter: { rotateX: 45, rotateY: 270.1 },\n rightBottomRight: { rotateX: 45, rotateY: 225 },\n\n leftTopLeft: { rotateX: -45, rotateY: 135 },\n leftTopCenter: { rotateX: -45, rotateY: 90.1 },\n leftTopRight: { rotateX: -45, rotateY: 45 },\n leftMiddleLeft: { rotateX: 0, rotateY: 135 },\n leftMiddleCenter: { rotateX: 0, rotateY: 90.1 },\n leftMiddleRight: { rotateX: 0, rotateY: 45 },\n leftBottomLeft: { rotateX: 45, rotateY: 135 },\n leftBottomCenter: { rotateX: 45, rotateY: 90.1 },\n leftBottomRight: { rotateX: 45, rotateY: 45 },\n\n backTopLeft: { rotateX: -45, rotateY: 225 },\n backTopCenter: { rotateX: -45, rotateY: 180.1 },\n backTopRight: { rotateX: -45, rotateY: 135 },\n backMiddleLeft: { rotateX: 0, rotateY: 225 },\n backMiddleCenter: { rotateX: 0, rotateY: 180.1 },\n backMiddleRight: { rotateX: 0, rotateY: 135 },\n backBottomLeft: { rotateX: 45, rotateY: 225 },\n backBottomCenter: { rotateX: 45, rotateY: 180.1 },\n backBottomRight: { rotateX: 45, rotateY: 135 },\n\n topTopLeft: { rotateX: -45, rotateY: 225 },\n topTopCenter: { rotateX: -45, rotateY: 180.1 },\n topTopRight: { rotateX: -45, rotateY: 135 },\n topMiddleLeft: { rotateX: -45, rotateY: 90.1 },\n topMiddleCenter: { rotateX: -90.1, rotateY: 0 },\n topMiddleRight: { rotateX: -45, rotateY: 270.1 },\n topBottomLeft: { rotateX: 45, rotateY: 225 },\n topBottomCenter: { rotateX: -45, rotateY: 0 },\n topBottomRight: { rotateX: -45, rotateY: -45 },\n\n baseTopLeft: { rotateX: -45, rotateY: 225 },\n baseTopCenter: { rotateX: -45, rotateY: 180.1 },\n baseTopRight: { rotateX: -45, rotateY: 135 },\n baseMiddleLeft: { rotateX: 0, rotateY: 225 },\n baseMiddleCenter: { rotateX: 90.1, rotateY: 0 },\n baseMiddleRight: { rotateX: 0, rotateY: 225 },\n baseBottomLeft: { rotateX: 45, rotateY: 135 },\n baseBottomCenter: { rotateX: 45, rotateY: 180.1 },\n baseBottomRight: { rotateX: 45, rotateY: 135 },\n};\n// #endregion module\n","// #region imports\n // #region libraries\n import React from 'react';\n\n import {\n AnyAction,\n ThunkDispatch,\n } from '@reduxjs/toolkit';\n import { connect } from 'react-redux';\n\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n\n import {\n PluridConfiguration,\n } from '@plurid/plurid-data';\n\n import {\n StyledPluridViewcubeFace,\n StyledPluridViewcubeFaceZone,\n } from './styled';\n\n import { AppState } from '~services/state/store';\n import StateContext from '~services/state/context';\n import selectors from '~services/state/selectors';\n import actions from '~services/state/actions';\n import {\n DispatchAction,\n } from '~data/interfaces';\n // #endregion libraries\n\n\n // #region internal\n import {\n faceTransform,\n faceTypes,\n zoneCodes,\n zoneClickTransforms,\n } from './data';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nexport interface PluridViewcubeFaceOwnProperties {\n face: string;\n faceText: string;\n mouseOver: boolean;\n hoveredZone: string;\n setHoveredZone: React.Dispatch<React.SetStateAction<string>>;\n activeZone: string;\n setActiveZone: React.Dispatch<React.SetStateAction<string>>;\n}\n\nexport interface PluridViewcubeFaceStateProperties {\n generalTheme: Theme;\n interactionTheme: Theme;\n configuration: PluridConfiguration;\n}\n\nexport interface PluridViewcubeFaceDispatchProperties {\n dispatchRotateX: DispatchAction<typeof actions.space.rotateX>;\n dispatchRotateY: DispatchAction<typeof actions.space.rotateY>;\n dispatchSetAnimatedTransform: DispatchAction<typeof actions.space.setAnimatedTransform>;\n}\n\nexport type PluridViewcubeFaceProperties =\n & PluridViewcubeFaceOwnProperties\n & PluridViewcubeFaceStateProperties\n & PluridViewcubeFaceDispatchProperties;\n\n\nconst PluridViewcubeFace: React.FC<PluridViewcubeFaceProperties> = (\n properties,\n) => {\n // #region properties\n const {\n /** own */\n face,\n faceText,\n mouseOver,\n hoveredZone,\n setHoveredZone,\n activeZone,\n setActiveZone,\n\n /** state */\n generalTheme,\n interactionTheme,\n configuration,\n\n /** dispatch */\n dispatchRotateX,\n dispatchRotateY,\n dispatchSetAnimatedTransform,\n } = properties;\n\n const {\n global,\n elements,\n } = configuration;\n\n const {\n transparentUI,\n } = global;\n\n const opaqueFace = elements.viewcube.opaque;\n // #endregion properties\n\n\n // #region handlers\n const handleClick = (\n type: string,\n ) => {\n const faceType = `${face}${type}`;\n const zoneCode = (zoneCodes as any)[faceType];\n const transform = (faceTransform as any)[zoneCode];\n // console.log(zoneCode);\n // console.log(transform);\n setActiveZone(zoneCode);\n\n dispatchSetAnimatedTransform(true);\n dispatchRotateX(transform.rotateX);\n dispatchRotateY(transform.rotateY);\n setTimeout(() => {\n dispatchSetAnimatedTransform(false);\n }, 450);\n }\n // #endregion handlers\n\n\n // #region render\n return (\n <StyledPluridViewcubeFace\n theme={generalTheme}\n face={face}\n opaque={opaqueFace}\n mouseOver={mouseOver}\n >\n <StyledPluridViewcubeFaceZone\n theme={interactionTheme}\n type={faceTypes.topLeft}\n active={activeZone === (zoneCodes as any)[`${face}${faceTypes.topLeft}`]}\n hovered={hoveredZone === (zoneCodes as any)[`${face}${faceTypes.topLeft}`]}\n onClick={() => handleClick(faceTypes.topLeft)}\n onMouseEnter={() => setHoveredZone((zoneCodes as any)[`${face}${faceTypes.topLeft}`])}\n transparentUI={transparentUI}\n />\n <StyledPluridViewcubeFaceZone\n theme={interactionTheme}\n type={faceTypes.topCenter}\n active={activeZone === (zoneCodes as any)[`${face}${faceTypes.topCenter}`]}\n hovered={hoveredZone === (zoneCodes as any)[`${face}${faceTypes.topCenter}`]}\n onClick={() => handleClick(faceTypes.topCenter)}\n onMouseEnter={() => setHoveredZone((zoneCodes as any)[`${face}${faceTypes.topCenter}`])}\n transparentUI={transparentUI}\n />\n <StyledPluridViewcubeFaceZone\n theme={interactionTheme}\n type={faceTypes.topRight}\n active={activeZone === (zoneCodes as any)[`${face}${faceTypes.topRight}`]}\n hovered={hoveredZone === (zoneCodes as any)[`${face}${faceTypes.topRight}`]}\n onClick={() => handleClick(faceTypes.topRight)}\n onMouseEnter={() => setHoveredZone((zoneCodes as any)[`${face}${faceTypes.topRight}`])}\n transparentUI={transparentUI}\n />\n\n\n <StyledPluridViewcubeFaceZone\n theme={interactionTheme}\n type={faceTypes.middleLeft}\n active={activeZone === (zoneCodes as any)[`${face}${faceTypes.middleLeft}`]}\n hovered={hoveredZone === (zoneCodes as any)[`${face}${faceTypes.middleLeft}`]}\n onClick={() => handleClick(faceTypes.middleLeft)}\n onMouseEnter={() => setHoveredZone((zoneCodes as any)[`${face}${faceTypes.middleLeft}`])}\n transparentUI={transparentUI}\n />\n <StyledPluridViewcubeFaceZone\n theme={interactionTheme}\n type={faceTypes.middleCenter}\n active={activeZone === (zoneCodes as any)[`${face}${faceTypes.middleCenter}`]}\n hovered={hoveredZone === (zoneCodes as any)[`${face}${faceTypes.middleCenter}`]}\n onClick={() => handleClick(faceTypes.middleCenter)}\n onMouseEnter={() => setHoveredZone((zoneCodes as any)[`${face}${faceTypes.middleCenter}`])}\n transparentUI={transparentUI}\n >\n {faceText}\n </StyledPluridViewcubeFaceZone>\n <StyledPluridViewcubeFaceZone\n theme={interactionTheme}\n type={faceTypes.middleRight}\n active={activeZone === (zoneCodes as any)[`${face}${faceTypes.middleRight}`]}\n hovered={hoveredZone === (zoneCodes as any)[`${face}${faceTypes.middleRight}`]}\n onClick={() => handleClick(faceTypes.middleRight)}\n onMouseEnter={() => setHoveredZone((zoneCodes as any)[`${face}${faceTypes.middleRight}`])}\n transparentUI={transparentUI}\n />\n\n\n <StyledPluridViewcubeFaceZone\n theme={interactionTheme}\n type={faceTypes.bottomLeft}\n active={activeZone === (zoneCodes as any)[`${face}${faceTypes.bottomLeft}`]}\n hovered={hoveredZone === (zoneCodes as any)[`${face}${faceTypes.bottomLeft}`]}\n onClick={() => handleClick(faceTypes.bottomLeft)}\n onMouseEnter={() => setHoveredZone((zoneCodes as any)[`${face}${faceTypes.bottomLeft}`])}\n transparentUI={transparentUI}\n />\n <StyledPluridViewcubeFaceZone\n theme={interactionTheme}\n type={faceTypes.bottomCenter}\n active={activeZone === (zoneCodes as any)[`${face}${faceTypes.bottomCenter}`]}\n hovered={hoveredZone === (zoneCodes as any)[`${face}${faceTypes.bottomCenter}`]}\n onClick={() => handleClick(faceTypes.bottomCenter)}\n onMouseEnter={() => setHoveredZone((zoneCodes as any)[`${face}${faceTypes.bottomCenter}`])}\n transparentUI={transparentUI}\n />\n <StyledPluridViewcubeFaceZone\n theme={interactionTheme}\n type={faceTypes.bottomRight}\n active={activeZone === (zoneCodes as any)[`${face}${faceTypes.bottomRight}`]}\n hovered={hoveredZone === (zoneCodes as any)[`${face}${faceTypes.bottomRight}`]}\n onClick={() => handleClick(faceTypes.bottomRight)}\n onMouseEnter={() => setHoveredZone((zoneCodes as any)[`${face}${faceTypes.bottomRight}`])}\n transparentUI={transparentUI}\n />\n </StyledPluridViewcubeFace>\n );\n // #endregion render\n};\n\n\nconst mapStateToProperties = (\n state: AppState,\n): PluridViewcubeFaceStateProperties => ({\n generalTheme: selectors.themes.getGeneralTheme(state),\n interactionTheme: selectors.themes.getInteractionTheme(state),\n configuration: selectors.configuration.getConfiguration(state),\n});\n\n\nconst mapDispatchToProperties = (\n dispatch: ThunkDispatch<{}, {}, AnyAction>,\n): PluridViewcubeFaceDispatchProperties => ({\n dispatchRotateX: (angleX: number) => dispatch(\n actions.space.rotateX(angleX),\n ),\n dispatchRotateY: (angleY: number) => dispatch(\n actions.space.rotateY(angleY),\n ),\n dispatchSetAnimatedTransform: (animated: boolean) => dispatch(\n actions.space.setAnimatedTransform(animated),\n ),\n});\n\n\nconst ConnectedPluridViewcubeFace = connect(\n mapStateToProperties,\n mapDispatchToProperties,\n null,\n {\n context: StateContext,\n },\n)(PluridViewcubeFace);\n// #endregion module\n\n\n\n// #region exports\nexport default ConnectedPluridViewcubeFace;\n// #endregion exports\n","// #region imports\n // #region libraries\n import styled from 'styled-components';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\nexport const StyledPluridViewcubeModel = styled.div`\n grid-area: PVModel;\n margin-left: -7px;\n margin-top: 5px;\n`;\n\n\nexport const StyledPluridViewcubeModelContainer = styled.div`\n perspective: 2000px;\n perspective-origin: 50% 50%;\n`;\n\n\nexport const StyledPluridViewcubeModelCube = styled.div`\n transform-style: preserve-3d;\n width: 50px;\n height: 50px;\n`;\n// #endregion module\n","// #region imports\n // #region libraries\n import React, {\n useState,\n useEffect,\n } from 'react';\n\n import {\n AnyAction,\n ThunkDispatch,\n } from '@reduxjs/toolkit';\n import { connect } from 'react-redux';\n\n\n import {\n InternationalizationLanguageType,\n internationalization,\n } from '@plurid/plurid-data';\n\n import {\n internatiolate,\n interaction,\n } from '@plurid/plurid-engine';\n // #endregion libraries\n\n\n // #region external\n import ViewcubeFace from '../ViewcubeFace';\n\n import { AppState } from '~services/state/store';\n import StateContext from '~services/state/context';\n import selectors from '~services/state/selectors';\n // import actions from '~services/state/actions';\n // #endregion external\n\n\n // #region internal\n import {\n StyledPluridViewcubeModel,\n StyledPluridViewcubeModelContainer,\n StyledPluridViewcubeModelCube,\n } from './styled';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nconst {\n matrixArrayToCSSMatrix,\n rotateMatrix,\n multiplyArrayOfMatrices,\n scaleMatrix,\n translateMatrix,\n} = interaction.matrix;\n\nconst {\n degToRad,\n} = interaction.quaternion;\n\n\nexport interface PluridViewcubeModelOwnProperties {\n mouseOver: boolean;\n}\n\nexport interface PluridViewcubeModelStateProperties {\n stateLanguage: InternationalizationLanguageType;\n spaceRotationX: number;\n spaceRotationY: number;\n stateAnimatedTransform: boolean;\n stateTransformTime: number;\n}\n\nexport interface PluridViewcubeModelDispatchProperties {\n}\n\nexport type PluridViewcubeModelProperties =\n & PluridViewcubeModelOwnProperties\n & PluridViewcubeModelStateProperties\n & PluridViewcubeModelDispatchProperties;\n\n\nconst PluridViewcubeModel: React.FC<PluridViewcubeModelProperties> = (\n properties,\n) => {\n // #region properties\n const {\n // #region own\n mouseOver,\n // #endregion own\n\n // #region state\n stateLanguage,\n spaceRotationX,\n spaceRotationY,\n stateAnimatedTransform,\n stateTransformTime,\n // #endregion state\n } = properties;\n // #endregion properties\n\n\n // #region state\n const [hoveredZone, setHoveredZone] = useState('');\n const [activeZone, setActiveZone] = useState('');\n // #endregion state\n\n\n // #region handlers\n const handleMouseLeave = () => {\n setHoveredZone('');\n }\n\n const computeTransform = () => {\n const offsets = {\n x: 32,\n y: 23,\n z: 0,\n };\n const transformOrigins = {\n x: 0,\n y: 0,\n z: 0,\n };\n const scale = 1;\n\n const rotationMatrix = rotateMatrix(degToRad(-spaceRotationX), degToRad(-spaceRotationY));\n const translationMatrix = translateMatrix(offsets.x, offsets.y, offsets.z);\n const scalationMatrix = scaleMatrix(scale);\n\n const transformMatrix = multiplyArrayOfMatrices([\n translationMatrix,\n multiplyArrayOfMatrices([\n translateMatrix(transformOrigins.x, transformOrigins.y, transformOrigins.z),\n rotationMatrix,\n translateMatrix(-transformOrigins.x, -transformOrigins.y, -transformOrigins.z),\n ]),\n scalationMatrix,\n ]);\n\n const transform = matrixArrayToCSSMatrix(transformMatrix);\n\n return transform;\n }\n // #endregion handlers\n\n\n // #region effects\n useEffect(() => {\n if (!hoveredZone) {\n setActiveZone('');\n }\n }, [\n spaceRotationX,\n spaceRotationY,\n ]);\n // #endregion effects\n\n\n // #region render\n const transform = computeTransform();\n\n return (\n <StyledPluridViewcubeModel>\n <StyledPluridViewcubeModelContainer>\n <StyledPluridViewcubeModelCube\n suppressHydrationWarning={true}\n style={{\n transform,\n transition: mouseOver || stateAnimatedTransform\n ? `transform ${stateTransformTime}ms ease-in-out`\n : '',\n }}\n onMouseLeave={() => handleMouseLeave()}\n >\n <ViewcubeFace\n face=\"front\"\n faceText={internatiolate(stateLanguage, internationalization.fields.viewcubeFront)}\n mouseOver={mouseOver}\n hoveredZone={hoveredZone}\n setHoveredZone={setHoveredZone}\n activeZone={activeZone}\n setActiveZone={setActiveZone}\n />\n <ViewcubeFace\n face=\"back\"\n faceText={internatiolate(stateLanguage, internationalization.fields.viewcubeBack)}\n mouseOver={mouseOver}\n hoveredZone={hoveredZone}\n setHoveredZone={setHoveredZone}\n activeZone={activeZone}\n setActiveZone={setActiveZone}\n />\n <ViewcubeFace\n face=\"left\"\n faceText={internatiolate(stateLanguage, internationalization.fields.viewcubeLeft)}\n mouseOver={mouseOver}\n hoveredZone={hoveredZone}\n setHoveredZone={setHoveredZone}\n activeZone={activeZone}\n setActiveZone={setActiveZone}\n />\n <ViewcubeFace\n face=\"right\"\n faceText={internatiolate(stateLanguage, internationalization.fields.viewcubeRight)}\n mouseOver={mouseOver}\n hoveredZone={hoveredZone}\n setHoveredZone={setHoveredZone}\n activeZone={activeZone}\n setActiveZone={setActiveZone}\n />\n <ViewcubeFace\n face=\"top\"\n faceText={internatiolate(stateLanguage, internationalization.fields.viewcubeTop)}\n mouseOver={mouseOver}\n hoveredZone={hoveredZone}\n setHoveredZone={setHoveredZone}\n activeZone={activeZone}\n setActiveZone={setActiveZone}\n />\n <ViewcubeFace\n face=\"base\"\n faceText={internatiolate(stateLanguage, internationalization.fields.viewcubeBase)}\n mouseOver={mouseOver}\n hoveredZone={hoveredZone}\n setHoveredZone={setHoveredZone}\n activeZone={activeZone}\n setActiveZone={setActiveZone}\n />\n </StyledPluridViewcubeModelCube>\n </StyledPluridViewcubeModelContainer>\n </StyledPluridViewcubeModel>\n );\n // #endregion render\n}\n\n\nconst mapStateToProperties = (\n state: AppState,\n): PluridViewcubeModelStateProperties => ({\n stateLanguage: selectors.configuration.getConfiguration(state).global.language,\n spaceRotationX: selectors.space.getRotationX(state),\n spaceRotationY: selectors.space.getRotationY(state),\n stateAnimatedTransform: selectors.space.getAnimatedTransform(state),\n stateTransformTime: selectors.space.getTransformTime(state),\n});\n\n\nconst mapDispatchToProperties = (\n dispatch: ThunkDispatch<{}, {}, AnyAction>,\n): PluridViewcubeModelDispatchProperties => ({\n});\n\n\nconst ConnectedPluridViewcubeModel = connect(\n mapStateToProperties,\n mapDispatchToProperties,\n null,\n {\n context: StateContext,\n },\n)(PluridViewcubeModel);\n// #endregion module\n\n\n\n// #region exports\nexport default ConnectedPluridViewcubeModel;\n// #endregion exports\n","// #region imports\n // #region libraries\n import React, {\n useState,\n useEffect,\n } from 'react';\n\n import {\n AnyAction,\n ThunkDispatch,\n } from '@reduxjs/toolkit';\n import { connect } from 'react-redux';\n\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n\n import {\n PluridIconGlobal,\n } from '@plurid/plurid-icons-react';\n\n import {\n /** constants */\n PLURID_ENTITY_VIEWCUBE,\n\n /** interfaces */\n PluridConfiguration,\n } from '@plurid/plurid-data';\n // #endregion libraries\n\n\n // #region external\n import { AppState } from '~services/state/store';\n import StateContext from '~services/state/context';\n import selectors from '~services/state/selectors';\n import actions from '~services/state/actions';\n import {\n DispatchAction,\n DispatchActionWithoutPayload,\n } from '~data/interfaces';\n // #endregion external\n\n\n // #region internal\n import {\n StyledPluridViewcube,\n StyledPluridViewcubeArrow,\n StyledPluridViewcubeArrowIcon,\n StyledFitView,\n } from './styled';\n\n import PluridViewcubeModel from './components/ViewcubeModel';\n // import PluridViewcubeTransformAreas from './components/ViewcubeTransformAreas';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nexport interface PluridViewcubeOwnProperties {\n}\n\nexport interface PluridViewcubeStateProperties {\n stateConfiguration: PluridConfiguration;\n stateInteractionTheme: Theme;\n stateTransformTime: number;\n}\n\nexport interface PluridViewcubeDispatchProperties {\n dispatchRotateXWith: DispatchAction<typeof actions.space.rotateXWith>;\n dispatchRotateYWith: DispatchAction<typeof actions.space.rotateYWith>;\n dispatchSetAnimatedTransform: DispatchAction<typeof actions.space.setAnimatedTransform>;\n dispatchSpaceResetTransform: DispatchActionWithoutPayload<typeof actions.space.spaceResetTransform>;\n dispatchSpaceFitToView: DispatchActionWithoutPayload<typeof actions.space.spaceFitToView>;\n}\n\nexport type PluridViewcubeProperties =\n & PluridViewcubeOwnProperties\n & PluridViewcubeStateProperties\n & PluridViewcubeDispatchProperties;\n\n\nconst PluridViewcube: React.FC<PluridViewcubeProperties> = (\n properties,\n) => {\n // #region properties\n const {\n // #region state\n stateConfiguration,\n stateInteractionTheme,\n stateTransformTime,\n // #endregion state\n\n // #region dispatch\n dispatchRotateXWith,\n dispatchRotateYWith,\n dispatchSetAnimatedTransform,\n dispatchSpaceResetTransform,\n dispatchSpaceFitToView,\n // #endregion dispatch\n } = properties;\n\n const {\n elements,\n space,\n } = stateConfiguration;\n\n const {\n viewcube,\n } = elements;\n\n const {\n buttons,\n conceal,\n } = viewcube;\n\n const {\n fadeInTime,\n } = space;\n\n const showViewcube = viewcube.show;\n // #endregion properties\n\n\n // #region state\n const [\n mouseOver,\n setMouseOver,\n ] = useState(false);\n\n const [\n isMounted,\n setIsMounted,\n ] = useState(false);\n // #endregion state\n\n\n // #region handlers\n const animatedRotate = (\n type: string,\n value: number,\n ) => {\n dispatchSetAnimatedTransform(true);\n switch (type) {\n case 'rotateX':\n dispatchRotateXWith(value);\n break;\n case 'rotateY':\n dispatchRotateYWith(value);\n break;\n }\n setTimeout(() => {\n dispatchSetAnimatedTransform(false);\n }, stateTransformTime);\n }\n\n const animatedReset = (event: React.MouseEvent) => {\n dispatchSetAnimatedTransform(true);\n if (event.ctrlKey || event.metaKey) {\n // ⌘/Ctrl-click: hard reset to the identity view.\n dispatchSpaceResetTransform();\n } else {\n // Plain click: fit — frame all planes front-on (the useful default).\n dispatchSpaceFitToView();\n }\n setTimeout(() => {\n dispatchSetAnimatedTransform(false);\n }, stateTransformTime);\n }\n // #endregion handlers\n\n\n // #region effects\n useEffect(() => {\n setIsMounted(true);\n }, []);\n // #endregion effects\n\n\n // #region render\n if (!showViewcube) {\n return (<></>);\n }\n\n return (\n <StyledPluridViewcube\n onMouseEnter={() => setMouseOver(true)}\n onMouseLeave={() => setMouseOver(false)}\n onMouseMove={() => !mouseOver ? setMouseOver(true) : null}\n conceal={conceal}\n mouseOver={mouseOver}\n isMounted={isMounted}\n fadeInTime={fadeInTime}\n data-plurid-entity={PLURID_ENTITY_VIEWCUBE}\n >\n <PluridViewcubeModel\n mouseOver={mouseOver}\n />\n\n {mouseOver\n && buttons && (\n <>\n <StyledPluridViewcubeArrow\n style={{\n gridArea: 'PVRotateUp',\n }}\n >\n <StyledPluridViewcubeArrowIcon\n theme={stateInteractionTheme}\n onClick={() => animatedRotate('rotateX', -90.1)}\n >\n ▲\n </StyledPluridViewcubeArrowIcon>\n </StyledPluridViewcubeArrow>\n\n <StyledPluridViewcubeArrow\n theme={stateInteractionTheme}\n style={{\n gridArea: 'PVRotateDown',\n }}\n >\n <StyledPluridViewcubeArrowIcon\n theme={stateInteractionTheme}\n onClick={() => animatedRotate('rotateX', 90.1)}\n >\n ▼\n </StyledPluridViewcubeArrowIcon>\n </StyledPluridViewcubeArrow>\n\n <StyledPluridViewcubeArrow\n theme={stateInteractionTheme}\n style={{\n gridArea: 'PVRotateLeft',\n }}\n >\n <StyledPluridViewcubeArrowIcon\n theme={stateInteractionTheme}\n onClick={() => animatedRotate('rotateY', 90.1)}\n >\n ◀\n </StyledPluridViewcubeArrowIcon>\n </StyledPluridViewcubeArrow>\n\n <StyledPluridViewcubeArrow\n theme={stateInteractionTheme}\n style={{\n gridArea: 'PVRotateRight',\n }}\n >\n <StyledPluridViewcubeArrowIcon\n theme={stateInteractionTheme}\n onClick={() => animatedRotate('rotateY', -90.1)}\n >\n ▶\n </StyledPluridViewcubeArrowIcon>\n </StyledPluridViewcubeArrow>\n\n <StyledFitView\n onClick={animatedReset}\n >\n <PluridIconGlobal />\n </StyledFitView>\n\n {/* <PluridViewcubeTransformAreas /> */}\n </>\n )}\n </StyledPluridViewcube>\n );\n // #endregion render\n}\n\n\nconst mapStateToProperties = (\n state: AppState,\n): PluridViewcubeStateProperties => ({\n stateConfiguration: selectors.configuration.getConfiguration(state),\n stateInteractionTheme: selectors.themes.getInteractionTheme(state),\n stateTransformTime: selectors.space.getTransformTime(state),\n});\n\n\nconst mapDispatchToProperties = (\n dispatch: ThunkDispatch<{}, {}, AnyAction>,\n): PluridViewcubeDispatchProperties => ({\n dispatchRotateXWith: (value: number) => dispatch(\n actions.space.rotateXWith(value)\n ),\n dispatchRotateYWith: (value: number) => dispatch(\n actions.space.rotateYWith(value)\n ),\n dispatchSetAnimatedTransform: (animated: boolean) => dispatch(\n actions.space.setAnimatedTransform(animated)\n ),\n dispatchSpaceResetTransform: () => dispatch(\n actions.space.spaceResetTransform()\n ),\n dispatchSpaceFitToView: () => dispatch(\n actions.space.spaceFitToView()\n ),\n});\n\n\nconst ConnectedPluridViewcube = connect(\n mapStateToProperties,\n mapDispatchToProperties,\n null,\n {\n context: StateContext,\n },\n)(PluridViewcube);\n// #endregion module\n\n\n\n// #region exports\nexport default ConnectedPluridViewcube;\n// #endregion exports\n","// #region imports\n // #region libraries\n import React from 'react';\n\n import {\n AnyAction,\n ThunkDispatch,\n } from '@reduxjs/toolkit';\n import { connect } from 'react-redux';\n\n import styled from 'styled-components';\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n\n import {\n PluridConfiguration,\n TreePlane,\n } from '@plurid/plurid-data';\n // #endregion libraries\n\n\n // #region external\n import { AppState } from '~services/state/store';\n import StateContext from '~services/state/context';\n import selectors from '~services/state/selectors';\n\n import {\n navigateToPluridPlane,\n } from '~services/logic/animation';\n // #endregion external\n// #endregion imports\n\n\n\n// #region module\nconst WIDTH = 172;\nconst HEIGHT = 120;\nconst PADDING = 14;\nconst HIT = 26; // generous click target\n\n\ninterface ThemedProperties {\n theme: Theme;\n}\n\ninterface StyledMinimapProperties extends ThemedProperties {\n transparent: boolean;\n}\n\nconst StyledMinimap = styled.div<StyledMinimapProperties>`\n position: fixed;\n top: 16px;\n right: 16px;\n width: ${WIDTH}px;\n height: ${HEIGHT}px;\n border-radius: 6px;\n color: ${({ theme }) => theme.colorPrimary};\n overflow: hidden;\n z-index: 999;\n user-select: none;\n transition: background-color 200ms ease, border-color 200ms ease, box-shadow 200ms ease;\n\n /* When transparent: an unobtrusive see-through overview, solid only on hover. When not: always\n solid (the hover rule below just resolves to the same values). */\n background-color: ${({ theme, transparent }) =>\n transparent ? theme.backgroundColorPrimaryAlpha : theme.backgroundColorSecondary};\n border: 1px solid ${({ theme, transparent }) =>\n transparent ? 'transparent' : theme.backgroundColorTertiary};\n box-shadow: ${({ transparent }) =>\n transparent ? 'none' : '0 4px 18px rgba(0, 0, 0, 0.35)'};\n\n &:hover {\n background-color: ${({ theme }) => theme.backgroundColorSecondary};\n border-color: ${({ theme }) => theme.backgroundColorTertiary};\n box-shadow: 0 4px 18px rgba(0, 0, 0, 0.35);\n }\n`;\n\n\ninterface StyledMinimapDotProperties extends ThemedProperties {\n active: boolean;\n}\n\nconst StyledMinimapDot = styled.div<StyledMinimapDotProperties>`\n width: ${({ active }) => (active ? 13 : 10)}px;\n height: ${({ active }) => (active ? 13 : 10)}px;\n border-radius: 50%;\n background-color: ${({ theme }) => theme.colorPrimary};\n opacity: ${({ active }) => (active ? 1 : 0.5)};\n box-shadow: ${({ active, theme }) =>\n active ? `0 0 0 3px ${theme.backgroundColorTertiary}` : 'none'};\n transition: opacity 120ms ease, width 120ms ease, height 120ms ease;\n`;\n\n/** A generous transparent hit target centered on the plane's projected point. */\nconst StyledMinimapHit = styled.div`\n position: absolute;\n width: ${HIT}px;\n height: ${HIT}px;\n display: grid;\n place-content: center;\n cursor: pointer;\n\n &:hover ${StyledMinimapDot} {\n opacity: 1;\n }\n`;\n\n\n/** Flatten the (visible) tree into a list of planes — minimap shows roots + spawned children. */\nconst flattenVisible = (\n tree: TreePlane[],\n): TreePlane[] => {\n const planes: TreePlane[] = [];\n const walk = (nodes: TreePlane[]) => {\n for (const node of nodes) {\n if (node.show) {\n planes.push(node);\n }\n if (node.children) {\n walk(node.children);\n }\n }\n };\n walk(tree);\n return planes;\n}\n\n\nexport interface PluridMinimapStateProperties {\n stateConfiguration: PluridConfiguration;\n stateTree: TreePlane[];\n stateActivePlaneID: string;\n stateGeneralTheme: Theme;\n}\n\nexport interface PluridMinimapDispatchProperties {\n dispatch: ThunkDispatch<{}, {}, AnyAction>;\n}\n\nexport type PluridMinimapProperties =\n & PluridMinimapStateProperties\n & PluridMinimapDispatchProperties;\n\n\n/**\n * A 2D overview of the space: a dot per visible plane, projected onto the two world axes with the\n * most spread (so a wall-style layout reads as a front elevation, a depth-style one as a top-down\n * plan), the active plane highlighted, click-to-fly via `navigateToPluridPlane`. Themed with the\n * general theme; transparent (see-through) by default and solid only while hovered, so it stays\n * unobtrusive. Opt-in — `configuration.elements.minimap.show`. (A camera position/heading marker\n * is a planned v2.)\n */\nconst PluridMinimap: React.FC<PluridMinimapProperties> = (\n properties,\n) => {\n // #region properties\n const {\n stateConfiguration,\n stateTree,\n stateActivePlaneID,\n stateGeneralTheme,\n dispatch,\n } = properties;\n\n const show = stateConfiguration.elements.minimap?.show;\n const transparent = stateConfiguration.elements.minimap?.transparent ?? true;\n // #endregion properties\n\n\n // #region render\n if (!show) {\n return null;\n }\n\n const planes = flattenVisible(stateTree);\n if (planes.length === 0) {\n return (\n <StyledMinimap\n theme={stateGeneralTheme}\n transparent={transparent}\n />\n );\n }\n\n // Project onto the two world axes with the most spread, so the overview fits the actual layout:\n // a wall-style layout (COLUMNS/ROWS — X/Y spread, Z flat) reads as a front elevation, a\n // depth-style layout (X/Z spread) reads as a top-down plan. Avoids collapsing rows onto each other.\n const AXES = ['translateX', 'translateY', 'translateZ'] as const;\n const stats = AXES.map(axis => {\n const values = planes.map(plane => plane.location[axis]);\n const min = Math.min(...values);\n const max = Math.max(...values);\n return { axis, min, span: (max - min) || 1 };\n }).sort((a, b) => b.span - a.span);\n const [hAxis, vAxis] = stats;\n\n const project = (plane: TreePlane) => ({\n x: PADDING + ((plane.location[hAxis.axis] - hAxis.min) / hAxis.span) * (WIDTH - 2 * PADDING),\n y: PADDING + ((plane.location[vAxis.axis] - vAxis.min) / vAxis.span) * (HEIGHT - 2 * PADDING),\n });\n\n return (\n <StyledMinimap\n data-plurid-minimap={true}\n theme={stateGeneralTheme}\n transparent={transparent}\n >\n {planes.map(plane => {\n const { x, y } = project(plane);\n const active = plane.planeID === stateActivePlaneID;\n\n return (\n <StyledMinimapHit\n key={plane.planeID}\n title={plane.route}\n onClick={() => navigateToPluridPlane(dispatch, plane)}\n style={{\n left: x - HIT / 2,\n top: y - HIT / 2,\n }}\n >\n <StyledMinimapDot\n theme={stateGeneralTheme}\n active={active}\n />\n </StyledMinimapHit>\n );\n })}\n </StyledMinimap>\n );\n // #endregion render\n}\n\n\nconst mapStateToProperties = (\n state: AppState,\n): PluridMinimapStateProperties => ({\n stateConfiguration: selectors.configuration.getConfiguration(state),\n stateTree: selectors.space.getTree(state),\n stateActivePlaneID: selectors.space.getActivePlaneID(state),\n stateGeneralTheme: selectors.themes.getGeneralTheme(state),\n});\n\nconst mapDispatchToProperties = (\n dispatch: ThunkDispatch<{}, {}, AnyAction>,\n): PluridMinimapDispatchProperties => ({\n dispatch,\n});\n\n\nconst ConnectedPluridMinimap = connect(\n mapStateToProperties,\n mapDispatchToProperties,\n null,\n {\n context: StateContext,\n },\n)(PluridMinimap);\n// #endregion module\n\n\n\n// #region exports\nexport default ConnectedPluridMinimap;\n// #endregion exports\n","// #region module\nexport interface ShortcutItem {\n /** Each entry renders as its own <kbd> chip; multiple entries = a combo. */\n keys: string[];\n label: string;\n}\n\nexport interface ShortcutGroup {\n title: string;\n items: ShortcutItem[];\n}\n\n/**\n * The engine's full keyboard/pointer vocabulary, grouped for the help overlay.\n * Keep in sync with `services/logic/shortcuts` + the View gesture effects.\n */\nexport const SHORTCUT_GROUPS: ShortcutGroup[] = [\n {\n title: 'Navigate',\n items: [\n { keys: ['G'], label: 'Toggle grab / orbit mode' },\n { keys: ['drag'], label: 'Orbit (while grabbing)' },\n { keys: ['Shift', 'drag'], label: 'Pan' },\n { keys: ['middle', 'drag'], label: 'Pan (any mode)' },\n { keys: ['scroll'], label: 'Zoom to cursor (grab)' },\n { keys: ['⌘', 'scroll'], label: 'Zoom to cursor (any mode)' },\n { keys: ['0'], label: 'Fit all to view' },\n { keys: ['Home'], label: 'Fit all to view' },\n ],\n },\n {\n title: 'Fly mode',\n items: [\n { keys: ['F'], label: 'Toggle fly (first-person)' },\n { keys: ['W', 'A', 'S', 'D'], label: 'Move' },\n { keys: ['E', 'Space'], label: 'Ascend' },\n { keys: ['Q', 'Shift'], label: 'Descend' },\n { keys: ['drag'], label: 'Look around' },\n { keys: ['click'], label: 'Lock pointer · Esc releases' },\n ],\n },\n {\n title: 'Transform',\n items: [\n { keys: ['R'], label: 'Rotate mode' },\n { keys: ['T'], label: 'Translate mode' },\n { keys: ['S'], label: 'Scale mode' },\n { keys: ['Shift', '←→↑↓'], label: 'Rotate' },\n { keys: ['Alt', '←→↑↓'], label: 'Translate' },\n { keys: ['⌘', '↑↓'], label: 'Scale' },\n ],\n },\n {\n title: 'Planes',\n items: [\n { keys: ['Alt', 'F'], label: 'Focus plane' },\n { keys: ['Alt', 'B'], label: 'Focus parent plane' },\n { keys: ['Alt', 'E'], label: 'Isolate plane' },\n { keys: ['Alt', 'R'], label: 'Refresh plane' },\n { keys: ['Alt', 'W'], label: 'Close plane' },\n { keys: ['Alt', 'Shift', 'T'], label: 'Reopen closed plane' },\n ],\n },\n {\n title: 'Roots',\n items: [\n { keys: ['Alt', 'A'], label: 'Previous root' },\n { keys: ['Alt', 'D'], label: 'Next root' },\n { keys: ['Alt', 'Tab'], label: 'Cycle roots' },\n { keys: ['Alt', '1–9'], label: 'Jump to root' },\n ],\n },\n {\n title: 'Help',\n items: [\n { keys: ['?'], label: 'Toggle this panel' },\n { keys: ['Esc'], label: 'Close · exit mode' },\n ],\n },\n];\n// #endregion module\n","// #region imports\n // #region libraries\n import styled, { keyframes } from 'styled-components';\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\nconst fadeIn = keyframes`\n from { opacity: 0; }\n to { opacity: 1; }\n`;\n\nconst riseIn = keyframes`\n from { opacity: 0; transform: translateY(8px) scale(0.985); }\n to { opacity: 1; transform: translateY(0) scale(1); }\n`;\n\nexport const StyledShortcutsBackdrop = styled.div`\n position: fixed;\n inset: 0;\n z-index: 10001;\n display: grid;\n place-items: center;\n padding: 40px;\n background-color: rgba(0, 0, 0, 0.55);\n backdrop-filter: blur(4px);\n -webkit-backdrop-filter: blur(4px);\n animation: ${fadeIn} 140ms ease;\n`;\n\nexport const StyledShortcutsPanel = styled.div<{ theme: Theme }>`\n width: 100%;\n max-width: 780px;\n max-height: 82vh;\n overflow-y: auto;\n box-sizing: border-box;\n padding: 26px 30px 30px;\n border-radius: 16px;\n border: 1px solid rgba(255, 255, 255, 0.08);\n background-color: ${({ theme }) => theme.backgroundColorSecondary};\n color: ${({ theme }) => theme.colorPrimary};\n box-shadow: ${({ theme }) => theme.boxShadowUmbra};\n font-family: ${({ theme }) => theme.fontFamilySansSerif};\n animation: ${riseIn} 180ms cubic-bezier(0.16, 1, 0.3, 1);\n`;\n\nexport const StyledShortcutsHeader = styled.div`\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n gap: 16px;\n margin-bottom: 22px;\n\n h2 {\n margin: 0;\n font-size: 15px;\n font-weight: 600;\n letter-spacing: 0.02em;\n }\n\n span {\n font-size: 11px;\n opacity: 0.45;\n }\n`;\n\nexport const StyledShortcutsGroups = styled.div`\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));\n gap: 14px 28px;\n`;\n\nexport const StyledShortcutsGroup = styled.div`\n break-inside: avoid;\n`;\n\nexport const StyledShortcutsGroupTitle = styled.div`\n margin-bottom: 8px;\n font-size: 10px;\n font-weight: 600;\n letter-spacing: 0.1em;\n text-transform: uppercase;\n opacity: 0.42;\n`;\n\nexport const StyledShortcutsRow = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 14px;\n min-height: 26px;\n padding: 2px 0;\n font-size: 12.5px;\n\n span.label {\n opacity: 0.78;\n }\n`;\n\nexport const StyledShortcutsKeys = styled.div`\n display: flex;\n align-items: center;\n gap: 3px;\n flex-shrink: 0;\n`;\n\nexport const StyledShortcutsTrigger = styled.button<{ theme: Theme }>`\n position: fixed;\n bottom: 18px;\n left: 18px;\n z-index: 10000;\n width: 30px;\n height: 30px;\n display: grid;\n place-items: center;\n padding: 0;\n border-radius: 50%;\n border: 1px solid rgba(255, 255, 255, 0.12);\n background-color: ${({ theme }) => theme.backgroundColorSecondary};\n color: ${({ theme }) => theme.colorPrimary};\n font-family: ${({ theme }) => theme.fontFamilySansSerif};\n font-size: 14px;\n line-height: 1;\n cursor: pointer;\n opacity: 0.4;\n transition: opacity 150ms ease, transform 150ms ease, box-shadow 150ms ease;\n\n &:hover {\n opacity: 1;\n transform: translateY(-1px);\n box-shadow: ${({ theme }) => theme.boxShadowUmbra};\n }\n`;\n\nexport const StyledShortcutsKey = styled.kbd<{ theme: Theme }>`\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 12px;\n height: 19px;\n padding: 0 6px;\n border-radius: 5px;\n border: 1px solid rgba(255, 255, 255, 0.12);\n background-color: ${({ theme }) => theme.backgroundColorTertiary};\n box-shadow: 0 1px 0 0 rgba(0, 0, 0, 0.25);\n font-family: ui-monospace, 'SF Mono', Menlo, monospace;\n font-size: 10.5px;\n line-height: 1;\n white-space: nowrap;\n`;\n// #endregion module\n","// #region imports\n // #region libraries\n import React, {\n useState,\n useEffect,\n } from 'react';\n\n import { connect } from 'react-redux';\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n // #endregion libraries\n\n\n // #region external\n import { AppState } from '~services/state/store';\n import StateContext from '~services/state/context';\n import selectors from '~services/state/selectors';\n // #endregion external\n\n\n // #region internal\n import {\n SHORTCUT_GROUPS,\n } from './data';\n\n import {\n StyledShortcutsTrigger,\n StyledShortcutsBackdrop,\n StyledShortcutsPanel,\n StyledShortcutsHeader,\n StyledShortcutsGroups,\n StyledShortcutsGroup,\n StyledShortcutsGroupTitle,\n StyledShortcutsRow,\n StyledShortcutsKeys,\n StyledShortcutsKey,\n } from './styled';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nexport interface PluridShortcutsStateProperties {\n theme: Theme;\n}\n\nexport type PluridShortcutsProperties = PluridShortcutsStateProperties;\n\n/**\n * Self-contained help overlay listing the engine's keyboard/pointer vocabulary.\n * Toggled with `?` (and dismissed with `?`, `Escape`, or a backdrop click) — owns its\n * own visibility so it needs no wiring into the View, matching the Toolbar/Viewcube pattern.\n */\nconst PluridShortcuts: React.FC<PluridShortcutsProperties> = (\n properties,\n) => {\n // #region properties\n const {\n theme,\n } = properties;\n // #endregion properties\n\n\n // #region state\n const [visible, setVisible] = useState(false);\n // #endregion state\n\n\n // #region effects\n useEffect(() => {\n if (typeof window === 'undefined') {\n return;\n }\n\n const onKeyDown = (event: KeyboardEvent) => {\n const target = event.target as HTMLElement | null;\n if (target && (\n target.tagName === 'INPUT'\n || target.tagName === 'TEXTAREA'\n || target.isContentEditable\n )) {\n return;\n }\n\n if (event.key === '?') {\n event.preventDefault();\n setVisible((value) => !value);\n } else if (event.key === 'Escape') {\n setVisible((value) => (value ? false : value));\n }\n };\n\n window.addEventListener('keydown', onKeyDown);\n return () => {\n window.removeEventListener('keydown', onKeyDown);\n };\n }, []);\n // #endregion effects\n\n\n // #region render\n return (\n <>\n <StyledShortcutsTrigger\n theme={theme}\n type=\"button\"\n title=\"Keyboard shortcuts (?)\"\n aria-label=\"Keyboard shortcuts\"\n onClick={() => setVisible((value) => !value)}\n >\n ?\n </StyledShortcutsTrigger>\n\n {visible && (\n <StyledShortcutsBackdrop\n onClick={() => setVisible(false)}\n data-plurid-entity=\"shortcuts-overlay\"\n >\n <StyledShortcutsPanel\n theme={theme}\n onClick={(event) => event.stopPropagation()}\n >\n <StyledShortcutsHeader>\n <h2>Keyboard Shortcuts</h2>\n <span>? or Esc to close</span>\n </StyledShortcutsHeader>\n\n <StyledShortcutsGroups>\n {SHORTCUT_GROUPS.map((group) => (\n <StyledShortcutsGroup key={group.title}>\n <StyledShortcutsGroupTitle>\n {group.title}\n </StyledShortcutsGroupTitle>\n\n {group.items.map((item, itemIndex) => (\n <StyledShortcutsRow key={item.label + itemIndex}>\n <span className=\"label\">{item.label}</span>\n\n <StyledShortcutsKeys>\n {item.keys.map((key, keyIndex) => (\n <StyledShortcutsKey\n key={key + keyIndex}\n theme={theme}\n >\n {key}\n </StyledShortcutsKey>\n ))}\n </StyledShortcutsKeys>\n </StyledShortcutsRow>\n ))}\n </StyledShortcutsGroup>\n ))}\n </StyledShortcutsGroups>\n </StyledShortcutsPanel>\n </StyledShortcutsBackdrop>\n )}\n </>\n );\n // #endregion render\n}\n\n\nconst mapStateToProperties = (\n state: AppState,\n): PluridShortcutsStateProperties => ({\n theme: selectors.themes.getGeneralTheme(state),\n});\n\n\nconst ConnectedPluridShortcuts = connect(\n mapStateToProperties,\n null,\n null,\n {\n context: StateContext,\n },\n)(PluridShortcuts);\n// #endregion module\n\n\n\n// #region exports\nexport default ConnectedPluridShortcuts;\n// #endregion exports\n","// #region imports\n // #region libraries\n import React from 'react';\n // #endregion libraries\n\n\n // #region external\n import PluridSpace from '~components/structural/Space';\n import PluridOrigin from '~components/utilities/Origin';\n import PluridToolbar from '~components/utilities/Toolbar/General';\n import PluridViewcube from '~components/utilities/Viewcube';\n import PluridMinimap from '~components/utilities/Minimap';\n import PluridShortcuts from '~components/utilities/Shortcuts';\n // #endregion external\n// #region imports\n\n\n\n// #region module\nexport interface PluridViewContainerProperties {\n /**\n * Optional render-slots — when provided, each REPLACES the engine's default overlay (rendered at\n * the same spot). Omit to keep the default. The `elements.*.show` flags / `global.micro` still\n * apply to the defaults; a slot bypasses them entirely (the host owns that element).\n */\n renderToolbar?: () => unknown;\n renderViewcube?: () => unknown;\n renderMinimap?: () => unknown;\n renderShortcuts?: () => unknown;\n}\n\nconst PluridViewContainer: React.FC<PluridViewContainerProperties> = (\n properties,\n) => {\n const {\n renderToolbar,\n renderViewcube,\n renderMinimap,\n renderShortcuts,\n } = properties;\n\n // #region render\n return (\n <>\n <PluridSpace />\n <PluridOrigin />\n {renderToolbar ? renderToolbar() as React.ReactNode : <PluridToolbar />}\n {renderViewcube ? renderViewcube() as React.ReactNode : <PluridViewcube />}\n {renderMinimap ? renderMinimap() as React.ReactNode : <PluridMinimap />}\n {renderShortcuts ? renderShortcuts() as React.ReactNode : <PluridShortcuts />}\n </>\n );\n // #endregion render\n}\n// #endregion module\n\n\n\n// #region exports\nexport default PluridViewContainer;\n// #endregion exports\n","// #region imports\n // #region libraries\n import {\n useState,\n useRef,\n useEffect,\n } from 'react';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\n/**\n * Grab/navigate mode (toggle with **G**, **Escape** exits). When OFF (default) the space behaves\n * like a normal page — text is selectable, content is clickable, the wheel scrolls. When ON a\n * left-drag orbits / pans the 3D space (a hand tool); middle-drag pans in any mode. The keydown is\n * ignored while typing in a field or with a modifier held.\n *\n * `grabModeRef` mirrors `grabMode` on every render so the pointer + wheel event handlers can read\n * the live value without re-binding their listeners.\n */\nexport const useGrabMode = () => {\n const [grabMode, setGrabMode] = useState(false);\n const grabModeRef = useRef(grabMode);\n grabModeRef.current = grabMode;\n\n useEffect(() => {\n if (typeof window === 'undefined') {\n return;\n }\n\n const onKeyDown = (event: KeyboardEvent) => {\n const target = event.target as HTMLElement | null;\n if (target && (\n target.tagName === 'INPUT'\n || target.tagName === 'TEXTAREA'\n || target.isContentEditable\n )) {\n return;\n }\n\n if (event.metaKey || event.ctrlKey || event.altKey) {\n return;\n }\n\n if (event.code === 'KeyG') {\n event.preventDefault();\n setGrabMode((value) => !value);\n } else if (event.code === 'Escape' && grabModeRef.current) {\n setGrabMode(false);\n }\n };\n\n window.addEventListener('keydown', onKeyDown);\n return () => {\n window.removeEventListener('keydown', onKeyDown);\n };\n }, []);\n\n return {\n grabMode,\n grabModeRef,\n };\n}\n// #endregion module\n\n\n\n// #region exports\nexport default useGrabMode;\n// #endregion exports\n","// #region imports\n // #region libraries\n import React, {\n useEffect,\n } from 'react';\n\n import {\n AnyAction,\n ThunkDispatch,\n } from '@reduxjs/toolkit';\n // #endregion libraries\n\n\n // #region external\n import actions from '~services/state/actions';\n // #endregion external\n// #endregion imports\n\n\n\n// #region module\nexport interface UseFlyControlsParameters {\n viewElement: React.RefObject<HTMLDivElement>;\n firstPerson: boolean;\n /** `space.gestures.flySpeed` — planar move speed, px/frame. Default 9. */\n flySpeed?: number;\n /** `space.gestures.flyLookSensitivity` — pointer-locked mouse-look, deg/px. Default 0.12. */\n flyLook?: number;\n dispatch: ThunkDispatch<{}, {}, AnyAction>;\n}\n\n\n/**\n * First-person \"fly\" controls, active only in `firstPerson` mode. Continuous, frame-rate-independent\n * movement from held keys (WASD = move, E/Space = up, Q/Shift = down) via a `requestAnimationFrame`\n * loop, plus mouse-look: click the view to lock the pointer and steer with the mouse (Esc releases).\n * (Drag-to-look while NOT pointer-locked is handled in the pointer-gesture hook, not here.)\n */\nexport const useFlyControls = (\n {\n viewElement,\n firstPerson,\n flySpeed,\n flyLook,\n dispatch,\n }: UseFlyControlsParameters,\n) => {\n useEffect(() => {\n const element = viewElement.current;\n if (!element || typeof window === 'undefined') {\n return;\n }\n if (!firstPerson) {\n return;\n }\n\n const FLY_SPEED = flySpeed ?? 9; // px per frame (planar)\n const FLY_VERTICAL = (flySpeed ?? 9) * (7 / 9); // up/down scales with planar speed (default 7)\n const FLY_LOOK = flyLook ?? 0.12; // deg per px (locked mouse-look)\n const FLY_KEYS = new Set([\n 'KeyW', 'KeyA', 'KeyS', 'KeyD',\n 'KeyE', 'KeyQ', 'Space', 'ShiftLeft',\n ]);\n\n const held = new Set<string>();\n let frame: number | null = null;\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.metaKey || event.ctrlKey || event.altKey) {\n return;\n }\n if (FLY_KEYS.has(event.code)) {\n held.add(event.code);\n event.preventDefault();\n }\n };\n const onKeyUp = (event: KeyboardEvent) => {\n held.delete(event.code);\n };\n\n const onMouseMove = (event: MouseEvent) => {\n if (document.pointerLockElement !== element) {\n return;\n }\n const yaw = event.movementX * FLY_LOOK;\n const pitch = -event.movementY * FLY_LOOK;\n if (yaw !== 0 || pitch !== 0) {\n dispatch(actions.space.flyMove({ yaw, pitch }));\n }\n };\n\n const onClick = () => {\n // Guard cross-document/detached contexts (iframes throw `WrongDocumentError`)\n // and swallow the rejection of the now-Promise-returning API — a denied or\n // unavailable pointer lock must never bubble as an unhandled error.\n if (document.pointerLockElement !== element\n && (element as any).requestPointerLock\n && element.ownerDocument === document\n && element.isConnected\n ) {\n try {\n const lockResult = (element as any).requestPointerLock();\n if (lockResult && typeof lockResult.catch === 'function') {\n lockResult.catch(() => { /* pointer lock denied/unavailable */ });\n }\n } catch (_error) {\n /* WrongDocumentError and friends — non-fatal */\n }\n }\n };\n\n const loop = () => {\n let forward = 0;\n let strafe = 0;\n let vertical = 0;\n if (held.has('KeyW')) { forward += FLY_SPEED; }\n if (held.has('KeyS')) { forward -= FLY_SPEED; }\n if (held.has('KeyA')) { strafe += FLY_SPEED; }\n if (held.has('KeyD')) { strafe -= FLY_SPEED; }\n if (held.has('KeyE') || held.has('Space')) { vertical += FLY_VERTICAL; }\n if (held.has('KeyQ') || held.has('ShiftLeft')) { vertical -= FLY_VERTICAL; }\n if (forward !== 0 || strafe !== 0 || vertical !== 0) {\n dispatch(actions.space.flyMove({ forward, strafe, vertical }));\n }\n frame = requestAnimationFrame(loop);\n };\n frame = requestAnimationFrame(loop);\n\n window.addEventListener('keydown', onKeyDown);\n window.addEventListener('keyup', onKeyUp);\n document.addEventListener('mousemove', onMouseMove);\n element.addEventListener('click', onClick);\n\n return () => {\n if (frame !== null) {\n cancelAnimationFrame(frame);\n }\n window.removeEventListener('keydown', onKeyDown);\n window.removeEventListener('keyup', onKeyUp);\n document.removeEventListener('mousemove', onMouseMove);\n element.removeEventListener('click', onClick);\n if (document.pointerLockElement === element && document.exitPointerLock) {\n document.exitPointerLock();\n }\n };\n }, [\n firstPerson,\n viewElement.current,\n flySpeed,\n flyLook,\n ]);\n}\n// #endregion module\n\n\n\n// #region exports\nexport default useFlyControls;\n// #endregion exports\n","// #region imports\n // #region libraries\n import React, {\n useEffect,\n } from 'react';\n\n import {\n meta,\n } from '@plurid/plurid-functions';\n\n import {\n PLURID_DEFAULT_RESIZE_DEBOUNCE_TIME,\n } from '@plurid/plurid-data';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\nexport interface UseViewResizeParameters {\n viewElement: React.RefObject<HTMLDivElement>;\n dispatchSpaceSetViewSize: (size: { width: number; height: number }) => void;\n treeUpdateCallback: () => void;\n}\n\n\n/**\n * Window-resize handling for the View: a debounced measure → `setViewSize` (so the per-frame view\n * dimensions stay correct), plus a separate listener that recomputes the layout via\n * `treeUpdateCallback`. Two listeners on purpose — view-size is expensive to dispatch (debounced)\n * while the tree recompute is cheap (its own deps already gate it).\n */\nexport const useViewResize = (\n {\n viewElement,\n dispatchSpaceSetViewSize,\n treeUpdateCallback,\n }: UseViewResizeParameters,\n) => {\n /** Debounced view-size measurement. */\n useEffect(() => {\n const handleResize = meta.debounce(() => {\n if (viewElement && viewElement.current) {\n const width = viewElement.current.offsetWidth;\n const height = viewElement.current.offsetHeight;\n dispatchSpaceSetViewSize({\n width,\n height,\n });\n }\n }, PLURID_DEFAULT_RESIZE_DEBOUNCE_TIME);\n\n handleResize();\n window.addEventListener('resize', handleResize);\n\n return () => {\n window.removeEventListener('resize', handleResize);\n }\n }, []);\n\n /**\n * The effect only registers `treeUpdateCallback`, so depend on the callback itself — its own\n * deps already track view/config/tree. This drops two per-render whole-tree/whole-config\n * `JSON.stringify`s that recomputed the exact same trigger.\n */\n useEffect(() => {\n window.addEventListener('resize', treeUpdateCallback);\n\n return () => {\n window.removeEventListener('resize', treeUpdateCallback);\n }\n }, [\n treeUpdateCallback,\n ]);\n}\n// #endregion module\n\n\n\n// #region exports\nexport default useViewResize;\n// #endregion exports\n","// #region imports\n // #region libraries\n import React, {\n useRef,\n useEffect,\n } from 'react';\n\n import {\n AnyAction,\n ThunkDispatch,\n } from '@reduxjs/toolkit';\n\n import {\n TRANSFORM_MODES,\n PluridConfigurationSpace,\n } from '@plurid/plurid-data';\n // #endregion libraries\n\n\n // #region external\n import actions from '~services/state/actions';\n import { AppState } from '~services/state/store';\n\n import {\n DispatchAction,\n } from '~data/interfaces';\n // #endregion external\n// #endregion imports\n\n\n\n// #region module\nexport interface UsePointerGesturesParameters {\n viewElement: React.RefObject<HTMLDivElement>;\n /** `stateConfiguration.space` — mirrored into a ref so the handlers read live values. */\n spaceConfiguration: PluridConfigurationSpace;\n grabModeRef: React.MutableRefObject<boolean>;\n /** Always-latest app state — the handlers read `selectedPlaneIDs` + `scale` for drag-to-move. */\n stateRef: React.MutableRefObject<AppState>;\n dispatch: ThunkDispatch<{}, {}, AnyAction>;\n setNavDragging: (value: boolean) => void;\n\n dispatchRotateXWith: DispatchAction<typeof actions.space.rotateXWith>;\n dispatchRotateYWith: DispatchAction<typeof actions.space.rotateYWith>;\n dispatchTranslateXWith: DispatchAction<typeof actions.space.translateXWith>;\n dispatchTranslateYWith: DispatchAction<typeof actions.space.translateYWith>;\n dispatchTranslateZWith: DispatchAction<typeof actions.space.translateZWith>;\n dispatchScaleUpWith: DispatchAction<typeof actions.space.scaleUpWith>;\n dispatchScaleDownWith: DispatchAction<typeof actions.space.scaleDownWith>;\n}\n\n\n/**\n * Native Pointer-Events gestures (replaces HammerJS). Single-pointer drag rotates / translates /\n * scales by continuous signed deltas (smooth, both axes at once); two-pointer pinch zooms at the\n * pinch midpoint; releasing a rotate with residual velocity spins on with decaying momentum.\n *\n * Owns all the live pointer/momentum refs + a `spaceConfigRef` (mirrored from `spaceConfiguration`\n * every render) and a `grabModeRef` passed in from `useGrabMode`, so the listeners attach ONCE and\n * read the latest mode/locks/grab without re-binding on every config tick.\n */\nexport const usePointerGestures = (\n {\n viewElement,\n spaceConfiguration,\n grabModeRef,\n stateRef,\n dispatch,\n setNavDragging,\n dispatchRotateXWith,\n dispatchRotateYWith,\n dispatchTranslateXWith,\n dispatchTranslateYWith,\n dispatchTranslateZWith,\n dispatchScaleUpWith,\n dispatchScaleDownWith,\n }: UsePointerGesturesParameters,\n) => {\n // Native Pointer-Events gesture state. Tracks live pointers for single-pointer drag +\n // two-pointer pinch, plus a decaying-velocity momentum spin.\n const activePointers = useRef<Map<number, { x: number; y: number }>>(new Map());\n const lastPointer = useRef<{ x: number; y: number } | null>(null);\n const pinchDistance = useRef<number | null>(null);\n // Drag-threshold: a pointerdown only becomes an orbit once it moves past a few px. Below that\n // it's a click, which must pass through to UI controls (plane header icons, toolbar buttons).\n const pointerDragging = useRef<boolean>(false);\n const pointerDownAt = useRef<{ x: number; y: number } | null>(null);\n // True for the duration of a drag that MOVES the current selection (vs orbits/pans the camera).\n const movingSelection = useRef<boolean>(false);\n const momentum = useRef<{ vx: number; vy: number }>({ vx: 0, vy: 0 });\n const momentumFrame = useRef<number | null>(null);\n // The mouse button that started the current drag — lets `applySingle` resolve the `buttonMap`.\n const navButton = useRef<number>(-1);\n // Always-latest space config (transformMode/locks/firstPerson) for the pointer handlers, so\n // they can attach once instead of re-binding on every config change.\n const spaceConfigRef = useRef(spaceConfiguration);\n spaceConfigRef.current = spaceConfiguration;\n\n useEffect(() => {\n const element = viewElement.current;\n if (!element || typeof window === 'undefined') {\n return;\n }\n\n // Gesture feel is read LIVE from `space.gestures` (each field with its default) so a host can\n // retune sensitivities/threshold/momentum mid-session without re-binding the listeners.\n const gx = () => {\n const g = spaceConfigRef.current.gestures || {};\n return {\n rotate: g.rotateSensitivity ?? 0.22, // deg per px\n translate: g.translateSensitivity ?? 1, // px per px\n scale: g.scaleSensitivity ?? 0.004,\n pinch: g.pinchSensitivity ?? 0.01,\n flyLook: g.flyLookSensitivity ?? 0.18, // deg per px (fly-mode look)\n dragThreshold: g.dragThreshold ?? 4, // px before a press becomes an orbit\n momentumDecay: g.momentumDecay ?? 0.92,\n momentumMin: g.momentumMin ?? 0.05,\n disableMomentum: g.disableMomentum ?? false,\n };\n };\n\n // Resolve the `gestures.buttonMap` action for an initiating button — ONLY in the default (ALL)\n // mode and not fly mode. `undefined` (no map / unmapped button) means \"use the CAD defaults\".\n const buttonOverrideFor = (\n button: number,\n ): 'orbit' | 'pan' | 'zoom' | 'disabled' | undefined => {\n const map = spaceConfigRef.current.gestures?.buttonMap;\n if (!map\n || spaceConfigRef.current.firstPerson\n || spaceConfigRef.current.transformMode !== TRANSFORM_MODES.ALL\n ) {\n return undefined;\n }\n if (button === 0) { return map.left; }\n if (button === 1) { return map.middle; }\n return undefined;\n };\n\n const stopMomentum = () => {\n if (momentumFrame.current !== null) {\n cancelAnimationFrame(momentumFrame.current);\n momentumFrame.current = null;\n }\n };\n\n // Whether the most recent drag was an orbit (so momentum only flings on orbit).\n let navWasOrbit = false;\n\n const rotateByDelta = (dx: number, dy: number) => {\n const sensitivity = gx().rotate;\n if (dx !== 0) {\n dispatchRotateYWith(dx * sensitivity);\n }\n if (dy !== 0) {\n dispatchRotateXWith(-dy * sensitivity);\n }\n };\n\n const panByDelta = (dx: number, dy: number, altKey: boolean) => {\n if (dx !== 0) {\n dispatchTranslateXWith(dx * gx().translate);\n }\n if (dy !== 0) {\n if (altKey) {\n dispatchTranslateZWith(dy);\n } else {\n dispatchTranslateYWith(dy);\n }\n }\n };\n\n const scaleByDrag = (dy: number) => {\n const amount = Math.abs(dy) * gx().scale;\n if (amount > 0) {\n if (dy < 0) {\n dispatchScaleUpWith(amount);\n } else {\n dispatchScaleDownWith(amount);\n }\n }\n };\n\n // CAD-style navigation. The explicit rotate/scale/translate modes pin what a drag does;\n // otherwise (the default ALL mode) a plain drag orbits and a shift- or middle-button drag\n // pans — so you can navigate the space without first choosing a mode.\n const applySingle = (dx: number, dy: number, event: PointerEvent) => {\n const mode = spaceConfigRef.current.transformMode;\n navWasOrbit = false;\n // Drag-to-move the selection: convert the screen delta to space-local units (÷ scale) and\n // shift every selected plane. No camera change, no momentum fling. (Head-on is exact; under\n // a heavy orbit the X/Y mapping is approximate — a known v1 limitation.)\n if (movingSelection.current) {\n const scale = stateRef.current?.space?.scale || 1;\n if (event.altKey) {\n // Alt-drag moves the selection in DEPTH (Z) instead of the X-Y plane.\n dispatch(actions.space.transformSelectedPlanes({\n deltaZ: dy / scale,\n }));\n } else {\n dispatch(actions.space.transformSelectedPlanes({\n deltaX: dx / scale,\n deltaY: dy / scale,\n }));\n }\n return;\n }\n if (spaceConfigRef.current.firstPerson) {\n // Fly mode: dragging looks around (yaw/pitch). When the pointer is locked the\n // dedicated mouse-look listener takes over (clientX/Y frozen, so dx/dy here are ~0).\n const flyLook = gx().flyLook;\n dispatch(actions.space.flyMove({\n yaw: dx * flyLook,\n pitch: -dy * flyLook,\n }));\n return;\n }\n if (mode === TRANSFORM_MODES.ROTATION) {\n navWasOrbit = true;\n rotateByDelta(dx, dy);\n } else if (mode === TRANSFORM_MODES.TRANSLATION) {\n panByDelta(dx, dy, event.altKey);\n } else if (mode === TRANSFORM_MODES.SCALE) {\n scaleByDrag(dy);\n } else {\n // Default (ALL) mode. A `buttonMap` entry (when set) is authoritative for the\n // initiating button; otherwise the CAD defaults: in grab mode a left-drag orbits;\n // shift- or middle-drag pans. (In normal mode only middle/shift drags are tracked.)\n const override = buttonOverrideFor(navButton.current);\n if (override === 'orbit') {\n navWasOrbit = true;\n rotateByDelta(dx, dy);\n } else if (override === 'pan') {\n panByDelta(dx, dy, event.altKey);\n } else if (override === 'zoom') {\n scaleByDrag(dy);\n } else if (override === 'disabled') {\n // The host claimed this button — plurid does nothing with the drag.\n } else {\n const wantsPan = event.shiftKey || (event.buttons & 4) === 4;\n if (grabModeRef.current && !wantsPan) {\n navWasOrbit = true;\n rotateByDelta(dx, dy);\n } else {\n panByDelta(dx, dy, event.altKey);\n }\n }\n }\n };\n\n const runMomentum = () => {\n const { momentumDecay, momentumMin } = gx();\n const m = momentum.current;\n rotateByDelta(m.vx, m.vy);\n m.vx *= momentumDecay;\n m.vy *= momentumDecay;\n if (Math.abs(m.vx) < momentumMin && Math.abs(m.vy) < momentumMin) {\n stopMomentum();\n return;\n }\n momentumFrame.current = requestAnimationFrame(runMomentum);\n };\n\n const twoPointerDistance = (): number => {\n const pts = Array.from(activePointers.current.values());\n return Math.hypot(pts[0].x - pts[1].x, pts[0].y - pts[1].y);\n };\n\n const onPointerDown = (event: PointerEvent) => {\n // Only skip form fields (a drag inside them should select/scrub, not orbit). Everything\n // else — including the engine's <div>-based controls — is allowed: a click (no movement)\n // passes straight through to the control's onClick; only a drag past DRAG_THRESHOLD\n // starts an orbit (see onPointerMove). We must NOT setPointerCapture or preventDefault\n // here, or control clicks get swallowed.\n const target = event.target as HTMLElement | null;\n // Form fields AND rich-text editors (contentEditable, e.g. TipTap/Lexical/ProseMirror):\n // a drag inside them should select/scrub text, not orbit. `isContentEditable` resolves\n // inheritance (a drag on a text node inside an editable host), matching `useGrabMode`.\n if (target && ((target.closest && target.closest('input, textarea, select')) || target.isContentEditable)) {\n return;\n }\n // Only engage navigation for a deliberate nav gesture; otherwise leave the press to the\n // browser (text selection, clicks, links) — planes are pages. Nav = fly mode, grab mode\n // (G), the middle mouse button, or an explicit rotate/scale/translate mode.\n // Drag-to-move: a plain left-drag on an ALREADY-SELECTED plane (normal mode only) moves the\n // whole selection. Orbit requires grab mode, so this never competes with it; shift is left\n // to pan, and a no-drag click still reaches the plane's shift-click selection toggle.\n // When a `buttonMap` claims the initiating button, it is authoritative — it overrides BOTH\n // the selection-move and the default nav decision for that button.\n const override = buttonOverrideFor(event.button);\n\n let moveIntent = false;\n const selection = stateRef.current?.space?.selectedPlaneIDs;\n if (\n override === undefined\n && selection && selection.length > 0\n && event.button === 0\n && !event.shiftKey\n && !spaceConfigRef.current.firstPerson\n && !grabModeRef.current\n && spaceConfigRef.current.transformMode === TRANSFORM_MODES.ALL\n ) {\n const planeEl = target && target.closest\n ? target.closest('[data-plurid-plane]')\n : null;\n const planeID = planeEl && planeEl.getAttribute('data-plurid-plane');\n if (planeID && selection.includes(planeID)) {\n moveIntent = true;\n }\n }\n\n // A `buttonMap` of `disabled` releases the button to the host (no nav, even in grab mode);\n // a mapped action (orbit/pan/zoom) engages nav directly (no grab mode needed).\n const navIntent = override === 'disabled'\n ? false\n : (spaceConfigRef.current.firstPerson\n || grabModeRef.current\n || event.button === 1\n || spaceConfigRef.current.transformMode !== TRANSFORM_MODES.ALL\n || override !== undefined);\n if (!navIntent && !moveIntent) {\n return;\n }\n navButton.current = event.button;\n movingSelection.current = moveIntent;\n stopMomentum();\n momentum.current = { vx: 0, vy: 0 };\n pointerDragging.current = false;\n pointerDownAt.current = { x: event.clientX, y: event.clientY };\n activePointers.current.set(event.pointerId, { x: event.clientX, y: event.clientY });\n lastPointer.current = { x: event.clientX, y: event.clientY };\n if (activePointers.current.size === 2) {\n // A two-finger gesture is unambiguous — engage pinch immediately.\n pointerDragging.current = true;\n pinchDistance.current = twoPointerDistance();\n }\n };\n\n const onPointerMove = (event: PointerEvent) => {\n if (!activePointers.current.has(event.pointerId)) {\n return;\n }\n activePointers.current.set(event.pointerId, { x: event.clientX, y: event.clientY });\n\n if (activePointers.current.size >= 2) {\n if (!spaceConfigRef.current.transformLocks.scale) {\n return;\n }\n const pts = Array.from(activePointers.current.values());\n const dist = Math.hypot(pts[0].x - pts[1].x, pts[0].y - pts[1].y);\n if (pinchDistance.current !== null) {\n const deltaScale = (dist - pinchDistance.current) * gx().pinch;\n if (deltaScale !== 0) {\n const rect = element.getBoundingClientRect();\n const originX = (pts[0].x + pts[1].x) / 2 - rect.left;\n const originY = (pts[0].y + pts[1].y) / 2 - rect.top;\n dispatch(actions.space.zoomAtPoint({ deltaScale, originX, originY }));\n }\n }\n pinchDistance.current = dist;\n lastPointer.current = null;\n return;\n }\n\n if (!lastPointer.current) {\n lastPointer.current = { x: event.clientX, y: event.clientY };\n return;\n }\n\n // Below the threshold this press is still a (potential) click — let it pass through to\n // whatever control is under the pointer. Once it moves far enough, commit to an orbit:\n // capture the pointer and start applying deltas.\n if (!pointerDragging.current) {\n const origin = pointerDownAt.current;\n const moved = origin\n ? Math.hypot(event.clientX - origin.x, event.clientY - origin.y)\n : 0;\n if (moved < gx().dragThreshold) {\n return;\n }\n pointerDragging.current = true;\n setNavDragging(true);\n // A selection move begins — turn on the live alignment-guide overlay.\n if (movingSelection.current) {\n dispatch(actions.space.setDraggingSelection(true));\n }\n lastPointer.current = { x: event.clientX, y: event.clientY };\n try {\n element.setPointerCapture(event.pointerId);\n } catch (_) { /* capture unsupported */ }\n return;\n }\n\n const dx = event.clientX - lastPointer.current.x;\n const dy = event.clientY - lastPointer.current.y;\n lastPointer.current = { x: event.clientX, y: event.clientY };\n // Momentum tracks per-move velocity, capped so one large delta (e.g. a\n // synthetic/teleporting pointer) can't launch a runaway spin on release.\n const cap = 40;\n momentum.current = {\n vx: Math.max(-cap, Math.min(cap, dx)),\n vy: Math.max(-cap, Math.min(cap, dy)),\n };\n event.preventDefault();\n applySingle(dx, dy, event);\n };\n\n const endPointer = (event: PointerEvent) => {\n activePointers.current.delete(event.pointerId);\n try {\n element.releasePointerCapture(event.pointerId);\n } catch (_) { /* capture unsupported */ }\n\n if (activePointers.current.size < 2) {\n pinchDistance.current = null;\n }\n\n if (activePointers.current.size === 0) {\n lastPointer.current = null;\n pointerDownAt.current = null;\n setNavDragging(false);\n const wasDragging = pointerDragging.current;\n const wasMoving = movingSelection.current;\n pointerDragging.current = false;\n movingSelection.current = false;\n // Always drop the guide overlay when the last pointer lifts — covers an interrupted\n // move (pointercancel / a second pointer) too, not just the clean snap path below.\n // Idempotent: the reducer no-ops when the flag is already false.\n dispatch(actions.space.setDraggingSelection(false));\n // Edge-snap the group only on the clean release of a real (past-threshold) move.\n if (wasDragging && wasMoving) {\n dispatch(actions.space.snapSelection(undefined));\n }\n // Only fling momentum if this was an actual orbit drag (not a click), and the host\n // hasn't disabled the fling.\n const m = momentum.current;\n const { momentumMin, disableMomentum } = gx();\n if (wasDragging\n && navWasOrbit\n && !disableMomentum\n && (Math.abs(m.vx) > momentumMin || Math.abs(m.vy) > momentumMin)) {\n stopMomentum();\n momentumFrame.current = requestAnimationFrame(runMomentum);\n }\n } else {\n const remaining = Array.from(activePointers.current.values())[0];\n lastPointer.current = remaining ? { x: remaining.x, y: remaining.y } : null;\n }\n };\n\n element.addEventListener('pointerdown', onPointerDown);\n element.addEventListener('pointermove', onPointerMove, { passive: false });\n element.addEventListener('pointerup', endPointer);\n element.addEventListener('pointercancel', endPointer);\n\n return () => {\n stopMomentum();\n element.removeEventListener('pointerdown', onPointerDown);\n element.removeEventListener('pointermove', onPointerMove);\n element.removeEventListener('pointerup', endPointer);\n element.removeEventListener('pointercancel', endPointer);\n };\n }, [\n viewElement.current,\n ]);\n}\n// #endregion module\n\n\n\n// #region exports\nexport default usePointerGestures;\n// #endregion exports\n","// #region imports\n // #region libraries\n import {\n useCallback,\n } from 'react';\n\n import {\n PluridApplicationView,\n PluridConfiguration,\n TreePlane,\n } from '@plurid/plurid-data';\n // #endregion libraries\n\n\n // #region external\n import {\n space,\n getRegisteredPlanes,\n } from '~services/engine';\n // #endregion external\n// #endregion imports\n\n\n\n// #region module\nexport interface UseTreeUpdateParameters {\n view: PluridApplicationView;\n configuration: PluridConfiguration;\n tree: TreePlane[];\n // The View prop is optional; the `space.tree.Tree` constructor's `origin` param is\n // defaulted (`= 'origin'`), so `undefined` is accepted at runtime — match that here.\n hostname: string | undefined;\n planesRegistrar: Parameters<typeof getRegisteredPlanes>[0];\n dispatchSetTree: (tree: TreePlane[]) => void;\n}\n\n\n/**\n * Recompute the space tree (layout) and dispatch it. `treeUpdate` rebuilds the tree from the view +\n * registered planes, then re-attaches the runtime `planeID` + spawned children from the existing\n * tree onto the freshly-laid-out one (keyed by route + a ROUNDED location — the rounding absorbs\n * sub-pixel relayout drift that would otherwise silently close spawned planes). `treeUpdateCallback`\n * is the memoized version for resize listeners; `resolveLayout` is the one-shot initial layout.\n */\nexport const useTreeUpdate = (\n {\n view,\n configuration,\n tree,\n hostname,\n planesRegistrar,\n dispatchSetTree,\n }: UseTreeUpdateParameters,\n) => {\n const treeUpdate = (\n treeView: PluridApplicationView,\n treeConfiguration: PluridConfiguration = configuration,\n layout?: boolean,\n ) => {\n const planes = getRegisteredPlanes(planesRegistrar);\n\n const spaceTree = new space.tree.Tree(\n {\n planes,\n configuration: treeConfiguration,\n view: treeView,\n layout,\n },\n hostname,\n );\n\n const computedTree = spaceTree.compute();\n\n // Re-attach the runtime planeID + spawned children from the existing tree onto the\n // freshly-computed (relaid-out) tree. Keyed by route + a ROUNDED location in an O(n)\n // Map: the old code did an O(roots²) scan with an EXACT `objects.equals(location)`, so\n // a sub-pixel relayout drift (100 vs 100.0001) dropped the match and silently closed\n // spawned planes. Rounding absorbs that drift; roots sit hundreds of px apart, so it\n // can't cause a false match.\n const locationKey = (location: any) =>\n Math.round(location.translateX) + ',' +\n Math.round(location.translateY) + ',' +\n Math.round(location.translateZ) + ',' +\n Math.round(location.rotateX) + ',' +\n Math.round(location.rotateY);\n const stateByKey = new Map<string, typeof tree[number]>();\n for (const statePlane of tree) {\n stateByKey.set(statePlane.route + '@' + locationKey(statePlane.location), statePlane);\n }\n for (const computedPlane of computedTree) {\n const statePlane = stateByKey.get(\n computedPlane.route + '@' + locationKey(computedPlane.location),\n );\n if (statePlane) {\n computedPlane.planeID = statePlane.planeID;\n if (statePlane.children) {\n computedPlane.children = statePlane.children;\n }\n }\n }\n\n dispatchSetTree(computedTree);\n }\n\n const treeUpdateCallback = useCallback(() => {\n treeUpdate(\n view,\n configuration,\n true,\n );\n }, [\n hostname,\n view,\n configuration,\n // Tree REFERENCE, not a per-render `JSON.stringify` of the whole tree — the reducer\n // swaps `state.tree` for a new array on every mutation, so the ref already changes at\n // the same cadence a content hash would, at O(1) instead of O(n).\n tree,\n ]);\n\n const resolveLayout = () => {\n treeUpdate(\n view,\n configuration,\n true,\n );\n }\n\n return {\n treeUpdate,\n treeUpdateCallback,\n resolveLayout,\n };\n}\n// #endregion module\n\n\n\n// #region exports\nexport default useTreeUpdate;\n// #endregion exports\n","// #region imports\n // #region libraries\n import {\n useState,\n useCallback,\n useEffect,\n } from 'react';\n\n import {\n AnyAction,\n ThunkDispatch,\n } from '@reduxjs/toolkit';\n\n import themes from '@plurid/plurid-themes';\n\n import {\n PLURID_PUBSUB_TOPIC,\n\n PluridConfiguration,\n SpaceTransform,\n TreePlane,\n PluridApplicationView,\n PluridPubSub as IPluridPubSub,\n PluridPubSubSubscribeMessage,\n } from '@plurid/plurid-data';\n\n import PluridPubSub from '@plurid/plurid-pubsub';\n // #endregion libraries\n\n\n // #region external\n import { AppState } from '~services/state/store';\n import actions from '~services/state/actions';\n import {\n DispatchAction,\n } from '~data/interfaces';\n\n import {\n navigateToPluridPlane,\n focusPreviousRoot,\n focusNextRoot,\n focusRootIndex,\n focusRootID,\n useAnimatedTransform,\n } from '~services/logic/animation';\n\n import {\n decodeViewpoint,\n } from '~services/logic/viewpoint';\n\n import {\n generalEngine,\n space,\n } from '~services/engine';\n // #endregion external\n// #endregion imports\n\n\n\n// #region module\nexport interface UsePluridPubSubDispatchers {\n dispatchSetConfiguration: DispatchAction<typeof actions.configuration.setConfiguration>;\n dispatchSetGeneralTheme: DispatchAction<typeof actions.themes.setGeneralTheme>;\n dispatchSetInteractionTheme: DispatchAction<typeof actions.themes.setInteractionTheme>;\n dispatchSetSpaceLocation: DispatchAction<typeof actions.space.setSpaceLocation>;\n dispatchSetAnimatedTransform: DispatchAction<typeof actions.space.setAnimatedTransform>;\n dispatchSetTransformTime: DispatchAction<typeof actions.space.setTransformTime>;\n dispatchRotateXWith: DispatchAction<typeof actions.space.rotateXWith>;\n dispatchRotateX: DispatchAction<typeof actions.space.rotateX>;\n dispatchRotateYWith: DispatchAction<typeof actions.space.rotateYWith>;\n dispatchRotateY: DispatchAction<typeof actions.space.rotateY>;\n dispatchTranslateXWith: DispatchAction<typeof actions.space.translateXWith>;\n dispatchTranslateYWith: DispatchAction<typeof actions.space.translateYWith>;\n dispatchTranslateZWith: DispatchAction<typeof actions.space.translateZWith>;\n dispatchSpaceSetView: DispatchAction<typeof actions.space.spaceSetView>;\n dispatchSetSpaceField: DispatchAction<typeof actions.space.setSpaceField>;\n dispatchSetTree: DispatchAction<typeof actions.space.setTree>;\n}\n\nexport interface UsePluridPubSubParameters {\n /** The initial pubsub from props (or a fresh `PluridPubSub` if absent). */\n pubsub: IPluridPubSub | undefined;\n\n state: AppState;\n stateConfiguration: PluridConfiguration;\n stateTransform: SpaceTransform;\n stateSpaceView: PluridApplicationView;\n stateTree: TreePlane[];\n\n dispatch: ThunkDispatch<{}, {}, AnyAction>;\n treeUpdate: (\n view: PluridApplicationView,\n configuration?: PluridConfiguration,\n layout?: boolean,\n ) => void;\n\n dispatchers: UsePluridPubSubDispatchers;\n}\n\n\n/**\n * The View's pubsub bridge: owns the `pluridPubSub` registry + `registerPubSub`, subscribes every\n * pubsub instance to the ~23 engine topics (configuration / space transforms / view add-remove /\n * navigate / isolate / open-close / root focus), and re-publishes the current transform + config\n * (internal-flagged) so late subscribers sync. The handler bodies + the subscribe/publish lifecycle\n * + the exact effect dependencies are a verbatim move from the View — DO NOT change them: the deps\n * gate the (intentional) re-subscription cadence, and the `internal: true` flag prevents feedback.\n */\nexport const usePluridPubSub = (\n {\n pubsub,\n state,\n stateConfiguration,\n stateTransform,\n stateSpaceView,\n stateTree,\n dispatch,\n treeUpdate,\n dispatchers,\n }: UsePluridPubSubParameters,\n) => {\n const [\n pluridPubSub,\n setPluridPubSub,\n ] = useState<IPluridPubSub[]>(\n pubsub\n ? [pubsub]\n : [new PluridPubSub()]\n );\n\n const {\n dispatchSetConfiguration,\n dispatchSetGeneralTheme,\n dispatchSetInteractionTheme,\n dispatchSetSpaceLocation,\n dispatchSetAnimatedTransform,\n dispatchSetTransformTime,\n dispatchRotateXWith,\n dispatchRotateX,\n dispatchRotateYWith,\n dispatchRotateY,\n dispatchTranslateXWith,\n dispatchTranslateYWith,\n dispatchTranslateZWith,\n dispatchSpaceSetView,\n dispatchSetSpaceField,\n dispatchSetTree,\n } = dispatchers;\n\n // #region handlers pubsub\n const handlePubSubSubscribe = (\n pubsub: IPluridPubSub,\n ) => {\n const subscriptions: PluridPubSubSubscribeMessage[] = [\n {\n topic: PLURID_PUBSUB_TOPIC.CONFIGURATION,\n callback: (data) => {\n if ((data as any).internal) {\n return;\n }\n\n const computedConfiguration = generalEngine.configuration.merge(\n data,\n stateConfiguration,\n );\n\n // Handle themes\n if (typeof computedConfiguration.global.theme === 'object') {\n if (typeof computedConfiguration.global.theme.general === 'string') {\n dispatchSetGeneralTheme((themes as any)[computedConfiguration.global.theme.general]);\n } else {\n dispatchSetGeneralTheme(computedConfiguration.global.theme.general);\n }\n\n if (typeof computedConfiguration.global.theme.interaction === 'string') {\n dispatchSetInteractionTheme((themes as any)[computedConfiguration.global.theme.interaction]);\n } else {\n dispatchSetInteractionTheme(computedConfiguration.global.theme.interaction);\n }\n } else if (typeof computedConfiguration.global.theme === 'string') {\n dispatchSetGeneralTheme((themes as any)[computedConfiguration.global.theme]);\n dispatchSetInteractionTheme((themes as any)[computedConfiguration.global.theme]);\n }\n\n\n dispatchSetConfiguration(computedConfiguration);\n },\n },\n {\n topic: PLURID_PUBSUB_TOPIC.SPACE_TRANSFORM,\n callback: (data) => {\n const {\n value,\n internal,\n } = data;\n\n if (internal) {\n return;\n }\n\n dispatchSetSpaceLocation(value);\n },\n },\n {\n topic: PLURID_PUBSUB_TOPIC.SPACE_ANIMATED_TRANSFORM,\n callback: (data) => {\n const {\n value,\n } = data;\n\n dispatchSetAnimatedTransform(value.active);\n\n if (value.time) {\n dispatchSetTransformTime(value.time);\n } else {\n dispatchSetTransformTime(450);\n }\n },\n },\n\n {\n topic: PLURID_PUBSUB_TOPIC.SPACE_ROTATE_X_WITH,\n callback: (data) => {\n const {\n value,\n } = data;\n dispatchRotateXWith(value);\n },\n },\n {\n topic: PLURID_PUBSUB_TOPIC.SPACE_ROTATE_X_TO,\n callback: (data) => {\n const {\n value,\n } = data;\n dispatchRotateX(value);\n },\n },\n\n {\n topic: PLURID_PUBSUB_TOPIC.SPACE_ROTATE_Y_WITH,\n callback: (data) => {\n const {\n value,\n } = data;\n dispatchRotateYWith(value);\n },\n },\n {\n topic: PLURID_PUBSUB_TOPIC.SPACE_ROTATE_Y_TO,\n callback: (data) => {\n const {\n value,\n } = data;\n dispatchRotateY(value);\n },\n },\n\n {\n topic: PLURID_PUBSUB_TOPIC.SPACE_TRANSLATE_X_WITH,\n callback: (data) => {\n const {\n value,\n } = data;\n dispatchTranslateXWith(value);\n },\n },\n {\n topic: PLURID_PUBSUB_TOPIC.SPACE_TRANSLATE_X_TO,\n callback: (data) => {\n const {\n value,\n } = data;\n // dispatchTranslateXTo(value);\n },\n },\n {\n topic: PLURID_PUBSUB_TOPIC.SPACE_TRANSLATE_Y_WITH,\n callback: (data) => {\n const {\n value,\n } = data;\n dispatchTranslateYWith(value);\n },\n },\n {\n topic: PLURID_PUBSUB_TOPIC.SPACE_TRANSLATE_Y_TO,\n callback: (data) => {\n const {\n value,\n } = data;\n // dispatchTranslateYTo(value);\n },\n },\n {\n topic: PLURID_PUBSUB_TOPIC.SPACE_TRANSLATE_Z_WITH,\n callback: (data) => {\n const {\n value,\n } = data;\n dispatchTranslateZWith(value);\n },\n },\n {\n topic: PLURID_PUBSUB_TOPIC.SPACE_TRANSLATE_Z_TO,\n callback: (data) => {\n const {\n value,\n } = data;\n // dispatchTranslateZTo(value);\n },\n },\n\n {\n topic: PLURID_PUBSUB_TOPIC.VIEW_ADD_PLANE,\n callback: (data) => {\n const {\n plane,\n } = data;\n\n const updatedView = [\n ...stateSpaceView,\n plane,\n ];\n dispatchSpaceSetView(updatedView);\n\n treeUpdate(updatedView, undefined, true);\n },\n },\n {\n topic: PLURID_PUBSUB_TOPIC.VIEW_SET_PLANES,\n callback: (data) => {\n const {\n view,\n } = data;\n\n dispatchSpaceSetView([\n ...view,\n ]);\n\n treeUpdate(view, undefined, true);\n },\n },\n {\n topic: PLURID_PUBSUB_TOPIC.VIEW_REMOVE_PLANE,\n callback: (data) => {\n const {\n plane,\n } = data;\n\n /** TODO\n * a less naive filtering\n */\n const updatedView = stateSpaceView.filter(view => {\n if (typeof view === 'string') {\n // REMOVE the matching plane — keep everything else. The old\n // `view === plane` did the inverse (kept only the plane that was\n // supposed to be removed, dropping all the others).\n return view !== plane;\n }\n\n return true;\n });\n\n dispatchSpaceSetView(updatedView);\n\n treeUpdate(updatedView);\n },\n },\n\n {\n topic: PLURID_PUBSUB_TOPIC.NAVIGATE_TO_PLANE,\n callback: (data) => {\n const {\n id,\n } = data;\n\n const plane = space.tree.logic.getTreePlaneByID(\n stateTree,\n id,\n );\n\n navigateToPluridPlane(\n dispatch,\n plane,\n );\n },\n },\n {\n topic: PLURID_PUBSUB_TOPIC.ISOLATE_PLANE,\n callback: (data) => {\n const {\n id,\n } = data;\n\n if (typeof id !== 'string') {\n return;\n }\n\n dispatchSetSpaceField({\n field: 'isolatePlane',\n value: id,\n });\n },\n },\n {\n topic: PLURID_PUBSUB_TOPIC.OPEN_CLOSED_PLANE,\n callback: () => {\n const treePlane = stateTree.find(plane => plane.planeID === state.space.lastClosedPlane);\n if (treePlane) {\n const forceShow = true;\n const {\n updatedTree,\n } = space.tree.logic.togglePlaneFromTree(\n stateTree,\n treePlane.planeID,\n forceShow,\n );\n\n dispatchSetTree(updatedTree);\n\n dispatchSetSpaceField({\n field: 'lastClosedPlane',\n value: '',\n });\n }\n },\n },\n {\n topic: PLURID_PUBSUB_TOPIC.CLOSE_PLANE,\n callback: (data) => {\n const {\n id,\n } = data;\n\n const treePlane = stateTree.find(plane => plane.planeID === id);\n if (treePlane) {\n const forceShow = false;\n const {\n updatedTree,\n } = space.tree.logic.togglePlaneFromTree(\n stateTree,\n treePlane.planeID,\n forceShow,\n );\n\n // Single dispatch — `togglePlaneFromTree` now returns a NEW\n // immutable tree, so this update is detected on the first dispatch.\n // (Previously a 50 ms re-dispatch HACK forced the update because the\n // old mutating toggle left the tree identity unchanged.)\n dispatchSetTree(updatedTree);\n\n dispatchSetSpaceField({\n field: 'lastClosedPlane',\n value: id,\n });\n }\n },\n },\n {\n topic: PLURID_PUBSUB_TOPIC.PREVIOUS_ROOT,\n callback: () => {\n focusPreviousRoot(\n dispatch,\n state,\n );\n },\n },\n {\n topic: PLURID_PUBSUB_TOPIC.NEXT_ROOT,\n callback: () => {\n focusNextRoot(\n dispatch,\n state,\n );\n },\n },\n {\n topic: PLURID_PUBSUB_TOPIC.NAVIGATE_TO_ROOT,\n callback: (data) => {\n const index = (data as any).index;\n if (typeof index !== 'undefined') {\n focusRootIndex(\n dispatch,\n state,\n index,\n );\n return;\n }\n\n const id = (data as any).id;\n focusRootID(\n dispatch,\n state,\n id,\n );\n },\n },\n {\n // Public seam for a host to manage the inter-plane link graph. `data` is the\n // `PlaneLink` (must carry `id`, `sourcePlaneID`, `targetPlaneID`); the engine renders\n // an edge once both endpoints are present and stays content-agnostic about `kind`.\n topic: PLURID_PUBSUB_TOPIC.ADD_PLANE_LINK,\n callback: (data) => {\n const link = data as any;\n if (!link || !link.id || !link.sourcePlaneID || !link.targetPlaneID) {\n return;\n }\n dispatch(actions.space.addPlaneLink(link));\n },\n },\n {\n topic: PLURID_PUBSUB_TOPIC.REMOVE_PLANE_LINK,\n callback: (data) => {\n const id = (data as any)?.id;\n if (!id) {\n return;\n }\n dispatch(actions.space.removePlaneLink(id));\n },\n },\n {\n topic: PLURID_PUBSUB_TOPIC.SET_PLANE_LINKS,\n callback: (data) => {\n const links = (data as any)?.links;\n if (!Array.isArray(links)) {\n return;\n }\n dispatch(actions.space.setPlaneLinks(links));\n },\n },\n {\n // Public seam for the multi-selection working set. A host wires its own select\n // trigger (e.g. a plane-header click) to these; the built-in shift+click + Escape\n // publish them too.\n topic: PLURID_PUBSUB_TOPIC.SET_SELECTION,\n callback: (data) => {\n const ids = (data as any)?.ids;\n if (!Array.isArray(ids)) {\n return;\n }\n dispatch(actions.space.setSelection(ids));\n },\n },\n {\n topic: PLURID_PUBSUB_TOPIC.TOGGLE_SELECTION,\n callback: (data) => {\n const id = (data as any)?.id;\n if (!id) {\n return;\n }\n dispatch(actions.space.toggleSelection(id));\n },\n },\n {\n topic: PLURID_PUBSUB_TOPIC.CLEAR_SELECTION,\n callback: () => {\n dispatch(actions.space.clearSelection());\n },\n },\n {\n // Programmatic camera control: decode the host-supplied viewpoint and move the camera\n // there. `setSpaceLocation` sets the 6 scalars + recomputes the matrix; `animated`\n // routes it through the transform animation (otherwise it jumps). Invalid encodings\n // are ignored, never corrupting the view.\n topic: PLURID_PUBSUB_TOPIC.SET_VIEWPOINT,\n callback: (data) => {\n const viewpoint = decodeViewpoint((data as any)?.viewpoint);\n if (!viewpoint) {\n return;\n }\n if ((data as any)?.animated) {\n useAnimatedTransform(dispatch);\n }\n dispatchSetSpaceLocation(viewpoint);\n },\n },\n {\n // High-value declarative control. The niche actions stay on the `onReady` api.\n topic: PLURID_PUBSUB_TOPIC.FIT_TO_VIEW,\n callback: () => {\n dispatch(actions.space.spaceFitToView());\n },\n },\n {\n topic: PLURID_PUBSUB_TOPIC.RESET_TRANSFORM,\n callback: () => {\n dispatch(actions.space.spaceResetTransform());\n },\n },\n {\n topic: PLURID_PUBSUB_TOPIC.UNDO,\n callback: () => {\n dispatch(actions.space.undo());\n },\n },\n {\n topic: PLURID_PUBSUB_TOPIC.REDO,\n callback: () => {\n dispatch(actions.space.redo());\n },\n },\n {\n topic: PLURID_PUBSUB_TOPIC.SET_TREE,\n callback: (data) => {\n const tree = (data as any)?.tree;\n if (Array.isArray(tree)) {\n dispatch(actions.space.setTree(tree));\n }\n },\n },\n ];\n\n const indexes: string[] = [];\n\n for (const subscription of subscriptions) {\n const index = pubsub.subscribe(subscription);\n indexes.push(index);\n }\n\n return () => {\n for (const index of indexes) {\n pubsub.unsubscribe(\n index,\n );\n }\n }\n }\n\n const handlePubSubPublish = (\n pubsub: IPluridPubSub,\n ) => {\n const internalTransform = {\n value: {\n ...stateTransform,\n },\n internal: true,\n };\n pubsub.publish({\n topic: PLURID_PUBSUB_TOPIC.SPACE_TRANSFORM,\n data: internalTransform,\n });\n\n pubsub.publish({\n topic: PLURID_PUBSUB_TOPIC.CONFIGURATION,\n data: {\n ...stateConfiguration,\n internal: true,\n } as any,\n });\n }\n\n // `useCallback` + functional update so this keeps a STABLE identity across renders: it is\n // part of the `pluridContext` value, and a fresh function each render would change the context\n // object and force every `useContext(Context)` consumer (every plane) to re-render regardless\n // of `React.memo`.\n const registerPubSub = useCallback((\n pubsub: IPluridPubSub,\n ) => {\n setPluridPubSub(previous => [\n ...previous,\n pubsub,\n ]);\n }, []);\n // #endregion handlers pubsub\n\n\n // #region effects pubsub\n /** PubSub Subscribe */\n useEffect(() => {\n const unsubscribers: (() => void)[] = [];\n\n for (const pubsub of pluridPubSub) {\n const unsubscriber = handlePubSubSubscribe(pubsub);\n\n unsubscribers.push(unsubscriber);\n }\n\n return () => {\n for (const unsubscriber of unsubscribers) {\n unsubscriber();\n }\n }\n }, [\n state.space.lastClosedPlane,\n pluridPubSub.length,\n // Tree ref (the slice is untouched by transform gestures, so it only changes on\n // real tree mutations) instead of an O(n) stringify on every re-render. Config is\n // left stringified on purpose: it may be regenerated by `compute()`, so its\n // reference is not a reliable change signal, and it is a far smaller object.\n stateTree,\n JSON.stringify(stateConfiguration),\n ]);\n\n /** PubSub Publish */\n useEffect(() => {\n for (const pubsub of pluridPubSub) {\n handlePubSubPublish(pubsub);\n }\n }, [\n pluridPubSub.length,\n JSON.stringify(stateConfiguration),\n stateTransform,\n ]);\n // #endregion effects pubsub\n\n\n return {\n pluridPubSub,\n registerPubSub,\n };\n}\n// #endregion module\n\n\n\n// #region exports\nexport default usePluridPubSub;\n// #endregion exports\n","// #region imports\n // #region libraries\n import {\n useEffect,\n useRef,\n } from 'react';\n\n import {\n AnyAction,\n ThunkDispatch,\n } from '@reduxjs/toolkit';\n\n import {\n PLURID_PUBSUB_TOPIC,\n\n TreePlane,\n PlaneLink,\n PluridPubSub as IPluridPubSub,\n PluridCollaborationSnapshot,\n } from '@plurid/plurid-data';\n // #endregion libraries\n\n\n // #region external\n import {\n arrangementSignature,\n } from '~services/logic/arrangement/signature';\n // #endregion external\n// #endregion imports\n\n\n\n// #region module\nexport interface UseCollaborationParameters {\n /** `configuration.space.collaboration` — collaboration is OFF unless the host opts in. */\n enabled: boolean;\n /** The instance pubsub (a host's passed-in one, or the View's). Collaboration is wired on it. */\n pubsub: IPluridPubSub | undefined;\n stateTree: TreePlane[];\n stateLinks: PlaneLink[];\n dispatch: ThunkDispatch<{}, {}, AnyAction>;\n}\n\n\n/**\n * The collaboration seam. Transport-agnostic: the engine PUBLISHES a `collaborationMutation` snapshot\n * whenever the shared arrangement actually changes, and APPLIES inbound `applyRemoteMutation`\n * snapshots from peers. The host owns the wire (websocket / y-* / etc.) and presence — it forwards one\n * topic to the other.\n *\n * State-based: a snapshot is `{ tree, links }`. Remote trees are applied with `setSpaceField` (NOT\n * `setTree`) so they bypass the pinned-location carry in `reconcileNode` — a remote MOVE must win over\n * the local pin. Echo is prevented WITHOUT a transport round-trip: applying a remote snapshot pre-sets\n * `lastSignature`, so the very next outbound pass sees no change and stays quiet (last-writer-wins;\n * true CRDT is the product's choice on top). Remote dispatches carry `meta.remote`, so the history\n * middleware leaves them out of the LOCAL undo stack.\n */\nexport const useCollaboration = (\n {\n enabled,\n pubsub,\n stateTree,\n stateLinks,\n dispatch,\n }: UseCollaborationParameters,\n) => {\n const lastSignature = useRef<string | null>(null);\n const initialized = useRef(false);\n\n // #region outbound\n useEffect(() => {\n if (!enabled || !pubsub) {\n return;\n }\n\n const nextSignature = arrangementSignature(stateTree, stateLinks);\n\n // First pass just establishes the baseline — don't broadcast the initial state (a joining\n // peer resyncs explicitly via the host). Only genuine changes are emitted thereafter.\n if (!initialized.current) {\n initialized.current = true;\n lastSignature.current = nextSignature;\n return;\n }\n\n if (nextSignature === lastSignature.current) {\n return;\n }\n lastSignature.current = nextSignature;\n\n pubsub.publish({\n topic: PLURID_PUBSUB_TOPIC.COLLABORATION_MUTATION,\n data: {\n tree: stateTree,\n links: stateLinks,\n },\n });\n }, [\n enabled,\n pubsub,\n stateTree,\n stateLinks,\n ]);\n // #endregion outbound\n\n\n // #region inbound\n useEffect(() => {\n if (!enabled || !pubsub) {\n return;\n }\n\n const index = pubsub.subscribe({\n topic: PLURID_PUBSUB_TOPIC.APPLY_REMOTE_MUTATION,\n callback: (data: PluridCollaborationSnapshot) => {\n // The seam's contract: a peer sends a COMPLETE arrangement snapshot (the engine's\n // outbound always emits both `tree` + `links`). An incomplete one is ignored rather\n // than guessed at — which also keeps this callback free of a stale `stateTree`/\n // `stateLinks` closure, so the inbound effect never needs to re-subscribe.\n if (!data || !data.tree || !data.links) {\n return;\n }\n\n // Pre-set the baseline to the incoming snapshot so the resulting state change does NOT\n // bounce straight back out as our own mutation. `restoreArrangement` sets tree + links\n // in ONE action (one render) — no intermediate `{tree-new, links-old}` signature can\n // leak an echo — and it bypasses `reconcileNode`, so a remote move overrides the local\n // pin. `meta.remote` keeps it out of LOCAL undo.\n lastSignature.current = arrangementSignature(data.tree, data.links);\n dispatch({\n type: 'space/restoreArrangement',\n payload: { tree: data.tree, links: data.links },\n meta: { remote: true },\n } as AnyAction);\n },\n });\n\n return () => {\n pubsub.unsubscribe(index);\n };\n }, [\n enabled,\n pubsub,\n dispatch,\n ]);\n // #endregion inbound\n}\n// #endregion module\n\n\n\n// #region exports\nexport default useCollaboration;\n// #endregion exports\n","// #region imports\n // #region libraries\n import {\n useEffect,\n } from 'react';\n\n import {\n PLURID_PUBSUB_TOPIC,\n\n PluridPubSub as IPluridPubSub,\n PluridChangeKind,\n } from '@plurid/plurid-data';\n\n import { AppState } from '~services/state/store';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\nexport interface UseEngineEventsParameters {\n /** The instance pubsub (the one `onReady` hands back + the View's topics ride). */\n pubsub: IPluridPubSub | undefined;\n state: AppState;\n}\n\n\n/**\n * The engine→host OBSERVE channel. One effect per watched slice publishes `space.changed`\n * `{ kind, value }` when that slice's reference changes — so a host subscribes ONCE and reacts to\n * selection / tree / links / active-plane / isolate / layout / loading, instead of diffing snapshots\n * off `onReady`'s `store.subscribe`. Camera/viewpoint is intentionally NOT here (it changes per orbit\n * frame) — use the debounced `onViewpointChange` callback / `getViewpoint()` for that. Publishing to a\n * topic with no subscriber is free, so this is always on (the host observes only if it cares).\n */\nexport const useEngineEvents = (\n {\n pubsub,\n state,\n }: UseEngineEventsParameters,\n) => {\n const space = state.space;\n\n const emit = (kind: PluridChangeKind, value: unknown) => {\n if (pubsub) {\n pubsub.publish({\n topic: PLURID_PUBSUB_TOPIC.CHANGED,\n data: { kind, value },\n });\n }\n };\n\n useEffect(() => {\n emit('selection', space.selectedPlaneIDs);\n }, [pubsub, space.selectedPlaneIDs]);\n\n useEffect(() => {\n emit('tree', space.tree);\n }, [pubsub, space.tree]);\n\n useEffect(() => {\n emit('links', space.links);\n }, [pubsub, space.links]);\n\n useEffect(() => {\n emit('activePlane', space.activePlaneID);\n }, [pubsub, space.activePlaneID]);\n\n useEffect(() => {\n emit('isolate', space.isolatePlane);\n }, [pubsub, space.isolatePlane]);\n\n useEffect(() => {\n emit('layoutResolved', space.resolvedLayout);\n }, [pubsub, space.resolvedLayout]);\n\n useEffect(() => {\n emit('loading', space.loading);\n }, [pubsub, space.loading]);\n}\n// #endregion module\n\n\n\n// #region exports\nexport default useEngineEvents;\n// #endregion exports\n","// #region imports\n // #region libraries\n import {\n useEffect,\n useRef,\n } from 'react';\n\n import {\n SpaceTransform,\n } from '@plurid/plurid-data';\n // #endregion libraries\n\n\n // #region external\n import {\n readViewpointFromURL,\n writeViewpointToURL,\n } from '~services/logic/viewpoint';\n // #endregion external\n// #endregion imports\n\n\n\n// #region module\nexport interface UseViewpointURLParameters {\n stateTransform: SpaceTransform;\n /** `setSpaceLocation` — sets the 6 scalars AND recomputes the rendered matrix. */\n dispatchSetSpaceLocation: (payload: SpaceTransform) => void;\n /** `configuration.space.viewpointURLWrite` — reflect the camera into the URL. Default off. */\n write: boolean;\n /** `configuration.space.viewpointURLRestore` — restore the camera from the URL on load. Default off. */\n restore: boolean;\n /** `configuration.space.viewpointURLParam` — the query-param name. Default `v`. */\n param: string;\n /** Debounce (ms) before reflecting a changed transform into the URL. Default 400. */\n debounce?: number;\n}\n\n\n/**\n * Optionally bind the camera viewpoint and the URL's `?<param>=` — both directions are OPT-IN and\n * INDEPENDENT, and the engine touches the URL ONLY when asked:\n * - `restore`: ON MOUNT, if the URL carries a viewpoint, restore it (instant — a deep-link overrides\n * any persisted camera).\n * - `write`: ON TRANSFORM CHANGE, reflect it back via debounced `replaceState` (preserves path/query/\n * hash, no history spam).\n *\n * Default config has BOTH off → no URL pollution. The first write is skipped so the pre-restore\n * default transform never clobbers the `?<param>=` the user arrived with.\n */\nexport const useViewpointURL = (\n {\n stateTransform,\n dispatchSetSpaceLocation,\n write,\n restore,\n param,\n debounce = 400,\n }: UseViewpointURLParameters,\n) => {\n // #region restore once on mount\n const restored = useRef(false);\n useEffect(() => {\n if (!restore || restored.current) {\n return;\n }\n restored.current = true;\n\n const viewpoint = readViewpointFromURL(param);\n if (viewpoint) {\n dispatchSetSpaceLocation(viewpoint);\n }\n }, [restore, param]);\n // #endregion restore once on mount\n\n\n // #region reflect transform → URL\n const writeTimeout = useRef<null | ReturnType<typeof setTimeout>>(null);\n const skipFirstWrite = useRef(true);\n useEffect(() => {\n if (!write) {\n return;\n }\n // Don't write on the first run — let the restore above apply first, so we never overwrite\n // the incoming `?<param>=` with the default transform.\n if (skipFirstWrite.current) {\n skipFirstWrite.current = false;\n return;\n }\n\n if (writeTimeout.current) {\n clearTimeout(writeTimeout.current);\n }\n writeTimeout.current = setTimeout(() => {\n writeViewpointToURL(stateTransform, param);\n }, debounce);\n\n return () => {\n if (writeTimeout.current) {\n clearTimeout(writeTimeout.current);\n }\n };\n }, [write, param, stateTransform, debounce]);\n // #endregion reflect transform → URL\n}\n// #endregion module\n\n\n\n// #region exports\nexport default useViewpointURL;\n// #endregion exports\n","// #region imports\n // #region libraries\n import React, {\n useRef,\n useCallback,\n useMemo,\n useState,\n useEffect,\n } from 'react';\n\n import {\n AnyAction,\n ThunkDispatch,\n } from '@reduxjs/toolkit';\n import { connect } from 'react-redux';\n\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n\n import {\n objects,\n } from '@plurid/plurid-functions';\n\n import {\n /** constants */\n PLURID_ENTITY_VIEW,\n PLURID_DEFAULT_PREVENT_OVERSCROLL_TIMEOUT,\n\n /** enumerations */\n TRANSFORM_MODES,\n TRANSFORM_TOUCHES,\n\n /** interfaces */\n PluridApplication as PluridApplicationProperties,\n PluridConfiguration as PluridAppConfiguration,\n PluridContext,\n PluridView,\n TreePlane,\n PlaneLink,\n SpaceTransform,\n PluridApplicationView,\n } from '@plurid/plurid-data';\n // #endregion libraries\n\n\n // #region external\n import {\n PluridReactComponent,\n } from '~data/interfaces';\n\n import Context from '~services/context';\n\n import {\n handleGlobalShortcuts,\n handleGlobalWheel,\n } from '~services/logic/shortcuts';\n\n import { AppState } from '~services/state/store';\n import selectors from '~services/state/selectors';\n import actions from '~services/state/actions';\n import StateContext from '~services/state/context';\n import {\n DispatchAction,\n DispatchActionWithoutPayload,\n } from '~data/interfaces';\n // import {\n // ViewSize,\n // } from '~services/state/types/space';\n // #endregion external\n\n\n // #region internal\n import {\n StyledView,\n } from './styled';\n\n import PluridViewContainer from './Container';\n\n import useGrabMode from './hooks/useGrabMode';\n import useFlyControls from './hooks/useFlyControls';\n import useViewResize from './hooks/useViewResize';\n import usePointerGestures from './hooks/usePointerGestures';\n import useTreeUpdate from './hooks/useTreeUpdate';\n import usePluridPubSub from './hooks/usePluridPubSub';\n import useCollaboration from './hooks/useCollaboration';\n import useEngineEvents from './hooks/useEngineEvents';\n import useViewpointURL from './hooks/useViewpointURL';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nexport interface PluridViewOwnProperties extends PluridApplicationProperties<PluridReactComponent> {\n}\n\nexport interface PluridViewStateProperties {\n state: AppState;\n stateConfiguration: PluridAppConfiguration;\n // stateDataUniverses: Indexed<PluridInternalStateUniverse>;\n // viewSize: ViewSize;\n stateSpaceLoading: boolean;\n stateResolvedLayout: boolean;\n stateTransform: SpaceTransform;\n // initialTree: TreePlane[];\n stateTree: TreePlane[];\n stateLinks: PlaneLink[];\n // activeUniverseID: string;\n // stateSpaceLocation: any;\n // stateCulledView: any;\n stateSpaceView: PluridApplicationView;\n stateGeneralTheme: Theme;\n}\n\nexport interface PluridViewDispatchProperties {\n dispatch: ThunkDispatch<{}, {}, AnyAction>;\n\n dispatchSetConfiguration: DispatchAction<typeof actions.configuration.setConfiguration>;\n dispatchSetConfigurationMicro: DispatchActionWithoutPayload<typeof actions.configuration.setConfigurationMicro>;\n\n // dispatchSetUniverses: DispatchAction<typeof actions.data.setUniverses>;\n dispatchSetSpaceField: DispatchAction<typeof actions.space.setSpaceField>;\n\n dispatchSetSpaceLoading: DispatchAction<typeof actions.space.setSpaceLoading>;\n dispatchSetAnimatedTransform: DispatchAction<typeof actions.space.setAnimatedTransform>;\n dispatchSetTransformTime: DispatchAction<typeof actions.space.setTransformTime>;\n dispatchSetSpaceLocation: DispatchAction<typeof actions.space.setSpaceLocation>;\n dispatchSetTree: DispatchAction<typeof actions.space.setTree>;\n // dispatchSetSpaceSize: DispatchAction<typeof actions.space.setSpaceSize>;\n\n dispatchSetGeneralTheme: DispatchAction<typeof actions.themes.setGeneralTheme>;\n dispatchSetInteractionTheme: DispatchAction<typeof actions.themes.setInteractionTheme>;\n\n dispatchRotateXWith: DispatchAction<typeof actions.space.rotateXWith>;\n dispatchRotateX: DispatchAction<typeof actions.space.rotateX>;\n dispatchRotateYWith: DispatchAction<typeof actions.space.rotateYWith>;\n dispatchRotateY: DispatchAction<typeof actions.space.rotateY>;\n // dispatchTranslateX: DispatchAction<typeof actions.space.translateX>;\n dispatchTranslateXWith: DispatchAction<typeof actions.space.translateXWith>;\n // dispatchTranslateY: DispatchAction<typeof actions.space.translateY>;\n dispatchTranslateYWith: DispatchAction<typeof actions.space.translateYWith>;\n dispatchTranslateZWith: DispatchAction<typeof actions.space.translateZWith>;\n // dispatchScaleUp: DispatchAction<typeof actions.space.scaleUp>;\n dispatchScaleUpWith: DispatchAction<typeof actions.space.scaleUpWith>;\n // dispatchScaleDown: DispatchAction<typeof actions.space.scaleDown>;\n dispatchScaleDownWith: DispatchAction<typeof actions.space.scaleDownWith>;\n\n // dispatchSetActiveUniverse: DispatchAction<typeof actions.space.setActiveUniverse>;\n\n dispatchSpaceSetViewSize: DispatchAction<typeof actions.space.setViewSize>;\n dispatchSpaceSetView: DispatchAction<typeof actions.space.spaceSetView>;\n // dispatchSpaceSetCulledView: DispatchAction<typeof actions.space.spaceSetCulledView>;\n\n // dispatchDataSetPlaneSources: DispatchAction<typeof actions.data.setPlaneSources>;\n}\n\nexport type PluridViewProperties =\n & PluridViewOwnProperties\n & PluridViewStateProperties\n & PluridViewDispatchProperties;\n\n\nconst PluridView: React.FC<PluridViewProperties> = (\n properties,\n) => {\n // #region properties\n const {\n // #region required\n // #region values\n // view,\n planesRegistrar,\n customPlane,\n planeContext,\n planeContextValue,\n pubsub,\n planeNotFound,\n planeRenderError,\n matchedRoute,\n hostname,\n // #endregion values\n // #endregion required\n\n\n // #region state\n state,\n stateConfiguration,\n // stateSpaceLoading,\n stateResolvedLayout,\n stateTransform,\n stateSpaceView,\n stateTree,\n stateLinks,\n stateGeneralTheme,\n // #endregion state\n\n\n // #region dispatch\n dispatch,\n dispatchSetConfiguration,\n // dispatchSetConfigurationMicro,\n dispatchSetGeneralTheme,\n dispatchSetInteractionTheme,\n\n dispatchSetSpaceField,\n // dispatchSetSpaceLoading,\n dispatchSetSpaceLocation,\n dispatchSetAnimatedTransform,\n dispatchSetTransformTime,\n // dispatchSetInitialTree,\n dispatchSetTree,\n\n dispatchRotateXWith,\n dispatchRotateX,\n dispatchRotateYWith,\n dispatchRotateY,\n dispatchTranslateXWith,\n dispatchTranslateYWith,\n dispatchTranslateZWith,\n dispatchScaleUpWith,\n dispatchScaleDownWith,\n\n dispatchSpaceSetViewSize,\n dispatchSpaceSetView,\n // #endregion dispatch\n } = properties;\n // #endregion properties\n\n\n // #region references\n const viewElement = useRef<HTMLDivElement | null>(null);\n const scrollTimeout = useRef<ReturnType<typeof setTimeout>>();\n // Always-latest snapshot of the full app state for event handlers. Lets the keydown\n // callback read fresh state without being recreated on every transform tick — which\n // previously forced the keydown+wheel listeners to detach/reattach each frame.\n const stateRef = useRef(state);\n stateRef.current = state;\n\n // Native Pointer-Events gesture state (live pointers, pinch, momentum) + the always-latest\n // space-config ref now live inside `usePointerGestures`.\n // #endregion references\n\n\n // #region state\n // Grab/navigate mode (toggle with G; Escape exits) — see `useGrabMode`. `grabModeRef` mirrors\n // `grabMode` every render so the pointer + wheel handlers read the live value.\n const { grabMode, grabModeRef } = useGrabMode();\n const [navDragging, setNavDragging] = useState(false);\n\n const [\n preventOverscroll,\n setPreventOverscroll,\n ] = useState(false);\n // #endregion state\n\n\n // #region handlers\n const handlePreventOverscroll = (\n event: WheelEvent,\n ) => {\n if (\n event.shiftKey\n || event.altKey\n || event.metaKey\n || event.ctrlKey\n ) {\n setPreventOverscroll(true);\n }\n\n clearTimeout(scrollTimeout.current);\n scrollTimeout.current = setTimeout(() => {\n setPreventOverscroll(false);\n }, PLURID_DEFAULT_PREVENT_OVERSCROLL_TIMEOUT);\n }\n\n // Layout computation (treeUpdate + treeUpdateCallback + resolveLayout) lives in `useTreeUpdate`.\n const {\n treeUpdate,\n treeUpdateCallback,\n resolveLayout,\n } = useTreeUpdate({\n view: stateSpaceView,\n configuration: stateConfiguration,\n tree: stateTree,\n hostname,\n planesRegistrar,\n dispatchSetTree,\n });\n\n // The pubsub bridge — registry + `registerPubSub` + the ~23 topic subscriptions + the\n // transform/config re-publish — lives in `usePluridPubSub`. Placed AFTER `useTreeUpdate`\n // (it needs `treeUpdate`) and BEFORE `shortcutsCallback`/`pluridContext` (they read\n // `pluridPubSub[0]` + `registerPubSub`).\n const {\n pluridPubSub,\n registerPubSub,\n } = usePluridPubSub({\n pubsub,\n state,\n stateConfiguration,\n stateTransform,\n stateSpaceView,\n stateTree,\n dispatch,\n treeUpdate,\n dispatchers: {\n dispatchSetConfiguration,\n dispatchSetGeneralTheme,\n dispatchSetInteractionTheme,\n dispatchSetSpaceLocation,\n dispatchSetAnimatedTransform,\n dispatchSetTransformTime,\n dispatchRotateXWith,\n dispatchRotateX,\n dispatchRotateYWith,\n dispatchRotateY,\n dispatchTranslateXWith,\n dispatchTranslateYWith,\n dispatchTranslateZWith,\n dispatchSpaceSetView,\n dispatchSetSpaceField,\n dispatchSetTree,\n },\n });\n\n // Collaboration seam: emit/apply shared-arrangement snapshots on the instance pubsub (the host\n // bridges it to a transport). Same pubsub the bridge subscribes its topics on.\n useCollaboration({\n enabled: stateConfiguration.space.collaboration === true,\n pubsub: pluridPubSub[0],\n stateTree,\n stateLinks,\n dispatch,\n });\n\n // Engine→host OBSERVE channel: publish `space.changed` { kind, value } whenever a watched slice\n // changes. Always on (publishing to a no-subscriber topic is free); the host subscribes only if it\n // cares. Same instance pubsub as the control bridge + collaboration.\n useEngineEvents({\n pubsub: pluridPubSub[0],\n state,\n });\n\n // Optionally bind the camera viewpoint with the URL's `?<param>=` — BOTH directions opt-in\n // (default off, no URL pollution), param-name configurable.\n useViewpointURL({\n stateTransform,\n dispatchSetSpaceLocation,\n write: stateConfiguration.space.viewpointURLWrite === true,\n restore: stateConfiguration.space.viewpointURLRestore === true,\n param: stateConfiguration.space.viewpointURLParam || 'v',\n debounce: stateConfiguration.space.viewpointURLDebounce,\n });\n // #endregion handlers\n\n\n // #region callbacks\n const shortcutsCallback = useCallback((event: KeyboardEvent) => {\n const {\n transformLocks,\n } = stateConfiguration.space;\n\n handleGlobalShortcuts(\n dispatch,\n stateRef.current,\n pluridPubSub[0],\n event,\n stateConfiguration.space.firstPerson,\n transformLocks,\n stateConfiguration.space.shortcuts,\n );\n }, [\n pluridPubSub,\n stateConfiguration.space.firstPerson,\n stateConfiguration.space.transformLocks,\n stateConfiguration.space.shortcuts,\n dispatch,\n ]);\n\n const wheelCallback = useCallback((event: WheelEvent) => {\n handlePreventOverscroll(event);\n\n const {\n transformMode,\n transformLocks,\n } = stateConfiguration.space;\n\n const transformModes = {\n rotation: transformMode === TRANSFORM_MODES.ROTATION,\n translation: transformMode === TRANSFORM_MODES.TRANSLATION,\n scale: transformMode === TRANSFORM_MODES.SCALE,\n };\n\n handleGlobalWheel(\n dispatch,\n event,\n transformModes,\n transformLocks,\n grabModeRef.current,\n stateConfiguration.space.gestures?.buttonMap?.wheel === 'disabled',\n );\n }, [\n dispatch,\n stateConfiguration.space.transformMode,\n stateConfiguration.space.transformLocks,\n stateConfiguration.space.gestures,\n ]);\n\n // #endregion callbacks\n\n\n // #region handlers\n // #region handlers touch\n // Touch/pointer gestures are handled by native Pointer Events in the\n // '#region effects pointer' effect below (replaced HammerJS).\n // #endregion handlers touch\n // #endregion handlers\n\n\n // #region effects\n // #region effects listeners\n /** Keydown, Wheel Listeners */\n useEffect(() => {\n if (viewElement.current) {\n viewElement.current.addEventListener(\n 'keydown',\n shortcutsCallback,\n {\n passive: false,\n },\n );\n viewElement.current.addEventListener(\n 'wheel',\n wheelCallback,\n {\n passive: false,\n },\n );\n }\n\n return () => {\n if (viewElement.current) {\n viewElement.current.removeEventListener(\n 'keydown',\n shortcutsCallback,\n );\n viewElement.current.removeEventListener(\n 'wheel',\n wheelCallback,\n );\n }\n }\n }, [\n shortcutsCallback,\n wheelCallback,\n viewElement.current,\n ]);\n\n // Window-resize handling (debounced view-size measure + tree recompute) lives in\n // `useViewResize`.\n useViewResize({\n viewElement,\n dispatchSpaceSetViewSize,\n treeUpdateCallback,\n });\n // #endregion effects listeners\n\n\n // #region effects pointer\n // Native Pointer-Events gestures (orbit/pan/scale, two-pointer pinch, momentum) live in\n // `usePointerGestures`.\n usePointerGestures({\n viewElement,\n spaceConfiguration: stateConfiguration.space,\n grabModeRef,\n stateRef,\n dispatch,\n setNavDragging,\n dispatchRotateXWith,\n dispatchRotateYWith,\n dispatchTranslateXWith,\n dispatchTranslateYWith,\n dispatchTranslateZWith,\n dispatchScaleUpWith,\n dispatchScaleDownWith,\n });\n // #endregion effects pointer\n\n\n // #region effects fly\n // First-person \"fly\" controls (held-key movement + pointer-lock mouse-look) live in\n // `useFlyControls`.\n useFlyControls({\n viewElement,\n firstPerson: stateConfiguration.space.firstPerson,\n flySpeed: stateConfiguration.space.gestures?.flySpeed,\n flyLook: stateConfiguration.space.gestures?.flyLookSensitivity,\n dispatch,\n });\n // #endregion effects fly\n\n\n // #region effects grab-mode\n // Grab/navigate mode (G toggle / Escape exit) now lives in `useGrabMode`.\n // #endregion effects grab-mode\n\n\n // #region effects tree update\n useEffect(() => {\n treeUpdateCallback();\n }, [\n // stateSpaceView,\n ]);\n // #endregion effects tree update\n\n\n // #region layout\n useEffect(() => {\n if (!stateResolvedLayout) {\n resolveLayout();\n dispatchSetSpaceField({\n field: 'resolvedLayout',\n value: true,\n });\n }\n }, [\n stateResolvedLayout,\n ]);\n // #endregion layout\n // #endregion effects\n\n\n // #region render\n // Memoized so the `Context.Provider` value below is referentially stable across View's many\n // re-renders (it re-renders on every transform tick / spawn dispatch). A fresh context object\n // each render would re-render EVERY `useContext(Context)` consumer — i.e. every plane — no\n // matter how well `React.memo` + structural sharing gate their props. Stable here ⇒ planes\n // only re-render when their own data actually changes.\n const pluridContext = useMemo<PluridContext<PluridReactComponent>>(() => ({\n planesRegistrar,\n planeContext,\n planeContextValue,\n customPlane,\n planeNotFound,\n planeRenderError,\n matchedRoute,\n hostname,\n\n defaultPubSub: pluridPubSub[0],\n registerPubSub,\n }), [\n planesRegistrar,\n planeContext,\n planeContextValue,\n customPlane,\n planeNotFound,\n planeRenderError,\n matchedRoute,\n hostname,\n pluridPubSub,\n registerPubSub,\n ]);\n\n return (\n <StyledView\n ref={viewElement}\n tabIndex={0}\n theme={stateGeneralTheme}\n transformMode={stateConfiguration.space.transformMode}\n grabNavigation={grabMode}\n navDragging={navDragging}\n firstPerson={stateConfiguration.space.firstPerson}\n preventOverscroll={preventOverscroll}\n data-plurid-entity={PLURID_ENTITY_VIEW}\n >\n <Context.Provider\n value={pluridContext}\n >\n {stateSpaceView.length !== 0 ? (\n <PluridViewContainer\n renderToolbar={properties.renderToolbar as any}\n renderViewcube={properties.renderViewcube as any}\n renderMinimap={properties.renderMinimap as any}\n renderShortcuts={properties.renderShortcuts as any}\n />\n ) : (\n <></>\n )}\n </Context.Provider>\n </StyledView>\n );\n // #endregion render\n}\n\n\nconst mapStateToProperties = (\n state: AppState,\n): PluridViewStateProperties => ({\n state,\n stateConfiguration: selectors.configuration.getConfiguration(state),\n // stateDataUniverses: selectors.data.getUniverses(state),\n // viewSize: selectors.space.getViewSize(state),\n stateTransform: selectors.space.getTransform(state),\n stateResolvedLayout: selectors.space.getResolvedLayout(state),\n stateTree: selectors.space.getTree(state),\n stateLinks: selectors.space.getPlaneLinks(state),\n // activeUniverseID: selectors.space.getActiveUniverseID(state),\n stateSpaceLoading: selectors.space.getLoading(state),\n // stateSpaceLocation: selectors.space.getTransform(state),\n // stateCulledView: selectors.space.getCulledView(state),\n stateSpaceView: selectors.space.getView(state),\n stateGeneralTheme: selectors.themes.getGeneralTheme(state),\n});\n\n\nconst mapDispatchToProperties = (\n dispatch: ThunkDispatch<{}, {}, AnyAction>,\n): PluridViewDispatchProperties => ({\n dispatch,\n\n dispatchSetConfiguration: (payload) => dispatch(\n actions.configuration.setConfiguration(payload),\n ),\n dispatchSetConfigurationMicro: () => dispatch(\n actions.configuration.setConfigurationMicro(),\n ),\n\n // dispatchSetUniverses: (universes: any) => dispatch(\n // actions.data.setUniverses(universes),\n // ),\n dispatchSetSpaceField: (payload) => dispatch(\n actions.space.setSpaceField(payload),\n ),\n dispatchSpaceSetViewSize: (payload) => dispatch(\n actions.space.setViewSize(payload),\n ),\n\n dispatchSetSpaceLoading: (payload) => dispatch(\n actions.space.setSpaceLoading(payload),\n ),\n dispatchSetAnimatedTransform: (payload) => dispatch(\n actions.space.setAnimatedTransform(payload),\n ),\n dispatchSetTransformTime: (payload) => dispatch(\n actions.space.setTransformTime(payload),\n ),\n dispatchSetSpaceLocation: (payload) => dispatch(\n actions.space.setSpaceLocation(payload),\n ),\n dispatchSetTree: (payload) => dispatch(\n actions.space.setTree(payload),\n ),\n // dispatchSetSpaceSize: (payload) => dispatch(\n // actions.space.setSpaceSize(payload)\n // ),\n\n dispatchSetGeneralTheme: (payload) => dispatch(\n actions.themes.setGeneralTheme(payload),\n ),\n dispatchSetInteractionTheme: (payload) => dispatch(\n actions.themes.setInteractionTheme(payload),\n ),\n\n dispatchRotateX: (payload) => dispatch(\n actions.space.rotateX(payload),\n ),\n dispatchRotateXWith: (payload) => dispatch(\n actions.space.rotateXWith(payload),\n ),\n dispatchRotateY: (payload) => dispatch(\n actions.space.rotateY(payload),\n ),\n dispatchRotateYWith: (payload) => dispatch(\n actions.space.rotateYWith(payload),\n ),\n // dispatchTranslateX: (payload) => dispatch(\n // actions.space.translateX(payload),\n // ),\n dispatchTranslateXWith: (payload) => dispatch(\n actions.space.translateXWith(payload),\n ),\n // dispatchTranslateY: (payload) => dispatch(\n // actions.space.translateY(payload),\n // ),\n dispatchTranslateYWith: (payload) => dispatch(\n actions.space.translateYWith(payload),\n ),\n dispatchTranslateZWith: (payload) => dispatch(\n actions.space.translateZWith(payload),\n ),\n // dispatchScaleUp: (payload) => dispatch(\n // actions.space.scaleUp(payload),\n // ),\n dispatchScaleUpWith: (payload) => dispatch(\n actions.space.scaleUpWith(payload),\n ),\n // dispatchScaleDown: (payload) => dispatch(\n // actions.space.scaleDown(payload),\n // ),\n dispatchScaleDownWith: (payload) => dispatch(\n actions.space.scaleDownWith(payload),\n ),\n\n // dispatchSetActiveUniverse: (activeUniverse: string) => dispatch(\n // actions.space.setActiveUniverse(activeUniverse),\n // ),\n\n dispatchSpaceSetView: (payload) => dispatch(\n actions.space.spaceSetView(payload),\n ),\n // dispatchSpaceSetCulledView: (\n // culledView,\n // ) => dispatch(\n // actions.space.spaceSetCulledView(culledView),\n // ),\n\n // dispatchDataSetPlaneSources: (\n // planeSources,\n // ) => dispatch(\n // actions.data.setPlaneSources(planeSources),\n // ),\n});\n\n\nconst ConnectedPluridView = connect(\n mapStateToProperties,\n mapDispatchToProperties,\n null,\n {\n context: StateContext,\n },\n)(PluridView);\n// #endregion module\n\n\n\n// #region exports\nexport default ConnectedPluridView;\n// #endregion exports\n","// #region imports\n // #region libraries\n import React, {\n // useContext,\n // useState,\n // useEffect,\n Component,\n } from 'react';\n\n import {\n Store,\n Unsubscribe as ReduxUnsubscribe,\n } from '@reduxjs/toolkit';\n\n import {\n Provider as ReduxProvider,\n } from 'react-redux';\n\n import {\n StyleSheetManager,\n } from 'styled-components';\n\n import isPropValid from '@emotion/is-prop-valid';\n\n\n import {\n PluridApplication as PluridApplicationProperties,\n PluridState,\n PluridApi,\n PluridPubSub as IPluridPubSub,\n PluridPlanesRegistrar as IPluridPlanesRegistrar,\n } from '@plurid/plurid-data';\n\n import PluridPubSub from '@plurid/plurid-pubsub';\n // #endregion libraries\n\n\n // #region external\n import {\n PluridReactComponent,\n } from '~data/interfaces';\n\n // import PluridProviderContext from '~containers/Provider/context';\n\n import store from '~services/state/store';\n import StateContext from '~services/state/context';\n\n import {\n encodeViewpoint,\n } from '~services/logic/viewpoint';\n\n // import {\n // loadStateFromContext,\n // } from '~services/logic/state';\n\n import {\n state,\n registerPlanes,\n PluridPlanesRegistrar,\n } from '~services/engine';\n // #endregion external\n\n\n // #region internal\n import PluridView from './View';\n // #endregion internal\n// #endregion imports\n\n\n// #region module\n\n\nclass PluridApplication extends Component<\n PluridApplicationProperties<PluridReactComponent>\n // any,\n // any\n> {\n // static contextType = PluridProviderContext;\n\n // public context!: React.ContextType<typeof PluridProviderContext>;\n\n private store: Store<PluridState>;\n // Own the instance pubsub (use the host's if passed, else create one) so it's the SAME bus the\n // View subscribes its topics on AND the one handed to the host via `onReady(api)`.\n private pubsub: IPluridPubSub;\n private storeUnubscriber: ReduxUnsubscribe | undefined;\n private persistTimeout: ReturnType<typeof setTimeout> | undefined;\n private persistDirty = false;\n private flushPersistImmediate: (() => void) | undefined;\n private onVisibilityChange: (() => void) | undefined;\n private viewpointUnsubscriber: ReduxUnsubscribe | undefined;\n private viewpointTimeout: ReturnType<typeof setTimeout> | undefined;\n private lastViewpoint: string | undefined;\n // Resolved `space.timings` debounce windows (ms), captured once from the merged configuration.\n private persistDebounceMs = 300;\n private viewpointDebounceMs = 250;\n private storeID: string;\n private planesRegistrar: IPluridPlanesRegistrar<PluridReactComponent> | undefined;\n\n\n constructor(\n properties: PluridApplicationProperties<PluridReactComponent>,\n // context: React.ContextType<typeof PluridProviderContext>,\n ) {\n super(properties);\n\n this.storeID = properties.id || 'default';\n this.pubsub = properties.pubsub || new PluridPubSub();\n // this.context = context;\n\n this.prepare();\n\n // Build the preloaded state once, then read the resolved `space.undo` off the merged\n // configuration to decide whether the store includes the history middleware. Default true;\n // an explicit `space.undo: false` drops it (no per-action signature cost / snapshot memory).\n const preloadedState = this.computeStore();\n const resolvedSpace = (preloadedState as any)?.configuration?.space;\n const historyEnabled = resolvedSpace?.undo !== false;\n this.store = store(preloadedState, { history: historyEnabled });\n\n // Resolve the tunable debounce windows once (default 300 / 250 if unset).\n const timings = resolvedSpace?.timings;\n if (typeof timings?.persistDebounce === 'number') {\n this.persistDebounceMs = timings.persistDebounce;\n }\n if (typeof timings?.viewpointChangeDebounce === 'number') {\n this.viewpointDebounceMs = timings.viewpointChangeDebounce;\n }\n\n this.subscribeStore();\n this.subscribeViewpoint();\n }\n\n\n public componentDidMount() {\n // Restore the product's persisted content AFTER the plane subtree has mounted (so the\n // consumer's components exist to receive it). Counterpart to the `onPersistContent` save\n // in `persistState`; opt-in + gated on `useLocalStorage`, same as the space snapshot.\n if (this.props.useLocalStorage && this.props.onRestoreContent) {\n const content = state.local.loadContent(this.storeID, this.props.storageAdapter);\n if (content !== undefined) {\n this.props.onRestoreContent(content);\n }\n }\n\n // The master escape hatch. Fired here (post-mount) so the View has already subscribed the\n // pubsub control/emit topics — a host can publish on `api.pubsub` immediately. The `store`\n // is structurally a `PluridStore` (getState/dispatch/subscribe).\n if (this.props.onReady) {\n this.props.onReady({\n store: this.store,\n pubsub: this.pubsub,\n getSnapshot: () => this.store.getState(),\n getViewpoint: () => {\n const space = this.store.getState().space;\n return encodeViewpoint({\n rotationX: space.rotationX,\n rotationY: space.rotationY,\n translationX: space.translationX,\n translationY: space.translationY,\n translationZ: space.translationZ,\n scale: space.scale,\n });\n },\n });\n }\n }\n\n public componentDidUpdate() {\n const updatedStore = this.computeStore();\n\n this.store.dispatch({\n type: 'SET_STATE',\n payload: updatedStore,\n });\n }\n\n public componentWillUnmount() {\n if (this.storeUnubscriber) {\n this.storeUnubscriber();\n }\n if (this.viewpointUnsubscriber) {\n this.viewpointUnsubscriber();\n }\n if (this.viewpointTimeout) {\n clearTimeout(this.viewpointTimeout);\n this.viewpointTimeout = undefined;\n }\n if (typeof window !== 'undefined') {\n if (this.flushPersistImmediate) {\n window.removeEventListener('pagehide', this.flushPersistImmediate);\n }\n if (this.onVisibilityChange && typeof document !== 'undefined') {\n document.removeEventListener('visibilitychange', this.onVisibilityChange);\n }\n }\n // Flush any pending debounced persistence so the latest state isn't lost.\n if (this.persistTimeout) {\n clearTimeout(this.persistTimeout);\n this.persistTimeout = undefined;\n }\n if (this.persistDirty) {\n this.persistState();\n }\n }\n\n public render() {\n return (\n // styled-components v6 no longer auto-filters props, so engine-internal props\n // (transformMode, show, active, face, …) would leak onto DOM nodes. Forward\n // only valid HTML/SVG attributes; the styled templates still receive them all.\n <StyleSheetManager shouldForwardProp={isPropValid}>\n <ReduxProvider\n store={this.store}\n context={StateContext}\n >\n <PluridView\n {...this.props}\n planesRegistrar={this.planesRegistrar}\n pubsub={this.pubsub}\n />\n </ReduxProvider>\n </StyleSheetManager>\n );\n }\n\n\n private prepare() {\n this.planesRegistrar = typeof window === 'undefined' && !this.props.planesRegistrar\n ? new PluridPlanesRegistrar(\n this.props.planes,\n this.props.hostname,\n ) : this.props.planesRegistrar;\n }\n\n private computeStore() {\n const {\n // id,\n view,\n planes,\n configuration,\n precomputedState,\n useLocalStorage,\n hostname,\n space,\n } = this.props;\n\n registerPlanes(\n planes,\n this.planesRegistrar,\n hostname,\n );\n\n const currentState = this.store\n ? this.store.getState()\n : undefined;\n\n const localState = state.local.load(\n this.storeID,\n useLocalStorage,\n this.props.storageAdapter,\n );\n\n const contextState = undefined;\n // const contextState = loadStateFromContext(\n // this.context,\n // space,\n // );\n // console.log({\n // currentState,\n // localState,\n // precomputedState,\n // contextState,\n // });\n\n const store = state.compute(\n view,\n configuration,\n this.planesRegistrar,\n currentState,\n localState,\n precomputedState,\n contextState,\n hostname,\n );\n // console.log({\n // store: store.space,\n // });\n\n return store;\n }\n\n private subscribeStore() {\n if (!this.store) {\n return;\n }\n\n if (typeof localStorage === 'undefined') {\n return;\n }\n\n if (!this.props.useLocalStorage) {\n return;\n }\n\n // Persist on a debounce: a single orbit/zoom drag emits a store change per frame,\n // and serializing the entire state to localStorage on every frame is a real jank\n // source. Coalesce to one write ~300ms after the state settles; flush on unmount.\n this.storeUnubscriber = this.store.subscribe(() => {\n this.persistDirty = true;\n if (this.persistTimeout) {\n clearTimeout(this.persistTimeout);\n }\n this.persistTimeout = setTimeout(() => {\n this.persistState();\n }, this.persistDebounceMs);\n });\n\n // Flush the pending debounced write SYNCHRONOUSLY when the page is hidden or torn down.\n // A full reload / navigation does NOT run React's `componentWillUnmount`, so a change made\n // within the last debounce window (e.g. a plane just spawned by a link click) would be lost\n // on reload. `pagehide` covers reload/navigation/close (and is bfcache- and mobile-safe\n // where `beforeunload`/`unload` are not); `visibilitychange: hidden` covers tab switches.\n if (typeof window !== 'undefined') {\n this.flushPersistImmediate = () => {\n if (this.persistTimeout) {\n clearTimeout(this.persistTimeout);\n this.persistTimeout = undefined;\n }\n if (this.persistDirty) {\n this.persistState();\n }\n };\n this.onVisibilityChange = () => {\n if (typeof document !== 'undefined' && document.visibilityState === 'hidden') {\n this.flushPersistImmediate?.();\n }\n };\n window.addEventListener('pagehide', this.flushPersistImmediate);\n if (typeof document !== 'undefined') {\n document.addEventListener('visibilitychange', this.onVisibilityChange);\n }\n }\n }\n\n /**\n * Programmatic GET seam: push the ENCODED viewpoint to `onViewpointChange` whenever the camera\n * settles (debounced ~250ms — the camera changes per frame during an orbit). Independent of the\n * URL config + `useLocalStorage`, so a host can drive its OWN share links / storage / sync. Only\n * wired when the host actually supplies the callback.\n */\n private subscribeViewpoint() {\n if (!this.store || !this.props.onViewpointChange) {\n return;\n }\n\n this.viewpointUnsubscriber = this.store.subscribe(() => {\n if (this.viewpointTimeout) {\n clearTimeout(this.viewpointTimeout);\n }\n this.viewpointTimeout = setTimeout(() => {\n if (!this.store || !this.props.onViewpointChange) {\n return;\n }\n const space = this.store.getState().space;\n const viewpoint = encodeViewpoint({\n rotationX: space.rotationX,\n rotationY: space.rotationY,\n translationX: space.translationX,\n translationY: space.translationY,\n translationZ: space.translationZ,\n scale: space.scale,\n });\n // Fire only when the viewpoint actually changed — store updates fire for unrelated\n // state too (a spawn, a selection), which don't move the camera.\n if (viewpoint !== this.lastViewpoint) {\n this.lastViewpoint = viewpoint;\n this.props.onViewpointChange(viewpoint);\n }\n }, this.viewpointDebounceMs);\n });\n }\n\n private persistState() {\n if (!this.store) {\n return;\n }\n // Persist a focused, versioned snapshot (just the durable space fields) via the\n // engine's local-state primitive — not the whole Redux state. See\n // plurid-engine `modules/state/local`.\n state.local.save(\n this.storeID,\n this.store.getState(),\n this.props.storageAdapter,\n );\n\n // Opt-in CONTENT seam: ride the same debounce + pagehide flush to persist the product's\n // own content (e.g. note bodies). The engine stores the returned value opaquely.\n if (this.props.onPersistContent) {\n state.local.saveContent(\n this.storeID,\n this.props.onPersistContent(),\n this.props.storageAdapter,\n );\n }\n\n this.persistDirty = false;\n }\n}\n// #endregion module\n\n\n// #region exports\nexport default PluridApplication;\n// #endregion exports\n","// #region imports\n // #region libraries\n import styled from 'styled-components';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\nexport interface IStyledSpaces {\n alignment: any;\n snapType: any;\n}\n\nexport const StyledSpaces = styled.div<IStyledSpaces>`\n scroll-snap-type: ${(properties: IStyledSpaces) => {\n const {\n alignment,\n snapType,\n } = properties;\n\n if (snapType === 'none') {\n return 'none';\n }\n\n return alignment + ' ' + snapType;\n }};\n\n flex-direction: ${(properties: IStyledSpaces) => {\n const {\n alignment,\n } = properties;\n\n if (alignment === 'x') {\n return 'row';\n }\n\n return 'column';\n }};\n\n outline: none;\n overflow: auto;\n /* display: flex; */\n height: 100vh;\n height: -webkit-fill-available;\n width: 100vw;\n`;\n// #endregion module\n","// #region imports\n // #region libraries\n import React from 'react';\n\n import {\n /** constants */\n PLURID_ENTITY_MULTISPACE,\n PLURID_ROUTE_DEFAULT_PATH_VALUE,\n PLURID_ROUTE_DEFAULT_PATH,\n PLURID_ROUTE_DEFAULT_SPACE_VALUE,\n PLURID_ROUTE_DEFAULT_SPACE,\n PLURID_ROUTE_DEFAULT_UNIVERSE_VALUE,\n PLURID_ROUTE_DEFAULT_UNIVERSE,\n PLURID_ROUTE_DEFAULT_CLUSTER_VALUE,\n PLURID_ROUTE_DEFAULT_CLUSTER,\n PLURID_ROUTE_SEPARATOR,\n\n /** interfaces */\n PluridRoute,\n PluridRoutePlane,\n PluridPlane,\n PluridRouterStatic,\n PluridRouteComponentProperty,\n } from '@plurid/plurid-data';\n\n import PluridPubSub from '@plurid/plurid-pubsub';\n\n import {\n uuid,\n } from '@plurid/plurid-functions';\n // #endregion libraries\n\n\n // #region external\n import {\n PluridReactComponent,\n PluridReactPlane,\n PluridRouteMatch,\n } from '~data/interfaces';\n\n import PluridApplication from '~containers/Application/index';\n\n import {\n isReactRenderable,\n } from '~services/utilities/react';\n\n import {\n routing,\n planes,\n utilities,\n\n PluridPlanesRegistrar,\n resolvePluridRoutePlaneData,\n } from '~services/engine';\n // #endregion external\n\n\n // #region internal\n import {\n StyledSpaces,\n } from './styled';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nexport interface GetComponentFromRouteData {\n matchedRoute: routing.MatcherResponse<PluridReactComponent>;\n protocol: string;\n host: string;\n staticRender?: boolean;\n}\n\nexport const getComponentFromRoute = (\n data: GetComponentFromRouteData,\n) => {\n const {\n matchedRoute,\n protocol,\n host,\n staticRender,\n } = data;\n\n const {\n path,\n parameters,\n query,\n } = matchedRoute;\n\n const pluridProperty = {\n path: {\n parameters,\n query,\n },\n };\n\n const {\n exterior,\n planes,\n spaces,\n slotted,\n } = path;\n\n // console.log('path', path);\n\n const multispaceAlignment = path.multispace?.alignment || 'y';\n const multispaceSnapType = path.multispace?.snapType || 'mandatory';\n\n let PluridExterior: React.FC<any> = () => (<></>);\n if (exterior) {\n if (typeof exterior == 'function') {\n PluridExterior = exterior;\n }\n }\n\n let PluridSpaces: React.FC<any> = () => (<></>);\n const spacesArray: any[] = [];\n if (spaces) {\n for (const space of spaces) {\n const planes: PluridPlane<PluridReactComponent>[] = [];\n const view = [];\n\n if (space.planes) {\n for (const plane of space.planes) {\n const planeData = resolvePluridRoutePlaneData(plane);\n\n const {\n component,\n } = planeData;\n\n const pathName = path.value === PLURID_ROUTE_DEFAULT_PATH_VALUE\n ? PLURID_ROUTE_DEFAULT_PATH\n : utilities.cleanPathElement(path.value);\n const spaceName = space.value === PLURID_ROUTE_DEFAULT_SPACE_VALUE\n ? PLURID_ROUTE_DEFAULT_SPACE\n : utilities.cleanPathElement(space.value);\n const universeName = PLURID_ROUTE_DEFAULT_UNIVERSE;\n const clusterName = PLURID_ROUTE_DEFAULT_CLUSTER;\n const planeName = utilities.cleanPathElement(planeData.value);\n\n const pathDivisions = [\n protocol,\n host,\n pathName,\n spaceName,\n universeName,\n clusterName,\n planeName,\n ];\n const fullPath = pathDivisions.join(PLURID_ROUTE_SEPARATOR);\n\n const pluridPlane: PluridPlane<PluridReactComponent> = {\n component,\n route: fullPath,\n };\n\n planes.push(pluridPlane);\n view.push(fullPath);\n\n // if (component.kind === 'react') {\n // const pluridPlane: PluridPlane<PluridReactComponent> = {\n // component: {\n // kind: 'react',\n // element: component.element,\n // properties: {\n // plurid: pluridProperty,\n // },\n // },\n // route: fullPath,\n // };\n\n // planes.push(pluridPlane);\n // view.push(fullPath);\n // }\n }\n }\n\n if (space.universes) {\n for (const universe of space.universes) {\n if (universe.planes) {\n for (const plane of universe.planes) {\n const planeData = resolvePluridRoutePlaneData(plane);\n\n const {\n component,\n } = planeData;\n\n const pathName = path.value === PLURID_ROUTE_DEFAULT_PATH_VALUE\n ? PLURID_ROUTE_DEFAULT_PATH\n : utilities.cleanPathElement(path.value);\n const spaceName = space.value === PLURID_ROUTE_DEFAULT_SPACE_VALUE\n ? PLURID_ROUTE_DEFAULT_SPACE\n : utilities.cleanPathElement(space.value);\n const universeName = universe.value === PLURID_ROUTE_DEFAULT_UNIVERSE_VALUE\n ? PLURID_ROUTE_DEFAULT_UNIVERSE\n : utilities.cleanPathElement(universe.value);\n const clusterName = PLURID_ROUTE_DEFAULT_CLUSTER;\n const planeName = utilities.cleanPathElement(planeData.value);\n\n const pathDivisions = [\n protocol,\n host,\n pathName,\n spaceName,\n universeName,\n clusterName,\n planeName,\n ];\n const fullPath = pathDivisions.join(PLURID_ROUTE_SEPARATOR);\n\n // if (component.kind === 'react') {\n // const pluridPlane: PluridPlane = {\n // component: {\n // kind: 'react',\n // element: component.element,\n // properties: {\n // plurid: pluridProperty,\n // },\n // },\n // route: fullPath,\n // };\n\n // planes.push(pluridPlane);\n // view.push(fullPath);\n // }\n }\n }\n }\n }\n\n // console.log('spaces path.value', path.value);\n // console.log('getComponentFromRoute spaces view', view);\n const pluridPlanesRegistrar = new PluridPlanesRegistrar<PluridReactComponent>(\n [],\n 'localhost:63000',\n );\n\n const App = (\n <PluridApplication\n key={uuid.generate()}\n id={path.value}\n planes={planes}\n view={view}\n static={staticRender}\n configuration={space.configuration}\n planesRegistrar={pluridPlanesRegistrar}\n hostname={host}\n />\n );\n spacesArray.push(App);\n }\n }\n\n if (planes) {\n const pluridPlanes: PluridPlane<PluridReactComponent>[] = [];\n const view: any[] = [];\n\n for (const plane of planes) {\n const planeData = resolvePluridRoutePlaneData(plane);\n\n const {\n component,\n } = planeData;\n\n const pathName = path.value === PLURID_ROUTE_DEFAULT_PATH_VALUE\n ? PLURID_ROUTE_DEFAULT_PATH\n : utilities.cleanPathElement(path.value);\n const spaceName = PLURID_ROUTE_DEFAULT_SPACE;\n const universeName = PLURID_ROUTE_DEFAULT_UNIVERSE;\n const clusterName = PLURID_ROUTE_DEFAULT_CLUSTER;\n const planeName = utilities.cleanPathElement(planeData.value);\n\n const pathDivisions = [\n protocol,\n host,\n pathName,\n spaceName,\n universeName,\n clusterName,\n planeName,\n ];\n const fullPath = pathDivisions.join(PLURID_ROUTE_SEPARATOR);\n\n // if (component.kind === 'react') {\n // const pluridPlane: PluridPlane<PluridReactComponent> = {\n // component: {\n // kind: 'react',\n // element: component.element,\n // properties: {\n // plurid: pluridProperty,\n // },\n // },\n // route: fullPath,\n // };\n\n // pluridPlanes.push(pluridPlane);\n\n // if (!path.view) {\n // view.push(fullPath);\n // } else {\n // if (path.view.includes(plane.value)) {\n // view.push(fullPath);\n // }\n // }\n // }\n }\n\n const planesProperties = new Map();\n\n // console.log('path.value', path.value);\n\n // console.log('getComponentFromRoute planes view', view);\n\n const App = (\n <PluridApplication\n key={uuid.generate()}\n id={path.value}\n planes={pluridPlanes}\n planesProperties={planesProperties}\n view={view}\n static={staticRender}\n configuration={path.defaultConfiguration}\n hostname={host}\n />\n );\n spacesArray.push(App);\n }\n\n\n let MultispaceHeader: React.FC<any>;\n let MultispaceFooter: React.FC<any>;\n if (path.multispace?.header) {\n const header = path.multispace.header;\n if (typeof header == 'function') {\n MultispaceHeader = header;\n }\n }\n if (path.multispace?.footer) {\n const footer = path.multispace.footer;\n if (typeof footer == 'function') {\n MultispaceFooter = footer;\n }\n }\n\n PluridSpaces = () => (\n <StyledSpaces\n alignment={multispaceAlignment}\n snapType={multispaceSnapType}\n data-plurid-entity={PLURID_ENTITY_MULTISPACE}\n >\n {MultispaceHeader && (\n <MultispaceHeader />\n )}\n\n {spacesArray}\n\n {MultispaceFooter && (\n <MultispaceFooter />\n )}\n </StyledSpaces>\n );\n\n const Component = (\n <>\n {exterior && (\n <PluridExterior\n spaces={slotted ? spacesArray : undefined}\n plurid={pluridProperty}\n />\n )}\n\n {\n (spaces || planes)\n && !slotted\n && (\n <PluridSpaces />\n )\n }\n </>\n );\n return Component;\n}\n\n\nexport interface GetGatewayViewData {\n queryString: string;\n routes: PluridRoute<PluridReactComponent>[];\n gatewayPath: string | undefined;\n gatewayExterior: any;\n protocol: string;\n host: string;\n}\n\nexport const getGatewayView = (\n data: GetGatewayViewData,\n) => {\n const {\n queryString,\n routes,\n gatewayPath,\n gatewayExterior,\n protocol,\n host,\n } = data\n\n const query = routing.extractQuery(queryString);\n\n const gatewayView: string[] = [];\n\n if (query.plurid) {\n gatewayView.push(query.plurid);\n }\n\n if (query.plurids) {\n const gatewayViews = query.plurids.split(',');\n gatewayView.push(...gatewayViews);\n }\n\n const planes: PluridPlane<PluridReactComponent>[] = [];\n const view: string[] = [];\n\n for (const path of routes) {\n if (path.spaces) {\n const pathName = path.value === PLURID_ROUTE_DEFAULT_PATH_VALUE\n ? PLURID_ROUTE_DEFAULT_PATH\n : utilities.cleanPathElement(path.value);\n\n for (const space of path.spaces) {\n const spaceName = space.value === PLURID_ROUTE_DEFAULT_SPACE_VALUE\n ? PLURID_ROUTE_DEFAULT_SPACE\n : utilities.cleanPathElement(space.value);\n\n if (space.universes) {\n for (const universe of space.universes) {\n const universeName = universe.value === PLURID_ROUTE_DEFAULT_UNIVERSE_VALUE\n ? PLURID_ROUTE_DEFAULT_UNIVERSE\n : utilities.cleanPathElement(universe.value);\n\n if (universe.planes) {\n for (const plane of universe.planes) {\n const planeData = resolvePluridRoutePlaneData(plane);\n\n const {\n component,\n value,\n } = planeData;\n\n const planeName = utilities.cleanPathElement(value);\n\n const planeAddressElements = [\n protocol,\n host,\n pathName,\n spaceName,\n universeName,\n PLURID_ROUTE_DEFAULT_CLUSTER,\n planeName,\n ];\n const planeAddress = planeAddressElements.join(PLURID_ROUTE_SEPARATOR);\n\n for (const gatewayViewPlane of gatewayView) {\n // if (gatewayViewPlane === planeAddress) {\n // if (component.kind === 'react') {\n // const pluridPlane: PluridPlane = {\n // component: {\n // kind: 'react',\n // element: component.element,\n // },\n // route: planeAddress,\n // };\n\n // planes.push(pluridPlane);\n // view.push(planeAddress);\n // }\n // }\n }\n }\n }\n }\n }\n\n if (space.planes) {\n for (const plane of space.planes) {\n const planeData = resolvePluridRoutePlaneData(plane);\n\n const {\n component,\n value,\n } = planeData;\n\n const planeName = utilities.cleanPathElement(value);\n\n const planeAddressElements = [\n protocol,\n host,\n pathName,\n spaceName,\n PLURID_ROUTE_DEFAULT_UNIVERSE,\n PLURID_ROUTE_DEFAULT_CLUSTER,\n planeName,\n ];\n const planeAddress = planeAddressElements.join(PLURID_ROUTE_SEPARATOR);\n\n for (const gatewayViewPlane of gatewayView) {\n // if (gatewayViewPlane === planeAddress) {\n // if (component.kind === 'react') {\n // const pluridPlane: PluridPlane = {\n // component: {\n // kind: 'react',\n // element: component.element,\n // },\n // route: planeAddress,\n // };\n\n // planes.push(pluridPlane);\n // view.push(planeAddress);\n // }\n // }\n }\n }\n }\n }\n }\n\n if (path.planes) {\n for (const plane of path.planes) {\n const planeData = resolvePluridRoutePlaneData(plane);\n\n const {\n component,\n } = planeData;\n\n const pathName = path.value === PLURID_ROUTE_DEFAULT_PATH_VALUE\n ? PLURID_ROUTE_DEFAULT_PATH\n : utilities.cleanPathElement(path.value);\n const spaceName = PLURID_ROUTE_DEFAULT_SPACE;\n const universeName = PLURID_ROUTE_DEFAULT_UNIVERSE;\n const clusterName = PLURID_ROUTE_DEFAULT_CLUSTER;\n const planeName = utilities.cleanPathElement(planeData.value);\n\n const pathDivisions = [\n protocol,\n host,\n pathName,\n spaceName,\n universeName,\n clusterName,\n planeName,\n ];\n const planeAddress = pathDivisions.join(PLURID_ROUTE_SEPARATOR);\n\n // if (component.kind === 'react') {\n // const pluridPlane: PluridPlane = {\n // component: {\n // kind: 'react',\n // element: component.element,\n // },\n // route: planeAddress,\n // };\n\n // planes.push(pluridPlane);\n // view.push(planeAddress);\n // }\n }\n }\n }\n\n let Exterior: React.FC<any> = () => (<></>);\n if (gatewayExterior) {\n switch (gatewayExterior.kind) {\n case 'react':\n Exterior = gatewayExterior.element;\n break;\n }\n }\n\n const Component = (\n <>\n <Exterior />\n\n <PluridApplication\n planes={planes}\n view={view}\n />\n </>\n );\n\n const gatewayRoute: routing.MatcherResponse<PluridReactComponent> = {\n path: {\n value: gatewayPath || 'gateway',\n },\n pathname: '',\n fragments: {\n elements: [],\n texts: [],\n },\n parameters: {},\n query: {},\n route: '',\n };\n\n\n return {\n Component,\n gatewayRoute,\n };\n}\n\n\nexport const collectApplicationsFromPath = async (\n isoMatch: PluridRouteMatch,\n protocol: string,\n host: string,\n globals: Record<string, string> | undefined,\n) => {\n const parameters = {};\n const query = {};\n const path: any = {\n planes: [],\n spaces: [],\n view: [],\n value: '',\n };\n let defaultConfiguration;\n\n if (isoMatch.kind === 'Route') {\n let routeData: any = isoMatch.data;\n defaultConfiguration = routeData.defaultConfiguration;\n\n if (isoMatch.data.resolver) {\n routeData = await isoMatch.data.resolver(globals);\n }\n\n path.planes = routeData.planes || [];\n path.spaces = routeData.spaces || [];\n path.view = routeData.view || [];\n path.value = isoMatch.data.value || '';\n }\n\n // const {\n // path,\n // parameters,\n // query,\n // } = matchedRoute;\n\n const {\n planes,\n spaces,\n view,\n } = path;\n\n const pluridProperty = {\n path: {\n parameters,\n query,\n },\n };\n\n const plurids: {\n planes: PluridPlane<PluridReactComponent>[],\n view: string[],\n configuration?: any,\n }[] = [];\n if (spaces) {\n for (const space of spaces) {\n const planes: PluridPlane<PluridReactComponent>[] = [];\n const view: any[] = [];\n\n if (space.planes) {\n for (const plane of space.planes) {\n const planeData = resolvePluridRoutePlaneData(plane);\n\n const {\n component,\n } = planeData;\n\n const pathName = path.value === PLURID_ROUTE_DEFAULT_PATH_VALUE\n ? PLURID_ROUTE_DEFAULT_PATH\n : utilities.cleanPathElement(path.value);\n const spaceName = space.value === PLURID_ROUTE_DEFAULT_SPACE_VALUE\n ? PLURID_ROUTE_DEFAULT_SPACE\n : utilities.cleanPathElement(space.value);\n const universeName = PLURID_ROUTE_DEFAULT_UNIVERSE;\n const clusterName = PLURID_ROUTE_DEFAULT_CLUSTER;\n const planeName = utilities.cleanPathElement(planeData.value);\n\n const pathDivisions = [\n protocol,\n host,\n pathName,\n spaceName,\n universeName,\n clusterName,\n planeName,\n ];\n const fullPath = pathDivisions.join(PLURID_ROUTE_SEPARATOR);\n\n // if (component.kind === 'react') {\n // const pluridPlane: PluridPlane = {\n // component: {\n // kind: 'react',\n // element: component.element,\n // properties: {\n // plurid: pluridProperty,\n // },\n // },\n // route: fullPath,\n // };\n\n // planes.push(pluridPlane);\n // view.push(fullPath);\n // }\n }\n }\n\n if (space.universes) {\n for (const universe of space.universes) {\n if (universe.clusters) {\n for (const cluster of universe.clusters) {\n for (const plane of cluster.planes) {\n const planeData = resolvePluridRoutePlaneData(plane);\n\n const {\n component,\n } = planeData;\n\n const pathName = path.value === PLURID_ROUTE_DEFAULT_PATH_VALUE\n ? PLURID_ROUTE_DEFAULT_PATH\n : utilities.cleanPathElement(path.value);\n const spaceName = space.value === PLURID_ROUTE_DEFAULT_SPACE_VALUE\n ? PLURID_ROUTE_DEFAULT_SPACE\n : utilities.cleanPathElement(space.value);\n const universeName = universe.value === PLURID_ROUTE_DEFAULT_UNIVERSE_VALUE\n ? PLURID_ROUTE_DEFAULT_UNIVERSE\n : utilities.cleanPathElement(universe.value);\n const clusterName = cluster.value === PLURID_ROUTE_DEFAULT_CLUSTER_VALUE\n ? PLURID_ROUTE_DEFAULT_CLUSTER\n : utilities.cleanPathElement(cluster.value);\n const planeName = utilities.cleanPathElement(planeData.value);\n\n const pathDivisions = [\n protocol,\n host,\n pathName,\n spaceName,\n universeName,\n clusterName,\n planeName,\n ];\n const fullPath = pathDivisions.join(PLURID_ROUTE_SEPARATOR);\n\n // if (component.kind === 'react') {\n // const pluridPlane: PluridPlane = {\n // component: {\n // kind: 'react',\n // element: component.element,\n // properties: {\n // plurid: pluridProperty,\n // },\n // },\n // route: fullPath,\n // };\n\n // planes.push(pluridPlane);\n // view.push(fullPath);\n // }\n }\n }\n }\n\n if (universe.planes) {\n for (const plane of universe.planes) {\n const planeData = resolvePluridRoutePlaneData(plane);\n\n const {\n component,\n } = planeData;\n\n const pathName = path.value === PLURID_ROUTE_DEFAULT_PATH_VALUE\n ? PLURID_ROUTE_DEFAULT_PATH\n : utilities.cleanPathElement(path.value);\n const spaceName = space.value === PLURID_ROUTE_DEFAULT_SPACE_VALUE\n ? PLURID_ROUTE_DEFAULT_SPACE\n : utilities.cleanPathElement(space.value);\n const universeName = universe.value === PLURID_ROUTE_DEFAULT_UNIVERSE_VALUE\n ? PLURID_ROUTE_DEFAULT_UNIVERSE\n : utilities.cleanPathElement(universe.value);\n const clusterName = PLURID_ROUTE_DEFAULT_CLUSTER;\n const planeName = utilities.cleanPathElement(planeData.value);\n\n const pathDivisions = [\n protocol,\n host,\n pathName,\n spaceName,\n universeName,\n clusterName,\n planeName,\n ];\n const fullPath = pathDivisions.join(PLURID_ROUTE_SEPARATOR);\n\n // if (component.kind === 'react') {\n // const pluridPlane: PluridPlane = {\n // component: {\n // kind: 'react',\n // element: component.element,\n // properties: {\n // plurid: pluridProperty,\n // },\n // },\n // route: fullPath,\n // };\n\n // planes.push(pluridPlane);\n // view.push(fullPath);\n // }\n }\n }\n }\n }\n\n const pluridApplication = {\n planes,\n view,\n configuration: defaultConfiguration,\n };\n plurids.push(pluridApplication);\n }\n }\n\n if (planes) {\n const pluridPlanes: PluridPlane<PluridReactComponent>[] = [];\n // const view = [];\n\n for (const plane of planes) {\n const planeData = resolvePluridRoutePlaneData<any>(plane);\n\n const {\n value,\n component,\n } = planeData;\n\n const pathName = path.value === PLURID_ROUTE_DEFAULT_PATH_VALUE\n ? PLURID_ROUTE_DEFAULT_PATH\n : utilities.cleanPathElement(path.value);\n const spaceName = PLURID_ROUTE_DEFAULT_SPACE;\n const universeName = PLURID_ROUTE_DEFAULT_UNIVERSE;\n const clusterName = PLURID_ROUTE_DEFAULT_CLUSTER;\n const planeName = utilities.cleanPathElement(planeData.value);\n\n const pathDivisions = [\n protocol,\n host,\n pathName,\n spaceName,\n universeName,\n clusterName,\n planeName,\n ];\n const fullPath = pathDivisions.join(PLURID_ROUTE_SEPARATOR);\n\n const pluridPlane: PluridPlane<PluridReactComponent> = {\n component,\n route: value,\n };\n\n pluridPlanes.push(pluridPlane);\n\n // if (component.kind === 'react') {\n // const pluridPlane: PluridPlane = {\n // component: {\n // kind: 'react',\n // element: component.element,\n // properties: {\n // plurid: pluridProperty,\n // },\n // },\n // route: fullPath,\n // };\n\n // pluridPlanes.push(pluridPlane);\n // // view.push(fullPath);\n // }\n }\n\n const pluridApplication = {\n planes: pluridPlanes,\n view,\n configuration: defaultConfiguration,\n };\n plurids.push(pluridApplication);\n }\n\n return plurids;\n}\n\n\n\n\n\nexport const gatherPluridPlanes = (\n routes: PluridRoute<PluridReactComponent>[],\n planes: PluridRoutePlane<PluridReactComponent>[] | undefined,\n) => {\n const pluridPlanes: PluridPlane<PluridReactComponent>[] = [];\n\n for (const route of routes) {\n if (route.planes) {\n for (const plane of route.planes) {\n const planeData = resolvePluridRoutePlaneData(plane);\n\n const planeRoute = planeData.link\n ? planeData.link\n : planeData.value.startsWith('/')\n ? planeData.value\n : route.value + '/' + planeData.value;\n\n const pluridPlane: PluridReactPlane = {\n route: planeRoute,\n component: planeData.component,\n };\n pluridPlanes.push(pluridPlane);\n }\n }\n\n if (route.spaces) {\n // gather planes from spaces\n }\n }\n\n if (planes) {\n for (const plane of planes) {\n const planeData = resolvePluridRoutePlaneData(plane);\n\n const pluridPlane: PluridReactPlane = {\n route: planeData.value,\n component: planeData.component,\n };\n pluridPlanes.push(pluridPlane);\n }\n }\n\n return pluridPlanes;\n}\n\n\nexport const renderMultispace = (\n matchedRoute: PluridRouteMatch,\n hostname = 'origin',\n) => {\n if (matchedRoute.kind !== 'Route') {\n return () => () => (<></>);\n }\n\n const protocol = 'http';\n const host = hostname;\n\n const {\n match,\n data: path,\n } = matchedRoute;\n\n const {\n parameters,\n query,\n } = match;\n\n const pluridRouteProperty: PluridRouteComponentProperty = {\n value: match.value,\n parameters,\n query,\n };\n\n const {\n exterior,\n planes,\n spaces,\n slotted,\n } = matchedRoute.data;\n\n const multispaceAlignment = path.multispace?.alignment || 'y';\n const multispaceSnapType = path.multispace?.snapType || 'mandatory';\n\n let PluridExterior: React.FC<any> = () => (<></>);\n if (isReactRenderable(exterior)) {\n PluridExterior = exterior as any;\n }\n\n let PluridSpaces: React.FC<any> = () => (<></>);\n const spacesArray: any[] = [];\n if (spaces) {\n for (const space of spaces) {\n const planes: PluridPlane<PluridReactComponent>[] = [];\n const view: any[] = [];\n\n if (space.planes) {\n for (const plane of space.planes) {\n const planeData = resolvePluridRoutePlaneData<React.FC<any>>(plane as any);\n\n const {\n component,\n } = planeData;\n\n const pathName = path.value === PLURID_ROUTE_DEFAULT_PATH_VALUE\n ? PLURID_ROUTE_DEFAULT_PATH\n : utilities.cleanPathElement(path.value);\n const spaceName = space.value === PLURID_ROUTE_DEFAULT_SPACE_VALUE\n ? PLURID_ROUTE_DEFAULT_SPACE\n : utilities.cleanPathElement(space.value);\n const universeName = PLURID_ROUTE_DEFAULT_UNIVERSE;\n const clusterName = PLURID_ROUTE_DEFAULT_CLUSTER;\n const planeName = utilities.cleanPathElement(planeData.value);\n\n const pathDivisions = [\n protocol,\n host,\n pathName,\n spaceName,\n universeName,\n clusterName,\n planeName,\n ];\n const fullPath = pathDivisions.join(PLURID_ROUTE_SEPARATOR);\n\n const pluridPlane: PluridReactPlane = {\n component,\n // plurid: pluridProperty,\n route: fullPath,\n };\n\n planes.push(pluridPlane);\n view.push(fullPath);\n }\n }\n\n if (space.universes) {\n for (const universe of space.universes) {\n if (universe.planes) {\n for (const plane of universe.planes) {\n const planeData = resolvePluridRoutePlaneData<any>(plane);\n\n const {\n component,\n } = planeData;\n\n const pathName = path.value === PLURID_ROUTE_DEFAULT_PATH_VALUE\n ? PLURID_ROUTE_DEFAULT_PATH\n : utilities.cleanPathElement(path.value);\n const spaceName = space.value === PLURID_ROUTE_DEFAULT_SPACE_VALUE\n ? PLURID_ROUTE_DEFAULT_SPACE\n : utilities.cleanPathElement(space.value);\n const universeName = universe.value === PLURID_ROUTE_DEFAULT_UNIVERSE_VALUE\n ? PLURID_ROUTE_DEFAULT_UNIVERSE\n : utilities.cleanPathElement(universe.value);\n const clusterName = PLURID_ROUTE_DEFAULT_CLUSTER;\n const planeName = utilities.cleanPathElement(planeData.value);\n\n const pathDivisions = [\n protocol,\n host,\n pathName,\n spaceName,\n universeName,\n clusterName,\n planeName,\n ];\n const fullPath = pathDivisions.join(PLURID_ROUTE_SEPARATOR);\n\n const pluridPlane: PluridReactPlane = {\n component,\n // plurid: pluridProperty,\n route: fullPath,\n };\n\n planes.push(pluridPlane);\n view.push(fullPath);\n }\n }\n }\n }\n\n // console.log('spaces path.value', path.value);\n // console.log('getComponentFromRoute spaces view', view);\n const pluridPlanesRegistrar = new PluridPlanesRegistrar<PluridReactComponent>(\n [],\n 'localhost:63000',\n );\n\n const App = (\n <PluridApplication\n key={uuid.generate()}\n id={path.value}\n planes={planes}\n view={view}\n configuration={space.configuration}\n planesRegistrar={pluridPlanesRegistrar}\n hostname={hostname}\n />\n );\n spacesArray.push(App);\n }\n }\n\n if (planes) {\n const pluridPlanes: PluridPlane<PluridReactComponent>[] = [];\n const view: any[] = [];\n\n for (const plane of planes) {\n const planeData = resolvePluridRoutePlaneData<any>(plane);\n\n const {\n component,\n } = planeData;\n\n const pathName = path.value === PLURID_ROUTE_DEFAULT_PATH_VALUE\n ? PLURID_ROUTE_DEFAULT_PATH\n : utilities.cleanPathElement(path.value);\n const spaceName = PLURID_ROUTE_DEFAULT_SPACE;\n const universeName = PLURID_ROUTE_DEFAULT_UNIVERSE;\n const clusterName = PLURID_ROUTE_DEFAULT_CLUSTER;\n const planeName = utilities.cleanPathElement(planeData.value);\n\n const pathDivisions = [\n protocol,\n host,\n pathName,\n spaceName,\n universeName,\n clusterName,\n planeName,\n ];\n const fullPath = pathDivisions.join(PLURID_ROUTE_SEPARATOR);\n\n const pluridPlane: PluridReactPlane = {\n component,\n // plurid: pluridProperty,\n route: fullPath,\n };\n\n pluridPlanes.push(pluridPlane);\n\n if (!path.view) {\n view.push(fullPath);\n } else {\n if (path.view.includes(planeData.value)) {\n view.push(fullPath);\n }\n }\n }\n\n const App = (\n <PluridApplication\n key={uuid.generate()}\n id={path.value}\n planes={pluridPlanes}\n view={view}\n configuration={path.defaultConfiguration}\n hostname={hostname}\n />\n );\n spacesArray.push(App);\n }\n\n\n let MultispaceHeader: React.FC<any>;\n let MultispaceFooter: React.FC<any>;\n if (isReactRenderable(path.multispace?.header)) {\n MultispaceHeader = path.multispace?.header as any;\n }\n if (isReactRenderable(path.multispace?.footer)) {\n MultispaceFooter = path.multispace?.footer as any;\n }\n\n\n PluridSpaces = () => (\n <StyledSpaces\n alignment={multispaceAlignment}\n snapType={multispaceSnapType}\n data-plurid-entity={PLURID_ENTITY_MULTISPACE}\n >\n {MultispaceHeader && (\n <MultispaceHeader\n plurid={pluridRouteProperty}\n />\n )}\n\n {spacesArray}\n\n {MultispaceFooter && (\n <MultispaceFooter\n plurid={pluridRouteProperty}\n />\n )}\n </StyledSpaces>\n );\n\n return (): React.FC<any> => {\n const PluridRoute = () => (\n <>\n {exterior && (\n <PluridExterior\n spaces={slotted ? spacesArray : undefined}\n plurid={pluridRouteProperty}\n />\n )}\n\n {\n (spaces || planes)\n && !slotted\n && (\n <PluridSpaces />\n )\n }\n </>\n );\n\n return PluridRoute;\n }\n}\n\n\nexport const computePluridRoute = (\n matchedRoute: PluridRouteMatch | undefined,\n planesRegistrar: planes.Registrar<PluridReactComponent>,\n isoMatcher: routing.IsoMatcher<PluridReactComponent>,\n directPlane?: PluridRouteMatch,\n hostname = 'origin',\n) => {\n if (\n directPlane\n || matchedRoute?.kind === 'RoutePlane'\n ) {\n const match = directPlane || matchedRoute;\n if (!match) {\n return () => () => (<></>);\n }\n // console.log('Render Direct Plane directPlane', directPlane);\n // console.log('Render Direct Plane matchedRoute', matchedRoute);\n\n const DirectPlane = renderDirectPlane(\n match,\n planesRegistrar,\n hostname,\n );\n\n return DirectPlane;\n }\n\n if (!matchedRoute) {\n // Handle not found.\n const notFoundRoute = isoMatcher.match('/not-found', 'route');\n if (notFoundRoute && notFoundRoute.kind === 'Route') {\n const notFoundRender: any = computePluridRoute(\n notFoundRoute,\n planesRegistrar,\n isoMatcher,\n undefined,\n hostname,\n );\n\n return notFoundRender as any;\n }\n\n return () => () => (<></>);\n }\n\n\n const {\n exterior,\n view,\n planes,\n spaces,\n defaultConfiguration,\n slotted,\n resolver,\n } = matchedRoute.data;\n\n if (resolver) {\n const resolved = resolver(undefined);\n }\n // console.log('matchedRoute', matchedRoute);\n\n\n const pluridRouteProperty: PluridRouteComponentProperty = {\n value: matchedRoute.match.value,\n parameters: matchedRoute.match.parameters,\n query: matchedRoute.match.query,\n };\n\n\n let PluridRouteExterior: React.FC<any> | undefined;\n if (isReactRenderable(exterior)) {\n PluridRouteExterior = exterior as any;\n if (PluridRouteExterior) {\n PluridRouteExterior.displayName = 'PluridRouteExterior';\n }\n }\n\n\n // Render only the exterior of the route.\n if (\n exterior\n && PluridRouteExterior\n && !view\n && !planes\n && !spaces\n ) {\n return (): React.FC<any> => {\n const PluridRoute = () => (\n <>\n {PluridRouteExterior && (\n <PluridRouteExterior\n plurid={pluridRouteProperty}\n />\n )}\n </>\n );\n\n return PluridRoute;\n };\n }\n\n\n // Render a single Plurid Application in the route.\n if (\n view\n ) {\n return (): React.FC<any> => {\n const pubsub = new PluridPubSub();\n\n const space = matchedRoute.data.value;\n\n const pluridApplication = (\n <PluridApplication\n view={view}\n planesRegistrar={planesRegistrar}\n configuration={defaultConfiguration}\n pubsub={pubsub}\n matchedRoute={matchedRoute}\n hostname={hostname}\n space={space}\n />\n );\n\n const PluridRoute = () => (\n <>\n {PluridRouteExterior && (\n <PluridRouteExterior\n plurid={pluridRouteProperty}\n pubsub={pubsub}\n spaces={slotted ? [pluridApplication] : undefined}\n />\n )}\n\n {!slotted && (\n <>\n {pluridApplication}\n </>\n )}\n </>\n );\n\n return PluridRoute;\n };\n }\n\n\n // Render a multispace route.\n return renderMultispace(\n matchedRoute,\n );\n}\n\n\nexport const computeInitialMatchedPath = (\n staticContext?: PluridRouterStatic,\n): string => {\n if (staticContext) {\n return staticContext.path;\n }\n\n if (typeof window !== 'undefined') {\n return window.location.pathname + window.location.search;\n }\n\n return '/';\n}\n\n\nexport const getDirectPlaneMatch = (\n matchedPath: string,\n routes: PluridRoute<PluridReactComponent>[],\n planes: PluridRoutePlane<PluridReactComponent>[] | undefined,\n) => {\n let matchRoute: PluridRoute<PluridReactComponent> | undefined;\n let matchPlane: PluridRoutePlane<PluridReactComponent> | undefined;\n let matchPath: string | undefined;\n\n for (const route of routes) {\n if (route.planes) {\n for (const plane of route.planes) {\n const planeData = resolvePluridRoutePlaneData(plane);\n\n const planePath = route.value === '/'\n ? planeData.value\n : route.value + planeData.value;\n matchPath = planePath;\n\n if (matchedPath === planePath) {\n matchPlane = plane;\n break;\n }\n }\n }\n\n if (matchPlane) {\n matchRoute = route;\n break;\n }\n }\n\n if (planes) {\n for (const plane of planes) {\n const planeData = resolvePluridRoutePlaneData(plane);\n\n if (matchedPath === planeData.value) {\n matchPlane = plane;\n break;\n }\n }\n }\n\n return {\n matchRoute,\n matchPlane,\n matchPath,\n };\n}\n\n\nexport const renderDirectPlane = (\n routePlane: PluridRouteMatch,\n planesRegistrar: planes.Registrar<PluridReactComponent>,\n hostname = 'origin',\n) => {\n if (routePlane.match.query.flat) {\n const flat = routePlane.match.query.flat.toLowerCase();\n const renderFlat = flat === 'true' || flat === '1';\n\n if (renderFlat) {\n const pluridRoute = planesRegistrar.get(routePlane.match.value);\n\n if (pluridRoute) {\n const Flat = pluridRoute.component;\n if (typeof Flat !== 'function') {\n return () => () => (<></>);\n }\n\n const DirectPlane = (): any => {\n const PluridRoute = () => (\n <>\n <Flat />\n </>\n );\n\n return PluridRoute;\n };\n\n return DirectPlane;\n }\n }\n }\n\n // let matchedPlane: router.MatcherResponse<PluridReactComponent> | undefined;\n const {\n defaultConfiguration,\n } = routePlane?.data as any;\n\n const DirectPlane = (): any => {\n const PluridRoute = () => (\n <>\n <PluridApplication\n view={[\n routePlane.match.value,\n ]}\n planesRegistrar={planesRegistrar}\n configuration={defaultConfiguration}\n hostname={hostname}\n />\n </>\n );\n\n return PluridRoute;\n };\n\n return DirectPlane;\n\n // const {\n // matchRoute,\n // matchPlane,\n // matchPath,\n // } = getDirectPlaneMatch(\n // matchedPath,\n // routes,\n // planes,\n // );\n // console.log(\n // 'renderDirectPlane',\n // matchRoute,\n // matchPlane,\n // matchPath,\n // );\n\n // if (matchRoute) {\n // const parsedRoute = new router.RouteParser(\n // matchedPath,\n // matchRoute,\n // );\n // matchedPlane = parsedRoute.extract();\n // }\n\n // if (\n // matchRoute && matchPlane && matchPath\n // ) {\n // DirectPlane = (): any => {\n // const PluridRoute = () => (\n // <>\n // <PluridApplication\n // view={matchPath\n // ? [\n // matchPath,\n // ] : []\n // }\n // planesRegistrar={planesRegistrar}\n // />\n // </>\n // );\n\n // return PluridRoute;\n // };\n // }\n\n // return {\n // matchedPlane,\n // DirectPlane,\n // };\n}\n// #endregion module\n","// #region imports\n // #region libraries\n import styled from 'styled-components';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\nexport const PluridScrollTop = styled.div`\n height: 0;\n width: 0;\n`;\n// #endregion module\n","// #region imports\n // #region libraries\n import styled from 'styled-components';\n // #region libraries\n// #region imports\n\n\n\n// #region module\nexport interface IStyledFadeIn {\n}\n\nexport const StyledFadeIn = styled.div<IStyledFadeIn>`\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: black;\n pointer-events: none;\n z-index: 999999;\n`;\n// #region module\n","// #region imports\n // #region libraries\n import React, {\n useState,\n useEffect,\n } from 'react';\n // #endregion libraries\n\n\n // #region internal\n import {\n StyledFadeIn,\n } from './styled';\n // #endregion internal\n// #region imports\n\n\n\n// #region module\nexport interface FadeInProperties {\n time: number;\n}\n\nconst FadeIn: React.FC<FadeInProperties> = (\n properties,\n) => {\n // #region properties\n const {\n time,\n } = properties;\n // #endregion properties\n\n\n // #region state\n const [\n fadedIn,\n setFadedIn,\n ] = useState(false);\n // #endregion state\n\n\n // #region effects\n useEffect(() => {\n if (time > 0) {\n setTimeout(() => {\n setFadedIn(true);\n }, time);\n }\n }, []);\n // #endregion effects\n\n\n // #region render\n if (fadedIn || time === 0) {\n return (<></>);\n }\n\n return (\n <StyledFadeIn />\n );\n // #endregion render\n}\n// #endregion module\n\n\n\n// #region exports\nexport default FadeIn;\n// #endregion exports\n","// #region imports\n // #region libraries\n import React, {\n useRef,\n useState,\n useEffect,\n } from 'react';\n\n\n import {\n storage,\n } from '@plurid/plurid-functions';\n\n import {\n useMounted,\n } from '@plurid/plurid-functions-react';\n\n import {\n /** constants */\n PLURID_ROUTER_LOCATION_CHANGED,\n PLURID_ROUTER_LOCATION_STORED,\n PLURID_ROUTER_STORAGE,\n\n /** interfaces */\n PluridRouterProperties as PluridRouterBrowserOwnProperties,\n } from '@plurid/plurid-data';\n // #endregion libraries\n\n\n // #region external\n import {\n PluridReactComponent,\n PluridRouteMatch,\n } from '~data/interfaces';\n\n import {\n gatherPluridPlanes,\n computePluridRoute,\n computeInitialMatchedPath,\n renderDirectPlane,\n } from '~services/logic/router';\n\n import {\n isReactRenderable,\n } from '~services/utilities/react';\n\n import {\n PluridPlanesRegistrar,\n PluridIsoMatcher,\n } from '~services/engine';\n // #endregion external\n\n\n // #region internal\n import {\n PluridScrollTop,\n } from './styled';\n\n import FadeIn from './FadeIn';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nconst PluridRouterBrowser = (\n properties: PluridRouterBrowserOwnProperties<PluridReactComponent>,\n) => {\n // #region properties\n const {\n routes,\n planes,\n exterior,\n shell,\n hostname,\n scrollToTop,\n fadeIn: fadeInProperty,\n\n static: staticContext,\n\n view: cleanNavigationView,\n cleanNavigation,\n notFoundPath: notFoundPathProperty,\n } = properties;\n // console.log('staticContext', staticContext)\n\n const notFoundPath = notFoundPathProperty || '/not-found';\n const fadeIn = fadeInProperty ?? 10;\n\n const pluridPlanes = gatherPluridPlanes(\n routes,\n planes,\n );\n // #endregion properties\n\n\n // #region references\n const topContainer = useRef<HTMLDivElement>(null);\n\n const pluridPlanesRegistrar = useRef(\n new PluridPlanesRegistrar(\n pluridPlanes,\n hostname,\n ),\n );\n\n const pluridIsoMatcher = useRef(\n new PluridIsoMatcher(\n {\n routes,\n routePlanes: planes,\n },\n hostname,\n ),\n );\n // #endregion references\n\n\n // #region state\n const mounted = useMounted();\n\n const [\n matchedPath,\n setMatchedPath,\n ] = useState(\n computeInitialMatchedPath(\n staticContext,\n ),\n );\n // console.log('matchedPath', matchedPath);\n\n const [\n matchedRoute,\n setMatchedRoute,\n ] = useState<PluridRouteMatch | undefined>(\n pluridIsoMatcher.current.match(\n matchedPath,\n 'route',\n ),\n );\n // console.log('matchedRoute', matchedRoute);\n\n const [\n PluridRoute,\n setPluridRoute,\n ] = useState<React.FC<any>>(\n computePluridRoute(\n matchedRoute,\n pluridPlanesRegistrar.current,\n pluridIsoMatcher.current,\n staticContext && staticContext.directPlane\n ? pluridIsoMatcher.current.match(\n staticContext.directPlane,\n 'route',\n ) : undefined,\n hostname,\n ),\n );\n // #endregion state\n\n\n // #region handlers\n const scrollTop = () => {\n if (!topContainer.current || scrollToTop === false) {\n return;\n }\n\n const behavior = (\n typeof scrollToTop === 'undefined'\n || scrollToTop === true\n || scrollToTop === 'smooth'\n ) ? 'smooth' as const : 'auto' as const;\n\n topContainer.current.scrollIntoView({\n behavior,\n });\n }\n\n const handleLocation = (\n event?: any,\n ) => {\n let matchedPath: string | undefined;\n\n if (\n event && event.detail && event.detail.path\n && !matchedPath\n ) {\n matchedPath = event.detail.path;\n }\n\n\n if (\n cleanNavigation && cleanNavigationView\n && !matchedPath\n ) {\n matchedPath = cleanNavigationView;\n }\n\n\n const pathname = window.location.pathname;\n\n if (!matchedPath) {\n matchedPath = pathname + window.location.search;\n }\n\n\n setMatchedPath(matchedPath);\n scrollTop();\n }\n // #endregion handlers\n\n\n // #region effects\n // Handle location.\n useEffect(() => {\n window.addEventListener('popstate', handleLocation);\n window.addEventListener(PLURID_ROUTER_LOCATION_CHANGED, handleLocation);\n\n return () => {\n window.removeEventListener('popstate', handleLocation);\n window.removeEventListener(PLURID_ROUTER_LOCATION_CHANGED, handleLocation);\n };\n }, []);\n\n\n useEffect(() => {\n if (!mounted) {\n return;\n }\n\n if (!cleanNavigation) {\n // Compare the FULL current URL (pathname + search) against `matchedPath` — which\n // already includes the search (see where it's built) — so a query-bearing URL no\n // longer pushes a spurious history entry on mount. Use `window.`-qualified globals\n // rather than the bare `location`/`history` references.\n const currentUrl = window.location.pathname + window.location.search;\n if (currentUrl !== matchedPath) {\n window.history.pushState(null, '', matchedPath);\n }\n }\n\n let matchedRoute = pluridIsoMatcher.current.match(matchedPath, 'route');\n\n // Handle direct plane access.\n if (\n matchedRoute\n && matchedRoute.kind === 'RoutePlane'\n ) {\n const DirectPlane = renderDirectPlane(\n matchedRoute,\n pluridPlanesRegistrar.current,\n hostname,\n );\n\n setMatchedRoute(matchedRoute);\n setPluridRoute(DirectPlane);\n return;\n }\n\n // Handle not found.\n if (!matchedRoute) {\n matchedRoute = pluridIsoMatcher.current.match(notFoundPath, 'route');\n }\n\n setMatchedRoute(matchedRoute);\n setPluridRoute(\n computePluridRoute(\n matchedRoute,\n pluridPlanesRegistrar.current,\n pluridIsoMatcher.current,\n undefined,\n hostname,\n ),\n );\n }, [\n mounted,\n matchedPath,\n ]);\n\n\n useEffect(() => {\n if (!matchedRoute) {\n return;\n }\n\n if (matchedRoute.kind !== 'Route') {\n return;\n }\n\n const path = matchedRoute.match.value;\n\n storage.saveState(\n path,\n PLURID_ROUTER_STORAGE,\n );\n\n const locationStoredEvent = new CustomEvent(\n PLURID_ROUTER_LOCATION_STORED,\n {\n detail: {\n path,\n },\n },\n );\n window.dispatchEvent(locationStoredEvent);\n }, [\n cleanNavigation,\n matchedRoute,\n ]);\n // #endregion effects\n\n\n // #region render\n let PluridRouterExterior: React.FC<any> | undefined;\n if (isReactRenderable(exterior)) {\n PluridRouterExterior = exterior as any;\n if (PluridRouterExterior) {\n PluridRouterExterior.displayName = 'PluridRouterExterior';\n }\n }\n\n let PluridRouterShell: React.FC<any> = ({\n children,\n }) => (<>{children}</>);\n if (isReactRenderable(shell)) {\n PluridRouterShell = shell as any;\n if (PluridRouterShell) {\n PluridRouterShell.displayName = 'PluridRouterShell';\n }\n }\n\n return (\n <>\n <FadeIn\n time={fadeIn}\n />\n\n <PluridScrollTop\n ref={topContainer}\n />\n\n {PluridRouterExterior && (\n <PluridRouterExterior\n matchedRoute={matchedRoute}\n />\n )}\n\n <PluridRouterShell\n matchedRoute={matchedRoute}\n >\n <PluridRoute />\n </PluridRouterShell>\n </>\n );\n // #endregion render\n}\n// #endregion module\n\n\n\n// #region exports\nexport default PluridRouterBrowser;\n// #endregion exports\n","// #region imports\n // #region libraries\n import React from 'react';\n\n import {\n PluridRoute,\n PluridRoutePlane,\n PluridRouterProperties,\n } from '@plurid/plurid-data';\n // #endregion libraries\n\n\n // #region external\n import {\n PluridReactComponent,\n } from '~data/interfaces';\n\n import PluridRouterBrowser from '~containers/RouterBrowser';\n // #endregion external\n// #endregion imports\n\n\n\n// #region module\nexport interface PluridRouterStaticOwnProperties {\n path: string;\n directPlane?: string;\n exterior?: PluridReactComponent;\n shell?: PluridReactComponent;\n routes: PluridRoute<PluridReactComponent>[];\n planes: PluridRoutePlane<PluridReactComponent>[];\n protocol?: string;\n hostname?: string;\n gateway?: boolean;\n gatewayQuery?: string;\n gatewayEndpoint?: string;\n routerProperties?: Partial<PluridRouterProperties<PluridReactComponent>>;\n}\n\n\nconst PluridRouterStatic = (\n properties: PluridRouterStaticOwnProperties,\n) => {\n // #region properties\n const {\n path,\n directPlane,\n routes,\n planes,\n exterior,\n shell,\n protocol: protocolProperty,\n hostname: hostnameProperty,\n gateway,\n gatewayQuery: gatewayQueryProperty,\n gatewayEndpoint: gatewayEndpointProperty,\n routerProperties,\n } = properties;\n\n const protocol = protocolProperty || 'http';\n const hostname = hostnameProperty || 'origin';\n const gatewayQuery = gatewayQueryProperty || '';\n const gatewayEndpoint = gatewayEndpointProperty || '/gateway';\n // #endregion properties\n\n\n // #region render\n return (\n <PluridRouterBrowser\n routes={routes}\n planes={planes}\n exterior={exterior}\n shell={shell}\n static={{\n path,\n directPlane,\n }}\n protocol={protocol}\n hostname={hostname}\n {...routerProperties}\n />\n );\n // #endregion render\n}\n// #endregion module\n\n\n\n// #region exports\nexport default PluridRouterStatic;\n// #endregion exports\n","// #region imports\n // #region libraries\n import React from 'react';\n\n import {\n PluridMetastate,\n } from '@plurid/plurid-data';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\nconst PluridContext = React.createContext<PluridMetastate | undefined>(undefined);\n// #endregion module\n\n\n\n// #region exports\nexport default PluridContext;\n// #endregion exports\n","// #region imports\n // #region libraries\n import React, {\n Component,\n } from 'react';\n\n import {\n PluridMetastate,\n } from '@plurid/plurid-data';\n // #endregion libraries\n\n\n // #region internal\n import PluridProviderContext from './context';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nexport interface PluridProviderProperties {\n metastate: PluridMetastate | undefined;\n}\n\n\nclass PluridProvider extends Component<\n React.PropsWithChildren<PluridProviderProperties>\n> {\n static displayName = 'PluridProvider';\n\n private properties: React.PropsWithChildren<PluridProviderProperties>;\n\n constructor(\n properties: React.PropsWithChildren<PluridProviderProperties>,\n ) {\n super(properties);\n this.properties = properties;\n }\n\n render() {\n const {\n metastate,\n children,\n } = this.properties;\n\n return (\n <PluridProviderContext.Provider\n value={metastate}\n >\n {children}\n </PluridProviderContext.Provider>\n );\n }\n}\n// #endregion module\n\n\n\n// #region exports\nexport default PluridProvider;\n// #endregion exports\n","// #region imports\n // #region external\n import {\n PluridLinkCoordinates,\n } from '~data/interfaces';\n // #endregion external\n// #endregion imports\n\n\n\n// #region module\nexport const DEFAULT_ROUTER_LINK_AS_ANCHOR = true;\n\n\nexport const defaultLinkCoordinates: PluridLinkCoordinates = {\n x: 0,\n y: 0,\n};\n// #endregion module\n","// #region imports\n // #region libraries\n import React from 'react';\n\n import {\n createPortal,\n } from 'react-dom';\n\n import {\n usePortal,\n } from '@plurid/plurid-functions-react';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\nexport interface PortalProperties {\n elementID: string;\n rootID: string;\n children?: React.ReactNode;\n}\n\n/**\n * @example\n * <Portal>\n * <p>elements</p>\n * </Portal>\n *\n */\nconst PluridPortal: React.FC<PortalProperties> = (\n properties,\n) => {\n const {\n elementID,\n rootID,\n children,\n } = properties;\n\n const target = usePortal(elementID, rootID);\n\n return createPortal(\n children,\n target,\n );\n};\n// #endregion module\n\n\n\n// #region exports\nexport default PluridPortal;\n// #endregion exports\n","// #region imports\n // #region libraries\n import styled from 'styled-components';\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n // #endregion libraries\n\n\n // #region external\n import {\n PluridLinkCoordinates,\n } from '~data/interfaces';\n // #endregion external\n// #endregion imports\n\n\n\n// #region module\nexport interface IStyledPreview {\n theme: Theme;\n linkCoordinates: PluridLinkCoordinates;\n}\n\nexport const StyledPluridPlanePreview = styled.div<IStyledPreview>`\n position: absolute;\n min-width: 600px;\n min-height: 300px;\n z-index: 99999;\n\n top: ${({\n linkCoordinates,\n }) => {\n const location = linkCoordinates.y;\n return location + 'px';\n }};\n left: ${({\n linkCoordinates,\n }) => {\n const location = linkCoordinates.x + 5;\n return location + 'px';\n }};\n background-color: ${({\n theme,\n }) => {\n return theme.backgroundColorSecondary;\n }};\n box-shadow: ${({\n theme,\n }) => {\n return theme.boxShadowUmbra;\n }};\n`;\n// #endregion module\n","// #region imports\n // #region libraries\n import React, {\n useContext,\n } from 'react';\n\n import {\n AnyAction,\n ThunkDispatch,\n } from '@reduxjs/toolkit';\n import { connect } from 'react-redux';\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n // #endregion libraries\n\n\n // #region external\n import {\n PluridLinkCoordinates,\n } from '~data/interfaces';\n\n import Context from '~services/context';\n\n import { AppState } from '~services/state/store';\n import StateContext from '~services/state/context';\n import selectors from '~services/state/selectors';\n // import actions from '~services/state/actions';\n\n import {\n getPlanesRegistrar,\n } from '~services/engine';\n // #endregion external\n\n\n // #region internal\n import {\n StyledPluridPlanePreview,\n } from './styled';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nexport interface PluridPlanePreviewOwnProperties {\n planeRoute: string;\n linkCoordinates: PluridLinkCoordinates;\n previewOffsetX: number | undefined;\n previewOffsetY: number | undefined;\n previewComponent: any;\n}\n\nexport interface PluridPlanePreviewStateProperties {\n stateGeneralTheme: Theme;\n stateInteractionTheme: Theme;\n}\n\nexport interface PluridPlanePreviewDispatchProperties {\n}\n\nexport type PluridPlanePreviewProperties =\n & PluridPlanePreviewOwnProperties\n & PluridPlanePreviewStateProperties\n & PluridPlanePreviewDispatchProperties;\n\n\nconst PluridPlanePreview: React.FC<PluridPlanePreviewProperties> = (\n properties,\n) => {\n // #region properties\n const {\n // #region own\n planeRoute,\n linkCoordinates,\n previewComponent,\n previewOffsetX,\n previewOffsetY,\n // #endregion own\n\n // #region state\n stateGeneralTheme,\n // stateInteractionTheme,\n // #endregion state\n } = properties;\n\n const resolvedLinkCoordinates = {\n x: linkCoordinates.x + (previewOffsetX ?? 0),\n y: linkCoordinates.y + (previewOffsetY ?? 0),\n };\n // #endregion properties\n\n\n // #region context\n const context = useContext(Context);\n if (!context) {\n return (<></>);\n }\n\n const {\n planesRegistrar,\n } = context;\n\n const planesRegistry = getPlanesRegistrar(planesRegistrar);\n if (!planesRegistry) {\n return (<></>);\n }\n // #endregion context\n\n\n // #region render\n const plane = planesRegistry.get(planeRoute);\n if (!plane) {\n return (<></>);\n }\n\n const Component = previewComponent ?? plane.component;\n if (typeof Component !== 'function') {\n return (<></>);\n }\n\n return (\n <StyledPluridPlanePreview\n theme={stateGeneralTheme}\n linkCoordinates={resolvedLinkCoordinates}\n >\n <Component />\n </StyledPluridPlanePreview>\n );\n // #endregion render\n}\n\n\nconst mapStateToProperties = (\n state: AppState,\n): PluridPlanePreviewStateProperties => ({\n stateGeneralTheme: selectors.themes.getGeneralTheme(state),\n stateInteractionTheme: selectors.themes.getInteractionTheme(state),\n});\n\n\nconst mapDispatchToProperties = (\n dispatch: ThunkDispatch<{}, {}, AnyAction>,\n): PluridPlanePreviewDispatchProperties => ({\n});\n\n\nconst ConnectedPluridPlanePreview = connect(\n mapStateToProperties,\n mapDispatchToProperties,\n null,\n {\n context: StateContext,\n },\n)(PluridPlanePreview);\n// #endregion module\n\n\n\n// #region exports\nexport default ConnectedPluridPlanePreview;\n// #endregion exports\n","// #region imports\n // #region libraries\n import styled from 'styled-components';\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\nexport interface IStyledPluridLink {\n theme: Theme;\n devisible: boolean;\n suffix: string;\n}\n\nexport const StyledPluridLink = styled.a<IStyledPluridLink>`\n /**\n * Forces element to go to the second row if inlined.\n */\n display: inline-block;\n\n cursor: pointer;\n color: ${({\n theme,\n }) => {\n return theme.colorTertiary;\n }};\n\n :hover {\n color: ${({\n theme,\n }) => {\n return theme.colorPrimary;\n }};\n }\n\n ::after {\n content: \"${({\n devisible,\n suffix,\n }) => {\n if (!devisible) {\n if (suffix) {\n return suffix;\n }\n return \"'\";\n }\n return '';\n }}\";\n }\n`;\n// #endregion module\n","// #region imports\n // #region libraries\n import {\n useState,\n useRef,\n useEffect,\n } from 'react';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\nexport interface UseLinkPreviewParameters {\n /** The link's preview config (truthy = previews enabled). */\n preview: unknown;\n mouseOver: boolean;\n appearTime: number;\n disappearTime: number;\n}\n\n\n/**\n * The hover-preview visibility state machine for a `PluridLink`: a debounced fade-in on hover-in and\n * fade-out on hover-out, driven by `mouseOver`. Owns its own timers + `showPreview` state. Returns\n * `setShowPreview` so the plane-lifecycle handlers (spawn/toggle) can force the preview hidden.\n */\nexport const useLinkPreview = (\n {\n preview,\n mouseOver,\n appearTime,\n disappearTime,\n }: UseLinkPreviewParameters,\n) => {\n const hoverInTimeout = useRef<null | ReturnType<typeof setTimeout>>(null);\n const hoverOutTimeout = useRef<null | ReturnType<typeof setTimeout>>(null);\n const [showPreview, setShowPreview] = useState(false);\n\n useEffect(() => {\n if (!preview) {\n return;\n }\n\n if (mouseOver && hoverOutTimeout.current) {\n hoverInTimeout.current = setTimeout(\n () => {\n setShowPreview(true);\n },\n appearTime,\n );\n\n clearTimeout(hoverOutTimeout.current);\n }\n\n if (!mouseOver) {\n hoverOutTimeout.current = setTimeout(\n () => {\n setShowPreview(false);\n if (hoverInTimeout.current) {\n clearTimeout(hoverInTimeout.current);\n }\n },\n disappearTime,\n );\n }\n\n return () => {\n if (hoverOutTimeout.current) {\n clearTimeout(hoverOutTimeout.current);\n }\n if (hoverInTimeout.current) {\n clearTimeout(hoverInTimeout.current);\n }\n }\n }, [\n preview,\n mouseOver,\n ]);\n\n return {\n showPreview,\n setShowPreview,\n };\n}\n// #endregion module\n\n\n\n// #region exports\nexport default useLinkPreview;\n// #endregion exports\n","// #region imports\n // #region libraries\n import React, {\n useContext,\n useState,\n useRef,\n useCallback,\n useEffect,\n } from 'react';\n\n import {\n AnyAction,\n ThunkDispatch,\n } from '@reduxjs/toolkit';\n import { connect } from 'react-redux';\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n\n import {\n objects,\n } from '@plurid/plurid-functions';\n\n import {\n useDebouncedCallback,\n } from '@plurid/plurid-functions-react';\n\n import {\n // #region constants\n PLURID_PUBSUB_TOPIC,\n PLURID_DEFAULT_CONFIGURATION_LINK_SUFFIX,\n PLURID_ENTITY_LINK,\n PLURID_DEFAULT_CONFIGURATION_LINK_PREVIEW_FADE_IN,\n PLURID_DEFAULT_CONFIGURATION_LINK_PREVIEW_FADE_OUT,\n PLURID_DEFAULT_RESIZE_DEBOUNCE_TIME,\n // #endregion constants\n\n // #region interfaces\n PluridLink as PluridLinkOwnProperties,\n TreePlane,\n PluridConfiguration,\n // #endregion interfaces\n } from '@plurid/plurid-data';\n // #endregion libraries\n\n\n // #region external\n import {\n PluridReactComponent,\n PluridLinkCoordinates,\n } from '~data/interfaces';\n\n import {\n defaultLinkCoordinates,\n } from '~data/constants';\n\n import PluridPortal from '~components/utilities/Portal';\n\n import Context from '~services/context';\n\n import { AppState } from '~services/state/store';\n import StateContext from '~services/state/context';\n import selectors from '~services/state/selectors';\n import actions from '~services/state/actions';\n import {\n ViewSize,\n UpdateSpaceLinkCoordinatesPayload,\n } from '~services/state/modules/space/types';\n import {\n DispatchAction,\n } from '~data/interfaces';\n\n import {\n navigateToPluridPlane,\n } from '~services/logic/animation';\n\n import {\n getPlanesRegistrar,\n getPluridPlaneIDByData,\n\n resolveRoute,\n computePlaneAddress,\n\n space,\n } from '~services/engine';\n // #endregion external\n\n\n // #region internal\n import PluridPlanePreview from './components/Preview';\n\n import {\n StyledPluridLink,\n } from './styled';\n\n import useLinkPreview from './hooks/useLinkPreview';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nexport interface PluridLinkStateProperties {\n stateTree: TreePlane[];\n stateLastClosedPlane: string;\n stateGeneralTheme: Theme;\n stateConfiguration: PluridConfiguration;\n stateViewSize: ViewSize;\n}\n\nexport interface PluridLinkDispatchProperties {\n dispatch: ThunkDispatch<{}, {}, AnyAction>,\n dispatchSetTree: DispatchAction<typeof actions.space.setTree>;\n dispatchSetSpaceField: DispatchAction<typeof actions.space.setSpaceField>;\n dispatchUpdateSpaceLinkCoordinates: DispatchAction<typeof actions.space.updateSpaceLinkCoordinates>;\n dispatchRemovePlane: DispatchAction<typeof actions.space.removePlane>;\n}\n\nexport type PluridLinkProperties =\n & PluridLinkOwnProperties<PluridReactComponent, React.CSSProperties, React.MouseEvent>\n & PluridLinkStateProperties\n & PluridLinkDispatchProperties;\n\n\nconst PluridLink: React.FC<React.PropsWithChildren<PluridLinkProperties>> = (\n properties,\n) => {\n // #region context\n const context = useContext(Context);\n if (!context) {\n return (<>{properties.children}</>);\n }\n\n const {\n hostname,\n planesRegistrar,\n defaultPubSub,\n } = context;\n\n const planesRegistry = getPlanesRegistrar(planesRegistrar);\n if (!planesRegistry) {\n return (<>{properties.children}</>);\n }\n // #endregion context\n\n\n // #region properties\n const {\n // #region own\n children,\n route: planeRoute,\n devisible: devisibleProperty,\n suffix: suffixProperty,\n atClick,\n style,\n className,\n preview,\n previewComponent,\n previewFadeIn,\n previewFadeOut,\n previewOffsetX,\n previewOffsetY,\n // #endregion own\n\n // #region state\n stateTree,\n stateLastClosedPlane,\n stateGeneralTheme,\n stateConfiguration,\n stateViewSize,\n // #endregion state\n\n // #region dispatch\n dispatch,\n dispatchSetTree,\n dispatchSetSpaceField,\n dispatchUpdateSpaceLinkCoordinates,\n dispatchRemovePlane,\n // #endregion dispatch\n } = properties;\n\n const planeControls = stateConfiguration.elements.plane.controls.show;\n\n const previewAppearTime = previewFadeIn || PLURID_DEFAULT_CONFIGURATION_LINK_PREVIEW_FADE_IN;\n const previewDisappearTime = previewFadeOut || PLURID_DEFAULT_CONFIGURATION_LINK_PREVIEW_FADE_OUT;\n\n const planeRouteResolved = computePlaneAddress(planeRoute);\n // console.log('planeRouteResolved', planeRouteResolved);\n\n const absolutePlaneRoute = resolveRoute(\n planeRouteResolved,\n stateConfiguration.network.protocol,\n hostname || stateConfiguration.network.host,\n );\n // console.log('absolutePlaneRoute', absolutePlaneRoute);\n\n const suffix = suffixProperty ?? PLURID_DEFAULT_CONFIGURATION_LINK_SUFFIX;\n const devisible = devisibleProperty ?? false;\n // #endregion properties\n\n\n // #region references\n const linkElement: React.RefObject<HTMLAnchorElement> = useRef(null);\n // #endregion references\n\n\n // #region state\n const [mouseOver, setMouseOver] = useState(false);\n const [showLink, setShowLink] = useState(false);\n const [pluridPlaneID, setPluridPlaneID] = useState('');\n const [parentPlaneID, setParentPlaneID] = useState(getPluridPlaneIDByData(linkElement.current));\n const [linkCoordinates, setLinkCoordinates] = useState(defaultLinkCoordinates);\n // #endregion state\n\n\n // Hover-preview state machine (timers + showPreview) lives in `useLinkPreview`; the lifecycle\n // handlers below use `setShowPreview` to hide the preview when the plane spawns/toggles.\n const {\n showPreview,\n setShowPreview,\n } = useLinkPreview({\n preview,\n mouseOver,\n appearTime: previewAppearTime,\n disappearTime: previewDisappearTime,\n });\n\n\n // #region handlers\n const getPluridLinkCoordinates = (): PluridLinkCoordinates => {\n const link = linkElement.current;\n // console.log('getPluridLinkCoordinates', link);\n\n if (!link) {\n return {\n ...defaultLinkCoordinates,\n };\n }\n\n let partialTop = 0;\n let partialLeft = 0;\n let staticSet = false;\n\n let element: HTMLElement = link;\n let searching = true;\n let top = 0;\n let left = 0;\n while (searching) {\n // console.log('in while loop', element);\n // console.log('in while loop top', element.offsetTop);\n // console.log('in while loop left', element.offsetLeft);\n\n if (window.getComputedStyle(element).position === 'static'\n && !staticSet\n ) {\n // console.log('static set', element);\n\n partialTop += element.offsetTop;\n partialLeft += element.offsetLeft;\n staticSet = true;\n }\n\n if (window.getComputedStyle(element).position === 'relative') {\n // console.log('partial added', element);\n\n top += partialTop;\n left += partialLeft;\n partialTop = 0;\n partialLeft = 0;\n staticSet = false;\n }\n\n if (element.scrollLeft) {\n left += -element.scrollLeft;\n }\n\n if (element.scrollTop) {\n top += -element.scrollTop;\n }\n\n if (\n element.parentElement\n ) {\n const pluridEntity = element.parentElement.dataset.pluridEntity;\n if (pluridEntity === 'PluridPlane') {\n searching = false;\n }\n element = element.parentElement;\n } else {\n searching = false;\n }\n }\n\n // console.log('element', element);\n // console.log('link', link);\n // console.log('top', top);\n // console.log('left', left);\n\n const planeControlsHeight = planeControls ? 56 : 0;\n const x = left + link.offsetWidth;\n const y = top + planeControlsHeight;\n\n // console.log('x', x);\n // console.log('y', y);\n // console.log('---------');\n\n return {\n x,\n y,\n };\n }\n\n const updateLinkCoordinates = () => {\n const newLinkCoordinates = getPluridLinkCoordinates();\n\n const payload: UpdateSpaceLinkCoordinatesPayload = {\n planeID: pluridPlaneID,\n linkCoordinates: newLinkCoordinates,\n };\n dispatchUpdateSpaceLinkCoordinates(payload);\n\n const updatedTree = space.tree.logic.updatePlaneLocation(\n stateTree,\n parentPlaneID,\n pluridPlaneID,\n objects.clone((newLinkCoordinates)),\n );\n dispatchSetTree(updatedTree);\n }\n\n const debouncedUpdateLinkCoordinates = useDebouncedCallback(() => {\n updateLinkCoordinates();\n }, PLURID_DEFAULT_RESIZE_DEBOUNCE_TIME);\n\n const assignTreePlaneToLink = (\n parentPlane: TreePlane | undefined,\n linkCoordinates: PluridLinkCoordinates,\n ) => {\n if (!parentPlane || !parentPlane.children) {\n return;\n }\n\n for (const plane of parentPlane.children) {\n if (!plane.linkCoordinates) {\n continue;\n }\n\n // Require BOTH axes to match (the child at the SAME point), not either — with `||`\n // a plane merely sharing a row (same y) or column (same x) in a grid layout would\n // be wrongly attached to this link.\n if (\n plane.linkCoordinates.x === linkCoordinates.x\n && plane.linkCoordinates.y === linkCoordinates.y\n ) {\n if (pluridPlaneID === plane.planeID) {\n continue;\n }\n\n setShowLink(true);\n setPluridPlaneID(plane.planeID);\n }\n }\n }\n\n\n const updateTreeWithLink = (\n event: React.MouseEvent<HTMLAnchorElement>,\n ) => {\n if (!parentPlaneID || !absolutePlaneRoute) {\n return;\n }\n\n const {\n route,\n } = absolutePlaneRoute;\n\n const linkCoordinates = getPluridLinkCoordinates();\n const {\n pluridPlaneID,\n updatedTree,\n updatedTreePlane,\n } = space.tree.logic.updateTreeWithNewPlane(\n route,\n parentPlaneID,\n linkCoordinates,\n stateTree,\n planesRegistry.getAll(),\n stateConfiguration,\n hostname,\n );\n // console.log({\n // route,\n // parentPlaneID,\n // linkCoordinates,\n // stateTree,\n // planesRegistry: planesRegistry.getAll(),\n // stateConfiguration,\n // hostname,\n // });\n // console.log({updatedTree});\n\n if (pluridPlaneID) {\n handlePlaneNavigation(\n event,\n updatedTreePlane,\n );\n\n dispatchSetTree(updatedTree);\n setShowLink(true);\n setPluridPlaneID(pluridPlaneID);\n }\n }\n\n const togglePlane = (\n forceShow?: boolean,\n ) => {\n const {\n updatedTree,\n updatedPlane,\n } = space.tree.logic.togglePlaneFromTree(\n stateTree,\n pluridPlaneID,\n forceShow,\n );\n // console.log({\n // pluridPlaneID,\n // forceShow,\n // updatedTree,\n // updatedPlane,\n // });\n\n dispatchSetTree(updatedTree);\n setShowLink(show => !show);\n setShowPreview(false);\n\n return {\n updatedPlane,\n };\n }\n\n const toggleLinkFromTree = (\n event: React.MouseEvent<HTMLAnchorElement>,\n ) => {\n const {\n updatedPlane,\n } = togglePlane();\n\n handlePlaneNavigation(\n event,\n updatedPlane,\n );\n }\n\n const handlePlaneNavigation = (\n event: React.MouseEvent<HTMLAnchorElement>,\n updatedPlane: TreePlane | undefined,\n ) => {\n if (!updatedPlane) {\n return;\n }\n\n if (showLink) {\n // Link already clicked.\n return;\n }\n\n // Clear plane isolation if any.\n dispatchSetSpaceField({\n field: 'isolatePlane',\n value: '',\n });\n\n navigateToPluridPlane(\n dispatch,\n updatedPlane,\n event,\n );\n }\n\n const handleShowPluridPlane = (\n event: React.MouseEvent<HTMLAnchorElement>,\n ) => {\n if (event.altKey) {\n if (showLink && pluridPlaneID) {\n const plane = space.tree.logic.getTreePlaneByID(\n stateTree,\n pluridPlaneID,\n );\n\n navigateToPluridPlane(\n dispatch,\n plane,\n event,\n );\n\n return;\n }\n }\n\n if (!showLink && !pluridPlaneID) {\n updateTreeWithLink(event);\n } else {\n toggleLinkFromTree(event);\n }\n }\n\n const defocusLink = () => {\n if (linkElement.current) {\n linkElement.current.blur();\n }\n }\n\n const removePlane = () => {\n const pluridPlane = document.getElementById(pluridPlaneID);\n if (!pluridPlane) {\n // already removed\n return;\n }\n\n dispatchRemovePlane(pluridPlaneID);\n\n setShowLink(false);\n setShowPreview(false);\n }\n\n const handleClick = useCallback((\n event: React.MouseEvent<HTMLAnchorElement>,\n ) => {\n event.preventDefault();\n\n if (atClick !== undefined) {\n atClick(event);\n }\n\n handleShowPluridPlane(event);\n\n defocusLink();\n }, [\n parentPlaneID,\n // The tree REFERENCE (not `JSON.stringify(stateTree)`): the space reducer replaces\n // `state.tree` with a new array on every mutation, so the ref changes at exactly the\n // same frequency as a content-stringify would — but the comparison is O(1) instead of\n // re-serializing the whole tree on each of this component's (frequent) re-renders.\n stateTree,\n linkElement.current,\n ]);\n\n const handleKeyUp = (\n event: React.KeyboardEvent,\n ) => {\n if (event.code === 'Enter') {\n // FORCED any\n handleClick(event as any);\n\n defocusLink();\n return;\n }\n\n return;\n }\n // #endregion handlers\n\n\n // #region effects\n /**\n * Get Parent Plane ID\n * Get Plurid Link Coordinates\n */\n useEffect(() => {\n const newParentPlaneID = getPluridPlaneIDByData(linkElement.current);\n setParentPlaneID(newParentPlaneID);\n\n const linkCoordinates = getPluridLinkCoordinates();\n setLinkCoordinates(linkCoordinates);\n\n const parentPlane = space.tree.logic.getTreePlaneByID(\n stateTree,\n newParentPlaneID,\n );\n\n assignTreePlaneToLink(\n parentPlane,\n linkCoordinates,\n );\n }, [\n // JSON.stringify(stateTree),\n ]);\n\n /**\n * Update Link Coordinates\n */\n useEffect(() => {\n if (showLink) {\n debouncedUpdateLinkCoordinates();\n }\n }, [\n showLink,\n JSON.stringify(stateViewSize),\n stateTree,\n ]);\n\n /** PubSub Open Closed Plane */\n useEffect(() => {\n const openClosedPlaneIndex = defaultPubSub.subscribe({\n topic: PLURID_PUBSUB_TOPIC.OPEN_CLOSED_PLANE,\n callback: () => {\n if (stateLastClosedPlane === pluridPlaneID) {\n togglePlane();\n\n dispatchSetSpaceField({\n field: 'lastClosedPlane',\n value: '',\n });\n }\n },\n });\n\n return () => {\n defaultPubSub.unsubscribe(\n openClosedPlaneIndex,\n );\n }\n }, [\n showLink,\n pluridPlaneID,\n stateTree,\n ]);\n\n /** PubSub Close Plane */\n useEffect(() => {\n const closePlaneIndex = defaultPubSub.subscribe({\n topic: PLURID_PUBSUB_TOPIC.CLOSE_PLANE,\n callback: (data) => {\n const {\n id,\n } = data;\n\n if (id === pluridPlaneID) {\n if (showLink) {\n const show = false;\n togglePlane(show);\n\n dispatchSetSpaceField({\n field: 'lastClosedPlane',\n value: id,\n });\n }\n }\n },\n });\n\n return () => {\n defaultPubSub.unsubscribe(\n closePlaneIndex,\n );\n }\n }, [\n showLink,\n pluridPlaneID,\n stateTree,\n ]);\n\n /**\n * Unmount cleanup. The short timeout is deliberate: on unmount React may immediately\n * remount the link during reconciliation, which re-sets `linkElement.current`. If the\n * ref is STILL null on the next tick, the link is genuinely gone from the DOM and its\n * spawned plane should be removed. Deps are only the values the cleanup reads\n * (`pluridPlaneID`, `showLink`) — NOT `JSON.stringify(stateTree)`, which re-ran this\n * effect (and scheduled a throwaway timer) on every tree mutation.\n */\n useEffect(() => {\n return () => {\n setTimeout(() => {\n if (\n pluridPlaneID\n && showLink\n && linkElement.current === null\n ) {\n removePlane();\n }\n }, 10);\n }\n }, [\n showLink,\n pluridPlaneID,\n ]);\n // #endregion effects\n\n\n // #region render\n return (\n <StyledPluridLink\n ref={linkElement}\n onClick={(event: React.MouseEvent<HTMLAnchorElement>) => handleClick(event)}\n onMouseEnter={() => setMouseOver(true)}\n onMouseLeave={() => setMouseOver(false)}\n onKeyUp={(event) => handleKeyUp(event)}\n theme={stateGeneralTheme}\n suffix={suffix}\n devisible={devisible}\n style={{\n ...style,\n }}\n className={className}\n data-plurid-entity={PLURID_ENTITY_LINK}\n tabIndex={0}\n >\n {children}\n\n {showPreview\n && !showLink\n && (\n <PluridPortal\n elementID={`preview-${parentPlaneID}`}\n rootID={parentPlaneID}\n >\n <PluridPlanePreview\n planeRoute={planeRouteResolved}\n linkCoordinates={linkCoordinates}\n previewComponent={previewComponent}\n previewOffsetX={previewOffsetX}\n previewOffsetY={previewOffsetY}\n />\n </PluridPortal>\n )}\n </StyledPluridLink>\n );\n // #endregion render\n}\n\n\nconst mapStateToProperties = (\n state: AppState,\n): PluridLinkStateProperties => ({\n stateTree: selectors.space.getTree(state),\n stateLastClosedPlane: selectors.space.getLastClosedPlane(state),\n stateGeneralTheme: selectors.themes.getGeneralTheme(state),\n stateConfiguration: selectors.configuration.getConfiguration(state),\n stateViewSize: selectors.space.getViewSize(state),\n});\n\n\nconst mapDispatchToProperties = (\n dispatch: ThunkDispatch<{}, {}, AnyAction>,\n): PluridLinkDispatchProperties => ({\n dispatch,\n dispatchSetTree: (\n payload,\n ) => dispatch(\n actions.space.setTree(payload),\n ),\n dispatchSetSpaceField: (\n payload,\n ) => dispatch(\n actions.space.setSpaceField(payload),\n ),\n dispatchUpdateSpaceLinkCoordinates: (\n payload,\n ) => dispatch(\n actions.space.updateSpaceLinkCoordinates(payload)\n ),\n dispatchRemovePlane: (\n payload,\n ) => dispatch(\n actions.space.removePlane(payload)\n ),\n});\n\n\nconst ConnectedPluridLink = connect(\n mapStateToProperties,\n mapDispatchToProperties,\n null,\n {\n context: StateContext,\n },\n)(PluridLink);\n// #endregion module\n\n\n\n// #region exports\nexport default ConnectedPluridLink;\n// #endregion exports\n","// #region imports\n // #region libraries\n import styled, {\n css,\n } from 'styled-components';\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\nexport interface IStyledPluridRouterLink {\n theme: Theme;\n}\n\nconst commonStyle = css<IStyledPluridRouterLink>`\n color: ${({\n theme,\n }) => {\n return theme.colorTertiary;\n }};\n\n @media (hover:hover) {\n :hover {\n color: ${({\n theme,\n }) => {\n return theme.colorPrimary;\n }};\n }\n }\n`;\n\nexport const StyledPluridRouterLinkAnchor = styled.a<IStyledPluridRouterLink>`\n ${commonStyle}\n`;\n\n\nexport const StyledPluridRouterLinkDiv = styled.div<IStyledPluridRouterLink>`\n cursor: pointer;\n\n ${commonStyle}\n`;\n// #endregion module\n","// #region imports\n // #region libraries\n import React from 'react';\n\n\n import {\n plurid,\n Theme,\n } from '@plurid/plurid-themes';\n\n import {\n pluridRouterNavigate,\n } from '@plurid/plurid-engine';\n // #endregion libraries\n\n\n // #region external\n import {\n DEFAULT_ROUTER_LINK_AS_ANCHOR,\n } from '~data/constants';\n // #endregion external\n\n\n // #region internal\n import {\n StyledPluridRouterLinkAnchor,\n StyledPluridRouterLinkDiv,\n } from './styled';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nexport interface PluridRouterLinkOwnProperties {\n // #region required\n // #region values\n route: string;\n // #endregion values\n\n // #region methods\n // #endregion methods\n // #endregion required\n\n // #region optional\n // #region values\n /**\n * Style as an anchor tag. Default `true`.\n */\n asAnchor?: boolean;\n target?: '_blank' | '_self';\n\n theme?: Theme;\n style?: React.CSSProperties;\n className?: string;\n children?: React.ReactNode;\n // #endregion values\n\n // #region methods\n /**\n * Click handler. If it returns true it will exit preemptively.\n */\n atClick?: (\n event: React.MouseEvent<Element, MouseEvent>,\n ) => boolean | void;\n // #endregion methods\n // #endregion optional\n}\n\nconst PluridRouterLink: React.FC<PluridRouterLinkOwnProperties> = (\n properties,\n) => {\n // #region properties\n const {\n // #region required\n // #region values\n route,\n children,\n // #endregion values\n\n // #region methods\n // #endregion methods\n // #endregion required\n\n // #region optional\n // #region values\n asAnchor: asAnchorProperty,\n target,\n theme: themeProperty,\n style,\n className,\n // #endregion values\n\n // #region methods\n atClick,\n // #endregion methods\n // #endregion optional\n } = properties;\n\n const asAnchor = asAnchorProperty ?? DEFAULT_ROUTER_LINK_AS_ANCHOR;\n const theme = themeProperty || plurid;\n // #endregion properties\n\n\n // #region handlers\n const handleClick = (\n event: React.MouseEvent<Element, MouseEvent>,\n ) => {\n // Always prevent the browser's default navigation FIRST — this is an SPA router link,\n // so a full-page load is never wanted. An `atClick` that returns truthy (\"I'll handle\n // it myself\") should still suppress the default; previously it returned before\n // `preventDefault()`, so the browser navigated away anyway.\n event.preventDefault();\n\n if (atClick) {\n const exit = atClick(event);\n\n if (exit) {\n return;\n }\n }\n\n if (target === '_blank') {\n window.open(route);\n return;\n }\n\n pluridRouterNavigate(route);\n }\n\n const handleKeyUp = (\n event: React.KeyboardEvent,\n ) => {\n if (event.code === 'Enter') {\n // FORCED any\n handleClick(event as any);\n return;\n }\n\n return;\n }\n // #endregion handlers\n\n\n // #region render\n const renderProperties = {\n tabIndex: 0,\n theme,\n style,\n className,\n onClick: handleClick,\n onKeyUp: handleKeyUp,\n };\n\n if (!asAnchor) {\n return (\n <StyledPluridRouterLinkDiv\n {...renderProperties}\n >\n {children}\n </StyledPluridRouterLinkDiv>\n );\n }\n\n return (\n <StyledPluridRouterLinkAnchor\n href={route}\n {...renderProperties}\n >\n {children}\n </StyledPluridRouterLinkAnchor>\n );\n // #endregion render\n}\n// #endregion module\n\n\n\n// #region exports\nexport default PluridRouterLink;\n// #endregion exports\n","// #region imports\n // #region libraries\n import styled from 'styled-components';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\nexport const StyledPluridApplicationConfigurator = styled.div`\n position: absolute;\n height: 0;\n width: 0;\n user-select: none;\n pointer-events: none;\n`;\n// #endregion module\n","// #region imports\n // #region libraries\n import React, {\n useRef,\n useContext,\n useEffect,\n } from 'react';\n\n import {\n AnyAction,\n ThunkDispatch,\n } from '@reduxjs/toolkit';\n import { connect } from 'react-redux';\n\n\n import PluridPubSub from '@plurid/plurid-pubsub';\n\n import {\n PLURID_ENTITY_APPLICATION_CONFIGURATOR,\n PluridConfiguration,\n PluridPartialConfiguration,\n } from '@plurid/plurid-data';\n // #endregion libraries\n\n\n // #region external\n import Context from '~services/context';\n\n import { AppState } from '~services/state/store';\n import StateContext from '~services/state/context';\n import selectors from '~services/state/selectors';\n import actions from '~services/state/actions';\n import {\n DispatchAction,\n } from '~data/interfaces';\n\n import {\n generalEngine,\n } from '~services/engine';\n // #endregion external\n\n\n // #region internal\n import {\n StyledPluridApplicationConfigurator,\n } from './styled';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nexport interface PluridApplicationConfiguratorOwnProperties {\n configuration?: PluridPartialConfiguration;\n pubsub?: PluridPubSub;\n}\n\nexport interface PluridApplicationConfiguratorStateProperties {\n stateConfiguration: PluridConfiguration;\n}\n\nexport interface PluridApplicationConfiguratorDispatchProperties {\n dispatchSetConfiguration: DispatchAction<typeof actions.configuration.setConfiguration>;\n}\n\nexport type PluridApplicationConfiguratorProperties = PluridApplicationConfiguratorOwnProperties\n & PluridApplicationConfiguratorStateProperties\n & PluridApplicationConfiguratorDispatchProperties;\n\n/**\n * Goes up the tree to find the first plurid application\n * and update it's properties.\n *\n * @param properties\n */\nconst PluridApplicationConfigurator: React.FC<React.PropsWithChildren<PluridApplicationConfiguratorProperties>> = (\n properties,\n) => {\n /** context */\n const context = useContext(Context);\n\n if (!context) {\n return (<></>);\n }\n\n const {\n registerPubSub,\n } = context;\n\n\n /** properties */\n const {\n /** own */\n configuration,\n pubsub,\n\n /** state */\n stateConfiguration,\n\n /** dispatch */\n dispatchSetConfiguration,\n } = properties;\n\n\n /** references */\n const configuratorElement: React.RefObject<HTMLDivElement> = useRef(null);\n\n\n /** effects */\n /**\n * Handle configuration.\n */\n useEffect(() => {\n const computedConfiguration = generalEngine.configuration.merge(\n configuration,\n stateConfiguration,\n );\n dispatchSetConfiguration(computedConfiguration);\n }, [\n configuration,\n ]);\n\n /**\n * Handle Publish/Subscribe.\n */\n useEffect(() => {\n if (pubsub) {\n registerPubSub(pubsub);\n }\n }, [\n pubsub,\n ]);\n\n\n /** render */\n return (\n <StyledPluridApplicationConfigurator\n ref={configuratorElement}\n data-plurid-entity={PLURID_ENTITY_APPLICATION_CONFIGURATOR}\n />\n );\n}\n\n\nconst mapStateToProps = (\n state: AppState,\n): PluridApplicationConfiguratorStateProperties => ({\n stateConfiguration: selectors.configuration.getConfiguration(state),\n});\n\n\nconst mapDispatchToProps = (\n dispatch: ThunkDispatch<{}, {}, AnyAction>,\n): PluridApplicationConfiguratorDispatchProperties => ({\n dispatchSetConfiguration: (\n payload,\n ) => dispatch(\n actions.configuration.setConfiguration(payload)\n ),\n});\n\n\nconst ConnectedPluridApplicationConfigurator = connect(\n mapStateToProps,\n mapDispatchToProps,\n null,\n {\n context: StateContext,\n },\n)(PluridApplicationConfigurator);\n// #endregion module\n\n\n\n// #region exports\nexport default ConnectedPluridApplicationConfigurator;\n// #endregion exports\n","// #region imports\n // #region libraries\n import styled from 'styled-components';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\nexport const StyledPluridPlaneConfigurator = styled.div`\n position: absolute;\n height: 0;\n width: 0;\n user-select: none;\n pointer-events: none;\n`;\n// #endregion module\n","// #region imports\n // #region libraries\n import React, {\n useRef,\n useState,\n useEffect,\n } from 'react';\n\n import {\n AnyAction,\n ThunkDispatch,\n } from '@reduxjs/toolkit';\n import { connect } from 'react-redux';\n\n\n import themes from '@plurid/plurid-themes';\n\n import {\n PLURID_ENTITY_PLANE_CONFIGURATOR,\n } from '@plurid/plurid-data';\n // #endregion libraries\n\n\n // #region external\n import { AppState } from '~services/state/store';\n import StateContext from '~services/state/context';\n // import selectors from '~services/state/selectors';\n // import actions from '~services/state/actions';\n\n import {\n planes,\n } from '~services/engine';\n // #endregion external\n\n\n // #region internal\n import {\n StyledPluridPlaneConfigurator,\n } from './styled';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nconst {\n getPluridPlaneIDByData,\n} = planes;\n\n\n\nexport interface PluridPlaneConfiguratorOwnProperties {\n // #region required\n // #region values\n theme: keyof typeof themes;\n style: React.CSSProperties;\n // #endregion values\n // #endregion required\n}\n\nexport interface PluridPlaneConfiguratorStateProperties {\n}\n\nexport interface PluridPlaneConfiguratorDispatchProperties {\n}\n\nexport type PluridPlaneConfiguratorProperties = PluridPlaneConfiguratorOwnProperties\n & PluridPlaneConfiguratorStateProperties\n & PluridPlaneConfiguratorDispatchProperties;\n\n\n/**\n * Goes up the tree to find the first plurid plane\n * and update it's properties.\n *\n * @param properties\n */\nconst PluridPlaneConfigurator: React.FC<React.PropsWithChildren<PluridPlaneConfiguratorProperties>> = (\n properties,\n) => {\n // #region properties\n const {\n // #region required\n // #region values\n theme,\n style,\n // #endregion values\n // #endregion required\n } = properties;\n // #endregion properties\n\n\n // #region references\n const configuratorElement: React.RefObject<HTMLDivElement> = useRef(null);\n // #endregion references\n\n\n // #region state\n const [planePlaneID, setParentPlaneID] = useState('');\n // #endregion state\n\n\n // #region effects\n /**\n * Get Parent Plane ID\n * Get Plurid Link Coordinates\n */\n useEffect(() => {\n const parentPlaneID = getPluridPlaneIDByData(\n configuratorElement.current,\n );\n setParentPlaneID(parentPlaneID);\n }, []);\n // #endregion effects\n\n\n // #region render\n return (\n <StyledPluridPlaneConfigurator\n ref={configuratorElement}\n data-plurid-entity={PLURID_ENTITY_PLANE_CONFIGURATOR}\n />\n );\n // #endregion render\n}\n\n\nconst mapStateToProperties = (\n state: AppState,\n): PluridPlaneConfiguratorStateProperties => ({\n});\n\n\nconst mapDispatchToProperties = (\n dispatch: ThunkDispatch<{}, {}, AnyAction>,\n): PluridPlaneConfiguratorDispatchProperties => ({\n});\n\n\nconst ConnectedPluridPlaneConfigurator = connect(\n mapStateToProperties,\n mapDispatchToProperties,\n null,\n {\n context: StateContext,\n },\n)(PluridPlaneConfigurator);\n// #endregion module\n\n\n\n// #region exports\nexport default ConnectedPluridPlaneConfigurator;\n// #endregion exports\n","// #region imports\n // #region libraries\n import styled from 'styled-components';\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n // #region libraries\n// #region imports\n\n\n\n// #region module\nexport interface IStyledExternalPlane {\n theme: Theme;\n}\n\nexport const StyledExternalPlane = styled.div<IStyledExternalPlane>`\n`;\n// #region module\n","// #region imports\n // #region libraries\n import React, {\n useRef,\n useState,\n useEffect,\n } from 'react';\n\n import {\n AnyAction,\n ThunkDispatch,\n } from '@reduxjs/toolkit';\n import { connect } from 'react-redux';\n\n import fetch from 'cross-fetch';\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n\n import {\n PluridRouteComponentProperty,\n } from '@plurid/plurid-data';\n\n import {\n ElementQLClient,\n } from '@plurid/elementql-client-react';\n // #endregion libraries\n\n\n // #region external\n import {\n PluridReactFunctionalComponent,\n } from '~data/interfaces';\n\n import { AppState } from '~services/state/store';\n import StateContext from '~services/state/context';\n import selectors from '~services/state/selectors';\n // import actions from '~services/state/actions';\n // #endregion external\n\n\n // #region internal\n import {\n StyledExternalPlane,\n } from './styled';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nconst getPttpUrl = (\n path: string,\n) => {\n // console.log('getPttpUrl path', path);\n const re = /^pttp:\\/\\/(\\w+(\\.|:)\\w+)\\/?/;\n const match = path.match(re);\n // console.log('getPttpUrl match', match);\n\n if (!match) {\n return {\n domain: '',\n url: '',\n };\n }\n\n const domain = match[1];\n const protocol = 'http';\n const url = `${protocol}://${domain}/pttp`\n return {\n domain,\n url,\n };\n}\n\nconst getPttpPath = (\n domain: string,\n path: string,\n) => {\n if (!domain) {\n return;\n }\n\n const pttpPath = path.replace(`pttp://${domain}`, '');\n\n return pttpPath;\n}\n\nconst elementRequest = async (\n url: string,\n path: string,\n) => {\n try {\n // console.log('elementRequest url', url);\n // console.log('elementRequest path', path);\n\n const response = await fetch(\n url,\n {\n method: 'post',\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n path,\n }),\n credentials: 'include',\n },\n );\n // console.log('response', response);\n\n const data = await response.json();\n // console.log('data', data);\n\n if (!data.element) {\n return;\n }\n\n const {\n element,\n } = data;\n\n const elementQLClient = new ElementQLClient({\n url: element.url,\n });\n\n const {\n status,\n Elements,\n }: any = await elementQLClient.get(\n element.json,\n 'json',\n );\n\n if (!status) {\n return;\n }\n\n const Element = Elements[element.name];\n\n return () => Element;\n } catch (error) {\n // console.log('error', error);\n\n return;\n }\n}\n\n\nexport interface ExternalPlaneOwnProperties {\n}\n\nexport interface ExternalPlaneStateProperties {\n stateGeneralTheme: Theme;\n stateInteractionTheme: Theme;\n}\n\nexport interface ExternalPlaneDispatchProperties {\n}\n\nexport type ExternalPlaneProperties =\n & ExternalPlaneOwnProperties\n & ExternalPlaneStateProperties\n & ExternalPlaneDispatchProperties;\n\n\nconst ExternalPlane: PluridReactFunctionalComponent<\n ExternalPlaneProperties,\n PluridRouteComponentProperty\n> = (\n properties,\n) => {\n // #region properties\n const {\n // #region required\n // #region values\n plurid,\n // #endregion values\n // #endregion required\n\n // #region state\n // stateGeneralTheme,\n // stateInteractionTheme,\n // #endregion state\n } = properties;\n\n const route = plurid.value;\n // #endregion properties\n\n\n // #region references\n const mounted = useRef(false);\n // #endregion references\n\n\n // #region state\n const [\n Component,\n setComponent,\n ] = useState<React.FC<any> | null>();\n // #endregion state\n\n\n // #region effects\n useEffect(() => {\n mounted.current = true;\n return () => {\n mounted.current = false;\n };\n });\n\n useEffect(() => {\n let loading = false;\n\n const load = async () => {\n // TOFIX - load only once\n if (loading) {\n return;\n }\n loading = true;\n\n try {\n // console.log('ExternalPlane > plurid', plurid);\n\n const {\n domain,\n url,\n } = getPttpUrl(\n route,\n );\n const pttpPath = getPttpPath(\n domain,\n route,\n );\n\n if (\n !url\n || !pttpPath\n ) {\n return;\n }\n\n const Component = await elementRequest(\n url,\n pttpPath,\n );\n\n if (!mounted.current) {\n return;\n }\n\n if (Component) {\n setComponent(Component);\n }\n } catch (error) {\n return;\n }\n }\n\n load();\n }, []);\n // #endregion effects\n\n\n // #region render\n return (\n <StyledExternalPlane>\n {Component && (\n <Component />\n )}\n </StyledExternalPlane>\n );\n // #endregion render\n}\n\n\nconst mapStateToProperties = (\n state: AppState,\n): ExternalPlaneStateProperties => ({\n stateGeneralTheme: selectors.themes.getGeneralTheme(state),\n stateInteractionTheme: selectors.themes.getInteractionTheme(state),\n});\n\n\nconst mapDispatchToProperties = (\n dispatch: ThunkDispatch<{}, {}, AnyAction>,\n): ExternalPlaneDispatchProperties => ({\n});\n\n\nconst ConnectedExternalPlane = connect(\n mapStateToProperties,\n mapDispatchToProperties,\n null,\n {\n context: StateContext,\n },\n)(ExternalPlane);\n// #endregion module\n\n\n\n// #region exports\nexport default ConnectedExternalPlane;\n// #endregion exports\n","// #region imports\n // #region libraries\n import styled from 'styled-components';\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n // #region libraries\n// #region imports\n\n\n\n// #region module\nexport interface IStyledIframePlane {\n theme: Theme;\n}\n\nexport const StyledIframePlane = styled.div<IStyledIframePlane>`\n`;\n// #region module\n","// #region imports\n // #region libraries\n import React from 'react';\n\n import {\n AnyAction,\n ThunkDispatch,\n } from '@reduxjs/toolkit';\n import { connect } from 'react-redux';\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n\n import {\n PluridRouteComponentProperty,\n } from '@plurid/plurid-data';\n // #endregion libraries\n\n\n // #region external\n import {\n PluridReactFunctionalComponent,\n } from '~data/interfaces';\n\n import { AppState } from '~services/state/store';\n import StateContext from '~services/state/context';\n import selectors from '~services/state/selectors';\n // import actions from '~services/state/actions';\n // #endregion external\n\n\n // #region internal\n import {\n StyledIframePlane,\n } from './styled';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nexport interface IframePlaneOwnProperties {\n}\n\nexport interface IframePlaneStateProperties {\n stateGeneralTheme: Theme;\n stateInteractionTheme: Theme;\n}\n\nexport interface IframePlaneDispatchProperties {\n}\n\nexport type IframePlaneProperties =\n & IframePlaneOwnProperties\n & IframePlaneStateProperties\n & IframePlaneDispatchProperties;\n\nconst IframePlane: PluridReactFunctionalComponent<\n IframePlaneProperties,\n PluridRouteComponentProperty\n> = (\n properties,\n) => {\n // #region properties\n const {\n // #region required\n // #region values\n plurid,\n // #endregion values\n // #endregion required\n\n // // #region state\n // stateGeneralTheme,\n // stateInteractionTheme,\n // // #endregion state\n } = properties;\n\n const route = plurid.value;\n // #endregion properties\n\n\n // #region render\n return (\n <StyledIframePlane>\n <iframe src={route} />\n </StyledIframePlane>\n );\n // #endregion render\n}\n\n\nconst mapStateToProperties = (\n state: AppState,\n): IframePlaneStateProperties => ({\n stateGeneralTheme: selectors.themes.getGeneralTheme(state),\n stateInteractionTheme: selectors.themes.getInteractionTheme(state),\n});\n\n\nconst mapDispatchToProperties = (\n dispatch: ThunkDispatch<{}, {}, AnyAction>,\n): IframePlaneDispatchProperties => ({\n});\n\n\nconst ConnectedIframePlane = connect(\n mapStateToProperties,\n mapDispatchToProperties,\n null,\n {\n context: StateContext,\n },\n)(IframePlane);\n// #endregion module\n\n\n\n// #region exports\nexport default ConnectedIframePlane;\n// #endregion exports\n","// #region imports\n // #region libraries\n import React, {\n useRef,\n useEffect,\n } from 'react';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\nexport interface VirtualListItemOwnProperties {\n top: number;\n index: number;\n element: JSX.Element;\n setHeight(value: number, index: number): void;\n}\n\nconst VirtualListItem: React.FC<VirtualListItemOwnProperties> = (\n properties,\n) => {\n const {\n top,\n index,\n element,\n setHeight,\n } = properties;\n\n const el = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (el.current) {\n setHeight(el.current.offsetHeight, index);\n }\n }, [\n el.current,\n ])\n\n return (\n <div\n ref={el}\n style={{\n position: 'absolute',\n top: top + 'px',\n }}\n >\n {element}\n </div>\n );\n}\n// #endregion module\n\n\n\n// #region exports\nexport default VirtualListItem;\n// #endregion exports\n","// #region imports\n // #region libraries\n import React, {\n useRef,\n useEffect,\n useState,\n } from 'react';\n\n import {\n AnyAction,\n ThunkDispatch,\n } from '@reduxjs/toolkit';\n import { connect } from 'react-redux';\n\n\n import {\n universal,\n } from '@plurid/plurid-ui-components-react';\n\n import {\n mathematics,\n } from '@plurid/plurid-functions';\n // #endregion libraries\n\n\n // #region external\n import { AppState } from '~services/state/store';\n import StateContext from '~services/state/context';\n import selectors from '~services/state/selectors';\n // import actions from '~services/state/actions';\n import {\n ViewSize,\n } from '~services/state/modules/space/types';\n // #endregion external\n\n\n // #region internal\n import PluridVirtualListItem from './components/ListItem';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nconst {\n markers: {\n Spinner: PluridSpinner,\n },\n} = universal;\n\nexport interface PluridVirtualListOwnProperties {\n items: JSX.Element[];\n generalHeight?: number;\n}\n\nexport interface PluridVirtualListStateProperties {\n translationY: number,\n viewSize: ViewSize;\n}\n\nexport interface PluridVirtualListDispatchProperties {\n}\n\nexport type PluridVirtualListProperties = PluridVirtualListOwnProperties\n & PluridVirtualListStateProperties\n & PluridVirtualListDispatchProperties;\n\n\nconst PluridVirtualList: React.FC<PluridVirtualListProperties> = (\n properties,\n) => {\n /** properties */\n const {\n /** own */\n items,\n generalHeight,\n\n /** state */\n translationY,\n viewSize,\n } = properties;\n\n const _generalHeight = generalHeight || 100;\n\n\n /** references */\n const listElement = useRef<HTMLDivElement>(null);\n\n const rows = useRef<any[]>([]);\n const heights = useRef<number[]>(Array(items.length).fill(_generalHeight));\n\n\n /** state */\n const [start, setStart] = useState(0);\n const [end, setEnd] = useState(Math.floor(1000 / _generalHeight));\n const [elementHeight, setElementHeight] = useState(_generalHeight * (end - start));\n\n const [resizing, setResizing] = useState(false);\n\n\n /** handlers */\n const setHeight = (\n value: number,\n index: number,\n ) => {\n heights.current[index] = value;\n }\n\n const renderRows = () => {\n rows.current = [];\n\n for (let i = start; i <= end; i++) {\n const item = items[i];\n rows.current.push(\n <PluridVirtualListItem\n key={i + Math.random()}\n index={i}\n top={mathematics.arithmetic.sum(heights.current, i)}\n element={item}\n setHeight={setHeight}\n />\n );\n }\n return rows.current;\n }\n\n\n /** effects */\n useEffect(() => {\n if (heights.current) {\n const elementHeight = mathematics.arithmetic.sum(heights.current, heights.current.length);\n setElementHeight(elementHeight);\n }\n }, [\n start,\n end,\n heights.current,\n ]);\n\n useEffect(() => {\n let sum = 0;\n for (const [index, value] of heights.current.entries()) {\n sum += value;\n if (translationY < 0) {\n if (sum < Math.abs(translationY)) {\n setStart(index);\n }\n\n if (\n sum > Math.abs(translationY) + viewSize.height\n && sum < Math.abs(translationY) + viewSize.height + 400\n ) {\n setEnd(index);\n }\n } else {\n setStart(0);\n setEnd(10);\n }\n }\n }, [\n viewSize.height,\n translationY,\n ]);\n\n useEffect(() => {\n setResizing(true);\n\n setTimeout(() => {\n const elementHeight = mathematics.arithmetic.sum(heights.current, heights.current.length);\n setElementHeight(elementHeight);\n\n setResizing(false);\n }, 400);\n }, [\n viewSize,\n ]);\n\n\n /** render */\n return (\n <div\n style={{\n height: elementHeight,\n }}\n ref={listElement}\n >\n {resizing && (\n <>\n <PluridSpinner\n />\n </>\n )}\n {!resizing && (\n <>\n {renderRows()}\n </>\n )}\n </div>\n );\n}\n\n\nconst mapStateToProps = (\n state: AppState,\n): PluridVirtualListStateProperties => ({\n translationY: selectors.space.getTranslationY(state),\n viewSize: selectors.space.getViewSize(state),\n});\n\n\nconst mapDispatchToProps = (\n dispatch: ThunkDispatch<{}, {}, AnyAction>,\n): PluridVirtualListDispatchProperties => ({\n});\n\n\nconst ConnectedPluridVirtualList = connect(\n mapStateToProps,\n mapDispatchToProps,\n null,\n {\n context: StateContext,\n },\n)(PluridVirtualList);\n// #endregion module\n\n\n\n// #region exports\nexport default ConnectedPluridVirtualList;\n// #endregion exports\n","// #region imports\n // #region libraries\n import styled from 'styled-components';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\nexport const StyledPluridPlaneDebugger = styled.div`\n`;\n// #endregion module\n","// #region imports\n // #region libraries\n import React from 'react';\n\n import {\n AnyAction,\n ThunkDispatch,\n } from '@reduxjs/toolkit';\n import { connect } from 'react-redux';\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n // #endregion libraries\n\n\n // #region external\n import { AppState } from '~services/state/store';\n import StateContext from '~services/state/context';\n import selectors from '~services/state/selectors';\n // import actions from '~services/state/actions';\n // #endregion external\n\n\n // #region internal\n import {\n StyledPluridPlaneDebugger,\n } from './styled';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nexport interface PluridPlaneDebuggerOwnProperties {\n}\n\nexport interface PluridPlaneDebuggerStateProperties {\n stateGeneralTheme: Theme;\n stateInteractionTheme: Theme;\n}\n\nexport interface PluridPlaneDebuggerDispatchProperties {\n}\n\ntype PluridPlaneDebuggerProperties =\n & PluridPlaneDebuggerOwnProperties\n & PluridPlaneDebuggerStateProperties\n & PluridPlaneDebuggerDispatchProperties;\n\n\nconst PluridPlaneDebugger: React.FC<PluridPlaneDebuggerProperties> = (\n properties,\n) => {\n // #region properties\n // const {\n // /** state */\n // stateGeneralTheme,\n // stateInteractionTheme,\n // } = properties;\n // #endregion properties\n\n\n // #region render\n return (\n <StyledPluridPlaneDebugger>\n PluridPlaneDebugger\n </StyledPluridPlaneDebugger>\n );\n // #endregion render\n}\n\n\nconst mapStateToProperties = (\n state: AppState,\n): PluridPlaneDebuggerStateProperties => ({\n stateGeneralTheme: selectors.themes.getGeneralTheme(state),\n stateInteractionTheme: selectors.themes.getInteractionTheme(state),\n});\n\n\nconst mapDispatchToProperties = (\n dispatch: ThunkDispatch<{}, {}, AnyAction>,\n): PluridPlaneDebuggerDispatchProperties => ({\n});\n\n\nconst ConnectedPluridPlaneDebugger = connect(\n mapStateToProperties,\n mapDispatchToProperties,\n null,\n {\n context: StateContext,\n },\n)(PluridPlaneDebugger);\n// #endregion module\n\n\n\n// #region exports\nexport default ConnectedPluridPlaneDebugger;\n// #endregion exports\n","// #region imports\n // #region libraries\n import styled from 'styled-components';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\nexport const StyledPluridSpaceDebugger = styled.div`\n`;\n// #endregion module\n","// #region imports\n // #region libraries\n import React from 'react';\n\n import {\n AnyAction,\n ThunkDispatch,\n } from '@reduxjs/toolkit';\n import { connect } from 'react-redux';\n\n\n import {\n Theme,\n } from '@plurid/plurid-themes';\n // #endregion libraries\n\n\n // #region external\n import { AppState } from '~services/state/store';\n import StateContext from '~services/state/context';\n import selectors from '~services/state/selectors';\n // import actions from '~services/state/actions';\n // #endregion external\n\n\n // #region internal\n import {\n StyledPluridSpaceDebugger,\n } from './styled';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nexport interface PluridSpaceDebuggerOwnProperties {\n}\n\nexport interface PluridSpaceDebuggerStateProperties {\n stateGeneralTheme: Theme;\n stateInteractionTheme: Theme;\n}\n\nexport interface PluridSpaceDebuggerDispatchProperties {\n}\n\nexport type PluridSpaceDebuggerProperties =\n & PluridSpaceDebuggerOwnProperties\n & PluridSpaceDebuggerStateProperties\n & PluridSpaceDebuggerDispatchProperties;\n\n\nconst PluridSpaceDebugger: React.FC<PluridSpaceDebuggerProperties> = (\n properties,\n) => {\n // #region properties\n // const {\n // /** state */\n // stateGeneralTheme,\n // stateInteractionTheme,\n // } = properties;\n // #endregion properties\n\n\n // #region render\n return (\n <StyledPluridSpaceDebugger>\n PluridSpaceDebugger\n </StyledPluridSpaceDebugger>\n );\n // #endregion render\n}\n\n\nconst mapStateToProperties = (\n state: AppState,\n): PluridSpaceDebuggerStateProperties => ({\n stateGeneralTheme: selectors.themes.getGeneralTheme(state),\n stateInteractionTheme: selectors.themes.getInteractionTheme(state),\n});\n\n\nconst mapDispatchToProperties = (\n dispatch: ThunkDispatch<{}, {}, AnyAction>,\n): PluridSpaceDebuggerDispatchProperties => ({\n});\n\n\nconst ConnectedPluridSpaceDebugger = connect(\n mapStateToProperties,\n mapDispatchToProperties,\n null,\n {\n context: StateContext,\n },\n)(PluridSpaceDebugger);\n// #endregion module\n\n\n\n// #region exports\nexport default ConnectedPluridSpaceDebugger;\n// #endregion exports\n","// #region imports\n // #region libraries\n import themes from '@plurid/plurid-themes';\n\n import {\n PluridMetastate,\n PluridRoute,\n } from '@plurid/plurid-data';\n // #endregion libraries\n\n\n // #region external\n import {\n PluridReactComponent,\n PluridRouteMatch,\n } from '~data/interfaces';\n\n import {\n collectApplicationsFromPath,\n } from '../router';\n\n import {\n computeApplication,\n } from '../computing';\n // #endregion external\n// #endregion imports\n\n\n\n// #region module\nexport const serverComputeMetastate = async (\n isoMatch: PluridRouteMatch,\n paths: PluridRoute<PluridReactComponent>[],\n globals: Record<string, string> | undefined,\n hostname = 'origin',\n): Promise<PluridMetastate> => {\n const protocol = 'http';\n\n const pluridApplications = await collectApplicationsFromPath(\n isoMatch,\n protocol,\n hostname,\n globals,\n );\n\n const states: any = {};\n\n for (const application of pluridApplications) {\n const {\n planes,\n view,\n configuration,\n } = application;\n // console.log('serverComputeMetastate view', view);\n\n // if (view.length === 0) {\n // continue;\n // }\n\n const {\n computedTree,\n appConfiguration,\n } = computeApplication(\n planes,\n (isoMatch.data as any).defaultConfiguration,\n view,\n hostname,\n );\n // console.log({\n // computedTree,\n // });\n\n const state = {\n configuration: {\n ...appConfiguration,\n },\n shortcuts: {\n global: true,\n },\n themes: {\n general: themes.plurid,\n interaction: themes.plurid,\n },\n ui: {\n toolbarScrollPosition: 50,\n },\n space: {\n loading: false,\n resolvedLayout: false,\n animatedTransform: false,\n transform: 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)',\n scale: 1,\n rotationX: 0,\n rotationY: 0,\n translationX: 0,\n translationY: 0,\n translationZ: 0,\n tree: computedTree,\n activeUniverseID: '',\n camera: {\n x: 0,\n y: 0,\n z: 0,\n },\n viewSize: {\n width: 1440,\n height: 821,\n },\n spaceSize: {\n width: 1440,\n height: 821,\n depth: 0,\n topCorner: {\n x: 0,\n y: 0,\n z: 0,\n },\n },\n view,\n culledView: [],\n },\n };\n\n // const id = matchedRoute.path.value;\n const id = (isoMatch.data as any).value;\n // console.log('matchedRoute id', id);\n\n states[id] = state;\n }\n\n // console.log(states);\n\n return {\n states,\n };\n}\n// #endregion module\n","// #region imports\n // #region libraries\n import {\n useState,\n useEffect,\n } from 'react';\n\n import {\n storage,\n } from '@plurid/plurid-functions';\n\n import {\n PLURID_ROUTER_STORAGE,\n PLURID_ROUTER_LOCATION_STORED,\n } from '@plurid/plurid-data';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\nexport const usePluridRouter = () => {\n // #region state\n const [\n routerValue,\n setRouterValue,\n ] = useState('');\n // #endregion state\n\n\n // #region effects\n useEffect(() => {\n const fetchState = () => {\n const state = storage.loadState(PLURID_ROUTER_STORAGE);\n if (state) {\n setRouterValue(state);\n }\n }\n fetchState();\n\n window.addEventListener(PLURID_ROUTER_LOCATION_STORED, fetchState);\n\n return () => {\n window.removeEventListener(PLURID_ROUTER_LOCATION_STORED, fetchState);\n }\n }, []);\n // #endregion effects\n\n\n return routerValue;\n}\n// #endregion module\n","// #region imports\n // #region libraries\n import {\n Theme,\n } from '@plurid/plurid-themes';\n\n import {\n // #region constants\n PLURID_PUBSUB_TOPIC,\n // #endregion constants\n\n\n // #region interfaces\n PluridPlane,\n PluridView,\n PluridUniverse,\n PluridConfiguration,\n PluridPartialConfiguration,\n FlatPluridConfiguration,\n PluridRouterProperties,\n RecursivePartial,\n\n PluridRoute,\n PluridRouteSpace,\n PluridRouteUniverse,\n PluridRoutePlane,\n\n ComponentWithPlurid,\n PluridPlaneComponentProperty,\n PluridRouteComponentProperty,\n\n PluridPreserve,\n PluridPreserveTransmission,\n\n PluridPubSubPublishMessage,\n PluridPubSubSubscribeMessage,\n\n PluridApi,\n PluridStore,\n PluridStorageAdapter,\n // #endregion interfaces\n\n\n // #region enumerations\n LAYOUT_TYPES as SPACE_LAYOUT,\n SIZES,\n TRANSFORM_MODES,\n TRANSFORM_TOUCHES,\n PLURID_ROUTER_LOCATION_CHANGED,\n PLURID_ROUTER_LOCATION_STORED,\n // #endregion enumerations\n } from '@plurid/plurid-data';\n\n import {\n IsoMatcher as PluridIsoMatcher,\n RouteParser as PluridRouteParser,\n pluridRouterNavigate,\n definePluridConfiguration,\n } from '@plurid/plurid-engine';\n\n import PluridPubSub from '@plurid/plurid-pubsub';\n // #endregion libraries\n\n\n // #region internal\n import {\n PluridReactComponent,\n PluridReactPlaneComponent,\n PluridReactRouteComponent,\n PluridReactPlane,\n PluridReactRoute,\n PluridReactRoutePlane,\n PluridRouteMatch,\n } from './data/interfaces';\n\n import PluridApplication from './containers/Application';\n import PluridRouterBrowser from './containers/RouterBrowser';\n import PluridRouterStatic from './containers/RouterStatic';\n import PluridProvider from './containers/Provider';\n\n import PluridLink from './components/links/Link';\n import PluridRouterLink from './components/links/RouterLink';\n import PluridApplicationConfigurator from './components/utilities/ApplicationConfigurator';\n import PluridPlaneConfigurator from './components/utilities/PlaneConfigurator';\n import PluridExternalPlane from './components/planes/ExternalPlane';\n import PluridIframePlane from './components/planes/IframePlane';\n import PluridVirtualList from './components/virtuals/List';\n\n import PluridPlaneBridge from './components/structural/Plane/components/PlaneBridge';\n import PluridPlaneContent from './components/structural/Plane/components/PlaneContent';\n import PluridPlaneControls from './components/structural/Plane/components/PlaneControls';\n import PluridPlaneDebugger from './components/structural/Plane/components/PlaneDebugger';\n\n import PluridSpaceDebugger from './components/structural/Space/components/SpaceDebugger';\n\n import pluridStateModules from './services/state/modules';\n\n import {\n serverComputeMetastate,\n } from './services/logic/server';\n\n import {\n getDirectPlaneMatch,\n } from './services/logic/router';\n\n import {\n encodeViewpoint,\n decodeViewpoint,\n } from './services/logic/viewpoint';\n\n import {\n usePluridRouter,\n } from './services/hooks';\n\n // Escape-hatch primitives (Tier 3): the same building blocks the engine uses internally, so a\n // power-user can read derived state and compute \"did the arrangement change\" without forking.\n import pluridSelectors from './services/state/selectors';\n import {\n arrangementSignature,\n } from './services/logic/arrangement/signature';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\n// PluridIsoMatcher / PluridRouteParser are imported by name from the engine (above) so\n// TS can reference them as external named imports in this package's .d.ts (a namespace\n// member would inline anonymously and trip TS4094 on the classes' private members).\n\n\nconst internals = {\n PluridPlaneBridge,\n PluridPlaneContent,\n PluridPlaneControls,\n PluridPlaneDebugger,\n PluridSpaceDebugger,\n};\n\n/**\n * Components and utilities.\n */\nconst Plurid = {\n // #region Components\n Application: PluridApplication,\n RouterStatic: PluridRouterStatic,\n RouterBrowser: PluridRouterBrowser,\n Provider: PluridProvider,\n\n Link: PluridLink,\n RouterLink: PluridRouterLink,\n ApplicationConfigurator: PluridApplicationConfigurator,\n PlaneConfigurator: PluridPlaneConfigurator,\n ExternalPlane: PluridExternalPlane,\n IframePlane: PluridIframePlane,\n VirtualList: PluridVirtualList,\n // #endregion Components\n\n\n // #region Utilities\n /** Enumerations */\n SPACE_LAYOUT,\n SIZES,\n TRANSFORM_MODES,\n TRANSFORM_TOUCHES,\n\n /** PubSub */\n PubSub: PluridPubSub,\n PUBSUB_TOPIC: PLURID_PUBSUB_TOPIC,\n\n /** Server */\n serverComputeMetastate,\n\n /** Router */\n IsoMatcher: PluridIsoMatcher,\n routerNavigate: pluridRouterNavigate,\n\n /** Viewpoint */\n encodeViewpoint,\n decodeViewpoint,\n\n /** Escape-hatch primitives */\n selectors: pluridSelectors,\n arrangementSignature,\n\n internals,\n // #endregion Utilities\n};\n\n\ntype PluridRouterPartialProperties = Partial<PluridRouterProperties<PluridReactComponent>>;\n// #endregion module\n\n\n\n// #region exports\nexport {\n // #region Components\n PluridApplication,\n PluridRouterBrowser,\n PluridRouterStatic,\n PluridProvider,\n\n PluridLink,\n PluridRouterLink,\n PluridApplicationConfigurator,\n PluridPlaneConfigurator,\n PluridExternalPlane,\n PluridIframePlane,\n PluridVirtualList,\n // #endregion Components\n\n\n // #region Utilities\n /** Enumerations */\n SPACE_LAYOUT,\n SIZES,\n TRANSFORM_MODES,\n TRANSFORM_TOUCHES,\n PLURID_ROUTER_LOCATION_CHANGED,\n PLURID_ROUTER_LOCATION_STORED,\n\n /** Engine */\n PluridIsoMatcher,\n PluridRouteParser,\n definePluridConfiguration,\n\n /** PubSub */\n PluridPubSub,\n PLURID_PUBSUB_TOPIC,\n\n /** Server */\n serverComputeMetastate,\n\n /** Router */\n pluridRouterNavigate,\n usePluridRouter,\n\n getDirectPlaneMatch,\n\n /** Viewpoint — encode/decode the camera ↔ the `v`-style string, for full host control */\n encodeViewpoint,\n decodeViewpoint,\n\n /** state */\n pluridStateModules,\n\n /**\n * Escape-hatch primitives — the engine's own building blocks, for hosts building custom\n * controls/layout: `pluridSelectors` (read derived state off the store from `onReady`) +\n * `arrangementSignature` (the structural hash undo/collaboration agree on). Lower-level geometry\n * (tree reconcile, location compute, interaction) lives on `@plurid/plurid-engine` (`space.tree`,\n * `space.location`, `interaction`).\n */\n pluridSelectors,\n arrangementSignature,\n\n internals,\n // #endregion Utilities\n};\n\n\n// Type-only re-exports use `export type` so esbuild (per-file transpile) elides them at\n// runtime, instead of emitting runtime re-exports of names that have no JS value.\nexport type {\n Theme,\n\n PluridPlane,\n PluridView,\n PluridUniverse,\n\n PluridRouterProperties,\n PluridRouterPartialProperties,\n\n PluridRoute,\n PluridRouteSpace,\n PluridRouteUniverse,\n PluridRoutePlane,\n\n ComponentWithPlurid,\n PluridPlaneComponentProperty,\n PluridRouteComponentProperty,\n\n PluridReactComponent,\n PluridReactPlane,\n PluridReactPlaneComponent,\n PluridReactRouteComponent,\n PluridReactRoute,\n PluridReactRoutePlane,\n PluridRouteMatch,\n\n PluridPreserve,\n PluridPreserveTransmission,\n\n PluridPubSubPublishMessage,\n PluridPubSubSubscribeMessage,\n\n PluridApi,\n PluridStore,\n PluridStorageAdapter,\n\n PluridConfiguration,\n PluridPartialConfiguration,\n FlatPluridConfiguration,\n RecursivePartial,\n};\n\n\nexport default Plurid;\n// #endregion exports\n"]}