@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,1200 @@
1
+ // Pretui — Menubar: the application menu bar (File / Edit / View).
2
+ //
3
+ // ── Why this is not a `Menu` with a horizontal trigger row ───────────────
4
+ // `menu.gts` ships the WAI-ARIA **menu button** pattern: one trigger, one
5
+ // dropdown, Up/Down between siblings, Right to *enter* a submenu. A menubar
6
+ // is a different APG pattern with a different axis and a different focus
7
+ // story, and the differences are behavioural rather than visual:
8
+ //
9
+ // * **The axis flips.** Left/Right move between top-level items; Down opens.
10
+ // * **One tab stop for the whole bar**, always. A menu button has a trigger
11
+ // that is part of the page's ordinary tab order; a menubar is a composite,
12
+ // so Tab leaves it rather than walking it.
13
+ // * **Left/Right stay live while a menu is open** — they close it, step to
14
+ // the adjacent top-level item and open THAT one, with focus landing back
15
+ // on the bar. This single behaviour is what makes a real application menu
16
+ // bar feel like one, and it has no counterpart in a dropdown.
17
+ // * **Hover is asymmetric.** Before anything is open, hovering a top-level
18
+ // item does nothing at all; once the bar is "active" hovering another item
19
+ // switches to it *immediately*, with no dwell delay. A menubar that opened
20
+ // on hover would fire every time the pointer crossed the top of a window;
21
+ // one that kept a dwell delay after opening would feel broken.
22
+ //
23
+ // Everything the two patterns AGREE about is shared rather than re-written:
24
+ // the `MenuNode` taxonomy, the row model, the panel markup and its whole
25
+ // stylesheet (`MenuPanel`), the shortcut faces, the safe triangle, the roving
26
+ // tabindex, the owned timers and the type-ahead buffer. A command object
27
+ // written for `Menu` renders unchanged in `Menubar` and in `CommandPalette`.
28
+ //
29
+ // ── Ported, not vendored: accessible-menu 4.4.0 (ISC, Nick Milton) ───────
30
+ // `src/menubar.js` + `src/_baseMenu.js` are the specification this follows —
31
+ // specifically their keyup state machine and the edge cases inside it (the
32
+ // "previous child was open" carry rule on Left/Right, `preview()` vs `open()`
33
+ // as two different things, and `hoverType: 'dynamic'`'s `hasOpened` gate,
34
+ // which is the hover asymmetry above). The library itself is not usable here:
35
+ // it attaches to *existing* DOM and mutates it, which fights Glimmer for
36
+ // ownership of every element it touches; and it would be a second menu engine
37
+ // beside the one `menu.gts` already is. Taking the state machine as a spec
38
+ // costs nothing and keeps one engine.
39
+ //
40
+ // Deviations from the reference, with reasons, are in `menubarKey` below.
41
+ //
42
+ // Realm laws observed: no `Date.now()`/`Math.random()`; every `setTimeout`
43
+ // belongs to an `OwnedTimers` set an `ember-modifier` adopts and releases, and
44
+ // no timer re-arms itself; element references are plain untracked fields
45
+ // written from modifier bodies, never `@tracked` (a tracked property read and
46
+ // written in one computation is a backtracking re-render).
47
+ import Component from '@glimmer/component';
48
+ import { tracked } from '@glimmer/tracking';
49
+ import { guidFor } from '@ember/object/internals';
50
+ // type-only gap: 'ember-modifier' resolves at realm runtime; glint can't see
51
+ // it here (accepted parse baseline, same as menu.gts / focus.gts)
52
+ import { modifier } from 'ember-modifier';
53
+ import type { PopupPlacement } from '../internal/overlay';
54
+ import { MenuPanel } from './menu-panel';
55
+ import { buildMenuLevel, detectShortcutPlatform } from '../internal/menu';
56
+ import type { LeafNode, MenuEntry, MenuLevel, MenuRow, ShortcutPlatform, SubmenuNode } from '../internal/menu';
57
+ import {
58
+ OwnedTimers,
59
+ PointerTrack,
60
+ TypeaheadBuffer,
61
+ focusWhen,
62
+ listen,
63
+ listenDocument,
64
+ listenDocumentCapture,
65
+ ownsTimers,
66
+ rovingTabindex,
67
+ tracksPointer,
68
+ typeaheadIndex,
69
+ } from '../focus';
70
+ import type { SafeEdge } from '../focus';
71
+
72
+ // ── The keyboard state machine, as pure functions ────────────────────────
73
+ //
74
+ // This is where menubar implementations go wrong, so it is written as data in
75
+ // and data out: no DOM, no component, no timers. Given (where focus is, what
76
+ // is open, which key) it returns (where focus goes, what is open, what the
77
+ // component must do). `menubar.test.gts` drives the whole transition table
78
+ // through it, which is both faster and far more searching than clicking a
79
+ // rendered bar — and it cannot hang.
80
+
81
+ /** Where keyboard focus lives. */
82
+ export type BarWhere = 'bar' | 'menu';
83
+
84
+ export interface BarState {
85
+ /** index of the top-level item holding the bar's single tab stop */
86
+ index: number;
87
+ /** index of the top-level item whose menu is displayed, or -1 for none.
88
+ * Note `open` may be set while `where` is still `'bar'`: that is the
89
+ * "preview" state a menu bar spends most of its open life in — the menu is
90
+ * down, focus is still on its title. accessible-menu models it as
91
+ * `preview()` vs `open()`; conflating the two is the usual bug. */
92
+ open: number;
93
+ where: BarWhere;
94
+ /** depth of the focused row: 0 on the bar, 1 in a top-level item's own
95
+ * menu, 2+ inside a nested submenu */
96
+ depth: number;
97
+ }
98
+
99
+ export interface BarContext {
100
+ /** number of top-level items */
101
+ count: number;
102
+ /** whether top-level item `index` opens a menu AND is not disabled */
103
+ hasMenu: (index: number) => boolean;
104
+ /** whether the row focused inside a menu opens a submenu of its own.
105
+ * Consulted only when `where === 'menu'`. */
106
+ rowHasMenu: boolean;
107
+ }
108
+
109
+ export type BarEffect =
110
+ /** the state is the whole answer */
111
+ | 'none'
112
+ /** move focus into item `index`'s menu, first row */
113
+ | 'enterFirst'
114
+ /** ... last row */
115
+ | 'enterLast'
116
+ /** open the focused row's own submenu and focus its first row */
117
+ | 'openRow'
118
+ /** pop one submenu level, focus the parent row */
119
+ | 'closeLevel'
120
+ /** activate the focused row, then close */
121
+ | 'activate'
122
+ /** close everything and let focus leave the bar */
123
+ | 'leave';
124
+
125
+ export interface BarResult {
126
+ state: BarState;
127
+ /** the component should `preventDefault` */
128
+ handled: boolean;
129
+ effect: BarEffect;
130
+ /** the key belongs to the LEVEL machine (sibling arrows, Home/End inside a
131
+ * panel, type-ahead) rather than to the bar */
132
+ inner: boolean;
133
+ }
134
+
135
+ function ignored(state: BarState): BarResult {
136
+ return { state, handled: false, effect: 'none', inner: false };
137
+ }
138
+ function inner(state: BarState): BarResult {
139
+ return { state, handled: false, effect: 'none', inner: true };
140
+ }
141
+
142
+ /**
143
+ * Move the bar's focus to `next`, carrying openness.
144
+ *
145
+ * The carry rule IS the menubar: once any menu is displayed, stepping along
146
+ * the bar keeps a menu displayed, so File → Edit → View reads as one
147
+ * continuous surface rather than as three separate openings. When nothing is
148
+ * open, stepping along the bar opens nothing. A landing item with no menu of
149
+ * its own closes whatever was open, exactly as accessible-menu's
150
+ * `closeChildren()` branch does.
151
+ */
152
+ export function barCarry(
153
+ state: BarState,
154
+ next: number,
155
+ ctx: BarContext,
156
+ ): BarState {
157
+ let active = state.open >= 0 || state.where === 'menu';
158
+ return {
159
+ index: next,
160
+ open: active && ctx.hasMenu(next) ? next : -1,
161
+ where: 'bar',
162
+ depth: 0,
163
+ };
164
+ }
165
+
166
+ /**
167
+ * The whole menubar keyboard contract.
168
+ *
169
+ * Deviations from accessible-menu 4.4.0, each deliberate:
170
+ *
171
+ * 1. **Escape inside a NESTED submenu closes one level**, not the whole tree.
172
+ * The reference calls `rootMenu.closeChildren()` from any depth, which
173
+ * throws away every level at once. APG's rule is "closes submenu, moves
174
+ * focus to parent menu item", and one-level-per-Escape is also what
175
+ * `Menu` already does — so Escape means the same thing everywhere in the
176
+ * kit. At depth 1 the two agree exactly: the menu closes and focus
177
+ * returns to its top-level item, staying in the bar.
178
+ * 2. **Type-ahead wraps.** The reference searches forward from the current
179
+ * item and stops at the end of the list, so typing "f" while on the last
180
+ * item finds nothing. `typeaheadIndex` wraps and supports a multi-character
181
+ * buffer, which is the APG behaviour and is already shared with `Menu`,
182
+ * `Tree` and the palette.
183
+ * 3. **No `requestAnimationFrame` before focusing a submenu's first row.**
184
+ * The reference defers focus a frame so the panel is visually open first.
185
+ * Here the panel and the focus target render in the same Glimmer pass, and
186
+ * an unowned rAF is a realm-law violation besides.
187
+ * 4. **A disabled top-level item has no menu** (`ctx.hasMenu` returns false),
188
+ * so Down/Enter do nothing on it and the carry rule closes rather than
189
+ * opens. It stays focusable and announced — `aria-disabled`, never the
190
+ * `disabled` attribute.
191
+ */
192
+ export function menubarKey(
193
+ state: BarState,
194
+ key: string,
195
+ ctx: BarContext,
196
+ ): BarResult {
197
+ let count = ctx.count;
198
+ if (count <= 0) {
199
+ return ignored(state);
200
+ }
201
+ let onBar = state.where === 'bar';
202
+
203
+ if (key === 'Tab') {
204
+ // Tab is never preventDefault'ed: the bar closes and the browser's own
205
+ // tab order continues from wherever focus already is.
206
+ return {
207
+ state: { index: state.index, open: -1, where: 'bar', depth: 0 },
208
+ handled: false,
209
+ effect: 'leave',
210
+ inner: false,
211
+ };
212
+ }
213
+
214
+ if (key === 'ArrowRight' || key === 'ArrowLeft' || key === 'Home' || key === 'End') {
215
+ if (onBar) {
216
+ let next =
217
+ key === 'ArrowRight'
218
+ ? (state.index + 1) % count
219
+ : key === 'ArrowLeft'
220
+ ? (state.index - 1 + count) % count
221
+ : key === 'Home'
222
+ ? 0
223
+ : count - 1;
224
+ return {
225
+ state: barCarry(state, next, ctx),
226
+ handled: true,
227
+ effect: 'none',
228
+ inner: false,
229
+ };
230
+ }
231
+ // Inside a menu, Home/End belong to the level, not to the bar.
232
+ if (key === 'Home' || key === 'End') {
233
+ return inner(state);
234
+ }
235
+ if (key === 'ArrowRight') {
236
+ if (ctx.rowHasMenu) {
237
+ return {
238
+ state: { ...state, depth: state.depth + 1 },
239
+ handled: true,
240
+ effect: 'openRow',
241
+ inner: false,
242
+ };
243
+ }
244
+ // A leaf: Right leaves the menu tree entirely, steps to the next
245
+ // top-level item and opens it — with focus back on the bar.
246
+ return {
247
+ state: barCarry(state, (state.index + 1) % count, ctx),
248
+ handled: true,
249
+ effect: 'none',
250
+ inner: false,
251
+ };
252
+ }
253
+ // ArrowLeft
254
+ if (state.depth > 1) {
255
+ // A nested level closes just itself; the bar does not move.
256
+ return {
257
+ state: { ...state, depth: state.depth - 1 },
258
+ handled: true,
259
+ effect: 'closeLevel',
260
+ inner: false,
261
+ };
262
+ }
263
+ return {
264
+ state: barCarry(state, (state.index - 1 + count) % count, ctx),
265
+ handled: true,
266
+ effect: 'none',
267
+ inner: false,
268
+ };
269
+ }
270
+
271
+ if (key === 'ArrowDown' || key === 'ArrowUp') {
272
+ if (!onBar) {
273
+ // sibling movement within the open level
274
+ return inner(state);
275
+ }
276
+ if (!ctx.hasMenu(state.index)) {
277
+ return ignored(state);
278
+ }
279
+ return {
280
+ state: { index: state.index, open: state.index, where: 'menu', depth: 1 },
281
+ handled: true,
282
+ // Down lands on the first item, Up on the last — the one place the two
283
+ // vertical arrows do different things rather than mirroring.
284
+ effect: key === 'ArrowDown' ? 'enterFirst' : 'enterLast',
285
+ inner: false,
286
+ };
287
+ }
288
+
289
+ if (key === 'Enter' || key === ' ') {
290
+ if (onBar) {
291
+ if (ctx.hasMenu(state.index)) {
292
+ return {
293
+ state: {
294
+ index: state.index,
295
+ open: state.index,
296
+ where: 'menu',
297
+ depth: 1,
298
+ },
299
+ handled: true,
300
+ effect: 'enterFirst',
301
+ inner: false,
302
+ };
303
+ }
304
+ return { state, handled: true, effect: 'activate', inner: false };
305
+ }
306
+ if (ctx.rowHasMenu) {
307
+ return {
308
+ state: { ...state, depth: state.depth + 1 },
309
+ handled: true,
310
+ effect: 'openRow',
311
+ inner: false,
312
+ };
313
+ }
314
+ return {
315
+ state: { index: state.index, open: -1, where: 'bar', depth: 0 },
316
+ handled: true,
317
+ effect: 'activate',
318
+ inner: false,
319
+ };
320
+ }
321
+
322
+ if (key === 'Escape') {
323
+ if (onBar) {
324
+ if (state.open < 0) {
325
+ // Nothing is open: Escape is not the bar's to take, so a host surface
326
+ // that listens for it still hears it.
327
+ return ignored(state);
328
+ }
329
+ return {
330
+ state: { ...state, open: -1 },
331
+ handled: true,
332
+ effect: 'none',
333
+ inner: false,
334
+ };
335
+ }
336
+ if (state.depth > 1) {
337
+ return {
338
+ state: { ...state, depth: state.depth - 1 },
339
+ handled: true,
340
+ effect: 'closeLevel',
341
+ inner: false,
342
+ };
343
+ }
344
+ return {
345
+ state: { index: state.index, open: -1, where: 'bar', depth: 0 },
346
+ handled: true,
347
+ effect: 'none',
348
+ inner: false,
349
+ };
350
+ }
351
+
352
+ // Everything else — letters included — is the caller's type-ahead.
353
+ return ignored(state);
354
+ }
355
+
356
+ // ── The component ────────────────────────────────────────────────────────
357
+
358
+ export interface MenubarSignature {
359
+ Args: {
360
+ /** the bar's contents. Exactly `Menu`'s arg type: a `SubmenuNode` becomes
361
+ * a File/Edit/View menu, a `CommandNode` becomes a bare command in the
362
+ * bar (a "Help" that acts on click). Sections and `'---'` carry no
363
+ * meaning at the top level of a bar and contribute no items. */
364
+ items: MenuEntry[];
365
+ /** accessible name for the bar (default 'Main menu'). A page with more
366
+ * than one menubar needs these to differ. */
367
+ label?: string;
368
+ /** fires after any item activates, alongside the node's own onSelect */
369
+ onSelect?: (node: LeafNode) => void;
370
+ /** ms of hover before a NESTED submenu opens (default 110). Top-level
371
+ * switching is never delayed — see `hoverBar`. */
372
+ hoverDelay?: number;
373
+ /** ms the safe triangle keeps deferring a sibling's hover (default 300) */
374
+ safeDelay?: number;
375
+ /** force the shortcut platform (docs pages use it) */
376
+ platform?: ShortcutPlatform;
377
+ };
378
+ Element: HTMLElement;
379
+ }
380
+
381
+ export class Menubar extends Component<MenubarSignature> {
382
+ private guid = guidFor(this);
383
+ private timers = new OwnedTimers();
384
+ private track = new PointerTrack();
385
+ private typeahead = new TypeaheadBuffer(this.timers);
386
+ private elements = new Map<string, HTMLElement>();
387
+ private barElements = new Map<number, HTMLElement>();
388
+ private hoverHandle: ReturnType<typeof setTimeout> | undefined;
389
+ private lastDeferStamp = -1;
390
+ /** the level the type-ahead buffer belongs to; changing level resets it */
391
+ private lastTypeLevel = -1;
392
+ /**
393
+ * True from the moment a menu first opens until the bar closes completely.
394
+ * The gate for the hover asymmetry: an inactive bar ignores hover entirely,
395
+ * an active one switches on it instantly. Deliberately NOT `@tracked` — it
396
+ * is read only from event handlers and never renders anything, and
397
+ * accessible-menu's `hasOpened` plays the same role.
398
+ */
399
+ private barActive = false;
400
+ // Untracked for the reason menu.gts documents: written from inside a
401
+ // modifier body and read from another modifier's arguments. A tracked
402
+ // property read and written in one computation is a backtracking
403
+ // re-render, which corrupts the renderer for the rest of the page.
404
+ private hostEl: HTMLElement | undefined;
405
+
406
+ @tracked private index = 0;
407
+ /** top-level index whose menu is displayed, or -1 */
408
+ @tracked private openIndex = -1;
409
+ /** keys of rows INSIDE the open menu whose own submenus are open */
410
+ @tracked private openPath: string[] = [];
411
+ /** the focused row's key, or undefined when focus is on the bar itself */
412
+ @tracked private focusKey: string | undefined;
413
+ /** true only while the keyboard or a hover is driving — `focusWhen` never
414
+ * steals focus on a plain re-render */
415
+ @tracked private navigating = false;
416
+ @tracked private altHeld = false;
417
+
418
+ get platform(): ShortcutPlatform {
419
+ return this.args.platform ?? detectShortcutPlatform();
420
+ }
421
+ get barLabel(): string {
422
+ return this.args.label ?? 'Main menu';
423
+ }
424
+ get isOpen(): boolean {
425
+ return this.openIndex >= 0;
426
+ }
427
+ private get hoverDelay(): number {
428
+ return this.args.hoverDelay ?? 110;
429
+ }
430
+ private get safeDelay(): number {
431
+ return this.args.safeDelay ?? 300;
432
+ }
433
+
434
+ // ── Levels ────────────────────────────────────────────────────────────
435
+
436
+ /** The bar itself, built by the SAME transform the panels use — so a
437
+ * top-level item gets the ellipsis convention, the platform shortcut face,
438
+ * the disabled rule and the icon lookup for free, and cannot drift from the
439
+ * rows below it. */
440
+ get topRows(): MenuRow[] {
441
+ return buildMenuLevel(this.args.items ?? [], {
442
+ depth: 0,
443
+ prefix: 'b',
444
+ label: this.barLabel,
445
+ guid: this.guid,
446
+ altHeld: this.altHeld,
447
+ platform: this.platform,
448
+ }).rows;
449
+ }
450
+
451
+ /** The open menu, plus one level per open nested submenu. `levels[i].depth`
452
+ * is `i + 1`: depth 0 is the bar. */
453
+ get levels(): MenuLevel[] {
454
+ let top = this.topRows[this.openIndex];
455
+ if (this.openIndex < 0 || !top || !top.hasSubmenu) {
456
+ return [];
457
+ }
458
+ let out: MenuLevel[] = [
459
+ buildMenuLevel((top.node as SubmenuNode).items ?? [], {
460
+ depth: 1,
461
+ prefix: 'm' + this.openIndex,
462
+ label: top.label,
463
+ guid: this.guid,
464
+ altHeld: this.altHeld,
465
+ platform: this.platform,
466
+ }),
467
+ ];
468
+ for (let i = 0; i < this.openPath.length; i++) {
469
+ let parentKey = this.openPath[i];
470
+ let parent = out[i]?.rows.find((row) => row.key === parentKey);
471
+ if (!parent || !parent.hasSubmenu) {
472
+ break;
473
+ }
474
+ out.push(
475
+ buildMenuLevel((parent.node as SubmenuNode).items ?? [], {
476
+ depth: i + 2,
477
+ prefix: parentKey,
478
+ label: parent.label,
479
+ parentKey,
480
+ guid: this.guid,
481
+ altHeld: this.altHeld,
482
+ platform: this.platform,
483
+ }),
484
+ );
485
+ }
486
+ return out;
487
+ }
488
+
489
+ private get focusLevel(): MenuLevel | undefined {
490
+ let key = this.focusKey;
491
+ if (!key) {
492
+ return undefined;
493
+ }
494
+ return this.levels.find((level) =>
495
+ level.rows.some((row) => row.key === key),
496
+ );
497
+ }
498
+
499
+ private get focusRow(): MenuRow | undefined {
500
+ return this.rowFor(this.focusKey);
501
+ }
502
+
503
+ private rowFor(key: string | undefined): MenuRow | undefined {
504
+ if (!key) {
505
+ return undefined;
506
+ }
507
+ for (let level of this.levels) {
508
+ let hit = level.rows.find((row) => row.key === key);
509
+ if (hit) {
510
+ return hit;
511
+ }
512
+ }
513
+ return undefined;
514
+ }
515
+
516
+ // ── Template predicates ───────────────────────────────────────────────
517
+
518
+ /** The single tab stop. When focus is inside a panel the focused ROW holds
519
+ * it, so the bar and its menus never present two tab stops at once. */
520
+ barIsTabStop = (i: number): boolean =>
521
+ i === this.index && this.focusKey === undefined;
522
+ barIsFocusTarget = (i: number): boolean =>
523
+ this.navigating && this.focusKey === undefined && i === this.index;
524
+ barIsActive = (i: number): boolean => i === this.index;
525
+ barIsOpen = (i: number): string | undefined => {
526
+ let row = this.topRows[i];
527
+ if (!row?.hasSubmenu) {
528
+ return undefined;
529
+ }
530
+ return this.openIndex === i ? 'true' : 'false';
531
+ };
532
+ barPopup = (i: number): string | undefined =>
533
+ this.topRows[i]?.hasSubmenu ? 'menu' : undefined;
534
+
535
+ anchorFor = (depth: number): HTMLElement | undefined =>
536
+ depth <= 1
537
+ ? this.barElements.get(this.openIndex)
538
+ : this.elements.get(this.openPath[depth - 2]);
539
+
540
+ placementFor = (depth: number): PopupPlacement =>
541
+ depth <= 1 ? 'bottom-start' : 'right-start';
542
+
543
+ distanceFor = (depth: number): number => (depth <= 1 ? 4 : 2);
544
+
545
+ itemFor = (key: string | undefined): HTMLElement | undefined =>
546
+ key ? this.elements.get(key) : undefined;
547
+
548
+ // ── Element registries (plain Maps; never tracked) ────────────────────
549
+
550
+ captureHost = modifier((el: HTMLElement) => {
551
+ this.hostEl = el;
552
+ });
553
+
554
+ captureBarItem = modifier((el: HTMLElement, [i]: [number]) => {
555
+ this.barElements.set(i, el);
556
+ return () => {
557
+ if (this.barElements.get(i) === el) {
558
+ this.barElements.delete(i);
559
+ }
560
+ };
561
+ });
562
+
563
+ onItemElement = (key: string, el: HTMLElement | undefined) => {
564
+ if (el) {
565
+ this.elements.set(key, el);
566
+ } else {
567
+ this.elements.delete(key);
568
+ }
569
+ };
570
+
571
+ onEdge = (edge: SafeEdge | undefined) => {
572
+ this.track.edge = edge;
573
+ };
574
+
575
+ // ── Open / close ──────────────────────────────────────────────────────
576
+
577
+ private closeAll() {
578
+ this.timers.cancel(this.hoverHandle);
579
+ this.hoverHandle = undefined;
580
+ this.openIndex = -1;
581
+ this.openPath = [];
582
+ this.focusKey = undefined;
583
+ this.altHeld = false;
584
+ this.barActive = false;
585
+ this.typeahead.reset();
586
+ this.lastTypeLevel = -1;
587
+ }
588
+
589
+ private openRowSubmenu(row: MenuRow, focusFirst: boolean) {
590
+ if (!row.hasSubmenu || row.disabled) {
591
+ return;
592
+ }
593
+ // a row at depth d is recorded at openPath[d - 1]
594
+ this.openPath = [...this.openPath.slice(0, row.depth - 1), row.key];
595
+ if (focusFirst) {
596
+ // levels[d] is the level at depth d + 1 — the row's own submenu
597
+ let child = this.levels[row.depth]?.rows[0];
598
+ if (child) {
599
+ this.focusKey = child.key;
600
+ this.navigating = true;
601
+ }
602
+ }
603
+ }
604
+
605
+ private moveTo(row: MenuRow | undefined) {
606
+ if (!row) {
607
+ return;
608
+ }
609
+ this.navigating = true;
610
+ this.focusKey = row.key;
611
+ // moving within a level closes anything deeper
612
+ this.openPath = this.openPath.slice(0, row.depth - 1);
613
+ }
614
+
615
+ private activateRow(row: MenuRow) {
616
+ if (row.disabled) {
617
+ return;
618
+ }
619
+ if (row.hasSubmenu) {
620
+ this.openRowSubmenu(row, true);
621
+ return;
622
+ }
623
+ this.fire(row.node);
624
+ this.closeAll();
625
+ // focus returns to the top-level item the command came from
626
+ this.navigating = true;
627
+ }
628
+
629
+ private fire(node: LeafNode) {
630
+ if (node.kind === 'toggle') {
631
+ // HIG: flipping a checkmark closes the menu, like any other command.
632
+ node.onChange?.(node.checked !== true);
633
+ }
634
+ node.onSelect?.();
635
+ this.args.onSelect?.(node);
636
+ }
637
+
638
+ // ── Applying a machine result ─────────────────────────────────────────
639
+
640
+ private get barState(): BarState {
641
+ return {
642
+ index: this.index,
643
+ open: this.openIndex,
644
+ where: this.focusKey === undefined ? 'bar' : 'menu',
645
+ depth: this.focusKey === undefined ? 0 : (this.focusLevel?.depth ?? 1),
646
+ };
647
+ }
648
+
649
+ private get ctx(): BarContext {
650
+ let rows = this.topRows;
651
+ let focused = this.focusRow;
652
+ return {
653
+ count: rows.length,
654
+ hasMenu: (i: number) => !!rows[i]?.hasSubmenu && !rows[i]?.disabled,
655
+ rowHasMenu: !!focused?.hasSubmenu && !focused?.disabled,
656
+ };
657
+ }
658
+
659
+ private apply(result: BarResult) {
660
+ let s = result.state;
661
+ this.navigating = true;
662
+
663
+ if (result.effect === 'leave') {
664
+ this.index = s.index;
665
+ this.closeAll();
666
+ // Tab must not be caught by `focusWhen` on the way out.
667
+ this.navigating = false;
668
+ return;
669
+ }
670
+ if (result.effect === 'activate') {
671
+ let row = this.focusRow;
672
+ let top = this.topRows[s.index];
673
+ // disabled rows are visible, focusable, announced — and inert: the key
674
+ // does nothing, as a click does nothing
675
+ if (row ? row.disabled : top?.disabled) {
676
+ return;
677
+ }
678
+ this.index = s.index;
679
+ this.closeAll();
680
+ this.navigating = true;
681
+ if (row) {
682
+ if (!row.disabled) {
683
+ this.fire(row.node);
684
+ }
685
+ } else if (top && !top.disabled && !top.hasSubmenu) {
686
+ this.fire(top.node);
687
+ }
688
+ return;
689
+ }
690
+ if (result.effect === 'openRow') {
691
+ let row = this.focusRow;
692
+ if (row) {
693
+ this.openRowSubmenu(row, true);
694
+ }
695
+ return;
696
+ }
697
+ if (result.effect === 'closeLevel') {
698
+ let parentKey = this.openPath[this.openPath.length - 1];
699
+ this.openPath = this.openPath.slice(0, -1);
700
+ this.focusKey = parentKey;
701
+ return;
702
+ }
703
+
704
+ // 'none' | 'enterFirst' | 'enterLast'
705
+ this.index = s.index;
706
+ this.openIndex = s.open;
707
+ this.openPath = [];
708
+ this.barActive = s.open >= 0 || s.where === 'menu';
709
+ if (s.where === 'bar') {
710
+ this.focusKey = undefined;
711
+ if (s.open < 0) {
712
+ this.timers.cancel(this.hoverHandle);
713
+ this.hoverHandle = undefined;
714
+ this.typeahead.reset();
715
+ }
716
+ } else {
717
+ let rows = this.levels[0]?.rows ?? [];
718
+ let target =
719
+ result.effect === 'enterLast' ? rows[rows.length - 1] : rows[0];
720
+ this.focusKey = target?.key;
721
+ }
722
+ }
723
+
724
+ // ── Keyboard ──────────────────────────────────────────────────────────
725
+
726
+ onKeydown = (event: Event) => {
727
+ let ev = event as KeyboardEvent;
728
+ if (ev.key === 'Escape') {
729
+ // owned by onEscapeCapture, so a host listening on capture cannot act
730
+ // on the same key first
731
+ return;
732
+ }
733
+ if (ev.ctrlKey || ev.metaKey) {
734
+ return;
735
+ }
736
+ let result = menubarKey(this.barState, ev.key, this.ctx);
737
+ if (result.inner) {
738
+ this.innerKey(ev);
739
+ return;
740
+ }
741
+ if (result.handled || result.effect !== 'none') {
742
+ if (result.handled) {
743
+ ev.preventDefault();
744
+ }
745
+ this.apply(result);
746
+ return;
747
+ }
748
+ if (!ev.altKey && ev.key.length === 1 && /\S/.test(ev.key)) {
749
+ this.typeaheadKey(ev);
750
+ }
751
+ };
752
+
753
+ /** Sibling movement and Home/End inside an open panel — identical to
754
+ * `Menu`'s, because inside a panel the two patterns agree completely. */
755
+ private innerKey(ev: KeyboardEvent) {
756
+ let level = this.focusLevel;
757
+ let rows = level?.rows ?? [];
758
+ if (!rows.length) {
759
+ return;
760
+ }
761
+ let index = rows.findIndex((row) => row.key === this.focusKey);
762
+ ev.preventDefault();
763
+ if (ev.key === 'ArrowDown') {
764
+ this.moveTo(rows[(index + 1 + rows.length) % rows.length]);
765
+ } else if (ev.key === 'ArrowUp') {
766
+ this.moveTo(rows[(index - 1 + rows.length) % rows.length]);
767
+ } else if (ev.key === 'Home') {
768
+ this.moveTo(rows[0]);
769
+ } else if (ev.key === 'End') {
770
+ this.moveTo(rows[rows.length - 1]);
771
+ }
772
+ }
773
+
774
+ /** Type-ahead at every level, with the buffer reset when the level changes:
775
+ * "pr" typed in File's menu must not still be in the buffer when the reader
776
+ * arrives in Edit's. */
777
+ private typeaheadKey(ev: KeyboardEvent) {
778
+ let level = this.focusLevel;
779
+ let levelId = this.focusKey === undefined ? 0 : (level?.depth ?? 0);
780
+ if (levelId !== this.lastTypeLevel) {
781
+ this.typeahead.reset();
782
+ this.lastTypeLevel = levelId;
783
+ }
784
+ let prefix = this.typeahead.push(ev.key);
785
+ if (this.focusKey === undefined) {
786
+ let rows = this.topRows;
787
+ if (!rows.length) {
788
+ return;
789
+ }
790
+ let hit = typeaheadIndex(
791
+ rows.map((row) => row.label),
792
+ prefix,
793
+ this.index,
794
+ this.typeahead.isCycling,
795
+ );
796
+ if (hit >= 0) {
797
+ ev.preventDefault();
798
+ this.apply({
799
+ state: barCarry(this.barState, hit, this.ctx),
800
+ handled: true,
801
+ effect: 'none',
802
+ inner: false,
803
+ });
804
+ }
805
+ return;
806
+ }
807
+ let rows = level?.rows ?? [];
808
+ if (!rows.length) {
809
+ return;
810
+ }
811
+ let index = rows.findIndex((row) => row.key === this.focusKey);
812
+ let hit = typeaheadIndex(
813
+ rows.map((row) => row.label),
814
+ prefix,
815
+ index < 0 ? 0 : index,
816
+ this.typeahead.isCycling,
817
+ );
818
+ if (hit >= 0) {
819
+ ev.preventDefault();
820
+ this.moveTo(rows[hit]);
821
+ }
822
+ }
823
+
824
+ /**
825
+ * Escape, taken in the capture phase: an open bar owns the key outright and
826
+ * nothing else in the page sees it. Without capture, a host surface that
827
+ * listens for Escape on capture acts first and Escape means two things at
828
+ * once — the defect the boxel-catalog popover fork documents.
829
+ */
830
+ onEscapeCapture = (event: Event) => {
831
+ let ev = event as KeyboardEvent;
832
+ if (ev.key !== 'Escape' || !this.isOpen) {
833
+ return;
834
+ }
835
+ let result = menubarKey(this.barState, 'Escape', this.ctx);
836
+ if (!result.handled) {
837
+ return;
838
+ }
839
+ ev.preventDefault();
840
+ ev.stopPropagation();
841
+ this.apply(result);
842
+ };
843
+
844
+ // ── Pointer ───────────────────────────────────────────────────────────
845
+
846
+ private barIndexFromEvent(event: Event): number | undefined {
847
+ let target = event.target as HTMLElement | null;
848
+ let el = target?.closest('[data-bar-index]') as HTMLElement | null;
849
+ if (!el) {
850
+ return undefined;
851
+ }
852
+ let raw = Number(el.dataset.barIndex);
853
+ return Number.isInteger(raw) ? raw : undefined;
854
+ }
855
+
856
+ private rowFromEvent(event: Event): MenuRow | undefined {
857
+ let target = event.target as HTMLElement | null;
858
+ let el = target?.closest('[data-menu-key]') as HTMLElement | null;
859
+ return this.rowFor(el?.dataset.menuKey);
860
+ }
861
+
862
+ /**
863
+ * **The hover asymmetry.** Before the bar is active, hovering a top-level
864
+ * item does nothing — a menu bar that opened on hover would fire every time
865
+ * the pointer crossed the top of the window. Once a menu is open the reader
866
+ * has already declared intent, so switching is *immediate*: no dwell delay,
867
+ * no hover-intent timer. Both halves are the pattern; shipping only one is
868
+ * the usual mistake (accessible-menu's `hoverType: 'dynamic'` gated on
869
+ * `hasOpened` is the same rule).
870
+ *
871
+ * Hover moves REAL focus, not just the highlight, as the WAI-ARIA menu
872
+ * pattern says — and it must here, because switching top-level items tears
873
+ * down the panel any focused row lived in.
874
+ */
875
+ private hoverBar(i: number) {
876
+ this.timers.cancel(this.hoverHandle);
877
+ this.hoverHandle = undefined;
878
+ if (!this.barActive) {
879
+ return;
880
+ }
881
+ if (i === this.index && this.focusKey === undefined) {
882
+ return;
883
+ }
884
+ this.navigating = true;
885
+ this.index = i;
886
+ this.openIndex = this.ctx.hasMenu(i) ? i : -1;
887
+ // a title with no menu ends the bar's active state, as apply() does, so
888
+ // a later hover cannot reopen a menu the user thinks is closed
889
+ this.barActive = this.openIndex >= 0;
890
+ this.openPath = [];
891
+ this.focusKey = undefined;
892
+ this.typeahead.reset();
893
+ this.lastTypeLevel = -1;
894
+ }
895
+
896
+ /**
897
+ * Hover inside a panel, with the Amazon safe triangle in front of it —
898
+ * identical to `Menu`'s, and reusing the same pure geometry. While the
899
+ * pointer travels diagonally toward an open submenu's near edge, a sibling
900
+ * row it happens to cross must not take over the hover; one deferral per
901
+ * pointer move, so a cursor that comes to rest inside the triangle lets the
902
+ * sibling win rather than re-arming a timer forever.
903
+ */
904
+ private considerHover(row: MenuRow) {
905
+ this.timers.cancel(this.hoverHandle);
906
+ this.hoverHandle = undefined;
907
+ let openAtDepth = this.openPath[row.depth - 1];
908
+ let wouldCloseSubmenu = !!openAtDepth && openAtDepth !== row.key;
909
+ if (
910
+ wouldCloseSubmenu &&
911
+ this.track.travellingToSubmenu &&
912
+ this.track.stamp !== this.lastDeferStamp
913
+ ) {
914
+ this.lastDeferStamp = this.track.stamp;
915
+ this.hoverHandle = this.timers.after(this.safeDelay, () =>
916
+ this.considerHover(row),
917
+ );
918
+ return;
919
+ }
920
+ this.navigating = true;
921
+ this.focusKey = row.key;
922
+ this.openPath = this.openPath.slice(0, row.depth - 1);
923
+ if (row.hasSubmenu && !row.disabled) {
924
+ this.hoverHandle = this.timers.after(this.hoverDelay, () =>
925
+ this.openRowSubmenu(row, false),
926
+ );
927
+ }
928
+ }
929
+
930
+ onPointerOver = (event: Event) => {
931
+ let barIndex = this.barIndexFromEvent(event);
932
+ if (barIndex !== undefined) {
933
+ this.hoverBar(barIndex);
934
+ return;
935
+ }
936
+ let row = this.rowFromEvent(event);
937
+ if (!row || row.key === this.focusKey) {
938
+ return;
939
+ }
940
+ this.considerHover(row);
941
+ };
942
+
943
+ onClick = (event: Event) => {
944
+ let barIndex = this.barIndexFromEvent(event);
945
+ if (barIndex !== undefined) {
946
+ this.clickBar(barIndex);
947
+ return;
948
+ }
949
+ let row = this.rowFromEvent(event);
950
+ if (row) {
951
+ this.activateRow(row);
952
+ }
953
+ };
954
+
955
+ private clickBar(i: number) {
956
+ let row = this.topRows[i];
957
+ if (!row) {
958
+ return;
959
+ }
960
+ this.navigating = true;
961
+ this.index = i;
962
+ if (row.disabled) {
963
+ return;
964
+ }
965
+ if (!row.hasSubmenu) {
966
+ this.closeAll();
967
+ this.navigating = true;
968
+ this.fire(row.node);
969
+ return;
970
+ }
971
+ if (this.openIndex === i) {
972
+ // clicking the open title closes it, as every real menu bar does
973
+ this.closeAll();
974
+ this.navigating = true;
975
+ return;
976
+ }
977
+ this.openIndex = i;
978
+ this.openPath = [];
979
+ this.focusKey = undefined;
980
+ this.barActive = true;
981
+ this.typeahead.reset();
982
+ this.lastTypeLevel = -1;
983
+ }
984
+
985
+ onDocumentPointerDown = (event: Event) => {
986
+ if (!this.isOpen) {
987
+ return;
988
+ }
989
+ let target = event.target as Node | null;
990
+ if (target && this.hostEl?.contains(target)) {
991
+ return;
992
+ }
993
+ // ember-power-select renders its dropdown in a portal at document.body;
994
+ // treat that portal as logically inside, so choosing an option from a
995
+ // Select hosted in a menu does not dismiss the bar underneath it
996
+ let el = target instanceof Element ? target : null;
997
+ if (el?.closest('.ember-basic-dropdown-content')) {
998
+ return;
999
+ }
1000
+ this.navigating = false;
1001
+ this.closeAll();
1002
+ };
1003
+
1004
+ /** Option/Alt swaps dynamic items while held, at every level including the
1005
+ * bar. Watched on the document so a modifier press with the pointer outside
1006
+ * the panels still registers. */
1007
+ onAltDown = (event: Event) => {
1008
+ if ((event as KeyboardEvent).altKey && !this.altHeld) {
1009
+ this.altHeld = true;
1010
+ }
1011
+ };
1012
+ onAltUp = (event: Event) => {
1013
+ if (!(event as KeyboardEvent).altKey && this.altHeld) {
1014
+ this.altHeld = false;
1015
+ }
1016
+ };
1017
+
1018
+ <template>
1019
+ <div
1020
+ class='pretui-menubar-wrap'
1021
+ data-test-pretui-menubar
1022
+ {{this.captureHost}}
1023
+ {{ownsTimers this.timers}}
1024
+ {{listen 'click' this.onClick}}
1025
+ {{listen 'keydown' this.onKeydown}}
1026
+ {{listen 'pointerover' this.onPointerOver}}
1027
+ ...attributes
1028
+ >
1029
+ <menu
1030
+ class='pretui-menubar'
1031
+ role='menubar'
1032
+ aria-label={{this.barLabel}}
1033
+ data-test-pretui-menubar-list
1034
+ >
1035
+ {{#each this.topRows key='key' as |row i|}}
1036
+ <li
1037
+ class='pretui-menubar-item'
1038
+ role='menuitem'
1039
+ data-bar-index={{i}}
1040
+ data-active={{if (this.barIsActive i) 'true'}}
1041
+ data-open={{this.barIsOpen i}}
1042
+ aria-disabled={{if row.disabled 'true'}}
1043
+ aria-haspopup={{this.barPopup i}}
1044
+ aria-expanded={{this.barIsOpen i}}
1045
+ aria-keyshortcuts={{row.keyshortcuts}}
1046
+ {{rovingTabindex (this.barIsTabStop i)}}
1047
+ {{focusWhen (this.barIsFocusTarget i)}}
1048
+ {{this.captureBarItem i}}
1049
+ >
1050
+ {{#if row.icon}}
1051
+ <row.icon class='pretui-menubar-icon' role='presentation' />
1052
+ {{/if}}
1053
+ <span class='pretui-menubar-label'>{{row.label}}</span>
1054
+ {{#if row.shortcut}}
1055
+ <span
1056
+ class='pretui-menubar-kbd'
1057
+ aria-hidden='true'
1058
+ >{{row.shortcut}}</span>
1059
+ {{/if}}
1060
+ </li>
1061
+ {{/each}}
1062
+ </menu>
1063
+
1064
+ {{#if this.isOpen}}
1065
+ {{!-- dismissal, dynamic items and the pointer track live only while a
1066
+ menu is open — every listener leaves with the element --}}
1067
+ <span
1068
+ class='pretui-menubar-watch'
1069
+ {{tracksPointer this.track}}
1070
+ {{listenDocumentCapture 'keydown' this.onEscapeCapture}}
1071
+ {{listenDocument 'pointerdown' this.onDocumentPointerDown true}}
1072
+ {{listenDocument 'keydown' this.onAltDown false}}
1073
+ {{listenDocument 'keyup' this.onAltUp false}}
1074
+ ></span>
1075
+
1076
+ {{#each this.levels key='depth' as |level|}}
1077
+ <MenuPanel
1078
+ @level={{level}}
1079
+ @anchor={{this.anchorFor level.depth}}
1080
+ @placement={{this.placementFor level.depth}}
1081
+ @distance={{this.distanceFor level.depth}}
1082
+ @rovingKey={{this.focusKey}}
1083
+ @navigating={{this.navigating}}
1084
+ @openKeys={{this.openPath}}
1085
+ @onItemElement={{this.onItemElement}}
1086
+ @parentItem={{this.itemFor level.parentKey}}
1087
+ @onEdge={{this.onEdge}}
1088
+ data-test-pretui-menubar-panel={{level.depth}}
1089
+ />
1090
+ {{/each}}
1091
+ {{/if}}
1092
+ </div>
1093
+
1094
+ <style scoped>
1095
+ @layer PretComponent {
1096
+ .pretui-menubar-wrap {
1097
+ display: block;
1098
+ container-type: inline-size;
1099
+ }
1100
+ .pretui-menubar-watch {
1101
+ display: none;
1102
+ }
1103
+ .pretui-menubar {
1104
+ display: flex;
1105
+ align-items: stretch;
1106
+ gap: var(--pretui-menubar-gap, 1px);
1107
+ margin: 0;
1108
+ padding: var(--pretui-menubar-padding, 3px);
1109
+ list-style: none;
1110
+ background: var(--pretui-menubar-background, var(--card));
1111
+ color: var(--foreground);
1112
+ border-radius: var(--radius-surface, 10px);
1113
+ box-shadow: var(
1114
+ --pretui-shadow-hairline,
1115
+ 0 0 0 1px var(--border)
1116
+ );
1117
+ font-family: var(--font-sans);
1118
+ font-size: var(--text-ui-md, 12.5px);
1119
+ /* The bar is a single line of titles; when the pane is too narrow it
1120
+ scrolls rather than wrapping — a wrapped menu bar loses the one
1121
+ spatial fact readers rely on, which title sits where. */
1122
+ overflow-x: auto;
1123
+ overscroll-behavior-x: contain;
1124
+ scrollbar-width: thin;
1125
+ }
1126
+ .pretui-menubar-item {
1127
+ display: inline-flex;
1128
+ align-items: center;
1129
+ gap: 6px;
1130
+ min-height: var(--pretui-menubar-item-height, 26px);
1131
+ padding-block: 3px;
1132
+ padding-inline: var(--pretui-menubar-item-padding, 9px);
1133
+ border-radius: var(--radius-control, 6px);
1134
+ color: inherit;
1135
+ cursor: default;
1136
+ user-select: none;
1137
+ white-space: nowrap;
1138
+ /* the title's own colour is the only thing that moves, so the bar is
1139
+ still legible in a greyscale screenshot (Law 8) */
1140
+ transition: background-color 90ms cubic-bezier(0.23, 1, 0.32, 1);
1141
+ }
1142
+ .pretui-menubar-item[aria-disabled='true'] {
1143
+ /* dimmed, still focusable, still announced — HIG's "dim, don't
1144
+ remove", which the `disabled` attribute cannot express */
1145
+ opacity: 0.42;
1146
+ }
1147
+ .pretui-menubar-item[data-active='true']:not([aria-disabled='true']) {
1148
+ background: var(--hover, var(--boxel-100));
1149
+ }
1150
+ .pretui-menubar-item[data-open='true'] {
1151
+ background: var(--accent);
1152
+ color: var(--accent-foreground);
1153
+ }
1154
+ .pretui-menubar-item:focus-visible {
1155
+ outline: 2px solid var(--ring);
1156
+ outline-offset: -2px;
1157
+ }
1158
+ .pretui-menubar-label {
1159
+ font-weight: 500;
1160
+ }
1161
+ .pretui-menubar-icon {
1162
+ width: 14px;
1163
+ height: 14px;
1164
+ }
1165
+ .pretui-menubar-kbd {
1166
+ font-family: var(--font-mono);
1167
+ font-size: var(--text-ui-xs, 11px);
1168
+ font-variant-numeric: tabular-nums;
1169
+ color: var(--muted-foreground);
1170
+ white-space: nowrap;
1171
+ }
1172
+ .pretui-menubar-item[data-open='true'] .pretui-menubar-kbd {
1173
+ color: inherit;
1174
+ }
1175
+
1176
+ /* Touch: a 26px title is a miss target on a finger, and a touch reader
1177
+ has no hover at all — every title is reachable by tap, which is why
1178
+ the bar never depends on hover to open. */
1179
+ @media (any-pointer: coarse) {
1180
+ .pretui-menubar-item {
1181
+ min-height: 44px;
1182
+ padding-inline: 12px;
1183
+ }
1184
+ }
1185
+ /* Unnamed container query only — the named forms silently drop every
1186
+ following rule in the transpiled stylesheet. */
1187
+ @container (max-width: 380px) {
1188
+ .pretui-menubar-item {
1189
+ padding-inline: 7px;
1190
+ }
1191
+ }
1192
+ @media (prefers-reduced-motion: reduce) {
1193
+ .pretui-menubar-item {
1194
+ transition: none;
1195
+ }
1196
+ }
1197
+ }
1198
+ </style>
1199
+ </template>
1200
+ }