@v-c/util 1.0.8 → 1.0.9

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,19 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ let vue = require("vue");
3
+ function useControlledState(state, emit, updateKey = "value", defaultState, props) {
4
+ const mergedState = (0, vue.shallowRef)(defaultState ?? state.value);
5
+ function setState(nextState) {
6
+ if (emit) emit(`update:${updateKey}`, nextState);
7
+ if (props && props?.[`onUpdate:${updateKey}`]) props?.[`onUpdate:${updateKey}`](nextState);
8
+ (0, vue.nextTick)(() => {
9
+ if (state.value === void 0 && state.value !== nextState) mergedState.value = nextState;
10
+ });
11
+ }
12
+ (0, vue.watch)(() => (0, vue.toValue)(state), () => {
13
+ const prevState = (0, vue.toValue)(mergedState);
14
+ const nextState = (0, vue.toValue)(state);
15
+ if (prevState !== nextState) mergedState.value = nextState;
16
+ });
17
+ return [state, setState];
18
+ }
19
+ exports.useControlledState = useControlledState;
@@ -0,0 +1,2 @@
1
+ import { Ref } from 'vue';
2
+ export declare function useControlledState<T = any>(state: Ref<T | undefined>, emit?: any, updateKey?: string, defaultState?: T, props?: any): readonly [Ref<T, T>, (nextState: T) => void];
@@ -0,0 +1,18 @@
1
+ import { nextTick, shallowRef, toValue, watch } from "vue";
2
+ function useControlledState(state, emit, updateKey = "value", defaultState, props) {
3
+ const mergedState = shallowRef(defaultState ?? state.value);
4
+ function setState(nextState) {
5
+ if (emit) emit(`update:${updateKey}`, nextState);
6
+ if (props && props?.[`onUpdate:${updateKey}`]) props?.[`onUpdate:${updateKey}`](nextState);
7
+ nextTick(() => {
8
+ if (state.value === void 0 && state.value !== nextState) mergedState.value = nextState;
9
+ });
10
+ }
11
+ watch(() => toValue(state), () => {
12
+ const prevState = toValue(mergedState);
13
+ const nextState = toValue(state);
14
+ if (prevState !== nextState) mergedState.value = nextState;
15
+ });
16
+ return [state, setState];
17
+ }
18
+ export { useControlledState };
package/dist/index.cjs CHANGED
@@ -4,6 +4,7 @@ const require_raf = require("./raf.cjs");
4
4
  const require_omit = require("./omit.cjs");
5
5
  const require_RenderComponent = require("./RenderComponent.cjs");
6
6
  const require_classnames = require("./classnames.cjs");
7
+ const require_useControlledState = require("./hooks/useControlledState.cjs");
7
8
  const require_useId = require("./hooks/useId.cjs");
8
9
  const require_useMergedState = require("./hooks/useMergedState.cjs");
9
10
  const require_get = require("./utils/get.cjs");
@@ -17,6 +18,7 @@ exports.get = require_get.default;
17
18
  exports.omit = require_omit.default;
18
19
  exports.raf = require_raf.default;
19
20
  exports.set = require_set.default;
21
+ exports.useControlledState = require_useControlledState.useControlledState;
20
22
  exports.useId = require_useId.default;
21
23
  exports.useMergedState = require_useMergedState.default;
22
24
  exports.warning = require_warning.default;
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export { default as classNames, clsx } from './classnames';
2
+ export { useControlledState } from './hooks/useControlledState';
2
3
  export { default as useId } from './hooks/useId';
3
4
  export { default as useMergedState } from './hooks/useMergedState';
4
5
  export { default as KeyCode } from './KeyCode';
package/dist/index.js CHANGED
@@ -3,9 +3,10 @@ import raf_default from "./raf.js";
3
3
  import omit from "./omit.js";
4
4
  import RenderComponent_default from "./RenderComponent.js";
5
5
  import classNames, { clsx } from "./classnames.js";
6
+ import { useControlledState } from "./hooks/useControlledState.js";
6
7
  import useId_default from "./hooks/useId.js";
7
8
  import useMergedState from "./hooks/useMergedState.js";
8
9
  import get from "./utils/get.js";
9
10
  import set from "./utils/set.js";
10
11
  import warning_default from "./warning.js";
11
- export { KeyCode_default as KeyCode, RenderComponent_default as RenderComponent, classNames, clsx, get, omit, raf_default as raf, set, useId_default as useId, useMergedState, warning_default as warning };
12
+ export { KeyCode_default as KeyCode, RenderComponent_default as RenderComponent, classNames, clsx, get, omit, raf_default as raf, set, useControlledState, useId_default as useId, useMergedState, warning_default as warning };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@v-c/util",
3
3
  "type": "module",
4
- "version": "1.0.8",
4
+ "version": "1.0.9",
5
5
  "description": "Vue3 components utils",
6
6
  "publishConfig": {
7
7
  "access": "public"