@almadar/shell-web 1.0.0 → 1.2.0

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 (109) hide show
  1. package/LICENSE +72 -0
  2. package/dist/AvlGlyph-KZMJDBEB.js +5 -0
  3. package/dist/AvlStateMachine-KVZMFHFU.js +8 -0
  4. package/dist/AvlTransitionDetail-7DVGV27I.js +10 -0
  5. package/dist/AvlTransitionExplainer-RMJ5LQLK.js +11 -0
  6. package/dist/BehaviorView-EYRPME67.js +10 -0
  7. package/dist/{FileTree-BCFnBEuQ.d.ts → FileTree-B3GDAjaQ.d.ts} +131 -4
  8. package/dist/FlowCanvas-J54627TC.js +23 -0
  9. package/dist/{FlowCanvas-3JRMNJLV.css → FlowCanvas-R4LL3KRI.css} +190 -192
  10. package/dist/{GameAudioProvider-ceM_n0ey.d.ts → GameAudioProvider-BgWOOYT3.d.ts} +15 -20
  11. package/dist/{KernelEngineContext-CcxGYtlr.d.ts → KernelEngineContext-BPx-q0iw.d.ts} +15 -2
  12. package/dist/{LayersPanel-M2LHWUFF.js → LayersPanel-PSXI4EHG.js} +4 -4
  13. package/dist/ModuleCard-TNRLL45H.js +6 -0
  14. package/dist/{OrbInspector-MHLJ6OEE.css → OrbInspector-2EGVZLOJ.css} +190 -192
  15. package/dist/OrbInspector-UBEQWWZ2.js +23 -0
  16. package/dist/{parseLessonSegments-GpCeMrb2.d.ts → SegmentRenderer-BAQ6Jwf6.d.ts} +4 -20
  17. package/dist/{Select-B-iDdnvE.d.ts → Select-BJ8Fgc8A.d.ts} +1 -1
  18. package/dist/{UISlotContext-Dl_ewwCI.d.ts → UISlotContext-7r0SQdTL.d.ts} +1 -1
  19. package/dist/UISlotRenderer-5OURMAP2.js +23 -0
  20. package/dist/{UISlotRenderer-KVFO6J7R.css → UISlotRenderer-SJBSQGBQ.css} +190 -192
  21. package/dist/auth/react/index.js +7 -6
  22. package/dist/avl/index.css +190 -192
  23. package/dist/avl/index.d.ts +19 -7
  24. package/dist/avl/index.js +170 -39
  25. package/dist/{chunk-AE7VCQB6.js → chunk-2LNXLMK3.js} +2 -2
  26. package/dist/{chunk-REXYVBUO.js → chunk-3DA36FOA.js} +1 -1
  27. package/dist/{chunk-UXLE3IPR.js → chunk-3UQNFRYV.js} +207 -9
  28. package/dist/{chunk-AGXD77SL.js → chunk-3YUMGEEW.js} +1 -1
  29. package/dist/{chunk-K4MOPSEL.js → chunk-6RXP5ZXE.js} +7 -8
  30. package/dist/{chunk-E6KA4J6N.js → chunk-7UCL26QB.js} +4 -5
  31. package/dist/{chunk-57DC34LY.js → chunk-AL2XXMYR.js} +2 -2
  32. package/dist/{chunk-YHMRX6YA.js → chunk-ANTJUQRD.js} +53 -13
  33. package/dist/{chunk-P4ZFUQFF.js → chunk-AZ74UPG6.js} +4 -1
  34. package/dist/{chunk-ROICKAU7.js → chunk-B23EZH2P.js} +3 -3
  35. package/dist/{chunk-CPLN6NBQ.js → chunk-CCO2ZH7F.js} +3 -4
  36. package/dist/{chunk-4YXBKHHM.js → chunk-D5FJU4XC.js} +87 -16
  37. package/dist/{chunk-HH5KSMH5.js → chunk-DPDKBY6Z.js} +1 -1
  38. package/dist/{chunk-A2LR6VQQ.js → chunk-ECC3WQIB.js} +9 -93
  39. package/dist/{chunk-VO2TTLS5.js → chunk-GHAF7QUD.js} +1 -1
  40. package/dist/{chunk-TXAUOLWZ.js → chunk-HA2BYO5E.js} +1 -1
  41. package/dist/{chunk-ILQXJ2AR.js → chunk-JEN4EIUF.js} +1 -1
  42. package/dist/{chunk-UTDC2NEA.js → chunk-KTYOYEVA.js} +1 -1
  43. package/dist/{chunk-X3DMMX27.js → chunk-LINJRTNB.js} +2 -2
  44. package/dist/{chunk-TUPZWTRE.js → chunk-LKL5RULQ.js} +467 -141
  45. package/dist/{chunk-UU57VNS2.js → chunk-PWXZN5G5.js} +2 -2
  46. package/dist/{chunk-SP5CDJ6K.js → chunk-RDPELAFQ.js} +4 -4
  47. package/dist/{chunk-PRXQGGCO.js → chunk-S3LS3B7N.js} +1 -1
  48. package/dist/{chunk-LHP2TK7O.js → chunk-TAEOMNDK.js} +3611 -4737
  49. package/dist/{chunk-3S54FWRC.js → chunk-UFQLHCFJ.js} +1 -1
  50. package/dist/{chunk-AB3X7QTE.js → chunk-V5SVGUYN.js} +2 -3
  51. package/dist/{chunk-3VZ36ZKO.js → chunk-ZDRDJKYB.js} +5 -2
  52. package/dist/components/index.css +190 -192
  53. package/dist/components/index.d.ts +568 -190
  54. package/dist/components/index.js +27 -30
  55. package/dist/context/index.d.ts +2 -2
  56. package/dist/context/index.js +5 -5
  57. package/dist/core.d.ts +21 -4
  58. package/dist/core.js +1 -1
  59. package/dist/{fx-CmQjnHmT.d.ts → fx-Bx5RqplG.d.ts} +10 -7
  60. package/dist/hooks/index.d.ts +8 -8
  61. package/dist/hooks/index.js +6 -6
  62. package/dist/index.d.ts +4 -0
  63. package/dist/index.js +2 -2
  64. package/dist/{katexPlugin-FA7NX4PE.css → katexPlugin-BUHVNRBJ.css} +1 -1
  65. package/dist/{kernel-client-TZKGHJRY.js → kernel-client-NMZ56JVU.js} +60 -6
  66. package/dist/{kernel-wire-wNdAPfhJ.d.ts → kernel-wire-CRsHtLsf.d.ts} +8 -1
  67. package/dist/lib/index.d.ts +3 -4
  68. package/dist/lib/index.js +435 -4
  69. package/dist/providers/index.css +190 -192
  70. package/dist/providers/index.d.ts +6 -8
  71. package/dist/providers/index.js +21 -25
  72. package/dist/renderer/index.d.ts +3 -79
  73. package/dist/renderer/index.js +2 -2
  74. package/dist/runtime/index.css +190 -192
  75. package/dist/runtime/index.d.ts +9 -2
  76. package/dist/runtime/index.js +20 -23
  77. package/dist/ssr/index.cjs +105 -28
  78. package/dist/ssr/index.js +106 -29
  79. package/dist/test-support.js +2 -2
  80. package/dist/{useUISlots-CiobNFGb.d.ts → useUISlots-BLcGd__D.d.ts} +2 -0
  81. package/dist/{paintDispatch-CuJLsr9Y.d.ts → verificationRegistry-BLuQU1JV.d.ts} +127 -15
  82. package/package.json +10 -38
  83. package/src/core/locales/ar.json +10 -1
  84. package/src/core/locales/en.json +10 -1
  85. package/src/core/locales/sl.json +10 -1
  86. package/tailwind-preset.cjs +8 -4
  87. package/dist/AvlGlyph-EPJKFEO3.js +0 -6
  88. package/dist/AvlStateMachine-RKZIKNGC.js +0 -9
  89. package/dist/AvlTransitionDetail-63SD6GZF.js +0 -11
  90. package/dist/AvlTransitionExplainer-ZBTLOM3T.js +0 -12
  91. package/dist/BehaviorView-YS5G4GNB.js +0 -11
  92. package/dist/Canvas3DHost-BkZQB5l2.d.ts +0 -552
  93. package/dist/FlowCanvas-AUMTWMNG.js +0 -26
  94. package/dist/ModuleCard-QHDGK5XK.js +0 -7
  95. package/dist/OrbInspector-QCPEPUPH.js +0 -26
  96. package/dist/UISlotRenderer-C7WWOK43.js +0 -26
  97. package/dist/avl-3d-context-BycmO6tG.d.ts +0 -201
  98. package/dist/avl-schema-parser-CtJxJ9KU.d.ts +0 -132
  99. package/dist/avl-zoom-state-CKMVuBFg.d.ts +0 -17
  100. package/dist/chunk-4T3P43NS.js +0 -1133
  101. package/dist/chunk-DZBQA2OW.js +0 -176
  102. package/dist/chunk-EOWMARUB.js +0 -16
  103. package/dist/chunk-GFXCPUMX.js +0 -1334
  104. package/dist/chunk-ILZ7ORX7.js +0 -432
  105. package/dist/three/index.css +0 -503
  106. package/dist/three/index.d.ts +0 -1185
  107. package/dist/three/index.js +0 -3908
  108. package/dist/verificationRegistry-CVrcxG1s.d.ts +0 -122
  109. /package/dist/{katexPlugin-NCDKOOQY.js → katexPlugin-WGJ4JFZU.js} +0 -0
@@ -1,7 +1,9 @@
1
1
  import React__default from 'react';
2
- import { ScenePos, Asset } from '@almadar/core';
3
- import { P as Point, R as Rect, F as FxItem, a as FxPreset } from './fx-CmQjnHmT.js';
2
+ import { ScenePos, Asset, OrbitalVerificationAPI, TraitStateSnapshot, EventPayload, BusEvent, VerificationCheck, BridgeHealth, VerificationSnapshot, VerificationSummary, TransitionTrace, EventRequest, EventResponse, ServerResponseTrace, EffectTrace, CheckStatus, ServerEffectResult, AssetLoadStatus } from '@almadar/core';
3
+ import { P as Point, R as Rect, F as FxItem, a as FxPreset } from './fx-Bx5RqplG.js';
4
4
  import './EventBusProvider-BFFHfN4O.js';
5
+ import { EventTransport } from '@almadar/shell-runtime/client/EventTransport';
6
+ import './verification-C5pTeMJv.js';
5
7
 
6
8
  /** A polyline/polygon vertex in pixel space. */
7
9
  interface PainterPoint {
@@ -77,8 +79,7 @@ interface DrawableBase {
77
79
  * `draw-shape` — the neutral vector-fill/stroke drawable atom (dimension-agnostic).
78
80
  *
79
81
  * ONE descriptor (`DrawShapeProps`, grounded in core `ScenePos`) with TWO
80
- * backends: `paintShape` (2D, here) and an R3F ground-plane mesh (`Shape3D` in
81
- * `lib/drawable/mesh3d`, kept OUT of this file so the 2D path never pulls R3F).
82
+ * backends: `paintShape` (2D, here) and a ground-plane mesh in orbital-canvas's 3D scene.
82
83
  * Paints a cell footprint, an axis-aligned rect, an ellipse, a poly, or an SVG
83
84
  * path at a scene position, fill and/or stroke. Genre uses (tile fallback, iso/hex
84
85
  * diamond fallback, cell highlight, feature disc, unit selection ring, unit
@@ -229,9 +230,7 @@ declare function DrawShape(props: DrawShapeProps): React__default.JSX.Element |
229
230
  *
230
231
  * ONE descriptor (`DrawSpriteProps`, grounded in core `ScenePos` + `Asset`) with
231
232
  * TWO backends: `paintSprite` (2D, here — via the portable `Painter2D` seam) and
232
- * an R3F mesh (`Sprite3D` in `lib/drawable/mesh3d`, kept OUT of this file so the
233
- * 2D paint path never pulls `three`/`drei` into an app bundle — the codebase
234
- * code-splits R3F). The canvas host picks the backend by `mode`; that is what
233
+ * orbital-canvas's 3D scene (the `canvas` mode:"3d" mapper). The canvas host picks the backend by `mode`; that is what
235
234
  * makes canvas-2d and canvas-3d the same `children` interface. Genre uses (tile,
236
235
  * unit body, feature, effect, movement ghost, background cover) are all this atom
237
236
  * with different `anchor`/`size`/`frame`/`flip`/`shadow` — composed in `.lolo`,
@@ -276,8 +275,7 @@ declare function DrawSprite(_props: DrawSpriteProps): React__default.JSX.Element
276
275
  * `draw-text` — the neutral text drawable atom (dimension-agnostic).
277
276
  *
278
277
  * ONE descriptor (`DrawTextProps`, grounded in core `ScenePos`) with TWO backends:
279
- * `paintText` (2D, here) and an R3F billboarded `<Text>` (`Text3D` in
280
- * `lib/drawable/mesh3d`, kept OUT of this file so the 2D path never pulls R3F).
278
+ * `paintText` (2D, here) and billboarded text in orbital-canvas's 3D scene.
281
279
  * Paints a string at a scene position with font/color/alignment. The React
282
280
  * component renders `null` (a drawable is painted by the host, not the DOM).
283
281
  */
@@ -312,9 +310,8 @@ declare function DrawText(_props: DrawTextProps): React__default.JSX.Element | n
312
310
  /**
313
311
  * `draw-mesh` — the volumetric 3D drawable atom (3D-canvas backend).
314
312
  *
315
- * ONE descriptor (`DrawMeshProps`, grounded in core `ScenePos`) with the R3F
316
- * backend `Mesh3D` in `lib/drawable/three/DrawMesh3D` (kept OUT of this file so
317
- * the 2D path never pulls three). A parametric primitive (box, sphere, capsule,
313
+ * ONE descriptor (`DrawMeshProps`, grounded in core `ScenePos`) drawn by
314
+ * orbital-canvas's 3D scene. A parametric primitive (box, sphere, capsule,
318
315
  * cylinder, cone, torus, plane, circle — `plane`/`circle` lie flat in the
319
316
  * scene ground plane facing up, matching the 2D painter) or a raw-geometry `polyhedron`
320
317
  * (`vertices` + `faces` as plain data) at a scene position — `position.z` is
@@ -656,7 +653,7 @@ interface DrawFxLayerProps extends DrawableBase {
656
653
  type: 'draw-fx-layer';
657
654
  /** The live fx entries — the mechanic's `@entity.fx` list passed whole; `space: "screen"` entries are skipped (the overlay owns those). */
658
655
  items: FxItem[];
659
- /** Consumer-declared effect vocabulary — one row per fx `type` (look + recipe). Unknown types fall back to a neutral spark burst. */
656
+ /** Consumer-declared effect vocabulary — one row per fx `type` (look, recipe and motion). An item whose `type` has no row draws only from its own fields, and a missing required field is a typed error. */
660
657
  presets?: FxPreset[];
661
658
  /** Vector art per fx type (an asset-art map: type → anim-state → drawables); a type's `idle` state wins over sprites/procedural. */
662
659
  art?: Record<string, Record<string, DrawableNode[]>>;
@@ -684,5 +681,120 @@ declare function DrawFxLayer(_props: DrawFxLayerProps): React__default.JSX.Eleme
684
681
  /** Every drawable descriptor. The host's `children` are a `DrawableNode[]`. */
685
682
  type DrawableNode = DrawSpriteProps | DrawShapeProps | DrawTextProps | DrawGroupProps | DrawMeshProps | DrawSkinnedMeshProps | DrawSpriteLayerProps | DrawShapeLayerProps | DrawTextLayerProps | DrawFxLayerProps;
686
683
 
687
- export { DrawFxLayer as e, DrawGroup as f, DrawMesh as g, DrawShape as h, DrawShapeLayer as i, DrawSkinnedMesh as j, DrawSprite as k, DrawSpriteLayer as l, DrawText as m, DrawTextLayer as n };
688
- export type { DrawableNode as D, MeshShapeKind as M, Projector as P, MeshMaterial as a, DrawGroupProps as b, DrawTextProps as c, DrawMeshProps as d };
684
+ /**
685
+ * Verification Registry - Tracks runtime verification checks and transition traces
686
+ *
687
+ * Provides:
688
+ * 1. A checklist of pass/fail checks (INIT has fetch, bridge connected, etc.)
689
+ * 2. A full transition timeline with effect execution results
690
+ * 3. ServerBridge health snapshot
691
+ * 4. window.__orbitalVerification for Playwright/automation
692
+ *
693
+ * @packageDocumentation
694
+ */
695
+
696
+ type ChangeListener = () => void;
697
+ /**
698
+ * Per-trait snapshot getter. Each generated trait logic hook (or
699
+ * `useTraitStateMachine` trait binding) registers one on mount so the
700
+ * verifier can read the live reducer state for that trait.
701
+ */
702
+ type TraitSnapshotGetter = () => TraitStateSnapshot;
703
+ declare function registerCheck(id: string, label: string, status?: CheckStatus, details?: string): void;
704
+ declare function updateCheck(id: string, status: CheckStatus, details?: string): void;
705
+ declare function getAllChecks(): VerificationCheck[];
706
+ declare function recordTransition(trace: Omit<TransitionTrace, "id">): void;
707
+ declare function getTransitions(): TransitionTrace[];
708
+ declare function getTransitionsForTrait(traitName: string): TransitionTrace[];
709
+ /**
710
+ * Record a server response as a timeline entry.
711
+ * Creates a synthetic transition entry with type "server-response" to show
712
+ * what the server returned (clientEffects, data counts, emitted events).
713
+ *
714
+ * `effectResults` — the server's persist/set/call-service outcomes, already
715
+ * mapped to `EffectTrace` by the caller — populate `entry.effects` so a
716
+ * denied or failed persist is visible on this synthetic entry too. Before
717
+ * this it was always `[]`: the ONLY entry the driver's per-event
718
+ * `server:<orbital>` lookup (`default-snapshot.ts`'s `lastEffectResultsFor`)
719
+ * can find carried nothing.
720
+ */
721
+ declare function recordServerResponse(orbitalName: string, event: string, response: Omit<ServerResponseTrace, "orbitalName" | "timestamp"> & {
722
+ effectResults?: EffectTrace[];
723
+ }): void;
724
+ /** A server response's `effectResults` as timeline traces, carrying each persist's real outcome (entity, action, resulting id, denied). */
725
+ declare function serverEffectTraces(results: readonly ServerEffectResult[] | undefined): EffectTrace[];
726
+ /** Record one answered server leg on the timeline as a `server:<orbital>` trace. */
727
+ declare function recordOrbitalResponse(orbitalName: string, request: EventRequest, response: EventResponse): void;
728
+ /** `transport` with every answered post recorded on the verification timeline; the one place the circuit client's server responses are captured. */
729
+ declare function recordingTransport(transport: EventTransport): EventTransport;
730
+ declare function updateBridgeHealth(health: BridgeHealth): void;
731
+ declare function getBridgeHealth(): BridgeHealth | null;
732
+ declare function getSummary(): VerificationSummary;
733
+ declare function getSnapshot(): VerificationSnapshot;
734
+ /**
735
+ * Per-trait snapshot for the verifier.
736
+ *
737
+ * Iterates every registered trait getter and collects the live reducer
738
+ * state. Empty until at least one trait hook calls `registerTraitSnapshot`.
739
+ * A getter that throws is logged and skipped — one broken trait must not
740
+ * poison the rest of the snapshot.
741
+ */
742
+ declare function getTraitSnapshots(): TraitStateSnapshot[];
743
+ declare function subscribeToVerification(listener: ChangeListener): () => void;
744
+ declare global {
745
+ interface Window {
746
+ __orbitalVerification?: OrbitalVerificationAPI;
747
+ }
748
+ }
749
+ /** Whether a verifier is driving this page: the `__ALMADAR_VERIFY__` window flag it sets before the bundle runs. */
750
+ declare function verifierAttached(): boolean;
751
+ /**
752
+ * Wait for a transition matching the given event to appear.
753
+ * Returns the trace or null on timeout.
754
+ */
755
+ declare function waitForTransition(event: string, timeoutMs?: number): Promise<TransitionTrace | null>;
756
+ /**
757
+ * Bind the EventBus so automation can send events and log emissions.
758
+ * Call this during app initialization.
759
+ */
760
+ declare function bindEventBus(eventBus: {
761
+ emit: (type: string, payload?: EventPayload) => void;
762
+ onAny?: (listener: (event: BusEvent) => void) => () => void;
763
+ }): void;
764
+ declare function bindConfigApplier(applyConfig: NonNullable<OrbitalVerificationAPI['applyConfig']>): () => void;
765
+ /**
766
+ * Bind a trait state getter so automation can query current states.
767
+ */
768
+ declare function bindTraitStateGetter(getter: (traitName: string) => string | undefined): void;
769
+ /**
770
+ * Register a per-trait snapshot provider. The generated trait logic hook
771
+ * (or `useTraitStateMachine`) calls this once on mount, passing a getter
772
+ * that reads the current reducer state via a ref. Returns an unregister
773
+ * function for cleanup on unmount.
774
+ *
775
+ * Calling this twice for the same `traitName` replaces the previous
776
+ * getter (e.g. page navigation remounts the trait; the new registration
777
+ * wins).
778
+ */
779
+ declare function registerTraitSnapshot(traitName: string, getter: TraitSnapshotGetter): () => void;
780
+ /**
781
+ * Register a canvas frame capture function.
782
+ * Called by game organisms (IsometricCanvas, PlatformerCanvas)
783
+ * so the verifier can snapshot canvas content at checkpoints.
784
+ */
785
+ declare function bindCanvasCapture(captureFn: () => string | null): void;
786
+ /**
787
+ * Bind a reader for the last drawables list received by a canvas host.
788
+ * Lets verification scripts inspect exactly which neutral descriptors reached
789
+ * the painter without re-deriving them from state.
790
+ */
791
+ declare function bindLastDrawables(getDrawables: () => DrawableNode[] | null): void;
792
+ /**
793
+ * Update asset load status for canvas verification.
794
+ * Game organisms call this when images load or fail.
795
+ */
796
+ declare function updateAssetStatus(url: string, status: AssetLoadStatus): void;
797
+ declare function clearVerification(): void;
798
+
799
+ export { DrawFxLayer as A, DrawGroup as B, DrawMesh as C, DrawShape as E, DrawShapeLayer as F, DrawSkinnedMesh as G, DrawSprite as H, DrawSpriteLayer as I, DrawText as J, DrawTextLayer as K, bindConfigApplier as a, bindCanvasCapture as b, bindEventBus as c, bindLastDrawables as d, bindTraitStateGetter as e, clearVerification as f, getAllChecks as g, getBridgeHealth as h, getSnapshot as i, getSummary as j, getTraitSnapshots as k, getTransitions as l, getTransitionsForTrait as m, recordServerResponse as n, recordTransition as o, recordingTransport as p, registerCheck as q, recordOrbitalResponse as r, registerTraitSnapshot as s, serverEffectTraces as t, subscribeToVerification as u, updateAssetStatus as v, updateBridgeHealth as w, updateCheck as x, verifierAttached as y, waitForTransition as z };
800
+ export type { DrawableNode as D, MeshShapeKind as M, Projector as P, TraitSnapshotGetter as T };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@almadar/shell-web",
3
- "version": "1.0.0",
3
+ "version": "1.2.0",
4
4
  "orbRelease": {
5
5
  "severity": "normal"
6
6
  },
@@ -64,11 +64,6 @@
64
64
  "import": "./dist/lib/index.js",
65
65
  "default": "./dist/lib/index.js"
66
66
  },
67
- "./three": {
68
- "types": "./dist/three/index.d.ts",
69
- "import": "./dist/three/index.js",
70
- "default": "./dist/three/index.js"
71
- },
72
67
  "./avl": {
73
68
  "types": "./dist/avl/index.d.ts",
74
69
  "import": "./dist/avl/index.js",
@@ -134,11 +129,11 @@
134
129
  "access": "public"
135
130
  },
136
131
  "dependencies": {
137
- "@almadar/core": "^11.1.0",
138
- "@almadar/kernel": "^19.0.1",
139
- "@almadar/logger": "^2.1.0",
140
- "@almadar/std": "^17.0.0",
141
- "@almadar/syntax": "^2.0.0",
132
+ "@almadar/core": "^11.4.0",
133
+ "@almadar/kernel": "^19.2.0",
134
+ "@almadar/logger": "^2.4.0",
135
+ "@almadar/std": "^17.2.0",
136
+ "@almadar/syntax": "^2.2.0",
142
137
  "@dnd-kit/core": "^6.3.1",
143
138
  "@dnd-kit/sortable": "^10.0.0",
144
139
  "@dnd-kit/utilities": "^3.2.2",
@@ -166,14 +161,11 @@
166
161
  "remark-math": "^6.0.0",
167
162
  "tailwind-merge": "^2.2.0",
168
163
  "zod": "^4.6.7",
169
- "@almadar/shell-browser": "^1.0.0",
170
- "@almadar/shell-runtime": "^1.0.0"
164
+ "@almadar/shell-browser": "^1.2.0",
165
+ "@almadar/shell-runtime": "^1.2.0"
171
166
  },
172
167
  "devDependencies": {
173
- "@almadar/eslint-plugin": "^3.0.0",
174
- "@react-three/drei": "^10.7.7",
175
- "@react-three/fiber": "^9.6.0",
176
- "@react-three/postprocessing": "3.0.4",
168
+ "@almadar/eslint-plugin": "^3.1.0",
177
169
  "@tanstack/react-query": "^5.0.0",
178
170
  "@testing-library/jest-dom": "^6.4.0",
179
171
  "@testing-library/react": "^14.2.0",
@@ -184,7 +176,6 @@
184
176
  "@types/react": "^19.0.0",
185
177
  "@types/react-dom": "^19.0.0",
186
178
  "@types/react-syntax-highlighter": "^15.5.0",
187
- "@types/three": "^0.160.0",
188
179
  "@typescript-eslint/parser": "8.65.0",
189
180
  "@typescript/native": "npm:typescript@^7.0.2",
190
181
  "@vitejs/plugin-react": "^4.2.0",
@@ -198,14 +189,11 @@
198
189
  "jsdom": "^24.0.0",
199
190
  "katex": "^0.16.0",
200
191
  "postcss": "^8.4.35",
201
- "postprocessing": "6.39.0",
202
192
  "react": "^19.0.0",
203
193
  "react-compiler-runtime": "19.0.0-beta-af1b7da-20250417",
204
194
  "react-dom": "^19.0.0",
205
195
  "react-router-dom": "^7.18.2",
206
196
  "tailwindcss": "^3.4.0",
207
- "three": "^0.160.1",
208
- "three-stdlib": "^2.35.6",
209
197
  "tsup": "^9.0.0",
210
198
  "tsx": "^4.7.0",
211
199
  "turbo": "^2.8.17",
@@ -223,30 +211,14 @@
223
211
  "node": ">=22.19.0"
224
212
  },
225
213
  "peerDependencies": {
226
- "@react-three/drei": "^10.7.7",
227
- "@react-three/fiber": "^9.0.0",
228
- "@react-three/postprocessing": "^3.0.0",
229
214
  "@tanstack/react-query": "^5.0.0",
230
215
  "postcss": "^8.4.35",
231
216
  "react": ">=18.0.0",
232
217
  "react-dom": ">=18.0.0",
233
218
  "react-router-dom": "^7.0.0",
234
- "tailwindcss": "^3.4.0",
235
- "three": "^0.160.0"
219
+ "tailwindcss": "^3.4.0"
236
220
  },
237
221
  "peerDependenciesMeta": {
238
- "@react-three/drei": {
239
- "optional": true
240
- },
241
- "@react-three/fiber": {
242
- "optional": true
243
- },
244
- "@react-three/postprocessing": {
245
- "optional": true
246
- },
247
- "three": {
248
- "optional": true
249
- },
250
222
  "postcss": {
251
223
  "optional": true
252
224
  },
@@ -58,6 +58,7 @@
58
58
  "status.archived": "مؤرشف",
59
59
  "error.generic": "حدث خطأ ما",
60
60
  "error.traitMountFailed": "تعذّر بدء {{trait}}",
61
+ "error.serverRefused": "رفض الخادم هذه الصفحة",
61
62
  "error.retry": "حاول مرة أخرى",
62
63
  "error.notFound": "غير موجود",
63
64
  "error.loadFailed": "فشل التحميل: {{message}}",
@@ -136,6 +137,7 @@
136
137
  "aria.closeMenu": "إغلاق القائمة",
137
138
  "aria.openSidebar": "فتح الشريط الجانبي",
138
139
  "aria.openRow": "فتح العنصر {{position}}",
140
+ "aria.scrollableBoard": "لوحة قابلة للتمرير",
139
141
  "sidebar.expand": "توسيع الشريط الجانبي",
140
142
  "sidebar.collapse": "طي الشريط الجانبي",
141
143
  "sidebar.close": "إغلاق الشريط الجانبي",
@@ -1231,6 +1233,7 @@
1231
1233
  "agentActivity.change.trait-config-changed": "تم تغيير إعدادات {{orbitalName}}",
1232
1234
  "agentActivity.change.theme-changed": "تم تغيير سمة {{orbitalName}}",
1233
1235
  "agentActivity.llmResponse": "استجابة LLM خام",
1236
+ "agentActivity.unknown": "نشاط غير معروف: {{kind}}",
1234
1237
  "agentActivity.llmDuration": "{{seconds}} ث",
1235
1238
  "agentActivity.llmTokens": "{{prompt}} داخل / {{completion}} خارج",
1236
1239
  "agentActivity.llmResponseLabel": "الاستجابة",
@@ -1272,5 +1275,11 @@
1272
1275
  "debug.replayPause": "إيقاف مؤقت",
1273
1276
  "debug.replayStep": "{{step}} / {{total}}",
1274
1277
  "stateMachine.inspect": "فحص: اختر سمة من الصفحة",
1275
- "stateMachine.inspectHint": "انقر جزءًا من الصفحة · Esc للإيقاف"
1278
+ "stateMachine.inspectHint": "انقر جزءًا من الصفحة · Esc للإيقاف",
1279
+ "themeToggle.switchToLight": "التبديل إلى الوضع الفاتح",
1280
+ "themeToggle.switchToDark": "التبديل إلى الوضع الداكن",
1281
+ "themeToggle.light": "فاتح",
1282
+ "themeToggle.dark": "داكن",
1283
+ "agentActivity.toolDone": "{{tool}} — تم",
1284
+ "agentActivity.toolFailed": "{{tool}} — تعذّر"
1276
1285
  }
@@ -59,6 +59,7 @@
59
59
  "status.archived": "Archived",
60
60
  "error.generic": "Something went wrong",
61
61
  "error.traitMountFailed": "{{trait}} failed to start",
62
+ "error.serverRefused": "The server refused this page",
62
63
  "error.retry": "Try again",
63
64
  "error.notFound": "Not found",
64
65
  "error.loadFailed": "Failed to load: {{message}}",
@@ -140,6 +141,7 @@
140
141
  "aria.closeMenu": "Close menu",
141
142
  "aria.openSidebar": "Open sidebar",
142
143
  "aria.openRow": "Open item {{position}}",
144
+ "aria.scrollableBoard": "Scrollable board",
143
145
  "sidebar.expand": "Expand sidebar",
144
146
  "sidebar.collapse": "Collapse sidebar",
145
147
  "sidebar.close": "Close sidebar",
@@ -1231,6 +1233,7 @@
1231
1233
  "agentActivity.change.trait-config-changed": "Changed the settings of {{orbitalName}}",
1232
1234
  "agentActivity.change.theme-changed": "Changed the theme of {{orbitalName}}",
1233
1235
  "agentActivity.llmResponse": "Raw LLM response",
1236
+ "agentActivity.unknown": "Unknown activity: {{kind}}",
1234
1237
  "agentActivity.llmDuration": "{{seconds}}s",
1235
1238
  "agentActivity.llmTokens": "{{prompt}} in / {{completion}} out tokens",
1236
1239
  "agentActivity.llmResponseLabel": "Response",
@@ -1272,5 +1275,11 @@
1272
1275
  "debug.replayPause": "Pause",
1273
1276
  "debug.replayStep": "{{step}} / {{total}}",
1274
1277
  "stateMachine.inspect": "Inspect: pick a trait on the page",
1275
- "stateMachine.inspectHint": "Click a part of the page · Esc to stop"
1278
+ "stateMachine.inspectHint": "Click a part of the page · Esc to stop",
1279
+ "themeToggle.switchToLight": "Switch to light mode",
1280
+ "themeToggle.switchToDark": "Switch to dark mode",
1281
+ "themeToggle.light": "Light",
1282
+ "themeToggle.dark": "Dark",
1283
+ "agentActivity.toolDone": "{{tool}} — done",
1284
+ "agentActivity.toolFailed": "{{tool}} — failed"
1276
1285
  }
@@ -58,6 +58,7 @@
58
58
  "status.archived": "Arhivirano",
59
59
  "error.generic": "Nekaj je šlo narobe",
60
60
  "error.traitMountFailed": "{{trait}} se ni zagnal",
61
+ "error.serverRefused": "Strežnik je zavrnil to stran",
61
62
  "error.retry": "Poskusite znova",
62
63
  "error.notFound": "Ni najdeno",
63
64
  "error.loadFailed": "Nalaganje ni uspelo: {{message}}",
@@ -136,6 +137,7 @@
136
137
  "aria.closeMenu": "Zapri meni",
137
138
  "aria.openSidebar": "Odpri stransko vrstico",
138
139
  "aria.openRow": "Odpri element {{position}}",
140
+ "aria.scrollableBoard": "Drsljiva tabla",
139
141
  "sidebar.expand": "Razširi stransko vrstico",
140
142
  "sidebar.collapse": "Strni stransko vrstico",
141
143
  "sidebar.close": "Zapri stransko vrstico",
@@ -1231,6 +1233,7 @@
1231
1233
  "agentActivity.change.trait-config-changed": "Spremenjene nastavitve {{orbitalName}}",
1232
1234
  "agentActivity.change.theme-changed": "Spremenjena tema {{orbitalName}}",
1233
1235
  "agentActivity.llmResponse": "Surov odgovor LLM",
1236
+ "agentActivity.unknown": "Neznana dejavnost: {{kind}}",
1234
1237
  "agentActivity.llmDuration": "{{seconds}} s",
1235
1238
  "agentActivity.llmTokens": "{{prompt}} vhodnih / {{completion}} izhodnih žetonov",
1236
1239
  "agentActivity.llmResponseLabel": "Odgovor",
@@ -1272,5 +1275,11 @@
1272
1275
  "debug.replayPause": "Premor",
1273
1276
  "debug.replayStep": "{{step}} / {{total}}",
1274
1277
  "stateMachine.inspect": "Pregled: izberi lastnost na strani",
1275
- "stateMachine.inspectHint": "Klikni del strani · Esc za konec"
1278
+ "stateMachine.inspectHint": "Klikni del strani · Esc za konec",
1279
+ "themeToggle.switchToLight": "Preklopi na svetli način",
1280
+ "themeToggle.switchToDark": "Preklopi na temni način",
1281
+ "themeToggle.light": "Svetla",
1282
+ "themeToggle.dark": "Temna",
1283
+ "agentActivity.toolDone": "{{tool}} — končano",
1284
+ "agentActivity.toolFailed": "{{tool}} — ni uspelo"
1276
1285
  }
@@ -492,6 +492,10 @@ module.exports = {
492
492
  "after:content-['']",
493
493
  'after:rounded-[inherit]',
494
494
  'grow-[1.6]',
495
+
496
+ // Input leading/trailing icon padding follows the icon size token (G-ORBITAL-SHELL-TYPESCRIPT-070)
497
+ 'pl-[calc(var(--icon-default-size,16px)+1.5rem)]',
498
+ 'pr-[calc(var(--icon-default-size,16px)+1.5rem)]',
495
499
  ],
496
500
  theme: {
497
501
  fontFamily: {
@@ -630,7 +634,7 @@ module.exports = {
630
634
  keyframes: {
631
635
  'almadar-marquee': {
632
636
  from: { transform: 'translateX(0)' },
633
- to: { transform: 'translateX(var(--marquee-shift, -50%))' },
637
+ to: { transform: 'translateX(calc(var(--marquee-sign, -1) * var(--marquee-distance, 50%)))' },
634
638
  },
635
639
  'modal-in': {
636
640
  '0%': {
@@ -921,15 +925,15 @@ module.exports = {
921
925
  'border-radius': 'var(--surface-content-radius, var(--radius-container, var(--radius-md)))',
922
926
  'box-shadow': 'var(--surface-content-shadow, var(--elevation-card, var(--shadow-sm)))',
923
927
  },
924
- // Logo / wordmark marquee (std-proof `proofLook: marquee`): two copies of the strip scroll as one loop.
928
+ // Box `marquee`: a clipped strip fades at both edges; its track moves one copy's width per loop.
925
929
  '.proof-marquee': {
926
930
  overflow: 'hidden',
927
931
  'mask-image': 'linear-gradient(to right, transparent, black 8%, black 92%, transparent)',
928
932
  '-webkit-mask-image': 'linear-gradient(to right, transparent, black 8%, black 92%, transparent)',
929
933
  },
930
934
  '.proof-marquee-track': { display: 'flex', width: 'max-content' },
931
- // An RTL strip starts at the right edge, so the loop slides right.
932
- '[dir="rtl"] .proof-marquee-track': { '--marquee-shift': '50%' },
935
+ // An RTL strip starts at the right edge, so moving toward the start slides right.
936
+ '[dir="rtl"] .proof-marquee-track': { '--marquee-sign': '1' },
933
937
  // Full-width band layers (Box edgeTop/edgeBottom/texture/backdrop, std-hero scrim).
934
938
  '.band': { position: 'relative', overflow: 'hidden', isolation: 'isolate' },
935
939
  // Zero specificity: a child's own position utility (std-hero's absolute backdrop) must win.
@@ -1,6 +0,0 @@
1
- export { AVL_GLYPH_KINDS, AvlGlyph } from './chunk-CPLN6NBQ.js';
2
- import './chunk-HH5KSMH5.js';
3
- import './chunk-DZBQA2OW.js';
4
- import './chunk-UXLE3IPR.js';
5
- import './chunk-4YXBKHHM.js';
6
- import './chunk-G7DCAZ22.js';
@@ -1,9 +0,0 @@
1
- export { AvlStateMachine, BODY_CHAR, MARGIN, MAX_SCALE, MIN_SCALE, MONO_CHAR, PILL_H, metricsFor, pillWidth } from './chunk-SP5CDJ6K.js';
2
- import './chunk-TXAUOLWZ.js';
3
- import './chunk-AB3X7QTE.js';
4
- import './chunk-DZBQA2OW.js';
5
- import './chunk-TZZBINQY.js';
6
- import './chunk-PCR37T3U.js';
7
- import './chunk-UXLE3IPR.js';
8
- import './chunk-4YXBKHHM.js';
9
- import './chunk-G7DCAZ22.js';
@@ -1,11 +0,0 @@
1
- export { AvlTransitionDetail } from './chunk-K4MOPSEL.js';
2
- import './chunk-ILQXJ2AR.js';
3
- import './chunk-REXYVBUO.js';
4
- import './chunk-AGXD77SL.js';
5
- import './chunk-TXAUOLWZ.js';
6
- import './chunk-AB3X7QTE.js';
7
- import './chunk-DZBQA2OW.js';
8
- import './chunk-PCR37T3U.js';
9
- import './chunk-UXLE3IPR.js';
10
- import './chunk-4YXBKHHM.js';
11
- import './chunk-G7DCAZ22.js';
@@ -1,12 +0,0 @@
1
- export { AvlTransitionExplainer } from './chunk-X3DMMX27.js';
2
- import './chunk-K4MOPSEL.js';
3
- import './chunk-ILQXJ2AR.js';
4
- import './chunk-REXYVBUO.js';
5
- import './chunk-AGXD77SL.js';
6
- import './chunk-TXAUOLWZ.js';
7
- import './chunk-AB3X7QTE.js';
8
- import './chunk-DZBQA2OW.js';
9
- import './chunk-PCR37T3U.js';
10
- import './chunk-UXLE3IPR.js';
11
- import './chunk-4YXBKHHM.js';
12
- import './chunk-G7DCAZ22.js';
@@ -1,11 +0,0 @@
1
- export { BehaviorView } from './chunk-ROICKAU7.js';
2
- import './chunk-SP5CDJ6K.js';
3
- import './chunk-AGXD77SL.js';
4
- import './chunk-TXAUOLWZ.js';
5
- import './chunk-AB3X7QTE.js';
6
- import './chunk-DZBQA2OW.js';
7
- import './chunk-TZZBINQY.js';
8
- import './chunk-PCR37T3U.js';
9
- import './chunk-UXLE3IPR.js';
10
- import './chunk-4YXBKHHM.js';
11
- import './chunk-G7DCAZ22.js';