@neocompose/cli 0.53.7 → 0.54.1
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/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.54.1] - 2026-09-22
|
|
4
|
+
|
|
5
|
+
- Variants with the same name in different folders, such as `Oak/Day1` and `Ash/Day1`, keep their own nested rows on push. Adding overrides to one of them no longer fails with "claims identity …, which another value created by this push already owns."
|
|
6
|
+
|
|
7
|
+
## [0.54.0] - 2026-09-22
|
|
8
|
+
|
|
9
|
+
- `NeoSortingGroup` has a `SortPoint`: where the group sorts along the transparency sort axis, as a cell offset from the object's origin-cell corner. It defaults to `(0.5, 0)`, the bottom center of the origin cell. Generated Unity classes implement `INeoSortingGroup.SortPoint`, which requires Neo Compose SDK 0.40.0.
|
|
10
|
+
|
|
3
11
|
## [0.53.7] - 2026-09-22
|
|
4
12
|
|
|
5
13
|
- Adding a value under a row that stores packed children, such as a new list on an item whose sprite is packed, keeps those children readable in `neo test`, `neo status`, and `neo push --dry-run`. A constructed instance replayed from that row used to receive the child's id instead of its value and fail with "NSFunction argument 1 does not match its declared runtime type."
|
package/dist/neo.mjs
CHANGED
|
@@ -9164,15 +9164,15 @@ var init_strict_resolver = __esm({
|
|
|
9164
9164
|
symbol
|
|
9165
9165
|
};
|
|
9166
9166
|
}
|
|
9167
|
-
const
|
|
9168
|
-
if (
|
|
9167
|
+
const variantPath2 = this.resolveVariantPath(receiverAst, name, scope, pos);
|
|
9168
|
+
if (variantPath2 !== null) {
|
|
9169
9169
|
if (optional2) {
|
|
9170
9170
|
throw new CompileError(
|
|
9171
9171
|
"Optional chaining is not valid on a variant path.",
|
|
9172
9172
|
pos
|
|
9173
9173
|
);
|
|
9174
9174
|
}
|
|
9175
|
-
return
|
|
9175
|
+
return variantPath2;
|
|
9176
9176
|
}
|
|
9177
9177
|
if (receiverAst.kind === "ident" && !scope.lookup(receiverAst.name)) {
|
|
9178
9178
|
if (receiverAst.name === "SpriteInfo" && name === "Empty") {
|
|
@@ -29523,13 +29523,13 @@ function activeNamedArgument(text, position) {
|
|
|
29523
29523
|
return /([A-Za-z_][A-Za-z0-9_]*)\s*:\s*\.[A-Za-z0-9_]*$/.exec(prefix)?.[1] ?? null;
|
|
29524
29524
|
}
|
|
29525
29525
|
function projectHover(analysis, document, position) {
|
|
29526
|
-
const
|
|
29527
|
-
if (
|
|
29526
|
+
const variantPath2 = projectVariantPathSymbolAt(analysis, document, position);
|
|
29527
|
+
if (variantPath2) {
|
|
29528
29528
|
return {
|
|
29529
|
-
range:
|
|
29529
|
+
range: variantPath2.token.range,
|
|
29530
29530
|
markdown: projectVariantHoverMarkdown(
|
|
29531
|
-
|
|
29532
|
-
|
|
29531
|
+
variantPath2.entry,
|
|
29532
|
+
variantPath2.entry.declaration.type.name === NEO_VARIANT_FOLDER_TYPE_NAME
|
|
29533
29533
|
)
|
|
29534
29534
|
};
|
|
29535
29535
|
}
|
|
@@ -29629,12 +29629,12 @@ Construct with \`new(${parameters})\` \u2014 this class declares a required cons
|
|
|
29629
29629
|
${lines.join("\n\n")}`;
|
|
29630
29630
|
}
|
|
29631
29631
|
function projectDefinition(analysis, document, position) {
|
|
29632
|
-
const
|
|
29633
|
-
if (
|
|
29632
|
+
const variantPath2 = projectVariantPathSymbolAt(analysis, document, position);
|
|
29633
|
+
if (variantPath2) {
|
|
29634
29634
|
return [
|
|
29635
29635
|
{
|
|
29636
|
-
uri:
|
|
29637
|
-
range:
|
|
29636
|
+
uri: variantPath2.entry.uri,
|
|
29637
|
+
range: variantPath2.entry.declaration.nameRange
|
|
29638
29638
|
}
|
|
29639
29639
|
];
|
|
29640
29640
|
}
|
|
@@ -50032,6 +50032,14 @@ var init_world_system_classes_generated = __esm({
|
|
|
50032
50032
|
docsText: "Sort this group against the scene root, ignoring any enclosing sorting group. Maps to SortingGroup.sortAtRoot.",
|
|
50033
50033
|
requirement: 1 /* Required */,
|
|
50034
50034
|
schemaKey: "SortAtRoot"
|
|
50035
|
+
},
|
|
50036
|
+
{
|
|
50037
|
+
memberId: "system_c5d39776-03d6-4673-84bb-16ba81ae9e0a",
|
|
50038
|
+
memberKind: "vector2",
|
|
50039
|
+
defaultValue: { x: 0.5, y: 0 },
|
|
50040
|
+
docsText: "Where this group sorts along the camera's transparency sort axis, as an offset from the object's origin-cell corner in cells, like NeoCollider.Offset. It is the group's pivot: put it where the art meets the ground. Moving it never moves the art.",
|
|
50041
|
+
requirement: 1 /* Required */,
|
|
50042
|
+
schemaKey: "SortPoint"
|
|
50035
50043
|
}
|
|
50036
50044
|
],
|
|
50037
50045
|
worldKind: "sortingGroup"
|
|
@@ -50093,7 +50101,7 @@ var init_world_system_classes_generated = __esm({
|
|
|
50093
50101
|
memberId: "system_6f32f1f2-83ea-42fc-8647-34ed0946b7f1",
|
|
50094
50102
|
memberKind: "int",
|
|
50095
50103
|
defaultValue: null,
|
|
50096
|
-
docsText: "
|
|
50104
|
+
docsText: "Added to the object layer's sorting order; it does not replace it. The result competes with every renderer in the sorting layer, or in the enclosing sorting group, and among equal orders the renderer lower on screen draws in front. Leave unset to use the layer's order.",
|
|
50097
50105
|
minValue: -32768,
|
|
50098
50106
|
maxValue: 32767,
|
|
50099
50107
|
schemaKey: "SortingOrder"
|
|
@@ -111848,6 +111856,9 @@ function variantValueBindingsV4(manifest, analysis) {
|
|
|
111848
111856
|
const classNames = new Map(
|
|
111849
111857
|
manifest.classes.map((entry) => [entry.id, entry.name])
|
|
111850
111858
|
);
|
|
111859
|
+
const folderPaths = new Map(
|
|
111860
|
+
manifest.variantFolders.map((folder) => [folder.id, folder.path])
|
|
111861
|
+
);
|
|
111851
111862
|
return variantGlobals(analysis).flatMap((global) => {
|
|
111852
111863
|
const variant2 = variantsById.get(
|
|
111853
111864
|
variantRecordId(global, NEO_VARIANT_TYPE_NAME)
|
|
@@ -111869,11 +111880,31 @@ function variantValueBindingsV4(manifest, analysis) {
|
|
|
111869
111880
|
valueId: variant2.valueId,
|
|
111870
111881
|
initializer: global.initializer,
|
|
111871
111882
|
source: global.source,
|
|
111872
|
-
label:
|
|
111883
|
+
label: variantLabel(
|
|
111884
|
+
requiredClassName2(classNames, variant2.classId),
|
|
111885
|
+
variant2,
|
|
111886
|
+
folderPaths
|
|
111887
|
+
)
|
|
111873
111888
|
}
|
|
111874
111889
|
];
|
|
111875
111890
|
});
|
|
111876
111891
|
}
|
|
111892
|
+
function variantLabel(className, variant2, folderPaths) {
|
|
111893
|
+
if (variant2.folderId === null) {
|
|
111894
|
+
return variantPath(className, null, variant2.name);
|
|
111895
|
+
}
|
|
111896
|
+
const folderPath3 = folderPaths.get(variant2.folderId);
|
|
111897
|
+
if (folderPath3 === void 0) {
|
|
111898
|
+
throw new Error(
|
|
111899
|
+
`Variant ${variant2.name} sits in folder ${JSON.stringify(variant2.folderId)}, which this push does not declare.`
|
|
111900
|
+
);
|
|
111901
|
+
}
|
|
111902
|
+
return variantPath(className, folderPath3, variant2.name);
|
|
111903
|
+
}
|
|
111904
|
+
function variantPath(className, folderPath3, name) {
|
|
111905
|
+
const scope = folderPath3 === null || folderPath3 === "" ? `${className}.${NEO_VARIANT_SCOPE_NAME}` : `${className}.${NEO_VARIANT_SCOPE_NAME}.${folderPath3.split(NEO_VARIANT_FOLDER_PATH_SEPARATOR).join(".")}`;
|
|
111906
|
+
return `${scope}.${name}`;
|
|
111907
|
+
}
|
|
111877
111908
|
function requiredClassName2(classNames, classId) {
|
|
111878
111909
|
const name = classNames.get(classId);
|
|
111879
111910
|
if (name === void 0) {
|
|
@@ -112005,8 +112036,7 @@ function buildVariantPathIndexV4(classIdsByName, analysis) {
|
|
|
112005
112036
|
annotationsForFolderLookup(global.annotations)
|
|
112006
112037
|
);
|
|
112007
112038
|
const path = symbol === null ? null : foldersBySymbol.get(folderSymbolKey(className, symbol)) ?? null;
|
|
112008
|
-
|
|
112009
|
-
index.set(`${scope}.${global.name}`, {
|
|
112039
|
+
index.set(variantPath(className, path, global.name), {
|
|
112010
112040
|
classId,
|
|
112011
112041
|
variantId: variantRecordId(global, global.type.name),
|
|
112012
112042
|
valueClassId: global.type.name === NEO_LOOKUP_VARIANT_TYPE_NAME ? classIdsByName.get(valueClassName(global)) ?? null : null
|
|
@@ -138836,7 +138866,7 @@ var init_registry2 = __esm({
|
|
|
138836
138866
|
"schema-contract/registry.mjs"() {
|
|
138837
138867
|
"use strict";
|
|
138838
138868
|
PROJECT_SCHEMA_CONTRACT = Object.freeze({
|
|
138839
|
-
cliVersion: "0.
|
|
138869
|
+
cliVersion: "0.54.1",
|
|
138840
138870
|
projectFileUploadBatchSize: 32,
|
|
138841
138871
|
documentRecords: {
|
|
138842
138872
|
member: {
|
|
@@ -146657,7 +146687,7 @@ There is no --keep-current: preserving current semantic state defines flatten.
|
|
|
146657
146687
|
async function main() {
|
|
146658
146688
|
const args = parseArgs(process.argv.slice(2));
|
|
146659
146689
|
if (args.command === "--version") {
|
|
146660
|
-
console.log("0.
|
|
146690
|
+
console.log("0.54.1");
|
|
146661
146691
|
return;
|
|
146662
146692
|
}
|
|
146663
146693
|
if (args.command === null || args.command === "help" || args.command === "--help" || args.command === "-h") {
|
package/package.json
CHANGED
|
@@ -209,11 +209,16 @@ class Tree : NeoObject {
|
|
|
209
209
|
```
|
|
210
210
|
|
|
211
211
|
Presence of a non-null group makes the object and descendants sort as one unit.
|
|
212
|
-
`SortAtRoot` hoists a nested group against the scene root.
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
212
|
+
`SortAtRoot` hoists a nested group against the scene root. `SortPoint` is the
|
|
213
|
+
point the group Y-sorts at, in cells from the object's origin-cell corner
|
|
214
|
+
(default `(0.5, 0)`, the origin cell's bottom center). Moving it never moves
|
|
215
|
+
art. Set it per class, variant, or animation frame, like any other value.
|
|
216
|
+
|
|
217
|
+
Objects sort by sorting layer, then order in layer, then sort-point Y (lower
|
|
218
|
+
draws in front), then document order. `NeoSpriteObject` exposes `FlipX`,
|
|
219
|
+
`FlipY`, `MaskInteraction`, and optional `SortingOrder`. Treat `SortingOrder`
|
|
220
|
+
as an offset added to the layer's sorting order; it is not an absolute
|
|
221
|
+
replacement.
|
|
217
222
|
|
|
218
223
|
Use `NeoObjectBase.Enabled` to hide an object and its entire subtree without
|
|
219
224
|
removing its authored `Children` row. A disabled object is not rendered or
|
|
@@ -97,7 +97,7 @@ wrappers.
|
|
|
97
97
|
The marker near the top of `SKILL.md` must exactly match the package version:
|
|
98
98
|
|
|
99
99
|
```html
|
|
100
|
-
<!-- reviewed-through-cli: 0.
|
|
100
|
+
<!-- reviewed-through-cli: 0.54.1 -->
|
|
101
101
|
```
|
|
102
102
|
|
|
103
103
|
The quoted version above is checked too, so this instruction cannot go stale
|