@kubohiroya/turbowarp-extension-data-editor 0.5.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/README.ja.md +9 -4
  2. package/README.md +7 -4
  3. package/dist/build-info.json +3 -3
  4. package/dist/descendants.js +1 -0
  5. package/dist/dialog-window.d.ts +8 -0
  6. package/dist/dialog-window.js +155 -0
  7. package/dist/preview.d.ts +3 -0
  8. package/dist/preview.js +100 -0
  9. package/dist/react.css +70 -0
  10. package/dist/react.d.ts +3 -0
  11. package/dist/react.js +12 -4
  12. package/dist/registry.d.ts +3 -0
  13. package/dist/registry.js +38 -9
  14. package/dist/rjsf.d.ts +2 -1
  15. package/dist/rjsf.js +10 -0
  16. package/dist/session.d.ts +1 -0
  17. package/dist/session.js +6 -0
  18. package/dist/turbowarp/bridge.js +42 -1
  19. package/dist/turbowarp/fixed-fields.d.ts +1 -1
  20. package/dist/turbowarp/fixed-fields.js +7 -2
  21. package/dist/turbowarp/icon.d.ts +3 -1
  22. package/dist/turbowarp/icon.js +5 -1
  23. package/dist/turbowarp.d.ts +2 -0
  24. package/dist/types.d.ts +8 -0
  25. package/dist/view.js +1 -0
  26. package/dist/webpack4/index.js +1 -1
  27. package/dist/webpack4/metafile.json +57 -31
  28. package/dist/webpack4/react.js +173 -4
  29. package/dist/webpack4/react.js.map +3 -3
  30. package/dist/webpack4/rjsf.js +13 -1
  31. package/dist/webpack4/rjsf.js.map +2 -2
  32. package/dist/webpack4/{shared-QIOZ73LT.js → shared-FW4MRLXW.js} +148 -8
  33. package/dist/webpack4/shared-FW4MRLXW.js.map +7 -0
  34. package/dist/webpack4/turbowarp.js +55 -5
  35. package/dist/webpack4/turbowarp.js.map +2 -2
  36. package/docs/README.md +3 -3
  37. package/docs/block-editor-descendants.md +1 -1
  38. package/docs/block-editor-e2e.md +6 -122
  39. package/docs/block-editor.md +1 -1
  40. package/docs/block-preview.md +45 -0
  41. package/docs/ci-success-gate.md +9 -29
  42. package/docs/dialog-window.md +50 -0
  43. package/docs/fixed-input-contracts.md +3 -1
  44. package/docs/github-pages.md +21 -57
  45. package/docs/package-distribution.md +3 -3
  46. package/docs/shared-extension-security.ja.md +6 -6
  47. package/package.json +2 -6
  48. package/dist/webpack4/shared-QIOZ73LT.js.map +0 -7
@@ -96,6 +96,168 @@ var bindBlockEditorFieldErrors = (container) => {
96
96
  };
97
97
  var field_errors_default = bindBlockEditorFieldErrors;
98
98
 
99
+ // dist/dialog-window.js
100
+ function attachEditorDialogWindow(body, labels) {
101
+ var _a;
102
+ const dialog = body.closest('[role="dialog"]');
103
+ const header = labels.headerClassName ? dialog === null || dialog === void 0 ? void 0 : dialog.getElementsByClassName(labels.headerClassName)[0] : dialog === null || dialog === void 0 ? void 0 : dialog.querySelector("header");
104
+ const content = body.closest("[data-block-editor-body]");
105
+ if (!dialog || !header || !content || !((_a = header.parentElement) === null || _a === void 0 ? void 0 : _a.contains(content)))
106
+ return;
107
+ const doc = dialog.ownerDocument, win = doc.defaultView;
108
+ if (!win)
109
+ return;
110
+ const frame = header.parentElement;
111
+ const initialStyle = dialog.style.cssText;
112
+ const language = doc.documentElement.lang || new URLSearchParams(win.location.search).get("lang") || win.navigator.language;
113
+ const japanese = language.startsWith("ja");
114
+ const maximizeLabel = labels.maximize || (japanese ? "\u5168\u753B\u9762\u5316" : "Maximize");
115
+ const restoreLabel = labels.restore || (japanese ? "\u5143\u306E\u30B5\u30A4\u30BA\u306B\u623B\u3059" : "Restore window");
116
+ let restoreBounds = null;
117
+ let gesture = null;
118
+ const handles = [];
119
+ dialog.setAttribute("data-block-editor-window", "");
120
+ if (frame !== dialog)
121
+ frame.setAttribute("data-block-editor-window-frame", "");
122
+ header.setAttribute("data-block-editor-titlebar", "");
123
+ const maximize = doc.createElement("button");
124
+ maximize.type = "button";
125
+ maximize.setAttribute("data-block-editor-maximize", "");
126
+ const closeContainer = header.lastElementChild;
127
+ if (closeContainer === null || closeContainer === void 0 ? void 0 : closeContainer.querySelector('button, [role="button"]'))
128
+ closeContainer.prepend(maximize);
129
+ else
130
+ header.insertBefore(maximize, closeContainer);
131
+ const viewport = () => ({ width: win.innerWidth, height: win.innerHeight });
132
+ const bounds = () => {
133
+ const { x, y, width, height } = dialog.getBoundingClientRect();
134
+ return { x, y, width, height };
135
+ };
136
+ const clamp = (value, min, max) => Math.min(Math.max(value, min), max);
137
+ function fit(rect) {
138
+ const view = viewport();
139
+ const width = clamp(rect.width, Math.min(360, view.width), view.width);
140
+ const height = clamp(rect.height, Math.min(280, view.height), view.height);
141
+ return { width, height, x: clamp(rect.x, 0, view.width - width), y: clamp(rect.y, 0, view.height - height) };
142
+ }
143
+ function place(rect) {
144
+ Object.assign(dialog.style, {
145
+ margin: "0",
146
+ inset: "auto",
147
+ transform: "none",
148
+ maxHeight: "100dvh",
149
+ left: `${rect.x}px`,
150
+ top: `${rect.y}px`,
151
+ width: `${rect.width}px`,
152
+ height: `${rect.height}px`
153
+ });
154
+ }
155
+ function stop(event) {
156
+ if (!gesture || event && "pointerId" in event && event.pointerId !== gesture.id)
157
+ return;
158
+ const { target, id } = gesture;
159
+ gesture = null;
160
+ if (target.hasPointerCapture(id))
161
+ target.releasePointerCapture(id);
162
+ dialog.removeAttribute("data-block-editor-dragging");
163
+ }
164
+ function start(event, edge) {
165
+ if (restoreBounds || gesture || event.button !== 0 || !event.isPrimary)
166
+ return;
167
+ if (!edge && event.target.closest('button, a, input, select, textarea, [role="button"]'))
168
+ return;
169
+ event.preventDefault();
170
+ const target = event.currentTarget;
171
+ gesture = { id: event.pointerId, target, edge, x: event.clientX, y: event.clientY, rect: fit(bounds()) };
172
+ place(gesture.rect);
173
+ target.setPointerCapture(event.pointerId);
174
+ dialog.setAttribute("data-block-editor-dragging", "");
175
+ }
176
+ function move(event) {
177
+ if (!gesture || event.pointerId !== gesture.id)
178
+ return;
179
+ const { rect, edge } = gesture, view = viewport();
180
+ const dx = event.clientX - gesture.x, dy = event.clientY - gesture.y;
181
+ if (!edge) {
182
+ place(fit({ ...rect, x: rect.x + dx, y: rect.y + dy }));
183
+ return;
184
+ }
185
+ const minWidth = Math.min(360, view.width), minHeight = Math.min(280, view.height);
186
+ let left = rect.x, top = rect.y, right = rect.x + rect.width, bottom = rect.y + rect.height;
187
+ if (edge.includes("w"))
188
+ left = clamp(left + dx, 0, right - minWidth);
189
+ if (edge.includes("e"))
190
+ right = clamp(right + dx, left + minWidth, view.width);
191
+ if (edge.includes("n"))
192
+ top = clamp(top + dy, 0, bottom - minHeight);
193
+ if (edge.includes("s"))
194
+ bottom = clamp(bottom + dy, top + minHeight, view.height);
195
+ place({ x: left, y: top, width: right - left, height: bottom - top });
196
+ }
197
+ const startMove = (event) => start(event, "");
198
+ header.addEventListener("pointerdown", startMove);
199
+ for (const edge of ["n", "e", "s", "w", "ne", "se", "sw", "nw"]) {
200
+ const handle = doc.createElement("div");
201
+ handle.setAttribute("data-block-editor-resize", edge);
202
+ handle.setAttribute("aria-hidden", "true");
203
+ handle.addEventListener("pointerdown", (event) => start(event, edge));
204
+ dialog.append(handle);
205
+ handles.push(handle);
206
+ }
207
+ function updateButton() {
208
+ const label = restoreBounds ? restoreLabel : maximizeLabel;
209
+ maximize.setAttribute("aria-label", label);
210
+ maximize.setAttribute("aria-pressed", String(Boolean(restoreBounds)));
211
+ maximize.title = label;
212
+ maximize.textContent = restoreBounds ? "\u2750" : "\u26F6";
213
+ dialog.toggleAttribute("data-block-editor-maximized", Boolean(restoreBounds));
214
+ }
215
+ function toggle() {
216
+ stop();
217
+ if (restoreBounds) {
218
+ place(fit(restoreBounds));
219
+ restoreBounds = null;
220
+ } else {
221
+ restoreBounds = bounds();
222
+ place({ x: 0, y: 0, ...viewport() });
223
+ }
224
+ updateButton();
225
+ }
226
+ function resize() {
227
+ stop();
228
+ if (restoreBounds)
229
+ place({ x: 0, y: 0, ...viewport() });
230
+ else
231
+ place(fit(bounds()));
232
+ }
233
+ maximize.addEventListener("click", toggle);
234
+ win.addEventListener("pointermove", move);
235
+ win.addEventListener("pointerup", stop);
236
+ win.addEventListener("pointercancel", stop);
237
+ win.addEventListener("blur", stop);
238
+ win.addEventListener("resize", resize);
239
+ dialog.addEventListener("lostpointercapture", stop);
240
+ updateButton();
241
+ return () => {
242
+ stop();
243
+ header.removeEventListener("pointerdown", startMove);
244
+ win.removeEventListener("pointermove", move);
245
+ win.removeEventListener("pointerup", stop);
246
+ win.removeEventListener("pointercancel", stop);
247
+ win.removeEventListener("blur", stop);
248
+ win.removeEventListener("resize", resize);
249
+ dialog.removeEventListener("lostpointercapture", stop);
250
+ maximize.remove();
251
+ handles.forEach((handle) => handle.remove());
252
+ dialog.style.cssText = initialStyle;
253
+ for (const name of ["window", "maximized", "dragging"])
254
+ dialog.removeAttribute(`data-block-editor-${name}`);
255
+ if (frame !== dialog)
256
+ frame.removeAttribute("data-block-editor-window-frame");
257
+ header.removeAttribute("data-block-editor-titlebar");
258
+ };
259
+ }
260
+
99
261
  // dist/react.js
100
262
  import * as React from "react";
101
263
  var NodeBody = class extends React.Component {
@@ -280,17 +442,18 @@ var BlockEditorDialog = class extends React.Component {
280
442
  this.mountBody();
281
443
  }
282
444
  componentWillUnmount() {
283
- var _a, _b, _c, _d;
445
+ var _a, _b, _c, _d, _e;
284
446
  this.unmounting = true;
285
447
  this.mounted = false;
286
448
  if (this.focusFrame !== void 0)
287
449
  cancelAnimationFrame(this.focusFrame);
288
450
  this.removeListener();
289
451
  (_a = this.stopFieldErrors) === null || _a === void 0 ? void 0 : _a.call(this);
452
+ (_b = this.stopWindow) === null || _b === void 0 ? void 0 : _b.call(this);
290
453
  try {
291
- (_b = this.unmountBody) === null || _b === void 0 ? void 0 : _b.call(this);
454
+ (_c = this.unmountBody) === null || _c === void 0 ? void 0 : _c.call(this);
292
455
  } catch (error) {
293
- (_d = (_c = this.props).onError) === null || _d === void 0 ? void 0 : _d.call(_c, error);
456
+ (_e = (_d = this.props).onError) === null || _e === void 0 ? void 0 : _e.call(_d, error);
294
457
  } finally {
295
458
  this.props.session.dispose();
296
459
  }
@@ -299,6 +462,12 @@ var BlockEditorDialog = class extends React.Component {
299
462
  if (!this.body || this.unmountBody || this.state.mountFailed)
300
463
  return;
301
464
  try {
465
+ if (!this.stopWindow)
466
+ this.stopWindow = attachEditorDialogWindow(this.body, {
467
+ headerClassName: this.props.styles.header,
468
+ maximize: this.props.messages.maximize,
469
+ restore: this.props.messages.restore
470
+ });
302
471
  if (!this.stopFieldErrors)
303
472
  this.stopFieldErrors = field_errors_default(this.body);
304
473
  if (typeof this.props.session.getNodes !== "function")
@@ -336,7 +505,7 @@ var BlockEditorDialog = class extends React.Component {
336
505
  { className: `${styles.modalContent || ""} ${hierarchy ? styles.hierarchyModal : ""} ${this.props.className || ""}`, contentLabel: title, ...(appearance === null || appearance === void 0 ? void 0 : appearance.iconURI) ? { headerImage: appearance.iconURI } : {}, headerClassName: styles.header, id: "blockEditorModal", onRequestClose: this.handleClose },
337
506
  React.createElement(
338
507
  "div",
339
- { "aria-busy": saving, className: styles.body, onCompositionStart: () => {
508
+ { "aria-busy": saving, className: styles.body, "data-block-editor-body": "", onCompositionStart: () => {
340
509
  this.composing = true;
341
510
  }, onCompositionEnd: () => {
342
511
  this.composing = false;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../field-errors.js", "../react.js"],
4
- "sourcesContent": ["// RJSF owns validation and messages; this adapter only decorates its rendered errors.\nconst bindBlockEditorFieldErrors = (container) => {\n const originals = new Map();\n const originalValue = (element, name) => {\n const values = originals.get(element);\n const previous = values && values.get(name);\n const current = element.getAttribute(name);\n return previous && current === previous.applied ? previous.original : current;\n };\n const setAttribute = (element, name, value) => {\n if (element.getAttribute(name) === value)\n return;\n const original = originalValue(element, name);\n if (!originals.has(element))\n originals.set(element, new Map());\n originals.get(element).set(name, { original, applied: value });\n element.setAttribute(name, value);\n };\n const restore = (element) => {\n for (const [name, { original, applied }] of originals.get(element)) {\n // Do not overwrite attributes subsequently changed by RJSF or a custom widget.\n if (element.getAttribute(name) !== applied)\n continue;\n if (original === null)\n element.removeAttribute(name);\n else\n element.setAttribute(name, original);\n }\n originals.delete(element);\n };\n const sync = () => {\n const invalid = new Set();\n const decorate = (element, messages, group = false) => {\n invalid.add(element);\n setAttribute(element, 'aria-invalid', 'true');\n setAttribute(element, 'data-block-editor-invalid', group ? 'group' : 'true');\n const descriptions = new Set((originalValue(element, 'aria-describedby') || '')\n .split(/\\s+/).filter(Boolean));\n for (const message of messages)\n descriptions.add(message.id);\n setAttribute(element, 'aria-describedby', [...descriptions].join(' '));\n if (group && !originalValue(element, 'role'))\n setAttribute(element, 'role', 'group');\n if (group && !element.hasAttribute('aria-label') && !originalValue(element, 'aria-labelledby')) {\n const titles = messages.map(message => message.id.replace(/__error$/, '__title'))\n .filter(id => {\n const title = element.ownerDocument.getElementById(id);\n return title && element.contains(title);\n });\n if (titles.length)\n setAttribute(element, 'aria-labelledby', titles.join(' '));\n }\n };\n for (const field of container.querySelectorAll('.rjsf .field.has-error')) {\n const messages = [...field.querySelectorAll('.error-detail[id]')].filter(message => { var _a; return message.closest('.field') === field && ((_a = message.textContent) === null || _a === void 0 ? void 0 : _a.trim()); });\n if (!messages.length)\n continue;\n if (field.classList.contains('field-object') || field.classList.contains('field-array')) {\n // Group constraints must not mark otherwise valid descendant controls as invalid.\n decorate(field, messages, true);\n continue;\n }\n for (const control of field.querySelectorAll('input:not([type=\"hidden\"]), select, textarea')) {\n if (control.closest('.field') !== field)\n continue;\n const descriptions = (control.getAttribute('aria-describedby') || '').split(/\\s+/);\n const ownMessages = messages.filter(message => descriptions.includes(message.id) ||\n message.id === `${control.id}__error`);\n if (ownMessages.length)\n decorate(control, ownMessages);\n }\n }\n for (const element of originals.keys()) {\n if (!invalid.has(element))\n restore(element);\n }\n };\n const observer = new container.ownerDocument.defaultView.MutationObserver(sync);\n observer.observe(container, { childList: true,\n subtree: true,\n characterData: true,\n attributes: true,\n attributeFilter: ['class', 'id'] });\n sync();\n return () => {\n observer.disconnect();\n for (const element of originals.keys())\n restore(element);\n };\n};\nexport default bindBlockEditorFieldErrors;\n", "import bindBlockEditorFieldErrors from './field-errors.js';\nexport { default as bindBlockEditorFieldErrors } from './field-errors.js';\nimport * as React from 'react';\nimport { BlockEditorConflictError } from './types.js';\nimport { BlockEditorStructureError } from './descendant-types.js';\nclass NodeBody extends React.Component {\n constructor() {\n super(...arguments);\n this.body = null;\n }\n componentDidMount() {\n try {\n this.unmountBody = this.props.editor.mount(this.body);\n }\n catch (error) {\n this.props.onError(error);\n }\n }\n componentWillUnmount() {\n var _a;\n try {\n (_a = this.unmountBody) === null || _a === void 0 ? void 0 : _a.call(this);\n }\n catch (error) {\n this.props.onError(error);\n }\n }\n render() { return React.createElement(\"div\", { ref: body => { this.body = body; } }); }\n}\nlet nextBodyId = 0;\nclass DescendantTree extends React.Component {\n constructor(props) {\n super(props);\n this.nodes = this.props.session.getNodes();\n this.children = new Map();\n this.sections = new Map();\n this.bodyIds = new Map();\n for (const node of this.nodes) {\n const path = node.inputPath;\n const parent = path.length ? path[path.length - 1].blockId : null;\n if (!this.children.has(parent))\n this.children.set(parent, []);\n this.children.get(parent).push(node);\n this.bodyIds.set(node.reference.blockId, `block-editor-node-${++nextBodyId}`);\n }\n this.state = { failedIcons: new Set(), expanded: new Set(this.nodes.filter(node => this.nodes.length <= 30 || node.inputPath.length === 0).map(node => node.reference.blockId)) };\n }\n componentWillUnmount() {\n if (this.focusFrame !== undefined)\n cancelAnimationFrame(this.focusFrame);\n }\n reveal(issue) {\n if (!issue || !('reference' in issue))\n return;\n const expanded = new Set(this.state.expanded);\n for (const step of issue.inputPath)\n expanded.add(step.blockId);\n expanded.add(issue.reference.blockId);\n this.setState({ expanded }, () => {\n if (this.focusFrame !== undefined)\n cancelAnimationFrame(this.focusFrame);\n this.focusFrame = requestAnimationFrame(() => {\n var _a;\n const section = this.sections.get(issue.reference.blockId);\n if (!section)\n return;\n const controls = [...section.querySelectorAll('input, textarea, select')];\n const path = (issue.path || '').replace(/^\\./, '').replace(/\\[(\\d+)\\]/g, '_$1').replace(/\\./g, '_');\n const field = controls.find(control => path && control.id.endsWith(`_${path}`)) || controls[0];\n const target = field || section.querySelector('button');\n target === null || target === void 0 ? void 0 : target.focus();\n (_a = target === null || target === void 0 ? void 0 : target.scrollIntoView) === null || _a === void 0 ? void 0 : _a.call(target, { block: 'nearest' });\n });\n });\n }\n toggle(id) {\n const expanded = new Set(this.state.expanded);\n if (expanded.has(id))\n expanded.delete(id);\n else\n expanded.add(id);\n this.setState({ expanded });\n }\n renderNode(node) {\n var _a, _b, _c;\n const { styles, session, messages } = this.props;\n const id = node.reference.blockId;\n const expanded = this.state.expanded.has(id);\n const editor = (_a = session.getEditor) === null || _a === void 0 ? void 0 : _a.call(session, id);\n const step = node.inputPath[node.inputPath.length - 1];\n const appearance = ((_b = this.props.nodeAppearances) === null || _b === void 0 ? void 0 : _b[id]) || {};\n const label = appearance.name || ((_c = this.props.nodeLabels) === null || _c === void 0 ? void 0 : _c[id]) || node.opcode;\n const style = {\n '--block-editor-node-colour': appearance.colour,\n '--block-editor-node-tint': appearance.tint\n };\n return React.createElement(\"section\", { className: styles.treeNode, \"data-block-editor-node\": id, key: id, style: style, ref: section => { if (section)\n this.sections.set(id, section);\n else\n this.sections.delete(id); } },\n React.createElement(\"h3\", { className: styles.nodeHeading },\n React.createElement(\"button\", { \"aria-controls\": this.bodyIds.get(id), \"aria-expanded\": expanded, \"data-block-editor-toggle\": id, disabled: this.props.disabled, type: \"button\", onClick: () => this.toggle(id) },\n React.createElement(\"span\", { \"aria-hidden\": \"true\" }, expanded ? '\u25BE ' : '\u25B8 '),\n appearance.iconURI && !this.state.failedIcons.has(id) ? React.createElement(\"img\", { alt: \"\", \"aria-hidden\": \"true\", className: styles.nodeIcon, \"data-block-editor-node-icon\": id, draggable: false, src: appearance.iconURI, onError: () => this.setState(state => ({ failedIcons: new Set([...state.failedIcons, id]) })) }) : null,\n React.createElement(\"span\", { className: styles.nodeCaption },\n React.createElement(\"span\", { \"data-block-editor-node-name\": id }, label),\n React.createElement(\"span\", { className: styles.nodeIdentity },\n step ? React.createElement(\"span\", { className: styles.branchName }, `${step.input} \u00B7 ${step.index + 1}: `) : null,\n id)))),\n React.createElement(\"div\", { hidden: !expanded, id: this.bodyIds.get(id) }, expanded ? React.createElement(React.Fragment, null,\n editor ? React.createElement(NodeBody, { editor: editor, onError: this.props.onError }) :\n React.createElement(\"p\", { className: styles.structuralNode }, messages.structuralNode),\n (this.children.get(id) || []).map(child => this.renderNode(child))) : null));\n }\n render() {\n return React.createElement(\"div\", { className: this.props.styles.tree }, (this.children.get(null) || []).map(node => this.renderNode(node)));\n }\n}\n/** The host injects its modal, localized strings and stylesheet mapping; no GUI imports are needed. */\nexport class BlockEditorDialog extends React.Component {\n constructor(props) {\n super(props);\n this.mounted = false;\n this.unmounting = false;\n this.composing = false;\n this.body = null;\n this.tree = null;\n this.removeListener = () => { };\n this.handleBody = (body) => {\n this.body = body;\n if (this.mounted)\n this.mountBody();\n };\n this.handleMountError = (error) => {\n var _a, _b;\n (_b = (_a = this.props).onError) === null || _b === void 0 ? void 0 : _b.call(_a, error);\n if (!this.unmounting)\n this.setState({ mountFailed: true });\n };\n this.handleClose = () => {\n if (this.props.session.cancel())\n return;\n if (this.props.session.getState().status !== 'saving')\n this.props.onClose();\n };\n this.handleSave = async () => {\n var _a;\n const result = await this.props.session.save();\n if (result.status === 'saved')\n this.props.onClose();\n if (result.status === 'invalid')\n (_a = this.tree) === null || _a === void 0 ? void 0 : _a.reveal(result.issues[0]);\n };\n this.state = { ...props.session.getState(), mountFailed: false };\n }\n componentDidMount() {\n this.mounted = true;\n this.removeListener = this.props.session.subscribe(() => {\n const state = this.props.session.getState();\n this.setState(state);\n if (['cancelled', 'disposed', 'invalidated'].includes(state.status))\n this.props.onClose();\n });\n this.mountBody();\n }\n componentWillUnmount() {\n var _a, _b, _c, _d;\n this.unmounting = true;\n this.mounted = false;\n if (this.focusFrame !== undefined)\n cancelAnimationFrame(this.focusFrame);\n this.removeListener();\n (_a = this.stopFieldErrors) === null || _a === void 0 ? void 0 : _a.call(this);\n try {\n (_b = this.unmountBody) === null || _b === void 0 ? void 0 : _b.call(this);\n }\n catch (error) {\n (_d = (_c = this.props).onError) === null || _d === void 0 ? void 0 : _d.call(_c, error);\n }\n finally {\n this.props.session.dispose();\n }\n }\n mountBody() {\n if (!this.body || this.unmountBody || this.state.mountFailed)\n return;\n try {\n if (!this.stopFieldErrors)\n this.stopFieldErrors = bindBlockEditorFieldErrors(this.body);\n if (typeof this.props.session.getNodes !== 'function')\n this.unmountBody = this.props.session.mount(this.body);\n // The modal establishes its focus scope after creating the portal.\n this.focusFrame = requestAnimationFrame(() => {\n if (!this.mounted)\n return;\n const first = this.body.querySelector('input, textarea, select') ||\n this.body.querySelector('button, [tabindex=\"0\"]');\n first === null || first === void 0 ? void 0 : first.focus();\n });\n }\n catch (error) {\n this.handleMountError(error);\n }\n }\n render() {\n var _a, _b, _c, _d;\n const { styles, messages, ModalComponent, session } = this.props;\n const saving = this.state.status === 'saving';\n const hierarchy = typeof session.getNodes === 'function';\n let fixed = false;\n if (session.getFixedInputView && (this.state.status === 'editing' || saving)) {\n try {\n fixed = Boolean(session.getFixedInputView());\n }\n catch (_e) {\n fixed = true;\n }\n }\n const root = (_a = session.getNodes) === null || _a === void 0 ? void 0 : _a.call(session).find(node => node.inputPath.length === 0);\n const rootId = ((_b = session.reference) === null || _b === void 0 ? void 0 : _b.blockId) || (root === null || root === void 0 ? void 0 : root.reference.blockId);\n const appearance = rootId ? (_c = this.props.nodeAppearances) === null || _c === void 0 ? void 0 : _c[rootId] : undefined;\n const name = (appearance === null || appearance === void 0 ? void 0 : appearance.name) || (rootId ? (_d = this.props.nodeLabels) === null || _d === void 0 ? void 0 : _d[rootId] : undefined) || (root === null || root === void 0 ? void 0 : root.opcode);\n const title = name ? messages.title.includes('{name}') ? messages.title.replace('{name}', () => name) :\n /\u30D6\u30ED\u30C3\u30AF|block/i.test(messages.title) ? messages.title.replace(/\u30D6\u30ED\u30C3\u30AF|block/i, () => name) :\n `${name}: ${messages.title}` : messages.title;\n return React.createElement(ModalComponent, { className: `${styles.modalContent || ''} ${hierarchy ? styles.hierarchyModal : ''} ${this.props.className || ''}`, contentLabel: title, ...((appearance === null || appearance === void 0 ? void 0 : appearance.iconURI) ? { headerImage: appearance.iconURI } : {}), headerClassName: styles.header, id: \"blockEditorModal\", onRequestClose: this.handleClose },\n React.createElement(\"div\", { \"aria-busy\": saving, className: styles.body, onCompositionStart: () => { this.composing = true; }, onCompositionEnd: () => { this.composing = false; }, onKeyDownCapture: event => {\n if (this.composing || event.nativeEvent.isComposing || event.keyCode === 229)\n event.stopPropagation();\n } },\n React.createElement(\"div\", { className: styles.editorBody },\n React.createElement(\"div\", { ref: this.handleBody }, hierarchy ? React.createElement(DescendantTree, { session: session, styles: styles, messages: messages, disabled: saving, nodeAppearances: this.props.nodeAppearances, nodeLabels: this.props.nodeLabels, onError: this.handleMountError, ref: tree => { this.tree = tree; } }) : null),\n React.createElement(\"div\", { \"aria-live\": \"polite\", className: styles.errors, role: \"status\" },\n saving ? messages.saving : null,\n fixed && this.state.issues.length ? React.createElement(\"p\", null, messages.invalidInput || messages.failed) : this.state.issues.map((issue, index) => {\n var _a;\n return hierarchy && 'reference' in issue ?\n React.createElement(\"button\", { className: styles.nodeError, \"data-block-editor-issue\": index, disabled: saving, key: index, type: \"button\", onClick: () => { var _a; return (_a = this.tree) === null || _a === void 0 ? void 0 : _a.reveal(issue); } },\n ((_a = this.props.nodeLabels) === null || _a === void 0 ? void 0 : _a[issue.reference.blockId]) || issue.reference.blockId,\n ': ',\n issue.message) : React.createElement(\"p\", { key: index }, issue.message);\n }),\n this.state.error instanceof BlockEditorStructureError ? messages.structureError :\n this.state.error instanceof BlockEditorConflictError ? messages.conflict :\n (this.state.error || this.state.mountFailed) ? messages.failed : null)),\n React.createElement(\"div\", { className: styles.buttons },\n React.createElement(\"button\", { disabled: saving, type: \"button\", onClick: this.handleClose }, messages.cancel),\n React.createElement(\"button\", { \"data-block-editor-save\": \"\", disabled: !this.state.canSave || this.state.mountFailed, type: \"button\", onClick: this.handleSave }, saving ? messages.saving : hierarchy ? messages.saveAll : messages.save))));\n }\n}\n"],
5
- "mappings": "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",
3
+ "sources": ["../field-errors.js", "../dialog-window.js", "../react.js"],
4
+ "sourcesContent": ["// RJSF owns validation and messages; this adapter only decorates its rendered errors.\nconst bindBlockEditorFieldErrors = (container) => {\n const originals = new Map();\n const originalValue = (element, name) => {\n const values = originals.get(element);\n const previous = values && values.get(name);\n const current = element.getAttribute(name);\n return previous && current === previous.applied ? previous.original : current;\n };\n const setAttribute = (element, name, value) => {\n if (element.getAttribute(name) === value)\n return;\n const original = originalValue(element, name);\n if (!originals.has(element))\n originals.set(element, new Map());\n originals.get(element).set(name, { original, applied: value });\n element.setAttribute(name, value);\n };\n const restore = (element) => {\n for (const [name, { original, applied }] of originals.get(element)) {\n // Do not overwrite attributes subsequently changed by RJSF or a custom widget.\n if (element.getAttribute(name) !== applied)\n continue;\n if (original === null)\n element.removeAttribute(name);\n else\n element.setAttribute(name, original);\n }\n originals.delete(element);\n };\n const sync = () => {\n const invalid = new Set();\n const decorate = (element, messages, group = false) => {\n invalid.add(element);\n setAttribute(element, 'aria-invalid', 'true');\n setAttribute(element, 'data-block-editor-invalid', group ? 'group' : 'true');\n const descriptions = new Set((originalValue(element, 'aria-describedby') || '')\n .split(/\\s+/).filter(Boolean));\n for (const message of messages)\n descriptions.add(message.id);\n setAttribute(element, 'aria-describedby', [...descriptions].join(' '));\n if (group && !originalValue(element, 'role'))\n setAttribute(element, 'role', 'group');\n if (group && !element.hasAttribute('aria-label') && !originalValue(element, 'aria-labelledby')) {\n const titles = messages.map(message => message.id.replace(/__error$/, '__title'))\n .filter(id => {\n const title = element.ownerDocument.getElementById(id);\n return title && element.contains(title);\n });\n if (titles.length)\n setAttribute(element, 'aria-labelledby', titles.join(' '));\n }\n };\n for (const field of container.querySelectorAll('.rjsf .field.has-error')) {\n const messages = [...field.querySelectorAll('.error-detail[id]')].filter(message => { var _a; return message.closest('.field') === field && ((_a = message.textContent) === null || _a === void 0 ? void 0 : _a.trim()); });\n if (!messages.length)\n continue;\n if (field.classList.contains('field-object') || field.classList.contains('field-array')) {\n // Group constraints must not mark otherwise valid descendant controls as invalid.\n decorate(field, messages, true);\n continue;\n }\n for (const control of field.querySelectorAll('input:not([type=\"hidden\"]), select, textarea')) {\n if (control.closest('.field') !== field)\n continue;\n const descriptions = (control.getAttribute('aria-describedby') || '').split(/\\s+/);\n const ownMessages = messages.filter(message => descriptions.includes(message.id) ||\n message.id === `${control.id}__error`);\n if (ownMessages.length)\n decorate(control, ownMessages);\n }\n }\n for (const element of originals.keys()) {\n if (!invalid.has(element))\n restore(element);\n }\n };\n const observer = new container.ownerDocument.defaultView.MutationObserver(sync);\n observer.observe(container, { childList: true,\n subtree: true,\n characterData: true,\n attributes: true,\n attributeFilter: ['class', 'id'] });\n sync();\n return () => {\n observer.disconnect();\n for (const element of originals.keys())\n restore(element);\n };\n};\nexport default bindBlockEditorFieldErrors;\n", "/** Add window controls to the injected host frame without depending on GUI internals. */\nexport function attachEditorDialogWindow(body, labels) {\n var _a;\n const dialog = body.closest('[role=\"dialog\"]');\n const header = (labels.headerClassName ? dialog === null || dialog === void 0 ? void 0 : dialog.getElementsByClassName(labels.headerClassName)[0] :\n dialog === null || dialog === void 0 ? void 0 : dialog.querySelector('header'));\n const content = body.closest('[data-block-editor-body]');\n if (!dialog || !header || !content || !((_a = header.parentElement) === null || _a === void 0 ? void 0 : _a.contains(content)))\n return;\n const doc = dialog.ownerDocument, win = doc.defaultView;\n if (!win)\n return;\n const frame = header.parentElement;\n const initialStyle = dialog.style.cssText;\n const language = doc.documentElement.lang || new URLSearchParams(win.location.search).get('lang') || win.navigator.language;\n const japanese = language.startsWith('ja');\n const maximizeLabel = labels.maximize || (japanese ? '\u5168\u753B\u9762\u5316' : 'Maximize');\n const restoreLabel = labels.restore || (japanese ? '\u5143\u306E\u30B5\u30A4\u30BA\u306B\u623B\u3059' : 'Restore window');\n let restoreBounds = null;\n let gesture = null;\n const handles = [];\n dialog.setAttribute('data-block-editor-window', '');\n if (frame !== dialog)\n frame.setAttribute('data-block-editor-window-frame', '');\n header.setAttribute('data-block-editor-titlebar', '');\n const maximize = doc.createElement('button');\n maximize.type = 'button';\n maximize.setAttribute('data-block-editor-maximize', '');\n const closeContainer = header.lastElementChild;\n if (closeContainer === null || closeContainer === void 0 ? void 0 : closeContainer.querySelector('button, [role=\"button\"]'))\n closeContainer.prepend(maximize);\n else\n header.insertBefore(maximize, closeContainer);\n const viewport = () => ({ width: win.innerWidth, height: win.innerHeight });\n const bounds = () => {\n const { x, y, width, height } = dialog.getBoundingClientRect();\n return { x, y, width, height };\n };\n const clamp = (value, min, max) => Math.min(Math.max(value, min), max);\n function fit(rect) {\n const view = viewport();\n const width = clamp(rect.width, Math.min(360, view.width), view.width);\n const height = clamp(rect.height, Math.min(280, view.height), view.height);\n return { width, height, x: clamp(rect.x, 0, view.width - width), y: clamp(rect.y, 0, view.height - height) };\n }\n function place(rect) {\n Object.assign(dialog.style, { margin: '0', inset: 'auto', transform: 'none', maxHeight: '100dvh',\n left: `${rect.x}px`, top: `${rect.y}px`, width: `${rect.width}px`, height: `${rect.height}px` });\n }\n function stop(event) {\n if (!gesture || (event && 'pointerId' in event && event.pointerId !== gesture.id))\n return;\n const { target, id } = gesture;\n gesture = null;\n if (target.hasPointerCapture(id))\n target.releasePointerCapture(id);\n dialog.removeAttribute('data-block-editor-dragging');\n }\n function start(event, edge) {\n if (restoreBounds || gesture || event.button !== 0 || !event.isPrimary)\n return;\n if (!edge && event.target.closest('button, a, input, select, textarea, [role=\"button\"]'))\n return;\n event.preventDefault();\n const target = event.currentTarget;\n gesture = { id: event.pointerId, target, edge, x: event.clientX, y: event.clientY, rect: fit(bounds()) };\n place(gesture.rect);\n target.setPointerCapture(event.pointerId);\n dialog.setAttribute('data-block-editor-dragging', '');\n }\n function move(event) {\n if (!gesture || event.pointerId !== gesture.id)\n return;\n const { rect, edge } = gesture, view = viewport();\n const dx = event.clientX - gesture.x, dy = event.clientY - gesture.y;\n if (!edge) {\n place(fit({ ...rect, x: rect.x + dx, y: rect.y + dy }));\n return;\n }\n const minWidth = Math.min(360, view.width), minHeight = Math.min(280, view.height);\n let left = rect.x, top = rect.y, right = rect.x + rect.width, bottom = rect.y + rect.height;\n if (edge.includes('w'))\n left = clamp(left + dx, 0, right - minWidth);\n if (edge.includes('e'))\n right = clamp(right + dx, left + minWidth, view.width);\n if (edge.includes('n'))\n top = clamp(top + dy, 0, bottom - minHeight);\n if (edge.includes('s'))\n bottom = clamp(bottom + dy, top + minHeight, view.height);\n place({ x: left, y: top, width: right - left, height: bottom - top });\n }\n const startMove = (event) => start(event, '');\n header.addEventListener('pointerdown', startMove);\n for (const edge of ['n', 'e', 's', 'w', 'ne', 'se', 'sw', 'nw']) {\n const handle = doc.createElement('div');\n handle.setAttribute('data-block-editor-resize', edge);\n handle.setAttribute('aria-hidden', 'true');\n handle.addEventListener('pointerdown', event => start(event, edge));\n dialog.append(handle);\n handles.push(handle);\n }\n function updateButton() {\n const label = restoreBounds ? restoreLabel : maximizeLabel;\n maximize.setAttribute('aria-label', label);\n maximize.setAttribute('aria-pressed', String(Boolean(restoreBounds)));\n maximize.title = label;\n maximize.textContent = restoreBounds ? '\u2750' : '\u26F6';\n dialog.toggleAttribute('data-block-editor-maximized', Boolean(restoreBounds));\n }\n function toggle() {\n stop();\n if (restoreBounds) {\n place(fit(restoreBounds));\n restoreBounds = null;\n }\n else {\n restoreBounds = bounds();\n place({ x: 0, y: 0, ...viewport() });\n }\n updateButton();\n }\n function resize() {\n stop();\n if (restoreBounds)\n place({ x: 0, y: 0, ...viewport() });\n else\n place(fit(bounds()));\n }\n maximize.addEventListener('click', toggle);\n win.addEventListener('pointermove', move);\n win.addEventListener('pointerup', stop);\n win.addEventListener('pointercancel', stop);\n win.addEventListener('blur', stop);\n win.addEventListener('resize', resize);\n dialog.addEventListener('lostpointercapture', stop);\n updateButton();\n return () => {\n stop();\n header.removeEventListener('pointerdown', startMove);\n win.removeEventListener('pointermove', move);\n win.removeEventListener('pointerup', stop);\n win.removeEventListener('pointercancel', stop);\n win.removeEventListener('blur', stop);\n win.removeEventListener('resize', resize);\n dialog.removeEventListener('lostpointercapture', stop);\n maximize.remove();\n handles.forEach(handle => handle.remove());\n dialog.style.cssText = initialStyle;\n for (const name of ['window', 'maximized', 'dragging'])\n dialog.removeAttribute(`data-block-editor-${name}`);\n if (frame !== dialog)\n frame.removeAttribute('data-block-editor-window-frame');\n header.removeAttribute('data-block-editor-titlebar');\n };\n}\n", "import bindBlockEditorFieldErrors from './field-errors.js';\nimport { attachEditorDialogWindow } from './dialog-window.js';\nexport { default as bindBlockEditorFieldErrors } from './field-errors.js';\nimport * as React from 'react';\nimport { BlockEditorConflictError } from './types.js';\nimport { BlockEditorStructureError } from './descendant-types.js';\nclass NodeBody extends React.Component {\n constructor() {\n super(...arguments);\n this.body = null;\n }\n componentDidMount() {\n try {\n this.unmountBody = this.props.editor.mount(this.body);\n }\n catch (error) {\n this.props.onError(error);\n }\n }\n componentWillUnmount() {\n var _a;\n try {\n (_a = this.unmountBody) === null || _a === void 0 ? void 0 : _a.call(this);\n }\n catch (error) {\n this.props.onError(error);\n }\n }\n render() { return React.createElement(\"div\", { ref: body => { this.body = body; } }); }\n}\nlet nextBodyId = 0;\nclass DescendantTree extends React.Component {\n constructor(props) {\n super(props);\n this.nodes = this.props.session.getNodes();\n this.children = new Map();\n this.sections = new Map();\n this.bodyIds = new Map();\n for (const node of this.nodes) {\n const path = node.inputPath;\n const parent = path.length ? path[path.length - 1].blockId : null;\n if (!this.children.has(parent))\n this.children.set(parent, []);\n this.children.get(parent).push(node);\n this.bodyIds.set(node.reference.blockId, `block-editor-node-${++nextBodyId}`);\n }\n this.state = { failedIcons: new Set(), expanded: new Set(this.nodes.filter(node => this.nodes.length <= 30 || node.inputPath.length === 0).map(node => node.reference.blockId)) };\n }\n componentWillUnmount() {\n if (this.focusFrame !== undefined)\n cancelAnimationFrame(this.focusFrame);\n }\n reveal(issue) {\n if (!issue || !('reference' in issue))\n return;\n const expanded = new Set(this.state.expanded);\n for (const step of issue.inputPath)\n expanded.add(step.blockId);\n expanded.add(issue.reference.blockId);\n this.setState({ expanded }, () => {\n if (this.focusFrame !== undefined)\n cancelAnimationFrame(this.focusFrame);\n this.focusFrame = requestAnimationFrame(() => {\n var _a;\n const section = this.sections.get(issue.reference.blockId);\n if (!section)\n return;\n const controls = [...section.querySelectorAll('input, textarea, select')];\n const path = (issue.path || '').replace(/^\\./, '').replace(/\\[(\\d+)\\]/g, '_$1').replace(/\\./g, '_');\n const field = controls.find(control => path && control.id.endsWith(`_${path}`)) || controls[0];\n const target = field || section.querySelector('button');\n target === null || target === void 0 ? void 0 : target.focus();\n (_a = target === null || target === void 0 ? void 0 : target.scrollIntoView) === null || _a === void 0 ? void 0 : _a.call(target, { block: 'nearest' });\n });\n });\n }\n toggle(id) {\n const expanded = new Set(this.state.expanded);\n if (expanded.has(id))\n expanded.delete(id);\n else\n expanded.add(id);\n this.setState({ expanded });\n }\n renderNode(node) {\n var _a, _b, _c;\n const { styles, session, messages } = this.props;\n const id = node.reference.blockId;\n const expanded = this.state.expanded.has(id);\n const editor = (_a = session.getEditor) === null || _a === void 0 ? void 0 : _a.call(session, id);\n const step = node.inputPath[node.inputPath.length - 1];\n const appearance = ((_b = this.props.nodeAppearances) === null || _b === void 0 ? void 0 : _b[id]) || {};\n const label = appearance.name || ((_c = this.props.nodeLabels) === null || _c === void 0 ? void 0 : _c[id]) || node.opcode;\n const style = {\n '--block-editor-node-colour': appearance.colour,\n '--block-editor-node-tint': appearance.tint\n };\n return React.createElement(\"section\", { className: styles.treeNode, \"data-block-editor-node\": id, key: id, style: style, ref: section => { if (section)\n this.sections.set(id, section);\n else\n this.sections.delete(id); } },\n React.createElement(\"h3\", { className: styles.nodeHeading },\n React.createElement(\"button\", { \"aria-controls\": this.bodyIds.get(id), \"aria-expanded\": expanded, \"data-block-editor-toggle\": id, disabled: this.props.disabled, type: \"button\", onClick: () => this.toggle(id) },\n React.createElement(\"span\", { \"aria-hidden\": \"true\" }, expanded ? '\u25BE ' : '\u25B8 '),\n appearance.iconURI && !this.state.failedIcons.has(id) ? React.createElement(\"img\", { alt: \"\", \"aria-hidden\": \"true\", className: styles.nodeIcon, \"data-block-editor-node-icon\": id, draggable: false, src: appearance.iconURI, onError: () => this.setState(state => ({ failedIcons: new Set([...state.failedIcons, id]) })) }) : null,\n React.createElement(\"span\", { className: styles.nodeCaption },\n React.createElement(\"span\", { \"data-block-editor-node-name\": id }, label),\n React.createElement(\"span\", { className: styles.nodeIdentity },\n step ? React.createElement(\"span\", { className: styles.branchName }, `${step.input} \u00B7 ${step.index + 1}: `) : null,\n id)))),\n React.createElement(\"div\", { hidden: !expanded, id: this.bodyIds.get(id) }, expanded ? React.createElement(React.Fragment, null,\n editor ? React.createElement(NodeBody, { editor: editor, onError: this.props.onError }) :\n React.createElement(\"p\", { className: styles.structuralNode }, messages.structuralNode),\n (this.children.get(id) || []).map(child => this.renderNode(child))) : null));\n }\n render() {\n return React.createElement(\"div\", { className: this.props.styles.tree }, (this.children.get(null) || []).map(node => this.renderNode(node)));\n }\n}\n/** The host injects its modal, localized strings and stylesheet mapping; no GUI imports are needed. */\nexport class BlockEditorDialog extends React.Component {\n constructor(props) {\n super(props);\n this.mounted = false;\n this.unmounting = false;\n this.composing = false;\n this.body = null;\n this.tree = null;\n this.removeListener = () => { };\n this.handleBody = (body) => {\n this.body = body;\n if (this.mounted)\n this.mountBody();\n };\n this.handleMountError = (error) => {\n var _a, _b;\n (_b = (_a = this.props).onError) === null || _b === void 0 ? void 0 : _b.call(_a, error);\n if (!this.unmounting)\n this.setState({ mountFailed: true });\n };\n this.handleClose = () => {\n if (this.props.session.cancel())\n return;\n if (this.props.session.getState().status !== 'saving')\n this.props.onClose();\n };\n this.handleSave = async () => {\n var _a;\n const result = await this.props.session.save();\n if (result.status === 'saved')\n this.props.onClose();\n if (result.status === 'invalid')\n (_a = this.tree) === null || _a === void 0 ? void 0 : _a.reveal(result.issues[0]);\n };\n this.state = { ...props.session.getState(), mountFailed: false };\n }\n componentDidMount() {\n this.mounted = true;\n this.removeListener = this.props.session.subscribe(() => {\n const state = this.props.session.getState();\n this.setState(state);\n if (['cancelled', 'disposed', 'invalidated'].includes(state.status))\n this.props.onClose();\n });\n this.mountBody();\n }\n componentWillUnmount() {\n var _a, _b, _c, _d, _e;\n this.unmounting = true;\n this.mounted = false;\n if (this.focusFrame !== undefined)\n cancelAnimationFrame(this.focusFrame);\n this.removeListener();\n (_a = this.stopFieldErrors) === null || _a === void 0 ? void 0 : _a.call(this);\n (_b = this.stopWindow) === null || _b === void 0 ? void 0 : _b.call(this);\n try {\n (_c = this.unmountBody) === null || _c === void 0 ? void 0 : _c.call(this);\n }\n catch (error) {\n (_e = (_d = this.props).onError) === null || _e === void 0 ? void 0 : _e.call(_d, error);\n }\n finally {\n this.props.session.dispose();\n }\n }\n mountBody() {\n if (!this.body || this.unmountBody || this.state.mountFailed)\n return;\n try {\n if (!this.stopWindow)\n this.stopWindow = attachEditorDialogWindow(this.body, {\n headerClassName: this.props.styles.header,\n maximize: this.props.messages.maximize,\n restore: this.props.messages.restore\n });\n if (!this.stopFieldErrors)\n this.stopFieldErrors = bindBlockEditorFieldErrors(this.body);\n if (typeof this.props.session.getNodes !== 'function')\n this.unmountBody = this.props.session.mount(this.body);\n // The modal establishes its focus scope after creating the portal.\n this.focusFrame = requestAnimationFrame(() => {\n if (!this.mounted)\n return;\n const first = this.body.querySelector('input, textarea, select') ||\n this.body.querySelector('button, [tabindex=\"0\"]');\n first === null || first === void 0 ? void 0 : first.focus();\n });\n }\n catch (error) {\n this.handleMountError(error);\n }\n }\n render() {\n var _a, _b, _c, _d;\n const { styles, messages, ModalComponent, session } = this.props;\n const saving = this.state.status === 'saving';\n const hierarchy = typeof session.getNodes === 'function';\n let fixed = false;\n if (session.getFixedInputView && (this.state.status === 'editing' || saving)) {\n try {\n fixed = Boolean(session.getFixedInputView());\n }\n catch (_e) {\n fixed = true;\n }\n }\n const root = (_a = session.getNodes) === null || _a === void 0 ? void 0 : _a.call(session).find(node => node.inputPath.length === 0);\n const rootId = ((_b = session.reference) === null || _b === void 0 ? void 0 : _b.blockId) || (root === null || root === void 0 ? void 0 : root.reference.blockId);\n const appearance = rootId ? (_c = this.props.nodeAppearances) === null || _c === void 0 ? void 0 : _c[rootId] : undefined;\n const name = (appearance === null || appearance === void 0 ? void 0 : appearance.name) || (rootId ? (_d = this.props.nodeLabels) === null || _d === void 0 ? void 0 : _d[rootId] : undefined) || (root === null || root === void 0 ? void 0 : root.opcode);\n const title = name ? messages.title.includes('{name}') ? messages.title.replace('{name}', () => name) :\n /\u30D6\u30ED\u30C3\u30AF|block/i.test(messages.title) ? messages.title.replace(/\u30D6\u30ED\u30C3\u30AF|block/i, () => name) :\n `${name}: ${messages.title}` : messages.title;\n return React.createElement(ModalComponent, { className: `${styles.modalContent || ''} ${hierarchy ? styles.hierarchyModal : ''} ${this.props.className || ''}`, contentLabel: title, ...((appearance === null || appearance === void 0 ? void 0 : appearance.iconURI) ? { headerImage: appearance.iconURI } : {}), headerClassName: styles.header, id: \"blockEditorModal\", onRequestClose: this.handleClose },\n React.createElement(\"div\", { \"aria-busy\": saving, className: styles.body, \"data-block-editor-body\": \"\", onCompositionStart: () => { this.composing = true; }, onCompositionEnd: () => { this.composing = false; }, onKeyDownCapture: event => {\n if (this.composing || event.nativeEvent.isComposing || event.keyCode === 229)\n event.stopPropagation();\n } },\n React.createElement(\"div\", { className: styles.editorBody },\n React.createElement(\"div\", { ref: this.handleBody }, hierarchy ? React.createElement(DescendantTree, { session: session, styles: styles, messages: messages, disabled: saving, nodeAppearances: this.props.nodeAppearances, nodeLabels: this.props.nodeLabels, onError: this.handleMountError, ref: tree => { this.tree = tree; } }) : null),\n React.createElement(\"div\", { \"aria-live\": \"polite\", className: styles.errors, role: \"status\" },\n saving ? messages.saving : null,\n fixed && this.state.issues.length ? React.createElement(\"p\", null, messages.invalidInput || messages.failed) : this.state.issues.map((issue, index) => {\n var _a;\n return hierarchy && 'reference' in issue ?\n React.createElement(\"button\", { className: styles.nodeError, \"data-block-editor-issue\": index, disabled: saving, key: index, type: \"button\", onClick: () => { var _a; return (_a = this.tree) === null || _a === void 0 ? void 0 : _a.reveal(issue); } },\n ((_a = this.props.nodeLabels) === null || _a === void 0 ? void 0 : _a[issue.reference.blockId]) || issue.reference.blockId,\n ': ',\n issue.message) : React.createElement(\"p\", { key: index }, issue.message);\n }),\n this.state.error instanceof BlockEditorStructureError ? messages.structureError :\n this.state.error instanceof BlockEditorConflictError ? messages.conflict :\n (this.state.error || this.state.mountFailed) ? messages.failed : null)),\n React.createElement(\"div\", { className: styles.buttons },\n React.createElement(\"button\", { disabled: saving, type: \"button\", onClick: this.handleClose }, messages.cancel),\n React.createElement(\"button\", { \"data-block-editor-save\": \"\", disabled: !this.state.canSave || this.state.mountFailed, type: \"button\", onClick: this.handleSave }, saving ? messages.saving : hierarchy ? messages.saveAll : messages.save))));\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["_a"]
7
7
  }
@@ -2,7 +2,7 @@ import {
2
2
  EditorRegistry,
3
3
  cloneJson,
4
4
  createFixedInputEditor
5
- } from "./shared-QIOZ73LT.js";
5
+ } from "./shared-FW4MRLXW.js";
6
6
  import {
7
7
  EDITOR_API_VERSION
8
8
  } from "./shared-BKTRZUZH.js";
@@ -22233,6 +22233,18 @@ function createBlockEditorService(options) {
22233
22233
  const api = Object.freeze({
22234
22234
  ...fixed,
22235
22235
  apiVersion: EDITOR_API_VERSION,
22236
+ registerPreview: (definition) => {
22237
+ const remove = registry.registerPreview(definition);
22238
+ notify();
22239
+ let active = true;
22240
+ return () => {
22241
+ if (active) {
22242
+ active = false;
22243
+ remove();
22244
+ notify();
22245
+ }
22246
+ };
22247
+ },
22236
22248
  register: (definition) => {
22237
22249
  const custom = definition;
22238
22250
  const editor = !custom.mount && Object.hasOwn(definition, "schema") ? createSchemaEditor(definition, features) : custom;