@next-buildr/editor 2.0.0 → 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 +7 -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 +6 -4
@@ -2,6 +2,7 @@ import { type ReactNode } from 'react';
2
2
  export interface IssueCounts {
3
3
  readonly error: number;
4
4
  readonly warning: number;
5
+ readonly info?: number;
5
6
  }
6
7
  export interface EditorLayoutProps {
7
8
  readonly toolbar?: ReactNode;
@@ -15,18 +16,26 @@ export interface EditorLayoutProps {
15
16
  readonly issues?: ReactNode;
16
17
  /** Error and warning counts shown on the status bar's issues toggle. */
17
18
  readonly issueCounts?: IssueCounts | undefined;
18
- /** Read-only facts on the right of the status bar (breakpoint, zoom, save state). */
19
+ /** The right of the status bar: device readout and zoom menu. */
19
20
  readonly status?: ReactNode;
21
+ /** The collapsed right panel's rail (the inspector's tabs as icons); the plain expand button without it. */
22
+ readonly rightRail?: ReactNode;
23
+ /** The selection path on the left of the status bar. */
24
+ readonly breadcrumbs?: ReactNode;
20
25
  }
21
26
  /** Below this editor width the side panels become overlays (the editor may be embedded: measured, not a media query). */
22
27
  export declare const NARROW_BELOW = 1100;
23
28
  /** The canvas never gets narrower than this while the panels sit beside it. */
24
29
  export declare const CANVAS_MIN = 480;
30
+ /** At this editor width and below the toolbar and the status bar collapse to what a phone needs. */
31
+ export declare const COMPACT_AT = 768;
32
+ /** At this editor width and below the toolbar keeps only icons. */
33
+ export declare const TIGHT_AT = 480;
25
34
  /**
26
35
  * The shell's three columns and the status bar: toolbar on top, the left panel, the canvas and
27
36
  * the inspector between two splitters, the status bar with the collapsible issues drawer at the
28
37
  * bottom. Each region is a landmark with a translated name; the panels themselves are slots the
29
38
  * later tasks fill. Below `NARROW_BELOW` the side panels are overlays the toolbar toggles.
30
39
  */
31
- export declare function EditorLayout({ toolbar, left, center, right, issues, issueCounts, status, }: EditorLayoutProps): import("react").JSX.Element;
40
+ export declare function EditorLayout({ toolbar, left, center, right, issues, issueCounts, status, breadcrumbs, rightRail, }: EditorLayoutProps): import("react").JSX.Element;
32
41
  //# sourceMappingURL=layout.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../src/app/layout.tsx"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,SAAS,EAQf,MAAM,OAAO,CAAC;AAMf,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;IAC7B,oCAAoC;IACpC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC;IAC1B,kBAAkB;IAClB,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC;IAC5B,qBAAqB;IACrB,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC;IAC3B,kCAAkC;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC;IAC5B,wEAAwE;IACxE,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IAC/C,qFAAqF;IACrF,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC;CAC7B;AAmCD,yHAAyH;AACzH,eAAO,MAAM,YAAY,OAAO,CAAC;AACjC,+EAA+E;AAC/E,eAAO,MAAM,UAAU,MAAM,CAAC;AAsB9B;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,IAAI,EACJ,MAAM,EACN,KAAK,EACL,MAAM,EACN,WAAW,EACX,MAAM,GACP,EAAE,iBAAiB,+BAiInB"}
1
+ {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../src/app/layout.tsx"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,SAAS,EAQf,MAAM,OAAO,CAAC;AAQf,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;IAC7B,oCAAoC;IACpC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC;IAC1B,kBAAkB;IAClB,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC;IAC5B,qBAAqB;IACrB,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC;IAC3B,kCAAkC;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC;IAC5B,wEAAwE;IACxE,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IAC/C,iEAAiE;IACjE,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC;IAC5B,4GAA4G;IAC5G,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;IAC/B,wDAAwD;IACxD,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC;CAClC;AAgED,yHAAyH;AACzH,eAAO,MAAM,YAAY,OAAO,CAAC;AACjC,+EAA+E;AAC/E,eAAO,MAAM,UAAU,MAAM,CAAC;AAC9B,oGAAoG;AACpG,eAAO,MAAM,UAAU,MAAM,CAAC;AAC9B,mEAAmE;AACnE,eAAO,MAAM,QAAQ,MAAM,CAAC;AAsB5B;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,IAAI,EACJ,MAAM,EACN,KAAK,EACL,MAAM,EACN,WAAW,EACX,MAAM,EACN,WAAW,EACX,SAAS,GACV,EAAE,iBAAiB,+BAgYnB"}
@@ -1,15 +1,39 @@
1
1
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useCallback, useEffect, useId, useMemo, useRef, useState, } from 'react';
3
- import { useT } from '../messages/index.js';
4
- import { Button, Icon, Panel } from '../ui/index.js';
3
+ import { usePlural, useT } from '../messages/index.js';
4
+ import { Icon, IconButton, Panel } from '../ui/index.js';
5
5
  import { ShellPanelsContext } from './shell-panels.js';
6
+ import { StageSlotsContext } from './stage-slots.js';
6
7
  import { useResizable } from './use-resizable.js';
8
+ const COLLAPSE_KEY = 'buildr:editor:collapsed';
9
+ const EXPANDED = { left: false, right: false };
10
+ /** The stored collapse of both panels; anything that is not an object with boolean sides is ignored. */
11
+ function readCollapsed() {
12
+ try {
13
+ const parsed = JSON.parse(window.localStorage.getItem(COLLAPSE_KEY) ?? 'null');
14
+ if (typeof parsed !== 'object' || parsed === null)
15
+ return EXPANDED;
16
+ const { left, right } = parsed;
17
+ return { left: left === true, right: right === true };
18
+ }
19
+ catch {
20
+ return EXPANDED;
21
+ }
22
+ }
23
+ function writeCollapsed(value) {
24
+ try {
25
+ window.localStorage.setItem(COLLAPSE_KEY, JSON.stringify(value));
26
+ }
27
+ catch {
28
+ // Storage is unavailable: the collapse just is not remembered.
29
+ }
30
+ }
7
31
  /**
8
32
  * A vertical separator that can be dragged or moved with the keyboard (the WAI-ARIA window
9
33
  * splitter); double-click puts it back. It draws a 1px line and has a wider invisible hit area.
10
34
  */
11
- function Splitter({ resizable, min, max, label, controls }) {
12
- return (_jsx("div", { role: "separator", "aria-orientation": "vertical", "aria-label": label, "aria-controls": controls, "aria-valuenow": resizable.size, "aria-valuemin": min, "aria-valuemax": max, tabIndex: 0, className: "bd-splitter", "data-dragging": resizable.dragging, ...resizable.bind }));
35
+ function Splitter({ resizable, min, max, label, controls, inert = false }) {
36
+ return (_jsx("div", { role: "separator", "aria-orientation": "vertical", "aria-label": label, "aria-controls": controls, "aria-valuenow": resizable.size, "aria-valuemin": min, "aria-valuemax": max, tabIndex: inert ? -1 : 0, "aria-hidden": inert ? true : undefined, className: "bd-splitter", "data-dragging": resizable.dragging, "data-inert": inert, ...resizable.bind }));
13
37
  }
14
38
  const LEFT = { initial: 280, min: 200, max: 480 };
15
39
  const RIGHT = { initial: 320, min: 240, max: 520 };
@@ -17,6 +41,10 @@ const RIGHT = { initial: 320, min: 240, max: 520 };
17
41
  export const NARROW_BELOW = 1100;
18
42
  /** The canvas never gets narrower than this while the panels sit beside it. */
19
43
  export const CANVAS_MIN = 480;
44
+ /** At this editor width and below the toolbar and the status bar collapse to what a phone needs. */
45
+ export const COMPACT_AT = 768;
46
+ /** At this editor width and below the toolbar keeps only icons. */
47
+ export const TIGHT_AT = 480;
20
48
  const SPLITTERS = 2;
21
49
  /** The editor's own width, watched with a `ResizeObserver`; 0 while unknown (jsdom). */
22
50
  function useEditorWidth(ref) {
@@ -45,8 +73,9 @@ function useEditorWidth(ref) {
45
73
  * bottom. Each region is a landmark with a translated name; the panels themselves are slots the
46
74
  * later tasks fill. Below `NARROW_BELOW` the side panels are overlays the toolbar toggles.
47
75
  */
48
- export function EditorLayout({ toolbar, left, center, right, issues, issueCounts, status, }) {
76
+ export function EditorLayout({ toolbar, left, center, right, issues, issueCounts, status, breadcrumbs, rightRail, }) {
49
77
  const t = useT();
78
+ const plural = usePlural();
50
79
  const ids = { left: useId(), right: useId(), issues: useId() };
51
80
  const leftSize = useResizable({ ...LEFT, direction: 1, storageKey: 'buildr:editor:left-width' });
52
81
  const rightSize = useResizable({
@@ -56,27 +85,159 @@ export function EditorLayout({ toolbar, left, center, right, issues, issueCounts
56
85
  });
57
86
  const [issuesOpen, setIssuesOpen] = useState(false);
58
87
  const [overlay, setOverlay] = useState({ left: false, right: false });
88
+ const [collapsed, setCollapsed] = useState(readCollapsed);
89
+ const collapsedRef = useRef(collapsed);
90
+ collapsedRef.current = collapsed;
91
+ const [leftTab, setLeftTab] = useState('blocks');
92
+ const [stage, setStage] = useState(null);
59
93
  const toolbarRef = useRef(null);
60
94
  const width = useEditorWidth(toolbarRef);
61
95
  const narrow = width > 0 && width < NARROW_BELOW;
96
+ const compact = width > 0 && width <= COMPACT_AT;
97
+ const tight = width > 0 && width <= TIGHT_AT;
62
98
  const toggle = useCallback((side) => setOverlay((current) => ({
63
99
  left: side === 'left' && !current.left,
64
100
  right: side === 'right' && !current.right,
65
101
  })), []);
66
- const panels = useMemo(() => ({ narrow, open: overlay, toggle }), [narrow, overlay, toggle]);
102
+ const closeOverlay = useCallback(() => setOverlay((current) => current.left || current.right ? { left: false, right: false } : current), []);
103
+ const update = useCallback((change) => {
104
+ setCollapsed((current) => {
105
+ const next = change(current);
106
+ writeCollapsed(next);
107
+ return next;
108
+ });
109
+ }, []);
110
+ // Focus follows a user-initiated expand or collapse only (never mount or restored state).
111
+ const focusAfter = useRef(null);
112
+ const toggleCollapsed = useCallback((side) => {
113
+ focusAfter.current = { side, open: collapsedRef.current[side] };
114
+ update((current) => ({ ...current, [side]: !current[side] }));
115
+ }, [update]);
116
+ const collapseAll = useCallback(() => {
117
+ focusAfter.current = { side: 'left', open: false };
118
+ update(() => ({ left: true, right: true }));
119
+ }, [update]);
120
+ const expandAll = useCallback(() => {
121
+ focusAfter.current = { side: 'left', open: true };
122
+ update(() => EXPANDED);
123
+ }, [update]);
124
+ const panels = useMemo(() => ({
125
+ narrow,
126
+ compact,
127
+ tight,
128
+ open: overlay,
129
+ toggle,
130
+ closeOverlay,
131
+ collapsed,
132
+ toggleCollapsed,
133
+ collapseAll,
134
+ expandAll,
135
+ leftTab,
136
+ setLeftTab,
137
+ }), [
138
+ narrow,
139
+ compact,
140
+ tight,
141
+ overlay,
142
+ toggle,
143
+ closeOverlay,
144
+ collapsed,
145
+ toggleCollapsed,
146
+ collapseAll,
147
+ expandAll,
148
+ leftTab,
149
+ ]);
150
+ const slots = useMemo(() => ({ stage, issuesOpen, setIssuesOpen }), [stage, issuesOpen]);
151
+ // The overlay mode always shows a panel in full; the rail is the wide layout's collapsed state.
152
+ const rail = { left: !narrow && collapsed.left, right: !narrow && collapsed.right };
67
153
  // Beside the canvas, the panels give way so it keeps CANVAS_MIN (never below their own minimum).
68
154
  const room = width > 0 && !narrow ? width - CANVAS_MIN - SPLITTERS : Number.POSITIVE_INFINITY;
69
155
  const leftShown = Math.max(LEFT.min, Math.min(leftSize.size, room - RIGHT.min));
70
156
  const rightShown = Math.max(RIGHT.min, Math.min(rightSize.size, room - leftShown));
71
157
  const style = {
72
- '--bd-left': `${leftShown}px`,
73
- '--bd-right': `${rightShown}px`,
158
+ '--bd-left': rail.left ? 'var(--bd-rail)' : `${leftShown}px`,
159
+ '--bd-right': rail.right ? 'var(--bd-rail)' : `${rightShown}px`,
160
+ };
161
+ const expand = (side) => {
162
+ focusAfter.current = { side, open: true };
163
+ update((current) => ({ ...current, [side]: false }));
74
164
  };
165
+ // biome-ignore lint/correctness/useExhaustiveDependencies: runs after a collapse change only; the ids are stable
166
+ useEffect(() => {
167
+ const pending = focusAfter.current;
168
+ if (pending === null)
169
+ return;
170
+ focusAfter.current = null;
171
+ const panel = document.getElementById(ids[pending.side]);
172
+ if (panel === null)
173
+ return;
174
+ if (pending.open) {
175
+ const content = panel.querySelector('.bd-panel-content');
176
+ const first = content?.querySelector('button:not(:disabled), [href], input:not(:disabled), select:not(:disabled), textarea:not(:disabled), [tabindex]:not([tabindex="-1"])');
177
+ (first ?? content)?.focus();
178
+ }
179
+ else {
180
+ panel.querySelector('.bd-rail button')?.focus();
181
+ }
182
+ }, [collapsed]);
183
+ const issueText = (count, kind) => plural(`issues.count.${kind}`, count);
75
184
  const closeOnEscape = (side) => (event) => {
76
185
  if (narrow && event.key === 'Escape' && overlay[side]) {
77
186
  event.stopPropagation();
78
187
  setOverlay((current) => ({ ...current, [side]: false }));
79
188
  }
80
189
  };
81
- return (_jsxs(ShellPanelsContext.Provider, { value: panels, children: [_jsx("div", { className: "bd-toolbar", role: "toolbar", "aria-label": t('editor.toolbar'), ref: toolbarRef, children: toolbar }), _jsxs("div", { className: "bd-body", style: style, "data-narrow": narrow, children: [_jsx(Panel, { as: "aside", id: ids.left, "aria-label": t('editor.leftPanel'), hidden: narrow && !overlay.left, "data-side": "left", onKeyDown: closeOnEscape('left'), children: left }), _jsx(Splitter, { resizable: leftSize, min: LEFT.min, max: LEFT.max, label: t('editor.resize.left'), controls: ids.left }), _jsx("main", { className: "bd-canvas", "aria-label": t('editor.canvas'), children: center }), _jsx(Splitter, { resizable: rightSize, min: RIGHT.min, max: RIGHT.max, label: t('editor.resize.right'), controls: ids.right }), _jsx(Panel, { as: "aside", id: ids.right, "aria-label": t('editor.inspector'), hidden: narrow && !overlay.right, "data-side": "right", onKeyDown: closeOnEscape('right'), children: right })] }), _jsxs("section", { className: "bd-issues", "data-open": issuesOpen, "aria-label": t('editor.issues'), children: [_jsxs("div", { className: "bd-issues-bar", children: [_jsxs(Button, { variant: "ghost", className: "bd-status-toggle", "aria-expanded": issuesOpen, "aria-controls": ids.issues, onClick: () => setIssuesOpen((open) => !open), children: [issueCounts !== undefined && (_jsxs(_Fragment, { children: [_jsxs("span", { className: "bd-status-count", "data-severity": "error", title: t('editor.status.errors'), children: [_jsx(Icon, { name: "circle-alert" }), issueCounts.error] }), _jsxs("span", { className: "bd-status-count", "data-severity": "warning", title: t('editor.status.warnings'), children: [_jsx(Icon, { name: "triangle-alert" }), issueCounts.warning] })] })), issuesOpen ? t('editor.issues.hide') : t('editor.issues.show')] }), _jsx("span", { className: "bd-toolbar-spacer" }), status] }), _jsx("div", { id: ids.issues, hidden: !issuesOpen, children: issues })] })] }));
190
+ const sheetOpen = narrow && (overlay.left || overlay.right);
191
+ const sheetSide = !narrow
192
+ ? null
193
+ : overlay.left
194
+ ? 'left'
195
+ : overlay.right
196
+ ? 'right'
197
+ : null;
198
+ // A sheet takes focus: it moves into it when it opens and returns to what opened it when it closes.
199
+ const opener = useRef(null);
200
+ // biome-ignore lint/correctness/useExhaustiveDependencies: runs when the open sheet changes; the ids are stable
201
+ useEffect(() => {
202
+ if (sheetSide === null) {
203
+ opener.current?.focus();
204
+ opener.current = null;
205
+ return;
206
+ }
207
+ if (opener.current === null && document.activeElement instanceof HTMLElement) {
208
+ opener.current = document.activeElement;
209
+ }
210
+ const panel = document.getElementById(ids[sheetSide]);
211
+ const first = panel?.querySelector('.bd-sheet-close, button:not(:disabled), [href], input:not(:disabled), select:not(:disabled), textarea:not(:disabled), [tabindex]:not([tabindex="-1"])');
212
+ (first ?? panel)?.focus();
213
+ }, [sheetSide]);
214
+ // The sheet is a non-modal dialog on purpose: the toolbar stays live while it is open, because its
215
+ // Blocks / Structure / Inspector toggles swap one sheet for the other. So no `aria-modal` (it would
216
+ // claim the toolbar is unreachable) and the toolbar is not `inert`; the canvas, splitters and status
217
+ // bar are inert, and the scrim, the close button and Escape close the sheet.
218
+ const sheetProps = (side) => (sheetSide === side ? { role: 'dialog' } : {});
219
+ // Escape closes a sheet wherever the focus is (the canvas frame aside), unless a menu or dialog
220
+ // above it already took the key.
221
+ useEffect(() => {
222
+ if (!sheetOpen)
223
+ return;
224
+ const onKey = (event) => {
225
+ if (event.key === 'Escape' && !event.defaultPrevented)
226
+ closeOverlay();
227
+ };
228
+ document.addEventListener('keydown', onKey);
229
+ return () => document.removeEventListener('keydown', onKey);
230
+ }, [sheetOpen, closeOverlay]);
231
+ // A sheet that no longer is one (the editor grew wide) must not stay open behind the layout.
232
+ useEffect(() => {
233
+ if (!narrow)
234
+ closeOverlay();
235
+ }, [narrow, closeOverlay]);
236
+ return (_jsx(ShellPanelsContext.Provider, { value: panels, children: _jsxs(StageSlotsContext.Provider, { value: slots, children: [_jsx("div", { className: "bd-toolbar", role: "toolbar", "aria-label": t('editor.toolbar'), "data-compact": compact, ref: toolbarRef, children: toolbar }), _jsxs("div", { className: "bd-body", style: style, "data-narrow": narrow, "data-compact": compact, "data-dragging": leftSize.dragging || rightSize.dragging, children: [_jsxs(Panel, { as: "aside", id: ids.left, "aria-label": t('editor.leftPanel'), hidden: narrow && !overlay.left, tabIndex: sheetSide === 'left' ? -1 : undefined, ...sheetProps('left'), "data-side": "left", "data-collapsed": rail.left, onKeyDown: closeOnEscape('left'), children: [narrow && (_jsxs("div", { className: "bd-sheet-bar", children: [_jsx("span", { className: "bd-sheet-title", children: t('editor.leftPanel') }), _jsx(IconButton, { size: "sm", icon: "x", label: t('ui.close'), className: "bd-sheet-close", onClick: () => setOverlay((current) => ({ ...current, left: false })) })] })), _jsx("div", { className: "bd-panel-content", hidden: rail.left, tabIndex: -1, children: left }), rail.left && (_jsxs("div", { className: "bd-rail", children: [_jsx(IconButton, { label: t('leftPanel.tab.blocks'), icon: "layout-grid", onClick: () => {
237
+ setLeftTab('blocks');
238
+ expand('left');
239
+ } }), _jsx(IconButton, { label: t('leftPanel.tab.structure'), icon: "list-tree", onClick: () => {
240
+ setLeftTab('structure');
241
+ expand('left');
242
+ } })] }))] }), _jsx(Splitter, { resizable: leftSize, min: LEFT.min, max: LEFT.max, label: t('editor.resize.left'), controls: ids.left, inert: rail.left || sheetOpen }), _jsxs("main", { className: "bd-canvas", "aria-label": t('editor.canvas'), tabIndex: -1, inert: sheetOpen, ref: setStage, children: [_jsx("div", { className: "bd-stage-scroll", children: center }), _jsx("section", { className: "bd-issues", "data-open": issuesOpen, "aria-label": t('issues.drawer'), id: ids.issues, inert: !issuesOpen, children: issues })] }), _jsx(Splitter, { resizable: rightSize, min: RIGHT.min, max: RIGHT.max, label: t('editor.resize.right'), controls: ids.right, inert: rail.right || sheetOpen }), _jsxs(Panel, { as: "aside", id: ids.right, "aria-label": t('editor.inspector'), hidden: narrow && !overlay.right, tabIndex: sheetSide === 'right' ? -1 : undefined, ...sheetProps('right'), "data-side": "right", "data-collapsed": rail.right, onKeyDown: closeOnEscape('right'), children: [narrow && (_jsxs("div", { className: "bd-sheet-bar", children: [_jsx("span", { className: "bd-sheet-title", children: t('editor.inspector') }), _jsx(IconButton, { size: "sm", icon: "x", label: t('ui.close'), className: "bd-sheet-close", onClick: () => setOverlay((current) => ({ ...current, right: false })) })] })), _jsx("div", { className: "bd-panel-content", hidden: rail.right, tabIndex: -1, children: right }), rail.right && (_jsx("div", { className: "bd-rail", children: rightRail ?? (_jsx(IconButton, { label: t('inspector.expand'), icon: "panel-right", onClick: () => expand('right') })) }))] }), sheetOpen && (_jsx("button", { type: "button", className: "bd-scrim", "aria-label": t('ui.close'), tabIndex: -1, onClick: closeOverlay }))] }), _jsxs("section", { className: "bd-status", "aria-label": t('statusBar.label'), "data-compact": compact, inert: sheetOpen, children: [_jsx("div", { className: "bd-status-crumbs", children: breadcrumbs }), _jsx("button", { type: "button", className: "bd-status-btn", "aria-expanded": issuesOpen, "aria-controls": ids.issues, title: t('statusBar.issues.show'), onClick: () => setIssuesOpen((open) => !open), children: issueCounts === undefined ? (t('editor.issues.show')) : issueCounts.error + issueCounts.warning + (issueCounts.info ?? 0) === 0 ? (_jsxs(_Fragment, { children: [_jsx(Icon, { name: "circle-check" }), t('statusBar.noIssues')] })) : (_jsxs(_Fragment, { children: [issueCounts.error > 0 && (_jsxs("span", { className: "bd-status-count", "data-severity": "error", children: [_jsx(Icon, { name: "circle-alert" }), _jsx("span", { className: "bd-tabular", children: issueText(issueCounts.error, 'error') })] })), issueCounts.warning > 0 && (_jsxs("span", { className: "bd-status-count", "data-severity": "warning", children: [_jsx(Icon, { name: "triangle-alert" }), _jsx("span", { className: "bd-tabular", children: issueText(issueCounts.warning, 'warning') })] })), (issueCounts.info ?? 0) > 0 && (_jsxs("span", { className: "bd-status-count", "data-severity": "info", children: [_jsx(Icon, { name: "info" }), _jsx("span", { className: "bd-tabular", children: issueText(issueCounts.info ?? 0, 'info') })] }))] })) }), _jsx("span", { className: "bd-status-divider", "aria-hidden": "true" }), status] })] }) }));
82
243
  }
@@ -1,12 +1,17 @@
1
1
  import type { ComponentMeta, RegistryManifest } from '@next-buildr/core';
2
2
  import { type ReactNode } from 'react';
3
- /** What the palette, the layers and the inspector know about the components (`toManifest`). */
3
+ /**
4
+ * What the palette, the layers and the inspector know about the components (`toManifest`). The
5
+ * panels read it with its labels in the interface language (`i18n/localize-manifest.ts`).
6
+ */
4
7
  export declare function ManifestProvider(props: {
5
8
  readonly manifest: RegistryManifest;
6
9
  readonly children: ReactNode;
7
10
  }): import("react").JSX.Element;
8
- /** The manifest, or `undefined` outside a `ManifestProvider` (the panels then fall back to the component's type). */
11
+ /** The manifest, or `undefined` outside a `ManifestProvider` (the panels then fall back to the component's type). Its labels are in the interface language. */
9
12
  export declare function useManifest(): RegistryManifest | undefined;
13
+ /** The manifest as the application registered it, in its own (English) words: what the checks' messages quote. */
14
+ export declare function useSourceManifest(): RegistryManifest | undefined;
10
15
  /** One component's metadata, or `undefined` when the manifest does not have it. */
11
16
  export declare function componentMeta(manifest: RegistryManifest | undefined, type: string): ComponentMeta | undefined;
12
17
  //# sourceMappingURL=manifest.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/app/manifest.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAiB,KAAK,SAAS,EAAc,MAAM,OAAO,CAAC;AAIlE,+FAA+F;AAC/F,wBAAgB,gBAAgB,CAAC,KAAK,EAAE;IACtC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;CAC9B,+BAIA;AAED,qHAAqH;AACrH,wBAAgB,WAAW,IAAI,gBAAgB,GAAG,SAAS,CAE1D;AAED,mFAAmF;AACnF,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,gBAAgB,GAAG,SAAS,EACtC,IAAI,EAAE,MAAM,GACX,aAAa,GAAG,SAAS,CAI3B"}
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/app/manifest.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAiB,KAAK,SAAS,EAAuB,MAAM,OAAO,CAAC;AAO3E;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE;IACtC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;CAC9B,+BAWA;AAED,+JAA+J;AAC/J,wBAAgB,WAAW,IAAI,gBAAgB,GAAG,SAAS,CAE1D;AAED,kHAAkH;AAClH,wBAAgB,iBAAiB,IAAI,gBAAgB,GAAG,SAAS,CAEhE;AAED,mFAAmF;AACnF,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,gBAAgB,GAAG,SAAS,EACtC,IAAI,EAAE,MAAM,GACX,aAAa,GAAG,SAAS,CAI3B"}
@@ -1,14 +1,26 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { createContext, useContext } from 'react';
2
+ import { createContext, useContext, useMemo } from 'react';
3
+ import { localizeManifest } from '../i18n/localize-manifest.js';
4
+ import { useUiLocale } from '../messages/index.js';
3
5
  const ManifestContext = createContext(undefined);
4
- /** What the palette, the layers and the inspector know about the components (`toManifest`). */
6
+ const SourceManifestContext = createContext(undefined);
7
+ /**
8
+ * What the palette, the layers and the inspector know about the components (`toManifest`). The
9
+ * panels read it with its labels in the interface language (`i18n/localize-manifest.ts`).
10
+ */
5
11
  export function ManifestProvider(props) {
6
- return (_jsx(ManifestContext.Provider, { value: props.manifest, children: props.children }));
12
+ const locale = useUiLocale();
13
+ const localized = useMemo(() => localizeManifest(props.manifest, locale), [props.manifest, locale]);
14
+ return (_jsx(SourceManifestContext.Provider, { value: props.manifest, children: _jsx(ManifestContext.Provider, { value: localized, children: props.children }) }));
7
15
  }
8
- /** The manifest, or `undefined` outside a `ManifestProvider` (the panels then fall back to the component's type). */
16
+ /** The manifest, or `undefined` outside a `ManifestProvider` (the panels then fall back to the component's type). Its labels are in the interface language. */
9
17
  export function useManifest() {
10
18
  return useContext(ManifestContext);
11
19
  }
20
+ /** The manifest as the application registered it, in its own (English) words: what the checks' messages quote. */
21
+ export function useSourceManifest() {
22
+ return useContext(SourceManifestContext);
23
+ }
12
24
  /** One component's metadata, or `undefined` when the manifest does not have it. */
13
25
  export function componentMeta(manifest, type) {
14
26
  return manifest !== undefined && Object.hasOwn(manifest.components, type)
@@ -1,3 +1,4 @@
1
+ import type { LeftPanelTab } from './contracts.ts';
1
2
  export type PanelSide = 'left' | 'right';
2
3
  /**
3
4
  * The side panels' overlay mode (below 1100px the layout hides them and the toolbar's toggle
@@ -7,8 +8,22 @@ export type PanelSide = 'left' | 'right';
7
8
  export interface ShellPanels {
8
9
  /** The editor is narrower than the overlay breakpoint. */
9
10
  readonly narrow: boolean;
11
+ /** The editor is phone or small tablet wide (768px and less): the toolbar and the status bar collapse. */
12
+ readonly compact?: boolean;
13
+ /** The editor is phone wide (480px and less): the toolbar keeps only icons. */
14
+ readonly tight?: boolean;
10
15
  readonly open: Readonly<Record<PanelSide, boolean>>;
11
16
  toggle(side: PanelSide): void;
17
+ /** Closes the open overlay (`narrow` only). */
18
+ closeOverlay?(): void;
19
+ /** Persisted collapse of each side panel (wide layout). */
20
+ readonly collapsed?: Readonly<Record<PanelSide, boolean>>;
21
+ toggleCollapsed?(side: PanelSide): void;
22
+ collapseAll?(): void;
23
+ expandAll?(): void;
24
+ /** The active tab of the left panel. */
25
+ readonly leftTab?: LeftPanelTab;
26
+ setLeftTab?(tab: LeftPanelTab): void;
12
27
  }
13
28
  export declare const ShellPanelsContext: import("react").Context<ShellPanels | undefined>;
14
29
  export declare function useShellPanels(): ShellPanels | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"shell-panels.d.ts","sourceRoot":"","sources":["../../src/app/shell-panels.tsx"],"names":[],"mappings":"AAEA,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;AAEzC;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;IACpD,MAAM,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC;CAC/B;AAED,eAAO,MAAM,kBAAkB,kDAAoD,CAAC;AAEpF,wBAAgB,cAAc,IAAI,WAAW,GAAG,SAAS,CAExD"}
1
+ {"version":3,"file":"shell-panels.d.ts","sourceRoot":"","sources":["../../src/app/shell-panels.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;AAEzC;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,0GAA0G;IAC1G,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,+EAA+E;IAC/E,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;IACpD,MAAM,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC;IAC9B,+CAA+C;IAC/C,YAAY,CAAC,IAAI,IAAI,CAAC;IACtB,2DAA2D;IAC3D,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1D,eAAe,CAAC,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC;IACxC,WAAW,CAAC,IAAI,IAAI,CAAC;IACrB,SAAS,CAAC,IAAI,IAAI,CAAC;IACnB,wCAAwC;IACxC,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC;IAChC,UAAU,CAAC,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,CAAC;CACtC;AAED,eAAO,MAAM,kBAAkB,kDAAoD,CAAC;AAEpF,wBAAgB,cAAc,IAAI,WAAW,GAAG,SAAS,CAExD"}
@@ -99,10 +99,10 @@ describe('useViewportTooNarrow on the server and while hydrating', () => {
99
99
  });
100
100
  });
101
101
  describe('SmallScreenNotice', () => {
102
- it('asks for a computer, in the interface language, as an alert', async () => {
102
+ it('asks for a wider window, in the interface language, as an alert', async () => {
103
103
  const view = await mount(_jsx(MessagesProvider, { locale: "pl", children: _jsx(SmallScreenNotice, {}) }));
104
104
  const alert = view.querySelector('[role="alert"]');
105
105
  expect(alert?.querySelector('h1')?.textContent).toBe('Edytor wymaga większego ekranu');
106
- expect(alert?.textContent).toContain('na komputerze');
106
+ expect(alert?.textContent).toContain('zbyt wąskie');
107
107
  });
108
108
  });
@@ -0,0 +1,9 @@
1
+ import type { StageSlots } from './contracts.ts';
2
+ /**
3
+ * The stage element and the issues drawer state. `EditorLayout` provides it; toasts and the issues
4
+ * drawer read it to portal into the stage. Without a provider (a panel rendered on its own) the
5
+ * consumers fall back to their previous placement.
6
+ */
7
+ export declare const StageSlotsContext: import("react").Context<StageSlots | undefined>;
8
+ export declare function useStageSlots(): StageSlots | undefined;
9
+ //# sourceMappingURL=stage-slots.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stage-slots.d.ts","sourceRoot":"","sources":["../../src/app/stage-slots.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,iDAAmD,CAAC;AAElF,wBAAgB,aAAa,IAAI,UAAU,GAAG,SAAS,CAEtD"}
@@ -0,0 +1,10 @@
1
+ import { createContext, useContext } from 'react';
2
+ /**
3
+ * The stage element and the issues drawer state. `EditorLayout` provides it; toasts and the issues
4
+ * drawer read it to portal into the stage. Without a provider (a panel rendered on its own) the
5
+ * consumers fall back to their previous placement.
6
+ */
7
+ export const StageSlotsContext = createContext(undefined);
8
+ export function useStageSlots() {
9
+ return useContext(StageSlotsContext);
10
+ }
@@ -6,9 +6,8 @@ export interface StatusInfoProps {
6
6
  readonly breakpoint: string;
7
7
  }
8
8
  /**
9
- * The status bar's read-only facts (PB-122): the active breakpoint and its width, the canvas
10
- * zoom and the save state. They come from the host, the store and the persistence controller;
11
- * the save state is plain text (the toolbar's status carries the live region).
9
+ * The status bar's right side: the active screen size with its icon and width (`Komputer · pełna
10
+ * szerokość`), and the canvas zoom menu (the host's `setZoom`). The save state lives in the toolbar.
12
11
  */
13
12
  export declare function StatusInfo({ host, breakpoints, breakpoint }: StatusInfoProps): import("react").JSX.Element;
14
13
  //# sourceMappingURL=status-info.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"status-info.d.ts","sourceRoot":"","sources":["../../src/app/status-info.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAI1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAClD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAkBD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,eAAe,+BA2B5E"}
1
+ {"version":3,"file":"status-info.d.ts","sourceRoot":"","sources":["../../src/app/status-info.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAI1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAClD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AA2DD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,eAAe,+BA6B5E"}
@@ -1,34 +1,67 @@
1
1
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useSyncExternalStore } from 'react';
3
- import { useT } from '../messages/index.js';
4
- import { usePersistenceState } from '../persistence/index.js';
5
- import { useEditorState } from '../store/index.js';
2
+ import { useEffect, useState, useSyncExternalStore } from 'react';
3
+ import { interpolate, useT } from '../messages/index.js';
4
+ import { ZoomMenu } from '../toolbar/zoom-menu.js';
5
+ import { Icon } from '../ui/index.js';
6
6
  const BREAKPOINT_LABELS = {
7
7
  desktop: 'toolbar.breakpoint.desktop',
8
8
  tablet: 'toolbar.breakpoint.tablet',
9
9
  mobile: 'toolbar.breakpoint.mobile',
10
10
  };
11
+ const BREAKPOINT_ICONS = {
12
+ desktop: 'monitor',
13
+ tablet: 'tablet',
14
+ mobile: 'smartphone',
15
+ };
11
16
  const NO_ZOOM = 'fit';
12
17
  function useZoom(host) {
13
18
  return useSyncExternalStore((notify) => (host === null ? () => undefined : host.state.subscribe(notify)), () => host?.state.getState().zoom ?? NO_ZOOM, () => NO_ZOOM);
14
19
  }
20
+ /** The scale the canvas frame is shown at, in percent, read from the frame (`Fit` is not a number). */
21
+ function useShownPercent(host, zoom, breakpoint) {
22
+ const [percent, setPercent] = useState(100);
23
+ // biome-ignore lint/correctness/useExhaustiveDependencies: `zoom` and the breakpoint change the frame's scale
24
+ useEffect(() => {
25
+ if (typeof zoom === 'number') {
26
+ setPercent(Math.round(zoom * 100));
27
+ return;
28
+ }
29
+ const read = () => {
30
+ const frame = document.querySelector('.bd-canvas-frame');
31
+ if (frame === null || frame.offsetWidth === 0)
32
+ return;
33
+ setPercent(Math.round((frame.getBoundingClientRect().width / frame.offsetWidth) * 100));
34
+ };
35
+ const timer = setTimeout(read, 0);
36
+ window.addEventListener('resize', read);
37
+ const area = document.querySelector('.bd-canvas-stage-area');
38
+ const observer = typeof ResizeObserver === 'undefined' || area === null ? undefined : new ResizeObserver(read);
39
+ if (area !== null)
40
+ observer?.observe(area);
41
+ const unsubscribe = host?.state.subscribe(read);
42
+ return () => {
43
+ clearTimeout(timer);
44
+ window.removeEventListener('resize', read);
45
+ observer?.disconnect();
46
+ unsubscribe?.();
47
+ };
48
+ }, [host, zoom, breakpoint]);
49
+ return percent;
50
+ }
15
51
  /**
16
- * The status bar's read-only facts (PB-122): the active breakpoint and its width, the canvas
17
- * zoom and the save state. They come from the host, the store and the persistence controller;
18
- * the save state is plain text (the toolbar's status carries the live region).
52
+ * The status bar's right side: the active screen size with its icon and width (`Komputer · pełna
53
+ * szerokość`), and the canvas zoom menu (the host's `setZoom`). The save state lives in the toolbar.
19
54
  */
20
55
  export function StatusInfo({ host, breakpoints, breakpoint }) {
21
56
  const t = useT();
22
57
  const zoom = useZoom(host);
23
- const status = usePersistenceState((state) => state.status);
24
- const error = usePersistenceState((state) => state.error);
25
- const readOnly = useEditorState((state) => state.readOnly);
58
+ const shown = useShownPercent(host, zoom, breakpoint);
26
59
  const active = breakpoints.find((item) => item.id === breakpoint);
27
60
  const key = BREAKPOINT_LABELS[breakpoint];
28
- const save = readOnly
29
- ? t('save.readOnly')
30
- : status === 'error' && error?.kind === 'invalid'
31
- ? t('save.invalid')
32
- : t(`save.${status}`);
33
- return (_jsxs(_Fragment, { children: [_jsxs("span", { className: "bd-status-item", title: t('editor.status.breakpoint'), children: [key === undefined ? breakpoint : t(key), active === undefined ? '' : ` ${active.width}px`] }), _jsx("span", { className: "bd-status-item bd-tabular", title: t('editor.status.zoom'), children: zoom === 'fit' ? t('editor.status.fit') : `${Math.round(zoom * 100)}%` }), _jsx("span", { className: "bd-status-item", "data-status": readOnly ? 'readOnly' : status, children: save })] }));
61
+ const name = key === undefined ? breakpoint : t(key);
62
+ const detail = active === undefined || active === breakpoints[0]
63
+ ? t('statusBar.device.full')
64
+ : interpolate(t('statusBar.device.width'), { width: active.width });
65
+ const icon = BREAKPOINT_ICONS[breakpoint];
66
+ return (_jsxs(_Fragment, { children: [_jsxs("span", { className: "bd-status-btn bd-status-static bd-tabular", title: t('editor.status.breakpoint'), children: [icon === undefined ? null : _jsx(Icon, { name: icon }), name, " \u00B7 ", detail] }), _jsx(ZoomMenu, { zoom: zoom, shown: shown, variant: "status", onChange: (next) => host?.setZoom(next) })] }));
34
67
  }
@@ -1,4 +1,5 @@
1
1
  import type { BreakpointConfig } from '../app/config.ts';
2
+ import type { EmptyPageActions } from '../app/contracts.ts';
2
3
  import { type CanvasHost, type CanvasHostOptions } from './host.ts';
3
4
  export interface CanvasFrameProps {
4
5
  /** The canvas route (`@next-buildr/react/canvas` runs there). */
@@ -13,7 +14,9 @@ export interface CanvasFrameProps {
13
14
  readonly handshakeTimeoutMs?: number;
14
15
  /** Gets the host once the frame is mounted (and `null` when it goes), for the toolbar and the drag-and-drop engine. */
15
16
  readonly onHost?: (host: CanvasHost | null) => void;
16
- readonly callbacks?: Pick<CanvasHostOptions, 'onKeyDown' | 'onContextMenu' | 'onNodeDoubleClick' | 'onDropTarget' | 'onCommandError'>;
17
+ /** The actions of the empty-page state; the buttons show only when it is given. */
18
+ readonly emptyPage?: EmptyPageActions;
19
+ readonly callbacks?: Pick<CanvasHostOptions, 'onAction' | 'onInsert' | 'onKeyDown' | 'onContextMenu' | 'onNodeDoubleClick' | 'onDropTarget' | 'onCommandError' | 'onLocked'>;
17
20
  }
18
21
  /** A random nonce for the canvas URL: 32 hex characters, unguessable by the page in the frame's neighbours. */
19
22
  export declare function createSession(): string;
@@ -44,6 +47,15 @@ export declare function stageMetrics(input: {
44
47
  readonly roomHeight: number;
45
48
  readonly zoom: 'fit' | number;
46
49
  }): StageMetrics;
50
+ /**
51
+ * At most 40 UTF-16 units, as the protocol's `.max(40)` counts, without splitting a surrogate pair
52
+ * (cutting by code points would let ~21 astral characters through, and the canvas drops the message).
53
+ */
54
+ export declare function cutLabel(label: string): string;
55
+ /** The localized component names the canvas shows on its chip: only what the protocol accepts, at most 128. */
56
+ export declare function typeLabelsOf(components: Readonly<Record<string, {
57
+ readonly label?: string | undefined;
58
+ }>> | undefined): Record<string, string>;
47
59
  /**
48
60
  * The canvas iframe, its channel and its status screens. A "Reload canvas" button (or a fatal
49
61
  * error) mounts a new frame with a new session; nothing is lost, because the store holds the
@@ -1 +1 @@
1
- {"version":3,"file":"canvas-frame.d.ts","sourceRoot":"","sources":["../../src/canvas-host/canvas-frame.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAIzD,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,iBAAiB,EAAoB,MAAM,WAAW,CAAC;AAEtF,MAAM,WAAW,gBAAgB;IAC/B,iEAAiE;IACjE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,gEAAgE;IAChE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAC/C,QAAQ,CAAC,WAAW,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAClD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,uHAAuH;IACvH,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,KAAK,IAAI,CAAC;IACpD,QAAQ,CAAC,SAAS,CAAC,EAAE,IAAI,CACvB,iBAAiB,EACjB,WAAW,GAAG,eAAe,GAAG,mBAAmB,GAAG,cAAc,GAAG,gBAAgB,CACxF,CAAC;CACH;AAED,+GAA+G;AAC/G,wBAAgB,aAAa,IAAI,MAAM,CAItC;AAED,mFAAmF;AACnF,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAIhG;AAED,MAAM,WAAW,YAAY;IAC3B,uCAAuC;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,oGAAoG;IACpG,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,oDAAoD;IACpD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,oDAAoD;IACpD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;CAC/B,GAAG,YAAY,CAUf;AAQD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,+BA4IlD"}
1
+ {"version":3,"file":"canvas-frame.d.ts","sourceRoot":"","sources":["../../src/canvas-host/canvas-frame.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAO5D,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,iBAAiB,EAAoB,MAAM,WAAW,CAAC;AAEtF,MAAM,WAAW,gBAAgB;IAC/B,iEAAiE;IACjE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,gEAAgE;IAChE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAC/C,QAAQ,CAAC,WAAW,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAClD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,uHAAuH;IACvH,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,KAAK,IAAI,CAAC;IACpD,mFAAmF;IACnF,QAAQ,CAAC,SAAS,CAAC,EAAE,gBAAgB,CAAC;IACtC,QAAQ,CAAC,SAAS,CAAC,EAAE,IAAI,CACvB,iBAAiB,EACf,UAAU,GACV,UAAU,GACV,WAAW,GACX,eAAe,GACf,mBAAmB,GACnB,cAAc,GACd,gBAAgB,GAChB,UAAU,CACb,CAAC;CACH;AAED,+GAA+G;AAC/G,wBAAgB,aAAa,IAAI,MAAM,CAItC;AAED,mFAAmF;AACnF,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAIhG;AAED,MAAM,WAAW,YAAY;IAC3B,uCAAuC;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,oGAAoG;IACpG,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,oDAAoD;IACpD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,oDAAoD;IACpD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;CAC/B,GAAG,YAAY,CAUf;AAcD;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAO9C;AAED,+GAA+G;AAC/G,wBAAgB,YAAY,CAC1B,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE;IAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC,CAAC,GAAG,SAAS,GACxF,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAgBxB;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,+BAyNlD"}