@wildo-ai/presets-components-3d 1.1.6 → 1.1.7

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 (91) hide show
  1. package/dist/esm/focal-plane/focal-plane-settings.d.ts +35 -0
  2. package/dist/esm/focal-plane/focal-plane-settings.d.ts.map +1 -0
  3. package/dist/esm/focal-plane/focal-plane-settings.js +68 -0
  4. package/dist/esm/focal-plane/focal-plane-settings.js.map +1 -0
  5. package/dist/esm/focal-plane/focal-plane-shell-container.d.ts +13 -0
  6. package/dist/esm/focal-plane/focal-plane-shell-container.d.ts.map +1 -0
  7. package/dist/esm/focal-plane/focal-plane-shell-container.js +147 -0
  8. package/dist/esm/focal-plane/focal-plane-shell-container.js.map +1 -0
  9. package/dist/esm/focal-plane/focal-plane-stylesheet.d.ts +14 -0
  10. package/dist/esm/focal-plane/focal-plane-stylesheet.d.ts.map +1 -0
  11. package/dist/esm/focal-plane/focal-plane-stylesheet.js +236 -0
  12. package/dist/esm/focal-plane/focal-plane-stylesheet.js.map +1 -0
  13. package/dist/esm/focal-plane/use-pane-depth.d.ts +20 -0
  14. package/dist/esm/focal-plane/use-pane-depth.d.ts.map +1 -0
  15. package/dist/esm/focal-plane/use-pane-depth.js +162 -0
  16. package/dist/esm/focal-plane/use-pane-depth.js.map +1 -0
  17. package/dist/esm/focal-plane/use-shared-vanishing-point.d.ts +35 -0
  18. package/dist/esm/focal-plane/use-shared-vanishing-point.d.ts.map +1 -0
  19. package/dist/esm/focal-plane/use-shared-vanishing-point.js +86 -0
  20. package/dist/esm/focal-plane/use-shared-vanishing-point.js.map +1 -0
  21. package/dist/esm/frame/frame-3d-style.d.ts.map +1 -1
  22. package/dist/esm/frame/frame-3d-style.js.map +1 -1
  23. package/dist/esm/frame/frame-appearance.d.ts.map +1 -1
  24. package/dist/esm/frame/frame-appearance.js.map +1 -1
  25. package/dist/esm/frame/frame-canvas.d.ts.map +1 -1
  26. package/dist/esm/frame/frame-canvas.js +3 -3
  27. package/dist/esm/frame/frame-canvas.js.map +1 -1
  28. package/dist/esm/frame/frame-canvas.lazy.d.ts.map +1 -1
  29. package/dist/esm/frame/frame-canvas.lazy.js.map +1 -1
  30. package/dist/esm/frame/frame-color.d.ts.map +1 -1
  31. package/dist/esm/frame/frame-color.js.map +1 -1
  32. package/dist/esm/frame/frame-driver.d.ts.map +1 -1
  33. package/dist/esm/frame/frame-driver.js.map +1 -1
  34. package/dist/esm/frame/frame-renderer.d.ts.map +1 -1
  35. package/dist/esm/frame/frame-renderer.js.map +1 -1
  36. package/dist/esm/frame/frame-shaders.d.ts.map +1 -1
  37. package/dist/esm/frame/frame-shaders.js.map +1 -1
  38. package/dist/esm/frame/use-frame-appearance.d.ts.map +1 -1
  39. package/dist/esm/frame/use-frame-appearance.js.map +1 -1
  40. package/dist/esm/index.d.ts +1 -0
  41. package/dist/esm/index.d.ts.map +1 -1
  42. package/dist/esm/index.js +1 -0
  43. package/dist/esm/index.js.map +1 -1
  44. package/dist/esm/layout/header-first-shell-container.d.ts.map +1 -1
  45. package/dist/esm/layout/header-first-shell-container.js.map +1 -1
  46. package/dist/esm/layout/layout-3d-definition.d.ts +5 -6
  47. package/dist/esm/layout/layout-3d-definition.d.ts.map +1 -1
  48. package/dist/esm/layout/layout-3d-definition.js +13 -14
  49. package/dist/esm/layout/layout-3d-definition.js.map +1 -1
  50. package/dist/esm/layout/layout-3d-transition-choreography.d.ts.map +1 -1
  51. package/dist/esm/layout/layout-3d-transition-choreography.js.map +1 -1
  52. package/dist/esm/layout/layout-3d-vocabulary.d.ts +13 -8
  53. package/dist/esm/layout/layout-3d-vocabulary.d.ts.map +1 -1
  54. package/dist/esm/layout/layout-3d-vocabulary.js +12 -7
  55. package/dist/esm/layout/layout-3d-vocabulary.js.map +1 -1
  56. package/dist/esm/layout/shell-layout-placement.d.ts.map +1 -1
  57. package/dist/esm/layout/shell-layout-placement.js.map +1 -1
  58. package/dist/esm/layout-3d-main-container.d.ts +6 -0
  59. package/dist/esm/layout-3d-main-container.d.ts.map +1 -1
  60. package/dist/esm/layout-3d-main-container.js +8 -1
  61. package/dist/esm/layout-3d-main-container.js.map +1 -1
  62. package/dist/esm/register-3d-layout.d.ts.map +1 -1
  63. package/dist/esm/register-3d-layout.js.map +1 -1
  64. package/dist/esm/shell-region-measurement.d.ts.map +1 -1
  65. package/dist/esm/shell-region-measurement.js.map +1 -1
  66. package/dist/esm/tokens/design-token-resolution.d.ts.map +1 -1
  67. package/dist/esm/tokens/design-token-resolution.js.map +1 -1
  68. package/dist/esm/tokens/use-design-token-resolution.d.ts.map +1 -1
  69. package/dist/esm/tokens/use-design-token-resolution.js.map +1 -1
  70. package/dist/tsconfig.build.tsbuildinfo +1 -0
  71. package/package.json +3 -3
  72. package/dist/esm/spatial/spatial-camera.d.ts +0 -106
  73. package/dist/esm/spatial/spatial-camera.d.ts.map +0 -1
  74. package/dist/esm/spatial/spatial-camera.js +0 -151
  75. package/dist/esm/spatial/spatial-camera.js.map +0 -1
  76. package/dist/esm/spatial/spatial-environment.d.ts +0 -6
  77. package/dist/esm/spatial/spatial-environment.d.ts.map +0 -1
  78. package/dist/esm/spatial/spatial-environment.js +0 -166
  79. package/dist/esm/spatial/spatial-environment.js.map +0 -1
  80. package/dist/esm/spatial/spatial-environment.lazy.d.ts +0 -10
  81. package/dist/esm/spatial/spatial-environment.lazy.d.ts.map +0 -1
  82. package/dist/esm/spatial/spatial-environment.lazy.js +0 -13
  83. package/dist/esm/spatial/spatial-environment.lazy.js.map +0 -1
  84. package/dist/esm/spatial/spatial-shell-container.d.ts +0 -21
  85. package/dist/esm/spatial/spatial-shell-container.d.ts.map +0 -1
  86. package/dist/esm/spatial/spatial-shell-container.js +0 -231
  87. package/dist/esm/spatial/spatial-shell-container.js.map +0 -1
  88. package/dist/esm/spatial/spatial-stage-store.d.ts +0 -27
  89. package/dist/esm/spatial/spatial-stage-store.d.ts.map +0 -1
  90. package/dist/esm/spatial/spatial-stage-store.js +0 -33
  91. package/dist/esm/spatial/spatial-stage-store.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"layout-3d-transition-choreography.js","sourceRoot":"","sources":["../../../../src/layout/layout-3d-transition-choreography.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AA0B9H,MAAM,KAAK,GAAsB,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;AAEpH,8FAA8F;AAC9F,MAAM,UAAU,iBAAiB,CAAC,IAA+B;IAC/D,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,yBAAyB,CAAC,IAAI;YACjC,OAAO,KAAK,CAAC;QACf,KAAK,yBAAyB,CAAC,gBAAgB;YAC7C,yGAAyG;YACzG,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;QAC7F,KAAK,yBAAyB,CAAC,WAAW;YACxC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,aAAa,EAAE,EAAE,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;QAC5F,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,WAAW,GAAU,IAAI,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,6CAA6C,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACxF,CAAC;IACH,CAAC;AACH,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,eAAe,CAAC,IAAiC;IAC/D,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,2BAA2B,CAAC,IAAI;YACnC,OAAO,KAAK,CAAC;QACf,KAAK,2BAA2B,CAAC,GAAG;YAClC,OAAO,IAAI,CAAC;QACd,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,WAAW,GAAU,IAAI,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,gDAAgD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC;AACH,CAAC;AAED,gHAAgH;AAChH,MAAM,UAAU,oBAAoB,CAAC,IAAkC;IACrE,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,4BAA4B,CAAC,UAAU;YAC1C,OAAO,IAAI,CAAC;QACd,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,WAAW,GAAU,IAAI,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,gDAAgD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC;AACH,CAAC","sourcesContent":["import { Layout3DAppearanceTransition, Layout3DFrameChoreography, Layout3DZoneFocusTransition } from './layout-3d-vocabulary';\n\n/**\n * The numbers each transition member plays (#1826), in one module both the registration check and the lazily loaded\n * renderer read — so the members are interpreted in one place, and a member added to a vocabulary fails to compile\n * HERE until it has numbers. Imports only the vocabulary, so the frame's chunk pulls in nothing else through it.\n */\n\n/**\n * A frame choreography's numbers. A pulse RISES to full strength over the first half of its duration and\n * SETTLES back over the second, each half eased by the theme's default easing; the strength shown is `sin(π/2 · v)`\n * of that eased value, so it swells in and out without a corner at the peak.\n */\nexport interface FrameChoreography {\n /** Whether the trigger plays anything. */\n plays: boolean;\n /** How far the content slab's shadow blur and offset grow at the pulse's peak: 0.8 is 80% further. */\n shadowSpread: number;\n /** How far the content slab's rim moves from its rest opacity toward its hover opacity at the peak: 0 to 1. */\n rimLift: number;\n /** How far the light swings at the peak, in degrees. */\n lightSweepDeg: number;\n /** The pulse lasts this many times the theme's normal motion duration: one half to rise, one to settle. */\n durationFactor: number;\n}\n\nconst STILL: FrameChoreography = { plays: false, shadowSpread: 0, rimLift: 0, lightSweepDeg: 0, durationFactor: 0 };\n\n/** The numbers of a frame choreography. Exhaustive over {@link Layout3DFrameChoreography}. */\nexport function frameChoreography(kind: Layout3DFrameChoreography): FrameChoreography {\n switch (kind) {\n case Layout3DFrameChoreography.NONE:\n return STILL;\n case Layout3DFrameChoreography.ELEVATION_SETTLE:\n // Rim capped at 1 (the hover opacity): the bound was proved for the rim at hover opacity over the frost.\n return { plays: true, shadowSpread: 0.8, rimLift: 1, lightSweepDeg: 0, durationFactor: 2 };\n case Layout3DFrameChoreography.LIGHT_SWEEP:\n return { plays: true, shadowSpread: 0, rimLift: 0, lightSweepDeg: 40, durationFactor: 2 };\n default: {\n const unsupported: never = kind;\n throw new Error(`The 3D frame plays no frame choreography '${String(unsupported)}'.`);\n }\n }\n}\n\n/** Whether the focused zone gets a rim. Exhaustive over {@link Layout3DZoneFocusTransition}. */\nexport function rimsFocusedZone(kind: Layout3DZoneFocusTransition): boolean {\n switch (kind) {\n case Layout3DZoneFocusTransition.NONE:\n return false;\n case Layout3DZoneFocusTransition.RIM:\n return true;\n default: {\n const unsupported: never = kind;\n throw new Error(`The 3D frame plays no zone-focus transition '${String(unsupported)}'.`);\n }\n }\n}\n\n/** Whether the frame cross-fades an appearance change. Exhaustive over {@link Layout3DAppearanceTransition}. */\nexport function crossFadesAppearance(kind: Layout3DAppearanceTransition): boolean {\n switch (kind) {\n case Layout3DAppearanceTransition.CROSS_FADE:\n return true;\n default: {\n const unsupported: never = kind;\n throw new Error(`The 3D frame plays no appearance transition '${String(unsupported)}'.`);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"layout-3d-transition-choreography.js","sourceRoot":"","sources":["../../../src/layout/layout-3d-transition-choreography.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AA0B9H,MAAM,KAAK,GAAsB,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;AAEpH,8FAA8F;AAC9F,MAAM,UAAU,iBAAiB,CAAC,IAA+B;IAC/D,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,yBAAyB,CAAC,IAAI;YACjC,OAAO,KAAK,CAAC;QACf,KAAK,yBAAyB,CAAC,gBAAgB;YAC7C,yGAAyG;YACzG,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;QAC7F,KAAK,yBAAyB,CAAC,WAAW;YACxC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,aAAa,EAAE,EAAE,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;QAC5F,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,WAAW,GAAU,IAAI,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,6CAA6C,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACxF,CAAC;IACH,CAAC;AACH,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,eAAe,CAAC,IAAiC;IAC/D,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,2BAA2B,CAAC,IAAI;YACnC,OAAO,KAAK,CAAC;QACf,KAAK,2BAA2B,CAAC,GAAG;YAClC,OAAO,IAAI,CAAC;QACd,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,WAAW,GAAU,IAAI,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,gDAAgD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC;AACH,CAAC;AAED,gHAAgH;AAChH,MAAM,UAAU,oBAAoB,CAAC,IAAkC;IACrE,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,4BAA4B,CAAC,UAAU;YAC1C,OAAO,IAAI,CAAC;QACd,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,WAAW,GAAU,IAAI,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,gDAAgD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC;AACH,CAAC","sourcesContent":["import { Layout3DAppearanceTransition, Layout3DFrameChoreography, Layout3DZoneFocusTransition } from './layout-3d-vocabulary';\n\n/**\n * The numbers each transition member plays (#1826), in one module both the registration check and the lazily loaded\n * renderer read — so the members are interpreted in one place, and a member added to a vocabulary fails to compile\n * HERE until it has numbers. Imports only the vocabulary, so the frame's chunk pulls in nothing else through it.\n */\n\n/**\n * A frame choreography's numbers. A pulse RISES to full strength over the first half of its duration and\n * SETTLES back over the second, each half eased by the theme's default easing; the strength shown is `sin(π/2 · v)`\n * of that eased value, so it swells in and out without a corner at the peak.\n */\nexport interface FrameChoreography {\n /** Whether the trigger plays anything. */\n plays: boolean;\n /** How far the content slab's shadow blur and offset grow at the pulse's peak: 0.8 is 80% further. */\n shadowSpread: number;\n /** How far the content slab's rim moves from its rest opacity toward its hover opacity at the peak: 0 to 1. */\n rimLift: number;\n /** How far the light swings at the peak, in degrees. */\n lightSweepDeg: number;\n /** The pulse lasts this many times the theme's normal motion duration: one half to rise, one to settle. */\n durationFactor: number;\n}\n\nconst STILL: FrameChoreography = { plays: false, shadowSpread: 0, rimLift: 0, lightSweepDeg: 0, durationFactor: 0 };\n\n/** The numbers of a frame choreography. Exhaustive over {@link Layout3DFrameChoreography}. */\nexport function frameChoreography(kind: Layout3DFrameChoreography): FrameChoreography {\n switch (kind) {\n case Layout3DFrameChoreography.NONE:\n return STILL;\n case Layout3DFrameChoreography.ELEVATION_SETTLE:\n // Rim capped at 1 (the hover opacity): the bound was proved for the rim at hover opacity over the frost.\n return { plays: true, shadowSpread: 0.8, rimLift: 1, lightSweepDeg: 0, durationFactor: 2 };\n case Layout3DFrameChoreography.LIGHT_SWEEP:\n return { plays: true, shadowSpread: 0, rimLift: 0, lightSweepDeg: 40, durationFactor: 2 };\n default: {\n const unsupported: never = kind;\n throw new Error(`The 3D frame plays no frame choreography '${String(unsupported)}'.`);\n }\n }\n}\n\n/** Whether the focused zone gets a rim. Exhaustive over {@link Layout3DZoneFocusTransition}. */\nexport function rimsFocusedZone(kind: Layout3DZoneFocusTransition): boolean {\n switch (kind) {\n case Layout3DZoneFocusTransition.NONE:\n return false;\n case Layout3DZoneFocusTransition.RIM:\n return true;\n default: {\n const unsupported: never = kind;\n throw new Error(`The 3D frame plays no zone-focus transition '${String(unsupported)}'.`);\n }\n }\n}\n\n/** Whether the frame cross-fades an appearance change. Exhaustive over {@link Layout3DAppearanceTransition}. */\nexport function crossFadesAppearance(kind: Layout3DAppearanceTransition): boolean {\n switch (kind) {\n case Layout3DAppearanceTransition.CROSS_FADE:\n return true;\n default: {\n const unsupported: never = kind;\n throw new Error(`The 3D frame plays no appearance transition '${String(unsupported)}'.`);\n }\n }\n}\n"]}
@@ -14,22 +14,27 @@ export declare enum Layout3DId {
14
14
  * The menubar and the status bars span the whole width; the navigation rails (activity bar, sidebar, utility
15
15
  * panel) sit between them, beside the content. The default disposal is sidebar-first; this one is header-first.
16
16
  */
17
- HEADER_FIRST = "header-first"
17
+ HEADER_FIRST = "header-first",
18
+ /**
19
+ * The focal plane (#2049): one still perspective camera; the shell regions, each navigation pane and each popup are
20
+ * separate glass objects that travel in depth. Whatever you work with rests on the focal plane at its true size;
21
+ * everything else steps back. Nothing is angled and the camera never moves (Paul, 2026-09-30).
22
+ */
23
+ FOCAL_PLANE = "focal-plane"
18
24
  }
19
25
  /**
20
- * The cameras the frame renderer supports. The transitions need none beyond this one: every choreography is
21
- * drawn IN the flat frame (elevation, light, rims), so a slab never leaves its region's box.
26
+ * The cameras a 3D layout is seen through. The flat camera's transitions are all drawn IN the flat frame (elevation,
27
+ * light, rims), so a slab never leaves its region's box; the still-perspective camera moves the HTML objects instead.
22
28
  */
23
29
  export declare enum Layout3DCamera {
24
30
  /** Orthographic, matched 1:1 to CSS pixels: the frame lies flat under the regions, exactly on their boxes. */
25
31
  FLAT_ORTHOGRAPHIC = "flat-orthographic",
26
32
  /**
27
- * PROTOTYPE (Paul, 2026-09-30: "a real camera aspect", clean spatial). A perspective camera looks at the shell's
28
- * panels placed in space: the content faces it (crisp at rest), side columns stand angled, and the camera MOVES on
29
- * transitions. The panels are the live HTML, in a CSS 3D stage driven by the same camera as the WebGL environment
30
- * around them. Only a placement that builds that stage can use it (`SPATIAL_PROTOTYPE_LAYOUT_3D`).
33
+ * A still perspective camera, in CSS: the HTML objects themselves carry depth, around one shared vanishing point, and
34
+ * no WebGL frame is drawn. The camera never moves; objects do (#2049). Only a placement that stages the objects can
35
+ * be seen through it.
31
36
  */
32
- SPATIAL_PERSPECTIVE = "spatial-perspective"
37
+ STILL_PERSPECTIVE = "still-perspective"
33
38
  }
34
39
  /**
35
40
  * How the frame answers an APPEARANCE change: a theme, a density, a reduced-motion switch.
@@ -1 +1 @@
1
- {"version":3,"file":"layout-3d-vocabulary.d.ts","sourceRoot":"","sources":["../../../../src/layout/layout-3d-vocabulary.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,mIAAmI;AACnI;;;GAGG;AACH,oBAAY,UAAU;IACpB,yFAAyF;IACzF,OAAO,YAAY;IACnB;;;OAGG;IACH,YAAY,iBAAiB;CAC9B;AAED;;;GAGG;AACH,oBAAY,cAAc;IACxB,8GAA8G;IAC9G,iBAAiB,sBAAsB;IACvC;;;;;OAKG;IACH,mBAAmB,wBAAwB;CAC5C;AAED;;;;;GAKG;AACH,oBAAY,4BAA4B;IACtC,2FAA2F;IAC3F,UAAU,eAAe;CAC1B;AAED;;;;;;;;;;;;GAYG;AACH,oBAAY,yBAAyB;IACnC,+FAA+F;IAC/F,IAAI,SAAS;IACb;;;;OAIG;IACH,gBAAgB,qBAAqB;IACrC;;;OAGG;IACH,WAAW,gBAAgB;CAC5B;AAED;;;GAGG;AACH,oBAAY,2BAA2B;IACrC,mDAAmD;IACnD,IAAI,SAAS;IACb;;;;;;OAMG;IACH,GAAG,QAAQ;CACZ;AAED;;;;GAIG;AACH,oBAAY,gBAAgB;IAC1B,iDAAiD;IACjD,IAAI,SAAS;CACd;AAED;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,iDAAiD;IACjD,UAAU,EAAE,4BAA4B,CAAC;IACzC;;;;OAIG;IACH,UAAU,EAAE,yBAAyB,CAAC;IACtC,4GAA4G;IAC5G,aAAa,EAAE,yBAAyB,CAAC;IACzC,4FAA4F;IAC5F,SAAS,EAAE,2BAA2B,CAAC;CACxC;AACD,wDAAwD"}
1
+ {"version":3,"file":"layout-3d-vocabulary.d.ts","sourceRoot":"","sources":["../../../src/layout/layout-3d-vocabulary.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,mIAAmI;AACnI;;;GAGG;AACH,oBAAY,UAAU;IACpB,yFAAyF;IACzF,OAAO,YAAY;IACnB;;;OAGG;IACH,YAAY,iBAAiB;IAC7B;;;;OAIG;IACH,WAAW,gBAAgB;CAC5B;AAED;;;GAGG;AACH,oBAAY,cAAc;IACxB,8GAA8G;IAC9G,iBAAiB,sBAAsB;IACvC;;;;OAIG;IACH,iBAAiB,sBAAsB;CACxC;AAED;;;;;GAKG;AACH,oBAAY,4BAA4B;IACtC,2FAA2F;IAC3F,UAAU,eAAe;CAC1B;AAED;;;;;;;;;;;;GAYG;AACH,oBAAY,yBAAyB;IACnC,+FAA+F;IAC/F,IAAI,SAAS;IACb;;;;OAIG;IACH,gBAAgB,qBAAqB;IACrC;;;OAGG;IACH,WAAW,gBAAgB;CAC5B;AAED;;;GAGG;AACH,oBAAY,2BAA2B;IACrC,mDAAmD;IACnD,IAAI,SAAS;IACb;;;;;;OAMG;IACH,GAAG,QAAQ;CACZ;AAED;;;;GAIG;AACH,oBAAY,gBAAgB;IAC1B,iDAAiD;IACjD,IAAI,SAAS;CACd;AAED;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,iDAAiD;IACjD,UAAU,EAAE,4BAA4B,CAAC;IACzC;;;;OAIG;IACH,UAAU,EAAE,yBAAyB,CAAC;IACtC,4GAA4G;IAC5G,aAAa,EAAE,yBAAyB,CAAC;IACzC,4FAA4F;IAC5F,SAAS,EAAE,2BAA2B,CAAC;CACxC;AACD,wDAAwD"}
@@ -16,22 +16,27 @@ export var Layout3DId;
16
16
  * panel) sit between them, beside the content. The default disposal is sidebar-first; this one is header-first.
17
17
  */
18
18
  Layout3DId["HEADER_FIRST"] = "header-first";
19
+ /**
20
+ * The focal plane (#2049): one still perspective camera; the shell regions, each navigation pane and each popup are
21
+ * separate glass objects that travel in depth. Whatever you work with rests on the focal plane at its true size;
22
+ * everything else steps back. Nothing is angled and the camera never moves (Paul, 2026-09-30).
23
+ */
24
+ Layout3DId["FOCAL_PLANE"] = "focal-plane";
19
25
  })(Layout3DId || (Layout3DId = {}));
20
26
  /**
21
- * The cameras the frame renderer supports. The transitions need none beyond this one: every choreography is
22
- * drawn IN the flat frame (elevation, light, rims), so a slab never leaves its region's box.
27
+ * The cameras a 3D layout is seen through. The flat camera's transitions are all drawn IN the flat frame (elevation,
28
+ * light, rims), so a slab never leaves its region's box; the still-perspective camera moves the HTML objects instead.
23
29
  */
24
30
  export var Layout3DCamera;
25
31
  (function (Layout3DCamera) {
26
32
  /** Orthographic, matched 1:1 to CSS pixels: the frame lies flat under the regions, exactly on their boxes. */
27
33
  Layout3DCamera["FLAT_ORTHOGRAPHIC"] = "flat-orthographic";
28
34
  /**
29
- * PROTOTYPE (Paul, 2026-09-30: "a real camera aspect", clean spatial). A perspective camera looks at the shell's
30
- * panels placed in space: the content faces it (crisp at rest), side columns stand angled, and the camera MOVES on
31
- * transitions. The panels are the live HTML, in a CSS 3D stage driven by the same camera as the WebGL environment
32
- * around them. Only a placement that builds that stage can use it (`SPATIAL_PROTOTYPE_LAYOUT_3D`).
35
+ * A still perspective camera, in CSS: the HTML objects themselves carry depth, around one shared vanishing point, and
36
+ * no WebGL frame is drawn. The camera never moves; objects do (#2049). Only a placement that stages the objects can
37
+ * be seen through it.
33
38
  */
34
- Layout3DCamera["SPATIAL_PERSPECTIVE"] = "spatial-perspective";
39
+ Layout3DCamera["STILL_PERSPECTIVE"] = "still-perspective";
35
40
  })(Layout3DCamera || (Layout3DCamera = {}));
36
41
  /**
37
42
  * How the frame answers an APPEARANCE change: a theme, a density, a reduced-motion switch.
@@ -1 +1 @@
1
- {"version":3,"file":"layout-3d-vocabulary.js","sourceRoot":"","sources":["../../../../src/layout/layout-3d-vocabulary.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,mIAAmI;AACnI;;;GAGG;AACH,MAAM,CAAN,IAAY,UAQX;AARD,WAAY,UAAU;IACpB,yFAAyF;IACzF,iCAAmB,CAAA;IACnB;;;OAGG;IACH,2CAA6B,CAAA;AAC/B,CAAC,EARW,UAAU,KAAV,UAAU,QAQrB;AAED;;;GAGG;AACH,MAAM,CAAN,IAAY,cAUX;AAVD,WAAY,cAAc;IACxB,8GAA8G;IAC9G,yDAAuC,CAAA;IACvC;;;;;OAKG;IACH,6DAA2C,CAAA;AAC7C,CAAC,EAVW,cAAc,KAAd,cAAc,QAUzB;AAED;;;;;GAKG;AACH,MAAM,CAAN,IAAY,4BAGX;AAHD,WAAY,4BAA4B;IACtC,2FAA2F;IAC3F,yDAAyB,CAAA;AAC3B,CAAC,EAHW,4BAA4B,KAA5B,4BAA4B,QAGvC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAN,IAAY,yBAcX;AAdD,WAAY,yBAAyB;IACnC,+FAA+F;IAC/F,0CAAa,CAAA;IACb;;;;OAIG;IACH,kEAAqC,CAAA;IACrC;;;OAGG;IACH,wDAA2B,CAAA;AAC7B,CAAC,EAdW,yBAAyB,KAAzB,yBAAyB,QAcpC;AAED;;;GAGG;AACH,MAAM,CAAN,IAAY,2BAWX;AAXD,WAAY,2BAA2B;IACrC,mDAAmD;IACnD,4CAAa,CAAA;IACb;;;;;;OAMG;IACH,0CAAW,CAAA;AACb,CAAC,EAXW,2BAA2B,KAA3B,2BAA2B,QAWtC;AAED;;;;GAIG;AACH,MAAM,CAAN,IAAY,gBAGX;AAHD,WAAY,gBAAgB;IAC1B,iDAAiD;IACjD,iCAAa,CAAA;AACf,CAAC,EAHW,gBAAgB,KAAhB,gBAAgB,QAG3B;AAsBD,wDAAwD","sourcesContent":["/**\n * The 3D layout vocabularies (#1843), in a module that imports NOTHING: the lazily loaded frame canvas reads\n * `Layout3DCamera`, and must not pull the layout definitions (and their shell containers) into its chunk to do so.\n */\n\n/** @wildo_source:part:start presets.3d.layout-contract facet:layer:frontend facet:family:layout-3d facet:audience:app-developer */\n/**\n * The built-in 3D layouts. An application uses exactly ONE, chosen when it registers the library; there\n * is no switch. An application may also define its own layout with an id of its own.\n */\nexport enum Layout3DId {\n /** The 2D shell's own disposal, unchanged, with the 3D frame drawn under its regions. */\n INHERIT = 'inherit',\n /**\n * The menubar and the status bars span the whole width; the navigation rails (activity bar, sidebar, utility\n * panel) sit between them, beside the content. The default disposal is sidebar-first; this one is header-first.\n */\n HEADER_FIRST = 'header-first',\n}\n\n/**\n * The cameras the frame renderer supports. The transitions need none beyond this one: every choreography is\n * drawn IN the flat frame (elevation, light, rims), so a slab never leaves its region's box.\n */\nexport enum Layout3DCamera {\n /** Orthographic, matched 1:1 to CSS pixels: the frame lies flat under the regions, exactly on their boxes. */\n FLAT_ORTHOGRAPHIC = 'flat-orthographic',\n /**\n * PROTOTYPE (Paul, 2026-09-30: \"a real camera aspect\", clean spatial). A perspective camera looks at the shell's\n * panels placed in space: the content faces it (crisp at rest), side columns stand angled, and the camera MOVES on\n * transitions. The panels are the live HTML, in a CSS 3D stage driven by the same camera as the WebGL environment\n * around them. Only a placement that builds that stage can use it (`SPATIAL_PROTOTYPE_LAYOUT_3D`).\n */\n SPATIAL_PERSPECTIVE = 'spatial-perspective',\n}\n\n/**\n * How the frame answers an APPEARANCE change: a theme, a density, a reduced-motion switch.\n *\n * Whatever the member, a light/dark switch SNAPS: text changes colour at once, and a backdrop halfway between two\n * modes is bounded against neither foreground.\n */\nexport enum Layout3DAppearanceTransition {\n /** The frame cross-fades to the new appearance over the theme's normal motion duration. */\n CROSS_FADE = 'cross-fade',\n}\n\n/**\n * A choreography the frame plays once, as a PULSE that rises and settles, when a shell state changes. The same\n * vocabulary serves every pulse-shaped trigger of {@link Layout3DTransitions} (a navigation, a sidebar resize), so a\n * layout picks per trigger and a new choreography is available to every trigger at once.\n *\n * Every member is drawn in the FRAME. No member transforms a region: a CSS transform blurs text while it runs and\n * makes the region the containing block of its `position: fixed` overlays. A choreography that moved regions would\n * need an untransformed portal target on the shell providers (a default-off option, not built) and its own\n * member here; none exists.\n *\n * Every member stays inside the contrast bound (see each), and plays nothing under reduced motion, where the theme's\n * motion duration is zero.\n */\nexport enum Layout3DFrameChoreography {\n /** Nothing moves. For an application's own layout that wants a still frame on this trigger. */\n NONE = 'none',\n /**\n * The content slab lifts toward the reader and settles back: its shadow spreads and drops further, and its rim\n * brightens toward its hover opacity, then both return. Only blur, offset and rim move — never the shadow's\n * opacity, and never the rim past the hover opacity the bound was proved for.\n */\n ELEVATION_SETTLE = 'elevation-settle',\n /**\n * The light swings across the frame and back: every gradient re-orients along the moving light. Every colour it\n * shows is a point of a gradient the bound already covers; only its direction changes.\n */\n LIGHT_SWEEP = 'light-sweep',\n}\n\n/**\n * What the frame shows for the FOCUSED navigation zone (`useNavigationState().focusedZone`), when two or more zones\n * are side by side.\n */\nexport enum Layout3DZoneFocusTransition {\n /** Nothing marks the focused zone in the frame. */\n NONE = 'none',\n /**\n * A rim in the content slab's rim colour, at most its hover opacity, around the focused zone; it moves to another\n * zone with the theme's gesture spring. Inset clear of the content slab's own rim band, so where it is drawn it is\n * the case the bound was proved for — a rim at hover opacity over the frost — except that it is written as a second\n * framebuffer layer, rounded to 8 bits twice rather than once (at most 1/255 apart), and that the emphasis values\n * between rest and hover are not checked one by one: both limits are shared with the slab rim's own hover emphasis.\n */\n RIM = 'rim',\n}\n\n/**\n * What a layout does to the regions at rest. Only FLAT exists: a CSS 3D transform blurs text, and any transform\n * makes a region the containing block of its `position: fixed` descendants. A layout that wants a persistent tilt\n * needs an untransformed portal target on the shell providers (not built: no choreography moves a region) and a new member here.\n */\nexport enum Layout3DRestPose {\n /** The regions are never transformed at rest. */\n FLAT = 'flat',\n}\n\n/**\n * What a layout plays, per trigger. The triggers are read from existing state only: the navigation state\n * (`useNavigationState`) and the shell's own region measurement. Whatever a layout picks, the frame FOLLOWS every\n * region's box frame by frame while the shell animates (the alignment invariant); these are what it plays\n * ON TOP of following.\n */\nexport interface Layout3DTransitions {\n /** A theme, density or reduced-motion change. */\n appearance: Layout3DAppearanceTransition;\n /**\n * The content changed: any structural zone's top entry is a different place (its URL). The route sync hooks mirror\n * router navigations into those stacks, so a sidebar link and a record opened beside a list both count; the\n * overlay zone does not (a dialog is not a place).\n */\n navigation: Layout3DFrameChoreography;\n /** The sidebar collapsed, expanded or was resized: its measured width changed while it stayed on screen. */\n sidebarResize: Layout3DFrameChoreography;\n /** The navigation state's focused zone changed while two or more zones are side by side. */\n zoneFocus: Layout3DZoneFocusTransition;\n}\n/** @wildo_source:part:end presets.3d.layout-contract */\n"]}
1
+ {"version":3,"file":"layout-3d-vocabulary.js","sourceRoot":"","sources":["../../../src/layout/layout-3d-vocabulary.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,mIAAmI;AACnI;;;GAGG;AACH,MAAM,CAAN,IAAY,UAcX;AAdD,WAAY,UAAU;IACpB,yFAAyF;IACzF,iCAAmB,CAAA;IACnB;;;OAGG;IACH,2CAA6B,CAAA;IAC7B;;;;OAIG;IACH,yCAA2B,CAAA;AAC7B,CAAC,EAdW,UAAU,KAAV,UAAU,QAcrB;AAED;;;GAGG;AACH,MAAM,CAAN,IAAY,cASX;AATD,WAAY,cAAc;IACxB,8GAA8G;IAC9G,yDAAuC,CAAA;IACvC;;;;OAIG;IACH,yDAAuC,CAAA;AACzC,CAAC,EATW,cAAc,KAAd,cAAc,QASzB;AAED;;;;;GAKG;AACH,MAAM,CAAN,IAAY,4BAGX;AAHD,WAAY,4BAA4B;IACtC,2FAA2F;IAC3F,yDAAyB,CAAA;AAC3B,CAAC,EAHW,4BAA4B,KAA5B,4BAA4B,QAGvC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAN,IAAY,yBAcX;AAdD,WAAY,yBAAyB;IACnC,+FAA+F;IAC/F,0CAAa,CAAA;IACb;;;;OAIG;IACH,kEAAqC,CAAA;IACrC;;;OAGG;IACH,wDAA2B,CAAA;AAC7B,CAAC,EAdW,yBAAyB,KAAzB,yBAAyB,QAcpC;AAED;;;GAGG;AACH,MAAM,CAAN,IAAY,2BAWX;AAXD,WAAY,2BAA2B;IACrC,mDAAmD;IACnD,4CAAa,CAAA;IACb;;;;;;OAMG;IACH,0CAAW,CAAA;AACb,CAAC,EAXW,2BAA2B,KAA3B,2BAA2B,QAWtC;AAED;;;;GAIG;AACH,MAAM,CAAN,IAAY,gBAGX;AAHD,WAAY,gBAAgB;IAC1B,iDAAiD;IACjD,iCAAa,CAAA;AACf,CAAC,EAHW,gBAAgB,KAAhB,gBAAgB,QAG3B;AAsBD,wDAAwD","sourcesContent":["/**\n * The 3D layout vocabularies (#1843), in a module that imports NOTHING: the lazily loaded frame canvas reads\n * `Layout3DCamera`, and must not pull the layout definitions (and their shell containers) into its chunk to do so.\n */\n\n/** @wildo_source:part:start presets.3d.layout-contract facet:layer:frontend facet:family:layout-3d facet:audience:app-developer */\n/**\n * The built-in 3D layouts. An application uses exactly ONE, chosen when it registers the library; there\n * is no switch. An application may also define its own layout with an id of its own.\n */\nexport enum Layout3DId {\n /** The 2D shell's own disposal, unchanged, with the 3D frame drawn under its regions. */\n INHERIT = 'inherit',\n /**\n * The menubar and the status bars span the whole width; the navigation rails (activity bar, sidebar, utility\n * panel) sit between them, beside the content. The default disposal is sidebar-first; this one is header-first.\n */\n HEADER_FIRST = 'header-first',\n /**\n * The focal plane (#2049): one still perspective camera; the shell regions, each navigation pane and each popup are\n * separate glass objects that travel in depth. Whatever you work with rests on the focal plane at its true size;\n * everything else steps back. Nothing is angled and the camera never moves (Paul, 2026-09-30).\n */\n FOCAL_PLANE = 'focal-plane',\n}\n\n/**\n * The cameras a 3D layout is seen through. The flat camera's transitions are all drawn IN the flat frame (elevation,\n * light, rims), so a slab never leaves its region's box; the still-perspective camera moves the HTML objects instead.\n */\nexport enum Layout3DCamera {\n /** Orthographic, matched 1:1 to CSS pixels: the frame lies flat under the regions, exactly on their boxes. */\n FLAT_ORTHOGRAPHIC = 'flat-orthographic',\n /**\n * A still perspective camera, in CSS: the HTML objects themselves carry depth, around one shared vanishing point, and\n * no WebGL frame is drawn. The camera never moves; objects do (#2049). Only a placement that stages the objects can\n * be seen through it.\n */\n STILL_PERSPECTIVE = 'still-perspective',\n}\n\n/**\n * How the frame answers an APPEARANCE change: a theme, a density, a reduced-motion switch.\n *\n * Whatever the member, a light/dark switch SNAPS: text changes colour at once, and a backdrop halfway between two\n * modes is bounded against neither foreground.\n */\nexport enum Layout3DAppearanceTransition {\n /** The frame cross-fades to the new appearance over the theme's normal motion duration. */\n CROSS_FADE = 'cross-fade',\n}\n\n/**\n * A choreography the frame plays once, as a PULSE that rises and settles, when a shell state changes. The same\n * vocabulary serves every pulse-shaped trigger of {@link Layout3DTransitions} (a navigation, a sidebar resize), so a\n * layout picks per trigger and a new choreography is available to every trigger at once.\n *\n * Every member is drawn in the FRAME. No member transforms a region: a CSS transform blurs text while it runs and\n * makes the region the containing block of its `position: fixed` overlays. A choreography that moved regions would\n * need an untransformed portal target on the shell providers (a default-off option, not built) and its own\n * member here; none exists.\n *\n * Every member stays inside the contrast bound (see each), and plays nothing under reduced motion, where the theme's\n * motion duration is zero.\n */\nexport enum Layout3DFrameChoreography {\n /** Nothing moves. For an application's own layout that wants a still frame on this trigger. */\n NONE = 'none',\n /**\n * The content slab lifts toward the reader and settles back: its shadow spreads and drops further, and its rim\n * brightens toward its hover opacity, then both return. Only blur, offset and rim move — never the shadow's\n * opacity, and never the rim past the hover opacity the bound was proved for.\n */\n ELEVATION_SETTLE = 'elevation-settle',\n /**\n * The light swings across the frame and back: every gradient re-orients along the moving light. Every colour it\n * shows is a point of a gradient the bound already covers; only its direction changes.\n */\n LIGHT_SWEEP = 'light-sweep',\n}\n\n/**\n * What the frame shows for the FOCUSED navigation zone (`useNavigationState().focusedZone`), when two or more zones\n * are side by side.\n */\nexport enum Layout3DZoneFocusTransition {\n /** Nothing marks the focused zone in the frame. */\n NONE = 'none',\n /**\n * A rim in the content slab's rim colour, at most its hover opacity, around the focused zone; it moves to another\n * zone with the theme's gesture spring. Inset clear of the content slab's own rim band, so where it is drawn it is\n * the case the bound was proved for — a rim at hover opacity over the frost — except that it is written as a second\n * framebuffer layer, rounded to 8 bits twice rather than once (at most 1/255 apart), and that the emphasis values\n * between rest and hover are not checked one by one: both limits are shared with the slab rim's own hover emphasis.\n */\n RIM = 'rim',\n}\n\n/**\n * What a layout does to the regions at rest. Only FLAT exists: a CSS 3D transform blurs text, and any transform\n * makes a region the containing block of its `position: fixed` descendants. A layout that wants a persistent tilt\n * needs an untransformed portal target on the shell providers (not built: no choreography moves a region) and a new member here.\n */\nexport enum Layout3DRestPose {\n /** The regions are never transformed at rest. */\n FLAT = 'flat',\n}\n\n/**\n * What a layout plays, per trigger. The triggers are read from existing state only: the navigation state\n * (`useNavigationState`) and the shell's own region measurement. Whatever a layout picks, the frame FOLLOWS every\n * region's box frame by frame while the shell animates (the alignment invariant); these are what it plays\n * ON TOP of following.\n */\nexport interface Layout3DTransitions {\n /** A theme, density or reduced-motion change. */\n appearance: Layout3DAppearanceTransition;\n /**\n * The content changed: any structural zone's top entry is a different place (its URL). The route sync hooks mirror\n * router navigations into those stacks, so a sidebar link and a record opened beside a list both count; the\n * overlay zone does not (a dialog is not a place).\n */\n navigation: Layout3DFrameChoreography;\n /** The sidebar collapsed, expanded or was resized: its measured width changed while it stayed on screen. */\n sidebarResize: Layout3DFrameChoreography;\n /** The navigation state's focused zone changed while two or more zones are side by side. */\n zoneFocus: Layout3DZoneFocusTransition;\n}\n/** @wildo_source:part:end presets.3d.layout-contract */\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"shell-layout-placement.d.ts","sourceRoot":"","sources":["../../../../src/layout/shell-layout-placement.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,0CAA0C,EAAE,MAAM,6BAA6B,CAAC;AAE9F,mIAAmI;AACnI;;;;;;;GAOG;AACH,oBAAY,wBAAwB;IAClC,kHAAkH;IAClH,OAAO,YAAY;IACnB,gFAAgF;IAChF,QAAQ,aAAa;CACtB;AAED,iCAAiC;AACjC,MAAM,MAAM,oBAAoB,GAC5B;IAAE,IAAI,EAAE,wBAAwB,CAAC,OAAO,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,wBAAwB,CAAC,QAAQ,CAAC;IAAC,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,0CAA0C,CAAC,CAAA;CAAE,CAAC;AAC5H,wDAAwD"}
1
+ {"version":3,"file":"shell-layout-placement.d.ts","sourceRoot":"","sources":["../../../src/layout/shell-layout-placement.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,0CAA0C,EAAE,MAAM,6BAA6B,CAAC;AAE9F,mIAAmI;AACnI;;;;;;;GAOG;AACH,oBAAY,wBAAwB;IAClC,kHAAkH;IAClH,OAAO,YAAY;IACnB,gFAAgF;IAChF,QAAQ,aAAa;CACtB;AAED,iCAAiC;AACjC,MAAM,MAAM,oBAAoB,GAC5B;IAAE,IAAI,EAAE,wBAAwB,CAAC,OAAO,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,wBAAwB,CAAC,QAAQ,CAAC;IAAC,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,0CAA0C,CAAC,CAAA;CAAE,CAAC;AAC5H,wDAAwD"}
@@ -1 +1 @@
1
- {"version":3,"file":"shell-layout-placement.js","sourceRoot":"","sources":["../../../../src/layout/shell-layout-placement.ts"],"names":[],"mappings":"AAIA,mIAAmI;AACnI;;;;;;;GAOG;AACH,MAAM,CAAN,IAAY,wBAKX;AALD,WAAY,wBAAwB;IAClC,kHAAkH;IAClH,+CAAmB,CAAA;IACnB,gFAAgF;IAChF,iDAAqB,CAAA;AACvB,CAAC,EALW,wBAAwB,KAAxB,wBAAwB,QAKnC;AAMD,wDAAwD","sourcesContent":["import type React from 'react';\n\nimport type { AppLayoutPreset_MainContainer_DefaultProps } from '@wildo-ai/saas-frontend-lib';\n\n/** @wildo_source:part:start presets.3d.layout-contract facet:layer:frontend facet:family:layout-3d facet:audience:app-developer */\n/**\n * How a shell layout disposes the regions — the half of a layout with nothing 3D in it.\n *\n * Named for the SHELL, not for 3D, on purpose: a composed placement is an ordinary shell container built from the\n * building blocks of `@wildo-ai/saas-frontend-lib` (`AppShellProviders`, the region, content and overlays outlets,\n * `AppShellLoadingState`), so the same shape can serve a general layout system for 2D shells — planned, not built —\n * without renaming. The 3D half (scene, transitions, rest pose) lives in `Layout3DDefinition`.\n */\nexport enum ShellLayoutPlacementKind {\n /** The main container the registration captured (the 2D default, or an application's own), rendered unchanged. */\n INHERIT = 'inherit',\n /** A container of the layout's own, composed from the shell building blocks. */\n COMPOSED = 'composed',\n}\n\n/** A shell layout's disposal. */\nexport type ShellLayoutPlacement =\n | { kind: ShellLayoutPlacementKind.INHERIT }\n | { kind: ShellLayoutPlacementKind.COMPOSED; container: React.ComponentType<AppLayoutPreset_MainContainer_DefaultProps> };\n/** @wildo_source:part:end presets.3d.layout-contract */\n"]}
1
+ {"version":3,"file":"shell-layout-placement.js","sourceRoot":"","sources":["../../../src/layout/shell-layout-placement.ts"],"names":[],"mappings":"AAIA,mIAAmI;AACnI;;;;;;;GAOG;AACH,MAAM,CAAN,IAAY,wBAKX;AALD,WAAY,wBAAwB;IAClC,kHAAkH;IAClH,+CAAmB,CAAA;IACnB,gFAAgF;IAChF,iDAAqB,CAAA;AACvB,CAAC,EALW,wBAAwB,KAAxB,wBAAwB,QAKnC;AAMD,wDAAwD","sourcesContent":["import type React from 'react';\n\nimport type { AppLayoutPreset_MainContainer_DefaultProps } from '@wildo-ai/saas-frontend-lib';\n\n/** @wildo_source:part:start presets.3d.layout-contract facet:layer:frontend facet:family:layout-3d facet:audience:app-developer */\n/**\n * How a shell layout disposes the regions — the half of a layout with nothing 3D in it.\n *\n * Named for the SHELL, not for 3D, on purpose: a composed placement is an ordinary shell container built from the\n * building blocks of `@wildo-ai/saas-frontend-lib` (`AppShellProviders`, the region, content and overlays outlets,\n * `AppShellLoadingState`), so the same shape can serve a general layout system for 2D shells — planned, not built —\n * without renaming. The 3D half (scene, transitions, rest pose) lives in `Layout3DDefinition`.\n */\nexport enum ShellLayoutPlacementKind {\n /** The main container the registration captured (the 2D default, or an application's own), rendered unchanged. */\n INHERIT = 'inherit',\n /** A container of the layout's own, composed from the shell building blocks. */\n COMPOSED = 'composed',\n}\n\n/** A shell layout's disposal. */\nexport type ShellLayoutPlacement =\n | { kind: ShellLayoutPlacementKind.INHERIT }\n | { kind: ShellLayoutPlacementKind.COMPOSED; container: React.ComponentType<AppLayoutPreset_MainContainer_DefaultProps> };\n/** @wildo_source:part:end presets.3d.layout-contract */\n"]}
@@ -1,6 +1,7 @@
1
1
  import React from 'react';
2
2
  import { type AppLayoutPreset_MainContainer_DefaultProps } from '@wildo-ai/saas-frontend-lib';
3
3
  import type { Frame3DStyleOverrides } from './frame/frame-3d-style';
4
+ import { type FocalPlaneSettings } from './focal-plane/focal-plane-settings';
4
5
  import { type Layout3DDefinition } from './layout/layout-3d-definition';
5
6
  /**
6
7
  * The brand a 3D main container carries. `Symbol.for`, not `Symbol`: the component registry lives on
@@ -19,6 +20,11 @@ export interface Layout3DOptions {
19
20
  layout?: Layout3DDefinition;
20
21
  /** Frame-style overrides layered over the layout's built-in styles. */
21
22
  frameStyles?: Frame3DStyleOverrides;
23
+ /**
24
+ * Overrides of the focal plane's numbers (camera distance, layer depth, motion, dims, blurs, window opacity), for
25
+ * {@link FOCAL_PLANE_LAYOUT_3D}; each is checked at registration. Omitted, the defaults.
26
+ */
27
+ focalPlane?: Partial<FocalPlaneSettings>;
22
28
  }
23
29
  /** @wildo_source:part:end presets.3d.register-layout */
24
30
  /** A 3D main container: the component, the 2D container it captured, and the layout it draws. */
@@ -1 +1 @@
1
- {"version":3,"file":"layout-3d-main-container.d.ts","sourceRoot":"","sources":["../../../src/layout-3d-main-container.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoB,MAAM,OAAO,CAAC;AAEzC,OAAO,EAA6B,KAAK,0CAA0C,EAAE,MAAM,6BAA6B,CAAC;AAGzH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAA8C,KAAK,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAMpH;;;;GAIG;AACH,QAAA,MAAM,8BAA8B,eAA+D,CAAC;AAEpG,KAAK,sBAAsB,GAAG,KAAK,CAAC,aAAa,CAAC,0CAA0C,CAAC,CAAC;AAE9F,mIAAmI;AACnI,+FAA+F;AAC/F,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,uEAAuE;IACvE,WAAW,CAAC,EAAE,qBAAqB,CAAC;CACrC;AACD,wDAAwD;AAExD,iGAAiG;AACjG,MAAM,MAAM,qBAAqB,GAAG,sBAAsB,GAAG;IAC3D,QAAQ,CAAC,CAAC,8BAA8B,CAAC,EAAE,IAAI,CAAC;IAChD;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;IAC1C,uCAAuC;IACvC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IACpC,uEAAuE;IACvE,QAAQ,CAAC,WAAW,EAAE,qBAAqB,GAAG,SAAS,CAAC;CACzD,CAAC;AAEF,kGAAkG;AAClG,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,OAAO,GAAG,SAAS,IAAI,qBAAqB,CAE9F;AAaD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,sBAAsB,EAAE,OAAO,GAAE,eAAoB,GAAG,qBAAqB,CA4C5H"}
1
+ {"version":3,"file":"layout-3d-main-container.d.ts","sourceRoot":"","sources":["../../src/layout-3d-main-container.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoB,MAAM,OAAO,CAAC;AAEzC,OAAO,EAA6B,KAAK,0CAA0C,EAAE,MAAM,6BAA6B,CAAC;AAGzH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAwD,KAAK,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACnI,OAAO,EAA8C,KAAK,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAMpH;;;;GAIG;AACH,QAAA,MAAM,8BAA8B,eAA+D,CAAC;AAEpG,KAAK,sBAAsB,GAAG,KAAK,CAAC,aAAa,CAAC,0CAA0C,CAAC,CAAC;AAE9F,mIAAmI;AACnI,+FAA+F;AAC/F,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,uEAAuE;IACvE,WAAW,CAAC,EAAE,qBAAqB,CAAC;IACpC;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;CAC1C;AACD,wDAAwD;AAExD,iGAAiG;AACjG,MAAM,MAAM,qBAAqB,GAAG,sBAAsB,GAAG;IAC3D,QAAQ,CAAC,CAAC,8BAA8B,CAAC,EAAE,IAAI,CAAC;IAChD;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;IAC1C,uCAAuC;IACvC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IACpC,uEAAuE;IACvE,QAAQ,CAAC,WAAW,EAAE,qBAAqB,GAAG,SAAS,CAAC;CACzD,CAAC;AAEF,kGAAkG;AAClG,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,OAAO,GAAG,SAAS,IAAI,qBAAqB,CAE9F;AAaD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,sBAAsB,EAAE,OAAO,GAAE,eAAoB,GAAG,qBAAqB,CAoD5H"}
@@ -2,6 +2,7 @@ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-run
2
2
  import { useEffect } from 'react';
3
3
  import { useNavigationState, useUI } from '@wildo-ai/saas-frontend-lib';
4
4
  import { FrameCanvasDoor } from './frame/frame-canvas.lazy.js';
5
+ import { FocalPlaneSettingsContext, resolveFocalPlaneSettings } from './focal-plane/focal-plane-settings.js';
5
6
  import { assertSupportedLayout3D, INHERIT_LAYOUT_3D } from './layout/layout-3d-definition.js';
6
7
  import { crossFadesAppearance } from './layout/layout-3d-transition-choreography.js';
7
8
  import { Layout3DCamera } from './layout/layout-3d-vocabulary.js';
@@ -61,6 +62,12 @@ const APPEARANCE_MISMATCH_REPORT_DELAY_MS = 5000;
61
62
  export function create3DMainContainer(captured, options = {}) {
62
63
  const layout = options.layout ?? INHERIT_LAYOUT_3D;
63
64
  const frameStyles = options.frameStyles;
65
+ // Checked here, at registration, like the layout itself. Only the still-perspective camera reads them: settings a
66
+ // layout would silently ignore are refused instead.
67
+ if (options.focalPlane !== undefined && layout.scene.camera !== Layout3DCamera.STILL_PERSPECTIVE) {
68
+ throw new Error(`register3DLayout(): 'focalPlane' tunes the focal-plane layout, and the layout '${layout.id}' is not seen through its still camera.`);
69
+ }
70
+ const focalPlane = resolveFocalPlaneSettings(options.focalPlane);
64
71
  // A camera, transition kind or rest pose the renderer does not implement is refused here, at registration.
65
72
  assertSupportedLayout3D(layout);
66
73
  const crossFadeAppearance = crossFadesAppearance(layout.transitions.appearance);
@@ -85,7 +92,7 @@ export function create3DMainContainer(captured, options = {}) {
85
92
  }, APPEARANCE_MISMATCH_REPORT_DELAY_MS);
86
93
  return () => clearTimeout(report);
87
94
  }, [shellAppearance, required]);
88
- return (_jsxs(_Fragment, { children: [layout.scene.camera === Layout3DCamera.FLAT_ORTHOGRAPHIC && _jsx(FrameSlot, { layout: layout, frameStyles: frameStyles, crossFadeAppearance: crossFadeAppearance }), _jsx(Placement, { ...props })] }));
95
+ return (_jsxs(_Fragment, { children: [layout.scene.camera === Layout3DCamera.FLAT_ORTHOGRAPHIC && _jsx(FrameSlot, { layout: layout, frameStyles: frameStyles, crossFadeAppearance: crossFadeAppearance }), _jsx(FocalPlaneSettingsContext.Provider, { value: focalPlane, children: _jsx(Placement, { ...props }) })] }));
89
96
  }
90
97
  return Object.assign(Layout3DMainContainer, {
91
98
  [LAYOUT_3D_MAIN_CONTAINER_BRAND]: true,
@@ -1 +1 @@
1
- {"version":3,"file":"layout-3d-main-container.js","sourceRoot":"","sources":["../../../src/layout-3d-main-container.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useEffect } from 'react';\n\nimport { useNavigationState, useUI, type AppLayoutPreset_MainContainer_DefaultProps } from '@wildo-ai/saas-frontend-lib';\n\nimport { FrameCanvasDoor } from './frame/frame-canvas.lazy';\nimport type { Frame3DStyleOverrides } from './frame/frame-3d-style';\nimport { assertSupportedLayout3D, INHERIT_LAYOUT_3D, type Layout3DDefinition } from './layout/layout-3d-definition';\nimport { crossFadesAppearance } from './layout/layout-3d-transition-choreography';\nimport { Layout3DCamera } from './layout/layout-3d-vocabulary';\nimport { ShellLayoutPlacementKind } from './layout/shell-layout-placement';\nimport { useFrameAppearance } from './frame/use-frame-appearance';\n\n/**\n * The brand a 3D main container carries. `Symbol.for`, not `Symbol`: the component registry lives on\n * `globalThis` and survives a hot reload, while a reloaded module would mint a new `Symbol` and fail to\n * recognise the container it registered last time — and then capture it as \"the 2D shell\".\n */\nconst LAYOUT_3D_MAIN_CONTAINER_BRAND = Symbol.for('@wildo-ai/presets-components-3d/main-container');\n\ntype MainContainerComponent = React.ComponentType<AppLayoutPreset_MainContainer_DefaultProps>;\n\n/** @wildo_source:part:start presets.3d.register-layout facet:layer:frontend facet:family:layout-3d facet:audience:app-developer */\n/** What a 3D main container draws: the layout, and the application's frame-style overrides. */\nexport interface Layout3DOptions {\n /**\n * The layout: its disposal, its scene and its transitions. Defaults to {@link INHERIT_LAYOUT_3D}, the 2D disposal\n * with the frame under it. An application uses ONE layout for its whole life.\n */\n layout?: Layout3DDefinition;\n /** Frame-style overrides layered over the layout's built-in styles. */\n frameStyles?: Frame3DStyleOverrides;\n}\n/** @wildo_source:part:end presets.3d.register-layout */\n\n/** A 3D main container: the component, the 2D container it captured, and the layout it draws. */\nexport type Layout3DMainContainer = MainContainerComponent & {\n readonly [LAYOUT_3D_MAIN_CONTAINER_BRAND]: true;\n /**\n * The 2D main container captured at registration: rendered unchanged by an INHERIT placement, and kept by every\n * layout so a re-registration wraps IT rather than a 3D container.\n */\n readonly captured: MainContainerComponent;\n /** The layout this container draws. */\n readonly layout: Layout3DDefinition;\n /** The application's frame-style overrides, when it registered any. */\n readonly frameStyles: Frame3DStyleOverrides | undefined;\n};\n\n/** Whether a registered main container is a 3D one — and so carries the 2D container it wraps. */\nexport function isLayout3DMainContainer(component: unknown): component is Layout3DMainContainer {\n return typeof component === 'function' && (component as Partial<Layout3DMainContainer>)[LAYOUT_3D_MAIN_CONTAINER_BRAND] === true;\n}\n\nlet appearanceMismatchWarned = false;\n\n/**\n * How long a shell appearance other than the one the layout requires must persist before it is reported. The UI\n * context starts from the DEFAULT theme and resolves the application's own theme a moment later, so the first value\n * this container sees is routinely SEPARATED even in a CONTINUOUS application — measured on Wonder Todos, whose\n * shell renders `bg-transparent` while the first-render value read SEPARATED. Only a value that survives\n * bootstrap is the application's.\n */\nconst APPEARANCE_MISMATCH_REPORT_DELAY_MS = 5000;\n\n/**\n * Build the 3D main container: a captured 2D container, and a layout that either renders it (INHERIT) or arranges\n * the regions with a container of its own (COMPOSED).\n *\n * It renders exactly two children, at FIXED positions:\n *\n * - **index 0, the frame slot** ({@link FrameSlot}): the decorative canvas behind its lazy door (`FrameCanvasDoor`),\n * whose `LazyDoorErrorBoundary` contains any failure of it. The theme and the navigation state are read in the\n * slot, in the DOM tree, and passed to the canvas as props: a theme, mode, breakpoint or navigation change\n * re-renders index 0 and never touches index 1.\n * It is `position: fixed` with NO z-index, `aria-hidden` and `pointer-events: none`.\n * - **index 1, the placement**: the captured 2D container, unchanged, for an INHERIT layout; the layout's own\n * container, composed from the same shell building blocks, otherwise. Either way every region, provider,\n * context, portal and latch is the application's own.\n *\n * Why no wrapper, and no `isolate` (the #1821 text proposed `<div class=\"isolate\">` with the canvas at\n * `-z-10`): `isolate` would make the whole shell ONE stacking context, so anything positioned OUTSIDE it\n * with a lower z-index — the consent prompt (`z-50`) — would paint over the shell's own dialogs\n * (`--z-overlay`, 300). #1830 measured that exact reordering and chose `relative` for the 2D shell root\n * for that reason. Instead, a positioned element with no z-index paints at the z-index:0 level in TREE\n * order, which puts the canvas after the theme's background layer (`UIContext`'s `isolate` wrapper,\n * earlier in the tree) and before the shell root (`relative`, the next sibling) — frame above the theme\n * background, shell above the frame — while every z-index inside the shell keeps its global order.\n *\n * The precondition this places on the placement: its ROOT must be positioned (the 2D default and the\n * header-first container are `relative`, #1830), or its in-flow content paints at a lower level than the frame and\n * under it. The frame never takes a click either way — it handles no pointer events at all.\n *\n * Why fixed positions: a canvas failure empties only index 0. The placement never moves and keeps one component\n * type for the application's life, so it never remounts — a remount there would unmount every navigation zone and\n * lose its state.\n */\nexport function create3DMainContainer(captured: MainContainerComponent, options: Layout3DOptions = {}): Layout3DMainContainer {\n const layout = options.layout ?? INHERIT_LAYOUT_3D;\n const frameStyles = options.frameStyles;\n // A camera, transition kind or rest pose the renderer does not implement is refused here, at registration.\n assertSupportedLayout3D(layout);\n const crossFadeAppearance = crossFadesAppearance(layout.transitions.appearance);\n // Chosen ONCE, outside the component: the element at index 1 keeps one type for the application's life, so it\n // never remounts.\n const Placement: MainContainerComponent = layout.placement.kind === ShellLayoutPlacementKind.INHERIT ? captured : layout.placement.container;\n function Layout3DMainContainer(props: AppLayoutPreset_MainContainer_DefaultProps): React.JSX.Element {\n const { shellAppearance } = useUI();\n const required = layout.constraints.requiredShellAppearance;\n\n useEffect(() => {\n // The frame is visible only where regions paint nothing. A layout states the shell appearance it is designed\n // for; any other is the application's choice to correct, so it is said once and nothing switches.\n if (required === null || shellAppearance === required || appearanceMismatchWarned) return undefined;\n const report = setTimeout(() => {\n // Checked again here: several containers (or a remount) may have armed a timer before the first fired.\n if (appearanceMismatchWarned) return;\n appearanceMismatchWarned = true;\n console.warn(\n `[presets-components-3d] the 3D layout '${layout.id}' is designed for a '${String(required)}' shell, and this theme's `\n + `shell appearance is '${String(shellAppearance)}': opaque regions will cover the frame drawn under them.`,\n );\n }, APPEARANCE_MISMATCH_REPORT_DELAY_MS);\n return () => clearTimeout(report);\n }, [shellAppearance, required]);\n\n return (\n <>\n {/* A spatial layout's placement draws its own environment; the flat frame belongs to the flat camera only. */}\n {layout.scene.camera === Layout3DCamera.FLAT_ORTHOGRAPHIC && <FrameSlot layout={layout} frameStyles={frameStyles} crossFadeAppearance={crossFadeAppearance} />}\n <Placement {...props} />\n </>\n );\n }\n\n return Object.assign(Layout3DMainContainer, {\n [LAYOUT_3D_MAIN_CONTAINER_BRAND]: true as const,\n captured,\n layout,\n frameStyles,\n });\n}\n\n/**\n * Index 0 of a 3D main container: reads what the frame follows — the theme (`useFrameAppearance`) and the navigation\n * state (#1826) — and hands it to the canvas. Its own component, so a navigation, which changes the navigation state\n * many times a second during some flows, re-renders this slot and never the placement beside it.\n *\n * The navigation signature is every structural zone's top entry (`getTopEntry`, so a tabbed zone reports its visible\n * tab), identified by its URL PATH:\n * - not by its id, which is minted again on every push or replace, so a route sync that re-lands the SAME place would\n * read as a navigation nobody made (the id stands in only for an entry without a URL);\n * - not by its query string, which carries VIEW state on the same content (`?section=`, `?dataMode=`, which the\n * engine updates in place as \"same id, same content\"): switching a board's section tab or a list's mode is not\n * going somewhere, and does not play.\n * The route sync hooks mirror router navigations into those stacks, so a sidebar link and a record opened beside a\n * list both change it; the overlay zone is not a place and does not. While no zone holds anything yet, the signature\n * is empty, which the frame never records (see `FrameDriver.setNavigation`).\n */\nfunction FrameSlot({\n layout,\n frameStyles,\n crossFadeAppearance,\n}: {\n layout: Layout3DDefinition;\n frameStyles: Frame3DStyleOverrides | undefined;\n crossFadeAppearance: boolean;\n}): React.JSX.Element {\n const appearance = useFrameAppearance(layout.scene.frameStyles, frameStyles);\n const navigation = useNavigationState();\n const zones = Object.keys(navigation.state.zones) as Array<keyof typeof navigation.state.zones>;\n const places = zones.map((zone) => {\n const top = navigation.getTopEntry(zone);\n return top ? (top.urlPath?.split(/[?#]/)[0] ?? top.id) : '';\n });\n const navigationSignature = places.some((place) => place !== '') ? zones.map((zone, index) => `${zone}:${places[index]}`).join('|') : '';\n return (\n <FrameCanvasDoor\n appearance={appearance}\n camera={layout.scene.camera}\n crossFadeAppearance={crossFadeAppearance}\n navigationTransition={layout.transitions.navigation}\n sidebarResizeTransition={layout.transitions.sidebarResize}\n zoneFocusTransition={layout.transitions.zoneFocus}\n navigationSignature={navigationSignature}\n focusedZone={navigation.focusedZone}\n />\n );\n}\n"]}
1
+ {"version":3,"file":"layout-3d-main-container.js","sourceRoot":"","sources":["../../src/layout-3d-main-container.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useEffect } from 'react';\n\nimport { useNavigationState, useUI, type AppLayoutPreset_MainContainer_DefaultProps } from '@wildo-ai/saas-frontend-lib';\n\nimport { FrameCanvasDoor } from './frame/frame-canvas.lazy';\nimport type { Frame3DStyleOverrides } from './frame/frame-3d-style';\nimport { FocalPlaneSettingsContext, resolveFocalPlaneSettings, type FocalPlaneSettings } from './focal-plane/focal-plane-settings';\nimport { assertSupportedLayout3D, INHERIT_LAYOUT_3D, type Layout3DDefinition } from './layout/layout-3d-definition';\nimport { crossFadesAppearance } from './layout/layout-3d-transition-choreography';\nimport { Layout3DCamera } from './layout/layout-3d-vocabulary';\nimport { ShellLayoutPlacementKind } from './layout/shell-layout-placement';\nimport { useFrameAppearance } from './frame/use-frame-appearance';\n\n/**\n * The brand a 3D main container carries. `Symbol.for`, not `Symbol`: the component registry lives on\n * `globalThis` and survives a hot reload, while a reloaded module would mint a new `Symbol` and fail to\n * recognise the container it registered last time — and then capture it as \"the 2D shell\".\n */\nconst LAYOUT_3D_MAIN_CONTAINER_BRAND = Symbol.for('@wildo-ai/presets-components-3d/main-container');\n\ntype MainContainerComponent = React.ComponentType<AppLayoutPreset_MainContainer_DefaultProps>;\n\n/** @wildo_source:part:start presets.3d.register-layout facet:layer:frontend facet:family:layout-3d facet:audience:app-developer */\n/** What a 3D main container draws: the layout, and the application's frame-style overrides. */\nexport interface Layout3DOptions {\n /**\n * The layout: its disposal, its scene and its transitions. Defaults to {@link INHERIT_LAYOUT_3D}, the 2D disposal\n * with the frame under it. An application uses ONE layout for its whole life.\n */\n layout?: Layout3DDefinition;\n /** Frame-style overrides layered over the layout's built-in styles. */\n frameStyles?: Frame3DStyleOverrides;\n /**\n * Overrides of the focal plane's numbers (camera distance, layer depth, motion, dims, blurs, window opacity), for\n * {@link FOCAL_PLANE_LAYOUT_3D}; each is checked at registration. Omitted, the defaults.\n */\n focalPlane?: Partial<FocalPlaneSettings>;\n}\n/** @wildo_source:part:end presets.3d.register-layout */\n\n/** A 3D main container: the component, the 2D container it captured, and the layout it draws. */\nexport type Layout3DMainContainer = MainContainerComponent & {\n readonly [LAYOUT_3D_MAIN_CONTAINER_BRAND]: true;\n /**\n * The 2D main container captured at registration: rendered unchanged by an INHERIT placement, and kept by every\n * layout so a re-registration wraps IT rather than a 3D container.\n */\n readonly captured: MainContainerComponent;\n /** The layout this container draws. */\n readonly layout: Layout3DDefinition;\n /** The application's frame-style overrides, when it registered any. */\n readonly frameStyles: Frame3DStyleOverrides | undefined;\n};\n\n/** Whether a registered main container is a 3D one — and so carries the 2D container it wraps. */\nexport function isLayout3DMainContainer(component: unknown): component is Layout3DMainContainer {\n return typeof component === 'function' && (component as Partial<Layout3DMainContainer>)[LAYOUT_3D_MAIN_CONTAINER_BRAND] === true;\n}\n\nlet appearanceMismatchWarned = false;\n\n/**\n * How long a shell appearance other than the one the layout requires must persist before it is reported. The UI\n * context starts from the DEFAULT theme and resolves the application's own theme a moment later, so the first value\n * this container sees is routinely SEPARATED even in a CONTINUOUS application — measured on Wonder Todos, whose\n * shell renders `bg-transparent` while the first-render value read SEPARATED. Only a value that survives\n * bootstrap is the application's.\n */\nconst APPEARANCE_MISMATCH_REPORT_DELAY_MS = 5000;\n\n/**\n * Build the 3D main container: a captured 2D container, and a layout that either renders it (INHERIT) or arranges\n * the regions with a container of its own (COMPOSED).\n *\n * It renders exactly two children, at FIXED positions:\n *\n * - **index 0, the frame slot** ({@link FrameSlot}): the decorative canvas behind its lazy door (`FrameCanvasDoor`),\n * whose `LazyDoorErrorBoundary` contains any failure of it. The theme and the navigation state are read in the\n * slot, in the DOM tree, and passed to the canvas as props: a theme, mode, breakpoint or navigation change\n * re-renders index 0 and never touches index 1.\n * It is `position: fixed` with NO z-index, `aria-hidden` and `pointer-events: none`.\n * - **index 1, the placement**: the captured 2D container, unchanged, for an INHERIT layout; the layout's own\n * container, composed from the same shell building blocks, otherwise. Either way every region, provider,\n * context, portal and latch is the application's own.\n *\n * Why no wrapper, and no `isolate` (the #1821 text proposed `<div class=\"isolate\">` with the canvas at\n * `-z-10`): `isolate` would make the whole shell ONE stacking context, so anything positioned OUTSIDE it\n * with a lower z-index — the consent prompt (`z-50`) — would paint over the shell's own dialogs\n * (`--z-overlay`, 300). #1830 measured that exact reordering and chose `relative` for the 2D shell root\n * for that reason. Instead, a positioned element with no z-index paints at the z-index:0 level in TREE\n * order, which puts the canvas after the theme's background layer (`UIContext`'s `isolate` wrapper,\n * earlier in the tree) and before the shell root (`relative`, the next sibling) — frame above the theme\n * background, shell above the frame — while every z-index inside the shell keeps its global order.\n *\n * The precondition this places on the placement: its ROOT must be positioned (the 2D default and the\n * header-first container are `relative`, #1830), or its in-flow content paints at a lower level than the frame and\n * under it. The frame never takes a click either way — it handles no pointer events at all.\n *\n * Why fixed positions: a canvas failure empties only index 0. The placement never moves and keeps one component\n * type for the application's life, so it never remounts — a remount there would unmount every navigation zone and\n * lose its state.\n */\nexport function create3DMainContainer(captured: MainContainerComponent, options: Layout3DOptions = {}): Layout3DMainContainer {\n const layout = options.layout ?? INHERIT_LAYOUT_3D;\n const frameStyles = options.frameStyles;\n // Checked here, at registration, like the layout itself. Only the still-perspective camera reads them: settings a\n // layout would silently ignore are refused instead.\n if (options.focalPlane !== undefined && layout.scene.camera !== Layout3DCamera.STILL_PERSPECTIVE) {\n throw new Error(`register3DLayout(): 'focalPlane' tunes the focal-plane layout, and the layout '${layout.id}' is not seen through its still camera.`);\n }\n const focalPlane = resolveFocalPlaneSettings(options.focalPlane);\n // A camera, transition kind or rest pose the renderer does not implement is refused here, at registration.\n assertSupportedLayout3D(layout);\n const crossFadeAppearance = crossFadesAppearance(layout.transitions.appearance);\n // Chosen ONCE, outside the component: the element at index 1 keeps one type for the application's life, so it\n // never remounts.\n const Placement: MainContainerComponent = layout.placement.kind === ShellLayoutPlacementKind.INHERIT ? captured : layout.placement.container;\n function Layout3DMainContainer(props: AppLayoutPreset_MainContainer_DefaultProps): React.JSX.Element {\n const { shellAppearance } = useUI();\n const required = layout.constraints.requiredShellAppearance;\n\n useEffect(() => {\n // The frame is visible only where regions paint nothing. A layout states the shell appearance it is designed\n // for; any other is the application's choice to correct, so it is said once and nothing switches.\n if (required === null || shellAppearance === required || appearanceMismatchWarned) return undefined;\n const report = setTimeout(() => {\n // Checked again here: several containers (or a remount) may have armed a timer before the first fired.\n if (appearanceMismatchWarned) return;\n appearanceMismatchWarned = true;\n console.warn(\n `[presets-components-3d] the 3D layout '${layout.id}' is designed for a '${String(required)}' shell, and this theme's `\n + `shell appearance is '${String(shellAppearance)}': opaque regions will cover the frame drawn under them.`,\n );\n }, APPEARANCE_MISMATCH_REPORT_DELAY_MS);\n return () => clearTimeout(report);\n }, [shellAppearance, required]);\n\n return (\n <>\n {/* The flat frame belongs to the flat camera; a still-perspective placement stages its own depth. */}\n {layout.scene.camera === Layout3DCamera.FLAT_ORTHOGRAPHIC && <FrameSlot layout={layout} frameStyles={frameStyles} crossFadeAppearance={crossFadeAppearance} />}\n <FocalPlaneSettingsContext.Provider value={focalPlane}>\n <Placement {...props} />\n </FocalPlaneSettingsContext.Provider>\n </>\n );\n }\n\n return Object.assign(Layout3DMainContainer, {\n [LAYOUT_3D_MAIN_CONTAINER_BRAND]: true as const,\n captured,\n layout,\n frameStyles,\n });\n}\n\n/**\n * Index 0 of a 3D main container: reads what the frame follows — the theme (`useFrameAppearance`) and the navigation\n * state (#1826) — and hands it to the canvas. Its own component, so a navigation, which changes the navigation state\n * many times a second during some flows, re-renders this slot and never the placement beside it.\n *\n * The navigation signature is every structural zone's top entry (`getTopEntry`, so a tabbed zone reports its visible\n * tab), identified by its URL PATH:\n * - not by its id, which is minted again on every push or replace, so a route sync that re-lands the SAME place would\n * read as a navigation nobody made (the id stands in only for an entry without a URL);\n * - not by its query string, which carries VIEW state on the same content (`?section=`, `?dataMode=`, which the\n * engine updates in place as \"same id, same content\"): switching a board's section tab or a list's mode is not\n * going somewhere, and does not play.\n * The route sync hooks mirror router navigations into those stacks, so a sidebar link and a record opened beside a\n * list both change it; the overlay zone is not a place and does not. While no zone holds anything yet, the signature\n * is empty, which the frame never records (see `FrameDriver.setNavigation`).\n */\nfunction FrameSlot({\n layout,\n frameStyles,\n crossFadeAppearance,\n}: {\n layout: Layout3DDefinition;\n frameStyles: Frame3DStyleOverrides | undefined;\n crossFadeAppearance: boolean;\n}): React.JSX.Element {\n const appearance = useFrameAppearance(layout.scene.frameStyles, frameStyles);\n const navigation = useNavigationState();\n const zones = Object.keys(navigation.state.zones) as Array<keyof typeof navigation.state.zones>;\n const places = zones.map((zone) => {\n const top = navigation.getTopEntry(zone);\n return top ? (top.urlPath?.split(/[?#]/)[0] ?? top.id) : '';\n });\n const navigationSignature = places.some((place) => place !== '') ? zones.map((zone, index) => `${zone}:${places[index]}`).join('|') : '';\n return (\n <FrameCanvasDoor\n appearance={appearance}\n camera={layout.scene.camera}\n crossFadeAppearance={crossFadeAppearance}\n navigationTransition={layout.transitions.navigation}\n sidebarResizeTransition={layout.transitions.sidebarResize}\n zoneFocusTransition={layout.transitions.zoneFocus}\n navigationSignature={navigationSignature}\n focusedZone={navigation.focusedZone}\n />\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"register-3d-layout.d.ts","sourceRoot":"","sources":["../../../src/register-3d-layout.ts"],"names":[],"mappings":"AACA,OAAO,EAA4B,KAAK,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAE3G,OAAO,EAAkD,KAAK,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAIlH,mIAAmI;AACnI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,eAAoB,GAAG,6BAA6B,CAiC7F;AACD,wDAAwD"}
1
+ {"version":3,"file":"register-3d-layout.d.ts","sourceRoot":"","sources":["../../src/register-3d-layout.ts"],"names":[],"mappings":"AACA,OAAO,EAA4B,KAAK,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAE3G,OAAO,EAAkD,KAAK,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAIlH,mIAAmI;AACnI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,eAAoB,GAAG,6BAA6B,CAiC7F;AACD,wDAAwD"}
@@ -1 +1 @@
1
- {"version":3,"file":"register-3d-layout.js","sourceRoot":"","sources":["../../../src/register-3d-layout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAC7F,OAAO,EAAE,wBAAwB,EAAsC,MAAM,6BAA6B,CAAC;AAE3G,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAwB,MAAM,4BAA4B,CAAC;AAClH,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvF,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE3D,mIAAmI;AACnI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAA2B,EAAE;IAC5D,IAAI,sBAAsB,GAAG,KAAK,CAAC;IACnC,OAAO;QACL,YAAY,EAAE,qBAAqB,CAAC,0BAA0B;QAC9D,MAAM,EAAE,eAAe,CAAC,OAAO;QAC/B,IAAI,cAAc;YAChB,OAAO,sBAAsB,CAAC;QAChC,CAAC;QACD,aAAa,EAAE,KAAK,IAAI,EAAE;YACxB,MAAM,OAAO,GAAG,wBAAwB,CAAC,OAAO,CAAC,qBAAqB,CAAC,0BAA0B,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;YAC5H,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CACb,wHAAwH;sBACtH,4GAA4G,CAC/G,CAAC;YACJ,CAAC;YACD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,iBAAiB,CAAC;YACnD,8GAA8G;YAC9G,2DAA2D;YAC3D,IAAK,MAAM,CAAC,MAAM,CAAC,UAAU,CAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,mBAAmB,CAAC,MAAM,CAAC,EAAgB,CAAC,KAAK,MAAM,EAAE,CAAC;gBAC3H,MAAM,IAAI,KAAK,CAAC,sCAAsC,MAAM,CAAC,EAAE,qFAAqF,CAAC,CAAC;YACxJ,CAAC;YACD,IAAI,uBAAuB,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,EAAE,CAAC;gBACxE,MAAM,IAAI,KAAK,CACb,0EAA0E,OAAO,CAAC,MAAM,CAAC,EAAE,uBAAuB,MAAM,CAAC,EAAE,KAAK;sBAC9H,8GAA8G;sBAC9G,iEAAiE,CACpE,CAAC;YACJ,CAAC;YACD,sBAAsB,GAAG,wBAAwB,CAAC,WAAW,CAAC,qBAAqB,CAAC,0BAA0B,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,cAAc,IAAI,KAAK,CAAC;YAClK,OAAO,qBAAqB,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACvG,CAAC;KACF,CAAC;AACJ,CAAC;AACD,wDAAwD","sourcesContent":["import { CorePresetNames, FrontendComponentType } from '@wildo-ai/presets-components-models';\nimport { ComponentRegistryService, type FrontendComponentRegistration } from '@wildo-ai/saas-frontend-lib';\n\nimport { create3DMainContainer, isLayout3DMainContainer, type Layout3DOptions } from './layout-3d-main-container';\nimport { BUILT_IN_LAYOUTS_3D, INHERIT_LAYOUT_3D } from './layout/layout-3d-definition';\nimport { Layout3DId } from './layout/layout-3d-vocabulary';\n\n/** @wildo_source:part:start presets.3d.register-layout facet:layer:frontend facet:family:layout-3d facet:audience:app-developer */\n/**\n * Make an application's signed-in shell 3D: the shell's regions — unchanged HTML, with all their contexts —\n * arranged by a 3D layout, with a decorative WebGL frame drawn under them.\n *\n * There is no 2D/3D switch and no option to enable it. An application is 3D because it CALLS this, from\n * its engine module's `componentRegistrations` — the entries `registerFrontendComponentRegistrations`\n * runs AFTER the framework presets are registered, so the Default main container exists by then:\n *\n * ```ts\n * import { register3DLayout } from '@wildo-ai/presets-components-3d';\n *\n * export const engineComponentRegistrations: FrontendComponentRegistration[] = [register3DLayout()];\n * ```\n *\n * It registers under `Default` for `APP_LAYOUTS_MAIN_CONTAINER`, the only preset key the shell resolves,\n * after capturing the container registered there before it. An INHERIT layout renders that captured container,\n * unchanged; a layout with a disposal of its own renders its composed container instead, built from the same\n * shell building blocks — either way every region, context and behaviour is the application's own.\n *\n * - **Refuses** when nothing is registered yet: capturing `null` would render no shell at all, and the\n * cause — the registration running before the framework presets — is worth an error, not a blank app.\n * - **Idempotent**: a registration that finds a 3D container already there (a second call, or the\n * registry surviving a hot reload on `globalThis`) wraps the 2D container IT captured, never itself.\n * - **Keeps the registration's metadata**: the captured container's `isConfigurable` is carried over, so\n * nothing that reads the registry's metadata sees a difference.\n *\n * `options.layout` selects the layout (`INHERIT_LAYOUT_3D` by default); `options.frameStyles` layers an\n * application's frame styles over the layout's own (per theme id, or for all themes).\n *\n * - **One layout per application.** A registration that finds a 3D container of a DIFFERENT layout already\n * registered refuses: an application is not 3D in two ways, and a silent replacement would hide which one it\n * is. The same layout again is idempotent. (A layout changed in code during a hot reload needs a full page\n * reload, because the registry outlives the hot reload.)\n */\nexport function register3DLayout(options: Layout3DOptions = {}): FrontendComponentRegistration {\n let capturedIsConfigurable = false;\n return {\n componentRef: FrontendComponentType.APP_LAYOUTS_MAIN_CONTAINER,\n preset: CorePresetNames.DEFAULT,\n get isConfigurable(): boolean {\n return capturedIsConfigurable;\n },\n loadComponent: async () => {\n const current = ComponentRegistryService.resolve(FrontendComponentType.APP_LAYOUTS_MAIN_CONTAINER, CorePresetNames.DEFAULT);\n if (!current) {\n throw new Error(\n 'register3DLayout(): no Default APP_LAYOUTS_MAIN_CONTAINER is registered to capture. Call it from the engine module\\'s '\n + '`componentRegistrations`, which run after the framework presets — not from a module evaluated before them.',\n );\n }\n const layout = options.layout ?? INHERIT_LAYOUT_3D;\n // An application's own layout may not borrow a built-in id: the one-layout check compares ids, and a borrowed\n // one would make two different layouts look like the same.\n if ((Object.values(Layout3DId) as string[]).includes(layout.id) && BUILT_IN_LAYOUTS_3D[layout.id as Layout3DId] !== layout) {\n throw new Error(`register3DLayout(): the layout id '${layout.id}' belongs to a built-in layout; give the application's own layout an id of its own.`);\n }\n if (isLayout3DMainContainer(current) && current.layout.id !== layout.id) {\n throw new Error(\n `register3DLayout(): this application already registered the 3D layout '${current.layout.id}' and now asks for '${layout.id}'. `\n + 'An application uses one layout: remove the other registration — or, if you just changed the layout in code, '\n + 'reload the page (the component registry outlives a hot reload).',\n );\n }\n capturedIsConfigurable = ComponentRegistryService.getMetadata(FrontendComponentType.APP_LAYOUTS_MAIN_CONTAINER, CorePresetNames.DEFAULT)?.isConfigurable ?? false;\n return create3DMainContainer(isLayout3DMainContainer(current) ? current.captured : current, options);\n },\n };\n}\n/** @wildo_source:part:end presets.3d.register-layout */\n"]}
1
+ {"version":3,"file":"register-3d-layout.js","sourceRoot":"","sources":["../../src/register-3d-layout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAC7F,OAAO,EAAE,wBAAwB,EAAsC,MAAM,6BAA6B,CAAC;AAE3G,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAwB,MAAM,4BAA4B,CAAC;AAClH,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvF,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE3D,mIAAmI;AACnI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAA2B,EAAE;IAC5D,IAAI,sBAAsB,GAAG,KAAK,CAAC;IACnC,OAAO;QACL,YAAY,EAAE,qBAAqB,CAAC,0BAA0B;QAC9D,MAAM,EAAE,eAAe,CAAC,OAAO;QAC/B,IAAI,cAAc;YAChB,OAAO,sBAAsB,CAAC;QAChC,CAAC;QACD,aAAa,EAAE,KAAK,IAAI,EAAE;YACxB,MAAM,OAAO,GAAG,wBAAwB,CAAC,OAAO,CAAC,qBAAqB,CAAC,0BAA0B,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;YAC5H,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CACb,wHAAwH;sBACtH,4GAA4G,CAC/G,CAAC;YACJ,CAAC;YACD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,iBAAiB,CAAC;YACnD,8GAA8G;YAC9G,2DAA2D;YAC3D,IAAK,MAAM,CAAC,MAAM,CAAC,UAAU,CAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,mBAAmB,CAAC,MAAM,CAAC,EAAgB,CAAC,KAAK,MAAM,EAAE,CAAC;gBAC3H,MAAM,IAAI,KAAK,CAAC,sCAAsC,MAAM,CAAC,EAAE,qFAAqF,CAAC,CAAC;YACxJ,CAAC;YACD,IAAI,uBAAuB,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,EAAE,CAAC;gBACxE,MAAM,IAAI,KAAK,CACb,0EAA0E,OAAO,CAAC,MAAM,CAAC,EAAE,uBAAuB,MAAM,CAAC,EAAE,KAAK;sBAC9H,8GAA8G;sBAC9G,iEAAiE,CACpE,CAAC;YACJ,CAAC;YACD,sBAAsB,GAAG,wBAAwB,CAAC,WAAW,CAAC,qBAAqB,CAAC,0BAA0B,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,cAAc,IAAI,KAAK,CAAC;YAClK,OAAO,qBAAqB,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACvG,CAAC;KACF,CAAC;AACJ,CAAC;AACD,wDAAwD","sourcesContent":["import { CorePresetNames, FrontendComponentType } from '@wildo-ai/presets-components-models';\nimport { ComponentRegistryService, type FrontendComponentRegistration } from '@wildo-ai/saas-frontend-lib';\n\nimport { create3DMainContainer, isLayout3DMainContainer, type Layout3DOptions } from './layout-3d-main-container';\nimport { BUILT_IN_LAYOUTS_3D, INHERIT_LAYOUT_3D } from './layout/layout-3d-definition';\nimport { Layout3DId } from './layout/layout-3d-vocabulary';\n\n/** @wildo_source:part:start presets.3d.register-layout facet:layer:frontend facet:family:layout-3d facet:audience:app-developer */\n/**\n * Make an application's signed-in shell 3D: the shell's regions — unchanged HTML, with all their contexts —\n * arranged by a 3D layout, with a decorative WebGL frame drawn under them.\n *\n * There is no 2D/3D switch and no option to enable it. An application is 3D because it CALLS this, from\n * its engine module's `componentRegistrations` — the entries `registerFrontendComponentRegistrations`\n * runs AFTER the framework presets are registered, so the Default main container exists by then:\n *\n * ```ts\n * import { register3DLayout } from '@wildo-ai/presets-components-3d';\n *\n * export const engineComponentRegistrations: FrontendComponentRegistration[] = [register3DLayout()];\n * ```\n *\n * It registers under `Default` for `APP_LAYOUTS_MAIN_CONTAINER`, the only preset key the shell resolves,\n * after capturing the container registered there before it. An INHERIT layout renders that captured container,\n * unchanged; a layout with a disposal of its own renders its composed container instead, built from the same\n * shell building blocks — either way every region, context and behaviour is the application's own.\n *\n * - **Refuses** when nothing is registered yet: capturing `null` would render no shell at all, and the\n * cause — the registration running before the framework presets — is worth an error, not a blank app.\n * - **Idempotent**: a registration that finds a 3D container already there (a second call, or the\n * registry surviving a hot reload on `globalThis`) wraps the 2D container IT captured, never itself.\n * - **Keeps the registration's metadata**: the captured container's `isConfigurable` is carried over, so\n * nothing that reads the registry's metadata sees a difference.\n *\n * `options.layout` selects the layout (`INHERIT_LAYOUT_3D` by default); `options.frameStyles` layers an\n * application's frame styles over the layout's own (per theme id, or for all themes).\n *\n * - **One layout per application.** A registration that finds a 3D container of a DIFFERENT layout already\n * registered refuses: an application is not 3D in two ways, and a silent replacement would hide which one it\n * is. The same layout again is idempotent. (A layout changed in code during a hot reload needs a full page\n * reload, because the registry outlives the hot reload.)\n */\nexport function register3DLayout(options: Layout3DOptions = {}): FrontendComponentRegistration {\n let capturedIsConfigurable = false;\n return {\n componentRef: FrontendComponentType.APP_LAYOUTS_MAIN_CONTAINER,\n preset: CorePresetNames.DEFAULT,\n get isConfigurable(): boolean {\n return capturedIsConfigurable;\n },\n loadComponent: async () => {\n const current = ComponentRegistryService.resolve(FrontendComponentType.APP_LAYOUTS_MAIN_CONTAINER, CorePresetNames.DEFAULT);\n if (!current) {\n throw new Error(\n 'register3DLayout(): no Default APP_LAYOUTS_MAIN_CONTAINER is registered to capture. Call it from the engine module\\'s '\n + '`componentRegistrations`, which run after the framework presets — not from a module evaluated before them.',\n );\n }\n const layout = options.layout ?? INHERIT_LAYOUT_3D;\n // An application's own layout may not borrow a built-in id: the one-layout check compares ids, and a borrowed\n // one would make two different layouts look like the same.\n if ((Object.values(Layout3DId) as string[]).includes(layout.id) && BUILT_IN_LAYOUTS_3D[layout.id as Layout3DId] !== layout) {\n throw new Error(`register3DLayout(): the layout id '${layout.id}' belongs to a built-in layout; give the application's own layout an id of its own.`);\n }\n if (isLayout3DMainContainer(current) && current.layout.id !== layout.id) {\n throw new Error(\n `register3DLayout(): this application already registered the 3D layout '${current.layout.id}' and now asks for '${layout.id}'. `\n + 'An application uses one layout: remove the other registration — or, if you just changed the layout in code, '\n + 'reload the page (the component registry outlives a hot reload).',\n );\n }\n capturedIsConfigurable = ComponentRegistryService.getMetadata(FrontendComponentType.APP_LAYOUTS_MAIN_CONTAINER, CorePresetNames.DEFAULT)?.isConfigurable ?? false;\n return create3DMainContainer(isLayout3DMainContainer(current) ? current.captured : current, options);\n },\n };\n}\n/** @wildo_source:part:end presets.3d.register-layout */\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"shell-region-measurement.d.ts","sourceRoot":"","sources":["../../../src/shell-region-measurement.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAEhF;;;;;;GAMG;AACH,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,WAAW,CAAC;IACpB,oHAAoH;IACpH,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,KAAK,EAAE,OAAO,CAAC;IACf,yEAAyE;IACzE,OAAO,EAAE,WAAW,CAAC;CACtB;AAID;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,GAAE,UAAqB,GAAG,WAAW,EAAE,CAKlF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,GAAE,UAAqB,GAAG,mBAAmB,EAAE,CAiBtF;AAED,0EAA0E;AAC1E,MAAM,WAAW,sBAAsB;IACrC,8GAA8G;IAC9G,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,WAAW,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,GAAE,UAAqB,GAAG,WAAW,EAAE,CAErF;AAED,+HAA+H;AAC/H,wBAAgB,sBAAsB,CAAC,IAAI,GAAE,UAAqB,GAAG,sBAAsB,EAAE,CAQ5F;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,IAAI,CAAC,mBAAmB,EAAE,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC,EACtE,QAAQ,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC1C;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAK1B"}
1
+ {"version":3,"file":"shell-region-measurement.d.ts","sourceRoot":"","sources":["../../src/shell-region-measurement.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAEhF;;;;;;GAMG;AACH,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,WAAW,CAAC;IACpB,oHAAoH;IACpH,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,KAAK,EAAE,OAAO,CAAC;IACf,yEAAyE;IACzE,OAAO,EAAE,WAAW,CAAC;CACtB;AAID;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,GAAE,UAAqB,GAAG,WAAW,EAAE,CAKlF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,GAAE,UAAqB,GAAG,mBAAmB,EAAE,CAiBtF;AAED,0EAA0E;AAC1E,MAAM,WAAW,sBAAsB;IACrC,8GAA8G;IAC9G,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,WAAW,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,GAAE,UAAqB,GAAG,WAAW,EAAE,CAErF;AAED,+HAA+H;AAC/H,wBAAgB,sBAAsB,CAAC,IAAI,GAAE,UAAqB,GAAG,sBAAsB,EAAE,CAQ5F;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,IAAI,CAAC,mBAAmB,EAAE,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC,EACtE,QAAQ,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC1C;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAK1B"}
@@ -1 +1 @@
1
- {"version":3,"file":"shell-region-measurement.js","sourceRoot":"","sources":["../../../src/shell-region-measurement.ts"],"names":[],"mappings":"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","sourcesContent":["import { MaterialKind, ShellRegion } from '@wildo-ai/presets-components-models';\n\n/**\n * One painted region of the signed-in shell, measured in CSS pixels relative to the viewport.\n *\n * The 3D frame only FOLLOWS the HTML shell: every size, collapse and breakpoint decision stays the 2D\n * container's, and the frame reads the result off the DOM. So this is the frame's only input about the\n * layout, and it carries nothing a renderer could mistake for a decision.\n */\nexport interface MeasuredShellRegion {\n region: ShellRegion;\n /** The region's `data-placement` (a `HorizontalPlacement` / `VerticalPlacement` value), when it sits at an edge. */\n placement: string | null;\n left: number;\n top: number;\n width: number;\n height: number;\n /**\n * The region already renders a glass material: its element carries `data-material-kind=\"glass\"` (a region\n * preset renders through `Surface asChild`, which puts the material attributes on the region element itself).\n * The frame draws no slab under it — glass over a frosted slab would be two materials doing one job.\n */\n glass: boolean;\n /** The element measured, so a caller can observe it for size changes. */\n element: HTMLElement;\n}\n\nconst SHELL_REGION_VALUES: ReadonlySet<string> = new Set(Object.values(ShellRegion));\n\n/**\n * Every element marked as a shell region, whether or not it currently has a box — a region collapsed to\n * nothing is still one to observe, so it is redrawn the moment it reappears. Same filtering as\n * {@link measureShellRegions} otherwise.\n */\nexport function findShellRegionElements(root: ParentNode = document): HTMLElement[] {\n return [...root.querySelectorAll<HTMLElement>('[data-component-area]')].filter((element) => {\n const value = element.dataset.componentArea;\n return value !== undefined && SHELL_REGION_VALUES.has(value) && !element.hasAttribute('data-mobile-drawer');\n });\n}\n\n/**\n * Every shell region currently painted, found by the public `data-component-area` marker (#1818) and\n * never by a preset's markup — so a custom 2D region preset that keeps the marker is framed like the\n * built-in one.\n *\n * Skipped, deliberately:\n * - a value outside `ShellRegion`: `data-component-area` is the SHELL's contract, and anything else\n * carrying the attribute is not a region the frame should draw under;\n * - the sidebar's mobile DRAWER (`data-mobile-drawer`): it is an overlay that slides over the content,\n * not a region that tiles the shell, so a slab under it would sit under the page;\n * - an element with no box (a region rendered but collapsed to nothing, or hidden).\n */\nexport function measureShellRegions(root: ParentNode = document): MeasuredShellRegion[] {\n const measured: MeasuredShellRegion[] = [];\n for (const element of findShellRegionElements(root)) {\n const rect = element.getBoundingClientRect();\n if (rect.width <= 0 || rect.height <= 0) continue;\n measured.push({\n region: element.dataset.componentArea as ShellRegion,\n placement: element.dataset.placement ?? null,\n left: rect.left,\n top: rect.top,\n width: rect.width,\n height: rect.height,\n glass: element.dataset.materialKind === MaterialKind.GLASS,\n element,\n });\n }\n return measured;\n}\n\n/** One navigation zone the content area shows, measured like a region. */\nexport interface MeasuredNavigationZone {\n /** The zone's `data-content-area` value: the navigation's zone name (`primary`, `secondary`, `companion`). */\n zone: string;\n left: number;\n top: number;\n width: number;\n height: number;\n element: HTMLElement;\n}\n\n/**\n * Every navigation zone container inside the shell's CONTENT region, found by the navigation's own public marker\n * (`data-content-area`, one per zone container whatever the branch — single zone, resizable split or static split).\n * Only inside the content region: the marker is the navigation's, and the frame draws zone rims only within the\n * content slab. Whatever its box, so one that reappears is observed (as {@link findShellRegionElements}).\n */\nexport function findNavigationZoneElements(root: ParentNode = document): HTMLElement[] {\n return [...root.querySelectorAll<HTMLElement>(`[data-component-area=\"${ShellRegion.CONTENT}\"] [data-content-area]`)];\n}\n\n/** The navigation zones currently shown: a hidden zone (`display: none`, collapsed responsively) has no box and is skipped. */\nexport function measureNavigationZones(root: ParentNode = document): MeasuredNavigationZone[] {\n const measured: MeasuredNavigationZone[] = [];\n for (const element of findNavigationZoneElements(root)) {\n const rect = element.getBoundingClientRect();\n if (rect.width <= 0 || rect.height <= 0) continue;\n measured.push({ zone: element.dataset.contentArea ?? '', left: rect.left, top: rect.top, width: rect.width, height: rect.height, element });\n }\n return measured;\n}\n\n/**\n * The centre of a measured region in an orthographic camera matched 1:1 to CSS pixels, whose origin is\n * the viewport's centre and whose y axis points UP (three.js), while the DOM's points down.\n */\nexport function regionCentreInFrameUnits(\n region: Pick<MeasuredShellRegion, 'left' | 'top' | 'width' | 'height'>,\n viewport: { width: number; height: number },\n): { x: number; y: number } {\n return {\n x: region.left + region.width / 2 - viewport.width / 2,\n y: viewport.height / 2 - (region.top + region.height / 2),\n };\n}\n"]}
1
+ {"version":3,"file":"shell-region-measurement.js","sourceRoot":"","sources":["../../src/shell-region-measurement.ts"],"names":[],"mappings":"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","sourcesContent":["import { MaterialKind, ShellRegion } from '@wildo-ai/presets-components-models';\n\n/**\n * One painted region of the signed-in shell, measured in CSS pixels relative to the viewport.\n *\n * The 3D frame only FOLLOWS the HTML shell: every size, collapse and breakpoint decision stays the 2D\n * container's, and the frame reads the result off the DOM. So this is the frame's only input about the\n * layout, and it carries nothing a renderer could mistake for a decision.\n */\nexport interface MeasuredShellRegion {\n region: ShellRegion;\n /** The region's `data-placement` (a `HorizontalPlacement` / `VerticalPlacement` value), when it sits at an edge. */\n placement: string | null;\n left: number;\n top: number;\n width: number;\n height: number;\n /**\n * The region already renders a glass material: its element carries `data-material-kind=\"glass\"` (a region\n * preset renders through `Surface asChild`, which puts the material attributes on the region element itself).\n * The frame draws no slab under it — glass over a frosted slab would be two materials doing one job.\n */\n glass: boolean;\n /** The element measured, so a caller can observe it for size changes. */\n element: HTMLElement;\n}\n\nconst SHELL_REGION_VALUES: ReadonlySet<string> = new Set(Object.values(ShellRegion));\n\n/**\n * Every element marked as a shell region, whether or not it currently has a box — a region collapsed to\n * nothing is still one to observe, so it is redrawn the moment it reappears. Same filtering as\n * {@link measureShellRegions} otherwise.\n */\nexport function findShellRegionElements(root: ParentNode = document): HTMLElement[] {\n return [...root.querySelectorAll<HTMLElement>('[data-component-area]')].filter((element) => {\n const value = element.dataset.componentArea;\n return value !== undefined && SHELL_REGION_VALUES.has(value) && !element.hasAttribute('data-mobile-drawer');\n });\n}\n\n/**\n * Every shell region currently painted, found by the public `data-component-area` marker (#1818) and\n * never by a preset's markup — so a custom 2D region preset that keeps the marker is framed like the\n * built-in one.\n *\n * Skipped, deliberately:\n * - a value outside `ShellRegion`: `data-component-area` is the SHELL's contract, and anything else\n * carrying the attribute is not a region the frame should draw under;\n * - the sidebar's mobile DRAWER (`data-mobile-drawer`): it is an overlay that slides over the content,\n * not a region that tiles the shell, so a slab under it would sit under the page;\n * - an element with no box (a region rendered but collapsed to nothing, or hidden).\n */\nexport function measureShellRegions(root: ParentNode = document): MeasuredShellRegion[] {\n const measured: MeasuredShellRegion[] = [];\n for (const element of findShellRegionElements(root)) {\n const rect = element.getBoundingClientRect();\n if (rect.width <= 0 || rect.height <= 0) continue;\n measured.push({\n region: element.dataset.componentArea as ShellRegion,\n placement: element.dataset.placement ?? null,\n left: rect.left,\n top: rect.top,\n width: rect.width,\n height: rect.height,\n glass: element.dataset.materialKind === MaterialKind.GLASS,\n element,\n });\n }\n return measured;\n}\n\n/** One navigation zone the content area shows, measured like a region. */\nexport interface MeasuredNavigationZone {\n /** The zone's `data-content-area` value: the navigation's zone name (`primary`, `secondary`, `companion`). */\n zone: string;\n left: number;\n top: number;\n width: number;\n height: number;\n element: HTMLElement;\n}\n\n/**\n * Every navigation zone container inside the shell's CONTENT region, found by the navigation's own public marker\n * (`data-content-area`, one per zone container whatever the branch — single zone, resizable split or static split).\n * Only inside the content region: the marker is the navigation's, and the frame draws zone rims only within the\n * content slab. Whatever its box, so one that reappears is observed (as {@link findShellRegionElements}).\n */\nexport function findNavigationZoneElements(root: ParentNode = document): HTMLElement[] {\n return [...root.querySelectorAll<HTMLElement>(`[data-component-area=\"${ShellRegion.CONTENT}\"] [data-content-area]`)];\n}\n\n/** The navigation zones currently shown: a hidden zone (`display: none`, collapsed responsively) has no box and is skipped. */\nexport function measureNavigationZones(root: ParentNode = document): MeasuredNavigationZone[] {\n const measured: MeasuredNavigationZone[] = [];\n for (const element of findNavigationZoneElements(root)) {\n const rect = element.getBoundingClientRect();\n if (rect.width <= 0 || rect.height <= 0) continue;\n measured.push({ zone: element.dataset.contentArea ?? '', left: rect.left, top: rect.top, width: rect.width, height: rect.height, element });\n }\n return measured;\n}\n\n/**\n * The centre of a measured region in an orthographic camera matched 1:1 to CSS pixels, whose origin is\n * the viewport's centre and whose y axis points UP (three.js), while the DOM's points down.\n */\nexport function regionCentreInFrameUnits(\n region: Pick<MeasuredShellRegion, 'left' | 'top' | 'width' | 'height'>,\n viewport: { width: number; height: number },\n): { x: number; y: number } {\n return {\n x: region.left + region.width / 2 - viewport.width / 2,\n y: viewport.height / 2 - (region.top + region.height / 2),\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"design-token-resolution.d.ts","sourceRoot":"","sources":["../../../../src/tokens/design-token-resolution.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAExE;;;;;;GAMG;AACH,oBAAY,uBAAuB;IACjC,8FAA8F;IAC9F,KAAK,UAAU;IACf,2CAA2C;IAC3C,QAAQ,aAAa;IACrB,+DAA+D;IAC/D,MAAM,WAAW;IACjB,8CAA8C;IAC9C,IAAI,SAAS;IACb,mCAAmC;IACnC,MAAM,WAAW;CAClB;AAED;;;GAGG;AACH,oBAAY,2BAA2B;IACrC;;;OAGG;IACH,iBAAiB,sBAAsB;IACvC;;;OAGG;IACH,oBAAoB,yBAAyB;IAC7C,sGAAsG;IACtG,gBAAgB,qBAAqB;CACtC;AAED,8FAA8F;AAC9F,oBAAY,sBAAsB;IAChC,kDAAkD;IAClD,KAAK,UAAU;IACf,wGAAwG;IACxG,WAAW,gBAAgB;IAC3B;;;OAGG;IACH,aAAa,kBAAkB;CAChC;AAED;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAChC;IAAE,IAAI,EAAE,uBAAuB,CAAC,KAAK,CAAC;IAAC,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,sBAAsB,CAAA;CAAE,GACpI;IAAE,IAAI,EAAE,uBAAuB,CAAC,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC3D;IAAE,IAAI,EAAE,uBAAuB,CAAC,MAAM,CAAC;IAAC,aAAa,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAClG;IAAE,IAAI,EAAE,uBAAuB,CAAC,IAAI,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,uBAAuB,CAAC,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5D;;;GAGG;AACH,MAAM,MAAM,qBAAqB,GAC7B;IAAE,KAAK,EAAE,iBAAiB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,wBAAwB,CAAA;CAAE,GAC/E;IAAE,KAAK,EAAE,iBAAiB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,2BAA2B,CAAA;CAAE,CAAC;AAEzF,MAAM,WAAW,4BAA4B;IAC3C,oFAAoF;IACpF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;CACtD;AAyDD;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC,CAAC,EAC5D,OAAO,GAAE,4BAAiC,GACzC,GAAG,CAAC,iBAAiB,EAAE,qBAAqB,CAAC,CAyG/C"}
1
+ {"version":3,"file":"design-token-resolution.d.ts","sourceRoot":"","sources":["../../../src/tokens/design-token-resolution.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAExE;;;;;;GAMG;AACH,oBAAY,uBAAuB;IACjC,8FAA8F;IAC9F,KAAK,UAAU;IACf,2CAA2C;IAC3C,QAAQ,aAAa;IACrB,+DAA+D;IAC/D,MAAM,WAAW;IACjB,8CAA8C;IAC9C,IAAI,SAAS;IACb,mCAAmC;IACnC,MAAM,WAAW;CAClB;AAED;;;GAGG;AACH,oBAAY,2BAA2B;IACrC;;;OAGG;IACH,iBAAiB,sBAAsB;IACvC;;;OAGG;IACH,oBAAoB,yBAAyB;IAC7C,sGAAsG;IACtG,gBAAgB,qBAAqB;CACtC;AAED,8FAA8F;AAC9F,oBAAY,sBAAsB;IAChC,kDAAkD;IAClD,KAAK,UAAU;IACf,wGAAwG;IACxG,WAAW,gBAAgB;IAC3B;;;OAGG;IACH,aAAa,kBAAkB;CAChC;AAED;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAChC;IAAE,IAAI,EAAE,uBAAuB,CAAC,KAAK,CAAC;IAAC,SAAS,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,sBAAsB,CAAA;CAAE,GACpI;IAAE,IAAI,EAAE,uBAAuB,CAAC,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC3D;IAAE,IAAI,EAAE,uBAAuB,CAAC,MAAM,CAAC;IAAC,aAAa,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAClG;IAAE,IAAI,EAAE,uBAAuB,CAAC,IAAI,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,uBAAuB,CAAC,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5D;;;GAGG;AACH,MAAM,MAAM,qBAAqB,GAC7B;IAAE,KAAK,EAAE,iBAAiB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,wBAAwB,CAAA;CAAE,GAC/E;IAAE,KAAK,EAAE,iBAAiB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,2BAA2B,CAAA;CAAE,CAAC;AAEzF,MAAM,WAAW,4BAA4B;IAC3C,oFAAoF;IACpF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;CACtD;AAyDD;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC,CAAC,EAC5D,OAAO,GAAE,4BAAiC,GACzC,GAAG,CAAC,iBAAiB,EAAE,qBAAqB,CAAC,CAyG/C"}