@supersoniks/concorde 4.9.98-visual-stack.0 → 4.9.98-visual-stack.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (476) hide show
  1. package/.gitlab-ci.yml +0 -13
  2. package/build-infos.json +1 -1
  3. package/concorde-3d.bundle.js +201 -152
  4. package/concorde-3d.es.js +14688 -13906
  5. package/concorde-core.bundle.js +557 -622
  6. package/concorde-core.es.js +6025 -5575
  7. package/concorde-hugging-face-infer.bundle.js +1 -1
  8. package/concorde-hugging-face-infer.es.js +1 -1
  9. package/concorde-interactive.bundle.js +1162 -0
  10. package/concorde-interactive.es.js +10723 -0
  11. package/concorde-shader.bundle.js +31 -20
  12. package/concorde-shader.es.js +2773 -2547
  13. package/concorde-webgpu.bundle.js +43 -32
  14. package/concorde-webgpu.es.js +1819 -1553
  15. package/dist/concorde-3d.bundle.js +201 -152
  16. package/dist/concorde-3d.es.js +14688 -13906
  17. package/dist/concorde-core.bundle.js +557 -622
  18. package/dist/concorde-core.es.js +6025 -5575
  19. package/dist/concorde-hugging-face-infer.bundle.js +1 -1
  20. package/dist/concorde-hugging-face-infer.es.js +1 -1
  21. package/dist/concorde-interactive.bundle.js +1162 -0
  22. package/dist/concorde-interactive.es.js +10723 -0
  23. package/dist/concorde-shader.bundle.js +31 -20
  24. package/dist/concorde-shader.es.js +2773 -2547
  25. package/dist/concorde-webgpu.bundle.js +43 -32
  26. package/dist/concorde-webgpu.es.js +1819 -1553
  27. package/dist/docs-mock-api-sw.js +5 -1
  28. package/dist/docs-mock-api-sw.js.map +2 -2
  29. package/dist/js/addons/interactive.js +6 -0
  30. package/dist/js/addons/interactive.js.map +1 -0
  31. package/dist/js/core/components/functional/3d/3d.js +90 -2
  32. package/dist/js/core/components/functional/3d/3d.js.map +1 -1
  33. package/dist/js/core/components/functional/3d/constants.js +1 -0
  34. package/dist/js/core/components/functional/3d/constants.js.map +1 -1
  35. package/dist/js/core/components/functional/3d/ensure.js +6 -3
  36. package/dist/js/core/components/functional/3d/ensure.js.map +1 -1
  37. package/dist/js/core/components/functional/3d/form-params.js +2 -0
  38. package/dist/js/core/components/functional/3d/form-params.js.map +1 -1
  39. package/dist/js/core/components/functional/3d/life.js +2 -1
  40. package/dist/js/core/components/functional/3d/life.js.map +1 -1
  41. package/dist/js/core/components/functional/3d/out-publish.js +3 -2
  42. package/dist/js/core/components/functional/3d/out-publish.js.map +1 -1
  43. package/dist/js/core/components/functional/3d/playback.js +6 -1
  44. package/dist/js/core/components/functional/3d/playback.js.map +1 -1
  45. package/dist/js/core/components/functional/3d/post-bind.js +207 -0
  46. package/dist/js/core/components/functional/3d/post-bind.js.map +1 -0
  47. package/dist/js/core/components/functional/3d/post-channels.js +39 -0
  48. package/dist/js/core/components/functional/3d/post-channels.js.map +1 -0
  49. package/dist/js/core/components/functional/3d/post-fx.js +495 -0
  50. package/dist/js/core/components/functional/3d/post-fx.js.map +1 -0
  51. package/dist/js/core/components/functional/3d/props.js +142 -0
  52. package/dist/js/core/components/functional/3d/props.js.map +1 -1
  53. package/dist/js/core/components/functional/3d/reload.js +2 -0
  54. package/dist/js/core/components/functional/3d/reload.js.map +1 -1
  55. package/dist/js/core/components/functional/3d/runtime.js +80 -3
  56. package/dist/js/core/components/functional/3d/runtime.js.map +1 -1
  57. package/dist/js/core/components/functional/3d/scene-runtime.js +1 -1
  58. package/dist/js/core/components/functional/3d/scene-runtime.js.map +1 -1
  59. package/dist/js/core/components/functional/3d/tune.js +21 -0
  60. package/dist/js/core/components/functional/3d/tune.js.map +1 -1
  61. package/dist/js/core/components/functional/3d/updated.js +13 -1
  62. package/dist/js/core/components/functional/3d/updated.js.map +1 -1
  63. package/dist/js/core/components/functional/if/if.js +65 -7
  64. package/dist/js/core/components/functional/if/if.js.map +1 -1
  65. package/dist/js/core/components/functional/interactive/action.js +96 -0
  66. package/dist/js/core/components/functional/interactive/action.js.map +1 -0
  67. package/dist/js/core/components/functional/interactive/gamepad.js +206 -0
  68. package/dist/js/core/components/functional/interactive/gamepad.js.map +1 -0
  69. package/dist/js/core/components/functional/interactive/gesture.js +148 -0
  70. package/dist/js/core/components/functional/interactive/gesture.js.map +1 -0
  71. package/dist/js/core/components/functional/interactive/helpers.js +82 -0
  72. package/dist/js/core/components/functional/interactive/helpers.js.map +1 -0
  73. package/dist/js/core/components/functional/interactive/index.js +20 -0
  74. package/dist/js/core/components/functional/interactive/index.js.map +1 -0
  75. package/dist/js/core/components/functional/interactive/keyboard.js +183 -0
  76. package/dist/js/core/components/functional/interactive/keyboard.js.map +1 -0
  77. package/dist/js/core/components/functional/interactive/matrix.js +201 -0
  78. package/dist/js/core/components/functional/interactive/matrix.js.map +1 -0
  79. package/dist/js/core/components/functional/interactive/registry.js +28 -0
  80. package/dist/js/core/components/functional/interactive/registry.js.map +1 -0
  81. package/dist/js/core/components/functional/interactive/store.js +264 -0
  82. package/dist/js/core/components/functional/interactive/store.js.map +1 -0
  83. package/dist/js/core/components/functional/interactive/ticker.js +182 -0
  84. package/dist/js/core/components/functional/interactive/ticker.js.map +1 -0
  85. package/dist/js/core/components/functional/shader/gl-runtime.js +128 -14
  86. package/dist/js/core/components/functional/shader/gl-runtime.js.map +1 -1
  87. package/dist/js/core/components/functional/shader/shader.js +154 -57
  88. package/dist/js/core/components/functional/shader/shader.js.map +1 -1
  89. package/dist/js/core/components/functional/shader/shadertoy-prelude.js +39 -5
  90. package/dist/js/core/components/functional/shader/shadertoy-prelude.js.map +1 -1
  91. package/dist/js/core/components/functional/shader/types.js +58 -7
  92. package/dist/js/core/components/functional/shader/types.js.map +1 -1
  93. package/dist/js/core/components/functional/value/value.js +49 -4
  94. package/dist/js/core/components/functional/value/value.js.map +1 -1
  95. package/dist/js/core/components/functional/webgpu/gl-fallback.js +27 -6
  96. package/dist/js/core/components/functional/webgpu/gl-fallback.js.map +1 -1
  97. package/dist/js/core/components/functional/webgpu/gpu-runtime.js +115 -13
  98. package/dist/js/core/components/functional/webgpu/gpu-runtime.js.map +1 -1
  99. package/dist/js/core/components/functional/webgpu/helpers.js +8 -2
  100. package/dist/js/core/components/functional/webgpu/helpers.js.map +1 -1
  101. package/dist/js/core/components/functional/webgpu/webgpu.js +34 -1
  102. package/dist/js/core/components/functional/webgpu/webgpu.js.map +1 -1
  103. package/dist/js/core/components/ui/_css/rounded.js +34 -0
  104. package/dist/js/core/components/ui/_css/rounded.js.map +1 -0
  105. package/dist/js/core/components/ui/_css/type.js +44 -0
  106. package/dist/js/core/components/ui/_css/type.js.map +1 -1
  107. package/dist/js/core/components/ui/_i18n/ui-aria-labels.js +95 -0
  108. package/dist/js/core/components/ui/_i18n/ui-aria-labels.js.map +1 -0
  109. package/dist/js/core/components/ui/alert/alert.js +72 -87
  110. package/dist/js/core/components/ui/alert/alert.js.map +1 -1
  111. package/dist/js/core/components/ui/alert-messages/alert-messages.js +1 -0
  112. package/dist/js/core/components/ui/alert-messages/alert-messages.js.map +1 -1
  113. package/dist/js/core/components/ui/badge/badge.js +29 -80
  114. package/dist/js/core/components/ui/badge/badge.js.map +1 -1
  115. package/dist/js/core/components/ui/button/button.js +8 -7
  116. package/dist/js/core/components/ui/button/button.js.map +1 -1
  117. package/dist/js/core/components/ui/card/card-header.js +7 -2
  118. package/dist/js/core/components/ui/card/card-header.js.map +1 -1
  119. package/dist/js/core/components/ui/divider/divider.js +1 -1
  120. package/dist/js/core/components/ui/divider/divider.js.map +1 -1
  121. package/dist/js/core/components/ui/form/checkbox/checkbox.js +4 -20
  122. package/dist/js/core/components/ui/form/checkbox/checkbox.js.map +1 -1
  123. package/dist/js/core/components/ui/form/fieldset/legend-description.js +1 -1
  124. package/dist/js/core/components/ui/form/fieldset/legend.js +1 -1
  125. package/dist/js/core/components/ui/form/input/input.js +12 -15
  126. package/dist/js/core/components/ui/form/input/input.js.map +1 -1
  127. package/dist/js/core/components/ui/form/input-autocomplete/input-autocomplete.js +363 -158
  128. package/dist/js/core/components/ui/form/input-autocomplete/input-autocomplete.js.map +1 -1
  129. package/dist/js/core/components/ui/form/radio/radio.js +1 -1
  130. package/dist/js/core/components/ui/form/select/select.js +3 -6
  131. package/dist/js/core/components/ui/form/select/select.js.map +1 -1
  132. package/dist/js/core/components/ui/form/textarea/textarea.js +1 -2
  133. package/dist/js/core/components/ui/form/textarea/textarea.js.map +1 -1
  134. package/dist/js/core/components/ui/image/image.js +9 -37
  135. package/dist/js/core/components/ui/image/image.js.map +1 -1
  136. package/dist/js/core/components/ui/link/link.js +25 -26
  137. package/dist/js/core/components/ui/link/link.js.map +1 -1
  138. package/dist/js/core/components/ui/modal/modal-close.js +3 -12
  139. package/dist/js/core/components/ui/modal/modal-close.js.map +1 -1
  140. package/dist/js/core/components/ui/modal/modal.js +18 -18
  141. package/dist/js/core/components/ui/modal/modal.js.map +1 -1
  142. package/dist/js/core/components/ui/pop/pop.js +131 -112
  143. package/dist/js/core/components/ui/pop/pop.js.map +1 -1
  144. package/dist/js/core/components/ui/table/table.js.map +1 -1
  145. package/dist/js/core/components/ui/theme/theme.js +1 -1
  146. package/dist/js/core/components/ui/toast/dismissed.js +9 -0
  147. package/dist/js/core/components/ui/toast/dismissed.js.map +1 -0
  148. package/dist/js/core/components/ui/toast/render-content.js +14 -0
  149. package/dist/js/core/components/ui/toast/render-content.js.map +1 -0
  150. package/dist/js/core/components/ui/toast/toast-item.js +150 -96
  151. package/dist/js/core/components/ui/toast/toast-item.js.map +1 -1
  152. package/dist/js/core/components/ui/toast/toast.js +41 -13
  153. package/dist/js/core/components/ui/toast/toast.js.map +1 -1
  154. package/dist/js/core/components/ui/tooltip/tooltip.js +144 -143
  155. package/dist/js/core/components/ui/tooltip/tooltip.js.map +1 -1
  156. package/dist/js/core/decorators/subscriber/ancestorAttribute.js.map +1 -1
  157. package/dist/js/core/decorators/subscriber/derive.js +3 -1
  158. package/dist/js/core/decorators/subscriber/derive.js.map +1 -1
  159. package/dist/js/core/mixins/Fetcher.js.map +1 -1
  160. package/dist/js/core/mixins/FormCheckable.js +1 -8
  161. package/dist/js/core/mixins/FormCheckable.js.map +1 -1
  162. package/dist/js/core/mixins/FormElement.js +26 -53
  163. package/dist/js/core/mixins/FormElement.js.map +1 -1
  164. package/dist/js/core/utils/AncestorAttributeObserver.js +130 -55
  165. package/dist/js/core/utils/AncestorAttributeObserver.js.map +1 -1
  166. package/dist/js/core/utils/LocationHandler.js +1 -1
  167. package/dist/js/core/utils/LocationHandler.js.map +1 -1
  168. package/dist/js/core/utils/dismissed.js +23 -0
  169. package/dist/js/core/utils/dismissed.js.map +1 -0
  170. package/dist/js/core/utils/mediaRef.js +37 -0
  171. package/dist/js/core/utils/mediaRef.js.map +1 -1
  172. package/dist/js/core/utils/positioning.js +110 -0
  173. package/dist/js/core/utils/positioning.js.map +1 -0
  174. package/dist/js/directives.js +1 -2
  175. package/dist/js/directives.js.map +1 -1
  176. package/dist/types/addons/interactive.d.ts +6 -0
  177. package/dist/types/addons/interactive.d.ts.map +1 -0
  178. package/dist/types/core/components/functional/3d/3d.d.ts +26 -3
  179. package/dist/types/core/components/functional/3d/3d.d.ts.map +1 -1
  180. package/dist/types/core/components/functional/3d/constants.d.ts +1 -1
  181. package/dist/types/core/components/functional/3d/constants.d.ts.map +1 -1
  182. package/dist/types/core/components/functional/3d/ensure.d.ts +3 -0
  183. package/dist/types/core/components/functional/3d/ensure.d.ts.map +1 -1
  184. package/dist/types/core/components/functional/3d/form-params.d.ts.map +1 -1
  185. package/dist/types/core/components/functional/3d/life.d.ts +2 -0
  186. package/dist/types/core/components/functional/3d/life.d.ts.map +1 -1
  187. package/dist/types/core/components/functional/3d/out-publish.d.ts +1 -0
  188. package/dist/types/core/components/functional/3d/out-publish.d.ts.map +1 -1
  189. package/dist/types/core/components/functional/3d/playback.d.ts +9 -0
  190. package/dist/types/core/components/functional/3d/playback.d.ts.map +1 -1
  191. package/dist/types/core/components/functional/3d/post-bind.d.ts +52 -0
  192. package/dist/types/core/components/functional/3d/post-bind.d.ts.map +1 -0
  193. package/dist/types/core/components/functional/3d/post-channels.d.ts +40 -0
  194. package/dist/types/core/components/functional/3d/post-channels.d.ts.map +1 -0
  195. package/dist/types/core/components/functional/3d/post-fx.d.ts +73 -0
  196. package/dist/types/core/components/functional/3d/post-fx.d.ts.map +1 -0
  197. package/dist/types/core/components/functional/3d/props.d.ts +42 -0
  198. package/dist/types/core/components/functional/3d/props.d.ts.map +1 -1
  199. package/dist/types/core/components/functional/3d/reload.d.ts.map +1 -1
  200. package/dist/types/core/components/functional/3d/runtime.d.ts +16 -1
  201. package/dist/types/core/components/functional/3d/runtime.d.ts.map +1 -1
  202. package/dist/types/core/components/functional/3d/scene-runtime.d.ts +1 -1
  203. package/dist/types/core/components/functional/3d/scene-runtime.d.ts.map +1 -1
  204. package/dist/types/core/components/functional/3d/tune.d.ts +5 -0
  205. package/dist/types/core/components/functional/3d/tune.d.ts.map +1 -1
  206. package/dist/types/core/components/functional/3d/types.d.ts +9 -0
  207. package/dist/types/core/components/functional/3d/types.d.ts.map +1 -1
  208. package/dist/types/core/components/functional/3d/updated.d.ts.map +1 -1
  209. package/dist/types/core/components/functional/if/if.d.ts +14 -5
  210. package/dist/types/core/components/functional/if/if.d.ts.map +1 -1
  211. package/dist/types/core/components/functional/interactive/action.d.ts +22 -0
  212. package/dist/types/core/components/functional/interactive/action.d.ts.map +1 -0
  213. package/dist/types/core/components/functional/interactive/gamepad.d.ts +37 -0
  214. package/dist/types/core/components/functional/interactive/gamepad.d.ts.map +1 -0
  215. package/dist/types/core/components/functional/interactive/gesture.d.ts +26 -0
  216. package/dist/types/core/components/functional/interactive/gesture.d.ts.map +1 -0
  217. package/dist/types/core/components/functional/interactive/helpers.d.ts +23 -0
  218. package/dist/types/core/components/functional/interactive/helpers.d.ts.map +1 -0
  219. package/dist/types/core/components/functional/interactive/index.d.ts +20 -0
  220. package/dist/types/core/components/functional/interactive/index.d.ts.map +1 -0
  221. package/dist/types/core/components/functional/interactive/keyboard.d.ts +37 -0
  222. package/dist/types/core/components/functional/interactive/keyboard.d.ts.map +1 -0
  223. package/dist/types/core/components/functional/interactive/matrix.d.ts +31 -0
  224. package/dist/types/core/components/functional/interactive/matrix.d.ts.map +1 -0
  225. package/dist/types/core/components/functional/interactive/registry.d.ts +23 -0
  226. package/dist/types/core/components/functional/interactive/registry.d.ts.map +1 -0
  227. package/dist/types/core/components/functional/interactive/store.d.ts +46 -0
  228. package/dist/types/core/components/functional/interactive/store.d.ts.map +1 -0
  229. package/dist/types/core/components/functional/interactive/ticker.d.ts +33 -0
  230. package/dist/types/core/components/functional/interactive/ticker.d.ts.map +1 -0
  231. package/dist/types/core/components/functional/shader/gl-runtime.d.ts +33 -1
  232. package/dist/types/core/components/functional/shader/gl-runtime.d.ts.map +1 -1
  233. package/dist/types/core/components/functional/shader/shader.d.ts +28 -7
  234. package/dist/types/core/components/functional/shader/shader.d.ts.map +1 -1
  235. package/dist/types/core/components/functional/shader/shadertoy-prelude.d.ts +16 -2
  236. package/dist/types/core/components/functional/shader/shadertoy-prelude.d.ts.map +1 -1
  237. package/dist/types/core/components/functional/shader/types.d.ts +29 -5
  238. package/dist/types/core/components/functional/shader/types.d.ts.map +1 -1
  239. package/dist/types/core/components/functional/value/value.d.ts +6 -0
  240. package/dist/types/core/components/functional/value/value.d.ts.map +1 -1
  241. package/dist/types/core/components/functional/webgpu/gl-fallback.d.ts +4 -0
  242. package/dist/types/core/components/functional/webgpu/gl-fallback.d.ts.map +1 -1
  243. package/dist/types/core/components/functional/webgpu/gpu-runtime.d.ts +14 -0
  244. package/dist/types/core/components/functional/webgpu/gpu-runtime.d.ts.map +1 -1
  245. package/dist/types/core/components/functional/webgpu/helpers.d.ts +1 -0
  246. package/dist/types/core/components/functional/webgpu/helpers.d.ts.map +1 -1
  247. package/dist/types/core/components/functional/webgpu/webgpu.d.ts +7 -1
  248. package/dist/types/core/components/functional/webgpu/webgpu.d.ts.map +1 -1
  249. package/dist/types/core/components/ui/_css/rounded.d.ts +3 -0
  250. package/dist/types/core/components/ui/_css/rounded.d.ts.map +1 -0
  251. package/dist/types/core/components/ui/_css/type.d.ts +13 -0
  252. package/dist/types/core/components/ui/_css/type.d.ts.map +1 -1
  253. package/dist/types/core/components/ui/_i18n/ui-aria-labels.d.ts +83 -0
  254. package/dist/types/core/components/ui/_i18n/ui-aria-labels.d.ts.map +1 -0
  255. package/dist/types/core/components/ui/alert/alert.d.ts +14 -12
  256. package/dist/types/core/components/ui/alert/alert.d.ts.map +1 -1
  257. package/dist/types/core/components/ui/alert-messages/alert-messages.d.ts.map +1 -1
  258. package/dist/types/core/components/ui/badge/badge.d.ts +1 -1
  259. package/dist/types/core/components/ui/badge/badge.d.ts.map +1 -1
  260. package/dist/types/core/components/ui/button/button.d.ts +13 -29
  261. package/dist/types/core/components/ui/button/button.d.ts.map +1 -1
  262. package/dist/types/core/components/ui/card/card-header.d.ts.map +1 -1
  263. package/dist/types/core/components/ui/divider/divider.d.ts +2 -1
  264. package/dist/types/core/components/ui/divider/divider.d.ts.map +1 -1
  265. package/dist/types/core/components/ui/form/checkbox/checkbox.d.ts +25 -73
  266. package/dist/types/core/components/ui/form/checkbox/checkbox.d.ts.map +1 -1
  267. package/dist/types/core/components/ui/form/input/input.d.ts +14 -29
  268. package/dist/types/core/components/ui/form/input/input.d.ts.map +1 -1
  269. package/dist/types/core/components/ui/form/input-autocomplete/input-autocomplete.d.ts +63 -65
  270. package/dist/types/core/components/ui/form/input-autocomplete/input-autocomplete.d.ts.map +1 -1
  271. package/dist/types/core/components/ui/form/radio/radio.d.ts +1 -1
  272. package/dist/types/core/components/ui/form/select/select.d.ts +3 -5
  273. package/dist/types/core/components/ui/form/select/select.d.ts.map +1 -1
  274. package/dist/types/core/components/ui/form/textarea/textarea.d.ts +12 -28
  275. package/dist/types/core/components/ui/form/textarea/textarea.d.ts.map +1 -1
  276. package/dist/types/core/components/ui/image/image.d.ts +2 -1
  277. package/dist/types/core/components/ui/image/image.d.ts.map +1 -1
  278. package/dist/types/core/components/ui/link/link.d.ts +10 -9
  279. package/dist/types/core/components/ui/link/link.d.ts.map +1 -1
  280. package/dist/types/core/components/ui/modal/modal-close.d.ts +2 -2
  281. package/dist/types/core/components/ui/modal/modal-close.d.ts.map +1 -1
  282. package/dist/types/core/components/ui/pop/pop.d.ts +12 -4
  283. package/dist/types/core/components/ui/pop/pop.d.ts.map +1 -1
  284. package/dist/types/core/components/ui/table/table.d.ts +2 -1
  285. package/dist/types/core/components/ui/table/table.d.ts.map +1 -1
  286. package/dist/types/core/components/ui/toast/dismissed.d.ts +3 -0
  287. package/dist/types/core/components/ui/toast/dismissed.d.ts.map +1 -0
  288. package/dist/types/core/components/ui/toast/render-content.d.ts +7 -0
  289. package/dist/types/core/components/ui/toast/render-content.d.ts.map +1 -0
  290. package/dist/types/core/components/ui/toast/toast-item.d.ts +26 -9
  291. package/dist/types/core/components/ui/toast/toast-item.d.ts.map +1 -1
  292. package/dist/types/core/components/ui/toast/toast.d.ts +6 -3
  293. package/dist/types/core/components/ui/toast/toast.d.ts.map +1 -1
  294. package/dist/types/core/components/ui/toast/types.d.ts +12 -2
  295. package/dist/types/core/components/ui/toast/types.d.ts.map +1 -1
  296. package/dist/types/core/components/ui/tooltip/tooltip.d.ts +19 -11
  297. package/dist/types/core/components/ui/tooltip/tooltip.d.ts.map +1 -1
  298. package/dist/types/core/decorators/subscriber/ancestorAttribute.d.ts +3 -4
  299. package/dist/types/core/decorators/subscriber/ancestorAttribute.d.ts.map +1 -1
  300. package/dist/types/core/decorators/subscriber/derive.d.ts.map +1 -1
  301. package/dist/types/core/mixins/FormCheckable.d.ts +10 -27
  302. package/dist/types/core/mixins/FormCheckable.d.ts.map +1 -1
  303. package/dist/types/core/mixins/FormElement.d.ts +21 -10
  304. package/dist/types/core/mixins/FormElement.d.ts.map +1 -1
  305. package/dist/types/core/mixins/FormInput.d.ts +11 -27
  306. package/dist/types/core/mixins/FormInput.d.ts.map +1 -1
  307. package/dist/types/core/utils/AncestorAttributeObserver.d.ts +17 -9
  308. package/dist/types/core/utils/AncestorAttributeObserver.d.ts.map +1 -1
  309. package/dist/types/core/utils/LocationHandler.d.ts +3 -2
  310. package/dist/types/core/utils/LocationHandler.d.ts.map +1 -1
  311. package/dist/types/core/utils/dismissed.d.ts +3 -0
  312. package/dist/types/core/utils/dismissed.d.ts.map +1 -0
  313. package/dist/types/core/utils/mediaRef.d.ts +15 -0
  314. package/dist/types/core/utils/mediaRef.d.ts.map +1 -1
  315. package/dist/types/core/utils/positioning.d.ts +44 -0
  316. package/dist/types/core/utils/positioning.d.ts.map +1 -0
  317. package/dist/types/directives.d.ts +1 -3
  318. package/dist/types/directives.d.ts.map +1 -1
  319. package/dist/types/mixins.d.ts +22 -55
  320. package/dist/types/mixins.d.ts.map +1 -1
  321. package/docs/assets/{index-FmK4JaIM.js → index-D8MVWqY6.js} +946 -687
  322. package/docs/assets/index-DiD0qYvE.css +1 -0
  323. package/docs/crawl/core/components/ui/form/input-autocomplete/input-autocomplete.html +17 -85
  324. package/docs/crawl/docs/_misc/formelement-subscriber-removal.html +1 -1
  325. package/docs/crawl/hubs/form-components.html +13 -11
  326. package/docs/docs-mock-api-sw.js +5 -1
  327. package/docs/docs-mock-api-sw.js.map +2 -2
  328. package/docs/index.html +2 -2
  329. package/docs/llms-full.txt +12 -38
  330. package/docs/llms.txt +1 -1
  331. package/docs/src/core/components/functional/sdui/sdui.md +0 -0
  332. package/docs/src/core/components/ui/form/checkbox/checkbox.md +0 -0
  333. package/docs/src/core/components/ui/form/input-autocomplete/input-autocomplete.md +14 -118
  334. package/docs/src/docs/_getting-started/create-a-component.md +0 -0
  335. package/docs/src/docs/_misc/formelement-subscriber-removal.md +1 -1
  336. package/docs/src/docs/search/docs-search.json +195 -200
  337. package/docs/src/tsconfig.json +324 -0
  338. package/gitlab/job_tests.sh +25 -12
  339. package/index.html +3 -3
  340. package/package.json +217 -9
  341. package/public/docs-mock-api-sw.js +5 -1
  342. package/public/docs-mock-api-sw.js.map +2 -2
  343. package/scripts/build-addons.mjs +2 -2
  344. package/scripts/post-build.mjs +9 -0
  345. package/src/addons/interactive.ts +5 -0
  346. package/src/core/components/functional/3d/3d.md +34 -1
  347. package/src/core/components/functional/3d/3d.spec.ts +42 -0
  348. package/src/core/components/functional/3d/3d.ts +101 -3
  349. package/src/core/components/functional/3d/constants.ts +1 -0
  350. package/src/core/components/functional/3d/ensure.ts +11 -3
  351. package/src/core/components/functional/3d/form-params.ts +2 -0
  352. package/src/core/components/functional/3d/life.ts +4 -1
  353. package/src/core/components/functional/3d/out-publish.ts +4 -3
  354. package/src/core/components/functional/3d/playback.ts +13 -1
  355. package/src/core/components/functional/3d/post-bind.ts +262 -0
  356. package/src/core/components/functional/3d/post-channels.spec.ts +36 -0
  357. package/src/core/components/functional/3d/post-channels.ts +69 -0
  358. package/src/core/components/functional/3d/post-fx.ts +594 -0
  359. package/src/core/components/functional/3d/props.ts +45 -0
  360. package/src/core/components/functional/3d/reload.ts +2 -0
  361. package/src/core/components/functional/3d/runtime.ts +93 -4
  362. package/src/core/components/functional/3d/scene-runtime.ts +3 -0
  363. package/src/core/components/functional/3d/tune.ts +21 -0
  364. package/src/core/components/functional/3d/types.ts +9 -0
  365. package/src/core/components/functional/3d/updated.ts +17 -1
  366. package/src/core/components/functional/if/if.ts +54 -7
  367. package/src/core/components/functional/interactive/action.ts +84 -0
  368. package/src/core/components/functional/interactive/gamepad.ts +197 -0
  369. package/src/core/components/functional/interactive/gesture.ts +136 -0
  370. package/src/core/components/functional/interactive/helpers.spec.ts +50 -0
  371. package/src/core/components/functional/interactive/helpers.ts +97 -0
  372. package/src/core/components/functional/interactive/index.ts +25 -0
  373. package/src/core/components/functional/interactive/interactive.md +33 -0
  374. package/src/core/components/functional/interactive/keyboard.ts +171 -0
  375. package/src/core/components/functional/interactive/matrix.ts +185 -0
  376. package/src/core/components/functional/interactive/registry.ts +46 -0
  377. package/src/core/components/functional/interactive/store.ts +264 -0
  378. package/src/core/components/functional/interactive/ticker.ts +171 -0
  379. package/src/core/components/functional/list/list.ts +0 -0
  380. package/src/core/components/functional/shader/gl-runtime.ts +169 -12
  381. package/src/core/components/functional/shader/shader.md +27 -4
  382. package/src/core/components/functional/shader/shader.spec.ts +267 -0
  383. package/src/core/components/functional/shader/shader.ts +177 -55
  384. package/src/core/components/functional/shader/shadertoy-prelude.ts +49 -5
  385. package/src/core/components/functional/shader/types.ts +89 -12
  386. package/src/core/components/functional/subscriber/subscriber.ts +0 -0
  387. package/src/core/components/functional/value/value.ts +44 -4
  388. package/src/core/components/functional/webgpu/gl-fallback.ts +28 -4
  389. package/src/core/components/functional/webgpu/gpu-runtime.ts +154 -18
  390. package/src/core/components/functional/webgpu/helpers.ts +8 -2
  391. package/src/core/components/functional/webgpu/webgpu.md +13 -2
  392. package/src/core/components/functional/webgpu/webgpu.spec.ts +37 -0
  393. package/src/core/components/functional/webgpu/webgpu.ts +39 -1
  394. package/src/core/components/ui/_css/rounded.ts +36 -0
  395. package/src/core/components/ui/_css/type.ts +49 -0
  396. package/src/core/components/ui/_i18n/ui-aria-labels.ts +104 -0
  397. package/src/core/components/ui/alert/alert.md +128 -72
  398. package/src/core/components/ui/alert/alert.spec.ts +145 -0
  399. package/src/core/components/ui/alert/alert.ts +86 -91
  400. package/src/core/components/ui/alert-messages/alert-messages.ts +1 -1
  401. package/src/core/components/ui/badge/badge.md +126 -78
  402. package/src/core/components/ui/badge/badge.ts +29 -81
  403. package/src/core/components/ui/button/button.md +1 -0
  404. package/src/core/components/ui/button/button.ts +12 -10
  405. package/src/core/components/ui/card/card-header.ts +7 -2
  406. package/src/core/components/ui/card/card.md +120 -65
  407. package/src/core/components/ui/divider/divider.ts +4 -9
  408. package/src/core/components/ui/form/checkbox/checkbox.md +1 -1
  409. package/src/core/components/ui/form/checkbox/checkbox.ts +4 -20
  410. package/src/core/components/ui/form/fieldset/legend-description.ts +1 -1
  411. package/src/core/components/ui/form/fieldset/legend.ts +1 -1
  412. package/src/core/components/ui/form/input/input.md +1 -1
  413. package/src/core/components/ui/form/input/input.ts +25 -27
  414. package/src/core/components/ui/form/input-autocomplete/input-autocomplete.md +14 -118
  415. package/src/core/components/ui/form/input-autocomplete/input-autocomplete.ts +419 -187
  416. package/src/core/components/ui/form/radio/radio.ts +1 -1
  417. package/src/core/components/ui/form/select/select.ts +3 -6
  418. package/src/core/components/ui/form/textarea/textarea.md +1 -1
  419. package/src/core/components/ui/form/textarea/textarea.ts +1 -2
  420. package/src/core/components/ui/image/image.md +147 -53
  421. package/src/core/components/ui/image/image.ts +10 -44
  422. package/src/core/components/ui/link/link.md +2 -2
  423. package/src/core/components/ui/link/link.ts +42 -37
  424. package/src/core/components/ui/modal/modal-close.ts +8 -12
  425. package/src/core/components/ui/modal/modal.ts +18 -18
  426. package/src/core/components/ui/pop/pop.md +105 -1
  427. package/src/core/components/ui/pop/pop.ts +145 -141
  428. package/src/core/components/ui/table/table.ts +2 -8
  429. package/src/core/components/ui/theme/theme.ts +1 -1
  430. package/src/core/components/ui/toast/dismissed.ts +14 -0
  431. package/src/core/components/ui/toast/render-content.ts +13 -0
  432. package/src/core/components/ui/toast/toast-item.ts +179 -103
  433. package/src/core/components/ui/toast/toast.ts +58 -21
  434. package/src/core/components/ui/toast/types.ts +14 -2
  435. package/src/core/components/ui/tooltip/tooltip.ts +176 -154
  436. package/src/core/decorators/subscriber/ancestorAttribute.spec.ts +26 -0
  437. package/src/core/decorators/subscriber/ancestorAttribute.ts +3 -4
  438. package/src/core/decorators/subscriber/derive.ts +3 -3
  439. package/src/core/mixins/Fetcher.ts +1 -1
  440. package/src/core/mixins/FormCheckable.ts +1 -8
  441. package/src/core/mixins/FormElement.ts +74 -76
  442. package/src/core/mixins/Subscriber.ts +0 -0
  443. package/src/core/utils/AncestorAttributeObserver.ts +183 -70
  444. package/src/core/utils/DataBindObserver.ts +0 -0
  445. package/src/core/utils/LocationHandler.ts +12 -5
  446. package/src/core/utils/Objects.ts +0 -0
  447. package/src/core/utils/dismissed.ts +22 -0
  448. package/src/core/utils/mediaRef.spec.ts +25 -0
  449. package/src/core/utils/mediaRef.ts +45 -0
  450. package/src/core/utils/positioning.spec.ts +208 -0
  451. package/src/core/utils/positioning.ts +183 -0
  452. package/src/directives.ts +1 -3
  453. package/src/docs/_core-concept/dataFlow.md +1 -1
  454. package/src/docs/_decorators/ancestor-attribute.md +3 -2
  455. package/src/docs/_getting-started/concorde-outside.md +3 -3
  456. package/src/docs/_misc/formelement-subscriber-removal.md +115 -0
  457. package/src/docs/_misc/html-integration.md +2 -0
  458. package/src/docs/_misc/visual-stack.md +19 -1
  459. package/src/docs/code.ts +3 -1
  460. package/src/docs/components/docs-demo-sources.ts +88 -0
  461. package/src/docs/docs.ts +3 -0
  462. package/src/docs/example/docs-3d-post-depth-demo.ts +68 -0
  463. package/src/docs/example/docs-3d-webgpu-live-demo.ts +83 -0
  464. package/src/docs/example/docs-harris-webgpu-demo.ts +53 -55
  465. package/src/docs/example/docs-input-autocomplete-demos.ts +110 -0
  466. package/src/docs/mock-api/router.ts +17 -1
  467. package/src/docs/navigation/navigation.ts +4 -0
  468. package/src/docs/search/docs-search.json +922 -1762
  469. package/src/docs/tailwind/css/tailwind.css +13 -6
  470. package/src/tsconfig.json +162 -6
  471. package/src/tsconfig.tsbuildinfo +1 -1
  472. package/tailwind.config.js +50 -3
  473. package/vite/config.js +23 -35
  474. package/vite.config.mts +5 -0
  475. package/vitest.setup.ts +49 -13
  476. package/docs/assets/index-BZiZXMU-.css +0 -1
@@ -0,0 +1,13 @@
1
+ import { nothing } from "lit";
2
+ import { unsafeHTML } from "lit/directives/unsafe-html.js";
3
+ import { ToastContent } from "@supersoniks/concorde/core/components/ui/toast/types";
4
+
5
+ /**
6
+ * Renders toast title/text content: TemplateResult/DirectiveResult as-is,
7
+ * HTML strings via unsafeHTML (legacy).
8
+ */
9
+ export function renderToastContent(content?: ToastContent) {
10
+ if (!content) return nothing;
11
+ if (content instanceof Object) return content;
12
+ return unsafeHTML(content);
13
+ }
@@ -1,23 +1,37 @@
1
- import { html, LitElement, css, nothing } from "lit";
1
+ import { html, LitElement, css, nothing, PropertyValues } from "lit";
2
2
  import { customElement, property, state } from "lit/decorators.js";
3
- import { unsafeHTML } from "lit/directives/unsafe-html.js";
4
3
  import "@supersoniks/concorde/core/components/ui/toast/types";
5
- import { ToastStatus } from "@supersoniks/concorde/core/components/ui/toast/types";
4
+ import {
5
+ ToastContent,
6
+ ToastStatus,
7
+ ToastStyleSheetInput,
8
+ } from "@supersoniks/concorde/core/components/ui/toast/types";
9
+ import { renderToastContent } from "@supersoniks/concorde/core/components/ui/toast/render-content";
10
+ import { normalizeStyleSheets } from "@supersoniks/concorde/core/components/ui/modal/modal-utils";
6
11
  import { customScroll } from "@supersoniks/concorde/core/components/ui/_css/scroll";
7
12
  import { HTML } from "@supersoniks/concorde/utils";
8
-
9
- const icon: Record<string, string> = {
10
- warning: "warning-circled-outline",
11
- success: "check-circled-outline",
12
- error: "warning-circled-outline",
13
- info: "info-empty",
14
- };
13
+ import {
14
+ isToastDismissed,
15
+ markToastDismissed,
16
+ } from "@supersoniks/concorde/core/components/ui/toast/dismissed";
17
+ import { resolveToastCloseLabel } from "@supersoniks/concorde/core/components/ui/_i18n/ui-aria-labels";
18
+
19
+ import {
20
+ statusAriaLive,
21
+ statusAriaRole,
22
+ statusColor,
23
+ statusIcon,
24
+ toStatus,
25
+ } from "@supersoniks/concorde/core/components/ui/_css/type";
26
+
27
+ const AUTO_HIDE_DELAY = 6000;
15
28
  const tagName = "sonic-toast-item";
16
29
 
17
30
  @customElement(tagName)
18
31
  export class SonicToastItem extends LitElement {
19
32
  static styles = [
20
33
  customScroll,
34
+ statusColor,
21
35
  css`
22
36
  * {
23
37
  box-sizing: border-box;
@@ -26,7 +40,6 @@ export class SonicToastItem extends LitElement {
26
40
  display: block;
27
41
  pointer-events: auto;
28
42
  position: relative;
29
- --sc-toast-status-color: transparent;
30
43
  --sc-toast-color: var(--sc-base-content, #000);
31
44
  --sc-toast-bg: var(--sc-base, #fff);
32
45
  --sc-toast-rounded: var(--sc-rounded-md);
@@ -47,14 +60,13 @@ export class SonicToastItem extends LitElement {
47
60
  pointer-events: auto;
48
61
  overflow: hidden;
49
62
  line-height: 1.25;
50
- color: var(--sc-toast-color);
51
63
  box-shadow: var(--sc-toast-shadow);
52
64
  border-radius: var(--sc-toast-rounded);
53
65
  background: var(--sc-toast-bg);
54
66
  }
55
67
 
56
68
  .sonic-toast-content {
57
- padding: 1em 2.5rem 1em 1em;
69
+ padding: 0.8em 2.25rem 0.8em 0.8em;
58
70
  display: flex;
59
71
  gap: 0.5rem;
60
72
  overflow: auto;
@@ -62,6 +74,7 @@ export class SonicToastItem extends LitElement {
62
74
  }
63
75
 
64
76
  .sonic-toast-text {
77
+ color: var(--sc-toast-color);
65
78
  align-self: center;
66
79
  margin-top: auto;
67
80
  margin-bottom: auto;
@@ -109,6 +122,7 @@ export class SonicToastItem extends LitElement {
109
122
  border-radius: 50%;
110
123
  text-align: center;
111
124
  opacity: 0.5;
125
+ color: var(--sc-toast-color);
112
126
  background: rgba(0, 0, 0, 0);
113
127
  }
114
128
 
@@ -128,39 +142,21 @@ export class SonicToastItem extends LitElement {
128
142
  /*Title*/
129
143
  .sonic-toast-title {
130
144
  font-weight: bold;
131
- font-size: 1.15rem;
132
- margin: 0.15em 0 0.25em;
145
+ font-size: 1.125rem;
146
+ margin: 0.15em 0 0.15em;
133
147
  line-height: 1.2;
134
148
  }
135
149
 
136
- /*STATUS*/
137
- .success {
138
- --sc-toast-status-color: var(
139
- --sc-success,
140
- var(--sc-base-content, #000)
141
- );
142
- }
143
-
144
- .error {
145
- --sc-toast-status-color: var(--sc-danger, var(--sc-base-content, #000));
150
+ /*STATUS — accent via statusColor (--sc-_color) */
151
+ :host([status]) .sonic-toast {
152
+ border-top: 3px solid var(--sc-_color);
146
153
  }
147
154
 
148
- .warning {
149
- --sc-toast-status-color: var(
150
- --sc-warning,
151
- var(--sc-base-content, #000)
152
- );
153
- }
154
-
155
- .info {
156
- --sc-toast-status-color: var(--sc-info, var(--sc-base-content, #000));
157
- }
158
-
159
- .success,
160
- .error,
161
- .info,
162
- .warning {
163
- border-top: 3px solid var(--sc-toast-status-color, currentColor);
155
+ :host([status="success"]) .sonic-toast:before,
156
+ :host([status="error"]) .sonic-toast:before,
157
+ :host([status="info"]) .sonic-toast:before,
158
+ :host([status="warning"]) .sonic-toast:before {
159
+ background-color: var(--sc-_color);
164
160
  }
165
161
 
166
162
  .sonic-toast:before {
@@ -175,20 +171,12 @@ export class SonicToastItem extends LitElement {
175
171
  pointer-events: none;
176
172
  transition: 0.2s;
177
173
  border-radius: var(--sc-toast-rounded);
178
- background-color: var(--sc-toast-status-color);
179
174
  }
180
175
 
181
176
  .sonic-toast:hover:before {
182
177
  opacity: 0.025;
183
178
  }
184
179
 
185
- .info .sonic-toast-icon,
186
- .error .sonic-toast-icon,
187
- .success .sonic-toast-icon,
188
- .warning .sonic-toast-icon {
189
- color: var(--sc-toast-status-color, currentColor);
190
- }
191
-
192
180
  .sonic-toast-icon {
193
181
  position: sticky;
194
182
  top: 0;
@@ -201,16 +189,54 @@ export class SonicToastItem extends LitElement {
201
189
  `,
202
190
  ];
203
191
 
204
- @property({ type: String }) title = "";
192
+ @property() label: ToastContent = "";
205
193
  @property({ type: String }) id = "";
206
- @property({ type: String }) text = "";
207
- @property({ type: String }) status: ToastStatus = "";
194
+ @property() text: ToastContent = "";
195
+ @property({ type: String, reflect: true }) status: ToastStatus = "";
208
196
  @property({ type: Boolean }) ghost = false;
209
197
  @property({ type: Boolean }) preserve = false;
210
198
  @property({ type: Boolean }) dismissForever = false;
211
199
  @property({ type: String }) maxHeight = "10rem";
200
+ @property({ type: Boolean }) useSlot = false;
201
+ @property({ attribute: false }) styleSheet?: ToastStyleSheetInput;
212
202
  @state() visible = true;
213
203
  @state() private _titleId: string = "";
204
+ @state() private _dismissed = false;
205
+ private _adoptedStyleSheets: Array<CSSStyleSheet> = [];
206
+ private _hideTimer?: ReturnType<typeof setTimeout>;
207
+ private _hideRemaining = AUTO_HIDE_DELAY;
208
+ private _hideStartedAt = 0;
209
+ private _hovered = false;
210
+ private _focused = false;
211
+ private _hidden = false;
212
+
213
+ connectedCallback(): void {
214
+ super.connectedCallback();
215
+ this.addEventListener("mouseenter", this._onMouseEnter);
216
+ this.addEventListener("mouseleave", this._onMouseLeave);
217
+ this.addEventListener("focusin", this._onFocusIn);
218
+ this.addEventListener("focusout", this._onFocusOut);
219
+ }
220
+
221
+ disconnectedCallback(): void {
222
+ this._clearHideTimer();
223
+ this.removeEventListener("mouseenter", this._onMouseEnter);
224
+ this.removeEventListener("mouseleave", this._onMouseLeave);
225
+ this.removeEventListener("focusin", this._onFocusIn);
226
+ this.removeEventListener("focusout", this._onFocusOut);
227
+ super.disconnectedCallback();
228
+ }
229
+
230
+ protected willUpdate(changedProperties: PropertyValues): void {
231
+ if (
232
+ changedProperties.has("dismissForever") ||
233
+ changedProperties.has("id")
234
+ ) {
235
+ this._dismissed =
236
+ this.dismissForever && !!this.id && isToastDismissed(this.id);
237
+ }
238
+ super.willUpdate(changedProperties);
239
+ }
214
240
 
215
241
  // @queryAssignedElements({flatten: true, slot: main"})
216
242
  // textSlot!: HTMLElement[];
@@ -221,7 +247,7 @@ export class SonicToastItem extends LitElement {
221
247
  * - "status" pour les autres (messages informatifs)
222
248
  */
223
249
  getAriaRole(): "alert" | "status" {
224
- return this.status === "error" ? "alert" : "status";
250
+ return statusAriaRole(toStatus(this.status) ?? "default");
225
251
  }
226
252
 
227
253
  /**
@@ -230,7 +256,7 @@ export class SonicToastItem extends LitElement {
230
256
  * - "polite" pour les autres (peut attendre)
231
257
  */
232
258
  getAriaLive(): "polite" | null {
233
- return this.status === "error" ? null : "polite";
259
+ return statusAriaLive(toStatus(this.status) ?? "default");
234
260
  }
235
261
 
236
262
  /**
@@ -246,56 +272,30 @@ export class SonicToastItem extends LitElement {
246
272
  return this._titleId;
247
273
  }
248
274
 
249
- /**
250
- * Génère un label ARIA descriptif pour le bouton de fermeture
251
- */
252
- getCloseButtonLabel(): string {
253
- const statusLabels: Record<string, string> = {
254
- error: "Fermer le message d'erreur",
255
- warning: "Fermer l'avertissement",
256
- success: "Fermer le message de succès",
257
- info: "Fermer l'information",
258
- };
259
- const statusLabel = this.status
260
- ? statusLabels[this.status] || "Fermer la notification"
261
- : "Fermer la notification";
262
- return statusLabel;
263
- }
264
-
265
275
  render() {
266
- // check if the toast is dismissed
267
- if (this.dismissForever) {
268
- const dismissed = localStorage.getItem("sonic-toast-dismissed") || "{}";
269
- const dismissedObj = JSON.parse(dismissed);
270
- if (dismissedObj[this.id]) {
271
- return nothing;
272
- }
273
- }
274
-
275
- if (!this.visible) {
276
+ if (this._dismissed || !this.visible) {
276
277
  return nothing;
277
278
  }
278
279
 
279
- const titleId = this.title ? this.getTitleId() : undefined;
280
+ const titleId = this.label ? this.getTitleId() : undefined;
280
281
  // Extrait un label pour aria-label si pas de titre, en essayant de couper proprement
281
282
  const ariaLabel =
282
- !this.title && this.text
283
+ !this.label && typeof this.text === "string"
283
284
  ? this.text.length > 100
284
285
  ? this.text.substring(0, 100).replace(/\s+\S*$/, "") + "..."
285
286
  : this.text
286
287
  : undefined;
287
288
 
288
289
  const ariaLive = this.getAriaLive();
289
-
290
290
  return html`<div
291
- class="sonic-toast ${this.status} ${this.ghost ? "ghost" : ""}"
291
+ class="sonic-toast ${this.ghost ? "ghost" : ""}"
292
292
  role=${this.getAriaRole()}
293
293
  aria-live=${ariaLive || nothing}
294
294
  aria-atomic="true"
295
295
  aria-label=${ariaLabel || nothing}
296
296
  >
297
297
  <button
298
- aria-label=${this.getCloseButtonLabel()}
298
+ aria-label=${resolveToastCloseLabel(this.status)}
299
299
  class="sonic-toast-close"
300
300
  @click=${() => this.hide()}
301
301
  >
@@ -307,52 +307,128 @@ export class SonicToastItem extends LitElement {
307
307
  >
308
308
  ${this.status &&
309
309
  html`<sonic-icon
310
- name=${icon[this.status]}
310
+ name=${statusIcon[toStatus(this.status) ?? "default"]}
311
311
  class="sonic-toast-icon"
312
- size="2xl"
312
+ size="xl"
313
313
  aria-hidden="true"
314
314
  ></sonic-icon>`}
315
315
 
316
316
  <div class="sonic-toast-text">
317
- ${this.title
317
+ ${this.label
318
318
  ? html`<div class="sonic-toast-title" id=${titleId}>
319
- ${this.title}
319
+ ${renderToastContent(this.label)}
320
320
  </div>`
321
321
  : ""}
322
- ${this.text ? unsafeHTML(this.text) : ""}
322
+ ${this.useSlot ? nothing : renderToastContent(this.text)}
323
323
  <slot></slot>
324
324
  </div>
325
-
326
- ${!this.preserve ? this.autoHide() : ""}
327
325
  </div>
328
326
  </div>`;
329
327
  }
330
328
 
329
+ protected updated(_changedProperties: PropertyValues): void {
330
+ if (_changedProperties.has("styleSheet")) {
331
+ this.syncAdoptedStyleSheets();
332
+ }
333
+ if (
334
+ _changedProperties.has("preserve") ||
335
+ _changedProperties.has("visible") ||
336
+ _changedProperties.has("_dismissed")
337
+ ) {
338
+ this._syncHideTimer();
339
+ }
340
+ }
341
+
342
+ syncAdoptedStyleSheets() {
343
+ if (!(this.renderRoot instanceof ShadowRoot)) return;
344
+
345
+ const nextStyleSheets = normalizeStyleSheets(this.styleSheet);
346
+ const currentStyleSheets = this.renderRoot.adoptedStyleSheets.filter(
347
+ (sheet) => !this._adoptedStyleSheets.includes(sheet),
348
+ );
349
+
350
+ this.renderRoot.adoptedStyleSheets = [
351
+ ...currentStyleSheets,
352
+ ...nextStyleSheets,
353
+ ];
354
+ this._adoptedStyleSheets = nextStyleSheets;
355
+ }
356
+
331
357
  hide() {
358
+ this._clearHideTimer();
359
+ this._hidden = true;
332
360
  if (!HTML.getClosestElement(this, "sonic-toast")) {
333
361
  this.visible = false;
334
362
  }
335
363
 
336
364
  if (this.dismissForever) {
337
- // set in local Storage an Object with the id as key and if it's dismissed as value
338
- const dismissed = localStorage.getItem("sonic-toast-dismissed") || "{}";
339
- const dismissedObj = JSON.parse(dismissed);
340
- dismissedObj[this.id] = true;
341
- localStorage.setItem(
342
- "sonic-toast-dismissed",
343
- JSON.stringify(dismissedObj)
344
- );
365
+ markToastDismissed(this.id);
345
366
  }
346
367
  this.dispatchEvent(new CustomEvent("hide", { bubbles: true }));
347
368
  }
348
369
 
349
370
  show() {
371
+ this._hidden = false;
372
+ this._hideRemaining = AUTO_HIDE_DELAY;
350
373
  this.visible = true;
374
+ this._syncHideTimer();
351
375
  }
352
376
 
353
- autoHide() {
354
- setTimeout(() => {
377
+ private _syncHideTimer() {
378
+ const shouldRun =
379
+ !this.preserve &&
380
+ this.visible &&
381
+ !this._hidden &&
382
+ !this._dismissed &&
383
+ !this._hovered &&
384
+ !this._focused;
385
+
386
+ if (!shouldRun) {
387
+ this._pauseHideTimer();
388
+ return;
389
+ }
390
+ if (this._hideTimer) return;
391
+
392
+ this._hideStartedAt = Date.now();
393
+ this._hideTimer = setTimeout(() => {
394
+ this._hideTimer = undefined;
355
395
  this.hide();
356
- }, 6000);
396
+ }, this._hideRemaining);
357
397
  }
398
+
399
+ private _pauseHideTimer() {
400
+ if (!this._hideTimer) return;
401
+ clearTimeout(this._hideTimer);
402
+ this._hideTimer = undefined;
403
+ this._hideRemaining = Math.max(
404
+ 0,
405
+ this._hideRemaining - (Date.now() - this._hideStartedAt),
406
+ );
407
+ }
408
+
409
+ private _clearHideTimer() {
410
+ clearTimeout(this._hideTimer);
411
+ this._hideTimer = undefined;
412
+ }
413
+
414
+ private _onMouseEnter = () => {
415
+ this._hovered = true;
416
+ this._syncHideTimer();
417
+ };
418
+
419
+ private _onMouseLeave = () => {
420
+ this._hovered = false;
421
+ this._syncHideTimer();
422
+ };
423
+
424
+ private _onFocusIn = () => {
425
+ this._focused = true;
426
+ this._syncHideTimer();
427
+ };
428
+
429
+ private _onFocusOut = (e: FocusEvent) => {
430
+ if (this.contains(e.relatedTarget as Node | null)) return;
431
+ this._focused = false;
432
+ this._syncHideTimer();
433
+ };
358
434
  }
@@ -5,13 +5,33 @@ import { animate } from "@lit-labs/motion";
5
5
  import Objects from "@supersoniks/concorde/core/utils/Objects";
6
6
  import "@supersoniks/concorde/core/components/ui/icon/icon";
7
7
  import { ifDefined } from "lit/directives/if-defined.js";
8
- import { unsafeHTML } from "lit/directives/unsafe-html.js";
9
8
  import { styleMap, StyleInfo } from "lit/directives/style-map.js";
10
9
  import "@supersoniks/concorde/core/components/ui/toast/toast-item";
10
+ import { renderToastContent } from "@supersoniks/concorde/core/components/ui/toast/render-content";
11
+ import { isToastDismissed } from "@supersoniks/concorde/core/components/ui/toast/dismissed";
11
12
  import {
12
13
  Toast,
14
+ ToastContent,
13
15
  ToastStatus,
14
16
  } from "@supersoniks/concorde/core/components/ui/toast/types";
17
+
18
+ let deprecatedTitleWarned = false;
19
+
20
+ function resolveToastLabel(
21
+ conf: Pick<Toast, "label" | "title">,
22
+ ): ToastContent | undefined {
23
+ if (conf.label !== undefined) return conf.label;
24
+ if (conf.title !== undefined) {
25
+ if (!deprecatedTitleWarned) {
26
+ deprecatedTitleWarned = true;
27
+ console.warn(
28
+ "[concorde] Toast.title est déprécié, utiliser Toast.label.",
29
+ );
30
+ }
31
+ return conf.title;
32
+ }
33
+ return undefined;
34
+ }
15
35
  import { ConcordeWindow } from "@supersoniks/concorde/core/_types/types";
16
36
  import { Theme } from "@supersoniks/concorde/core/components/ui/theme/theme";
17
37
  import { sonicClassPrefix } from "@supersoniks/concorde/core/utils/Utils";
@@ -47,7 +67,7 @@ export class SonicToast extends LitElement {
47
67
  bottom: "1.25rem",
48
68
  right: "1.25rem",
49
69
  zIndex: "10000",
50
- maxWidth: "64ch",
70
+ maxWidth: "45ch",
51
71
  flexDirection: "column-reverse",
52
72
  };
53
73
  }
@@ -55,7 +75,6 @@ export class SonicToast extends LitElement {
55
75
  // ${window.parent == window ? "fixed-area" : ""}
56
76
  SonicToast.handleExistingToastDelegation();
57
77
  if (!this.toasts) return nothing;
58
-
59
78
  return html`<div style=${styleMap(styles)}>
60
79
  ${repeat(
61
80
  this.toasts,
@@ -64,7 +83,10 @@ export class SonicToast extends LitElement {
64
83
  <sonic-toast-item
65
84
  maxHeight=${isIframe ? "none" : "10rem"}
66
85
  status=${ifDefined(item.status)}
67
- title=${ifDefined(item.title)}
86
+ .label=${resolveToastLabel(item)}
87
+ .text=${item.useSlot ? undefined : item.text}
88
+ .styleSheet=${item.styleSheet}
89
+ ?useSlot=${item.useSlot}
68
90
  ?ghost=${item.ghost}
69
91
  ?dismissForever=${item.dismissForever}
70
92
  ?preserve=${item.preserve}
@@ -93,10 +115,9 @@ export class SonicToast extends LitElement {
93
115
  stabilizeOut: true,
94
116
  })}
95
117
  >
96
- <!-- Le texte est passé dans le slot et non pas en propriété pour contrer des problèmatiques de shadow-dom et d'appel exterieur (exemple: fancybox) -->
97
- ${item.text ? unsafeHTML(item.text) : ""}
118
+ ${item.useSlot ? renderToastContent(item.text) : nothing}
98
119
  </sonic-toast-item>
99
- `
120
+ `,
100
121
  )}
101
122
  </div>`;
102
123
  }
@@ -124,7 +145,21 @@ export class SonicToast extends LitElement {
124
145
 
125
146
  // Filtrer pour garder seulement les toasts qui ne correspondent pas au statut donné
126
147
  toastComponent.toasts = toastComponent.toasts.filter(
127
- (toast) => toast.status !== status
148
+ (toast) => toast.status !== status,
149
+ );
150
+ }
151
+
152
+ static removeItemById(id: string | number) {
153
+ if (SonicToast.delegateToasts) {
154
+ SonicToast.handleExistingToastDelegation();
155
+ window.parent.postMessage({ type: "removeItemById", id }, "*");
156
+ return;
157
+ }
158
+ const toastComponent: SonicToast = SonicToast.getInstance();
159
+ if (!toastComponent) return;
160
+
161
+ toastComponent.toasts = toastComponent.toasts.filter(
162
+ (toast) => toast.id !== id,
128
163
  );
129
164
  }
130
165
 
@@ -139,7 +174,7 @@ export class SonicToast extends LitElement {
139
174
  if (!toastComponent) return;
140
175
 
141
176
  toastComponent.toasts = toastComponent.toasts.filter(
142
- (item) => item.preserve
177
+ (item) => item.preserve,
143
178
  );
144
179
  }
145
180
 
@@ -159,32 +194,30 @@ export class SonicToast extends LitElement {
159
194
  }
160
195
  // Init toast area si absente (au <sonic-theme> ou <body< à défaut)
161
196
  const toastComponent = SonicToast.getInstance();
162
-
163
197
  // Ajoute le toast à la liste
164
198
  const nextId = conf.id ?? new Date().valueOf();
165
199
 
166
200
  const interactiveRegExp = new RegExp(
167
- "</a>|</.*?button>|</.*?input>|</.*?textarea>|</.*?select>"
201
+ "</a>|</.*?button>|</.*?input>|</.*?textarea>|</.*?select>",
168
202
  );
169
- const hasInteractive = interactiveRegExp.test(conf.text);
203
+ const hasInteractive =
204
+ typeof conf.text === "string" && interactiveRegExp.test(conf.text);
170
205
 
171
206
  const currentToast = {
172
207
  id: nextId,
173
208
  text: conf.text,
174
- title: conf.title,
209
+ label: resolveToastLabel(conf),
175
210
  status: conf.status,
176
211
  preserve: hasInteractive ? true : conf.preserve,
177
212
  ghost: conf.ghost,
178
213
  dismissForever: conf.dismissForever,
214
+ styleSheet: conf.styleSheet,
215
+ useSlot: conf.useSlot,
179
216
  };
180
217
 
181
218
  // check if the toast is dismissed
182
- if (conf.dismissForever && conf.id) {
183
- const dismissed = localStorage.getItem("sonic-toast-dismissed") || "{}";
184
- const dismissedObj = JSON.parse(dismissed);
185
- if (dismissedObj[conf.id]) {
186
- return null;
187
- }
219
+ if (conf.dismissForever && conf.id && isToastDismissed(conf.id)) {
220
+ return null;
188
221
  }
189
222
 
190
223
  if (toastComponent?.toasts.length) {
@@ -210,7 +243,7 @@ export class SonicToast extends LitElement {
210
243
  const toastComponent: SonicToast = SonicToast.getInstance();
211
244
  window.parent.postMessage(
212
245
  { type: "addToasts", toasts: toastComponent.toasts },
213
- "*"
246
+ "*",
214
247
  );
215
248
  toastComponent.toasts = [];
216
249
  }
@@ -220,7 +253,7 @@ export class SonicToast extends LitElement {
220
253
  SonicToast.handleExistingToastDelegation();
221
254
  window.parent.postMessage(
222
255
  { type: "removeToast", toast: toastToRemove },
223
- "*"
256
+ "*",
224
257
  );
225
258
  return;
226
259
  }
@@ -257,6 +290,10 @@ function handleIframeContexts() {
257
290
  SonicToast.removeItemsByStatus(e.data.status);
258
291
  }
259
292
 
293
+ if (e.data.type == "removeItemById") {
294
+ SonicToast.removeItemById(e.data.id);
295
+ }
296
+
260
297
  if (e.data.type == "removeTemporaryItems") {
261
298
  SonicToast.removeTemporaryItems();
262
299
  }
@@ -1,14 +1,26 @@
1
1
  import { Message } from "@supersoniks/concorde/core/_types/types";
2
+ import { TemplateResult } from "lit";
3
+ import { DirectiveResult } from "lit/directive.js";
4
+ import { ModalStyleSheetInput } from "@supersoniks/concorde/core/components/ui/modal/modal-utils";
2
5
 
3
6
  export type ToastStatus = Message["status"] | "" | "success";
4
7
 
8
+ export type ToastContent = string | TemplateResult | DirectiveResult;
9
+
10
+ export type ToastStyleSheetInput = ModalStyleSheetInput;
11
+
5
12
  // Toast
6
13
  export type Toast = {
7
14
  id?: string | number;
8
- text: string;
9
- title?: string;
15
+ text: ToastContent;
16
+ label?: ToastContent;
17
+ /** @deprecated Utiliser `label`. */
18
+ title?: ToastContent;
10
19
  status?: ToastStatus;
11
20
  preserve?: boolean;
12
21
  ghost?: boolean;
13
22
  dismissForever?: boolean;
23
+ styleSheet?: ToastStyleSheetInput;
24
+ /** Legacy: project text into the light DOM slot instead of the shadow root. */
25
+ useSlot?: boolean;
14
26
  };