@aglyn/besigner-ui 1.0.0-beta.143

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 (486) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +7 -0
  3. package/package.json +73 -0
  4. package/src/besigner.d.ts +88 -0
  5. package/src/besigner.js +89 -0
  6. package/src/besigner.js.map +1 -0
  7. package/src/index.d.ts +17 -0
  8. package/src/index.js +18 -0
  9. package/src/index.js.map +1 -0
  10. package/src/lib/box-styler/box-styler.d.ts +57 -0
  11. package/src/lib/box-styler/box-styler.js +240 -0
  12. package/src/lib/box-styler/box-styler.js.map +1 -0
  13. package/src/lib/box-styler/components/box-diagram.d.ts +89 -0
  14. package/src/lib/box-styler/components/box-diagram.js +661 -0
  15. package/src/lib/box-styler/components/box-diagram.js.map +1 -0
  16. package/src/lib/box-styler/components/legend.d.ts +56 -0
  17. package/src/lib/box-styler/components/legend.js +130 -0
  18. package/src/lib/box-styler/components/legend.js.map +1 -0
  19. package/src/lib/box-styler/components/spacing-editor.d.ts +55 -0
  20. package/src/lib/box-styler/components/spacing-editor.js +347 -0
  21. package/src/lib/box-styler/components/spacing-editor.js.map +1 -0
  22. package/src/lib/box-styler/constants.d.ts +17 -0
  23. package/src/lib/box-styler/constants.js +30 -0
  24. package/src/lib/box-styler/constants.js.map +1 -0
  25. package/src/lib/box-styler/index.d.ts +2 -0
  26. package/src/lib/box-styler/index.js +4 -0
  27. package/src/lib/box-styler/index.js.map +1 -0
  28. package/src/lib/box-styler/region-fills.d.ts +107 -0
  29. package/src/lib/box-styler/region-fills.js +139 -0
  30. package/src/lib/box-styler/region-fills.js.map +1 -0
  31. package/src/lib/box-styler/spacing-value.d.ts +104 -0
  32. package/src/lib/box-styler/spacing-value.js +223 -0
  33. package/src/lib/box-styler/spacing-value.js.map +1 -0
  34. package/src/lib/box-styler/types.d.ts +29 -0
  35. package/src/lib/box-styler/types.js +18 -0
  36. package/src/lib/box-styler/types.js.map +1 -0
  37. package/src/lib/components/accordion-list.component.d.ts +50 -0
  38. package/src/lib/components/accordion-list.component.js +228 -0
  39. package/src/lib/components/accordion-list.component.js.map +1 -0
  40. package/src/lib/components/add-controls.component.d.ts +22 -0
  41. package/src/lib/components/add-controls.component.js +50 -0
  42. package/src/lib/components/add-controls.component.js.map +1 -0
  43. package/src/lib/components/app-bar-breadcrumbs.component.d.ts +29 -0
  44. package/src/lib/components/app-bar-breadcrumbs.component.js +279 -0
  45. package/src/lib/components/app-bar-breadcrumbs.component.js.map +1 -0
  46. package/src/lib/components/app-bar-primary.component.d.ts +21 -0
  47. package/src/lib/components/app-bar-primary.component.js +108 -0
  48. package/src/lib/components/app-bar-primary.component.js.map +1 -0
  49. package/src/lib/components/app-bar-secondary.component.d.ts +21 -0
  50. package/src/lib/components/app-bar-secondary.component.js +94 -0
  51. package/src/lib/components/app-bar-secondary.component.js.map +1 -0
  52. package/src/lib/components/aside-panel.component.d.ts +23 -0
  53. package/src/lib/components/aside-panel.component.js +505 -0
  54. package/src/lib/components/aside-panel.component.js.map +1 -0
  55. package/src/lib/components/besigner-conflict-alert.component.d.ts +36 -0
  56. package/src/lib/components/besigner-conflict-alert.component.js +51 -0
  57. package/src/lib/components/besigner-conflict-alert.component.js.map +1 -0
  58. package/src/lib/components/besigner-dnd-context.component.d.ts +32 -0
  59. package/src/lib/components/besigner-dnd-context.component.js +75 -0
  60. package/src/lib/components/besigner-dnd-context.component.js.map +1 -0
  61. package/src/lib/components/besigner-draft-alert.component.d.ts +70 -0
  62. package/src/lib/components/besigner-draft-alert.component.js +155 -0
  63. package/src/lib/components/besigner-draft-alert.component.js.map +1 -0
  64. package/src/lib/components/besigner-root-provider.component.d.ts +33 -0
  65. package/src/lib/components/besigner-root-provider.component.js +68 -0
  66. package/src/lib/components/besigner-root-provider.component.js.map +1 -0
  67. package/src/lib/components/binding-preview-controls.component.d.ts +28 -0
  68. package/src/lib/components/binding-preview-controls.component.js +63 -0
  69. package/src/lib/components/binding-preview-controls.component.js.map +1 -0
  70. package/src/lib/components/closeable-drawer.component.d.ts +32 -0
  71. package/src/lib/components/closeable-drawer.component.js +134 -0
  72. package/src/lib/components/closeable-drawer.component.js.map +1 -0
  73. package/src/lib/components/component-accordion-list.d.ts +28 -0
  74. package/src/lib/components/component-accordion-list.js +205 -0
  75. package/src/lib/components/component-accordion-list.js.map +1 -0
  76. package/src/lib/components/component-icon.component.d.ts +32 -0
  77. package/src/lib/components/component-icon.component.js +51 -0
  78. package/src/lib/components/component-icon.component.js.map +1 -0
  79. package/src/lib/components/component-picker.d.ts +27 -0
  80. package/src/lib/components/component-picker.js +368 -0
  81. package/src/lib/components/component-picker.js.map +1 -0
  82. package/src/lib/components/components-grid-list.component.d.ts +31 -0
  83. package/src/lib/components/components-grid-list.component.js +162 -0
  84. package/src/lib/components/components-grid-list.component.js.map +1 -0
  85. package/src/lib/components/custom-css-form.component.d.ts +115 -0
  86. package/src/lib/components/custom-css-form.component.js +699 -0
  87. package/src/lib/components/custom-css-form.component.js.map +1 -0
  88. package/src/lib/components/device-preview-controls.component.d.ts +22 -0
  89. package/src/lib/components/device-preview-controls.component.js +150 -0
  90. package/src/lib/components/device-preview-controls.component.js.map +1 -0
  91. package/src/lib/components/dnd/canvas-drop-indicator.d.ts +20 -0
  92. package/src/lib/components/dnd/canvas-drop-indicator.js +61 -0
  93. package/src/lib/components/dnd/canvas-drop-indicator.js.map +1 -0
  94. package/src/lib/components/dnd/draggable-droppable.d.ts +31 -0
  95. package/src/lib/components/dnd/draggable-droppable.js +383 -0
  96. package/src/lib/components/dnd/draggable-droppable.js.map +1 -0
  97. package/src/lib/components/dnd/draggable.d.ts +42 -0
  98. package/src/lib/components/dnd/draggable.js +66 -0
  99. package/src/lib/components/dnd/draggable.js.map +1 -0
  100. package/src/lib/components/dnd/drop-indicator.d.ts +31 -0
  101. package/src/lib/components/dnd/drop-indicator.js +139 -0
  102. package/src/lib/components/dnd/drop-indicator.js.map +1 -0
  103. package/src/lib/components/dnd/droppable.d.ts +43 -0
  104. package/src/lib/components/dnd/droppable.js +63 -0
  105. package/src/lib/components/dnd/droppable.js.map +1 -0
  106. package/src/lib/components/element-card.component.d.ts +23 -0
  107. package/src/lib/components/element-card.component.js +49 -0
  108. package/src/lib/components/element-card.component.js.map +1 -0
  109. package/src/lib/components/element-classes-field.component.d.ts +41 -0
  110. package/src/lib/components/element-classes-field.component.js +140 -0
  111. package/src/lib/components/element-classes-field.component.js.map +1 -0
  112. package/src/lib/components/element-detail-overlay.component.d.ts +55 -0
  113. package/src/lib/components/element-detail-overlay.component.js +157 -0
  114. package/src/lib/components/element-detail-overlay.component.js.map +1 -0
  115. package/src/lib/components/element-detail.component.d.ts +56 -0
  116. package/src/lib/components/element-detail.component.js +171 -0
  117. package/src/lib/components/element-detail.component.js.map +1 -0
  118. package/src/lib/components/element-info-details.component.d.ts +18 -0
  119. package/src/lib/components/element-info-details.component.js +169 -0
  120. package/src/lib/components/element-info-details.component.js.map +1 -0
  121. package/src/lib/components/element-interactions-form.component.d.ts +21 -0
  122. package/src/lib/components/element-interactions-form.component.js +199 -0
  123. package/src/lib/components/element-interactions-form.component.js.map +1 -0
  124. package/src/lib/components/element-preview.component.d.ts +75 -0
  125. package/src/lib/components/element-preview.component.js +346 -0
  126. package/src/lib/components/element-preview.component.js.map +1 -0
  127. package/src/lib/components/element-props-form.component.d.ts +565 -0
  128. package/src/lib/components/element-props-form.component.js +2392 -0
  129. package/src/lib/components/element-props-form.component.js.map +1 -0
  130. package/src/lib/components/element-styles-form-template.component.d.ts +27 -0
  131. package/src/lib/components/element-styles-form-template.component.js +89 -0
  132. package/src/lib/components/element-styles-form-template.component.js.map +1 -0
  133. package/src/lib/components/element-styles-form.component.d.ts +52 -0
  134. package/src/lib/components/element-styles-form.component.js +1350 -0
  135. package/src/lib/components/element-styles-form.component.js.map +1 -0
  136. package/src/lib/components/empty-document-slot.d.ts +39 -0
  137. package/src/lib/components/empty-document-slot.js +121 -0
  138. package/src/lib/components/empty-document-slot.js.map +1 -0
  139. package/src/lib/components/empty-results.d.ts +22 -0
  140. package/src/lib/components/empty-results.js +131 -0
  141. package/src/lib/components/empty-results.js.map +1 -0
  142. package/src/lib/components/history-controls.component.d.ts +21 -0
  143. package/src/lib/components/history-controls.component.js +67 -0
  144. package/src/lib/components/history-controls.component.js.map +1 -0
  145. package/src/lib/components/inline-markdown-editor.component.d.ts +17 -0
  146. package/src/lib/components/inline-markdown-editor.component.js +220 -0
  147. package/src/lib/components/inline-markdown-editor.component.js.map +1 -0
  148. package/src/lib/components/inline-text-editor.component.d.ts +48 -0
  149. package/src/lib/components/inline-text-editor.component.js +905 -0
  150. package/src/lib/components/inline-text-editor.component.js.map +1 -0
  151. package/src/lib/components/insert-token-menu.component.d.ts +86 -0
  152. package/src/lib/components/insert-token-menu.component.js +232 -0
  153. package/src/lib/components/insert-token-menu.component.js.map +1 -0
  154. package/src/lib/components/instance-attr-overrides.component.d.ts +50 -0
  155. package/src/lib/components/instance-attr-overrides.component.js +298 -0
  156. package/src/lib/components/instance-attr-overrides.component.js.map +1 -0
  157. package/src/lib/components/interact-controls.component.d.ts +22 -0
  158. package/src/lib/components/interact-controls.component.js +74 -0
  159. package/src/lib/components/interact-controls.component.js.map +1 -0
  160. package/src/lib/components/markdown-attribute-field.component.d.ts +40 -0
  161. package/src/lib/components/markdown-attribute-field.component.js +103 -0
  162. package/src/lib/components/markdown-attribute-field.component.js.map +1 -0
  163. package/src/lib/components/node-card.d.ts +24 -0
  164. package/src/lib/components/node-card.js +86 -0
  165. package/src/lib/components/node-card.js.map +1 -0
  166. package/src/lib/components/node-context-menu.d.ts +25 -0
  167. package/src/lib/components/node-context-menu.js +558 -0
  168. package/src/lib/components/node-context-menu.js.map +1 -0
  169. package/src/lib/components/node-leaf.d.ts +39 -0
  170. package/src/lib/components/node-leaf.js +628 -0
  171. package/src/lib/components/node-leaf.js.map +1 -0
  172. package/src/lib/components/node-outline.d.ts +24 -0
  173. package/src/lib/components/node-outline.js +156 -0
  174. package/src/lib/components/node-outline.js.map +1 -0
  175. package/src/lib/components/node-overlay.d.ts +23 -0
  176. package/src/lib/components/node-overlay.js +299 -0
  177. package/src/lib/components/node-overlay.js.map +1 -0
  178. package/src/lib/components/node-quick-actions.d.ts +24 -0
  179. package/src/lib/components/node-quick-actions.js +284 -0
  180. package/src/lib/components/node-quick-actions.js.map +1 -0
  181. package/src/lib/components/node-tree-view.d.ts +106 -0
  182. package/src/lib/components/node-tree-view.js +820 -0
  183. package/src/lib/components/node-tree-view.js.map +1 -0
  184. package/src/lib/components/panel-controls.component.d.ts +22 -0
  185. package/src/lib/components/panel-controls.component.js +76 -0
  186. package/src/lib/components/panel-controls.component.js.map +1 -0
  187. package/src/lib/components/picker-search-field.d.ts +38 -0
  188. package/src/lib/components/picker-search-field.js +79 -0
  189. package/src/lib/components/picker-search-field.js.map +1 -0
  190. package/src/lib/components/plugin-settings-field.component.d.ts +38 -0
  191. package/src/lib/components/plugin-settings-field.component.js +264 -0
  192. package/src/lib/components/plugin-settings-field.component.js.map +1 -0
  193. package/src/lib/components/properties-dialog.component.d.ts +22 -0
  194. package/src/lib/components/properties-dialog.component.js +40 -0
  195. package/src/lib/components/properties-dialog.component.js.map +1 -0
  196. package/src/lib/components/property-binding-field.component.d.ts +142 -0
  197. package/src/lib/components/property-binding-field.component.js +325 -0
  198. package/src/lib/components/property-binding-field.component.js.map +1 -0
  199. package/src/lib/components/property-values-form.component.d.ts +43 -0
  200. package/src/lib/components/property-values-form.component.js +223 -0
  201. package/src/lib/components/property-values-form.component.js.map +1 -0
  202. package/src/lib/components/scheme-preview-controls.component.d.ts +26 -0
  203. package/src/lib/components/scheme-preview-controls.component.js +56 -0
  204. package/src/lib/components/scheme-preview-controls.component.js.map +1 -0
  205. package/src/lib/components/screen-link-field.component.d.ts +118 -0
  206. package/src/lib/components/screen-link-field.component.js +282 -0
  207. package/src/lib/components/screen-link-field.component.js.map +1 -0
  208. package/src/lib/components/site-theme-color-tokens-provider.component.d.ts +33 -0
  209. package/src/lib/components/site-theme-color-tokens-provider.component.js +53 -0
  210. package/src/lib/components/site-theme-color-tokens-provider.component.js.map +1 -0
  211. package/src/lib/components/subtree-json-dialog.component.d.ts +46 -0
  212. package/src/lib/components/subtree-json-dialog.component.js +125 -0
  213. package/src/lib/components/subtree-json-dialog.component.js.map +1 -0
  214. package/src/lib/components/token-pill.component.d.ts +51 -0
  215. package/src/lib/components/token-pill.component.js +164 -0
  216. package/src/lib/components/token-pill.component.js.map +1 -0
  217. package/src/lib/components/token-text-field.component.d.ts +146 -0
  218. package/src/lib/components/token-text-field.component.js +603 -0
  219. package/src/lib/components/token-text-field.component.js.map +1 -0
  220. package/src/lib/components/tree/tree-list.d.ts +6 -0
  221. package/src/lib/components/tree/tree-list.js +108 -0
  222. package/src/lib/components/tree/tree-list.js.map +1 -0
  223. package/src/lib/components/viewport-canvas.component.d.ts +23 -0
  224. package/src/lib/components/viewport-canvas.component.js +128 -0
  225. package/src/lib/components/viewport-canvas.component.js.map +1 -0
  226. package/src/lib/components/viewport-frame.component.d.ts +47 -0
  227. package/src/lib/components/viewport-frame.component.js +332 -0
  228. package/src/lib/components/viewport-frame.component.js.map +1 -0
  229. package/src/lib/components/viewport-root.component.d.ts +22 -0
  230. package/src/lib/components/viewport-root.component.js +112 -0
  231. package/src/lib/components/viewport-root.component.js.map +1 -0
  232. package/src/lib/components/viewport-zoom-controls.d.ts +29 -0
  233. package/src/lib/components/viewport-zoom-controls.js +147 -0
  234. package/src/lib/components/viewport-zoom-controls.js.map +1 -0
  235. package/src/lib/components/workspace-editor.component.d.ts +23 -0
  236. package/src/lib/components/workspace-editor.component.js +191 -0
  237. package/src/lib/components/workspace-editor.component.js.map +1 -0
  238. package/src/lib/components/workspace-panel.component.d.ts +28 -0
  239. package/src/lib/components/workspace-panel.component.js +147 -0
  240. package/src/lib/components/workspace-panel.component.js.map +1 -0
  241. package/src/lib/constants/sample-data.d.ts +18 -0
  242. package/src/lib/constants/sample-data.js +106 -0
  243. package/src/lib/constants/sample-data.js.map +1 -0
  244. package/src/lib/constants/shared.d.ts +17 -0
  245. package/src/lib/constants/shared.js +18 -0
  246. package/src/lib/constants/shared.js.map +1 -0
  247. package/src/lib/contexts/besigner-app-context.d.ts +30 -0
  248. package/src/lib/contexts/besigner-app-context.js +41 -0
  249. package/src/lib/contexts/besigner-app-context.js.map +1 -0
  250. package/src/lib/contexts/binding-picker-context.d.ts +78 -0
  251. package/src/lib/contexts/binding-picker-context.js +21 -0
  252. package/src/lib/contexts/binding-picker-context.js.map +1 -0
  253. package/src/lib/contexts/canvas-host-tokens-context.d.ts +49 -0
  254. package/src/lib/contexts/canvas-host-tokens-context.js +63 -0
  255. package/src/lib/contexts/canvas-host-tokens-context.js.map +1 -0
  256. package/src/lib/contexts/canvas-reveal-context.d.ts +32 -0
  257. package/src/lib/contexts/canvas-reveal-context.js +34 -0
  258. package/src/lib/contexts/canvas-reveal-context.js.map +1 -0
  259. package/src/lib/contexts/component-promotion-context.d.ts +89 -0
  260. package/src/lib/contexts/component-promotion-context.js +21 -0
  261. package/src/lib/contexts/component-promotion-context.js.map +1 -0
  262. package/src/lib/contexts/components-drawer-context.provider.d.ts +32 -0
  263. package/src/lib/contexts/components-drawer-context.provider.js +80 -0
  264. package/src/lib/contexts/components-drawer-context.provider.js.map +1 -0
  265. package/src/lib/contexts/element-drawer-context.d.ts +1005 -0
  266. package/src/lib/contexts/element-drawer-context.js +45 -0
  267. package/src/lib/contexts/element-drawer-context.js.map +1 -0
  268. package/src/lib/contexts/inspected-selection.d.ts +32 -0
  269. package/src/lib/contexts/inspected-selection.js +38 -0
  270. package/src/lib/contexts/inspected-selection.js.map +1 -0
  271. package/src/lib/contexts/inspector-extras-context.d.ts +56 -0
  272. package/src/lib/contexts/inspector-extras-context.js +35 -0
  273. package/src/lib/contexts/inspector-extras-context.js.map +1 -0
  274. package/src/lib/contexts/interactions-context.d.ts +99 -0
  275. package/src/lib/contexts/interactions-context.js +22 -0
  276. package/src/lib/contexts/interactions-context.js.map +1 -0
  277. package/src/lib/contexts/layout-chrome-context.d.ts +37 -0
  278. package/src/lib/contexts/layout-chrome-context.js +75 -0
  279. package/src/lib/contexts/layout-chrome-context.js.map +1 -0
  280. package/src/lib/contexts/media-asset-facts-context.d.ts +74 -0
  281. package/src/lib/contexts/media-asset-facts-context.js +27 -0
  282. package/src/lib/contexts/media-asset-facts-context.js.map +1 -0
  283. package/src/lib/contexts/media-picker-context.d.ts +88 -0
  284. package/src/lib/contexts/media-picker-context.js +21 -0
  285. package/src/lib/contexts/media-picker-context.js.map +1 -0
  286. package/src/lib/contexts/rendered-canvas-elements.d.ts +42 -0
  287. package/src/lib/contexts/rendered-canvas-elements.js +79 -0
  288. package/src/lib/contexts/rendered-canvas-elements.js.map +1 -0
  289. package/src/lib/contexts/repeat-record-context.d.ts +38 -0
  290. package/src/lib/contexts/repeat-record-context.js +21 -0
  291. package/src/lib/contexts/repeat-record-context.js.map +1 -0
  292. package/src/lib/contexts/repeat-rows-context.d.ts +53 -0
  293. package/src/lib/contexts/repeat-rows-context.js +38 -0
  294. package/src/lib/contexts/repeat-rows-context.js.map +1 -0
  295. package/src/lib/contexts/toolbar-extras-context.d.ts +31 -0
  296. package/src/lib/contexts/toolbar-extras-context.js +33 -0
  297. package/src/lib/contexts/toolbar-extras-context.js.map +1 -0
  298. package/src/lib/drafts/besigner-draft-store.d.ts +110 -0
  299. package/src/lib/drafts/besigner-draft-store.js +125 -0
  300. package/src/lib/drafts/besigner-draft-store.js.map +1 -0
  301. package/src/lib/drafts/besigner-server-draft.d.ts +130 -0
  302. package/src/lib/drafts/besigner-server-draft.js +211 -0
  303. package/src/lib/drafts/besigner-server-draft.js.map +1 -0
  304. package/src/lib/form-fields/components/shared/inline-form-control.d.ts +32 -0
  305. package/src/lib/form-fields/components/shared/inline-form-control.js +85 -0
  306. package/src/lib/form-fields/components/shared/inline-form-control.js.map +1 -0
  307. package/src/lib/form-fields/components/shared/toggle-button-form-control.d.ts +33 -0
  308. package/src/lib/form-fields/components/shared/toggle-button-form-control.js +83 -0
  309. package/src/lib/form-fields/components/shared/toggle-button-form-control.js.map +1 -0
  310. package/src/lib/form-fields/form-fields.d.ts +20 -0
  311. package/src/lib/form-fields/form-fields.js +21 -0
  312. package/src/lib/form-fields/form-fields.js.map +1 -0
  313. package/src/lib/form-fields/index.d.ts +1 -0
  314. package/src/lib/form-fields/index.js +3 -0
  315. package/src/lib/form-fields/index.js.map +1 -0
  316. package/src/lib/hooks/use-add-element-drawer-callback.d.ts +28 -0
  317. package/src/lib/hooks/use-add-element-drawer-callback.js +112 -0
  318. package/src/lib/hooks/use-add-element-drawer-callback.js.map +1 -0
  319. package/src/lib/hooks/use-aglyn-besigner-flag.d.ts +23 -0
  320. package/src/lib/hooks/use-aglyn-besigner-flag.js +47 -0
  321. package/src/lib/hooks/use-aglyn-besigner-flag.js.map +1 -0
  322. package/src/lib/hooks/use-aglyn-besigner-panel-value.d.ts +23 -0
  323. package/src/lib/hooks/use-aglyn-besigner-panel-value.js +54 -0
  324. package/src/lib/hooks/use-aglyn-besigner-panel-value.js.map +1 -0
  325. package/src/lib/hooks/use-aglyn-besigner-panel.d.ts +23 -0
  326. package/src/lib/hooks/use-aglyn-besigner-panel.js +47 -0
  327. package/src/lib/hooks/use-aglyn-besigner-panel.js.map +1 -0
  328. package/src/lib/hooks/use-anchored-rect.d.ts +68 -0
  329. package/src/lib/hooks/use-anchored-rect.js +131 -0
  330. package/src/lib/hooks/use-anchored-rect.js.map +1 -0
  331. package/src/lib/hooks/use-besigner-app-context.d.ts +18 -0
  332. package/src/lib/hooks/use-besigner-app-context.js +19 -0
  333. package/src/lib/hooks/use-besigner-app-context.js.map +1 -0
  334. package/src/lib/hooks/use-besigner-document.d.ts +309 -0
  335. package/src/lib/hooks/use-besigner-document.js +500 -0
  336. package/src/lib/hooks/use-besigner-document.js.map +1 -0
  337. package/src/lib/hooks/use-besigner-draft.d.ts +209 -0
  338. package/src/lib/hooks/use-besigner-draft.js +429 -0
  339. package/src/lib/hooks/use-besigner-draft.js.map +1 -0
  340. package/src/lib/hooks/use-clipboard-callbacks.d.ts +29 -0
  341. package/src/lib/hooks/use-clipboard-callbacks.js +82 -0
  342. package/src/lib/hooks/use-clipboard-callbacks.js.map +1 -0
  343. package/src/lib/hooks/use-clipboard-shortcuts.d.ts +52 -0
  344. package/src/lib/hooks/use-clipboard-shortcuts.js +102 -0
  345. package/src/lib/hooks/use-clipboard-shortcuts.js.map +1 -0
  346. package/src/lib/hooks/use-component-propagation-notice.d.ts +96 -0
  347. package/src/lib/hooks/use-component-propagation-notice.js +177 -0
  348. package/src/lib/hooks/use-component-propagation-notice.js.map +1 -0
  349. package/src/lib/hooks/use-debounced-commit.d.ts +43 -0
  350. package/src/lib/hooks/use-debounced-commit.js +88 -0
  351. package/src/lib/hooks/use-debounced-commit.js.map +1 -0
  352. package/src/lib/hooks/use-delete-element-callback.d.ts +24 -0
  353. package/src/lib/hooks/use-delete-element-callback.js +82 -0
  354. package/src/lib/hooks/use-delete-element-callback.js.map +1 -0
  355. package/src/lib/hooks/use-detail-hover-intent.d.ts +76 -0
  356. package/src/lib/hooks/use-detail-hover-intent.js +123 -0
  357. package/src/lib/hooks/use-detail-hover-intent.js.map +1 -0
  358. package/src/lib/hooks/use-document-repair-callbacks.d.ts +50 -0
  359. package/src/lib/hooks/use-document-repair-callbacks.js +237 -0
  360. package/src/lib/hooks/use-document-repair-callbacks.js.map +1 -0
  361. package/src/lib/hooks/use-insert-token-options.d.ts +52 -0
  362. package/src/lib/hooks/use-insert-token-options.js +230 -0
  363. package/src/lib/hooks/use-insert-token-options.js.map +1 -0
  364. package/src/lib/hooks/use-leaf-drag.d.ts +24 -0
  365. package/src/lib/hooks/use-leaf-drag.js +28 -0
  366. package/src/lib/hooks/use-leaf-drag.js.map +1 -0
  367. package/src/lib/hooks/use-leaf-drop.d.ts +31 -0
  368. package/src/lib/hooks/use-leaf-drop.js +43 -0
  369. package/src/lib/hooks/use-leaf-drop.js.map +1 -0
  370. package/src/lib/hooks/use-markdown-media-picker.d.ts +63 -0
  371. package/src/lib/hooks/use-markdown-media-picker.js +110 -0
  372. package/src/lib/hooks/use-markdown-media-picker.js.map +1 -0
  373. package/src/lib/hooks/use-media-asset-facts-overlay.d.ts +43 -0
  374. package/src/lib/hooks/use-media-asset-facts-overlay.js +133 -0
  375. package/src/lib/hooks/use-media-asset-facts-overlay.js.map +1 -0
  376. package/src/lib/hooks/use-move-node-callbacks.d.ts +22 -0
  377. package/src/lib/hooks/use-move-node-callbacks.js +57 -0
  378. package/src/lib/hooks/use-move-node-callbacks.js.map +1 -0
  379. package/src/lib/hooks/use-node-with-host-tokens.d.ts +42 -0
  380. package/src/lib/hooks/use-node-with-host-tokens.js +59 -0
  381. package/src/lib/hooks/use-node-with-host-tokens.js.map +1 -0
  382. package/src/lib/hooks/use-picker-filter.d.ts +61 -0
  383. package/src/lib/hooks/use-picker-filter.js +122 -0
  384. package/src/lib/hooks/use-picker-filter.js.map +1 -0
  385. package/src/lib/hooks/use-repeat-preview.d.ts +64 -0
  386. package/src/lib/hooks/use-repeat-preview.js +214 -0
  387. package/src/lib/hooks/use-repeat-preview.js.map +1 -0
  388. package/src/lib/hooks/use-repeat-sources.d.ts +17 -0
  389. package/src/lib/hooks/use-repeat-sources.js +41 -0
  390. package/src/lib/hooks/use-repeat-sources.js.map +1 -0
  391. package/src/lib/hooks/use-visible-component-categories.d.ts +37 -0
  392. package/src/lib/hooks/use-visible-component-categories.js +79 -0
  393. package/src/lib/hooks/use-visible-component-categories.js.map +1 -0
  394. package/src/lib/utils/active-host-theme.d.ts +28 -0
  395. package/src/lib/utils/active-host-theme.js +77 -0
  396. package/src/lib/utils/active-host-theme.js.map +1 -0
  397. package/src/lib/utils/attr-target.d.ts +170 -0
  398. package/src/lib/utils/attr-target.js +229 -0
  399. package/src/lib/utils/attr-target.js.map +1 -0
  400. package/src/lib/utils/attribute-field-value.d.ts +21 -0
  401. package/src/lib/utils/attribute-field-value.js +28 -0
  402. package/src/lib/utils/attribute-field-value.js.map +1 -0
  403. package/src/lib/utils/canvas-context-menu.d.ts +28 -0
  404. package/src/lib/utils/canvas-context-menu.js +56 -0
  405. package/src/lib/utils/canvas-context-menu.js.map +1 -0
  406. package/src/lib/utils/canvas-reveal.d.ts +115 -0
  407. package/src/lib/utils/canvas-reveal.js +165 -0
  408. package/src/lib/utils/canvas-reveal.js.map +1 -0
  409. package/src/lib/utils/describe-element.d.ts +72 -0
  410. package/src/lib/utils/describe-element.js +159 -0
  411. package/src/lib/utils/describe-element.js.map +1 -0
  412. package/src/lib/utils/device-preview-styles.d.ts +89 -0
  413. package/src/lib/utils/device-preview-styles.js +228 -0
  414. package/src/lib/utils/device-preview-styles.js.map +1 -0
  415. package/src/lib/utils/docs-help.d.ts +22 -0
  416. package/src/lib/utils/docs-help.generated.d.ts +47 -0
  417. package/src/lib/utils/docs-help.generated.js +229 -0
  418. package/src/lib/utils/docs-help.generated.js.map +1 -0
  419. package/src/lib/utils/docs-help.js +37 -0
  420. package/src/lib/utils/docs-help.js.map +1 -0
  421. package/src/lib/utils/held-answers-store.d.ts +59 -0
  422. package/src/lib/utils/held-answers-store.js +94 -0
  423. package/src/lib/utils/held-answers-store.js.map +1 -0
  424. package/src/lib/utils/in-place-edit-surface.d.ts +118 -0
  425. package/src/lib/utils/in-place-edit-surface.js +164 -0
  426. package/src/lib/utils/in-place-edit-surface.js.map +1 -0
  427. package/src/lib/utils/inline-markdown-edit.store.d.ts +71 -0
  428. package/src/lib/utils/inline-markdown-edit.store.js +90 -0
  429. package/src/lib/utils/inline-markdown-edit.store.js.map +1 -0
  430. package/src/lib/utils/inline-text-edit.store.d.ts +85 -0
  431. package/src/lib/utils/inline-text-edit.store.js +78 -0
  432. package/src/lib/utils/inline-text-edit.store.js.map +1 -0
  433. package/src/lib/utils/instance-leaf-hit.d.ts +39 -0
  434. package/src/lib/utils/instance-leaf-hit.js +56 -0
  435. package/src/lib/utils/instance-leaf-hit.js.map +1 -0
  436. package/src/lib/utils/muted-classes.d.ts +76 -0
  437. package/src/lib/utils/muted-classes.js +108 -0
  438. package/src/lib/utils/muted-classes.js.map +1 -0
  439. package/src/lib/utils/muted-styles.d.ts +125 -0
  440. package/src/lib/utils/muted-styles.js +193 -0
  441. package/src/lib/utils/muted-styles.js.map +1 -0
  442. package/src/lib/utils/numeric-text-value.d.ts +42 -0
  443. package/src/lib/utils/numeric-text-value.js +47 -0
  444. package/src/lib/utils/numeric-text-value.js.map +1 -0
  445. package/src/lib/utils/preset-interactions.d.ts +37 -0
  446. package/src/lib/utils/preset-interactions.js +87 -0
  447. package/src/lib/utils/preset-interactions.js.map +1 -0
  448. package/src/lib/utils/publish-failure-message.d.ts +35 -0
  449. package/src/lib/utils/publish-failure-message.js +51 -0
  450. package/src/lib/utils/publish-failure-message.js.map +1 -0
  451. package/src/lib/utils/rank-picker-results.d.ts +45 -0
  452. package/src/lib/utils/rank-picker-results.js +136 -0
  453. package/src/lib/utils/rank-picker-results.js.map +1 -0
  454. package/src/lib/utils/responsive-sx.d.ts +65 -0
  455. package/src/lib/utils/responsive-sx.js +129 -0
  456. package/src/lib/utils/responsive-sx.js.map +1 -0
  457. package/src/lib/utils/rich-text-commands.d.ts +28 -0
  458. package/src/lib/utils/rich-text-commands.js +43 -0
  459. package/src/lib/utils/rich-text-commands.js.map +1 -0
  460. package/src/lib/utils/sanitize-rich-text.d.ts +52 -0
  461. package/src/lib/utils/sanitize-rich-text.js +173 -0
  462. package/src/lib/utils/sanitize-rich-text.js.map +1 -0
  463. package/src/lib/utils/state-sx.d.ts +255 -0
  464. package/src/lib/utils/state-sx.js +338 -0
  465. package/src/lib/utils/state-sx.js.map +1 -0
  466. package/src/lib/utils/style-field-groups.d.ts +136 -0
  467. package/src/lib/utils/style-field-groups.js +874 -0
  468. package/src/lib/utils/style-field-groups.js.map +1 -0
  469. package/src/lib/utils/style-field-search.d.ts +84 -0
  470. package/src/lib/utils/style-field-search.js +505 -0
  471. package/src/lib/utils/style-field-search.js.map +1 -0
  472. package/src/lib/utils/style-target.d.ts +69 -0
  473. package/src/lib/utils/style-target.js +203 -0
  474. package/src/lib/utils/style-target.js.map +1 -0
  475. package/src/lib/utils/theme-scale-options.d.ts +169 -0
  476. package/src/lib/utils/theme-scale-options.js +702 -0
  477. package/src/lib/utils/theme-scale-options.js.map +1 -0
  478. package/src/lib/utils/token-editable-dom.d.ts +82 -0
  479. package/src/lib/utils/token-editable-dom.js +280 -0
  480. package/src/lib/utils/token-editable-dom.js.map +1 -0
  481. package/src/lib/utils/token-segments.d.ts +111 -0
  482. package/src/lib/utils/token-segments.js +246 -0
  483. package/src/lib/utils/token-segments.js.map +1 -0
  484. package/src/lib/utils/visibility-styles.d.ts +38 -0
  485. package/src/lib/utils/visibility-styles.js +54 -0
  486. package/src/lib/utils/visibility-styles.js.map +1 -0
@@ -0,0 +1,558 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Aglyn LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */ import { _ as _extends } from "@swc/helpers/_/_extends";
17
+ import { _ as _object_without_properties_loose } from "@swc/helpers/_/_object_without_properties_loose";
18
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
19
+ import { canvas } from "@aglyn/aglyn";
20
+ import * as Besigner from "@aglyn/besigner";
21
+ import { BesignerPanelTabFlag, setBesignerPanels } from "@aglyn/besigner";
22
+ import { ICON_VARIANT_MODIFY_COPY, ICON_VARIANT_MODIFY_DELETE, ICON_VARIANT_MODIFY_DUPLICATE, ICON_VARIANT_MODIFY_MOVE_DOWN, ICON_VARIANT_MODIFY_MOVE_IN, ICON_VARIANT_MODIFY_MOVE_OUT, ICON_VARIANT_MODIFY_MOVE_UP, ICON_VARIANT_MODIFY_PASTE, ICON_VARIANT_VISIBILITY_HIDDEN, ICON_VARIANT_VISIBILITY_SHOWN } from "@aglyn/shared-data-enums";
23
+ import { MdiIcon } from "@aglyn/shared-ui-jsx";
24
+ import { Divider, ListItemIcon, ListItemText, MenuItem, MenuList, Paper, Typography } from "@mui/material";
25
+ import { action } from "mobx";
26
+ import { observer } from "mobx-react-lite";
27
+ import { forwardRef, useCallback, useState } from "react";
28
+ import useAglynBesignerFlag from "../hooks/use-aglyn-besigner-flag.js";
29
+ import useAddElementDrawerCallback from "../hooks/use-add-element-drawer-callback.js";
30
+ import useBesignerAppContext from "../hooks/use-besigner-app-context.js";
31
+ import { useCopyElementsCallback, usePasteElementsCallback } from "../hooks/use-clipboard-callbacks.js";
32
+ import useDeleteElementCallback, { useDeleteElementsCallback } from "../hooks/use-delete-element-callback.js";
33
+ import { useMoveNodeInCallback, useMoveNodeOutCallback } from "../hooks/use-move-node-callbacks.js";
34
+ import { isNodeHiddenOnSite, nodePropsWithHiddenOnSite } from "../utils/canvas-reveal.js";
35
+ import SubtreeJsonDialog from "./subtree-json-dialog.component.js";
36
+ export const NodeContextMenu = observer(/*#__PURE__*/ forwardRef((props, ref)=>{
37
+ var _node_parent_nodes, _node_parent;
38
+ const { node, onAction } = props, rest = _object_without_properties_loose(props, [
39
+ "node",
40
+ "onAction"
41
+ ]);
42
+ const isRootNode = canvas.isRootNode(node);
43
+ // Multi-selection (AGL-11): ambiguous single-target actions hide or
44
+ // disable; Duplicate/Delete apply to the whole selection.
45
+ const multi = Besigner.focus.hasMultipleSelected();
46
+ const app = useBesignerAppContext();
47
+ const handleAddElementClick = useAddElementDrawerCallback();
48
+ const elementRef = Besigner.refs.get(node == null ? void 0 : node.$id);
49
+ const [moreOpen, setMoreOpen] = useState(false);
50
+ const [moreButton, moreButtonRef] = useState(null);
51
+ const [jsonOpen, setJsonOpen] = useState(false);
52
+ const closeMore = useCallback(()=>setMoreOpen(false), []);
53
+ const openMore = useCallback(()=>setMoreOpen(true), []);
54
+ const handleDuplicateClick = useCallback((e)=>{
55
+ if (isRootNode) return;
56
+ onAction == null ? void 0 : onAction();
57
+ const targets = multi ? Besigner.focus.getSelected() : [
58
+ node
59
+ ];
60
+ for (const target of targets){
61
+ if (target && !canvas.isRootNode(target)) {
62
+ canvas.duplicateNode(target);
63
+ }
64
+ }
65
+ }, [
66
+ node,
67
+ isRootNode,
68
+ multi,
69
+ onAction
70
+ ]);
71
+ const handleModifyClick = useCallback((e)=>{
72
+ setBesignerPanels(app, {
73
+ panels: (panels)=>_extends({}, panels, {
74
+ panelRight: _extends({}, panels.panelRight, {
75
+ toggled: true,
76
+ tab: BesignerPanelTabFlag.ELEMENT_PROPS_FORM
77
+ })
78
+ })
79
+ });
80
+ }, [
81
+ app
82
+ ]);
83
+ const handleMoveUp = useCallback((e)=>{
84
+ if (isRootNode) return;
85
+ canvas.reorderNode(node, (node == null ? void 0 : node.index) - 1);
86
+ }, [
87
+ node,
88
+ isRootNode
89
+ ]);
90
+ const handleMoveDown = useCallback((e)=>{
91
+ if (isRootNode) return;
92
+ canvas.reorderNode(node, (node == null ? void 0 : node.index) + 1);
93
+ }, [
94
+ node,
95
+ isRootNode
96
+ ]);
97
+ /**
98
+ * Reparenting by clicking (AGL-1405). Until these two existed, the only
99
+ * way to move a node into a different container was to drag it — so a
100
+ * node that ended up somewhere it can never render (AGL-1388) could only
101
+ * be rescued by hand-editing the document's JSON.
102
+ *
103
+ * `canMove*` is read through the observer, so the items enable and
104
+ * disable as the selection moves, and both refuse anything the renderer
105
+ * could not draw rather than accepting it and stranding the subtree.
106
+ */ const moveNodeOut = useMoveNodeOutCallback();
107
+ const moveNodeIn = useMoveNodeInCallback();
108
+ const canMoveOut = !multi && Besigner.canMoveNodeOut(node);
109
+ const canMoveIn = !multi && Besigner.canMoveNodeIn(node);
110
+ const handleMoveOut = useCallback(()=>{
111
+ onAction == null ? void 0 : onAction();
112
+ moveNodeOut(node);
113
+ }, [
114
+ node,
115
+ onAction,
116
+ moveNodeOut
117
+ ]);
118
+ const handleMoveIn = useCallback(()=>{
119
+ onAction == null ? void 0 : onAction();
120
+ moveNodeIn(node);
121
+ }, [
122
+ node,
123
+ onAction,
124
+ moveNodeIn
125
+ ]);
126
+ const handleParentOnClick = useCallback((e)=>{
127
+ if (isRootNode) return;
128
+ Besigner.focus.setSelectedNode(node == null ? void 0 : node.parent);
129
+ }, [
130
+ node,
131
+ isRootNode
132
+ ]);
133
+ const handleParentOnMouseEnter = useCallback((e)=>{
134
+ if (isRootNode) return;
135
+ Besigner.focus.setHoveredNode(node);
136
+ }, [
137
+ node,
138
+ isRootNode
139
+ ]);
140
+ const handleParentOnMouseLeave = useCallback((e)=>{
141
+ if (isRootNode) return;
142
+ Besigner.focus.clearHover();
143
+ }, [
144
+ isRootNode
145
+ ]);
146
+ const copyElements = useCopyElementsCallback();
147
+ const pasteElements = usePasteElementsCallback();
148
+ const handleCopyClick = useCallback(()=>{
149
+ if (isRootNode) return;
150
+ onAction == null ? void 0 : onAction();
151
+ copyElements(multi ? Besigner.focus.getSelected() : [
152
+ node
153
+ ]);
154
+ }, [
155
+ node,
156
+ isRootNode,
157
+ multi,
158
+ onAction,
159
+ copyElements
160
+ ]);
161
+ const handlePasteClick = useCallback(()=>{
162
+ onAction == null ? void 0 : onAction();
163
+ pasteElements(node);
164
+ }, [
165
+ node,
166
+ onAction,
167
+ pasteElements
168
+ ]);
169
+ // Observed, so the item enables the moment something is copied — even
170
+ // from another document, where the entry arrives via localStorage.
171
+ const canPaste = Besigner.clipboard.hasContent();
172
+ const clipboardLabels = Besigner.clipboard.getLabels();
173
+ /**
174
+ * Start hidden until an interaction shows it (AGL-592).
175
+ *
176
+ * A DIFFERENT switch from the eye on the hierarchy row, and the naming is
177
+ * the whole point. The eye hides an element outright — `display: none`,
178
+ * nothing reveals it. This one enrols the element in a runtime contract:
179
+ * it starts hidden, an interaction's show step reveals it, and the canvas
180
+ * opens it while it is being designed. A mega-menu panel, a drawer, an
181
+ * announcement that appears on scroll.
182
+ *
183
+ * `aglyn-hidden` is the storage — the published stylesheet, the show/hide
184
+ * steps and the canvas reveal all key off it — and until this existed the
185
+ * only way to set it was to know the literal string and type it into the
186
+ * Classes box. An element property with no picker is a missing feature,
187
+ * not a power-user path.
188
+ */ const [, setRevealedNodeIds] = useAglynBesignerFlag('revealedNodeIds');
189
+ const hiddenOnSite = isNodeHiddenOnSite(node);
190
+ const handleToggleHiddenClick = useCallback(()=>{
191
+ if (isRootNode) return;
192
+ onAction == null ? void 0 : onAction();
193
+ const targets = multi ? Besigner.focus.getSelected() : [
194
+ node
195
+ ];
196
+ const changed = [];
197
+ action(()=>{
198
+ for (const target of targets){
199
+ if (!target || canvas.isRootNode(target)) continue;
200
+ const props = nodePropsWithHiddenOnSite(target, !hiddenOnSite);
201
+ if (!props) continue;
202
+ target.props = props;
203
+ changed.push(target.$id);
204
+ }
205
+ })();
206
+ // Showing an element again retires its canvas reveal with it. The flag
207
+ // is only meaningful for something the site hides, so leaving an entry
208
+ // behind means the next hide silently starts revealed. Hiding sets
209
+ // nothing: hidden is hidden, and selecting the element — which
210
+ // whichever surface opened this menu has already done — is what shows
211
+ // it while it is being designed.
212
+ if (hiddenOnSite && changed.length) {
213
+ setRevealedNodeIds((current)=>(current != null ? current : []).filter((id)=>!changed.includes(id)));
214
+ }
215
+ }, [
216
+ node,
217
+ isRootNode,
218
+ multi,
219
+ hiddenOnSite,
220
+ onAction,
221
+ setRevealedNodeIds
222
+ ]);
223
+ /**
224
+ * Copy and paste a LOOK.
225
+ *
226
+ * `node.sx` — the Styles panel's whole output, including its responsive,
227
+ * `@scheme` and state slices, which are keys inside that object. Classes
228
+ * are deliberately not carried: a class is a name pointing at rules the
229
+ * element does not own, and two of them carry behaviour rather than
230
+ * appearance, so moving them under a label that promises looks would move
231
+ * behaviour with it.
232
+ *
233
+ * Paste REPLACES. Merging makes the result depend on what the target
234
+ * already had, so the same look pasted onto two elements could produce
235
+ * two different ones — and there would be no way to paste "no styles".
236
+ */ const copiedStyleLabel = Besigner.styleClipboard.getStyleLabel();
237
+ const canPasteStyles = Besigner.styleClipboard.hasStyles();
238
+ const handleCopyStyles = useCallback(()=>{
239
+ if (isRootNode) return;
240
+ onAction == null ? void 0 : onAction();
241
+ Besigner.styleClipboard.copyStyles(node);
242
+ }, [
243
+ node,
244
+ isRootNode,
245
+ onAction
246
+ ]);
247
+ const handlePasteStyles = useCallback(()=>{
248
+ if (isRootNode) return;
249
+ onAction == null ? void 0 : onAction();
250
+ const targets = multi ? Besigner.focus.getSelected() : [
251
+ node
252
+ ];
253
+ for (const target of targets){
254
+ if (target && !canvas.isRootNode(target)) {
255
+ Besigner.styleClipboard.pasteStyles(target);
256
+ }
257
+ }
258
+ }, [
259
+ node,
260
+ isRootNode,
261
+ multi,
262
+ onAction
263
+ ]);
264
+ const deleteElementCallback = useDeleteElementCallback();
265
+ const deleteElementsCallback = useDeleteElementsCallback();
266
+ const handleDeleteClick = useCallback(()=>{
267
+ closeMore();
268
+ onAction == null ? void 0 : onAction();
269
+ if (multi) void deleteElementsCallback(Besigner.focus.getSelected());
270
+ else void deleteElementCallback(node);
271
+ }, [
272
+ node,
273
+ multi,
274
+ closeMore,
275
+ onAction,
276
+ deleteElementCallback,
277
+ deleteElementsCallback
278
+ ]);
279
+ return /*#__PURE__*/ _jsxs(Paper, _extends({
280
+ ref: ref,
281
+ sx: {
282
+ width: 240,
283
+ // Caps itself rather than growing past the window (AGL-1405). The
284
+ // Popper can only slide a menu back inside the viewport if it FITS
285
+ // in one; a taller menu was laid out past the bottom of the
286
+ // document and the page grew a scrollbar around it. `dvh` so a
287
+ // mobile browser's retracting toolbar does not leave the last item
288
+ // under it.
289
+ // Shorter than the window, not merely within it. A menu that only
290
+ // just fits is one `preventOverflow` has to slide a long way to
291
+ // place, and a menu that lands 200px from where it was asked for
292
+ // reads as landing at random.
293
+ maxHeight: 'min(420px, calc(100dvh - 24px))',
294
+ overflowY: 'auto',
295
+ overflowX: 'hidden'
296
+ }
297
+ }, rest, {
298
+ children: [
299
+ /*#__PURE__*/ _jsxs(MenuList, {
300
+ dense: true,
301
+ children: [
302
+ /*#__PURE__*/ _jsx(Typography, {
303
+ variant: "caption",
304
+ color: "text.secondary",
305
+ component: "div",
306
+ sx: {
307
+ px: 1,
308
+ py: 0.15,
309
+ mb: 1,
310
+ textAlign: 'center',
311
+ textOverflow: 'ellipsis',
312
+ overflow: 'hidden',
313
+ whiteSpace: 'nowrap',
314
+ backgroundColor: (theme)=>`rgba(${theme.vars.palette.primary.darkChannel} / 0.12)`
315
+ },
316
+ children: node == null ? void 0 : node.labelShort
317
+ }),
318
+ multi ? null : /*#__PURE__*/ _jsx(MenuItem, {
319
+ onClick: ()=>{
320
+ onAction == null ? void 0 : onAction();
321
+ handleAddElementClick(node);
322
+ },
323
+ children: /*#__PURE__*/ _jsx(ListItemText, {
324
+ inset: true,
325
+ children: "Add element"
326
+ })
327
+ }),
328
+ multi ? null : /*#__PURE__*/ _jsx(Divider, {}),
329
+ /*#__PURE__*/ _jsx(MenuItem, {
330
+ onClick: handleParentOnClick,
331
+ disabled: isRootNode || multi,
332
+ onMouseEnter: handleParentOnMouseEnter,
333
+ onPointerEnter: handleParentOnMouseEnter,
334
+ onMouseLeave: handleParentOnMouseLeave,
335
+ onPointerLeave: handleParentOnMouseLeave,
336
+ children: /*#__PURE__*/ _jsx(ListItemText, {
337
+ inset: true,
338
+ children: "Select parent"
339
+ })
340
+ }),
341
+ /*#__PURE__*/ _jsxs(MenuItem, {
342
+ onClick: handleMoveUp,
343
+ disabled: isRootNode || multi || !((node == null ? void 0 : node.index) > 0),
344
+ children: [
345
+ /*#__PURE__*/ _jsx(ListItemIcon, {
346
+ children: /*#__PURE__*/ _jsx(MdiIcon, {
347
+ fontSize: "inherit",
348
+ path: ICON_VARIANT_MODIFY_MOVE_UP.path
349
+ })
350
+ }),
351
+ /*#__PURE__*/ _jsx(ListItemText, {
352
+ children: "Shift up"
353
+ })
354
+ ]
355
+ }),
356
+ /*#__PURE__*/ _jsxs(MenuItem, {
357
+ onClick: handleMoveDown,
358
+ disabled: isRootNode || multi || !((node == null ? void 0 : node.index) < (node == null ? void 0 : (_node_parent = node.parent) == null ? void 0 : (_node_parent_nodes = _node_parent.nodes) == null ? void 0 : _node_parent_nodes.length) - 1),
359
+ children: [
360
+ /*#__PURE__*/ _jsx(ListItemIcon, {
361
+ children: /*#__PURE__*/ _jsx(MdiIcon, {
362
+ fontSize: "inherit",
363
+ path: ICON_VARIANT_MODIFY_MOVE_DOWN.path
364
+ })
365
+ }),
366
+ /*#__PURE__*/ _jsx(ListItemText, {
367
+ children: "Shift down"
368
+ })
369
+ ]
370
+ }),
371
+ /*#__PURE__*/ _jsxs(MenuItem, {
372
+ onClick: handleMoveOut,
373
+ disabled: !canMoveOut,
374
+ children: [
375
+ /*#__PURE__*/ _jsx(ListItemIcon, {
376
+ children: /*#__PURE__*/ _jsx(MdiIcon, {
377
+ fontSize: "inherit",
378
+ path: ICON_VARIANT_MODIFY_MOVE_OUT.path
379
+ })
380
+ }),
381
+ /*#__PURE__*/ _jsx(ListItemText, {
382
+ children: "Move out of container"
383
+ })
384
+ ]
385
+ }),
386
+ /*#__PURE__*/ _jsxs(MenuItem, {
387
+ onClick: handleMoveIn,
388
+ disabled: !canMoveIn,
389
+ children: [
390
+ /*#__PURE__*/ _jsx(ListItemIcon, {
391
+ children: /*#__PURE__*/ _jsx(MdiIcon, {
392
+ fontSize: "inherit",
393
+ path: ICON_VARIANT_MODIFY_MOVE_IN.path
394
+ })
395
+ }),
396
+ /*#__PURE__*/ _jsx(ListItemText, {
397
+ children: "Move into element above"
398
+ })
399
+ ]
400
+ }),
401
+ multi ? null : /*#__PURE__*/ _jsx(MenuItem, {
402
+ onClick: ()=>setJsonOpen(true),
403
+ children: /*#__PURE__*/ _jsx(ListItemText, {
404
+ inset: true,
405
+ children: "Edit JSON"
406
+ })
407
+ }),
408
+ /*#__PURE__*/ _jsxs(MenuItem, {
409
+ disabled: isRootNode,
410
+ onClick: handleToggleHiddenClick,
411
+ children: [
412
+ /*#__PURE__*/ _jsx(ListItemIcon, {
413
+ children: /*#__PURE__*/ _jsx(MdiIcon, {
414
+ fontSize: "inherit",
415
+ path: hiddenOnSite ? ICON_VARIANT_VISIBILITY_SHOWN.path : ICON_VARIANT_VISIBILITY_HIDDEN.path
416
+ })
417
+ }),
418
+ /*#__PURE__*/ _jsx(ListItemText, {
419
+ secondary: hiddenOnSite ? 'It will be on the page from the first paint' : 'For a menu panel or drawer. To hide it outright, use the eye on its Hierarchy row',
420
+ slotProps: {
421
+ secondary: {
422
+ sx: {
423
+ whiteSpace: 'normal'
424
+ }
425
+ }
426
+ },
427
+ children: hiddenOnSite ? 'Do not start hidden' : 'Start hidden until an interaction shows it'
428
+ })
429
+ ]
430
+ }),
431
+ /*#__PURE__*/ _jsx(Divider, {}),
432
+ /*#__PURE__*/ _jsxs(MenuItem, {
433
+ disabled: isRootNode,
434
+ onClick: handleCopyClick,
435
+ children: [
436
+ /*#__PURE__*/ _jsx(ListItemIcon, {
437
+ children: /*#__PURE__*/ _jsx(MdiIcon, {
438
+ fontSize: "inherit",
439
+ path: ICON_VARIANT_MODIFY_COPY.path
440
+ })
441
+ }),
442
+ /*#__PURE__*/ _jsx(ListItemText, {
443
+ children: multi ? 'Copy selection' : 'Copy'
444
+ })
445
+ ]
446
+ }),
447
+ /*#__PURE__*/ _jsxs(MenuItem, {
448
+ disabled: isRootNode,
449
+ onClick: handleCopyStyles,
450
+ children: [
451
+ /*#__PURE__*/ _jsx(ListItemIcon, {
452
+ children: /*#__PURE__*/ _jsx(MdiIcon, {
453
+ fontSize: "inherit",
454
+ path: ICON_VARIANT_MODIFY_COPY.path
455
+ })
456
+ }),
457
+ /*#__PURE__*/ _jsx(ListItemText, {
458
+ children: 'Copy styles'
459
+ })
460
+ ]
461
+ }),
462
+ /*#__PURE__*/ _jsxs(MenuItem, {
463
+ disabled: isRootNode || !canPasteStyles,
464
+ onClick: handlePasteStyles,
465
+ children: [
466
+ /*#__PURE__*/ _jsx(ListItemIcon, {
467
+ children: /*#__PURE__*/ _jsx(MdiIcon, {
468
+ fontSize: "inherit",
469
+ path: ICON_VARIANT_MODIFY_PASTE.path
470
+ })
471
+ }),
472
+ /*#__PURE__*/ _jsx(ListItemText, {
473
+ slotProps: {
474
+ primary: {
475
+ sx: {
476
+ overflow: 'hidden',
477
+ textOverflow: 'ellipsis',
478
+ whiteSpace: 'nowrap'
479
+ }
480
+ }
481
+ },
482
+ children: copiedStyleLabel ? `Paste styles from ${copiedStyleLabel}` : 'Paste styles'
483
+ })
484
+ ]
485
+ }),
486
+ /*#__PURE__*/ _jsx(Divider, {}),
487
+ /*#__PURE__*/ _jsxs(MenuItem, {
488
+ disabled: !canPaste,
489
+ onClick: handlePasteClick,
490
+ children: [
491
+ /*#__PURE__*/ _jsx(ListItemIcon, {
492
+ children: /*#__PURE__*/ _jsx(MdiIcon, {
493
+ fontSize: "inherit",
494
+ path: ICON_VARIANT_MODIFY_PASTE.path
495
+ })
496
+ }),
497
+ /*#__PURE__*/ _jsx(ListItemText, {
498
+ slotProps: {
499
+ primary: {
500
+ sx: {
501
+ overflow: 'hidden',
502
+ textOverflow: 'ellipsis',
503
+ whiteSpace: 'nowrap'
504
+ }
505
+ }
506
+ },
507
+ children: clipboardLabels.length === 1 ? `Paste ${clipboardLabels[0]}` : clipboardLabels.length > 1 ? `Paste ${clipboardLabels.length} elements` : 'Paste'
508
+ })
509
+ ]
510
+ }),
511
+ /*#__PURE__*/ _jsx(Divider, {}),
512
+ /*#__PURE__*/ _jsxs(MenuItem, {
513
+ disabled: isRootNode,
514
+ onClick: handleDuplicateClick,
515
+ children: [
516
+ /*#__PURE__*/ _jsx(ListItemIcon, {
517
+ children: /*#__PURE__*/ _jsx(MdiIcon, {
518
+ fontSize: "inherit",
519
+ path: ICON_VARIANT_MODIFY_DUPLICATE.path
520
+ })
521
+ }),
522
+ /*#__PURE__*/ _jsx(ListItemText, {
523
+ children: multi ? 'Duplicate selection' : 'Duplicate'
524
+ })
525
+ ]
526
+ }),
527
+ /*#__PURE__*/ _jsxs(MenuItem, {
528
+ disabled: isRootNode,
529
+ onClick: handleDeleteClick,
530
+ children: [
531
+ /*#__PURE__*/ _jsx(ListItemIcon, {
532
+ children: /*#__PURE__*/ _jsx(MdiIcon, {
533
+ fontSize: "inherit",
534
+ path: ICON_VARIANT_MODIFY_DELETE.path
535
+ })
536
+ }),
537
+ /*#__PURE__*/ _jsx(ListItemText, {
538
+ children: multi ? 'Delete selection' : 'Delete'
539
+ })
540
+ ]
541
+ })
542
+ ]
543
+ }),
544
+ /*#__PURE__*/ _jsx(SubtreeJsonDialog, {
545
+ node: node,
546
+ open: jsonOpen,
547
+ onClose: ()=>{
548
+ setJsonOpen(false);
549
+ onAction == null ? void 0 : onAction();
550
+ }
551
+ })
552
+ ]
553
+ }));
554
+ }));
555
+ NodeContextMenu.displayName = 'NodeContextMenu';
556
+ export default NodeContextMenu;
557
+
558
+ //# sourceMappingURL=node-context-menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../../libs/besigner/feature/designer/src/lib/components/node-context-menu.tsx"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type * as Aglyn from '@aglyn/aglyn'\nimport { canvas } from '@aglyn/aglyn'\nimport * as Besigner from '@aglyn/besigner'\nimport {\n BesignerPanelTabFlag,\n setBesignerPanels,\n} from '@aglyn/besigner'\nimport {\n ICON_VARIANT_MODIFY_COPY,\n ICON_VARIANT_MODIFY_DELETE,\n ICON_VARIANT_MODIFY_DUPLICATE,\n ICON_VARIANT_MODIFY_MOVE_DOWN,\n ICON_VARIANT_MODIFY_MOVE_IN,\n ICON_VARIANT_MODIFY_MOVE_OUT,\n ICON_VARIANT_MODIFY_MOVE_UP,\n ICON_VARIANT_MODIFY_PASTE,\n ICON_VARIANT_VISIBILITY_HIDDEN,\n ICON_VARIANT_VISIBILITY_SHOWN,\n} from '@aglyn/shared-data-enums'\nimport { MdiIcon } from '@aglyn/shared-ui-jsx'\nimport {\n Divider,\n ListItemIcon,\n ListItemText,\n MenuItem,\n MenuList,\n Paper,\n type PaperProps,\n Typography,\n} from '@mui/material'\nimport { action } from 'mobx'\nimport { observer } from 'mobx-react-lite'\nimport { ChangeEvent, forwardRef, useCallback, useState } from 'react'\nimport useAglynBesignerFlag from '../hooks/use-aglyn-besigner-flag'\nimport useAddElementDrawerCallback from '../hooks/use-add-element-drawer-callback'\nimport useBesignerAppContext from '../hooks/use-besigner-app-context'\nimport {\n useCopyElementsCallback,\n usePasteElementsCallback,\n} from '../hooks/use-clipboard-callbacks'\nimport useDeleteElementCallback, {\n useDeleteElementsCallback,\n} from '../hooks/use-delete-element-callback'\nimport {\n useMoveNodeInCallback,\n useMoveNodeOutCallback,\n} from '../hooks/use-move-node-callbacks'\nimport {\n isNodeHiddenOnSite,\n nodePropsWithHiddenOnSite,\n} from '../utils/canvas-reveal'\nimport SubtreeJsonDialog from './subtree-json-dialog.component'\n\nexport interface NodeContextMenuProps extends PaperProps {\n node: Aglyn.NodeSchema<any>\n /** Invoked when a menu action should dismiss the hosting menu/tooltip. */\n onAction?: () => void\n}\n\nexport const NodeContextMenu = observer(\n forwardRef<any, NodeContextMenuProps>((props, ref) => {\n const { node, onAction, ...rest } = props\n\n const isRootNode = canvas.isRootNode(node)\n // Multi-selection (AGL-11): ambiguous single-target actions hide or\n // disable; Duplicate/Delete apply to the whole selection.\n const multi = Besigner.focus.hasMultipleSelected()\n const app = useBesignerAppContext()\n const handleAddElementClick = useAddElementDrawerCallback()\n const elementRef = Besigner.refs.get(node?.$id)\n const [moreOpen, setMoreOpen] = useState(false)\n const [moreButton, moreButtonRef] = useState<HTMLButtonElement | null>(null)\n const [jsonOpen, setJsonOpen] = useState(false)\n\n const closeMore = useCallback(() => setMoreOpen(false), [])\n const openMore = useCallback(() => setMoreOpen(true), [])\n\n const handleDuplicateClick = useCallback(\n (e: ChangeEvent<unknown>) => {\n if (isRootNode) return\n onAction?.()\n const targets = multi ? Besigner.focus.getSelected() : [node]\n for (const target of targets) {\n if (target && !canvas.isRootNode(target)) {\n canvas.duplicateNode(target)\n }\n }\n },\n [node, isRootNode, multi, onAction],\n )\n\n const handleModifyClick = useCallback(\n (e: ChangeEvent<unknown>) => {\n setBesignerPanels(app, {\n panels: (panels) => ({\n ...panels,\n panelRight: {\n ...panels.panelRight,\n toggled: true,\n tab: BesignerPanelTabFlag.ELEMENT_PROPS_FORM,\n },\n }),\n })\n },\n [app],\n )\n const handleMoveUp = useCallback(\n (e: ChangeEvent<unknown>) => {\n if (isRootNode) return\n canvas.reorderNode(node, node?.index - 1)\n },\n [node, isRootNode],\n )\n const handleMoveDown = useCallback(\n (e: ChangeEvent<unknown>) => {\n if (isRootNode) return\n canvas.reorderNode(node, node?.index + 1)\n },\n [node, isRootNode],\n )\n\n /**\n * Reparenting by clicking (AGL-1405). Until these two existed, the only\n * way to move a node into a different container was to drag it — so a\n * node that ended up somewhere it can never render (AGL-1388) could only\n * be rescued by hand-editing the document's JSON.\n *\n * `canMove*` is read through the observer, so the items enable and\n * disable as the selection moves, and both refuse anything the renderer\n * could not draw rather than accepting it and stranding the subtree.\n */\n const moveNodeOut = useMoveNodeOutCallback()\n const moveNodeIn = useMoveNodeInCallback()\n const canMoveOut = !multi && Besigner.canMoveNodeOut(node)\n const canMoveIn = !multi && Besigner.canMoveNodeIn(node)\n\n const handleMoveOut = useCallback(() => {\n onAction?.()\n moveNodeOut(node)\n }, [node, onAction, moveNodeOut])\n\n const handleMoveIn = useCallback(() => {\n onAction?.()\n moveNodeIn(node)\n }, [node, onAction, moveNodeIn])\n\n const handleParentOnClick = useCallback(\n (e: ChangeEvent<unknown>) => {\n if (isRootNode) return\n Besigner.focus.setSelectedNode(node?.parent)\n },\n [node, isRootNode],\n )\n\n const handleParentOnMouseEnter = useCallback(\n (e: ChangeEvent<unknown>) => {\n if (isRootNode) return\n Besigner.focus.setHoveredNode(node)\n },\n [node, isRootNode],\n )\n const handleParentOnMouseLeave = useCallback(\n (e: ChangeEvent<unknown>) => {\n if (isRootNode) return\n Besigner.focus.clearHover()\n },\n [isRootNode],\n )\n\n const copyElements = useCopyElementsCallback()\n const pasteElements = usePasteElementsCallback()\n const handleCopyClick = useCallback(() => {\n if (isRootNode) return\n onAction?.()\n copyElements(multi ? Besigner.focus.getSelected() : [node])\n }, [node, isRootNode, multi, onAction, copyElements])\n\n const handlePasteClick = useCallback(() => {\n onAction?.()\n pasteElements(node)\n }, [node, onAction, pasteElements])\n\n // Observed, so the item enables the moment something is copied — even\n // from another document, where the entry arrives via localStorage.\n const canPaste = Besigner.clipboard.hasContent()\n const clipboardLabels = Besigner.clipboard.getLabels()\n\n /**\n * Start hidden until an interaction shows it (AGL-592).\n *\n * A DIFFERENT switch from the eye on the hierarchy row, and the naming is\n * the whole point. The eye hides an element outright — `display: none`,\n * nothing reveals it. This one enrols the element in a runtime contract:\n * it starts hidden, an interaction's show step reveals it, and the canvas\n * opens it while it is being designed. A mega-menu panel, a drawer, an\n * announcement that appears on scroll.\n *\n * `aglyn-hidden` is the storage — the published stylesheet, the show/hide\n * steps and the canvas reveal all key off it — and until this existed the\n * only way to set it was to know the literal string and type it into the\n * Classes box. An element property with no picker is a missing feature,\n * not a power-user path.\n */\n const [, setRevealedNodeIds] = useAglynBesignerFlag('revealedNodeIds')\n const hiddenOnSite = isNodeHiddenOnSite(node as never)\n const handleToggleHiddenClick = useCallback(() => {\n if (isRootNode) return\n onAction?.()\n const targets = multi ? Besigner.focus.getSelected() : [node]\n const changed: string[] = []\n action(() => {\n for (const target of targets) {\n if (!target || canvas.isRootNode(target)) continue\n const props = nodePropsWithHiddenOnSite(target as never, !hiddenOnSite)\n if (!props) continue\n target.props = props as never\n changed.push(target.$id)\n }\n })()\n // Showing an element again retires its canvas reveal with it. The flag\n // is only meaningful for something the site hides, so leaving an entry\n // behind means the next hide silently starts revealed. Hiding sets\n // nothing: hidden is hidden, and selecting the element — which\n // whichever surface opened this menu has already done — is what shows\n // it while it is being designed.\n if (hiddenOnSite && changed.length) {\n setRevealedNodeIds((current) =>\n (current ?? []).filter((id) => !changed.includes(id)),\n )\n }\n }, [node, isRootNode, multi, hiddenOnSite, onAction, setRevealedNodeIds])\n\n /**\n * Copy and paste a LOOK.\n *\n * `node.sx` — the Styles panel's whole output, including its responsive,\n * `@scheme` and state slices, which are keys inside that object. Classes\n * are deliberately not carried: a class is a name pointing at rules the\n * element does not own, and two of them carry behaviour rather than\n * appearance, so moving them under a label that promises looks would move\n * behaviour with it.\n *\n * Paste REPLACES. Merging makes the result depend on what the target\n * already had, so the same look pasted onto two elements could produce\n * two different ones — and there would be no way to paste \"no styles\".\n */\n const copiedStyleLabel = Besigner.styleClipboard.getStyleLabel()\n const canPasteStyles = Besigner.styleClipboard.hasStyles()\n const handleCopyStyles = useCallback(() => {\n if (isRootNode) return\n onAction?.()\n Besigner.styleClipboard.copyStyles(node)\n }, [node, isRootNode, onAction])\n const handlePasteStyles = useCallback(() => {\n if (isRootNode) return\n onAction?.()\n const targets = multi ? Besigner.focus.getSelected() : [node]\n for (const target of targets) {\n if (target && !canvas.isRootNode(target)) {\n Besigner.styleClipboard.pasteStyles(target)\n }\n }\n }, [node, isRootNode, multi, onAction])\n\n const deleteElementCallback = useDeleteElementCallback()\n const deleteElementsCallback = useDeleteElementsCallback()\n const handleDeleteClick = useCallback(() => {\n closeMore()\n onAction?.()\n if (multi) void deleteElementsCallback(Besigner.focus.getSelected())\n else void deleteElementCallback(node)\n }, [\n node,\n multi,\n closeMore,\n onAction,\n deleteElementCallback,\n deleteElementsCallback,\n ])\n\n return (\n <Paper\n ref={ref}\n sx={{\n width: 240,\n // Caps itself rather than growing past the window (AGL-1405). The\n // Popper can only slide a menu back inside the viewport if it FITS\n // in one; a taller menu was laid out past the bottom of the\n // document and the page grew a scrollbar around it. `dvh` so a\n // mobile browser's retracting toolbar does not leave the last item\n // under it.\n // Shorter than the window, not merely within it. A menu that only\n // just fits is one `preventOverflow` has to slide a long way to\n // place, and a menu that lands 200px from where it was asked for\n // reads as landing at random.\n maxHeight: 'min(420px, calc(100dvh - 24px))',\n overflowY: 'auto',\n overflowX: 'hidden',\n }}\n {...rest}\n >\n <MenuList dense>\n <Typography\n variant=\"caption\"\n color=\"text.secondary\"\n component=\"div\"\n sx={{\n px: 1,\n py: 0.15,\n mb: 1,\n textAlign: 'center',\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n backgroundColor: (theme) =>\n `rgba(${(theme as any).vars.palette.primary.darkChannel} / 0.12)`,\n }}\n >\n {node?.labelShort}\n </Typography>\n {multi ? null : (\n <MenuItem\n onClick={() => {\n onAction?.()\n handleAddElementClick(node)\n }}\n >\n <ListItemText inset>Add element</ListItemText>\n </MenuItem>\n )}\n {multi ? null : <Divider />}\n <MenuItem\n onClick={handleParentOnClick}\n disabled={isRootNode || multi}\n onMouseEnter={handleParentOnMouseEnter}\n onPointerEnter={handleParentOnMouseEnter}\n onMouseLeave={handleParentOnMouseLeave}\n onPointerLeave={handleParentOnMouseLeave}\n >\n <ListItemText inset>Select parent</ListItemText>\n </MenuItem>\n <MenuItem\n onClick={handleMoveUp}\n disabled={isRootNode || multi || !(node?.index > 0)}\n >\n <ListItemIcon>\n <MdiIcon\n fontSize=\"inherit\"\n path={ICON_VARIANT_MODIFY_MOVE_UP.path}\n />\n </ListItemIcon>\n <ListItemText>Shift up</ListItemText>\n </MenuItem>\n <MenuItem\n onClick={handleMoveDown}\n disabled={\n isRootNode ||\n multi ||\n !(node?.index < node?.parent?.nodes?.length - 1)\n }\n >\n <ListItemIcon>\n <MdiIcon\n fontSize=\"inherit\"\n path={ICON_VARIANT_MODIFY_MOVE_DOWN.path}\n />\n </ListItemIcon>\n <ListItemText>Shift down</ListItemText>\n </MenuItem>\n <MenuItem onClick={handleMoveOut} disabled={!canMoveOut}>\n <ListItemIcon>\n <MdiIcon\n fontSize=\"inherit\"\n path={ICON_VARIANT_MODIFY_MOVE_OUT.path}\n />\n </ListItemIcon>\n <ListItemText>Move out of container</ListItemText>\n </MenuItem>\n <MenuItem onClick={handleMoveIn} disabled={!canMoveIn}>\n <ListItemIcon>\n <MdiIcon\n fontSize=\"inherit\"\n path={ICON_VARIANT_MODIFY_MOVE_IN.path}\n />\n </ListItemIcon>\n <ListItemText>Move into element above</ListItemText>\n </MenuItem>\n {multi ? null : (\n <MenuItem onClick={() => setJsonOpen(true)}>\n <ListItemText inset>Edit JSON</ListItemText>\n </MenuItem>\n )}\n <MenuItem disabled={isRootNode} onClick={handleToggleHiddenClick}>\n <ListItemIcon>\n <MdiIcon\n fontSize=\"inherit\"\n path={\n hiddenOnSite\n ? ICON_VARIANT_VISIBILITY_SHOWN.path\n : ICON_VARIANT_VISIBILITY_HIDDEN.path\n }\n />\n </ListItemIcon>\n <ListItemText\n secondary={\n hiddenOnSite\n ? 'It will be on the page from the first paint'\n : 'For a menu panel or drawer. To hide it outright, use the eye on its Hierarchy row'\n }\n slotProps={{ secondary: { sx: { whiteSpace: 'normal' } } }}\n >\n {hiddenOnSite\n ? 'Do not start hidden'\n : 'Start hidden until an interaction shows it'}\n </ListItemText>\n </MenuItem>\n <Divider />\n <MenuItem disabled={isRootNode} onClick={handleCopyClick}>\n <ListItemIcon>\n <MdiIcon fontSize=\"inherit\" path={ICON_VARIANT_MODIFY_COPY.path} />\n </ListItemIcon>\n <ListItemText>{multi ? 'Copy selection' : 'Copy'}</ListItemText>\n </MenuItem>\n <MenuItem disabled={isRootNode} onClick={handleCopyStyles}>\n <ListItemIcon>\n <MdiIcon\n fontSize=\"inherit\"\n path={ICON_VARIANT_MODIFY_COPY.path}\n />\n </ListItemIcon>\n <ListItemText>{'Copy styles'}</ListItemText>\n </MenuItem>\n <MenuItem\n disabled={isRootNode || !canPasteStyles}\n onClick={handlePasteStyles}\n >\n <ListItemIcon>\n <MdiIcon\n fontSize=\"inherit\"\n path={ICON_VARIANT_MODIFY_PASTE.path}\n />\n </ListItemIcon>\n <ListItemText\n slotProps={{\n primary: {\n sx: {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n },\n }}\n >\n {copiedStyleLabel\n ? `Paste styles from ${copiedStyleLabel}`\n : 'Paste styles'}\n </ListItemText>\n </MenuItem>\n <Divider />\n <MenuItem disabled={!canPaste} onClick={handlePasteClick}>\n <ListItemIcon>\n <MdiIcon\n fontSize=\"inherit\"\n path={ICON_VARIANT_MODIFY_PASTE.path}\n />\n </ListItemIcon>\n <ListItemText\n slotProps={{\n primary: {\n sx: {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n },\n }}\n >\n {clipboardLabels.length === 1\n ? `Paste ${clipboardLabels[0]}`\n : clipboardLabels.length > 1\n ? `Paste ${clipboardLabels.length} elements`\n : 'Paste'}\n </ListItemText>\n </MenuItem>\n <Divider />\n <MenuItem disabled={isRootNode} onClick={handleDuplicateClick}>\n <ListItemIcon>\n <MdiIcon\n fontSize=\"inherit\"\n path={ICON_VARIANT_MODIFY_DUPLICATE.path}\n />\n </ListItemIcon>\n <ListItemText>\n {multi ? 'Duplicate selection' : 'Duplicate'}\n </ListItemText>\n </MenuItem>\n <MenuItem disabled={isRootNode} onClick={handleDeleteClick}>\n <ListItemIcon>\n <MdiIcon\n fontSize=\"inherit\"\n path={ICON_VARIANT_MODIFY_DELETE.path}\n />\n </ListItemIcon>\n <ListItemText>{multi ? 'Delete selection' : 'Delete'}</ListItemText>\n </MenuItem>\n </MenuList>\n <SubtreeJsonDialog\n node={node}\n open={jsonOpen}\n onClose={() => {\n setJsonOpen(false)\n onAction?.()\n }}\n />\n </Paper>\n )\n }),\n)\nNodeContextMenu.displayName = 'NodeContextMenu'\n\nexport default NodeContextMenu\n"],"names":["canvas","Besigner","BesignerPanelTabFlag","setBesignerPanels","ICON_VARIANT_MODIFY_COPY","ICON_VARIANT_MODIFY_DELETE","ICON_VARIANT_MODIFY_DUPLICATE","ICON_VARIANT_MODIFY_MOVE_DOWN","ICON_VARIANT_MODIFY_MOVE_IN","ICON_VARIANT_MODIFY_MOVE_OUT","ICON_VARIANT_MODIFY_MOVE_UP","ICON_VARIANT_MODIFY_PASTE","ICON_VARIANT_VISIBILITY_HIDDEN","ICON_VARIANT_VISIBILITY_SHOWN","MdiIcon","Divider","ListItemIcon","ListItemText","MenuItem","MenuList","Paper","Typography","action","observer","forwardRef","useCallback","useState","useAglynBesignerFlag","useAddElementDrawerCallback","useBesignerAppContext","useCopyElementsCallback","usePasteElementsCallback","useDeleteElementCallback","useDeleteElementsCallback","useMoveNodeInCallback","useMoveNodeOutCallback","isNodeHiddenOnSite","nodePropsWithHiddenOnSite","SubtreeJsonDialog","NodeContextMenu","props","ref","node","onAction","rest","isRootNode","multi","focus","hasMultipleSelected","app","handleAddElementClick","elementRef","refs","get","$id","moreOpen","setMoreOpen","moreButton","moreButtonRef","jsonOpen","setJsonOpen","closeMore","openMore","handleDuplicateClick","e","targets","getSelected","target","duplicateNode","handleModifyClick","panels","panelRight","toggled","tab","ELEMENT_PROPS_FORM","handleMoveUp","reorderNode","index","handleMoveDown","moveNodeOut","moveNodeIn","canMoveOut","canMoveNodeOut","canMoveIn","canMoveNodeIn","handleMoveOut","handleMoveIn","handleParentOnClick","setSelectedNode","parent","handleParentOnMouseEnter","setHoveredNode","handleParentOnMouseLeave","clearHover","copyElements","pasteElements","handleCopyClick","handlePasteClick","canPaste","clipboard","hasContent","clipboardLabels","getLabels","setRevealedNodeIds","hiddenOnSite","handleToggleHiddenClick","changed","push","length","current","filter","id","includes","copiedStyleLabel","styleClipboard","getStyleLabel","canPasteStyles","hasStyles","handleCopyStyles","copyStyles","handlePasteStyles","pasteStyles","deleteElementCallback","deleteElementsCallback","handleDeleteClick","sx","width","maxHeight","overflowY","overflowX","dense","variant","color","component","px","py","mb","textAlign","textOverflow","overflow","whiteSpace","backgroundColor","theme","vars","palette","primary","darkChannel","labelShort","onClick","inset","disabled","onMouseEnter","onPointerEnter","onMouseLeave","onPointerLeave","fontSize","path","nodes","secondary","slotProps","open","onClose","displayName"],"mappings":"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"}