@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
@@ -1,30 +1,87 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useMemo } from 'react';
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { createIndex } from '@next-buildr/core';
3
+ import { useEffect, useMemo, useState } from 'react';
3
4
  import { useT } from '../messages/index.js';
4
5
  import { useEditor } from '../store/index.js';
5
- import { Button, Dialog } from '../ui/index.js';
6
+ import { Button, Dialog, Icon, SearchField, SegmentedControl } from '../ui/index.js';
6
7
  import { moveDestinations } from './destinations.js';
7
8
  import { useDragEngine } from './react.js';
9
+ const keyOf = (destination) => `${destination.parentId}/${destination.slot}`;
8
10
  /**
9
- * "Move to": the keyboard way to do what dragging does. It lists the places the rules allow (the
10
- * end of a slot of any node) and moves the nodes there with the same drop the pointer uses.
11
+ * "Move to": the keyboard way to do what dragging does. It lists the places the rules allow (a slot
12
+ * of any node, indented like the structure tree), lets the author pick the start or the end of it
13
+ * and moves the nodes there with the same drop the pointer uses.
11
14
  */
12
15
  export function MoveToDialog({ open, onOpenChange, ids }) {
13
16
  const t = useT();
14
17
  const store = useEditor();
15
18
  const engine = useDragEngine();
19
+ const [query, setQuery] = useState('');
20
+ const [chosen, setChosen] = useState();
21
+ const [position, setPosition] = useState('end');
16
22
  const destinations = useMemo(() => {
17
23
  if (!open)
18
24
  return [];
19
25
  return moveDestinations(store.getState().doc, store.registry, ids);
20
26
  }, [open, store, ids]);
27
+ useEffect(() => {
28
+ if (!open)
29
+ return;
30
+ setQuery('');
31
+ setChosen(undefined);
32
+ setPosition('end');
33
+ }, [open]);
21
34
  const label = (id) => {
22
35
  const node = store.getState().doc.nodes[id];
23
36
  return node?.name ?? store.registry.get(node?.type ?? '')?.label ?? node?.type ?? id;
24
37
  };
25
- return (_jsx(Dialog, { open: open, onOpenChange: onOpenChange, title: t('dnd.moveTo.title'), description: t('dnd.moveTo.description'), children: destinations.length === 0 ? (_jsx("p", { className: "bd-dnd-empty", children: t('dnd.moveTo.none') })) : (_jsx("ul", { className: "bd-dnd-destinations", children: destinations.map((destination) => (_jsx("li", { children: _jsxs(Button, { variant: "ghost", onClick: () => {
26
- const result = engine.drop({ kind: 'nodes', ids }, destination.target);
27
- if (result.ok)
28
- onOpenChange(false);
29
- }, children: [t('dnd.moveTo.into'), " ", label(destination.parentId), destination.slot === 'default' ? '' : ` › ${destination.slot}`] }) }, `${destination.parentId}/${destination.slot}`))) })) }));
38
+ const depth = (id) => {
39
+ const index = createIndex(store.getState().doc);
40
+ let level = 0;
41
+ for (let up = index.parentOf[id]; up !== undefined; up = index.parentOf[up])
42
+ level += 1;
43
+ return level;
44
+ };
45
+ const text = (destination) => `${label(destination.parentId)}${destination.slot === 'default' ? '' : ` › ${destination.slot}`}`;
46
+ const needle = query.trim().toLowerCase();
47
+ const shown = destinations.filter((destination) => needle === '' || text(destination).toLowerCase().includes(needle));
48
+ // Roving tabindex: the chosen row (or the first) is the list's one tab stop.
49
+ const stop = shown.some((d) => keyOf(d) === chosen) ? chosen : shown[0] && keyOf(shown[0]);
50
+ const selected = destinations.find((destination) => keyOf(destination) === chosen);
51
+ const move = (destination) => {
52
+ if (destination === undefined)
53
+ return;
54
+ const target = position === 'start' ? { ...destination.target, index: 0 } : destination.target;
55
+ const result = engine.drop({ kind: 'nodes', ids }, target);
56
+ if (result.ok)
57
+ onOpenChange(false);
58
+ };
59
+ const onKeyDown = (event, destination) => {
60
+ if (event.key === 'Enter') {
61
+ // Enter only selects; the Move button confirms.
62
+ event.preventDefault();
63
+ setChosen(keyOf(destination));
64
+ return;
65
+ }
66
+ const step = event.key === 'ArrowDown' ? 1 : event.key === 'ArrowUp' ? -1 : 0;
67
+ if (step === 0)
68
+ return;
69
+ event.preventDefault();
70
+ const options = [
71
+ ...(event.currentTarget.parentElement?.querySelectorAll('[role=option]') ??
72
+ []),
73
+ ];
74
+ const next = options[options.indexOf(event.currentTarget) + step];
75
+ next?.focus();
76
+ next?.click();
77
+ };
78
+ const first = ids.length === 1 && ids[0] !== undefined ? ids[0] : undefined;
79
+ return (_jsx(Dialog, { open: open, onOpenChange: onOpenChange, icon: "corner-left-up", title: first === undefined
80
+ ? t('dnd.moveTo.title')
81
+ : t('dnd.moveTo.named').replace('{name}', label(first)), description: t('dnd.moveTo.description'), footer: _jsxs(_Fragment, { children: [_jsx(Button, { onClick: () => onOpenChange(false), children: t('dialog.cancel') }), _jsx(Button, { variant: "primary", disabled: selected === undefined, onClick: () => move(selected), children: t('dnd.moveTo.confirm') })] }), children: destinations.length === 0 ? (_jsx("p", { className: "bd-dnd-empty", children: t('dnd.moveTo.none') })) : (_jsxs(_Fragment, { children: [_jsx(SearchField, { value: query, onChange: setQuery, label: t('dnd.moveTo.searchAria'), clearLabel: t('blocks.search.clear'), placeholder: t('dnd.moveTo.search') }), _jsx("div", { className: "bd-move-list", role: "listbox", "aria-label": t('dnd.moveTo.where'), children: shown.map((destination) => (_jsxs("button", { type: "button", role: "option", "aria-selected": keyOf(destination) === chosen, className: "bd-move-row", tabIndex: keyOf(destination) === stop ? 0 : -1, style: {
82
+ paddingInlineStart: `calc(var(--bd-space-3) + ${depth(destination.parentId)} * var(--bd-space-4))`,
83
+ }, onClick: () => setChosen(keyOf(destination)), onKeyDown: (event) => onKeyDown(event, destination), children: [_jsx(Icon, { name: "layers" }), _jsx("span", { className: "bd-move-row-text", children: text(destination) })] }, keyOf(destination)))) }), _jsxs("div", { className: "bd-move-position", children: [_jsx("span", { className: "bd-move-position-label", children: t('dnd.moveTo.position') }), _jsx(SegmentedControl, { className: "bd-move-segment", label: t('dnd.moveTo.position'), value: position, onValueChange: (next) => setPosition(next), options: [
84
+ { value: 'start', label: t('dnd.moveTo.start') },
85
+ { value: 'end', label: t('dnd.moveTo.end') },
86
+ ] })] })] })) }));
30
87
  }
@@ -1 +1 @@
1
- {"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../../src/dnd/react.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,YAAY,IAAI,iBAAiB,EACtC,KAAK,SAAS,EAOf,MAAM,OAAO,CAAC;AAIf,OAAO,EACL,KAAK,aAAa,EAElB,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,SAAS,EAEd,KAAK,WAAW,EACjB,MAAM,aAAa,CAAC;AA6BrB,iGAAiG;AACjG,wBAAgB,aAAa,IAAI,UAAU,CAE1C;AAED,yFAAyF;AACzF,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,CAAC,GAAG,CAAC,CAOlE;AAED,8FAA8F;AAC9F,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,aAAa,GAAG,SAAS,GAAG,IAAI,CAUhF;AAED,yEAAyE;AACzE,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,WAAW,GAAG,SAAS,GAAG,IAAI,CAW5E;AAED,wEAAwE;AACxE,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,GAAG,IAAI,CAQ/D;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;CAC9B;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,EAAE,iBAAiB,+BAiD3D;AA8BD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;CACzE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,CAAC,MAAM,QAAQ,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,WAKnF,iBAAiB,CAAC,WAAW,CAAC,UASzC;AAED,wFAAwF;AACxF,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAED;;;GAGG;AACH,wBAAgB,YAAY,IACxB,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC,GAChF,SAAS,CAYZ;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,IAAI,CA0B9E"}
1
+ {"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../../src/dnd/react.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,YAAY,IAAI,iBAAiB,EACtC,KAAK,SAAS,EAOf,MAAM,OAAO,CAAC;AAKf,OAAO,EACL,KAAK,aAAa,EAElB,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,SAAS,EAEd,KAAK,WAAW,EACjB,MAAM,aAAa,CAAC;AA6BrB,iGAAiG;AACjG,wBAAgB,aAAa,IAAI,UAAU,CAE1C;AAED,yFAAyF;AACzF,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,CAAC,GAAG,CAAC,CAOlE;AAED,8FAA8F;AAC9F,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,aAAa,GAAG,SAAS,GAAG,IAAI,CAUhF;AAED,yEAAyE;AACzE,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,WAAW,GAAG,SAAS,GAAG,IAAI,CAW5E;AAED,wEAAwE;AACxE,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,GAAG,IAAI,CAQ/D;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;CAC9B;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,EAAE,iBAAiB,+BAqD3D;AA8BD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;CACzE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,CAAC,MAAM,QAAQ,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,WAKnF,iBAAiB,CAAC,WAAW,CAAC,UASzC;AAED,wFAAwF;AACxF,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAED;;;GAGG;AACH,wBAAgB,YAAY,IACxB,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC,GAChF,SAAS,CAYZ;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,IAAI,CA0B9E"}
package/dist/dnd/react.js CHANGED
@@ -3,6 +3,7 @@ import { createContext, useCallback, useContext, useEffect, useMemo, useRef, use
3
3
  import { useStore } from 'zustand';
4
4
  import { useT } from '../messages/index.js';
5
5
  import { useEditor } from '../store/index.js';
6
+ import { useStructureLockedNotice } from '../ui/structure-locked.js';
6
7
  import { createDragEngine, IDLE_STATE, } from './engine.js';
7
8
  import { autoscrollDelta } from './geometry.js';
8
9
  const IDLE_STORE = { getState: () => IDLE_STATE };
@@ -68,12 +69,16 @@ export function useRegisterDragHost(host) {
68
69
  */
69
70
  export function DragProvider({ children }) {
70
71
  const store = useEditor();
72
+ const notifyLocked = useStructureLockedNotice();
73
+ const lockedRef = useRef(notifyLocked);
74
+ lockedRef.current = notifyLocked;
71
75
  const value = useMemo(() => {
72
76
  const registry = { canvas: null, tree: null, host: null };
73
77
  const engine = createDragEngine({
74
78
  store,
75
79
  host: () => registry.host ?? undefined,
76
80
  surfaces: { canvas: () => registry.canvas?.(), tree: () => registry.tree?.() },
81
+ onLocked: (ids) => lockedRef.current(ids),
77
82
  });
78
83
  return { engine, registry };
79
84
  }, [store]);
@@ -0,0 +1,22 @@
1
+ import type { BuilderDocument, RegistryManifest } from '@next-buildr/core';
2
+ import { type Translate } from '../messages/index.tsx';
3
+ import type { IssueItem } from '../panels/issues/collect.ts';
4
+ export interface IssueLocalizerInput {
5
+ readonly t: Translate;
6
+ /** The interface language. */
7
+ readonly uiLocale: string;
8
+ readonly doc: BuilderDocument;
9
+ /** The manifest with its labels in the interface language. */
10
+ readonly manifest?: RegistryManifest | undefined;
11
+ /** The manifest in the application's own words (what a check's message quotes). */
12
+ readonly source?: RegistryManifest | undefined;
13
+ /** The names of the content languages the locale config gave, used when the runtime knows none. */
14
+ readonly intl?: Readonly<Record<string, string>> | undefined;
15
+ }
16
+ /**
17
+ * The finding with its message (and help) in the interface language, found by its code with the
18
+ * check's own message as the fallback and the values filled in. Only the text changes: the code,
19
+ * the node and the fix stay as the check reported them.
20
+ */
21
+ export declare function localizeIssue(item: IssueItem, input: IssueLocalizerInput): IssueItem;
22
+ //# sourceMappingURL=diagnostics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/i18n/diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAgC,KAAK,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACrF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAyF7D,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC;IACtB,8BAA8B;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,eAAe,CAAC;IAC9B,8DAA8D;IAC9D,QAAQ,CAAC,QAAQ,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;IACjD,mFAAmF;IACnF,QAAQ,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAC/C,mGAAmG;IACnG,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC;CAC9D;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,mBAAmB,GAAG,SAAS,CAwCpF"}
@@ -0,0 +1,153 @@
1
+ import { interpolate } from '../messages/index.js';
2
+ import { localeName } from './locale-name.js';
3
+ const count = (value) => typeof value === 'number' ? value : undefined;
4
+ const text = (value) => typeof value === 'string' ? value : undefined;
5
+ /**
6
+ * The core checks report English prose and, for the accessibility rules, no parameters; each
7
+ * message is recognised by the rule that raised it and its fixed wording, with the values pulled
8
+ * out of the wording. A finding that is not recognised keeps the check's own message.
9
+ */
10
+ const A11Y = {
11
+ 'image-alt': [exact('This image has no alternative text.', 'image-alt')],
12
+ 'heading-order': [
13
+ (message) => {
14
+ const found = /^Heading level jumps from (\d) to (\d)\.$/.exec(message);
15
+ return found
16
+ ? { id: 'heading-jump', params: { from: found[1] ?? '', to: found[2] ?? '' } }
17
+ : undefined;
18
+ },
19
+ exact('The page layout already renders the H1; use a lower level.', 'heading-layout-h1'),
20
+ exact('The page has no H1 heading.', 'heading-no-h1'),
21
+ exact('The page has more than one H1 heading.', 'heading-many-h1'),
22
+ ],
23
+ 'empty-heading': [exact('This heading is empty.', 'empty-heading')],
24
+ 'button-name': [exact('This button has no accessible name.', 'button-name')],
25
+ 'link-name': [exact('This link has no accessible name.', 'link-name')],
26
+ 'link-href': [exact('This link does not point anywhere.', 'link-href')],
27
+ 'new-tab-link': [exact('This link opens in a new tab.', 'new-tab-link')],
28
+ 'form-label': [exact('This form field has no label.', 'form-label')],
29
+ 'form-submit': [exact('This form has no submit button.', 'form-submit')],
30
+ 'nested-interactive': [
31
+ (message) => {
32
+ const found = /^An interactive element cannot be inside another one \((.*)\)\.$/.exec(message);
33
+ return found ? { id: 'nested-interactive', params: { type: found[1] ?? '' } } : undefined;
34
+ },
35
+ ],
36
+ 'duplicate-anchor': [
37
+ (message) => {
38
+ const found = /^The anchor "(.*)" is used more than once\.$/.exec(message);
39
+ return found ? { id: 'duplicate-anchor', params: { anchor: found[1] ?? '' } } : undefined;
40
+ },
41
+ ],
42
+ 'list-structure': [exact('A list can only contain list items.', 'list-structure')],
43
+ 'landmark-unique': [
44
+ exact('A page can have only one main landmark.', 'landmark-main'),
45
+ exact('There are several navigation landmarks; give each a name.', 'landmark-nav'),
46
+ ],
47
+ 'accordion-structure': [exact('This accordion item has no summary.', 'accordion-structure')],
48
+ 'missing-translation': [
49
+ (message) => {
50
+ const found = /^"(.*)" is not translated to (.*)\.$/.exec(message);
51
+ return found
52
+ ? { id: 'missing-translation', params: { label: found[1] ?? '', language: found[2] ?? '' } }
53
+ : undefined;
54
+ },
55
+ ],
56
+ };
57
+ function exact(english, id) {
58
+ return (message) => (message === english ? { id } : undefined);
59
+ }
60
+ /** The fixed help sentences of the rules, by their English wording. */
61
+ const HELP = {
62
+ 'Describe the image, or mark it as decorative if it adds no information.': 'image-alt.help',
63
+ 'Do not skip levels; the size of a heading is a style, not its level.': 'heading-jump.help',
64
+ 'Give it a label, or an accessible name if it only shows an icon.': 'name.help',
65
+ 'Set a destination, or use a button if it triggers an action.': 'link-href.help',
66
+ 'A visually hidden notice and rel="noopener noreferrer" are added automatically.': 'new-tab-link.help',
67
+ 'Every field needs a label; hide it visually if the design has none.': 'form-label.help',
68
+ 'Move it out, or remove one of them.': 'nested-interactive.help',
69
+ 'Set an accessible name so assistive technology can tell them apart.': 'landmark-nav.help',
70
+ 'The default-language text is shown until it is translated.': 'missing-translation.fallback',
71
+ 'Nothing is shown in this language until it is translated.': 'missing-translation.empty',
72
+ };
73
+ /**
74
+ * The finding with its message (and help) in the interface language, found by its code with the
75
+ * check's own message as the fallback and the values filled in. Only the text changes: the code,
76
+ * the node and the fix stay as the check reported them.
77
+ */
78
+ export function localizeIssue(item, input) {
79
+ const { t, doc } = input;
80
+ const has = (id) => `diagnostic.${id}`;
81
+ const typeLabel = (type) => input.manifest?.components[type]?.label ?? type;
82
+ const nodeType = item.nodeId === undefined ? undefined : doc.nodes[item.nodeId]?.type;
83
+ let match;
84
+ if (item.source === 'a11y') {
85
+ for (const rule of A11Y[item.code] ?? []) {
86
+ match = rule(item.message);
87
+ if (match !== undefined)
88
+ break;
89
+ }
90
+ if (match?.id === 'nested-interactive' && match.params !== undefined) {
91
+ match = { id: match.id, params: { type: typeLabel(String(match.params['type'])) } };
92
+ }
93
+ if (match?.id === 'missing-translation' && match.params !== undefined) {
94
+ const english = String(match.params['label']);
95
+ const meta = nodeType === undefined ? undefined : input.source?.components[nodeType];
96
+ const prop = Object.entries(meta?.props ?? {}).find(([name, def]) => (def.label ?? name) === english)?.[0];
97
+ const label = (nodeType === undefined || prop === undefined
98
+ ? undefined
99
+ : input.manifest?.components[nodeType]?.props[prop]?.label) ?? english;
100
+ const code = item.locale ?? String(match.params['language']);
101
+ match = {
102
+ id: match.id,
103
+ params: { label, language: localeName(code, input.uiLocale, input.intl?.[code]) },
104
+ };
105
+ }
106
+ }
107
+ else if (item.source === 'validation') {
108
+ match = fromValidation(item, typeLabel(nodeType ?? ''), nodeType);
109
+ }
110
+ const helpId = item.help === undefined ? undefined : HELP[item.help];
111
+ const message = match === undefined ? item.message : interpolate(t(has(match.id)), match.params ?? {});
112
+ const help = helpId === undefined || item.help === undefined ? item.help : t(has(helpId));
113
+ return { ...item, message, ...(help === undefined ? {} : { help }) };
114
+ }
115
+ /** The structural findings of the document check carry their values in `details`, which this reads off the message's source. */
116
+ function fromValidation(item, label, nodeType) {
117
+ const details = item.details ?? {};
118
+ const type = text(details['type']) ?? nodeType ?? '';
119
+ switch (item.code) {
120
+ case 'validation.unknown-component':
121
+ return { id: 'unknown-component', params: { type } };
122
+ case 'validation.missing-component-version':
123
+ return { id: 'missing-component-version', params: { type } };
124
+ case 'validation.component-version-ahead':
125
+ case 'validation.component-outdated': {
126
+ const recorded = count(details['recorded']);
127
+ const known = count(details['known']);
128
+ if (recorded === undefined || known === undefined)
129
+ return undefined;
130
+ return { id: item.code.slice('validation.'.length), params: { type, recorded, known } };
131
+ }
132
+ case 'validation.unknown-slot': {
133
+ const slot = text(details['slot']);
134
+ return slot === undefined ? undefined : { id: 'unknown-slot', params: { type: label, slot } };
135
+ }
136
+ case 'validation.slot-min': {
137
+ const slot = text(details['slot']);
138
+ const min = count(details['min']);
139
+ return slot === undefined || min === undefined
140
+ ? undefined
141
+ : { id: 'slot-min', params: { slot, min } };
142
+ }
143
+ case 'validation.slot-max': {
144
+ const slot = text(details['slot']);
145
+ const max = count(details['max']);
146
+ return slot === undefined || max === undefined
147
+ ? undefined
148
+ : { id: 'slot-max', params: { slot, max } };
149
+ }
150
+ default:
151
+ return undefined;
152
+ }
153
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=diagnostics.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.test.d.ts","sourceRoot":"","sources":["../../src/i18n/diagnostics.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,74 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { createTranslator } from '../messages/index.js';
3
+ import { localizeIssue } from './diagnostics.js';
4
+ import { localizeManifest } from './localize-manifest.js';
5
+ const source = {
6
+ hash: 'x',
7
+ templates: {},
8
+ components: {
9
+ 'buildr/text': {
10
+ type: 'buildr/text',
11
+ label: 'Text',
12
+ props: { text: { kind: 'text', label: 'Text', localizable: true, default: '', accepts: [] } },
13
+ slots: {},
14
+ },
15
+ },
16
+ };
17
+ const doc = { nodes: { n1: { id: 'n1', type: 'buildr/text' } } };
18
+ const item = (extra) => ({
19
+ key: 'k',
20
+ source: 'a11y',
21
+ severity: 'warning',
22
+ blocking: false,
23
+ nodeId: 'n1',
24
+ ...extra,
25
+ });
26
+ const input = (uiLocale) => ({
27
+ t: createTranslator(uiLocale),
28
+ uiLocale,
29
+ doc,
30
+ source,
31
+ manifest: localizeManifest(source, uiLocale),
32
+ });
33
+ describe('localizeIssue', () => {
34
+ it('translates an accessibility message and its help by rule code', () => {
35
+ const out = localizeIssue(item({
36
+ code: 'heading-order',
37
+ message: 'The page layout already renders the H1; use a lower level.',
38
+ }), input('pl'));
39
+ expect(out.message).toBe('Układ strony już wyświetla nagłówek H1; użyj niższego poziomu.');
40
+ const jump = localizeIssue(item({
41
+ code: 'heading-order',
42
+ message: 'Heading level jumps from 2 to 4.',
43
+ help: 'Do not skip levels; the size of a heading is a style, not its level.',
44
+ }), input('pl'));
45
+ expect(jump.message).toBe('Poziom nagłówka przeskakuje z 2 na 4.');
46
+ expect(jump.help).toContain('Nie pomijaj poziomów');
47
+ });
48
+ it('names the prop and the language in a missing translation', () => {
49
+ const out = localizeIssue(item({
50
+ code: 'missing-translation',
51
+ message: '"Text" is not translated to en.',
52
+ locale: 'en',
53
+ help: 'The default-language text is shown until it is translated.',
54
+ }), input('pl'));
55
+ expect(out.message).toBe('Pole „Tekst” nie jest przetłumaczone na język: angielski.');
56
+ expect(out.help).toBe('Do czasu tłumaczenia widoczny jest tekst w języku domyślnym.');
57
+ });
58
+ it('translates document findings from their details', () => {
59
+ const out = localizeIssue(item({
60
+ source: 'validation',
61
+ code: 'validation.slot-min',
62
+ message: '"default" needs at least 2 item(s).',
63
+ details: { slot: 'default', min: 2 },
64
+ }), input('pl'));
65
+ expect(out.message).toBe('Miejsce „default”: minimalna liczba elementów to 2.');
66
+ });
67
+ it('keeps the check own message for an unknown code and for English', () => {
68
+ const unknown = item({ code: 'x-unknown', message: 'Something odd.' });
69
+ expect(localizeIssue(unknown, input('pl')).message).toBe('Something odd.');
70
+ const known = item({ code: 'image-alt', message: 'This image has no alternative text.' });
71
+ expect(localizeIssue(known, input('en')).message).toBe('This image has no alternative text.');
72
+ expect(localizeIssue(known, input('pl')).code).toBe('image-alt');
73
+ });
74
+ });
@@ -0,0 +1,20 @@
1
+ /** The shape of a language's labels for what a component manifest carries in English. */
2
+ export interface LabelCatalog {
3
+ /** Component type id -> name. */
4
+ readonly components: Readonly<Record<string, string>>;
5
+ /** Component type id -> short description. */
6
+ readonly descriptions: Readonly<Record<string, string>>;
7
+ /** Template id -> name. */
8
+ readonly templates: Readonly<Record<string, string>>;
9
+ /** The manifest's English slot label -> label. */
10
+ readonly slots: Readonly<Record<string, string>>;
11
+ /** Prop name -> label, for every component. */
12
+ readonly commonProps: Readonly<Record<string, string>>;
13
+ /** Component type id -> prop name -> label; wins over `commonProps`. */
14
+ readonly props: Readonly<Record<string, Readonly<Record<string, string>>>>;
15
+ /** Prop name -> option value -> label. */
16
+ readonly commonOptions: Readonly<Record<string, Readonly<Record<string, string>>>>;
17
+ /** `<type id>/<prop name>` -> option value -> label; wins over `commonOptions`. */
18
+ readonly options: Readonly<Record<string, Readonly<Record<string, string>>>>;
19
+ }
20
+ //# sourceMappingURL=label-catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"label-catalog.d.ts","sourceRoot":"","sources":["../../src/i18n/label-catalog.ts"],"names":[],"mappings":"AAAA,yFAAyF;AACzF,MAAM,WAAW,YAAY;IAC3B,iCAAiC;IACjC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACtD,8CAA8C;IAC9C,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACxD,2BAA2B;IAC3B,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACrD,kDAAkD;IAClD,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACjD,+CAA+C;IAC/C,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACvD,wEAAwE;IACxE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3E,0CAA0C;IAC1C,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACnF,mFAAmF;IACnF,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;CAC9E"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,7 @@
1
+ /**
2
+ * The name of a content language ("angielski" for `en` in a Polish interface), from the
3
+ * interface language's own data. `fallback` (the name the locale config gave, else the code)
4
+ * stands in for a code the runtime has no name for.
5
+ */
6
+ export declare function localeName(code: string, uiLocale: string, fallback?: string): string;
7
+ //# sourceMappingURL=locale-name.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locale-name.d.ts","sourceRoot":"","sources":["../../src/i18n/locale-name.ts"],"names":[],"mappings":"AAeA;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAQpF"}
@@ -0,0 +1,31 @@
1
+ const cache = new Map();
2
+ function names(uiLocale) {
3
+ const cached = cache.get(uiLocale);
4
+ if (cached !== undefined)
5
+ return cached;
6
+ let created = null;
7
+ try {
8
+ created = new Intl.DisplayNames([uiLocale], { type: 'language' });
9
+ }
10
+ catch {
11
+ created = null; // an unknown interface language tag
12
+ }
13
+ cache.set(uiLocale, created);
14
+ return created;
15
+ }
16
+ /**
17
+ * The name of a content language ("angielski" for `en` in a Polish interface), from the
18
+ * interface language's own data. `fallback` (the name the locale config gave, else the code)
19
+ * stands in for a code the runtime has no name for.
20
+ */
21
+ export function localeName(code, uiLocale, fallback) {
22
+ try {
23
+ const name = names(uiLocale)?.of(code);
24
+ if (name !== undefined && name !== code)
25
+ return name;
26
+ }
27
+ catch {
28
+ // an invalid language tag: use the fallback
29
+ }
30
+ return fallback ?? code;
31
+ }
@@ -0,0 +1,11 @@
1
+ import type { RegistryManifest } from '@next-buildr/core';
2
+ import type { LabelCatalog } from './label-catalog.ts';
3
+ /** The label catalog of a UI language (`pl-PL` reads as `pl`); `undefined` for English and unknown languages. */
4
+ export declare function labelCatalog(locale: string): LabelCatalog | undefined;
5
+ /**
6
+ * The manifest with its English display text (component, template, prop, option and slot labels)
7
+ * replaced by the UI language's own where the catalog has one; everything else, and every id and
8
+ * value, is untouched. A language with no catalog gets the manifest itself.
9
+ */
10
+ export declare function localizeManifest(manifest: RegistryManifest, locale: string): RegistryManifest;
11
+ //# sourceMappingURL=localize-manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localize-manifest.d.ts","sourceRoot":"","sources":["../../src/i18n/localize-manifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA0B,gBAAgB,EAAW,MAAM,mBAAmB,CAAC;AAE3F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAIvD,iHAAiH;AACjH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAGrE;AAoDD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAyB7F"}
@@ -0,0 +1,78 @@
1
+ import { plLabels } from '../messages/pl/componentLabels.js';
2
+ const catalogs = { pl: plLabels };
3
+ /** The label catalog of a UI language (`pl-PL` reads as `pl`); `undefined` for English and unknown languages. */
4
+ export function labelCatalog(locale) {
5
+ const base = locale.split('-', 1)[0] ?? '';
6
+ return Object.hasOwn(catalogs, base) ? catalogs[base] : undefined;
7
+ }
8
+ const pick = (record, key) => record !== undefined && Object.hasOwn(record, key) ? record[key] : undefined;
9
+ function localizeProp(catalog, type, name, def) {
10
+ const label = pick(pick(catalog.props, type), name) ?? pick(catalog.commonProps, name);
11
+ let next = label === undefined ? def : { ...def, label };
12
+ if (def.kind === 'select') {
13
+ const known = pick(catalog.options, `${type}/${name}`) ?? pick(catalog.commonOptions, name);
14
+ if (known !== undefined) {
15
+ const labels = { ...(def.optionLabels ?? {}) };
16
+ for (const option of def.options) {
17
+ const text = pick(known, String(option));
18
+ if (text !== undefined)
19
+ labels[String(option)] = text;
20
+ else
21
+ delete labels[String(option)];
22
+ }
23
+ next = { ...next, optionLabels: labels };
24
+ }
25
+ }
26
+ return next;
27
+ }
28
+ function localizeComponent(catalog, meta) {
29
+ const label = pick(catalog.components, meta.type);
30
+ const description = pick(catalog.descriptions, meta.type);
31
+ const props = Object.fromEntries(Object.entries(meta.props).map(([name, def]) => [
32
+ name,
33
+ localizeProp(catalog, meta.type, name, def),
34
+ ]));
35
+ const slots = meta.slots === undefined
36
+ ? undefined
37
+ : Object.fromEntries(Object.entries(meta.slots).map(([name, slot]) => {
38
+ const text = slot.label === undefined ? undefined : pick(catalog.slots, slot.label);
39
+ return [name, text === undefined ? slot : { ...slot, label: text }];
40
+ }));
41
+ return {
42
+ ...meta,
43
+ ...(label === undefined ? {} : { label }),
44
+ ...(description === undefined ? {} : { description }),
45
+ props,
46
+ ...(slots === undefined ? {} : { slots }),
47
+ };
48
+ }
49
+ const cache = new WeakMap();
50
+ /**
51
+ * The manifest with its English display text (component, template, prop, option and slot labels)
52
+ * replaced by the UI language's own where the catalog has one; everything else, and every id and
53
+ * value, is untouched. A language with no catalog gets the manifest itself.
54
+ */
55
+ export function localizeManifest(manifest, locale) {
56
+ const catalog = labelCatalog(locale);
57
+ if (catalog === undefined)
58
+ return manifest;
59
+ const base = locale.split('-', 1)[0] ?? locale;
60
+ const byLocale = cache.get(manifest) ?? new Map();
61
+ cache.set(manifest, byLocale);
62
+ const cached = byLocale.get(base);
63
+ if (cached !== undefined)
64
+ return cached;
65
+ const localized = {
66
+ ...manifest,
67
+ components: Object.fromEntries(Object.entries(manifest.components).map(([type, meta]) => [
68
+ type,
69
+ localizeComponent(catalog, meta),
70
+ ])),
71
+ templates: Object.fromEntries(Object.entries(manifest.templates).map(([id, template]) => {
72
+ const label = pick(catalog.templates, id);
73
+ return [id, label === undefined ? template : { ...template, label }];
74
+ })),
75
+ };
76
+ byLocale.set(base, localized);
77
+ return localized;
78
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=localize-manifest.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localize-manifest.test.d.ts","sourceRoot":"","sources":["../../src/i18n/localize-manifest.test.ts"],"names":[],"mappings":""}