@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.
- package/TODO.md +269 -0
- package/agnostic/arrays/dedupe/index.js +9 -9
- package/agnostic/arrays/dedupe/index.test.js +24 -0
- package/agnostic/arrays/find-duplicates/index.js +34 -24
- package/agnostic/arrays/find-duplicates/index.test.js +31 -0
- package/agnostic/arrays/index.d.ts +1 -1
- package/agnostic/arrays/index.js +1 -1
- package/agnostic/arrays/is-array-of/index.js +28 -26
- package/agnostic/arrays/is-array-of/index.test.js +56 -0
- package/agnostic/arrays/make/index.js +11 -8
- package/agnostic/arrays/make/index.test.js +10 -0
- package/agnostic/arrays/random-pick/index.js +40 -9
- package/agnostic/arrays/random-pick/index.test.js +23 -0
- package/agnostic/arrays/shuffle/index.js +15 -13
- package/agnostic/arrays/shuffle/index.test.js +14 -0
- package/agnostic/booleans/is-falsy/index.js +26 -12
- package/agnostic/booleans/is-falsy/index.test.js +26 -0
- package/agnostic/colors/channels/index.js +145 -19
- package/agnostic/colors/channels/index.test.js +64 -0
- package/agnostic/colors/contrast/index.js +23 -30
- package/agnostic/colors/contrast/index.test.js +21 -0
- package/agnostic/colors/convert/index.js +839 -46
- package/agnostic/colors/convert/index.test.js +98 -0
- package/agnostic/colors/cssColorsMap.js +153 -0
- package/agnostic/colors/distance/index.js +65 -53
- package/agnostic/colors/distance/index.test.js +21 -0
- package/agnostic/colors/grayscale/index.js +96 -137
- package/agnostic/colors/grayscale/index.test.js +34 -0
- package/agnostic/colors/invert/index.js +33 -44
- package/agnostic/colors/invert/index.test.js +31 -0
- package/agnostic/colors/lerp/index.js +74 -88
- package/agnostic/colors/lerp/index.test.js +55 -0
- package/agnostic/colors/luminance/index.js +19 -13
- package/agnostic/colors/luminance/index.test.js +30 -0
- package/agnostic/colors/palette/index.js +80 -87
- package/agnostic/colors/palette/index.test.js +35 -0
- package/agnostic/colors/rotate/index.js +41 -14
- package/agnostic/colors/rotate/index.test.js +45 -0
- package/agnostic/colors/tidy/index.js +80 -12
- package/agnostic/colors/tidy/index.test.js +45 -0
- package/agnostic/colors/typechecks/index.js +196 -25
- package/agnostic/colors/typechecks/index.test.js +113 -0
- package/agnostic/colors/types.js +1 -0
- package/agnostic/css/bem/index.js +135 -160
- package/agnostic/css/clss/index.js +66 -7
- package/agnostic/css/clss/index.test.js +60 -0
- package/agnostic/css/generate-nice-color/index.js +26 -73
- package/agnostic/css/generate-nice-color/index.test.js +8 -0
- package/agnostic/css/index.d.ts +1 -1
- package/agnostic/css/index.js +1 -1
- package/agnostic/css/is-valid-css-class-name/index.js +15 -9
- package/agnostic/css/is-valid-css-class-name/index.test.js +36 -0
- package/agnostic/css/scale/index.js +37 -37
- package/agnostic/css/scale/index.test.js +71 -0
- package/agnostic/css/styles-set/index.js +151 -169
- package/agnostic/errors/register/index.js +45 -51
- package/agnostic/errors/unknown-to-string/index.js +18 -7
- package/agnostic/errors/unknown-to-string/index.test.js +35 -0
- package/agnostic/html/get-node-ancestors/index.js +31 -8
- package/agnostic/html/get-node-ancestors/index.test.js +58 -0
- package/agnostic/html/get-position-inside-parent/index.js +13 -10
- package/agnostic/html/get-position-inside-parent/index.test.js +56 -0
- package/agnostic/html/hyper-json/cast/index.js +137 -24
- package/agnostic/html/hyper-json/index.js +23 -50
- package/agnostic/html/hyper-json/method/index.js +10 -7
- package/agnostic/html/hyper-json/serialize/index.js +91 -11
- package/agnostic/html/hyper-json/smart-tags/coalesced/add/index.js +16 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/addclass/index.js +30 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/and/index.js +15 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/append/index.js +36 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/at/index.js +47 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/call/index.js +50 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/clone/index.js +11 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/deleteproperties/index.js +49 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/equals/index.js +24 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/getattribute/index.js +28 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/getproperties/index.js +21 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/getproperty/index.js +73 -26
- package/agnostic/html/hyper-json/smart-tags/coalesced/hjparse/index.js +24 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/hjstringify/index.js +93 -28
- package/agnostic/html/hyper-json/smart-tags/coalesced/if/index.js +22 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/index.d.ts +14 -14
- package/agnostic/html/hyper-json/smart-tags/coalesced/index.js +14 -14
- package/agnostic/html/hyper-json/smart-tags/coalesced/initialize/index.js +39 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/join/index.js +18 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/length/index.js +23 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/map/index.js +33 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/negate/index.js +11 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/notrailing/index.js +35 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/or/index.js +15 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/pickrandom/index.js +19 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/populate/index.js +61 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/print/index.js +25 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/push/index.js +11 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/pusheach/index.js +28 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/recordtoarray/index.js +11 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/removeattribute/index.js +58 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/removeclass/index.js +30 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/renameproperty/index.js +34 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/replace/index.js +56 -26
- package/agnostic/html/hyper-json/smart-tags/coalesced/select/index.js +34 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/set/index.js +31 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/setattribute/index.js +58 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/setproperty/index.js +237 -26
- package/agnostic/html/hyper-json/smart-tags/coalesced/sorton/index.js +93 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/split/index.js +22 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/spread/index.js +24 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/toarray/index.js +12 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/toboolean/index.js +12 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/toelement/index.js +19 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/toggleclass/index.js +30 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/tonodelist/index.js +12 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/tonull/index.js +11 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/tonumber/index.js +12 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/torecord/index.js +12 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/toref/index.js +12 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/tostring/index.js +12 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/totext/index.js +12 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/transformselected/index.js +86 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/trim/index.js +16 -24
- package/agnostic/html/hyper-json/smart-tags/index.js +31 -10
- package/agnostic/html/hyper-json/smart-tags/isolated/any/index.js +14 -11
- package/agnostic/html/hyper-json/smart-tags/isolated/array/index.js +14 -11
- package/agnostic/html/hyper-json/smart-tags/isolated/boolean/index.js +13 -24
- package/agnostic/html/hyper-json/smart-tags/isolated/element/index.js +26 -24
- package/agnostic/html/hyper-json/smart-tags/isolated/get/index.js +20 -24
- package/agnostic/html/hyper-json/smart-tags/isolated/guess/index.js +59 -24
- package/agnostic/html/hyper-json/smart-tags/isolated/index.d.ts +1 -1
- package/agnostic/html/hyper-json/smart-tags/isolated/index.js +1 -1
- package/agnostic/html/hyper-json/smart-tags/isolated/nodelist/index.js +20 -24
- package/agnostic/html/hyper-json/smart-tags/isolated/null/index.js +10 -11
- package/agnostic/html/hyper-json/smart-tags/isolated/number/index.js +18 -24
- package/agnostic/html/hyper-json/smart-tags/isolated/record/index.js +14 -24
- package/agnostic/html/hyper-json/smart-tags/isolated/ref/index.js +45 -25
- package/agnostic/html/hyper-json/smart-tags/isolated/string/index.js +18 -24
- package/agnostic/html/hyper-json/smart-tags/isolated/text/index.js +20 -24
- package/agnostic/html/hyper-json/transformer/index.js +113 -9
- package/agnostic/html/hyper-json/tree/index.js +423 -24
- package/agnostic/html/hyper-json/types/index.js +28 -7
- package/agnostic/html/hyper-json/utils/index.js +516 -24
- package/agnostic/html/index.d.ts +2 -2
- package/agnostic/html/index.js +2 -2
- package/agnostic/html/insert-node/index.js +28 -7
- package/agnostic/html/insert-node/index.test.js +73 -0
- package/agnostic/html/placeholders/index.js +26 -31
- package/agnostic/html/replace-in-element/index.js +31 -25
- package/agnostic/html/replace-in-element/index.test.js +80 -0
- package/agnostic/html/selector-to-element/index.js +53 -33
- package/agnostic/html/selector-to-element/index.test.js +69 -0
- package/agnostic/html/string-to-nodes/index.js +24 -19
- package/agnostic/html/string-to-nodes/index.test.js +54 -0
- package/agnostic/index.d.ts +1 -1
- package/agnostic/index.js +1 -1
- package/agnostic/misc/assert/index.js +60 -58
- package/agnostic/misc/cast/index.js +132 -23
- package/agnostic/misc/cast/index.test.js +134 -0
- package/agnostic/misc/connection/index.js +55 -30
- package/agnostic/misc/connection/index.test.js +143 -0
- package/agnostic/misc/crawler/index.js +68 -44
- package/agnostic/misc/crawler/index.test.js +56 -0
- package/agnostic/misc/crossenv/detect-runtime/index.js +41 -16
- package/agnostic/misc/crossenv/detect-runtime/index.test.js +24 -0
- package/agnostic/misc/crossenv/types.js +21 -7
- package/agnostic/misc/crossenv/window/index.js +49 -13
- package/agnostic/misc/crossenv/window/index.test.js +24 -0
- package/agnostic/misc/data-size/index.js +182 -296
- package/agnostic/misc/data-size/index.test.js +100 -0
- package/agnostic/misc/data-size/types.js +1 -0
- package/agnostic/misc/index.d.ts +1 -1
- package/agnostic/misc/index.js +1 -1
- package/agnostic/misc/is-constructor-function/index.js +13 -7
- package/agnostic/misc/is-constructor-function/index.test.js +36 -0
- package/agnostic/misc/is-nullish/index.js +26 -11
- package/agnostic/misc/is-nullish/index.test.js +44 -0
- package/agnostic/misc/logs/logger/index.js +115 -142
- package/agnostic/misc/logs/make-text-block/index.js +14 -7
- package/agnostic/misc/logs/styles/index.js +30 -7
- package/agnostic/misc/lorem-ipsum/index.js +51 -186
- package/agnostic/misc/lorem-ipsum/index.test.js +49 -0
- package/agnostic/misc/normalize-extension/index.js +99 -90
- package/agnostic/misc/normalize-extension/index.test.js +40 -0
- package/agnostic/misc/outcome/index.js +21 -11
- package/agnostic/misc/outcome/index.test.js +40 -0
- package/agnostic/numbers/absolute-modulo/index.js +10 -7
- package/agnostic/numbers/absolute-modulo/index.test.js +23 -0
- package/agnostic/numbers/approximate-rational/index.js +86 -71
- package/agnostic/numbers/approximate-rational/index.test.js +90 -0
- package/agnostic/numbers/clamp/index.js +13 -7
- package/agnostic/numbers/clamp/index.test.js +24 -0
- package/agnostic/numbers/geometric-progressions/index.js +26 -7
- package/agnostic/numbers/geometric-progressions/index.test.js +45 -0
- package/agnostic/numbers/index.d.ts +1 -1
- package/agnostic/numbers/index.js +1 -1
- package/agnostic/numbers/interpolate/index.js +25 -12
- package/agnostic/numbers/interpolate/index.test.js +40 -0
- package/agnostic/numbers/round/index.js +33 -11
- package/agnostic/numbers/round/index.test.js +56 -0
- package/agnostic/objects/deep-get-property/index.js +30 -26
- package/agnostic/objects/deep-get-property/index.test.js +59 -0
- package/agnostic/objects/enums/is-in-enum/index.js +18 -7
- package/agnostic/objects/enums/is-in-enum/index.test.js +100 -0
- package/agnostic/objects/flatten-getters/index.js +15 -16
- package/agnostic/objects/flatten-getters/index.test.js +78 -0
- package/agnostic/objects/index.d.ts +3 -3
- package/agnostic/objects/index.js +3 -3
- package/agnostic/objects/is-object/index.js +18 -9
- package/agnostic/objects/is-object/index.test.js +60 -0
- package/agnostic/objects/is-record/index.js +13 -7
- package/agnostic/objects/is-record/index.test.js +48 -0
- package/agnostic/objects/record-format/index.js +18 -14
- package/agnostic/objects/record-format/index.test.js +92 -0
- package/agnostic/objects/record-map/index.js +18 -7
- package/agnostic/objects/record-map/index.test.js +56 -0
- package/agnostic/objects/sort-keys/index.js +15 -13
- package/agnostic/objects/sort-keys/index.test.js +37 -0
- package/agnostic/objects/validation/index.js +21 -10
- package/agnostic/objects/validation/index.test.js +72 -0
- package/agnostic/optim/index.d.ts +1 -1
- package/agnostic/optim/index.js +1 -1
- package/agnostic/optim/memoize/index.js +24 -18
- package/agnostic/optim/memoize/index.test.js +30 -0
- package/agnostic/optim/throttle-debounce/index.js +120 -104
- package/agnostic/optim/throttle-debounce/index.test.js +44 -0
- package/agnostic/optim/throttle-debounce/types.js +1 -0
- package/agnostic/random/hex-char/index.js +9 -9
- package/agnostic/random/hex-char/index.test.js +20 -0
- package/agnostic/random/index.d.ts +1 -1
- package/agnostic/random/index.js +1 -1
- package/agnostic/random/random/index.js +19 -9
- package/agnostic/random/random/index.test.js +73 -0
- package/agnostic/random/uuid/index.js +31 -12
- package/agnostic/random/uuid/index.test.js +45 -0
- package/agnostic/regexps/index.js +126 -86
- package/agnostic/regexps/index.test.js +108 -0
- package/agnostic/sanitization/file-name/index.js +25 -7
- package/agnostic/sanitization/file-name/index.test.js +23 -0
- package/agnostic/sanitization/html/index.js +172 -116
- package/agnostic/sanitization/path/index.js +23 -13
- package/agnostic/sanitization/path/index.test.js +18 -0
- package/agnostic/sanitization/types.js +1 -0
- package/agnostic/sanitization/user-input/index.js +36 -26
- package/agnostic/sanitization/user-input/index.test.js +31 -0
- package/agnostic/strings/char-codes/index.js +123 -57
- package/agnostic/strings/matches/index.js +38 -11
- package/agnostic/strings/normalize-indent/index.js +34 -18
- package/agnostic/strings/parse-table/index.js +153 -84
- package/agnostic/strings/replace-all/index.js +36 -17
- package/agnostic/strings/to-alphanum/index.js +23 -10
- package/agnostic/strings/trim/index.js +24 -9
- package/agnostic/time/dates/format-date/index.js +140 -74
- package/agnostic/time/duration/index.js +106 -142
- package/agnostic/time/timeout/index.js +24 -18
- package/agnostic/time/transitions/index.js +200 -156
- package/agnostic/time/wait/index.js +11 -7
- package/agnostic/typescript/types.js +1 -0
- package/components/BeforeAfter/index.controlled.js +95 -0
- package/components/BeforeAfter/index.js +54 -152
- package/components/BeforeAfter/utils.js +9 -0
- package/components/Disclaimer/index.js +50 -9
- package/components/Drawer/index.js +82 -88
- package/components/EventListener/index.js +29 -47
- package/components/Gallery/index.js +146 -190
- package/components/Gallery/utils.js +12 -0
- package/components/Image/index.js +67 -106
- package/components/IntersectionObserver/index.js +62 -9
- package/components/Overlayer/index.js +59 -66
- package/components/Paginator/index.js +125 -9
- package/components/ResizeObserver/index.js +68 -9
- package/components/ResizeObserver/style.module.css +0 -0
- package/components/Scrllgngn/index.js +176 -183
- package/components/ScrollListener/index.js +97 -171
- package/components/ScrollListener/utils.js +51 -0
- package/components/Sequencer/index.controlled.js +67 -0
- package/components/Sequencer/index.js +105 -160
- package/components/ShadowRoot/index.js +42 -63
- package/components/Subtitles/index.js +107 -13
- package/components/Subtitles/types.js +1 -0
- package/components/Subtitles/utils.js +102 -0
- package/components/Theatre/index.js +89 -9
- package/components/UIModule/index.js +156 -146
- package/components/Video/index.d.ts +10 -0
- package/components/Video/index.js +292 -503
- package/components/Video/utils.js +137 -0
- package/components/_WIP_AudioQuote/index.js +1 -0
- package/components/_WIP_Icon/index.js +1 -0
- package/components/index.d.ts +2 -2
- package/components/index.js +2 -2
- package/components/public-classnames.js +18 -0
- package/components/utils/index.js +12 -7
- package/components/utils/types.js +1 -0
- package/index.d.ts +1 -2
- package/index.js +1 -2
- package/node/@aws-s3/index.test.js +6 -0
- package/node/@aws-s3/storage/directory/copy-dir/index.js +68 -9
- package/node/@aws-s3/storage/directory/index.d.ts +1 -1
- package/node/@aws-s3/storage/directory/index.js +1 -1
- package/node/@aws-s3/storage/directory/list/index.js +33 -9
- package/node/@aws-s3/storage/directory/move-dir/index.js +69 -9
- package/node/@aws-s3/storage/directory/remove-dir/index.js +59 -9
- package/node/@aws-s3/storage/file/copy/index.js +43 -9
- package/node/@aws-s3/storage/file/download/index.js +30 -9
- package/node/@aws-s3/storage/file/exists/index.js +37 -9
- package/node/@aws-s3/storage/file/index.d.ts +1 -1
- package/node/@aws-s3/storage/file/index.js +1 -1
- package/node/@aws-s3/storage/file/move/index.js +60 -9
- package/node/@aws-s3/storage/file/remove/index.js +38 -9
- package/node/@aws-s3/storage/file/stat/index.js +34 -9
- package/node/@aws-s3/storage/file/upload/index.js +55 -9
- package/node/@design-edito/index.js +1 -0
- package/node/@express/@multer/index.js +61 -45
- package/node/@google-cloud/storage/bucket/get-metadata/index.js +25 -21
- package/node/@google-cloud/storage/directory/copy-dir/index.js +38 -9
- package/node/@google-cloud/storage/directory/list/index.js +29 -9
- package/node/@google-cloud/storage/directory/move-dir/index.js +45 -9
- package/node/@google-cloud/storage/directory/remove-dir/index.js +36 -9
- package/node/@google-cloud/storage/file/copy/index.js +37 -9
- package/node/@google-cloud/storage/file/download/index.js +28 -9
- package/node/@google-cloud/storage/file/exists/index.js +26 -9
- package/node/@google-cloud/storage/file/generate-signed-url/index.js +33 -27
- package/node/@google-cloud/storage/file/get-metadata/index.js +28 -23
- package/node/@google-cloud/storage/file/get-permissions/index.js +25 -23
- package/node/@google-cloud/storage/file/index.d.ts +1 -1
- package/node/@google-cloud/storage/file/index.js +1 -1
- package/node/@google-cloud/storage/file/move/index.js +40 -9
- package/node/@google-cloud/storage/file/remove/index.js +36 -9
- package/node/@google-cloud/storage/file/revoke-signed-urls/index.js +32 -29
- package/node/@google-cloud/storage/file/stat/index.js +35 -9
- package/node/@google-cloud/storage/file/update-metadata/index.js +30 -23
- package/node/@google-cloud/storage/file/upload/index.js +47 -9
- package/node/cloud-storage/clients/index.js +35 -13
- package/node/cloud-storage/operations/copy-dir/index.js +30 -34
- package/node/cloud-storage/operations/copy-file/index.js +30 -34
- package/node/cloud-storage/operations/download-file/index.js +30 -34
- package/node/cloud-storage/operations/exists-file/index.js +30 -34
- package/node/cloud-storage/operations/list-dir/index.js +29 -34
- package/node/cloud-storage/operations/move-dir/index.js +30 -34
- package/node/cloud-storage/operations/move-file/index.js +30 -34
- package/node/cloud-storage/operations/remove-dir/index.js +29 -34
- package/node/cloud-storage/operations/remove-file/index.js +29 -34
- package/node/cloud-storage/operations/stat-file/index.js +29 -34
- package/node/cloud-storage/operations/upload-file/index.js +30 -34
- package/node/encryption/@aes-256-gcm/buffer/index.js +31 -26
- package/node/encryption/@aes-256-gcm/index.d.ts +1 -1
- package/node/encryption/@aes-256-gcm/index.js +1 -1
- package/node/encryption/@aes-256-gcm/uint8-array/index.js +57 -11
- package/node/encryption/key/index.js +19 -14
- package/node/files/is-in-directory/index.js +11 -10
- package/node/files/read-write/index.js +11 -17
- package/node/files/subpaths/index.js +156 -113
- package/node/ftps/directory/copy-dir/index.js +58 -9
- package/node/ftps/directory/index.d.ts +1 -1
- package/node/ftps/directory/index.js +1 -1
- package/node/ftps/directory/list/index.js +25 -9
- package/node/ftps/directory/move-dir/index.js +41 -9
- package/node/ftps/directory/remove-dir/index.js +42 -9
- package/node/ftps/file/copy/index.js +45 -9
- package/node/ftps/file/download/index.js +30 -9
- package/node/ftps/file/exists/index.js +39 -9
- package/node/ftps/file/index.d.ts +1 -1
- package/node/ftps/file/index.js +1 -1
- package/node/ftps/file/move/index.js +49 -9
- package/node/ftps/file/remove/index.js +40 -9
- package/node/ftps/file/stat/index.js +31 -9
- package/node/ftps/file/upload/index.js +44 -9
- package/node/images/create/index.js +10 -18
- package/node/images/format/index.js +264 -251
- package/node/images/index.d.ts +1 -1
- package/node/images/index.js +1 -1
- package/node/images/metadata/index.js +10 -18
- package/node/images/transform/index.js +168 -203
- package/node/images/transform/operations/blur/index.js +12 -10
- package/node/images/transform/operations/brighten/index.js +12 -10
- package/node/images/transform/operations/extend/index.js +26 -17
- package/node/images/transform/operations/extract/index.js +17 -10
- package/node/images/transform/operations/flatten/index.js +21 -17
- package/node/images/transform/operations/flip/index.js +3 -7
- package/node/images/transform/operations/flop/index.js +3 -7
- package/node/images/transform/operations/hue/index.js +14 -10
- package/node/images/transform/operations/index.d.ts +2 -2
- package/node/images/transform/operations/index.js +2 -2
- package/node/images/transform/operations/level/index.js +15 -10
- package/node/images/transform/operations/lighten/index.js +14 -10
- package/node/images/transform/operations/normalize/index.js +15 -10
- package/node/images/transform/operations/overlay/index.js +90 -17
- package/node/images/transform/operations/resize/index.js +47 -17
- package/node/images/transform/operations/rotate/index.js +21 -17
- package/node/images/transform/operations/saturate/index.js +16 -10
- package/node/images/types.js +34 -9
- package/node/images/utils/index.js +85 -19
- package/node/index.d.ts +3 -3
- package/node/index.js +3 -3
- package/node/process/on-exit/index.js +45 -28
- package/node/process/prompt-continue/index.js +29 -16
- package/node/process/spawner/index.js +104 -80
- package/node/sftp/directory/copy-dir/index.js +55 -9
- package/node/sftp/directory/list/index.js +23 -9
- package/node/sftp/directory/move-dir/index.js +38 -9
- package/node/sftp/directory/remove-dir/index.js +42 -9
- package/node/sftp/file/copy/index.js +40 -9
- package/node/sftp/file/download/index.js +27 -9
- package/node/sftp/file/exists/index.js +30 -9
- package/node/sftp/file/index.d.ts +2 -2
- package/node/sftp/file/index.js +2 -2
- package/node/sftp/file/move/index.js +42 -9
- package/node/sftp/file/remove/index.js +33 -9
- package/node/sftp/file/stat/index.js +28 -9
- package/node/sftp/file/upload/index.js +36 -9
- package/package.json +1 -8
- package/chunks/chunk-2FNCUXAX.js +0 -27
- package/chunks/chunk-2GJSPEO4.js +0 -31
- package/chunks/chunk-2IGP6V77.js +0 -22
- package/chunks/chunk-3QI2MSDK.js +0 -34
- package/chunks/chunk-3RNLPW7B.js +0 -101
- package/chunks/chunk-3RZMW72G.js +0 -33
- package/chunks/chunk-4KLCJX2T.js +0 -36
- package/chunks/chunk-4LTN4SCD.js +0 -55
- package/chunks/chunk-4Q4T7QQO.js +0 -27
- package/chunks/chunk-4Q5TKOIG.js +0 -53
- package/chunks/chunk-57YKZBJR.js +0 -29
- package/chunks/chunk-5H3IRSOB.js +0 -8
- package/chunks/chunk-5NTPCRFH.js +0 -32
- package/chunks/chunk-5TM235Z3.js +0 -40
- package/chunks/chunk-5WVGUZL5.js +0 -35
- package/chunks/chunk-6XL25OZX.js +0 -12
- package/chunks/chunk-75BICI4L.js +0 -20
- package/chunks/chunk-77SWZUHV.js +0 -31
- package/chunks/chunk-AC4UMIWM.js +0 -124
- package/chunks/chunk-AG4VERYN.js +0 -25
- package/chunks/chunk-AP3VYSVF.js +0 -36
- package/chunks/chunk-ASXK7XCC.js +0 -18
- package/chunks/chunk-AVIMGMTP.js +0 -17
- package/chunks/chunk-B4HGXMP3.js +0 -20
- package/chunks/chunk-B5V7D2ZL.js +0 -77
- package/chunks/chunk-B6653QJD.js +0 -37
- package/chunks/chunk-BCX4HPD7.js +0 -33
- package/chunks/chunk-CVMYA5XK.js +0 -632
- package/chunks/chunk-DMWGHBIL.js +0 -25
- package/chunks/chunk-DNIOWD7K.js +0 -8
- package/chunks/chunk-E2ZY3SEW.js +0 -26
- package/chunks/chunk-E6MSDKON.js +0 -13
- package/chunks/chunk-E7BBN5JC.js +0 -22
- package/chunks/chunk-EX2QKFY5.js +0 -41
- package/chunks/chunk-EYYNCLVR.js +0 -33
- package/chunks/chunk-F2YJXIT7.js +0 -78
- package/chunks/chunk-FSNNEPY5.js +0 -37
- package/chunks/chunk-GG4EFNMU.js +0 -89
- package/chunks/chunk-GQBFMP6N.js +0 -32
- package/chunks/chunk-H3HRQ52T.js +0 -32
- package/chunks/chunk-H4PP6AHP.js +0 -15
- package/chunks/chunk-HC6ZOHCS.js +0 -14
- package/chunks/chunk-HMMPT3UM.js +0 -47
- package/chunks/chunk-HQLRJ7XW.js +0 -12
- package/chunks/chunk-HYGUIF2O.js +0 -23
- package/chunks/chunk-HYPEWMYZ.js +0 -10
- package/chunks/chunk-I5MRXMHR.js +0 -32
- package/chunks/chunk-I6ZP5T5V.js +0 -10
- package/chunks/chunk-IEZ3O5OF.js +0 -40
- package/chunks/chunk-IPRWXI27.js +0 -31
- package/chunks/chunk-IRKZUMWZ.js +0 -38
- package/chunks/chunk-ISJONMNA.js +0 -16
- package/chunks/chunk-JB27MAKY.js +0 -22
- package/chunks/chunk-JZ6GM444.js +0 -43
- package/chunks/chunk-K5UF634H.js +0 -25
- package/chunks/chunk-LEBGVBYD.js +0 -138
- package/chunks/chunk-LJ5MGLLU.js +0 -56
- package/chunks/chunk-LUAYN7VJ.js +0 -27
- package/chunks/chunk-MDVGDZU6.js +0 -25
- package/chunks/chunk-ML22TIBW.js +0 -37
- package/chunks/chunk-MO4TRYNI.js +0 -29
- package/chunks/chunk-MSU7JU63.js +0 -49
- package/chunks/chunk-NIBRPZJD.js +0 -58
- package/chunks/chunk-O32IRXDX.js +0 -78
- package/chunks/chunk-OAX7GS7C.js +0 -36
- package/chunks/chunk-OBSTP7YR.js +0 -257
- package/chunks/chunk-OFCSIK6J.js +0 -13
- package/chunks/chunk-OFYGPRWE.js +0 -21
- package/chunks/chunk-OGBUSUE6.js +0 -12
- package/chunks/chunk-OSAXBA7G.js +0 -10
- package/chunks/chunk-OT7QXCH6.js +0 -23
- package/chunks/chunk-P4J6S2WQ.js +0 -64
- package/chunks/chunk-PUQUSA6S.js +0 -12
- package/chunks/chunk-PYJKFOMV.js +0 -193
- package/chunks/chunk-QHEWBOQI.js +0 -19
- package/chunks/chunk-QXAJXTXV.js +0 -19
- package/chunks/chunk-R3AWQXMY.js +0 -20
- package/chunks/chunk-R66GH2MQ.js +0 -38
- package/chunks/chunk-RART44AF.js +0 -21
- package/chunks/chunk-REXSJULD.js +0 -28
- package/chunks/chunk-RJRNYRPM.js +0 -23
- package/chunks/chunk-RKX6KLPQ.js +0 -47
- package/chunks/chunk-RW7VAKJW.js +0 -15
- package/chunks/chunk-RZOR7ZC3.js +0 -35
- package/chunks/chunk-S2UZ3HZR.js +0 -31
- package/chunks/chunk-SYH5LYQC.js +0 -28
- package/chunks/chunk-TAXFCVFE.js +0 -30
- package/chunks/chunk-TNZGRXKJ.js +0 -24
- package/chunks/chunk-TRFZSKNB.js +0 -32
- package/chunks/chunk-U664BT44.js +0 -45
- package/chunks/chunk-U6SGKHHA.js +0 -32
- package/chunks/chunk-UTQNGKGQ.js +0 -60
- package/chunks/chunk-VPBZS3S4.js +0 -27
- package/chunks/chunk-W5A2TON3.js +0 -10
- package/chunks/chunk-W7PJ5NQQ.js +0 -23
- package/chunks/chunk-WGRQXVBK.js +0 -207
- package/chunks/chunk-WIFHP4X7.js +0 -56
- package/chunks/chunk-WL4WNJ2Y.js +0 -39
- package/chunks/chunk-WNDMYNDU.js +0 -8
- package/chunks/chunk-WSFCRVEQ.js +0 -9
- package/chunks/chunk-WZS4Q3G3.js +0 -36
- package/chunks/chunk-X4YSGOKG.js +0 -2673
- package/chunks/chunk-XA4HVHJ4.js +0 -18
- package/chunks/chunk-XEQ2PBT2.js +0 -20
- package/chunks/chunk-XFB4PUXO.js +0 -78
- package/chunks/chunk-XIIJYVJZ.js +0 -15
- package/chunks/chunk-XNF5MLCQ.js +0 -14
- package/chunks/chunk-XQUMWHCH.js +0 -25
- package/chunks/chunk-YA2YCZUF.js +0 -8
- package/chunks/chunk-YDIBNEGA.js +0 -9
- package/chunks/chunk-YHMR7IBA.js +0 -24
- package/chunks/chunk-YWSXCFYY.js +0 -61
- package/chunks/chunk-YY3TSU22.js +0 -48
- package/chunks/chunk-ZAP3ELDE.js +0 -40
- package/chunks/chunk-ZJNQRKEJ.js +0 -105
- package/chunks/chunk-ZJR5ASR3.js +0 -26
- package/chunks/index.d.ts +0 -1
- 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
|
-
|
|
3
|
-
} from
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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
|
-
|
|
3
|
-
} from
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
} from
|
|
7
|
-
import
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
_setLoadedModule(
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
stateHandlers?.
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
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
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
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
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
};
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
{
|
|
137
|
-
|
|
138
|
-
|
|
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
|
*
|