@supersoniks/concorde 5.1.2 → 5.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/.agents/skills/concorde-docs/SKILL.md +1 -1
  2. package/README.md +1 -1
  3. package/ai/README.md +29 -41
  4. package/ai/skills/concorde/SKILL.md +54 -324
  5. package/ai/skills/concorde/rules/composition.md +32 -0
  6. package/ai/skills/concorde/rules/data.md +47 -0
  7. package/ai/skills/concorde/rules/http.md +25 -0
  8. package/ai/skills/concorde/rules/lists-forms.md +35 -0
  9. package/ai/skills/concorde/rules/styling.md +46 -0
  10. package/ai/skills/concorde/rules/troubleshooting.md +45 -0
  11. package/build-infos.json +1 -1
  12. package/concorde-core.bundle.js +21 -21
  13. package/concorde-core.es.js +977 -980
  14. package/custom-elements-manifest.public.config.mjs +8 -0
  15. package/{.tmp-cem/custom-elements.json → custom-elements.json} +11722 -8868
  16. package/dist/concorde-core.bundle.js +21 -21
  17. package/dist/concorde-core.es.js +977 -980
  18. package/dist/docs-mock-api-sw.js +58 -223
  19. package/dist/docs-mock-api-sw.js.map +4 -4
  20. package/dist/img/concorde/plane_01.jpg +0 -0
  21. package/dist/img/concorde/plane_02.jpg +0 -0
  22. package/dist/img/concorde/plane_03.jpg +0 -0
  23. package/dist/img/concorde/plane_04.jpg +0 -0
  24. package/dist/img/concorde/plane_05.jpg +0 -0
  25. package/dist/img/concorde/plane_06.jpg +0 -0
  26. package/dist/img/concorde/plane_07.jpg +0 -0
  27. package/dist/img/concorde/plane_08.jpg +0 -0
  28. package/dist/img/concorde/plane_09.jpg +0 -0
  29. package/dist/img/concorde/plane_10.jpg +0 -0
  30. package/dist/img/concorde/plane_11.jpg +0 -0
  31. package/dist/img/concorde/plane_12.jpg +0 -0
  32. package/dist/img/concorde/plane_13.jpg +0 -0
  33. package/dist/img/og-concorde.jpg +0 -0
  34. package/dist/robots.txt +11 -10
  35. package/docs/.htaccess +7 -0
  36. package/docs/about.html +111 -0
  37. package/docs/about.md +22 -0
  38. package/docs/assets/{index-BgG6FFPt.js → index-6sS76xWj.js} +482 -500
  39. package/docs/assets/{index-x89XINSG.css → index-DkdPbH0F.css} +1 -1
  40. package/docs/core/components/functional/date/date.md +1 -1
  41. package/docs/core/components/functional/list/list.html +7 -5
  42. package/docs/core/components/functional/list/list.md +6 -2
  43. package/docs/core/components/ui/card/card.html +1 -1
  44. package/docs/core/components/ui/card/card.md +1 -1
  45. package/docs/core/components/ui/image/image.html +17 -17
  46. package/docs/core/components/ui/image/image.md +17 -17
  47. package/docs/core/components/ui/modal/modal.html +2 -2
  48. package/docs/core/components/ui/modal/modal.md +2 -2
  49. package/docs/custom-elements.json +16559 -0
  50. package/docs/docs/decorators/bind.html +22 -21
  51. package/docs/docs/decorators/bind.md +23 -24
  52. package/docs/docs/getting-started/ai-agents.html +50 -94
  53. package/docs/docs/getting-started/ai-agents.md +29 -55
  54. package/docs/docs/getting-started/dataFlow.html +1 -1
  55. package/docs/docs/getting-started/dataFlow.md +1 -1
  56. package/docs/docs/index.html +1 -1
  57. package/docs/hubs/decorators.html +11 -16
  58. package/docs/hubs/remote-data.html +5 -9
  59. package/docs/img/og-concorde.jpg +0 -0
  60. package/docs/index.html +91 -2
  61. package/docs/index.md +2 -2
  62. package/docs/llms-full.txt +58 -74
  63. package/docs/llms.txt +6 -4
  64. package/docs/privacy.html +122 -0
  65. package/docs/privacy.md +32 -0
  66. package/docs/sitemap.xml +6 -0
  67. package/docs/src/core/components/functional/date/date.md +1 -1
  68. package/docs/src/core/components/functional/list/list.md +6 -2
  69. package/docs/src/core/components/functional/sdui/component-catalog.gaps.json +1 -1
  70. package/docs/src/core/components/functional/sdui/component-catalog.json +1 -1
  71. package/docs/src/core/components/ui/card/card.md +1 -1
  72. package/docs/src/core/components/ui/image/image.md +17 -17
  73. package/docs/src/core/components/ui/modal/modal.md +2 -2
  74. package/docs/src/docs/decorators/bind.md +23 -24
  75. package/docs/src/docs/getting-started/ai-agents.md +29 -55
  76. package/docs/src/docs/getting-started/dataFlow.md +1 -1
  77. package/docs/src/docs/search/docs-search.json +100 -55
  78. package/docs/src/tsconfig.json +11 -5
  79. package/index.html +89 -0
  80. package/package.json +8 -4
  81. package/public/img/og-concorde.jpg +0 -0
  82. package/scripts/ai-init.mjs +104 -379
  83. package/scripts/ai-init.test.mjs +81 -239
  84. package/scripts/docs-markdown-vite-plugin.ts +11 -5
  85. package/scripts/docs-public-url.mjs +6 -0
  86. package/scripts/docs.htaccess +7 -0
  87. package/scripts/generate-cem.mjs +244 -0
  88. package/scripts/generate-cem.test.mjs +122 -0
  89. package/scripts/generate-crawl-docs.mjs +29 -5
  90. package/scripts/generate-sdui-catalog.mjs +11 -10
  91. package/scripts/post-build-docs.js +3 -0
  92. package/scripts/pre-publish.mjs +2 -1
  93. package/scripts/site-pages.mjs +212 -0
  94. package/scripts/site-pages.test.mjs +116 -0
  95. package/site-pages/about.md +22 -0
  96. package/site-pages/privacy.md +32 -0
  97. package/src/core/components/functional/date/date.md +1 -1
  98. package/src/core/components/functional/list/list.md +6 -2
  99. package/src/core/components/functional/sdui/component-catalog.gaps.json +1 -1
  100. package/src/core/components/functional/sdui/component-catalog.json +1 -1
  101. package/src/core/components/ui/card/card.md +1 -1
  102. package/src/core/components/ui/image/image.md +17 -17
  103. package/src/core/components/ui/modal/modal.md +2 -2
  104. package/src/core/decorators/subscriber/bind.ts +9 -14
  105. package/src/docs/components/docs-demo-sources.ts +3 -3
  106. package/src/docs/decorators/bind.md +23 -24
  107. package/src/docs/docs-location.spec.ts +10 -0
  108. package/src/docs/docs-location.ts +10 -0
  109. package/src/docs/example/decorators-demo-bind-demos.ts +11 -28
  110. package/src/docs/example/docs-toggle-demos.ts +1 -1
  111. package/src/docs/getting-started/ai-agents.md +29 -55
  112. package/src/docs/getting-started/dataFlow.md +1 -1
  113. package/src/docs/home/home.ts +3 -1
  114. package/src/docs/navigation/navigation.ts +1 -1
  115. package/src/docs/search/docs-search.json +100 -55
  116. package/src/docs/search/markdown-renderer.ts +6 -1
  117. package/src/docs/tailwind/css/docs/content.css +4 -5
  118. package/src/tsconfig.json +11 -5
  119. package/src/tsconfig.tsbuildinfo +1 -1
  120. package/ai/AGENTS.md +0 -56
  121. package/ai/cursor/rules/concorde-menu.mdc +0 -15
  122. package/ai/cursor/rules/concorde-scope.mdc +0 -14
  123. package/ai/cursor/rules/concorde-theme.mdc +0 -13
  124. package/ai/cursor/rules/concorde.mdc +0 -66
  125. package/ai/jetbrains/rules/concorde.md +0 -53
  126. package/ai/skills/concorde-get-set-dp/SKILL.md +0 -194
  127. package/ai/skills/concorde-imports/SKILL.md +0 -78
  128. package/ai/skills/concorde-menu/SKILL.md +0 -74
  129. package/ai/skills/concorde-scope/SKILL.md +0 -70
  130. package/ai/skills/concorde-theme/SKILL.md +0 -57
@@ -19,7 +19,7 @@ Recommended patterns for new Concorde apps (Lit + TypeScript). Under the hood, d
19
19
  | Derived / aggregate (JSONata) | `derive()` or `sonic-jsonata` — [Jsonata](/core/components/functional/jsonata) |
20
20
  | Offline doc demos | `serviceURL="/docs-mock-api"` — [Local API demos](/docs/misc/docs-mock-api) |
21
21
 
22
- Skill: `concorde-get-set-dp` in the package `ai/` folder.
22
+ Agent skill: `concorde` (`rules/data.md`), see [AI agents](/docs/getting-started/ai-agents).
23
23
 
24
24
  ## DataProviderKey
25
25
 
@@ -131,7 +131,7 @@ const COMPONENT_COUNT = INDEX_TABS.reduce(
131
131
  0,
132
132
  );
133
133
 
134
- const ARCHIVE = "./img/archive/";
134
+ const ARCHIVE = "/img/archive/";
135
135
 
136
136
  /** Credit lines for the archive pictures (CC BY / CC BY-SA, from assets.mjs --credits). */
137
137
  const CREDITS = `Film: <a href="https://commons.wikimedia.org/wiki/File:Concorde_%26_Red_Arrows_2002.webm">“Concorde &amp; Red Arrows 2002”</a> by Steve Elliott, <a href="https://creativecommons.org/licenses/by-sa/2.0/">CC BY-SA 2.0</a>, via Wikimedia Commons.`;
@@ -501,6 +501,8 @@ this.querySelectorAll("[data-reveal]").forEach((el) =>
501
501
  <sonic-link href="https://www.npmjs.com/package/@supersoniks/concorde" target="_blank"
502
502
  >npm</sonic-link
503
503
  >
504
+ <sonic-link href="/about">About</sonic-link>
505
+ <sonic-link href="/privacy">Privacy</sonic-link>
504
506
  </nav>
505
507
  <span class="footer-end">MIT licence · ${new Date().getFullYear()}</span>
506
508
  </div>
@@ -26,7 +26,7 @@ export const docsNavigation: Array<string | { label: string; href: string }> = [
26
26
  href: "/docs/getting-started/dataFlow",
27
27
  },
28
28
  {
29
- label: "AI agents (skills)",
29
+ label: "AI agents (skill)",
30
30
  href: "/docs/getting-started/ai-agents",
31
31
  },
32
32
  "Functional components",
@@ -780,7 +780,7 @@
780
780
  }
781
781
  },
782
782
  {
783
- "search": "sonic-list renders one row per entry of its props array, either set directly or loaded with fetch. From Lit, pass a row renderer on the items property; in plain HTML, declare &lt;template&gt; children. Each row gets its own data provider at &lt;dataProvider&gt;/list-item/&lt;index&gt;.\n",
783
+ "search": "sonic-list renders one row per entry of its props array, either set directly or loaded with fetch. In TypeScript, prefer the .items row renderer (with .separator · .noItems · .skeleton); &lt;template&gt; children are for plain HTML hosts without Lit. Each row gets its own data provider at &lt;dataProvider&gt;/list-item/&lt;index&gt;.\n",
784
784
  "files": {
785
785
  "core/components/functional/list/list.md": {
786
786
  "title": "List",
@@ -810,7 +810,7 @@
810
810
  }
811
811
  },
812
812
  {
813
- "search": "Fetch attributes (lazyload · refetchEveryMs · headers · authentication) are shared with Fetch.\n",
813
+ "search": "This example uses HTML templates; from Lit, use the row renderer instead. Fetch attributes (lazyload · refetchEveryMs · headers · authentication) are shared with Fetch.\n",
814
814
  "files": {
815
815
  "core/components/functional/list/list.md": {
816
816
  "title": "List",
@@ -914,6 +914,36 @@
914
914
  }
915
915
  }
916
916
  },
917
+ {
918
+ "search": "Properties (TypeScript / Lit, preferred):\n",
919
+ "files": {
920
+ "core/components/functional/list/list.md": {
921
+ "title": "List",
922
+ "hashes": {
923
+ "api-reference": {
924
+ "count": 1,
925
+ "title": "API reference",
926
+ "type": "paragraph"
927
+ }
928
+ }
929
+ }
930
+ }
931
+ },
932
+ {
933
+ "search": "Templates (plain HTML hosts):\n",
934
+ "files": {
935
+ "core/components/functional/list/list.md": {
936
+ "title": "List",
937
+ "hashes": {
938
+ "api-reference": {
939
+ "count": 1,
940
+ "title": "API reference",
941
+ "type": "paragraph"
942
+ }
943
+ }
944
+ }
945
+ }
946
+ },
917
947
  {
918
948
  "search": "Mix",
919
949
  "files": {
@@ -1290,7 +1320,7 @@
1290
1320
  }
1291
1321
  },
1292
1322
  {
1293
- "search": "Aide-mémoire pour les dépôts externes (adaptateurs, shells).Pas une page de la doc site — à lire dans le package npm(node_modules/@supersoniks/concorde/src/core/components/functional/sdui/sdui-extension-points.md).La doc utilisateur / crawl reste sdui.md (auto-suffisante).\n",
1323
+ "search": "Aide-mémoire pour les dépôts externes (adaptateurs, shells).Pas une page de la doc site — à lire dans le package npm(node_modules/@supersoniks/concorde/src/core/components/functional/sdui/sdui-extension-points.md).La doc utilisateur reste sdui.md (auto-suffisante).\n",
1294
1324
  "files": {
1295
1325
  "core/components/functional/sdui/sdui-extension-points.md": {
1296
1326
  "title": "SDUI — points d’extension publics",
@@ -6020,7 +6050,7 @@
6020
6050
  }
6021
6051
  },
6022
6052
  {
6023
- "search": "Keeps a class property in sync with a path of the DataProvider store, in both directions when needed. Pass a dot-notation string or a DataProviderKey; add { reflect: true } to push local writes back to the store. For read-only sync prefer @subscribe, and see Data flow for the overall model.\n",
6053
+ "search": "@bind(key) keeps a class property and one path of the DataProvider store in sync. With { reflect: true } the sync goes both ways: the property follows the store, and each assignment is written back to it. For one direction only, use the complementary decorators: @subscribe to read, @publish to write. See Data flow for the overall model.\n",
6024
6054
  "files": {
6025
6055
  "docs/decorators/bind.md": {
6026
6056
  "title": "@bind",
@@ -6035,7 +6065,7 @@
6035
6065
  }
6036
6066
  },
6037
6067
  {
6038
- "search": "@bind(&quot;flight.gate&quot;)\n@state()\ngate = &quot;&quot;;\n \n\n",
6068
+ "search": "type Flight = { flight: string; gate: string; boarded: number };\nconst flightKey = new DataProviderKey&lt;Flight&gt;(&quot;flight&quot;);\n",
6039
6069
  "files": {
6040
6070
  "docs/decorators/bind.md": {
6041
6071
  "title": "@bind",
@@ -6050,29 +6080,14 @@
6050
6080
  }
6051
6081
  },
6052
6082
  {
6053
- "search": "The first path segment is the data provider id, the rest is dot notation (array items use a numeric index: passengers.0). The property updates each time the store value changes. Add @state() so Lit re-renders.\n",
6054
- "files": {
6055
- "docs/decorators/bind.md": {
6056
- "title": "@bind",
6057
- "hashes": {
6058
- "basic-usage": {
6059
- "count": 1,
6060
- "title": "Basic usage",
6061
- "type": "paragraph"
6062
- }
6063
- }
6064
- }
6065
- }
6066
- },
6067
- {
6068
- "search": "With a DataProviderKey&lt;T&gt;, TypeScript checks that the property type matches T at that path.\n",
6083
+ "search": "@bind(flightKey.boarded, { reflect: true })\n@state()\nboarded = 0;\n \n\n",
6069
6084
  "files": {
6070
6085
  "docs/decorators/bind.md": {
6071
6086
  "title": "@bind",
6072
6087
  "hashes": {
6073
- "typed-key": {
6088
+ "import": {
6074
6089
  "count": 1,
6075
- "title": "Typed key",
6090
+ "title": "Import",
6076
6091
  "type": "paragraph"
6077
6092
  }
6078
6093
  }
@@ -6080,14 +6095,14 @@
6080
6095
  }
6081
6096
  },
6082
6097
  {
6083
- "search": "type Flight = { flight: string; gate: string; boarded: number };\nconst flightKey = new DataProviderKey&lt;Flight&gt;(&quot;flight&quot;);\n",
6098
+ "search": "The key is a DataProviderKey: TypeScript checks that the property type matches T at that path. The property updates each time the store value changes. Add @state() so Lit re-renders.\n",
6084
6099
  "files": {
6085
6100
  "docs/decorators/bind.md": {
6086
6101
  "title": "@bind",
6087
6102
  "hashes": {
6088
- "typed-key": {
6103
+ "basic-usage": {
6089
6104
  "count": 1,
6090
- "title": "Typed key",
6105
+ "title": "Basic usage",
6091
6106
  "type": "paragraph"
6092
6107
  }
6093
6108
  }
@@ -6095,14 +6110,14 @@
6095
6110
  }
6096
6111
  },
6097
6112
  {
6098
- "search": "@bind(flightKey.boarded, { reflect: true })\n@state()\nboarded = 0;\n \n\n",
6113
+ "search": "With reflect: true, each assignment to the property calls set() at the key path, so every other subscriber sees the new value. An internal guard prevents update loops. Without reflect (the default), assigning the property does not touch the store, and @bind behaves like @subscribe.\n",
6099
6114
  "files": {
6100
6115
  "docs/decorators/bind.md": {
6101
6116
  "title": "@bind",
6102
6117
  "hashes": {
6103
- "typed-key": {
6118
+ "reflect": {
6104
6119
  "count": 1,
6105
- "title": "Typed key",
6120
+ "title": "Reflect",
6106
6121
  "type": "paragraph"
6107
6122
  }
6108
6123
  }
@@ -6110,14 +6125,14 @@
6110
6125
  }
6111
6126
  },
6112
6127
  {
6113
- "search": "By default (reflect: false) the binding is one-way: assigning the property does not touch the store. With reflect: true, each assignment calls set() on the publisher, so every other subscriber sees the new value. An internal guard prevents update loops.\n",
6128
+ "search": "Placeholders such as ${index} are resolved from properties of the same component, and @bind re-subscribes when they change. Declare them in the key&#39;s second generic and write them in a plain string, not a backtick template literal. While a placeholder is null or undefined the binding is inactive; { skipEmptyPlaceholder: true } also waits on &quot;&quot;. Full rules: Dynamic paths.\n",
6114
6129
  "files": {
6115
6130
  "docs/decorators/bind.md": {
6116
6131
  "title": "@bind",
6117
6132
  "hashes": {
6118
- "reflect": {
6133
+ "dynamic-path": {
6119
6134
  "count": 1,
6120
- "title": "Reflect",
6135
+ "title": "Dynamic path",
6121
6136
  "type": "paragraph"
6122
6137
  }
6123
6138
  }
@@ -6125,7 +6140,7 @@
6125
6140
  }
6126
6141
  },
6127
6142
  {
6128
- "search": "Placeholders such as ${index} are resolved from properties of the same component, and @bind re-subscribes when they change. Write them in a plain string, not a backtick template literal. While a placeholder is null or undefined the binding is inactive; { skipEmptyPlaceholder: true } also waits on &quot;&quot;. Full rules: Dynamic paths.\n",
6143
+ "search": "@bind(personKey)\n@state()\nperson: Person | null = null;\n \n\n",
6129
6144
  "files": {
6130
6145
  "docs/decorators/bind.md": {
6131
6146
  "title": "@bind",
@@ -8135,12 +8150,12 @@
8135
8150
  }
8136
8151
  },
8137
8152
  {
8138
- "search": "AI agents (skills & AGENTS.md)",
8153
+ "search": "AI agents (skill)",
8139
8154
  "files": {
8140
8155
  "docs/getting-started/ai-agents.md": {
8141
- "title": "AI agents (skills & AGENTS.md)",
8156
+ "title": "AI agents (skill)",
8142
8157
  "hashes": {
8143
- "ai-agents-skills--agentsmd": {
8158
+ "ai-agents-skill": {
8144
8159
  "count": 1,
8145
8160
  "title": "",
8146
8161
  "type": "page"
@@ -8150,12 +8165,12 @@
8150
8165
  }
8151
8166
  },
8152
8167
  {
8153
- "search": "Concorde ships skills, rules, and a root AGENTS.md so Cursor, JetBrains AI Assistant, and other coding agents follow framework patterns (DataProvider, decorators, short imports, scope, theme, migrations).\n",
8168
+ "search": "Concorde ships one Agent Skill, concorde, so coding agents follow the framework patterns. Cursor, Claude Code, JetBrains Junie and other agents load it on their own when they work on Concorde code; there is nothing to add to your AGENTS.md.\n",
8154
8169
  "files": {
8155
8170
  "docs/getting-started/ai-agents.md": {
8156
- "title": "AI agents (skills & AGENTS.md)",
8171
+ "title": "AI agents (skill)",
8157
8172
  "hashes": {
8158
- "ai-agents-skills--agentsmd": {
8173
+ "ai-agents-skill": {
8159
8174
  "count": 1,
8160
8175
  "title": "",
8161
8176
  "type": "paragraph"
@@ -8165,12 +8180,12 @@
8165
8180
  }
8166
8181
  },
8167
8182
  {
8168
- "search": "On a starter project, run yarn ai:sync after install. On an existing project, install Concorde first, then use ai-init below.\n",
8183
+ "search": "On a starter project, run yarn ai:sync after install. On an existing project, install Concorde first, then run ai-init.\n",
8169
8184
  "files": {
8170
8185
  "docs/getting-started/ai-agents.md": {
8171
- "title": "AI agents (skills & AGENTS.md)",
8186
+ "title": "AI agents (skill)",
8172
8187
  "hashes": {
8173
- "ai-agents-skills--agentsmd": {
8188
+ "ai-agents-skill": {
8174
8189
  "count": 1,
8175
8190
  "title": "",
8176
8191
  "type": "paragraph"
@@ -8180,14 +8195,44 @@
8180
8195
  }
8181
8196
  },
8182
8197
  {
8183
- "search": "node node_modules/@supersoniks/concorde/scripts/ai-init.mjs\n \n\n",
8198
+ "search": "Re-run the same command after each Concorde upgrade to refresh the skill.\n",
8199
+ "files": {
8200
+ "docs/getting-started/ai-agents.md": {
8201
+ "title": "AI agents (skill)",
8202
+ "hashes": {
8203
+ "commands": {
8204
+ "count": 1,
8205
+ "title": "Commands",
8206
+ "type": "paragraph"
8207
+ }
8208
+ }
8209
+ }
8210
+ }
8211
+ },
8212
+ {
8213
+ "search": "SKILL.md is the entry point: where to find the truth (the project, these docs, custom-elements.json), the critical rules and the imports. Details live in rules/ files that the agent reads only for the topic at hand.\n",
8214
+ "files": {
8215
+ "docs/getting-started/ai-agents.md": {
8216
+ "title": "AI agents (skill)",
8217
+ "hashes": {
8218
+ "the-skill": {
8219
+ "count": 1,
8220
+ "title": "The skill",
8221
+ "type": "paragraph"
8222
+ }
8223
+ }
8224
+ }
8225
+ }
8226
+ },
8227
+ {
8228
+ "search": "Where symlinks are not allowed (some Windows setups), the skill is copied instead. Your own skills in these folders are never touched. Commit .agents/ and the links if your team shares agent settings.\n",
8184
8229
  "files": {
8185
8230
  "docs/getting-started/ai-agents.md": {
8186
- "title": "AI agents (skills & AGENTS.md)",
8231
+ "title": "AI agents (skill)",
8187
8232
  "hashes": {
8188
- "manual--existing-project": {
8233
+ "what-gets-installed": {
8189
8234
  "count": 1,
8190
- "title": "Manual / existing project",
8235
+ "title": "What gets installed",
8191
8236
  "type": "paragraph"
8192
8237
  }
8193
8238
  }
@@ -8195,14 +8240,14 @@
8195
8240
  }
8196
8241
  },
8197
8242
  {
8198
- "search": "Everything after &lt;!-- concorde-ai --&gt; is replaced on each ai-init run (idempotent). Do not paste a full copy of the Concorde guide above the marker — put project-specific notes in AGENTS.concorde.md (overlay). If the preamble duplicates package AGENTS.md, ai-init slims or drops it and prints a warning. Legacy filenames AGENTS.overlay.md / AGENTS.starter.md are still accepted with a deprecation warning.\n",
8243
+ "search": "AGENTS.md stays yours: ai-init never reads or writes it.\n",
8199
8244
  "files": {
8200
8245
  "docs/getting-started/ai-agents.md": {
8201
- "title": "AI agents (skills & AGENTS.md)",
8246
+ "title": "AI agents (skill)",
8202
8247
  "hashes": {
8203
- "agentsmd-policy-non-invasive": {
8248
+ "what-gets-installed": {
8204
8249
  "count": 1,
8205
- "title": "`AGENTS.md` policy (non-invasive)",
8250
+ "title": "What gets installed",
8206
8251
  "type": "paragraph"
8207
8252
  }
8208
8253
  }
@@ -8210,14 +8255,14 @@
8210
8255
  }
8211
8256
  },
8212
8257
  {
8213
- "search": "Source files in the npm package: node_modules/@supersoniks/concorde/ai/ (see also ai/README.md in the Concorde repository).\n",
8258
+ "search": "Source files in the npm package: node_modules/@supersoniks/concorde/ai/skills/concorde/.\n",
8214
8259
  "files": {
8215
8260
  "docs/getting-started/ai-agents.md": {
8216
- "title": "AI agents (skills & AGENTS.md)",
8261
+ "title": "AI agents (skill)",
8217
8262
  "hashes": {
8218
- "workflow": {
8263
+ "flags": {
8219
8264
  "count": 1,
8220
- "title": "Workflow",
8265
+ "title": "Flags",
8221
8266
  "type": "paragraph"
8222
8267
  }
8223
8268
  }
@@ -8570,7 +8615,7 @@
8570
8615
  }
8571
8616
  },
8572
8617
  {
8573
- "search": "Skill: concorde-get-set-dp in the package ai/ folder.\n",
8618
+ "search": "Agent skill: concorde (rules/data.md), see AI agents.\n",
8574
8619
  "files": {
8575
8620
  "docs/getting-started/dataFlow.md": {
8576
8621
  "title": "Data flow",
@@ -38,7 +38,12 @@ export class DocsMakdownRenderer extends Subscriber(LitElement) {
38
38
  private _text = "";
39
39
  set text(value: string) {
40
40
  this._text = parseMarkdownWithSonicCode(
41
- (markdown) => marked.parse(markdown) as string,
41
+ // Tables scroll in a wrapper, so they keep their full width on phones
42
+ (markdown) =>
43
+ (marked.parse(markdown) as string).replace(
44
+ /<table>[\s\S]*?<\/table>/g,
45
+ (table) => `<div class="docs-table-scroll">${table}</div>`,
46
+ ),
42
47
  value,
43
48
  );
44
49
  this.requestUpdate();
@@ -19,14 +19,13 @@ docs-markdown-renderer :is(h1, h2, h3, h4)[id] {
19
19
  docs-page.prose :where(img) {
20
20
  max-width: 100%;
21
21
  }
22
+ /* Markdown tables keep 100% width; the wrapper scrolls when columns overflow */
23
+ docs-page .docs-table-scroll {
24
+ overflow-x: auto;
25
+ }
22
26
  /* Wide demos (fixed min-width groups…) scroll instead of widening the page on phones */
23
27
  @media (max-width: 639px) {
24
28
  docs-page sonic-code > div {
25
29
  overflow-x: auto;
26
30
  }
27
- /* tables stay 100% wide on larger screens; on phones they scroll */
28
- docs-page.prose :where(table) {
29
- display: block;
30
- overflow-x: auto;
31
- }
32
31
  }
package/src/tsconfig.json CHANGED
@@ -1074,6 +1074,9 @@
1074
1074
  "./utils/HTML": [
1075
1075
  "/sites/concorde/src/core/utils/HTML.ts"
1076
1076
  ],
1077
+ "./utils/LocationHandler.spec": [
1078
+ "/sites/concorde/src/core/utils/LocationHandler.spec.ts"
1079
+ ],
1077
1080
  "./utils/LocationHandler": [
1078
1081
  "/sites/concorde/src/core/utils/LocationHandler.ts"
1079
1082
  ],
@@ -1185,6 +1188,9 @@
1185
1188
  "./undefined/docs-source-raw": [
1186
1189
  "/sites/concorde/src/docs/components/docs-source-raw.ts"
1187
1190
  ],
1191
+ "./docs-location.spec": [
1192
+ "/sites/concorde/src/docs/docs-location.spec.ts"
1193
+ ],
1188
1194
  "./docs-location": [
1189
1195
  "/sites/concorde/src/docs/docs-location.ts"
1190
1196
  ],
@@ -1215,11 +1221,8 @@
1215
1221
  "./example/docs-boarding-pass-demo": [
1216
1222
  "/sites/concorde/src/docs/example/docs-boarding-pass-demo.ts"
1217
1223
  ],
1218
- "./example/docs-input-autocomplete-demos": [
1219
- "/sites/concorde/src/docs/example/docs-input-autocomplete-demos.ts"
1220
- ],
1221
- "./example/docs-joke-demos": [
1222
- "/sites/concorde/src/docs/example/docs-joke-demos.ts"
1224
+ "./example/docs-flight-demos": [
1225
+ "/sites/concorde/src/docs/example/docs-flight-demos.ts"
1223
1226
  ],
1224
1227
  "./example/docs-jsonata-demos": [
1225
1228
  "/sites/concorde/src/docs/example/docs-jsonata-demos.ts"
@@ -1275,6 +1278,9 @@
1275
1278
  "./mock-api/fixtures": [
1276
1279
  "/sites/concorde/src/docs/mock-api/fixtures.ts"
1277
1280
  ],
1281
+ "./mock-api/flights": [
1282
+ "/sites/concorde/src/docs/mock-api/flights.ts"
1283
+ ],
1278
1284
  "./mock-api/register": [
1279
1285
  "/sites/concorde/src/docs/mock-api/register.ts"
1280
1286
  ],
@@ -1 +1 @@
1
- {"root":["./components.ts","./concorde-loaded.ts","./dataprovider.ts","./decorators.ts","./directives.ts","./index.ts","./mixins.ts","./utils.ts","./core/core.ts","./core/_types/endpoint.ts","./core/_types/key.ts","./core/_types/types.ts","./core/components/functional/functional.ts","./core/components/functional/date/date.ts","./core/components/functional/example/example.ts","./core/components/functional/fetch/fetch.ts","./core/components/functional/if/if.test.ts","./core/components/functional/if/if.ts","./core/components/functional/jsonata/jsonata.spec.ts","./core/components/functional/jsonata/jsonata.ts","./core/components/functional/list/list.demo.ts","./core/components/functional/list/list.spec.ts","./core/components/functional/list/list.ts","./core/components/functional/mix/mix.ts","./core/components/functional/queue/queue.demo.ts","./core/components/functional/queue/queue.ts","./core/components/functional/router/redirect.ts","./core/components/functional/router/router.demo.ts","./core/components/functional/router/router.spec.ts","./core/components/functional/router/router.ts","./core/components/functional/sdui/SDUIDescriptorTransformer.ts","./core/components/functional/sdui/component-catalog.spec.ts","./core/components/functional/sdui/sdui-action.spec.ts","./core/components/functional/sdui/sdui-dom-snapshot.ts","./core/components/functional/sdui/sdui-incremental.spec.ts","./core/components/functional/sdui/sdui-partial.spec.ts","./core/components/functional/sdui/sdui-partial.ts","./core/components/functional/sdui/sdui-safe.spec.ts","./core/components/functional/sdui/sdui-safe.ts","./core/components/functional/sdui/sdui-utils.ts","./core/components/functional/sdui/sdui.regression.spec.ts","./core/components/functional/sdui/sdui.ts","./core/components/functional/sdui/types.ts","./core/components/functional/sdui/__fixtures__/descriptors.ts","./core/components/functional/sonic-scope/sonic-scope.ts","./core/components/functional/states/states.demo.ts","./core/components/functional/states/states.spec.ts","./core/components/functional/states/states.ts","./core/components/functional/submit/submit.ts","./core/components/functional/subscriber/subscriber.ts","./core/components/functional/translation/translation.ts","./core/components/functional/value/value.ts","./core/components/ui/ui.ts","./core/components/ui/_css/align.ts","./core/components/ui/_css/rounded.ts","./core/components/ui/_css/scroll.ts","./core/components/ui/_css/shadow.ts","./core/components/ui/_css/size.ts","./core/components/ui/_css/type.ts","./core/components/ui/_i18n/ui-aria-labels.ts","./core/components/ui/alert/alert.spec.ts","./core/components/ui/alert/alert.ts","./core/components/ui/alert-messages/alert-messages.ts","./core/components/ui/badge/badge.ts","./core/components/ui/button/button.ts","./core/components/ui/captcha/altchaStyles.ts","./core/components/ui/captcha/captcha.ts","./core/components/ui/card/card-footer.ts","./core/components/ui/card/card-header-descripton.ts","./core/components/ui/card/card-header.ts","./core/components/ui/card/card-main.ts","./core/components/ui/card/card.ts","./core/components/ui/divider/divider.ts","./core/components/ui/form/checkbox/checkbox.ts","./core/components/ui/form/css/form-control.ts","./core/components/ui/form/fieldset/fieldset.ts","./core/components/ui/form/fieldset/legend-description.ts","./core/components/ui/form/fieldset/legend.ts","./core/components/ui/form/form-actions/form-actions.ts","./core/components/ui/form/form-layout/form-layout.ts","./core/components/ui/form/input/input.ts","./core/components/ui/form/input/password-helper.ts","./core/components/ui/form/input/same-value-helper.ts","./core/components/ui/form/input-autocomplete/input-autocomplete.ts","./core/components/ui/form/radio/radio.ts","./core/components/ui/form/select/select.ts","./core/components/ui/form/switch/switch.ts","./core/components/ui/form/textarea/textarea.ts","./core/components/ui/group/group.ts","./core/components/ui/icon/icon.stories.ts","./core/components/ui/icon/icon.ts","./core/components/ui/icon/icons.ts","./core/components/ui/image/image.ts","./core/components/ui/link/link.ts","./core/components/ui/loader/loader.stories.ts","./core/components/ui/loader/loader.ts","./core/components/ui/loader/styles/fixed.ts","./core/components/ui/loader/styles/inline.ts","./core/components/ui/menu/menu-item.ts","./core/components/ui/menu/menu.ts","./core/components/ui/modal/modal-actions.ts","./core/components/ui/modal/modal-close.ts","./core/components/ui/modal/modal-content.ts","./core/components/ui/modal/modal-subtitle.ts","./core/components/ui/modal/modal-title.ts","./core/components/ui/modal/modal-utils.ts","./core/components/ui/modal/modal.ts","./core/components/ui/pop/pop.ts","./core/components/ui/progress/progress.ts","./core/components/ui/table/table-caption.ts","./core/components/ui/table/table-tbody.ts","./core/components/ui/table/table-td.ts","./core/components/ui/table/table-tfoot.ts","./core/components/ui/table/table-th.ts","./core/components/ui/table/table-thead.ts","./core/components/ui/table/table-tr.ts","./core/components/ui/table/table.ts","./core/components/ui/theme/theme.ts","./core/components/ui/theme/theme-collection/auto.ts","./core/components/ui/theme/theme-collection/core-variables.ts","./core/components/ui/theme/theme-collection/dark.ts","./core/components/ui/theme/theme-collection/light.ts","./core/components/ui/toast/dismissed.ts","./core/components/ui/toast/message-subscriber.ts","./core/components/ui/toast/render-content.ts","./core/components/ui/toast/toast-item.ts","./core/components/ui/toast/toast.ts","./core/components/ui/toast/types.ts","./core/components/ui/tooltip/tooltip.ts","./core/decorators/Subscriber.ts","./core/decorators/api.post.spec.ts","./core/decorators/api.spec.ts","./core/decorators/api.ts","./core/decorators/lifecycle.ts","./core/decorators/subscriber/ancestorAttribute.spec.ts","./core/decorators/subscriber/ancestorAttribute.ts","./core/decorators/subscriber/autoFill.ts","./core/decorators/subscriber/autoSubscribe.ts","./core/decorators/subscriber/bind.ts","./core/decorators/subscriber/common.ts","./core/decorators/subscriber/derive.ts","./core/decorators/subscriber/dynamicPath.spec.ts","./core/decorators/subscriber/dynamicPath.ts","./core/decorators/subscriber/dynamicPropertyWatch.spec.ts","./core/decorators/subscriber/dynamicPropertyWatch.ts","./core/decorators/subscriber/handle.disambig.spec.ts","./core/decorators/subscriber/handle.skip.spec.ts","./core/decorators/subscriber/handle.ts","./core/decorators/subscriber/onAssign.ts","./core/decorators/subscriber/publish.spec.ts","./core/decorators/subscriber/publish.ts","./core/decorators/subscriber/publisherPath.ts","./core/decorators/subscriber/subscribe.spec.ts","./core/decorators/subscriber/subscribe.ts","./core/directives/DataProvider.sub.spec.ts","./core/directives/DataProvider.ts","./core/directives/Wording.ts","./core/mixins/Fetcher.ts","./core/mixins/FormCheckable.ts","./core/mixins/FormElement.ts","./core/mixins/FormInput.ts","./core/mixins/Subscriber.ts","./core/mixins/TemplatesContainer.ts","./core/mixins/mixins.ts","./core/utils/AncestorAttributeObserver.ts","./core/utils/Arrays.ts","./core/utils/DataBindObserver.ts","./core/utils/Electron.ts","./core/utils/Format.ts","./core/utils/HTML.ts","./core/utils/LocationHandler.ts","./core/utils/Objects.ts","./core/utils/PublisherProxy.ts","./core/utils/SafariScrollGuard.ts","./core/utils/Utils.ts","./core/utils/aesCrypto.ts","./core/utils/api.spec.ts","./core/utils/api.ts","./core/utils/dataProviderKey.spec.ts","./core/utils/dataProviderKey.ts","./core/utils/derive.spec.ts","./core/utils/derive.ts","./core/utils/dismissed.ts","./core/utils/dpOptions.spec.ts","./core/utils/endpoint.spec.ts","./core/utils/endpoint.ts","./core/utils/jsonataHelpers.ts","./core/utils/jsonataRuntime.ts","./core/utils/positioning.spec.ts","./core/utils/positioning.ts","./core/utils/publisherPathKey.spec.ts","./core/utils/route.spec.ts","./core/utils/route.ts","./core/utils/url-pattern.ts","./test-utils/TestUtils.ts"],"version":"5.9.2"}
1
+ {"root":["./components.ts","./concorde-loaded.ts","./dataprovider.ts","./decorators.ts","./directives.ts","./index.ts","./mixins.ts","./utils.ts","./core/core.ts","./core/_types/endpoint.ts","./core/_types/key.ts","./core/_types/types.ts","./core/components/functional/functional.ts","./core/components/functional/date/date.ts","./core/components/functional/example/example.ts","./core/components/functional/fetch/fetch.ts","./core/components/functional/if/if.test.ts","./core/components/functional/if/if.ts","./core/components/functional/jsonata/jsonata.spec.ts","./core/components/functional/jsonata/jsonata.ts","./core/components/functional/list/list.demo.ts","./core/components/functional/list/list.spec.ts","./core/components/functional/list/list.ts","./core/components/functional/mix/mix.ts","./core/components/functional/queue/queue.demo.ts","./core/components/functional/queue/queue.ts","./core/components/functional/router/redirect.ts","./core/components/functional/router/router.demo.ts","./core/components/functional/router/router.spec.ts","./core/components/functional/router/router.ts","./core/components/functional/sdui/SDUIDescriptorTransformer.ts","./core/components/functional/sdui/component-catalog.spec.ts","./core/components/functional/sdui/sdui-action.spec.ts","./core/components/functional/sdui/sdui-dom-snapshot.ts","./core/components/functional/sdui/sdui-incremental.spec.ts","./core/components/functional/sdui/sdui-partial.spec.ts","./core/components/functional/sdui/sdui-partial.ts","./core/components/functional/sdui/sdui-safe.spec.ts","./core/components/functional/sdui/sdui-safe.ts","./core/components/functional/sdui/sdui-utils.ts","./core/components/functional/sdui/sdui.regression.spec.ts","./core/components/functional/sdui/sdui.ts","./core/components/functional/sdui/types.ts","./core/components/functional/sdui/__fixtures__/descriptors.ts","./core/components/functional/sonic-scope/sonic-scope.ts","./core/components/functional/states/states.demo.ts","./core/components/functional/states/states.spec.ts","./core/components/functional/states/states.ts","./core/components/functional/submit/submit.ts","./core/components/functional/subscriber/subscriber.ts","./core/components/functional/translation/translation.ts","./core/components/functional/value/value.ts","./core/components/ui/ui.ts","./core/components/ui/_css/align.ts","./core/components/ui/_css/rounded.ts","./core/components/ui/_css/scroll.ts","./core/components/ui/_css/shadow.ts","./core/components/ui/_css/size.ts","./core/components/ui/_css/type.ts","./core/components/ui/_i18n/ui-aria-labels.ts","./core/components/ui/alert/alert.spec.ts","./core/components/ui/alert/alert.ts","./core/components/ui/alert-messages/alert-messages.ts","./core/components/ui/badge/badge.ts","./core/components/ui/button/button.ts","./core/components/ui/captcha/altchaStyles.ts","./core/components/ui/captcha/captcha.ts","./core/components/ui/card/card-footer.ts","./core/components/ui/card/card-header-descripton.ts","./core/components/ui/card/card-header.ts","./core/components/ui/card/card-main.ts","./core/components/ui/card/card.ts","./core/components/ui/divider/divider.ts","./core/components/ui/form/checkbox/checkbox.ts","./core/components/ui/form/css/form-control.ts","./core/components/ui/form/fieldset/fieldset.ts","./core/components/ui/form/fieldset/legend-description.ts","./core/components/ui/form/fieldset/legend.ts","./core/components/ui/form/form-actions/form-actions.ts","./core/components/ui/form/form-layout/form-layout.ts","./core/components/ui/form/input/input.ts","./core/components/ui/form/input/password-helper.ts","./core/components/ui/form/input/same-value-helper.ts","./core/components/ui/form/input-autocomplete/input-autocomplete.ts","./core/components/ui/form/radio/radio.ts","./core/components/ui/form/select/select.ts","./core/components/ui/form/switch/switch.ts","./core/components/ui/form/textarea/textarea.ts","./core/components/ui/group/group.ts","./core/components/ui/icon/icon.stories.ts","./core/components/ui/icon/icon.ts","./core/components/ui/icon/icons.ts","./core/components/ui/image/image.ts","./core/components/ui/link/link.ts","./core/components/ui/loader/loader.stories.ts","./core/components/ui/loader/loader.ts","./core/components/ui/loader/styles/fixed.ts","./core/components/ui/loader/styles/inline.ts","./core/components/ui/menu/menu-item.ts","./core/components/ui/menu/menu.ts","./core/components/ui/modal/modal-actions.ts","./core/components/ui/modal/modal-close.ts","./core/components/ui/modal/modal-content.ts","./core/components/ui/modal/modal-subtitle.ts","./core/components/ui/modal/modal-title.ts","./core/components/ui/modal/modal-utils.ts","./core/components/ui/modal/modal.ts","./core/components/ui/pop/pop.ts","./core/components/ui/progress/progress.ts","./core/components/ui/table/table-caption.ts","./core/components/ui/table/table-tbody.ts","./core/components/ui/table/table-td.ts","./core/components/ui/table/table-tfoot.ts","./core/components/ui/table/table-th.ts","./core/components/ui/table/table-thead.ts","./core/components/ui/table/table-tr.ts","./core/components/ui/table/table.ts","./core/components/ui/theme/theme.ts","./core/components/ui/theme/theme-collection/auto.ts","./core/components/ui/theme/theme-collection/core-variables.ts","./core/components/ui/theme/theme-collection/dark.ts","./core/components/ui/theme/theme-collection/light.ts","./core/components/ui/toast/dismissed.ts","./core/components/ui/toast/message-subscriber.ts","./core/components/ui/toast/render-content.ts","./core/components/ui/toast/toast-item.ts","./core/components/ui/toast/toast.ts","./core/components/ui/toast/types.ts","./core/components/ui/tooltip/tooltip.ts","./core/decorators/Subscriber.ts","./core/decorators/api.post.spec.ts","./core/decorators/api.spec.ts","./core/decorators/api.ts","./core/decorators/lifecycle.ts","./core/decorators/subscriber/ancestorAttribute.spec.ts","./core/decorators/subscriber/ancestorAttribute.ts","./core/decorators/subscriber/autoFill.ts","./core/decorators/subscriber/autoSubscribe.ts","./core/decorators/subscriber/bind.ts","./core/decorators/subscriber/common.ts","./core/decorators/subscriber/derive.ts","./core/decorators/subscriber/dynamicPath.spec.ts","./core/decorators/subscriber/dynamicPath.ts","./core/decorators/subscriber/dynamicPropertyWatch.spec.ts","./core/decorators/subscriber/dynamicPropertyWatch.ts","./core/decorators/subscriber/handle.disambig.spec.ts","./core/decorators/subscriber/handle.skip.spec.ts","./core/decorators/subscriber/handle.ts","./core/decorators/subscriber/onAssign.ts","./core/decorators/subscriber/publish.spec.ts","./core/decorators/subscriber/publish.ts","./core/decorators/subscriber/publisherPath.ts","./core/decorators/subscriber/subscribe.spec.ts","./core/decorators/subscriber/subscribe.ts","./core/directives/DataProvider.sub.spec.ts","./core/directives/DataProvider.ts","./core/directives/Wording.ts","./core/mixins/Fetcher.ts","./core/mixins/FormCheckable.ts","./core/mixins/FormElement.ts","./core/mixins/FormInput.ts","./core/mixins/Subscriber.ts","./core/mixins/TemplatesContainer.ts","./core/mixins/mixins.ts","./core/utils/AncestorAttributeObserver.ts","./core/utils/Arrays.ts","./core/utils/DataBindObserver.ts","./core/utils/Electron.ts","./core/utils/Format.ts","./core/utils/HTML.ts","./core/utils/LocationHandler.spec.ts","./core/utils/LocationHandler.ts","./core/utils/Objects.ts","./core/utils/PublisherProxy.ts","./core/utils/SafariScrollGuard.ts","./core/utils/Utils.ts","./core/utils/aesCrypto.ts","./core/utils/api.spec.ts","./core/utils/api.ts","./core/utils/dataProviderKey.spec.ts","./core/utils/dataProviderKey.ts","./core/utils/derive.spec.ts","./core/utils/derive.ts","./core/utils/dismissed.ts","./core/utils/dpOptions.spec.ts","./core/utils/endpoint.spec.ts","./core/utils/endpoint.ts","./core/utils/jsonataHelpers.ts","./core/utils/jsonataRuntime.ts","./core/utils/positioning.spec.ts","./core/utils/positioning.ts","./core/utils/publisherPathKey.spec.ts","./core/utils/route.spec.ts","./core/utils/route.ts","./core/utils/url-pattern.ts","./test-utils/TestUtils.ts"],"version":"5.9.2"}
package/ai/AGENTS.md DELETED
@@ -1,56 +0,0 @@
1
- # Agents — Concorde
2
-
3
- Guide pour les agents IA sur un projet **Concorde** (Lit + DataProvider).
4
-
5
- ## Skills / rules (après installation)
6
-
7
- | Fichier | Rôle |
8
- |---------|------|
9
- | `.cursor/skills/concorde/SKILL.md` | Patterns framework |
10
- | `.cursor/skills/concorde-imports/SKILL.md` | Imports courts |
11
- | `.cursor/skills/concorde-scope/SKILL.md` | Scope + APIConfiguration |
12
- | `.cursor/skills/concorde-theme/SKILL.md` | Design tokens sonic-theme |
13
- | `.cursor/skills/concorde-menu/SKILL.md` | Navigation sonic-menu |
14
- | `.cursor/skills/concorde-get-set-dp/SKILL.md` | Migration get/set/dp + DataProviderKey statique |
15
- | `.cursor/rules/concorde.mdc` | Règles Cursor (patterns) |
16
- | `.aiassistant/rules/concorde.md` | Règles JetBrains AI Assistant |
17
-
18
- Installation :
19
-
20
- ```bash
21
- node node_modules/@supersoniks/concorde/scripts/ai-init.mjs
22
- ```
23
-
24
- Source : `@supersoniks/concorde/ai/`
25
-
26
- ## Imports dans ce dépôt (lib + doc)
27
-
28
- Les chemins courts (`@supersoniks/concorde/list`, `/menu`, `/queue`, …) sont des **exports npm** pour les apps **externes**. Dans le repo Concorde (`src/docs`, `src/core`, démos), utiliser les chemins **réels** :
29
-
30
- - Composants : `@supersoniks/concorde/core/components/…` ou import relatif (`../../core/components/functional/list/list`)
31
- - Décorateurs : `@supersoniks/concorde/core/decorators/Subscriber` (ou `src/decorators.ts` via `@supersoniks/concorde/decorators` si résolu par l’alias Vite racine)
32
- - `DataProviderKey` : `@supersoniks/concorde/core/utils/dataProviderKey`
33
-
34
- Skill **`concorde-imports`** : section « Dans le dépôt Concorde ».
35
-
36
- ## Conventions impératives
37
-
38
- - Toujours **DataProvider**, accès via **`get` / `set`**
39
- - Pas de **`sonic-fetch`**, pas de **`PublisherManager`**
40
- - Pas de `@onAssign` — **`@handle`** + `DataProviderKey`
41
- - Pas de **`@bind`** sur les composants métier — **`@subscribe`** + `DataProviderKey<T, U>` (type + contraintes hôte `${…}`)
42
- - Formulaires : **`formDataProvider`** + `name` sur `sonic-input`
43
- - Listes : templates **Lit** (`.items`, `.separator`, `.noItems`, `.skeleton`) — pas de promotion des `<template>` HTML
44
- - **Scope** (API/forms) ≠ **theme** (couleurs) — skills `concorde-scope` / `concorde-theme`
45
-
46
- ## Migration get / set / dp
47
-
48
- Skill **`concorde-get-set-dp`** : chemins sans placeholder **`${…}`** / **`{$…}`** pour `get` / `set` / `dp` ; chemins JS évalués OK ; clés dynamiques → décorateurs, `dp(idRésolu)`, ou **`sub(clé)`** dans les templates Lit.
49
-
50
- ## Migration Subscriber / sonic-fetch
51
-
52
- Skill **`concorde`** — section **« Piège migration Subscriber → LitElement »** : ne pas laisser des `@property` orphelines après retrait du mixin ; `@get` + `@subscribe` feuille ; `apiConfigKey` en modale ; sync des noms de props pour les `Endpoint` dynamiques.
53
-
54
- ## Documentation
55
-
56
- Fichiers `.md` dans le package : `node_modules/@supersoniks/concorde/src/` (composants, décorateurs, getting-started).
@@ -1,15 +0,0 @@
1
- ---
2
- description: Navigation Concorde — sonic-menu, sonic-menu-item, sonic-divider
3
- globs: **/{layout,sidebar,nav,docs-shell,routes}/**
4
- alwaysApply: false
5
- ---
6
-
7
- # Navigation Concorde
8
-
9
- 1. **`sonic-menu`** + **`sonic-menu-item`** — pas une liste de boutons ghost.
10
- 2. Sections : **`sonic-divider`** (`label`, `align="left"`, `size="sm"`).
11
- 3. Liens internes : `pushstate` + `href` + `autoActive="strict"`.
12
-
13
- Référence : `.cursor/skills/concorde-menu/SKILL.md`
14
-
15
- Pas de tirets dans les noms de dossiers de routes (générateur Concorde).
@@ -1,14 +0,0 @@
1
- ---
2
- description: Scope — inherited API, form, icon defaults (not theme)
3
- globs: **/*.{ts,tsx,html}
4
- alwaysApply: false
5
- ---
6
-
7
- # Scope
8
-
9
- Skill **`concorde-scope`**
10
-
11
- - `<sonic-scope>` — light DOM, attributes inherited by descendants
12
- - API: `serviceURL`, `token`, `credentials` → `@get`, list, queue
13
- - Or: `DataProviderKey<APIConfiguration>` as 2nd arg to `@get`
14
- - Not for colors/fonts — use **`concorde-theme`**
@@ -1,13 +0,0 @@
1
- ---
2
- description: sonic-theme — design tokens, not API scope
3
- globs: **/*.{ts,tsx,css,html}
4
- alwaysApply: false
5
- ---
6
-
7
- # Theme
8
-
9
- Skill **`concorde-theme`**
10
-
11
- - `<sonic-theme color font class="block bg-base">` + `--sc-*` CSS variables
12
- - `theme="dark"` for built-in dark palette
13
- - Not for `serviceURL` / API — use **`concorde-scope`**