@kubohiroya/turbowarp-extension-data-editor 0.2.1 → 0.2.2
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/README.md +2 -2
- package/dist/build-info.json +4 -4
- package/dist/react.css +126 -0
- package/dist/react.d.ts +5 -0
- package/dist/react.js +10 -2
- package/dist/rjsf-templates.d.ts +11 -0
- package/dist/rjsf-templates.js +129 -0
- package/dist/rjsf.js +13 -1
- package/dist/turbowarp/bridge.js +3 -0
- package/dist/webpack4/metafile.json +39 -15
- package/dist/webpack4/react.js +12 -6
- package/dist/webpack4/react.js.map +2 -2
- package/dist/webpack4/rjsf.js +205 -30
- package/dist/webpack4/rjsf.js.map +4 -4
- package/dist/webpack4/turbowarp.js +3 -0
- package/dist/webpack4/turbowarp.js.map +2 -2
- package/docs/api.md +7 -0
- package/docs/package-distribution.md +5 -0
- package/package.json +1 -7
|
@@ -1456,6 +1456,9 @@ var createBlockEditorBridge = ({ ScratchBlocks, workspace, vm, service, label, c
|
|
|
1456
1456
|
openingFixedDeclaration = fixedDeclaration(service.registry, openingSnapshot) || null;
|
|
1457
1457
|
const labels = {};
|
|
1458
1458
|
const appearances = /* @__PURE__ */ Object.create(null);
|
|
1459
|
+
const rootAppearance = appearance_default(block, ScratchBlocks);
|
|
1460
|
+
appearances[reference.blockId] = rootAppearance;
|
|
1461
|
+
labels[reference.blockId] = rootAppearance.name || block.type;
|
|
1459
1462
|
if (typeof session.getNodes === "function") {
|
|
1460
1463
|
for (const node of session.getNodes()) {
|
|
1461
1464
|
const source = workspace.getBlockById(node.reference.blockId);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../turbowarp/subtree.js", "../turbowarp/fixed-fields.js", "../turbowarp/fixed-transaction.js", "../turbowarp/host.js", "../turbowarp/icon.js", "../turbowarp/appearance.js", "../turbowarp/error-session.js", "../turbowarp/bridge.js", "../turbowarp.js"],
|
|
4
|
-
"sourcesContent": ["import { BlockEditorStructureError, DEFAULT_DESCENDANT_LIMITS } from '../index.js';\n// Traverse statement inputs and their internal next chains; never the root's outer next or reporters.\nconst collectBlockEditorSubtree = ({ ScratchBlocks, reference, inspect, generation }) => {\n const nodes = [];\n const records = new Map();\n const pending = {};\n const invalid = message => {\n throw new BlockEditorStructureError(message, 'invalid-structure');\n };\n const visit = (id, depth) => {\n if (records.has(id)) {\n throw new BlockEditorStructureError('A statement block is connected more than once.', 'cycle');\n }\n if (depth > DEFAULT_DESCENDANT_LIMITS.maxDepth || nodes.length >= DEFAULT_DESCENDANT_LIMITS.maxNodes) {\n throw new BlockEditorStructureError('The block hierarchy exceeds the editing limit.', 'limit');\n }\n const record = inspect({ targetId: reference.targetId, blockId: id }, true);\n if (!record)\n throw pending;\n if (record.block.outputConnection)\n invalid('A reporter cannot be a statement descendant.');\n records.set(id, record);\n const branches = [];\n nodes.push({ block: record.snapshot, branches });\n for (const input of record.block.inputList) {\n if (input.type !== ScratchBlocks.NEXT_STATEMENT)\n continue;\n const branch = { input: input.name, blockIds: [] };\n branches.push(branch);\n let child = input.connection && input.connection.targetBlock();\n const vmInput = record.vmBlock.inputs[input.name];\n if ((child ? child.id : null) !== (vmInput && vmInput.block ? vmInput.block : null))\n throw pending;\n let previous = input.connection;\n while (child) {\n if (!child.previousConnection || child.previousConnection.targetConnection !== previous) {\n invalid('Invalid statement connection.');\n }\n branch.blockIds.push(child.id);\n visit(child.id, depth + 1);\n const next = child.getNextBlock();\n if ((next ? next.id : null) !== (records.get(child.id).vmBlock.next || null))\n throw pending;\n previous = child.nextConnection;\n child = next;\n }\n }\n };\n try {\n visit(reference.blockId, 0);\n }\n catch (error) {\n if (error === pending)\n return null;\n throw error;\n }\n return { snapshot: { ...reference, generation: String(generation), nodes }, records };\n};\nexport default collectBlockEditorSubtree;\n", "const owns = (object, key) => Object.prototype.hasOwnProperty.call(object, key);\nconst own = (object, key) => {\n const descriptor = object && Object.getOwnPropertyDescriptor(object, key);\n return descriptor && 'value' in descriptor ? descriptor.value : undefined;\n};\nconst primitive = value => typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean';\nconst token = /^-?(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$/u;\n// Inspect data properties without invoking custom field accessors or menu providers.\nconst inherited = (object, name) => {\n for (let current = object; current; current = Object.getPrototypeOf(current)) {\n const descriptor = Object.getOwnPropertyDescriptor(current, name);\n if (descriptor)\n return 'value' in descriptor ? descriptor.value : undefined;\n }\n return undefined;\n};\nconst storage = ['text_', 'value_', 'colour_', 'validator_', 'sourceBlock_', 'hue_', 'saturation_', 'brightness_'];\nconst methods = ['getValue', 'getText', 'setValue', 'setText', 'getValidator', 'classValidator', 'callValidator',\n 'getOptions', 'forceRerender', 'updateSliderHandles_', 'updateDom_'];\nconst trustedClasses = new WeakMap();\n/** Freeze native method identities once when the host attaches, before opening editors. */\nexport function initializeFixedFields(ScratchBlocks) {\n for (const key of ['FieldTextInput', 'FieldNumber', 'FieldDropdown', 'FieldColourSlider']) {\n const Class = ScratchBlocks[key];\n if (typeof Class !== 'function' || trustedClasses.has(Class))\n continue;\n const chain = [];\n for (let prototype = Class.prototype; prototype && prototype !== Object.prototype; prototype = Object.getPrototypeOf(prototype)) {\n chain.push({ prototype, own: methods.map(name => [name, Object.getOwnPropertyDescriptor(prototype, name)]) });\n }\n trustedClasses.set(Class, { prototype: Class.prototype, chain,\n methods: methods.map(name => [name, inherited(Class.prototype, name)]) });\n }\n}\nconst safeField = (field, Class) => {\n const trusted = Class && trustedClasses.get(Class);\n if (!trusted || Class.prototype !== trusted.prototype || Object.getPrototypeOf(field) !== trusted.prototype)\n return false;\n let currentPrototype = trusted.prototype;\n for (const entry of trusted.chain) {\n if (currentPrototype !== entry.prototype)\n return false;\n for (const [name, expected] of entry.own) {\n const actual = Object.getOwnPropertyDescriptor(currentPrototype, name);\n if (Boolean(actual) !== Boolean(expected) ||\n (actual && (!('value' in actual) || !expected || !('value' in expected) || actual.value !== expected.value)))\n return false;\n }\n currentPrototype = Object.getPrototypeOf(currentPrototype);\n }\n if (currentPrototype !== Object.prototype && currentPrototype !== null)\n return false;\n for (const name of storage) {\n for (let current = field; current; current = Object.getPrototypeOf(current)) {\n const descriptor = Object.getOwnPropertyDescriptor(current, name);\n if (!descriptor)\n continue;\n if (!('value' in descriptor))\n return false;\n break;\n }\n }\n for (const [name, expected] of trusted.methods) {\n if (owns(field, name) || inherited(field, name) !== expected)\n return false;\n }\n for (let current = field; current; current = Object.getPrototypeOf(current)) {\n const descriptor = Object.getOwnPropertyDescriptor(current, 'validator_');\n if (descriptor)\n return 'value' in descriptor && descriptor.value == null;\n }\n return false;\n};\nconst arrayData = value => {\n if (!Array.isArray(value) || Object.getPrototypeOf(value) !== Array.prototype)\n return null;\n const result = [];\n for (let index = 0; index < value.length; index++) {\n const descriptor = Object.getOwnPropertyDescriptor(value, String(index));\n if (!descriptor || !('value' in descriptor))\n return null;\n result.push(descriptor.value);\n }\n return result;\n};\nconst staticValues = field => {\n const items = arrayData(own(field, 'menuGenerator_'));\n if (!items || items.length === 0)\n return null;\n const values = [];\n for (const item of items) {\n const tuple = arrayData(item);\n if (!tuple || tuple.length !== 2 || typeof tuple[0] !== 'string' || typeof tuple[1] !== 'string')\n return null;\n values.push(tuple[1]);\n }\n return Object.freeze(values);\n};\nconst rawKeys = ['text_', 'value_', 'colour_', 'hue_', 'saturation_', 'brightness_'];\nconst ownState = (object, keys) => keys.map(name => [name, Object.getOwnPropertyDescriptor(object, name)]);\nconst restoreOwnState = (object, state) => {\n for (const [name, descriptor] of state) {\n if (descriptor)\n Object.defineProperty(object, name, descriptor);\n else\n delete object[name];\n }\n};\nconst vmFieldsIdentity = (fields, identify) => Object.keys(fields || {}).sort().map(name => {\n const descriptor = Object.getOwnPropertyDescriptor(fields, name);\n if (!descriptor || !('value' in descriptor))\n return [name, 'accessor'];\n const stored = descriptor.value;\n if (!stored || typeof stored !== 'object')\n return [name, typeof stored, String(stored)];\n return [name, identify(stored), ...Object.keys(stored).sort().map(key => {\n const item = Object.getOwnPropertyDescriptor(stored, key);\n if (!item || !('value' in item))\n return [key, 'accessor'];\n const value = item.value;\n return [key, typeof value, primitive(value) ? (Object.is(value, -0) ? '-0' : String(value)) :\n value && (typeof value === 'object' || typeof value === 'function') ? identify(value) : String(value)];\n })];\n});\nconst colorState = (block, field) => {\n const colors = ['getColour', 'getColourSecondary', 'getColourTertiary', 'getColourQuaternary'];\n return {\n colors: colors.map(name => typeof block[name] === 'function' ? block[name]() : undefined),\n hsv: ['hue_', 'saturation_', 'brightness_'].map(name => [name, own(field, name)]),\n blockProperties: ownState(block, ['colour_', 'colourSecondary_', 'colourTertiary_', 'colourQuaternary_'])\n };\n};\n/** Native objects stay local; only primitive metadata is returned in snapshots. */\nexport function inspectFixedArgument({ ScratchBlocks, block, vmBlock, target, argument, role, identify, extensionId }) {\n initializeFixedFields(ScratchBlocks);\n const sourceIdentity = [argument, identify(block), identify(vmBlock)];\n let observedFields = [];\n const unavailable = (source, reason, raw) => ({\n slot: primitive(raw) ? { kind: 'literal', value: raw } : { kind: 'reporter' },\n metadata: { role, source, identity: JSON.stringify([...sourceIdentity, source]), reason },\n signatureParts: [...sourceIdentity, observedFields]\n });\n const direct = block.getField(argument);\n const input = block.getInput(argument);\n const connected = input && input.connection && input.connection.targetBlock();\n const vmInput = vmBlock.inputs && vmBlock.inputs[argument];\n if ((connected ? connected.id : null) !== (vmInput && vmInput.block ? vmInput.block : null))\n return null;\n if (direct && connected)\n return null;\n if (connected && !connected.isShadow()) {\n const vmReporter = target.blocks.getBlock(connected.id);\n if (!vmReporter || vmReporter.opcode !== connected.type || vmReporter.parent !== block.id)\n return null;\n sourceIdentity.push(identify(connected), identify(vmReporter), connected.id, connected.type);\n return { slot: { kind: 'reporter' }, metadata: { role, source: 'reporter', identity: JSON.stringify(sourceIdentity) },\n signatureParts: sourceIdentity };\n }\n let owner = direct ? block : connected;\n if (!owner) {\n if (vmBlock.fields && owns(vmBlock.fields, argument))\n return null;\n return unavailable('missing', 'The declared field or input is missing.');\n }\n const vmOwner = direct ? vmBlock : target.blocks.getBlock(owner.id);\n if (!vmOwner || vmOwner.opcode !== owner.type)\n return null;\n sourceIdentity.push(identify(owner), identify(vmOwner), owner.id, owner.type);\n observedFields = vmFieldsIdentity(vmOwner.fields, identify);\n if (!direct && (!vmInput || vmInput.shadow !== owner.id || vmOwner.parent !== block.id))\n return null;\n let kind;\n let name;\n let Class;\n if (direct) {\n kind = 'menu';\n name = argument;\n Class = ScratchBlocks.FieldDropdown;\n }\n else if (owner.type === 'text') {\n kind = 'text';\n name = 'TEXT';\n Class = ScratchBlocks.FieldTextInput;\n }\n else if (owner.type === 'math_number') {\n kind = 'number';\n name = 'NUM';\n Class = ScratchBlocks.FieldNumber;\n }\n else if (owner.type === 'colour_picker') {\n kind = 'color';\n name = 'COLOUR';\n Class = ScratchBlocks.FieldColourSlider;\n }\n else if (typeof extensionId === 'string' && owner.type.startsWith(`${extensionId}_menu_`)) {\n kind = 'menu';\n Class = ScratchBlocks.FieldDropdown;\n const names = [];\n for (const row of owner.inputList)\n for (const candidate of row.fieldRow) {\n const candidateName = own(candidate, 'name');\n if (typeof candidateName === 'string' && candidateName)\n names.push(candidateName);\n }\n if (names.length !== 1)\n return unavailable('unsupported', 'The menu shadow does not have one standard field.');\n [name] = names;\n }\n else\n return unavailable('unsupported', 'The shadow field family is unsupported.');\n const field = direct || owner.getField(name);\n const stored = vmOwner.fields && vmOwner.fields[name];\n if (!field || !stored)\n return null;\n sourceIdentity.push(identify(field), name);\n const raw = own(stored, 'value');\n if (!safeField(field, Class))\n return unavailable('unsupported', 'The field class, methods or validator is unsupported.', raw);\n const value = inherited(Class.prototype, 'getValue').call(field);\n if (!Object.is(value, raw))\n return null;\n if (typeof value !== 'string')\n return unavailable('unsupported', 'The native field value is not a string.', raw);\n const allowedValues = kind === 'menu' ? staticValues(field) : undefined;\n if (kind === 'menu' && !allowedValues)\n return unavailable('unsupported', 'Dynamic or nonstandard menus are unsupported.', raw);\n sourceIdentity.push(kind, ...(allowedValues || []));\n const binding = { block: owner, field, fieldName: name, value, vmBlock: vmOwner, kind,\n Class, prototype: Class.prototype, allowedValues,\n restoreValue: inherited(Class.prototype, 'setValue'), rawState: ownState(field, rawKeys),\n restoreHandles: inherited(Class.prototype, 'updateSliderHandles_'),\n restoreDom: inherited(Class.prototype, 'updateDom_'),\n ...(kind === 'color' ? { restoreState: colorState(owner, field) } : {}) };\n return { slot: { kind: 'literal', value }, metadata: { role, source: direct ? 'field' : 'shadow',\n identity: JSON.stringify(sourceIdentity), field: { blockId: owner.id, name, type: { text: 'FieldTextInput', number: 'FieldNumber', menu: 'FieldDropdown', color: 'FieldColourSlider' }[kind] } },\n ...(role === 'editable' ? { binding } : {}), signatureParts: [...sourceIdentity, observedFields] };\n}\n/** Validate the exact saved primitive; native setters must not silently normalize it. */\nexport function prepareFixedChange(binding, value) {\n if (!binding || !safeField(binding.field, binding.Class) || typeof value !== 'string') {\n throw new TypeError('Only standard native string field writes are supported.');\n }\n if (binding.kind === 'menu') {\n const currentValues = staticValues(binding.field);\n if (!currentValues || currentValues.length !== binding.allowedValues.length ||\n currentValues.some((item, index) => item !== binding.allowedValues[index])) {\n throw new TypeError('The static menu changed before preparing the write.');\n }\n }\n if (value !== binding.value) {\n if (binding.kind === 'number' && (!token.test(value.trim()) || !Number.isFinite(Number(value)))) {\n throw new TypeError('Expected a finite numeric field token.');\n }\n if (binding.kind === 'color' && !/^#(?:[a-f0-9]{3}|[a-f0-9]{6})$/iu.test(value)) {\n throw new TypeError('Expected a hexadecimal color field token.');\n }\n if (binding.kind === 'menu' && !binding.allowedValues.includes(value)) {\n throw new TypeError('Expected a declared static menu value.');\n }\n }\n return { ...binding, next: value };\n}\n/** Capture a later external value without invoking replacement field methods. */\nexport function captureFixedFieldState(binding) {\n if (!binding || !safeField(binding.field, binding.Class)) {\n throw new TypeError('Cannot capture an unsupported native field.');\n }\n const value = inherited(binding.prototype, 'getValue').call(binding.field);\n if (typeof value !== 'string')\n throw new TypeError('Expected a native string field.');\n return { ...binding, value, rawState: ownState(binding.field, rawKeys),\n ...(binding.kind === 'color' ? { restoreState: colorState(binding.block, binding.field) } : {}) };\n}\n/** Restore raw text and the standard color field's additional block/UI state. */\nexport function restoreFixedField(binding) {\n let failure;\n try {\n binding.restoreValue.call(binding.field, binding.value);\n }\n catch (error) {\n failure = error;\n }\n // The standard setters can update raw data before renderer code throws.\n // Restore primitive descriptors independently so renderer failure cannot retain new data.\n restoreOwnState(binding.field, binding.rawState);\n if (binding.restoreState) {\n const colors = binding.restoreState.colors;\n try {\n if (colors.every(value => typeof value === 'string'))\n binding.block.setColour(...colors);\n }\n catch (error) {\n failure = failure || error;\n }\n restoreOwnState(binding.block, binding.restoreState.blockProperties);\n try {\n binding.restoreHandles.call(binding.field);\n }\n catch (error) {\n failure = failure || error;\n }\n try {\n binding.restoreDom.call(binding.field);\n }\n catch (error) {\n failure = failure || error;\n }\n }\n if (failure)\n throw failure;\n}\n", "import { BlockEditorConflictError, FIXED_INPUTS_CAPABILITY } from '../index.js';\nimport { captureFixedInputDeclaration, captureFixedSnapshot, sameFixedSnapshot } from '../fixed-input-snapshot.js';\nimport { initializeFixedFields, inspectFixedArgument, prepareFixedChange, restoreFixedField, captureFixedFieldState } from './fixed-fields.js';\nimport { snapshotJson } from '../schema-json.js';\nimport { validateFixedBranchChanges } from '../fixed-input-branches.js';\nconst own = (object, name) => {\n const descriptor = object && Object.getOwnPropertyDescriptor(object, name);\n if (!descriptor || !Object.prototype.hasOwnProperty.call(descriptor, 'value')) {\n throw new TypeError('Expected an own data property.');\n }\n return descriptor.value;\n};\nconst inheritedData = (object, key) => {\n for (let item = object; item; item = Object.getPrototypeOf(item)) {\n const descriptor = Object.getOwnPropertyDescriptor(item, key);\n if (descriptor) {\n if (!('value' in descriptor))\n throw new TypeError('Unsupported undo configuration.');\n return descriptor.value;\n }\n }\n return undefined;\n};\nconst ensureNativeHistory = stack => {\n if (!Array.isArray(stack) || !Object.isExtensible(stack) ||\n Object.getOwnPropertySymbols(stack).length || !Object.getOwnPropertyDescriptor(stack, 'length').writable) {\n throw new TypeError('Unsupported undo history.');\n }\n if (Object.getOwnPropertyNames(stack).length !== stack.length + 1)\n throw new TypeError('Unsupported undo history.');\n for (let index = 0; index < stack.length; index++) {\n const descriptor = Object.getOwnPropertyDescriptor(stack, String(index));\n if (!descriptor || !('value' in descriptor) || !descriptor.writable || !descriptor.configurable) {\n throw new TypeError('Unsupported undo history.');\n }\n }\n};\nconst copyHistory = stack => {\n const copy = [];\n for (let index = 0; index < stack.length; index++)\n copy.push(own(stack, String(index)));\n return copy;\n};\nconst replaceHistory = (stack, values) => {\n stack.length = 0;\n for (const value of values)\n Array.prototype.push.call(stack, value);\n};\nconst conflict = () => { throw new BlockEditorConflictError(); };\nconst aborted = Object.getOwnPropertyDescriptor(AbortSignal.prototype, 'aborted').get;\nconst isAborted = signal => aborted.call(signal);\nconst optionalOwn = (object, name) => {\n const descriptor = object && Object.getOwnPropertyDescriptor(object, name);\n if (descriptor && !Object.prototype.hasOwnProperty.call(descriptor, 'value')) {\n throw new TypeError('VM state must contain data properties.');\n }\n return descriptor && descriptor.value;\n};\nconst stateToken = (value, identify, seen = new Set()) => {\n if (typeof value === 'number')\n return ['number', Object.is(value, -0) ? '-0' : String(value)];\n if (value === undefined)\n return ['undefined'];\n if (value === null || typeof value === 'string' || typeof value === 'boolean')\n return value;\n if (typeof value !== 'object' || seen.has(value) || seen.size > 64)\n throw new TypeError('Unsupported VM state.');\n seen.add(value);\n const result = Object.getOwnPropertyNames(value).sort().map(key => [key, stateToken(own(value, key), identify, seen)]);\n seen.delete(value);\n return ['object', identify(value), result];\n};\nconst untouchedState = (block, vmBlock, target, bindings, identify) => {\n const omitted = new Map();\n for (const binding of bindings.values()) {\n if (!omitted.has(binding.vmBlock))\n omitted.set(binding.vmBlock, new Set());\n omitted.get(binding.vmBlock).add(binding.fieldName);\n }\n const seen = new Set();\n const records = [];\n const capture = item => {\n if (!item || seen.has(item))\n return;\n seen.add(item);\n const fields = item.fields || {};\n records.push([identify(item), ['id', 'opcode', 'parent', 'next', 'inputs', 'mutation', 'shadow', 'topLevel']\n .map(key => [key, stateToken(optionalOwn(item, key), identify)]), identify(fields), Object.keys(fields).sort()\n .map(key => {\n var _a;\n const field = own(fields, key);\n if (!((_a = omitted.get(item)) === null || _a === void 0 ? void 0 : _a.has(key)))\n return [key, stateToken(field, identify)];\n return [key, identify(field), Object.getOwnPropertyNames(field).sort()\n .filter(property => property !== 'value').map(property => [property, stateToken(own(field, property), identify)])];\n })]);\n };\n capture(vmBlock);\n const connections = [];\n for (const input of block.inputList) {\n const connected = input.connection && input.connection.targetBlock();\n connections.push([input.name || '', identify(input), input.connection ? identify(input.connection) : null, connected ? [connected.id, connected.type, identify(connected)] : null]);\n if (connected)\n capture(target.blocks.getBlock(connected.id));\n }\n const statementConnections = ['nextConnection', 'previousConnection', 'outputConnection'].map(name => {\n const connection = block[name];\n const connected = connection && connection.targetBlock();\n return [name, connection ? identify(connection) : null,\n connection && connection.targetConnection ? identify(connection.targetConnection) : null,\n connected ? [connected.id, connected.type, identify(connected)] : null];\n });\n return JSON.stringify([records, connections, statementConnections]);\n};\nconst sameDeclaration = (left, right) => JSON.stringify(captureFixedInputDeclaration(left)) ===\n JSON.stringify(captureFixedInputDeclaration(right));\n// Fixed inputs deliberately use a separate transaction from the legacy TEXT adapter.\nexport default function createFixedInputPort({ ScratchBlocks, workspace, vm, registry, identify, getState, begin, markEvent, finish, onError, subscribeScope }) {\n initializeFixedFields(ScratchBlocks);\n const inspect = (reference, suppliedDeclaration) => {\n const state = getState();\n const target = vm.editingTarget;\n if (state.disposed || !target || target.id !== reference.targetId || workspace.isFlyout ||\n workspace.options.readOnly || (workspace.isDragging && workspace.isDragging()))\n return null;\n const block = workspace.getBlockById(reference.blockId);\n if (!block || block.isInFlyout || block.isShadow() || !block.isEditable())\n return null;\n const descriptor = registry.resolve(block.type);\n const declaration = registry.resolveFixed(block.type);\n if (!descriptor || !declaration || !sameDeclaration(declaration, suppliedDeclaration))\n return null;\n const vmBlock = target.blocks.getBlock(block.id);\n const nextBlock = block.nextConnection && block.nextConnection.targetBlock();\n if (!vmBlock || (nextBlock ? nextBlock.id : null) !== (vmBlock.next || null) || vmBlock.opcode !== block.type ||\n (block.getParent() ? block.getParent().id : null) !== (vmBlock.parent || null))\n return null;\n const arguments_ = Object.create(null);\n const inputs = Object.create(null);\n const bindings = new Map();\n const signature = [state.revision, identify(target), identify(block), identify(vmBlock), identify(declaration)];\n for (const [role, names] of [['editable', declaration.editableArguments], ['readonly', declaration.readOnlyArguments]]) {\n for (const argument of names) {\n const item = inspectFixedArgument({ ScratchBlocks, block, vmBlock, target, argument, role,\n identify, extensionId: descriptor.extensionId });\n if (!item)\n return null;\n arguments_[argument] = item.slot;\n inputs[argument] = item.metadata;\n if (role === 'editable' && item.binding)\n bindings.set(argument, item.binding);\n signature.push(argument, item.signatureParts);\n }\n }\n const untouched = untouchedState(block, vmBlock, target, bindings, identify);\n signature.push(untouched);\n const snapshot = captureFixedSnapshot({ targetId: target.id, blockId: block.id, opcode: block.type,\n revision: JSON.stringify(signature), arguments: arguments_, fixedContext: {\n contractId: declaration.contractId, contractRevision: declaration.contractRevision,\n generation: String(state.generation), readOnlyArguments: declaration.readOnlyArguments,\n dependencies: declaration.dependencies, inputs\n } }, reference, declaration);\n return { snapshot, bindings, declaration, target, block, vmBlock, state, untouched, runtime: vm.runtime };\n };\n const commit = request => {\n var _a;\n const expectedInput = own(request, 'expected');\n const changesInput = own(request, 'changes');\n const signal = own(request, 'signal');\n try {\n const contextInput = own(request, 'context');\n const context = snapshotJson({ consumerId: own(contextInput, 'consumerId'),\n nowMs: own(contextInput, 'nowMs'), settings: own(contextInput, 'settings') });\n if (typeof context.consumerId !== 'string' || !context.consumerId ||\n typeof context.nowMs !== 'number' || !Number.isFinite(context.nowMs)) {\n throw new TypeError('Invalid fixed validation context.');\n }\n }\n catch (_b) {\n throw new TypeError('Invalid fixed validation context.');\n }\n if (isAborted(signal))\n conflict();\n const expected = captureFixedSnapshot(expectedInput);\n const current = inspect(expected, registry.resolveFixed(expected.opcode));\n if (!current || !sameFixedSnapshot(expected, current.snapshot))\n conflict();\n const declaration = current.declaration;\n captureFixedSnapshot(expected, expected, declaration);\n if (!Array.isArray(changesInput))\n throw new TypeError('Expected a fixed argument patch array.');\n const prepared = [];\n const seenNames = new Set();\n const seenFields = new Set();\n for (let i = 0; i < changesInput.length; i++) {\n const change = own(changesInput, String(i));\n const name = own(change, 'argument');\n const value = own(change, 'value');\n if (typeof name !== 'string' || seenNames.has(name) ||\n !declaration.editableArguments.includes(name) || !current.bindings.has(name)) {\n throw new TypeError('Only distinct editable standard fields may be changed.');\n }\n seenNames.add(name);\n const binding = current.bindings.get(name);\n if (seenFields.has(binding.field))\n throw new TypeError('Duplicate field write.');\n seenFields.add(binding.field);\n if (Object.is(value, binding.value))\n continue;\n prepared.push({ ...prepareFixedChange(binding, value), argument: name });\n }\n if (validateFixedBranchChanges(declaration, expected, prepared.map(item => ({ argument: item.argument, value: item.next }))).length) {\n throw new TypeError('Fixed branch changes require a valid canonical branch policy.');\n }\n const guard = () => {\n const state = getState();\n if (isAborted(signal) || state.disposed || state.generation !== current.state.generation ||\n state.externalRevision !== current.state.externalRevision || vm.editingTarget !== current.target ||\n vm.runtime !== current.runtime ||\n registry.resolveFixed(expected.opcode) !== declaration)\n conflict();\n };\n guard();\n const beforeWrite = inspect(expected, declaration);\n if (!beforeWrite || !sameFixedSnapshot(expected, beforeWrite.snapshot))\n conflict();\n guard();\n if (!prepared.length)\n return;\n const Events = ScratchBlocks.Events;\n if (!Events.isEnabled() || !Events.recordUndo || Events.getGroup() ||\n !Array.isArray(workspace.undoStack_) || !Array.isArray(workspace.redoStack_)) {\n throw new Error('The workspace is busy or its undo API is unsupported.');\n }\n const undoStack = workspace.undoStack_;\n const redoStack = workspace.redoStack_;\n ensureNativeHistory(undoStack);\n ensureNativeHistory(redoStack);\n const configuredMaxUndo = inheritedData(workspace, 'MAX_UNDO');\n const maxUndo = configuredMaxUndo === undefined ? Infinity : configuredMaxUndo;\n if (maxUndo !== Infinity && (!Number.isSafeInteger(maxUndo) || maxUndo < 0)) {\n throw new TypeError('Unsupported undo configuration.');\n }\n const undo = copyHistory(undoStack);\n const redo = copyHistory(redoStack);\n const oldGroup = Events.getGroup();\n const runtime = current.runtime;\n const dirty = runtime.emitProjectChanged;\n const dirtyDescriptor = Object.getOwnPropertyDescriptor(runtime, 'emitProjectChanged');\n const savedVmFields = prepared.map(item => ({ binding: item, block: item.vmBlock, name: item.fieldName,\n fields: item.vmBlock.fields, field: item.vmBlock.fields[item.fieldName],\n descriptors: Object.getOwnPropertyDescriptors(item.vmBlock.fields[item.fieldName]) }));\n let succeeded = false;\n let failure;\n let activeEvent = null;\n const pendingHistory = [];\n const externalWrites = new Map();\n const byField = new Map(prepared.map(item => [JSON.stringify([item.block.id, item.fieldName]), item]));\n let externalDirty = false;\n const ownedEvents = new WeakSet();\n const originalDelivery = workspace.fireChangeListener;\n const deliveryDescriptor = Object.getOwnPropertyDescriptor(workspace, 'fireChangeListener');\n const stableScope = () => {\n const state = getState();\n return state.generation === current.state.generation && vm.editingTarget === current.target && vm.runtime === runtime;\n };\n let begun = false;\n try {\n runtime.emitProjectChanged = () => {\n if (!activeEvent || !ownedEvents.has(activeEvent) || !stableScope())\n externalDirty = true;\n };\n workspace.fireChangeListener = function (event) {\n const previous = activeEvent;\n const external = event && !event.isUiEvent && !ownedEvents.has(event);\n const edited = external && event.type === 'change' && event.element === 'field' &&\n byField.get(JSON.stringify([event.blockId, event.name]));\n if (edited && !externalWrites.has(edited.field)) {\n // An external undo must not revive this editor's uncommitted candidate.\n if (Object.is(event.oldValue, edited.next))\n event.oldValue = edited.value;\n externalWrites.set(edited.field, null);\n }\n activeEvent = event;\n try {\n return originalDelivery.call(this, event);\n }\n finally {\n if (edited) {\n const fields = edited.vmBlock.fields;\n const field = fields && fields[edited.fieldName];\n externalWrites.set(edited.field, { binding: captureFixedFieldState(edited),\n fields, field, descriptors: field && Object.getOwnPropertyDescriptors(field) });\n }\n activeEvent = previous;\n }\n };\n Events.setGroup(true);\n Events.disable();\n begin();\n begun = true;\n guard();\n for (const item of prepared) {\n guard();\n item.field.setValue(item.next);\n if (!Object.is(item.field.getValue(), item.next))\n throw new Error('The field rejected its value.');\n guard();\n }\n for (const item of prepared) {\n guard();\n const event = new Events.Change(item.block, 'field', item.fieldName, item.value, item.next);\n ownedEvents.add(event);\n markEvent(event);\n // Stage only editor-owned undo records; external events retain normal semantics.\n const recordUndo = event.recordUndo;\n event.recordUndo = false;\n try {\n workspace.fireChangeListener(event);\n }\n finally {\n event.recordUndo = recordUndo;\n }\n if (recordUndo)\n pendingHistory.push(event);\n guard();\n }\n const after = inspect(expected, declaration);\n if (!after || after.untouched !== current.untouched)\n conflict();\n const wantedArguments = { ...expected.arguments };\n for (const item of prepared)\n wantedArguments[item.argument] = { kind: 'literal', value: item.next };\n if (!sameFixedSnapshot({ ...expected, revision: after.snapshot.revision, arguments: wantedArguments }, after.snapshot))\n conflict();\n guard();\n if (workspace.undoStack_ !== undoStack || workspace.redoStack_ !== redoStack ||\n undoStack.length !== undo.length || redoStack.length !== redo.length ||\n undo.some((entry, index) => undoStack[index] !== entry) ||\n redo.some((entry, index) => redoStack[index] !== entry))\n conflict();\n ensureNativeHistory(undoStack);\n ensureNativeHistory(redoStack);\n // This section contains no vendor callbacks; both native arrays are writable dense data.\n try {\n for (const event of pendingHistory)\n Array.prototype.push.call(undoStack, event);\n if (undoStack.length > maxUndo) {\n Array.prototype.copyWithin.call(undoStack, 0, undoStack.length - maxUndo);\n undoStack.length = maxUndo;\n }\n redoStack.length = 0;\n }\n catch (error) {\n replaceHistory(undoStack, undo);\n replaceHistory(redoStack, redo);\n throw error;\n }\n succeeded = true;\n }\n catch (error) {\n failure = error;\n for (const item of begun ? prepared : []) {\n try {\n restoreFixedField(((_a = externalWrites.get(item.field)) === null || _a === void 0 ? void 0 : _a.binding) || item);\n }\n catch (restoreError) {\n // Continue restoring every independent field before reporting a failure.\n try {\n onError(restoreError);\n }\n catch ( /* Observer failures do not interrupt rollback. */_c) { /* Observer failures do not interrupt rollback. */ }\n }\n }\n for (const saved of begun ? savedVmFields : []) {\n const outside = externalWrites.get(saved.binding.field);\n const fields = saved.block.fields;\n if (!fields)\n continue;\n const field = outside ? outside.field : saved.field;\n const descriptors = outside ? outside.descriptors : saved.descriptors;\n if (!field) {\n delete fields[saved.name];\n continue;\n }\n fields[saved.name] = field;\n for (const key of Object.keys(field))\n if (!Object.hasOwn(descriptors, key))\n delete field[key];\n Object.defineProperties(field, descriptors);\n }\n if (begun && typeof current.target.blocks.resetCache === 'function')\n current.target.blocks.resetCache();\n // Pending editor events never entered either history. External histories are authoritative.\n }\n finally {\n try {\n if (begun)\n finish(succeeded);\n }\n finally {\n try {\n if (!Events.isEnabled())\n Events.enable();\n }\n finally {\n try {\n Events.setGroup(oldGroup);\n }\n finally {\n if (deliveryDescriptor)\n Object.defineProperty(workspace, 'fireChangeListener', deliveryDescriptor);\n else\n delete workspace.fireChangeListener;\n if (dirtyDescriptor)\n Object.defineProperty(runtime, 'emitProjectChanged', dirtyDescriptor);\n else\n delete runtime.emitProjectChanged;\n }\n }\n }\n }\n if (succeeded || externalDirty) {\n try {\n dirty.call(runtime);\n }\n catch (error) {\n try {\n onError(error);\n }\n catch ( /* Dirty observers do not change the transaction result. */_d) { /* Dirty observers do not change the transaction result. */ }\n }\n }\n if (!succeeded)\n throw failure;\n };\n return Object.freeze({ capability: FIXED_INPUTS_CAPABILITY,\n readBlock: (reference, declaration) => { var _a; return ((_a = inspect(reference, declaration)) === null || _a === void 0 ? void 0 : _a.snapshot) || null; }, commit,\n subscribeInvalidation: (reference, declaration, listener) => {\n const captured = inspect(reference, declaration);\n if (!captured || typeof subscribeScope !== 'function') {\n listener(new BlockEditorConflictError());\n return () => { };\n }\n let active = true;\n const check = () => {\n const state = getState();\n if (!active || (!state.disposed && state.generation === captured.state.generation &&\n vm.editingTarget === captured.target && vm.runtime === captured.runtime &&\n workspace.getBlockById(reference.blockId) === captured.block &&\n captured.target.blocks.getBlock(reference.blockId) === captured.vmBlock &&\n registry.resolveFixed(captured.snapshot.opcode) === captured.declaration))\n return;\n active = false;\n listener(new BlockEditorConflictError());\n };\n const unsubscribe = subscribeScope(check);\n return () => { active = false; unsubscribe(); };\n } });\n}\n", "import { BlockEditorConflictError, DESCENDANT_EDITING_CAPABILITY } from '../index.js';\nimport collectBlockEditorSubtree from './subtree.js';\nimport createFixedInputPort from './fixed-transaction.js';\nconst owns = (object, key) => Object.prototype.hasOwnProperty.call(object, key);\n// Adapt only standard, unvalidated text shadows; never evaluate connected reporters.\nconst createBlockEditorHost = ({ ScratchBlocks, workspace, vm, registry, enableDescendants = false, enableFixedInputs = false, onError = console.error }) => {\n let disposed = false;\n let committing = false;\n let revision = 0;\n let identity = 0;\n let generation = 1;\n let externalRevision = 0;\n let fixedTransaction = null;\n let lastTarget = vm.editingTarget;\n const versions = new Map();\n const invalidations = new Set();\n const fixedScopeListeners = new Set();\n const notifyFixedScopes = () => {\n for (const listener of [...fixedScopeListeners]) {\n try {\n listener();\n }\n catch (error) {\n try {\n onError(error);\n }\n catch ( /* Scope observers cannot interrupt native events. */_a) { /* Scope observers cannot interrupt native events. */ }\n }\n }\n };\n let notifyInvalidations = () => { };\n const identities = new WeakMap();\n const identify = object => {\n if (!identities.has(object))\n identities.set(object, ++identity);\n return identities.get(object);\n };\n const invalidate = event => {\n if (event && event.isUiEvent)\n return;\n revision++;\n if (fixedTransaction && event && fixedTransaction.events.has(event)) {\n fixedTransaction.revisions++;\n if (enableDescendants) {\n for (const id of new Set([event.blockId, ...(event.ids || [])])) {\n if (id)\n fixedTransaction.versions.set(id, (fixedTransaction.versions.get(id) || 0) + 1);\n }\n }\n }\n else\n externalRevision++;\n if (enableDescendants && event) {\n const ids = new Set([event.blockId, ...(event.ids || [])]);\n for (const id of ids)\n if (id)\n versions.set(id, (versions.get(id) || 0) + 1);\n }\n if (!committing)\n notifyInvalidations();\n notifyFixedScopes();\n };\n const renew = () => {\n generation++;\n versions.clear();\n invalidate();\n };\n const targetsChanged = () => {\n if (lastTarget === vm.editingTarget)\n invalidate();\n else {\n lastTarget = vm.editingTarget;\n renew();\n }\n };\n workspace.addChangeListener(invalidate);\n vm.on('workspaceUpdate', renew);\n vm.on('targetsUpdate', targetsChanged);\n const inspect = (reference, structural = false) => {\n const target = vm.editingTarget;\n if (disposed || !target || target.id !== reference.targetId || workspace.isFlyout ||\n workspace.options.readOnly || (workspace.isDragging && workspace.isDragging()))\n return null;\n const block = workspace.getBlockById(reference.blockId);\n if (!block || block.isInFlyout || block.isShadow())\n return null;\n const descriptor = registry.resolve(block.type);\n if (typeof registry.resolveFixed === 'function' && registry.resolveFixed(block.type))\n return null;\n const vmBlock = target.blocks.getBlock(block.id);\n if ((!structural && !descriptor) || (!block.isEditable() && (!structural || descriptor)) ||\n !vmBlock || vmBlock.opcode !== block.type)\n return null;\n const slots = {};\n const fields = new Map();\n const signature = [structural ? versions.get(block.id) || 0 : revision,\n identify(block), identify(vmBlock), identify(target)];\n if (structural) {\n if ((block.getParent() ? block.getParent().id : null) !== (vmBlock.parent || null))\n return null;\n signature.push(block.isEditable(), vmBlock.fields, vmBlock.inputs, vmBlock.mutation || null);\n for (const input of block.inputList) {\n if (input.type !== ScratchBlocks.INPUT_VALUE)\n continue;\n const connected = input.connection && input.connection.targetBlock();\n const vmInput = vmBlock.inputs[input.name];\n if ((connected ? connected.id : null) !==\n (vmInput && vmInput.block ? vmInput.block : null))\n return null;\n if (!connected)\n continue;\n signature.push(input.name, connected.id, identify(connected), connected.type);\n if (!connected.isShadow())\n continue;\n const vmShadow = target.blocks.getBlock(connected.id);\n if (!vmShadow)\n return null;\n for (const row of connected.inputList) {\n for (const field of row.fieldRow) {\n if (!field.name)\n continue;\n const stored = vmShadow.fields[field.name];\n if (!stored || String(field.getValue()) !== String(stored.id || stored.value))\n return null;\n }\n }\n signature.push(versions.get(connected.id) || 0, identify(vmShadow), vmShadow.fields);\n }\n }\n for (const name of descriptor ? descriptor.editableArguments : []) {\n const input = block.getInput(name);\n const shadow = input && input.connection && input.connection.targetBlock();\n const field = shadow && shadow.getField('TEXT');\n const vmShadow = shadow && target.blocks.getBlock(shadow.id);\n const vmInput = vmBlock.inputs && vmBlock.inputs[name];\n // Plain text is the only field family whose validation/side effects we support here.\n if (!shadow || !shadow.isShadow() || shadow.type !== 'text' || !field ||\n field.constructor !== ScratchBlocks.FieldTextInput || field.getValidator() ||\n !vmShadow || vmShadow.opcode !== 'text' || !vmShadow.fields.TEXT ||\n !vmInput || vmInput.block !== shadow.id || typeof field.getValue() !== 'string') {\n Object.defineProperty(slots, name, { value: { kind: 'reporter' }, enumerable: true });\n continue;\n }\n // Do not open or save against events which have not reached the VM yet.\n if (vmShadow.fields.TEXT.value !== field.getValue())\n return null;\n Object.defineProperty(slots, name, {\n value: { kind: 'literal', value: field.getValue() }, enumerable: true\n });\n fields.set(name, { shadow, field, value: field.getValue() });\n signature.push(name, identify(shadow), identify(field), identify(vmShadow), shadow.id);\n }\n return {\n snapshot: {\n targetId: target.id,\n blockId: block.id,\n opcode: block.type,\n revision: JSON.stringify(signature),\n arguments: slots\n },\n fields,\n block,\n vmBlock\n };\n };\n const collect = reference => collectBlockEditorSubtree({ ScratchBlocks, reference, inspect, generation });\n notifyInvalidations = () => {\n if (committing)\n return;\n for (const item of [...invalidations]) {\n let matches = false;\n try {\n const current = collect(item.reference);\n matches = current && JSON.stringify(current.snapshot) === JSON.stringify(item.snapshot);\n }\n catch (error) {\n // A malformed replacement graph invalidates an already open session too.\n }\n if (!matches)\n item.listener(new BlockEditorConflictError('The block hierarchy changed.'));\n }\n };\n const apply = (prepared, signal) => {\n const Events = ScratchBlocks.Events;\n if (!Events.isEnabled() || !Events.recordUndo || Events.getGroup() ||\n !Array.isArray(workspace.undoStack_) || !Array.isArray(workspace.redoStack_)) {\n throw new Error('The workspace is busy or its undo API is unsupported.');\n }\n if (!prepared.length)\n return;\n const target = vm.editingTarget;\n const oldRevision = revision;\n const oldVersions = new Map(versions);\n const undo = workspace.undoStack_.slice();\n const redo = workspace.redoStack_.slice();\n const emitProjectChanged = vm.runtime.emitProjectChanged;\n let succeeded = false;\n // Hold dirty notifications until all synchronous field/VM updates have succeeded.\n vm.runtime.emitProjectChanged = () => { };\n Events.setGroup(true);\n Events.disable();\n committing = true;\n try {\n if (signal && signal.aborted)\n throw new BlockEditorConflictError();\n for (const item of prepared) {\n item.field.setValue(item.next);\n if (item.field.getValue() !== item.next)\n throw new Error('The field rejected its value.');\n }\n // Deliver normal Change events synchronously: VM and undo state agree before resolving.\n for (const item of prepared) {\n workspace.fireChangeListener(new Events.Change(item.shadow, 'field', 'TEXT', item.value, item.next));\n if ((signal && signal.aborted) || vm.editingTarget !== target)\n throw new BlockEditorConflictError();\n }\n succeeded = true;\n }\n catch (error) {\n // No queued setter events exist because events were disabled throughout this section.\n for (const item of prepared) {\n ScratchBlocks.FieldTextInput.prototype.setValue.call(item.field, item.value);\n target.blocks.blocklyListen(new Events.Change(item.shadow, 'field', 'TEXT', item.next, item.value));\n }\n workspace.undoStack_.splice(0, workspace.undoStack_.length, ...undo);\n workspace.redoStack_.splice(0, workspace.redoStack_.length, ...redo);\n revision = oldRevision;\n versions.clear();\n for (const [id, value] of oldVersions)\n versions.set(id, value);\n throw error;\n }\n finally {\n committing = false;\n Events.enable();\n Events.setGroup(false);\n vm.runtime.emitProjectChanged = emitProjectChanged;\n }\n if (succeeded) {\n // Observer exceptions must not misreport an already committed transaction as rejected.\n try {\n emitProjectChanged.call(vm.runtime);\n }\n catch (error) {\n onError(error);\n }\n }\n };\n const prepare = (changes, records) => {\n if (!Array.isArray(changes))\n throw new TypeError('Expected an argument patch array.');\n const seen = new Set();\n const fields = new Set();\n return changes.map(change => {\n const record = change && records.get(change.blockId);\n const key = change && JSON.stringify([change.blockId, change.argument]);\n if (!record || typeof change.value !== 'string' || seen.has(key) ||\n !owns(record.snapshot.arguments, change.argument) || !record.fields.has(change.argument)) {\n throw new TypeError('Only distinct standard text shadow changes are supported.');\n }\n seen.add(key);\n const item = record.fields.get(change.argument);\n if (fields.has(item.field))\n throw new TypeError('Duplicate shadow write.');\n fields.add(item.field);\n return { ...item, next: change.value };\n }).filter(item => item.next !== item.value);\n };\n const host = {\n isCommitting: () => committing,\n readBlock: reference => {\n const block = workspace.getBlockById(reference.blockId);\n const declaration = block && typeof registry.resolveFixed === 'function' && registry.resolveFixed(block.type);\n if (declaration)\n return host.fixedInputs ? host.fixedInputs.readBlock(reference, declaration) : null;\n const result = inspect(reference);\n return result ? result.snapshot : null;\n },\n commit: ({ expected, changes }) => {\n if (typeof registry.resolveFixed === 'function' && registry.resolveFixed(expected.opcode)) {\n throw new TypeError('Fixed input editors require the fixed transaction port.');\n }\n const current = inspect(expected);\n if (!current || JSON.stringify(current.snapshot) !== JSON.stringify(expected)) {\n throw new BlockEditorConflictError();\n }\n apply(prepare(changes.map(change => ({ ...change, blockId: expected.blockId })), new Map([[expected.blockId, current]])));\n },\n invalidate: renew,\n dispose: () => {\n disposed = true;\n notifyFixedScopes();\n fixedScopeListeners.clear();\n notifyInvalidations();\n invalidations.clear();\n workspace.removeChangeListener(invalidate);\n vm.removeListener('workspaceUpdate', renew);\n vm.removeListener('targetsUpdate', targetsChanged);\n }\n };\n if (enableDescendants) {\n host.descendants = {\n capability: DESCENDANT_EDITING_CAPABILITY,\n readSubtree: reference => {\n const result = collect(reference);\n return result ? result.snapshot : null;\n },\n commitSubtree: ({ expected, changes, signal }) => {\n const current = collect(expected);\n if ((signal && signal.aborted) || !current ||\n JSON.stringify(current.snapshot) !== JSON.stringify(expected))\n throw new BlockEditorConflictError();\n apply(prepare(changes, current.records), signal);\n },\n subscribeInvalidation: (reference, listener) => {\n const result = collect(reference);\n if (!result) {\n listener(new BlockEditorConflictError());\n return () => { };\n }\n const item = { reference, listener, snapshot: result.snapshot };\n invalidations.add(item);\n return () => invalidations.delete(item);\n }\n };\n }\n if (enableFixedInputs === true) {\n host.fixedInputs = createFixedInputPort({ ScratchBlocks, workspace, vm, registry, identify, onError,\n subscribeScope: listener => {\n fixedScopeListeners.add(listener);\n return () => { fixedScopeListeners.delete(listener); };\n },\n getState: () => ({ disposed, revision, generation, externalRevision }),\n begin: () => {\n committing = true;\n fixedTransaction = { events: new WeakSet(), revisions: 0, versions: new Map() };\n },\n markEvent: event => fixedTransaction.events.add(event),\n finish: succeeded => {\n if (!succeeded) {\n revision -= fixedTransaction.revisions;\n for (const [id, delta] of fixedTransaction.versions) {\n const remaining = (versions.get(id) || 0) - delta;\n if (remaining > 0)\n versions.set(id, remaining);\n else\n versions.delete(id);\n }\n }\n fixedTransaction = null;\n committing = false;\n } });\n }\n return host;\n};\nexport default createBlockEditorHost;\n", "// Decorate one known FieldImage; never search or intercept unrelated workspace DOM.\nconst bindBlockEditorIcon = ({ element, label, canOpen, onOpen }) => {\n const attributes = ['role', 'tabindex', 'aria-label', 'data-block-editor-icon'];\n const previous = attributes.map(name => element.getAttribute(name));\n const oldCursor = element.style.cursor;\n let press = null;\n const stop = event => {\n if (!canOpen())\n return;\n event.stopPropagation();\n event.preventDefault();\n };\n const down = event => {\n if (!canOpen() || event.button !== 0 || event.isPrimary === false)\n return;\n stop(event);\n press = { id: event.pointerId, x: event.clientX, y: event.clientY, moved: false };\n element.focus();\n if (element.setPointerCapture)\n element.setPointerCapture(event.pointerId);\n };\n const move = event => {\n if (!press || press.id !== event.pointerId)\n return;\n stop(event);\n if (Math.hypot(event.clientX - press.x, event.clientY - press.y) > 4)\n press.moved = true;\n };\n const up = event => {\n if (!press || press.id !== event.pointerId)\n return;\n move(event);\n const open = !press.moved && canOpen();\n press = null;\n if (element.releasePointerCapture && element.hasPointerCapture(event.pointerId)) {\n element.releasePointerCapture(event.pointerId);\n }\n if (open)\n onOpen();\n };\n const cancel = () => {\n press = null;\n };\n const key = event => {\n if ((event.key === 'Enter' || event.key === ' ') && canOpen()) {\n stop(event);\n if (!event.repeat)\n onOpen();\n }\n };\n const listeners = [\n ['pointerdown', down], ['pointermove', move], ['pointerup', up], ['pointercancel', cancel],\n ['mousedown', stop], ['mouseup', stop], ['click', stop], ['dblclick', stop],\n ['touchstart', stop], ['touchend', stop], ['touchmove', stop], ['keydown', key]\n ];\n element.setAttribute('role', 'button');\n element.setAttribute('tabindex', '0');\n element.setAttribute('aria-label', label);\n element.setAttribute('data-block-editor-icon', '');\n element.style.cursor = 'pointer';\n for (const [type, listener] of listeners)\n element.addEventListener(type, listener, { passive: false });\n return () => {\n for (const [type, listener] of listeners)\n element.removeEventListener(type, listener);\n attributes.forEach((name, index) => {\n if (previous[index] === null)\n element.removeAttribute(name);\n else\n element.setAttribute(name, previous[index]);\n });\n element.style.cursor = oldCursor;\n press = null;\n };\n};\nexport default bindBlockEditorIcon;\n", "// Presentation metadata stays outside snapshots, drafts and saved project data.\nconst readBlockEditorAppearance = (block, ScratchBlocks) => {\n const appearance = {};\n if (!block)\n return appearance;\n try {\n // Use the block's own labels, without reading JSON or other values from connected inputs.\n const name = block.inputList.filter(input => input.type !== ScratchBlocks.NEXT_STATEMENT)\n .map(input => input.fieldRow.filter(field => !(field instanceof ScratchBlocks.FieldImage))\n .map(field => field.getText())\n .join(' '))\n .join(' ')\n .replace(/\\s+/g, ' ')\n .trim();\n if (name)\n appearance.name = name;\n }\n catch (error) {\n // The opcode remains available as a name fallback.\n }\n try {\n const colour = block.getColour();\n if (typeof colour === 'string' && /^#[0-9a-f]{6}$/i.test(colour)) {\n appearance.colour = colour;\n const channels = [1, 3, 5].map(offset => parseInt(colour.slice(offset, offset + 2), 16));\n appearance.tint = `rgba(${channels.join(', ')}, 0.08)`;\n }\n }\n catch (error) {\n // Missing presentation data must not prevent opening an otherwise editable tree.\n }\n try {\n const input = block.inputList[0];\n const field = input && input.fieldRow[0];\n if (field instanceof ScratchBlocks.FieldImage) {\n const uri = field.getValue();\n if (typeof uri === 'string' && uri.trim())\n appearance.iconURI = uri;\n }\n }\n catch (error) {\n // Keep the colour even when the leading image is unavailable.\n }\n return appearance;\n};\nexport default readBlockEditorAppearance;\n", "// A failed opening has no draft or save path; retain a closeable diagnostic modal.\nconst createBlockEditorErrorSession = (reference, error) => {\n let status = 'editing';\n const listeners = new Set();\n const finish = next => {\n if (status !== 'editing')\n return false;\n status = next;\n for (const listener of [...listeners])\n listener();\n listeners.clear();\n return true;\n };\n return Object.freeze({\n reference,\n getState: () => ({ status, canSave: false, issues: [], error }),\n subscribe: listener => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n mount: () => () => { },\n save: () => Promise.resolve({ status: 'failed', error }),\n cancel: () => finish('cancelled'),\n dispose: () => {\n finish('disposed');\n return true;\n }\n });\n};\nexport default createBlockEditorErrorSession;\n", "import createBlockEditorHost from './host.js';\nimport bindBlockEditorIcon from './icon.js';\nimport readBlockEditorAppearance from './appearance.js';\nimport { supportsDescendantEditing, supportsFixedInputEditing } from '../index.js';\nimport createBlockEditorErrorSession from './error-session.js';\nconst fixedDeclaration = (registry, snapshot) => snapshot && typeof registry.resolveFixed === 'function' &&\n registry.resolveFixed(snapshot.opcode);\nconst openBlockEditorSession = ({ registry, reference, host, descendants }) => {\n const snapshot = host.readBlock ? host.readBlock(reference) : null;\n // A fixed registration owns only this block; legacy aggregate traversal stays fail-closed.\n if (fixedDeclaration(registry, snapshot))\n return supportsFixedInputEditing(host) ? registry.open(reference, host) : undefined;\n return descendants && supportsDescendantEditing(host) ?\n registry.openDescendants(reference, host) : registry.open(reference, host);\n};\nconst createBlockEditorBridge = ({ ScratchBlocks, workspace, vm, service, label, canOpen, onOpen, onError, descendants = false, fixedInputs = false }) => {\n const host = createBlockEditorHost({ ScratchBlocks,\n workspace,\n vm,\n registry: service.registry,\n enableDescendants: descendants,\n enableFixedInputs: fixedInputs,\n onError });\n const decorations = new Map();\n let disposed = false;\n let timer = null;\n let activeSession = null;\n let openingSnapshot = null;\n let openingFixedDeclaration = null;\n let stopWaiting = null;\n const endSession = () => {\n const session = activeSession;\n if (!session)\n return;\n if (typeof session.invalidate === 'function') {\n session.invalidate();\n return;\n }\n // Normal close is refused while saving. Host invalidation also blocks commit,\n // then releases the old view as soon as its pending validation settles.\n if (session.dispose())\n return;\n if (!stopWaiting) {\n stopWaiting = session.subscribe(() => {\n if (session.getState().status === 'saving')\n return;\n stopWaiting();\n stopWaiting = null;\n session.dispose();\n });\n }\n };\n const checkSession = () => {\n var _a;\n // The host owns rollback. Its synchronous transaction must retain the draft on failure.\n if (host.isCommitting())\n return;\n if (!activeSession || !openingSnapshot ||\n !['editing', 'saving'].includes(activeSession.getState().status))\n return;\n const current = typeof activeSession.getNodes === 'function' ?\n host.descendants.readSubtree(activeSession.reference) : host.readBlock(activeSession.reference);\n if (openingFixedDeclaration) {\n // Same-target external edits conflict at save while the session retains its draft.\n // Project/target/registration replacement ends the session and drops that draft.\n if (!current || ((_a = current.fixedContext) === null || _a === void 0 ? void 0 : _a.generation) !== openingSnapshot.fixedContext.generation ||\n fixedDeclaration(service.registry, current) !== openingFixedDeclaration)\n endSession();\n return;\n }\n if (!current || JSON.stringify(current) !== JSON.stringify(openingSnapshot))\n endSession();\n };\n const available = block => {\n if (disposed || !vm.editingTarget || !canOpen() || !service.registry.resolve(block.type))\n return false;\n const snapshot = host.readBlock({ targetId: vm.editingTarget.id, blockId: block.id });\n if (fixedDeclaration(service.registry, snapshot))\n return supportsFixedInputEditing(host);\n return snapshot && Object.values(snapshot.arguments).every(slot => slot.kind === 'literal');\n };\n const open = block => {\n if (activeSession && ['editing', 'saving'].includes(activeSession.getState().status))\n return;\n const reference = { targetId: vm.editingTarget.id, blockId: block.id };\n try {\n const session = openBlockEditorSession({ registry: service.registry, reference, host, descendants });\n if (!session && descendants)\n throw new Error('The complete block hierarchy is not editable.');\n if (session) {\n ScratchBlocks.hideChaff();\n activeSession = session;\n openingSnapshot = typeof session.getNodes === 'function' ?\n host.descendants.readSubtree(session.reference) : host.readBlock(session.reference);\n openingFixedDeclaration = fixedDeclaration(service.registry, openingSnapshot) || null;\n const labels = {};\n const appearances = Object.create(null);\n if (typeof session.getNodes === 'function') {\n for (const node of session.getNodes()) {\n const source = workspace.getBlockById(node.reference.blockId);\n const appearance = readBlockEditorAppearance(source, ScratchBlocks);\n appearances[node.reference.blockId] = appearance;\n labels[node.reference.blockId] = appearance.name || node.opcode;\n }\n }\n onOpen(session, labels, appearances);\n }\n }\n catch (error) {\n onError(error);\n activeSession = createBlockEditorErrorSession(reference, error);\n openingSnapshot = null;\n openingFixedDeclaration = null;\n onOpen(activeSession);\n }\n };\n const refresh = () => {\n if (disposed)\n return;\n const seen = new Set();\n for (const block of workspace.getAllBlocks(false)) {\n const input = block.inputList[0];\n const field = input && input.fieldRow[0];\n if (workspace.options.readOnly || !service.registry.resolve(block.type) || !field ||\n !(field instanceof ScratchBlocks.FieldImage) || !field.fieldGroup_ ||\n block.isInFlyout || block.isShadow() || !block.isEditable())\n continue;\n seen.add(block.id);\n const old = decorations.get(block.id);\n if (old && old.field === field)\n continue;\n if (old)\n old.cleanup();\n const tooltip = field.imageElement_.tooltip;\n field.setTooltip(label);\n const unbind = bindBlockEditorIcon({\n element: field.fieldGroup_,\n label,\n canOpen: () => available(block),\n onOpen: () => open(block)\n });\n decorations.set(block.id, { field,\n cleanup: () => {\n unbind();\n if (field.imageElement_)\n field.imageElement_.tooltip = tooltip;\n } });\n }\n for (const [id, decoration] of decorations) {\n if (!seen.has(id)) {\n decoration.cleanup();\n decorations.delete(id);\n }\n }\n };\n const schedule = () => {\n checkSession();\n clearTimeout(timer);\n timer = setTimeout(refresh, 0);\n };\n const unregister = service.subscribe(() => {\n // Aggregate sessions observe relevant registry changes themselves.\n if (openingFixedDeclaration && activeSession) {\n if (service.registry.resolveFixed(openingSnapshot.opcode) !== openingFixedDeclaration) {\n host.invalidate();\n endSession();\n }\n }\n else if (!activeSession || typeof activeSession.getNodes !== 'function') {\n host.invalidate();\n endSession();\n }\n schedule();\n });\n workspace.addChangeListener(schedule);\n vm.on('workspaceUpdate', schedule);\n vm.on('targetsUpdate', schedule);\n refresh();\n return {\n refresh,\n dispose: () => {\n disposed = true;\n clearTimeout(timer);\n unregister();\n workspace.removeChangeListener(schedule);\n vm.removeListener('workspaceUpdate', schedule);\n vm.removeListener('targetsUpdate', schedule);\n host.dispose();\n endSession();\n for (const decoration of decorations.values())\n decoration.cleanup();\n decorations.clear();\n }\n };\n};\nexport default createBlockEditorBridge;\nexport { openBlockEditorSession };\n", "import createBridge, { openBlockEditorSession as openSession } from './turbowarp/bridge.js';\nimport createHost from './turbowarp/host.js';\nimport bindIcon from './turbowarp/icon.js';\nimport readAppearance from './turbowarp/appearance.js';\nimport createErrorSession from './turbowarp/error-session.js';\n/** Attach to one workspace. No global VM, feature flag, React or GUI module is consulted. */\nexport function attachTurboWarpBlockEditors(options) {\n var _a;\n if (options.enabled !== true)\n return Object.freeze({ refresh() { }, dispose() { } });\n const bridge = createBridge({ ...options, descendants: options.descendants === true, fixedInputs: options.fixedInputs === true,\n onError: (_a = options.onError) !== null && _a !== void 0 ? _a : console.error });\n let disposed = false;\n return Object.freeze({\n refresh() { if (!disposed)\n bridge.refresh(); },\n dispose() {\n if (disposed)\n return;\n disposed = true;\n bridge.dispose();\n }\n });\n}\n/** Lower-level host port for custom integrations; standard GUI integrations use attachTurboWarpBlockEditors. */\nexport function createTurboWarpBlockEditorHost(options) {\n return createHost(options);\n}\nexport function bindBlockEditorIcon(options) {\n return bindIcon(options);\n}\nexport function readBlockEditorAppearance(block, ScratchBlocks) {\n return readAppearance(block, ScratchBlocks);\n}\nexport function createBlockEditorErrorSession(reference, error) {\n return createErrorSession(reference, error);\n}\nexport function openBlockEditorSession(options) {\n return openSession(options);\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { BlockEditorStructureError, DEFAULT_DESCENDANT_LIMITS } from '../index.js';\n// Traverse statement inputs and their internal next chains; never the root's outer next or reporters.\nconst collectBlockEditorSubtree = ({ ScratchBlocks, reference, inspect, generation }) => {\n const nodes = [];\n const records = new Map();\n const pending = {};\n const invalid = message => {\n throw new BlockEditorStructureError(message, 'invalid-structure');\n };\n const visit = (id, depth) => {\n if (records.has(id)) {\n throw new BlockEditorStructureError('A statement block is connected more than once.', 'cycle');\n }\n if (depth > DEFAULT_DESCENDANT_LIMITS.maxDepth || nodes.length >= DEFAULT_DESCENDANT_LIMITS.maxNodes) {\n throw new BlockEditorStructureError('The block hierarchy exceeds the editing limit.', 'limit');\n }\n const record = inspect({ targetId: reference.targetId, blockId: id }, true);\n if (!record)\n throw pending;\n if (record.block.outputConnection)\n invalid('A reporter cannot be a statement descendant.');\n records.set(id, record);\n const branches = [];\n nodes.push({ block: record.snapshot, branches });\n for (const input of record.block.inputList) {\n if (input.type !== ScratchBlocks.NEXT_STATEMENT)\n continue;\n const branch = { input: input.name, blockIds: [] };\n branches.push(branch);\n let child = input.connection && input.connection.targetBlock();\n const vmInput = record.vmBlock.inputs[input.name];\n if ((child ? child.id : null) !== (vmInput && vmInput.block ? vmInput.block : null))\n throw pending;\n let previous = input.connection;\n while (child) {\n if (!child.previousConnection || child.previousConnection.targetConnection !== previous) {\n invalid('Invalid statement connection.');\n }\n branch.blockIds.push(child.id);\n visit(child.id, depth + 1);\n const next = child.getNextBlock();\n if ((next ? next.id : null) !== (records.get(child.id).vmBlock.next || null))\n throw pending;\n previous = child.nextConnection;\n child = next;\n }\n }\n };\n try {\n visit(reference.blockId, 0);\n }\n catch (error) {\n if (error === pending)\n return null;\n throw error;\n }\n return { snapshot: { ...reference, generation: String(generation), nodes }, records };\n};\nexport default collectBlockEditorSubtree;\n", "const owns = (object, key) => Object.prototype.hasOwnProperty.call(object, key);\nconst own = (object, key) => {\n const descriptor = object && Object.getOwnPropertyDescriptor(object, key);\n return descriptor && 'value' in descriptor ? descriptor.value : undefined;\n};\nconst primitive = value => typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean';\nconst token = /^-?(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$/u;\n// Inspect data properties without invoking custom field accessors or menu providers.\nconst inherited = (object, name) => {\n for (let current = object; current; current = Object.getPrototypeOf(current)) {\n const descriptor = Object.getOwnPropertyDescriptor(current, name);\n if (descriptor)\n return 'value' in descriptor ? descriptor.value : undefined;\n }\n return undefined;\n};\nconst storage = ['text_', 'value_', 'colour_', 'validator_', 'sourceBlock_', 'hue_', 'saturation_', 'brightness_'];\nconst methods = ['getValue', 'getText', 'setValue', 'setText', 'getValidator', 'classValidator', 'callValidator',\n 'getOptions', 'forceRerender', 'updateSliderHandles_', 'updateDom_'];\nconst trustedClasses = new WeakMap();\n/** Freeze native method identities once when the host attaches, before opening editors. */\nexport function initializeFixedFields(ScratchBlocks) {\n for (const key of ['FieldTextInput', 'FieldNumber', 'FieldDropdown', 'FieldColourSlider']) {\n const Class = ScratchBlocks[key];\n if (typeof Class !== 'function' || trustedClasses.has(Class))\n continue;\n const chain = [];\n for (let prototype = Class.prototype; prototype && prototype !== Object.prototype; prototype = Object.getPrototypeOf(prototype)) {\n chain.push({ prototype, own: methods.map(name => [name, Object.getOwnPropertyDescriptor(prototype, name)]) });\n }\n trustedClasses.set(Class, { prototype: Class.prototype, chain,\n methods: methods.map(name => [name, inherited(Class.prototype, name)]) });\n }\n}\nconst safeField = (field, Class) => {\n const trusted = Class && trustedClasses.get(Class);\n if (!trusted || Class.prototype !== trusted.prototype || Object.getPrototypeOf(field) !== trusted.prototype)\n return false;\n let currentPrototype = trusted.prototype;\n for (const entry of trusted.chain) {\n if (currentPrototype !== entry.prototype)\n return false;\n for (const [name, expected] of entry.own) {\n const actual = Object.getOwnPropertyDescriptor(currentPrototype, name);\n if (Boolean(actual) !== Boolean(expected) ||\n (actual && (!('value' in actual) || !expected || !('value' in expected) || actual.value !== expected.value)))\n return false;\n }\n currentPrototype = Object.getPrototypeOf(currentPrototype);\n }\n if (currentPrototype !== Object.prototype && currentPrototype !== null)\n return false;\n for (const name of storage) {\n for (let current = field; current; current = Object.getPrototypeOf(current)) {\n const descriptor = Object.getOwnPropertyDescriptor(current, name);\n if (!descriptor)\n continue;\n if (!('value' in descriptor))\n return false;\n break;\n }\n }\n for (const [name, expected] of trusted.methods) {\n if (owns(field, name) || inherited(field, name) !== expected)\n return false;\n }\n for (let current = field; current; current = Object.getPrototypeOf(current)) {\n const descriptor = Object.getOwnPropertyDescriptor(current, 'validator_');\n if (descriptor)\n return 'value' in descriptor && descriptor.value == null;\n }\n return false;\n};\nconst arrayData = value => {\n if (!Array.isArray(value) || Object.getPrototypeOf(value) !== Array.prototype)\n return null;\n const result = [];\n for (let index = 0; index < value.length; index++) {\n const descriptor = Object.getOwnPropertyDescriptor(value, String(index));\n if (!descriptor || !('value' in descriptor))\n return null;\n result.push(descriptor.value);\n }\n return result;\n};\nconst staticValues = field => {\n const items = arrayData(own(field, 'menuGenerator_'));\n if (!items || items.length === 0)\n return null;\n const values = [];\n for (const item of items) {\n const tuple = arrayData(item);\n if (!tuple || tuple.length !== 2 || typeof tuple[0] !== 'string' || typeof tuple[1] !== 'string')\n return null;\n values.push(tuple[1]);\n }\n return Object.freeze(values);\n};\nconst rawKeys = ['text_', 'value_', 'colour_', 'hue_', 'saturation_', 'brightness_'];\nconst ownState = (object, keys) => keys.map(name => [name, Object.getOwnPropertyDescriptor(object, name)]);\nconst restoreOwnState = (object, state) => {\n for (const [name, descriptor] of state) {\n if (descriptor)\n Object.defineProperty(object, name, descriptor);\n else\n delete object[name];\n }\n};\nconst vmFieldsIdentity = (fields, identify) => Object.keys(fields || {}).sort().map(name => {\n const descriptor = Object.getOwnPropertyDescriptor(fields, name);\n if (!descriptor || !('value' in descriptor))\n return [name, 'accessor'];\n const stored = descriptor.value;\n if (!stored || typeof stored !== 'object')\n return [name, typeof stored, String(stored)];\n return [name, identify(stored), ...Object.keys(stored).sort().map(key => {\n const item = Object.getOwnPropertyDescriptor(stored, key);\n if (!item || !('value' in item))\n return [key, 'accessor'];\n const value = item.value;\n return [key, typeof value, primitive(value) ? (Object.is(value, -0) ? '-0' : String(value)) :\n value && (typeof value === 'object' || typeof value === 'function') ? identify(value) : String(value)];\n })];\n});\nconst colorState = (block, field) => {\n const colors = ['getColour', 'getColourSecondary', 'getColourTertiary', 'getColourQuaternary'];\n return {\n colors: colors.map(name => typeof block[name] === 'function' ? block[name]() : undefined),\n hsv: ['hue_', 'saturation_', 'brightness_'].map(name => [name, own(field, name)]),\n blockProperties: ownState(block, ['colour_', 'colourSecondary_', 'colourTertiary_', 'colourQuaternary_'])\n };\n};\n/** Native objects stay local; only primitive metadata is returned in snapshots. */\nexport function inspectFixedArgument({ ScratchBlocks, block, vmBlock, target, argument, role, identify, extensionId }) {\n initializeFixedFields(ScratchBlocks);\n const sourceIdentity = [argument, identify(block), identify(vmBlock)];\n let observedFields = [];\n const unavailable = (source, reason, raw) => ({\n slot: primitive(raw) ? { kind: 'literal', value: raw } : { kind: 'reporter' },\n metadata: { role, source, identity: JSON.stringify([...sourceIdentity, source]), reason },\n signatureParts: [...sourceIdentity, observedFields]\n });\n const direct = block.getField(argument);\n const input = block.getInput(argument);\n const connected = input && input.connection && input.connection.targetBlock();\n const vmInput = vmBlock.inputs && vmBlock.inputs[argument];\n if ((connected ? connected.id : null) !== (vmInput && vmInput.block ? vmInput.block : null))\n return null;\n if (direct && connected)\n return null;\n if (connected && !connected.isShadow()) {\n const vmReporter = target.blocks.getBlock(connected.id);\n if (!vmReporter || vmReporter.opcode !== connected.type || vmReporter.parent !== block.id)\n return null;\n sourceIdentity.push(identify(connected), identify(vmReporter), connected.id, connected.type);\n return { slot: { kind: 'reporter' }, metadata: { role, source: 'reporter', identity: JSON.stringify(sourceIdentity) },\n signatureParts: sourceIdentity };\n }\n let owner = direct ? block : connected;\n if (!owner) {\n if (vmBlock.fields && owns(vmBlock.fields, argument))\n return null;\n return unavailable('missing', 'The declared field or input is missing.');\n }\n const vmOwner = direct ? vmBlock : target.blocks.getBlock(owner.id);\n if (!vmOwner || vmOwner.opcode !== owner.type)\n return null;\n sourceIdentity.push(identify(owner), identify(vmOwner), owner.id, owner.type);\n observedFields = vmFieldsIdentity(vmOwner.fields, identify);\n if (!direct && (!vmInput || vmInput.shadow !== owner.id || vmOwner.parent !== block.id))\n return null;\n let kind;\n let name;\n let Class;\n if (direct) {\n kind = 'menu';\n name = argument;\n Class = ScratchBlocks.FieldDropdown;\n }\n else if (owner.type === 'text') {\n kind = 'text';\n name = 'TEXT';\n Class = ScratchBlocks.FieldTextInput;\n }\n else if (owner.type === 'math_number') {\n kind = 'number';\n name = 'NUM';\n Class = ScratchBlocks.FieldNumber;\n }\n else if (owner.type === 'colour_picker') {\n kind = 'color';\n name = 'COLOUR';\n Class = ScratchBlocks.FieldColourSlider;\n }\n else if (typeof extensionId === 'string' && owner.type.startsWith(`${extensionId}_menu_`)) {\n kind = 'menu';\n Class = ScratchBlocks.FieldDropdown;\n const names = [];\n for (const row of owner.inputList)\n for (const candidate of row.fieldRow) {\n const candidateName = own(candidate, 'name');\n if (typeof candidateName === 'string' && candidateName)\n names.push(candidateName);\n }\n if (names.length !== 1)\n return unavailable('unsupported', 'The menu shadow does not have one standard field.');\n [name] = names;\n }\n else\n return unavailable('unsupported', 'The shadow field family is unsupported.');\n const field = direct || owner.getField(name);\n const stored = vmOwner.fields && vmOwner.fields[name];\n if (!field || !stored)\n return null;\n sourceIdentity.push(identify(field), name);\n const raw = own(stored, 'value');\n if (!safeField(field, Class))\n return unavailable('unsupported', 'The field class, methods or validator is unsupported.', raw);\n const value = inherited(Class.prototype, 'getValue').call(field);\n if (!Object.is(value, raw))\n return null;\n if (typeof value !== 'string')\n return unavailable('unsupported', 'The native field value is not a string.', raw);\n const allowedValues = kind === 'menu' ? staticValues(field) : undefined;\n if (kind === 'menu' && !allowedValues)\n return unavailable('unsupported', 'Dynamic or nonstandard menus are unsupported.', raw);\n sourceIdentity.push(kind, ...(allowedValues || []));\n const binding = { block: owner, field, fieldName: name, value, vmBlock: vmOwner, kind,\n Class, prototype: Class.prototype, allowedValues,\n restoreValue: inherited(Class.prototype, 'setValue'), rawState: ownState(field, rawKeys),\n restoreHandles: inherited(Class.prototype, 'updateSliderHandles_'),\n restoreDom: inherited(Class.prototype, 'updateDom_'),\n ...(kind === 'color' ? { restoreState: colorState(owner, field) } : {}) };\n return { slot: { kind: 'literal', value }, metadata: { role, source: direct ? 'field' : 'shadow',\n identity: JSON.stringify(sourceIdentity), field: { blockId: owner.id, name, type: { text: 'FieldTextInput', number: 'FieldNumber', menu: 'FieldDropdown', color: 'FieldColourSlider' }[kind] } },\n ...(role === 'editable' ? { binding } : {}), signatureParts: [...sourceIdentity, observedFields] };\n}\n/** Validate the exact saved primitive; native setters must not silently normalize it. */\nexport function prepareFixedChange(binding, value) {\n if (!binding || !safeField(binding.field, binding.Class) || typeof value !== 'string') {\n throw new TypeError('Only standard native string field writes are supported.');\n }\n if (binding.kind === 'menu') {\n const currentValues = staticValues(binding.field);\n if (!currentValues || currentValues.length !== binding.allowedValues.length ||\n currentValues.some((item, index) => item !== binding.allowedValues[index])) {\n throw new TypeError('The static menu changed before preparing the write.');\n }\n }\n if (value !== binding.value) {\n if (binding.kind === 'number' && (!token.test(value.trim()) || !Number.isFinite(Number(value)))) {\n throw new TypeError('Expected a finite numeric field token.');\n }\n if (binding.kind === 'color' && !/^#(?:[a-f0-9]{3}|[a-f0-9]{6})$/iu.test(value)) {\n throw new TypeError('Expected a hexadecimal color field token.');\n }\n if (binding.kind === 'menu' && !binding.allowedValues.includes(value)) {\n throw new TypeError('Expected a declared static menu value.');\n }\n }\n return { ...binding, next: value };\n}\n/** Capture a later external value without invoking replacement field methods. */\nexport function captureFixedFieldState(binding) {\n if (!binding || !safeField(binding.field, binding.Class)) {\n throw new TypeError('Cannot capture an unsupported native field.');\n }\n const value = inherited(binding.prototype, 'getValue').call(binding.field);\n if (typeof value !== 'string')\n throw new TypeError('Expected a native string field.');\n return { ...binding, value, rawState: ownState(binding.field, rawKeys),\n ...(binding.kind === 'color' ? { restoreState: colorState(binding.block, binding.field) } : {}) };\n}\n/** Restore raw text and the standard color field's additional block/UI state. */\nexport function restoreFixedField(binding) {\n let failure;\n try {\n binding.restoreValue.call(binding.field, binding.value);\n }\n catch (error) {\n failure = error;\n }\n // The standard setters can update raw data before renderer code throws.\n // Restore primitive descriptors independently so renderer failure cannot retain new data.\n restoreOwnState(binding.field, binding.rawState);\n if (binding.restoreState) {\n const colors = binding.restoreState.colors;\n try {\n if (colors.every(value => typeof value === 'string'))\n binding.block.setColour(...colors);\n }\n catch (error) {\n failure = failure || error;\n }\n restoreOwnState(binding.block, binding.restoreState.blockProperties);\n try {\n binding.restoreHandles.call(binding.field);\n }\n catch (error) {\n failure = failure || error;\n }\n try {\n binding.restoreDom.call(binding.field);\n }\n catch (error) {\n failure = failure || error;\n }\n }\n if (failure)\n throw failure;\n}\n", "import { BlockEditorConflictError, FIXED_INPUTS_CAPABILITY } from '../index.js';\nimport { captureFixedInputDeclaration, captureFixedSnapshot, sameFixedSnapshot } from '../fixed-input-snapshot.js';\nimport { initializeFixedFields, inspectFixedArgument, prepareFixedChange, restoreFixedField, captureFixedFieldState } from './fixed-fields.js';\nimport { snapshotJson } from '../schema-json.js';\nimport { validateFixedBranchChanges } from '../fixed-input-branches.js';\nconst own = (object, name) => {\n const descriptor = object && Object.getOwnPropertyDescriptor(object, name);\n if (!descriptor || !Object.prototype.hasOwnProperty.call(descriptor, 'value')) {\n throw new TypeError('Expected an own data property.');\n }\n return descriptor.value;\n};\nconst inheritedData = (object, key) => {\n for (let item = object; item; item = Object.getPrototypeOf(item)) {\n const descriptor = Object.getOwnPropertyDescriptor(item, key);\n if (descriptor) {\n if (!('value' in descriptor))\n throw new TypeError('Unsupported undo configuration.');\n return descriptor.value;\n }\n }\n return undefined;\n};\nconst ensureNativeHistory = stack => {\n if (!Array.isArray(stack) || !Object.isExtensible(stack) ||\n Object.getOwnPropertySymbols(stack).length || !Object.getOwnPropertyDescriptor(stack, 'length').writable) {\n throw new TypeError('Unsupported undo history.');\n }\n if (Object.getOwnPropertyNames(stack).length !== stack.length + 1)\n throw new TypeError('Unsupported undo history.');\n for (let index = 0; index < stack.length; index++) {\n const descriptor = Object.getOwnPropertyDescriptor(stack, String(index));\n if (!descriptor || !('value' in descriptor) || !descriptor.writable || !descriptor.configurable) {\n throw new TypeError('Unsupported undo history.');\n }\n }\n};\nconst copyHistory = stack => {\n const copy = [];\n for (let index = 0; index < stack.length; index++)\n copy.push(own(stack, String(index)));\n return copy;\n};\nconst replaceHistory = (stack, values) => {\n stack.length = 0;\n for (const value of values)\n Array.prototype.push.call(stack, value);\n};\nconst conflict = () => { throw new BlockEditorConflictError(); };\nconst aborted = Object.getOwnPropertyDescriptor(AbortSignal.prototype, 'aborted').get;\nconst isAborted = signal => aborted.call(signal);\nconst optionalOwn = (object, name) => {\n const descriptor = object && Object.getOwnPropertyDescriptor(object, name);\n if (descriptor && !Object.prototype.hasOwnProperty.call(descriptor, 'value')) {\n throw new TypeError('VM state must contain data properties.');\n }\n return descriptor && descriptor.value;\n};\nconst stateToken = (value, identify, seen = new Set()) => {\n if (typeof value === 'number')\n return ['number', Object.is(value, -0) ? '-0' : String(value)];\n if (value === undefined)\n return ['undefined'];\n if (value === null || typeof value === 'string' || typeof value === 'boolean')\n return value;\n if (typeof value !== 'object' || seen.has(value) || seen.size > 64)\n throw new TypeError('Unsupported VM state.');\n seen.add(value);\n const result = Object.getOwnPropertyNames(value).sort().map(key => [key, stateToken(own(value, key), identify, seen)]);\n seen.delete(value);\n return ['object', identify(value), result];\n};\nconst untouchedState = (block, vmBlock, target, bindings, identify) => {\n const omitted = new Map();\n for (const binding of bindings.values()) {\n if (!omitted.has(binding.vmBlock))\n omitted.set(binding.vmBlock, new Set());\n omitted.get(binding.vmBlock).add(binding.fieldName);\n }\n const seen = new Set();\n const records = [];\n const capture = item => {\n if (!item || seen.has(item))\n return;\n seen.add(item);\n const fields = item.fields || {};\n records.push([identify(item), ['id', 'opcode', 'parent', 'next', 'inputs', 'mutation', 'shadow', 'topLevel']\n .map(key => [key, stateToken(optionalOwn(item, key), identify)]), identify(fields), Object.keys(fields).sort()\n .map(key => {\n var _a;\n const field = own(fields, key);\n if (!((_a = omitted.get(item)) === null || _a === void 0 ? void 0 : _a.has(key)))\n return [key, stateToken(field, identify)];\n return [key, identify(field), Object.getOwnPropertyNames(field).sort()\n .filter(property => property !== 'value').map(property => [property, stateToken(own(field, property), identify)])];\n })]);\n };\n capture(vmBlock);\n const connections = [];\n for (const input of block.inputList) {\n const connected = input.connection && input.connection.targetBlock();\n connections.push([input.name || '', identify(input), input.connection ? identify(input.connection) : null, connected ? [connected.id, connected.type, identify(connected)] : null]);\n if (connected)\n capture(target.blocks.getBlock(connected.id));\n }\n const statementConnections = ['nextConnection', 'previousConnection', 'outputConnection'].map(name => {\n const connection = block[name];\n const connected = connection && connection.targetBlock();\n return [name, connection ? identify(connection) : null,\n connection && connection.targetConnection ? identify(connection.targetConnection) : null,\n connected ? [connected.id, connected.type, identify(connected)] : null];\n });\n return JSON.stringify([records, connections, statementConnections]);\n};\nconst sameDeclaration = (left, right) => JSON.stringify(captureFixedInputDeclaration(left)) ===\n JSON.stringify(captureFixedInputDeclaration(right));\n// Fixed inputs deliberately use a separate transaction from the legacy TEXT adapter.\nexport default function createFixedInputPort({ ScratchBlocks, workspace, vm, registry, identify, getState, begin, markEvent, finish, onError, subscribeScope }) {\n initializeFixedFields(ScratchBlocks);\n const inspect = (reference, suppliedDeclaration) => {\n const state = getState();\n const target = vm.editingTarget;\n if (state.disposed || !target || target.id !== reference.targetId || workspace.isFlyout ||\n workspace.options.readOnly || (workspace.isDragging && workspace.isDragging()))\n return null;\n const block = workspace.getBlockById(reference.blockId);\n if (!block || block.isInFlyout || block.isShadow() || !block.isEditable())\n return null;\n const descriptor = registry.resolve(block.type);\n const declaration = registry.resolveFixed(block.type);\n if (!descriptor || !declaration || !sameDeclaration(declaration, suppliedDeclaration))\n return null;\n const vmBlock = target.blocks.getBlock(block.id);\n const nextBlock = block.nextConnection && block.nextConnection.targetBlock();\n if (!vmBlock || (nextBlock ? nextBlock.id : null) !== (vmBlock.next || null) || vmBlock.opcode !== block.type ||\n (block.getParent() ? block.getParent().id : null) !== (vmBlock.parent || null))\n return null;\n const arguments_ = Object.create(null);\n const inputs = Object.create(null);\n const bindings = new Map();\n const signature = [state.revision, identify(target), identify(block), identify(vmBlock), identify(declaration)];\n for (const [role, names] of [['editable', declaration.editableArguments], ['readonly', declaration.readOnlyArguments]]) {\n for (const argument of names) {\n const item = inspectFixedArgument({ ScratchBlocks, block, vmBlock, target, argument, role,\n identify, extensionId: descriptor.extensionId });\n if (!item)\n return null;\n arguments_[argument] = item.slot;\n inputs[argument] = item.metadata;\n if (role === 'editable' && item.binding)\n bindings.set(argument, item.binding);\n signature.push(argument, item.signatureParts);\n }\n }\n const untouched = untouchedState(block, vmBlock, target, bindings, identify);\n signature.push(untouched);\n const snapshot = captureFixedSnapshot({ targetId: target.id, blockId: block.id, opcode: block.type,\n revision: JSON.stringify(signature), arguments: arguments_, fixedContext: {\n contractId: declaration.contractId, contractRevision: declaration.contractRevision,\n generation: String(state.generation), readOnlyArguments: declaration.readOnlyArguments,\n dependencies: declaration.dependencies, inputs\n } }, reference, declaration);\n return { snapshot, bindings, declaration, target, block, vmBlock, state, untouched, runtime: vm.runtime };\n };\n const commit = request => {\n var _a;\n const expectedInput = own(request, 'expected');\n const changesInput = own(request, 'changes');\n const signal = own(request, 'signal');\n try {\n const contextInput = own(request, 'context');\n const context = snapshotJson({ consumerId: own(contextInput, 'consumerId'),\n nowMs: own(contextInput, 'nowMs'), settings: own(contextInput, 'settings') });\n if (typeof context.consumerId !== 'string' || !context.consumerId ||\n typeof context.nowMs !== 'number' || !Number.isFinite(context.nowMs)) {\n throw new TypeError('Invalid fixed validation context.');\n }\n }\n catch (_b) {\n throw new TypeError('Invalid fixed validation context.');\n }\n if (isAborted(signal))\n conflict();\n const expected = captureFixedSnapshot(expectedInput);\n const current = inspect(expected, registry.resolveFixed(expected.opcode));\n if (!current || !sameFixedSnapshot(expected, current.snapshot))\n conflict();\n const declaration = current.declaration;\n captureFixedSnapshot(expected, expected, declaration);\n if (!Array.isArray(changesInput))\n throw new TypeError('Expected a fixed argument patch array.');\n const prepared = [];\n const seenNames = new Set();\n const seenFields = new Set();\n for (let i = 0; i < changesInput.length; i++) {\n const change = own(changesInput, String(i));\n const name = own(change, 'argument');\n const value = own(change, 'value');\n if (typeof name !== 'string' || seenNames.has(name) ||\n !declaration.editableArguments.includes(name) || !current.bindings.has(name)) {\n throw new TypeError('Only distinct editable standard fields may be changed.');\n }\n seenNames.add(name);\n const binding = current.bindings.get(name);\n if (seenFields.has(binding.field))\n throw new TypeError('Duplicate field write.');\n seenFields.add(binding.field);\n if (Object.is(value, binding.value))\n continue;\n prepared.push({ ...prepareFixedChange(binding, value), argument: name });\n }\n if (validateFixedBranchChanges(declaration, expected, prepared.map(item => ({ argument: item.argument, value: item.next }))).length) {\n throw new TypeError('Fixed branch changes require a valid canonical branch policy.');\n }\n const guard = () => {\n const state = getState();\n if (isAborted(signal) || state.disposed || state.generation !== current.state.generation ||\n state.externalRevision !== current.state.externalRevision || vm.editingTarget !== current.target ||\n vm.runtime !== current.runtime ||\n registry.resolveFixed(expected.opcode) !== declaration)\n conflict();\n };\n guard();\n const beforeWrite = inspect(expected, declaration);\n if (!beforeWrite || !sameFixedSnapshot(expected, beforeWrite.snapshot))\n conflict();\n guard();\n if (!prepared.length)\n return;\n const Events = ScratchBlocks.Events;\n if (!Events.isEnabled() || !Events.recordUndo || Events.getGroup() ||\n !Array.isArray(workspace.undoStack_) || !Array.isArray(workspace.redoStack_)) {\n throw new Error('The workspace is busy or its undo API is unsupported.');\n }\n const undoStack = workspace.undoStack_;\n const redoStack = workspace.redoStack_;\n ensureNativeHistory(undoStack);\n ensureNativeHistory(redoStack);\n const configuredMaxUndo = inheritedData(workspace, 'MAX_UNDO');\n const maxUndo = configuredMaxUndo === undefined ? Infinity : configuredMaxUndo;\n if (maxUndo !== Infinity && (!Number.isSafeInteger(maxUndo) || maxUndo < 0)) {\n throw new TypeError('Unsupported undo configuration.');\n }\n const undo = copyHistory(undoStack);\n const redo = copyHistory(redoStack);\n const oldGroup = Events.getGroup();\n const runtime = current.runtime;\n const dirty = runtime.emitProjectChanged;\n const dirtyDescriptor = Object.getOwnPropertyDescriptor(runtime, 'emitProjectChanged');\n const savedVmFields = prepared.map(item => ({ binding: item, block: item.vmBlock, name: item.fieldName,\n fields: item.vmBlock.fields, field: item.vmBlock.fields[item.fieldName],\n descriptors: Object.getOwnPropertyDescriptors(item.vmBlock.fields[item.fieldName]) }));\n let succeeded = false;\n let failure;\n let activeEvent = null;\n const pendingHistory = [];\n const externalWrites = new Map();\n const byField = new Map(prepared.map(item => [JSON.stringify([item.block.id, item.fieldName]), item]));\n let externalDirty = false;\n const ownedEvents = new WeakSet();\n const originalDelivery = workspace.fireChangeListener;\n const deliveryDescriptor = Object.getOwnPropertyDescriptor(workspace, 'fireChangeListener');\n const stableScope = () => {\n const state = getState();\n return state.generation === current.state.generation && vm.editingTarget === current.target && vm.runtime === runtime;\n };\n let begun = false;\n try {\n runtime.emitProjectChanged = () => {\n if (!activeEvent || !ownedEvents.has(activeEvent) || !stableScope())\n externalDirty = true;\n };\n workspace.fireChangeListener = function (event) {\n const previous = activeEvent;\n const external = event && !event.isUiEvent && !ownedEvents.has(event);\n const edited = external && event.type === 'change' && event.element === 'field' &&\n byField.get(JSON.stringify([event.blockId, event.name]));\n if (edited && !externalWrites.has(edited.field)) {\n // An external undo must not revive this editor's uncommitted candidate.\n if (Object.is(event.oldValue, edited.next))\n event.oldValue = edited.value;\n externalWrites.set(edited.field, null);\n }\n activeEvent = event;\n try {\n return originalDelivery.call(this, event);\n }\n finally {\n if (edited) {\n const fields = edited.vmBlock.fields;\n const field = fields && fields[edited.fieldName];\n externalWrites.set(edited.field, { binding: captureFixedFieldState(edited),\n fields, field, descriptors: field && Object.getOwnPropertyDescriptors(field) });\n }\n activeEvent = previous;\n }\n };\n Events.setGroup(true);\n Events.disable();\n begin();\n begun = true;\n guard();\n for (const item of prepared) {\n guard();\n item.field.setValue(item.next);\n if (!Object.is(item.field.getValue(), item.next))\n throw new Error('The field rejected its value.');\n guard();\n }\n for (const item of prepared) {\n guard();\n const event = new Events.Change(item.block, 'field', item.fieldName, item.value, item.next);\n ownedEvents.add(event);\n markEvent(event);\n // Stage only editor-owned undo records; external events retain normal semantics.\n const recordUndo = event.recordUndo;\n event.recordUndo = false;\n try {\n workspace.fireChangeListener(event);\n }\n finally {\n event.recordUndo = recordUndo;\n }\n if (recordUndo)\n pendingHistory.push(event);\n guard();\n }\n const after = inspect(expected, declaration);\n if (!after || after.untouched !== current.untouched)\n conflict();\n const wantedArguments = { ...expected.arguments };\n for (const item of prepared)\n wantedArguments[item.argument] = { kind: 'literal', value: item.next };\n if (!sameFixedSnapshot({ ...expected, revision: after.snapshot.revision, arguments: wantedArguments }, after.snapshot))\n conflict();\n guard();\n if (workspace.undoStack_ !== undoStack || workspace.redoStack_ !== redoStack ||\n undoStack.length !== undo.length || redoStack.length !== redo.length ||\n undo.some((entry, index) => undoStack[index] !== entry) ||\n redo.some((entry, index) => redoStack[index] !== entry))\n conflict();\n ensureNativeHistory(undoStack);\n ensureNativeHistory(redoStack);\n // This section contains no vendor callbacks; both native arrays are writable dense data.\n try {\n for (const event of pendingHistory)\n Array.prototype.push.call(undoStack, event);\n if (undoStack.length > maxUndo) {\n Array.prototype.copyWithin.call(undoStack, 0, undoStack.length - maxUndo);\n undoStack.length = maxUndo;\n }\n redoStack.length = 0;\n }\n catch (error) {\n replaceHistory(undoStack, undo);\n replaceHistory(redoStack, redo);\n throw error;\n }\n succeeded = true;\n }\n catch (error) {\n failure = error;\n for (const item of begun ? prepared : []) {\n try {\n restoreFixedField(((_a = externalWrites.get(item.field)) === null || _a === void 0 ? void 0 : _a.binding) || item);\n }\n catch (restoreError) {\n // Continue restoring every independent field before reporting a failure.\n try {\n onError(restoreError);\n }\n catch ( /* Observer failures do not interrupt rollback. */_c) { /* Observer failures do not interrupt rollback. */ }\n }\n }\n for (const saved of begun ? savedVmFields : []) {\n const outside = externalWrites.get(saved.binding.field);\n const fields = saved.block.fields;\n if (!fields)\n continue;\n const field = outside ? outside.field : saved.field;\n const descriptors = outside ? outside.descriptors : saved.descriptors;\n if (!field) {\n delete fields[saved.name];\n continue;\n }\n fields[saved.name] = field;\n for (const key of Object.keys(field))\n if (!Object.hasOwn(descriptors, key))\n delete field[key];\n Object.defineProperties(field, descriptors);\n }\n if (begun && typeof current.target.blocks.resetCache === 'function')\n current.target.blocks.resetCache();\n // Pending editor events never entered either history. External histories are authoritative.\n }\n finally {\n try {\n if (begun)\n finish(succeeded);\n }\n finally {\n try {\n if (!Events.isEnabled())\n Events.enable();\n }\n finally {\n try {\n Events.setGroup(oldGroup);\n }\n finally {\n if (deliveryDescriptor)\n Object.defineProperty(workspace, 'fireChangeListener', deliveryDescriptor);\n else\n delete workspace.fireChangeListener;\n if (dirtyDescriptor)\n Object.defineProperty(runtime, 'emitProjectChanged', dirtyDescriptor);\n else\n delete runtime.emitProjectChanged;\n }\n }\n }\n }\n if (succeeded || externalDirty) {\n try {\n dirty.call(runtime);\n }\n catch (error) {\n try {\n onError(error);\n }\n catch ( /* Dirty observers do not change the transaction result. */_d) { /* Dirty observers do not change the transaction result. */ }\n }\n }\n if (!succeeded)\n throw failure;\n };\n return Object.freeze({ capability: FIXED_INPUTS_CAPABILITY,\n readBlock: (reference, declaration) => { var _a; return ((_a = inspect(reference, declaration)) === null || _a === void 0 ? void 0 : _a.snapshot) || null; }, commit,\n subscribeInvalidation: (reference, declaration, listener) => {\n const captured = inspect(reference, declaration);\n if (!captured || typeof subscribeScope !== 'function') {\n listener(new BlockEditorConflictError());\n return () => { };\n }\n let active = true;\n const check = () => {\n const state = getState();\n if (!active || (!state.disposed && state.generation === captured.state.generation &&\n vm.editingTarget === captured.target && vm.runtime === captured.runtime &&\n workspace.getBlockById(reference.blockId) === captured.block &&\n captured.target.blocks.getBlock(reference.blockId) === captured.vmBlock &&\n registry.resolveFixed(captured.snapshot.opcode) === captured.declaration))\n return;\n active = false;\n listener(new BlockEditorConflictError());\n };\n const unsubscribe = subscribeScope(check);\n return () => { active = false; unsubscribe(); };\n } });\n}\n", "import { BlockEditorConflictError, DESCENDANT_EDITING_CAPABILITY } from '../index.js';\nimport collectBlockEditorSubtree from './subtree.js';\nimport createFixedInputPort from './fixed-transaction.js';\nconst owns = (object, key) => Object.prototype.hasOwnProperty.call(object, key);\n// Adapt only standard, unvalidated text shadows; never evaluate connected reporters.\nconst createBlockEditorHost = ({ ScratchBlocks, workspace, vm, registry, enableDescendants = false, enableFixedInputs = false, onError = console.error }) => {\n let disposed = false;\n let committing = false;\n let revision = 0;\n let identity = 0;\n let generation = 1;\n let externalRevision = 0;\n let fixedTransaction = null;\n let lastTarget = vm.editingTarget;\n const versions = new Map();\n const invalidations = new Set();\n const fixedScopeListeners = new Set();\n const notifyFixedScopes = () => {\n for (const listener of [...fixedScopeListeners]) {\n try {\n listener();\n }\n catch (error) {\n try {\n onError(error);\n }\n catch ( /* Scope observers cannot interrupt native events. */_a) { /* Scope observers cannot interrupt native events. */ }\n }\n }\n };\n let notifyInvalidations = () => { };\n const identities = new WeakMap();\n const identify = object => {\n if (!identities.has(object))\n identities.set(object, ++identity);\n return identities.get(object);\n };\n const invalidate = event => {\n if (event && event.isUiEvent)\n return;\n revision++;\n if (fixedTransaction && event && fixedTransaction.events.has(event)) {\n fixedTransaction.revisions++;\n if (enableDescendants) {\n for (const id of new Set([event.blockId, ...(event.ids || [])])) {\n if (id)\n fixedTransaction.versions.set(id, (fixedTransaction.versions.get(id) || 0) + 1);\n }\n }\n }\n else\n externalRevision++;\n if (enableDescendants && event) {\n const ids = new Set([event.blockId, ...(event.ids || [])]);\n for (const id of ids)\n if (id)\n versions.set(id, (versions.get(id) || 0) + 1);\n }\n if (!committing)\n notifyInvalidations();\n notifyFixedScopes();\n };\n const renew = () => {\n generation++;\n versions.clear();\n invalidate();\n };\n const targetsChanged = () => {\n if (lastTarget === vm.editingTarget)\n invalidate();\n else {\n lastTarget = vm.editingTarget;\n renew();\n }\n };\n workspace.addChangeListener(invalidate);\n vm.on('workspaceUpdate', renew);\n vm.on('targetsUpdate', targetsChanged);\n const inspect = (reference, structural = false) => {\n const target = vm.editingTarget;\n if (disposed || !target || target.id !== reference.targetId || workspace.isFlyout ||\n workspace.options.readOnly || (workspace.isDragging && workspace.isDragging()))\n return null;\n const block = workspace.getBlockById(reference.blockId);\n if (!block || block.isInFlyout || block.isShadow())\n return null;\n const descriptor = registry.resolve(block.type);\n if (typeof registry.resolveFixed === 'function' && registry.resolveFixed(block.type))\n return null;\n const vmBlock = target.blocks.getBlock(block.id);\n if ((!structural && !descriptor) || (!block.isEditable() && (!structural || descriptor)) ||\n !vmBlock || vmBlock.opcode !== block.type)\n return null;\n const slots = {};\n const fields = new Map();\n const signature = [structural ? versions.get(block.id) || 0 : revision,\n identify(block), identify(vmBlock), identify(target)];\n if (structural) {\n if ((block.getParent() ? block.getParent().id : null) !== (vmBlock.parent || null))\n return null;\n signature.push(block.isEditable(), vmBlock.fields, vmBlock.inputs, vmBlock.mutation || null);\n for (const input of block.inputList) {\n if (input.type !== ScratchBlocks.INPUT_VALUE)\n continue;\n const connected = input.connection && input.connection.targetBlock();\n const vmInput = vmBlock.inputs[input.name];\n if ((connected ? connected.id : null) !==\n (vmInput && vmInput.block ? vmInput.block : null))\n return null;\n if (!connected)\n continue;\n signature.push(input.name, connected.id, identify(connected), connected.type);\n if (!connected.isShadow())\n continue;\n const vmShadow = target.blocks.getBlock(connected.id);\n if (!vmShadow)\n return null;\n for (const row of connected.inputList) {\n for (const field of row.fieldRow) {\n if (!field.name)\n continue;\n const stored = vmShadow.fields[field.name];\n if (!stored || String(field.getValue()) !== String(stored.id || stored.value))\n return null;\n }\n }\n signature.push(versions.get(connected.id) || 0, identify(vmShadow), vmShadow.fields);\n }\n }\n for (const name of descriptor ? descriptor.editableArguments : []) {\n const input = block.getInput(name);\n const shadow = input && input.connection && input.connection.targetBlock();\n const field = shadow && shadow.getField('TEXT');\n const vmShadow = shadow && target.blocks.getBlock(shadow.id);\n const vmInput = vmBlock.inputs && vmBlock.inputs[name];\n // Plain text is the only field family whose validation/side effects we support here.\n if (!shadow || !shadow.isShadow() || shadow.type !== 'text' || !field ||\n field.constructor !== ScratchBlocks.FieldTextInput || field.getValidator() ||\n !vmShadow || vmShadow.opcode !== 'text' || !vmShadow.fields.TEXT ||\n !vmInput || vmInput.block !== shadow.id || typeof field.getValue() !== 'string') {\n Object.defineProperty(slots, name, { value: { kind: 'reporter' }, enumerable: true });\n continue;\n }\n // Do not open or save against events which have not reached the VM yet.\n if (vmShadow.fields.TEXT.value !== field.getValue())\n return null;\n Object.defineProperty(slots, name, {\n value: { kind: 'literal', value: field.getValue() }, enumerable: true\n });\n fields.set(name, { shadow, field, value: field.getValue() });\n signature.push(name, identify(shadow), identify(field), identify(vmShadow), shadow.id);\n }\n return {\n snapshot: {\n targetId: target.id,\n blockId: block.id,\n opcode: block.type,\n revision: JSON.stringify(signature),\n arguments: slots\n },\n fields,\n block,\n vmBlock\n };\n };\n const collect = reference => collectBlockEditorSubtree({ ScratchBlocks, reference, inspect, generation });\n notifyInvalidations = () => {\n if (committing)\n return;\n for (const item of [...invalidations]) {\n let matches = false;\n try {\n const current = collect(item.reference);\n matches = current && JSON.stringify(current.snapshot) === JSON.stringify(item.snapshot);\n }\n catch (error) {\n // A malformed replacement graph invalidates an already open session too.\n }\n if (!matches)\n item.listener(new BlockEditorConflictError('The block hierarchy changed.'));\n }\n };\n const apply = (prepared, signal) => {\n const Events = ScratchBlocks.Events;\n if (!Events.isEnabled() || !Events.recordUndo || Events.getGroup() ||\n !Array.isArray(workspace.undoStack_) || !Array.isArray(workspace.redoStack_)) {\n throw new Error('The workspace is busy or its undo API is unsupported.');\n }\n if (!prepared.length)\n return;\n const target = vm.editingTarget;\n const oldRevision = revision;\n const oldVersions = new Map(versions);\n const undo = workspace.undoStack_.slice();\n const redo = workspace.redoStack_.slice();\n const emitProjectChanged = vm.runtime.emitProjectChanged;\n let succeeded = false;\n // Hold dirty notifications until all synchronous field/VM updates have succeeded.\n vm.runtime.emitProjectChanged = () => { };\n Events.setGroup(true);\n Events.disable();\n committing = true;\n try {\n if (signal && signal.aborted)\n throw new BlockEditorConflictError();\n for (const item of prepared) {\n item.field.setValue(item.next);\n if (item.field.getValue() !== item.next)\n throw new Error('The field rejected its value.');\n }\n // Deliver normal Change events synchronously: VM and undo state agree before resolving.\n for (const item of prepared) {\n workspace.fireChangeListener(new Events.Change(item.shadow, 'field', 'TEXT', item.value, item.next));\n if ((signal && signal.aborted) || vm.editingTarget !== target)\n throw new BlockEditorConflictError();\n }\n succeeded = true;\n }\n catch (error) {\n // No queued setter events exist because events were disabled throughout this section.\n for (const item of prepared) {\n ScratchBlocks.FieldTextInput.prototype.setValue.call(item.field, item.value);\n target.blocks.blocklyListen(new Events.Change(item.shadow, 'field', 'TEXT', item.next, item.value));\n }\n workspace.undoStack_.splice(0, workspace.undoStack_.length, ...undo);\n workspace.redoStack_.splice(0, workspace.redoStack_.length, ...redo);\n revision = oldRevision;\n versions.clear();\n for (const [id, value] of oldVersions)\n versions.set(id, value);\n throw error;\n }\n finally {\n committing = false;\n Events.enable();\n Events.setGroup(false);\n vm.runtime.emitProjectChanged = emitProjectChanged;\n }\n if (succeeded) {\n // Observer exceptions must not misreport an already committed transaction as rejected.\n try {\n emitProjectChanged.call(vm.runtime);\n }\n catch (error) {\n onError(error);\n }\n }\n };\n const prepare = (changes, records) => {\n if (!Array.isArray(changes))\n throw new TypeError('Expected an argument patch array.');\n const seen = new Set();\n const fields = new Set();\n return changes.map(change => {\n const record = change && records.get(change.blockId);\n const key = change && JSON.stringify([change.blockId, change.argument]);\n if (!record || typeof change.value !== 'string' || seen.has(key) ||\n !owns(record.snapshot.arguments, change.argument) || !record.fields.has(change.argument)) {\n throw new TypeError('Only distinct standard text shadow changes are supported.');\n }\n seen.add(key);\n const item = record.fields.get(change.argument);\n if (fields.has(item.field))\n throw new TypeError('Duplicate shadow write.');\n fields.add(item.field);\n return { ...item, next: change.value };\n }).filter(item => item.next !== item.value);\n };\n const host = {\n isCommitting: () => committing,\n readBlock: reference => {\n const block = workspace.getBlockById(reference.blockId);\n const declaration = block && typeof registry.resolveFixed === 'function' && registry.resolveFixed(block.type);\n if (declaration)\n return host.fixedInputs ? host.fixedInputs.readBlock(reference, declaration) : null;\n const result = inspect(reference);\n return result ? result.snapshot : null;\n },\n commit: ({ expected, changes }) => {\n if (typeof registry.resolveFixed === 'function' && registry.resolveFixed(expected.opcode)) {\n throw new TypeError('Fixed input editors require the fixed transaction port.');\n }\n const current = inspect(expected);\n if (!current || JSON.stringify(current.snapshot) !== JSON.stringify(expected)) {\n throw new BlockEditorConflictError();\n }\n apply(prepare(changes.map(change => ({ ...change, blockId: expected.blockId })), new Map([[expected.blockId, current]])));\n },\n invalidate: renew,\n dispose: () => {\n disposed = true;\n notifyFixedScopes();\n fixedScopeListeners.clear();\n notifyInvalidations();\n invalidations.clear();\n workspace.removeChangeListener(invalidate);\n vm.removeListener('workspaceUpdate', renew);\n vm.removeListener('targetsUpdate', targetsChanged);\n }\n };\n if (enableDescendants) {\n host.descendants = {\n capability: DESCENDANT_EDITING_CAPABILITY,\n readSubtree: reference => {\n const result = collect(reference);\n return result ? result.snapshot : null;\n },\n commitSubtree: ({ expected, changes, signal }) => {\n const current = collect(expected);\n if ((signal && signal.aborted) || !current ||\n JSON.stringify(current.snapshot) !== JSON.stringify(expected))\n throw new BlockEditorConflictError();\n apply(prepare(changes, current.records), signal);\n },\n subscribeInvalidation: (reference, listener) => {\n const result = collect(reference);\n if (!result) {\n listener(new BlockEditorConflictError());\n return () => { };\n }\n const item = { reference, listener, snapshot: result.snapshot };\n invalidations.add(item);\n return () => invalidations.delete(item);\n }\n };\n }\n if (enableFixedInputs === true) {\n host.fixedInputs = createFixedInputPort({ ScratchBlocks, workspace, vm, registry, identify, onError,\n subscribeScope: listener => {\n fixedScopeListeners.add(listener);\n return () => { fixedScopeListeners.delete(listener); };\n },\n getState: () => ({ disposed, revision, generation, externalRevision }),\n begin: () => {\n committing = true;\n fixedTransaction = { events: new WeakSet(), revisions: 0, versions: new Map() };\n },\n markEvent: event => fixedTransaction.events.add(event),\n finish: succeeded => {\n if (!succeeded) {\n revision -= fixedTransaction.revisions;\n for (const [id, delta] of fixedTransaction.versions) {\n const remaining = (versions.get(id) || 0) - delta;\n if (remaining > 0)\n versions.set(id, remaining);\n else\n versions.delete(id);\n }\n }\n fixedTransaction = null;\n committing = false;\n } });\n }\n return host;\n};\nexport default createBlockEditorHost;\n", "// Decorate one known FieldImage; never search or intercept unrelated workspace DOM.\nconst bindBlockEditorIcon = ({ element, label, canOpen, onOpen }) => {\n const attributes = ['role', 'tabindex', 'aria-label', 'data-block-editor-icon'];\n const previous = attributes.map(name => element.getAttribute(name));\n const oldCursor = element.style.cursor;\n let press = null;\n const stop = event => {\n if (!canOpen())\n return;\n event.stopPropagation();\n event.preventDefault();\n };\n const down = event => {\n if (!canOpen() || event.button !== 0 || event.isPrimary === false)\n return;\n stop(event);\n press = { id: event.pointerId, x: event.clientX, y: event.clientY, moved: false };\n element.focus();\n if (element.setPointerCapture)\n element.setPointerCapture(event.pointerId);\n };\n const move = event => {\n if (!press || press.id !== event.pointerId)\n return;\n stop(event);\n if (Math.hypot(event.clientX - press.x, event.clientY - press.y) > 4)\n press.moved = true;\n };\n const up = event => {\n if (!press || press.id !== event.pointerId)\n return;\n move(event);\n const open = !press.moved && canOpen();\n press = null;\n if (element.releasePointerCapture && element.hasPointerCapture(event.pointerId)) {\n element.releasePointerCapture(event.pointerId);\n }\n if (open)\n onOpen();\n };\n const cancel = () => {\n press = null;\n };\n const key = event => {\n if ((event.key === 'Enter' || event.key === ' ') && canOpen()) {\n stop(event);\n if (!event.repeat)\n onOpen();\n }\n };\n const listeners = [\n ['pointerdown', down], ['pointermove', move], ['pointerup', up], ['pointercancel', cancel],\n ['mousedown', stop], ['mouseup', stop], ['click', stop], ['dblclick', stop],\n ['touchstart', stop], ['touchend', stop], ['touchmove', stop], ['keydown', key]\n ];\n element.setAttribute('role', 'button');\n element.setAttribute('tabindex', '0');\n element.setAttribute('aria-label', label);\n element.setAttribute('data-block-editor-icon', '');\n element.style.cursor = 'pointer';\n for (const [type, listener] of listeners)\n element.addEventListener(type, listener, { passive: false });\n return () => {\n for (const [type, listener] of listeners)\n element.removeEventListener(type, listener);\n attributes.forEach((name, index) => {\n if (previous[index] === null)\n element.removeAttribute(name);\n else\n element.setAttribute(name, previous[index]);\n });\n element.style.cursor = oldCursor;\n press = null;\n };\n};\nexport default bindBlockEditorIcon;\n", "// Presentation metadata stays outside snapshots, drafts and saved project data.\nconst readBlockEditorAppearance = (block, ScratchBlocks) => {\n const appearance = {};\n if (!block)\n return appearance;\n try {\n // Use the block's own labels, without reading JSON or other values from connected inputs.\n const name = block.inputList.filter(input => input.type !== ScratchBlocks.NEXT_STATEMENT)\n .map(input => input.fieldRow.filter(field => !(field instanceof ScratchBlocks.FieldImage))\n .map(field => field.getText())\n .join(' '))\n .join(' ')\n .replace(/\\s+/g, ' ')\n .trim();\n if (name)\n appearance.name = name;\n }\n catch (error) {\n // The opcode remains available as a name fallback.\n }\n try {\n const colour = block.getColour();\n if (typeof colour === 'string' && /^#[0-9a-f]{6}$/i.test(colour)) {\n appearance.colour = colour;\n const channels = [1, 3, 5].map(offset => parseInt(colour.slice(offset, offset + 2), 16));\n appearance.tint = `rgba(${channels.join(', ')}, 0.08)`;\n }\n }\n catch (error) {\n // Missing presentation data must not prevent opening an otherwise editable tree.\n }\n try {\n const input = block.inputList[0];\n const field = input && input.fieldRow[0];\n if (field instanceof ScratchBlocks.FieldImage) {\n const uri = field.getValue();\n if (typeof uri === 'string' && uri.trim())\n appearance.iconURI = uri;\n }\n }\n catch (error) {\n // Keep the colour even when the leading image is unavailable.\n }\n return appearance;\n};\nexport default readBlockEditorAppearance;\n", "// A failed opening has no draft or save path; retain a closeable diagnostic modal.\nconst createBlockEditorErrorSession = (reference, error) => {\n let status = 'editing';\n const listeners = new Set();\n const finish = next => {\n if (status !== 'editing')\n return false;\n status = next;\n for (const listener of [...listeners])\n listener();\n listeners.clear();\n return true;\n };\n return Object.freeze({\n reference,\n getState: () => ({ status, canSave: false, issues: [], error }),\n subscribe: listener => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n mount: () => () => { },\n save: () => Promise.resolve({ status: 'failed', error }),\n cancel: () => finish('cancelled'),\n dispose: () => {\n finish('disposed');\n return true;\n }\n });\n};\nexport default createBlockEditorErrorSession;\n", "import createBlockEditorHost from './host.js';\nimport bindBlockEditorIcon from './icon.js';\nimport readBlockEditorAppearance from './appearance.js';\nimport { supportsDescendantEditing, supportsFixedInputEditing } from '../index.js';\nimport createBlockEditorErrorSession from './error-session.js';\nconst fixedDeclaration = (registry, snapshot) => snapshot && typeof registry.resolveFixed === 'function' &&\n registry.resolveFixed(snapshot.opcode);\nconst openBlockEditorSession = ({ registry, reference, host, descendants }) => {\n const snapshot = host.readBlock ? host.readBlock(reference) : null;\n // A fixed registration owns only this block; legacy aggregate traversal stays fail-closed.\n if (fixedDeclaration(registry, snapshot))\n return supportsFixedInputEditing(host) ? registry.open(reference, host) : undefined;\n return descendants && supportsDescendantEditing(host) ?\n registry.openDescendants(reference, host) : registry.open(reference, host);\n};\nconst createBlockEditorBridge = ({ ScratchBlocks, workspace, vm, service, label, canOpen, onOpen, onError, descendants = false, fixedInputs = false }) => {\n const host = createBlockEditorHost({ ScratchBlocks,\n workspace,\n vm,\n registry: service.registry,\n enableDescendants: descendants,\n enableFixedInputs: fixedInputs,\n onError });\n const decorations = new Map();\n let disposed = false;\n let timer = null;\n let activeSession = null;\n let openingSnapshot = null;\n let openingFixedDeclaration = null;\n let stopWaiting = null;\n const endSession = () => {\n const session = activeSession;\n if (!session)\n return;\n if (typeof session.invalidate === 'function') {\n session.invalidate();\n return;\n }\n // Normal close is refused while saving. Host invalidation also blocks commit,\n // then releases the old view as soon as its pending validation settles.\n if (session.dispose())\n return;\n if (!stopWaiting) {\n stopWaiting = session.subscribe(() => {\n if (session.getState().status === 'saving')\n return;\n stopWaiting();\n stopWaiting = null;\n session.dispose();\n });\n }\n };\n const checkSession = () => {\n var _a;\n // The host owns rollback. Its synchronous transaction must retain the draft on failure.\n if (host.isCommitting())\n return;\n if (!activeSession || !openingSnapshot ||\n !['editing', 'saving'].includes(activeSession.getState().status))\n return;\n const current = typeof activeSession.getNodes === 'function' ?\n host.descendants.readSubtree(activeSession.reference) : host.readBlock(activeSession.reference);\n if (openingFixedDeclaration) {\n // Same-target external edits conflict at save while the session retains its draft.\n // Project/target/registration replacement ends the session and drops that draft.\n if (!current || ((_a = current.fixedContext) === null || _a === void 0 ? void 0 : _a.generation) !== openingSnapshot.fixedContext.generation ||\n fixedDeclaration(service.registry, current) !== openingFixedDeclaration)\n endSession();\n return;\n }\n if (!current || JSON.stringify(current) !== JSON.stringify(openingSnapshot))\n endSession();\n };\n const available = block => {\n if (disposed || !vm.editingTarget || !canOpen() || !service.registry.resolve(block.type))\n return false;\n const snapshot = host.readBlock({ targetId: vm.editingTarget.id, blockId: block.id });\n if (fixedDeclaration(service.registry, snapshot))\n return supportsFixedInputEditing(host);\n return snapshot && Object.values(snapshot.arguments).every(slot => slot.kind === 'literal');\n };\n const open = block => {\n if (activeSession && ['editing', 'saving'].includes(activeSession.getState().status))\n return;\n const reference = { targetId: vm.editingTarget.id, blockId: block.id };\n try {\n const session = openBlockEditorSession({ registry: service.registry, reference, host, descendants });\n if (!session && descendants)\n throw new Error('The complete block hierarchy is not editable.');\n if (session) {\n ScratchBlocks.hideChaff();\n activeSession = session;\n openingSnapshot = typeof session.getNodes === 'function' ?\n host.descendants.readSubtree(session.reference) : host.readBlock(session.reference);\n openingFixedDeclaration = fixedDeclaration(service.registry, openingSnapshot) || null;\n const labels = {};\n const appearances = Object.create(null);\n const rootAppearance = readBlockEditorAppearance(block, ScratchBlocks);\n appearances[reference.blockId] = rootAppearance;\n labels[reference.blockId] = rootAppearance.name || block.type;\n if (typeof session.getNodes === 'function') {\n for (const node of session.getNodes()) {\n const source = workspace.getBlockById(node.reference.blockId);\n const appearance = readBlockEditorAppearance(source, ScratchBlocks);\n appearances[node.reference.blockId] = appearance;\n labels[node.reference.blockId] = appearance.name || node.opcode;\n }\n }\n onOpen(session, labels, appearances);\n }\n }\n catch (error) {\n onError(error);\n activeSession = createBlockEditorErrorSession(reference, error);\n openingSnapshot = null;\n openingFixedDeclaration = null;\n onOpen(activeSession);\n }\n };\n const refresh = () => {\n if (disposed)\n return;\n const seen = new Set();\n for (const block of workspace.getAllBlocks(false)) {\n const input = block.inputList[0];\n const field = input && input.fieldRow[0];\n if (workspace.options.readOnly || !service.registry.resolve(block.type) || !field ||\n !(field instanceof ScratchBlocks.FieldImage) || !field.fieldGroup_ ||\n block.isInFlyout || block.isShadow() || !block.isEditable())\n continue;\n seen.add(block.id);\n const old = decorations.get(block.id);\n if (old && old.field === field)\n continue;\n if (old)\n old.cleanup();\n const tooltip = field.imageElement_.tooltip;\n field.setTooltip(label);\n const unbind = bindBlockEditorIcon({\n element: field.fieldGroup_,\n label,\n canOpen: () => available(block),\n onOpen: () => open(block)\n });\n decorations.set(block.id, { field,\n cleanup: () => {\n unbind();\n if (field.imageElement_)\n field.imageElement_.tooltip = tooltip;\n } });\n }\n for (const [id, decoration] of decorations) {\n if (!seen.has(id)) {\n decoration.cleanup();\n decorations.delete(id);\n }\n }\n };\n const schedule = () => {\n checkSession();\n clearTimeout(timer);\n timer = setTimeout(refresh, 0);\n };\n const unregister = service.subscribe(() => {\n // Aggregate sessions observe relevant registry changes themselves.\n if (openingFixedDeclaration && activeSession) {\n if (service.registry.resolveFixed(openingSnapshot.opcode) !== openingFixedDeclaration) {\n host.invalidate();\n endSession();\n }\n }\n else if (!activeSession || typeof activeSession.getNodes !== 'function') {\n host.invalidate();\n endSession();\n }\n schedule();\n });\n workspace.addChangeListener(schedule);\n vm.on('workspaceUpdate', schedule);\n vm.on('targetsUpdate', schedule);\n refresh();\n return {\n refresh,\n dispose: () => {\n disposed = true;\n clearTimeout(timer);\n unregister();\n workspace.removeChangeListener(schedule);\n vm.removeListener('workspaceUpdate', schedule);\n vm.removeListener('targetsUpdate', schedule);\n host.dispose();\n endSession();\n for (const decoration of decorations.values())\n decoration.cleanup();\n decorations.clear();\n }\n };\n};\nexport default createBlockEditorBridge;\nexport { openBlockEditorSession };\n", "import createBridge, { openBlockEditorSession as openSession } from './turbowarp/bridge.js';\nimport createHost from './turbowarp/host.js';\nimport bindIcon from './turbowarp/icon.js';\nimport readAppearance from './turbowarp/appearance.js';\nimport createErrorSession from './turbowarp/error-session.js';\n/** Attach to one workspace. No global VM, feature flag, React or GUI module is consulted. */\nexport function attachTurboWarpBlockEditors(options) {\n var _a;\n if (options.enabled !== true)\n return Object.freeze({ refresh() { }, dispose() { } });\n const bridge = createBridge({ ...options, descendants: options.descendants === true, fixedInputs: options.fixedInputs === true,\n onError: (_a = options.onError) !== null && _a !== void 0 ? _a : console.error });\n let disposed = false;\n return Object.freeze({\n refresh() { if (!disposed)\n bridge.refresh(); },\n dispose() {\n if (disposed)\n return;\n disposed = true;\n bridge.dispose();\n }\n });\n}\n/** Lower-level host port for custom integrations; standard GUI integrations use attachTurboWarpBlockEditors. */\nexport function createTurboWarpBlockEditorHost(options) {\n return createHost(options);\n}\nexport function bindBlockEditorIcon(options) {\n return bindIcon(options);\n}\nexport function readBlockEditorAppearance(block, ScratchBlocks) {\n return readAppearance(block, ScratchBlocks);\n}\nexport function createBlockEditorErrorSession(reference, error) {\n return createErrorSession(reference, error);\n}\nexport function openBlockEditorSession(options) {\n return openSession(options);\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["raw", "own", "owns", "bindBlockEditorIcon", "readBlockEditorAppearance", "createBlockEditorErrorSession", "openBlockEditorSession"]
|
|
7
7
|
}
|
package/docs/api.md
CHANGED
|
@@ -100,12 +100,19 @@ draft-07 を基本とし、未解決の外部参照や不正な schema は登録
|
|
|
100
100
|
- `session`: 単一または階層セッション。本文mount契約は従来どおりです。
|
|
101
101
|
- `ModalComponent`: `id`, `className`, `contentLabel`, `onRequestClose`, `children` を受けるホストのModal。
|
|
102
102
|
portal・フォーカストラップ/復帰・Escape/背景/閉じるボタンを所有し、終了操作を `onRequestClose` へ渡します。
|
|
103
|
+
根ブロックのアイコンがある場合は `headerImage` も渡します。
|
|
104
|
+
`headerClassName` を見出しのコンテナへ設定すると、アイコン寸法と長い見出しの折り返しを制御します。
|
|
103
105
|
- `messages`: title / saving / cancel / save / saveAll / structureError / conflict / failed / structuralNode の翻訳済み文字列。
|
|
104
106
|
- `styles`: `/react/styles.css` をCSS Modulesで読み込んだcamelCaseのクラス名対応表。
|
|
105
107
|
- 任意の `className`: ホストテーマを設定するクラス。任意の `nodeLabels` / `nodeAppearances` は表示専用のメタデータ。
|
|
106
108
|
- `onClose`: ホスト側のModal状態を閉じる処理。任意の `onError` はビュー例外の報告先。
|
|
107
109
|
|
|
108
110
|
CSSはJS入口から自動importしません。ホストが `/react/styles.css` を読み込み、CSS ModulesのcamelCaseを有効にして渡します。
|
|
111
|
+
見出しは根ブロックの `nodeAppearances.name` または `nodeLabels` を使用します。
|
|
112
|
+
`messages.title` に `{name}` があれば置換し、従来の「ブロックを編集」/「Edit block」も名前を含む見出しへ置換します。
|
|
113
|
+
表示用メタデータがない場合は従来の見出しを維持します。
|
|
114
|
+
標準フォームの追加項目は番号と薄い枠を持ち、key-valueは「キー」「値」のラベルと入力欄を横並びにした2行で表示します。
|
|
115
|
+
項目の削除は「…」メニューの「🗑️この項目を削除」から行い、追加は「➕項目を追加」ボタンで行います。
|
|
109
116
|
テーマは `--block-editor-background`, `--block-editor-text`, `--block-editor-input`,
|
|
110
117
|
`--block-editor-button`, `--block-editor-border`, `--block-editor-radius` をModalのクラスへ設定します。
|
|
111
118
|
省略時は明るい背景の既定値を使用します。GUIの翻訳/Redux/テーマモジュールを共通側からimportしません。
|