@supersoniks/concorde 4.6.0 → 4.7.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 (182) hide show
  1. package/.gitlab-ci.yml +23 -0
  2. package/README.md +106 -55
  3. package/ai/AGENTS.md +52 -0
  4. package/ai/README.md +30 -0
  5. package/ai/cursor/rules/concorde-menu.mdc +15 -0
  6. package/ai/cursor/rules/concorde-scope.mdc +14 -0
  7. package/ai/cursor/rules/concorde-theme.mdc +13 -0
  8. package/ai/cursor/rules/concorde.mdc +49 -0
  9. package/ai/jetbrains/rules/concorde.md +39 -0
  10. package/ai/skills/concorde/SKILL.md +273 -0
  11. package/ai/skills/concorde-get-set-dp/SKILL.md +194 -0
  12. package/ai/skills/concorde-imports/SKILL.md +78 -0
  13. package/ai/skills/concorde-menu/SKILL.md +74 -0
  14. package/ai/skills/concorde-scope/SKILL.md +70 -0
  15. package/ai/skills/concorde-theme/SKILL.md +46 -0
  16. package/build-infos.json +1 -1
  17. package/concorde-core.bundle.js +152 -152
  18. package/concorde-core.es.js +1853 -1689
  19. package/dist/altcha-widget.js +2662 -0
  20. package/dist/concorde-core.bundle.js +152 -152
  21. package/dist/concorde-core.es.js +1853 -1689
  22. package/dist/docs-mock-api-sw.js +589 -0
  23. package/dist/docs-mock-api-sw.js.map +7 -0
  24. package/docs/altcha-widget.js +2662 -0
  25. package/docs/assets/index-D9pxaQYK.js +7508 -0
  26. package/docs/assets/index-t0-i22oI.css +1 -0
  27. package/docs/docs-mock-api-sw.js +589 -0
  28. package/docs/docs-mock-api-sw.js.map +7 -0
  29. package/docs/index.html +2 -2
  30. package/docs/src/core/components/functional/fetch/fetch.md +13 -11
  31. package/docs/src/core/components/functional/if/if.md +4 -11
  32. package/docs/src/core/components/functional/list/list.md +60 -194
  33. package/docs/src/core/components/functional/queue/queue.md +70 -85
  34. package/docs/src/core/components/functional/router/router.md +62 -97
  35. package/docs/src/core/components/functional/states/states.md +2 -2
  36. package/docs/src/core/components/functional/submit/submit.md +86 -55
  37. package/docs/src/core/components/ui/captcha/captcha.md +2 -2
  38. package/docs/src/core/components/ui/card/card.md +1 -1
  39. package/docs/src/core/components/ui/form/checkbox/checkbox.md +5 -32
  40. package/docs/src/core/components/ui/form/input/input.md +5 -30
  41. package/docs/src/core/components/ui/form/input-autocomplete/input-autocomplete.md +6 -4
  42. package/docs/src/core/components/ui/form/radio/radio.md +5 -32
  43. package/docs/src/core/components/ui/form/select/select.md +5 -31
  44. package/docs/src/core/components/ui/form/switch/switch.md +5 -32
  45. package/docs/src/core/components/ui/loader/loader.md +1 -13
  46. package/docs/src/core/components/ui/table/table.md +3 -3
  47. package/docs/src/docs/_core-concept/dataFlow.md +73 -0
  48. package/docs/src/docs/_core-concept/subscriber.md +9 -10
  49. package/docs/src/docs/_decorators/ancestor-attribute.md +4 -3
  50. package/docs/src/docs/_decorators/auto-subscribe.md +19 -16
  51. package/docs/src/docs/_decorators/bind.md +20 -17
  52. package/docs/src/docs/_decorators/get.md +7 -4
  53. package/docs/src/docs/_decorators/handle.md +171 -0
  54. package/docs/src/docs/_decorators/on-assign.md +99 -73
  55. package/docs/src/docs/_decorators/publish.md +2 -1
  56. package/docs/src/docs/_decorators/subscribe.md +70 -9
  57. package/docs/src/docs/_decorators/wait-for-ancestors.md +13 -10
  58. package/docs/src/docs/_directives/sub.md +91 -0
  59. package/docs/src/docs/_getting-started/ai-agents.md +56 -0
  60. package/docs/src/docs/_getting-started/concorde-manual-install.md +133 -0
  61. package/docs/src/docs/_getting-started/concorde-outside.md +13 -123
  62. package/docs/src/docs/_getting-started/create-a-component.md +2 -0
  63. package/docs/src/docs/_getting-started/my-first-component.md +236 -0
  64. package/docs/src/docs/_getting-started/my-first-subscriber.md +29 -83
  65. package/docs/src/docs/_getting-started/pubsub.md +21 -134
  66. package/docs/src/docs/_getting-started/start.md +26 -18
  67. package/docs/src/docs/_misc/api-configuration.md +79 -0
  68. package/docs/src/docs/_misc/dataProviderKey.md +38 -5
  69. package/docs/src/docs/_misc/docs-mock-api.md +60 -0
  70. package/docs/src/docs/_misc/endpoint.md +2 -1
  71. package/docs/src/docs/_misc/html-integration.md +13 -0
  72. package/docs/src/docs/search/docs-search.json +4163 -873
  73. package/docs/src/tsconfig.json +380 -317
  74. package/gitlab/job_tests.sh +55 -0
  75. package/package.json +34 -3
  76. package/public/altcha-widget.js +2662 -0
  77. package/public/docs-mock-api-sw.js +589 -0
  78. package/public/docs-mock-api-sw.js.map +7 -0
  79. package/scripts/ai-init.mjs +167 -0
  80. package/scripts/docs-mock-api-vite-plugin.ts +116 -0
  81. package/scripts/docs-open-in-editor-plugin.ts +130 -0
  82. package/scripts/pre-publish.mjs +2 -1
  83. package/src/core/components/functional/example/example.ts +1 -1
  84. package/src/core/components/functional/fetch/fetch.md +13 -11
  85. package/src/core/components/functional/if/if.md +4 -11
  86. package/src/core/components/functional/list/list.demo.ts +4 -4
  87. package/src/core/components/functional/list/list.md +60 -194
  88. package/src/core/components/functional/list/list.ts +8 -7
  89. package/src/core/components/functional/queue/queue.demo.ts +1 -1
  90. package/src/core/components/functional/queue/queue.md +70 -85
  91. package/src/core/components/functional/queue/queue.ts +4 -4
  92. package/src/core/components/functional/router/router.md +62 -97
  93. package/src/core/components/functional/router/router.ts +1 -1
  94. package/src/core/components/functional/states/states.md +2 -2
  95. package/src/core/components/functional/submit/submit.md +86 -55
  96. package/src/core/components/functional/submit/submit.ts +10 -3
  97. package/src/core/components/ui/captcha/captcha.md +2 -2
  98. package/src/core/components/ui/card/card.md +1 -1
  99. package/src/core/components/ui/form/checkbox/checkbox.md +5 -32
  100. package/src/core/components/ui/form/input/input.md +5 -30
  101. package/src/core/components/ui/form/input-autocomplete/input-autocomplete.md +6 -4
  102. package/src/core/components/ui/form/radio/radio.md +5 -32
  103. package/src/core/components/ui/form/select/select.md +5 -31
  104. package/src/core/components/ui/form/switch/switch.md +5 -32
  105. package/src/core/components/ui/loader/loader.md +1 -13
  106. package/src/core/components/ui/table/table.md +3 -3
  107. package/src/core/decorators/api.spec.ts +8 -1
  108. package/src/core/decorators/api.ts +126 -15
  109. package/src/core/directives/DataProvider.sub.spec.ts +96 -0
  110. package/src/core/directives/DataProvider.ts +109 -40
  111. package/src/core/utils/HTML.ts +42 -10
  112. package/src/core/utils/PublisherProxy.ts +33 -18
  113. package/src/core/utils/dataProviderKey.ts +23 -0
  114. package/src/core/utils/publisherPathKey.spec.ts +58 -0
  115. package/src/docs/_core-concept/dataFlow.md +73 -0
  116. package/src/docs/_core-concept/subscriber.md +9 -10
  117. package/src/docs/_decorators/ancestor-attribute.md +4 -3
  118. package/src/docs/_decorators/auto-subscribe.md +19 -16
  119. package/src/docs/_decorators/bind.md +19 -16
  120. package/src/docs/_decorators/get.md +7 -4
  121. package/src/docs/_decorators/handle.md +15 -13
  122. package/src/docs/_decorators/on-assign.md +53 -53
  123. package/src/docs/_decorators/publish.md +2 -1
  124. package/src/docs/_decorators/subscribe.md +70 -9
  125. package/src/docs/_decorators/wait-for-ancestors.md +13 -10
  126. package/src/docs/_directives/sub.md +91 -0
  127. package/src/docs/_getting-started/ai-agents.md +56 -0
  128. package/src/docs/_getting-started/concorde-manual-install.md +133 -0
  129. package/src/docs/_getting-started/concorde-outside.md +13 -123
  130. package/src/docs/_getting-started/create-a-component.md +2 -0
  131. package/src/docs/_getting-started/my-first-component.md +236 -0
  132. package/src/docs/_getting-started/my-first-subscriber.md +29 -83
  133. package/src/docs/_getting-started/pubsub.md +21 -134
  134. package/src/docs/_getting-started/start.md +26 -18
  135. package/src/docs/_misc/api-configuration.md +79 -0
  136. package/src/docs/_misc/dataProviderKey.md +34 -1
  137. package/src/docs/_misc/docs-mock-api.md +60 -0
  138. package/src/docs/_misc/endpoint.md +2 -1
  139. package/src/docs/_misc/html-integration.md +13 -0
  140. package/src/docs/code.ts +58 -12
  141. package/src/docs/components/docs-demo-sources.ts +397 -0
  142. package/src/docs/components/docs-lit-demo-raw.ts +28 -0
  143. package/src/docs/components/docs-lit-demo.ts +166 -0
  144. package/src/docs/components/docs-source-link.ts +72 -0
  145. package/src/docs/docs-location.ts +54 -0
  146. package/src/docs/docs.ts +12 -0
  147. package/src/docs/example/decorators-demo-bind-demos.ts +41 -46
  148. package/src/docs/example/decorators-demo-geo.ts +16 -11
  149. package/src/docs/example/decorators-demo-init.ts +2 -228
  150. package/src/docs/example/decorators-demo-subscribe-publish-get-demos.ts +54 -14
  151. package/src/docs/example/decorators-demo.ts +71 -70
  152. package/src/docs/example/docs-api-config-demos.ts +234 -0
  153. package/src/docs/example/docs-joke-demos.ts +297 -0
  154. package/src/docs/example/docs-list-demos.ts +179 -0
  155. package/src/docs/example/docs-provider-keys.ts +315 -0
  156. package/src/docs/example/docs-queue-demos.ts +114 -0
  157. package/src/docs/example/docs-router-demos.ts +89 -0
  158. package/src/docs/example/docs-submit-demos.ts +455 -0
  159. package/src/docs/example/docs-toggle-demos.ts +73 -0
  160. package/src/docs/example/docs-user-two-scopes.ts +37 -0
  161. package/src/docs/example/docs-users-list.ts +71 -0
  162. package/src/docs/example/users.ts +41 -24
  163. package/src/docs/mock-api/api-config-mock.ts +152 -0
  164. package/src/docs/mock-api/fixtures.ts +377 -0
  165. package/src/docs/mock-api/register.ts +25 -0
  166. package/src/docs/mock-api/router.ts +234 -0
  167. package/src/docs/mock-api/service-worker.ts +23 -0
  168. package/src/docs/mock-api/urls.ts +11 -0
  169. package/src/docs/navigation/navigation.ts +39 -7
  170. package/src/docs/search/docs-search.json +4021 -936
  171. package/src/docs/search/markdown-renderer.ts +7 -3
  172. package/src/docs/search/page.ts +11 -14
  173. package/src/docs/search/sonic-code-markdown.spec.ts +29 -0
  174. package/src/docs/search/sonic-code-markdown.ts +28 -0
  175. package/src/docs.ts +4 -0
  176. package/src/tsconfig.json +87 -0
  177. package/src/tsconfig.tsbuildinfo +1 -1
  178. package/vite.config.mts +8 -0
  179. package/docs/assets/index-CaysOMFz.js +0 -5046
  180. package/docs/assets/index-D8mGoXzF.css +0 -1
  181. package/docs/src/docs/_misc/templates-demo.md +0 -19
  182. package/src/docs/_misc/templates-demo.md +0 -19
package/.gitlab-ci.yml ADDED
@@ -0,0 +1,23 @@
1
+ stages:
2
+ - test
3
+
4
+ variables:
5
+ GIT_STRATEGY: clone
6
+ GIT_DEPTH: "0"
7
+
8
+ # TESTS : sur les Merge Requests ET sur les push dans master
9
+ tests:
10
+ stage: test
11
+ tags:
12
+ - ssks7
13
+ rules:
14
+ # Dans le contexte d'une Merge Request
15
+ - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
16
+ when: on_success
17
+ # Sur un push direct dans master
18
+ - if: '$CI_COMMIT_BRANCH == "master"'
19
+ when: on_success
20
+ # Sinon rien (push de branches sans MR)
21
+ - when: never
22
+ script:
23
+ - bash gitlab/job_tests.sh
package/README.md CHANGED
@@ -1,101 +1,152 @@
1
1
  # Concorde Framework
2
2
 
3
- Framework de composants Web basé sur Lit Element avec un système de thèmes, de data binding et de composants réutilisables.
3
+ `@supersoniks/concorde` — framework de composants Web basé sur Lit avec système de thèmes, data binding (décorateurs `@subscribe` / `@publish` / `@handle` / `@bind`...) et composants réutilisables.
4
+
5
+ ## 📚 Documentation
6
+
7
+ La documentation en ligne (à jour) est disponible ici :
8
+
9
+ 👉 **https://doc.concorde.test/**
10
+
11
+ Elle est générée à partir des fichiers `.md` du code source (`yarn build-docs`).Utilisation à vos risques — contributions et retours bienvenus !**
12
+
13
+ ## 🤖 Agent IA (Cursor + JetBrains)
14
+
15
+
16
+ > **Disclaimer : les règles n'ont encore été vraiment testées et seront msie a jour au fur et a mesure.
17
+
18
+ Règles et skills installables depuis `ai/` :
19
+
20
+ ```bash
21
+ yarn ai-init
22
+ # ou dans un projet consommateur :
23
+ node node_modules/@supersoniks/concorde/scripts/ai-init.mjs
24
+ ```
25
+
26
+ Installe `.cursor/skills`, `.cursor/rules`, `.aiassistant/rules` et `AGENTS.md`. Voir [ai/README.md](ai/README.md).
4
27
 
5
28
  ## 📁 Structure du projet
6
29
 
7
30
  ```
8
31
  concorde/
9
32
  ├── src/ # Code source principal
10
- │ ├── core/ # Cœur du framework
11
- │ │ ├── components/ # Composants UI et fonctionnels
12
- │ │ ├── mixins/ # Mixins réutilisables
13
- │ │ ├── utils/ # Utilitaires
14
- │ │ └── _types/ # Types TypeScript
15
- │ ├── docs/ # Composants de documentation
16
- │ └── index.ts # Point d'entrée principal
17
- ├── docs/ # Documentation générée
18
- ├── dist/ # Fichiers de build
19
- ├── public/ # Assets publics
20
- ├── package.json # Configuration npm
21
- ├── vite.config.mts # Configuration Vite
22
- └── tailwind.config.js # Configuration Tailwind
33
+ │ ├── core/ # Cœur du framework
34
+ │ │ ├── components/ # Composants UI et fonctionnels
35
+ │ │ ├── decorators/ # Décorateurs (subscribe, publish, handle, bind...)
36
+ │ │ ├── directives/ # Directives Lit
37
+ │ │ ├── mixins/ # Mixins réutilisables
38
+ ├── utils/ # Utilitaires
39
+ └── _types/ # Types TypeScript
40
+ ├── docs/ # Sources de la documentation
41
+ │ └── index.ts # Point d'entrée principal
42
+ ├── dist/ # Build de la librairie (généré)
43
+ ├── docs/ # Documentation générée (généré)
44
+ ├── public/ # Assets publics
45
+ ├── gitlab/ # Scripts des jobs GitLab CI
46
+ ├── scripts/ # Scripts de build / publication
47
+ ├── vite.config.mts # Configuration Vite
48
+ ├── tailwind.config.js # Configuration Tailwind
49
+ └── package.json # Configuration du package (yarn)
23
50
  ```
24
51
 
25
52
  ## 🎨 Composants disponibles
26
53
 
27
- ### Composants UI (20)
28
- - **Formulaires** : input, select, checkbox, radio, textarea
54
+ ### Composants UI
55
+ - **Formulaires** : input, select, checkbox, radio, textarea, switch, fieldset
29
56
  - **Navigation** : button, link, menu
30
- - **Feedback** : alert, badge, modal, toast, tooltip
57
+ - **Feedback** : alert, alert-messages, badge, modal, toast, tooltip, progress
31
58
  - **Layout** : card, table, divider, group
32
- - **Media** : icon, image, loader, progress
59
+ - **Media** : icon, image, loader
33
60
 
34
- ### Composants fonctionnels (15)
61
+ ### Composants fonctionnels
35
62
  - **Data** : fetch, list, queue, subscriber, value
36
63
  - **Navigation** : router, redirect, states
37
- - **Logic** : if, submit, mix, translation
38
- - **Advanced** : sdui (Server Driven UI)
64
+ - **Logique** : if, submit, mix, translation
65
+ - **Avancé** : sdui (Server Driven UI)
66
+
67
+ ## 🔗 Concepts clés : Endpoint, DataProvider / DataProviderKey & décorateurs
68
+
69
+ Le cœur de Concorde est un **data binding réactif**. Un **DataProvider** (publisher / store observable) détient les données ; les composants s'y **abonnent** ou y **publient** via des **décorateurs**, en ciblant soit un chemin typé local (**DataProviderKey**), soit une ressource distante (**Endpoint**).
70
+
71
+ ```mermaid
72
+ flowchart LR
73
+ api[("API / Endpoint<T>")] -->|"@get"| dp["DataProvider (store)"]
74
+ dp -->|"@subscribe / @bind / @handle"| comp["Composant Lit"]
75
+ comp -->|"@publish / @bind"| dp
76
+ ```
77
+
78
+ ### Les briques de données
79
+
80
+ - **`DataProviderKey<T>`** — chemin **typé** en notation pointée vers une structure composite, ex. `new DataProviderKey<Data>("data").items[0]` → `"data.items.0"`. Navigation type-safe, chemins dynamiques via `${prop}`. Import : `@supersoniks/concorde/dataProviderKey`. Voir [la doc DataProviderKey](https://doc.concorde.test/#docs/_misc/dataProviderKey.md/dataProviderKey).
81
+ - **`Endpoint<T, U>`** — un **unique chemin HTTP** (sans notation pointée) portant le type de réponse `T` ; segments dynamiques `${...}`. Consommé par `@get`. Import : `@supersoniks/concorde/utils/endpoint`. Voir [la doc Endpoint](https://doc.concorde.test/#docs/_misc/endpoint.md/endpoint).
82
+ - **DataProvider** — le publisher observable qui notifie ses abonnés à chaque assignation.
83
+
84
+ ### Les décorateurs (`src/core/decorators/subscriber/`)
85
+
86
+ | Décorateur | Rôle | Cible |
87
+ |---|---|---|
88
+ | `@subscribe(key)` | Liaison **lecture seule** : la propriété suit le publisher | `DataProviderKey<T>` |
89
+ | `@publish(key)` | Liaison **écriture seule** : assigner la propriété publie vers le chemin | `DataProviderKey<T>` |
90
+ | `@bind(path)` | Liaison **bidirectionnelle** (accepte aussi un chemin string) | chemin / clé |
91
+ | `@handle(...keys)` | Appelle une **méthode typée** à chaque assignation (effets de bord, calculs) | jusqu'à 3 `DataProviderKey<T>` |
92
+ | `@get(endpoint)` | Charge des données via l'API ; la propriété devient `ApiGetResult<T> \| null` | `Endpoint<T>` |
93
+
94
+ `DataProviderKey` est la pierre angulaire : c'est lui qui fournit les chemins **typés** utilisés par `@subscribe`, `@publish`, `@bind` et `@handle`, tandis que `Endpoint` fait le pont avec les données distantes via `@get`. Détails et exemples sur la [documentation des décorateurs](https://doc.concorde.test/#docs/_decorators/subscribe.md/subscribe).
39
95
 
40
96
  ## 🛠️ Développement
41
97
 
98
+ Le projet utilise **yarn** (voir `packageManager` dans `package.json`).
99
+
42
100
  ### Installation
43
101
  ```bash
44
- npm install
45
- # ou
46
102
  yarn install
47
103
  ```
48
104
 
49
- ### Développement
105
+ ### Serveur de dev
50
106
  ```bash
51
- npm run dev
52
- # ou
53
107
  yarn dev
54
108
  ```
109
+ Lance Vite sur `https://localhost:3000` (host `0.0.0.0`, SSL local).
55
110
 
56
- ### Build
111
+ ### Build de la librairie
57
112
  ```bash
58
- npm run build
59
- # ou
60
113
  yarn build
61
114
  ```
115
+ Produit `dist/` ainsi que `concorde-core.es.js` / `concorde-core.bundle.js`.
62
116
 
63
- ### Tests
117
+ ### Build de la documentation
64
118
  ```bash
65
- npm test
66
- # ou
67
- yarn test
119
+ yarn build-docs
68
120
  ```
69
121
 
70
- ## 📚 Documentation
71
-
72
- - **[Documentation principale](docs/)** - Documentation générée
73
- - **[Composants](src/core/components/)** - Code source des composants
74
- - **[Exemples](docs/)** - Exemples d'utilisation
122
+ ### Tests
123
+ ```bash
124
+ yarn test # mode watch (développement)
125
+ yarn test:ci # exécution unique (utilisé par la CI)
126
+ ```
75
127
 
76
128
  ## 🔧 Technologies
77
129
 
78
- - **Lit Element** - Web Components
79
- - **TypeScript** - Langage principal
80
- - **Tailwind CSS** - Styles utilitaires
81
- - **Vite** - Build tool
82
- - **Vitest** - Tests
130
+ - **Lit** Web Components
131
+ - **TypeScript** langage principal
132
+ - **Tailwind CSS** styles utilitaires
133
+ - **Vite** build / dev server
134
+ - **Vitest** tests (environnement jsdom)
83
135
 
84
- ## 📄 Licence
136
+ ## 🔁 Intégration continue (GitLab)
85
137
 
86
- MIT License - Voir le fichier [LICENSE](LICENSE) pour plus de détails.
138
+ Le projet est hébergé sur GitLab et la CI est définie dans [.gitlab-ci.yml](.gitlab-ci.yml) :
87
139
 
88
- ## 🤝 Contribution
140
+ - le job `tests` s'exécute sur les **Merge Requests** et sur les push dans **`master`** ;
141
+ - il tourne sur le runner `ssks7` et lance `yarn install` + `yarn test:ci` dans le conteneur `nodejs` (script [gitlab/job_tests.sh](gitlab/job_tests.sh)).
89
142
 
90
- Pour contribuer au projet :
143
+ ## 🤝 Contribution
91
144
 
92
- 1. Fork le projet
93
- 2. Créer une branche feature
94
- 3. Modifier le code
95
- 4. Tester avec `npm test`
96
- 5. Créer une Pull Request
145
+ 1. Créer une branche à partir de `master`.
146
+ 2. Faire ses modifications.
147
+ 3. Vérifier les tests : `yarn test:ci`.
148
+ 4. Ouvrir une **Merge Request** vers `master` (la CI lance les tests automatiquement).
97
149
 
98
- ## 📞 Support
150
+ ## 📄 Licence
99
151
 
100
- - **Issues** : [GitHub Issues](https://github.com/supersoniks/concorde/issues)
101
- - **Documentation** : [docs/](docs/)
152
+ MIT voir le fichier [LICENSE](LICENSE).
package/ai/AGENTS.md ADDED
@@ -0,0 +1,52 @@
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
+ ## Documentation
51
+
52
+ Fichiers `.md` dans le package : `node_modules/@supersoniks/concorde/src/` (composants, décorateurs, getting-started).
package/ai/README.md ADDED
@@ -0,0 +1,30 @@
1
+ # Agent IA — Concorde
2
+
3
+ Fichiers installables pour **Cursor** et **JetBrains AI Assistant**.
4
+
5
+ ## Installation dans un projet
6
+
7
+ ```bash
8
+ node node_modules/@supersoniks/concorde/scripts/ai-init.mjs
9
+ ```
10
+
11
+ Options :
12
+
13
+ - `--overlay <dir>` — couche additionnelle (ex. kit starter)
14
+ - `--merge-agents` — fusionne avec un `AGENTS.md` existant
15
+ - `--cursor-only` / `--jetbrains-only`
16
+
17
+ Depuis le dépôt Concorde (dev) : `yarn ai-init`
18
+
19
+ ## Contenu
20
+
21
+ | Dossier | Cible |
22
+ |---------|--------|
23
+ | `skills/` | `.cursor/skills/` (concorde, imports, scope, theme, menu) |
24
+ | `cursor/rules/` | `.cursor/rules/` |
25
+ | `jetbrains/rules/` | `.aiassistant/rules/` |
26
+ | `AGENTS.md` | racine du projet |
27
+
28
+ ## Template starter
29
+
30
+ Le package `create-concorde-ts-starter` ajoute un overlay via `yarn ai:sync`.
@@ -0,0 +1,15 @@
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).
@@ -0,0 +1,14 @@
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`**
@@ -0,0 +1,13 @@
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 background color font>` + `--sc-*` CSS variables
12
+ - `theme="dark"` for built-in dark palette
13
+ - Not for `serviceURL` / API — use **`concorde-scope`**
@@ -0,0 +1,49 @@
1
+ ---
2
+ description: Patterns Concorde — DataProvider, décorateurs, templates Lit list/queue, pas sonic-fetch
3
+ globs: **/*.{ts,tsx,js,mjs}
4
+ alwaysApply: false
5
+ ---
6
+
7
+ # Concorde — patterns
8
+
9
+ Référence : `.cursor/skills/concorde/SKILL.md` + `.cursor/skills/concorde-imports/SKILL.md`
10
+ Migration get/set/dp : `.cursor/skills/concorde-get-set-dp/SKILL.md`
11
+
12
+ ## Imports
13
+
14
+ **Apps externes** : chemins courts (`@supersoniks/concorde/list`, `/menu`, `/decorators`, …) — voir skill `concorde-imports`.
15
+
16
+ **Dépôt Concorde (lib + doc)** : chemins longs ou relatifs — ex. `core/components/functional/list/list`, `core/decorators/Subscriber`, `core/utils/dataProviderKey`. Pas `@supersoniks/concorde/list` ici.
17
+
18
+ ## Vocabulaire
19
+
20
+ - **DataProvider** (jamais « publisher »)
21
+ - Accès : **`get` / `set`** — pas `PublisherManager`
22
+
23
+ ## Interdits (nouveau code)
24
+
25
+ - `sonic-fetch` → `sonic-queue` + filtre, ou `@get`
26
+ - `@onAssign` → `@handle` + `DataProviderKey`
27
+ - `@bind` → `@subscribe` + `DataProviderKey<T, U>` (pas sur composants métier)
28
+ - `data-bind` HTML → `@subscribe` / `sub()`
29
+ - `sonic-input` + `@input` → `formDataProvider` + `name`
30
+ - Templates HTML sur list/queue → `.items`, `.separator`, `.noItems`, `.skeleton`
31
+
32
+ ## DataProviderKey dynamique
33
+
34
+ ```typescript
35
+ new DataProviderKey<T, { userIndex: number }>("users.${userIndex}")
36
+ ```
37
+
38
+ Placeholder `${prop}` = chaîne normale, résolu depuis le composant hôte.
39
+
40
+ ## get / set / dp vs sub()
41
+
42
+ - **`get` / `set` / `dp`** : pas de `${` / `{$` dans la string passée (clé statique ou chemin JS évalué).
43
+ - **`sub(chemin | DataProviderKey)`** : dynamique OK dans les templates (placeholders `${…}` sur l’hôte).
44
+ - Clé dynamique → décorateur ou `dp(idRésolu)`, pas `dp(cléAvecPlaceholder)`.
45
+
46
+ ## Scope / theme
47
+
48
+ - **Scope** : `<sonic-scope serviceURL="…">` · `@get(endpoint)` ou `@get(endpoint, apiConfigKey)` — skills `concorde-scope`
49
+ - **Theme** : `<sonic-theme background color font>` · `--sc-*` — skill `concorde-theme`
@@ -0,0 +1,39 @@
1
+ # Concorde — patterns agent
2
+
3
+ Référence doc : fichiers `.md` dans `node_modules/@supersoniks/concorde/src/`.
4
+
5
+ ## Imports
6
+
7
+ **Apps externes** : chemins courts (`/menu`, `/list`, `/decorators`, `/dataProviderKey`, …).
8
+
9
+ **Dépôt Concorde (lib + doc)** : `core/components/functional/list/list`, `core/decorators/Subscriber`, `core/utils/dataProviderKey` — pas `@supersoniks/concorde/list` ici.
10
+
11
+ ## Vocabulaire
12
+
13
+ - **DataProvider** (jamais « publisher »)
14
+ - Accès : **get / set** — pas PublisherManager
15
+
16
+ ## Interdits (nouveau code)
17
+
18
+ - sonic-fetch → sonic-queue + filtre, ou @get
19
+ - @onAssign → @handle + DataProviderKey
20
+ - data-bind HTML → @subscribe / sub()
21
+ - sonic-input + @input → formDataProvider + name
22
+ - Templates HTML list/queue → .items, .separator, .noItems, .skeleton
23
+ - Chemins longs ui/…, functional/…, core/… quand un alias racine existe
24
+
25
+ ## DataProviderKey dynamique
26
+
27
+ Placeholder `${prop}` dans une chaîne normale : `"users.${userIndex}"`.
28
+
29
+ ## Scope vs theme
30
+
31
+ - **Scope** (`sonic-scope`) : `serviceURL`, `formDataProvider`, icônes — skill `concorde-scope`
32
+ - **Theme** (`sonic-theme`) : `--sc-*` tokens, dark mode — skill `concorde-theme`
33
+ - `@get(endpoint)` sans clé config → hérite scope ; `@get(endpoint, apiConfigKey)` → DataProvider
34
+
35
+ ## Navigation
36
+
37
+ sonic-menu + sonic-menu-item + sonic-divider. pushstate + autoActive="strict".
38
+
39
+ Pas de tirets dans les noms de dossiers routes.