@almadar/shell-web 0.1.0 → 1.1.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.
- package/dist/{ArbitraryClassCompiler-Mzabq-UB.d.ts → ArbitraryClassCompiler-CO_iASBn.d.ts} +99 -4
- package/dist/AvlGlyph-PIXU6QH5.js +5 -0
- package/dist/AvlStateMachine-CKGMECMG.js +8 -0
- package/dist/AvlTransitionDetail-QZX6G5KJ.js +10 -0
- package/dist/AvlTransitionExplainer-26WLEIC6.js +11 -0
- package/dist/BehaviorView-JLZ4PKWY.js +10 -0
- package/dist/{EventBusProvider-CVwjkV_2.d.ts → EventBusProvider-BFFHfN4O.d.ts} +12 -0
- package/dist/{FileTree-BCFnBEuQ.d.ts → FileTree-B3GDAjaQ.d.ts} +131 -4
- package/dist/FlowCanvas-RPII4V24.js +23 -0
- package/dist/{BehaviorValueFrame-SSEMEBTG.css → FlowCanvas-VWUPMBKB.css} +189 -191
- package/dist/{GameAudioProvider-Cm9BnvmP.d.ts → GameAudioProvider-D7wo5ryN.d.ts} +5 -8
- package/dist/KernelEngineContext-CPeWQMAz.d.ts +46 -0
- package/dist/LayersPanel-M2LHWUFF.js +6 -0
- package/dist/ModuleCard-NJD6JQGD.js +6 -0
- package/dist/OrbInspector-OWWKPOBF.js +23 -0
- package/dist/{TraitValueFrame-4G3KOUBR.css → OrbInspector-VMTMZHNQ.css} +189 -191
- package/dist/{Select-mDZIwNqN.d.ts → Select-C2Uq6t86.d.ts} +17 -31
- package/dist/ServerBridge-Bqsj-lOU.d.ts +124 -0
- package/dist/{FlowCanvas-3JRMNJLV.css → UISlotRenderer-BIS6KT7T.css} +189 -191
- package/dist/UISlotRenderer-PY7FIJXN.js +23 -0
- package/dist/auth/browser/index.js +1 -0
- package/dist/auth/react/index.d.ts +8 -1
- package/dist/auth/react/index.js +40 -2
- package/dist/avl/index.css +189 -191
- package/dist/avl/index.d.ts +107 -85
- package/dist/avl/index.js +170 -39
- package/dist/{chunk-P4LNHAFI.js → chunk-2WGR4TDJ.js} +465 -36
- package/dist/{chunk-GKIFONTE.js → chunk-3S54FWRC.js} +2 -2
- package/dist/{chunk-KVQS4GXU.js → chunk-4YJ53G7S.js} +18 -8
- package/dist/{chunk-MBQAMMSE.js → chunk-4YXBKHHM.js} +269 -658
- package/dist/{chunk-YDNJLLG6.js → chunk-57DC34LY.js} +19 -10
- package/dist/{chunk-FP3WIKTC.js → chunk-7N6ZPHQ5.js} +9 -1
- package/dist/{chunk-AILY3XPS.js → chunk-AE7VCQB6.js} +5 -6
- package/dist/{chunk-L677XGY3.js → chunk-AGVSO4WY.js} +4 -5
- package/dist/{chunk-FAJDTHWC.js → chunk-AGXD77SL.js} +2 -2
- package/dist/chunk-AU7O65OX.js +66 -0
- package/dist/{chunk-DFNZUYX4.js → chunk-FAKU5F62.js} +273 -29
- package/dist/{chunk-U6QRZASX.js → chunk-ILQXJ2AR.js} +1 -1
- package/dist/chunk-M74BCDBQ.js +490 -0
- package/dist/{chunk-GYTPOFVC.js → chunk-MS4K3K2R.js} +12095 -13329
- package/dist/{chunk-SGM3FASH.js → chunk-OWNG4JZI.js} +13 -12
- package/dist/{chunk-VFF5OO47.js → chunk-PCR37T3U.js} +15 -38
- package/dist/{chunk-SJGJJKBY.js → chunk-PRLHKBXG.js} +5 -3
- package/dist/{chunk-R5O5AUPI.js → chunk-PRXQGGCO.js} +93 -86
- package/dist/{chunk-42FY4RYA.js → chunk-REXYVBUO.js} +2 -2
- package/dist/{chunk-EQAMU2ZC.js → chunk-UTDC2NEA.js} +1 -1
- package/dist/{chunk-73SRAB4P.js → chunk-UU57VNS2.js} +2 -2
- package/dist/{chunk-TESBIVUA.js → chunk-VHC2M26B.js} +2 -2
- package/dist/{chunk-L2DEKY4J.js → chunk-VO2TTLS5.js} +3 -6
- package/dist/{chunk-2PY54Z44.js → chunk-VUIACGDU.js} +4 -5
- package/dist/{chunk-DLZF4PVE.js → chunk-YYIHRIDH.js} +3 -3
- package/dist/{chunk-DYEKAA4L.js → chunk-ZDRDJKYB.js} +243 -252
- package/dist/components/index.css +189 -191
- package/dist/components/index.d.ts +739 -289
- package/dist/components/index.js +25 -28
- package/dist/context/index.d.ts +2 -3
- package/dist/context/index.js +4 -3
- package/dist/core.d.ts +95 -19
- package/dist/core.js +2 -1
- package/dist/design-classes/index.cjs +3 -1
- package/dist/design-classes/index.js +3 -1
- package/dist/{fx-CmQjnHmT.d.ts → fx-Br8zjvu9.d.ts} +6 -6
- package/dist/hooks/index.d.ts +40 -5
- package/dist/hooks/index.js +5 -4
- package/dist/index.d.ts +40 -114
- package/dist/index.js +174 -34
- package/dist/kernel-client-JW6OH5FX.js +537 -0
- package/dist/kernel-wire-DGAySGhX.d.ts +95 -0
- package/dist/lib/index.d.ts +3 -4
- package/dist/lib/index.js +4 -4
- package/dist/{prism-AIWGN2X5.js → prism-X5YWKXO5.js} +5 -3
- package/dist/providers/index.css +189 -191
- package/dist/providers/index.d.ts +41 -28
- package/dist/providers/index.js +19 -24
- package/dist/renderer/index.d.ts +0 -2
- package/dist/renderer/index.js +1 -0
- package/dist/runtime/index.css +189 -191
- package/dist/runtime/index.d.ts +57 -253
- package/dist/runtime/index.js +18 -24
- package/dist/ssr/index.cjs +2643 -535
- package/dist/ssr/index.d.cts +0 -23
- package/dist/ssr/index.d.ts +0 -23
- package/dist/ssr/index.js +2639 -535
- package/dist/storage/browser/index.js +1 -0
- package/dist/test-support.d.ts +15 -8
- package/dist/test-support.js +91 -24
- package/dist/{paintDispatch-ChW5mVuK.d.ts → verificationRegistry-oopV1J1n.d.ts} +132 -30
- package/package.json +14 -38
- package/src/core/lib/band-shapes.json +7 -0
- package/src/core/locales/ar.json +18 -5
- package/src/core/locales/en.json +18 -5
- package/src/core/locales/sl.json +18 -5
- package/tailwind-preset.cjs +30 -1
- package/dist/AvlGlyph-JKJOAH23.js +0 -6
- package/dist/AvlStateMachine-PI4YGREK.js +0 -8
- package/dist/AvlTransitionDetail-ZH7V24UG.js +0 -12
- package/dist/AvlTransitionExplainer-ZSRT7L6Y.js +0 -13
- package/dist/BehaviorValueFrame-6RUJXT4A.js +0 -29
- package/dist/BehaviorView-RFEE5J6E.js +0 -10
- package/dist/Canvas3DHost-_Y-5uLM_.d.ts +0 -552
- package/dist/FlowCanvas-STDC4OWK.js +0 -27
- package/dist/KernelEngineContext-BOCQoFwk.d.ts +0 -43
- package/dist/LayersPanel-BBQ54IVG.js +0 -7
- package/dist/ModuleCard-3TT2X7IW.js +0 -7
- package/dist/OrbInspector-K6T6O7GI.js +0 -27
- package/dist/OrbInspector-MHLJ6OEE.css +0 -1756
- package/dist/ServerBridge-Cm1On51b.d.ts +0 -233
- package/dist/TraitValueFrame-2PJGLLVI.js +0 -28
- package/dist/UISlotRenderer-JKFSX24W.js +0 -27
- package/dist/UISlotRenderer-KVFO6J7R.css +0 -1756
- package/dist/UserContext-DqWeZkUZ.d.ts +0 -100
- package/dist/avl-3d-context-BIRKWpaL.d.ts +0 -204
- package/dist/avl-schema-parser-CtJxJ9KU.d.ts +0 -132
- package/dist/avl-zoom-state-CKMVuBFg.d.ts +0 -17
- package/dist/chunk-2QOH2HWM.js +0 -95
- package/dist/chunk-6P3MWXYE.js +0 -440
- package/dist/chunk-B4BU77LT.js +0 -432
- package/dist/chunk-DJ433ET5.js +0 -1327
- package/dist/chunk-DZ42OJQC.js +0 -176
- package/dist/chunk-EOWMARUB.js +0 -16
- package/dist/chunk-FIW6WN23.js +0 -508
- package/dist/chunk-GAR5TQ5B.js +0 -199
- package/dist/chunk-PC7K4SK7.js +0 -1384
- package/dist/chunk-ZO6MXAS3.js +0 -69
- package/dist/kernel-client-ZH4PSMCN.js +0 -367
- package/dist/kernel-wire-B4S8pnP3.d.ts +0 -65
- package/dist/three/index.css +0 -503
- package/dist/three/index.d.ts +0 -1185
- package/dist/three/index.js +0 -3896
- package/dist/useKeyboardRouter-Dsq553Ur.d.ts +0 -42
- package/dist/verificationRegistry-CabxhfTv.d.ts +0 -122
package/dist/test-support.d.ts
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { KernelServerClass, KernelModule } from '@almadar/shell-runtime/kernel/wire';
|
|
2
|
-
import { OrbitalSchema
|
|
2
|
+
import { OrbitalSchema } from '@almadar/core';
|
|
3
3
|
import { KernelEngineValue } from './providers/index.js';
|
|
4
4
|
import { KernelModule as KernelModule$1 } from './providers/index.js';
|
|
5
|
-
import { EventTransport } from '@almadar/shell-runtime
|
|
6
|
-
import './verification-C5pTeMJv.js';
|
|
5
|
+
import { EventTransport } from '@almadar/shell-runtime';
|
|
7
6
|
import 'react';
|
|
7
|
+
import '@almadar/shell-runtime/kernel/os-port';
|
|
8
|
+
import '@almadar/shell-browser/kv';
|
|
9
|
+
import './verification-C5pTeMJv.js';
|
|
8
10
|
|
|
9
11
|
/**
|
|
10
12
|
* A whole `KernelModule` around a scripted `Server`, for tests that drive the engine without the wasm. Every member a
|
|
@@ -13,15 +15,17 @@ import 'react';
|
|
|
13
15
|
declare function stubKernelModule(Server: KernelServerClass, overrides?: Partial<Omit<KernelModule, 'Server'>>): KernelModule;
|
|
14
16
|
|
|
15
17
|
declare const KERNEL_AVAILABLE: boolean;
|
|
18
|
+
/** The type-contract stamp every test program carries, typed from core's `OrbitalSchema` so a version bump there fails here. */
|
|
19
|
+
declare const TEST_TYPE_CONTRACT_VERSION: NonNullable<OrbitalSchema['typeContractVersion']>;
|
|
20
|
+
/** The stamp option a hook under test hands the kernel: the same version, as a program's stamp. */
|
|
21
|
+
declare const TEST_STAMP: Pick<OrbitalSchema, 'typeContractVersion'>;
|
|
16
22
|
/** The installed language as the bundle a browser host hands a kernel it opens over a local store. */
|
|
17
23
|
declare const TEST_LANGUAGE: string;
|
|
18
24
|
/** The shared kernel module, loaded once, with the render evaluator installed from it. */
|
|
19
25
|
declare function loadTestKernel(): Promise<KernelModule$1>;
|
|
20
|
-
/** The std mock-seed program as `orb` resolves it from the installed packages, the way a Node host does. */
|
|
21
|
-
declare function loadTestSeedProgram(): Promise<OrbitalSchema>;
|
|
22
26
|
declare const KERNEL_ENGINE: KernelEngineValue;
|
|
23
27
|
declare const ENGINES: ReadonlyArray<readonly [string, KernelEngineValue]>;
|
|
24
|
-
/** A client-build kernel instance of its own, as a browser loads it:
|
|
28
|
+
/** A client-build kernel instance of its own, as a browser loads it: initialised, with the language installed once, as the browser kernel loader does. */
|
|
25
29
|
declare function loadFreshClientKernel(): Promise<KernelModule$1>;
|
|
26
30
|
/** Load the WebAssembly and the adapter chunk before a timing-sensitive test: the first dispatch otherwise waits on both. */
|
|
27
31
|
declare function warmKernel(): Promise<void>;
|
|
@@ -30,6 +34,9 @@ declare function warmKernel(): Promise<void>;
|
|
|
30
34
|
* The hosted playground's stateless topology: the program is registered once, and every request runs on a fresh
|
|
31
35
|
* session of it (`KernelEngine.fork`) over the kernel's own memory store, the client carrying the circuit state on the leg.
|
|
32
36
|
*/
|
|
33
|
-
declare function statelessKernelTransport(schema: OrbitalSchema
|
|
37
|
+
declare function statelessKernelTransport(schema: OrbitalSchema): EventTransport;
|
|
38
|
+
|
|
39
|
+
/** A `.lolo` program (with any files beside it, such as `locales/en/<app>.json`) as the installed `orb` compiles it for a browser kernel: the stamp, `_metadata.protocols` and dispatch facts included. */
|
|
40
|
+
declare function clientProgram(source: string, files?: Readonly<Record<string, string>>): OrbitalSchema;
|
|
34
41
|
|
|
35
|
-
export { ENGINES, KERNEL_AVAILABLE, KERNEL_ENGINE, TEST_LANGUAGE, loadFreshClientKernel, loadTestKernel,
|
|
42
|
+
export { ENGINES, KERNEL_AVAILABLE, KERNEL_ENGINE, TEST_LANGUAGE, TEST_STAMP, TEST_TYPE_CONTRACT_VERSION, clientProgram, loadFreshClientKernel, loadTestKernel, statelessKernelTransport, stubKernelModule, warmKernel };
|
package/dist/test-support.js
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
import { openLocalKernel, nativeMemoryPersistence } from './chunk-
|
|
1
|
+
"use client";
|
|
2
|
+
import { openLocalKernel, nativeMemoryPersistence } from './chunk-ZDRDJKYB.js';
|
|
3
3
|
import './chunk-G7DCAZ22.js';
|
|
4
|
-
import {
|
|
5
|
-
import { existsSync, readFileSync } from 'fs';
|
|
4
|
+
import { existsSync, readFileSync, mkdtempSync, writeFileSync, mkdirSync, rmSync } from 'fs';
|
|
6
5
|
import { createRequire } from 'module';
|
|
7
|
-
import { join } from 'path';
|
|
6
|
+
import { join, dirname } from 'path';
|
|
8
7
|
import { pathToFileURL } from 'url';
|
|
9
|
-
import {
|
|
8
|
+
import { installKernelEvaluator, parseOrbitalSchema } from '@almadar/core';
|
|
9
|
+
import { installNativeLanguages } from '@almadar/syntax';
|
|
10
10
|
import { readLanguageBundle } from '@almadar/core/language-data';
|
|
11
|
+
import { createInProcessTransport, evaluateOnKernel } from '@almadar/shell-runtime';
|
|
12
|
+
import { execFileSync } from 'child_process';
|
|
13
|
+
import { tmpdir } from 'os';
|
|
11
14
|
|
|
12
15
|
// src/test-support/stub-kernel-module.ts
|
|
13
16
|
function stubKernelModule(Server, overrides = {}) {
|
|
@@ -19,10 +22,12 @@ function stubKernelModule(Server, overrides = {}) {
|
|
|
19
22
|
osGlobMatches: () => false,
|
|
20
23
|
isPublicAddress: () => false,
|
|
21
24
|
osDeferringOps: () => "[]",
|
|
25
|
+
contractQueryWithoutProgram: () => "null",
|
|
22
26
|
osStreamOps: () => "[]",
|
|
23
27
|
osCompletionEvent: () => "null",
|
|
24
28
|
substrateCompletionEvent: () => "null",
|
|
25
29
|
tabUrlMatches: () => false,
|
|
30
|
+
parseEventRequest: unexpected("parseEventRequest"),
|
|
26
31
|
installLanguage: unexpected("installLanguage"),
|
|
27
32
|
evaluateMany: unexpected("evaluateMany"),
|
|
28
33
|
resolveValues: unexpected("resolveValues"),
|
|
@@ -33,6 +38,19 @@ function stubKernelModule(Server, overrides = {}) {
|
|
|
33
38
|
scopeRows: unexpected("scopeRows"),
|
|
34
39
|
checkMutationAccess: unexpected("checkMutationAccess"),
|
|
35
40
|
resolveRowBinding: unexpected("resolveRowBinding"),
|
|
41
|
+
eventWires: unexpected("eventWires"),
|
|
42
|
+
validatePacks: unexpected("validatePacks"),
|
|
43
|
+
expandFxLayer: unexpected("expandFxLayer"),
|
|
44
|
+
resolveFxView: unexpected("resolveFxView"),
|
|
45
|
+
fxLifecycle: unexpected("fxLifecycle"),
|
|
46
|
+
fxHash01: unexpected("fxHash01"),
|
|
47
|
+
skinWorldMatrices: unexpected("skinWorldMatrices"),
|
|
48
|
+
skinVertices: unexpected("skinVertices"),
|
|
49
|
+
skinComposeAffine: unexpected("skinComposeAffine"),
|
|
50
|
+
skinInvertAffine: unexpected("skinInvertAffine"),
|
|
51
|
+
skinApplyAffine: unexpected("skinApplyAffine"),
|
|
52
|
+
skinTriangleAffine: unexpected("skinTriangleAffine"),
|
|
53
|
+
skinVertexBounds: unexpected("skinVertexBounds"),
|
|
36
54
|
...overrides
|
|
37
55
|
};
|
|
38
56
|
}
|
|
@@ -61,22 +79,17 @@ async function load() {
|
|
|
61
79
|
glue.initSync({ module: readFileSync(files.wasm) });
|
|
62
80
|
glue.installLanguage(TEST_LANGUAGE);
|
|
63
81
|
installKernelEvaluator(glue);
|
|
82
|
+
installNativeLanguages();
|
|
64
83
|
return glue;
|
|
65
84
|
}
|
|
85
|
+
var TEST_TYPE_CONTRACT_VERSION = 1;
|
|
86
|
+
var TEST_STAMP = { typeContractVersion: TEST_TYPE_CONTRACT_VERSION };
|
|
66
87
|
var TEST_LANGUAGE = JSON.stringify(readLanguageBundle(process.cwd()));
|
|
67
88
|
var shared;
|
|
68
89
|
function loadTestKernel() {
|
|
69
90
|
return shared ??= load();
|
|
70
91
|
}
|
|
71
|
-
var
|
|
72
|
-
function loadTestSeedProgram() {
|
|
73
|
-
const run = (args) => execFileSync("orb", [...args], { cwd: process.cwd(), encoding: "utf8", maxBuffer: 512 * 1024 * 1024 });
|
|
74
|
-
const which = run(["behaviors", "which", "std/behaviors/std-mock-seed"]).trim().split("\n").pop() ?? "";
|
|
75
|
-
const match = WHICH_LINE.exec(which);
|
|
76
|
-
if (match === null) return Promise.reject(new Error(`std/behaviors/std-mock-seed is not installed: ${which}`));
|
|
77
|
-
return Promise.resolve(OrbitalSchemaSchema.parse(JSON.parse(run(["resolve", match[1]]))));
|
|
78
|
-
}
|
|
79
|
-
var KERNEL_ENGINE = { loadModule: () => loadTestKernel(), loadLanguage: () => Promise.resolve(TEST_LANGUAGE), loadSeedProgram: loadTestSeedProgram };
|
|
92
|
+
var KERNEL_ENGINE = { loadModule: () => loadTestKernel() };
|
|
80
93
|
var ENGINES = KERNEL_AVAILABLE ? [["kernel", KERNEL_ENGINE]] : [];
|
|
81
94
|
async function loadFreshClientKernel() {
|
|
82
95
|
const dir = process.env.ALMADAR_KERNEL_DIR;
|
|
@@ -86,29 +99,83 @@ async function loadFreshClientKernel() {
|
|
|
86
99
|
`${pathToFileURL(files.glue).href}?fresh=${Math.random()}`
|
|
87
100
|
);
|
|
88
101
|
glue.initSync({ module: readFileSync(files.wasm) });
|
|
102
|
+
glue.installLanguage(TEST_LANGUAGE);
|
|
89
103
|
installKernelEvaluator(glue);
|
|
104
|
+
installNativeLanguages();
|
|
90
105
|
return glue;
|
|
91
106
|
}
|
|
92
107
|
async function warmKernel() {
|
|
93
108
|
if (!KERNEL_AVAILABLE) return;
|
|
94
109
|
await KERNEL_ENGINE.loadModule();
|
|
95
|
-
await import('./kernel-client-
|
|
110
|
+
await import('./kernel-client-JW6OH5FX.js');
|
|
96
111
|
}
|
|
97
|
-
|
|
98
|
-
// src/test-support/stateless-kernel.ts
|
|
99
|
-
function statelessKernelTransport(schema, user = async () => void 0) {
|
|
112
|
+
function statelessKernelTransport(schema) {
|
|
100
113
|
let template;
|
|
101
114
|
return createInProcessTransport(async (orbital, request) => {
|
|
102
|
-
|
|
103
|
-
template ??= loadTestKernel().then((kernel) => openLocalKernel({ kernel, language: TEST_LANGUAGE, schema, persistence: nativeMemoryPersistence(kernel) }));
|
|
115
|
+
template ??= loadTestKernel().then((kernel) => openLocalKernel({ kernel, schema, persistence: nativeMemoryPersistence(kernel) }));
|
|
104
116
|
const engine = (await template).fork();
|
|
105
117
|
try {
|
|
106
|
-
engine.
|
|
107
|
-
return await (0, src_exports.evaluateOnKernel)({ engine, orbital }, request, viewer, request.locale);
|
|
118
|
+
return await evaluateOnKernel({ engine, orbital }, request, request.locale);
|
|
108
119
|
} finally {
|
|
109
120
|
engine.dispose();
|
|
110
121
|
}
|
|
111
122
|
}, { carriesCircuitState: true });
|
|
112
123
|
}
|
|
124
|
+
var lowered = /* @__PURE__ */ new Map();
|
|
125
|
+
var lockDir = join(tmpdir(), "almadar-client-program.lock");
|
|
126
|
+
function holderAlive() {
|
|
127
|
+
try {
|
|
128
|
+
process.kill(Number(readFileSync(join(lockDir, "pid"), "utf8")), 0);
|
|
129
|
+
return true;
|
|
130
|
+
} catch {
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
function compileExclusively(compile) {
|
|
135
|
+
const wait = new Int32Array(new SharedArrayBuffer(4));
|
|
136
|
+
for (; ; ) {
|
|
137
|
+
try {
|
|
138
|
+
mkdirSync(lockDir);
|
|
139
|
+
writeFileSync(join(lockDir, "pid"), String(process.pid));
|
|
140
|
+
break;
|
|
141
|
+
} catch (error) {
|
|
142
|
+
if (!(error instanceof Error) || !("code" in error) || error.code !== "EEXIST") throw error;
|
|
143
|
+
if (!holderAlive()) rmSync(lockDir, { recursive: true, force: true });
|
|
144
|
+
Atomics.wait(wait, 0, 0, 25);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
try {
|
|
148
|
+
return compile();
|
|
149
|
+
} finally {
|
|
150
|
+
rmSync(lockDir, { recursive: true, force: true });
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
function clientProgram(source, files = {}) {
|
|
154
|
+
const bin = process.env.ORB_BIN;
|
|
155
|
+
if (bin === void 0 || bin === "") throw new Error("clientProgram: set ORB_BIN to the installed orb binary that lowers the test programs");
|
|
156
|
+
const key = JSON.stringify([source, files]);
|
|
157
|
+
const known = lowered.get(key);
|
|
158
|
+
if (known !== void 0) return structuredClone(known);
|
|
159
|
+
const dir = mkdtempSync(join(tmpdir(), "client-program-"));
|
|
160
|
+
try {
|
|
161
|
+
const file = join(dir, "program.lolo");
|
|
162
|
+
writeFileSync(file, source);
|
|
163
|
+
const served = join(dir, "out/packages/client/public");
|
|
164
|
+
for (const [path, text] of Object.entries(files)) {
|
|
165
|
+
for (const target of [join(dir, path), join(served, path)]) {
|
|
166
|
+
mkdirSync(dirname(target), { recursive: true });
|
|
167
|
+
writeFileSync(target, text);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
const schema = compileExclusively(() => {
|
|
171
|
+
execFileSync(bin, ["compile", file, "-o", join(dir, "out"), "--mode", "client"], { cwd: dir, stdio: "pipe" });
|
|
172
|
+
return parseOrbitalSchema(JSON.parse(readFileSync(join(served, "program.client.orb"), "utf8")));
|
|
173
|
+
});
|
|
174
|
+
lowered.set(key, schema);
|
|
175
|
+
return structuredClone(schema);
|
|
176
|
+
} finally {
|
|
177
|
+
rmSync(dir, { recursive: true, force: true });
|
|
178
|
+
}
|
|
179
|
+
}
|
|
113
180
|
|
|
114
|
-
export { ENGINES, KERNEL_AVAILABLE, KERNEL_ENGINE, TEST_LANGUAGE, loadFreshClientKernel, loadTestKernel,
|
|
181
|
+
export { ENGINES, KERNEL_AVAILABLE, KERNEL_ENGINE, TEST_LANGUAGE, TEST_STAMP, TEST_TYPE_CONTRACT_VERSION, clientProgram, loadFreshClientKernel, loadTestKernel, statelessKernelTransport, stubKernelModule, warmKernel };
|
|
@@ -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-
|
|
4
|
-
import './EventBusProvider-
|
|
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-Br8zjvu9.js';
|
|
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
|
|
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
|
-
*
|
|
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
|
|
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`)
|
|
316
|
-
*
|
|
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
|
|
@@ -646,27 +643,17 @@ declare function DrawTextLayer(_props: DrawTextLayerProps): React__default.JSX.E
|
|
|
646
643
|
/**
|
|
647
644
|
* `draw-fx-layer` — the batched transient-effects pass in one descriptor.
|
|
648
645
|
*
|
|
649
|
-
*
|
|
650
|
-
*
|
|
651
|
-
*
|
|
652
|
-
*
|
|
653
|
-
* consumer-declared `FxPreset[]` table — never a kind→look table in here.
|
|
654
|
-
* Render priority per item: vector `art[type].idle` (draw-group) → sprite
|
|
655
|
-
* `sprites[type]` (draw-sprite) → a procedural seeded recipe
|
|
656
|
-
* (spark/ring/puff/streak draw-shapes); a `message` always adds a rising,
|
|
657
|
-
* fading draw-text. Expansion is PURE (descriptors → descriptors, routed
|
|
658
|
-
* through the normal paint dispatch); per-frame smoothness comes from the host
|
|
659
|
-
* paint clock against each item's `bornAt`, while the fx mechanic's ttl decay
|
|
660
|
-
* stays the authoritative removal clock. `space: "screen"` entries are skipped
|
|
661
|
-
* — the `fx-overlay` core molecule owns those. The React component renders
|
|
662
|
-
* `null` (a drawable is painted by the host, not the DOM).
|
|
646
|
+
* The descriptor and its paint clock go to the shared Rust projector through
|
|
647
|
+
* the installed kernel WASM module. `std-fx-particles` owns ttl and removal;
|
|
648
|
+
* the projector derives world-space art, sprites, shapes, and messages. The
|
|
649
|
+
* React component renders `null` because its canvas host paints the result.
|
|
663
650
|
*/
|
|
664
651
|
|
|
665
652
|
interface DrawFxLayerProps extends DrawableBase {
|
|
666
653
|
type: 'draw-fx-layer';
|
|
667
654
|
/** The live fx entries — the mechanic's `@entity.fx` list passed whole; `space: "screen"` entries are skipped (the overlay owns those). */
|
|
668
655
|
items: FxItem[];
|
|
669
|
-
/** Consumer-declared effect vocabulary — one row per fx `type` (look
|
|
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. */
|
|
670
657
|
presets?: FxPreset[];
|
|
671
658
|
/** Vector art per fx type (an asset-art map: type → anim-state → drawables); a type's `idle` state wins over sprites/procedural. */
|
|
672
659
|
art?: Record<string, Record<string, DrawableNode[]>>;
|
|
@@ -694,5 +681,120 @@ declare function DrawFxLayer(_props: DrawFxLayerProps): React__default.JSX.Eleme
|
|
|
694
681
|
/** Every drawable descriptor. The host's `children` are a `DrawableNode[]`. */
|
|
695
682
|
type DrawableNode = DrawSpriteProps | DrawShapeProps | DrawTextProps | DrawGroupProps | DrawMeshProps | DrawSkinnedMeshProps | DrawSpriteLayerProps | DrawShapeLayerProps | DrawTextLayerProps | DrawFxLayerProps;
|
|
696
683
|
|
|
697
|
-
|
|
698
|
-
|
|
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,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@almadar/shell-web",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"orbRelease": {
|
|
5
|
+
"severity": "normal"
|
|
6
|
+
},
|
|
4
7
|
"description": "Almadar TS shell web renderer pack: the browser host ports of the kernel (transports, stores, client kernel, http/oauth/os ports) and the React render substrate (components, hooks, providers, preview runtime, themes, Tailwind preset) the generated web app and the TS host program import.",
|
|
5
8
|
"license": "BUSL-1.1",
|
|
6
9
|
"type": "module",
|
|
@@ -61,11 +64,6 @@
|
|
|
61
64
|
"import": "./dist/lib/index.js",
|
|
62
65
|
"default": "./dist/lib/index.js"
|
|
63
66
|
},
|
|
64
|
-
"./three": {
|
|
65
|
-
"types": "./dist/three/index.d.ts",
|
|
66
|
-
"import": "./dist/three/index.js",
|
|
67
|
-
"default": "./dist/three/index.js"
|
|
68
|
-
},
|
|
69
67
|
"./avl": {
|
|
70
68
|
"types": "./dist/avl/index.d.ts",
|
|
71
69
|
"import": "./dist/avl/index.js",
|
|
@@ -115,6 +113,7 @@
|
|
|
115
113
|
"dist",
|
|
116
114
|
"src/core/locales",
|
|
117
115
|
"src/core/tokens/native-tokens.json",
|
|
116
|
+
"src/core/lib/band-shapes.json",
|
|
118
117
|
"themes",
|
|
119
118
|
"index.css",
|
|
120
119
|
"tailwind-preset.cjs",
|
|
@@ -130,11 +129,11 @@
|
|
|
130
129
|
"access": "public"
|
|
131
130
|
},
|
|
132
131
|
"dependencies": {
|
|
133
|
-
"@almadar/core": "^
|
|
134
|
-
"@almadar/kernel": "^
|
|
135
|
-
"@almadar/logger": "^
|
|
136
|
-
"@almadar/std": "^
|
|
137
|
-
"@almadar/syntax": "^1.
|
|
132
|
+
"@almadar/core": "^11.3.0",
|
|
133
|
+
"@almadar/kernel": "^19.0.1",
|
|
134
|
+
"@almadar/logger": "^2.3.0",
|
|
135
|
+
"@almadar/std": "^17.1.0",
|
|
136
|
+
"@almadar/syntax": "^2.1.0",
|
|
138
137
|
"@dnd-kit/core": "^6.3.1",
|
|
139
138
|
"@dnd-kit/sortable": "^10.0.0",
|
|
140
139
|
"@dnd-kit/utilities": "^3.2.2",
|
|
@@ -162,14 +161,11 @@
|
|
|
162
161
|
"remark-math": "^6.0.0",
|
|
163
162
|
"tailwind-merge": "^2.2.0",
|
|
164
163
|
"zod": "^4.6.7",
|
|
165
|
-
"@almadar/shell-browser": "^
|
|
166
|
-
"@almadar/shell-runtime": "^
|
|
164
|
+
"@almadar/shell-browser": "^1.1.0",
|
|
165
|
+
"@almadar/shell-runtime": "^1.1.0"
|
|
167
166
|
},
|
|
168
167
|
"devDependencies": {
|
|
169
|
-
"@almadar/eslint-plugin": "^
|
|
170
|
-
"@react-three/drei": "^10.7.7",
|
|
171
|
-
"@react-three/fiber": "^9.6.0",
|
|
172
|
-
"@react-three/postprocessing": "3.0.4",
|
|
168
|
+
"@almadar/eslint-plugin": "^3.0.0",
|
|
173
169
|
"@tanstack/react-query": "^5.0.0",
|
|
174
170
|
"@testing-library/jest-dom": "^6.4.0",
|
|
175
171
|
"@testing-library/react": "^14.2.0",
|
|
@@ -180,7 +176,6 @@
|
|
|
180
176
|
"@types/react": "^19.0.0",
|
|
181
177
|
"@types/react-dom": "^19.0.0",
|
|
182
178
|
"@types/react-syntax-highlighter": "^15.5.0",
|
|
183
|
-
"@types/three": "^0.160.0",
|
|
184
179
|
"@typescript-eslint/parser": "8.65.0",
|
|
185
180
|
"@typescript/native": "npm:typescript@^7.0.2",
|
|
186
181
|
"@vitejs/plugin-react": "^4.2.0",
|
|
@@ -194,14 +189,11 @@
|
|
|
194
189
|
"jsdom": "^24.0.0",
|
|
195
190
|
"katex": "^0.16.0",
|
|
196
191
|
"postcss": "^8.4.35",
|
|
197
|
-
"postprocessing": "6.39.0",
|
|
198
192
|
"react": "^19.0.0",
|
|
199
193
|
"react-compiler-runtime": "19.0.0-beta-af1b7da-20250417",
|
|
200
194
|
"react-dom": "^19.0.0",
|
|
201
195
|
"react-router-dom": "^7.18.2",
|
|
202
196
|
"tailwindcss": "^3.4.0",
|
|
203
|
-
"three": "^0.160.1",
|
|
204
|
-
"three-stdlib": "^2.35.6",
|
|
205
197
|
"tsup": "^9.0.0",
|
|
206
198
|
"tsx": "^4.7.0",
|
|
207
199
|
"turbo": "^2.8.17",
|
|
@@ -219,30 +211,14 @@
|
|
|
219
211
|
"node": ">=22.19.0"
|
|
220
212
|
},
|
|
221
213
|
"peerDependencies": {
|
|
222
|
-
"@react-three/drei": "^10.7.7",
|
|
223
|
-
"@react-three/fiber": "^9.0.0",
|
|
224
|
-
"@react-three/postprocessing": "^3.0.0",
|
|
225
214
|
"@tanstack/react-query": "^5.0.0",
|
|
226
215
|
"postcss": "^8.4.35",
|
|
227
216
|
"react": ">=18.0.0",
|
|
228
217
|
"react-dom": ">=18.0.0",
|
|
229
218
|
"react-router-dom": "^7.0.0",
|
|
230
|
-
"tailwindcss": "^3.4.0"
|
|
231
|
-
"three": "^0.160.0"
|
|
219
|
+
"tailwindcss": "^3.4.0"
|
|
232
220
|
},
|
|
233
221
|
"peerDependenciesMeta": {
|
|
234
|
-
"@react-three/drei": {
|
|
235
|
-
"optional": true
|
|
236
|
-
},
|
|
237
|
-
"@react-three/fiber": {
|
|
238
|
-
"optional": true
|
|
239
|
-
},
|
|
240
|
-
"@react-three/postprocessing": {
|
|
241
|
-
"optional": true
|
|
242
|
-
},
|
|
243
|
-
"three": {
|
|
244
|
-
"optional": true
|
|
245
|
-
},
|
|
246
222
|
"postcss": {
|
|
247
223
|
"optional": true
|
|
248
224
|
},
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"wave": "M0 60 C240 100 480 100 720 60 C960 20 1200 20 1440 60 V100 H0 Z",
|
|
3
|
+
"arc": "M0 100 Q720 0 1440 100 Z",
|
|
4
|
+
"tilt": "M0 100 L1440 0 V100 Z",
|
|
5
|
+
"step": "M0 100 V75 H360 V50 H720 V25 H1080 V0 H1440 V100 Z",
|
|
6
|
+
"scallop": "M0 100 V40 a60 40 0 0 1 120 0 a60 40 0 0 1 120 0 a60 40 0 0 1 120 0 a60 40 0 0 1 120 0 a60 40 0 0 1 120 0 a60 40 0 0 1 120 0 a60 40 0 0 1 120 0 a60 40 0 0 1 120 0 a60 40 0 0 1 120 0 a60 40 0 0 1 120 0 a60 40 0 0 1 120 0 a60 40 0 0 1 120 0 V100 Z"
|
|
7
|
+
}
|
package/src/core/locales/ar.json
CHANGED
|
@@ -109,6 +109,9 @@
|
|
|
109
109
|
"aria.closeToast": "إغلاق التنبيه",
|
|
110
110
|
"aria.closeAlert": "إغلاق التنبيه",
|
|
111
111
|
"aria.removeFilter": "إزالة الفلتر",
|
|
112
|
+
"aria.chart": "مخطط",
|
|
113
|
+
"aria.graph": "مخطط شبكي",
|
|
114
|
+
"aria.pageNavigation": "التنقل بين الصفحات",
|
|
112
115
|
"aria.closeDrawer": "إغلاق اللوحة",
|
|
113
116
|
"aria.closePanel": "إغلاق اللوحة",
|
|
114
117
|
"aria.dockPanel": "اللوحة الجانبية",
|
|
@@ -323,6 +326,15 @@
|
|
|
323
326
|
"docSearch.placeholder": "البحث في الوثائق...",
|
|
324
327
|
"stateMachine.loading": "جارٍ تحميل آلة الحالة…",
|
|
325
328
|
"stateMachine.noStateMachine": "لا توجد آلة حالة لعرضها",
|
|
329
|
+
"stateMachine.background": "يعمل في الخلفية",
|
|
330
|
+
"stateMachine.linked": "مدارات أخرى تتحدث معها هذه الصفحة",
|
|
331
|
+
"stateMachine.guarded": "محروس: يعمل فقط عندما يتحقق شرطه",
|
|
332
|
+
"stateMachine.selfEvents": "{{state}}: {{count}} أحداث تبقى في هذه الحالة",
|
|
333
|
+
"stateMachine.boxLabel": "{{trait}}: {{state}} ({{count}} حالات)",
|
|
334
|
+
"stateMachine.boxLabelIdle": "{{trait}} ({{count}} حالات)",
|
|
335
|
+
"stateMachine.wireLabel": "{{from}} يرسل {{event}} إلى {{to}}",
|
|
336
|
+
"stateMachine.expand": "افتح {{trait}} في مكانه",
|
|
337
|
+
"stateMachine.collapse": "أغلق {{trait}}",
|
|
326
338
|
"avl.trigger": "المُشغِّل",
|
|
327
339
|
"avl.guard": "الحارس",
|
|
328
340
|
"avl.effects": "التأثيرات",
|
|
@@ -340,6 +352,8 @@
|
|
|
340
352
|
"avl.noTraitData": "لا توجد بيانات سمة",
|
|
341
353
|
"avl.computingLayout": "جارٍ حساب التخطيط...",
|
|
342
354
|
"avl.noStateMachine": "لا توجد آلة حالات",
|
|
355
|
+
"avl.layoutFailed": "تعذّر تحميل تخطيط آلة الحالات.",
|
|
356
|
+
"avl.pendingSourceState": "تم تحديد مصدر الانتقال",
|
|
343
357
|
"avl.listensFor": "يستمع إلى {{event}}",
|
|
344
358
|
"avl.emits": "يُصدر {{event}}",
|
|
345
359
|
"avl.pageLayout": "تخطيط الصفحة",
|
|
@@ -906,6 +920,7 @@
|
|
|
906
920
|
"gridPicker.all": "الكل",
|
|
907
921
|
"gridPicker.moreRefine": "+{{count}} أخرى — دقّق بحثك",
|
|
908
922
|
"graphCanvas.noNodes": "لا توجد عقد لعرضها.",
|
|
923
|
+
"graphCanvas.selectedNode": "المحدد: {{label}}",
|
|
909
924
|
"codeBlock.noCode": "لا يوجد كود لعرضه.",
|
|
910
925
|
"codeBlock.region": "الشيفرة البرمجية",
|
|
911
926
|
"fab.action": "إجراء",
|
|
@@ -948,10 +963,6 @@
|
|
|
948
963
|
"videoEmbed.notFound": "لم يتم العثور على الفيديو أو أنه خاص",
|
|
949
964
|
"videoEmbed.notEmbeddable": "مالك الفيديو لا يسمح بتضمينه",
|
|
950
965
|
"videoEmbed.noVideo": "لم يتم اختيار فيديو",
|
|
951
|
-
"themeToggle.switchToLight": "التبديل إلى الوضع الفاتح",
|
|
952
|
-
"themeToggle.switchToDark": "التبديل إلى الوضع الداكن",
|
|
953
|
-
"themeToggle.light": "فاتح",
|
|
954
|
-
"themeToggle.dark": "داكن",
|
|
955
966
|
"avatar.alt": "الصورة الرمزية",
|
|
956
967
|
"avatar.status": "الحالة: {{status}}",
|
|
957
968
|
"avatar.status.online": "متصل",
|
|
@@ -1259,5 +1270,7 @@
|
|
|
1259
1270
|
"debug.replayForward": "الخطوة التالية",
|
|
1260
1271
|
"debug.replayPlay": "تشغيل",
|
|
1261
1272
|
"debug.replayPause": "إيقاف مؤقت",
|
|
1262
|
-
"debug.replayStep": "{{step}} / {{total}}"
|
|
1273
|
+
"debug.replayStep": "{{step}} / {{total}}",
|
|
1274
|
+
"stateMachine.inspect": "فحص: اختر سمة من الصفحة",
|
|
1275
|
+
"stateMachine.inspectHint": "انقر جزءًا من الصفحة · Esc للإيقاف"
|
|
1263
1276
|
}
|