solid-tiny-utils 0.10.0 → 0.11.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.
Files changed (41) hide show
  1. package/dist/{jsx → dom}/attrs.d.mts +1 -1
  2. package/dist/{jsx → dom}/attrs.mjs +1 -1
  3. package/dist/index.d.mts +17 -17
  4. package/dist/index.mjs +16 -16
  5. package/dist/{event → solidjs}/create-click-outside.d.mts +1 -1
  6. package/dist/{event → solidjs}/create-click-outside.mjs +2 -2
  7. package/dist/{reactive → solidjs}/create-debounce-watch.d.mts +1 -1
  8. package/dist/{reactive → solidjs}/create-debounce-watch.mjs +2 -2
  9. package/dist/{fn → solidjs}/create-debounce.d.mts +1 -1
  10. package/dist/{fn → solidjs}/create-debounce.mjs +2 -2
  11. package/dist/{event → solidjs}/create-event-listener.d.mts +1 -1
  12. package/dist/{event → solidjs}/create-event-listener.mjs +4 -5
  13. package/dist/{event → solidjs}/create-intersection-observer.d.mts +1 -1
  14. package/dist/{event → solidjs}/create-intersection-observer.mjs +4 -4
  15. package/dist/solidjs/create-list.d.mts +14 -0
  16. package/dist/solidjs/create-list.mjs +77 -0
  17. package/dist/{fn → solidjs}/create-loop-exec.d.mts +1 -1
  18. package/dist/{fn → solidjs}/create-loop-exec.mjs +3 -3
  19. package/dist/{event → solidjs}/create-presence.d.mts +2 -5
  20. package/dist/{event → solidjs}/create-presence.mjs +8 -11
  21. package/dist/{fn → solidjs}/create-throttle.d.mts +1 -1
  22. package/dist/{fn → solidjs}/create-throttle.mjs +2 -2
  23. package/dist/{event → solidjs}/create-visibility-observer.d.mts +1 -1
  24. package/dist/{event → solidjs}/create-visibility-observer.mjs +3 -3
  25. package/dist/{reactive → solidjs}/create-watch.d.mts +1 -1
  26. package/dist/{reactive → solidjs}/create-watch.mjs +1 -1
  27. package/dist/{event → solidjs}/index.d.mts +7 -6
  28. package/dist/{event → solidjs}/make-event-listener.d.mts +1 -1
  29. package/dist/{event → solidjs}/make-event-listener.mjs +2 -2
  30. package/dist/solidjs/utils.d.mts +10 -0
  31. package/dist/solidjs/utils.mjs +16 -0
  32. package/dist/utils/constant.d.mts +4 -0
  33. package/dist/utils/constant.mjs +5 -0
  34. package/dist/utils/is.mjs +1 -1
  35. package/package.json +8 -7
  36. package/dist/event/index.mjs +0 -15
  37. package/dist/fn/index.d.mts +0 -8
  38. package/dist/fn/index.mjs +0 -9
  39. package/dist/reactive/access.d.mts +0 -6
  40. package/dist/reactive/access.mjs +0 -9
  41. package/dist/reactive/index.d.mts +0 -3
@@ -1,4 +1,4 @@
1
- //#region src/jsx/attrs.d.ts
1
+ //#region src/dom/attrs.d.ts
2
2
  /**
3
3
  * return '' if show is true
4
4
  *
@@ -1,4 +1,4 @@
1
- //#region src/jsx/attrs.ts
1
+ //#region src/dom/attrs.ts
2
2
  /**
3
3
  * return '' if show is true
4
4
  *
package/dist/index.d.mts CHANGED
@@ -2,30 +2,30 @@ 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
4
  import { hasAnimation } from "./dom/animation.mjs";
5
+ import { dataIf } from "./dom/attrs.mjs";
5
6
  import { combineClass, combineStyle, mountStyle, stringStyleToObject } from "./dom/css.mjs";
6
7
  import { AnyFn, Fn } from "./types/fn.mjs";
7
8
  import { MaybeAccessor, MaybeArray, MaybeNullableAccessor, MaybePromise } from "./types/maybe.mjs";
8
9
  import "./types/index.mjs";
9
- import { createClickOutside } from "./event/create-click-outside.mjs";
10
- import { DocumentEventName, GeneralEventListener, WindowEventName, makeEventListener } from "./event/make-event-listener.mjs";
11
- import { createEventListener } from "./event/create-event-listener.mjs";
12
- import { createIntersectionObserver } from "./event/create-intersection-observer.mjs";
13
- import { PresenceState, createPresence } from "./event/create-presence.mjs";
14
- import { CreateVisibilityObserverOption, EntryCallback, UseVisibilityObserverFn, createVisibilityObserver } from "./event/create-visibility-observer.mjs";
15
- import { runSolidEventHandler } from "./event/index.mjs";
16
- import { createDebounce } from "./fn/create-debounce.mjs";
17
- import { createLoopExec } from "./fn/create-loop-exec.mjs";
18
- import { createThrottle } from "./fn/create-throttle.mjs";
19
- import { noop } from "./fn/index.mjs";
20
- import { dataIf } from "./jsx/attrs.mjs";
21
- import { access } from "./reactive/access.mjs";
22
- import { createDebouncedWatch } from "./reactive/create-debounce-watch.mjs";
23
- import { createWatch } from "./reactive/create-watch.mjs";
24
- import "./reactive/index.mjs";
10
+ import { createClickOutside } from "./solidjs/create-click-outside.mjs";
11
+ import { createDebounce } from "./solidjs/create-debounce.mjs";
12
+ import { createDebouncedWatch } from "./solidjs/create-debounce-watch.mjs";
13
+ import { DocumentEventName, GeneralEventListener, WindowEventName, makeEventListener } from "./solidjs/make-event-listener.mjs";
14
+ import { createEventListener } from "./solidjs/create-event-listener.mjs";
15
+ import { createIntersectionObserver } from "./solidjs/create-intersection-observer.mjs";
16
+ import { createList } from "./solidjs/create-list.mjs";
17
+ import { createLoopExec } from "./solidjs/create-loop-exec.mjs";
18
+ import { PresenceState, createPresence } from "./solidjs/create-presence.mjs";
19
+ import { createThrottle } from "./solidjs/create-throttle.mjs";
20
+ import { CreateVisibilityObserverOption, EntryCallback, UseVisibilityObserverFn, createVisibilityObserver } from "./solidjs/create-visibility-observer.mjs";
21
+ import { createWatch } from "./solidjs/create-watch.mjs";
22
+ import { MaybeCallableChild, access, callMaybeCallableChild, runSolidEventHandler } from "./solidjs/utils.mjs";
23
+ import "./solidjs/index.mjs";
25
24
  import { clearArray, iterate, list, range } from "./utils/array.mjs";
26
25
  import { runAtNextAnimationFrame, sleep } from "./utils/async.mjs";
26
+ import { noop } from "./utils/constant.mjs";
27
27
  import { isArray, isClient, isDate, isDefined, isEmpty, isFloat, isFn, isInt, isNumber, isObject, isPrimitive, isPromise, isString, isSymbol, isUndefined } from "./utils/is.mjs";
28
28
  import { clamp, inRange, max, min, toHex } from "./utils/number.mjs";
29
29
  import { draw, random, shuffle, uid } from "./utils/random.mjs";
30
30
  import { camel, capitalize, dash, pascal, snake, template, title, trim } from "./utils/str.mjs";
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 };
31
+ export { AnyFn, CreateVisibilityObserverOption, DocumentEventName, EntryCallback, Fn, GeneralEventListener, MaybeAccessor, MaybeArray, MaybeCallableChild, MaybeNullableAccessor, MaybePromise, OKLCH, PresenceState, RGB, UseVisibilityObserverFn, WindowEventName, access, callMaybeCallableChild, camel, capitalize, clamp, clearArray, combineClass, combineStyle, createClickOutside, createDebounce, createDebouncedWatch, createEventListener, createIntersectionObserver, createList, 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,6 +1,7 @@
1
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
+ import { noop } from "./utils/constant.mjs";
4
5
  import { clamp, inRange, max, min, toHex } from "./utils/number.mjs";
5
6
  import { draw, random, shuffle, uid } from "./utils/random.mjs";
6
7
  import { camel, capitalize, dash, pascal, snake, template, title, trim } from "./utils/str.mjs";
@@ -8,21 +9,20 @@ import { hexToRgb, rgbToHex } from "./color/hex-rgb.mjs";
8
9
  import { oklchToRgb, rgbToOklch } from "./color/oklch-rgb.mjs";
9
10
  import { isValidHex, isValidOKLCH, isValidRGB } from "./color/validation.mjs";
10
11
  import { hasAnimation } from "./dom/animation.mjs";
12
+ import { dataIf } from "./dom/attrs.mjs";
11
13
  import { combineClass, combineStyle, mountStyle, stringStyleToObject } from "./dom/css.mjs";
12
- import { access } from "./reactive/access.mjs";
13
- import { createDebounce } from "./fn/create-debounce.mjs";
14
- import { createLoopExec } from "./fn/create-loop-exec.mjs";
15
- import { createThrottle } from "./fn/create-throttle.mjs";
16
- import { noop } from "./fn/index.mjs";
17
- import { createWatch } from "./reactive/create-watch.mjs";
18
- import { createDebouncedWatch } from "./reactive/create-debounce-watch.mjs";
19
- import { makeEventListener } from "./event/make-event-listener.mjs";
20
- import { createClickOutside } from "./event/create-click-outside.mjs";
21
- import { createEventListener } from "./event/create-event-listener.mjs";
22
- import { createIntersectionObserver } from "./event/create-intersection-observer.mjs";
23
- import { createPresence } from "./event/create-presence.mjs";
24
- import { createVisibilityObserver } from "./event/create-visibility-observer.mjs";
25
- import { runSolidEventHandler } from "./event/index.mjs";
26
- import { dataIf } from "./jsx/attrs.mjs";
14
+ import { makeEventListener } from "./solidjs/make-event-listener.mjs";
15
+ import { access, callMaybeCallableChild, runSolidEventHandler } from "./solidjs/utils.mjs";
16
+ import { createClickOutside } from "./solidjs/create-click-outside.mjs";
17
+ import { createDebounce } from "./solidjs/create-debounce.mjs";
18
+ import { createWatch } from "./solidjs/create-watch.mjs";
19
+ import { createDebouncedWatch } from "./solidjs/create-debounce-watch.mjs";
20
+ import { createEventListener } from "./solidjs/create-event-listener.mjs";
21
+ import { createIntersectionObserver } from "./solidjs/create-intersection-observer.mjs";
22
+ import { createList } from "./solidjs/create-list.mjs";
23
+ import { createLoopExec } from "./solidjs/create-loop-exec.mjs";
24
+ import { createPresence } from "./solidjs/create-presence.mjs";
25
+ import { createThrottle } from "./solidjs/create-throttle.mjs";
26
+ import { createVisibilityObserver } from "./solidjs/create-visibility-observer.mjs";
27
27
 
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 };
28
+ export { access, callMaybeCallableChild, camel, capitalize, clamp, clearArray, combineClass, combineStyle, createClickOutside, createDebounce, createDebouncedWatch, createEventListener, createIntersectionObserver, createList, 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 };
@@ -1,7 +1,7 @@
1
1
  import { MaybeAccessor } from "../types/maybe.mjs";
2
2
  import "../types/index.mjs";
3
3
 
4
- //#region src/event/create-click-outside.d.ts
4
+ //#region src/solidjs/create-click-outside.d.ts
5
5
  declare function createClickOutside(target: MaybeAccessor<HTMLElement | null | undefined>, handler: (event: PointerEvent) => void, options?: {
6
6
  ignore?: MaybeAccessor<HTMLElement | null | undefined>[];
7
7
  }): () => void;
@@ -1,7 +1,7 @@
1
- import { access } from "../reactive/access.mjs";
2
1
  import { makeEventListener } from "./make-event-listener.mjs";
2
+ import { access } from "./utils.mjs";
3
3
 
4
- //#region src/event/create-click-outside.ts
4
+ //#region src/solidjs/create-click-outside.ts
5
5
  function createClickOutside(target, handler, options) {
6
6
  let shouldListen = false;
7
7
  const shouldIgnore = (event) => {
@@ -1,6 +1,6 @@
1
1
  import { Accessor, AccessorArray, OnOptions } from "solid-js";
2
2
 
3
- //#region src/reactive/create-debounce-watch.d.ts
3
+ //#region src/solidjs/create-debounce-watch.d.ts
4
4
 
5
5
  /**
6
6
  * Creates a debounced watch effect.
@@ -1,7 +1,7 @@
1
- import { createDebounce } from "../fn/create-debounce.mjs";
1
+ import { createDebounce } from "./create-debounce.mjs";
2
2
  import { createWatch } from "./create-watch.mjs";
3
3
 
4
- //#region src/reactive/create-debounce-watch.ts
4
+ //#region src/solidjs/create-debounce-watch.ts
5
5
  /**
6
6
  * Creates a debounced watch effect.
7
7
  *
@@ -1,7 +1,7 @@
1
1
  import { MaybeAccessor } from "../types/maybe.mjs";
2
2
  import "../types/index.mjs";
3
3
 
4
- //#region src/fn/create-debounce.d.ts
4
+ //#region src/solidjs/create-debounce.d.ts
5
5
  declare function createDebounce<Args extends unknown[]>(callback: (...args: Args) => void, delay: MaybeAccessor<number>): (...args: Args) => void;
6
6
  //#endregion
7
7
  export { createDebounce };
@@ -1,7 +1,7 @@
1
- import { access } from "../reactive/access.mjs";
1
+ import { access } from "./utils.mjs";
2
2
  import { onCleanup } from "solid-js";
3
3
 
4
- //#region src/fn/create-debounce.ts
4
+ //#region src/solidjs/create-debounce.ts
5
5
  function createDebounce(callback, delay) {
6
6
  let timeoutId;
7
7
  onCleanup(() => {
@@ -3,7 +3,7 @@ import { MaybeAccessor, MaybeArray } from "../types/maybe.mjs";
3
3
  import "../types/index.mjs";
4
4
  import { DocumentEventName, GeneralEventListener, WindowEventName } from "./make-event-listener.mjs";
5
5
 
6
- //#region src/event/create-event-listener.d.ts
6
+ //#region src/solidjs/create-event-listener.d.ts
7
7
  /**
8
8
  * Overload 2: Explicitly Window target
9
9
  */
@@ -1,12 +1,11 @@
1
1
  import { isArray } from "../utils/is.mjs";
2
2
  import { clearArray } from "../utils/array.mjs";
3
- import { access } from "../reactive/access.mjs";
4
- import { noop } from "../fn/index.mjs";
5
- import { createWatch } from "../reactive/create-watch.mjs";
3
+ import { noop } from "../utils/constant.mjs";
6
4
  import { makeEventListener } from "./make-event-listener.mjs";
5
+ import { access } from "./utils.mjs";
6
+ import { createWatch } from "./create-watch.mjs";
7
7
 
8
- //#region src/event/create-event-listener.ts
9
- /** biome-ignore-all lint/suspicious/noExplicitAny: I need any */
8
+ //#region src/solidjs/create-event-listener.ts
10
9
  function createEventListener(...args) {
11
10
  const target = args[0];
12
11
  const events = args[1];
@@ -1,7 +1,7 @@
1
1
  import { MaybeAccessor } from "../types/maybe.mjs";
2
2
  import "../types/index.mjs";
3
3
 
4
- //#region src/event/create-intersection-observer.d.ts
4
+ //#region src/solidjs/create-intersection-observer.d.ts
5
5
  declare function createIntersectionObserver(targets: MaybeAccessor<HTMLElement | null | undefined>[], callback: IntersectionObserverCallback, options?: IntersectionObserverInit): () => void;
6
6
  //#endregion
7
7
  export { createIntersectionObserver };
@@ -1,11 +1,11 @@
1
1
  import { clearArray } from "../utils/array.mjs";
2
- import { access } from "../reactive/access.mjs";
3
- import { noop } from "../fn/index.mjs";
4
- import { createWatch } from "../reactive/create-watch.mjs";
2
+ import { noop } from "../utils/constant.mjs";
3
+ import { access } from "./utils.mjs";
4
+ import { createWatch } from "./create-watch.mjs";
5
5
  import { isServer } from "solid-js/web";
6
6
  import { onCleanup } from "solid-js";
7
7
 
8
- //#region src/event/create-intersection-observer.ts
8
+ //#region src/solidjs/create-intersection-observer.ts
9
9
  function createIntersectionObserver(targets, callback, options = {}) {
10
10
  if (isServer) return noop;
11
11
  const io = new IntersectionObserver(callback, options);
@@ -0,0 +1,14 @@
1
+ import { SetStoreFunction } from "solid-js/store";
2
+
3
+ //#region src/solidjs/create-list.d.ts
4
+ declare function createList<T>(initialValue?: T[]): readonly [T[], {
5
+ readonly setList: SetStoreFunction<T[]>;
6
+ readonly insert: (item: T, at?: number) => void;
7
+ readonly remove: (at?: number) => void;
8
+ readonly swap: (indexA: number, indexB: number) => void;
9
+ readonly move: (from: number, to: number) => void;
10
+ readonly sort: (compareFn: (a: T, b: T) => number) => void;
11
+ readonly isSortedBy: (compareFn: (a: T, b: T) => number) => boolean;
12
+ }];
13
+ //#endregion
14
+ export { createList };
@@ -0,0 +1,77 @@
1
+ import { inRange } from "../utils/number.mjs";
2
+ import { createStore, unwrap } from "solid-js/store";
3
+
4
+ //#region src/solidjs/create-list.ts
5
+ function createInsertHelper(setList) {
6
+ return (item, at) => {
7
+ setList((list) => {
8
+ let atIdx = at ?? list.length;
9
+ if (atIdx < 0 || atIdx > list.length) atIdx = list.length;
10
+ const newList = [...list];
11
+ newList.splice(atIdx, 0, item);
12
+ return newList;
13
+ });
14
+ };
15
+ }
16
+ function createRemoveHelper(setList) {
17
+ return (at) => {
18
+ setList((list) => {
19
+ const atIdx = at ?? list.length - 1;
20
+ if (atIdx < 0 || atIdx >= list.length) return list;
21
+ const newList = [...list];
22
+ newList.splice(atIdx, 1);
23
+ return newList;
24
+ });
25
+ };
26
+ }
27
+ function createSwapHelper(setList) {
28
+ return (indexA, indexB) => {
29
+ setList((list) => {
30
+ if (indexA === indexB || !inRange(indexA, 0, list.length - 1) || !inRange(indexB, 0, list.length - 1)) return list;
31
+ const newList = [...list];
32
+ [newList[indexA], newList[indexB]] = [newList[indexB], newList[indexA]];
33
+ return newList;
34
+ });
35
+ };
36
+ }
37
+ function createMoveHelper(setList) {
38
+ return (from, to) => {
39
+ setList((list) => {
40
+ if (from === to || !inRange(from, 0, list.length - 1) || !inRange(to, 0, list.length - 1)) return list;
41
+ const newList = [...list];
42
+ const [item] = newList.splice(from, 1);
43
+ newList.splice(to, 0, item);
44
+ return newList;
45
+ });
46
+ };
47
+ }
48
+ function createSortHelper(setList) {
49
+ return (compareFn) => {
50
+ setList((list) => {
51
+ const newList = [...list];
52
+ newList.sort(compareFn);
53
+ return newList;
54
+ });
55
+ };
56
+ }
57
+ function createIsSortedHelper(list, compareFn) {
58
+ for (let i = 1; i < list.length; i++) if (compareFn(list[i - 1], list[i]) > 0) return false;
59
+ return true;
60
+ }
61
+ function createList(initialValue) {
62
+ const [list, setList] = createStore(unwrap(initialValue) || []);
63
+ return [list, {
64
+ setList,
65
+ insert: createInsertHelper(setList),
66
+ remove: createRemoveHelper(setList),
67
+ swap: createSwapHelper(setList),
68
+ move: createMoveHelper(setList),
69
+ sort: createSortHelper(setList),
70
+ isSortedBy: (compareFn) => {
71
+ return createIsSortedHelper(list, compareFn);
72
+ }
73
+ }];
74
+ }
75
+
76
+ //#endregion
77
+ export { createList };
@@ -1,6 +1,6 @@
1
1
  import { MaybeAccessor, MaybePromise } from "../types/maybe.mjs";
2
2
 
3
- //#region src/fn/create-loop-exec.d.ts
3
+ //#region src/solidjs/create-loop-exec.d.ts
4
4
 
5
5
  /**
6
6
  * Repeatedly executes an asynchronous function with a specified delay between each execution.
@@ -1,9 +1,9 @@
1
1
  import { isNumber } from "../utils/is.mjs";
2
- import { access } from "../reactive/access.mjs";
3
- import { createWatch } from "../reactive/create-watch.mjs";
2
+ import { access } from "./utils.mjs";
3
+ import { createWatch } from "./create-watch.mjs";
4
4
  import { onCleanup } from "solid-js";
5
5
 
6
- //#region src/fn/create-loop-exec.ts
6
+ //#region src/solidjs/create-loop-exec.ts
7
7
  /**
8
8
  * Repeatedly executes an asynchronous function with a specified delay between each execution.
9
9
  * The loop continues until the surrounding SolidJS effect is cleaned up.
@@ -1,14 +1,11 @@
1
1
  import { MaybeAccessor } from "../types/maybe.mjs";
2
2
  import { Accessor } from "solid-js";
3
3
 
4
- //#region src/event/create-presence.d.ts
4
+ //#region src/solidjs/create-presence.d.ts
5
5
  type PresenceState = "opening" | "opened" | "closing" | "closed";
6
6
  declare function createPresence(params: {
7
7
  show: Accessor<boolean>;
8
8
  element: MaybeAccessor<HTMLElement | undefined>;
9
- }): {
10
- show: () => boolean;
11
- state: Accessor<PresenceState>;
12
- };
9
+ }): readonly [Accessor<boolean>, Accessor<PresenceState>];
13
10
  //#endregion
14
11
  export { PresenceState, createPresence };
@@ -1,14 +1,14 @@
1
+ import { noop } from "../utils/constant.mjs";
1
2
  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
3
  import { makeEventListener } from "./make-event-listener.mjs";
6
- import { createSignal } from "solid-js";
4
+ import { access } from "./utils.mjs";
5
+ import { createWatch } from "./create-watch.mjs";
6
+ import { createMemo, createSignal } from "solid-js";
7
7
 
8
- //#region src/event/create-presence.ts
8
+ //#region src/solidjs/create-presence.ts
9
9
  function createPresence(params) {
10
10
  const [state, setState] = createSignal(access(params.show) ? "opened" : "closed");
11
- createWatch(params.show, (show) => {
11
+ createWatch(createMemo(() => access(params.show)), (show) => {
12
12
  if (show) setState("opening");
13
13
  else setState("closing");
14
14
  }, { defer: true });
@@ -19,13 +19,10 @@ function createPresence(params) {
19
19
  if (!el) return;
20
20
  if (current.endsWith("ing")) if (hasAnimation(el)) clear = makeEventListener(el, "animationend", () => {
21
21
  setState(current === "opening" ? "opened" : "closed");
22
- }, { once: true });
22
+ });
23
23
  else setState(current === "opening" ? "opened" : "closed");
24
24
  });
25
- return {
26
- show: () => state() !== "closed",
27
- state
28
- };
25
+ return [createMemo(() => state() !== "closed"), state];
29
26
  }
30
27
 
31
28
  //#endregion
@@ -1,7 +1,7 @@
1
1
  import { MaybeAccessor } from "../types/maybe.mjs";
2
2
  import "../types/index.mjs";
3
3
 
4
- //#region src/fn/create-throttle.d.ts
4
+ //#region src/solidjs/create-throttle.d.ts
5
5
  declare function createThrottle<Args extends unknown[]>(callback: (...args: Args) => void, delay: MaybeAccessor<number>): (...args: Args) => void;
6
6
  //#endregion
7
7
  export { createThrottle };
@@ -1,7 +1,7 @@
1
- import { access } from "../reactive/access.mjs";
1
+ import { access } from "./utils.mjs";
2
2
  import { onCleanup } from "solid-js";
3
3
 
4
- //#region src/fn/create-throttle.ts
4
+ //#region src/solidjs/create-throttle.ts
5
5
  function createThrottle(callback, delay) {
6
6
  let timeoutId;
7
7
  onCleanup(() => {
@@ -2,7 +2,7 @@ import { MaybeNullableAccessor } from "../types/maybe.mjs";
2
2
  import "../types/index.mjs";
3
3
  import { Accessor } from "solid-js";
4
4
 
5
- //#region src/event/create-visibility-observer.d.ts
5
+ //#region src/solidjs/create-visibility-observer.d.ts
6
6
  type UseVisibilityObserverFn = (target: MaybeNullableAccessor<HTMLElement>) => Accessor<boolean>;
7
7
  type CreateVisibilityObserverOption = IntersectionObserverInit & {
8
8
  initialValue?: boolean;
@@ -1,9 +1,9 @@
1
1
  import { isObject } from "../utils/is.mjs";
2
- import { access } from "../reactive/access.mjs";
3
- import { createWatch } from "../reactive/create-watch.mjs";
2
+ import { access } from "./utils.mjs";
3
+ import { createWatch } from "./create-watch.mjs";
4
4
  import { createSignal, onCleanup } from "solid-js";
5
5
 
6
- //#region src/event/create-visibility-observer.ts
6
+ //#region src/solidjs/create-visibility-observer.ts
7
7
  function createVisibilityObserver(arg1, arg2) {
8
8
  let target;
9
9
  let options;
@@ -1,6 +1,6 @@
1
1
  import { Accessor, AccessorArray, OnEffectFunction, OnOptions } from "solid-js";
2
2
 
3
- //#region src/reactive/create-watch.d.ts
3
+ //#region src/solidjs/create-watch.d.ts
4
4
  declare function createWatch<S, Next extends Prev, Prev = Next>(targets: AccessorArray<S> | Accessor<S>, fn: OnEffectFunction<S, undefined | NoInfer<Prev>, Next>, opt?: OnOptions): void;
5
5
  //#endregion
6
6
  export { createWatch };
@@ -1,6 +1,6 @@
1
1
  import { createEffect, on } from "solid-js";
2
2
 
3
- //#region src/reactive/create-watch.ts
3
+ //#region src/solidjs/create-watch.ts
4
4
  function createWatch(targets, fn, opt) {
5
5
  createEffect(on(targets, fn, opt));
6
6
  }
@@ -1,12 +1,13 @@
1
1
  import { createClickOutside } from "./create-click-outside.mjs";
2
+ import { createDebounce } from "./create-debounce.mjs";
3
+ import { createDebouncedWatch } from "./create-debounce-watch.mjs";
2
4
  import { DocumentEventName, GeneralEventListener, WindowEventName, makeEventListener } from "./make-event-listener.mjs";
3
5
  import { createEventListener } from "./create-event-listener.mjs";
4
6
  import { createIntersectionObserver } from "./create-intersection-observer.mjs";
7
+ import { createList } from "./create-list.mjs";
8
+ import { createLoopExec } from "./create-loop-exec.mjs";
5
9
  import { PresenceState, createPresence } from "./create-presence.mjs";
10
+ import { createThrottle } from "./create-throttle.mjs";
6
11
  import { CreateVisibilityObserverOption, EntryCallback, UseVisibilityObserverFn, createVisibilityObserver } from "./create-visibility-observer.mjs";
7
- import { JSX } from "solid-js/jsx-runtime";
8
-
9
- //#region src/event/index.d.ts
10
- declare function runSolidEventHandler<T, E extends Event, EHandler extends JSX.EventHandler<T, any> = JSX.EventHandler<T, E>>(event: E, handler?: EHandler | JSX.BoundEventHandler<T, E, EHandler>): void;
11
- //#endregion
12
- export { runSolidEventHandler };
12
+ import { createWatch } from "./create-watch.mjs";
13
+ import { MaybeCallableChild, access, callMaybeCallableChild, runSolidEventHandler } from "./utils.mjs";
@@ -2,7 +2,7 @@ import { Fn } from "../types/fn.mjs";
2
2
  import { MaybeArray } from "../types/maybe.mjs";
3
3
  import "../types/index.mjs";
4
4
 
5
- //#region src/event/make-event-listener.d.ts
5
+ //#region src/solidjs/make-event-listener.d.ts
6
6
  interface InferEventTarget<Events> {
7
7
  addEventListener: (event: Events, fn?: any, options?: any) => any;
8
8
  removeEventListener: (event: Events, fn?: any, options?: any) => any;
@@ -1,9 +1,9 @@
1
1
  import { isArray } from "../utils/is.mjs";
2
2
  import { clearArray } from "../utils/array.mjs";
3
- import { noop } from "../fn/index.mjs";
3
+ import { noop } from "../utils/constant.mjs";
4
4
  import { onCleanup } from "solid-js";
5
5
 
6
- //#region src/event/make-event-listener.ts
6
+ //#region src/solidjs/make-event-listener.ts
7
7
  /** biome-ignore-all lint/suspicious/noExplicitAny: I need any */
8
8
  function makeEventListener(...args) {
9
9
  let target;
@@ -0,0 +1,10 @@
1
+ import { MaybeAccessor } from "../types/maybe.mjs";
2
+ import { JSX } from "solid-js";
3
+
4
+ //#region src/solidjs/utils.d.ts
5
+ declare function access<T>(value: MaybeAccessor<T>): T;
6
+ declare function runSolidEventHandler<T, E extends Event, EHandler extends JSX.EventHandler<T, any> = JSX.EventHandler<T, E>>(event: E, handler?: EHandler | JSX.BoundEventHandler<T, E, EHandler>): void;
7
+ type MaybeCallableChild<T extends unknown[] = []> = JSX.Element | ((...args: T) => JSX.Element);
8
+ declare function callMaybeCallableChild<T extends unknown[] = []>(children: MaybeCallableChild<T>, ...args: T): JSX.Element;
9
+ //#endregion
10
+ export { MaybeCallableChild, access, callMaybeCallableChild, runSolidEventHandler };
@@ -0,0 +1,16 @@
1
+ import { isFn } from "../utils/is.mjs";
2
+
3
+ //#region src/solidjs/utils.ts
4
+ function access(value) {
5
+ return isFn(value) ? value() : value;
6
+ }
7
+ function runSolidEventHandler(event, handler) {
8
+ if (typeof handler === "function") handler(event);
9
+ if (Array.isArray(handler)) handler[0](handler[1], event);
10
+ }
11
+ function callMaybeCallableChild(children, ...args) {
12
+ return isFn(children) ? children(...args) : children;
13
+ }
14
+
15
+ //#endregion
16
+ export { access, callMaybeCallableChild, runSolidEventHandler };
@@ -0,0 +1,4 @@
1
+ //#region src/utils/constant.d.ts
2
+ declare const noop: () => void;
3
+ //#endregion
4
+ export { noop };
@@ -0,0 +1,5 @@
1
+ //#region src/utils/constant.ts
2
+ const noop = () => {};
3
+
4
+ //#endregion
5
+ export { noop };
package/dist/utils/is.mjs CHANGED
@@ -21,7 +21,7 @@ const isPrimitive = (value) => {
21
21
  return value === void 0 || value === null || typeof value !== "object" && typeof value !== "function";
22
22
  };
23
23
  const isFn = (value) => {
24
- return !!(value && value.constructor && value.call && value.apply);
24
+ return typeof value === "function";
25
25
  };
26
26
  const isString = (value) => {
27
27
  return typeof value === "string" || value instanceof String;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "solid-tiny-utils",
3
- "version": "0.10.0",
3
+ "version": "0.11.0",
4
4
  "description": "A collection of tiny utilities for SolidJS applications",
5
5
  "main": "./dist/index.mjs",
6
6
  "type": "module",
@@ -13,23 +13,24 @@
13
13
  },
14
14
  "devDependencies": {
15
15
  "@biomejs/biome": "2.3.10",
16
+ "@formkit/auto-animate": "^0.9.0",
16
17
  "@solidjs/router": "^0.15.4",
17
18
  "@solidjs/testing-library": "^0.8.10",
18
19
  "@testing-library/jest-dom": "^6.9.1",
19
20
  "@testing-library/user-event": "^14.6.1",
20
21
  "@types/culori": "^4.0.0",
21
22
  "@types/node": "^25.0.3",
22
- "@typescript/native-preview": "7.0.0-dev.20251226.1",
23
+ "@typescript/native-preview": "7.0.0-dev.20260102.1",
23
24
  "@vitest/ui": "^4.0.16",
24
- "bumpp": "^10.2.3",
25
+ "bumpp": "^10.3.2",
25
26
  "culori": "^4.0.2",
26
27
  "jsdom": "^27.3.0",
27
28
  "solid-tiny-context": "0.2.3",
28
- "tsdown": "^0.18.3",
29
- "ultracite": "6.5.0",
29
+ "tsdown": "^0.18.4",
30
+ "ultracite": "7.0.5",
30
31
  "unocss": "^66.3.3",
31
32
  "vite": "^7.3.0",
32
- "vite-plugin-solid": "^2.11.0",
33
+ "vite-plugin-solid": "^2.11.10",
33
34
  "vite-plugin-solid-pages": "^0.3.5",
34
35
  "vitest": "^4.0.16"
35
36
  },
@@ -58,7 +59,7 @@
58
59
  "lint:error": "pnpm dlx ultracite@latest check --diagnostic-level error",
59
60
  "lint:fix": "pnpm dlx ultracite@latest fix",
60
61
  "type-check": "tsgo --noEmit --skipLibCheck",
61
- "bump": "pnpm type-check && pnpm lint && pnpm test && pnpm bumpp --no-push",
62
+ "bump": "pnpm type-check && pnpm test && pnpm bumpp --no-push",
62
63
  "prepublish": "pnpm build"
63
64
  }
64
65
  }
@@ -1,15 +0,0 @@
1
- import { makeEventListener } from "./make-event-listener.mjs";
2
- import { createClickOutside } from "./create-click-outside.mjs";
3
- import { createEventListener } from "./create-event-listener.mjs";
4
- import { createIntersectionObserver } from "./create-intersection-observer.mjs";
5
- import { createPresence } from "./create-presence.mjs";
6
- import { createVisibilityObserver } from "./create-visibility-observer.mjs";
7
-
8
- //#region src/event/index.ts
9
- function runSolidEventHandler(event, handler) {
10
- if (typeof handler === "function") handler(event);
11
- if (Array.isArray(handler)) handler[0](handler[1], event);
12
- }
13
-
14
- //#endregion
15
- export { runSolidEventHandler };
@@ -1,8 +0,0 @@
1
- import { createDebounce } from "./create-debounce.mjs";
2
- import { createLoopExec } from "./create-loop-exec.mjs";
3
- import { createThrottle } from "./create-throttle.mjs";
4
-
5
- //#region src/fn/index.d.ts
6
- declare const noop: () => void;
7
- //#endregion
8
- export { noop };
package/dist/fn/index.mjs DELETED
@@ -1,9 +0,0 @@
1
- import { createDebounce } from "./create-debounce.mjs";
2
- import { createLoopExec } from "./create-loop-exec.mjs";
3
- import { createThrottle } from "./create-throttle.mjs";
4
-
5
- //#region src/fn/index.ts
6
- const noop = () => {};
7
-
8
- //#endregion
9
- export { noop };
@@ -1,6 +0,0 @@
1
- import { MaybeAccessor } from "../types/maybe.mjs";
2
-
3
- //#region src/reactive/access.d.ts
4
- declare function access<T>(value: MaybeAccessor<T>): T;
5
- //#endregion
6
- export { access };
@@ -1,9 +0,0 @@
1
- import { isFn } from "../utils/is.mjs";
2
-
3
- //#region src/reactive/access.ts
4
- function access(value) {
5
- return isFn(value) ? value() : value;
6
- }
7
-
8
- //#endregion
9
- export { access };
@@ -1,3 +0,0 @@
1
- import { access } from "./access.mjs";
2
- import { createDebouncedWatch } from "./create-debounce-watch.mjs";
3
- import { createWatch } from "./create-watch.mjs";