@nvidia-elements/core 2.23.5 → 2.24.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 (298) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/accordion/accordion-group.js.map +1 -1
  3. package/dist/accordion/accordion.js.map +1 -1
  4. package/dist/accordion/accordion2.js +4 -4
  5. package/dist/alert/alert-group2.js +1 -1
  6. package/dist/alert/alert2.js +1 -1
  7. package/dist/avatar/avatar-group2.js +1 -1
  8. package/dist/avatar/avatar2.js +1 -1
  9. package/dist/badge/badge2.js +1 -1
  10. package/dist/breadcrumb/breadcrumb2.js +1 -1
  11. package/dist/bundle.d.ts +2 -0
  12. package/dist/bundles/index.d.ts +323 -56
  13. package/dist/bundles/index.js +9 -9
  14. package/dist/button/button2.js +1 -1
  15. package/dist/button-group/button-group2.js +1 -1
  16. package/dist/card/card2.js +4 -4
  17. package/dist/chat-message/chat-message2.js +1 -1
  18. package/dist/checkbox/checkbox-group2.js +1 -1
  19. package/dist/checkbox/checkbox2.js +1 -1
  20. package/dist/color/color2.js +1 -1
  21. package/dist/combobox/combobox2.js +1 -1
  22. package/dist/copy-button/copy-button2.js +1 -1
  23. package/dist/custom-elements-jsx.d.ts +167 -1
  24. package/dist/custom-elements-vue.d.ts +161 -1
  25. package/dist/custom-elements.json +5017 -268
  26. package/dist/dashboard/controllers/arrangement.controller.d.ts +30 -0
  27. package/dist/dashboard/controllers/arrangement.controller.js +68 -0
  28. package/dist/dashboard/controllers/arrangement.controller.js.map +1 -0
  29. package/dist/dashboard/controllers/command.controller.d.ts +28 -0
  30. package/dist/dashboard/controllers/command.controller.js +69 -0
  31. package/dist/dashboard/controllers/command.controller.js.map +1 -0
  32. package/dist/dashboard/controllers/composition.controller.d.ts +61 -0
  33. package/dist/dashboard/controllers/composition.controller.js +285 -0
  34. package/dist/dashboard/controllers/composition.controller.js.map +1 -0
  35. package/dist/dashboard/controllers/fullscreen.controller.d.ts +23 -0
  36. package/dist/dashboard/controllers/fullscreen.controller.js +46 -0
  37. package/dist/dashboard/controllers/fullscreen.controller.js.map +1 -0
  38. package/dist/dashboard/controllers/interaction.controller.d.ts +53 -0
  39. package/dist/dashboard/controllers/interaction.controller.js +407 -0
  40. package/dist/dashboard/controllers/interaction.controller.js.map +1 -0
  41. package/dist/dashboard/controllers/measurement.controller.d.ts +28 -0
  42. package/dist/dashboard/controllers/measurement.controller.js +77 -0
  43. package/dist/dashboard/controllers/measurement.controller.js.map +1 -0
  44. package/dist/dashboard/dashboard.d.ts +83 -0
  45. package/dist/dashboard/dashboard.examples.js +5 -0
  46. package/dist/dashboard/dashboard.examples.js.map +1 -0
  47. package/dist/dashboard/dashboard.examples.json +138 -0
  48. package/dist/dashboard/dashboard.js +5 -0
  49. package/dist/dashboard/dashboard.js.map +1 -0
  50. package/dist/dashboard/dashboard.types.d.ts +33 -0
  51. package/dist/dashboard/dashboard2.js +352 -0
  52. package/dist/dashboard/dashboard2.js.map +1 -0
  53. package/dist/dashboard/define.d.ts +10 -0
  54. package/dist/dashboard/define.js +9 -0
  55. package/dist/dashboard/define.js.map +1 -0
  56. package/dist/dashboard/index.d.ts +8 -0
  57. package/dist/dashboard/index.js +6 -0
  58. package/dist/dashboard/panel/panel.d.ts +88 -0
  59. package/dist/dashboard/panel/panel.js +5 -0
  60. package/dist/dashboard/panel/panel.js.map +1 -0
  61. package/dist/dashboard/panel/panel2.js +110 -0
  62. package/dist/dashboard/panel/panel2.js.map +1 -0
  63. package/dist/dashboard/panel-content/panel-content.d.ts +20 -0
  64. package/dist/dashboard/panel-content/panel-content.js +5 -0
  65. package/dist/dashboard/panel-content/panel-content.js.map +1 -0
  66. package/dist/dashboard/panel-content/panel-content2.js +22 -0
  67. package/dist/dashboard/panel-content/panel-content2.js.map +1 -0
  68. package/dist/dashboard/panel-footer/panel-footer.d.ts +25 -0
  69. package/dist/dashboard/panel-footer/panel-footer.js +5 -0
  70. package/dist/dashboard/panel-footer/panel-footer.js.map +1 -0
  71. package/dist/dashboard/panel-footer/panel-footer2.js +28 -0
  72. package/dist/dashboard/panel-footer/panel-footer2.js.map +1 -0
  73. package/dist/dashboard/panel-header/panel-header.d.ts +27 -0
  74. package/dist/dashboard/panel-header/panel-header.js +5 -0
  75. package/dist/dashboard/panel-header/panel-header.js.map +1 -0
  76. package/dist/dashboard/panel-header/panel-header2.js +28 -0
  77. package/dist/dashboard/panel-header/panel-header2.js.map +1 -0
  78. package/dist/dashboard/utils/action.utils.d.ts +17 -0
  79. package/dist/dashboard/utils/action.utils.js +144 -0
  80. package/dist/dashboard/utils/action.utils.js.map +1 -0
  81. package/dist/dashboard/utils/geometry.utils.d.ts +110 -0
  82. package/dist/dashboard/utils/geometry.utils.js +208 -0
  83. package/dist/dashboard/utils/geometry.utils.js.map +1 -0
  84. package/dist/dashboard/utils/intent.types.d.ts +67 -0
  85. package/dist/dashboard/utils/layout.utils.d.ts +20 -0
  86. package/dist/dashboard/utils/layout.utils.js +224 -0
  87. package/dist/dashboard/utils/layout.utils.js.map +1 -0
  88. package/dist/dashboard/utils/movement.utils.d.ts +7 -0
  89. package/dist/dashboard/utils/movement.utils.js +15 -0
  90. package/dist/dashboard/utils/movement.utils.js.map +1 -0
  91. package/dist/dashboard/utils/mutation.utils.d.ts +2 -0
  92. package/dist/dashboard/utils/mutation.utils.js +19 -0
  93. package/dist/dashboard/utils/mutation.utils.js.map +1 -0
  94. package/dist/dashboard/utils/packing.utils.d.ts +13 -0
  95. package/dist/dashboard/utils/packing.utils.js +421 -0
  96. package/dist/dashboard/utils/packing.utils.js.map +1 -0
  97. package/dist/data.html.json +141 -1
  98. package/dist/date/date2.js +1 -1
  99. package/dist/datetime/datetime2.js +1 -1
  100. package/dist/dialog/dialog-footer2.js +1 -1
  101. package/dist/dialog/dialog-header2.js +1 -1
  102. package/dist/dialog/dialog2.js +1 -1
  103. package/dist/divider/divider2.js +1 -1
  104. package/dist/dot/dot2.js +1 -1
  105. package/dist/drag-handle/drag-handle2.js +1 -1
  106. package/dist/drawer/drawer-content2.js +1 -1
  107. package/dist/drawer/drawer-footer2.js +1 -1
  108. package/dist/drawer/drawer-header2.js +1 -1
  109. package/dist/drawer/drawer2.js +1 -1
  110. package/dist/dropdown/dropdown-footer2.js +1 -1
  111. package/dist/dropdown/dropdown-header2.js +1 -1
  112. package/dist/dropdown/dropdown.examples.js.map +1 -1
  113. package/dist/dropdown/dropdown2.js +1 -1
  114. package/dist/dropdown-group/dropdown-group.js +1 -1
  115. package/dist/dropzone/dropzone2.js +1 -1
  116. package/dist/file/file2.js +1 -1
  117. package/dist/format-bytes/format-bytes2.js +1 -1
  118. package/dist/format-datetime/format-datetime2.js +1 -1
  119. package/dist/format-number/format-number2.js +1 -1
  120. package/dist/format-relative-time/format-relative-time2.js +1 -1
  121. package/dist/format-truncate/format-truncate2.js +1 -1
  122. package/dist/forms/control/control2.js +1 -1
  123. package/dist/forms/control-group/control-group2.js +1 -1
  124. package/dist/forms/control-message/control-message2.js +1 -1
  125. package/dist/gauge/gauge2.js +1 -1
  126. package/dist/ghost/ghost2.js +1 -1
  127. package/dist/grid/cell/cell2.js +1 -1
  128. package/dist/grid/column/column2.js +1 -1
  129. package/dist/grid/footer/footer2.js +1 -1
  130. package/dist/grid/grid.js.map +1 -1
  131. package/dist/grid/grid2.js +1 -1
  132. package/dist/grid/header/header2.js +1 -1
  133. package/dist/grid/placeholder/placeholder2.js +1 -1
  134. package/dist/grid/row/row2.js +1 -1
  135. package/dist/icon/icon2.js +1 -1
  136. package/dist/icon-button/icon-button2.js +1 -1
  137. package/dist/iframe/iframe2.js +1 -1
  138. package/dist/index.js +1 -1
  139. package/dist/input/input-group2.js +1 -1
  140. package/dist/input/input2.js +1 -1
  141. package/dist/internal/controllers/native-fullscreen.controller.d.ts +13 -0
  142. package/dist/internal/controllers/native-fullscreen.controller.js +73 -0
  143. package/dist/internal/controllers/native-fullscreen.controller.js.map +1 -0
  144. package/dist/internal/index.d.ts +1 -0
  145. package/dist/internal/index.js +59 -57
  146. package/dist/internal/index.js.map +1 -1
  147. package/dist/joystick/joystick2.js +1 -1
  148. package/dist/logo/logo2.js +1 -1
  149. package/dist/menu/menu-group2.js +1 -1
  150. package/dist/menu/menu-item2.js +1 -1
  151. package/dist/menu/menu2.js +1 -1
  152. package/dist/month/month2.js +1 -1
  153. package/dist/notification/notification-group2.js +1 -1
  154. package/dist/notification/notification2.js +1 -1
  155. package/dist/page/page-panel/page-panel-content2.js +1 -1
  156. package/dist/page/page-panel/page-panel-footer2.js +1 -1
  157. package/dist/page/page-panel/page-panel-header2.js +1 -1
  158. package/dist/page/page-panel/page-panel2.js +1 -1
  159. package/dist/page/page2.js +1 -1
  160. package/dist/page-header/page-header2.js +1 -1
  161. package/dist/page-loader/page-loader2.js +1 -1
  162. package/dist/pagination/pagination2.js +1 -1
  163. package/dist/panel/panel2.js +4 -4
  164. package/dist/password/password2.js +1 -1
  165. package/dist/preferences-input/preferences-input2.js +1 -1
  166. package/dist/progress-bar/progress-bar2.js +1 -1
  167. package/dist/progress-dot/progress-dot2.js +1 -1
  168. package/dist/progress-ring/progress-ring2.js +1 -1
  169. package/dist/progressive-filter-chip/progressive-filter-chip2.js +1 -1
  170. package/dist/pulse/pulse2.js +1 -1
  171. package/dist/radio/radio-group2.js +1 -1
  172. package/dist/radio/radio2.js +1 -1
  173. package/dist/range/range2.js +1 -1
  174. package/dist/resize-handle/resize-handle2.js +1 -1
  175. package/dist/search/search2.js +1 -1
  176. package/dist/select/select2.js +1 -1
  177. package/dist/skeleton/skeleton2.js +1 -1
  178. package/dist/sort-button/sort-button2.js +1 -1
  179. package/dist/sparkline/sparkline2.js +1 -1
  180. package/dist/star-rating/star-rating2.js +1 -1
  181. package/dist/steps/steps2.js +2 -2
  182. package/dist/switch/switch-group2.js +1 -1
  183. package/dist/switch/switch2.js +1 -1
  184. package/dist/tabs/tabs-group2.js +1 -1
  185. package/dist/tabs/tabs-item-group2.js +1 -1
  186. package/dist/tabs/tabs2.js +2 -2
  187. package/dist/tag/tag2.js +1 -1
  188. package/dist/textarea/textarea2.js +1 -1
  189. package/dist/time/time2.js +1 -1
  190. package/dist/toast/toast2.js +1 -1
  191. package/dist/toggletip/toggletip-footer2.js +1 -1
  192. package/dist/toggletip/toggletip-header2.js +1 -1
  193. package/dist/toggletip/toggletip2.js +1 -1
  194. package/dist/toolbar/toolbar2.js +1 -1
  195. package/dist/tooltip/tooltip2.js +1 -1
  196. package/dist/tree/tree-node2.js +1 -1
  197. package/dist/tree/tree2.js +1 -1
  198. package/dist/week/week2.js +1 -1
  199. package/dist/workspace/controllers/workspace-composition.controller.d.ts +4 -1
  200. package/dist/workspace/controllers/workspace-composition.controller.js +69 -39
  201. package/dist/workspace/controllers/workspace-composition.controller.js.map +1 -1
  202. package/dist/workspace/controllers/workspace-fullscreen.controller.d.ts +2 -4
  203. package/dist/workspace/controllers/workspace-fullscreen.controller.js +17 -47
  204. package/dist/workspace/controllers/workspace-fullscreen.controller.js.map +1 -1
  205. package/dist/workspace/controllers/workspace-rearrange.controller.js +27 -27
  206. package/dist/workspace/controllers/workspace-rearrange.controller.js.map +1 -1
  207. package/dist/workspace/controllers/workspace-restoration.controller.js +2 -2
  208. package/dist/workspace/controllers/workspace-restoration.controller.js.map +1 -1
  209. package/dist/workspace/panel/panel2.js +2 -2
  210. package/dist/workspace/panel/panel2.js.map +1 -1
  211. package/dist/workspace/panel-content/panel-content2.js +1 -1
  212. package/dist/workspace/panel-footer/panel-footer2.js +1 -1
  213. package/dist/workspace/panel-header/panel-header2.js +1 -1
  214. package/dist/workspace/utils/comparison.utils.d.ts +3 -0
  215. package/dist/workspace/utils/comparison.utils.js +13 -0
  216. package/dist/workspace/utils/comparison.utils.js.map +1 -0
  217. package/dist/workspace/utils/evaluation.utils.d.ts +65 -6
  218. package/dist/workspace/utils/evaluation.utils.js +334 -99
  219. package/dist/workspace/utils/evaluation.utils.js.map +1 -1
  220. package/dist/workspace/utils/geometry/allocation.utils.js +15 -13
  221. package/dist/workspace/utils/geometry/allocation.utils.js.map +1 -1
  222. package/dist/workspace/utils/geometry/sizing.utils.d.ts +2 -0
  223. package/dist/workspace/utils/geometry/sizing.utils.js +37 -17
  224. package/dist/workspace/utils/geometry/sizing.utils.js.map +1 -1
  225. package/dist/workspace/utils/interaction/boundary.utils.d.ts +2 -2
  226. package/dist/workspace/utils/interaction/boundary.utils.js +2 -2
  227. package/dist/workspace/utils/interaction/boundary.utils.js.map +1 -1
  228. package/dist/workspace/utils/interaction/drag-preview.utils.d.ts +3 -3
  229. package/dist/workspace/utils/interaction/drag-preview.utils.js.map +1 -1
  230. package/dist/workspace/utils/interaction/insertion-offers.utils.d.ts +11 -9
  231. package/dist/workspace/utils/interaction/insertion-offers.utils.js +37 -43
  232. package/dist/workspace/utils/interaction/insertion-offers.utils.js.map +1 -1
  233. package/dist/workspace/utils/interaction/placement-decision.utils.d.ts +6 -1
  234. package/dist/workspace/utils/interaction/placement-decision.utils.js +94 -87
  235. package/dist/workspace/utils/interaction/placement-decision.utils.js.map +1 -1
  236. package/dist/workspace/utils/model/layout.utils.d.ts +2 -1
  237. package/dist/workspace/utils/model/layout.utils.js +12 -10
  238. package/dist/workspace/utils/model/layout.utils.js.map +1 -1
  239. package/dist/workspace/utils/model/membership.utils.d.ts +4 -0
  240. package/dist/workspace/utils/model/membership.utils.js +13 -4
  241. package/dist/workspace/utils/model/membership.utils.js.map +1 -1
  242. package/dist/workspace/utils/model/operations.utils.d.ts +1 -0
  243. package/dist/workspace/utils/model/operations.utils.js +51 -46
  244. package/dist/workspace/utils/model/operations.utils.js.map +1 -1
  245. package/dist/workspace/utils/model/projection.utils.d.ts +4 -2
  246. package/dist/workspace/utils/model/projection.utils.js +49 -40
  247. package/dist/workspace/utils/model/projection.utils.js.map +1 -1
  248. package/dist/workspace/utils/model/value.utils.d.ts +4 -3
  249. package/dist/workspace/utils/model/value.utils.js +15 -50
  250. package/dist/workspace/utils/model/value.utils.js.map +1 -1
  251. package/dist/workspace/utils/placement/acquisition-sizing.utils.d.ts +2 -0
  252. package/dist/workspace/utils/placement/acquisition-sizing.utils.js +30 -22
  253. package/dist/workspace/utils/placement/acquisition-sizing.utils.js.map +1 -1
  254. package/dist/workspace/utils/placement/group-insertion.utils.d.ts +19 -13
  255. package/dist/workspace/utils/placement/group-insertion.utils.js +50 -47
  256. package/dist/workspace/utils/placement/group-insertion.utils.js.map +1 -1
  257. package/dist/workspace/utils/placement/planner.utils.d.ts +13 -2
  258. package/dist/workspace/utils/placement/planner.utils.js +79 -73
  259. package/dist/workspace/utils/placement/planner.utils.js.map +1 -1
  260. package/dist/workspace/utils/placement/preparation.utils.d.ts +5 -2
  261. package/dist/workspace/utils/placement/preparation.utils.js +45 -41
  262. package/dist/workspace/utils/placement/preparation.utils.js.map +1 -1
  263. package/dist/workspace/utils/placement/region.utils.js +32 -32
  264. package/dist/workspace/utils/placement/region.utils.js.map +1 -1
  265. package/dist/workspace/utils/placement/scope.utils.d.ts +34 -0
  266. package/dist/workspace/utils/placement/scope.utils.js +155 -0
  267. package/dist/workspace/utils/placement/scope.utils.js.map +1 -0
  268. package/dist/workspace/utils/placement/session.utils.d.ts +11 -0
  269. package/dist/workspace/utils/placement/session.utils.js +78 -0
  270. package/dist/workspace/utils/placement/session.utils.js.map +1 -0
  271. package/dist/workspace/utils/placement/split-sizing.utils.d.ts +2 -2
  272. package/dist/workspace/utils/placement/split-sizing.utils.js +19 -19
  273. package/dist/workspace/utils/placement/split-sizing.utils.js.map +1 -1
  274. package/dist/workspace/utils/presentation/composition.utils.d.ts +1 -1
  275. package/dist/workspace/utils/presentation/composition.utils.js +4 -2
  276. package/dist/workspace/utils/presentation/composition.utils.js.map +1 -1
  277. package/dist/workspace/utils/presentation/groups.utils.d.ts +3 -3
  278. package/dist/workspace/utils/presentation/groups.utils.js +40 -30
  279. package/dist/workspace/utils/presentation/groups.utils.js.map +1 -1
  280. package/dist/workspace/utils/presentation/measurements.utils.d.ts +1 -0
  281. package/dist/workspace/utils/presentation/measurements.utils.js +6 -14
  282. package/dist/workspace/utils/presentation/measurements.utils.js.map +1 -1
  283. package/dist/workspace/utils/presentation/offers.utils.d.ts +1 -1
  284. package/dist/workspace/utils/presentation/offers.utils.js +3 -3
  285. package/dist/workspace/utils/presentation/offers.utils.js.map +1 -1
  286. package/dist/workspace/utils/presentation/preview.utils.d.ts +6 -0
  287. package/dist/workspace/utils/presentation/preview.utils.js +14 -3
  288. package/dist/workspace/utils/presentation/preview.utils.js.map +1 -1
  289. package/dist/workspace/workspace.examples.js.map +1 -1
  290. package/dist/workspace/workspace.examples.json +4 -4
  291. package/dist/workspace/workspace.js +1 -1
  292. package/dist/workspace/workspace.js.map +1 -1
  293. package/dist/workspace/workspace2.js +206 -212
  294. package/dist/workspace/workspace2.js.map +1 -1
  295. package/package.json +16 -4
  296. package/dist/workspace/utils/placement/context.utils.d.ts +0 -36
  297. package/dist/workspace/utils/placement/context.utils.js +0 -135
  298. package/dist/workspace/utils/placement/context.utils.js.map +0 -1
@@ -1,9 +1,9 @@
1
1
  import { normalizeLayout as e } from "../model/layout.utils.js";
2
2
  import { findGroup as t, projectLayout as n } from "../model/operations.utils.js";
3
- import { createPlacementContext as r } from "./context.utils.js";
4
- import { findDeepestProjectionCarrier as i, getProjectionSignature as a } from "../model/projection.utils.js";
3
+ import { findDeepestProjectionCarrier as r } from "../model/projection.utils.js";
4
+ import { createPlacementScope as i } from "./scope.utils.js";
5
5
  // src/workspace/utils/placement/region.utils.ts
6
- function o(e, t) {
6
+ function a(e, t) {
7
7
  let n = t.split(".");
8
8
  if (n.shift() !== "root") return;
9
9
  let r = e;
@@ -13,24 +13,24 @@ function o(e, t) {
13
13
  }
14
14
  return r ?? void 0;
15
15
  }
16
- function s(t) {
17
- let n = m(t);
16
+ function o(t) {
17
+ let n = p(t);
18
18
  if (!n) return;
19
- let { layout: i, source: a, sourceGroup: o, visible: s, carrier: c, region: l, position: u, projectLayout: d, root: h } = n, g = r("recipient", l, a), _ = new Set(a), v = {
19
+ let { layout: r, source: a, sourceGroup: o, visible: s, carrier: c, region: l, position: u, projectLayout: m, root: h } = n, g = i("recipient", l, a), _ = new Set(a), v = {
20
20
  type: "group",
21
21
  panels: [...a],
22
22
  active: a.includes(o.active) ? o.active : a[0]
23
- }, y = f(c, _);
24
- if (!y || !d({
23
+ }, y = d(c, _);
24
+ if (!y || !m({
25
25
  version: 1,
26
26
  root: y,
27
27
  closed: []
28
28
  }, s).root) return {
29
29
  kind: "reorder",
30
- layout: i,
31
- context: g
30
+ layout: r,
31
+ scope: g
32
32
  };
33
- let b = p(h, {
33
+ let b = f(h, {
34
34
  carrier: c,
35
35
  replacement: {
36
36
  type: "split",
@@ -43,13 +43,13 @@ function s(t) {
43
43
  return b ? {
44
44
  kind: "split",
45
45
  layout: {
46
- ...i,
46
+ ...r,
47
47
  root: e(b)
48
48
  },
49
- context: g
49
+ scope: g
50
50
  } : void 0;
51
51
  }
52
- function c(e, t) {
52
+ function s(e, t) {
53
53
  let n = t.flatMap((e) => e ? [e] : []);
54
54
  return n.length ? n.length === 1 ? n[0] : {
55
55
  ...e,
@@ -57,28 +57,28 @@ function c(e, t) {
57
57
  weights: e.weights.filter((e, n) => t[n])
58
58
  } : null;
59
59
  }
60
- function l(e, n) {
60
+ function c(e, n) {
61
61
  let r = t(e.root, n[0]);
62
- if (r && new Set(n).size === n.length && n.every((e) => r.panels.includes(e))) return n.length === 1 || u(r, n) ? r : void 0;
62
+ if (r && new Set(n).size === n.length && n.every((e) => r.panels.includes(e))) return n.length === 1 || l(r, n) ? r : void 0;
63
63
  }
64
- function u(e, t) {
64
+ function l(e, t) {
65
65
  return e.panels.length === t.length && e.panels.every((e, n) => e === t[n]);
66
66
  }
67
- function d(e, t) {
68
- let { layout: r, destination: s } = e, c = o((e.projectLayout ?? n)(r, t).root, s.region);
69
- if (!c) return;
70
- let l = i(r.root, a(c), (r) => (e.projectLayout ?? n)({
67
+ function u(e, t) {
68
+ let { layout: i, destination: o } = e, s = a((e.projectLayout ?? n)(i, t).root, o.region);
69
+ if (!s) return;
70
+ let c = r(i.root, s, (r) => (e.projectLayout ?? n)({
71
71
  version: 1,
72
72
  root: r,
73
73
  closed: []
74
74
  }, t).root);
75
- return l ? {
76
- carrier: l,
77
- region: c
75
+ return c ? {
76
+ carrier: c,
77
+ region: s
78
78
  } : void 0;
79
79
  }
80
- function f(e, t) {
81
- if (e.type === "split") return c(e, e.children.map((e) => f(e, t)));
80
+ function d(e, t) {
81
+ if (e.type === "split") return s(e, e.children.map((e) => d(e, t)));
82
82
  let n = e.panels.filter((e) => !t.has(e));
83
83
  return n.length ? {
84
84
  ...e,
@@ -86,15 +86,15 @@ function f(e, t) {
86
86
  active: n.includes(e.active) ? e.active : n[0]
87
87
  } : null;
88
88
  }
89
- function p(e, t) {
90
- return e === t.carrier ? t.replacement : e.type === "group" ? f(e, t.removed) : c(e, e.children.map((e) => p(e, t)));
89
+ function f(e, t) {
90
+ return e === t.carrier ? t.replacement : e.type === "group" ? d(e, t.removed) : s(e, e.children.map((e) => f(e, t)));
91
91
  }
92
- function m(e) {
92
+ function p(e) {
93
93
  let { layout: t, source: r, destination: i } = e;
94
94
  if (!t.root || !i.region || i.position === "tab" || !r.length) return;
95
- let a = l(t, r);
95
+ let a = c(t, r);
96
96
  if (!a) return;
97
- let o = e.available.filter((e) => !t.closed.includes(e)), s = d(e, o);
97
+ let o = e.available.filter((e) => !t.closed.includes(e)), s = u(e, o);
98
98
  if (s) return {
99
99
  layout: t,
100
100
  source: r,
@@ -106,6 +106,6 @@ function m(e) {
106
106
  root: t.root
107
107
  };
108
108
  }
109
- export { o as findWorkspaceRegion, s as placeRegion };
109
+ export { a as findWorkspaceRegion, o as placeRegion };
110
110
 
111
111
  //# sourceMappingURL=region.utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"region.utils.js","names":["findWorkspaceRegion","parts","key","node","root","part","placeRegion","context","regionContext","input","project","canonicalRoot","contextRegion","createPlacementContext","region","source","removed","moving","sourceGroup","residual","stripRegion","carrier","visible","editRegion","position","layout","normalizeLayout","rebuild","children","mapped","child","index","regionSource","group","findGroup","id","wholeGroup","regionCarrier","projectLayout","destination","findDeepestProjectionCarrier","getProjectionSignature","panels","recipient"],"sources":["../../../../src/workspace/utils/placement/region.utils.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { normalizeLayout } from '../model/layout.utils.js';\nimport { findGroup, projectLayout } from '../model/operations.utils.js';\nimport { findDeepestProjectionCarrier, getProjectionSignature } from '../model/projection.utils.js';\nimport { createPlacementContext } from './context.utils.js';\n\nimport type { WorkspaceGroup, WorkspaceLayout, WorkspaceNode, WorkspaceSplit } from '../model/layout.utils.js';\nimport type { WorkspaceDestination } from '../model/operations.utils.js';\nimport type { WorkspaceLayoutProjector } from '../model/projection.utils.js';\nimport type { WorkspacePlacementPlan } from './planner.utils.js';\n\ninterface WorkspaceRegionPlacementInput {\n layout: WorkspaceLayout;\n source: string[];\n destination: WorkspaceDestination;\n available: string[];\n projectLayout?: WorkspaceLayoutProjector;\n}\n\n/** Resolves an ephemeral path in a visible arrangement, before source removal. */\nexport function findWorkspaceRegion(root: WorkspaceNode | null, key: string): WorkspaceNode | undefined {\n const parts = key.split('.');\n if (parts.shift() !== 'root') return undefined;\n let node = root;\n for (const part of parts) {\n if (!node || node.type !== 'split' || !/^\\d+$/.test(part)) return undefined;\n node = node.children[Number(part)] ?? null;\n }\n return node ?? undefined;\n}\n\nexport function placeRegion(input: WorkspaceRegionPlacementInput): WorkspacePlacementPlan | undefined {\n const context = regionContext(input);\n if (!context) return undefined;\n const {\n layout,\n source,\n sourceGroup,\n visible,\n carrier,\n region,\n position,\n projectLayout: project,\n root: canonicalRoot\n } = context;\n const contextRegion = createPlacementContext('recipient', region, source);\n const removed = new Set(source);\n const moving: WorkspaceGroup = {\n type: 'group',\n panels: [...source],\n active: source.includes(sourceGroup.active) ? sourceGroup.active : source[0]!\n };\n const residual = stripRegion(carrier, removed);\n if (!residual || !project({ version: 1, root: residual, closed: [] }, visible).root)\n return { kind: 'reorder', layout, context: contextRegion };\n const before = position === 'left' || position === 'top';\n const replacement: WorkspaceSplit = {\n type: 'split',\n axis: position === 'left' || position === 'right' ? 'horizontal' : 'vertical',\n children: before ? [moving, residual] : [residual, moving],\n weights: [0.5, 0.5]\n };\n const root = editRegion(canonicalRoot, { carrier, replacement, removed });\n return root\n ? { kind: 'split', layout: { ...layout, root: normalizeLayout(root) }, context: contextRegion }\n : undefined;\n}\n\nfunction rebuild(node: WorkspaceSplit, mapped: (WorkspaceNode | null)[]): WorkspaceNode | null {\n const children = mapped.flatMap(child => (child ? [child] : []));\n if (!children.length) return null;\n if (children.length === 1) return children[0]!;\n return { ...node, children, weights: node.weights.filter((_, index) => mapped[index]) };\n}\n\nfunction regionSource(layout: WorkspaceLayout, source: string[]): WorkspaceGroup | undefined {\n const group = findGroup(layout.root, source[0]);\n if (!group || new Set(source).size !== source.length || !source.every(id => group.panels.includes(id)))\n return undefined;\n if (source.length === 1) return group;\n return wholeGroup(group, source) ? group : undefined;\n}\n\nfunction wholeGroup(group: WorkspaceGroup, source: string[]): boolean {\n return group.panels.length === source.length && group.panels.every((id, index) => id === source[index]);\n}\n\nfunction regionCarrier(input: WorkspaceRegionPlacementInput, visible: string[]) {\n const { layout, destination } = input;\n const region = findWorkspaceRegion((input.projectLayout ?? projectLayout)(layout, visible).root, destination.region!);\n if (!region) return undefined;\n const carrier = findDeepestProjectionCarrier(\n layout.root,\n getProjectionSignature(region),\n node => (input.projectLayout ?? projectLayout)({ version: 1, root: node, closed: [] }, visible).root\n );\n return carrier ? { carrier, region } : undefined;\n}\n\nfunction stripRegion(node: WorkspaceNode, removed: Set<string>): WorkspaceNode | null {\n if (node.type === 'split')\n return rebuild(\n node,\n node.children.map(child => stripRegion(child, removed))\n );\n const panels = node.panels.filter(id => !removed.has(id));\n if (!panels.length) return null;\n return { ...node, panels, active: panels.includes(node.active) ? node.active : panels[0]! };\n}\n\nfunction editRegion(\n node: WorkspaceNode,\n input: { carrier: WorkspaceNode; replacement: WorkspaceNode; removed: Set<string> }\n): WorkspaceNode | null {\n if (node === input.carrier) return input.replacement;\n if (node.type === 'group') return stripRegion(node, input.removed);\n return rebuild(\n node,\n node.children.map(child => editRegion(child, input))\n );\n}\n\nfunction regionContext(input: WorkspaceRegionPlacementInput) {\n const { layout, source, destination } = input;\n if (!layout.root || !destination.region || destination.position === 'tab' || !source.length) return undefined;\n const sourceGroup = regionSource(layout, source);\n if (!sourceGroup) return undefined;\n const visible = input.available.filter(id => !layout.closed.includes(id));\n const recipient = regionCarrier(input, visible);\n if (!recipient) return undefined;\n return {\n layout,\n source,\n sourceGroup,\n visible,\n ...recipient,\n position: destination.position,\n projectLayout: input.projectLayout ?? projectLayout,\n root: layout.root\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"region.utils.js","names":["findWorkspaceRegion","parts","key","node","root","part","placeRegion","context","regionContext","input","project","canonicalRoot","scope","createPlacementScope","region","source","removed","moving","sourceGroup","residual","stripRegion","carrier","visible","editRegion","position","layout","normalizeLayout","rebuild","children","mapped","child","index","regionSource","group","findGroup","id","wholeGroup","regionCarrier","projectLayout","destination","findDeepestProjectionCarrier","panels","recipient"],"sources":["../../../../src/workspace/utils/placement/region.utils.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { normalizeLayout } from '../model/layout.utils.js';\nimport { findGroup, projectLayout } from '../model/operations.utils.js';\nimport { findDeepestProjectionCarrier } from '../model/projection.utils.js';\nimport { createPlacementScope } from './scope.utils.js';\n\nimport type { WorkspaceGroup, WorkspaceLayout, WorkspaceNode, WorkspaceSplit } from '../model/layout.utils.js';\nimport type { WorkspaceDestination } from '../model/operations.utils.js';\nimport type { WorkspaceLayoutProjector } from '../model/projection.utils.js';\nimport type { WorkspacePlacementPlan } from './planner.utils.js';\n\ninterface WorkspaceRegionPlacementInput {\n layout: WorkspaceLayout;\n source: string[];\n destination: WorkspaceDestination;\n available: string[];\n projectLayout?: WorkspaceLayoutProjector;\n}\n\n/** Resolves an ephemeral path in a visible arrangement, before source removal. */\nexport function findWorkspaceRegion(root: WorkspaceNode | null, key: string): WorkspaceNode | undefined {\n const parts = key.split('.');\n if (parts.shift() !== 'root') return undefined;\n let node = root;\n for (const part of parts) {\n if (!node || node.type !== 'split' || !/^\\d+$/.test(part)) return undefined;\n node = node.children[Number(part)] ?? null;\n }\n return node ?? undefined;\n}\n\nexport function placeRegion(input: WorkspaceRegionPlacementInput): WorkspacePlacementPlan | undefined {\n const context = regionContext(input);\n if (!context) return undefined;\n const {\n layout,\n source,\n sourceGroup,\n visible,\n carrier,\n region,\n position,\n projectLayout: project,\n root: canonicalRoot\n } = context;\n const scope = createPlacementScope('recipient', region, source);\n const removed = new Set(source);\n const moving: WorkspaceGroup = {\n type: 'group',\n panels: [...source],\n active: source.includes(sourceGroup.active) ? sourceGroup.active : source[0]!\n };\n const residual = stripRegion(carrier, removed);\n if (!residual || !project({ version: 1, root: residual, closed: [] }, visible).root)\n return { kind: 'reorder', layout, scope };\n const before = position === 'left' || position === 'top';\n const replacement: WorkspaceSplit = {\n type: 'split',\n axis: position === 'left' || position === 'right' ? 'horizontal' : 'vertical',\n children: before ? [moving, residual] : [residual, moving],\n weights: [0.5, 0.5]\n };\n const root = editRegion(canonicalRoot, { carrier, replacement, removed });\n return root ? { kind: 'split', layout: { ...layout, root: normalizeLayout(root) }, scope } : undefined;\n}\n\nfunction rebuild(node: WorkspaceSplit, mapped: (WorkspaceNode | null)[]): WorkspaceNode | null {\n const children = mapped.flatMap(child => (child ? [child] : []));\n if (!children.length) return null;\n if (children.length === 1) return children[0]!;\n return { ...node, children, weights: node.weights.filter((_, index) => mapped[index]) };\n}\n\nfunction regionSource(layout: WorkspaceLayout, source: string[]): WorkspaceGroup | undefined {\n const group = findGroup(layout.root, source[0]);\n if (!group || new Set(source).size !== source.length || !source.every(id => group.panels.includes(id)))\n return undefined;\n if (source.length === 1) return group;\n return wholeGroup(group, source) ? group : undefined;\n}\n\nfunction wholeGroup(group: WorkspaceGroup, source: string[]): boolean {\n return group.panels.length === source.length && group.panels.every((id, index) => id === source[index]);\n}\n\nfunction regionCarrier(input: WorkspaceRegionPlacementInput, visible: string[]) {\n const { layout, destination } = input;\n const region = findWorkspaceRegion((input.projectLayout ?? projectLayout)(layout, visible).root, destination.region!);\n if (!region) return undefined;\n const carrier = findDeepestProjectionCarrier(\n layout.root,\n region,\n node => (input.projectLayout ?? projectLayout)({ version: 1, root: node, closed: [] }, visible).root\n );\n return carrier ? { carrier, region } : undefined;\n}\n\nfunction stripRegion(node: WorkspaceNode, removed: Set<string>): WorkspaceNode | null {\n if (node.type === 'split')\n return rebuild(\n node,\n node.children.map(child => stripRegion(child, removed))\n );\n const panels = node.panels.filter(id => !removed.has(id));\n if (!panels.length) return null;\n return { ...node, panels, active: panels.includes(node.active) ? node.active : panels[0]! };\n}\n\nfunction editRegion(\n node: WorkspaceNode,\n input: { carrier: WorkspaceNode; replacement: WorkspaceNode; removed: Set<string> }\n): WorkspaceNode | null {\n if (node === input.carrier) return input.replacement;\n if (node.type === 'group') return stripRegion(node, input.removed);\n return rebuild(\n node,\n node.children.map(child => editRegion(child, input))\n );\n}\n\nfunction regionContext(input: WorkspaceRegionPlacementInput) {\n const { layout, source, destination } = input;\n if (!layout.root || !destination.region || destination.position === 'tab' || !source.length) return undefined;\n const sourceGroup = regionSource(layout, source);\n if (!sourceGroup) return undefined;\n const visible = input.available.filter(id => !layout.closed.includes(id));\n const recipient = regionCarrier(input, visible);\n if (!recipient) return undefined;\n return {\n layout,\n source,\n sourceGroup,\n visible,\n ...recipient,\n position: destination.position,\n projectLayout: input.projectLayout ?? projectLayout,\n root: layout.root\n };\n}\n"],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import type { Rect } from '@nvidia-elements/core/internal';
2
+ import type { WorkspacePlacedRegion } from '../geometry/allocation.utils.js';
3
+ import type { WorkspaceNode } from '../model/layout.utils.js';
4
+ export interface WorkspacePlacementScope {
5
+ kind: 'rail' | 'recipient';
6
+ members: string[];
7
+ }
8
+ export interface WorkspaceScopeBounds {
9
+ key: string;
10
+ rect: Rect;
11
+ }
12
+ interface ScopeRectInput {
13
+ members: string[];
14
+ allocation: WorkspacePlacedRegion[];
15
+ source: string[];
16
+ }
17
+ export type WorkspaceScopeRectResolver = (input: ScopeRectInput) => Rect | undefined;
18
+ export declare function createPlacementScope(kind: WorkspacePlacementScope['kind'], node: WorkspaceNode | null, source: string[]): WorkspacePlacementScope;
19
+ /** Includes surviving peers whose computed allocation changes under split constraints. */
20
+ export declare function getAffectedSplitScope(input: {
21
+ baseline: WorkspacePlacedRegion[];
22
+ achieved: WorkspacePlacedRegion[];
23
+ source: string[];
24
+ recipient: string[];
25
+ }): WorkspacePlacementScope;
26
+ /** Seeds scope bounds before animation can change selection. */
27
+ export declare function getAllocatedScopes(input: {
28
+ catalog: WorkspacePlacedRegion[];
29
+ allocation: WorkspacePlacedRegion[];
30
+ source: string[];
31
+ }): WorkspaceScopeBounds[];
32
+ export declare function getAllocatedScopeRect(input: ScopeRectInput): Rect | undefined;
33
+ export declare function createScopeRectResolver(): WorkspaceScopeRectResolver;
34
+ export {};
@@ -0,0 +1,155 @@
1
+ import { getPanelIds as e } from "../model/layout.utils.js";
2
+ import { getPanelMembershipKey as t } from "../model/membership.utils.js";
3
+ // src/workspace/utils/placement/scope.utils.ts
4
+ function n(t, n, r) {
5
+ let i = new Set(r);
6
+ return {
7
+ kind: t,
8
+ members: e(n).filter((e) => t === "rail" || !i.has(e))
9
+ };
10
+ }
11
+ function r(t) {
12
+ let n = new Map(t.achieved.flatMap((e) => e.node.type === "group" ? e.node.panels.map((t) => [t, e.rect]) : [])), r = new Set(t.recipient);
13
+ for (let e of t.baseline) if (e.node.type === "group") for (let a of e.node.panels) {
14
+ if (t.source.includes(a)) continue;
15
+ let o = n.get(a);
16
+ o && i(e.rect, o) && r.add(a);
17
+ }
18
+ let a = t.baseline.filter((t) => {
19
+ let n = e(t.node);
20
+ return [...r].every((e) => n.includes(e));
21
+ }).at(-1);
22
+ return a ? {
23
+ kind: a.node.type === "group" ? "recipient" : "rail",
24
+ members: e(a.node)
25
+ } : {
26
+ kind: "recipient",
27
+ members: t.recipient
28
+ };
29
+ }
30
+ function i(e, t) {
31
+ return [
32
+ "x",
33
+ "y",
34
+ "width",
35
+ "height"
36
+ ].some((n) => Math.abs(e[n] - t[n]) > 1e-6);
37
+ }
38
+ function a(n) {
39
+ let r = new Set(n.source), i = /* @__PURE__ */ new Map();
40
+ for (let a of n.catalog) {
41
+ let n = e(a.node), o = n.filter((e) => !r.has(e));
42
+ o.length && (i.set(t(n), n), o.length !== n.length && i.set(t(o), o));
43
+ }
44
+ let a = c(n.allocation);
45
+ return [...i].flatMap(([e, t]) => {
46
+ let n = u({
47
+ members: t,
48
+ geometry: a,
49
+ carried: r
50
+ });
51
+ return n ? [{
52
+ key: e,
53
+ rect: n
54
+ }] : [];
55
+ });
56
+ }
57
+ function o(e) {
58
+ return u({
59
+ members: e.members,
60
+ geometry: c(e.allocation),
61
+ carried: new Set(e.source)
62
+ });
63
+ }
64
+ function s() {
65
+ let e = /* @__PURE__ */ new WeakMap();
66
+ return (t) => {
67
+ let n = e.get(t.allocation);
68
+ return n || (n = c(t.allocation), e.set(t.allocation, n)), u({
69
+ members: t.members,
70
+ geometry: n,
71
+ carried: new Set(t.source)
72
+ });
73
+ };
74
+ }
75
+ function c(t) {
76
+ let n = t.filter((e) => e.node.type === "group"), r = new Map(t.map((e, t) => [e.key, {
77
+ ...e,
78
+ order: t,
79
+ leafCount: 0
80
+ }])), i = /* @__PURE__ */ new Map();
81
+ for (let t of n) e(t.node).forEach((e) => i.set(e, t.key));
82
+ for (let e of n) for (let t = e.key; t; t = f(t)) {
83
+ let e = r.get(t);
84
+ e && e.leafCount++;
85
+ }
86
+ return {
87
+ leaves: n,
88
+ byKey: r,
89
+ groupByMember: i
90
+ };
91
+ }
92
+ function l(e, t) {
93
+ let n = /* @__PURE__ */ new Set();
94
+ for (let r of e) {
95
+ let e = t.get(r);
96
+ e !== void 0 && n.add(e);
97
+ }
98
+ return n;
99
+ }
100
+ function u(t) {
101
+ let { members: n, geometry: r, carried: i } = t, a = l(n, r.groupByMember);
102
+ if (!a.size) return;
103
+ let o = [...a], s = p(o), c = d(r, s, a.size);
104
+ if (c) return c;
105
+ let u = r.byKey.get(s);
106
+ if (u?.node.type !== "split") return;
107
+ let { depth: f, first: g, last: _ } = h(o, s);
108
+ if (r.leaves.filter((e) => {
109
+ let t = Number(e.key.split(".")[f]);
110
+ return m(e.key, s) && t >= g && t <= _;
111
+ }).some((t) => !a.has(t.key) && !e(t.node).every((e) => i.has(e)))) return;
112
+ let v = r.byKey.get(`${s}.${g}`), y = r.byKey.get(`${s}.${_}`);
113
+ if (v && y) return u.node.axis === "horizontal" ? {
114
+ x: v.rect.x,
115
+ y: u.rect.y,
116
+ width: y.rect.x + y.rect.width - v.rect.x,
117
+ height: u.rect.height
118
+ } : {
119
+ x: u.rect.x,
120
+ y: v.rect.y,
121
+ width: u.rect.width,
122
+ height: y.rect.y + y.rect.height - v.rect.y
123
+ };
124
+ }
125
+ function d(e, t, n) {
126
+ let r, i = -1;
127
+ for (let a = t; a; a = f(a)) {
128
+ let t = e.byKey.get(a);
129
+ t?.leafCount === n && t.order > i && (r = t.rect, i = t.order);
130
+ }
131
+ return r;
132
+ }
133
+ function f(e) {
134
+ let t = e.lastIndexOf(".");
135
+ return t < 0 ? "" : e.slice(0, t);
136
+ }
137
+ function p(e) {
138
+ let t = e[0];
139
+ for (let n of e) for (; !m(n, t);) t = f(t);
140
+ return t;
141
+ }
142
+ function m(e, t) {
143
+ return e === t || e.startsWith(`${t}.`);
144
+ }
145
+ function h(e, t) {
146
+ let n = t.split(".").length, r = e.map((e) => Number(e.split(".")[n]));
147
+ return {
148
+ depth: n,
149
+ first: Math.min(...r),
150
+ last: Math.max(...r)
151
+ };
152
+ }
153
+ export { n as createPlacementScope, s as createScopeRectResolver, r as getAffectedSplitScope, o as getAllocatedScopeRect, a as getAllocatedScopes };
154
+
155
+ //# sourceMappingURL=scope.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope.utils.js","names":["createPlacementScope","carried","source","getPanelIds","node","kind","id","getAffectedSplitScope","achieved","input","region","affected","after","hasRectChanged","members","candidate","before","key","getAllocatedScopes","memberships","full","remaining","getPanelMembershipKey","geometry","createAllocationIndex","rect","getScopeRect","getAllocatedScopeRect","createScopeRectResolver","indices","leaves","regions","byKey","groupByMember","leaf","getParentRegionKey","scope","getSelectedRegionKeys","selected","keys","prefix","getCommonRegionKey","exact","findExactScopeRect","parent","getChildRange","index","depth","isWithinRegion","first","last","order","leafCount","separator"],"sources":["../../../../src/workspace/utils/placement/scope.utils.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { Rect } from '@nvidia-elements/core/internal';\n\nimport { getPanelIds } from '../model/layout.utils.js';\nimport { getPanelMembershipKey } from '../model/membership.utils.js';\n\nimport type { WorkspacePlacedRegion } from '../geometry/allocation.utils.js';\nimport type { WorkspaceNode } from '../model/layout.utils.js';\n\nexport interface WorkspacePlacementScope {\n kind: 'rail' | 'recipient';\n members: string[];\n}\n\nexport interface WorkspaceScopeBounds {\n key: string;\n rect: Rect;\n}\n\ninterface ScopeRectInput {\n members: string[];\n allocation: WorkspacePlacedRegion[];\n source: string[];\n}\n\nexport type WorkspaceScopeRectResolver = (input: ScopeRectInput) => Rect | undefined;\n\nexport function createPlacementScope(\n kind: WorkspacePlacementScope['kind'],\n node: WorkspaceNode | null,\n source: string[]\n): WorkspacePlacementScope {\n const carried = new Set(source);\n return { kind, members: getPanelIds(node).filter(id => kind === 'rail' || !carried.has(id)) };\n}\n\n/** Includes surviving peers whose computed allocation changes under split constraints. */\nexport function getAffectedSplitScope(input: {\n baseline: WorkspacePlacedRegion[];\n achieved: WorkspacePlacedRegion[];\n source: string[];\n recipient: string[];\n}): WorkspacePlacementScope {\n const achieved = new Map(\n input.achieved.flatMap(region =>\n region.node.type === 'group' ? region.node.panels.map(id => [id, region.rect] as const) : []\n )\n );\n const affected = new Set(input.recipient);\n for (const region of input.baseline) {\n if (region.node.type !== 'group') continue;\n for (const id of region.node.panels) {\n if (input.source.includes(id)) continue;\n const after = achieved.get(id);\n if (after && hasRectChanged(region.rect, after)) {\n affected.add(id);\n }\n }\n }\n const region = input.baseline\n .filter(candidate => {\n const members = getPanelIds(candidate.node);\n return [...affected].every(id => members.includes(id));\n })\n .at(-1);\n return region\n ? { kind: region.node.type === 'group' ? 'recipient' : 'rail', members: getPanelIds(region.node) }\n : { kind: 'recipient', members: input.recipient };\n}\n\nfunction hasRectChanged(before: Rect, after: Rect) {\n return (['x', 'y', 'width', 'height'] as const).some(key => Math.abs(before[key] - after[key]) > 0.000001);\n}\n\n/** Seeds scope bounds before animation can change selection. */\nexport function getAllocatedScopes(input: {\n catalog: WorkspacePlacedRegion[];\n allocation: WorkspacePlacedRegion[];\n source: string[];\n}): WorkspaceScopeBounds[] {\n const carried = new Set(input.source);\n const memberships = new Map<string, string[]>();\n for (const region of input.catalog) {\n const full = getPanelIds(region.node);\n const remaining = full.filter(id => !carried.has(id));\n if (!remaining.length) continue;\n memberships.set(getPanelMembershipKey(full), full);\n if (remaining.length !== full.length) memberships.set(getPanelMembershipKey(remaining), remaining);\n }\n const geometry = createAllocationIndex(input.allocation);\n return [...memberships].flatMap(([key, members]) => {\n const rect = getScopeRect({ members, geometry, carried });\n return rect ? [{ key, rect }] : [];\n });\n}\n\nexport function getAllocatedScopeRect(input: ScopeRectInput): Rect | undefined {\n return getScopeRect({\n members: input.members,\n geometry: createAllocationIndex(input.allocation),\n carried: new Set(input.source)\n });\n}\n\nexport function createScopeRectResolver(): WorkspaceScopeRectResolver {\n const indices = new WeakMap<WorkspacePlacedRegion[], ReturnType<typeof createAllocationIndex>>();\n return input => {\n let geometry = indices.get(input.allocation);\n if (!geometry) {\n geometry = createAllocationIndex(input.allocation);\n indices.set(input.allocation, geometry);\n }\n return getScopeRect({ members: input.members, geometry, carried: new Set(input.source) });\n };\n}\n\nfunction createAllocationIndex(regions: WorkspacePlacedRegion[]) {\n const leaves = regions.filter(region => region.node.type === 'group');\n const byKey = new Map(regions.map((region, order) => [region.key, { ...region, order, leafCount: 0 }]));\n const groupByMember = new Map<string, string>();\n for (const leaf of leaves) {\n getPanelIds(leaf.node).forEach(id => groupByMember.set(id, leaf.key));\n }\n for (const leaf of leaves) {\n for (let key = leaf.key; key; key = getParentRegionKey(key)) {\n const scope = byKey.get(key);\n if (scope) scope.leafCount++;\n }\n }\n return { leaves, byKey, groupByMember };\n}\n\nfunction getSelectedRegionKeys(members: string[], groupByMember: ReadonlyMap<string, string>) {\n const selected = new Set<string>();\n for (const id of members) {\n const key = groupByMember.get(id);\n if (key !== undefined) selected.add(key);\n }\n return selected;\n}\n\n// eslint-disable-next-line max-statements -- Resolve exact scopes before the contiguous-range fallback.\nfunction getScopeRect(input: {\n members: string[];\n geometry: ReturnType<typeof createAllocationIndex>;\n carried: Set<string>;\n}): Rect | undefined {\n const { members, geometry, carried } = input;\n const selected = getSelectedRegionKeys(members, geometry.groupByMember);\n if (!selected.size) return undefined;\n const keys = [...selected];\n const prefix = getCommonRegionKey(keys);\n const exact = findExactScopeRect(geometry, prefix, selected.size);\n if (exact) return exact;\n const parent = geometry.byKey.get(prefix);\n if (parent?.node.type !== 'split') return undefined;\n const { depth, first, last } = getChildRange(keys, prefix);\n const covered = geometry.leaves.filter(leaf => {\n const index = Number(leaf.key.split('.')[depth]);\n return isWithinRegion(leaf.key, prefix) && index >= first && index <= last;\n });\n if (covered.some(leaf => !selected.has(leaf.key) && !getPanelIds(leaf.node).every(id => carried.has(id))))\n return undefined;\n const before = geometry.byKey.get(`${prefix}.${first}`);\n const after = geometry.byKey.get(`${prefix}.${last}`);\n if (!before || !after) return undefined;\n return parent.node.axis === 'horizontal'\n ? {\n x: before.rect.x,\n y: parent.rect.y,\n width: after.rect.x + after.rect.width - before.rect.x,\n height: parent.rect.height\n }\n : {\n x: parent.rect.x,\n y: before.rect.y,\n width: parent.rect.width,\n height: after.rect.y + after.rect.height - before.rect.y\n };\n}\n\nfunction findExactScopeRect(geometry: ReturnType<typeof createAllocationIndex>, prefix: string, leafCount: number) {\n let rect: Rect | undefined;\n let order = -1;\n for (let key = prefix; key; key = getParentRegionKey(key)) {\n const scope = geometry.byKey.get(key);\n // Scopes with the same leaves use the last supplied region, including filtered catalogs.\n if (scope?.leafCount === leafCount && scope.order > order) {\n rect = scope.rect;\n order = scope.order;\n }\n }\n return rect;\n}\n\nfunction getParentRegionKey(key: string) {\n const separator = key.lastIndexOf('.');\n return separator < 0 ? '' : key.slice(0, separator);\n}\n\nfunction getCommonRegionKey(keys: string[]): string {\n let prefix = keys[0]!;\n for (const key of keys) {\n while (!isWithinRegion(key, prefix)) prefix = getParentRegionKey(prefix);\n }\n return prefix;\n}\n\nfunction isWithinRegion(key: string, parent: string): boolean {\n return key === parent || key.startsWith(`${parent}.`);\n}\n\nfunction getChildRange(keys: string[], parent: string) {\n const depth = parent.split('.').length;\n const indices = keys.map(key => Number(key.split('.')[depth]));\n return { depth, first: Math.min(...indices), last: Math.max(...indices) };\n}\n"],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { WorkspaceDragOffer } from '../interaction/drag-preview.utils.js';
2
+ import type { GroupInsertion, GroupInsertionInputs } from './group-insertion.utils.js';
3
+ import type { WorkspacePlacementPlanner } from './planner.utils.js';
4
+ import type { WorkspacePlacementOfferInputs } from './preparation.utils.js';
5
+ /** Owns reusable planning work until the component finishes its current drag. */
6
+ export declare class WorkspacePlacementSession {
7
+ #private;
8
+ plan(input: Parameters<WorkspacePlacementPlanner>[0]): import("./planner.utils.js").WorkspacePlacementPlan | undefined;
9
+ getInsertion(input: GroupInsertionInputs): GroupInsertion | undefined;
10
+ prepareOffer(input: WorkspacePlacementOfferInputs): WorkspaceDragOffer | undefined;
11
+ }
@@ -0,0 +1,78 @@
1
+ import { sameArrayItems as e, sameRect as t } from "../comparison.utils.js";
2
+ import { sameDestination as n } from "../model/operations.utils.js";
3
+ import { canReuseLayoutProjection as r } from "../model/projection.utils.js";
4
+ import { computeGroupInsertion as i } from "./group-insertion.utils.js";
5
+ import { createWorkspacePlacementPlanner as a, planWorkspacePlacement as o } from "./planner.utils.js";
6
+ import { sameWorkspaceRequirements as s } from "../geometry/sizing.utils.js";
7
+ import { computePlacementOffer as c } from "./preparation.utils.js";
8
+ // src/workspace/utils/placement/session.utils.ts
9
+ var l = class {
10
+ #e = a();
11
+ #t = /* @__PURE__ */ new WeakSet();
12
+ #n = /* @__PURE__ */ new WeakMap();
13
+ #r;
14
+ plan(e) {
15
+ if (!r(e.projectLayout)) return o(e);
16
+ let t = this.#e(e);
17
+ return t && this.#t.add(t.layout), t;
18
+ }
19
+ getInsertion(t) {
20
+ let n = t.plan.layout;
21
+ if (t.planPlacement || !this.#t.has(n) || !r(t.projectLayout)) return this.#n.delete(n), i(t);
22
+ let a = this.#n.get(n);
23
+ if (a && e(a.source, t.source) && e(a.available, t.available) && e(a.closed, n.closed)) return a.insertion;
24
+ this.#n.delete(n);
25
+ let o = i(t);
26
+ return this.#n.set(n, {
27
+ source: [...t.source],
28
+ available: [...t.available],
29
+ closed: [...n.closed],
30
+ insertion: o
31
+ }), o;
32
+ }
33
+ prepareOffer(e) {
34
+ if (!u(e)) return this.#r = void 0, this.#i(e);
35
+ let n = e.evaluation.bounds(), r = e.evaluation.client({
36
+ x: 0,
37
+ y: 0,
38
+ width: 0,
39
+ height: 0
40
+ }), i = this.#r;
41
+ if (i && d(i, e) && t(i.bounds, n) && t(i.origin, r)) return i.offer;
42
+ this.#r = void 0;
43
+ let a = this.#i(e), { target: o, position: s, region: c, index: l } = e.intent.destination;
44
+ return this.#r = {
45
+ layout: e.layout,
46
+ measurements: e.measurements,
47
+ groupable: e.groupable,
48
+ source: [...e.source],
49
+ available: e.evaluation.available,
50
+ requirements: e.evaluation.requirements,
51
+ destination: {
52
+ target: o,
53
+ position: s,
54
+ region: c,
55
+ index: l
56
+ },
57
+ bounds: n,
58
+ origin: r,
59
+ offer: a
60
+ }, a;
61
+ }
62
+ #i(e) {
63
+ let t = e.planner || e.placementSession === this ? e : {
64
+ ...e,
65
+ placementSession: this
66
+ };
67
+ return c(t);
68
+ }
69
+ };
70
+ function u(e) {
71
+ return !e.planner && r(e.evaluation.projectLayout) && e.intent.kind === "split" && !e.context?.acquisition && !e.context?.selected?.blocked;
72
+ }
73
+ function d(t, r) {
74
+ return t.layout === r.layout && t.measurements === r.measurements && t.groupable === r.groupable && e(t.source, r.source) && e(t.available, r.evaluation.available) && n(t.destination, r.intent.destination) && s(t.requirements, r.evaluation.requirements);
75
+ }
76
+ export { l as WorkspacePlacementSession };
77
+
78
+ //# sourceMappingURL=session.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.utils.js","names":["WorkspacePlacementSession","createWorkspacePlacementPlanner","canReuseLayoutProjection","input","planWorkspacePlacement","plan","#planner","#producedLayouts","layout","#insertions","computeGroupInsertion","previous","sameArrayItems","insertion","canReuseSplitOffer","#splitOffer","#computeOffer","bounds","origin","sameOfferInputs","sameRect","offer","sessionInput","computePlacementOffer","sameDestination","sameWorkspaceRequirements"],"sources":["../../../../src/workspace/utils/placement/session.utils.ts"],"sourcesContent":["// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { Rect } from '@nvidia-elements/core/internal';\n\nimport { sameWorkspaceRequirements } from '../geometry/sizing.utils.js';\nimport { sameDestination } from '../model/operations.utils.js';\nimport { canReuseLayoutProjection } from '../model/projection.utils.js';\nimport { computeGroupInsertion } from './group-insertion.utils.js';\nimport { createWorkspacePlacementPlanner, planWorkspacePlacement } from './planner.utils.js';\nimport { computePlacementOffer } from './preparation.utils.js';\nimport { sameArrayItems, sameRect } from '../comparison.utils.js';\n\nimport type { WorkspaceRequirements } from '../geometry/sizing.utils.js';\nimport type { WorkspaceDragOffer } from '../interaction/drag-preview.utils.js';\nimport type { WorkspaceLayout } from '../model/layout.utils.js';\nimport type { WorkspaceDestination } from '../model/operations.utils.js';\nimport type { GroupInsertion, GroupInsertionInputs } from './group-insertion.utils.js';\nimport type { WorkspacePlacementPlanner } from './planner.utils.js';\nimport type { WorkspacePlacementOfferInputs } from './preparation.utils.js';\nimport type { WorkspaceMeasurements } from '../presentation/measurements.utils.js';\n\ninterface CachedInsertion {\n source: string[];\n available: string[];\n closed: string[];\n insertion: GroupInsertion | undefined;\n}\n\ninterface CachedSplitOffer {\n layout: WorkspaceLayout;\n measurements: WorkspaceMeasurements;\n groupable: boolean;\n source: string[];\n available: string[];\n requirements: WorkspaceRequirements;\n destination: WorkspaceDestination;\n bounds: Rect;\n origin: Rect;\n offer: WorkspaceDragOffer | undefined;\n}\n\n/** Owns reusable planning work until the component finishes its current drag. */\nexport class WorkspacePlacementSession {\n readonly #planner = createWorkspacePlacementPlanner();\n readonly #producedLayouts = new WeakSet<WorkspaceLayout>();\n readonly #insertions = new WeakMap<WorkspaceLayout, CachedInsertion>();\n #splitOffer?: CachedSplitOffer;\n\n plan(input: Parameters<WorkspacePlacementPlanner>[0]) {\n if (!canReuseLayoutProjection(input.projectLayout)) return planWorkspacePlacement(input);\n const plan = this.#planner(input);\n if (plan) this.#producedLayouts.add(plan.layout);\n return plan;\n }\n\n getInsertion(input: GroupInsertionInputs): GroupInsertion | undefined {\n const layout = input.plan.layout;\n if (input.planPlacement || !this.#producedLayouts.has(layout) || !canReuseLayoutProjection(input.projectLayout)) {\n this.#insertions.delete(layout);\n return computeGroupInsertion(input);\n }\n const previous = this.#insertions.get(layout);\n if (\n previous &&\n sameArrayItems(previous.source, input.source) &&\n sameArrayItems(previous.available, input.available) &&\n sameArrayItems(previous.closed, layout.closed)\n )\n return previous.insertion;\n this.#insertions.delete(layout);\n const insertion = computeGroupInsertion(input);\n this.#insertions.set(layout, {\n source: [...input.source],\n available: [...input.available],\n closed: [...layout.closed],\n insertion\n });\n return insertion;\n }\n\n prepareOffer(input: WorkspacePlacementOfferInputs): WorkspaceDragOffer | undefined {\n if (!canReuseSplitOffer(input)) {\n this.#splitOffer = undefined;\n return this.#computeOffer(input);\n }\n const bounds = input.evaluation.bounds();\n const origin = input.evaluation.client({ x: 0, y: 0, width: 0, height: 0 });\n const previous = this.#splitOffer;\n if (\n previous &&\n sameOfferInputs(previous, input) &&\n sameRect(previous.bounds, bounds) &&\n sameRect(previous.origin, origin)\n ) {\n return previous.offer;\n }\n this.#splitOffer = undefined;\n const offer = this.#computeOffer(input);\n const { target, position, region, index } = input.intent.destination;\n this.#splitOffer = {\n layout: input.layout,\n measurements: input.measurements,\n groupable: input.groupable,\n source: [...input.source],\n available: input.evaluation.available,\n requirements: input.evaluation.requirements,\n destination: { target, position, region, index },\n bounds,\n origin,\n offer\n };\n return offer;\n }\n\n #computeOffer(input: WorkspacePlacementOfferInputs) {\n const sessionInput =\n input.planner || input.placementSession === this ? input : { ...input, placementSession: this };\n return computePlacementOffer(sessionInput);\n }\n}\n\nfunction canReuseSplitOffer(input: WorkspacePlacementOfferInputs) {\n return (\n !input.planner &&\n canReuseLayoutProjection(input.evaluation.projectLayout) &&\n input.intent.kind === 'split' &&\n !input.context?.acquisition &&\n !input.context?.selected?.blocked\n );\n}\n\nfunction sameOfferInputs(previous: CachedSplitOffer, input: WorkspacePlacementOfferInputs) {\n return (\n previous.layout === input.layout &&\n previous.measurements === input.measurements &&\n previous.groupable === input.groupable &&\n sameArrayItems(previous.source, input.source) &&\n sameArrayItems(previous.available, input.evaluation.available) &&\n sameDestination(previous.destination, input.intent.destination) &&\n sameWorkspaceRequirements(previous.requirements, input.evaluation.requirements)\n );\n}\n"],"mappings":"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"}
@@ -1,12 +1,12 @@
1
1
  import type { WorkspacePlacedRegion } from '../geometry/allocation.utils.js';
2
2
  import type { WorkspaceRequirements } from '../geometry/sizing.utils.js';
3
3
  import type { WorkspaceLayoutProjector } from '../model/projection.utils.js';
4
- import type { WorkspaceContextRectResolver } from './context.utils.js';
5
4
  import type { WorkspacePlacementPlan } from './planner.utils.js';
5
+ import type { WorkspaceScopeRectResolver } from './scope.utils.js';
6
6
  export interface WorkspaceSplitPreference {
7
7
  allocation: WorkspacePlacedRegion[];
8
8
  requirements: WorkspaceRequirements;
9
- contextRect?: WorkspaceContextRectResolver;
9
+ resolveScopeRect?: WorkspaceScopeRectResolver;
10
10
  }
11
11
  /** Fits placements to the final normalized branch budget, including every separator. */
12
12
  export declare function sizePreferredSplit(input: {
@@ -1,39 +1,39 @@
1
1
  import { getPanelIds as e } from "../model/layout.utils.js";
2
2
  import { projectLayout as t } from "../model/operations.utils.js";
3
- import { getAllocatedContextRect as n } from "./context.utils.js";
4
- import { rebaseProjectedSplit as r } from "../model/projection.utils.js";
3
+ import { rebaseProjectedSplit as n } from "../model/projection.utils.js";
4
+ import { getAllocatedScopeRect as r } from "./scope.utils.js";
5
5
  import { getMinimumWorkspaceDimensions as i } from "../geometry/sizing.utils.js";
6
6
  import { fitSizes as a } from "../geometry/partition.utils.js";
7
7
  // src/workspace/utils/placement/split-sizing.utils.ts
8
8
  function o(e) {
9
- let { plan: n, preference: i, source: a, available: o } = e;
10
- if (!i || !n.context || n.kind !== "split") return n;
11
- let c = (e.projectLayout ?? t)(n.layout, o).root, l = p(c, a);
12
- if (!l) return n;
9
+ let { plan: r, preference: i, source: a, available: o } = e;
10
+ if (!i || !r.scope || r.kind !== "split") return r;
11
+ let c = (e.projectLayout ?? t)(r.layout, o).root, l = p(c, a);
12
+ if (!l) return r;
13
13
  let d = s({
14
14
  branch: l,
15
15
  preference: i,
16
16
  source: a,
17
- recipients: n.context.members
17
+ recipients: r.scope.members
18
18
  });
19
- if (!d) return n;
19
+ if (!d) return r;
20
20
  let f = u(d);
21
- if (!f) return n;
22
- let m = r(n.layout, l, f, o, e.projectLayout);
21
+ if (!f) return r;
22
+ let m = n(r.layout, l, f, o, e.projectLayout);
23
23
  return m ? {
24
- ...n,
24
+ ...r,
25
25
  layout: m
26
- } : n;
26
+ } : r;
27
27
  }
28
28
  function s(t) {
29
- let { branch: r, preference: i, source: a, recipients: o } = t, s = r.axis === "horizontal" ? "width" : "height", u = (i.contextRect ?? n)({
30
- members: e(r).filter((e) => !a.includes(e)),
29
+ let { branch: n, preference: i, source: a, recipients: o } = t, s = n.axis === "horizontal" ? "width" : "height", u = (i.resolveScopeRect ?? r)({
30
+ members: e(n).filter((e) => !a.includes(e)),
31
31
  allocation: i.allocation,
32
32
  source: a
33
33
  });
34
34
  if (!u) return;
35
35
  let d = l({
36
- branch: r,
36
+ branch: n,
37
37
  preference: i,
38
38
  source: a,
39
39
  recipients: o
@@ -50,7 +50,7 @@ function s(t) {
50
50
  };
51
51
  }
52
52
  function c(e) {
53
- let t = (e.preference.contextRect ?? n)({
53
+ let t = (e.preference.resolveScopeRect ?? r)({
54
54
  members: e.members,
55
55
  allocation: e.preference.allocation,
56
56
  source: e.source
@@ -58,9 +58,9 @@ function c(e) {
58
58
  return t ? Math.max(0, (t[e.axis] - e.preference.requirements.gap) / 2) : NaN;
59
59
  }
60
60
  function l(t) {
61
- let { branch: r, preference: a, source: o, recipients: s } = t, c = r.axis === "horizontal" ? "width" : "height", l = r.children.map((t) => {
62
- let r = e(t), l = r.every((e) => o.includes(e)), u = r.every((e) => s.includes(e)), d = !u && r.some((e) => s.includes(e)), f = l ? void 0 : (a.contextRect ?? n)({
63
- members: r,
61
+ let { branch: n, preference: a, source: o, recipients: s } = t, c = n.axis === "horizontal" ? "width" : "height", l = n.children.map((t) => {
62
+ let n = e(t), l = n.every((e) => o.includes(e)), u = n.every((e) => s.includes(e)), d = !u && n.some((e) => s.includes(e)), f = l ? void 0 : (a.resolveScopeRect ?? r)({
63
+ members: n,
64
64
  allocation: a.allocation,
65
65
  source: o
66
66
  });