@cardstack/boxel-cli 0.10.0 → 0.10.1-unstable.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 (1070) hide show
  1. package/bundled-realms/pretui/README.md +49 -0
  2. package/bundled-realms/pretui/color/LICENSE +21 -0
  3. package/bundled-realms/pretui/color/README.md +155 -0
  4. package/bundled-realms/pretui/color/index.js +78 -0
  5. package/bundled-realms/pretui/color-engine.ts +1243 -0
  6. package/bundled-realms/pretui/components/accordion.gts +58 -0
  7. package/bundled-realms/pretui/components/accordion.md +60 -0
  8. package/bundled-realms/pretui/components/accordion.usage.gts +129 -0
  9. package/bundled-realms/pretui/components/action-bar.gts +407 -0
  10. package/bundled-realms/pretui/components/action-bar.md +48 -0
  11. package/bundled-realms/pretui/components/action-bar.usage.gts +213 -0
  12. package/bundled-realms/pretui/components/affix.gts +116 -0
  13. package/bundled-realms/pretui/components/affix.md +54 -0
  14. package/bundled-realms/pretui/components/affix.usage.gts +73 -0
  15. package/bundled-realms/pretui/components/agent-question.gts +116 -0
  16. package/bundled-realms/pretui/components/agent-question.md +50 -0
  17. package/bundled-realms/pretui/components/agent-question.usage.gts +22 -0
  18. package/bundled-realms/pretui/components/ai-instructions.gts +378 -0
  19. package/bundled-realms/pretui/components/ai-instructions.md +49 -0
  20. package/bundled-realms/pretui/components/ai-instructions.usage.gts +101 -0
  21. package/bundled-realms/pretui/components/alert-dialog.gts +223 -0
  22. package/bundled-realms/pretui/components/alert-dialog.md +76 -0
  23. package/bundled-realms/pretui/components/alert-dialog.usage.gts +128 -0
  24. package/bundled-realms/pretui/components/alert.gts +163 -0
  25. package/bundled-realms/pretui/components/alert.md +57 -0
  26. package/bundled-realms/pretui/components/alert.usage.gts +99 -0
  27. package/bundled-realms/pretui/components/amount-input.gts +621 -0
  28. package/bundled-realms/pretui/components/amount-input.md +63 -0
  29. package/bundled-realms/pretui/components/amount-input.usage.gts +170 -0
  30. package/bundled-realms/pretui/components/angle-dial.gts +367 -0
  31. package/bundled-realms/pretui/components/angle-dial.md +56 -0
  32. package/bundled-realms/pretui/components/angle-dial.usage.gts +166 -0
  33. package/bundled-realms/pretui/components/animated-image.gts +291 -0
  34. package/bundled-realms/pretui/components/animated-image.md +49 -0
  35. package/bundled-realms/pretui/components/animated-image.usage.gts +127 -0
  36. package/bundled-realms/pretui/components/app-shell.gts +19 -0
  37. package/bundled-realms/pretui/components/app-shell.md +43 -0
  38. package/bundled-realms/pretui/components/app-shell.usage.gts +52 -0
  39. package/bundled-realms/pretui/components/approval-footer.gts +69 -0
  40. package/bundled-realms/pretui/components/approval-footer.md +49 -0
  41. package/bundled-realms/pretui/components/approval-footer.usage.gts +22 -0
  42. package/bundled-realms/pretui/components/aspect-ratio.gts +328 -0
  43. package/bundled-realms/pretui/components/aspect-ratio.md +72 -0
  44. package/bundled-realms/pretui/components/aspect-ratio.usage.gts +174 -0
  45. package/bundled-realms/pretui/components/asset-grid.gts +542 -0
  46. package/bundled-realms/pretui/components/asset-grid.md +54 -0
  47. package/bundled-realms/pretui/components/asset-grid.usage.gts +171 -0
  48. package/bundled-realms/pretui/components/asset-well.gts +731 -0
  49. package/bundled-realms/pretui/components/asset-well.md +72 -0
  50. package/bundled-realms/pretui/components/asset-well.usage.gts +264 -0
  51. package/bundled-realms/pretui/components/audio-player.gts +152 -0
  52. package/bundled-realms/pretui/components/audio-player.md +51 -0
  53. package/bundled-realms/pretui/components/audio-player.usage.gts +118 -0
  54. package/bundled-realms/pretui/components/autocomplete.gts +1150 -0
  55. package/bundled-realms/pretui/components/autocomplete.md +67 -0
  56. package/bundled-realms/pretui/components/autocomplete.usage.gts +339 -0
  57. package/bundled-realms/pretui/components/avatar-group.gts +30 -0
  58. package/bundled-realms/pretui/components/avatar-group.md +48 -0
  59. package/bundled-realms/pretui/components/avatar-group.usage.gts +39 -0
  60. package/bundled-realms/pretui/components/avatar.gts +134 -0
  61. package/bundled-realms/pretui/components/avatar.md +69 -0
  62. package/bundled-realms/pretui/components/avatar.usage.gts +101 -0
  63. package/bundled-realms/pretui/components/backdrop.gts +179 -0
  64. package/bundled-realms/pretui/components/backdrop.md +56 -0
  65. package/bundled-realms/pretui/components/backdrop.usage.gts +223 -0
  66. package/bundled-realms/pretui/components/background-field.gts +743 -0
  67. package/bundled-realms/pretui/components/background-field.md +62 -0
  68. package/bundled-realms/pretui/components/background-field.usage.gts +328 -0
  69. package/bundled-realms/pretui/components/badge.gts +188 -0
  70. package/bundled-realms/pretui/components/badge.md +62 -0
  71. package/bundled-realms/pretui/components/badge.usage.gts +73 -0
  72. package/bundled-realms/pretui/components/bar-list.gts +255 -0
  73. package/bundled-realms/pretui/components/bar-list.md +49 -0
  74. package/bundled-realms/pretui/components/bar-list.usage.gts +129 -0
  75. package/bundled-realms/pretui/components/board.gts +108 -0
  76. package/bundled-realms/pretui/components/board.md +54 -0
  77. package/bundled-realms/pretui/components/board.usage.gts +321 -0
  78. package/bundled-realms/pretui/components/bottom-nav.gts +217 -0
  79. package/bundled-realms/pretui/components/bottom-nav.md +64 -0
  80. package/bundled-realms/pretui/components/bottom-nav.usage.gts +68 -0
  81. package/bundled-realms/pretui/components/breadcrumb.gts +56 -0
  82. package/bundled-realms/pretui/components/breadcrumb.md +52 -0
  83. package/bundled-realms/pretui/components/breadcrumb.usage.gts +24 -0
  84. package/bundled-realms/pretui/components/broken-link.gts +46 -0
  85. package/bundled-realms/pretui/components/broken-link.md +50 -0
  86. package/bundled-realms/pretui/components/broken-link.usage.gts +57 -0
  87. package/bundled-realms/pretui/components/button-group.gts +246 -0
  88. package/bundled-realms/pretui/components/button-group.md +46 -0
  89. package/bundled-realms/pretui/components/button-group.usage.gts +137 -0
  90. package/bundled-realms/pretui/components/button.examples.gts +67 -0
  91. package/bundled-realms/pretui/components/button.gts +594 -0
  92. package/bundled-realms/pretui/components/button.md +81 -0
  93. package/bundled-realms/pretui/components/button.usage.gts +159 -0
  94. package/bundled-realms/pretui/components/calendar.gts +457 -0
  95. package/bundled-realms/pretui/components/calendar.md +57 -0
  96. package/bundled-realms/pretui/components/calendar.usage.gts +161 -0
  97. package/bundled-realms/pretui/components/callout.gts +2 -0
  98. package/bundled-realms/pretui/components/callout.md +40 -0
  99. package/bundled-realms/pretui/components/callout.usage.gts +48 -0
  100. package/bundled-realms/pretui/components/card.gts +637 -0
  101. package/bundled-realms/pretui/components/card.md +105 -0
  102. package/bundled-realms/pretui/components/card.usage.gts +279 -0
  103. package/bundled-realms/pretui/components/carousel.gts +583 -0
  104. package/bundled-realms/pretui/components/carousel.md +53 -0
  105. package/bundled-realms/pretui/components/carousel.usage.gts +220 -0
  106. package/bundled-realms/pretui/components/cascader.gts +436 -0
  107. package/bundled-realms/pretui/components/cascader.md +61 -0
  108. package/bundled-realms/pretui/components/cascader.usage.gts +79 -0
  109. package/bundled-realms/pretui/components/channel-slider.gts +251 -0
  110. package/bundled-realms/pretui/components/channel-slider.md +51 -0
  111. package/bundled-realms/pretui/components/channel-slider.usage.gts +104 -0
  112. package/bundled-realms/pretui/components/chart.gts +1011 -0
  113. package/bundled-realms/pretui/components/chart.md +60 -0
  114. package/bundled-realms/pretui/components/chart.usage.gts +660 -0
  115. package/bundled-realms/pretui/components/checkbox-card.gts +82 -0
  116. package/bundled-realms/pretui/components/checkbox-card.md +73 -0
  117. package/bundled-realms/pretui/components/checkbox-card.usage.gts +114 -0
  118. package/bundled-realms/pretui/components/checkbox.examples.gts +61 -0
  119. package/bundled-realms/pretui/components/checkbox.gts +123 -0
  120. package/bundled-realms/pretui/components/checkbox.md +55 -0
  121. package/bundled-realms/pretui/components/checkbox.usage.gts +31 -0
  122. package/bundled-realms/pretui/components/chip.gts +136 -0
  123. package/bundled-realms/pretui/components/chip.md +54 -0
  124. package/bundled-realms/pretui/components/chip.usage.gts +97 -0
  125. package/bundled-realms/pretui/components/code-block.gts +888 -0
  126. package/bundled-realms/pretui/components/code-block.md +61 -0
  127. package/bundled-realms/pretui/components/code-block.usage.gts +374 -0
  128. package/bundled-realms/pretui/components/collapsed-turn.gts +44 -0
  129. package/bundled-realms/pretui/components/collapsed-turn.md +48 -0
  130. package/bundled-realms/pretui/components/collapsed-turn.usage.gts +21 -0
  131. package/bundled-realms/pretui/components/collapsible.gts +283 -0
  132. package/bundled-realms/pretui/components/collapsible.md +69 -0
  133. package/bundled-realms/pretui/components/collapsible.usage.gts +173 -0
  134. package/bundled-realms/pretui/components/color-area.gts +339 -0
  135. package/bundled-realms/pretui/components/color-area.md +49 -0
  136. package/bundled-realms/pretui/components/color-area.usage.gts +72 -0
  137. package/bundled-realms/pretui/components/color-field.gts +179 -0
  138. package/bundled-realms/pretui/components/color-field.md +47 -0
  139. package/bundled-realms/pretui/components/color-field.usage.gts +87 -0
  140. package/bundled-realms/pretui/components/color-palette.gts +198 -0
  141. package/bundled-realms/pretui/components/color-palette.md +48 -0
  142. package/bundled-realms/pretui/components/color-picker.gts +721 -0
  143. package/bundled-realms/pretui/components/color-picker.md +59 -0
  144. package/bundled-realms/pretui/components/color-picker.usage.gts +122 -0
  145. package/bundled-realms/pretui/components/color-stop-editor.gts +184 -0
  146. package/bundled-realms/pretui/components/color-stop-editor.md +46 -0
  147. package/bundled-realms/pretui/components/color-stop-editor.usage.gts +75 -0
  148. package/bundled-realms/pretui/components/combobox.gts +333 -0
  149. package/bundled-realms/pretui/components/combobox.md +49 -0
  150. package/bundled-realms/pretui/components/combobox.usage.gts +143 -0
  151. package/bundled-realms/pretui/components/command-palette.gts +982 -0
  152. package/bundled-realms/pretui/components/command-palette.md +47 -0
  153. package/bundled-realms/pretui/components/command-palette.usage.gts +95 -0
  154. package/bundled-realms/pretui/components/command.gts +2 -0
  155. package/bundled-realms/pretui/components/command.md +45 -0
  156. package/bundled-realms/pretui/components/command.usage.gts +58 -0
  157. package/bundled-realms/pretui/components/compaction-chip.gts +273 -0
  158. package/bundled-realms/pretui/components/compaction-chip.md +45 -0
  159. package/bundled-realms/pretui/components/compaction-chip.usage.gts +110 -0
  160. package/bundled-realms/pretui/components/comparison.gts +223 -0
  161. package/bundled-realms/pretui/components/comparison.md +46 -0
  162. package/bundled-realms/pretui/components/comparison.usage.gts +148 -0
  163. package/bundled-realms/pretui/components/composer.gts +566 -0
  164. package/bundled-realms/pretui/components/composer.md +59 -0
  165. package/bundled-realms/pretui/components/composer.usage.gts +173 -0
  166. package/bundled-realms/pretui/components/compound-field.gts +289 -0
  167. package/bundled-realms/pretui/components/compound-field.md +66 -0
  168. package/bundled-realms/pretui/components/compound-field.usage.gts +378 -0
  169. package/bundled-realms/pretui/components/contact-link.gts +583 -0
  170. package/bundled-realms/pretui/components/contact-link.md +53 -0
  171. package/bundled-realms/pretui/components/contact-link.usage.gts +273 -0
  172. package/bundled-realms/pretui/components/context-menu.gts +811 -0
  173. package/bundled-realms/pretui/components/context-menu.md +74 -0
  174. package/bundled-realms/pretui/components/context-menu.usage.gts +244 -0
  175. package/bundled-realms/pretui/components/copy-button.gts +237 -0
  176. package/bundled-realms/pretui/components/copy-button.md +71 -0
  177. package/bundled-realms/pretui/components/copy-button.usage.gts +135 -0
  178. package/bundled-realms/pretui/components/copy-fit.gts +396 -0
  179. package/bundled-realms/pretui/components/copy-fit.md +60 -0
  180. package/bundled-realms/pretui/components/copy-fit.usage.gts +200 -0
  181. package/bundled-realms/pretui/components/cta-band.gts +285 -0
  182. package/bundled-realms/pretui/components/cta-band.md +50 -0
  183. package/bundled-realms/pretui/components/cta-band.usage.gts +208 -0
  184. package/bundled-realms/pretui/components/cue.gts +180 -0
  185. package/bundled-realms/pretui/components/cue.md +53 -0
  186. package/bundled-realms/pretui/components/cue.usage.gts +88 -0
  187. package/bundled-realms/pretui/components/cursor-trail.gts +221 -0
  188. package/bundled-realms/pretui/components/cursor-trail.md +56 -0
  189. package/bundled-realms/pretui/components/cursor-trail.usage.gts +218 -0
  190. package/bundled-realms/pretui/components/dashboard-grid.gts +939 -0
  191. package/bundled-realms/pretui/components/dashboard-grid.md +60 -0
  192. package/bundled-realms/pretui/components/dashboard-grid.usage.gts +307 -0
  193. package/bundled-realms/pretui/components/dashboard-item.gts +286 -0
  194. package/bundled-realms/pretui/components/dashboard-item.md +52 -0
  195. package/bundled-realms/pretui/components/dashboard-item.usage.gts +87 -0
  196. package/bundled-realms/pretui/components/data-grid.gts +263 -0
  197. package/bundled-realms/pretui/components/data-grid.md +64 -0
  198. package/bundled-realms/pretui/components/data-grid.usage.gts +50 -0
  199. package/bundled-realms/pretui/components/data-table.gts +1618 -0
  200. package/bundled-realms/pretui/components/data-table.md +104 -0
  201. package/bundled-realms/pretui/components/data-table.usage.gts +324 -0
  202. package/bundled-realms/pretui/components/date-picker.gts +98 -0
  203. package/bundled-realms/pretui/components/date-picker.md +59 -0
  204. package/bundled-realms/pretui/components/date-picker.usage.gts +66 -0
  205. package/bundled-realms/pretui/components/date-range-picker.gts +131 -0
  206. package/bundled-realms/pretui/components/date-range-picker.md +55 -0
  207. package/bundled-realms/pretui/components/date-range-picker.usage.gts +125 -0
  208. package/bundled-realms/pretui/components/date-time-picker.gts +227 -0
  209. package/bundled-realms/pretui/components/date-time-picker.md +60 -0
  210. package/bundled-realms/pretui/components/date-time-picker.usage.gts +64 -0
  211. package/bundled-realms/pretui/components/defer.gts +374 -0
  212. package/bundled-realms/pretui/components/defer.md +61 -0
  213. package/bundled-realms/pretui/components/defer.usage.gts +174 -0
  214. package/bundled-realms/pretui/components/delta.gts +45 -0
  215. package/bundled-realms/pretui/components/delta.md +53 -0
  216. package/bundled-realms/pretui/components/delta.usage.gts +31 -0
  217. package/bundled-realms/pretui/components/descriptions.gts +365 -0
  218. package/bundled-realms/pretui/components/descriptions.md +73 -0
  219. package/bundled-realms/pretui/components/descriptions.usage.gts +123 -0
  220. package/bundled-realms/pretui/components/dialog.gts +153 -0
  221. package/bundled-realms/pretui/components/dialog.md +60 -0
  222. package/bundled-realms/pretui/components/dialog.usage.gts +86 -0
  223. package/bundled-realms/pretui/components/diff-block.gts +89 -0
  224. package/bundled-realms/pretui/components/diff-block.md +51 -0
  225. package/bundled-realms/pretui/components/diff-block.usage.gts +27 -0
  226. package/bundled-realms/pretui/components/disclosure.gts +2 -0
  227. package/bundled-realms/pretui/components/disclosure.md +45 -0
  228. package/bundled-realms/pretui/components/disclosure.usage.gts +47 -0
  229. package/bundled-realms/pretui/components/divider.gts +75 -0
  230. package/bundled-realms/pretui/components/divider.md +49 -0
  231. package/bundled-realms/pretui/components/divider.usage.gts +98 -0
  232. package/bundled-realms/pretui/components/doc-report.gts +306 -0
  233. package/bundled-realms/pretui/components/doc-report.md +45 -0
  234. package/bundled-realms/pretui/components/doc-report.usage.gts +126 -0
  235. package/bundled-realms/pretui/components/dock.gts +165 -0
  236. package/bundled-realms/pretui/components/dock.md +42 -0
  237. package/bundled-realms/pretui/components/dock.usage.gts +114 -0
  238. package/bundled-realms/pretui/components/drawer.gts +166 -0
  239. package/bundled-realms/pretui/components/drawer.md +66 -0
  240. package/bundled-realms/pretui/components/drawer.usage.gts +111 -0
  241. package/bundled-realms/pretui/components/dropzone.gts +314 -0
  242. package/bundled-realms/pretui/components/dropzone.md +56 -0
  243. package/bundled-realms/pretui/components/dropzone.usage.gts +203 -0
  244. package/bundled-realms/pretui/components/dueling-picklist.gts +991 -0
  245. package/bundled-realms/pretui/components/dueling-picklist.md +67 -0
  246. package/bundled-realms/pretui/components/dueling-picklist.usage.gts +182 -0
  247. package/bundled-realms/pretui/components/dynamic-island.gts +264 -0
  248. package/bundled-realms/pretui/components/dynamic-island.md +45 -0
  249. package/bundled-realms/pretui/components/dynamic-island.usage.gts +195 -0
  250. package/bundled-realms/pretui/components/easing-curve.gts +629 -0
  251. package/bundled-realms/pretui/components/easing-curve.md +46 -0
  252. package/bundled-realms/pretui/components/easing-curve.usage.gts +122 -0
  253. package/bundled-realms/pretui/components/edit-in-place.gts +559 -0
  254. package/bundled-realms/pretui/components/edit-in-place.md +63 -0
  255. package/bundled-realms/pretui/components/edit-in-place.usage.gts +209 -0
  256. package/bundled-realms/pretui/components/editable.gts +299 -0
  257. package/bundled-realms/pretui/components/editable.md +79 -0
  258. package/bundled-realms/pretui/components/editable.usage.gts +68 -0
  259. package/bundled-realms/pretui/components/email-input.gts +83 -0
  260. package/bundled-realms/pretui/components/email-input.md +52 -0
  261. package/bundled-realms/pretui/components/email-input.usage.gts +90 -0
  262. package/bundled-realms/pretui/components/emoji-button.gts +162 -0
  263. package/bundled-realms/pretui/components/emoji-button.md +46 -0
  264. package/bundled-realms/pretui/components/emoji-button.usage.gts +174 -0
  265. package/bundled-realms/pretui/components/emoji-picker.gts +1396 -0
  266. package/bundled-realms/pretui/components/emoji-picker.md +53 -0
  267. package/bundled-realms/pretui/components/emoji-picker.usage.gts +235 -0
  268. package/bundled-realms/pretui/components/empty-state.gts +162 -0
  269. package/bundled-realms/pretui/components/empty-state.md +63 -0
  270. package/bundled-realms/pretui/components/empty-state.usage.gts +113 -0
  271. package/bundled-realms/pretui/components/empty.gts +2 -0
  272. package/bundled-realms/pretui/components/empty.md +43 -0
  273. package/bundled-realms/pretui/components/empty.usage.gts +33 -0
  274. package/bundled-realms/pretui/components/entity-display.gts +126 -0
  275. package/bundled-realms/pretui/components/entity-display.md +50 -0
  276. package/bundled-realms/pretui/components/error-summary.gts +321 -0
  277. package/bundled-realms/pretui/components/error-summary.md +60 -0
  278. package/bundled-realms/pretui/components/error-summary.usage.gts +155 -0
  279. package/bundled-realms/pretui/components/expression-builder.gts +1211 -0
  280. package/bundled-realms/pretui/components/expression-builder.md +60 -0
  281. package/bundled-realms/pretui/components/expression-builder.usage.gts +246 -0
  282. package/bundled-realms/pretui/components/fab.gts +2 -0
  283. package/bundled-realms/pretui/components/fab.md +38 -0
  284. package/bundled-realms/pretui/components/fab.usage.gts +38 -0
  285. package/bundled-realms/pretui/components/feature-voting.gts +365 -0
  286. package/bundled-realms/pretui/components/feature-voting.md +44 -0
  287. package/bundled-realms/pretui/components/feature-voting.usage.gts +114 -0
  288. package/bundled-realms/pretui/components/feed.gts +244 -0
  289. package/bundled-realms/pretui/components/feed.md +56 -0
  290. package/bundled-realms/pretui/components/feed.usage.gts +250 -0
  291. package/bundled-realms/pretui/components/field-error.gts +127 -0
  292. package/bundled-realms/pretui/components/field-error.md +60 -0
  293. package/bundled-realms/pretui/components/field-error.usage.gts +146 -0
  294. package/bundled-realms/pretui/components/field.gts +185 -0
  295. package/bundled-realms/pretui/components/field.md +60 -0
  296. package/bundled-realms/pretui/components/field.usage.gts +73 -0
  297. package/bundled-realms/pretui/components/fieldset.gts +124 -0
  298. package/bundled-realms/pretui/components/fieldset.md +65 -0
  299. package/bundled-realms/pretui/components/fieldset.usage.gts +105 -0
  300. package/bundled-realms/pretui/components/file-trigger.gts +185 -0
  301. package/bundled-realms/pretui/components/file-trigger.md +53 -0
  302. package/bundled-realms/pretui/components/file-trigger.usage.gts +121 -0
  303. package/bundled-realms/pretui/components/file-upload.gts +353 -0
  304. package/bundled-realms/pretui/components/file-upload.md +63 -0
  305. package/bundled-realms/pretui/components/file-upload.usage.gts +64 -0
  306. package/bundled-realms/pretui/components/filmstrip.gts +465 -0
  307. package/bundled-realms/pretui/components/filmstrip.md +53 -0
  308. package/bundled-realms/pretui/components/filmstrip.usage.gts +115 -0
  309. package/bundled-realms/pretui/components/filter-chips.gts +236 -0
  310. package/bundled-realms/pretui/components/filter-chips.md +58 -0
  311. package/bundled-realms/pretui/components/filter-chips.usage.gts +102 -0
  312. package/bundled-realms/pretui/components/filter-set.gts +293 -0
  313. package/bundled-realms/pretui/components/filter-set.md +60 -0
  314. package/bundled-realms/pretui/components/filter-set.usage.gts +145 -0
  315. package/bundled-realms/pretui/components/float-button.gts +339 -0
  316. package/bundled-realms/pretui/components/float-button.md +69 -0
  317. package/bundled-realms/pretui/components/float-button.usage.gts +134 -0
  318. package/bundled-realms/pretui/components/fold.gts +86 -0
  319. package/bundled-realms/pretui/components/fold.md +54 -0
  320. package/bundled-realms/pretui/components/fold.usage.gts +19 -0
  321. package/bundled-realms/pretui/components/form-field.gts +609 -0
  322. package/bundled-realms/pretui/components/form-field.md +77 -0
  323. package/bundled-realms/pretui/components/form-field.usage.gts +279 -0
  324. package/bundled-realms/pretui/components/form-footer.gts +246 -0
  325. package/bundled-realms/pretui/components/form-footer.md +59 -0
  326. package/bundled-realms/pretui/components/form-footer.usage.gts +217 -0
  327. package/bundled-realms/pretui/components/form-layout.gts +130 -0
  328. package/bundled-realms/pretui/components/form-layout.md +52 -0
  329. package/bundled-realms/pretui/components/form-layout.usage.gts +200 -0
  330. package/bundled-realms/pretui/components/form-section.gts +434 -0
  331. package/bundled-realms/pretui/components/form-section.md +67 -0
  332. package/bundled-realms/pretui/components/form-section.usage.gts +402 -0
  333. package/bundled-realms/pretui/components/form.gts +315 -0
  334. package/bundled-realms/pretui/components/form.md +82 -0
  335. package/bundled-realms/pretui/components/form.usage.gts +306 -0
  336. package/bundled-realms/pretui/components/format-bytes.gts +212 -0
  337. package/bundled-realms/pretui/components/format-bytes.md +47 -0
  338. package/bundled-realms/pretui/components/format-bytes.usage.gts +274 -0
  339. package/bundled-realms/pretui/components/format-date.gts +249 -0
  340. package/bundled-realms/pretui/components/format-date.md +55 -0
  341. package/bundled-realms/pretui/components/format-date.usage.gts +245 -0
  342. package/bundled-realms/pretui/components/format-number.gts +138 -0
  343. package/bundled-realms/pretui/components/format-number.md +51 -0
  344. package/bundled-realms/pretui/components/format-number.usage.gts +261 -0
  345. package/bundled-realms/pretui/components/formatted-value.gts +65 -0
  346. package/bundled-realms/pretui/components/freestyle-usage.gts +311 -0
  347. package/bundled-realms/pretui/components/freestyle-usage.md +49 -0
  348. package/bundled-realms/pretui/components/gallery.gts +819 -0
  349. package/bundled-realms/pretui/components/gallery.md +65 -0
  350. package/bundled-realms/pretui/components/gallery.usage.gts +212 -0
  351. package/bundled-realms/pretui/components/gradient-editor.gts +682 -0
  352. package/bundled-realms/pretui/components/gradient-editor.md +43 -0
  353. package/bundled-realms/pretui/components/gradient-editor.usage.gts +69 -0
  354. package/bundled-realms/pretui/components/graph-layout.md +54 -0
  355. package/bundled-realms/pretui/components/graph-layout.usage.gts +343 -0
  356. package/bundled-realms/pretui/components/graph-outline.gts +553 -0
  357. package/bundled-realms/pretui/components/graph-outline.md +50 -0
  358. package/bundled-realms/pretui/components/graph-outline.usage.gts +88 -0
  359. package/bundled-realms/pretui/components/grid.gts +68 -0
  360. package/bundled-realms/pretui/components/grid.md +54 -0
  361. package/bundled-realms/pretui/components/grid.usage.gts +144 -0
  362. package/bundled-realms/pretui/components/handle.gts +192 -0
  363. package/bundled-realms/pretui/components/handle.md +55 -0
  364. package/bundled-realms/pretui/components/handle.usage.gts +174 -0
  365. package/bundled-realms/pretui/components/hero-split.gts +307 -0
  366. package/bundled-realms/pretui/components/hero-split.md +50 -0
  367. package/bundled-realms/pretui/components/hero-split.usage.gts +200 -0
  368. package/bundled-realms/pretui/components/hover-actions.gts +485 -0
  369. package/bundled-realms/pretui/components/hover-actions.md +55 -0
  370. package/bundled-realms/pretui/components/hover-actions.usage.gts +224 -0
  371. package/bundled-realms/pretui/components/hover-card.gts +347 -0
  372. package/bundled-realms/pretui/components/hover-card.md +72 -0
  373. package/bundled-realms/pretui/components/hover-card.usage.gts +174 -0
  374. package/bundled-realms/pretui/components/hover-video-player.gts +315 -0
  375. package/bundled-realms/pretui/components/hover-video-player.md +57 -0
  376. package/bundled-realms/pretui/components/hover-video-player.usage.gts +152 -0
  377. package/bundled-realms/pretui/components/icon-button.examples.gts +69 -0
  378. package/bundled-realms/pretui/components/icon-button.gts +153 -0
  379. package/bundled-realms/pretui/components/icon-button.md +72 -0
  380. package/bundled-realms/pretui/components/icon-button.usage.gts +208 -0
  381. package/bundled-realms/pretui/components/image-cropper.gts +693 -0
  382. package/bundled-realms/pretui/components/image-cropper.md +52 -0
  383. package/bundled-realms/pretui/components/image-cropper.usage.gts +108 -0
  384. package/bundled-realms/pretui/components/image-frame.gts +91 -0
  385. package/bundled-realms/pretui/components/image-frame.md +42 -0
  386. package/bundled-realms/pretui/components/image-frame.usage.gts +28 -0
  387. package/bundled-realms/pretui/components/image.gts +326 -0
  388. package/bundled-realms/pretui/components/image.md +71 -0
  389. package/bundled-realms/pretui/components/image.usage.gts +126 -0
  390. package/bundled-realms/pretui/components/in-view.gts +245 -0
  391. package/bundled-realms/pretui/components/in-view.md +53 -0
  392. package/bundled-realms/pretui/components/in-view.usage.gts +264 -0
  393. package/bundled-realms/pretui/components/indicator.gts +137 -0
  394. package/bundled-realms/pretui/components/indicator.md +60 -0
  395. package/bundled-realms/pretui/components/indicator.usage.gts +66 -0
  396. package/bundled-realms/pretui/components/infinite-scroll.gts +163 -0
  397. package/bundled-realms/pretui/components/infinite-scroll.md +54 -0
  398. package/bundled-realms/pretui/components/infinite-scroll.usage.gts +73 -0
  399. package/bundled-realms/pretui/components/input-group.gts +264 -0
  400. package/bundled-realms/pretui/components/input-group.md +55 -0
  401. package/bundled-realms/pretui/components/input-group.usage.gts +283 -0
  402. package/bundled-realms/pretui/components/input.examples.gts +61 -0
  403. package/bundled-realms/pretui/components/input.gts +202 -0
  404. package/bundled-realms/pretui/components/input.md +67 -0
  405. package/bundled-realms/pretui/components/input.usage.gts +208 -0
  406. package/bundled-realms/pretui/components/interactive-input.gts +343 -0
  407. package/bundled-realms/pretui/components/interactive-input.md +45 -0
  408. package/bundled-realms/pretui/components/interactive-input.usage.gts +98 -0
  409. package/bundled-realms/pretui/components/item.gts +218 -0
  410. package/bundled-realms/pretui/components/item.md +66 -0
  411. package/bundled-realms/pretui/components/item.usage.gts +121 -0
  412. package/bundled-realms/pretui/components/joystick.gts +381 -0
  413. package/bundled-realms/pretui/components/joystick.md +52 -0
  414. package/bundled-realms/pretui/components/joystick.usage.gts +140 -0
  415. package/bundled-realms/pretui/components/json-editor.gts +1016 -0
  416. package/bundled-realms/pretui/components/json-editor.md +51 -0
  417. package/bundled-realms/pretui/components/json-editor.usage.gts +230 -0
  418. package/bundled-realms/pretui/components/json-tree.gts +596 -0
  419. package/bundled-realms/pretui/components/json-tree.md +52 -0
  420. package/bundled-realms/pretui/components/json-tree.usage.gts +217 -0
  421. package/bundled-realms/pretui/components/jump-chip.gts +230 -0
  422. package/bundled-realms/pretui/components/jump-chip.md +44 -0
  423. package/bundled-realms/pretui/components/jump-chip.usage.gts +151 -0
  424. package/bundled-realms/pretui/components/kbd.gts +60 -0
  425. package/bundled-realms/pretui/components/kbd.md +50 -0
  426. package/bundled-realms/pretui/components/kbd.usage.gts +98 -0
  427. package/bundled-realms/pretui/components/key-value.gts +150 -0
  428. package/bundled-realms/pretui/components/key-value.md +81 -0
  429. package/bundled-realms/pretui/components/key-value.usage.gts +125 -0
  430. package/bundled-realms/pretui/components/known-date.gts +770 -0
  431. package/bundled-realms/pretui/components/known-date.md +56 -0
  432. package/bundled-realms/pretui/components/known-date.usage.gts +192 -0
  433. package/bundled-realms/pretui/components/label.gts +60 -0
  434. package/bundled-realms/pretui/components/label.md +56 -0
  435. package/bundled-realms/pretui/components/label.usage.gts +63 -0
  436. package/bundled-realms/pretui/components/layer-manager.gts +1884 -0
  437. package/bundled-realms/pretui/components/layer-manager.md +59 -0
  438. package/bundled-realms/pretui/components/layer-manager.usage.gts +233 -0
  439. package/bundled-realms/pretui/components/lightbox.gts +461 -0
  440. package/bundled-realms/pretui/components/lightbox.md +57 -0
  441. package/bundled-realms/pretui/components/lightbox.usage.gts +180 -0
  442. package/bundled-realms/pretui/components/line-grid.examples.gts +156 -0
  443. package/bundled-realms/pretui/components/line-grid.gts +523 -0
  444. package/bundled-realms/pretui/components/line-grid.md +55 -0
  445. package/bundled-realms/pretui/components/line-grid.usage.gts +181 -0
  446. package/bundled-realms/pretui/components/list.gts +679 -0
  447. package/bundled-realms/pretui/components/list.md +90 -0
  448. package/bundled-realms/pretui/components/list.usage.gts +203 -0
  449. package/bundled-realms/pretui/components/loader.gts +2 -0
  450. package/bundled-realms/pretui/components/loader.md +33 -0
  451. package/bundled-realms/pretui/components/loader.usage.gts +35 -0
  452. package/bundled-realms/pretui/components/loading-overlay.gts +120 -0
  453. package/bundled-realms/pretui/components/loading-overlay.md +68 -0
  454. package/bundled-realms/pretui/components/loading-overlay.usage.gts +102 -0
  455. package/bundled-realms/pretui/components/loading-state.gts +124 -0
  456. package/bundled-realms/pretui/components/loading-state.md +48 -0
  457. package/bundled-realms/pretui/components/loading-state.usage.gts +16 -0
  458. package/bundled-realms/pretui/components/lookup.gts +451 -0
  459. package/bundled-realms/pretui/components/lookup.md +59 -0
  460. package/bundled-realms/pretui/components/lookup.usage.gts +235 -0
  461. package/bundled-realms/pretui/components/magnetic.gts +158 -0
  462. package/bundled-realms/pretui/components/magnetic.md +48 -0
  463. package/bundled-realms/pretui/components/magnetic.usage.gts +125 -0
  464. package/bundled-realms/pretui/components/marquee.gts +141 -0
  465. package/bundled-realms/pretui/components/marquee.md +43 -0
  466. package/bundled-realms/pretui/components/marquee.usage.gts +116 -0
  467. package/bundled-realms/pretui/components/masonry.gts +95 -0
  468. package/bundled-realms/pretui/components/masonry.md +59 -0
  469. package/bundled-realms/pretui/components/masonry.usage.gts +238 -0
  470. package/bundled-realms/pretui/components/media-inspector.gts +145 -0
  471. package/bundled-realms/pretui/components/media-inspector.md +46 -0
  472. package/bundled-realms/pretui/components/media-inspector.usage.gts +83 -0
  473. package/bundled-realms/pretui/components/media-player.gts +1133 -0
  474. package/bundled-realms/pretui/components/media-player.md +74 -0
  475. package/bundled-realms/pretui/components/media-player.usage.gts +265 -0
  476. package/bundled-realms/pretui/components/media-viewer.gts +136 -0
  477. package/bundled-realms/pretui/components/media-viewer.md +47 -0
  478. package/bundled-realms/pretui/components/media-viewer.usage.gts +70 -0
  479. package/bundled-realms/pretui/components/mentions.gts +340 -0
  480. package/bundled-realms/pretui/components/mentions.md +65 -0
  481. package/bundled-realms/pretui/components/mentions.usage.gts +73 -0
  482. package/bundled-realms/pretui/components/menu-panel.gts +367 -0
  483. package/bundled-realms/pretui/components/menu.gts +652 -0
  484. package/bundled-realms/pretui/components/menu.md +69 -0
  485. package/bundled-realms/pretui/components/menu.usage.gts +116 -0
  486. package/bundled-realms/pretui/components/menubar.gts +1200 -0
  487. package/bundled-realms/pretui/components/menubar.md +49 -0
  488. package/bundled-realms/pretui/components/menubar.usage.gts +220 -0
  489. package/bundled-realms/pretui/components/meter.gts +113 -0
  490. package/bundled-realms/pretui/components/meter.md +50 -0
  491. package/bundled-realms/pretui/components/meter.usage.gts +50 -0
  492. package/bundled-realms/pretui/components/modal.gts +2 -0
  493. package/bundled-realms/pretui/components/modal.md +41 -0
  494. package/bundled-realms/pretui/components/modal.usage.gts +50 -0
  495. package/bundled-realms/pretui/components/model-viewer.gts +658 -0
  496. package/bundled-realms/pretui/components/model-viewer.md +57 -0
  497. package/bundled-realms/pretui/components/model-viewer.usage.gts +123 -0
  498. package/bundled-realms/pretui/components/money-input.gts +66 -0
  499. package/bundled-realms/pretui/components/money-input.md +43 -0
  500. package/bundled-realms/pretui/components/money-input.usage.gts +293 -0
  501. package/bundled-realms/pretui/components/morphing-dialog.gts +173 -0
  502. package/bundled-realms/pretui/components/morphing-dialog.md +46 -0
  503. package/bundled-realms/pretui/components/morphing-dialog.usage.gts +168 -0
  504. package/bundled-realms/pretui/components/morphing-popover.gts +245 -0
  505. package/bundled-realms/pretui/components/morphing-popover.md +47 -0
  506. package/bundled-realms/pretui/components/morphing-popover.usage.gts +176 -0
  507. package/bundled-realms/pretui/components/multi-select.gts +392 -0
  508. package/bundled-realms/pretui/components/multi-select.md +57 -0
  509. package/bundled-realms/pretui/components/multi-select.usage.gts +97 -0
  510. package/bundled-realms/pretui/components/native-select.gts +212 -0
  511. package/bundled-realms/pretui/components/native-select.md +77 -0
  512. package/bundled-realms/pretui/components/native-select.usage.gts +109 -0
  513. package/bundled-realms/pretui/components/navigation-menu.gts +351 -0
  514. package/bundled-realms/pretui/components/navigation-menu.md +65 -0
  515. package/bundled-realms/pretui/components/navigation-menu.usage.gts +61 -0
  516. package/bundled-realms/pretui/components/node-canvas.gts +1174 -0
  517. package/bundled-realms/pretui/components/node-canvas.md +57 -0
  518. package/bundled-realms/pretui/components/node-canvas.usage.gts +548 -0
  519. package/bundled-realms/pretui/components/node-card.gts +181 -0
  520. package/bundled-realms/pretui/components/node-card.md +53 -0
  521. package/bundled-realms/pretui/components/node-card.usage.gts +156 -0
  522. package/bundled-realms/pretui/components/notification.gts +242 -0
  523. package/bundled-realms/pretui/components/notification.md +69 -0
  524. package/bundled-realms/pretui/components/notification.usage.gts +125 -0
  525. package/bundled-realms/pretui/components/number-input.gts +191 -0
  526. package/bundled-realms/pretui/components/number-input.md +54 -0
  527. package/bundled-realms/pretui/components/number-input.usage.gts +132 -0
  528. package/bundled-realms/pretui/components/odometer.gts +349 -0
  529. package/bundled-realms/pretui/components/odometer.md +55 -0
  530. package/bundled-realms/pretui/components/odometer.usage.gts +258 -0
  531. package/bundled-realms/pretui/components/onboarding.gts +298 -0
  532. package/bundled-realms/pretui/components/onboarding.md +48 -0
  533. package/bundled-realms/pretui/components/onboarding.usage.gts +155 -0
  534. package/bundled-realms/pretui/components/origin-grid.gts +486 -0
  535. package/bundled-realms/pretui/components/origin-grid.md +47 -0
  536. package/bundled-realms/pretui/components/origin-grid.usage.gts +87 -0
  537. package/bundled-realms/pretui/components/otp-input.gts +289 -0
  538. package/bundled-realms/pretui/components/otp-input.md +47 -0
  539. package/bundled-realms/pretui/components/otp-input.usage.gts +131 -0
  540. package/bundled-realms/pretui/components/page-scaffold.gts +343 -0
  541. package/bundled-realms/pretui/components/page-scaffold.md +57 -0
  542. package/bundled-realms/pretui/components/page-scaffold.usage.gts +391 -0
  543. package/bundled-realms/pretui/components/pagination.gts +150 -0
  544. package/bundled-realms/pretui/components/pagination.md +56 -0
  545. package/bundled-realms/pretui/components/pagination.usage.gts +33 -0
  546. package/bundled-realms/pretui/components/panel-section.gts +301 -0
  547. package/bundled-realms/pretui/components/panel-section.md +48 -0
  548. package/bundled-realms/pretui/components/panel-section.usage.gts +137 -0
  549. package/bundled-realms/pretui/components/panel.gts +158 -0
  550. package/bundled-realms/pretui/components/panel.md +58 -0
  551. package/bundled-realms/pretui/components/panel.usage.gts +82 -0
  552. package/bundled-realms/pretui/components/password-input.gts +329 -0
  553. package/bundled-realms/pretui/components/password-input.md +58 -0
  554. package/bundled-realms/pretui/components/password-input.usage.gts +156 -0
  555. package/bundled-realms/pretui/components/password-strength.gts +485 -0
  556. package/bundled-realms/pretui/components/password-strength.md +50 -0
  557. package/bundled-realms/pretui/components/password-strength.usage.gts +34 -0
  558. package/bundled-realms/pretui/components/path-text.gts +288 -0
  559. package/bundled-realms/pretui/components/path-text.md +58 -0
  560. package/bundled-realms/pretui/components/path-text.usage.gts +239 -0
  561. package/bundled-realms/pretui/components/period-input.gts +1100 -0
  562. package/bundled-realms/pretui/components/period-input.md +54 -0
  563. package/bundled-realms/pretui/components/period-input.usage.gts +299 -0
  564. package/bundled-realms/pretui/components/phone-input.gts +80 -0
  565. package/bundled-realms/pretui/components/phone-input.md +55 -0
  566. package/bundled-realms/pretui/components/phone-input.usage.gts +91 -0
  567. package/bundled-realms/pretui/components/pin-input.gts +2 -0
  568. package/bundled-realms/pretui/components/pin-input.md +45 -0
  569. package/bundled-realms/pretui/components/pin-input.usage.gts +39 -0
  570. package/bundled-realms/pretui/components/pip-scale.gts +717 -0
  571. package/bundled-realms/pretui/components/pip-scale.md +55 -0
  572. package/bundled-realms/pretui/components/pip-scale.usage.gts +318 -0
  573. package/bundled-realms/pretui/components/popconfirm.gts +380 -0
  574. package/bundled-realms/pretui/components/popconfirm.md +78 -0
  575. package/bundled-realms/pretui/components/popconfirm.usage.gts +171 -0
  576. package/bundled-realms/pretui/components/popover.gts +198 -0
  577. package/bundled-realms/pretui/components/popover.md +57 -0
  578. package/bundled-realms/pretui/components/popover.usage.gts +106 -0
  579. package/bundled-realms/pretui/components/popup.gts +85 -0
  580. package/bundled-realms/pretui/components/popup.md +42 -0
  581. package/bundled-realms/pretui/components/popup.usage.gts +23 -0
  582. package/bundled-realms/pretui/components/presence.gts +156 -0
  583. package/bundled-realms/pretui/components/presence.md +55 -0
  584. package/bundled-realms/pretui/components/presence.usage.gts +204 -0
  585. package/bundled-realms/pretui/components/progress-bar.gts +177 -0
  586. package/bundled-realms/pretui/components/progress-bar.md +63 -0
  587. package/bundled-realms/pretui/components/progress-bar.usage.gts +172 -0
  588. package/bundled-realms/pretui/components/progress-radial.gts +67 -0
  589. package/bundled-realms/pretui/components/progress-radial.md +55 -0
  590. package/bundled-realms/pretui/components/progress-radial.usage.gts +76 -0
  591. package/bundled-realms/pretui/components/prompt-library.gts +358 -0
  592. package/bundled-realms/pretui/components/prompt-library.md +45 -0
  593. package/bundled-realms/pretui/components/prompt-library.usage.gts +117 -0
  594. package/bundled-realms/pretui/components/property-row.gts +316 -0
  595. package/bundled-realms/pretui/components/property-row.md +55 -0
  596. package/bundled-realms/pretui/components/property-row.usage.gts +146 -0
  597. package/bundled-realms/pretui/components/property-sheet.gts +133 -0
  598. package/bundled-realms/pretui/components/property-sheet.md +48 -0
  599. package/bundled-realms/pretui/components/property-sheet.usage.gts +132 -0
  600. package/bundled-realms/pretui/components/prose.gts +31 -0
  601. package/bundled-realms/pretui/components/prose.md +57 -0
  602. package/bundled-realms/pretui/components/prose.usage.gts +15 -0
  603. package/bundled-realms/pretui/components/pulsing-border.gts +297 -0
  604. package/bundled-realms/pretui/components/pulsing-border.md +65 -0
  605. package/bundled-realms/pretui/components/pulsing-border.usage.gts +253 -0
  606. package/bundled-realms/pretui/components/qr-code.gts +660 -0
  607. package/bundled-realms/pretui/components/qr-code.md +58 -0
  608. package/bundled-realms/pretui/components/qr-code.usage.gts +224 -0
  609. package/bundled-realms/pretui/components/queued-message.gts +83 -0
  610. package/bundled-realms/pretui/components/queued-message.md +53 -0
  611. package/bundled-realms/pretui/components/queued-message.usage.gts +21 -0
  612. package/bundled-realms/pretui/components/radio-card.gts +88 -0
  613. package/bundled-realms/pretui/components/radio-card.md +72 -0
  614. package/bundled-realms/pretui/components/radio-card.usage.gts +148 -0
  615. package/bundled-realms/pretui/components/radio-group.gts +119 -0
  616. package/bundled-realms/pretui/components/radio-group.md +46 -0
  617. package/bundled-realms/pretui/components/radio-group.usage.gts +80 -0
  618. package/bundled-realms/pretui/components/range-slider.gts +34 -0
  619. package/bundled-realms/pretui/components/range-slider.md +47 -0
  620. package/bundled-realms/pretui/components/range-slider.usage.gts +46 -0
  621. package/bundled-realms/pretui/components/rating.examples.gts +67 -0
  622. package/bundled-realms/pretui/components/rating.gts +266 -0
  623. package/bundled-realms/pretui/components/rating.md +55 -0
  624. package/bundled-realms/pretui/components/rating.usage.gts +96 -0
  625. package/bundled-realms/pretui/components/readiness-panel.gts +856 -0
  626. package/bundled-realms/pretui/components/readiness-panel.md +64 -0
  627. package/bundled-realms/pretui/components/readiness-panel.usage.gts +372 -0
  628. package/bundled-realms/pretui/components/recommendation.gts +316 -0
  629. package/bundled-realms/pretui/components/recommendation.md +49 -0
  630. package/bundled-realms/pretui/components/recommendation.usage.gts +103 -0
  631. package/bundled-realms/pretui/components/record-detail.gts +1170 -0
  632. package/bundled-realms/pretui/components/record-detail.md +63 -0
  633. package/bundled-realms/pretui/components/record-detail.usage.gts +533 -0
  634. package/bundled-realms/pretui/components/record-face.gts +153 -0
  635. package/bundled-realms/pretui/components/record-pill.gts +116 -0
  636. package/bundled-realms/pretui/components/record-pill.md +55 -0
  637. package/bundled-realms/pretui/components/record-pill.usage.gts +108 -0
  638. package/bundled-realms/pretui/components/relative-time.gts +88 -0
  639. package/bundled-realms/pretui/components/relative-time.md +58 -0
  640. package/bundled-realms/pretui/components/relative-time.usage.gts +89 -0
  641. package/bundled-realms/pretui/components/reorder.gts +620 -0
  642. package/bundled-realms/pretui/components/reorder.md +47 -0
  643. package/bundled-realms/pretui/components/reorder.usage.gts +171 -0
  644. package/bundled-realms/pretui/components/resizable.gts +2 -0
  645. package/bundled-realms/pretui/components/resizable.md +37 -0
  646. package/bundled-realms/pretui/components/resizable.usage.gts +53 -0
  647. package/bundled-realms/pretui/components/result-card.gts +68 -0
  648. package/bundled-realms/pretui/components/result-card.md +45 -0
  649. package/bundled-realms/pretui/components/result-card.usage.gts +29 -0
  650. package/bundled-realms/pretui/components/result.gts +204 -0
  651. package/bundled-realms/pretui/components/result.md +67 -0
  652. package/bundled-realms/pretui/components/result.usage.gts +85 -0
  653. package/bundled-realms/pretui/components/rule-row.gts +462 -0
  654. package/bundled-realms/pretui/components/rule-row.md +60 -0
  655. package/bundled-realms/pretui/components/rule-row.usage.gts +157 -0
  656. package/bundled-realms/pretui/components/scroll-area.gts +121 -0
  657. package/bundled-realms/pretui/components/scroll-area.md +59 -0
  658. package/bundled-realms/pretui/components/scroll-area.usage.gts +175 -0
  659. package/bundled-realms/pretui/components/scroll-progress.gts +222 -0
  660. package/bundled-realms/pretui/components/scroll-progress.md +48 -0
  661. package/bundled-realms/pretui/components/scroll-progress.usage.gts +162 -0
  662. package/bundled-realms/pretui/components/scroller.gts +323 -0
  663. package/bundled-realms/pretui/components/scroller.md +44 -0
  664. package/bundled-realms/pretui/components/scroller.usage.gts +184 -0
  665. package/bundled-realms/pretui/components/scrub-input.gts +691 -0
  666. package/bundled-realms/pretui/components/scrub-input.md +61 -0
  667. package/bundled-realms/pretui/components/scrub-input.usage.gts +275 -0
  668. package/bundled-realms/pretui/components/search-input.gts +141 -0
  669. package/bundled-realms/pretui/components/search-input.md +56 -0
  670. package/bundled-realms/pretui/components/search-input.usage.gts +91 -0
  671. package/bundled-realms/pretui/components/segmented-control.gts +198 -0
  672. package/bundled-realms/pretui/components/segmented-control.md +39 -0
  673. package/bundled-realms/pretui/components/segmented-control.usage.gts +66 -0
  674. package/bundled-realms/pretui/components/select.examples.gts +80 -0
  675. package/bundled-realms/pretui/components/select.gts +481 -0
  676. package/bundled-realms/pretui/components/select.md +71 -0
  677. package/bundled-realms/pretui/components/select.usage.gts +109 -0
  678. package/bundled-realms/pretui/components/separator.gts +2 -0
  679. package/bundled-realms/pretui/components/separator.md +36 -0
  680. package/bundled-realms/pretui/components/separator.usage.gts +32 -0
  681. package/bundled-realms/pretui/components/session-prep.gts +164 -0
  682. package/bundled-realms/pretui/components/session-prep.md +48 -0
  683. package/bundled-realms/pretui/components/session-prep.usage.gts +122 -0
  684. package/bundled-realms/pretui/components/sheet-toolbar.gts +130 -0
  685. package/bundled-realms/pretui/components/sheet-toolbar.md +51 -0
  686. package/bundled-realms/pretui/components/sheet-toolbar.usage.gts +151 -0
  687. package/bundled-realms/pretui/components/sheet.gts +1166 -0
  688. package/bundled-realms/pretui/components/sheet.md +78 -0
  689. package/bundled-realms/pretui/components/sheet.usage.gts +318 -0
  690. package/bundled-realms/pretui/components/sidebar.gts +1165 -0
  691. package/bundled-realms/pretui/components/sidebar.md +88 -0
  692. package/bundled-realms/pretui/components/sidebar.usage.gts +360 -0
  693. package/bundled-realms/pretui/components/signature-pad.gts +840 -0
  694. package/bundled-realms/pretui/components/signature-pad.md +57 -0
  695. package/bundled-realms/pretui/components/signature-pad.usage.gts +222 -0
  696. package/bundled-realms/pretui/components/skeleton.gts +46 -0
  697. package/bundled-realms/pretui/components/skeleton.md +56 -0
  698. package/bundled-realms/pretui/components/skeleton.usage.gts +56 -0
  699. package/bundled-realms/pretui/components/skip-link.gts +65 -0
  700. package/bundled-realms/pretui/components/skip-link.md +49 -0
  701. package/bundled-realms/pretui/components/skip-link.usage.gts +47 -0
  702. package/bundled-realms/pretui/components/slide-over.gts +2 -0
  703. package/bundled-realms/pretui/components/slide-over.md +41 -0
  704. package/bundled-realms/pretui/components/slide-over.usage.gts +50 -0
  705. package/bundled-realms/pretui/components/slider.examples.gts +61 -0
  706. package/bundled-realms/pretui/components/slider.gts +331 -0
  707. package/bundled-realms/pretui/components/slider.md +59 -0
  708. package/bundled-realms/pretui/components/slider.usage.gts +99 -0
  709. package/bundled-realms/pretui/components/sliding-highlight.gts +249 -0
  710. package/bundled-realms/pretui/components/sliding-highlight.md +58 -0
  711. package/bundled-realms/pretui/components/sliding-highlight.usage.gts +184 -0
  712. package/bundled-realms/pretui/components/snackbar.gts +2 -0
  713. package/bundled-realms/pretui/components/snackbar.md +34 -0
  714. package/bundled-realms/pretui/components/snackbar.usage.gts +31 -0
  715. package/bundled-realms/pretui/components/sonner.gts +2 -0
  716. package/bundled-realms/pretui/components/sonner.md +42 -0
  717. package/bundled-realms/pretui/components/sonner.usage.gts +43 -0
  718. package/bundled-realms/pretui/components/sparkline.gts +233 -0
  719. package/bundled-realms/pretui/components/sparkline.md +58 -0
  720. package/bundled-realms/pretui/components/sparkline.usage.gts +74 -0
  721. package/bundled-realms/pretui/components/spinner.gts +57 -0
  722. package/bundled-realms/pretui/components/spinner.md +49 -0
  723. package/bundled-realms/pretui/components/spinner.usage.gts +65 -0
  724. package/bundled-realms/pretui/components/split-panes.gts +69 -0
  725. package/bundled-realms/pretui/components/split-panes.md +54 -0
  726. package/bundled-realms/pretui/components/split-panes.usage.gts +171 -0
  727. package/bundled-realms/pretui/components/spotlight.gts +174 -0
  728. package/bundled-realms/pretui/components/spotlight.md +51 -0
  729. package/bundled-realms/pretui/components/spotlight.usage.gts +197 -0
  730. package/bundled-realms/pretui/components/stack-divider.gts +58 -0
  731. package/bundled-realms/pretui/components/stack.gts +284 -0
  732. package/bundled-realms/pretui/components/stack.md +81 -0
  733. package/bundled-realms/pretui/components/stack.usage.gts +228 -0
  734. package/bundled-realms/pretui/components/stacking-cards.gts +137 -0
  735. package/bundled-realms/pretui/components/stacking-cards.md +40 -0
  736. package/bundled-realms/pretui/components/stacking-cards.usage.gts +124 -0
  737. package/bundled-realms/pretui/components/stat.gts +216 -0
  738. package/bundled-realms/pretui/components/stat.md +57 -0
  739. package/bundled-realms/pretui/components/stat.usage.gts +16 -0
  740. package/bundled-realms/pretui/components/statement-table.examples.gts +185 -0
  741. package/bundled-realms/pretui/components/statement-table.gts +792 -0
  742. package/bundled-realms/pretui/components/statement-table.md +58 -0
  743. package/bundled-realms/pretui/components/statement-table.usage.gts +252 -0
  744. package/bundled-realms/pretui/components/status-chip.gts +37 -0
  745. package/bundled-realms/pretui/components/status-chip.md +48 -0
  746. package/bundled-realms/pretui/components/status-chip.usage.gts +36 -0
  747. package/bundled-realms/pretui/components/step-list.gts +624 -0
  748. package/bundled-realms/pretui/components/step-list.md +50 -0
  749. package/bundled-realms/pretui/components/step-list.usage.gts +166 -0
  750. package/bundled-realms/pretui/components/stepper.gts +201 -0
  751. package/bundled-realms/pretui/components/stepper.md +54 -0
  752. package/bundled-realms/pretui/components/stepper.usage.gts +103 -0
  753. package/bundled-realms/pretui/components/steps-with-media.gts +254 -0
  754. package/bundled-realms/pretui/components/steps-with-media.md +54 -0
  755. package/bundled-realms/pretui/components/steps-with-media.usage.gts +208 -0
  756. package/bundled-realms/pretui/components/streaming-text.gts +77 -0
  757. package/bundled-realms/pretui/components/streaming-text.md +55 -0
  758. package/bundled-realms/pretui/components/streaming-text.usage.gts +15 -0
  759. package/bundled-realms/pretui/components/swatch-chip.gts +104 -0
  760. package/bundled-realms/pretui/components/swatch-chip.md +47 -0
  761. package/bundled-realms/pretui/components/swatch-chip.usage.gts +21 -0
  762. package/bundled-realms/pretui/components/swatch.gts +141 -0
  763. package/bundled-realms/pretui/components/swatch.md +50 -0
  764. package/bundled-realms/pretui/components/swatch.usage.gts +80 -0
  765. package/bundled-realms/pretui/components/switch.examples.gts +53 -0
  766. package/bundled-realms/pretui/components/switch.gts +118 -0
  767. package/bundled-realms/pretui/components/switch.md +62 -0
  768. package/bundled-realms/pretui/components/switch.usage.gts +59 -0
  769. package/bundled-realms/pretui/components/table-of-contents.gts +384 -0
  770. package/bundled-realms/pretui/components/table-of-contents.md +75 -0
  771. package/bundled-realms/pretui/components/table-of-contents.usage.gts +270 -0
  772. package/bundled-realms/pretui/components/table.gts +158 -0
  773. package/bundled-realms/pretui/components/table.md +80 -0
  774. package/bundled-realms/pretui/components/table.usage.gts +44 -0
  775. package/bundled-realms/pretui/components/tabs.gts +117 -0
  776. package/bundled-realms/pretui/components/tabs.md +58 -0
  777. package/bundled-realms/pretui/components/tabs.usage.gts +94 -0
  778. package/bundled-realms/pretui/components/tags-input.gts +52 -0
  779. package/bundled-realms/pretui/components/tags-input.md +48 -0
  780. package/bundled-realms/pretui/components/tags-input.usage.gts +56 -0
  781. package/bundled-realms/pretui/components/task-row.gts +483 -0
  782. package/bundled-realms/pretui/components/task-row.md +48 -0
  783. package/bundled-realms/pretui/components/task-row.usage.gts +119 -0
  784. package/bundled-realms/pretui/components/terminal-animation.gts +355 -0
  785. package/bundled-realms/pretui/components/terminal-animation.md +49 -0
  786. package/bundled-realms/pretui/components/terminal-animation.usage.gts +110 -0
  787. package/bundled-realms/pretui/components/text-effects.gts +339 -0
  788. package/bundled-realms/pretui/components/text-effects.md +49 -0
  789. package/bundled-realms/pretui/components/text-effects.usage.gts +192 -0
  790. package/bundled-realms/pretui/components/text-morph.gts +292 -0
  791. package/bundled-realms/pretui/components/text-morph.md +45 -0
  792. package/bundled-realms/pretui/components/text-morph.usage.gts +117 -0
  793. package/bundled-realms/pretui/components/text-rotate.gts +121 -0
  794. package/bundled-realms/pretui/components/text-rotate.md +44 -0
  795. package/bundled-realms/pretui/components/text-rotate.usage.gts +73 -0
  796. package/bundled-realms/pretui/components/text-scramble.gts +189 -0
  797. package/bundled-realms/pretui/components/text-scramble.md +42 -0
  798. package/bundled-realms/pretui/components/text-scramble.usage.gts +80 -0
  799. package/bundled-realms/pretui/components/text-shimmer.gts +89 -0
  800. package/bundled-realms/pretui/components/text-shimmer.md +42 -0
  801. package/bundled-realms/pretui/components/text-shimmer.usage.gts +69 -0
  802. package/bundled-realms/pretui/components/textarea.gts +112 -0
  803. package/bundled-realms/pretui/components/textarea.md +51 -0
  804. package/bundled-realms/pretui/components/textarea.usage.gts +100 -0
  805. package/bundled-realms/pretui/components/theme-frame.gts +272 -0
  806. package/bundled-realms/pretui/components/theme-frame.md +48 -0
  807. package/bundled-realms/pretui/components/thinking.gts +431 -0
  808. package/bundled-realms/pretui/components/thinking.md +47 -0
  809. package/bundled-realms/pretui/components/thinking.usage.gts +134 -0
  810. package/bundled-realms/pretui/components/tilt.gts +194 -0
  811. package/bundled-realms/pretui/components/tilt.md +50 -0
  812. package/bundled-realms/pretui/components/tilt.usage.gts +174 -0
  813. package/bundled-realms/pretui/components/time-input.gts +583 -0
  814. package/bundled-realms/pretui/components/time-input.md +51 -0
  815. package/bundled-realms/pretui/components/time-input.usage.gts +110 -0
  816. package/bundled-realms/pretui/components/timeline.gts +269 -0
  817. package/bundled-realms/pretui/components/timeline.md +63 -0
  818. package/bundled-realms/pretui/components/timeline.usage.gts +180 -0
  819. package/bundled-realms/pretui/components/toast.gts +85 -0
  820. package/bundled-realms/pretui/components/toast.md +57 -0
  821. package/bundled-realms/pretui/components/toast.usage.gts +18 -0
  822. package/bundled-realms/pretui/components/toaster.gts +808 -0
  823. package/bundled-realms/pretui/components/toaster.md +83 -0
  824. package/bundled-realms/pretui/components/toaster.usage.gts +256 -0
  825. package/bundled-realms/pretui/components/toggle-group.gts +435 -0
  826. package/bundled-realms/pretui/components/toggle-group.md +59 -0
  827. package/bundled-realms/pretui/components/toggle-group.usage.gts +260 -0
  828. package/bundled-realms/pretui/components/toggle-matrix.gts +994 -0
  829. package/bundled-realms/pretui/components/toggle-matrix.md +44 -0
  830. package/bundled-realms/pretui/components/toggle-matrix.usage.gts +243 -0
  831. package/bundled-realms/pretui/components/toggle.gts +235 -0
  832. package/bundled-realms/pretui/components/toggle.md +59 -0
  833. package/bundled-realms/pretui/components/toggle.usage.gts +244 -0
  834. package/bundled-realms/pretui/components/token-input.gts +483 -0
  835. package/bundled-realms/pretui/components/token-input.md +50 -0
  836. package/bundled-realms/pretui/components/token-input.usage.gts +137 -0
  837. package/bundled-realms/pretui/components/token.gts +197 -0
  838. package/bundled-realms/pretui/components/token.md +63 -0
  839. package/bundled-realms/pretui/components/token.usage.gts +128 -0
  840. package/bundled-realms/pretui/components/toolbar.gts +62 -0
  841. package/bundled-realms/pretui/components/toolbar.md +50 -0
  842. package/bundled-realms/pretui/components/toolbar.usage.gts +78 -0
  843. package/bundled-realms/pretui/components/tooltip.gts +212 -0
  844. package/bundled-realms/pretui/components/tooltip.md +53 -0
  845. package/bundled-realms/pretui/components/tooltip.usage.gts +64 -0
  846. package/bundled-realms/pretui/components/tour.gts +436 -0
  847. package/bundled-realms/pretui/components/tour.md +62 -0
  848. package/bundled-realms/pretui/components/tour.usage.gts +70 -0
  849. package/bundled-realms/pretui/components/transfer.gts +2 -0
  850. package/bundled-realms/pretui/components/transfer.md +39 -0
  851. package/bundled-realms/pretui/components/transfer.usage.gts +52 -0
  852. package/bundled-realms/pretui/components/transmute.gts +103 -0
  853. package/bundled-realms/pretui/components/transmute.md +49 -0
  854. package/bundled-realms/pretui/components/transmute.usage.gts +16 -0
  855. package/bundled-realms/pretui/components/tree-select.gts +596 -0
  856. package/bundled-realms/pretui/components/tree-select.md +70 -0
  857. package/bundled-realms/pretui/components/tree-select.usage.gts +75 -0
  858. package/bundled-realms/pretui/components/tree.gts +532 -0
  859. package/bundled-realms/pretui/components/tree.md +68 -0
  860. package/bundled-realms/pretui/components/tree.usage.gts +278 -0
  861. package/bundled-realms/pretui/components/trim-bar.gts +611 -0
  862. package/bundled-realms/pretui/components/trim-bar.md +48 -0
  863. package/bundled-realms/pretui/components/trim-bar.usage.gts +112 -0
  864. package/bundled-realms/pretui/components/typewriter.gts +122 -0
  865. package/bundled-realms/pretui/components/typewriter.md +45 -0
  866. package/bundled-realms/pretui/components/typewriter.usage.gts +105 -0
  867. package/bundled-realms/pretui/components/typography.gts +379 -0
  868. package/bundled-realms/pretui/components/typography.md +77 -0
  869. package/bundled-realms/pretui/components/typography.usage.gts +52 -0
  870. package/bundled-realms/pretui/components/url-input.gts +130 -0
  871. package/bundled-realms/pretui/components/url-input.md +58 -0
  872. package/bundled-realms/pretui/components/url-input.usage.gts +97 -0
  873. package/bundled-realms/pretui/components/usage-action.gts +16 -0
  874. package/bundled-realms/pretui/components/usage-argument.gts +109 -0
  875. package/bundled-realms/pretui/components/usage-argument.md +44 -0
  876. package/bundled-realms/pretui/components/usage-array.gts +80 -0
  877. package/bundled-realms/pretui/components/usage-array.md +47 -0
  878. package/bundled-realms/pretui/components/usage-bool.gts +62 -0
  879. package/bundled-realms/pretui/components/usage-bool.md +47 -0
  880. package/bundled-realms/pretui/components/usage-component-arg.gts +16 -0
  881. package/bundled-realms/pretui/components/usage-css-variable.gts +56 -0
  882. package/bundled-realms/pretui/components/usage-css-variable.md +48 -0
  883. package/bundled-realms/pretui/components/usage-number.gts +127 -0
  884. package/bundled-realms/pretui/components/usage-number.md +48 -0
  885. package/bundled-realms/pretui/components/usage-object.gts +58 -0
  886. package/bundled-realms/pretui/components/usage-object.md +48 -0
  887. package/bundled-realms/pretui/components/usage-string.gts +89 -0
  888. package/bundled-realms/pretui/components/usage-string.md +46 -0
  889. package/bundled-realms/pretui/components/usage-yield.gts +16 -0
  890. package/bundled-realms/pretui/components/value-input.gts +265 -0
  891. package/bundled-realms/pretui/components/value-input.md +49 -0
  892. package/bundled-realms/pretui/components/value-input.usage.gts +176 -0
  893. package/bundled-realms/pretui/components/video-player.gts +80 -0
  894. package/bundled-realms/pretui/components/video-player.md +46 -0
  895. package/bundled-realms/pretui/components/video-player.usage.gts +107 -0
  896. package/bundled-realms/pretui/components/viewport.gts +520 -0
  897. package/bundled-realms/pretui/components/viewport.md +55 -0
  898. package/bundled-realms/pretui/components/visually-hidden.gts +49 -0
  899. package/bundled-realms/pretui/components/visually-hidden.md +47 -0
  900. package/bundled-realms/pretui/components/visually-hidden.usage.gts +27 -0
  901. package/bundled-realms/pretui/components/watermark.gts +141 -0
  902. package/bundled-realms/pretui/components/watermark.md +58 -0
  903. package/bundled-realms/pretui/components/watermark.usage.gts +63 -0
  904. package/bundled-realms/pretui/components/waveform.gts +376 -0
  905. package/bundled-realms/pretui/components/waveform.md +56 -0
  906. package/bundled-realms/pretui/components/waveform.usage.gts +131 -0
  907. package/bundled-realms/pretui/components/wizard.gts +677 -0
  908. package/bundled-realms/pretui/components/wizard.md +58 -0
  909. package/bundled-realms/pretui/components/wizard.usage.gts +188 -0
  910. package/bundled-realms/pretui/components/work-item.gts +207 -0
  911. package/bundled-realms/pretui/components/work-item.md +58 -0
  912. package/bundled-realms/pretui/components/work-item.usage.gts +103 -0
  913. package/bundled-realms/pretui/components/zoomable-frame.gts +541 -0
  914. package/bundled-realms/pretui/components/zoomable-frame.md +50 -0
  915. package/bundled-realms/pretui/components/zoomable-frame.usage.gts +175 -0
  916. package/bundled-realms/pretui/cropper/LICENSE +21 -0
  917. package/bundled-realms/pretui/cropper/README.md +92 -0
  918. package/bundled-realms/pretui/cropper/index.js +81 -0
  919. package/bundled-realms/pretui/data-component.gts +1161 -0
  920. package/bundled-realms/pretui/demo-design-layers.gts +112 -0
  921. package/bundled-realms/pretui/demo-design-tools.gts +463 -0
  922. package/bundled-realms/pretui/demo-design-value.gts +9 -0
  923. package/bundled-realms/pretui/demo-forms-core.gts +82 -0
  924. package/bundled-realms/pretui/demo-forms-expression.gts +76 -0
  925. package/bundled-realms/pretui/demo-forms-record.gts +16 -0
  926. package/bundled-realms/pretui/demo-foundations-more.gts +10 -0
  927. package/bundled-realms/pretui/demo-foundations.gts +8 -0
  928. package/bundled-realms/pretui/demo-ink-feedback.gts +12 -0
  929. package/bundled-realms/pretui/demo-json.gts +17 -0
  930. package/bundled-realms/pretui/demo-locations.ts +103 -0
  931. package/bundled-realms/pretui/demo-media-library.gts +101 -0
  932. package/bundled-realms/pretui/demo-media.gts +6 -0
  933. package/bundled-realms/pretui/demo-menu.gts +182 -0
  934. package/bundled-realms/pretui/demo-motion-core.gts +4 -0
  935. package/bundled-realms/pretui/demo-motion-pointer.gts +21 -0
  936. package/bundled-realms/pretui/demo-reading-format.gts +10 -0
  937. package/bundled-realms/pretui/demo-structure-dashboard.gts +212 -0
  938. package/bundled-realms/pretui/demo-structure-data.gts +4 -0
  939. package/bundled-realms/pretui/demo-structure-scroll.gts +19 -0
  940. package/bundled-realms/pretui/demo-structure.gts +21 -0
  941. package/bundled-realms/pretui/demo-surfaces-grid.gts +104 -0
  942. package/bundled-realms/pretui/demo-texture.gts +21 -0
  943. package/bundled-realms/pretui/docs/catalog-taxonomy.md +200 -0
  944. package/bundled-realms/pretui/docs/composites.md +13 -0
  945. package/bundled-realms/pretui/docs/reading.md +12 -0
  946. package/bundled-realms/pretui/docs/structure.md +8 -0
  947. package/bundled-realms/pretui/emoji-data/LICENSE +202 -0
  948. package/bundled-realms/pretui/emoji-data/LICENSE.data +202 -0
  949. package/bundled-realms/pretui/emoji-data/LICENSE.emojibase +21 -0
  950. package/bundled-realms/pretui/emoji-data/LICENSE.unicode +39 -0
  951. package/bundled-realms/pretui/emoji-data/README.md +360 -0
  952. package/bundled-realms/pretui/emoji-data/data.ts +45 -0
  953. package/bundled-realms/pretui/emoji-data/engine.ts +465 -0
  954. package/bundled-realms/pretui/example-gallery.gts +129 -0
  955. package/bundled-realms/pretui/examples-kit.gts +228 -0
  956. package/bundled-realms/pretui/examples-listing.gts +51 -0
  957. package/bundled-realms/pretui/examples.gts +584 -0
  958. package/bundled-realms/pretui/focus.gts +459 -0
  959. package/bundled-realms/pretui/gridstack/LICENSE +21 -0
  960. package/bundled-realms/pretui/gridstack/README.md +103 -0
  961. package/bundled-realms/pretui/gridstack/index.js +169 -0
  962. package/bundled-realms/pretui/icon-registry.gts +753 -0
  963. package/bundled-realms/pretui/index.json +11 -0
  964. package/bundled-realms/pretui/internal/agentic-chat.gts +101 -0
  965. package/bundled-realms/pretui/internal/blocks.gts +35 -0
  966. package/bundled-realms/pretui/internal/choice-cards.gts +258 -0
  967. package/bundled-realms/pretui/internal/color-fixtures.gts +3 -0
  968. package/bundled-realms/pretui/internal/composites-fixtures.gts +16 -0
  969. package/bundled-realms/pretui/internal/corner-mark.gts +83 -0
  970. package/bundled-realms/pretui/internal/design-tools.gts +881 -0
  971. package/bundled-realms/pretui/internal/extras.gts +31 -0
  972. package/bundled-realms/pretui/internal/feedback.gts +27 -0
  973. package/bundled-realms/pretui/internal/file-intake-fixtures.gts +17 -0
  974. package/bundled-realms/pretui/internal/file-intake.gts +193 -0
  975. package/bundled-realms/pretui/internal/forms-core.gts +394 -0
  976. package/bundled-realms/pretui/internal/forms-expression.gts +837 -0
  977. package/bundled-realms/pretui/internal/forms-picker-fixtures.gts +10 -0
  978. package/bundled-realms/pretui/internal/forms-picker.gts +129 -0
  979. package/bundled-realms/pretui/internal/forms-record.gts +173 -0
  980. package/bundled-realms/pretui/internal/freestyle.gts +117 -0
  981. package/bundled-realms/pretui/internal/ink.gts +25 -0
  982. package/bundled-realms/pretui/internal/json-tree.gts +526 -0
  983. package/bundled-realms/pretui/internal/keep-style.gts +168 -0
  984. package/bundled-realms/pretui/internal/media-assets.gts +10 -0
  985. package/bundled-realms/pretui/internal/media-library.gts +14 -0
  986. package/bundled-realms/pretui/internal/media-viewer.gts +322 -0
  987. package/bundled-realms/pretui/internal/media-wave.gts +270 -0
  988. package/bundled-realms/pretui/internal/menu.gts +522 -0
  989. package/bundled-realms/pretui/internal/money-fixtures.gts +6 -0
  990. package/bundled-realms/pretui/internal/money.gts +477 -0
  991. package/bundled-realms/pretui/internal/motion-core.gts +54 -0
  992. package/bundled-realms/pretui/internal/motion-pointer.gts +234 -0
  993. package/bundled-realms/pretui/internal/overlay-confirm.gts +35 -0
  994. package/bundled-realms/pretui/internal/overlay.gts +291 -0
  995. package/bundled-realms/pretui/internal/reading-extras.gts +56 -0
  996. package/bundled-realms/pretui/internal/reading-format.gts +232 -0
  997. package/bundled-realms/pretui/internal/reading-listing.gts +232 -0
  998. package/bundled-realms/pretui/internal/structure-chart.gts +414 -0
  999. package/bundled-realms/pretui/internal/structure-dashboard.gts +503 -0
  1000. package/bundled-realms/pretui/internal/structure-flow.gts +48 -0
  1001. package/bundled-realms/pretui/internal/structure-layout-fixtures.gts +36 -0
  1002. package/bundled-realms/pretui/internal/structure-layout.gts +99 -0
  1003. package/bundled-realms/pretui/internal/structure-morph.gts +140 -0
  1004. package/bundled-realms/pretui/internal/structure-scenes.gts +25 -0
  1005. package/bundled-realms/pretui/internal/structure-scroll.gts +72 -0
  1006. package/bundled-realms/pretui/internal/structure-shell-fixtures.gts +25 -0
  1007. package/bundled-realms/pretui/internal/surfaces-canvas-fixtures.gts +5 -0
  1008. package/bundled-realms/pretui/internal/surfaces-canvas.gts +283 -0
  1009. package/bundled-realms/pretui/internal/texture.gts +81 -0
  1010. package/bundled-realms/pretui/internal/toggle-controls-fixtures.gts +7 -0
  1011. package/bundled-realms/pretui/internal/toggle-controls.gts +81 -0
  1012. package/bundled-realms/pretui/json-model.ts +1981 -0
  1013. package/bundled-realms/pretui/media-chrome/LICENSE +19 -0
  1014. package/bundled-realms/pretui/media-chrome/README.md +111 -0
  1015. package/bundled-realms/pretui/media-chrome/index.js +1647 -0
  1016. package/bundled-realms/pretui/media-examples.gts +315 -0
  1017. package/bundled-realms/pretui/model-viewer/LICENSE +202 -0
  1018. package/{LICENSE → bundled-realms/pretui/model-viewer/LICENSE-gainmap-js} +1 -1
  1019. package/bundled-realms/pretui/model-viewer/LICENSE-lit +28 -0
  1020. package/bundled-realms/pretui/model-viewer/LICENSE-three +21 -0
  1021. package/bundled-realms/pretui/model-viewer/NOTICE +67 -0
  1022. package/bundled-realms/pretui/model-viewer/README.md +122 -0
  1023. package/bundled-realms/pretui/model-viewer/index.js +6413 -0
  1024. package/bundled-realms/pretui/package.json +51 -0
  1025. package/bundled-realms/pretui/photoswipe/LICENSE +21 -0
  1026. package/bundled-realms/pretui/photoswipe/README.md +91 -0
  1027. package/bundled-realms/pretui/photoswipe/index.js +149 -0
  1028. package/bundled-realms/pretui/photoswipe/style.ts +465 -0
  1029. package/bundled-realms/pretui/plot/LICENSE +13 -0
  1030. package/bundled-realms/pretui/plot/LICENSE.d3 +13 -0
  1031. package/bundled-realms/pretui/plot/LICENSE.interval-tree-1d +22 -0
  1032. package/bundled-realms/pretui/plot/LICENSE.isoformat +13 -0
  1033. package/bundled-realms/pretui/plot/README.md +35 -0
  1034. package/bundled-realms/pretui/plot/index.d.ts +31 -0
  1035. package/bundled-realms/pretui/plot/index.js +449 -0
  1036. package/bundled-realms/pretui/pretui-component.gts +1336 -0
  1037. package/bundled-realms/pretui/pretui-css.gts +380 -0
  1038. package/bundled-realms/pretui/pretui-primitives.gts +162 -0
  1039. package/bundled-realms/pretui/qrcode/LICENSE +34 -0
  1040. package/bundled-realms/pretui/qrcode/README.md +87 -0
  1041. package/bundled-realms/pretui/qrcode/index.js +35 -0
  1042. package/bundled-realms/pretui/realm.json +16 -0
  1043. package/bundled-realms/pretui/registry.ts +40 -0
  1044. package/bundled-realms/pretui/sigpad/LICENSE +21 -0
  1045. package/bundled-realms/pretui/sigpad/README.md +103 -0
  1046. package/bundled-realms/pretui/sigpad/index.js +30 -0
  1047. package/bundled-realms/pretui/structure-dashboard-css.ts +166 -0
  1048. package/bundled-realms/pretui/surfaces/README.md +37 -0
  1049. package/bundled-realms/pretui/surfaces/canvas/LICENSE.d3 +168 -0
  1050. package/bundled-realms/pretui/surfaces/canvas/LICENSE.xyflow +21 -0
  1051. package/bundled-realms/pretui/surfaces/canvas/index.js +25420 -0
  1052. package/bundled-realms/pretui/surfaces/grid/LICENSE.tanstack +50 -0
  1053. package/bundled-realms/pretui/surfaces/grid/index.js +21478 -0
  1054. package/bundled-realms/pretui/surfaces/layout/index.js +9036 -0
  1055. package/bundled-realms/pretui/surfaces-canvas-css.ts +1640 -0
  1056. package/bundled-realms/pretui/surfaces-canvas-layout.ts +607 -0
  1057. package/bundled-realms/pretui/tsconfig.json +54 -0
  1058. package/bundled-realms/pretui/wavesurfer/LICENSE +29 -0
  1059. package/bundled-realms/pretui/wavesurfer/README.md +85 -0
  1060. package/bundled-realms/pretui/wavesurfer/index.js +184 -0
  1061. package/bundled-realms/pretui/zxcvbn/LICENSE +21 -0
  1062. package/bundled-realms/pretui/zxcvbn/README.md +192 -0
  1063. package/bundled-realms/pretui/zxcvbn/index.d.ts +28 -0
  1064. package/bundled-realms/pretui/zxcvbn/index.js +5931 -0
  1065. package/bundled-test-harness/index.html +1 -1
  1066. package/bundled-test-harness/tests/index.html +1 -1
  1067. package/dist/api.js +1 -1
  1068. package/dist/index.js +33 -33
  1069. package/package.json +1 -1
  1070. package/src/lib/test-engine.ts +14 -4
@@ -0,0 +1,1174 @@
1
+ // Pretui — NodeCanvas: a node-and-edge canvas over the vendored surfaces engine.
2
+ import Component from '@glimmer/component';
3
+ import { tracked } from '@glimmer/tracking';
4
+ import { cssStyle } from '../pretui-css';
5
+ import { Background, Canvas, Controls, Handle, MiniMap, Panel, addEdge, applyEdgeChanges, applyNodeChanges, getCanvas } from '../surfaces/canvas/index.js';
6
+ import { GraphOutline } from './graph-outline';
7
+ import { graphLayout, handleSidesFor } from '../surfaces-canvas-layout';
8
+ import type { GraphDirection, GraphLayoutResult } from '../surfaces-canvas-layout';
9
+ import { NodeCard } from './node-card';
10
+ import type { NodeBodyComponent, NodeBodySignature } from './node-card';
11
+ import { canvasStylesheet } from '../internal/surfaces-canvas';
12
+ import type { CanvasEdge, CanvasNode } from '../internal/surfaces-canvas';
13
+
14
+ // ── NodeShell — handles + hit area around whatever body is in play ───────
15
+ // The engine's FlowNode draws its own source/target handles ONLY when no
16
+ // custom node component is supplied (`hasSourceHandle = !nodeComponent`),
17
+ // which means every custom node in React Flow and in this port has to
18
+ // remember to render <Handle>s or its edges detach. NodeCanvas always uses
19
+ // a custom component, so the shell renders them once, correctly, for every
20
+ // body — including a caller's.
21
+
22
+ class NodeShell extends Component<NodeBodySignature> {
23
+ /** Overridden by `shellFor` to carry the caller's body component. */
24
+ get body(): NodeBodyComponent {
25
+ return NodeCard as unknown as NodeBodyComponent;
26
+ }
27
+ get targetPosition() {
28
+ return this.args.node?.targetPosition ?? 'left';
29
+ }
30
+ get sourcePosition() {
31
+ return this.args.node?.sourcePosition ?? 'right';
32
+ }
33
+ <template>
34
+ <Handle @type='target' @position={{this.targetPosition}} />
35
+ <this.body
36
+ @node={{@node}}
37
+ @id={{@id}}
38
+ @data={{@data}}
39
+ @selected={{@selected}}
40
+ @dragging={{@dragging}}
41
+ />
42
+ <Handle @type='source' @position={{this.sourcePosition}} />
43
+ </template>
44
+ }
45
+
46
+ // A component class must keep a STABLE identity across renders or the
47
+ // engine treats it as a brand-new node type and warns (error002). Memoised
48
+ // per body component; subclassing inherits NodeShell's template through
49
+ // the prototype chain.
50
+ const SHELL_CACHE = new WeakMap<object, unknown>();
51
+
52
+ function shellFor(body: NodeBodyComponent): unknown {
53
+ let hit = SHELL_CACHE.get(body as unknown as object);
54
+ if (!hit) {
55
+ hit = class extends NodeShell {
56
+ override get body(): NodeBodyComponent {
57
+ return body;
58
+ }
59
+ };
60
+ SHELL_CACHE.set(body as unknown as object, hit);
61
+ }
62
+ return hit;
63
+ }
64
+
65
+ // ── NodeCanvas ───────────────────────────────────────────────────────────
66
+ // Ported from @cardstack/boxel-canvas (xyflow / React Flow). What the
67
+ // inspiration got wrong, and what this fixes:
68
+ //
69
+ // • Uncontrolled by default. React Flow makes you wire onNodesChange /
70
+ // useNodesState before a node will move at all; drop `<NodeCanvas
71
+ // @nodes>` on a page here and dragging just works. Pass
72
+ // `@onNodesChange` and it hands control straight back.
73
+ // • Node content is a component slot, not a string. React Flow's stock
74
+ // node renders `data.label`; anything richer means authoring a
75
+ // nodeTypes map AND remembering the <Handle>s. Here `@nodeBody` takes
76
+ // any component and the shell supplies the handles.
77
+ // • Chrome is tokenized. Every colour in the engine's `--xy-*` channel
78
+ // is remapped to a Pretui token with a documented `--pretui-canvas-*`
79
+ // knob in front of it — background pattern, edges, handles, controls,
80
+ // minimap, selection rectangle. No `.dark` branch anywhere (the engine
81
+ // ships one; we never add the class that triggers it).
82
+ // • Edges arrive where the handles are. The engine computes an edge's
83
+ // endpoints from `node.sourcePosition ?? 'bottom'` /
84
+ // `node.targetPosition ?? 'top'`, but a custom node component draws
85
+ // its own handles — so every React-Flow graph that forgets those two
86
+ // keys renders edges leaving the BOTTOM of a node whose handle is on
87
+ // the right. `@flow` sets both sides for the whole graph, once, and
88
+ // the shell draws the handles to match.
89
+ // • Depth is hairline + shadow (Law 1) — the stock node border is gone.
90
+ // • Focus is visible again, and animated edges stop under
91
+ // prefers-reduced-motion (Law 5). Both were `outline: none` /
92
+ // unguarded `animation` upstream. See PRETUI_CANVAS_SKIN.
93
+ // • The graph has a text form, and the text form is OPERABLE. Canvases
94
+ // are the worst surface in UI for screen readers; `@summary` renders
95
+ // the whole graph as GraphOutline — a real list of nodes with both
96
+ // directions of every edge spelled out (labels included), where each
97
+ // node is a button that selects and focuses it in the picture, and
98
+ // where a keyboard user can draw a NEW edge. sr-only by default, and
99
+ // it unhides the moment focus enters it.
100
+ // • Auto-layout. React Flow ships none at all; its own Layouting example
101
+ // reaches for `dagre`, whose ranker calls `Math.random()` — forbidden
102
+ // in realm code, because the indexer requires determinism. `@autoLayout`
103
+ // runs a layered pass written for this kit (see surfaces-canvas-layout).
104
+ // • Arrowheads that actually draw. The port emits
105
+ // `marker-end="url('#1__type=arrowclosed')"` and ships no `<marker>`
106
+ // anywhere, so `markerEnd` has always been a no-op. The defs are
107
+ // supplied here, and `@arrowheads` defaults to ON — a directed graph
108
+ // that does not say which way its edges run is not communicating.
109
+ // • Edge routing is a knob. `@edgeType` sets the routing for every edge
110
+ // AND the shape of the line drawn while connecting, which the engine
111
+ // otherwise leaves as a bezier however the edges look.
112
+ //
113
+ // KEYBOARD — read out of the engine bundle rather than assumed, because a
114
+ // canvas is the surface people lie about most:
115
+ // • the canvas root is `role="application" tabindex="0"`; every visible
116
+ // node is `tabindex="0"` with `aria-roledescription="node"`.
117
+ // • Tab / Shift-Tab move the SELECTION to the next / previous node and
118
+ // focus it. The engine consumes the key — inside a canvas Tab is a
119
+ // graph walk, not the browser's tab order.
120
+ // • Enter (or F2) ACTIVATES the focused node — it dispatches the
121
+ // surface `activate` command. Space does NOT select: it is the
122
+ // pan-activation key, held while dragging to pan the viewport.
123
+ // • Arrow keys move the selection to the nearest node in that
124
+ // direction; in the surface's `change` mode they nudge the selected
125
+ // node by one graph unit, Shift+Arrow by ten.
126
+ // • Delete / Backspace delete the selection, Cmd/Ctrl+A selects all,
127
+ // and Escape cancels a drag, then an edit, then clears the selection
128
+ // and releases focus.
129
+ // • zoom in / zoom out / fit view / interactivity lock are real
130
+ // <button>s with aria-labels inside `Controls`, so they are reachable
131
+ // and are the only keyboard route to pan or zoom.
132
+ // THE REMAINING GAPS, stated plainly rather than papered over:
133
+ // 1. The ENGINE has no keyboard path to create or reconnect an edge —
134
+ // connections are pointer-only here and in React Flow — so `@summary`
135
+ // carries one. GraphOutline gives every node a real button (select and focus it in
136
+ // the picture) and a connect control: arm a source, activate a
137
+ // target, and the connection goes through the SAME `onConnect` a
138
+ // pointer drag uses. Reconnecting an existing edge is still
139
+ // pointer-only.
140
+ // 2. The engine registers its key handler on the WINDOW in the capture
141
+ // phase, so while any canvas is mounted those keys are canvas-scoped
142
+ // for the whole page — a Tab pressed outside the graph can be pulled
143
+ // into it (text inputs and activation keys on buttons are exempt).
144
+ // Give a canvas its own page or panel; do not sit one beside an
145
+ // unrelated form.
146
+ // 3. The MiniMap's accessible name is an SVG <title> with a FIXED id
147
+ // upstream, so two canvases on one page share the first one's name.
148
+ // One canvas per page is the shape that behaves.
149
+ // 4. `@summary` is the answer to what is left: the same graph as a real
150
+ // list of nodes and their outgoing links — sr-only by default, and
151
+ // `visible` for anyone who would rather read it than trace it.
152
+
153
+ const EMPTY_NODES: CanvasNode[] = [];
154
+ const EMPTY_EDGES: CanvasEdge[] = [];
155
+
156
+ /** Which sides the handles (and therefore the edge endpoints) sit on. */
157
+ export type CanvasFlow = 'horizontal' | 'vertical';
158
+
159
+ const FLOW_SIDES: Record<
160
+ CanvasFlow,
161
+ { source: CanvasNode['sourcePosition']; target: CanvasNode['targetPosition'] }
162
+ > = {
163
+ horizontal: { source: 'right', target: 'left' },
164
+ vertical: { source: 'bottom', target: 'top' },
165
+ };
166
+
167
+ /** Edge routing. `bezier` is the engine's unnamed default. */
168
+ export type CanvasEdgeType =
169
+ | 'bezier'
170
+ | 'smoothstep'
171
+ | 'step'
172
+ | 'straight'
173
+ | 'simplebezier';
174
+
175
+ /** What the default block's second parameter carries. */
176
+ export interface NodeCanvasApi {
177
+ /** re-run `@autoLayout` over the CURRENT graph, after drags */
178
+ relayout: () => void;
179
+ /** select a node and move keyboard focus to it */
180
+ focusNode: (id: string) => void;
181
+ /** the last layout result: layers, reversed edges, crossing counts */
182
+ layout: GraphLayoutResult | undefined;
183
+ }
184
+
185
+ /**
186
+ * `bezier` is the engine's DEFAULT branch, reached by leaving `type`
187
+ * unset — there is no `'bezier'` case in its path switch, so writing the
188
+ * string through would fall into the same default but is left undefined
189
+ * here to keep the edge records honest about what they asked for.
190
+ */
191
+ function edgeTypeValue(type: CanvasEdgeType | undefined): string | undefined {
192
+ return type && type !== 'bezier' ? type : undefined;
193
+ }
194
+
195
+ /** The engine's own name for the same routing, on the in-flight line. */
196
+ const CONNECTION_LINE_TYPE: Record<CanvasEdgeType, string> = {
197
+ bezier: 'default',
198
+ smoothstep: 'smoothstep',
199
+ step: 'step',
200
+ straight: 'straight',
201
+ simplebezier: 'simplebezier',
202
+ };
203
+
204
+ const MARKER_FOR: Record<string, { type: string } | undefined> = {
205
+ closed: { type: 'arrowclosed' },
206
+ open: { type: 'arrow' },
207
+ none: undefined,
208
+ };
209
+
210
+ // Memoised so the object handed to the engine keeps ONE identity for a
211
+ // given combination — a fresh object every read makes the engine treat
212
+ // every edge as replaced.
213
+ const EDGE_OPTIONS_CACHE = new Map<string, Record<string, unknown>>();
214
+
215
+ function defaultEdgeOptionsFor(
216
+ type: CanvasEdgeType,
217
+ arrowheads: string,
218
+ animated: boolean,
219
+ ): Record<string, unknown> {
220
+ let key = `${type}|${arrowheads}|${animated ? 'a' : '-'}`;
221
+ let hit = EDGE_OPTIONS_CACHE.get(key);
222
+ if (!hit) {
223
+ hit = {};
224
+ let routed = edgeTypeValue(type);
225
+ if (routed) {
226
+ hit['type'] = routed;
227
+ }
228
+ let marker = MARKER_FOR[arrowheads];
229
+ if (marker) {
230
+ hit['markerEnd'] = marker;
231
+ }
232
+ if (animated) {
233
+ hit['animated'] = true;
234
+ }
235
+ EDGE_OPTIONS_CACHE.set(key, hit);
236
+ }
237
+ return hit;
238
+ }
239
+
240
+ const SNAP_CACHE = new Map<number, [number, number]>();
241
+
242
+ /** Snapping to the drawn grid, not to a second invisible one. */
243
+ function snapGridFor(gap: number): [number, number] {
244
+ let hit = SNAP_CACHE.get(gap);
245
+ if (!hit) {
246
+ hit = [gap, gap];
247
+ SNAP_CACHE.set(gap, hit);
248
+ }
249
+ return hit;
250
+ }
251
+
252
+ let summarySeq = 0;
253
+
254
+ export interface NodeCanvasSignature {
255
+ Args: {
256
+ /**
257
+ * The nodes to draw. Uncontrolled unless `@onNodesChange` is passed:
258
+ * an uncontrolled canvas SEEDS from this array once and then owns its
259
+ * own copy, so later changes to it are ignored. Pass `@onNodesChange`
260
+ * (and keep the array yourself) whenever the graph changes from
261
+ * outside the canvas.
262
+ */
263
+ nodes?: CanvasNode[];
264
+ /** the edges to draw. Uncontrolled unless `@onEdgesChange` is passed. */
265
+ edges?: CanvasEdge[];
266
+ /** accessible name for the canvas. Required — it is a `role=application`. */
267
+ label: string;
268
+ /** take control of node changes (drag, select, remove) */
269
+ onNodesChange?: (changes: unknown[]) => void;
270
+ /** take control of edge changes */
271
+ onEdgesChange?: (changes: unknown[]) => void;
272
+ /** fires when a handle drag completes; uncontrolled canvases add the edge */
273
+ onConnect?: (connection: unknown) => void;
274
+ /**
275
+ * Which sides connectors leave from, for every node that does not set
276
+ * its own `sourcePosition`/`targetPosition`: `horizontal` (default,
277
+ * in at the inline start and out at the inline end) or `vertical`.
278
+ * Sets the drawn handles AND the edge endpoints together.
279
+ */
280
+ flow?: CanvasFlow;
281
+ /**
282
+ * Run the layered auto-layout and place every node, ignoring the
283
+ * `position` on the input nodes. `right` / `down` / `left` / `up`; omit
284
+ * for free positioning. Also pins the handle sides to match, so edges
285
+ * leave the side they are drawn on. See `graphLayout`.
286
+ *
287
+ * It obeys the same controlled/uncontrolled rule as `@nodes`: an
288
+ * UNCONTROLLED canvas lays out once and then owns its own positions, so
289
+ * a reader's drags are never yanked back and a later change to
290
+ * `@autoLayout` does not move anything by itself. Re-run it with the
291
+ * outline's "Tidy layout" control or the `relayout` on the yielded API.
292
+ * A CONTROLLED canvas (`@onNodesChange`) re-lays out whenever the nodes
293
+ * or edges array changes identity.
294
+ */
295
+ autoLayout?: GraphDirection;
296
+ /** space between layers under `@autoLayout`, in graph units (default 110) */
297
+ rankGap?: number;
298
+ /** space between siblings within a layer under `@autoLayout` (default 28) */
299
+ nodeGap?: number;
300
+ /** node width the layout assumes when a node declares none (default 200) */
301
+ layoutNodeWidth?: number;
302
+ /** node height the layout assumes when a node declares none (default 96) */
303
+ layoutNodeHeight?: number;
304
+ /**
305
+ * Edge routing for every edge that does not set its own `type`:
306
+ * `bezier` (default), `smoothstep`, `step`, `straight`, `simplebezier`.
307
+ * Also picks the shape of the line drawn WHILE connecting, which the
308
+ * engine otherwise leaves as a bezier no matter what the edges look
309
+ * like.
310
+ */
311
+ edgeType?: CanvasEdgeType;
312
+ /**
313
+ * Arrowheads on every edge: `closed` (default — a directed graph
314
+ * without them is ambiguous), `open`, or `none`. React Flow ships no
315
+ * marker by default and the Ember port ships no marker DEFINITIONS at
316
+ * all; both are fixed here.
317
+ */
318
+ arrowheads?: 'closed' | 'open' | 'none';
319
+ /** dash and travel every edge that does not set its own `animated` */
320
+ animatedEdges?: boolean;
321
+ /**
322
+ * Drag on empty canvas to rubber-band select instead of panning, and
323
+ * select on TOUCH rather than full enclosure. Panning stays available
324
+ * on the pan-activation key (Space held while dragging) and through
325
+ * the Controls, so this does not strand anyone — but say so in the UI,
326
+ * because a canvas that stops panning under the pointer reads as
327
+ * broken.
328
+ */
329
+ marquee?: boolean;
330
+ /** snap dragged nodes to the background grid */
331
+ snapToGrid?: boolean;
332
+ /** component rendered inside every node; handles are added around it */
333
+ nodeBody?: NodeBodyComponent;
334
+ /** per-type node components, keyed by `node.type`, for mixed graphs */
335
+ nodeTypes?: Record<string, unknown>;
336
+ /** background pattern: `dots` (default), `lines`, `cross` or `none` */
337
+ pattern?: 'dots' | 'lines' | 'cross' | 'none';
338
+ /** grid spacing of the background pattern, in graph units */
339
+ gap?: number;
340
+ /** dot radius / cross arm length, in graph units */
341
+ patternSize?: number;
342
+ /** show the zoom / fit / lock control cluster (default true) */
343
+ controls?: boolean;
344
+ /** corner for the control cluster */
345
+ controlsPosition?:
346
+ | 'top-left'
347
+ | 'top-right'
348
+ | 'bottom-left'
349
+ | 'bottom-right';
350
+ /** lay the control cluster out horizontally instead of vertically */
351
+ controlsHorizontal?: boolean;
352
+ /** show the minimap (default true) */
353
+ minimap?: boolean;
354
+ /** corner for the minimap */
355
+ minimapPosition?:
356
+ | 'top-left'
357
+ | 'top-right'
358
+ | 'bottom-left'
359
+ | 'bottom-right';
360
+ /** frame the whole graph on first render (default true) */
361
+ fitView?: boolean;
362
+ /**
363
+ * Allow node dragging. Defaults to true — EXCEPT on a controlled canvas
364
+ * under `@autoLayout`, where the layout owns positions and a dragged
365
+ * node would snap straight back. See the getter for the whole rule.
366
+ */
367
+ draggable?: boolean;
368
+ /** allow drawing new edges from handles (default true) */
369
+ connectable?: boolean;
370
+ /** allow selecting nodes and edges (default true) */
371
+ selectable?: boolean;
372
+ /** height of the canvas frame; any CSS length (default `26rem`) */
373
+ height?: string;
374
+ /** where the text form of the graph goes (default `sr-only`) */
375
+ summary?: 'sr-only' | 'visible' | 'off';
376
+ };
377
+ Blocks: {
378
+ /**
379
+ * anything extra inside the viewport — Panels, NodeToolbars, overlays.
380
+ * Yields the engine store first (viewport, fitView, setCenter) and the
381
+ * canvas's own API second (`relayout`, `focusNode`, `layout`).
382
+ */
383
+ default: [unknown, NodeCanvasApi];
384
+ /** a floating top-start Panel: filters, mode switches, a title */
385
+ toolbar: [];
386
+ /** a floating top-end Panel: a key for the node hues */
387
+ legend: [];
388
+ /** shown centred when there are no nodes at all */
389
+ empty: [];
390
+ };
391
+ Element: HTMLDivElement;
392
+ }
393
+
394
+ export class NodeCanvas extends Component<NodeCanvasSignature> {
395
+ private summaryId = `pretui-canvas-summary-${(summarySeq += 1)}`;
396
+ private rootId = `pretui-canvas-root-${summarySeq}`;
397
+
398
+ // Uncontrolled mode holds its own copy so a bare <NodeCanvas @nodes>
399
+ // drags out of the box; controlled mode never reads these.
400
+ @tracked private localNodes: CanvasNode[] = seed(
401
+ this.args.nodes ?? EMPTY_NODES,
402
+ this.args.edges ?? EMPTY_EDGES,
403
+ this.args.flow ?? 'horizontal',
404
+ layoutOptionsFrom(this.args),
405
+ );
406
+ @tracked private localEdges: CanvasEdge[] = (
407
+ this.args.edges ?? EMPTY_EDGES
408
+ ).map((edge) => ({ ...edge }));
409
+
410
+ /** The node the outline last sent focus to, so it can mark its own row. */
411
+ @tracked private activeId: string | undefined = undefined;
412
+
413
+ get isNodeControlled() {
414
+ return typeof this.args.onNodesChange === 'function';
415
+ }
416
+ get isEdgeControlled() {
417
+ return typeof this.args.onEdgesChange === 'function';
418
+ }
419
+
420
+ // Identity matters: the engine warns (error002) when the node array or
421
+ // the nodeTypes object is a fresh object on every read, and Glimmer does
422
+ // not cache getters. The memo lives in module-level WeakMaps keyed on the
423
+ // caller's own array/object, so the getter stays free of side effects.
424
+ get flow(): CanvasFlow {
425
+ // Under @autoLayout the direction IS the flow — a graph laid out
426
+ // downward whose handles point right draws every edge leaving the wrong
427
+ // face of the node. Explicit @flow still wins.
428
+ if (this.args.flow) {
429
+ return this.args.flow;
430
+ }
431
+ let direction = this.args.autoLayout;
432
+ if (direction) {
433
+ return direction === 'down' || direction === 'up'
434
+ ? 'vertical'
435
+ : 'horizontal';
436
+ }
437
+ return 'horizontal';
438
+ }
439
+
440
+ get nodes(): CanvasNode[] {
441
+ return this.isNodeControlled
442
+ ? placedCached(
443
+ this.args.nodes ?? EMPTY_NODES,
444
+ this.args.edges ?? EMPTY_EDGES,
445
+ this.flow,
446
+ layoutOptionsFrom(this.args),
447
+ )
448
+ : this.localNodes;
449
+ }
450
+
451
+ /** The layout result for the graph as it is currently drawn, or undefined. */
452
+ get layout(): GraphLayoutResult | undefined {
453
+ if (!this.args.autoLayout) {
454
+ return undefined;
455
+ }
456
+ return layoutCached(this.nodes, this.edges, layoutOptionsFrom(this.args))
457
+ .result;
458
+ }
459
+
460
+ get edges(): CanvasEdge[] {
461
+ return this.isEdgeControlled
462
+ ? (this.args.edges ?? EMPTY_EDGES)
463
+ : this.localEdges;
464
+ }
465
+
466
+ get nodeTypes(): Record<string, unknown> {
467
+ return nodeTypesFor(this.args.nodeBody, this.args.nodeTypes);
468
+ }
469
+
470
+ canvas = getCanvas(this, {
471
+ nodes: () => this.nodes,
472
+ edges: () => this.edges,
473
+ });
474
+
475
+ handleNodesChange = (changes: unknown[]) => {
476
+ if (this.args.onNodesChange) {
477
+ this.args.onNodesChange(changes);
478
+ return;
479
+ }
480
+ this.localNodes = applyNodeChanges(changes, this.localNodes);
481
+ };
482
+
483
+ handleEdgesChange = (changes: unknown[]) => {
484
+ if (this.args.onEdgesChange) {
485
+ this.args.onEdgesChange(changes);
486
+ return;
487
+ }
488
+ this.localEdges = applyEdgeChanges(changes, this.localEdges);
489
+ };
490
+
491
+ handleConnect = (connection: unknown) => {
492
+ this.args.onConnect?.(connection);
493
+ if (!this.isEdgeControlled) {
494
+ this.localEdges = addEdge(connection, this.localEdges);
495
+ }
496
+ };
497
+
498
+ // ── The keyboard connection path ───────────────────────────────────────
499
+ // Upstream has none: "there is NO keyboard path to create or reconnect an
500
+ // edge" is a documented gap in React Flow and in this port. The outline
501
+ // supplies it, and it funnels through the SAME `handleConnect` a pointer
502
+ // drag uses, so a controlled canvas cannot tell the two apart.
503
+ private connectFromOutline = (source: string, target: string) => {
504
+ this.handleConnect({
505
+ source,
506
+ target,
507
+ sourceHandle: null,
508
+ targetHandle: null,
509
+ });
510
+ };
511
+
512
+ /**
513
+ * Select a node and move keyboard focus onto it. Selection goes through
514
+ * the engine's own change protocol rather than a store poke, so a
515
+ * controlled canvas keeps control of its own selection state.
516
+ *
517
+ * `data-id` is compared rather than interpolated into a selector: a node
518
+ * id is caller data and may contain quotes or brackets, which would break
519
+ * an attribute selector — or worse, match the wrong node.
520
+ */
521
+ private focusNode = (id: string) => {
522
+ this.activeId = id;
523
+ this.handleNodesChange(
524
+ this.nodes.map((node) => ({
525
+ id: node.id,
526
+ type: 'select',
527
+ selected: node.id === id,
528
+ })),
529
+ );
530
+ let root = document.getElementById(this.rootId);
531
+ if (!root) {
532
+ return;
533
+ }
534
+ let candidates = root.querySelectorAll<HTMLElement>('.boxel-canvas__node');
535
+ for (let element of Array.from(candidates)) {
536
+ if (element.dataset['id'] === id) {
537
+ element.focus();
538
+ return;
539
+ }
540
+ }
541
+ };
542
+
543
+ /**
544
+ * Re-run the layout over the graph AS IT IS NOW, after drags. Uncontrolled
545
+ * canvases replace their own copy; controlled ones get position changes in
546
+ * the engine's own change vocabulary, so a caller's `applyNodeChanges`
547
+ * reducer handles it with no special case.
548
+ */
549
+ private relayout = () => {
550
+ let options = layoutOptionsFrom(this.args);
551
+ if (!options.direction) {
552
+ return;
553
+ }
554
+ let result = graphLayout(this.nodes, this.edges, {
555
+ direction: options.direction,
556
+ rankGap: options.rankGap,
557
+ nodeGap: options.nodeGap,
558
+ nodeWidth: options.nodeWidth,
559
+ nodeHeight: options.nodeHeight,
560
+ });
561
+ let changes = result.placements.map((placement) => ({
562
+ id: placement.id,
563
+ type: 'position',
564
+ position: { x: placement.x, y: placement.y },
565
+ dragging: false,
566
+ }));
567
+ this.handleNodesChange(changes);
568
+ };
569
+
570
+ get api(): NodeCanvasApi {
571
+ return {
572
+ relayout: this.relayout,
573
+ focusNode: this.focusNode,
574
+ layout: this.layout,
575
+ };
576
+ }
577
+
578
+ get autoLayoutOn() {
579
+ return Boolean(this.args.autoLayout);
580
+ }
581
+
582
+ get relayoutAction() {
583
+ return this.autoLayoutOn ? this.relayout : undefined;
584
+ }
585
+
586
+ get connectAction() {
587
+ return this.connectable ? this.connectFromOutline : undefined;
588
+ }
589
+
590
+ get edgeType(): CanvasEdgeType {
591
+ return this.args.edgeType ?? 'bezier';
592
+ }
593
+
594
+ get connectionLineType() {
595
+ return CONNECTION_LINE_TYPE[this.edgeType] ?? 'default';
596
+ }
597
+
598
+ get arrowheads() {
599
+ return this.args.arrowheads ?? 'closed';
600
+ }
601
+
602
+ /**
603
+ * Spread onto every edge that does not set the same key itself, by the
604
+ * engine's `applyDefaultEdgeOptions`. Identity-stable because the engine
605
+ * spreads it into each edge on every read.
606
+ */
607
+ get defaultEdgeOptions(): Record<string, unknown> {
608
+ return defaultEdgeOptionsFor(
609
+ this.edgeType,
610
+ this.arrowheads,
611
+ this.args.animatedEdges ?? false,
612
+ );
613
+ }
614
+
615
+ get marquee() {
616
+ return this.args.marquee ?? false;
617
+ }
618
+ get selectionMode() {
619
+ return this.marquee ? 'partial' : 'full';
620
+ }
621
+ get snapToGrid() {
622
+ return this.args.snapToGrid ?? false;
623
+ }
624
+ get snapGrid(): [number, number] {
625
+ return snapGridFor(this.gap);
626
+ }
627
+
628
+ get pattern() {
629
+ return this.args.pattern ?? 'dots';
630
+ }
631
+ get showBackground() {
632
+ return this.pattern !== 'none';
633
+ }
634
+ get gap() {
635
+ return this.args.gap ?? 22;
636
+ }
637
+ get patternSize() {
638
+ return this.args.patternSize ?? (this.pattern === 'cross' ? 6 : 1.4);
639
+ }
640
+ get showControls() {
641
+ return this.args.controls ?? true;
642
+ }
643
+ get controlsPosition() {
644
+ return this.args.controlsPosition ?? 'bottom-left';
645
+ }
646
+ get controlsOrientation() {
647
+ return this.args.controlsHorizontal ? 'horizontal' : 'vertical';
648
+ }
649
+ get showMinimap() {
650
+ return this.args.minimap ?? true;
651
+ }
652
+ get minimapPosition() {
653
+ return this.args.minimapPosition ?? 'bottom-right';
654
+ }
655
+ get fitView() {
656
+ return this.args.fitView ?? true;
657
+ }
658
+ /**
659
+ * A CONTROLLED canvas under `@autoLayout` recomputes positions whenever
660
+ * the nodes array changes identity — and a drag changes it — so the node
661
+ * would snap back the instant it landed. Rather than ship that, dragging
662
+ * is off by default in exactly that combination. `@draggable={{true}}`
663
+ * forces it back on for a caller who wants the snap.
664
+ *
665
+ * An UNCONTROLLED canvas seeds from the layout once and then owns its own
666
+ * positions, so dragging works normally there and the outline's "Tidy
667
+ * layout" control puts everything back.
668
+ */
669
+ get draggable() {
670
+ if (this.args.draggable !== undefined) {
671
+ return this.args.draggable;
672
+ }
673
+ return !(this.autoLayoutOn && this.isNodeControlled);
674
+ }
675
+ get connectable() {
676
+ return this.args.connectable ?? true;
677
+ }
678
+ get selectable() {
679
+ return this.args.selectable ?? true;
680
+ }
681
+ get summaryMode() {
682
+ return this.args.summary ?? 'sr-only';
683
+ }
684
+ get showSummary() {
685
+ return this.summaryMode !== 'off';
686
+ }
687
+ get describedBy() {
688
+ return this.showSummary ? this.summaryId : undefined;
689
+ }
690
+ get isEmpty() {
691
+ return this.nodes.length === 0;
692
+ }
693
+ get frameStyle() {
694
+ return cssStyle('--pretui-canvas-height', this.args.height);
695
+ }
696
+ get minimapLabel() {
697
+ return `Minimap of ${this.args.label}`;
698
+ }
699
+
700
+ /** `off` renders no mirror at all; otherwise GraphOutline owns the text. */
701
+ get outlineMode(): 'sr-only' | 'visible' {
702
+ return this.summaryMode === 'visible' ? 'visible' : 'sr-only';
703
+ }
704
+
705
+ <template>
706
+ <div
707
+ id={{this.rootId}}
708
+ class='pretui-node-canvas'
709
+ style={{this.frameStyle}}
710
+ data-pattern={{this.pattern}}
711
+ data-summary={{this.summaryMode}}
712
+ data-layout={{if this.autoLayoutOn @autoLayout 'free'}}
713
+ data-test-pretui-node-canvas
714
+ {{canvasStylesheet}}
715
+ ...attributes
716
+ >
717
+ <Canvas
718
+ @canvas={{this.canvas}}
719
+ @nodes={{this.nodes}}
720
+ @edges={{this.edges}}
721
+ @nodeTypes={{this.nodeTypes}}
722
+ @defaultEdgeOptions={{this.defaultEdgeOptions}}
723
+ @connectionLineType={{this.connectionLineType}}
724
+ @onNodesChange={{this.handleNodesChange}}
725
+ @onEdgesChange={{this.handleEdgesChange}}
726
+ @onConnect={{this.handleConnect}}
727
+ @fitView={{this.fitView}}
728
+ @nodesDraggable={{this.draggable}}
729
+ @nodesConnectable={{this.connectable}}
730
+ @elementsSelectable={{this.selectable}}
731
+ @selectionOnDrag={{this.marquee}}
732
+ @selectionMode={{this.selectionMode}}
733
+ @snapToGrid={{this.snapToGrid}}
734
+ @snapGrid={{this.snapGrid}}
735
+ {{! @glint-expect-error - the vendored Canvas bundle declares no element type }}
736
+ aria-label={{@label}}
737
+ aria-describedby={{this.describedBy}}
738
+ as |store|
739
+ >
740
+ {{#if this.showBackground}}
741
+ <Background
742
+ @variant={{this.pattern}}
743
+ @gap={{this.gap}}
744
+ @size={{this.patternSize}}
745
+ @patternColor='var(--pretui-canvas-grid-ink, color-mix(in oklch, var(--foreground) 22%, transparent))'
746
+ />
747
+ {{/if}}
748
+
749
+ {{#if (has-block 'toolbar')}}
750
+ <Panel @position='top-left'>
751
+ <div class='pnv-bar'>{{yield to='toolbar'}}</div>
752
+ </Panel>
753
+ {{/if}}
754
+
755
+ {{#if (has-block 'legend')}}
756
+ <Panel @position='top-right'>
757
+ <div class='pnv-bar'>{{yield to='legend'}}</div>
758
+ </Panel>
759
+ {{/if}}
760
+
761
+ {{#if this.showControls}}
762
+ <Controls
763
+ @position={{this.controlsPosition}}
764
+ @orientation={{this.controlsOrientation}}
765
+ />
766
+ {{/if}}
767
+
768
+ {{#if this.showMinimap}}
769
+ <MiniMap
770
+ @position={{this.minimapPosition}}
771
+ @ariaLabel={{this.minimapLabel}}
772
+ @bgColor='var(--pretui-canvas-minimap-bg, var(--card))'
773
+ @maskColor='var(--pretui-canvas-minimap-mask, color-mix(in oklch, var(--muted) 78%, transparent))'
774
+ @nodeColor='var(--pretui-canvas-minimap-node, color-mix(in oklch, var(--foreground) 24%, var(--card)))'
775
+ />
776
+ {{/if}}
777
+
778
+ {{yield store this.api}}
779
+ </Canvas>
780
+
781
+ {{#if this.isEmpty}}
782
+ <div class='pnv-empty'>
783
+ {{#if (has-block 'empty')}}
784
+ {{yield to='empty'}}
785
+ {{else}}
786
+ <p class='pnv-empty-line'>No nodes to draw.</p>
787
+ {{/if}}
788
+ </div>
789
+ {{/if}}
790
+
791
+ {{!-- The graph as text. GraphOutline is a separate module — see its
792
+ header for why — and it is the ONLY route to a node, an edge or
793
+ a new connection that does not require a pointer. --}}
794
+ {{#if this.showSummary}}
795
+ <GraphOutline
796
+ @outlineId={{this.summaryId}}
797
+ @nodes={{this.nodes}}
798
+ @edges={{this.edges}}
799
+ @label={{@label}}
800
+ @mode={{this.outlineMode}}
801
+ @activeId={{this.activeId}}
802
+ @onSelect={{this.focusNode}}
803
+ @onConnect={{this.connectAction}}
804
+ @onRelayout={{this.relayoutAction}}
805
+ data-test-pretui-node-canvas-summary
806
+ />
807
+ {{/if}}
808
+ </div>
809
+
810
+ <style scoped>
811
+ @layer PretComponent {
812
+ /* Every colour the engine reads lives in its `--xy-*` channel, so
813
+ the whole re-skin happens here — inherited into the engine's
814
+ subtree, no selector ever reaching into its markup. Each one is
815
+ fronted by a `--pretui-canvas-*` knob so a consumer can retune a
816
+ single part without forking. */
817
+ .pretui-node-canvas {
818
+ position: relative;
819
+ height: var(--pretui-canvas-height, 26rem);
820
+ min-height: var(--pretui-canvas-min-height, 12rem);
821
+ border-radius: var(--pretui-canvas-radius, var(--radius-surface, 10px));
822
+ overflow: hidden;
823
+ background: var(--pretui-canvas-bg, var(--card));
824
+ font-family: var(--font-sans);
825
+ /* Law 1 — the frame is a hairline plus a shadow, one property. */
826
+ box-shadow: var(
827
+ --pretui-canvas-shadow,
828
+ var(--pretui-shadow-card, 0 0 0 1px var(--border), 0 1px 2px
829
+ rgb(0 0 0 / 0.12))
830
+ );
831
+
832
+ --xy-background-color: transparent;
833
+ --xy-background-pattern-color: var(
834
+ --pretui-canvas-grid-ink,
835
+ color-mix(in oklch, var(--foreground) 22%, transparent)
836
+ );
837
+
838
+ --xy-edge-stroke: var(
839
+ --pretui-canvas-edge,
840
+ color-mix(in oklch, var(--foreground) 34%, transparent)
841
+ );
842
+ --xy-edge-stroke-width: var(--pretui-canvas-edge-width, 1.5);
843
+ --xy-edge-stroke-selected: var(
844
+ --pretui-canvas-edge-selected,
845
+ var(--primary)
846
+ );
847
+ --xy-edge-label-background-color: var(--card);
848
+ --xy-edge-label-color: var(--card-foreground);
849
+
850
+ --xy-connectionline-stroke: var(
851
+ --pretui-canvas-edge-selected,
852
+ var(--primary)
853
+ );
854
+ --xy-connectionline-stroke-width: 1.5;
855
+
856
+ --xy-handle-background-color: var(
857
+ --pretui-handle-bg,
858
+ var(--card)
859
+ );
860
+ --xy-handle-border-color: var(
861
+ --pretui-handle-border,
862
+ color-mix(in oklch, var(--foreground) 40%, transparent)
863
+ );
864
+
865
+ /* the stock node treatment, in case a caller mixes in an
866
+ untyped engine node alongside Pretui ones */
867
+ --xy-node-background-color: var(--card);
868
+ --xy-node-color: var(--card-foreground);
869
+ --xy-node-border: none;
870
+ --xy-node-border-selected: none;
871
+ --xy-node-border-radius: var(
872
+ --pretui-node-radius,
873
+ var(--radius-surface, 10px)
874
+ );
875
+ --xy-node-boxshadow-hover: 0 0 0 1px var(--border),
876
+ 0 2px 8px rgb(0 0 0 / 0.12);
877
+ --xy-node-boxshadow-selected: 0 0 0 1px var(--primary),
878
+ 0 0 0 4px color-mix(in oklch, var(--primary) 18%, transparent);
879
+
880
+ --xy-selection-background-color: color-mix(
881
+ in oklch,
882
+ var(--primary) 10%,
883
+ transparent
884
+ );
885
+ --xy-selection-border: 1px dashed
886
+ color-mix(in oklch, var(--primary) 55%, transparent);
887
+
888
+ --xy-controls-box-shadow: var(
889
+ --pretui-canvas-chrome-shadow,
890
+ 0 0 0 1px var(--border),
891
+ 0 1px 2px rgb(0 0 0 / 0.12)
892
+ );
893
+ --xy-controls-button-background-color: var(--card);
894
+ --xy-controls-button-background-color-hover: var(--muted);
895
+ --xy-controls-button-border-color: var(--border);
896
+ --xy-controls-button-color: var(--muted-foreground);
897
+ --xy-controls-button-color-hover: var(--foreground);
898
+
899
+ --xy-minimap-background-color: var(--card);
900
+ --xy-minimap-mask-background-color: color-mix(
901
+ in oklch,
902
+ var(--muted) 78%,
903
+ transparent
904
+ );
905
+ --xy-minimap-node-background-color: color-mix(
906
+ in oklch,
907
+ var(--foreground) 24%,
908
+ var(--card)
909
+ );
910
+
911
+ --xy-attribution-background-color: transparent;
912
+ }
913
+
914
+ /* Floating Panel contents — the toolbar and legend slots. Pretui
915
+ cloth on a surface the engine only positions. */
916
+ .pnv-bar {
917
+ display: flex;
918
+ align-items: center;
919
+ gap: var(--space-3, 8px);
920
+ padding: var(--space-2, 5px) var(--space-3, 8px);
921
+ border-radius: var(--pretui-canvas-chrome-radius, 8px);
922
+ background: var(--pretui-canvas-panel-bg, var(--card));
923
+ color: var(--card-foreground);
924
+ font-size: var(--text-ui-sm, 11.5px);
925
+ box-shadow: var(
926
+ --pretui-canvas-chrome-shadow,
927
+ 0 0 0 1px var(--border),
928
+ 0 1px 2px rgb(0 0 0 / 0.12)
929
+ );
930
+ }
931
+
932
+ .pnv-empty {
933
+ position: absolute;
934
+ inset: 0;
935
+ display: grid;
936
+ place-items: center;
937
+ pointer-events: none;
938
+ padding: var(--space-6, 18px);
939
+ text-align: center;
940
+ }
941
+
942
+ .pnv-empty-line {
943
+ margin: 0;
944
+ font-size: var(--text-ui-md, 12.5px);
945
+ color: var(--muted-foreground);
946
+ }
947
+
948
+ /* The text mirror lives in GraphOutline now, which owns its own
949
+ scoped CSS (scoped CSS does not cross a component boundary). All
950
+ that stays here is the KNOB the skin sheet reads to lift the
951
+ engine's bottom-corner panels clear of the strip. */
952
+ }
953
+ </style>
954
+ </template>
955
+ }
956
+
957
+ /** Node name for the text summary and for the engine's per-node aria-label. */
958
+ function nameOf(node: CanvasNode): string {
959
+ let data = node.data ?? {};
960
+ return (
961
+ node.ariaLabel ??
962
+ data.title ??
963
+ (typeof data.label === 'string' ? data.label : undefined) ??
964
+ node.id
965
+ );
966
+ }
967
+
968
+ /**
969
+ * Point every node at Pretui's node shell, pin the handle sides so the
970
+ * engine's edge geometry lands on the handles the shell actually draws,
971
+ * and give the node a screen-reader name. The engine's own fallback name
972
+ * is the raw node id, which is meaningless out loud; this fills it from
973
+ * the data before the id is ever reached. `data` is defaulted because the
974
+ * engine's stock label getter reads `node.data['label']` unguarded.
975
+ */
976
+ function decorate(
977
+ nodes: CanvasNode[],
978
+ flow: CanvasFlow,
979
+ placements?: Map<string, { x: number; y: number }>,
980
+ sidesOverride?: { source: CanvasNode['sourcePosition']; target: CanvasNode['targetPosition'] },
981
+ ): CanvasNode[] {
982
+ let sides = sidesOverride ?? FLOW_SIDES[flow] ?? FLOW_SIDES.horizontal;
983
+ return nodes.map((node) => {
984
+ let placed = placements?.get(node.id);
985
+ return {
986
+ ...node,
987
+ type: node.type ?? 'pretui',
988
+ data: node.data ?? {},
989
+ position: placed ?? node.position,
990
+ sourcePosition: node.sourcePosition ?? sides.source,
991
+ targetPosition: node.targetPosition ?? sides.target,
992
+ ariaLabel: nameOf(node),
993
+ };
994
+ });
995
+ }
996
+
997
+ // ── Auto-layout plumbing ─────────────────────────────────────────────────
998
+ // `graphLayout` is a pure function; everything below is only about keeping
999
+ // its result IDENTITY-STABLE. The engine warns (error002) when the node
1000
+ // array is a fresh object on every read, and Glimmer does not cache
1001
+ // getters, so the memo lives in module-level WeakMaps keyed on the caller's
1002
+ // own arrays. A getter can therefore read it without writing to `this`
1003
+ // (ember/no-side-effects).
1004
+
1005
+ /** The subset of the args that changes a layout. */
1006
+ export interface CanvasLayoutOptions {
1007
+ direction?: GraphDirection;
1008
+ rankGap?: number;
1009
+ nodeGap?: number;
1010
+ nodeWidth?: number;
1011
+ nodeHeight?: number;
1012
+ }
1013
+
1014
+ function layoutOptionsFrom(args: {
1015
+ autoLayout?: GraphDirection;
1016
+ rankGap?: number;
1017
+ nodeGap?: number;
1018
+ layoutNodeWidth?: number;
1019
+ layoutNodeHeight?: number;
1020
+ }): CanvasLayoutOptions {
1021
+ return {
1022
+ direction: args.autoLayout,
1023
+ rankGap: args.rankGap,
1024
+ nodeGap: args.nodeGap,
1025
+ nodeWidth: args.layoutNodeWidth,
1026
+ nodeHeight: args.layoutNodeHeight,
1027
+ };
1028
+ }
1029
+
1030
+ function layoutKey(options: CanvasLayoutOptions): string {
1031
+ return [
1032
+ options.direction ?? '-',
1033
+ options.rankGap ?? '-',
1034
+ options.nodeGap ?? '-',
1035
+ options.nodeWidth ?? '-',
1036
+ options.nodeHeight ?? '-',
1037
+ ].join('|');
1038
+ }
1039
+
1040
+ const NO_LAYOUT: { result: GraphLayoutResult | undefined } = {
1041
+ result: undefined,
1042
+ };
1043
+
1044
+ const LAYOUT_CACHE = new WeakMap<
1045
+ object,
1046
+ WeakMap<object, Map<string, { result: GraphLayoutResult | undefined }>>
1047
+ >();
1048
+
1049
+ function layoutCached(
1050
+ nodes: CanvasNode[],
1051
+ edges: CanvasEdge[],
1052
+ options: CanvasLayoutOptions,
1053
+ ): { result: GraphLayoutResult | undefined } {
1054
+ if (!options.direction) {
1055
+ return NO_LAYOUT;
1056
+ }
1057
+ let byEdges = LAYOUT_CACHE.get(nodes as unknown as object);
1058
+ if (!byEdges) {
1059
+ byEdges = new WeakMap();
1060
+ LAYOUT_CACHE.set(nodes as unknown as object, byEdges);
1061
+ }
1062
+ let byKey = byEdges.get(edges as unknown as object);
1063
+ if (!byKey) {
1064
+ byKey = new Map();
1065
+ byEdges.set(edges as unknown as object, byKey);
1066
+ }
1067
+ let key = layoutKey(options);
1068
+ let hit = byKey.get(key);
1069
+ if (!hit) {
1070
+ hit = {
1071
+ result: graphLayout(nodes, edges, {
1072
+ direction: options.direction,
1073
+ rankGap: options.rankGap,
1074
+ nodeGap: options.nodeGap,
1075
+ nodeWidth: options.nodeWidth,
1076
+ nodeHeight: options.nodeHeight,
1077
+ }),
1078
+ };
1079
+ byKey.set(key, hit);
1080
+ }
1081
+ return hit;
1082
+ }
1083
+
1084
+ /** Decorate, and place from the layout when `@autoLayout` is on. */
1085
+ function place(
1086
+ nodes: CanvasNode[],
1087
+ edges: CanvasEdge[],
1088
+ flow: CanvasFlow,
1089
+ options: CanvasLayoutOptions,
1090
+ ): CanvasNode[] {
1091
+ let laid = layoutCached(nodes, edges, options).result;
1092
+ if (!laid || !options.direction) {
1093
+ return decorate(nodes, flow);
1094
+ }
1095
+ let positions = new Map<string, { x: number; y: number }>();
1096
+ for (let placement of laid.placements) {
1097
+ positions.set(placement.id, { x: placement.x, y: placement.y });
1098
+ }
1099
+ return decorate(nodes, flow, positions, handleSidesFor(options.direction));
1100
+ }
1101
+
1102
+ /** The uncontrolled canvas's one-time seed. Never shared with the memo. */
1103
+ function seed(
1104
+ nodes: CanvasNode[],
1105
+ edges: CanvasEdge[],
1106
+ flow: CanvasFlow,
1107
+ options: CanvasLayoutOptions,
1108
+ ): CanvasNode[] {
1109
+ return place(nodes, edges, flow, options);
1110
+ }
1111
+
1112
+ // Keyed on (flow, nodes identity, edges identity, option string). The edges
1113
+ // arm matters: adding one edge replaces the edges array and nothing else,
1114
+ // and a layout that ignored it would keep drawing the previous shape.
1115
+ const PLACED_CACHE: Record<
1116
+ CanvasFlow,
1117
+ WeakMap<object, WeakMap<object, Map<string, CanvasNode[]>>>
1118
+ > = {
1119
+ horizontal: new WeakMap(),
1120
+ vertical: new WeakMap(),
1121
+ };
1122
+
1123
+ function placedCached(
1124
+ nodes: CanvasNode[],
1125
+ edges: CanvasEdge[],
1126
+ flow: CanvasFlow,
1127
+ options: CanvasLayoutOptions,
1128
+ ): CanvasNode[] {
1129
+ let cache = PLACED_CACHE[flow] ?? PLACED_CACHE.horizontal;
1130
+ let byEdges = cache.get(nodes as unknown as object);
1131
+ if (!byEdges) {
1132
+ byEdges = new WeakMap();
1133
+ cache.set(nodes as unknown as object, byEdges);
1134
+ }
1135
+ let byKey = byEdges.get(edges as unknown as object);
1136
+ if (!byKey) {
1137
+ byKey = new Map();
1138
+ byEdges.set(edges as unknown as object, byKey);
1139
+ }
1140
+ let key = layoutKey(options);
1141
+ let hit = byKey.get(key);
1142
+ if (!hit) {
1143
+ hit = place(nodes, edges, flow, options);
1144
+ byKey.set(key, hit);
1145
+ }
1146
+ return hit;
1147
+ }
1148
+
1149
+ const NO_EXTRA_TYPES: Record<string, unknown> = {};
1150
+ const TYPES_CACHE = new WeakMap<
1151
+ object,
1152
+ WeakMap<object, Record<string, unknown>>
1153
+ >();
1154
+
1155
+ function nodeTypesFor(
1156
+ body: NodeBodyComponent | undefined,
1157
+ extra: Record<string, unknown> | undefined,
1158
+ ): Record<string, unknown> {
1159
+ let shell = shellFor(
1160
+ body ?? (NodeCard as unknown as NodeBodyComponent),
1161
+ ) as object;
1162
+ let byExtra = TYPES_CACHE.get(shell);
1163
+ if (!byExtra) {
1164
+ byExtra = new WeakMap();
1165
+ TYPES_CACHE.set(shell, byExtra);
1166
+ }
1167
+ let key = (extra ?? NO_EXTRA_TYPES) as object;
1168
+ let hit = byExtra.get(key);
1169
+ if (!hit) {
1170
+ hit = { pretui: shell, ...(extra ?? {}) };
1171
+ byExtra.set(key, hit);
1172
+ }
1173
+ return hit;
1174
+ }