narraleaf-studio 1.6.1 → 1.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/_api.d.ts +173 -35
  2. package/package.json +1 -1
package/dist/_api.d.ts CHANGED
@@ -105,7 +105,10 @@ type AgentErrorCode =
105
105
  * itself, a file-system root).
106
106
  */
107
107
  | "path_not_allowed"
108
- /** The project is not trusted, so its code may not run (play-test, build). */
108
+ /**
109
+ * The project is not trusted: an agent may read it but not change it (every write, imports
110
+ * included), is given no folders outside it, and may not run its code (play-test, build).
111
+ */
109
112
  | "untrusted"
110
113
  /** The call is valid but the operation is not possible in this state. */
111
114
  | "unavailable"
@@ -129,7 +132,7 @@ export type PluginAgentToolErrorCode = Extract<AgentErrorCode, "invalid_args" |
129
132
  /** An answer: text the model reads, optionally the same facts as data, optionally one picture. */
130
133
  export type PluginAgentToolAnswer = {
131
134
  text: string;
132
- /** Sent as MCP `structuredContent`. Plain JSON; dropped when larger than 60 000 characters. */
135
+ /** Kept beside the text for Studio; not sent to the agent, which reads the text alone (`toToolResult`). Plain JSON; dropped when larger than 60 000 characters. */
133
136
  data?: Record<string, unknown>;
134
137
  /** One PNG or JPEG, base64 without a `data:` prefix. */
135
138
  image?: {
@@ -2561,6 +2564,13 @@ declare const en: {
2561
2564
  readonly allowWritesHint: "When off, agents can read projects but every change they try is refused.";
2562
2565
  readonly fullAccess: "Allow agents full access";
2563
2566
  readonly fullAccessHint: "Agents may change projects and read any folder without asking, except Studio's own folders, the home folder as a whole and drive roots.";
2567
+ readonly enableSetByLaunch: "Set by --agent when Studio starts in development.";
2568
+ readonly port: "Endpoint port";
2569
+ readonly portSetByLaunch: "Set by --agent-port when Studio starts in development.";
2570
+ readonly portHint: "Takes effect at once. Copy the connection configuration again for clients set up before.";
2571
+ readonly portInvalid: "Enter a port from {min} to {max}.";
2572
+ readonly portInUse: "Port {port} is in use by another program.";
2573
+ readonly portReserved: "Port {port} is reserved by the system.";
2564
2574
  readonly endpoint: "Endpoint address";
2565
2575
  readonly running: "Listening.";
2566
2576
  readonly portMoved: "The endpoint moved to port {port}. Copy the connection configuration again for clients set up before.";
@@ -2878,7 +2888,7 @@ declare const en: {
2878
2888
  readonly languagesTitle: "Languages";
2879
2889
  readonly languagesHint: "Languages of the game itself. The source language is the one the story is written in; the rest are translated against it.";
2880
2890
  readonly addLanguage: "Add language";
2881
- readonly codePlaceholder: "Code (en, ja, zh-CN\u2026)";
2891
+ readonly codePlaceholder: "Code, e.g. ja";
2882
2892
  readonly namePlaceholder: "Display name";
2883
2893
  readonly invalidCode: "Language codes may only contain letters, digits, and hyphens.";
2884
2894
  readonly sourceBadge: "Source";
@@ -3034,7 +3044,7 @@ declare const en: {
3034
3044
  readonly languagesTitle: "Voice languages";
3035
3045
  readonly languagesHint: "Languages with voice-over. Independent of the text languages.";
3036
3046
  readonly addLanguage: "Add voice language";
3037
- readonly codePlaceholder: "Code (ja, en, zh-CN\u2026)";
3047
+ readonly codePlaceholder: "Code, e.g. ja";
3038
3048
  readonly namePlaceholder: "Display name";
3039
3049
  readonly invalidCode: "Language codes may only contain letters, digits, and hyphens.";
3040
3050
  readonly more: "More";
@@ -3056,6 +3066,14 @@ declare const en: {
3056
3066
  readonly other: "{count} takes";
3057
3067
  };
3058
3068
  readonly importFailed: "Could not import the audio files";
3069
+ readonly replaceTakesTitle: "Replace existing takes";
3070
+ readonly replaceTakesMessage: {
3071
+ readonly one: "{count} file is named for a line that already has a take.";
3072
+ readonly other: "{count} files are named for lines that already have a take.";
3073
+ };
3074
+ readonly replaceTakesDetail: "Replacing writes each new file into the take it matches. Importing as new audio leaves the old takes in the asset library, linked to no line.";
3075
+ readonly replaceTakesImport: "Import as new audio";
3076
+ readonly replaceTakesReplace: "Replace takes";
3059
3077
  readonly importScript: "Import recording script\u2026";
3060
3078
  readonly importScriptCounts: "Applied {applied} ({unchanged} unchanged, {unknown} not voiced)";
3061
3079
  readonly scriptRowCount: {
@@ -3096,8 +3114,9 @@ declare const en: {
3096
3114
  readonly assign: "Assign audio";
3097
3115
  readonly replace: "Replace audio";
3098
3116
  readonly remove: "Remove voice";
3099
- readonly play: "Play";
3100
- readonly stop: "Stop";
3117
+ readonly play: "Play take";
3118
+ readonly showInStory: "Show in story";
3119
+ readonly stop: "Stop take";
3101
3120
  readonly approve: "Approve";
3102
3121
  readonly reject: "Return";
3103
3122
  readonly clipMissing: "Clip missing";
@@ -3130,6 +3149,17 @@ declare const en: {
3130
3149
  readonly unknown: "A story cannot be read, so orphan voice is not listed.";
3131
3150
  };
3132
3151
  };
3152
+ readonly script: {
3153
+ readonly column: {
3154
+ readonly filename: "File name";
3155
+ readonly character: "Speaker";
3156
+ readonly scene: "Scene";
3157
+ readonly line: "Line";
3158
+ readonly status: "Status";
3159
+ readonly note: "Note";
3160
+ readonly unitId: "Line ID";
3161
+ };
3162
+ };
3133
3163
  };
3134
3164
  readonly textSourceMigration: {
3135
3165
  readonly message: {
@@ -3259,6 +3289,8 @@ declare const en: {
3259
3289
  readonly replaceText: "text replacement";
3260
3290
  readonly agentEdit: "agent edit";
3261
3291
  readonly agentPluginEdit: "agent: {tool}";
3292
+ readonly importPsd: "PSD import";
3293
+ readonly importAudio: "audio import";
3262
3294
  };
3263
3295
  };
3264
3296
  readonly agent: {
@@ -4136,6 +4168,7 @@ declare const en: {
4136
4168
  readonly localization: "Translation Table";
4137
4169
  readonly voice: "Voice Table";
4138
4170
  readonly lint: "Problems";
4171
+ readonly search: "Search";
4139
4172
  readonly other: "Other";
4140
4173
  };
4141
4174
  readonly catalog: {
@@ -4193,6 +4226,10 @@ declare const en: {
4193
4226
  readonly cut: "Cut Nodes";
4194
4227
  readonly paste: "Paste Nodes";
4195
4228
  };
4229
+ readonly search: {
4230
+ readonly undo: "Undo Replace";
4231
+ readonly redo: "Redo Replace";
4232
+ };
4196
4233
  readonly storyMotion: {
4197
4234
  readonly undo: "Undo";
4198
4235
  readonly redo: "Redo";
@@ -4356,6 +4393,23 @@ declare const en: {
4356
4393
  readonly replaceAll: "Replace all";
4357
4394
  readonly replaceRow: "Replace this line";
4358
4395
  readonly replaceStale: "The project changed. Search again.";
4396
+ readonly replacedInScene: {
4397
+ readonly one: "Replaced {count} occurrence in {scene}";
4398
+ readonly other: "Replaced {count} occurrences in {scene}";
4399
+ };
4400
+ readonly replacedInScenes: {
4401
+ readonly one: "Replaced {count} occurrence in {scenes} scenes";
4402
+ readonly other: "Replaced {count} occurrences in {scenes} scenes";
4403
+ };
4404
+ readonly replacedUndoHint: "{key} in the Search panel undoes it in every scene.";
4405
+ readonly undoSkipped: {
4406
+ readonly one: "Replace not undone in {count} scene edited after it";
4407
+ readonly other: "Replace not undone in {count} scenes edited after it";
4408
+ };
4409
+ readonly redoSkipped: {
4410
+ readonly one: "Replace not redone in {count} scene edited after the undo";
4411
+ readonly other: "Replace not redone in {count} scenes edited after the undo";
4412
+ };
4359
4413
  readonly groups: {
4360
4414
  readonly scene: "Scenes";
4361
4415
  readonly story: "Stories";
@@ -4823,6 +4877,20 @@ declare const en: {
4823
4877
  readonly stage: {
4824
4878
  readonly notOnStage: "Not on stage";
4825
4879
  readonly builtin: "Built-in";
4880
+ readonly reserved: {
4881
+ readonly camera: "Camera";
4882
+ readonly background: "Scene background";
4883
+ readonly backgroundLayer: "Background layer";
4884
+ readonly displayableLayer: "Base layer";
4885
+ };
4886
+ readonly defaultName: {
4887
+ readonly text: "text";
4888
+ };
4889
+ readonly reservedHint: {
4890
+ readonly background: "The scene's background image";
4891
+ readonly backgroundLayer: "Built-in layer, behind everything";
4892
+ readonly displayableLayer: "Built-in default layer";
4893
+ };
4826
4894
  };
4827
4895
  readonly targetField: {
4828
4896
  readonly label: "Target";
@@ -4962,10 +5030,6 @@ declare const en: {
4962
5030
  readonly removeStarred: "Remove from starred";
4963
5031
  readonly starredEmpty: "Starred commands are listed first in the \u201C/\u201D menu.";
4964
5032
  };
4965
- readonly music: {
4966
- readonly missingAudio: "Missing audio";
4967
- readonly none: "No music";
4968
- };
4969
5033
  readonly background: {
4970
5034
  readonly missingImage: "Missing image";
4971
5035
  readonly none: "No background";
@@ -4983,7 +5047,7 @@ declare const en: {
4983
5047
  readonly times: "Times";
4984
5048
  readonly character: "Character";
4985
5049
  readonly speaker: "Speaker";
4986
- readonly form: "Expression";
5050
+ readonly form: "Appearance";
4987
5051
  readonly motion: "Motion";
4988
5052
  readonly skin: "Skin";
4989
5053
  readonly puppetParam: "Parameter";
@@ -5256,9 +5320,9 @@ declare const en: {
5256
5320
  readonly video: "Video asset";
5257
5321
  readonly character: "Character";
5258
5322
  readonly characterOrName: "Character, or any name";
5259
- readonly characterForm: "One of that character's expressions";
5323
+ readonly characterForm: "One of that character's appearances";
5260
5324
  readonly puppet: {
5261
- readonly motion: "A motion provided by the runtime (blank returns it to rest)";
5325
+ readonly motion: "A motion provided by the runtime, played in a loop (blank returns it to rest)";
5262
5326
  readonly expression: "An expression provided by the runtime (blank clears it)";
5263
5327
  readonly skin: "A skin provided by the runtime (blank restores the default)";
5264
5328
  readonly param: "A numeric parameter of the model, by id";
@@ -5333,8 +5397,8 @@ declare const en: {
5333
5397
  readonly createCharacterUnavailable: "Unavailable in a live session. Choose an existing character.";
5334
5398
  readonly voiceOutdated: "Voice outdated, open voice table";
5335
5399
  readonly voiceManage: "Open voice table";
5336
- readonly voicePlay: "Play voice take";
5337
- readonly voiceStop: "Stop voice take";
5400
+ readonly voicePlay: "Play take";
5401
+ readonly voiceStop: "Stop take";
5338
5402
  };
5339
5403
  readonly sceneEditor: {
5340
5404
  readonly defaultSceneName: "Untitled Scene";
@@ -5347,16 +5411,6 @@ declare const en: {
5347
5411
  readonly noDescription: "No description";
5348
5412
  readonly defaultBackground: "Default background";
5349
5413
  readonly clearBackground: "Clear background";
5350
- readonly sceneMusic: "Scene music";
5351
- readonly clearSceneMusic: "Clear scene music";
5352
- readonly selectSceneMusic: "Select Scene Music";
5353
- readonly sceneMusicVolume: "Volume";
5354
- readonly sceneMusicLoop: "Loop";
5355
- readonly sceneMusicFade: "Fade in (s)";
5356
- readonly sceneMusicLoopRegion: "Loops {from}s to {to}s";
5357
- readonly sceneMusicIntroLoop: "Plays {from}s, loops {loop}s to {to}s";
5358
- readonly sceneMusicFromIn: "Starts at {from}s";
5359
- readonly sceneMusicWholeClip: "Whole clip";
5360
5414
  readonly selectDefaultBackground: "Select Default Background";
5361
5415
  readonly tabInvalid: "Story scene editor tab is invalid.";
5362
5416
  readonly loadingScene: "Loading story scene\u2026";
@@ -5646,7 +5700,7 @@ declare const en: {
5646
5700
  };
5647
5701
  readonly motion: {
5648
5702
  readonly label: "Motion";
5649
- readonly detail: "Set the motion a runtime-drawn character plays";
5703
+ readonly detail: "Set the motion a runtime-drawn character loops until another row changes it";
5650
5704
  };
5651
5705
  readonly param: {
5652
5706
  readonly label: "Parameter";
@@ -5674,7 +5728,7 @@ declare const en: {
5674
5728
  };
5675
5729
  readonly vfx: {
5676
5730
  readonly label: "Ambience";
5677
- readonly detail: "Declare a looping full-screen overlay: petals, rain, dust, light";
5731
+ readonly detail: "Declare a looping full-screen overlay (petals, rain, dust, light); /show reveals it";
5678
5732
  };
5679
5733
  readonly layer: {
5680
5734
  readonly label: "Layer";
@@ -6010,6 +6064,7 @@ declare const en: {
6010
6064
  readonly changeSpeaker: "Change speaker";
6011
6065
  readonly speakerNameOnly: "{name} (name only)";
6012
6066
  readonly openInspector: "Open inspector";
6067
+ readonly editAsText: "Edit as text";
6013
6068
  readonly delete: "Delete";
6014
6069
  };
6015
6070
  readonly history: {
@@ -6072,6 +6127,7 @@ declare const en: {
6072
6127
  readonly undo: "Undo story scene edit";
6073
6128
  readonly redo: "Redo story scene edit";
6074
6129
  readonly editRow: "Edit the active row (or open its inspector)";
6130
+ readonly editRowAsText: "Edit the active row as text";
6075
6131
  readonly closeInspector: "Close the property editor";
6076
6132
  readonly insertRow: "Insert a new story row below the active row";
6077
6133
  readonly indent: "Indent selected story rows";
@@ -6140,6 +6196,7 @@ declare const en: {
6140
6196
  unknownVariable: string;
6141
6197
  unknownForm: string;
6142
6198
  notPuppetCharacter: string;
6199
+ puppetNoExpressions: string;
6143
6200
  ambiguousName: string;
6144
6201
  conflictingParams: string;
6145
6202
  positionOutOfRange: string;
@@ -6743,6 +6800,9 @@ declare const en: {
6743
6800
  readonly history: {
6744
6801
  readonly deleteAsset: "delete {name}";
6745
6802
  readonly deleteGroup: "delete folder {name}";
6803
+ readonly replaceContent: "replace {name}";
6804
+ readonly convert: "convert {name}";
6805
+ readonly restoreFailed: "Could not restore \u201C{name}\u201D.";
6746
6806
  };
6747
6807
  readonly delete: {
6748
6808
  readonly inUseTitle: "These assets are still in use";
@@ -6775,6 +6835,10 @@ declare const en: {
6775
6835
  readonly confirmAction: "Replace";
6776
6836
  readonly failedTitle: "Failed to replace asset contents";
6777
6837
  readonly remoteUnsupported: "Remote assets have no local file to replace.";
6838
+ readonly notKept: "Could not replace \u201C{name}\u201D.";
6839
+ readonly reason: {
6840
+ readonly notKept: "A copy of the current file could not be saved.";
6841
+ };
6778
6842
  };
6779
6843
  readonly types: {
6780
6844
  readonly image: "Images";
@@ -6961,7 +7025,7 @@ declare const en: {
6961
7025
  readonly familyNoRuntime: "No runtime is installed here. The drawing runtime is set on the character.";
6962
7026
  readonly family: {
6963
7027
  readonly live2d: "Live2D Cubism";
6964
- readonly live2dHint: "A folder holding a .model3.json, or Cubism 2's model.json.";
7028
+ readonly live2dHint: "A folder holding a .model3.json (Cubism 3 or later).";
6965
7029
  readonly spine: "Spine";
6966
7030
  readonly spineHint: "A folder holding a .skel or .json skeleton beside its .atlas.";
6967
7031
  };
@@ -6989,7 +7053,7 @@ declare const en: {
6989
7053
  readonly one: "Import {count} model";
6990
7054
  readonly other: "Import {count} models";
6991
7055
  };
6992
- readonly blockedHint: "Models with missing files start unticked. Tick one to import it as-is.";
7056
+ readonly blockedHint: "Models marked in red start unticked. Tick one to import it as-is.";
6993
7057
  readonly problemCount: {
6994
7058
  readonly one: "{count} problem";
6995
7059
  readonly other: "{count} problems";
@@ -7001,6 +7065,7 @@ declare const en: {
7001
7065
  readonly atlasMissing: "No atlas beside the skeleton; {path} was expected.";
7002
7066
  readonly atlasEmpty: "{path} names no image.";
7003
7067
  readonly nestedModel: "Holds another model, {path}, which would be copied with it.";
7068
+ readonly cubism2: "{path} is a Cubism 2 model. The Live2D Cubism runtime draws Cubism 3 and later models only.";
7004
7069
  };
7005
7070
  readonly role: {
7006
7071
  readonly moc: "model file";
@@ -7633,6 +7698,7 @@ declare const en: {
7633
7698
  readonly unknownVariant: "\u201C{element}\u201D has no such variant.";
7634
7699
  readonly pageNotFound: "The page was not found in this project.";
7635
7700
  readonly notALayer: "\u201C{node}\u201D: this page is not a layer, so nothing was closed.";
7701
+ readonly pageMusicInGame: "\u201C{node}\u201D: a game is running, and the story decides the music while it does. The page's music was not changed.";
7636
7702
  readonly persistentVariableMissing: "The persistent variable this node uses no longer exists.";
7637
7703
  readonly persistentVariableNoKey: "The persistent variable \u201C{name}\u201D has no storage key.";
7638
7704
  readonly slotIsRunningGame: "This node needs a save in storage. The slot it received is the running game, which only \u201C{node}\u201D can inherit from.";
@@ -8487,6 +8553,7 @@ declare const en: {
8487
8553
  readonly getVoiceVolume: "Get Voice Volume";
8488
8554
  readonly hasReadText: "Has Read Text";
8489
8555
  readonly playSound: "Play Sound";
8556
+ readonly playPageMusic: "Play Page Music";
8490
8557
  readonly setAutoForward: "Set Auto Forward";
8491
8558
  readonly setAutoForwardDelay: "Set Auto Forward Delay";
8492
8559
  readonly setTextRevealDuration: "Set Text Fade In";
@@ -8533,6 +8600,7 @@ declare const en: {
8533
8600
  readonly setVoiceFadeDuration: "Set Voice Fade Duration";
8534
8601
  readonly setVoiceVolume: "Set Voice Volume";
8535
8602
  readonly stopSound: "Stop Sound";
8603
+ readonly stopPageMusic: "Stop Page Music";
8536
8604
  readonly pauseSound: "Pause Sound";
8537
8605
  readonly resumeSound: "Resume Sound";
8538
8606
  readonly setSoundVolume: "Set Sound Volume";
@@ -8962,6 +9030,8 @@ declare const en: {
8962
9030
  readonly getTotalPlaytime: "Get Total Playtime";
8963
9031
  };
8964
9032
  readonly nodeDescription: {
9033
+ readonly playPageMusic: "Makes this the music of the page this graph runs on, for as long as the page is open, in place of the music set in its properties. The music playing hands over to it, and the same music already playing carries on. Going back to a page underneath brings that page's music back. Does nothing while a game is running: the story decides the music then.";
9034
+ readonly stopPageMusic: "Silences the page this graph runs on, for as long as it is open. The music playing fades out over Fade (s), or over its own fade when Fade (s) is not connected. Does nothing while a game is running: the story decides the music then.";
8965
9035
  readonly getComponentParam: "The value this placement sets for the chosen parameter, or the parameter's default when it sets none. A Text parameter that reads from a translation key gives the key's name; Translation Key Text gives its words.";
8966
9036
  readonly getPageParam: "The value the page was opened with for the chosen param, or the param's default when it was given none. Params are declared in the page's properties.";
8967
9037
  readonly compareEqual: "True when A and B are the same value of the same type. Lists and objects are compared by their contents, an element by which element it is. The number 1 and the text \"1\" are not equal; an input left unconnected counts as Null.";
@@ -9113,6 +9183,7 @@ declare const en: {
9113
9183
  readonly redescribe: "Read the model again";
9114
9184
  readonly previewFailed: "This model could not be drawn";
9115
9185
  readonly setupTitle: "Two things to set up";
9186
+ readonly setupTitleOne: "Left to set up: {item}";
9116
9187
  readonly stepRuntime: "Drawing runtime";
9117
9188
  readonly stepModel: "Model";
9118
9189
  readonly runtimeInstalled: "Installed";
@@ -9265,6 +9336,7 @@ declare const en: {
9265
9336
  readonly thumbnail: "Thumbnail";
9266
9337
  readonly preview: "Preview";
9267
9338
  readonly defaultAvatar: "Default dialog avatar";
9339
+ readonly defaultAvatarRuntimeHint: "A character drawn by a runtime has no generated avatar. Dialogue shows this one.";
9268
9340
  readonly voiceTrack: "Voice track";
9269
9341
  readonly voiceTrackMissing: "Missing track";
9270
9342
  readonly voiceTrackEmpty: "Add a track under Voice in Project \u25B8 Game to give this character its own volume control.";
@@ -9301,7 +9373,8 @@ declare const en: {
9301
9373
  readonly variant: "Variant: {name}";
9302
9374
  readonly loading: "Loading preview\u2026";
9303
9375
  readonly failed: "Preview failed";
9304
- readonly placeholder: "Select a variant with an image to preview";
9376
+ readonly emptyLayered: "Add a layer with an image, or import a PSD, to preview";
9377
+ readonly emptyPreset: "Set an image for this pose to preview";
9305
9378
  readonly noSize: "No size";
9306
9379
  readonly noMetadata: "No metadata";
9307
9380
  readonly zoomOut: "Zoom Out";
@@ -9426,6 +9499,26 @@ declare const en: {
9426
9499
  readonly chooseClick: "Choose click sound";
9427
9500
  readonly missing: "Missing sound";
9428
9501
  };
9502
+ readonly music: {
9503
+ readonly title: "Music";
9504
+ readonly none: "No music";
9505
+ readonly keep: "Keep current music";
9506
+ readonly silent: "No music";
9507
+ readonly choosePage: "Choose page music";
9508
+ readonly chooseScene: "Choose scene music";
9509
+ readonly missing: "Missing music";
9510
+ readonly loop: "Loop";
9511
+ readonly fade: "Fade";
9512
+ readonly loops: "Loops";
9513
+ readonly loopRegion: "Loops {from}s to {to}s";
9514
+ readonly loopToEnd: "Loops {from}s to the end";
9515
+ readonly introLoopRegion: "Plays from {start}s, loops {from}s to {to}s";
9516
+ readonly introLoopToEnd: "Plays from {start}s, loops {from}s to the end";
9517
+ readonly once: "Plays once";
9518
+ readonly onceFrom: "Plays once from {from}s";
9519
+ readonly onceRegion: "Plays once {from}s to {to}s";
9520
+ readonly fadeSummary: "Fade {seconds}s";
9521
+ };
9429
9522
  readonly linkedComponent: {
9430
9523
  readonly missing: "Missing component";
9431
9524
  readonly info: "Linked instance. Only its params and its position, size and rotation can be changed before unlinking.";
@@ -12112,8 +12205,9 @@ declare const en: {
12112
12205
  readonly name: "Project Name";
12113
12206
  readonly namePlaceholder: "Project name";
12114
12207
  readonly appIdPlaceholder: "App identifier";
12115
- readonly appIdHelper: "Lowercase letters, digits and hyphens, or a reverse-domain id such as com.studio.game. Cannot be changed after creation.";
12208
+ readonly appIdHelper: "Identifies the released game on the player's device. Lowercase letters, digits and hyphens, or a reverse-domain ID such as com.studio.game. Cannot be changed after the project is created.";
12116
12209
  readonly appIdRequired: "App ID is required";
12210
+ readonly appIdInUse: "Already used by the project \u201C{name}\u201D on this machine";
12117
12211
  readonly appIdInvalid: "App ID can only contain lowercase letters, numbers and hyphens, with dots only between the parts of a reverse-domain id such as com.studio.game";
12118
12212
  readonly locationPlaceholder: "Project location";
12119
12213
  readonly browseLocation: "Choose folder";
@@ -13616,6 +13710,12 @@ declare const en: {
13616
13710
  readonly message: "This background is already on screen, so the transition changes nothing";
13617
13711
  readonly help: string;
13618
13712
  };
13713
+ readonly storyTagNameShared: {
13714
+ readonly title: "Tag name on two axes";
13715
+ readonly description: "A character with layered sprites using one tag name on two axes";
13716
+ readonly message: "The tag \"{tag}\" is on both \"{first}\" and \"{second}\"";
13717
+ readonly help: string;
13718
+ };
13619
13719
  readonly blueprintReferenceMissing: {
13620
13720
  readonly title: "Missing target";
13621
13721
  readonly description: "A node naming something the project no longer has";
@@ -13897,13 +13997,13 @@ declare const en: {
13897
13997
  readonly voiceMissing: {
13898
13998
  readonly title: "Missing voice";
13899
13999
  readonly description: "A line with no recording in a voiced language";
13900
- readonly message: "No {locale} recording";
14000
+ readonly message: "No {language} recording";
13901
14001
  readonly help: string;
13902
14002
  };
13903
14003
  readonly voiceStale: {
13904
14004
  readonly title: "Stale voice";
13905
14005
  readonly description: "The line changed after it was recorded";
13906
- readonly message: "{locale} recording is older than the line";
14006
+ readonly message: "{language} recording predates a change to the line";
13907
14007
  readonly help: string;
13908
14008
  };
13909
14009
  readonly voiceOrphan: {
@@ -13911,8 +14011,8 @@ declare const en: {
13911
14011
  readonly description: "A recording whose line no longer exists";
13912
14012
  readonly message: "{recordings} with no line";
13913
14013
  readonly recordingCount: {
13914
- readonly one: "{count} {locale} recording";
13915
- readonly other: "{count} {locale} recordings";
14014
+ readonly one: "{count} {language} recording";
14015
+ readonly other: "{count} {language} recordings";
13916
14016
  };
13917
14017
  readonly help: string;
13918
14018
  };
@@ -15059,6 +15159,10 @@ declare const en: {
15059
15159
  readonly title: "Focus navigation";
15060
15160
  readonly body: string;
15061
15161
  };
15162
+ readonly pageMusic: {
15163
+ readonly title: "Page music";
15164
+ readonly body: string;
15165
+ };
15062
15166
  readonly focusNavigationSettings: {
15063
15167
  readonly title: "Navigation settings";
15064
15168
  readonly body: string;
@@ -16578,6 +16682,22 @@ type UIPageAnimationSettings = {
16578
16682
  /** Surfaces only: hold the incoming Page until this exit has finished. */
16579
16683
  exitBlocking: boolean;
16580
16684
  };
16685
+ type UIPageMusic = {
16686
+ /** Audio library asset id, or an audio asset set's id. */
16687
+ assetId: string;
16688
+ /** The project audio track it plays on (`ProjectAudioTrack.id`). Absent = the Music track. */
16689
+ audioTrackId?: string;
16690
+ /** 0-1 as authored. Absent = 1. */
16691
+ volume?: number;
16692
+ /** Absent = the track's own loop default (Music loops). */
16693
+ loop?: boolean;
16694
+ /** Fade-in as the page brings it in, and fade-out as it hands over, in milliseconds. Absent = 0. */
16695
+ fadeMs?: number;
16696
+ };
16697
+ type UIPageSilence = {
16698
+ silent: true;
16699
+ };
16700
+ type UIPageMusicSetting = UIPageMusic | UIPageSilence;
16581
16701
  type UISurfaceBackgroundFillMode = "cover" | "contain" | "stretch" | "tile";
16582
16702
  type UISurfaceBackgroundImage = {
16583
16703
  /** Image library asset id. Absent background = absent field, so this is never empty. */
@@ -16707,6 +16827,12 @@ type UISurfaceSettings = {
16707
16827
  * a scaled Surface keep showing the colour, so the two settings are not alternatives.
16708
16828
  */
16709
16829
  backgroundImage?: UISurfaceBackgroundImage;
16830
+ /**
16831
+ * What a page does to the music while it is the page on screen: play this, or silence. Absent
16832
+ * keeps whatever is playing (see `pageMusic.ts`). Read for pages only: a Game UI is drawn over
16833
+ * the running scene, whose own music is what plays there.
16834
+ */
16835
+ music?: UIPageMusicSetting;
16710
16836
  pageAnimation?: UIPageAnimationSettings;
16711
16837
  /** Where the focus starts when this Surface opens, and whether it is put there. See `navigation.ts`. */
16712
16838
  navigation?: UISurfaceNavigation;
@@ -17000,6 +17126,11 @@ type PsdFingerprintSlot = {
17000
17126
  layerId: string;
17001
17127
  /** The tag it feeds, when that layer is bound to an axis. Absent for a constant layer. */
17002
17128
  tagId?: string;
17129
+ /**
17130
+ * The image this import put in that slot. A re-import writes the layer's new bytes into it, as
17131
+ * long as the slot still shows it. Absent in a fingerprint written before it was recorded.
17132
+ */
17133
+ assetId?: string;
17003
17134
  };
17004
17135
  type PsdFingerprint = {
17005
17136
  fileName: string;
@@ -19812,6 +19943,7 @@ declare const HELP_TOPIC_IDS: readonly [
19812
19943
  "inputActionsInBlueprints",
19813
19944
  "focusNavigation",
19814
19945
  "focusNavigationSettings",
19946
+ "pageMusic",
19815
19947
  "uiComponents",
19816
19948
  "blueprints",
19817
19949
  "scripts",
@@ -22435,6 +22567,7 @@ export type PluginWidgetModule = {
22435
22567
  createFloatingToolbarItems?(context: PluginWidgetFloatingToolbarContext): FloatingToolbarItem[];
22436
22568
  createLayoutSizeField?(context: PluginWidgetLayoutSizeFieldContext): FieldDefinition<PluginWidgetInspectorData> | null | undefined;
22437
22569
  };
22570
+ type ModelFamily = "live2d" | "spine";
22438
22571
  /**
22439
22572
  * Caller-defined section (e.g. built-in presets) shown as a collapsible group in the asset list.
22440
22573
  * Workspace filter chips do not apply; only the search box filters `assets` (same rules as project assets).
@@ -22462,6 +22595,11 @@ export interface AssetSelectorProps {
22462
22595
  * Return null/undefined to fall back to the default fetch path.
22463
22596
  */
22464
22597
  resolveAssetPreviewUrl?: (asset: Asset) => Promise<string | null | undefined>;
22598
+ /**
22599
+ * For a model picker: the kind of model the caller draws, which the import wizard opens on. Left
22600
+ * out, the wizard asks.
22601
+ */
22602
+ modelFamily?: ModelFamily;
22465
22603
  onClose: () => void;
22466
22604
  onConfirm: (assets: Asset[]) => void;
22467
22605
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "narraleaf-studio",
3
- "version": "1.6.1",
3
+ "version": "1.6.3",
4
4
  "description": "TypeScript declarations for the NarraLeaf Studio plugin API (narraleaf-studio/plugin and narraleaf-studio/runtime).",
5
5
  "license": "MPL-2.0",
6
6
  "type": "module",