Latest Threat Research:SANDWORM_MODE: Shai-Hulud-Style npm Worm Hijacks CI Workflows and Poisons AI Toolchains.Details
Socket
Book a DemoInstallSign in
Socket

@diceui/shared

Package Overview
Dependencies
Maintainers
1
Versions
13
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@diceui/shared - npm Package Compare versions

Comparing version
0.3.0
to
0.4.0
+22
-2
dist/index.d.mts
import * as React from 'react';
type InputValue = string[] | string;
interface BubbleInputProps<T = InputValue> extends Omit<React.InputHTMLAttributes<HTMLInputElement>, "value" | "checked"> {
interface BubbleInputProps<T = InputValue> extends Omit<React.InputHTMLAttributes<HTMLInputElement>, "value" | "checked" | "onReset"> {
value?: T;

@@ -9,2 +9,3 @@ checked?: boolean;

bubbles?: boolean;
onReset?: (value: T) => void;
}

@@ -252,3 +253,22 @@ declare function BubbleInput<T = InputValue>(props: BubbleInputProps<T>): React.JSX.Element;

interface UseFormResetParams<T> {
/**
* The form element to attach reset handler to.
*/
form?: HTMLFormElement | null;
/**
* The default value to reset to.
*/
defaultValue?: T;
/**
* Callback fired when form is reset.
*/
onReset?: (value: T) => void;
}
/**
* A hook to handle form reset events.
*/
declare function useFormReset<T>({ form, defaultValue, onReset, }: UseFormResetParams<T>): void;
/**
* @see https://github.com/radix-ui/primitives/blob/main/packages/react/id/src/id.tsx

@@ -387,2 +407,2 @@ */

export { type Align, BubbleInput, type CollectionContextValue, type CollectionItem, DATA_DISMISSABLE_LAYER_ATTR, DATA_DISMISSABLE_LAYER_STYLE_ATTR, DATA_ITEM_ATTR, DATA_VALUE_ATTR, type Direction, type Filter, type FocusOutsideEvent, type ForwardRefComponent, type Orientation, type PointerDownOutsideEvent, Presence, type PresenceProps, type ProgressState, type Side, VAR_ANCHOR_HEIGHT, VAR_ANCHOR_WIDTH, VAR_AVAILABLE_HEIGHT, VAR_AVAILABLE_WIDTH, VAR_TRANSFORM_ORIGIN, composeEventHandlers, composeRefs, createContext, findNextItem, forwardRef, getItem, getOwnerDocument, getOwnerWindow, getPlatform, getProgressState, getSortedItems, isFirefox, isIOS, isIPad, isIPhone, isMac, isMobileFirefox, isPinchZoomActive, isSafari, testPlatform, useAnchor, useCallbackRef, useCollection, useCollectionItem, useComposedRefs, useControllableState, useDirection, useDismiss, useEscapeKeydown, useEvent, useEventCallback, useFilter, useFormControl, useId, useIsomorphicLayoutEffect, useLayoutEffect, useMounted, usePrevious, useProgress, useScrollLock, useSize, useStateMachine, useTypeahead, wrapArray };
export { type Align, BubbleInput, type CollectionContextValue, type CollectionItem, DATA_DISMISSABLE_LAYER_ATTR, DATA_DISMISSABLE_LAYER_STYLE_ATTR, DATA_ITEM_ATTR, DATA_VALUE_ATTR, type Direction, type Filter, type FocusOutsideEvent, type ForwardRefComponent, type Orientation, type PointerDownOutsideEvent, Presence, type PresenceProps, type ProgressState, type Side, VAR_ANCHOR_HEIGHT, VAR_ANCHOR_WIDTH, VAR_AVAILABLE_HEIGHT, VAR_AVAILABLE_WIDTH, VAR_TRANSFORM_ORIGIN, composeEventHandlers, composeRefs, createContext, findNextItem, forwardRef, getItem, getOwnerDocument, getOwnerWindow, getPlatform, getProgressState, getSortedItems, isFirefox, isIOS, isIPad, isIPhone, isMac, isMobileFirefox, isPinchZoomActive, isSafari, testPlatform, useAnchor, useCallbackRef, useCollection, useCollectionItem, useComposedRefs, useControllableState, useDirection, useDismiss, useEscapeKeydown, useEvent, useEventCallback, useFilter, useFormControl, useFormReset, useId, useIsomorphicLayoutEffect, useLayoutEffect, useMounted, usePrevious, useProgress, useScrollLock, useSize, useStateMachine, useTypeahead, wrapArray };
import * as React from 'react';
type InputValue = string[] | string;
interface BubbleInputProps<T = InputValue> extends Omit<React.InputHTMLAttributes<HTMLInputElement>, "value" | "checked"> {
interface BubbleInputProps<T = InputValue> extends Omit<React.InputHTMLAttributes<HTMLInputElement>, "value" | "checked" | "onReset"> {
value?: T;

@@ -9,2 +9,3 @@ checked?: boolean;

bubbles?: boolean;
onReset?: (value: T) => void;
}

@@ -252,3 +253,22 @@ declare function BubbleInput<T = InputValue>(props: BubbleInputProps<T>): React.JSX.Element;

interface UseFormResetParams<T> {
/**
* The form element to attach reset handler to.
*/
form?: HTMLFormElement | null;
/**
* The default value to reset to.
*/
defaultValue?: T;
/**
* Callback fired when form is reset.
*/
onReset?: (value: T) => void;
}
/**
* A hook to handle form reset events.
*/
declare function useFormReset<T>({ form, defaultValue, onReset, }: UseFormResetParams<T>): void;
/**
* @see https://github.com/radix-ui/primitives/blob/main/packages/react/id/src/id.tsx

@@ -387,2 +407,2 @@ */

export { type Align, BubbleInput, type CollectionContextValue, type CollectionItem, DATA_DISMISSABLE_LAYER_ATTR, DATA_DISMISSABLE_LAYER_STYLE_ATTR, DATA_ITEM_ATTR, DATA_VALUE_ATTR, type Direction, type Filter, type FocusOutsideEvent, type ForwardRefComponent, type Orientation, type PointerDownOutsideEvent, Presence, type PresenceProps, type ProgressState, type Side, VAR_ANCHOR_HEIGHT, VAR_ANCHOR_WIDTH, VAR_AVAILABLE_HEIGHT, VAR_AVAILABLE_WIDTH, VAR_TRANSFORM_ORIGIN, composeEventHandlers, composeRefs, createContext, findNextItem, forwardRef, getItem, getOwnerDocument, getOwnerWindow, getPlatform, getProgressState, getSortedItems, isFirefox, isIOS, isIPad, isIPhone, isMac, isMobileFirefox, isPinchZoomActive, isSafari, testPlatform, useAnchor, useCallbackRef, useCollection, useCollectionItem, useComposedRefs, useControllableState, useDirection, useDismiss, useEscapeKeydown, useEvent, useEventCallback, useFilter, useFormControl, useId, useIsomorphicLayoutEffect, useLayoutEffect, useMounted, usePrevious, useProgress, useScrollLock, useSize, useStateMachine, useTypeahead, wrapArray };
export { type Align, BubbleInput, type CollectionContextValue, type CollectionItem, DATA_DISMISSABLE_LAYER_ATTR, DATA_DISMISSABLE_LAYER_STYLE_ATTR, DATA_ITEM_ATTR, DATA_VALUE_ATTR, type Direction, type Filter, type FocusOutsideEvent, type ForwardRefComponent, type Orientation, type PointerDownOutsideEvent, Presence, type PresenceProps, type ProgressState, type Side, VAR_ANCHOR_HEIGHT, VAR_ANCHOR_WIDTH, VAR_AVAILABLE_HEIGHT, VAR_AVAILABLE_WIDTH, VAR_TRANSFORM_ORIGIN, composeEventHandlers, composeRefs, createContext, findNextItem, forwardRef, getItem, getOwnerDocument, getOwnerWindow, getPlatform, getProgressState, getSortedItems, isFirefox, isIOS, isIPad, isIPhone, isMac, isMobileFirefox, isPinchZoomActive, isSafari, testPlatform, useAnchor, useCallbackRef, useCollection, useCollectionItem, useComposedRefs, useControllableState, useDirection, useDismiss, useEscapeKeydown, useEvent, useEventCallback, useFilter, useFormControl, useFormReset, useId, useIsomorphicLayoutEffect, useLayoutEffect, useMounted, usePrevious, useProgress, useScrollLock, useSize, useStateMachine, useTypeahead, wrapArray };
+99
-73
'use strict';
var React25 = require('react');
var React26 = require('react');

@@ -23,18 +23,18 @@ function _interopNamespace(e) {

var React25__namespace = /*#__PURE__*/_interopNamespace(React25);
var React26__namespace = /*#__PURE__*/_interopNamespace(React26);
// src/components/bubble-input.tsx
function useAnchor() {
const anchorRef = React25__namespace.useRef(null);
const [hasAnchor, setHasAnchor] = React25__namespace.useState(false);
const onAnchorChange = React25__namespace.useCallback((node) => {
const anchorRef = React26__namespace.useRef(null);
const [hasAnchor, setHasAnchor] = React26__namespace.useState(false);
const onAnchorChange = React26__namespace.useCallback((node) => {
anchorRef.current = node;
}, []);
const onHasAnchorChange = React25__namespace.useCallback((value) => {
const onHasAnchorChange = React26__namespace.useCallback((value) => {
setHasAnchor(value);
}, []);
const onAnchorAdd = React25__namespace.useCallback(() => {
const onAnchorAdd = React26__namespace.useCallback(() => {
setHasAnchor(true);
}, []);
const onAnchorRemove = React25__namespace.useCallback(() => {
const onAnchorRemove = React26__namespace.useCallback(() => {
setHasAnchor(false);

@@ -52,7 +52,7 @@ }, []);

function useCallbackRef(callback) {
const callbackRef = React25__namespace.useRef(callback);
React25__namespace.useEffect(() => {
const callbackRef = React26__namespace.useRef(callback);
React26__namespace.useEffect(() => {
callbackRef.current = callback;
});
return React25__namespace.useMemo(
return React26__namespace.useMemo(
() => (...args) => callbackRef.current?.(...args),

@@ -79,3 +79,3 @@ []

}) {
const getItems = React25__namespace.useCallback(() => {
const getItems = React26__namespace.useCallback(() => {
const collectionNode = ref.current;

@@ -93,3 +93,3 @@ if (!collectionNode) return [];

}, [ref, attr]);
const getEnabledItems = React25__namespace.useCallback(() => {
const getEnabledItems = React26__namespace.useCallback(() => {
const items = getItems();

@@ -103,3 +103,3 @@ return items.filter(

function useCollectionItem(ref, context, disabled, value, label) {
React25__namespace.useEffect(() => {
React26__namespace.useEffect(() => {
context.itemMap.set(ref, { ref: ref.current, label, value, disabled });

@@ -143,3 +143,3 @@ return () => {

const handleChange = useCallbackRef(onChange);
const setValue = React25__namespace.useCallback(
const setValue = React26__namespace.useCallback(
(nextValue) => {

@@ -162,7 +162,7 @@ if (isControlled) {

}) {
const uncontrolledState = React25__namespace.useState(defaultProp);
const uncontrolledState = React26__namespace.useState(defaultProp);
const [value] = uncontrolledState;
const prevValueRef = React25__namespace.useRef(value);
const prevValueRef = React26__namespace.useRef(value);
const handleChange = useCallbackRef(onChange);
React25__namespace.useEffect(() => {
React26__namespace.useEffect(() => {
if (prevValueRef.current !== value) {

@@ -175,5 +175,5 @@ handleChange(value);

}
var DirectionContext = React25__namespace.createContext(void 0);
var DirectionContext = React26__namespace.createContext(void 0);
function useDirection(dirProp) {
const contextDir = React25__namespace.useContext(DirectionContext);
const contextDir = React26__namespace.useContext(DirectionContext);
return dirProp ?? contextDir ?? "ltr";

@@ -196,3 +196,3 @@ }

const onEscapeKeyDownCallback = useCallbackRef(onEscapeKeyDown);
React25__namespace.useEffect(() => {
React26__namespace.useEffect(() => {
if (!enabled) return;

@@ -229,4 +229,4 @@ function onKeyDown(event) {

const ownerDocument = getOwnerDocument(refs[0]?.current) ?? document;
const shouldTriggerEvents = React25__namespace.useRef(true);
const touchStartY = React25__namespace.useRef(null);
const shouldTriggerEvents = React26__namespace.useRef(true);
const touchStartY = React26__namespace.useRef(null);
useEscapeKeydown({

@@ -241,3 +241,3 @@ ownerDocument,

});
React25__namespace.useEffect(() => {
React26__namespace.useEffect(() => {
if (!enabled) return;

@@ -362,7 +362,7 @@ function onKeyDown(event) {

function useEventCallback(callback) {
const callbackRef = React25__namespace.useRef(callback);
React25__namespace.useLayoutEffect(() => {
const callbackRef = React26__namespace.useRef(callback);
React26__namespace.useLayoutEffect(() => {
callbackRef.current = callback;
});
return React25__namespace.useCallback((event, ...args) => {
return React26__namespace.useCallback((event, ...args) => {
const fn = callbackRef.current;

@@ -373,7 +373,7 @@ return fn(event, ...args);

function useEvent(callback) {
const callbackRef = React25__namespace.useRef(callback);
React25__namespace.useLayoutEffect(() => {
const callbackRef = React26__namespace.useRef(callback);
React26__namespace.useLayoutEffect(() => {
callbackRef.current = callback;
});
return React25__namespace.useCallback((...args) => {
return React26__namespace.useCallback((...args) => {
const fn = callbackRef.current;

@@ -391,3 +391,3 @@ return fn(...args);

}
const startsWith = React25__namespace.useCallback(
const startsWith = React26__namespace.useCallback(
(string, substring) => {

@@ -406,3 +406,3 @@ if (substring.length === 0) {

);
const endsWith = React25__namespace.useCallback(
const endsWith = React26__namespace.useCallback(
(string, substring) => {

@@ -421,3 +421,3 @@ if (substring.length === 0) {

);
const contains = React25__namespace.useCallback(
const contains = React26__namespace.useCallback(
(string, substring) => {

@@ -441,3 +441,3 @@ if (substring.length === 0) {

);
const fuzzy = React25__namespace.useCallback(
const fuzzy = React26__namespace.useCallback(
(string, pattern) => {

@@ -463,3 +463,3 @@ if (pattern.length === 0) return true;

);
const memoizedFilter = React25__namespace.useMemo(
const memoizedFilter = React26__namespace.useMemo(
() => ({

@@ -476,14 +476,31 @@ startsWith,

function useFormControl(form) {
const [trigger, setTrigger] = React25__namespace.useState(null);
const [trigger, setTrigger] = React26__namespace.useState(null);
const isFormControl = trigger ? form || !!trigger.closest("form") : true;
return { isFormControl, trigger, onTriggerChange: setTrigger };
}
var useLayoutEffect3 = globalThis?.document ? React25__namespace.useLayoutEffect : () => {
function useFormReset({
form,
defaultValue,
onReset
}) {
const onResetCallback = useCallbackRef(onReset);
React26__namespace.useEffect(() => {
if (!form) return;
function onFormReset() {
if (defaultValue !== void 0) {
onResetCallback?.(defaultValue);
}
}
form.addEventListener("reset", onFormReset);
return () => form.removeEventListener("reset", onFormReset);
}, [form, defaultValue, onResetCallback]);
}
var useLayoutEffect3 = globalThis?.document ? React26__namespace.useLayoutEffect : () => {
};
// src/hooks/use-id.ts
var useReactId = React25__namespace[" useId ".trim().toString()] || (() => void 0);
var useReactId = React26__namespace[" useId ".trim().toString()] || (() => void 0);
var count = 0;
function useId(deterministicId) {
const [id, setId] = React25__namespace.useState(
const [id, setId] = React26__namespace.useState(
typeof useReactId === "function" ? useReactId() : void 0

@@ -496,5 +513,5 @@ );

}
var useIsomorphicLayoutEffect = typeof window !== "undefined" ? React25__namespace.useLayoutEffect : React25__namespace.useEffect;
var useIsomorphicLayoutEffect = typeof window !== "undefined" ? React26__namespace.useLayoutEffect : React26__namespace.useEffect;
function useMounted() {
const [mounted, setMounted] = React25__namespace.useState(false);
const [mounted, setMounted] = React26__namespace.useState(false);
useLayoutEffect3(() => {

@@ -506,4 +523,4 @@ setMounted(true);

function usePrevious(value) {
const ref = React25__namespace.useRef({ value, previous: value });
return React25__namespace.useMemo(() => {
const ref = React26__namespace.useRef({ value, previous: value });
return React26__namespace.useMemo(() => {
if (ref.current.value !== value) {

@@ -532,15 +549,15 @@ ref.current.previous = ref.current.value;

}) {
const max = React25__namespace.useMemo(
const max = React26__namespace.useMemo(
() => isValidMaxNumber(maxProp) ? maxProp : 100,
[maxProp]
);
const value = React25__namespace.useMemo(
const value = React26__namespace.useMemo(
() => isValidValueNumber(valueProp, max) ? valueProp : null,
[valueProp, max]
);
const state = React25__namespace.useMemo(
const state = React26__namespace.useMemo(
() => getProgressState(value, max),
[value, max]
);
const progressProps = React25__namespace.useMemo(
const progressProps = React26__namespace.useMemo(
() => ({

@@ -641,4 +658,4 @@ role: "progressbar",

} = {}) {
const scrollPositionRef = React25__namespace.useRef(0);
const originalStylesRef = React25__namespace.useRef({});
const scrollPositionRef = React26__namespace.useRef(0);
const originalStylesRef = React26__namespace.useRef({});
useIsomorphicLayoutEffect(() => {

@@ -727,3 +744,3 @@ if (!enabled) return;

function useSize(element) {
const [size, setSize] = React25__namespace.useState(void 0);
const [size, setSize] = React26__namespace.useState(void 0);
useLayoutEffect3(() => {

@@ -761,3 +778,3 @@ if (element) {

function useStateMachine(initialState, machine) {
return React25__namespace.useReducer(
return React26__namespace.useReducer(
(state, event) => {

@@ -795,5 +812,5 @@ const nextState = machine[state][event];

const onSearchChangeCallback = useCallbackRef(onSearchChange);
const searchRef = React25__namespace.useRef("");
const timerRef = React25__namespace.useRef(0);
const onTypeaheadSearch = React25__namespace.useCallback(
const searchRef = React26__namespace.useRef("");
const timerRef = React26__namespace.useRef(0);
const onTypeaheadSearch = React26__namespace.useCallback(
(key) => {

@@ -820,7 +837,7 @@ if (!enabled) return;

);
const onResetTypeahead = React25__namespace.useCallback(() => {
const onResetTypeahead = React26__namespace.useCallback(() => {
searchRef.current = "";
window.clearTimeout(timerRef.current);
}, []);
React25__namespace.useEffect(() => {
React26__namespace.useEffect(() => {
return () => window.clearTimeout(timerRef.current);

@@ -844,9 +861,10 @@ }, []);

type = "hidden",
onReset,
...inputProps
} = props;
const ref = React25__namespace.useRef(null);
const ref = React26__namespace.useRef(null);
const prevValue = usePrevious(type === "hidden" ? value : checked);
const controlSize = useSize(control);
const isCheckInput = type === "checkbox" || type === "radio" || type === "switch";
React25__namespace.useEffect(() => {
React26__namespace.useEffect(() => {
const input = ref.current;

@@ -869,3 +887,10 @@ if (!input) return;

}, [prevValue, value, checked, bubbles, isCheckInput]);
return /* @__PURE__ */ React25__namespace.createElement(
useFormReset({
form: ref.current?.form ?? null,
defaultValue: isCheckInput ? checked : value,
onReset: (resetValue) => {
onReset?.(resetValue);
}
});
return /* @__PURE__ */ React26__namespace.createElement(
"input",

@@ -891,15 +916,15 @@ {

function createContext3(rootComponentName, defaultValue) {
const Context = React25__namespace.createContext(defaultValue);
const Context = React26__namespace.createContext(defaultValue);
Context.displayName = rootComponentName;
function Provider(props) {
const { children, ...contextValue } = props;
const value = React25__namespace.useMemo(
const value = React26__namespace.useMemo(
() => contextValue,
Object.values(contextValue)
);
return /* @__PURE__ */ React25__namespace.createElement(Context.Provider, { value }, children);
return /* @__PURE__ */ React26__namespace.createElement(Context.Provider, { value }, children);
}
Provider.displayName = `${rootComponentName}Provider`;
function useContext3(consumerName, required) {
const context = React25__namespace.useContext(Context);
const context = React26__namespace.useContext(Context);
if (context) return context;

@@ -941,6 +966,6 @@ if (defaultValue !== void 0) return defaultValue;

function useComposedRefs(...refs) {
return React25__namespace.useCallback(composeRefs(...refs), refs);
return React26__namespace.useCallback(composeRefs(...refs), refs);
}
function forwardRef2(render) {
return React25__namespace.forwardRef(render);
return React26__namespace.forwardRef(render);
}

@@ -952,15 +977,15 @@

const presence = usePresence(present);
const child = typeof children === "function" ? children({ present: presence.isPresent }) : React25__namespace.Children.only(children);
const child = typeof children === "function" ? children({ present: presence.isPresent }) : React26__namespace.Children.only(children);
const ref = useComposedRefs(presence.ref, getElementRef(child));
const forceMount = typeof children === "function";
return forceMount || presence.isPresent ? React25__namespace.cloneElement(child, { ref }) : null;
return forceMount || presence.isPresent ? React26__namespace.cloneElement(child, { ref }) : null;
};
Presence.displayName = "Presence";
function usePresence(present) {
const [node, setNode] = React25__namespace.useState();
const stylesRef = React25__namespace.useRef(
const [node, setNode] = React26__namespace.useState();
const stylesRef = React26__namespace.useRef(
{}
);
const prevPresentRef = React25__namespace.useRef(present);
const prevAnimationNameRef = React25__namespace.useRef("none");
const prevPresentRef = React26__namespace.useRef(present);
const prevAnimationNameRef = React26__namespace.useRef("none");
const initialState = present ? "mounted" : "unmounted";

@@ -980,3 +1005,3 @@ const [state, send] = useStateMachine(initialState, {

});
React25__namespace.useEffect(() => {
React26__namespace.useEffect(() => {
const currentAnimationName = getAnimationName(stylesRef.current);

@@ -1047,3 +1072,3 @@ prevAnimationNameRef.current = state === "mounted" ? currentAnimationName : "none";

isPresent: ["mounted", "unmountSuspended"].includes(state),
ref: React25__namespace.useCallback((node2) => {
ref: React26__namespace.useCallback((node2) => {
if (node2) stylesRef.current = getComputedStyle(node2);

@@ -1115,2 +1140,3 @@ setNode(node2);

exports.useFormControl = useFormControl;
exports.useFormReset = useFormReset;
exports.useId = useId;

@@ -1117,0 +1143,0 @@ exports.useIsomorphicLayoutEffect = useIsomorphicLayoutEffect;

@@ -1,17 +0,17 @@

import * as React25 from 'react';
import * as React26 from 'react';
// src/components/bubble-input.tsx
function useAnchor() {
const anchorRef = React25.useRef(null);
const [hasAnchor, setHasAnchor] = React25.useState(false);
const onAnchorChange = React25.useCallback((node) => {
const anchorRef = React26.useRef(null);
const [hasAnchor, setHasAnchor] = React26.useState(false);
const onAnchorChange = React26.useCallback((node) => {
anchorRef.current = node;
}, []);
const onHasAnchorChange = React25.useCallback((value) => {
const onHasAnchorChange = React26.useCallback((value) => {
setHasAnchor(value);
}, []);
const onAnchorAdd = React25.useCallback(() => {
const onAnchorAdd = React26.useCallback(() => {
setHasAnchor(true);
}, []);
const onAnchorRemove = React25.useCallback(() => {
const onAnchorRemove = React26.useCallback(() => {
setHasAnchor(false);

@@ -29,7 +29,7 @@ }, []);

function useCallbackRef(callback) {
const callbackRef = React25.useRef(callback);
React25.useEffect(() => {
const callbackRef = React26.useRef(callback);
React26.useEffect(() => {
callbackRef.current = callback;
});
return React25.useMemo(
return React26.useMemo(
() => (...args) => callbackRef.current?.(...args),

@@ -56,3 +56,3 @@ []

}) {
const getItems = React25.useCallback(() => {
const getItems = React26.useCallback(() => {
const collectionNode = ref.current;

@@ -70,3 +70,3 @@ if (!collectionNode) return [];

}, [ref, attr]);
const getEnabledItems = React25.useCallback(() => {
const getEnabledItems = React26.useCallback(() => {
const items = getItems();

@@ -80,3 +80,3 @@ return items.filter(

function useCollectionItem(ref, context, disabled, value, label) {
React25.useEffect(() => {
React26.useEffect(() => {
context.itemMap.set(ref, { ref: ref.current, label, value, disabled });

@@ -120,3 +120,3 @@ return () => {

const handleChange = useCallbackRef(onChange);
const setValue = React25.useCallback(
const setValue = React26.useCallback(
(nextValue) => {

@@ -139,7 +139,7 @@ if (isControlled) {

}) {
const uncontrolledState = React25.useState(defaultProp);
const uncontrolledState = React26.useState(defaultProp);
const [value] = uncontrolledState;
const prevValueRef = React25.useRef(value);
const prevValueRef = React26.useRef(value);
const handleChange = useCallbackRef(onChange);
React25.useEffect(() => {
React26.useEffect(() => {
if (prevValueRef.current !== value) {

@@ -152,5 +152,5 @@ handleChange(value);

}
var DirectionContext = React25.createContext(void 0);
var DirectionContext = React26.createContext(void 0);
function useDirection(dirProp) {
const contextDir = React25.useContext(DirectionContext);
const contextDir = React26.useContext(DirectionContext);
return dirProp ?? contextDir ?? "ltr";

@@ -173,3 +173,3 @@ }

const onEscapeKeyDownCallback = useCallbackRef(onEscapeKeyDown);
React25.useEffect(() => {
React26.useEffect(() => {
if (!enabled) return;

@@ -206,4 +206,4 @@ function onKeyDown(event) {

const ownerDocument = getOwnerDocument(refs[0]?.current) ?? document;
const shouldTriggerEvents = React25.useRef(true);
const touchStartY = React25.useRef(null);
const shouldTriggerEvents = React26.useRef(true);
const touchStartY = React26.useRef(null);
useEscapeKeydown({

@@ -218,3 +218,3 @@ ownerDocument,

});
React25.useEffect(() => {
React26.useEffect(() => {
if (!enabled) return;

@@ -339,7 +339,7 @@ function onKeyDown(event) {

function useEventCallback(callback) {
const callbackRef = React25.useRef(callback);
React25.useLayoutEffect(() => {
const callbackRef = React26.useRef(callback);
React26.useLayoutEffect(() => {
callbackRef.current = callback;
});
return React25.useCallback((event, ...args) => {
return React26.useCallback((event, ...args) => {
const fn = callbackRef.current;

@@ -350,7 +350,7 @@ return fn(event, ...args);

function useEvent(callback) {
const callbackRef = React25.useRef(callback);
React25.useLayoutEffect(() => {
const callbackRef = React26.useRef(callback);
React26.useLayoutEffect(() => {
callbackRef.current = callback;
});
return React25.useCallback((...args) => {
return React26.useCallback((...args) => {
const fn = callbackRef.current;

@@ -368,3 +368,3 @@ return fn(...args);

}
const startsWith = React25.useCallback(
const startsWith = React26.useCallback(
(string, substring) => {

@@ -383,3 +383,3 @@ if (substring.length === 0) {

);
const endsWith = React25.useCallback(
const endsWith = React26.useCallback(
(string, substring) => {

@@ -398,3 +398,3 @@ if (substring.length === 0) {

);
const contains = React25.useCallback(
const contains = React26.useCallback(
(string, substring) => {

@@ -418,3 +418,3 @@ if (substring.length === 0) {

);
const fuzzy = React25.useCallback(
const fuzzy = React26.useCallback(
(string, pattern) => {

@@ -440,3 +440,3 @@ if (pattern.length === 0) return true;

);
const memoizedFilter = React25.useMemo(
const memoizedFilter = React26.useMemo(
() => ({

@@ -453,14 +453,31 @@ startsWith,

function useFormControl(form) {
const [trigger, setTrigger] = React25.useState(null);
const [trigger, setTrigger] = React26.useState(null);
const isFormControl = trigger ? form || !!trigger.closest("form") : true;
return { isFormControl, trigger, onTriggerChange: setTrigger };
}
var useLayoutEffect3 = globalThis?.document ? React25.useLayoutEffect : () => {
function useFormReset({
form,
defaultValue,
onReset
}) {
const onResetCallback = useCallbackRef(onReset);
React26.useEffect(() => {
if (!form) return;
function onFormReset() {
if (defaultValue !== void 0) {
onResetCallback?.(defaultValue);
}
}
form.addEventListener("reset", onFormReset);
return () => form.removeEventListener("reset", onFormReset);
}, [form, defaultValue, onResetCallback]);
}
var useLayoutEffect3 = globalThis?.document ? React26.useLayoutEffect : () => {
};
// src/hooks/use-id.ts
var useReactId = React25[" useId ".trim().toString()] || (() => void 0);
var useReactId = React26[" useId ".trim().toString()] || (() => void 0);
var count = 0;
function useId(deterministicId) {
const [id, setId] = React25.useState(
const [id, setId] = React26.useState(
typeof useReactId === "function" ? useReactId() : void 0

@@ -473,5 +490,5 @@ );

}
var useIsomorphicLayoutEffect = typeof window !== "undefined" ? React25.useLayoutEffect : React25.useEffect;
var useIsomorphicLayoutEffect = typeof window !== "undefined" ? React26.useLayoutEffect : React26.useEffect;
function useMounted() {
const [mounted, setMounted] = React25.useState(false);
const [mounted, setMounted] = React26.useState(false);
useLayoutEffect3(() => {

@@ -483,4 +500,4 @@ setMounted(true);

function usePrevious(value) {
const ref = React25.useRef({ value, previous: value });
return React25.useMemo(() => {
const ref = React26.useRef({ value, previous: value });
return React26.useMemo(() => {
if (ref.current.value !== value) {

@@ -509,15 +526,15 @@ ref.current.previous = ref.current.value;

}) {
const max = React25.useMemo(
const max = React26.useMemo(
() => isValidMaxNumber(maxProp) ? maxProp : 100,
[maxProp]
);
const value = React25.useMemo(
const value = React26.useMemo(
() => isValidValueNumber(valueProp, max) ? valueProp : null,
[valueProp, max]
);
const state = React25.useMemo(
const state = React26.useMemo(
() => getProgressState(value, max),
[value, max]
);
const progressProps = React25.useMemo(
const progressProps = React26.useMemo(
() => ({

@@ -618,4 +635,4 @@ role: "progressbar",

} = {}) {
const scrollPositionRef = React25.useRef(0);
const originalStylesRef = React25.useRef({});
const scrollPositionRef = React26.useRef(0);
const originalStylesRef = React26.useRef({});
useIsomorphicLayoutEffect(() => {

@@ -704,3 +721,3 @@ if (!enabled) return;

function useSize(element) {
const [size, setSize] = React25.useState(void 0);
const [size, setSize] = React26.useState(void 0);
useLayoutEffect3(() => {

@@ -738,3 +755,3 @@ if (element) {

function useStateMachine(initialState, machine) {
return React25.useReducer(
return React26.useReducer(
(state, event) => {

@@ -772,5 +789,5 @@ const nextState = machine[state][event];

const onSearchChangeCallback = useCallbackRef(onSearchChange);
const searchRef = React25.useRef("");
const timerRef = React25.useRef(0);
const onTypeaheadSearch = React25.useCallback(
const searchRef = React26.useRef("");
const timerRef = React26.useRef(0);
const onTypeaheadSearch = React26.useCallback(
(key) => {

@@ -797,7 +814,7 @@ if (!enabled) return;

);
const onResetTypeahead = React25.useCallback(() => {
const onResetTypeahead = React26.useCallback(() => {
searchRef.current = "";
window.clearTimeout(timerRef.current);
}, []);
React25.useEffect(() => {
React26.useEffect(() => {
return () => window.clearTimeout(timerRef.current);

@@ -821,9 +838,10 @@ }, []);

type = "hidden",
onReset,
...inputProps
} = props;
const ref = React25.useRef(null);
const ref = React26.useRef(null);
const prevValue = usePrevious(type === "hidden" ? value : checked);
const controlSize = useSize(control);
const isCheckInput = type === "checkbox" || type === "radio" || type === "switch";
React25.useEffect(() => {
React26.useEffect(() => {
const input = ref.current;

@@ -846,3 +864,10 @@ if (!input) return;

}, [prevValue, value, checked, bubbles, isCheckInput]);
return /* @__PURE__ */ React25.createElement(
useFormReset({
form: ref.current?.form ?? null,
defaultValue: isCheckInput ? checked : value,
onReset: (resetValue) => {
onReset?.(resetValue);
}
});
return /* @__PURE__ */ React26.createElement(
"input",

@@ -868,15 +893,15 @@ {

function createContext3(rootComponentName, defaultValue) {
const Context = React25.createContext(defaultValue);
const Context = React26.createContext(defaultValue);
Context.displayName = rootComponentName;
function Provider(props) {
const { children, ...contextValue } = props;
const value = React25.useMemo(
const value = React26.useMemo(
() => contextValue,
Object.values(contextValue)
);
return /* @__PURE__ */ React25.createElement(Context.Provider, { value }, children);
return /* @__PURE__ */ React26.createElement(Context.Provider, { value }, children);
}
Provider.displayName = `${rootComponentName}Provider`;
function useContext3(consumerName, required) {
const context = React25.useContext(Context);
const context = React26.useContext(Context);
if (context) return context;

@@ -918,6 +943,6 @@ if (defaultValue !== void 0) return defaultValue;

function useComposedRefs(...refs) {
return React25.useCallback(composeRefs(...refs), refs);
return React26.useCallback(composeRefs(...refs), refs);
}
function forwardRef2(render) {
return React25.forwardRef(render);
return React26.forwardRef(render);
}

@@ -929,15 +954,15 @@

const presence = usePresence(present);
const child = typeof children === "function" ? children({ present: presence.isPresent }) : React25.Children.only(children);
const child = typeof children === "function" ? children({ present: presence.isPresent }) : React26.Children.only(children);
const ref = useComposedRefs(presence.ref, getElementRef(child));
const forceMount = typeof children === "function";
return forceMount || presence.isPresent ? React25.cloneElement(child, { ref }) : null;
return forceMount || presence.isPresent ? React26.cloneElement(child, { ref }) : null;
};
Presence.displayName = "Presence";
function usePresence(present) {
const [node, setNode] = React25.useState();
const stylesRef = React25.useRef(
const [node, setNode] = React26.useState();
const stylesRef = React26.useRef(
{}
);
const prevPresentRef = React25.useRef(present);
const prevAnimationNameRef = React25.useRef("none");
const prevPresentRef = React26.useRef(present);
const prevAnimationNameRef = React26.useRef("none");
const initialState = present ? "mounted" : "unmounted";

@@ -957,3 +982,3 @@ const [state, send] = useStateMachine(initialState, {

});
React25.useEffect(() => {
React26.useEffect(() => {
const currentAnimationName = getAnimationName(stylesRef.current);

@@ -1024,3 +1049,3 @@ prevAnimationNameRef.current = state === "mounted" ? currentAnimationName : "none";

isPresent: ["mounted", "unmountSuspended"].includes(state),
ref: React25.useCallback((node2) => {
ref: React26.useCallback((node2) => {
if (node2) stylesRef.current = getComputedStyle(node2);

@@ -1048,2 +1073,2 @@ setNode(node2);

export { BubbleInput, DATA_DISMISSABLE_LAYER_ATTR, DATA_DISMISSABLE_LAYER_STYLE_ATTR, DATA_ITEM_ATTR, DATA_VALUE_ATTR, Presence, VAR_ANCHOR_HEIGHT, VAR_ANCHOR_WIDTH, VAR_AVAILABLE_HEIGHT, VAR_AVAILABLE_WIDTH, VAR_TRANSFORM_ORIGIN, composeEventHandlers, composeRefs, createContext3 as createContext, findNextItem, forwardRef2 as forwardRef, getItem, getOwnerDocument, getOwnerWindow, getPlatform, getProgressState, getSortedItems, isFirefox, isIOS, isIPad, isIPhone, isMac, isMobileFirefox, isPinchZoomActive, isSafari, testPlatform, useAnchor, useCallbackRef, useCollection, useCollectionItem, useComposedRefs, useControllableState, useDirection, useDismiss, useEscapeKeydown, useEvent, useEventCallback, useFilter, useFormControl, useId, useIsomorphicLayoutEffect, useLayoutEffect3 as useLayoutEffect, useMounted, usePrevious, useProgress, useScrollLock, useSize, useStateMachine, useTypeahead, wrapArray };
export { BubbleInput, DATA_DISMISSABLE_LAYER_ATTR, DATA_DISMISSABLE_LAYER_STYLE_ATTR, DATA_ITEM_ATTR, DATA_VALUE_ATTR, Presence, VAR_ANCHOR_HEIGHT, VAR_ANCHOR_WIDTH, VAR_AVAILABLE_HEIGHT, VAR_AVAILABLE_WIDTH, VAR_TRANSFORM_ORIGIN, composeEventHandlers, composeRefs, createContext3 as createContext, findNextItem, forwardRef2 as forwardRef, getItem, getOwnerDocument, getOwnerWindow, getPlatform, getProgressState, getSortedItems, isFirefox, isIOS, isIPad, isIPhone, isMac, isMobileFirefox, isPinchZoomActive, isSafari, testPlatform, useAnchor, useCallbackRef, useCollection, useCollectionItem, useComposedRefs, useControllableState, useDirection, useDismiss, useEscapeKeydown, useEvent, useEventCallback, useFilter, useFormControl, useFormReset, useId, useIsomorphicLayoutEffect, useLayoutEffect3 as useLayoutEffect, useMounted, usePrevious, useProgress, useScrollLock, useSize, useStateMachine, useTypeahead, wrapArray };
{
"name": "@diceui/shared",
"version": "0.3.0",
"version": "0.4.0",
"publishConfig": {

@@ -5,0 +5,0 @@ "access": "public"