@design-edito/tools 0.4.4 → 0.4.6

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 (526) hide show
  1. package/TODO.md +269 -0
  2. package/agnostic/arrays/dedupe/index.js +9 -9
  3. package/agnostic/arrays/dedupe/index.test.js +24 -0
  4. package/agnostic/arrays/find-duplicates/index.js +34 -24
  5. package/agnostic/arrays/find-duplicates/index.test.js +31 -0
  6. package/agnostic/arrays/index.d.ts +1 -1
  7. package/agnostic/arrays/index.js +1 -1
  8. package/agnostic/arrays/is-array-of/index.js +28 -26
  9. package/agnostic/arrays/is-array-of/index.test.js +56 -0
  10. package/agnostic/arrays/make/index.js +11 -8
  11. package/agnostic/arrays/make/index.test.js +10 -0
  12. package/agnostic/arrays/random-pick/index.js +40 -9
  13. package/agnostic/arrays/random-pick/index.test.js +23 -0
  14. package/agnostic/arrays/shuffle/index.js +15 -13
  15. package/agnostic/arrays/shuffle/index.test.js +14 -0
  16. package/agnostic/booleans/is-falsy/index.js +26 -12
  17. package/agnostic/booleans/is-falsy/index.test.js +26 -0
  18. package/agnostic/colors/channels/index.js +145 -19
  19. package/agnostic/colors/channels/index.test.js +64 -0
  20. package/agnostic/colors/contrast/index.js +23 -30
  21. package/agnostic/colors/contrast/index.test.js +21 -0
  22. package/agnostic/colors/convert/index.js +839 -46
  23. package/agnostic/colors/convert/index.test.js +98 -0
  24. package/agnostic/colors/cssColorsMap.js +153 -0
  25. package/agnostic/colors/distance/index.js +65 -53
  26. package/agnostic/colors/distance/index.test.js +21 -0
  27. package/agnostic/colors/grayscale/index.js +96 -137
  28. package/agnostic/colors/grayscale/index.test.js +34 -0
  29. package/agnostic/colors/invert/index.js +33 -44
  30. package/agnostic/colors/invert/index.test.js +31 -0
  31. package/agnostic/colors/lerp/index.js +74 -88
  32. package/agnostic/colors/lerp/index.test.js +55 -0
  33. package/agnostic/colors/luminance/index.js +19 -13
  34. package/agnostic/colors/luminance/index.test.js +30 -0
  35. package/agnostic/colors/palette/index.js +80 -87
  36. package/agnostic/colors/palette/index.test.js +35 -0
  37. package/agnostic/colors/rotate/index.js +41 -14
  38. package/agnostic/colors/rotate/index.test.js +45 -0
  39. package/agnostic/colors/tidy/index.js +80 -12
  40. package/agnostic/colors/tidy/index.test.js +45 -0
  41. package/agnostic/colors/typechecks/index.js +196 -25
  42. package/agnostic/colors/typechecks/index.test.js +113 -0
  43. package/agnostic/colors/types.js +1 -0
  44. package/agnostic/css/bem/index.js +135 -160
  45. package/agnostic/css/clss/index.js +66 -7
  46. package/agnostic/css/clss/index.test.js +60 -0
  47. package/agnostic/css/generate-nice-color/index.js +26 -73
  48. package/agnostic/css/generate-nice-color/index.test.js +8 -0
  49. package/agnostic/css/index.d.ts +1 -1
  50. package/agnostic/css/index.js +1 -1
  51. package/agnostic/css/is-valid-css-class-name/index.js +15 -9
  52. package/agnostic/css/is-valid-css-class-name/index.test.js +36 -0
  53. package/agnostic/css/scale/index.js +37 -37
  54. package/agnostic/css/scale/index.test.js +71 -0
  55. package/agnostic/css/styles-set/index.js +151 -169
  56. package/agnostic/errors/register/index.js +45 -51
  57. package/agnostic/errors/unknown-to-string/index.js +18 -7
  58. package/agnostic/errors/unknown-to-string/index.test.js +35 -0
  59. package/agnostic/html/get-node-ancestors/index.js +31 -8
  60. package/agnostic/html/get-node-ancestors/index.test.js +58 -0
  61. package/agnostic/html/get-position-inside-parent/index.js +13 -10
  62. package/agnostic/html/get-position-inside-parent/index.test.js +56 -0
  63. package/agnostic/html/hyper-json/cast/index.js +137 -24
  64. package/agnostic/html/hyper-json/index.js +23 -50
  65. package/agnostic/html/hyper-json/method/index.js +10 -7
  66. package/agnostic/html/hyper-json/serialize/index.js +91 -11
  67. package/agnostic/html/hyper-json/smart-tags/coalesced/add/index.js +16 -24
  68. package/agnostic/html/hyper-json/smart-tags/coalesced/addclass/index.js +30 -24
  69. package/agnostic/html/hyper-json/smart-tags/coalesced/and/index.js +15 -24
  70. package/agnostic/html/hyper-json/smart-tags/coalesced/append/index.js +36 -24
  71. package/agnostic/html/hyper-json/smart-tags/coalesced/at/index.js +47 -24
  72. package/agnostic/html/hyper-json/smart-tags/coalesced/call/index.js +50 -24
  73. package/agnostic/html/hyper-json/smart-tags/coalesced/clone/index.js +11 -24
  74. package/agnostic/html/hyper-json/smart-tags/coalesced/deleteproperties/index.js +49 -24
  75. package/agnostic/html/hyper-json/smart-tags/coalesced/equals/index.js +24 -24
  76. package/agnostic/html/hyper-json/smart-tags/coalesced/getattribute/index.js +28 -24
  77. package/agnostic/html/hyper-json/smart-tags/coalesced/getproperties/index.js +21 -24
  78. package/agnostic/html/hyper-json/smart-tags/coalesced/getproperty/index.js +73 -26
  79. package/agnostic/html/hyper-json/smart-tags/coalesced/hjparse/index.js +24 -24
  80. package/agnostic/html/hyper-json/smart-tags/coalesced/hjstringify/index.js +93 -28
  81. package/agnostic/html/hyper-json/smart-tags/coalesced/if/index.js +22 -24
  82. package/agnostic/html/hyper-json/smart-tags/coalesced/index.d.ts +14 -14
  83. package/agnostic/html/hyper-json/smart-tags/coalesced/index.js +14 -14
  84. package/agnostic/html/hyper-json/smart-tags/coalesced/initialize/index.js +39 -24
  85. package/agnostic/html/hyper-json/smart-tags/coalesced/join/index.js +18 -24
  86. package/agnostic/html/hyper-json/smart-tags/coalesced/length/index.js +23 -24
  87. package/agnostic/html/hyper-json/smart-tags/coalesced/map/index.js +33 -24
  88. package/agnostic/html/hyper-json/smart-tags/coalesced/negate/index.js +11 -24
  89. package/agnostic/html/hyper-json/smart-tags/coalesced/notrailing/index.js +35 -24
  90. package/agnostic/html/hyper-json/smart-tags/coalesced/or/index.js +15 -24
  91. package/agnostic/html/hyper-json/smart-tags/coalesced/pickrandom/index.js +19 -24
  92. package/agnostic/html/hyper-json/smart-tags/coalesced/populate/index.js +61 -24
  93. package/agnostic/html/hyper-json/smart-tags/coalesced/print/index.js +25 -24
  94. package/agnostic/html/hyper-json/smart-tags/coalesced/push/index.js +11 -24
  95. package/agnostic/html/hyper-json/smart-tags/coalesced/pusheach/index.js +28 -24
  96. package/agnostic/html/hyper-json/smart-tags/coalesced/recordtoarray/index.js +11 -24
  97. package/agnostic/html/hyper-json/smart-tags/coalesced/removeattribute/index.js +58 -24
  98. package/agnostic/html/hyper-json/smart-tags/coalesced/removeclass/index.js +30 -24
  99. package/agnostic/html/hyper-json/smart-tags/coalesced/renameproperty/index.js +34 -24
  100. package/agnostic/html/hyper-json/smart-tags/coalesced/replace/index.js +56 -26
  101. package/agnostic/html/hyper-json/smart-tags/coalesced/select/index.js +34 -24
  102. package/agnostic/html/hyper-json/smart-tags/coalesced/set/index.js +31 -24
  103. package/agnostic/html/hyper-json/smart-tags/coalesced/setattribute/index.js +58 -24
  104. package/agnostic/html/hyper-json/smart-tags/coalesced/setproperty/index.js +237 -26
  105. package/agnostic/html/hyper-json/smart-tags/coalesced/sorton/index.js +93 -24
  106. package/agnostic/html/hyper-json/smart-tags/coalesced/split/index.js +22 -24
  107. package/agnostic/html/hyper-json/smart-tags/coalesced/spread/index.js +24 -24
  108. package/agnostic/html/hyper-json/smart-tags/coalesced/toarray/index.js +12 -24
  109. package/agnostic/html/hyper-json/smart-tags/coalesced/toboolean/index.js +12 -24
  110. package/agnostic/html/hyper-json/smart-tags/coalesced/toelement/index.js +19 -24
  111. package/agnostic/html/hyper-json/smart-tags/coalesced/toggleclass/index.js +30 -24
  112. package/agnostic/html/hyper-json/smart-tags/coalesced/tonodelist/index.js +12 -24
  113. package/agnostic/html/hyper-json/smart-tags/coalesced/tonull/index.js +11 -24
  114. package/agnostic/html/hyper-json/smart-tags/coalesced/tonumber/index.js +12 -24
  115. package/agnostic/html/hyper-json/smart-tags/coalesced/torecord/index.js +12 -24
  116. package/agnostic/html/hyper-json/smart-tags/coalesced/toref/index.js +12 -24
  117. package/agnostic/html/hyper-json/smart-tags/coalesced/tostring/index.js +12 -24
  118. package/agnostic/html/hyper-json/smart-tags/coalesced/totext/index.js +12 -24
  119. package/agnostic/html/hyper-json/smart-tags/coalesced/transformselected/index.js +86 -24
  120. package/agnostic/html/hyper-json/smart-tags/coalesced/trim/index.js +16 -24
  121. package/agnostic/html/hyper-json/smart-tags/index.js +31 -10
  122. package/agnostic/html/hyper-json/smart-tags/isolated/any/index.js +14 -11
  123. package/agnostic/html/hyper-json/smart-tags/isolated/array/index.js +14 -11
  124. package/agnostic/html/hyper-json/smart-tags/isolated/boolean/index.js +13 -24
  125. package/agnostic/html/hyper-json/smart-tags/isolated/element/index.js +26 -24
  126. package/agnostic/html/hyper-json/smart-tags/isolated/get/index.js +20 -24
  127. package/agnostic/html/hyper-json/smart-tags/isolated/guess/index.js +59 -24
  128. package/agnostic/html/hyper-json/smart-tags/isolated/index.d.ts +1 -1
  129. package/agnostic/html/hyper-json/smart-tags/isolated/index.js +1 -1
  130. package/agnostic/html/hyper-json/smart-tags/isolated/nodelist/index.js +20 -24
  131. package/agnostic/html/hyper-json/smart-tags/isolated/null/index.js +10 -11
  132. package/agnostic/html/hyper-json/smart-tags/isolated/number/index.js +18 -24
  133. package/agnostic/html/hyper-json/smart-tags/isolated/record/index.js +14 -24
  134. package/agnostic/html/hyper-json/smart-tags/isolated/ref/index.js +45 -25
  135. package/agnostic/html/hyper-json/smart-tags/isolated/string/index.js +18 -24
  136. package/agnostic/html/hyper-json/smart-tags/isolated/text/index.js +20 -24
  137. package/agnostic/html/hyper-json/transformer/index.js +113 -9
  138. package/agnostic/html/hyper-json/tree/index.js +423 -24
  139. package/agnostic/html/hyper-json/types/index.js +28 -7
  140. package/agnostic/html/hyper-json/utils/index.js +516 -24
  141. package/agnostic/html/index.d.ts +2 -2
  142. package/agnostic/html/index.js +2 -2
  143. package/agnostic/html/insert-node/index.js +28 -7
  144. package/agnostic/html/insert-node/index.test.js +73 -0
  145. package/agnostic/html/placeholders/index.js +26 -31
  146. package/agnostic/html/replace-in-element/index.js +31 -25
  147. package/agnostic/html/replace-in-element/index.test.js +80 -0
  148. package/agnostic/html/selector-to-element/index.js +53 -33
  149. package/agnostic/html/selector-to-element/index.test.js +69 -0
  150. package/agnostic/html/string-to-nodes/index.js +24 -19
  151. package/agnostic/html/string-to-nodes/index.test.js +54 -0
  152. package/agnostic/index.d.ts +1 -1
  153. package/agnostic/index.js +1 -1
  154. package/agnostic/misc/assert/index.js +60 -58
  155. package/agnostic/misc/cast/index.js +132 -23
  156. package/agnostic/misc/cast/index.test.js +134 -0
  157. package/agnostic/misc/connection/index.js +55 -30
  158. package/agnostic/misc/connection/index.test.js +143 -0
  159. package/agnostic/misc/crawler/index.js +68 -44
  160. package/agnostic/misc/crawler/index.test.js +56 -0
  161. package/agnostic/misc/crossenv/detect-runtime/index.js +41 -16
  162. package/agnostic/misc/crossenv/detect-runtime/index.test.js +24 -0
  163. package/agnostic/misc/crossenv/types.js +21 -7
  164. package/agnostic/misc/crossenv/window/index.js +49 -13
  165. package/agnostic/misc/crossenv/window/index.test.js +24 -0
  166. package/agnostic/misc/data-size/index.js +182 -296
  167. package/agnostic/misc/data-size/index.test.js +100 -0
  168. package/agnostic/misc/data-size/types.js +1 -0
  169. package/agnostic/misc/index.d.ts +1 -1
  170. package/agnostic/misc/index.js +1 -1
  171. package/agnostic/misc/is-constructor-function/index.js +13 -7
  172. package/agnostic/misc/is-constructor-function/index.test.js +36 -0
  173. package/agnostic/misc/is-nullish/index.js +26 -11
  174. package/agnostic/misc/is-nullish/index.test.js +44 -0
  175. package/agnostic/misc/logs/logger/index.js +115 -142
  176. package/agnostic/misc/logs/make-text-block/index.js +14 -7
  177. package/agnostic/misc/logs/styles/index.js +30 -7
  178. package/agnostic/misc/lorem-ipsum/index.js +51 -186
  179. package/agnostic/misc/lorem-ipsum/index.test.js +49 -0
  180. package/agnostic/misc/normalize-extension/index.js +99 -90
  181. package/agnostic/misc/normalize-extension/index.test.js +40 -0
  182. package/agnostic/misc/outcome/index.js +21 -11
  183. package/agnostic/misc/outcome/index.test.js +40 -0
  184. package/agnostic/numbers/absolute-modulo/index.js +10 -7
  185. package/agnostic/numbers/absolute-modulo/index.test.js +23 -0
  186. package/agnostic/numbers/approximate-rational/index.js +86 -71
  187. package/agnostic/numbers/approximate-rational/index.test.js +90 -0
  188. package/agnostic/numbers/clamp/index.js +13 -7
  189. package/agnostic/numbers/clamp/index.test.js +24 -0
  190. package/agnostic/numbers/geometric-progressions/index.js +26 -7
  191. package/agnostic/numbers/geometric-progressions/index.test.js +45 -0
  192. package/agnostic/numbers/index.d.ts +1 -1
  193. package/agnostic/numbers/index.js +1 -1
  194. package/agnostic/numbers/interpolate/index.js +25 -12
  195. package/agnostic/numbers/interpolate/index.test.js +40 -0
  196. package/agnostic/numbers/round/index.js +33 -11
  197. package/agnostic/numbers/round/index.test.js +56 -0
  198. package/agnostic/objects/deep-get-property/index.js +30 -26
  199. package/agnostic/objects/deep-get-property/index.test.js +59 -0
  200. package/agnostic/objects/enums/is-in-enum/index.js +18 -7
  201. package/agnostic/objects/enums/is-in-enum/index.test.js +100 -0
  202. package/agnostic/objects/flatten-getters/index.js +15 -16
  203. package/agnostic/objects/flatten-getters/index.test.js +78 -0
  204. package/agnostic/objects/index.d.ts +3 -3
  205. package/agnostic/objects/index.js +3 -3
  206. package/agnostic/objects/is-object/index.js +18 -9
  207. package/agnostic/objects/is-object/index.test.js +60 -0
  208. package/agnostic/objects/is-record/index.js +13 -7
  209. package/agnostic/objects/is-record/index.test.js +48 -0
  210. package/agnostic/objects/record-format/index.js +18 -14
  211. package/agnostic/objects/record-format/index.test.js +92 -0
  212. package/agnostic/objects/record-map/index.js +18 -7
  213. package/agnostic/objects/record-map/index.test.js +56 -0
  214. package/agnostic/objects/sort-keys/index.js +15 -13
  215. package/agnostic/objects/sort-keys/index.test.js +37 -0
  216. package/agnostic/objects/validation/index.js +21 -10
  217. package/agnostic/objects/validation/index.test.js +72 -0
  218. package/agnostic/optim/index.d.ts +1 -1
  219. package/agnostic/optim/index.js +1 -1
  220. package/agnostic/optim/memoize/index.js +24 -18
  221. package/agnostic/optim/memoize/index.test.js +30 -0
  222. package/agnostic/optim/throttle-debounce/index.js +120 -104
  223. package/agnostic/optim/throttle-debounce/index.test.js +44 -0
  224. package/agnostic/optim/throttle-debounce/types.js +1 -0
  225. package/agnostic/random/hex-char/index.js +9 -9
  226. package/agnostic/random/hex-char/index.test.js +20 -0
  227. package/agnostic/random/index.d.ts +1 -1
  228. package/agnostic/random/index.js +1 -1
  229. package/agnostic/random/random/index.js +19 -9
  230. package/agnostic/random/random/index.test.js +73 -0
  231. package/agnostic/random/uuid/index.js +31 -12
  232. package/agnostic/random/uuid/index.test.js +45 -0
  233. package/agnostic/regexps/index.js +126 -86
  234. package/agnostic/regexps/index.test.js +108 -0
  235. package/agnostic/sanitization/file-name/index.js +25 -7
  236. package/agnostic/sanitization/file-name/index.test.js +23 -0
  237. package/agnostic/sanitization/html/index.js +172 -116
  238. package/agnostic/sanitization/path/index.js +23 -13
  239. package/agnostic/sanitization/path/index.test.js +18 -0
  240. package/agnostic/sanitization/types.js +1 -0
  241. package/agnostic/sanitization/user-input/index.js +36 -26
  242. package/agnostic/sanitization/user-input/index.test.js +31 -0
  243. package/agnostic/strings/char-codes/index.js +123 -57
  244. package/agnostic/strings/matches/index.js +38 -11
  245. package/agnostic/strings/normalize-indent/index.js +34 -18
  246. package/agnostic/strings/parse-table/index.js +153 -84
  247. package/agnostic/strings/replace-all/index.js +36 -17
  248. package/agnostic/strings/to-alphanum/index.js +23 -10
  249. package/agnostic/strings/trim/index.js +24 -9
  250. package/agnostic/time/dates/format-date/index.js +140 -74
  251. package/agnostic/time/duration/index.js +106 -142
  252. package/agnostic/time/timeout/index.js +24 -18
  253. package/agnostic/time/transitions/index.js +200 -156
  254. package/agnostic/time/wait/index.js +11 -7
  255. package/agnostic/typescript/types.js +1 -0
  256. package/components/BeforeAfter/index.controlled.js +95 -0
  257. package/components/BeforeAfter/index.js +54 -152
  258. package/components/BeforeAfter/utils.js +9 -0
  259. package/components/Disclaimer/index.js +50 -9
  260. package/components/Drawer/index.js +82 -88
  261. package/components/EventListener/index.js +29 -47
  262. package/components/Gallery/index.js +146 -190
  263. package/components/Gallery/utils.js +12 -0
  264. package/components/Image/index.js +67 -106
  265. package/components/IntersectionObserver/index.js +62 -9
  266. package/components/Overlayer/index.js +59 -66
  267. package/components/Paginator/index.js +125 -9
  268. package/components/ResizeObserver/index.js +68 -9
  269. package/components/ResizeObserver/style.module.css +0 -0
  270. package/components/Scrllgngn/index.js +176 -183
  271. package/components/ScrollListener/index.js +97 -171
  272. package/components/ScrollListener/utils.js +51 -0
  273. package/components/Sequencer/index.controlled.js +67 -0
  274. package/components/Sequencer/index.js +105 -160
  275. package/components/ShadowRoot/index.js +42 -63
  276. package/components/Subtitles/index.js +107 -13
  277. package/components/Subtitles/types.js +1 -0
  278. package/components/Subtitles/utils.js +102 -0
  279. package/components/Theatre/index.js +89 -9
  280. package/components/UIModule/index.js +156 -146
  281. package/components/Video/index.d.ts +10 -0
  282. package/components/Video/index.js +292 -503
  283. package/components/Video/utils.js +137 -0
  284. package/components/_WIP_AudioQuote/index.js +1 -0
  285. package/components/_WIP_Icon/index.js +1 -0
  286. package/components/index.d.ts +2 -2
  287. package/components/index.js +2 -2
  288. package/components/public-classnames.js +18 -0
  289. package/components/utils/index.js +12 -7
  290. package/components/utils/types.js +1 -0
  291. package/index.d.ts +1 -2
  292. package/index.js +1 -2
  293. package/node/@aws-s3/index.test.js +6 -0
  294. package/node/@aws-s3/storage/directory/copy-dir/index.js +68 -9
  295. package/node/@aws-s3/storage/directory/index.d.ts +1 -1
  296. package/node/@aws-s3/storage/directory/index.js +1 -1
  297. package/node/@aws-s3/storage/directory/list/index.js +33 -9
  298. package/node/@aws-s3/storage/directory/move-dir/index.js +69 -9
  299. package/node/@aws-s3/storage/directory/remove-dir/index.js +59 -9
  300. package/node/@aws-s3/storage/file/copy/index.js +43 -9
  301. package/node/@aws-s3/storage/file/download/index.js +30 -9
  302. package/node/@aws-s3/storage/file/exists/index.js +37 -9
  303. package/node/@aws-s3/storage/file/index.d.ts +1 -1
  304. package/node/@aws-s3/storage/file/index.js +1 -1
  305. package/node/@aws-s3/storage/file/move/index.js +60 -9
  306. package/node/@aws-s3/storage/file/remove/index.js +38 -9
  307. package/node/@aws-s3/storage/file/stat/index.js +34 -9
  308. package/node/@aws-s3/storage/file/upload/index.js +55 -9
  309. package/node/@design-edito/index.js +1 -0
  310. package/node/@express/@multer/index.js +61 -45
  311. package/node/@google-cloud/storage/bucket/get-metadata/index.js +25 -21
  312. package/node/@google-cloud/storage/directory/copy-dir/index.js +38 -9
  313. package/node/@google-cloud/storage/directory/list/index.js +29 -9
  314. package/node/@google-cloud/storage/directory/move-dir/index.js +45 -9
  315. package/node/@google-cloud/storage/directory/remove-dir/index.js +36 -9
  316. package/node/@google-cloud/storage/file/copy/index.js +37 -9
  317. package/node/@google-cloud/storage/file/download/index.js +28 -9
  318. package/node/@google-cloud/storage/file/exists/index.js +26 -9
  319. package/node/@google-cloud/storage/file/generate-signed-url/index.js +33 -27
  320. package/node/@google-cloud/storage/file/get-metadata/index.js +28 -23
  321. package/node/@google-cloud/storage/file/get-permissions/index.js +25 -23
  322. package/node/@google-cloud/storage/file/index.d.ts +1 -1
  323. package/node/@google-cloud/storage/file/index.js +1 -1
  324. package/node/@google-cloud/storage/file/move/index.js +40 -9
  325. package/node/@google-cloud/storage/file/remove/index.js +36 -9
  326. package/node/@google-cloud/storage/file/revoke-signed-urls/index.js +32 -29
  327. package/node/@google-cloud/storage/file/stat/index.js +35 -9
  328. package/node/@google-cloud/storage/file/update-metadata/index.js +30 -23
  329. package/node/@google-cloud/storage/file/upload/index.js +47 -9
  330. package/node/cloud-storage/clients/index.js +35 -13
  331. package/node/cloud-storage/operations/copy-dir/index.js +30 -34
  332. package/node/cloud-storage/operations/copy-file/index.js +30 -34
  333. package/node/cloud-storage/operations/download-file/index.js +30 -34
  334. package/node/cloud-storage/operations/exists-file/index.js +30 -34
  335. package/node/cloud-storage/operations/list-dir/index.js +29 -34
  336. package/node/cloud-storage/operations/move-dir/index.js +30 -34
  337. package/node/cloud-storage/operations/move-file/index.js +30 -34
  338. package/node/cloud-storage/operations/remove-dir/index.js +29 -34
  339. package/node/cloud-storage/operations/remove-file/index.js +29 -34
  340. package/node/cloud-storage/operations/stat-file/index.js +29 -34
  341. package/node/cloud-storage/operations/upload-file/index.js +30 -34
  342. package/node/encryption/@aes-256-gcm/buffer/index.js +31 -26
  343. package/node/encryption/@aes-256-gcm/index.d.ts +1 -1
  344. package/node/encryption/@aes-256-gcm/index.js +1 -1
  345. package/node/encryption/@aes-256-gcm/uint8-array/index.js +57 -11
  346. package/node/encryption/key/index.js +19 -14
  347. package/node/files/is-in-directory/index.js +11 -10
  348. package/node/files/read-write/index.js +11 -17
  349. package/node/files/subpaths/index.js +156 -113
  350. package/node/ftps/directory/copy-dir/index.js +58 -9
  351. package/node/ftps/directory/index.d.ts +1 -1
  352. package/node/ftps/directory/index.js +1 -1
  353. package/node/ftps/directory/list/index.js +25 -9
  354. package/node/ftps/directory/move-dir/index.js +41 -9
  355. package/node/ftps/directory/remove-dir/index.js +42 -9
  356. package/node/ftps/file/copy/index.js +45 -9
  357. package/node/ftps/file/download/index.js +30 -9
  358. package/node/ftps/file/exists/index.js +39 -9
  359. package/node/ftps/file/index.d.ts +1 -1
  360. package/node/ftps/file/index.js +1 -1
  361. package/node/ftps/file/move/index.js +49 -9
  362. package/node/ftps/file/remove/index.js +40 -9
  363. package/node/ftps/file/stat/index.js +31 -9
  364. package/node/ftps/file/upload/index.js +44 -9
  365. package/node/images/create/index.js +10 -18
  366. package/node/images/format/index.js +264 -251
  367. package/node/images/index.d.ts +1 -1
  368. package/node/images/index.js +1 -1
  369. package/node/images/metadata/index.js +10 -18
  370. package/node/images/transform/index.js +168 -203
  371. package/node/images/transform/operations/blur/index.js +12 -10
  372. package/node/images/transform/operations/brighten/index.js +12 -10
  373. package/node/images/transform/operations/extend/index.js +26 -17
  374. package/node/images/transform/operations/extract/index.js +17 -10
  375. package/node/images/transform/operations/flatten/index.js +21 -17
  376. package/node/images/transform/operations/flip/index.js +3 -7
  377. package/node/images/transform/operations/flop/index.js +3 -7
  378. package/node/images/transform/operations/hue/index.js +14 -10
  379. package/node/images/transform/operations/index.d.ts +2 -2
  380. package/node/images/transform/operations/index.js +2 -2
  381. package/node/images/transform/operations/level/index.js +15 -10
  382. package/node/images/transform/operations/lighten/index.js +14 -10
  383. package/node/images/transform/operations/normalize/index.js +15 -10
  384. package/node/images/transform/operations/overlay/index.js +90 -17
  385. package/node/images/transform/operations/resize/index.js +47 -17
  386. package/node/images/transform/operations/rotate/index.js +21 -17
  387. package/node/images/transform/operations/saturate/index.js +16 -10
  388. package/node/images/types.js +34 -9
  389. package/node/images/utils/index.js +85 -19
  390. package/node/index.d.ts +3 -3
  391. package/node/index.js +3 -3
  392. package/node/process/on-exit/index.js +45 -28
  393. package/node/process/prompt-continue/index.js +29 -16
  394. package/node/process/spawner/index.js +104 -80
  395. package/node/sftp/directory/copy-dir/index.js +55 -9
  396. package/node/sftp/directory/list/index.js +23 -9
  397. package/node/sftp/directory/move-dir/index.js +38 -9
  398. package/node/sftp/directory/remove-dir/index.js +42 -9
  399. package/node/sftp/file/copy/index.js +40 -9
  400. package/node/sftp/file/download/index.js +27 -9
  401. package/node/sftp/file/exists/index.js +30 -9
  402. package/node/sftp/file/index.d.ts +2 -2
  403. package/node/sftp/file/index.js +2 -2
  404. package/node/sftp/file/move/index.js +42 -9
  405. package/node/sftp/file/remove/index.js +33 -9
  406. package/node/sftp/file/stat/index.js +28 -9
  407. package/node/sftp/file/upload/index.js +36 -9
  408. package/package.json +1 -8
  409. package/chunks/chunk-2FNCUXAX.js +0 -27
  410. package/chunks/chunk-2GJSPEO4.js +0 -31
  411. package/chunks/chunk-2IGP6V77.js +0 -22
  412. package/chunks/chunk-3QI2MSDK.js +0 -34
  413. package/chunks/chunk-3RNLPW7B.js +0 -101
  414. package/chunks/chunk-3RZMW72G.js +0 -33
  415. package/chunks/chunk-4KLCJX2T.js +0 -36
  416. package/chunks/chunk-4LTN4SCD.js +0 -55
  417. package/chunks/chunk-4Q4T7QQO.js +0 -27
  418. package/chunks/chunk-4Q5TKOIG.js +0 -53
  419. package/chunks/chunk-57YKZBJR.js +0 -29
  420. package/chunks/chunk-5H3IRSOB.js +0 -8
  421. package/chunks/chunk-5NTPCRFH.js +0 -32
  422. package/chunks/chunk-5TM235Z3.js +0 -40
  423. package/chunks/chunk-5WVGUZL5.js +0 -35
  424. package/chunks/chunk-6XL25OZX.js +0 -12
  425. package/chunks/chunk-75BICI4L.js +0 -20
  426. package/chunks/chunk-77SWZUHV.js +0 -31
  427. package/chunks/chunk-AC4UMIWM.js +0 -124
  428. package/chunks/chunk-AG4VERYN.js +0 -25
  429. package/chunks/chunk-AP3VYSVF.js +0 -36
  430. package/chunks/chunk-ASXK7XCC.js +0 -18
  431. package/chunks/chunk-AVIMGMTP.js +0 -17
  432. package/chunks/chunk-B4HGXMP3.js +0 -20
  433. package/chunks/chunk-B5V7D2ZL.js +0 -77
  434. package/chunks/chunk-B6653QJD.js +0 -37
  435. package/chunks/chunk-BCX4HPD7.js +0 -33
  436. package/chunks/chunk-CVMYA5XK.js +0 -632
  437. package/chunks/chunk-DMWGHBIL.js +0 -25
  438. package/chunks/chunk-DNIOWD7K.js +0 -8
  439. package/chunks/chunk-E2ZY3SEW.js +0 -26
  440. package/chunks/chunk-E6MSDKON.js +0 -13
  441. package/chunks/chunk-E7BBN5JC.js +0 -22
  442. package/chunks/chunk-EX2QKFY5.js +0 -41
  443. package/chunks/chunk-EYYNCLVR.js +0 -33
  444. package/chunks/chunk-F2YJXIT7.js +0 -78
  445. package/chunks/chunk-FSNNEPY5.js +0 -37
  446. package/chunks/chunk-GG4EFNMU.js +0 -89
  447. package/chunks/chunk-GQBFMP6N.js +0 -32
  448. package/chunks/chunk-H3HRQ52T.js +0 -32
  449. package/chunks/chunk-H4PP6AHP.js +0 -15
  450. package/chunks/chunk-HC6ZOHCS.js +0 -14
  451. package/chunks/chunk-HMMPT3UM.js +0 -47
  452. package/chunks/chunk-HQLRJ7XW.js +0 -12
  453. package/chunks/chunk-HYGUIF2O.js +0 -23
  454. package/chunks/chunk-HYPEWMYZ.js +0 -10
  455. package/chunks/chunk-I5MRXMHR.js +0 -32
  456. package/chunks/chunk-I6ZP5T5V.js +0 -10
  457. package/chunks/chunk-IEZ3O5OF.js +0 -40
  458. package/chunks/chunk-IPRWXI27.js +0 -31
  459. package/chunks/chunk-IRKZUMWZ.js +0 -38
  460. package/chunks/chunk-ISJONMNA.js +0 -16
  461. package/chunks/chunk-JB27MAKY.js +0 -22
  462. package/chunks/chunk-JZ6GM444.js +0 -43
  463. package/chunks/chunk-K5UF634H.js +0 -25
  464. package/chunks/chunk-LEBGVBYD.js +0 -138
  465. package/chunks/chunk-LJ5MGLLU.js +0 -56
  466. package/chunks/chunk-LUAYN7VJ.js +0 -27
  467. package/chunks/chunk-MDVGDZU6.js +0 -25
  468. package/chunks/chunk-ML22TIBW.js +0 -37
  469. package/chunks/chunk-MO4TRYNI.js +0 -29
  470. package/chunks/chunk-MSU7JU63.js +0 -49
  471. package/chunks/chunk-NIBRPZJD.js +0 -58
  472. package/chunks/chunk-O32IRXDX.js +0 -78
  473. package/chunks/chunk-OAX7GS7C.js +0 -36
  474. package/chunks/chunk-OBSTP7YR.js +0 -257
  475. package/chunks/chunk-OFCSIK6J.js +0 -13
  476. package/chunks/chunk-OFYGPRWE.js +0 -21
  477. package/chunks/chunk-OGBUSUE6.js +0 -12
  478. package/chunks/chunk-OSAXBA7G.js +0 -10
  479. package/chunks/chunk-OT7QXCH6.js +0 -23
  480. package/chunks/chunk-P4J6S2WQ.js +0 -64
  481. package/chunks/chunk-PUQUSA6S.js +0 -12
  482. package/chunks/chunk-PYJKFOMV.js +0 -193
  483. package/chunks/chunk-QHEWBOQI.js +0 -19
  484. package/chunks/chunk-QXAJXTXV.js +0 -19
  485. package/chunks/chunk-R3AWQXMY.js +0 -20
  486. package/chunks/chunk-R66GH2MQ.js +0 -38
  487. package/chunks/chunk-RART44AF.js +0 -21
  488. package/chunks/chunk-REXSJULD.js +0 -28
  489. package/chunks/chunk-RJRNYRPM.js +0 -23
  490. package/chunks/chunk-RKX6KLPQ.js +0 -47
  491. package/chunks/chunk-RW7VAKJW.js +0 -15
  492. package/chunks/chunk-RZOR7ZC3.js +0 -35
  493. package/chunks/chunk-S2UZ3HZR.js +0 -31
  494. package/chunks/chunk-SYH5LYQC.js +0 -28
  495. package/chunks/chunk-TAXFCVFE.js +0 -30
  496. package/chunks/chunk-TNZGRXKJ.js +0 -24
  497. package/chunks/chunk-TRFZSKNB.js +0 -32
  498. package/chunks/chunk-U664BT44.js +0 -45
  499. package/chunks/chunk-U6SGKHHA.js +0 -32
  500. package/chunks/chunk-UTQNGKGQ.js +0 -60
  501. package/chunks/chunk-VPBZS3S4.js +0 -27
  502. package/chunks/chunk-W5A2TON3.js +0 -10
  503. package/chunks/chunk-W7PJ5NQQ.js +0 -23
  504. package/chunks/chunk-WGRQXVBK.js +0 -207
  505. package/chunks/chunk-WIFHP4X7.js +0 -56
  506. package/chunks/chunk-WL4WNJ2Y.js +0 -39
  507. package/chunks/chunk-WNDMYNDU.js +0 -8
  508. package/chunks/chunk-WSFCRVEQ.js +0 -9
  509. package/chunks/chunk-WZS4Q3G3.js +0 -36
  510. package/chunks/chunk-X4YSGOKG.js +0 -2673
  511. package/chunks/chunk-XA4HVHJ4.js +0 -18
  512. package/chunks/chunk-XEQ2PBT2.js +0 -20
  513. package/chunks/chunk-XFB4PUXO.js +0 -78
  514. package/chunks/chunk-XIIJYVJZ.js +0 -15
  515. package/chunks/chunk-XNF5MLCQ.js +0 -14
  516. package/chunks/chunk-XQUMWHCH.js +0 -25
  517. package/chunks/chunk-YA2YCZUF.js +0 -8
  518. package/chunks/chunk-YDIBNEGA.js +0 -9
  519. package/chunks/chunk-YHMR7IBA.js +0 -24
  520. package/chunks/chunk-YWSXCFYY.js +0 -61
  521. package/chunks/chunk-YY3TSU22.js +0 -48
  522. package/chunks/chunk-ZAP3ELDE.js +0 -40
  523. package/chunks/chunk-ZJNQRKEJ.js +0 -105
  524. package/chunks/chunk-ZJR5ASR3.js +0 -26
  525. package/chunks/index.d.ts +0 -1
  526. package/chunks/index.js +0 -1
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Convertit un timecode au format SRT (hh:mm:ss,ms) en millisecondes.
3
+ * @param timecode - Timecode sous forme de chaîne (ex: '00:01:23,456')
4
+ * @returns Le temps en millisecondes
5
+ */
6
+ export const getTimecodeToMs = (timecode) => {
7
+ const [hours = '0', minutes = '0', secondsAndMs = '0,0'] = timecode.split(':');
8
+ const [seconds = '0', milliseconds = '0'] = secondsAndMs.split(',');
9
+ let result = parseInt(hours) * 60 * 60 * 1000;
10
+ result += parseInt(minutes) * 60 * 1000;
11
+ result += parseInt(seconds) * 1000;
12
+ result += parseInt(milliseconds);
13
+ return result;
14
+ };
15
+ /**
16
+ * Parse un texte brut de sous-titres SRT en une liste d'objets ParsedSub.
17
+ * @param rawSubs - Sous-titres bruts au format SRT
18
+ * @returns Tableau d'objets ParsedSub
19
+ */
20
+ export const parseSubs = (rawSubs) => {
21
+ const numberRegex = /^\d+$/;
22
+ const timecodeRegex = /^[0-9]+:[0-9]+:[0-9]+,[0-9]+\s*-->\s*[0-9]+:[0-9]+:[0-9]+,[0-9]+$/;
23
+ const parsedSubs = [];
24
+ rawSubs.split('\n').forEach(line => {
25
+ if (line.trim() === '')
26
+ return;
27
+ const lastParsedSub = parsedSubs[parsedSubs.length - 1];
28
+ const matchId = line.match(numberRegex);
29
+ const matchTimecode = line.match(timecodeRegex);
30
+ // id
31
+ if (matchId !== null) {
32
+ if (lastParsedSub === undefined
33
+ || lastParsedSub.content !== undefined) {
34
+ const parsedSub = { id: parseInt(line) };
35
+ parsedSubs.push(parsedSub);
36
+ return;
37
+ }
38
+ }
39
+ // timecode
40
+ if (matchTimecode !== null) {
41
+ if (lastParsedSub?.id !== undefined) {
42
+ const [rawStart = '', rawEnd = ''] = line.split('-->');
43
+ const startTime = rawStart.trim();
44
+ const endTime = rawEnd.trim();
45
+ lastParsedSub.start = getTimecodeToMs(startTime);
46
+ lastParsedSub.end = getTimecodeToMs(endTime);
47
+ return;
48
+ }
49
+ }
50
+ // content
51
+ if (lastParsedSub?.id !== undefined
52
+ && lastParsedSub?.start !== undefined
53
+ && lastParsedSub?.end !== undefined) {
54
+ if (lastParsedSub?.content !== undefined) {
55
+ lastParsedSub.content += '\n' + line;
56
+ return;
57
+ }
58
+ lastParsedSub.content = line;
59
+ }
60
+ });
61
+ return parsedSubs;
62
+ };
63
+ /**
64
+ * Calcule les groupes de sous-titres avec leurs bornes (startId, endId).
65
+ * @param subsGroups - Tableau d'IDs de fin de groupe
66
+ * @param highestSubId - ID le plus élevé des sous-titres
67
+ * @returns Tableau de SubGroupBoundaries
68
+ */
69
+ export const computeSubGroupsWithBoundaries = (subsGroups, highestSubId) => {
70
+ const fallback = [{ startId: 1, endId: highestSubId }];
71
+ if (subsGroups === undefined || subsGroups.length === 0)
72
+ return fallback;
73
+ const emptySubGroupBoundaries = [];
74
+ return subsGroups?.reduce((acc, curr, currIndex) => {
75
+ const lastInAcc = acc[acc.length - 1];
76
+ const startId = lastInAcc === undefined ? 1 : lastInAcc.endId + 1;
77
+ const endId = curr;
78
+ if (currIndex === (subsGroups?.length ?? 0) - 1 && endId !== highestSubId) {
79
+ return [
80
+ ...acc,
81
+ { startId, endId },
82
+ { startId: endId + 1, endId: highestSubId }
83
+ ];
84
+ }
85
+ return [...acc, { startId, endId }];
86
+ }, emptySubGroupBoundaries) ?? fallback;
87
+ };
88
+ /**
89
+ * Retourne le groupe de sous-titres courant selon l'ID du dernier sous-titre précédent et l'état.
90
+ * @param subsGroupsWithBoundaries - Tableau des groupes avec bornes
91
+ * @param lastPrevSubId - ID du dernier sous-titre précédent
92
+ * @param isEnded - Indique si la lecture est terminée
93
+ * @returns Le groupe courant ou undefined
94
+ */
95
+ export const getCurrentGroup = (subsGroupsWithBoundaries, lastPrevSubId, isEnded) => {
96
+ const previousGroups = subsGroupsWithBoundaries.filter(group => group.startId <= (lastPrevSubId ?? 0));
97
+ if (previousGroups.length === 0)
98
+ return isEnded === true
99
+ ? subsGroupsWithBoundaries[subsGroupsWithBoundaries.length - 1]
100
+ : subsGroupsWithBoundaries[0];
101
+ return previousGroups[previousGroups.length - 1];
102
+ };
@@ -1,10 +1,90 @@
1
- import {
2
- Theatre
3
- } from "../../chunks/chunk-ZJNQRKEJ.js";
4
- import "../../chunks/chunk-IEZ3O5OF.js";
5
- import "../../chunks/chunk-TRFZSKNB.js";
6
- import "../../chunks/chunk-OFCSIK6J.js";
7
- import "../../chunks/chunk-WSFCRVEQ.js";
8
- export {
9
- Theatre
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useState, useRef } from 'react';
3
+ import { clss } from '../../agnostic/css/clss/index.js';
4
+ import { mergeClassNames } from '../utils/index.js';
5
+ import { theatre as publicClassName } from '../public-classnames.js';
6
+ import cssModule from './styles.module.css';
7
+ /**
8
+ * Theatre mode component. Wraps content in a toggleable fullscreen-like "stage"
9
+ * overlay. Supports both controlled and uncontrolled usage.
10
+ *
11
+ * When `isOn` is not provided the component manages its own open/closed state
12
+ * internally. When `isOn` is provided it acts as the source of truth and the
13
+ * internal state is ignored.
14
+ *
15
+ * ### Root element modifiers
16
+ * The root `<div>` receives the public class name defined by `theatre` and the
17
+ * following BEM-style modifier classes:
18
+ * - `--on` — when theatre mode is active.
19
+ * - `--off` — when theatre mode is inactive.
20
+ *
21
+ * ### Child elements
22
+ * - `__stage` — container rendered inside the root that holds the duplicated
23
+ * `children` when theatre mode is active. Only mounted when `isOn` is `true`.
24
+ * - `__open-btn` — clickable element that activates theatre mode.
25
+ * - `__close-btn` — clickable element that deactivates theatre mode.
26
+ *
27
+ * @param props - Component properties.
28
+ * @see {@link Props}
29
+ * @returns A root `<div>` containing the children in their original position,
30
+ * a stage overlay with the duplicated children (when active), and the open/close
31
+ * toggle buttons.
32
+ */
33
+ export const Theatre = ({ closeBtnContent, openBtnContent, isOn, defaultIsOn, exitOnEscape, exitOnBgClick, stateHandlers, actionHandlers, children, className }) => {
34
+ // State & refs
35
+ const [internalIsOn, setInternalIsOn] = useState(defaultIsOn ?? false);
36
+ const stageRef = useRef(null);
37
+ const isTheatreOn = isOn ?? internalIsOn;
38
+ const prevIsTheatreOnRef = useRef(isTheatreOn);
39
+ // Handlers
40
+ const handleCloseBtnClick = () => {
41
+ actionHandlers?.toggleClick?.(isTheatreOn);
42
+ if (isOn === undefined)
43
+ setInternalIsOn(false);
44
+ };
45
+ const handleOpenBtnClick = () => {
46
+ actionHandlers?.toggleClick?.(isTheatreOn);
47
+ if (isOn === undefined)
48
+ setInternalIsOn(true);
49
+ };
50
+ const handleStageBgClick = e => {
51
+ if (exitOnBgClick !== true)
52
+ return;
53
+ if (e.target !== stageRef.current)
54
+ return;
55
+ actionHandlers?.toggleClick?.(isTheatreOn);
56
+ if (isOn === undefined)
57
+ setInternalIsOn(false);
58
+ };
59
+ // Effects
60
+ useEffect(() => {
61
+ if (prevIsTheatreOnRef.current !== isTheatreOn) {
62
+ stateHandlers?.toggled?.(isTheatreOn);
63
+ prevIsTheatreOnRef.current = isTheatreOn;
64
+ }
65
+ }, [isTheatreOn, stateHandlers]);
66
+ useEffect(() => {
67
+ if (exitOnEscape === true
68
+ || !isTheatreOn
69
+ || isOn !== undefined)
70
+ return;
71
+ const listener = (e) => {
72
+ if (e.key !== 'Escape')
73
+ return;
74
+ actionHandlers?.toggleClick?.(isTheatreOn);
75
+ setInternalIsOn(false);
76
+ };
77
+ window.addEventListener('keydown', listener);
78
+ return () => window.removeEventListener('keydown', listener);
79
+ }, [exitOnEscape, isTheatreOn, isOn]);
80
+ // Render
81
+ const c = clss(publicClassName, { cssModule });
82
+ const rootClss = mergeClassNames(c(null, {
83
+ 'on': isTheatreOn,
84
+ 'off': !isTheatreOn
85
+ }), className);
86
+ const stageClass = c('stage');
87
+ const openBtnClass = c('open-btn');
88
+ const closeBtnClass = c('close-btn');
89
+ return _jsxs("div", { className: rootClss, children: [children, _jsx("div", { className: stageClass, onClick: handleStageBgClick, ref: stageRef, children: isTheatreOn && children }), _jsx("div", { className: closeBtnClass, onClick: handleCloseBtnClick, children: closeBtnContent }), _jsx("div", { className: openBtnClass, onClick: handleOpenBtnClick, children: openBtnContent })] });
10
90
  };
@@ -1,149 +1,159 @@
1
- import {
2
- isNonNullObject
3
- } from "../../chunks/chunk-HQLRJ7XW.js";
4
- import {
5
- randomHash
6
- } from "../../chunks/chunk-75BICI4L.js";
7
- import "../../chunks/chunk-OGBUSUE6.js";
8
- import {
9
- unknownToString
10
- } from "../../chunks/chunk-PUQUSA6S.js";
11
- import {
12
- uiModule
13
- } from "../../chunks/chunk-IEZ3O5OF.js";
14
- import {
15
- clss
16
- } from "../../chunks/chunk-TRFZSKNB.js";
17
- import {
18
- mergeClassNames
19
- } from "../../chunks/chunk-OFCSIK6J.js";
20
- import "../../chunks/chunk-WSFCRVEQ.js";
21
-
22
- // src/components/UIModule/index.tsx
23
- import {
24
- useEffect,
25
- useRef,
26
- useState
27
- } from "react";
28
- import cssModule from "./styles.module.css";
29
- import { jsx, jsxs } from "react/jsx-runtime";
30
- var UIModule = ({
31
- src,
32
- props,
33
- stateHandlers,
34
- className
35
- }) => {
36
- const [id] = useState(`f${randomHash(10)}`);
37
- const [loading, setLoading] = useState(false);
38
- const [loadedModule, _setLoadedModule] = useState(null);
39
- const [moduleTarget, _setModuleTarget] = useState(null);
40
- const rootRef = useRef(null);
41
- const loadedModuleRef = useRef(null);
42
- const moduleTargetRef = useRef(null);
43
- const setLoadedModule = (data) => {
44
- loadedModuleRef.current = data;
45
- _setLoadedModule(data);
46
- };
47
- const setModuleTarget = (data) => {
48
- moduleTargetRef.current = data;
49
- _setModuleTarget(data);
50
- };
51
- useEffect(() => {
52
- stateHandlers?.idChanged?.(id);
53
- }, [id, stateHandlers]);
54
- useEffect(() => {
55
- stateHandlers?.isLoadingChanged?.(loading);
56
- }, [loading, stateHandlers]);
57
- useEffect(() => {
58
- stateHandlers?.loadedModuleChanged?.(loadedModule);
59
- }, [loadedModule, stateHandlers]);
60
- useEffect(() => {
61
- stateHandlers?.moduleTargetChanged?.(moduleTarget);
62
- }, [moduleTarget, stateHandlers]);
63
- useEffect(() => {
64
- if (src === void 0) return;
65
- try {
66
- setLoading(true);
67
- import(src).then((data) => {
68
- setLoading(false);
69
- const errs = {
70
- notMod: new Error("Not a module"),
71
- initFunc: new Error("Module exported member `init` must be a function"),
72
- destroyFunc: new Error("Module exported member `destroy` must be a function"),
73
- cssStrArr: new Error("Module exported member `css` must be an array of strings"),
74
- updFunc: new Error("Module exported member `update` must be a function"),
75
- initRetElt: new Error("Module exported function `init` must return an Element"),
76
- initRetFirstElt: new Error("Module exported function `init` must return an array containing an Element in its first position")
77
- };
78
- if (!isNonNullObject(data)) return setLoadedModule(errs.notMod);
79
- if (!("init" in data)) return setLoadedModule(errs.initFunc);
80
- if (typeof data.init !== "function") return setLoadedModule(errs.initFunc);
81
- if (!("destroy" in data) || typeof data.destroy !== "function") return setLoadedModule(errs.destroyFunc);
82
- if ("css" in data) {
83
- if (!Array.isArray(data.css)) return setLoadedModule(errs.cssStrArr);
84
- if (data.css.some((i) => typeof i !== "string")) return setLoadedModule(errs.cssStrArr);
85
- }
86
- if ("update" in data && typeof data.update !== "function") return setLoadedModule(errs.updFunc);
87
- const module = data;
88
- setLoadedModule(module);
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useRef, useState } from 'react';
3
+ import { clss } from '../../agnostic/css/clss/index.js';
4
+ import { unknownToString } from '../../agnostic/errors/unknown-to-string/index.js';
5
+ import { isNonNullObject } from '../../agnostic/objects/is-object/index.js';
6
+ import { randomHash } from '../../agnostic/random/uuid/index.js';
7
+ import { mergeClassNames } from '../utils/index.js';
8
+ import { uiModule as publicClassName } from '../public-classnames.js';
9
+ import cssModule from './styles.module.css';
10
+ /**
11
+ * Dynamic UI module host component. Asynchronously imports an ES module by URL,
12
+ * validates its exported interface, calls its `init` lifecycle to obtain a DOM
13
+ * `Element`, and appends that element to its own root `<div>`. Handles loading,
14
+ * error, and teardown states automatically.
15
+ *
16
+ * The imported module is expected to conform to the {@link ModuleData} interface.
17
+ * Any violation (missing exports, wrong types, `init` not returning an `Element`)
18
+ * transitions the component into the `--error` state and logs to `console.error`.
19
+ *
20
+ * ### Root element modifiers
21
+ * The root `<div>` receives the public class name defined by `uiModule` and
22
+ * the following BEM-style modifier classes reflecting the current load lifecycle:
23
+ * - `--loading` — the module fetch is in progress.
24
+ * - `--no-module` — no module has been loaded yet (`src` is undefined or the
25
+ * effect has not run).
26
+ * - `--error` — the import, validation, or `init` call failed.
27
+ * - `--loaded` — the module passed validation and `init` returned successfully.
28
+ * - `--initialized` — the `Element` returned by `init` has been appended to the
29
+ * host `<div>`.
30
+ *
31
+ * ### Root element attributes
32
+ * - `id` — a stable randomly generated ID (prefixed `f`) assigned once on mount.
33
+ * Used to scope the module's `css` entries to this specific instance.
34
+ *
35
+ * @param props - Component properties.
36
+ * @see {@link Props}
37
+ * @see {@link ModuleData}
38
+ * @returns A host `<div>` into which the module's root `Element` is appended,
39
+ * along with any `<style>` blocks exported by the module.
40
+ */
41
+ export const UIModule = ({ src, props, stateHandlers, className }) => {
42
+ // State & refs
43
+ const [id] = useState(`f${randomHash(10)}`);
44
+ const [loading, setLoading] = useState(false);
45
+ const [loadedModule, _setLoadedModule] = useState(null);
46
+ const [moduleTarget, _setModuleTarget] = useState(null);
47
+ const rootRef = useRef(null);
48
+ const loadedModuleRef = useRef(null);
49
+ const moduleTargetRef = useRef(null);
50
+ const setLoadedModule = (data) => {
51
+ loadedModuleRef.current = data;
52
+ _setLoadedModule(data);
53
+ };
54
+ const setModuleTarget = (data) => {
55
+ moduleTargetRef.current = data;
56
+ _setModuleTarget(data);
57
+ };
58
+ // State changes dispatch
59
+ useEffect(() => { stateHandlers?.idChanged?.(id); }, [id, stateHandlers]);
60
+ useEffect(() => { stateHandlers?.isLoadingChanged?.(loading); }, [loading, stateHandlers]);
61
+ useEffect(() => { stateHandlers?.loadedModuleChanged?.(loadedModule); }, [loadedModule, stateHandlers]);
62
+ useEffect(() => { stateHandlers?.moduleTargetChanged?.(moduleTarget); }, [moduleTarget, stateHandlers]);
63
+ // Fx dep. `src` - load & init module effect
64
+ useEffect(() => {
65
+ if (src === undefined)
66
+ return;
89
67
  try {
90
- const target = module.init(props ?? {});
91
- if (!(target instanceof Element)) return setLoadedModule(errs.initRetElt);
92
- setModuleTarget(target);
93
- } catch (err) {
94
- setModuleTarget(null);
95
- const e = err instanceof Error ? err : new Error(unknownToString(err));
96
- setLoadedModule(e);
68
+ setLoading(true);
69
+ import(src)
70
+ .then(data => {
71
+ setLoading(false);
72
+ const errs = {
73
+ notMod: new Error('Not a module'),
74
+ initFunc: new Error('Module exported member `init` must be a function'),
75
+ destroyFunc: new Error('Module exported member `destroy` must be a function'),
76
+ cssStrArr: new Error('Module exported member `css` must be an array of strings'),
77
+ updFunc: new Error('Module exported member `update` must be a function'),
78
+ initRetElt: new Error('Module exported function `init` must return an Element'),
79
+ initRetFirstElt: new Error('Module exported function `init` must return an array containing an Element in its first position')
80
+ };
81
+ if (!isNonNullObject(data))
82
+ return setLoadedModule(errs.notMod);
83
+ if (!('init' in data))
84
+ return setLoadedModule(errs.initFunc);
85
+ if (typeof data.init !== 'function')
86
+ return setLoadedModule(errs.initFunc);
87
+ if (!('destroy' in data) || typeof data.destroy !== 'function')
88
+ return setLoadedModule(errs.destroyFunc);
89
+ if ('css' in data) {
90
+ if (!Array.isArray(data.css))
91
+ return setLoadedModule(errs.cssStrArr);
92
+ if (data.css.some(i => typeof i !== 'string'))
93
+ return setLoadedModule(errs.cssStrArr);
94
+ }
95
+ if ('update' in data && typeof data.update !== 'function')
96
+ return setLoadedModule(errs.updFunc);
97
+ const module = data;
98
+ setLoadedModule(module);
99
+ try {
100
+ const target = module.init(props ?? {});
101
+ if (!(target instanceof Element))
102
+ return setLoadedModule(errs.initRetElt);
103
+ setModuleTarget(target);
104
+ }
105
+ catch (err) {
106
+ setModuleTarget(null);
107
+ const e = err instanceof Error
108
+ ? err
109
+ : new Error(unknownToString(err));
110
+ setLoadedModule(e);
111
+ }
112
+ }).catch(err => {
113
+ setLoading(false);
114
+ setLoadedModule(err instanceof Error ? err : new Error(unknownToString(err)));
115
+ setModuleTarget(null);
116
+ });
97
117
  }
98
- }).catch((err) => {
99
- setLoading(false);
100
- setLoadedModule(err instanceof Error ? err : new Error(unknownToString(err)));
101
- setModuleTarget(null);
102
- });
103
- } catch (err) {
104
- if (err instanceof Error) return setLoadedModule(err);
105
- const errStr = unknownToString(err);
106
- return setLoadedModule(new Error(errStr));
107
- }
108
- return () => {
109
- if (moduleTargetRef.current === null) return;
110
- if (loadedModuleRef.current instanceof Error) return;
111
- if (loadedModuleRef.current === null) return;
112
- loadedModuleRef.current.destroy(moduleTargetRef.current);
113
- };
114
- }, [src]);
115
- useEffect(() => {
116
- if (loadedModule instanceof Error) console.error(loadedModule);
117
- }, [loadedModule]);
118
- useEffect(() => {
119
- if (moduleTarget === null) return;
120
- if (rootRef.current === null) return;
121
- rootRef.current.appendChild(moduleTarget);
122
- }, [moduleTarget]);
123
- const c = clss(uiModule, { cssModule });
124
- const rootClss = mergeClassNames(
125
- c(null, {
126
- loading,
127
- "no-module": loadedModule === null,
128
- "error": loadedModule instanceof Error,
129
- "loaded": !loading && loadedModule !== null && !(loadedModule instanceof Error),
130
- "initialized": moduleTarget !== null
131
- }),
132
- className
133
- );
134
- return /* @__PURE__ */ jsxs(
135
- "div",
136
- {
137
- className: rootClss,
138
- ref: rootRef,
139
- id,
140
- children: [
141
- loadedModule === null && "",
142
- loadedModule !== null && !(loadedModule instanceof Error) && loadedModule.css?.map((css) => /* @__PURE__ */ jsx("style", { children: `.${uiModule}#${id} { ${css} }` }))
143
- ]
144
- }
145
- );
146
- };
147
- export {
148
- UIModule
118
+ catch (err) {
119
+ if (err instanceof Error)
120
+ return setLoadedModule(err);
121
+ const errStr = unknownToString(err);
122
+ return setLoadedModule(new Error(errStr));
123
+ }
124
+ return () => {
125
+ if (moduleTargetRef.current === null)
126
+ return;
127
+ if (loadedModuleRef.current instanceof Error)
128
+ return;
129
+ if (loadedModuleRef.current === null)
130
+ return;
131
+ loadedModuleRef.current.destroy(moduleTargetRef.current);
132
+ };
133
+ }, [src]);
134
+ // Fx dep. `loadedModule` - log load errors
135
+ useEffect(() => {
136
+ if (loadedModule instanceof Error)
137
+ console.error(loadedModule);
138
+ }, [loadedModule]);
139
+ // Fx dep. `moduleTarget` - append the rendered module
140
+ useEffect(() => {
141
+ if (moduleTarget === null)
142
+ return;
143
+ if (rootRef.current === null)
144
+ return;
145
+ rootRef.current.appendChild(moduleTarget);
146
+ }, [moduleTarget]);
147
+ // Rendering
148
+ const c = clss(publicClassName, { cssModule });
149
+ const rootClss = mergeClassNames(c(null, {
150
+ loading,
151
+ 'no-module': loadedModule === null,
152
+ 'error': loadedModule instanceof Error,
153
+ 'loaded': !loading && loadedModule !== null && !(loadedModule instanceof Error),
154
+ 'initialized': moduleTarget !== null
155
+ }), className);
156
+ return _jsxs("div", { className: rootClss, ref: rootRef, id: id, children: [loadedModule === null && '', loadedModule !== null
157
+ && !(loadedModule instanceof Error)
158
+ && loadedModule.css?.map(css => _jsx("style", { children: `.${publicClassName}#${id} { ${css} }` }))] });
149
159
  };
@@ -46,6 +46,16 @@ type StateHandlersProps = {
46
46
  currentTime?: (currentTime: number) => void;
47
47
  playbackRate?: (rate: number) => void;
48
48
  };
49
+ /**
50
+ * - play?: boolean
51
+ * - mute?: boolean
52
+ * - fullScreen?: boolean
53
+ * - volume?: number
54
+ * - playbackRate?: number
55
+ * - currentTimeMs:? number
56
+ * - PLUS TARD =
57
+ * - onPlay, onLoud, etc...
58
+ */
49
59
  /**
50
60
  * Props for the {@link Video} component.
51
61
  *