@supersoniks/concorde 5.1.1 → 5.1.3

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 (494) hide show
  1. package/.agents/skills/concorde-docs/SKILL.md +153 -0
  2. package/.agents/skills/{concorde-component-docs/template.md → concorde-docs/templates/component.md} +6 -2
  3. package/.agents/skills/concorde-docs/templates/decorator.md +43 -0
  4. package/.agents/skills/concorde-docs/templates/guide.md +25 -0
  5. package/PLAN-DOCS-AGENTS.md +80 -0
  6. package/README.md +4 -4
  7. package/ai/README.md +29 -41
  8. package/ai/skills/concorde/SKILL.md +54 -324
  9. package/ai/skills/concorde/rules/composition.md +32 -0
  10. package/ai/skills/concorde/rules/data.md +47 -0
  11. package/ai/skills/concorde/rules/http.md +25 -0
  12. package/ai/skills/concorde/rules/lists-forms.md +35 -0
  13. package/ai/skills/concorde/rules/styling.md +46 -0
  14. package/ai/skills/concorde/rules/troubleshooting.md +45 -0
  15. package/build-infos.json +1 -1
  16. package/concorde-core.bundle.js +21 -21
  17. package/concorde-core.es.js +977 -980
  18. package/custom-elements-manifest.public.config.mjs +8 -0
  19. package/{.tmp-cem/custom-elements.json → custom-elements.json} +11758 -8904
  20. package/dist/concorde-core.bundle.js +21 -21
  21. package/dist/concorde-core.es.js +977 -980
  22. package/dist/docs-mock-api-sw.js +58 -223
  23. package/dist/docs-mock-api-sw.js.map +4 -4
  24. package/dist/img/concorde/plane_01.jpg +0 -0
  25. package/dist/img/concorde/plane_02.jpg +0 -0
  26. package/dist/img/concorde/plane_03.jpg +0 -0
  27. package/dist/img/concorde/plane_04.jpg +0 -0
  28. package/dist/img/concorde/plane_05.jpg +0 -0
  29. package/dist/img/concorde/plane_06.jpg +0 -0
  30. package/dist/img/concorde/plane_07.jpg +0 -0
  31. package/dist/img/concorde/plane_08.jpg +0 -0
  32. package/dist/img/concorde/plane_09.jpg +0 -0
  33. package/dist/img/concorde/plane_10.jpg +0 -0
  34. package/dist/img/concorde/plane_11.jpg +0 -0
  35. package/dist/img/concorde/plane_12.jpg +0 -0
  36. package/dist/img/concorde/plane_13.jpg +0 -0
  37. package/dist/img/og-concorde.jpg +0 -0
  38. package/dist/robots.txt +11 -10
  39. package/docs/.htaccess +82 -0
  40. package/docs/404.html +15 -0
  41. package/docs/404.md +5 -0
  42. package/docs/about.html +111 -0
  43. package/docs/about.md +22 -0
  44. package/docs/assets/{index-Bb-_LRyY.js → index-6sS76xWj.js} +2625 -3158
  45. package/docs/assets/index-DkdPbH0F.css +1 -0
  46. package/docs/core/components/functional/date/date.html +211 -0
  47. package/docs/core/components/functional/date/date.md +150 -0
  48. package/docs/core/components/functional/fetch/fetch.html +180 -0
  49. package/docs/core/components/functional/fetch/fetch.md +108 -0
  50. package/docs/core/components/functional/if/if.html +65 -0
  51. package/docs/core/components/functional/if/if.md +34 -0
  52. package/docs/core/components/functional/jsonata/jsonata.html +110 -0
  53. package/docs/core/components/functional/jsonata/jsonata.md +61 -0
  54. package/docs/core/components/functional/list/list.html +200 -0
  55. package/docs/core/components/functional/list/list.md +125 -0
  56. package/docs/core/components/functional/mix/mix.html +78 -0
  57. package/docs/core/components/functional/mix/mix.md +46 -0
  58. package/docs/core/components/functional/queue/queue.html +155 -0
  59. package/docs/core/components/functional/queue/queue.md +51 -0
  60. package/docs/core/components/functional/router/router.html +154 -0
  61. package/docs/core/components/functional/router/router.md +93 -0
  62. package/docs/core/components/functional/sdui/sdui-extension-points.html +127 -0
  63. package/docs/core/components/functional/sdui/sdui-extension-points.md +94 -0
  64. package/docs/core/components/functional/sdui/sdui.html +397 -0
  65. package/docs/core/components/functional/sdui/sdui.md +307 -0
  66. package/docs/core/components/functional/states/states.html +141 -0
  67. package/docs/core/components/functional/states/states.md +112 -0
  68. package/docs/core/components/functional/submit/submit.html +178 -0
  69. package/docs/core/components/functional/submit/submit.md +106 -0
  70. package/docs/core/components/functional/subscriber/subscriber.html +68 -0
  71. package/docs/core/components/functional/subscriber/subscriber.md +91 -0
  72. package/docs/core/components/functional/translation/translation.html +60 -0
  73. package/docs/core/components/functional/translation/translation.md +38 -0
  74. package/docs/core/components/functional/value/value.html +81 -0
  75. package/docs/core/components/functional/value/value.md +47 -0
  76. package/docs/core/components/ui/alert/alert.html +201 -0
  77. package/docs/core/components/ui/alert/alert.md +186 -0
  78. package/docs/core/components/ui/alert-messages/alert-messages.html +132 -0
  79. package/docs/core/components/ui/alert-messages/alert-messages.md +85 -0
  80. package/docs/core/components/ui/badge/badge.html +197 -0
  81. package/docs/core/components/ui/badge/badge.md +181 -0
  82. package/docs/core/components/ui/button/button.html +309 -0
  83. package/docs/core/components/ui/button/button.md +216 -0
  84. package/docs/core/components/ui/captcha/captcha.html +80 -0
  85. package/docs/core/components/ui/captcha/captcha.md +56 -0
  86. package/docs/core/components/ui/card/card.html +254 -0
  87. package/docs/core/components/ui/card/card.md +215 -0
  88. package/docs/core/components/ui/divider/divider.html +144 -0
  89. package/docs/core/components/ui/divider/divider.md +126 -0
  90. package/docs/core/components/ui/form/checkbox/checkbox.html +200 -0
  91. package/docs/core/components/ui/form/checkbox/checkbox.md +125 -0
  92. package/docs/core/components/ui/form/fieldset/fieldset.html +238 -0
  93. package/docs/core/components/ui/form/fieldset/fieldset.md +161 -0
  94. package/docs/core/components/ui/form/form-actions/form-actions.html +122 -0
  95. package/docs/core/components/ui/form/form-actions/form-actions.md +98 -0
  96. package/docs/core/components/ui/form/form-layout/form-layout.html +115 -0
  97. package/docs/core/components/ui/form/form-layout/form-layout.md +109 -0
  98. package/docs/core/components/ui/form/input/input.html +235 -0
  99. package/docs/core/components/ui/form/input/input.md +142 -0
  100. package/docs/core/components/ui/form/radio/radio.html +144 -0
  101. package/docs/core/components/ui/form/radio/radio.md +78 -0
  102. package/docs/core/components/ui/form/select/select.html +178 -0
  103. package/docs/core/components/ui/form/select/select.md +86 -0
  104. package/docs/core/components/ui/form/switch/switch.html +146 -0
  105. package/docs/core/components/ui/form/switch/switch.md +80 -0
  106. package/docs/core/components/ui/form/textarea/textarea.html +162 -0
  107. package/docs/core/components/ui/form/textarea/textarea.md +82 -0
  108. package/docs/core/components/ui/group/group.html +113 -0
  109. package/docs/core/components/ui/group/group.md +77 -0
  110. package/docs/core/components/ui/icon/icon.html +223 -0
  111. package/docs/core/components/ui/icon/icon.md +214 -0
  112. package/docs/core/components/ui/image/image.html +194 -0
  113. package/docs/core/components/ui/image/image.md +167 -0
  114. package/docs/core/components/ui/link/link.html +101 -0
  115. package/docs/core/components/ui/link/link.md +81 -0
  116. package/docs/core/components/ui/loader/loader.html +114 -0
  117. package/docs/core/components/ui/loader/loader.md +87 -0
  118. package/docs/core/components/ui/menu/menu.html +395 -0
  119. package/docs/core/components/ui/menu/menu.md +370 -0
  120. package/docs/core/components/ui/modal/modal.html +324 -0
  121. package/docs/core/components/ui/modal/modal.md +211 -0
  122. package/docs/core/components/ui/pop/pop.html +250 -0
  123. package/docs/core/components/ui/pop/pop.md +216 -0
  124. package/docs/core/components/ui/progress/progress.html +132 -0
  125. package/docs/core/components/ui/progress/progress.md +109 -0
  126. package/docs/core/components/ui/table/table.html +333 -0
  127. package/docs/core/components/ui/table/table.md +267 -0
  128. package/docs/core/components/ui/theme/theme.html +116 -0
  129. package/docs/core/components/ui/theme/theme.md +97 -0
  130. package/docs/core/components/ui/toast/toast.html +185 -0
  131. package/docs/core/components/ui/toast/toast.md +147 -0
  132. package/docs/core/components/ui/tooltip/tooltip.html +112 -0
  133. package/docs/core/components/ui/tooltip/tooltip.md +89 -0
  134. package/docs/custom-elements.json +16559 -0
  135. package/docs/docs/decorators/ancestor-attribute.html +71 -0
  136. package/docs/docs/decorators/ancestor-attribute.md +59 -0
  137. package/docs/docs/decorators/auto-subscribe.html +61 -0
  138. package/docs/docs/decorators/auto-subscribe.md +40 -0
  139. package/docs/docs/decorators/bind.html +87 -0
  140. package/docs/docs/decorators/bind.md +76 -0
  141. package/docs/docs/decorators/get.html +166 -0
  142. package/docs/docs/decorators/get.md +160 -0
  143. package/docs/docs/decorators/handle.html +139 -0
  144. package/docs/docs/decorators/handle.md +119 -0
  145. package/docs/docs/decorators/on-assign.html +72 -0
  146. package/docs/docs/decorators/on-assign.md +63 -0
  147. package/docs/docs/decorators/patch.html +76 -0
  148. package/docs/docs/decorators/patch.md +44 -0
  149. package/docs/docs/decorators/post.html +150 -0
  150. package/docs/docs/decorators/post.md +134 -0
  151. package/docs/docs/decorators/publish.html +74 -0
  152. package/docs/docs/decorators/publish.md +56 -0
  153. package/docs/docs/decorators/put.html +83 -0
  154. package/docs/docs/decorators/put.md +51 -0
  155. package/docs/docs/decorators/subscribe.html +91 -0
  156. package/docs/docs/decorators/subscribe.md +87 -0
  157. package/docs/docs/decorators/wait-for-ancestors.html +82 -0
  158. package/docs/docs/decorators/wait-for-ancestors.md +76 -0
  159. package/docs/docs/directives/sub.html +79 -0
  160. package/docs/docs/directives/sub.md +75 -0
  161. package/docs/docs/directives/t.html +91 -0
  162. package/docs/docs/directives/t.md +73 -0
  163. package/docs/docs/getting-started/ai-agents.html +130 -0
  164. package/docs/docs/getting-started/ai-agents.md +50 -0
  165. package/docs/docs/getting-started/components.html +27 -0
  166. package/docs/docs/getting-started/create-a-component.html +108 -0
  167. package/{src/docs/_getting-started → docs/docs/getting-started}/create-a-component.md +3 -6
  168. package/docs/docs/getting-started/dataFlow.html +174 -0
  169. package/{src/docs/_core-concept → docs/docs/getting-started}/dataFlow.md +18 -19
  170. package/docs/docs/getting-started/installation.html +69 -0
  171. package/docs/docs/getting-started/installation.md +36 -0
  172. package/docs/docs/getting-started/my-first-component.html +180 -0
  173. package/{src/docs/_getting-started → docs/docs/getting-started}/my-first-component.md +5 -14
  174. package/docs/docs/getting-started/start.html +47 -0
  175. package/{src/docs/_getting-started → docs/docs/getting-started}/start.md +1 -13
  176. package/docs/docs/getting-started/theming.html +334 -0
  177. package/docs/docs/index.html +99 -0
  178. package/docs/docs/misc/api-configuration.html +149 -0
  179. package/{src/docs/_misc → docs/docs/misc}/api-configuration.md +10 -12
  180. package/docs/docs/misc/dataProviderKey.html +136 -0
  181. package/{src/docs/_misc → docs/docs/misc}/dataProviderKey.md +4 -4
  182. package/docs/docs/misc/docs-mock-api.html +155 -0
  183. package/{src/docs/_misc → docs/docs/misc}/docs-mock-api.md +12 -13
  184. package/docs/docs/misc/dynamic-path.html +181 -0
  185. package/{src/docs/_misc → docs/docs/misc}/dynamic-path.md +8 -8
  186. package/docs/docs/misc/endpoint.html +51 -0
  187. package/{src/docs/_misc → docs/docs/misc}/endpoint.md +8 -8
  188. package/docs/docs/misc/html-integration.html +45 -0
  189. package/{src/docs/_misc → docs/docs/misc}/html-integration.md +4 -5
  190. package/docs/docs-mock-api-sw.js +58 -223
  191. package/docs/docs-mock-api-sw.js.map +4 -4
  192. package/docs/hubs/decorators.html +438 -0
  193. package/docs/hubs/form-components.html +404 -0
  194. package/docs/hubs/remote-data.html +367 -0
  195. package/docs/img/archive/concorde-001-2cv.webp +0 -0
  196. package/docs/img/archive/concorde-red-arrows-2002-poster.jpg +0 -0
  197. package/docs/img/archive/concorde-red-arrows-2002.webm +0 -0
  198. package/docs/img/archive/credits.json +28 -0
  199. package/docs/img/concorde/plane_01.jpg +0 -0
  200. package/docs/img/concorde/plane_02.jpg +0 -0
  201. package/docs/img/concorde/plane_03.jpg +0 -0
  202. package/docs/img/concorde/plane_04.jpg +0 -0
  203. package/docs/img/concorde/plane_05.jpg +0 -0
  204. package/docs/img/concorde/plane_06.jpg +0 -0
  205. package/docs/img/concorde/plane_07.jpg +0 -0
  206. package/docs/img/concorde/plane_08.jpg +0 -0
  207. package/docs/img/concorde/plane_09.jpg +0 -0
  208. package/docs/img/concorde/plane_10.jpg +0 -0
  209. package/docs/img/concorde/plane_11.jpg +0 -0
  210. package/docs/img/concorde/plane_12.jpg +0 -0
  211. package/docs/img/concorde/plane_13.jpg +0 -0
  212. package/docs/img/og-concorde.jpg +0 -0
  213. package/docs/index.html +184 -68
  214. package/docs/index.md +22 -0
  215. package/docs/llms-full.txt +5779 -0
  216. package/docs/llms.txt +108 -0
  217. package/docs/privacy.html +122 -0
  218. package/docs/privacy.md +32 -0
  219. package/docs/robots.txt +11 -10
  220. package/docs/sitemap.xml +243 -0
  221. package/docs/src/core/components/functional/date/date.md +150 -0
  222. package/docs/src/core/components/functional/fetch/fetch.md +108 -0
  223. package/docs/src/core/components/functional/if/if.md +34 -0
  224. package/docs/src/core/components/functional/jsonata/jsonata.md +61 -0
  225. package/docs/src/core/components/functional/list/list.md +125 -0
  226. package/docs/src/core/components/functional/mix/mix.md +46 -0
  227. package/docs/src/core/components/functional/queue/queue.md +51 -0
  228. package/docs/src/core/components/functional/router/router.md +93 -0
  229. package/docs/src/core/components/functional/sdui/component-catalog.gaps.json +511 -0
  230. package/docs/src/core/components/functional/sdui/component-catalog.json +3103 -0
  231. package/docs/src/core/components/functional/sdui/default-library.json +108 -0
  232. package/docs/src/core/components/functional/sdui/example.json +32 -0
  233. package/docs/src/core/components/functional/sdui/sdui-extension-points.md +94 -0
  234. package/docs/src/core/components/functional/sdui/sdui.md +307 -0
  235. package/docs/src/core/components/functional/states/states.md +112 -0
  236. package/docs/src/core/components/functional/submit/submit.md +106 -0
  237. package/docs/src/core/components/functional/subscriber/subscriber.md +91 -0
  238. package/docs/src/core/components/functional/translation/translation.md +38 -0
  239. package/docs/src/core/components/functional/value/value.md +47 -0
  240. package/docs/src/core/components/ui/alert/alert.md +186 -0
  241. package/docs/src/core/components/ui/alert-messages/alert-messages.md +85 -0
  242. package/docs/src/core/components/ui/badge/badge.md +181 -0
  243. package/docs/src/core/components/ui/button/button.md +216 -0
  244. package/docs/src/core/components/ui/captcha/captcha.md +56 -0
  245. package/docs/src/core/components/ui/card/card.md +215 -0
  246. package/docs/src/core/components/ui/divider/divider.md +126 -0
  247. package/docs/src/core/components/ui/form/checkbox/checkbox.md +125 -0
  248. package/docs/src/core/components/ui/form/fieldset/fieldset.md +161 -0
  249. package/docs/src/core/components/ui/form/form-actions/form-actions.md +98 -0
  250. package/docs/src/core/components/ui/form/form-layout/form-layout.md +109 -0
  251. package/docs/src/core/components/ui/form/input/input.md +142 -0
  252. package/docs/src/core/components/ui/form/radio/radio.md +78 -0
  253. package/docs/src/core/components/ui/form/select/select.md +86 -0
  254. package/docs/src/core/components/ui/form/switch/switch.md +80 -0
  255. package/docs/src/core/components/ui/form/textarea/textarea.md +82 -0
  256. package/docs/src/core/components/ui/group/group.md +77 -0
  257. package/docs/src/core/components/ui/icon/icon.md +214 -0
  258. package/docs/src/core/components/ui/icon/icons.json +1 -0
  259. package/docs/src/core/components/ui/image/image.md +167 -0
  260. package/docs/src/core/components/ui/link/link.md +81 -0
  261. package/docs/src/core/components/ui/loader/loader.md +87 -0
  262. package/docs/src/core/components/ui/menu/menu.md +370 -0
  263. package/docs/src/core/components/ui/modal/modal.md +211 -0
  264. package/docs/src/core/components/ui/pop/pop.md +216 -0
  265. package/docs/src/core/components/ui/progress/progress.md +109 -0
  266. package/docs/src/core/components/ui/table/table.md +267 -0
  267. package/docs/src/core/components/ui/theme/theme.md +97 -0
  268. package/docs/src/core/components/ui/toast/toast.md +147 -0
  269. package/docs/src/core/components/ui/tooltip/tooltip.md +89 -0
  270. package/docs/src/docs/decorators/ancestor-attribute.md +59 -0
  271. package/docs/src/docs/decorators/auto-subscribe.md +40 -0
  272. package/docs/src/docs/decorators/bind.md +76 -0
  273. package/docs/src/docs/decorators/get.md +160 -0
  274. package/docs/src/docs/decorators/handle.md +119 -0
  275. package/docs/src/docs/decorators/on-assign.md +63 -0
  276. package/docs/src/docs/decorators/patch.md +44 -0
  277. package/docs/src/docs/decorators/post.md +134 -0
  278. package/docs/src/docs/decorators/publish.md +56 -0
  279. package/docs/src/docs/decorators/put.md +51 -0
  280. package/docs/src/docs/decorators/subscribe.md +87 -0
  281. package/docs/src/docs/decorators/wait-for-ancestors.md +76 -0
  282. package/docs/src/docs/directives/sub.md +75 -0
  283. package/docs/src/docs/directives/t.md +73 -0
  284. package/docs/src/docs/getting-started/ai-agents.md +50 -0
  285. package/docs/src/docs/getting-started/components.md +5 -0
  286. package/docs/src/docs/getting-started/create-a-component.md +136 -0
  287. package/docs/src/docs/getting-started/dataFlow.md +87 -0
  288. package/docs/src/docs/getting-started/installation.md +36 -0
  289. package/docs/src/docs/getting-started/my-first-component.md +227 -0
  290. package/docs/src/docs/getting-started/start.md +35 -0
  291. package/docs/src/docs/getting-started/theming.md +253 -0
  292. package/docs/src/docs/misc/api-configuration.md +79 -0
  293. package/docs/src/docs/misc/dataProviderKey.md +168 -0
  294. package/docs/src/docs/misc/docs-mock-api.md +62 -0
  295. package/docs/src/docs/misc/dynamic-path.md +71 -0
  296. package/docs/src/docs/misc/endpoint.md +45 -0
  297. package/docs/src/docs/misc/html-integration.md +14 -0
  298. package/docs/src/docs/search/docs-search.json +10332 -0
  299. package/docs/src/tag-list.json +1 -0
  300. package/docs/src/tsconfig-model.json +23 -0
  301. package/docs/src/tsconfig.json +1359 -0
  302. package/index.html +157 -5
  303. package/package.json +8 -4
  304. package/public/docs-mock-api-sw.js +58 -223
  305. package/public/docs-mock-api-sw.js.map +4 -4
  306. package/public/img/concorde/plane_01.jpg +0 -0
  307. package/public/img/concorde/plane_02.jpg +0 -0
  308. package/public/img/concorde/plane_03.jpg +0 -0
  309. package/public/img/concorde/plane_04.jpg +0 -0
  310. package/public/img/concorde/plane_05.jpg +0 -0
  311. package/public/img/concorde/plane_06.jpg +0 -0
  312. package/public/img/concorde/plane_07.jpg +0 -0
  313. package/public/img/concorde/plane_08.jpg +0 -0
  314. package/public/img/concorde/plane_09.jpg +0 -0
  315. package/public/img/concorde/plane_10.jpg +0 -0
  316. package/public/img/concorde/plane_11.jpg +0 -0
  317. package/public/img/concorde/plane_12.jpg +0 -0
  318. package/public/img/concorde/plane_13.jpg +0 -0
  319. package/public/img/og-concorde.jpg +0 -0
  320. package/public/robots.txt +11 -10
  321. package/scripts/ai-init.mjs +104 -379
  322. package/scripts/ai-init.test.mjs +81 -239
  323. package/scripts/docs-markdown-vite-plugin.ts +43 -0
  324. package/scripts/docs-public-url.mjs +56 -0
  325. package/scripts/docs.htaccess +82 -0
  326. package/scripts/generate-cem.mjs +244 -0
  327. package/scripts/generate-cem.test.mjs +122 -0
  328. package/scripts/generate-crawl-docs.mjs +233 -118
  329. package/scripts/generate-crawl-docs.test.mjs +124 -0
  330. package/scripts/generate-sdui-catalog.mjs +11 -10
  331. package/scripts/post-build-docs.js +37 -50
  332. package/scripts/pre-publish.mjs +2 -1
  333. package/scripts/site-pages.mjs +212 -0
  334. package/scripts/site-pages.test.mjs +116 -0
  335. package/site-pages/about.md +22 -0
  336. package/site-pages/privacy.md +32 -0
  337. package/src/core/components/functional/date/date.md +91 -231
  338. package/src/core/components/functional/fetch/fetch.md +66 -83
  339. package/src/core/components/functional/if/if.md +28 -3
  340. package/src/core/components/functional/jsonata/jsonata.md +42 -37
  341. package/src/core/components/functional/list/list.md +103 -43
  342. package/src/core/components/functional/mix/mix.md +31 -26
  343. package/src/core/components/functional/queue/queue.demo.ts +10 -7
  344. package/src/core/components/functional/queue/queue.md +40 -61
  345. package/src/core/components/functional/router/router.demo.ts +16 -16
  346. package/src/core/components/functional/router/router.md +64 -65
  347. package/src/core/components/functional/sdui/component-catalog.gaps.json +1 -1
  348. package/src/core/components/functional/sdui/component-catalog.json +1 -1
  349. package/src/core/components/functional/sdui/example.json +19 -86
  350. package/src/core/components/functional/sdui/sdui-extension-points.md +1 -1
  351. package/src/core/components/functional/sdui/sdui.md +187 -358
  352. package/src/core/components/functional/states/states.demo.ts +21 -22
  353. package/src/core/components/functional/states/states.md +86 -61
  354. package/src/core/components/functional/states/states.ts +1 -1
  355. package/src/core/components/functional/submit/submit.md +64 -72
  356. package/src/core/components/functional/translation/translation.md +38 -0
  357. package/src/core/components/functional/value/value.md +34 -22
  358. package/src/core/components/ui/alert/alert.md +48 -58
  359. package/src/core/components/ui/badge/badge.md +27 -34
  360. package/src/core/components/ui/button/button.md +139 -106
  361. package/src/core/components/ui/captcha/captcha.md +17 -32
  362. package/src/core/components/ui/card/card.md +6 -6
  363. package/src/core/components/ui/divider/divider.md +8 -11
  364. package/src/core/components/ui/form/checkbox/checkbox.md +90 -42
  365. package/src/core/components/ui/form/fieldset/fieldset.md +31 -75
  366. package/src/core/components/ui/form/form-actions/form-actions.md +14 -16
  367. package/src/core/components/ui/form/form-layout/form-layout.md +19 -29
  368. package/src/core/components/ui/form/input/input.md +95 -95
  369. package/src/core/components/ui/form/radio/radio.md +55 -34
  370. package/src/core/components/ui/form/select/select.md +60 -45
  371. package/src/core/components/ui/form/switch/switch.md +57 -34
  372. package/src/core/components/ui/form/textarea/textarea.md +55 -38
  373. package/src/core/components/ui/group/group.md +35 -33
  374. package/src/core/components/ui/icon/icon.md +4 -4
  375. package/src/core/components/ui/image/image.md +41 -107
  376. package/src/core/components/ui/link/link.md +6 -6
  377. package/src/core/components/ui/loader/loader.md +30 -55
  378. package/src/core/components/ui/menu/menu.md +27 -27
  379. package/src/core/components/ui/modal/modal.md +72 -96
  380. package/src/core/components/ui/pop/pop.md +80 -158
  381. package/src/core/components/ui/progress/progress.md +2 -2
  382. package/src/core/components/ui/table/table.md +91 -255
  383. package/src/core/components/ui/theme/theme.md +11 -36
  384. package/src/core/components/ui/toast/toast.md +48 -117
  385. package/src/core/components/ui/tooltip/tooltip.md +27 -62
  386. package/src/core/decorators/subscriber/bind.ts +9 -14
  387. package/src/core/utils/LocationHandler.spec.ts +80 -0
  388. package/src/core/utils/LocationHandler.ts +5 -9
  389. package/src/docs/components/docs-demo-sources.ts +55 -140
  390. package/src/docs/components/docs-lit-demo.ts +1 -3
  391. package/src/docs/components/docs-source-link.ts +0 -82
  392. package/src/docs/decorators/ancestor-attribute.md +59 -0
  393. package/src/docs/decorators/auto-subscribe.md +40 -0
  394. package/src/docs/decorators/bind.md +76 -0
  395. package/src/docs/decorators/get.md +160 -0
  396. package/src/docs/decorators/handle.md +119 -0
  397. package/src/docs/decorators/on-assign.md +63 -0
  398. package/src/docs/decorators/patch.md +44 -0
  399. package/src/docs/decorators/post.md +134 -0
  400. package/src/docs/decorators/publish.md +56 -0
  401. package/src/docs/decorators/put.md +51 -0
  402. package/src/docs/decorators/subscribe.md +87 -0
  403. package/src/docs/decorators/wait-for-ancestors.md +76 -0
  404. package/src/docs/directives/sub.md +75 -0
  405. package/src/docs/directives/t.md +73 -0
  406. package/src/docs/docs-location.spec.ts +56 -0
  407. package/src/docs/docs-location.ts +133 -32
  408. package/src/docs/docs.ts +1 -2
  409. package/src/docs/example/decorators-demo-bind-demos.ts +83 -135
  410. package/src/docs/example/decorators-demo-geo.ts +30 -19
  411. package/src/docs/example/decorators-demo-post.ts +88 -186
  412. package/src/docs/example/decorators-demo-subscribe-publish-get-demos.ts +165 -268
  413. package/src/docs/example/decorators-demo.ts +85 -98
  414. package/src/docs/example/docs-api-config-demos.ts +19 -20
  415. package/src/docs/example/docs-flight-demos.ts +147 -0
  416. package/src/docs/example/docs-jsonata-demos.ts +52 -52
  417. package/src/docs/example/docs-list-demos.ts +43 -123
  418. package/src/docs/example/docs-provider-keys.ts +21 -28
  419. package/src/docs/example/docs-queue-demos.ts +37 -77
  420. package/src/docs/example/docs-router-demos.ts +20 -25
  421. package/src/docs/example/docs-submit-demos.ts +48 -48
  422. package/src/docs/example/docs-toggle-demos.ts +4 -3
  423. package/src/docs/getting-started/ai-agents.md +50 -0
  424. package/src/docs/getting-started/components.md +5 -0
  425. package/src/docs/getting-started/create-a-component.md +136 -0
  426. package/src/docs/getting-started/dataFlow.md +87 -0
  427. package/src/docs/getting-started/installation.md +36 -0
  428. package/src/docs/getting-started/my-first-component.md +227 -0
  429. package/src/docs/getting-started/start.md +35 -0
  430. package/src/docs/getting-started/theming.md +253 -0
  431. package/src/docs/header/header.ts +11 -6
  432. package/src/docs/home/catalog.ts +1 -1
  433. package/src/docs/home/home.ts +20 -11
  434. package/src/docs/layout.ts +12 -13
  435. package/src/docs/misc/api-configuration.md +79 -0
  436. package/src/docs/misc/dataProviderKey.md +168 -0
  437. package/src/docs/misc/docs-mock-api.md +62 -0
  438. package/src/docs/misc/dynamic-path.md +71 -0
  439. package/src/docs/misc/endpoint.md +45 -0
  440. package/src/docs/misc/html-integration.md +14 -0
  441. package/src/docs/mock-api/api-config-mock.ts +5 -0
  442. package/src/docs/mock-api/fixtures.ts +0 -278
  443. package/src/docs/mock-api/flights.ts +89 -0
  444. package/src/docs/mock-api/router.ts +3 -4
  445. package/src/docs/mock-api/urls.ts +1 -2
  446. package/src/docs/navigation/navigation.ts +82 -103
  447. package/src/docs/navigation/toc.ts +7 -4
  448. package/src/docs/search/docs-search.json +2804 -5024
  449. package/src/docs/search/markdown-renderer.ts +31 -8
  450. package/src/docs/search/page.ts +9 -6
  451. package/src/docs/search/search.ts +154 -122
  452. package/src/docs/tailwind/css/docs/content.css +4 -5
  453. package/src/tsconfig.json +11 -5
  454. package/src/tsconfig.tsbuildinfo +1 -1
  455. package/vite.config.mts +11 -2
  456. package/.agents/skills/concorde-component-docs/SKILL.md +0 -194
  457. package/ai/AGENTS.md +0 -56
  458. package/ai/cursor/rules/concorde-menu.mdc +0 -15
  459. package/ai/cursor/rules/concorde-scope.mdc +0 -14
  460. package/ai/cursor/rules/concorde-theme.mdc +0 -13
  461. package/ai/cursor/rules/concorde.mdc +0 -66
  462. package/ai/jetbrains/rules/concorde.md +0 -53
  463. package/ai/skills/concorde-get-set-dp/SKILL.md +0 -194
  464. package/ai/skills/concorde-imports/SKILL.md +0 -78
  465. package/ai/skills/concorde-menu/SKILL.md +0 -74
  466. package/ai/skills/concorde-scope/SKILL.md +0 -70
  467. package/ai/skills/concorde-theme/SKILL.md +0 -57
  468. package/docs/assets/index-CD4WyL6o.css +0 -1
  469. package/src/core/components/ui/form/input-autocomplete/input-autocomplete.md +0 -29
  470. package/src/docs/_core-concept/overview.md +0 -57
  471. package/src/docs/_core-concept/subscriber.md +0 -75
  472. package/src/docs/_decorators/ancestor-attribute.md +0 -128
  473. package/src/docs/_decorators/auto-subscribe.md +0 -202
  474. package/src/docs/_decorators/bind.md +0 -167
  475. package/src/docs/_decorators/get.md +0 -162
  476. package/src/docs/_decorators/handle.md +0 -175
  477. package/src/docs/_decorators/on-assign.md +0 -390
  478. package/src/docs/_decorators/patch.md +0 -70
  479. package/src/docs/_decorators/post.md +0 -146
  480. package/src/docs/_decorators/publish.md +0 -55
  481. package/src/docs/_decorators/put.md +0 -70
  482. package/src/docs/_decorators/subscribe.md +0 -100
  483. package/src/docs/_decorators/wait-for-ancestors.md +0 -163
  484. package/src/docs/_directives/sub.md +0 -91
  485. package/src/docs/_getting-started/ai-agents.md +0 -76
  486. package/src/docs/_getting-started/concorde-manual-install.md +0 -133
  487. package/src/docs/_getting-started/concorde-outside.md +0 -33
  488. package/src/docs/_getting-started/my-first-subscriber.md +0 -120
  489. package/src/docs/_getting-started/pubsub.md +0 -37
  490. package/src/docs/_misc/formelement-subscriber-removal.md +0 -115
  491. package/src/docs/example/docs-input-autocomplete-demos.ts +0 -110
  492. package/src/docs/example/docs-joke-demos.ts +0 -297
  493. /package/{src/docs/_getting-started → docs/docs/getting-started}/components.md +0 -0
  494. /package/{src/docs/_getting-started → docs/docs/getting-started}/theming.md +0 -0
@@ -0,0 +1,244 @@
1
+ /**
2
+ * Publishes the Custom Elements Manifest (custom-elements.json) at the package
3
+ * root: the standard machine-readable API of every sonic-* element, for IDEs
4
+ * and coding agents.
5
+ *
6
+ * Starts from the raw analyzer output and:
7
+ * - fills `tagName` (components use `@customElement(tagName)` with a constant
8
+ * the analyzer does not resolve);
9
+ * - expands string-literal union aliases (`ButtonType` → `"default" | …`) so
10
+ * allowed values are visible;
11
+ * - keeps custom elements and their public API only.
12
+ */
13
+ import fs from "fs";
14
+ import path from "path";
15
+ import { fileURLToPath } from "url";
16
+ import { extractTagNameFromSource, runCem } from "./generate-sdui-catalog.mjs";
17
+
18
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
19
+ const ROOT = path.resolve(__dirname, "..");
20
+ export const CEM_OUT = path.join(ROOT, "custom-elements.json");
21
+ const CEM_CONFIG = path.join(ROOT, "custom-elements-manifest.public.config.mjs");
22
+ const CEM_RAW = path.join(ROOT, ".tmp-cem-public", "custom-elements.json");
23
+
24
+ const LIFECYCLE = new Set([
25
+ "render",
26
+ "connectedCallback",
27
+ "disconnectedCallback",
28
+ "attributeChangedCallback",
29
+ "createRenderRoot",
30
+ "firstUpdated",
31
+ "updated",
32
+ "willUpdate",
33
+ "shouldUpdate",
34
+ "update",
35
+ "getUpdateComplete",
36
+ ]);
37
+
38
+ /**
39
+ * `export type X = "a" | "b"` aliases made only of string literals.
40
+ * A name defined twice with different values is left out.
41
+ * @param {string[]} sources TypeScript source texts
42
+ * @returns {Map<string, string>} alias name → `"a" | "b"`
43
+ */
44
+ export function collectLiteralUnions(sources) {
45
+ const unions = new Map();
46
+ const conflicts = new Set();
47
+ const re = /export\s+type\s+([A-Z]\w*)\s*=\s*([^;]+);/g;
48
+ for (const src of sources) {
49
+ for (const [, name, body] of src.matchAll(re)) {
50
+ const parts = body
51
+ .split("|")
52
+ .map((p) => p.trim())
53
+ .filter(Boolean);
54
+ if (!parts.length || !parts.every((p) => /^(["'])[^"']*\1$/.test(p))) continue;
55
+ const text = parts.map((p) => `"${p.slice(1, -1)}"`).join(" | ");
56
+ if (unions.has(name) && unions.get(name) !== text) conflicts.add(name);
57
+ unions.set(name, text);
58
+ }
59
+ }
60
+ for (const name of conflicts) unions.delete(name);
61
+ return unions;
62
+ }
63
+
64
+ /** Replace alias identifiers in a type text by their literal union. */
65
+ export function expandType(text, unions) {
66
+ if (!text) return text;
67
+ return text
68
+ .replace(/\b[A-Z]\w*\b/g, (id) => unions.get(id) ?? id)
69
+ .replace(/\s+/g, " ")
70
+ .replace(/^\|\s*/, "")
71
+ .trim();
72
+ }
73
+
74
+ /** Names declared with Lit `@property(…)` (fields and accessors) in a source. */
75
+ export function collectLitProperties(source) {
76
+ const names = new Set();
77
+ const re =
78
+ /@property\((?:[^()]|\([^()]*\))*\)\s*(?:\/\*[\s\S]*?\*\/\s*|\/\/[^\n]*\n\s*)*(?:(?:declare|readonly|public|override|accessor)\s+)*(?:(?:get|set)\s+)?(\w+)/g;
79
+ for (const [, name] of source.matchAll(re)) names.add(name);
80
+ return names;
81
+ }
82
+
83
+ function withType(entry, unions) {
84
+ if (!entry?.type?.text) return entry;
85
+ return { ...entry, type: { ...entry.type, text: expandType(entry.type.text, unions) } };
86
+ }
87
+
88
+ /**
89
+ * Public API: Lit properties (with or without attribute) and documented
90
+ * public methods. Undocumented helpers that merely lack `private` are dropped.
91
+ */
92
+ function isPublicMember(member, isLitProperty) {
93
+ if (member.static) return false;
94
+ if (member.privacy === "private" || member.privacy === "protected") return false;
95
+ if (member.name.startsWith("_") || member.name.startsWith("#")) return false;
96
+ if (member.kind === "field") return Boolean(member.attribute) || isLitProperty(member);
97
+ if (member.kind === "method") return !LIFECYCLE.has(member.name) && Boolean(member.description);
98
+ return false;
99
+ }
100
+
101
+ /**
102
+ * @param {object} raw analyzer manifest
103
+ * @param {{
104
+ * resolveTagName: (modulePath: string) => string | undefined,
105
+ * unions: Map<string, string>,
106
+ * litProperties: (modulePath: string) => Set<string>,
107
+ * exclude?: (modulePath: string) => boolean,
108
+ * }} options
109
+ */
110
+ export function buildManifest(raw, { resolveTagName, unions, litProperties, exclude = () => false }) {
111
+ const byModule = new Map((raw.modules || []).map((m) => [m.path, m]));
112
+ /** Mixin declaration for `{ name, module | package }` (package paths map to src/). */
113
+ const resolveMixin = (ref) => {
114
+ const modulePath =
115
+ ref.module ??
116
+ (ref.package?.startsWith("@supersoniks/concorde/")
117
+ ? `src/${ref.package.slice("@supersoniks/concorde/".length)}.ts`
118
+ : undefined);
119
+ const mod = modulePath && byModule.get(modulePath);
120
+ const decl = mod?.declarations?.find((d) => d.kind === "mixin");
121
+ return decl ? { decl, modulePath, name: ref.name } : undefined;
122
+ };
123
+ /** Own entries first, then each mixin's, skipping names already present. */
124
+ const withMixins = (d, field) => {
125
+ const out = [...(d[field] || [])];
126
+ const seen = new Set(out.map((e) => e.name));
127
+ for (const ref of d.mixins || []) {
128
+ const mixin = resolveMixin(ref);
129
+ for (const entry of mixin?.decl[field] || []) {
130
+ if (seen.has(entry.name)) continue;
131
+ seen.add(entry.name);
132
+ out.push({ ...entry, inheritedFrom: { name: mixin.name, module: mixin.modulePath } });
133
+ }
134
+ }
135
+ return out;
136
+ };
137
+ const modules = [];
138
+ for (const mod of raw.modules || []) {
139
+ if (exclude(mod.path)) continue;
140
+ const defined = new Set(
141
+ (mod.exports || [])
142
+ .filter((e) => e.kind === "custom-element-definition")
143
+ .map((e) => e.declaration?.name),
144
+ );
145
+ const elements = (mod.declarations || []).filter(
146
+ (d) => d.kind === "class" && (d.customElement || defined.has(d.name)),
147
+ );
148
+ const declarations = [];
149
+ for (const element of elements) {
150
+ const tagName = element.tagName || resolveTagName(mod.path);
151
+ if (!tagName) continue;
152
+ const d = {
153
+ ...element,
154
+ attributes: withMixins(element, "attributes"),
155
+ members: withMixins(element, "members"),
156
+ };
157
+ declarations.push({
158
+ kind: "class",
159
+ name: d.name,
160
+ tagName,
161
+ customElement: true,
162
+ ...(d.summary && { summary: d.summary }),
163
+ ...(d.description && { description: d.description }),
164
+ ...(d.attributes?.length && {
165
+ attributes: d.attributes.map((a) => withType(a, unions)),
166
+ }),
167
+ ...(d.members?.length && {
168
+ members: d.members
169
+ .filter((m) =>
170
+ isPublicMember(m, (member) =>
171
+ litProperties(member.inheritedFrom?.module ?? mod.path).has(member.name),
172
+ ),
173
+ )
174
+ .map((m) => withType(m, unions)),
175
+ }),
176
+ ...(d.events?.length && { events: d.events }),
177
+ ...(d.slots?.length && { slots: d.slots }),
178
+ ...(d.cssProperties?.length && { cssProperties: d.cssProperties }),
179
+ ...(d.cssParts?.length && { cssParts: d.cssParts }),
180
+ });
181
+ }
182
+ if (!declarations.length) continue;
183
+ modules.push({
184
+ kind: "javascript-module",
185
+ path: mod.path,
186
+ declarations,
187
+ exports: declarations.flatMap((d) => [
188
+ { kind: "js", name: d.name, declaration: { name: d.name, module: mod.path } },
189
+ {
190
+ kind: "custom-element-definition",
191
+ name: d.tagName,
192
+ declaration: { name: d.name, module: mod.path },
193
+ },
194
+ ]),
195
+ });
196
+ }
197
+ modules.sort((a, b) => a.path.localeCompare(b.path));
198
+ return { schemaVersion: raw.schemaVersion || "1.0.0", readme: "", modules };
199
+ }
200
+
201
+ function listTsFiles(dir, files = []) {
202
+ for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
203
+ const p = path.join(dir, entry.name);
204
+ if (entry.isDirectory()) listTsFiles(p, files);
205
+ else if (entry.name.endsWith(".ts") && !/\.(spec|test|demo)\.ts$/.test(entry.name)) {
206
+ files.push(p);
207
+ }
208
+ }
209
+ return files;
210
+ }
211
+
212
+ /** Writes custom-elements.json at the package root and returns its path. */
213
+ export function generateCem() {
214
+ runCem(CEM_CONFIG);
215
+ const raw = JSON.parse(fs.readFileSync(CEM_RAW, "utf8"));
216
+ const unions = collectLiteralUnions(
217
+ listTsFiles(path.join(ROOT, "src/core")).map((f) => fs.readFileSync(f, "utf8")),
218
+ );
219
+ const propertyCache = new Map();
220
+ const manifest = buildManifest(raw, {
221
+ unions,
222
+ resolveTagName: (modulePath) => extractTagNameFromSource(path.join(ROOT, modulePath)),
223
+ litProperties: (modulePath) => {
224
+ if (!propertyCache.has(modulePath)) {
225
+ const file = path.join(ROOT, modulePath);
226
+ propertyCache.set(
227
+ modulePath,
228
+ fs.existsSync(file) ? collectLitProperties(fs.readFileSync(file, "utf8")) : new Set(),
229
+ );
230
+ }
231
+ return propertyCache.get(modulePath);
232
+ },
233
+ // Copy-paste starter, not a library element
234
+ exclude: (modulePath) => modulePath.includes("/functional/example/"),
235
+ });
236
+ fs.writeFileSync(CEM_OUT, JSON.stringify(manifest, null, 2) + "\n");
237
+ const count = manifest.modules.reduce((n, m) => n + m.declarations.length, 0);
238
+ console.log(`✅ custom-elements.json: ${count} elements`);
239
+ return CEM_OUT;
240
+ }
241
+
242
+ if (process.argv[1] && path.resolve(process.argv[1]) === fileURLToPath(import.meta.url)) {
243
+ generateCem();
244
+ }
@@ -0,0 +1,122 @@
1
+ import assert from "node:assert/strict";
2
+ import test from "node:test";
3
+ import {
4
+ buildManifest,
5
+ collectLitProperties,
6
+ collectLiteralUnions,
7
+ expandType,
8
+ } from "./generate-cem.mjs";
9
+
10
+ test("collectLiteralUnions keeps string-literal aliases only", () => {
11
+ const unions = collectLiteralUnions([
12
+ `export type Size = "sm" | "md";\nexport type Route = string | URL;`,
13
+ `export type Shape =\n | "default"\n | "circle";`,
14
+ ]);
15
+ assert.equal(unions.get("Size"), `"sm" | "md"`);
16
+ assert.equal(unions.get("Shape"), `"default" | "circle"`);
17
+ assert.equal(unions.has("Route"), false);
18
+ });
19
+
20
+ test("collectLiteralUnions drops names defined twice with different values", () => {
21
+ const unions = collectLiteralUnions([`export type Mode = "a" | "b";`, `export type Mode = "c" | "d";`]);
22
+ assert.equal(unions.has("Mode"), false);
23
+ });
24
+
25
+ test("expandType replaces aliases and normalizes whitespace", () => {
26
+ const unions = new Map([["Size", `"sm" | "md"`]]);
27
+ assert.equal(expandType("Size | undefined", unions), `"sm" | "md" | undefined`);
28
+ assert.equal(expandType(`| "a"\n | "b"`, unions), `"a" | "b"`);
29
+ assert.equal(expandType("Route | string", unions), "Route | string");
30
+ });
31
+
32
+ test("collectLitProperties finds fields and accessors, with comments in between", () => {
33
+ const names = collectLitProperties(`
34
+ @property({ type: String }) label = "";
35
+ @property({
36
+ type: Function,
37
+ attribute: false,
38
+ }) /** doc */
39
+ get items() { return this._items; }
40
+ @state() open = false;
41
+ `);
42
+ assert.deepEqual([...names].sort(), ["items", "label"]);
43
+ });
44
+
45
+ const raw = {
46
+ schemaVersion: "1.0.0",
47
+ modules: [
48
+ {
49
+ path: "src/core/mixins/FormElement.ts",
50
+ declarations: [
51
+ {
52
+ kind: "mixin",
53
+ name: "Form",
54
+ attributes: [{ name: "name", type: { text: "string" }, fieldName: "name" }],
55
+ members: [{ kind: "field", name: "name", attribute: "name" }],
56
+ },
57
+ ],
58
+ },
59
+ {
60
+ path: "src/core/components/ui/button/button.ts",
61
+ declarations: [
62
+ {
63
+ kind: "class",
64
+ name: "Button",
65
+ customElement: true,
66
+ mixins: [{ name: "FormElement", package: "@supersoniks/concorde/core/mixins/FormElement" }],
67
+ attributes: [{ name: "size", type: { text: "Size" }, fieldName: "size" }],
68
+ members: [
69
+ { kind: "field", name: "size", attribute: "size", type: { text: "Size" } },
70
+ { kind: "field", name: "items", type: { text: "ListItems" } },
71
+ { kind: "field", name: "pointerDownTime", type: { text: "number" } },
72
+ { kind: "field", name: "_internal" },
73
+ { kind: "method", name: "render" },
74
+ { kind: "method", name: "handleClick" },
75
+ { kind: "method", name: "show", description: "Opens it." },
76
+ ],
77
+ },
78
+ ],
79
+ exports: [{ kind: "custom-element-definition", declaration: { name: "Button" } }],
80
+ },
81
+ {
82
+ path: "src/core/components/functional/example/example.ts",
83
+ declarations: [{ kind: "class", name: "Example", customElement: true }],
84
+ exports: [{ kind: "custom-element-definition", declaration: { name: "Example" } }],
85
+ },
86
+ ],
87
+ };
88
+
89
+ function build() {
90
+ return buildManifest(raw, {
91
+ unions: new Map([["Size", `"sm" | "md"`]]),
92
+ resolveTagName: (p) => (p.includes("button") ? "sonic-button" : "sonic-example"),
93
+ litProperties: (p) => (p.includes("button") ? new Set(["size", "items"]) : new Set()),
94
+ exclude: (p) => p.includes("/functional/example/"),
95
+ });
96
+ }
97
+
98
+ test("buildManifest keeps elements with their tag name and definition export", () => {
99
+ const manifest = build();
100
+ assert.equal(manifest.modules.length, 1);
101
+ const [mod] = manifest.modules;
102
+ const [el] = mod.declarations;
103
+ assert.equal(el.tagName, "sonic-button");
104
+ assert.deepEqual(
105
+ mod.exports.find((e) => e.kind === "custom-element-definition"),
106
+ { kind: "custom-element-definition", name: "sonic-button", declaration: { name: "Button", module: mod.path } },
107
+ );
108
+ assert.equal(el.attributes.find((a) => a.name === "size").type.text, `"sm" | "md"`);
109
+ });
110
+
111
+ test("buildManifest keeps the public API only and merges mixins", () => {
112
+ const [el] = build().modules[0].declarations;
113
+ assert.deepEqual(
114
+ el.members.map((m) => m.name),
115
+ ["size", "items", "show", "name"],
116
+ );
117
+ const inherited = el.attributes.find((a) => a.name === "name");
118
+ assert.deepEqual(inherited.inheritedFrom, {
119
+ name: "FormElement",
120
+ module: "src/core/mixins/FormElement.ts",
121
+ });
122
+ });