@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,65 +1,158 @@
1
1
  # Table
2
2
 
3
- **`sonic-table`** lays out tabular data with **`sonic-tr`** · **`sonic-th`** · **`sonic-td`** children, optionally grouped in **`sonic-thead`** · **`sonic-tbody`** · **`sonic-tfoot`**. It scrolls horizontally when columns overflow; set **`minWidth`** on wide cells to keep them readable. Render fetched rows with **`sonic-list`**.
3
+ **`sonic-table`** lays out tabular data with composable **`sonic-tr`** / **`sonic-th`** / **`sonic-td`** children. The root applies shared typography via **`size`**, scrolls horizontally when content overflows, and optionally caps height with **`maxHeight`**. Pair with **`sonic-thead`** and **`sonic-tbody`** for structure and with **`sonic-list`** to render fetched rows.
4
4
 
5
5
  ## Basic example
6
6
 
7
- **`bordered`** adds an outer frame and row dividers. **`sonic-tbody`** stripes and highlights its rows on hover.
7
+ A header row plus body rows is enough for static tables; **`sonic-thead`** / **`sonic-tbody`** are optional for simple layouts.
8
+
9
+ <sonic-code>
10
+ <template>
11
+ <sonic-table>
12
+ <sonic-tr>
13
+ <sonic-th>Id</sonic-th>
14
+ <sonic-th>Name</sonic-th>
15
+ <sonic-th>Email</sonic-th>
16
+ </sonic-tr>
17
+ <sonic-tr>
18
+ <sonic-td>1</sonic-td>
19
+ <sonic-td>George Bluth</sonic-td>
20
+ <sonic-td>george.bluth@reqres.in</sonic-td>
21
+ </sonic-tr>
22
+ <sonic-tr>
23
+ <sonic-td>2</sonic-td>
24
+ <sonic-td>Janet Weaver</sonic-td>
25
+ <sonic-td>janet.weaver@reqres.in</sonic-td>
26
+ </sonic-tr>
27
+ <sonic-tr>
28
+ <sonic-td>3</sonic-td>
29
+ <sonic-td>Emma Wong</sonic-td>
30
+ <sonic-td>emma.wong@reqres.in</sonic-td>
31
+ </sonic-tr>
32
+ </sonic-table>
33
+ </template>
34
+ </sonic-code>
35
+
36
+ ## List and fetch
37
+
38
+ Place **`sonic-list`** inside **`sonic-tbody`** so each item template renders a **`sonic-tr`**. **`sonic-list`** sets row metadata (`even` / `odd` / `last`) on **`sonic-tr`** for striping and borders.
39
+
40
+ <sonic-code>
41
+ <template>
42
+ <sonic-table>
43
+ <sonic-thead>
44
+ <sonic-tr>
45
+ <sonic-th>Id</sonic-th>
46
+ <sonic-th>Name</sonic-th>
47
+ <sonic-th>Email</sonic-th>
48
+ </sonic-tr>
49
+ </sonic-thead>
50
+ <sonic-tbody>
51
+ <sonic-list debug fetch serviceURL="/docs-mock-api" dataProvider="api/users" key="data" displayContents>
52
+ <template>
53
+ <sonic-tr>
54
+ <sonic-td data-bind ::inner-html="$id"></sonic-td>
55
+ <sonic-td data-bind ::inner-html="$first_name <b>$last_name</b>"></sonic-td>
56
+ <sonic-td data-bind ::inner-html="$email"></sonic-td>
57
+ </sonic-tr>
58
+ </template>
59
+ </sonic-list>
60
+ </sonic-tbody>
61
+ </sonic-table>
62
+ </template>
63
+ </sonic-code>
64
+
65
+ ## Size
66
+
67
+ Default font size is **`md`** (omit **`size`**). Sizes follow the shared scale (`2xs` … `2xl`).
68
+
69
+ <sonic-code>
70
+ <template>
71
+ <div class="grid grid-cols-4 gap-3">
72
+ <sonic-table size="2xs" bordered>
73
+ <sonic-tr><sonic-td class="w-[5rem]">2xs</sonic-td></sonic-tr>
74
+ </sonic-table>
75
+ <sonic-table size="xs" bordered>
76
+ <sonic-tr><sonic-td class="w-[5rem]">xs</sonic-td></sonic-tr>
77
+ </sonic-table>
78
+ <sonic-table size="sm" bordered>
79
+ <sonic-tr><sonic-td class="w-[5rem]">sm</sonic-td></sonic-tr>
80
+ </sonic-table>
81
+ <sonic-table size="md" bordered>
82
+ <sonic-tr><sonic-td class="w-[5rem]">md</sonic-td></sonic-tr>
83
+ </sonic-table>
84
+ <sonic-table bordered>
85
+ <sonic-tr><sonic-td class="w-[5rem]">default</sonic-td></sonic-tr>
86
+ </sonic-table>
87
+ <sonic-table size="lg" bordered>
88
+ <sonic-tr><sonic-td class="w-[5rem]">lg</sonic-td></sonic-tr>
89
+ </sonic-table>
90
+ <sonic-table size="xl" bordered>
91
+ <sonic-tr><sonic-td class="w-[5rem]">xl</sonic-td></sonic-tr>
92
+ </sonic-table>
93
+ <sonic-table size="2xl" bordered>
94
+ <sonic-tr><sonic-td class="w-[5rem]">2xl</sonic-td></sonic-tr>
95
+ </sonic-table>
96
+ </div>
97
+ </template>
98
+ </sonic-code>
99
+
100
+ ## Bordered
101
+
102
+ Set **`bordered`** on **`sonic-table`** for an outer frame and horizontal rules between rows.
8
103
 
9
104
  <sonic-code>
10
105
  <template>
11
106
  <sonic-table bordered>
12
107
  <sonic-thead>
13
108
  <sonic-tr>
14
- <sonic-th>Flight</sonic-th>
15
- <sonic-th>Destination</sonic-th>
16
- <sonic-th>Status</sonic-th>
109
+ <sonic-th>Id</sonic-th>
110
+ <sonic-th>Name</sonic-th>
111
+ <sonic-th>Email</sonic-th>
17
112
  </sonic-tr>
18
113
  </sonic-thead>
19
114
  <sonic-tbody>
20
115
  <sonic-tr>
21
- <sonic-td>CN 001</sonic-td>
22
- <sonic-td>New York JFK</sonic-td>
23
- <sonic-td>Boarding</sonic-td>
116
+ <sonic-td>1</sonic-td>
117
+ <sonic-td>George Bluth</sonic-td>
118
+ <sonic-td>george.bluth@reqres.in</sonic-td>
24
119
  </sonic-tr>
25
120
  <sonic-tr>
26
- <sonic-td>CN 014</sonic-td>
27
- <sonic-td>London LHR</sonic-td>
28
- <sonic-td>On time</sonic-td>
121
+ <sonic-td>2</sonic-td>
122
+ <sonic-td>Janet Weaver</sonic-td>
123
+ <sonic-td>janet.weaver@reqres.in</sonic-td>
29
124
  </sonic-tr>
30
125
  <sonic-tr>
31
- <sonic-td>CN 102</sonic-td>
32
- <sonic-td>Rio de Janeiro GIG</sonic-td>
33
- <sonic-td>Delayed</sonic-td>
126
+ <sonic-td>3</sonic-td>
127
+ <sonic-td>Emma Wong</sonic-td>
128
+ <sonic-td>emma.wong@reqres.in</sonic-td>
34
129
  </sonic-tr>
35
130
  </sonic-tbody>
36
131
  </sonic-table>
37
132
  </template>
38
133
  </sonic-code>
39
134
 
40
- ## List, fetch and max height
135
+ ## Max height
41
136
 
42
- Put a **`sonic-list`** with `displayContents` inside **`sonic-tbody`** and render one **`sonic-tr`** per item; the list sets `even` · `odd` · `last` on each row. **`maxHeight`** caps the scroll container so the body scrolls vertically.
137
+ **`maxHeight`** applies to the scroll container (for example `8rem`), so the body scrolls vertically while the table can still scroll horizontally.
43
138
 
44
139
  <sonic-code>
45
140
  <template>
46
- <sonic-table maxHeight="10rem">
141
+ <sonic-table maxHeight="8rem">
47
142
  <sonic-thead>
48
143
  <sonic-tr>
49
- <sonic-th>Time</sonic-th>
50
- <sonic-th>Flight</sonic-th>
51
- <sonic-th>Destination</sonic-th>
52
- <sonic-th>Gate</sonic-th>
144
+ <sonic-th>Id</sonic-th>
145
+ <sonic-th>Name</sonic-th>
146
+ <sonic-th>Email</sonic-th>
53
147
  </sonic-tr>
54
148
  </sonic-thead>
55
149
  <sonic-tbody>
56
- <sonic-list fetch serviceURL="/docs-mock-api" dataProvider="flights" key="flights" displayContents>
150
+ <sonic-list fetch serviceURL="/docs-mock-api" dataProvider="api/users" key="data" displayContents>
57
151
  <template>
58
152
  <sonic-tr>
59
- <sonic-td data-bind ::inner-html="$time"></sonic-td>
60
- <sonic-td data-bind ::inner-html="$code"></sonic-td>
61
- <sonic-td minWidth="10rem" data-bind ::inner-html="$city <b>$airport</b>"></sonic-td>
62
- <sonic-td data-bind ::inner-html="$gate"></sonic-td>
153
+ <sonic-td data-bind ::inner-html="$id"></sonic-td>
154
+ <sonic-td data-bind ::inner-html="$first_name <b>$last_name</b>"></sonic-td>
155
+ <sonic-td data-bind ::inner-html="$email"></sonic-td>
63
156
  </sonic-tr>
64
157
  </template>
65
158
  </sonic-list>
@@ -68,41 +161,23 @@ Put a **`sonic-list`** with `displayContents` inside **`sonic-tbody`** and rende
68
161
  </template>
69
162
  </sonic-code>
70
163
 
71
- ## Size
72
-
73
- With no **`size`**, the table uses `md`.
74
-
75
- <sonic-code>
76
- <template>
77
- <div class="grid grid-cols-4 gap-3">
78
- <sonic-table size="2xs" bordered><sonic-tr><sonic-td>2xs</sonic-td></sonic-tr></sonic-table>
79
- <sonic-table size="xs" bordered><sonic-tr><sonic-td>xs</sonic-td></sonic-tr></sonic-table>
80
- <sonic-table size="sm" bordered><sonic-tr><sonic-td>sm</sonic-td></sonic-tr></sonic-table>
81
- <sonic-table size="md" bordered><sonic-tr><sonic-td>md</sonic-td></sonic-tr></sonic-table>
82
- <sonic-table size="lg" bordered><sonic-tr><sonic-td>lg</sonic-td></sonic-tr></sonic-table>
83
- <sonic-table size="xl" bordered><sonic-tr><sonic-td>xl</sonic-td></sonic-tr></sonic-table>
84
- <sonic-table size="2xl" bordered><sonic-tr><sonic-td>2xl</sonic-td></sonic-tr></sonic-table>
85
- </div>
86
- </template>
87
- </sonic-code>
88
-
89
164
  ## Type
90
165
 
91
- **`type`** on **`sonic-tr`** · **`sonic-th`** · **`sonic-td`** sets a semantic text color.
166
+ Set **`type`** on **`sonic-th`** / **`sonic-td`** / **`sonic-tr`** for semantic text color (`primary` · `info` · `success` · `warning` · `danger` · `neutral` · `default`).
92
167
 
93
168
  <sonic-code>
94
169
  <template>
95
170
  <sonic-table bordered>
96
171
  <sonic-tr>
97
- <sonic-th type="info">Set on</sonic-th>
172
+ <sonic-th type="info">Attribute type set on</sonic-th>
98
173
  <sonic-th type="info">sonic-th</sonic-th>
99
174
  </sonic-tr>
100
175
  <sonic-tr>
101
- <sonic-td type="danger">Set on</sonic-td>
176
+ <sonic-td type="danger">Attribute type set on</sonic-td>
102
177
  <sonic-td type="danger">sonic-td</sonic-td>
103
178
  </sonic-tr>
104
179
  <sonic-tr type="success">
105
- <sonic-td>Set on</sonic-td>
180
+ <sonic-td>Attribute type set on</sonic-td>
106
181
  <sonic-td>sonic-tr</sonic-td>
107
182
  </sonic-tr>
108
183
  </sonic-table>
@@ -111,9 +186,11 @@ With no **`size`**, the table uses `md`.
111
186
 
112
187
  ## Colspan and rowspan
113
188
 
189
+ Use **`colSpan`** and **`rowSpan`** on **`sonic-th`** or **`sonic-td`** (maps to `colspan` / `rowspan` on the cell).
190
+
114
191
  <sonic-code>
115
192
  <template>
116
- <sonic-table bordered>
193
+ <sonic-table>
117
194
  <sonic-tbody>
118
195
  <sonic-tr>
119
196
  <sonic-td colspan="2" class="bg-info text-neutral-0">colspan: 2</sonic-td>
@@ -133,36 +210,73 @@ With no **`size`**, the table uses `md`.
133
210
  </template>
134
211
  </sonic-code>
135
212
 
136
- ## Alignment and width
213
+ ## Cell alignment and width
137
214
 
138
- **`align`** sets horizontal alignment. **`width`** · **`minWidth`** · **`maxWidth`** set the cell dimensions. **`vAlign`** exists on **`sonic-td`** only.
215
+ **`align`** sets horizontal alignment (`left` · `center` · `right`). **`minWidth`** / **`maxWidth`** / **`width`** set inline dimensions on the cell. **`vAlign`** is available on **`sonic-td`** only.
139
216
 
140
217
  <sonic-code>
141
218
  <template>
142
219
  <sonic-table bordered>
143
220
  <sonic-thead>
144
221
  <sonic-tr>
145
- <sonic-th width="8rem">align</sonic-th>
146
- <sonic-th maxWidth="8rem">maxWidth 8rem</sonic-th>
147
- <sonic-th>vAlign</sonic-th>
222
+ <sonic-th width="7rem">align</sonic-th>
223
+ <sonic-th minWidth="20rem">minWidth</sonic-th>
224
+ <sonic-th>maxWidth</sonic-th>
225
+ <sonic-th>width</sonic-th>
148
226
  </sonic-tr>
149
227
  </sonic-thead>
150
228
  <sonic-tbody>
151
229
  <sonic-tr>
152
- <sonic-td align="left">left</sonic-td>
153
- <sonic-td maxWidth="8rem">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</sonic-td>
154
- <sonic-td vAlign="top">top</sonic-td>
230
+ <sonic-td align="left">Left</sonic-td>
231
+ <sonic-td>20rem</sonic-td>
232
+ <sonic-td>5rem</sonic-td>
233
+ <sonic-td>15rem</sonic-td>
155
234
  </sonic-tr>
156
235
  <sonic-tr>
157
236
  <sonic-td align="center">center</sonic-td>
158
- <sonic-td maxWidth="8rem">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</sonic-td>
159
- <sonic-td vAlign="middle">middle</sonic-td>
237
+ <sonic-td>20rem</sonic-td>
238
+ <sonic-td maxWidth="5rem">5rem</sonic-td>
239
+ <sonic-td>15rem</sonic-td>
160
240
  </sonic-tr>
161
241
  <sonic-tr>
162
242
  <sonic-td align="right">right</sonic-td>
163
- <sonic-td maxWidth="8rem">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</sonic-td>
164
- <sonic-td vAlign="bottom">bottom</sonic-td>
243
+ <sonic-td>20rem</sonic-td>
244
+ <sonic-td maxWidth="5rem">5rem — Lorem ipsum dolor</sonic-td>
245
+ <sonic-td width="60rem">15rem — Lorem ipsum dolor sit amet, consectetur adipiscing elit.</sonic-td>
246
+ </sonic-tr>
247
+ </sonic-tbody>
248
+ </sonic-table>
249
+ </template>
250
+ </sonic-code>
251
+
252
+ ## Responsive layout
253
+
254
+ Tables scroll horizontally by default when columns exceed the viewport. Use **`minWidth`** on wide columns to preserve readable line length.
255
+
256
+ <sonic-code>
257
+ <template>
258
+ <sonic-table bordered>
259
+ <sonic-thead>
260
+ <sonic-tr>
261
+ <sonic-th>Id</sonic-th>
262
+ <sonic-th>Name</sonic-th>
263
+ <sonic-th>Email</sonic-th>
264
+ <sonic-th>Comment</sonic-th>
165
265
  </sonic-tr>
266
+ </sonic-thead>
267
+ <sonic-tbody>
268
+ <sonic-list fetch serviceURL="/docs-mock-api" dataProvider="api/users" key="data" displayContents>
269
+ <template>
270
+ <sonic-tr>
271
+ <sonic-td data-bind ::inner-html="$id"></sonic-td>
272
+ <sonic-td minWidth="10rem" data-bind ::inner-html="$first_name <b>$last_name</b>"></sonic-td>
273
+ <sonic-td data-bind ::inner-html="$email"></sonic-td>
274
+ <sonic-td minWidth="40rem">
275
+ Phasellus suscipit vulputate lacus, in tempor turpis aliquam vel. Nunc eleifend, velit id ultrices elementum, ipsum felis porttitor dui, id laoreet diam nulla sed urna.
276
+ </sonic-td>
277
+ </sonic-tr>
278
+ </template>
279
+ </sonic-list>
166
280
  </sonic-tbody>
167
281
  </sonic-table>
168
282
  </template>
@@ -170,14 +284,16 @@ With no **`size`**, the table uses `md`.
170
284
 
171
285
  ## Sticky header and caption
172
286
 
173
- **`sonic-th`** cells stick to the top of the scroll container. To stick the header to the page instead, set **`noCustomScroll`** (which removes the scroll container) and position **`sonic-thead`** yourself. **`sonic-caption`** adds a caption.
287
+ **`sonic-th`** uses `position: sticky` with `top: 0` inside the table. For page-level sticky headers, set **`noCustomScroll`** on **`sonic-table`** and position **`sonic-thead`** (for example `class="sticky top-16"`). Add **`sonic-caption`** for a table title below the grid.
174
288
 
175
289
  <sonic-code>
176
290
  <template>
177
291
  <sonic-table bordered noCustomScroll>
178
292
  <sonic-thead class="sticky top-16">
179
293
  <sonic-tr>
180
- <sonic-th minWidth="12rem">Product</sonic-th>
294
+ <sonic-th minWidth="max(20ch,12rem)">Company</sonic-th>
295
+ <sonic-th type="success">Contact</sonic-th>
296
+ <sonic-th>Country</sonic-th>
181
297
  <sonic-th align="center">Quantity</sonic-th>
182
298
  <sonic-th align="right">Price</sonic-th>
183
299
  <sonic-th></sonic-th>
@@ -185,37 +301,54 @@ With no **`size`**, the table uses `md`.
185
301
  </sonic-thead>
186
302
  <sonic-tbody>
187
303
  <sonic-tr>
188
- <sonic-td>Desk lamp</sonic-td>
304
+ <sonic-td>Alfreds Futterkiste</sonic-td>
305
+ <sonic-td>Maria Anders</sonic-td>
306
+ <sonic-td>Germany</sonic-td>
189
307
  <sonic-td align="center">2</sonic-td>
190
- <sonic-td align="right">40 €</sonic-td>
308
+ <sonic-td align="right">40€</sonic-td>
309
+ <sonic-td align="right">
310
+ <sonic-button shape="circle" variant="outline" size="sm">
311
+ <sonic-icon library="iconoir" name="edit-pencil" size="lg"></sonic-icon>
312
+ </sonic-button>
313
+ </sonic-td>
314
+ </sonic-tr>
315
+ <sonic-tr>
316
+ <sonic-td>Centro comercial Moctezuma</sonic-td>
317
+ <sonic-td colspan="2" align="center" class="text-center text-neutral-400">no information yet</sonic-td>
318
+ <sonic-td align="center">3</sonic-td>
319
+ <sonic-td align="right">40€</sonic-td>
191
320
  <sonic-td align="right">
192
- <sonic-button shape="circle" variant="outline" size="sm" aria-label="Edit">
321
+ <sonic-button shape="circle" variant="outline" size="sm">
193
322
  <sonic-icon library="iconoir" name="edit-pencil" size="lg"></sonic-icon>
194
323
  </sonic-button>
195
324
  </sonic-td>
196
325
  </sonic-tr>
197
326
  <sonic-tr type="warning">
198
- <sonic-td>Notebook</sonic-td>
327
+ <sonic-td>Laughing Bacchus Winecellars</sonic-td>
328
+ <sonic-td>Yoshi Tannamuri</sonic-td>
329
+ <sonic-td>Canada</sonic-td>
199
330
  <sonic-td align="center">0</sonic-td>
200
- <sonic-td align="right">8 €</sonic-td>
331
+ <sonic-td align="right">40€</sonic-td>
201
332
  <sonic-td align="right">
202
- <sonic-button shape="circle" variant="outline" size="sm" aria-label="Edit">
333
+ <sonic-button shape="circle" variant="outline" size="sm">
203
334
  <sonic-icon library="iconoir" name="edit-pencil" size="lg"></sonic-icon>
204
335
  </sonic-button>
205
336
  </sonic-td>
206
337
  </sonic-tr>
207
338
  <sonic-tr>
208
- <sonic-td>Headphones</sonic-td>
209
- <sonic-td align="center">1</sonic-td>
210
- <sonic-td align="right" type="danger">120 €</sonic-td>
339
+ <sonic-td>Magazzini Alimentari Riuniti</sonic-td>
340
+ <sonic-td>Giovanni Rovelli</sonic-td>
341
+ <sonic-td type="danger">Italy</sonic-td>
342
+ <sonic-td align="center">20</sonic-td>
343
+ <sonic-td align="right">40€</sonic-td>
211
344
  <sonic-td align="right">
212
- <sonic-button shape="circle" variant="outline" size="sm" aria-label="Edit">
345
+ <sonic-button shape="circle" variant="outline" size="sm">
213
346
  <sonic-icon library="iconoir" name="edit-pencil" size="lg"></sonic-icon>
214
347
  </sonic-button>
215
348
  </sonic-td>
216
349
  </sonic-tr>
217
350
  </sonic-tbody>
218
- <sonic-caption>Cart contents</sonic-caption>
351
+ <sonic-caption>Table caption</sonic-caption>
219
352
  </sonic-table>
220
353
  </template>
221
354
  </sonic-code>
@@ -226,41 +359,72 @@ With no **`size`**, the table uses `md`.
226
359
 
227
360
  | Attribute | Values | Description |
228
361
  |----------|---------|-------------|
229
- | `size` | `2xs` … `2xl` · `inherit` (default `md`) | Font size |
362
+ | `size` | `2xs` · `xs` · `sm` · `md` · `lg` · `xl` · `2xl` · `inherit` (default `md`) | Scales table font size via shared size tokens |
230
363
  | `bordered` | boolean | Outer border and row dividers |
231
- | `maxHeight` | CSS length | Max height of the scroll container |
232
- | `noCustomScroll` | boolean | Remove the scroll container and its custom scrollbar |
364
+ | `noCustomScroll` | boolean | Disables custom scrollbar styling on the horizontal scroll container |
365
+ | `rounded` | boolean | Reflected on the host; no default table styles |
366
+ | `maxHeight` | CSS length | Max height on the scroll container; enables vertical scrolling |
367
+
368
+ | Slot | Description |
369
+ |------|-------------|
370
+ | *(default)* | Table sections and rows (`sonic-thead`, `sonic-tbody`, `sonic-tr`, …) |
371
+
372
+ ### `sonic-thead` · `sonic-tbody` · `sonic-tfoot`
233
373
 
234
374
  | Slot | Description |
235
375
  |------|-------------|
236
- | *(default)* | Sections, rows and caption |
376
+ | *(default)* | Row elements (`sonic-tr`) |
377
+
378
+ `sonic-tbody` wraps slotted rows in a native `<tbody>` and applies zebra / hover backgrounds to **`sonic-tr`** children.
237
379
 
238
- ### `sonic-thead` · `sonic-tbody` · `sonic-tfoot` · `sonic-caption`
380
+ ### `sonic-caption`
239
381
 
240
- No attributes. Default slot only. `sonic-tbody` stripes and highlights its rows.
382
+ | Slot | Description |
383
+ |------|-------------|
384
+ | *(default)* | Caption text rendered as `table-caption` |
241
385
 
242
386
  ### `sonic-tr`
243
387
 
244
388
  | Attribute | Values | Description |
245
389
  |----------|---------|-------------|
246
- | `type` | `default` · `primary` · `info` · `success` · `warning` · `danger` · `neutral` | Text color |
247
- | `even` · `odd` | boolean | Striping background; set by `sonic-list` |
248
- | `last` | boolean | No bottom border; set by `sonic-list` |
390
+ | `type` | `default` · `primary` · `info` · `success` · `warning` · `danger` · `neutral` | Semantic text color for the row |
391
+ | `even` | boolean | Striping background; usually set by **`sonic-list`** metadata |
392
+ | `odd` | boolean | Alternate striping background; usually set by **`sonic-list`** |
393
+ | `last` | boolean | Removes bottom cell border on the last row when **`bordered`** |
394
+
395
+ | Slot | Description |
396
+ |------|-------------|
397
+ | *(default)* | Header or data cells (`sonic-th` / `sonic-td`) |
398
+
399
+ ### `sonic-th`
400
+
401
+ | Attribute | Values | Description |
402
+ |----------|---------|-------------|
403
+ | `type` | `default` · `primary` · `info` · `success` · `warning` · `danger` · `neutral` | Semantic text color |
404
+ | `align` | `left` · `center` · `right` | Horizontal text alignment |
405
+ | `colSpan` | number | Column span |
406
+ | `rowSpan` | number | Row span |
407
+ | `minWidth` | CSS length | Minimum cell width |
408
+ | `maxWidth` | CSS length | Maximum cell width |
409
+ | `width` | CSS length | Cell width |
410
+ | `noBorder` | boolean | Removes the bottom border under the header cell |
249
411
 
250
412
  | Slot | Description |
251
413
  |------|-------------|
252
- | *(default)* | `sonic-th` or `sonic-td` cells |
414
+ | *(default)* | Header label content |
253
415
 
254
- ### `sonic-th` · `sonic-td`
416
+ ### `sonic-td`
255
417
 
256
418
  | Attribute | Values | Description |
257
419
  |----------|---------|-------------|
258
- | `type` | same as `sonic-tr` | Text color |
259
- | `align` | `left` · `center` · `right` | Horizontal alignment |
260
- | `vAlign` | CSS `vertical-align` | Vertical alignment (`sonic-td` only) |
261
- | `colSpan` · `rowSpan` | number | Column and row span |
262
- | `width` · `minWidth` · `maxWidth` | CSS length | Cell dimensions |
263
- | `noBorder` | boolean | No bottom border (`sonic-th` only) |
420
+ | `type` | `default` · `primary` · `info` · `success` · `warning` · `danger` · `neutral` | Semantic text color |
421
+ | `align` | `left` · `center` · `right` | Horizontal text alignment |
422
+ | `vAlign` | CSS `vertical-align` value | Vertical alignment |
423
+ | `colSpan` | number | Column span |
424
+ | `rowSpan` | number | Row span |
425
+ | `minWidth` | CSS length | Minimum cell width |
426
+ | `maxWidth` | CSS length | Maximum cell width |
427
+ | `width` | CSS length | Cell width |
264
428
 
265
429
  | Slot | Description |
266
430
  |------|-------------|
@@ -1,9 +1,11 @@
1
1
  # Theme
2
2
 
3
- **`sonic-theme`** is the root element of a Concorde UI: it holds the `--sc-*` design tokens, optionally applies a built-in palette, and is where popovers, modals and toasts are mounted. Import `@supersoniks/concorde/theme` once at the app entry and wrap your app in it. Token names and brand overrides are covered in [Theming](/docs/getting-started/theming).
3
+ **`sonic-theme`** wraps a Concorde UI: it registers **`--sc-*`** design tokens and provides the default slot for your app. With no **`theme`** attribute (or **`theme="custom"`**), only shared primitives and your overrides apply—built-in **`light`** / **`dark`** / **`auto`** palettes are opt-in. Set **`color`** and **`font`** when the host should carry base text and typography; add Tailwind **`bg-base`** and **`block`** (or **`min-h-screen`**) on the tag for a full surface fill. **Popovers**, **modals**, and **toasts** mount under the nearest connected theme (see [Pop container](#pop-container)). Import **`@supersoniks/concorde/theme`** once at the app entry. For the full public token list and brand overrides, see [Customization](#docs/_getting-started/theming.md/theming).
4
4
 
5
5
  ## Basic example
6
6
 
7
+ Wrap interactive components so tokens and overlays resolve from one root.
8
+
7
9
  <sonic-code>
8
10
  <template>
9
11
  <sonic-theme color font class="block bg-base p-6 rounded-lg">
@@ -14,7 +16,9 @@
14
16
 
15
17
  ## Theme mode
16
18
 
17
- With no `theme` (or `theme="custom"`), only the core tokens and your own `--sc-*` overrides apply. `light` and `dark` apply the built-in palettes; `auto` switches between them with `prefers-color-scheme`.
19
+ **Default:** omit **`theme`** or set **`theme="custom"`**. The host loads core tokens (`--sc-rounded`, shadows, form defaults, …) and any **`--sc-*`** you set; it does **not** apply the built-in light or dark palette.
20
+
21
+ Set **`theme`** to **`light`** or **`dark`** for Concorde’s preset palettes. Set **`theme="auto"`** to follow **`prefers-color-scheme`** (light palette until the OS prefers dark).
18
22
 
19
23
  <sonic-code>
20
24
  <template>
@@ -39,21 +43,39 @@ With no `theme` (or `theme="custom"`), only the core tokens and your own `--sc-*
39
43
  </template>
40
44
  </sonic-code>
41
45
 
42
- ## Text color and font
46
+ ## Presentation
43
47
 
44
- `color` sets the host text color to `--sc-base-content`. `font` applies the base font family, weight and style tokens. Both are off by default. To paint the background, add the Tailwind classes `block` and `bg-base` on the host.
48
+ **`color`** sets text from **`--sc-base-content`**. **`font`** applies **`--sc-font-family-base`**, **`--sc-font-weight-base`**, and **`--sc-font-style-base`**. For the page or shell background, use **`bg-base`** on **`sonic-theme`** (maps to **`--sc-base`** in Tailwind) with **`block`** so the host paints the surface. Components keep their own fallbacks when **`color`** / **`font`** are omitted.
45
49
 
46
50
  <sonic-code>
47
51
  <template>
48
- <sonic-theme theme="light" color font class="block bg-base p-6 rounded-lg">
49
- <p>Body copy inherits the base content color and font from the theme.</p>
52
+ <sonic-theme theme="light" color font class="block bg-base p-6 min-h-[8rem] rounded-lg">
53
+ <p>Body copy inherits base content color and font from the theme host.</p>
54
+ </sonic-theme>
55
+ </template>
56
+ </sonic-code>
57
+
58
+ ## Custom tokens
59
+
60
+ Override **primitives** on **`sonic-theme`** (or **`:root`** / a project stylesheet). Derived radii, shadows, and control rounding are computed from tokens such as **`--sc-rounded`**—avoid copying long lists of internal variables unless you have a specific need.
61
+
62
+ <sonic-code>
63
+ <template>
64
+ <sonic-theme
65
+ theme="custom"
66
+ color
67
+ font
68
+ class="block bg-base p-6 rounded-lg"
69
+ style="--sc-primary: #353429; --sc-rounded: 0.25rem;"
70
+ >
71
+ <sonic-button type="primary">Brand primary</sonic-button>
50
72
  </sonic-theme>
51
73
  </template>
52
74
  </sonic-code>
53
75
 
54
76
  ## Pop container
55
77
 
56
- Overlays such as `sonic-modal` are appended to the last connected `sonic-theme`, or to `document.body` when there is none. `Theme.getPopContainer()` returns that element.
78
+ **`Theme.getPopContainer()`** returns the last connected **`sonic-theme`**, or **`document.body`** if none is connected. When a theme disconnects, the previous connected instance is adopted. Imperative **`Modal.create()`** and declarative **`sonic-modal`** use the same container.
57
79
 
58
80
  <sonic-code>
59
81
  <template>
@@ -76,10 +98,11 @@ Overlays such as `sonic-modal` are appended to the last connected `sonic-theme`,
76
98
 
77
99
  ## Embedded iframes
78
100
 
79
- On connect, the theme posts its resolved `--sc-*` values and linked Google Fonts / Adobe Fonts stylesheets to every iframe on the page (message type `SonicTheme`). An iframe can ask for them again:
101
+ On connect, the theme publishes resolved **`--sc-*`** values and linked font stylesheet URLs (Google Fonts / Adobe Fonts) to the **`sonic-theme`** data channel and **`postMessage`**s them to same-page iframes. Iframes can request a refresh by posting **`{ type: "GetSonicTheme" }`**.
80
102
 
81
103
  <sonic-code language="javascript">
82
104
  <template>
105
+ // Inside the iframe — ask the parent theme to rebroadcast tokens
83
106
  window.parent.postMessage({ type: "GetSonicTheme" }, "*");
84
107
  </template>
85
108
  </sonic-code>
@@ -88,10 +111,12 @@ window.parent.postMessage({ type: "GetSonicTheme" }, "*");
88
111
 
89
112
  | Attribute | Values | Description |
90
113
  |----------|---------|-------------|
91
- | `theme` | `custom` (default) · `light` · `dark` · `auto` | Built-in palette; `custom` applies core tokens and your overrides only |
114
+ | `theme` | omitted · `custom` (default) · `light` · `dark` · `auto` | Omitted or `custom`: core tokens and your `--sc-*` only. `light` / `dark`: fixed presets. `auto`: presets follow `prefers-color-scheme` |
92
115
  | `color` | boolean | Host text color uses `--sc-base-content` |
93
- | `font` | boolean | Host uses the base font family, weight and style tokens |
116
+ | `font` | boolean | Host font uses `--sc-font-family-base` and related base weight/style tokens |
94
117
 
95
118
  | Slot | Description |
96
119
  |------|-------------|
97
- | *(default)* | Application content |
120
+ | *(default)* | Application markup and Concorde components |
121
+
122
+ Surface background: Tailwind **`bg-base`** on **`sonic-theme`** (requires Concorde Tailwind color **`base`** → **`--sc-base`**).