@next-buildr/editor 2.0.1 → 3.0.0-rc.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 (645) hide show
  1. package/README.md +2 -0
  2. package/UPGRADING.md +322 -0
  3. package/dist/.tsbuildinfo +1 -1
  4. package/dist/app/builder-editor.test.js +223 -18
  5. package/dist/app/config.d.ts +27 -4
  6. package/dist/app/config.d.ts.map +1 -1
  7. package/dist/app/config.js +4 -3
  8. package/dist/app/contracts.d.ts +40 -0
  9. package/dist/app/contracts.d.ts.map +1 -0
  10. package/dist/app/contracts.js +4 -0
  11. package/dist/app/editor-app.d.ts.map +1 -1
  12. package/dist/app/editor-app.js +316 -24
  13. package/dist/app/editor-app.test.js +144 -6
  14. package/dist/app/layout.d.ts +11 -2
  15. package/dist/app/layout.d.ts.map +1 -1
  16. package/dist/app/layout.js +170 -9
  17. package/dist/app/manifest.d.ts +7 -2
  18. package/dist/app/manifest.d.ts.map +1 -1
  19. package/dist/app/manifest.js +16 -4
  20. package/dist/app/shell-panels.d.ts +15 -0
  21. package/dist/app/shell-panels.d.ts.map +1 -1
  22. package/dist/app/small-screen.test.js +2 -2
  23. package/dist/app/stage-slots.d.ts +9 -0
  24. package/dist/app/stage-slots.d.ts.map +1 -0
  25. package/dist/app/stage-slots.js +10 -0
  26. package/dist/app/status-info.d.ts +2 -3
  27. package/dist/app/status-info.d.ts.map +1 -1
  28. package/dist/app/status-info.js +49 -16
  29. package/dist/canvas-host/canvas-frame.d.ts +13 -1
  30. package/dist/canvas-host/canvas-frame.d.ts.map +1 -1
  31. package/dist/canvas-host/canvas-frame.js +96 -8
  32. package/dist/canvas-host/canvas-frame.test.js +156 -3
  33. package/dist/canvas-host/host.d.ts +6 -0
  34. package/dist/canvas-host/host.d.ts.map +1 -1
  35. package/dist/canvas-host/host.js +116 -4
  36. package/dist/canvas-host/host.test.js +195 -6
  37. package/dist/clipboard/clipboard.d.ts +1 -1
  38. package/dist/clipboard/clipboard.d.ts.map +1 -1
  39. package/dist/clipboard/clipboard.js +5 -0
  40. package/dist/clipboard/clipboard.test.js +21 -1
  41. package/dist/clipboard/format.d.ts +3 -1
  42. package/dist/clipboard/format.d.ts.map +1 -1
  43. package/dist/clipboard/react.d.ts +1 -1
  44. package/dist/clipboard/react.d.ts.map +1 -1
  45. package/dist/clipboard/react.js +49 -3
  46. package/dist/dialogs/external-source.d.ts +15 -0
  47. package/dist/dialogs/external-source.d.ts.map +1 -0
  48. package/dist/dialogs/external-source.js +18 -0
  49. package/dist/dialogs/index.d.ts +4 -0
  50. package/dist/dialogs/index.d.ts.map +1 -1
  51. package/dist/dialogs/index.js +2 -0
  52. package/dist/dialogs/media-picker/index.d.ts +2 -2
  53. package/dist/dialogs/media-picker/index.d.ts.map +1 -1
  54. package/dist/dialogs/media-picker/index.js +1 -1
  55. package/dist/dialogs/media-picker/media-picker.d.ts +5 -0
  56. package/dist/dialogs/media-picker/media-picker.d.ts.map +1 -1
  57. package/dist/dialogs/media-picker/media-picker.js +67 -5
  58. package/dist/dialogs/media-picker/media-picker.test.js +72 -1
  59. package/dist/dialogs/media-picker/media-ref.d.ts +15 -0
  60. package/dist/dialogs/media-picker/media-ref.d.ts.map +1 -1
  61. package/dist/dialogs/media-picker/media-ref.js +29 -0
  62. package/dist/dialogs/remove-confirm.d.ts +14 -0
  63. package/dist/dialogs/remove-confirm.d.ts.map +1 -0
  64. package/dist/dialogs/remove-confirm.js +42 -0
  65. package/dist/dialogs/remove-confirm.test.d.ts +2 -0
  66. package/dist/dialogs/remove-confirm.test.d.ts.map +1 -0
  67. package/dist/dialogs/remove-confirm.test.js +118 -0
  68. package/dist/dnd/dnd-react.test.js +11 -2
  69. package/dist/dnd/dnd.test.js +23 -0
  70. package/dist/dnd/engine.d.ts +4 -2
  71. package/dist/dnd/engine.d.ts.map +1 -1
  72. package/dist/dnd/engine.js +6 -0
  73. package/dist/dnd/move-to-dialog.d.ts +4 -3
  74. package/dist/dnd/move-to-dialog.d.ts.map +1 -1
  75. package/dist/dnd/move-to-dialog.js +67 -10
  76. package/dist/dnd/react.d.ts.map +1 -1
  77. package/dist/dnd/react.js +5 -0
  78. package/dist/i18n/diagnostics.d.ts +22 -0
  79. package/dist/i18n/diagnostics.d.ts.map +1 -0
  80. package/dist/i18n/diagnostics.js +153 -0
  81. package/dist/i18n/diagnostics.test.d.ts +2 -0
  82. package/dist/i18n/diagnostics.test.d.ts.map +1 -0
  83. package/dist/i18n/diagnostics.test.js +74 -0
  84. package/dist/i18n/label-catalog.d.ts +20 -0
  85. package/dist/i18n/label-catalog.d.ts.map +1 -0
  86. package/dist/i18n/label-catalog.js +1 -0
  87. package/dist/i18n/locale-name.d.ts +7 -0
  88. package/dist/i18n/locale-name.d.ts.map +1 -0
  89. package/dist/i18n/locale-name.js +31 -0
  90. package/dist/i18n/localize-manifest.d.ts +11 -0
  91. package/dist/i18n/localize-manifest.d.ts.map +1 -0
  92. package/dist/i18n/localize-manifest.js +78 -0
  93. package/dist/i18n/localize-manifest.test.d.ts +2 -0
  94. package/dist/i18n/localize-manifest.test.d.ts.map +1 -0
  95. package/dist/i18n/localize-manifest.test.js +71 -0
  96. package/dist/messages/catalogs.test.d.ts +2 -0
  97. package/dist/messages/catalogs.test.d.ts.map +1 -0
  98. package/dist/messages/catalogs.test.js +80 -0
  99. package/dist/messages/en/app.d.ts +8 -0
  100. package/dist/messages/en/app.d.ts.map +1 -0
  101. package/dist/messages/en/app.js +7 -0
  102. package/dist/messages/en/blocks.d.ts +54 -0
  103. package/dist/messages/en/blocks.d.ts.map +1 -0
  104. package/dist/messages/en/blocks.js +53 -0
  105. package/dist/messages/en/canvas.d.ts +31 -0
  106. package/dist/messages/en/canvas.d.ts.map +1 -0
  107. package/dist/messages/en/canvas.js +30 -0
  108. package/dist/messages/en/clipboard.d.ts +13 -0
  109. package/dist/messages/en/clipboard.d.ts.map +1 -0
  110. package/dist/messages/en/clipboard.js +12 -0
  111. package/dist/messages/en/colorPicker.d.ts +20 -0
  112. package/dist/messages/en/colorPicker.d.ts.map +1 -0
  113. package/dist/messages/en/colorPicker.js +19 -0
  114. package/dist/messages/en/diagnostics.d.ts +40 -0
  115. package/dist/messages/en/diagnostics.d.ts.map +1 -0
  116. package/dist/messages/en/diagnostics.js +39 -0
  117. package/dist/messages/en/dialogs/common.d.ts +6 -0
  118. package/dist/messages/en/dialogs/common.d.ts.map +1 -0
  119. package/dist/messages/en/dialogs/common.js +5 -0
  120. package/dist/messages/en/dialogs/conflict.d.ts +15 -0
  121. package/dist/messages/en/dialogs/conflict.d.ts.map +1 -0
  122. package/dist/messages/en/dialogs/conflict.js +14 -0
  123. package/dist/messages/en/dialogs/delete.d.ts +19 -0
  124. package/dist/messages/en/dialogs/delete.d.ts.map +1 -0
  125. package/dist/messages/en/dialogs/delete.js +18 -0
  126. package/dist/messages/en/dialogs/pageOptions.d.ts +9 -0
  127. package/dist/messages/en/dialogs/pageOptions.d.ts.map +1 -0
  128. package/dist/messages/en/dialogs/pageOptions.js +8 -0
  129. package/dist/messages/en/dialogs/publish.d.ts +15 -0
  130. package/dist/messages/en/dialogs/publish.d.ts.map +1 -0
  131. package/dist/messages/en/dialogs/publish.js +14 -0
  132. package/dist/messages/en/dnd.d.ts +19 -0
  133. package/dist/messages/en/dnd.d.ts.map +1 -0
  134. package/dist/messages/en/dnd.js +18 -0
  135. package/dist/messages/en/editor.d.ts +30 -0
  136. package/dist/messages/en/editor.d.ts.map +1 -0
  137. package/dist/messages/en/editor.js +29 -0
  138. package/dist/messages/en/external.d.ts +6 -0
  139. package/dist/messages/en/external.d.ts.map +1 -0
  140. package/dist/messages/en/external.js +5 -0
  141. package/dist/messages/en/insert.d.ts +25 -0
  142. package/dist/messages/en/insert.d.ts.map +1 -0
  143. package/dist/messages/en/insert.js +24 -0
  144. package/dist/messages/en/inspector.d.ts +176 -0
  145. package/dist/messages/en/inspector.d.ts.map +1 -0
  146. package/dist/messages/en/inspector.js +175 -0
  147. package/dist/messages/en/issues.d.ts +36 -0
  148. package/dist/messages/en/issues.d.ts.map +1 -0
  149. package/dist/messages/en/issues.js +35 -0
  150. package/dist/messages/en/layers.d.ts +29 -0
  151. package/dist/messages/en/layers.d.ts.map +1 -0
  152. package/dist/messages/en/layers.js +28 -0
  153. package/dist/messages/en/leftPanel.d.ts +15 -0
  154. package/dist/messages/en/leftPanel.d.ts.map +1 -0
  155. package/dist/messages/en/leftPanel.js +14 -0
  156. package/dist/messages/en/list.d.ts +9 -0
  157. package/dist/messages/en/list.d.ts.map +1 -0
  158. package/dist/messages/en/list.js +8 -0
  159. package/dist/messages/en/locale.d.ts +4 -0
  160. package/dist/messages/en/locale.d.ts.map +1 -0
  161. package/dist/messages/en/locale.js +3 -0
  162. package/dist/messages/en/media.d.ts +51 -0
  163. package/dist/messages/en/media.d.ts.map +1 -0
  164. package/dist/messages/en/media.js +50 -0
  165. package/dist/messages/en/menu.d.ts +12 -0
  166. package/dist/messages/en/menu.d.ts.map +1 -0
  167. package/dist/messages/en/menu.js +11 -0
  168. package/dist/messages/en/patterns.d.ts +24 -0
  169. package/dist/messages/en/patterns.d.ts.map +1 -0
  170. package/dist/messages/en/patterns.js +23 -0
  171. package/dist/messages/en/preview.d.ts +8 -0
  172. package/dist/messages/en/preview.d.ts.map +1 -0
  173. package/dist/messages/en/preview.js +7 -0
  174. package/dist/messages/en/publish.d.ts +19 -0
  175. package/dist/messages/en/publish.d.ts.map +1 -0
  176. package/dist/messages/en/publish.js +18 -0
  177. package/dist/messages/en/richText.d.ts +21 -0
  178. package/dist/messages/en/richText.d.ts.map +1 -0
  179. package/dist/messages/en/richText.js +20 -0
  180. package/dist/messages/en/sample.d.ts +5 -0
  181. package/dist/messages/en/sample.d.ts.map +1 -0
  182. package/dist/messages/en/sample.js +4 -0
  183. package/dist/messages/en/save.d.ts +15 -0
  184. package/dist/messages/en/save.d.ts.map +1 -0
  185. package/dist/messages/en/save.js +14 -0
  186. package/dist/messages/en/shortcut.d.ts +36 -0
  187. package/dist/messages/en/shortcut.d.ts.map +1 -0
  188. package/dist/messages/en/shortcut.js +35 -0
  189. package/dist/messages/en/statusBar.d.ts +14 -0
  190. package/dist/messages/en/statusBar.d.ts.map +1 -0
  191. package/dist/messages/en/statusBar.js +13 -0
  192. package/dist/messages/en/structure.d.ts +28 -0
  193. package/dist/messages/en/structure.d.ts.map +1 -0
  194. package/dist/messages/en/structure.js +27 -0
  195. package/dist/messages/en/style.d.ts +168 -0
  196. package/dist/messages/en/style.d.ts.map +1 -0
  197. package/dist/messages/en/style.js +167 -0
  198. package/dist/messages/en/styleField.d.ts +301 -0
  199. package/dist/messages/en/styleField.d.ts.map +1 -0
  200. package/dist/messages/en/styleField.js +300 -0
  201. package/dist/messages/en/styleOption.d.ts +128 -0
  202. package/dist/messages/en/styleOption.d.ts.map +1 -0
  203. package/dist/messages/en/styleOption.js +127 -0
  204. package/dist/messages/en/styleSection.d.ts +16 -0
  205. package/dist/messages/en/styleSection.d.ts.map +1 -0
  206. package/dist/messages/en/styleSection.js +15 -0
  207. package/dist/messages/en/toast.d.ts +22 -0
  208. package/dist/messages/en/toast.d.ts.map +1 -0
  209. package/dist/messages/en/toast.js +21 -0
  210. package/dist/messages/en/toolbar.d.ts +47 -0
  211. package/dist/messages/en/toolbar.d.ts.map +1 -0
  212. package/dist/messages/en/toolbar.js +46 -0
  213. package/dist/messages/en/translation.d.ts +7 -0
  214. package/dist/messages/en/translation.d.ts.map +1 -0
  215. package/dist/messages/en/translation.js +6 -0
  216. package/dist/messages/en/ui.d.ts +4 -0
  217. package/dist/messages/en/ui.d.ts.map +1 -0
  218. package/dist/messages/en/ui.js +3 -0
  219. package/dist/messages/en/values.d.ts +45 -0
  220. package/dist/messages/en/values.d.ts.map +1 -0
  221. package/dist/messages/en/values.js +44 -0
  222. package/dist/messages/en.d.ts +1298 -202
  223. package/dist/messages/en.d.ts.map +1 -1
  224. package/dist/messages/en.js +82 -330
  225. package/dist/messages/index.d.ts +12 -0
  226. package/dist/messages/index.d.ts.map +1 -1
  227. package/dist/messages/index.js +28 -1
  228. package/dist/messages/pl/app.d.ts +8 -0
  229. package/dist/messages/pl/app.d.ts.map +1 -0
  230. package/dist/messages/pl/app.js +7 -0
  231. package/dist/messages/pl/blocks.d.ts +54 -0
  232. package/dist/messages/pl/blocks.d.ts.map +1 -0
  233. package/dist/messages/pl/blocks.js +53 -0
  234. package/dist/messages/pl/canvas.d.ts +31 -0
  235. package/dist/messages/pl/canvas.d.ts.map +1 -0
  236. package/dist/messages/pl/canvas.js +30 -0
  237. package/dist/messages/pl/clipboard.d.ts +13 -0
  238. package/dist/messages/pl/clipboard.d.ts.map +1 -0
  239. package/dist/messages/pl/clipboard.js +12 -0
  240. package/dist/messages/pl/colorPicker.d.ts +20 -0
  241. package/dist/messages/pl/colorPicker.d.ts.map +1 -0
  242. package/dist/messages/pl/colorPicker.js +19 -0
  243. package/dist/messages/pl/componentLabels.d.ts +9 -0
  244. package/dist/messages/pl/componentLabels.d.ts.map +1 -0
  245. package/dist/messages/pl/componentLabels.js +308 -0
  246. package/dist/messages/pl/diagnostics.d.ts +39 -0
  247. package/dist/messages/pl/diagnostics.d.ts.map +1 -0
  248. package/dist/messages/pl/diagnostics.js +38 -0
  249. package/dist/messages/pl/dialogs/common.d.ts +6 -0
  250. package/dist/messages/pl/dialogs/common.d.ts.map +1 -0
  251. package/dist/messages/pl/dialogs/common.js +5 -0
  252. package/dist/messages/pl/dialogs/conflict.d.ts +15 -0
  253. package/dist/messages/pl/dialogs/conflict.d.ts.map +1 -0
  254. package/dist/messages/pl/dialogs/conflict.js +14 -0
  255. package/dist/messages/pl/dialogs/delete.d.ts +19 -0
  256. package/dist/messages/pl/dialogs/delete.d.ts.map +1 -0
  257. package/dist/messages/pl/dialogs/delete.js +18 -0
  258. package/dist/messages/pl/dialogs/pageOptions.d.ts +9 -0
  259. package/dist/messages/pl/dialogs/pageOptions.d.ts.map +1 -0
  260. package/dist/messages/pl/dialogs/pageOptions.js +8 -0
  261. package/dist/messages/pl/dialogs/publish.d.ts +15 -0
  262. package/dist/messages/pl/dialogs/publish.d.ts.map +1 -0
  263. package/dist/messages/pl/dialogs/publish.js +14 -0
  264. package/dist/messages/pl/dnd.d.ts +19 -0
  265. package/dist/messages/pl/dnd.d.ts.map +1 -0
  266. package/dist/messages/pl/dnd.js +18 -0
  267. package/dist/messages/pl/editor.d.ts +30 -0
  268. package/dist/messages/pl/editor.d.ts.map +1 -0
  269. package/dist/messages/pl/editor.js +29 -0
  270. package/dist/messages/pl/external.d.ts +6 -0
  271. package/dist/messages/pl/external.d.ts.map +1 -0
  272. package/dist/messages/pl/external.js +5 -0
  273. package/dist/messages/pl/insert.d.ts +25 -0
  274. package/dist/messages/pl/insert.d.ts.map +1 -0
  275. package/dist/messages/pl/insert.js +24 -0
  276. package/dist/messages/pl/inspector.d.ts +176 -0
  277. package/dist/messages/pl/inspector.d.ts.map +1 -0
  278. package/dist/messages/pl/inspector.js +175 -0
  279. package/dist/messages/pl/issues.d.ts +36 -0
  280. package/dist/messages/pl/issues.d.ts.map +1 -0
  281. package/dist/messages/pl/issues.js +35 -0
  282. package/dist/messages/pl/layers.d.ts +29 -0
  283. package/dist/messages/pl/layers.d.ts.map +1 -0
  284. package/dist/messages/pl/layers.js +28 -0
  285. package/dist/messages/pl/leftPanel.d.ts +15 -0
  286. package/dist/messages/pl/leftPanel.d.ts.map +1 -0
  287. package/dist/messages/pl/leftPanel.js +14 -0
  288. package/dist/messages/pl/list.d.ts +9 -0
  289. package/dist/messages/pl/list.d.ts.map +1 -0
  290. package/dist/messages/pl/list.js +8 -0
  291. package/dist/messages/pl/locale.d.ts +4 -0
  292. package/dist/messages/pl/locale.d.ts.map +1 -0
  293. package/dist/messages/pl/locale.js +3 -0
  294. package/dist/messages/pl/media.d.ts +51 -0
  295. package/dist/messages/pl/media.d.ts.map +1 -0
  296. package/dist/messages/pl/media.js +50 -0
  297. package/dist/messages/pl/menu.d.ts +12 -0
  298. package/dist/messages/pl/menu.d.ts.map +1 -0
  299. package/dist/messages/pl/menu.js +11 -0
  300. package/dist/messages/pl/patterns.d.ts +24 -0
  301. package/dist/messages/pl/patterns.d.ts.map +1 -0
  302. package/dist/messages/pl/patterns.js +23 -0
  303. package/dist/messages/pl/preview.d.ts +8 -0
  304. package/dist/messages/pl/preview.d.ts.map +1 -0
  305. package/dist/messages/pl/preview.js +7 -0
  306. package/dist/messages/pl/publish.d.ts +19 -0
  307. package/dist/messages/pl/publish.d.ts.map +1 -0
  308. package/dist/messages/pl/publish.js +18 -0
  309. package/dist/messages/pl/richText.d.ts +21 -0
  310. package/dist/messages/pl/richText.d.ts.map +1 -0
  311. package/dist/messages/pl/richText.js +20 -0
  312. package/dist/messages/pl/sample.d.ts +5 -0
  313. package/dist/messages/pl/sample.d.ts.map +1 -0
  314. package/dist/messages/pl/sample.js +4 -0
  315. package/dist/messages/pl/save.d.ts +15 -0
  316. package/dist/messages/pl/save.d.ts.map +1 -0
  317. package/dist/messages/pl/save.js +14 -0
  318. package/dist/messages/pl/shortcut.d.ts +36 -0
  319. package/dist/messages/pl/shortcut.d.ts.map +1 -0
  320. package/dist/messages/pl/shortcut.js +35 -0
  321. package/dist/messages/pl/statusBar.d.ts +14 -0
  322. package/dist/messages/pl/statusBar.d.ts.map +1 -0
  323. package/dist/messages/pl/statusBar.js +13 -0
  324. package/dist/messages/pl/structure.d.ts +28 -0
  325. package/dist/messages/pl/structure.d.ts.map +1 -0
  326. package/dist/messages/pl/structure.js +27 -0
  327. package/dist/messages/pl/style.d.ts +168 -0
  328. package/dist/messages/pl/style.d.ts.map +1 -0
  329. package/dist/messages/pl/style.js +167 -0
  330. package/dist/messages/pl/styleField.d.ts +301 -0
  331. package/dist/messages/pl/styleField.d.ts.map +1 -0
  332. package/dist/messages/pl/styleField.js +300 -0
  333. package/dist/messages/pl/styleOption.d.ts +128 -0
  334. package/dist/messages/pl/styleOption.d.ts.map +1 -0
  335. package/dist/messages/pl/styleOption.js +127 -0
  336. package/dist/messages/pl/styleSection.d.ts +16 -0
  337. package/dist/messages/pl/styleSection.d.ts.map +1 -0
  338. package/dist/messages/pl/styleSection.js +15 -0
  339. package/dist/messages/pl/toast.d.ts +22 -0
  340. package/dist/messages/pl/toast.d.ts.map +1 -0
  341. package/dist/messages/pl/toast.js +21 -0
  342. package/dist/messages/pl/toolbar.d.ts +47 -0
  343. package/dist/messages/pl/toolbar.d.ts.map +1 -0
  344. package/dist/messages/pl/toolbar.js +46 -0
  345. package/dist/messages/pl/translation.d.ts +7 -0
  346. package/dist/messages/pl/translation.d.ts.map +1 -0
  347. package/dist/messages/pl/translation.js +6 -0
  348. package/dist/messages/pl/ui.d.ts +4 -0
  349. package/dist/messages/pl/ui.d.ts.map +1 -0
  350. package/dist/messages/pl/ui.js +3 -0
  351. package/dist/messages/pl/values.d.ts +45 -0
  352. package/dist/messages/pl/values.d.ts.map +1 -0
  353. package/dist/messages/pl/values.js +44 -0
  354. package/dist/messages/pl.d.ts.map +1 -1
  355. package/dist/messages/pl.js +82 -325
  356. package/dist/messages/plural.test.d.ts +2 -0
  357. package/dist/messages/plural.test.d.ts.map +1 -0
  358. package/dist/messages/plural.test.js +50 -0
  359. package/dist/panels/breadcrumbs/breadcrumbs.d.ts +1 -1
  360. package/dist/panels/breadcrumbs/breadcrumbs.d.ts.map +1 -1
  361. package/dist/panels/breadcrumbs/breadcrumbs.js +10 -3
  362. package/dist/panels/breadcrumbs/breadcrumbs.test.js +9 -2
  363. package/dist/panels/index.d.ts +3 -0
  364. package/dist/panels/index.d.ts.map +1 -1
  365. package/dist/panels/index.js +1 -0
  366. package/dist/panels/insert/catalog.d.ts +21 -1
  367. package/dist/panels/insert/catalog.d.ts.map +1 -1
  368. package/dist/panels/insert/catalog.js +85 -3
  369. package/dist/panels/insert/catalog.order.test.js +106 -1
  370. package/dist/panels/insert/index.d.ts +1 -0
  371. package/dist/panels/insert/index.d.ts.map +1 -1
  372. package/dist/panels/insert/insert-panel.d.ts +14 -4
  373. package/dist/panels/insert/insert-panel.d.ts.map +1 -1
  374. package/dist/panels/insert/insert-panel.js +128 -69
  375. package/dist/panels/insert/insert-panel.test.js +278 -37
  376. package/dist/panels/insert/target.d.ts +5 -1
  377. package/dist/panels/insert/target.d.ts.map +1 -1
  378. package/dist/panels/insert/target.js +11 -1
  379. package/dist/panels/inspector/author-fields.d.ts +21 -0
  380. package/dist/panels/inspector/author-fields.d.ts.map +1 -0
  381. package/dist/panels/inspector/author-fields.js +191 -0
  382. package/dist/panels/inspector/author-fields.test.d.ts +2 -0
  383. package/dist/panels/inspector/author-fields.test.d.ts.map +1 -0
  384. package/dist/panels/inspector/author-fields.test.js +237 -0
  385. package/dist/panels/inspector/controls/external-link.d.ts +24 -0
  386. package/dist/panels/inspector/controls/external-link.d.ts.map +1 -0
  387. package/dist/panels/inspector/controls/external-link.js +43 -0
  388. package/dist/panels/inspector/controls/external-link.test.d.ts +2 -0
  389. package/dist/panels/inspector/controls/external-link.test.d.ts.map +1 -0
  390. package/dist/panels/inspector/controls/external-link.test.js +105 -0
  391. package/dist/panels/inspector/controls/index.d.ts +1 -0
  392. package/dist/panels/inspector/controls/index.d.ts.map +1 -1
  393. package/dist/panels/inspector/controls/index.js +1 -0
  394. package/dist/panels/inspector/controls/media.d.ts +3 -1
  395. package/dist/panels/inspector/controls/media.d.ts.map +1 -1
  396. package/dist/panels/inspector/controls/media.js +8 -3
  397. package/dist/panels/inspector/controls/rich-text.d.ts.map +1 -1
  398. package/dist/panels/inspector/controls/rich-text.js +36 -6
  399. package/dist/panels/inspector/controls/textarea.d.ts +7 -2
  400. package/dist/panels/inspector/controls/textarea.d.ts.map +1 -1
  401. package/dist/panels/inspector/controls/textarea.js +37 -2
  402. package/dist/panels/inspector/default-hint.d.ts +13 -0
  403. package/dist/panels/inspector/default-hint.d.ts.map +1 -0
  404. package/dist/panels/inspector/default-hint.js +30 -0
  405. package/dist/panels/inspector/default-hint.test.d.ts +2 -0
  406. package/dist/panels/inspector/default-hint.test.d.ts.map +1 -0
  407. package/dist/panels/inspector/default-hint.test.js +46 -0
  408. package/dist/panels/inspector/index.d.ts +3 -3
  409. package/dist/panels/inspector/index.d.ts.map +1 -1
  410. package/dist/panels/inspector/index.js +2 -2
  411. package/dist/panels/inspector/inspector.d.ts +20 -2
  412. package/dist/panels/inspector/inspector.d.ts.map +1 -1
  413. package/dist/panels/inspector/inspector.js +246 -26
  414. package/dist/panels/inspector/inspector.test.js +276 -11
  415. package/dist/panels/inspector/props-panel.d.ts +36 -0
  416. package/dist/panels/inspector/props-panel.d.ts.map +1 -1
  417. package/dist/panels/inspector/props-panel.js +99 -17
  418. package/dist/panels/inspector/props-panel.test.d.ts +2 -0
  419. package/dist/panels/inspector/props-panel.test.d.ts.map +1 -0
  420. package/dist/panels/inspector/props-panel.test.js +17 -0
  421. package/dist/panels/inspector/scrub-label.d.ts +14 -0
  422. package/dist/panels/inspector/scrub-label.d.ts.map +1 -0
  423. package/dist/panels/inspector/scrub-label.js +75 -0
  424. package/dist/panels/inspector/scrub-label.test.d.ts +2 -0
  425. package/dist/panels/inspector/scrub-label.test.d.ts.map +1 -0
  426. package/dist/panels/inspector/scrub-label.test.js +132 -0
  427. package/dist/panels/inspector/styles/background-media.d.ts +28 -0
  428. package/dist/panels/inspector/styles/background-media.d.ts.map +1 -0
  429. package/dist/panels/inspector/styles/background-media.js +78 -0
  430. package/dist/panels/inspector/styles/box-model.d.ts +13 -16
  431. package/dist/panels/inspector/styles/box-model.d.ts.map +1 -1
  432. package/dist/panels/inspector/styles/box-model.js +10 -25
  433. package/dist/panels/inspector/styles/color-input.d.ts +3 -0
  434. package/dist/panels/inspector/styles/color-input.d.ts.map +1 -0
  435. package/dist/panels/inspector/styles/color-input.js +72 -0
  436. package/dist/panels/inspector/styles/gradient-fields.d.ts +9 -0
  437. package/dist/panels/inspector/styles/gradient-fields.d.ts.map +1 -0
  438. package/dist/panels/inspector/styles/gradient-fields.js +50 -0
  439. package/dist/panels/inspector/styles/index.d.ts +2 -0
  440. package/dist/panels/inspector/styles/index.d.ts.map +1 -1
  441. package/dist/panels/inspector/styles/index.js +2 -0
  442. package/dist/panels/inspector/styles/model.d.ts +27 -5
  443. package/dist/panels/inspector/styles/model.d.ts.map +1 -1
  444. package/dist/panels/inspector/styles/model.js +101 -3
  445. package/dist/panels/inspector/styles/motion-rows.d.ts +17 -0
  446. package/dist/panels/inspector/styles/motion-rows.d.ts.map +1 -0
  447. package/dist/panels/inspector/styles/motion-rows.js +117 -0
  448. package/dist/panels/inspector/styles/number-input.d.ts +4 -0
  449. package/dist/panels/inspector/styles/number-input.d.ts.map +1 -0
  450. package/dist/panels/inspector/styles/number-input.js +12 -0
  451. package/dist/panels/inspector/styles/option-label.d.ts +7 -0
  452. package/dist/panels/inspector/styles/option-label.d.ts.map +1 -0
  453. package/dist/panels/inspector/styles/option-label.js +9 -0
  454. package/dist/panels/inspector/styles/property-label.d.ts +9 -0
  455. package/dist/panels/inspector/styles/property-label.d.ts.map +1 -0
  456. package/dist/panels/inspector/styles/property-label.js +11 -0
  457. package/dist/panels/inspector/styles/section-state.d.ts +22 -0
  458. package/dist/panels/inspector/styles/section-state.d.ts.map +1 -0
  459. package/dist/panels/inspector/styles/section-state.js +96 -0
  460. package/dist/panels/inspector/styles/section.d.ts +25 -0
  461. package/dist/panels/inspector/styles/section.d.ts.map +1 -0
  462. package/dist/panels/inspector/styles/section.js +43 -0
  463. package/dist/panels/inspector/styles/sections-context.d.ts +13 -0
  464. package/dist/panels/inspector/styles/sections-context.d.ts.map +1 -0
  465. package/dist/panels/inspector/styles/sections-context.js +19 -0
  466. package/dist/panels/inspector/styles/sections-context.test.d.ts +2 -0
  467. package/dist/panels/inspector/styles/sections-context.test.d.ts.map +1 -0
  468. package/dist/panels/inspector/styles/sections-context.test.js +18 -0
  469. package/dist/panels/inspector/styles/sections-toggle.d.ts +6 -0
  470. package/dist/panels/inspector/styles/sections-toggle.d.ts.map +1 -0
  471. package/dist/panels/inspector/styles/sections-toggle.js +18 -0
  472. package/dist/panels/inspector/styles/segments.d.ts +3 -0
  473. package/dist/panels/inspector/styles/segments.d.ts.map +1 -1
  474. package/dist/panels/inspector/styles/segments.js +11 -4
  475. package/dist/panels/inspector/styles/sides-editor.d.ts +1 -1
  476. package/dist/panels/inspector/styles/sides-editor.d.ts.map +1 -1
  477. package/dist/panels/inspector/styles/sides-editor.js +33 -4
  478. package/dist/panels/inspector/styles/style-inspector.d.ts +3 -1
  479. package/dist/panels/inspector/styles/style-inspector.d.ts.map +1 -1
  480. package/dist/panels/inspector/styles/style-inspector.js +610 -42
  481. package/dist/panels/inspector/styles/style-inspector.test.js +694 -14
  482. package/dist/panels/inspector/styles/token-picker.d.ts +1 -1
  483. package/dist/panels/inspector/styles/token-picker.d.ts.map +1 -1
  484. package/dist/panels/inspector/styles/token-picker.js +10 -3
  485. package/dist/panels/inspector/styles/widgets.d.ts +116 -0
  486. package/dist/panels/inspector/styles/widgets.d.ts.map +1 -0
  487. package/dist/panels/inspector/styles/widgets.js +304 -0
  488. package/dist/panels/inspector/styles/widgets.test.d.ts +2 -0
  489. package/dist/panels/inspector/styles/widgets.test.d.ts.map +1 -0
  490. package/dist/panels/inspector/styles/widgets.test.js +247 -0
  491. package/dist/panels/inspector/values/value-editor.d.ts +1 -1
  492. package/dist/panels/inspector/values/value-editor.d.ts.map +1 -1
  493. package/dist/panels/inspector/values/value-editor.js +9 -8
  494. package/dist/panels/inspector/values/values.test.js +9 -3
  495. package/dist/panels/issues/collect.d.ts +2 -0
  496. package/dist/panels/issues/collect.d.ts.map +1 -1
  497. package/dist/panels/issues/collect.js +1 -0
  498. package/dist/panels/issues/index.d.ts +1 -0
  499. package/dist/panels/issues/index.d.ts.map +1 -1
  500. package/dist/panels/issues/index.js +1 -0
  501. package/dist/panels/issues/issues-panel.d.ts +4 -3
  502. package/dist/panels/issues/issues-panel.d.ts.map +1 -1
  503. package/dist/panels/issues/issues-panel.js +22 -35
  504. package/dist/panels/issues/path.d.ts +7 -0
  505. package/dist/panels/issues/path.d.ts.map +1 -0
  506. package/dist/panels/issues/path.js +21 -0
  507. package/dist/panels/layers/flatten.d.ts +16 -2
  508. package/dist/panels/layers/flatten.d.ts.map +1 -1
  509. package/dist/panels/layers/flatten.js +48 -4
  510. package/dist/panels/layers/layers-panel.d.ts +5 -2
  511. package/dist/panels/layers/layers-panel.d.ts.map +1 -1
  512. package/dist/panels/layers/layers-panel.js +177 -35
  513. package/dist/panels/layers/layers-panel.test.js +173 -15
  514. package/dist/panels/left-panel.d.ts +17 -0
  515. package/dist/panels/left-panel.d.ts.map +1 -0
  516. package/dist/panels/left-panel.js +47 -0
  517. package/dist/panels/left-panel.test.d.ts +2 -0
  518. package/dist/panels/left-panel.test.d.ts.map +1 -0
  519. package/dist/panels/left-panel.test.js +77 -0
  520. package/dist/persistence/persistence.test.js +9 -3
  521. package/dist/persistence/react.d.ts.map +1 -1
  522. package/dist/persistence/react.js +2 -2
  523. package/dist/preview/preview.d.ts +8 -0
  524. package/dist/preview/preview.d.ts.map +1 -1
  525. package/dist/preview/preview.js +21 -1
  526. package/dist/preview/preview.test.js +18 -1
  527. package/dist/shortcuts/actions.d.ts +13 -2
  528. package/dist/shortcuts/actions.d.ts.map +1 -1
  529. package/dist/shortcuts/actions.js +70 -15
  530. package/dist/shortcuts/help.d.ts +11 -0
  531. package/dist/shortcuts/help.d.ts.map +1 -0
  532. package/dist/shortcuts/help.js +77 -0
  533. package/dist/shortcuts/index.d.ts +5 -2
  534. package/dist/shortcuts/index.d.ts.map +1 -1
  535. package/dist/shortcuts/index.js +3 -1
  536. package/dist/shortcuts/map.d.ts +1 -1
  537. package/dist/shortcuts/map.d.ts.map +1 -1
  538. package/dist/shortcuts/map.js +14 -8
  539. package/dist/shortcuts/navigation.d.ts +13 -0
  540. package/dist/shortcuts/navigation.d.ts.map +1 -0
  541. package/dist/shortcuts/navigation.js +48 -0
  542. package/dist/shortcuts/shortcuts.d.ts +12 -1
  543. package/dist/shortcuts/shortcuts.d.ts.map +1 -1
  544. package/dist/shortcuts/shortcuts.js +61 -14
  545. package/dist/shortcuts/shortcuts.test.js +206 -5
  546. package/dist/store/create-store.d.ts.map +1 -1
  547. package/dist/store/create-store.js +19 -1
  548. package/dist/store/index.d.ts +4 -1
  549. package/dist/store/index.d.ts.map +1 -1
  550. package/dist/store/index.js +3 -1
  551. package/dist/store/react.d.ts +4 -0
  552. package/dist/store/react.d.ts.map +1 -1
  553. package/dist/store/react.js +7 -0
  554. package/dist/store/store.test.js +24 -0
  555. package/dist/store/structure-lock.d.ts +16 -0
  556. package/dist/store/structure-lock.d.ts.map +1 -0
  557. package/dist/store/structure-lock.js +43 -0
  558. package/dist/store/structure-lock.test.d.ts +2 -0
  559. package/dist/store/structure-lock.test.d.ts.map +1 -0
  560. package/dist/store/structure-lock.test.js +49 -0
  561. package/dist/store/types.d.ts +9 -0
  562. package/dist/store/types.d.ts.map +1 -1
  563. package/dist/store/view.d.ts +20 -0
  564. package/dist/store/view.d.ts.map +1 -0
  565. package/dist/store/view.js +17 -0
  566. package/dist/store/view.test.d.ts +2 -0
  567. package/dist/store/view.test.d.ts.map +1 -0
  568. package/dist/store/view.test.js +103 -0
  569. package/dist/styles/tokens.test.js +88 -9
  570. package/dist/styles.css +4112 -586
  571. package/dist/toolbar/brand.d.ts +2 -2
  572. package/dist/toolbar/brand.d.ts.map +1 -1
  573. package/dist/toolbar/brand.js +4 -4
  574. package/dist/toolbar/breakpoint-control.d.ts +4 -0
  575. package/dist/toolbar/breakpoint-control.d.ts.map +1 -1
  576. package/dist/toolbar/breakpoint-control.js +11 -4
  577. package/dist/toolbar/editable-title.d.ts +4 -1
  578. package/dist/toolbar/editable-title.d.ts.map +1 -1
  579. package/dist/toolbar/editable-title.js +2 -2
  580. package/dist/toolbar/editable-title.test.js +10 -0
  581. package/dist/toolbar/locale-chip.d.ts +10 -0
  582. package/dist/toolbar/locale-chip.d.ts.map +1 -0
  583. package/dist/toolbar/locale-chip.js +27 -0
  584. package/dist/toolbar/locale-switcher.d.ts.map +1 -1
  585. package/dist/toolbar/locale-switcher.js +4 -1
  586. package/dist/toolbar/more-menu.d.ts +26 -4
  587. package/dist/toolbar/more-menu.d.ts.map +1 -1
  588. package/dist/toolbar/more-menu.js +60 -13
  589. package/dist/toolbar/page-chip.d.ts +10 -0
  590. package/dist/toolbar/page-chip.d.ts.map +1 -0
  591. package/dist/toolbar/page-chip.js +12 -0
  592. package/dist/toolbar/page-options-dialog.d.ts +16 -0
  593. package/dist/toolbar/page-options-dialog.d.ts.map +1 -0
  594. package/dist/toolbar/page-options-dialog.js +13 -0
  595. package/dist/toolbar/panel-toggles.d.ts +3 -2
  596. package/dist/toolbar/panel-toggles.d.ts.map +1 -1
  597. package/dist/toolbar/panel-toggles.js +9 -4
  598. package/dist/toolbar/publish-dialog.d.ts +3 -0
  599. package/dist/toolbar/publish-dialog.d.ts.map +1 -1
  600. package/dist/toolbar/publish-dialog.js +34 -7
  601. package/dist/toolbar/publish.test.js +63 -19
  602. package/dist/toolbar/safe-history.d.ts +3 -0
  603. package/dist/toolbar/safe-history.d.ts.map +1 -0
  604. package/dist/toolbar/safe-history.js +5 -0
  605. package/dist/toolbar/sample-picker.d.ts +24 -4
  606. package/dist/toolbar/sample-picker.d.ts.map +1 -1
  607. package/dist/toolbar/sample-picker.js +42 -18
  608. package/dist/toolbar/toolbar-centre.d.ts +3 -11
  609. package/dist/toolbar/toolbar-centre.d.ts.map +1 -1
  610. package/dist/toolbar/toolbar-centre.js +4 -5
  611. package/dist/toolbar/toolbar-left.d.ts +4 -7
  612. package/dist/toolbar/toolbar-left.d.ts.map +1 -1
  613. package/dist/toolbar/toolbar-left.js +13 -11
  614. package/dist/toolbar/toolbar-right.d.ts +21 -6
  615. package/dist/toolbar/toolbar-right.d.ts.map +1 -1
  616. package/dist/toolbar/toolbar-right.js +28 -14
  617. package/dist/toolbar/toolbar.d.ts +23 -17
  618. package/dist/toolbar/toolbar.d.ts.map +1 -1
  619. package/dist/toolbar/toolbar.js +28 -11
  620. package/dist/toolbar/toolbar.test.js +238 -23
  621. package/dist/toolbar/use-overflow-level.d.ts +2 -1
  622. package/dist/toolbar/use-overflow-level.d.ts.map +1 -1
  623. package/dist/toolbar/use-overflow-level.js +9 -3
  624. package/dist/toolbar/zoom-menu.d.ts +5 -1
  625. package/dist/toolbar/zoom-menu.d.ts.map +1 -1
  626. package/dist/toolbar/zoom-menu.js +3 -2
  627. package/dist/ui/icon.d.ts +53 -0
  628. package/dist/ui/icon.d.ts.map +1 -1
  629. package/dist/ui/icon.js +58 -1
  630. package/dist/ui/icon.test.js +101 -3
  631. package/dist/ui/index.d.ts +4 -3
  632. package/dist/ui/index.d.ts.map +1 -1
  633. package/dist/ui/index.js +3 -2
  634. package/dist/ui/primitives.d.ts +97 -14
  635. package/dist/ui/primitives.d.ts.map +1 -1
  636. package/dist/ui/primitives.js +108 -22
  637. package/dist/ui/primitives.test.js +204 -3
  638. package/dist/ui/structure-locked.d.ts +9 -0
  639. package/dist/ui/structure-locked.d.ts.map +1 -0
  640. package/dist/ui/structure-locked.js +28 -0
  641. package/dist/ui/toast.d.ts +3 -1
  642. package/dist/ui/toast.d.ts.map +1 -1
  643. package/dist/ui/toast.js +21 -5
  644. package/dist/ui/toast.test.js +34 -0
  645. package/package.json +5 -4
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { act } from 'react';
3
3
  import { createRoot } from 'react-dom/client';
4
4
  import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
@@ -11,6 +11,8 @@ import { PanelToggle } from '../toolbar/panel-toggles.js';
11
11
  import { BuilderEditor } from './builder-editor.js';
12
12
  import { resolveConfig } from './config.js';
13
13
  import { EditorLayout } from './layout.js';
14
+ import { useShellPanels } from './shell-panels.js';
15
+ import { useStageSlots } from './stage-slots.js';
14
16
  expect.extend(matchers);
15
17
  globalThis.IS_REACT_ACT_ENVIRONMENT = true;
16
18
  const manifest = {
@@ -51,7 +53,8 @@ describe('BuilderEditor shell', () => {
51
53
  expect($('main').getAttribute('aria-label')).toBe(en['editor.canvas']);
52
54
  const asides = [...container.querySelectorAll('aside')].map((el) => el.getAttribute('aria-label'));
53
55
  expect(asides).toEqual([en['editor.leftPanel'], en['editor.inspector']]);
54
- expect($('section').getAttribute('aria-label')).toBe(en['editor.issues']);
56
+ expect($('main section').getAttribute('aria-label')).toBe(en['issues.drawer']);
57
+ expect($('.bd-status').getAttribute('aria-label')).toBe(en['statusBar.label']);
55
58
  });
56
59
  it('speaks the configured interface language, and English for one it does not know', async () => {
57
60
  await show(props({ config: { uiLocale: 'pl' } }));
@@ -62,6 +65,9 @@ describe('BuilderEditor shell', () => {
62
65
  });
63
66
  it('has a Polish translation for every English string', () => {
64
67
  expect(Object.keys(pl).sort()).toEqual(Object.keys(en).sort());
68
+ for (const value of Object.values(pl)) {
69
+ expect(value).not.toMatch(/\p{L}\?+\p{L}|\?+\p{L}|\p{L}\?{2,}/u);
70
+ }
65
71
  for (const k of Object.keys(en))
66
72
  expect(pl[k]).not.toBe('');
67
73
  expect(UI_LOCALES).toEqual(['en', 'pl']);
@@ -103,14 +109,18 @@ describe('BuilderEditor shell', () => {
103
109
  await pointer('pointerup', 900);
104
110
  expect(left?.getAttribute('data-dragging')).toBe('false');
105
111
  });
106
- it('shows and hides the issues panel', async () => {
112
+ it('shows and hides the issues drawer, which sits inside the stage', async () => {
107
113
  await show(props());
108
- const toggle = container.querySelector('.bd-issues button');
109
- expect(toggle?.textContent).toBe(en['editor.issues.show']);
114
+ const toggle = container.querySelector('.bd-status button[aria-expanded]');
110
115
  expect(toggle?.getAttribute('aria-expanded')).toBe('false');
116
+ expect($('main .bd-issues').getAttribute('data-open')).toBe('false');
117
+ expect(container.querySelector('.bd-status .bd-issues')).toBeNull();
118
+ await act(async () => toggle?.click());
119
+ expect(toggle?.getAttribute('aria-expanded')).toBe('true');
120
+ expect($('main .bd-issues').getAttribute('data-open')).toBe('true');
121
+ expect(toggle?.getAttribute('aria-controls')).toBe($('main .bd-issues').id);
111
122
  await act(async () => toggle?.click());
112
- expect(toggle?.textContent).toBe(en['editor.issues.hide']);
113
- expect($('.bd-issues').getAttribute('data-open')).toBe('true');
123
+ expect($('main .bd-issues').getAttribute('data-open')).toBe('false');
114
124
  });
115
125
  it('resets a panel on double-click and remembers the widths', async () => {
116
126
  await show(props());
@@ -142,21 +152,143 @@ describe('BuilderEditor shell', () => {
142
152
  getItem.mockRestore();
143
153
  setItem.mockRestore();
144
154
  });
145
- it('shows the issue counts on the status bar toggle', async () => {
146
- await act(async () => root.render(_jsx(MessagesProvider, { locale: "en", children: _jsx(EditorLayout, { issueCounts: { error: 2, warning: 3 }, status: _jsx("span", { children: "info" }) }) })));
147
- const toggle = container.querySelector('.bd-issues button');
148
- expect(toggle?.querySelector('[data-severity=error]')?.textContent).toBe('2');
149
- expect(toggle?.querySelector('[data-severity=warning]')?.textContent).toBe('3');
150
- expect(toggle?.textContent).toContain(en['editor.issues.show']);
151
- expect($('.bd-issues-bar').textContent).toContain('info');
152
- await act(async () => toggle?.click());
153
- expect($('.bd-issues').getAttribute('data-open')).toBe('true');
155
+ const renderLayout = (locale, node) => act(async () => root.render(_jsx(MessagesProvider, { locale: locale, children: node })));
156
+ it('words the issue counts with plural forms, in English', async () => {
157
+ await renderLayout('en', _jsx(EditorLayout, { issueCounts: { error: 1, warning: 3 }, status: _jsx("span", { children: "info" }) }));
158
+ const toggle = $('.bd-status button[aria-expanded]');
159
+ expect(toggle.querySelector('[data-severity=error]')?.textContent).toBe('1 error');
160
+ expect(toggle.querySelector('[data-severity=warning]')?.textContent).toBe('3 warnings');
161
+ expect($('.bd-status').textContent).toContain('info');
162
+ await renderLayout('en', _jsx(EditorLayout, { issueCounts: { error: 0, warning: 0 } }));
163
+ expect($('.bd-status button[aria-expanded]').textContent).toBe(en['statusBar.noIssues']);
164
+ });
165
+ it('counts notes in the status bar and reports no issues only when all three are zero', async () => {
166
+ await renderLayout('en', _jsx(EditorLayout, { issueCounts: { error: 0, warning: 0, info: 2 } }));
167
+ const toggle = $('.bd-status button[aria-expanded]');
168
+ expect(toggle.querySelector('[data-severity=info]')?.textContent).toBe('2 notes');
169
+ expect(toggle.textContent).not.toContain(en['statusBar.noIssues']);
170
+ await renderLayout('en', _jsx(EditorLayout, { issueCounts: { error: 0, warning: 0, info: 0 } }));
171
+ expect($('.bd-status button[aria-expanded]').textContent).toBe(en['statusBar.noIssues']);
172
+ await renderLayout('pl', _jsx(EditorLayout, { issueCounts: { error: 0, warning: 0, info: 5 } }));
173
+ expect($('.bd-status [data-severity=info]').textContent).toBe('5 uwag');
174
+ });
175
+ it('words the issue counts with plural forms, in Polish', async () => {
176
+ const text = async (warning) => {
177
+ await renderLayout('pl', _jsx(EditorLayout, { issueCounts: { error: 0, warning } }));
178
+ return $('.bd-status button[aria-expanded]').textContent;
179
+ };
180
+ expect(await text(1)).toBe('1 ostrzeżenie');
181
+ expect(await text(2)).toBe('2 ostrzeżenia');
182
+ expect(await text(5)).toBe('5 ostrzeżeń');
183
+ });
184
+ it('shows the selection path on the left of the status bar', async () => {
185
+ await renderLayout('en', _jsx(EditorLayout, { breadcrumbs: _jsx("nav", { children: "path" }) }));
186
+ expect($('.bd-status .bd-status-crumbs nav').textContent).toBe('path');
187
+ });
188
+ describe('collapsing the panels', () => {
189
+ let panels;
190
+ const Probe = () => {
191
+ panels = useShellPanels();
192
+ return null;
193
+ };
194
+ const layout = () => (_jsx(EditorLayout, { toolbar: _jsx(Probe, {}), left: _jsx("p", { id: "left-content", children: "left" }), right: _jsx("p", { id: "right-content", children: "right" }) }));
195
+ const KEY = 'buildr:editor:collapsed';
196
+ it('shrinks a collapsed panel to a rail, keeps its content mounted and remembers it', async () => {
197
+ await renderLayout('en', layout());
198
+ expect($('.bd-body').style.getPropertyValue('--bd-left')).toBe('280px');
199
+ expect(container.querySelector('.bd-rail')).toBeNull();
200
+ expect(panels?.leftTab).toBe('blocks');
201
+ await act(async () => panels?.toggleCollapsed?.('left'));
202
+ expect($('.bd-body').style.getPropertyValue('--bd-left')).toBe('var(--bd-rail)');
203
+ expect($('aside[data-side=left]').getAttribute('data-collapsed')).toBe('true');
204
+ expect($('aside[data-side=left] .bd-panel-content').hidden).toBe(true);
205
+ expect(container.querySelector('#left-content')).not.toBeNull();
206
+ expect(container.querySelectorAll('aside[data-side=left] .bd-rail button')).toHaveLength(2);
207
+ expect($('.bd-body').style.getPropertyValue('--bd-right')).toBe('320px');
208
+ expect(JSON.parse(window.localStorage.getItem(KEY) ?? '')).toEqual({
209
+ left: true,
210
+ right: false,
211
+ });
212
+ await act(async () => panels?.collapseAll?.());
213
+ expect(container.querySelectorAll('.bd-rail')).toHaveLength(2);
214
+ await act(async () => panels?.expandAll?.());
215
+ expect(container.querySelector('.bd-rail')).toBeNull();
216
+ });
217
+ it('opens a panel from its rail, on the chosen tab', async () => {
218
+ await renderLayout('en', layout());
219
+ await act(async () => panels?.collapseAll?.());
220
+ const structure = container.querySelectorAll('aside[data-side=left] .bd-rail button')[1];
221
+ expect(structure?.getAttribute('aria-label')).toBe(en['leftPanel.tab.structure']);
222
+ await act(async () => structure?.click());
223
+ expect(panels?.leftTab).toBe('structure');
224
+ expect(panels?.collapsed).toEqual({ left: false, right: true });
225
+ await act(async () => $('aside[data-side=right] .bd-rail button').click());
226
+ expect(panels?.collapsed).toEqual({ left: false, right: false });
227
+ });
228
+ it('moves focus into an expanded panel and back to the rail on collapse', async () => {
229
+ await renderLayout('en', _jsx(EditorLayout, { toolbar: _jsx(Probe, {}), left: _jsx("button", { type: "button", id: "left-first", children: "left" }), right: _jsx("button", { type: "button", id: "right-first", children: "right" }) }));
230
+ expect(document.activeElement).toBe(document.body);
231
+ await act(async () => panels?.collapseAll?.());
232
+ const rail = $('aside[data-side=right] .bd-rail button');
233
+ rail.focus();
234
+ await act(async () => rail.click());
235
+ expect(document.activeElement).toBe($('#right-first'));
236
+ await act(async () => panels?.toggleCollapsed?.('right'));
237
+ expect(document.activeElement).toBe($('aside[data-side=right] .bd-rail button'));
238
+ });
239
+ it('does not steal focus when restoring a stored collapse', async () => {
240
+ window.localStorage.setItem(KEY, JSON.stringify({ left: true, right: false }));
241
+ await renderLayout('en', layout());
242
+ expect(document.activeElement).toBe(document.body);
243
+ });
244
+ it('restores a stored collapse and ignores corrupt data', async () => {
245
+ window.localStorage.setItem(KEY, JSON.stringify({ left: true, right: 'yes' }));
246
+ await renderLayout('en', layout());
247
+ expect(panels?.collapsed).toEqual({ left: true, right: false });
248
+ for (const bad of ['{not json', 'null', '42', '"left"', '[true,true]']) {
249
+ window.localStorage.setItem(KEY, bad);
250
+ await act(async () => root.unmount());
251
+ root = createRoot(container);
252
+ await renderLayout('en', layout());
253
+ expect(panels?.collapsed).toEqual({ left: false, right: false });
254
+ }
255
+ });
256
+ it('works while the storage throws', async () => {
257
+ const getItem = vi.spyOn(Storage.prototype, 'getItem').mockImplementation(() => {
258
+ throw new Error('denied');
259
+ });
260
+ const setItem = vi.spyOn(Storage.prototype, 'setItem').mockImplementation(() => {
261
+ throw new Error('denied');
262
+ });
263
+ await renderLayout('en', layout());
264
+ await act(async () => panels?.toggleCollapsed?.('right'));
265
+ expect(panels?.collapsed).toEqual({ left: false, right: true });
266
+ getItem.mockRestore();
267
+ setItem.mockRestore();
268
+ });
269
+ it('provides the stage and the drawer state to the stage slots', async () => {
270
+ let slots;
271
+ const Slots = () => {
272
+ slots = useStageSlots();
273
+ return null;
274
+ };
275
+ await renderLayout('en', _jsx(EditorLayout, { center: _jsx(Slots, {}) }));
276
+ expect(slots?.stage).toBe($('main'));
277
+ expect(slots?.issuesOpen).toBe(false);
278
+ await act(async () => slots?.setIssuesOpen(true));
279
+ expect($('main .bd-issues').getAttribute('data-open')).toBe('true');
280
+ });
154
281
  });
155
282
  it('turns the panels into toolbar-toggled overlays when the editor is narrow', async () => {
156
283
  let notify;
284
+ const callbacks = [];
157
285
  class FakeObserver {
158
286
  constructor(callback) {
159
- notify = callback;
287
+ callbacks.push(callback);
288
+ notify = (entries) => {
289
+ for (const each of callbacks)
290
+ each(entries);
291
+ };
160
292
  }
161
293
  observe() { }
162
294
  disconnect() { }
@@ -165,7 +297,6 @@ describe('BuilderEditor shell', () => {
165
297
  const width = vi.spyOn(HTMLElement.prototype, 'clientWidth', 'get').mockReturnValue(1300);
166
298
  await act(async () => root.render(_jsx(MessagesProvider, { locale: "en", children: _jsx("div", { className: "buildr-editor", children: _jsx(EditorLayout, { toolbar: _jsx(PanelToggle, { side: "left" }) }) }) })));
167
299
  expect($('.bd-body').getAttribute('data-narrow')).toBe('false');
168
- expect(container.querySelector('.bd-toolbar button')).toBeNull();
169
300
  await act(async () => notify?.([{ contentRect: { width: 900 } }]));
170
301
  expect($('.bd-body').getAttribute('data-narrow')).toBe('true');
171
302
  const left = $('aside[data-side=left]');
@@ -182,6 +313,78 @@ describe('BuilderEditor shell', () => {
182
313
  width.mockRestore();
183
314
  vi.unstubAllGlobals();
184
315
  });
316
+ it('shows a scrim and closable sheets, opens one at a time and flags a phone-wide editor', async () => {
317
+ let notify;
318
+ const callbacks = [];
319
+ class FakeObserver {
320
+ constructor(callback) {
321
+ callbacks.push(callback);
322
+ notify = (entries) => {
323
+ for (const each of callbacks)
324
+ each(entries);
325
+ };
326
+ }
327
+ observe() { }
328
+ disconnect() { }
329
+ }
330
+ vi.stubGlobal('ResizeObserver', FakeObserver);
331
+ const width = vi.spyOn(HTMLElement.prototype, 'clientWidth', 'get').mockReturnValue(390);
332
+ const Toggles = () => (_jsxs(_Fragment, { children: [_jsx(PanelToggle, { side: "left" }), _jsx(PanelToggle, { side: "right" })] }));
333
+ await act(async () => root.render(_jsx(MessagesProvider, { locale: "en", children: _jsx("div", { className: "buildr-editor", children: _jsx(EditorLayout, { toolbar: _jsx(Toggles, {}), left: _jsx("p", { children: "left" }), right: _jsx("p", { children: "right" }) }) }) })));
334
+ // The page can never grow wider than the window: nothing in the shell has a width of its own.
335
+ expect(document.documentElement.scrollWidth).toBeLessThanOrEqual(window.innerWidth);
336
+ expect($('.bd-body').getAttribute('data-compact')).toBe('true');
337
+ expect($('.bd-toolbar').getAttribute('data-compact')).toBe('true');
338
+ expect($('.bd-status').getAttribute('data-compact')).toBe('true');
339
+ expect($('.bd-scrim')).toBeNull();
340
+ const [left, right] = [...document.querySelectorAll('.bd-toolbar button')];
341
+ left?.focus();
342
+ await act(async () => left?.click());
343
+ expect($('aside[data-side=left]').hidden).toBe(false);
344
+ expect($('.bd-scrim')).not.toBeNull();
345
+ // The open sheet is a non-modal dialog with a name; focus is inside it, the canvas and status bar are inert and the toolbar stays live.
346
+ const sheet = $('aside[data-side=left]');
347
+ expect(sheet.getAttribute('role')).toBe('dialog');
348
+ expect(sheet.hasAttribute('aria-modal')).toBe(false);
349
+ expect(sheet.getAttribute('aria-label')).toBe(en['editor.leftPanel']);
350
+ expect(sheet.contains(document.activeElement)).toBe(true);
351
+ expect($('.bd-toolbar').hasAttribute('inert')).toBe(false);
352
+ expect($('.bd-canvas').hasAttribute('inert')).toBe(true);
353
+ expect($('.bd-status').hasAttribute('inert')).toBe(true);
354
+ expect($('aside[data-side=right]').getAttribute('role')).toBeNull();
355
+ // Escape closes it, focus goes back to the button that opened it.
356
+ await act(async () => {
357
+ document.dispatchEvent(new KeyboardEvent('keydown', { key: 'Escape', bubbles: true }));
358
+ });
359
+ expect($('aside[data-side=left]').hidden).toBe(true);
360
+ expect($('.bd-toolbar').hasAttribute('inert')).toBe(false);
361
+ expect(document.activeElement).toBe(left);
362
+ await act(async () => left?.click());
363
+ // Opening the other one closes it.
364
+ await act(async () => right?.click());
365
+ expect($('aside[data-side=left]').hidden).toBe(true);
366
+ expect($('aside[data-side=right]').hidden).toBe(false);
367
+ // The inspector sheet has its own close button.
368
+ const close = $('aside[data-side=right] .bd-sheet-close');
369
+ expect(close.getAttribute('aria-label')).toBe(en['ui.close']);
370
+ await act(async () => close.click());
371
+ expect($('aside[data-side=right]').hidden).toBe(true);
372
+ // The scrim and Escape (from anywhere) close a sheet too.
373
+ await act(async () => left?.click());
374
+ await act(async () => $('.bd-scrim').click());
375
+ expect($('aside[data-side=left]').hidden).toBe(true);
376
+ await act(async () => right?.click());
377
+ await act(async () => {
378
+ document.dispatchEvent(new KeyboardEvent('keydown', { key: 'Escape', bubbles: true }));
379
+ });
380
+ expect($('aside[data-side=right]').hidden).toBe(true);
381
+ // A tablet is narrow but not compact.
382
+ await act(async () => notify?.([{ contentRect: { width: 1000 } }]));
383
+ expect($('.bd-body').getAttribute('data-narrow')).toBe('true');
384
+ expect($('.bd-body').getAttribute('data-compact')).toBe('false');
385
+ width.mockRestore();
386
+ vi.unstubAllGlobals();
387
+ });
185
388
  it('has no accessibility violations', async () => {
186
389
  await show(props());
187
390
  expect(await axe(container)).toHaveNoViolations();
@@ -194,6 +397,8 @@ describe('resolveConfig', () => {
194
397
  const config = resolveConfig();
195
398
  expect(config.breakpoints.map((b) => b.id)).toEqual(['desktop', 'tablet', 'mobile']);
196
399
  expect(config.autosave).toEqual({ debounceMs: 2000, maxWaitMs: 20_000 });
400
+ // Only a window too narrow for the toolbar and the canvas is turned away.
401
+ expect(config.minViewportWidth).toBe(320);
197
402
  expect(resolveConfig({ autosave: { debounceMs: 1, maxWaitMs: 2 }, uiLocale: 'pl' })).toMatchObject({ autosave: { debounceMs: 1, maxWaitMs: 2 }, uiLocale: 'pl' });
198
403
  });
199
404
  });
@@ -1,5 +1,6 @@
1
- import type { RegistryManifest } from '@next-buildr/core';
1
+ import type { HostCapabilities, RegistryManifest } from '@next-buildr/core';
2
2
  import type { DocumentAdapter, DocumentRef } from '../persistence/types.ts';
3
+ import type { EditorStoreOptions } from '../store/types.ts';
3
4
  export type { DocumentRef };
4
5
  /** One canvas width the toolbar offers (PB-083). */
5
6
  export interface BreakpointConfig {
@@ -23,9 +24,16 @@ export interface EditorConfig {
23
24
  readonly theme?: 'light' | 'dark' | 'system';
24
25
  /**
25
26
  * The narrowest window (in CSS pixels) the editor opens in; below it a notice asks the author to
26
- * use a computer. Defaults to 1024 (phones and tablets held upright); `0` turns the check off.
27
+ * use a wider screen. Defaults to 320 (the narrowest phone; the panels are sheets over the
28
+ * canvas below 1100px); `0` turns the check off.
27
29
  */
28
30
  readonly minViewportWidth?: number;
31
+ /**
32
+ * What the host permits beyond the safe defaults (ADR-026). `authorCode: true` shows the Advanced
33
+ * fields (custom CSS, classes, attributes) and the Text HTML mode and lets their commands run;
34
+ * absent or anything but exactly `true` leaves them off. The `capabilities` prop of the editor wins.
35
+ */
36
+ readonly capabilities?: HostCapabilities;
29
37
  }
30
38
  export interface ResolvedEditorConfig {
31
39
  readonly breakpoints: readonly BreakpointConfig[];
@@ -37,9 +45,10 @@ export interface ResolvedEditorConfig {
37
45
  readonly uiLocale: string;
38
46
  readonly theme: 'light' | 'dark' | 'system';
39
47
  readonly minViewportWidth: number;
48
+ readonly capabilities: HostCapabilities;
40
49
  }
41
- /** Below this window width the editor does not open: its panels and the canvas need the room. */
42
- export declare const DEFAULT_MIN_VIEWPORT_WIDTH = 1024;
50
+ /** Below this window width the editor does not open: not even the toolbar and the canvas fit. */
51
+ export declare const DEFAULT_MIN_VIEWPORT_WIDTH = 320;
43
52
  export declare const DEFAULT_BREAKPOINTS: readonly BreakpointConfig[];
44
53
  /** Fills in what a host left out. */
45
54
  export declare function resolveConfig(config?: EditorConfig): ResolvedEditorConfig;
@@ -55,5 +64,19 @@ export interface BuilderEditorProps {
55
64
  readonly canvasUrl: string;
56
65
  readonly documentRef: DocumentRef;
57
66
  readonly config?: EditorConfig;
67
+ /** Host permissions (ADR-026); same as `config.capabilities`, and wins over it. Default: all off. */
68
+ readonly capabilities?: HostCapabilities;
69
+ /**
70
+ * Decides whether the author may weaken a lock (`node.setAttr` `lock`), e.g. from the host's own
71
+ * permission for template editing. Without it the editor can lock a block but never unlock it.
72
+ * Read when an unlock is attempted, so it may close over current host state.
73
+ */
74
+ readonly canUnlock?: NonNullable<EditorStoreOptions['canUnlock']>;
75
+ /**
76
+ * The version history of the page. An address makes the toolbar's history icon a link; a function
77
+ * is called when the icon is pressed (open your own panel or dialog). Without it, and without an
78
+ * adapter `historyUrl(ref)`, there is no history icon. The prop wins over the adapter.
79
+ */
80
+ readonly historyUrl?: string | (() => void);
58
81
  }
59
82
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/app/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE5E,YAAY,EAAE,WAAW,EAAE,CAAC;AAE5B,oDAAoD;AACpD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,8DAA8D;IAC9D,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACnD,+DAA+D;IAC/D,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACtD,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAClB,6CAA6C;QAC7C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,kEAAkE;QAClE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;KAC5B,CAAC;IACF,sEAAsE;IACtE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,kEAAkE;IAClE,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC7C;;;OAGG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,WAAW,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAClD,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACrD,QAAQ,CAAC,QAAQ,EAAE;QAAE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/E,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC5C,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AAED,iGAAiG;AACjG,eAAO,MAAM,0BAA0B,OAAO,CAAC;AAE/C,eAAO,MAAM,mBAAmB,EAAE,SAAS,gBAAgB,EAI1D,CAAC;AAEF,qCAAqC;AACrC,wBAAgB,aAAa,CAAC,MAAM,GAAE,YAAiB,GAAG,oBAAoB,CAS7E;AAED,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,8FAA8F;IAC9F,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,kFAAkF;IAClF,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC;CAChC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/app/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC5E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,YAAY,EAAE,WAAW,EAAE,CAAC;AAE5B,oDAAoD;AACpD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,8DAA8D;IAC9D,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACnD,+DAA+D;IAC/D,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACtD,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAClB,6CAA6C;QAC7C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,kEAAkE;QAClE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;KAC5B,CAAC;IACF,sEAAsE;IACtE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,kEAAkE;IAClE,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC7C;;;;OAIG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC;;;;OAIG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,gBAAgB,CAAC;CAC1C;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,WAAW,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAClD,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACrD,QAAQ,CAAC,QAAQ,EAAE;QAAE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/E,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC5C,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,YAAY,EAAE,gBAAgB,CAAC;CACzC;AAED,iGAAiG;AACjG,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAE9C,eAAO,MAAM,mBAAmB,EAAE,SAAS,gBAAgB,EAI1D,CAAC;AAEF,qCAAqC;AACrC,wBAAgB,aAAa,CAAC,MAAM,GAAE,YAAiB,GAAG,oBAAoB,CAU7E;AAED,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,8FAA8F;IAC9F,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,kFAAkF;IAClF,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC;IAC/B,qGAAqG;IACrG,QAAQ,CAAC,YAAY,CAAC,EAAE,gBAAgB,CAAC;IACzC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC,CAAC;IAClE;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;CAC7C"}
@@ -1,8 +1,8 @@
1
- /** Below this window width the editor does not open: its panels and the canvas need the room. */
2
- export const DEFAULT_MIN_VIEWPORT_WIDTH = 1024;
1
+ /** Below this window width the editor does not open: not even the toolbar and the canvas fit. */
2
+ export const DEFAULT_MIN_VIEWPORT_WIDTH = 320;
3
3
  export const DEFAULT_BREAKPOINTS = [
4
4
  { id: 'desktop', width: 1280 },
5
- { id: 'tablet', width: 820 },
5
+ { id: 'tablet', width: 768 },
6
6
  { id: 'mobile', width: 390 },
7
7
  ];
8
8
  /** Fills in what a host left out. */
@@ -14,5 +14,6 @@ export function resolveConfig(config = {}) {
14
14
  uiLocale: config.uiLocale ?? 'en',
15
15
  theme: config.theme ?? 'system',
16
16
  minViewportWidth: config.minViewportWidth ?? DEFAULT_MIN_VIEWPORT_WIDTH,
17
+ capabilities: config.capabilities ?? {},
17
18
  };
18
19
  }
@@ -0,0 +1,40 @@
1
+ import type { NodeId } from '@next-buildr/core';
2
+ /** The tabs of the left panel. */
3
+ export type LeftPanelTab = 'blocks' | 'structure';
4
+ export declare const LEFT_PANEL_TABS: readonly LeftPanelTab[];
5
+ /** What the Blocks tab lists: single blocks or ready-made patterns. */
6
+ export type PaletteMode = 'blocks' | 'patterns';
7
+ export declare const PALETTE_MODES: readonly PaletteMode[];
8
+ /** The stage (canvas area) that toasts and the issues drawer portal into, and the drawer's state. */
9
+ export interface StageSlots {
10
+ readonly stage: HTMLElement | null;
11
+ readonly issuesOpen: boolean;
12
+ setIssuesOpen(open: boolean): void;
13
+ }
14
+ /** The two actions of the empty-page placeholder. */
15
+ export interface EmptyPageActions {
16
+ onAddBlock(): void;
17
+ onPickPattern(): void;
18
+ }
19
+ /** The device keys of the UI-only shortcuts, in toolbar order (desktop, tablet, phone). */
20
+ export declare const DEVICE_SHORTCUT_KEYS: readonly ['1', '2', '3'];
21
+ export type DeviceShortcutKey = (typeof DEVICE_SHORTCUT_KEYS)[number];
22
+ /** Callbacks of the shortcuts that change only the editor's UI, never the document. */
23
+ export interface ShortcutCallbacks {
24
+ /** Keys 1, 2, 3: switch the screen size. */
25
+ setDevice(key: DeviceShortcutKey): void;
26
+ /** Toggle both side panels. */
27
+ togglePanels(): void;
28
+ /** Toggle the block outlines. */
29
+ toggleGuides(): void;
30
+ /** Open the shortcuts dialog (?). */
31
+ openShortcuts(): void;
32
+ /** Focus the block search (/). */
33
+ focusBlockSearch(): void;
34
+ }
35
+ /** A pending removal that may need a confirmation: ids to remove and whether any has descendants. */
36
+ export interface RemoveRequest {
37
+ readonly ids: readonly NodeId[];
38
+ readonly hasDescendants: boolean;
39
+ }
40
+ //# sourceMappingURL=contracts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../src/app/contracts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,kCAAkC;AAClC,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,WAAW,CAAC;AAClD,eAAO,MAAM,eAAe,EAAE,SAAS,YAAY,EAA4B,CAAC;AAEhF,uEAAuE;AACvE,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC;AAChD,eAAO,MAAM,aAAa,EAAE,SAAS,WAAW,EAA2B,CAAC;AAE5E,qGAAqG;AACrG,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;CACpC;AAED,qDAAqD;AACrD,MAAM,WAAW,gBAAgB;IAC/B,UAAU,IAAI,IAAI,CAAC;IACnB,aAAa,IAAI,IAAI,CAAC;CACvB;AAED,2FAA2F;AAC3F,eAAO,MAAM,oBAAoB,YAAI,GAAG,EAAE,GAAG,EAAE,GAAG,CAAU,CAAC;AAC7D,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtE,uFAAuF;AACvF,MAAM,WAAW,iBAAiB;IAChC,4CAA4C;IAC5C,SAAS,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACxC,+BAA+B;IAC/B,YAAY,IAAI,IAAI,CAAC;IACrB,iCAAiC;IACjC,YAAY,IAAI,IAAI,CAAC;IACrB,qCAAqC;IACrC,aAAa,IAAI,IAAI,CAAC;IACtB,kCAAkC;IAClC,gBAAgB,IAAI,IAAI,CAAC;CAC1B;AAED,qGAAqG;AACrG,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;CAClC"}
@@ -0,0 +1,4 @@
1
+ export const LEFT_PANEL_TABS = ['blocks', 'structure'];
2
+ export const PALETTE_MODES = ['blocks', 'patterns'];
3
+ /** The device keys of the UI-only shortcuts, in toolbar order (desktop, tablet, phone). */
4
+ export const DEVICE_SHORTCUT_KEYS = ['1', '2', '3'];
@@ -1 +1 @@
1
- {"version":3,"file":"editor-app.d.ts","sourceRoot":"","sources":["../../src/app/editor-app.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EAGnB,YAAY,EACZ,YAAY,EACb,MAAM,mBAAmB,CAAC;AAqD3B,OAAO,EAAE,KAAK,kBAAkB,EAAmC,MAAM,aAAa,CAAC;AAMvF,MAAM,WAAW,cAAe,SAAQ,kBAAkB;IACxD,sFAAsF;IACtF,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,oIAAoI;IACpI,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC;IAChC,uKAAuK;IACvK,QAAQ,CAAC,UAAU,CAAC,EAAE,mBAAmB,CAAC;CAC3C;AAsBD;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,+BA0F9C"}
1
+ {"version":3,"file":"editor-app.d.ts","sourceRoot":"","sources":["../../src/app/editor-app.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EAGnB,YAAY,EACZ,YAAY,EACb,MAAM,mBAAmB,CAAC;AAuE3B,OAAO,EAAE,KAAK,kBAAkB,EAAmC,MAAM,aAAa,CAAC;AAQvF,MAAM,WAAW,cAAe,SAAQ,kBAAkB;IACxD,sFAAsF;IACtF,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,oIAAoI;IACpI,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC;IAChC,uKAAuK;IACvK,QAAQ,CAAC,UAAU,CAAC,EAAE,mBAAmB,CAAC;CAC3C;AAsBD;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,+BAyG9C"}