@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,1165 @@
1
+ // Pretui — Sidebar: a collapsible app rail with a keyboard-reachable handle, a mobile drawer mode and opt-in persisted collapse state.
2
+ //
3
+ // Sidebar shadcn's most-copied layout block
4
+ // SidebarTrigger the toolbar button that toggles it, wired for readers
5
+ // SidebarGroup a labelled section of the rail
6
+ // SidebarItem a nav row that survives the collapse to icon width
7
+ //
8
+ // ── Realm laws in force ─────────────────────────────────────────────────
9
+ // No timers, no `Date.now()`, no `Math.random()`. Every listener and observer
10
+ // is owned by an `ember-modifier` that disconnects it. No `!important`, no
11
+ // `:deep()`, no `:global()`, no dark branches, unnamed container queries only.
12
+ import Component from '@glimmer/component';
13
+ import { tracked } from '@glimmer/tracking';
14
+ import { hash } from '@ember/helper';
15
+ import { on } from '@ember/modifier';
16
+ import { guidFor } from '@ember/object/internals';
17
+ import { modifier } from 'ember-modifier';
18
+
19
+ import { cssDeclaration, cssStyleFrom } from '../pretui-css';
20
+ import { listenDocumentCapture } from '../focus';
21
+ import { Drawer } from './drawer';
22
+ import { Tooltip } from './tooltip';
23
+ import { pretuiSize } from '../internal/structure-layout';
24
+ import type { SizeAlias } from '../internal/structure-layout';
25
+
26
+ // ── Placement ────────────────────────────────────────────────────────────
27
+
28
+ /** Logical placement. `left`/`right` are accepted and mapped, because every
29
+ * React kit spells this physically and an agent will type one of them. */
30
+ export type ShellPlacement = 'start' | 'end';
31
+ export type ShellPlacementAlias = ShellPlacement | 'left' | 'right';
32
+
33
+ const PLACEMENTS: Record<string, ShellPlacement> = {
34
+ start: 'start',
35
+ left: 'start',
36
+ end: 'end',
37
+ right: 'end',
38
+ };
39
+
40
+ function shellPlacement(
41
+ raw: string | undefined,
42
+ fallback: ShellPlacement = 'start',
43
+ ): ShellPlacement {
44
+ let hit = raw === undefined ? undefined : PLACEMENTS[raw];
45
+ return hit ?? fallback;
46
+ }
47
+
48
+
49
+ // ── Sidebar ──────────────────────────────────────────────────────────────
50
+ //
51
+ // Source read: shadcn-ui `ui/sidebar.tsx` (726 lines, 23 exports) and
52
+ // `hooks/use-mobile.ts`. Ant `layout/Sider.tsx` for the collapse trigger.
53
+ //
54
+ // What upstream gets wrong, and what is fixed here. These are not style
55
+ // quibbles — three of them make the component unusable without a mouse.
56
+ //
57
+ // 1. **The rail is deliberately unreachable by keyboard.** shadcn's
58
+ // `SidebarRail` is a real `<button>` carrying `tabIndex={-1}`. Ant's two
59
+ // triggers are worse: a `<div onClick>` and a `<span onClick>` with no
60
+ // role, no tabindex, no key handler and no name, so **an Ant sider cannot
61
+ // be collapsed by keyboard at all**. Here the handle is a `<button>` in
62
+ // the tab order with a real accessible name that states the action.
63
+ // 2. **Nothing is announced.** Neither `SidebarTrigger` nor `SidebarRail`
64
+ // sets `aria-expanded`, nothing sets `aria-controls`, and the desktop
65
+ // sidebar has no `role`, no `<nav>`, no landmark and no accessible name.
66
+ // Here the rail is a named `<nav>` landmark and every control that
67
+ // toggles it carries `aria-expanded` + `aria-controls` pointing at it.
68
+ // 3. **The cookie is written from inside the setter, unconditionally.**
69
+ // shadcn writes `document.cookie` on every toggle even when the consumer
70
+ // controls `open`, with a hardcoded name, path and max-age, no
71
+ // `SameSite`, no opt-out, and nothing ever reads it back. Persistence
72
+ // here is **opt-in and named**: with no `@persistKey` this component
73
+ // touches no storage at all, and with one it uses `localStorage` — the
74
+ // honest primitive for a UI preference, since a cookie only makes sense
75
+ // when a server reads it and there is no server here.
76
+ // 4. **Every dimension is a module constant.** `SIDEBAR_WIDTH`,
77
+ // `SIDEBAR_WIDTH_ICON`, `SIDEBAR_COOKIE_MAX_AGE`,
78
+ // `SIDEBAR_KEYBOARD_SHORTCUT` and `MOBILE_BREAKPOINT` are all
79
+ // module-private with no prop. Here they are args and token knobs.
80
+ // 5. **A global `window` keydown listener with no escape hatch**, which
81
+ // fires while you are typing in any field that does not stop
82
+ // propagation, and stacks one listener per provider. Here the shortcut
83
+ // is `@shortcut`/`@shortcutKey`, owned by a modifier that removes it,
84
+ // and it **ignores the key while focus is in a text field** — which is
85
+ // the bug shadcn ships.
86
+ // 6. **Mobile is a viewport media query** (`MOBILE_BREAKPOINT = 768`)
87
+ // duplicated between JS and the Tailwind `md:` breakpoint, hydration-
88
+ // unsafe (first paint is always desktop). A card does not know the
89
+ // viewport — it knows its pane. This measures the shell's own inline
90
+ // size with a `ResizeObserver`, so a sidebar in a 400px pane folds
91
+ // whatever the window is doing, and `@mobile` overrides it outright.
92
+ // 7. **Physical `left`/`right` throughout** — `side`, `left-0`, `border-r`,
93
+ // `-translate-x-1/2`, and a `rotate-180` on an empty spacer div to flip
94
+ // the transition direction. Everything here is logical, so RTL is a
95
+ // `dir` attribute rather than a re-authoring.
96
+ // 8. **No reduced-motion guard** on the 200ms width slide. There is one
97
+ // here, and it lands on the end state.
98
+ // 9. **A collapsed rail stays focusable.** Mantine's AppShell navbar is
99
+ // only `translateX`-ed off screen — still in the DOM, still tabbable,
100
+ // still read aloud. Offcanvas collapse here is `visibility: hidden`,
101
+ // which removes it from both the tab order and the accessibility tree.
102
+ // 10. **`Math.random()` in `SidebarMenuSkeleton`**, memoized per mount, so
103
+ // server and client markup disagree. Forbidden by realm law here, and
104
+ // not needed — `Skeleton` in `structure.gts` is deterministic.
105
+ //
106
+ // The mobile mode reuses `Drawer` (overlay.gts) rather than re-solving it:
107
+ // `Drawer` rides the native `<dialog>` top layer, so the focus trap, Escape,
108
+ // `::backdrop` and stacking are the platform's. shadcn instead renders its
109
+ // `Sheet` and then hides the Sheet's own close button with
110
+ // `[&>button]:hidden`, which is the tell that the composition was wrong.
111
+
112
+ export type SidebarCollapsible = 'rail' | 'offcanvas' | 'none';
113
+
114
+ /**
115
+ * Reads a persisted collapse preference exactly once, on insert.
116
+ *
117
+ * A modifier rather than a constructor read for two reasons: `localStorage`
118
+ * must never be touched during module evaluation or prerender (the indexer
119
+ * runs both), and a modifier body only ever runs against a real DOM. Every
120
+ * access is inside a `try` because storage throws outright in a partitioned
121
+ * or storage-disabled context, and a failed preference must never take a
122
+ * layout down.
123
+ */
124
+ const restoresOpen = modifier(
125
+ (
126
+ _el: HTMLElement,
127
+ [key, apply]: [string | undefined, (open: boolean) => void],
128
+ ) => {
129
+ if (!key || typeof localStorage === 'undefined') {
130
+ return;
131
+ }
132
+ try {
133
+ let stored = localStorage.getItem('pretui-sidebar:' + key);
134
+ if (stored === 'open' || stored === 'closed') {
135
+ apply(stored === 'open');
136
+ }
137
+ } catch {
138
+ // Storage unavailable. The `@defaultOpen` value stands.
139
+ }
140
+ },
141
+ );
142
+
143
+ /**
144
+ * Publishes the shell's own inline size as a coarse `wide | narrow` fact.
145
+ *
146
+ * `ResizeObserver`, never a viewport media query: a card does not know the
147
+ * window, it knows its pane. The callback fires after layout, outside render,
148
+ * so writing tracked state here cannot backtrack.
149
+ */
150
+ const measuresPane = modifier(
151
+ (
152
+ element: HTMLElement,
153
+ [breakpoint, apply]: [number, (narrow: boolean) => void],
154
+ ) => {
155
+ let observer = new ResizeObserver((entries) => {
156
+ let entry = entries[0];
157
+ if (!entry) {
158
+ return;
159
+ }
160
+ // A width of 0 is not "narrow", it is "not laid out" — a shell inside a
161
+ // `display: none` tab panel, a collapsed accordion, or a card that has
162
+ // not been measured yet. Treating it as narrow would silently promote
163
+ // the rail to a modal drawer the moment the pane was hidden, and the
164
+ // reader would find it in the top layer when the tab came back.
165
+ let width = entry.contentRect.width;
166
+ apply(width > 0 && width < breakpoint);
167
+ });
168
+ // The observer reports once as soon as observation starts, and does so
169
+ // asynchronously — a synchronous first report here would write tracked
170
+ // state during the render that installed this modifier.
171
+ observer.observe(element);
172
+ return () => observer.disconnect();
173
+ },
174
+ );
175
+
176
+ /** Text-entry contexts where a bare letter shortcut must not fire. shadcn
177
+ * binds the shortcut on `window` with no such check, so Cmd+B inside a rich
178
+ * text editor toggles the sidebar instead of bolding. */
179
+ const TEXT_ENTRY = 'input, textarea, select, [contenteditable]';
180
+
181
+ export interface SidebarSignature {
182
+ Args: {
183
+ /** Controlled expanded state. Leave undefined for the uncontrolled half. */
184
+ open?: boolean;
185
+ /** Uncontrolled initial state. Default `true`. */
186
+ defaultOpen?: boolean;
187
+ /** Fires on every toggle, controlled or not. */
188
+ onOpenChange?: (open: boolean) => void;
189
+ /**
190
+ * Persist the collapse preference under this key. **Opt-in**: with no key
191
+ * this component reads and writes no storage whatsoever. The key is
192
+ * namespaced to `pretui-sidebar:<key>` in `localStorage`.
193
+ */
194
+ persistKey?: string;
195
+ /** Accessible name for the rail landmark. Default `Sidebar`. */
196
+ label?: string;
197
+ /** `start` (default) or `end`; `left`/`right` are accepted aliases. */
198
+ placement?: ShellPlacementAlias;
199
+ /**
200
+ * What collapsing means. `rail` (default) shrinks to icon width and keeps
201
+ * the rail reachable; `offcanvas` removes it from layout, the tab order
202
+ * and the accessibility tree; `none` pins it open and hides the handle.
203
+ */
204
+ collapsible?: SidebarCollapsible;
205
+ /** Expanded rail width. Any kit-valid CSS length. Default `16rem`. */
206
+ width?: string;
207
+ /** Collapsed rail width in `rail` mode. Default `3.25rem`. */
208
+ railWidth?: string;
209
+ /** Rail width in the mobile drawer. Default `18rem`. */
210
+ mobileWidth?: string;
211
+ /** Bind a Cmd/Ctrl shortcut for the toggle. Default `true`. */
212
+ shortcut?: boolean;
213
+ /** The shortcut's letter. Default `b`. Matched case-insensitively. */
214
+ shortcutKey?: string;
215
+ /** Force the drawer mode on or off, bypassing the pane measurement. */
216
+ mobile?: boolean;
217
+ /** Pane width in px below which the rail becomes a drawer. Default `640`. */
218
+ mobileBreakpoint?: number;
219
+ /** Draw the hairline between rail and content. Default `false`. */
220
+ bordered?: boolean;
221
+ };
222
+ Blocks: {
223
+ /** Rail chrome above the scrolling nav — a brand, a workspace switcher. */
224
+ header: [{ open: boolean; collapsed: boolean; mobile: boolean }];
225
+ /** The rail's scrolling body. */
226
+ nav: [
227
+ {
228
+ open: boolean;
229
+ collapsed: boolean;
230
+ mobile: boolean;
231
+ toggle: () => void;
232
+ },
233
+ ];
234
+ /** Rail chrome below the nav — an account row, a version line. */
235
+ footer: [{ open: boolean; collapsed: boolean; mobile: boolean }];
236
+ /** The page beside the rail. Yielded the toggle and the rail's id. */
237
+ default: [
238
+ {
239
+ open: boolean;
240
+ collapsed: boolean;
241
+ mobile: boolean;
242
+ toggle: () => void;
243
+ controls: string;
244
+ },
245
+ ];
246
+ };
247
+ Element: HTMLDivElement;
248
+ }
249
+
250
+ /**
251
+ * App chrome: a collapsible rail beside a page.
252
+ *
253
+ * ```hbs
254
+ * <Sidebar @label='Workspace' @persistKey='studio' @collapsible='rail'>
255
+ * <:header as |bar|><Brand @compact={{bar.collapsed}} /></:header>
256
+ * <:nav as |bar|>
257
+ * <SidebarGroup @label='Library'>
258
+ * <SidebarItem @label='Lots' @active={{true}} @collapsed={{bar.collapsed}} />
259
+ * </SidebarGroup>
260
+ * </:nav>
261
+ * <:default as |bar|>
262
+ * <Toolbar>
263
+ * <SidebarTrigger
264
+ * @open={{bar.open}}
265
+ * @onToggle={{bar.toggle}}
266
+ * @controls={{bar.controls}}
267
+ * />
268
+ * </Toolbar>
269
+ * </:default>
270
+ * </Sidebar>
271
+ * ```
272
+ *
273
+ * State is passed DOWN through block params rather than sideways through a
274
+ * context/service. React needs `useSidebar()` because a trigger can be
275
+ * arbitrarily deep; Glimmer's named blocks already put the caller inside the
276
+ * component's scope, so a yielded hash is the whole mechanism — no provider to
277
+ * forget, no `useSidebar must be used within a SidebarProvider` throw, and the
278
+ * dependency is visible in the template.
279
+ */
280
+ export class Sidebar extends Component<SidebarSignature> {
281
+ @tracked private internal = this.args.defaultOpen ?? true;
282
+ @tracked private narrowPane = false;
283
+ /** The drawer's own uncontrolled state, separate from the rail's expanded
284
+ * state, so a narrow pane starts with the modal closed. */
285
+ @tracked private drawerOpen = false;
286
+ railId = `${guidFor(this)}-rail`;
287
+
288
+ get open(): boolean {
289
+ if (this.args.open !== undefined) {
290
+ return this.args.open;
291
+ }
292
+ if (this.mobile) {
293
+ return this.drawerOpen;
294
+ }
295
+ // a pinned rail is open, whatever a shortcut or trigger asked for
296
+ return this.collapsible === 'none' ? true : this.internal;
297
+ }
298
+ get collapsible(): SidebarCollapsible {
299
+ return this.args.collapsible ?? 'rail';
300
+ }
301
+ get placement(): ShellPlacement {
302
+ return shellPlacement(this.args.placement);
303
+ }
304
+ get label(): string {
305
+ return this.args.label ?? 'Sidebar';
306
+ }
307
+ get mobile(): boolean {
308
+ return this.args.mobile ?? this.narrowPane;
309
+ }
310
+ /** Collapsed means "not showing its full width", which the drawer never is
311
+ * — inside the drawer the rail is always at full width. */
312
+ get collapsed(): boolean {
313
+ return !this.mobile && !this.open && this.collapsible !== 'none';
314
+ }
315
+ get state(): string {
316
+ return this.open ? 'expanded' : 'collapsed';
317
+ }
318
+ get showHandle(): boolean {
319
+ return !this.mobile && this.collapsible !== 'none';
320
+ }
321
+ get handleLabel(): string {
322
+ return this.open ? 'Collapse ' + this.label : 'Expand ' + this.label;
323
+ }
324
+ get mobileBreakpoint(): number {
325
+ return this.args.mobileBreakpoint ?? 640;
326
+ }
327
+ get shortcutKey(): string {
328
+ return (this.args.shortcutKey ?? 'b').toLowerCase();
329
+ }
330
+ get shortcutEnabled(): boolean {
331
+ return (this.args.shortcut ?? true) && !this.args.mobile;
332
+ }
333
+ get style() {
334
+ return cssStyleFrom([
335
+ cssDeclaration('--pretui-sidebar-width', this.args.width),
336
+ cssDeclaration('--pretui-sidebar-rail-width', this.args.railWidth),
337
+ cssDeclaration('--pretui-drawer-size', this.args.mobileWidth),
338
+ ]);
339
+ }
340
+
341
+ private setOpen = (next: boolean) => {
342
+ // Internal state moves only while UNcontrolled; the callback always fires.
343
+ if (this.args.open === undefined && this.mobile) {
344
+ this.drawerOpen = next;
345
+ this.args.onOpenChange?.(next);
346
+ return;
347
+ }
348
+ if (this.args.open === undefined) {
349
+ this.internal = next;
350
+ }
351
+ this.args.onOpenChange?.(next);
352
+ this.persist(next);
353
+ };
354
+
355
+ /**
356
+ * Opt-in, and never on the path of a component that was given no key.
357
+ * Wrapped because storage throws in partitioned contexts — a preference
358
+ * that cannot be saved is not a reason for a layout to fail.
359
+ */
360
+ private persist(next: boolean) {
361
+ let key = this.args.persistKey;
362
+ if (!key || typeof localStorage === 'undefined') {
363
+ return;
364
+ }
365
+ try {
366
+ localStorage.setItem('pretui-sidebar:' + key, next ? 'open' : 'closed');
367
+ } catch {
368
+ // Preference not persisted. Nothing else changes.
369
+ }
370
+ }
371
+
372
+ toggle = () => {
373
+ this.setOpen(!this.open);
374
+ };
375
+ closeDrawer = () => {
376
+ this.setOpen(false);
377
+ };
378
+ /** Restore runs only while UNcontrolled — a controlled parent owns the
379
+ * value and a stored preference must not fight it. */
380
+ restore = (stored: boolean) => {
381
+ if (this.args.open === undefined) {
382
+ this.internal = stored;
383
+ }
384
+ };
385
+ setNarrow = (narrow: boolean) => {
386
+ if (narrow !== this.narrowPane) {
387
+ this.drawerOpen = false;
388
+ }
389
+ this.narrowPane = narrow;
390
+ };
391
+
392
+ /** The shell element, so the shortcut can tell which sidebar owns focus. */
393
+ private rootEl: HTMLElement | null = null;
394
+ captureRoot = modifier((el: HTMLElement) => {
395
+ this.rootEl = el;
396
+ return () => {
397
+ this.rootEl = null;
398
+ };
399
+ });
400
+
401
+ onShortcut = (event: Event) => {
402
+ if (!this.shortcutEnabled || (this.collapsible === 'none' && !this.mobile)) {
403
+ return;
404
+ }
405
+ let key = event as KeyboardEvent;
406
+ if (!key.metaKey && !key.ctrlKey) {
407
+ return;
408
+ }
409
+ // A real browser reports `b` with Caps off and `B` with Shift or Caps on,
410
+ // and `triggerKeyEvent` only accepts the uppercase form — so both cases
411
+ // are matched rather than one.
412
+ if (key.key.toLowerCase() !== this.shortcutKey) {
413
+ return;
414
+ }
415
+ let target = key.target as HTMLElement | null;
416
+ if (target && target.closest && target.closest(TEXT_ENTRY)) {
417
+ return;
418
+ }
419
+ // Every sidebar with @shortcut listens, but one press toggles one rail:
420
+ // the innermost sidebar that holds focus, or, with focus in none, the
421
+ // first to see the key (the rest see it already taken).
422
+ let owner = (document.activeElement as HTMLElement | null)?.closest?.('.pretui-sidebar-shell') ?? null;
423
+ if (owner ? owner !== this.rootEl : key.defaultPrevented) {
424
+ return;
425
+ }
426
+ key.preventDefault();
427
+ this.toggle();
428
+ };
429
+
430
+ <template>
431
+ <div
432
+ class='pretui-sidebar-shell'
433
+ style={{this.style}}
434
+ data-placement={{this.placement}}
435
+ data-state={{this.state}}
436
+ data-collapsible={{this.collapsible}}
437
+ data-mobile={{if this.mobile 'true' 'false'}}
438
+ data-bordered={{if @bordered 'true' 'false'}}
439
+ data-test-pretui-sidebar
440
+ {{restoresOpen @persistKey this.restore}}
441
+ {{measuresPane this.mobileBreakpoint this.setNarrow}}
442
+ {{!-- A document listener, not an `on 'keydown'` modifier on this div —
443
+ realm lint's no-invalid-interactive rejects a template listener on
444
+ a non-widget element, and the shortcut has to work while focus is
445
+ anywhere on the page anyway. Capture phase and non-passive so it
446
+ may preventDefault; owned by this element, so it is removed with
447
+ the component. Each mounted sidebar has its own listener, and
448
+ onShortcut routes one press to one of them. --}}
449
+ {{listenDocumentCapture 'keydown' this.onShortcut}}
450
+ {{this.captureRoot}}
451
+ ...attributes
452
+ >
453
+ {{#if this.mobile}}
454
+ <Drawer
455
+ @open={{this.open}}
456
+ @onClose={{this.closeDrawer}}
457
+ @label={{this.label}}
458
+ @placement={{this.placement}}
459
+ >
460
+ <:default>
461
+ <nav
462
+ id={{this.railId}}
463
+ class='pretui-sidebar-rail'
464
+ aria-label={{this.label}}
465
+ data-mobile='true'
466
+ data-test-pretui-sidebar-rail
467
+ >
468
+ {{#if (has-block 'header')}}
469
+ <div class='pretui-sidebar-head'>{{yield
470
+ (hash open=this.open collapsed=false mobile=true)
471
+ to='header'
472
+ }}</div>
473
+ {{/if}}
474
+ <div class='pretui-sidebar-body'>
475
+ {{yield
476
+ (hash
477
+ open=this.open
478
+ collapsed=false
479
+ mobile=true
480
+ toggle=this.toggle
481
+ )
482
+ to='nav'
483
+ }}
484
+ </div>
485
+ {{#if (has-block 'footer')}}
486
+ <div class='pretui-sidebar-foot'>{{yield
487
+ (hash open=this.open collapsed=false mobile=true)
488
+ to='footer'
489
+ }}</div>
490
+ {{/if}}
491
+ </nav>
492
+ </:default>
493
+ </Drawer>
494
+ {{else}}
495
+ <nav
496
+ id={{this.railId}}
497
+ class='pretui-sidebar-rail'
498
+ aria-label={{this.label}}
499
+ data-state={{this.state}}
500
+ data-mobile='false'
501
+ data-test-pretui-sidebar-rail
502
+ >
503
+ {{#if (has-block 'header')}}
504
+ <div class='pretui-sidebar-head'>{{yield
505
+ (hash
506
+ open=this.open collapsed=this.collapsed mobile=false
507
+ )
508
+ to='header'
509
+ }}</div>
510
+ {{/if}}
511
+ <div class='pretui-sidebar-body'>
512
+ {{yield
513
+ (hash
514
+ open=this.open
515
+ collapsed=this.collapsed
516
+ mobile=false
517
+ toggle=this.toggle
518
+ )
519
+ to='nav'
520
+ }}
521
+ </div>
522
+ {{#if (has-block 'footer')}}
523
+ <div class='pretui-sidebar-foot'>{{yield
524
+ (hash
525
+ open=this.open collapsed=this.collapsed mobile=false
526
+ )
527
+ to='footer'
528
+ }}</div>
529
+ {{/if}}
530
+ </nav>
531
+
532
+ {{#if this.showHandle}}
533
+ {{! A REAL tab stop. shadcn's rail is a <button tabIndex={-1}> and
534
+ Ant's is a <div onClick> — in both, the rail's own affordance is
535
+ mouse-only. The name states the action rather than the object,
536
+ so a reader hears what pressing it will do. }}
537
+ <button
538
+ type='button'
539
+ class='pretui-sidebar-handle'
540
+ aria-label={{this.handleLabel}}
541
+ aria-expanded={{if this.open 'true' 'false'}}
542
+ aria-controls={{this.railId}}
543
+ data-test-pretui-sidebar-handle
544
+ {{on 'click' this.toggle}}
545
+ ><span class='pretui-sidebar-handle-line' aria-hidden='true'></span>
546
+ </button>
547
+ {{/if}}
548
+ {{/if}}
549
+
550
+ <div class='pretui-sidebar-content'>
551
+ {{yield
552
+ (hash
553
+ open=this.open
554
+ collapsed=this.collapsed
555
+ mobile=this.mobile
556
+ toggle=this.toggle
557
+ controls=this.railId
558
+ )
559
+ }}
560
+ </div>
561
+ </div>
562
+
563
+ <style scoped>
564
+ @layer PretComponent {
565
+ /* One grid, not a viewport-pinned panel plus an in-flow ghost spacer.
566
+ shadcn needs the ghost because its rail is pinned to the VIEWPORT and
567
+ therefore out of flow; inside a card that is simply wrong, and a grid
568
+ track animates exactly the same way with one element instead of
569
+ three. (The phrase this comment is avoiding trips the kit's own
570
+ no-css-position-fixed lint rule, which scans comment text too.) */
571
+ .pretui-sidebar-shell {
572
+ --pretui-sidebar-width: 16rem;
573
+ --pretui-sidebar-rail-width: 3.25rem;
574
+ display: grid;
575
+ grid-template-columns: var(--pretui-sidebar-track) minmax(0, 1fr);
576
+ --pretui-sidebar-track: var(--pretui-sidebar-width);
577
+ min-inline-size: 0;
578
+ min-block-size: 0;
579
+ inline-size: 100%;
580
+ block-size: 100%;
581
+ position: relative;
582
+ container-type: inline-size;
583
+ font-size: var(--text-ui-md, 12.5px);
584
+ letter-spacing: var(--track-ui, 0.01em);
585
+ color: var(--foreground);
586
+ transition: grid-template-columns var(--pretui-dur-morph, 300ms)
587
+ var(--pretui-ease-morph, cubic-bezier(0.3, 0.7, 0.2, 1.02));
588
+ }
589
+ /* Logical: `end` swaps the tracks and moves the rail to column 2. In RTL
590
+ the whole thing mirrors with no second stylesheet — the `rotate-180`
591
+ on an empty spacer that shadcn uses to fake this has no analogue
592
+ because there is nothing to fake. */
593
+ .pretui-sidebar-shell[data-placement='end'] {
594
+ grid-template-columns: minmax(0, 1fr) var(--pretui-sidebar-track);
595
+ }
596
+ .pretui-sidebar-shell[data-placement='end'] .pretui-sidebar-rail {
597
+ grid-column: 2;
598
+ grid-row: 1;
599
+ }
600
+ .pretui-sidebar-shell[data-placement='end'] .pretui-sidebar-content {
601
+ grid-column: 1;
602
+ grid-row: 1;
603
+ }
604
+ .pretui-sidebar-shell[data-state='collapsed'][data-collapsible='rail'] {
605
+ --pretui-sidebar-track: var(--pretui-sidebar-rail-width);
606
+ }
607
+ .pretui-sidebar-shell[data-state='collapsed'][data-collapsible='offcanvas'] {
608
+ --pretui-sidebar-track: 0px;
609
+ }
610
+ /* In the drawer mode the rail is in the top layer, so the grid is one
611
+ column and the content takes all of it. */
612
+ .pretui-sidebar-shell[data-mobile='true'] {
613
+ --pretui-sidebar-track: 0px;
614
+ grid-template-columns: minmax(0, 1fr);
615
+ }
616
+ .pretui-sidebar-rail {
617
+ grid-column: 1;
618
+ grid-row: 1;
619
+ display: flex;
620
+ flex-direction: column;
621
+ min-inline-size: 0;
622
+ min-block-size: 0;
623
+ overflow: hidden;
624
+ background: var(--pretui-sidebar-bg, var(--inset, var(--boxel-100)));
625
+ }
626
+ .pretui-sidebar-shell[data-bordered='true'] .pretui-sidebar-rail {
627
+ box-shadow: inset -1px 0 0 var(--border);
628
+ }
629
+ .pretui-sidebar-shell[data-bordered='true'][data-placement='end']
630
+ .pretui-sidebar-rail {
631
+ box-shadow: inset 1px 0 0 var(--border);
632
+ }
633
+ /* An offcanvas rail leaves the tab order and the accessibility tree.
634
+ Mantine's AppShell only translates its navbar off screen, so a
635
+ "hidden" navbar is still tabbable and still read aloud. */
636
+ .pretui-sidebar-shell[data-state='collapsed'][data-collapsible='offcanvas']
637
+ .pretui-sidebar-rail {
638
+ visibility: hidden;
639
+ }
640
+ /* The drawer's own rail is not a grid child — it lives inside a
641
+ <dialog> in the top layer. */
642
+ .pretui-sidebar-rail[data-mobile='true'] {
643
+ display: flex;
644
+ block-size: 100%;
645
+ background: none;
646
+ box-shadow: none;
647
+ }
648
+ .pretui-sidebar-head,
649
+ .pretui-sidebar-foot {
650
+ flex: none;
651
+ min-inline-size: 0;
652
+ padding: var(--space-3, 8px);
653
+ }
654
+ .pretui-sidebar-foot {
655
+ box-shadow: 0 -1px 0 var(--border);
656
+ }
657
+ .pretui-sidebar-head {
658
+ box-shadow: 0 1px 0 var(--border);
659
+ }
660
+ .pretui-sidebar-body {
661
+ flex: 1 1 auto;
662
+ min-block-size: 0;
663
+ min-inline-size: 0;
664
+ overflow-y: auto;
665
+ overscroll-behavior: contain;
666
+ scrollbar-width: thin;
667
+ padding: var(--space-3, 8px);
668
+ display: grid;
669
+ gap: var(--space-3, 8px);
670
+ align-content: start;
671
+ }
672
+ .pretui-sidebar-content {
673
+ grid-column: 2;
674
+ grid-row: 1;
675
+ min-inline-size: 0;
676
+ min-block-size: 0;
677
+ }
678
+ .pretui-sidebar-shell[data-mobile='true'] .pretui-sidebar-content {
679
+ grid-column: 1;
680
+ }
681
+ /* The handle straddles the seam. 44px of hit area on a coarse pointer
682
+ , a 2px painted line, and a resize-style cursor so the
683
+ affordance reads before it is pressed. */
684
+ .pretui-sidebar-handle {
685
+ position: absolute;
686
+ inset-block: 0;
687
+ inset-inline-start: calc(var(--pretui-sidebar-track) - 0.5rem);
688
+ inline-size: 1rem;
689
+ z-index: var(--pretui-z-raised, 1);
690
+ display: grid;
691
+ place-items: center;
692
+ padding: 0;
693
+ border: 0;
694
+ background: none;
695
+ cursor: ew-resize;
696
+ transition: inset-inline-start var(--pretui-dur-morph, 300ms)
697
+ var(--pretui-ease-morph, cubic-bezier(0.3, 0.7, 0.2, 1.02));
698
+ }
699
+ .pretui-sidebar-shell[data-placement='end'] .pretui-sidebar-handle {
700
+ inset-inline-start: auto;
701
+ inset-inline-end: calc(var(--pretui-sidebar-track) - 0.5rem);
702
+ }
703
+ .pretui-sidebar-handle-line {
704
+ inline-size: 2px;
705
+ block-size: 100%;
706
+ border-radius: 2px;
707
+ background: transparent;
708
+ transition: background var(--pretui-dur-snap, 180ms)
709
+ var(--pretui-ease-snap, ease);
710
+ }
711
+ .pretui-sidebar-handle:hover .pretui-sidebar-handle-line {
712
+ background: var(--primary);
713
+ }
714
+ .pretui-sidebar-handle:focus-visible {
715
+ outline: 2px solid var(--ring);
716
+ outline-offset: -2px;
717
+ border-radius: var(--radius-chip, 6px);
718
+ }
719
+ /* Coarse pointers get a real target rather than a 16px sliver. */
720
+ @media (any-pointer: coarse) {
721
+ .pretui-sidebar-handle {
722
+ inline-size: 44px;
723
+ inset-inline-start: calc(var(--pretui-sidebar-track) - 22px);
724
+ }
725
+ .pretui-sidebar-shell[data-placement='end'] .pretui-sidebar-handle {
726
+ inset-inline-end: calc(var(--pretui-sidebar-track) - 22px);
727
+ }
728
+ }
729
+ /* Reduced motion lands on the end state: the rail is at its width, the
730
+ handle is at the seam, nothing is mid-slide. */
731
+ @media (prefers-reduced-motion: reduce) {
732
+ .pretui-sidebar-shell,
733
+ .pretui-sidebar-handle,
734
+ .pretui-sidebar-handle-line {
735
+ transition: none;
736
+ }
737
+ }
738
+ }
739
+ </style>
740
+ </template>
741
+ }
742
+
743
+ // ── SidebarTrigger ───────────────────────────────────────────────────────
744
+
745
+ export interface SidebarTriggerSignature {
746
+ Args: {
747
+ /** The rail's current state, from the yielded hash. */
748
+ open: boolean;
749
+ /** The rail's toggle, from the yielded hash. */
750
+ onToggle: () => void;
751
+ /** The rail's element id, from the yielded hash. */
752
+ controls: string;
753
+ /** What the rail is called, so the name says which one. Default `sidebar`. */
754
+ label?: string;
755
+ size?: SizeAlias;
756
+ };
757
+ Blocks: { default: [] };
758
+ Element: HTMLButtonElement;
759
+ }
760
+
761
+ /**
762
+ * The toolbar button that toggles a `Sidebar`.
763
+ *
764
+ * shadcn's `SidebarTrigger` reads its state from React context and still emits
765
+ * neither `aria-expanded` nor `aria-controls`, so a reader hears "Toggle
766
+ * Sidebar" with no state and no relationship. Here the three facts it needs
767
+ * come from the yielded hash and all three reach the DOM.
768
+ */
769
+ export class SidebarTrigger extends Component<SidebarTriggerSignature> {
770
+ get size() {
771
+ return pretuiSize(this.args.size);
772
+ }
773
+ get label(): string {
774
+ let noun = this.args.label ?? 'sidebar';
775
+ return (this.args.open ? 'Collapse ' : 'Expand ') + noun;
776
+ }
777
+ <template>
778
+ <button
779
+ type='button'
780
+ class='pretui-sidebar-trigger'
781
+ data-size={{this.size}}
782
+ aria-label={{this.label}}
783
+ aria-expanded={{if @open 'true' 'false'}}
784
+ aria-controls={{@controls}}
785
+ data-test-pretui-sidebar-trigger
786
+ {{on 'click' @onToggle}}
787
+ >
788
+ {{#if (has-block)}}
789
+ {{yield}}
790
+ {{else}}
791
+ <span class='pretui-sidebar-trigger-glyph' aria-hidden='true'></span>
792
+ {{/if}}
793
+ </button>
794
+ <style scoped>
795
+ @layer PretComponent {
796
+ .pretui-sidebar-trigger {
797
+ display: inline-grid;
798
+ place-items: center;
799
+ inline-size: 2.24em;
800
+ block-size: 2.24em;
801
+ padding: 0;
802
+ border: 0;
803
+ border-radius: var(--radius-chip, 6px);
804
+ background: none;
805
+ color: var(--muted-foreground);
806
+ font-size: var(--pretui-size-m, var(--text-ui-md, 0.78rem));
807
+ cursor: pointer;
808
+ }
809
+ .pretui-sidebar-trigger[data-size='xs'] {
810
+ font-size: var(--pretui-size-xs, var(--text-ui-xs, 0.66rem));
811
+ }
812
+ .pretui-sidebar-trigger[data-size='s'] {
813
+ font-size: var(--pretui-size-s, var(--text-ui-sm, 0.72rem));
814
+ }
815
+ .pretui-sidebar-trigger[data-size='l'] {
816
+ font-size: var(--pretui-size-l, var(--text-ui-lg, 0.875rem));
817
+ }
818
+ .pretui-sidebar-trigger[data-size='xl'] {
819
+ font-size: var(--pretui-size-xl, var(--text-ui-xl, 1rem));
820
+ }
821
+ .pretui-sidebar-trigger:hover {
822
+ background: var(--hover, var(--boxel-100));
823
+ color: var(--foreground);
824
+ }
825
+ .pretui-sidebar-trigger:focus-visible {
826
+ outline: 2px solid var(--ring);
827
+ outline-offset: 1px;
828
+ }
829
+ /* Three bars with the first one short — a rail glyph, drawn rather than
830
+ imported, so the component has no icon dependency. */
831
+ .pretui-sidebar-trigger-glyph {
832
+ inline-size: 1em;
833
+ block-size: 0.75em;
834
+ border-inline-start: 0.28em solid currentColor;
835
+ border-inline-end: 1.5px solid currentColor;
836
+ border-block: 1.5px solid currentColor;
837
+ border-radius: 2px;
838
+ }
839
+ }
840
+ </style>
841
+ </template>
842
+ }
843
+
844
+ // ── SidebarGroup ─────────────────────────────────────────────────────────
845
+
846
+ export interface SidebarGroupSignature {
847
+ Args: {
848
+ /** Section heading. Also the group's accessible name. */
849
+ label?: string;
850
+ /** Hide the heading visually but keep it as the accessible name. */
851
+ hideLabel?: boolean;
852
+ };
853
+ Blocks: { default: []; action: [] };
854
+ Element: HTMLDivElement;
855
+ }
856
+
857
+ /**
858
+ * A labelled section of the rail.
859
+ *
860
+ * shadcn's `SidebarGroupLabel` collapses by moving itself off screen with
861
+ * `-mt-8 opacity-0`, which leaves the label in the accessibility tree while it
862
+ * is visually gone — a reader hears a heading for a section it cannot see.
863
+ * `@hideLabel` here uses the kit's `sr-only` treatment, which is the same
864
+ * visual result with the opposite accessibility meaning stated on purpose.
865
+ */
866
+ export class SidebarGroup extends Component<SidebarGroupSignature> {
867
+ labelId = `${guidFor(this)}-label`;
868
+ <template>
869
+ <div
870
+ class='pretui-sbgroup'
871
+ role='group'
872
+ aria-labelledby={{if @label this.labelId}}
873
+ data-test-pretui-sidebar-group
874
+ ...attributes
875
+ >
876
+ {{#if @label}}
877
+ <div class='pretui-sbgroup-head'>
878
+ <span
879
+ id={{this.labelId}}
880
+ class='pretui-sbgroup-label'
881
+ data-hidden={{if @hideLabel 'true' 'false'}}
882
+ >{{@label}}</span>
883
+ {{#if (has-block 'action')}}
884
+ <span class='pretui-sbgroup-action'>{{yield to='action'}}</span>
885
+ {{/if}}
886
+ </div>
887
+ {{/if}}
888
+ <div class='pretui-sbgroup-body'>{{yield}}</div>
889
+ </div>
890
+ <style scoped>
891
+ @layer PretComponent {
892
+ .pretui-sbgroup {
893
+ display: grid;
894
+ gap: 2px;
895
+ min-inline-size: 0;
896
+ }
897
+ .pretui-sbgroup-head {
898
+ display: flex;
899
+ align-items: center;
900
+ justify-content: space-between;
901
+ gap: var(--space-2, 6px);
902
+ padding: var(--space-2, 6px) var(--space-2, 6px) 2px;
903
+ min-inline-size: 0;
904
+ }
905
+ .pretui-sbgroup-label {
906
+ font-family: var(--font-mono);
907
+ font-size: var(--text-ui-xs, 11px);
908
+ font-weight: 500;
909
+ letter-spacing: var(--track-eyebrow, 0.08em);
910
+ text-transform: uppercase;
911
+ color: var(--muted-foreground);
912
+ min-inline-size: 0;
913
+ overflow: hidden;
914
+ text-overflow: ellipsis;
915
+ white-space: nowrap;
916
+ }
917
+ /* Visually gone, still the accessible name — the opposite of a label
918
+ parked off screen with opacity, which stays announced but describes
919
+ nothing the reader can find. */
920
+ .pretui-sbgroup-label[data-hidden='true'] {
921
+ position: absolute;
922
+ inline-size: 1px;
923
+ block-size: 1px;
924
+ overflow: hidden;
925
+ clip-path: inset(50%);
926
+ white-space: nowrap;
927
+ }
928
+ .pretui-sbgroup-action {
929
+ flex: none;
930
+ }
931
+ .pretui-sbgroup-body {
932
+ display: grid;
933
+ gap: 1px;
934
+ min-inline-size: 0;
935
+ }
936
+ }
937
+ </style>
938
+ </template>
939
+ }
940
+
941
+ // ── SidebarItem ──────────────────────────────────────────────────────────
942
+
943
+ export interface SidebarItemSignature {
944
+ Args: {
945
+ /** The row's text. Always the accessible name, collapsed or not. */
946
+ label: string;
947
+ /** Navigates rather than acts — renders an `<a>`. */
948
+ href?: string;
949
+ /** Acts rather than navigates — renders a `<button>`. */
950
+ onClick?: () => void;
951
+ /** Marks the current location. Emits `aria-current='page'`. */
952
+ active?: boolean;
953
+ /** A trailing count or status word. */
954
+ badge?: string;
955
+ /**
956
+ * The rail is at icon width. Comes from the `Sidebar` block param — an
957
+ * explicit yield rather than a React context, so the dependency is
958
+ * visible in the template and there is no provider to forget.
959
+ */
960
+ collapsed?: boolean;
961
+ /** Announced and styled as disabled; stays focusable (`aria-disabled`). */
962
+ disabled?: boolean;
963
+ };
964
+ Blocks: {
965
+ /** The leading glyph. Kept visible at icon width. */
966
+ icon: [];
967
+ };
968
+ Element: HTMLElement;
969
+ }
970
+
971
+ /**
972
+ * A nav row that survives the collapse to icon width.
973
+ *
974
+ * Collapsed, the label becomes the row's `aria-label` and a `Tooltip`, so the
975
+ * name never disappears — shadcn's `SidebarMenuButton` only renders a tooltip
976
+ * when you remember to pass `tooltip`, and the visible label is hidden by a
977
+ * `group-data-[collapsible=icon]:hidden` utility on a span, leaving an
978
+ * icon-only control whose accessible name is whatever the icon happens to
979
+ * carry. Here the name is an argument, so it cannot go missing.
980
+ */
981
+ export class SidebarItem extends Component<SidebarItemSignature> {
982
+ get isLink(): boolean {
983
+ return this.args.href !== undefined && !this.args.disabled;
984
+ }
985
+ get current(): string | undefined {
986
+ return this.args.active ? 'page' : undefined;
987
+ }
988
+ act = () => {
989
+ if (this.args.disabled) {
990
+ return;
991
+ }
992
+ this.args.onClick?.();
993
+ };
994
+ <template>
995
+ {{#if @collapsed}}
996
+ <Tooltip
997
+ class='pretui-sbitem-tip'
998
+ @content={{@label}}
999
+ @side='right'
1000
+ data-test-pretui-sidebar-item-tip
1001
+ >
1002
+ {{#if this.isLink}}
1003
+ <a
1004
+ class='pretui-sbitem'
1005
+ href={{@href}}
1006
+ aria-label={{@label}}
1007
+ aria-current={{this.current}}
1008
+ data-active={{if @active 'true' 'false'}}
1009
+ data-collapsed='true'
1010
+ data-test-pretui-sidebar-item
1011
+ ...attributes
1012
+ >
1013
+ <span class='pretui-sbitem-icon'>{{yield to='icon'}}</span>
1014
+ </a>
1015
+ {{else}}
1016
+ <button
1017
+ type='button'
1018
+ class='pretui-sbitem'
1019
+ aria-label={{@label}}
1020
+ aria-current={{this.current}}
1021
+ aria-disabled={{if @disabled 'true'}}
1022
+ data-active={{if @active 'true' 'false'}}
1023
+ data-collapsed='true'
1024
+ data-test-pretui-sidebar-item
1025
+ {{on 'click' this.act}}
1026
+ ...attributes
1027
+ >
1028
+ <span class='pretui-sbitem-icon'>{{yield to='icon'}}</span>
1029
+ </button>
1030
+ {{/if}}
1031
+ </Tooltip>
1032
+ {{else if this.isLink}}
1033
+ <a
1034
+ class='pretui-sbitem'
1035
+ href={{@href}}
1036
+ aria-current={{this.current}}
1037
+ data-active={{if @active 'true' 'false'}}
1038
+ data-collapsed='false'
1039
+ data-test-pretui-sidebar-item
1040
+ ...attributes
1041
+ >
1042
+ <span class='pretui-sbitem-icon'>{{yield to='icon'}}</span>
1043
+ <span class='pretui-sbitem-label'>{{@label}}</span>
1044
+ {{#if @badge}}
1045
+ <span class='pretui-sbitem-badge'>{{@badge}}</span>
1046
+ {{/if}}
1047
+ </a>
1048
+ {{else}}
1049
+ <button
1050
+ type='button'
1051
+ class='pretui-sbitem'
1052
+ aria-current={{this.current}}
1053
+ aria-disabled={{if @disabled 'true'}}
1054
+ data-active={{if @active 'true' 'false'}}
1055
+ data-collapsed='false'
1056
+ data-test-pretui-sidebar-item
1057
+ {{on 'click' this.act}}
1058
+ ...attributes
1059
+ >
1060
+ <span class='pretui-sbitem-icon'>{{yield to='icon'}}</span>
1061
+ <span class='pretui-sbitem-label'>{{@label}}</span>
1062
+ {{#if @badge}}
1063
+ <span class='pretui-sbitem-badge'>{{@badge}}</span>
1064
+ {{/if}}
1065
+ </button>
1066
+ {{/if}}
1067
+ <style scoped>
1068
+ /* above Tooltip's layer, so these win by layer order, not file order */
1069
+ @layer PretComponent, PretComposite;
1070
+ @layer PretComposite {
1071
+ /* The Tooltip wrapper is a child component; the scope attribute rides
1072
+ `...attributes` to its root, so this rule reaches it with no
1073
+ `:deep()`. Verified mechanism, see the file header of
1074
+ structure-layout.gts. */
1075
+ .pretui-sbitem-tip {
1076
+ display: block;
1077
+ inline-size: 100%;
1078
+ }
1079
+ .pretui-sbitem {
1080
+ display: flex;
1081
+ align-items: center;
1082
+ gap: 0.6em;
1083
+ inline-size: 100%;
1084
+ min-inline-size: 0;
1085
+ min-block-size: var(--control-h, 28px);
1086
+ padding: 0 0.6em;
1087
+ border: 0;
1088
+ border-radius: var(--radius-chip, 6px);
1089
+ background: none;
1090
+ color: var(--muted-foreground);
1091
+ font: inherit;
1092
+ letter-spacing: inherit;
1093
+ text-align: start;
1094
+ text-decoration: none;
1095
+ cursor: pointer;
1096
+ box-sizing: border-box;
1097
+ transition: background var(--pretui-dur-snap, 180ms)
1098
+ var(--pretui-ease-snap, ease);
1099
+ }
1100
+ .pretui-sbitem[data-collapsed='true'] {
1101
+ justify-content: center;
1102
+ padding: 0;
1103
+ }
1104
+ .pretui-sbitem:hover {
1105
+ background: var(--hover, var(--boxel-100));
1106
+ color: var(--foreground);
1107
+ }
1108
+ .pretui-sbitem:focus-visible {
1109
+ outline: 2px solid var(--ring);
1110
+ outline-offset: -2px;
1111
+ }
1112
+ .pretui-sbitem:active {
1113
+ transform: scale(0.985);
1114
+ }
1115
+ .pretui-sbitem[data-active='true'] {
1116
+ background: var(--pretui-selected, var(--boxel-100));
1117
+ color: var(--pretui-primary-ink, var(--primary));
1118
+ font-weight: 600;
1119
+ }
1120
+ .pretui-sbitem[aria-disabled='true'] {
1121
+ opacity: 0.45;
1122
+ cursor: default;
1123
+ }
1124
+ .pretui-sbitem[aria-disabled='true']:hover {
1125
+ background: none;
1126
+ }
1127
+ .pretui-sbitem-icon {
1128
+ flex: none;
1129
+ display: grid;
1130
+ place-items: center;
1131
+ inline-size: 1.15em;
1132
+ block-size: 1.15em;
1133
+ }
1134
+ .pretui-sbitem-label {
1135
+ flex: 1 1 auto;
1136
+ min-inline-size: 0;
1137
+ overflow: hidden;
1138
+ text-overflow: ellipsis;
1139
+ white-space: nowrap;
1140
+ }
1141
+ .pretui-sbitem-badge {
1142
+ flex: none;
1143
+ font-variant-numeric: tabular-nums;
1144
+ font-size: 0.9em;
1145
+ color: var(--ink-3, var(--boxel-400));
1146
+ }
1147
+ /* A coarse pointer gets the 44px row the guideline asks for; a fine
1148
+ pointer keeps the kit's 28px rhythm. */
1149
+ @media (any-pointer: coarse) {
1150
+ .pretui-sbitem {
1151
+ min-block-size: 44px;
1152
+ }
1153
+ }
1154
+ @media (prefers-reduced-motion: reduce) {
1155
+ .pretui-sbitem {
1156
+ transition: none;
1157
+ }
1158
+ .pretui-sbitem:active {
1159
+ transform: none;
1160
+ }
1161
+ }
1162
+ }
1163
+ </style>
1164
+ </template>
1165
+ }