sb-edit-custom 0.20.133 → 0.20.135

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/lib/cli/index.js CHANGED
File without changes
@@ -6,8 +6,8 @@ export interface InfrastructureOptions {
6
6
  leopardJSURL?: string;
7
7
  }
8
8
  export declare const HELPERS_JS = "\nexport function copyPrototypeToInstance(target, proto) {\n for (const key of Object.getOwnPropertyNames(proto)) {\n if (key === \"constructor\") continue\n const desc = Object.getOwnPropertyDescriptor(proto, key)\n if (desc) Object.defineProperty(target, key, { ...desc, enumerable: true })\n }\n}\n\n// Global construction context\n// Set during sprite/stage construction so free functions can register triggers\nlet _constructingTarget = null;\n\nexport function setConstructingTarget(target) {\n _constructingTarget = target;\n}\n\nexport function clearConstructingTarget() {\n _constructingTarget = null;\n}\n\nexport function getConstructingTarget() {\n return _constructingTarget;\n}\n";
9
- export declare const GAME_SPRITE_JS = "\nimport { Sprite, Trigger, Costume, Sound, Watcher } from \"./userApi.js\";\nimport { getSpriteAssets } from \"./assetRegistry.js\"\nimport { CostumeScale } from \"./constants.js\"\n\nexport class GameSprite extends Sprite {\n constructor(...args) {\n super(...args)\n\n const opts = args[0] ?? {}\n const spriteId = (opts && typeof opts === \"object\" && opts.spriteId) || this.constructor.name\n\n const assets = getSpriteAssets(spriteId)\n if (!assets) {\n this._triggers = []\n return\n }\n\n this.costumes = assets.costumes ?? []\n this.sounds = assets.sounds ?? []\n this._triggers = []\n }\n\n whenGreenFlag(method) { this._addTrigger(Trigger.GREEN_FLAG, null, method) }\n whenKeyPressed(keyOrOptions, method) {\n const options = typeof keyOrOptions === 'object' ? keyOrOptions : { key: keyOrOptions };\n this._addTrigger(Trigger.KEY_PRESSED, options, method)\n }\n whenBroadcast(nameOrOptions, method) {\n const options = typeof nameOrOptions === 'object' ? nameOrOptions : { name: nameOrOptions };\n this._addTrigger(Trigger.BROADCAST, options, method)\n }\n whenClicked(method) { this._addTrigger(Trigger.CLICKED, null, method) }\n whenTouchStart(method) { this._addTrigger(Trigger.TOUCH_START, null, method) }\n whenTouchEnd(method) { this._addTrigger(Trigger.TOUCH_END, null, method) }\n whenTouchMove(method) { this._addTrigger(Trigger.TOUCH_MOVE, null, method) }\n whenCloneStart(method) { this._addTrigger(Trigger.CLONE_START, null, method) }\n whenBackdropChanged(method) { this._addTrigger(Trigger.BACKDROP_CHANGED, null, method) }\n\n /**\n * Create a variable with an initial value, optionally with a watcher.\n * @param {string} name - Variable name (key in this.vars and this.watchers)\n * @param {*} initialValue - Initial value for the variable\n * @param {object} [options] - Watcher configuration options. If omitted, no watcher is created.\n */\n createVar(name, initialValue, options) {\n this.vars[name] = initialValue\n if (options !== undefined) {\n const defaultLabel = this.constructor.name === 'Stage' ? name : `${this.constructor.name}: ${name}`\n this.watchers[name] = new Watcher({\n label: options.label ?? defaultLabel,\n style: options.style ?? \"normal\",\n visible: options.visible ?? false,\n value: () => this.vars[name],\n setValue: options.setValue ?? ((value) => { this.vars[name] = value }),\n step: options.step,\n min: options.min,\n max: options.max,\n x: options.x ?? 245,\n y: options.y ?? 175,\n width: options.width,\n height: options.height,\n })\n }\n }\n\n /**\n * Set a variable's value.\n * @param {string} name - Variable name (key in this.vars)\n * @param {*} value - New value\n */\n setVar(name, value) {\n this.vars[name] = value\n }\n\n /**\n * Show a variable watcher. No-op if watcher doesn't exist.\n * @param {string} name - Variable name (key in this.watchers)\n */\n showVar(name) {\n if (!this.watchers[name]) return\n this.watchers[name].visible = true\n }\n\n /**\n * Hide a variable watcher. No-op if watcher doesn't exist.\n * @param {string} name - Variable name (key in this.watchers)\n */\n hideVar(name) {\n if (!this.watchers[name]) return\n this.watchers[name].visible = false\n }\n\n /**\n * Move a variable watcher to a new position.\n * @param {string} name - Variable name (key in this.watchers)\n * @param {number} x - New x position\n * @param {number} y - New y position\n */\n moveVar(name, x, y) {\n if (!this.watchers[name]) return\n this.watchers[name].x = x\n this.watchers[name].y = y\n }\n\n _addTrigger(typeConst, options, method) {\n const fn = typeof method === \"string\" ? this[method] : method\n if (typeof fn !== \"function\") {\n throw new Error(`${this.constructor.name}: missing method \"${String(method)}\"`)\n }\n this._triggers.push(options ? new Trigger(typeConst, options, fn) : new Trigger(typeConst, fn))\n }\n\n _finalizeTriggers() {\n this.triggers = this._triggers\n }\n}\n";
10
- export declare const GAME_STAGE_JS = "\nimport { Stage as StageBase, Trigger, Watcher, Costume, Color, Project, Sound } from './userApi.js';\nimport { getSpriteAssets } from \"./assetRegistry.js\"\nimport { CostumeScale } from \"./constants.js\"\n\nexport class GameStage extends StageBase {\n constructor(...args) {\n super(...args)\n\n const assets = getSpriteAssets(\"Stage\")\n\n if (!assets) {\n this.costumes = []\n this.sounds = []\n this.stageVars ??= {}\n this._triggers = []\n return\n }\n\n this.costumes = assets.costumes ?? []\n this.sounds = assets.sounds ?? []\n this.stageVars ??= {}\n this._triggers = []\n }\n\n whenGreenFlag(method) {\n this._addTrigger(Trigger.GREEN_FLAG, null, method)\n }\n\n whenKeyPressed(key, method) {\n this._addTrigger(Trigger.KEY_PRESSED, { key }, method)\n }\n\n whenBroadcast(name, method) {\n this._addTrigger(Trigger.BROADCAST, { name }, method)\n }\n\n /**\n * Create a variable with an initial value, optionally with a watcher.\n * @param {string} name - Variable name (key in this.vars and this.watchers)\n * @param {*} initialValue - Initial value for the variable\n * @param {object} [options] - Watcher configuration options. If omitted, no watcher is created.\n */\n createVar(name, initialValue, options) {\n this.vars[name] = initialValue\n if (options !== undefined) {\n this.watchers[name] = new Watcher({\n label: options.label ?? name,\n style: options.style ?? \"normal\",\n visible: options.visible ?? false,\n value: () => this.vars[name],\n setValue: options.setValue ?? ((value) => { this.vars[name] = value }),\n step: options.step,\n min: options.min,\n max: options.max,\n x: options.x ?? 245,\n y: options.y ?? 175,\n width: options.width,\n height: options.height,\n })\n }\n }\n\n /**\n * Set a variable's value.\n * @param {string} name - Variable name (key in this.vars)\n * @param {*} value - New value\n */\n setVar(name, value) {\n this.vars[name] = value\n }\n\n /**\n * Show a variable watcher. No-op if watcher doesn't exist.\n * @param {string} name - Variable name (key in this.watchers)\n */\n showVar(name) {\n if (!this.watchers[name]) return\n this.watchers[name].visible = true\n }\n\n /**\n * Hide a variable watcher. No-op if watcher doesn't exist.\n * @param {string} name - Variable name (key in this.watchers)\n */\n hideVar(name) {\n if (!this.watchers[name]) return\n this.watchers[name].visible = false\n }\n\n /**\n * Move a variable watcher to a new position.\n * @param {string} name - Variable name (key in this.watchers)\n * @param {number} x - New x position\n * @param {number} y - New y position\n */\n moveVar(name, x, y) {\n if (!this.watchers[name]) return\n this.watchers[name].x = x\n this.watchers[name].y = y\n }\n\n _addTrigger(typeConst, options, method) {\n const fn = typeof method === \"string\" ? this[method] : method\n if (typeof fn !== \"function\") {\n throw new Error(`${this.constructor.name}: missing stage handler \"${String(method)}\"`)\n }\n this._triggers.push(\n options ? new Trigger(typeConst, options, fn) : new Trigger(typeConst, fn),\n )\n }\n\n _finalizeTriggers() {\n this.triggers = this._triggers\n }\n}\n";
9
+ export declare const GAME_SPRITE_JS = "\nimport { Sprite, Trigger, Costume, Sound, Watcher } from \"./userApi.js\";\nimport { getSpriteAssets } from \"./assetRegistry.js\"\nimport { CostumeScale } from \"./constants.js\"\n\nexport class GameSprite extends Sprite {\n constructor(...args) {\n super(...args)\n\n const opts = args[0] ?? {}\n const spriteId = (opts && typeof opts === \"object\" && opts.spriteId) || this.constructor.name\n\n const assets = getSpriteAssets(spriteId)\n if (!assets) {\n this._triggers = []\n return\n }\n\n this.costumes = Object.values(assets.costumes ?? {})\n this.sounds = Object.values(assets.sounds ?? {})\n this._triggers = []\n }\n\n whenGreenFlag(method) { this._addTrigger(Trigger.GREEN_FLAG, null, method) }\n whenKeyPressed(keyOrOptions, method) {\n const options = typeof keyOrOptions === 'object' ? keyOrOptions : { key: keyOrOptions };\n this._addTrigger(Trigger.KEY_PRESSED, options, method)\n }\n whenBroadcast(nameOrOptions, method) {\n const options = typeof nameOrOptions === 'object' ? nameOrOptions : { name: nameOrOptions };\n this._addTrigger(Trigger.BROADCAST, options, method)\n }\n whenClicked(method) { this._addTrigger(Trigger.CLICKED, null, method) }\n whenTouchStart(method) { this._addTrigger(Trigger.TOUCH_START, null, method) }\n whenTouchEnd(method) { this._addTrigger(Trigger.TOUCH_END, null, method) }\n whenTouchMove(method) { this._addTrigger(Trigger.TOUCH_MOVE, null, method) }\n whenCloneStart(method) { this._addTrigger(Trigger.CLONE_START, null, method) }\n whenBackdropChanged(method) { this._addTrigger(Trigger.BACKDROP_CHANGED, null, method) }\n\n /**\n * Create a variable with an initial value, optionally with a watcher.\n * @param {string} name - Variable name (key in this.vars and this.watchers)\n * @param {*} initialValue - Initial value for the variable\n * @param {object} [options] - Watcher configuration options. If omitted, no watcher is created.\n */\n createVar(name, initialValue, options) {\n this.vars[name] = initialValue\n if (options !== undefined) {\n const defaultLabel = this.constructor.name === 'Stage' ? name : `${this.constructor.name}: ${name}`\n this.watchers[name] = new Watcher({\n label: options.label ?? defaultLabel,\n style: options.style ?? \"normal\",\n visible: options.visible ?? false,\n value: () => this.vars[name],\n setValue: options.setValue ?? ((value) => { this.vars[name] = value }),\n step: options.step,\n min: options.min,\n max: options.max,\n x: options.x ?? 245,\n y: options.y ?? 175,\n width: options.width,\n height: options.height,\n })\n }\n }\n\n /**\n * Set a variable's value.\n * @param {string} name - Variable name (key in this.vars)\n * @param {*} value - New value\n */\n setVar(name, value) {\n this.vars[name] = value\n }\n\n /**\n * Show a variable watcher. No-op if watcher doesn't exist.\n * @param {string} name - Variable name (key in this.watchers)\n */\n showVar(name) {\n if (!this.watchers[name]) return\n this.watchers[name].visible = true\n }\n\n /**\n * Hide a variable watcher. No-op if watcher doesn't exist.\n * @param {string} name - Variable name (key in this.watchers)\n */\n hideVar(name) {\n if (!this.watchers[name]) return\n this.watchers[name].visible = false\n }\n\n /**\n * Move a variable watcher to a new position.\n * @param {string} name - Variable name (key in this.watchers)\n * @param {number} x - New x position\n * @param {number} y - New y position\n */\n moveVar(name, x, y) {\n if (!this.watchers[name]) return\n this.watchers[name].x = x\n this.watchers[name].y = y\n }\n\n _addTrigger(typeConst, options, method) {\n const fn = typeof method === \"string\" ? this[method] : method\n if (typeof fn !== \"function\") {\n throw new Error(`${this.constructor.name}: missing method \"${String(method)}\"`)\n }\n this._triggers.push(options ? new Trigger(typeConst, options, fn) : new Trigger(typeConst, fn))\n }\n\n _finalizeTriggers() {\n this.triggers = this._triggers\n }\n}\n";
10
+ export declare const GAME_STAGE_JS = "\nimport { Stage as StageBase, Trigger, Watcher, Costume, Color, Project, Sound } from './userApi.js';\nimport { getSpriteAssets } from \"./assetRegistry.js\"\nimport { CostumeScale } from \"./constants.js\"\n\nexport class GameStage extends StageBase {\n constructor(...args) {\n super(...args)\n\n const assets = getSpriteAssets(\"Stage\")\n\n if (!assets) {\n this.costumes = []\n this.sounds = []\n this.stageVars ??= {}\n this._triggers = []\n return\n }\n\n this.costumes = Object.values(assets.costumes ?? {})\n this.sounds = Object.values(assets.sounds ?? {})\n this.stageVars ??= {}\n this._triggers = []\n }\n\n whenGreenFlag(method) {\n this._addTrigger(Trigger.GREEN_FLAG, null, method)\n }\n\n whenKeyPressed(key, method) {\n this._addTrigger(Trigger.KEY_PRESSED, { key }, method)\n }\n\n whenBroadcast(name, method) {\n this._addTrigger(Trigger.BROADCAST, { name }, method)\n }\n\n /**\n * Create a variable with an initial value, optionally with a watcher.\n * @param {string} name - Variable name (key in this.vars and this.watchers)\n * @param {*} initialValue - Initial value for the variable\n * @param {object} [options] - Watcher configuration options. If omitted, no watcher is created.\n */\n createVar(name, initialValue, options) {\n this.vars[name] = initialValue\n if (options !== undefined) {\n this.watchers[name] = new Watcher({\n label: options.label ?? name,\n style: options.style ?? \"normal\",\n visible: options.visible ?? false,\n value: () => this.vars[name],\n setValue: options.setValue ?? ((value) => { this.vars[name] = value }),\n step: options.step,\n min: options.min,\n max: options.max,\n x: options.x ?? 245,\n y: options.y ?? 175,\n width: options.width,\n height: options.height,\n })\n }\n }\n\n /**\n * Set a variable's value.\n * @param {string} name - Variable name (key in this.vars)\n * @param {*} value - New value\n */\n setVar(name, value) {\n this.vars[name] = value\n }\n\n /**\n * Show a variable watcher. No-op if watcher doesn't exist.\n * @param {string} name - Variable name (key in this.watchers)\n */\n showVar(name) {\n if (!this.watchers[name]) return\n this.watchers[name].visible = true\n }\n\n /**\n * Hide a variable watcher. No-op if watcher doesn't exist.\n * @param {string} name - Variable name (key in this.watchers)\n */\n hideVar(name) {\n if (!this.watchers[name]) return\n this.watchers[name].visible = false\n }\n\n /**\n * Move a variable watcher to a new position.\n * @param {string} name - Variable name (key in this.watchers)\n * @param {number} x - New x position\n * @param {number} y - New y position\n */\n moveVar(name, x, y) {\n if (!this.watchers[name]) return\n this.watchers[name].x = x\n this.watchers[name].y = y\n }\n\n _addTrigger(typeConst, options, method) {\n const fn = typeof method === \"string\" ? this[method] : method\n if (typeof fn !== \"function\") {\n throw new Error(`${this.constructor.name}: missing stage handler \"${String(method)}\"`)\n }\n this._triggers.push(\n options ? new Trigger(typeConst, options, fn) : new Trigger(typeConst, fn),\n )\n }\n\n _finalizeTriggers() {\n this.triggers = this._triggers\n }\n}\n";
11
11
  export declare const WRAP_SPRITE_CLASS_JS = "\nimport { GameSprite } from \"./GameSprite.js\"\nimport { copyPrototypeToInstance, setConstructingTarget, clearConstructingTarget } from \"./helpers.js\"\n\nexport function wrapSpriteClass(UserClass) {\n if (UserClass.prototype?.hasOwnProperty(\"constructor\")) {\n const userCtor = UserClass.prototype.constructor\n if (userCtor && userCtor !== UserClass) {\n throw new Error(`${UserClass.name}: Please use init() instead of constructor()`)\n }\n }\n\n var spriteId = UserClass.name;\n\n return class WrappedSprite extends GameSprite {\n constructor(...args) {\n var opts = args[0] ?? {}\n args[0] = { ...opts, spriteId: spriteId }\n super(...args)\n\n copyPrototypeToInstance(this, UserClass.prototype)\n\n setConstructingTarget(this)\n try {\n if (typeof this.init === \"function\") this.init()\n } finally {\n clearConstructingTarget()\n }\n\n this._finalizeTriggers()\n }\n }\n}\n";
12
12
  export declare const WRAP_STAGE_CLASS_JS = "\nimport { GameStage } from \"./GameStage.js\"\nimport { copyPrototypeToInstance, setConstructingTarget, clearConstructingTarget } from \"./helpers.js\"\n\nexport function wrapStageClass(UserClass) {\n return class WrappedStage extends GameStage {\n constructor(...args) {\n super(...args)\n\n copyPrototypeToInstance(this, UserClass.prototype)\n\n setConstructingTarget(this)\n try {\n if (typeof this.init === \"function\") this.init(...args)\n } finally {\n clearConstructingTarget()\n }\n\n this._finalizeTriggers()\n }\n }\n}\n";
13
13
  export declare const getUserApiJS: (_leopardJSURL?: string) => string;
@@ -7,8 +7,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.getInfrastructureFiles = exports.REGISTRATION_RUNTIME_JS = exports.SPRITE_FUNCS_JS = exports.getUserApiJS = exports.WRAP_STAGE_CLASS_JS = exports.WRAP_SPRITE_CLASS_JS = exports.GAME_STAGE_JS = exports.GAME_SPRITE_JS = exports.HELPERS_JS = void 0;
8
8
  var DEFAULT_LEOPARD_JS_URL = "https://pub-3089f37cd1294d71b62f5431c86b90ef.r2.dev/dist-static-new/index.esm.js";
9
9
  exports.HELPERS_JS = "\nexport function copyPrototypeToInstance(target, proto) {\n for (const key of Object.getOwnPropertyNames(proto)) {\n if (key === \"constructor\") continue\n const desc = Object.getOwnPropertyDescriptor(proto, key)\n if (desc) Object.defineProperty(target, key, { ...desc, enumerable: true })\n }\n}\n\n// Global construction context\n// Set during sprite/stage construction so free functions can register triggers\nlet _constructingTarget = null;\n\nexport function setConstructingTarget(target) {\n _constructingTarget = target;\n}\n\nexport function clearConstructingTarget() {\n _constructingTarget = null;\n}\n\nexport function getConstructingTarget() {\n return _constructingTarget;\n}\n";
10
- exports.GAME_SPRITE_JS = "\nimport { Sprite, Trigger, Costume, Sound, Watcher } from \"./userApi.js\";\nimport { getSpriteAssets } from \"./assetRegistry.js\"\nimport { CostumeScale } from \"./constants.js\"\n\nexport class GameSprite extends Sprite {\n constructor(...args) {\n super(...args)\n\n const opts = args[0] ?? {}\n const spriteId = (opts && typeof opts === \"object\" && opts.spriteId) || this.constructor.name\n\n const assets = getSpriteAssets(spriteId)\n if (!assets) {\n this._triggers = []\n return\n }\n\n this.costumes = assets.costumes ?? []\n this.sounds = assets.sounds ?? []\n this._triggers = []\n }\n\n whenGreenFlag(method) { this._addTrigger(Trigger.GREEN_FLAG, null, method) }\n whenKeyPressed(keyOrOptions, method) {\n const options = typeof keyOrOptions === 'object' ? keyOrOptions : { key: keyOrOptions };\n this._addTrigger(Trigger.KEY_PRESSED, options, method)\n }\n whenBroadcast(nameOrOptions, method) {\n const options = typeof nameOrOptions === 'object' ? nameOrOptions : { name: nameOrOptions };\n this._addTrigger(Trigger.BROADCAST, options, method)\n }\n whenClicked(method) { this._addTrigger(Trigger.CLICKED, null, method) }\n whenTouchStart(method) { this._addTrigger(Trigger.TOUCH_START, null, method) }\n whenTouchEnd(method) { this._addTrigger(Trigger.TOUCH_END, null, method) }\n whenTouchMove(method) { this._addTrigger(Trigger.TOUCH_MOVE, null, method) }\n whenCloneStart(method) { this._addTrigger(Trigger.CLONE_START, null, method) }\n whenBackdropChanged(method) { this._addTrigger(Trigger.BACKDROP_CHANGED, null, method) }\n\n /**\n * Create a variable with an initial value, optionally with a watcher.\n * @param {string} name - Variable name (key in this.vars and this.watchers)\n * @param {*} initialValue - Initial value for the variable\n * @param {object} [options] - Watcher configuration options. If omitted, no watcher is created.\n */\n createVar(name, initialValue, options) {\n this.vars[name] = initialValue\n if (options !== undefined) {\n const defaultLabel = this.constructor.name === 'Stage' ? name : `${this.constructor.name}: ${name}`\n this.watchers[name] = new Watcher({\n label: options.label ?? defaultLabel,\n style: options.style ?? \"normal\",\n visible: options.visible ?? false,\n value: () => this.vars[name],\n setValue: options.setValue ?? ((value) => { this.vars[name] = value }),\n step: options.step,\n min: options.min,\n max: options.max,\n x: options.x ?? 245,\n y: options.y ?? 175,\n width: options.width,\n height: options.height,\n })\n }\n }\n\n /**\n * Set a variable's value.\n * @param {string} name - Variable name (key in this.vars)\n * @param {*} value - New value\n */\n setVar(name, value) {\n this.vars[name] = value\n }\n\n /**\n * Show a variable watcher. No-op if watcher doesn't exist.\n * @param {string} name - Variable name (key in this.watchers)\n */\n showVar(name) {\n if (!this.watchers[name]) return\n this.watchers[name].visible = true\n }\n\n /**\n * Hide a variable watcher. No-op if watcher doesn't exist.\n * @param {string} name - Variable name (key in this.watchers)\n */\n hideVar(name) {\n if (!this.watchers[name]) return\n this.watchers[name].visible = false\n }\n\n /**\n * Move a variable watcher to a new position.\n * @param {string} name - Variable name (key in this.watchers)\n * @param {number} x - New x position\n * @param {number} y - New y position\n */\n moveVar(name, x, y) {\n if (!this.watchers[name]) return\n this.watchers[name].x = x\n this.watchers[name].y = y\n }\n\n _addTrigger(typeConst, options, method) {\n const fn = typeof method === \"string\" ? this[method] : method\n if (typeof fn !== \"function\") {\n throw new Error(`${this.constructor.name}: missing method \"${String(method)}\"`)\n }\n this._triggers.push(options ? new Trigger(typeConst, options, fn) : new Trigger(typeConst, fn))\n }\n\n _finalizeTriggers() {\n this.triggers = this._triggers\n }\n}\n";
11
- exports.GAME_STAGE_JS = "\nimport { Stage as StageBase, Trigger, Watcher, Costume, Color, Project, Sound } from './userApi.js';\nimport { getSpriteAssets } from \"./assetRegistry.js\"\nimport { CostumeScale } from \"./constants.js\"\n\nexport class GameStage extends StageBase {\n constructor(...args) {\n super(...args)\n\n const assets = getSpriteAssets(\"Stage\")\n\n if (!assets) {\n this.costumes = []\n this.sounds = []\n this.stageVars ??= {}\n this._triggers = []\n return\n }\n\n this.costumes = assets.costumes ?? []\n this.sounds = assets.sounds ?? []\n this.stageVars ??= {}\n this._triggers = []\n }\n\n whenGreenFlag(method) {\n this._addTrigger(Trigger.GREEN_FLAG, null, method)\n }\n\n whenKeyPressed(key, method) {\n this._addTrigger(Trigger.KEY_PRESSED, { key }, method)\n }\n\n whenBroadcast(name, method) {\n this._addTrigger(Trigger.BROADCAST, { name }, method)\n }\n\n /**\n * Create a variable with an initial value, optionally with a watcher.\n * @param {string} name - Variable name (key in this.vars and this.watchers)\n * @param {*} initialValue - Initial value for the variable\n * @param {object} [options] - Watcher configuration options. If omitted, no watcher is created.\n */\n createVar(name, initialValue, options) {\n this.vars[name] = initialValue\n if (options !== undefined) {\n this.watchers[name] = new Watcher({\n label: options.label ?? name,\n style: options.style ?? \"normal\",\n visible: options.visible ?? false,\n value: () => this.vars[name],\n setValue: options.setValue ?? ((value) => { this.vars[name] = value }),\n step: options.step,\n min: options.min,\n max: options.max,\n x: options.x ?? 245,\n y: options.y ?? 175,\n width: options.width,\n height: options.height,\n })\n }\n }\n\n /**\n * Set a variable's value.\n * @param {string} name - Variable name (key in this.vars)\n * @param {*} value - New value\n */\n setVar(name, value) {\n this.vars[name] = value\n }\n\n /**\n * Show a variable watcher. No-op if watcher doesn't exist.\n * @param {string} name - Variable name (key in this.watchers)\n */\n showVar(name) {\n if (!this.watchers[name]) return\n this.watchers[name].visible = true\n }\n\n /**\n * Hide a variable watcher. No-op if watcher doesn't exist.\n * @param {string} name - Variable name (key in this.watchers)\n */\n hideVar(name) {\n if (!this.watchers[name]) return\n this.watchers[name].visible = false\n }\n\n /**\n * Move a variable watcher to a new position.\n * @param {string} name - Variable name (key in this.watchers)\n * @param {number} x - New x position\n * @param {number} y - New y position\n */\n moveVar(name, x, y) {\n if (!this.watchers[name]) return\n this.watchers[name].x = x\n this.watchers[name].y = y\n }\n\n _addTrigger(typeConst, options, method) {\n const fn = typeof method === \"string\" ? this[method] : method\n if (typeof fn !== \"function\") {\n throw new Error(`${this.constructor.name}: missing stage handler \"${String(method)}\"`)\n }\n this._triggers.push(\n options ? new Trigger(typeConst, options, fn) : new Trigger(typeConst, fn),\n )\n }\n\n _finalizeTriggers() {\n this.triggers = this._triggers\n }\n}\n";
10
+ exports.GAME_SPRITE_JS = "\nimport { Sprite, Trigger, Costume, Sound, Watcher } from \"./userApi.js\";\nimport { getSpriteAssets } from \"./assetRegistry.js\"\nimport { CostumeScale } from \"./constants.js\"\n\nexport class GameSprite extends Sprite {\n constructor(...args) {\n super(...args)\n\n const opts = args[0] ?? {}\n const spriteId = (opts && typeof opts === \"object\" && opts.spriteId) || this.constructor.name\n\n const assets = getSpriteAssets(spriteId)\n if (!assets) {\n this._triggers = []\n return\n }\n\n this.costumes = Object.values(assets.costumes ?? {})\n this.sounds = Object.values(assets.sounds ?? {})\n this._triggers = []\n }\n\n whenGreenFlag(method) { this._addTrigger(Trigger.GREEN_FLAG, null, method) }\n whenKeyPressed(keyOrOptions, method) {\n const options = typeof keyOrOptions === 'object' ? keyOrOptions : { key: keyOrOptions };\n this._addTrigger(Trigger.KEY_PRESSED, options, method)\n }\n whenBroadcast(nameOrOptions, method) {\n const options = typeof nameOrOptions === 'object' ? nameOrOptions : { name: nameOrOptions };\n this._addTrigger(Trigger.BROADCAST, options, method)\n }\n whenClicked(method) { this._addTrigger(Trigger.CLICKED, null, method) }\n whenTouchStart(method) { this._addTrigger(Trigger.TOUCH_START, null, method) }\n whenTouchEnd(method) { this._addTrigger(Trigger.TOUCH_END, null, method) }\n whenTouchMove(method) { this._addTrigger(Trigger.TOUCH_MOVE, null, method) }\n whenCloneStart(method) { this._addTrigger(Trigger.CLONE_START, null, method) }\n whenBackdropChanged(method) { this._addTrigger(Trigger.BACKDROP_CHANGED, null, method) }\n\n /**\n * Create a variable with an initial value, optionally with a watcher.\n * @param {string} name - Variable name (key in this.vars and this.watchers)\n * @param {*} initialValue - Initial value for the variable\n * @param {object} [options] - Watcher configuration options. If omitted, no watcher is created.\n */\n createVar(name, initialValue, options) {\n this.vars[name] = initialValue\n if (options !== undefined) {\n const defaultLabel = this.constructor.name === 'Stage' ? name : `${this.constructor.name}: ${name}`\n this.watchers[name] = new Watcher({\n label: options.label ?? defaultLabel,\n style: options.style ?? \"normal\",\n visible: options.visible ?? false,\n value: () => this.vars[name],\n setValue: options.setValue ?? ((value) => { this.vars[name] = value }),\n step: options.step,\n min: options.min,\n max: options.max,\n x: options.x ?? 245,\n y: options.y ?? 175,\n width: options.width,\n height: options.height,\n })\n }\n }\n\n /**\n * Set a variable's value.\n * @param {string} name - Variable name (key in this.vars)\n * @param {*} value - New value\n */\n setVar(name, value) {\n this.vars[name] = value\n }\n\n /**\n * Show a variable watcher. No-op if watcher doesn't exist.\n * @param {string} name - Variable name (key in this.watchers)\n */\n showVar(name) {\n if (!this.watchers[name]) return\n this.watchers[name].visible = true\n }\n\n /**\n * Hide a variable watcher. No-op if watcher doesn't exist.\n * @param {string} name - Variable name (key in this.watchers)\n */\n hideVar(name) {\n if (!this.watchers[name]) return\n this.watchers[name].visible = false\n }\n\n /**\n * Move a variable watcher to a new position.\n * @param {string} name - Variable name (key in this.watchers)\n * @param {number} x - New x position\n * @param {number} y - New y position\n */\n moveVar(name, x, y) {\n if (!this.watchers[name]) return\n this.watchers[name].x = x\n this.watchers[name].y = y\n }\n\n _addTrigger(typeConst, options, method) {\n const fn = typeof method === \"string\" ? this[method] : method\n if (typeof fn !== \"function\") {\n throw new Error(`${this.constructor.name}: missing method \"${String(method)}\"`)\n }\n this._triggers.push(options ? new Trigger(typeConst, options, fn) : new Trigger(typeConst, fn))\n }\n\n _finalizeTriggers() {\n this.triggers = this._triggers\n }\n}\n";
11
+ exports.GAME_STAGE_JS = "\nimport { Stage as StageBase, Trigger, Watcher, Costume, Color, Project, Sound } from './userApi.js';\nimport { getSpriteAssets } from \"./assetRegistry.js\"\nimport { CostumeScale } from \"./constants.js\"\n\nexport class GameStage extends StageBase {\n constructor(...args) {\n super(...args)\n\n const assets = getSpriteAssets(\"Stage\")\n\n if (!assets) {\n this.costumes = []\n this.sounds = []\n this.stageVars ??= {}\n this._triggers = []\n return\n }\n\n this.costumes = Object.values(assets.costumes ?? {})\n this.sounds = Object.values(assets.sounds ?? {})\n this.stageVars ??= {}\n this._triggers = []\n }\n\n whenGreenFlag(method) {\n this._addTrigger(Trigger.GREEN_FLAG, null, method)\n }\n\n whenKeyPressed(key, method) {\n this._addTrigger(Trigger.KEY_PRESSED, { key }, method)\n }\n\n whenBroadcast(name, method) {\n this._addTrigger(Trigger.BROADCAST, { name }, method)\n }\n\n /**\n * Create a variable with an initial value, optionally with a watcher.\n * @param {string} name - Variable name (key in this.vars and this.watchers)\n * @param {*} initialValue - Initial value for the variable\n * @param {object} [options] - Watcher configuration options. If omitted, no watcher is created.\n */\n createVar(name, initialValue, options) {\n this.vars[name] = initialValue\n if (options !== undefined) {\n this.watchers[name] = new Watcher({\n label: options.label ?? name,\n style: options.style ?? \"normal\",\n visible: options.visible ?? false,\n value: () => this.vars[name],\n setValue: options.setValue ?? ((value) => { this.vars[name] = value }),\n step: options.step,\n min: options.min,\n max: options.max,\n x: options.x ?? 245,\n y: options.y ?? 175,\n width: options.width,\n height: options.height,\n })\n }\n }\n\n /**\n * Set a variable's value.\n * @param {string} name - Variable name (key in this.vars)\n * @param {*} value - New value\n */\n setVar(name, value) {\n this.vars[name] = value\n }\n\n /**\n * Show a variable watcher. No-op if watcher doesn't exist.\n * @param {string} name - Variable name (key in this.watchers)\n */\n showVar(name) {\n if (!this.watchers[name]) return\n this.watchers[name].visible = true\n }\n\n /**\n * Hide a variable watcher. No-op if watcher doesn't exist.\n * @param {string} name - Variable name (key in this.watchers)\n */\n hideVar(name) {\n if (!this.watchers[name]) return\n this.watchers[name].visible = false\n }\n\n /**\n * Move a variable watcher to a new position.\n * @param {string} name - Variable name (key in this.watchers)\n * @param {number} x - New x position\n * @param {number} y - New y position\n */\n moveVar(name, x, y) {\n if (!this.watchers[name]) return\n this.watchers[name].x = x\n this.watchers[name].y = y\n }\n\n _addTrigger(typeConst, options, method) {\n const fn = typeof method === \"string\" ? this[method] : method\n if (typeof fn !== \"function\") {\n throw new Error(`${this.constructor.name}: missing stage handler \"${String(method)}\"`)\n }\n this._triggers.push(\n options ? new Trigger(typeConst, options, fn) : new Trigger(typeConst, fn),\n )\n }\n\n _finalizeTriggers() {\n this.triggers = this._triggers\n }\n}\n";
12
12
  exports.WRAP_SPRITE_CLASS_JS = "\nimport { GameSprite } from \"./GameSprite.js\"\nimport { copyPrototypeToInstance, setConstructingTarget, clearConstructingTarget } from \"./helpers.js\"\n\nexport function wrapSpriteClass(UserClass) {\n if (UserClass.prototype?.hasOwnProperty(\"constructor\")) {\n const userCtor = UserClass.prototype.constructor\n if (userCtor && userCtor !== UserClass) {\n throw new Error(`${UserClass.name}: Please use init() instead of constructor()`)\n }\n }\n\n var spriteId = UserClass.name;\n\n return class WrappedSprite extends GameSprite {\n constructor(...args) {\n var opts = args[0] ?? {}\n args[0] = { ...opts, spriteId: spriteId }\n super(...args)\n\n copyPrototypeToInstance(this, UserClass.prototype)\n\n setConstructingTarget(this)\n try {\n if (typeof this.init === \"function\") this.init()\n } finally {\n clearConstructingTarget()\n }\n\n this._finalizeTriggers()\n }\n }\n}\n";
13
13
  exports.WRAP_STAGE_CLASS_JS = "\nimport { GameStage } from \"./GameStage.js\"\nimport { copyPrototypeToInstance, setConstructingTarget, clearConstructingTarget } from \"./helpers.js\"\n\nexport function wrapStageClass(UserClass) {\n return class WrappedStage extends GameStage {\n constructor(...args) {\n super(...args)\n\n copyPrototypeToInstance(this, UserClass.prototype)\n\n setConstructingTarget(this)\n try {\n if (typeof this.init === \"function\") this.init(...args)\n } finally {\n clearConstructingTarget()\n }\n\n this._finalizeTriggers()\n }\n }\n}\n";
14
14
  var getUserApiJS = function (_leopardJSURL) { return "\n// userApi.js - Leopard class re-exports for sprite files\n// In bundled mode, this file is empty - Leopard classes come from window globals.\n// In ES module mode, sprite files import directly from the Leopard library URL.\n"; };
@@ -29,4 +29,4 @@ var getInfrastructureFiles = function (options) {
29
29
  });
30
30
  };
31
31
  exports.getInfrastructureFiles = getInfrastructureFiles;
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5mcmFzdHJ1Y3R1cmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW8vbGVvcGFyZC9pbmZyYXN0cnVjdHVyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7QUFNSCxJQUFNLHNCQUFzQixHQUFHLGtGQUFrRixDQUFDO0FBRXJHLFFBQUEsVUFBVSxHQUFHLHFzQkF3QnpCLENBQUM7QUFFVyxRQUFBLGNBQWMsR0FBRyxxa0lBcUg3QixDQUFDO0FBRVcsUUFBQSxhQUFhLEdBQUcsNHpHQW9INUIsQ0FBQztBQUVXLFFBQUEsb0JBQW9CLEdBQUcsNDhCQWlDbkMsQ0FBQztBQUVXLFFBQUEsbUJBQW1CLEdBQUcsK2tCQXNCbEMsQ0FBQztBQUVLLElBQU0sWUFBWSxHQUFHLFVBQUMsYUFBc0IsSUFBSyxPQUFBLHFPQUl2RCxFQUp1RCxDQUl2RCxDQUFDO0FBSlcsUUFBQSxZQUFZLGdCQUl2QjtBQUVXLFFBQUEsZUFBZSxHQUFHLHdsVUEyaEI5QixDQUFDO0FBRVcsUUFBQSx1QkFBdUIsR0FBRywrcUJBc0J0QyxDQUFDO0FBRUssSUFBTSxzQkFBc0IsR0FBRyxVQUFDLE9BQW1DO0lBQW5DLHdCQUFBLEVBQUEsWUFBbUM7SUFBSyxPQUFBLENBQUM7UUFDOUUsWUFBWSxFQUFFLElBQUEsb0JBQVksRUFBQyxPQUFPLENBQUMsWUFBWSxDQUFDO1FBQ2hELFlBQVksRUFBRSxrQkFBVTtRQUN4QixnQkFBZ0IsRUFBRSx1QkFBZTtRQUNqQyxlQUFlLEVBQUUsc0JBQWM7UUFDL0IsY0FBYyxFQUFFLHFCQUFhO1FBQzdCLG9CQUFvQixFQUFFLDRCQUFvQjtRQUMxQyxtQkFBbUIsRUFBRSwyQkFBbUI7UUFDeEMsd0JBQXdCLEVBQUUsK0JBQXVCO0tBQ2xELENBQUM7QUFUNkUsQ0FTN0UsQ0FBQztBQVRVLFFBQUEsc0JBQXNCLDBCQVNoQyJ9
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5mcmFzdHJ1Y3R1cmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW8vbGVvcGFyZC9pbmZyYXN0cnVjdHVyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7QUFNSCxJQUFNLHNCQUFzQixHQUFHLGtGQUFrRixDQUFDO0FBRXJHLFFBQUEsVUFBVSxHQUFHLHFzQkF3QnpCLENBQUM7QUFFVyxRQUFBLGNBQWMsR0FBRyxtbUlBcUg3QixDQUFDO0FBRVcsUUFBQSxhQUFhLEdBQUcsMDFHQW9INUIsQ0FBQztBQUVXLFFBQUEsb0JBQW9CLEdBQUcsNDhCQWlDbkMsQ0FBQztBQUVXLFFBQUEsbUJBQW1CLEdBQUcsK2tCQXNCbEMsQ0FBQztBQUVLLElBQU0sWUFBWSxHQUFHLFVBQUMsYUFBc0IsSUFBSyxPQUFBLHFPQUl2RCxFQUp1RCxDQUl2RCxDQUFDO0FBSlcsUUFBQSxZQUFZLGdCQUl2QjtBQUVXLFFBQUEsZUFBZSxHQUFHLHdsVUEyaEI5QixDQUFDO0FBRVcsUUFBQSx1QkFBdUIsR0FBRywrcUJBc0J0QyxDQUFDO0FBRUssSUFBTSxzQkFBc0IsR0FBRyxVQUFDLE9BQW1DO0lBQW5DLHdCQUFBLEVBQUEsWUFBbUM7SUFBSyxPQUFBLENBQUM7UUFDOUUsWUFBWSxFQUFFLElBQUEsb0JBQVksRUFBQyxPQUFPLENBQUMsWUFBWSxDQUFDO1FBQ2hELFlBQVksRUFBRSxrQkFBVTtRQUN4QixnQkFBZ0IsRUFBRSx1QkFBZTtRQUNqQyxlQUFlLEVBQUUsc0JBQWM7UUFDL0IsY0FBYyxFQUFFLHFCQUFhO1FBQzdCLG9CQUFvQixFQUFFLDRCQUFvQjtRQUMxQyxtQkFBbUIsRUFBRSwyQkFBbUI7UUFDeEMsd0JBQXdCLEVBQUUsK0JBQXVCO0tBQ2xELENBQUM7QUFUNkUsQ0FTN0UsQ0FBQztBQVRVLFFBQUEsc0JBQXNCLDBCQVNoQyJ9
@@ -18,16 +18,18 @@ function generateAssetRegistryJS(game) {
18
18
  var registryEntries = allSprites.map(function (sprite) {
19
19
  var _a, _b;
20
20
  var spriteScale = (_a = sprite.scale) !== null && _a !== void 0 ? _a : 1;
21
- var costumesArray = Object.values(sprite.costumes).map(function (costume) {
21
+ var costumeEntries = Object.values(sprite.costumes).map(function (costume) {
22
22
  var _a, _b;
23
23
  var centerX = (_a = (sprite.isStage ? 480 : costume.centerX)) !== null && _a !== void 0 ? _a : 0;
24
24
  var centerY = (_b = (sprite.isStage ? 360 : costume.centerY)) !== null && _b !== void 0 ? _b : 0;
25
- return "new Costume({\n name: ".concat(JSON.stringify(costume.name), ",\n url: ").concat(JSON.stringify("./".concat(sprite.name, "/costumes/").concat(costume.name, ".").concat(costume.ext)), ",\n center: { x: ").concat(centerX * spriteScale, ", y: ").concat(centerY * spriteScale, " },\n scale: ").concat(spriteScale, "\n })");
25
+ var fileKey = "".concat(costume.name, ".").concat(costume.ext);
26
+ return "".concat(JSON.stringify(fileKey), ": new Costume({\n name: ").concat(JSON.stringify(costume.name), ",\n url: ").concat(JSON.stringify("./".concat(sprite.name, "/costumes/").concat(costume.name, ".").concat(costume.ext)), ",\n center: { x: ").concat(centerX * spriteScale, ", y: ").concat(centerY * spriteScale, " },\n scale: ").concat(spriteScale, "\n })");
26
27
  }).join(',\n ');
27
- var soundsArray = Object.values(sprite.sounds).map(function (sound) {
28
- return "new Sound(".concat(JSON.stringify(sound.name), ", ").concat(JSON.stringify("./".concat(sprite.name, "/sounds/").concat(sound.name, ".").concat(sound.ext)), ")");
28
+ var soundEntries = Object.values(sprite.sounds).map(function (sound) {
29
+ var fileKey = "".concat(sound.name, ".").concat(sound.ext);
30
+ return "".concat(JSON.stringify(fileKey), ": new Sound(").concat(JSON.stringify(sound.name), ", ").concat(JSON.stringify("./".concat(sprite.name, "/sounds/").concat(sound.name, ".").concat(sound.ext)), ")");
29
31
  }).join(',\n ');
30
- return "".concat(sprite.name, ": {\n spriteScale: ").concat((_b = sprite.spriteScale) !== null && _b !== void 0 ? _b : 1, ",\n costumes: [\n ").concat(costumesArray, "\n ],\n sounds: [\n ").concat(soundsArray, "\n ],\n }");
32
+ return "".concat(sprite.name, ": {\n spriteScale: ").concat((_b = sprite.spriteScale) !== null && _b !== void 0 ? _b : 1, ",\n costumes: {\n ").concat(costumeEntries, "\n },\n sounds: {\n ").concat(soundEntries, "\n },\n }");
31
33
  }).join(',\n ');
32
34
  return "\n import { Costume, Sound } from \"./userApi.js\";\n\n const registry = {\n ".concat(registryEntries, "\n };\n\n export function getSpriteAssets(spriteId) {\n return registry[spriteId]\n }\n ");
33
35
  }
@@ -45,7 +47,6 @@ function generateIndexJS(game) {
45
47
  })
46
48
  .join("\n"), "\n\n const sprites = {\n ").concat(Object.values(game.sprites)
47
49
  .map(function (sprite) {
48
- var _a, _b;
49
50
  return "".concat(sprite.name, ": new User").concat(sprite.name, "({").concat(Object.entries({
50
51
  x: sprite.x,
51
52
  y: sprite.y,
@@ -56,7 +57,7 @@ function generateIndexJS(game) {
56
57
  none: "DONT_ROTATE"
57
58
  }[sprite.rotationStyle]),
58
59
  costumeNumber: sprite.costumeNumber + 1,
59
- size: ((_a = sprite.size) !== null && _a !== void 0 ? _a : 100) * ((_b = sprite.scale) !== null && _b !== void 0 ? _b : 1),
60
+ size: sprite.size,
60
61
  visible: sprite.visible,
61
62
  layerOrder: sprite.layerOrder
62
63
  })
@@ -142,4 +143,4 @@ exports.generateConstantsFile = generateConstantsFile;
142
143
  // export default project;
143
144
  // `;
144
145
  // }
145
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FtZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbHMvZ2FtZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDOzs7Ozs7Ozs7Ozs7QUFFL0MscURBQXVGO0FBVXZGLFNBQWdCLHVCQUF1QixDQUFDLElBQWU7SUFDckQsSUFBTSxXQUFXLEdBQUcsSUFBQSx3Q0FBNEIsRUFBQywwQkFBYyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRTlFLElBQU0sVUFBVSxtQ0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBRSxJQUFJLENBQUMsS0FBSyxTQUFDLENBQUM7SUFFaEUsSUFBTSxlQUFlLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxVQUFBLE1BQU07O1FBQzNDLElBQU0sV0FBVyxHQUFHLE1BQUEsTUFBTSxDQUFDLEtBQUssbUNBQUksQ0FBQyxDQUFDO1FBQ3RDLElBQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFBLE9BQU87O1lBQzlELElBQU0sT0FBTyxHQUFHLE1BQUEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsbUNBQUksQ0FBQyxDQUFDO1lBQzlELElBQU0sT0FBTyxHQUFHLE1BQUEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsbUNBQUksQ0FBQyxDQUFDO1lBRTlELE9BQU8sMkNBQ08sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGlDQUM3QixJQUFJLENBQUMsU0FBUyxDQUFDLFlBQUssTUFBTSxDQUFDLElBQUksdUJBQWEsT0FBTyxDQUFDLElBQUksY0FBSSxPQUFPLENBQUMs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
146
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FtZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbHMvZ2FtZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDOzs7Ozs7Ozs7Ozs7QUFFL0MscURBQXVGO0FBVXZGLFNBQWdCLHVCQUF1QixDQUFDLElBQWU7SUFDckQsSUFBTSxXQUFXLEdBQUcsSUFBQSx3Q0FBNEIsRUFBQywwQkFBYyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRTlFLElBQU0sVUFBVSxtQ0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBRSxJQUFJLENBQUMsS0FBSyxTQUFDLENBQUM7SUFFaEUsSUFBTSxlQUFlLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxVQUFBLE1BQU07O1FBQzNDLElBQU0sV0FBVyxHQUFHLE1BQUEsTUFBTSxDQUFDLEtBQUssbUNBQUksQ0FBQyxDQUFDO1FBQ3RDLElBQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFBLE9BQU87O1lBQy9ELElBQU0sT0FBTyxHQUFHLE1BQUEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsbUNBQUksQ0FBQyxDQUFDO1lBQzlELElBQU0sT0FBTyxHQUFHLE1BQUEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsbUNBQUksQ0FBQyxDQUFDO1lBQzlELElBQU0sT0FBTyxHQUFHLFVBQUcsT0FBTyxDQUFDLElBQUksY0FBSSxPQUFPLENBQUMsR0FBRyxDQUFFLENBQUM7WUFFakQsT0FBTyxVQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGdEQUNuQixJQUFJLENBQUMsU0FBUyxD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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sb-edit-custom",
3
- "version": "0.20.133",
3
+ "version": "0.20.135",
4
4
  "description": "Import, edit, and export Scratch project files",
5
5
  "keywords": [
6
6
  "Scratch",