@supersoniks/concorde 4.7.3 → 4.8.0

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 (152) hide show
  1. package/README.md +1 -1
  2. package/ai/AGENTS.md +4 -0
  3. package/ai/cursor/rules/concorde.mdc +11 -1
  4. package/ai/jetbrains/rules/concorde.md +8 -0
  5. package/ai/skills/concorde/SKILL.md +29 -2
  6. package/ai/skills/concorde-scope/SKILL.md +2 -2
  7. package/build-infos.json +1 -1
  8. package/concorde-core.bundle.js +289 -289
  9. package/concorde-core.es.js +4839 -4546
  10. package/dist/concorde-core.bundle.js +289 -289
  11. package/dist/concorde-core.es.js +4839 -4546
  12. package/dist/docs-mock-api-sw.js +19 -0
  13. package/dist/docs-mock-api-sw.js.map +2 -2
  14. package/dist/robots.txt +2 -0
  15. package/docs/assets/index-wyNMyWT9.js +11196 -0
  16. package/docs/docs-mock-api-sw.js +19 -0
  17. package/docs/docs-mock-api-sw.js.map +2 -2
  18. package/docs/index.html +1 -1
  19. package/docs/robots.txt +2 -0
  20. package/package.json +9 -1
  21. package/public/docs-mock-api-sw.js +19 -0
  22. package/public/docs-mock-api-sw.js.map +2 -2
  23. package/public/robots.txt +2 -0
  24. package/src/core/components/functional/example/example.ts +3 -3
  25. package/src/core/components/ui/captcha/captcha.md +0 -12
  26. package/src/core/components/ui/icon/icon.ts +17 -2
  27. package/src/core/components/ui/menu/menu.ts +12 -3
  28. package/src/core/decorators/api.post.spec.ts +293 -0
  29. package/src/core/decorators/api.spec.ts +7 -14
  30. package/src/core/decorators/api.ts +648 -15
  31. package/src/core/decorators/subscriber/bind.ts +13 -5
  32. package/src/core/decorators/subscriber/dynamicPath.spec.ts +53 -0
  33. package/src/core/decorators/subscriber/dynamicPath.ts +23 -1
  34. package/src/core/decorators/subscriber/handle.ts +3 -1
  35. package/src/core/decorators/subscriber/onAssign.ts +10 -2
  36. package/src/core/decorators/subscriber/publish.ts +12 -2
  37. package/src/core/utils/PublisherProxy.ts +95 -11
  38. package/src/core/utils/api.ts +72 -3
  39. package/src/core/utils/dpOptions.spec.ts +56 -0
  40. package/src/core/utils/endpoint.ts +3 -3
  41. package/src/decorators.ts +17 -1
  42. package/src/docs/_core-concept/dataFlow.md +9 -3
  43. package/src/docs/_decorators/bind.md +2 -2
  44. package/src/docs/_decorators/get.md +13 -4
  45. package/src/docs/_decorators/handle.md +5 -1
  46. package/src/docs/_decorators/on-assign.md +2 -0
  47. package/src/docs/_decorators/patch.md +45 -0
  48. package/src/docs/_decorators/post.md +93 -0
  49. package/src/docs/_decorators/publish.md +1 -1
  50. package/src/docs/_decorators/put.md +43 -0
  51. package/src/docs/_decorators/subscribe.md +4 -1
  52. package/src/docs/_directives/sub.md +1 -1
  53. package/src/docs/_getting-started/my-first-component.md +1 -1
  54. package/src/docs/_misc/api-configuration.md +3 -1
  55. package/src/docs/_misc/dataProviderKey.md +2 -2
  56. package/src/docs/_misc/dynamic-path.md +71 -0
  57. package/src/docs/_misc/endpoint.md +5 -3
  58. package/src/docs/components/docs-demo-sources.ts +102 -3
  59. package/src/docs/components/docs-lit-demo-raw.ts +2 -26
  60. package/src/docs/components/docs-lit-demo.ts +9 -42
  61. package/src/docs/components/docs-source-excerpt.ts +53 -0
  62. package/src/docs/components/docs-source-link.ts +24 -8
  63. package/src/docs/components/docs-source-raw.ts +34 -0
  64. package/src/docs/example/decorators-demo-geo.ts +2 -2
  65. package/src/docs/example/decorators-demo-post.ts +249 -0
  66. package/src/docs/example/decorators-demo-subscribe-publish-get-demos.ts +5 -5
  67. package/src/docs/example/decorators-demo.ts +1 -0
  68. package/src/docs/example/docs-api-config-demos.ts +5 -5
  69. package/src/docs/mock-api/router.ts +20 -0
  70. package/src/docs/navigation/navigation.ts +16 -0
  71. package/src/docs/search/docs-search.json +540 -15
  72. package/src/tsconfig.json +24 -0
  73. package/src/tsconfig.tsbuildinfo +1 -1
  74. package/vite.config.mts +1 -1
  75. package/docs/assets/index-D9pxaQYK.js +0 -7508
  76. package/docs/src/core/components/functional/date/date.md +0 -290
  77. package/docs/src/core/components/functional/fetch/fetch.md +0 -125
  78. package/docs/src/core/components/functional/if/if.md +0 -9
  79. package/docs/src/core/components/functional/list/list.md +0 -65
  80. package/docs/src/core/components/functional/mix/mix.md +0 -41
  81. package/docs/src/core/components/functional/queue/queue.md +0 -72
  82. package/docs/src/core/components/functional/router/router.md +0 -94
  83. package/docs/src/core/components/functional/sdui/default-library.json +0 -108
  84. package/docs/src/core/components/functional/sdui/example.json +0 -99
  85. package/docs/src/core/components/functional/sdui/sdui.md +0 -356
  86. package/docs/src/core/components/functional/states/states.md +0 -87
  87. package/docs/src/core/components/functional/submit/submit.md +0 -114
  88. package/docs/src/core/components/functional/subscriber/subscriber.md +0 -91
  89. package/docs/src/core/components/functional/value/value.md +0 -35
  90. package/docs/src/core/components/ui/alert/alert.md +0 -121
  91. package/docs/src/core/components/ui/alert-messages/alert-messages.md +0 -0
  92. package/docs/src/core/components/ui/badge/badge.md +0 -127
  93. package/docs/src/core/components/ui/button/button.md +0 -182
  94. package/docs/src/core/components/ui/captcha/captcha.md +0 -24
  95. package/docs/src/core/components/ui/card/card.md +0 -97
  96. package/docs/src/core/components/ui/divider/divider.md +0 -35
  97. package/docs/src/core/components/ui/form/checkbox/checkbox.md +0 -77
  98. package/docs/src/core/components/ui/form/fieldset/fieldset.md +0 -129
  99. package/docs/src/core/components/ui/form/form-actions/form-actions.md +0 -77
  100. package/docs/src/core/components/ui/form/form-layout/form-layout.md +0 -44
  101. package/docs/src/core/components/ui/form/input/input.md +0 -142
  102. package/docs/src/core/components/ui/form/input-autocomplete/input-autocomplete.md +0 -133
  103. package/docs/src/core/components/ui/form/radio/radio.md +0 -57
  104. package/docs/src/core/components/ui/form/select/select.md +0 -71
  105. package/docs/src/core/components/ui/form/switch/switch.md +0 -57
  106. package/docs/src/core/components/ui/form/textarea/textarea.md +0 -65
  107. package/docs/src/core/components/ui/group/group.md +0 -75
  108. package/docs/src/core/components/ui/icon/icon.md +0 -125
  109. package/docs/src/core/components/ui/icon/icons.json +0 -1
  110. package/docs/src/core/components/ui/image/image.md +0 -107
  111. package/docs/src/core/components/ui/link/link.md +0 -43
  112. package/docs/src/core/components/ui/loader/loader.md +0 -55
  113. package/docs/src/core/components/ui/menu/menu.md +0 -329
  114. package/docs/src/core/components/ui/modal/modal.md +0 -119
  115. package/docs/src/core/components/ui/pop/pop.md +0 -96
  116. package/docs/src/core/components/ui/progress/progress.md +0 -63
  117. package/docs/src/core/components/ui/table/table.md +0 -455
  118. package/docs/src/core/components/ui/toast/toast.md +0 -166
  119. package/docs/src/core/components/ui/tooltip/tooltip.md +0 -82
  120. package/docs/src/docs/_core-concept/dataFlow.md +0 -73
  121. package/docs/src/docs/_core-concept/overview.md +0 -57
  122. package/docs/src/docs/_core-concept/subscriber.md +0 -75
  123. package/docs/src/docs/_decorators/ancestor-attribute.md +0 -79
  124. package/docs/src/docs/_decorators/auto-subscribe.md +0 -202
  125. package/docs/src/docs/_decorators/bind.md +0 -167
  126. package/docs/src/docs/_decorators/get.md +0 -68
  127. package/docs/src/docs/_decorators/handle.md +0 -171
  128. package/docs/src/docs/_decorators/on-assign.md +0 -388
  129. package/docs/src/docs/_decorators/publish.md +0 -55
  130. package/docs/src/docs/_decorators/subscribe.md +0 -97
  131. package/docs/src/docs/_decorators/wait-for-ancestors.md +0 -163
  132. package/docs/src/docs/_directives/sub.md +0 -91
  133. package/docs/src/docs/_getting-started/ai-agents.md +0 -56
  134. package/docs/src/docs/_getting-started/concorde-manual-install.md +0 -133
  135. package/docs/src/docs/_getting-started/concorde-outside.md +0 -33
  136. package/docs/src/docs/_getting-started/create-a-component.md +0 -139
  137. package/docs/src/docs/_getting-started/my-first-component.md +0 -236
  138. package/docs/src/docs/_getting-started/my-first-subscriber.md +0 -120
  139. package/docs/src/docs/_getting-started/pubsub.md +0 -37
  140. package/docs/src/docs/_getting-started/start.md +0 -47
  141. package/docs/src/docs/_getting-started/theming.md +0 -91
  142. package/docs/src/docs/_misc/api-configuration.md +0 -79
  143. package/docs/src/docs/_misc/dataProviderKey.md +0 -168
  144. package/docs/src/docs/_misc/docs-mock-api.md +0 -60
  145. package/docs/src/docs/_misc/endpoint.md +0 -43
  146. package/docs/src/docs/_misc/html-integration.md +0 -13
  147. package/docs/src/docs/search/docs-search.json +0 -8532
  148. package/docs/src/tag-list.json +0 -1
  149. package/docs/src/tsconfig-model.json +0 -23
  150. package/docs/src/tsconfig.json +0 -1050
  151. package/php/get-challenge.php +0 -34
  152. package/php/some-service.php +0 -42
package/README.md CHANGED
@@ -89,7 +89,7 @@ flowchart LR
89
89
  | `@publish(key)` | Liaison **écriture seule** : assigner la propriété publie vers le chemin | `DataProviderKey<T>` |
90
90
  | `@bind(path)` | Liaison **bidirectionnelle** (accepte aussi un chemin string) | chemin / clé |
91
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>` |
92
+ | `@get(endpoint)` | Charge des données via l'API ; la propriété devient `ApiResult<T> \| null` | `Endpoint<T>` |
93
93
 
94
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).
95
95
 
package/ai/AGENTS.md CHANGED
@@ -47,6 +47,10 @@ Skill **`concorde-imports`** : section « Dans le dépôt Concorde ».
47
47
 
48
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
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
+
50
54
  ## Documentation
51
55
 
52
56
  Fichiers `.md` dans le package : `node_modules/@supersoniks/concorde/src/` (composants, décorateurs, getting-started).
@@ -18,7 +18,7 @@ Migration get/set/dp : `.cursor/skills/concorde-get-set-dp/SKILL.md`
18
18
  ## Vocabulaire
19
19
 
20
20
  - **DataProvider** (jamais « publisher »)
21
- - Accès : **`get` / `set`** — pas `PublisherManager`
21
+ - Accès impératif : **`dp(clé).get()` / `.set()` / `.invalidate()`** ou `get(clé)` / `set(clé, v)` **jamais** `PublisherManager.getInstance()` ni `PublisherManager.get()` dans le code métier (bootstrap `dp.ts` excepté)
22
22
 
23
23
  ## Interdits (nouveau code)
24
24
 
@@ -47,3 +47,13 @@ Placeholder `${prop}` = chaîne normale, résolu depuis le composant hôte.
47
47
 
48
48
  - **Scope** : `<sonic-scope serviceURL="…">` · `@get(endpoint)` ou `@get(endpoint, apiConfigKey)` — skills `concorde-scope`
49
49
  - **Theme** : `<sonic-theme background color font>` · `--sc-*` — skill `concorde-theme`
50
+
51
+ ## Migration Subscriber / sonic-fetch (piège fréquent)
52
+
53
+ - Retirer `extends Subscriber` **sans** `@subscribe` sur chaque champ affiché → UI vide (props orphelines).
54
+ - Remplacer `sonic-fetch` : `@get` + alimenter le DP ; UI en `@subscribe` feuille ou hôte `Subscriber` + `dataProvider`/`subDataProvider`.
55
+ - `@get` + placeholders `${prop}` : propriétés homonymes sur l'hôte (ou sync dans `willUpdate`).
56
+ - Modale / portal : `@get(endpoint, apiConfigKey)` si pas de `serviceURL` ascendant.
57
+ - `@subscribe` → préférer `@state()`, pas `@property`.
58
+
59
+ Détail : skill `concorde` — section « Piège migration Subscriber → LitElement ».
@@ -31,6 +31,14 @@ Placeholder `${prop}` dans une chaîne normale : `"users.${userIndex}"`.
31
31
  - **Scope** (`sonic-scope`) : `serviceURL`, `formDataProvider`, icônes — skill `concorde-scope`
32
32
  - **Theme** (`sonic-theme`) : `--sc-*` tokens, dark mode — skill `concorde-theme`
33
33
  - `@get(endpoint)` sans clé config → hérite scope ; `@get(endpoint, apiConfigKey)` → DataProvider
34
+ - Modale / portal : préférer `apiConfigKey` si pas de scope DOM fiable
35
+
36
+ ## Migration Subscriber / sonic-fetch
37
+
38
+ - Ne pas retirer `Subscriber` sans `@subscribe` feuille par feuille sur chaque champ du `render()`.
39
+ - `sonic-fetch` → `@get` + DP ; `@subscribe` ou hôte `Subscriber` avec `dataProvider`/`subDataProvider`.
40
+ - Placeholders Endpoint = propriétés homonymes sur l'hôte (`checkCode` → copier vers `code` si besoin).
41
+ - `@subscribe` + `@state()`, pas `@property` pour la lecture DP.
34
42
 
35
43
  ## Navigation
36
44
 
@@ -195,6 +195,32 @@ Après `initPublisher`, refléter le chemin résolu sur l’attribut (ex. `app/c
195
195
 
196
196
  **Liste / queue** : chaque ligne a son publisher — l’hôte **hérite** de l’ancêtre ; ne pas forcer `app.currentSession` sur un item de liste.
197
197
 
198
+ ### Piège migration `Subscriber` → `LitElement` (checklist)
199
+
200
+ Lors du remplacement de `sonic-fetch` ou du retrait du mixin `Subscriber` sur un composant **métier** :
201
+
202
+ | Étape | Vérification |
203
+ |-------|----------------|
204
+ | Champs affichés dans `render()` | Chaque `@property` autrefois remplie par template filling → **`@subscribe(dpKey.feuille)` + `@state()`** (pas laisser des `@property` orphelins) |
205
+ | Enfant d’un `@get` | `@get` + `@publish`/`@handle` vers le DataProvider cible ; l’UI lit ce DP via `@subscribe`, pas via des props vides |
206
+ | Placeholders `Endpoint` | Les noms `${prop}` doivent exister sur l’hôte (`@property` ou copie dans `willUpdate` si le scan utilise un autre nom, ex. `checkCode` → `code`) |
207
+ | Modale / portal | `@get(endpoint, apiConfigKey)` si pas de `serviceURL` ascendant fiable (`Modal` → `Theme.getPopContainer()`) |
208
+ | Remplacement `sonic-fetch` | Expliciter `dataProvider` + `subDataProvider` sur les hôtes `Subscriber` enfants (ex. `app` + `currentScanTicket`) |
209
+
210
+ ```typescript
211
+ // ❌ — Subscriber retiré, props jamais alimentées
212
+ export class TicketInfos extends LitElement {
213
+ @property({ type: Object }) owner = {};
214
+ render() { return html`${this.owner?.firstName}`; }
215
+ }
216
+
217
+ // ✅ — une souscription par champ affiché
218
+ @subscribe(dpKeys.currentScanTicket.owner)
219
+ @state() owner: Contact = {};
220
+ ```
221
+
222
+ **`@subscribe` + décorateur Lit** : préférer **`@state()`** (pas `@property`) pour les champs purement lus depuis le DataProvider.
223
+
198
224
  ## formDataProvider
199
225
 
200
226
  ```html
@@ -254,9 +280,10 @@ Propriétés Lit (recommandé) :
254
280
  | `PublisherManager.get(…)` | `get(…)` ou `set(…)` |
255
281
  | « publisher » | DataProvider |
256
282
  | `sonic-input` + `@input` | `formDataProvider` + `name` |
257
- | `sonic-fetch` | `sonic-queue` + filtre, ou `@get` |
258
- | `extends Subscriber(LitElement)` (métier seul) | `LitElement` + `@subscribe` feuille par feuille / `sub()` |
283
+ | `sonic-fetch` | `sonic-queue` + filtre, ou `@get` + `@publish`/`@handle` + `@subscribe` / hôte `Subscriber` |
284
+ | `extends Subscriber(LitElement)` (métier seul) | `LitElement` + `@subscribe` feuille par feuille / `sub()` — **ne pas oublier** les champs template-filled |
259
285
  | `extends Subscriber` (hôte d’enfants sonic) | Conserver `Subscriber` + `dataProvider` / `subDataProvider` corrects |
286
+ | `@get` dans modale | `@get(endpoint, apiConfigKey)` si config API hors scope DOM |
260
287
  | `data-bind` HTML | `@subscribe` / `sub()` |
261
288
  | `@bind` décorateur | `@subscribe` + `DataProviderKey` (lecture) ou `@publish` (écriture) |
262
289
  | `@onAssign` | `@handle` + `DataProviderKey` |
@@ -47,7 +47,7 @@ Type : `@supersoniks/concorde/utils/api`.
47
47
 
48
48
  ```typescript
49
49
  @get(usersEndpoint) // pas de 2ᵉ arg — hérite serviceURL
50
- @state() data: ApiGetResult<Users> | null = null;
50
+ @state() data: ApiResult<Users> | null = null;
51
51
  ```
52
52
 
53
53
  **2. DataProvider** — objet typé :
@@ -59,7 +59,7 @@ const apiKey = new DataProviderKey<APIConfiguration>("myApi");
59
59
  set(apiKey, { serviceURL: "https://api.example.com", credentials: "same-origin" });
60
60
 
61
61
  @get(usersEndpoint, apiKey)
62
- @state() data: ApiGetResult<Users> | null = null;
62
+ @state() data: ApiResult<Users> | null = null;
63
63
  ```
64
64
 
65
65
  Les deux patterns peuvent coexister (scope pour l’URL par défaut, clé explicite quand nécessaire).
package/build-infos.json CHANGED
@@ -1 +1 @@
1
- {"date":1780507582}
1
+ {"date":1781160844}