@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,51 @@
1
+ export const globalDocumentScrollListener = () => {
2
+ const win = {
3
+ height: window.innerHeight,
4
+ width: window.innerWidth
5
+ };
6
+ const html = {
7
+ width: document.body.parentElement?.offsetWidth ?? 0,
8
+ height: document.body.parentElement?.offsetHeight ?? 0
9
+ };
10
+ const scroll = {
11
+ x: window.scrollX,
12
+ y: window.scrollY
13
+ };
14
+ const viewport = {
15
+ minX: scroll.x,
16
+ minY: scroll.y,
17
+ maxX: scroll.x + win.width,
18
+ maxY: scroll.y + win.height
19
+ };
20
+ return { win, html, scroll, viewport };
21
+ };
22
+ export const localElementScrollListener = (div) => {
23
+ const offsetX = div.offsetLeft;
24
+ const offsetY = div.offsetTop;
25
+ const width = div.offsetWidth;
26
+ const height = div.offsetHeight;
27
+ return {
28
+ offsetX,
29
+ offsetY,
30
+ width,
31
+ height
32
+ };
33
+ };
34
+ window.addEventListener('scroll', () => {
35
+ const global = globalDocumentScrollListener();
36
+ Array.from(registeredIds).forEach(([, item]) => {
37
+ const { rootRef, setData } = item;
38
+ if (rootRef.current === null)
39
+ return;
40
+ const local = localElementScrollListener(rootRef.current);
41
+ setData({ global, local });
42
+ });
43
+ });
44
+ export const registeredIds = new Map();
45
+ export const register = (props) => {
46
+ const { id, rootRef, setData } = props;
47
+ registeredIds.set(id, { id, rootRef, setData });
48
+ };
49
+ export const unregister = (id) => {
50
+ registeredIds.delete(id);
51
+ };
@@ -0,0 +1,67 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Children } from 'react';
3
+ import { clss } from '../../agnostic/css/clss/index.js';
4
+ import { mergeClassNames } from '../utils/index.js';
5
+ import { sequencer as publicClassName } from '../public-classnames.js';
6
+ import cssModule from './styles.module.css';
7
+ /**
8
+ * Controlled sequencer component. Renders each child inside a classifier
9
+ * wrapper and assigns step-relative modifiers based on `step` and the optional
10
+ * `activateOnStep` override map.
11
+ *
12
+ * This component is purely presentational and holds no internal state.
13
+ * It is designed to be driven by the uncontrolled wrapper, which handles
14
+ * timing, playback events, and derives the props passed here.
15
+ *
16
+ * ### Root element modifiers
17
+ * The root `<div>` receives the public class name defined by `sequencer` and
18
+ * the following BEM-style modifier classes, sourced from `_modifiers`:
19
+ * - `--playing` — when the sequence is actively progressing.
20
+ * - `--at-start` — when the current step is the first step.
21
+ * - `--at-end` — when the current step is the last step.
22
+ *
23
+ * ### Data attributes on the root element
24
+ * Derived from `_dataAttributes`, each key is prefixed with `data-`:
25
+ * - `data-tempo` — current playback tempo, when provided.
26
+ *
27
+ * ### Child wrapper elements
28
+ * Each child is wrapped in a `<div>` with the `__child` element class and
29
+ * exactly one of the following mutually exclusive modifiers:
30
+ * - `--active` — this child corresponds to the current step (or is included
31
+ * in `activateOnStep[step]`).
32
+ * - `--previous` — this child was active in a prior step.
33
+ * - `--next` — this child has not yet been reached.
34
+ *
35
+ * @param props - Component properties.
36
+ * @see {@link ControlledProps}
37
+ * @returns A root `<div>` containing one classifier wrapper per child.
38
+ */
39
+ export const SequencerControlled = ({ step = 0, activateOnStep, _modifiers, _dataAttributes, className, children }) => {
40
+ // Rendering
41
+ const c = clss(publicClassName, { cssModule });
42
+ const rootClss = mergeClassNames(c(null, _modifiers), className);
43
+ const rootAttributes = Object
44
+ .entries({ ..._dataAttributes })
45
+ .reduce((acc, [key, val]) => ({ ...acc, [`data-${key}`]: val }), { 'data-step': step });
46
+ return _jsx("div", { className: rootClss, ...rootAttributes, children: Children.toArray(children)
47
+ .map((child, childPos) => {
48
+ const thisStepActivateOnStep = activateOnStep?.[step];
49
+ const isPrevious = activateOnStep === undefined
50
+ ? childPos < step
51
+ : [...activateOnStep]
52
+ .slice(0, step)
53
+ .some(list => list.includes(childPos));
54
+ const isCurrent = activateOnStep === undefined
55
+ ? childPos === step
56
+ : Array.isArray(thisStepActivateOnStep)
57
+ ? thisStepActivateOnStep.includes(childPos)
58
+ : thisStepActivateOnStep === childPos;
59
+ const isNext = !isPrevious && !isCurrent;
60
+ const childClss = c('child', {
61
+ current: isCurrent,
62
+ prev: isPrevious,
63
+ next: isNext
64
+ });
65
+ return _jsx("div", { className: childClss, children: child });
66
+ }) });
67
+ };
@@ -1,164 +1,109 @@
1
- import {
2
- absoluteModulo
3
- } from "../../chunks/chunk-DNIOWD7K.js";
4
- import {
5
- clamp
6
- } from "../../chunks/chunk-OSAXBA7G.js";
7
- import {
8
- IntersectionObserverComponent
9
- } from "../../chunks/chunk-F2YJXIT7.js";
10
- import {
11
- sequencer
12
- } from "../../chunks/chunk-IEZ3O5OF.js";
13
- import {
14
- clss
15
- } from "../../chunks/chunk-TRFZSKNB.js";
16
- import {
17
- mergeClassNames
18
- } from "../../chunks/chunk-OFCSIK6J.js";
19
- import "../../chunks/chunk-WSFCRVEQ.js";
20
-
21
- // src/components/Sequencer/index.tsx
22
- import {
23
- useState,
24
- useEffect,
25
- useCallback,
26
- Children as Children2,
27
- useRef
28
- } from "react";
29
-
30
- // src/components/Sequencer/index.controlled.tsx
31
- import {
32
- Children
33
- } from "react";
34
- import cssModule from "./styles.module.css";
35
- import { jsx } from "react/jsx-runtime";
36
- var SequencerControlled = ({
37
- step = 0,
38
- activateOnStep,
39
- _modifiers,
40
- _dataAttributes,
41
- className,
42
- children
43
- }) => {
44
- const c = clss(sequencer, { cssModule });
45
- const rootClss = mergeClassNames(c(null, _modifiers), className);
46
- const rootAttributes = Object.entries({ ..._dataAttributes }).reduce(
47
- (acc, [key, val]) => ({ ...acc, [`data-${key}`]: val }),
48
- { "data-step": step }
49
- );
50
- return /* @__PURE__ */ jsx(
51
- "div",
52
- {
53
- className: rootClss,
54
- ...rootAttributes,
55
- children: Children.toArray(children).map((child, childPos) => {
56
- const thisStepActivateOnStep = activateOnStep?.[step];
57
- const isPrevious = activateOnStep === void 0 ? childPos < step : [...activateOnStep].slice(0, step).some((list) => list.includes(childPos));
58
- const isCurrent = activateOnStep === void 0 ? childPos === step : Array.isArray(thisStepActivateOnStep) ? thisStepActivateOnStep.includes(childPos) : thisStepActivateOnStep === childPos;
59
- const isNext = !isPrevious && !isCurrent;
60
- const childClss = c("child", {
61
- current: isCurrent,
62
- prev: isPrevious,
63
- next: isNext
64
- });
65
- return /* @__PURE__ */ jsx("div", { className: childClss, children: child });
66
- })
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useState, useEffect, useCallback, Children, useRef } from 'react';
3
+ import { absoluteModulo } from '../../agnostic/numbers/absolute-modulo/index.js';
4
+ import { clamp } from '../../agnostic/numbers/clamp/index.js';
5
+ import { IntersectionObserverComponent } from '../IntersectionObserver/index.js';
6
+ import { SequencerControlled } from './index.controlled.js';
7
+ /**
8
+ * Uncontrolled, self-advancing sequencer component. Drives a
9
+ * {@link SequencerControlled} instance with an internal tempo-based interval,
10
+ * optional loop/clamp boundary behaviour, and viewport-driven play/reset triggers
11
+ * via an {@link IntersectionObserverComponent}.
12
+ *
13
+ * Supports mixed controlled/uncontrolled usage: passing `step` disables the
14
+ * internal interval while still applying loop/clamp arithmetic before forwarding
15
+ * to the controlled layer. Passing `play` disables internal play state management
16
+ * while still allowing viewport handlers to fire `actionHandlers.intersected`.
17
+ *
18
+ * ### Forwarded modifiers to {@link SequencerControlled}
19
+ * The following `_modifiers` are computed and injected automatically:
20
+ * - `playing` — `true` when the effective play state is active.
21
+ * - `at-start` — `true` when the forwarded step is `0`.
22
+ * - `at-end` — `true` when the forwarded step equals `stepsCount - 1`.
23
+ *
24
+ * ### Forwarded data attributes to {@link SequencerControlled}
25
+ * - `data-tempo` — the current `tempo` value.
26
+ *
27
+ * @param props - Component properties.
28
+ * @see {@link Props}
29
+ * @see {@link SequencerControlled}
30
+ * @returns An {@link IntersectionObserverComponent} wrapping a
31
+ * {@link SequencerControlled} with the computed step and modifiers applied.
32
+ */
33
+ export const Sequencer = ({ defaultStep, tempo = 60, play, loop, clampFirst, clampLast, resetOnVisible, resetOnHidden, playOnVisible, pauseOnHidden, actionHandlers, stateHandlers, ...controlledProps }) => {
34
+ // State
35
+ const { step, activateOnStep, children } = controlledProps;
36
+ const [internalPlay, setInternalPlay] = useState(play ?? false);
37
+ const [internalStep, setInternalStep] = useState(step ?? defaultStep ?? 0);
38
+ const actualPlay = play ?? internalPlay;
39
+ const actualStep = step ?? internalStep;
40
+ const actualPlayRef = useRef(actualPlay);
41
+ // Effects
42
+ useEffect(() => {
43
+ const clampedTempo = Math.max(tempo, 1);
44
+ if (!actualPlay || step !== undefined)
45
+ return;
46
+ const interval = window.setInterval(() => {
47
+ setInternalStep(s => s + 1);
48
+ }, 1000 / (clampedTempo / 60));
49
+ return () => window.clearInterval(interval);
50
+ }, [actualPlay, tempo, step]);
51
+ // Forwarded step calculation
52
+ const stepsCount = activateOnStep !== undefined
53
+ ? activateOnStep.length
54
+ : Children.toArray(children).length;
55
+ let forwardedStep;
56
+ if (loop === true) {
57
+ forwardedStep = absoluteModulo(actualStep, stepsCount);
67
58
  }
68
- );
69
- };
70
-
71
- // src/components/Sequencer/index.tsx
72
- import { jsx as jsx2 } from "react/jsx-runtime";
73
- var Sequencer = ({
74
- defaultStep,
75
- tempo = 60,
76
- play,
77
- loop,
78
- clampFirst,
79
- clampLast,
80
- resetOnVisible,
81
- resetOnHidden,
82
- playOnVisible,
83
- pauseOnHidden,
84
- actionHandlers,
85
- stateHandlers,
86
- ...controlledProps
87
- }) => {
88
- const { step, activateOnStep, children } = controlledProps;
89
- const [internalPlay, setInternalPlay] = useState(play ?? false);
90
- const [internalStep, setInternalStep] = useState(step ?? defaultStep ?? 0);
91
- const actualPlay = play ?? internalPlay;
92
- const actualStep = step ?? internalStep;
93
- const actualPlayRef = useRef(actualPlay);
94
- useEffect(() => {
95
- const clampedTempo = Math.max(tempo, 1);
96
- if (!actualPlay || step !== void 0) return;
97
- const interval = window.setInterval(() => {
98
- setInternalStep((s) => s + 1);
99
- }, 1e3 / (clampedTempo / 60));
100
- return () => window.clearInterval(interval);
101
- }, [actualPlay, tempo, step]);
102
- const stepsCount = activateOnStep !== void 0 ? activateOnStep.length : Children2.toArray(children).length;
103
- let forwardedStep;
104
- if (loop === true) {
105
- forwardedStep = absoluteModulo(actualStep, stepsCount);
106
- } else {
107
- const leftClamp = clampFirst === true ? 0 : -Infinity;
108
- const rightClamp = clampLast === true ? stepsCount - 1 : Infinity;
109
- forwardedStep = clamp(actualStep, leftClamp, rightClamp);
110
- }
111
- const forwardedStepRef = useRef(forwardedStep);
112
- useEffect(() => {
113
- if (actualPlay !== actualPlayRef.current) {
114
- actualPlayRef.current = actualPlay;
115
- stateHandlers?.isPlaying?.(actualPlay);
116
- }
117
- if (forwardedStep !== forwardedStepRef.current) {
118
- forwardedStepRef.current = forwardedStep;
119
- stateHandlers?.stepChanged?.(forwardedStep);
59
+ else {
60
+ const leftClamp = clampFirst === true ? 0 : -Infinity;
61
+ const rightClamp = clampLast === true ? stepsCount - 1 : Infinity;
62
+ forwardedStep = clamp(actualStep, leftClamp, rightClamp);
120
63
  }
121
- }, [actualPlay, forwardedStep]);
122
- const handleIntersection = useCallback(({ ioEntry, observer }) => {
123
- if (play === true || step !== void 0) return;
124
- const { isIntersecting } = ioEntry ?? {};
125
- actionHandlers?.intersected?.({ ioEntry, observer });
126
- if (isIntersecting === true) {
127
- if (resetOnVisible === true) setInternalStep(0);
128
- if (playOnVisible === true) setInternalPlay(true);
129
- } else {
130
- if (resetOnHidden === true) setInternalStep(0);
131
- if (pauseOnHidden === true) setInternalPlay(false);
132
- }
133
- }, [
134
- resetOnVisible,
135
- playOnVisible,
136
- resetOnHidden,
137
- pauseOnHidden,
138
- play,
139
- step,
140
- actionHandlers
141
- ]);
142
- return /* @__PURE__ */ jsx2(
143
- IntersectionObserverComponent,
144
- {
145
- onIntersected: handleIntersection,
146
- children: /* @__PURE__ */ jsx2(
147
- SequencerControlled,
148
- {
149
- ...controlledProps,
150
- step: forwardedStep,
151
- _modifiers: {
152
- playing: actualPlay,
153
- "at-start": forwardedStep === 0,
154
- "at-end": forwardedStep === stepsCount - 1
155
- },
156
- _dataAttributes: { tempo }
64
+ const forwardedStepRef = useRef(forwardedStep);
65
+ // State change handlers
66
+ useEffect(() => {
67
+ if (actualPlay !== actualPlayRef.current) {
68
+ actualPlayRef.current = actualPlay;
69
+ stateHandlers?.isPlaying?.(actualPlay);
157
70
  }
158
- )
159
- }
160
- );
161
- };
162
- export {
163
- Sequencer
71
+ if (forwardedStep !== forwardedStepRef.current) {
72
+ forwardedStepRef.current = forwardedStep;
73
+ stateHandlers?.stepChanged?.(forwardedStep);
74
+ }
75
+ }, [actualPlay, forwardedStep]);
76
+ // Action handlers
77
+ const handleIntersection = useCallback(({ ioEntry, observer }) => {
78
+ if (play === true || step !== undefined)
79
+ return;
80
+ const { isIntersecting } = ioEntry ?? {};
81
+ actionHandlers?.intersected?.({ ioEntry, observer });
82
+ if (isIntersecting === true) {
83
+ if (resetOnVisible === true)
84
+ setInternalStep(0);
85
+ if (playOnVisible === true)
86
+ setInternalPlay(true);
87
+ }
88
+ else {
89
+ if (resetOnHidden === true)
90
+ setInternalStep(0);
91
+ if (pauseOnHidden === true)
92
+ setInternalPlay(false);
93
+ }
94
+ }, [
95
+ resetOnVisible,
96
+ playOnVisible,
97
+ resetOnHidden,
98
+ pauseOnHidden,
99
+ play,
100
+ step,
101
+ actionHandlers
102
+ ]);
103
+ // Rendering
104
+ return _jsx(IntersectionObserverComponent, { onIntersected: handleIntersection, children: _jsx(SequencerControlled, { ...controlledProps, step: forwardedStep, _modifiers: {
105
+ playing: actualPlay,
106
+ 'at-start': forwardedStep === 0,
107
+ 'at-end': forwardedStep === stepsCount - 1
108
+ }, _dataAttributes: { tempo } }) });
164
109
  };
@@ -1,64 +1,43 @@
1
- import {
2
- shadowRoot
3
- } from "../../chunks/chunk-IEZ3O5OF.js";
4
- import {
5
- clss
6
- } from "../../chunks/chunk-TRFZSKNB.js";
7
- import {
8
- mergeClassNames
9
- } from "../../chunks/chunk-OFCSIK6J.js";
10
- import "../../chunks/chunk-WSFCRVEQ.js";
11
-
12
- // src/components/ShadowRoot/index.tsx
13
- import {
14
- useRef,
15
- useEffect,
16
- useState
17
- } from "react";
18
- import { createPortal } from "react-dom";
19
- import cssModule from "./styles.module.css";
20
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
21
- var ShadowRootComponent = ({
22
- mode = "open",
23
- delegatesFocus,
24
- slotAssignment,
25
- adoptedStyleSheets,
26
- injectedStyles,
27
- className,
28
- children
29
- }) => {
30
- const hostRef = useRef(null);
31
- const [shadowRoot2, setShadowRoot] = useState(null);
32
- const [styles, setStyles] = useState(injectedStyles);
33
- useEffect(() => {
34
- if (hostRef.current === null || shadowRoot2 !== null) return;
35
- const root = hostRef.current.attachShadow({ mode, delegatesFocus, slotAssignment });
36
- if (adoptedStyleSheets !== void 0 && "adoptedStyleSheets" in root) {
37
- root.adoptedStyleSheets = adoptedStyleSheets;
38
- }
39
- if (injectedStyles !== void 0) setStyles(injectedStyles);
40
- setShadowRoot(root);
41
- }, [
42
- mode,
43
- delegatesFocus,
44
- slotAssignment,
45
- adoptedStyleSheets,
46
- injectedStyles
47
- ]);
48
- const c = clss(shadowRoot, { cssModule });
49
- const rootClss = mergeClassNames(c(), className);
50
- return /* @__PURE__ */ jsx(
51
- "div",
52
- {
53
- ref: hostRef,
54
- className: rootClss,
55
- children: shadowRoot2 !== null && createPortal(/* @__PURE__ */ jsxs(Fragment, { children: [
56
- styles !== void 0 && /* @__PURE__ */ jsx("style", { children: styles }),
57
- children
58
- ] }), shadowRoot2)
59
- }
60
- );
61
- };
62
- export {
63
- ShadowRootComponent
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useRef, useEffect, useState } from 'react';
3
+ import { createPortal } from 'react-dom';
4
+ import { clss } from '../../agnostic/css/clss/index.js';
5
+ import { shadowRoot as publicClassName } from '../public-classnames.js';
6
+ import { mergeClassNames } from '../utils/index.js';
7
+ import cssModule from './styles.module.css';
8
+ /**
9
+ * Component that creates a Shadow Root on its host element and renders
10
+ * its children inside that Shadow Root using a React portal.
11
+ *
12
+ * @param props - Component properties
13
+ * @see {@link Props}
14
+ * @returns A host `div` element that owns the created Shadow Root.
15
+ */
16
+ export const ShadowRootComponent = ({ mode = 'open', delegatesFocus, slotAssignment, adoptedStyleSheets, injectedStyles, className, children }) => {
17
+ // Refs, state & effects
18
+ const hostRef = useRef(null);
19
+ const [shadowRoot, setShadowRoot] = useState(null);
20
+ const [styles, setStyles] = useState(injectedStyles);
21
+ useEffect(() => {
22
+ if (hostRef.current === null || shadowRoot !== null)
23
+ return;
24
+ const root = hostRef.current.attachShadow({ mode, delegatesFocus, slotAssignment });
25
+ if (adoptedStyleSheets !== undefined
26
+ && 'adoptedStyleSheets' in root) {
27
+ root.adoptedStyleSheets = adoptedStyleSheets;
28
+ }
29
+ if (injectedStyles !== undefined)
30
+ setStyles(injectedStyles);
31
+ setShadowRoot(root);
32
+ }, [
33
+ mode,
34
+ delegatesFocus,
35
+ slotAssignment,
36
+ adoptedStyleSheets,
37
+ injectedStyles
38
+ ]);
39
+ // Rendering
40
+ const c = clss(publicClassName, { cssModule });
41
+ const rootClss = mergeClassNames(c(), className);
42
+ return _jsx("div", { ref: hostRef, className: rootClss, children: shadowRoot !== null && createPortal(_jsxs(_Fragment, { children: [styles !== undefined && _jsx("style", { children: styles }), children] }), shadowRoot) });
64
43
  };
@@ -1,14 +1,108 @@
1
- import {
2
- Subtitles
3
- } from "../../chunks/chunk-PYJKFOMV.js";
4
- import "../../chunks/chunk-YWSXCFYY.js";
5
- import "../../chunks/chunk-PUQUSA6S.js";
6
- import "../../chunks/chunk-QXAJXTXV.js";
7
- import "../../chunks/chunk-HC6ZOHCS.js";
8
- import "../../chunks/chunk-IEZ3O5OF.js";
9
- import "../../chunks/chunk-TRFZSKNB.js";
10
- import "../../chunks/chunk-OFCSIK6J.js";
11
- import "../../chunks/chunk-WSFCRVEQ.js";
12
- export {
13
- Subtitles
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useRef, useState } from 'react';
3
+ import { clss } from '../../agnostic/css/clss/index.js';
4
+ import { toError } from '../../agnostic/misc/cast/index.js';
5
+ import { unknownToString } from '../../agnostic/errors/unknown-to-string/index.js';
6
+ import { mergeClassNames } from '../utils/index.js';
7
+ import { subtitles as publicClassName } from '../public-classnames.js';
8
+ import { computeSubGroupsWithBoundaries, getCurrentGroup, parseSubs } from './utils.js';
9
+ import cssModule from './styles.module.css';
10
+ /**
11
+ * Subtitle synchronization component. Fetches or receives an SRT source, parses it,
12
+ * and renders subtitle groups whose individual spans are styled according to the
13
+ * current media timecode.
14
+ *
15
+ * ### Group elements
16
+ * Each subtitle group is a `<div>` with the following:
17
+ * - `--curr` modifier when the group contains the subtitle at the current timecode.
18
+ * - `data-start-sub-pos` — ID of the first subtitle in the group.
19
+ * - `data-end-sub-pos` — ID of the last subtitle in the group.
20
+ *
21
+ * ### Subtitle span elements
22
+ * Each individual subtitle is a `<span>` with the following:
23
+ * - `--prev` modifier when the subtitle's start time is at or before the last elapsed subtitle.
24
+ * - `--curr` modifier when `timecodeMs` falls within the subtitle's `[start, end]` interval.
25
+ * - `data-sub-pos` — the subtitle's numeric ID from the SRT source.
26
+ *
27
+ * @param props - Component properties.
28
+ * @see {@link Props}
29
+ * @returns A root `<div>` containing the rendered subtitle groups, or an empty `<div>`
30
+ * when `timecodeMs` is undefined or no subtitles have been parsed yet.
31
+ */
32
+ export const Subtitles = ({ src, srtFileContent, subsGroups, timecodeMs, isEnded, className, onLoaded, onParsed, onLoadFailed }) => {
33
+ // State
34
+ const [isLoading, setIsLoading] = useState(false);
35
+ const [loadError, setLoadError] = useState(null);
36
+ const [parsedSubs, setParsedSubs] = useState([]);
37
+ const pParsedSubs = useRef(parsedSubs);
38
+ // State change handlers
39
+ useEffect(() => {
40
+ if (pParsedSubs.current === parsedSubs)
41
+ return;
42
+ onParsed?.(parsedSubs);
43
+ }, [parsedSubs]);
44
+ // Effects
45
+ const fetchAndParseSubs = useCallback(async (src, srtFileContent) => {
46
+ if (src === undefined)
47
+ return;
48
+ if (srtFileContent !== undefined)
49
+ return setParsedSubs(parseSubs(srtFileContent));
50
+ setIsLoading(true);
51
+ setLoadError(null);
52
+ try {
53
+ const response = await fetch(src);
54
+ const srtContent = await response.text();
55
+ onLoaded?.(srtContent);
56
+ const parsedSubs = parseSubs(srtContent);
57
+ setParsedSubs(parsedSubs);
58
+ }
59
+ catch (error) {
60
+ setLoadError(error instanceof Error
61
+ ? error
62
+ : new Error(unknownToString(error)));
63
+ console.error(error);
64
+ onLoadFailed?.(toError(error));
65
+ }
66
+ finally {
67
+ setIsLoading(false);
68
+ }
69
+ }, [onLoadFailed, onLoaded]);
70
+ useEffect(() => {
71
+ fetchAndParseSubs(src, srtFileContent)
72
+ .catch((error) => { console.error(error); });
73
+ }, [fetchAndParseSubs, src, srtFileContent]);
74
+ // Rendering
75
+ const c = clss(publicClassName, { cssModule });
76
+ const rootClss = mergeClassNames(c(null, {
77
+ loading: isLoading,
78
+ error: loadError !== null
79
+ }), className);
80
+ const prevSubs = parsedSubs.filter(({ start }) => start != null && start < (timecodeMs ?? 0));
81
+ const lastPrevSub = prevSubs[prevSubs.length - 1];
82
+ const highestSubId = Math.max(...parsedSubs.map(sub => sub.id));
83
+ const subsGroupsWithBoundaries = computeSubGroupsWithBoundaries(subsGroups, highestSubId);
84
+ const currentGroup = getCurrentGroup(subsGroupsWithBoundaries, lastPrevSub?.id, isEnded);
85
+ return _jsx("div", { className: rootClss, children: timecodeMs !== undefined
86
+ && parsedSubs.length > 0
87
+ && subsGroupsWithBoundaries.map(group => {
88
+ const groupSubs = parsedSubs.filter(sub => sub.id >= group.startId && sub.id <= group.endId);
89
+ const totalSubs = groupSubs.length;
90
+ const groupClass = c('group', { curr: currentGroup?.startId === group.startId });
91
+ const subsNodes = groupSubs.map((sub, subIndex) => {
92
+ let subText = sub.content?.trim() ?? '';
93
+ if (subIndex !== totalSubs - 1)
94
+ subText += ' ';
95
+ const subClass = c('sub', {
96
+ prev: sub.start !== undefined
97
+ && lastPrevSub?.start !== undefined
98
+ && sub.start <= lastPrevSub.start,
99
+ curr: sub.start !== undefined
100
+ && timecodeMs >= sub.start
101
+ && sub.end !== undefined
102
+ && timecodeMs <= sub.end
103
+ });
104
+ return _jsx("span", { className: subClass, "data-sub-pos": sub.id, children: subText }, sub.id);
105
+ });
106
+ return _jsx("div", { className: groupClass, "data-start-sub-pos": group.startId, "data-end-sub-pos": group.endId, children: subsNodes }, group.startId);
107
+ }) });
14
108
  };
@@ -0,0 +1 @@
1
+ export {};