@adobe/data-gpu 0.9.96 → 0.9.98

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.
@@ -96,71 +96,6 @@ export declare const worldBounds: {
96
96
  readonly additionalProperties: false;
97
97
  };
98
98
  } & {} & {
99
- readonly _vertexBuffer: {
100
- readonly default: GPUBuffer | null;
101
- readonly nonPersistent: true;
102
- };
103
- readonly _skinVertexBuffer: {
104
- readonly default: GPUBuffer | null;
105
- readonly nonPersistent: true;
106
- };
107
- readonly _indexBuffer: {
108
- readonly default: GPUBuffer | null;
109
- readonly nonPersistent: true;
110
- };
111
- readonly _indexCount: {
112
- readonly default: undefined;
113
- readonly nonPersistent: true;
114
- readonly type: "integer";
115
- readonly minimum: 0;
116
- readonly maximum: 4294967295;
117
- };
118
- readonly _indexFormat: {
119
- readonly default: GPUIndexFormat;
120
- readonly nonPersistent: true;
121
- };
122
- readonly _materialBindGroup: {
123
- readonly default: GPUBindGroup | null;
124
- readonly nonPersistent: true;
125
- };
126
- readonly _mesh: {
127
- readonly default: undefined;
128
- readonly nonPersistent: true;
129
- readonly type: "integer";
130
- readonly minimum: -2147483648;
131
- readonly maximum: 2147483647;
132
- };
133
- readonly _material: {
134
- readonly default: undefined;
135
- readonly nonPersistent: true;
136
- readonly type: "integer";
137
- readonly minimum: -2147483648;
138
- readonly maximum: 2147483647;
139
- };
140
- readonly _nodeLocalMatrix: {
141
- readonly default: undefined;
142
- readonly nonPersistent: true;
143
- readonly type: "array";
144
- readonly items: {
145
- readonly type: "number";
146
- readonly precision: 1;
147
- readonly default: number;
148
- };
149
- readonly minItems: 16;
150
- readonly maxItems: 16;
151
- };
152
- readonly _skeletonModelRef: {
153
- readonly default: undefined;
154
- readonly nonPersistent: true;
155
- readonly type: "integer";
156
- readonly minimum: -2147483648;
157
- readonly maximum: 2147483647;
158
- };
159
- readonly _skeletonJointMatrixBindGroup: {
160
- readonly default: GPUBindGroup | null;
161
- readonly nonPersistent: true;
162
- };
163
- } & {
164
99
  readonly material: {
165
100
  readonly type: "integer";
166
101
  readonly minimum: -2147483648;
@@ -411,11 +346,77 @@ export declare const worldBounds: {
411
346
  readonly const: true;
412
347
  readonly default: true;
413
348
  };
349
+ } & {
350
+ readonly _vertexBuffer: {
351
+ readonly default: GPUBuffer | null;
352
+ readonly nonPersistent: true;
353
+ };
354
+ readonly _skinVertexBuffer: {
355
+ readonly default: GPUBuffer | null;
356
+ readonly nonPersistent: true;
357
+ };
358
+ readonly _indexBuffer: {
359
+ readonly default: GPUBuffer | null;
360
+ readonly nonPersistent: true;
361
+ };
362
+ readonly _indexCount: {
363
+ readonly default: undefined;
364
+ readonly nonPersistent: true;
365
+ readonly type: "integer";
366
+ readonly minimum: 0;
367
+ readonly maximum: 4294967295;
368
+ };
369
+ readonly _indexFormat: {
370
+ readonly default: GPUIndexFormat;
371
+ readonly nonPersistent: true;
372
+ };
373
+ readonly _materialBindGroup: {
374
+ readonly default: GPUBindGroup | null;
375
+ readonly nonPersistent: true;
376
+ };
377
+ readonly _mesh: {
378
+ readonly default: undefined;
379
+ readonly nonPersistent: true;
380
+ readonly type: "integer";
381
+ readonly minimum: -2147483648;
382
+ readonly maximum: 2147483647;
383
+ };
384
+ readonly _material: {
385
+ readonly default: undefined;
386
+ readonly nonPersistent: true;
387
+ readonly type: "integer";
388
+ readonly minimum: -2147483648;
389
+ readonly maximum: 2147483647;
390
+ };
391
+ readonly _nodeLocalMatrix: {
392
+ readonly default: undefined;
393
+ readonly nonPersistent: true;
394
+ readonly type: "array";
395
+ readonly items: {
396
+ readonly type: "number";
397
+ readonly precision: 1;
398
+ readonly default: number;
399
+ };
400
+ readonly minItems: 16;
401
+ readonly maxItems: 16;
402
+ };
403
+ readonly _skeletonModelRef: {
404
+ readonly default: undefined;
405
+ readonly nonPersistent: true;
406
+ readonly type: "integer";
407
+ readonly minimum: -2147483648;
408
+ readonly maximum: 2147483647;
409
+ };
410
+ readonly _skeletonJointMatrixBindGroup: {
411
+ readonly default: GPUBindGroup | null;
412
+ readonly nonPersistent: true;
413
+ };
414
414
  };
415
415
  readonly resources: {} & {
416
416
  readonly _gltfMeshByUrl: {
417
417
  readonly default: Map<string, number> | null;
418
418
  readonly nonPersistent: true;
419
+ readonly mutable: true;
419
420
  };
420
421
  } & {
421
422
  readonly frameTime: {
@@ -439,9 +440,6 @@ export declare const worldBounds: {
439
440
  readonly archetypes: {
440
441
  readonly Node: readonly ["position", "rotation", "scale", "parent", "visible"];
441
442
  } & {} & {} & {
442
- readonly _VisibleMaterial: readonly ["nonPersistent", "_materialBindGroup", "_mesh"];
443
- readonly _PbrPrimitive: readonly ["nonPersistent", "_vertexBuffer", "_skinVertexBuffer", "_indexBuffer", "_indexCount", "_indexFormat", "_material", "_mesh", "_nodeLocalMatrix"];
444
- } & {
445
443
  readonly Material: readonly ["name", "density", "restitution", "friction", "compliance", "heatCapacity", "viscosity", "thermalConductivity", "stressStrainCurve", "baseColorFactor", "emissiveFactor", "metallicFactor", "roughnessFactor", "normalScale", "occlusionStrength", "irReflectance", "irEmission", "emissionMode", "baseColorUrl", "metallicRoughnessUrl", "normalUrl", "occlusionUrl", "emissiveUrl"];
446
444
  } & {
447
445
  readonly GltfMeshPending: readonly ["gltfUrl"];
@@ -454,8 +452,11 @@ export declare const worldBounds: {
454
452
  readonly AnimationClip: readonly ["animationClipTracks", "animationClipDuration"];
455
453
  readonly Animation: readonly ["animationClipRef", "animationTargets", "animationTime", "animationSpeed", "animationLoop", "animationPlaying"];
456
454
  readonly AnimationObservable: readonly ["animationClipRef", "animationTargets", "animationTime", "animationSpeed", "animationLoop", "animationPlaying", "animationObservable"];
457
- } & {} & {} & {};
458
- readonly transactions: {} & {} & {} & {
455
+ } & {} & {
456
+ readonly _VisibleMaterial: readonly ["nonPersistent", "_materialBindGroup", "_mesh"];
457
+ readonly _PbrPrimitive: readonly ["nonPersistent", "_vertexBuffer", "_skinVertexBuffer", "_indexBuffer", "_indexCount", "_indexFormat", "_material", "_mesh", "_nodeLocalMatrix"];
458
+ } & {};
459
+ readonly transactions: {} & {} & {
459
460
  readonly insertMaterial: (t: import("@adobe/data/ecs").Store<import("@adobe/data/schema").FromSchemas<{
460
461
  readonly material: {
461
462
  readonly type: "integer";
@@ -1655,6 +1656,7 @@ export declare const worldBounds: {
1655
1656
  readonly _gltfMeshByUrl: {
1656
1657
  readonly default: Map<string, number> | null;
1657
1658
  readonly nonPersistent: true;
1659
+ readonly mutable: true;
1658
1660
  };
1659
1661
  } & {}>, {
1660
1662
  readonly GltfMeshPending: readonly ["gltfUrl"];
@@ -1986,6 +1988,7 @@ export declare const worldBounds: {
1986
1988
  readonly _gltfMeshByUrl: {
1987
1989
  readonly default: Map<string, number> | null;
1988
1990
  readonly nonPersistent: true;
1991
+ readonly mutable: true;
1989
1992
  };
1990
1993
  } & {}>, {
1991
1994
  readonly GltfMeshPending: readonly ["gltfUrl"];
@@ -2317,6 +2320,7 @@ export declare const worldBounds: {
2317
2320
  readonly _gltfMeshByUrl: {
2318
2321
  readonly default: Map<string, number> | null;
2319
2322
  readonly nonPersistent: true;
2323
+ readonly mutable: true;
2320
2324
  };
2321
2325
  } & {}>, {
2322
2326
  readonly GltfMeshPending: readonly ["gltfUrl"];
@@ -2652,6 +2656,7 @@ export declare const worldBounds: {
2652
2656
  readonly _gltfMeshByUrl: {
2653
2657
  readonly default: Map<string, number> | null;
2654
2658
  readonly nonPersistent: true;
2659
+ readonly mutable: true;
2655
2660
  };
2656
2661
  } & {}>, {
2657
2662
  readonly GltfMeshPending: readonly ["gltfUrl"];
@@ -2835,73 +2840,8 @@ export declare const worldBounds: {
2835
2840
  dt: number;
2836
2841
  observable: boolean;
2837
2842
  }) => void;
2838
- } & {} & {
2843
+ } & {} & {} & {
2839
2844
  readonly insertLoadedPrimitives: (t: import("@adobe/data/ecs").Store<import("@adobe/data/schema").FromSchemas<{} & {
2840
- readonly _vertexBuffer: {
2841
- readonly default: GPUBuffer | null;
2842
- readonly nonPersistent: true;
2843
- };
2844
- readonly _skinVertexBuffer: {
2845
- readonly default: GPUBuffer | null;
2846
- readonly nonPersistent: true;
2847
- };
2848
- readonly _indexBuffer: {
2849
- readonly default: GPUBuffer | null;
2850
- readonly nonPersistent: true;
2851
- };
2852
- readonly _indexCount: {
2853
- readonly default: undefined;
2854
- readonly nonPersistent: true;
2855
- readonly type: "integer";
2856
- readonly minimum: 0;
2857
- readonly maximum: 4294967295;
2858
- };
2859
- readonly _indexFormat: {
2860
- readonly default: GPUIndexFormat;
2861
- readonly nonPersistent: true;
2862
- };
2863
- readonly _materialBindGroup: {
2864
- readonly default: GPUBindGroup | null;
2865
- readonly nonPersistent: true;
2866
- };
2867
- readonly _mesh: {
2868
- readonly default: undefined;
2869
- readonly nonPersistent: true;
2870
- readonly type: "integer";
2871
- readonly minimum: -2147483648;
2872
- readonly maximum: 2147483647;
2873
- };
2874
- readonly _material: {
2875
- readonly default: undefined;
2876
- readonly nonPersistent: true;
2877
- readonly type: "integer";
2878
- readonly minimum: -2147483648;
2879
- readonly maximum: 2147483647;
2880
- };
2881
- readonly _nodeLocalMatrix: {
2882
- readonly default: undefined;
2883
- readonly nonPersistent: true;
2884
- readonly type: "array";
2885
- readonly items: {
2886
- readonly type: "number";
2887
- readonly precision: 1;
2888
- readonly default: number;
2889
- };
2890
- readonly minItems: 16;
2891
- readonly maxItems: 16;
2892
- };
2893
- readonly _skeletonModelRef: {
2894
- readonly default: undefined;
2895
- readonly nonPersistent: true;
2896
- readonly type: "integer";
2897
- readonly minimum: -2147483648;
2898
- readonly maximum: 2147483647;
2899
- };
2900
- readonly _skeletonJointMatrixBindGroup: {
2901
- readonly default: GPUBindGroup | null;
2902
- readonly nonPersistent: true;
2903
- };
2904
- } & {
2905
2845
  readonly visible: {
2906
2846
  readonly type: "boolean";
2907
2847
  readonly const: true;
@@ -3243,10 +3183,76 @@ export declare const worldBounds: {
3243
3183
  readonly const: true;
3244
3184
  readonly default: true;
3245
3185
  };
3186
+ } & {
3187
+ readonly _vertexBuffer: {
3188
+ readonly default: GPUBuffer | null;
3189
+ readonly nonPersistent: true;
3190
+ };
3191
+ readonly _skinVertexBuffer: {
3192
+ readonly default: GPUBuffer | null;
3193
+ readonly nonPersistent: true;
3194
+ };
3195
+ readonly _indexBuffer: {
3196
+ readonly default: GPUBuffer | null;
3197
+ readonly nonPersistent: true;
3198
+ };
3199
+ readonly _indexCount: {
3200
+ readonly default: undefined;
3201
+ readonly nonPersistent: true;
3202
+ readonly type: "integer";
3203
+ readonly minimum: 0;
3204
+ readonly maximum: 4294967295;
3205
+ };
3206
+ readonly _indexFormat: {
3207
+ readonly default: GPUIndexFormat;
3208
+ readonly nonPersistent: true;
3209
+ };
3210
+ readonly _materialBindGroup: {
3211
+ readonly default: GPUBindGroup | null;
3212
+ readonly nonPersistent: true;
3213
+ };
3214
+ readonly _mesh: {
3215
+ readonly default: undefined;
3216
+ readonly nonPersistent: true;
3217
+ readonly type: "integer";
3218
+ readonly minimum: -2147483648;
3219
+ readonly maximum: 2147483647;
3220
+ };
3221
+ readonly _material: {
3222
+ readonly default: undefined;
3223
+ readonly nonPersistent: true;
3224
+ readonly type: "integer";
3225
+ readonly minimum: -2147483648;
3226
+ readonly maximum: 2147483647;
3227
+ };
3228
+ readonly _nodeLocalMatrix: {
3229
+ readonly default: undefined;
3230
+ readonly nonPersistent: true;
3231
+ readonly type: "array";
3232
+ readonly items: {
3233
+ readonly type: "number";
3234
+ readonly precision: 1;
3235
+ readonly default: number;
3236
+ };
3237
+ readonly minItems: 16;
3238
+ readonly maxItems: 16;
3239
+ };
3240
+ readonly _skeletonModelRef: {
3241
+ readonly default: undefined;
3242
+ readonly nonPersistent: true;
3243
+ readonly type: "integer";
3244
+ readonly minimum: -2147483648;
3245
+ readonly maximum: 2147483647;
3246
+ };
3247
+ readonly _skeletonJointMatrixBindGroup: {
3248
+ readonly default: GPUBindGroup | null;
3249
+ readonly nonPersistent: true;
3250
+ };
3246
3251
  }>, import("@adobe/data/schema").FromSchemas<{} & {
3247
3252
  readonly _gltfMeshByUrl: {
3248
3253
  readonly default: Map<string, number> | null;
3249
3254
  readonly nonPersistent: true;
3255
+ readonly mutable: true;
3250
3256
  };
3251
3257
  } & {
3252
3258
  readonly frameTime: {
@@ -3267,9 +3273,6 @@ export declare const worldBounds: {
3267
3273
  readonly nonPersistent: true;
3268
3274
  };
3269
3275
  }>, {} & {} & {
3270
- readonly _VisibleMaterial: readonly ["nonPersistent", "_materialBindGroup", "_mesh"];
3271
- readonly _PbrPrimitive: readonly ["nonPersistent", "_vertexBuffer", "_skinVertexBuffer", "_indexBuffer", "_indexCount", "_indexFormat", "_material", "_mesh", "_nodeLocalMatrix"];
3272
- } & {
3273
3276
  readonly Node: readonly ["position", "rotation", "scale", "parent", "visible"];
3274
3277
  } & {} & {
3275
3278
  readonly Material: readonly ["name", "density", "restitution", "friction", "compliance", "heatCapacity", "viscosity", "thermalConductivity", "stressStrainCurve", "baseColorFactor", "emissiveFactor", "metallicFactor", "roughnessFactor", "normalScale", "occlusionStrength", "irReflectance", "irEmission", "emissionMode", "baseColorUrl", "metallicRoughnessUrl", "normalUrl", "occlusionUrl", "emissiveUrl"];
@@ -3284,7 +3287,10 @@ export declare const worldBounds: {
3284
3287
  readonly AnimationClip: readonly ["animationClipTracks", "animationClipDuration"];
3285
3288
  readonly Animation: readonly ["animationClipRef", "animationTargets", "animationTime", "animationSpeed", "animationLoop", "animationPlaying"];
3286
3289
  readonly AnimationObservable: readonly ["animationClipRef", "animationTargets", "animationTime", "animationSpeed", "animationLoop", "animationPlaying", "animationObservable"];
3287
- } & {}, {} & {} & {} & {
3290
+ } & {} & {
3291
+ readonly _VisibleMaterial: readonly ["nonPersistent", "_materialBindGroup", "_mesh"];
3292
+ readonly _PbrPrimitive: readonly ["nonPersistent", "_vertexBuffer", "_skinVertexBuffer", "_indexBuffer", "_indexCount", "_indexFormat", "_material", "_mesh", "_nodeLocalMatrix"];
3293
+ }, {} & {} & {
3288
3294
  readonly nodeChildrenOf: {
3289
3295
  readonly key: "parent";
3290
3296
  readonly archetype: "Node";
@@ -3295,7 +3301,7 @@ export declare const worldBounds: {
3295
3301
  readonly unique: true;
3296
3302
  readonly archetype: "Material";
3297
3303
  };
3298
- } & {} & {} & {} & {}, never>, args: import("./model-loader-plugin.js").LoadedArgs) => void;
3304
+ } & {} & {} & {} & {} & {}, never>, args: import("./model-loader-plugin.js").LoadedArgs) => void;
3299
3305
  } & {};
3300
3306
  readonly systems: import("@adobe/data/ecs").SystemDeclarations<"transformCreateWorldMatrix" | "transformSystem" | "update" | "_frameTime" | "schedulerSystem" | "input" | "preUpdate" | "postUpdate" | "physics" | "preRender" | "render" | "postRender" | "animationSampleSystem" | "modelLoadSystem" | "worldBoundsCreate" | "worldBoundsSystem">;
3301
3307
  readonly actions: {};
@@ -3306,11 +3312,11 @@ export declare const worldBounds: {
3306
3312
  readonly key: "parent";
3307
3313
  readonly archetype: "Node";
3308
3314
  };
3309
- } & {} & {} & {} & {
3315
+ } & {} & {} & {
3310
3316
  readonly materialByName: {
3311
3317
  readonly key: "name";
3312
3318
  readonly unique: true;
3313
3319
  readonly archetype: "Material";
3314
3320
  };
3315
- } & {} & {} & {} & {} & {} & {};
3321
+ } & {} & {} & {} & {} & {} & {} & {};
3316
3322
  };
@@ -319,6 +319,7 @@ export declare const scene: Database.Plugin<{
319
319
  readonly _gltfMeshByUrl: {
320
320
  readonly default: Map<string, number> | null;
321
321
  readonly nonPersistent: true;
322
+ readonly mutable: true;
322
323
  };
323
324
  } & {
324
325
  readonly light: {
@@ -1594,6 +1595,7 @@ export declare const scene: Database.Plugin<{
1594
1595
  readonly _gltfMeshByUrl: {
1595
1596
  readonly default: Map<string, number> | null;
1596
1597
  readonly nonPersistent: true;
1598
+ readonly mutable: true;
1597
1599
  };
1598
1600
  } & {}>, {
1599
1601
  readonly GltfMeshPending: readonly ["gltfUrl"];
@@ -1928,6 +1930,7 @@ export declare const scene: Database.Plugin<{
1928
1930
  readonly _gltfMeshByUrl: {
1929
1931
  readonly default: Map<string, number> | null;
1930
1932
  readonly nonPersistent: true;
1933
+ readonly mutable: true;
1931
1934
  };
1932
1935
  } & {}>, {
1933
1936
  readonly GltfMeshPending: readonly ["gltfUrl"];
@@ -2262,6 +2265,7 @@ export declare const scene: Database.Plugin<{
2262
2265
  readonly _gltfMeshByUrl: {
2263
2266
  readonly default: Map<string, number> | null;
2264
2267
  readonly nonPersistent: true;
2268
+ readonly mutable: true;
2265
2269
  };
2266
2270
  } & {}>, {
2267
2271
  readonly GltfMeshPending: readonly ["gltfUrl"];
@@ -2600,6 +2604,7 @@ export declare const scene: Database.Plugin<{
2600
2604
  readonly _gltfMeshByUrl: {
2601
2605
  readonly default: Map<string, number> | null;
2602
2606
  readonly nonPersistent: true;
2607
+ readonly mutable: true;
2603
2608
  };
2604
2609
  } & {}>, {
2605
2610
  readonly GltfMeshPending: readonly ["gltfUrl"];
@@ -1309,7 +1309,7 @@ export declare const joltSolver: {
1309
1309
  readonly archetype: "Material";
1310
1310
  };
1311
1311
  }, never>) => void;
1312
- } & {} & {} & {} & {} & {
1312
+ } & {} & {} & {} & {
1313
1313
  readonly setFixedTimestep: (t: import("@adobe/data/ecs").Store<import("@adobe/data/schema").FromSchemas<{}>, import("@adobe/data/schema").FromSchemas<{
1314
1314
  readonly physicsClock: {
1315
1315
  readonly default: import("../public.js").PhysicsClock;
@@ -1334,7 +1334,7 @@ export declare const joltSolver: {
1334
1334
  readonly nonPersistent: true;
1335
1335
  };
1336
1336
  }>, {}, {}, never>, hz: number) => void;
1337
- } & {};
1337
+ } & {} & {};
1338
1338
  readonly systems: import("@adobe/data/ecs").SystemDeclarations<"update" | "_frameTime" | "schedulerSystem" | "input" | "preUpdate" | "postUpdate" | "physics" | "preRender" | "render" | "postRender" | "advancePhysicsClock" | "joltStep">;
1339
1339
  readonly actions: {
1340
1340
  readonly pickRay: (db: Database<import("@adobe/data/schema").FromSchemas<{
@@ -1289,7 +1289,7 @@ export declare const rapierSolver: {
1289
1289
  readonly archetype: "Material";
1290
1290
  };
1291
1291
  }, never>) => void;
1292
- } & {} & {} & {} & {} & {
1292
+ } & {} & {} & {} & {
1293
1293
  readonly setFixedTimestep: (t: import("@adobe/data/ecs").Store<import("@adobe/data/schema").FromSchemas<{}>, import("@adobe/data/schema").FromSchemas<{
1294
1294
  readonly physicsClock: {
1295
1295
  readonly default: import("../public.js").PhysicsClock;
@@ -1314,7 +1314,7 @@ export declare const rapierSolver: {
1314
1314
  readonly nonPersistent: true;
1315
1315
  };
1316
1316
  }>, {}, {}, never>, hz: number) => void;
1317
- } & {};
1317
+ } & {} & {};
1318
1318
  readonly systems: import("@adobe/data/ecs").SystemDeclarations<"update" | "_frameTime" | "schedulerSystem" | "input" | "preUpdate" | "postUpdate" | "physics" | "preRender" | "render" | "postRender" | "advancePhysicsClock" | "rapierStep">;
1319
1319
  readonly actions: {
1320
1320
  readonly pickRay: (db: Database<import("@adobe/data/schema").FromSchemas<{
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adobe/data-gpu",
3
- "version": "0.9.96",
3
+ "version": "0.9.98",
4
4
  "description": "Adobe data WebGPU plugins and types for graphics and compute",
5
5
  "type": "module",
6
6
  "private": false,
@@ -12,7 +12,7 @@
12
12
  "dependencies": {
13
13
  "@dimforge/rapier3d-compat": "^0.19.3",
14
14
  "jolt-physics": "^1.0.0",
15
- "@adobe/data": "0.9.96"
15
+ "@adobe/data": "0.9.98"
16
16
  },
17
17
  "devDependencies": {
18
18
  "@webgpu/types": "^0.1.61",
@@ -41,7 +41,7 @@ export const mesh = Database.Plugin.create({
41
41
  cpuSkin: { default: null as { positions: Float32Array; joints: Uint32Array; weights: Float32Array } | null },
42
42
  },
43
43
  resources: {
44
- _gltfMeshByUrl: { default: null as Map<string, Entity> | null, nonPersistent: true },
44
+ _gltfMeshByUrl: { default: null as Map<string, Entity> | null, nonPersistent: true, mutable: true },
45
45
  },
46
46
  archetypes: {
47
47
  GltfMeshPending: ["gltfUrl"],