@plurid/plurid-engine 0.0.0-2 → 0.0.0-20

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 (60) hide show
  1. package/distribution/index.d.mts +734 -0
  2. package/distribution/index.d.ts +734 -3
  3. package/distribution/index.js +3317 -2495
  4. package/distribution/index.js.map +1 -1
  5. package/distribution/index.mjs +3426 -0
  6. package/distribution/index.mjs.map +1 -0
  7. package/package.json +71 -79
  8. package/distribution/data/constants/index.d.ts +0 -1
  9. package/distribution/data/interfaces/index.d.ts +0 -4
  10. package/distribution/functions/index.d.ts +0 -2
  11. package/distribution/functions/navigate/index.d.ts +0 -1
  12. package/distribution/functions/template/index.d.ts +0 -1
  13. package/distribution/index.es.js +0 -2590
  14. package/distribution/index.es.js.map +0 -1
  15. package/distribution/modules/general/configuration/index.d.ts +0 -2
  16. package/distribution/modules/general/index.d.ts +0 -3
  17. package/distribution/modules/general/tree/index.d.ts +0 -6
  18. package/distribution/modules/index.d.ts +0 -9
  19. package/distribution/modules/interaction/direction/index.d.ts +0 -2
  20. package/distribution/modules/interaction/index.d.ts +0 -5
  21. package/distribution/modules/interaction/mathematics/matrix/index.d.ts +0 -31
  22. package/distribution/modules/interaction/mathematics/quaternion/index.d.ts +0 -79
  23. package/distribution/modules/interaction/mathematics/transform/index.d.ts +0 -69
  24. package/distribution/modules/internationalization/index.d.ts +0 -3
  25. package/distribution/modules/planes/index.d.ts +0 -2
  26. package/distribution/modules/planes/logic/index.d.ts +0 -6
  27. package/distribution/modules/planes/registrar/index.d.ts +0 -3
  28. package/distribution/modules/planes/registrar/object.d.ts +0 -14
  29. package/distribution/modules/planes/registrar/utilities.d.ts +0 -6
  30. package/distribution/modules/routing/IsoMatcher/index.d.ts +0 -44
  31. package/distribution/modules/routing/IsoMatcher/interfaces.d.ts +0 -57
  32. package/distribution/modules/routing/Parser/index.d.ts +0 -21
  33. package/distribution/modules/routing/Parser/interfaces.d.ts +0 -31
  34. package/distribution/modules/routing/Parser/logic.d.ts +0 -68
  35. package/distribution/modules/routing/index.d.ts +0 -7
  36. package/distribution/modules/routing/logic/general/index.d.ts +0 -6
  37. package/distribution/modules/routing/logic/index.d.ts +0 -3
  38. package/distribution/modules/routing/logic/utilities/index.d.ts +0 -29
  39. package/distribution/modules/routing/logic/validity/index.d.ts +0 -3
  40. package/distribution/modules/space/index.d.ts +0 -6
  41. package/distribution/modules/space/layout/column.d.ts +0 -3
  42. package/distribution/modules/space/layout/faceToFace.d.ts +0 -3
  43. package/distribution/modules/space/layout/index.d.ts +0 -6
  44. package/distribution/modules/space/layout/row.d.ts +0 -3
  45. package/distribution/modules/space/layout/sheaves.d.ts +0 -3
  46. package/distribution/modules/space/layout/zigZag.d.ts +0 -3
  47. package/distribution/modules/space/location/index.d.ts +0 -2
  48. package/distribution/modules/space/location/logic.d.ts +0 -22
  49. package/distribution/modules/space/tree/index.d.ts +0 -3
  50. package/distribution/modules/space/tree/logic.d.ts +0 -32
  51. package/distribution/modules/space/tree/object.d.ts +0 -13
  52. package/distribution/modules/space/utilities/index.d.ts +0 -16
  53. package/distribution/modules/space/view/index.d.ts +0 -2
  54. package/distribution/modules/space/view/logic.d.ts +0 -13
  55. package/distribution/modules/state/compute/index.d.ts +0 -3
  56. package/distribution/modules/state/compute/space/index.d.ts +0 -3
  57. package/distribution/modules/state/compute/themes/index.d.ts +0 -3
  58. package/distribution/modules/state/index.d.ts +0 -3
  59. package/distribution/modules/state/local/index.d.ts +0 -3
  60. package/distribution/modules/utilities/index.d.ts +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../source/modules/general/index.ts","../source/modules/general/configuration/index.ts","../source/modules/general/tree/index.ts","../source/modules/interaction/index.ts","../source/modules/interaction/direction/index.ts","../source/modules/interaction/mathematics/matrix/index.ts","../source/modules/interaction/mathematics/quaternion/index.ts","../source/modules/interaction/mathematics/transform/index.ts","../source/modules/interaction/mathematics/transform/general/index.ts","../source/modules/interaction/mathematics/transform/matrix3d/index.ts","../source/modules/internationalization/index.ts","../source/modules/planes/index.ts","../source/modules/planes/logic/index.ts","../source/modules/routing/index.ts","../source/modules/routing/Parser/logic.ts","../source/modules/routing/logic/general/index.ts","../source/modules/routing/logic/validity/index.ts","../source/modules/utilities/index.ts","../source/modules/routing/logic/utilities/index.ts","../source/modules/routing/IsoMatcher/index.ts","../source/modules/routing/Parser/index.ts","../source/modules/planes/registrar/object.ts","../source/modules/planes/registrar/utilities.ts","../source/modules/space/index.ts","../source/modules/space/layout/index.ts","../source/modules/space/location/index.ts","../source/modules/space/utilities/index.ts","../source/modules/space/location/logic.ts","../source/modules/space/layout/column.ts","../source/modules/space/layout/row.ts","../source/modules/space/layout/faceToFace.ts","../source/modules/space/layout/sheaves.ts","../source/modules/space/layout/zigZag.ts","../source/modules/space/tree/index.ts","../source/modules/space/tree/logic.ts","../source/modules/space/tree/object.ts","../source/modules/space/view/index.ts","../source/modules/space/view/logic.ts","../source/modules/state/index.ts","../source/modules/state/compute/space/index.ts","../source/modules/state/compute/themes/index.ts","../source/modules/state/compute/index.ts","../source/modules/state/local/index.ts","../source/functions/template/index.ts","../source/functions/navigate/index.ts"],"names":["general_exports","multiplyMatrices","scaleMatrix","translateMatrix","location","url","resolvers","absoluteRoute","protocols","plane","route","tree_exports","utilities_exports","page","ROOTS_GAP","defaultConfiguration","mathematics","toRadians","updateTreePlane","updatedChild"],"mappings":"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","file":"index.mjs","sourcesContent":["// #region imports\n // #region internal\n import * as configuration from './configuration';\n import * as tree from './tree';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region exports\nexport {\n configuration,\n tree,\n};\n// #endregion exports\n","// #region imports\n // #region libraries\n import {\n PluridPartialConfiguration,\n FlatPluridConfiguration,\n PluridConfigurationTheme,\n PluridConfiguration,\n RecursivePartial,\n\n defaultConfiguration,\n } from '@plurid/plurid-data';\n\n import {\n objects,\n } from '@plurid/plurid-functions';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\nconst resolveTheme = (\n theme: string | number | symbol | RecursivePartial<PluridConfigurationTheme> | undefined,\n type: 'general' | 'interaction',\n) => {\n if (!theme) {\n return 'plurid';\n }\n\n if (typeof theme === 'string') {\n return theme;\n }\n\n if (typeof theme !== 'object') {\n return 'plurid';\n }\n\n const {\n general,\n interaction,\n } = theme;\n\n if (type === 'general' && general) {\n return general;\n }\n\n if (type === 'interaction' && interaction) {\n return interaction;\n }\n\n return 'plurid';\n}\n\n\nexport const merge = (\n configuration?: PluridPartialConfiguration,\n target?: PluridConfiguration,\n): PluridConfiguration => {\n const targetConfiguration: PluridConfiguration = {\n ...objects.clone(defaultConfiguration),\n ...objects.clone(target || {}),\n };\n\n if (!configuration) {\n return targetConfiguration;\n }\n\n const mergedConfiguration = objects.merge(\n targetConfiguration,\n configuration,\n {\n 'global.theme': () => {\n return {\n general: resolveTheme(configuration.global?.theme, 'general') as any,\n interaction: resolveTheme(configuration.global?.theme, 'interaction') as any,\n };\n },\n },\n );\n\n return mergedConfiguration;\n}\n\n\n/**\n * Build a full `PluridConfiguration` from a FLAT shorthand, so consumers can configure the common\n * options without authoring the 5-level nested object. Flat fields are expanded to their nested\n * locations, then `extend` (a normal nested partial) is layered on top, then the whole thing is\n * merged over the defaults via `merge` (which also resolves `theme`). Anything omitted keeps its\n * default. Returns a complete, ready-to-use configuration.\n *\n * @example\n * definePluridConfiguration({ theme: 'plurid', center: true, planeWidth: 0.32, bridgeLength: 160 })\n */\nexport const definePluridConfiguration = (\n flat: FlatPluridConfiguration = {},\n): PluridConfiguration => {\n const partial: PluridPartialConfiguration = {};\n\n // #region global\n const global: PluridPartialConfiguration['global'] = {};\n if (flat.theme !== undefined) { global.theme = flat.theme; }\n if (flat.micro !== undefined) { global.micro = flat.micro; }\n if (flat.transparentUI !== undefined) { global.transparentUI = flat.transparentUI; }\n if (flat.language !== undefined) { global.language = flat.language; }\n if (Object.keys(global).length > 0) { partial.global = global; }\n // #endregion global\n\n // #region space\n const space: PluridPartialConfiguration['space'] = {};\n if (flat.layout !== undefined) { space.layout = flat.layout; }\n if (flat.spaceDimensions !== undefined) { space.dimensions = flat.spaceDimensions; }\n if (flat.perspective !== undefined) { space.perspective = flat.perspective; }\n if (flat.center !== undefined) { space.center = flat.center; }\n if (flat.firstPerson !== undefined) { space.firstPerson = flat.firstPerson; }\n if (flat.collaboration !== undefined) { space.collaboration = flat.collaboration; }\n if (flat.undo !== undefined) { space.undo = flat.undo; }\n if (flat.viewpointURLWrite !== undefined) { space.viewpointURLWrite = flat.viewpointURLWrite; }\n if (flat.viewpointURLRestore !== undefined) { space.viewpointURLRestore = flat.viewpointURLRestore; }\n if (flat.viewpointURLParam !== undefined) { space.viewpointURLParam = flat.viewpointURLParam; }\n if (flat.viewpointURLDebounce !== undefined) { space.viewpointURLDebounce = flat.viewpointURLDebounce; }\n if (flat.timings !== undefined) { space.timings = flat.timings; }\n if (flat.gestures !== undefined) { space.gestures = flat.gestures; }\n if (flat.shortcuts !== undefined) { space.shortcuts = flat.shortcuts; }\n if (flat.transformLocks !== undefined) { space.transformLocks = flat.transformLocks; }\n if (flat.opaque !== undefined) { space.opaque = flat.opaque; }\n if (flat.camera !== undefined) { space.camera = flat.camera; }\n if (flat.transformOrigin !== undefined) { space.transformOrigin = flat.transformOrigin; }\n if (flat.transformMode !== undefined) { space.transformMode = flat.transformMode; }\n if (flat.transformMultimode !== undefined) { space.transformMultimode = flat.transformMultimode; }\n if (flat.transformTouch !== undefined) { space.transformTouch = flat.transformTouch; }\n if (flat.cullingDistance !== undefined) { space.cullingDistance = flat.cullingDistance; }\n if (flat.fadeInTime !== undefined) { space.fadeInTime = flat.fadeInTime; }\n if (flat.bridgeLength !== undefined || flat.bridgePlaneAngle !== undefined) {\n space.bridge = {};\n if (flat.bridgeLength !== undefined) { space.bridge.length = flat.bridgeLength; }\n if (flat.bridgePlaneAngle !== undefined) { space.bridge.planeAngle = flat.bridgePlaneAngle; }\n }\n if (Object.keys(space).length > 0) { partial.space = space; }\n // #endregion space\n\n // #region elements\n const elements: PluridPartialConfiguration['elements'] = {};\n const plane: NonNullable<PluridPartialConfiguration['elements']>['plane'] = {};\n if (flat.planeWidth !== undefined) { plane.width = flat.planeWidth; }\n if (flat.planeOpacity !== undefined) { plane.opacity = flat.planeOpacity; }\n if (flat.planeControls !== undefined) { plane.controls = { show: flat.planeControls }; }\n if (Object.keys(plane).length > 0) { elements.plane = plane; }\n if (flat.toolbar !== undefined) { elements.toolbar = { show: flat.toolbar }; }\n if (flat.viewcube !== undefined) { elements.viewcube = { show: flat.viewcube }; }\n if (flat.minimap !== undefined) { elements.minimap = { show: flat.minimap }; }\n if (Object.keys(elements).length > 0) { partial.elements = elements; }\n // #endregion elements\n\n // `extend` is the escape hatch for anything not covered above; merge it ON TOP of the\n // flat-expanded partial (so it wins) BEFORE the single `merge` over defaults — one `merge` call\n // means `theme` is resolved exactly once.\n const resolved = flat.extend\n ? objects.merge(partial, flat.extend) as PluridPartialConfiguration\n : partial;\n\n return merge(resolved);\n}\n// #endregion module\n","// #region imports\n // #region libraries\n import {\n /** constants */\n defaultTreePlane,\n\n /** interfaces */\n TreePlane,\n LinkCoordinates,\n } from '@plurid/plurid-data';\n\n import {\n uuid,\n } from '@plurid/plurid-functions';\n // #endregion libraries\n\n\n // #region external\n import {\n pluridLinkPathDivider,\n } from '~modules/routing/logic';\n // #endregion external\n// #endregion imports\n\n\n\n// #region module\nexport const updateTreePlane = (\n tree: TreePlane[],\n page: TreePlane,\n): TreePlane[] => {\n const updatedTree = tree.map(treePlane => {\n if (treePlane.planeID === page.planeID) {\n return {\n ...page,\n };\n }\n\n if (treePlane.children) {\n return {\n ...treePlane,\n children: updateTreePlane(treePlane.children, page),\n };\n }\n\n return treePlane;\n });\n\n return updatedTree;\n}\n\n\n\nexport const updateTreeByPlaneIDWithLinkCoordinates = (\n tree: TreePlane[],\n planeID: string,\n linkCoordinates: LinkCoordinates,\n): TreePlane[] => {\n // Structurally shared: only the node that matches `planeID` (and the spine of ancestors above\n // it) gets a new identity; unchanged siblings — and the array itself when nothing matched —\n // keep their references, so connected planes can bail out of re-rendering. The old version\n // rebuilt EVERY node that merely HAD children, breaking refs across the whole tree.\n let changed = false;\n\n const updatedTree = tree.map(treePlane => {\n if (treePlane.planeID === planeID) {\n changed = true;\n return {\n ...treePlane,\n linkCoordinates,\n };\n }\n\n if (treePlane.children) {\n const updatedChildren = updateTreeByPlaneIDWithLinkCoordinates(\n treePlane.children,\n planeID,\n linkCoordinates,\n );\n\n if (updatedChildren !== treePlane.children) {\n changed = true;\n return {\n ...treePlane,\n children: updatedChildren,\n };\n }\n }\n\n return treePlane;\n });\n\n return changed ? updatedTree : tree;\n}\n// #endregion module\n","// #region imports\n // #region internal\n import * as direction from './direction';\n import * as matrix from './mathematics/matrix';\n import * as quaternion from './mathematics/quaternion';\n import * as transform from './mathematics/transform';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nexport {\n direction,\n matrix,\n quaternion,\n transform,\n};\n// #endregion module\n","// #region imports\n // #region external\n import {\n WheelDeltas,\n } from '@plurid/plurid-data';\n // #endregion external\n// #endregion imports\n\n\n\n// #region module\nexport const getWheelDirection = (\n deltas: WheelDeltas,\n ABSTHRESHOLD: number = 10,\n THRESHOLD: number = 0,\n): string => {\n let direction = 'left';\n const wheelDeltaX = deltas.deltaX;\n const wheelDeltaY = deltas.deltaY;\n // console.log('PluridEngine :: wheelDeltaX', wheelDeltaX);\n // console.log('PluridEngine :: wheelDeltaY', wheelDeltaY);\n const absWheelDeltaX = Math.abs(wheelDeltaX);\n const absWheelDeltaY = Math.abs(wheelDeltaY);\n // console.log('PluridEngine :: absWheelDeltaX', absWheelDeltaX);\n // console.log('PluridEngine :: absWheelDeltaY', absWheelDeltaY);\n\n if (\n wheelDeltaX > THRESHOLD &&\n absWheelDeltaY < ABSTHRESHOLD &&\n absWheelDeltaX > absWheelDeltaY\n ) {\n direction = 'left';\n }\n\n if (\n wheelDeltaX < THRESHOLD &&\n absWheelDeltaY < ABSTHRESHOLD &&\n absWheelDeltaX > absWheelDeltaY\n ) {\n direction = 'right';\n }\n\n if (\n wheelDeltaY > THRESHOLD &&\n absWheelDeltaX < ABSTHRESHOLD &&\n absWheelDeltaY > absWheelDeltaX\n ) {\n direction = 'up';\n }\n\n if (\n wheelDeltaY < THRESHOLD &&\n absWheelDeltaX < ABSTHRESHOLD &&\n absWheelDeltaY > absWheelDeltaX\n ) {\n direction = 'down';\n }\n\n // if (positionX < threshold && positionY < threshold) {\n // direction = \"upleft\";\n // }\n\n // if (positionX < threshold && positionY > threshold ) {\n // direction = \"downleft\";\n // }\n\n // if (positionX > threshold && positionY > threshold ) {\n // direction = \"downright\";\n // }\n\n // if (positionX > threshold && positionY < threshold ) {\n // direction = \"upright\";\n // }\n\n return direction;\n};\n// #endregion module\n","// #region imports\n // #region external\n import {\n computeQuaternionFromEulers,\n // conjugateQuaternion,\n // inverseQuaternion,\n makeRotationMatrixFromQuaternion,\n // quaternionFromAxisAngle,\n quaternionMultiply,\n // rotatePointViaQuaternion,\n } from '../quaternion';\n // #endregion external\n// #endregion imports\n\n\n\n// #region module\n/**\n *\n * @param xAngle\n * @param yAngle\n * @param zAngle\n */\nexport function rotateMatrix(\n xAngle: number, yAngle: number, zAngle: number = 0,\n): number[] {\n const xQuaternion = computeQuaternionFromEulers(0, xAngle, 0);\n const yQuaternion = computeQuaternionFromEulers(0, 0, yAngle);\n const zQuaternion = computeQuaternionFromEulers(zAngle, 0, 0);\n\n const quartenionMultiplication = quaternionMultiply([\n yQuaternion,\n xQuaternion,\n zQuaternion,\n ]);\n const rotationMatrix = makeRotationMatrixFromQuaternion(\n quartenionMultiplication,\n );\n\n // console.log('rotationMatrix', rotationMatrix);\n return rotationMatrix;\n}\n\n\n/**\n *\n * @param x\n * @param y\n * @param z\n */\nexport function translateMatrix(x: number, y: number, z: number): number[] {\n return [\n 1, 0, 0, 0,\n 0, 1, 0, 0,\n 0, 0, 1, 0,\n x, y, z, 1,\n ];\n}\n\n\n/**\n *\n * @param s\n */\nexport function scaleMatrix(s: number): number[] {\n return [\n s, 0, 0, 0,\n 0, s, 0, 0,\n 0, 0, s, 0,\n 0, 0, 0, 1,\n ];\n}\n\n\n/**\n *\n * @param matrixA\n * @param matrixB\n */\nexport function multiplyMatrices(\n matrixA: number[],\n matrixB: number[],\n): number[] {\n // https://github.com/toji/gl-matrix/blob/master/src/gl-matrix/mat4.js#L306-L337\n const result = [] as number[];\n\n const a00 = matrixA[0];\n const a01 = matrixA[1];\n const a02 = matrixA[2];\n const a03 = matrixA[3];\n const a10 = matrixA[4];\n const a11 = matrixA[5];\n const a12 = matrixA[6];\n const a13 = matrixA[7];\n const a20 = matrixA[8];\n const a21 = matrixA[9];\n const a22 = matrixA[10];\n const a23 = matrixA[11];\n const a30 = matrixA[12];\n const a31 = matrixA[13];\n const a32 = matrixA[14];\n const a33 = matrixA[15];\n\n // Cache only the current line of the second matrix\n let b0 = matrixB[0];\n let b1 = matrixB[1];\n let b2 = matrixB[2];\n let b3 = matrixB[3];\n result[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n result[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n result[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n result[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n\n b0 = matrixB[4];\n b1 = matrixB[5];\n b2 = matrixB[6];\n b3 = matrixB[7];\n result[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n result[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n result[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n result[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n\n b0 = matrixB[8];\n b1 = matrixB[9];\n b2 = matrixB[10];\n b3 = matrixB[11];\n result[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n result[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n result[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n result[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n\n b0 = matrixB[12];\n b1 = matrixB[13];\n b2 = matrixB[14];\n b3 = matrixB[15];\n result[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n result[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n result[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n result[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n\n return result;\n}\n\n\n/**\n *\n * @param matrices\n */\nexport function multiplyArrayOfMatrices(matrices: number[][]): number[] {\n let inputMatrix = matrices[0];\n\n for (let i = 1; i < matrices.length; i++) {\n inputMatrix = multiplyMatrices(inputMatrix, matrices[i]);\n }\n\n return inputMatrix;\n}\n\n// Create the matrix3d style property from a matrix array\nexport function matrixArrayToCSSMatrix(array: number[]): string {\n return 'matrix3d(' + array.join(',') + ')';\n}\n// #endregion module\n","// #region module\n/**\n * Converts degrees to radians.\n *\n * @param deg\n * @returns radians\n */\nexport const degToRad = (\n deg: number,\n): number => {\n // return deg * Math.PI / 180;\n return deg * 0.01745329252;\n};\n\n/**\n * Converts radians to degrees.\n *\n * @param deg\n * @returns degrees\n */\nexport const radToDeg = (\n rad: number,\n): number => {\n // return rad * 180 / Math.PI;\n return rad * 57.2957795131;\n};\n\n\n\nexport interface Quaternion {\n x: number;\n y: number;\n z: number;\n w: number;\n}\n\n/**\n *\n * @param x\n * @param y\n * @param z\n * @param w\n * @returns {Quaternion}\n */\nexport const makeQuaternion = (\n x: number,\n y: number,\n z: number,\n w: number,\n): Quaternion => {\n return {\n x,\n y,\n z,\n w,\n };\n};\n\n/**\n * Returns all-fields 0-ed quaternion.\n *\n * @returns {Quaternion}\n */\nexport const zeroQuaternion = (): Quaternion => {\n return makeQuaternion(0, 0, 0, 0);\n};\n\n/**\n *\n * @param quaternion\n */\nexport function inverseQuaternion(\n quaternion: Quaternion,\n): Quaternion {\n return makeQuaternion(\n quaternion.x,\n quaternion.y,\n quaternion.z,\n -quaternion.w,\n );\n}\n\n/**\n *\n * @param quaternion\n */\nexport function conjugateQuaternion(\n quaternion: Quaternion,\n): Quaternion {\n return makeQuaternion(\n -quaternion.x,\n -quaternion.y,\n -quaternion.z,\n quaternion.w,\n );\n}\n\n/**\n * Generates quaternion based on Euler angles (in radians).\n *\n * @param alpha around Z axis\n * @param beta around X axis\n * @param gamma around Y axis\n * @returns {Quaternion}\n */\nexport function computeQuaternionFromEulers(\n alpha: number,\n beta: number,\n gamma: number,\n radians = true,\n): Quaternion {\n const x = radians ? beta : degToRad(beta);\n const y = radians ? gamma : degToRad(gamma);\n const z = radians ? alpha : degToRad(alpha);\n\n const cX = Math.cos(x / 2);\n const cY = Math.cos(y / 2);\n const cZ = Math.cos(z / 2);\n const sX = Math.sin(x / 2);\n const sY = Math.sin(y / 2);\n const sZ = Math.sin(z / 2);\n\n const xQ = sX * cY * cZ - cX * sY * sZ;\n const yQ = cX * sY * cZ + sX * cY * sZ;\n const zQ = cX * cY * sZ + sX * sY * cZ;\n const wQ = cX * cY * cZ - sX * sY * sZ;\n\n return makeQuaternion(xQ, yQ, zQ, wQ);\n}\n\n/**\n *\n * @param x\n * @param y\n * @param z\n * @param angle\n */\nexport function quaternionFromAxisAngle(\n x: number,\n y: number,\n z: number,\n angle: number,\n): Quaternion {\n const q: Quaternion = zeroQuaternion();\n const halfAngle = angle / 2;\n const sine = Math.sin(halfAngle);\n\n q.x = x * sine;\n q.y = y * sine;\n q.z = z * sine;\n q.w = Math.cos(halfAngle);\n\n return q;\n}\n\n/**\n *\n * @param quaternionArray\n */\nexport function quaternionMultiply(\n quaternionArray: Quaternion[],\n): Quaternion {\n const firstQuaternion: Quaternion = quaternionArray[0];\n const valueQuaternion: Quaternion = {\n ...firstQuaternion,\n };\n\n for (let i = 1; i < quaternionArray.length; i++) {\n const nextQuaternion: Quaternion = quaternionArray[i];\n\n const w =\n valueQuaternion.w * nextQuaternion.w -\n valueQuaternion.x * nextQuaternion.x -\n valueQuaternion.y * nextQuaternion.y -\n valueQuaternion.z * nextQuaternion.z;\n\n const x =\n valueQuaternion.x * nextQuaternion.w +\n valueQuaternion.w * nextQuaternion.x +\n valueQuaternion.y * nextQuaternion.z -\n valueQuaternion.z * nextQuaternion.y;\n\n const y =\n valueQuaternion.y * nextQuaternion.w +\n valueQuaternion.w * nextQuaternion.y +\n valueQuaternion.z * nextQuaternion.x -\n valueQuaternion.x * nextQuaternion.z;\n\n const z =\n valueQuaternion.z * nextQuaternion.w +\n valueQuaternion.w * nextQuaternion.z +\n valueQuaternion.x * nextQuaternion.y -\n valueQuaternion.y * nextQuaternion.x;\n\n valueQuaternion.x = x;\n valueQuaternion.y = y;\n valueQuaternion.z = z;\n valueQuaternion.w = w;\n }\n\n return valueQuaternion;\n}\n\n/**\n *\n * @param pointRotate\n * @param quaternion\n */\nexport function rotatePointViaQuaternion(\n pointRotate: [number, number, number],\n quaternion: Quaternion,\n): Quaternion {\n const temporaryQuaternion: Quaternion = {\n x: pointRotate[0],\n y: pointRotate[1],\n z: pointRotate[2],\n w: 0,\n };\n const rotatedPointQuaternion = quaternionMultiply([\n quaternion,\n temporaryQuaternion,\n conjugateQuaternion(quaternion),\n ]);\n\n return rotatedPointQuaternion;\n}\n\n/**\n *\n * @param quaternion\n */\nexport function makeRotationMatrixFromQuaternion(\n quaternion: Quaternion,\n) {\n const num = quaternion.x * 2;\n const num2 = quaternion.y * 2;\n const num3 = quaternion.z * 2;\n const num4 = quaternion.x * num;\n const num5 = quaternion.y * num2;\n const num6 = quaternion.z * num3;\n const num7 = quaternion.x * num2;\n const num8 = quaternion.x * num3;\n const num9 = quaternion.y * num3;\n const num10 = quaternion.w * num;\n const num11 = quaternion.w * num2;\n const num12 = quaternion.w * num3;\n\n return [\n 1 - (num5 + num6), num7 - num12, num8 + num11, 0,\n num7 + num12, 1 - (num4 + num6), num9 - num10, 0,\n num8 - num11, num9 + num10, 1 - (num4 + num5), 0,\n 0, 0, 0, 1,\n ];\n}\n// #endregion module\n","// #region imports\n // #region internal\n import * as general from './general';\n import * as matrix3d from './matrix3d';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region exports\nexport {\n general,\n matrix3d,\n};\n// #endregion exports\n","// #region imports\n // #region external\n import {\n Quaternion,\n } from '../../quaternion';\n // #endregion external\n// #endregion imports\n\n\n\n// #region module\nexport type Matrix = number[][];\n\n\n\nexport const getInitialMatrix = () => {\n const matrix: Matrix = [\n [1, 0, 0, 0],\n [0, 1, 0, 0],\n [0, 0, 1, 0],\n [0, 0, 0, 1],\n ];\n\n return matrix;\n}\n\n\nexport const multiplyMatrices = (\n m1: Matrix,\n m2: Matrix,\n): Matrix => {\n const result: Matrix = [];\n\n for (let i = 0; i < m1.length; i++) {\n result[i] = [];\n\n for (let j = 0; j < m2[0].length; j++) {\n let sum = 0;\n\n for (let k = 0; k < m1[0].length; k++) {\n sum += m1[i][k] * m2[k][j];\n }\n\n result[i][j] = sum;\n }\n }\n\n return result;\n}\n\n\n/**\n * Multiplies multiple `matrices`, must contain at least 2.\n *\n * @param matrices\n * @returns\n */\nexport const multiplyMatricesArray = (\n matrices: Matrix[],\n) => {\n if (matrices.length < 2) {\n throw new Error('invalid number of matrices');\n }\n\n const first = matrices[0];\n let result: Matrix = first;\n\n for (const [index, matrix] of matrices.entries()) {\n if (index === 0) {\n continue;\n }\n\n result = multiplyMatrices(\n result,\n matrix,\n );\n }\n\n return result;\n}\n\n\n\nexport const arrayToMatrix = (\n array: number[],\n): Matrix => {\n const matrix: Matrix = [];\n\n for (let i = 0; i < array.length; i += 4) {\n const row: number[] = [];\n\n row.push(array[i]);\n row.push(array[i + 1]);\n row.push(array[i + 2]);\n row.push(array[i + 3]);\n\n matrix.push(row);\n }\n\n return matrix;\n}\n\n\nexport const matrixToArray = (\n matrix: Matrix,\n) => {\n return matrix.flat();\n}\n\n\n/**\n * Parse a `matrix3d` string into a `Matrix`.\n *\n * @param value\n * @returns\n */\nexport const matrix3DToMatrix = (\n value: string,\n): Matrix => {\n const values = value\n .replace('matrix3d(', '')\n .replace(')', '')\n .split(',')\n .map(val => parseFloat(val));\n\n return arrayToMatrix(values);\n}\n\n\nexport const rotateXMatrix = (\n angle: number,\n): Matrix => {\n const x = Math.cos(angle);\n const y = -1 * Math.sin(angle);\n const z = Math.sin(angle);\n\n const m: Matrix = [\n [1, 0, 0, 0],\n [0, x, y, 0],\n [0, z, x, 0],\n [0, 0, 0, 1],\n ];\n\n return m;\n}\n\n\nexport const rotateYMatrix = (\n angle: number,\n): Matrix => {\n const x = Math.cos(angle);\n const y = -1 * Math.sin(angle);\n const z = Math.sin(angle);\n\n const m: Matrix = [\n [x, 0, z, 0],\n [0, 1, 0, 0],\n [y, 0, x, 0],\n [0, 0, 0, 1],\n ];\n\n return m;\n}\n\n\nexport const rotateZMatrix = (\n angle: number,\n): Matrix => {\n const x = Math.cos(angle);\n const y = -1 * Math.sin(angle);\n const z = Math.sin(angle);\n\n const m = [\n [x, y, 0, 0],\n [z, x, 0, 0],\n [0, 0, 1, 0],\n [0, 0, 0, 1],\n ];\n\n return m;\n}\n\n\nexport const translateMatrix = (\n x = 0,\n y = 0,\n z = 0,\n): Matrix => {\n const m = [\n [1, 0, 0, 0],\n [0, 1, 0, 0],\n [0, 0, 1, 0],\n [x, y, z, 1],\n ];\n\n return m;\n}\n\n\nexport const scaleMatrix = (\n s: number,\n): Matrix => {\n return [\n [s, 0, 0, 0],\n [0, s, 0, 0],\n [0, 0, s, 0],\n [0, 0, 0, 1],\n ];\n}\n\n\n\n\nexport function rotationMatrixFromQuaternion(\n quaternion: Quaternion,\n): Matrix {\n const num = quaternion.x * 2;\n const num2 = quaternion.y * 2;\n const num3 = quaternion.z * 2;\n const num4 = quaternion.x * num;\n const num5 = quaternion.y * num2;\n const num6 = quaternion.z * num3;\n const num7 = quaternion.x * num2;\n const num8 = quaternion.x * num3;\n const num9 = quaternion.y * num3;\n const num10 = quaternion.w * num;\n const num11 = quaternion.w * num2;\n const num12 = quaternion.w * num3;\n\n return [\n [1 - (num5 + num6), num7 - num12, num8 + num11, 0],\n [num7 + num12, 1 - (num4 + num6), num9 - num10, 0],\n [num8 - num11, num9 + num10, 1 - (num4 + num5), 0],\n [0, 0, 0, 1],\n ];\n}\n\n\nexport const matrixToCSSMatrix = (\n matrix: Matrix,\n): string => {\n const value = matrix.flat().join(',');\n\n return `matrix3d(${value})`;\n}\n\n\n\nexport const identityMatrix = (): Matrix => {\n const matrix: Matrix = [\n [1, 0, 0, 0],\n [0, 1, 0, 0],\n [0, 0, 1, 0],\n [0, 0, 0, 1],\n ];\n\n return matrix;\n}\n\n\n/**\n * Inverse a matrix based on\n * https://github.com/josdejong/mathjs/blob/develop/src/function/matrix/inv.js\n *\n * @param matrix\n * @returns\n */\nexport const inverseMatrix = (\n matrix: Matrix,\n) => {\n const cols = 4;\n const rows = 4;\n\n // Deep-copy the ROWS — `[...matrix]` only copies the outer array, leaving the row arrays\n // shared with the caller's `matrix`, which the in-place row reductions below then corrupt.\n const A: Matrix = matrix.map(row => [...row]);\n const B = identityMatrix();\n\n let r: number;\n let s: number;\n let f: number;\n let temp: number[];\n\n // loop over all columns, and perform row reductions\n for (let c = 0; c < cols; c++) {\n // Pivoting: Swap row c with row r, where row r contains the largest element A[r][c]\n let ABig = Math.abs(A[c][c]);\n let rBig = c;\n r = c + 1;\n\n while (r < rows) {\n if (Math.abs(A[r][c]) > ABig) {\n ABig = Math.abs(A[r][c]);\n rBig = r;\n }\n r++;\n }\n\n if (ABig === 0) {\n throw Error('Cannot calculate inverse, determinant is zero')\n }\n\n r = rBig;\n if (r !== c) {\n temp = A[c]; A[c] = A[r]; A[r] = temp;\n temp = B[c]; B[c] = B[r]; B[r] = temp;\n }\n\n // eliminate non-zero values on the other rows at column c\n const Ac = A[c];\n const Bc = B[c];\n\n for (r = 0; r < rows; r++) {\n const Ar = A[r];\n const Br = B[r];\n\n if (r !== c) {\n // eliminate value at column c and row r\n if (Ar[c] !== 0) {\n f = -Ar[c] / Ac[c];\n\n // add (f * row c) to row r to eliminate the value\n // at column c\n for (s = c; s < cols; s++) {\n Ar[s] = Ar[s] + f * Ac[s];\n }\n for (s = 0; s < cols; s++) {\n Br[s] = Br[s] + f * Bc[s];\n }\n }\n } else {\n // normalize value at Acc to 1,\n // divide each value on row r with the value at Acc\n f = Ac[c];\n for (s = c; s < cols; s++) {\n Ar[s] = Ar[s] / f;\n }\n for (s = 0; s < cols; s++) {\n Br[s] = Br[s] / f;\n }\n }\n }\n }\n\n return B;\n}\n// #endregion module\n","// #region module\n/**\n * Converts the CSS string matrix3d into an array of numbers.\n *\n * @param matrix3d CSS string obtained from\n * window\n * .getComputedStyle(element)\n * .getPropertyValue('transform').\n * @returns Numbers array.\n */\nexport function getMatrixValues(\n matrix3d: string,\n): number[] {\n const matrixValues = matrix3d.split('(')[1].split(')')[0].split(',');\n const matrixValuesInt = [] as number[];\n for (let i = 0; i < matrixValues.length; i++) {\n matrixValuesInt[i] = parseFloat(matrixValues[i]);\n }\n return matrixValuesInt;\n}\n\n\n/**\n * Extracts the rotation matrix from the matrix3d CSS string.\n *\n * @param matrix3d CSS string obtained from\n * window\n * .getComputedStyle(element)\n * .getPropertyValue(\"transform\").\n * @returns Rotation matrix.\n */\nexport function getRotationMatrix(\n matrix3d: string,\n): number[] {\n const valuesMatrix = getMatrixValues(matrix3d);\n const scale = getScalationValue(matrix3d);\n\n if (valuesMatrix.length === 16) {\n for (let i = 0; i < 11; i++) {\n valuesMatrix[i] /= scale;\n }\n } else if (valuesMatrix.length === 6) {\n for (let i = 0; i < 4; i++) {\n valuesMatrix[i] /= scale;\n }\n }\n\n const rotationMatrix = valuesMatrix;\n\n return rotationMatrix;\n}\n\n\n/**\n * Extracts the translation matrix from the matrix3d CSS string.\n *\n * @param matrix3d CSS string obtained from\n * window\n * .getComputedStyle(element)\n * .getPropertyValue(\"transform\").\n * @returns Translation matrix.\n */\nexport function getTranslationMatrix(\n matrix3d: string,\n): number[] {\n const valuesMatrix = getMatrixValues(matrix3d);\n let translationMatrix: any;\n\n if (valuesMatrix.length === 16) {\n translationMatrix = getMatrixValues(matrix3d).slice(12, 15);\n } else if (valuesMatrix.length === 6) {\n translationMatrix = getMatrixValues(matrix3d).slice(4);\n }\n\n return translationMatrix;\n}\n\n\n/**\n * Extracts the scalation value from the matrix3d CSS string.\n *\n * @param matrix3d CSS string obtained from\n * window\n * .getComputedStyle(element)\n * .getPropertyValue(\"transform\").\n * @returns Scalation value.\n */\nexport function getScalationValue(\n matrix3d: string,\n): number {\n const valuesMatrix = getMatrixValues(matrix3d);\n let temp = 0;\n let scale: any;\n\n if (valuesMatrix.length === 16) {\n const scaleMatrix = getMatrixValues(matrix3d).slice(0, 4);\n scale = 0;\n\n // for (let i = 0; i < scaleMatrix.length; i++) {\n // scale += parseFloat(scaleMatrix[i]) * parseFloat(scaleMatrix[i]);\n // }\n for (const el of scaleMatrix) {\n scale += parseFloat(el as any) * parseFloat(el as any);\n }\n\n scale = parseFloat(Math.sqrt(scale).toPrecision(4));\n } else if (valuesMatrix.length === 6) {\n temp = valuesMatrix[0] * valuesMatrix[0] + valuesMatrix[1] * valuesMatrix[1];\n scale = parseFloat(Math.sqrt(temp).toPrecision(4));\n }\n\n return scale;\n}\n\n\n\nexport interface RotationValues {\n rotateX: number;\n rotateY: number;\n rotateZ: number;\n}\n\nexport function getTransformRotate(\n matrix3d: string,\n): RotationValues {\n const pi = Math.PI;\n const values: number[] = getRotationMatrix(matrix3d);\n // console.log('getRotationMatrix', values);\n // console.log(values);\n let rotateX: number = 0;\n let rotateY: number = 0;\n // let thetaX = 0;\n // let thetaY = 0;\n // let thetaZ = 0;\n\n // let theta1 = 0;\n // let theta2 = 0;\n // let phi1 = 0;\n // let phi2 = 0;\n // let phi = 0;\n // let theta = 0;\n // let psi = 0;\n\n\n\n if (values.length === 6) {\n const cosa = values[0];\n const sina = values[1];\n\n if (cosa === 1 && sina === 0) {\n rotateX = Math.asin(sina);\n rotateY = Math.acos(cosa);\n }\n }\n\n if (values.length === 16) {\n // RxRzRy\n // if (values[1] < 1) {\n // if (values[1] > -1) {\n // thetaZ = Math.asin(-1 * values[1]);\n // thetaX = Math.atan2(values[9], values[5]);\n // thetaY = Math.atan2(values[2], values[0]);\n // } else {\n // thetaZ = Math.PI / 2;\n // thetaX = -1 * Math.atan2(-1 * values[8], values[10]);\n // thetaY = 0;\n // }\n // } else {\n // thetaZ = -1 * Math.PI / 2;\n // thetaX = -1 * Math.atan2(-1 * values[8], values[10]);\n // thetaY = 0;\n // }\n\n // thetaZ = Math.asin(-1 * values[1]);\n // thetaX = Math.atan2(values[9], values[5]);\n // thetaY = Math.atan2(values[2], values[0]);\n\n\n // console.log('thetaX', thetaX);\n // console.log('thetaY', thetaY);\n // console.log('thetaZ', thetaZ);\n\n // const cosaX1 = values[5];\n // const sinaX3 = values[9];\n // // 0-180\n // if (sinaX3 <= 0) {\n // rotateX = Math.acos(cosaX1);\n // }\n // // // 181-360\n // if (sinaX3 > 0) {\n // rotateX = 2 * pi - Math.acos(cosaX1);\n // }\n // const cosaY1 = values[0];\n // const sinaY2 = values[2];\n // if (sinaY2 <= 0) {\n // rotateY = Math.acos(cosaY1);\n // }\n // if (sinaY2 > 0) {\n // rotateY = 2 * pi - Math.acos(cosaY1);\n // }\n const cosaX1 = values[5];\n const sinaX3 = values[9];\n // 0-180\n if (sinaX3 <= 0) {\n rotateX = Math.acos(cosaX1);\n }\n // // 181-360\n if (sinaX3 > 0) {\n rotateX = 2 * pi - Math.acos(cosaX1);\n }\n const cosaY1 = values[0];\n const sinaY2 = values[2];\n if (sinaY2 <= 0) {\n rotateY = Math.acos(cosaY1);\n }\n if (sinaY2 > 0) {\n rotateY = 2 * pi - Math.acos(cosaY1);\n }\n\n rotateX = Math.atan2(values[9], values[5]);\n rotateY = Math.atan2(values[2], values[0]);\n }\n\n // return {\n // rotateX: thetaX,\n // rotateY: thetaY,\n // rotateZ: thetaZ,\n // };\n\n return {\n rotateX,\n rotateY,\n rotateZ: 0,\n };\n}\n\n\nexport interface TranslationValues {\n translateX: number;\n translateY: number;\n translateZ: number;\n}\n\nexport function getTransformTranslate(\n matrix3d: string,\n): TranslationValues {\n const values: number[] = getTranslationMatrix(matrix3d);\n const translateX = values[0];\n const translateY = values[1];\n const translateZ = values[2];\n\n return {\n translateX,\n translateY,\n translateZ,\n };\n}\n\n\nexport interface ScalationValue {\n scale: number;\n}\n\nexport function getTransformScale(\n matrix3d: string,\n): ScalationValue {\n const scale = getScalationValue(matrix3d);\n return {\n scale,\n };\n}\n\n\n// #endregion module\n","// #region imports\n // #region libraries\n import {\n internationalization,\n InternationalizationLanguageType,\n InternationalizationFieldType,\n } from '@plurid/plurid-data';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\nconst internatiolate = (\n lamguage: InternationalizationLanguageType,\n field: InternationalizationFieldType,\n) => {\n // Fall back to English (then the field key) when a locale is missing a string, so a\n // newly-added field doesn't render blank in every non-English locale until it's translated.\n return internationalization[lamguage]?.[field]\n ?? internationalization.english?.[field]\n ?? field;\n}\n// #endregion module\n\n\n\n// #region exports\nexport default internatiolate;\n// #endregion exports\n","// #region exports\nexport * from './logic';\nexport * from './registrar';\n// #endregion exports\n","// #region imports\n // #region libraries\n import {\n PluridPlane,\n PluridPlaneObject,\n PluridRoutePlane,\n PluridRoutePlaneObject,\n } from '@plurid/plurid-data';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\nexport const resolvePluridPlaneData = <C>(\n plane: PluridPlane<C>,\n): PluridPlaneObject<C> => {\n if (\n Array.isArray(plane)\n ) {\n const [\n route,\n component,\n options,\n ] = plane;\n\n return {\n route,\n component,\n ...options,\n };\n }\n\n return plane;\n}\n\n\nexport const resolvePluridRoutePlaneData = <C>(\n plane: PluridRoutePlane<C>,\n): PluridRoutePlaneObject<C> => {\n if (\n Array.isArray(plane)\n ) {\n const [\n value,\n component,\n options,\n ] = plane;\n\n return {\n value,\n component,\n ...options,\n };\n }\n\n return plane;\n}\n\n\nexport const getPluridPlaneIDByData = (\n element: HTMLElement | null,\n): string => {\n if (!element) {\n return '';\n }\n\n const parent = element.parentElement;\n if (parent && parent.dataset.pluridPlane) {\n return parent.dataset.pluridPlane;\n }\n\n return getPluridPlaneIDByData(parent);\n}\n// #endregion module\n","// #region imports\n // #region internal\n import IsoMatcher from './IsoMatcher';\n import RouteParser from './Parser';\n\n import {\n extractQuery,\n } from './Parser/logic';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nexport * from './Parser/interfaces';\n\nexport * from './logic';\n\nexport {\n IsoMatcher,\n RouteParser,\n extractQuery,\n};\n// #endregion module\n","// #region imports\n // #region libraries\n import {\n Indexed,\n PluridRouteFragments,\n PluridRouteFragmentElement,\n PluridRouteFragmentText,\n } from '@plurid/plurid-data';\n // #endregion libraries\n\n\n // #region internal\n import {\n ParserParametersAndMatch,\n } from './interfaces';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nexport const extractPathname = (\n location: string,\n) => {\n const queryIndex = location.indexOf('?');\n const noQueryPath = queryIndex === -1\n ? location\n : location.substring(0, queryIndex);\n\n const fragmentIndex = noQueryPath.indexOf('#:~:');\n const noFragmentPath = fragmentIndex === -1\n ? noQueryPath\n : noQueryPath.substring(0, fragmentIndex);\n\n return noFragmentPath;\n}\n\n\n/**\n * Extracts the parameters names from a `route`.\n *\n * e.g.\n *\n * `'/:foo/:boo'` -> `[':foo', 'boo']`\n *\n * `'/foo/:boo'` -> `['', 'boo']`\n *\n * `'/foo/boo'` -> `[]`\n *\n * If there are no parameters returns an empty array.\n * Non-parametric route elements have an empty string as placeholder.\n *\n * @param route\n */\nexport const extractParametersAndMatch = (\n location: string,\n route: string,\n): ParserParametersAndMatch => {\n const routeElements = splitPath(route);\n const parameters: string[] = [];\n\n routeElements.forEach(routeElement => {\n if (routeElement[0] === ':') {\n parameters.push(routeElement);\n } else {\n parameters.push('');\n }\n });\n\n const {\n locationElements,\n comparingPath,\n } = computeComparingPath(location, parameters);\n // console.log('locationElements', locationElements);\n // console.log('comparingPath', comparingPath);\n if (comparingPath !== route) {\n return {\n match: false,\n parameters: {},\n elements: locationElements,\n };\n }\n\n const parametersValues = extractParametersValues(\n parameters,\n locationElements,\n );\n return {\n match: true,\n parameters: parametersValues,\n elements: locationElements,\n };\n}\n\n\n/**\n * Extract the parameters values.\n *\n * e.g.\n *\n * `parameters = ['', ':list']`\n *\n * `pathElements = ['list', 'foo']`\n *\n * `parametersValues = { list: 'foo' }`\n *\n * @param parameters\n * @param pathElements\n */\nexport const extractParametersValues = (\n parameters: string[],\n pathElements: string[],\n): Record<string, string> => {\n const parametersValues: Record<string, string> = {};\n\n parameters.forEach(\n (parameter, index) => {\n if (parameter) {\n const parameterKey = parameter.slice(1,);\n parametersValues[parameterKey] = pathElements[index];\n }\n }\n );\n\n return parametersValues;\n}\n\n\n/**\n * Based on the `path` and the `parameters` computes a match for comparison.\n *\n * @param path\n * @param parameters\n */\nexport const computeComparingPath = (\n path: string,\n parameters: string[],\n) => {\n const pathname = extractPathname(path);\n const locationElements = splitPath(pathname);\n const comparingPathElements = [...locationElements];\n\n for (const index of locationElements.keys()) {\n if (parameters[index]) {\n comparingPathElements[index] = parameters[index];\n }\n }\n\n // const comparingPath = '/' + comparingPathElements.join('/');\n const comparingPath = comparingPathElements.join('/');\n\n return {\n locationElements,\n comparingPath,\n };\n}\n\n\n/**\n * Splits `path` into elements.\n *\n * e.g. `'/foo/boo'` -> `['foo', 'boo']`\n *\n * @param path\n */\nexport const splitPath = (\n path: string,\n) => {\n return path.split('/').filter(i => i !== '');\n}\n\n\n/**\n * Extract the query values.\n *\n * e.g.\n *\n * `path = '/foo?id=1&asd=asd'`\n *\n * `query = { id: 1, asd: 'asd' }`\n *\n * @param path\n */\nexport const extractQuery = (\n path: string,\n): Indexed<string> => {\n const fragmentIndex = path.indexOf('#:~:');\n const noFragmentPath = fragmentIndex === -1\n ? path\n : path.substring(0, fragmentIndex);\n const querySplit = noFragmentPath.split('?');\n\n if (querySplit.length === 2) {\n const queryValues: Indexed<string> = {};\n const query = querySplit[1];\n\n // `URLSearchParams` decodes safely: it does NOT throw on a bare `%` (the old\n // `decodeURIComponent` did) and a valueless flag (`?debug`) yields `''` rather than\n // the literal string `\"undefined\"`.\n const params = new URLSearchParams(query);\n for (const [id, value] of params) {\n queryValues[id] = value;\n }\n\n return queryValues;\n } else {\n return {};\n }\n}\n\n\nexport const extractFragments = (\n location?: string,\n): PluridRouteFragments => {\n if (!location) {\n return {\n texts: [],\n elements: [],\n };\n }\n\n const split = location.split('#:~:');\n const fragmentsValues = split[1];\n\n if (!fragmentsValues) {\n return {\n texts: [],\n elements: [],\n };\n }\n\n const fragmentItems = fragmentsValues.split('&');\n\n const textFragments: PluridRouteFragmentText[] = [];\n const elementFragments: PluridRouteFragmentElement[] = [];\n\n for (const item of fragmentItems) {\n const parsedFragment = parseFragment(item);\n if (parsedFragment) {\n switch (parsedFragment.type) {\n case 'text':\n textFragments.push(parsedFragment);\n break;\n case 'element':\n elementFragments.push(parsedFragment);\n break;\n }\n }\n }\n\n return {\n texts: textFragments,\n elements: elementFragments,\n };\n}\n\n\nexport const parseFragment = (\n fragment: string,\n): PluridRouteFragmentText | PluridRouteFragmentElement | undefined => {\n const fragmentData = fragment.split('=');\n const fragmentType = fragmentData[0];\n const fragmentValues = fragmentData[1];\n\n switch (fragmentType.toLowerCase()) {\n case 'text':\n {\n const textValues = fragmentValues.split(',');\n const textStart = textValues[0];\n const textEnd = textValues[1];\n const textOccurence = extractOccurence(textValues[2]);\n\n if (!textStart) {\n return;\n }\n\n return {\n type: 'text',\n start: textStart,\n end: textEnd || '',\n occurence: textOccurence,\n };\n }\n case 'element':\n {\n const elementValues = fragmentValues.split(',');\n const elementID = elementValues[0];\n const elementOccurence = extractOccurence(elementValues[1]);\n\n if (!elementID) {\n return;\n }\n\n return {\n type: 'element',\n id: elementID,\n occurence: elementOccurence,\n };\n }\n }\n\n return undefined;\n}\n\n\nexport const extractOccurence = (\n occurence: string | undefined,\n): number => {\n if (!occurence) {\n return 0;\n }\n\n const occurenceMatch = occurence.match(/\\[(\\d*)\\]/);\n const occurenceValue = occurenceMatch\n ? parseInt(occurenceMatch[1])\n : 0;\n\n return occurenceValue;\n}\n// #endregion module\n","// #region imports\n // #region imports\n import {\n protocols,\n PLURID_PROTOCOL,\n HTTPS_PROTOCOL,\n HTTP_PROTOCOL,\n } from '@plurid/plurid-data';\n // #endregion imports\n\n\n // #region external\n import {\n extractPathname,\n } from '~modules/routing/Parser/logic';\n // #endregion external\n// #endregion imports\n\n\n\n// #region module\nexport const stringInsertInitial = (\n value: string,\n insert: string,\n) => {\n if (!value.startsWith(insert)) {\n value = insert + value;\n }\n\n return value;\n}\n\nexport const stringRemoveTrailing = (\n value: string,\n trail: string,\n) => {\n if (value.endsWith(trail)) {\n value = value.slice(0, value.length - trail.length);\n }\n\n return value;\n}\n\n\nconst PATH_SEPARATOR = '/';\n\nexport const cleanupPath = (\n value: string,\n) => {\n value = stringInsertInitial(value, PATH_SEPARATOR);\n value = stringRemoveTrailing(value, PATH_SEPARATOR);\n return value;\n}\n\n\nexport const computePlaneAddress = (\n plane: string,\n route?: string,\n origin: string = 'origin',\n) => {\n if (origin === 'origin' && typeof location !== 'undefined' && location.host) {\n origin = location.host;\n }\n\n const cleanPlane = extractPathname(plane);\n\n const planeAddressType = checkPlaneAddressType(cleanPlane);\n\n switch(planeAddressType) {\n case 'http':\n case 'https':\n case 'pttp':\n return cleanPlane;\n }\n\n origin = stringRemoveTrailing(origin, '/');\n\n const absolutePlane = isAbsolutePlane(plane)\n\n const path = route && route !== '/'\n ? absolutePlane\n ? cleanupPath(cleanPlane)\n : cleanupPath(route) + cleanupPath(cleanPlane)\n : cleanupPath(cleanPlane);\n\n const planeAddress = protocols.plurid + origin + path;\n\n return planeAddress;\n}\n\nexport const isAbsolutePlane = (\n value: string,\n) => {\n return value[0] === '/';\n}\n\n\nexport const checkPlaneAddressType = (\n value: string,\n) => {\n value = value\n .toLowerCase()\n .trim();\n\n if (value.startsWith(protocols.plurid)) {\n return 'pttp';\n }\n\n if (value.startsWith(protocols.https)) {\n return HTTPS_PROTOCOL;\n }\n\n if (value.startsWith(protocols.http)) {\n return HTTP_PROTOCOL;\n }\n\n return 'relative';\n}\n\n\nexport const removeTrailingSlash = (\n value: string,\n) => {\n if (value.endsWith('/') && value.length > 1) {\n return value.slice(0, value.length - 1);\n }\n\n return value;\n}\n\n\nexport const cleanPathValue = (\n value: string,\n) => {\n const queryStart = value.indexOf('?');\n if (queryStart < 0) {\n return removeTrailingSlash(\n value,\n );\n }\n\n return removeTrailingSlash(\n value.substring(0, queryStart),\n );\n}\n// #endregion module\n","// #region imports\n // #region libraries\n import {\n compareTypes,\n CompareType,\n Indexed,\n PluridRouteParameter,\n } from '@plurid/plurid-data';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\nexport const checkParameterLength = (\n parameter: string,\n length: number,\n compareType?: CompareType,\n) => {\n const parameterLength = parameter.length;\n\n switch (compareType) {\n case compareTypes.equal:\n return parameterLength === length;\n case compareTypes.equalLessThan:\n return parameterLength <= length;\n case compareTypes.lessThan:\n return parameterLength < length;\n case compareTypes.equalGreaterThan:\n return parameterLength >= length;\n case compareTypes.greaterThan:\n return parameterLength > length;\n default:\n return parameterLength <= length;\n }\n}\n\n\n\nexport const checkValidPath = <C>(\n validationParameters: Record<string, PluridRouteParameter> | undefined,\n parameters: Indexed<string>,\n) => {\n if (validationParameters) {\n for (const [parameterKey, parameterData] of Object.entries(validationParameters)) {\n const {\n length,\n lengthType,\n startsWith,\n endsWith,\n includes,\n } = parameterData;\n\n const paramaterValue = parameters[parameterKey];\n\n if (!paramaterValue) {\n return false;\n }\n\n if (startsWith && !paramaterValue.startsWith(startsWith)) {\n return false;\n }\n\n if (endsWith && !paramaterValue.endsWith(endsWith)) {\n return false;\n }\n\n if (includes && !includes.includes(paramaterValue)) {\n return false;\n }\n\n if (length) {\n const validLength = checkParameterLength(\n paramaterValue,\n length,\n lengthType,\n );\n // Only short-circuit on FAILURE (like the startsWith/endsWith/includes checks\n // above) — `return validLength` here returned `true` after the first\n // length-constrained param, skipping validation of every subsequent param.\n if (!validLength) {\n return false;\n }\n }\n }\n }\n\n return true;\n}\n// #endregion module\n","// #region module\nexport const cleanPathElement = (\n path: string,\n) => {\n if (path[0] === '/') {\n return path.slice(1);\n }\n\n return path;\n}\n// #endregion module\n","// #region imports\n // #region libraries\n import {\n RouteDivisions,\n } from '@plurid/plurid-data';\n // #endregion libraries\n\n\n // #region external\n import {\n cleanPathElement,\n } from '~modules/utilities';\n // #endregion external\n// #endregion imports\n\n\n\n// #region module\n// const interplanarExample = '://plane'; // or intraclusterial\n// const interclusterialExample = '://cluster://plane'; // or intrauniversal\n// const interuniversalExample = '://universe://cluster://plane'; // or intraspatial\n// const interspatialExample = '://space://universe://cluster://plane'; // or intraroutal\n// const interroutalExample = '://route://space://universe://cluster://plane';\n// const pluriversalExample = 'https://origin://route://space://universe://cluster://plane';\n// const pluriversalExampleControlledOrigin = 'https://corigin://route://space://universe://cluster://plane';\n// const pluriversalExampleForeignOrigin = 'https://forigin://route://space://universe://cluster://plane';\n\n\nexport const pluridLinkPathDivider = (\n route: string,\n): RouteDivisions => {\n // console.log('pluridLinkPathDivider route', route);\n\n const windowProtocol = typeof window === 'undefined'\n ? 'http'\n : window.location.protocol.replace(':', '');\n const windowHost = typeof window === 'undefined'\n ? 'localhost:63000'\n : window.location.host;\n\n const split = route\n .split('://')\n .filter(value => value !== '')\n .map(value => cleanPathElement(value));\n // console.log('SPLIT', split);\n\n let protocol = windowProtocol;\n const host = {\n value: windowHost,\n controlled: false,\n };\n const path = {\n value: '',\n parameters: {},\n query: {},\n };\n const space = {\n value: '',\n parameters: {},\n query: {},\n };\n const universe = {\n value: '',\n parameters: {},\n query: {},\n };\n const cluster = {\n value: '',\n parameters: {},\n query: {},\n };\n const plane = {\n value: '',\n parameters: {},\n query: {},\n fragments: {\n texts: [],\n elements: [],\n },\n };\n const valid = false;\n\n if (\n split.length === 0\n || split.length > 7\n ) {\n const url = {\n protocol: {\n value: protocol,\n secure: true,\n },\n host,\n path,\n space,\n universe,\n cluster,\n plane,\n valid,\n };\n return url;\n }\n\n if (route.startsWith('/://')) {\n const routeSplit = split.slice(1);\n switch (routeSplit.length) {\n case 1:\n path.value = routeSplit[0];\n break;\n case 5:\n path.value = routeSplit[0];\n space.value = routeSplit[1];\n universe.value = routeSplit[2];\n cluster.value = routeSplit[3];\n plane.value = routeSplit[4];\n break;\n }\n\n const url = {\n protocol: {\n value: protocol,\n secure: true,\n },\n host,\n path,\n space,\n universe,\n cluster,\n plane,\n valid: true,\n };\n // console.log('URL', url);\n\n return url;\n }\n\n if (\n split[0] !== 'http'\n && split[0] !== 'https'\n && split[0] !== 'chrome-extension'\n ) {\n switch (split.length) {\n case 1:\n plane.value = split[0];\n break;\n case 2:\n cluster.value = split[0];\n plane.value = split[1];\n break;\n case 3:\n universe.value = split[0];\n cluster.value = split[1];\n plane.value = split[2];\n break;\n case 4:\n space.value = split[0];\n universe.value = split[1];\n cluster.value = split[2];\n plane.value = split[3];\n break;\n case 5:\n path.value = split[0];\n space.value = split[1];\n universe.value = split[2];\n cluster.value = split[3];\n plane.value = split[4];\n break;\n case 6:\n host.value = split[0];\n path.value = split[1];\n space.value = split[2];\n universe.value = split[3];\n cluster.value = split[4];\n plane.value = split[5];\n break;\n default:\n const url = {\n protocol: {\n value: protocol,\n secure: true,\n },\n host,\n path,\n space,\n universe,\n cluster,\n plane,\n valid,\n };\n return url;\n }\n } else {\n switch (split.length) {\n case 3:\n protocol = split[0];\n host.value = split[1];\n path.value = split[2];\n break;\n case 7:\n protocol = split[0];\n host.value = split[1];\n path.value = split[2];\n space.value = split[3];\n universe.value = split[4];\n cluster.value = split[5];\n plane.value = split[6];\n break;\n default:\n const url = {\n protocol: {\n value: protocol,\n secure: true,\n },\n host,\n path,\n space,\n universe,\n cluster,\n plane,\n valid,\n };\n return url;\n }\n }\n\n const url = {\n protocol: {\n value: protocol,\n secure: true,\n },\n host,\n path,\n space,\n universe,\n cluster,\n plane,\n valid: true,\n };\n\n return url;\n}\n\n\n/**\n * Given a partial `route`, e.g. `/route`, or `://cluster://route`,\n * it resolves it to the absolute form\n * `protocol://origin://route://space://universe://cluster://plane`.\n *\n * @param path\n */\nexport const resolveRoute = (\n route: string,\n protocol?: string,\n host?: string,\n) => {\n const windowProtocol = typeof window === 'undefined'\n ? protocol || 'http'\n : window.location.protocol.replace(':', '');\n const windowHost = typeof window === 'undefined'\n ? host || 'localhost:63000'\n : window.location.host;\n\n const divisions = pluridLinkPathDivider(route);\n // console.log('resolveRoute > divisions', divisions);\n\n const defaultPathname = typeof window !== 'undefined'\n ? window.location.pathname === '/'\n ? 'p'\n : window.location.pathname.slice(1)\n : divisions.path.value\n ? divisions.path.value\n : 'p';\n\n const protocolDivision = divisions.protocol.value || windowProtocol;\n const hostDivision = divisions.host.value\n ? divisions.host\n : {\n value: windowHost,\n controlled: true,\n };\n const path = divisions.path.value\n ? divisions.path\n : {\n value: defaultPathname,\n parameters: {},\n query: {},\n };\n const space = divisions.space.value\n ? divisions.space\n : {\n value: 's',\n parameters: {},\n query: {},\n };\n const universe = divisions.universe.value\n ? divisions.universe\n : {\n value: 'u',\n parameters: {},\n query: {},\n };\n const cluster = divisions.cluster.value\n ? divisions.cluster\n : {\n value: 'c',\n parameters: {},\n query: {},\n };\n const plane = divisions.plane;\n\n const separator = '://';\n\n if (!plane.value && route !== '/') {\n const resolvers = [\n protocolDivision,\n hostDivision.value,\n path.value,\n ];\n const absoluteRoute = resolvers.join(separator);\n\n return {\n protocol: protocolDivision,\n host: hostDivision,\n path,\n space,\n universe,\n cluster,\n plane,\n route: absoluteRoute,\n };\n }\n\n const resolvers = [\n protocolDivision,\n hostDivision.value,\n path.value,\n space.value,\n universe.value,\n cluster.value,\n cleanPathElement(plane.value),\n ];\n const absoluteRoute = resolvers.join(separator);\n\n // return {\n // protocol: protocolDivision,\n // host: hostDivision,\n // path,\n // space,\n // universe,\n // cluster,\n // plane,\n // route: absoluteRoute,\n // };\n\n return {\n protocol: '',\n host: '',\n path,\n space: '',\n universe: '',\n cluster: '',\n plane: '',\n route: route,\n };\n}\n// #endregion module\n","// #region imports\n // #region libraries\n import {\n PluridRoute,\n PluridRoutePlane,\n PluridPlane,\n\n IsoMatcherContext,\n IsoMatcherData,\n IsoMatcherIndexedRoute,\n IsoMatcherIndexedPlane,\n IsoMatcherPlaneType,\n IsoMatcherPlaneResult,\n IsoMatcherPlaneResultPlane,\n IsoMatcherPlaneResultRoutePlane,\n IsoMatcherResult,\n IsoMatcherRouteResult,\n\n protocols,\n } from '@plurid/plurid-data';\n // #endregion libraries\n\n\n // #region external\n import {\n resolvePluridPlaneData,\n resolvePluridRoutePlaneData,\n } from '~modules/planes/logic';\n\n import {\n computePlaneAddress,\n\n checkValidPath,\n\n cleanPathValue,\n } from '../logic';\n\n import {\n extractParametersAndMatch,\n extractQuery,\n extractFragments,\n // extractPathname,\n } from '../Parser/logic';\n // #endregion external\n// #endregion imports\n\n\n\n// #region module\n/**\n * The `IsoMatcher` gathers all the known information about `routes` and `planes`\n * and matches client-side or server-side, in-browser or in-plurid.\n */\nclass IsoMatcher<C> {\n private origin: string;\n\n private routesIndex: Map<string, IsoMatcherIndexedRoute<C>> = new Map();\n private planesIndex: Map<string, IsoMatcherIndexedPlane<C>> = new Map();\n\n private routesKeys: string[] = [];\n private planesKeys: string[] = [];\n\n\n constructor(\n data: IsoMatcherData<C>,\n origin: string = 'origin',\n ) {\n if (origin === 'origin' && typeof location !== 'undefined' && location.host) {\n this.origin = location.host;\n } else {\n this.origin = origin;\n }\n\n this.updateIndexes(\n data.routes || [],\n data.routePlanes || [],\n data.planes || [],\n );\n // console.log('this.routesIndex', this.routesIndex);\n // console.log('this.planesIndex', this.planesIndex);\n }\n\n\n /**\n * Matches a `path` with a known `route` or `plane`,\n * based on the strategy imposed by the `context`.\n *\n * @param path\n * @param context\n */\n public match(path: string, context: 'route'): IsoMatcherRouteResult<C> | undefined;\n public match(path: string): IsoMatcherPlaneResult<C> | undefined;\n public match(path: string, context: 'plane'): IsoMatcherPlaneResult<C> | undefined;\n public match(\n path: string,\n context: IsoMatcherContext = 'plane',\n ): IsoMatcherResult<C> | undefined {\n switch (context) {\n case 'plane':\n return this.matchPlane(path);\n case 'route':\n return this.matchRoute(path);\n }\n }\n\n /**\n * Dynammically update the planes and routes indexes.\n *\n * @param data\n */\n public index(\n data: IsoMatcherData<C>,\n ) {\n this.updateIndexes(\n data.routes || [],\n data.routePlanes || [],\n data.planes || [],\n );\n // console.log('this.routesIndex index', this.routesIndex);\n // console.log('this.planesIndex index', this.planesIndex);\n }\n\n /**\n * Clear all data.\n *\n */\n public clear() {\n this.routesIndex = new Map();\n this.planesIndex = new Map();\n this.routesKeys = [];\n this.planesKeys = [];\n }\n\n public getPlanesIndex() {\n return this.planesIndex;\n }\n\n\n /**\n * Creates a common data structure able to match and route accordingly.\n *\n */\n private updateIndexes(\n routes: PluridRoute<C>[],\n routePlanes: PluridRoutePlane<C>[],\n planes: PluridPlane<C>[],\n ) {\n this.indexPlanes(\n planes,\n 'Plane',\n );\n\n this.indexPlanes(\n routePlanes,\n 'RoutePlane',\n );\n\n for (const route of routes) {\n if (route.planes) {\n this.indexPlanes(\n route.planes,\n 'RoutePlane',\n route.value,\n );\n }\n\n this.routesIndex.set(\n route.value,\n {\n data: {\n ...route,\n },\n },\n );\n }\n\n this.routesKeys = Array.from(this.routesIndex.keys());\n this.planesKeys = Array.from(this.planesIndex.keys());\n }\n\n private indexPlanes(\n planes: PluridPlane<C>[] | PluridRoutePlane<C>[],\n kind: IsoMatcherPlaneType,\n parent?: string,\n ) {\n for (const plane of planes) {\n const planeData = kind === 'Plane'\n ? resolvePluridPlaneData(plane as PluridPlane<C>)\n : resolvePluridRoutePlaneData(plane as PluridRoutePlane<C>);\n\n const address = computePlaneAddress(\n kind === 'Plane'\n ? (planeData as any).route\n : (planeData as any).value,\n parent,\n this.origin,\n );\n\n const indexedPlane: any /** IsoMatcherIndexedPlane<C> */ = {\n kind,\n data: {\n ...planeData,\n },\n };\n if (parent) {\n indexedPlane['parent'] = parent;\n }\n\n this.planesIndex.set(\n address,\n indexedPlane,\n );\n }\n }\n\n\n private matchPlane(\n value: string,\n ) {\n const planeAddress = computePlaneAddress(\n value,\n undefined,\n this.origin,\n );\n\n const plane = this.planesIndex.get(planeAddress);\n\n if (plane) {\n const query = extractQuery(\n value,\n );\n const fragments = extractFragments(\n value,\n );\n\n const match = {\n value: planeAddress,\n fragments,\n query,\n parameters: {},\n };\n\n if (plane.kind === 'Plane') {\n const {\n kind,\n data,\n parent,\n } = plane;\n\n const result: IsoMatcherPlaneResultPlane<C> = {\n kind,\n data,\n parent,\n match,\n };\n return result;\n }\n\n if (plane.kind === 'RoutePlane') {\n const {\n kind,\n data,\n parent,\n } = plane;\n\n const result: IsoMatcherPlaneResultRoutePlane<C> = {\n kind,\n data,\n parent,\n match,\n };\n return result;\n }\n }\n\n\n for (const planePath of this.planesKeys) {\n const normalizedPlanePath = planePath.replace(protocols.plurid, '');\n const normalizedPlaneAddress = planeAddress.replace(protocols.plurid, '');\n\n const planePathSplit = normalizedPlanePath.split('/');\n const planeAddressSplit = normalizedPlaneAddress.split('/');\n\n // Not the same origin.\n if (planePathSplit[0] !== planeAddressSplit[0]) {\n continue;\n }\n\n // Length mismatch.\n if (planePathSplit.length !== planeAddressSplit.length) {\n continue;\n }\n\n // Check if the plane `address` is a parametrization of `planePath`.\n const parametersAndMatch = extractParametersAndMatch(\n normalizedPlaneAddress,\n normalizedPlanePath,\n );\n\n // console.log('normalizedPlaneAddress', normalizedPlaneAddress);\n // console.log('normalizedPlanePath', normalizedPlanePath);\n // console.log('parametersAndMatch', parametersAndMatch);\n if (parametersAndMatch.match) {\n const plane = this.planesIndex.get(planePath);\n if (!plane) {\n // Try the next candidate, don't abandon the whole match — a later route\n // in `planesKeys` may still match.\n continue;\n }\n\n const {\n parameters,\n } = parametersAndMatch;\n\n const validPath = checkValidPath(\n plane.data.parameters,\n parameters,\n );\n if (!validPath) {\n continue;\n }\n\n const query = extractQuery(\n value,\n );\n const fragments = extractFragments(\n value,\n );\n\n const match = {\n value: planeAddress,\n fragments,\n query,\n parameters,\n };\n\n if (plane.kind === 'Plane') {\n const {\n kind,\n data,\n parent,\n } = plane;\n\n const result: IsoMatcherPlaneResultPlane<C> = {\n kind,\n data,\n parent,\n match,\n };\n\n return result;\n }\n\n if (plane.kind === 'RoutePlane') {\n const {\n kind,\n data,\n parent,\n } = plane;\n\n const result: IsoMatcherPlaneResultRoutePlane<C> = {\n kind,\n data,\n parent,\n match,\n };\n\n return result;\n }\n }\n }\n\n\n return;\n }\n\n private matchRoute(\n value: string,\n ) {\n const routeValue = cleanPathValue(value);\n const route = this.routesIndex.get(routeValue);\n\n if (route) {\n const query = extractQuery(\n value,\n );\n\n const result: IsoMatcherRouteResult<C> = {\n kind: 'Route',\n data: route.data,\n match: {\n // value: extractPathname(value),\n value: routeValue,\n query,\n parameters: {},\n },\n };\n\n return result;\n }\n\n\n for (const routePath of this.routesKeys) {\n // Check if the `value` is a parametrization of `routePath`.\n const routeSplit = routePath.split('/');\n const valueSplit = routeValue.split('/');\n\n // Length mismatch.\n if (routeSplit.length !== valueSplit.length) {\n continue;\n }\n\n const parametersAndMatch = extractParametersAndMatch(\n routeValue.slice(1),\n routePath.slice(1),\n );\n\n // console.log('value', value);\n // console.log('routePath', routePath);\n // console.log('parametersAndMatch', parametersAndMatch);\n if (parametersAndMatch.match) {\n const route = this.routesIndex.get(routePath);\n // console.log('route', route);\n if (!route) {\n // Try the next candidate route rather than abandoning the whole match.\n continue;\n }\n\n const {\n parameters,\n } = parametersAndMatch;\n\n const validPath = checkValidPath(\n route.data.parameters,\n parameters,\n );\n // console.log('validPath', validPath);\n if (!validPath) {\n continue;\n }\n\n // Extract the query from the ORIGINAL `value`, not `routeValue` —\n // `cleanPathValue` already stripped the query off `routeValue` (which is why\n // params resolve), so `extractQuery(routeValue)` always returned `{}`. The\n // exact-match branch above already uses `value` correctly.\n const query = extractQuery(\n value,\n );\n\n const match = {\n // value: extractPathname(value),\n value: routeValue,\n query,\n parameters,\n };\n\n if (route) {\n const result: IsoMatcherRouteResult<C> = {\n kind: 'Route',\n data: route.data,\n match,\n };\n // console.log('route result', result);\n\n return result;\n }\n }\n }\n\n\n const routePlane = this.matchPlane(routeValue);\n // console.log('routePlane', value, this.planesIndex, routePlane);\n\n if (routePlane) {\n const result: IsoMatcherRouteResult<C> = {\n kind: 'RoutePlane',\n data: routePlane.data as any, // HACK\n match: {\n // value: extractPathname(value),\n value: routeValue,\n query: routePlane.match.query,\n parameters: routePlane.match.parameters,\n },\n };\n\n return result;\n }\n\n\n return;\n }\n}\n// #endregion module\n\n\n\n// #region exports\nexport default IsoMatcher;\n// #endregion exports\n","// #region imports\n // #region libraries\n import {\n PluridRoute,\n } from '@plurid/plurid-data';\n // #endregion libraries\n\n\n // #region external\n // import {\n // Route,\n // } from '../Router/interfaces';\n // #endregion external\n\n\n // #region internal\n import {\n ParserOptions,\n ParserPartialOptions,\n ParserResponse,\n } from './interfaces';\n\n import {\n extractPathname,\n extractParametersAndMatch,\n extractQuery,\n extractFragments,\n } from './logic';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nexport default class Parser<C> {\n /** properties */\n private location: string;\n private path: PluridRoute<C>;\n private options: ParserOptions;\n\n\n /** constructor */\n constructor(\n location: string,\n path: PluridRoute<C>,\n options?: ParserPartialOptions,\n ) {\n this.location = location;\n this.path = path;\n this.options = this.handleOptions(options);\n }\n\n\n /** private */\n private handleOptions(\n options: ParserPartialOptions | undefined,\n ) {\n const parserOptions: ParserOptions = {\n fragment: options?.fragment || true,\n };\n\n return parserOptions;\n }\n\n private extractPathname() {\n const pathname = extractPathname(\n this.location,\n );\n return pathname;\n }\n\n private extractParametersAndMatch() {\n const parametersAndMatch = extractParametersAndMatch(\n this.location,\n this.path.value,\n );\n\n return parametersAndMatch;\n }\n\n private extractQuery() {\n const query = extractQuery(\n this.location,\n );\n return query;\n }\n\n private extractFragments() {\n const fragments = this.options.fragment\n ? extractFragments(this.location)\n : extractFragments();\n return fragments;\n }\n\n\n /** public */\n /**\n * Extract pathname, parameters, query, and fragment, if available.\n */\n public extract() {\n const pathname = this.extractPathname();\n const {\n match,\n parameters,\n elements,\n } = this.extractParametersAndMatch();\n const query = this.extractQuery();\n const queryData = Object\n .entries(query)\n .map(([key, value]) => {\n return key + '=' + value;\n }).join('&');\n const queryString = queryData\n ? '?' + queryData\n : '';\n const fragments = this.extractFragments();\n\n const parserResponse: ParserResponse<C> = {\n path: this.path,\n pathname,\n elements,\n match,\n parameters,\n query,\n fragments,\n route: pathname + queryString,\n };\n\n return parserResponse;\n }\n}\n// #endregion module\n","// #region imports\n // #region libraries\n import {\n PluridPlane,\n RegisteredPluridPlane,\n PluridPlanesRegistrar as IPluridPlanesRegistrar,\n } from '@plurid/plurid-data';\n // #endregion libraries\n\n\n // #region external\n import {\n IsoMatcher,\n } from '~modules/routing';\n // #endregion external\n// #endregion imports\n\n\n\n// #region module\n/**\n * The planes registrar can be stored in-memory (server-side)\n * or on the `window.__pluridPlanesRegistrar__` object (browser-side).\n */\nclass PluridPlanesRegistrar<C> implements IPluridPlanesRegistrar<C> {\n private isoMatcher: IsoMatcher<C>;\n\n\n constructor(\n planes?: PluridPlane<C>[],\n origin = 'origin',\n ) {\n this.isoMatcher = new IsoMatcher(\n {\n planes,\n },\n origin,\n );\n }\n\n\n public register(\n planes: PluridPlane<C>[],\n ) {\n this.isoMatcher.index({\n planes,\n });\n }\n\n public identify() {\n const planes = this.isoMatcher.getPlanesIndex();\n return [...planes.keys()];\n }\n\n public get(\n route: string,\n ) {\n const match = this.isoMatcher.match(route);\n\n if (match) {\n const absoluteRoute = match.kind === 'Plane'\n ? match.data.route\n : match.data.value;\n\n const registeredPlane: RegisteredPluridPlane<C> = {\n route: {\n absolute: absoluteRoute,\n fragments: match.match.fragments,\n parameters: match.match.parameters,\n query: match.match.query,\n },\n component: match.data.component,\n };\n\n return registeredPlane;\n }\n\n return;\n }\n\n public getAll() {\n const planes = this.isoMatcher.getPlanesIndex();\n const all = new Map();\n\n for (const [path, plane] of planes) {\n const absoluteRoute = plane.kind === 'Plane'\n ? plane.data.route\n : plane.data.value;\n\n const registeredPlane: RegisteredPluridPlane<C> = {\n route: {\n absolute: absoluteRoute,\n fragments: {\n elements: [],\n texts: [],\n },\n parameters: {},\n query: {},\n },\n component: plane.data.component,\n };\n\n all.set(\n path,\n registeredPlane,\n );\n }\n\n return all;\n }\n}\n// #endregion module\n\n\n\n// #region exports\nexport default PluridPlanesRegistrar;\n// #endregion exports\n","// #region imports\n // #region libraries\n import {\n PluridPlane,\n PluridPlanesRegistrar as IPluridPlanesRegistrar,\n\n PluridalWindow,\n } from '@plurid/plurid-data';\n // #endregion libraries\n\n\n // #region internal\n import PluridPlanesRegistrar from './object';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nconst registerPlanes = <C>(\n planes?: PluridPlane<C>[],\n planesRegistrar?: IPluridPlanesRegistrar<C>,\n origin = 'origin',\n) => {\n if (!planes) {\n return;\n }\n\n if (planesRegistrar) {\n planesRegistrar.register(planes);\n return;\n }\n\n if (typeof window === 'undefined') {\n return;\n }\n\n if (typeof (window as PluridalWindow<C>).__pluridPlanesRegistrar__ === 'undefined') {\n const pluridPlanesRegistrar = new PluridPlanesRegistrar<C>([], origin);\n (window as PluridalWindow<C>).__pluridPlanesRegistrar__ = pluridPlanesRegistrar;\n (window as PluridalWindow<C>).__pluridPlanesRegistrar__.register(planes);\n return;\n }\n\n (window as PluridalWindow<C>).__pluridPlanesRegistrar__.register(planes);\n\n return;\n}\n\n\nconst getPlanesRegistrar = <C>(\n planesRegistrar: IPluridPlanesRegistrar<C> | undefined,\n) => {\n if (planesRegistrar) {\n return planesRegistrar;\n }\n\n if (typeof window !== 'undefined') {\n if ((window as PluridalWindow<C>).__pluridPlanesRegistrar__ !== undefined) {\n return (window as PluridalWindow<C>).__pluridPlanesRegistrar__;\n }\n }\n\n return;\n}\n\n\nconst getRegisteredPlanes = <C>(\n planesRegistrar: IPluridPlanesRegistrar<C> | undefined,\n) => {\n if (planesRegistrar) {\n return planesRegistrar.getAll();\n }\n\n if (typeof window !== 'undefined') {\n if ((window as PluridalWindow<C>).__pluridPlanesRegistrar__ !== undefined) {\n return (window as PluridalWindow<C>).__pluridPlanesRegistrar__.getAll();\n }\n }\n\n return new Map();\n}\n\n\nconst getRegisteredPlane = <C>(\n route: string,\n planesRegistrar: IPluridPlanesRegistrar<C> | undefined,\n) => {\n if (planesRegistrar) {\n return planesRegistrar.get(route);\n }\n\n if (typeof window !== 'undefined') {\n if ((window as PluridalWindow<C>).__pluridPlanesRegistrar__ !== undefined) {\n return (window as PluridalWindow<C>).__pluridPlanesRegistrar__.get(route);\n }\n }\n\n return;\n}\n// #endregion module\n\n\n\n// #region exports\nexport {\n registerPlanes,\n getPlanesRegistrar,\n getRegisteredPlanes,\n getRegisteredPlane,\n};\n// #endregion exports\n","// #region imports\n // #region internal\n import * as layout from './layout';\n import * as location from './location';\n import * as tree from './tree';\n import * as utilities from './utilities';\n import * as view from './view';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region exports\nexport {\n layout,\n location,\n tree,\n utilities,\n view,\n};\n// #endregion exports\n","// #region imports\n // #region internal\n import computeColumnLayout from './column';\n import computeRowLayout from './row';\n import computeFaceToFaceLayout from './faceToFace';\n import computeSheavesLayout from './sheaves';\n import computeZigZagLayout from './zigZag';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region exports\nexport {\n computeColumnLayout,\n computeRowLayout,\n computeFaceToFaceLayout,\n computeSheavesLayout,\n computeZigZagLayout,\n};\n// #endregion exports\n","// #region imports\n // #region internal\n import {\n computePath,\n computePluridPlaneLocation,\n recomputeChildrenLocation,\n } from './logic';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region exports\nexport {\n computePath,\n computePluridPlaneLocation,\n recomputeChildrenLocation,\n};\n// #endregion exports\n","// #region imports\n // #region libraries\n import {\n /** interfaces */\n TreePlane,\n } from '@plurid/plurid-data';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\nexport const computeSpaceSize = (\n tree: TreePlane[],\n) => {\n let width = 0;\n let height = 0;\n let depth = 0;\n const topCorner = {\n x: 0,\n y: 0,\n z: 0,\n };\n\n // console.log('tree', tree);\n tree.map(treePage => {\n // console.log('treePage', treePage);\n\n const spaceWidth = treePage.location.translateX + treePage.width;\n // console.log('spaceWidth', spaceWidth);\n if (spaceWidth > width) {\n width = spaceWidth;\n }\n\n const spaceHeight = treePage.location.translateY + treePage.height;\n // console.log('spaceHeight', spaceHeight);\n if (spaceHeight > height) {\n height = spaceHeight;\n }\n\n const spaceDepth = treePage.location.translateZ;\n // console.log('spaceDepth', spaceDepth);\n if (spaceDepth > depth) {\n depth = spaceDepth;\n }\n });\n\n // console.log('-------------');\n\n return {\n width,\n height,\n depth,\n topCorner,\n };\n}\n\n\nexport const findPage = (\n view: string,\n pages: TreePlane[],\n) => {\n for (const page of pages) {\n if (page.route === view) {\n return page;\n }\n }\n\n return;\n}\n\n\nexport const splitIntoGroups = <T>(\n data: T[],\n length: number,\n): T[][] => {\n const initialArray = [...data];\n const groups: any[] = [];\n\n while (initialArray.length) {\n const group = initialArray.splice(0, length);\n groups.push(group);\n }\n\n return groups;\n}\n\n\nexport const getTreePlaneByPlaneID = (\n tree: TreePlane[],\n planeID: string\n): TreePlane | null => {\n let _page = null;\n\n for (const page of tree) {\n if (page.planeID === planeID) {\n _page = page;\n }\n\n if (page.children && !_page) {\n _page = getTreePlaneByPlaneID(page.children, planeID);\n }\n\n if (_page) {\n break;\n }\n }\n\n return _page;\n}\n// #endregion module\n","// #region imports\n // #region libraries\n import {\n /** constants */\n ROOTS_GAP,\n\n /** interfaces */\n PluridPlane,\n PluridConfiguration,\n TreePlane,\n SpaceLocation,\n LocationCoordinates,\n LinkCoordinates,\n TopPlanePoint,\n } from '@plurid/plurid-data';\n\n import {\n mathematics,\n } from '@plurid/plurid-functions';\n // #endregion libraries\n\n\n // #region external\n import {\n resolvePluridPlaneData,\n } from '~modules/planes';\n\n import {\n getTreePlaneByPlaneID,\n } from '../utilities';\n // #endregion external\n// #endregion imports\n\n\n\n// #region module\nconst toRadians = mathematics.geometry.toRadians;\n\n\nexport const computePath = (\n tree: TreePlane[],\n planeID: string,\n): TreePlane[] => {\n const path: TreePlane[] = [];\n const page = getTreePlaneByPlaneID(tree, planeID);\n\n if (page) {\n path.push( { ...page} );\n\n let parentID = page.parentPlaneID;\n if (!parentID) {\n return path;\n }\n\n while (parentID) {\n const parentPage = getTreePlaneByPlaneID(tree, parentID);\n if (parentPage) {\n const page = { ...parentPage };\n page.children = [];\n path.push(page);\n parentID = parentPage.parentPlaneID;\n }\n }\n }\n\n return path.reverse();\n}\n\n\nexport const computePluridPlaneLocation = (\n linkCoordinates: LinkCoordinates,\n treePageParent: TreePlane,\n bridgeLength: number = 100,\n linkPlaneAngle: number = 90,\n): LocationCoordinates => {\n /** Compute the coordinates of the link. */\n const parentAngleRadians = toRadians(treePageParent.location.rotateY);\n const linkPoint: TopPlanePoint = {\n x: treePageParent.location.translateX + linkCoordinates.x * Math.cos(parentAngleRadians),\n z: treePageParent.location.translateZ - linkCoordinates.x * Math.sin(parentAngleRadians),\n };\n\n /** Compute the coordinates of the plane. */\n const linkAngleRadians = toRadians(linkPlaneAngle + treePageParent.location.rotateY);\n const x = linkPoint.x + bridgeLength * Math.cos(linkAngleRadians);\n const z = linkPoint.z - bridgeLength * Math.sin(linkAngleRadians);\n\n const y = treePageParent.location.translateY + linkCoordinates.y;\n\n const locationCoordinates: LocationCoordinates = {\n x,\n y,\n z,\n };\n\n return locationCoordinates;\n}\n\n\nexport const recomputeChildrenLocation = (\n page: TreePlane,\n): TreePlane[] => {\n if (!page.children) {\n return [];\n }\n\n const updatedChildren: TreePlane[] = [];\n\n for (const child of page.children) {\n if (child.linkCoordinates) {\n const location = computePluridPlaneLocation(\n child.linkCoordinates,\n page,\n child.bridgeLength,\n child.planeAngle,\n );\n\n const updatedChild = {\n ...child,\n location: {\n ...child.location,\n translateX: location.x,\n translateY: location.y,\n translateZ: location.z,\n },\n };\n\n const children = updatedChild.children\n ? recomputeChildrenLocation(updatedChild)\n : [];\n\n const updatedChildWithChildren = {\n ...updatedChild,\n children,\n };\n\n updatedChildren.push(updatedChildWithChildren);\n }\n }\n\n return updatedChildren;\n}\n\n\n\n\n\n\n/**\n * Compute translateX based on configuration layout if it exists\n * or based on the index of the root.\n *\n * @param configuration\n * @param root\n * @param index\n */\nexport const computeRootLocationX = <C>(\n configuration: PluridConfiguration | undefined,\n root: PluridPlane<C>,\n index: number,\n) => {\n const rootData = resolvePluridPlaneData(root);\n // SSR-safe: `plurid-react-server` renders where `window` is undefined.\n const innerWidth = typeof window === 'undefined' ? 1440 : window.innerWidth;\n\n let translateX = 0;\n if (configuration && configuration.space) {\n // VESTIGIAL: `layout` used to be a `string[]` of routes; it is now an object, so this\n // branch never fires and per-route camera/center placement no-ops. Reworking it to\n // resolve a root's computed X from the active layout is a Phase D feature task.\n if (Array.isArray(configuration.space.layout)) {\n const layoutIndex = (configuration.space.layout as string[]).indexOf(rootData.route);\n translateX = innerWidth * layoutIndex + ROOTS_GAP * layoutIndex;\n }\n } else {\n translateX = index === 0\n ? 0\n : innerWidth * index + ROOTS_GAP * index;\n }\n\n return translateX;\n}\n\n\nexport const computeSpaceLocation = (\n configuration: PluridConfiguration,\n): SpaceLocation => {\n // if (configuration.space && configuration.space.layout) {\n // const {\n // layout,\n // } = configuration.space;\n\n // }\n\n const cameraLocationX = computeCameraLocationX(configuration);\n const spaceLocation = {\n rotationX: 0,\n rotationY: 0,\n translationX: cameraLocationX,\n translationY: 0,\n translationZ: 0,\n scale: 1,\n };\n\n return spaceLocation;\n}\n\n\n/**\n * Based on the specified camera, compute the X translation\n *\n * @param configuration\n */\nexport const computeCameraLocationX = (\n configuration: PluridConfiguration,\n) => {\n let translateX = 0;\n const innerWidth = typeof window === 'undefined' ? 1440 : window.innerWidth;\n\n // VESTIGIAL (see computeRootLocationX): `layout` is no longer a route array, so this never\n // fires and `space.camera` centering no-ops. Rework with the active layout in Phase D.\n if (configuration.space\n && Array.isArray(configuration.space.layout)\n && typeof configuration.space.camera === 'string'\n ) {\n const layoutIndex = (configuration.space.layout as string[]).indexOf(configuration.space.camera || '');\n translateX = innerWidth * layoutIndex + ROOTS_GAP * layoutIndex;\n }\n\n // account for camera space inversion\n return -1 * translateX;\n}\n// #endregion module\n","// #region imports\n // #region libraries\n import {\n PluridConfiguration,\n TreePlane,\n\n ROOTS_GAP,\n defaultConfiguration,\n } from '@plurid/plurid-data';\n\n import {\n mathematics,\n } from '@plurid/plurid-functions';\n // #endregion libraries\n\n\n // #region external\n import {\n recomputeChildrenLocation,\n } from '../location';\n // #endregion external\n// #endregion imports\n\n\n\n// #region module\nconst computeColumnLayout = (\n roots: TreePlane[],\n columns: number = 1,\n columnLength?: number,\n gap: number = ROOTS_GAP,\n configuration: PluridConfiguration = defaultConfiguration,\n): TreePlane[] => {\n const windowInnerWidth = typeof window === 'undefined'\n ? 1440\n : window.innerWidth;\n const windowInnerHeight = typeof window === 'undefined'\n ? 840\n : window.innerHeight;\n\n const tree: TreePlane[] = [];\n const configurationWidth = configuration.elements.plane.width;\n const width = mathematics.numbers.checkIntegerNonUnit(configurationWidth)\n ? configurationWidth\n : configurationWidth * windowInnerWidth;\n const height = windowInnerHeight;\n const gapValue = mathematics.numbers.checkIntegerNonUnit(gap)\n ? gap\n : gap * width;\n\n // Guard against `columns === 0` (→ `Math.ceil(n/0) === Infinity`, which collapses every\n // plane into one column) and honor an explicit `columnLength` only when it's a positive\n // count (`|| ` alone would discard a deliberate small value but also a bogus 0/negative).\n const safeColumns = columns > 0 ? columns : 1;\n const length = columnLength && columnLength > 0\n ? columnLength\n : Math.ceil(roots.length / safeColumns);\n\n for (const [index, root] of roots.entries()) {\n const rowIndex = index % length;\n const columnIndex = Math.floor(index / length);\n\n const translateX = columnIndex * (width + gapValue);\n const translateY = rowIndex * (height + gapValue);\n\n const treePage: TreePlane = {\n ...root,\n location: {\n translateX,\n translateY,\n translateZ: 0,\n rotateX: 0,\n rotateY: 0,\n },\n };\n\n const children = recomputeChildrenLocation(treePage);\n\n const treePageWithChildren = {\n ...treePage,\n children,\n };\n\n tree.push(treePageWithChildren);\n }\n\n return tree;\n}\n// #endregion module\n\n\n\n// #region exports\nexport default computeColumnLayout;\n// #endregion exports\n","// #region imports\n // #region libraries\n import {\n PluridConfiguration,\n TreePlane,\n\n ROOTS_GAP,\n defaultConfiguration,\n } from '@plurid/plurid-data';\n\n import {\n mathematics,\n } from '@plurid/plurid-functions';\n // #endregion libraries\n\n\n // #region external\n import {\n recomputeChildrenLocation,\n } from '../location';\n // #endregion external\n// #endregion imports\n\n\n\n// #region module\nconst computeRowLayout = (\n roots: TreePlane[],\n rows: number = 1,\n rowLength?: number,\n gap: number = ROOTS_GAP,\n configuration: PluridConfiguration = defaultConfiguration,\n): TreePlane[] => {\n const windowInnerWidth = typeof window === 'undefined'\n ? 1440\n : window.innerWidth;\n const windowInnerHeight = typeof window === 'undefined'\n ? 840\n : window.innerHeight;\n\n const tree: TreePlane[] = [];\n const configurationWidth = configuration.elements.plane.width;\n const width = mathematics.numbers.checkIntegerNonUnit(configurationWidth)\n ? configurationWidth\n : configurationWidth * windowInnerWidth;\n const height = windowInnerHeight;\n const gapValue = mathematics.numbers.checkIntegerNonUnit(gap)\n ? gap\n : gap * width;\n\n // Guard against `rows === 0` (→ `Math.ceil(n/0) === Infinity`, collapsing every plane into\n // one row) and honor `rowLength` only as a positive count (see column.ts).\n const safeRows = rows > 0 ? rows : 1;\n const length = rowLength && rowLength > 0\n ? rowLength\n : Math.ceil(roots.length / safeRows);\n\n for (const [index, root] of roots.entries()) {\n const rowIndex = Math.floor(index / length);\n const columnIndex = index % length;\n\n const translateX = columnIndex * (width + gapValue);\n const translateY = rowIndex * (height + gapValue);\n\n const treePage: TreePlane = {\n ...root,\n location: {\n translateX,\n translateY,\n translateZ: 0,\n rotateX: 0,\n rotateY: 0,\n },\n };\n\n const children = recomputeChildrenLocation(treePage);\n\n const treePageWithChildren = {\n ...treePage,\n children,\n };\n\n tree.push(treePageWithChildren);\n }\n\n return tree;\n}\n// #endregion module\n\n\n\n// #region exports\nexport default computeRowLayout;\n// #endregion exports\n","// #region imports\n // #region libraries\n import {\n TreePlane,\n PluridConfiguration,\n\n defaultConfiguration,\n } from '@plurid/plurid-data';\n\n import {\n mathematics,\n } from '@plurid/plurid-functions';\n // #endregion libraries\n\n\n // #region external\n import {\n splitIntoGroups,\n } from '../utilities';\n\n import {\n recomputeChildrenLocation,\n } from '../location';\n // #endregion external\n// #endregion imports\n\n\n\n// #region module\nconst toRadians = mathematics.geometry.toRadians;\n\n\nconst computeFaceToFaceTranslateZ = (\n width: number,\n angle: number,\n first: boolean,\n) => {\n if (first) {\n return width * Math.sin(toRadians(angle));\n }\n\n return 0;\n}\n\nconst computeFaceToFaceTranslateX = (\n width: number,\n angle: number,\n gap: number,\n first: boolean,\n index: number,\n) => {\n const firstTranslateX = width * Math.cos(toRadians(angle));\n if (first) {\n return firstTranslateX;\n }\n\n const value = width * (index - 1)\n + 2 * firstTranslateX\n + gap * index;\n return value;\n}\n\nconst computeFaceToFaceRotateY = (\n angle: number,\n first: boolean,\n last: boolean,\n) => {\n const rotateY = first\n ? angle\n : last\n ? -angle\n : 0;\n\n return rotateY;\n}\n\n\nconst computeFaceToFaceLayout = (\n roots: TreePlane[],\n angle: number = 45,\n gap: number = 0,\n middle: number = 0,\n configuration: PluridConfiguration = defaultConfiguration,\n): TreePlane[] => {\n const windowInnerWidth = typeof window === 'undefined'\n ? 1440\n : window.innerWidth;\n const windowInnerHeight = typeof window === 'undefined'\n ? 840\n : window.innerHeight;\n\n const tree: TreePlane[] = [];\n const width = mathematics.numbers.checkIntegerNonUnit(configuration.elements.plane.width)\n ? configuration.elements.plane.width\n : configuration.elements.plane.width * windowInnerWidth;\n const height = windowInnerHeight;\n const planeAngle = 90 - angle / 2;\n const columns = 2 + middle;\n const rows = splitIntoGroups(roots, columns);\n\n // Use the SAME absolute-vs-unit test as column.ts/row.ts (`checkIntegerNonUnit`) instead of\n // `Number.isInteger`, so a fractional gap like `0.04` is treated as a unit of `width`\n // consistently across all layouts.\n const gapValue = mathematics.numbers.checkIntegerNonUnit(gap)\n ? gap\n : gap * width;\n\n for (const [rowIndex, row] of rows.entries()) {\n // Include the gap in row spacing so gapped rows don't overlap (no-op when gap = 0).\n const translateY = rowIndex * (height + gapValue);\n\n for (const [index, page] of row.entries()) {\n const first = index === 0;\n // The last plane IN THIS ROW — `columns - 1` is wrong for a final partial row that\n // holds fewer planes than `columns`.\n const last = index === row.length - 1;\n\n const translateZ = computeFaceToFaceTranslateZ(\n width,\n planeAngle,\n first,\n );\n const translateX = computeFaceToFaceTranslateX(\n width,\n planeAngle,\n gapValue,\n first,\n index\n );\n const rotateY = computeFaceToFaceRotateY(\n planeAngle,\n first,\n last,\n );\n\n const treePage: TreePlane = {\n ...page,\n location: {\n translateX,\n translateY,\n translateZ,\n rotateX: 0,\n rotateY,\n },\n };\n\n const children = recomputeChildrenLocation(treePage);\n\n const treePageWithChildren = {\n ...treePage,\n children,\n }\n\n tree.push(treePageWithChildren);\n }\n }\n\n return tree;\n}\n// #endregion module\n\n\n\n// #region exports\nexport default computeFaceToFaceLayout;\n// #endregion exports\n","// #region imports\n // #region libraries\n import {\n TreePlane,\n PluridConfiguration,\n\n defaultConfiguration,\n } from '@plurid/plurid-data';\n\n import {\n mathematics,\n } from '@plurid/plurid-functions';\n // #endregion libraries\n\n\n // #region external\n import {\n recomputeChildrenLocation,\n } from '../location';\n // #endregion external\n// #endregion imports\n\n\n\n// #region module\nconst computeSheavesLayout = (\n roots: TreePlane[],\n depth: number = 0.3,\n offsetX: number = 0,\n offsetY: number = 0,\n configuration: PluridConfiguration = defaultConfiguration,\n): TreePlane[] => {\n const windowInnerWidth = typeof window === 'undefined'\n ? 1440\n : window.innerWidth;\n const windowInnerHeight = typeof window === 'undefined'\n ? 840\n : window.innerHeight;\n\n const tree: TreePlane[] = [];\n\n const width = mathematics.numbers.checkIntegerNonUnit(configuration.elements.plane.width)\n ? configuration.elements.plane.width\n : configuration.elements.plane.width * windowInnerWidth;\n const height = windowInnerHeight;\n\n // Sheaves = a stack of planes receding into depth. `depth` is the per-sheet Z step\n // (a fraction of the plane width, or an explicit pixel value like the width config),\n // with optional per-sheet X/Y cascade so the stack fans out instead of fully\n // occluding. Earlier this pinned every plane to (0,0,0) — a single visible plane.\n const depthStep = mathematics.numbers.checkIntegerNonUnit(depth)\n ? depth\n : depth * width;\n\n for (const [index, page] of roots.entries()) {\n const translateX = index * offsetX;\n const translateY = index * offsetY;\n const translateZ = -index * depthStep;\n\n const treePage: TreePlane = {\n ...page,\n location: {\n translateX,\n translateY,\n translateZ,\n rotateX: 0,\n rotateY: 0,\n },\n };\n\n const children = recomputeChildrenLocation(treePage);\n\n const treePageWithChildren = {\n ...treePage,\n children,\n }\n\n tree.push(treePageWithChildren);\n }\n\n return tree;\n}\n// #endregion module\n\n\n\n// #region exports\nexport default computeSheavesLayout;\n// #endregion exports\n","// #region imports\n // #region libraries\n import {\n TreePlane,\n PluridConfiguration,\n\n defaultConfiguration,\n } from '@plurid/plurid-data';\n // #endregion libraries\n\n\n // #region external\n import {\n recomputeChildrenLocation,\n } from '../location';\n // #endregion external\n\n\n // #region internal\n import computeColumnLayout from './column';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nconst computeZigZagLayout = (\n pages: TreePlane[],\n angle: number = 45,\n configuration: PluridConfiguration = defaultConfiguration,\n): TreePlane[] => {\n const windowInnerWidth = typeof window === 'undefined'\n ? 1440\n : window.innerWidth;\n const windowInnerHeight = typeof window === 'undefined'\n ? 840\n : window.innerHeight;\n\n const tree: TreePlane[] = [];\n\n const singleColumnedRoots = computeColumnLayout(pages, 1);\n\n for (const [index, page] of singleColumnedRoots.entries()) {\n const value = index % 2 === 0\n ? 1\n : -1;\n page.location.rotateY = value * angle;\n\n const children = recomputeChildrenLocation(page);\n\n const treePageWithChildren = {\n ...page,\n children,\n }\n\n tree.push(\n {...treePageWithChildren}\n );\n }\n\n return tree;\n}\n// #endregion module\n\n\n\n// #region external\nexport default computeZigZagLayout;\n// #endregion external\n","// #region imports\n // #region internal\n import Tree from './object';\n\n import * as logic from './logic';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region exports\nexport {\n Tree,\n logic,\n};\n// #endregion exports\n","// #region imports\n // #region libraries\n import {\n /** constants */\n PLANE_DEFAULT_ANGLE,\n PLURID_ROUTE_SEPARATOR,\n\n /** enumerations */\n LAYOUT_TYPES,\n\n /** interfaces */\n PluridView,\n PluridApplicationView,\n PluridConfiguration,\n RegisteredPluridPlane,\n TreePlane,\n TreePlaneLocation,\n LinkCoordinates,\n PathParameters,\n PluridRoute,\n PluridPlane,\n } from '@plurid/plurid-data';\n\n import {\n uuid,\n } from '@plurid/plurid-functions';\n // #endregion libraries\n\n\n // #region external\n import {\n computeColumnLayout,\n computeRowLayout,\n computeFaceToFaceLayout,\n computeSheavesLayout,\n computeZigZagLayout,\n } from '../layout';\n\n import {\n computePluridPlaneLocation,\n } from '../location';\n\n import {\n getTreePlaneByPlaneID,\n } from '../utilities';\n\n import {\n IsoMatcher,\n } from '~modules/routing';\n\n import {\n computeComparingPath,\n extractParametersValues,\n } from '~modules/routing/Parser/logic';\n\n import {\n computePlaneAddress,\n } from '~modules/routing/logic';\n // #endregion external\n// #endregion imports\n\n\n\n// #region module\nconst matchRouteElements = (\n routePath: string,\n viewPath: string,\n) => {\n // routePath = routePath[0] === '/'\n // ? routePath.slice(1)\n // : routePath;\n // viewPath = viewPath[0] === '/'\n // ? viewPath.slice(1)\n // : viewPath;\n\n // console.log('viewPath', viewPath);\n // console.log('routePath', routePath);\n\n if (routePath === viewPath) {\n return {\n value: viewPath,\n parameters: {},\n query: {},\n };\n }\n\n // console.log('viewPath', viewPath);\n // console.log('routePath', routePath);\n\n\n // check if viewPath is a parametrization of routePath\n const parameters: string[] = [];\n const routeSplit = routePath.slice(1).split('/');\n // console.log('routeSplit', routeSplit);\n\n routeSplit.forEach(routeElement => {\n if (routeElement[0] === ':') {\n parameters.push(routeElement);\n } else {\n parameters.push('');\n }\n });\n // console.log('parameters', parameters);\n\n const {\n locationElements,\n comparingPath,\n } = computeComparingPath(viewPath, parameters);\n // console.log('comparingPath', comparingPath);\n // console.log('routePath', routePath);\n // console.log('locationElements', locationElements);\n\n // if (comparingPath !== '/' + routePath) {\n // return;\n // }\n if (comparingPath !== routePath) {\n return;\n }\n\n const parametersValues = extractParametersValues(\n parameters,\n locationElements,\n );\n // console.log('parametersValues', parametersValues);\n return {\n value: viewPath,\n parameters: parametersValues,\n query: {},\n };\n}\n\n\nconst matchRouteToView = (\n route: string,\n view: string,\n): undefined | any => {\n // const routeSplit = route.split(PLURID_ROUTE_SEPARATOR);\n // const viewSplit = view.split(PLURID_ROUTE_SEPARATOR);\n\n // console.log('route', route);\n // console.log('view', view);\n // console.log('routeSplit', routeSplit);\n // console.log('viewSplit', viewSplit);\n\n\n // if (routeSplit.length !== viewSplit.length) {\n // return;\n // }\n\n const pathMatch = matchRouteElements(\n route,\n view,\n );\n // console.log('pathMatch', pathMatch);\n\n return {\n path: {\n ...pathMatch,\n },\n space: {\n // ...spaceMatch,\n },\n universe: {\n // ...universeMatch,\n },\n cluster: {\n // ...clusterMatch,\n },\n plane: {\n // ...planeMatch,\n },\n };\n\n\n\n\n // if (routeSplit.length !== viewSplit.length) {\n // return;\n // }\n\n // const routePath = routeSplit[2];\n // // if (!routePath) return;\n // const viewPath = viewSplit[2];\n // // if (!viewPath) return;\n // console.log('viewPath', viewPath);\n // const pathMatch = matchRouteElements(\n // routePath,\n // viewPath,\n // );\n // console.log('pathMatch', pathMatch);\n // if (!pathMatch) {\n // return;\n // }\n\n\n // const routeSpace = routeSplit[3];\n // // if (!routeSpace) return;\n // const viewSpace = viewSplit[3];\n // // if (!viewSpace) return;\n // const spaceMatch = matchRouteElements(\n // routeSpace,\n // viewSpace,\n // );\n // // console.log('spaceMatch', spaceMatch);\n // if (!spaceMatch) {\n // return;\n // }\n\n\n // const routeUniverse = routeSplit[4];\n // // if (!routeUniverse) return;\n // const viewUniverse = viewSplit[4];\n // // if (!viewUniverse) return;\n // const universeMatch = matchRouteElements(\n // routeUniverse,\n // viewUniverse,\n // );\n // // console.log('universeMatch', universeMatch);\n // if (!universeMatch) {\n // return;\n // }\n\n\n // const routeCluster = routeSplit[5];\n // // if (!routeCluster) return;\n // const viewCluster = viewSplit[5];\n // // if (!viewCluster) return;\n // const clusterMatch = matchRouteElements(\n // routeCluster,\n // viewCluster,\n // );\n // // console.log('clusterMatch', clusterMatch);\n // if (!clusterMatch) {\n // return;\n // }\n\n\n // const routePlane = routeSplit[6];\n // // if (!routePlane) return;\n // const viewPlane = viewSplit[6];\n // // if (!viewPlane) return;\n // const planeMatch = matchRouteElements(\n // routePlane,\n // viewPlane,\n // );\n // // console.log('planeMatch', planeMatch);\n // if (!planeMatch) {\n // return;\n // }\n\n // return {\n // path: {\n // ...pathMatch,\n // },\n // space: {\n // ...spaceMatch,\n // },\n // universe: {\n // ...universeMatch,\n // },\n // cluster: {\n // ...clusterMatch,\n // },\n // plane: {\n // ...planeMatch,\n // },\n // };\n}\n\n\n/**\n * Given a view resolve it to an absolute view\n * and compute a TreePlane if there is a RegisteredPluridPlane\n * for that absolute view.\n *\n * @param view\n */\nexport const resolveViewItem = <C>(\n planes: Map<string, RegisteredPluridPlane<C>>,\n view: string | PluridView,\n configuration: PluridConfiguration,\n origin = 'origin',\n getCount?: () => number,\n): TreePlane | undefined => {\n // console.log('resolveViewItem', planes);\n\n const {\n protocol,\n host,\n } = configuration.network;\n\n const viewData = typeof view === 'string'\n ? view\n : view.plane;\n // console.log('viewData', viewData);\n\n const viewAddress = computePlaneAddress(\n viewData,\n undefined,\n origin,\n );\n // console.log('viewAddress', viewAddress);\n\n // const resolvedView = resolveRoute(\n // viewData,\n // protocol,\n // host,\n // );\n // console.log('resolvedView', resolvedView);\n\n const iPlanes = planes.values();\n const pluridPlanes: PluridPlane<C>[] = [];\n for (const iPlane of iPlanes) {\n // console.log('iPlane', iPlane);\n\n const plane: PluridPlane<C> = {\n route: iPlane.route.absolute,\n component: iPlane.component,\n };\n pluridPlanes.push(plane);\n }\n\n const isoMatcher = new IsoMatcher(\n {\n planes: pluridPlanes,\n },\n origin,\n );\n\n // const match = isoMatcher.match(resolvedView.route);\n const match = isoMatcher.match(viewData);\n // console.log('isoMatcher match', match);\n\n if (match) {\n const route = match.match.value;\n\n const count = getCount ? getCount() : uuid.generate();\n const planeID = route + '@' + count;\n\n const treePlane: TreePlane = {\n sourceID: route,\n\n planeID,\n\n // route: resolvedView.route,\n route: viewAddress,\n\n routeDivisions: {\n protocol: {\n value: '',\n secure: false,\n },\n host: {\n value: host,\n controlled: true,\n },\n path: {\n parameters: {},\n query: {},\n value: '',\n },\n space: {\n parameters: {},\n query: {},\n value: '',\n },\n universe: {\n parameters: {},\n query: {},\n value: '',\n },\n cluster: {\n parameters: {},\n query: {},\n value: '',\n },\n plane: {\n parameters: {},\n fragments: {\n elements: [],\n texts: [],\n },\n query: {},\n value: '',\n },\n valid: true,\n },\n\n height: 0,\n width: 0,\n location: {\n translateX: 0,\n translateY: 0,\n translateZ: 0,\n rotateX: 0,\n rotateY: 0,\n },\n show: true,\n };\n\n return treePlane;\n }\n\n // for (const [route, _] of planes) {\n // // const routeMatch = matchRouteToView(\n // // route,\n // // resolvedView.route,\n // // );\n // // console.log('route', route);\n // // console.log('resolvedView.route', resolvedView.route);\n // // console.log('routeMatch', routeMatch);\n\n // if (resolvedView.route !== routeMatch.path.value) {\n // continue;\n // }\n // // if (!routeMatch) {\n // // continue;\n // // }\n\n // const treePlane: TreePlane = {\n // sourceID: route,\n\n // planeID: uuid.generate(),\n\n // route: resolvedView.route,\n\n // routeDivisions: {\n // protocol: {\n // value: '',\n // secure: false,\n // },\n // host: {\n // value: host,\n // controlled: true,\n // },\n // path: routeMatch.path,\n // space: routeMatch.space,\n // universe: routeMatch.universe,\n // cluster: routeMatch.cluster,\n // plane: routeMatch.plane,\n // valid: true,\n // },\n\n // height: 0,\n // width: 0,\n // location: {\n // translateX: 0,\n // translateY: 0,\n // translateZ: 0,\n // rotateX: 0,\n // rotateY: 0,\n // },\n // show: true,\n // };\n\n // return treePlane;\n // }\n\n return;\n}\n\n\n/**\n * Compute the space based on the layout.\n * If there is no configuration.space.layout, it uses the default '2 COLUMNS' layout.\n *\n * @param planes\n * @param configuration\n */\nexport const computeSpaceTree = <C>(\n planes: Map<string, RegisteredPluridPlane<C>>,\n view: PluridApplicationView,\n configuration: PluridConfiguration,\n layout: boolean | undefined,\n origin = 'origin',\n getCount: () => number,\n): TreePlane[] => {\n // console.log('computeSpaceTree');\n // console.log('planes', planes);\n // console.log('configuration', configuration);\n // console.log('computeSpaceTree view', view);\n // console.log('computeSpaceTree origin', origin);\n\n const treePlanes: TreePlane[] = [];\n\n for (const viewItem of view) {\n const treePlane = resolveViewItem(\n planes,\n viewItem,\n configuration,\n origin,\n getCount,\n );\n\n if (treePlane) {\n treePlanes.push(treePlane);\n }\n }\n\n if (!layout) {\n const layoutlessTreePlanes = treePlanes.map(plane => {\n return {\n ...plane,\n location: {\n rotateX: 0,\n rotateY: 0,\n translateX: 0,\n translateY: 0,\n translateZ: 0,\n },\n };\n });\n\n return layoutlessTreePlanes;\n }\n\n switch(configuration.space.layout.type) {\n case LAYOUT_TYPES.COLUMNS:\n {\n const {\n columns,\n columnLength,\n gap,\n } = configuration.space.layout;\n const columnLayoutTree = computeColumnLayout(\n treePlanes,\n columns,\n columnLength,\n gap,\n configuration,\n );\n return columnLayoutTree;\n }\n case LAYOUT_TYPES.ROWS:\n {\n const {\n rows,\n rowLength,\n gap,\n } = configuration.space.layout;\n const rowLayoutTree = computeRowLayout(\n treePlanes,\n rows,\n rowLength,\n gap,\n configuration,\n );\n return rowLayoutTree;\n }\n case LAYOUT_TYPES.ZIG_ZAG:\n {\n const {\n angle,\n } = configuration.space.layout;\n const zigzagLayoutTree = computeZigZagLayout(\n treePlanes,\n angle,\n configuration,\n );\n return zigzagLayoutTree;\n }\n case LAYOUT_TYPES.FACE_TO_FACE:\n {\n const {\n angle,\n gap,\n middle,\n } = configuration.space.layout;\n const faceToFaceLayoutTree = computeFaceToFaceLayout(\n treePlanes,\n angle,\n gap,\n middle,\n configuration,\n );\n return faceToFaceLayoutTree;\n }\n case LAYOUT_TYPES.SHEAVES:\n {\n const {\n depth,\n offsetX,\n offsetY,\n } = configuration.space.layout;\n const sheavesLayoutTree = computeSheavesLayout(\n treePlanes,\n depth,\n offsetX,\n offsetY,\n configuration,\n );\n return sheavesLayoutTree;\n }\n case LAYOUT_TYPES.META:\n {\n return [];\n }\n default:\n return [];\n }\n}\n\n\n\n\n\n\n\n\n\nexport const updateTreePlane = (\n tree: TreePlane[],\n updatedPlane: TreePlane,\n): TreePlane[] => {\n // Immutable + structurally-shared: only the nodes ON THE PATH to `updatedPlane` get new\n // object identities; every untouched subtree keeps its original reference (so React.memo /\n // referential selectors can skip the planes that didn't change). Previously this mutated\n // `treePlane.children` in place, corrupting the input tree (Redux stale-render/double-apply).\n let changed = false;\n\n const mapped = tree.map(treePlane => {\n if (treePlane.planeID === updatedPlane.planeID) {\n changed = true;\n return updatedPlane;\n }\n\n if (treePlane.children) {\n const newChildren = updateTreePlane(\n treePlane.children,\n updatedPlane,\n );\n if (newChildren !== treePlane.children) {\n changed = true;\n return {\n ...treePlane,\n children: newChildren,\n };\n }\n }\n\n return treePlane;\n });\n\n // Same reference out when nothing matched — preserves structural sharing up the recursion.\n return changed ? mapped : tree;\n}\n\n\n\nexport interface UpdatedTreeWithNewPlane {\n pluridPlaneID: string;\n updatedTree: TreePlane[];\n updatedTreePlane?: TreePlane;\n}\n\nexport const updateTreeWithNewPlane = <C>(\n planeRoute: string,\n parentPlaneID: string,\n linkCoordinates: LinkCoordinates,\n tree: TreePlane[],\n planesRegistry: Map<string, RegisteredPluridPlane<C>>,\n configuration: PluridConfiguration,\n hostname = 'origin',\n): UpdatedTreeWithNewPlane => {\n const parentPlane = getTreePlaneByPlaneID(tree, parentPlaneID);\n // console.log('updateTreeWithNewPlane parentPlane', parentPlane);\n\n if (!parentPlane) {\n return {\n pluridPlaneID: '',\n updatedTree: tree,\n };\n }\n\n const location = computePluridPlaneLocation(\n linkCoordinates,\n parentPlane,\n // Couple the parent→child GAP to the same configured length the bridge renders at,\n // otherwise the bridge visual (width) overshoots/undershoots the actual gap.\n configuration.space.bridge?.length ?? 100,\n );\n // console.log('location', location);\n // console.log('planeRoute', planeRoute);\n\n const treePlane = resolveViewItem(\n planesRegistry,\n planeRoute,\n configuration,\n hostname,\n );\n // console.log('updateTreeWithNewPlane treePlane', treePlane);\n\n if (!treePlane) {\n return {\n pluridPlaneID: '',\n updatedTree: tree,\n };\n }\n\n const updatedTreePlane = {\n ...treePlane,\n parentPlaneID,\n location: {\n translateX: location.x,\n translateY: location.y,\n translateZ: location.z,\n rotateX: 0,\n rotateY: parentPlane.location.rotateY + PLANE_DEFAULT_ANGLE,\n },\n // Configurable bridge geometry (defaults preserve the original 100 / 90).\n bridgeLength: configuration.space.bridge?.length ?? 100,\n planeAngle: configuration.space.bridge?.planeAngle ?? 90,\n linkCoordinates,\n };\n // console.log('updatedTreePlane', updatedTreePlane);\n\n\n // const newPlane: TreePlane = {\n // sourceID: '',\n // route: planePath,\n // routeDivisions: {\n // protocol: '',\n // host: {\n // value: '',\n // controlled: false,\n // },\n // path: {\n // value: '',\n // parameters: {},\n // query: {},\n // },\n // space: {\n // value: '',\n // parameters: {},\n // query: {},\n // },\n // universe: {\n // value: '',\n // parameters: {},\n // query: {},\n // },\n // cluster: {\n // value: '',\n // parameters: {},\n // query: {},\n // },\n // plane: {\n // value: '',\n // parameters: {},\n // query: {},\n // },\n // valid: false,\n // },\n // // parameters: extractedParameters,\n // // parameters: {},\n // planeID,\n // width: 0,\n // height: 0,\n // parentPlaneID,\n // location: {\n // translateX: location.x,\n // translateY: location.y,\n // translateZ: location.z,\n // rotateX: 0,\n // rotateY: parentPlane.location.rotateY + PLANE_DEFAULT_ANGLE,\n // },\n // show: true,\n // bridgeLength: 100,\n // planeAngle: 90,\n // linkCoordinates,\n // };\n // console.log('newPlane', newPlane);\n\n // New children array (don't `.push` into the shared `parentPlane.children`, which mutates\n // the input tree).\n const updatedParentPlane: TreePlane = {\n ...parentPlane,\n children: parentPlane.children\n ? [...parentPlane.children, updatedTreePlane]\n : [updatedTreePlane],\n };\n\n const updatedTree = updateTreePlane(tree, updatedParentPlane);\n\n return {\n pluridPlaneID: updatedTreePlane.planeID,\n updatedTree,\n updatedTreePlane,\n };\n}\n\n\nexport const updatePlaneLocation = (\n tree: TreePlane[],\n parentPlaneID: string,\n planeID: string,\n linkCoordinates: LinkCoordinates,\n) => {\n const parentPlane = getTreePlaneByPlaneID(tree, parentPlaneID);\n const plane = getTreePlaneByPlaneID(tree, planeID);\n\n if (!parentPlane || !plane) {\n return tree;\n }\n\n const location = computePluridPlaneLocation(\n linkCoordinates,\n parentPlane,\n // Use the plane's STORED bridge geometry (set at spawn from config), otherwise this\n // recompute resets the gap to the default 100 and the bridge visual overshoots.\n plane.bridgeLength,\n plane.planeAngle,\n );\n\n // New plane object (don't mutate the live tree node in place); `updateTreePlane` then\n // swaps it in immutably with structural sharing.\n const updatedPlane: TreePlane = {\n ...plane,\n location: {\n translateX: location.x,\n translateY: location.y,\n translateZ: location.z,\n rotateX: 0,\n rotateY: parentPlane.location.rotateY + PLANE_DEFAULT_ANGLE,\n },\n };\n\n const updatedTree = updateTreePlane(\n tree,\n updatedPlane,\n );\n\n return updatedTree;\n}\n\n\n\nexport const updateTreeWithNewPage = (\n tree: TreePlane[],\n treePageParentPlaneID: string,\n pagePath: string,\n pageID: string,\n linkCoordinates: LinkCoordinates,\n parameters?: PathParameters,\n): UpdatedTreeWithNewPlane => {\n // to receive parameters and composePath from pagePath and parameters\n\n const treePageParent = getTreePlaneByPlaneID(tree, treePageParentPlaneID);\n // console.log('tree page parent', treePageParent);\n\n if (treePageParent) {\n const location = computePluridPlaneLocation(\n linkCoordinates,\n treePageParent,\n );\n\n // const extractedParameters = extractParameters(\n // pagePath,\n // parameters,\n // );\n\n const planeID = uuid.generate();\n const newTreePlane: TreePlane = {\n sourceID: pageID,\n route: pagePath,\n routeDivisions: {\n protocol: {\n value: '',\n secure: false,\n },\n host: {\n value: '',\n controlled: false,\n },\n path: {\n value: '',\n parameters: {},\n query: {},\n },\n space: {\n value: '',\n parameters: {},\n query: {},\n },\n universe: {\n value: '',\n parameters: {},\n query: {},\n },\n cluster: {\n value: '',\n parameters: {},\n query: {},\n },\n plane: {\n value: '',\n parameters: {},\n query: {},\n fragments: {\n texts: [],\n elements: [],\n },\n },\n valid: false,\n },\n // parameters: extractedParameters,\n // parameters: {},\n planeID,\n width: 0,\n height: 0,\n parentPlaneID: treePageParentPlaneID,\n location: {\n translateX: location.x,\n translateY: location.y,\n translateZ: location.z,\n rotateX: 0,\n rotateY: treePageParent.location.rotateY + PLANE_DEFAULT_ANGLE,\n },\n show: true,\n bridgeLength: 100,\n planeAngle: 90,\n linkCoordinates,\n };\n\n // New children array instead of `.push` into the shared `treePageParent.children`.\n const updatedTreePlaneParent = {\n ...treePageParent,\n children: treePageParent.children\n ? [...treePageParent.children, newTreePlane]\n : [newTreePlane],\n };\n\n const updatedTree = updateTreePlane(tree, updatedTreePlaneParent);\n\n return {\n pluridPlaneID: planeID,\n updatedTree,\n };\n }\n\n return {\n pluridPlaneID: '',\n updatedTree: tree,\n };\n}\n\n\n// `removePageFromTree` was a byte-for-byte duplicate of `removePlaneFromTree` (below) — same\n// immutable, structurally-shared removal, only the local names differed. It had no production\n// caller (only its own test), so it was deleted and its test repointed at `removePlaneFromTree`.\n\n\nexport const toggleChildren = (\n children: TreePlane[],\n): TreePlane[] => {\n const updatedChildren = children.map(child => {\n if (child.children) {\n const updatedChild = {\n ...child,\n show: !child.show,\n children: toggleChildren(child.children),\n }\n return updatedChild;\n }\n\n const updatedChild: TreePlane = {\n ...child,\n show: !child.show,\n };\n return updatedChild;\n });\n\n return updatedChildren;\n}\n\n\nexport const toggleAllChildren = (\n tree: TreePlane[],\n show: boolean,\n): TreePlane[] => {\n // Fully immutable: each plane becomes a NEW node with the toggled `show` and recursively\n // toggled children. The previous version mutated `plane.show`/`plane.children` in place —\n // which now throws, since callers (e.g. `togglePlaneFromTree`, post clone-removal) pass the\n // frozen Redux tree directly.\n return tree.map((plane) => ({\n ...plane,\n show,\n children: plane.children\n ? toggleAllChildren(plane.children, show)\n : plane.children,\n }));\n}\n\n\nexport interface TogglePlaneFromTree {\n updatedTree: TreePlane[];\n updatedPlane: TreePlane | undefined;\n}\n\nexport const togglePlaneFromTree = (\n tree: TreePlane[],\n pluridPlaneID: string,\n forceShow?: boolean,\n): TogglePlaneFromTree => {\n const updatedTree: TreePlane[] = [];\n\n let updatedPlane: TreePlane | undefined;\n\n for (const plane of tree) {\n if (plane.planeID === pluridPlaneID) {\n const show = forceShow ?? !plane.show;\n\n const treeUpdatedPlane: TreePlane = {\n ...plane,\n show,\n };\n\n if (treeUpdatedPlane.children) {\n const children = toggleAllChildren(\n treeUpdatedPlane.children,\n show,\n );\n treeUpdatedPlane.children = children;\n }\n\n updatedTree.push(treeUpdatedPlane);\n updatedPlane = {\n ...treeUpdatedPlane,\n };\n\n continue;\n }\n\n\n if (plane.children) {\n const {\n updatedTree: childrenUpdatedTree,\n updatedPlane: childrenUpdatedPlane,\n } = togglePlaneFromTree(\n plane.children,\n pluridPlaneID,\n forceShow,\n );\n\n // New node with the recursively-updated children (don't reassign\n // `plane.children`, which mutates the input tree).\n updatedTree.push({\n ...plane,\n children: [ ...childrenUpdatedTree ],\n });\n\n if (childrenUpdatedPlane) {\n updatedPlane = {\n ...childrenUpdatedPlane,\n };\n }\n\n continue;\n }\n\n\n updatedTree.push(plane);\n }\n\n return {\n updatedTree,\n updatedPlane,\n };\n}\n\n\nexport const getTreePlaneByID = (\n stateTree: TreePlane[],\n id: string | undefined,\n): TreePlane | undefined => {\n if (!id) {\n return;\n }\n\n for (const plane of stateTree) {\n if (plane.planeID === id) {\n return plane;\n }\n\n if (plane.children) {\n const found = getTreePlaneByID(\n plane.children,\n id,\n );\n\n if (found) {\n return found;\n }\n }\n }\n\n return;\n}\n\n\nexport const removeRootFromTree = (\n tree: TreePlane[],\n pluridPlaneID: string,\n) => {\n const updatedTree = tree.filter(plane => plane.planeID !== pluridPlaneID);\n\n return {\n updatedTree,\n };\n}\n\n\nexport const removePlaneFromTree = (\n tree: TreePlane[],\n pluridPlaneID: string,\n): TreePlane[] => {\n // Immutable + structurally shared: untouched subtrees keep their reference; only the\n // branch that drops a node (or whose descendant was dropped) gets a new identity. The\n // previous version mutated `plane.children` in place.\n let changed = false;\n\n const updatedTree: TreePlane[] = [];\n for (const plane of tree) {\n if (plane.planeID === pluridPlaneID) {\n changed = true;\n continue;\n }\n\n if (plane.children) {\n const children = removePlaneFromTree(\n plane.children,\n pluridPlaneID,\n );\n if (children !== plane.children) {\n changed = true;\n updatedTree.push({ ...plane, children });\n continue;\n }\n }\n\n updatedTree.push(plane);\n }\n\n return changed ? updatedTree : tree;\n}\n\n\n// #region structural sharing\n/**\n * `width`/`height` carry-forward: the layout recompute (`computeSpaceTree`) emits a root/child\n * plane with `width: 0, height: 0` because it cannot know the eventually-rendered pixel size —\n * that is measured at runtime by the plane's ResizeObserver and written back via a SEPARATE\n * `updateSpaceTreePlane` dispatch. So a `0` (or missing) incoming dimension means \"unmeasured,\n * keep what we already have\", NOT \"the plane shrank to zero\". Treating it as a change would both\n * blow away the live measurement on every relayout AND defeat reference reuse below.\n */\nconst carriedDimension = (\n next: number | undefined,\n previous: number,\n): number => (\n (!next && previous) ? previous : (next as number)\n);\n\nconst sameLocation = (\n a: TreePlaneLocation,\n b: TreePlaneLocation,\n): boolean =>\n a.translateX === b.translateX\n && a.translateY === b.translateY\n && a.translateZ === b.translateZ\n && a.rotateX === b.rotateX\n && a.rotateY === b.rotateY;\n\n/**\n * Every field the renderer/engine reads off a node EXCEPT `children` (reconciled recursively) and\n * `width`/`height` (carry-forward, handled by the caller). `routeDivisions`/`linkCoordinates` are\n * derived from `route`, so an equal `route` implies they match too.\n */\nconst sameNodeOwnFieldsExceptLocation = (\n a: TreePlane,\n b: TreePlane,\n): boolean =>\n a.sourceID === b.sourceID\n && a.planeID === b.planeID\n && a.parentPlaneID === b.parentPlaneID\n && a.route === b.route\n && a.show === b.show\n && a.bridgeLength === b.bridgeLength\n && a.planeAngle === b.planeAngle;\n\nconst sameNodeOwnFields = (\n a: TreePlane,\n b: TreePlane,\n): boolean =>\n sameNodeOwnFieldsExceptLocation(a, b)\n && sameLocation(a.location, b.location);\n\n// Mutually recursive with `reconcileNode`; declared as hoisted `function`s so order doesn't matter.\nfunction reconcileNodeList(\n previous: TreePlane[] | undefined,\n next: TreePlane[],\n): TreePlane[] {\n if (!previous || previous.length === 0) {\n return next;\n }\n\n const previousByID = new Map<string, TreePlane>();\n for (const node of previous) {\n if (node.planeID) {\n previousByID.set(node.planeID, node);\n }\n }\n\n let everyReused = previous.length === next.length;\n const reconciled = next.map((nextNode, index) => {\n // Pair by stable runtime identity (planeID), falling back to position.\n const previousNode = (nextNode.planeID && previousByID.get(nextNode.planeID))\n || previous[index];\n const result = reconcileNode(previousNode, nextNode);\n if (result !== previous[index]) {\n everyReused = false;\n }\n return result;\n });\n\n // If every node was reused in the same order/length, keep the previous ARRAY reference too, so\n // a consumer reading the whole list (e.g. `<PluridRoots>`) can also bail.\n return everyReused ? previous : reconciled;\n}\n\nfunction reconcileNode(\n previous: TreePlane | undefined,\n next: TreePlane,\n): TreePlane {\n if (!previous || previous === next) {\n return next;\n }\n\n // Depth-first: reconcile children so a subtree whose descendants are all unchanged collapses\n // to the previous reference here.\n let children = next.children;\n if (next.children && next.children.length > 0) {\n children = reconcileNodeList(previous.children, next.children);\n } else if (\n (!next.children || next.children.length === 0)\n && previous.children\n && previous.children.length === 0\n ) {\n children = previous.children;\n }\n\n const width = carriedDimension(next.width, previous.width);\n const height = carriedDimension(next.height, previous.height);\n\n // A manually-pinned plane keeps its user-set location + flag across auto-layout recomputes —\n // the same carry-forward idea as measured `width`/`height`. (The deliberate MOVE mutates the\n // tree directly via `transformSelectedPlanes`, bypassing reconcile, so it is NOT clobbered here.)\n const pinned = previous.manuallyPositioned === true;\n const location = pinned ? previous.location : next.location;\n const manuallyPositioned = pinned ? true : next.manuallyPositioned;\n\n const ownUnchanged = pinned\n ? sameNodeOwnFieldsExceptLocation(previous, next)\n : sameNodeOwnFields(previous, next);\n\n const unchanged =\n ownUnchanged\n && children === previous.children\n && width === previous.width\n && height === previous.height\n && manuallyPositioned === previous.manuallyPositioned;\n\n if (unchanged) {\n return previous;\n }\n\n // Partially changed: graft the reconciled children + carried dimensions + carried location/flag\n // so deeper unchanged subtrees, live measurement, and manual positioning all survive.\n if (\n children !== next.children\n || width !== next.width\n || height !== next.height\n || location !== next.location\n || manuallyPositioned !== next.manuallyPositioned\n ) {\n return {\n ...next,\n width,\n height,\n children,\n location,\n manuallyPositioned,\n };\n }\n\n return next;\n}\n\n/**\n * Structural-sharing reconciliation: returns `nextTree`, but every node (and array) that is\n * deep-equal to its counterpart in `previousTree` is replaced by the PREVIOUS reference. Producers\n * of a new tree routinely rebuild it from scratch (a layout recompute emits brand-new node objects\n * for every plane even when only one moved); without this, every connected `<PluridRoot>`/`<Plane>`\n * receives fresh-identity props and re-renders. Running this in the `setTree` reducer means EVERY\n * tree-replacing path (link spawn, relayout, resize, persistence restore) gets reference stability\n * for free, so per-plane memoization actually pays off and only the genuinely-changed planes render.\n */\nexport const reconcileTree = (\n previousTree: TreePlane[] | undefined,\n nextTree: TreePlane[],\n): TreePlane[] => {\n if (!previousTree || previousTree === nextTree) {\n return nextTree;\n }\n return reconcileNodeList(previousTree, nextTree);\n};\n// #endregion structural sharing\n// #endregion module\n","// #region imports\n // #region libraries\n import {\n TreePlane,\n RegisteredPluridPlane,\n PluridConfiguration,\n PluridApplicationView,\n } from '@plurid/plurid-data';\n // #endregion libraries\n\n\n // #region internal\n import {\n computeSpaceTree,\n } from './logic';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nexport interface TreeData<C> {\n planes: Map<string, RegisteredPluridPlane<C>>;\n view: PluridApplicationView;\n configuration: PluridConfiguration;\n layout?: boolean;\n previousTree?: TreePlane[];\n}\n\nexport default class Tree<C> {\n private data: TreeData<C>;\n private origin: string;\n private count = 0;\n\n\n constructor(\n data: TreeData<C>,\n origin: string = 'origin',\n ) {\n this.data = data;\n this.origin = origin;\n }\n\n\n public compute() {\n const {\n planes,\n view,\n configuration,\n layout,\n } = this.data;\n\n return computeSpaceTree(\n planes,\n view,\n configuration,\n layout,\n this.origin,\n this.getCount.bind(this),\n );\n }\n\n\n private getCount() {\n return this.count++;\n }\n}\n// #endregion module\n","// #region imports\n // #region internal\n import {\n computeViewTree,\n computeCulledView,\n checkPageInView,\n } from './logic';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nexport {\n computeViewTree,\n computeCulledView,\n checkPageInView,\n};\n// #endregion module\n","// #region imports\n // #region libraries\n import {\n /** interfaces */\n PluridView,\n TreePlane,\n SpaceLocation,\n } from '@plurid/plurid-data';\n // #endregion libraries\n\n\n // #region external\n import {\n findPage,\n } from '../utilities';\n // #endregion external\n// #endregion imports\n\n\n\n// #region module\nexport const computeViewTree = (\n pages: TreePlane[],\n view: string[] | PluridView[],\n): TreePlane[] => {\n const viewTree: TreePlane[] = [];\n\n for (const pageView of view) {\n const page = pages.find(p => p.route === pageView);\n\n if (page) {\n viewTree.push(page);\n }\n }\n\n return viewTree;\n}\n\n\n/**\n * Compute only the view within a given radius around the user.\n *\n * @param pages\n * @param view\n * @param location\n */\nexport const computeCulledView = (\n pages: TreePlane[],\n view: string[] | PluridView[],\n location: SpaceLocation,\n radius: number = 8000,\n) => {\n const culledView: string[] = [];\n\n for (const viewPage of view) {\n const path = typeof viewPage === 'string'\n ? viewPage\n : viewPage.plane;\n\n const page = findPage(\n path,\n pages,\n );\n if (!page) {\n return;\n }\n\n const pageInView = checkPageInView(\n page,\n location,\n radius,\n );\n\n if (pageInView) {\n culledView.push(\n page.route,\n );\n }\n }\n\n return culledView;\n}\n\n\nexport const checkPageInView = (\n page: TreePlane,\n location: SpaceLocation,\n radius: number,\n) => {\n const radiusLeft = location.translationX < 0\n ? Math.abs(location.translationX) - radius\n : -1 * location.translationX - radius;\n const radiusRight = location.translationX < 0\n ? Math.abs(location.translationX) + radius\n : -1 * location.translationX + radius;\n const locationX = page.location.translateX;\n\n const radiusTop = location.translationY < 0\n ? Math.abs(location.translationY) - radius\n : -1 * location.translationY - radius;\n const radiusBottom = location.translationY < 0\n ? Math.abs(location.translationY) + radius\n : -1 * location.translationY + radius;\n const locationY = page.location.translateY;\n\n const inViewOnX = radiusLeft <= locationX && locationX <= radiusRight;\n const inViewOnY = radiusTop <= locationY && locationY <= radiusBottom;\n\n if (\n inViewOnX && inViewOnY\n ) {\n return true;\n }\n\n return false;\n}\n// #endregion module\n","// #region imports\n // #region internal\n import compute from './compute';\n import * as local from './local';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region exports\nexport {\n compute,\n local,\n};\n// #endregion exports\n","// #region imports\n // #region libraries\n import {\n PluridApplicationView,\n PluridConfiguration,\n PluridPlanesRegistrar as IPluridPlanesRegistrar,\n PluridState,\n PluridMetastateState,\n PluridStateSpace,\n } from '@plurid/plurid-data';\n // #endregion libraries\n\n\n // #region external\n import * as space from '~modules/space';\n\n import {\n getRegisteredPlanes,\n } from '~modules/planes';\n // #endregion external\n// #endregion imports\n\n\n\n// #region module\nconst resolveSpace = <C>(\n view: PluridApplicationView,\n configuration: PluridConfiguration,\n planesRegistrar: IPluridPlanesRegistrar<C> | undefined,\n currentState: PluridState | undefined,\n localState: PluridState | undefined,\n precomputedState: Partial<PluridState> | undefined,\n contextState: PluridMetastateState | undefined,\n hostname = 'origin',\n) => {\n const registeredPlanes = getRegisteredPlanes(planesRegistrar);\n // console.log('resolveSpace > registeredPlanes', registeredPlanes);\n\n const spaceTree = new space.tree.Tree(\n {\n planes: registeredPlanes,\n configuration,\n view,\n },\n hostname,\n );\n // console.log('resolveSpace > spaceTree', spaceTree);\n\n const computedTree = spaceTree.compute();\n // console.log('resolveSpace > computedTree', computedTree);\n\n\n const stateSpace: PluridStateSpace = {\n loading: true,\n resolvedLayout: false,\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 transform: 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)',\n activeUniverseID: '',\n camera: {\n x: 0,\n y: 0,\n z: 0,\n },\n viewSize: {\n width: 771,\n height: 764,\n },\n spaceSize: {\n width: 771,\n height: 764,\n depth: 0,\n topCorner: {\n x: 0,\n y: 0,\n z: 0,\n },\n },\n culledView: [],\n activePlaneID: '',\n isolatePlane: '',\n lastClosedPlane: '',\n selectedPlaneIDs: [],\n draggingSelection: false,\n\n tree: computedTree,\n links: [],\n\n ...precomputedState?.space,\n ...contextState?.space,\n ...localState?.space,\n ...currentState?.space,\n\n view,\n };\n // console.log({\n // stateSpace,\n // precomputedState: precomputedState?.space,\n // contextState: contextState?.space,\n // localState: localState?.space,\n // currentState: currentState?.space,\n // });\n\n if (currentState) {\n stateSpace.translationX = currentState.space.translationX;\n stateSpace.translationY = currentState.space.translationY;\n stateSpace.translationZ = currentState.space.translationZ;\n stateSpace.rotationX = currentState.space.rotationX;\n stateSpace.rotationY = currentState.space.rotationY;\n stateSpace.scale = currentState.space.scale;\n }\n\n if (localState && !currentState) {\n stateSpace.translationX = localState.space.translationX;\n stateSpace.translationY = localState.space.translationY;\n stateSpace.translationZ = localState.space.translationZ;\n stateSpace.rotationX = localState.space.rotationX;\n stateSpace.rotationY = localState.space.rotationY;\n stateSpace.scale = localState.space.scale;\n }\n\n return stateSpace;\n}\n// #endregion module\n\n\n\n// #region exports\nexport {\n resolveSpace,\n};\n// #endregion exports\n","// #region imports\n // #region libraries\n import themes, {\n Theme,\n THEME_NAMES,\n } from '@plurid/plurid-themes';\n\n import {\n PluridConfiguration,\n PluridStateThemes,\n PluridState,\n } from '@plurid/plurid-data';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\nconst resolveThemes = (\n configuration: PluridConfiguration,\n precomputedState: Partial<PluridState> | undefined,\n) => {\n let generalTheme: Theme | undefined;\n let interactionTheme: Theme | undefined;\n\n if (typeof configuration.global.theme === 'object') {\n const {\n general,\n interaction,\n } = configuration.global.theme;\n\n if (typeof general === 'string') {\n if (Object.keys(THEME_NAMES).includes(general)) {\n generalTheme = (themes as any)[general];\n }\n }\n\n if (typeof interaction === 'string') {\n if (Object.keys(THEME_NAMES).includes(interaction)) {\n interactionTheme = (themes as any)[interaction];\n }\n }\n } else {\n if (Object.keys(THEME_NAMES).includes(configuration.global.theme)) {\n generalTheme = (themes as any)[configuration.global.theme];\n interactionTheme = (themes as any)[configuration.global.theme];\n }\n }\n\n const stateThemes: PluridStateThemes = {\n general: generalTheme || themes.plurid,\n interaction: interactionTheme || themes.plurid,\n ...precomputedState?.themes,\n };\n\n return stateThemes;\n}\n// #endregion module\n\n\n\n// #region exports\nexport {\n resolveThemes,\n};\n// #endregion exports\n","// #region imports\n // #region libraries\n import {\n PluridApplicationView,\n PluridConfiguration,\n PluridPlanesRegistrar as IPluridPlanesRegistrar,\n PluridState,\n PluridMetastateState,\n\n RecursivePartial,\n } from '@plurid/plurid-data';\n // #endregion libraries\n\n\n // #region external\n import * as generalEngine from '../../general';\n // #endregion external\n\n\n // #region internal\n import {\n resolveSpace,\n } from './space';\n\n import {\n resolveThemes,\n } from './themes';\n // #endregion internal\n// #endregion imports\n\n\n\n// #region module\nconst compute = <C>(\n view: PluridApplicationView,\n configuration: RecursivePartial<PluridConfiguration> | undefined,\n planesRegistrar: IPluridPlanesRegistrar<C> | undefined,\n currentState: PluridState | undefined,\n localState: PluridState | undefined,\n precomputedState: Partial<PluridState> | undefined,\n contextState: PluridMetastateState | undefined,\n hostname = 'origin',\n) => {\n // TODO\n // the compute call also needs to make clear the nature of the change\n // i.e. if any of the states overwrite the current state\n // or if the current state takes precedence.\n\n let stateConfiguration = generalEngine.configuration.merge(configuration);\n\n // Each subsequent state layer is merged ON TOP of the accumulated configuration\n // (passed as the `target` base), so every layer's fields are preserved and later\n // layers win conflicts — precedence low→high: userConfig < precomputed < context\n // < local < current. The previous version REASSIGNED `stateConfiguration` to a\n // fresh `merge(layer)` each iteration, discarding all prior layers so only the last\n // truthy one survived (layered on defaults alone).\n const configurations = [\n precomputedState?.configuration,\n contextState?.configuration,\n localState?.configuration,\n currentState?.configuration,\n ];\n\n for (const layer of configurations) {\n if (layer) {\n stateConfiguration = generalEngine.configuration.merge(layer, stateConfiguration);\n }\n }\n\n const stateSpace = resolveSpace(\n view,\n stateConfiguration,\n planesRegistrar,\n currentState,\n localState,\n precomputedState,\n contextState,\n hostname,\n );\n\n const stateThemes = resolveThemes(\n stateConfiguration,\n precomputedState,\n );\n\n\n const state: PluridState = {\n configuration: {\n ...stateConfiguration,\n },\n shortcuts: {\n global: true,\n ...precomputedState?.shortcuts,\n },\n space: {\n ...stateSpace,\n },\n themes: {\n ...stateThemes,\n },\n ui: {\n toolbarScrollPosition: 0,\n ...precomputedState?.ui,\n ...contextState?.ui,\n },\n };\n\n return state;\n}\n// #endregion module\n\n\n\n// #region exports\nexport default compute;\n// #endregion exports\n","// #region imports\n // #region libraries\n import {\n PluridState,\n PluridStorageAdapter,\n } from '@plurid/plurid-data';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\n/**\n * Bump when the persisted shape changes. A stored snapshot with a different version is\n * ignored on load (falls back to a fresh space) rather than risking a partial mis-merge.\n */\nconst PERSISTED_STATE_VERSION = 2;\n\nconst STORAGE_PREFIX = 'pluridState-';\n\n// Surface a serialization failure exactly once: it means the state holds something\n// non-serializable (a cycle, a DOM/function ref leaked into the tree) — a real bug that would\n// otherwise silently disable persistence forever. Distinct from the environmental setItem miss.\nlet serializeFailureWarned = false;\n\n/**\n * Only the meaningful, durable space fields are persisted — NOT the whole Redux state.\n * Excluded on purpose: transient flags (`loading`, `resolvedLayout`, `animatedTransform`,\n * `transformTime`), environmental sizes that are re-measured on mount (`viewSize`,\n * `spaceSize`, `culledView`, `view`), and the other slices (`configuration`, `themes`,\n * `shortcuts`, `ui`) which come from props/defaults each load.\n */\nconst PERSISTED_SPACE_FIELDS = [\n 'rotationX',\n 'rotationY',\n 'scale',\n 'translationX',\n 'translationY',\n 'translationZ',\n 'transform',\n 'camera',\n 'activePlaneID',\n 'isolatePlane',\n 'lastClosedPlane',\n 'tree',\n 'links',\n] as const;\n\ninterface PersistedSnapshot {\n version: number;\n space: Partial<PluridState['space']>;\n}\n\nconst storageKey = (\n id: string | undefined,\n) => STORAGE_PREFIX + (id || 'default');\n\n\n/**\n * The default backend: `localStorage` wrapped in the adapter shape, or `undefined` outside the\n * browser (SSR / no storage) — in which case every persistence entry point no-ops. A caller-supplied\n * adapter always wins over this.\n */\nconst localStorageAdapter = (): PluridStorageAdapter | undefined => {\n if (typeof localStorage === 'undefined') {\n return undefined;\n }\n\n return {\n getItem: (key) => localStorage.getItem(key),\n setItem: (key, value) => { localStorage.setItem(key, value); },\n removeItem: (key) => { localStorage.removeItem(key); },\n };\n}\n\n\n/** Resolve the effective backend: the caller's adapter, else the default localStorage one. */\nconst resolveAdapter = (\n adapter: PluridStorageAdapter | undefined,\n): PluridStorageAdapter | undefined => adapter || localStorageAdapter();\n\n\n/**\n * Build a focused, versioned snapshot of the persistable space state.\n */\nconst serialize = (\n state: PluridState,\n): string => {\n const space: Partial<PluridState['space']> = {};\n\n for (const field of PERSISTED_SPACE_FIELDS) {\n const value = (state.space as any)[field];\n if (value !== undefined) {\n (space as any)[field] = value;\n }\n }\n\n const snapshot: PersistedSnapshot = {\n version: PERSISTED_STATE_VERSION,\n space,\n };\n\n return JSON.stringify(snapshot);\n}\n\n\n/**\n * Persist the focused space snapshot via the storage adapter (default `localStorage`). No-op when\n * there is no state or no available backend.\n */\nconst save = (\n id: string | undefined,\n state: PluridState | undefined,\n adapter?: PluridStorageAdapter,\n) => {\n const store = resolveAdapter(adapter);\n if (!state || !store) {\n return;\n }\n\n let serialized: string;\n try {\n serialized = serialize(state);\n } catch (error) {\n // A serialization failure is a CODE bug (the persisted snapshot should be plain data),\n // not the best-effort environmental miss the setItem catch below handles — so it must not\n // be swallowed silently. Warn once and bail (the previous snapshot stays). This is the\n // failure mode that silently drops every save after the offending value enters the tree.\n if (!serializeFailureWarned && typeof console !== 'undefined') {\n serializeFailureWarned = true;\n console.warn(\n '[plurid] state persistence skipped — could not serialize the space snapshot. '\n + 'A non-serializable value (cycle, DOM node, or function) is in the persisted '\n + 'fields. Persistence is disabled until it is removed.',\n error,\n );\n }\n return;\n }\n\n try {\n store.setItem(\n storageKey(id),\n serialized,\n );\n } catch (_error) {\n // storage may be full or disabled (private mode), or a custom adapter threw — persistence\n // is best-effort.\n }\n}\n\n\n/**\n * Load a previously persisted snapshot. Returns a partial `PluridState` (just `{ space }`)\n * that `compute`/`resolveSpace` merge over a freshly-computed space. Version mismatch,\n * missing data, or parse errors all fall back to a fresh space (return `undefined`).\n */\nconst load = (\n id: string | undefined,\n useLocalStorage: boolean | undefined,\n adapter?: PluridStorageAdapter,\n): PluridState | undefined => {\n if (!useLocalStorage) {\n return;\n }\n\n const store = resolveAdapter(adapter);\n if (!store) {\n return;\n }\n\n try {\n const stateData = store.getItem(storageKey(id));\n if (!stateData) {\n return;\n }\n\n const snapshot: PersistedSnapshot = JSON.parse(stateData);\n\n if (!snapshot || snapshot.version !== PERSISTED_STATE_VERSION) {\n return;\n }\n\n if (!snapshot.space) {\n return;\n }\n\n // Partial state: only `space` is restored; the rest comes from props/defaults.\n return { space: snapshot.space } as PluridState;\n } catch (_error) {\n return;\n }\n}\n\n\nconst CONTENT_PREFIX = 'pluridContent-';\n\nconst contentKey = (\n id: string | undefined,\n) => CONTENT_PREFIX + (id || 'default');\n\n\n/**\n * Persist an OPAQUE product content blob (the `onPersistContent` seam). Stored under a sibling key\n * to the space snapshot, with NO engine version stamp — the content shape (and any migration) is\n * the product's concern; the engine never inspects it. No-op outside the browser / for `undefined`.\n */\nconst saveContent = (\n id: string | undefined,\n content: unknown,\n adapter?: PluridStorageAdapter,\n) => {\n const store = resolveAdapter(adapter);\n if (content === undefined || !store) {\n return;\n }\n\n try {\n store.setItem(\n contentKey(id),\n JSON.stringify(content),\n );\n } catch (_error) {\n // best-effort (storage full / disabled / custom adapter threw)\n }\n}\n\n\n/**\n * Load the opaque product content blob, or `undefined` if absent / unparseable.\n */\nconst loadContent = (\n id: string | undefined,\n adapter?: PluridStorageAdapter,\n): unknown => {\n const store = resolveAdapter(adapter);\n if (!store) {\n return undefined;\n }\n\n try {\n const raw = store.getItem(contentKey(id));\n if (!raw) {\n return undefined;\n }\n\n return JSON.parse(raw);\n } catch (_error) {\n return undefined;\n }\n}\n// #endregion module\n\n\n\n// #region exports\nexport {\n serialize,\n save,\n load,\n saveContent,\n loadContent,\n};\n// #endregion exports\n","// #region module\nexport const cleanTemplate = (\n template: string,\n) => {\n return template\n .replace(/(?:\\r\\n|\\r|\\n)/g, ' ')\n .replace(/ +/g, ' ')\n .trim();\n}\n// #endregion module\n","// #region imports\n // #region libraries\n import {\n PLURID_ROUTER_LOCATION_CHANGED,\n } from '@plurid/plurid-data';\n // #endregion libraries\n// #endregion imports\n\n\n\n// #region module\nexport const pluridRouterNavigate = (\n path: string,\n) => {\n if (typeof CustomEvent === 'undefined' || typeof window === 'undefined') {\n return;\n }\n\n const event = new CustomEvent(\n PLURID_ROUTER_LOCATION_CHANGED,\n {\n detail: {\n path,\n },\n },\n );\n\n window.dispatchEvent(event);\n}\n// #endregion module\n"]}