@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,7 +2,7 @@ import type { StylePropertyDef, Theme } from '@next-buildr/core';
2
2
  /**
3
3
  * The theme's tokens for a property, each with what it stands for: a swatch for a colour, the
4
4
  * value for a length or a font. Choosing one writes its `$scale.name` reference, exactly as typing
5
- * it would.
5
+ * it would. The typeface list is a combobox: a filter field narrows it, each name in its own face.
6
6
  */
7
7
  export declare function TokenPicker(props: {
8
8
  readonly def: StylePropertyDef;
@@ -1 +1 @@
1
- {"version":3,"file":"token-picker.d.ts","sourceRoot":"","sources":["../../../../src/panels/inspector/styles/token-picker.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAMjE;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE;IACjC,QAAQ,CAAC,GAAG,EAAE,gBAAgB,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC,sCA2CA"}
1
+ {"version":3,"file":"token-picker.d.ts","sourceRoot":"","sources":["../../../../src/panels/inspector/styles/token-picker.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAMjE;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE;IACjC,QAAQ,CAAC,GAAG,EAAE,gBAAgB,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC,sCAmEA"}
@@ -1,23 +1,30 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useState } from 'react';
3
3
  import { useT } from '../../../messages/index.js';
4
- import { Button, ColorSwatch, Icon, Popover } from '../../../ui/index.js';
4
+ import { Button, ColorSwatch, Icon, Popover, SearchField } from '../../../ui/index.js';
5
5
  import { tokenEntries } from './model.js';
6
6
  /**
7
7
  * The theme's tokens for a property, each with what it stands for: a swatch for a colour, the
8
8
  * value for a length or a font. Choosing one writes its `$scale.name` reference, exactly as typing
9
- * it would.
9
+ * it would. The typeface list is a combobox: a filter field narrows it, each name in its own face.
10
10
  */
11
11
  export function TokenPicker(props) {
12
12
  const t = useT();
13
13
  const [open, setOpen] = useState(false);
14
+ const [filter, setFilter] = useState('');
14
15
  const entries = tokenEntries(props.def, props.theme);
15
16
  if (entries.length === 0)
16
17
  return null;
17
18
  const isColor = props.def.grammar.kind === 'color';
19
+ const isFont = props.def.name === 'fontFamily';
20
+ const needle = filter.trim().toLocaleLowerCase();
21
+ const shown = isFont
22
+ ? entries.filter((entry) => entry.name.toLocaleLowerCase().includes(needle))
23
+ : entries;
18
24
  const pick = (entry) => {
19
25
  props.onPick(entry.ref);
20
26
  setOpen(false);
27
+ setFilter('');
21
28
  };
22
- return (_jsx(Popover, { open: open, onOpenChange: setOpen, trigger: _jsx(Button, { variant: "ghost", className: "bd-icon-button bd-token-trigger", disabled: props.disabled, "aria-label": `${t('style.tokens')}: ${props.label}`, children: _jsx(Icon, { name: "chevron-down" }) }), children: _jsx("ul", { className: "bd-token-list", "aria-label": `${t('style.tokens')}: ${props.label}`, children: entries.map((entry) => (_jsx("li", { children: _jsxs("button", { type: "button", className: "bd-token", "aria-pressed": props.current === entry.ref, onClick: () => pick(entry), children: [isColor ? _jsx(ColorSwatch, { color: entry.value }) : null, _jsx("span", { className: "bd-token-name", children: entry.name }), isColor ? null : _jsx("span", { className: "bd-token-value", children: entry.value })] }) }, entry.ref))) }) }));
29
+ return (_jsxs(Popover, { open: open, onOpenChange: setOpen, trigger: _jsx(Button, { variant: "ghost", className: "bd-icon-button bd-token-trigger", disabled: props.disabled, "aria-label": `${t('style.tokens')}: ${props.label}`, children: _jsx(Icon, { name: "chevron-down" }) }), children: [isFont ? (_jsx(SearchField, { value: filter, onChange: setFilter, label: t('styleField.font.search'), clearLabel: t('insert.clear'), placeholder: t('styleField.font.search') })) : null, _jsx("ul", { className: "bd-token-list", "aria-label": isFont ? t('styleField.font.list') : `${t('style.tokens')}: ${props.label}`, children: shown.map((entry) => (_jsx("li", { children: _jsxs("button", { type: "button", className: "bd-token", "aria-pressed": props.current === entry.ref, onClick: () => pick(entry), children: [isColor ? _jsx(ColorSwatch, { color: entry.value }) : null, _jsx("span", { className: "bd-token-name", style: isFont ? { fontFamily: entry.value } : undefined, children: entry.name }), isColor ? null : _jsx("span", { className: "bd-token-value", children: entry.value })] }) }, entry.ref))) })] }));
23
30
  }
@@ -0,0 +1,116 @@
1
+ import { type Theme } from '@next-buildr/core';
2
+ import { type ReactNode } from 'react';
3
+ /**
4
+ * The 3x3 pad (a radio group) with a caption naming the chosen cell. All nine choices are
5
+ * existing background-position grammar keywords; the caller decides which commands a pick runs.
6
+ */
7
+ export declare function AlignmentPad(props: {
8
+ readonly value: string;
9
+ readonly label: string;
10
+ readonly disabled: boolean;
11
+ readonly onPick: (value: string) => void;
12
+ /** A second line under the caption, saying what the pad does. */
13
+ readonly hint?: string | undefined;
14
+ /** The pad for a vertical layout: the chosen mark is drawn as a bar. */
15
+ readonly column?: boolean;
16
+ }): import("react").JSX.Element;
17
+ /**
18
+ * A range input whose value shows in a bubble above the thumb while it is dragged or focused. The
19
+ * fill is the share of the range; it only reports text, which the caller still checks.
20
+ */
21
+ export declare function RangeSlider(props: {
22
+ readonly value: number;
23
+ readonly min: number;
24
+ readonly max: number;
25
+ readonly step: number;
26
+ readonly label: string;
27
+ readonly disabled: boolean;
28
+ readonly unit?: string;
29
+ /** What the bubble and the spoken value show for a position; the value and unit by default. */
30
+ readonly format?: (value: number) => string;
31
+ /** The slider rests at a fallback while no value is set: shown dimmed. */
32
+ readonly unset?: boolean;
33
+ readonly onChange: (text: string) => void;
34
+ }): import("react").JSX.Element;
35
+ /**
36
+ * The colour control: a swatch that opens the palette popover, the colour as text (a hex code or a
37
+ * `$color.name` token), and whatever `trailing` adds (the token picker). The text is the caller's
38
+ * draft; nothing here decides what is valid, so an invalid code never leaves the caller.
39
+ */
40
+ export declare function ColorField(props: {
41
+ readonly id?: string | undefined;
42
+ readonly text: string;
43
+ /** The painted colour of the swatch, resolved from tokens by the caller. */
44
+ readonly swatch: string | undefined;
45
+ readonly theme: Theme;
46
+ /** The name of the swatch button. */
47
+ readonly label: string;
48
+ readonly ariaLabel?: string | undefined;
49
+ readonly disabled: boolean;
50
+ readonly invalid?: boolean;
51
+ readonly describedBy?: string | undefined;
52
+ readonly onText: (text: string) => void;
53
+ readonly onSwatch: (value: string) => void;
54
+ readonly onBlur?: () => void;
55
+ readonly trailing?: ReactNode;
56
+ /** The colour that applies while none is set (the theme's text colour): hinted, never stored. */
57
+ readonly fallback?: {
58
+ readonly text: string;
59
+ readonly color: string;
60
+ } | undefined;
61
+ }): import("react").JSX.Element;
62
+ /**
63
+ * The small "restore default" icon of a field that has an override at this layer; an empty slot of
64
+ * the same width otherwise, so the row does not move when the override appears.
65
+ */
66
+ export declare function ResetField(props: {
67
+ readonly label: string;
68
+ readonly changed: boolean;
69
+ readonly disabled: boolean;
70
+ readonly onReset: () => void;
71
+ }): import("react").JSX.Element;
72
+ interface ShadowLayer {
73
+ readonly inset: boolean;
74
+ readonly x: string;
75
+ readonly y: string;
76
+ readonly blur: string;
77
+ readonly spread: string;
78
+ readonly color: string;
79
+ }
80
+ /** The layers of a shadow value, resolving a `$shadow.name` token through the theme. */
81
+ export declare function shadowLayers(theme: Theme, value: string): readonly ShadowLayer[];
82
+ /**
83
+ * One card per shadow layer (offset, blur, spread, colour, inset). With `onChange` the cards edit
84
+ * and a remove and an add button appear (up to the four layers the grammar allows); without it the
85
+ * cards only show the layers of the chosen theme token. A theme token is shown through its layers;
86
+ * the first edit writes them out as a custom shadow. The caller checks the text before dispatching.
87
+ */
88
+ export declare function ShadowLayers(props: {
89
+ readonly theme: Theme;
90
+ readonly value: string;
91
+ readonly disabled: boolean;
92
+ readonly onChange?: ((value: string) => void) | undefined;
93
+ }): import("react").JSX.Element | null;
94
+ /** Presets use the host theme's tokens, never an arbitrary CSS shadow string. */
95
+ export declare function ShadowPresets(props: {
96
+ readonly theme: Theme;
97
+ readonly value: string;
98
+ readonly disabled: boolean;
99
+ readonly onPick: (value: string) => void;
100
+ }): import("react").JSX.Element;
101
+ /**
102
+ * The shadow editor: ready shadows, a live preview, and the layer cards. `onCustom` is given only
103
+ * when the property can store a custom shadow; today it takes theme tokens and `none`, so the
104
+ * cards show the layers of the chosen token and cannot add one.
105
+ */
106
+ export declare function ShadowEditor(props: {
107
+ readonly theme: Theme;
108
+ readonly value: string;
109
+ readonly disabled: boolean;
110
+ readonly onPick: (value: string) => void;
111
+ readonly onCustom?: ((value: string) => void) | undefined;
112
+ /** Draw the layer cards (default). The Style tab edits the geometry with sliders instead. */
113
+ readonly layers?: boolean;
114
+ }): import("react").JSX.Element;
115
+ export {};
116
+ //# sourceMappingURL=widgets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"widgets.d.ts","sourceRoot":"","sources":["../../../../src/panels/inspector/styles/widgets.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAA0C,KAAK,SAAS,EAAoB,MAAM,OAAO,CAAC;AAiFjG;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,iEAAiE;IACjE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,wEAAwE;IACxE,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B,+BAiDA;AAID;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE;IACjC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,+FAA+F;IAC/F,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAC5C,0EAA0E;IAC1E,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3C,+BA2BA;AAeD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE;IAChC,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,4EAA4E;IAC5E,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,qCAAqC;IACrC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;IAC9B,iGAAiG;IACjG,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;CACnF,+BAuCA;AAID;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAC9B,+BAaA;AAUD,UAAU,WAAW;IACnB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAwCD,wFAAwF;AACxF,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,WAAW,EAAE,CAUhF;AAgFD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE;IAClC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CAC3D,sCAuFA;AAED,iFAAiF;AACjF,wBAAgB,aAAa,CAAC,KAAK,EAAE;IACnC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1C,+BAiDA;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE;IAClC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC1D,6FAA6F;IAC7F,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B,+BAuBA"}
@@ -0,0 +1,304 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { resolveTokenRef } from '@next-buildr/core';
3
+ import { useRef, useState } from 'react';
4
+ import { interpolate, useT } from '../../../messages/index.js';
5
+ import { IconButton, Input } from '../../../ui/index.js';
6
+ import { StyleColorInput as ColorInput } from './color-input.js';
7
+ // --- radio keyboard navigation ---------------------------------------------------------------------
8
+ /**
9
+ * Roving tabindex and arrow keys for a radio group of buttons (WAI-ARIA radio pattern): the checked
10
+ * radio, or the first, is the tab stop; arrows move focus and selection and wrap. With `columns`
11
+ * the group is a grid: Left/Right within a row, Up/Down between rows. Home and End jump to the ends.
12
+ */
13
+ function useRadioNav(count, columns, checked, select) {
14
+ const refs = useRef([]);
15
+ const stop = checked >= 0 ? checked : 0;
16
+ const move = (from, event) => {
17
+ const rows = Math.ceil(count / columns);
18
+ const row = Math.floor(from / columns);
19
+ const col = from % columns;
20
+ let next;
21
+ switch (event.key) {
22
+ case 'ArrowRight':
23
+ next = columns === 1 ? (from + 1) % count : row * columns + ((col + 1) % columns);
24
+ break;
25
+ case 'ArrowLeft':
26
+ next =
27
+ columns === 1
28
+ ? (from + count - 1) % count
29
+ : row * columns + ((col + columns - 1) % columns);
30
+ break;
31
+ case 'ArrowDown':
32
+ next = columns === 1 ? (from + 1) % count : ((row + 1) % rows) * columns + col;
33
+ break;
34
+ case 'ArrowUp':
35
+ next =
36
+ columns === 1 ? (from + count - 1) % count : ((row + rows - 1) % rows) * columns + col;
37
+ break;
38
+ case 'Home':
39
+ next = 0;
40
+ break;
41
+ case 'End':
42
+ next = count - 1;
43
+ break;
44
+ default:
45
+ return;
46
+ }
47
+ event.preventDefault();
48
+ if (next >= count)
49
+ return;
50
+ refs.current[next]?.focus();
51
+ select(next);
52
+ };
53
+ return (index) => ({
54
+ ref: (element) => {
55
+ refs.current[index] = element;
56
+ },
57
+ tabIndex: index === stop ? 0 : -1,
58
+ onKeyDown: (event) => move(index, event),
59
+ });
60
+ }
61
+ // --- alignment pad -------------------------------------------------------------------------------
62
+ const POSITIONS = [
63
+ 'top left',
64
+ 'top',
65
+ 'top right',
66
+ 'left',
67
+ 'center',
68
+ 'right',
69
+ 'bottom left',
70
+ 'bottom',
71
+ 'bottom right',
72
+ ];
73
+ const capitalise = (text) => text.charAt(0).toLocaleUpperCase() + text.slice(1);
74
+ /**
75
+ * The 3x3 pad (a radio group) with a caption naming the chosen cell. All nine choices are
76
+ * existing background-position grammar keywords; the caller decides which commands a pick runs.
77
+ */
78
+ export function AlignmentPad(props) {
79
+ const t = useT();
80
+ const names = [
81
+ t('style.corner.topLeft'),
82
+ t('style.side.top'),
83
+ t('style.corner.topRight'),
84
+ t('style.side.left'),
85
+ t('style.position.center'),
86
+ t('style.side.right'),
87
+ t('style.corner.bottomLeft'),
88
+ t('style.side.bottom'),
89
+ t('style.corner.bottomRight'),
90
+ ];
91
+ const chosen = POSITIONS.indexOf(props.value);
92
+ const nav = useRadioNav(POSITIONS.length, 3, chosen, (index) => props.onPick(POSITIONS[index]));
93
+ return (_jsxs("div", { className: "bd-padrow", children: [_jsx("div", { className: props.column === true
94
+ ? 'bd-wpad bd-wpad--col bd-alignment-pad'
95
+ : 'bd-wpad bd-alignment-pad', role: "radiogroup", "aria-label": props.label, children: POSITIONS.map((position, index) => (_jsx("button", { type: "button", role: "radio", "aria-checked": chosen === index, "aria-label": names[index], title: names[index], disabled: props.disabled, ...nav(index), onClick: () => props.onPick(position) }, position))) }), _jsxs("p", { className: "bd-wpad__caption", children: [_jsx("strong", { children: chosen < 0 ? '–' : capitalise(names[chosen]) }), props.hint] })] }));
96
+ }
97
+ // --- range slider --------------------------------------------------------------------------------
98
+ /**
99
+ * A range input whose value shows in a bubble above the thumb while it is dragged or focused. The
100
+ * fill is the share of the range; it only reports text, which the caller still checks.
101
+ */
102
+ export function RangeSlider(props) {
103
+ const span = props.max - props.min;
104
+ const clamped = Math.min(props.max, Math.max(props.min, props.value));
105
+ const share = span > 0 ? ((clamped - props.min) / span) * 100 : 0;
106
+ const text = props.format?.(props.value) ?? `${props.value}${props.unit ?? ''}`;
107
+ return (_jsxs("div", { className: "bd-slider", "data-unset": props.unset === true ? '' : undefined, style: { '--p': `${share}%` }, children: [_jsx("input", { type: "range", "aria-label": props.label, "aria-valuetext": text, min: props.min, max: props.max, step: props.step, value: props.value, disabled: props.disabled, onChange: (event) => props.onChange(event.target.value) }), _jsx("span", { className: "bd-slider__bubble", "aria-hidden": "true", children: text })] }));
108
+ }
109
+ // --- colour field --------------------------------------------------------------------------------
110
+ /** The opacity (0-100) a painted colour carries: 100 for a plain colour, `undefined` for no colour. */
111
+ function alphaOf(color) {
112
+ const text = color?.trim();
113
+ if (text === undefined || text === '')
114
+ return undefined;
115
+ if (/^#[0-9a-f]{8}$/i.test(text))
116
+ return Math.round((Number.parseInt(text.slice(7), 16) / 255) * 100);
117
+ if (/^#[0-9a-f]{4}$/i.test(text))
118
+ return Math.round((Number.parseInt(text.slice(4) + text.slice(4), 16) / 255) * 100);
119
+ return 100;
120
+ }
121
+ /**
122
+ * The colour control: a swatch that opens the palette popover, the colour as text (a hex code or a
123
+ * `$color.name` token), and whatever `trailing` adds (the token picker). The text is the caller's
124
+ * draft; nothing here decides what is valid, so an invalid code never leaves the caller.
125
+ */
126
+ export function ColorField(props) {
127
+ const t = useT();
128
+ const unset = props.text.trim() === '' && props.fallback !== undefined;
129
+ const alpha = alphaOf(unset ? props.fallback?.color : props.swatch);
130
+ return (_jsxs("span", { className: "bd-wcolor", "data-invalid": props.invalid === true ? '' : undefined, "data-unset": unset ? '' : undefined, children: [_jsx(ColorInput, { color: unset ? props.fallback?.color : props.swatch, palette: Object.entries(props.theme.tokens.color).map(([name, color]) => ({
131
+ label: name,
132
+ color,
133
+ value: `$color.${name}`,
134
+ })), label: props.label, disabled: props.disabled, onColorChange: props.onSwatch }), _jsx(Input, { ...(props.id !== undefined ? { id: props.id } : {}), className: "bd-wcolor__hex", value: props.text, placeholder: props.fallback?.text ?? t('styleField.color.unset'), disabled: props.disabled, "aria-invalid": props.invalid === true, "aria-describedby": props.describedBy, "aria-label": props.ariaLabel, autoComplete: "off", spellCheck: false, onChange: (event) => props.onText(event.target.value), ...(props.onBlur !== undefined ? { onBlur: props.onBlur } : {}) }), alpha !== undefined ? _jsxs("span", { className: "bd-wcolor__alpha", children: [alpha, "%"] }) : null, props.trailing] }));
135
+ }
136
+ // --- reset ---------------------------------------------------------------------------------------
137
+ /**
138
+ * The small "restore default" icon of a field that has an override at this layer; an empty slot of
139
+ * the same width otherwise, so the row does not move when the override appears.
140
+ */
141
+ export function ResetField(props) {
142
+ const t = useT();
143
+ if (!props.changed)
144
+ return _jsx("span", { className: "bd-reset-slot", "aria-hidden": "true" });
145
+ return (_jsx(IconButton, { icon: "rotate-ccw", size: "sm", className: "bd-field-reset bd-reset", disabled: props.disabled, label: interpolate(t('inspector.resetField'), { label: props.label }), onClick: props.onReset }));
146
+ }
147
+ // --- shadow --------------------------------------------------------------------------------------
148
+ const MAX_LAYERS = 4;
149
+ const NEW_LAYER = '0px 4px 12px 0px #00000026';
150
+ const LENGTH = /^-?(?:\d+\.?\d*|\.\d+)$/;
151
+ /** What a shadow may be painted from: lengths, colours and separators, never a reference. */
152
+ const PAINTABLE = /^[-\w\s.,#%()/]+$/;
153
+ /** Splits on `separator` outside parentheses. */
154
+ function splitOutside(text, separator) {
155
+ const out = [];
156
+ let depth = 0;
157
+ let current = '';
158
+ for (const ch of text) {
159
+ if (ch === '(')
160
+ depth += 1;
161
+ else if (ch === ')')
162
+ depth -= 1;
163
+ if (ch === separator && depth === 0) {
164
+ out.push(current.trim());
165
+ current = '';
166
+ }
167
+ else
168
+ current += ch;
169
+ }
170
+ out.push(current.trim());
171
+ return out.filter((part) => part !== '');
172
+ }
173
+ function parseLayer(text) {
174
+ const words = splitOutside(text, ' ');
175
+ const inset = words[0] === 'inset';
176
+ if (inset)
177
+ words.shift();
178
+ const color = words.pop();
179
+ if (color === undefined || words.length < 2 || words.length > 4)
180
+ return undefined;
181
+ return {
182
+ inset,
183
+ x: words[0],
184
+ y: words[1],
185
+ blur: words[2] ?? '0px',
186
+ spread: words[3] ?? '0px',
187
+ color,
188
+ };
189
+ }
190
+ const formatLayer = (layer) => [layer.inset ? 'inset' : '', layer.x, layer.y, layer.blur, layer.spread, layer.color]
191
+ .filter((word) => word !== '')
192
+ .join(' ');
193
+ /** The layers of a shadow value, resolving a `$shadow.name` token through the theme. */
194
+ export function shadowLayers(theme, value) {
195
+ let text = value.trim();
196
+ if (text.startsWith('$')) {
197
+ const token = resolveTokenRef(theme, text);
198
+ text = token.ok ? String(token.value.value) : '';
199
+ }
200
+ if (text === '' || text === 'none')
201
+ return [];
202
+ return splitOutside(text, ',')
203
+ .map(parseLayer)
204
+ .filter((layer) => layer !== undefined);
205
+ }
206
+ const paintOf = (theme, value) => {
207
+ const layers = shadowLayers(theme, value);
208
+ const css = layers.map(formatLayer).join(', ');
209
+ return css !== '' && PAINTABLE.test(css) ? css : undefined;
210
+ };
211
+ /** A length field that keeps what is typed until it is left; only a number is passed on. */
212
+ function LengthField(props) {
213
+ const [draft, setDraft] = useState(undefined);
214
+ const match = /^(-?(?:\d+\.?\d*|\.\d+))([a-z]*)$/.exec(props.value);
215
+ const unit = match?.[2] || 'px';
216
+ const shown = draft ?? match?.[1] ?? props.value;
217
+ return (_jsxs("span", { className: "bd-wshadow__len", children: [_jsx(Input, { value: shown, "aria-label": props.label, inputMode: "decimal", autoComplete: "off", spellCheck: false, disabled: props.disabled, onChange: (event) => {
218
+ const text = event.target.value;
219
+ setDraft(text);
220
+ if (LENGTH.test(text))
221
+ props.onChange(`${text}${unit}`);
222
+ }, onBlur: () => setDraft(undefined) }), _jsx("span", { "aria-hidden": "true", children: unit })] }));
223
+ }
224
+ const HEX = /^#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i;
225
+ function LayerColor(props) {
226
+ const t = useT();
227
+ const [draft, setDraft] = useState(undefined);
228
+ const text = draft ?? props.color;
229
+ const swatch = props.color.startsWith('$')
230
+ ? (() => {
231
+ const token = resolveTokenRef(props.theme, props.color);
232
+ return token.ok ? String(token.value.value) : undefined;
233
+ })()
234
+ : props.color;
235
+ return (_jsx(ColorField, { text: text, swatch: swatch, theme: props.theme, label: `${props.label}: ${t('style.colorPicker')}`, ariaLabel: props.label, disabled: props.disabled, invalid: draft !== undefined && !HEX.test(draft), onText: (next) => {
236
+ setDraft(next);
237
+ if (HEX.test(next))
238
+ props.onChange(next);
239
+ }, onSwatch: (next) => {
240
+ setDraft(undefined);
241
+ props.onChange(next);
242
+ }, onBlur: () => setDraft(undefined) }));
243
+ }
244
+ /**
245
+ * One card per shadow layer (offset, blur, spread, colour, inset). With `onChange` the cards edit
246
+ * and a remove and an add button appear (up to the four layers the grammar allows); without it the
247
+ * cards only show the layers of the chosen theme token. A theme token is shown through its layers;
248
+ * the first edit writes them out as a custom shadow. The caller checks the text before dispatching.
249
+ */
250
+ export function ShadowLayers(props) {
251
+ const t = useT();
252
+ const layers = shadowLayers(props.theme, props.value);
253
+ const { onChange } = props;
254
+ const locked = props.disabled || onChange === undefined;
255
+ const write = (next) => onChange?.(next.length === 0 ? 'none' : next.map(formatLayer).join(', '));
256
+ const patch = (index, change) => write(layers.map((layer, at) => (at === index ? { ...layer, ...change } : layer)));
257
+ const add = () => {
258
+ const fresh = parseLayer(NEW_LAYER);
259
+ if (fresh !== undefined)
260
+ write([...layers, fresh]);
261
+ };
262
+ if (layers.length === 0 && onChange === undefined)
263
+ return null;
264
+ return (_jsxs("div", { className: "bd-wshadow", children: [layers.map((layer, index) => {
265
+ const key = `${index}`;
266
+ const name = interpolate(t('styleField.shadow.layer'), { n: index + 1 });
267
+ return (_jsxs("fieldset", { className: "bd-wshadow__card", "aria-label": name, children: [_jsxs("div", { className: "bd-wshadow__head", children: [_jsx("span", { className: "bd-flabel", children: name }), _jsxs("label", { className: "bd-wshadow__inset", children: [_jsx("input", { type: "checkbox", checked: layer.inset, disabled: locked, onChange: (event) => patch(index, { inset: event.target.checked }) }), t('styleField.shadow.inset')] }), onChange !== undefined ? (_jsx(IconButton, { icon: "trash-2", size: "sm", label: `${t('list.remove')}: ${name}`, disabled: props.disabled, onClick: () => write(layers.filter((_, at) => at !== index)) })) : null] }), _jsx("div", { className: "bd-wshadow__grid", children: [
268
+ ['x', 'styleField.shadow.x'],
269
+ ['y', 'styleField.shadow.y'],
270
+ ['blur', 'styleField.shadow.blur'],
271
+ ['spread', 'styleField.shadow.spread'],
272
+ ].map(([part, message]) => (_jsxs("div", { className: "bd-wshadow__field", children: [_jsx("span", { className: "bd-flabel", children: t(message) }), _jsx(LengthField, { value: layer[part], label: `${name}: ${t(message)}`, disabled: locked, onChange: (length) => patch(index, { [part]: length }) })] }, part))) }), _jsxs("div", { className: "bd-wshadow__field", children: [_jsx("span", { className: "bd-flabel", children: t('styleField.shadow.color') }), _jsx(LayerColor, { color: layer.color, theme: props.theme, label: `${name}: ${t('styleField.shadow.color')}`, disabled: locked, onChange: (color) => patch(index, { color }) })] })] }, key));
273
+ }), onChange !== undefined && layers.length < MAX_LAYERS ? (_jsx("button", { type: "button", className: "bd-textbtn bd-wshadow__add", disabled: props.disabled, onClick: add, children: t('styleField.shadow.add') })) : null] }));
274
+ }
275
+ /** Presets use the host theme's tokens, never an arbitrary CSS shadow string. */
276
+ export function ShadowPresets(props) {
277
+ const t = useT();
278
+ const presets = [
279
+ 'none',
280
+ ...Object.keys(props.theme.tokens.shadow).map((name) => `$shadow.${name}`),
281
+ ];
282
+ const nav = useRadioNav(presets.length, 1, presets.indexOf(props.value), (index) => props.onPick(presets[index]));
283
+ return (_jsx("div", { className: "bd-shadow-presets bd-wcards", role: "radiogroup", "aria-label": t('styleField.shadow.presets'), children: presets.map((value, index) => {
284
+ const paint = value === 'none' ? undefined : paintOf(props.theme, value);
285
+ return (_jsxs("button", { type: "button", role: "radio", "aria-checked": props.value === value, className: "bd-shadow-preset bd-wcard", disabled: props.disabled, ...nav(index), onClick: () => props.onPick(value), children: [_jsx("span", { className: "bd-shadow-mini", "data-elevation": Math.min(index, 3), style: paint !== undefined ? { boxShadow: paint } : undefined, "aria-hidden": "true" }), value === 'none'
286
+ ? t('style.shadow.none')
287
+ : value === '$shadow.sm'
288
+ ? t('styleField.shadow.soft')
289
+ : value === '$shadow.md'
290
+ ? t('styleField.shadow.medium')
291
+ : value === '$shadow.lg'
292
+ ? t('styleField.shadow.strong')
293
+ : value.slice('$shadow.'.length)] }, value));
294
+ }) }));
295
+ }
296
+ /**
297
+ * The shadow editor: ready shadows, a live preview, and the layer cards. `onCustom` is given only
298
+ * when the property can store a custom shadow; today it takes theme tokens and `none`, so the
299
+ * cards show the layers of the chosen token and cannot add one.
300
+ */
301
+ export function ShadowEditor(props) {
302
+ const paint = paintOf(props.theme, props.value);
303
+ return (_jsxs("div", { className: "bd-wshadow-editor", children: [_jsx(ShadowPresets, { theme: props.theme, value: props.value, disabled: props.disabled, onPick: props.onPick }), _jsx("div", { className: "bd-shprev", "aria-hidden": "true", children: _jsx("span", { style: paint !== undefined ? { boxShadow: paint } : undefined }) }), props.layers === false ? null : (_jsx(ShadowLayers, { theme: props.theme, value: props.value, disabled: props.disabled, onChange: props.onCustom }))] }));
304
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=widgets.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"widgets.test.d.ts","sourceRoot":"","sources":["../../../../src/panels/inspector/styles/widgets.test.tsx"],"names":[],"mappings":""}