@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,1081 @@
1
+ /**
2
+ * CodeMirror 6 context module -- lazy-loaded via globalThis.__loadCodeMirror.
3
+ *
4
+ * This module is the single dynamic-import entry point for CodeMirror.
5
+ * Webpack will code-split it (and all its transitive deps) into a separate
6
+ * chunk automatically. The base package's CodeMirrorEditor component
7
+ * consumes the exported context object.
8
+ *
9
+ * Unlike ProseMirror, CodeMirror edits markdown source text directly --
10
+ * there is no intermediate document model, no parse/serialize layer.
11
+ * Card previews are achieved through CM6's decoration/widget system.
12
+ * Obsidian-style live preview is achieved by using the Lezer markdown
13
+ * syntax tree to apply decorations that render formatting inline and
14
+ * reveal raw syntax only when the cursor is on the relevant line.
15
+ */
16
+
17
+ import {
18
+ autocompletion,
19
+ type CompletionContext,
20
+ type CompletionResult,
21
+ } from '@codemirror/autocomplete';
22
+ import {
23
+ defaultKeymap,
24
+ history,
25
+ historyKeymap,
26
+ undo,
27
+ redo,
28
+ } from '@codemirror/commands';
29
+ import { markdown, markdownLanguage } from '@codemirror/lang-markdown';
30
+ import { syntaxTree } from '@codemirror/language';
31
+ import {
32
+ EditorState,
33
+ StateEffect,
34
+ StateField,
35
+ type Extension,
36
+ } from '@codemirror/state';
37
+ import {
38
+ EditorView,
39
+ Decoration,
40
+ type DecorationSet,
41
+ ViewPlugin,
42
+ type ViewUpdate,
43
+ WidgetType,
44
+ keymap,
45
+ } from '@codemirror/view';
46
+
47
+ // ── Card widget target interface ────────────────────────────────────────────
48
+
49
+ export interface CardWidgetTarget {
50
+ element: HTMLElement;
51
+ cardId: string;
52
+ format: 'atom' | 'embedded';
53
+ kind: 'inline' | 'block';
54
+ }
55
+
56
+ // ── State effect for opening card search ────────────────────────────────────
57
+
58
+ export const openCardSearchEffect = StateEffect.define<{
59
+ from: number;
60
+ to: number;
61
+ }>();
62
+
63
+ // ── Focus tracking ─────────────────────────────────────────────────────────
64
+
65
+ const focusChangeEffect = StateEffect.define<boolean>();
66
+
67
+ const focusField = StateField.define<boolean>({
68
+ create() {
69
+ return false;
70
+ },
71
+ update(focused, tr) {
72
+ for (let e of tr.effects) {
73
+ if (e.is(focusChangeEffect)) return e.value;
74
+ }
75
+ return focused;
76
+ },
77
+ });
78
+
79
+ // ── Decoration range type ──────────────────────────────────────────────────
80
+
81
+ interface DecoRange {
82
+ from: number;
83
+ to: number;
84
+ value: Decoration;
85
+ }
86
+
87
+ // ── Card reference patterns ─────────────────────────────────────────────────
88
+
89
+ // Block: ::card[URL] or ::card[URL | size-spec], must be the only content on a line
90
+ const BLOCK_CARD_RE = /^::card\[([^\]\n]+)\][ \t]*$/gm;
91
+ // Inline: :card[URL], not preceded by another colon (avoids matching ::card)
92
+ const INLINE_CARD_RE = /(?<!:):card\[([^\]\n]+)\]/g;
93
+
94
+ // ── Cursor-aware helpers ───────────────────────────────────────────────────
95
+
96
+ function isOnCursorLine(
97
+ state: EditorState,
98
+ pos: number,
99
+ cursorLine: number,
100
+ ): boolean {
101
+ return state.doc.lineAt(pos).number === cursorLine;
102
+ }
103
+
104
+ function cursorInRange(
105
+ state: EditorState,
106
+ from: number,
107
+ to: number,
108
+ cursorLine: number,
109
+ ): boolean {
110
+ let startLine = state.doc.lineAt(from).number;
111
+ let endLine = state.doc.lineAt(Math.min(to, state.doc.length)).number;
112
+ return cursorLine >= startLine && cursorLine <= endLine;
113
+ }
114
+
115
+ // ── CardWidget (extends WidgetType) ─────────────────────────────────────────
116
+
117
+ class CardWidget extends WidgetType {
118
+ constructor(
119
+ readonly cardId: string,
120
+ readonly kind: 'inline' | 'block',
121
+ ) {
122
+ super();
123
+ }
124
+
125
+ eq(other: CardWidget) {
126
+ return this.cardId === other.cardId && this.kind === other.kind;
127
+ }
128
+
129
+ toDOM(): HTMLElement {
130
+ let tag = this.kind === 'inline' ? 'span' : 'div';
131
+ let el = document.createElement(tag);
132
+ el.setAttribute('data-card-id', this.cardId);
133
+ el.setAttribute('data-card-kind', this.kind);
134
+ el.className = `cm-card-widget cm-card-widget--${this.kind}`;
135
+ el.contentEditable = 'false';
136
+ return el;
137
+ }
138
+
139
+ ignoreEvent() {
140
+ return true;
141
+ }
142
+ }
143
+
144
+ // ── HorizontalRuleWidget ───────────────────────────────────────────────────
145
+
146
+ class HorizontalRuleWidget extends WidgetType {
147
+ eq() {
148
+ return true;
149
+ }
150
+ toDOM(): HTMLElement {
151
+ let el = document.createElement('hr');
152
+ el.className = 'cm-md-hr-widget';
153
+ el.contentEditable = 'false';
154
+ return el;
155
+ }
156
+ ignoreEvent() {
157
+ return true;
158
+ }
159
+ }
160
+
161
+ // ── Check if a position is inside a code block or inline code ───────────────
162
+
163
+ function isInsideCode(state: EditorState, from: number, to: number): boolean {
164
+ let tree = syntaxTree(state);
165
+ let inside = false;
166
+ tree.iterate({
167
+ from,
168
+ to,
169
+ enter(node): false | void {
170
+ if (
171
+ node.name === 'FencedCode' ||
172
+ node.name === 'CodeBlock' ||
173
+ node.name === 'InlineCode' ||
174
+ node.name === 'CodeText'
175
+ ) {
176
+ inside = true;
177
+ return false;
178
+ }
179
+ },
180
+ });
181
+ return inside;
182
+ }
183
+
184
+ // ── Heading decorations ────────────────────────────────────────────────────
185
+
186
+ function buildHeadingDecorations(
187
+ state: EditorState,
188
+ cursorLine: number,
189
+ livePreview: boolean,
190
+ ): DecoRange[] {
191
+ let decos: DecoRange[] = [];
192
+ let tree = syntaxTree(state);
193
+
194
+ tree.iterate({
195
+ enter(node): false | void {
196
+ let level = 0;
197
+ if (node.name === 'ATXHeading1') level = 1;
198
+ else if (node.name === 'ATXHeading2') level = 2;
199
+ else if (node.name === 'ATXHeading3') level = 3;
200
+ else if (node.name === 'ATXHeading4') level = 4;
201
+ else if (node.name === 'ATXHeading5') level = 5;
202
+ else if (node.name === 'ATXHeading6') level = 6;
203
+ else if (node.name === 'SetextHeading1') level = 1;
204
+ else if (node.name === 'SetextHeading2') level = 2;
205
+
206
+ if (level === 0) return;
207
+
208
+ let line = state.doc.lineAt(node.from);
209
+ let onCursor =
210
+ !livePreview || cursorInRange(state, node.from, node.to, cursorLine);
211
+
212
+ // Line decoration for heading size
213
+ decos.push({
214
+ from: line.from,
215
+ to: line.from,
216
+ value: Decoration.line({ class: `cm-md-h${level}` }),
217
+ });
218
+
219
+ // Find and style HeaderMark children (the # characters)
220
+ let inner = node.node;
221
+ let cursor = inner.cursor();
222
+ if (cursor.firstChild()) {
223
+ do {
224
+ if (cursor.name === 'HeaderMark') {
225
+ if (onCursor) {
226
+ decos.push({
227
+ from: cursor.from,
228
+ to: cursor.to,
229
+ value: Decoration.mark({ class: 'cm-md-marker' }),
230
+ });
231
+ } else {
232
+ // Replace the marker AND the trailing space with nothing
233
+ let hideEnd = cursor.to;
234
+ let nextChar = state.sliceDoc(hideEnd, hideEnd + 1);
235
+ if (nextChar === ' ') {
236
+ hideEnd += 1;
237
+ }
238
+ decos.push({
239
+ from: cursor.from,
240
+ to: hideEnd,
241
+ value: Decoration.replace({}),
242
+ });
243
+ }
244
+ }
245
+ } while (cursor.nextSibling());
246
+ }
247
+ },
248
+ });
249
+
250
+ return decos;
251
+ }
252
+
253
+ // ── Inline formatting decorations ──────────────────────────────────────────
254
+
255
+ function buildInlineFormattingDecorations(
256
+ state: EditorState,
257
+ cursorLine: number,
258
+ livePreview: boolean,
259
+ ): DecoRange[] {
260
+ let decos: DecoRange[] = [];
261
+ let tree = syntaxTree(state);
262
+
263
+ tree.iterate({
264
+ enter(node): false | void {
265
+ if (
266
+ node.name !== 'StrongEmphasis' &&
267
+ node.name !== 'Emphasis' &&
268
+ node.name !== 'Strikethrough' &&
269
+ node.name !== 'InlineCode'
270
+ ) {
271
+ return;
272
+ }
273
+
274
+ let onCursor =
275
+ !livePreview || isOnCursorLine(state, node.from, cursorLine);
276
+
277
+ if (node.name === 'InlineCode') {
278
+ // Find CodeMark children (backticks)
279
+ let inner = node.node;
280
+ let marks: { from: number; to: number }[] = [];
281
+ let c = inner.cursor();
282
+ if (c.firstChild()) {
283
+ do {
284
+ if (c.name === 'CodeMark') {
285
+ marks.push({ from: c.from, to: c.to });
286
+ }
287
+ } while (c.nextSibling());
288
+ }
289
+
290
+ // Style the content (between first and last mark)
291
+ if (marks.length >= 2) {
292
+ let contentFrom = marks[0].to;
293
+ let contentTo = marks[marks.length - 1].from;
294
+ if (contentFrom < contentTo) {
295
+ decos.push({
296
+ from: contentFrom,
297
+ to: contentTo,
298
+ value: Decoration.mark({ class: 'cm-md-inline-code' }),
299
+ });
300
+ }
301
+
302
+ // Hide or dim backtick marks
303
+ for (let m of marks) {
304
+ decos.push({
305
+ from: m.from,
306
+ to: m.to,
307
+ value: onCursor
308
+ ? Decoration.mark({ class: 'cm-md-marker' })
309
+ : Decoration.mark({
310
+ class: 'cm-md-marker cm-md-marker--hidden',
311
+ }),
312
+ });
313
+ }
314
+ }
315
+ return false; // don't descend
316
+ }
317
+
318
+ // StrongEmphasis, Emphasis, or Strikethrough
319
+ let cssClass =
320
+ node.name === 'StrongEmphasis'
321
+ ? 'cm-md-bold'
322
+ : node.name === 'Strikethrough'
323
+ ? 'cm-md-strikethrough'
324
+ : 'cm-md-italic';
325
+ let markName =
326
+ node.name === 'Strikethrough' ? 'StrikethroughMark' : 'EmphasisMark';
327
+ let inner = node.node;
328
+ let marks: { from: number; to: number }[] = [];
329
+ let c = inner.cursor();
330
+ if (c.firstChild()) {
331
+ do {
332
+ if (c.name === markName) {
333
+ marks.push({ from: c.from, to: c.to });
334
+ }
335
+ } while (c.nextSibling());
336
+ }
337
+
338
+ if (marks.length >= 2) {
339
+ let contentFrom = marks[0].to;
340
+ let contentTo = marks[marks.length - 1].from;
341
+ if (contentFrom < contentTo) {
342
+ decos.push({
343
+ from: contentFrom,
344
+ to: contentTo,
345
+ value: Decoration.mark({ class: cssClass }),
346
+ });
347
+ }
348
+
349
+ // Hide or dim emphasis marks
350
+ for (let m of marks) {
351
+ decos.push({
352
+ from: m.from,
353
+ to: m.to,
354
+ value: onCursor
355
+ ? Decoration.mark({ class: 'cm-md-marker' })
356
+ : Decoration.mark({
357
+ class: 'cm-md-marker cm-md-marker--hidden',
358
+ }),
359
+ });
360
+ }
361
+ }
362
+ },
363
+ });
364
+
365
+ return decos;
366
+ }
367
+
368
+ // ── Block decorations (code blocks, blockquotes, horizontal rules) ─────────
369
+
370
+ function buildBlockDecorations(
371
+ state: EditorState,
372
+ cursorLine: number,
373
+ livePreview: boolean,
374
+ ): DecoRange[] {
375
+ let decos: DecoRange[] = [];
376
+ let tree = syntaxTree(state);
377
+
378
+ tree.iterate({
379
+ enter(node): false | void {
380
+ // ── Fenced code blocks ──
381
+ if (node.name === 'FencedCode') {
382
+ let onCursor = cursorInRange(state, node.from, node.to, cursorLine);
383
+
384
+ // Line decoration on every line in the code block
385
+ let startLine = state.doc.lineAt(node.from).number;
386
+ let endLine = state.doc.lineAt(
387
+ Math.min(node.to, state.doc.length),
388
+ ).number;
389
+ for (let i = startLine; i <= endLine; i++) {
390
+ let line = state.doc.line(i);
391
+ decos.push({
392
+ from: line.from,
393
+ to: line.from,
394
+ value: Decoration.line({ class: 'cm-md-code-line' }),
395
+ });
396
+ }
397
+
398
+ // Style fence markers and code info
399
+ let inner = node.node;
400
+ let c = inner.cursor();
401
+ if (c.firstChild()) {
402
+ do {
403
+ if (c.name === 'CodeMark') {
404
+ decos.push({
405
+ from: c.from,
406
+ to: c.to,
407
+ value: Decoration.mark({
408
+ class: onCursor ? 'cm-md-code-fence' : 'cm-md-code-fence',
409
+ }),
410
+ });
411
+ } else if (c.name === 'CodeInfo') {
412
+ decos.push({
413
+ from: c.from,
414
+ to: c.to,
415
+ value: Decoration.mark({ class: 'cm-md-code-info' }),
416
+ });
417
+ }
418
+ } while (c.nextSibling());
419
+ }
420
+
421
+ return false; // don't descend further
422
+ }
423
+
424
+ // ── Blockquotes ──
425
+ if (node.name === 'Blockquote') {
426
+ let startLine = state.doc.lineAt(node.from).number;
427
+ let endLine = state.doc.lineAt(
428
+ Math.min(node.to, state.doc.length),
429
+ ).number;
430
+ for (let i = startLine; i <= endLine; i++) {
431
+ let line = state.doc.line(i);
432
+ decos.push({
433
+ from: line.from,
434
+ to: line.from,
435
+ value: Decoration.line({ class: 'cm-md-blockquote-line' }),
436
+ });
437
+ }
438
+
439
+ // Dim QuoteMark children
440
+ let inner = node.node;
441
+ let c = inner.cursor();
442
+ if (c.firstChild()) {
443
+ do {
444
+ if (c.name === 'QuoteMark') {
445
+ decos.push({
446
+ from: c.from,
447
+ to: c.to,
448
+ value: Decoration.mark({ class: 'cm-md-quote-mark' }),
449
+ });
450
+ }
451
+ } while (c.nextSibling());
452
+ }
453
+ }
454
+
455
+ // ── Horizontal rules ──
456
+ if (node.name === 'HorizontalRule') {
457
+ let onCursor =
458
+ !livePreview || isOnCursorLine(state, node.from, cursorLine);
459
+ let line = state.doc.lineAt(node.from);
460
+
461
+ if (onCursor) {
462
+ decos.push({
463
+ from: line.from,
464
+ to: line.from,
465
+ value: Decoration.line({ class: 'cm-md-hr-line' }),
466
+ });
467
+ } else {
468
+ // Replace the --- with a visual <hr>
469
+ decos.push({
470
+ from: node.from,
471
+ to: node.to,
472
+ value: Decoration.replace({
473
+ widget: new HorizontalRuleWidget(),
474
+ }),
475
+ });
476
+ }
477
+ }
478
+ },
479
+ });
480
+
481
+ return decos;
482
+ }
483
+
484
+ // ── List decorations ───────────────────────────────────────────────────────
485
+
486
+ function buildListDecorations(
487
+ state: EditorState,
488
+ _cursorLine: number,
489
+ ): DecoRange[] {
490
+ let decos: DecoRange[] = [];
491
+ let tree = syntaxTree(state);
492
+
493
+ tree.iterate({
494
+ enter(node): false | void {
495
+ if (node.name === 'ListItem') {
496
+ let line = state.doc.lineAt(node.from);
497
+ decos.push({
498
+ from: line.from,
499
+ to: line.from,
500
+ value: Decoration.line({ class: 'cm-md-list-item' }),
501
+ });
502
+
503
+ // Style the ListMark
504
+ let inner = node.node;
505
+ let c = inner.cursor();
506
+ if (c.firstChild()) {
507
+ do {
508
+ if (c.name === 'ListMark') {
509
+ decos.push({
510
+ from: c.from,
511
+ to: c.to,
512
+ value: Decoration.mark({ class: 'cm-md-list-mark' }),
513
+ });
514
+ }
515
+ } while (c.nextSibling());
516
+ }
517
+ return false; // don't descend further into list item content
518
+ }
519
+ },
520
+ });
521
+
522
+ return decos;
523
+ }
524
+
525
+ // ── Link decorations ───────────────────────────────────────────────────────
526
+
527
+ function buildLinkDecorations(
528
+ state: EditorState,
529
+ cursorLine: number,
530
+ livePreview: boolean,
531
+ ): DecoRange[] {
532
+ let decos: DecoRange[] = [];
533
+ let tree = syntaxTree(state);
534
+
535
+ tree.iterate({
536
+ enter(node): false | void {
537
+ if (node.name !== 'Link') return;
538
+
539
+ let onCursor =
540
+ !livePreview || isOnCursorLine(state, node.from, cursorLine);
541
+ let inner = node.node;
542
+
543
+ // Collect child nodes: LinkMark ([ ] ( )), URL
544
+ let linkMarks: { from: number; to: number }[] = [];
545
+ let urlNode: { from: number; to: number } | null = null;
546
+
547
+ let c = inner.cursor();
548
+ if (c.firstChild()) {
549
+ do {
550
+ if (c.name === 'LinkMark') {
551
+ linkMarks.push({ from: c.from, to: c.to });
552
+ } else if (c.name === 'URL') {
553
+ urlNode = { from: c.from, to: c.to };
554
+ }
555
+ } while (c.nextSibling());
556
+ }
557
+
558
+ // Need at least [ ] ( ) — 4 marks
559
+ if (linkMarks.length < 4) return false;
560
+
561
+ // Text is between first [ and second ] (linkMarks[0] and linkMarks[1])
562
+ let textFrom = linkMarks[0].to;
563
+ let textTo = linkMarks[1].from;
564
+
565
+ if (textFrom < textTo) {
566
+ decos.push({
567
+ from: textFrom,
568
+ to: textTo,
569
+ value: Decoration.mark({ class: 'cm-md-link-text' }),
570
+ });
571
+ }
572
+
573
+ if (onCursor) {
574
+ // Show all marks dimmed
575
+ for (let m of linkMarks) {
576
+ decos.push({
577
+ from: m.from,
578
+ to: m.to,
579
+ value: Decoration.mark({ class: 'cm-md-marker' }),
580
+ });
581
+ }
582
+ if (urlNode) {
583
+ decos.push({
584
+ from: urlNode.from,
585
+ to: urlNode.to,
586
+ value: Decoration.mark({ class: 'cm-md-link-url' }),
587
+ });
588
+ }
589
+ } else {
590
+ // Hide opening [
591
+ decos.push({
592
+ from: linkMarks[0].from,
593
+ to: linkMarks[0].to,
594
+ value: Decoration.replace({}),
595
+ });
596
+ // Hide ]( ... ) — from second mark through end
597
+ if (linkMarks.length >= 3) {
598
+ decos.push({
599
+ from: linkMarks[1].from,
600
+ to: node.to,
601
+ value: Decoration.replace({}),
602
+ });
603
+ }
604
+ }
605
+
606
+ return false; // don't descend
607
+ },
608
+ });
609
+
610
+ return decos;
611
+ }
612
+
613
+ // ── Card decorations ───────────────────────────────────────────────────────
614
+
615
+ function buildCardDecorations(
616
+ state: EditorState,
617
+ cursorLine: number,
618
+ livePreview: boolean,
619
+ ): DecoRange[] {
620
+ let decos: DecoRange[] = [];
621
+ let doc = state.doc;
622
+ let text = doc.toString();
623
+
624
+ // Block cards: ::card[URL]
625
+ BLOCK_CARD_RE.lastIndex = 0;
626
+ let match: RegExpExecArray | null;
627
+ while ((match = BLOCK_CARD_RE.exec(text)) !== null) {
628
+ let from = match.index;
629
+ let to = from + match[0].length;
630
+ if (isInsideCode(state, from, to)) continue;
631
+
632
+ let cardId = match[1].trim();
633
+ let pipeIdx = cardId.indexOf('|');
634
+ if (pipeIdx >= 0) {
635
+ cardId = cardId.substring(0, pipeIdx).trim();
636
+ }
637
+
638
+ let line = doc.lineAt(from);
639
+ let onCursor = livePreview && line.number === cursorLine;
640
+
641
+ if (!livePreview) {
642
+ // Source mode: show raw syntax with highlighting only
643
+ decos.push({
644
+ from,
645
+ to,
646
+ value: Decoration.mark({
647
+ class:
648
+ 'cm-bfm-card-ref cm-bfm-card-ref--block cm-bfm-card-ref--active',
649
+ }),
650
+ });
651
+ } else if (onCursor) {
652
+ // Cursor on line: show raw syntax AND card preview below
653
+ decos.push({
654
+ from,
655
+ to,
656
+ value: Decoration.mark({
657
+ class:
658
+ 'cm-bfm-card-ref cm-bfm-card-ref--block cm-bfm-card-ref--active',
659
+ }),
660
+ });
661
+ let previewWidget = new CardWidget(cardId, 'block');
662
+ decos.push({
663
+ from: to,
664
+ to: to,
665
+ value: Decoration.widget({ widget: previewWidget, side: 1 }),
666
+ });
667
+ } else {
668
+ // Replace source text with card widget
669
+ let widget = new CardWidget(cardId, 'block');
670
+ decos.push({
671
+ from,
672
+ to,
673
+ value: Decoration.replace({ widget }),
674
+ });
675
+ }
676
+ }
677
+
678
+ // Inline cards: :card[URL]
679
+ INLINE_CARD_RE.lastIndex = 0;
680
+ while ((match = INLINE_CARD_RE.exec(text)) !== null) {
681
+ let from = match.index;
682
+ let to = from + match[0].length;
683
+ if (isInsideCode(state, from, to)) continue;
684
+
685
+ let cardId = match[1].trim();
686
+ let onCursor = livePreview && isOnCursorLine(state, from, cursorLine);
687
+
688
+ if (!livePreview) {
689
+ // Source mode: show raw syntax with highlighting only
690
+ decos.push({
691
+ from,
692
+ to,
693
+ value: Decoration.mark({
694
+ class: 'cm-bfm-card-ref cm-bfm-card-ref--inline',
695
+ }),
696
+ });
697
+ } else if (onCursor) {
698
+ // Cursor on line: show raw syntax AND card preview after
699
+ decos.push({
700
+ from,
701
+ to,
702
+ value: Decoration.mark({
703
+ class: 'cm-bfm-card-ref cm-bfm-card-ref--inline',
704
+ }),
705
+ });
706
+ let previewWidget = new CardWidget(cardId, 'inline');
707
+ decos.push({
708
+ from: to,
709
+ to: to,
710
+ value: Decoration.widget({ widget: previewWidget, side: 1 }),
711
+ });
712
+ } else {
713
+ // Replace source text with inline card widget
714
+ let widget = new CardWidget(cardId, 'inline');
715
+ decos.push({
716
+ from,
717
+ to,
718
+ value: Decoration.replace({ widget }),
719
+ });
720
+ }
721
+ }
722
+
723
+ return decos;
724
+ }
725
+
726
+ // ── Build all decorations ──────────────────────────────────────────────────
727
+
728
+ function buildDecorations(
729
+ state: EditorState,
730
+ cursorLine: number,
731
+ livePreview: boolean,
732
+ ): DecorationSet {
733
+ let allDecos: DecoRange[] = [
734
+ ...buildHeadingDecorations(state, cursorLine, livePreview),
735
+ ...buildInlineFormattingDecorations(state, cursorLine, livePreview),
736
+ ...buildBlockDecorations(state, cursorLine, livePreview),
737
+ ...buildListDecorations(state, cursorLine),
738
+ ...buildLinkDecorations(state, cursorLine, livePreview),
739
+ ...buildCardDecorations(state, cursorLine, livePreview),
740
+ ];
741
+
742
+ return Decoration.set(
743
+ allDecos.map((d) => d.value.range(d.from, d.to)),
744
+ true, // let CM6 sort
745
+ );
746
+ }
747
+
748
+ // ── Card decoration StateField ─────────────────────────────────────────────
749
+
750
+ function createDecorationField(
751
+ livePreview: boolean,
752
+ ): StateField<DecorationSet> {
753
+ return StateField.define<DecorationSet>({
754
+ create(state) {
755
+ let focused = state.field(focusField);
756
+ let cursorLine = focused
757
+ ? state.doc.lineAt(state.selection.main.head).number
758
+ : -1;
759
+ return buildDecorations(state, cursorLine, livePreview);
760
+ },
761
+ update(decos, tr) {
762
+ let focusChanged = tr.effects.some((e) => e.is(focusChangeEffect));
763
+ // In source mode, cursor/focus changes don't affect decorations
764
+ if (tr.docChanged || (livePreview && (tr.selection || focusChanged))) {
765
+ let focused = tr.state.field(focusField);
766
+ let cursorLine = focused
767
+ ? tr.state.doc.lineAt(tr.state.selection.main.head).number
768
+ : -1;
769
+ return buildDecorations(tr.state, cursorLine, livePreview);
770
+ }
771
+ return decos;
772
+ },
773
+ provide: (f) => EditorView.decorations.from(f),
774
+ });
775
+ }
776
+
777
+ // ── Card target notification ViewPlugin ────────────────────────────────────
778
+
779
+ function createCardTargetNotifier(
780
+ onChange: (targets: CardWidgetTarget[]) => void,
781
+ ): ViewPlugin<{ destroy(): void }> {
782
+ return ViewPlugin.fromClass(
783
+ class {
784
+ private rafId = 0;
785
+ private destroyed = false;
786
+
787
+ constructor(view: EditorView) {
788
+ this.notifyTargets(view);
789
+ }
790
+
791
+ update(update: ViewUpdate) {
792
+ if (
793
+ update.docChanged ||
794
+ update.selectionSet ||
795
+ update.viewportChanged
796
+ ) {
797
+ this.notifyTargets(update.view);
798
+ }
799
+ }
800
+
801
+ destroy() {
802
+ this.destroyed = true;
803
+ if (this.rafId) {
804
+ cancelAnimationFrame(this.rafId);
805
+ this.rafId = 0;
806
+ }
807
+ }
808
+
809
+ notifyTargets(view: EditorView) {
810
+ if (this.rafId) {
811
+ cancelAnimationFrame(this.rafId);
812
+ }
813
+ // eslint-disable-next-line @cardstack/boxel/no-raf-for-state -- throttled DOM measurement after paint
814
+ this.rafId = requestAnimationFrame(() => {
815
+ this.rafId = 0;
816
+ if (this.destroyed) return;
817
+ let targets: CardWidgetTarget[] = [];
818
+ let editorDom = view.dom;
819
+ let widgetElements = editorDom.querySelectorAll('.cm-card-widget');
820
+ for (let el of widgetElements) {
821
+ let cardId = el.getAttribute('data-card-id');
822
+ let kind = el.getAttribute('data-card-kind') as 'inline' | 'block';
823
+ if (cardId) {
824
+ targets.push({
825
+ element: el as HTMLElement,
826
+ cardId,
827
+ format: kind === 'inline' ? 'atom' : 'embedded',
828
+ kind,
829
+ });
830
+ }
831
+ }
832
+ onChange(targets);
833
+ });
834
+ }
835
+ },
836
+ );
837
+ }
838
+
839
+ // ── Slash command autocompletion ─────────────────────────────────────────────
840
+
841
+ function createSlashCommandSource(
842
+ onOpenCardSearch: (pos: { from: number; to: number }) => void,
843
+ ): (context: CompletionContext) => CompletionResult | null {
844
+ return function slashCommandSource(
845
+ context: CompletionContext,
846
+ ): CompletionResult | null {
847
+ let match = context.matchBefore(/\/\w*/);
848
+ if (!match) return null;
849
+ if (match.from === match.to && !context.explicit) return null;
850
+
851
+ let line = context.state.doc.lineAt(match.from);
852
+ if (match.from > line.from) {
853
+ let charBefore = context.state.sliceDoc(match.from - 1, match.from);
854
+ if (!/\s/.test(charBefore)) return null;
855
+ }
856
+
857
+ return {
858
+ from: match.from,
859
+ options: [
860
+ {
861
+ label: '/card',
862
+ detail: 'Insert a card reference',
863
+ type: 'keyword',
864
+ apply: (
865
+ view: EditorView,
866
+ _completion: unknown,
867
+ from: number,
868
+ to: number,
869
+ ) => {
870
+ view.dispatch({ changes: { from, to, insert: '' } });
871
+ onOpenCardSearch({ from, to });
872
+ },
873
+ },
874
+ ],
875
+ };
876
+ };
877
+ }
878
+
879
+ // ── Markdown formatting helpers ─────────────────────────────────────────────
880
+
881
+ function wrapWith(marker: string) {
882
+ return (view: EditorView): boolean => {
883
+ let { from, to } = view.state.selection.main;
884
+ if (from === to) return false;
885
+ let selected = view.state.sliceDoc(from, to);
886
+ let len = marker.length;
887
+
888
+ // Case 1: Selection includes the markers (source mode selection)
889
+ if (
890
+ selected.startsWith(marker) &&
891
+ selected.endsWith(marker) &&
892
+ selected.length >= len * 2
893
+ ) {
894
+ view.dispatch({
895
+ changes: {
896
+ from,
897
+ to,
898
+ insert: selected.slice(len, -len),
899
+ },
900
+ });
901
+ return true;
902
+ }
903
+
904
+ // Case 2: Markers are adjacent to the selection (live preview mode where
905
+ // markers are hidden — the user selects just the visible text)
906
+ let before = view.state.sliceDoc(Math.max(0, from - len), from);
907
+ let after = view.state.sliceDoc(
908
+ to,
909
+ Math.min(view.state.doc.length, to + len),
910
+ );
911
+ if (before === marker && after === marker) {
912
+ view.dispatch({
913
+ changes: { from: from - len, to: to + len, insert: selected },
914
+ selection: { anchor: from - len, head: to - len },
915
+ });
916
+ return true;
917
+ }
918
+
919
+ // Case 3: Wrap with markers
920
+ view.dispatch({
921
+ changes: { from, to, insert: marker + selected + marker },
922
+ selection: {
923
+ anchor: from + len,
924
+ head: to + len,
925
+ },
926
+ });
927
+ return true;
928
+ };
929
+ }
930
+
931
+ const markdownKeymap = keymap.of([
932
+ { key: 'Mod-b', run: wrapWith('**') },
933
+ { key: 'Mod-i', run: wrapWith('*') },
934
+ { key: 'Mod-`', run: wrapWith('`') },
935
+ ]);
936
+
937
+ // ── createEditorState factory ───────────────────────────────────────────────
938
+
939
+ export interface SelectionInfo {
940
+ hasSelection: boolean;
941
+ from: number;
942
+ to: number;
943
+ /** Which inline formats are active in the current selection */
944
+ formats: {
945
+ bold: boolean;
946
+ italic: boolean;
947
+ code: boolean;
948
+ strikethrough: boolean;
949
+ link: boolean;
950
+ };
951
+ }
952
+
953
+ function detectFormats(
954
+ state: EditorState,
955
+ from: number,
956
+ to: number,
957
+ ): SelectionInfo['formats'] {
958
+ let text = state.sliceDoc(from, to);
959
+ // Check if the selection (or surrounding context) contains these markers
960
+ let before = state.sliceDoc(Math.max(0, from - 3), from);
961
+ let after = state.sliceDoc(to, Math.min(state.doc.length, to + 3));
962
+ let expanded = before + text + after;
963
+
964
+ return {
965
+ bold:
966
+ (text.startsWith('**') && text.endsWith('**')) ||
967
+ (before.endsWith('**') && after.startsWith('**')),
968
+ italic:
969
+ ((text.startsWith('*') && text.endsWith('*')) ||
970
+ (before.endsWith('*') && after.startsWith('*'))) &&
971
+ !(
972
+ (text.startsWith('**') && text.endsWith('**')) ||
973
+ (before.endsWith('**') && after.startsWith('**'))
974
+ ),
975
+ code:
976
+ (text.startsWith('`') && text.endsWith('`')) ||
977
+ (before.endsWith('`') && after.startsWith('`')),
978
+ strikethrough:
979
+ (text.startsWith('~~') && text.endsWith('~~')) ||
980
+ (before.endsWith('~~') && after.startsWith('~~')),
981
+ link: expanded.includes(']('),
982
+ };
983
+ }
984
+
985
+ export interface CreateEditorStateOptions {
986
+ content: string;
987
+ onDocChange: (text: string) => void;
988
+ onCardTargetsChange: (targets: CardWidgetTarget[]) => void;
989
+ onOpenCardSearch: (pos: { from: number; to: number }) => void;
990
+ onSelectionChange?: (info: SelectionInfo) => void;
991
+ /** When false, all syntax markers are visible (source mode). Default true. */
992
+ livePreview?: boolean;
993
+ }
994
+
995
+ function createEditorState(options: CreateEditorStateOptions): EditorState {
996
+ let {
997
+ content,
998
+ onDocChange,
999
+ onCardTargetsChange,
1000
+ onOpenCardSearch,
1001
+ onSelectionChange,
1002
+ livePreview = true,
1003
+ } = options;
1004
+
1005
+ let decoField = createDecorationField(livePreview);
1006
+ let slashSource = createSlashCommandSource(onOpenCardSearch);
1007
+
1008
+ let extensions: Extension[] = [
1009
+ markdown({ base: markdownLanguage }),
1010
+ history(),
1011
+ keymap.of([...defaultKeymap, ...historyKeymap]),
1012
+ markdownKeymap,
1013
+ focusField,
1014
+ EditorView.focusChangeEffect.of((_state, focusing) =>
1015
+ focusChangeEffect.of(focusing),
1016
+ ),
1017
+ decoField,
1018
+ // Card widget target notifier is only needed in live preview mode
1019
+ // (source mode has no card widgets to track)
1020
+ ...(livePreview ? [createCardTargetNotifier(onCardTargetsChange)] : []),
1021
+ autocompletion({
1022
+ override: [slashSource],
1023
+ defaultKeymap: true,
1024
+ }),
1025
+ EditorView.updateListener.of((update: ViewUpdate) => {
1026
+ if (update.docChanged) {
1027
+ onDocChange(update.state.doc.toString());
1028
+ }
1029
+ if (onSelectionChange && (update.selectionSet || update.docChanged)) {
1030
+ let { from, to } = update.state.selection.main;
1031
+ let hasSelection = from !== to;
1032
+ onSelectionChange({
1033
+ hasSelection,
1034
+ from,
1035
+ to,
1036
+ formats: hasSelection
1037
+ ? detectFormats(update.state, from, to)
1038
+ : {
1039
+ bold: false,
1040
+ italic: false,
1041
+ code: false,
1042
+ strikethrough: false,
1043
+ link: false,
1044
+ },
1045
+ });
1046
+ }
1047
+ }),
1048
+ EditorView.lineWrapping,
1049
+ ];
1050
+
1051
+ return EditorState.create({
1052
+ doc: content,
1053
+ extensions,
1054
+ });
1055
+ }
1056
+
1057
+ // ── Exported context ────────────────────────────────────────────────────────
1058
+
1059
+ export interface CodeMirrorContext {
1060
+ EditorState: typeof EditorState;
1061
+ EditorView: typeof EditorView;
1062
+ createEditorState: typeof createEditorState;
1063
+ undo: typeof undo;
1064
+ redo: typeof redo;
1065
+ openCardSearchEffect: typeof openCardSearchEffect;
1066
+ focusChangeEffect: typeof focusChangeEffect;
1067
+ wrapWith: typeof wrapWith;
1068
+ }
1069
+
1070
+ const codemirrorContext: CodeMirrorContext = {
1071
+ EditorState,
1072
+ EditorView,
1073
+ createEditorState,
1074
+ undo,
1075
+ redo,
1076
+ openCardSearchEffect,
1077
+ focusChangeEffect,
1078
+ wrapWith,
1079
+ };
1080
+
1081
+ export default codemirrorContext;