@supersoniks/concorde 5.1.2 → 5.1.3-immutable.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (497) hide show
  1. package/.agents/skills/concorde-docs/SKILL.md +1 -1
  2. package/.claude/skills +1 -0
  3. package/.github/workflows/ci.yml +21 -0
  4. package/.github-export-ignore +30 -0
  5. package/CONTRIBUTING.md +59 -0
  6. package/DEV.md +54 -0
  7. package/LICENSE +21 -0
  8. package/OPEN_SOURCE_CHECKPOINT.md +133 -0
  9. package/README.md +1 -1
  10. package/ai/README.md +29 -41
  11. package/ai/skills/concorde/SKILL.md +54 -324
  12. package/ai/skills/concorde/rules/composition.md +32 -0
  13. package/ai/skills/concorde/rules/data.md +47 -0
  14. package/ai/skills/concorde/rules/http.md +25 -0
  15. package/ai/skills/concorde/rules/lists-forms.md +35 -0
  16. package/ai/skills/concorde/rules/styling.md +46 -0
  17. package/ai/skills/concorde/rules/troubleshooting.md +45 -0
  18. package/build-infos.json +1 -1
  19. package/concorde-core.bundle.js +177 -177
  20. package/concorde-core.es.js +5183 -5018
  21. package/custom-elements-manifest.public.config.mjs +8 -0
  22. package/{.tmp-cem/custom-elements.json → custom-elements.json} +11722 -8868
  23. package/dist/concorde-core.bundle.js +177 -177
  24. package/dist/concorde-core.es.js +5183 -5018
  25. package/dist/docs-mock-api-sw.js +58 -223
  26. package/dist/docs-mock-api-sw.js.map +4 -4
  27. package/dist/img/og-concorde.jpg +0 -0
  28. package/dist/robots.txt +11 -10
  29. package/docs/assets/index-CD4WyL6o.css +1 -0
  30. package/docs/assets/index-D_alEsng.js +12122 -0
  31. package/docs/crawl/core/components/functional/date/date.html +190 -0
  32. package/docs/crawl/core/components/functional/fetch/fetch.html +109 -0
  33. package/docs/crawl/core/components/functional/if/if.html +27 -0
  34. package/docs/crawl/core/components/functional/jsonata/jsonata.html +79 -0
  35. package/docs/crawl/core/components/functional/list/list.html +70 -0
  36. package/docs/crawl/core/components/functional/mix/mix.html +45 -0
  37. package/docs/crawl/core/components/functional/queue/queue.html +96 -0
  38. package/docs/crawl/core/components/functional/router/router.html +106 -0
  39. package/docs/{core → crawl/core}/components/functional/sdui/sdui-extension-points.html +8 -9
  40. package/docs/crawl/core/components/functional/sdui/sdui.html +368 -0
  41. package/docs/crawl/core/components/functional/states/states.html +66 -0
  42. package/docs/crawl/core/components/functional/submit/submit.html +160 -0
  43. package/docs/{core → crawl/core}/components/functional/subscriber/subscriber.html +5 -6
  44. package/docs/crawl/core/components/functional/value/value.html +51 -0
  45. package/docs/{core → crawl/core}/components/ui/alert/alert.html +63 -53
  46. package/docs/{core → crawl/core}/components/ui/alert-messages/alert-messages.html +5 -6
  47. package/docs/{core → crawl/core}/components/ui/badge/badge.html +33 -33
  48. package/docs/crawl/core/components/ui/button/button.html +150 -0
  49. package/docs/crawl/core/components/ui/captcha/captcha.html +112 -0
  50. package/docs/{core → crawl/core}/components/ui/card/card.html +11 -12
  51. package/docs/{core → crawl/core}/components/ui/divider/divider.html +14 -14
  52. package/docs/crawl/core/components/ui/form/checkbox/checkbox.html +73 -0
  53. package/docs/crawl/core/components/ui/form/fieldset/fieldset.html +266 -0
  54. package/docs/{core → crawl/core}/components/ui/form/form-actions/form-actions.html +23 -23
  55. package/docs/crawl/core/components/ui/form/form-layout/form-layout.html +121 -0
  56. package/docs/crawl/core/components/ui/form/input/input.html +109 -0
  57. package/docs/crawl/core/components/ui/form/input-autocomplete/input-autocomplete.html +38 -0
  58. package/docs/crawl/core/components/ui/form/radio/radio.html +56 -0
  59. package/docs/crawl/core/components/ui/form/select/select.html +73 -0
  60. package/docs/crawl/core/components/ui/form/switch/switch.html +56 -0
  61. package/docs/crawl/core/components/ui/form/textarea/textarea.html +59 -0
  62. package/docs/crawl/core/components/ui/group/group.html +104 -0
  63. package/docs/{core → crawl/core}/components/ui/icon/icon.html +9 -10
  64. package/docs/crawl/core/components/ui/image/image.html +298 -0
  65. package/docs/{core → crawl/core}/components/ui/link/link.html +11 -12
  66. package/docs/crawl/core/components/ui/loader/loader.html +124 -0
  67. package/docs/{core → crawl/core}/components/ui/menu/menu.html +33 -34
  68. package/docs/crawl/core/components/ui/modal/modal.html +342 -0
  69. package/docs/crawl/core/components/ui/pop/pop.html +296 -0
  70. package/docs/{core → crawl/core}/components/ui/progress/progress.html +7 -8
  71. package/docs/crawl/core/components/ui/table/table.html +545 -0
  72. package/docs/crawl/core/components/ui/theme/theme.html +131 -0
  73. package/docs/crawl/core/components/ui/toast/toast.html +233 -0
  74. package/docs/crawl/core/components/ui/tooltip/tooltip.html +140 -0
  75. package/docs/{docs/getting-started → crawl/docs/_core-concept}/dataFlow.html +29 -26
  76. package/docs/crawl/docs/_core-concept/overview.html +66 -0
  77. package/docs/crawl/docs/_core-concept/subscriber.html +75 -0
  78. package/docs/crawl/docs/_decorators/ancestor-attribute.html +117 -0
  79. package/docs/crawl/docs/_decorators/auto-subscribe.html +202 -0
  80. package/docs/crawl/docs/_decorators/bind.html +141 -0
  81. package/docs/crawl/docs/_decorators/get.html +149 -0
  82. package/docs/crawl/docs/_decorators/handle.html +165 -0
  83. package/docs/crawl/docs/_decorators/on-assign.html +355 -0
  84. package/docs/crawl/docs/_decorators/patch.html +78 -0
  85. package/docs/crawl/docs/_decorators/post.html +139 -0
  86. package/docs/crawl/docs/_decorators/publish.html +61 -0
  87. package/docs/crawl/docs/_decorators/put.html +78 -0
  88. package/docs/crawl/docs/_decorators/subscribe.html +109 -0
  89. package/docs/crawl/docs/_decorators/wait-for-ancestors.html +137 -0
  90. package/docs/crawl/docs/_directives/sub.html +93 -0
  91. package/docs/{docs/getting-started → crawl/docs/_getting-started}/ai-agents.html +11 -12
  92. package/docs/crawl/docs/_getting-started/concorde-manual-install.html +100 -0
  93. package/docs/crawl/docs/_getting-started/concorde-outside.html +58 -0
  94. package/docs/{docs/getting-started → crawl/docs/_getting-started}/create-a-component.html +14 -11
  95. package/docs/{docs/getting-started → crawl/docs/_getting-started}/my-first-component.html +22 -13
  96. package/docs/crawl/docs/_getting-started/my-first-subscriber.html +110 -0
  97. package/docs/crawl/docs/_getting-started/pubsub.html +62 -0
  98. package/docs/crawl/docs/_getting-started/start.html +76 -0
  99. package/docs/{docs/getting-started → crawl/docs/_getting-started}/theming.html +9 -10
  100. package/docs/{docs/misc → crawl/docs/_misc}/api-configuration.html +18 -18
  101. package/docs/{docs/misc → crawl/docs/_misc}/dataProviderKey.html +11 -12
  102. package/docs/{docs/misc → crawl/docs/_misc}/docs-mock-api.html +28 -25
  103. package/docs/{docs/misc → crawl/docs/_misc}/dynamic-path.html +15 -16
  104. package/docs/{docs/misc → crawl/docs/_misc}/endpoint.html +15 -16
  105. package/docs/crawl/docs/_misc/formelement-subscriber-removal.html +138 -0
  106. package/docs/{docs/misc → crawl/docs/_misc}/html-integration.html +15 -12
  107. package/docs/crawl/hubs/decorators.html +547 -0
  108. package/docs/crawl/hubs/form-components.html +381 -0
  109. package/docs/crawl/hubs/remote-data.html +452 -0
  110. package/docs/crawl/index.html +103 -0
  111. package/docs/docs-mock-api-sw.js +223 -58
  112. package/docs/docs-mock-api-sw.js.map +4 -4
  113. package/docs/index.html +68 -95
  114. package/docs/llms-full.txt +3610 -2231
  115. package/docs/llms.txt +86 -94
  116. package/docs/robots.txt +10 -11
  117. package/docs/sitemap.xml +84 -78
  118. package/docs/src/core/components/functional/date/date.md +231 -91
  119. package/docs/src/core/components/functional/fetch/fetch.md +83 -66
  120. package/docs/src/core/components/functional/if/if.md +3 -28
  121. package/docs/src/core/components/functional/jsonata/jsonata.md +37 -42
  122. package/docs/src/core/components/functional/list/list.md +43 -99
  123. package/docs/src/core/components/functional/mix/mix.md +26 -31
  124. package/docs/src/core/components/functional/queue/queue.md +61 -40
  125. package/docs/src/core/components/functional/router/router.md +65 -64
  126. package/docs/src/core/components/functional/sdui/component-catalog.gaps.json +1 -1
  127. package/docs/src/core/components/functional/sdui/component-catalog.json +1 -1
  128. package/docs/src/core/components/functional/sdui/example.json +86 -19
  129. package/docs/src/core/components/functional/sdui/sdui-extension-points.md +1 -1
  130. package/docs/src/core/components/functional/sdui/sdui.md +358 -187
  131. package/docs/src/core/components/functional/states/states.md +61 -86
  132. package/docs/src/core/components/functional/submit/submit.md +72 -64
  133. package/docs/src/core/components/functional/value/value.md +22 -34
  134. package/docs/src/core/components/ui/alert/alert.md +58 -48
  135. package/docs/src/core/components/ui/badge/badge.md +34 -27
  136. package/docs/src/core/components/ui/button/button.md +106 -139
  137. package/docs/src/core/components/ui/captcha/captcha.md +32 -17
  138. package/docs/src/core/components/ui/card/card.md +6 -6
  139. package/docs/src/core/components/ui/divider/divider.md +11 -8
  140. package/docs/src/core/components/ui/form/checkbox/checkbox.md +42 -90
  141. package/docs/src/core/components/ui/form/fieldset/fieldset.md +75 -31
  142. package/docs/src/core/components/ui/form/form-actions/form-actions.md +16 -14
  143. package/docs/src/core/components/ui/form/form-layout/form-layout.md +29 -19
  144. package/docs/src/core/components/ui/form/input/input.md +95 -95
  145. package/docs/src/core/components/ui/form/input-autocomplete/input-autocomplete.md +29 -0
  146. package/docs/src/core/components/ui/form/radio/radio.md +34 -55
  147. package/docs/src/core/components/ui/form/select/select.md +45 -60
  148. package/docs/src/core/components/ui/form/switch/switch.md +34 -57
  149. package/docs/src/core/components/ui/form/textarea/textarea.md +38 -55
  150. package/docs/src/core/components/ui/group/group.md +33 -35
  151. package/docs/src/core/components/ui/icon/icon.md +4 -4
  152. package/docs/src/core/components/ui/image/image.md +107 -41
  153. package/docs/src/core/components/ui/link/link.md +6 -6
  154. package/docs/src/core/components/ui/loader/loader.md +55 -30
  155. package/docs/src/core/components/ui/menu/menu.md +27 -27
  156. package/docs/src/core/components/ui/modal/modal.md +96 -72
  157. package/docs/src/core/components/ui/pop/pop.md +158 -80
  158. package/docs/src/core/components/ui/progress/progress.md +2 -2
  159. package/docs/src/core/components/ui/table/table.md +255 -91
  160. package/docs/src/core/components/ui/theme/theme.md +36 -11
  161. package/docs/src/core/components/ui/toast/toast.md +117 -48
  162. package/docs/src/core/components/ui/tooltip/tooltip.md +62 -27
  163. package/docs/{docs/getting-started → src/docs/_core-concept}/dataFlow.md +18 -17
  164. package/docs/src/docs/_core-concept/overview.md +57 -0
  165. package/docs/src/docs/_core-concept/subscriber.md +75 -0
  166. package/docs/src/docs/_decorators/ancestor-attribute.md +128 -0
  167. package/docs/src/docs/_decorators/auto-subscribe.md +202 -0
  168. package/docs/src/docs/_decorators/bind.md +167 -0
  169. package/docs/src/docs/_decorators/get.md +162 -0
  170. package/docs/src/docs/_decorators/handle.md +175 -0
  171. package/docs/src/docs/_decorators/on-assign.md +390 -0
  172. package/docs/src/docs/_decorators/patch.md +70 -0
  173. package/docs/src/docs/_decorators/post.md +146 -0
  174. package/docs/src/docs/_decorators/publish.md +55 -0
  175. package/docs/src/docs/_decorators/put.md +70 -0
  176. package/docs/src/docs/_decorators/subscribe.md +100 -0
  177. package/docs/src/docs/_decorators/wait-for-ancestors.md +163 -0
  178. package/docs/src/docs/_directives/sub.md +91 -0
  179. package/docs/src/docs/{getting-started → _getting-started}/ai-agents.md +3 -3
  180. package/docs/src/docs/_getting-started/concorde-manual-install.md +133 -0
  181. package/docs/src/docs/_getting-started/concorde-outside.md +33 -0
  182. package/docs/{docs/getting-started → src/docs/_getting-started}/create-a-component.md +6 -3
  183. package/docs/src/docs/{getting-started → _getting-started}/my-first-component.md +14 -5
  184. package/docs/src/docs/_getting-started/my-first-subscriber.md +120 -0
  185. package/docs/src/docs/_getting-started/pubsub.md +37 -0
  186. package/docs/src/docs/{getting-started → _getting-started}/start.md +13 -1
  187. package/docs/src/docs/{getting-started → _getting-started}/theming.md +2 -2
  188. package/docs/src/docs/{misc → _misc}/api-configuration.md +12 -10
  189. package/docs/src/docs/{misc → _misc}/dataProviderKey.md +4 -4
  190. package/docs/{docs/misc → src/docs/_misc}/docs-mock-api.md +13 -12
  191. package/docs/{docs/misc → src/docs/_misc}/dynamic-path.md +8 -8
  192. package/docs/{docs/misc → src/docs/_misc}/endpoint.md +8 -8
  193. package/docs/src/docs/_misc/formelement-subscriber-removal.md +115 -0
  194. package/docs/{docs/misc → src/docs/_misc}/html-integration.md +5 -4
  195. package/docs/src/docs/search/docs-search.json +4375 -2420
  196. package/docs/src/tsconfig.declarations.json +22 -0
  197. package/docs/src/tsconfig.emit.json +23 -0
  198. package/docs/src/tsconfig.json +2 -23
  199. package/gitlab/job_github_mirror.sh +39 -0
  200. package/index.html +89 -0
  201. package/package.json +22 -4
  202. package/public/img/og-concorde.jpg +0 -0
  203. package/scripts/ai-init.mjs +104 -379
  204. package/scripts/ai-init.test.mjs +81 -239
  205. package/scripts/docs-markdown-vite-plugin.ts +11 -5
  206. package/scripts/docs-public-url.mjs +6 -0
  207. package/scripts/docs.htaccess +7 -0
  208. package/scripts/generate-cem.mjs +244 -0
  209. package/scripts/generate-cem.test.mjs +122 -0
  210. package/scripts/generate-crawl-docs.mjs +29 -5
  211. package/scripts/generate-sdui-catalog.mjs +11 -10
  212. package/scripts/github-export.mjs +150 -0
  213. package/scripts/post-build-docs.js +3 -0
  214. package/scripts/post-build.mjs +0 -0
  215. package/scripts/pre-publish.mjs +2 -1
  216. package/scripts/site-pages.mjs +212 -0
  217. package/scripts/site-pages.test.mjs +116 -0
  218. package/site-pages/about.md +22 -0
  219. package/site-pages/privacy.md +32 -0
  220. package/src/core/components/functional/date/date.md +1 -1
  221. package/src/core/components/functional/example/example.ts +3 -1
  222. package/src/core/components/functional/if/if.ts +0 -0
  223. package/src/core/components/functional/list/list.demo.ts +0 -0
  224. package/src/core/components/functional/list/list.md +6 -2
  225. package/src/core/components/functional/list/list.ts +17 -4
  226. package/src/core/components/functional/mix/mix.md +0 -0
  227. package/src/core/components/functional/router/router.demo.ts +0 -0
  228. package/src/core/components/functional/router/router.ts +0 -0
  229. package/src/core/components/functional/sdui/SDUIDescriptorTransformer.ts +0 -0
  230. package/src/core/components/functional/sdui/component-catalog.gaps.json +1 -1
  231. package/src/core/components/functional/sdui/component-catalog.json +2 -2
  232. package/src/core/components/functional/sdui/example.json +0 -0
  233. package/src/core/components/functional/sdui/sdui-immutable.spec.ts +74 -0
  234. package/src/core/components/functional/sdui/sdui.ts +33 -8
  235. package/src/core/components/functional/sdui/types.ts +0 -0
  236. package/src/core/components/functional/states/states.ts +0 -0
  237. package/src/core/components/functional/submit/submit.spec.ts +60 -0
  238. package/src/core/components/functional/submit/submit.ts +6 -3
  239. package/src/core/components/functional/subscriber/subscriber.ts +0 -0
  240. package/src/core/components/functional/value/value.md +0 -0
  241. package/src/core/components/functional/value/value.ts +0 -0
  242. package/src/core/components/ui/_css/size.ts +0 -0
  243. package/src/core/components/ui/captcha/altchaStyles.ts +0 -0
  244. package/src/core/components/ui/card/card.md +1 -1
  245. package/src/core/components/ui/form/input/input.md +19 -1
  246. package/src/core/components/ui/form/input/input.ts +8 -2
  247. package/src/core/components/ui/form/radio/radio.md +14 -0
  248. package/src/core/components/ui/image/image.md +17 -17
  249. package/src/core/components/ui/modal/modal.md +2 -2
  250. package/src/core/decorators/subscriber/bind.ts +9 -14
  251. package/src/core/decorators/subscriber/subscribe.ts +15 -9
  252. package/src/core/decorators/subscriber/subscribe.type-test.ts +14 -5
  253. package/src/core/mixins/Subscriber.ts +0 -0
  254. package/src/core/utils/DataBindObserver.ts +0 -0
  255. package/src/core/utils/Objects.ts +0 -0
  256. package/src/core/utils/PublisherProxy.ts +166 -125
  257. package/src/core/utils/deepReadonly.spec.ts +66 -0
  258. package/src/core/utils/deepReadonly.ts +71 -0
  259. package/src/core/utils/immutableValue.spec.ts +58 -0
  260. package/src/core/utils/immutableValue.ts +116 -0
  261. package/src/core/utils/nestedDotForm.spec.ts +88 -0
  262. package/src/core/utils/publisherImmutable.spec.ts +127 -0
  263. package/src/core/utils/route.ts +0 -0
  264. package/src/core/utils/strictGet.spec.ts +61 -0
  265. package/src/core/utils/strictGet.ts +102 -0
  266. package/src/css.d.ts +19 -0
  267. package/src/docs/components/docs-demo-sources.ts +3 -3
  268. package/src/docs/decorators/bind.md +23 -24
  269. package/src/docs/docs-location.spec.ts +10 -0
  270. package/src/docs/docs-location.ts +10 -0
  271. package/src/docs/example/decorators-demo-bind-demos.ts +11 -28
  272. package/src/docs/example/docs-toggle-demos.ts +1 -1
  273. package/src/docs/example/users.ts +0 -0
  274. package/src/docs/getting-started/ai-agents.md +51 -51
  275. package/src/docs/getting-started/dataFlow.md +2 -2
  276. package/src/docs/home/home.ts +3 -1
  277. package/src/docs/misc/publisher-get-immutability-docs-crawl.json +902 -0
  278. package/src/docs/misc/publisher-get-immutability-docs-recheck.json +13 -0
  279. package/src/docs/misc/publisher-get-immutability-study.md +229 -0
  280. package/src/docs/navigation/navigation.ts +5 -1
  281. package/src/docs/search/docs-search.json +358 -58
  282. package/src/docs/search/markdown-renderer.ts +6 -1
  283. package/src/docs/tailwind/css/docs/content.css +4 -5
  284. package/src/tsconfig.declarations.json +22 -0
  285. package/src/tsconfig.emit.json +23 -0
  286. package/src/tsconfig.json +53 -5
  287. package/src/tsconfig.tsbuildinfo +1 -1
  288. package/.taste-skill/after/desktop-fold.jpg +0 -0
  289. package/.taste-skill/after/desktop-page-01.jpg +0 -0
  290. package/.taste-skill/after/desktop-page-02.jpg +0 -0
  291. package/.taste-skill/after/desktop-page-03.jpg +0 -0
  292. package/.taste-skill/after/mobile-fold.jpg +0 -0
  293. package/.taste-skill/after/mobile-page-01.jpg +0 -0
  294. package/.taste-skill/after/report.json +0 -4103
  295. package/.taste-skill/after/tablet-fold.jpg +0 -0
  296. package/.taste-skill/after/tablet-page-01.jpg +0 -0
  297. package/.taste-skill/after/tablet-page-02.jpg +0 -0
  298. package/.taste-skill/before/desktop-fold.jpg +0 -0
  299. package/.taste-skill/before/desktop-page-01.jpg +0 -0
  300. package/.taste-skill/before/desktop-page-02.jpg +0 -0
  301. package/.taste-skill/before/mobile-fold.jpg +0 -0
  302. package/.taste-skill/before/mobile-page-01.jpg +0 -0
  303. package/.taste-skill/before/report.json +0 -2556
  304. package/.taste-skill/before/tablet-fold.jpg +0 -0
  305. package/.taste-skill/before/tablet-page-01.jpg +0 -0
  306. package/.taste-skill/direction.json +0 -510
  307. package/.taste-skill/notes.md +0 -84
  308. package/.taste-skill/prod/desktop-fold.jpg +0 -0
  309. package/.taste-skill/prod/desktop-page-01.jpg +0 -0
  310. package/.taste-skill/prod/desktop-page-02.jpg +0 -0
  311. package/.taste-skill/prod/desktop-page-03.jpg +0 -0
  312. package/.taste-skill/prod/mobile-fold.jpg +0 -0
  313. package/.taste-skill/prod/mobile-page-01.jpg +0 -0
  314. package/.taste-skill/prod/mobile-page-02.jpg +0 -0
  315. package/.taste-skill/prod/report.json +0 -1973
  316. package/.taste-skill/prod/tablet-fold.jpg +0 -0
  317. package/.taste-skill/prod/tablet-page-01.jpg +0 -0
  318. package/.taste-skill/prod/tablet-page-02.jpg +0 -0
  319. package/AUDIT.md +0 -228
  320. package/PLAN-AMELIORATION.md +0 -220
  321. package/PLAN-DOCS-AGENTS.md +0 -80
  322. package/ai/AGENTS.md +0 -56
  323. package/ai/cursor/rules/concorde-menu.mdc +0 -15
  324. package/ai/cursor/rules/concorde-scope.mdc +0 -14
  325. package/ai/cursor/rules/concorde-theme.mdc +0 -13
  326. package/ai/cursor/rules/concorde.mdc +0 -66
  327. package/ai/jetbrains/rules/concorde.md +0 -53
  328. package/ai/skills/concorde-get-set-dp/SKILL.md +0 -194
  329. package/ai/skills/concorde-imports/SKILL.md +0 -78
  330. package/ai/skills/concorde-menu/SKILL.md +0 -74
  331. package/ai/skills/concorde-scope/SKILL.md +0 -70
  332. package/ai/skills/concorde-theme/SKILL.md +0 -57
  333. package/docs/.htaccess +0 -75
  334. package/docs/404.html +0 -15
  335. package/docs/404.md +0 -5
  336. package/docs/assets/index-BgG6FFPt.js +0 -11765
  337. package/docs/assets/index-x89XINSG.css +0 -1
  338. package/docs/core/components/functional/date/date.html +0 -211
  339. package/docs/core/components/functional/date/date.md +0 -150
  340. package/docs/core/components/functional/fetch/fetch.html +0 -180
  341. package/docs/core/components/functional/fetch/fetch.md +0 -108
  342. package/docs/core/components/functional/if/if.html +0 -65
  343. package/docs/core/components/functional/if/if.md +0 -34
  344. package/docs/core/components/functional/jsonata/jsonata.html +0 -110
  345. package/docs/core/components/functional/jsonata/jsonata.md +0 -61
  346. package/docs/core/components/functional/list/list.html +0 -198
  347. package/docs/core/components/functional/list/list.md +0 -121
  348. package/docs/core/components/functional/mix/mix.html +0 -78
  349. package/docs/core/components/functional/mix/mix.md +0 -46
  350. package/docs/core/components/functional/queue/queue.html +0 -155
  351. package/docs/core/components/functional/queue/queue.md +0 -51
  352. package/docs/core/components/functional/router/router.html +0 -154
  353. package/docs/core/components/functional/router/router.md +0 -93
  354. package/docs/core/components/functional/sdui/sdui-extension-points.md +0 -94
  355. package/docs/core/components/functional/sdui/sdui.html +0 -397
  356. package/docs/core/components/functional/sdui/sdui.md +0 -307
  357. package/docs/core/components/functional/states/states.html +0 -141
  358. package/docs/core/components/functional/states/states.md +0 -112
  359. package/docs/core/components/functional/submit/submit.html +0 -178
  360. package/docs/core/components/functional/submit/submit.md +0 -106
  361. package/docs/core/components/functional/subscriber/subscriber.md +0 -91
  362. package/docs/core/components/functional/translation/translation.html +0 -60
  363. package/docs/core/components/functional/translation/translation.md +0 -38
  364. package/docs/core/components/functional/value/value.html +0 -81
  365. package/docs/core/components/functional/value/value.md +0 -47
  366. package/docs/core/components/ui/alert/alert.md +0 -186
  367. package/docs/core/components/ui/alert-messages/alert-messages.md +0 -85
  368. package/docs/core/components/ui/badge/badge.md +0 -181
  369. package/docs/core/components/ui/button/button.html +0 -309
  370. package/docs/core/components/ui/button/button.md +0 -216
  371. package/docs/core/components/ui/captcha/captcha.html +0 -80
  372. package/docs/core/components/ui/captcha/captcha.md +0 -56
  373. package/docs/core/components/ui/card/card.md +0 -215
  374. package/docs/core/components/ui/divider/divider.md +0 -126
  375. package/docs/core/components/ui/form/checkbox/checkbox.html +0 -200
  376. package/docs/core/components/ui/form/checkbox/checkbox.md +0 -125
  377. package/docs/core/components/ui/form/fieldset/fieldset.html +0 -238
  378. package/docs/core/components/ui/form/fieldset/fieldset.md +0 -161
  379. package/docs/core/components/ui/form/form-actions/form-actions.md +0 -98
  380. package/docs/core/components/ui/form/form-layout/form-layout.html +0 -115
  381. package/docs/core/components/ui/form/form-layout/form-layout.md +0 -109
  382. package/docs/core/components/ui/form/input/input.html +0 -235
  383. package/docs/core/components/ui/form/input/input.md +0 -142
  384. package/docs/core/components/ui/form/radio/radio.html +0 -144
  385. package/docs/core/components/ui/form/radio/radio.md +0 -78
  386. package/docs/core/components/ui/form/select/select.html +0 -178
  387. package/docs/core/components/ui/form/select/select.md +0 -86
  388. package/docs/core/components/ui/form/switch/switch.html +0 -146
  389. package/docs/core/components/ui/form/switch/switch.md +0 -80
  390. package/docs/core/components/ui/form/textarea/textarea.html +0 -162
  391. package/docs/core/components/ui/form/textarea/textarea.md +0 -82
  392. package/docs/core/components/ui/group/group.html +0 -113
  393. package/docs/core/components/ui/group/group.md +0 -77
  394. package/docs/core/components/ui/icon/icon.md +0 -214
  395. package/docs/core/components/ui/image/image.html +0 -194
  396. package/docs/core/components/ui/image/image.md +0 -167
  397. package/docs/core/components/ui/link/link.md +0 -81
  398. package/docs/core/components/ui/loader/loader.html +0 -114
  399. package/docs/core/components/ui/loader/loader.md +0 -87
  400. package/docs/core/components/ui/menu/menu.md +0 -370
  401. package/docs/core/components/ui/modal/modal.html +0 -324
  402. package/docs/core/components/ui/modal/modal.md +0 -211
  403. package/docs/core/components/ui/pop/pop.html +0 -250
  404. package/docs/core/components/ui/pop/pop.md +0 -216
  405. package/docs/core/components/ui/progress/progress.md +0 -109
  406. package/docs/core/components/ui/table/table.html +0 -333
  407. package/docs/core/components/ui/table/table.md +0 -267
  408. package/docs/core/components/ui/theme/theme.html +0 -116
  409. package/docs/core/components/ui/theme/theme.md +0 -97
  410. package/docs/core/components/ui/toast/toast.html +0 -185
  411. package/docs/core/components/ui/toast/toast.md +0 -147
  412. package/docs/core/components/ui/tooltip/tooltip.html +0 -112
  413. package/docs/core/components/ui/tooltip/tooltip.md +0 -89
  414. package/docs/docs/decorators/ancestor-attribute.html +0 -71
  415. package/docs/docs/decorators/ancestor-attribute.md +0 -59
  416. package/docs/docs/decorators/auto-subscribe.html +0 -61
  417. package/docs/docs/decorators/auto-subscribe.md +0 -40
  418. package/docs/docs/decorators/bind.html +0 -86
  419. package/docs/docs/decorators/bind.md +0 -77
  420. package/docs/docs/decorators/get.html +0 -166
  421. package/docs/docs/decorators/get.md +0 -160
  422. package/docs/docs/decorators/handle.html +0 -139
  423. package/docs/docs/decorators/handle.md +0 -119
  424. package/docs/docs/decorators/on-assign.html +0 -72
  425. package/docs/docs/decorators/on-assign.md +0 -63
  426. package/docs/docs/decorators/patch.html +0 -76
  427. package/docs/docs/decorators/patch.md +0 -44
  428. package/docs/docs/decorators/post.html +0 -150
  429. package/docs/docs/decorators/post.md +0 -134
  430. package/docs/docs/decorators/publish.html +0 -74
  431. package/docs/docs/decorators/publish.md +0 -56
  432. package/docs/docs/decorators/put.html +0 -83
  433. package/docs/docs/decorators/put.md +0 -51
  434. package/docs/docs/decorators/subscribe.html +0 -91
  435. package/docs/docs/decorators/subscribe.md +0 -87
  436. package/docs/docs/decorators/wait-for-ancestors.html +0 -82
  437. package/docs/docs/decorators/wait-for-ancestors.md +0 -76
  438. package/docs/docs/directives/sub.html +0 -79
  439. package/docs/docs/directives/sub.md +0 -75
  440. package/docs/docs/directives/t.html +0 -91
  441. package/docs/docs/directives/t.md +0 -73
  442. package/docs/docs/getting-started/ai-agents.md +0 -76
  443. package/docs/docs/getting-started/components.html +0 -27
  444. package/docs/docs/getting-started/components.md +0 -5
  445. package/docs/docs/getting-started/installation.html +0 -69
  446. package/docs/docs/getting-started/installation.md +0 -36
  447. package/docs/docs/getting-started/my-first-component.md +0 -227
  448. package/docs/docs/getting-started/start.html +0 -47
  449. package/docs/docs/getting-started/start.md +0 -35
  450. package/docs/docs/getting-started/theming.md +0 -253
  451. package/docs/docs/index.html +0 -99
  452. package/docs/docs/misc/api-configuration.md +0 -79
  453. package/docs/docs/misc/dataProviderKey.md +0 -168
  454. package/docs/hubs/decorators.html +0 -443
  455. package/docs/hubs/form-components.html +0 -404
  456. package/docs/hubs/remote-data.html +0 -371
  457. package/docs/img/archive/concorde-001-2cv.webp +0 -0
  458. package/docs/img/archive/concorde-red-arrows-2002-poster.jpg +0 -0
  459. package/docs/img/archive/concorde-red-arrows-2002.webm +0 -0
  460. package/docs/img/archive/credits.json +0 -28
  461. package/docs/index.md +0 -22
  462. package/docs/src/core/components/functional/translation/translation.md +0 -38
  463. package/docs/src/docs/decorators/ancestor-attribute.md +0 -59
  464. package/docs/src/docs/decorators/auto-subscribe.md +0 -40
  465. package/docs/src/docs/decorators/bind.md +0 -77
  466. package/docs/src/docs/decorators/get.md +0 -160
  467. package/docs/src/docs/decorators/handle.md +0 -119
  468. package/docs/src/docs/decorators/on-assign.md +0 -63
  469. package/docs/src/docs/decorators/patch.md +0 -44
  470. package/docs/src/docs/decorators/post.md +0 -134
  471. package/docs/src/docs/decorators/publish.md +0 -56
  472. package/docs/src/docs/decorators/put.md +0 -51
  473. package/docs/src/docs/decorators/subscribe.md +0 -87
  474. package/docs/src/docs/decorators/wait-for-ancestors.md +0 -76
  475. package/docs/src/docs/directives/sub.md +0 -75
  476. package/docs/src/docs/directives/t.md +0 -73
  477. package/docs/src/docs/getting-started/components.md +0 -5
  478. package/docs/src/docs/getting-started/create-a-component.md +0 -136
  479. package/docs/src/docs/getting-started/dataFlow.md +0 -87
  480. package/docs/src/docs/getting-started/installation.md +0 -36
  481. package/docs/src/docs/misc/docs-mock-api.md +0 -62
  482. package/docs/src/docs/misc/dynamic-path.md +0 -71
  483. package/docs/src/docs/misc/endpoint.md +0 -45
  484. package/docs/src/docs/misc/html-integration.md +0 -14
  485. /package/{docs → dist}/img/concorde/plane_01.jpg +0 -0
  486. /package/{docs → dist}/img/concorde/plane_02.jpg +0 -0
  487. /package/{docs → dist}/img/concorde/plane_03.jpg +0 -0
  488. /package/{docs → dist}/img/concorde/plane_04.jpg +0 -0
  489. /package/{docs → dist}/img/concorde/plane_05.jpg +0 -0
  490. /package/{docs → dist}/img/concorde/plane_06.jpg +0 -0
  491. /package/{docs → dist}/img/concorde/plane_07.jpg +0 -0
  492. /package/{docs → dist}/img/concorde/plane_08.jpg +0 -0
  493. /package/{docs → dist}/img/concorde/plane_09.jpg +0 -0
  494. /package/{docs → dist}/img/concorde/plane_10.jpg +0 -0
  495. /package/{docs → dist}/img/concorde/plane_11.jpg +0 -0
  496. /package/{docs → dist}/img/concorde/plane_12.jpg +0 -0
  497. /package/{docs → dist}/img/concorde/plane_13.jpg +0 -0
@@ -1,41 +1,70 @@
1
1
  # Image
2
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.
3
+ **`sonic-image`** wraps a responsive **`<img>`** with aspect ratio, `object-fit: cover`, optional rounded corners, and load transitions. The host shows a placeholder background (`--sc-placeholder-bg`) until the asset loads. Default **`loading`** is `lazy`; use **`loading="eager"`** for above-the-fold heroes.
4
4
 
5
5
  ## Rounded
6
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"`.
7
+ Omit `rounded` for square corners. Boolean **`rounded`** uses the theme token `--sc-rounded`. Sizes: **`sm`**, **`md`**, **`lg`**, **`xl`**, **`full`** (circle — pair with `ratio="1/1"`), **`none`** (explicit reset).
8
8
 
9
9
  <sonic-code>
10
10
  <template>
11
- <div class="grid gap-6 grid-cols-3 lg:grid-cols-4 items-end text-center text-xs">
11
+ <div class="grid gap-6 grid-cols-3 lg:grid-cols-4 items-end text-center text-xs ">
12
12
  <div>
13
- <sonic-image ratio="1/1" src="img/concorde/plane_04.jpg" alt="Concorde on the apron"></sonic-image>
13
+ <sonic-image
14
+ ratio="1/1"
15
+ src="https://thegoodlife.fr/wp-content/uploads/sites/2/2022/03/compagnies-aeriennes-nostalgie-coeur-insert-03-dr.jpg"
16
+ ></sonic-image>
14
17
  <p class="mt-2">default</p>
15
18
  </div>
16
19
  <div>
17
- <sonic-image rounded="sm" ratio="1/1" src="img/concorde/plane_04.jpg" alt="Concorde on the apron"></sonic-image>
20
+ <sonic-image
21
+ rounded="sm"
22
+ ratio="1/1"
23
+ src="https://thegoodlife.fr/wp-content/uploads/sites/2/2022/03/compagnies-aeriennes-nostalgie-coeur-insert-03-dr.jpg"
24
+ ></sonic-image>
18
25
  <p class="mt-2">sm</p>
19
26
  </div>
20
27
  <div>
21
- <sonic-image rounded ratio="1/1" src="img/concorde/plane_04.jpg" alt="Concorde on the apron"></sonic-image>
28
+ <sonic-image
29
+ rounded
30
+ ratio="1/1"
31
+ src="https://thegoodlife.fr/wp-content/uploads/sites/2/2022/03/compagnies-aeriennes-nostalgie-coeur-insert-03-dr.jpg"
32
+ ></sonic-image>
22
33
  <p class="mt-2">rounded</p>
23
34
  </div>
24
35
  <div>
25
- <sonic-image rounded="md" ratio="1/1" src="img/concorde/plane_04.jpg" alt="Concorde on the apron"></sonic-image>
36
+ <sonic-image
37
+ rounded="md"
38
+ ratio="1/1"
39
+ src="https://thegoodlife.fr/wp-content/uploads/sites/2/2022/03/compagnies-aeriennes-nostalgie-coeur-insert-03-dr.jpg"
40
+ ></sonic-image>
26
41
  <p class="mt-2">md</p>
27
42
  </div>
28
43
  <div>
29
- <sonic-image rounded="lg" ratio="1/1" src="img/concorde/plane_04.jpg" alt="Concorde on the apron"></sonic-image>
44
+ <sonic-image
45
+ rounded="lg"
46
+ ratio="1/1"
47
+ src="https://thegoodlife.fr/wp-content/uploads/sites/2/2022/03/compagnies-aeriennes-nostalgie-coeur-insert-03-dr.jpg"
48
+ ></sonic-image>
30
49
  <p class="mt-2">lg</p>
31
50
  </div>
32
51
  <div>
33
- <sonic-image rounded="xl" ratio="1/1" src="img/concorde/plane_04.jpg" alt="Concorde on the apron"></sonic-image>
52
+ <sonic-image
53
+ rounded="xl"
54
+ ratio="1/1"
55
+ src="https://thegoodlife.fr/wp-content/uploads/sites/2/2022/03/compagnies-aeriennes-nostalgie-coeur-insert-03-dr.jpg"
56
+ ></sonic-image>
34
57
  <p class="mt-2">xl</p>
35
58
  </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>
59
+ <div >
60
+ <div >
61
+ <sonic-image
62
+ rounded="full"
63
+ ratio="1/1"
64
+ src="https://thegoodlife.fr/wp-content/uploads/sites/2/2022/03/compagnies-aeriennes-nostalgie-coeur-insert-03-dr.jpg"
65
+ ></sonic-image>
66
+ <p class="mt-2">full</p>
67
+ </div>
39
68
  </div>
40
69
  </div>
41
70
  </template>
@@ -43,47 +72,70 @@ With no `rounded`, corners are square. Boolean `rounded` uses the theme token `-
43
72
 
44
73
  ## Aspect ratio
45
74
 
46
- `ratio` sets CSS `aspect-ratio` on the image (default `auto`). The image always fills the host width.
75
+ **`ratio`** sets CSS `aspect-ratio` on the image (default **`auto`**). The image still fills the host width (`width: 100%`).
47
76
 
48
77
  <sonic-code>
49
78
  <template>
50
79
  <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>
80
+ <sonic-image
81
+ src="https://thegoodlife.fr/wp-content/uploads/sites/2/2022/03/compagnies-aeriennes-nostalgie-coeur-insert-03-dr.jpg"
82
+ ></sonic-image>
83
+ <sonic-image
84
+ ratio="16/9"
85
+ src="https://thegoodlife.fr/wp-content/uploads/sites/2/2022/03/compagnies-aeriennes-nostalgie-coeur-insert-03-dr.jpg"
86
+ ></sonic-image>
87
+ <sonic-image
88
+ ratio="1/1"
89
+ src="https://thegoodlife.fr/wp-content/uploads/sites/2/2022/03/compagnies-aeriennes-nostalgie-coeur-insert-03-dr.jpg"
90
+ ></sonic-image>
91
+ <sonic-image
92
+ ratio="2/3"
93
+ src="https://thegoodlife.fr/wp-content/uploads/sites/2/2022/03/compagnies-aeriennes-nostalgie-coeur-insert-03-dr.jpg"
94
+ ></sonic-image>
55
95
  </div>
56
96
  </template>
57
97
  </sonic-code>
58
98
 
59
99
  ## Object position
60
100
 
61
- `objectPosition` maps to CSS `object-position` (default `center center`). Use it on wide crops when the subject sits off-center.
101
+ **`objectPosition`** maps to CSS `object-position` (default **`center center`**). Useful on wide crops when the subject sits off-center.
62
102
 
63
103
  <sonic-code>
64
104
  <template>
65
105
  <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>
106
+ <sonic-image
107
+ ratio="11/4"
108
+ src="https://thegoodlife.fr/wp-content/uploads/sites/2/2022/03/compagnies-aeriennes-nostalgie-coeur-insert-03-dr.jpg"
109
+ ></sonic-image>
110
+ <sonic-image
111
+ objectPosition="center top"
112
+ ratio="11/4"
113
+ src="https://thegoodlife.fr/wp-content/uploads/sites/2/2022/03/compagnies-aeriennes-nostalgie-coeur-insert-03-dr.jpg"
114
+ ></sonic-image>
68
115
  </div>
69
116
  </template>
70
117
  </sonic-code>
71
118
 
72
119
  ## Cover
73
120
 
74
- `cover` stretches the image over a **positioned** parent (`position: relative` with a height). `ratio` is ignored while `cover` is set.
121
+ **`cover`** stretches the image to fill a **positioned** parent (`position: relative` + fixed height or inset). Aspect ratio on the host is ignored while `cover` is set.
75
122
 
76
123
  <sonic-code>
77
124
  <template>
78
125
  <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>
126
+ <sonic-image
127
+ cover
128
+ src="https://thegoodlife.fr/wp-content/uploads/sites/2/2022/03/compagnies-aeriennes-nostalgie-coeur-insert-03-dr.jpg"
129
+ ></sonic-image>
80
130
  </div>
81
131
  </template>
82
132
  </sonic-code>
83
133
 
84
134
  ## Load transition
85
135
 
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).
136
+ Set **`transition`** to **`fade`** (default when the attribute is present) or **`fade-scale-out`**. The image stays at `opacity: 0` until the browser fires **`load`**, then the **`loaded`** class runs the animation. Changing `src` on an existing element does not replay the effect — mount a new `sonic-image` when you need another entrance (galleries, infinite scroll).
137
+
138
+ Click **Add image** to append small thumbnails and replay the transition. **Clear** resets the row.
87
139
 
88
140
  <sonic-code>
89
141
  <template>
@@ -98,8 +150,7 @@ Set `transition` to `fade` or `fade-scale-out`. The image stays transparent unti
98
150
  img.rounded = 'md';
99
151
  img.loading = 'eager';
100
152
  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';
153
+ img.src = 'https://picsum.photos/seed/' + Date.now() + '/120/120';
103
154
  host.appendChild(img);
104
155
  })()"
105
156
  >
@@ -116,8 +167,7 @@ Set `transition` to `fade` or `fade-scale-out`. The image stays transparent unti
116
167
  img.rounded = 'md';
117
168
  img.loading = 'eager';
118
169
  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';
170
+ img.src = 'https://picsum.photos/seed/' + Date.now() + '/120/120';
121
171
  host.appendChild(img);
122
172
  })()"
123
173
  >
@@ -135,17 +185,17 @@ Set `transition` to `fade` or `fade-scale-out`. The image stays transparent unti
135
185
  </template>
136
186
  </sonic-code>
137
187
 
138
- ## Accessibility
188
+ ## Accessibility and parts
139
189
 
140
- Always set a meaningful `alt`. Use `alt=""` only for decorative images.
190
+ Always set meaningful **`alt`** text (empty string only for decorative images).
141
191
 
142
192
  <sonic-code>
143
193
  <template>
144
194
  <sonic-image
145
195
  rounded="md"
146
196
  ratio="16/9"
147
- alt="Crowd gathered around Concorde at night"
148
- src="img/concorde/plane_07.jpg"
197
+ alt="Concorde aircraft in flight"
198
+ src="https://thegoodlife.fr/wp-content/uploads/sites/2/2022/03/compagnies-aeriennes-nostalgie-coeur-insert-03-dr.jpg"
149
199
  ></sonic-image>
150
200
  </template>
151
201
  </sonic-code>
@@ -155,13 +205,29 @@ Always set a meaningful `alt`. Use `alt=""` only for decorative images.
155
205
  | Attribute | Values | Description |
156
206
  |----------|---------|-------------|
157
207
  | `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.
208
+ | `alt` | string | Accessible description; use `""` only for decorative images |
209
+ | `loading` | `lazy` (default), `eager` | Native lazy loading |
210
+ | `ratio` | CSS ratio, `auto` (default) | Host `aspect-ratio` on the image (ignored when `cover` is set) |
211
+ | `rounded` | `none` (default), boolean, `base`, `sm`, `md`, `lg`, `xl`, `full` | Corner radius from theme tokens; `full` is a circle (often with `ratio="1/1"`) |
212
+ | `objectPosition` | CSS position | Maps to `object-position` (default `center center`) |
213
+ | `imageRendering` | CSS value | Maps to `image-rendering` (default `auto`) |
214
+ | `cover` | boolean | Absolutely fills a positioned parent; host aspect ratio is ignored |
215
+ | `transition` | `fade`, `fade-scale-out` | Opacity (and scale) animation after `load`; remount to replay on `src` change |
216
+
217
+ No slots — content is driven entirely by attributes on the inner `<img>`.
218
+
219
+ ## API reference
220
+
221
+ | Attribute | Values | Description |
222
+ |----------|---------|-------------|
223
+ | `src` | URL | Image URL passed to `<img src>` |
224
+ | `alt` | string | Accessible description; use `""` only for decorative images |
225
+ | `loading` | `lazy` (default), `eager` | Native lazy loading |
226
+ | `ratio` | CSS ratio, `auto` (default) | Host `aspect-ratio` on the image (ignored when `cover` is set) |
227
+ | `rounded` | `none` (default), boolean, `base`, `sm`, `md`, `lg`, `xl`, `full` | Corner radius from theme tokens; `full` is a circle (often with `ratio="1/1"`) |
228
+ | `objectPosition` | CSS position | Maps to `object-position` (default `center center`) |
229
+ | `imageRendering` | CSS value | Maps to `image-rendering` (default `auto`) |
230
+ | `cover` | boolean | Absolutely fills a positioned parent; host aspect ratio is ignored |
231
+ | `transition` | `fade`, `fade-scale-out` | Opacity (and scale) animation after `load`; remount to replay on `src` change |
232
+
233
+ No slots — content is driven entirely by attributes on the inner `<img>`.
@@ -26,7 +26,7 @@ Set **`pushstate`** on same-origin **`href`** values to intercept clicks and nav
26
26
 
27
27
  <sonic-code>
28
28
  <template>
29
- <sonic-link href="/core/components/ui/link" pushstate>Client navigation (pushstate)</sonic-link>
29
+ <sonic-link href="/#core/components" pushstate>Client navigation (pushstate)</sonic-link>
30
30
  </template>
31
31
  </sonic-code>
32
32
 
@@ -36,7 +36,7 @@ Default **`autoActive`** is **`partial`**: the host gets **`active`** when the c
36
36
 
37
37
  <sonic-code>
38
38
  <template>
39
- <sonic-link href="/core/components" class="[&[active]]:text-success">autoActive partial (default)</sonic-link>
39
+ <sonic-link href="/#core/components" class="[&[active]]:text-success">autoActive partial (default)</sonic-link>
40
40
  </template>
41
41
  </sonic-code>
42
42
 
@@ -47,9 +47,9 @@ Default **`autoActive`** is **`partial`**: the host gets **`active`** when the c
47
47
  <sonic-code>
48
48
  <template>
49
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>
50
+ <sonic-link href="/#core" autoActive="strict" class="[&[active]]:text-success">autoActive strict</sonic-link>
51
+ <sonic-link href="/#core/components/ui/link/link.md/link" autoActive="strict" class="[&[active]]:text-success">autoActive strict (long href)</sonic-link>
52
+ <sonic-link href="/#core/components" autoActive="strict-path-only" class="[&[active]]:text-success">autoActive strict-path-only</sonic-link>
53
53
  </div>
54
54
  </template>
55
55
  </sonic-code>
@@ -58,7 +58,7 @@ Default **`autoActive`** is **`partial`**: the host gets **`active`** when the c
58
58
 
59
59
  <sonic-code>
60
60
  <template>
61
- <sonic-link href="/core/components/ui/link" autoActive="disabled" class="[&[active]]:text-success">autoActive disabled</sonic-link>
61
+ <sonic-link href="/#core/components/ui/link/link.md/link" autoActive="disabled" class="[&[active]]:text-success">autoActive disabled</sonic-link>
62
62
  </template>
63
63
  </sonic-code>
64
64
 
@@ -1,10 +1,20 @@
1
1
  # Loader
2
2
 
3
- **`sonic-loader`** shows a loading animation, either in the content flow or as a viewport overlay. With no `mode`, it is `fixed` (centered overlay); use `mode="inline"` inside content areas. For [Fetch](/core/components/functional/fetch) and [List](/core/components/functional/list), set their `loader` attribute instead of adding the tag yourself.
3
+ **`sonic-loader`** shows a loading animation in the page or as a viewport overlay. Default **`mode`** is **`fixed`** (centered overlay). Use **`inline`** inside lists and fetch placeholders. Pair **`noDelay`** when the spinner should appear without the default fade-in wait. For **`sonic-fetch`** / **`sonic-list`**, set the parent **`loader`** attribute instead of embedding a tag manually.
4
+
5
+ ## Basic example
6
+
7
+ Inline loaders fit content areas; they use the theme primary color unless **`currentColor`** is set.
8
+
9
+ <sonic-code>
10
+ <template>
11
+ <sonic-loader mode="inline"></sonic-loader>
12
+ </template>
13
+ </sonic-code>
4
14
 
5
15
  ## Mode
6
16
 
7
- `inline` renders an ellipsis animation in the document flow. `fixed` (default) covers the viewport with a centered animation; toggle it with the checkbox below.
17
+ **`inline`** — ellipsis animation in the document flow. **`fixed`** — centered overlay (`position: fixed`); default when the tag is omitted.
8
18
 
9
19
  <sonic-code>
10
20
  <template>
@@ -12,26 +22,30 @@
12
22
  </template>
13
23
  </sonic-code>
14
24
 
25
+ Use the checkbox below to toggle a **`fixed`** loader over the page (default **`mode`** on **`sonic-loader`**).
26
+
15
27
  <docs-lit-demo for="docs-toggle-loader-demo"></docs-lit-demo>
16
28
 
17
- ## Alignment and color
29
+ ## Inline alignment and color
18
30
 
19
- `align` only affects `mode="inline"`: `left` · `center` (default) · `right`. Dots use `--sc-primary`; set `currentColor` to follow the host `color`.
31
+ **`align`** only affects **`mode="inline"`**: **`left`** · **`center`** (default) · **`right`**. Set **`currentColor`** so dots follow the host `color` (for example on a purple parent).
20
32
 
21
33
  <sonic-code>
22
34
  <template>
23
35
  <div class="grid gap-4">
24
36
  <sonic-loader mode="inline" currentColor style="color: purple;"></sonic-loader>
25
- <sonic-loader mode="inline" align="left"></sonic-loader>
26
- <sonic-loader mode="inline" align="center"></sonic-loader>
27
- <sonic-loader mode="inline" align="right"></sonic-loader>
37
+ <div class="flex flex-col gap-2">
38
+ <sonic-loader mode="inline" align="left"></sonic-loader>
39
+ <sonic-loader mode="inline" align="center"></sonic-loader>
40
+ <sonic-loader mode="inline" align="right"></sonic-loader>
41
+ </div>
28
42
  </div>
29
43
  </template>
30
44
  </sonic-code>
31
45
 
32
- ## Delay
46
+ ## `noDelay`
33
47
 
34
- A `fixed` loader waits 0.5 s before fading in, so short requests show nothing. `inline` loaders appear at once. Set `noDelay` (or pass `noDelay: true` to `Loader.show()`) to show a `fixed` loader immediately.
48
+ By default **`mode="fixed"`** waits briefly before fading in. **`mode="inline"`** already skips that wait. Set **`noDelay`** on **`fixed`** (or pass **`noDelay: true`** to **`Loader.show()`**) to appear immediately.
35
49
 
36
50
  <sonic-code>
37
51
  <template>
@@ -39,33 +53,42 @@ A `fixed` loader waits 0.5 s before fading in, so short requests show nothing. `
39
53
  </template>
40
54
  </sonic-code>
41
55
 
42
- ## Accessibility
56
+ ## Accessibility (`announce`)
43
57
 
44
- The animation is `aria-hidden` by default so screen readers are not flooded on every request. Set `announce` when the loader appears after a user action: the host gets `role="status"`, `aria-live="polite"` and a localized "Loading" label. For a busy button, use the `loading` attribute of `sonic-button` instead.
58
+ The animation is **`aria-hidden`** by default so screen readers are not spammed on every fetch. Set **`announce`** when the loader is injected **after** user action (for example a global overlay): the host gets **`role="status"`**, **`aria-live="polite"`**, and a localized **`aria-label`** (“Loading” / “Chargement en cours”, …). For in-button loading, prefer **`sonic-button`** **`loading`** and **`aria-busy`** on the control—not on the loader.
45
59
 
46
60
  <sonic-code>
47
61
  <template>
48
- <div class="flex flex-wrap items-center gap-4">
49
- <sonic-loader mode="inline" announce></sonic-loader>
50
- <sonic-button loading>Confirm check-in</sonic-button>
51
- </div>
62
+ <sonic-loader mode="inline" announce></sonic-loader>
52
63
  </template>
53
64
  </sonic-code>
54
65
 
55
66
  ## Show and hide programmatically
56
67
 
57
- `Loader.show()` mounts one shared instance; `Loader.hide()` is reference-counted, so call it once per `show()`. **Without `container`, the loader goes to the theme pop container and `mode` is forced to `fixed`.**
68
+ Import **`Loader`** and call **`Loader.show()`** / **`Loader.hide()`**. **`hide()`** is reference-counted: call it once per **`show()`**. With no **`container`**, the loader is appended to the theme pop container and **`mode`** is always **`fixed`**. Pass **`container`** and **`mode: "inline"`** to mount an inline instance in a specific element.
58
69
 
59
70
  <sonic-code language="javascript">
60
71
  <template>
61
- import { Loader } from "@supersoniks/concorde/ui/loader";
72
+ import { Loader } from "@supersoniks/concorde/core/components/ui/loader/loader";
73
+
74
+ Loader.show({
75
+ mode: "fixed",
76
+ noDelay: false,
77
+ announce: true,
78
+ container: document.querySelector("#foo"),
79
+ });
62
80
 
63
- Loader.show({ announce: true });
64
- // …
65
81
  Loader.hide();
82
+ </template>
83
+ </sonic-code>
84
+
85
+ ## Composition
66
86
 
67
- // Inline loader inside a given element
68
- Loader.show({ mode: "inline", container: document.querySelector("#results") });
87
+ **`sonic-button`** **`loading`** shows an icon spinner and sets **`aria-busy`** on the button. **`sonic-fetch`** and **`sonic-list`** render **`sonic-loader`** when their **`loader`** attribute is set: **`true`** or an empty string maps to **`fixed`**; otherwise use **`inline`** or **`fixed`**.
88
+
89
+ <sonic-code>
90
+ <template>
91
+ <sonic-button loading>Save changes</sonic-button>
69
92
  </template>
70
93
  </sonic-code>
71
94
 
@@ -73,15 +96,17 @@ Loader.show({ mode: "inline", container: document.querySelector("#results") });
73
96
 
74
97
  | Attribute | Values | Description |
75
98
  |----------|---------|-------------|
76
- | `mode` | `inline` · `fixed` (default `fixed`) | In-flow ellipsis or viewport-centered overlay |
77
- | `noDelay` | boolean | Skips the 0.5 s fade-in delay of `fixed` |
78
- | `announce` | boolean | Adds `role="status"`, `aria-live="polite"` and a localized label |
79
- | `align` | `left` · `center` · `right` (default `center`) | Horizontal alignment, `mode="inline"` only |
80
- | `currentColor` | boolean | Dots use `currentColor` instead of `--sc-primary` |
99
+ | `mode` | `inline` · `fixed` (default `fixed`) | Layout: in-flow ellipsis vs viewport-centered overlay |
100
+ | `noDelay` | boolean | Skips the initial fade-in delay before the animation appears |
101
+ | `announce` | boolean | **`role="status"`** and **`aria-live="polite"`** with localized loading label when the loader should be announced |
102
+ | `align` | `left` · `center` · `right` | Horizontal alignment for **`mode="inline"`** only (attribute selector; default centered) |
103
+ | `currentColor` | boolean | Uses `currentColor` for dot fill instead of **`--sc-primary`** |
104
+
105
+ This component has **no slots**. The animation markup is internal.
81
106
 
82
- No slots.
107
+ ### Static methods
83
108
 
84
- | Static method | Description |
109
+ | Method | Description |
85
110
  |--------|-------------|
86
- | `Loader.show(conf?)` | Mounts the shared instance. `conf`: `mode` · `noDelay` · `announce` · `container` |
87
- | `Loader.hide()` | Decrements the show counter; removes the instance when it reaches zero |
111
+ | `Loader.show(conf?)` | Mounts the shared loader instance. **`conf.mode`**, **`conf.noDelay`**, **`conf.announce`**, optional **`conf.container`**. Without **`container`**, uses the theme pop container and forces **`fixed`**. |
112
+ | `Loader.hide()` | Decrements the show counter and removes the instance from the DOM when it reaches zero. |
@@ -1,6 +1,6 @@
1
1
  # Menu
2
2
 
3
- **`sonic-menu`** lays out navigation or actions as a **`direction`** row or column of **`sonic-menu-item`** entries (ghost **`variant`** and block **`shape`** by default), optional **`sonic-divider`** separators, and overflow content in the **`more`** slot (popover “…” trigger). Set `href` / `pushstate` / `autoActive` on each `sonic-menu-item` (same API as `sonic-button`), not on the menu host.
3
+ **`sonic-menu`** lays out navigation or actions as a **`direction`** row or column of **`sonic-menu-item`** entries (ghost **`variant`** and block **`shape`** by default), optional **`sonic-divider`** separators, and overflow content in the **`more`** slot (popover “…” trigger). Set **`href`** / **`pushstate`** / **`autoActive`** on each **`sonic-menu-item`**—same API as **`sonic-button`**—not on the menu host.
4
4
 
5
5
  ## Basic example
6
6
 
@@ -40,11 +40,11 @@ Default **`direction`** is **`column`**. Use **`row`** for horizontal toolbars o
40
40
  </sonic-menu-item>
41
41
  <sonic-menu-item>
42
42
  <sonic-icon library="iconoir" name="clock-outline" slot="prefix"></sonic-icon>
43
- Flights
43
+ History
44
44
  </sonic-menu-item>
45
45
  <sonic-menu-item>
46
46
  <sonic-icon library="iconoir" name="bag" slot="prefix"></sonic-icon>
47
- Baggage
47
+ Orders
48
48
  </sonic-menu-item>
49
49
  <sonic-menu-item type="danger">
50
50
  <sonic-icon library="iconoir" name="log-out" slot="prefix"></sonic-icon>
@@ -62,11 +62,11 @@ Default **`direction`** is **`column`**. Use **`row`** for horizontal toolbars o
62
62
  </sonic-menu-item>
63
63
  <sonic-menu-item>
64
64
  <sonic-icon library="iconoir" name="clock-outline" slot="prefix"></sonic-icon>
65
- Flights
65
+ History
66
66
  </sonic-menu-item>
67
67
  <sonic-menu-item>
68
68
  <sonic-icon library="iconoir" name="bag" slot="prefix"></sonic-icon>
69
- Baggage
69
+ Orders
70
70
  </sonic-menu-item>
71
71
  <sonic-menu-item type="danger">
72
72
  <sonic-icon library="iconoir" name="log-out" slot="prefix"></sonic-icon>
@@ -91,11 +91,11 @@ Default **`direction`** is **`column`**. Use **`row`** for horizontal toolbars o
91
91
  </sonic-menu-item>
92
92
  <sonic-menu-item>
93
93
  <sonic-icon library="iconoir" name="clock-outline" slot="prefix"></sonic-icon>
94
- Flights
94
+ History
95
95
  </sonic-menu-item>
96
96
  <sonic-menu-item>
97
97
  <sonic-icon library="iconoir" name="bag" slot="prefix"></sonic-icon>
98
- Baggage
98
+ Orders
99
99
  </sonic-menu-item>
100
100
  </sonic-menu>
101
101
  <sonic-menu size="sm" direction="row">
@@ -106,11 +106,11 @@ Default **`direction`** is **`column`**. Use **`row`** for horizontal toolbars o
106
106
  </sonic-menu-item>
107
107
  <sonic-menu-item>
108
108
  <sonic-icon library="iconoir" name="clock-outline" slot="prefix"></sonic-icon>
109
- Flights
109
+ History
110
110
  </sonic-menu-item>
111
111
  <sonic-menu-item>
112
112
  <sonic-icon library="iconoir" name="bag" slot="prefix"></sonic-icon>
113
- Baggage
113
+ Orders
114
114
  </sonic-menu-item>
115
115
  </sonic-menu>
116
116
  <sonic-menu direction="row">
@@ -121,11 +121,11 @@ Default **`direction`** is **`column`**. Use **`row`** for horizontal toolbars o
121
121
  </sonic-menu-item>
122
122
  <sonic-menu-item>
123
123
  <sonic-icon library="iconoir" name="clock-outline" slot="prefix"></sonic-icon>
124
- Flights
124
+ History
125
125
  </sonic-menu-item>
126
126
  <sonic-menu-item>
127
127
  <sonic-icon library="iconoir" name="bag" slot="prefix"></sonic-icon>
128
- Baggage
128
+ Orders
129
129
  </sonic-menu-item>
130
130
  </sonic-menu>
131
131
  <sonic-menu size="lg" direction="row">
@@ -136,11 +136,11 @@ Default **`direction`** is **`column`**. Use **`row`** for horizontal toolbars o
136
136
  </sonic-menu-item>
137
137
  <sonic-menu-item>
138
138
  <sonic-icon library="iconoir" name="clock-outline" slot="prefix"></sonic-icon>
139
- Flights
139
+ History
140
140
  </sonic-menu-item>
141
141
  <sonic-menu-item>
142
142
  <sonic-icon library="iconoir" name="bag" slot="prefix"></sonic-icon>
143
- Baggage
143
+ Orders
144
144
  </sonic-menu-item>
145
145
  </sonic-menu>
146
146
  <sonic-menu size="xl" direction="row">
@@ -151,11 +151,11 @@ Default **`direction`** is **`column`**. Use **`row`** for horizontal toolbars o
151
151
  </sonic-menu-item>
152
152
  <sonic-menu-item>
153
153
  <sonic-icon library="iconoir" name="clock-outline" slot="prefix"></sonic-icon>
154
- Flights
154
+ History
155
155
  </sonic-menu-item>
156
156
  <sonic-menu-item>
157
157
  <sonic-icon library="iconoir" name="bag" slot="prefix"></sonic-icon>
158
- Baggage
158
+ Orders
159
159
  </sonic-menu-item>
160
160
  </sonic-menu>
161
161
  </div>
@@ -243,11 +243,11 @@ Assign nodes to **`slot="more"`** to show the overflow popover. The trigger appe
243
243
  </sonic-menu-item>
244
244
  <sonic-menu-item>
245
245
  <sonic-icon library="iconoir" name="clock-outline" slot="prefix"></sonic-icon>
246
- Flights
246
+ History
247
247
  </sonic-menu-item>
248
248
  <sonic-menu-item>
249
249
  <sonic-icon library="iconoir" name="bag" slot="prefix"></sonic-icon>
250
- Baggage
250
+ Orders
251
251
  </sonic-menu-item>
252
252
  <sonic-menu slot="more">
253
253
  <sonic-menu-item>
@@ -285,11 +285,11 @@ With **`scrollable`**, the main slot scrolls with edge fade masks; drag-to-scrol
285
285
  </sonic-menu-item>
286
286
  <sonic-menu-item>
287
287
  <sonic-icon library="iconoir" name="clock-outline" slot="prefix"></sonic-icon>
288
- Flights
288
+ History
289
289
  </sonic-menu-item>
290
290
  <sonic-menu-item>
291
291
  <sonic-icon library="iconoir" name="bag" slot="prefix"></sonic-icon>
292
- Baggage
292
+ Orders
293
293
  </sonic-menu-item>
294
294
  <sonic-menu-item variant="ghost">
295
295
  <sonic-icon library="iconoir" name="home" slot="prefix"></sonic-icon>
@@ -301,11 +301,11 @@ With **`scrollable`**, the main slot scrolls with edge fade masks; drag-to-scrol
301
301
  </sonic-menu-item>
302
302
  <sonic-menu-item>
303
303
  <sonic-icon library="iconoir" name="clock-outline" slot="prefix"></sonic-icon>
304
- Flights
304
+ History
305
305
  </sonic-menu-item>
306
306
  <sonic-menu-item>
307
307
  <sonic-icon library="iconoir" name="bag" slot="prefix"></sonic-icon>
308
- Baggage
308
+ Orders
309
309
  </sonic-menu-item>
310
310
  <sonic-menu-item variant="ghost">
311
311
  <sonic-icon library="iconoir" name="home" slot="prefix"></sonic-icon>
@@ -317,11 +317,11 @@ With **`scrollable`**, the main slot scrolls with edge fade masks; drag-to-scrol
317
317
  </sonic-menu-item>
318
318
  <sonic-menu-item>
319
319
  <sonic-icon library="iconoir" name="clock-outline" slot="prefix"></sonic-icon>
320
- Flights
320
+ History
321
321
  </sonic-menu-item>
322
322
  <sonic-menu-item>
323
323
  <sonic-icon library="iconoir" name="bag" slot="prefix"></sonic-icon>
324
- Baggage
324
+ Orders
325
325
  </sonic-menu-item>
326
326
  <sonic-menu-item>
327
327
  <sonic-icon library="iconoir" name="settings" slot="prefix"></sonic-icon>
@@ -356,15 +356,15 @@ With **`scrollable`**, the main slot scrolls with edge fade masks; drag-to-scrol
356
356
  |----------|---------|-------------|
357
357
  | `direction` | `column` (default) · `row` | Vertical list or horizontal bar |
358
358
  | `align` | `left` (default) · `center` · `right` | Alignment propagated to items (except square / circle **`shape`**) |
359
- | `size` | `2xs` … `2xl` (default: items keep their own size) | Propagated to items and the **`more`** trigger when unset on the item |
360
- | `shadow` | `none` · `sm` · `md` · `lg` | Shadow around the menu; none when omitted |
359
+ | `size` | `xs` · `sm` · `md` · `lg` · `xl` | Propagated to items and the **`more`** trigger when unset on the item |
360
+ | `shadow` | `sm` · `md` · `lg` | Shadow around the menu; omitted for none |
361
361
  | `minWidth` | CSS length | Minimum width of the container (default `0`) |
362
362
  | `scrollable` | boolean | Scroll with edge fade; auto-scroll when a single item is **`active`** |
363
363
  | `moreShape` | `circle` (default) · `square` | Shape of the **`more`** slot trigger button |
364
364
 
365
365
  | Slot | Description |
366
366
  |------|-------------|
367
- | *(default)* | Visible items: `sonic-menu-item` · `sonic-divider` · nested `sonic-menu` |
367
+ | *(default)* | Visible items: **`sonic-menu-item`**, **`sonic-divider`**, nested **`sonic-menu`** |
368
368
  | `more` | Popover content for the “…” control; shown only when the slot has assigned nodes |
369
369
 
370
- **`sonic-menu-item`** extends **`sonic-button`** (defaults `variant="ghost"` and `shape="block"`). See [Button](/core/components/ui/button) for `type` · `variant` · `href` · `pushstate` · `autoActive` and the item slots.
370
+ **`sonic-menu-item`** extends **`sonic-button`** (defaults: **`variant="ghost"`**, **`shape="block"`**). Use the button docs for **`type`**, **`variant`**, **`href`**, **`pushstate`**, **`autoActive`**, and item slots.