@patterkit/model 1.0.1 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -46,6 +46,7 @@ __export(index_exports, {
46
46
  MANIFEST_EXTENSION: () => MANIFEST_EXTENSION,
47
47
  PAD_AFTER_MAX: () => PAD_AFTER_MAX,
48
48
  PAD_AFTER_MIN: () => PAD_AFTER_MIN,
49
+ PLACEHOLDER_STATUS: () => PLACEHOLDER_STATUS,
49
50
  PROJECT_EXTENSION_STEM: () => PROJECT_EXTENSION_STEM,
50
51
  PROJECT_LOCALE_SCENE: () => PROJECT_LOCALE_SCENE,
51
52
  PROJECT_SCHEMA: () => PROJECT_SCHEMA,
@@ -250,6 +251,7 @@ var DEFAULT_RECORDING_STATUSES = [
250
251
  { name: "final", colour: 9 }
251
252
  // purple
252
253
  ];
254
+ var PLACEHOLDER_STATUS = "placeholder";
253
255
  var RERECORD_STATUS = "rerecord";
254
256
  var RERECORD_STATUS_DECL = { name: RERECORD_STATUS, colour: 1 };
255
257
  function deriveRecordingFolders(audioRoot, statuses) {
@@ -385,6 +387,7 @@ var UNRESOLVED_KEY = "unresolved";
385
387
  MANIFEST_EXTENSION,
386
388
  PAD_AFTER_MAX,
387
389
  PAD_AFTER_MIN,
390
+ PLACEHOLDER_STATUS,
388
391
  PROJECT_EXTENSION_STEM,
389
392
  PROJECT_LOCALE_SCENE,
390
393
  PROJECT_SCHEMA,
package/dist/index.d.cts CHANGED
@@ -393,6 +393,10 @@ interface CastMember {
393
393
  * setup; renaming a character stamps the old name's slot here, so they keep their colour. Authoring only
394
394
  * (not shipped in the runtime bundle). */
395
395
  colour?: number;
396
+ /** The voice Placeholder Speech gives this character (a Google voice name such as `en-GB-Standard-B`).
397
+ * Absent, the default comes from a hash of the name (narrowed by `gender` when it's male or female);
398
+ * renaming a character stamps the old default here, so they keep their voice. Authoring only. */
399
+ placeholderVoice?: string;
396
400
  gameData?: GameData;
397
401
  }
398
402
  /** A speaker qualifier (a screenplay's character extension): `V.O.`, `O.S.`, `RADIO`, or the project's own.
@@ -539,6 +543,21 @@ interface RecordingStatusDecl {
539
543
  /** The default recording-status ladder (used when a project declares none). The FIRST rung is the
540
544
  * level-0 / absence status: a beat with no recorded status counts as `missing`. */
541
545
  declare const DEFAULT_RECORDING_STATUSES: RecordingStatusDecl[];
546
+ /** Placeholder Speech settings (`ProjectFile.placeholderSpeech`). */
547
+ interface PlaceholderSpeechConfig {
548
+ /** The recording status whose folder holds the speech. It's the one status that isn't a recording: reports
549
+ * count its lines as still to record, and the scratch recorder treats them as missing. */
550
+ status: string;
551
+ /** The Google service-account key file, relative to the `.patter` folder (forward slashes) or `~/...`. Absent,
552
+ * the `GOOGLE_APPLICATION_CREDENTIALS` environment variable is used. A path, never the key itself. */
553
+ keyFile?: string;
554
+ /** The voices' language and accent, as a Google language code (`en-GB`). Absent, from the main language. */
555
+ accent?: string;
556
+ /** Keep the speech out of version control: an ignore rule for its folder, and no adds. Default off. */
557
+ keepOutOfVersionControl?: boolean;
558
+ }
559
+ /** The status Placeholder Speech adds when it's turned on and the ladder has none of that name. */
560
+ declare const PLACEHOLDER_STATUS = "placeholder";
542
561
  /** The reserved recording status a line takes when it is flagged **needs re-record** (#227): a recorded
543
562
  * take exists but is unusable (bad quality, wrong take), so it must be redone. It is NOT a ladder rung -
544
563
  * it is a regression flag that MASKS the derived / manual rung for the recording script, the production
@@ -810,6 +829,10 @@ interface ProjectFile {
810
829
  * scratch take into this rung's folder for any line at or below this rung. Authoring metadata, editor-
811
830
  * only; never reaches the bundle. Unset = scratch recording off. */
812
831
  scratchStatus?: string;
832
+ /** Placeholder Speech: stand-in speech made from each spoken line's text, into one recording status's folder,
833
+ * so a scene can be heard before anyone records it. Present means on; absent means off. Authoring metadata,
834
+ * editor and CLI only; never reaches the bundle. See `PlaceholderSpeechConfig`. */
835
+ placeholderSpeech?: PlaceholderSpeechConfig;
813
836
  /** Spell-check setup (Patterpad #177): the active dictionary language + the project's custom word list +
814
837
  * an on/off flag. Source-language-only, authoring metadata - it never reaches the runtime bundle. */
815
838
  dictionary?: ProjectDictionary;
@@ -1491,4 +1514,4 @@ interface ExtensionFieldDecl {
1491
1514
  /** A node's extension values in a bundle: extension id -> field -> value, raw. */
1492
1515
  type NodeExtensions = Record<string, Record<string, unknown>>;
1493
1516
 
1494
- export { AUTHORING_SCHEMA, type AuthoringFile, type Beat, type Block, type Bundle, type BundleCastMember, type BundleExtension, type BundleQualifier, COMMON_GENDERS, type CaptionDelimiters, type CastMember, type Comment, type CommentMessage, type CommentRange, type CompiledBlock, type CompiledEffect, type CompiledGroup, type CompiledScene, type CompiledSnippet, type CoverageDriver, DEFAULT_CAPTION_CHARACTER, DEFAULT_CAPTION_DELIMITERS, DEFAULT_DOCUMENTATION_CLASSES, DEFAULT_ESTIMATE_SPEED, DEFAULT_LAYOUT, DEFAULT_PAD_AFTER, DEFAULT_QUALIFIERS, DEFAULT_RECORDING_STATUSES, DEFAULT_SPEAKER_PATTERN, DEFAULT_WRITING_STATUSES, type DocLine, type DocumentationClass, ESTIMATE_SPEED_MAX, ESTIMATE_SPEED_MIN, EXTENSIONS_DIR, EXTENSION_SCHEMA, EXTENSION_SHARD, type EditRecord, type Effect, type EngineSave, type EstimatingConfig, type Expression, type ExtensionFieldDecl, type ExtensionShard, FLOW_SCHEMA, type FlowCursor, type FlowFile, type FlowNode, type FlowSnapshot, type FlowState, type FlowValues, type GameData, type GameDataField, type GameDataFieldType, type GameDataFields, type GameDataNodeKind, type GameEventBeat, type GrammaticalGender, type Group, HANDOFF_SCHEMA, type HandoffFile, type HandoffImport, type HandoffLine, type HandoffRow, type HostScopeDecl, type HostScopeRegistry, type HostScopeSpec, type Jump, type JumpTarget, LINE_CHARS_PER_SECOND, LINE_CHAR_WEIGHTS, LINE_DURATION_MAX, LINE_DURATION_MIN, type LineBeat, type LocaleFile, MANIFEST_EXTENSION, type NodeExtensions, PAD_AFTER_MAX, PAD_AFTER_MIN, PROJECT_EXTENSION_STEM, PROJECT_LOCALE_SCENE, PROJECT_SCHEMA, type ProjectDictionary, type ProjectExtension, type ProjectFile, type ProjectLayout, type PromptBeat, type PropertyDecl, type PropertyType, RERECORD_STATUS, RERECORD_STATUS_DECL, type RecordingFolder, type RecordingStatusDecl, SAVE_SCHEMA, SAVE_VERSION, SPEAKER_PATTERN_KEY, STRINGS_SCHEMA, SUBTITLE_READING_MIN, type SaveEnvelope, type SaveGame, type SaveGameV3, type SavedChoice, type SavedChoiceOption, type SavedChoicePrompt, type ScalarValue, type Scene, type SceneFolder, type SceneFolderLayout, type SceneNavRow, type Selector, type SelectorExhaust, type SelectorOrder, type SelectorSnapshot, type SequenceOptions, type Snippet, type SpeakerQualifier, type StackFrame, type Suggestion, type SuggestionSource, type TextBeat, UNRESOLVED_KEY, type VcsKind, type WritingStatusDecl, castStringKey, deriveRecordingFolders, effectiveGameId, estimateLineDuration, formatSpeakerLabel, isContentlessBeat, isDialogueScene, normaliseEstimateSpeed, projectLayout, projectQualifiers, qualifierStringKey, resolveSceneRef, sceneAddressIndex, sceneFolderLayout, sceneFolderPath, speakerLabelKey, textIsAction, usedQualifiers, usedSpeakerPairs, walkNodes };
1517
+ export { AUTHORING_SCHEMA, type AuthoringFile, type Beat, type Block, type Bundle, type BundleCastMember, type BundleExtension, type BundleQualifier, COMMON_GENDERS, type CaptionDelimiters, type CastMember, type Comment, type CommentMessage, type CommentRange, type CompiledBlock, type CompiledEffect, type CompiledGroup, type CompiledScene, type CompiledSnippet, type CoverageDriver, DEFAULT_CAPTION_CHARACTER, DEFAULT_CAPTION_DELIMITERS, DEFAULT_DOCUMENTATION_CLASSES, DEFAULT_ESTIMATE_SPEED, DEFAULT_LAYOUT, DEFAULT_PAD_AFTER, DEFAULT_QUALIFIERS, DEFAULT_RECORDING_STATUSES, DEFAULT_SPEAKER_PATTERN, DEFAULT_WRITING_STATUSES, type DocLine, type DocumentationClass, ESTIMATE_SPEED_MAX, ESTIMATE_SPEED_MIN, EXTENSIONS_DIR, EXTENSION_SCHEMA, EXTENSION_SHARD, type EditRecord, type Effect, type EngineSave, type EstimatingConfig, type Expression, type ExtensionFieldDecl, type ExtensionShard, FLOW_SCHEMA, type FlowCursor, type FlowFile, type FlowNode, type FlowSnapshot, type FlowState, type FlowValues, type GameData, type GameDataField, type GameDataFieldType, type GameDataFields, type GameDataNodeKind, type GameEventBeat, type GrammaticalGender, type Group, HANDOFF_SCHEMA, type HandoffFile, type HandoffImport, type HandoffLine, type HandoffRow, type HostScopeDecl, type HostScopeRegistry, type HostScopeSpec, type Jump, type JumpTarget, LINE_CHARS_PER_SECOND, LINE_CHAR_WEIGHTS, LINE_DURATION_MAX, LINE_DURATION_MIN, type LineBeat, type LocaleFile, MANIFEST_EXTENSION, type NodeExtensions, PAD_AFTER_MAX, PAD_AFTER_MIN, PLACEHOLDER_STATUS, PROJECT_EXTENSION_STEM, PROJECT_LOCALE_SCENE, PROJECT_SCHEMA, type PlaceholderSpeechConfig, type ProjectDictionary, type ProjectExtension, type ProjectFile, type ProjectLayout, type PromptBeat, type PropertyDecl, type PropertyType, RERECORD_STATUS, RERECORD_STATUS_DECL, type RecordingFolder, type RecordingStatusDecl, SAVE_SCHEMA, SAVE_VERSION, SPEAKER_PATTERN_KEY, STRINGS_SCHEMA, SUBTITLE_READING_MIN, type SaveEnvelope, type SaveGame, type SaveGameV3, type SavedChoice, type SavedChoiceOption, type SavedChoicePrompt, type ScalarValue, type Scene, type SceneFolder, type SceneFolderLayout, type SceneNavRow, type Selector, type SelectorExhaust, type SelectorOrder, type SelectorSnapshot, type SequenceOptions, type Snippet, type SpeakerQualifier, type StackFrame, type Suggestion, type SuggestionSource, type TextBeat, UNRESOLVED_KEY, type VcsKind, type WritingStatusDecl, castStringKey, deriveRecordingFolders, effectiveGameId, estimateLineDuration, formatSpeakerLabel, isContentlessBeat, isDialogueScene, normaliseEstimateSpeed, projectLayout, projectQualifiers, qualifierStringKey, resolveSceneRef, sceneAddressIndex, sceneFolderLayout, sceneFolderPath, speakerLabelKey, textIsAction, usedQualifiers, usedSpeakerPairs, walkNodes };
package/dist/index.d.ts CHANGED
@@ -393,6 +393,10 @@ interface CastMember {
393
393
  * setup; renaming a character stamps the old name's slot here, so they keep their colour. Authoring only
394
394
  * (not shipped in the runtime bundle). */
395
395
  colour?: number;
396
+ /** The voice Placeholder Speech gives this character (a Google voice name such as `en-GB-Standard-B`).
397
+ * Absent, the default comes from a hash of the name (narrowed by `gender` when it's male or female);
398
+ * renaming a character stamps the old default here, so they keep their voice. Authoring only. */
399
+ placeholderVoice?: string;
396
400
  gameData?: GameData;
397
401
  }
398
402
  /** A speaker qualifier (a screenplay's character extension): `V.O.`, `O.S.`, `RADIO`, or the project's own.
@@ -539,6 +543,21 @@ interface RecordingStatusDecl {
539
543
  /** The default recording-status ladder (used when a project declares none). The FIRST rung is the
540
544
  * level-0 / absence status: a beat with no recorded status counts as `missing`. */
541
545
  declare const DEFAULT_RECORDING_STATUSES: RecordingStatusDecl[];
546
+ /** Placeholder Speech settings (`ProjectFile.placeholderSpeech`). */
547
+ interface PlaceholderSpeechConfig {
548
+ /** The recording status whose folder holds the speech. It's the one status that isn't a recording: reports
549
+ * count its lines as still to record, and the scratch recorder treats them as missing. */
550
+ status: string;
551
+ /** The Google service-account key file, relative to the `.patter` folder (forward slashes) or `~/...`. Absent,
552
+ * the `GOOGLE_APPLICATION_CREDENTIALS` environment variable is used. A path, never the key itself. */
553
+ keyFile?: string;
554
+ /** The voices' language and accent, as a Google language code (`en-GB`). Absent, from the main language. */
555
+ accent?: string;
556
+ /** Keep the speech out of version control: an ignore rule for its folder, and no adds. Default off. */
557
+ keepOutOfVersionControl?: boolean;
558
+ }
559
+ /** The status Placeholder Speech adds when it's turned on and the ladder has none of that name. */
560
+ declare const PLACEHOLDER_STATUS = "placeholder";
542
561
  /** The reserved recording status a line takes when it is flagged **needs re-record** (#227): a recorded
543
562
  * take exists but is unusable (bad quality, wrong take), so it must be redone. It is NOT a ladder rung -
544
563
  * it is a regression flag that MASKS the derived / manual rung for the recording script, the production
@@ -810,6 +829,10 @@ interface ProjectFile {
810
829
  * scratch take into this rung's folder for any line at or below this rung. Authoring metadata, editor-
811
830
  * only; never reaches the bundle. Unset = scratch recording off. */
812
831
  scratchStatus?: string;
832
+ /** Placeholder Speech: stand-in speech made from each spoken line's text, into one recording status's folder,
833
+ * so a scene can be heard before anyone records it. Present means on; absent means off. Authoring metadata,
834
+ * editor and CLI only; never reaches the bundle. See `PlaceholderSpeechConfig`. */
835
+ placeholderSpeech?: PlaceholderSpeechConfig;
813
836
  /** Spell-check setup (Patterpad #177): the active dictionary language + the project's custom word list +
814
837
  * an on/off flag. Source-language-only, authoring metadata - it never reaches the runtime bundle. */
815
838
  dictionary?: ProjectDictionary;
@@ -1491,4 +1514,4 @@ interface ExtensionFieldDecl {
1491
1514
  /** A node's extension values in a bundle: extension id -> field -> value, raw. */
1492
1515
  type NodeExtensions = Record<string, Record<string, unknown>>;
1493
1516
 
1494
- export { AUTHORING_SCHEMA, type AuthoringFile, type Beat, type Block, type Bundle, type BundleCastMember, type BundleExtension, type BundleQualifier, COMMON_GENDERS, type CaptionDelimiters, type CastMember, type Comment, type CommentMessage, type CommentRange, type CompiledBlock, type CompiledEffect, type CompiledGroup, type CompiledScene, type CompiledSnippet, type CoverageDriver, DEFAULT_CAPTION_CHARACTER, DEFAULT_CAPTION_DELIMITERS, DEFAULT_DOCUMENTATION_CLASSES, DEFAULT_ESTIMATE_SPEED, DEFAULT_LAYOUT, DEFAULT_PAD_AFTER, DEFAULT_QUALIFIERS, DEFAULT_RECORDING_STATUSES, DEFAULT_SPEAKER_PATTERN, DEFAULT_WRITING_STATUSES, type DocLine, type DocumentationClass, ESTIMATE_SPEED_MAX, ESTIMATE_SPEED_MIN, EXTENSIONS_DIR, EXTENSION_SCHEMA, EXTENSION_SHARD, type EditRecord, type Effect, type EngineSave, type EstimatingConfig, type Expression, type ExtensionFieldDecl, type ExtensionShard, FLOW_SCHEMA, type FlowCursor, type FlowFile, type FlowNode, type FlowSnapshot, type FlowState, type FlowValues, type GameData, type GameDataField, type GameDataFieldType, type GameDataFields, type GameDataNodeKind, type GameEventBeat, type GrammaticalGender, type Group, HANDOFF_SCHEMA, type HandoffFile, type HandoffImport, type HandoffLine, type HandoffRow, type HostScopeDecl, type HostScopeRegistry, type HostScopeSpec, type Jump, type JumpTarget, LINE_CHARS_PER_SECOND, LINE_CHAR_WEIGHTS, LINE_DURATION_MAX, LINE_DURATION_MIN, type LineBeat, type LocaleFile, MANIFEST_EXTENSION, type NodeExtensions, PAD_AFTER_MAX, PAD_AFTER_MIN, PROJECT_EXTENSION_STEM, PROJECT_LOCALE_SCENE, PROJECT_SCHEMA, type ProjectDictionary, type ProjectExtension, type ProjectFile, type ProjectLayout, type PromptBeat, type PropertyDecl, type PropertyType, RERECORD_STATUS, RERECORD_STATUS_DECL, type RecordingFolder, type RecordingStatusDecl, SAVE_SCHEMA, SAVE_VERSION, SPEAKER_PATTERN_KEY, STRINGS_SCHEMA, SUBTITLE_READING_MIN, type SaveEnvelope, type SaveGame, type SaveGameV3, type SavedChoice, type SavedChoiceOption, type SavedChoicePrompt, type ScalarValue, type Scene, type SceneFolder, type SceneFolderLayout, type SceneNavRow, type Selector, type SelectorExhaust, type SelectorOrder, type SelectorSnapshot, type SequenceOptions, type Snippet, type SpeakerQualifier, type StackFrame, type Suggestion, type SuggestionSource, type TextBeat, UNRESOLVED_KEY, type VcsKind, type WritingStatusDecl, castStringKey, deriveRecordingFolders, effectiveGameId, estimateLineDuration, formatSpeakerLabel, isContentlessBeat, isDialogueScene, normaliseEstimateSpeed, projectLayout, projectQualifiers, qualifierStringKey, resolveSceneRef, sceneAddressIndex, sceneFolderLayout, sceneFolderPath, speakerLabelKey, textIsAction, usedQualifiers, usedSpeakerPairs, walkNodes };
1517
+ export { AUTHORING_SCHEMA, type AuthoringFile, type Beat, type Block, type Bundle, type BundleCastMember, type BundleExtension, type BundleQualifier, COMMON_GENDERS, type CaptionDelimiters, type CastMember, type Comment, type CommentMessage, type CommentRange, type CompiledBlock, type CompiledEffect, type CompiledGroup, type CompiledScene, type CompiledSnippet, type CoverageDriver, DEFAULT_CAPTION_CHARACTER, DEFAULT_CAPTION_DELIMITERS, DEFAULT_DOCUMENTATION_CLASSES, DEFAULT_ESTIMATE_SPEED, DEFAULT_LAYOUT, DEFAULT_PAD_AFTER, DEFAULT_QUALIFIERS, DEFAULT_RECORDING_STATUSES, DEFAULT_SPEAKER_PATTERN, DEFAULT_WRITING_STATUSES, type DocLine, type DocumentationClass, ESTIMATE_SPEED_MAX, ESTIMATE_SPEED_MIN, EXTENSIONS_DIR, EXTENSION_SCHEMA, EXTENSION_SHARD, type EditRecord, type Effect, type EngineSave, type EstimatingConfig, type Expression, type ExtensionFieldDecl, type ExtensionShard, FLOW_SCHEMA, type FlowCursor, type FlowFile, type FlowNode, type FlowSnapshot, type FlowState, type FlowValues, type GameData, type GameDataField, type GameDataFieldType, type GameDataFields, type GameDataNodeKind, type GameEventBeat, type GrammaticalGender, type Group, HANDOFF_SCHEMA, type HandoffFile, type HandoffImport, type HandoffLine, type HandoffRow, type HostScopeDecl, type HostScopeRegistry, type HostScopeSpec, type Jump, type JumpTarget, LINE_CHARS_PER_SECOND, LINE_CHAR_WEIGHTS, LINE_DURATION_MAX, LINE_DURATION_MIN, type LineBeat, type LocaleFile, MANIFEST_EXTENSION, type NodeExtensions, PAD_AFTER_MAX, PAD_AFTER_MIN, PLACEHOLDER_STATUS, PROJECT_EXTENSION_STEM, PROJECT_LOCALE_SCENE, PROJECT_SCHEMA, type PlaceholderSpeechConfig, type ProjectDictionary, type ProjectExtension, type ProjectFile, type ProjectLayout, type PromptBeat, type PropertyDecl, type PropertyType, RERECORD_STATUS, RERECORD_STATUS_DECL, type RecordingFolder, type RecordingStatusDecl, SAVE_SCHEMA, SAVE_VERSION, SPEAKER_PATTERN_KEY, STRINGS_SCHEMA, SUBTITLE_READING_MIN, type SaveEnvelope, type SaveGame, type SaveGameV3, type SavedChoice, type SavedChoiceOption, type SavedChoicePrompt, type ScalarValue, type Scene, type SceneFolder, type SceneFolderLayout, type SceneNavRow, type Selector, type SelectorExhaust, type SelectorOrder, type SelectorSnapshot, type SequenceOptions, type Snippet, type SpeakerQualifier, type StackFrame, type Suggestion, type SuggestionSource, type TextBeat, UNRESOLVED_KEY, type VcsKind, type WritingStatusDecl, castStringKey, deriveRecordingFolders, effectiveGameId, estimateLineDuration, formatSpeakerLabel, isContentlessBeat, isDialogueScene, normaliseEstimateSpeed, projectLayout, projectQualifiers, qualifierStringKey, resolveSceneRef, sceneAddressIndex, sceneFolderLayout, sceneFolderPath, speakerLabelKey, textIsAction, usedQualifiers, usedSpeakerPairs, walkNodes };
package/dist/index.js CHANGED
@@ -169,6 +169,7 @@ var DEFAULT_RECORDING_STATUSES = [
169
169
  { name: "final", colour: 9 }
170
170
  // purple
171
171
  ];
172
+ var PLACEHOLDER_STATUS = "placeholder";
172
173
  var RERECORD_STATUS = "rerecord";
173
174
  var RERECORD_STATUS_DECL = { name: RERECORD_STATUS, colour: 1 };
174
175
  function deriveRecordingFolders(audioRoot, statuses) {
@@ -303,6 +304,7 @@ export {
303
304
  MANIFEST_EXTENSION,
304
305
  PAD_AFTER_MAX,
305
306
  PAD_AFTER_MIN,
307
+ PLACEHOLDER_STATUS,
306
308
  PROJECT_EXTENSION_STEM,
307
309
  PROJECT_LOCALE_SCENE,
308
310
  PROJECT_SCHEMA,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@patterkit/model",
3
- "version": "1.0.1",
3
+ "version": "1.1.0",
4
4
  "description": "Patter data-model types: source (scene/block/group/snippet/beat/jump), project, locale, authoring. The shape source-of-truth.",
5
5
  "keywords": [
6
6
  "patter",
@@ -46,6 +46,6 @@
46
46
  },
47
47
  "dependencies": {
48
48
  "@wildwinter/expr": "^1.0.1",
49
- "@wildwinter/toolkit": "^1.1.0"
49
+ "@wildwinter/toolkit": "^1.2.0"
50
50
  }
51
51
  }