@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,1211 @@
1
+ // Pretui — ExpressionBuilder: conditions joined by all, any or custom logic, composed to BXL.
2
+ import Component from '@glimmer/component';
3
+ import { tracked } from '@glimmer/tracking';
4
+ import { fn } from '@ember/helper';
5
+ import { on } from '@ember/modifier';
6
+ import { guidFor } from '@ember/object/internals';
7
+ import { Button } from './button';
8
+ import { Field } from './field';
9
+ import { IconButton } from './icon-button';
10
+ import { Input } from './input';
11
+ import { Select } from './select';
12
+ import type { SelectOption } from './select';
13
+ import { ButtonGroup } from './button-group';
14
+ import { Menu } from './menu';
15
+ import type { MenuItemSpec } from '../internal/menu';
16
+ import { Chip } from './chip';
17
+ import { focusWhen } from '../focus';
18
+ import { AddIcon, MoreIcon, MoveIcon, RemoveIcon, appendLogicRef, conditionToBxl, newCondition, operatorCatalogue, operatorFor, remapCustomLogic, resourceFor, seedCustomLogic, tokenizeLogic, validateCustomLogic } from '../internal/forms-expression';
19
+ import type { ExpressionCondition, ExpressionIssue, ExpressionLogic, ExpressionModel, ExpressionOperator, ExpressionResource } from '../internal/forms-expression';
20
+
21
+ // ── ExpressionBuilder ────────────────────────────────────────────────────
22
+
23
+ /** Everything the `<:value>` slot needs to render the right-hand control. */
24
+ export interface ExpressionValueContext {
25
+ /** the row being edited */
26
+ condition: ExpressionCondition;
27
+ /** 0-based array position */
28
+ index: number;
29
+ /** 1-based display number — the number custom logic references */
30
+ number: number;
31
+ /** the resolved left-hand resource, when the row has one */
32
+ resource?: ExpressionResource;
33
+ /** the resolved operator spec, when the row has one */
34
+ operator?: ExpressionOperator;
35
+ /** put this on the control, and it is already wired to a per-row label */
36
+ controlId: string;
37
+ /** the row-qualified accessible name, if the control needs it directly */
38
+ label: string;
39
+ /** id of the row's message element, for `aria-describedby` */
40
+ describedBy?: string;
41
+ /** the builder is read-only */
42
+ disabled: boolean;
43
+ /** picklist choices declared on the resource */
44
+ options: SelectOption[];
45
+ /** whether `condition.value` is a literal or another field's label path */
46
+ valueKind: 'literal' | 'path';
47
+ /** commit a new value for this row */
48
+ setValue: (value: string) => void;
49
+ }
50
+
51
+ type FocusControl = 'row' | 'up' | 'down' | 'remove' | 'add';
52
+
53
+ interface FocusTarget {
54
+ id: string;
55
+ control: FocusControl;
56
+ }
57
+
58
+ interface BuilderRow {
59
+ id: string;
60
+ index: number;
61
+ number: number;
62
+ condition: ExpressionCondition;
63
+ resource?: ExpressionResource;
64
+ operatorSpec?: ExpressionOperator;
65
+ operatorOptions: SelectOption[];
66
+ needsValue: boolean;
67
+ isPathValue: boolean;
68
+ valueKindId: string;
69
+ valueKindLabel: string;
70
+ valueContext: ExpressionValueContext;
71
+ menuItems: (MenuItemSpec | '---')[];
72
+ legendId: string;
73
+ resourceId: string;
74
+ operatorId: string;
75
+ valueId: string;
76
+ messageId: string;
77
+ message?: string;
78
+ messageTone: 'error' | 'warning' | 'info';
79
+ unused: boolean;
80
+ isFirst: boolean;
81
+ isLast: boolean;
82
+ legendText: string;
83
+ resourceLabel: string;
84
+ operatorLabel: string;
85
+ valueLabel: string;
86
+ upLabel: string;
87
+ downLabel: string;
88
+ removeLabel: string;
89
+ moreLabel: string;
90
+ focusRow: boolean;
91
+ focusUp: boolean;
92
+ focusDown: boolean;
93
+ focusRemove: boolean;
94
+ }
95
+
96
+ const LOGIC_OPTIONS: SelectOption[] = [
97
+ { value: 'all', label: 'All conditions are met' },
98
+ { value: 'any', label: 'Any condition is met' },
99
+ { value: 'custom', label: 'Custom logic is met' },
100
+ { value: 'always', label: 'Always (no conditions)' },
101
+ ];
102
+
103
+ const VALUE_KIND_OPTIONS: SelectOption[] = [
104
+ { value: 'literal', label: 'Value' },
105
+ { value: 'path', label: 'Field' },
106
+ ];
107
+
108
+ export interface ExpressionBuilderSignature {
109
+ Args: {
110
+ /** Controlled row list. Omit and seed `@defaultConditions` for the
111
+ * uncontrolled path (kit contract: `args.value ?? internal`). */
112
+ conditions?: ExpressionCondition[];
113
+ /** Uncontrolled seed for the row list. */
114
+ defaultConditions?: ExpressionCondition[];
115
+ /** Controlled joiner: all / any / custom / always. */
116
+ logic?: ExpressionLogic;
117
+ /** Uncontrolled seed for the joiner. Default `all`. */
118
+ defaultLogic?: ExpressionLogic;
119
+ /** Controlled custom-logic string, e.g. `1 AND (2 OR 3)`. */
120
+ customLogic?: string;
121
+ /** Uncontrolled seed for the custom-logic string. */
122
+ defaultCustomLogic?: string;
123
+ /** Fields offered in the left column. Each carries the BXL label path it
124
+ * writes verbatim into `targetPath` — quote it here if it needs quoting. */
125
+ resources?: ExpressionResource[];
126
+ /** Operator catalogue when a resource declares none and its type has no
127
+ * default worth using. */
128
+ operators?: ExpressionOperator[];
129
+ /** Heading above the builder. Default `Conditions`. */
130
+ title?: string;
131
+ /** Label on the joiner select. Default `Take action when`. */
132
+ logicLabel?: string;
133
+ /** Singular noun for a row, used in every accessible name. Default
134
+ * `Condition`. */
135
+ conditionNoun?: string;
136
+ /** Text on the add button. Default `Add condition`. */
137
+ addLabel?: string;
138
+ /** Refuse to add past this many rows. Unlimited when omitted. */
139
+ maxConditions?: number;
140
+ /** Offer a Value / Field switch on the right-hand side, so a condition
141
+ * can compare two fields ("Total must not exceed the approved budget").
142
+ * In `Field` mode the right side is a resource picker the builder owns —
143
+ * the `<:value>` slot is only asked for literals. */
144
+ allowFieldComparison?: boolean;
145
+ /** Render every control disabled — the review/approved state. */
146
+ readonly?: boolean;
147
+ /** Authoring problems supplied by the caller, merged with the ones this
148
+ * component derives. Rows are addressed by `conditionId`. */
149
+ issues?: ExpressionIssue[];
150
+ /** Fires after every structural or field change with the whole model. */
151
+ onChange?: (model: ExpressionModel) => void;
152
+ /** Fires alongside `@onChange` with the derived issue list, so a caller
153
+ * can gate its save button without re-deriving them. */
154
+ onIssues?: (issues: ExpressionIssue[]) => void;
155
+ };
156
+ Blocks: {
157
+ /** The right-hand value control. Varies by operator and field type, so it
158
+ * is a slot, not a string (Law 7). Falls back to a plain `Input`. */
159
+ value: [ExpressionValueContext];
160
+ /** Extra content between the joiner row and the rows. */
161
+ header: [];
162
+ /** Extra buttons beside `Add condition`. */
163
+ footer: [];
164
+ };
165
+ Element: HTMLElement;
166
+ }
167
+
168
+ export class ExpressionBuilder extends Component<ExpressionBuilderSignature> {
169
+ @tracked private internal: ExpressionModel = {
170
+ logic: this.args.defaultLogic ?? 'all',
171
+ customLogic: this.args.defaultCustomLogic ?? '',
172
+ conditions: this.args.defaultConditions ?? [],
173
+ };
174
+ @tracked private focusTarget?: FocusTarget;
175
+ @tracked announcement = '';
176
+
177
+ private get uid() {
178
+ return guidFor(this);
179
+ }
180
+
181
+ get conditions(): ExpressionCondition[] {
182
+ return this.args.conditions ?? this.internal.conditions;
183
+ }
184
+ get logic(): ExpressionLogic {
185
+ return this.args.logic ?? this.internal.logic;
186
+ }
187
+ get customLogic(): string {
188
+ return this.args.customLogic ?? this.internal.customLogic ?? '';
189
+ }
190
+ get model(): ExpressionModel {
191
+ return {
192
+ logic: this.logic,
193
+ customLogic: this.customLogic,
194
+ conditions: this.conditions,
195
+ };
196
+ }
197
+ get noun() {
198
+ return this.args.conditionNoun ?? 'Condition';
199
+ }
200
+ get nounLower() {
201
+ return this.noun.toLowerCase();
202
+ }
203
+ get title() {
204
+ return this.args.title ?? 'Conditions';
205
+ }
206
+ get readonly() {
207
+ return this.args.readonly ?? false;
208
+ }
209
+ get resources(): ExpressionResource[] {
210
+ return this.args.resources ?? [];
211
+ }
212
+ get resourceOptions(): SelectOption[] {
213
+ return this.resources.map((r) => ({ value: r.value, label: r.label }));
214
+ }
215
+ get logicOptions() {
216
+ return LOGIC_OPTIONS;
217
+ }
218
+ get valueKindOptions() {
219
+ return VALUE_KIND_OPTIONS;
220
+ }
221
+ get isCustom() {
222
+ return this.logic === 'custom';
223
+ }
224
+ get isAlways() {
225
+ return this.logic === 'always';
226
+ }
227
+ get atMax() {
228
+ let max = this.args.maxConditions;
229
+ return max !== undefined && this.conditions.length >= max;
230
+ }
231
+ get addLabel() {
232
+ return this.args.addLabel ?? `Add ${this.nounLower}`;
233
+ }
234
+ private countPhrase(count: number) {
235
+ return `${count} ${count === 1 ? this.nounLower : `${this.nounLower}s`}`;
236
+ }
237
+ get listLabel() {
238
+ return `${this.title}, ${this.countPhrase(this.conditions.length)}`;
239
+ }
240
+ get countLabel() {
241
+ return this.countPhrase(this.conditions.length);
242
+ }
243
+ get customLogicId() {
244
+ return `${this.uid}-custom`;
245
+ }
246
+ get logicSelectId() {
247
+ return `${this.uid}-logic`;
248
+ }
249
+ get focusAdd() {
250
+ return this.focusTarget?.control === 'add';
251
+ }
252
+
253
+ /** Derive the issue list for an arbitrary model, so `@onIssues` can report
254
+ * the state the caller is about to be handed rather than the one on screen. */
255
+ issuesFor(model: ExpressionModel): ExpressionIssue[] {
256
+ let derived: ExpressionIssue[] = [];
257
+ if (model.logic !== 'always') {
258
+ if (model.conditions.length === 0) {
259
+ derived.push({
260
+ severity: 'warning',
261
+ message: `No ${this.nounLower}s yet — the rule will not compose until one is added.`,
262
+ });
263
+ }
264
+ for (let i = 0; i < model.conditions.length; i++) {
265
+ let condition = model.conditions[i]!;
266
+ let number = i + 1;
267
+ if (!condition.targetPath) {
268
+ derived.push({
269
+ severity: 'error',
270
+ conditionId: condition.id,
271
+ message: `${this.noun} ${number} has no field selected.`,
272
+ });
273
+ } else if (!condition.operator) {
274
+ derived.push({
275
+ severity: 'error',
276
+ conditionId: condition.id,
277
+ message: `${this.noun} ${number} has no operator selected.`,
278
+ });
279
+ } else if (
280
+ conditionToBxl(condition, this.resources, this.args.operators) === ''
281
+ ) {
282
+ derived.push({
283
+ severity: 'error',
284
+ conditionId: condition.id,
285
+ message: `${this.noun} ${number} has no value.`,
286
+ });
287
+ }
288
+ }
289
+ if (model.logic === 'custom') {
290
+ derived = derived.concat(
291
+ validateCustomLogic(model.customLogic, model.conditions.length),
292
+ );
293
+ }
294
+ }
295
+ return derived.concat(this.args.issues ?? []);
296
+ }
297
+
298
+ /** Issues this component derives, plus whatever the caller supplied. */
299
+ get issues(): ExpressionIssue[] {
300
+ return this.issuesFor(this.model);
301
+ }
302
+
303
+ get expressionIssues(): ExpressionIssue[] {
304
+ return this.issues.filter((i) => !i.conditionId);
305
+ }
306
+
307
+ get hasErrors() {
308
+ return this.issues.some((i) => i.severity === 'error');
309
+ }
310
+
311
+ /** Rows referenced at least once by the custom logic. Used to mark the
312
+ * ones the author has stranded. */
313
+ private get referenced(): Set<number> {
314
+ let seen = new Set<number>();
315
+ if (!this.isCustom) {
316
+ return seen;
317
+ }
318
+ for (let token of tokenizeLogic(this.customLogic)) {
319
+ if (token.kind === 'ref' && token.index !== undefined) {
320
+ seen.add(token.index);
321
+ }
322
+ }
323
+ return seen;
324
+ }
325
+
326
+ get rows(): BuilderRow[] {
327
+ let conditions = this.conditions;
328
+ let referenced = this.referenced;
329
+ let issues = this.issues;
330
+ let last = conditions.length - 1;
331
+ let target = this.focusTarget;
332
+ return conditions.map((condition, index) => {
333
+ let number = index + 1;
334
+ let resource = resourceFor(condition, this.resources);
335
+ let catalogue = operatorCatalogue(resource, this.args.operators);
336
+ let operatorSpec = operatorFor(condition, catalogue);
337
+ let rowIssue = issues.find((i) => i.conditionId === condition.id);
338
+ let base = `${this.uid}-r${condition.id}`;
339
+ let valueId = `${base}-val`;
340
+ let messageId = `${base}-msg`;
341
+ let valueLabel = `${this.noun} ${number} value`;
342
+ let isFirst = index === 0;
343
+ let isLast = index === last;
344
+ let valueKind = condition.valueKind ?? 'literal';
345
+ return {
346
+ id: condition.id,
347
+ index,
348
+ number,
349
+ condition,
350
+ resource,
351
+ operatorSpec,
352
+ operatorOptions: catalogue.map((o) => ({
353
+ value: o.value,
354
+ label: o.label,
355
+ })),
356
+ needsValue: operatorSpec?.arity !== 0,
357
+ isPathValue: valueKind === 'path',
358
+ valueKindId: `${base}-kind`,
359
+ valueKindLabel: `${this.noun} ${number} value kind`,
360
+ menuItems: [
361
+ {
362
+ label: 'Duplicate',
363
+ disabled: this.readonly || this.atMax,
364
+ onSelect: () => this.duplicateCondition(condition.id),
365
+ },
366
+ {
367
+ label: 'Move to top',
368
+ disabled: this.readonly || isFirst,
369
+ onSelect: () => this.moveToTop(condition.id),
370
+ },
371
+ {
372
+ label: 'Move to bottom',
373
+ disabled: this.readonly || isLast,
374
+ onSelect: () => this.moveToBottom(condition.id),
375
+ },
376
+ ],
377
+ valueContext: {
378
+ condition,
379
+ index,
380
+ number,
381
+ resource,
382
+ operator: operatorSpec,
383
+ controlId: valueId,
384
+ label: valueLabel,
385
+ describedBy: rowIssue ? messageId : undefined,
386
+ disabled: this.readonly,
387
+ options: resource?.options ?? [],
388
+ valueKind,
389
+ setValue: (value: string) => this.setValue(condition.id, value),
390
+ },
391
+ legendId: `${base}-leg`,
392
+ resourceId: `${base}-res`,
393
+ operatorId: `${base}-op`,
394
+ valueId,
395
+ messageId,
396
+ message: rowIssue?.message,
397
+ messageTone: rowIssue?.severity ?? 'info',
398
+ unused: this.isCustom && !referenced.has(number),
399
+ isFirst,
400
+ isLast,
401
+ legendText: `${this.noun} ${number} of ${conditions.length}`,
402
+ resourceLabel: `${this.noun} ${number} field`,
403
+ operatorLabel: `${this.noun} ${number} operator`,
404
+ valueLabel,
405
+ upLabel: `Move ${this.nounLower} ${number} up`,
406
+ downLabel: `Move ${this.nounLower} ${number} down`,
407
+ removeLabel: `Remove ${this.nounLower} ${number}`,
408
+ moreLabel: `More actions for ${this.nounLower} ${number}`,
409
+ focusRow: target?.id === condition.id && target.control === 'row',
410
+ focusUp: target?.id === condition.id && target.control === 'up',
411
+ focusDown: target?.id === condition.id && target.control === 'down',
412
+ focusRemove: target?.id === condition.id && target.control === 'remove',
413
+ };
414
+ });
415
+ }
416
+
417
+ get overflowItems(): (MenuItemSpec | '---')[] {
418
+ return [
419
+ {
420
+ label: 'Rebuild custom logic from joiner',
421
+ disabled: this.readonly || this.conditions.length === 0,
422
+ onSelect: this.rebuildCustomLogic,
423
+ },
424
+ {
425
+ label: 'Clear custom logic',
426
+ disabled: this.readonly || this.customLogic === '',
427
+ onSelect: this.clearCustomLogic,
428
+ },
429
+ '---',
430
+ {
431
+ label: `Remove all ${this.nounLower}s`,
432
+ destructive: true,
433
+ disabled: this.readonly || this.conditions.length === 0,
434
+ onSelect: this.removeAll,
435
+ },
436
+ ];
437
+ }
438
+
439
+ // ── mutation ───────────────────────────────────────────────────────────
440
+
441
+ private commit(next: ExpressionModel) {
442
+ this.internal = next;
443
+ this.args.onChange?.(next);
444
+ this.args.onIssues?.(this.issuesFor(next));
445
+ }
446
+
447
+ /**
448
+ * Commit a new row array and carry the custom logic across with it.
449
+ *
450
+ * The remap is derived from row IDS, not from the numbers: the old id at
451
+ * position N is looked up in the new array, and its new position is the new
452
+ * reference. Delete, move, duplicate and sort all reduce to this, which is
453
+ * why none of them can renumber wrongly. A reference the old array never
454
+ * had is passed through untouched so the validator reports it rather than
455
+ * the editor quietly deleting the author's clause.
456
+ */
457
+ private commitRows(next: ExpressionCondition[], appendNumber?: number) {
458
+ let before = this.conditions.map((c) => c.id);
459
+ let after = next.map((c) => c.id);
460
+ let custom = this.customLogic;
461
+ if (custom.trim()) {
462
+ custom = remapCustomLogic(custom, (index) => {
463
+ let id = before[index - 1];
464
+ if (id === undefined) {
465
+ return index;
466
+ }
467
+ let position = after.indexOf(id);
468
+ return position < 0 ? null : position + 1;
469
+ });
470
+ }
471
+ if (appendNumber !== undefined && (custom.trim() || this.isCustom)) {
472
+ custom = appendLogicRef(custom, appendNumber);
473
+ }
474
+ this.commit({ logic: this.logic, customLogic: custom, conditions: next });
475
+ }
476
+
477
+ private replace(id: string, patch: Partial<ExpressionCondition>) {
478
+ let next = this.conditions.map((c) => (c.id === id ? { ...c, ...patch } : c));
479
+ this.commit({
480
+ logic: this.logic,
481
+ customLogic: this.customLogic,
482
+ conditions: next,
483
+ });
484
+ }
485
+
486
+ setLogic = (value: string) => {
487
+ let logic = value as ExpressionLogic;
488
+ let custom = this.customLogic;
489
+ if (logic === 'custom' && !custom.trim()) {
490
+ custom = seedCustomLogic(this.conditions.length, this.logic);
491
+ }
492
+ this.announcement =
493
+ logic === 'custom'
494
+ ? 'Custom logic enabled. Reference conditions by number.'
495
+ : `Conditions combine with ${LOGIC_OPTIONS.find((o) => o.value === logic)?.label ?? logic}.`;
496
+ this.commit({
497
+ logic,
498
+ customLogic: custom,
499
+ conditions: this.conditions,
500
+ });
501
+ };
502
+
503
+ setCustomLogic = (value: string) => {
504
+ this.commit({
505
+ logic: this.logic,
506
+ customLogic: value,
507
+ conditions: this.conditions,
508
+ });
509
+ };
510
+
511
+ rebuildCustomLogic = () => {
512
+ this.announcement = 'Custom logic rebuilt from the joiner.';
513
+ this.commit({
514
+ logic: 'custom',
515
+ customLogic: seedCustomLogic(this.conditions.length, 'all'),
516
+ conditions: this.conditions,
517
+ });
518
+ };
519
+
520
+ clearCustomLogic = () => {
521
+ this.announcement = 'Custom logic cleared.';
522
+ this.commit({
523
+ logic: this.logic,
524
+ customLogic: '',
525
+ conditions: this.conditions,
526
+ });
527
+ };
528
+
529
+ setResource = (id: string, value: string) => {
530
+ let resource = this.resources.find((r) => r.value === value);
531
+ let catalogue = operatorCatalogue(resource, this.args.operators);
532
+ let current = this.conditions.find((c) => c.id === id);
533
+ // changing the field can invalidate the operator — keep it only when the
534
+ // new catalogue still offers it, and never keep a value under a unary op
535
+ let keep = catalogue.some((o) => o.value === current?.operator);
536
+ this.replace(id, {
537
+ targetPath: value,
538
+ operator: keep ? current!.operator : (catalogue[0]?.value ?? ''),
539
+ value: keep ? (current?.value ?? '') : '',
540
+ });
541
+ };
542
+
543
+ setOperator = (id: string, value: string) => {
544
+ let current = this.conditions.find((c) => c.id === id);
545
+ let resource = current ? resourceFor(current, this.resources) : undefined;
546
+ let catalogue = operatorCatalogue(resource, this.args.operators);
547
+ let spec = catalogue.find((o) => o.value === value);
548
+ this.replace(id, {
549
+ operator: value,
550
+ value: spec?.arity === 0 ? '' : (current?.value ?? ''),
551
+ });
552
+ };
553
+
554
+ setValue = (id: string, value: string) => {
555
+ this.replace(id, { value });
556
+ };
557
+
558
+ setValueKind = (id: string, kind: string) => {
559
+ // switching sides discards the old right operand: a quoted literal is
560
+ // never a valid label path and vice versa, and silently keeping it would
561
+ // compose a rule that reads plausibly and means something else
562
+ this.replace(id, {
563
+ valueKind: kind === 'path' ? 'path' : 'literal',
564
+ value: '',
565
+ });
566
+ };
567
+
568
+ addCondition = () => {
569
+ if (this.readonly || this.atMax) {
570
+ return;
571
+ }
572
+ let created = newCondition();
573
+ let next = [...this.conditions, created];
574
+ this.focusTarget = { id: created.id, control: 'row' };
575
+ this.announcement = `${this.noun} ${next.length} added. ${next.length} total.`;
576
+ this.commitRows(next, next.length);
577
+ };
578
+
579
+ duplicateCondition = (id: string) => {
580
+ if (this.readonly || this.atMax) {
581
+ return;
582
+ }
583
+ let index = this.conditions.findIndex((c) => c.id === id);
584
+ if (index < 0) {
585
+ return;
586
+ }
587
+ let source = this.conditions[index]!;
588
+ let created = newCondition({
589
+ targetPath: source.targetPath,
590
+ operator: source.operator,
591
+ value: source.value,
592
+ });
593
+ let next = [...this.conditions];
594
+ next.splice(index + 1, 0, created);
595
+ this.focusTarget = { id: created.id, control: 'row' };
596
+ this.announcement = `${this.noun} ${index + 1} duplicated as ${this.nounLower} ${index + 2}. ${next.length} total.`;
597
+ this.commitRows(next, index + 2);
598
+ };
599
+
600
+ removeCondition = (id: string) => {
601
+ if (this.readonly) {
602
+ return;
603
+ }
604
+ let index = this.conditions.findIndex((c) => c.id === id);
605
+ if (index < 0) {
606
+ return;
607
+ }
608
+ let next = this.conditions.filter((c) => c.id !== id);
609
+ // focus the row that took this one's place; the previous row when the
610
+ // last row went; the add button when nothing is left
611
+ let heir = next[index] ?? next[index - 1];
612
+ this.focusTarget = heir
613
+ ? { id: heir.id, control: 'remove' }
614
+ : { id: 'add', control: 'add' };
615
+ this.announcement = `${this.noun} ${index + 1} removed. ${next.length} remaining.`;
616
+ this.commitRows(next);
617
+ };
618
+
619
+ removeAll = () => {
620
+ if (this.readonly) {
621
+ return;
622
+ }
623
+ this.focusTarget = { id: 'add', control: 'add' };
624
+ this.announcement = `All ${this.nounLower}s removed.`;
625
+ this.commitRows([]);
626
+ };
627
+
628
+ private move(id: string, delta: number, control: FocusControl) {
629
+ if (this.readonly) {
630
+ return;
631
+ }
632
+ let index = this.conditions.findIndex((c) => c.id === id);
633
+ let to = index + delta;
634
+ // never disable the end-of-list button — say why instead, so focus stays
635
+ if (index < 0 || to < 0 || to >= this.conditions.length) {
636
+ this.announcement = `${this.noun} ${index + 1} is already ${delta < 0 ? 'first' : 'last'}.`;
637
+ return;
638
+ }
639
+ let next = [...this.conditions];
640
+ let [moved] = next.splice(index, 1);
641
+ next.splice(to, 0, moved!);
642
+ this.focusTarget = { id, control };
643
+ this.announcement = `${this.noun} moved to position ${to + 1} of ${next.length}.`;
644
+ this.commitRows(next);
645
+ }
646
+
647
+ moveUp = (id: string) => this.move(id, -1, 'up');
648
+ moveDown = (id: string) => this.move(id, 1, 'down');
649
+
650
+ moveToTop = (id: string) => {
651
+ let index = this.conditions.findIndex((c) => c.id === id);
652
+ if (index <= 0) {
653
+ return;
654
+ }
655
+ this.move(id, -index, 'row');
656
+ };
657
+
658
+ moveToBottom = (id: string) => {
659
+ let index = this.conditions.findIndex((c) => c.id === id);
660
+ let end = this.conditions.length - 1;
661
+ if (index < 0 || index >= end) {
662
+ return;
663
+ }
664
+ this.move(id, end - index, 'row');
665
+ };
666
+
667
+ <template>
668
+ <section
669
+ class='pretui-xb'
670
+ data-readonly={{if this.readonly 'true'}}
671
+ data-test-pretui-expression-builder
672
+ ...attributes
673
+ >
674
+ <header class='xb-head'>
675
+ <h3 class='xb-title' data-test-pretui-expression-title>{{this.title}}</h3>
676
+ <Chip
677
+ @label={{this.countLabel}}
678
+ @dot={{false}}
679
+ data-test-pretui-expression-count
680
+ />
681
+ <span class='xb-spacer'></span>
682
+ <Menu @items={{this.overflowItems}} @align='end'>
683
+ <:trigger as |open toggle|>
684
+ <IconButton
685
+ @label='{{this.title}} options'
686
+ @variant='ghost'
687
+ aria-expanded='{{open}}'
688
+ aria-haspopup='menu'
689
+ {{on 'click' toggle}}
690
+ data-test-pretui-expression-overflow
691
+ ><MoreIcon class='xb-icon' /></IconButton>
692
+ </:trigger>
693
+ </Menu>
694
+ </header>
695
+
696
+ <div class='xb-logic'>
697
+ <label class='xb-label' for={{this.logicSelectId}}>
698
+ {{if @logicLabel @logicLabel 'Take action when'}}
699
+ </label>
700
+ <Select
701
+ @options={{this.logicOptions}}
702
+ @value={{this.logic}}
703
+ @controlId={{this.logicSelectId}}
704
+ @disabled={{this.readonly}}
705
+ @onValueChange={{this.setLogic}}
706
+ class='xb-logic-select'
707
+ data-test-pretui-expression-logic
708
+ />
709
+ </div>
710
+
711
+ {{#if this.isCustom}}
712
+ <div class='xb-custom'>
713
+ <Field
714
+ @label='Custom logic'
715
+ @hint='Reference conditions by number — 1 AND (2 OR 3). NOT is allowed.'
716
+ >
717
+ <:default as |controlId|>
718
+ <Input
719
+ @value={{this.customLogic}}
720
+ @controlId={{controlId}}
721
+ placeholder='1 AND (2 OR 3)'
722
+ disabled={{this.readonly}}
723
+ @onInput={{this.setCustomLogic}}
724
+ data-test-pretui-expression-custom
725
+ />
726
+ </:default>
727
+ </Field>
728
+ </div>
729
+ {{/if}}
730
+
731
+ {{yield to='header'}}
732
+
733
+ {{#unless this.isAlways}}
734
+ <div class='xb-cols' aria-hidden='true'>
735
+ <span class='xb-col-num'>#</span>
736
+ <span>Field</span>
737
+ <span>Operator</span>
738
+ <span>Value</span>
739
+ <span></span>
740
+ </div>
741
+
742
+ <ol class='xb-rows' aria-label={{this.listLabel}}>
743
+ {{#each this.rows key='id' as |row|}}
744
+ <li class='xb-row-item'>
745
+ {{! the fieldset+legend gives the row its group identity; the
746
+ tabindex makes it the landing spot after an insert, where the
747
+ legend is what gets announced }}
748
+ <fieldset
749
+ class='xb-row'
750
+ tabindex='-1'
751
+ data-unused={{if row.unused 'true'}}
752
+ data-invalid={{if row.message 'true'}}
753
+ data-test-pretui-expression-row={{row.number}}
754
+ {{focusWhen row.focusRow}}
755
+ >
756
+ {{! the visible number lives in the grid, so the legend can be
757
+ purely the row's spoken identity — no float, no duplicate
758
+ announcement of the digit }}
759
+ <legend id={{row.legendId}} class='pretui-sr'>
760
+ {{row.legendText}}
761
+ </legend>
762
+
763
+ <div class='xb-grid'>
764
+ <span class='xb-num' aria-hidden='true'>{{row.number}}</span>
765
+ <div class='xb-cell'>
766
+ <label class='pretui-sr' for={{row.resourceId}}>
767
+ {{row.resourceLabel}}
768
+ </label>
769
+ <Select
770
+ @options={{this.resourceOptions}}
771
+ @value={{row.condition.targetPath}}
772
+ @controlId={{row.resourceId}}
773
+ @placeholder='Select field…'
774
+ @disabled={{this.readonly}}
775
+ @onValueChange={{fn this.setResource row.id}}
776
+ data-test-pretui-expression-resource={{row.number}}
777
+ />
778
+ </div>
779
+
780
+ <div class='xb-cell xb-cell-op'>
781
+ <label class='pretui-sr' for={{row.operatorId}}>
782
+ {{row.operatorLabel}}
783
+ </label>
784
+ <Select
785
+ @options={{row.operatorOptions}}
786
+ @value={{row.condition.operator}}
787
+ @controlId={{row.operatorId}}
788
+ @placeholder='Operator…'
789
+ @disabled={{this.readonly}}
790
+ @onValueChange={{fn this.setOperator row.id}}
791
+ data-test-pretui-expression-operator={{row.number}}
792
+ />
793
+ </div>
794
+
795
+ <div class='xb-cell xb-cell-value'>
796
+ {{#if row.needsValue}}
797
+ {{#if @allowFieldComparison}}
798
+ <label class='pretui-sr' for={{row.valueKindId}}>
799
+ {{row.valueKindLabel}}
800
+ </label>
801
+ <Select
802
+ @options={{this.valueKindOptions}}
803
+ @value={{if row.isPathValue 'path' 'literal'}}
804
+ @controlId={{row.valueKindId}}
805
+ @disabled={{this.readonly}}
806
+ @onValueChange={{fn this.setValueKind row.id}}
807
+ class='xb-kind'
808
+ data-test-pretui-expression-value-kind={{row.number}}
809
+ />
810
+ {{/if}}
811
+ <label class='pretui-sr' for={{row.valueId}}>
812
+ {{row.valueLabel}}
813
+ </label>
814
+ {{#if row.isPathValue}}
815
+ <Select
816
+ @options={{this.resourceOptions}}
817
+ @value={{row.condition.value}}
818
+ @controlId={{row.valueId}}
819
+ @placeholder='Compare with field…'
820
+ @disabled={{this.readonly}}
821
+ @onValueChange={{fn this.setValue row.id}}
822
+ data-test-pretui-expression-value={{row.number}}
823
+ />
824
+ {{else if (has-block 'value')}}
825
+ {{yield row.valueContext to='value'}}
826
+ {{else}}
827
+ <Input
828
+ @value={{row.condition.value}}
829
+ @controlId={{row.valueId}}
830
+ placeholder='Value'
831
+ disabled={{this.readonly}}
832
+ @onInput={{fn this.setValue row.id}}
833
+ aria-describedby={{row.messageId}}
834
+ data-test-pretui-expression-value={{row.number}}
835
+ />
836
+ {{/if}}
837
+ {{else}}
838
+ <span class='xb-novalue'>No value needed</span>
839
+ {{/if}}
840
+ </div>
841
+
842
+ <div class='xb-cell xb-cell-actions'>
843
+ <ButtonGroup @label='{{this.noun}} {{row.number}} actions'>
844
+ <IconButton
845
+ @label={{row.upLabel}}
846
+ @variant='ghost'
847
+ aria-disabled='{{row.isFirst}}'
848
+ disabled={{this.readonly}}
849
+ {{on 'click' (fn this.moveUp row.id)}}
850
+ {{focusWhen row.focusUp}}
851
+ data-test-pretui-expression-up={{row.number}}
852
+ ><MoveIcon class='xb-icon xb-flip' /></IconButton>
853
+ <IconButton
854
+ @label={{row.downLabel}}
855
+ @variant='ghost'
856
+ aria-disabled='{{row.isLast}}'
857
+ disabled={{this.readonly}}
858
+ {{on 'click' (fn this.moveDown row.id)}}
859
+ {{focusWhen row.focusDown}}
860
+ data-test-pretui-expression-down={{row.number}}
861
+ ><MoveIcon class='xb-icon' /></IconButton>
862
+ <IconButton
863
+ @label={{row.removeLabel}}
864
+ @variant='ghost'
865
+ disabled={{this.readonly}}
866
+ {{on 'click' (fn this.removeCondition row.id)}}
867
+ {{focusWhen row.focusRemove}}
868
+ data-test-pretui-expression-remove={{row.number}}
869
+ ><RemoveIcon class='xb-icon' /></IconButton>
870
+ </ButtonGroup>
871
+ <Menu @items={{row.menuItems}} @align='end'>
872
+ <:trigger as |open toggle|>
873
+ <IconButton
874
+ @label={{row.moreLabel}}
875
+ @variant='ghost'
876
+ aria-expanded='{{open}}'
877
+ aria-haspopup='menu'
878
+ {{on 'click' toggle}}
879
+ data-test-pretui-expression-more={{row.number}}
880
+ ><MoreIcon class='xb-icon' /></IconButton>
881
+ </:trigger>
882
+ </Menu>
883
+ </div>
884
+ </div>
885
+
886
+ {{! The severity notation: the state's own NAME is the mark,
887
+ set in the eyebrow treatment in a fixed gutter. It is not
888
+ aria-hidden — a word is information, and a field pointing
889
+ here through aria-describedby should hear "error" before
890
+ the message. Two notes stack as two grid rows. }}
891
+ <p class='xb-msg' id={{row.messageId}} data-tone={{row.messageTone}}>
892
+ {{#if row.message}}
893
+ <span class='xb-note-mark' data-tone={{row.messageTone}}>
894
+ {{row.messageTone}}
895
+ </span>
896
+ <span class='xb-note-body'>{{row.message}}</span>
897
+ {{/if}}
898
+ {{#if row.unused}}
899
+ <span class='xb-note-mark' data-tone='warning'>note</span>
900
+ <span class='xb-note-body'>Not referenced by the custom
901
+ logic.</span>
902
+ {{/if}}
903
+ </p>
904
+ </fieldset>
905
+ </li>
906
+ {{/each}}
907
+ </ol>
908
+
909
+ <div class='xb-foot'>
910
+ <Button
911
+ @variant='secondary'
912
+ @disabled={{if this.readonly true this.atMax}}
913
+ {{on 'click' this.addCondition}}
914
+ {{focusWhen this.focusAdd}}
915
+ data-test-pretui-expression-add
916
+ ><AddIcon class='xb-icon' />{{this.addLabel}}</Button>
917
+ {{yield to='footer'}}
918
+ </div>
919
+ {{/unless}}
920
+
921
+ {{#if this.expressionIssues}}
922
+ <ul class='xb-issues' data-test-pretui-expression-issues>
923
+ {{#each this.expressionIssues as |issue|}}
924
+ <li class='xb-issue' data-tone={{issue.severity}}>
925
+ <span class='xb-note-mark' data-tone={{issue.severity}}>
926
+ {{issue.severity}}
927
+ </span>
928
+ <span class='xb-note-body'>{{issue.message}}</span>
929
+ </li>
930
+ {{/each}}
931
+ </ul>
932
+ {{/if}}
933
+
934
+ <p class='pretui-sr' role='status'>{{this.announcement}}</p>
935
+
936
+ </section>
937
+ <style scoped>
938
+ /* above Select's layer, so these win by layer order, not file order */
939
+ @layer PretComponent, PretComposite;
940
+ @layer PretComposite {
941
+ .pretui-xb {
942
+ container-type: inline-size;
943
+ display: block;
944
+ color: var(--foreground);
945
+ font-size: var(--text-ui-md, 12.5px);
946
+ letter-spacing: var(--track-ui, 0.01em);
947
+ --pretui-xb-gap: var(--space-3, 8px);
948
+ --pretui-xb-num-w: 20px;
949
+ --pretui-xb-op-w: 9.5rem;
950
+ --pretui-xb-actions-w: max-content;
951
+ }
952
+ .pretui-sr {
953
+ position: absolute;
954
+ width: 1px;
955
+ height: 1px;
956
+ overflow: hidden;
957
+ clip: rect(0 0 0 0);
958
+ white-space: nowrap;
959
+ }
960
+ .xb-head {
961
+ display: flex;
962
+ align-items: center;
963
+ gap: var(--pretui-xb-gap);
964
+ margin-bottom: var(--space-3, 8px);
965
+ }
966
+ .xb-title {
967
+ margin: 0;
968
+ font-size: var(--text-ui-lg, 13.5px);
969
+ font-weight: 600;
970
+ letter-spacing: var(--track-heading, -0.01em);
971
+ }
972
+ .xb-spacer {
973
+ flex: 1;
974
+ }
975
+ .xb-icon {
976
+ --icon-color: currentColor;
977
+ width: 13px;
978
+ height: 13px;
979
+ flex: none;
980
+ }
981
+ .xb-flip {
982
+ transform: rotate(180deg);
983
+ }
984
+ .xb-logic {
985
+ display: flex;
986
+ align-items: center;
987
+ gap: var(--pretui-xb-gap);
988
+ flex-wrap: wrap;
989
+ }
990
+ .xb-label {
991
+ font-size: var(--text-ui-sm, 11.5px);
992
+ font-weight: 600;
993
+ color: var(--muted-foreground);
994
+ }
995
+ .xb-logic-select {
996
+ min-width: 14rem;
997
+ }
998
+ .xb-custom {
999
+ margin-top: var(--space-3, 8px);
1000
+ max-width: 32rem;
1001
+ }
1002
+ .xb-cols {
1003
+ display: grid;
1004
+ grid-template-columns:
1005
+ var(--pretui-xb-num-w) minmax(0, 1fr) var(--pretui-xb-op-w)
1006
+ minmax(0, 1fr) var(--pretui-xb-actions-w);
1007
+ gap: var(--pretui-xb-gap);
1008
+ margin-top: var(--space-4, 11px);
1009
+ padding-inline: 2px;
1010
+ font-size: var(--text-ui-xs, 11px);
1011
+ font-weight: 600;
1012
+ text-transform: uppercase;
1013
+ letter-spacing: var(--track-eyebrow, 0.06em);
1014
+ color: var(--muted-foreground);
1015
+ }
1016
+ .xb-col-num {
1017
+ text-align: center;
1018
+ }
1019
+ .xb-rows {
1020
+ list-style: none;
1021
+ margin: 4px 0 0;
1022
+ padding: 0;
1023
+ }
1024
+ .xb-row-item + .xb-row-item {
1025
+ margin-top: 4px;
1026
+ }
1027
+ .xb-row {
1028
+ border: 0;
1029
+ margin: 0;
1030
+ padding: 4px 2px;
1031
+ border-radius: var(--radius);
1032
+ min-inline-size: 0;
1033
+ }
1034
+ .xb-row:focus-visible {
1035
+ outline: 2px solid var(--ring);
1036
+ outline-offset: 1px;
1037
+ }
1038
+ /* No state stripe on the row. Both states already carry a written
1039
+ message below the grid, and the stripe added a SECOND channel that
1040
+ only worked in colour on top of a first that always works — invalid
1041
+ and unused were told apart by hue and nothing else, so they were the
1042
+ same 2px grey rule in greyscale. The notation below carries both. */
1043
+ .xb-num {
1044
+ display: inline-flex;
1045
+ align-items: center;
1046
+ justify-content: center;
1047
+ width: var(--pretui-xb-num-w);
1048
+ height: var(--boxel-form-control-height-sm);
1049
+ font-variant-numeric: tabular-nums;
1050
+ font-family: var(--font-mono);
1051
+ font-size: var(--text-ui-sm, 11.5px);
1052
+ color: var(--muted-foreground);
1053
+ }
1054
+ .xb-grid {
1055
+ display: grid;
1056
+ grid-template-columns:
1057
+ var(--pretui-xb-num-w) minmax(0, 1fr) var(--pretui-xb-op-w)
1058
+ minmax(0, 1fr) var(--pretui-xb-actions-w);
1059
+ gap: var(--pretui-xb-gap);
1060
+ align-items: center;
1061
+ }
1062
+ .xb-cell {
1063
+ min-width: 0;
1064
+ }
1065
+ .xb-cell-value {
1066
+ display: flex;
1067
+ align-items: center;
1068
+ gap: 6px;
1069
+ }
1070
+ .xb-cell-value > :last-child {
1071
+ flex: 1;
1072
+ min-width: 0;
1073
+ }
1074
+ .xb-kind {
1075
+ flex: none;
1076
+ width: 5.5rem;
1077
+ }
1078
+ .xb-cell-actions {
1079
+ display: flex;
1080
+ align-items: center;
1081
+ gap: 2px;
1082
+ }
1083
+ .xb-novalue {
1084
+ display: inline-flex;
1085
+ align-items: center;
1086
+ height: var(--boxel-form-control-height-sm);
1087
+ font-size: var(--text-ui-sm, 11.5px);
1088
+ color: var(--muted-foreground);
1089
+ }
1090
+ /* ── The severity notation ───────────────────────────────────────────
1091
+ One treatment, used everywhere this component reports a state. It
1092
+ replaces three colour-only treatments that were here before: a
1093
+ tinted rule down the inline start of the row, a tinted rule down
1094
+ the issue list, and a message printed entirely in its severity hue.
1095
+
1096
+ Severity is TYPESET. The state's own name is the mark, set in the
1097
+ kit's eyebrow treatment against a fixed gutter so a stack of notes
1098
+ aligns like a table of contents. Three channels, in priority order:
1099
+
1100
+ 1. the WORD — survives greyscale, a photocopy and a screen reader,
1101
+ and is the only channel that still says which severity it is
1102
+ when the hue is gone;
1103
+ 2. the GUTTER — identical width for every severity, so it is
1104
+ alignment rather than signal; it is what makes a stack read as
1105
+ one list, and it is why no rule or box is needed to group them;
1106
+ 3. the HUE — on the mark ALONE. Delete colour and nothing is lost.
1107
+
1108
+ There is deliberately no tone→glyph map. The map only ever converted
1109
+ a word this component already had into a decoration that said less.
1110
+
1111
+ The message itself is --foreground at full contrast rather than
1112
+ tinted, which is also the contrast fix: 11.5px --destructive text on
1113
+ --card was this file's thinnest AA margin, in both modes and every
1114
+ theme. Tinting a whole sentence never made it more legible. */
1115
+ .xb-msg,
1116
+ .xb-issue {
1117
+ display: grid;
1118
+ grid-template-columns: var(--pretui-xb-notegutter, 5.25em) minmax(0, 1fr);
1119
+ column-gap: var(--space-2, 6px);
1120
+ row-gap: 2px;
1121
+ align-items: baseline;
1122
+ font-size: var(--text-ui-sm, 11.5px);
1123
+ color: var(--foreground);
1124
+ }
1125
+ .xb-msg {
1126
+ margin: 2px 0 0 calc(var(--pretui-xb-num-w) + var(--pretui-xb-gap));
1127
+ min-height: 1em;
1128
+ }
1129
+ .xb-note-mark {
1130
+ justify-self: end;
1131
+ font-size: var(--text-ui-xs, 11px);
1132
+ font-weight: 600;
1133
+ letter-spacing: var(--track-eyebrow, 0.08em);
1134
+ text-transform: uppercase;
1135
+ white-space: nowrap;
1136
+ color: var(--muted-foreground);
1137
+ }
1138
+ /* The hue is ANCHORED IN INK, never used raw. --warning as text can
1139
+ fall to about 2:1 on --card — the whole-message tint this replaces
1140
+ failed AA outright, and a bold 11px mark would fail it too. Mixing
1141
+ toward --foreground rather than toward a fixed dark is what makes it
1142
+ mode-correct for free (Law 2's crossover argument): --foreground is
1143
+ near-black on a light card and near-white on a dark one, so the same
1144
+ declaration lands on a dark amber in light mode and a light amber in
1145
+ dark mode, under any theme, with no dark branch. */
1146
+ .xb-note-mark[data-tone='error'] {
1147
+ color: color-mix(
1148
+ in oklch,
1149
+ var(--destructive) var(--pretui-note-hue-mix, 45%),
1150
+ var(--foreground)
1151
+ );
1152
+ }
1153
+ .xb-note-mark[data-tone='warning'] {
1154
+ color: color-mix(
1155
+ in oklch,
1156
+ var(--warning, var(--boxel-warning)) var(--pretui-note-hue-mix, 45%),
1157
+ var(--foreground)
1158
+ );
1159
+ }
1160
+ .xb-note-body {
1161
+ min-width: 0;
1162
+ }
1163
+ .xb-foot {
1164
+ display: flex;
1165
+ align-items: center;
1166
+ gap: var(--pretui-xb-gap);
1167
+ margin-top: var(--space-3, 8px);
1168
+ }
1169
+ .xb-issues {
1170
+ list-style: none;
1171
+ margin: var(--space-3, 8px) 0 0;
1172
+ padding: 0;
1173
+ display: grid;
1174
+ gap: 3px;
1175
+ }
1176
+ /* .xb-issue wears the same notation as .xb-msg (grid declared above).
1177
+ It keeps no box of its own: a rounded 2px-striped slab per issue was
1178
+ a container for one line of text that needed no container. */
1179
+ /* unnamed container query — resolves against .pretui-xb, the nearest
1180
+ ancestor container, so these rules never target the container itself */
1181
+ @container (max-width: 44rem) {
1182
+ .xb-cols {
1183
+ display: none;
1184
+ }
1185
+ .xb-grid {
1186
+ grid-template-columns: var(--pretui-xb-num-w) minmax(0, 1fr);
1187
+ align-items: start;
1188
+ }
1189
+ .xb-num {
1190
+ grid-row: 1 / span 4;
1191
+ align-self: start;
1192
+ }
1193
+ .xb-row {
1194
+ padding-block: 6px;
1195
+ box-shadow: var(--pretui-shadow-hairline, 0 0 0 1px var(--border));
1196
+ }
1197
+ /* the narrow cut stacks the notation instead of gutter-aligning it,
1198
+ because 5.25em of gutter is a third of the pane at this width */
1199
+ .xb-msg,
1200
+ .xb-issue {
1201
+ grid-template-columns: minmax(0, 1fr);
1202
+ row-gap: 0;
1203
+ }
1204
+ .xb-note-mark {
1205
+ justify-self: start;
1206
+ }
1207
+ }
1208
+ }
1209
+ </style>
1210
+ </template>
1211
+ }