@supersoniks/concorde 4.7.4 → 4.9.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 (679) hide show
  1. package/.github/workflows/ci.yml +21 -0
  2. package/.github-export-ignore +30 -0
  3. package/.gitlab-ci.yml +13 -0
  4. package/CONTRIBUTING.md +59 -0
  5. package/DEV.md +54 -0
  6. package/LICENSE +21 -0
  7. package/OPEN_SOURCE_CHECKPOINT.md +133 -0
  8. package/README.md +30 -16
  9. package/ai/cursor/rules/concorde.mdc +1 -1
  10. package/ai/skills/concorde-scope/SKILL.md +2 -2
  11. package/build-infos.json +1 -1
  12. package/concorde-core.bundle.js +214 -214
  13. package/concorde-core.es.js +4517 -4133
  14. package/dist/concorde-core.bundle.js +214 -214
  15. package/dist/concorde-core.es.js +4517 -4133
  16. package/dist/docs-mock-api-sw.js +19 -0
  17. package/dist/docs-mock-api-sw.js.map +2 -2
  18. package/dist/js/components.js +12 -0
  19. package/dist/js/components.js.map +1 -0
  20. package/dist/js/concorde-loaded.js +5 -0
  21. package/dist/js/concorde-loaded.js.map +1 -0
  22. package/dist/js/core/_types/endpoint.js +5 -0
  23. package/dist/js/core/_types/endpoint.js.map +1 -0
  24. package/dist/js/core/_types/key.js +2 -0
  25. package/dist/js/core/_types/key.js.map +1 -0
  26. package/dist/js/core/_types/types.js +3 -0
  27. package/dist/js/core/_types/types.js.map +1 -0
  28. package/dist/js/core/components/functional/date/date.js +272 -0
  29. package/dist/js/core/components/functional/date/date.js.map +1 -0
  30. package/dist/js/core/components/functional/example/example.js +44 -0
  31. package/dist/js/core/components/functional/example/example.js.map +1 -0
  32. package/dist/js/core/components/functional/fetch/fetch.js +79 -0
  33. package/dist/js/core/components/functional/fetch/fetch.js.map +1 -0
  34. package/dist/js/core/components/functional/functional.js +17 -0
  35. package/dist/js/core/components/functional/functional.js.map +1 -0
  36. package/dist/js/core/components/functional/if/if.js +39 -0
  37. package/dist/js/core/components/functional/if/if.js.map +1 -0
  38. package/dist/js/core/components/functional/list/list.js +341 -0
  39. package/dist/js/core/components/functional/list/list.js.map +1 -0
  40. package/dist/js/core/components/functional/mix/mix.js +103 -0
  41. package/dist/js/core/components/functional/mix/mix.js.map +1 -0
  42. package/dist/js/core/components/functional/queue/queue.js +386 -0
  43. package/dist/js/core/components/functional/queue/queue.js.map +1 -0
  44. package/dist/js/core/components/functional/router/redirect.js +54 -0
  45. package/dist/js/core/components/functional/router/redirect.js.map +1 -0
  46. package/dist/js/core/components/functional/router/router.js +179 -0
  47. package/dist/js/core/components/functional/router/router.js.map +1 -0
  48. package/dist/js/core/components/functional/sdui/SDUIDescriptorTransformer.js +216 -0
  49. package/dist/js/core/components/functional/sdui/SDUIDescriptorTransformer.js.map +1 -0
  50. package/dist/js/core/components/functional/sdui/default-library.json +108 -0
  51. package/dist/js/core/components/functional/sdui/sdui-utils.js +64 -0
  52. package/dist/js/core/components/functional/sdui/sdui-utils.js.map +1 -0
  53. package/dist/js/core/components/functional/sdui/sdui.js +266 -0
  54. package/dist/js/core/components/functional/sdui/sdui.js.map +1 -0
  55. package/dist/js/core/components/functional/sdui/types.js +2 -0
  56. package/dist/js/core/components/functional/sdui/types.js.map +1 -0
  57. package/dist/js/core/components/functional/sonic-scope/sonic-scope.js +22 -0
  58. package/dist/js/core/components/functional/sonic-scope/sonic-scope.js.map +1 -0
  59. package/dist/js/core/components/functional/states/states.js +172 -0
  60. package/dist/js/core/components/functional/states/states.js.map +1 -0
  61. package/dist/js/core/components/functional/submit/submit.js +284 -0
  62. package/dist/js/core/components/functional/submit/submit.js.map +1 -0
  63. package/dist/js/core/components/functional/subscriber/subscriber.js +39 -0
  64. package/dist/js/core/components/functional/subscriber/subscriber.js.map +1 -0
  65. package/dist/js/core/components/functional/translation/translation.js +28 -0
  66. package/dist/js/core/components/functional/translation/translation.js.map +1 -0
  67. package/dist/js/core/components/functional/value/value.js +28 -0
  68. package/dist/js/core/components/functional/value/value.js.map +1 -0
  69. package/dist/js/core/components/ui/_css/scroll.js +25 -0
  70. package/dist/js/core/components/ui/_css/scroll.js.map +1 -0
  71. package/dist/js/core/components/ui/_css/shadow.js +22 -0
  72. package/dist/js/core/components/ui/_css/shadow.js.map +1 -0
  73. package/dist/js/core/components/ui/_css/size.js +36 -0
  74. package/dist/js/core/components/ui/_css/size.js.map +1 -0
  75. package/dist/js/core/components/ui/_css/type.js +92 -0
  76. package/dist/js/core/components/ui/_css/type.js.map +1 -0
  77. package/dist/js/core/components/ui/alert/alert.js +213 -0
  78. package/dist/js/core/components/ui/alert/alert.js.map +1 -0
  79. package/dist/js/core/components/ui/alert-messages/alert-messages.js +68 -0
  80. package/dist/js/core/components/ui/alert-messages/alert-messages.js.map +1 -0
  81. package/dist/js/core/components/ui/badge/badge.js +199 -0
  82. package/dist/js/core/components/ui/badge/badge.js.map +1 -0
  83. package/dist/js/core/components/ui/button/button.js +697 -0
  84. package/dist/js/core/components/ui/button/button.js.map +1 -0
  85. package/dist/js/core/components/ui/captcha/altchaStyles.js +226 -0
  86. package/dist/js/core/components/ui/captcha/altchaStyles.js.map +1 -0
  87. package/dist/js/core/components/ui/captcha/captcha.js +167 -0
  88. package/dist/js/core/components/ui/captcha/captcha.js.map +1 -0
  89. package/dist/js/core/components/ui/card/card-footer.js +26 -0
  90. package/dist/js/core/components/ui/card/card-footer.js.map +1 -0
  91. package/dist/js/core/components/ui/card/card-header-descripton.js +30 -0
  92. package/dist/js/core/components/ui/card/card-header-descripton.js.map +1 -0
  93. package/dist/js/core/components/ui/card/card-header.js +79 -0
  94. package/dist/js/core/components/ui/card/card-header.js.map +1 -0
  95. package/dist/js/core/components/ui/card/card-main.js +26 -0
  96. package/dist/js/core/components/ui/card/card-main.js.map +1 -0
  97. package/dist/js/core/components/ui/card/card.js +67 -0
  98. package/dist/js/core/components/ui/card/card.js.map +1 -0
  99. package/dist/js/core/components/ui/divider/divider.js +200 -0
  100. package/dist/js/core/components/ui/divider/divider.js.map +1 -0
  101. package/dist/js/core/components/ui/form/checkbox/checkbox.js +257 -0
  102. package/dist/js/core/components/ui/form/checkbox/checkbox.js.map +1 -0
  103. package/dist/js/core/components/ui/form/css/form-control.js +393 -0
  104. package/dist/js/core/components/ui/form/css/form-control.js.map +1 -0
  105. package/dist/js/core/components/ui/form/fieldset/fieldset.js +124 -0
  106. package/dist/js/core/components/ui/form/fieldset/fieldset.js.map +1 -0
  107. package/dist/js/core/components/ui/form/fieldset/legend-description.js +38 -0
  108. package/dist/js/core/components/ui/form/fieldset/legend-description.js.map +1 -0
  109. package/dist/js/core/components/ui/form/fieldset/legend.js +130 -0
  110. package/dist/js/core/components/ui/form/fieldset/legend.js.map +1 -0
  111. package/dist/js/core/components/ui/form/form-actions/form-actions.js +47 -0
  112. package/dist/js/core/components/ui/form/form-actions/form-actions.js.map +1 -0
  113. package/dist/js/core/components/ui/form/form-layout/form-layout.js +84 -0
  114. package/dist/js/core/components/ui/form/form-layout/form-layout.js.map +1 -0
  115. package/dist/js/core/components/ui/form/input/input.js +316 -0
  116. package/dist/js/core/components/ui/form/input/input.js.map +1 -0
  117. package/dist/js/core/components/ui/form/input/password-helper.js +134 -0
  118. package/dist/js/core/components/ui/form/input/password-helper.js.map +1 -0
  119. package/dist/js/core/components/ui/form/input/same-value-helper.js +85 -0
  120. package/dist/js/core/components/ui/form/input/same-value-helper.js.map +1 -0
  121. package/dist/js/core/components/ui/form/input-autocomplete/input-autocomplete.js +405 -0
  122. package/dist/js/core/components/ui/form/input-autocomplete/input-autocomplete.js.map +1 -0
  123. package/dist/js/core/components/ui/form/radio/radio.js +63 -0
  124. package/dist/js/core/components/ui/form/radio/radio.js.map +1 -0
  125. package/dist/js/core/components/ui/form/select/select.js +323 -0
  126. package/dist/js/core/components/ui/form/select/select.js.map +1 -0
  127. package/dist/js/core/components/ui/form/switch/switch.js +90 -0
  128. package/dist/js/core/components/ui/form/switch/switch.js.map +1 -0
  129. package/dist/js/core/components/ui/form/textarea/textarea.js +162 -0
  130. package/dist/js/core/components/ui/form/textarea/textarea.js.map +1 -0
  131. package/dist/js/core/components/ui/group/group.js +128 -0
  132. package/dist/js/core/components/ui/group/group.js.map +1 -0
  133. package/dist/js/core/components/ui/icon/icon.js +129 -0
  134. package/dist/js/core/components/ui/icon/icon.js.map +1 -0
  135. package/dist/js/core/components/ui/icon/icons.js +163 -0
  136. package/dist/js/core/components/ui/icon/icons.js.map +1 -0
  137. package/dist/js/core/components/ui/icon/icons.json +1 -0
  138. package/dist/js/core/components/ui/image/image.js +160 -0
  139. package/dist/js/core/components/ui/image/image.js.map +1 -0
  140. package/dist/js/core/components/ui/link/link.js +125 -0
  141. package/dist/js/core/components/ui/link/link.js.map +1 -0
  142. package/dist/js/core/components/ui/loader/loader.js +106 -0
  143. package/dist/js/core/components/ui/loader/loader.js.map +1 -0
  144. package/dist/js/core/components/ui/loader/styles/fixed.js +56 -0
  145. package/dist/js/core/components/ui/loader/styles/fixed.js.map +1 -0
  146. package/dist/js/core/components/ui/loader/styles/inline.js +70 -0
  147. package/dist/js/core/components/ui/loader/styles/inline.js.map +1 -0
  148. package/dist/js/core/components/ui/menu/menu-item.js +35 -0
  149. package/dist/js/core/components/ui/menu/menu-item.js.map +1 -0
  150. package/dist/js/core/components/ui/menu/menu.js +436 -0
  151. package/dist/js/core/components/ui/menu/menu.js.map +1 -0
  152. package/dist/js/core/components/ui/modal/modal-actions.js +44 -0
  153. package/dist/js/core/components/ui/modal/modal-actions.js.map +1 -0
  154. package/dist/js/core/components/ui/modal/modal-close.js +56 -0
  155. package/dist/js/core/components/ui/modal/modal-close.js.map +1 -0
  156. package/dist/js/core/components/ui/modal/modal-content.js +27 -0
  157. package/dist/js/core/components/ui/modal/modal-content.js.map +1 -0
  158. package/dist/js/core/components/ui/modal/modal-subtitle.js +34 -0
  159. package/dist/js/core/components/ui/modal/modal-subtitle.js.map +1 -0
  160. package/dist/js/core/components/ui/modal/modal-title.js +35 -0
  161. package/dist/js/core/components/ui/modal/modal-title.js.map +1 -0
  162. package/dist/js/core/components/ui/modal/modal-utils.js +32 -0
  163. package/dist/js/core/components/ui/modal/modal-utils.js.map +1 -0
  164. package/dist/js/core/components/ui/modal/modal.js +568 -0
  165. package/dist/js/core/components/ui/modal/modal.js.map +1 -0
  166. package/dist/js/core/components/ui/pop/pop.js +337 -0
  167. package/dist/js/core/components/ui/pop/pop.js.map +1 -0
  168. package/dist/js/core/components/ui/progress/progress.js +164 -0
  169. package/dist/js/core/components/ui/progress/progress.js.map +1 -0
  170. package/dist/js/core/components/ui/table/table-caption.js +29 -0
  171. package/dist/js/core/components/ui/table/table-caption.js.map +1 -0
  172. package/dist/js/core/components/ui/table/table-tbody.js +41 -0
  173. package/dist/js/core/components/ui/table/table-tbody.js.map +1 -0
  174. package/dist/js/core/components/ui/table/table-td.js +69 -0
  175. package/dist/js/core/components/ui/table/table-td.js.map +1 -0
  176. package/dist/js/core/components/ui/table/table-tfoot.js +28 -0
  177. package/dist/js/core/components/ui/table/table-tfoot.js.map +1 -0
  178. package/dist/js/core/components/ui/table/table-th.js +80 -0
  179. package/dist/js/core/components/ui/table/table-th.js.map +1 -0
  180. package/dist/js/core/components/ui/table/table-thead.js +26 -0
  181. package/dist/js/core/components/ui/table/table-thead.js.map +1 -0
  182. package/dist/js/core/components/ui/table/table-tr.js +67 -0
  183. package/dist/js/core/components/ui/table/table-tr.js.map +1 -0
  184. package/dist/js/core/components/ui/table/table.js +106 -0
  185. package/dist/js/core/components/ui/table/table.js.map +1 -0
  186. package/dist/js/core/components/ui/theme/theme-collection/core-variables.js +74 -0
  187. package/dist/js/core/components/ui/theme/theme-collection/core-variables.js.map +1 -0
  188. package/dist/js/core/components/ui/theme/theme-collection/dark.js +39 -0
  189. package/dist/js/core/components/ui/theme/theme-collection/dark.js.map +1 -0
  190. package/dist/js/core/components/ui/theme/theme-collection/light.js +32 -0
  191. package/dist/js/core/components/ui/theme/theme-collection/light.js.map +1 -0
  192. package/dist/js/core/components/ui/theme/theme.js +150 -0
  193. package/dist/js/core/components/ui/theme/theme.js.map +1 -0
  194. package/dist/js/core/components/ui/toast/message-subscriber.js +41 -0
  195. package/dist/js/core/components/ui/toast/message-subscriber.js.map +1 -0
  196. package/dist/js/core/components/ui/toast/toast-item.js +379 -0
  197. package/dist/js/core/components/ui/toast/toast-item.js.map +1 -0
  198. package/dist/js/core/components/ui/toast/toast.js +269 -0
  199. package/dist/js/core/components/ui/toast/toast.js.map +1 -0
  200. package/dist/js/core/components/ui/toast/types.js +2 -0
  201. package/dist/js/core/components/ui/toast/types.js.map +1 -0
  202. package/dist/js/core/components/ui/tooltip/tooltip.js +219 -0
  203. package/dist/js/core/components/ui/tooltip/tooltip.js.map +1 -0
  204. package/dist/js/core/components/ui/ui.js +41 -0
  205. package/dist/js/core/components/ui/ui.js.map +1 -0
  206. package/dist/js/core/core.js +14 -0
  207. package/dist/js/core/core.js.map +1 -0
  208. package/dist/js/core/decorators/Subscriber.js +9 -0
  209. package/dist/js/core/decorators/Subscriber.js.map +1 -0
  210. package/dist/js/core/decorators/api.js +559 -0
  211. package/dist/js/core/decorators/api.js.map +1 -0
  212. package/dist/js/core/decorators/lifecycle.js +67 -0
  213. package/dist/js/core/decorators/lifecycle.js.map +1 -0
  214. package/dist/js/core/decorators/subscriber/ancestorAttribute.js +27 -0
  215. package/dist/js/core/decorators/subscriber/ancestorAttribute.js.map +1 -0
  216. package/dist/js/core/decorators/subscriber/autoFill.js +26 -0
  217. package/dist/js/core/decorators/subscriber/autoFill.js.map +1 -0
  218. package/dist/js/core/decorators/subscriber/autoSubscribe.js +46 -0
  219. package/dist/js/core/decorators/subscriber/autoSubscribe.js.map +1 -0
  220. package/dist/js/core/decorators/subscriber/bind.js +150 -0
  221. package/dist/js/core/decorators/subscriber/bind.js.map +1 -0
  222. package/dist/js/core/decorators/subscriber/common.js +44 -0
  223. package/dist/js/core/decorators/subscriber/common.js.map +1 -0
  224. package/dist/js/core/decorators/subscriber/dynamicPath.js +75 -0
  225. package/dist/js/core/decorators/subscriber/dynamicPath.js.map +1 -0
  226. package/dist/js/core/decorators/subscriber/dynamicPropertyWatch.js +138 -0
  227. package/dist/js/core/decorators/subscriber/dynamicPropertyWatch.js.map +1 -0
  228. package/dist/js/core/decorators/subscriber/handle.js +22 -0
  229. package/dist/js/core/decorators/subscriber/handle.js.map +1 -0
  230. package/dist/js/core/decorators/subscriber/onAssign.js +199 -0
  231. package/dist/js/core/decorators/subscriber/onAssign.js.map +1 -0
  232. package/dist/js/core/decorators/subscriber/publish.js +108 -0
  233. package/dist/js/core/decorators/subscriber/publish.js.map +1 -0
  234. package/dist/js/core/decorators/subscriber/publisherPath.js +16 -0
  235. package/dist/js/core/decorators/subscriber/publisherPath.js.map +1 -0
  236. package/dist/js/core/decorators/subscriber/subscribe.js +20 -0
  237. package/dist/js/core/decorators/subscriber/subscribe.js.map +1 -0
  238. package/dist/js/core/directives/DataProvider.js +127 -0
  239. package/dist/js/core/directives/DataProvider.js.map +1 -0
  240. package/dist/js/core/directives/Wording.js +221 -0
  241. package/dist/js/core/directives/Wording.js.map +1 -0
  242. package/dist/js/core/mixins/Fetcher.js +325 -0
  243. package/dist/js/core/mixins/Fetcher.js.map +1 -0
  244. package/dist/js/core/mixins/FormCheckable.js +313 -0
  245. package/dist/js/core/mixins/FormCheckable.js.map +1 -0
  246. package/dist/js/core/mixins/FormElement.js +304 -0
  247. package/dist/js/core/mixins/FormElement.js.map +1 -0
  248. package/dist/js/core/mixins/FormInput.js +82 -0
  249. package/dist/js/core/mixins/FormInput.js.map +1 -0
  250. package/dist/js/core/mixins/Subscriber.js +354 -0
  251. package/dist/js/core/mixins/Subscriber.js.map +1 -0
  252. package/dist/js/core/mixins/TemplatesContainer.js +70 -0
  253. package/dist/js/core/mixins/TemplatesContainer.js.map +1 -0
  254. package/dist/js/core/mixins/mixins.js +7 -0
  255. package/dist/js/core/mixins/mixins.js.map +1 -0
  256. package/dist/js/core/utils/AncestorAttributeObserver.js +140 -0
  257. package/dist/js/core/utils/AncestorAttributeObserver.js.map +1 -0
  258. package/dist/js/core/utils/Arrays.js +141 -0
  259. package/dist/js/core/utils/Arrays.js.map +1 -0
  260. package/dist/js/core/utils/DataBindObserver.js +265 -0
  261. package/dist/js/core/utils/DataBindObserver.js.map +1 -0
  262. package/dist/js/core/utils/Electron.js +14 -0
  263. package/dist/js/core/utils/Electron.js.map +1 -0
  264. package/dist/js/core/utils/Format.js +43 -0
  265. package/dist/js/core/utils/Format.js.map +1 -0
  266. package/dist/js/core/utils/HTML.js +248 -0
  267. package/dist/js/core/utils/HTML.js.map +1 -0
  268. package/dist/js/core/utils/LocationHandler.js +143 -0
  269. package/dist/js/core/utils/LocationHandler.js.map +1 -0
  270. package/dist/js/core/utils/Objects.js +111 -0
  271. package/dist/js/core/utils/Objects.js.map +1 -0
  272. package/dist/js/core/utils/PublisherProxy.js +946 -0
  273. package/dist/js/core/utils/PublisherProxy.js.map +1 -0
  274. package/dist/js/core/utils/Utils.js +19 -0
  275. package/dist/js/core/utils/Utils.js.map +1 -0
  276. package/dist/js/core/utils/aesCrypto.js +98 -0
  277. package/dist/js/core/utils/aesCrypto.js.map +1 -0
  278. package/dist/js/core/utils/api.js +574 -0
  279. package/dist/js/core/utils/api.js.map +1 -0
  280. package/dist/js/core/utils/dataProviderKey.js +64 -0
  281. package/dist/js/core/utils/dataProviderKey.js.map +1 -0
  282. package/dist/js/core/utils/endpoint.js +74 -0
  283. package/dist/js/core/utils/endpoint.js.map +1 -0
  284. package/dist/js/core/utils/route.js +149 -0
  285. package/dist/js/core/utils/route.js.map +1 -0
  286. package/dist/js/core/utils/url-pattern.js +3 -0
  287. package/dist/js/core/utils/url-pattern.js.map +1 -0
  288. package/dist/js/dataprovider.js +2 -0
  289. package/dist/js/dataprovider.js.map +1 -0
  290. package/dist/js/decorators.js +39 -0
  291. package/dist/js/decorators.js.map +1 -0
  292. package/dist/js/directives.js +30 -0
  293. package/dist/js/directives.js.map +1 -0
  294. package/dist/js/index.js +8 -0
  295. package/dist/js/index.js.map +1 -0
  296. package/dist/js/mixins.js +23 -0
  297. package/dist/js/mixins.js.map +1 -0
  298. package/dist/js/test-utils/TestUtils.js +10 -0
  299. package/dist/js/test-utils/TestUtils.js.map +1 -0
  300. package/dist/js/utils.js +41 -0
  301. package/dist/js/utils.js.map +1 -0
  302. package/dist/types/components.d.ts +5 -0
  303. package/dist/types/components.d.ts.map +1 -0
  304. package/dist/types/concorde-loaded.d.ts +2 -0
  305. package/dist/types/concorde-loaded.d.ts.map +1 -0
  306. package/dist/types/core/_types/endpoint.d.ts +5 -0
  307. package/dist/types/core/_types/endpoint.d.ts.map +1 -0
  308. package/dist/types/core/_types/key.d.ts +2 -0
  309. package/dist/types/core/_types/key.d.ts.map +1 -0
  310. package/dist/types/core/_types/types.d.ts +28 -0
  311. package/dist/types/core/_types/types.d.ts.map +1 -0
  312. package/dist/types/core/components/functional/date/date.d.ts +52 -0
  313. package/dist/types/core/components/functional/date/date.d.ts.map +1 -0
  314. package/dist/types/core/components/functional/example/example.d.ts +15 -0
  315. package/dist/types/core/components/functional/example/example.d.ts.map +1 -0
  316. package/dist/types/core/components/functional/fetch/fetch.d.ts +102 -0
  317. package/dist/types/core/components/functional/fetch/fetch.d.ts.map +1 -0
  318. package/dist/types/core/components/functional/functional.d.ts +17 -0
  319. package/dist/types/core/components/functional/functional.d.ts.map +1 -0
  320. package/dist/types/core/components/functional/if/if.d.ts +13 -0
  321. package/dist/types/core/components/functional/if/if.d.ts.map +1 -0
  322. package/dist/types/core/components/functional/list/list.d.ts +149 -0
  323. package/dist/types/core/components/functional/list/list.d.ts.map +1 -0
  324. package/dist/types/core/components/functional/mix/mix.d.ts +23 -0
  325. package/dist/types/core/components/functional/mix/mix.d.ts.map +1 -0
  326. package/dist/types/core/components/functional/queue/queue.d.ts +79 -0
  327. package/dist/types/core/components/functional/queue/queue.d.ts.map +1 -0
  328. package/dist/types/core/components/functional/router/redirect.d.ts +19 -0
  329. package/dist/types/core/components/functional/router/redirect.d.ts.map +1 -0
  330. package/dist/types/core/components/functional/router/router.d.ts +46 -0
  331. package/dist/types/core/components/functional/router/router.d.ts.map +1 -0
  332. package/dist/types/core/components/functional/sdui/SDUIDescriptorTransformer.d.ts +59 -0
  333. package/dist/types/core/components/functional/sdui/SDUIDescriptorTransformer.d.ts.map +1 -0
  334. package/dist/types/core/components/functional/sdui/sdui-utils.d.ts +6 -0
  335. package/dist/types/core/components/functional/sdui/sdui-utils.d.ts.map +1 -0
  336. package/dist/types/core/components/functional/sdui/sdui.d.ts +145 -0
  337. package/dist/types/core/components/functional/sdui/sdui.d.ts.map +1 -0
  338. package/dist/types/core/components/functional/sdui/types.d.ts +38 -0
  339. package/dist/types/core/components/functional/sdui/types.d.ts.map +1 -0
  340. package/dist/types/core/components/functional/sonic-scope/sonic-scope.d.ts +6 -0
  341. package/dist/types/core/components/functional/sonic-scope/sonic-scope.d.ts.map +1 -0
  342. package/dist/types/core/components/functional/states/states.d.ts +42 -0
  343. package/dist/types/core/components/functional/states/states.d.ts.map +1 -0
  344. package/dist/types/core/components/functional/submit/submit.d.ts +37 -0
  345. package/dist/types/core/components/functional/submit/submit.d.ts.map +1 -0
  346. package/dist/types/core/components/functional/subscriber/subscriber.d.ts +13 -0
  347. package/dist/types/core/components/functional/subscriber/subscriber.d.ts.map +1 -0
  348. package/dist/types/core/components/functional/translation/translation.d.ts +7 -0
  349. package/dist/types/core/components/functional/translation/translation.d.ts.map +1 -0
  350. package/dist/types/core/components/functional/value/value.d.ts +8 -0
  351. package/dist/types/core/components/functional/value/value.d.ts.map +1 -0
  352. package/dist/types/core/components/ui/_css/scroll.d.ts +2 -0
  353. package/dist/types/core/components/ui/_css/scroll.d.ts.map +1 -0
  354. package/dist/types/core/components/ui/_css/shadow.d.ts +3 -0
  355. package/dist/types/core/components/ui/_css/shadow.d.ts.map +1 -0
  356. package/dist/types/core/components/ui/_css/size.d.ts +3 -0
  357. package/dist/types/core/components/ui/_css/size.d.ts.map +1 -0
  358. package/dist/types/core/components/ui/_css/type.d.ts +3 -0
  359. package/dist/types/core/components/ui/_css/type.d.ts.map +1 -0
  360. package/dist/types/core/components/ui/alert/alert.d.ts +37 -0
  361. package/dist/types/core/components/ui/alert/alert.d.ts.map +1 -0
  362. package/dist/types/core/components/ui/alert-messages/alert-messages.d.ts +15 -0
  363. package/dist/types/core/components/ui/alert-messages/alert-messages.d.ts.map +1 -0
  364. package/dist/types/core/components/ui/badge/badge.d.ts +27 -0
  365. package/dist/types/core/components/ui/badge/badge.d.ts.map +1 -0
  366. package/dist/types/core/components/ui/button/button.d.ts +180 -0
  367. package/dist/types/core/components/ui/button/button.d.ts.map +1 -0
  368. package/dist/types/core/components/ui/captcha/altchaStyles.d.ts +2 -0
  369. package/dist/types/core/components/ui/captcha/altchaStyles.d.ts.map +1 -0
  370. package/dist/types/core/components/ui/captcha/captcha.d.ts +30 -0
  371. package/dist/types/core/components/ui/captcha/captcha.d.ts.map +1 -0
  372. package/dist/types/core/components/ui/card/card-footer.d.ts +6 -0
  373. package/dist/types/core/components/ui/card/card-footer.d.ts.map +1 -0
  374. package/dist/types/core/components/ui/card/card-header-descripton.d.ts +6 -0
  375. package/dist/types/core/components/ui/card/card-header-descripton.d.ts.map +1 -0
  376. package/dist/types/core/components/ui/card/card-header.d.ts +9 -0
  377. package/dist/types/core/components/ui/card/card-header.d.ts.map +1 -0
  378. package/dist/types/core/components/ui/card/card-main.d.ts +6 -0
  379. package/dist/types/core/components/ui/card/card-main.d.ts.map +1 -0
  380. package/dist/types/core/components/ui/card/card.d.ts +13 -0
  381. package/dist/types/core/components/ui/card/card.d.ts.map +1 -0
  382. package/dist/types/core/components/ui/divider/divider.d.ts +16 -0
  383. package/dist/types/core/components/ui/divider/divider.d.ts.map +1 -0
  384. package/dist/types/core/components/ui/form/checkbox/checkbox.d.ts +176 -0
  385. package/dist/types/core/components/ui/form/checkbox/checkbox.d.ts.map +1 -0
  386. package/dist/types/core/components/ui/form/css/form-control.d.ts +5 -0
  387. package/dist/types/core/components/ui/form/css/form-control.d.ts.map +1 -0
  388. package/dist/types/core/components/ui/form/fieldset/fieldset.d.ts +24 -0
  389. package/dist/types/core/components/ui/form/fieldset/fieldset.d.ts.map +1 -0
  390. package/dist/types/core/components/ui/form/fieldset/legend-description.d.ts +6 -0
  391. package/dist/types/core/components/ui/form/fieldset/legend-description.d.ts.map +1 -0
  392. package/dist/types/core/components/ui/form/fieldset/legend.d.ts +17 -0
  393. package/dist/types/core/components/ui/form/fieldset/legend.d.ts.map +1 -0
  394. package/dist/types/core/components/ui/form/form-actions/form-actions.d.ts +8 -0
  395. package/dist/types/core/components/ui/form/form-actions/form-actions.d.ts.map +1 -0
  396. package/dist/types/core/components/ui/form/form-layout/form-layout.d.ts +13 -0
  397. package/dist/types/core/components/ui/form/form-layout/form-layout.d.ts.map +1 -0
  398. package/dist/types/core/components/ui/form/input/input.d.ts +123 -0
  399. package/dist/types/core/components/ui/form/input/input.d.ts.map +1 -0
  400. package/dist/types/core/components/ui/form/input/password-helper.d.ts +26 -0
  401. package/dist/types/core/components/ui/form/input/password-helper.d.ts.map +1 -0
  402. package/dist/types/core/components/ui/form/input/same-value-helper.d.ts +17 -0
  403. package/dist/types/core/components/ui/form/input/same-value-helper.d.ts.map +1 -0
  404. package/dist/types/core/components/ui/form/input-autocomplete/input-autocomplete.d.ts +155 -0
  405. package/dist/types/core/components/ui/form/input-autocomplete/input-autocomplete.d.ts.map +1 -0
  406. package/dist/types/core/components/ui/form/radio/radio.d.ts +15 -0
  407. package/dist/types/core/components/ui/form/radio/radio.d.ts.map +1 -0
  408. package/dist/types/core/components/ui/form/select/select.d.ts +59 -0
  409. package/dist/types/core/components/ui/form/select/select.d.ts.map +1 -0
  410. package/dist/types/core/components/ui/form/switch/switch.d.ts +6 -0
  411. package/dist/types/core/components/ui/form/switch/switch.d.ts.map +1 -0
  412. package/dist/types/core/components/ui/form/textarea/textarea.d.ts +94 -0
  413. package/dist/types/core/components/ui/form/textarea/textarea.d.ts.map +1 -0
  414. package/dist/types/core/components/ui/group/group.d.ts +17 -0
  415. package/dist/types/core/components/ui/group/group.d.ts.map +1 -0
  416. package/dist/types/core/components/ui/icon/icon.d.ts +28 -0
  417. package/dist/types/core/components/ui/icon/icon.d.ts.map +1 -0
  418. package/dist/types/core/components/ui/icon/icons.d.ts +11 -0
  419. package/dist/types/core/components/ui/icon/icons.d.ts.map +1 -0
  420. package/dist/types/core/components/ui/image/image.d.ts +16 -0
  421. package/dist/types/core/components/ui/image/image.d.ts.map +1 -0
  422. package/dist/types/core/components/ui/link/link.d.ts +30 -0
  423. package/dist/types/core/components/ui/link/link.d.ts.map +1 -0
  424. package/dist/types/core/components/ui/loader/loader.d.ts +24 -0
  425. package/dist/types/core/components/ui/loader/loader.d.ts.map +1 -0
  426. package/dist/types/core/components/ui/loader/styles/fixed.d.ts +2 -0
  427. package/dist/types/core/components/ui/loader/styles/fixed.d.ts.map +1 -0
  428. package/dist/types/core/components/ui/loader/styles/inline.d.ts +2 -0
  429. package/dist/types/core/components/ui/loader/styles/inline.d.ts.map +1 -0
  430. package/dist/types/core/components/ui/menu/menu-item.d.ts +6 -0
  431. package/dist/types/core/components/ui/menu/menu-item.d.ts.map +1 -0
  432. package/dist/types/core/components/ui/menu/menu.d.ts +52 -0
  433. package/dist/types/core/components/ui/menu/menu.d.ts.map +1 -0
  434. package/dist/types/core/components/ui/modal/modal-actions.d.ts +9 -0
  435. package/dist/types/core/components/ui/modal/modal-actions.d.ts.map +1 -0
  436. package/dist/types/core/components/ui/modal/modal-close.d.ts +11 -0
  437. package/dist/types/core/components/ui/modal/modal-close.d.ts.map +1 -0
  438. package/dist/types/core/components/ui/modal/modal-content.d.ts +6 -0
  439. package/dist/types/core/components/ui/modal/modal-content.d.ts.map +1 -0
  440. package/dist/types/core/components/ui/modal/modal-subtitle.d.ts +6 -0
  441. package/dist/types/core/components/ui/modal/modal-subtitle.d.ts.map +1 -0
  442. package/dist/types/core/components/ui/modal/modal-title.d.ts +6 -0
  443. package/dist/types/core/components/ui/modal/modal-title.d.ts.map +1 -0
  444. package/dist/types/core/components/ui/modal/modal-utils.d.ts +4 -0
  445. package/dist/types/core/components/ui/modal/modal-utils.d.ts.map +1 -0
  446. package/dist/types/core/components/ui/modal/modal.d.ts +79 -0
  447. package/dist/types/core/components/ui/modal/modal.d.ts.map +1 -0
  448. package/dist/types/core/components/ui/pop/pop.d.ts +42 -0
  449. package/dist/types/core/components/ui/pop/pop.d.ts.map +1 -0
  450. package/dist/types/core/components/ui/progress/progress.d.ts +12 -0
  451. package/dist/types/core/components/ui/progress/progress.d.ts.map +1 -0
  452. package/dist/types/core/components/ui/table/table-caption.d.ts +6 -0
  453. package/dist/types/core/components/ui/table/table-caption.d.ts.map +1 -0
  454. package/dist/types/core/components/ui/table/table-tbody.d.ts +6 -0
  455. package/dist/types/core/components/ui/table/table-tbody.d.ts.map +1 -0
  456. package/dist/types/core/components/ui/table/table-td.d.ts +13 -0
  457. package/dist/types/core/components/ui/table/table-td.d.ts.map +1 -0
  458. package/dist/types/core/components/ui/table/table-tfoot.d.ts +6 -0
  459. package/dist/types/core/components/ui/table/table-tfoot.d.ts.map +1 -0
  460. package/dist/types/core/components/ui/table/table-th.d.ts +12 -0
  461. package/dist/types/core/components/ui/table/table-th.d.ts.map +1 -0
  462. package/dist/types/core/components/ui/table/table-thead.d.ts +6 -0
  463. package/dist/types/core/components/ui/table/table-thead.d.ts.map +1 -0
  464. package/dist/types/core/components/ui/table/table-tr.d.ts +14 -0
  465. package/dist/types/core/components/ui/table/table-tr.d.ts.map +1 -0
  466. package/dist/types/core/components/ui/table/table.d.ts +18 -0
  467. package/dist/types/core/components/ui/table/table.d.ts.map +1 -0
  468. package/dist/types/core/components/ui/theme/theme-collection/core-variables.d.ts +2 -0
  469. package/dist/types/core/components/ui/theme/theme-collection/core-variables.d.ts.map +1 -0
  470. package/dist/types/core/components/ui/theme/theme-collection/dark.d.ts +2 -0
  471. package/dist/types/core/components/ui/theme/theme-collection/dark.d.ts.map +1 -0
  472. package/dist/types/core/components/ui/theme/theme-collection/light.d.ts +2 -0
  473. package/dist/types/core/components/ui/theme/theme-collection/light.d.ts.map +1 -0
  474. package/dist/types/core/components/ui/theme/theme.d.ts +20 -0
  475. package/dist/types/core/components/ui/theme/theme.d.ts.map +1 -0
  476. package/dist/types/core/components/ui/toast/message-subscriber.d.ts +19 -0
  477. package/dist/types/core/components/ui/toast/message-subscriber.d.ts.map +1 -0
  478. package/dist/types/core/components/ui/toast/toast-item.d.ts +41 -0
  479. package/dist/types/core/components/ui/toast/toast-item.d.ts.map +1 -0
  480. package/dist/types/core/components/ui/toast/toast.d.ts +28 -0
  481. package/dist/types/core/components/ui/toast/toast.d.ts.map +1 -0
  482. package/dist/types/core/components/ui/toast/types.d.ts +12 -0
  483. package/dist/types/core/components/ui/toast/types.d.ts.map +1 -0
  484. package/dist/types/core/components/ui/tooltip/tooltip.d.ts +21 -0
  485. package/dist/types/core/components/ui/tooltip/tooltip.d.ts.map +1 -0
  486. package/dist/types/core/components/ui/ui.d.ts +35 -0
  487. package/dist/types/core/components/ui/ui.d.ts.map +1 -0
  488. package/dist/types/core/core.d.ts +5 -0
  489. package/dist/types/core/core.d.ts.map +1 -0
  490. package/dist/types/core/decorators/Subscriber.d.ts +11 -0
  491. package/dist/types/core/decorators/Subscriber.d.ts.map +1 -0
  492. package/dist/types/core/decorators/api.d.ts +106 -0
  493. package/dist/types/core/decorators/api.d.ts.map +1 -0
  494. package/dist/types/core/decorators/lifecycle.d.ts +19 -0
  495. package/dist/types/core/decorators/lifecycle.d.ts.map +1 -0
  496. package/dist/types/core/decorators/subscriber/ancestorAttribute.d.ts +11 -0
  497. package/dist/types/core/decorators/subscriber/ancestorAttribute.d.ts.map +1 -0
  498. package/dist/types/core/decorators/subscriber/autoFill.d.ts +2 -0
  499. package/dist/types/core/decorators/subscriber/autoFill.d.ts.map +1 -0
  500. package/dist/types/core/decorators/subscriber/autoSubscribe.d.ts +2 -0
  501. package/dist/types/core/decorators/subscriber/autoSubscribe.d.ts.map +1 -0
  502. package/dist/types/core/decorators/subscriber/bind.d.ts +28 -0
  503. package/dist/types/core/decorators/subscriber/bind.d.ts.map +1 -0
  504. package/dist/types/core/decorators/subscriber/common.d.ts +14 -0
  505. package/dist/types/core/decorators/subscriber/common.d.ts.map +1 -0
  506. package/dist/types/core/decorators/subscriber/dynamicPath.d.ts +23 -0
  507. package/dist/types/core/decorators/subscriber/dynamicPath.d.ts.map +1 -0
  508. package/dist/types/core/decorators/subscriber/dynamicPropertyWatch.d.ts +42 -0
  509. package/dist/types/core/decorators/subscriber/dynamicPropertyWatch.d.ts.map +1 -0
  510. package/dist/types/core/decorators/subscriber/handle.d.ts +74 -0
  511. package/dist/types/core/decorators/subscriber/handle.d.ts.map +1 -0
  512. package/dist/types/core/decorators/subscriber/onAssign.d.ts +53 -0
  513. package/dist/types/core/decorators/subscriber/onAssign.d.ts.map +1 -0
  514. package/dist/types/core/decorators/subscriber/publish.d.ts +23 -0
  515. package/dist/types/core/decorators/subscriber/publish.d.ts.map +1 -0
  516. package/dist/types/core/decorators/subscriber/publisherPath.d.ts +3 -0
  517. package/dist/types/core/decorators/subscriber/publisherPath.d.ts.map +1 -0
  518. package/dist/types/core/decorators/subscriber/subscribe.d.ts +20 -0
  519. package/dist/types/core/decorators/subscriber/subscribe.d.ts.map +1 -0
  520. package/dist/types/core/directives/DataProvider.d.ts +45 -0
  521. package/dist/types/core/directives/DataProvider.d.ts.map +1 -0
  522. package/dist/types/core/directives/Wording.d.ts +44 -0
  523. package/dist/types/core/directives/Wording.d.ts.map +1 -0
  524. package/dist/types/core/mixins/Fetcher.d.ts +108 -0
  525. package/dist/types/core/mixins/Fetcher.d.ts.map +1 -0
  526. package/dist/types/core/mixins/FormCheckable.d.ts +95 -0
  527. package/dist/types/core/mixins/FormCheckable.d.ts.map +1 -0
  528. package/dist/types/core/mixins/FormElement.d.ts +37 -0
  529. package/dist/types/core/mixins/FormElement.d.ts.map +1 -0
  530. package/dist/types/core/mixins/FormInput.d.ts +79 -0
  531. package/dist/types/core/mixins/FormInput.d.ts.map +1 -0
  532. package/dist/types/core/mixins/Subscriber.d.ts +38 -0
  533. package/dist/types/core/mixins/Subscriber.d.ts.map +1 -0
  534. package/dist/types/core/mixins/TemplatesContainer.d.ts +14 -0
  535. package/dist/types/core/mixins/TemplatesContainer.d.ts.map +1 -0
  536. package/dist/types/core/mixins/mixins.d.ts +7 -0
  537. package/dist/types/core/mixins/mixins.d.ts.map +1 -0
  538. package/dist/types/core/utils/AncestorAttributeObserver.d.ts +38 -0
  539. package/dist/types/core/utils/AncestorAttributeObserver.d.ts.map +1 -0
  540. package/dist/types/core/utils/Arrays.d.ts +98 -0
  541. package/dist/types/core/utils/Arrays.d.ts.map +1 -0
  542. package/dist/types/core/utils/DataBindObserver.d.ts +84 -0
  543. package/dist/types/core/utils/DataBindObserver.d.ts.map +1 -0
  544. package/dist/types/core/utils/Electron.d.ts +8 -0
  545. package/dist/types/core/utils/Electron.d.ts.map +1 -0
  546. package/dist/types/core/utils/Format.d.ts +13 -0
  547. package/dist/types/core/utils/Format.d.ts.map +1 -0
  548. package/dist/types/core/utils/HTML.d.ts +64 -0
  549. package/dist/types/core/utils/HTML.d.ts.map +1 -0
  550. package/dist/types/core/utils/LocationHandler.d.ts +48 -0
  551. package/dist/types/core/utils/LocationHandler.d.ts.map +1 -0
  552. package/dist/types/core/utils/Objects.d.ts +31 -0
  553. package/dist/types/core/utils/Objects.d.ts.map +1 -0
  554. package/dist/types/core/utils/PublisherProxy.d.ts +230 -0
  555. package/dist/types/core/utils/PublisherProxy.d.ts.map +1 -0
  556. package/dist/types/core/utils/Utils.d.ts +6 -0
  557. package/dist/types/core/utils/Utils.d.ts.map +1 -0
  558. package/dist/types/core/utils/aesCrypto.d.ts +53 -0
  559. package/dist/types/core/utils/aesCrypto.d.ts.map +1 -0
  560. package/dist/types/core/utils/api.d.ts +173 -0
  561. package/dist/types/core/utils/api.d.ts.map +1 -0
  562. package/dist/types/core/utils/dataProviderKey.d.ts +56 -0
  563. package/dist/types/core/utils/dataProviderKey.d.ts.map +1 -0
  564. package/dist/types/core/utils/endpoint.d.ts +37 -0
  565. package/dist/types/core/utils/endpoint.d.ts.map +1 -0
  566. package/dist/types/core/utils/route.d.ts +41 -0
  567. package/dist/types/core/utils/route.d.ts.map +1 -0
  568. package/dist/types/core/utils/url-pattern.d.ts +3 -0
  569. package/dist/types/core/utils/url-pattern.d.ts.map +1 -0
  570. package/dist/types/dataprovider.d.ts +2 -0
  571. package/dist/types/dataprovider.d.ts.map +1 -0
  572. package/dist/types/decorators.d.ts +28 -0
  573. package/dist/types/decorators.d.ts.map +1 -0
  574. package/dist/types/directives.d.ts +21 -0
  575. package/dist/types/directives.d.ts.map +1 -0
  576. package/dist/types/index.d.ts +8 -0
  577. package/dist/types/index.d.ts.map +1 -0
  578. package/dist/types/mixins.d.ts +204 -0
  579. package/dist/types/mixins.d.ts.map +1 -0
  580. package/dist/types/test-utils/TestUtils.d.ts +4 -0
  581. package/dist/types/test-utils/TestUtils.d.ts.map +1 -0
  582. package/dist/types/utils.d.ts +17 -0
  583. package/dist/types/utils.d.ts.map +1 -0
  584. package/docs/assets/index-BEgZEIbv.js +11196 -0
  585. package/docs/docs-mock-api-sw.js +19 -0
  586. package/docs/docs-mock-api-sw.js.map +2 -2
  587. package/docs/index.html +1 -1
  588. package/docs/src/docs/_core-concept/dataFlow.md +9 -3
  589. package/docs/src/docs/_decorators/bind.md +2 -2
  590. package/docs/src/docs/_decorators/get.md +13 -4
  591. package/docs/src/docs/_decorators/handle.md +5 -1
  592. package/docs/src/docs/_decorators/on-assign.md +2 -0
  593. package/docs/src/docs/_decorators/patch.md +45 -0
  594. package/docs/src/docs/_decorators/post.md +93 -0
  595. package/docs/src/docs/_decorators/publish.md +1 -1
  596. package/docs/src/docs/_decorators/put.md +43 -0
  597. package/docs/src/docs/_decorators/subscribe.md +4 -1
  598. package/docs/src/docs/_directives/sub.md +1 -1
  599. package/docs/src/docs/_getting-started/my-first-component.md +1 -1
  600. package/docs/src/docs/_misc/api-configuration.md +3 -1
  601. package/docs/src/docs/_misc/dataProviderKey.md +2 -2
  602. package/docs/src/docs/_misc/dynamic-path.md +71 -0
  603. package/docs/src/docs/_misc/endpoint.md +5 -3
  604. package/docs/src/docs/search/docs-search.json +540 -15
  605. package/docs/src/tsconfig.json +377 -353
  606. package/gitlab/job_github_mirror.sh +39 -0
  607. package/index.html +0 -1
  608. package/package.json +1084 -356
  609. package/public/docs-mock-api-sw.js +19 -0
  610. package/public/docs-mock-api-sw.js.map +2 -2
  611. package/scripts/github-export.mjs +150 -0
  612. package/scripts/post-build.mjs +43 -0
  613. package/scripts/pre-build.mjs +32 -4
  614. package/scripts/pre-publish.mjs +2 -0
  615. package/src/core/components/functional/example/example.ts +3 -3
  616. package/src/core/components/functional/queue/queue.ts +2 -2
  617. package/src/core/components/ui/icon/icon.ts +17 -2
  618. package/src/core/components/ui/menu/menu.ts +12 -3
  619. package/src/core/components/ui/modal/modal.ts +1 -1
  620. package/src/core/decorators/Subscriber.ts +1 -0
  621. package/src/core/decorators/api.post.spec.ts +293 -0
  622. package/src/core/decorators/api.spec.ts +6 -6
  623. package/src/core/decorators/api.ts +641 -12
  624. package/src/core/decorators/subscriber/ancestorAttribute.spec.ts +197 -0
  625. package/src/core/decorators/subscriber/ancestorAttribute.ts +40 -7
  626. package/src/core/decorators/subscriber/autoSubscribe.ts +7 -3
  627. package/src/core/decorators/subscriber/bind.ts +13 -5
  628. package/src/core/decorators/subscriber/dynamicPath.spec.ts +53 -0
  629. package/src/core/decorators/subscriber/dynamicPath.ts +23 -1
  630. package/src/core/decorators/subscriber/handle.ts +3 -1
  631. package/src/core/decorators/subscriber/onAssign.ts +10 -2
  632. package/src/core/decorators/subscriber/publish.ts +12 -2
  633. package/src/core/mixins/Fetcher.ts +12 -6
  634. package/src/core/utils/AncestorAttributeObserver.ts +199 -0
  635. package/src/core/utils/HTML.ts +3 -11
  636. package/src/core/utils/PublisherProxy.ts +123 -48
  637. package/src/core/utils/api.ts +82 -13
  638. package/src/core/utils/dpOptions.spec.ts +56 -0
  639. package/src/core/utils/endpoint.ts +3 -3
  640. package/src/css.d.ts +19 -0
  641. package/src/decorators.ts +17 -1
  642. package/src/directives.ts +3 -2
  643. package/src/docs/_core-concept/dataFlow.md +9 -3
  644. package/src/docs/_decorators/ancestor-attribute.md +56 -8
  645. package/src/docs/_decorators/bind.md +2 -2
  646. package/src/docs/_decorators/get.md +13 -4
  647. package/src/docs/_decorators/handle.md +5 -1
  648. package/src/docs/_decorators/on-assign.md +2 -0
  649. package/src/docs/_decorators/patch.md +45 -0
  650. package/src/docs/_decorators/post.md +93 -0
  651. package/src/docs/_decorators/publish.md +1 -1
  652. package/src/docs/_decorators/put.md +43 -0
  653. package/src/docs/_decorators/subscribe.md +4 -1
  654. package/src/docs/_directives/sub.md +1 -1
  655. package/src/docs/_getting-started/my-first-component.md +1 -1
  656. package/src/docs/_misc/api-configuration.md +3 -1
  657. package/src/docs/_misc/dataProviderKey.md +2 -2
  658. package/src/docs/_misc/dynamic-path.md +71 -0
  659. package/src/docs/_misc/endpoint.md +5 -3
  660. package/src/docs/components/docs-demo-sources.ts +115 -4
  661. package/src/docs/components/docs-lit-demo-raw.ts +2 -26
  662. package/src/docs/components/docs-lit-demo.ts +9 -42
  663. package/src/docs/components/docs-source-excerpt.ts +53 -0
  664. package/src/docs/components/docs-source-link.ts +24 -8
  665. package/src/docs/components/docs-source-raw.ts +34 -0
  666. package/src/docs/example/decorators-demo-geo.ts +2 -2
  667. package/src/docs/example/decorators-demo-post.ts +249 -0
  668. package/src/docs/example/decorators-demo-subscribe-publish-get-demos.ts +5 -5
  669. package/src/docs/example/decorators-demo.ts +165 -8
  670. package/src/docs/example/docs-api-config-demos.ts +5 -5
  671. package/src/docs/mock-api/router.ts +20 -0
  672. package/src/docs/navigation/navigation.ts +16 -0
  673. package/src/docs/search/docs-search.json +602 -17
  674. package/src/tsconfig.declarations.json +22 -0
  675. package/src/tsconfig.emit.json +23 -0
  676. package/src/tsconfig.json +3 -261
  677. package/src/tsconfig.tsbuildinfo +1 -1
  678. package/vite.config.mts +1 -1
  679. package/docs/assets/index-CwtPzTFq.js +0 -7508
@@ -0,0 +1,56 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { DataProviderKey } from "./dataProviderKey";
3
+ import { dp, get, mirrorDp } from "./PublisherProxy";
4
+
5
+ describe("dp() options", () => {
6
+ const storageKey = new DataProviderKey<{ label: string }>(
7
+ "dpOptionsSpecStorage",
8
+ );
9
+
10
+ it("active le localStorage via le 2e argument options", () => {
11
+ const publisher = dp(storageKey, { localStorageMode: "enabled" });
12
+ expect((publisher as any)._is_savable_).toBe(true);
13
+ });
14
+
15
+ it("reste désactivé sans option", () => {
16
+ const plainKey = new DataProviderKey<{ label: string }>(
17
+ "dpOptionsSpecPlain",
18
+ );
19
+ const publisher = dp(plainKey);
20
+ expect((publisher as any)._is_savable_).toBe(false);
21
+ });
22
+ });
23
+
24
+ describe("mirrorDp()", () => {
25
+ it("alias une clé legacy vers un publisher déjà résolu (appState)", () => {
26
+ type App = { scan: { code: string } };
27
+ const appKey = new DataProviderKey<App>("mirrorDpSpecApp");
28
+ const scanKey = new DataProviderKey<{ code: string }>("mirrorDpSpecScan");
29
+
30
+ const appState = dp(appKey);
31
+ appState.scan.code.set("ABC");
32
+
33
+ mirrorDp(scanKey, appState.scan);
34
+
35
+ expect(get(scanKey)).toEqual({ code: "ABC" });
36
+ dp(scanKey).code.set("XYZ");
37
+ expect(appState.scan.code.get()).toBe("XYZ");
38
+ });
39
+
40
+ it("accepte des chemins string", () => {
41
+ type App = { legacyApi: { total: number } };
42
+ const appKey = new DataProviderKey<App>("mirrorDpSpecAppString");
43
+ const legacyKey = new DataProviderKey<{ total: number }>(
44
+ "mirrorDpSpecLegacyApi",
45
+ );
46
+
47
+ const appState = dp(appKey);
48
+ appState.legacyApi.total.set(12);
49
+
50
+ mirrorDp(legacyKey.path, `${appKey.path}.legacyApi`);
51
+
52
+ expect(get(legacyKey)).toEqual({ total: 12 });
53
+ dp(legacyKey).total.set(99);
54
+ expect(appState.legacyApi.total.get()).toBe(99);
55
+ });
56
+ });
@@ -1,4 +1,4 @@
1
- import { ApiGetResult } from "./api";
1
+ import { ApiResult } from "./api";
2
2
  import { DataProviderKey } from "./dataProviderKey";
3
3
 
4
4
  /**
@@ -25,8 +25,8 @@ export class Endpoint<T, U = any> {
25
25
  }
26
26
 
27
27
  /** Même path qu’`Endpoint` ; le 2ᵉ générique `U` est propagé sur la clé publisher. */
28
- getDataProviderKey(): DataProviderKey<ApiGetResult<T>, U> {
29
- return new DataProviderKey<ApiGetResult<T>, U>(this.path);
28
+ getDataProviderKey(): DataProviderKey<ApiResult<T>, U> {
29
+ return new DataProviderKey<ApiResult<T>, U>(this.path);
30
30
  }
31
31
 
32
32
  /**
package/src/css.d.ts ADDED
@@ -0,0 +1,19 @@
1
+ declare module "*.css" {
2
+ const css: import("lit").CSSResult;
3
+ export default css;
4
+ }
5
+
6
+ declare module "*.css?inline" {
7
+ const css: string;
8
+ export default css;
9
+ }
10
+
11
+ declare module "*.scss" {
12
+ const css: import("lit").CSSResult;
13
+ export default css;
14
+ }
15
+
16
+ declare module "*.scss?inline" {
17
+ const css: string;
18
+ export default css;
19
+ }
package/src/decorators.ts CHANGED
@@ -16,12 +16,25 @@ export const ancestorAttribute = mySubscriber.ancestorAttribute;
16
16
  export const autoSubscribe = mySubscriber.autoSubscribe;
17
17
  export const autoFill = mySubscriber.autoFill;
18
18
  export const get = api.get;
19
+ export const post = api.post;
20
+ export const put = api.put;
21
+ export const patch = api.patch;
19
22
  export {
20
23
  DataProviderKey,
21
24
  type DataProviderKeyHost,
22
25
  } from "./core/utils/dataProviderKey";
23
26
  export { Endpoint };
24
- export type { ApiGetResult } from "./core/utils/api";
27
+ export type { ApiResult, ApiGetResult } from "./core/utils/api";
28
+ export type {
29
+ ApiSendOptions,
30
+ GetOptions,
31
+ PostOptions,
32
+ PutOptions,
33
+ PatchOptions,
34
+ } from "./core/decorators/api";
35
+ export type { DynamicPathOptions } from "./core/decorators/subscriber/dynamicPath";
36
+ export type { BindOptions } from "./core/decorators/subscriber/bind";
37
+ export type { PublishOptions } from "./core/decorators/subscriber/publish";
25
38
  export const awaitConnectedAncestors = lifecycle.awaitConnectedAncestors;
26
39
  export const dispatchConnectedEvent = lifecycle.dispatchConnectedEvent;
27
40
  export const CONNECTED = lifecycle.CONNECTED;
@@ -41,4 +54,7 @@ window["concorde-decorator-subscriber"] = {
41
54
  autoSubscribe: mySubscriber.autoSubscribe,
42
55
  autoFill: mySubscriber.autoFill,
43
56
  get: api.get,
57
+ post: api.post,
58
+ put: api.put,
59
+ patch: api.patch,
44
60
  };
package/src/directives.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import * as directives from "@supersoniks/concorde/core/directives/DataProvider";
2
2
  import {dp as pubDp, dataProvider as pubDataProvider, get as pubGet, set as pubSet} from "@supersoniks/concorde/core/utils/PublisherProxy";
3
+ import type {DirectiveResult} from "lit/async-directive.js";
3
4
 
4
5
  import {ConcordeWindow} from "./core/_types/types";
5
6
  /**
@@ -10,8 +11,8 @@ export const dp = pubDp;
10
11
  * @deprecated @see pubDataProvider
11
12
  */
12
13
  export const dataProvider = pubDataProvider;
13
- export const subscribe = directives.subscribe;
14
- export const sub = directives.sub;
14
+ export const subscribe = directives.subscribe as DirectiveResult;
15
+ export const sub = directives.sub as DirectiveResult;
15
16
 
16
17
  /**
17
18
  * @deprecated @see pubGet
@@ -13,6 +13,8 @@ Recommended patterns for new Concorde apps (Lit + TypeScript). Under the hood, d
13
13
  | Write from component state | `@publish` |
14
14
  | React to assignments | `@handle` |
15
15
  | HTTP GET | `@get` + `Endpoint`, or `sonic-list` / `sonic-queue` with `fetch` |
16
+ | HTTP POST (body from store) | `@post` + `Endpoint` + body `DataProviderKey` |
17
+ | HTTP PUT / PATCH (body from store) | `@put` / `@patch` — same model as `@post` |
16
18
  | Forms | `formDataProvider` + `name` on fields |
17
19
  | Offline doc demos | `serviceURL="/docs-mock-api"` — [Local API demos](#docs/_misc/docs-mock-api.md/docs-mock-api) |
18
20
 
@@ -33,7 +35,7 @@ get(cartKey);
33
35
  </template>
34
36
  </sonic-code>
35
37
 
36
- Dynamic paths (`users.${userId}`) → decorators or `sub()` — not `get("users.${id}")` in imperative code.
38
+ Dynamic paths (`users.${userId}`) → decorators or `sub()` — not `get("users.${id}")` in imperative code. Resolution rules: [Dynamic path placeholders](#docs/_misc/dynamic-path.md/dynamic-path).
37
39
 
38
40
  [DataProviderKey](#docs/_misc/dataProviderKey.md/dataProviderKey)
39
41
 
@@ -45,13 +47,17 @@ Dynamic paths (`users.${userId}`) → decorators or `sub()` — not `get("users.
45
47
  | `@publish` | Push property writes to store |
46
48
  | `@handle` | Method called on assignment |
47
49
  | `@ancestorAttribute` | Copy ancestor HTML attribute onto property |
48
- | `@get` | HTTP GET into `ApiGetResult&lt;T&gt;` |
50
+ | `@get` | HTTP GET into `ApiResult&lt;T&gt;` |
51
+ | `@post` | HTTP POST into `ApiResult&lt;T&gt;` (body from a publisher) |
52
+ | `@put` / `@patch` | HTTP PUT / PATCH into `ApiResult&lt;T&gt;` |
49
53
 
50
54
  Walkthrough: [My first component](#docs/_getting-started/my-first-component.md/my-first-component)
51
55
 
52
56
  ## HTTP and lists
53
57
 
54
- - [@get](#docs/_decorators/get.md/get) — single request on a component
58
+ - [@get](#docs/_decorators/get.md/get) — single GET on a component
59
+ - [@post](#docs/_decorators/post.md/post) — POST with body read from a `DataProviderKey`
60
+ - [@put](#docs/_decorators/put.md/put) · [@patch](#docs/_decorators/patch.md/patch) — PUT / PATCH (same options as `@post`)
55
61
  - [List](#core/components/functional/list/list.md/list) — `fetch` + `key="data"` + `/docs-mock-api/api/users`
56
62
  - [Queue](#core/components/functional/queue/queue.md/queue) — lazy `offset=$offset&per_page=$limit` + optional `dataFilterProvider` (form → query)
57
63
 
@@ -18,7 +18,7 @@ import { ancestorAttribute } from "@supersoniks/concorde/decorators";
18
18
 
19
19
  ### Basic example
20
20
 
21
- The component reads `dataProvider` and `testAttribute` from its ancestor wrapper.
21
+ The component reads `dataProvider` and `testAttribute` from its ancestor wrapper. By default (`dynamic: false`), values are read once at connect.
22
22
 
23
23
  <sonic-code language="typescript">
24
24
  <template>
@@ -36,10 +36,8 @@ export class DemoAncestorAttribute extends LitElement {
36
36
 
37
37
  render() {
38
38
  return html`
39
- <section>
40
- <p>dataProvider: <strong>${this.dataProvider || "null"}</strong></p>
41
- <p>testAttribute: <strong>${this.testAttribute || "null"}</strong></p>
42
- </section>
39
+ <p>dataProvider: <strong>${this.dataProvider ?? "null"}</strong></p>
40
+ <p>testAttribute: <strong>${this.testAttribute ?? "null"}</strong></p>
43
41
  `;
44
42
  }
45
43
  }
@@ -55,7 +53,6 @@ export class DemoAncestorAttribute extends LitElement {
55
53
  </template>
56
54
  </sonic-code>
57
55
 
58
-
59
56
  ## Use cases
60
57
 
61
58
  This decorator is particularly useful for:
@@ -68,9 +65,60 @@ This decorator is particularly useful for:
68
65
  ## Behavior
69
66
 
70
67
  - The search starts from the current element and traverses up the DOM tree
71
- - If the attribute is not found, the property will be assigned `null`
72
68
  - The injection happens automatically at the time of `connectedCallback`
73
- - The value is not reactive: it is only updated once when the element is connected to the DOM
69
+ - By default (`dynamic: false`), the value is read once at connect time and is not updated afterward
70
+ - With `{ dynamic: true }`, the property stays in sync when:
71
+ - an ancestor **changes** the attribute value
72
+ - a **closer** ancestor **gains** the attribute (that value wins)
73
+ - the **nearest** ancestor **loses** the attribute (falls back to the next one up, or `null`)
74
+ - When `dynamic` is enabled, updates also propagate to `@subscribe` / `@bind` paths that depend on the decorated property (e.g. `${dataProvider}`)
75
+
76
+ ### Dynamic mode
77
+
78
+ Use `{ dynamic: true }` when the decorated property must follow the DOM. With Lit, add **`@state()`** on the same property so template updates are visible when the observer assigns a new value.
79
+
80
+ The live demo below shows only the resolved attribute value — no store, no reparenting.
81
+
82
+ <sonic-code language="typescript">
83
+ <template>
84
+ @customElement("demo-ancestor-attribute-dynamic")
85
+ export class DemoAncestorAttributeDynamic extends LitElement {
86
+ @ancestorAttribute("dataProvider", { dynamic: true })
87
+ @state()
88
+ dataProvider: string | null = null;
89
+
90
+ render() {
91
+ return html`
92
+ &lt;p&gt;Nearest ancestor: &lt;strong&gt;${this.dataProvider ?? "null"}&lt;/strong&gt;&lt;/p&gt;
93
+ `;
94
+ }
95
+ }
96
+ </template>
97
+ </sonic-code>
98
+
99
+ Try in the demo:
100
+
101
+ - **parent-a** / **parent-b** — change the value on the direct parent
102
+ - **Remove parent attr** — falls back to **outer**
103
+ - **Add closer** — a wrapper with `from-closer` becomes the nearest ancestor
104
+ - **Remove closer** — back to parent or outer
105
+ - **Remove outer attr** — if parent has no attribute either, the child shows `null`
106
+
107
+ <sonic-code>
108
+ <template>
109
+ <docs-demo-sources for="demo-ancestor-attribute-dynamic-section"></docs-demo-sources>
110
+ <demo-ancestor-attribute-dynamic-section></demo-ancestor-attribute-dynamic-section>
111
+ </template>
112
+ </sonic-code>
113
+
114
+ Static mode (default) — read once at connect, no observer:
115
+
116
+ <sonic-code language="typescript">
117
+ <template>
118
+ @ancestorAttribute("dataProvider")
119
+ dataProvider: string | null = null;
120
+ </template>
121
+ </sonic-code>
74
122
 
75
123
  ## Notes
76
124
 
@@ -4,7 +4,7 @@ Binds a class property to a path in a publisher. The property updates when publi
4
4
 
5
5
  For Lit re-renders, also add `@state()` on the same property.
6
6
 
7
- **See also:** [@subscribe](#docs/_decorators/subscribe.md/subscribe), [@handle](#docs/_decorators/handle.md/handle), [@publish](#docs/_decorators/publish.md/publish), [@get](#docs/_decorators/get.md/get).
7
+ **See also:** [@subscribe](#docs/_decorators/subscribe.md/subscribe), [@handle](#docs/_decorators/handle.md/handle), [@publish](#docs/_decorators/publish.md/publish), [@get](#docs/_decorators/get.md/get), [@post](#docs/_decorators/post.md/post), [@put](#docs/_decorators/put.md/put), [@patch](#docs/_decorators/patch.md/patch).
8
8
 
9
9
  ## Principle
10
10
 
@@ -144,7 +144,7 @@ export class DemoBindReflect extends LitElement {
144
144
 
145
145
  ### Dynamic paths
146
146
 
147
- Use `${prop}` or `${this.prop}` inside a **normal string literal** (not a JS template literal with backticks). `@bind` re-subscribes when a reactive dependency changes.
147
+ Use `${prop}` or `${this.prop}` inside a **normal string literal** (not a JS template literal with backticks). `@bind` re-subscribes when a reactive dependency changes. While a placeholder is `null`/`undefined`, the bind is inactive; optional `{ skipEmptyPlaceholder: true }` also waits on `""`. See [Dynamic path placeholders](#docs/_misc/dynamic-path.md/dynamic-path).
148
148
 
149
149
  > Properties referenced in the pattern must be reactive (`@property`, etc.) or you must call `requestUpdate` manually.
150
150
 
@@ -1,14 +1,18 @@
1
1
  # @get
2
2
 
3
- Loads data through [`API.getDetailed`](../../core/utils/api.ts). The decorated property is **`ApiGetResult<T> | null`**: `request`, `response` (or `null` for `dataProvider(...)` resolution without HTTP), and typed `result`.
3
+ Loads data through [`API.getDetailed`](../../core/utils/api.ts). The decorated property is **`ApiResult<T> | null`**: `request`, `response` (or `null` for `dataProvider(...)` resolution without HTTP), and typed `result`.
4
4
 
5
- Pass an [`Endpoint<T>`](#docs/_misc/endpoint.md/endpoint) as the first argument. Import `get` and `ApiGetResult` from `@supersoniks/concorde/decorators`, and `Endpoint` from `@supersoniks/concorde/utils/endpoint`.
5
+ Pass an [`Endpoint<T>`](#docs/_misc/endpoint.md/endpoint) as the first argument. Import `get` and `ApiResult` from `@supersoniks/concorde/decorators`, and `Endpoint` from `@supersoniks/concorde/utils/endpoint`.
6
6
 
7
7
  ## Configuration
8
8
 
9
9
  - **Default:** `HTML.getApiConfiguration(host)` (ancestor `serviceURL`, etc.).
10
10
  - **Second argument:** `DataProviderKey<APIConfiguration>` — config is read from the publisher at the resolved path; internal mutations trigger another GET. See [API configuration](#docs/_misc/api-configuration.md/api-configuration) for mock demos.
11
11
 
12
+ ## Dynamic path
13
+
14
+ `${prop}` on the endpoint or config key is resolved on the host. While a placeholder is `null` or `undefined`, no GET runs. Optional `skipEmptyPlaceholder: true` also blocks `""` (empty string only). Details: [Dynamic path placeholders](#docs/_misc/dynamic-path.md/dynamic-path).
15
+
12
16
  ## When the GET runs again
13
17
 
14
18
  - A referenced Lit property changes (endpoint path and/or config key contains `${...}`).
@@ -18,7 +22,7 @@ Pass an [`Endpoint<T>`](#docs/_misc/endpoint.md/endpoint) as the first argument.
18
22
 
19
23
  <sonic-code language="typescript">
20
24
  <template>
21
- import { get, type ApiGetResult } from "@supersoniks/concorde/decorators";
25
+ import { get, type ApiResult } from "@supersoniks/concorde/decorators";
22
26
  import { Endpoint } from "@supersoniks/concorde/utils/endpoint";
23
27
  import { DataProviderKey } from "@supersoniks/concorde/dataProviderKey";
24
28
  </template>
@@ -32,7 +36,7 @@ Same demo service as [`sonic-queue`](../../core/components/functional/queue/queu
32
36
  <template>
33
37
  @get(new Endpoint<User>("users/${userId}"))
34
38
  @state()
35
- payload: ApiGetResult<User> | null = null;
39
+ payload: ApiResult<User> | null = null;
36
40
  </template>
37
41
  </sonic-code>
38
42
 
@@ -66,3 +70,8 @@ Scoped `@get` with `@publish` / `@subscribe` on the payload (see [@publish](#doc
66
70
  </sonic-code>
67
71
 
68
72
  Stale responses are ignored if the path or generation changed before the request finished.
73
+
74
+ ## See also
75
+
76
+ - [Dynamic path placeholders](#docs/_misc/dynamic-path.md/dynamic-path)
77
+ - [@post](#docs/_decorators/post.md/post) · [@put](#docs/_decorators/put.md/put) · [@patch](#docs/_decorators/patch.md/patch) — send decorators (same path rules)
@@ -161,6 +161,10 @@ onProfile(profile: Profile) {
161
161
 
162
162
  > Options can be combined, e.g. `@handle(a, b, { waitForAllDefined: true, skip: [Skip.Nullish] })`. For any **arbitrary** validation on a specific value, just guard inside the method (`if (!isValid(v)) return;`) — that is exactly what an `accept`-style predicate would do, since `@handle` only runs your method.
163
163
 
164
+ ### `skipEmptyPlaceholder`
165
+
166
+ On a **dynamic key path** (`"items.${itemId}"`), if `true`, a placeholder resolved to `''` is treated as not ready (no subscription) — **empty string only**, not `0` or `false`. See [Dynamic path placeholders](#docs/_misc/dynamic-path.md/dynamic-path).
167
+
164
168
  ## Highlights
165
169
 
166
170
  - Strict typing: the method receives one argument per key, in order.
@@ -168,4 +172,4 @@ onProfile(profile: Profile) {
168
172
  - By default the method runs on **every** assignment, even with `null` / `undefined` (unlike `@onAssign`, which waits for all values). Opt back into that behavior with `waitForAllDefined`.
169
173
  - `skip` filters out values by **named category** (e.g. `[Skip.Nullish, Skip.EmptyObject]`); for arbitrary checks on a specific value, guard inside the method.
170
174
 
171
- See also [DataProviderKey](#docs/_misc/dataProviderKey.md/dataProviderKey).
175
+ See also [DataProviderKey](#docs/_misc/dataProviderKey.md/dataProviderKey) and [Dynamic path placeholders](#docs/_misc/dynamic-path.md/dynamic-path).
@@ -128,6 +128,8 @@ Each placeholder is replaced at runtime with the current value of the correspond
128
128
  - removes the previous subscriptions before attaching the new ones,
129
129
  - observe the changes inside `willUpdate(changedProperties)` so nothing touches the getters/setters.
130
130
 
131
+ While a placeholder is `null`/`undefined`, subscriptions are detached. Optional `skipEmptyPlaceholder` on [@handle](#docs/_decorators/handle.md/handle) (typed replacement). Details: [Dynamic path placeholders](#docs/_misc/dynamic-path.md/dynamic-path).
132
+
131
133
 
132
134
  <sonic-code language="typescript">
133
135
  <template>
@@ -0,0 +1,45 @@
1
+ # @patch
2
+
3
+ Sends data through [`API.patchDetailed`](../../core/utils/api.ts). Same model as [@post](#docs/_decorators/post.md/post): decorated property is **`ApiResult<T> | null`** (`request`, `response`, `result`).
4
+
5
+ Pass an [`Endpoint<T>`](#docs/_misc/endpoint.md/endpoint) and a `DataProviderKey` for the **request body**. Import `patch` and `ApiResult` from `@supersoniks/concorde/decorators`.
6
+
7
+ ## Configuration
8
+
9
+ Same as [@post](#docs/_decorators/post.md/post) / [@get](#docs/_decorators/get.md/get): scoped `HTML.getApiConfiguration(host)` or `DataProviderKey<APIConfiguration>` as third argument.
10
+
11
+ ## Options (`PatchOptions`)
12
+
13
+ Same shape as `PostOptions` on [@post](#docs/_decorators/post.md/post) (`ApiSendOptions`): `refetchEveryMs`, `skipIfBodyMissing`, `autoPostOnBodyMutation`, `triggerKey`, `skipEmptyPlaceholder`. See [Dynamic path placeholders](#docs/_misc/dynamic-path.md/dynamic-path) for `${sessionId}` and empty-string behaviour.
14
+
15
+ ## Import
16
+
17
+ <sonic-code language="typescript">
18
+ <template>
19
+ import { patch, type ApiResult } from "@supersoniks/concorde/decorators";
20
+ import { Endpoint } from "@supersoniks/concorde/utils/endpoint";
21
+ import { DataProviderKey } from "@supersoniks/concorde/dataProviderKey";
22
+ </template>
23
+ </sonic-code>
24
+
25
+ ## Example
26
+
27
+ <sonic-code language="typescript">
28
+ <template>
29
+ const patchBodyKey = new DataProviderKey&lt;Partial&lt;Resource&gt;&gt;("resourcePatch");
30
+
31
+ @patch(
32
+ new Endpoint&lt;Resource, { resourceId: string }&gt;("resources/${resourceId}"),
33
+ patchBodyKey,
34
+ { skipEmptyPlaceholder: true },
35
+ )
36
+ @state()
37
+ payload?: ApiResult&lt;Resource&gt; | null;
38
+ </template>
39
+ </sonic-code>
40
+
41
+ ## See also
42
+
43
+ - [@post](#docs/_decorators/post.md/post) — POST (live demos)
44
+ - [@put](#docs/_decorators/put.md/put) — full replacement (PUT)
45
+ - [Dynamic path placeholders](#docs/_misc/dynamic-path.md/dynamic-path)
@@ -0,0 +1,93 @@
1
+ # @post
2
+
3
+ Sends data through [`API.postDetailed`](../../core/utils/api.ts). The decorated property is **`ApiResult<T> | null`**: `request`, `response`, and typed `result`.
4
+
5
+ Pass an [`Endpoint<T>`](#docs/_misc/endpoint.md/endpoint) as the first argument and a `DataProviderKey` for the **request body** as the second. Import `post` and `ApiResult` from `@supersoniks/concorde/decorators`, and `Endpoint` from `@supersoniks/concorde/utils/endpoint`.
6
+
7
+ ## Configuration
8
+
9
+ Same as [@get](#docs/_decorators/get.md/get): scoped `HTML.getApiConfiguration(host)` by default, or `DataProviderKey<APIConfiguration>` as third argument. See [API configuration](#docs/_misc/api-configuration.md/api-configuration) for mock demos.
10
+
11
+ ## Optional `PostOptions` (third or fourth argument)
12
+
13
+ | Option | Description |
14
+ |--------|-------------|
15
+ | `refetchEveryMs` | Re-post on an interval (ms). |
16
+ | `skipIfBodyMissing` | Skip when body publisher is `null`/`undefined` (default: `true`). |
17
+ | `autoPostOnBodyMutation` | Re-post when the body publisher mutates (default: `true`). `false` = manual via `triggerKey.invalidate()`. |
18
+ | `skipEmptyPlaceholder` | If `true`, a placeholder resolved to `''` blocks the request (empty string only — not `0` or `false`). See [Dynamic paths](#docs/_misc/dynamic-path.md/dynamic-path). |
19
+ | `triggerKey` | `DataProviderKey` — `invalidate()` re-runs the POST with the current body. |
20
+
21
+ ## When the POST runs again
22
+
23
+ - Body publisher `onInternalMutation` when `autoPostOnBodyMutation` is `true` (default). Plusieurs mutations synchrones dans la même frame sont regroupées en **un seul POST** via `requestAnimationFrame`.
24
+ - Endpoint path dependency changes (`${sessionId}` on the host).
25
+ - Configuration publisher mutation.
26
+ - `triggerKey` publisher `invalidate()`.
27
+ - `refetchEveryMs` timer (if set).
28
+
29
+ ## Import
30
+
31
+ <sonic-code language="typescript">
32
+ <template>
33
+ import { post, publish, type ApiResult } from "@supersoniks/concorde/decorators";
34
+ import { Endpoint } from "@supersoniks/concorde/utils/endpoint";
35
+ import { DataProviderKey } from "@supersoniks/concorde/dataProviderKey";
36
+ </template>
37
+ </sonic-code>
38
+
39
+ ## Minimal example
40
+
41
+ Mock service: `POST /docs-mock-api/api/register` (same route as [`sonic-submit`](#core/components/functional/submit/submit.md/submit) demos). Publisher setup lives in `decorators-demo-post.ts`.
42
+
43
+ <sonic-code language="typescript">
44
+ <template>
45
+ const syncRequest = new DataProviderKey&lt;SyncRequest&gt;("syncRequest");
46
+ const syncTrigger = new DataProviderKey&lt;number&gt;("syncTrigger");
47
+
48
+ @post(
49
+ new Endpoint&lt;SyncResponse, { sessionId: string }&gt;("sessions/${sessionId}/sync"),
50
+ syncRequest,
51
+ { triggerKey: syncTrigger },
52
+ )
53
+ @state()
54
+ payload?: ApiResult&lt;SyncResponse&gt; | null;
55
+ </template>
56
+ </sonic-code>
57
+
58
+ ## Live demos
59
+
60
+ <sonic-code>
61
+ <template>
62
+ <docs-demo-sources for="demo-api-post"></docs-demo-sources>
63
+ <demo-api-post></demo-api-post>
64
+ </template>
65
+ </sonic-code>
66
+
67
+ Dynamic endpoint path — changing `sessionId` on the host re-runs the POST (`POST /docs-mock-api/api/sessions/{id}/sync`):
68
+
69
+ <sonic-code>
70
+ <template>
71
+ <docs-demo-sources for="demo-api-post-dynamic"></docs-demo-sources>
72
+ <demo-api-post-dynamic></demo-api-post-dynamic>
73
+ </template>
74
+ </sonic-code>
75
+
76
+ `@post` + `@publish` on the same property (see [@publish](#docs/_decorators/publish.md/publish)):
77
+
78
+ <sonic-code>
79
+ <template>
80
+ <docs-demo-sources for="demo-api-post-publish"></docs-demo-sources>
81
+ <demo-api-post-publish></demo-api-post-publish>
82
+ </template>
83
+ </sonic-code>
84
+
85
+ Stale responses are ignored if the path or generation changed before the request finished.
86
+
87
+ **Note:** plusieurs composants `@post` sur la même page qui partagent le même `bodyKey` enverront chacun une requête à chaque mutation du body — utiliser une clé par composant (voir les deux démos live ci-dessus).
88
+
89
+ Path placeholders (`${sessionId}`, …): [Dynamic path placeholders](#docs/_misc/dynamic-path.md/dynamic-path).
90
+
91
+ ## See also
92
+
93
+ - [@put](#docs/_decorators/put.md/put) · [@patch](#docs/_decorators/patch.md/patch) — same decorator model, `PUT` / `PATCH` via `putDetailed` / `patchDetailed`
@@ -52,4 +52,4 @@ export class DemoPublish extends LitElement {
52
52
  </template>
53
53
  </sonic-code>
54
54
 
55
- Dynamic paths use the same placeholder rules as `@bind` / `@subscribe`.
55
+ Dynamic paths use the same placeholder rules as `@bind` / `@subscribe`. Resolution and `skipEmptyPlaceholder`: [Dynamic path placeholders](#docs/_misc/dynamic-path.md/dynamic-path).
@@ -0,0 +1,43 @@
1
+ # @put
2
+
3
+ Sends data through [`API.putDetailed`](../../core/utils/api.ts). Same model as [@post](#docs/_decorators/post.md/post): decorated property is **`ApiResult<T> | null`** (`request`, `response`, `result`).
4
+
5
+ Pass an [`Endpoint<T>`](#docs/_misc/endpoint.md/endpoint) and a `DataProviderKey` for the **request body**. Import `put` and `ApiResult` from `@supersoniks/concorde/decorators`.
6
+
7
+ ## Configuration
8
+
9
+ Same as [@post](#docs/_decorators/post.md/post) / [@get](#docs/_decorators/get.md/get): scoped `HTML.getApiConfiguration(host)` or `DataProviderKey<APIConfiguration>` as third argument.
10
+
11
+ ## Options (`PutOptions`)
12
+
13
+ Same shape as `PostOptions` on [@post](#docs/_decorators/post.md/post) (`ApiSendOptions`): `refetchEveryMs`, `skipIfBodyMissing`, `autoPostOnBodyMutation`, `triggerKey`, `skipEmptyPlaceholder`. See [Dynamic path placeholders](#docs/_misc/dynamic-path.md/dynamic-path) for `${sessionId}` and empty-string behaviour.
14
+
15
+ ## Import
16
+
17
+ <sonic-code language="typescript">
18
+ <template>
19
+ import { put, type ApiResult } from "@supersoniks/concorde/decorators";
20
+ import { Endpoint } from "@supersoniks/concorde/utils/endpoint";
21
+ import { DataProviderKey } from "@supersoniks/concorde/dataProviderKey";
22
+ </template>
23
+ </sonic-code>
24
+
25
+ ## Example
26
+
27
+ <sonic-code language="typescript">
28
+ <template>
29
+ const bodyKey = new DataProviderKey&lt;UpdatePayload&gt;("resourceBody");
30
+
31
+ @put(new Endpoint&lt;Resource, { resourceId: string }&gt;("resources/${resourceId}"), bodyKey)
32
+ @state()
33
+ payload?: ApiResult&lt;Resource&gt; | null;
34
+ </template>
35
+ </sonic-code>
36
+
37
+ Changing `resourceId` on the host re-runs the PUT when the path becomes ready — see [Dynamic path placeholders](#docs/_misc/dynamic-path.md/dynamic-path).
38
+
39
+ ## See also
40
+
41
+ - [@post](#docs/_decorators/post.md/post) — POST (live demos, polling, `@publish`)
42
+ - [@patch](#docs/_decorators/patch.md/patch) — partial update (PATCH)
43
+ - [Endpoint](#docs/_misc/endpoint.md/endpoint) · [API configuration](#docs/_misc/api-configuration.md/api-configuration)
@@ -45,7 +45,9 @@ cart: { items: string[] } | null = null;
45
45
 
46
46
  ## Dynamic path and scope
47
47
 
48
- Placeholders `${prop}` in the key string are resolved from **properties on the same component**. Declare them in the key’s second generic so TypeScript expects them on the host:
48
+ Placeholders `${prop}` in the key string are resolved from **properties on the same component**. While a value is `null`/`undefined`, the subscription is inactive; optional `{ skipEmptyPlaceholder: true }` also waits on `""`. Full rules: [Dynamic path placeholders](#docs/_misc/dynamic-path.md/dynamic-path).
49
+
50
+ Declare dynamic props in the key’s second generic so TypeScript expects them on the host:
49
51
 
50
52
  <sonic-code language="typescript">
51
53
  <template>
@@ -94,4 +96,5 @@ user: User | null = null;
94
96
 
95
97
  - [Data flow](#docs/_core-concept/dataFlow.md/dataFlow) — overview
96
98
  - [DataProviderKey](#docs/_misc/dataProviderKey.md/dataProviderKey) — paths and host generics
99
+ - [Dynamic path placeholders](#docs/_misc/dynamic-path.md/dynamic-path) — `${prop}` resolution and `skipEmptyPlaceholder`
97
100
  - [sub()](#docs/_directives/sub.md/sub) — same paths inside `html` templates
@@ -37,7 +37,7 @@ render() {
37
37
 
38
38
  ## Dynamic DataProviderKey (`${prop}`)
39
39
 
40
- Like `@subscribe`: the path is resolved on the template **host component**; the directive re-subscribes when observed props change.
40
+ Like `@subscribe`: the path is resolved on the template **host component**; the directive re-subscribes when observed props change. Placeholder values (`null`, `""`, `0`, …): [Dynamic path placeholders](#docs/_misc/dynamic-path.md/dynamic-path) (`skipEmptyPlaceholder` not available on `sub()` yet).
41
41
 
42
42
  <sonic-code language="typescript">
43
43
  <template>
@@ -81,7 +81,7 @@ export const docsUserRowKey = new DataProviderKey&lt;
81
81
  </template>
82
82
  </sonic-code>
83
83
 
84
- The second generic (`{ dataProvider: string | null }`) lists what the host must expose so `"${dataProvider}"` can be resolved. See [DataProviderKey](#docs/_misc/dataProviderKey.md/dataProviderKey).
84
+ The second generic (`{ dataProvider: string | null }`) lists what the host must expose so `"${dataProvider}"` can be resolved. See [DataProviderKey](#docs/_misc/dataProviderKey.md/dataProviderKey) and [Dynamic path placeholders](#docs/_misc/dynamic-path.md/dynamic-path).
85
85
 
86
86
  ### Scope — which store segment applies
87
87
 
@@ -1,6 +1,6 @@
1
1
  # API configuration
2
2
 
3
- `APIConfiguration` is the object built by [`HTML.getApiConfiguration`](../../core/utils/HTML.ts) from **ancestor attributes** on the DOM (or from a typed publisher — see [@get configuration key](#docs/_decorators/get.md/get)). It is passed to [`API`](../../core/utils/api.ts) by fetchers, **sonic-submit**, the **`wording()`** directive, and **`@get`**.
3
+ `APIConfiguration` is the object built by [`HTML.getApiConfiguration`](../../core/utils/HTML.ts) from **ancestor attributes** on the DOM (or from a typed publisher — see [@get](#docs/_decorators/get.md/get) / [@post](#docs/_decorators/post.md/post) configuration key). It is passed to [`API`](../../core/utils/api.ts) by fetchers, **sonic-submit**, the **`wording()`** directive, **`@get`**, **`@post`**, **`@put`**, and **`@patch`**.
4
4
 
5
5
  > **Mock service:** same [Local API demos](#docs/_misc/docs-mock-api.md/docs-mock-api) Service Worker / Vite middleware. Routes used on this page are listed in the [API config routes](#api-config-routes) section below.
6
6
 
@@ -74,6 +74,8 @@ Implementation: `src/docs/mock-api/api-config-mock.ts` (bundled in the Service W
74
74
  ## See also
75
75
 
76
76
  - [@get](#docs/_decorators/get.md/get) — `APIConfiguration` + `Endpoint`
77
+ - [@post](#docs/_decorators/post.md/post) — same configuration model for POST
78
+ - [@put](#docs/_decorators/put.md/put) · [@patch](#docs/_decorators/patch.md/patch) — PUT / PATCH
77
79
  - [Endpoint](#docs/_misc/endpoint.md/endpoint) — typed path
78
80
  - [Local API demos](#docs/_misc/docs-mock-api.md/docs-mock-api) — offline `serviceURL`
79
81
  - [Fetch](#core/components/functional/fetch/fetch.md/fetch) — attribute table (legacy sonic-fetch)
@@ -78,7 +78,7 @@ firstItem.path; // "data.items.0"
78
78
 
79
79
  ### Dynamic paths
80
80
 
81
- Use placeholders `${prop}` or `{$prop}` in the path string. The path is resolved at runtime from the component's properties. The type remains declarative:
81
+ Use placeholders `${prop}` or `{$prop}` in the path string. The path is resolved at runtime from the component's properties. See [Dynamic path placeholders](#docs/_misc/dynamic-path.md/dynamic-path) for resolution rules and `skipEmptyPlaceholder`. The type remains declarative:
82
82
 
83
83
  <sonic-code language="typescript">
84
84
  <template>
@@ -159,7 +159,7 @@ export class UserForm extends LitElement {
159
159
  </template>
160
160
  </sonic-code>
161
161
 
162
- These decorators support dynamic paths: `"base.${prop}"` in the constructor. A wrong property type (e.g. `number` for `DataProviderKey<string>`) is a TypeScript error. See [@handle](#docs/_decorators/handle.md/handle) for method callbacks.
162
+ These decorators support dynamic paths: `"base.${prop}"` in the constructor. A wrong property type (e.g. `number` for `DataProviderKey<string>`) is a TypeScript error. Resolution rules: [Dynamic path placeholders](#docs/_misc/dynamic-path.md/dynamic-path). See [@handle](#docs/_decorators/handle.md/handle) for method callbacks.
163
163
 
164
164
  ## Notes
165
165