@cardstack/boxel-cli 0.2.0 → 0.3.0-unstable.58

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 (882) hide show
  1. package/bundled-types/base/-private.d.ts +1 -0
  2. package/bundled-types/base/address.d.ts +17 -0
  3. package/bundled-types/base/ai-app-generator.d.ts +14 -0
  4. package/bundled-types/base/amount-with-currency.d.ts +10 -0
  5. package/bundled-types/base/avif-image-def.d.ts +12 -0
  6. package/bundled-types/base/avif-meta-extractor.d.ts +4 -0
  7. package/bundled-types/base/base64-image.d.ts +25 -0
  8. package/bundled-types/base/big-integer.d.ts +12 -0
  9. package/bundled-types/base/boolean.d.ts +14 -0
  10. package/bundled-types/base/brand-functional-palette.d.ts +16 -0
  11. package/bundled-types/base/brand-guide.d.ts +26 -0
  12. package/bundled-types/base/brand-logo.d.ts +29 -0
  13. package/bundled-types/base/card-api.d.ts +513 -0
  14. package/bundled-types/base/card-serialization.d.ts +47 -0
  15. package/bundled-types/base/cards-grid.d.ts +10 -0
  16. package/bundled-types/base/code-ref.d.ts +14 -0
  17. package/bundled-types/base/codemirror-editor.d.ts +135 -0
  18. package/bundled-types/base/color-field/components/advanced-color-picker.d.ts +66 -0
  19. package/bundled-types/base/color-field/components/color-picker-field.d.ts +22 -0
  20. package/bundled-types/base/color-field/components/color-wheel-picker.d.ts +44 -0
  21. package/bundled-types/base/color-field/components/contrast-checker-addon.d.ts +14 -0
  22. package/bundled-types/base/color-field/components/recent-colors-addon.d.ts +19 -0
  23. package/bundled-types/base/color-field/components/slider-picker.d.ts +40 -0
  24. package/bundled-types/base/color-field/components/swatches-picker.d.ts +5 -0
  25. package/bundled-types/base/color-field/modifiers/setup-element-modifier.d.ts +10 -0
  26. package/bundled-types/base/color-field/util/color-field-signature.d.ts +9 -0
  27. package/bundled-types/base/color-field/util/color-utils.d.ts +96 -0
  28. package/bundled-types/base/color-field/util/css-color-parsers.d.ts +11 -0
  29. package/bundled-types/base/color.d.ts +10 -0
  30. package/bundled-types/base/command.d.ts +593 -0
  31. package/bundled-types/base/commands/search-card-result.d.ts +36 -0
  32. package/bundled-types/base/components/age.d.ts +22 -0
  33. package/bundled-types/base/components/business-days.d.ts +16 -0
  34. package/bundled-types/base/components/card-list.d.ts +25 -0
  35. package/bundled-types/base/components/cards-grid-layout.d.ts +58 -0
  36. package/bundled-types/base/components/countdown.d.ts +31 -0
  37. package/bundled-types/base/components/expiration-warning.d.ts +24 -0
  38. package/bundled-types/base/components/time-ago.d.ts +24 -0
  39. package/bundled-types/base/components/time-slots.d.ts +20 -0
  40. package/bundled-types/base/components/timeline.d.ts +22 -0
  41. package/bundled-types/base/contains-many-component.d.ts +7 -0
  42. package/bundled-types/base/coordinate.d.ts +7 -0
  43. package/bundled-types/base/country.d.ts +23 -0
  44. package/bundled-types/base/css-value.d.ts +6 -0
  45. package/bundled-types/base/csv-file-def.d.ts +29 -0
  46. package/bundled-types/base/currency.d.ts +16 -0
  47. package/bundled-types/base/date/day.d.ts +9 -0
  48. package/bundled-types/base/date/month-day.d.ts +10 -0
  49. package/bundled-types/base/date/month-year.d.ts +9 -0
  50. package/bundled-types/base/date/month.d.ts +9 -0
  51. package/bundled-types/base/date/quarter.d.ts +10 -0
  52. package/bundled-types/base/date/week.d.ts +9 -0
  53. package/bundled-types/base/date/year.d.ts +9 -0
  54. package/bundled-types/base/date-range-field.d.ts +12 -0
  55. package/bundled-types/base/date.d.ts +12 -0
  56. package/bundled-types/base/datetime-stamp.d.ts +7 -0
  57. package/bundled-types/base/datetime.d.ts +12 -0
  58. package/bundled-types/base/default-templates/atom.d.ts +10 -0
  59. package/bundled-types/base/default-templates/card-info.d.ts +32 -0
  60. package/bundled-types/base/default-templates/embedded.d.ts +11 -0
  61. package/bundled-types/base/default-templates/field-edit.d.ts +10 -0
  62. package/bundled-types/base/default-templates/file-def-edit.d.ts +8 -0
  63. package/bundled-types/base/default-templates/fitted.d.ts +12 -0
  64. package/bundled-types/base/default-templates/head.d.ts +13 -0
  65. package/bundled-types/base/default-templates/image-def-atom.d.ts +8 -0
  66. package/bundled-types/base/default-templates/image-def-embedded.d.ts +8 -0
  67. package/bundled-types/base/default-templates/image-def-fitted.d.ts +8 -0
  68. package/bundled-types/base/default-templates/image-def-isolated.d.ts +8 -0
  69. package/bundled-types/base/default-templates/isolated-and-edit.d.ts +15 -0
  70. package/bundled-types/base/default-templates/markdown-fallback.d.ts +19 -0
  71. package/bundled-types/base/default-templates/markdown.d.ts +60 -0
  72. package/bundled-types/base/default-templates/missing-template.d.ts +13 -0
  73. package/bundled-types/base/default-templates/theme-dashboard.d.ts +126 -0
  74. package/bundled-types/base/detailed-style-reference.d.ts +48 -0
  75. package/bundled-types/base/email.d.ts +10 -0
  76. package/bundled-types/base/enum.d.ts +30 -0
  77. package/bundled-types/base/ethereum-address.d.ts +13 -0
  78. package/bundled-types/base/field-component.d.ts +65 -0
  79. package/bundled-types/base/field-support.d.ts +55 -0
  80. package/bundled-types/base/file-api.d.ts +2 -0
  81. package/bundled-types/base/file-menu-items.d.ts +4 -0
  82. package/bundled-types/base/gif-image-def.d.ts +12 -0
  83. package/bundled-types/base/gif-meta-extractor.d.ts +4 -0
  84. package/bundled-types/base/gts-file-def.d.ts +7 -0
  85. package/bundled-types/base/helpers/country.d.ts +3198 -0
  86. package/bundled-types/base/helpers/sanitized-html.d.ts +2 -0
  87. package/bundled-types/base/helpers/set-background-image.d.ts +2 -0
  88. package/bundled-types/base/image-file-def.d.ts +1 -0
  89. package/bundled-types/base/image.d.ts +8 -0
  90. package/bundled-types/base/index.d.ts +1 -0
  91. package/bundled-types/base/join-the-community.d.ts +14 -0
  92. package/bundled-types/base/jpg-image-def.d.ts +12 -0
  93. package/bundled-types/base/jpg-meta-extractor.d.ts +4 -0
  94. package/bundled-types/base/json-file-def.d.ts +23 -0
  95. package/bundled-types/base/links-to-editor.d.ts +22 -0
  96. package/bundled-types/base/links-to-many-component.d.ts +7 -0
  97. package/bundled-types/base/llm-model.d.ts +6 -0
  98. package/bundled-types/base/markdown-file-def.d.ts +25 -0
  99. package/bundled-types/base/markdown-helpers.d.ts +26 -0
  100. package/bundled-types/base/markdown.d.ts +1 -0
  101. package/bundled-types/base/matrix-event.d.ts +400 -0
  102. package/bundled-types/base/menu-items.d.ts +21 -0
  103. package/bundled-types/base/number/components/badge-counter.d.ts +32 -0
  104. package/bundled-types/base/number/components/badge-metric.d.ts +34 -0
  105. package/bundled-types/base/number/components/badge-notification.d.ts +38 -0
  106. package/bundled-types/base/number/components/gauge.d.ts +45 -0
  107. package/bundled-types/base/number/components/number-input.d.ts +27 -0
  108. package/bundled-types/base/number/components/progress-bar.d.ts +44 -0
  109. package/bundled-types/base/number/components/progress-circle.d.ts +41 -0
  110. package/bundled-types/base/number/components/score.d.ts +41 -0
  111. package/bundled-types/base/number/components/stat.d.ts +38 -0
  112. package/bundled-types/base/number/util/index.d.ts +29 -0
  113. package/bundled-types/base/number.d.ts +52 -0
  114. package/bundled-types/base/percentage.d.ts +9 -0
  115. package/bundled-types/base/phone-number.d.ts +25 -0
  116. package/bundled-types/base/png-image-def.d.ts +12 -0
  117. package/bundled-types/base/png-meta-extractor.d.ts +4 -0
  118. package/bundled-types/base/positioned-card.d.ts +7 -0
  119. package/bundled-types/base/query-field-support.d.ts +6 -0
  120. package/bundled-types/base/realm-config.d.ts +16 -0
  121. package/bundled-types/base/realm.d.ts +7 -0
  122. package/bundled-types/base/resources/command-data.d.ts +43 -0
  123. package/bundled-types/base/response-field.d.ts +6 -0
  124. package/bundled-types/base/rich-markdown.d.ts +30 -0
  125. package/bundled-types/base/shared-state.d.ts +1 -0
  126. package/bundled-types/base/skill-plus.d.ts +79 -0
  127. package/bundled-types/base/skill-reference.d.ts +12 -0
  128. package/bundled-types/base/skill-set.d.ts +18 -0
  129. package/bundled-types/base/skill.d.ts +21 -0
  130. package/bundled-types/base/spec.d.ts +108 -0
  131. package/bundled-types/base/string.d.ts +2 -0
  132. package/bundled-types/base/structured-theme-variables.d.ts +85 -0
  133. package/bundled-types/base/structured-theme.d.ts +32 -0
  134. package/bundled-types/base/style-reference.d.ts +14 -0
  135. package/bundled-types/base/svg-image-def.d.ts +12 -0
  136. package/bundled-types/base/svg-meta-extractor.d.ts +12 -0
  137. package/bundled-types/base/system-card.d.ts +17 -0
  138. package/bundled-types/base/tag.d.ts +15 -0
  139. package/bundled-types/base/text-area.d.ts +2 -0
  140. package/bundled-types/base/text-file-def.d.ts +23 -0
  141. package/bundled-types/base/text-input-validator.d.ts +13 -0
  142. package/bundled-types/base/theme.d.ts +2 -0
  143. package/bundled-types/base/time/duration.d.ts +14 -0
  144. package/bundled-types/base/time/relative-time.d.ts +10 -0
  145. package/bundled-types/base/time/time-range.d.ts +11 -0
  146. package/bundled-types/base/time.d.ts +9 -0
  147. package/bundled-types/base/ts-file-def.d.ts +26 -0
  148. package/bundled-types/base/ts-highlight.d.ts +1 -0
  149. package/bundled-types/base/types/@cardstack/boxel-host/index.d.ts +5 -0
  150. package/bundled-types/base/types/ember-css-url/index.d.ts +15 -0
  151. package/bundled-types/base/typography.d.ts +14 -0
  152. package/bundled-types/base/url.d.ts +13 -0
  153. package/bundled-types/base/watched-array.d.ts +7 -0
  154. package/bundled-types/base/webp-image-def.d.ts +12 -0
  155. package/bundled-types/base/webp-meta-extractor.d.ts +4 -0
  156. package/bundled-types/base/website.d.ts +8 -0
  157. package/bundled-types/base/welcome-to-boxel.d.ts +22 -0
  158. package/bundled-types/boxel-ui/components/accordion/index.gts +50 -0
  159. package/bundled-types/boxel-ui/components/accordion/item/index.gts +156 -0
  160. package/bundled-types/boxel-ui/components/accordion/usage.gts +157 -0
  161. package/bundled-types/boxel-ui/components/add-button/index.gts +46 -0
  162. package/bundled-types/boxel-ui/components/add-button/usage.gts +54 -0
  163. package/bundled-types/boxel-ui/components/alert/index.gts +151 -0
  164. package/bundled-types/boxel-ui/components/alert/usage.gts +66 -0
  165. package/bundled-types/boxel-ui/components/avatar/index.gts +79 -0
  166. package/bundled-types/boxel-ui/components/avatar/usage.gts +96 -0
  167. package/bundled-types/boxel-ui/components/basic-fitted/index.gts +340 -0
  168. package/bundled-types/boxel-ui/components/basic-fitted/usage.gts +223 -0
  169. package/bundled-types/boxel-ui/components/button/index.gts +416 -0
  170. package/bundled-types/boxel-ui/components/button/usage.gts +334 -0
  171. package/bundled-types/boxel-ui/components/card-container/index.gts +251 -0
  172. package/bundled-types/boxel-ui/components/card-container/usage.gts +53 -0
  173. package/bundled-types/boxel-ui/components/card-header/index.gts +473 -0
  174. package/bundled-types/boxel-ui/components/card-header/usage.gts +295 -0
  175. package/bundled-types/boxel-ui/components/circle-spinner/index.gts +42 -0
  176. package/bundled-types/boxel-ui/components/circle-spinner/usage.gts +48 -0
  177. package/bundled-types/boxel-ui/components/color-palette/index.gts +134 -0
  178. package/bundled-types/boxel-ui/components/color-palette/usage.gts +69 -0
  179. package/bundled-types/boxel-ui/components/color-picker/index.gts +125 -0
  180. package/bundled-types/boxel-ui/components/color-picker/usage.gts +56 -0
  181. package/bundled-types/boxel-ui/components/container/index.gts +67 -0
  182. package/bundled-types/boxel-ui/components/container/usage.gts +59 -0
  183. package/bundled-types/boxel-ui/components/context-button/index.gts +184 -0
  184. package/bundled-types/boxel-ui/components/context-button/usage.gts +125 -0
  185. package/bundled-types/boxel-ui/components/copy-button/index.gts +79 -0
  186. package/bundled-types/boxel-ui/components/copy-button/usage.gts +25 -0
  187. package/bundled-types/boxel-ui/components/date-range-picker/index.gts +211 -0
  188. package/bundled-types/boxel-ui/components/date-range-picker/setup.gts +11 -0
  189. package/bundled-types/boxel-ui/components/date-range-picker/usage.gts +52 -0
  190. package/bundled-types/boxel-ui/components/drag-and-drop/index.gts +256 -0
  191. package/bundled-types/boxel-ui/components/drag-and-drop/usage.gts +142 -0
  192. package/bundled-types/boxel-ui/components/dropdown/index.gts +478 -0
  193. package/bundled-types/boxel-ui/components/dropdown/trigger/index.gts +70 -0
  194. package/bundled-types/boxel-ui/components/dropdown/trigger/usage.gts +54 -0
  195. package/bundled-types/boxel-ui/components/dropdown/usage.gts +119 -0
  196. package/bundled-types/boxel-ui/components/email-input/index.gts +111 -0
  197. package/bundled-types/boxel-ui/components/email-input/usage.gts +75 -0
  198. package/bundled-types/boxel-ui/components/entity-icon-display/index.gts +144 -0
  199. package/bundled-types/boxel-ui/components/entity-icon-display/usage.gts +54 -0
  200. package/bundled-types/boxel-ui/components/entity-thumbnail-display/index.gts +148 -0
  201. package/bundled-types/boxel-ui/components/entity-thumbnail-display/usage.gts +76 -0
  202. package/bundled-types/boxel-ui/components/field-container/index.gts +150 -0
  203. package/bundled-types/boxel-ui/components/field-container/usage.gts +188 -0
  204. package/bundled-types/boxel-ui/components/filter-list/index.gts +255 -0
  205. package/bundled-types/boxel-ui/components/filter-list/usage.gts +153 -0
  206. package/bundled-types/boxel-ui/components/fitted-card-container/index.gts +66 -0
  207. package/bundled-types/boxel-ui/components/fitted-card-container/usage.gts +81 -0
  208. package/bundled-types/boxel-ui/components/grid-container/grid-item-container/index.gts +37 -0
  209. package/bundled-types/boxel-ui/components/grid-container/index.gts +116 -0
  210. package/bundled-types/boxel-ui/components/grid-container/usage.gts +105 -0
  211. package/bundled-types/boxel-ui/components/header/index.gts +101 -0
  212. package/bundled-types/boxel-ui/components/header/usage.gts +116 -0
  213. package/bundled-types/boxel-ui/components/icon-button/index.gts +148 -0
  214. package/bundled-types/boxel-ui/components/icon-button/usage.gts +249 -0
  215. package/bundled-types/boxel-ui/components/input/index.gts +560 -0
  216. package/bundled-types/boxel-ui/components/input/usage.gts +449 -0
  217. package/bundled-types/boxel-ui/components/input-group/accessories/index.gts +191 -0
  218. package/bundled-types/boxel-ui/components/input-group/controls/index.gts +54 -0
  219. package/bundled-types/boxel-ui/components/input-group/index.gts +347 -0
  220. package/bundled-types/boxel-ui/components/input-group/usage.gts +437 -0
  221. package/bundled-types/boxel-ui/components/kanban/card.gts +89 -0
  222. package/bundled-types/boxel-ui/components/kanban/column-header.gts +151 -0
  223. package/bundled-types/boxel-ui/components/kanban/drag.gts +1007 -0
  224. package/bundled-types/boxel-ui/components/kanban/engine.ts +247 -0
  225. package/bundled-types/boxel-ui/components/kanban/ghost.gts +64 -0
  226. package/bundled-types/boxel-ui/components/kanban/index.gts +16 -0
  227. package/bundled-types/boxel-ui/components/kanban/modifiers.gts +42 -0
  228. package/bundled-types/boxel-ui/components/kanban/plane-inner.gts +525 -0
  229. package/bundled-types/boxel-ui/components/kanban/plane.gts +163 -0
  230. package/bundled-types/boxel-ui/components/kanban/usage.gts +392 -0
  231. package/bundled-types/boxel-ui/components/label/index.gts +64 -0
  232. package/bundled-types/boxel-ui/components/loading-indicator/index.gts +78 -0
  233. package/bundled-types/boxel-ui/components/loading-indicator/usage.gts +72 -0
  234. package/bundled-types/boxel-ui/components/menu/index.gts +267 -0
  235. package/bundled-types/boxel-ui/components/menu/usage.gts +100 -0
  236. package/bundled-types/boxel-ui/components/message/index.gts +146 -0
  237. package/bundled-types/boxel-ui/components/message/usage.gts +263 -0
  238. package/bundled-types/boxel-ui/components/modal/index.gts +159 -0
  239. package/bundled-types/boxel-ui/components/modal/usage.gts +206 -0
  240. package/bundled-types/boxel-ui/components/multi-select/after-options.gts +59 -0
  241. package/bundled-types/boxel-ui/components/multi-select/index.gts +230 -0
  242. package/bundled-types/boxel-ui/components/multi-select/selected-item.gts +91 -0
  243. package/bundled-types/boxel-ui/components/multi-select/trigger.gts +190 -0
  244. package/bundled-types/boxel-ui/components/multi-select/usage.gts +420 -0
  245. package/bundled-types/boxel-ui/components/phone-input/index.gts +149 -0
  246. package/bundled-types/boxel-ui/components/phone-input/usage.gts +73 -0
  247. package/bundled-types/boxel-ui/components/picker/before-options-with-search.gts +340 -0
  248. package/bundled-types/boxel-ui/components/picker/index.gts +427 -0
  249. package/bundled-types/boxel-ui/components/picker/option-row.gts +270 -0
  250. package/bundled-types/boxel-ui/components/picker/selected-item.gts +171 -0
  251. package/bundled-types/boxel-ui/components/picker/trigger-labeled.gts +216 -0
  252. package/bundled-types/boxel-ui/components/picker/usage.gts +179 -0
  253. package/bundled-types/boxel-ui/components/pill/index.gts +231 -0
  254. package/bundled-types/boxel-ui/components/pill/usage.gts +230 -0
  255. package/bundled-types/boxel-ui/components/progress-bar/index.gts +124 -0
  256. package/bundled-types/boxel-ui/components/progress-bar/usage.gts +131 -0
  257. package/bundled-types/boxel-ui/components/progress-radial/index.gts +95 -0
  258. package/bundled-types/boxel-ui/components/progress-radial/usage.gts +79 -0
  259. package/bundled-types/boxel-ui/components/radio-input/index.gts +143 -0
  260. package/bundled-types/boxel-ui/components/radio-input/item.gts +210 -0
  261. package/bundled-types/boxel-ui/components/radio-input/usage.gts +303 -0
  262. package/bundled-types/boxel-ui/components/realm-icon/index.gts +129 -0
  263. package/bundled-types/boxel-ui/components/realm-icon/usage.gts +62 -0
  264. package/bundled-types/boxel-ui/components/resizable-panel-group/handle.gts +180 -0
  265. package/bundled-types/boxel-ui/components/resizable-panel-group/index.gts +341 -0
  266. package/bundled-types/boxel-ui/components/resizable-panel-group/panel.gts +86 -0
  267. package/bundled-types/boxel-ui/components/resizable-panel-group/usage.gts +350 -0
  268. package/bundled-types/boxel-ui/components/resizable-panel-group/utils/adjust-layout-by-delta.ts +231 -0
  269. package/bundled-types/boxel-ui/components/resizable-panel-group/utils/assert.ts +10 -0
  270. package/bundled-types/boxel-ui/components/resizable-panel-group/utils/calculate-delta-percentage.ts +41 -0
  271. package/bundled-types/boxel-ui/components/resizable-panel-group/utils/calculate-unsafe-default-layout.ts +53 -0
  272. package/bundled-types/boxel-ui/components/resizable-panel-group/utils/compare-layouts.ts +12 -0
  273. package/bundled-types/boxel-ui/components/resizable-panel-group/utils/const.ts +6 -0
  274. package/bundled-types/boxel-ui/components/resizable-panel-group/utils/determine-pivot-indices.ts +15 -0
  275. package/bundled-types/boxel-ui/components/resizable-panel-group/utils/dom/get-panel-element.ts +10 -0
  276. package/bundled-types/boxel-ui/components/resizable-panel-group/utils/dom/get-panel-elements-for-group.ts +8 -0
  277. package/bundled-types/boxel-ui/components/resizable-panel-group/utils/dom/get-panel-group-element.ts +21 -0
  278. package/bundled-types/boxel-ui/components/resizable-panel-group/utils/dom/get-resize-handle-element-index.ts +14 -0
  279. package/bundled-types/boxel-ui/components/resizable-panel-group/utils/dom/get-resize-handle-element.ts +12 -0
  280. package/bundled-types/boxel-ui/components/resizable-panel-group/utils/dom/get-resize-handle-elements-for-group.ts +10 -0
  281. package/bundled-types/boxel-ui/components/resizable-panel-group/utils/fuzzy-layouts-equal.ts +22 -0
  282. package/bundled-types/boxel-ui/components/resizable-panel-group/utils/fuzzy-numbers.ts +21 -0
  283. package/bundled-types/boxel-ui/components/resizable-panel-group/utils/get-resize-event-coordinates.ts +8 -0
  284. package/bundled-types/boxel-ui/components/resizable-panel-group/utils/get-resize-event-cursor-position.ts +10 -0
  285. package/bundled-types/boxel-ui/components/resizable-panel-group/utils/panel-resize-handle-registry.ts +446 -0
  286. package/bundled-types/boxel-ui/components/resizable-panel-group/utils/resize-panel.ts +35 -0
  287. package/bundled-types/boxel-ui/components/resizable-panel-group/utils/types.ts +23 -0
  288. package/bundled-types/boxel-ui/components/resizable-panel-group/utils/validate-panel-group-layout.ts +86 -0
  289. package/bundled-types/boxel-ui/components/select/index.gts +882 -0
  290. package/bundled-types/boxel-ui/components/select/trigger.gts +132 -0
  291. package/bundled-types/boxel-ui/components/select/usage.gts +353 -0
  292. package/bundled-types/boxel-ui/components/skeleton-placeholder/index.gts +89 -0
  293. package/bundled-types/boxel-ui/components/skeleton-placeholder/usage.gts +102 -0
  294. package/bundled-types/boxel-ui/components/sort-dropdown/index.gts +91 -0
  295. package/bundled-types/boxel-ui/components/sort-dropdown/usage.gts +77 -0
  296. package/bundled-types/boxel-ui/components/swatch/index.gts +81 -0
  297. package/bundled-types/boxel-ui/components/swatch/usage.gts +57 -0
  298. package/bundled-types/boxel-ui/components/switch/index.gts +95 -0
  299. package/bundled-types/boxel-ui/components/switch/usage.gts +79 -0
  300. package/bundled-types/boxel-ui/components/tabbed-header/index.gts +141 -0
  301. package/bundled-types/boxel-ui/components/tabbed-header/usage.gts +103 -0
  302. package/bundled-types/boxel-ui/components/tag/index.gts +50 -0
  303. package/bundled-types/boxel-ui/components/tag/usage.gts +89 -0
  304. package/bundled-types/boxel-ui/components/tag-list/index.gts +85 -0
  305. package/bundled-types/boxel-ui/components/tag-list/usage.gts +129 -0
  306. package/bundled-types/boxel-ui/components/tooltip/index.gts +306 -0
  307. package/bundled-types/boxel-ui/components/tooltip/usage.gts +168 -0
  308. package/bundled-types/boxel-ui/components/view-selector/index.gts +166 -0
  309. package/bundled-types/boxel-ui/components/view-selector/usage.gts +149 -0
  310. package/bundled-types/boxel-ui/components.ts +169 -0
  311. package/bundled-types/boxel-ui/helpers/add-class-to-svg.ts +8 -0
  312. package/bundled-types/boxel-ui/helpers/clipboard.ts +21 -0
  313. package/bundled-types/boxel-ui/helpers/cn.ts +12 -0
  314. package/bundled-types/boxel-ui/helpers/color-tools.ts +331 -0
  315. package/bundled-types/boxel-ui/helpers/compact.ts +3 -0
  316. package/bundled-types/boxel-ui/helpers/contrast-color.ts +32 -0
  317. package/bundled-types/boxel-ui/helpers/css-var.ts +41 -0
  318. package/bundled-types/boxel-ui/helpers/currency-format.ts +25 -0
  319. package/bundled-types/boxel-ui/helpers/dayjs-format.ts +27 -0
  320. package/bundled-types/boxel-ui/helpers/deterministic-color-from-string.ts +45 -0
  321. package/bundled-types/boxel-ui/helpers/element.ts +16 -0
  322. package/bundled-types/boxel-ui/helpers/extract-css-variables.ts +126 -0
  323. package/bundled-types/boxel-ui/helpers/format-age.ts +72 -0
  324. package/bundled-types/boxel-ui/helpers/format-countdown.ts +110 -0
  325. package/bundled-types/boxel-ui/helpers/format-currency.ts +95 -0
  326. package/bundled-types/boxel-ui/helpers/format-date-time.ts +567 -0
  327. package/bundled-types/boxel-ui/helpers/format-duration.ts +143 -0
  328. package/bundled-types/boxel-ui/helpers/format-file-size.ts +49 -0
  329. package/bundled-types/boxel-ui/helpers/format-list.ts +73 -0
  330. package/bundled-types/boxel-ui/helpers/format-names.ts +103 -0
  331. package/bundled-types/boxel-ui/helpers/format-number.ts +140 -0
  332. package/bundled-types/boxel-ui/helpers/format-ordinal.ts +115 -0
  333. package/bundled-types/boxel-ui/helpers/format-period.ts +188 -0
  334. package/bundled-types/boxel-ui/helpers/format-relative-time.ts +789 -0
  335. package/bundled-types/boxel-ui/helpers/generate-css-variables.ts +47 -0
  336. package/bundled-types/boxel-ui/helpers/markdown-escape.ts +36 -0
  337. package/bundled-types/boxel-ui/helpers/math-helpers.ts +18 -0
  338. package/bundled-types/boxel-ui/helpers/menu-divider.ts +15 -0
  339. package/bundled-types/boxel-ui/helpers/menu-item.ts +76 -0
  340. package/bundled-types/boxel-ui/helpers/optional.ts +7 -0
  341. package/bundled-types/boxel-ui/helpers/pick.ts +11 -0
  342. package/bundled-types/boxel-ui/helpers/sanitize-html.ts +45 -0
  343. package/bundled-types/boxel-ui/helpers/string.ts +15 -0
  344. package/bundled-types/boxel-ui/helpers/theme-css.ts +148 -0
  345. package/bundled-types/boxel-ui/helpers/truth-helpers.ts +48 -0
  346. package/bundled-types/boxel-ui/helpers/validate-email-format.ts +138 -0
  347. package/bundled-types/boxel-ui/helpers/validate-phone-format.ts +201 -0
  348. package/bundled-types/boxel-ui/helpers.ts +134 -0
  349. package/bundled-types/boxel-ui/icons/ai-bw.gts +22 -0
  350. package/bundled-types/boxel-ui/icons/arrow-left.gts +25 -0
  351. package/bundled-types/boxel-ui/icons/arrow-right.gts +28 -0
  352. package/bundled-types/boxel-ui/icons/arrow-top-left.gts +22 -0
  353. package/bundled-types/boxel-ui/icons/arrow-up.gts +25 -0
  354. package/bundled-types/boxel-ui/icons/atom.gts +26 -0
  355. package/bundled-types/boxel-ui/icons/boxel-icon-with-text.gts +29 -0
  356. package/bundled-types/boxel-ui/icons/boxel-icon.gts +34 -0
  357. package/bundled-types/boxel-ui/icons/card-definition.gts +26 -0
  358. package/bundled-types/boxel-ui/icons/card-instance.gts +26 -0
  359. package/bundled-types/boxel-ui/icons/card.gts +24 -0
  360. package/bundled-types/boxel-ui/icons/cardbot-lg.gts +24 -0
  361. package/bundled-types/boxel-ui/icons/caret-down.gts +23 -0
  362. package/bundled-types/boxel-ui/icons/caret-up.gts +23 -0
  363. package/bundled-types/boxel-ui/icons/check-mark.gts +23 -0
  364. package/bundled-types/boxel-ui/icons/chevron-right.gts +23 -0
  365. package/bundled-types/boxel-ui/icons/copy.gts +28 -0
  366. package/bundled-types/boxel-ui/icons/diagonal-arrow-left-up.gts +21 -0
  367. package/bundled-types/boxel-ui/icons/download.gts +19 -0
  368. package/bundled-types/boxel-ui/icons/dropdown-arrow-down.gts +20 -0
  369. package/bundled-types/boxel-ui/icons/dropdown-arrow-filled.gts +19 -0
  370. package/bundled-types/boxel-ui/icons/dropdown-arrow-up.gts +20 -0
  371. package/bundled-types/boxel-ui/icons/edit.gts +14 -0
  372. package/bundled-types/boxel-ui/icons/embedded.gts +34 -0
  373. package/bundled-types/boxel-ui/icons/exclamation-circle.gts +26 -0
  374. package/bundled-types/boxel-ui/icons/exclamation.gts +20 -0
  375. package/bundled-types/boxel-ui/icons/eye.gts +19 -0
  376. package/bundled-types/boxel-ui/icons/failure-bordered.gts +26 -0
  377. package/bundled-types/boxel-ui/icons/field.gts +26 -0
  378. package/bundled-types/boxel-ui/icons/file-alert.gts +28 -0
  379. package/bundled-types/boxel-ui/icons/file.gts +27 -0
  380. package/bundled-types/boxel-ui/icons/fitted.gts +42 -0
  381. package/bundled-types/boxel-ui/icons/folder.gts +26 -0
  382. package/bundled-types/boxel-ui/icons/form.gts +38 -0
  383. package/bundled-types/boxel-ui/icons/four-lines.gts +21 -0
  384. package/bundled-types/boxel-ui/icons/grid-3x3.gts +26 -0
  385. package/bundled-types/boxel-ui/icons/group.gts +22 -0
  386. package/bundled-types/boxel-ui/icons/head.gts +28 -0
  387. package/bundled-types/boxel-ui/icons/highlight-icon.gts +46 -0
  388. package/bundled-types/boxel-ui/icons/icon-circle-selected.gts +25 -0
  389. package/bundled-types/boxel-ui/icons/icon-circle.gts +25 -0
  390. package/bundled-types/boxel-ui/icons/icon-code.gts +22 -0
  391. package/bundled-types/boxel-ui/icons/icon-funnel.gts +23 -0
  392. package/bundled-types/boxel-ui/icons/icon-globe.gts +19 -0
  393. package/bundled-types/boxel-ui/icons/icon-grid.gts +68 -0
  394. package/bundled-types/boxel-ui/icons/icon-hexagon.gts +22 -0
  395. package/bundled-types/boxel-ui/icons/icon-inherit.gts +19 -0
  396. package/bundled-types/boxel-ui/icons/icon-link.gts +20 -0
  397. package/bundled-types/boxel-ui/icons/icon-list.gts +40 -0
  398. package/bundled-types/boxel-ui/icons/icon-minus-circle.gts +26 -0
  399. package/bundled-types/boxel-ui/icons/icon-pencil-crossed-out.gts +33 -0
  400. package/bundled-types/boxel-ui/icons/icon-pencil-not-crossed-out.gts +21 -0
  401. package/bundled-types/boxel-ui/icons/icon-pencil.gts +23 -0
  402. package/bundled-types/boxel-ui/icons/icon-plus-circle.gts +31 -0
  403. package/bundled-types/boxel-ui/icons/icon-plus-thin.gts +19 -0
  404. package/bundled-types/boxel-ui/icons/icon-plus.gts +20 -0
  405. package/bundled-types/boxel-ui/icons/icon-search-thick.gts +27 -0
  406. package/bundled-types/boxel-ui/icons/icon-search.gts +25 -0
  407. package/bundled-types/boxel-ui/icons/icon-table.gts +44 -0
  408. package/bundled-types/boxel-ui/icons/icon-trash.gts +24 -0
  409. package/bundled-types/boxel-ui/icons/icon-turn-down-right.gts +18 -0
  410. package/bundled-types/boxel-ui/icons/icon-x.gts +21 -0
  411. package/bundled-types/boxel-ui/icons/image-placeholder.gts +30 -0
  412. package/bundled-types/boxel-ui/icons/isolated.gts +20 -0
  413. package/bundled-types/boxel-ui/icons/loading-indicator.gts +26 -0
  414. package/bundled-types/boxel-ui/icons/lock.gts +23 -0
  415. package/bundled-types/boxel-ui/icons/markdown.gts +19 -0
  416. package/bundled-types/boxel-ui/icons/profile.gts +23 -0
  417. package/bundled-types/boxel-ui/icons/publish-site-icon.gts +25 -0
  418. package/bundled-types/boxel-ui/icons/rows-4.gts +26 -0
  419. package/bundled-types/boxel-ui/icons/select-all.gts +25 -0
  420. package/bundled-types/boxel-ui/icons/send.gts +21 -0
  421. package/bundled-types/boxel-ui/icons/sparkle.gts +21 -0
  422. package/bundled-types/boxel-ui/icons/star-filled.gts +25 -0
  423. package/bundled-types/boxel-ui/icons/star-half-fill.gts +27 -0
  424. package/bundled-types/boxel-ui/icons/star.gts +25 -0
  425. package/bundled-types/boxel-ui/icons/success-bordered.gts +30 -0
  426. package/bundled-types/boxel-ui/icons/three-dots-horizontal.gts +21 -0
  427. package/bundled-types/boxel-ui/icons/triangle-left.gts +23 -0
  428. package/bundled-types/boxel-ui/icons/triangle-right.gts +23 -0
  429. package/bundled-types/boxel-ui/icons/types.ts +10 -0
  430. package/bundled-types/boxel-ui/icons/upload.gts +20 -0
  431. package/bundled-types/boxel-ui/icons/warning.gts +19 -0
  432. package/bundled-types/boxel-ui/icons.gts +246 -0
  433. package/bundled-types/boxel-ui/modifiers/auto-focus.ts +7 -0
  434. package/bundled-types/boxel-ui/modifiers/set-css-var.ts +24 -0
  435. package/bundled-types/boxel-ui/modifiers.ts +14 -0
  436. package/bundled-types/boxel-ui/types/@cardstack/boxel-ui/index.d.ts +3 -0
  437. package/bundled-types/boxel-ui/types/ember-css-url/index.d.ts +15 -0
  438. package/bundled-types/boxel-ui/types/ember-draggable-modifiers/index.d.ts +109 -0
  439. package/bundled-types/boxel-ui/types/ember-draggable-modifiers/utils.d.ts +7 -0
  440. package/bundled-types/boxel-ui/types/ember-focus-trap/index.d.ts +20 -0
  441. package/bundled-types/boxel-ui/types/ember-power-calendar/components/index.d.ts +9 -0
  442. package/bundled-types/boxel-ui/types/ember-resize-modifier/index.d.ts +14 -0
  443. package/bundled-types/boxel-ui/types/ember-set-body-class/index.d.ts +12 -0
  444. package/bundled-types/boxel-ui/types/ember-sortable/index.d.ts +52 -0
  445. package/bundled-types/boxel-ui/types/global.d.ts +7 -0
  446. package/bundled-types/boxel-ui/usage.ts +112 -0
  447. package/bundled-types/boxel-ui/utils/date-utils.ts +192 -0
  448. package/bundled-types/boxel-ui/utils/fitted-formats.ts +161 -0
  449. package/bundled-types/host-app/app.ts +22 -0
  450. package/bundled-types/host-app/commands/add-field-to-card-definition.ts +74 -0
  451. package/bundled-types/host-app/commands/ai-assistant.ts +203 -0
  452. package/bundled-types/host-app/commands/apply-markdown-edit.ts +203 -0
  453. package/bundled-types/host-app/commands/apply-search-replace-block.ts +225 -0
  454. package/bundled-types/host-app/commands/ask-ai.ts +66 -0
  455. package/bundled-types/host-app/commands/authed-fetch.ts +53 -0
  456. package/bundled-types/host-app/commands/bot-requests/create-listing-pr-request.ts +77 -0
  457. package/bundled-types/host-app/commands/bot-requests/send-bot-trigger-event.ts +53 -0
  458. package/bundled-types/host-app/commands/can-read-realm.ts +34 -0
  459. package/bundled-types/host-app/commands/cancel-indexing-job.ts +29 -0
  460. package/bundled-types/host-app/commands/check-correctness.ts +309 -0
  461. package/bundled-types/host-app/commands/copy-and-edit.ts +311 -0
  462. package/bundled-types/host-app/commands/copy-card-as-markdown.ts +41 -0
  463. package/bundled-types/host-app/commands/copy-card-to-stack.ts +70 -0
  464. package/bundled-types/host-app/commands/copy-card.ts +67 -0
  465. package/bundled-types/host-app/commands/copy-file-to-realm.ts +82 -0
  466. package/bundled-types/host-app/commands/copy-source.ts +46 -0
  467. package/bundled-types/host-app/commands/create-ai-assistant-room.ts +144 -0
  468. package/bundled-types/host-app/commands/create-and-open-submission-workflow-card.ts +30 -0
  469. package/bundled-types/host-app/commands/create-specs.ts +422 -0
  470. package/bundled-types/host-app/commands/create-submission-workflow.ts +172 -0
  471. package/bundled-types/host-app/commands/evaluate-module.ts +119 -0
  472. package/bundled-types/host-app/commands/execute-atomic-operations.ts +44 -0
  473. package/bundled-types/host-app/commands/fetch-card-json.ts +33 -0
  474. package/bundled-types/host-app/commands/full-reindex-realm.ts +30 -0
  475. package/bundled-types/host-app/commands/generate-example-cards.ts +298 -0
  476. package/bundled-types/host-app/commands/generate-readme-spec.ts +116 -0
  477. package/bundled-types/host-app/commands/generate-theme-example.ts +147 -0
  478. package/bundled-types/host-app/commands/generate-thumbnail.ts +247 -0
  479. package/bundled-types/host-app/commands/get-all-realm-metas.ts +38 -0
  480. package/bundled-types/host-app/commands/get-available-realm-identifiers.ts +29 -0
  481. package/bundled-types/host-app/commands/get-card-type-schema.ts +59 -0
  482. package/bundled-types/host-app/commands/get-card.ts +34 -0
  483. package/bundled-types/host-app/commands/get-catalog-realm-identifiers.ts +29 -0
  484. package/bundled-types/host-app/commands/get-default-writable-realm.ts +28 -0
  485. package/bundled-types/host-app/commands/get-events-from-room.ts +70 -0
  486. package/bundled-types/host-app/commands/get-realm-of-resource-identifier.ts +37 -0
  487. package/bundled-types/host-app/commands/get-user-system-card.ts +38 -0
  488. package/bundled-types/host-app/commands/index.ts +590 -0
  489. package/bundled-types/host-app/commands/instantiate-card.ts +185 -0
  490. package/bundled-types/host-app/commands/invalidate-realm-identifiers.ts +33 -0
  491. package/bundled-types/host-app/commands/invite-user-to-room.ts +34 -0
  492. package/bundled-types/host-app/commands/lint-and-fix.ts +60 -0
  493. package/bundled-types/host-app/commands/listing-action-build.ts +79 -0
  494. package/bundled-types/host-app/commands/listing-action-init.ts +106 -0
  495. package/bundled-types/host-app/commands/listing-create.ts +632 -0
  496. package/bundled-types/host-app/commands/listing-generate-example.ts +83 -0
  497. package/bundled-types/host-app/commands/listing-install.ts +227 -0
  498. package/bundled-types/host-app/commands/listing-remix.ts +150 -0
  499. package/bundled-types/host-app/commands/listing-update-specs.ts +116 -0
  500. package/bundled-types/host-app/commands/listing-use.ts +97 -0
  501. package/bundled-types/host-app/commands/one-shot-llm-request.ts +209 -0
  502. package/bundled-types/host-app/commands/open-ai-assistant-room.ts +38 -0
  503. package/bundled-types/host-app/commands/open-create-listing-modal.ts +52 -0
  504. package/bundled-types/host-app/commands/open-in-interact-mode.ts +36 -0
  505. package/bundled-types/host-app/commands/open-workspace.ts +38 -0
  506. package/bundled-types/host-app/commands/patch-card-instance.ts +108 -0
  507. package/bundled-types/host-app/commands/patch-code.ts +243 -0
  508. package/bundled-types/host-app/commands/patch-fields.ts +304 -0
  509. package/bundled-types/host-app/commands/patch-theme.ts +52 -0
  510. package/bundled-types/host-app/commands/persist-module-inspector-view.ts +41 -0
  511. package/bundled-types/host-app/commands/populate-with-sample-data.ts +84 -0
  512. package/bundled-types/host-app/commands/preview-format.ts +52 -0
  513. package/bundled-types/host-app/commands/read-binary-file.ts +62 -0
  514. package/bundled-types/host-app/commands/read-card-for-ai-assistant.ts +50 -0
  515. package/bundled-types/host-app/commands/read-file-for-ai-assistant.ts +46 -0
  516. package/bundled-types/host-app/commands/read-source.ts +46 -0
  517. package/bundled-types/host-app/commands/read-text-file.ts +44 -0
  518. package/bundled-types/host-app/commands/register-bot.ts +42 -0
  519. package/bundled-types/host-app/commands/reindex-realm.ts +30 -0
  520. package/bundled-types/host-app/commands/retry-submission-workflow.ts +119 -0
  521. package/bundled-types/host-app/commands/sanitize-module-list.ts +83 -0
  522. package/bundled-types/host-app/commands/save-card.ts +44 -0
  523. package/bundled-types/host-app/commands/screenshot-card.ts +148 -0
  524. package/bundled-types/host-app/commands/search-and-choose.ts +180 -0
  525. package/bundled-types/host-app/commands/search-cards.ts +102 -0
  526. package/bundled-types/host-app/commands/search-google-images.ts +100 -0
  527. package/bundled-types/host-app/commands/send-ai-assistant-message.ts +122 -0
  528. package/bundled-types/host-app/commands/send-request-via-proxy.ts +70 -0
  529. package/bundled-types/host-app/commands/serialize-card.ts +45 -0
  530. package/bundled-types/host-app/commands/set-active-llm.ts +39 -0
  531. package/bundled-types/host-app/commands/set-user-system-card.ts +29 -0
  532. package/bundled-types/host-app/commands/show-card.ts +102 -0
  533. package/bundled-types/host-app/commands/show-file.ts +39 -0
  534. package/bundled-types/host-app/commands/store-add.ts +37 -0
  535. package/bundled-types/host-app/commands/summarize-session.ts +82 -0
  536. package/bundled-types/host-app/commands/switch-submode.ts +112 -0
  537. package/bundled-types/host-app/commands/sync-openrouter-models.ts +373 -0
  538. package/bundled-types/host-app/commands/transform-cards.ts +59 -0
  539. package/bundled-types/host-app/commands/unregister-bot.ts +29 -0
  540. package/bundled-types/host-app/commands/update-code-path-with-selection.ts +45 -0
  541. package/bundled-types/host-app/commands/update-playground-selection.ts +37 -0
  542. package/bundled-types/host-app/commands/update-room-skills.ts +231 -0
  543. package/bundled-types/host-app/commands/utils.ts +178 -0
  544. package/bundled-types/host-app/commands/validate-realm.ts +40 -0
  545. package/bundled-types/host-app/commands/write-binary-file.ts +142 -0
  546. package/bundled-types/host-app/commands/write-text-file.ts +104 -0
  547. package/bundled-types/host-app/components/.gitkeep +0 -0
  548. package/bundled-types/host-app/components/ai-assistant/action-bar.gts +188 -0
  549. package/bundled-types/host-app/components/ai-assistant/ai-assist-button-active-bg.webp +0 -0
  550. package/bundled-types/host-app/components/ai-assistant/ai-assist-button-active-bg@2x.webp +0 -0
  551. package/bundled-types/host-app/components/ai-assistant/ai-assist-button-active-bg@3x.webp +0 -0
  552. package/bundled-types/host-app/components/ai-assistant/ai-assist-icon-animated.webp +0 -0
  553. package/bundled-types/host-app/components/ai-assistant/ai-assist-icon-bw.png +0 -0
  554. package/bundled-types/host-app/components/ai-assistant/ai-assist-icon-bw@2x.png +0 -0
  555. package/bundled-types/host-app/components/ai-assistant/ai-assist-icon-bw@3x.png +0 -0
  556. package/bundled-types/host-app/components/ai-assistant/ai-assist-icon.webp +0 -0
  557. package/bundled-types/host-app/components/ai-assistant/ai-assist-icon@2x.webp +0 -0
  558. package/bundled-types/host-app/components/ai-assistant/ai-assist-icon@3x.webp +0 -0
  559. package/bundled-types/host-app/components/ai-assistant/apply-button/index.gts +226 -0
  560. package/bundled-types/host-app/components/ai-assistant/apply-button/usage.gts +81 -0
  561. package/bundled-types/host-app/components/ai-assistant/attached-file-dropdown-menu.gts +179 -0
  562. package/bundled-types/host-app/components/ai-assistant/attachment-picker/attach-button.gts +176 -0
  563. package/bundled-types/host-app/components/ai-assistant/attachment-picker/attached-items.gts +271 -0
  564. package/bundled-types/host-app/components/ai-assistant/attachment-picker/index.gts +144 -0
  565. package/bundled-types/host-app/components/ai-assistant/attachment-picker/usage.gts +127 -0
  566. package/bundled-types/host-app/components/ai-assistant/button.gts +60 -0
  567. package/bundled-types/host-app/components/ai-assistant/chat-input/index.gts +203 -0
  568. package/bundled-types/host-app/components/ai-assistant/chat-input/usage.gts +68 -0
  569. package/bundled-types/host-app/components/ai-assistant/code-block/actions.gts +58 -0
  570. package/bundled-types/host-app/components/ai-assistant/code-block/apply-code-patch-button.gts +66 -0
  571. package/bundled-types/host-app/components/ai-assistant/code-block/command-header.gts +115 -0
  572. package/bundled-types/host-app/components/ai-assistant/code-block/diff-editor-header.gts +209 -0
  573. package/bundled-types/host-app/components/ai-assistant/code-block/index.gts +228 -0
  574. package/bundled-types/host-app/components/ai-assistant/code-block/patch-footer.gts +32 -0
  575. package/bundled-types/host-app/components/ai-assistant/code-block/view-code-button.gts +73 -0
  576. package/bundled-types/host-app/components/ai-assistant/focus-pill/index.gts +60 -0
  577. package/bundled-types/host-app/components/ai-assistant/focus-pill/usage.gts +45 -0
  578. package/bundled-types/host-app/components/ai-assistant/llm-mode-toggle.gts +113 -0
  579. package/bundled-types/host-app/components/ai-assistant/llm-select.gts +158 -0
  580. package/bundled-types/host-app/components/ai-assistant/message/aibot-message.gts +374 -0
  581. package/bundled-types/host-app/components/ai-assistant/message/attachments.gts +153 -0
  582. package/bundled-types/host-app/components/ai-assistant/message/index.gts +678 -0
  583. package/bundled-types/host-app/components/ai-assistant/message/meta.gts +66 -0
  584. package/bundled-types/host-app/components/ai-assistant/message/text-content.gts +32 -0
  585. package/bundled-types/host-app/components/ai-assistant/message/usage.gts +182 -0
  586. package/bundled-types/host-app/components/ai-assistant/message/user-message.gts +52 -0
  587. package/bundled-types/host-app/components/ai-assistant/new-session-button.gts +126 -0
  588. package/bundled-types/host-app/components/ai-assistant/new-session-settings.gts +180 -0
  589. package/bundled-types/host-app/components/ai-assistant/new-session.gts +83 -0
  590. package/bundled-types/host-app/components/ai-assistant/panel-popover.gts +102 -0
  591. package/bundled-types/host-app/components/ai-assistant/panel.gts +453 -0
  592. package/bundled-types/host-app/components/ai-assistant/past-session-item.gts +323 -0
  593. package/bundled-types/host-app/components/ai-assistant/past-sessions.gts +115 -0
  594. package/bundled-types/host-app/components/ai-assistant/rename-session.gts +144 -0
  595. package/bundled-types/host-app/components/ai-assistant/restore-file-modal.gts +105 -0
  596. package/bundled-types/host-app/components/ai-assistant/skill-menu/index.gts +190 -0
  597. package/bundled-types/host-app/components/ai-assistant/skill-menu/skill-toggle.gts +168 -0
  598. package/bundled-types/host-app/components/ai-assistant/skill-menu/usage.gts +48 -0
  599. package/bundled-types/host-app/components/ai-assistant/toast.gts +293 -0
  600. package/bundled-types/host-app/components/card-catalog/modal.gts +579 -0
  601. package/bundled-types/host-app/components/card-error.gts +41 -0
  602. package/bundled-types/host-app/components/card-instance-picker/index.gts +54 -0
  603. package/bundled-types/host-app/components/card-pill.gts +189 -0
  604. package/bundled-types/host-app/components/card-prerender.gts +880 -0
  605. package/bundled-types/host-app/components/card-renderer.gts +84 -0
  606. package/bundled-types/host-app/components/card-search/constants.ts +76 -0
  607. package/bundled-types/host-app/components/card-search/item-button.gts +243 -0
  608. package/bundled-types/host-app/components/card-search/panel.gts +150 -0
  609. package/bundled-types/host-app/components/card-search/search-bar.gts +218 -0
  610. package/bundled-types/host-app/components/card-search/search-content.gts +604 -0
  611. package/bundled-types/host-app/components/card-search/search-result-header.gts +165 -0
  612. package/bundled-types/host-app/components/card-search/search-result-section.gts +545 -0
  613. package/bundled-types/host-app/components/card-search/section-header.gts +117 -0
  614. package/bundled-types/host-app/components/editor/directory.gts +308 -0
  615. package/bundled-types/host-app/components/editor/file-tree.gts +69 -0
  616. package/bundled-types/host-app/components/editor/import-module.gts +27 -0
  617. package/bundled-types/host-app/components/editor/indexed-file-tree.gts +572 -0
  618. package/bundled-types/host-app/components/editor/recent-files.gts +141 -0
  619. package/bundled-types/host-app/components/file-pill.gts +206 -0
  620. package/bundled-types/host-app/components/head-format-preview.gts +781 -0
  621. package/bundled-types/host-app/components/host-mode/breadcrumb-item.gts +150 -0
  622. package/bundled-types/host-app/components/host-mode/breadcrumbs.gts +131 -0
  623. package/bundled-types/host-app/components/host-mode/card.gts +199 -0
  624. package/bundled-types/host-app/components/host-mode/content.gts +195 -0
  625. package/bundled-types/host-app/components/host-mode/stack-item.gts +310 -0
  626. package/bundled-types/host-app/components/host-mode/stack.gts +91 -0
  627. package/bundled-types/host-app/components/matrix/auth-container.gts +66 -0
  628. package/bundled-types/host-app/components/matrix/auth.gts +73 -0
  629. package/bundled-types/host-app/components/matrix/forgot-password.gts +487 -0
  630. package/bundled-types/host-app/components/matrix/login.gts +241 -0
  631. package/bundled-types/host-app/components/matrix/register-user.gts +843 -0
  632. package/bundled-types/host-app/components/matrix/room-message-command.gts +330 -0
  633. package/bundled-types/host-app/components/matrix/room-message.gts +261 -0
  634. package/bundled-types/host-app/components/matrix/room.gts +1872 -0
  635. package/bundled-types/host-app/components/matrix/user-profile.gts +99 -0
  636. package/bundled-types/host-app/components/modal-container.gts +171 -0
  637. package/bundled-types/host-app/components/operator-mode/binary-file-info.gts +77 -0
  638. package/bundled-types/host-app/components/operator-mode/card-adoption-chain.gts +99 -0
  639. package/bundled-types/host-app/components/operator-mode/card-error-detail.gts +87 -0
  640. package/bundled-types/host-app/components/operator-mode/card-error.gts +177 -0
  641. package/bundled-types/host-app/components/operator-mode/card-schema-editor.gts +616 -0
  642. package/bundled-types/host-app/components/operator-mode/card-url-bar.gts +197 -0
  643. package/bundled-types/host-app/components/operator-mode/choose-file-modal.gts +562 -0
  644. package/bundled-types/host-app/components/operator-mode/choose-subscription-plan-modal.gts +517 -0
  645. package/bundled-types/host-app/components/operator-mode/code-editor.gts +736 -0
  646. package/bundled-types/host-app/components/operator-mode/code-submode/editor-indicator.gts +128 -0
  647. package/bundled-types/host-app/components/operator-mode/code-submode/format-chooser.gts +592 -0
  648. package/bundled-types/host-app/components/operator-mode/code-submode/inner-container.gts +162 -0
  649. package/bundled-types/host-app/components/operator-mode/code-submode/left-panel-toggle.gts +267 -0
  650. package/bundled-types/host-app/components/operator-mode/code-submode/module-inspector.gts +836 -0
  651. package/bundled-types/host-app/components/operator-mode/code-submode/playground/field-chooser-modal.gts +97 -0
  652. package/bundled-types/host-app/components/operator-mode/code-submode/playground/instance-chooser-dropdown.gts +346 -0
  653. package/bundled-types/host-app/components/operator-mode/code-submode/playground/playground-background.png +0 -0
  654. package/bundled-types/host-app/components/operator-mode/code-submode/playground/playground-panel.gts +1274 -0
  655. package/bundled-types/host-app/components/operator-mode/code-submode/playground/playground-preview.gts +155 -0
  656. package/bundled-types/host-app/components/operator-mode/code-submode/playground/playground.gts +98 -0
  657. package/bundled-types/host-app/components/operator-mode/code-submode/playground/spec-search.gts +70 -0
  658. package/bundled-types/host-app/components/operator-mode/code-submode/schema-editor.gts +205 -0
  659. package/bundled-types/host-app/components/operator-mode/code-submode/spec-preview-badge.gts +72 -0
  660. package/bundled-types/host-app/components/operator-mode/code-submode/spec-preview.gts +432 -0
  661. package/bundled-types/host-app/components/operator-mode/code-submode/toggle-button.gts +72 -0
  662. package/bundled-types/host-app/components/operator-mode/code-submode.gts +1030 -0
  663. package/bundled-types/host-app/components/operator-mode/container.gts +270 -0
  664. package/bundled-types/host-app/components/operator-mode/context-menu-button.gts +95 -0
  665. package/bundled-types/host-app/components/operator-mode/copy-button.gts +277 -0
  666. package/bundled-types/host-app/components/operator-mode/create-file-modal.gts +1087 -0
  667. package/bundled-types/host-app/components/operator-mode/create-listing-modal.gts +513 -0
  668. package/bundled-types/host-app/components/operator-mode/definition-container/base.gts +222 -0
  669. package/bundled-types/host-app/components/operator-mode/definition-container/clickable.gts +59 -0
  670. package/bundled-types/host-app/components/operator-mode/definition-container/divider.gts +48 -0
  671. package/bundled-types/host-app/components/operator-mode/definition-container/index.gts +108 -0
  672. package/bundled-types/host-app/components/operator-mode/delete-modal.gts +123 -0
  673. package/bundled-types/host-app/components/operator-mode/detail-panel-selector.gts +320 -0
  674. package/bundled-types/host-app/components/operator-mode/detail-panel.gts +834 -0
  675. package/bundled-types/host-app/components/operator-mode/edit-field-modal.gts +450 -0
  676. package/bundled-types/host-app/components/operator-mode/error-display.gts +590 -0
  677. package/bundled-types/host-app/components/operator-mode/host-submode/open-site-popover.gts +127 -0
  678. package/bundled-types/host-app/components/operator-mode/host-submode/publishing-realm-popover.gts +159 -0
  679. package/bundled-types/host-app/components/operator-mode/host-submode.gts +373 -0
  680. package/bundled-types/host-app/components/operator-mode/interact-submode/neighbor-stack-trigger.gts +116 -0
  681. package/bundled-types/host-app/components/operator-mode/interact-submode.gts +1021 -0
  682. package/bundled-types/host-app/components/operator-mode/new-file-button.gts +187 -0
  683. package/bundled-types/host-app/components/operator-mode/operator-mode-overlays.gts +511 -0
  684. package/bundled-types/host-app/components/operator-mode/overlays.gts +342 -0
  685. package/bundled-types/host-app/components/operator-mode/preview-panel/fitted-format-gallery.gts +127 -0
  686. package/bundled-types/host-app/components/operator-mode/preview-panel/index.gts +443 -0
  687. package/bundled-types/host-app/components/operator-mode/preview-panel/markdown-preview.gts +175 -0
  688. package/bundled-types/host-app/components/operator-mode/preview-panel/metadata-panel.gts +214 -0
  689. package/bundled-types/host-app/components/operator-mode/preview-panel/rendered-markdown.gts +718 -0
  690. package/bundled-types/host-app/components/operator-mode/private-dependency-violation.gts +70 -0
  691. package/bundled-types/host-app/components/operator-mode/profile/profile-email.gts +686 -0
  692. package/bundled-types/host-app/components/operator-mode/profile/profile-settings-modal.gts +454 -0
  693. package/bundled-types/host-app/components/operator-mode/profile/profile-subscription.gts +170 -0
  694. package/bundled-types/host-app/components/operator-mode/profile-info-popover.gts +263 -0
  695. package/bundled-types/host-app/components/operator-mode/publish-realm-modal.gts +1529 -0
  696. package/bundled-types/host-app/components/operator-mode/remove-field-modal.gts +135 -0
  697. package/bundled-types/host-app/components/operator-mode/send-error-to-ai-assistant.gts +195 -0
  698. package/bundled-types/host-app/components/operator-mode/stack-item.gts +1341 -0
  699. package/bundled-types/host-app/components/operator-mode/stack.gts +191 -0
  700. package/bundled-types/host-app/components/operator-mode/submode-layout.gts +781 -0
  701. package/bundled-types/host-app/components/operator-mode/syntax-error-display.gts +72 -0
  702. package/bundled-types/host-app/components/operator-mode/workspace-chooser/add-workspace.gts +282 -0
  703. package/bundled-types/host-app/components/operator-mode/workspace-chooser/index.gts +307 -0
  704. package/bundled-types/host-app/components/operator-mode/workspace-chooser/item-container.gts +50 -0
  705. package/bundled-types/host-app/components/operator-mode/workspace-chooser/workspace-loading-indicator.gts +50 -0
  706. package/bundled-types/host-app/components/operator-mode/workspace-chooser/workspace.gts +1092 -0
  707. package/bundled-types/host-app/components/pill-menu/index.gts +281 -0
  708. package/bundled-types/host-app/components/pill-menu/usage.gts +64 -0
  709. package/bundled-types/host-app/components/prerendered-card-search.gts +274 -0
  710. package/bundled-types/host-app/components/realm-dropdown.gts +209 -0
  711. package/bundled-types/host-app/components/realm-picker/index.gts +142 -0
  712. package/bundled-types/host-app/components/search-sheet/index.gts +426 -0
  713. package/bundled-types/host-app/components/search-sheet/usage.gts +99 -0
  714. package/bundled-types/host-app/components/submode-switcher.gts +260 -0
  715. package/bundled-types/host-app/components/type-picker/index.gts +111 -0
  716. package/bundled-types/host-app/components/with-known-realms-loaded.gts +47 -0
  717. package/bundled-types/host-app/components/with-loaded-realm.gts +39 -0
  718. package/bundled-types/host-app/components/with-subscription-data.gts +247 -0
  719. package/bundled-types/host-app/config/environment.ts +66 -0
  720. package/bundled-types/host-app/deprecation-workflow.js +30 -0
  721. package/bundled-types/host-app/lib/browser-queue.ts +198 -0
  722. package/bundled-types/host-app/lib/codemirror-context.ts +1081 -0
  723. package/bundled-types/host-app/lib/command-definitions.ts +41 -0
  724. package/bundled-types/host-app/lib/download-realm.ts +9 -0
  725. package/bundled-types/host-app/lib/example-card-helpers.ts +99 -0
  726. package/bundled-types/host-app/lib/externals.ts +247 -0
  727. package/bundled-types/host-app/lib/field-path-parser.ts +520 -0
  728. package/bundled-types/host-app/lib/file-def-manager.ts +712 -0
  729. package/bundled-types/host-app/lib/file-upload-state.ts +6 -0
  730. package/bundled-types/host-app/lib/formatted-message/utils.ts +272 -0
  731. package/bundled-types/host-app/lib/gc-card-store.ts +1084 -0
  732. package/bundled-types/host-app/lib/host-base-command.ts +29 -0
  733. package/bundled-types/host-app/lib/html-component.ts +144 -0
  734. package/bundled-types/host-app/lib/html-to-markdown.ts +96 -0
  735. package/bundled-types/host-app/lib/isolated-render.gts +90 -0
  736. package/bundled-types/host-app/lib/known-file-meta-urls.ts +17 -0
  737. package/bundled-types/host-app/lib/limited-set.ts +68 -0
  738. package/bundled-types/host-app/lib/matrix-classes/member.ts +28 -0
  739. package/bundled-types/host-app/lib/matrix-classes/message-builder.ts +444 -0
  740. package/bundled-types/host-app/lib/matrix-classes/message-code-patch-result.ts +44 -0
  741. package/bundled-types/host-app/lib/matrix-classes/message-command.ts +109 -0
  742. package/bundled-types/host-app/lib/matrix-classes/message.ts +239 -0
  743. package/bundled-types/host-app/lib/matrix-classes/room.ts +174 -0
  744. package/bundled-types/host-app/lib/matrix-utils.ts +114 -0
  745. package/bundled-types/host-app/lib/mutex.ts +62 -0
  746. package/bundled-types/host-app/lib/prerender-fetch-headers.ts +46 -0
  747. package/bundled-types/host-app/lib/prerender-util.ts +31 -0
  748. package/bundled-types/host-app/lib/public-path.ts +1 -0
  749. package/bundled-types/host-app/lib/random-name.ts +26 -0
  750. package/bundled-types/host-app/lib/realm-utils.ts +45 -0
  751. package/bundled-types/host-app/lib/search-cache-key.ts +33 -0
  752. package/bundled-types/host-app/lib/search-in-flight-key.ts +28 -0
  753. package/bundled-types/host-app/lib/search-replace-block-parsing.ts +101 -0
  754. package/bundled-types/host-app/lib/setup-globals.ts +15 -0
  755. package/bundled-types/host-app/lib/sqlite-adapter.ts +510 -0
  756. package/bundled-types/host-app/lib/stack-item.ts +164 -0
  757. package/bundled-types/host-app/lib/utils.ts +84 -0
  758. package/bundled-types/host-app/lib/window-error-handler.ts +132 -0
  759. package/bundled-types/host-app/router.ts +31 -0
  760. package/bundled-types/host-app/services/ai-assistant-panel-service.ts +850 -0
  761. package/bundled-types/host-app/services/billing-service.ts +208 -0
  762. package/bundled-types/host-app/services/card-service.ts +373 -0
  763. package/bundled-types/host-app/services/card-type-service.ts +226 -0
  764. package/bundled-types/host-app/services/code-semantics-service.ts +297 -0
  765. package/bundled-types/host-app/services/command-service.ts +975 -0
  766. package/bundled-types/host-app/services/environment-service.ts +26 -0
  767. package/bundled-types/host-app/services/error-display.ts +42 -0
  768. package/bundled-types/host-app/services/file-upload.ts +212 -0
  769. package/bundled-types/host-app/services/host-mode-service.ts +400 -0
  770. package/bundled-types/host-app/services/host-mode-state-service.ts +160 -0
  771. package/bundled-types/host-app/services/loader-service.ts +148 -0
  772. package/bundled-types/host-app/services/local-indexer.ts +68 -0
  773. package/bundled-types/host-app/services/local-persistence-service.ts +296 -0
  774. package/bundled-types/host-app/services/logger-service.ts +13 -0
  775. package/bundled-types/host-app/services/matrix-sdk-loader.ts +346 -0
  776. package/bundled-types/host-app/services/matrix-service.ts +2288 -0
  777. package/bundled-types/host-app/services/message-service.ts +84 -0
  778. package/bundled-types/host-app/services/module-contents-service.ts +333 -0
  779. package/bundled-types/host-app/services/monaco-service.ts +333 -0
  780. package/bundled-types/host-app/services/network.ts +101 -0
  781. package/bundled-types/host-app/services/operator-mode-state-service.ts +1593 -0
  782. package/bundled-types/host-app/services/playground-panel-service.ts +236 -0
  783. package/bundled-types/host-app/services/queue.ts +30 -0
  784. package/bundled-types/host-app/services/realm-info-service.ts +37 -0
  785. package/bundled-types/host-app/services/realm-server.ts +1211 -0
  786. package/bundled-types/host-app/services/realm.ts +1413 -0
  787. package/bundled-types/host-app/services/recent-cards-service.ts +174 -0
  788. package/bundled-types/host-app/services/recent-files-service.ts +224 -0
  789. package/bundled-types/host-app/services/render-error-state.ts +55 -0
  790. package/bundled-types/host-app/services/render-service.ts +362 -0
  791. package/bundled-types/host-app/services/render-store.ts +27 -0
  792. package/bundled-types/host-app/services/reset.ts +19 -0
  793. package/bundled-types/host-app/services/scroll-position-service.ts +81 -0
  794. package/bundled-types/host-app/services/spec-panel-service.ts +107 -0
  795. package/bundled-types/host-app/services/store.ts +2540 -0
  796. package/bundled-types/host-app/utils/assert-never.ts +3 -0
  797. package/bundled-types/host-app/utils/auth-error-guard.ts +183 -0
  798. package/bundled-types/host-app/utils/auth-service-worker-registration.ts +123 -0
  799. package/bundled-types/host-app/utils/card-search/query-builder.ts +169 -0
  800. package/bundled-types/host-app/utils/card-search/section-pagination.ts +57 -0
  801. package/bundled-types/host-app/utils/card-search/sections.ts +240 -0
  802. package/bundled-types/host-app/utils/card-search/type-filter.ts +124 -0
  803. package/bundled-types/host-app/utils/card-search/types.ts +11 -0
  804. package/bundled-types/host-app/utils/card-search/url.ts +27 -0
  805. package/bundled-types/host-app/utils/clipboard.ts +23 -0
  806. package/bundled-types/host-app/utils/editor/boxel-formatter.ts +65 -0
  807. package/bundled-types/host-app/utils/editor/editor-language.ts +88 -0
  808. package/bundled-types/host-app/utils/editor/monaco-test-waiter.ts +302 -0
  809. package/bundled-types/host-app/utils/file-def-attributes-extractor.ts +438 -0
  810. package/bundled-types/host-app/utils/file-name.ts +38 -0
  811. package/bundled-types/host-app/utils/id-from-card-or-url.ts +11 -0
  812. package/bundled-types/host-app/utils/lint-formatting.ts +57 -0
  813. package/bundled-types/host-app/utils/local-storage-keys.ts +28 -0
  814. package/bundled-types/host-app/utils/normalized-dir-path.ts +3 -0
  815. package/bundled-types/host-app/utils/prettify-messages.ts +21 -0
  816. package/bundled-types/host-app/utils/prettify-prompts.ts +21 -0
  817. package/bundled-types/host-app/utils/realm-index-boilerplate.ts +27 -0
  818. package/bundled-types/host-app/utils/register-boxel-transition.ts +17 -0
  819. package/bundled-types/host-app/utils/render-desync-detector.ts +362 -0
  820. package/bundled-types/host-app/utils/render-error.ts +455 -0
  821. package/bundled-types/host-app/utils/render-timer-stub.ts +249 -0
  822. package/bundled-types/host-app/utils/run-while-active.ts +14 -0
  823. package/bundled-types/host-app/utils/schema-editor.ts +25 -0
  824. package/bundled-types/host-app/utils/text-suggestion.ts +82 -0
  825. package/bundled-types/host-app/utils/titleize.ts +10 -0
  826. package/bundled-types/host-app/utils/uuid.ts +13 -0
  827. package/bundled-types/host-tests/helpers/adapter.ts +464 -0
  828. package/bundled-types/host-tests/helpers/base-realm.ts +464 -0
  829. package/bundled-types/host-tests/helpers/cards/view-card-demo.ts +119 -0
  830. package/bundled-types/host-tests/helpers/field-test-helpers.gts +54 -0
  831. package/bundled-types/host-tests/helpers/image-fixture.ts +3 -0
  832. package/bundled-types/host-tests/helpers/index.gts +2099 -0
  833. package/bundled-types/host-tests/helpers/indexer.ts +293 -0
  834. package/bundled-types/host-tests/helpers/interact-submode-setup.gts +551 -0
  835. package/bundled-types/host-tests/helpers/mock-matrix/_client.ts +1042 -0
  836. package/bundled-types/host-tests/helpers/mock-matrix/_sdk.ts +71 -0
  837. package/bundled-types/host-tests/helpers/mock-matrix/_server-state.ts +343 -0
  838. package/bundled-types/host-tests/helpers/mock-matrix/_sliding-sync.ts +140 -0
  839. package/bundled-types/host-tests/helpers/mock-matrix/_utils.ts +146 -0
  840. package/bundled-types/host-tests/helpers/mock-matrix.ts +200 -0
  841. package/bundled-types/host-tests/helpers/operator-mode-parameters-match.ts +71 -0
  842. package/bundled-types/host-tests/helpers/operator-mode-state.ts +18 -0
  843. package/bundled-types/host-tests/helpers/percy-snapshot.ts +228 -0
  844. package/bundled-types/host-tests/helpers/playground.ts +130 -0
  845. package/bundled-types/host-tests/helpers/realm-server-mock/index.ts +100 -0
  846. package/bundled-types/host-tests/helpers/realm-server-mock/routes.ts +617 -0
  847. package/bundled-types/host-tests/helpers/realm-server-mock/types.ts +24 -0
  848. package/bundled-types/host-tests/helpers/recent-files-cards.ts +86 -0
  849. package/bundled-types/host-tests/helpers/render-component.ts +40 -0
  850. package/bundled-types/host-tests/helpers/setup-qunit.js +164 -0
  851. package/bundled-types/host-tests/helpers/setup.ts +349 -0
  852. package/bundled-types/host-tests/helpers/shard-warmup.ts +72 -0
  853. package/bundled-types/host-tests/helpers/stream.ts +60 -0
  854. package/bundled-types/host-tests/helpers/test-auth.ts +27 -0
  855. package/bundled-types/host-tests/helpers/test-realm-registry.ts +23 -0
  856. package/bundled-types/host-tests/helpers/test-realm-service-worker.ts +92 -0
  857. package/bundled-types/host-tests/helpers/uncaught-exceptions.ts +16 -0
  858. package/bundled-types/host-tests/helpers/visit-operator-mode.ts +39 -0
  859. package/bundled-types/host-types/@cardstack/host/index.d.ts +3 -0
  860. package/bundled-types/host-types/@joplin/turndown-plugin-gfm/index.d.ts +15 -0
  861. package/bundled-types/host-types/@sqlite.org/sqlite-wasm/index.d.ts +122 -0
  862. package/bundled-types/host-types/ember-click-outside/modifiers/on-click-outside.ts +16 -0
  863. package/bundled-types/host-types/ember-concurrency/helpers/perform.d.ts +3 -0
  864. package/bundled-types/host-types/ember-css-url/index.d.ts +15 -0
  865. package/bundled-types/host-types/ember-data/types/registries/model.d.ts +6 -0
  866. package/bundled-types/host-types/ember-elsewhere/from-elsewhere.d.ts +12 -0
  867. package/bundled-types/host-types/ember-elsewhere/to-elsewhere.d.ts +16 -0
  868. package/bundled-types/host-types/ember-focus-trap/index.d.ts +4 -0
  869. package/bundled-types/host-types/ember-keyboard/modifiers/on-key.d.ts +15 -0
  870. package/bundled-types/host-types/index.d.ts +6 -0
  871. package/bundled-types/local-types/eslint-js.d.ts +5 -0
  872. package/bundled-types/local-types/index.d.ts +115 -0
  873. package/bundled-types/local-types/marked-gfm-heading-id.d.ts +12 -0
  874. package/bundled-types/local-types/matrix-js-sdk/index.d.ts +11 -0
  875. package/bundled-types/local-types/package.json +13 -0
  876. package/bundled-types/shims/boxel-cli-shims.d.ts +10 -0
  877. package/dist/index.js +100 -100
  878. package/package.json +13 -7
  879. package/src/commands/parse.ts +277 -34
  880. package/src/commands/realm/publish.ts +10 -1
  881. package/src/commands/realm/unpublish.ts +2 -3
  882. package/src/lib/describe-fetch-error.ts +25 -0
@@ -0,0 +1,1274 @@
1
+ import { fn } from '@ember/helper';
2
+ import { action } from '@ember/object';
3
+ import { schedule } from '@ember/runloop';
4
+
5
+ import { service } from '@ember/service';
6
+ import { htmlSafe, type SafeString } from '@ember/template';
7
+
8
+ import Component from '@glimmer/component';
9
+ import { tracked, cached } from '@glimmer/tracking';
10
+
11
+ import { restartableTask, task } from 'ember-concurrency';
12
+ import ToElsewhere from 'ember-elsewhere/components/to-elsewhere';
13
+ import { consume, provide } from 'ember-provide-consume-context';
14
+ import { resource, use } from 'ember-resources';
15
+
16
+ import type { BoxelSelect } from '@cardstack/boxel-ui/components';
17
+ import {
18
+ CardContainer,
19
+ LoadingIndicator,
20
+ } from '@cardstack/boxel-ui/components';
21
+ import { eq, MenuItem, or, toMenuItems } from '@cardstack/boxel-ui/helpers';
22
+ import { Folder, IconPlusThin } from '@cardstack/boxel-ui/icons';
23
+
24
+ import {
25
+ CardContextName,
26
+ cardTypeDisplayName,
27
+ getMenuItems,
28
+ isSpecCard,
29
+ rri,
30
+ type Permissions,
31
+ PermissionsContextName,
32
+ type RealmIdentifier,
33
+ cardDefFormats,
34
+ fieldDefFormats,
35
+ fileDefFormats,
36
+ } from '@cardstack/runtime-common';
37
+
38
+ import {
39
+ baseCardRef,
40
+ internalKeyFor,
41
+ type ResolvedCodeRef,
42
+ GetCardContextName,
43
+ GetCardsContextName,
44
+ type getCard,
45
+ type getCards,
46
+ chooseCard,
47
+ chooseFile,
48
+ loadCardDef,
49
+ specRef,
50
+ trimJsonExtension,
51
+ uuidv4,
52
+ realmURL,
53
+ type LooseSingleCardDocument,
54
+ type Query,
55
+ type CardErrorJSONAPI,
56
+ type PrerenderedCardLike,
57
+ } from '@cardstack/runtime-common';
58
+
59
+ import Overlays from '@cardstack/host/components/operator-mode/overlays';
60
+ import consumeContext from '@cardstack/host/helpers/consume-context';
61
+
62
+ import { urlForRealmLookup } from '@cardstack/host/lib/utils';
63
+ import ElementTracker, {
64
+ type RenderedCardForOverlayActions,
65
+ } from '@cardstack/host/resources/element-tracker';
66
+
67
+ import type AiAssistantPanelService from '@cardstack/host/services/ai-assistant-panel-service';
68
+ import type CommandService from '@cardstack/host/services/command-service';
69
+ import type LoaderService from '@cardstack/host/services/loader-service';
70
+ import type MatrixService from '@cardstack/host/services/matrix-service';
71
+ import type OperatorModeStateService from '@cardstack/host/services/operator-mode-state-service';
72
+ import type PlaygroundPanelService from '@cardstack/host/services/playground-panel-service';
73
+ import type RealmService from '@cardstack/host/services/realm';
74
+ import type RealmServerService from '@cardstack/host/services/realm-server';
75
+ import type { RecentCard } from '@cardstack/host/services/recent-cards-service';
76
+ import type RecentCardsService from '@cardstack/host/services/recent-cards-service';
77
+ import type RecentFilesService from '@cardstack/host/services/recent-files-service';
78
+ import type StoreService from '@cardstack/host/services/store';
79
+
80
+ import type {
81
+ CardContext,
82
+ CardDef,
83
+ FieldDef,
84
+ Format,
85
+ ViewCardFn,
86
+ } from 'https://cardstack.com/base/card-api';
87
+ import type { FileDef } from 'https://cardstack.com/base/file-api';
88
+ import type { Spec } from 'https://cardstack.com/base/spec';
89
+
90
+ import PrerenderedCardSearch from '../../../prerendered-card-search';
91
+ import CardError from '../../card-error';
92
+ import FormatChooser from '../format-chooser';
93
+
94
+ import FieldPickerModal from './field-chooser-modal';
95
+
96
+ import InstanceSelectDropdown from './instance-chooser-dropdown';
97
+ import PlaygroundPreview from './playground-preview';
98
+ import SpecSearch from './spec-search';
99
+
100
+ export type SelectedInstance = {
101
+ card: CardDef | FileDef;
102
+ fieldIndex: number | undefined;
103
+ };
104
+
105
+ export type FieldOption = {
106
+ index: number;
107
+ displayIndex: number;
108
+ field: FieldDef;
109
+ };
110
+
111
+ interface Signature {
112
+ Args: {
113
+ codeRef: ResolvedCodeRef;
114
+ isFieldDef?: boolean;
115
+ isFileDef?: boolean;
116
+ isUpdating?: boolean;
117
+ viewCard?: ViewCardFn;
118
+ };
119
+ Element: HTMLElement;
120
+ }
121
+
122
+ export default class PlaygroundPanel extends Component<Signature> {
123
+ @consume(GetCardContextName) declare private getCard: getCard;
124
+ @consume(GetCardsContextName) declare private getCards: getCards;
125
+ @consume(CardContextName) declare private cardContext: CardContext;
126
+ @service declare private aiAssistantPanelService: AiAssistantPanelService;
127
+ @service declare private commandService: CommandService;
128
+ @service declare private loaderService: LoaderService;
129
+ @service declare private matrixService: MatrixService;
130
+ @service declare private operatorModeStateService: OperatorModeStateService;
131
+ @service declare private realm: RealmService;
132
+ @service declare private realmServer: RealmServerService;
133
+ @service declare private recentFilesService: RecentFilesService;
134
+ @service declare private recentCardsService: RecentCardsService;
135
+ @service declare private playgroundPanelService: PlaygroundPanelService;
136
+ @service declare private store: StoreService;
137
+
138
+ @tracked private cardResource: ReturnType<getCard> | undefined;
139
+ @tracked private fileSearchResults: ReturnType<getCards> | undefined;
140
+ @tracked private fieldChooserIsOpen = false;
141
+ @tracked private newCardNonce = 0;
142
+
143
+ @tracked private cardOptions: PrerenderedCardLike[] = [];
144
+ @tracked private selectedFileMetaId: string | undefined;
145
+ @use private moduleChangeTracker = resource(() => {
146
+ let moduleId = internalKeyFor(this.args.codeRef, undefined);
147
+ if (moduleId !== this.#currentModuleId) {
148
+ this.#currentModuleId = moduleId;
149
+ this.#creationError = false;
150
+ }
151
+ return moduleId;
152
+ });
153
+
154
+ private get availableFormats(): Format[] | undefined {
155
+ if (this.args.isFileDef) {
156
+ return fileDefFormats;
157
+ }
158
+ if (this.args.isFieldDef) {
159
+ return fieldDefFormats;
160
+ }
161
+ const ctor = this.card?.constructor as typeof CardDef | undefined;
162
+ if (!ctor) return undefined;
163
+ const cardAvailableFormats: Format[] = [];
164
+ for (const f of cardDefFormats) {
165
+ cardAvailableFormats.push(f);
166
+ /* Insert 'form' (toggle standard view) right after 'edit' whenever
167
+ the card defines its own custom edit template — even if that
168
+ custom edit is the SAME component as isolated (e.g. Polymorph).
169
+ The trigger is `hasCustomEditTemplate` (= edit !== CardDef.edit),
170
+ not whether edit === isolated. If no custom edit, omit form. */
171
+ if (f === 'edit' && ctor.hasCustomEditTemplate) {
172
+ cardAvailableFormats.push('form');
173
+ }
174
+ }
175
+ return cardAvailableFormats;
176
+ }
177
+ #creationError = false;
178
+ #currentModuleId: string | undefined;
179
+
180
+ private get specQuery(): Query {
181
+ return {
182
+ filter: {
183
+ on: specRef,
184
+ eq: { ref: this.args.codeRef },
185
+ },
186
+ sort: [
187
+ {
188
+ by: 'lastModified',
189
+ direction: 'desc',
190
+ },
191
+ ],
192
+ };
193
+ }
194
+
195
+ private get maybeGenerateFieldSpec() {
196
+ return this.canWriteRealm && this.args.isFieldDef && !this.card;
197
+ }
198
+
199
+ private get showError() {
200
+ // in edit format, prefer showing the stale card if possible so user can
201
+ // attempt to fix the card error
202
+ if (this.cardError && this.format === 'edit' && this.card) {
203
+ return false;
204
+ }
205
+ return Boolean(this.cardError);
206
+ }
207
+
208
+ private get contextMenuItems() {
209
+ let cardId = this.card?.id;
210
+ if (!cardId) {
211
+ return [];
212
+ }
213
+ return toMenuItems(
214
+ this.card?.[getMenuItems]?.({
215
+ canEdit: this.canEditCard,
216
+ cardCrudFunctions: {},
217
+ menuContext: 'code-mode-playground',
218
+ commandContext: this.commandService.commandContext,
219
+ format: this.format,
220
+ }) || [],
221
+ );
222
+ }
223
+
224
+ private get afterMenuOptions(): MenuItem[] {
225
+ let menuItems: MenuItem[] = [
226
+ new MenuItem({
227
+ label: 'Create new instance',
228
+ action: () => this.createNew(),
229
+ icon: this.createNewIsRunning ? LoadingIndicator : IconPlusThin,
230
+ disabled: this.createNewIsRunning || !this.canWriteRealm,
231
+ }),
232
+ new MenuItem({
233
+ label: 'Choose another instance',
234
+ action: () => this.chooseInstance(),
235
+ icon: Folder,
236
+ }),
237
+ ];
238
+ if (this.card) {
239
+ menuItems = menuItems.concat(
240
+ ...this.contextMenuItems.filter((item: MenuItem) =>
241
+ item.tags.includes('playground-sample-data'),
242
+ ),
243
+ );
244
+ }
245
+ return menuItems;
246
+ }
247
+
248
+ private cardTracker = new ElementTracker();
249
+
250
+ @provide(CardContextName)
251
+ // @ts-ignore context is used via provider
252
+ private get context(): CardContext {
253
+ return {
254
+ ...this.cardContext,
255
+ cardComponentModifier: this.cardTracker.trackElement,
256
+ };
257
+ }
258
+
259
+ private get renderedCardsForOverlayActions():
260
+ | RenderedCardForOverlayActions[]
261
+ | undefined {
262
+ if (!this.args.viewCard) {
263
+ return undefined;
264
+ }
265
+ let entries = this.cardTracker.filter(
266
+ [{ fieldType: 'linksTo' }, { fieldType: 'linksToMany' }],
267
+ 'or',
268
+ // the only linksTo field with isolated format is in the index card,
269
+ // we don't want to show overlays for those cards here
270
+ { exclude: [{ fieldType: 'linksTo', format: 'isolated' }] },
271
+ );
272
+ return entries.length ? entries : undefined;
273
+ }
274
+
275
+ @action private setFormat(format: Format) {
276
+ let selectedCardId = this.selectedCardId;
277
+ if (!selectedCardId) {
278
+ return;
279
+ }
280
+ this.persistSelections(selectedCardId, format);
281
+ }
282
+
283
+ private get realmInfo() {
284
+ if (this.args.isFileDef) {
285
+ let fileId = this.selectedFileMetaInstance?.id;
286
+ if (!fileId) {
287
+ return undefined;
288
+ }
289
+ return this.realm.info(fileId);
290
+ }
291
+ let url = this.card ? urlForRealmLookup(this.card) : undefined;
292
+ if (!url) {
293
+ return undefined;
294
+ }
295
+ return this.realm.info(url);
296
+ }
297
+
298
+ private get canEditCard() {
299
+ let realmHref = this.selectedCardRealmHref;
300
+ if (realmHref) {
301
+ return this.realm.canWrite(realmHref);
302
+ }
303
+ let selectedCardId = this.selectedCardId;
304
+ return Boolean(selectedCardId && this.realm.canWrite(selectedCardId));
305
+ }
306
+
307
+ @provide(PermissionsContextName)
308
+ get permissions(): Permissions | undefined {
309
+ let realmHref = this.selectedCardRealmHref;
310
+ if (realmHref) {
311
+ return this.realm.permissions(realmHref);
312
+ }
313
+ let selectedCardId = this.selectedCardId;
314
+ if (selectedCardId) {
315
+ return this.realm.permissions(selectedCardId);
316
+ }
317
+ return undefined;
318
+ }
319
+
320
+ private get setEditMode() {
321
+ return this.format !== 'edit' && this.canEditCard;
322
+ }
323
+
324
+ private get prefersWideFormat() {
325
+ if (!this.card) {
326
+ return false;
327
+ }
328
+ if (this.format !== 'isolated' && this.format !== 'edit') {
329
+ return true;
330
+ }
331
+ let { constructor } = this.card;
332
+ return Boolean(
333
+ constructor &&
334
+ 'prefersWideFormat' in constructor &&
335
+ constructor.prefersWideFormat,
336
+ );
337
+ }
338
+
339
+ private get setMaxWidth(): SafeString {
340
+ const maxWidth = this.prefersWideFormat ? '100%' : '50rem';
341
+ return htmlSafe(`max-width: ${maxWidth};`);
342
+ }
343
+ private get moduleId() {
344
+ return (
345
+ this.moduleChangeTracker ?? internalKeyFor(this.args.codeRef, undefined)
346
+ );
347
+ }
348
+
349
+ private get isLoading() {
350
+ if (this.args.isFileDef) {
351
+ return this.fileSearchResults?.isLoading;
352
+ }
353
+ return this.args.isFieldDef && this.args.isUpdating;
354
+ }
355
+
356
+ private searchFileMeta = () => {
357
+ if (!this.args.isFileDef) {
358
+ return;
359
+ }
360
+ this.fileSearchResults = this.getCards(
361
+ this,
362
+ () => this.fileMetaQuery,
363
+ () => this.realmServer.availableRealmIdentifiers,
364
+ { isLive: true },
365
+ );
366
+ };
367
+
368
+ private get fileMetaQuery(): Query | undefined {
369
+ if (!this.args.isFileDef) {
370
+ return undefined;
371
+ }
372
+ return {
373
+ filter: { type: this.args.codeRef },
374
+ sort: [{ by: 'lastModified', direction: 'desc' }],
375
+ };
376
+ }
377
+
378
+ static FILE_META_DROPDOWN_LIMIT = 20;
379
+
380
+ private get fileMetaInstances(): FileDef[] | undefined {
381
+ return this.fileSearchResults?.instances as FileDef[] | undefined;
382
+ }
383
+
384
+ private get fileMetaDropdownOptions(): FileDef[] | undefined {
385
+ let instances = this.fileMetaInstances;
386
+ if (!instances) {
387
+ return undefined;
388
+ }
389
+ if (instances.length <= PlaygroundPanel.FILE_META_DROPDOWN_LIMIT) {
390
+ return instances;
391
+ }
392
+ return instances.slice(0, PlaygroundPanel.FILE_META_DROPDOWN_LIMIT);
393
+ }
394
+
395
+ private get selectedFileMetaInstance(): FileDef | undefined {
396
+ let instances = this.fileMetaInstances;
397
+ if (!instances?.length) {
398
+ return undefined;
399
+ }
400
+ let selectedId = this.selectedFileMetaId ?? this.persistedCardId;
401
+ if (selectedId) {
402
+ let found = instances.find((f) => f.id === selectedId);
403
+ if (found) {
404
+ return found;
405
+ }
406
+ }
407
+ return instances[0];
408
+ }
409
+
410
+ private processFileMetaResults = () => {
411
+ let instances = this.fileMetaInstances;
412
+ if (!instances?.length || this.persistedCardId) {
413
+ return;
414
+ }
415
+ let first = instances[0];
416
+ if (first?.id) {
417
+ this.selectedFileMetaId = first.id;
418
+ this.persistSelections(first.id);
419
+ }
420
+ };
421
+
422
+ private makeCardResource = () => {
423
+ if (this.args.isFileDef) {
424
+ return;
425
+ }
426
+ this.cardResource = this.getCard(
427
+ this,
428
+ () => this.playgroundSelection?.cardId,
429
+ );
430
+ };
431
+
432
+ private get playgroundSelection() {
433
+ return this.playgroundPanelService.getSelection(this.moduleId);
434
+ }
435
+
436
+ private get card(): CardDef | undefined {
437
+ return this.cardResource?.card;
438
+ }
439
+
440
+ private get selectedCardId() {
441
+ return this.playgroundSelection?.cardId ?? this.card?.id;
442
+ }
443
+
444
+ private get selectedCardRealmHref(): string | undefined {
445
+ let cardRealm = this.card?.[realmURL];
446
+ if (cardRealm) {
447
+ return cardRealm.href;
448
+ }
449
+ let selectedCardId = this.selectedCardId;
450
+ if (!selectedCardId) {
451
+ return undefined;
452
+ }
453
+ try {
454
+ return this.realm.realmOf(rri(selectedCardId));
455
+ } catch {
456
+ return undefined;
457
+ }
458
+ }
459
+
460
+ private get cardError(): CardErrorJSONAPI | undefined {
461
+ return this.cardResource?.cardError;
462
+ }
463
+
464
+ private get errorMessage() {
465
+ let error = this.cardResource?.cardError;
466
+ if (!error) {
467
+ return undefined;
468
+ }
469
+ if (error.status === 404 && error.title === 'Not Found') {
470
+ if (error.message.includes('missing')) {
471
+ // missing relationship link
472
+ return `Card "${error.id}" contains a missing link.`;
473
+ } else {
474
+ // custom message for missing file case
475
+ return 'File not found. Please choose or create another instance.';
476
+ }
477
+ }
478
+ // default error message will be shown
479
+ return undefined;
480
+ }
481
+
482
+ private get specCard(): Spec | undefined {
483
+ let card = this.card;
484
+ if (!card || !this.args.isFieldDef) {
485
+ return undefined;
486
+ }
487
+ if (!('ref' in card) || !('moduleHref' in card)) {
488
+ return undefined;
489
+ }
490
+ if (
491
+ card.moduleHref !== this.args.codeRef.module ||
492
+ (card.ref as ResolvedCodeRef).name !== this.args.codeRef.name
493
+ ) {
494
+ return undefined;
495
+ }
496
+ return card as Spec;
497
+ }
498
+
499
+ private get recentCardIds() {
500
+ let cards: RecentCard[] = [];
501
+ for (let file of this.recentFilesService.recentFiles) {
502
+ let url = `${file.realmURL}${file.filePath}`;
503
+ if (url.endsWith('.json') && file.timestamp) {
504
+ cards.push({
505
+ cardId: trimJsonExtension(url),
506
+ timestamp: file.timestamp,
507
+ });
508
+ }
509
+ }
510
+ let recentCards = this.recentCardsService.recentCards.filter((c) =>
511
+ Boolean(c.timestamp),
512
+ );
513
+ let sortedCards = [...recentCards, ...cards].sort(
514
+ (a, b) => b.timestamp! - a.timestamp!,
515
+ );
516
+ return [...new Set(sortedCards.map((c) => c.cardId))];
517
+ }
518
+
519
+ private get recentRealms() {
520
+ return [
521
+ ...new Set([
522
+ this.currentRealm,
523
+ ...this.recentFilesService.recentFiles.map((f) => f.realmURL.href),
524
+ ]),
525
+ ];
526
+ }
527
+
528
+ private get query(): Query | undefined {
529
+ if (this.args.isFieldDef || this.args.isFileDef) {
530
+ return undefined;
531
+ }
532
+ return {
533
+ filter: {
534
+ every: [
535
+ {
536
+ type: this.args.codeRef,
537
+ },
538
+ {
539
+ any: this.recentCardIds.map((id) => ({ eq: { id } })).slice(0, 20),
540
+ },
541
+ ],
542
+ },
543
+ };
544
+ }
545
+
546
+ private get expandedQuery(): Query | undefined {
547
+ if (this.args.isFieldDef || this.args.isFileDef) {
548
+ return undefined;
549
+ }
550
+ return {
551
+ filter: { type: this.args.codeRef },
552
+ sort: [
553
+ {
554
+ by: 'lastModified',
555
+ direction: 'desc',
556
+ },
557
+ ],
558
+ };
559
+ }
560
+
561
+ private get fieldInstances(): FieldOption[] | undefined {
562
+ if (!this.args.isFieldDef || !this.specCard) {
563
+ return undefined;
564
+ }
565
+ let spec = this.specCard;
566
+ let instances = spec.containedExamples;
567
+ if (!instances?.length) {
568
+ this.createNewField.perform(spec);
569
+ return undefined;
570
+ }
571
+ return instances.map((field, i) => ({
572
+ index: i,
573
+ displayIndex: i + 1,
574
+ field,
575
+ }));
576
+ }
577
+
578
+ private get field(): FieldDef | undefined {
579
+ if (!this.fieldInstances) {
580
+ return undefined;
581
+ }
582
+ let index = this.fieldIndex!;
583
+ if (index >= this.fieldInstances.length) {
584
+ index = this.fieldInstances.length - 1;
585
+ }
586
+ return this.fieldInstances[index].field;
587
+ }
588
+
589
+ private get fieldIndex(): number | undefined {
590
+ let index = this.playgroundPanelService.getSelection(
591
+ this.moduleId,
592
+ )?.fieldIndex;
593
+ if (index !== undefined && index >= 0) {
594
+ return index;
595
+ }
596
+ return this.args.isFieldDef ? 0 : undefined;
597
+ }
598
+
599
+ private get dropdownSelection(): SelectedInstance | undefined {
600
+ if (this.args.isFileDef) {
601
+ let instance = this.selectedFileMetaInstance;
602
+ if (!instance) {
603
+ return undefined;
604
+ }
605
+ return { card: instance, fieldIndex: undefined };
606
+ }
607
+ if (!this.card) {
608
+ return undefined;
609
+ }
610
+ return {
611
+ card: this.card,
612
+ fieldIndex: this.args.isFieldDef ? this.fieldIndex : undefined,
613
+ };
614
+ }
615
+
616
+ @action private onSelect(item: PrerenderedCardLike | FieldOption | FileDef) {
617
+ if (this.args.isFileDef) {
618
+ let fileId = (item as FileDef).id!;
619
+ this.selectedFileMetaId = fileId;
620
+ this.persistSelections(fileId);
621
+ } else if (this.args.isFieldDef) {
622
+ this.persistSelections(
623
+ this.card!.id,
624
+ this.format,
625
+ (item as FieldOption).index,
626
+ );
627
+ } else {
628
+ this.persistSelections((item as PrerenderedCardLike).url);
629
+ }
630
+ }
631
+
632
+ private get currentRealm() {
633
+ return this.operatorModeStateService.realmURL;
634
+ }
635
+
636
+ private get canWriteRealm() {
637
+ return this.realm.canWrite(this.currentRealm);
638
+ }
639
+
640
+ private get defaultFormat() {
641
+ return this.args.isFieldDef ? 'embedded' : 'isolated';
642
+ }
643
+
644
+ private get fileDefAfterMenuOptions(): MenuItem[] {
645
+ return [
646
+ new MenuItem({
647
+ label: 'Choose file\u2026',
648
+ action: () => this.chooseFileMeta.perform(),
649
+ icon: Folder,
650
+ }),
651
+ ];
652
+ }
653
+
654
+ private chooseFileMeta = task(async () => {
655
+ this.closeInstanceChooser();
656
+ let chosenFile = await chooseFile({
657
+ fileType: this.args.codeRef,
658
+ fileTypeName: this.args.codeRef.name,
659
+ });
660
+ if (chosenFile?.id) {
661
+ this.selectedFileMetaId = chosenFile.id;
662
+ this.persistSelections(chosenFile.id);
663
+ }
664
+ });
665
+
666
+ private get format(): Format {
667
+ return (
668
+ this.playgroundPanelService.getSelection(this.moduleId)?.format ??
669
+ this.defaultFormat
670
+ );
671
+ }
672
+
673
+ // 'form' is a synthetic chooser option for "auto-generated standard
674
+ // view" — same mechanism as interact mode's "Toggle Standard View".
675
+ // The renderer doesn't know about 'form', so we render it as 'edit'
676
+ // and pin @codeRef to baseCardRef, which makes getComponent fall back
677
+ // to CardDef's auto-generated template instead of the subclass's
678
+ // custom edit template. Chooser-facing logic still uses `this.format`.
679
+ private get effectiveFormat(): Format {
680
+ return this.format === 'form' ? 'edit' : this.format;
681
+ }
682
+ private get effectiveCodeRef(): ResolvedCodeRef | undefined {
683
+ return this.format === 'form' ? baseCardRef : undefined;
684
+ }
685
+
686
+ private persistSelections = (
687
+ selectedCardId: string,
688
+ selectedFormat = this.format,
689
+ index = this.fieldIndex,
690
+ ) => {
691
+ let selection = this.playgroundPanelService.getSelection(this.moduleId);
692
+ if (selection?.cardId) {
693
+ let { cardId, format, fieldIndex } = selection;
694
+ if (
695
+ cardId === trimJsonExtension(selectedCardId) &&
696
+ format === selectedFormat &&
697
+ fieldIndex === index
698
+ ) {
699
+ // this is important for preventing some unnecessary screen flashes from happening
700
+ return;
701
+ }
702
+ }
703
+
704
+ this.playgroundPanelService.persistSelections(
705
+ this.moduleId,
706
+ rri(trimJsonExtension(selectedCardId)),
707
+ selectedFormat,
708
+ index, // `undefined` means we are previewing a card instances. fields MUST have a corresponding index
709
+ // based on their position on their spec's containedExamples field. otherwise, it means that we are previewing
710
+ // a spec instance on playground instead of the field,
711
+ );
712
+ };
713
+
714
+ @action private chooseInstance() {
715
+ this.args.isFieldDef
716
+ ? (this.fieldChooserIsOpen = true)
717
+ : this.chooseCard.perform();
718
+ this.closeInstanceChooser();
719
+ }
720
+
721
+ @action private chooseField(index: number) {
722
+ if (!this.card?.id) {
723
+ return;
724
+ }
725
+ this.persistSelections(this.card.id, this.format, index);
726
+ this.closeFieldChooser();
727
+ }
728
+
729
+ @action private closeFieldChooser() {
730
+ this.fieldChooserIsOpen = false;
731
+ }
732
+
733
+ private chooseCard = task(async () => {
734
+ let cardId = await chooseCard({
735
+ filter: { type: this.args.codeRef },
736
+ });
737
+
738
+ if (cardId) {
739
+ this.recentFilesService.addRecentFileUrl(`${cardId}.json`);
740
+ this.persistSelections(cardId);
741
+ }
742
+ });
743
+
744
+ private autoGenerateInstance = restartableTask(async () => {
745
+ this.#creationError = false;
746
+ try {
747
+ if (this.args.isFieldDef && this.specCard) {
748
+ await this.createNewField.perform(this.specCard);
749
+ } else {
750
+ await this.createNewCard.perform();
751
+ }
752
+ } catch {
753
+ this.#creationError = true;
754
+ }
755
+ });
756
+
757
+ @action private createNew() {
758
+ this.#creationError = false;
759
+ this.args.isFieldDef && this.specCard
760
+ ? this.createNewField.perform(this.specCard)
761
+ : this.createNewCard.perform();
762
+ }
763
+
764
+ private get createNewIsRunning() {
765
+ return this.createNewCard.isRunning || this.createNewField.isRunning;
766
+ }
767
+
768
+ @cached
769
+ private get newCardLocalId() {
770
+ // we want our local id's to cycle after each successful
771
+ // new card creation and when the module id changes
772
+ this.newCardNonce;
773
+ this.moduleId;
774
+ return uuidv4();
775
+ }
776
+
777
+ private createNewCard = restartableTask(async () => {
778
+ let localId = this.newCardLocalId;
779
+ let newCardJSON: LooseSingleCardDocument;
780
+ let isFieldDef = this.args.isFieldDef;
781
+
782
+ if (isFieldDef) {
783
+ let fieldCard = await loadCardDef(this.args.codeRef, {
784
+ loader: this.loaderService.loader,
785
+ });
786
+ // for field def, create a new spec card instance
787
+ newCardJSON = {
788
+ data: {
789
+ lid: localId,
790
+ attributes: {
791
+ specType: 'field',
792
+ ref: this.args.codeRef,
793
+ cardTitle: this.args.codeRef.name,
794
+ containedExamples: [new fieldCard()],
795
+ },
796
+ meta: {
797
+ fields: {
798
+ containedExamples: [
799
+ {
800
+ adoptsFrom: this.args.codeRef,
801
+ },
802
+ ],
803
+ },
804
+ adoptsFrom: specRef,
805
+ realmURL: this.currentRealm as RealmIdentifier,
806
+ },
807
+ },
808
+ };
809
+ } else {
810
+ await this.assertNotSpecCard();
811
+ newCardJSON = {
812
+ data: {
813
+ lid: localId,
814
+ meta: {
815
+ adoptsFrom: this.args.codeRef,
816
+ realmURL: this.currentRealm as RealmIdentifier,
817
+ },
818
+ },
819
+ };
820
+ }
821
+ let maybeId: string | CardErrorJSONAPI = await this.store.create(
822
+ newCardJSON,
823
+ {
824
+ realm: this.currentRealm,
825
+ },
826
+ );
827
+ this.#creationError = typeof maybeId !== 'string';
828
+ this.persistSelections(
829
+ // in the case of an error we still need to persist it in
830
+ // order render the error doc
831
+ typeof maybeId === 'string' ? maybeId : localId,
832
+ // preview new instance in isolated format
833
+ isFieldDef ? 'edit' : 'isolated',
834
+ isFieldDef ? 0 : undefined,
835
+ );
836
+ if (typeof maybeId === 'string') {
837
+ // reset the local ID for making new cards after each successful attempt
838
+ // such that failed attempts will use the same local ID. that way when we
839
+ // get an error doc in the store for a particular local id based on the
840
+ // server error response, when a new card is successfully created that
841
+ // uses a correlating local ID we will automatically clear the error in
842
+ // the store.
843
+ this.newCardNonce++;
844
+ let cardId = maybeId;
845
+ this.recentFilesService.addRecentFileUrl(`${cardId}.json`);
846
+ }
847
+ this.closeInstanceChooser();
848
+ return maybeId;
849
+ });
850
+
851
+ private createNewField = restartableTask(async (specCard: Spec) => {
852
+ let fieldCard = await loadCardDef(this.args.codeRef, {
853
+ loader: this.loaderService.loader,
854
+ });
855
+ let examples = specCard.containedExamples;
856
+ examples?.push(new fieldCard());
857
+ let index = examples?.length ? examples.length - 1 : 0;
858
+ this.persistSelections(specCard.id, 'edit', index);
859
+ this.closeInstanceChooser();
860
+ });
861
+
862
+ private async assertNotSpecCard() {
863
+ let cardDef = await loadCardDef(this.args.codeRef, {
864
+ loader: this.loaderService.loader,
865
+ });
866
+ if (isSpecCard(cardDef)) {
867
+ throw new Error('Cannot create a spec from another spec');
868
+ }
869
+ }
870
+
871
+ private closeInstanceChooser = () =>
872
+ (
873
+ document.querySelector(
874
+ '[data-playground-instance-chooser][aria-expanded="true"]',
875
+ ) as BoxelSelect | null
876
+ )?.click();
877
+
878
+ private get currentFileDef(): FileDef | undefined {
879
+ let codePath = this.operatorModeStateService.state.codePath?.href;
880
+ if (!codePath) {
881
+ return undefined;
882
+ }
883
+
884
+ return this.matrixService.fileAPI.createFileDef({
885
+ sourceUrl: codePath,
886
+ name: codePath.split('/').pop(),
887
+ });
888
+ }
889
+
890
+ private processSearchResults = (prerenderedCards?: PrerenderedCardLike[]) => {
891
+ this.cardOptions = prerenderedCards ?? [];
892
+ this.findSelectedCard(prerenderedCards);
893
+ };
894
+
895
+ private showResults = (cards: PrerenderedCardLike[] | undefined) => {
896
+ return (
897
+ !this.args.isFieldDef &&
898
+ (cards?.length ||
899
+ this.persistedCardId ||
900
+ this.createNewIsRunning ||
901
+ this.isBaseCardModule) // means we do not conduct the expanded search for baseCardModule
902
+ );
903
+ };
904
+
905
+ private findSelectedCard = (prerenderedCards?: PrerenderedCardLike[]) => {
906
+ if (!prerenderedCards?.length) {
907
+ // it is possible that there's a persisted cardId in playground-selections local storage
908
+ // but that the card is no longer in recent-files local storage
909
+ // if that is the case, the card title will appear in dropdown menu but
910
+ // the card will not appear in dropdown options because the card is not in recent-files
911
+ // there are timing issues with trying to add it to recent-files service,
912
+ // see CS-8601 for suggested resolution for similar problems
913
+ return this.dropdownSelection;
914
+ }
915
+
916
+ if (!this.dropdownSelection?.card) {
917
+ if (this.persistedCardId || this.isBaseCardModule) {
918
+ // not displaying card preview for base card module unless user selects it specifically
919
+ return;
920
+ }
921
+ let recentCard = prerenderedCards[0];
922
+ // if there's no selected card, choose the most recent card as selected
923
+ this.persistSelections(recentCard.url, 'isolated');
924
+ return recentCard;
925
+ }
926
+
927
+ let selectedCardId = this.dropdownSelection.card.id;
928
+ let card = prerenderedCards.find(
929
+ (c) => trimJsonExtension(c.url) === selectedCardId,
930
+ );
931
+ return card;
932
+ };
933
+
934
+ // sort prerendered-search card results by most recently viewed
935
+ private getSortedCards = (cards: PrerenderedCardLike[]) => {
936
+ if (!this.recentCardIds?.length) {
937
+ return;
938
+ }
939
+ let sortedCards: PrerenderedCardLike[] = [];
940
+ for (let id of this.recentCardIds) {
941
+ let card = cards.find((c) => trimJsonExtension(c.url) === id);
942
+ if (card) {
943
+ sortedCards.push(card);
944
+ }
945
+ }
946
+ return sortedCards;
947
+ };
948
+
949
+ private get persistedCardId() {
950
+ return this.playgroundPanelService.peekSelection(this.moduleId)?.cardId;
951
+ }
952
+
953
+ private get isBaseCardModule() {
954
+ return this.moduleId === `${baseCardRef.module}/${baseCardRef.name}`;
955
+ }
956
+
957
+ private firstResult = (results?: PrerenderedCardLike[]) => {
958
+ let card = results?.[0];
959
+ return [card].filter(Boolean) as PrerenderedCardLike[];
960
+ };
961
+
962
+ private createNewWhenNoCards = (results?: PrerenderedCardLike[]) => {
963
+ if (!results?.length) {
964
+ if (
965
+ this.#creationError ||
966
+ this.cardError ||
967
+ this.autoGenerateInstance.isRunning ||
968
+ this.createNewCard.isRunning
969
+ ) {
970
+ return;
971
+ }
972
+ // if expanded search returns no instances, create new instance
973
+ afterRender(this.autoGenerateInstance.perform);
974
+ return;
975
+ }
976
+ // once instances exist we can allow future auto-generation attempts
977
+ this.#creationError = false;
978
+ };
979
+
980
+ <template>
981
+ {{consumeContext this.makeCardResource}}
982
+ {{consumeContext this.searchFileMeta}}
983
+
984
+ {{#if this.query}}
985
+ <PrerenderedCardSearch
986
+ @query={{this.query}}
987
+ @format='fitted'
988
+ @realms={{this.recentRealms}}
989
+ @isLive={{true}}
990
+ >
991
+ <:response as |cards|>
992
+ {{#if (this.showResults cards)}}
993
+ {{#let (this.getSortedCards cards) as |sortedCards|}}
994
+ {{afterRender (fn this.processSearchResults sortedCards)}}
995
+ {{/let}}
996
+ {{else if this.expandedQuery}}
997
+ <PrerenderedCardSearch
998
+ @query={{this.expandedQuery}}
999
+ @format='fitted'
1000
+ @realms={{this.realmServer.availableRealmIdentifiers}}
1001
+ >
1002
+ <:response as |maybeCards|>
1003
+ {{! TODO: remove side-effects for instance chooser in CS-8746 }}
1004
+ {{this.createNewWhenNoCards maybeCards}}
1005
+ {{#let (this.firstResult maybeCards) as |cards|}}
1006
+ {{afterRender (fn this.processSearchResults cards)}}
1007
+ {{/let}}
1008
+ </:response>
1009
+ </PrerenderedCardSearch>
1010
+ {{/if}}
1011
+ </:response>
1012
+ </PrerenderedCardSearch>
1013
+ {{/if}}
1014
+
1015
+ {{#if this.fieldChooserIsOpen}}
1016
+ <ToElsewhere
1017
+ @named='playground-field-picker'
1018
+ @send={{component
1019
+ FieldPickerModal
1020
+ instances=this.fieldInstances
1021
+ selectedIndex=this.dropdownSelection.fieldIndex
1022
+ onSelect=this.chooseField
1023
+ onClose=this.closeFieldChooser
1024
+ name=(if this.field (cardTypeDisplayName this.field))
1025
+ }}
1026
+ />
1027
+ {{/if}}
1028
+
1029
+ <section class='playground-panel' data-test-playground-panel>
1030
+ <div class='playground-panel-content' style={{this.setMaxWidth}}>
1031
+ {{#if this.isLoading}}
1032
+ <div class='loading'>
1033
+ <LoadingIndicator @color='var(--boxel-light)' />
1034
+ </div>
1035
+ {{else}}
1036
+ {{#let
1037
+ (if
1038
+ @isFieldDef
1039
+ this.field
1040
+ (if @isFileDef this.selectedFileMetaInstance this.card)
1041
+ )
1042
+ as |card|
1043
+ }}
1044
+ {{#let
1045
+ (component
1046
+ InstanceSelectDropdown
1047
+ isFieldDef=@isFieldDef
1048
+ isFileDef=@isFileDef
1049
+ cardOptions=this.cardOptions
1050
+ fieldOptions=this.fieldInstances
1051
+ fileMetaOptions=this.fileMetaDropdownOptions
1052
+ findSelectedCard=this.findSelectedCard
1053
+ selection=this.dropdownSelection
1054
+ onSelect=this.onSelect
1055
+ moduleId=this.moduleId
1056
+ persistSelections=this.persistSelections
1057
+ recentCardIds=this.recentCardIds
1058
+ afterMenuOptions=(if
1059
+ @isFileDef this.fileDefAfterMenuOptions this.afterMenuOptions
1060
+ )
1061
+ )
1062
+ as |InstanceChooser|
1063
+ }}
1064
+ {{#if this.showError}}
1065
+ {{! this is for types--cardError is always true in this case !}}
1066
+ {{#if this.cardError}}
1067
+ <CardContainer
1068
+ class='error-container'
1069
+ @displayBoundaries={{true}}
1070
+ data-test-error-container
1071
+ >
1072
+ <CardError
1073
+ @message={{this.errorMessage}}
1074
+ @error={{this.cardError}}
1075
+ @cardCreationError={{this.cardError.meta.isCreationError}}
1076
+ @fileToFixWithAi={{this.currentFileDef}}
1077
+ >
1078
+ <:error>
1079
+ <div class='instance-chooser-container'>
1080
+ <InstanceChooser />
1081
+ </div>
1082
+ </:error>
1083
+ </CardError>
1084
+ </CardContainer>
1085
+ {{/if}}
1086
+ {{else if card}}
1087
+ {{afterRender this.processFileMetaResults}}
1088
+ <div
1089
+ class='preview-area'
1090
+ data-test-field-preview-card={{@isFieldDef}}
1091
+ >
1092
+ {{#if this.renderedCardsForOverlayActions}}
1093
+ <Overlays
1094
+ @renderedCardsForOverlayActions={{this.renderedCardsForOverlayActions}}
1095
+ @viewCard={{@viewCard}}
1096
+ />
1097
+ {{/if}}
1098
+ <PlaygroundPreview
1099
+ @card={{card}}
1100
+ @format={{this.effectiveFormat}}
1101
+ @codeRef={{this.effectiveCodeRef}}
1102
+ @realmInfo={{this.realmInfo}}
1103
+ @contextMenuItems={{unless
1104
+ @isFileDef
1105
+ this.contextMenuItems
1106
+ }}
1107
+ @onEdit={{unless
1108
+ @isFileDef
1109
+ (if this.setEditMode (fn this.setFormat 'edit'))
1110
+ }}
1111
+ {{! Form is edit-with-base-template — treat it as
1112
+ editing for header (green bar + X button to
1113
+ return to default format). }}
1114
+ @onFinishEditing={{if
1115
+ (or (eq this.format 'edit') (eq this.format 'form'))
1116
+ (fn this.setFormat this.defaultFormat)
1117
+ }}
1118
+ @isFieldDef={{@isFieldDef}}
1119
+ @isFileDef={{@isFileDef}}
1120
+ />
1121
+ </div>
1122
+ <section class='instance-chooser-container'>
1123
+ <InstanceChooser />
1124
+ <div
1125
+ class='format-chooser-container pill-format-chooser-wrap'
1126
+ >
1127
+ <FormatChooser
1128
+ @formats={{this.availableFormats}}
1129
+ @format={{this.format}}
1130
+ @setFormat={{this.setFormat}}
1131
+ data-test-playground-format-chooser
1132
+ />
1133
+ </div>
1134
+ </section>
1135
+ {{else if this.createNewIsRunning}}
1136
+ <div class='loading'>
1137
+ <LoadingIndicator @color='var(--boxel-light)' />
1138
+ </div>
1139
+ {{else if this.maybeGenerateFieldSpec}}
1140
+ <SpecSearch
1141
+ @query={{this.specQuery}}
1142
+ @realms={{this.realmServer.availableRealmIdentifiers}}
1143
+ @createNewCard={{this.createNew}}
1144
+ />
1145
+ {{else if @isFileDef}}
1146
+ <p
1147
+ class='filedef-info-message'
1148
+ data-test-playground-filedef-message
1149
+ >
1150
+ <span>No file instances found. File instances are created by
1151
+ uploading files to a realm.</span>
1152
+ </p>
1153
+ {{/if}}
1154
+ {{/let}}
1155
+ {{/let}}
1156
+ {{/if}}
1157
+ </div>
1158
+ </section>
1159
+
1160
+ <style scoped>
1161
+ .playground-panel {
1162
+ background-image: url('./playground-background.png');
1163
+ background-position: left top;
1164
+ background-repeat: repeat;
1165
+ background-size: 22.5px;
1166
+ height: 100%;
1167
+ width: 100%;
1168
+ background-color: var(--boxel-dark);
1169
+ font: var(--boxel-font-sm);
1170
+ letter-spacing: var(--boxel-lsp-xs);
1171
+ overflow: auto;
1172
+ }
1173
+ .playground-panel-content {
1174
+ --playground-padding: var(--boxel-sp-sm);
1175
+ display: flex;
1176
+ flex-direction: column;
1177
+ gap: var(--boxel-sp);
1178
+ min-height: 100%;
1179
+ margin-inline: auto;
1180
+ padding: var(--playground-padding);
1181
+ }
1182
+ .preview-area {
1183
+ flex-grow: 1;
1184
+ z-index: 0;
1185
+ display: flex;
1186
+ flex-direction: column;
1187
+ }
1188
+ .instance-chooser-container {
1189
+ position: sticky;
1190
+ bottom: var(--playground-padding);
1191
+ border: 1px solid var(--boxel-450);
1192
+ margin: 0 auto;
1193
+ width: 460px;
1194
+ max-width: 100%;
1195
+ justify-content: space-between;
1196
+
1197
+ /* It’s meant to have two rounded borders, this removes a gap */
1198
+ border-radius: calc(var(--boxel-border-radius) + 1px);
1199
+ }
1200
+ .instance-chooser-container :deep(.instance-chooser) {
1201
+ border-radius: 0;
1202
+ border-top-left-radius: var(--boxel-border-radius);
1203
+ border-top-right-radius: var(--boxel-border-radius);
1204
+ }
1205
+ .format-chooser-container {
1206
+ border-bottom-left-radius: var(--boxel-border-radius);
1207
+ border-bottom-right-radius: var(--boxel-border-radius);
1208
+ }
1209
+ /* Centers the pill chooser inside the existing dark format-
1210
+ chooser bar — keeps the rounded box / instance chooser
1211
+ layout above unchanged, only the picker swaps. */
1212
+ .pill-format-chooser-wrap {
1213
+ background-color: var(--boxel-dark);
1214
+ display: flex;
1215
+ justify-content: center;
1216
+ align-items: center;
1217
+ padding: 0;
1218
+ }
1219
+ .error-container {
1220
+ flex-grow: 1;
1221
+ display: grid;
1222
+ grid-template-rows: max-content 1fr;
1223
+ position: unset;
1224
+
1225
+ --card-error-header-height: calc(
1226
+ 40px + var(--boxel-form-control-height) + var(--boxel-sp)
1227
+ );
1228
+ }
1229
+ .error-container :deep(.instance-chooser) {
1230
+ border-radius: var(--boxel-border-radius);
1231
+ box-shadow: var(--boxel-deep-box-shadow);
1232
+ }
1233
+ .card-error-detail :deep(.instance-chooser) {
1234
+ border-radius: var(--boxel-border-radius);
1235
+ }
1236
+ .loading {
1237
+ display: flex;
1238
+ align-items: center;
1239
+ justify-content: center;
1240
+ flex: 1;
1241
+ min-height: 100%;
1242
+ width: 100%;
1243
+ }
1244
+ .filedef-info-message {
1245
+ display: flex;
1246
+ flex-wrap: wrap;
1247
+ align-content: center;
1248
+ justify-content: center;
1249
+ text-align: center;
1250
+ height: 100%;
1251
+ color: var(--boxel-450);
1252
+ font-weight: 500;
1253
+ padding: var(--boxel-sp-xl);
1254
+ margin-block: 0;
1255
+ }
1256
+ .filedef-info-message > span {
1257
+ max-width: 400px;
1258
+ }
1259
+
1260
+ .playground-panel-content:has(.social-preview-container) {
1261
+ padding: 0;
1262
+ }
1263
+
1264
+ .playground-panel :deep(.social-preview-container) {
1265
+ border: 0;
1266
+ border-radius: unset;
1267
+ }
1268
+ </style>
1269
+ </template>
1270
+ }
1271
+
1272
+ function afterRender(callback: () => void) {
1273
+ schedule('afterRender', callback);
1274
+ }