@design-edito/tools 0.4.5 → 0.4.11
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 -7
- package/agnostic/arrays/dedupe/index.test.js +24 -0
- package/agnostic/arrays/find-duplicates/index.js +34 -22
- package/agnostic/arrays/find-duplicates/index.test.js +31 -0
- package/agnostic/arrays/index.d.ts +2 -2
- package/agnostic/arrays/index.js +2 -2
- 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.d.ts +1 -1
- package/agnostic/arrays/make/index.js +11 -6
- package/agnostic/arrays/make/index.test.js +10 -0
- package/agnostic/arrays/random-pick/index.js +38 -22
- package/agnostic/arrays/random-pick/index.test.js +23 -0
- package/agnostic/arrays/shuffle/index.js +15 -11
- package/agnostic/arrays/shuffle/index.test.js +14 -0
- package/agnostic/booleans/is-falsy/index.js +24 -15
- package/agnostic/booleans/is-falsy/index.test.js +26 -0
- package/agnostic/colors/channels/index.js +139 -936
- package/agnostic/colors/channels/index.test.js +64 -0
- package/agnostic/colors/contrast/index.js +24 -643
- package/agnostic/colors/contrast/index.test.js +21 -0
- package/agnostic/colors/convert/index.js +811 -837
- package/agnostic/colors/convert/index.test.js +98 -0
- package/agnostic/colors/cssColorsMap.js +153 -0
- package/agnostic/colors/distance/index.js +66 -538
- package/agnostic/colors/distance/index.test.js +21 -0
- package/agnostic/colors/grayscale/index.js +95 -872
- package/agnostic/colors/grayscale/index.test.js +34 -0
- package/agnostic/colors/index.d.ts +4 -4
- package/agnostic/colors/index.js +4 -4
- package/agnostic/colors/invert/index.js +34 -719
- package/agnostic/colors/invert/index.test.js +31 -0
- package/agnostic/colors/lerp/index.js +75 -804
- package/agnostic/colors/lerp/index.test.js +55 -0
- package/agnostic/colors/luminance/index.js +17 -625
- package/agnostic/colors/luminance/index.test.js +30 -0
- package/agnostic/colors/palette/index.js +83 -917
- package/agnostic/colors/palette/index.test.js +35 -0
- package/agnostic/colors/rotate/index.js +35 -835
- package/agnostic/colors/rotate/index.test.js +45 -0
- package/agnostic/colors/tidy/index.js +79 -530
- package/agnostic/colors/tidy/index.test.js +45 -0
- package/agnostic/colors/typechecks/index.js +188 -250
- package/agnostic/colors/typechecks/index.test.js +113 -0
- package/agnostic/colors/types.js +1 -0
- package/agnostic/css/bem/index.js +134 -171
- package/agnostic/css/clss/index.js +64 -29
- package/agnostic/css/clss/index.test.js +60 -0
- package/agnostic/css/generate-nice-color/index.js +26 -71
- package/agnostic/css/generate-nice-color/index.test.js +8 -0
- package/agnostic/css/index.d.ts +2 -2
- package/agnostic/css/index.js +2 -2
- package/agnostic/css/is-valid-css-class-name/index.js +14 -8
- package/agnostic/css/is-valid-css-class-name/index.test.js +36 -0
- package/agnostic/css/scale/index.d.ts +46 -16
- package/agnostic/css/scale/index.js +70 -54
- package/agnostic/css/scale/index.test.js +88 -0
- package/agnostic/css/styles-set/index.js +151 -178
- package/agnostic/errors/index.d.ts +1 -1
- package/agnostic/errors/index.js +1 -1
- package/agnostic/errors/register/index.js +45 -49
- package/agnostic/errors/unknown-to-string/index.js +17 -10
- package/agnostic/errors/unknown-to-string/index.test.js +35 -0
- package/agnostic/html/get-node-ancestors/index.js +29 -29
- package/agnostic/html/get-node-ancestors/index.test.js +58 -0
- package/agnostic/html/get-position-inside-parent/index.js +13 -8
- package/agnostic/html/get-position-inside-parent/index.test.js +56 -0
- package/agnostic/html/hyper-json/cast/index.js +128 -2931
- package/agnostic/html/hyper-json/index.js +23 -2954
- package/agnostic/html/hyper-json/method/index.js +10 -14
- package/agnostic/html/hyper-json/serialize/index.js +88 -222
- package/agnostic/html/hyper-json/smart-tags/coalesced/add/index.js +14 -2938
- package/agnostic/html/hyper-json/smart-tags/coalesced/addclass/index.js +27 -2937
- package/agnostic/html/hyper-json/smart-tags/coalesced/and/index.js +13 -2938
- package/agnostic/html/hyper-json/smart-tags/coalesced/append/index.js +34 -2938
- package/agnostic/html/hyper-json/smart-tags/coalesced/at/index.js +42 -2935
- package/agnostic/html/hyper-json/smart-tags/coalesced/call/index.js +47 -2937
- package/agnostic/html/hyper-json/smart-tags/coalesced/clone/index.js +10 -2939
- package/agnostic/html/hyper-json/smart-tags/coalesced/deleteproperties/index.js +45 -2936
- package/agnostic/html/hyper-json/smart-tags/coalesced/equals/index.js +22 -2938
- package/agnostic/html/hyper-json/smart-tags/coalesced/getattribute/index.js +26 -2938
- package/agnostic/html/hyper-json/smart-tags/coalesced/getproperties/index.js +19 -2938
- package/agnostic/html/hyper-json/smart-tags/coalesced/getproperty/index.js +67 -2935
- package/agnostic/html/hyper-json/smart-tags/coalesced/hjparse/index.js +21 -2937
- package/agnostic/html/hyper-json/smart-tags/coalesced/hjstringify/index.js +89 -2938
- package/agnostic/html/hyper-json/smart-tags/coalesced/if/index.js +20 -2938
- package/agnostic/html/hyper-json/smart-tags/coalesced/index.d.ts +11 -11
- package/agnostic/html/hyper-json/smart-tags/coalesced/index.js +11 -11
- package/agnostic/html/hyper-json/smart-tags/coalesced/initialize/index.js +37 -2938
- package/agnostic/html/hyper-json/smart-tags/coalesced/join/index.js +16 -2938
- package/agnostic/html/hyper-json/smart-tags/coalesced/length/index.js +21 -2938
- package/agnostic/html/hyper-json/smart-tags/coalesced/map/index.js +31 -2938
- package/agnostic/html/hyper-json/smart-tags/coalesced/negate/index.js +10 -2939
- package/agnostic/html/hyper-json/smart-tags/coalesced/notrailing/index.js +33 -2938
- package/agnostic/html/hyper-json/smart-tags/coalesced/or/index.js +13 -2938
- package/agnostic/html/hyper-json/smart-tags/coalesced/pickrandom/index.js +17 -2938
- package/agnostic/html/hyper-json/smart-tags/coalesced/populate/index.js +59 -2938
- package/agnostic/html/hyper-json/smart-tags/coalesced/print/index.js +23 -2938
- package/agnostic/html/hyper-json/smart-tags/coalesced/push/index.js +10 -2939
- package/agnostic/html/hyper-json/smart-tags/coalesced/pusheach/index.js +26 -2938
- package/agnostic/html/hyper-json/smart-tags/coalesced/recordtoarray/index.js +10 -2939
- package/agnostic/html/hyper-json/smart-tags/coalesced/removeattribute/index.js +53 -2935
- package/agnostic/html/hyper-json/smart-tags/coalesced/removeclass/index.js +27 -2937
- package/agnostic/html/hyper-json/smart-tags/coalesced/renameproperty/index.js +31 -2937
- package/agnostic/html/hyper-json/smart-tags/coalesced/replace/index.js +55 -2940
- package/agnostic/html/hyper-json/smart-tags/coalesced/select/index.js +29 -2935
- package/agnostic/html/hyper-json/smart-tags/coalesced/set/index.js +29 -2938
- package/agnostic/html/hyper-json/smart-tags/coalesced/setattribute/index.js +53 -2935
- package/agnostic/html/hyper-json/smart-tags/coalesced/setproperty/index.js +232 -2936
- package/agnostic/html/hyper-json/smart-tags/coalesced/sorton/index.js +89 -2936
- package/agnostic/html/hyper-json/smart-tags/coalesced/split/index.js +20 -2938
- package/agnostic/html/hyper-json/smart-tags/coalesced/spread/index.js +23 -2939
- package/agnostic/html/hyper-json/smart-tags/coalesced/toarray/index.js +11 -2939
- package/agnostic/html/hyper-json/smart-tags/coalesced/toboolean/index.js +11 -2939
- package/agnostic/html/hyper-json/smart-tags/coalesced/toelement/index.js +17 -2938
- package/agnostic/html/hyper-json/smart-tags/coalesced/toggleclass/index.js +27 -2937
- package/agnostic/html/hyper-json/smart-tags/coalesced/tonodelist/index.js +11 -2939
- package/agnostic/html/hyper-json/smart-tags/coalesced/tonull/index.js +10 -2939
- package/agnostic/html/hyper-json/smart-tags/coalesced/tonumber/index.js +11 -2939
- package/agnostic/html/hyper-json/smart-tags/coalesced/torecord/index.js +11 -2939
- package/agnostic/html/hyper-json/smart-tags/coalesced/toref/index.js +11 -2939
- package/agnostic/html/hyper-json/smart-tags/coalesced/tostring/index.js +11 -2939
- package/agnostic/html/hyper-json/smart-tags/coalesced/totext/index.js +11 -2939
- package/agnostic/html/hyper-json/smart-tags/coalesced/transformselected/index.js +84 -2938
- package/agnostic/html/hyper-json/smart-tags/coalesced/trim/index.js +14 -2938
- package/agnostic/html/hyper-json/smart-tags/index.js +28 -181
- package/agnostic/html/hyper-json/smart-tags/isolated/any/index.js +12 -195
- package/agnostic/html/hyper-json/smart-tags/isolated/array/index.js +12 -195
- package/agnostic/html/hyper-json/smart-tags/isolated/boolean/index.js +12 -2939
- package/agnostic/html/hyper-json/smart-tags/isolated/element/index.js +24 -2938
- package/agnostic/html/hyper-json/smart-tags/isolated/get/index.js +18 -2938
- package/agnostic/html/hyper-json/smart-tags/isolated/guess/index.js +56 -2937
- package/agnostic/html/hyper-json/smart-tags/isolated/index.d.ts +2 -2
- package/agnostic/html/hyper-json/smart-tags/isolated/index.js +2 -2
- package/agnostic/html/hyper-json/smart-tags/isolated/nodelist/index.js +18 -2938
- package/agnostic/html/hyper-json/smart-tags/isolated/null/index.js +9 -193
- package/agnostic/html/hyper-json/smart-tags/isolated/number/index.js +16 -2938
- package/agnostic/html/hyper-json/smart-tags/isolated/record/index.js +12 -2938
- package/agnostic/html/hyper-json/smart-tags/isolated/ref/index.js +40 -2935
- package/agnostic/html/hyper-json/smart-tags/isolated/string/index.js +16 -2938
- package/agnostic/html/hyper-json/smart-tags/isolated/text/index.js +18 -2938
- package/agnostic/html/hyper-json/transformer/index.js +112 -148
- package/agnostic/html/hyper-json/tree/index.js +411 -2928
- package/agnostic/html/hyper-json/types/index.js +27 -18
- package/agnostic/html/hyper-json/utils/index.js +497 -2921
- package/agnostic/html/index.d.ts +2 -2
- package/agnostic/html/index.js +2 -2
- package/agnostic/html/insert-node/index.js +27 -16
- package/agnostic/html/insert-node/index.test.js +73 -0
- package/agnostic/html/placeholders/index.js +26 -29
- package/agnostic/html/replace-in-element/index.js +31 -48
- package/agnostic/html/replace-in-element/index.test.js +80 -0
- package/agnostic/html/selector-to-element/index.js +53 -39
- package/agnostic/html/selector-to-element/index.test.js +69 -0
- package/agnostic/html/string-to-nodes/index.js +24 -25
- package/agnostic/html/string-to-nodes/index.test.js +54 -0
- package/agnostic/index.d.ts +4 -4
- package/agnostic/index.js +4 -4
- package/agnostic/misc/assert/index.js +60 -66
- package/agnostic/misc/cast/index.js +123 -57
- package/agnostic/misc/cast/index.test.js +134 -0
- package/agnostic/misc/connection/index.js +55 -36
- package/agnostic/misc/connection/index.test.js +143 -0
- package/agnostic/misc/crawler/index.js +68 -46
- package/agnostic/misc/crawler/index.test.js +56 -0
- package/agnostic/misc/crossenv/detect-runtime/index.js +41 -13
- package/agnostic/misc/crossenv/detect-runtime/index.test.js +24 -0
- package/agnostic/misc/crossenv/types.js +21 -14
- package/agnostic/misc/crossenv/window/index.js +45 -24
- package/agnostic/misc/crossenv/window/index.test.js +24 -0
- package/agnostic/misc/data-size/index.js +182 -294
- 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 +5 -5
- package/agnostic/misc/index.js +5 -5
- package/agnostic/misc/is-constructor-function/index.js +12 -6
- package/agnostic/misc/is-constructor-function/index.test.js +36 -0
- package/agnostic/misc/is-nullish/index.js +24 -11
- package/agnostic/misc/is-nullish/index.test.js +44 -0
- package/agnostic/misc/logs/index.d.ts +1 -1
- package/agnostic/misc/logs/index.js +1 -1
- package/agnostic/misc/logs/logger/index.js +115 -140
- package/agnostic/misc/logs/make-text-block/index.js +13 -13
- package/agnostic/misc/logs/styles/index.js +29 -48
- package/agnostic/misc/lorem-ipsum/index.js +51 -201
- package/agnostic/misc/lorem-ipsum/index.test.js +49 -0
- package/agnostic/misc/normalize-extension/index.js +99 -88
- package/agnostic/misc/normalize-extension/index.test.js +40 -0
- package/agnostic/misc/outcome/index.js +20 -14
- package/agnostic/misc/outcome/index.test.js +40 -0
- package/agnostic/numbers/absolute-modulo/index.js +9 -6
- package/agnostic/numbers/absolute-modulo/index.test.js +23 -0
- package/agnostic/numbers/approximate-rational/index.js +86 -69
- package/agnostic/numbers/approximate-rational/index.test.js +90 -0
- package/agnostic/numbers/clamp/index.js +12 -8
- package/agnostic/numbers/clamp/index.test.js +24 -0
- package/agnostic/numbers/geometric-progressions/index.js +25 -16
- package/agnostic/numbers/geometric-progressions/index.test.js +45 -0
- package/agnostic/numbers/index.d.ts +2 -2
- package/agnostic/numbers/index.js +2 -2
- package/agnostic/numbers/interpolate/index.js +25 -10
- package/agnostic/numbers/interpolate/index.test.js +40 -0
- package/agnostic/numbers/round/index.js +30 -15
- package/agnostic/numbers/round/index.test.js +56 -0
- package/agnostic/objects/deep-get-property/index.js +30 -27
- package/agnostic/objects/deep-get-property/index.test.js +59 -0
- package/agnostic/objects/enums/is-in-enum/index.js +17 -11
- package/agnostic/objects/enums/is-in-enum/index.test.js +100 -0
- package/agnostic/objects/flatten-getters/index.js +15 -14
- package/agnostic/objects/flatten-getters/index.test.js +78 -0
- package/agnostic/objects/index.d.ts +4 -4
- package/agnostic/objects/index.js +4 -4
- package/agnostic/objects/is-object/index.js +16 -9
- package/agnostic/objects/is-object/index.test.js +60 -0
- package/agnostic/objects/is-record/index.js +12 -7
- package/agnostic/objects/is-record/index.test.js +48 -0
- package/agnostic/objects/record-format/index.js +18 -12
- package/agnostic/objects/record-format/index.test.js +92 -0
- package/agnostic/objects/record-map/index.js +16 -11
- package/agnostic/objects/record-map/index.test.js +56 -0
- package/agnostic/objects/sort-keys/index.js +15 -11
- package/agnostic/objects/sort-keys/index.test.js +37 -0
- package/agnostic/objects/validation/index.js +21 -8
- package/agnostic/objects/validation/index.test.js +72 -0
- package/agnostic/optim/memoize/index.js +24 -16
- package/agnostic/optim/memoize/index.test.js +30 -0
- package/agnostic/optim/throttle-debounce/index.js +120 -102
- 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 +8 -10
- 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 +17 -14
- package/agnostic/random/random/index.test.js +73 -0
- package/agnostic/random/uuid/index.js +28 -20
- package/agnostic/random/uuid/index.test.js +45 -0
- package/agnostic/regexps/index.js +126 -84
- package/agnostic/regexps/index.test.js +108 -0
- package/agnostic/sanitization/file-name/index.js +24 -8
- package/agnostic/sanitization/file-name/index.test.js +23 -0
- package/agnostic/sanitization/html/index.js +172 -122
- package/agnostic/sanitization/index.d.ts +1 -1
- package/agnostic/sanitization/index.js +1 -1
- package/agnostic/sanitization/path/index.js +23 -15
- package/agnostic/sanitization/path/index.test.js +18 -0
- package/agnostic/sanitization/types.js +1 -0
- package/agnostic/sanitization/user-input/index.js +36 -24
- package/agnostic/sanitization/user-input/index.test.js +31 -0
- package/agnostic/strings/char-codes/index.js +123 -55
- package/agnostic/strings/index.d.ts +1 -1
- package/agnostic/strings/index.js +1 -1
- package/agnostic/strings/matches/index.js +35 -16
- package/agnostic/strings/normalize-indent/index.js +34 -16
- package/agnostic/strings/parse-table/index.js +153 -86
- package/agnostic/strings/replace-all/index.js +36 -15
- package/agnostic/strings/to-alphanum/index.js +23 -8
- package/agnostic/strings/trim/index.js +22 -9
- package/agnostic/time/dates/format-date/index.js +140 -72
- package/agnostic/time/duration/index.js +106 -140
- package/agnostic/time/timeout/index.js +24 -16
- package/agnostic/time/transitions/index.js +200 -158
- package/agnostic/time/wait/index.js +10 -8
- package/agnostic/typescript/types.js +1 -0
- package/components/BeforeAfter/index.controlled.js +95 -0
- package/components/BeforeAfter/index.js +54 -189
- package/components/BeforeAfter/utils.js +9 -0
- package/components/Disclaimer/index.js +50 -110
- package/components/Drawer/index.js +81 -196
- package/components/EventListener/index.js +29 -80
- package/components/Gallery/index.js +146 -221
- package/components/Gallery/utils.js +12 -0
- package/components/Image/index.js +66 -293
- package/components/IntersectionObserver/index.js +62 -110
- package/components/Overlayer/index.js +59 -103
- package/components/Paginator/index.js +124 -155
- package/components/ResizeObserver/index.js +66 -119
- package/components/ResizeObserver/style.module.css +0 -0
- package/components/Scrllgngn/index.js +171 -468
- package/components/ScrollListener/index.js +97 -276
- package/components/ScrollListener/utils.js +51 -0
- package/components/Sequencer/index.controlled.js +67 -0
- package/components/Sequencer/index.js +105 -262
- package/components/ShadowRoot/index.js +42 -96
- package/components/Subtitles/index.js +107 -244
- package/components/Subtitles/types.js +1 -0
- package/components/Subtitles/utils.js +102 -0
- package/components/Theatre/index.js +88 -136
- package/components/UIModule/index.js +156 -199
- package/components/Video/index.js +292 -857
- 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 +4 -4
- package/components/index.js +4 -4
- package/components/public-classnames.js +18 -0
- package/components/utils/index.js +11 -11
- package/components/utils/types.js +1 -0
- package/index.d.ts +1 -1
- package/index.js +1 -1
- package/node/@aws-s3/index.test.js +6 -0
- package/node/@aws-s3/storage/directory/copy-dir/index.js +66 -72
- 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 +32 -42
- package/node/@aws-s3/storage/directory/move-dir/index.js +68 -86
- package/node/@aws-s3/storage/directory/remove-dir/index.js +56 -67
- package/node/@aws-s3/storage/file/copy/index.js +41 -53
- package/node/@aws-s3/storage/file/download/index.js +29 -40
- package/node/@aws-s3/storage/file/exists/index.js +35 -43
- 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 +57 -63
- package/node/@aws-s3/storage/file/remove/index.js +35 -43
- package/node/@aws-s3/storage/file/stat/index.js +33 -47
- package/node/@aws-s3/storage/file/upload/index.js +52 -63
- package/node/@design-edito/index.js +1 -0
- package/node/@express/@multer/index.js +61 -55
- package/node/@google-cloud/storage/bucket/get-metadata/index.js +25 -29
- package/node/@google-cloud/storage/directory/copy-dir/index.js +35 -41
- package/node/@google-cloud/storage/directory/index.d.ts +1 -1
- package/node/@google-cloud/storage/directory/index.js +1 -1
- package/node/@google-cloud/storage/directory/list/index.js +28 -35
- package/node/@google-cloud/storage/directory/move-dir/index.js +43 -42
- package/node/@google-cloud/storage/directory/remove-dir/index.js +34 -38
- package/node/@google-cloud/storage/file/copy/index.js +35 -40
- package/node/@google-cloud/storage/file/download/index.js +27 -34
- package/node/@google-cloud/storage/file/exists/index.js +25 -31
- package/node/@google-cloud/storage/file/generate-signed-url/index.js +33 -35
- package/node/@google-cloud/storage/file/get-metadata/index.js +28 -31
- package/node/@google-cloud/storage/file/get-permissions/index.js +25 -31
- package/node/@google-cloud/storage/file/index.d.ts +3 -3
- package/node/@google-cloud/storage/file/index.js +3 -3
- package/node/@google-cloud/storage/file/move/index.js +38 -42
- package/node/@google-cloud/storage/file/remove/index.js +34 -35
- package/node/@google-cloud/storage/file/revoke-signed-urls/index.js +32 -95
- package/node/@google-cloud/storage/file/stat/index.js +34 -38
- package/node/@google-cloud/storage/file/update-metadata/index.js +30 -31
- package/node/@google-cloud/storage/file/upload/index.js +44 -46
- package/node/@google-cloud/storage/index.d.ts +1 -1
- package/node/@google-cloud/storage/index.js +1 -1
- package/node/cloud-storage/clients/index.js +35 -15
- package/node/cloud-storage/operations/copy-dir/index.js +30 -203
- package/node/cloud-storage/operations/copy-file/index.js +30 -152
- package/node/cloud-storage/operations/download-file/index.js +30 -103
- package/node/cloud-storage/operations/exists-file/index.js +30 -103
- package/node/cloud-storage/operations/index.d.ts +2 -2
- package/node/cloud-storage/operations/index.js +2 -2
- package/node/cloud-storage/operations/list-dir/index.js +29 -98
- package/node/cloud-storage/operations/move-dir/index.js +30 -169
- package/node/cloud-storage/operations/move-file/index.js +30 -157
- package/node/cloud-storage/operations/remove-dir/index.js +29 -159
- package/node/cloud-storage/operations/remove-file/index.js +29 -121
- package/node/cloud-storage/operations/stat-file/index.js +29 -124
- package/node/cloud-storage/operations/upload-file/index.js +30 -162
- package/node/encryption/@aes-256-gcm/buffer/index.js +31 -72
- package/node/encryption/@aes-256-gcm/uint8-array/index.js +55 -55
- package/node/encryption/key/index.js +19 -12
- package/node/files/index.d.ts +1 -1
- package/node/files/index.js +1 -1
- package/node/files/is-in-directory/index.js +11 -8
- package/node/files/read-write/index.js +11 -15
- package/node/files/subpaths/index.js +156 -121
- package/node/ftps/directory/copy-dir/index.js +55 -62
- package/node/ftps/directory/list/index.js +24 -29
- package/node/ftps/directory/move-dir/index.js +38 -38
- package/node/ftps/directory/remove-dir/index.js +39 -42
- package/node/ftps/file/copy/index.js +42 -47
- package/node/ftps/file/download/index.js +29 -34
- package/node/ftps/file/exists/index.js +38 -36
- package/node/ftps/file/index.d.ts +2 -2
- package/node/ftps/file/index.js +2 -2
- package/node/ftps/file/move/index.js +46 -44
- package/node/ftps/file/remove/index.js +36 -39
- package/node/ftps/file/stat/index.js +30 -38
- package/node/ftps/file/upload/index.js +40 -44
- package/node/images/create/index.js +10 -562
- package/node/images/format/index.js +264 -815
- package/node/images/metadata/index.js +10 -571
- package/node/images/transform/index.js +169 -1022
- package/node/images/transform/operations/blur/index.js +11 -24
- package/node/images/transform/operations/brighten/index.js +11 -24
- package/node/images/transform/operations/extend/index.js +25 -589
- package/node/images/transform/operations/extract/index.js +15 -28
- package/node/images/transform/operations/flatten/index.js +20 -584
- package/node/images/transform/operations/flip/index.js +2 -6
- package/node/images/transform/operations/flop/index.js +2 -6
- package/node/images/transform/operations/hue/index.js +13 -26
- package/node/images/transform/operations/index.d.ts +3 -3
- package/node/images/transform/operations/index.js +3 -3
- package/node/images/transform/operations/level/index.js +14 -30
- package/node/images/transform/operations/lighten/index.js +13 -26
- package/node/images/transform/operations/normalize/index.js +14 -27
- package/node/images/transform/operations/overlay/index.js +89 -673
- package/node/images/transform/operations/resize/index.js +46 -610
- package/node/images/transform/operations/rotate/index.js +20 -584
- package/node/images/transform/operations/saturate/index.js +14 -27
- package/node/images/types.js +34 -31
- package/node/images/utils/index.js +84 -568
- package/node/index.d.ts +2 -2
- package/node/index.js +2 -2
- package/node/process/on-exit/index.js +45 -26
- package/node/process/prompt-continue/index.js +29 -14
- package/node/process/spawner/index.js +104 -134
- package/node/sftp/directory/copy-dir/index.js +52 -60
- package/node/sftp/directory/index.d.ts +1 -1
- package/node/sftp/directory/index.js +1 -1
- package/node/sftp/directory/list/index.js +22 -29
- package/node/sftp/directory/move-dir/index.js +35 -35
- package/node/sftp/directory/remove-dir/index.js +39 -42
- package/node/sftp/file/copy/index.js +37 -45
- package/node/sftp/file/download/index.js +26 -32
- package/node/sftp/file/exists/index.js +29 -29
- package/node/sftp/file/index.d.ts +2 -2
- package/node/sftp/file/index.js +2 -2
- package/node/sftp/file/move/index.js +39 -38
- package/node/sftp/file/remove/index.js +31 -34
- package/node/sftp/file/stat/index.js +26 -37
- package/node/sftp/file/upload/index.js +34 -38
- package/package.json +1 -1
|
@@ -1,138 +1,90 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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
|
-
}).filter((name) => typeof name === "string").join(" ");
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
// src/components/public-classnames.ts
|
|
48
|
-
var theatre = "dsed-theatre";
|
|
49
|
-
|
|
50
|
-
// src/components/Theatre/index.tsx
|
|
51
|
-
import cssModule from "./styles.module.css";
|
|
52
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
53
|
-
var Theatre = ({
|
|
54
|
-
closeBtnContent,
|
|
55
|
-
openBtnContent,
|
|
56
|
-
isOn,
|
|
57
|
-
defaultIsOn,
|
|
58
|
-
exitOnEscape,
|
|
59
|
-
exitOnBgClick,
|
|
60
|
-
stateHandlers,
|
|
61
|
-
actionHandlers,
|
|
62
|
-
children,
|
|
63
|
-
className
|
|
64
|
-
}) => {
|
|
65
|
-
const [internalIsOn, setInternalIsOn] = useState(defaultIsOn ?? false);
|
|
66
|
-
const stageRef = useRef(null);
|
|
67
|
-
const isTheatreOn = isOn ?? internalIsOn;
|
|
68
|
-
const prevIsTheatreOnRef = useRef(isTheatreOn);
|
|
69
|
-
const handleCloseBtnClick = () => {
|
|
70
|
-
actionHandlers?.toggleClick?.(isTheatreOn);
|
|
71
|
-
if (isOn === void 0) setInternalIsOn(false);
|
|
72
|
-
};
|
|
73
|
-
const handleOpenBtnClick = () => {
|
|
74
|
-
actionHandlers?.toggleClick?.(isTheatreOn);
|
|
75
|
-
if (isOn === void 0) setInternalIsOn(true);
|
|
76
|
-
};
|
|
77
|
-
const handleStageBgClick = (e) => {
|
|
78
|
-
if (exitOnBgClick !== true) return;
|
|
79
|
-
if (e.target !== stageRef.current) return;
|
|
80
|
-
actionHandlers?.toggleClick?.(isTheatreOn);
|
|
81
|
-
if (isOn === void 0) setInternalIsOn(false);
|
|
82
|
-
};
|
|
83
|
-
useEffect(() => {
|
|
84
|
-
if (prevIsTheatreOnRef.current !== isTheatreOn) {
|
|
85
|
-
stateHandlers?.toggled?.(isTheatreOn);
|
|
86
|
-
prevIsTheatreOnRef.current = isTheatreOn;
|
|
87
|
-
}
|
|
88
|
-
}, [isTheatreOn, stateHandlers]);
|
|
89
|
-
useEffect(() => {
|
|
90
|
-
if (exitOnEscape === true || !isTheatreOn || isOn !== void 0) return;
|
|
91
|
-
const listener = (e) => {
|
|
92
|
-
if (e.key !== "Escape") return;
|
|
93
|
-
actionHandlers?.toggleClick?.(isTheatreOn);
|
|
94
|
-
setInternalIsOn(false);
|
|
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);
|
|
95
44
|
};
|
|
96
|
-
|
|
97
|
-
|
|
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
|
-
|
|
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 })] });
|
|
138
90
|
};
|
|
@@ -1,202 +1,159 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
} from
|
|
7
|
-
|
|
8
|
-
|
|
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
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
// src/components/utils/index.tsx
|
|
68
|
-
function mergeClassNames(...names) {
|
|
69
|
-
return names.map((name) => {
|
|
70
|
-
if (typeof name !== "string" && !Array.isArray(name)) return false;
|
|
71
|
-
if (Array.isArray(name)) return mergeClassNames(...name);
|
|
72
|
-
if (name.trim() === "") return false;
|
|
73
|
-
return name.trim();
|
|
74
|
-
}).filter((name) => typeof name === "string").join(" ");
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
// src/components/public-classnames.ts
|
|
78
|
-
var uiModule = "dsed-ui-module";
|
|
79
|
-
|
|
80
|
-
// src/components/UIModule/index.tsx
|
|
81
|
-
import cssModule from "./styles.module.css";
|
|
82
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
83
|
-
var UIModule = ({
|
|
84
|
-
src,
|
|
85
|
-
props,
|
|
86
|
-
stateHandlers,
|
|
87
|
-
className
|
|
88
|
-
}) => {
|
|
89
|
-
const [id] = useState(`f${randomHash(10)}`);
|
|
90
|
-
const [loading, setLoading] = useState(false);
|
|
91
|
-
const [loadedModule, _setLoadedModule] = useState(null);
|
|
92
|
-
const [moduleTarget, _setModuleTarget] = useState(null);
|
|
93
|
-
const rootRef = useRef(null);
|
|
94
|
-
const loadedModuleRef = useRef(null);
|
|
95
|
-
const moduleTargetRef = useRef(null);
|
|
96
|
-
const setLoadedModule = (data) => {
|
|
97
|
-
loadedModuleRef.current = data;
|
|
98
|
-
_setLoadedModule(data);
|
|
99
|
-
};
|
|
100
|
-
const setModuleTarget = (data) => {
|
|
101
|
-
moduleTargetRef.current = data;
|
|
102
|
-
_setModuleTarget(data);
|
|
103
|
-
};
|
|
104
|
-
useEffect(() => {
|
|
105
|
-
stateHandlers?.idChanged?.(id);
|
|
106
|
-
}, [id, stateHandlers]);
|
|
107
|
-
useEffect(() => {
|
|
108
|
-
stateHandlers?.isLoadingChanged?.(loading);
|
|
109
|
-
}, [loading, stateHandlers]);
|
|
110
|
-
useEffect(() => {
|
|
111
|
-
stateHandlers?.loadedModuleChanged?.(loadedModule);
|
|
112
|
-
}, [loadedModule, stateHandlers]);
|
|
113
|
-
useEffect(() => {
|
|
114
|
-
stateHandlers?.moduleTargetChanged?.(moduleTarget);
|
|
115
|
-
}, [moduleTarget, stateHandlers]);
|
|
116
|
-
useEffect(() => {
|
|
117
|
-
if (src === void 0) return;
|
|
118
|
-
try {
|
|
119
|
-
setLoading(true);
|
|
120
|
-
import(src).then((data) => {
|
|
121
|
-
setLoading(false);
|
|
122
|
-
const errs = {
|
|
123
|
-
notMod: new Error("Not a module"),
|
|
124
|
-
initFunc: new Error("Module exported member `init` must be a function"),
|
|
125
|
-
destroyFunc: new Error("Module exported member `destroy` must be a function"),
|
|
126
|
-
cssStrArr: new Error("Module exported member `css` must be an array of strings"),
|
|
127
|
-
updFunc: new Error("Module exported member `update` must be a function"),
|
|
128
|
-
initRetElt: new Error("Module exported function `init` must return an Element"),
|
|
129
|
-
initRetFirstElt: new Error("Module exported function `init` must return an array containing an Element in its first position")
|
|
130
|
-
};
|
|
131
|
-
if (!isNonNullObject(data)) return setLoadedModule(errs.notMod);
|
|
132
|
-
if (!("init" in data)) return setLoadedModule(errs.initFunc);
|
|
133
|
-
if (typeof data.init !== "function") return setLoadedModule(errs.initFunc);
|
|
134
|
-
if (!("destroy" in data) || typeof data.destroy !== "function") return setLoadedModule(errs.destroyFunc);
|
|
135
|
-
if ("css" in data) {
|
|
136
|
-
if (!Array.isArray(data.css)) return setLoadedModule(errs.cssStrArr);
|
|
137
|
-
if (data.css.some((i) => typeof i !== "string")) return setLoadedModule(errs.cssStrArr);
|
|
138
|
-
}
|
|
139
|
-
if ("update" in data && typeof data.update !== "function") return setLoadedModule(errs.updFunc);
|
|
140
|
-
const module = data;
|
|
141
|
-
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;
|
|
142
67
|
try {
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
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
|
+
});
|
|
150
117
|
}
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
};
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
{
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
id,
|
|
193
|
-
children: [
|
|
194
|
-
loadedModule === null && "",
|
|
195
|
-
loadedModule !== null && !(loadedModule instanceof Error) && loadedModule.css?.map((css) => /* @__PURE__ */ jsx("style", { children: `.${uiModule}#${id} { ${css} }` }))
|
|
196
|
-
]
|
|
197
|
-
}
|
|
198
|
-
);
|
|
199
|
-
};
|
|
200
|
-
export {
|
|
201
|
-
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} }` }))] });
|
|
202
159
|
};
|