umaki 0.7.6 → 0.8.1
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/README.md +249 -45
- package/dist/index.cjs.js +52 -48
- package/dist/index.d.ts +1 -0
- package/dist/index.es.js +52 -48
- package/dist/libs/callback/index.d.ts +5 -0
- package/dist/libs/callback/tap-async.cjs.js +8 -0
- package/dist/libs/callback/tap-async.d.ts +47 -0
- package/dist/libs/callback/tap-async.es.js +8 -0
- package/dist/libs/callback/tap.cjs.js +7 -0
- package/dist/libs/callback/tap.d.ts +35 -0
- package/dist/libs/callback/tap.es.js +7 -0
- package/dist/libs/config/{getConfig.cjs.js → get-config.cjs.js} +1 -1
- package/dist/libs/config/{getConfig.es.js → get-config.es.js} +1 -1
- package/dist/libs/config/index.d.ts +3 -3
- package/dist/libs/config/{setConfig.cjs.js → set-config.cjs.js} +1 -1
- package/dist/libs/config/{setConfig.es.js → set-config.es.js} +1 -1
- package/dist/libs/control/{bgScrollStop.cjs.js → bg-scroll-stop.cjs.js} +1 -1
- package/dist/libs/control/{bgScrollStop.es.js → bg-scroll-stop.es.js} +1 -1
- package/dist/libs/control/index.d.ts +3 -3
- package/dist/libs/control/{videoPlayControl.cjs.js → video-play-control.cjs.js} +1 -1
- package/dist/libs/control/{videoPlayControl.es.js → video-play-control.es.js} +1 -1
- package/dist/libs/convert/index.d.ts +2 -2
- package/dist/libs/get/{getAspectRatio.cjs.js → get-aspect-ratio.cjs.js} +1 -1
- package/dist/libs/get/{getAspectRatio.es.js → get-aspect-ratio.es.js} +1 -1
- package/dist/libs/get/{getGcd.cjs.js → get-gcd.cjs.js} +1 -1
- package/dist/libs/get/{getGcd.es.js → get-gcd.es.js} +1 -1
- package/dist/libs/get/{getStylePropertyValueToNumber.cjs.js → get-style-property-value-to-number.cjs.js} +1 -1
- package/dist/libs/get/{getStylePropertyValueToNumber.es.js → get-style-property-value-to-number.es.js} +1 -1
- package/dist/libs/get/{getUaData.cjs.js → get-ua-data.cjs.js} +1 -1
- package/dist/libs/get/{getUaData.es.js → get-ua-data.es.js} +1 -1
- package/dist/libs/get/index.d.ts +16 -16
- package/dist/libs/is/{checkDeviceSize.cjs.js → check-device-size.cjs.js} +1 -1
- package/dist/libs/is/{checkDeviceSize.es.js → check-device-size.es.js} +1 -1
- package/dist/libs/is/index.d.ts +9 -9
- package/dist/libs/is/{isIpad.cjs.js → is-ipad.cjs.js} +2 -2
- package/dist/libs/is/{isIpad.es.js → is-ipad.es.js} +2 -2
- package/dist/libs/is/{isSafari.cjs.js → is-safari.cjs.js} +1 -1
- package/dist/libs/is/{isSafari.es.js → is-safari.es.js} +1 -1
- package/dist/libs/remove/index.d.ts +4 -4
- package/dist/libs/security/index.d.ts +1 -1
- package/dist/libs/set/index.d.ts +6 -6
- package/dist/libs/to/index.d.ts +2 -2
- package/dist/libs/transform/index.d.ts +1 -1
- package/dist/libs/transform/wrap-text-with-spans.test.d.ts +1 -0
- package/dist/libs/wait/index.d.ts +1 -1
- package/dist/libs/wait/wait-for-all-media-loaded.test.d.ts +1 -0
- package/package.json +1 -1
- /package/dist/libs/{control/scrollToHash.test.d.ts → callback/tap-async.test.d.ts} +0 -0
- /package/dist/libs/{control/videoPlayControl.test.d.ts → callback/tap.test.d.ts} +0 -0
- /package/dist/libs/config/{defaultConfig.cjs.js → default-config.cjs.js} +0 -0
- /package/dist/libs/config/{defaultConfig.d.ts → default-config.d.ts} +0 -0
- /package/dist/libs/config/{defaultConfig.es.js → default-config.es.js} +0 -0
- /package/dist/libs/config/{getConfig.d.ts → get-config.d.ts} +0 -0
- /package/dist/libs/config/{setConfig.d.ts → set-config.d.ts} +0 -0
- /package/dist/libs/control/{bgScrollStop.d.ts → bg-scroll-stop.d.ts} +0 -0
- /package/dist/libs/control/{scrollToHash.cjs.js → scroll-to-hash.cjs.js} +0 -0
- /package/dist/libs/control/{scrollToHash.d.ts → scroll-to-hash.d.ts} +0 -0
- /package/dist/libs/control/{scrollToHash.es.js → scroll-to-hash.es.js} +0 -0
- /package/dist/libs/{convert/changeDateStringToSpecificFormat.test.d.ts → control/scroll-to-hash.test.d.ts} +0 -0
- /package/dist/libs/control/{videoPlayControl.d.ts → video-play-control.d.ts} +0 -0
- /package/dist/libs/{convert/jsonStringToJsonObject.test.d.ts → control/video-play-control.test.d.ts} +0 -0
- /package/dist/libs/convert/{changeDateStringToSpecificFormat.cjs.js → change-date-string-to-specific-format.cjs.js} +0 -0
- /package/dist/libs/convert/{changeDateStringToSpecificFormat.d.ts → change-date-string-to-specific-format.d.ts} +0 -0
- /package/dist/libs/convert/{changeDateStringToSpecificFormat.es.js → change-date-string-to-specific-format.es.js} +0 -0
- /package/dist/libs/{get/getAspectRatio.test.d.ts → convert/change-date-string-to-specific-format.test.d.ts} +0 -0
- /package/dist/libs/convert/{jsonStringToJsonObject.cjs.js → json-string-to-json-object.cjs.js} +0 -0
- /package/dist/libs/convert/{jsonStringToJsonObject.d.ts → json-string-to-json-object.d.ts} +0 -0
- /package/dist/libs/convert/{jsonStringToJsonObject.es.js → json-string-to-json-object.es.js} +0 -0
- /package/dist/libs/{get/getClassNames.test.d.ts → convert/json-string-to-json-object.test.d.ts} +0 -0
- /package/dist/libs/get/{getAspectRatio.d.ts → get-aspect-ratio.d.ts} +0 -0
- /package/dist/libs/get/{getDocumentHeight.test.d.ts → get-aspect-ratio.test.d.ts} +0 -0
- /package/dist/libs/get/{getClassNames.cjs.js → get-class-names.cjs.js} +0 -0
- /package/dist/libs/get/{getClassNames.d.ts → get-class-names.d.ts} +0 -0
- /package/dist/libs/get/{getClassNames.es.js → get-class-names.es.js} +0 -0
- /package/dist/libs/get/{getGcd.test.d.ts → get-class-names.test.d.ts} +0 -0
- /package/dist/libs/get/{getDocumentHeight.cjs.js → get-document-height.cjs.js} +0 -0
- /package/dist/libs/get/{getDocumentHeight.d.ts → get-document-height.d.ts} +0 -0
- /package/dist/libs/get/{getDocumentHeight.es.js → get-document-height.es.js} +0 -0
- /package/dist/libs/get/{getGravatarUrl.test.d.ts → get-document-height.test.d.ts} +0 -0
- /package/dist/libs/get/{getEventPaths.cjs.js → get-event-paths.cjs.js} +0 -0
- /package/dist/libs/get/{getEventPaths.d.ts → get-event-paths.d.ts} +0 -0
- /package/dist/libs/get/{getEventPaths.es.js → get-event-paths.es.js} +0 -0
- /package/dist/libs/get/{getGcd.d.ts → get-gcd.d.ts} +0 -0
- /package/dist/libs/get/{getOrientation.test.d.ts → get-gcd.test.d.ts} +0 -0
- /package/dist/libs/get/{getGravatarUrl.cjs.js → get-gravatar-url.cjs.js} +0 -0
- /package/dist/libs/get/{getGravatarUrl.d.ts → get-gravatar-url.d.ts} +0 -0
- /package/dist/libs/get/{getGravatarUrl.es.js → get-gravatar-url.es.js} +0 -0
- /package/dist/libs/get/{getParentList.test.d.ts → get-gravatar-url.test.d.ts} +0 -0
- /package/dist/libs/get/{getImageSize.d.ts → get-image-size.d.ts} +0 -0
- /package/dist/libs/get/{getOrientation.cjs.js → get-orientation.cjs.js} +0 -0
- /package/dist/libs/get/{getOrientation.d.ts → get-orientation.d.ts} +0 -0
- /package/dist/libs/get/{getOrientation.es.js → get-orientation.es.js} +0 -0
- /package/dist/libs/get/{getPath.test.d.ts → get-orientation.test.d.ts} +0 -0
- /package/dist/libs/get/{getParentList.cjs.js → get-parent-list.cjs.js} +0 -0
- /package/dist/libs/get/{getParentList.d.ts → get-parent-list.d.ts} +0 -0
- /package/dist/libs/get/{getParentList.es.js → get-parent-list.es.js} +0 -0
- /package/dist/libs/get/{getPathFromLocalPublic.test.d.ts → get-parent-list.test.d.ts} +0 -0
- /package/dist/libs/get/{getPathFromLocalPublic.d.ts → get-path-from-local-public.d.ts} +0 -0
- /package/dist/libs/get/{getQueryParams.test.d.ts → get-path-from-local-public.test.d.ts} +0 -0
- /package/dist/libs/get/{getPath.d.ts → get-path.d.ts} +0 -0
- /package/dist/libs/get/{getRem.test.d.ts → get-path.test.d.ts} +0 -0
- /package/dist/libs/get/{getQueryParams.cjs.js → get-query-params.cjs.js} +0 -0
- /package/dist/libs/get/{getQueryParams.d.ts → get-query-params.d.ts} +0 -0
- /package/dist/libs/get/{getQueryParams.es.js → get-query-params.es.js} +0 -0
- /package/dist/libs/get/{getScrollbarWidth.test.d.ts → get-query-params.test.d.ts} +0 -0
- /package/dist/libs/get/{getRem.cjs.js → get-rem.cjs.js} +0 -0
- /package/dist/libs/get/{getRem.d.ts → get-rem.d.ts} +0 -0
- /package/dist/libs/get/{getRem.es.js → get-rem.es.js} +0 -0
- /package/dist/libs/get/{getSessionStorage.test.d.ts → get-rem.test.d.ts} +0 -0
- /package/dist/libs/get/{getScrollbarWidth.cjs.js → get-scrollbar-width.cjs.js} +0 -0
- /package/dist/libs/get/{getScrollbarWidth.d.ts → get-scrollbar-width.d.ts} +0 -0
- /package/dist/libs/get/{getScrollbarWidth.es.js → get-scrollbar-width.es.js} +0 -0
- /package/dist/libs/get/{getStringLength.test.d.ts → get-scrollbar-width.test.d.ts} +0 -0
- /package/dist/libs/get/{getSessionStorage.cjs.js → get-session-storage.cjs.js} +0 -0
- /package/dist/libs/get/{getSessionStorage.d.ts → get-session-storage.d.ts} +0 -0
- /package/dist/libs/get/{getSessionStorage.es.js → get-session-storage.es.js} +0 -0
- /package/dist/libs/get/{getStylePropertyValue.test.d.ts → get-session-storage.test.d.ts} +0 -0
- /package/dist/libs/get/{getStringLength.cjs.js → get-string-length.cjs.js} +0 -0
- /package/dist/libs/get/{getStringLength.d.ts → get-string-length.d.ts} +0 -0
- /package/dist/libs/get/{getStringLength.es.js → get-string-length.es.js} +0 -0
- /package/dist/libs/get/{getStylePropertyValueToNumber.test.d.ts → get-string-length.test.d.ts} +0 -0
- /package/dist/libs/get/{getStylePropertyValueToNumber.d.ts → get-style-property-value-to-number.d.ts} +0 -0
- /package/dist/libs/get/{getUaData.test.d.ts → get-style-property-value-to-number.test.d.ts} +0 -0
- /package/dist/libs/get/{getStylePropertyValue.cjs.js → get-style-property-value.cjs.js} +0 -0
- /package/dist/libs/get/{getStylePropertyValue.d.ts → get-style-property-value.d.ts} +0 -0
- /package/dist/libs/get/{getStylePropertyValue.es.js → get-style-property-value.es.js} +0 -0
- /package/dist/libs/{is/checkDeviceSize.test.d.ts → get/get-style-property-value.test.d.ts} +0 -0
- /package/dist/libs/get/{getUaData.d.ts → get-ua-data.d.ts} +0 -0
- /package/dist/libs/{is/isAfterDateTime.test.d.ts → get/get-ua-data.test.d.ts} +0 -0
- /package/dist/libs/is/{checkDeviceSize.d.ts → check-device-size.d.ts} +0 -0
- /package/dist/libs/is/{isBetweenDateTime.test.d.ts → check-device-size.test.d.ts} +0 -0
- /package/dist/libs/is/{isAfterDateTime.cjs.js → is-after-date-time.cjs.js} +0 -0
- /package/dist/libs/is/{isAfterDateTime.d.ts → is-after-date-time.d.ts} +0 -0
- /package/dist/libs/is/{isAfterDateTime.es.js → is-after-date-time.es.js} +0 -0
- /package/dist/libs/is/{isExistAllElements.test.d.ts → is-after-date-time.test.d.ts} +0 -0
- /package/dist/libs/is/{isBetweenDateTime.cjs.js → is-between-date-time.cjs.js} +0 -0
- /package/dist/libs/is/{isBetweenDateTime.d.ts → is-between-date-time.d.ts} +0 -0
- /package/dist/libs/is/{isBetweenDateTime.es.js → is-between-date-time.es.js} +0 -0
- /package/dist/libs/is/{isIpad.test.d.ts → is-between-date-time.test.d.ts} +0 -0
- /package/dist/libs/is/{isExistAllElements.cjs.js → is-exist-all-elements.cjs.js} +0 -0
- /package/dist/libs/is/{isExistAllElements.d.ts → is-exist-all-elements.d.ts} +0 -0
- /package/dist/libs/is/{isExistAllElements.es.js → is-exist-all-elements.es.js} +0 -0
- /package/dist/libs/is/{isKeyExists.test.d.ts → is-exist-all-elements.test.d.ts} +0 -0
- /package/dist/libs/is/{isIpad.d.ts → is-ipad.d.ts} +0 -0
- /package/dist/libs/is/{isProduction.test.d.ts → is-ipad.test.d.ts} +0 -0
- /package/dist/libs/is/{isKeyExists.cjs.js → is-key-exists.cjs.js} +0 -0
- /package/dist/libs/is/{isKeyExists.d.ts → is-key-exists.d.ts} +0 -0
- /package/dist/libs/is/{isKeyExists.es.js → is-key-exists.es.js} +0 -0
- /package/dist/libs/is/{isSafari.test.d.ts → is-key-exists.test.d.ts} +0 -0
- /package/dist/libs/is/{isProduction.d.ts → is-production.d.ts} +0 -0
- /package/dist/libs/is/{isScrollable.test.d.ts → is-production.test.d.ts} +0 -0
- /package/dist/libs/is/{isSafari.d.ts → is-safari.d.ts} +0 -0
- /package/dist/libs/is/{isTouchSupport.test.d.ts → is-safari.test.d.ts} +0 -0
- /package/dist/libs/is/{isScrollable.cjs.js → is-scrollable.cjs.js} +0 -0
- /package/dist/libs/is/{isScrollable.d.ts → is-scrollable.d.ts} +0 -0
- /package/dist/libs/is/{isScrollable.es.js → is-scrollable.es.js} +0 -0
- /package/dist/libs/{remove/removeAllHtmlTags.test.d.ts → is/is-scrollable.test.d.ts} +0 -0
- /package/dist/libs/is/{isTouchSupport.cjs.js → is-touch-support.cjs.js} +0 -0
- /package/dist/libs/is/{isTouchSupport.d.ts → is-touch-support.d.ts} +0 -0
- /package/dist/libs/is/{isTouchSupport.es.js → is-touch-support.es.js} +0 -0
- /package/dist/libs/{remove/removeAttribute.test.d.ts → is/is-touch-support.test.d.ts} +0 -0
- /package/dist/libs/remove/{removeAllHtmlTags.cjs.js → remove-all-html-tags.cjs.js} +0 -0
- /package/dist/libs/remove/{removeAllHtmlTags.d.ts → remove-all-html-tags.d.ts} +0 -0
- /package/dist/libs/remove/{removeAllHtmlTags.es.js → remove-all-html-tags.es.js} +0 -0
- /package/dist/libs/remove/{removeSessionStorage.test.d.ts → remove-all-html-tags.test.d.ts} +0 -0
- /package/dist/libs/remove/{removeAttribute.cjs.js → remove-attribute.cjs.js} +0 -0
- /package/dist/libs/remove/{removeAttribute.d.ts → remove-attribute.d.ts} +0 -0
- /package/dist/libs/remove/{removeAttribute.es.js → remove-attribute.es.js} +0 -0
- /package/dist/libs/remove/{removeStylePropertyValue.test.d.ts → remove-attribute.test.d.ts} +0 -0
- /package/dist/libs/remove/{removeSessionStorage.cjs.js → remove-session-storage.cjs.js} +0 -0
- /package/dist/libs/remove/{removeSessionStorage.d.ts → remove-session-storage.d.ts} +0 -0
- /package/dist/libs/remove/{removeSessionStorage.es.js → remove-session-storage.es.js} +0 -0
- /package/dist/libs/{security/htmlSanitize.test.d.ts → remove/remove-session-storage.test.d.ts} +0 -0
- /package/dist/libs/remove/{removeStylePropertyValue.cjs.js → remove-style-property-value.cjs.js} +0 -0
- /package/dist/libs/remove/{removeStylePropertyValue.d.ts → remove-style-property-value.d.ts} +0 -0
- /package/dist/libs/remove/{removeStylePropertyValue.es.js → remove-style-property-value.es.js} +0 -0
- /package/dist/libs/{set/set100vh.test.d.ts → remove/remove-style-property-value.test.d.ts} +0 -0
- /package/dist/libs/security/{htmlSanitize.cjs.js → html-sanitize.cjs.js} +0 -0
- /package/dist/libs/security/{htmlSanitize.d.ts → html-sanitize.d.ts} +0 -0
- /package/dist/libs/security/{htmlSanitize.es.js → html-sanitize.es.js} +0 -0
- /package/dist/libs/{set/set100vw.test.d.ts → security/html-sanitize.test.d.ts} +0 -0
- /package/dist/libs/set/{set100vh.cjs.js → set-100vh.cjs.js} +0 -0
- /package/dist/libs/set/{set100vh.d.ts → set-100vh.d.ts} +0 -0
- /package/dist/libs/set/{set100vh.es.js → set-100vh.es.js} +0 -0
- /package/dist/libs/set/{setAttribute.test.d.ts → set-100vh.test.d.ts} +0 -0
- /package/dist/libs/set/{set100vw.cjs.js → set-100vw.cjs.js} +0 -0
- /package/dist/libs/set/{set100vw.d.ts → set-100vw.d.ts} +0 -0
- /package/dist/libs/set/{set100vw.es.js → set-100vw.es.js} +0 -0
- /package/dist/libs/set/{setScrollPositionToCenter.test.d.ts → set-100vw.test.d.ts} +0 -0
- /package/dist/libs/set/{setAttribute.cjs.js → set-attribute.cjs.js} +0 -0
- /package/dist/libs/set/{setAttribute.d.ts → set-attribute.d.ts} +0 -0
- /package/dist/libs/set/{setAttribute.es.js → set-attribute.es.js} +0 -0
- /package/dist/libs/set/{setSessionStorage.test.d.ts → set-attribute.test.d.ts} +0 -0
- /package/dist/libs/set/{setScrollPositionToCenter.cjs.js → set-scroll-position-to-center.cjs.js} +0 -0
- /package/dist/libs/set/{setScrollPositionToCenter.d.ts → set-scroll-position-to-center.d.ts} +0 -0
- /package/dist/libs/set/{setScrollPositionToCenter.es.js → set-scroll-position-to-center.es.js} +0 -0
- /package/dist/libs/set/{setStylePropertyValue.test.d.ts → set-scroll-position-to-center.test.d.ts} +0 -0
- /package/dist/libs/set/{setSessionStorage.cjs.js → set-session-storage.cjs.js} +0 -0
- /package/dist/libs/set/{setSessionStorage.d.ts → set-session-storage.d.ts} +0 -0
- /package/dist/libs/set/{setSessionStorage.es.js → set-session-storage.es.js} +0 -0
- /package/dist/libs/{to/toBoolean.test.d.ts → set/set-session-storage.test.d.ts} +0 -0
- /package/dist/libs/set/{setStylePropertyValue.cjs.js → set-style-property-value.cjs.js} +0 -0
- /package/dist/libs/set/{setStylePropertyValue.d.ts → set-style-property-value.d.ts} +0 -0
- /package/dist/libs/set/{setStylePropertyValue.es.js → set-style-property-value.es.js} +0 -0
- /package/dist/libs/{to/toPositiveNumber.test.d.ts → set/set-style-property-value.test.d.ts} +0 -0
- /package/dist/libs/to/{toBoolean.cjs.js → to-boolean.cjs.js} +0 -0
- /package/dist/libs/to/{toBoolean.d.ts → to-boolean.d.ts} +0 -0
- /package/dist/libs/to/{toBoolean.es.js → to-boolean.es.js} +0 -0
- /package/dist/libs/{transform/wrapTextWithSpans.test.d.ts → to/to-boolean.test.d.ts} +0 -0
- /package/dist/libs/to/{toPositiveNumber.cjs.js → to-positive-number.cjs.js} +0 -0
- /package/dist/libs/to/{toPositiveNumber.d.ts → to-positive-number.d.ts} +0 -0
- /package/dist/libs/to/{toPositiveNumber.es.js → to-positive-number.es.js} +0 -0
- /package/dist/libs/{wait/waitForAllMediaLoaded.test.d.ts → to/to-positive-number.test.d.ts} +0 -0
- /package/dist/libs/transform/{wrapTextWithSpans.cjs.js → wrap-text-with-spans.cjs.js} +0 -0
- /package/dist/libs/transform/{wrapTextWithSpans.d.ts → wrap-text-with-spans.d.ts} +0 -0
- /package/dist/libs/transform/{wrapTextWithSpans.es.js → wrap-text-with-spans.es.js} +0 -0
- /package/dist/libs/wait/{waitForAllMediaLoaded.cjs.js → wait-for-all-media-loaded.cjs.js} +0 -0
- /package/dist/libs/wait/{waitForAllMediaLoaded.d.ts → wait-for-all-media-loaded.d.ts} +0 -0
- /package/dist/libs/wait/{waitForAllMediaLoaded.es.js → wait-for-all-media-loaded.es.js} +0 -0
package/README.md
CHANGED
|
@@ -76,6 +76,9 @@ console.log(breakpoint); // e.g. 768 (default) or custom value if set
|
|
|
76
76
|
|
|
77
77
|
## List of Utilities
|
|
78
78
|
|
|
79
|
+
- [Callback](#callback)
|
|
80
|
+
- [tap](#tap)
|
|
81
|
+
- [tapAsync](#tapasync)
|
|
79
82
|
- [Control](#control)
|
|
80
83
|
- [bgScrollStop](#bgscrollstop)
|
|
81
84
|
- [pd](#pd)
|
|
@@ -136,6 +139,69 @@ console.log(breakpoint); // e.g. 768 (default) or custom value if set
|
|
|
136
139
|
- [waitForAllMediaLoaded](#waitforallmedialoaded)
|
|
137
140
|
- [Security](#security)
|
|
138
141
|
- [sanitizeHtml](#sanitizehtml)
|
|
142
|
+
- [Advanced Usage](#advanced-usage)
|
|
143
|
+
- [Using tap / tapAsync with umaki functions](#using-tap--tapasync-with-umaki-functions)
|
|
144
|
+
|
|
145
|
+
## Callback
|
|
146
|
+
|
|
147
|
+
### tap
|
|
148
|
+
|
|
149
|
+
A function that executes a callback with the given value and returns the original value unchanged. Useful for performing side effects (logging, caching, analytics, etc.) without modifying the value.
|
|
150
|
+
|
|
151
|
+
**Note:** This function does not accept Promise values. For async operations, use `tapAsync` instead.
|
|
152
|
+
|
|
153
|
+
```ts
|
|
154
|
+
import { tap, removeAllHtmlTags } from "umaki";
|
|
155
|
+
|
|
156
|
+
const input = "<p>Hello <strong>World</strong>!</p>";
|
|
157
|
+
const output = tap(removeAllHtmlTags(input), (result) => {
|
|
158
|
+
console.log("Sanitized:", result);
|
|
159
|
+
});
|
|
160
|
+
// Logs: 'Sanitized: Hello World!'
|
|
161
|
+
// output = 'Hello World!'
|
|
162
|
+
|
|
163
|
+
// Caching example
|
|
164
|
+
const data = tap(processData(raw), (result) => {
|
|
165
|
+
cache.set("processed", result);
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
// Works with higher-order functions
|
|
169
|
+
const debouncedFn = tap(debounce(handler, 100), () => {
|
|
170
|
+
console.log("Debounced function created");
|
|
171
|
+
});
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
[View file →](src/libs/callback/tap.ts)
|
|
175
|
+
|
|
176
|
+
### tapAsync (Promise)
|
|
177
|
+
|
|
178
|
+
A function that awaits a Promise, executes a callback with the resolved value, and returns the original value. Useful for performing side effects on async values without modifying them.
|
|
179
|
+
|
|
180
|
+
```ts
|
|
181
|
+
import { tapAsync } from "umaki";
|
|
182
|
+
|
|
183
|
+
// Logging async results
|
|
184
|
+
const data = await tapAsync(fetchData(), (result) => {
|
|
185
|
+
console.log("Fetched:", result);
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
// Caching async results
|
|
189
|
+
const getData = () =>
|
|
190
|
+
tapAsync(fetchFromServer(), (data) => cache.set("data", data));
|
|
191
|
+
|
|
192
|
+
// Parallel execution with individual completion tracking
|
|
193
|
+
await Promise.all([
|
|
194
|
+
tapAsync(fetchUserData(), (user) => console.log("user loaded")),
|
|
195
|
+
tapAsync(fetchProductData(), (products) => console.log("products loaded")),
|
|
196
|
+
tapAsync(fetchOrderData(), (orders) => console.log("orders loaded")),
|
|
197
|
+
]);
|
|
198
|
+
|
|
199
|
+
// Event emission on async completion
|
|
200
|
+
const loadUser = () =>
|
|
201
|
+
tapAsync(fetchUser(), (user) => eventEmitter.emit("userLoaded", user));
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
[View file →](src/libs/callback/tap-async.ts)
|
|
139
205
|
|
|
140
206
|
## Control
|
|
141
207
|
|
|
@@ -150,7 +216,7 @@ bgScrollStop(); // scroll stop
|
|
|
150
216
|
bgScrollStop(false); // scroll start
|
|
151
217
|
```
|
|
152
218
|
|
|
153
|
-
[View file →](src/libs/control/
|
|
219
|
+
[View file →](src/libs/control/bg-scroll-stop.ts)
|
|
154
220
|
|
|
155
221
|
### pd
|
|
156
222
|
|
|
@@ -182,7 +248,7 @@ import { scrollToHash } from "umaki";
|
|
|
182
248
|
})();
|
|
183
249
|
```
|
|
184
250
|
|
|
185
|
-
[View file →](src/libs/control/
|
|
251
|
+
[View file →](src/libs/control/scroll-to-hash.ts)
|
|
186
252
|
|
|
187
253
|
### videoPlayControl
|
|
188
254
|
|
|
@@ -199,7 +265,7 @@ videoPlayControl(videoElement, false); // pause
|
|
|
199
265
|
videoPlayControl(videoElement, true, 10); // play and set currentTime to 10
|
|
200
266
|
```
|
|
201
267
|
|
|
202
|
-
[View file →](src/libs/control/
|
|
268
|
+
[View file →](src/libs/control/video-play-control.ts)
|
|
203
269
|
|
|
204
270
|
## Convert
|
|
205
271
|
|
|
@@ -235,7 +301,7 @@ console.log(formattedDateWithDifferentTz); // '2025-04-24 20:00:00'
|
|
|
235
301
|
|
|
236
302
|
Note: This function focuses on timezone handling rather than locale-specific formatting. When a timezone is specified, the date will be converted to that timezone before formatting.
|
|
237
303
|
|
|
238
|
-
[View file →](src/libs/convert/
|
|
304
|
+
[View file →](src/libs/convert/change-date-string-to-specific-format.ts)
|
|
239
305
|
|
|
240
306
|
### jsonStringToJsonObject
|
|
241
307
|
|
|
@@ -249,7 +315,7 @@ const jsonObject = jsonStringToJsonObject(jsonString);
|
|
|
249
315
|
console.log(jsonObject); // { name: 'John', age: 30 }
|
|
250
316
|
```
|
|
251
317
|
|
|
252
|
-
[View file →](src/libs/convert/
|
|
318
|
+
[View file →](src/libs/convert/json-string-to-json-object.ts)
|
|
253
319
|
|
|
254
320
|
## EventControl
|
|
255
321
|
|
|
@@ -298,7 +364,7 @@ const aspectRatio = getAspectRatio(1920, 1080);
|
|
|
298
364
|
console.log(aspectRatio); // { w: 16, h: 9 }
|
|
299
365
|
```
|
|
300
366
|
|
|
301
|
-
[View file →](src/libs/get/
|
|
367
|
+
[View file →](src/libs/get/get-aspect-ratio.ts)
|
|
302
368
|
|
|
303
369
|
### getClassNames
|
|
304
370
|
|
|
@@ -313,7 +379,7 @@ const classNames = getClassNames(element);
|
|
|
313
379
|
console.log(classNames); // ['class1', 'class2', 'class3']
|
|
314
380
|
```
|
|
315
381
|
|
|
316
|
-
[View file →](src/libs/get/
|
|
382
|
+
[View file →](src/libs/get/get-class-names.ts)
|
|
317
383
|
|
|
318
384
|
### getDocumentHeight
|
|
319
385
|
|
|
@@ -326,7 +392,7 @@ const height = getDocumentHeight();
|
|
|
326
392
|
console.log(height);
|
|
327
393
|
```
|
|
328
394
|
|
|
329
|
-
[View file →](src/libs/get/
|
|
395
|
+
[View file →](src/libs/get/get-document-height.ts)
|
|
330
396
|
|
|
331
397
|
### getEventPaths
|
|
332
398
|
|
|
@@ -341,7 +407,7 @@ document.addEventListener("click", (event) => {
|
|
|
341
407
|
});
|
|
342
408
|
```
|
|
343
409
|
|
|
344
|
-
[View file →](src/libs/get/
|
|
410
|
+
[View file →](src/libs/get/get-event-paths.ts)
|
|
345
411
|
|
|
346
412
|
### getGcd
|
|
347
413
|
|
|
@@ -354,7 +420,7 @@ const gcd = getGcd(48, 18);
|
|
|
354
420
|
console.log(gcd); // 6
|
|
355
421
|
```
|
|
356
422
|
|
|
357
|
-
[View file →](src/libs/get/
|
|
423
|
+
[View file →](src/libs/get/get-gcd.ts)
|
|
358
424
|
|
|
359
425
|
### getGravatarUrl
|
|
360
426
|
|
|
@@ -375,7 +441,7 @@ const normalizedAvatar = getGravatarUrl(' USER@EXAMPLE.COM ', 80);
|
|
|
375
441
|
// Same result as above due to normalization
|
|
376
442
|
```
|
|
377
443
|
|
|
378
|
-
[View file →](src/libs/get/
|
|
444
|
+
[View file →](src/libs/get/get-gravatar-url.ts)
|
|
379
445
|
|
|
380
446
|
### getOrientation
|
|
381
447
|
|
|
@@ -388,7 +454,7 @@ const orientation = getOrientation();
|
|
|
388
454
|
console.log(orientation); // 'landscape' or 'portrait'
|
|
389
455
|
```
|
|
390
456
|
|
|
391
|
-
[View file →](src/libs/get/
|
|
457
|
+
[View file →](src/libs/get/get-orientation.ts)
|
|
392
458
|
|
|
393
459
|
### getParentList
|
|
394
460
|
|
|
@@ -402,7 +468,7 @@ const parentList = getParentList(element);
|
|
|
402
468
|
console.log(parentList);
|
|
403
469
|
```
|
|
404
470
|
|
|
405
|
-
[View file →](src/libs/get/
|
|
471
|
+
[View file →](src/libs/get/get-parent-list.ts)
|
|
406
472
|
|
|
407
473
|
### getQueryParams
|
|
408
474
|
|
|
@@ -429,7 +495,7 @@ const customParamWithOptions = getQueryParams("id", {
|
|
|
429
495
|
});
|
|
430
496
|
```
|
|
431
497
|
|
|
432
|
-
[View file →](src/libs/get/
|
|
498
|
+
[View file →](src/libs/get/get-query-params.ts)
|
|
433
499
|
|
|
434
500
|
### getRem
|
|
435
501
|
|
|
@@ -442,7 +508,7 @@ const remValue = getRem(16);
|
|
|
442
508
|
console.log(remValue); // '1rem'
|
|
443
509
|
```
|
|
444
510
|
|
|
445
|
-
[View file →](src/libs/get/
|
|
511
|
+
[View file →](src/libs/get/get-rem.ts)
|
|
446
512
|
|
|
447
513
|
### getScrollbarWidth
|
|
448
514
|
|
|
@@ -455,7 +521,7 @@ const scrollbarWidth = getScrollbarWidth();
|
|
|
455
521
|
console.log(scrollbarWidth); // 15
|
|
456
522
|
```
|
|
457
523
|
|
|
458
|
-
[View file →](src/libs/get/
|
|
524
|
+
[View file →](src/libs/get/get-scrollbar-width.ts)
|
|
459
525
|
|
|
460
526
|
### getSessionStorage
|
|
461
527
|
|
|
@@ -468,7 +534,7 @@ const value = getSessionStorage("testKey");
|
|
|
468
534
|
console.log(value); // 'testValue'
|
|
469
535
|
```
|
|
470
536
|
|
|
471
|
-
[View file →](src/libs/get/
|
|
537
|
+
[View file →](src/libs/get/get-session-storage.ts)
|
|
472
538
|
|
|
473
539
|
### getStringLength
|
|
474
540
|
|
|
@@ -481,7 +547,7 @@ const length = getStringLength("こんにちは");
|
|
|
481
547
|
console.log(length); // 5
|
|
482
548
|
```
|
|
483
549
|
|
|
484
|
-
[View file →](src/libs/get/
|
|
550
|
+
[View file →](src/libs/get/get-string-length.ts)
|
|
485
551
|
|
|
486
552
|
### getStylePropertyValue
|
|
487
553
|
|
|
@@ -494,7 +560,7 @@ const value = getStylePropertyValue("--custom-property");
|
|
|
494
560
|
console.log(value);
|
|
495
561
|
```
|
|
496
562
|
|
|
497
|
-
[View file →](src/libs/get/
|
|
563
|
+
[View file →](src/libs/get/get-style-property-value.ts)
|
|
498
564
|
|
|
499
565
|
### getStylePropertyValueToNumber
|
|
500
566
|
|
|
@@ -507,7 +573,7 @@ const value = getStylePropertyValueToNumber("--custom-property");
|
|
|
507
573
|
console.log(value);
|
|
508
574
|
```
|
|
509
575
|
|
|
510
|
-
[View file →](src/libs/get/
|
|
576
|
+
[View file →](src/libs/get/get-style-property-value-to-number.ts)
|
|
511
577
|
|
|
512
578
|
### getUaData
|
|
513
579
|
|
|
@@ -528,7 +594,7 @@ console.log(uaData);
|
|
|
528
594
|
// }
|
|
529
595
|
```
|
|
530
596
|
|
|
531
|
-
[View file →](src/libs/get/
|
|
597
|
+
[View file →](src/libs/get/get-ua-data.ts)
|
|
532
598
|
|
|
533
599
|
## Is
|
|
534
600
|
|
|
@@ -550,7 +616,7 @@ const customCurrentDate = "2023-11-15";
|
|
|
550
616
|
const resultWithCustomDate = isAfterDateTime(targetDate, dayjs(customCurrentDate));
|
|
551
617
|
```
|
|
552
618
|
|
|
553
|
-
[View file →](src/libs/is/
|
|
619
|
+
[View file →](src/libs/is/is-after-date-time.ts)
|
|
554
620
|
|
|
555
621
|
### isBetweenDateTime
|
|
556
622
|
|
|
@@ -565,7 +631,7 @@ const result = isBetweenDateTime(dateA, dateB);
|
|
|
565
631
|
console.log(result); // true or false
|
|
566
632
|
```
|
|
567
633
|
|
|
568
|
-
[View file →](src/libs/is/
|
|
634
|
+
[View file →](src/libs/is/is-between-date-time.ts)
|
|
569
635
|
|
|
570
636
|
### isExistAllElements
|
|
571
637
|
|
|
@@ -582,7 +648,7 @@ const result = isExistAllElements(elements);
|
|
|
582
648
|
console.log(result); // true or false
|
|
583
649
|
```
|
|
584
650
|
|
|
585
|
-
[View file →](src/libs/is/
|
|
651
|
+
[View file →](src/libs/is/is-exist-all-elements.ts)
|
|
586
652
|
|
|
587
653
|
### isIpad
|
|
588
654
|
|
|
@@ -595,7 +661,7 @@ const result = isIpad();
|
|
|
595
661
|
console.log(result); // true or false
|
|
596
662
|
```
|
|
597
663
|
|
|
598
|
-
[View file →](src/libs/is/
|
|
664
|
+
[View file →](src/libs/is/is-ipad.ts)
|
|
599
665
|
|
|
600
666
|
### isKeyExists
|
|
601
667
|
|
|
@@ -609,7 +675,7 @@ const result = isKeyExists(obj, "a");
|
|
|
609
675
|
console.log(result); // true or false
|
|
610
676
|
```
|
|
611
677
|
|
|
612
|
-
[View file →](src/libs/is/
|
|
678
|
+
[View file →](src/libs/is/is-key-exists.ts)
|
|
613
679
|
|
|
614
680
|
### isSafari
|
|
615
681
|
|
|
@@ -622,7 +688,7 @@ const result = isSafari();
|
|
|
622
688
|
console.log(result); // true or false
|
|
623
689
|
```
|
|
624
690
|
|
|
625
|
-
[View file →](src/libs/is/
|
|
691
|
+
[View file →](src/libs/is/is-safari.ts)
|
|
626
692
|
|
|
627
693
|
### isScrollable
|
|
628
694
|
|
|
@@ -638,7 +704,7 @@ const result = isScrollable(element);
|
|
|
638
704
|
console.log(result); // true or false
|
|
639
705
|
```
|
|
640
706
|
|
|
641
|
-
[View file →](src/libs/is/
|
|
707
|
+
[View file →](src/libs/is/is-scrollable.ts)
|
|
642
708
|
|
|
643
709
|
### isTouchSupport
|
|
644
710
|
|
|
@@ -651,7 +717,7 @@ const result = isTouchSupport();
|
|
|
651
717
|
console.log(result); // true or false
|
|
652
718
|
```
|
|
653
719
|
|
|
654
|
-
[View file →](src/libs/is/
|
|
720
|
+
[View file →](src/libs/is/is-touch-support.ts)
|
|
655
721
|
|
|
656
722
|
### checkDeviceSize
|
|
657
723
|
|
|
@@ -670,7 +736,7 @@ const newDeviceSize = checkDeviceSize();
|
|
|
670
736
|
console.log(newDeviceSize); // 'md' if window.innerWidth > 1024, otherwise 'sm'
|
|
671
737
|
```
|
|
672
738
|
|
|
673
|
-
[View file →](src/libs/is/
|
|
739
|
+
[View file →](src/libs/is/check-device-size.ts)
|
|
674
740
|
|
|
675
741
|
## Remove
|
|
676
742
|
|
|
@@ -686,7 +752,7 @@ const output = removeAllHtmlTags(input);
|
|
|
686
752
|
console.log(output); // 'Hello World!'
|
|
687
753
|
```
|
|
688
754
|
|
|
689
|
-
[View file →](src/libs/remove/
|
|
755
|
+
[View file →](src/libs/remove/remove-all-html-tags.ts)
|
|
690
756
|
|
|
691
757
|
### removeAttribute
|
|
692
758
|
|
|
@@ -701,7 +767,7 @@ removeAttribute(element, "data-test");
|
|
|
701
767
|
console.log(element.hasAttribute("data-test")); // false
|
|
702
768
|
```
|
|
703
769
|
|
|
704
|
-
[View file →](src/libs/remove/
|
|
770
|
+
[View file →](src/libs/remove/remove-attribute.ts)
|
|
705
771
|
|
|
706
772
|
### removeSessionStorage
|
|
707
773
|
|
|
@@ -715,7 +781,7 @@ removeSessionStorage(key);
|
|
|
715
781
|
console.log(sessionStorage.getItem(key)); // null
|
|
716
782
|
```
|
|
717
783
|
|
|
718
|
-
[View file →](src/libs/remove/
|
|
784
|
+
[View file →](src/libs/remove/remove-session-storage.ts)
|
|
719
785
|
|
|
720
786
|
### removeStylePropertyValue
|
|
721
787
|
|
|
@@ -729,7 +795,7 @@ removeStylePropertyValue(key);
|
|
|
729
795
|
console.log(getComputedStyle(document.documentElement).getPropertyValue(key)); // ''
|
|
730
796
|
```
|
|
731
797
|
|
|
732
|
-
[View file →](src/libs/remove/
|
|
798
|
+
[View file →](src/libs/remove/remove-style-property-value.ts)
|
|
733
799
|
|
|
734
800
|
## Set
|
|
735
801
|
|
|
@@ -743,7 +809,7 @@ import { set100vh } from "umaki";
|
|
|
743
809
|
set100vh();
|
|
744
810
|
```
|
|
745
811
|
|
|
746
|
-
[View file →](src/libs/set/
|
|
812
|
+
[View file →](src/libs/set/set-100vh.ts)
|
|
747
813
|
|
|
748
814
|
### set100vw
|
|
749
815
|
|
|
@@ -755,7 +821,7 @@ import { set100vw } from "umaki";
|
|
|
755
821
|
set100vw();
|
|
756
822
|
```
|
|
757
823
|
|
|
758
|
-
[View file →](src/libs/set/
|
|
824
|
+
[View file →](src/libs/set/set-100vw.ts)
|
|
759
825
|
|
|
760
826
|
### setAttribute
|
|
761
827
|
|
|
@@ -769,7 +835,7 @@ setAttribute(element, "data-test", "value");
|
|
|
769
835
|
console.log(element.getAttribute("data-test")); // 'value'
|
|
770
836
|
```
|
|
771
837
|
|
|
772
|
-
[View file →](src/libs/set/
|
|
838
|
+
[View file →](src/libs/set/set-attribute.ts)
|
|
773
839
|
|
|
774
840
|
### setScrollPositionToCenter
|
|
775
841
|
|
|
@@ -783,7 +849,7 @@ const targetElement = document.getElementById("target");
|
|
|
783
849
|
setScrollPositionToCenter(rootElement, targetElement);
|
|
784
850
|
```
|
|
785
851
|
|
|
786
|
-
[View file →](src/libs/set/
|
|
852
|
+
[View file →](src/libs/set/set-scroll-position-to-center.ts)
|
|
787
853
|
|
|
788
854
|
### setSessionStorage
|
|
789
855
|
|
|
@@ -798,7 +864,7 @@ setSessionStorage(key, value);
|
|
|
798
864
|
console.log(sessionStorage.getItem(key)); // 'testValue'
|
|
799
865
|
```
|
|
800
866
|
|
|
801
|
-
[View file →](src/libs/set/
|
|
867
|
+
[View file →](src/libs/set/set-session-storage.ts)
|
|
802
868
|
|
|
803
869
|
### setStylePropertyValue
|
|
804
870
|
|
|
@@ -813,7 +879,7 @@ setStylePropertyValue(key, value);
|
|
|
813
879
|
console.log(getComputedStyle(document.documentElement).getPropertyValue(key)); // 'blue'
|
|
814
880
|
```
|
|
815
881
|
|
|
816
|
-
[View file →](src/libs/set/
|
|
882
|
+
[View file →](src/libs/set/set-style-property-value.ts)
|
|
817
883
|
|
|
818
884
|
## To
|
|
819
885
|
|
|
@@ -829,7 +895,7 @@ console.log(toBoolean("false")); // false
|
|
|
829
895
|
console.log(toBoolean("random")); // false
|
|
830
896
|
```
|
|
831
897
|
|
|
832
|
-
[View file →](src/libs/to/
|
|
898
|
+
[View file →](src/libs/to/to-boolean.ts)
|
|
833
899
|
|
|
834
900
|
### toPositiveNumber
|
|
835
901
|
|
|
@@ -845,7 +911,7 @@ console.log(toPositiveNumber(-3.14)); // 3.14
|
|
|
845
911
|
console.log(toPositiveNumber(3.14)); // 3.14
|
|
846
912
|
```
|
|
847
913
|
|
|
848
|
-
[View file →](src/libs/to/
|
|
914
|
+
[View file →](src/libs/to/to-positive-number.ts)
|
|
849
915
|
|
|
850
916
|
## Transform
|
|
851
917
|
|
|
@@ -862,7 +928,7 @@ wrapTextWithSpans(element);
|
|
|
862
928
|
console.log(element.innerHTML); // '<span>h</span><span>e</span><span>l</span><span>l</span><span>o</span>'
|
|
863
929
|
```
|
|
864
930
|
|
|
865
|
-
[View file →](src/libs/transform/
|
|
931
|
+
[View file →](src/libs/transform/wrap-text-with-spans.ts)
|
|
866
932
|
|
|
867
933
|
## Wait
|
|
868
934
|
|
|
@@ -897,7 +963,7 @@ import { waitForAllMediaLoaded } from "umaki";
|
|
|
897
963
|
})();
|
|
898
964
|
```
|
|
899
965
|
|
|
900
|
-
[View file →](src/libs/wait/
|
|
966
|
+
[View file →](src/libs/wait/wait-for-all-media-loaded.ts)
|
|
901
967
|
|
|
902
968
|
## Security
|
|
903
969
|
|
|
@@ -926,7 +992,145 @@ This function uses `isomorphic-dompurify` and has the following features:
|
|
|
926
992
|
- Allows flexible control through custom configuration
|
|
927
993
|
- Can be used on both server-side and client-side
|
|
928
994
|
|
|
929
|
-
[View file →](src/libs/security/
|
|
995
|
+
[View file →](src/libs/security/html-sanitize.ts)
|
|
996
|
+
|
|
997
|
+
## Advanced Usage
|
|
998
|
+
|
|
999
|
+
This section provides tips and patterns for getting the most out of umaki utilities.
|
|
1000
|
+
|
|
1001
|
+
### Using `tap` / `tapAsync` with umaki functions
|
|
1002
|
+
|
|
1003
|
+
The `tap` and `tapAsync` functions allow you to add callbacks to any umaki function without modifying its behavior. This is useful for logging, analytics, caching, and more.
|
|
1004
|
+
|
|
1005
|
+
#### Basic Pattern
|
|
1006
|
+
|
|
1007
|
+
| Function Type | Use | Example |
|
|
1008
|
+
|---------------|-----|---------|
|
|
1009
|
+
| Sync (returns value) | `tap` | `tap(removeAllHtmlTags(input), callback)` |
|
|
1010
|
+
| Sync (returns void) | `tap` | `tap(set100vh(), callback)` |
|
|
1011
|
+
| Async (returns Promise) | `tapAsync` | `tapAsync(sleep(1), callback)` |
|
|
1012
|
+
|
|
1013
|
+
> [!TIP]
|
|
1014
|
+
> `tap` prevents Promise values at the type level. If you accidentally pass a Promise, TypeScript will show an error.
|
|
1015
|
+
|
|
1016
|
+
#### Examples with umaki functions
|
|
1017
|
+
|
|
1018
|
+
<details>
|
|
1019
|
+
<summary><strong>📝 Logging & Debugging</strong></summary>
|
|
1020
|
+
|
|
1021
|
+
```ts
|
|
1022
|
+
import { tap, removeAllHtmlTags, getUaData } from "umaki";
|
|
1023
|
+
|
|
1024
|
+
// Log sanitized HTML output
|
|
1025
|
+
const clean = tap(removeAllHtmlTags(dirtyHtml), (result) => {
|
|
1026
|
+
console.log("[DEBUG] Sanitized HTML:", result);
|
|
1027
|
+
});
|
|
1028
|
+
|
|
1029
|
+
// Log user agent data
|
|
1030
|
+
const ua = tap(getUaData(), (data) => {
|
|
1031
|
+
console.log("[DEBUG] UA:", data.browserName, data.osName);
|
|
1032
|
+
});
|
|
1033
|
+
```
|
|
1034
|
+
|
|
1035
|
+
</details>
|
|
1036
|
+
|
|
1037
|
+
<details>
|
|
1038
|
+
<summary><strong>📊 Analytics & Tracking</strong></summary>
|
|
1039
|
+
|
|
1040
|
+
```ts
|
|
1041
|
+
import { tap, tapAsync, getUaData, waitForAllMediaLoaded } from "umaki";
|
|
1042
|
+
|
|
1043
|
+
// Track device information
|
|
1044
|
+
const uaData = tap(getUaData(), (data) => {
|
|
1045
|
+
analytics.track("device_detected", {
|
|
1046
|
+
browser: data.browserName,
|
|
1047
|
+
os: data.osName,
|
|
1048
|
+
type: data.type,
|
|
1049
|
+
});
|
|
1050
|
+
});
|
|
1051
|
+
|
|
1052
|
+
// Track media load completion
|
|
1053
|
+
await tapAsync(waitForAllMediaLoaded(), (success) => {
|
|
1054
|
+
analytics.track("media_loaded", { success, timestamp: Date.now() });
|
|
1055
|
+
});
|
|
1056
|
+
```
|
|
1057
|
+
|
|
1058
|
+
</details>
|
|
1059
|
+
|
|
1060
|
+
<details>
|
|
1061
|
+
<summary><strong>💾 Caching</strong></summary>
|
|
1062
|
+
|
|
1063
|
+
```ts
|
|
1064
|
+
import { tap, tapAsync, getScrollbarWidth } from "umaki";
|
|
1065
|
+
|
|
1066
|
+
// Cache scrollbar width (useful for repeated access)
|
|
1067
|
+
const scrollbarWidth = tap(getScrollbarWidth(), (width) => {
|
|
1068
|
+
sessionStorage.setItem("scrollbarWidth", String(width));
|
|
1069
|
+
});
|
|
1070
|
+
|
|
1071
|
+
// Cache async fetch results
|
|
1072
|
+
const getData = () =>
|
|
1073
|
+
tapAsync(fetchFromAPI(), (data) => {
|
|
1074
|
+
localStorage.setItem("cachedData", JSON.stringify(data));
|
|
1075
|
+
});
|
|
1076
|
+
```
|
|
1077
|
+
|
|
1078
|
+
</details>
|
|
1079
|
+
|
|
1080
|
+
<details>
|
|
1081
|
+
<summary><strong>🎯 Event Emission</strong></summary>
|
|
1082
|
+
|
|
1083
|
+
```ts
|
|
1084
|
+
import { tap, tapAsync, checkDeviceSize, waitForAllMediaLoaded } from "umaki";
|
|
1085
|
+
|
|
1086
|
+
// Emit event on device size check
|
|
1087
|
+
const deviceSize = tap(checkDeviceSize(), (size) => {
|
|
1088
|
+
window.dispatchEvent(new CustomEvent("deviceSizeChecked", { detail: size }));
|
|
1089
|
+
});
|
|
1090
|
+
|
|
1091
|
+
// Emit event when all media is loaded
|
|
1092
|
+
await tapAsync(waitForAllMediaLoaded(true), () => {
|
|
1093
|
+
window.dispatchEvent(new CustomEvent("firstViewMediaReady"));
|
|
1094
|
+
});
|
|
1095
|
+
```
|
|
1096
|
+
|
|
1097
|
+
</details>
|
|
1098
|
+
|
|
1099
|
+
<details>
|
|
1100
|
+
<summary><strong>⚡ Parallel Async Operations</strong></summary>
|
|
1101
|
+
|
|
1102
|
+
```ts
|
|
1103
|
+
import { tapAsync, sleep, waitForAllMediaLoaded } from "umaki";
|
|
1104
|
+
|
|
1105
|
+
// Track multiple async operations independently
|
|
1106
|
+
const [_, mediaLoaded] = await Promise.all([
|
|
1107
|
+
tapAsync(sleep(1), () => console.log("⏱️ 1 second elapsed")),
|
|
1108
|
+
tapAsync(waitForAllMediaLoaded(), (ok) => console.log("🖼️ Media:", ok ? "ready" : "failed")),
|
|
1109
|
+
]);
|
|
1110
|
+
```
|
|
1111
|
+
|
|
1112
|
+
</details>
|
|
1113
|
+
|
|
1114
|
+
#### Working with void functions
|
|
1115
|
+
|
|
1116
|
+
> [!NOTE]
|
|
1117
|
+
> When using `tap` with functions that return `void` (like `set100vh`, `bgScrollStop`), the callback receives `undefined`. This is still useful for completion notifications.
|
|
1118
|
+
|
|
1119
|
+
```ts
|
|
1120
|
+
import { tap, set100vh, bgScrollStop } from "umaki";
|
|
1121
|
+
|
|
1122
|
+
// Notification when viewport units are set
|
|
1123
|
+
tap(set100vh(), () => {
|
|
1124
|
+
console.log("✅ 100vh CSS variable has been set");
|
|
1125
|
+
});
|
|
1126
|
+
|
|
1127
|
+
// Notification when scroll is stopped
|
|
1128
|
+
tap(bgScrollStop(true), () => {
|
|
1129
|
+
console.log("🔒 Background scroll locked");
|
|
1130
|
+
});
|
|
1131
|
+
```
|
|
1132
|
+
|
|
1133
|
+
---
|
|
930
1134
|
|
|
931
1135
|
## Using for framework and tools
|
|
932
1136
|
|