@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,1161 @@
1
+ // Pretui — data-component: the foundation base class every data-rich
2
+ // component in the kit extends (Chart, Sheet, Table, DataGrid, Feed, Tree,
3
+ // Masonry, Board, Lookup). It is state and contract, not layout: one shared,
4
+ // tested answer to loading, emptiness, failure, selection, activation and
5
+ // sort, so nine components stop reinventing five of them each.
6
+ //
7
+ // THREE ENTRY POINTS, in the order you should reach for them:
8
+ // • `DataComponent<T>` — extend it when your component's args ARE the data
9
+ // args. You inherit the template, the chrome and the whole API.
10
+ // • `DataSource<T>` — hold one when your component needs args or blocks
11
+ // of its own (`@columns`, `@series`, a `<:cell>` block). Identical state
12
+ // machine, one line: `data = new DataSource<T>(() => this.args)`.
13
+ // • `DataShell` — the chrome alone, pointed at either of the above.
14
+ //
15
+ // PORTED FROM — three lineages, none of them adopted whole:
16
+ // • TanStack Table's row model (getRowId, sorting state, row selection as
17
+ // a keyed record) — the interaction half.
18
+ // • TanStack Query / ember-concurrency task state — the status half
19
+ // (idle → loading → settled, with the error captured rather than thrown).
20
+ // • The kit's own Feed/DataGrid, which had grown private, incompatible
21
+ // copies of both halves.
22
+ //
23
+ // WHAT THIS DOES BETTER THAN ITS INSPIRATION (the acceptance test):
24
+ //
25
+ // 1. `empty` is a first-class status, never a boolean. TanStack Table has
26
+ // no notion of emptiness at all, so every consumer writes
27
+ // `{{#if (eq rows.length 0)}}No results{{/if}}` — which renders "No
28
+ // results" while the first fetch is still in flight. Here the status is
29
+ // DERIVED and `loading` outranks `empty`, so that bug is unwritable.
30
+ // 2. The row type is generic, end to end. TanStack types rows as
31
+ // `TData` but the kit's own collections had decayed to
32
+ // `Record<string, any>` (DataGrid), `[key: string]: unknown` (Feed) and
33
+ // `readonly unknown[]` (Masonry) — every caller narrowing by hand inside
34
+ // the block. `T` flows from `@rows` straight into the yielded block.
35
+ // 3. It does not own the fetch. TanStack Query needs a QueryClient and a
36
+ // provider; this takes a plain `() => Promise<readonly T[]>` and knows
37
+ // nothing about HTTP, cache keys or retries-with-backoff. That also
38
+ // keeps it inside the realm's no-timer law — there is no debounce here,
39
+ // because a debounce is a timer and belongs to the caller.
40
+ // 4. A stale response can never win. React's classic out-of-order-response
41
+ // bug (documented in its own docs as "race conditions") is closed by a
42
+ // monotonic request token: every settle re-checks that it is still the
43
+ // newest request before it writes a single tracked field.
44
+ // 5. Accessibility is IN the base class, which is the entire argument for
45
+ // having one. `aria-busy` while loading, and a polite live region that
46
+ // announces the RESULT COUNT when it settles — the thing that makes an
47
+ // async table usable with a screen reader and that essentially no table
48
+ // library ships. It announces on settle, never per keystroke, because
49
+ // the announcement string is derived only from settled state.
50
+ // 6. Errors are text, not a red border. The failure surfaces through
51
+ // <Alert> with a title, the message, a retry button and (when the load
52
+ // is keyed) a <BrokenLink> naming the dataset that would not come.
53
+ //
54
+ // DROPPED ON PURPOSE (Law 7 — name the edges rather than half-ship them):
55
+ // • Pagination / virtualization. <Pagination> exists and
56
+ // windowing is the host's job; a base class that also owned the window
57
+ // would own layout, which is exactly what this must not do.
58
+ // • Filtering and grouping. Both are pure functions over `@rows` that the
59
+ // caller can apply before handing them over, and a filter model that
60
+ // cannot be expressed as `rows.filter(...)` is a query, not a component.
61
+ // • Debounce / polling / retry-with-backoff. All three are timers (realm
62
+ // law), and all three are policy the caller owns.
63
+ // • Optimistic mutation. This is a reading contract; writing is not here.
64
+ import Component from '@glimmer/component';
65
+ import { cached, tracked } from '@glimmer/tracking';
66
+ import { on } from '@ember/modifier';
67
+ // type-only gap: 'ember-modifier' resolves at realm runtime; glint can't see
68
+ // it here (accepted parse baseline, same as overlay.gts / structure-data.gts)
69
+ import { modifier } from 'ember-modifier';
70
+ import { Button } from './components/button';
71
+ import { Alert } from './components/alert';
72
+ import { BrokenLink } from './components/broken-link';
73
+ import { Spinner } from './components/spinner';
74
+ import { EmptyState } from './components/empty-state';
75
+ import { Skeleton } from './components/skeleton';
76
+
77
+ // ── The shared collection vocabulary ─────────────────────────────────────
78
+ // Exported as named primitives rather than buried, because every collection
79
+ // in the kit keys rows and every one of them should key them the same way.
80
+
81
+ /**
82
+ * The five states a dataset can be in. Derived, never assigned: see
83
+ * `DataComponent#status`. `empty` is distinguished from `loading` so that
84
+ * "No results" can never render over an in-flight request.
85
+ */
86
+ export type DataStatus = 'idle' | 'loading' | 'ready' | 'empty' | 'error';
87
+
88
+ /** What a row is keyed by. Strings and numbers only — a key is compared with
89
+ * `===` and must survive being written into a `data-` attribute. */
90
+ export type RowKey = string | number;
91
+
92
+ /** Caller-supplied key accessor: stable identity for one row. */
93
+ export type RowKeyFn<T> = (row: T, index: number) => RowKey;
94
+
95
+ /** The dataset loader. Deliberately knows nothing about HTTP: it is any
96
+ * function returning a promise of rows. */
97
+ export type DataLoad<T> = () => Promise<readonly T[]> | readonly T[];
98
+
99
+ /** How many rows may be selected at once. */
100
+ export type SelectionMode = 'none' | 'single' | 'multi';
101
+
102
+ /** Sort direction. */
103
+ export type SortDir = 'asc' | 'desc';
104
+
105
+ /** The current sort: a column key plus a direction. `null` means unsorted,
106
+ * which is a third state the asc/desc cycle passes through. */
107
+ export interface SortState {
108
+ /** the field/column key being sorted on */
109
+ key: string;
110
+ /** ascending or descending */
111
+ dir: SortDir;
112
+ }
113
+
114
+ /**
115
+ * THE documented key fallback, shared by every collection in the kit.
116
+ *
117
+ * 1. `@key` accessor if the caller supplied one — always prefer this.
118
+ * 2. otherwise the row's own `id` when it is a string or number (the shape
119
+ * Boxel cards, `FeedItem` and every fixture in examples.gts already have);
120
+ * 3. otherwise the row's 0-based index.
121
+ *
122
+ * Branch 3 is a real, documented compromise, not a silent one: an
123
+ * index-keyed row's identity MOVES when the collection is re-sorted or
124
+ * spliced, so selection and the active row follow the position rather than
125
+ * the record. Any collection whose rows can be re-ordered should pass `@key`.
126
+ */
127
+ export function defaultRowKey(row: unknown, index: number): RowKey {
128
+ if (row && typeof row === 'object') {
129
+ let id = (row as Record<string, unknown>)['id'];
130
+ if (typeof id === 'string' || typeof id === 'number') {
131
+ return id;
132
+ }
133
+ }
134
+ return index;
135
+ }
136
+
137
+ /** Reads one field off a row for the default comparator. Rows are generic,
138
+ * so the read is an explicit widening rather than an `any`. */
139
+ function readField(row: unknown, key: string): unknown {
140
+ return row && typeof row === 'object'
141
+ ? (row as Record<string, unknown>)[key]
142
+ : undefined;
143
+ }
144
+
145
+ /** Total order over unknown values: numbers numerically, everything else by
146
+ * locale-free string compare, with null/undefined last in either direction.
147
+ * Anything richer (dates as objects, money, nested paths) wants `@comparator`. */
148
+ function compareValues(a: unknown, b: unknown): number {
149
+ let aMissing = a === undefined || a === null;
150
+ let bMissing = b === undefined || b === null;
151
+ if (aMissing || bMissing) {
152
+ return aMissing && bMissing ? 0 : aMissing ? 1 : -1;
153
+ }
154
+ if (typeof a === 'number' && typeof b === 'number') {
155
+ return a - b;
156
+ }
157
+ if (typeof a === 'boolean' && typeof b === 'boolean') {
158
+ return Number(a) - Number(b);
159
+ }
160
+ let as = String(a);
161
+ let bs = String(b);
162
+ return as < bs ? -1 : as > bs ? 1 : 0;
163
+ }
164
+
165
+ /** Everything is an Error by the time it reaches tracked state — a thrown
166
+ * string, a rejected `{ message }`, or a genuine Error. Never swallowed. */
167
+ function toError(thrown: unknown): Error {
168
+ if (thrown instanceof Error) {
169
+ return thrown;
170
+ }
171
+ if (typeof thrown === 'string') {
172
+ return new Error(thrown);
173
+ }
174
+ let message = readField(thrown, 'message');
175
+ return new Error(typeof message === 'string' ? message : 'Load failed');
176
+ }
177
+
178
+ // ── The load modifier ────────────────────────────────────────────────────
179
+ // Loading is kicked off from a modifier rather than a getter or a constructor
180
+ // for two reasons: a getter with a side effect is a backtracking re-render
181
+ // waiting to happen, and a constructor cannot re-run when the load key
182
+ // changes. The extra positionals are not read — they exist so that changing
183
+ // `@load`, `@loadKey`, or the reload epoch re-runs the modifier, which is
184
+ // what "re-load when the key changes" means with no timer and no observer.
185
+
186
+ /** Re-runs `beginLoad()` whenever the loader, its key, or the reload epoch
187
+ * changes. Exported so a subclass that writes its own `<template>` (and
188
+ * therefore does not render `<DataShell>`) can still wire the loader. */
189
+ export const dataLoad = modifier(
190
+ (
191
+ _el: Element,
192
+ [state, _load, _key, _epoch]: [DataState, unknown, unknown, number],
193
+ ) => {
194
+ state.beginLoad();
195
+ },
196
+ );
197
+
198
+ // ── The shell contract ───────────────────────────────────────────────────
199
+
200
+ /**
201
+ * The narrow, non-generic slice of a data component that the shared chrome
202
+ * needs. `DataComponent` implements it; a component that cannot extend
203
+ * `DataComponent` (because it already extends something else) can implement
204
+ * this instead and still wear the same chrome.
205
+ */
206
+ export interface DataState {
207
+ /** derived status — see `DataStatus` */
208
+ readonly status: DataStatus;
209
+ /** `'true'` while a request is in flight, for `aria-busy` */
210
+ readonly busy: 'true' | 'false';
211
+ /** the polite live-region text; empty while idle or loading */
212
+ readonly announcement: string;
213
+ /** human-readable failure message, `''` when there is none */
214
+ readonly errorMessage: string;
215
+ /** printable form of the load key, for the BrokenLink reference */
216
+ readonly loadRef: string | undefined;
217
+ /** true when there is a loader to retry with */
218
+ readonly canRetry: boolean;
219
+ /** dependency handle for the load modifier — never called by the shell */
220
+ readonly loadFn: unknown;
221
+ /** dependency handle for the load modifier — never called by the shell */
222
+ readonly loadKey: unknown;
223
+ /** bumped by `reload()`; re-runs the load modifier */
224
+ readonly epoch: number;
225
+ /** starts a load if one is warranted; safe to call on every render */
226
+ beginLoad(): void;
227
+ /** discards any in-flight request and starts a fresh one */
228
+ reload(): void;
229
+ }
230
+
231
+ export interface DataShellSignature {
232
+ Args: {
233
+ /** the data component (or any `DataState`) whose chrome this is */
234
+ state: DataState;
235
+ /** true when the host was given a `loading` block to forward */
236
+ hasLoading?: boolean;
237
+ /** true when the host was given an `empty` block to forward */
238
+ hasEmpty?: boolean;
239
+ /** true when the host was given an `error` block to forward */
240
+ hasError?: boolean;
241
+ /** headline for the default empty state */
242
+ emptyTitle?: string;
243
+ /** supporting line for the default empty state */
244
+ emptyMessage?: string;
245
+ /** visible label beside the default loading spinner (default 'Loading') */
246
+ loadingLabel?: string;
247
+ /** how many skeleton lines the default loading state draws (default 3) */
248
+ skeletonRows?: number;
249
+ /** headline for the default error state (default 'Could not load') */
250
+ errorTitle?: string;
251
+ };
252
+ Blocks: {
253
+ /** the settled, non-empty content */
254
+ default: [];
255
+ /** replaces the default spinner + skeleton */
256
+ loading: [];
257
+ /** replaces the default EmptyState */
258
+ empty: [];
259
+ /** replaces the default Alert */
260
+ error: [];
261
+ };
262
+ Element: HTMLDivElement;
263
+ }
264
+
265
+ /**
266
+ * The small amount of shared chrome that goes with the base class: the
267
+ * `aria-busy` root, the polite live region, and the four state slots. It is a
268
+ * separate component precisely so a subclass that writes its own
269
+ * `<template>` keeps every accessibility guarantee without copying it.
270
+ */
271
+ export class DataShell extends Component<DataShellSignature> {
272
+ // Three booleans rather than an `eq` helper: the kit vendors no helper
273
+ // package (Law 9) and a getter reads better in the branch than a curly.
274
+ get isLoading(): boolean {
275
+ return this.args.state.status === 'loading';
276
+ }
277
+ get isError(): boolean {
278
+ return this.args.state.status === 'error';
279
+ }
280
+ get isEmpty(): boolean {
281
+ return this.args.state.status === 'empty';
282
+ }
283
+ get skeletonRows(): number[] {
284
+ let n = Math.max(1, Math.floor(this.args.skeletonRows ?? 3));
285
+ let out: number[] = [];
286
+ for (let i = 0; i < n; i++) {
287
+ out.push(i);
288
+ }
289
+ return out;
290
+ }
291
+ get loadingLabel(): string {
292
+ return this.args.loadingLabel ?? 'Loading';
293
+ }
294
+ get emptyTitle(): string {
295
+ return this.args.emptyTitle ?? 'Nothing to show yet';
296
+ }
297
+ get emptyMessage(): string {
298
+ return (
299
+ this.args.emptyMessage ??
300
+ 'No records match this view. Adjust the filters, or check back once the desk has logged something.'
301
+ );
302
+ }
303
+ get errorTitle(): string {
304
+ return this.args.errorTitle ?? 'Could not load';
305
+ }
306
+ retry = () => {
307
+ this.args.state.reload();
308
+ };
309
+
310
+ <template>
311
+ <div
312
+ class='pretui-data'
313
+ data-test-pretui-data
314
+ data-status={{@state.status}}
315
+ aria-busy={{@state.busy}}
316
+ {{dataLoad @state @state.loadFn @state.loadKey @state.epoch}}
317
+ ...attributes
318
+ >
319
+ {{! The live region is ALWAYS in the DOM and always empty-to-start:
320
+ an aria-live element inserted with text already in it is not
321
+ reliably announced. Its text changes only when a load settles,
322
+ so sorting, hovering and typing produce no announcement. }}
323
+ <p class='pretui-sr' role='status' data-test-pretui-data-live>
324
+ {{@state.announcement}}
325
+ </p>
326
+
327
+ {{#if this.isLoading}}
328
+ {{#if @hasLoading}}
329
+ {{yield to='loading'}}
330
+ {{else}}
331
+ <div class='pretui-data-loading'>
332
+ <span class='pretui-data-loading-head'>
333
+ <Spinner />
334
+ <span>{{this.loadingLabel}}</span>
335
+ </span>
336
+ {{#each this.skeletonRows key='@index' as |row|}}
337
+ <span class='pretui-data-skeleton' data-row={{row}}>
338
+ <Skeleton @width='34%' @height='11px' />
339
+ <Skeleton @height='11px' />
340
+ </span>
341
+ {{/each}}
342
+ </div>
343
+ {{/if}}
344
+ {{else if this.isError}}
345
+ {{#if @hasError}}
346
+ {{yield to='error'}}
347
+ {{else}}
348
+ <Alert @tone='danger' @title={{this.errorTitle}}>
349
+ <:default>
350
+ <p class='pretui-data-errmsg'>{{@state.errorMessage}}</p>
351
+ {{#if @state.loadRef}}
352
+ <BrokenLink
353
+ @label='dataset unavailable'
354
+ @refId={{@state.loadRef}}
355
+ />
356
+ {{/if}}
357
+ </:default>
358
+ <:action>
359
+ {{#if @state.canRetry}}
360
+ <Button
361
+ @appearance='outlined'
362
+ @size='s'
363
+ data-test-pretui-data-retry
364
+ {{on 'click' this.retry}}
365
+ >Try again</Button>
366
+ {{/if}}
367
+ </:action>
368
+ </Alert>
369
+ {{/if}}
370
+ {{else if this.isEmpty}}
371
+ {{#if @hasEmpty}}
372
+ {{yield to='empty'}}
373
+ {{else}}
374
+ <EmptyState
375
+ @title={{this.emptyTitle}}
376
+ @message={{this.emptyMessage}}
377
+ />
378
+ {{/if}}
379
+ {{else}}
380
+ {{yield}}
381
+ {{/if}}
382
+ </div>
383
+ <style scoped>
384
+ .pretui-data {
385
+ container-type: inline-size;
386
+ display: block;
387
+ min-width: 0;
388
+ color: var(--foreground);
389
+ font-size: var(--text-ui-md, 12.5px);
390
+ letter-spacing: var(--track-ui, 0.01em);
391
+ }
392
+ .pretui-sr {
393
+ position: absolute;
394
+ width: 1px;
395
+ height: 1px;
396
+ overflow: hidden;
397
+ clip: rect(0 0 0 0);
398
+ white-space: nowrap;
399
+ }
400
+ .pretui-data-loading {
401
+ display: grid;
402
+ gap: var(--pretui-data-gap, var(--space-3, 8px));
403
+ }
404
+ .pretui-data-loading-head {
405
+ display: flex;
406
+ align-items: center;
407
+ gap: var(--space-3, 8px);
408
+ color: var(--muted-foreground);
409
+ font-family: var(--font-mono);
410
+ font-size: var(--text-ui-sm, 11.5px);
411
+ letter-spacing: var(--track-eyebrow, 0.08em);
412
+ text-transform: uppercase;
413
+ }
414
+ .pretui-data-skeleton {
415
+ display: grid;
416
+ gap: 7px;
417
+ padding: var(--space-4, 11px) var(--space-5, 14px);
418
+ border-radius: var(--radius-surface, 10px);
419
+ background: var(--card);
420
+ box-shadow: var(--pretui-shadow-hairline, 0 0 0 1px var(--border));
421
+ }
422
+ .pretui-data-errmsg {
423
+ margin: 0 0 var(--space-2, 6px);
424
+ max-width: 60ch;
425
+ }
426
+ /* Unnamed container query only (a named one silently drops every
427
+ later rule in the transpiled stylesheet). It resolves against the
428
+ nearest ANCESTOR container — .pretui-data above — so it styles the
429
+ children, never the container element itself. */
430
+ @container (max-width: 24rem) {
431
+ .pretui-data-skeleton {
432
+ padding: var(--space-3, 8px) var(--space-4, 11px);
433
+ }
434
+ }
435
+ </style>
436
+ </template>
437
+ }
438
+
439
+ // ── The base class ───────────────────────────────────────────────────────
440
+
441
+ /**
442
+ * Everything a data component accepts. Subclasses widen this through the
443
+ * `Extra` type parameter rather than re-declaring it.
444
+ */
445
+ export interface DataArgs<T> {
446
+ /** Eager rows. Supply EITHER this or `@load`, never both — when `@rows` is
447
+ * present it is the single source of truth and `@load` is never invoked. */
448
+ rows?: readonly T[];
449
+ /** Async loader, invoked and awaited by the component. It is any function
450
+ * returning rows or a promise of rows: the component knows nothing about
451
+ * HTTP, so authentication, caching and request cancellation stay yours. */
452
+ load?: DataLoad<T>;
453
+ /** Re-run `@load` whenever this value changes (a query string, a page
454
+ * number, a card id). Compared by identity. There is NO debounce — that is
455
+ * a timer, and the realm forbids timers; debounce this value yourself. */
456
+ loadKey?: unknown;
457
+ /** Stable identity for a row. Strongly recommended whenever rows can be
458
+ * re-ordered — see `defaultRowKey` for the fallback and its consequences. */
459
+ key?: RowKeyFn<T>;
460
+ /** `'none'` (default), `'single'` or `'multi'`. */
461
+ selectionMode?: SelectionMode;
462
+ /** Controlled selection. Omit for uncontrolled (the component keeps its
463
+ * own), pass an array to drive it from outside. */
464
+ selected?: readonly RowKey[];
465
+ /** Initial selection for the uncontrolled case. */
466
+ defaultSelected?: readonly RowKey[];
467
+ /** Fires with the next selection on every change, controlled or not. */
468
+ onSelectionChange?: (keys: RowKey[], rows: T[]) => void;
469
+ /** Controlled active/highlighted row (the keyboard cursor, not selection).
470
+ * Omit for uncontrolled; pass `null` to force "no active row". */
471
+ activeKey?: RowKey | null;
472
+ /** Initial active row for the uncontrolled case. */
473
+ defaultActiveKey?: RowKey | null;
474
+ /** Fires with the next active row on every change. */
475
+ onActiveChange?: (key: RowKey | null, row: T | undefined) => void;
476
+ /** Controlled sort. Omit for uncontrolled; `null` means unsorted. */
477
+ sort?: SortState | null;
478
+ /** Initial sort for the uncontrolled case. */
479
+ defaultSort?: SortState | null;
480
+ /** Fires with the next sort on every change, including the `null` step. */
481
+ onSortChange?: (sort: SortState | null) => void;
482
+ /** Replaces the default field comparator. Receives the active sort so one
483
+ * function can handle every column. Return <0, 0 or >0 for ASCENDING order;
484
+ * the component applies the direction. */
485
+ comparator?: (a: T, b: T, sort: SortState) => number;
486
+ /** Accessible name for the collection, used in the count announcement
487
+ * ("6 lots" rather than "6 results"). Singular/plural handled below. */
488
+ itemNoun?: string;
489
+ /** Silences the polite count announcement. Reach for this only when the
490
+ * host already announces the same result elsewhere — double announcements
491
+ * are worse than none. */
492
+ silentCount?: boolean;
493
+ /** Headline for the default empty state. */
494
+ emptyTitle?: string;
495
+ /** Supporting line for the default empty state. */
496
+ emptyMessage?: string;
497
+ /** Label beside the default loading spinner. */
498
+ loadingLabel?: string;
499
+ /** Skeleton line count for the default loading state (default 3). */
500
+ skeletonRows?: number;
501
+ }
502
+
503
+ /** The interaction surface yielded to the default block alongside the rows.
504
+ * Everything here is safe to call from a template. */
505
+ export interface DataApi<T> {
506
+ /** derived status */
507
+ status: DataStatus;
508
+ /** number of rows currently rendered */
509
+ count: number;
510
+ /** failure message, `''` when there is none */
511
+ errorMessage: string;
512
+ /** the key this component would use for a row */
513
+ keyFor: (row: T, index: number) => RowKey;
514
+ /** current selection mode */
515
+ selectionMode: SelectionMode;
516
+ /** keys of the selected rows */
517
+ selectedKeys: readonly RowKey[];
518
+ /** the selected rows themselves */
519
+ selectedRows: T[];
520
+ /** is this row selected? */
521
+ isSelected: (row: T, index: number) => boolean;
522
+ /** toggle a row per the selection mode (no-op when mode is `'none'`) */
523
+ toggleSelected: (row: T, index: number) => void;
524
+ /** is every visible row selected? */
525
+ allSelected: boolean;
526
+ /** toggle every visible row, keeping keys outside the view (multi only) */
527
+ selectAll: () => void;
528
+ /** drop the whole selection */
529
+ clearSelection: () => void;
530
+ /** key of the active/highlighted row */
531
+ activeKey: RowKey | null;
532
+ /** is this row the active one? */
533
+ isActive: (row: T, index: number) => boolean;
534
+ /** make this row active (`null` clears) */
535
+ setActive: (row: T | null, index: number) => void;
536
+ /** current sort */
537
+ sort: SortState | null;
538
+ /** cycle a column asc → desc → unsorted */
539
+ toggleSort: (key: string) => void;
540
+ /** `'ascending' | 'descending' | 'none'`, ready for `aria-sort` */
541
+ ariaSort: (key: string) => 'ascending' | 'descending' | 'none';
542
+ /** discard any in-flight request and load again */
543
+ reload: () => void;
544
+ }
545
+
546
+ export interface DataBlocks<T> {
547
+ /** the settled rows plus the interaction API */
548
+ default: [rows: T[], data: DataApi<T>];
549
+ /** replaces the default spinner + skeleton */
550
+ loading: [];
551
+ /** replaces the default EmptyState */
552
+ empty: [];
553
+ /** replaces the default Alert */
554
+ error: [];
555
+ }
556
+
557
+ export interface DataComponentSignature<
558
+ T,
559
+ El extends Element = HTMLDivElement,
560
+ > {
561
+ Args: DataArgs<T>;
562
+ Blocks: DataBlocks<T>;
563
+ Element: El;
564
+ }
565
+
566
+ /** The expanded-rows args DataTable and List share. */
567
+ export interface ExpansionArgs {
568
+ /** controlled expanded rows */
569
+ expandedKeys?: readonly RowKey[];
570
+ /** uncontrolled seed */
571
+ defaultExpandedKeys?: readonly RowKey[];
572
+ /** fires with the next expanded set, in both modes */
573
+ onExpandedChange?: (keys: RowKey[]) => void;
574
+ }
575
+
576
+ /** One row's expansion, everything its expander and detail need. */
577
+ export interface ExpansionView {
578
+ expanded: boolean;
579
+ expandedFlag: 'true' | 'false';
580
+ /** the detail region's id */
581
+ detailId: string;
582
+ /** the detail id while it exists — a collapsed row's detail is not rendered */
583
+ controls: string | undefined;
584
+ /** "Expand {label}" / "Collapse {label}" */
585
+ expandLabel: string;
586
+ }
587
+
588
+ /**
589
+ * Which rows are expanded, by key, and the ARIA wiring for each row's
590
+ * expander. Controlled when `@expandedKeys` is passed (the host never moves
591
+ * itself, it only reports), uncontrolled otherwise, seeded from
592
+ * `@defaultExpandedKeys`. Takes a thunk for the same reason DataSource does:
593
+ * every read goes through the live args. DataTable and List both use it, so
594
+ * the state rule and the ARIA contract cannot drift between them.
595
+ */
596
+ export class ExpansionState {
597
+ constructor(
598
+ private readArgs: () => ExpansionArgs,
599
+ private idPrefix: string,
600
+ ) {}
601
+
602
+ @tracked private internal: readonly RowKey[] | undefined = undefined;
603
+
604
+ get keys(): readonly RowKey[] {
605
+ let a = this.readArgs();
606
+ if (a.expandedKeys !== undefined) {
607
+ return a.expandedKeys;
608
+ }
609
+ return this.internal ?? a.defaultExpandedKeys ?? [];
610
+ }
611
+
612
+ /** A Set keeps 1 and '1' distinct, as `includes` does. */
613
+ @cached
614
+ get keySet(): Set<RowKey> {
615
+ return new Set(this.keys);
616
+ }
617
+
618
+ isExpanded = (key: RowKey): boolean => this.keySet.has(key);
619
+
620
+ /** The detail id is built from the row's position: a key can hold
621
+ * spaces, and 1 and '1' are distinct keys. */
622
+ viewFor(key: RowKey, index: number, label: string): ExpansionView {
623
+ let expanded = this.isExpanded(key);
624
+ let detailId = this.idPrefix + '-d-' + String(index);
625
+ return {
626
+ expanded,
627
+ expandedFlag: expanded ? 'true' : 'false',
628
+ detailId,
629
+ controls: expanded ? detailId : undefined,
630
+ expandLabel: (expanded ? 'Collapse ' : 'Expand ') + label,
631
+ };
632
+ }
633
+
634
+ toggle = (key: RowKey) => {
635
+ let current = this.keys;
636
+ let next = current.includes(key)
637
+ ? current.filter((k) => k !== key)
638
+ : [...current, key];
639
+ let a = this.readArgs();
640
+ if (a.expandedKeys === undefined) {
641
+ this.internal = next;
642
+ }
643
+ a.onExpandedChange?.([...next]);
644
+ };
645
+ }
646
+
647
+ /**
648
+ * THE state machine, as a plain class rather than a component.
649
+ *
650
+ * It is separate from `DataComponent` for a reason that is worth stating,
651
+ * because it is the difference between a base class that only serves its own
652
+ * demo and one the whole kit can use. Glint infers a component's row type
653
+ * from its `Args` type — and inference dies the moment `Args` is anything
654
+ * but a bare `DataArgs<T>`: an intersection with an `Extra` type parameter
655
+ * (`DataArgs<T> & Extra`) makes every caller's `T` collapse to `{}`. So a
656
+ * base class cannot both infer `T` and let subclasses add their own args.
657
+ *
658
+ * Inheritance therefore covers the plain case, and DELEGATION covers the
659
+ * rest: a component with its own signature — `@columns`, `@series`, extra
660
+ * blocks, a different Element — holds a DataSource, points `<DataShell>` at
661
+ * it, and gets the identical state machine:
662
+ *
663
+ * class KitTable<T> extends Component<KitTableSignature<T>> {
664
+ * data = new DataSource<T>(() => this.args);
665
+ * <template><DataShell @state={{this.data}}> … </DataShell></template>
666
+ * }
667
+ *
668
+ * The constructor takes a THUNK, not the args object, so every read goes
669
+ * through the live `this.args` and autotracking stays intact.
670
+ */
671
+ export class DataSource<T> implements DataState {
672
+ constructor(private readArgs: () => DataArgs<T>) {}
673
+
674
+ /** the host's current args — read through the thunk on every access so
675
+ * tracked argument changes are observed normally */
676
+ private get a(): DataArgs<T> {
677
+ return this.readArgs();
678
+ }
679
+
680
+ // ── load state ─────────────────────────────────────────────────────────
681
+ @tracked private loadedRows: readonly T[] = [];
682
+ @tracked private inFlight = false;
683
+ @tracked private settled = false;
684
+ @tracked private failure: Error | undefined = undefined;
685
+ @tracked epoch = 0;
686
+
687
+ // Plain (untracked) fields on purpose: the request token is compared, never
688
+ // rendered, and reading it during a render would make every settle a
689
+ // re-render dependency.
690
+ private requestToken = 0;
691
+
692
+ // ── interaction state ──────────────────────────────────────────────────
693
+ // `undefined` means "the caller's @default* still applies"; anything else
694
+ // is a real uncontrolled value, including an empty selection and a null
695
+ // sort. Seeded lazily rather than in the field initialiser because field
696
+ // initialisers run BEFORE the constructor body, where `readArgs` is
697
+ // assigned — reading args here would be a crash, not a bug you find later.
698
+ @tracked private internalSelected: readonly RowKey[] | undefined = undefined;
699
+ @tracked private internalActive: RowKey | null | undefined = undefined;
700
+ @tracked private internalSort: SortState | null | undefined = undefined;
701
+
702
+ // ── loading ────────────────────────────────────────────────────────────
703
+
704
+ get loadFn(): unknown {
705
+ return this.a.load;
706
+ }
707
+ get loadKey(): unknown {
708
+ return this.a.loadKey;
709
+ }
710
+ get loadRef(): string | undefined {
711
+ let key = this.a.loadKey;
712
+ return typeof key === 'string' || typeof key === 'number'
713
+ ? String(key)
714
+ : undefined;
715
+ }
716
+ get canRetry(): boolean {
717
+ return this.a.load !== undefined && this.a.rows === undefined;
718
+ }
719
+
720
+ /**
721
+ * Called by the `dataLoad` modifier on insert and on every change to
722
+ * `@load` / `@loadKey` / `epoch`. Writes NO tracked state synchronously —
723
+ * the modifier runs inside the render transaction, and a tracked write
724
+ * there is the backtracking-rerender assertion.
725
+ */
726
+ beginLoad = (): void => {
727
+ let load = this.a.load;
728
+ // A new token retires every earlier request, in flight or not. This one
729
+ // line is the whole stale-response guard: the token is the only thing a
730
+ // settling promise is allowed to write through.
731
+ let token = ++this.requestToken;
732
+ if (!load || this.a.rows !== undefined) {
733
+ return;
734
+ }
735
+ // Fire-and-forget by design; `runLoad` catches everything, so the promise
736
+ // it returns can never reject and no rejection can go unhandled.
737
+ void this.runLoad(load, token);
738
+ };
739
+
740
+ /** Discards whatever is in flight and loads again. */
741
+ reload = (): void => {
742
+ this.epoch = this.epoch + 1;
743
+ };
744
+
745
+ private async runLoad(load: DataLoad<T>, token: number): Promise<void> {
746
+ // One microtask of distance from the render transaction that scheduled
747
+ // us — after this line, tracked writes are safe. Not a timer.
748
+ await Promise.resolve();
749
+ if (token !== this.requestToken) {
750
+ return;
751
+ }
752
+ this.inFlight = true;
753
+ this.failure = undefined;
754
+ try {
755
+ let rows = await load();
756
+ // STALE GUARD. A slower earlier request resolving after a faster later
757
+ // one lands here with an outdated token and writes nothing.
758
+ if (token !== this.requestToken) {
759
+ return;
760
+ }
761
+ this.loadedRows = rows ?? [];
762
+ this.failure = undefined;
763
+ } catch (thrown) {
764
+ if (token !== this.requestToken) {
765
+ return;
766
+ }
767
+ // Captured, never swallowed: it becomes the error status and the
768
+ // message the reader sees.
769
+ this.failure = toError(thrown);
770
+ } finally {
771
+ // `return` inside `try` runs this too, so the guard is repeated: only
772
+ // the newest request may flip the component out of `loading`.
773
+ if (token === this.requestToken) {
774
+ this.inFlight = false;
775
+ this.settled = true;
776
+ }
777
+ }
778
+ }
779
+
780
+ // ── status ─────────────────────────────────────────────────────────────
781
+
782
+ /**
783
+ * The single readable state. DERIVED — nothing assigns it:
784
+ * error a captured failure outranks everything, so a stale row set can
785
+ * never read as success;
786
+ * loading a request is in flight, OR one is about to start and has never
787
+ * settled (which is what closes the empty-flash on first paint);
788
+ * ready settled with rows;
789
+ * empty settled with none — only ever reachable when nothing is
790
+ * loading, which is the bug this ordering exists to prevent;
791
+ * idle no rows and no loader: nobody has asked for anything.
792
+ */
793
+ get status(): DataStatus {
794
+ // eager @rows are the source of truth the moment they arrive, whatever an
795
+ // earlier @load left behind
796
+ if (this.a.rows !== undefined) {
797
+ return this.a.rows.length > 0 ? 'ready' : 'empty';
798
+ }
799
+ if (this.failure) {
800
+ return 'error';
801
+ }
802
+ if (this.inFlight) {
803
+ return 'loading';
804
+ }
805
+ if (this.a.load === undefined) {
806
+ return 'idle';
807
+ }
808
+ if (!this.settled) {
809
+ return 'loading';
810
+ }
811
+ return this.loadedRows.length > 0 ? 'ready' : 'empty';
812
+ }
813
+
814
+ get busy(): 'true' | 'false' {
815
+ return this.status === 'loading' ? 'true' : 'false';
816
+ }
817
+
818
+ get errorMessage(): string {
819
+ return this.a.rows === undefined && this.failure
820
+ ? this.failure.message
821
+ : '';
822
+ }
823
+
824
+ /** The rows as given: `@rows` when eager, the loaded set otherwise. */
825
+ get rows(): readonly T[] {
826
+ return this.a.rows ?? this.loadedRows;
827
+ }
828
+
829
+ /** The rows as rendered: sorted when a sort is active. Never mutates the
830
+ * caller's array. */
831
+ get visibleRows(): T[] {
832
+ let rows = this.rows;
833
+ let sort = this.sort;
834
+ if (!sort) {
835
+ return rows.slice();
836
+ }
837
+ let dir = sort.dir === 'desc' ? -1 : 1;
838
+ // Annotated local: TS drops the `!sort` narrowing inside the closure.
839
+ let active: SortState = sort;
840
+ return rows.slice().sort((a, b) => this.compare(a, b, active, dir));
841
+ }
842
+
843
+ get count(): number {
844
+ return this.visibleRows.length;
845
+ }
846
+
847
+ /**
848
+ * The polite announcement. Derived ONLY from settled state, which is how
849
+ * "do not announce on every keystroke" is enforced structurally rather than
850
+ * by remembering to: while a request is in flight the text is empty, so a
851
+ * caller-driven filter that re-queries announces once when the new results
852
+ * land, not once per key. Identical text is not re-announced by assistive
853
+ * technology, so re-sorting the same 6 rows stays silent too.
854
+ */
855
+ get announcement(): string {
856
+ if (this.a.silentCount) {
857
+ return '';
858
+ }
859
+ let noun = this.a.itemNoun ?? 'result';
860
+ switch (this.status) {
861
+ case 'ready': {
862
+ let n = this.count;
863
+ return `${n} ${n === 1 ? noun : `${noun}s`}`;
864
+ }
865
+ case 'empty':
866
+ return `No ${noun}s`;
867
+ case 'error':
868
+ return `Could not load: ${this.errorMessage}`;
869
+ default:
870
+ return '';
871
+ }
872
+ }
873
+
874
+ // ── keys ───────────────────────────────────────────────────────────────
875
+
876
+ keyFor = (row: T, index: number): RowKey =>
877
+ this.a.key ? this.a.key(row, index) : defaultRowKey(row, index);
878
+
879
+ private rowsForKeys(keys: readonly RowKey[]): T[] {
880
+ let wanted = new Set<RowKey>(keys);
881
+ return this.visibleRows.filter((row, i) => wanted.has(this.keyFor(row, i)));
882
+ }
883
+
884
+ // ── selection ──────────────────────────────────────────────────────────
885
+
886
+ get selectionMode(): SelectionMode {
887
+ return this.a.selectionMode ?? 'none';
888
+ }
889
+
890
+ get selectedKeys(): readonly RowKey[] {
891
+ if (this.a.selected !== undefined) {
892
+ return this.a.selected;
893
+ }
894
+ return this.internalSelected ?? this.a.defaultSelected ?? [];
895
+ }
896
+
897
+ get selectedRows(): T[] {
898
+ return this.rowsForKeys(this.selectedKeys);
899
+ }
900
+
901
+ /** Every row the reader can see is selected; keys for rows outside the
902
+ * current view do not count either way. */
903
+ get allSelected(): boolean {
904
+ let visible = this.visibleRows;
905
+ if (visible.length === 0) {
906
+ return false;
907
+ }
908
+ let selected = new Set(this.selectedKeys);
909
+ return visible.every((row, index) => selected.has(this.keyFor(row, index)));
910
+ }
911
+
912
+ isSelected = (row: T, index: number): boolean =>
913
+ this.selectedKeys.includes(this.keyFor(row, index));
914
+
915
+ toggleSelected = (row: T, index: number): void => {
916
+ let mode = this.selectionMode;
917
+ if (mode === 'none') {
918
+ return;
919
+ }
920
+ let key = this.keyFor(row, index);
921
+ let current = this.selectedKeys;
922
+ let next: RowKey[];
923
+ if (mode === 'single') {
924
+ next = current.length === 1 && current[0] === key ? [] : [key];
925
+ } else {
926
+ next = current.includes(key)
927
+ ? current.filter((k) => k !== key)
928
+ : [...current, key];
929
+ }
930
+ this.commitSelection(next);
931
+ };
932
+
933
+ selectAll = (): void => {
934
+ if (this.selectionMode !== 'multi') {
935
+ return;
936
+ }
937
+ // toggles the rows in view; keys selected outside the view are kept
938
+ let visible = this.visibleRows.map((r, i) => this.keyFor(r, i));
939
+ let shown = new Set(visible);
940
+ let kept = this.selectedKeys.filter((key) => !shown.has(key));
941
+ this.commitSelection(this.allSelected ? kept : [...kept, ...visible]);
942
+ };
943
+
944
+ clearSelection = (): void => {
945
+ this.commitSelection([]);
946
+ };
947
+
948
+ private commitSelection(next: RowKey[]): void {
949
+ // Uncontrolled unless `@selected` was passed — the kit's Slider/Tabs/
950
+ // Comparison rule, applied identically so this feels native.
951
+ if (this.a.selected === undefined) {
952
+ this.internalSelected = next;
953
+ }
954
+ this.a.onSelectionChange?.(next, this.rowsForKeys(next));
955
+ }
956
+
957
+ // ── active row ─────────────────────────────────────────────────────────
958
+
959
+ get activeKey(): RowKey | null {
960
+ if (this.a.activeKey !== undefined) {
961
+ return this.a.activeKey;
962
+ }
963
+ return this.internalActive !== undefined
964
+ ? this.internalActive
965
+ : (this.a.defaultActiveKey ?? null);
966
+ }
967
+
968
+ isActive = (row: T, index: number): boolean =>
969
+ this.activeKey !== null && this.activeKey === this.keyFor(row, index);
970
+
971
+ setActive = (row: T | null, index: number): void => {
972
+ let next = row === null ? null : this.keyFor(row, index);
973
+ if (this.a.activeKey === undefined) {
974
+ this.internalActive = next;
975
+ }
976
+ this.a.onActiveChange?.(next, row ?? undefined);
977
+ };
978
+
979
+ // ── sort ───────────────────────────────────────────────────────────────
980
+
981
+ get sort(): SortState | null {
982
+ if (this.a.sort !== undefined) {
983
+ return this.a.sort;
984
+ }
985
+ return this.internalSort !== undefined
986
+ ? this.internalSort
987
+ : (this.a.defaultSort ?? null);
988
+ }
989
+
990
+ /** asc → desc → unsorted, the three-step cycle DataGrid already used. */
991
+ toggleSort = (key: string): void => {
992
+ let current = this.sort;
993
+ let next: SortState | null =
994
+ !current || current.key !== key
995
+ ? { key, dir: 'asc' }
996
+ : current.dir === 'asc'
997
+ ? { key, dir: 'desc' }
998
+ : null;
999
+ if (this.a.sort === undefined) {
1000
+ this.internalSort = next;
1001
+ }
1002
+ this.a.onSortChange?.(next);
1003
+ };
1004
+
1005
+ ariaSort = (key: string): 'ascending' | 'descending' | 'none' => {
1006
+ let current = this.sort;
1007
+ if (!current || current.key !== key) {
1008
+ return 'none';
1009
+ }
1010
+ return current.dir === 'asc' ? 'ascending' : 'descending';
1011
+ };
1012
+
1013
+ private compare(a: T, b: T, sort: SortState, dir: number): number {
1014
+ if (this.a.comparator) {
1015
+ return this.a.comparator(a, b, sort) * dir;
1016
+ }
1017
+ let x = readField(a, sort.key);
1018
+ let y = readField(b, sort.key);
1019
+ let xMissing = x === undefined || x === null;
1020
+ let yMissing = y === undefined || y === null;
1021
+ // missing values sort last in either direction, so they skip `dir`
1022
+ if (xMissing || yMissing) {
1023
+ return compareValues(x, y);
1024
+ }
1025
+ return compareValues(x, y) * dir;
1026
+ }
1027
+
1028
+ // ── the yielded hash ───────────────────────────────────────────────────
1029
+
1030
+ get data(): DataApi<T> {
1031
+ return {
1032
+ status: this.status,
1033
+ count: this.count,
1034
+ errorMessage: this.errorMessage,
1035
+ keyFor: this.keyFor,
1036
+ selectionMode: this.selectionMode,
1037
+ selectedKeys: this.selectedKeys,
1038
+ selectedRows: this.selectedRows,
1039
+ allSelected: this.allSelected,
1040
+ isSelected: this.isSelected,
1041
+ toggleSelected: this.toggleSelected,
1042
+ selectAll: this.selectAll,
1043
+ clearSelection: this.clearSelection,
1044
+ activeKey: this.activeKey,
1045
+ isActive: this.isActive,
1046
+ setActive: this.setActive,
1047
+ sort: this.sort,
1048
+ toggleSort: this.toggleSort,
1049
+ ariaSort: this.ariaSort,
1050
+ reload: this.reload,
1051
+ };
1052
+ }
1053
+ }
1054
+
1055
+ /**
1056
+ * The base class: a `DataSource` plus a template, for the common case where
1057
+ * a data component's args ARE the data args.
1058
+ *
1059
+ * class LotList extends DataComponent<Lot> {
1060
+ * <template>
1061
+ * <DataShell @state={{this.source}}> … </DataShell>
1062
+ * </template>
1063
+ * }
1064
+ *
1065
+ * Extend it and either take the inherited `<template>` (shell + yielded
1066
+ * rows + interaction API) or write your own and render
1067
+ * `<DataShell @state={{this.source}}>` inside it — that is how a subclass
1068
+ * keeps aria-busy, the live region and every state slot without copying a
1069
+ * line of it.
1070
+ *
1071
+ * A subclass inherits the whole `DataSource` surface by forwarding, listed
1072
+ * below. NAMED EDGE (Law 7): the ARG and BLOCK sets are fixed at
1073
+ * `DataArgs<T>` / `DataBlocks<T>`, because a generic type parameter anywhere
1074
+ * inside `Args` makes Glint infer every caller's row type as `{}`, and a
1075
+ * block map built from a generic intersection cannot be flattened at all. A
1076
+ * component that needs its OWN args or blocks does not subclass — it holds a
1077
+ * `DataSource` and points `<DataShell>` at it, which costs one line and
1078
+ * loses nothing.
1079
+ */
1080
+ export class DataComponent<
1081
+ T,
1082
+ El extends Element = HTMLDivElement,
1083
+ > extends Component<DataComponentSignature<T, El>> {
1084
+ /** the state machine — pass it to `<DataShell @state={{this.source}}>` */
1085
+ source = new DataSource<T>(() => this.args);
1086
+
1087
+ // Thin forwards so a subclass template reads `this.visibleRows` rather
1088
+ // than `this.source.visibleRows`. Arrow-valued members are forwarded by
1089
+ // reference (they are already bound to the source), getters by delegation.
1090
+ get status(): DataStatus {
1091
+ return this.source.status;
1092
+ }
1093
+ get busy(): 'true' | 'false' {
1094
+ return this.source.busy;
1095
+ }
1096
+ get errorMessage(): string {
1097
+ return this.source.errorMessage;
1098
+ }
1099
+ get announcement(): string {
1100
+ return this.source.announcement;
1101
+ }
1102
+ get rows(): readonly T[] {
1103
+ return this.source.rows;
1104
+ }
1105
+ get visibleRows(): T[] {
1106
+ return this.source.visibleRows;
1107
+ }
1108
+ get count(): number {
1109
+ return this.source.count;
1110
+ }
1111
+ get selectionMode(): SelectionMode {
1112
+ return this.source.selectionMode;
1113
+ }
1114
+ get selectedKeys(): readonly RowKey[] {
1115
+ return this.source.selectedKeys;
1116
+ }
1117
+ get selectedRows(): T[] {
1118
+ return this.source.selectedRows;
1119
+ }
1120
+ get allSelected(): boolean {
1121
+ return this.source.allSelected;
1122
+ }
1123
+ get activeKey(): RowKey | null {
1124
+ return this.source.activeKey;
1125
+ }
1126
+ get sort(): SortState | null {
1127
+ return this.source.sort;
1128
+ }
1129
+ get data(): DataApi<T> {
1130
+ return this.source.data;
1131
+ }
1132
+ keyFor = this.source.keyFor;
1133
+ isSelected = this.source.isSelected;
1134
+ toggleSelected = this.source.toggleSelected;
1135
+ selectAll = this.source.selectAll;
1136
+ clearSelection = this.source.clearSelection;
1137
+ isActive = this.source.isActive;
1138
+ setActive = this.source.setActive;
1139
+ toggleSort = this.source.toggleSort;
1140
+ ariaSort = this.source.ariaSort;
1141
+ reload = this.source.reload;
1142
+
1143
+ <template>
1144
+ <DataShell
1145
+ @state={{this.source}}
1146
+ @hasLoading={{has-block 'loading'}}
1147
+ @hasEmpty={{has-block 'empty'}}
1148
+ @hasError={{has-block 'error'}}
1149
+ @emptyTitle={{@emptyTitle}}
1150
+ @emptyMessage={{@emptyMessage}}
1151
+ @loadingLabel={{@loadingLabel}}
1152
+ @skeletonRows={{@skeletonRows}}
1153
+ ...attributes
1154
+ >
1155
+ <:default>{{yield this.visibleRows this.data}}</:default>
1156
+ <:loading>{{yield to='loading'}}</:loading>
1157
+ <:empty>{{yield to='empty'}}</:empty>
1158
+ <:error>{{yield to='error'}}</:error>
1159
+ </DataShell>
1160
+ </template>
1161
+ }