@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,39 @@
1
+ #!/usr/bin/env bash
2
+ # Pousse un export filtré (lib publique) vers GitHub.
3
+ # Remplace le push mirror « tout le dépôt » : pas de doc, pas de captcha, pas de gitlab/.
4
+ #
5
+ # Variables CI requises :
6
+ # GITHUB_REPO_URL — ex. https://github.com/supersoniks/concorde.git
7
+ # GITHUB_TOKEN — PAT avec scope repo (masqué)
8
+ #
9
+ # Usage manuel (hors CI) :
10
+ # GITHUB_REPO_URL=https://github.com/supersoniks/concorde.git \
11
+ # GITHUB_TOKEN=ghp_… \
12
+ # bash gitlab/job_github_mirror.sh
13
+ #
14
+ set -euo pipefail
15
+
16
+ EXPORT_DIR="${CI_PROJECT_DIR:-$(cd "$(dirname "$0")/.." && pwd)}/.github-export"
17
+ BRANCH="${GITHUB_BRANCH:-master}"
18
+
19
+ if [[ -z "${GITHUB_REPO_URL:-}" || -z "${GITHUB_TOKEN:-}" ]]; then
20
+ echo "❌ GITHUB_REPO_URL et GITHUB_TOKEN sont requis."
21
+ exit 1
22
+ fi
23
+
24
+ echo "=== Export filtré ==="
25
+ node "${CI_PROJECT_DIR:-.}/scripts/github-export.mjs" "$EXPORT_DIR"
26
+
27
+ echo "=== Push vers GitHub ($BRANCH) ==="
28
+ cd "$EXPORT_DIR"
29
+ git init -q
30
+ git config user.email "ci@supersoniks.org"
31
+ git config user.name "GitLab CI"
32
+ git add -A
33
+ git commit -q -m "sync: export lib depuis GitLab ${CI_COMMIT_SHORT_SHA:-local}"
34
+
35
+ PUSH_URL="${GITHUB_REPO_URL/https:\/\//https://${GITHUB_TOKEN}@}"
36
+ git branch -M "$BRANCH"
37
+ git push -f "$PUSH_URL" "$BRANCH"
38
+
39
+ echo "=== Miroir GitHub à jour ==="
package/index.html CHANGED
@@ -1,10 +1,109 @@
1
1
  <!doctype html>
2
- <html lang="fr">
2
+ <html lang="en">
3
3
  <head>
4
4
  <meta charset="UTF-8" />
5
5
  <link rel="icon" type="image/svg+xml" href="./svg/favicon.svg" />
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
- <title>Concorde - A supersonic design system</title>
7
+ <title>Concorde by Supersoniks — Web components for every stack</title>
8
+ <meta
9
+ name="description"
10
+ content="Concorde is the Supersoniks Lit web-components library: UI, data binding, forms and themes that work in React, Vue, PHP or plain HTML. Docs, npm package @supersoniks/concorde, and llms.txt for agents."
11
+ />
12
+ <meta
13
+ name="keywords"
14
+ content="Concorde, Supersoniks, web components, Lit, design system, @supersoniks/concorde, DataProvider, sonic-button"
15
+ />
16
+ <link rel="canonical" href="https://concorde.supersoniks.org/" />
17
+ <link rel="alternate" type="text/markdown" href="/index.md" title="Markdown" />
18
+ <link rel="alternate" type="text/plain" href="/llms.txt" title="llms.txt" />
19
+ <meta property="og:type" content="website" />
20
+ <meta property="og:site_name" content="Concorde by Supersoniks" />
21
+ <meta property="og:title" content="Concorde by Supersoniks — Web components for every stack" />
22
+ <meta property="og:description" content="Open-source Lit web components framework: UI, data binding, forms and themes for React, Vue, PHP or plain HTML." />
23
+ <meta property="og:url" content="https://concorde.supersoniks.org/" />
24
+ <meta property="og:image" content="https://concorde.supersoniks.org/img/og-concorde.jpg" />
25
+ <meta property="og:image:width" content="1200" />
26
+ <meta property="og:image:height" content="630" />
27
+ <meta property="og:image:alt" content="Five Concorde aircraft parked nose to nose, black and white photo" />
28
+ <meta name="twitter:card" content="summary_large_image" />
29
+ <script type="application/ld+json">
30
+ {
31
+ "@context": "https://schema.org",
32
+ "@graph": [
33
+ {
34
+ "@type": "WebSite",
35
+ "@id": "https://concorde.supersoniks.org/#website",
36
+ "name": "Concorde",
37
+ "alternateName": "Concorde by Supersoniks",
38
+ "url": "https://concorde.supersoniks.org/",
39
+ "inLanguage": "en",
40
+ "publisher": {
41
+ "@id": "https://supersoniks.com/#organization"
42
+ }
43
+ },
44
+ {
45
+ "@type": "SoftwareApplication",
46
+ "@id": "https://concorde.supersoniks.org/#software",
47
+ "name": "Concorde",
48
+ "alternateName": "@supersoniks/concorde",
49
+ "description": "Concorde is an open-source web components framework built on Lit: UI components, data binding, forms, routing helpers and theming that work in React, Vue, PHP or plain HTML.",
50
+ "url": "https://concorde.supersoniks.org/",
51
+ "applicationCategory": "DeveloperApplication",
52
+ "applicationSubCategory": "Web components framework",
53
+ "operatingSystem": "Any (web browser)",
54
+ "programmingLanguage": "TypeScript",
55
+ "license": "https://opensource.org/licenses/MIT",
56
+ "downloadUrl": "https://www.npmjs.com/package/@supersoniks/concorde",
57
+ "softwareHelp": "https://concorde.supersoniks.org/docs/getting-started/start",
58
+ "image": "https://concorde.supersoniks.org/img/og-concorde.jpg",
59
+ "offers": {
60
+ "@type": "Offer",
61
+ "price": "0",
62
+ "priceCurrency": "EUR"
63
+ },
64
+ "author": {
65
+ "@id": "https://supersoniks.com/#organization"
66
+ },
67
+ "publisher": {
68
+ "@id": "https://supersoniks.com/#organization"
69
+ },
70
+ "sameAs": [
71
+ "https://www.npmjs.com/package/@supersoniks/concorde"
72
+ ]
73
+ },
74
+ {
75
+ "@type": "Organization",
76
+ "@id": "https://supersoniks.com/#organization",
77
+ "name": "Supersoniks",
78
+ "legalName": "SUPERSONIKS",
79
+ "url": "https://supersoniks.com/",
80
+ "telephone": "+33 2 47 68 93 25",
81
+ "address": {
82
+ "@type": "PostalAddress",
83
+ "streetAddress": "22 rue du Docteur Bretonneau",
84
+ "postalCode": "37000",
85
+ "addressLocality": "Tours",
86
+ "addressCountry": "FR"
87
+ },
88
+ "contactPoint": {
89
+ "@type": "ContactPoint",
90
+ "contactType": "customer service",
91
+ "telephone": "+33 2 47 68 93 25",
92
+ "url": "https://supersoniks.com/un-projet",
93
+ "availableLanguage": [
94
+ "fr",
95
+ "en"
96
+ ]
97
+ },
98
+ "sameAs": [
99
+ "https://www.linkedin.com/company/supersoniks/",
100
+ "https://www.facebook.com/supersoniks",
101
+ "https://www.instagram.com/agencesupersoniks/"
102
+ ]
103
+ }
104
+ ]
105
+ }
106
+ </script>
8
107
  <link rel="preconnect" href="https://fonts.googleapis.com" />
9
108
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
10
109
  <link
@@ -17,16 +116,69 @@
17
116
  <script src="https://cdn.jsdelivr.net/npm/marked@13.0.3"></script>
18
117
  <script type="module" src="./src/docs.ts"></script>
19
118
  <link href="./src/docs/tailwind/css/docs.css" rel="stylesheet" />
119
+ <style>
120
+ /*
121
+ Crawler/agent fallback stays in the HTML source (Is Agentic raw-text check)
122
+ but must not take clicks or layout away from the interactive homepage.
123
+ */
124
+ #docs-agent-content {
125
+ display: none !important;
126
+ }
127
+ </style>
20
128
  </head>
21
129
  <body class="px-4 sm:px-6 lg:px-10 2xl:px-20">
130
+ <!--
131
+ Static homepage copy for agents and no-JS crawlers (Is Agentic / Ora).
132
+ Hidden after JS boot; must stay in raw HTML with a clear H1 and 500+ chars.
133
+ -->
134
+ <section id="docs-agent-content" aria-hidden="true">
135
+ <h1>Concorde by Supersoniks</h1>
136
+ <p>
137
+ Concorde is an open-source Lit web-components library from Supersoniks.
138
+ It provides UI primitives, data binding, forms, routing helpers and
139
+ theming that run the same way in React, Vue, PHP templates or a static
140
+ HTML page. Install the npm package <code>@supersoniks/concorde</code>
141
+ and load components as custom elements.
142
+ </p>
143
+ <h2>Developer resources</h2>
144
+ <p>
145
+ Interactive documentation lives on this site. Machine-readable entry
146
+ points: <a href="/llms.txt">llms.txt</a>,
147
+ <a href="/llms-full.txt">llms-full.txt</a>,
148
+ <a href="/sitemap.xml">sitemap.xml</a>, and the
149
+ <a href="/docs/index.html">documentation index</a>. Prefer
150
+ <code>Accept: text/markdown</code> on doc pathnames (and this homepage)
151
+ to receive Markdown, or open <a href="/index.md">index.md</a>.
152
+ </p>
153
+ <h2>Getting started</h2>
154
+ <p>
155
+ Scaffold a Vite project with Concorde, Tailwind and agent skills, or
156
+ import individual components from
157
+ <code>@supersoniks/concorde</code>. Start with
158
+ <a href="/docs/getting-started/start">/docs/getting-started/start</a>,
159
+ data flow, components index, and AI agents. Topic hubs under
160
+ <code>/hubs/</code> cover decorators, remote data and form components.
161
+ </p>
162
+ <h2>What you can build</h2>
163
+ <p>
164
+ Use sonic-* custom elements for buttons, forms, lists, queues, SDUI
165
+ trees and more. Decorators such as @get, @post, @subscribe and @bind
166
+ wire components to a shared DataProvider without framework lock-in.
167
+ Concorde is MIT-licensed and maintained by Supersoniks for production
168
+ stacks that need one component set across many hosts.
169
+ <a href="/about">About</a> · <a href="/privacy">Privacy</a>
170
+ </p>
171
+ </section>
172
+
22
173
  <sonic-theme
23
174
  customIconLibraryPath="https://cdn.supersoniks.com/concorde/icons/fontawesome/v6/$prefix/$name.svg"
24
175
  customIconDefaultPrefix="regular"
25
- markdownsURL="src"
176
+ markdownsURL=""
26
177
  >
27
178
  <sonic-docs-header></sonic-docs-header>
28
179
  <sonic-router>
29
- <template data-route="^((?!.md).)*$">
180
+ <!-- Home only at `/` (doc pages use pathname `/docs/...` or `/core/...`). -->
181
+ <template data-route="^/?$">
30
182
  <docs-home></docs-home>
31
183
  </template>
32
184
  </sonic-router>
@@ -40,7 +192,7 @@
40
192
  ></docs-navigation>
41
193
  </aside>
42
194
  <main class="min-w-0 min-h-[100svh] pt-3">
43
- <div class="max-w-prose mx-auto xl:mx-0 justify-self-center">
195
+ <div class="max-w-prose mx-auto xl:mx-0">
44
196
  <docs-page
45
197
  noShadowDom
46
198
  class="prose max-w-none block py-8 prose-li:my-[.2em] leading-[1.5] lg:leading-[1.5] prose-h1:text-[2.4em] sm:prose-h1:text-[3.25em] prose-code:before:content-none prose-code:after:content-none prose-pre:font-mono"
package/package.json CHANGED
@@ -1,9 +1,10 @@
1
1
  {
2
2
  "name": "@supersoniks/concorde",
3
- "version": "5.1.1",
3
+ "version": "5.1.3-immutable.1",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "main": "",
7
+ "customElements": "custom-elements.json",
7
8
  "scripts": {
8
9
  "dev": "node scripts/create-search.js && LIB_NAME=docs vite --host 0.0.0.0 --port 3000",
9
10
  "prebuild": "node scripts/pre-build.mjs",
@@ -11,8 +12,9 @@
11
12
  "build": "tsc --build src/tsconfig.json && vite build",
12
13
  "build-docs": "LIB_NAME=docs vite build",
13
14
  "postbuild-docs": "node scripts/post-build-docs.js",
14
- "prepublishOnly": "node scripts/pre-publish.mjs",
15
+ "prepublishOnly": "node scripts/generate-cem.mjs && node scripts/pre-publish.mjs",
15
16
  "generate:sdui-catalog": "node scripts/generate-sdui-catalog.mjs",
17
+ "generate:cem": "node scripts/generate-cem.mjs",
16
18
  "test": "vitest --reporter verbose --watch",
17
19
  "test:ci": "vitest run --reporter verbose",
18
20
  "ai-init": "node scripts/ai-init.mjs"
@@ -88,6 +90,9 @@
88
90
  "./sdui-dom-snapshot": "./src/core/components/functional/sdui/sdui-dom-snapshot.ts",
89
91
  "./functional/sdui-dom-snapshot": "./src/core/components/functional/sdui/sdui-dom-snapshot.ts",
90
92
  "./functional/sdui/sdui-dom-snapshot": "./src/core/components/functional/sdui/sdui-dom-snapshot.ts",
93
+ "./sdui-immutable.spec": "./src/core/components/functional/sdui/sdui-immutable.spec.ts",
94
+ "./functional/sdui-immutable.spec": "./src/core/components/functional/sdui/sdui-immutable.spec.ts",
95
+ "./functional/sdui/sdui-immutable.spec": "./src/core/components/functional/sdui/sdui-immutable.spec.ts",
91
96
  "./sdui-incremental.spec": "./src/core/components/functional/sdui/sdui-incremental.spec.ts",
92
97
  "./functional/sdui-incremental.spec": "./src/core/components/functional/sdui/sdui-incremental.spec.ts",
93
98
  "./functional/sdui/sdui-incremental.spec": "./src/core/components/functional/sdui/sdui-incremental.spec.ts",
@@ -121,6 +126,9 @@
121
126
  "./functional/states/states.spec": "./src/core/components/functional/states/states.spec.ts",
122
127
  "./states": "./src/core/components/functional/states/states.ts",
123
128
  "./functional/states": "./src/core/components/functional/states/states.ts",
129
+ "./submit.spec": "./src/core/components/functional/submit/submit.spec.ts",
130
+ "./functional/submit.spec": "./src/core/components/functional/submit/submit.spec.ts",
131
+ "./functional/submit/submit.spec": "./src/core/components/functional/submit/submit.spec.ts",
124
132
  "./submit": "./src/core/components/functional/submit/submit.ts",
125
133
  "./functional/submit": "./src/core/components/functional/submit/submit.ts",
126
134
  "./subscriber": "./src/core/components/functional/subscriber/subscriber.ts",
@@ -379,6 +387,7 @@
379
387
  "./utils/Electron": "./src/core/utils/Electron.ts",
380
388
  "./utils/Format": "./src/core/utils/Format.ts",
381
389
  "./utils/HTML": "./src/core/utils/HTML.ts",
390
+ "./utils/LocationHandler.spec": "./src/core/utils/LocationHandler.spec.ts",
382
391
  "./utils/LocationHandler": "./src/core/utils/LocationHandler.ts",
383
392
  "./utils/Objects": "./src/core/utils/Objects.ts",
384
393
  "./utils/PublisherProxy": "./src/core/utils/PublisherProxy.ts",
@@ -389,19 +398,27 @@
389
398
  "./utils/api": "./src/core/utils/api.ts",
390
399
  "./utils/dataProviderKey.spec": "./src/core/utils/dataProviderKey.spec.ts",
391
400
  "./utils/dataProviderKey": "./src/core/utils/dataProviderKey.ts",
401
+ "./utils/deepReadonly.spec": "./src/core/utils/deepReadonly.spec.ts",
402
+ "./utils/deepReadonly": "./src/core/utils/deepReadonly.ts",
392
403
  "./utils/derive.spec": "./src/core/utils/derive.spec.ts",
393
404
  "./utils/derive": "./src/core/utils/derive.ts",
394
405
  "./utils/dismissed": "./src/core/utils/dismissed.ts",
395
406
  "./utils/dpOptions.spec": "./src/core/utils/dpOptions.spec.ts",
396
407
  "./utils/endpoint.spec": "./src/core/utils/endpoint.spec.ts",
397
408
  "./utils/endpoint": "./src/core/utils/endpoint.ts",
409
+ "./utils/immutableValue.spec": "./src/core/utils/immutableValue.spec.ts",
410
+ "./utils/immutableValue": "./src/core/utils/immutableValue.ts",
398
411
  "./utils/jsonataHelpers": "./src/core/utils/jsonataHelpers.ts",
399
412
  "./utils/jsonataRuntime": "./src/core/utils/jsonataRuntime.ts",
413
+ "./utils/nestedDotForm.spec": "./src/core/utils/nestedDotForm.spec.ts",
400
414
  "./utils/positioning.spec": "./src/core/utils/positioning.spec.ts",
401
415
  "./utils/positioning": "./src/core/utils/positioning.ts",
416
+ "./utils/publisherImmutable.spec": "./src/core/utils/publisherImmutable.spec.ts",
402
417
  "./utils/publisherPathKey.spec": "./src/core/utils/publisherPathKey.spec.ts",
403
418
  "./utils/route.spec": "./src/core/utils/route.spec.ts",
404
419
  "./utils/route": "./src/core/utils/route.ts",
420
+ "./utils/strictGet.spec": "./src/core/utils/strictGet.spec.ts",
421
+ "./utils/strictGet": "./src/core/utils/strictGet.ts",
405
422
  "./utils/url-pattern": "./src/core/utils/url-pattern.ts",
406
423
  "./code": "./src/docs/code.ts",
407
424
  "./docs-demo-sources": "./src/docs/components/docs-demo-sources.ts",
@@ -416,6 +433,7 @@
416
433
  "./undefined/docs-source-link": "./src/docs/components/docs-source-link.ts",
417
434
  "./docs-source-raw": "./src/docs/components/docs-source-raw.ts",
418
435
  "./undefined/docs-source-raw": "./src/docs/components/docs-source-raw.ts",
436
+ "./docs-location.spec": "./src/docs/docs-location.spec.ts",
419
437
  "./docs-location": "./src/docs/docs-location.ts",
420
438
  "./docs": "./src/docs/docs.ts",
421
439
  "./example/decorators-demo-bind-demos": "./src/docs/example/decorators-demo-bind-demos.ts",
@@ -426,8 +444,7 @@
426
444
  "./example/decorators-demo": "./src/docs/example/decorators-demo.ts",
427
445
  "./example/docs-api-config-demos": "./src/docs/example/docs-api-config-demos.ts",
428
446
  "./example/docs-boarding-pass-demo": "./src/docs/example/docs-boarding-pass-demo.ts",
429
- "./example/docs-input-autocomplete-demos": "./src/docs/example/docs-input-autocomplete-demos.ts",
430
- "./example/docs-joke-demos": "./src/docs/example/docs-joke-demos.ts",
447
+ "./example/docs-flight-demos": "./src/docs/example/docs-flight-demos.ts",
431
448
  "./example/docs-jsonata-demos": "./src/docs/example/docs-jsonata-demos.ts",
432
449
  "./example/docs-list-demos": "./src/docs/example/docs-list-demos.ts",
433
450
  "./example/docs-provider-keys": "./src/docs/example/docs-provider-keys.ts",
@@ -446,6 +463,7 @@
446
463
  "./mock-api/api-config-mock": "./src/docs/mock-api/api-config-mock.ts",
447
464
  "./mock-api/fixtures-jsonata": "./src/docs/mock-api/fixtures-jsonata.ts",
448
465
  "./mock-api/fixtures": "./src/docs/mock-api/fixtures.ts",
466
+ "./mock-api/flights": "./src/docs/mock-api/flights.ts",
449
467
  "./mock-api/register": "./src/docs/mock-api/register.ts",
450
468
  "./mock-api/router": "./src/docs/mock-api/router.ts",
451
469
  "./mock-api/service-worker": "./src/docs/mock-api/service-worker.ts",
@@ -3,7 +3,6 @@
3
3
  // src/docs/mock-api/urls.ts
4
4
  var DOCS_MOCK_API_BASE = "/docs-mock-api";
5
5
  var DOCS_MOCK_GEO_SERVICE = `${DOCS_MOCK_API_BASE}/geo/`;
6
- var DOCS_MOCK_JOKES_SERVICE = `${DOCS_MOCK_API_BASE}/jokes`;
7
6
 
8
7
  // src/docs/mock-api/api-config-mock.ts
9
8
  var DOCS_MOCK_TOKEN_VALID = "docs-mock-valid-token";
@@ -15,6 +14,11 @@
15
14
  var WORDING_CATALOG = {
16
15
  "api-config.greeting": { fr: "Bonjour", en: "Hello" },
17
16
  "api-config.farewell": { fr: "Au revoir", en: "Goodbye" },
17
+ "flight.boarding": { fr: "Embarquement imm\xE9diat", en: "Now boarding" },
18
+ "flight.gate": {
19
+ fr: "Rendez-vous porte <strong>B12</strong>",
20
+ en: "Please proceed to gate <strong>B12</strong>"
21
+ },
18
22
  "api-config.hint": {
19
23
  fr: "Libell\xE9s servis par le mock /wording/labels",
20
24
  en: "Labels served by mock /wording/labels"
@@ -114,6 +118,56 @@
114
118
  `${DOCS_MOCK_API_BASE}/wording/labels`
115
119
  ];
116
120
 
121
+ // src/docs/mock-api/flights.ts
122
+ var row = (code, direction, airport, city, time, gate, status) => ({
123
+ code,
124
+ direction,
125
+ airport,
126
+ city,
127
+ time,
128
+ gate,
129
+ status
130
+ });
131
+ var FLIGHTS = [
132
+ row("CN 001", "departures", "JFK", "New York", "08:15", "B12", "boarding"),
133
+ row("CN 014", "departures", "LHR", "London", "08:40", "A03", "on-time"),
134
+ row("CN 102", "departures", "GIG", "Rio de Janeiro", "09:05", "C21", "delayed"),
135
+ row("CN 220", "departures", "DKR", "Dakar", "09:30", "C07", "on-time"),
136
+ row("CN 305", "departures", "IAD", "Washington", "10:10", "B04", "cancelled"),
137
+ row("CN 412", "departures", "BAH", "Bahrain", "10:45", "D02", "delayed"),
138
+ row("CN 518", "departures", "SIN", "Singapore", "11:20", "D14", "on-time"),
139
+ row("CN 633", "departures", "YUL", "Montreal", "12:00", "A11", "on-time"),
140
+ row("CN 002", "arrivals", "JFK", "New York", "07:50", "B10", "landed"),
141
+ row("CN 015", "arrivals", "LHR", "London", "08:25", "A05", "landed"),
142
+ row("CN 103", "arrivals", "GIG", "Rio de Janeiro", "09:15", "C20", "delayed"),
143
+ row("CN 221", "arrivals", "DKR", "Dakar", "09:55", "C08", "on-time"),
144
+ row("CN 306", "arrivals", "IAD", "Washington", "10:35", "B06", "on-time"),
145
+ row("CN 413", "arrivals", "BAH", "Bahrain", "11:05", "D03", "cancelled"),
146
+ row("CN 519", "arrivals", "SIN", "Singapore", "11:40", "D15", "delayed"),
147
+ row("CN 634", "arrivals", "YUL", "Montreal", "12:30", "A12", "on-time")
148
+ ];
149
+ function buildFlightsResponse(url) {
150
+ const p = url.searchParams;
151
+ let pool = FLIGHTS.map((f, i) => ({ ...f, id: i + 1 }));
152
+ const direction = p.get("direction");
153
+ if (direction === "departures" || direction === "arrivals") {
154
+ pool = pool.filter((f) => f.direction === direction);
155
+ }
156
+ const q = p.get("q")?.trim().toLowerCase();
157
+ if (q) {
158
+ pool = pool.filter(
159
+ (f) => [f.code, f.city, f.airport].join(" ").toLowerCase().includes(q)
160
+ );
161
+ }
162
+ const statuses = (p.get("status") || "").split(",").map((s) => s.trim()).filter((s) => s && s !== "all");
163
+ if (statuses.length) {
164
+ pool = pool.filter((f) => statuses.includes(f.status));
165
+ }
166
+ const offset = Math.max(0, parseInt(p.get("offset") || "0", 10));
167
+ const limit = Math.max(1, parseInt(p.get("limit") || "20", 10));
168
+ return { flights: pool.slice(offset, offset + limit) };
169
+ }
170
+
117
171
  // src/docs/mock-api/fixtures.ts
118
172
  var reqresAvatar = (seed) => `https://i.pravatar.cc/150?u=${encodeURIComponent(seed)}`;
119
173
  var REQRES_EXTRA_NAMES = [
@@ -177,224 +231,6 @@
177
231
  { nom: "Montpellier", code: "34172" },
178
232
  { nom: "Rennes", code: "35238" }
179
233
  ];
180
- var jokeFlags = (partial = {}) => ({
181
- nsfw: false,
182
- religious: false,
183
- political: false,
184
- racist: false,
185
- sexist: false,
186
- explicit: false,
187
- ...partial
188
- });
189
- var SAMPLE_JOKES = [
190
- {
191
- categories: ["Programming"],
192
- createdAt: "2020-01-01 00:00:00",
193
- id: 1,
194
- lang: "en",
195
- joke: "Why do programmers prefer dark mode? Because light attracts bugs.",
196
- flags: jokeFlags(),
197
- safe: true,
198
- type: "single"
199
- },
200
- {
201
- categories: ["Misc"],
202
- createdAt: "2020-01-02 00:00:00",
203
- id: 2,
204
- lang: "en",
205
- joke: "I told my computer I needed a break \u2014 it said: no problem, I'll go to sleep.",
206
- flags: jokeFlags({ nsfw: true }),
207
- safe: false,
208
- type: "single"
209
- },
210
- {
211
- categories: ["Pun"],
212
- createdAt: "2020-01-03 00:00:00",
213
- id: 3,
214
- lang: "en",
215
- joke: "Concorde docs run offline: even the API is a local joke.",
216
- flags: jokeFlags(),
217
- safe: true,
218
- type: "single"
219
- },
220
- {
221
- categories: ["Animals"],
222
- createdAt: "2020-01-04 00:00:00",
223
- id: 4,
224
- lang: "en",
225
- joke: "The dog ate my homework and my pull request.",
226
- flags: jokeFlags({ political: true }),
227
- safe: true,
228
- type: "single"
229
- },
230
- {
231
- categories: ["Animals", "Pun"],
232
- createdAt: "2020-01-05 00:00:00",
233
- id: 5,
234
- lang: "fr",
235
- joke: "Quel est le chien pr\xE9f\xE9r\xE9 des d\xE9veloppeurs ? Le labrador Retriever.",
236
- flags: jokeFlags(),
237
- safe: true,
238
- type: "single"
239
- },
240
- {
241
- categories: ["Animals"],
242
- createdAt: "2020-01-06 00:00:00",
243
- id: 6,
244
- lang: "fr",
245
- joke: "Un chat et un chien discutent de TypeScript : le chien dit \xAB woof \xBB, le chat compile.",
246
- flags: jokeFlags({ racist: true }),
247
- safe: false,
248
- type: "single"
249
- },
250
- {
251
- categories: ["Misc"],
252
- createdAt: "2020-01-07 00:00:00",
253
- id: 7,
254
- lang: "fr",
255
- joke: "Pourquoi les blagues offline sont-elles fiables ? Parce qu'elles passent par le Service Worker.",
256
- flags: jokeFlags({ religious: true }),
257
- safe: true,
258
- type: "single"
259
- },
260
- {
261
- categories: ["Programming"],
262
- createdAt: "2020-01-08 00:00:00",
263
- id: 8,
264
- lang: "fr",
265
- joke: "Mon compilateur et mon chien : tous deux ignorent mes commandes jusqu'au build.",
266
- flags: jokeFlags({ sexist: true }),
267
- safe: false,
268
- type: "single"
269
- },
270
- {
271
- categories: ["Misc"],
272
- createdAt: "2020-01-09 00:00:00",
273
- id: 9,
274
- lang: "en",
275
- joke: "A SQL query walks into a bar, walks up to two tables and asks: Can I join you?",
276
- flags: jokeFlags({ explicit: true }),
277
- safe: false,
278
- type: "single"
279
- },
280
- {
281
- categories: ["Pun"],
282
- createdAt: "2020-01-10 00:00:00",
283
- id: 10,
284
- lang: "fr",
285
- joke: "J'ai cherch\xE9 \xAB chien \xBB dans la doc : le mock API a r\xE9pondu.",
286
- flags: jokeFlags(),
287
- safe: true,
288
- type: "single"
289
- },
290
- {
291
- categories: ["Misc"],
292
- createdAt: "2020-01-11 00:00:00",
293
- id: 11,
294
- lang: "en",
295
- joke: "There are only two hard things in Computer Science: cache invalidation and naming things.",
296
- flags: jokeFlags({ political: true, explicit: true }),
297
- safe: false,
298
- type: "single"
299
- },
300
- {
301
- categories: ["Animals"],
302
- createdAt: "2020-01-12 00:00:00",
303
- id: 12,
304
- lang: "fr",
305
- joke: "Le golden retriever a r\xE9cup\xE9r\xE9 la donn\xE9e du publisher.",
306
- flags: jokeFlags({ racist: true, sexist: true }),
307
- safe: false,
308
- type: "two-liner",
309
- setup: "Pourquoi le chien aime Concorde ?",
310
- delivery: "Parce qu'il sait fetch."
311
- },
312
- {
313
- categories: ["Misc"],
314
- createdAt: "2020-01-13 00:00:00",
315
- id: 13,
316
- lang: "en",
317
- joke: "My code and my conscience: both have too many warnings.",
318
- flags: jokeFlags(),
319
- safe: true,
320
- type: "single"
321
- },
322
- {
323
- categories: ["Programming"],
324
- createdAt: "2020-01-14 00:00:00",
325
- id: 14,
326
- lang: "en",
327
- joke: "Git blame is just a mirror.",
328
- flags: jokeFlags({ religious: true, political: true }),
329
- safe: false,
330
- type: "single"
331
- }
332
- ];
333
- function parseBlacklistFlags(url) {
334
- const keys = /* @__PURE__ */ new Set();
335
- const valid = [
336
- "nsfw",
337
- "religious",
338
- "political",
339
- "racist",
340
- "sexist",
341
- "explicit"
342
- ];
343
- const add = (raw) => {
344
- raw.split(",").map((s) => s.trim().toLowerCase()).forEach((part) => {
345
- if (valid.includes(part)) keys.add(part);
346
- });
347
- };
348
- url.searchParams.getAll("blacklistFlags").forEach(add);
349
- const single = url.searchParams.get("blacklistFlags");
350
- if (single) add(single);
351
- return [...keys];
352
- }
353
- function applyJokeBlacklist(jokes, blacklist) {
354
- if (!blacklist.length) return jokes;
355
- return jokes.filter(
356
- (j) => !blacklist.some((flag) => j.flags[flag] === true)
357
- );
358
- }
359
- function filterDocsJokes(jokes, url) {
360
- let pool = jokes;
361
- const contains = url.searchParams.get("contains")?.trim().toLowerCase();
362
- if (contains) {
363
- pool = pool.filter((j) => {
364
- const haystack = [j.joke, j.setup, j.delivery, ...j.categories].filter(Boolean).join(" ").toLowerCase();
365
- return haystack.includes(contains);
366
- });
367
- }
368
- const lang = url.searchParams.get("lang")?.trim().toLowerCase();
369
- if (lang === "fr" || lang === "en") {
370
- pool = pool.filter((j) => j.lang === lang);
371
- }
372
- pool = applyJokeBlacklist(pool, parseBlacklistFlags(url));
373
- return pool;
374
- }
375
- function buildJokeApiResponse(url) {
376
- const pool = filterDocsJokes(SAMPLE_JOKES, url);
377
- const amount = Math.max(
378
- 1,
379
- parseInt(url.searchParams.get("amount") || "10", 10)
380
- );
381
- const hasOffset = url.searchParams.has("offset");
382
- const limit = Math.max(
383
- 1,
384
- parseInt(
385
- url.searchParams.get("limit") || url.searchParams.get("per_page") || String(amount),
386
- 10
387
- )
388
- );
389
- const offset = Math.max(0, parseInt(url.searchParams.get("offset") || "0", 10));
390
- const start = hasOffset ? offset : 0;
391
- const count = hasOffset ? limit : amount;
392
- const jokes = pool.slice(start, start + count).map((j, i) => ({
393
- ...j,
394
- id: start + i + 1
395
- }));
396
- return { error: false, amount: jokes.length, jokes };
397
- }
398
234
 
399
235
  // src/docs/mock-api/fixtures-jsonata.ts
400
236
  var avatar = (seed) => `https://i.pravatar.cc/150?u=${encodeURIComponent(seed)}`;
@@ -583,7 +419,7 @@
583
419
  const offset = Math.max(0, parseInt(url.searchParams.get("offset") || "0", 10));
584
420
  const needle = (url.searchParams.get("nom") || url.searchParams.get("text") || url.searchParams.get("q") || url.searchParams.get("code") || "").trim().toLowerCase();
585
421
  const rows = needle ? DOCS_GEO_COMMUNES.filter(
586
- (row) => row.nom.toLowerCase().includes(needle) || row.code.toLowerCase().includes(needle)
422
+ (row2) => row2.nom.toLowerCase().includes(needle) || row2.code.toLowerCase().includes(needle)
587
423
  ) : DOCS_GEO_COMMUNES;
588
424
  return rows.slice(offset, offset + limit);
589
425
  }
@@ -698,9 +534,8 @@
698
534
  headers: { "X-Fetched-At": (/* @__PURE__ */ new Date()).toISOString() }
699
535
  });
700
536
  }
701
- const jokeMatch = subPath.match(/^\/jokes\/joke\/([^/]+)$/);
702
- if (jokeMatch) {
703
- return json2(buildJokeApiResponse(url));
537
+ if (subPath === "/flights") {
538
+ return json2(buildFlightsResponse(url));
704
539
  }
705
540
  return json2({ error: "Not found", path: subPath }, { status: 404 });
706
541
  }