@supersoniks/concorde 5.1.1 → 5.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (494) hide show
  1. package/.agents/skills/concorde-docs/SKILL.md +153 -0
  2. package/.agents/skills/{concorde-component-docs/template.md → concorde-docs/templates/component.md} +6 -2
  3. package/.agents/skills/concorde-docs/templates/decorator.md +43 -0
  4. package/.agents/skills/concorde-docs/templates/guide.md +25 -0
  5. package/PLAN-DOCS-AGENTS.md +80 -0
  6. package/README.md +4 -4
  7. package/ai/README.md +29 -41
  8. package/ai/skills/concorde/SKILL.md +54 -324
  9. package/ai/skills/concorde/rules/composition.md +32 -0
  10. package/ai/skills/concorde/rules/data.md +47 -0
  11. package/ai/skills/concorde/rules/http.md +25 -0
  12. package/ai/skills/concorde/rules/lists-forms.md +35 -0
  13. package/ai/skills/concorde/rules/styling.md +46 -0
  14. package/ai/skills/concorde/rules/troubleshooting.md +45 -0
  15. package/build-infos.json +1 -1
  16. package/concorde-core.bundle.js +21 -21
  17. package/concorde-core.es.js +977 -980
  18. package/custom-elements-manifest.public.config.mjs +8 -0
  19. package/{.tmp-cem/custom-elements.json → custom-elements.json} +11758 -8904
  20. package/dist/concorde-core.bundle.js +21 -21
  21. package/dist/concorde-core.es.js +977 -980
  22. package/dist/docs-mock-api-sw.js +58 -223
  23. package/dist/docs-mock-api-sw.js.map +4 -4
  24. package/dist/img/concorde/plane_01.jpg +0 -0
  25. package/dist/img/concorde/plane_02.jpg +0 -0
  26. package/dist/img/concorde/plane_03.jpg +0 -0
  27. package/dist/img/concorde/plane_04.jpg +0 -0
  28. package/dist/img/concorde/plane_05.jpg +0 -0
  29. package/dist/img/concorde/plane_06.jpg +0 -0
  30. package/dist/img/concorde/plane_07.jpg +0 -0
  31. package/dist/img/concorde/plane_08.jpg +0 -0
  32. package/dist/img/concorde/plane_09.jpg +0 -0
  33. package/dist/img/concorde/plane_10.jpg +0 -0
  34. package/dist/img/concorde/plane_11.jpg +0 -0
  35. package/dist/img/concorde/plane_12.jpg +0 -0
  36. package/dist/img/concorde/plane_13.jpg +0 -0
  37. package/dist/img/og-concorde.jpg +0 -0
  38. package/dist/robots.txt +11 -10
  39. package/docs/.htaccess +82 -0
  40. package/docs/404.html +15 -0
  41. package/docs/404.md +5 -0
  42. package/docs/about.html +111 -0
  43. package/docs/about.md +22 -0
  44. package/docs/assets/{index-Bb-_LRyY.js → index-6sS76xWj.js} +2625 -3158
  45. package/docs/assets/index-DkdPbH0F.css +1 -0
  46. package/docs/core/components/functional/date/date.html +211 -0
  47. package/docs/core/components/functional/date/date.md +150 -0
  48. package/docs/core/components/functional/fetch/fetch.html +180 -0
  49. package/docs/core/components/functional/fetch/fetch.md +108 -0
  50. package/docs/core/components/functional/if/if.html +65 -0
  51. package/docs/core/components/functional/if/if.md +34 -0
  52. package/docs/core/components/functional/jsonata/jsonata.html +110 -0
  53. package/docs/core/components/functional/jsonata/jsonata.md +61 -0
  54. package/docs/core/components/functional/list/list.html +200 -0
  55. package/docs/core/components/functional/list/list.md +125 -0
  56. package/docs/core/components/functional/mix/mix.html +78 -0
  57. package/docs/core/components/functional/mix/mix.md +46 -0
  58. package/docs/core/components/functional/queue/queue.html +155 -0
  59. package/docs/core/components/functional/queue/queue.md +51 -0
  60. package/docs/core/components/functional/router/router.html +154 -0
  61. package/docs/core/components/functional/router/router.md +93 -0
  62. package/docs/core/components/functional/sdui/sdui-extension-points.html +127 -0
  63. package/docs/core/components/functional/sdui/sdui-extension-points.md +94 -0
  64. package/docs/core/components/functional/sdui/sdui.html +397 -0
  65. package/docs/core/components/functional/sdui/sdui.md +307 -0
  66. package/docs/core/components/functional/states/states.html +141 -0
  67. package/docs/core/components/functional/states/states.md +112 -0
  68. package/docs/core/components/functional/submit/submit.html +178 -0
  69. package/docs/core/components/functional/submit/submit.md +106 -0
  70. package/docs/core/components/functional/subscriber/subscriber.html +68 -0
  71. package/docs/core/components/functional/subscriber/subscriber.md +91 -0
  72. package/docs/core/components/functional/translation/translation.html +60 -0
  73. package/docs/core/components/functional/translation/translation.md +38 -0
  74. package/docs/core/components/functional/value/value.html +81 -0
  75. package/docs/core/components/functional/value/value.md +47 -0
  76. package/docs/core/components/ui/alert/alert.html +201 -0
  77. package/docs/core/components/ui/alert/alert.md +186 -0
  78. package/docs/core/components/ui/alert-messages/alert-messages.html +132 -0
  79. package/docs/core/components/ui/alert-messages/alert-messages.md +85 -0
  80. package/docs/core/components/ui/badge/badge.html +197 -0
  81. package/docs/core/components/ui/badge/badge.md +181 -0
  82. package/docs/core/components/ui/button/button.html +309 -0
  83. package/docs/core/components/ui/button/button.md +216 -0
  84. package/docs/core/components/ui/captcha/captcha.html +80 -0
  85. package/docs/core/components/ui/captcha/captcha.md +56 -0
  86. package/docs/core/components/ui/card/card.html +254 -0
  87. package/docs/core/components/ui/card/card.md +215 -0
  88. package/docs/core/components/ui/divider/divider.html +144 -0
  89. package/docs/core/components/ui/divider/divider.md +126 -0
  90. package/docs/core/components/ui/form/checkbox/checkbox.html +200 -0
  91. package/docs/core/components/ui/form/checkbox/checkbox.md +125 -0
  92. package/docs/core/components/ui/form/fieldset/fieldset.html +238 -0
  93. package/docs/core/components/ui/form/fieldset/fieldset.md +161 -0
  94. package/docs/core/components/ui/form/form-actions/form-actions.html +122 -0
  95. package/docs/core/components/ui/form/form-actions/form-actions.md +98 -0
  96. package/docs/core/components/ui/form/form-layout/form-layout.html +115 -0
  97. package/docs/core/components/ui/form/form-layout/form-layout.md +109 -0
  98. package/docs/core/components/ui/form/input/input.html +235 -0
  99. package/docs/core/components/ui/form/input/input.md +142 -0
  100. package/docs/core/components/ui/form/radio/radio.html +144 -0
  101. package/docs/core/components/ui/form/radio/radio.md +78 -0
  102. package/docs/core/components/ui/form/select/select.html +178 -0
  103. package/docs/core/components/ui/form/select/select.md +86 -0
  104. package/docs/core/components/ui/form/switch/switch.html +146 -0
  105. package/docs/core/components/ui/form/switch/switch.md +80 -0
  106. package/docs/core/components/ui/form/textarea/textarea.html +162 -0
  107. package/docs/core/components/ui/form/textarea/textarea.md +82 -0
  108. package/docs/core/components/ui/group/group.html +113 -0
  109. package/docs/core/components/ui/group/group.md +77 -0
  110. package/docs/core/components/ui/icon/icon.html +223 -0
  111. package/docs/core/components/ui/icon/icon.md +214 -0
  112. package/docs/core/components/ui/image/image.html +194 -0
  113. package/docs/core/components/ui/image/image.md +167 -0
  114. package/docs/core/components/ui/link/link.html +101 -0
  115. package/docs/core/components/ui/link/link.md +81 -0
  116. package/docs/core/components/ui/loader/loader.html +114 -0
  117. package/docs/core/components/ui/loader/loader.md +87 -0
  118. package/docs/core/components/ui/menu/menu.html +395 -0
  119. package/docs/core/components/ui/menu/menu.md +370 -0
  120. package/docs/core/components/ui/modal/modal.html +324 -0
  121. package/docs/core/components/ui/modal/modal.md +211 -0
  122. package/docs/core/components/ui/pop/pop.html +250 -0
  123. package/docs/core/components/ui/pop/pop.md +216 -0
  124. package/docs/core/components/ui/progress/progress.html +132 -0
  125. package/docs/core/components/ui/progress/progress.md +109 -0
  126. package/docs/core/components/ui/table/table.html +333 -0
  127. package/docs/core/components/ui/table/table.md +267 -0
  128. package/docs/core/components/ui/theme/theme.html +116 -0
  129. package/docs/core/components/ui/theme/theme.md +97 -0
  130. package/docs/core/components/ui/toast/toast.html +185 -0
  131. package/docs/core/components/ui/toast/toast.md +147 -0
  132. package/docs/core/components/ui/tooltip/tooltip.html +112 -0
  133. package/docs/core/components/ui/tooltip/tooltip.md +89 -0
  134. package/docs/custom-elements.json +16559 -0
  135. package/docs/docs/decorators/ancestor-attribute.html +71 -0
  136. package/docs/docs/decorators/ancestor-attribute.md +59 -0
  137. package/docs/docs/decorators/auto-subscribe.html +61 -0
  138. package/docs/docs/decorators/auto-subscribe.md +40 -0
  139. package/docs/docs/decorators/bind.html +87 -0
  140. package/docs/docs/decorators/bind.md +76 -0
  141. package/docs/docs/decorators/get.html +166 -0
  142. package/docs/docs/decorators/get.md +160 -0
  143. package/docs/docs/decorators/handle.html +139 -0
  144. package/docs/docs/decorators/handle.md +119 -0
  145. package/docs/docs/decorators/on-assign.html +72 -0
  146. package/docs/docs/decorators/on-assign.md +63 -0
  147. package/docs/docs/decorators/patch.html +76 -0
  148. package/docs/docs/decorators/patch.md +44 -0
  149. package/docs/docs/decorators/post.html +150 -0
  150. package/docs/docs/decorators/post.md +134 -0
  151. package/docs/docs/decorators/publish.html +74 -0
  152. package/docs/docs/decorators/publish.md +56 -0
  153. package/docs/docs/decorators/put.html +83 -0
  154. package/docs/docs/decorators/put.md +51 -0
  155. package/docs/docs/decorators/subscribe.html +91 -0
  156. package/docs/docs/decorators/subscribe.md +87 -0
  157. package/docs/docs/decorators/wait-for-ancestors.html +82 -0
  158. package/docs/docs/decorators/wait-for-ancestors.md +76 -0
  159. package/docs/docs/directives/sub.html +79 -0
  160. package/docs/docs/directives/sub.md +75 -0
  161. package/docs/docs/directives/t.html +91 -0
  162. package/docs/docs/directives/t.md +73 -0
  163. package/docs/docs/getting-started/ai-agents.html +130 -0
  164. package/docs/docs/getting-started/ai-agents.md +50 -0
  165. package/docs/docs/getting-started/components.html +27 -0
  166. package/docs/docs/getting-started/create-a-component.html +108 -0
  167. package/{src/docs/_getting-started → docs/docs/getting-started}/create-a-component.md +3 -6
  168. package/docs/docs/getting-started/dataFlow.html +174 -0
  169. package/{src/docs/_core-concept → docs/docs/getting-started}/dataFlow.md +18 -19
  170. package/docs/docs/getting-started/installation.html +69 -0
  171. package/docs/docs/getting-started/installation.md +36 -0
  172. package/docs/docs/getting-started/my-first-component.html +180 -0
  173. package/{src/docs/_getting-started → docs/docs/getting-started}/my-first-component.md +5 -14
  174. package/docs/docs/getting-started/start.html +47 -0
  175. package/{src/docs/_getting-started → docs/docs/getting-started}/start.md +1 -13
  176. package/docs/docs/getting-started/theming.html +334 -0
  177. package/docs/docs/index.html +99 -0
  178. package/docs/docs/misc/api-configuration.html +149 -0
  179. package/{src/docs/_misc → docs/docs/misc}/api-configuration.md +10 -12
  180. package/docs/docs/misc/dataProviderKey.html +136 -0
  181. package/{src/docs/_misc → docs/docs/misc}/dataProviderKey.md +4 -4
  182. package/docs/docs/misc/docs-mock-api.html +155 -0
  183. package/{src/docs/_misc → docs/docs/misc}/docs-mock-api.md +12 -13
  184. package/docs/docs/misc/dynamic-path.html +181 -0
  185. package/{src/docs/_misc → docs/docs/misc}/dynamic-path.md +8 -8
  186. package/docs/docs/misc/endpoint.html +51 -0
  187. package/{src/docs/_misc → docs/docs/misc}/endpoint.md +8 -8
  188. package/docs/docs/misc/html-integration.html +45 -0
  189. package/{src/docs/_misc → docs/docs/misc}/html-integration.md +4 -5
  190. package/docs/docs-mock-api-sw.js +58 -223
  191. package/docs/docs-mock-api-sw.js.map +4 -4
  192. package/docs/hubs/decorators.html +438 -0
  193. package/docs/hubs/form-components.html +404 -0
  194. package/docs/hubs/remote-data.html +367 -0
  195. package/docs/img/archive/concorde-001-2cv.webp +0 -0
  196. package/docs/img/archive/concorde-red-arrows-2002-poster.jpg +0 -0
  197. package/docs/img/archive/concorde-red-arrows-2002.webm +0 -0
  198. package/docs/img/archive/credits.json +28 -0
  199. package/docs/img/concorde/plane_01.jpg +0 -0
  200. package/docs/img/concorde/plane_02.jpg +0 -0
  201. package/docs/img/concorde/plane_03.jpg +0 -0
  202. package/docs/img/concorde/plane_04.jpg +0 -0
  203. package/docs/img/concorde/plane_05.jpg +0 -0
  204. package/docs/img/concorde/plane_06.jpg +0 -0
  205. package/docs/img/concorde/plane_07.jpg +0 -0
  206. package/docs/img/concorde/plane_08.jpg +0 -0
  207. package/docs/img/concorde/plane_09.jpg +0 -0
  208. package/docs/img/concorde/plane_10.jpg +0 -0
  209. package/docs/img/concorde/plane_11.jpg +0 -0
  210. package/docs/img/concorde/plane_12.jpg +0 -0
  211. package/docs/img/concorde/plane_13.jpg +0 -0
  212. package/docs/img/og-concorde.jpg +0 -0
  213. package/docs/index.html +184 -68
  214. package/docs/index.md +22 -0
  215. package/docs/llms-full.txt +5779 -0
  216. package/docs/llms.txt +108 -0
  217. package/docs/privacy.html +122 -0
  218. package/docs/privacy.md +32 -0
  219. package/docs/robots.txt +11 -10
  220. package/docs/sitemap.xml +243 -0
  221. package/docs/src/core/components/functional/date/date.md +150 -0
  222. package/docs/src/core/components/functional/fetch/fetch.md +108 -0
  223. package/docs/src/core/components/functional/if/if.md +34 -0
  224. package/docs/src/core/components/functional/jsonata/jsonata.md +61 -0
  225. package/docs/src/core/components/functional/list/list.md +125 -0
  226. package/docs/src/core/components/functional/mix/mix.md +46 -0
  227. package/docs/src/core/components/functional/queue/queue.md +51 -0
  228. package/docs/src/core/components/functional/router/router.md +93 -0
  229. package/docs/src/core/components/functional/sdui/component-catalog.gaps.json +511 -0
  230. package/docs/src/core/components/functional/sdui/component-catalog.json +3103 -0
  231. package/docs/src/core/components/functional/sdui/default-library.json +108 -0
  232. package/docs/src/core/components/functional/sdui/example.json +32 -0
  233. package/docs/src/core/components/functional/sdui/sdui-extension-points.md +94 -0
  234. package/docs/src/core/components/functional/sdui/sdui.md +307 -0
  235. package/docs/src/core/components/functional/states/states.md +112 -0
  236. package/docs/src/core/components/functional/submit/submit.md +106 -0
  237. package/docs/src/core/components/functional/subscriber/subscriber.md +91 -0
  238. package/docs/src/core/components/functional/translation/translation.md +38 -0
  239. package/docs/src/core/components/functional/value/value.md +47 -0
  240. package/docs/src/core/components/ui/alert/alert.md +186 -0
  241. package/docs/src/core/components/ui/alert-messages/alert-messages.md +85 -0
  242. package/docs/src/core/components/ui/badge/badge.md +181 -0
  243. package/docs/src/core/components/ui/button/button.md +216 -0
  244. package/docs/src/core/components/ui/captcha/captcha.md +56 -0
  245. package/docs/src/core/components/ui/card/card.md +215 -0
  246. package/docs/src/core/components/ui/divider/divider.md +126 -0
  247. package/docs/src/core/components/ui/form/checkbox/checkbox.md +125 -0
  248. package/docs/src/core/components/ui/form/fieldset/fieldset.md +161 -0
  249. package/docs/src/core/components/ui/form/form-actions/form-actions.md +98 -0
  250. package/docs/src/core/components/ui/form/form-layout/form-layout.md +109 -0
  251. package/docs/src/core/components/ui/form/input/input.md +142 -0
  252. package/docs/src/core/components/ui/form/radio/radio.md +78 -0
  253. package/docs/src/core/components/ui/form/select/select.md +86 -0
  254. package/docs/src/core/components/ui/form/switch/switch.md +80 -0
  255. package/docs/src/core/components/ui/form/textarea/textarea.md +82 -0
  256. package/docs/src/core/components/ui/group/group.md +77 -0
  257. package/docs/src/core/components/ui/icon/icon.md +214 -0
  258. package/docs/src/core/components/ui/icon/icons.json +1 -0
  259. package/docs/src/core/components/ui/image/image.md +167 -0
  260. package/docs/src/core/components/ui/link/link.md +81 -0
  261. package/docs/src/core/components/ui/loader/loader.md +87 -0
  262. package/docs/src/core/components/ui/menu/menu.md +370 -0
  263. package/docs/src/core/components/ui/modal/modal.md +211 -0
  264. package/docs/src/core/components/ui/pop/pop.md +216 -0
  265. package/docs/src/core/components/ui/progress/progress.md +109 -0
  266. package/docs/src/core/components/ui/table/table.md +267 -0
  267. package/docs/src/core/components/ui/theme/theme.md +97 -0
  268. package/docs/src/core/components/ui/toast/toast.md +147 -0
  269. package/docs/src/core/components/ui/tooltip/tooltip.md +89 -0
  270. package/docs/src/docs/decorators/ancestor-attribute.md +59 -0
  271. package/docs/src/docs/decorators/auto-subscribe.md +40 -0
  272. package/docs/src/docs/decorators/bind.md +76 -0
  273. package/docs/src/docs/decorators/get.md +160 -0
  274. package/docs/src/docs/decorators/handle.md +119 -0
  275. package/docs/src/docs/decorators/on-assign.md +63 -0
  276. package/docs/src/docs/decorators/patch.md +44 -0
  277. package/docs/src/docs/decorators/post.md +134 -0
  278. package/docs/src/docs/decorators/publish.md +56 -0
  279. package/docs/src/docs/decorators/put.md +51 -0
  280. package/docs/src/docs/decorators/subscribe.md +87 -0
  281. package/docs/src/docs/decorators/wait-for-ancestors.md +76 -0
  282. package/docs/src/docs/directives/sub.md +75 -0
  283. package/docs/src/docs/directives/t.md +73 -0
  284. package/docs/src/docs/getting-started/ai-agents.md +50 -0
  285. package/docs/src/docs/getting-started/components.md +5 -0
  286. package/docs/src/docs/getting-started/create-a-component.md +136 -0
  287. package/docs/src/docs/getting-started/dataFlow.md +87 -0
  288. package/docs/src/docs/getting-started/installation.md +36 -0
  289. package/docs/src/docs/getting-started/my-first-component.md +227 -0
  290. package/docs/src/docs/getting-started/start.md +35 -0
  291. package/docs/src/docs/getting-started/theming.md +253 -0
  292. package/docs/src/docs/misc/api-configuration.md +79 -0
  293. package/docs/src/docs/misc/dataProviderKey.md +168 -0
  294. package/docs/src/docs/misc/docs-mock-api.md +62 -0
  295. package/docs/src/docs/misc/dynamic-path.md +71 -0
  296. package/docs/src/docs/misc/endpoint.md +45 -0
  297. package/docs/src/docs/misc/html-integration.md +14 -0
  298. package/docs/src/docs/search/docs-search.json +10332 -0
  299. package/docs/src/tag-list.json +1 -0
  300. package/docs/src/tsconfig-model.json +23 -0
  301. package/docs/src/tsconfig.json +1359 -0
  302. package/index.html +157 -5
  303. package/package.json +8 -4
  304. package/public/docs-mock-api-sw.js +58 -223
  305. package/public/docs-mock-api-sw.js.map +4 -4
  306. package/public/img/concorde/plane_01.jpg +0 -0
  307. package/public/img/concorde/plane_02.jpg +0 -0
  308. package/public/img/concorde/plane_03.jpg +0 -0
  309. package/public/img/concorde/plane_04.jpg +0 -0
  310. package/public/img/concorde/plane_05.jpg +0 -0
  311. package/public/img/concorde/plane_06.jpg +0 -0
  312. package/public/img/concorde/plane_07.jpg +0 -0
  313. package/public/img/concorde/plane_08.jpg +0 -0
  314. package/public/img/concorde/plane_09.jpg +0 -0
  315. package/public/img/concorde/plane_10.jpg +0 -0
  316. package/public/img/concorde/plane_11.jpg +0 -0
  317. package/public/img/concorde/plane_12.jpg +0 -0
  318. package/public/img/concorde/plane_13.jpg +0 -0
  319. package/public/img/og-concorde.jpg +0 -0
  320. package/public/robots.txt +11 -10
  321. package/scripts/ai-init.mjs +104 -379
  322. package/scripts/ai-init.test.mjs +81 -239
  323. package/scripts/docs-markdown-vite-plugin.ts +43 -0
  324. package/scripts/docs-public-url.mjs +56 -0
  325. package/scripts/docs.htaccess +82 -0
  326. package/scripts/generate-cem.mjs +244 -0
  327. package/scripts/generate-cem.test.mjs +122 -0
  328. package/scripts/generate-crawl-docs.mjs +233 -118
  329. package/scripts/generate-crawl-docs.test.mjs +124 -0
  330. package/scripts/generate-sdui-catalog.mjs +11 -10
  331. package/scripts/post-build-docs.js +37 -50
  332. package/scripts/pre-publish.mjs +2 -1
  333. package/scripts/site-pages.mjs +212 -0
  334. package/scripts/site-pages.test.mjs +116 -0
  335. package/site-pages/about.md +22 -0
  336. package/site-pages/privacy.md +32 -0
  337. package/src/core/components/functional/date/date.md +91 -231
  338. package/src/core/components/functional/fetch/fetch.md +66 -83
  339. package/src/core/components/functional/if/if.md +28 -3
  340. package/src/core/components/functional/jsonata/jsonata.md +42 -37
  341. package/src/core/components/functional/list/list.md +103 -43
  342. package/src/core/components/functional/mix/mix.md +31 -26
  343. package/src/core/components/functional/queue/queue.demo.ts +10 -7
  344. package/src/core/components/functional/queue/queue.md +40 -61
  345. package/src/core/components/functional/router/router.demo.ts +16 -16
  346. package/src/core/components/functional/router/router.md +64 -65
  347. package/src/core/components/functional/sdui/component-catalog.gaps.json +1 -1
  348. package/src/core/components/functional/sdui/component-catalog.json +1 -1
  349. package/src/core/components/functional/sdui/example.json +19 -86
  350. package/src/core/components/functional/sdui/sdui-extension-points.md +1 -1
  351. package/src/core/components/functional/sdui/sdui.md +187 -358
  352. package/src/core/components/functional/states/states.demo.ts +21 -22
  353. package/src/core/components/functional/states/states.md +86 -61
  354. package/src/core/components/functional/states/states.ts +1 -1
  355. package/src/core/components/functional/submit/submit.md +64 -72
  356. package/src/core/components/functional/translation/translation.md +38 -0
  357. package/src/core/components/functional/value/value.md +34 -22
  358. package/src/core/components/ui/alert/alert.md +48 -58
  359. package/src/core/components/ui/badge/badge.md +27 -34
  360. package/src/core/components/ui/button/button.md +139 -106
  361. package/src/core/components/ui/captcha/captcha.md +17 -32
  362. package/src/core/components/ui/card/card.md +6 -6
  363. package/src/core/components/ui/divider/divider.md +8 -11
  364. package/src/core/components/ui/form/checkbox/checkbox.md +90 -42
  365. package/src/core/components/ui/form/fieldset/fieldset.md +31 -75
  366. package/src/core/components/ui/form/form-actions/form-actions.md +14 -16
  367. package/src/core/components/ui/form/form-layout/form-layout.md +19 -29
  368. package/src/core/components/ui/form/input/input.md +95 -95
  369. package/src/core/components/ui/form/radio/radio.md +55 -34
  370. package/src/core/components/ui/form/select/select.md +60 -45
  371. package/src/core/components/ui/form/switch/switch.md +57 -34
  372. package/src/core/components/ui/form/textarea/textarea.md +55 -38
  373. package/src/core/components/ui/group/group.md +35 -33
  374. package/src/core/components/ui/icon/icon.md +4 -4
  375. package/src/core/components/ui/image/image.md +41 -107
  376. package/src/core/components/ui/link/link.md +6 -6
  377. package/src/core/components/ui/loader/loader.md +30 -55
  378. package/src/core/components/ui/menu/menu.md +27 -27
  379. package/src/core/components/ui/modal/modal.md +72 -96
  380. package/src/core/components/ui/pop/pop.md +80 -158
  381. package/src/core/components/ui/progress/progress.md +2 -2
  382. package/src/core/components/ui/table/table.md +91 -255
  383. package/src/core/components/ui/theme/theme.md +11 -36
  384. package/src/core/components/ui/toast/toast.md +48 -117
  385. package/src/core/components/ui/tooltip/tooltip.md +27 -62
  386. package/src/core/decorators/subscriber/bind.ts +9 -14
  387. package/src/core/utils/LocationHandler.spec.ts +80 -0
  388. package/src/core/utils/LocationHandler.ts +5 -9
  389. package/src/docs/components/docs-demo-sources.ts +55 -140
  390. package/src/docs/components/docs-lit-demo.ts +1 -3
  391. package/src/docs/components/docs-source-link.ts +0 -82
  392. package/src/docs/decorators/ancestor-attribute.md +59 -0
  393. package/src/docs/decorators/auto-subscribe.md +40 -0
  394. package/src/docs/decorators/bind.md +76 -0
  395. package/src/docs/decorators/get.md +160 -0
  396. package/src/docs/decorators/handle.md +119 -0
  397. package/src/docs/decorators/on-assign.md +63 -0
  398. package/src/docs/decorators/patch.md +44 -0
  399. package/src/docs/decorators/post.md +134 -0
  400. package/src/docs/decorators/publish.md +56 -0
  401. package/src/docs/decorators/put.md +51 -0
  402. package/src/docs/decorators/subscribe.md +87 -0
  403. package/src/docs/decorators/wait-for-ancestors.md +76 -0
  404. package/src/docs/directives/sub.md +75 -0
  405. package/src/docs/directives/t.md +73 -0
  406. package/src/docs/docs-location.spec.ts +56 -0
  407. package/src/docs/docs-location.ts +133 -32
  408. package/src/docs/docs.ts +1 -2
  409. package/src/docs/example/decorators-demo-bind-demos.ts +83 -135
  410. package/src/docs/example/decorators-demo-geo.ts +30 -19
  411. package/src/docs/example/decorators-demo-post.ts +88 -186
  412. package/src/docs/example/decorators-demo-subscribe-publish-get-demos.ts +165 -268
  413. package/src/docs/example/decorators-demo.ts +85 -98
  414. package/src/docs/example/docs-api-config-demos.ts +19 -20
  415. package/src/docs/example/docs-flight-demos.ts +147 -0
  416. package/src/docs/example/docs-jsonata-demos.ts +52 -52
  417. package/src/docs/example/docs-list-demos.ts +43 -123
  418. package/src/docs/example/docs-provider-keys.ts +21 -28
  419. package/src/docs/example/docs-queue-demos.ts +37 -77
  420. package/src/docs/example/docs-router-demos.ts +20 -25
  421. package/src/docs/example/docs-submit-demos.ts +48 -48
  422. package/src/docs/example/docs-toggle-demos.ts +4 -3
  423. package/src/docs/getting-started/ai-agents.md +50 -0
  424. package/src/docs/getting-started/components.md +5 -0
  425. package/src/docs/getting-started/create-a-component.md +136 -0
  426. package/src/docs/getting-started/dataFlow.md +87 -0
  427. package/src/docs/getting-started/installation.md +36 -0
  428. package/src/docs/getting-started/my-first-component.md +227 -0
  429. package/src/docs/getting-started/start.md +35 -0
  430. package/src/docs/getting-started/theming.md +253 -0
  431. package/src/docs/header/header.ts +11 -6
  432. package/src/docs/home/catalog.ts +1 -1
  433. package/src/docs/home/home.ts +20 -11
  434. package/src/docs/layout.ts +12 -13
  435. package/src/docs/misc/api-configuration.md +79 -0
  436. package/src/docs/misc/dataProviderKey.md +168 -0
  437. package/src/docs/misc/docs-mock-api.md +62 -0
  438. package/src/docs/misc/dynamic-path.md +71 -0
  439. package/src/docs/misc/endpoint.md +45 -0
  440. package/src/docs/misc/html-integration.md +14 -0
  441. package/src/docs/mock-api/api-config-mock.ts +5 -0
  442. package/src/docs/mock-api/fixtures.ts +0 -278
  443. package/src/docs/mock-api/flights.ts +89 -0
  444. package/src/docs/mock-api/router.ts +3 -4
  445. package/src/docs/mock-api/urls.ts +1 -2
  446. package/src/docs/navigation/navigation.ts +82 -103
  447. package/src/docs/navigation/toc.ts +7 -4
  448. package/src/docs/search/docs-search.json +2804 -5024
  449. package/src/docs/search/markdown-renderer.ts +31 -8
  450. package/src/docs/search/page.ts +9 -6
  451. package/src/docs/search/search.ts +154 -122
  452. package/src/docs/tailwind/css/docs/content.css +4 -5
  453. package/src/tsconfig.json +11 -5
  454. package/src/tsconfig.tsbuildinfo +1 -1
  455. package/vite.config.mts +11 -2
  456. package/.agents/skills/concorde-component-docs/SKILL.md +0 -194
  457. package/ai/AGENTS.md +0 -56
  458. package/ai/cursor/rules/concorde-menu.mdc +0 -15
  459. package/ai/cursor/rules/concorde-scope.mdc +0 -14
  460. package/ai/cursor/rules/concorde-theme.mdc +0 -13
  461. package/ai/cursor/rules/concorde.mdc +0 -66
  462. package/ai/jetbrains/rules/concorde.md +0 -53
  463. package/ai/skills/concorde-get-set-dp/SKILL.md +0 -194
  464. package/ai/skills/concorde-imports/SKILL.md +0 -78
  465. package/ai/skills/concorde-menu/SKILL.md +0 -74
  466. package/ai/skills/concorde-scope/SKILL.md +0 -70
  467. package/ai/skills/concorde-theme/SKILL.md +0 -57
  468. package/docs/assets/index-CD4WyL6o.css +0 -1
  469. package/src/core/components/ui/form/input-autocomplete/input-autocomplete.md +0 -29
  470. package/src/docs/_core-concept/overview.md +0 -57
  471. package/src/docs/_core-concept/subscriber.md +0 -75
  472. package/src/docs/_decorators/ancestor-attribute.md +0 -128
  473. package/src/docs/_decorators/auto-subscribe.md +0 -202
  474. package/src/docs/_decorators/bind.md +0 -167
  475. package/src/docs/_decorators/get.md +0 -162
  476. package/src/docs/_decorators/handle.md +0 -175
  477. package/src/docs/_decorators/on-assign.md +0 -390
  478. package/src/docs/_decorators/patch.md +0 -70
  479. package/src/docs/_decorators/post.md +0 -146
  480. package/src/docs/_decorators/publish.md +0 -55
  481. package/src/docs/_decorators/put.md +0 -70
  482. package/src/docs/_decorators/subscribe.md +0 -100
  483. package/src/docs/_decorators/wait-for-ancestors.md +0 -163
  484. package/src/docs/_directives/sub.md +0 -91
  485. package/src/docs/_getting-started/ai-agents.md +0 -76
  486. package/src/docs/_getting-started/concorde-manual-install.md +0 -133
  487. package/src/docs/_getting-started/concorde-outside.md +0 -33
  488. package/src/docs/_getting-started/my-first-subscriber.md +0 -120
  489. package/src/docs/_getting-started/pubsub.md +0 -37
  490. package/src/docs/_misc/formelement-subscriber-removal.md +0 -115
  491. package/src/docs/example/docs-input-autocomplete-demos.ts +0 -110
  492. package/src/docs/example/docs-joke-demos.ts +0 -297
  493. /package/{src/docs/_getting-started → docs/docs/getting-started}/components.md +0 -0
  494. /package/{src/docs/_getting-started → docs/docs/getting-started}/theming.md +0 -0
@@ -0,0 +1,194 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en" data-doc-url="https://concorde.supersoniks.org/core/components/ui/image" data-doc-id="core/components/ui/image/image">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Image — Concorde by Supersoniks</title>
7
+ <meta name="description" content="sonic-image wraps a responsive &lt;img&gt; with aspect ratio, object-fit: cover, optional rounded corners and a load transition. The host shows a placeholder background (--sc-placeholder-bg) until the file ">
8
+ <meta name="keywords" content="Concorde, supersoniks, core/components/ui/image/image, image, Image, UI component, sonic-image, web component, , object-fit: cover, --sc-placeholder-bg, loading, lazy, loading=&quot;eager&quot;, rounded, --sc-rounded">
9
+ <meta name="concorde-doc-id" content="core/components/ui/image/image">
10
+ <link rel="canonical" href="https://concorde.supersoniks.org/core/components/ui/image">
11
+ <link rel="alternate" type="text/markdown" href="https://concorde.supersoniks.org/core/components/ui/image.md">
12
+ </head>
13
+ <body>
14
+ <header>
15
+ <p><a href="/docs/index.html">Concorde documentation</a> · <a href="https://concorde.supersoniks.org/core/components/ui/image">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 UI component — Image</strong>. sonic-image wraps a responsive &lt;img&gt; with aspect ratio, object-fit: cover, optional rounded corners and a load transition. The host shows a placeholder background (--sc-placeholder-bg) until the file <span>Doc ID: <code>core/components/ui/image/image</code>. Keywords: Concorde, supersoniks, core/components/ui/image/image, image, Image, UI component, sonic-image, web component, , object-fit: cover, --sc-placeholder-bg, loading, lazy, loading=&quot;eager&quot;, rounded, --sc-rounded. URL: <a href="https://concorde.supersoniks.org/core/components/ui/image">https://concorde.supersoniks.org/core/components/ui/image</a>.</span></p>
20
+ <h1 id="image">Image</h1>
21
+ <p><strong><code>sonic-image</code></strong> wraps a responsive <code>&lt;img&gt;</code> with aspect ratio, <code>object-fit: cover</code>, optional rounded corners and a load transition. The host shows a placeholder background (<code>--sc-placeholder-bg</code>) until the file loads. With no <code>loading</code>, the image is <code>lazy</code>; set <code>loading=&quot;eager&quot;</code> for above-the-fold images.</p>
22
+ <h2 id="rounded">Rounded</h2>
23
+ <p>With no <code>rounded</code>, corners are square. Boolean <code>rounded</code> uses the theme token <code>--sc-rounded</code>; <code>full</code> draws a circle when paired with <code>ratio=&quot;1/1&quot;</code>.</p>
24
+ <pre><code>&lt;div class=&quot;grid gap-6 grid-cols-3 lg:grid-cols-4 items-end text-center text-xs&quot;&gt;
25
+ &lt;div&gt;
26
+ &lt;sonic-image ratio=&quot;1/1&quot; src=&quot;/img/concorde/plane_04.jpg&quot; alt=&quot;Concorde on the apron&quot;&gt;&lt;/sonic-image&gt;
27
+ &lt;p class=&quot;mt-2&quot;&gt;default&lt;/p&gt;
28
+ &lt;/div&gt;
29
+ &lt;div&gt;
30
+ &lt;sonic-image rounded=&quot;sm&quot; ratio=&quot;1/1&quot; src=&quot;/img/concorde/plane_04.jpg&quot; alt=&quot;Concorde on the apron&quot;&gt;&lt;/sonic-image&gt;
31
+ &lt;p class=&quot;mt-2&quot;&gt;sm&lt;/p&gt;
32
+ &lt;/div&gt;
33
+ &lt;div&gt;
34
+ &lt;sonic-image rounded ratio=&quot;1/1&quot; src=&quot;/img/concorde/plane_04.jpg&quot; alt=&quot;Concorde on the apron&quot;&gt;&lt;/sonic-image&gt;
35
+ &lt;p class=&quot;mt-2&quot;&gt;rounded&lt;/p&gt;
36
+ &lt;/div&gt;
37
+ &lt;div&gt;
38
+ &lt;sonic-image rounded=&quot;md&quot; ratio=&quot;1/1&quot; src=&quot;/img/concorde/plane_04.jpg&quot; alt=&quot;Concorde on the apron&quot;&gt;&lt;/sonic-image&gt;
39
+ &lt;p class=&quot;mt-2&quot;&gt;md&lt;/p&gt;
40
+ &lt;/div&gt;
41
+ &lt;div&gt;
42
+ &lt;sonic-image rounded=&quot;lg&quot; ratio=&quot;1/1&quot; src=&quot;/img/concorde/plane_04.jpg&quot; alt=&quot;Concorde on the apron&quot;&gt;&lt;/sonic-image&gt;
43
+ &lt;p class=&quot;mt-2&quot;&gt;lg&lt;/p&gt;
44
+ &lt;/div&gt;
45
+ &lt;div&gt;
46
+ &lt;sonic-image rounded=&quot;xl&quot; ratio=&quot;1/1&quot; src=&quot;/img/concorde/plane_04.jpg&quot; alt=&quot;Concorde on the apron&quot;&gt;&lt;/sonic-image&gt;
47
+ &lt;p class=&quot;mt-2&quot;&gt;xl&lt;/p&gt;
48
+ &lt;/div&gt;
49
+ &lt;div&gt;
50
+ &lt;sonic-image rounded=&quot;full&quot; ratio=&quot;1/1&quot; src=&quot;/img/concorde/plane_04.jpg&quot; alt=&quot;Concorde on the apron&quot;&gt;&lt;/sonic-image&gt;
51
+ &lt;p class=&quot;mt-2&quot;&gt;full&lt;/p&gt;
52
+ &lt;/div&gt;
53
+ &lt;/div&gt;
54
+ </code></pre>
55
+ <h2 id="aspect-ratio">Aspect ratio</h2>
56
+ <p><code>ratio</code> sets CSS <code>aspect-ratio</code> on the image (default <code>auto</code>). The image always fills the host width.</p>
57
+ <pre><code>&lt;div class=&quot;grid gap-8 grid-cols-2 items-center&quot;&gt;
58
+ &lt;sonic-image src=&quot;/img/concorde/plane_12.jpg&quot; alt=&quot;Concorde at the gate&quot;&gt;&lt;/sonic-image&gt;
59
+ &lt;sonic-image ratio=&quot;16/9&quot; src=&quot;/img/concorde/plane_12.jpg&quot; alt=&quot;Concorde at the gate&quot;&gt;&lt;/sonic-image&gt;
60
+ &lt;sonic-image ratio=&quot;1/1&quot; src=&quot;/img/concorde/plane_12.jpg&quot; alt=&quot;Concorde at the gate&quot;&gt;&lt;/sonic-image&gt;
61
+ &lt;sonic-image ratio=&quot;2/3&quot; src=&quot;/img/concorde/plane_12.jpg&quot; alt=&quot;Concorde at the gate&quot;&gt;&lt;/sonic-image&gt;
62
+ &lt;/div&gt;
63
+ </code></pre>
64
+ <h2 id="object-position">Object position</h2>
65
+ <p><code>objectPosition</code> maps to CSS <code>object-position</code> (default <code>center center</code>). Use it on wide crops when the subject sits off-center.</p>
66
+ <pre><code>&lt;div class=&quot;grid gap-8 grid-cols-2 items-center&quot;&gt;
67
+ &lt;sonic-image ratio=&quot;11/4&quot; src=&quot;/img/concorde/plane_11.jpg&quot; alt=&quot;Concorde flying over a field&quot;&gt;&lt;/sonic-image&gt;
68
+ &lt;sonic-image objectPosition=&quot;center top&quot; ratio=&quot;11/4&quot; src=&quot;/img/concorde/plane_11.jpg&quot; alt=&quot;Concorde flying over a field&quot;&gt;&lt;/sonic-image&gt;
69
+ &lt;/div&gt;
70
+ </code></pre>
71
+ <h2 id="cover">Cover</h2>
72
+ <p><code>cover</code> stretches the image over a <strong>positioned</strong> parent (<code>position: relative</code> with a height). <code>ratio</code> is ignored while <code>cover</code> is set.</p>
73
+ <pre><code>&lt;div class=&quot;h-96 relative rounded-lg overflow-hidden&quot;&gt;
74
+ &lt;sonic-image cover src=&quot;/img/concorde/plane_10.jpg&quot; alt=&quot;Concorde fleet parked in a star&quot;&gt;&lt;/sonic-image&gt;
75
+ &lt;/div&gt;
76
+ </code></pre>
77
+ <h2 id="load-transition">Load transition</h2>
78
+ <p>Set <code>transition</code> to <code>fade</code> or <code>fade-scale-out</code>. The image stays transparent until the browser fires <code>load</code>, then animates in. <strong>Changing <code>src</code> on an existing element does not replay the effect</strong>: mount a new <code>sonic-image</code> instead (galleries, infinite scroll).</p>
79
+ <pre><code>&lt;div class=&quot;flex flex-wrap gap-2 mb-4&quot;&gt;
80
+ &lt;sonic-button
81
+ size=&quot;sm&quot;
82
+ onclick=&quot;(function () {
83
+ var host = document.getElementById(&#39;sonic-image-transition-host&#39;);
84
+ var img = document.createElement(&#39;sonic-image&#39;);
85
+ img.transition = &#39;fade&#39;;
86
+ img.ratio = &#39;1/1&#39;;
87
+ img.rounded = &#39;md&#39;;
88
+ img.loading = &#39;eager&#39;;
89
+ img.style.width = &#39;8rem&#39;;
90
+ var pics = [&#39;01&#39;, &#39;03&#39;, &#39;04&#39;, &#39;05&#39;, &#39;06&#39;, &#39;07&#39;, &#39;08&#39;, &#39;09&#39;, &#39;10&#39;, &#39;11&#39;, &#39;12&#39;, &#39;13&#39;];
91
+ img.src = &#39;/img/concorde/plane_&#39; + pics[host.childElementCount % pics.length] + &#39;.jpg&#39;;
92
+ host.appendChild(img);
93
+ })()&quot;
94
+ &gt;
95
+ Add image (fade)
96
+ &lt;/sonic-button&gt;
97
+ &lt;sonic-button
98
+ size=&quot;sm&quot;
99
+ variant=&quot;outline&quot;
100
+ onclick=&quot;(function () {
101
+ var host = document.getElementById(&#39;sonic-image-transition-host&#39;);
102
+ var img = document.createElement(&#39;sonic-image&#39;);
103
+ img.transition = &#39;fade-scale-out&#39;;
104
+ img.ratio = &#39;1/1&#39;;
105
+ img.rounded = &#39;md&#39;;
106
+ img.loading = &#39;eager&#39;;
107
+ img.style.width = &#39;8rem&#39;;
108
+ var pics = [&#39;01&#39;, &#39;03&#39;, &#39;04&#39;, &#39;05&#39;, &#39;06&#39;, &#39;07&#39;, &#39;08&#39;, &#39;09&#39;, &#39;10&#39;, &#39;11&#39;, &#39;12&#39;, &#39;13&#39;];
109
+ img.src = &#39;/img/concorde/plane_&#39; + pics[host.childElementCount % pics.length] + &#39;.jpg&#39;;
110
+ host.appendChild(img);
111
+ })()&quot;
112
+ &gt;
113
+ Add image (fade-scale-out)
114
+ &lt;/sonic-button&gt;
115
+ &lt;sonic-button
116
+ size=&quot;sm&quot;
117
+ variant=&quot;ghost&quot;
118
+ onclick=&quot;document.getElementById(&#39;sonic-image-transition-host&#39;).replaceChildren()&quot;
119
+ &gt;
120
+ Clear
121
+ &lt;/sonic-button&gt;
122
+ &lt;/div&gt;
123
+ &lt;div id=&quot;sonic-image-transition-host&quot; class=&quot;flex flex-wrap gap-2 min-h-[5rem]&quot;&gt;&lt;/div&gt;
124
+ </code></pre>
125
+ <h2 id="accessibility">Accessibility</h2>
126
+ <p>Always set a meaningful <code>alt</code>. Use <code>alt=&quot;&quot;</code> only for decorative images.</p>
127
+ <pre><code>&lt;sonic-image
128
+ rounded=&quot;md&quot;
129
+ ratio=&quot;16/9&quot;
130
+ alt=&quot;Crowd gathered around Concorde at night&quot;
131
+ src=&quot;/img/concorde/plane_07.jpg&quot;
132
+ &gt;&lt;/sonic-image&gt;
133
+ </code></pre>
134
+ <h2 id="api-reference">API reference</h2>
135
+ <table>
136
+ <thead>
137
+ <tr>
138
+ <th>Attribute</th>
139
+ <th>Values</th>
140
+ <th>Description</th>
141
+ </tr>
142
+ </thead>
143
+ <tbody><tr>
144
+ <td><code>src</code></td>
145
+ <td>URL</td>
146
+ <td>Image URL passed to <code>&lt;img src&gt;</code></td>
147
+ </tr>
148
+ <tr>
149
+ <td><code>alt</code></td>
150
+ <td>string</td>
151
+ <td>Accessible description; <code>&quot;&quot;</code> only for decorative images</td>
152
+ </tr>
153
+ <tr>
154
+ <td><code>loading</code></td>
155
+ <td><code>lazy</code> (default) · <code>eager</code></td>
156
+ <td>Native lazy loading</td>
157
+ </tr>
158
+ <tr>
159
+ <td><code>ratio</code></td>
160
+ <td>CSS ratio (default <code>auto</code>)</td>
161
+ <td><code>aspect-ratio</code> of the image; ignored when <code>cover</code> is set</td>
162
+ </tr>
163
+ <tr>
164
+ <td><code>rounded</code></td>
165
+ <td><code>none</code> (default) · boolean · <code>base</code> · <code>sm</code> · <code>md</code> · <code>lg</code> · <code>xl</code> · <code>full</code></td>
166
+ <td>Corner radius from theme tokens</td>
167
+ </tr>
168
+ <tr>
169
+ <td><code>objectPosition</code></td>
170
+ <td>CSS position (default <code>center center</code>)</td>
171
+ <td>Maps to <code>object-position</code></td>
172
+ </tr>
173
+ <tr>
174
+ <td><code>imageRendering</code></td>
175
+ <td>CSS value (default <code>auto</code>)</td>
176
+ <td>Maps to <code>image-rendering</code></td>
177
+ </tr>
178
+ <tr>
179
+ <td><code>cover</code></td>
180
+ <td>boolean</td>
181
+ <td>Absolutely fills a positioned parent</td>
182
+ </tr>
183
+ <tr>
184
+ <td><code>transition</code></td>
185
+ <td><code>fade</code> · <code>fade-scale-out</code></td>
186
+ <td>Entrance animation after <code>load</code>; not replayed on <code>src</code> change</td>
187
+ </tr>
188
+ </tbody></table>
189
+ <p>No slots.</p>
190
+
191
+ </article>
192
+ </main>
193
+ </body>
194
+ </html>
@@ -0,0 +1,167 @@
1
+ # Image
2
+
3
+ **`sonic-image`** wraps a responsive `<img>` with aspect ratio, `object-fit: cover`, optional rounded corners and a load transition. The host shows a placeholder background (`--sc-placeholder-bg`) until the file loads. With no `loading`, the image is `lazy`; set `loading="eager"` for above-the-fold images.
4
+
5
+ ## Rounded
6
+
7
+ With no `rounded`, corners are square. Boolean `rounded` uses the theme token `--sc-rounded`; `full` draws a circle when paired with `ratio="1/1"`.
8
+
9
+ <sonic-code>
10
+ <template>
11
+ <div class="grid gap-6 grid-cols-3 lg:grid-cols-4 items-end text-center text-xs">
12
+ <div>
13
+ <sonic-image ratio="1/1" src="/img/concorde/plane_04.jpg" alt="Concorde on the apron"></sonic-image>
14
+ <p class="mt-2">default</p>
15
+ </div>
16
+ <div>
17
+ <sonic-image rounded="sm" ratio="1/1" src="/img/concorde/plane_04.jpg" alt="Concorde on the apron"></sonic-image>
18
+ <p class="mt-2">sm</p>
19
+ </div>
20
+ <div>
21
+ <sonic-image rounded ratio="1/1" src="/img/concorde/plane_04.jpg" alt="Concorde on the apron"></sonic-image>
22
+ <p class="mt-2">rounded</p>
23
+ </div>
24
+ <div>
25
+ <sonic-image rounded="md" ratio="1/1" src="/img/concorde/plane_04.jpg" alt="Concorde on the apron"></sonic-image>
26
+ <p class="mt-2">md</p>
27
+ </div>
28
+ <div>
29
+ <sonic-image rounded="lg" ratio="1/1" src="/img/concorde/plane_04.jpg" alt="Concorde on the apron"></sonic-image>
30
+ <p class="mt-2">lg</p>
31
+ </div>
32
+ <div>
33
+ <sonic-image rounded="xl" ratio="1/1" src="/img/concorde/plane_04.jpg" alt="Concorde on the apron"></sonic-image>
34
+ <p class="mt-2">xl</p>
35
+ </div>
36
+ <div>
37
+ <sonic-image rounded="full" ratio="1/1" src="/img/concorde/plane_04.jpg" alt="Concorde on the apron"></sonic-image>
38
+ <p class="mt-2">full</p>
39
+ </div>
40
+ </div>
41
+ </template>
42
+ </sonic-code>
43
+
44
+ ## Aspect ratio
45
+
46
+ `ratio` sets CSS `aspect-ratio` on the image (default `auto`). The image always fills the host width.
47
+
48
+ <sonic-code>
49
+ <template>
50
+ <div class="grid gap-8 grid-cols-2 items-center">
51
+ <sonic-image src="/img/concorde/plane_12.jpg" alt="Concorde at the gate"></sonic-image>
52
+ <sonic-image ratio="16/9" src="/img/concorde/plane_12.jpg" alt="Concorde at the gate"></sonic-image>
53
+ <sonic-image ratio="1/1" src="/img/concorde/plane_12.jpg" alt="Concorde at the gate"></sonic-image>
54
+ <sonic-image ratio="2/3" src="/img/concorde/plane_12.jpg" alt="Concorde at the gate"></sonic-image>
55
+ </div>
56
+ </template>
57
+ </sonic-code>
58
+
59
+ ## Object position
60
+
61
+ `objectPosition` maps to CSS `object-position` (default `center center`). Use it on wide crops when the subject sits off-center.
62
+
63
+ <sonic-code>
64
+ <template>
65
+ <div class="grid gap-8 grid-cols-2 items-center">
66
+ <sonic-image ratio="11/4" src="/img/concorde/plane_11.jpg" alt="Concorde flying over a field"></sonic-image>
67
+ <sonic-image objectPosition="center top" ratio="11/4" src="/img/concorde/plane_11.jpg" alt="Concorde flying over a field"></sonic-image>
68
+ </div>
69
+ </template>
70
+ </sonic-code>
71
+
72
+ ## Cover
73
+
74
+ `cover` stretches the image over a **positioned** parent (`position: relative` with a height). `ratio` is ignored while `cover` is set.
75
+
76
+ <sonic-code>
77
+ <template>
78
+ <div class="h-96 relative rounded-lg overflow-hidden">
79
+ <sonic-image cover src="/img/concorde/plane_10.jpg" alt="Concorde fleet parked in a star"></sonic-image>
80
+ </div>
81
+ </template>
82
+ </sonic-code>
83
+
84
+ ## Load transition
85
+
86
+ Set `transition` to `fade` or `fade-scale-out`. The image stays transparent until the browser fires `load`, then animates in. **Changing `src` on an existing element does not replay the effect**: mount a new `sonic-image` instead (galleries, infinite scroll).
87
+
88
+ <sonic-code>
89
+ <template>
90
+ <div class="flex flex-wrap gap-2 mb-4">
91
+ <sonic-button
92
+ size="sm"
93
+ onclick="(function () {
94
+ var host = document.getElementById('sonic-image-transition-host');
95
+ var img = document.createElement('sonic-image');
96
+ img.transition = 'fade';
97
+ img.ratio = '1/1';
98
+ img.rounded = 'md';
99
+ img.loading = 'eager';
100
+ img.style.width = '8rem';
101
+ var pics = ['01', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13'];
102
+ img.src = '/img/concorde/plane_' + pics[host.childElementCount % pics.length] + '.jpg';
103
+ host.appendChild(img);
104
+ })()"
105
+ >
106
+ Add image (fade)
107
+ </sonic-button>
108
+ <sonic-button
109
+ size="sm"
110
+ variant="outline"
111
+ onclick="(function () {
112
+ var host = document.getElementById('sonic-image-transition-host');
113
+ var img = document.createElement('sonic-image');
114
+ img.transition = 'fade-scale-out';
115
+ img.ratio = '1/1';
116
+ img.rounded = 'md';
117
+ img.loading = 'eager';
118
+ img.style.width = '8rem';
119
+ var pics = ['01', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13'];
120
+ img.src = '/img/concorde/plane_' + pics[host.childElementCount % pics.length] + '.jpg';
121
+ host.appendChild(img);
122
+ })()"
123
+ >
124
+ Add image (fade-scale-out)
125
+ </sonic-button>
126
+ <sonic-button
127
+ size="sm"
128
+ variant="ghost"
129
+ onclick="document.getElementById('sonic-image-transition-host').replaceChildren()"
130
+ >
131
+ Clear
132
+ </sonic-button>
133
+ </div>
134
+ <div id="sonic-image-transition-host" class="flex flex-wrap gap-2 min-h-[5rem]"></div>
135
+ </template>
136
+ </sonic-code>
137
+
138
+ ## Accessibility
139
+
140
+ Always set a meaningful `alt`. Use `alt=""` only for decorative images.
141
+
142
+ <sonic-code>
143
+ <template>
144
+ <sonic-image
145
+ rounded="md"
146
+ ratio="16/9"
147
+ alt="Crowd gathered around Concorde at night"
148
+ src="/img/concorde/plane_07.jpg"
149
+ ></sonic-image>
150
+ </template>
151
+ </sonic-code>
152
+
153
+ ## API reference
154
+
155
+ | Attribute | Values | Description |
156
+ |----------|---------|-------------|
157
+ | `src` | URL | Image URL passed to `<img src>` |
158
+ | `alt` | string | Accessible description; `""` only for decorative images |
159
+ | `loading` | `lazy` (default) · `eager` | Native lazy loading |
160
+ | `ratio` | CSS ratio (default `auto`) | `aspect-ratio` of the image; ignored when `cover` is set |
161
+ | `rounded` | `none` (default) · boolean · `base` · `sm` · `md` · `lg` · `xl` · `full` | Corner radius from theme tokens |
162
+ | `objectPosition` | CSS position (default `center center`) | Maps to `object-position` |
163
+ | `imageRendering` | CSS value (default `auto`) | Maps to `image-rendering` |
164
+ | `cover` | boolean | Absolutely fills a positioned parent |
165
+ | `transition` | `fade` · `fade-scale-out` | Entrance animation after `load`; not replayed on `src` change |
166
+
167
+ No slots.
@@ -0,0 +1,101 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en" data-doc-url="https://concorde.supersoniks.org/core/components/ui/link" data-doc-id="core/components/ui/link/link">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Link — Concorde by Supersoniks</title>
7
+ <meta name="description" content="Links navigate with inherited typography: internal routes, anchors, or external URLs. The default slot is the anchor label. For in-app routing, pair href with pushstate; use autoActive to reflect the ">
8
+ <meta name="keywords" content="Concorde, supersoniks, core/components/ui/link/link, link, Link, UI component, sonic-link, web component, href, pushstate, autoActive, active, target=&quot;_blank&quot;, rel=&quot;noopener noreferrer&quot;, partial">
9
+ <meta name="concorde-doc-id" content="core/components/ui/link/link">
10
+ <link rel="canonical" href="https://concorde.supersoniks.org/core/components/ui/link">
11
+ <link rel="alternate" type="text/markdown" href="https://concorde.supersoniks.org/core/components/ui/link.md">
12
+ </head>
13
+ <body>
14
+ <header>
15
+ <p><a href="/docs/index.html">Concorde documentation</a> · <a href="https://concorde.supersoniks.org/core/components/ui/link">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 UI component — Link</strong>. Links navigate with inherited typography: internal routes, anchors, or external URLs. The default slot is the anchor label. For in-app routing, pair href with pushstate; use autoActive to reflect the <span>Doc ID: <code>core/components/ui/link/link</code>. Keywords: Concorde, supersoniks, core/components/ui/link/link, link, Link, UI component, sonic-link, web component, href, pushstate, autoActive, active, target=&quot;_blank&quot;, rel=&quot;noopener noreferrer&quot;, partial. URL: <a href="https://concorde.supersoniks.org/core/components/ui/link">https://concorde.supersoniks.org/core/components/ui/link</a>.</span></p>
20
+ <h1 id="link">Link</h1>
21
+ <p>Links <strong>navigate</strong> with inherited typography: internal routes, anchors, or external URLs. The default slot is the anchor label. For in-app routing, pair <strong><code>href</code></strong> with <strong><code>pushstate</code></strong>; use <strong><code>autoActive</code></strong> to reflect the current URL on the host (<code>active</code>).</p>
22
+ <h2 id="basic-example">Basic example</h2>
23
+ <pre><code>&lt;sonic-link href=&quot;/&quot;&gt;Basic link with href attribute&lt;/sonic-link&gt;
24
+ </code></pre>
25
+ <h2 id="target">Target</h2>
26
+ <p><strong><code>target=&quot;_blank&quot;</code></strong> opens a new browsing context and sets <strong><code>rel=&quot;noopener noreferrer&quot;</code></strong>.</p>
27
+ <pre><code>&lt;sonic-link href=&quot;/&quot; target=&quot;_blank&quot;&gt;Link with target attribute&lt;/sonic-link&gt;
28
+ </code></pre>
29
+ <h2 id="pushstate">Pushstate</h2>
30
+ <p>Set <strong><code>pushstate</code></strong> on same-origin <strong><code>href</code></strong> values to intercept clicks and navigate through Concorde’s client router without a full reload.</p>
31
+ <pre><code>&lt;sonic-link href=&quot;/core/components/ui/link&quot; pushstate&gt;Client navigation (pushstate)&lt;/sonic-link&gt;
32
+ </code></pre>
33
+ <h2 id="autoactive">AutoActive</h2>
34
+ <p>Default <strong><code>autoActive</code></strong> is <strong><code>partial</code></strong>: the host gets <strong><code>active</code></strong> when the current URL starts with <strong><code>href</code></strong>. Style with <strong><code>[&amp;[active]]:</code></strong> utilities or host selectors.</p>
35
+ <pre><code>&lt;sonic-link href=&quot;/core/components&quot; class=&quot;[&amp;[active]]:text-success&quot;&gt;autoActive partial (default)&lt;/sonic-link&gt;
36
+ </code></pre>
37
+ <h3 id="autoactive-strict-vs-partial">AutoActive strict vs partial</h3>
38
+ <p><strong><code>strict</code></strong> requires pathname, search, and hash to match. <strong><code>strict-path-only</code></strong> matches pathname and hash but ignores search.</p>
39
+ <pre><code>&lt;div class=&quot;grid gap-3&quot;&gt;
40
+ &lt;sonic-link href=&quot;/core/components/ui/link&quot; autoActive=&quot;strict&quot; class=&quot;[&amp;[active]]:text-success&quot;&gt;autoActive strict&lt;/sonic-link&gt;
41
+ &lt;sonic-link href=&quot;/core/components/ui/button&quot; autoActive=&quot;strict&quot; class=&quot;[&amp;[active]]:text-success&quot;&gt;autoActive strict (other page)&lt;/sonic-link&gt;
42
+ &lt;sonic-link href=&quot;/core/components&quot; autoActive=&quot;strict-path-only&quot; class=&quot;[&amp;[active]]:text-success&quot;&gt;autoActive strict-path-only&lt;/sonic-link&gt;
43
+ &lt;/div&gt;
44
+ </code></pre>
45
+ <h3 id="autoactive-disabled">AutoActive disabled</h3>
46
+ <pre><code>&lt;sonic-link href=&quot;/core/components/ui/link&quot; autoActive=&quot;disabled&quot; class=&quot;[&amp;[active]]:text-success&quot;&gt;autoActive disabled&lt;/sonic-link&gt;
47
+ </code></pre>
48
+ <h2 id="accessibility">Accessibility</h2>
49
+ <p>The inner <strong><code>&lt;a&gt;</code></strong> uses <strong><code>focus-visible</code></strong> outline styling. Set <strong><code>data-aria-label</code></strong> when the slot text is not sufficient on its own.</p>
50
+ <h2 id="api-reference">API reference</h2>
51
+ <table>
52
+ <thead>
53
+ <tr>
54
+ <th>Attribute</th>
55
+ <th>Values</th>
56
+ <th>Description</th>
57
+ </tr>
58
+ </thead>
59
+ <tbody><tr>
60
+ <td><code>href</code></td>
61
+ <td>URL</td>
62
+ <td>Link target; without <strong><code>href</code></strong>, only the slot is rendered (no <strong><code>&lt;a&gt;</code></strong>)</td>
63
+ </tr>
64
+ <tr>
65
+ <td><code>target</code></td>
66
+ <td>e.g. <code>_blank</code></td>
67
+ <td>Navigation target; <strong><code>_blank</code></strong> adds <strong><code>rel=&quot;noopener noreferrer&quot;</code></strong></td>
68
+ </tr>
69
+ <tr>
70
+ <td><code>pushstate</code></td>
71
+ <td>boolean</td>
72
+ <td>Intercepts click for Concorde client navigation without reload</td>
73
+ </tr>
74
+ <tr>
75
+ <td><code>autoActive</code></td>
76
+ <td><code>partial</code> (default) · <code>strict</code> · <code>strict-path-only</code> · <code>disabled</code></td>
77
+ <td>When the host gets the <strong><code>active</code></strong> attribute (same-origin <strong><code>href</code></strong> only)</td>
78
+ </tr>
79
+ <tr>
80
+ <td><code>data-aria-label</code></td>
81
+ <td>string</td>
82
+ <td>Accessible <strong><code>aria-label</code></strong> when the slot text is not enough</td>
83
+ </tr>
84
+ </tbody></table>
85
+ <table>
86
+ <thead>
87
+ <tr>
88
+ <th>Slot</th>
89
+ <th>Description</th>
90
+ </tr>
91
+ </thead>
92
+ <tbody><tr>
93
+ <td><em>(default)</em></td>
94
+ <td>Link content (text, icons)</td>
95
+ </tr>
96
+ </tbody></table>
97
+
98
+ </article>
99
+ </main>
100
+ </body>
101
+ </html>
@@ -0,0 +1,81 @@
1
+ # Link
2
+
3
+ Links **navigate** with inherited typography: internal routes, anchors, or external URLs. The default slot is the anchor label. For in-app routing, pair **`href`** with **`pushstate`**; use **`autoActive`** to reflect the current URL on the host (`active`).
4
+
5
+ ## Basic example
6
+
7
+ <sonic-code>
8
+ <template>
9
+ <sonic-link href="/">Basic link with href attribute</sonic-link>
10
+ </template>
11
+ </sonic-code>
12
+
13
+ ## Target
14
+
15
+ **`target="_blank"`** opens a new browsing context and sets **`rel="noopener noreferrer"`**.
16
+
17
+ <sonic-code>
18
+ <template>
19
+ <sonic-link href="/" target="_blank">Link with target attribute</sonic-link>
20
+ </template>
21
+ </sonic-code>
22
+
23
+ ## Pushstate
24
+
25
+ Set **`pushstate`** on same-origin **`href`** values to intercept clicks and navigate through Concorde’s client router without a full reload.
26
+
27
+ <sonic-code>
28
+ <template>
29
+ <sonic-link href="/core/components/ui/link" pushstate>Client navigation (pushstate)</sonic-link>
30
+ </template>
31
+ </sonic-code>
32
+
33
+ ## AutoActive
34
+
35
+ Default **`autoActive`** is **`partial`**: the host gets **`active`** when the current URL starts with **`href`**. Style with **`[&[active]]:`** utilities or host selectors.
36
+
37
+ <sonic-code>
38
+ <template>
39
+ <sonic-link href="/core/components" class="[&[active]]:text-success">autoActive partial (default)</sonic-link>
40
+ </template>
41
+ </sonic-code>
42
+
43
+ ### AutoActive strict vs partial
44
+
45
+ **`strict`** requires pathname, search, and hash to match. **`strict-path-only`** matches pathname and hash but ignores search.
46
+
47
+ <sonic-code>
48
+ <template>
49
+ <div class="grid gap-3">
50
+ <sonic-link href="/core/components/ui/link" autoActive="strict" class="[&[active]]:text-success">autoActive strict</sonic-link>
51
+ <sonic-link href="/core/components/ui/button" autoActive="strict" class="[&[active]]:text-success">autoActive strict (other page)</sonic-link>
52
+ <sonic-link href="/core/components" autoActive="strict-path-only" class="[&[active]]:text-success">autoActive strict-path-only</sonic-link>
53
+ </div>
54
+ </template>
55
+ </sonic-code>
56
+
57
+ ### AutoActive disabled
58
+
59
+ <sonic-code>
60
+ <template>
61
+ <sonic-link href="/core/components/ui/link" autoActive="disabled" class="[&[active]]:text-success">autoActive disabled</sonic-link>
62
+ </template>
63
+ </sonic-code>
64
+
65
+ ## Accessibility
66
+
67
+ The inner **`<a>`** uses **`focus-visible`** outline styling. Set **`data-aria-label`** when the slot text is not sufficient on its own.
68
+
69
+ ## API reference
70
+
71
+ | Attribute | Values | Description |
72
+ |----------|---------|-------------|
73
+ | `href` | URL | Link target; without **`href`**, only the slot is rendered (no **`<a>`**) |
74
+ | `target` | e.g. `_blank` | Navigation target; **`_blank`** adds **`rel="noopener noreferrer"`** |
75
+ | `pushstate` | boolean | Intercepts click for Concorde client navigation without reload |
76
+ | `autoActive` | `partial` (default) · `strict` · `strict-path-only` · `disabled` | When the host gets the **`active`** attribute (same-origin **`href`** only) |
77
+ | `data-aria-label` | string | Accessible **`aria-label`** when the slot text is not enough |
78
+
79
+ | Slot | Description |
80
+ |------|-------------|
81
+ | *(default)* | Link content (text, icons) |