@aura3d/editor-runtime 1.0.6
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/README.md +20 -0
- package/dist/Command.d.ts +11 -0
- package/dist/Command.d.ts.map +1 -0
- package/dist/Command.js +2 -0
- package/dist/Command.js.map +1 -0
- package/dist/CommandHistory.d.ts +20 -0
- package/dist/CommandHistory.d.ts.map +1 -0
- package/dist/CommandHistory.js +124 -0
- package/dist/CommandHistory.js.map +1 -0
- package/dist/DiagnosticsOverlayModel.d.ts +30 -0
- package/dist/DiagnosticsOverlayModel.d.ts.map +1 -0
- package/dist/DiagnosticsOverlayModel.js +57 -0
- package/dist/DiagnosticsOverlayModel.js.map +1 -0
- package/dist/EditorPluginHost.d.ts +46 -0
- package/dist/EditorPluginHost.d.ts.map +1 -0
- package/dist/EditorPluginHost.js +57 -0
- package/dist/EditorPluginHost.js.map +1 -0
- package/dist/EditorRuntime.d.ts +95 -0
- package/dist/EditorRuntime.d.ts.map +1 -0
- package/dist/EditorRuntime.js +277 -0
- package/dist/EditorRuntime.js.map +1 -0
- package/dist/EditorStateModel.d.ts +93 -0
- package/dist/EditorStateModel.d.ts.map +1 -0
- package/dist/EditorStateModel.js +251 -0
- package/dist/EditorStateModel.js.map +1 -0
- package/dist/Gizmo.d.ts +43 -0
- package/dist/Gizmo.d.ts.map +1 -0
- package/dist/Gizmo.js +60 -0
- package/dist/Gizmo.js.map +1 -0
- package/dist/HierarchyModel.d.ts +21 -0
- package/dist/HierarchyModel.d.ts.map +1 -0
- package/dist/HierarchyModel.js +32 -0
- package/dist/HierarchyModel.js.map +1 -0
- package/dist/InspectorModel.d.ts +16 -0
- package/dist/InspectorModel.d.ts.map +1 -0
- package/dist/InspectorModel.js +53 -0
- package/dist/InspectorModel.js.map +1 -0
- package/dist/LocalizationAccessibilityFixtures.d.ts +70 -0
- package/dist/LocalizationAccessibilityFixtures.d.ts.map +1 -0
- package/dist/LocalizationAccessibilityFixtures.js +275 -0
- package/dist/LocalizationAccessibilityFixtures.js.map +1 -0
- package/dist/MaterialVariantWorkflow.d.ts +19 -0
- package/dist/MaterialVariantWorkflow.d.ts.map +1 -0
- package/dist/MaterialVariantWorkflow.js +82 -0
- package/dist/MaterialVariantWorkflow.js.map +1 -0
- package/dist/PickingService.d.ts +58 -0
- package/dist/PickingService.d.ts.map +1 -0
- package/dist/PickingService.js +119 -0
- package/dist/PickingService.js.map +1 -0
- package/dist/PlayModeBridge.d.ts +14 -0
- package/dist/PlayModeBridge.d.ts.map +1 -0
- package/dist/PlayModeBridge.js +23 -0
- package/dist/PlayModeBridge.js.map +1 -0
- package/dist/PrefabRegistry.d.ts +41 -0
- package/dist/PrefabRegistry.d.ts.map +1 -0
- package/dist/PrefabRegistry.js +119 -0
- package/dist/PrefabRegistry.js.map +1 -0
- package/dist/ProjectSerializer.d.ts +82 -0
- package/dist/ProjectSerializer.d.ts.map +1 -0
- package/dist/ProjectSerializer.js +131 -0
- package/dist/ProjectSerializer.js.map +1 -0
- package/dist/RotateGizmo.d.ts +5 -0
- package/dist/RotateGizmo.d.ts.map +1 -0
- package/dist/RotateGizmo.js +37 -0
- package/dist/RotateGizmo.js.map +1 -0
- package/dist/ScaleGizmo.d.ts +5 -0
- package/dist/ScaleGizmo.d.ts.map +1 -0
- package/dist/ScaleGizmo.js +42 -0
- package/dist/ScaleGizmo.js.map +1 -0
- package/dist/Selection.d.ts +20 -0
- package/dist/Selection.d.ts.map +1 -0
- package/dist/Selection.js +46 -0
- package/dist/Selection.js.map +1 -0
- package/dist/ShaderGraphModel.d.ts +69 -0
- package/dist/ShaderGraphModel.d.ts.map +1 -0
- package/dist/ShaderGraphModel.js +172 -0
- package/dist/ShaderGraphModel.js.map +1 -0
- package/dist/StaticExportRuntime.d.ts +13 -0
- package/dist/StaticExportRuntime.d.ts.map +1 -0
- package/dist/StaticExportRuntime.js +307 -0
- package/dist/StaticExportRuntime.js.map +1 -0
- package/dist/TimelineModel.d.ts +175 -0
- package/dist/TimelineModel.d.ts.map +1 -0
- package/dist/TimelineModel.js +335 -0
- package/dist/TimelineModel.js.map +1 -0
- package/dist/TimelineRuntimeBridge.d.ts +98 -0
- package/dist/TimelineRuntimeBridge.d.ts.map +1 -0
- package/dist/TimelineRuntimeBridge.js +186 -0
- package/dist/TimelineRuntimeBridge.js.map +1 -0
- package/dist/TranslateGizmo.d.ts +5 -0
- package/dist/TranslateGizmo.d.ts.map +1 -0
- package/dist/TranslateGizmo.js +41 -0
- package/dist/TranslateGizmo.js.map +1 -0
- package/dist/commands/CreateNodeCommand.d.ts +14 -0
- package/dist/commands/CreateNodeCommand.d.ts.map +1 -0
- package/dist/commands/CreateNodeCommand.js +16 -0
- package/dist/commands/CreateNodeCommand.js.map +1 -0
- package/dist/commands/DeleteNodeCommand.d.ts +13 -0
- package/dist/commands/DeleteNodeCommand.d.ts.map +1 -0
- package/dist/commands/DeleteNodeCommand.js +55 -0
- package/dist/commands/DeleteNodeCommand.js.map +1 -0
- package/dist/commands/ReparentNodeCommand.d.ts +24 -0
- package/dist/commands/ReparentNodeCommand.d.ts.map +1 -0
- package/dist/commands/ReparentNodeCommand.js +39 -0
- package/dist/commands/ReparentNodeCommand.js.map +1 -0
- package/dist/commands/SetPropertyCommand.d.ts +14 -0
- package/dist/commands/SetPropertyCommand.d.ts.map +1 -0
- package/dist/commands/SetPropertyCommand.js +43 -0
- package/dist/commands/SetPropertyCommand.js.map +1 -0
- package/dist/commands/TransformCommand.d.ts +42 -0
- package/dist/commands/TransformCommand.d.ts.map +1 -0
- package/dist/commands/TransformCommand.js +72 -0
- package/dist/commands/TransformCommand.js.map +1 -0
- package/dist/index.d.ts +49 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/package.json +17 -0
- package/src/Command.ts +11 -0
- package/src/CommandHistory.ts +136 -0
- package/src/DiagnosticsOverlayModel.ts +85 -0
- package/src/EditorPluginHost.ts +106 -0
- package/src/EditorRuntime.ts +349 -0
- package/src/EditorStateModel.ts +336 -0
- package/src/Gizmo.ts +101 -0
- package/src/HierarchyModel.ts +57 -0
- package/src/InspectorModel.ts +71 -0
- package/src/LocalizationAccessibilityFixtures.ts +368 -0
- package/src/MaterialVariantWorkflow.ts +101 -0
- package/src/PickingService.ts +174 -0
- package/src/PlayModeBridge.ts +27 -0
- package/src/PrefabRegistry.ts +164 -0
- package/src/ProjectSerializer.ts +200 -0
- package/src/RotateGizmo.ts +35 -0
- package/src/ScaleGizmo.ts +40 -0
- package/src/Selection.ts +63 -0
- package/src/ShaderGraphModel.ts +254 -0
- package/src/StaticExportRuntime.ts +322 -0
- package/src/TimelineModel.ts +466 -0
- package/src/TimelineRuntimeBridge.ts +280 -0
- package/src/TranslateGizmo.ts +39 -0
- package/src/commands/CreateNodeCommand.ts +23 -0
- package/src/commands/DeleteNodeCommand.ts +74 -0
- package/src/commands/ReparentNodeCommand.ts +55 -0
- package/src/commands/SetPropertyCommand.ts +47 -0
- package/src/commands/TransformCommand.ts +107 -0
- package/src/index.ts +85 -0
- package/tests/editor-runtime.test.ts +597 -0
- package/tsconfig.json +7 -0
package/dist/Gizmo.d.ts
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { Ray } from "@aura3d/math";
|
|
2
|
+
import type { CommandHistory } from "./CommandHistory";
|
|
3
|
+
import type { TransformTarget } from "./commands/TransformCommand";
|
|
4
|
+
export type GizmoAxis = "x" | "y" | "z" | "uniform";
|
|
5
|
+
export type GizmoPlaneAxis = "xy" | "xz" | "yz";
|
|
6
|
+
export type GizmoHandle = GizmoAxis | GizmoPlaneAxis;
|
|
7
|
+
export type GizmoSpaceMode = "world" | "local";
|
|
8
|
+
export type GizmoPivotMode = "center" | "active" | "individual";
|
|
9
|
+
export interface GizmoSettings {
|
|
10
|
+
readonly snapEnabled: boolean;
|
|
11
|
+
readonly positionSnap: number;
|
|
12
|
+
readonly rotationSnapDegrees: number;
|
|
13
|
+
readonly scaleSnap: number;
|
|
14
|
+
readonly spaceMode: GizmoSpaceMode;
|
|
15
|
+
readonly pivotMode: GizmoPivotMode;
|
|
16
|
+
}
|
|
17
|
+
export declare const DEFAULT_GIZMO_SETTINGS: GizmoSettings;
|
|
18
|
+
export interface GizmoHit {
|
|
19
|
+
readonly axis: GizmoHandle;
|
|
20
|
+
readonly distance: number;
|
|
21
|
+
}
|
|
22
|
+
export interface GizmoDrag {
|
|
23
|
+
readonly axis: GizmoHandle;
|
|
24
|
+
readonly delta: number;
|
|
25
|
+
}
|
|
26
|
+
export declare abstract class Gizmo {
|
|
27
|
+
protected readonly history: CommandHistory;
|
|
28
|
+
enabled: boolean;
|
|
29
|
+
target?: TransformTarget;
|
|
30
|
+
protected settings: GizmoSettings;
|
|
31
|
+
constructor(history: CommandHistory, settings?: Partial<GizmoSettings>);
|
|
32
|
+
setTarget(target: TransformTarget | undefined): void;
|
|
33
|
+
configure(settings: Partial<GizmoSettings>): void;
|
|
34
|
+
snapshotSettings(): GizmoSettings;
|
|
35
|
+
hitTest(_ray: Ray): GizmoHit | undefined;
|
|
36
|
+
abstract drag(input: GizmoDrag): Promise<void>;
|
|
37
|
+
dispose(): void;
|
|
38
|
+
protected snapPositionDelta(value: number): number;
|
|
39
|
+
protected snapRotationDelta(radians: number): number;
|
|
40
|
+
protected snapScaleFactor(value: number): number;
|
|
41
|
+
}
|
|
42
|
+
export declare function normalizeGizmoSettings(settings?: Partial<GizmoSettings>): GizmoSettings;
|
|
43
|
+
//# sourceMappingURL=Gizmo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Gizmo.d.ts","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/Gizmo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAEnE,MAAM,MAAM,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,SAAS,CAAC;AACpD,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAChD,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,cAAc,CAAC;AACrD,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,OAAO,CAAC;AAC/C,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,QAAQ,GAAG,YAAY,CAAC;AAEhE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;CACpC;AAED,eAAO,MAAM,sBAAsB,EAAE,aAOpC,CAAC;AAEF,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,8BAAsB,KAAK;IAKb,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,cAAc;IAJtD,OAAO,UAAQ;IACf,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,SAAS,CAAC,QAAQ,EAAE,aAAa,CAA0B;gBAE5B,OAAO,EAAE,cAAc,EAAE,QAAQ,GAAE,OAAO,CAAC,aAAa,CAAM;IAI7F,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,SAAS,GAAG,IAAI;IAIpD,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI;IAIjD,gBAAgB,IAAI,aAAa;IAIjC,OAAO,CAAC,IAAI,EAAE,GAAG,GAAG,QAAQ,GAAG,SAAS;IAIxC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAE9C,OAAO,IAAI,IAAI;IAKf,SAAS,CAAC,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAIlD,SAAS,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAIpD,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;CAGjD;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,GAAE,OAAO,CAAC,aAAa,CAAM,GAAG,aAAa,CAS3F"}
|
package/dist/Gizmo.js
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
export const DEFAULT_GIZMO_SETTINGS = {
|
|
2
|
+
snapEnabled: false,
|
|
3
|
+
positionSnap: 1,
|
|
4
|
+
rotationSnapDegrees: 15,
|
|
5
|
+
scaleSnap: 0.1,
|
|
6
|
+
spaceMode: "world",
|
|
7
|
+
pivotMode: "center"
|
|
8
|
+
};
|
|
9
|
+
export class Gizmo {
|
|
10
|
+
history;
|
|
11
|
+
enabled = true;
|
|
12
|
+
target;
|
|
13
|
+
settings = DEFAULT_GIZMO_SETTINGS;
|
|
14
|
+
constructor(history, settings = {}) {
|
|
15
|
+
this.history = history;
|
|
16
|
+
this.configure(settings);
|
|
17
|
+
}
|
|
18
|
+
setTarget(target) {
|
|
19
|
+
this.target = target;
|
|
20
|
+
}
|
|
21
|
+
configure(settings) {
|
|
22
|
+
this.settings = normalizeGizmoSettings({ ...this.settings, ...settings });
|
|
23
|
+
}
|
|
24
|
+
snapshotSettings() {
|
|
25
|
+
return this.settings;
|
|
26
|
+
}
|
|
27
|
+
hitTest(_ray) {
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
dispose() {
|
|
31
|
+
this.enabled = false;
|
|
32
|
+
this.target = undefined;
|
|
33
|
+
}
|
|
34
|
+
snapPositionDelta(value) {
|
|
35
|
+
return this.settings.snapEnabled ? snap(value, this.settings.positionSnap) : value;
|
|
36
|
+
}
|
|
37
|
+
snapRotationDelta(radians) {
|
|
38
|
+
return this.settings.snapEnabled ? snap(radians, this.settings.rotationSnapDegrees * Math.PI / 180) : radians;
|
|
39
|
+
}
|
|
40
|
+
snapScaleFactor(value) {
|
|
41
|
+
return this.settings.snapEnabled ? snap(value, this.settings.scaleSnap) : value;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
export function normalizeGizmoSettings(settings = {}) {
|
|
45
|
+
return {
|
|
46
|
+
snapEnabled: settings.snapEnabled ?? DEFAULT_GIZMO_SETTINGS.snapEnabled,
|
|
47
|
+
positionSnap: positive(settings.positionSnap, DEFAULT_GIZMO_SETTINGS.positionSnap),
|
|
48
|
+
rotationSnapDegrees: positive(settings.rotationSnapDegrees, DEFAULT_GIZMO_SETTINGS.rotationSnapDegrees),
|
|
49
|
+
scaleSnap: positive(settings.scaleSnap, DEFAULT_GIZMO_SETTINGS.scaleSnap),
|
|
50
|
+
spaceMode: settings.spaceMode ?? DEFAULT_GIZMO_SETTINGS.spaceMode,
|
|
51
|
+
pivotMode: settings.pivotMode ?? DEFAULT_GIZMO_SETTINGS.pivotMode
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
function positive(value, fallback) {
|
|
55
|
+
return Number.isFinite(value) && Number(value) > 0 ? Number(value) : fallback;
|
|
56
|
+
}
|
|
57
|
+
function snap(value, increment) {
|
|
58
|
+
return Math.round(value / increment) * increment;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=Gizmo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Gizmo.js","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/Gizmo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { SelectionId } from "./Selection";
|
|
2
|
+
export interface HierarchyLikeNode {
|
|
3
|
+
readonly id?: SelectionId;
|
|
4
|
+
readonly name?: string;
|
|
5
|
+
readonly visible?: boolean;
|
|
6
|
+
readonly children?: readonly HierarchyLikeNode[];
|
|
7
|
+
}
|
|
8
|
+
export interface HierarchyNodeDescriptor {
|
|
9
|
+
readonly id: SelectionId;
|
|
10
|
+
readonly name: string;
|
|
11
|
+
readonly visible: boolean;
|
|
12
|
+
readonly selected: boolean;
|
|
13
|
+
readonly depth: number;
|
|
14
|
+
readonly childCount: number;
|
|
15
|
+
readonly children: readonly HierarchyNodeDescriptor[];
|
|
16
|
+
}
|
|
17
|
+
export declare class HierarchyModel {
|
|
18
|
+
describe(root: HierarchyLikeNode, selectedIds?: ReadonlySet<SelectionId>): HierarchyNodeDescriptor;
|
|
19
|
+
flatten(root: HierarchyLikeNode, selectedIds?: ReadonlySet<SelectionId>): readonly HierarchyNodeDescriptor[];
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=HierarchyModel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HierarchyModel.d.ts","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/HierarchyModel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAC;CAClD;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,EAAE,EAAE,WAAW,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,SAAS,uBAAuB,EAAE,CAAC;CACvD;AAED,qBAAa,cAAc;IACzB,QAAQ,CAAC,IAAI,EAAE,iBAAiB,EAAE,WAAW,GAAE,WAAW,CAAC,WAAW,CAAa,GAAG,uBAAuB;IAI7G,OAAO,CAAC,IAAI,EAAE,iBAAiB,EAAE,WAAW,GAAE,WAAW,CAAC,WAAW,CAAa,GAAG,SAAS,uBAAuB,EAAE;CAWxH"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export class HierarchyModel {
|
|
2
|
+
describe(root, selectedIds = new Set()) {
|
|
3
|
+
return describeNode(root, selectedIds, 0, "root");
|
|
4
|
+
}
|
|
5
|
+
flatten(root, selectedIds = new Set()) {
|
|
6
|
+
const output = [];
|
|
7
|
+
const visit = (node) => {
|
|
8
|
+
output.push(node);
|
|
9
|
+
for (const child of node.children) {
|
|
10
|
+
visit(child);
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
visit(this.describe(root, selectedIds));
|
|
14
|
+
return output;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
function describeNode(node, selectedIds, depth, fallbackId) {
|
|
18
|
+
const id = node.id ?? fallbackId;
|
|
19
|
+
const name = node.name ?? String(id);
|
|
20
|
+
const visible = node.visible ?? true;
|
|
21
|
+
const children = (node.children ?? []).map((child, index) => describeNode(child, selectedIds, depth + 1, `${id}:${index}`));
|
|
22
|
+
return {
|
|
23
|
+
id,
|
|
24
|
+
name,
|
|
25
|
+
visible,
|
|
26
|
+
selected: selectedIds.has(id),
|
|
27
|
+
depth,
|
|
28
|
+
childCount: children.length,
|
|
29
|
+
children
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=HierarchyModel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HierarchyModel.js","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/HierarchyModel.ts"],"names":[],"mappings":"AAmBA,MAAM,OAAO,cAAc;IACzB,QAAQ,CAAC,IAAuB,EAAE,cAAwC,IAAI,GAAG,EAAE;QACjF,OAAO,YAAY,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,CAAC,IAAuB,EAAE,cAAwC,IAAI,GAAG,EAAE;QAChF,MAAM,MAAM,GAA8B,EAAE,CAAC;QAC7C,MAAM,KAAK,GAAG,CAAC,IAA6B,EAAQ,EAAE;YACpD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClC,KAAK,CAAC,KAAK,CAAC,CAAC;YACf,CAAC;QACH,CAAC,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;QACxC,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAED,SAAS,YAAY,CACnB,IAAuB,EACvB,WAAqC,EACrC,KAAa,EACb,UAAuB;IAEvB,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,UAAU,CAAC;IACjC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC;IACrC,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC;IAC5H,OAAO;QACL,EAAE;QACF,IAAI;QACJ,OAAO;QACP,QAAQ,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7B,KAAK;QACL,UAAU,EAAE,QAAQ,CAAC,MAAM;QAC3B,QAAQ;KACT,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { SetPropertyCommand } from "./commands/SetPropertyCommand";
|
|
2
|
+
export type InspectorEditableValue = number | string | boolean;
|
|
3
|
+
export interface InspectorProperty {
|
|
4
|
+
readonly path: readonly string[];
|
|
5
|
+
readonly type: "number" | "string" | "boolean" | "object";
|
|
6
|
+
readonly value: unknown;
|
|
7
|
+
readonly editable: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare class InspectorModel {
|
|
10
|
+
describe(target: object): readonly InspectorProperty[];
|
|
11
|
+
createSetPropertyCommand<T extends object>(target: T, path: readonly string[], value: InspectorEditableValue): SetPropertyCommand<T>;
|
|
12
|
+
private describeObject;
|
|
13
|
+
private propertyType;
|
|
14
|
+
private assertValueMatchesProperty;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=InspectorModel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InspectorModel.d.ts","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/InspectorModel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE,MAAM,MAAM,sBAAsB,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE/D,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC1D,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED,qBAAa,cAAc;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,iBAAiB,EAAE;IAItD,wBAAwB,CAAC,CAAC,SAAS,MAAM,EACvC,MAAM,EAAE,CAAC,EACT,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,KAAK,EAAE,sBAAsB,GAC5B,kBAAkB,CAAC,CAAC,CAAC;IAYxB,OAAO,CAAC,cAAc;IAkBtB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,0BAA0B;CAQnC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { SetPropertyCommand } from "./commands/SetPropertyCommand.js";
|
|
2
|
+
export class InspectorModel {
|
|
3
|
+
describe(target) {
|
|
4
|
+
return this.describeObject(target);
|
|
5
|
+
}
|
|
6
|
+
createSetPropertyCommand(target, path, value) {
|
|
7
|
+
const property = this.describe(target).find((descriptor) => samePath(descriptor.path, path));
|
|
8
|
+
if (!property) {
|
|
9
|
+
throw new Error(`Inspector property path does not exist: ${path.join(".")}`);
|
|
10
|
+
}
|
|
11
|
+
if (!property.editable) {
|
|
12
|
+
throw new Error(`Inspector property is not editable: ${path.join(".")}`);
|
|
13
|
+
}
|
|
14
|
+
this.assertValueMatchesProperty(property, value);
|
|
15
|
+
return new SetPropertyCommand(target, path, value);
|
|
16
|
+
}
|
|
17
|
+
describeObject(target, prefix = []) {
|
|
18
|
+
const properties = [];
|
|
19
|
+
for (const [key, value] of Object.entries(target)) {
|
|
20
|
+
const path = [...prefix, key];
|
|
21
|
+
const type = this.propertyType(value);
|
|
22
|
+
properties.push({
|
|
23
|
+
path,
|
|
24
|
+
type,
|
|
25
|
+
value,
|
|
26
|
+
editable: type !== "object"
|
|
27
|
+
});
|
|
28
|
+
if (type === "object" && typeof value === "object" && value !== null && !Array.isArray(value)) {
|
|
29
|
+
properties.push(...this.describeObject(value, path));
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return properties;
|
|
33
|
+
}
|
|
34
|
+
propertyType(value) {
|
|
35
|
+
const valueType = typeof value;
|
|
36
|
+
if (valueType === "number" || valueType === "string" || valueType === "boolean") {
|
|
37
|
+
return valueType;
|
|
38
|
+
}
|
|
39
|
+
return "object";
|
|
40
|
+
}
|
|
41
|
+
assertValueMatchesProperty(property, value) {
|
|
42
|
+
if (property.type === "number" && !Number.isFinite(value)) {
|
|
43
|
+
throw new Error(`Inspector property ${property.path.join(".")} expected a finite number.`);
|
|
44
|
+
}
|
|
45
|
+
if (typeof value !== property.type) {
|
|
46
|
+
throw new Error(`Inspector property ${property.path.join(".")} expected ${property.type}, got ${typeof value}.`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function samePath(left, right) {
|
|
51
|
+
return left.length === right.length && left.every((segment, index) => segment === right[index]);
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=InspectorModel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InspectorModel.js","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/InspectorModel.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
export type EditorLocaleDirection = "ltr" | "rtl";
|
|
2
|
+
export type EditorPluralCategory = "zero" | "one" | "two" | "few" | "many" | "other";
|
|
3
|
+
export type EditorAccessibilityRole = "button" | "navigation" | "slider" | "textbox" | "status" | "dialog";
|
|
4
|
+
export interface EditorLocaleDescriptor {
|
|
5
|
+
readonly code: string;
|
|
6
|
+
readonly displayName: string;
|
|
7
|
+
readonly direction: EditorLocaleDirection;
|
|
8
|
+
readonly currencySymbol: string;
|
|
9
|
+
readonly decimalSeparator: string;
|
|
10
|
+
readonly thousandsSeparator: string;
|
|
11
|
+
readonly currencyPosition: "before" | "after";
|
|
12
|
+
}
|
|
13
|
+
export interface EditorLocalizedStringSample {
|
|
14
|
+
readonly locale: string;
|
|
15
|
+
readonly direction: EditorLocaleDirection;
|
|
16
|
+
readonly title: string;
|
|
17
|
+
readonly assetCount: string;
|
|
18
|
+
readonly fallbackTitle: string;
|
|
19
|
+
readonly missingKey: string;
|
|
20
|
+
readonly formattedNumber: string;
|
|
21
|
+
readonly formattedCurrency: string;
|
|
22
|
+
readonly pluralCategory: EditorPluralCategory;
|
|
23
|
+
}
|
|
24
|
+
export interface EditorAccessibilityElementSample {
|
|
25
|
+
readonly id: string;
|
|
26
|
+
readonly role: EditorAccessibilityRole;
|
|
27
|
+
readonly label: string;
|
|
28
|
+
readonly tabIndex: number;
|
|
29
|
+
readonly focusable: boolean;
|
|
30
|
+
readonly disabled?: boolean;
|
|
31
|
+
readonly ariaLive?: "polite" | "assertive";
|
|
32
|
+
readonly contrastRatio: number;
|
|
33
|
+
readonly contrastPassesAA: boolean;
|
|
34
|
+
}
|
|
35
|
+
export interface EditorLocalizationAccessibilityFixture {
|
|
36
|
+
readonly source: "origin-master-localization-ui-accessibility-adapted";
|
|
37
|
+
readonly sourceFiles: readonly string[];
|
|
38
|
+
readonly localeCount: number;
|
|
39
|
+
readonly rtlLocaleCount: number;
|
|
40
|
+
readonly tableKeyCount: number;
|
|
41
|
+
readonly jsonLoaderValidated: boolean;
|
|
42
|
+
readonly csvLoaderValidated: boolean;
|
|
43
|
+
readonly hotSwapLocale: {
|
|
44
|
+
readonly from: string;
|
|
45
|
+
readonly to: string;
|
|
46
|
+
readonly directionChanged: boolean;
|
|
47
|
+
readonly listenerNotifications: readonly string[];
|
|
48
|
+
};
|
|
49
|
+
readonly samples: readonly EditorLocalizedStringSample[];
|
|
50
|
+
readonly missingKeys: readonly string[];
|
|
51
|
+
readonly accessibility: {
|
|
52
|
+
readonly elementCount: number;
|
|
53
|
+
readonly labelledControls: number;
|
|
54
|
+
readonly focusOrder: readonly string[];
|
|
55
|
+
readonly focusWalk: readonly string[];
|
|
56
|
+
readonly liveRegionAnnouncements: readonly string[];
|
|
57
|
+
readonly highContrastMode: boolean;
|
|
58
|
+
readonly minContrastRatio: number;
|
|
59
|
+
readonly aaContrastPasses: boolean;
|
|
60
|
+
};
|
|
61
|
+
readonly blockedClaims: readonly string[];
|
|
62
|
+
readonly claimBoundary: string;
|
|
63
|
+
readonly hash: string;
|
|
64
|
+
}
|
|
65
|
+
export declare function sampleLocalizationAccessibilityFixture(options?: {
|
|
66
|
+
readonly assetCount?: number;
|
|
67
|
+
readonly hotSwapFrom?: string;
|
|
68
|
+
readonly hotSwapTo?: string;
|
|
69
|
+
}): EditorLocalizationAccessibilityFixture;
|
|
70
|
+
//# sourceMappingURL=LocalizationAccessibilityFixtures.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LocalizationAccessibilityFixtures.d.ts","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/LocalizationAccessibilityFixtures.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
const sourceFiles = [
|
|
2
|
+
"origin/master:src/localization/LocalizationManager.ts",
|
|
3
|
+
"origin/master:src/localization/StringTable.ts",
|
|
4
|
+
"origin/master:src/localization/Locale.ts",
|
|
5
|
+
"origin/master:src/localization/Pluralization.ts",
|
|
6
|
+
"origin/master:src/localization/loaders/JSONLocaleLoader.ts",
|
|
7
|
+
"origin/master:src/localization/loaders/CSVLocaleLoader.ts",
|
|
8
|
+
"origin/master:src/ui/UIAccessibility.ts"
|
|
9
|
+
];
|
|
10
|
+
const blockedClaims = [
|
|
11
|
+
"full localization pipeline",
|
|
12
|
+
"ICU MessageFormat parity",
|
|
13
|
+
"bidirectional text shaping parity",
|
|
14
|
+
"screen-reader certification",
|
|
15
|
+
"WCAG conformance certification",
|
|
16
|
+
"Unity UI Toolkit parity",
|
|
17
|
+
"Unreal UMG parity"
|
|
18
|
+
];
|
|
19
|
+
const locales = [
|
|
20
|
+
{
|
|
21
|
+
code: "en-US",
|
|
22
|
+
displayName: "English (United States)",
|
|
23
|
+
direction: "ltr",
|
|
24
|
+
currencySymbol: "$",
|
|
25
|
+
decimalSeparator: ".",
|
|
26
|
+
thousandsSeparator: ",",
|
|
27
|
+
currencyPosition: "before"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
code: "es-ES",
|
|
31
|
+
displayName: "Spanish (Spain)",
|
|
32
|
+
direction: "ltr",
|
|
33
|
+
currencySymbol: "EUR",
|
|
34
|
+
decimalSeparator: ",",
|
|
35
|
+
thousandsSeparator: ".",
|
|
36
|
+
currencyPosition: "after"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
code: "ar-SA",
|
|
40
|
+
displayName: "Arabic (Saudi Arabia)",
|
|
41
|
+
direction: "rtl",
|
|
42
|
+
currencySymbol: "SAR",
|
|
43
|
+
decimalSeparator: ".",
|
|
44
|
+
thousandsSeparator: ",",
|
|
45
|
+
currencyPosition: "after"
|
|
46
|
+
}
|
|
47
|
+
];
|
|
48
|
+
const stringTables = {
|
|
49
|
+
"en-US": {
|
|
50
|
+
"editor.title": "Aura3D Editor",
|
|
51
|
+
"assets.count.one": "{count} imported asset",
|
|
52
|
+
"assets.count.other": "{count} imported assets",
|
|
53
|
+
"status.saved": "Saved",
|
|
54
|
+
"panel.inspector": "Inspector"
|
|
55
|
+
},
|
|
56
|
+
"es-ES": {
|
|
57
|
+
"editor.title": "Editor Aura3D",
|
|
58
|
+
"assets.count.one": "{count} recurso importado",
|
|
59
|
+
"assets.count.other": "{count} recursos importados",
|
|
60
|
+
"status.saved": "Guardado"
|
|
61
|
+
},
|
|
62
|
+
"ar-SA": {
|
|
63
|
+
"editor.title": "Aura3D RTL Editor",
|
|
64
|
+
"assets.count.zero": "no imported assets",
|
|
65
|
+
"assets.count.one": "{count} imported asset",
|
|
66
|
+
"assets.count.two": "{count} imported assets",
|
|
67
|
+
"assets.count.few": "{count} imported assets",
|
|
68
|
+
"assets.count.many": "{count} imported assets",
|
|
69
|
+
"assets.count.other": "{count} imported assets",
|
|
70
|
+
"status.saved": "Saved RTL"
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
const accessibilityElements = [
|
|
74
|
+
createAccessibilityElement("command-menu", "navigation", "Command menu", 1, "#f7fafc", "#101820"),
|
|
75
|
+
createAccessibilityElement("viewport", "status", "Editor WebGL viewport", 2, "#f5f7fb", "#07111c", "polite"),
|
|
76
|
+
createAccessibilityElement("inspector-name", "textbox", "Selected node name", 3, "#111827", "#f9fafb"),
|
|
77
|
+
createAccessibilityElement("timeline-scrub", "slider", "Timeline scrub time", 4, "#0f172a", "#e0f2fe"),
|
|
78
|
+
createAccessibilityElement("export-project", "button", "Export Project", 5, "#ffffff", "#1d4ed8")
|
|
79
|
+
];
|
|
80
|
+
export function sampleLocalizationAccessibilityFixture(options = {}) {
|
|
81
|
+
const assetCount = Math.max(0, Math.floor(options.assetCount ?? 2));
|
|
82
|
+
const hotSwapFrom = options.hotSwapFrom ?? "en-US";
|
|
83
|
+
const hotSwapTo = options.hotSwapTo ?? "ar-SA";
|
|
84
|
+
const fromLocale = requireLocale(hotSwapFrom);
|
|
85
|
+
const toLocale = requireLocale(hotSwapTo);
|
|
86
|
+
const listenerNotifications = [fromLocale.code, toLocale.code];
|
|
87
|
+
const samples = locales.map((locale) => sampleLocale(locale, assetCount));
|
|
88
|
+
const missingKeys = findMissingKeys(stringTables["en-US"] ?? {}, stringTables["es-ES"] ?? {});
|
|
89
|
+
const focusOrder = accessibilityElements
|
|
90
|
+
.filter((element) => element.focusable && !element.disabled)
|
|
91
|
+
.sort((left, right) => left.tabIndex - right.tabIndex)
|
|
92
|
+
.map((element) => element.id);
|
|
93
|
+
const focusWalk = [focusOrder[0], focusOrder[1], focusOrder[2], focusOrder[1]].filter((id) => Boolean(id));
|
|
94
|
+
const minContrastRatio = Math.min(...accessibilityElements.map((element) => element.contrastRatio));
|
|
95
|
+
const fixtureWithoutHash = {
|
|
96
|
+
source: "origin-master-localization-ui-accessibility-adapted",
|
|
97
|
+
sourceFiles,
|
|
98
|
+
localeCount: locales.length,
|
|
99
|
+
rtlLocaleCount: locales.filter((locale) => locale.direction === "rtl").length,
|
|
100
|
+
tableKeyCount: Object.values(stringTables).reduce((sum, table) => sum + Object.keys(table).length, 0),
|
|
101
|
+
jsonLoaderValidated: validateJsonTableShape(stringTables),
|
|
102
|
+
csvLoaderValidated: validateCsvTableShape(toCsv(stringTables)),
|
|
103
|
+
hotSwapLocale: {
|
|
104
|
+
from: fromLocale.code,
|
|
105
|
+
to: toLocale.code,
|
|
106
|
+
directionChanged: fromLocale.direction !== toLocale.direction,
|
|
107
|
+
listenerNotifications
|
|
108
|
+
},
|
|
109
|
+
samples,
|
|
110
|
+
missingKeys,
|
|
111
|
+
accessibility: {
|
|
112
|
+
elementCount: accessibilityElements.length,
|
|
113
|
+
labelledControls: accessibilityElements.filter((element) => element.label.trim().length > 0).length,
|
|
114
|
+
focusOrder,
|
|
115
|
+
focusWalk,
|
|
116
|
+
liveRegionAnnouncements: ["Focused: Command menu", "Focused: Editor WebGL viewport", "Saved"],
|
|
117
|
+
highContrastMode: true,
|
|
118
|
+
minContrastRatio,
|
|
119
|
+
aaContrastPasses: accessibilityElements.every((element) => element.contrastPassesAA)
|
|
120
|
+
},
|
|
121
|
+
blockedClaims,
|
|
122
|
+
claimBoundary: "This fixture ports bounded old localization and UI accessibility concepts into deterministic editor-runtime evidence. It does not certify WCAG compliance, native assistive technology behavior, ICU parity, or Unity/Unreal UI parity."
|
|
123
|
+
};
|
|
124
|
+
return {
|
|
125
|
+
...fixtureWithoutHash,
|
|
126
|
+
hash: stableHash(JSON.stringify(fixtureWithoutHash))
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
function sampleLocale(locale, assetCount) {
|
|
130
|
+
const pluralCategory = cardinalPluralCategory(locale.code, assetCount);
|
|
131
|
+
const table = stringTables[locale.code] ?? {};
|
|
132
|
+
const fallback = stringTables["en-US"] ?? {};
|
|
133
|
+
return {
|
|
134
|
+
locale: locale.code,
|
|
135
|
+
direction: locale.direction,
|
|
136
|
+
title: lookup(table, fallback, "editor.title", {}),
|
|
137
|
+
assetCount: lookup(table, fallback, `assets.count.${pluralCategory}`, { count: assetCount }),
|
|
138
|
+
fallbackTitle: lookup(table, fallback, "panel.inspector", {}),
|
|
139
|
+
missingKey: lookup(table, fallback, "missing.key", {}),
|
|
140
|
+
formattedNumber: formatNumber(locale, 1234.5, 2),
|
|
141
|
+
formattedCurrency: formatCurrency(locale, 1234.5),
|
|
142
|
+
pluralCategory
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
function lookup(table, fallback, key, params) {
|
|
146
|
+
const template = table[key] ?? fallback[key];
|
|
147
|
+
if (!template)
|
|
148
|
+
return `[${key}]`;
|
|
149
|
+
return template.replace(/\{([^}]+)\}/g, (match, name) => String(params[name] ?? match));
|
|
150
|
+
}
|
|
151
|
+
function cardinalPluralCategory(localeCode, count) {
|
|
152
|
+
const language = localeCode.split("-")[0] ?? localeCode;
|
|
153
|
+
if (language === "ar") {
|
|
154
|
+
if (count === 0)
|
|
155
|
+
return "zero";
|
|
156
|
+
if (count === 1)
|
|
157
|
+
return "one";
|
|
158
|
+
if (count === 2)
|
|
159
|
+
return "two";
|
|
160
|
+
if (count % 100 >= 3 && count % 100 <= 10)
|
|
161
|
+
return "few";
|
|
162
|
+
if (count % 100 >= 11 && count % 100 <= 99)
|
|
163
|
+
return "many";
|
|
164
|
+
return "other";
|
|
165
|
+
}
|
|
166
|
+
return count === 1 ? "one" : "other";
|
|
167
|
+
}
|
|
168
|
+
function formatNumber(locale, value, decimals) {
|
|
169
|
+
const fixed = value.toFixed(decimals);
|
|
170
|
+
const [integer = "0", decimal = ""] = fixed.split(".");
|
|
171
|
+
const grouped = integer.replace(/\B(?=(\d{3})+(?!\d))/g, locale.thousandsSeparator);
|
|
172
|
+
return decimal.length > 0 ? `${grouped}${locale.decimalSeparator}${decimal}` : grouped;
|
|
173
|
+
}
|
|
174
|
+
function formatCurrency(locale, value) {
|
|
175
|
+
const formatted = formatNumber(locale, value, 2);
|
|
176
|
+
return locale.currencyPosition === "before" ? `${locale.currencySymbol}${formatted}` : `${formatted} ${locale.currencySymbol}`;
|
|
177
|
+
}
|
|
178
|
+
function findMissingKeys(reference, target) {
|
|
179
|
+
return Object.keys(reference).filter((key) => target[key] === undefined).sort();
|
|
180
|
+
}
|
|
181
|
+
function requireLocale(code) {
|
|
182
|
+
const locale = locales.find((candidate) => candidate.code === code);
|
|
183
|
+
if (!locale)
|
|
184
|
+
throw new Error(`Unknown editor locale fixture: ${code}`);
|
|
185
|
+
return locale;
|
|
186
|
+
}
|
|
187
|
+
function validateJsonTableShape(tables) {
|
|
188
|
+
return Object.values(tables).every((table) => Object.values(table).every((value) => typeof value === "string" && value.length > 0));
|
|
189
|
+
}
|
|
190
|
+
function validateCsvTableShape(csv) {
|
|
191
|
+
const rows = csv.split("\n").filter((line) => line.trim().length > 0);
|
|
192
|
+
if (rows.length < 2)
|
|
193
|
+
return false;
|
|
194
|
+
const expectedColumns = parseCsvLine(rows[0] ?? "").length;
|
|
195
|
+
return expectedColumns >= 2 && rows.slice(1).every((line) => parseCsvLine(line).length === expectedColumns);
|
|
196
|
+
}
|
|
197
|
+
function toCsv(tables) {
|
|
198
|
+
const localeCodes = Object.keys(tables).sort();
|
|
199
|
+
const keys = [...new Set(localeCodes.flatMap((locale) => Object.keys(tables[locale] ?? {})))].sort();
|
|
200
|
+
return [
|
|
201
|
+
["Key", ...localeCodes].join(","),
|
|
202
|
+
...keys.map((key) => [key, ...localeCodes.map((locale) => escapeCsv(tables[locale]?.[key] ?? ""))].join(","))
|
|
203
|
+
].join("\n");
|
|
204
|
+
}
|
|
205
|
+
function parseCsvLine(line) {
|
|
206
|
+
const columns = [];
|
|
207
|
+
let current = "";
|
|
208
|
+
let quoted = false;
|
|
209
|
+
for (let index = 0; index < line.length; index += 1) {
|
|
210
|
+
const char = line[index];
|
|
211
|
+
const next = line[index + 1];
|
|
212
|
+
if (char === "\"") {
|
|
213
|
+
if (quoted && next === "\"") {
|
|
214
|
+
current += "\"";
|
|
215
|
+
index += 1;
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
quoted = !quoted;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
else if (char === "," && !quoted) {
|
|
222
|
+
columns.push(current);
|
|
223
|
+
current = "";
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
current += char;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
columns.push(current);
|
|
230
|
+
return columns;
|
|
231
|
+
}
|
|
232
|
+
function escapeCsv(value) {
|
|
233
|
+
return value.includes(",") || value.includes("\"") || value.includes("\n") ? `"${value.replace(/"/g, "\"\"")}"` : value;
|
|
234
|
+
}
|
|
235
|
+
function createAccessibilityElement(id, role, label, tabIndex, foreground, background, ariaLive) {
|
|
236
|
+
const contrastRatio = Number(contrast(foreground, background).toFixed(2));
|
|
237
|
+
return {
|
|
238
|
+
id,
|
|
239
|
+
role,
|
|
240
|
+
label,
|
|
241
|
+
tabIndex,
|
|
242
|
+
focusable: true,
|
|
243
|
+
...(ariaLive ? { ariaLive } : {}),
|
|
244
|
+
contrastRatio,
|
|
245
|
+
contrastPassesAA: contrastRatio >= 4.5
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
function contrast(foreground, background) {
|
|
249
|
+
const foregroundLum = luminance(hexToRgb(foreground));
|
|
250
|
+
const backgroundLum = luminance(hexToRgb(background));
|
|
251
|
+
const light = Math.max(foregroundLum, backgroundLum);
|
|
252
|
+
const dark = Math.min(foregroundLum, backgroundLum);
|
|
253
|
+
return (light + 0.05) / (dark + 0.05);
|
|
254
|
+
}
|
|
255
|
+
function hexToRgb(hex) {
|
|
256
|
+
const normalized = hex.replace("#", "");
|
|
257
|
+
return [
|
|
258
|
+
Number.parseInt(normalized.slice(0, 2), 16) / 255,
|
|
259
|
+
Number.parseInt(normalized.slice(2, 4), 16) / 255,
|
|
260
|
+
Number.parseInt(normalized.slice(4, 6), 16) / 255
|
|
261
|
+
];
|
|
262
|
+
}
|
|
263
|
+
function luminance(rgb) {
|
|
264
|
+
const [r, g, b] = rgb.map((channel) => channel <= 0.03928 ? channel / 12.92 : ((channel + 0.055) / 1.055) ** 2.4);
|
|
265
|
+
return 0.2126 * (r ?? 0) + 0.7152 * (g ?? 0) + 0.0722 * (b ?? 0);
|
|
266
|
+
}
|
|
267
|
+
function stableHash(value) {
|
|
268
|
+
let hash = 0x811c9dc5;
|
|
269
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
270
|
+
hash ^= value.charCodeAt(index);
|
|
271
|
+
hash = Math.imul(hash, 0x01000193);
|
|
272
|
+
}
|
|
273
|
+
return (hash >>> 0).toString(16).padStart(8, "0");
|
|
274
|
+
}
|
|
275
|
+
//# sourceMappingURL=LocalizationAccessibilityFixtures.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LocalizationAccessibilityFixtures.js","sourceRoot":"","sources":["../../../../packages/editor-runtime/src/LocalizationAccessibilityFixtures.ts"],"names":[],"mappings":"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"}
|