@supersoniks/concorde 5.1.1 → 5.1.3-immutable.1

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 (459) 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/.claude/skills +1 -0
  6. package/.github/workflows/ci.yml +21 -0
  7. package/.github-export-ignore +30 -0
  8. package/CONTRIBUTING.md +59 -0
  9. package/DEV.md +54 -0
  10. package/LICENSE +21 -0
  11. package/OPEN_SOURCE_CHECKPOINT.md +133 -0
  12. package/README.md +4 -4
  13. package/ai/README.md +29 -41
  14. package/ai/skills/concorde/SKILL.md +54 -324
  15. package/ai/skills/concorde/rules/composition.md +32 -0
  16. package/ai/skills/concorde/rules/data.md +47 -0
  17. package/ai/skills/concorde/rules/http.md +25 -0
  18. package/ai/skills/concorde/rules/lists-forms.md +35 -0
  19. package/ai/skills/concorde/rules/styling.md +46 -0
  20. package/ai/skills/concorde/rules/troubleshooting.md +45 -0
  21. package/build-infos.json +1 -1
  22. package/concorde-core.bundle.js +177 -177
  23. package/concorde-core.es.js +4993 -4833
  24. package/custom-elements-manifest.public.config.mjs +8 -0
  25. package/{.tmp-cem/custom-elements.json → custom-elements.json} +11758 -8904
  26. package/dist/concorde-core.bundle.js +177 -177
  27. package/dist/concorde-core.es.js +4993 -4833
  28. package/dist/docs-mock-api-sw.js +58 -223
  29. package/dist/docs-mock-api-sw.js.map +4 -4
  30. package/dist/img/concorde/plane_01.jpg +0 -0
  31. package/dist/img/concorde/plane_02.jpg +0 -0
  32. package/dist/img/concorde/plane_03.jpg +0 -0
  33. package/dist/img/concorde/plane_04.jpg +0 -0
  34. package/dist/img/concorde/plane_05.jpg +0 -0
  35. package/dist/img/concorde/plane_06.jpg +0 -0
  36. package/dist/img/concorde/plane_07.jpg +0 -0
  37. package/dist/img/concorde/plane_08.jpg +0 -0
  38. package/dist/img/concorde/plane_09.jpg +0 -0
  39. package/dist/img/concorde/plane_10.jpg +0 -0
  40. package/dist/img/concorde/plane_11.jpg +0 -0
  41. package/dist/img/concorde/plane_12.jpg +0 -0
  42. package/dist/img/concorde/plane_13.jpg +0 -0
  43. package/dist/img/og-concorde.jpg +0 -0
  44. package/dist/robots.txt +11 -10
  45. package/docs/assets/index-D_alEsng.js +12122 -0
  46. package/docs/crawl/core/components/functional/date/date.html +190 -0
  47. package/docs/crawl/core/components/functional/fetch/fetch.html +109 -0
  48. package/docs/crawl/core/components/functional/if/if.html +27 -0
  49. package/docs/crawl/core/components/functional/jsonata/jsonata.html +79 -0
  50. package/docs/crawl/core/components/functional/list/list.html +70 -0
  51. package/docs/crawl/core/components/functional/mix/mix.html +45 -0
  52. package/docs/crawl/core/components/functional/queue/queue.html +96 -0
  53. package/docs/crawl/core/components/functional/router/router.html +106 -0
  54. package/docs/crawl/core/components/functional/sdui/sdui-extension-points.html +126 -0
  55. package/docs/crawl/core/components/functional/sdui/sdui.html +368 -0
  56. package/docs/crawl/core/components/functional/states/states.html +66 -0
  57. package/docs/crawl/core/components/functional/submit/submit.html +160 -0
  58. package/docs/crawl/core/components/functional/subscriber/subscriber.html +67 -0
  59. package/docs/crawl/core/components/functional/value/value.html +51 -0
  60. package/docs/crawl/core/components/ui/alert/alert.html +211 -0
  61. package/docs/crawl/core/components/ui/alert-messages/alert-messages.html +131 -0
  62. package/docs/crawl/core/components/ui/badge/badge.html +197 -0
  63. package/docs/crawl/core/components/ui/button/button.html +150 -0
  64. package/docs/crawl/core/components/ui/captcha/captcha.html +112 -0
  65. package/docs/crawl/core/components/ui/card/card.html +253 -0
  66. package/docs/crawl/core/components/ui/divider/divider.html +144 -0
  67. package/docs/crawl/core/components/ui/form/checkbox/checkbox.html +73 -0
  68. package/docs/crawl/core/components/ui/form/fieldset/fieldset.html +266 -0
  69. package/docs/crawl/core/components/ui/form/form-actions/form-actions.html +122 -0
  70. package/docs/crawl/core/components/ui/form/form-layout/form-layout.html +121 -0
  71. package/docs/crawl/core/components/ui/form/input/input.html +109 -0
  72. package/docs/crawl/core/components/ui/form/input-autocomplete/input-autocomplete.html +38 -0
  73. package/docs/crawl/core/components/ui/form/radio/radio.html +56 -0
  74. package/docs/crawl/core/components/ui/form/select/select.html +73 -0
  75. package/docs/crawl/core/components/ui/form/switch/switch.html +56 -0
  76. package/docs/crawl/core/components/ui/form/textarea/textarea.html +59 -0
  77. package/docs/crawl/core/components/ui/group/group.html +104 -0
  78. package/docs/crawl/core/components/ui/icon/icon.html +222 -0
  79. package/docs/crawl/core/components/ui/image/image.html +298 -0
  80. package/docs/crawl/core/components/ui/link/link.html +100 -0
  81. package/docs/crawl/core/components/ui/loader/loader.html +124 -0
  82. package/docs/crawl/core/components/ui/menu/menu.html +394 -0
  83. package/docs/crawl/core/components/ui/modal/modal.html +342 -0
  84. package/docs/crawl/core/components/ui/pop/pop.html +296 -0
  85. package/docs/crawl/core/components/ui/progress/progress.html +131 -0
  86. package/docs/crawl/core/components/ui/table/table.html +545 -0
  87. package/docs/crawl/core/components/ui/theme/theme.html +131 -0
  88. package/docs/crawl/core/components/ui/toast/toast.html +233 -0
  89. package/docs/crawl/core/components/ui/tooltip/tooltip.html +140 -0
  90. package/docs/crawl/docs/_core-concept/dataFlow.html +177 -0
  91. package/docs/crawl/docs/_core-concept/overview.html +66 -0
  92. package/docs/crawl/docs/_core-concept/subscriber.html +75 -0
  93. package/docs/crawl/docs/_decorators/ancestor-attribute.html +117 -0
  94. package/docs/crawl/docs/_decorators/auto-subscribe.html +202 -0
  95. package/docs/crawl/docs/_decorators/bind.html +141 -0
  96. package/docs/crawl/docs/_decorators/get.html +149 -0
  97. package/docs/crawl/docs/_decorators/handle.html +165 -0
  98. package/docs/crawl/docs/_decorators/on-assign.html +355 -0
  99. package/docs/crawl/docs/_decorators/patch.html +78 -0
  100. package/docs/crawl/docs/_decorators/post.html +139 -0
  101. package/docs/crawl/docs/_decorators/publish.html +61 -0
  102. package/docs/crawl/docs/_decorators/put.html +78 -0
  103. package/docs/crawl/docs/_decorators/subscribe.html +109 -0
  104. package/docs/crawl/docs/_decorators/wait-for-ancestors.html +137 -0
  105. package/docs/crawl/docs/_directives/sub.html +93 -0
  106. package/docs/crawl/docs/_getting-started/ai-agents.html +173 -0
  107. package/docs/crawl/docs/_getting-started/concorde-manual-install.html +100 -0
  108. package/docs/crawl/docs/_getting-started/concorde-outside.html +58 -0
  109. package/docs/crawl/docs/_getting-started/create-a-component.html +111 -0
  110. package/docs/crawl/docs/_getting-started/my-first-component.html +189 -0
  111. package/docs/crawl/docs/_getting-started/my-first-subscriber.html +110 -0
  112. package/docs/crawl/docs/_getting-started/pubsub.html +62 -0
  113. package/docs/crawl/docs/_getting-started/start.html +76 -0
  114. package/docs/crawl/docs/_getting-started/theming.html +333 -0
  115. package/docs/crawl/docs/_misc/api-configuration.html +149 -0
  116. package/docs/crawl/docs/_misc/dataProviderKey.html +135 -0
  117. package/docs/crawl/docs/_misc/docs-mock-api.html +158 -0
  118. package/docs/crawl/docs/_misc/dynamic-path.html +180 -0
  119. package/docs/crawl/docs/_misc/endpoint.html +50 -0
  120. package/docs/crawl/docs/_misc/formelement-subscriber-removal.html +138 -0
  121. package/docs/crawl/docs/_misc/html-integration.html +48 -0
  122. package/docs/crawl/hubs/decorators.html +547 -0
  123. package/docs/crawl/hubs/form-components.html +381 -0
  124. package/docs/crawl/hubs/remote-data.html +452 -0
  125. package/docs/crawl/index.html +103 -0
  126. package/docs/index.html +1 -1
  127. package/docs/llms-full.txt +7174 -0
  128. package/docs/llms.txt +98 -0
  129. package/docs/sitemap.xml +243 -0
  130. package/docs/src/core/components/functional/date/date.md +290 -0
  131. package/docs/src/core/components/functional/fetch/fetch.md +125 -0
  132. package/docs/src/core/components/functional/if/if.md +9 -0
  133. package/docs/src/core/components/functional/jsonata/jsonata.md +56 -0
  134. package/docs/src/core/components/functional/list/list.md +65 -0
  135. package/docs/src/core/components/functional/mix/mix.md +41 -0
  136. package/docs/src/core/components/functional/queue/queue.md +72 -0
  137. package/docs/src/core/components/functional/router/router.md +94 -0
  138. package/docs/src/core/components/functional/sdui/component-catalog.gaps.json +511 -0
  139. package/docs/src/core/components/functional/sdui/component-catalog.json +3103 -0
  140. package/docs/src/core/components/functional/sdui/default-library.json +108 -0
  141. package/docs/src/core/components/functional/sdui/example.json +99 -0
  142. package/docs/src/core/components/functional/sdui/sdui-extension-points.md +94 -0
  143. package/docs/src/core/components/functional/sdui/sdui.md +478 -0
  144. package/docs/src/core/components/functional/states/states.md +87 -0
  145. package/docs/src/core/components/functional/submit/submit.md +114 -0
  146. package/docs/src/core/components/functional/subscriber/subscriber.md +91 -0
  147. package/docs/src/core/components/functional/value/value.md +35 -0
  148. package/docs/src/core/components/ui/alert/alert.md +196 -0
  149. package/docs/src/core/components/ui/alert-messages/alert-messages.md +85 -0
  150. package/docs/src/core/components/ui/badge/badge.md +188 -0
  151. package/docs/src/core/components/ui/button/button.md +183 -0
  152. package/docs/src/core/components/ui/captcha/captcha.md +71 -0
  153. package/docs/src/core/components/ui/card/card.md +215 -0
  154. package/docs/src/core/components/ui/divider/divider.md +129 -0
  155. package/docs/src/core/components/ui/form/checkbox/checkbox.md +77 -0
  156. package/docs/src/core/components/ui/form/fieldset/fieldset.md +205 -0
  157. package/docs/src/core/components/ui/form/form-actions/form-actions.md +100 -0
  158. package/docs/src/core/components/ui/form/form-layout/form-layout.md +119 -0
  159. package/docs/src/core/components/ui/form/input/input.md +142 -0
  160. package/docs/src/core/components/ui/form/radio/radio.md +57 -0
  161. package/docs/src/core/components/ui/form/select/select.md +71 -0
  162. package/docs/src/core/components/ui/form/switch/switch.md +57 -0
  163. package/docs/src/core/components/ui/form/textarea/textarea.md +65 -0
  164. package/docs/src/core/components/ui/group/group.md +75 -0
  165. package/docs/src/core/components/ui/icon/icon.md +214 -0
  166. package/docs/src/core/components/ui/icon/icons.json +1 -0
  167. package/docs/src/core/components/ui/image/image.md +233 -0
  168. package/docs/src/core/components/ui/link/link.md +81 -0
  169. package/docs/src/core/components/ui/loader/loader.md +112 -0
  170. package/docs/src/core/components/ui/menu/menu.md +370 -0
  171. package/docs/src/core/components/ui/modal/modal.md +235 -0
  172. package/docs/src/core/components/ui/pop/pop.md +294 -0
  173. package/docs/src/core/components/ui/progress/progress.md +109 -0
  174. package/docs/src/core/components/ui/table/table.md +431 -0
  175. package/docs/src/core/components/ui/theme/theme.md +122 -0
  176. package/docs/src/core/components/ui/toast/toast.md +216 -0
  177. package/docs/src/core/components/ui/tooltip/tooltip.md +124 -0
  178. package/{src → docs/src}/docs/_core-concept/subscriber.md +0 -0
  179. package/{src → docs/src}/docs/_getting-started/my-first-subscriber.md +0 -0
  180. package/{src → docs/src}/docs/_getting-started/pubsub.md +0 -0
  181. package/docs/src/docs/_getting-started/theming.md +253 -0
  182. package/docs/src/docs/search/docs-search.json +12242 -0
  183. package/docs/src/tag-list.json +1 -0
  184. package/docs/src/tsconfig-model.json +23 -0
  185. package/docs/src/tsconfig.declarations.json +22 -0
  186. package/docs/src/tsconfig.emit.json +23 -0
  187. package/docs/src/tsconfig.json +1332 -0
  188. package/gitlab/job_github_mirror.sh +39 -0
  189. package/index.html +157 -5
  190. package/package.json +22 -4
  191. package/public/docs-mock-api-sw.js +58 -223
  192. package/public/docs-mock-api-sw.js.map +4 -4
  193. package/public/img/concorde/plane_01.jpg +0 -0
  194. package/public/img/concorde/plane_02.jpg +0 -0
  195. package/public/img/concorde/plane_03.jpg +0 -0
  196. package/public/img/concorde/plane_04.jpg +0 -0
  197. package/public/img/concorde/plane_05.jpg +0 -0
  198. package/public/img/concorde/plane_06.jpg +0 -0
  199. package/public/img/concorde/plane_07.jpg +0 -0
  200. package/public/img/concorde/plane_08.jpg +0 -0
  201. package/public/img/concorde/plane_09.jpg +0 -0
  202. package/public/img/concorde/plane_10.jpg +0 -0
  203. package/public/img/concorde/plane_11.jpg +0 -0
  204. package/public/img/concorde/plane_12.jpg +0 -0
  205. package/public/img/concorde/plane_13.jpg +0 -0
  206. package/public/img/og-concorde.jpg +0 -0
  207. package/public/robots.txt +11 -10
  208. package/scripts/ai-init.mjs +104 -379
  209. package/scripts/ai-init.test.mjs +81 -239
  210. package/scripts/docs-markdown-vite-plugin.ts +43 -0
  211. package/scripts/docs-public-url.mjs +56 -0
  212. package/scripts/docs.htaccess +82 -0
  213. package/scripts/generate-cem.mjs +244 -0
  214. package/scripts/generate-cem.test.mjs +122 -0
  215. package/scripts/generate-crawl-docs.mjs +233 -118
  216. package/scripts/generate-crawl-docs.test.mjs +124 -0
  217. package/scripts/generate-sdui-catalog.mjs +11 -10
  218. package/scripts/github-export.mjs +150 -0
  219. package/scripts/post-build-docs.js +37 -50
  220. package/scripts/post-build.mjs +0 -0
  221. package/scripts/pre-publish.mjs +2 -1
  222. package/scripts/site-pages.mjs +212 -0
  223. package/scripts/site-pages.test.mjs +116 -0
  224. package/site-pages/about.md +22 -0
  225. package/site-pages/privacy.md +32 -0
  226. package/src/core/components/functional/date/date.md +91 -231
  227. package/src/core/components/functional/example/example.ts +3 -1
  228. package/src/core/components/functional/fetch/fetch.md +66 -83
  229. package/src/core/components/functional/if/if.md +28 -3
  230. package/src/core/components/functional/if/if.ts +0 -0
  231. package/src/core/components/functional/jsonata/jsonata.md +42 -37
  232. package/src/core/components/functional/list/list.demo.ts +0 -0
  233. package/src/core/components/functional/list/list.md +103 -43
  234. package/src/core/components/functional/list/list.ts +17 -4
  235. package/src/core/components/functional/mix/mix.md +31 -26
  236. package/src/core/components/functional/queue/queue.demo.ts +10 -7
  237. package/src/core/components/functional/queue/queue.md +40 -61
  238. package/src/core/components/functional/router/router.demo.ts +16 -16
  239. package/src/core/components/functional/router/router.md +64 -65
  240. package/src/core/components/functional/router/router.ts +0 -0
  241. package/src/core/components/functional/sdui/SDUIDescriptorTransformer.ts +0 -0
  242. package/src/core/components/functional/sdui/component-catalog.gaps.json +1 -1
  243. package/src/core/components/functional/sdui/component-catalog.json +2 -2
  244. package/src/core/components/functional/sdui/example.json +19 -86
  245. package/src/core/components/functional/sdui/sdui-extension-points.md +1 -1
  246. package/src/core/components/functional/sdui/sdui-immutable.spec.ts +74 -0
  247. package/src/core/components/functional/sdui/sdui.md +187 -358
  248. package/src/core/components/functional/sdui/sdui.ts +33 -8
  249. package/src/core/components/functional/sdui/types.ts +0 -0
  250. package/src/core/components/functional/states/states.demo.ts +21 -22
  251. package/src/core/components/functional/states/states.md +86 -61
  252. package/src/core/components/functional/states/states.ts +1 -1
  253. package/src/core/components/functional/submit/submit.md +64 -72
  254. package/src/core/components/functional/submit/submit.spec.ts +60 -0
  255. package/src/core/components/functional/submit/submit.ts +6 -3
  256. package/src/core/components/functional/subscriber/subscriber.ts +0 -0
  257. package/src/core/components/functional/translation/translation.md +38 -0
  258. package/src/core/components/functional/value/value.md +34 -22
  259. package/src/core/components/functional/value/value.ts +0 -0
  260. package/src/core/components/ui/_css/size.ts +0 -0
  261. package/src/core/components/ui/alert/alert.md +48 -58
  262. package/src/core/components/ui/badge/badge.md +27 -34
  263. package/src/core/components/ui/button/button.md +139 -106
  264. package/src/core/components/ui/captcha/altchaStyles.ts +0 -0
  265. package/src/core/components/ui/captcha/captcha.md +17 -32
  266. package/src/core/components/ui/card/card.md +6 -6
  267. package/src/core/components/ui/divider/divider.md +8 -11
  268. package/src/core/components/ui/form/checkbox/checkbox.md +90 -42
  269. package/src/core/components/ui/form/fieldset/fieldset.md +31 -75
  270. package/src/core/components/ui/form/form-actions/form-actions.md +14 -16
  271. package/src/core/components/ui/form/form-layout/form-layout.md +19 -29
  272. package/src/core/components/ui/form/input/input.md +108 -90
  273. package/src/core/components/ui/form/input/input.ts +8 -2
  274. package/src/core/components/ui/form/radio/radio.md +65 -30
  275. package/src/core/components/ui/form/select/select.md +60 -45
  276. package/src/core/components/ui/form/switch/switch.md +57 -34
  277. package/src/core/components/ui/form/textarea/textarea.md +55 -38
  278. package/src/core/components/ui/group/group.md +35 -33
  279. package/src/core/components/ui/icon/icon.md +4 -4
  280. package/src/core/components/ui/image/image.md +41 -107
  281. package/src/core/components/ui/link/link.md +6 -6
  282. package/src/core/components/ui/loader/loader.md +30 -55
  283. package/src/core/components/ui/menu/menu.md +27 -27
  284. package/src/core/components/ui/modal/modal.md +72 -96
  285. package/src/core/components/ui/pop/pop.md +80 -158
  286. package/src/core/components/ui/progress/progress.md +2 -2
  287. package/src/core/components/ui/table/table.md +91 -255
  288. package/src/core/components/ui/theme/theme.md +11 -36
  289. package/src/core/components/ui/toast/toast.md +48 -117
  290. package/src/core/components/ui/tooltip/tooltip.md +27 -62
  291. package/src/core/decorators/subscriber/bind.ts +9 -14
  292. package/src/core/decorators/subscriber/subscribe.ts +15 -9
  293. package/src/core/decorators/subscriber/subscribe.type-test.ts +14 -5
  294. package/src/core/mixins/Subscriber.ts +0 -0
  295. package/src/core/utils/DataBindObserver.ts +0 -0
  296. package/src/core/utils/LocationHandler.spec.ts +80 -0
  297. package/src/core/utils/LocationHandler.ts +5 -9
  298. package/src/core/utils/Objects.ts +0 -0
  299. package/src/core/utils/PublisherProxy.ts +166 -125
  300. package/src/core/utils/deepReadonly.spec.ts +66 -0
  301. package/src/core/utils/deepReadonly.ts +71 -0
  302. package/src/core/utils/immutableValue.spec.ts +54 -0
  303. package/src/core/utils/immutableValue.ts +102 -0
  304. package/src/core/utils/nestedDotForm.spec.ts +88 -0
  305. package/src/core/utils/publisherImmutable.spec.ts +76 -0
  306. package/src/core/utils/route.ts +0 -0
  307. package/src/core/utils/strictGet.spec.ts +61 -0
  308. package/src/core/utils/strictGet.ts +102 -0
  309. package/src/css.d.ts +19 -0
  310. package/src/docs/components/docs-demo-sources.ts +55 -140
  311. package/src/docs/components/docs-lit-demo.ts +1 -3
  312. package/src/docs/components/docs-source-link.ts +0 -82
  313. package/src/docs/decorators/ancestor-attribute.md +59 -0
  314. package/src/docs/decorators/auto-subscribe.md +40 -0
  315. package/src/docs/decorators/bind.md +76 -0
  316. package/src/docs/decorators/get.md +160 -0
  317. package/src/docs/decorators/handle.md +119 -0
  318. package/src/docs/decorators/on-assign.md +63 -0
  319. package/src/docs/decorators/patch.md +44 -0
  320. package/src/docs/decorators/post.md +134 -0
  321. package/src/docs/decorators/publish.md +56 -0
  322. package/src/docs/decorators/put.md +51 -0
  323. package/src/docs/decorators/subscribe.md +87 -0
  324. package/src/docs/decorators/wait-for-ancestors.md +76 -0
  325. package/src/docs/directives/sub.md +75 -0
  326. package/src/docs/directives/t.md +73 -0
  327. package/src/docs/docs-location.spec.ts +56 -0
  328. package/src/docs/docs-location.ts +133 -32
  329. package/src/docs/docs.ts +1 -2
  330. package/src/docs/example/decorators-demo-bind-demos.ts +83 -135
  331. package/src/docs/example/decorators-demo-geo.ts +30 -19
  332. package/src/docs/example/decorators-demo-post.ts +88 -186
  333. package/src/docs/example/decorators-demo-subscribe-publish-get-demos.ts +165 -268
  334. package/src/docs/example/decorators-demo.ts +85 -98
  335. package/src/docs/example/docs-api-config-demos.ts +19 -20
  336. package/src/docs/example/docs-flight-demos.ts +147 -0
  337. package/src/docs/example/docs-jsonata-demos.ts +52 -52
  338. package/src/docs/example/docs-list-demos.ts +43 -123
  339. package/src/docs/example/docs-provider-keys.ts +21 -28
  340. package/src/docs/example/docs-queue-demos.ts +37 -77
  341. package/src/docs/example/docs-router-demos.ts +20 -25
  342. package/src/docs/example/docs-submit-demos.ts +48 -48
  343. package/src/docs/example/docs-toggle-demos.ts +4 -3
  344. package/src/docs/example/users.ts +0 -0
  345. package/src/docs/getting-started/ai-agents.md +50 -0
  346. package/src/docs/getting-started/create-a-component.md +136 -0
  347. package/src/docs/getting-started/dataFlow.md +87 -0
  348. package/src/docs/getting-started/installation.md +36 -0
  349. package/src/docs/getting-started/my-first-component.md +227 -0
  350. package/src/docs/getting-started/start.md +35 -0
  351. package/src/docs/header/header.ts +11 -6
  352. package/src/docs/home/catalog.ts +1 -1
  353. package/src/docs/home/home.ts +20 -11
  354. package/src/docs/layout.ts +12 -13
  355. package/src/docs/misc/api-configuration.md +79 -0
  356. package/src/docs/misc/dataProviderKey.md +168 -0
  357. package/src/docs/misc/docs-mock-api.md +62 -0
  358. package/src/docs/misc/dynamic-path.md +71 -0
  359. package/src/docs/misc/endpoint.md +45 -0
  360. package/src/docs/misc/html-integration.md +14 -0
  361. package/src/docs/misc/publisher-get-immutability-docs-crawl.json +902 -0
  362. package/src/docs/misc/publisher-get-immutability-docs-recheck.json +13 -0
  363. package/src/docs/misc/publisher-get-immutability-study.md +229 -0
  364. package/src/docs/mock-api/api-config-mock.ts +5 -0
  365. package/src/docs/mock-api/fixtures.ts +0 -278
  366. package/src/docs/mock-api/flights.ts +89 -0
  367. package/src/docs/mock-api/router.ts +3 -4
  368. package/src/docs/mock-api/urls.ts +1 -2
  369. package/src/docs/navigation/navigation.ts +84 -101
  370. package/src/docs/navigation/toc.ts +7 -4
  371. package/src/docs/search/docs-search.json +3188 -5153
  372. package/src/docs/search/markdown-renderer.ts +31 -8
  373. package/src/docs/search/page.ts +9 -6
  374. package/src/docs/search/search.ts +154 -122
  375. package/src/docs/tailwind/css/docs/content.css +4 -5
  376. package/src/tsconfig.declarations.json +22 -0
  377. package/src/tsconfig.emit.json +23 -0
  378. package/src/tsconfig.json +53 -5
  379. package/src/tsconfig.tsbuildinfo +1 -1
  380. package/vite.config.mts +11 -2
  381. package/.agents/skills/concorde-component-docs/SKILL.md +0 -194
  382. package/.taste-skill/after/desktop-fold.jpg +0 -0
  383. package/.taste-skill/after/desktop-page-01.jpg +0 -0
  384. package/.taste-skill/after/desktop-page-02.jpg +0 -0
  385. package/.taste-skill/after/desktop-page-03.jpg +0 -0
  386. package/.taste-skill/after/mobile-fold.jpg +0 -0
  387. package/.taste-skill/after/mobile-page-01.jpg +0 -0
  388. package/.taste-skill/after/report.json +0 -4103
  389. package/.taste-skill/after/tablet-fold.jpg +0 -0
  390. package/.taste-skill/after/tablet-page-01.jpg +0 -0
  391. package/.taste-skill/after/tablet-page-02.jpg +0 -0
  392. package/.taste-skill/before/desktop-fold.jpg +0 -0
  393. package/.taste-skill/before/desktop-page-01.jpg +0 -0
  394. package/.taste-skill/before/desktop-page-02.jpg +0 -0
  395. package/.taste-skill/before/mobile-fold.jpg +0 -0
  396. package/.taste-skill/before/mobile-page-01.jpg +0 -0
  397. package/.taste-skill/before/report.json +0 -2556
  398. package/.taste-skill/before/tablet-fold.jpg +0 -0
  399. package/.taste-skill/before/tablet-page-01.jpg +0 -0
  400. package/.taste-skill/direction.json +0 -510
  401. package/.taste-skill/notes.md +0 -84
  402. package/.taste-skill/prod/desktop-fold.jpg +0 -0
  403. package/.taste-skill/prod/desktop-page-01.jpg +0 -0
  404. package/.taste-skill/prod/desktop-page-02.jpg +0 -0
  405. package/.taste-skill/prod/desktop-page-03.jpg +0 -0
  406. package/.taste-skill/prod/mobile-fold.jpg +0 -0
  407. package/.taste-skill/prod/mobile-page-01.jpg +0 -0
  408. package/.taste-skill/prod/mobile-page-02.jpg +0 -0
  409. package/.taste-skill/prod/report.json +0 -1973
  410. package/.taste-skill/prod/tablet-fold.jpg +0 -0
  411. package/.taste-skill/prod/tablet-page-01.jpg +0 -0
  412. package/.taste-skill/prod/tablet-page-02.jpg +0 -0
  413. package/AUDIT.md +0 -228
  414. package/PLAN-AMELIORATION.md +0 -220
  415. package/ai/AGENTS.md +0 -56
  416. package/ai/cursor/rules/concorde-menu.mdc +0 -15
  417. package/ai/cursor/rules/concorde-scope.mdc +0 -14
  418. package/ai/cursor/rules/concorde-theme.mdc +0 -13
  419. package/ai/cursor/rules/concorde.mdc +0 -66
  420. package/ai/jetbrains/rules/concorde.md +0 -53
  421. package/ai/skills/concorde-get-set-dp/SKILL.md +0 -194
  422. package/ai/skills/concorde-imports/SKILL.md +0 -78
  423. package/ai/skills/concorde-menu/SKILL.md +0 -74
  424. package/ai/skills/concorde-scope/SKILL.md +0 -70
  425. package/ai/skills/concorde-theme/SKILL.md +0 -57
  426. package/docs/assets/index-Bb-_LRyY.js +0 -12280
  427. package/src/docs/example/docs-input-autocomplete-demos.ts +0 -110
  428. package/src/docs/example/docs-joke-demos.ts +0 -297
  429. /package/{src → docs/src}/core/components/ui/form/input-autocomplete/input-autocomplete.md +0 -0
  430. /package/{src → docs/src}/docs/_core-concept/dataFlow.md +0 -0
  431. /package/{src → docs/src}/docs/_core-concept/overview.md +0 -0
  432. /package/{src → docs/src}/docs/_decorators/ancestor-attribute.md +0 -0
  433. /package/{src → docs/src}/docs/_decorators/auto-subscribe.md +0 -0
  434. /package/{src → docs/src}/docs/_decorators/bind.md +0 -0
  435. /package/{src → docs/src}/docs/_decorators/get.md +0 -0
  436. /package/{src → docs/src}/docs/_decorators/handle.md +0 -0
  437. /package/{src → docs/src}/docs/_decorators/on-assign.md +0 -0
  438. /package/{src → docs/src}/docs/_decorators/patch.md +0 -0
  439. /package/{src → docs/src}/docs/_decorators/post.md +0 -0
  440. /package/{src → docs/src}/docs/_decorators/publish.md +0 -0
  441. /package/{src → docs/src}/docs/_decorators/put.md +0 -0
  442. /package/{src → docs/src}/docs/_decorators/subscribe.md +0 -0
  443. /package/{src → docs/src}/docs/_decorators/wait-for-ancestors.md +0 -0
  444. /package/{src → docs/src}/docs/_directives/sub.md +0 -0
  445. /package/{src → docs/src}/docs/_getting-started/ai-agents.md +0 -0
  446. /package/{src → docs/src}/docs/_getting-started/concorde-manual-install.md +0 -0
  447. /package/{src → docs/src}/docs/_getting-started/concorde-outside.md +0 -0
  448. /package/{src → docs/src}/docs/_getting-started/create-a-component.md +0 -0
  449. /package/{src → docs/src}/docs/_getting-started/my-first-component.md +0 -0
  450. /package/{src → docs/src}/docs/_getting-started/start.md +0 -0
  451. /package/{src → docs/src}/docs/_misc/api-configuration.md +0 -0
  452. /package/{src → docs/src}/docs/_misc/dataProviderKey.md +0 -0
  453. /package/{src → docs/src}/docs/_misc/docs-mock-api.md +0 -0
  454. /package/{src → docs/src}/docs/_misc/dynamic-path.md +0 -0
  455. /package/{src → docs/src}/docs/_misc/endpoint.md +0 -0
  456. /package/{src → docs/src}/docs/_misc/formelement-subscriber-removal.md +0 -0
  457. /package/{src → docs/src}/docs/_misc/html-integration.md +0 -0
  458. /package/src/docs/{_getting-started → getting-started}/components.md +0 -0
  459. /package/src/docs/{_getting-started → 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
+ });