@supersoniks/concorde 5.1.2 → 5.1.3-immutable.2

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 (497) hide show
  1. package/.agents/skills/concorde-docs/SKILL.md +1 -1
  2. package/.claude/skills +1 -0
  3. package/.github/workflows/ci.yml +21 -0
  4. package/.github-export-ignore +30 -0
  5. package/CONTRIBUTING.md +59 -0
  6. package/DEV.md +54 -0
  7. package/LICENSE +21 -0
  8. package/OPEN_SOURCE_CHECKPOINT.md +133 -0
  9. package/README.md +1 -1
  10. package/ai/README.md +29 -41
  11. package/ai/skills/concorde/SKILL.md +54 -324
  12. package/ai/skills/concorde/rules/composition.md +32 -0
  13. package/ai/skills/concorde/rules/data.md +47 -0
  14. package/ai/skills/concorde/rules/http.md +25 -0
  15. package/ai/skills/concorde/rules/lists-forms.md +35 -0
  16. package/ai/skills/concorde/rules/styling.md +46 -0
  17. package/ai/skills/concorde/rules/troubleshooting.md +45 -0
  18. package/build-infos.json +1 -1
  19. package/concorde-core.bundle.js +177 -177
  20. package/concorde-core.es.js +5183 -5018
  21. package/custom-elements-manifest.public.config.mjs +8 -0
  22. package/{.tmp-cem/custom-elements.json → custom-elements.json} +11722 -8868
  23. package/dist/concorde-core.bundle.js +177 -177
  24. package/dist/concorde-core.es.js +5183 -5018
  25. package/dist/docs-mock-api-sw.js +58 -223
  26. package/dist/docs-mock-api-sw.js.map +4 -4
  27. package/dist/img/og-concorde.jpg +0 -0
  28. package/dist/robots.txt +11 -10
  29. package/docs/assets/index-CD4WyL6o.css +1 -0
  30. package/docs/assets/index-D_alEsng.js +12122 -0
  31. package/docs/crawl/core/components/functional/date/date.html +190 -0
  32. package/docs/crawl/core/components/functional/fetch/fetch.html +109 -0
  33. package/docs/crawl/core/components/functional/if/if.html +27 -0
  34. package/docs/crawl/core/components/functional/jsonata/jsonata.html +79 -0
  35. package/docs/crawl/core/components/functional/list/list.html +70 -0
  36. package/docs/crawl/core/components/functional/mix/mix.html +45 -0
  37. package/docs/crawl/core/components/functional/queue/queue.html +96 -0
  38. package/docs/crawl/core/components/functional/router/router.html +106 -0
  39. package/docs/{core → crawl/core}/components/functional/sdui/sdui-extension-points.html +8 -9
  40. package/docs/crawl/core/components/functional/sdui/sdui.html +368 -0
  41. package/docs/crawl/core/components/functional/states/states.html +66 -0
  42. package/docs/crawl/core/components/functional/submit/submit.html +160 -0
  43. package/docs/{core → crawl/core}/components/functional/subscriber/subscriber.html +5 -6
  44. package/docs/crawl/core/components/functional/value/value.html +51 -0
  45. package/docs/{core → crawl/core}/components/ui/alert/alert.html +63 -53
  46. package/docs/{core → crawl/core}/components/ui/alert-messages/alert-messages.html +5 -6
  47. package/docs/{core → crawl/core}/components/ui/badge/badge.html +33 -33
  48. package/docs/crawl/core/components/ui/button/button.html +150 -0
  49. package/docs/crawl/core/components/ui/captcha/captcha.html +112 -0
  50. package/docs/{core → crawl/core}/components/ui/card/card.html +11 -12
  51. package/docs/{core → crawl/core}/components/ui/divider/divider.html +14 -14
  52. package/docs/crawl/core/components/ui/form/checkbox/checkbox.html +73 -0
  53. package/docs/crawl/core/components/ui/form/fieldset/fieldset.html +266 -0
  54. package/docs/{core → crawl/core}/components/ui/form/form-actions/form-actions.html +23 -23
  55. package/docs/crawl/core/components/ui/form/form-layout/form-layout.html +121 -0
  56. package/docs/crawl/core/components/ui/form/input/input.html +109 -0
  57. package/docs/crawl/core/components/ui/form/input-autocomplete/input-autocomplete.html +38 -0
  58. package/docs/crawl/core/components/ui/form/radio/radio.html +56 -0
  59. package/docs/crawl/core/components/ui/form/select/select.html +73 -0
  60. package/docs/crawl/core/components/ui/form/switch/switch.html +56 -0
  61. package/docs/crawl/core/components/ui/form/textarea/textarea.html +59 -0
  62. package/docs/crawl/core/components/ui/group/group.html +104 -0
  63. package/docs/{core → crawl/core}/components/ui/icon/icon.html +9 -10
  64. package/docs/crawl/core/components/ui/image/image.html +298 -0
  65. package/docs/{core → crawl/core}/components/ui/link/link.html +11 -12
  66. package/docs/crawl/core/components/ui/loader/loader.html +124 -0
  67. package/docs/{core → crawl/core}/components/ui/menu/menu.html +33 -34
  68. package/docs/crawl/core/components/ui/modal/modal.html +342 -0
  69. package/docs/crawl/core/components/ui/pop/pop.html +296 -0
  70. package/docs/{core → crawl/core}/components/ui/progress/progress.html +7 -8
  71. package/docs/crawl/core/components/ui/table/table.html +545 -0
  72. package/docs/crawl/core/components/ui/theme/theme.html +131 -0
  73. package/docs/crawl/core/components/ui/toast/toast.html +233 -0
  74. package/docs/crawl/core/components/ui/tooltip/tooltip.html +140 -0
  75. package/docs/{docs/getting-started → crawl/docs/_core-concept}/dataFlow.html +29 -26
  76. package/docs/crawl/docs/_core-concept/overview.html +66 -0
  77. package/docs/crawl/docs/_core-concept/subscriber.html +75 -0
  78. package/docs/crawl/docs/_decorators/ancestor-attribute.html +117 -0
  79. package/docs/crawl/docs/_decorators/auto-subscribe.html +202 -0
  80. package/docs/crawl/docs/_decorators/bind.html +141 -0
  81. package/docs/crawl/docs/_decorators/get.html +149 -0
  82. package/docs/crawl/docs/_decorators/handle.html +165 -0
  83. package/docs/crawl/docs/_decorators/on-assign.html +355 -0
  84. package/docs/crawl/docs/_decorators/patch.html +78 -0
  85. package/docs/crawl/docs/_decorators/post.html +139 -0
  86. package/docs/crawl/docs/_decorators/publish.html +61 -0
  87. package/docs/crawl/docs/_decorators/put.html +78 -0
  88. package/docs/crawl/docs/_decorators/subscribe.html +109 -0
  89. package/docs/crawl/docs/_decorators/wait-for-ancestors.html +137 -0
  90. package/docs/crawl/docs/_directives/sub.html +93 -0
  91. package/docs/{docs/getting-started → crawl/docs/_getting-started}/ai-agents.html +11 -12
  92. package/docs/crawl/docs/_getting-started/concorde-manual-install.html +100 -0
  93. package/docs/crawl/docs/_getting-started/concorde-outside.html +58 -0
  94. package/docs/{docs/getting-started → crawl/docs/_getting-started}/create-a-component.html +14 -11
  95. package/docs/{docs/getting-started → crawl/docs/_getting-started}/my-first-component.html +22 -13
  96. package/docs/crawl/docs/_getting-started/my-first-subscriber.html +110 -0
  97. package/docs/crawl/docs/_getting-started/pubsub.html +62 -0
  98. package/docs/crawl/docs/_getting-started/start.html +76 -0
  99. package/docs/{docs/getting-started → crawl/docs/_getting-started}/theming.html +9 -10
  100. package/docs/{docs/misc → crawl/docs/_misc}/api-configuration.html +18 -18
  101. package/docs/{docs/misc → crawl/docs/_misc}/dataProviderKey.html +11 -12
  102. package/docs/{docs/misc → crawl/docs/_misc}/docs-mock-api.html +28 -25
  103. package/docs/{docs/misc → crawl/docs/_misc}/dynamic-path.html +15 -16
  104. package/docs/{docs/misc → crawl/docs/_misc}/endpoint.html +15 -16
  105. package/docs/crawl/docs/_misc/formelement-subscriber-removal.html +138 -0
  106. package/docs/{docs/misc → crawl/docs/_misc}/html-integration.html +15 -12
  107. package/docs/crawl/hubs/decorators.html +547 -0
  108. package/docs/crawl/hubs/form-components.html +381 -0
  109. package/docs/crawl/hubs/remote-data.html +452 -0
  110. package/docs/crawl/index.html +103 -0
  111. package/docs/docs-mock-api-sw.js +223 -58
  112. package/docs/docs-mock-api-sw.js.map +4 -4
  113. package/docs/index.html +68 -95
  114. package/docs/llms-full.txt +3610 -2231
  115. package/docs/llms.txt +86 -94
  116. package/docs/robots.txt +10 -11
  117. package/docs/sitemap.xml +84 -78
  118. package/docs/src/core/components/functional/date/date.md +231 -91
  119. package/docs/src/core/components/functional/fetch/fetch.md +83 -66
  120. package/docs/src/core/components/functional/if/if.md +3 -28
  121. package/docs/src/core/components/functional/jsonata/jsonata.md +37 -42
  122. package/docs/src/core/components/functional/list/list.md +43 -99
  123. package/docs/src/core/components/functional/mix/mix.md +26 -31
  124. package/docs/src/core/components/functional/queue/queue.md +61 -40
  125. package/docs/src/core/components/functional/router/router.md +65 -64
  126. package/docs/src/core/components/functional/sdui/component-catalog.gaps.json +1 -1
  127. package/docs/src/core/components/functional/sdui/component-catalog.json +1 -1
  128. package/docs/src/core/components/functional/sdui/example.json +86 -19
  129. package/docs/src/core/components/functional/sdui/sdui-extension-points.md +1 -1
  130. package/docs/src/core/components/functional/sdui/sdui.md +358 -187
  131. package/docs/src/core/components/functional/states/states.md +61 -86
  132. package/docs/src/core/components/functional/submit/submit.md +72 -64
  133. package/docs/src/core/components/functional/value/value.md +22 -34
  134. package/docs/src/core/components/ui/alert/alert.md +58 -48
  135. package/docs/src/core/components/ui/badge/badge.md +34 -27
  136. package/docs/src/core/components/ui/button/button.md +106 -139
  137. package/docs/src/core/components/ui/captcha/captcha.md +32 -17
  138. package/docs/src/core/components/ui/card/card.md +6 -6
  139. package/docs/src/core/components/ui/divider/divider.md +11 -8
  140. package/docs/src/core/components/ui/form/checkbox/checkbox.md +42 -90
  141. package/docs/src/core/components/ui/form/fieldset/fieldset.md +75 -31
  142. package/docs/src/core/components/ui/form/form-actions/form-actions.md +16 -14
  143. package/docs/src/core/components/ui/form/form-layout/form-layout.md +29 -19
  144. package/docs/src/core/components/ui/form/input/input.md +95 -95
  145. package/docs/src/core/components/ui/form/input-autocomplete/input-autocomplete.md +29 -0
  146. package/docs/src/core/components/ui/form/radio/radio.md +34 -55
  147. package/docs/src/core/components/ui/form/select/select.md +45 -60
  148. package/docs/src/core/components/ui/form/switch/switch.md +34 -57
  149. package/docs/src/core/components/ui/form/textarea/textarea.md +38 -55
  150. package/docs/src/core/components/ui/group/group.md +33 -35
  151. package/docs/src/core/components/ui/icon/icon.md +4 -4
  152. package/docs/src/core/components/ui/image/image.md +107 -41
  153. package/docs/src/core/components/ui/link/link.md +6 -6
  154. package/docs/src/core/components/ui/loader/loader.md +55 -30
  155. package/docs/src/core/components/ui/menu/menu.md +27 -27
  156. package/docs/src/core/components/ui/modal/modal.md +96 -72
  157. package/docs/src/core/components/ui/pop/pop.md +158 -80
  158. package/docs/src/core/components/ui/progress/progress.md +2 -2
  159. package/docs/src/core/components/ui/table/table.md +255 -91
  160. package/docs/src/core/components/ui/theme/theme.md +36 -11
  161. package/docs/src/core/components/ui/toast/toast.md +117 -48
  162. package/docs/src/core/components/ui/tooltip/tooltip.md +62 -27
  163. package/docs/{docs/getting-started → src/docs/_core-concept}/dataFlow.md +18 -17
  164. package/docs/src/docs/_core-concept/overview.md +57 -0
  165. package/docs/src/docs/_core-concept/subscriber.md +75 -0
  166. package/docs/src/docs/_decorators/ancestor-attribute.md +128 -0
  167. package/docs/src/docs/_decorators/auto-subscribe.md +202 -0
  168. package/docs/src/docs/_decorators/bind.md +167 -0
  169. package/docs/src/docs/_decorators/get.md +162 -0
  170. package/docs/src/docs/_decorators/handle.md +175 -0
  171. package/docs/src/docs/_decorators/on-assign.md +390 -0
  172. package/docs/src/docs/_decorators/patch.md +70 -0
  173. package/docs/src/docs/_decorators/post.md +146 -0
  174. package/docs/src/docs/_decorators/publish.md +55 -0
  175. package/docs/src/docs/_decorators/put.md +70 -0
  176. package/docs/src/docs/_decorators/subscribe.md +100 -0
  177. package/docs/src/docs/_decorators/wait-for-ancestors.md +163 -0
  178. package/docs/src/docs/_directives/sub.md +91 -0
  179. package/docs/src/docs/{getting-started → _getting-started}/ai-agents.md +3 -3
  180. package/docs/src/docs/_getting-started/concorde-manual-install.md +133 -0
  181. package/docs/src/docs/_getting-started/concorde-outside.md +33 -0
  182. package/docs/{docs/getting-started → src/docs/_getting-started}/create-a-component.md +6 -3
  183. package/docs/src/docs/{getting-started → _getting-started}/my-first-component.md +14 -5
  184. package/docs/src/docs/_getting-started/my-first-subscriber.md +120 -0
  185. package/docs/src/docs/_getting-started/pubsub.md +37 -0
  186. package/docs/src/docs/{getting-started → _getting-started}/start.md +13 -1
  187. package/docs/src/docs/{getting-started → _getting-started}/theming.md +2 -2
  188. package/docs/src/docs/{misc → _misc}/api-configuration.md +12 -10
  189. package/docs/src/docs/{misc → _misc}/dataProviderKey.md +4 -4
  190. package/docs/{docs/misc → src/docs/_misc}/docs-mock-api.md +13 -12
  191. package/docs/{docs/misc → src/docs/_misc}/dynamic-path.md +8 -8
  192. package/docs/{docs/misc → src/docs/_misc}/endpoint.md +8 -8
  193. package/docs/src/docs/_misc/formelement-subscriber-removal.md +115 -0
  194. package/docs/{docs/misc → src/docs/_misc}/html-integration.md +5 -4
  195. package/docs/src/docs/search/docs-search.json +4375 -2420
  196. package/docs/src/tsconfig.declarations.json +22 -0
  197. package/docs/src/tsconfig.emit.json +23 -0
  198. package/docs/src/tsconfig.json +2 -23
  199. package/gitlab/job_github_mirror.sh +39 -0
  200. package/index.html +89 -0
  201. package/package.json +22 -4
  202. package/public/img/og-concorde.jpg +0 -0
  203. package/scripts/ai-init.mjs +104 -379
  204. package/scripts/ai-init.test.mjs +81 -239
  205. package/scripts/docs-markdown-vite-plugin.ts +11 -5
  206. package/scripts/docs-public-url.mjs +6 -0
  207. package/scripts/docs.htaccess +7 -0
  208. package/scripts/generate-cem.mjs +244 -0
  209. package/scripts/generate-cem.test.mjs +122 -0
  210. package/scripts/generate-crawl-docs.mjs +29 -5
  211. package/scripts/generate-sdui-catalog.mjs +11 -10
  212. package/scripts/github-export.mjs +150 -0
  213. package/scripts/post-build-docs.js +3 -0
  214. package/scripts/post-build.mjs +0 -0
  215. package/scripts/pre-publish.mjs +2 -1
  216. package/scripts/site-pages.mjs +212 -0
  217. package/scripts/site-pages.test.mjs +116 -0
  218. package/site-pages/about.md +22 -0
  219. package/site-pages/privacy.md +32 -0
  220. package/src/core/components/functional/date/date.md +1 -1
  221. package/src/core/components/functional/example/example.ts +3 -1
  222. package/src/core/components/functional/if/if.ts +0 -0
  223. package/src/core/components/functional/list/list.demo.ts +0 -0
  224. package/src/core/components/functional/list/list.md +6 -2
  225. package/src/core/components/functional/list/list.ts +17 -4
  226. package/src/core/components/functional/mix/mix.md +0 -0
  227. package/src/core/components/functional/router/router.demo.ts +0 -0
  228. package/src/core/components/functional/router/router.ts +0 -0
  229. package/src/core/components/functional/sdui/SDUIDescriptorTransformer.ts +0 -0
  230. package/src/core/components/functional/sdui/component-catalog.gaps.json +1 -1
  231. package/src/core/components/functional/sdui/component-catalog.json +2 -2
  232. package/src/core/components/functional/sdui/example.json +0 -0
  233. package/src/core/components/functional/sdui/sdui-immutable.spec.ts +74 -0
  234. package/src/core/components/functional/sdui/sdui.ts +33 -8
  235. package/src/core/components/functional/sdui/types.ts +0 -0
  236. package/src/core/components/functional/states/states.ts +0 -0
  237. package/src/core/components/functional/submit/submit.spec.ts +60 -0
  238. package/src/core/components/functional/submit/submit.ts +6 -3
  239. package/src/core/components/functional/subscriber/subscriber.ts +0 -0
  240. package/src/core/components/functional/value/value.md +0 -0
  241. package/src/core/components/functional/value/value.ts +0 -0
  242. package/src/core/components/ui/_css/size.ts +0 -0
  243. package/src/core/components/ui/captcha/altchaStyles.ts +0 -0
  244. package/src/core/components/ui/card/card.md +1 -1
  245. package/src/core/components/ui/form/input/input.md +19 -1
  246. package/src/core/components/ui/form/input/input.ts +8 -2
  247. package/src/core/components/ui/form/radio/radio.md +14 -0
  248. package/src/core/components/ui/image/image.md +17 -17
  249. package/src/core/components/ui/modal/modal.md +2 -2
  250. package/src/core/decorators/subscriber/bind.ts +9 -14
  251. package/src/core/decorators/subscriber/subscribe.ts +15 -9
  252. package/src/core/decorators/subscriber/subscribe.type-test.ts +14 -5
  253. package/src/core/mixins/Subscriber.ts +0 -0
  254. package/src/core/utils/DataBindObserver.ts +0 -0
  255. package/src/core/utils/Objects.ts +0 -0
  256. package/src/core/utils/PublisherProxy.ts +166 -125
  257. package/src/core/utils/deepReadonly.spec.ts +66 -0
  258. package/src/core/utils/deepReadonly.ts +71 -0
  259. package/src/core/utils/immutableValue.spec.ts +58 -0
  260. package/src/core/utils/immutableValue.ts +116 -0
  261. package/src/core/utils/nestedDotForm.spec.ts +88 -0
  262. package/src/core/utils/publisherImmutable.spec.ts +127 -0
  263. package/src/core/utils/route.ts +0 -0
  264. package/src/core/utils/strictGet.spec.ts +61 -0
  265. package/src/core/utils/strictGet.ts +102 -0
  266. package/src/css.d.ts +19 -0
  267. package/src/docs/components/docs-demo-sources.ts +3 -3
  268. package/src/docs/decorators/bind.md +23 -24
  269. package/src/docs/docs-location.spec.ts +10 -0
  270. package/src/docs/docs-location.ts +10 -0
  271. package/src/docs/example/decorators-demo-bind-demos.ts +11 -28
  272. package/src/docs/example/docs-toggle-demos.ts +1 -1
  273. package/src/docs/example/users.ts +0 -0
  274. package/src/docs/getting-started/ai-agents.md +51 -51
  275. package/src/docs/getting-started/dataFlow.md +2 -2
  276. package/src/docs/home/home.ts +3 -1
  277. package/src/docs/misc/publisher-get-immutability-docs-crawl.json +902 -0
  278. package/src/docs/misc/publisher-get-immutability-docs-recheck.json +13 -0
  279. package/src/docs/misc/publisher-get-immutability-study.md +229 -0
  280. package/src/docs/navigation/navigation.ts +5 -1
  281. package/src/docs/search/docs-search.json +358 -58
  282. package/src/docs/search/markdown-renderer.ts +6 -1
  283. package/src/docs/tailwind/css/docs/content.css +4 -5
  284. package/src/tsconfig.declarations.json +22 -0
  285. package/src/tsconfig.emit.json +23 -0
  286. package/src/tsconfig.json +53 -5
  287. package/src/tsconfig.tsbuildinfo +1 -1
  288. package/.taste-skill/after/desktop-fold.jpg +0 -0
  289. package/.taste-skill/after/desktop-page-01.jpg +0 -0
  290. package/.taste-skill/after/desktop-page-02.jpg +0 -0
  291. package/.taste-skill/after/desktop-page-03.jpg +0 -0
  292. package/.taste-skill/after/mobile-fold.jpg +0 -0
  293. package/.taste-skill/after/mobile-page-01.jpg +0 -0
  294. package/.taste-skill/after/report.json +0 -4103
  295. package/.taste-skill/after/tablet-fold.jpg +0 -0
  296. package/.taste-skill/after/tablet-page-01.jpg +0 -0
  297. package/.taste-skill/after/tablet-page-02.jpg +0 -0
  298. package/.taste-skill/before/desktop-fold.jpg +0 -0
  299. package/.taste-skill/before/desktop-page-01.jpg +0 -0
  300. package/.taste-skill/before/desktop-page-02.jpg +0 -0
  301. package/.taste-skill/before/mobile-fold.jpg +0 -0
  302. package/.taste-skill/before/mobile-page-01.jpg +0 -0
  303. package/.taste-skill/before/report.json +0 -2556
  304. package/.taste-skill/before/tablet-fold.jpg +0 -0
  305. package/.taste-skill/before/tablet-page-01.jpg +0 -0
  306. package/.taste-skill/direction.json +0 -510
  307. package/.taste-skill/notes.md +0 -84
  308. package/.taste-skill/prod/desktop-fold.jpg +0 -0
  309. package/.taste-skill/prod/desktop-page-01.jpg +0 -0
  310. package/.taste-skill/prod/desktop-page-02.jpg +0 -0
  311. package/.taste-skill/prod/desktop-page-03.jpg +0 -0
  312. package/.taste-skill/prod/mobile-fold.jpg +0 -0
  313. package/.taste-skill/prod/mobile-page-01.jpg +0 -0
  314. package/.taste-skill/prod/mobile-page-02.jpg +0 -0
  315. package/.taste-skill/prod/report.json +0 -1973
  316. package/.taste-skill/prod/tablet-fold.jpg +0 -0
  317. package/.taste-skill/prod/tablet-page-01.jpg +0 -0
  318. package/.taste-skill/prod/tablet-page-02.jpg +0 -0
  319. package/AUDIT.md +0 -228
  320. package/PLAN-AMELIORATION.md +0 -220
  321. package/PLAN-DOCS-AGENTS.md +0 -80
  322. package/ai/AGENTS.md +0 -56
  323. package/ai/cursor/rules/concorde-menu.mdc +0 -15
  324. package/ai/cursor/rules/concorde-scope.mdc +0 -14
  325. package/ai/cursor/rules/concorde-theme.mdc +0 -13
  326. package/ai/cursor/rules/concorde.mdc +0 -66
  327. package/ai/jetbrains/rules/concorde.md +0 -53
  328. package/ai/skills/concorde-get-set-dp/SKILL.md +0 -194
  329. package/ai/skills/concorde-imports/SKILL.md +0 -78
  330. package/ai/skills/concorde-menu/SKILL.md +0 -74
  331. package/ai/skills/concorde-scope/SKILL.md +0 -70
  332. package/ai/skills/concorde-theme/SKILL.md +0 -57
  333. package/docs/.htaccess +0 -75
  334. package/docs/404.html +0 -15
  335. package/docs/404.md +0 -5
  336. package/docs/assets/index-BgG6FFPt.js +0 -11765
  337. package/docs/assets/index-x89XINSG.css +0 -1
  338. package/docs/core/components/functional/date/date.html +0 -211
  339. package/docs/core/components/functional/date/date.md +0 -150
  340. package/docs/core/components/functional/fetch/fetch.html +0 -180
  341. package/docs/core/components/functional/fetch/fetch.md +0 -108
  342. package/docs/core/components/functional/if/if.html +0 -65
  343. package/docs/core/components/functional/if/if.md +0 -34
  344. package/docs/core/components/functional/jsonata/jsonata.html +0 -110
  345. package/docs/core/components/functional/jsonata/jsonata.md +0 -61
  346. package/docs/core/components/functional/list/list.html +0 -198
  347. package/docs/core/components/functional/list/list.md +0 -121
  348. package/docs/core/components/functional/mix/mix.html +0 -78
  349. package/docs/core/components/functional/mix/mix.md +0 -46
  350. package/docs/core/components/functional/queue/queue.html +0 -155
  351. package/docs/core/components/functional/queue/queue.md +0 -51
  352. package/docs/core/components/functional/router/router.html +0 -154
  353. package/docs/core/components/functional/router/router.md +0 -93
  354. package/docs/core/components/functional/sdui/sdui-extension-points.md +0 -94
  355. package/docs/core/components/functional/sdui/sdui.html +0 -397
  356. package/docs/core/components/functional/sdui/sdui.md +0 -307
  357. package/docs/core/components/functional/states/states.html +0 -141
  358. package/docs/core/components/functional/states/states.md +0 -112
  359. package/docs/core/components/functional/submit/submit.html +0 -178
  360. package/docs/core/components/functional/submit/submit.md +0 -106
  361. package/docs/core/components/functional/subscriber/subscriber.md +0 -91
  362. package/docs/core/components/functional/translation/translation.html +0 -60
  363. package/docs/core/components/functional/translation/translation.md +0 -38
  364. package/docs/core/components/functional/value/value.html +0 -81
  365. package/docs/core/components/functional/value/value.md +0 -47
  366. package/docs/core/components/ui/alert/alert.md +0 -186
  367. package/docs/core/components/ui/alert-messages/alert-messages.md +0 -85
  368. package/docs/core/components/ui/badge/badge.md +0 -181
  369. package/docs/core/components/ui/button/button.html +0 -309
  370. package/docs/core/components/ui/button/button.md +0 -216
  371. package/docs/core/components/ui/captcha/captcha.html +0 -80
  372. package/docs/core/components/ui/captcha/captcha.md +0 -56
  373. package/docs/core/components/ui/card/card.md +0 -215
  374. package/docs/core/components/ui/divider/divider.md +0 -126
  375. package/docs/core/components/ui/form/checkbox/checkbox.html +0 -200
  376. package/docs/core/components/ui/form/checkbox/checkbox.md +0 -125
  377. package/docs/core/components/ui/form/fieldset/fieldset.html +0 -238
  378. package/docs/core/components/ui/form/fieldset/fieldset.md +0 -161
  379. package/docs/core/components/ui/form/form-actions/form-actions.md +0 -98
  380. package/docs/core/components/ui/form/form-layout/form-layout.html +0 -115
  381. package/docs/core/components/ui/form/form-layout/form-layout.md +0 -109
  382. package/docs/core/components/ui/form/input/input.html +0 -235
  383. package/docs/core/components/ui/form/input/input.md +0 -142
  384. package/docs/core/components/ui/form/radio/radio.html +0 -144
  385. package/docs/core/components/ui/form/radio/radio.md +0 -78
  386. package/docs/core/components/ui/form/select/select.html +0 -178
  387. package/docs/core/components/ui/form/select/select.md +0 -86
  388. package/docs/core/components/ui/form/switch/switch.html +0 -146
  389. package/docs/core/components/ui/form/switch/switch.md +0 -80
  390. package/docs/core/components/ui/form/textarea/textarea.html +0 -162
  391. package/docs/core/components/ui/form/textarea/textarea.md +0 -82
  392. package/docs/core/components/ui/group/group.html +0 -113
  393. package/docs/core/components/ui/group/group.md +0 -77
  394. package/docs/core/components/ui/icon/icon.md +0 -214
  395. package/docs/core/components/ui/image/image.html +0 -194
  396. package/docs/core/components/ui/image/image.md +0 -167
  397. package/docs/core/components/ui/link/link.md +0 -81
  398. package/docs/core/components/ui/loader/loader.html +0 -114
  399. package/docs/core/components/ui/loader/loader.md +0 -87
  400. package/docs/core/components/ui/menu/menu.md +0 -370
  401. package/docs/core/components/ui/modal/modal.html +0 -324
  402. package/docs/core/components/ui/modal/modal.md +0 -211
  403. package/docs/core/components/ui/pop/pop.html +0 -250
  404. package/docs/core/components/ui/pop/pop.md +0 -216
  405. package/docs/core/components/ui/progress/progress.md +0 -109
  406. package/docs/core/components/ui/table/table.html +0 -333
  407. package/docs/core/components/ui/table/table.md +0 -267
  408. package/docs/core/components/ui/theme/theme.html +0 -116
  409. package/docs/core/components/ui/theme/theme.md +0 -97
  410. package/docs/core/components/ui/toast/toast.html +0 -185
  411. package/docs/core/components/ui/toast/toast.md +0 -147
  412. package/docs/core/components/ui/tooltip/tooltip.html +0 -112
  413. package/docs/core/components/ui/tooltip/tooltip.md +0 -89
  414. package/docs/docs/decorators/ancestor-attribute.html +0 -71
  415. package/docs/docs/decorators/ancestor-attribute.md +0 -59
  416. package/docs/docs/decorators/auto-subscribe.html +0 -61
  417. package/docs/docs/decorators/auto-subscribe.md +0 -40
  418. package/docs/docs/decorators/bind.html +0 -86
  419. package/docs/docs/decorators/bind.md +0 -77
  420. package/docs/docs/decorators/get.html +0 -166
  421. package/docs/docs/decorators/get.md +0 -160
  422. package/docs/docs/decorators/handle.html +0 -139
  423. package/docs/docs/decorators/handle.md +0 -119
  424. package/docs/docs/decorators/on-assign.html +0 -72
  425. package/docs/docs/decorators/on-assign.md +0 -63
  426. package/docs/docs/decorators/patch.html +0 -76
  427. package/docs/docs/decorators/patch.md +0 -44
  428. package/docs/docs/decorators/post.html +0 -150
  429. package/docs/docs/decorators/post.md +0 -134
  430. package/docs/docs/decorators/publish.html +0 -74
  431. package/docs/docs/decorators/publish.md +0 -56
  432. package/docs/docs/decorators/put.html +0 -83
  433. package/docs/docs/decorators/put.md +0 -51
  434. package/docs/docs/decorators/subscribe.html +0 -91
  435. package/docs/docs/decorators/subscribe.md +0 -87
  436. package/docs/docs/decorators/wait-for-ancestors.html +0 -82
  437. package/docs/docs/decorators/wait-for-ancestors.md +0 -76
  438. package/docs/docs/directives/sub.html +0 -79
  439. package/docs/docs/directives/sub.md +0 -75
  440. package/docs/docs/directives/t.html +0 -91
  441. package/docs/docs/directives/t.md +0 -73
  442. package/docs/docs/getting-started/ai-agents.md +0 -76
  443. package/docs/docs/getting-started/components.html +0 -27
  444. package/docs/docs/getting-started/components.md +0 -5
  445. package/docs/docs/getting-started/installation.html +0 -69
  446. package/docs/docs/getting-started/installation.md +0 -36
  447. package/docs/docs/getting-started/my-first-component.md +0 -227
  448. package/docs/docs/getting-started/start.html +0 -47
  449. package/docs/docs/getting-started/start.md +0 -35
  450. package/docs/docs/getting-started/theming.md +0 -253
  451. package/docs/docs/index.html +0 -99
  452. package/docs/docs/misc/api-configuration.md +0 -79
  453. package/docs/docs/misc/dataProviderKey.md +0 -168
  454. package/docs/hubs/decorators.html +0 -443
  455. package/docs/hubs/form-components.html +0 -404
  456. package/docs/hubs/remote-data.html +0 -371
  457. package/docs/img/archive/concorde-001-2cv.webp +0 -0
  458. package/docs/img/archive/concorde-red-arrows-2002-poster.jpg +0 -0
  459. package/docs/img/archive/concorde-red-arrows-2002.webm +0 -0
  460. package/docs/img/archive/credits.json +0 -28
  461. package/docs/index.md +0 -22
  462. package/docs/src/core/components/functional/translation/translation.md +0 -38
  463. package/docs/src/docs/decorators/ancestor-attribute.md +0 -59
  464. package/docs/src/docs/decorators/auto-subscribe.md +0 -40
  465. package/docs/src/docs/decorators/bind.md +0 -77
  466. package/docs/src/docs/decorators/get.md +0 -160
  467. package/docs/src/docs/decorators/handle.md +0 -119
  468. package/docs/src/docs/decorators/on-assign.md +0 -63
  469. package/docs/src/docs/decorators/patch.md +0 -44
  470. package/docs/src/docs/decorators/post.md +0 -134
  471. package/docs/src/docs/decorators/publish.md +0 -56
  472. package/docs/src/docs/decorators/put.md +0 -51
  473. package/docs/src/docs/decorators/subscribe.md +0 -87
  474. package/docs/src/docs/decorators/wait-for-ancestors.md +0 -76
  475. package/docs/src/docs/directives/sub.md +0 -75
  476. package/docs/src/docs/directives/t.md +0 -73
  477. package/docs/src/docs/getting-started/components.md +0 -5
  478. package/docs/src/docs/getting-started/create-a-component.md +0 -136
  479. package/docs/src/docs/getting-started/dataFlow.md +0 -87
  480. package/docs/src/docs/getting-started/installation.md +0 -36
  481. package/docs/src/docs/misc/docs-mock-api.md +0 -62
  482. package/docs/src/docs/misc/dynamic-path.md +0 -71
  483. package/docs/src/docs/misc/endpoint.md +0 -45
  484. package/docs/src/docs/misc/html-integration.md +0 -14
  485. /package/{docs → dist}/img/concorde/plane_01.jpg +0 -0
  486. /package/{docs → dist}/img/concorde/plane_02.jpg +0 -0
  487. /package/{docs → dist}/img/concorde/plane_03.jpg +0 -0
  488. /package/{docs → dist}/img/concorde/plane_04.jpg +0 -0
  489. /package/{docs → dist}/img/concorde/plane_05.jpg +0 -0
  490. /package/{docs → dist}/img/concorde/plane_06.jpg +0 -0
  491. /package/{docs → dist}/img/concorde/plane_07.jpg +0 -0
  492. /package/{docs → dist}/img/concorde/plane_08.jpg +0 -0
  493. /package/{docs → dist}/img/concorde/plane_09.jpg +0 -0
  494. /package/{docs → dist}/img/concorde/plane_10.jpg +0 -0
  495. /package/{docs → dist}/img/concorde/plane_11.jpg +0 -0
  496. /package/{docs → dist}/img/concorde/plane_12.jpg +0 -0
  497. /package/{docs → dist}/img/concorde/plane_13.jpg +0 -0
@@ -1,56 +0,0 @@
1
- # @publish
2
-
3
- `@publish(key)` writes a component property to one path of the store: every assignment to the property is published there. It never reads back from the store; it is the inverse of [@subscribe](/docs/decorators/subscribe). See [Data flow](/docs/getting-started/dataFlow) for the overall model.
4
-
5
- ## Import
6
-
7
- <sonic-code language="typescript">
8
- <template>
9
- import { publish } from "@supersoniks/concorde/decorators";
10
- import { DataProviderKey } from "@supersoniks/concorde/dataProviderKey";
11
-
12
- type CheckIn = { passenger: string; seat: string };
13
- const checkInKey = new DataProviderKey&lt;CheckIn&gt;("checkIn");
14
-
15
- @publish(checkInKey.passenger)
16
- @state()
17
- passenger = "Ada Lindqvist";
18
- </template>
19
- </sonic-code>
20
-
21
- ## Basic usage
22
-
23
- Each assignment calls `set()` on the publisher at the [DataProviderKey](/docs/misc/dataProviderKey) path. **On connect, a defined property value is published immediately**, so the initializer overwrites what the store held. Leave the property `undefined` to keep the store value. To read and write the same path, use [@bind](/docs/decorators/bind) with `reflect: true`.
24
-
25
- The check-in form below publishes `passenger` and `seat`; the boarding pass reads them back with [sub()](/docs/directives/sub).
26
-
27
- <sonic-code>
28
- <template>
29
- <docs-demo-sources for="demo-publish"></docs-demo-sources>
30
- <demo-publish></demo-publish>
31
- </template>
32
- </sonic-code>
33
-
34
- ## Dynamic path
35
-
36
- `${prop}` placeholders resolve from properties of the same component. When a placeholder changes, the property is published to the new path. While it is `null` or `undefined`, nothing is published. Rules and `skipEmptyPlaceholder`: [Dynamic paths](/docs/misc/dynamic-path).
37
-
38
- <sonic-code language="typescript">
39
- <template>
40
- @property({ type: Number }) seatIndex = 0;
41
-
42
- @publish(
43
- new DataProviderKey&lt;string, { seatIndex: number }&gt;("onBoard.${seatIndex}.seat"),
44
- { skipEmptyPlaceholder: true },
45
- )
46
- @state()
47
- seat = "1A";
48
- </template>
49
- </sonic-code>
50
-
51
- ## API reference
52
-
53
- | Argument | Type | Description |
54
- |----------|------|-------------|
55
- | `key` | `DataProviderKey<T, U>` | Path to write. `U` lists the host properties used by `${…}` placeholders |
56
- | `options.skipEmptyPlaceholder` | `boolean` (default `false`) | Treat a placeholder resolved to `""` as not ready |
@@ -1,83 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en" data-doc-url="https://concorde.supersoniks.org/docs/decorators/put" data-doc-id="docs/decorators/put">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>@put — Concorde by Supersoniks</title>
7
- <meta name="description" content="Sends the value of a publisher as the body of a PUT request, to replace a resource, and stores the response in an ApiResult&lt;T&gt; property. It takes the same arguments, options and send(component) handle">
8
- <meta name="keywords" content="Concorde, supersoniks, docs/decorators/put, put, @put, decorator, PUT, ApiResult, send(component), ${passengerId}, send, endpoint, Endpoint, bodyKey, DataProviderKey, configurationKey">
9
- <meta name="concorde-doc-id" content="docs/decorators/put">
10
- <link rel="canonical" href="https://concorde.supersoniks.org/docs/decorators/put">
11
- <link rel="alternate" type="text/markdown" href="https://concorde.supersoniks.org/docs/decorators/put.md">
12
- </head>
13
- <body>
14
- <header>
15
- <p><a href="/docs/index.html">Concorde documentation</a> · <a href="https://concorde.supersoniks.org/docs/decorators/put">same URL (interactive)</a> · <a href="/llms.txt">llms.txt</a></p>
16
- </header>
17
- <main>
18
- <article>
19
- <p class="doc-lead" id="doc-summary"><strong>Concorde decorator — @put</strong>. Sends the value of a publisher as the body of a PUT request, to replace a resource, and stores the response in an ApiResult&lt;T&gt; property. It takes the same arguments, options and send(component) handle <span>Doc ID: <code>docs/decorators/put</code>. Keywords: Concorde, supersoniks, docs/decorators/put, put, @put, decorator, PUT, ApiResult, send(component), ${passengerId}, send, endpoint, Endpoint, bodyKey, DataProviderKey, configurationKey. URL: <a href="https://concorde.supersoniks.org/docs/decorators/put">https://concorde.supersoniks.org/docs/decorators/put</a>.</span></p>
20
- <h1 id="put">@put</h1>
21
- <p>Sends the value of a publisher as the body of a <code>PUT</code> request, to replace a resource, and stores the response in an <code>ApiResult&lt;T&gt;</code> property. It takes the same arguments, options and <code>send(component)</code> handle as <a href="/docs/decorators/post">@post</a>; only the HTTP method differs.</p>
22
- <h2 id="import">Import</h2>
23
- <pre><code class="language-typescript">import { put, type ApiResult } from &quot;@supersoniks/concorde/decorators&quot;;
24
- import { DataProviderKey } from &quot;@supersoniks/concorde/dataProviderKey&quot;;
25
- import { Endpoint } from &quot;@supersoniks/concorde/utils/endpoint&quot;;
26
- </code></pre>
27
- <h2 id="basic-usage">Basic usage</h2>
28
- <p>The full passenger record is sent on connect and after each body mutation. Placeholders such as <code>${passengerId}</code> are resolved on the host component.</p>
29
- <pre><code class="language-typescript">type Passenger = { name: string; flight: string; seat: string };
30
-
31
- const passengerKey = new DataProviderKey&amp;lt;Passenger&amp;gt;(&quot;passengerForm&quot;);
32
- const savePassenger = put(
33
- new Endpoint&amp;lt;Passenger, { passengerId: string }&amp;gt;(&quot;passengers/${passengerId}&quot;),
34
- passengerKey,
35
- { autoPostOnBodyMutation: false },
36
- );
37
-
38
- @property() passengerId = &quot;ada-lindqvist&quot;;
39
-
40
- @savePassenger
41
- @state()
42
- payload?: ApiResult&amp;lt;Passenger&amp;gt;;
43
-
44
- async save() {
45
- await savePassenger.send(this);
46
- }
47
- </code></pre>
48
- <p>Triggers, the <code>send</code> method decorator and every option are described on <a href="/docs/decorators/post">@post</a>.</p>
49
- <h2 id="api-reference">API reference</h2>
50
- <table>
51
- <thead>
52
- <tr>
53
- <th>Argument</th>
54
- <th>Type</th>
55
- <th>Description</th>
56
- </tr>
57
- </thead>
58
- <tbody><tr>
59
- <td><code>endpoint</code></td>
60
- <td><code>Endpoint&lt;T&gt;</code></td>
61
- <td>Resource path and response type</td>
62
- </tr>
63
- <tr>
64
- <td><code>bodyKey</code></td>
65
- <td><code>DataProviderKey&lt;B&gt;</code></td>
66
- <td>Publisher read as the full replacement body</td>
67
- </tr>
68
- <tr>
69
- <td><code>configurationKey</code></td>
70
- <td><code>DataProviderKey&lt;APIConfiguration&gt;</code> (optional)</td>
71
- <td>API configuration publisher. Default: HTML scope</td>
72
- </tr>
73
- <tr>
74
- <td><code>options</code></td>
75
- <td><code>PutOptions</code></td>
76
- <td>Same as <a href="/docs/decorators/post">@post options</a></td>
77
- </tr>
78
- </tbody></table>
79
-
80
- </article>
81
- </main>
82
- </body>
83
- </html>
@@ -1,51 +0,0 @@
1
- # @put
2
-
3
- Sends the value of a publisher as the body of a `PUT` request, to replace a resource, and stores the response in an `ApiResult<T>` property. It takes the same arguments, options and `send(component)` handle as [@post](/docs/decorators/post); only the HTTP method differs.
4
-
5
- ## Import
6
-
7
- <sonic-code language="typescript">
8
- <template>
9
- import { put, type ApiResult } from "@supersoniks/concorde/decorators";
10
- import { DataProviderKey } from "@supersoniks/concorde/dataProviderKey";
11
- import { Endpoint } from "@supersoniks/concorde/utils/endpoint";
12
- </template>
13
- </sonic-code>
14
-
15
- ## Basic usage
16
-
17
- The full passenger record is sent on connect and after each body mutation. Placeholders such as `${passengerId}` are resolved on the host component.
18
-
19
- <sonic-code language="typescript">
20
- <template>
21
- type Passenger = { name: string; flight: string; seat: string };
22
-
23
- const passengerKey = new DataProviderKey&lt;Passenger&gt;("passengerForm");
24
- const savePassenger = put(
25
- new Endpoint&lt;Passenger, { passengerId: string }&gt;("passengers/${passengerId}"),
26
- passengerKey,
27
- { autoPostOnBodyMutation: false },
28
- );
29
-
30
- @property() passengerId = "ada-lindqvist";
31
-
32
- @savePassenger
33
- @state()
34
- payload?: ApiResult&lt;Passenger&gt;;
35
-
36
- async save() {
37
- await savePassenger.send(this);
38
- }
39
- </template>
40
- </sonic-code>
41
-
42
- Triggers, the `send` method decorator and every option are described on [@post](/docs/decorators/post).
43
-
44
- ## API reference
45
-
46
- | Argument | Type | Description |
47
- |----------|------|-------------|
48
- | `endpoint` | `Endpoint<T>` | Resource path and response type |
49
- | `bodyKey` | `DataProviderKey<B>` | Publisher read as the full replacement body |
50
- | `configurationKey` | `DataProviderKey<APIConfiguration>` (optional) | API configuration publisher. Default: HTML scope |
51
- | `options` | `PutOptions` | Same as [@post options](/docs/decorators/post) |
@@ -1,91 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en" data-doc-url="https://concorde.supersoniks.org/docs/decorators/subscribe" data-doc-id="docs/decorators/subscribe">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>@subscribe — Concorde by Supersoniks</title>
7
- <meta name="description" content="@subscribe(key) keeps a component property in sync with one path of the store: when a publisher assigns that path, the property updates and the component re-renders. It is read-only; use @publish to w">
8
- <meta name="keywords" content="Concorde, supersoniks, docs/decorators/subscribe, subscribe, @subscribe, decorator, @subscribe(key), at that path. Add , ${prop}, seatIndex, person, null, undefined, dataProvider, key, DataProviderKey">
9
- <meta name="concorde-doc-id" content="docs/decorators/subscribe">
10
- <link rel="canonical" href="https://concorde.supersoniks.org/docs/decorators/subscribe">
11
- <link rel="alternate" type="text/markdown" href="https://concorde.supersoniks.org/docs/decorators/subscribe.md">
12
- </head>
13
- <body>
14
- <header>
15
- <p><a href="/docs/index.html">Concorde documentation</a> · <a href="https://concorde.supersoniks.org/docs/decorators/subscribe">same URL (interactive)</a> · <a href="/llms.txt">llms.txt</a></p>
16
- </header>
17
- <main>
18
- <article>
19
- <p class="doc-lead" id="doc-summary"><strong>Concorde decorator — @subscribe</strong>. @subscribe(key) keeps a component property in sync with one path of the store: when a publisher assigns that path, the property updates and the component re-renders. It is read-only; use @publish to w <span>Doc ID: <code>docs/decorators/subscribe</code>. Keywords: Concorde, supersoniks, docs/decorators/subscribe, subscribe, @subscribe, decorator, @subscribe(key), at that path. Add , ${prop}, seatIndex, person, null, undefined, dataProvider, key, DataProviderKey. URL: <a href="https://concorde.supersoniks.org/docs/decorators/subscribe">https://concorde.supersoniks.org/docs/decorators/subscribe</a>.</span></p>
20
- <h1 id="subscribe">@subscribe</h1>
21
- <p><code>@subscribe(key)</code> keeps a component property in sync with one path of the store: when a publisher assigns that path, the property updates and the component re-renders. It is read-only; use <a href="/docs/decorators/publish">@publish</a> to write and <a href="/docs/directives/sub">sub()</a> to read inside a template. See <a href="/docs/getting-started/dataFlow">Data flow</a> for the overall model.</p>
22
- <h2 id="import">Import</h2>
23
- <pre><code class="language-typescript">import { subscribe } from &quot;@supersoniks/concorde/decorators&quot;;
24
- import { DataProviderKey } from &quot;@supersoniks/concorde/dataProviderKey&quot;;
25
-
26
- type Cockpit = { altitude: number };
27
- const cockpitKey = new DataProviderKey&amp;lt;Cockpit&amp;gt;(&quot;cockpit&quot;);
28
-
29
- @subscribe(cockpitKey.altitude)
30
- @state()
31
- altitude = 0;
32
- </code></pre>
33
- <h2 id="static-path">Static path</h2>
34
- <p>The key is a <a href="/docs/misc/dataProviderKey">DataProviderKey</a>: the property type must match <code>T</code> at that path. Add <code>@state()</code> so Lit re-renders. Until the publisher holds a value, the property keeps its initializer.</p>
35
- <pre><code class="language-typescript">type Flight = { code: string; gate: string; status: string };
36
- const flightKey = new DataProviderKey&amp;lt;Flight&amp;gt;(&quot;flight&quot;);
37
-
38
- @subscribe(flightKey)
39
- @state()
40
- flight: Flight | null = null;
41
- </code></pre>
42
- <h2 id="dynamic-path">Dynamic path</h2>
43
- <p><code>${prop}</code> placeholders resolve from properties of the same component. Declare them in the key&#39;s second generic so TypeScript requires them on the host. When <code>seatIndex</code> changes, the path is resolved again and <code>person</code> refreshes; while the placeholder is <code>null</code> or <code>undefined</code>, the subscription is inactive. Resolution rules: <a href="/docs/misc/dynamic-path">Dynamic paths</a>.</p>
44
- <pre><code class="language-typescript">type OnBoard = { name: string; role: string; seat: string };
45
- const personKey = new DataProviderKey&amp;lt;OnBoard, { seatIndex: number }&amp;gt;(
46
- &quot;demoOnBoard.${seatIndex}&quot;,
47
- );
48
-
49
- @property({ type: Number }) seatIndex = 0;
50
-
51
- @subscribe(personKey)
52
- @state()
53
- person: OnBoard | null = null;
54
- </code></pre>
55
- <pre><code>&lt;docs-demo-sources for=&quot;demo-subscribe-dynamic&quot;&gt;&lt;/docs-demo-sources&gt;
56
- &lt;demo-subscribe-dynamic&gt;&lt;/demo-subscribe-dynamic&gt;
57
- </code></pre>
58
- <h2 id="ancestor-scope">Ancestor scope</h2>
59
- <p>Inside a list row or a <code>dataProvider</code> wrapper, read the path from the closest ancestor with <a href="/docs/decorators/ancestor-attribute">@ancestorAttribute</a>, then use it as the placeholder.</p>
60
- <pre><code class="language-typescript">const rowKey = new DataProviderKey&amp;lt;OnBoard, { dataProvider: string | null }&amp;gt;(
61
- &quot;${dataProvider}&quot;,
62
- );
63
-
64
- @ancestorAttribute(&quot;dataProvider&quot;)
65
- dataProvider: string | null = null;
66
-
67
- @subscribe(rowKey)
68
- @state()
69
- person: OnBoard | null = null;
70
- </code></pre>
71
- <h2 id="api-reference">API reference</h2>
72
- <table>
73
- <thead>
74
- <tr>
75
- <th>Argument</th>
76
- <th>Type</th>
77
- <th>Description</th>
78
- </tr>
79
- </thead>
80
- <tbody><tr>
81
- <td><code>key</code></td>
82
- <td><code>DataProviderKey&lt;T, U&gt;</code></td>
83
- <td>Path to read. <code>U</code> lists the host properties used by <code>${…}</code> placeholders</td>
84
- </tr>
85
- </tbody></table>
86
- <p>The decorated property is typed <code>T</code> (optionally <code>| null</code> or <code>| undefined</code>). The subscription starts when the component connects and stops when it disconnects.</p>
87
-
88
- </article>
89
- </main>
90
- </body>
91
- </html>
@@ -1,87 +0,0 @@
1
- # @subscribe
2
-
3
- `@subscribe(key)` keeps a component property in sync with one path of the store: when a publisher assigns that path, the property updates and the component re-renders. It is read-only; use [@publish](/docs/decorators/publish) to write and [sub()](/docs/directives/sub) to read inside a template. See [Data flow](/docs/getting-started/dataFlow) for the overall model.
4
-
5
- ## Import
6
-
7
- <sonic-code language="typescript">
8
- <template>
9
- import { subscribe } from "@supersoniks/concorde/decorators";
10
- import { DataProviderKey } from "@supersoniks/concorde/dataProviderKey";
11
-
12
- type Cockpit = { altitude: number };
13
- const cockpitKey = new DataProviderKey&lt;Cockpit&gt;("cockpit");
14
-
15
- @subscribe(cockpitKey.altitude)
16
- @state()
17
- altitude = 0;
18
- </template>
19
- </sonic-code>
20
-
21
- ## Static path
22
-
23
- The key is a [DataProviderKey](/docs/misc/dataProviderKey): the property type must match `T` at that path. Add `@state()` so Lit re-renders. Until the publisher holds a value, the property keeps its initializer.
24
-
25
- <sonic-code language="typescript">
26
- <template>
27
- type Flight = { code: string; gate: string; status: string };
28
- const flightKey = new DataProviderKey&lt;Flight&gt;("flight");
29
-
30
- @subscribe(flightKey)
31
- @state()
32
- flight: Flight | null = null;
33
- </template>
34
- </sonic-code>
35
-
36
- ## Dynamic path
37
-
38
- `${prop}` placeholders resolve from properties of the same component. Declare them in the key's second generic so TypeScript requires them on the host. When `seatIndex` changes, the path is resolved again and `person` refreshes; while the placeholder is `null` or `undefined`, the subscription is inactive. Resolution rules: [Dynamic paths](/docs/misc/dynamic-path).
39
-
40
- <sonic-code language="typescript">
41
- <template>
42
- type OnBoard = { name: string; role: string; seat: string };
43
- const personKey = new DataProviderKey&lt;OnBoard, { seatIndex: number }&gt;(
44
- "demoOnBoard.${seatIndex}",
45
- );
46
-
47
- @property({ type: Number }) seatIndex = 0;
48
-
49
- @subscribe(personKey)
50
- @state()
51
- person: OnBoard | null = null;
52
- </template>
53
- </sonic-code>
54
-
55
- <sonic-code>
56
- <template>
57
- <docs-demo-sources for="demo-subscribe-dynamic"></docs-demo-sources>
58
- <demo-subscribe-dynamic></demo-subscribe-dynamic>
59
- </template>
60
- </sonic-code>
61
-
62
- ## Ancestor scope
63
-
64
- Inside a list row or a `dataProvider` wrapper, read the path from the closest ancestor with [@ancestorAttribute](/docs/decorators/ancestor-attribute), then use it as the placeholder.
65
-
66
- <sonic-code language="typescript">
67
- <template>
68
- const rowKey = new DataProviderKey&lt;OnBoard, { dataProvider: string | null }&gt;(
69
- "${dataProvider}",
70
- );
71
-
72
- @ancestorAttribute("dataProvider")
73
- dataProvider: string | null = null;
74
-
75
- @subscribe(rowKey)
76
- @state()
77
- person: OnBoard | null = null;
78
- </template>
79
- </sonic-code>
80
-
81
- ## API reference
82
-
83
- | Argument | Type | Description |
84
- |----------|------|-------------|
85
- | `key` | `DataProviderKey<T, U>` | Path to read. `U` lists the host properties used by `${…}` placeholders |
86
-
87
- The decorated property is typed `T` (optionally `| null` or `| undefined`). The subscription starts when the component connects and stops when it disconnects.
@@ -1,82 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en" data-doc-url="https://concorde.supersoniks.org/docs/decorators/wait-for-ancestors" data-doc-id="docs/decorators/wait-for-ancestors">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>@awaitConnectedAncestors — Concorde by Supersoniks</title>
7
- <meta name="description" content="Delays a component's connectedCallback until its matching ancestors are defined and connected, so context they set up (a dataProvider, a publisher, a fetched payload) is ready when the child starts. P">
8
- <meta name="keywords" content="Concorde, supersoniks, docs/decorators/wait-for-ancestors, wait-for-ancestors, @awaitConnectedAncestors, decorator, awaitConnectedAncestors, connectedCallback, dataProvider, @dispatchConnectedEvent, element.matches(), @dispatchConnectedEvent(), sonic-connected, CONNECTED, ...selectors: string[]">
9
- <meta name="concorde-doc-id" content="docs/decorators/wait-for-ancestors">
10
- <link rel="canonical" href="https://concorde.supersoniks.org/docs/decorators/wait-for-ancestors">
11
- <link rel="alternate" type="text/markdown" href="https://concorde.supersoniks.org/docs/decorators/wait-for-ancestors.md">
12
- </head>
13
- <body>
14
- <header>
15
- <p><a href="/docs/index.html">Concorde documentation</a> · <a href="https://concorde.supersoniks.org/docs/decorators/wait-for-ancestors">same URL (interactive)</a> · <a href="/llms.txt">llms.txt</a></p>
16
- </header>
17
- <main>
18
- <article>
19
- <p class="doc-lead" id="doc-summary"><strong>Concorde decorator — @awaitConnectedAncestors</strong>. Delays a component's connectedCallback until its matching ancestors are defined and connected, so context they set up (a dataProvider, a publisher, a fetched payload) is ready when the child starts. P <span>Doc ID: <code>docs/decorators/wait-for-ancestors</code>. Keywords: Concorde, supersoniks, docs/decorators/wait-for-ancestors, wait-for-ancestors, @awaitConnectedAncestors, decorator, awaitConnectedAncestors, connectedCallback, dataProvider, @dispatchConnectedEvent, element.matches(), @dispatchConnectedEvent(), sonic-connected, CONNECTED, ...selectors: string[]. URL: <a href="https://concorde.supersoniks.org/docs/decorators/wait-for-ancestors">https://concorde.supersoniks.org/docs/decorators/wait-for-ancestors</a>.</span></p>
20
- <h1 id="awaitconnectedancestors">@awaitConnectedAncestors</h1>
21
- <p>Delays a component&#39;s <code>connectedCallback</code> until its matching ancestors are defined and connected, so context they set up (a <code>dataProvider</code>, a publisher, a fetched payload) is ready when the child starts. Pair it with <code>@dispatchConnectedEvent</code> on the ancestors, which signals readiness.</p>
22
- <h2 id="import">Import</h2>
23
- <pre><code class="language-typescript">import {
24
- awaitConnectedAncestors,
25
- dispatchConnectedEvent,
26
- } from &quot;@supersoniks/concorde/decorators&quot;;
27
-
28
- @customElement(&quot;flight-scope&quot;)
29
- @dispatchConnectedEvent()
30
- export class FlightScope extends LitElement {}
31
-
32
- @customElement(&quot;gate-panel&quot;)
33
- @awaitConnectedAncestors(&quot;flight-scope&quot;)
34
- export class GatePanel extends LitElement {}
35
- </code></pre>
36
- <h2 id="wait-for-an-ancestor">Wait for an ancestor</h2>
37
- <p>Arguments are CSS selectors tested with <code>element.matches()</code> on each ancestor, across shadow roots. Here the parent element is not defined yet: the child stays uninitialized until you register it.</p>
38
- <pre><code>&lt;docs-demo-sources for=&quot;demo-wait-ancestors-section&quot;&gt;&lt;/docs-demo-sources&gt;
39
- &lt;demo-wait-ancestors-section&gt;&lt;/demo-wait-ancestors-section&gt;
40
- </code></pre>
41
- <h2 id="several-ancestors">Several ancestors</h2>
42
- <p>With several selectors, the child waits for every matching ancestor. Register both to initialize it, in any order.</p>
43
- <pre><code>&lt;docs-demo-sources for=&quot;demo-wait-ancestors-multi-section&quot;&gt;&lt;/docs-demo-sources&gt;
44
- &lt;demo-wait-ancestors-multi-section&gt;&lt;/demo-wait-ancestors-multi-section&gt;
45
- </code></pre>
46
- <h2 id="ancestor-already-connected">Ancestor already connected</h2>
47
- <p>When the ancestor is already connected, or no ancestor matches, the child initializes immediately.</p>
48
- <pre><code>&lt;docs-demo-sources for=&quot;demo-wait-ancestors-ready-section&quot;&gt;&lt;/docs-demo-sources&gt;
49
- &lt;demo-wait-ancestors-ready-section&gt;&lt;/demo-wait-ancestors-ready-section&gt;
50
- </code></pre>
51
- <h2 id="signal-readiness">Signal readiness</h2>
52
- <p><code>@dispatchConnectedEvent()</code> dispatches a bubbling <code>sonic-connected</code> event (exported as <code>CONNECTED</code>) at the end of the ancestor&#39;s <code>connectedCallback</code>. You can listen to it anywhere:</p>
53
- <pre><code class="language-typescript">import { CONNECTED } from &quot;@supersoniks/concorde/decorators&quot;;
54
-
55
- document.addEventListener(CONNECTED, (e) =&gt; console.log(&quot;ready:&quot;, e.target));
56
- </code></pre>
57
- <p>Elements without a hyphen in their tag name count as connected. A custom element ancestor that never dispatches the event releases the child after a <strong>5 second</strong> timeout, so decorate the ancestors you wait for.</p>
58
- <h2 id="api-reference">API reference</h2>
59
- <table>
60
- <thead>
61
- <tr>
62
- <th>Decorator</th>
63
- <th>Argument</th>
64
- <th>Description</th>
65
- </tr>
66
- </thead>
67
- <tbody><tr>
68
- <td><code>@awaitConnectedAncestors</code></td>
69
- <td><code>...selectors: string[]</code></td>
70
- <td>Class decorator. CSS selectors of the ancestors to wait for; with no selector, the class is left unchanged</td>
71
- </tr>
72
- <tr>
73
- <td><code>@dispatchConnectedEvent</code></td>
74
- <td>none</td>
75
- <td>Class decorator. Dispatches <code>CONNECTED</code> (<code>&quot;sonic-connected&quot;</code>, bubbles) after <code>connectedCallback</code></td>
76
- </tr>
77
- </tbody></table>
78
-
79
- </article>
80
- </main>
81
- </body>
82
- </html>
@@ -1,76 +0,0 @@
1
- # @awaitConnectedAncestors
2
-
3
- Delays a component's `connectedCallback` until its matching ancestors are defined and connected, so context they set up (a `dataProvider`, a publisher, a fetched payload) is ready when the child starts. Pair it with `@dispatchConnectedEvent` on the ancestors, which signals readiness.
4
-
5
- ## Import
6
-
7
- <sonic-code language="typescript">
8
- <template>
9
- import {
10
- awaitConnectedAncestors,
11
- dispatchConnectedEvent,
12
- } from "@supersoniks/concorde/decorators";
13
-
14
- @customElement("flight-scope")
15
- @dispatchConnectedEvent()
16
- export class FlightScope extends LitElement {}
17
-
18
- @customElement("gate-panel")
19
- @awaitConnectedAncestors("flight-scope")
20
- export class GatePanel extends LitElement {}
21
- </template>
22
- </sonic-code>
23
-
24
- ## Wait for an ancestor
25
-
26
- Arguments are CSS selectors tested with `element.matches()` on each ancestor, across shadow roots. Here the parent element is not defined yet: the child stays uninitialized until you register it.
27
-
28
- <sonic-code>
29
- <template>
30
- <docs-demo-sources for="demo-wait-ancestors-section"></docs-demo-sources>
31
- <demo-wait-ancestors-section></demo-wait-ancestors-section>
32
- </template>
33
- </sonic-code>
34
-
35
- ## Several ancestors
36
-
37
- With several selectors, the child waits for every matching ancestor. Register both to initialize it, in any order.
38
-
39
- <sonic-code>
40
- <template>
41
- <docs-demo-sources for="demo-wait-ancestors-multi-section"></docs-demo-sources>
42
- <demo-wait-ancestors-multi-section></demo-wait-ancestors-multi-section>
43
- </template>
44
- </sonic-code>
45
-
46
- ## Ancestor already connected
47
-
48
- When the ancestor is already connected, or no ancestor matches, the child initializes immediately.
49
-
50
- <sonic-code>
51
- <template>
52
- <docs-demo-sources for="demo-wait-ancestors-ready-section"></docs-demo-sources>
53
- <demo-wait-ancestors-ready-section></demo-wait-ancestors-ready-section>
54
- </template>
55
- </sonic-code>
56
-
57
- ## Signal readiness
58
-
59
- `@dispatchConnectedEvent()` dispatches a bubbling `sonic-connected` event (exported as `CONNECTED`) at the end of the ancestor's `connectedCallback`. You can listen to it anywhere:
60
-
61
- <sonic-code language="typescript">
62
- <template>
63
- import { CONNECTED } from "@supersoniks/concorde/decorators";
64
-
65
- document.addEventListener(CONNECTED, (e) => console.log("ready:", e.target));
66
- </template>
67
- </sonic-code>
68
-
69
- Elements without a hyphen in their tag name count as connected. A custom element ancestor that never dispatches the event releases the child after a **5 second** timeout, so decorate the ancestors you wait for.
70
-
71
- ## API reference
72
-
73
- | Decorator | Argument | Description |
74
- |-----------|----------|-------------|
75
- | `@awaitConnectedAncestors` | `...selectors: string[]` | Class decorator. CSS selectors of the ancestors to wait for; with no selector, the class is left unchanged |
76
- | `@dispatchConnectedEvent` | none | Class decorator. Dispatches `CONNECTED` (`"sonic-connected"`, bubbles) after `connectedCallback` |
@@ -1,79 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en" data-doc-url="https://concorde.supersoniks.org/docs/directives/sub" data-doc-id="docs/directives/sub">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>sub() — Concorde by Supersoniks</title>
7
- <meta name="description" content="sub(path) is a Lit directive that renders the current value of a store path and updates in place on every assignment. Use it inside html templates for read-only display; in a decorator, the same path ">
8
- <meta name="keywords" content="Concorde, supersoniks, docs/directives/sub, sub, sub(), directive, sub(path), html, ${prop}, null, undefined, skipEmptyPlaceholder, get(path), @supersoniks/concorde/utils">
9
- <meta name="concorde-doc-id" content="docs/directives/sub">
10
- <link rel="canonical" href="https://concorde.supersoniks.org/docs/directives/sub">
11
- <link rel="alternate" type="text/markdown" href="https://concorde.supersoniks.org/docs/directives/sub.md">
12
- </head>
13
- <body>
14
- <header>
15
- <p><a href="/docs/index.html">Concorde documentation</a> · <a href="https://concorde.supersoniks.org/docs/directives/sub">same URL (interactive)</a> · <a href="/llms.txt">llms.txt</a></p>
16
- </header>
17
- <main>
18
- <article>
19
- <p class="doc-lead" id="doc-summary"><strong>Concorde directive — sub()</strong>. sub(path) is a Lit directive that renders the current value of a store path and updates in place on every assignment. Use it inside html templates for read-only display; in a decorator, the same path <span>Doc ID: <code>docs/directives/sub</code>. Keywords: Concorde, supersoniks, docs/directives/sub, sub, sub(), directive, sub(path), html, ${prop}, null, undefined, skipEmptyPlaceholder, get(path), @supersoniks/concorde/utils. URL: <a href="https://concorde.supersoniks.org/docs/directives/sub">https://concorde.supersoniks.org/docs/directives/sub</a>.</span></p>
20
- <h1 id="sub">sub()</h1>
21
- <p><code>sub(path)</code> is a Lit directive that renders the current value of a store path and updates in place on every assignment. Use it inside <code>html</code> templates for read-only display; in a decorator, the same path goes to <a href="/docs/decorators/subscribe">@subscribe</a>. See <a href="/docs/getting-started/dataFlow">Data flow</a> for the overall model.</p>
22
- <h2 id="import">Import</h2>
23
- <pre><code class="language-typescript">import { sub } from &quot;@supersoniks/concorde/directives&quot;;
24
-
25
- render() {
26
- return html`&amp;lt;p&amp;gt;Altitude: ${sub(&quot;cockpit.altitude&quot;)} ft&amp;lt;/p&amp;gt;`;
27
- }
28
- </code></pre>
29
- <h2 id="dataproviderkey">DataProviderKey</h2>
30
- <p>Pass a <a href="/docs/misc/dataProviderKey">DataProviderKey</a> instead of a string to get a typo-safe path. Until the publisher holds a value, nothing is rendered.</p>
31
- <pre><code class="language-typescript">import { DataProviderKey } from &quot;@supersoniks/concorde/dataProviderKey&quot;;
32
-
33
- const flightKey = new DataProviderKey&amp;lt;{ code: string; gate: string }&amp;gt;(&quot;flight&quot;);
34
-
35
- render() {
36
- return html`&amp;lt;p&amp;gt;${sub(flightKey.code)} · gate ${sub(flightKey.gate)}&amp;lt;/p&amp;gt;`;
37
- }
38
- </code></pre>
39
- <h2 id="dynamic-path">Dynamic path</h2>
40
- <p><code>${prop}</code> placeholders resolve from properties of the component that renders the template; the directive re-subscribes when they change. While a placeholder is <code>null</code> or <code>undefined</code>, nothing is rendered. Rules: <a href="/docs/misc/dynamic-path">Dynamic paths</a>. <code>skipEmptyPlaceholder</code> is not available on <code>sub()</code>.</p>
41
- <pre><code class="language-typescript">const personKey = new DataProviderKey&amp;lt;OnBoard, { seatIndex: number }&amp;gt;(
42
- &quot;demoOnBoard.${seatIndex}&quot;,
43
- );
44
-
45
- @property({ type: Number }) seatIndex = 0;
46
-
47
- render() {
48
- return html`&amp;lt;strong&amp;gt;${sub(personKey.name)}&amp;lt;/strong&amp;gt; · ${sub(personKey.role)}`;
49
- }
50
- </code></pre>
51
- <pre><code>&lt;docs-demo-sources for=&quot;demo-sub-template&quot;&gt;&lt;/docs-demo-sources&gt;
52
- &lt;demo-sub-template&gt;&lt;/demo-sub-template&gt;
53
- </code></pre>
54
- <h2 id="sub-or-get">sub() or get()</h2>
55
- <p><code>get(path)</code> from <code>@supersoniks/concorde/utils</code> returns a one-time snapshot: in a template it never updates. Use <code>sub()</code> in templates and <code>get</code> / <code>set</code> / <code>dp</code> in imperative code.</p>
56
- <pre><code class="language-typescript">html`${sub(flightKey.gate)}`; // updates on gate change
57
- html`${get(flightKey.gate)}`; // frozen at first render
58
- </code></pre>
59
- <h2 id="api-reference">API reference</h2>
60
- <table>
61
- <thead>
62
- <tr>
63
- <th>Argument</th>
64
- <th>Type</th>
65
- <th>Description</th>
66
- </tr>
67
- </thead>
68
- <tbody><tr>
69
- <td><code>path</code></td>
70
- <td><code>string</code> or <code>DataProviderKey&lt;T, U&gt;</code></td>
71
- <td>Path to read. Placeholders resolve on the template host</td>
72
- </tr>
73
- </tbody></table>
74
- <p>The directive subscribes when its part connects and unsubscribes when it disconnects.</p>
75
-
76
- </article>
77
- </main>
78
- </body>
79
- </html>