@cites/react-hooks 0.0.4 → 0.0.5

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,36 @@
1
+ type ControlKeys = {
2
+ value: string;
3
+ defaultValue: string;
4
+ onValueChange: string;
5
+ };
6
+ type ControlledProps<T, K extends ControlKeys> = {
7
+ [P in K["value"]]: T;
8
+ } & {
9
+ [P in K["onValueChange"]]: (value: T) => void;
10
+ } & {
11
+ [P in K["defaultValue"]]?: never;
12
+ };
13
+ type UncontrolledProps<T, K extends ControlKeys> = {
14
+ [P in K["defaultValue"]]?: T;
15
+ } & {
16
+ [P in K["onValueChange"]]?: (value: T) => void;
17
+ } & {
18
+ [P in K["value"]]?: never;
19
+ };
20
+ export type ControllableProps<T, K extends ControlKeys> = ControlledProps<T, K> | UncontrolledProps<T, K>;
21
+ export type StateUpdater<T> = (prev: T) => T;
22
+ export type SetState<T> = (next: T | StateUpdater<T>) => void;
23
+ declare const DEFAULT_KEYS: {
24
+ readonly value: "value";
25
+ readonly defaultValue: "defaultValue";
26
+ readonly onValueChange: "onValueChange";
27
+ };
28
+ type DefaultKeys = typeof DEFAULT_KEYS;
29
+ type ExtractValue<P, K extends ControlKeys> = P extends {
30
+ [Key in K["value"]]: infer V;
31
+ } ? V : P extends {
32
+ [Key in K["defaultValue"]]?: infer V;
33
+ } ? V : never;
34
+ export declare function useControllableState<P extends ControllableProps<any, K>, K extends ControlKeys = DefaultKeys>(props: P, keys?: K): readonly [ExtractValue<P, K>, SetState<ExtractValue<P, K>>];
35
+ export {};
36
+ //# sourceMappingURL=useControllableState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useControllableState.d.ts","sourceRoot":"","sources":["../../src/core/useControllableState.ts"],"names":[],"mappings":"AAGA,KAAK,WAAW,GAAG;IACf,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,SAAS,WAAW,IAAI;KAC5C,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;CACvB,GAAG;KACC,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI;CAChD,GAAG;KACC,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,KAAK;CACnC,CAAC;AAGF,KAAK,iBAAiB,CAAC,CAAC,EAAE,CAAC,SAAS,WAAW,IAAI;KAC9C,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;CAC/B,GAAG;KACC,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI;CACjD,GAAG;KACC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK;CAC5B,CAAC;AAGF,MAAM,MAAM,iBAAiB,CAAC,CAAC,EAAE,CAAC,SAAS,WAAW,IAAI,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAE1G,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC;AAC7C,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;AAE9D,QAAA,MAAM,YAAY;;;;CAIc,CAAC;AACjC,KAAK,WAAW,GAAG,OAAO,YAAY,CAAC;AAEvC,KAAK,YAAY,CAAC,CAAC,EAAE,CAAC,SAAS,WAAW,IACtC,CAAC,SAAS;KAAG,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC;CAAE,GACpC,CAAC,GACD,CAAC,SAAS;KAAG,GAAG,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;CAAE,GAC9C,CAAC,GACD,KAAK,CAAC;AAEpB,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,iBAAiB,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,SAAS,WAAW,GAAG,WAAW,EACzG,KAAK,EAAE,CAAC,EACR,IAAI,CAAC,EAAE,CAAC,GACT,SAAS,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CA8B7D"}
@@ -0,0 +1,29 @@
1
+ import { useState } from "react";
2
+ import { useEventCallback } from "./useEventCallback.js";
3
+ const DEFAULT_KEYS = {
4
+ value: "value",
5
+ defaultValue: "defaultValue",
6
+ onValueChange: "onValueChange",
7
+ };
8
+ export function useControllableState(props, keys) {
9
+ const { value: valueKey, defaultValue: defaultKey, onValueChange: changeKey } = (keys ?? DEFAULT_KEYS);
10
+ const propsValue = props[valueKey];
11
+ const isControlled = propsValue !== undefined;
12
+ const onChange = props[changeKey];
13
+ const [internalValue, setInternalValue] = useState(() => {
14
+ if (isControlled) {
15
+ return propsValue;
16
+ }
17
+ return props[defaultKey];
18
+ });
19
+ const value = isControlled ? propsValue : internalValue;
20
+ const setValue = useEventCallback((next) => {
21
+ const nextValue = typeof next === "function" ? next(value) : next;
22
+ if (!isControlled) {
23
+ setInternalValue(nextValue);
24
+ }
25
+ onChange?.(nextValue);
26
+ });
27
+ return [value, setValue];
28
+ }
29
+ //# sourceMappingURL=useControllableState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useControllableState.js","sourceRoot":"","sources":["../../src/core/useControllableState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AA+BzD,MAAM,YAAY,GAAG;IACnB,KAAK,EAAE,OAAO;IACd,YAAY,EAAE,cAAc;IAC5B,aAAa,EAAE,eAAe;CACA,CAAC;AAUjC,MAAM,UAAU,oBAAoB,CAChC,KAAQ,EACR,IAAQ;IAER,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,CAAC,IAAI,IAAI,YAAY,CAAC,CAAC;IAEvG,MAAM,UAAU,GAAI,KAAa,CAAC,QAAQ,CAAC,CAAC;IAC5C,MAAM,YAAY,GAAG,UAAU,KAAK,SAAS,CAAC;IAI9C,MAAM,QAAQ,GAAG,KAAK,CAAC,SAA+B,CAAmC,CAAC;IAE1F,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAI,GAAG,EAAE;QACvD,IAAI,YAAY,EAAE,CAAC;YACf,OAAO,UAAU,CAAC;QACtB,CAAC;QACD,OAAQ,KAAa,CAAC,UAAU,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC;IAExD,MAAM,QAAQ,GAAG,gBAAgB,CAAc,CAAC,IAAI,EAAE,EAAE;QACpD,MAAM,SAAS,GAAG,OAAO,IAAI,KAAK,UAAU,CAAC,CAAC,CAAE,IAAwB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAEvF,IAAI,CAAC,YAAY,EAAE,CAAC;YAChB,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAChC,CAAC;QAED,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAU,CAAC;AACtC,CAAC"}
@@ -8,11 +8,12 @@ export interface HitArea {
8
8
  bottom: number;
9
9
  left: number;
10
10
  }
11
+ type HitAreaOption = number | Partial<HitArea>;
11
12
  export interface DragGestureOptions {
12
13
  onDragStart?: (event: PointerEvent) => void;
13
14
  onDrag?: (state: DragDelta) => void;
14
15
  onDragEnd?: (event: PointerEvent) => void;
15
- hitArea?: number | Partial<HitArea>;
16
+ hitArea?: HitAreaOption;
16
17
  shouldPreventDrag?: (event: React.PointerEvent) => boolean | void;
17
18
  }
18
19
  export interface DragHandleProps {
@@ -20,8 +21,9 @@ export interface DragHandleProps {
20
21
  }
21
22
  export declare function useDragGesture(options: DragGestureOptions): {
22
23
  isDragging: boolean;
23
- getDragHandleProps: () => {
24
+ getDragHandleProps: (hitArea?: HitAreaOption) => {
24
25
  onPointerDown: (event: React.PointerEvent) => void;
25
26
  };
26
27
  };
28
+ export {};
27
29
  //# sourceMappingURL=useDragGesture.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useDragGesture.d.ts","sourceRoot":"","sources":["../../src/core/useDragGesture.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,SAAS;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,OAAO;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IAC/B,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAC5C,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IACpC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAC1C,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACpC,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,KAAK,OAAO,GAAG,IAAI,CAAC;CACrE;AAED,MAAM,WAAW,eAAe;IAC5B,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,KAAK,IAAI,CAAC;CACtD;AAmBD,wBAAgB,cAAc,CAAC,OAAO,EAAE,kBAAkB;;;+BA0ER,KAAK,CAAC,YAAY;;EAuCnE"}
1
+ {"version":3,"file":"useDragGesture.d.ts","sourceRoot":"","sources":["../../src/core/useDragGesture.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,SAAS;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,OAAO;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,KAAK,aAAa,GAAG,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAE/C,MAAM,WAAW,kBAAkB;IAC/B,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAC5C,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IACpC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAC1C,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,KAAK,OAAO,GAAG,IAAI,CAAC;CACrE;AAED,MAAM,WAAW,eAAe;IAC5B,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,KAAK,IAAI,CAAC;CACtD;AAmBD,wBAAgB,cAAc,CAAC,OAAO,EAAE,kBAAkB;;mCA+GnB,aAAa;+BAnCF,KAAK,CAAC,YAAY;;EA4CnE"}
@@ -1,5 +1,5 @@
1
1
  import { useRef, useState, useCallback, useEffect } from "react";
2
- import { useEventCallback } from "./useEventCallback.js"; // 根据你的实际路径调整
2
+ import { useEventCallback } from "./useEventCallback.js";
3
3
  function normalizeHitArea(input) {
4
4
  if (typeof input === "number") {
5
5
  return {
@@ -20,6 +20,7 @@ export function useDragGesture(options) {
20
20
  const [isDragging, setIsDragging] = useState(false);
21
21
  const startPositionRef = useRef({ x: 0, y: 0 });
22
22
  const dragTargetRef = useRef(null);
23
+ const dynamicHitAreaRef = useRef(undefined);
23
24
  const latestDeltaRef = useRef(null);
24
25
  const rafIdRef = useRef(null);
25
26
  const handleDragStart = useEventCallback((event) => {
@@ -62,10 +63,10 @@ export function useDragGesture(options) {
62
63
  rafIdRef.current = null;
63
64
  }
64
65
  });
65
- const onHitTest = useEventCallback((event) => {
66
+ const onHitTest = useEventCallback((event, overrideHitArea) => {
66
67
  const el = event.currentTarget;
67
68
  const rect = el.getBoundingClientRect();
68
- const hit = normalizeHitArea(options.hitArea);
69
+ const hit = normalizeHitArea(overrideHitArea ?? options.hitArea);
69
70
  const within = event.clientX >= rect.left - hit.left &&
70
71
  event.clientX <= rect.right + hit.right &&
71
72
  event.clientY >= rect.top - hit.top &&
@@ -78,7 +79,7 @@ export function useDragGesture(options) {
78
79
  const handlePointerDown = useCallback((event) => {
79
80
  if (onStartingDragTest(event) === true)
80
81
  return;
81
- const within = onHitTest(event);
82
+ const within = onHitTest(event, dynamicHitAreaRef.current);
82
83
  if (!within)
83
84
  return;
84
85
  event.preventDefault();
@@ -104,9 +105,14 @@ export function useDragGesture(options) {
104
105
  }, [handlePointerMove, handlePointerUp]);
105
106
  return {
106
107
  isDragging,
107
- getDragHandleProps: () => ({
108
- onPointerDown: handlePointerDown,
109
- }),
108
+ getDragHandleProps: (hitArea) => {
109
+ if (dynamicHitAreaRef.current !== hitArea) {
110
+ dynamicHitAreaRef.current = hitArea;
111
+ }
112
+ return {
113
+ onPointerDown: handlePointerDown,
114
+ };
115
+ },
110
116
  };
111
117
  }
112
118
  ;
@@ -1 +1 @@
1
- {"version":3,"file":"useDragGesture.js","sourceRoot":"","sources":["../../src/core/useDragGesture.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useDragGesture.js","sourceRoot":"","sources":["../../src/core/useDragGesture.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { type DragHandleProps } from "./useDragGesture.js";
2
+ import { type ControllableProps } from "./useControllableState.js";
2
3
  export interface Position {
3
4
  x: number;
4
5
  y: number;
@@ -14,10 +15,11 @@ export interface DraggableInfo {
14
15
  isDragging: boolean;
15
16
  draggableProps: DragHandleProps;
16
17
  }
17
- export interface DraggableOptions {
18
- position?: Position;
19
- onPositionChange?: (pos: Position) => void;
20
- initialPosition?: Position;
18
+ export type DraggableOptions = ControllableProps<Position, {
19
+ value: "position";
20
+ defaultValue: "defaultPosition";
21
+ onValueChange: "onPositionChange";
22
+ }> & {
21
23
  bounds?: Bounds;
22
24
  gridSize?: number;
23
25
  lockAxis?: "x" | "y";
@@ -25,7 +27,7 @@ export interface DraggableOptions {
25
27
  onDragEnd?: (pos: Position) => void;
26
28
  updatePositionOnDragStart?: boolean;
27
29
  shouldPreventDrag?: (event: React.PointerEvent) => boolean | undefined;
28
- }
30
+ };
29
31
  export declare function useDraggable(options?: DraggableOptions): DraggableInfo;
30
32
  export {};
31
33
  //# sourceMappingURL=useDraggable.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useDraggable.d.ts","sourceRoot":"","sources":["../../src/core/useDraggable.ts"],"names":[],"mappings":"AAEA,OAAO,EAAkB,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAG3E,MAAM,WAAW,QAAQ;IACrB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACb;AAED,UAAU,MAAM;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC1B,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,eAAe,CAAC;CACnC;AAED,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE,QAAQ,KAAK,IAAI,CAAC;IAC3C,eAAe,CAAC,EAAE,QAAQ,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC;IACrB,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,QAAQ,KAAK,IAAI,CAAC;IACtC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,QAAQ,KAAK,IAAI,CAAC;IACpC,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,KAAK,OAAO,GAAG,SAAS,CAAC;CAC1E;AAED,wBAAgB,YAAY,CAAC,OAAO,GAAE,gBAAqB,GAAG,aAAa,CAuF1E"}
1
+ {"version":3,"file":"useDraggable.d.ts","sourceRoot":"","sources":["../../src/core/useDraggable.ts"],"names":[],"mappings":"AAEA,OAAO,EAAkB,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3E,OAAO,EAAwB,KAAK,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAEzF,MAAM,WAAW,QAAQ;IACrB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACb;AAED,UAAU,MAAM;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC1B,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,eAAe,CAAC;CACnC;AAED,MAAM,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,QAAQ,EAAE;IACvD,KAAK,EAAE,UAAU,CAAC;IAClB,YAAY,EAAE,iBAAiB,CAAC;IAChC,aAAa,EAAE,kBAAkB,CAAC;CACrC,CAAC,GAAG;IACD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC;IACrB,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,QAAQ,KAAK,IAAI,CAAC;IACtC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,QAAQ,KAAK,IAAI,CAAC;IACpC,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,KAAK,OAAO,GAAG,SAAS,CAAC;CAC1E,CAAA;AAED,wBAAgB,YAAY,CAAC,OAAO,GAAE,gBAAqB,GAAG,aAAa,CAgF1E"}
@@ -1,12 +1,15 @@
1
- import { useState, useRef } from "react";
1
+ import { useRef } from "react";
2
2
  import { useEventCallback } from "./useEventCallback.js";
3
3
  import { useDragGesture } from "./useDragGesture.js";
4
4
  import { clamp } from "../utils/index.js";
5
+ import { useControllableState } from "./useControllableState.js";
5
6
  export function useDraggable(options = {}) {
6
- const { position: controlledPosition, onPositionChange, initialPosition = { x: 0, y: 0 }, bounds, gridSize, lockAxis, onDragStart, onDragEnd, updatePositionOnDragStart, shouldPreventDrag, } = options;
7
- const [uncontrolledPosition, setUncontrolledPosition] = useState(initialPosition);
8
- const isControlled = controlledPosition !== undefined && typeof onPositionChange === "function";
9
- const position = isControlled ? controlledPosition : uncontrolledPosition;
7
+ const { bounds, gridSize, lockAxis, onDragStart, onDragEnd, updatePositionOnDragStart, shouldPreventDrag, } = options;
8
+ const [position, setPosition] = useControllableState(options, {
9
+ value: "position",
10
+ defaultValue: "defaultPosition",
11
+ onValueChange: "onPositionChange",
12
+ });
10
13
  const dragStartPosRef = useRef({ x: 0, y: 0 });
11
14
  const clampPosition = (pos) => {
12
15
  if (!bounds)
@@ -32,12 +35,7 @@ export function useDraggable(options = {}) {
32
35
  else if (lockAxis === "y") {
33
36
  pos.x = position.x;
34
37
  }
35
- if (isControlled) {
36
- onPositionChange(pos);
37
- }
38
- else {
39
- setUncontrolledPosition(pos);
40
- }
38
+ setPosition(pos);
41
39
  });
42
40
  // Use our perfected, underlying drag gesture hook.
43
41
  const { isDragging, getDragHandleProps } = useDragGesture({
@@ -1 +1 @@
1
- {"version":3,"file":"useDraggable.js","sourceRoot":"","sources":["../../src/core/useDraggable.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useDraggable.js","sourceRoot":"","sources":["../../src/core/useDraggable.ts"],"names":[],"mappings":"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"}
@@ -1,25 +1,28 @@
1
- import { type DragHandleProps, type HitArea } from "./useDragGesture.js";
1
+ import { type DragGestureOptions, type DragHandleProps } from "./useDragGesture.js";
2
+ import { ControllableProps } from "./useControllableState.js";
2
3
  export interface Size {
3
4
  width: number;
4
5
  height: number;
5
6
  }
7
+ type HitAreaOption = DragGestureOptions["hitArea"];
6
8
  export interface ResizableInfo {
7
9
  size: Size;
8
10
  isResizing: boolean;
9
- getResizeHandleProps: (direction?: ResizeDirection, hitArea?: number | Partial<HitArea>) => DragHandleProps;
11
+ getResizeHandleProps: (direction?: ResizeDirection, hitArea?: HitAreaOption) => DragHandleProps;
10
12
  }
11
- export interface ResizableOptions {
12
- size?: Size;
13
- onSizeChange?: (size: Size) => void;
14
- initialSize?: Size;
15
- minWidth?: number;
16
- maxWidth?: number;
17
- minHeight?: number;
18
- maxHeight?: number;
13
+ export type ResizableOptions = ControllableProps<Size, {
14
+ value: "size";
15
+ defaultValue: "defaultSize";
16
+ onValueChange: "onSizeChange";
17
+ }> & {
18
+ maxSize?: Partial<Size>;
19
+ minSize?: Partial<Size>;
19
20
  axis?: "both" | "x" | "y";
20
21
  lockAspectRatio?: boolean;
21
22
  disabled?: boolean;
22
- }
23
+ hitArea?: HitAreaOption;
24
+ };
23
25
  export type ResizeDirection = "right" | "bottom" | "bottom-right";
24
26
  export declare function useResizable(options?: ResizableOptions): ResizableInfo;
27
+ export {};
25
28
  //# sourceMappingURL=useResizable.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useResizable.d.ts","sourceRoot":"","sources":["../../src/core/useResizable.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,KAAK,eAAe,EAAE,KAAK,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAIzF,MAAM,WAAW,IAAI;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,IAAI,CAAC;IACX,UAAU,EAAE,OAAO,CAAC;IACpB,oBAAoB,EAAE,CAAC,SAAS,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,eAAe,CAAC;CAC/G;AAED,MAAM,WAAW,gBAAgB;IAC7B,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACpC,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,QAAQ,GAAG,cAAc,CAAC;AAElE,wBAAgB,YAAY,CAAC,OAAO,GAAE,gBAAqB,GAAG,aAAa,CA0F1E"}
1
+ {"version":3,"file":"useResizable.d.ts","sourceRoot":"","sources":["../../src/core/useResizable.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,KAAK,kBAAkB,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGpG,OAAO,EAAwB,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAEpF,MAAM,WAAW,IAAI;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,KAAK,aAAa,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;AAEnD,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,IAAI,CAAC;IACX,UAAU,EAAE,OAAO,CAAC;IACpB,oBAAoB,EAAE,CAAC,SAAS,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,aAAa,KAAK,eAAe,CAAC;CACnG;AAED,MAAM,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,IAAI,EAAE;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,aAAa,CAAC;IAC5B,aAAa,EAAE,cAAc,CAAC;CACjC,CAAC,GAAG;IACD,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,aAAa,CAAC;CAC3B,CAAA;AAED,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,QAAQ,GAAG,cAAc,CAAC;AAElE,wBAAgB,YAAY,CAAC,OAAO,GAAE,gBAAqB,GAAG,aAAa,CAqG1E"}
@@ -1,78 +1,88 @@
1
- import { useState, useRef } from "react";
1
+ import { useRef } from "react";
2
2
  import { useDragGesture } from "./useDragGesture.js";
3
3
  import { useEventCallback } from "./useEventCallback.js";
4
4
  import { clamp } from "../utils/index.js";
5
+ import { useControllableState } from "./useControllableState.js";
5
6
  export function useResizable(options = {}) {
6
- const { size: controlledSize, onSizeChange, initialSize = { width: 100, height: 100 }, minWidth = 0, maxWidth = Infinity, minHeight = 0, maxHeight = Infinity, axis = "both", lockAspectRatio = false, disabled = false, } = options;
7
- const [uncontrolledSize, setUncontrolledSize] = useState(initialSize);
7
+ const { minSize, maxSize, axis = "both", lockAspectRatio = false, disabled = false, hitArea, } = options;
8
+ const minWidth = minSize?.width ?? 0;
9
+ const maxWidth = maxSize?.width ?? Infinity;
10
+ const minHeight = minSize?.height ?? 0;
11
+ const maxHeight = maxSize?.height ?? Infinity;
8
12
  const dragStartSizeRef = useRef({ width: 0, height: 0 });
9
- const isControlled = controlledSize !== undefined && typeof onSizeChange === "function";
10
- const size = isControlled ? controlledSize : uncontrolledSize;
13
+ const [size, setSize] = useControllableState(options, {
14
+ value: "size",
15
+ defaultValue: "defaultSize",
16
+ onValueChange: "onSizeChange",
17
+ });
11
18
  const updateSize = useEventCallback((newSize) => {
12
19
  const clampedSize = {
13
20
  width: clamp(newSize.width, minWidth, maxWidth),
14
21
  height: clamp(newSize.height, minHeight, maxHeight),
15
22
  };
16
- if (isControlled) {
17
- onSizeChange?.(clampedSize);
23
+ setSize(clampedSize);
24
+ });
25
+ const handleDrag = useEventCallback((direction, deltaX, deltaY) => {
26
+ if (disabled)
27
+ return;
28
+ let width = dragStartSizeRef.current.width;
29
+ let height = dragStartSizeRef.current.height;
30
+ if (direction === "right" || direction === "bottom-right") {
31
+ width += deltaX;
32
+ }
33
+ if (direction === "bottom" || direction === "bottom-right") {
34
+ height += deltaY;
35
+ }
36
+ // 轴向限制
37
+ if (axis === "x") {
38
+ height = dragStartSizeRef.current.height;
18
39
  }
19
- else {
20
- setUncontrolledSize(clampedSize);
40
+ else if (axis === "y") {
41
+ width = dragStartSizeRef.current.width;
21
42
  }
43
+ // 宽高比锁定
44
+ if (lockAspectRatio) {
45
+ const aspect = dragStartSizeRef.current.width / dragStartSizeRef.current.height;
46
+ if (direction === "right") {
47
+ height = width / aspect;
48
+ }
49
+ else if (direction === "bottom") {
50
+ width = height * aspect;
51
+ }
52
+ else {
53
+ const avgDelta = (deltaX + deltaY) / 2;
54
+ width = dragStartSizeRef.current.width + avgDelta;
55
+ height = width / aspect;
56
+ }
57
+ }
58
+ updateSize({ width, height });
59
+ });
60
+ const rightDrag = useDragGesture({
61
+ hitArea,
62
+ onDragStart: () => (dragStartSizeRef.current = size),
63
+ onDrag: ({ deltaX, deltaY }) => handleDrag("right", deltaX, deltaY),
64
+ });
65
+ const bottomDrag = useDragGesture({
66
+ hitArea,
67
+ onDragStart: () => (dragStartSizeRef.current = size),
68
+ onDrag: ({ deltaX, deltaY }) => handleDrag("bottom", deltaX, deltaY),
69
+ });
70
+ const bottomRightDrag = useDragGesture({
71
+ hitArea,
72
+ onDragStart: () => (dragStartSizeRef.current = size),
73
+ onDrag: ({ deltaX, deltaY }) => handleDrag("bottom-right", deltaX, deltaY),
22
74
  });
23
- function createResizeHandler(direction, hitArea) {
24
- return useDragGesture({
25
- hitArea,
26
- onDragStart: () => {
27
- if (disabled)
28
- return;
29
- dragStartSizeRef.current = size;
30
- },
31
- onDrag: ({ deltaX, deltaY }) => {
32
- if (disabled)
33
- return;
34
- let width = dragStartSizeRef.current.width;
35
- let height = dragStartSizeRef.current.height;
36
- if (direction === "right" || direction === "bottom-right") {
37
- width += deltaX;
38
- }
39
- if (direction === "bottom" || direction === "bottom-right") {
40
- height += deltaY;
41
- }
42
- if (axis === "x") {
43
- height = dragStartSizeRef.current.height;
44
- }
45
- else if (axis === "y") {
46
- width = dragStartSizeRef.current.width;
47
- }
48
- if (lockAspectRatio) {
49
- const aspect = dragStartSizeRef.current.width / dragStartSizeRef.current.height;
50
- if (direction === "right") {
51
- height = width / aspect;
52
- }
53
- else if (direction === "bottom") {
54
- width = height * aspect;
55
- }
56
- else {
57
- const avgDelta = (deltaX + deltaY) / 2;
58
- width = dragStartSizeRef.current.width + avgDelta;
59
- height = width / aspect;
60
- }
61
- }
62
- updateSize({ width, height });
63
- },
64
- });
65
- }
66
- const handlers = {
67
- right: (hitArea) => createResizeHandler("right", hitArea),
68
- bottom: (hitArea) => createResizeHandler("bottom", hitArea),
69
- "bottom-right": (hitArea) => createResizeHandler("bottom-right", hitArea),
75
+ const dragHandlers = {
76
+ "right": rightDrag,
77
+ "bottom": bottomDrag,
78
+ "bottom-right": bottomRightDrag,
70
79
  };
71
80
  return {
72
81
  size,
73
- isResizing: handlers.right().isDragging || handlers.bottom().isDragging || handlers["bottom-right"]().isDragging,
82
+ isResizing: rightDrag.isDragging || bottomDrag.isDragging || bottomRightDrag.isDragging,
74
83
  getResizeHandleProps: (direction = "bottom-right", hitArea) => {
75
- return handlers[direction](hitArea).getDragHandleProps();
84
+ const handler = dragHandlers[direction];
85
+ return handler.getDragHandleProps(hitArea);
76
86
  },
77
87
  };
78
88
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useResizable.js","sourceRoot":"","sources":["../../src/core/useResizable.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useResizable.js","sourceRoot":"","sources":["../../src/core/useResizable.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { type ControllableProps } from "./useControllableState.js";
1
2
  export interface SliderInfo {
2
3
  value: number;
3
4
  isDragging: boolean;
@@ -8,15 +9,18 @@ export interface SliderInfo {
8
9
  axis: "horizontal" | "vertical";
9
10
  direction: "ltr" | "rtl";
10
11
  }
11
- export interface SliderOptions {
12
- value?: number;
13
- onChange?: (value: number) => void;
14
- initialValue?: number;
12
+ type ControllableValueProps = ControllableProps<number, {
13
+ value: "value";
14
+ defaultValue: "defaultValue";
15
+ onValueChange: "onValueChange";
16
+ }>;
17
+ export type SliderOptions = ControllableValueProps & {
15
18
  min?: number;
16
19
  max?: number;
17
20
  step?: number;
18
21
  axis?: "horizontal" | "vertical";
19
22
  direction?: "ltr" | "rtl";
20
- }
23
+ };
21
24
  export declare function useSlider(options?: SliderOptions): SliderInfo;
25
+ export {};
22
26
  //# sourceMappingURL=useSlider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useSlider.d.ts","sourceRoot":"","sources":["../../src/core/useSlider.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,UAAU;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG;QAAE,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;KAAE,CAAC;IACtF,WAAW,EAAE,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IAC/C,IAAI,EAAE,YAAY,GAAG,UAAU,CAAC;IAChC,SAAS,EAAE,KAAK,GAAG,KAAK,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IACjC,SAAS,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;CAC7B;AAED,wBAAgB,SAAS,CAAC,OAAO,GAAE,aAAkB,GAAG,UAAU,CA0EjE"}
1
+ {"version":3,"file":"useSlider.d.ts","sourceRoot":"","sources":["../../src/core/useSlider.ts"],"names":[],"mappings":"AAIA,OAAO,EAAwB,KAAK,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAEzF,MAAM,WAAW,UAAU;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG;QAAE,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;KAAE,CAAC;IACtF,WAAW,EAAE,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IAC/C,IAAI,EAAE,YAAY,GAAG,UAAU,CAAC;IAChC,SAAS,EAAE,KAAK,GAAG,KAAK,CAAC;CAC5B;AAED,KAAK,sBAAsB,GAAG,iBAAiB,CAAC,MAAM,EAAE;IACpD,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,EAAE,cAAc,CAAC;IAC7B,aAAa,EAAE,eAAe,CAAC;CAClC,CAAC,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,sBAAsB,GAAG;IACjD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IACjC,SAAS,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;CAC7B,CAAA;AAED,wBAAgB,SAAS,CAAC,OAAO,GAAE,aAAkB,GAAG,UAAU,CAgEjE"}
@@ -1,23 +1,17 @@
1
- import { useState, useRef, useMemo } from "react";
1
+ import { useRef, useMemo } from "react";
2
2
  import { useDragGesture } from "./useDragGesture.js";
3
3
  import { useEventCallback } from "./useEventCallback.js";
4
4
  import { clamp } from "../utils/index.js";
5
+ import { useControllableState } from "./useControllableState.js";
5
6
  export function useSlider(options = {}) {
6
- const { value: controlledValue, onChange, initialValue = 0, min = 0, max = 100, step = 1, axis = "horizontal", direction = "ltr", } = options;
7
- const [uncontrolledValue, setUncontrolledValue] = useState(initialValue);
7
+ const { min = 0, max = 100, step = 1, axis = "horizontal", direction = "ltr", } = options;
8
+ const [value, setValue] = useControllableState(options);
8
9
  const trackRef = useRef(null);
9
- const isControlled = controlledValue !== undefined && typeof onChange === "function";
10
- const value = isControlled ? controlledValue : uncontrolledValue;
11
10
  const updateValue = useEventCallback((rawValue) => {
12
11
  const clamped = clamp(rawValue, min, max);
13
12
  const stepped = Math.round((clamped - min) / step) * step + min;
14
13
  const final = clamp(Number(stepped.toFixed(6)), min, max);
15
- if (isControlled) {
16
- onChange(final);
17
- }
18
- else {
19
- setUncontrolledValue(final);
20
- }
14
+ setValue(final);
21
15
  });
22
16
  const { isDragging, getDragHandleProps } = useDragGesture({
23
17
  onDrag: ({ deltaX, deltaY }) => {
@@ -1 +1 @@
1
- {"version":3,"file":"useSlider.js","sourceRoot":"","sources":["../../src/core/useSlider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useSlider.js","sourceRoot":"","sources":["../../src/core/useSlider.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -6,6 +6,7 @@ export * from "./core/useSlider.js";
6
6
  export * from "./core/useResizable.js";
7
7
  export * from "./core/useEventCallback.js";
8
8
  export * from "./core/useIsomorphicLayoutEffect.js";
9
+ export * from "./core/useControllableState.js";
9
10
  export * from "./core/useCustomScroller.js";
10
11
  export * from "./core/useKeepActiveItemIntoView.js";
11
12
  export * from "./core/useScrollIntoViewHelper.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC;AAChD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qCAAqC,CAAC;AAEpD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qCAAqC,CAAC;AACpD,cAAc,mCAAmC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC;AAChD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qCAAqC,CAAC;AACpD,cAAc,gCAAgC,CAAC;AAE/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qCAAqC,CAAC;AACpD,cAAc,mCAAmC,CAAC"}
package/dist/index.js CHANGED
@@ -6,6 +6,7 @@ export * from "./core/useSlider.js";
6
6
  export * from "./core/useResizable.js";
7
7
  export * from "./core/useEventCallback.js";
8
8
  export * from "./core/useIsomorphicLayoutEffect.js";
9
+ export * from "./core/useControllableState.js";
9
10
  export * from "./core/useCustomScroller.js";
10
11
  export * from "./core/useKeepActiveItemIntoView.js";
11
12
  export * from "./core/useScrollIntoViewHelper.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC;AAChD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qCAAqC,CAAC;AAEpD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qCAAqC,CAAC;AACpD,cAAc,mCAAmC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC;AAChD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qCAAqC,CAAC;AACpD,cAAc,gCAAgC,CAAC;AAE/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qCAAqC,CAAC;AACpD,cAAc,mCAAmC,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cites/react-hooks",
3
3
  "description": "React hooks",
4
- "version": "0.0.4",
4
+ "version": "0.0.5",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "clean": "rm -rf dist && rm -rf .cache",
@@ -46,6 +46,10 @@
46
46
  "./useScrollIntoViewHelper": {
47
47
  "default": "./dist/core/useScrollIntoViewHelper.js",
48
48
  "types": "./dist/core/useScrollIntoViewHelper.d.ts"
49
+ },
50
+ "./useControllableState": {
51
+ "default": "./dist/core/useControllableState.js",
52
+ "types": "./dist/core/useControllableState.d.ts"
49
53
  }
50
54
  },
51
55
  "keywords": [