solid-tiny-utils 0.9.0 → 0.10.0

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.
@@ -0,0 +1,4 @@
1
+ //#region src/dom/animation.d.ts
2
+ declare function hasAnimation(element: HTMLElement): boolean;
3
+ //#endregion
4
+ export { hasAnimation };
@@ -0,0 +1,8 @@
1
+ //#region src/dom/animation.ts
2
+ function hasAnimation(element) {
3
+ const styles = getComputedStyle(element);
4
+ return Number.parseFloat(styles.animationDuration || "0") > 0;
5
+ }
6
+
7
+ //#endregion
8
+ export { hasAnimation };
@@ -0,0 +1,14 @@
1
+ import { MaybeAccessor } from "../types/maybe.mjs";
2
+ import { Accessor } from "solid-js";
3
+
4
+ //#region src/event/create-presence.d.ts
5
+ type PresenceState = "opening" | "opened" | "closing" | "closed";
6
+ declare function createPresence(params: {
7
+ show: Accessor<boolean>;
8
+ element: MaybeAccessor<HTMLElement | undefined>;
9
+ }): {
10
+ show: () => boolean;
11
+ state: Accessor<PresenceState>;
12
+ };
13
+ //#endregion
14
+ export { PresenceState, createPresence };
@@ -0,0 +1,32 @@
1
+ import { hasAnimation } from "../dom/animation.mjs";
2
+ import { access } from "../reactive/access.mjs";
3
+ import { noop } from "../fn/index.mjs";
4
+ import { createWatch } from "../reactive/create-watch.mjs";
5
+ import { makeEventListener } from "./make-event-listener.mjs";
6
+ import { createSignal } from "solid-js";
7
+
8
+ //#region src/event/create-presence.ts
9
+ function createPresence(params) {
10
+ const [state, setState] = createSignal(access(params.show) ? "opened" : "closed");
11
+ createWatch(params.show, (show) => {
12
+ if (show) setState("opening");
13
+ else setState("closing");
14
+ }, { defer: true });
15
+ let clear = noop;
16
+ createWatch(state, (current) => {
17
+ clear();
18
+ const el = access(params.element);
19
+ if (!el) return;
20
+ if (current.endsWith("ing")) if (hasAnimation(el)) clear = makeEventListener(el, "animationend", () => {
21
+ setState(current === "opening" ? "opened" : "closed");
22
+ }, { once: true });
23
+ else setState(current === "opening" ? "opened" : "closed");
24
+ });
25
+ return {
26
+ show: () => state() !== "closed",
27
+ state
28
+ };
29
+ }
30
+
31
+ //#endregion
32
+ export { createPresence };
@@ -2,6 +2,7 @@ import { createClickOutside } from "./create-click-outside.mjs";
2
2
  import { DocumentEventName, GeneralEventListener, WindowEventName, makeEventListener } from "./make-event-listener.mjs";
3
3
  import { createEventListener } from "./create-event-listener.mjs";
4
4
  import { createIntersectionObserver } from "./create-intersection-observer.mjs";
5
+ import { PresenceState, createPresence } from "./create-presence.mjs";
5
6
  import { CreateVisibilityObserverOption, EntryCallback, UseVisibilityObserverFn, createVisibilityObserver } from "./create-visibility-observer.mjs";
6
7
  import { JSX } from "solid-js/jsx-runtime";
7
8
 
@@ -2,6 +2,7 @@ import { makeEventListener } from "./make-event-listener.mjs";
2
2
  import { createClickOutside } from "./create-click-outside.mjs";
3
3
  import { createEventListener } from "./create-event-listener.mjs";
4
4
  import { createIntersectionObserver } from "./create-intersection-observer.mjs";
5
+ import { createPresence } from "./create-presence.mjs";
5
6
  import { createVisibilityObserver } from "./create-visibility-observer.mjs";
6
7
 
7
8
  //#region src/event/index.ts
package/dist/index.d.mts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { OKLCH, RGB, oklchToRgb, rgbToOklch } from "./color/oklch-rgb.mjs";
2
2
  import { hexToRgb, rgbToHex } from "./color/hex-rgb.mjs";
3
3
  import { isValidHex, isValidOKLCH, isValidRGB } from "./color/validation.mjs";
4
+ import { hasAnimation } from "./dom/animation.mjs";
4
5
  import { combineClass, combineStyle, mountStyle, stringStyleToObject } from "./dom/css.mjs";
5
6
  import { AnyFn, Fn } from "./types/fn.mjs";
6
7
  import { MaybeAccessor, MaybeArray, MaybeNullableAccessor, MaybePromise } from "./types/maybe.mjs";
@@ -9,6 +10,7 @@ import { createClickOutside } from "./event/create-click-outside.mjs";
9
10
  import { DocumentEventName, GeneralEventListener, WindowEventName, makeEventListener } from "./event/make-event-listener.mjs";
10
11
  import { createEventListener } from "./event/create-event-listener.mjs";
11
12
  import { createIntersectionObserver } from "./event/create-intersection-observer.mjs";
13
+ import { PresenceState, createPresence } from "./event/create-presence.mjs";
12
14
  import { CreateVisibilityObserverOption, EntryCallback, UseVisibilityObserverFn, createVisibilityObserver } from "./event/create-visibility-observer.mjs";
13
15
  import { runSolidEventHandler } from "./event/index.mjs";
14
16
  import { createDebounce } from "./fn/create-debounce.mjs";
@@ -22,8 +24,8 @@ import { createWatch } from "./reactive/create-watch.mjs";
22
24
  import "./reactive/index.mjs";
23
25
  import { clearArray, iterate, list, range } from "./utils/array.mjs";
24
26
  import { runAtNextAnimationFrame, sleep } from "./utils/async.mjs";
25
- import { isArray, isClient, isDate, isEmpty, isFloat, isFn, isInt, isNumber, isObject, isPrimitive, isPromise, isString, isSymbol } from "./utils/is.mjs";
27
+ import { isArray, isClient, isDate, isDefined, isEmpty, isFloat, isFn, isInt, isNumber, isObject, isPrimitive, isPromise, isString, isSymbol, isUndefined } from "./utils/is.mjs";
26
28
  import { clamp, inRange, max, min, toHex } from "./utils/number.mjs";
27
29
  import { draw, random, shuffle, uid } from "./utils/random.mjs";
28
30
  import { camel, capitalize, dash, pascal, snake, template, title, trim } from "./utils/str.mjs";
29
- export { AnyFn, CreateVisibilityObserverOption, DocumentEventName, EntryCallback, Fn, GeneralEventListener, MaybeAccessor, MaybeArray, MaybeNullableAccessor, MaybePromise, OKLCH, RGB, UseVisibilityObserverFn, WindowEventName, access, camel, capitalize, clamp, clearArray, combineClass, combineStyle, createClickOutside, createDebounce, createDebouncedWatch, createEventListener, createIntersectionObserver, createLoopExec, createThrottle, createVisibilityObserver, createWatch, dash, dataIf, draw, hexToRgb, inRange, isArray, isClient, isDate, isEmpty, isFloat, isFn, isInt, isNumber, isObject, isPrimitive, isPromise, isString, isSymbol, isValidHex, isValidOKLCH, isValidRGB, iterate, list, makeEventListener, max, min, mountStyle, noop, oklchToRgb, pascal, random, range, rgbToHex, rgbToOklch, runAtNextAnimationFrame, runSolidEventHandler, shuffle, sleep, snake, stringStyleToObject, template, title, toHex, trim, uid };
31
+ export { AnyFn, CreateVisibilityObserverOption, DocumentEventName, EntryCallback, Fn, GeneralEventListener, MaybeAccessor, MaybeArray, MaybeNullableAccessor, MaybePromise, OKLCH, PresenceState, RGB, UseVisibilityObserverFn, WindowEventName, access, camel, capitalize, clamp, clearArray, combineClass, combineStyle, createClickOutside, createDebounce, createDebouncedWatch, createEventListener, createIntersectionObserver, createLoopExec, createPresence, createThrottle, createVisibilityObserver, createWatch, dash, dataIf, draw, hasAnimation, hexToRgb, inRange, isArray, isClient, isDate, isDefined, isEmpty, isFloat, isFn, isInt, isNumber, isObject, isPrimitive, isPromise, isString, isSymbol, isUndefined, isValidHex, isValidOKLCH, isValidRGB, iterate, list, makeEventListener, max, min, mountStyle, noop, oklchToRgb, pascal, random, range, rgbToHex, rgbToOklch, runAtNextAnimationFrame, runSolidEventHandler, shuffle, sleep, snake, stringStyleToObject, template, title, toHex, trim, uid };
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { isArray, isClient, isDate, isEmpty, isFloat, isFn, isInt, isNumber, isObject, isPrimitive, isPromise, isString, isSymbol } from "./utils/is.mjs";
1
+ import { isArray, isClient, isDate, isDefined, isEmpty, isFloat, isFn, isInt, isNumber, isObject, isPrimitive, isPromise, isString, isSymbol, isUndefined } from "./utils/is.mjs";
2
2
  import { clearArray, iterate, list, range } from "./utils/array.mjs";
3
3
  import { runAtNextAnimationFrame, sleep } from "./utils/async.mjs";
4
4
  import { clamp, inRange, max, min, toHex } from "./utils/number.mjs";
@@ -7,6 +7,7 @@ import { camel, capitalize, dash, pascal, snake, template, title, trim } from ".
7
7
  import { hexToRgb, rgbToHex } from "./color/hex-rgb.mjs";
8
8
  import { oklchToRgb, rgbToOklch } from "./color/oklch-rgb.mjs";
9
9
  import { isValidHex, isValidOKLCH, isValidRGB } from "./color/validation.mjs";
10
+ import { hasAnimation } from "./dom/animation.mjs";
10
11
  import { combineClass, combineStyle, mountStyle, stringStyleToObject } from "./dom/css.mjs";
11
12
  import { access } from "./reactive/access.mjs";
12
13
  import { createDebounce } from "./fn/create-debounce.mjs";
@@ -19,8 +20,9 @@ import { makeEventListener } from "./event/make-event-listener.mjs";
19
20
  import { createClickOutside } from "./event/create-click-outside.mjs";
20
21
  import { createEventListener } from "./event/create-event-listener.mjs";
21
22
  import { createIntersectionObserver } from "./event/create-intersection-observer.mjs";
23
+ import { createPresence } from "./event/create-presence.mjs";
22
24
  import { createVisibilityObserver } from "./event/create-visibility-observer.mjs";
23
25
  import { runSolidEventHandler } from "./event/index.mjs";
24
26
  import { dataIf } from "./jsx/attrs.mjs";
25
27
 
26
- export { access, camel, capitalize, clamp, clearArray, combineClass, combineStyle, createClickOutside, createDebounce, createDebouncedWatch, createEventListener, createIntersectionObserver, createLoopExec, createThrottle, createVisibilityObserver, createWatch, dash, dataIf, draw, hexToRgb, inRange, isArray, isClient, isDate, isEmpty, isFloat, isFn, isInt, isNumber, isObject, isPrimitive, isPromise, isString, isSymbol, isValidHex, isValidOKLCH, isValidRGB, iterate, list, makeEventListener, max, min, mountStyle, noop, oklchToRgb, pascal, random, range, rgbToHex, rgbToOklch, runAtNextAnimationFrame, runSolidEventHandler, shuffle, sleep, snake, stringStyleToObject, template, title, toHex, trim, uid };
28
+ export { access, camel, capitalize, clamp, clearArray, combineClass, combineStyle, createClickOutside, createDebounce, createDebouncedWatch, createEventListener, createIntersectionObserver, createLoopExec, createPresence, createThrottle, createVisibilityObserver, createWatch, dash, dataIf, draw, hasAnimation, hexToRgb, inRange, isArray, isClient, isDate, isDefined, isEmpty, isFloat, isFn, isInt, isNumber, isObject, isPrimitive, isPromise, isString, isSymbol, isUndefined, isValidHex, isValidOKLCH, isValidRGB, iterate, list, makeEventListener, max, min, mountStyle, noop, oklchToRgb, pascal, random, range, rgbToHex, rgbToOklch, runAtNextAnimationFrame, runSolidEventHandler, shuffle, sleep, snake, stringStyleToObject, template, title, toHex, trim, uid };
@@ -25,5 +25,7 @@ declare const isDate: (value: any) => value is Date;
25
25
  declare const isPromise: (value: any) => value is Promise<any>;
26
26
  declare const isEmpty: (value: any) => boolean;
27
27
  declare const isClient: boolean;
28
+ declare function isUndefined(value: any): value is undefined;
29
+ declare function isDefined<T>(value: T | undefined): value is T;
28
30
  //#endregion
29
- export { isArray, isClient, isDate, isEmpty, isFloat, isFn, isInt, isNumber, isObject, isPrimitive, isPromise, isString, isSymbol };
31
+ export { isArray, isClient, isDate, isDefined, isEmpty, isFloat, isFn, isInt, isNumber, isObject, isPrimitive, isPromise, isString, isSymbol, isUndefined };
package/dist/utils/is.mjs CHANGED
@@ -67,6 +67,12 @@ const isEmpty = (value) => {
67
67
  return Object.keys(value).length === 0;
68
68
  };
69
69
  const isClient = !isServer;
70
+ function isUndefined(value) {
71
+ return typeof value === "undefined";
72
+ }
73
+ function isDefined(value) {
74
+ return !isUndefined(value);
75
+ }
70
76
 
71
77
  //#endregion
72
- export { isArray, isClient, isDate, isEmpty, isFloat, isFn, isInt, isNumber, isObject, isPrimitive, isPromise, isString, isSymbol };
78
+ export { isArray, isClient, isDate, isDefined, isEmpty, isFloat, isFn, isInt, isNumber, isObject, isPrimitive, isPromise, isString, isSymbol, isUndefined };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "solid-tiny-utils",
3
- "version": "0.9.0",
3
+ "version": "0.10.0",
4
4
  "description": "A collection of tiny utilities for SolidJS applications",
5
5
  "main": "./dist/index.mjs",
6
6
  "type": "module",
@@ -58,7 +58,7 @@
58
58
  "lint:error": "pnpm dlx ultracite@latest check --diagnostic-level error",
59
59
  "lint:fix": "pnpm dlx ultracite@latest fix",
60
60
  "type-check": "tsgo --noEmit --skipLibCheck",
61
- "bump": "pnpm type-check && pnpm lint:fix && pnpm test && pnpm bumpp --no-push",
61
+ "bump": "pnpm type-check && pnpm lint && pnpm test && pnpm bumpp --no-push",
62
62
  "prepublish": "pnpm build"
63
63
  }
64
64
  }