@yamada-ui/react 2.2.4-dev-20260706063021 → 2.2.4-dev-20260714071608

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.
@@ -1 +1 @@
1
- {"version":3,"file":"store.cjs","names":[],"sources":["../../../src/utils/store.ts"],"sourcesContent":["\"use client\"\n\nimport type { Path, Value } from \"@yamada-ui/utils\"\nimport {\n getMemoizedObject,\n isArray,\n isObject,\n isUndefined,\n runIfFn,\n toArray,\n} from \"@yamada-ui/utils\"\nimport { useSyncExternalStore } from \"react\"\n\nconst DEFAULT_IDENTIFIER = \"default\"\n\ninterface Subscribe {\n (listener: () => void): () => void\n}\n\ninterface Store<Y> {\n queue: Map<string, (() => void)[]>\n ref: { current: Y }\n get: () => Y\n set: (nextState: ((prevState: Y) => Y) | Y, key?: string | string[]) => void\n update: (key?: string | string[]) => void\n key?: string\n}\n\ntype IndexOrPath<Y> = Y extends any[]\n ? number\n : Y extends object\n ? Path<Y>\n : undefined\n\ntype ReturnArrayValue<Y extends any[], D> = D extends number\n ? undefined | Y[D]\n : Y\n\ntype ReturnObjectValue<Y extends object, D> = D extends string ? Value<Y, D> : Y\n\ntype ReturnValue<Y, D> = Y extends any[]\n ? ReturnArrayValue<Y, D>\n : Y extends object\n ? ReturnObjectValue<Y, D>\n : Y\n\ninterface UseStore<Y> {\n <D extends IndexOrPath<Y>>(path?: D, key?: string): ReturnValue<Y, D>\n}\n\ninterface CreateMethod<Y, M extends Function> {\n (store: Store<Y>): M\n}\n\ntype Methods<Y, M extends CustomMethods<Y>> = Omit<\n Store<Y>,\n \"key\" | \"update\"\n> & {\n [D in keyof M]: ReturnType<M[D]>\n} & { update: () => void }\n\ninterface CustomMethods<Y> {\n [key: string]: CreateMethod<Y, (...args: any[]) => Promise<void> | void>\n}\n\ninterface CreateStoreOptions<Y> {\n proxyHandler?: ProxyHandler<{ current: Y }>\n subscribe?: CreateMethod<Y, Subscribe>\n}\n\nexport function createStore<Y, M extends CustomMethods<Y>>(\n initialState: (() => Y) | Y,\n additionalMethods?: M,\n options: CreateStoreOptions<Y> = {},\n): [UseStore<Y>, Methods<Y, M>] {\n const queue = new Map<string, (() => void)[]>()\n const ref = new Proxy(\n { current: runIfFn(initialState) },\n { ...options.proxyHandler },\n )\n\n function get() {\n return ref.current\n }\n\n function executeQueue(key: string) {\n const listeners = queue.get(key) ?? []\n\n if (!listeners.length)\n console.warn(`createStore: ${key} is not subscribed.`)\n\n listeners.forEach((listener) => listener())\n }\n\n function update(key?: string | string[]) {\n if (!isUndefined(key)) toArray(key).forEach(executeQueue)\n\n executeQueue(DEFAULT_IDENTIFIER)\n }\n\n function set(nextState: ((prevState: Y) => Y) | Y, key?: string | string[]) {\n ref.current = runIfFn(nextState, ref.current)\n\n update(key)\n }\n\n const methods = { ref, get, queue, set, update }\n\n function useStore<D extends IndexOrPath<Y>>(path?: D, key?: string) {\n const customSubscribe = options.subscribe?.({\n key,\n ...methods,\n })\n\n const subscribe = function (listener: () => void) {\n if (key) {\n const listeners = queue.get(key) ?? []\n\n if (listeners.length)\n console.warn(`createStore: ${key} is already subscribed.`)\n\n queue.set(key, [listener])\n } else {\n const listeners = queue.get(DEFAULT_IDENTIFIER) ?? []\n\n queue.set(DEFAULT_IDENTIFIER, [...listeners, listener])\n }\n\n return function () {\n if (key) {\n queue.delete(key)\n } else {\n const listeners = queue.get(DEFAULT_IDENTIFIER) ?? []\n\n queue.set(\n DEFAULT_IDENTIFIER,\n listeners.filter((fn) => fn !== listener),\n )\n }\n }\n }\n\n function getSnapshot<H extends ReturnValue<Y, D>>(): H {\n if (!isUndefined(path))\n if (isObject(ref.current)) return getMemoizedObject(ref.current, path)\n else if (isArray(ref.current))\n return ref.current[path as number] as unknown as H\n\n return ref.current as unknown as H\n }\n\n return useSyncExternalStore(\n customSubscribe ?? subscribe,\n getSnapshot,\n getSnapshot,\n )\n }\n\n const customMethods = Object.fromEntries(\n Object.entries(additionalMethods ?? {}).map(([key, value]) => [\n key,\n value(methods),\n ]),\n ) as { [D in keyof M]: ReturnType<M[D]> }\n\n return [useStore, { ...methods, ...customMethods }]\n}\n"],"mappings":";;;;AAaA,MAAM,qBAAqB;AAyD3B,SAAgB,YACd,cACA,mBACA,UAAiC,CAAC,GACJ;CAC9B,MAAM,wBAAQ,IAAI,IAA4B;CAC9C,MAAM,MAAM,IAAI,MACd,EAAE,UAAA,GAAA,iBAAA,QAAA,CAAiB,YAAY,EAAE,GACjC,EAAE,GAAG,QAAQ,aAAa,CAC5B;CAEA,SAAS,MAAM;EACb,OAAO,IAAI;CACb;CAEA,SAAS,aAAa,KAAa;EACjC,MAAM,YAAY,MAAM,IAAI,GAAG,KAAK,CAAC;EAErC,IAAI,CAAC,UAAU,QACb,QAAQ,KAAK,gBAAgB,IAAI,oBAAoB;EAEvD,UAAU,SAAS,aAAa,SAAS,CAAC;CAC5C;CAEA,SAAS,OAAO,KAAyB;EACvC,IAAI,EAAA,GAAA,iBAAA,YAAA,CAAa,GAAG,GAAG,CAAA,GAAA,iBAAA,QAAA,CAAQ,GAAG,CAAC,CAAC,QAAQ,YAAY;EAExD,aAAa,kBAAkB;CACjC;CAEA,SAAS,IAAI,WAAsC,KAAyB;EAC1E,IAAI,WAAA,GAAA,iBAAA,QAAA,CAAkB,WAAW,IAAI,OAAO;EAE5C,OAAO,GAAG;CACZ;CAEA,MAAM,UAAU;EAAE;EAAK;EAAK;EAAO;EAAK;CAAO;CAE/C,SAAS,SAAmC,MAAU,KAAc;EAClE,MAAM,kBAAkB,QAAQ,YAAY;GAC1C;GACA,GAAG;EACL,CAAC;EAED,MAAM,YAAY,SAAU,UAAsB;GAChD,IAAI,KAAK;IAGP,KAFkB,MAAM,IAAI,GAAG,KAAK,CAAC,EAAA,CAEvB,QACZ,QAAQ,KAAK,gBAAgB,IAAI,wBAAwB;IAE3D,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC;GAC3B,OAAO;IACL,MAAM,YAAY,MAAM,IAAI,kBAAkB,KAAK,CAAC;IAEpD,MAAM,IAAI,oBAAoB,CAAC,GAAG,WAAW,QAAQ,CAAC;GACxD;GAEA,OAAO,WAAY;IACjB,IAAI,KACF,MAAM,OAAO,GAAG;SACX;KACL,MAAM,YAAY,MAAM,IAAI,kBAAkB,KAAK,CAAC;KAEpD,MAAM,IACJ,oBACA,UAAU,QAAQ,OAAO,OAAO,QAAQ,CAC1C;IACF;GACF;EACF;EAEA,SAAS,cAA8C;GACrD,IAAI,EAAA,GAAA,iBAAA,YAAA,CAAa,IAAI;uCACN,IAAI,OAAO,GAAG,QAAA,GAAA,iBAAA,kBAAA,CAAyB,IAAI,SAAS,IAAI;SAChE,KAAA,GAAA,iBAAA,QAAA,CAAY,IAAI,OAAO,GAC1B,OAAO,IAAI,QAAQ;GAAA;GAEvB,OAAO,IAAI;EACb;EAEA,QAAA,GAAA,MAAA,qBAAA,CACE,mBAAmB,WACnB,aACA,WACF;CACF;CAEA,MAAM,gBAAgB,OAAO,YAC3B,OAAO,QAAQ,qBAAqB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,WAAW,CAC5D,KACA,MAAM,OAAO,CACf,CAAC,CACH;CAEA,OAAO,CAAC,UAAU;EAAE,GAAG;EAAS,GAAG;CAAc,CAAC;AACpD"}
1
+ {"version":3,"file":"store.cjs","names":[],"sources":["../../../src/utils/store.ts"],"sourcesContent":["\"use client\"\n\nimport type { Path, Value } from \"@yamada-ui/utils\"\nimport {\n getMemoizedObject,\n isArray,\n isObject,\n isUndefined,\n runIfFn,\n toArray,\n} from \"@yamada-ui/utils\"\nimport { useSyncExternalStore } from \"react\"\n\nconst DEFAULT_IDENTIFIER = \"default\"\n\ninterface Subscribe {\n (listener: () => void): () => void\n}\n\ninterface Store<Y> {\n queue: Map<string, (() => void)[]>\n ref: { current: Y }\n get: () => Y\n set: (nextState: ((prevState: Y) => Y) | Y, key?: string | string[]) => void\n update: (key?: string | string[]) => void\n key?: string\n}\n\ntype IndexOrPath<Y> = Y extends any[]\n ? number\n : Y extends object\n ? Path<Y>\n : undefined\n\ntype ReturnArrayValue<Y extends any[], D> = D extends number\n ? undefined | Y[D]\n : Y\n\ntype ReturnObjectValue<Y extends object, D> = D extends string ? Value<Y, D> : Y\n\ntype ReturnValue<Y, D> = Y extends any[]\n ? ReturnArrayValue<Y, D>\n : Y extends object\n ? ReturnObjectValue<Y, D>\n : Y\n\ninterface UseStore<Y> {\n <D extends IndexOrPath<Y>>(path?: D, key?: string): ReturnValue<Y, D>\n}\n\ninterface CreateMethod<Y, M extends Function> {\n (store: Store<Y>): M\n}\n\ntype Methods<Y, M extends CustomMethods<Y>> = Omit<\n Store<Y>,\n \"key\" | \"update\"\n> & {\n [D in keyof M]: ReturnType<M[D]>\n} & { update: () => void }\n\ninterface CustomMethods<Y> {\n [key: string]: CreateMethod<Y, (...args: any[]) => Promise<void> | void>\n}\n\ninterface CreateStoreOptions<Y> {\n proxyHandler?: ProxyHandler<{ current: Y }>\n subscribe?: CreateMethod<Y, Subscribe>\n}\n\nexport function createStore<Y, M extends CustomMethods<Y>>(\n initialState: (() => Y) | Y,\n additionalMethods?: M,\n options: CreateStoreOptions<Y> = {},\n): [UseStore<Y>, Methods<Y, M>] {\n const queue = new Map<string, (() => void)[]>()\n const ref = new Proxy(\n { current: runIfFn(initialState) },\n { ...options.proxyHandler },\n )\n\n function get() {\n return ref.current\n }\n\n function executeQueue(key: string) {\n const listeners = queue.get(key) ?? []\n\n if (!listeners.length)\n console.warn(`createStore: ${key} is not subscribed.`)\n\n listeners.forEach((listener) => listener())\n }\n\n function update(key?: string | string[]) {\n if (!isUndefined(key)) toArray(key).forEach(executeQueue)\n\n executeQueue(DEFAULT_IDENTIFIER)\n }\n\n function set(nextState: ((prevState: Y) => Y) | Y, key?: string | string[]) {\n ref.current = runIfFn(nextState, ref.current)\n\n update(key)\n }\n\n const methods = { ref, get, queue, set, update }\n\n function useStore<D extends IndexOrPath<Y>>(path?: D, key?: string) {\n const customSubscribe = options.subscribe?.({\n key,\n ...methods,\n })\n\n const subscribe = function (listener: () => void) {\n if (key) {\n const listeners = queue.get(key) ?? []\n\n if (listeners.length)\n console.warn(`createStore: ${key} is already subscribed.`)\n\n queue.set(key, [listener])\n } else {\n const listeners = queue.get(DEFAULT_IDENTIFIER) ?? []\n\n queue.set(DEFAULT_IDENTIFIER, [...listeners, listener])\n }\n\n return function () {\n if (key) {\n queue.delete(key)\n } else {\n const listeners = queue.get(DEFAULT_IDENTIFIER) ?? []\n\n queue.set(\n DEFAULT_IDENTIFIER,\n listeners.filter((fn) => fn !== listener),\n )\n }\n }\n }\n\n function getSnapshot<H extends ReturnValue<Y, D>>(): H {\n if (!isUndefined(path))\n if (isObject(ref.current)) return getMemoizedObject(ref.current, path)\n else if (isArray(ref.current)) return ref.current[path as number]\n\n return ref.current as unknown as H\n }\n\n return useSyncExternalStore(\n customSubscribe ?? subscribe,\n getSnapshot,\n getSnapshot,\n )\n }\n\n const customMethods = Object.fromEntries(\n Object.entries(additionalMethods ?? {}).map(([key, value]) => [\n key,\n value(methods),\n ]),\n ) as { [D in keyof M]: ReturnType<M[D]> }\n\n return [useStore, { ...methods, ...customMethods }]\n}\n"],"mappings":";;;;AAaA,MAAM,qBAAqB;AAyD3B,SAAgB,YACd,cACA,mBACA,UAAiC,CAAC,GACJ;CAC9B,MAAM,wBAAQ,IAAI,IAA4B;CAC9C,MAAM,MAAM,IAAI,MACd,EAAE,UAAA,GAAA,iBAAA,QAAA,CAAiB,YAAY,EAAE,GACjC,EAAE,GAAG,QAAQ,aAAa,CAC5B;CAEA,SAAS,MAAM;EACb,OAAO,IAAI;CACb;CAEA,SAAS,aAAa,KAAa;EACjC,MAAM,YAAY,MAAM,IAAI,GAAG,KAAK,CAAC;EAErC,IAAI,CAAC,UAAU,QACb,QAAQ,KAAK,gBAAgB,IAAI,oBAAoB;EAEvD,UAAU,SAAS,aAAa,SAAS,CAAC;CAC5C;CAEA,SAAS,OAAO,KAAyB;EACvC,IAAI,EAAA,GAAA,iBAAA,YAAA,CAAa,GAAG,GAAG,CAAA,GAAA,iBAAA,QAAA,CAAQ,GAAG,CAAC,CAAC,QAAQ,YAAY;EAExD,aAAa,kBAAkB;CACjC;CAEA,SAAS,IAAI,WAAsC,KAAyB;EAC1E,IAAI,WAAA,GAAA,iBAAA,QAAA,CAAkB,WAAW,IAAI,OAAO;EAE5C,OAAO,GAAG;CACZ;CAEA,MAAM,UAAU;EAAE;EAAK;EAAK;EAAO;EAAK;CAAO;CAE/C,SAAS,SAAmC,MAAU,KAAc;EAClE,MAAM,kBAAkB,QAAQ,YAAY;GAC1C;GACA,GAAG;EACL,CAAC;EAED,MAAM,YAAY,SAAU,UAAsB;GAChD,IAAI,KAAK;IAGP,KAFkB,MAAM,IAAI,GAAG,KAAK,CAAC,EAAA,CAEvB,QACZ,QAAQ,KAAK,gBAAgB,IAAI,wBAAwB;IAE3D,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC;GAC3B,OAAO;IACL,MAAM,YAAY,MAAM,IAAI,kBAAkB,KAAK,CAAC;IAEpD,MAAM,IAAI,oBAAoB,CAAC,GAAG,WAAW,QAAQ,CAAC;GACxD;GAEA,OAAO,WAAY;IACjB,IAAI,KACF,MAAM,OAAO,GAAG;SACX;KACL,MAAM,YAAY,MAAM,IAAI,kBAAkB,KAAK,CAAC;KAEpD,MAAM,IACJ,oBACA,UAAU,QAAQ,OAAO,OAAO,QAAQ,CAC1C;IACF;GACF;EACF;EAEA,SAAS,cAA8C;GACrD,IAAI,EAAA,GAAA,iBAAA,YAAA,CAAa,IAAI;uCACN,IAAI,OAAO,GAAG,QAAA,GAAA,iBAAA,kBAAA,CAAyB,IAAI,SAAS,IAAI;SAChE,KAAA,GAAA,iBAAA,QAAA,CAAY,IAAI,OAAO,GAAG,OAAO,IAAI,QAAQ;GAAA;GAEpD,OAAO,IAAI;EACb;EAEA,QAAA,GAAA,MAAA,qBAAA,CACE,mBAAmB,WACnB,aACA,WACF;CACF;CAEA,MAAM,gBAAgB,OAAO,YAC3B,OAAO,QAAQ,qBAAqB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,WAAW,CAC5D,KACA,MAAM,OAAO,CACf,CAAC,CACH;CAEA,OAAO,CAAC,UAAU;EAAE,GAAG;EAAS,GAAG;CAAc,CAAC;AACpD"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-date-picker.js","names":[],"sources":["../../../../src/components/date-picker/use-date-picker.tsx"],"sourcesContent":["\"use client\"\n\nimport type {\n ChangeEvent,\n FocusEvent,\n KeyboardEvent,\n MouseEvent,\n ReactNode,\n} from \"react\"\nimport type { HTMLProps, HTMLRefAttributes, PropGetter } from \"../../core\"\nimport type { UseComboboxProps } from \"../../hooks/use-combobox\"\nimport type { Dict } from \"../../utils\"\nimport type {\n CalendarFormat,\n MaybeDateValue,\n UseCalendarProps,\n} from \"../calendar\"\nimport type { FieldProps } from \"../field\"\nimport dayjs from \"dayjs\"\nimport {\n cloneElement,\n isValidElement,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\"\nimport { useEnvironment } from \"../../core\"\nimport { useCombobox } from \"../../hooks/use-combobox\"\nimport { useControllableState } from \"../../hooks/use-controllable-state\"\nimport { useI18n } from \"../../providers/i18n-provider\"\nimport {\n ariaAttr,\n cast,\n contains,\n dataAttr,\n focusTransfer,\n handlerAll,\n isActiveElement,\n isArray,\n isComposing,\n isDate,\n isNumber,\n isObject,\n mergeRefs,\n runIfFn,\n runKeyAction,\n useUpdateEffect,\n visuallyHiddenAttributes,\n} from \"../../utils\"\nimport {\n DEFAULT_MAX_DATE,\n DEFAULT_MIN_DATE,\n getAdjustedMonth,\n isAfterDate,\n isBeforeDate,\n isIncludeDates,\n updateMaybeDateValue,\n useCalendarProps,\n} from \"../calendar\"\nimport { useFieldProps } from \"../field\"\nimport { useDateTimeFormat } from \"../format\"\n\nexport interface DatePickerFormat extends CalendarFormat {\n input?: Intl.DateTimeFormatOptions | null\n}\n\ntype InputAlign = \"end\" | \"start\"\ntype MaybeInputValue<Range extends boolean = false> = Range extends true\n ? { end?: string; start?: string }\n : string | undefined\n\ninterface DatePickerRenderProps {\n count: number\n date: Date\n focused: boolean\n index: number\n separator: string\n value: string\n onClear: () => void\n max?: number\n}\n\nexport interface DatePickerRender {\n (props: DatePickerRenderProps): ReactNode\n}\n\nconst defaultRender: DatePickerRender = ({\n count,\n focused,\n index,\n max,\n separator,\n value,\n}) => {\n const last = count - 1 === index\n\n return (\n <span style={{ marginInlineEnd: \"var(--gap)\" }}>\n {value}\n {((!isNumber(max) || count < max) && focused) || !last ? separator : null}\n </span>\n )\n}\n\nexport interface UseDatePickerProps<\n Multiple extends boolean = false,\n Range extends boolean = false,\n>\n extends\n Omit<UseCalendarProps<Multiple, Range>, \"format\" | \"ref\">,\n Omit<\n UseComboboxProps,\n \"defaultValue\" | \"initialFocusValue\" | \"onChange\" | \"ref\" | \"value\"\n >,\n HTMLRefAttributes<\"input\">,\n FieldProps {\n /**\n * If `true`, allows input.\n *\n * @default true\n */\n allowInput?: boolean\n /**\n * If `true`, allows input of dates beyond the `minDate` and `maxDate` restrictions.\n *\n * @default true\n */\n allowInputBeyond?: boolean\n /**\n * If `true`, the date picker will be closed when the input value changes.\n *\n * @default false\n */\n closeOnChange?: ((ev: ChangeEvent<HTMLInputElement>) => boolean) | boolean\n /**\n * The initial value of the input.\n */\n defaultInputValue?: MaybeInputValue<Range>\n /**\n * If `true`, the input will be focused when the clear icon is clicked.\n *\n * @default true\n */\n focusOnClear?: boolean\n /**\n * The format used for conversion.\n * Check the docs to see the format of possible modifiers you can pass.\n *\n * @see https://day.js.org/docs/en/display/format#list-of-localized-formats\n */\n format?: DatePickerFormat\n /**\n * The `id` attribute of the input element.\n */\n id?: string\n /**\n * The value of the input.\n */\n inputValue?: MaybeInputValue<Range>\n /**\n * The `name` attribute of the input element.\n */\n name?: string\n /**\n * If `true`, the date picker will be opened when the input value changes.\n *\n * @default true\n */\n openOnChange?: ((ev: ChangeEvent<HTMLInputElement>) => boolean) | boolean\n /**\n * If `true`, the date picker will be opened when the input is focused.\n *\n * @default true\n */\n openOnFocus?: boolean\n /**\n * The pattern used to check the input element.\n */\n pattern?: RegExp\n /**\n * The placeholder for date picker.\n */\n placeholder?: string\n /**\n * The visual separator between each value.\n *\n * @default ','\n */\n separator?: string\n /**\n * The callback invoked when input value state changes.\n */\n onInputChange?: (value: MaybeInputValue<Range>) => void\n /**\n * Function that converts the input value to Date type.\n */\n parseDate?: (value: string) => Date | undefined\n /**\n * The function to render the selected date.\n */\n render?: (props: DatePickerRenderProps) => ReactNode\n}\n\nexport const useDatePicker = <\n Multiple extends boolean = false,\n Range extends boolean = false,\n>({\n maxDate = DEFAULT_MAX_DATE,\n minDate = DEFAULT_MIN_DATE,\n ...props\n}: UseDatePickerProps<Multiple, Range> = {}) => {\n if (dayjs(minDate).isAfter(dayjs(maxDate))) maxDate = minDate\n\n const { getDocument } = useEnvironment()\n const { locale: defaultLocale, t } = useI18n(\"datePicker\")\n const {\n props: {\n id,\n ref,\n name,\n allowInput = true,\n allowInputBeyond = false,\n closeOnChange = false,\n multiple = false,\n closeOnSelect = !multiple,\n defaultInputValue,\n defaultMonth = new Date(),\n range = false,\n defaultValue = (range\n ? { end: undefined, start: undefined }\n : multiple\n ? []\n : undefined) as MaybeDateValue<Multiple, Range>,\n disabled,\n focusOnClear = true,\n format,\n inputValue: inputValueProp,\n locale = defaultLocale,\n max,\n month: monthProp,\n openOnChange = true,\n openOnClick = true,\n openOnFocus = true,\n parseDate,\n pattern,\n placeholder: placeholderProp,\n placement = \"end-start\",\n readOnly,\n render = defaultRender,\n required,\n separator = range ? \"-\" : \",\",\n value: valueProp,\n onChange: onChangeProp,\n onChangeMonth: onChangeMonthProp,\n onInputChange: onInputChangeProp,\n ...computedProps\n },\n ariaProps,\n dataProps,\n eventProps,\n } = useFieldProps(props)\n const dateTimeFormat = useDateTimeFormat({ locale })\n const { calendarFormat, inputFormat } = useMemo(() => {\n const { input: inputFormat, ...calendarFormat } = format ?? {}\n const defaultInputFormat: Intl.DateTimeFormatOptions = {\n day: \"numeric\",\n month: \"long\",\n year: \"numeric\",\n }\n\n return {\n calendarFormat,\n inputFormat:\n inputFormat !== null ? (inputFormat ?? defaultInputFormat) : undefined,\n }\n }, [format])\n const [calendarProps, rest] = useCalendarProps<Multiple, Range>(computedProps)\n const { excludeDate } = calendarProps\n const fieldRef = useRef<HTMLDivElement>(null)\n const contentRef = useRef<HTMLDivElement>(null)\n const startInputRef = useRef<HTMLInputElement>(null)\n const endInputRef = useRef<HTMLInputElement>(null)\n const focusByClickRef = useRef<boolean>(false)\n const [focused, setFocused] = useState(false)\n const [value, setValue] = useControllableState({\n defaultValue: defaultValue as MaybeDateValue<Multiple, Range>,\n value: valueProp,\n onChange: onChangeProp,\n })\n const [month, setMonth] = useControllableState({\n defaultValue: () => {\n let value = defaultMonth\n\n if (dayjs(minDate).isAfter(dayjs(defaultMonth)))\n value = dayjs(minDate).set(\"date\", 1).toDate()\n\n if (valueProp) value = getAdjustedMonth(valueProp, value)\n else if (defaultValue) value = getAdjustedMonth(defaultValue, value)\n\n return value\n },\n value: monthProp,\n onChange: onChangeMonthProp,\n })\n const stringToDate = useCallback(\n (value: string, start: Date = minDate, end: Date = maxDate) => {\n let date = parseDate?.(value)\n\n if (!date && dayjs(value).isValid())\n date = dayjs(value).locale(locale).toDate()\n\n if (date == null) return undefined\n if (excludeDate?.(date)) return undefined\n\n if (!allowInputBeyond) {\n if (isBeforeDate(date, start)) date = start\n if (isAfterDate(date, end)) date = end\n }\n\n return date\n },\n [allowInputBeyond, excludeDate, locale, maxDate, minDate, parseDate],\n )\n const dateToString = useCallback(\n (date?: Date) => {\n if (date == null) return \"\"\n\n return dateTimeFormat(date, inputFormat)\n },\n [dateTimeFormat, inputFormat],\n )\n const [inputValue, setInputValue] = useControllableState({\n defaultValue: () => {\n if (defaultInputValue)\n if (isObject(defaultInputValue)) {\n if (dayjs(defaultInputValue.start).isValid())\n defaultInputValue.start = dateTimeFormat(\n dayjs(defaultInputValue.start).toDate(),\n inputFormat,\n )\n\n if (dayjs(defaultInputValue.end).isValid())\n defaultInputValue.end = dateTimeFormat(\n dayjs(defaultInputValue.end).toDate(),\n inputFormat,\n )\n\n return defaultInputValue\n } else {\n if (dayjs(defaultInputValue).isValid())\n return dateTimeFormat(\n dayjs(defaultInputValue).toDate(),\n inputFormat,\n ) as MaybeInputValue<Range>\n else return defaultInputValue as MaybeInputValue<Range>\n }\n else if (isDate(value))\n return dateToString(value) as MaybeInputValue<Range>\n else if (isObject(value) && !isArray(value))\n return {\n end: dateToString(value.end),\n start: dateToString(value.start),\n } as MaybeInputValue<Range>\n else return \"\" as MaybeInputValue<Range>\n },\n value: inputValueProp,\n onChange: onInputChangeProp,\n })\n const {\n interactive,\n open,\n getContentProps: getComboboxContentProps,\n getTriggerProps,\n popoverProps,\n onClose,\n onOpen,\n } = useCombobox({\n disabled,\n matchWidth: false,\n openOnClick: false,\n openOnEnter: !allowInput,\n openOnSpace: !allowInput,\n placement,\n readOnly,\n transferFocus: false,\n ...ariaProps,\n ...dataProps,\n ...eventProps,\n ...rest,\n })\n const children = useMemo<ReactNode>(() => {\n if (!isArray(value)) return null\n\n const count = value.length\n\n return value.map((date, index) => {\n const value = dateToString(date)\n\n const onClear = (ev?: MouseEvent<HTMLElement>) => {\n ev?.preventDefault()\n ev?.stopPropagation()\n\n setValue(\n (prev) =>\n updateMaybeDateValue(date, max)(prev) as MaybeDateValue<\n Multiple,\n Range\n >,\n )\n }\n\n const component = render({\n count,\n date,\n focused,\n index,\n max,\n separator,\n value,\n onClear,\n })\n\n if (isValidElement<Dict>(component))\n return cloneElement(component, { ...component.props, key: index })\n else return component\n })\n }, [dateToString, focused, max, render, separator, setValue, value])\n const { endPlaceholder, startPlaceholder } = useMemo(() => {\n if (range) {\n const startPlaceholder =\n placeholderProp ?? dateTimeFormat(new Date(), inputFormat)\n const endPlaceholder =\n placeholderProp ??\n dateTimeFormat(dayjs().add(1, \"day\").toDate(), inputFormat)\n\n return { endPlaceholder, startPlaceholder }\n } else {\n const placeholder =\n placeholderProp ?? dateTimeFormat(new Date(), inputFormat)\n\n return { endPlaceholder: placeholder, startPlaceholder: placeholder }\n }\n }, [dateTimeFormat, inputFormat, placeholderProp, range])\n\n const onChange = useCallback(\n (value: MaybeDateValue<Multiple, Range>) => {\n setValue(value)\n\n if (isArray(value)) setInputValue(\"\" as MaybeInputValue<Range>)\n else if (isObject(value) && !isDate(value))\n setInputValue({\n end: dateToString(value.end),\n start: dateToString(value.start),\n } as MaybeInputValue<Range>)\n else setInputValue(dateToString(value) as MaybeInputValue<Range>)\n\n if (!closeOnSelect) return\n\n if (isObject(value) && !isArray(value) && !isDate(value)) {\n if (value.end && value.start) onClose()\n } else {\n onClose()\n }\n },\n [setValue, closeOnSelect, setInputValue, dateToString, onClose],\n )\n\n const onInputChange = useCallback(\n (ev: ChangeEvent<HTMLInputElement>) => {\n if (!allowInput) return\n if (isArray(value) && value.length === max) return\n\n if (runIfFn(closeOnChange, ev)) onClose()\n else if (runIfFn(openOnChange, ev)) onOpen()\n\n let inputValue = ev.target.value\n\n if (pattern) inputValue = inputValue.replace(pattern, \"\")\n\n if (isArray(value)) {\n const date = stringToDate(inputValue)\n\n setInputValue(inputValue as MaybeInputValue<Range>)\n\n if (date) setMonth(dayjs(date).set(\"date\", 1).toDate())\n } else if (isObject(value) && !isDate(value)) {\n const align = contains(endInputRef.current, ev.target) ? \"end\" : \"start\"\n const minDate =\n value.start && align === \"end\"\n ? dayjs(value.start).add(1, \"day\").toDate()\n : undefined\n const maxDate =\n value.end && align === \"start\"\n ? dayjs(value.end).subtract(1, \"day\").toDate()\n : undefined\n const date = stringToDate(inputValue, minDate, maxDate)\n\n setInputValue((prev) =>\n isObject(prev)\n ? Object.assign({}, prev, { [align]: inputValue })\n : prev,\n )\n setValue((prev) =>\n isObject(prev) && !isDate(prev) ? { ...prev, [align]: date } : prev,\n )\n } else {\n const date = stringToDate(inputValue)\n\n setInputValue(inputValue as MaybeInputValue<Range>)\n setValue(date as MaybeDateValue<Multiple, Range>)\n }\n },\n [\n allowInput,\n closeOnChange,\n max,\n onClose,\n onOpen,\n openOnChange,\n pattern,\n setInputValue,\n setMonth,\n setValue,\n stringToDate,\n value,\n ],\n )\n\n const onKeyDown = useCallback(\n (ev: KeyboardEvent<HTMLInputElement>) => {\n if (disabled || isComposing(ev)) return\n\n const inputValue = cast<HTMLInputElement>(ev.target).value\n\n runKeyAction(\n ev,\n {\n Backspace: (ev) => {\n if (isArray(value)) {\n if (inputValue.length) return\n\n ev.preventDefault()\n\n setValue((prev) =>\n isArray(prev)\n ? (prev.slice(0, -1) as MaybeDateValue<Multiple, Range>)\n : prev,\n )\n } else if (isObject(value) && !isDate(value)) {\n if (inputValue.length) return\n if (!contains(endInputRef.current, ev.target)) return\n\n ev.preventDefault()\n\n setInputValue({ end: \"\", start: \"\" } as MaybeInputValue<Range>)\n setValue({ end: undefined, start: undefined } as MaybeDateValue<\n Multiple,\n Range\n >)\n\n startInputRef.current?.focus()\n }\n },\n Enter: (ev) => {\n if (!open || !inputValue.length) return\n\n if (isObject(value) && !isArray(value) && !isDate(value)) {\n const align = contains(endInputRef.current, ev.target)\n ? \"end\"\n : \"start\"\n const minDate =\n value.start && align === \"end\"\n ? dayjs(value.start).add(1, \"day\").toDate()\n : undefined\n const maxDate =\n value.end && align === \"start\"\n ? dayjs(value.end).subtract(1, \"day\").toDate()\n : undefined\n const date = stringToDate(inputValue, minDate, maxDate)\n\n if (!date) return\n\n ev.preventDefault()\n\n setInputValue((prev) =>\n isObject(prev)\n ? Object.assign({}, prev, { [align]: dateToString(date) })\n : prev,\n )\n setValue((prev) =>\n isObject(prev) && !isDate(prev)\n ? { ...prev, [align]: date }\n : prev,\n )\n\n if (align === \"start\") endInputRef.current?.focus()\n } else {\n const date = stringToDate(inputValue)\n\n if (!date) return\n\n ev.preventDefault()\n\n if (isArray(value)) {\n setInputValue(\"\" as MaybeInputValue<Range>)\n\n setValue((prev) =>\n isArray(prev) &&\n !isIncludeDates(date, prev) &&\n (!isNumber(max) || prev.length < max)\n ? ([...prev, date] as MaybeDateValue<Multiple, Range>)\n : prev,\n )\n } else {\n setInputValue(dateToString(date) as MaybeInputValue<Range>)\n setValue(date as MaybeDateValue<Multiple, Range>)\n }\n }\n },\n },\n { preventDefault: false },\n )\n },\n [\n dateToString,\n disabled,\n max,\n open,\n setInputValue,\n setValue,\n stringToDate,\n value,\n ],\n )\n\n const onClick = useCallback(\n (ev: MouseEvent<HTMLDivElement>) => {\n if (!interactive) return\n\n focusByClickRef.current = true\n\n if (allowInput)\n if (isObject(value) && !isArray(value) && !isDate(value))\n if (\n startInputRef.current &&\n contains(startInputRef.current, ev.target)\n ) {\n if (!isActiveElement(startInputRef.current, getDocument()!))\n ev.defaultPrevented = true\n\n startInputRef.current.focus()\n } else if (\n endInputRef.current &&\n contains(endInputRef.current, ev.target)\n ) {\n if (!isActiveElement(endInputRef.current, getDocument()!))\n ev.defaultPrevented = true\n\n endInputRef.current.focus()\n } else {\n startInputRef.current?.focus()\n }\n else startInputRef.current?.focus()\n\n if (openOnClick) onOpen()\n },\n [allowInput, interactive, onOpen, openOnClick, value, getDocument],\n )\n\n const onMouseDown = useCallback(\n (ev: MouseEvent<HTMLDivElement | HTMLInputElement>) => {\n if (!openOnFocus) return\n\n ev.preventDefault()\n ev.stopPropagation()\n },\n [openOnFocus],\n )\n\n const onFieldFocus = useCallback(() => {\n if (allowInput) return\n\n if (openOnFocus) onOpen()\n\n focusByClickRef.current = false\n }, [allowInput, onOpen, openOnFocus])\n\n const onInputFocus = useCallback(\n (ev: FocusEvent<HTMLInputElement>) => {\n ev.preventDefault()\n ev.stopPropagation()\n\n setFocused(true)\n\n if (openOnFocus && !focusByClickRef.current) onOpen()\n\n focusByClickRef.current = false\n },\n [onOpen, openOnFocus],\n )\n\n const onBlur = useCallback(\n (ev: FocusEvent<HTMLInputElement>) => {\n setFocused(false)\n\n if (\n contains(fieldRef.current, ev.relatedTarget) ||\n contains(contentRef.current, ev.relatedTarget)\n )\n ev.preventDefault()\n else if (isArray(value)) setInputValue(\"\" as MaybeInputValue<Range>)\n else if (isObject(value) && !isDate(value))\n setInputValue((prev) =>\n isObject(prev)\n ? ({\n end: dateToString(value.end),\n start: dateToString(value.start),\n } as MaybeInputValue<Range>)\n : prev,\n )\n else setInputValue(dateToString(value) as MaybeInputValue<Range>)\n },\n [dateToString, setInputValue, value],\n )\n\n const onClear = useCallback(() => {\n if (!interactive) return\n\n setValue((prev) => {\n if (isDate(prev)) return undefined as MaybeDateValue<Multiple, Range>\n else if (isArray(prev))\n return [] as unknown as MaybeDateValue<Multiple, Range>\n else if (isObject(prev))\n return { end: undefined, start: undefined } as MaybeDateValue<\n Multiple,\n Range\n >\n else return prev\n })\n\n setInputValue(\n (range ? { end: \"\", start: \"\" } : \"\") as MaybeInputValue<Range>,\n )\n\n if (focusOnClear)\n if (allowInput) startInputRef.current?.focus()\n else fieldRef.current?.focus()\n }, [allowInput, focusOnClear, interactive, range, setInputValue, setValue])\n\n useEffect(() => {\n if (!open) return\n\n return focusTransfer(\n contentRef.current,\n allowInput ? startInputRef.current : fieldRef.current,\n )\n }, [allowInput, open])\n\n useUpdateEffect(() => {\n setMonth((prev) => getAdjustedMonth(value, prev))\n }, [value, range])\n\n useUpdateEffect(() => {\n if (isArray(valueProp)) return\n\n if (isObject(valueProp) && !isDate(valueProp))\n setInputValue({\n end: dateToString(valueProp.end),\n start: dateToString(valueProp.start),\n } as MaybeInputValue<Range>)\n else setInputValue(dateToString(valueProp) as MaybeInputValue<Range>)\n }, [valueProp])\n\n const getRootProps: PropGetter = useCallback(\n (props) => ({\n \"data-range\": dataAttr(range),\n ...dataProps,\n ...props,\n }),\n [dataProps, range],\n )\n\n const getFieldProps: PropGetter = useCallback(\n ({ ref, ...props } = {}) =>\n getTriggerProps({\n ref: mergeRefs(ref, fieldRef),\n \"aria-haspopup\": \"dialog\",\n tabIndex: !allowInput ? 0 : -1,\n ...props,\n onClick: handlerAll(props.onClick, onClick),\n onFocus: handlerAll(props.onFocus, onFieldFocus),\n onMouseDown: handlerAll(props.onMouseDown, onMouseDown),\n }),\n\n [allowInput, getTriggerProps, onClick, onFieldFocus, onMouseDown],\n )\n\n const getInputProps: PropGetter<\"input\", { align?: InputAlign }> =\n useCallback(\n ({ align = \"start\", ...props } = {}) => {\n const inputProps: HTMLProps<\"input\"> = {\n style: {\n ...(!allowInput ? { pointerEvents: \"none\" } : {}),\n ...props.style,\n },\n autoComplete: \"off\",\n disabled,\n readOnly,\n required,\n tabIndex: allowInput ? 0 : -1,\n ...dataProps,\n ...props,\n onBlur: handlerAll(props.onBlur, onBlur),\n onChange: handlerAll(props.onChange, onInputChange),\n onFocus: handlerAll(props.onFocus, onInputFocus),\n onKeyDown: handlerAll(props.onKeyDown, onKeyDown),\n onMouseDown: handlerAll(props.onMouseDown, onMouseDown),\n }\n\n if (isObject(inputValue)) {\n if (align === \"start\") {\n inputProps.ref = mergeRefs(props.ref, ref, startInputRef)\n inputProps.value = inputValue.start\n inputProps.placeholder = startPlaceholder\n } else {\n inputProps.ref = mergeRefs(props.ref, ref, endInputRef)\n inputProps.value = inputValue.end\n inputProps.placeholder = endPlaceholder\n }\n\n if (!inputValue.start && align === \"start\") {\n inputProps.id = id\n inputProps.name = name\n }\n\n if (!!inputValue.start && align === \"end\") {\n inputProps.id = id\n inputProps.name = name\n }\n } else {\n inputProps.ref = mergeRefs(props.ref, ref, startInputRef)\n inputProps.value = inputValue\n inputProps.id = id\n inputProps.name = name\n\n if (isArray(value)) {\n inputProps.style = {\n ...(!focused && !!value.length\n ? visuallyHiddenAttributes.style\n : {}),\n ...inputProps.style,\n }\n inputProps.placeholder = !value.length\n ? startPlaceholder\n : undefined\n inputProps[\"data-max\"] = dataAttr(\n isNumber(max) && value.length >= max,\n )\n } else {\n inputProps.placeholder = startPlaceholder\n }\n }\n\n return inputProps\n },\n [\n allowInput,\n dataProps,\n disabled,\n endPlaceholder,\n focused,\n id,\n inputValue,\n max,\n name,\n onBlur,\n onInputFocus,\n onInputChange,\n onKeyDown,\n onMouseDown,\n readOnly,\n ref,\n required,\n startPlaceholder,\n value,\n ],\n )\n\n const getContentProps: PropGetter = useCallback(\n ({ ref, ...props } = {}) =>\n getComboboxContentProps({\n ref: mergeRefs(ref, contentRef),\n role: \"dialog\",\n ...props,\n }),\n [getComboboxContentProps],\n )\n\n const getCalendarProps: PropGetter<UseCalendarProps<Multiple, Range>> =\n useCallback(\n (props) =>\n ({\n disabled: !interactive,\n format: calendarFormat,\n locale,\n max,\n maxDate,\n minDate,\n month,\n multiple,\n range,\n value,\n onChange,\n onChangeMonth: setMonth,\n ...calendarProps,\n ...props,\n }) as UseCalendarProps<Multiple, Range>,\n [\n interactive,\n calendarFormat,\n locale,\n max,\n maxDate,\n minDate,\n month,\n multiple,\n range,\n value,\n onChange,\n setMonth,\n calendarProps,\n ],\n )\n\n const getIconProps: PropGetter = useCallback(\n (props) => ({ ...dataProps, ...props }),\n [dataProps],\n )\n\n const getClearIconProps: PropGetter = useCallback(\n (props = {}) =>\n getIconProps({\n \"aria-disabled\": ariaAttr(!interactive),\n \"aria-label\": t(\"Clear value\"),\n role: \"button\",\n tabIndex: interactive ? 0 : -1,\n ...props,\n onClick: handlerAll(props.onClick, onClear),\n onKeyDown: handlerAll(props.onKeyDown, (ev) =>\n runKeyAction(ev, { Enter: onClear, Space: onClear }),\n ),\n }),\n [getIconProps, interactive, onClear, t],\n )\n\n return {\n children,\n dateToString,\n inputValue,\n interactive,\n month,\n open,\n range,\n separator,\n setInputValue,\n setMonth,\n setValue,\n stringToDate,\n value,\n getCalendarProps,\n getClearIconProps,\n getContentProps,\n getFieldProps,\n getIconProps,\n getInputProps,\n getRootProps,\n popoverProps,\n onChange,\n onClose,\n onInputChange,\n onOpen,\n }\n}\n\nexport type UseDatePickerReturn = ReturnType<typeof useDatePicker>\n"],"mappings":"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"}
1
+ {"version":3,"file":"use-date-picker.js","names":[],"sources":["../../../../src/components/date-picker/use-date-picker.tsx"],"sourcesContent":["\"use client\"\n\nimport type {\n ChangeEvent,\n FocusEvent,\n KeyboardEvent,\n MouseEvent,\n ReactNode,\n} from \"react\"\nimport type { HTMLProps, HTMLRefAttributes, PropGetter } from \"../../core\"\nimport type { UseComboboxProps } from \"../../hooks/use-combobox\"\nimport type { Dict } from \"../../utils\"\nimport type {\n CalendarFormat,\n MaybeDateValue,\n UseCalendarProps,\n} from \"../calendar\"\nimport type { FieldProps } from \"../field\"\nimport dayjs from \"dayjs\"\nimport {\n cloneElement,\n isValidElement,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\"\nimport { useEnvironment } from \"../../core\"\nimport { useCombobox } from \"../../hooks/use-combobox\"\nimport { useControllableState } from \"../../hooks/use-controllable-state\"\nimport { useI18n } from \"../../providers/i18n-provider\"\nimport {\n ariaAttr,\n cast,\n contains,\n dataAttr,\n focusTransfer,\n handlerAll,\n isActiveElement,\n isArray,\n isComposing,\n isDate,\n isNumber,\n isObject,\n mergeRefs,\n runIfFn,\n runKeyAction,\n useUpdateEffect,\n visuallyHiddenAttributes,\n} from \"../../utils\"\nimport {\n DEFAULT_MAX_DATE,\n DEFAULT_MIN_DATE,\n getAdjustedMonth,\n isAfterDate,\n isBeforeDate,\n isIncludeDates,\n updateMaybeDateValue,\n useCalendarProps,\n} from \"../calendar\"\nimport { useFieldProps } from \"../field\"\nimport { useDateTimeFormat } from \"../format\"\n\nexport interface DatePickerFormat extends CalendarFormat {\n input?: Intl.DateTimeFormatOptions | null\n}\n\ntype InputAlign = \"end\" | \"start\"\ntype MaybeInputValue<Range extends boolean = false> = Range extends true\n ? { end?: string; start?: string }\n : string | undefined\n\ninterface DatePickerRenderProps {\n count: number\n date: Date\n focused: boolean\n index: number\n separator: string\n value: string\n onClear: () => void\n max?: number\n}\n\nexport interface DatePickerRender {\n (props: DatePickerRenderProps): ReactNode\n}\n\nconst defaultRender: DatePickerRender = ({\n count,\n focused,\n index,\n max,\n separator,\n value,\n}) => {\n const last = count - 1 === index\n\n return (\n <span style={{ marginInlineEnd: \"var(--gap)\" }}>\n {value}\n {((!isNumber(max) || count < max) && focused) || !last ? separator : null}\n </span>\n )\n}\n\nexport interface UseDatePickerProps<\n Multiple extends boolean = false,\n Range extends boolean = false,\n>\n extends\n Omit<UseCalendarProps<Multiple, Range>, \"format\" | \"ref\">,\n Omit<\n UseComboboxProps,\n \"defaultValue\" | \"initialFocusValue\" | \"onChange\" | \"ref\" | \"value\"\n >,\n HTMLRefAttributes<\"input\">,\n FieldProps {\n /**\n * If `true`, allows input.\n *\n * @default true\n */\n allowInput?: boolean\n /**\n * If `true`, allows input of dates beyond the `minDate` and `maxDate` restrictions.\n *\n * @default true\n */\n allowInputBeyond?: boolean\n /**\n * If `true`, the date picker will be closed when the input value changes.\n *\n * @default false\n */\n closeOnChange?: ((ev: ChangeEvent<HTMLInputElement>) => boolean) | boolean\n /**\n * The initial value of the input.\n */\n defaultInputValue?: MaybeInputValue<Range>\n /**\n * If `true`, the input will be focused when the clear icon is clicked.\n *\n * @default true\n */\n focusOnClear?: boolean\n /**\n * The format used for conversion.\n * Check the docs to see the format of possible modifiers you can pass.\n *\n * @see https://day.js.org/docs/en/display/format#list-of-localized-formats\n */\n format?: DatePickerFormat\n /**\n * The `id` attribute of the input element.\n */\n id?: string\n /**\n * The value of the input.\n */\n inputValue?: MaybeInputValue<Range>\n /**\n * The `name` attribute of the input element.\n */\n name?: string\n /**\n * If `true`, the date picker will be opened when the input value changes.\n *\n * @default true\n */\n openOnChange?: ((ev: ChangeEvent<HTMLInputElement>) => boolean) | boolean\n /**\n * If `true`, the date picker will be opened when the input is focused.\n *\n * @default true\n */\n openOnFocus?: boolean\n /**\n * The pattern used to check the input element.\n */\n pattern?: RegExp\n /**\n * The placeholder for date picker.\n */\n placeholder?: string\n /**\n * The visual separator between each value.\n *\n * @default ','\n */\n separator?: string\n /**\n * The callback invoked when input value state changes.\n */\n onInputChange?: (value: MaybeInputValue<Range>) => void\n /**\n * Function that converts the input value to Date type.\n */\n parseDate?: (value: string) => Date | undefined\n /**\n * The function to render the selected date.\n */\n render?: (props: DatePickerRenderProps) => ReactNode\n}\n\nexport const useDatePicker = <\n Multiple extends boolean = false,\n Range extends boolean = false,\n>({\n maxDate = DEFAULT_MAX_DATE,\n minDate = DEFAULT_MIN_DATE,\n ...props\n}: UseDatePickerProps<Multiple, Range> = {}) => {\n if (dayjs(minDate).isAfter(dayjs(maxDate))) maxDate = minDate\n\n const { getDocument } = useEnvironment()\n const { locale: defaultLocale, t } = useI18n(\"datePicker\")\n const {\n props: {\n id,\n ref,\n name,\n allowInput = true,\n allowInputBeyond = false,\n closeOnChange = false,\n multiple = false,\n closeOnSelect = !multiple,\n defaultInputValue,\n defaultMonth = new Date(),\n range = false,\n defaultValue = (range\n ? { end: undefined, start: undefined }\n : multiple\n ? []\n : undefined) as MaybeDateValue<Multiple, Range>,\n disabled,\n focusOnClear = true,\n format,\n inputValue: inputValueProp,\n locale = defaultLocale,\n max,\n month: monthProp,\n openOnChange = true,\n openOnClick = true,\n openOnFocus = true,\n parseDate,\n pattern,\n placeholder: placeholderProp,\n placement = \"end-start\",\n readOnly,\n render = defaultRender,\n required,\n separator = range ? \"-\" : \",\",\n value: valueProp,\n onChange: onChangeProp,\n onChangeMonth: onChangeMonthProp,\n onInputChange: onInputChangeProp,\n ...computedProps\n },\n ariaProps,\n dataProps,\n eventProps,\n } = useFieldProps(props)\n const dateTimeFormat = useDateTimeFormat({ locale })\n const { calendarFormat, inputFormat } = useMemo(() => {\n const { input: inputFormat, ...calendarFormat } = format ?? {}\n const defaultInputFormat: Intl.DateTimeFormatOptions = {\n day: \"numeric\",\n month: \"long\",\n year: \"numeric\",\n }\n\n return {\n calendarFormat,\n inputFormat:\n inputFormat !== null ? (inputFormat ?? defaultInputFormat) : undefined,\n }\n }, [format])\n const [calendarProps, rest] = useCalendarProps<Multiple, Range>(computedProps)\n const { excludeDate } = calendarProps\n const fieldRef = useRef<HTMLDivElement>(null)\n const contentRef = useRef<HTMLDivElement>(null)\n const startInputRef = useRef<HTMLInputElement>(null)\n const endInputRef = useRef<HTMLInputElement>(null)\n const focusByClickRef = useRef<boolean>(false)\n const [focused, setFocused] = useState(false)\n const [value, setValue] = useControllableState({\n defaultValue: defaultValue as MaybeDateValue<Multiple, Range>,\n value: valueProp,\n onChange: onChangeProp,\n })\n const [month, setMonth] = useControllableState({\n defaultValue: () => {\n let value = defaultMonth\n\n if (dayjs(minDate).isAfter(dayjs(defaultMonth)))\n value = dayjs(minDate).set(\"date\", 1).toDate()\n\n if (valueProp) value = getAdjustedMonth(valueProp, value)\n else if (defaultValue) value = getAdjustedMonth(defaultValue, value)\n\n return value\n },\n value: monthProp,\n onChange: onChangeMonthProp,\n })\n const stringToDate = useCallback(\n (value: string, start: Date = minDate, end: Date = maxDate) => {\n let date = parseDate?.(value)\n\n if (!date && dayjs(value).isValid())\n date = dayjs(value).locale(locale).toDate()\n\n if (date == null) return undefined\n if (excludeDate?.(date)) return undefined\n\n if (!allowInputBeyond) {\n if (isBeforeDate(date, start)) date = start\n if (isAfterDate(date, end)) date = end\n }\n\n return date\n },\n [allowInputBeyond, excludeDate, locale, maxDate, minDate, parseDate],\n )\n const dateToString = useCallback(\n (date?: Date) => {\n if (date == null) return \"\"\n\n return dateTimeFormat(date, inputFormat)\n },\n [dateTimeFormat, inputFormat],\n )\n const [inputValue, setInputValue] = useControllableState({\n defaultValue: () => {\n if (defaultInputValue)\n if (isObject(defaultInputValue)) {\n if (dayjs(defaultInputValue.start).isValid())\n defaultInputValue.start = dateTimeFormat(\n dayjs(defaultInputValue.start).toDate(),\n inputFormat,\n )\n\n if (dayjs(defaultInputValue.end).isValid())\n defaultInputValue.end = dateTimeFormat(\n dayjs(defaultInputValue.end).toDate(),\n inputFormat,\n )\n\n return defaultInputValue\n } else {\n if (dayjs(defaultInputValue).isValid())\n return dateTimeFormat(\n dayjs(defaultInputValue).toDate(),\n inputFormat,\n ) as MaybeInputValue<Range>\n else return defaultInputValue\n }\n else if (isDate(value))\n return dateToString(value) as MaybeInputValue<Range>\n else if (isObject(value) && !isArray(value))\n return {\n end: dateToString(value.end),\n start: dateToString(value.start),\n } as MaybeInputValue<Range>\n else return \"\" as MaybeInputValue<Range>\n },\n value: inputValueProp,\n onChange: onInputChangeProp,\n })\n const {\n interactive,\n open,\n getContentProps: getComboboxContentProps,\n getTriggerProps,\n popoverProps,\n onClose,\n onOpen,\n } = useCombobox({\n disabled,\n matchWidth: false,\n openOnClick: false,\n openOnEnter: !allowInput,\n openOnSpace: !allowInput,\n placement,\n readOnly,\n transferFocus: false,\n ...ariaProps,\n ...dataProps,\n ...eventProps,\n ...rest,\n })\n const children = useMemo<ReactNode>(() => {\n if (!isArray(value)) return null\n\n const count = value.length\n\n return value.map((date, index) => {\n const value = dateToString(date)\n\n const onClear = (ev?: MouseEvent<HTMLElement>) => {\n ev?.preventDefault()\n ev?.stopPropagation()\n\n setValue(\n (prev) =>\n updateMaybeDateValue(date, max)(prev) as MaybeDateValue<\n Multiple,\n Range\n >,\n )\n }\n\n const component = render({\n count,\n date,\n focused,\n index,\n max,\n separator,\n value,\n onClear,\n })\n\n if (isValidElement<Dict>(component))\n return cloneElement(component, { ...component.props, key: index })\n else return component\n })\n }, [dateToString, focused, max, render, separator, setValue, value])\n const { endPlaceholder, startPlaceholder } = useMemo(() => {\n if (range) {\n const startPlaceholder =\n placeholderProp ?? dateTimeFormat(new Date(), inputFormat)\n const endPlaceholder =\n placeholderProp ??\n dateTimeFormat(dayjs().add(1, \"day\").toDate(), inputFormat)\n\n return { endPlaceholder, startPlaceholder }\n } else {\n const placeholder =\n placeholderProp ?? dateTimeFormat(new Date(), inputFormat)\n\n return { endPlaceholder: placeholder, startPlaceholder: placeholder }\n }\n }, [dateTimeFormat, inputFormat, placeholderProp, range])\n\n const onChange = useCallback(\n (value: MaybeDateValue<Multiple, Range>) => {\n setValue(value)\n\n if (isArray(value)) setInputValue(\"\" as MaybeInputValue<Range>)\n else if (isObject(value) && !isDate(value))\n setInputValue({\n end: dateToString(value.end),\n start: dateToString(value.start),\n } as MaybeInputValue<Range>)\n else setInputValue(dateToString(value) as MaybeInputValue<Range>)\n\n if (!closeOnSelect) return\n\n if (isObject(value) && !isArray(value) && !isDate(value)) {\n if (value.end && value.start) onClose()\n } else {\n onClose()\n }\n },\n [setValue, closeOnSelect, setInputValue, dateToString, onClose],\n )\n\n const onInputChange = useCallback(\n (ev: ChangeEvent<HTMLInputElement>) => {\n if (!allowInput) return\n if (isArray(value) && value.length === max) return\n\n if (runIfFn(closeOnChange, ev)) onClose()\n else if (runIfFn(openOnChange, ev)) onOpen()\n\n let inputValue = ev.target.value\n\n if (pattern) inputValue = inputValue.replace(pattern, \"\")\n\n if (isArray(value)) {\n const date = stringToDate(inputValue)\n\n setInputValue(inputValue as MaybeInputValue<Range>)\n\n if (date) setMonth(dayjs(date).set(\"date\", 1).toDate())\n } else if (isObject(value) && !isDate(value)) {\n const align = contains(endInputRef.current, ev.target) ? \"end\" : \"start\"\n const minDate =\n value.start && align === \"end\"\n ? dayjs(value.start).add(1, \"day\").toDate()\n : undefined\n const maxDate =\n value.end && align === \"start\"\n ? dayjs(value.end).subtract(1, \"day\").toDate()\n : undefined\n const date = stringToDate(inputValue, minDate, maxDate)\n\n setInputValue((prev) =>\n isObject(prev)\n ? Object.assign({}, prev, { [align]: inputValue })\n : prev,\n )\n setValue((prev) =>\n isObject(prev) && !isDate(prev) ? { ...prev, [align]: date } : prev,\n )\n } else {\n const date = stringToDate(inputValue)\n\n setInputValue(inputValue as MaybeInputValue<Range>)\n setValue(date as MaybeDateValue<Multiple, Range>)\n }\n },\n [\n allowInput,\n closeOnChange,\n max,\n onClose,\n onOpen,\n openOnChange,\n pattern,\n setInputValue,\n setMonth,\n setValue,\n stringToDate,\n value,\n ],\n )\n\n const onKeyDown = useCallback(\n (ev: KeyboardEvent<HTMLInputElement>) => {\n if (disabled || isComposing(ev)) return\n\n const inputValue = cast<HTMLInputElement>(ev.target).value\n\n runKeyAction(\n ev,\n {\n Backspace: (ev) => {\n if (isArray(value)) {\n if (inputValue.length) return\n\n ev.preventDefault()\n\n setValue((prev) =>\n isArray(prev)\n ? (prev.slice(0, -1) as MaybeDateValue<Multiple, Range>)\n : prev,\n )\n } else if (isObject(value) && !isDate(value)) {\n if (inputValue.length) return\n if (!contains(endInputRef.current, ev.target)) return\n\n ev.preventDefault()\n\n setInputValue({ end: \"\", start: \"\" } as MaybeInputValue<Range>)\n setValue({ end: undefined, start: undefined } as MaybeDateValue<\n Multiple,\n Range\n >)\n\n startInputRef.current?.focus()\n }\n },\n Enter: (ev) => {\n if (!open || !inputValue.length) return\n\n if (isObject(value) && !isArray(value) && !isDate(value)) {\n const align = contains(endInputRef.current, ev.target)\n ? \"end\"\n : \"start\"\n const minDate =\n value.start && align === \"end\"\n ? dayjs(value.start).add(1, \"day\").toDate()\n : undefined\n const maxDate =\n value.end && align === \"start\"\n ? dayjs(value.end).subtract(1, \"day\").toDate()\n : undefined\n const date = stringToDate(inputValue, minDate, maxDate)\n\n if (!date) return\n\n ev.preventDefault()\n\n setInputValue((prev) =>\n isObject(prev)\n ? Object.assign({}, prev, { [align]: dateToString(date) })\n : prev,\n )\n setValue((prev) =>\n isObject(prev) && !isDate(prev)\n ? { ...prev, [align]: date }\n : prev,\n )\n\n if (align === \"start\") endInputRef.current?.focus()\n } else {\n const date = stringToDate(inputValue)\n\n if (!date) return\n\n ev.preventDefault()\n\n if (isArray(value)) {\n setInputValue(\"\" as MaybeInputValue<Range>)\n\n setValue((prev) =>\n isArray(prev) &&\n !isIncludeDates(date, prev) &&\n (!isNumber(max) || prev.length < max)\n ? ([...prev, date] as MaybeDateValue<Multiple, Range>)\n : prev,\n )\n } else {\n setInputValue(dateToString(date) as MaybeInputValue<Range>)\n setValue(date as MaybeDateValue<Multiple, Range>)\n }\n }\n },\n },\n { preventDefault: false },\n )\n },\n [\n dateToString,\n disabled,\n max,\n open,\n setInputValue,\n setValue,\n stringToDate,\n value,\n ],\n )\n\n const onClick = useCallback(\n (ev: MouseEvent<HTMLDivElement>) => {\n if (!interactive) return\n\n focusByClickRef.current = true\n\n if (allowInput)\n if (isObject(value) && !isArray(value) && !isDate(value))\n if (\n startInputRef.current &&\n contains(startInputRef.current, ev.target)\n ) {\n if (!isActiveElement(startInputRef.current, getDocument()!))\n ev.defaultPrevented = true\n\n startInputRef.current.focus()\n } else if (\n endInputRef.current &&\n contains(endInputRef.current, ev.target)\n ) {\n if (!isActiveElement(endInputRef.current, getDocument()!))\n ev.defaultPrevented = true\n\n endInputRef.current.focus()\n } else {\n startInputRef.current?.focus()\n }\n else startInputRef.current?.focus()\n\n if (openOnClick) onOpen()\n },\n [allowInput, interactive, onOpen, openOnClick, value, getDocument],\n )\n\n const onMouseDown = useCallback(\n (ev: MouseEvent<HTMLDivElement | HTMLInputElement>) => {\n if (!openOnFocus) return\n\n ev.preventDefault()\n ev.stopPropagation()\n },\n [openOnFocus],\n )\n\n const onFieldFocus = useCallback(() => {\n if (allowInput) return\n\n if (openOnFocus) onOpen()\n\n focusByClickRef.current = false\n }, [allowInput, onOpen, openOnFocus])\n\n const onInputFocus = useCallback(\n (ev: FocusEvent<HTMLInputElement>) => {\n ev.preventDefault()\n ev.stopPropagation()\n\n setFocused(true)\n\n if (openOnFocus && !focusByClickRef.current) onOpen()\n\n focusByClickRef.current = false\n },\n [onOpen, openOnFocus],\n )\n\n const onBlur = useCallback(\n (ev: FocusEvent<HTMLInputElement>) => {\n setFocused(false)\n\n if (\n contains(fieldRef.current, ev.relatedTarget) ||\n contains(contentRef.current, ev.relatedTarget)\n )\n ev.preventDefault()\n else if (isArray(value)) setInputValue(\"\" as MaybeInputValue<Range>)\n else if (isObject(value) && !isDate(value))\n setInputValue((prev) =>\n isObject(prev)\n ? ({\n end: dateToString(value.end),\n start: dateToString(value.start),\n } as MaybeInputValue<Range>)\n : prev,\n )\n else setInputValue(dateToString(value) as MaybeInputValue<Range>)\n },\n [dateToString, setInputValue, value],\n )\n\n const onClear = useCallback(() => {\n if (!interactive) return\n\n setValue((prev) => {\n if (isDate(prev)) return undefined as MaybeDateValue<Multiple, Range>\n else if (isArray(prev))\n return [] as unknown as MaybeDateValue<Multiple, Range>\n else if (isObject(prev))\n return { end: undefined, start: undefined } as MaybeDateValue<\n Multiple,\n Range\n >\n else return prev\n })\n\n setInputValue(\n (range ? { end: \"\", start: \"\" } : \"\") as MaybeInputValue<Range>,\n )\n\n if (focusOnClear)\n if (allowInput) startInputRef.current?.focus()\n else fieldRef.current?.focus()\n }, [allowInput, focusOnClear, interactive, range, setInputValue, setValue])\n\n useEffect(() => {\n if (!open) return\n\n return focusTransfer(\n contentRef.current,\n allowInput ? startInputRef.current : fieldRef.current,\n )\n }, [allowInput, open])\n\n useUpdateEffect(() => {\n setMonth((prev) => getAdjustedMonth(value, prev))\n }, [value, range])\n\n useUpdateEffect(() => {\n if (isArray(valueProp)) return\n\n if (isObject(valueProp) && !isDate(valueProp))\n setInputValue({\n end: dateToString(valueProp.end),\n start: dateToString(valueProp.start),\n } as MaybeInputValue<Range>)\n else setInputValue(dateToString(valueProp) as MaybeInputValue<Range>)\n }, [valueProp])\n\n const getRootProps: PropGetter = useCallback(\n (props) => ({\n \"data-range\": dataAttr(range),\n ...dataProps,\n ...props,\n }),\n [dataProps, range],\n )\n\n const getFieldProps: PropGetter = useCallback(\n ({ ref, ...props } = {}) =>\n getTriggerProps({\n ref: mergeRefs(ref, fieldRef),\n \"aria-haspopup\": \"dialog\",\n tabIndex: !allowInput ? 0 : -1,\n ...props,\n onClick: handlerAll(props.onClick, onClick),\n onFocus: handlerAll(props.onFocus, onFieldFocus),\n onMouseDown: handlerAll(props.onMouseDown, onMouseDown),\n }),\n\n [allowInput, getTriggerProps, onClick, onFieldFocus, onMouseDown],\n )\n\n const getInputProps: PropGetter<\"input\", { align?: InputAlign }> =\n useCallback(\n ({ align = \"start\", ...props } = {}) => {\n const inputProps: HTMLProps<\"input\"> = {\n style: {\n ...(!allowInput ? { pointerEvents: \"none\" } : {}),\n ...props.style,\n },\n autoComplete: \"off\",\n disabled,\n readOnly,\n required,\n tabIndex: allowInput ? 0 : -1,\n ...dataProps,\n ...props,\n onBlur: handlerAll(props.onBlur, onBlur),\n onChange: handlerAll(props.onChange, onInputChange),\n onFocus: handlerAll(props.onFocus, onInputFocus),\n onKeyDown: handlerAll(props.onKeyDown, onKeyDown),\n onMouseDown: handlerAll(props.onMouseDown, onMouseDown),\n }\n\n if (isObject(inputValue)) {\n if (align === \"start\") {\n inputProps.ref = mergeRefs(props.ref, ref, startInputRef)\n inputProps.value = inputValue.start\n inputProps.placeholder = startPlaceholder\n } else {\n inputProps.ref = mergeRefs(props.ref, ref, endInputRef)\n inputProps.value = inputValue.end\n inputProps.placeholder = endPlaceholder\n }\n\n if (!inputValue.start && align === \"start\") {\n inputProps.id = id\n inputProps.name = name\n }\n\n if (!!inputValue.start && align === \"end\") {\n inputProps.id = id\n inputProps.name = name\n }\n } else {\n inputProps.ref = mergeRefs(props.ref, ref, startInputRef)\n inputProps.value = inputValue\n inputProps.id = id\n inputProps.name = name\n\n if (isArray(value)) {\n inputProps.style = {\n ...(!focused && !!value.length\n ? visuallyHiddenAttributes.style\n : {}),\n ...inputProps.style,\n }\n inputProps.placeholder = !value.length\n ? startPlaceholder\n : undefined\n inputProps[\"data-max\"] = dataAttr(\n isNumber(max) && value.length >= max,\n )\n } else {\n inputProps.placeholder = startPlaceholder\n }\n }\n\n return inputProps\n },\n [\n allowInput,\n dataProps,\n disabled,\n endPlaceholder,\n focused,\n id,\n inputValue,\n max,\n name,\n onBlur,\n onInputFocus,\n onInputChange,\n onKeyDown,\n onMouseDown,\n readOnly,\n ref,\n required,\n startPlaceholder,\n value,\n ],\n )\n\n const getContentProps: PropGetter = useCallback(\n ({ ref, ...props } = {}) =>\n getComboboxContentProps({\n ref: mergeRefs(ref, contentRef),\n role: \"dialog\",\n ...props,\n }),\n [getComboboxContentProps],\n )\n\n const getCalendarProps: PropGetter<UseCalendarProps<Multiple, Range>> =\n useCallback(\n (props) =>\n ({\n disabled: !interactive,\n format: calendarFormat,\n locale,\n max,\n maxDate,\n minDate,\n month,\n multiple,\n range,\n value,\n onChange,\n onChangeMonth: setMonth,\n ...calendarProps,\n ...props,\n }) as UseCalendarProps<Multiple, Range>,\n [\n interactive,\n calendarFormat,\n locale,\n max,\n maxDate,\n minDate,\n month,\n multiple,\n range,\n value,\n onChange,\n setMonth,\n calendarProps,\n ],\n )\n\n const getIconProps: PropGetter = useCallback(\n (props) => ({ ...dataProps, ...props }),\n [dataProps],\n )\n\n const getClearIconProps: PropGetter = useCallback(\n (props = {}) =>\n getIconProps({\n \"aria-disabled\": ariaAttr(!interactive),\n \"aria-label\": t(\"Clear value\"),\n role: \"button\",\n tabIndex: interactive ? 0 : -1,\n ...props,\n onClick: handlerAll(props.onClick, onClear),\n onKeyDown: handlerAll(props.onKeyDown, (ev) =>\n runKeyAction(ev, { Enter: onClear, Space: onClear }),\n ),\n }),\n [getIconProps, interactive, onClear, t],\n )\n\n return {\n children,\n dateToString,\n inputValue,\n interactive,\n month,\n open,\n range,\n separator,\n setInputValue,\n setMonth,\n setValue,\n stringToDate,\n value,\n getCalendarProps,\n getClearIconProps,\n getContentProps,\n getFieldProps,\n getIconProps,\n getInputProps,\n getRootProps,\n popoverProps,\n onChange,\n onClose,\n onInputChange,\n onOpen,\n }\n}\n\nexport type UseDatePickerReturn = ReturnType<typeof useDatePicker>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"fieldset.style.js","names":[],"sources":["../../../../src/components/fieldset/fieldset.style.ts"],"sourcesContent":["import type { ComponentCompound, CSSSlotObject } from \"../../core\"\nimport { defineComponentSlotStyle } from \"../../core\"\nimport { formStyle } from \"../form\"\n\nexport const fieldsetStyle = defineComponentSlotStyle({\n base: {\n content: {\n display: \"flex\",\n flexDirection: \"column\",\n w: \"full\",\n },\n errorMessage: {\n alignItems: \"center\",\n color: \"fg.error\",\n display: \"inline-flex\",\n gap: \"1\",\n },\n header: {\n display: \"flex\",\n flexDirection: \"column\",\n w: \"full\",\n },\n helperMessage: {\n alignItems: \"center\",\n color: \"fg.muted\",\n display: \"inline-flex\",\n gap: \"1\",\n },\n legend: {\n fontWeight: \"medium\",\n _disabled: { opacity: 0.4 },\n },\n root: {\n display: \"flex\",\n flexDirection: \"column\",\n w: \"full\",\n },\n },\n\n variants: {\n elevated: { root: formStyle.variants?.elevated.group },\n outline: { root: formStyle.variants?.outline.group },\n panel: { root: formStyle.variants?.panel.group },\n plain: { root: formStyle.variants?.plain.group },\n },\n\n sizes: {\n sm: {\n content: { gap: \"3\" },\n errorMessage: { fontSize: \"sm\" },\n header: { gap: \"1\" },\n helperMessage: { fontSize: \"sm\" },\n legend: { fontSize: \"md\" },\n root: { gap: formStyle.sizes?.sm.root.gap },\n },\n md: {\n content: { gap: \"4\" },\n errorMessage: { fontSize: \"sm\" },\n header: { gap: \"1\" },\n helperMessage: { fontSize: \"sm\" },\n legend: { fontSize: \"md\" },\n root: { gap: formStyle.sizes?.md.root.gap },\n },\n lg: {\n content: { gap: \"6\" },\n errorMessage: { fontSize: \"md\" },\n header: { gap: \"1\" },\n helperMessage: { fontSize: \"md\" },\n legend: { fontSize: \"lg\" },\n root: { gap: formStyle.sizes?.lg.root.gap },\n },\n },\n\n compounds: (\n formStyle.compounds as ComponentCompound<CSSSlotObject>[] | undefined\n )?.map(({ css, ...rest }) => ({\n css: { root: css.group },\n ...rest,\n })),\n\n defaultProps: {\n size: \"md\",\n variant: \"plain\",\n },\n})\n\nexport type FieldsetStyle = typeof fieldsetStyle\n"],"mappings":";;;AAIA,MAAa,gBAAgB,yBAAyB;CACpD,MAAM;EACJ,SAAS;GACP,SAAS;GACT,eAAe;GACf,GAAG;EACL;EACA,cAAc;GACZ,YAAY;GACZ,OAAO;GACP,SAAS;GACT,KAAK;EACP;EACA,QAAQ;GACN,SAAS;GACT,eAAe;GACf,GAAG;EACL;EACA,eAAe;GACb,YAAY;GACZ,OAAO;GACP,SAAS;GACT,KAAK;EACP;EACA,QAAQ;GACN,YAAY;GACZ,WAAW,EAAE,SAAS,GAAI;EAC5B;EACA,MAAM;GACJ,SAAS;GACT,eAAe;GACf,GAAG;EACL;CACF;CAEA,UAAU;EACR,UAAU,EAAE,MAAM,UAAU,UAAU,SAAS,MAAM;EACrD,SAAS,EAAE,MAAM,UAAU,UAAU,QAAQ,MAAM;EACnD,OAAO,EAAE,MAAM,UAAU,UAAU,MAAM,MAAM;EAC/C,OAAO,EAAE,MAAM,UAAU,UAAU,MAAM,MAAM;CACjD;CAEA,OAAO;EACL,IAAI;GACF,SAAS,EAAE,KAAK,IAAI;GACpB,cAAc,EAAE,UAAU,KAAK;GAC/B,QAAQ,EAAE,KAAK,IAAI;GACnB,eAAe,EAAE,UAAU,KAAK;GAChC,QAAQ,EAAE,UAAU,KAAK;GACzB,MAAM,EAAE,KAAK,UAAU,OAAO,GAAG,KAAK,IAAI;EAC5C;EACA,IAAI;GACF,SAAS,EAAE,KAAK,IAAI;GACpB,cAAc,EAAE,UAAU,KAAK;GAC/B,QAAQ,EAAE,KAAK,IAAI;GACnB,eAAe,EAAE,UAAU,KAAK;GAChC,QAAQ,EAAE,UAAU,KAAK;GACzB,MAAM,EAAE,KAAK,UAAU,OAAO,GAAG,KAAK,IAAI;EAC5C;EACA,IAAI;GACF,SAAS,EAAE,KAAK,IAAI;GACpB,cAAc,EAAE,UAAU,KAAK;GAC/B,QAAQ,EAAE,KAAK,IAAI;GACnB,eAAe,EAAE,UAAU,KAAK;GAChC,QAAQ,EAAE,UAAU,KAAK;GACzB,MAAM,EAAE,KAAK,UAAU,OAAO,GAAG,KAAK,IAAI;EAC5C;CACF;CAEA,WACE,UAAU,WACT,KAAK,EAAE,KAAK,GAAG,YAAY;EAC5B,KAAK,EAAE,MAAM,IAAI,MAAM;EACvB,GAAG;CACL,EAAE;CAEF,cAAc;EACZ,MAAM;EACN,SAAS;CACX;AACF,CAAC"}
1
+ {"version":3,"file":"fieldset.style.js","names":[],"sources":["../../../../src/components/fieldset/fieldset.style.ts"],"sourcesContent":["import { defineComponentSlotStyle } from \"../../core\"\nimport { formStyle } from \"../form\"\n\nexport const fieldsetStyle = defineComponentSlotStyle({\n base: {\n content: {\n display: \"flex\",\n flexDirection: \"column\",\n w: \"full\",\n },\n errorMessage: {\n alignItems: \"center\",\n color: \"fg.error\",\n display: \"inline-flex\",\n gap: \"1\",\n },\n header: {\n display: \"flex\",\n flexDirection: \"column\",\n w: \"full\",\n },\n helperMessage: {\n alignItems: \"center\",\n color: \"fg.muted\",\n display: \"inline-flex\",\n gap: \"1\",\n },\n legend: {\n fontWeight: \"medium\",\n _disabled: { opacity: 0.4 },\n },\n root: {\n display: \"flex\",\n flexDirection: \"column\",\n w: \"full\",\n },\n },\n\n variants: {\n elevated: { root: formStyle.variants?.elevated.group },\n outline: { root: formStyle.variants?.outline.group },\n panel: { root: formStyle.variants?.panel.group },\n plain: { root: formStyle.variants?.plain.group },\n },\n\n sizes: {\n sm: {\n content: { gap: \"3\" },\n errorMessage: { fontSize: \"sm\" },\n header: { gap: \"1\" },\n helperMessage: { fontSize: \"sm\" },\n legend: { fontSize: \"md\" },\n root: { gap: formStyle.sizes?.sm.root.gap },\n },\n md: {\n content: { gap: \"4\" },\n errorMessage: { fontSize: \"sm\" },\n header: { gap: \"1\" },\n helperMessage: { fontSize: \"sm\" },\n legend: { fontSize: \"md\" },\n root: { gap: formStyle.sizes?.md.root.gap },\n },\n lg: {\n content: { gap: \"6\" },\n errorMessage: { fontSize: \"md\" },\n header: { gap: \"1\" },\n helperMessage: { fontSize: \"md\" },\n legend: { fontSize: \"lg\" },\n root: { gap: formStyle.sizes?.lg.root.gap },\n },\n },\n\n compounds: formStyle.compounds?.map(({ css, ...rest }) => ({\n css: { root: css.group },\n ...rest,\n })),\n\n defaultProps: {\n size: \"md\",\n variant: \"plain\",\n },\n})\n\nexport type FieldsetStyle = typeof fieldsetStyle\n"],"mappings":";;;AAGA,MAAa,gBAAgB,yBAAyB;CACpD,MAAM;EACJ,SAAS;GACP,SAAS;GACT,eAAe;GACf,GAAG;EACL;EACA,cAAc;GACZ,YAAY;GACZ,OAAO;GACP,SAAS;GACT,KAAK;EACP;EACA,QAAQ;GACN,SAAS;GACT,eAAe;GACf,GAAG;EACL;EACA,eAAe;GACb,YAAY;GACZ,OAAO;GACP,SAAS;GACT,KAAK;EACP;EACA,QAAQ;GACN,YAAY;GACZ,WAAW,EAAE,SAAS,GAAI;EAC5B;EACA,MAAM;GACJ,SAAS;GACT,eAAe;GACf,GAAG;EACL;CACF;CAEA,UAAU;EACR,UAAU,EAAE,MAAM,UAAU,UAAU,SAAS,MAAM;EACrD,SAAS,EAAE,MAAM,UAAU,UAAU,QAAQ,MAAM;EACnD,OAAO,EAAE,MAAM,UAAU,UAAU,MAAM,MAAM;EAC/C,OAAO,EAAE,MAAM,UAAU,UAAU,MAAM,MAAM;CACjD;CAEA,OAAO;EACL,IAAI;GACF,SAAS,EAAE,KAAK,IAAI;GACpB,cAAc,EAAE,UAAU,KAAK;GAC/B,QAAQ,EAAE,KAAK,IAAI;GACnB,eAAe,EAAE,UAAU,KAAK;GAChC,QAAQ,EAAE,UAAU,KAAK;GACzB,MAAM,EAAE,KAAK,UAAU,OAAO,GAAG,KAAK,IAAI;EAC5C;EACA,IAAI;GACF,SAAS,EAAE,KAAK,IAAI;GACpB,cAAc,EAAE,UAAU,KAAK;GAC/B,QAAQ,EAAE,KAAK,IAAI;GACnB,eAAe,EAAE,UAAU,KAAK;GAChC,QAAQ,EAAE,UAAU,KAAK;GACzB,MAAM,EAAE,KAAK,UAAU,OAAO,GAAG,KAAK,IAAI;EAC5C;EACA,IAAI;GACF,SAAS,EAAE,KAAK,IAAI;GACpB,cAAc,EAAE,UAAU,KAAK;GAC/B,QAAQ,EAAE,KAAK,IAAI;GACnB,eAAe,EAAE,UAAU,KAAK;GAChC,QAAQ,EAAE,UAAU,KAAK;GACzB,MAAM,EAAE,KAAK,UAAU,OAAO,GAAG,KAAK,IAAI;EAC5C;CACF;CAEA,WAAW,UAAU,WAAW,KAAK,EAAE,KAAK,GAAG,YAAY;EACzD,KAAK,EAAE,MAAM,IAAI,MAAM;EACvB,GAAG;CACL,EAAE;CAEF,cAAc;EACZ,MAAM;EACN,SAAS;CACX;AACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-slider.js","names":[],"sources":["../../../../src/components/slider/use-slider.ts"],"sourcesContent":["\"use client\"\n\nimport type { KeyboardEvent } from \"react\"\nimport type {\n HTMLProps,\n HTMLRefAttributes,\n Orientation,\n PropGetter,\n RequiredPropGetter,\n} from \"../../core\"\nimport type { Point } from \"../../utils\"\nimport type { FieldProps } from \"../field\"\nimport { useCallback, useRef } from \"react\"\nimport { mergeProps } from \"../../core\"\nimport { useControllableState } from \"../../hooks/use-controllable-state\"\nimport { usePanEvent } from \"../../hooks/use-pan-event\"\nimport { useI18n } from \"../../providers/i18n-provider\"\nimport {\n clampNumber,\n cx,\n dataAttr,\n handlerAll,\n isArray,\n isNumber,\n mergeRefs,\n percentToValue,\n roundNumberToStep,\n runKeyAction,\n valueToPercent,\n visuallyHiddenAttributes,\n} from \"../../utils\"\nimport { useFieldProps } from \"../field\"\n\nexport interface UseSliderProps<Y extends [number, number] | number = number>\n extends\n Omit<HTMLProps, \"defaultValue\" | \"onChange\" | \"ref\">,\n HTMLRefAttributes<\"input\">,\n FieldProps {\n /**\n * The minimum distance between slider thumbs.\n * Useful for preventing the thumbs from being too close together.\n *\n * @default 0\n */\n betweenThumbs?: number\n /**\n * The initial value of the slider.\n */\n defaultValue?: Y\n /**\n * The base `id` to use for the slider.\n */\n id?: string\n /**\n * The maximum allowed value of the slider. Cannot be less than min.\n *\n * @default 100\n */\n max?: number\n /**\n * The minimum allowed value of the slider. Cannot be greater than max.\n *\n * @default 0\n */\n min?: number\n /**\n * The name attribute of the hidden `input` field.\n * This is particularly useful in forms.\n */\n name?: string\n /**\n * The orientation of the slider.\n *\n * @default 'horizontal'\n */\n orientation?: Orientation\n /**\n * The step in which increments or decrements have to be made.\n *\n * @default 1\n */\n step?: number\n /**\n * The value of the slider.\n */\n value?: Y\n /**\n * This is used to format the value so that screen readers\n * can speak out a more human-friendly value.\n *\n * It is used to set the `aria-valuetext` property of the input.\n */\n getAriaValueText?: (value: number, index: number) => string | undefined\n /**\n * Function called whenever the slider value changes.\n */\n onChange?: (value: Y) => void\n /**\n * Function called when the user is done selecting a new value.\n */\n onChangeEnd?: (value: Y) => void\n /**\n * Function called when the user starts selecting a new value.\n */\n onChangeStart?: (value: Y) => void\n}\n\nexport const useSlider = <Y extends [number, number] | number = number>(\n props: UseSliderProps<Y> = {},\n) => {\n const {\n props: {\n id,\n ref,\n name,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-valuetext\": ariaValueText,\n betweenThumbs = 0,\n defaultValue = 0 as Y,\n disabled,\n getAriaValueText,\n max = 100,\n min = 0,\n orientation = \"horizontal\",\n readOnly,\n required,\n step = 1,\n value: valueProp,\n onChange: onChangeProp,\n onChangeEnd,\n onChangeStart,\n ...rest\n },\n ariaProps,\n dataProps,\n eventProps,\n } = useFieldProps(props)\n const [value, setValue] = useControllableState({\n defaultValue,\n value: valueProp,\n onChange: onChangeProp,\n })\n const { t } = useI18n(\"slider\")\n const currentIndex = useRef(0)\n const interactive = !(disabled || readOnly)\n const [_, getPanEventProps] = usePanEvent<HTMLDivElement>({\n onEnd: (_, point, rect) => {\n if (!interactive) return\n\n const panValue = getPanValue(point, rect)\n\n if (range) {\n const start = currentIndex.current === 0\n const oppositeIndex = currentIndex.current === 0 ? 1 : 0\n const oppositeValue = value[oppositeIndex]\n\n onChangeEnd?.(\n (start ? [panValue, oppositeValue] : [oppositeValue, panValue]) as Y,\n )\n } else {\n onChangeEnd?.(panValue as Y)\n }\n },\n onMove: (_, point, rect) => {\n if (!interactive) return\n\n const panValue = getPanValue(point, rect)\n\n onChange(currentIndex.current, panValue)\n },\n onStart: (_, point, rect) => {\n if (!interactive) return\n\n const panValue = getPanValue(point, rect)\n\n if (range) {\n const distances = value.map((value) => Math.abs(value - panValue))\n const closest = Math.min(...distances)\n const index = distances.indexOf(closest)\n\n currentIndex.current = index\n\n const start = index === 0\n const oppositeIndex = index === 0 ? 1 : 0\n const oppositeValue = value[oppositeIndex]\n\n onChangeStart?.(\n (start ? [panValue, oppositeValue] : [oppositeValue, panValue]) as Y,\n )\n } else {\n currentIndex.current = 0\n\n onChangeStart?.(value as Y)\n }\n\n onChange(currentIndex.current, panValue)\n },\n })\n const range = !isNumber(value)\n const percent = (\n range\n ? value.map((value) => valueToPercent(value, min, max))\n : valueToPercent(value, min, max)\n ) as Y extends number ? number : number[]\n const tenStep = (max - min) / 10\n const oneStep = step || (max - min) / 100\n\n if (max < min) console.warn(\"Do not assign a number less than 'min' to 'max'\")\n\n const getMinMax = useCallback(\n (index: number) => {\n const start = index === 0\n const oppositeIndex = index === 0 ? 1 : 0\n const oppositeValue = range ? value[oppositeIndex] : value\n\n return {\n max: range ? (start ? oppositeValue - betweenThumbs : max) : max,\n min: range ? (start ? min : oppositeValue + betweenThumbs) : min,\n }\n },\n [betweenThumbs, max, min, range, value],\n )\n\n const getPanValue = useCallback(\n ({ x, y }: Point, { bottom, height, left, width }: DOMRect) => {\n const diff = orientation === \"horizontal\" ? x - left : bottom - y\n const length = orientation === \"horizontal\" ? width : height\n const percent = diff / length\n\n let nextValue = percentToValue(percent, min, max)\n\n nextValue = parseFloat(roundNumberToStep(nextValue, min, step))\n nextValue = clampNumber(nextValue, min, max)\n\n return nextValue\n },\n [orientation, min, max, step],\n )\n\n const onChange = useCallback(\n (index: number, value: number) => {\n if (!interactive) return\n\n const { max, min } = getMinMax(index)\n\n value = parseFloat(roundNumberToStep(value, min, oneStep))\n value = clampNumber(value, min, max)\n\n setValue((prev) => {\n if (isArray(prev)) {\n const next = [...prev]\n\n next[index] = value\n\n return next as Y\n } else {\n return value as Y\n }\n })\n },\n [getMinMax, interactive, oneStep, setValue],\n )\n\n const stepUp = useCallback(\n (index: number, step = oneStep) =>\n range\n ? onChange(index, value[index]! + step)\n : onChange(index, value + step),\n [oneStep, range, onChange, value],\n )\n\n const stepDown = useCallback(\n (index: number, step = oneStep) =>\n range\n ? onChange(index, value[index]! - step)\n : onChange(index, value - step),\n [oneStep, range, onChange, value],\n )\n\n const onKeyDown = useCallback(\n (index: number) => (ev: KeyboardEvent<HTMLDivElement>) => {\n const { max, min } = getMinMax(index)\n\n runKeyAction(ev, {\n ArrowDown: () => stepDown(index),\n ArrowLeft: () => stepDown(index),\n ArrowRight: () => stepUp(index),\n ArrowUp: () => stepUp(index),\n End: () => onChange(index, max),\n Home: () => onChange(index, min),\n PageDown: () => stepDown(index, tenStep),\n PageUp: () => stepUp(index, tenStep),\n })\n },\n [getMinMax, onChange, stepDown, stepUp, tenStep],\n )\n\n const getRootProps: PropGetter = useCallback(\n (props = {}) => {\n const computedProps: HTMLProps = mergeProps(\n dataProps,\n { \"data-orientation\": orientation },\n rest,\n props,\n { onBlur: eventProps.onBlur, onFocus: eventProps.onFocus },\n )()\n\n computedProps.style ??= {}\n\n if (isArray(percent)) {\n computedProps.style[\"--range-start\"] = `${Math.abs(percent[0]!)}%`\n computedProps.style[\"--range-end\"] = `${Math.abs(percent[1]!)}%`\n } else {\n computedProps.style[\"--range-start\"] = \"0%\"\n computedProps.style[\"--range-end\"] = `${Math.abs(percent)}%`\n }\n\n return computedProps\n },\n [dataProps, eventProps, orientation, percent, rest],\n )\n\n const getInputProps: PropGetter<\"input\", { index?: number }> = useCallback(\n ({ index = 0, ...props } = {}) => ({\n ...visuallyHiddenAttributes,\n ...dataProps,\n ...ariaProps,\n id,\n type: \"hidden\",\n name,\n disabled,\n readOnly,\n required,\n value: range ? value[index]! : value,\n ...props,\n ref: index === 0 ? mergeRefs(props.ref, ref) : props.ref,\n }),\n [\n dataProps,\n ariaProps,\n id,\n name,\n disabled,\n readOnly,\n required,\n range,\n value,\n ref,\n ],\n )\n\n const getTrackProps: PropGetter = useCallback(\n (props) =>\n getPanEventProps({\n ...dataProps,\n \"data-orientation\": orientation,\n ...props,\n }),\n [dataProps, getPanEventProps, orientation],\n )\n\n const getRangeProps: PropGetter = useCallback(\n (props) => ({\n ...dataProps,\n \"data-orientation\": orientation,\n \"data-range\": dataAttr(range),\n ...props,\n }),\n [dataProps, orientation, range],\n )\n\n const getMarkProps: RequiredPropGetter<\"div\", { value: number }> =\n useCallback(\n ({ style, value: valueProp, ...props }) => {\n const between = range\n ? value[0] < valueProp && valueProp < value[1]\n : valueProp < value\n const percent = valueToPercent(valueProp, min, max)\n\n return {\n ...dataProps,\n \"aria-hidden\": true,\n \"data-between\": dataAttr(between),\n \"data-orientation\": orientation,\n role: \"presentation\",\n ...props,\n style: { ...style, \"--mark-position\": `${percent}%` },\n }\n },\n [dataProps, max, min, orientation, range, value],\n )\n\n const getThumbProps: PropGetter<\"div\", { index?: number }> = useCallback(\n ({ index = 0, ...rest } = {}) => {\n const { max, min } = getMinMax(index)\n\n const props: HTMLProps = {\n ...dataProps,\n ...ariaProps,\n \"aria-label\": t(\"Slider thumb\"),\n \"aria-orientation\": orientation,\n \"aria-valuemax\": max,\n \"aria-valuemin\": min,\n role: \"slider\",\n tabIndex: interactive ? 0 : -1,\n ...rest,\n \"aria-labelledby\": cx(rest[\"aria-labelledby\"], ariaLabelledBy),\n onKeyDown: handlerAll(rest.onKeyDown, onKeyDown(index)),\n }\n\n if (range) {\n const currentValue = value[index]!\n\n props[\"data-start\"] = dataAttr(index === 0)\n props[\"data-end\"] = dataAttr(index === 1)\n props[\"aria-valuenow\"] = currentValue\n props[\"aria-valuetext\"] =\n ariaValueText ??\n getAriaValueText?.(currentValue, index) ??\n currentValue.toString()\n } else {\n props[\"data-end\"] = dataAttr(index === 0)\n props[\"aria-valuenow\"] = value\n props[\"aria-valuetext\"] =\n ariaValueText ?? getAriaValueText?.(value, index) ?? value.toString()\n }\n\n return props\n },\n [\n t,\n ariaLabelledBy,\n ariaProps,\n ariaValueText,\n dataProps,\n getAriaValueText,\n getMinMax,\n interactive,\n onKeyDown,\n orientation,\n range,\n value,\n ],\n )\n\n return {\n percent,\n range,\n setValue,\n stepDown,\n stepUp,\n value,\n getInputProps,\n getMarkProps,\n getRangeProps,\n getRootProps,\n getThumbProps,\n getTrackProps,\n onChange,\n }\n}\n\nexport type UseSliderReturn = ReturnType<typeof useSlider>\n"],"mappings":"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"}
1
+ {"version":3,"file":"use-slider.js","names":[],"sources":["../../../../src/components/slider/use-slider.ts"],"sourcesContent":["\"use client\"\n\nimport type { KeyboardEvent } from \"react\"\nimport type {\n HTMLProps,\n HTMLRefAttributes,\n Orientation,\n PropGetter,\n RequiredPropGetter,\n} from \"../../core\"\nimport type { Point } from \"../../utils\"\nimport type { FieldProps } from \"../field\"\nimport { useCallback, useRef } from \"react\"\nimport { mergeProps } from \"../../core\"\nimport { useControllableState } from \"../../hooks/use-controllable-state\"\nimport { usePanEvent } from \"../../hooks/use-pan-event\"\nimport { useI18n } from \"../../providers/i18n-provider\"\nimport {\n clampNumber,\n cx,\n dataAttr,\n handlerAll,\n isArray,\n isNumber,\n mergeRefs,\n percentToValue,\n roundNumberToStep,\n runKeyAction,\n valueToPercent,\n visuallyHiddenAttributes,\n} from \"../../utils\"\nimport { useFieldProps } from \"../field\"\n\nexport interface UseSliderProps<Y extends [number, number] | number = number>\n extends\n Omit<HTMLProps, \"defaultValue\" | \"onChange\" | \"ref\">,\n HTMLRefAttributes<\"input\">,\n FieldProps {\n /**\n * The minimum distance between slider thumbs.\n * Useful for preventing the thumbs from being too close together.\n *\n * @default 0\n */\n betweenThumbs?: number\n /**\n * The initial value of the slider.\n */\n defaultValue?: Y\n /**\n * The base `id` to use for the slider.\n */\n id?: string\n /**\n * The maximum allowed value of the slider. Cannot be less than min.\n *\n * @default 100\n */\n max?: number\n /**\n * The minimum allowed value of the slider. Cannot be greater than max.\n *\n * @default 0\n */\n min?: number\n /**\n * The name attribute of the hidden `input` field.\n * This is particularly useful in forms.\n */\n name?: string\n /**\n * The orientation of the slider.\n *\n * @default 'horizontal'\n */\n orientation?: Orientation\n /**\n * The step in which increments or decrements have to be made.\n *\n * @default 1\n */\n step?: number\n /**\n * The value of the slider.\n */\n value?: Y\n /**\n * This is used to format the value so that screen readers\n * can speak out a more human-friendly value.\n *\n * It is used to set the `aria-valuetext` property of the input.\n */\n getAriaValueText?: (value: number, index: number) => string | undefined\n /**\n * Function called whenever the slider value changes.\n */\n onChange?: (value: Y) => void\n /**\n * Function called when the user is done selecting a new value.\n */\n onChangeEnd?: (value: Y) => void\n /**\n * Function called when the user starts selecting a new value.\n */\n onChangeStart?: (value: Y) => void\n}\n\nexport const useSlider = <Y extends [number, number] | number = number>(\n props: UseSliderProps<Y> = {},\n) => {\n const {\n props: {\n id,\n ref,\n name,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-valuetext\": ariaValueText,\n betweenThumbs = 0,\n defaultValue = 0 as Y,\n disabled,\n getAriaValueText,\n max = 100,\n min = 0,\n orientation = \"horizontal\",\n readOnly,\n required,\n step = 1,\n value: valueProp,\n onChange: onChangeProp,\n onChangeEnd,\n onChangeStart,\n ...rest\n },\n ariaProps,\n dataProps,\n eventProps,\n } = useFieldProps(props)\n const [value, setValue] = useControllableState({\n defaultValue,\n value: valueProp,\n onChange: onChangeProp,\n })\n const { t } = useI18n(\"slider\")\n const currentIndex = useRef(0)\n const interactive = !(disabled || readOnly)\n const [_, getPanEventProps] = usePanEvent<HTMLDivElement>({\n onEnd: (_, point, rect) => {\n if (!interactive) return\n\n const panValue = getPanValue(point, rect)\n\n if (range) {\n const start = currentIndex.current === 0\n const oppositeIndex = currentIndex.current === 0 ? 1 : 0\n const oppositeValue = value[oppositeIndex]\n\n onChangeEnd?.(\n (start ? [panValue, oppositeValue] : [oppositeValue, panValue]) as Y,\n )\n } else {\n onChangeEnd?.(panValue as Y)\n }\n },\n onMove: (_, point, rect) => {\n if (!interactive) return\n\n const panValue = getPanValue(point, rect)\n\n onChange(currentIndex.current, panValue)\n },\n onStart: (_, point, rect) => {\n if (!interactive) return\n\n const panValue = getPanValue(point, rect)\n\n if (range) {\n const distances = value.map((value) => Math.abs(value - panValue))\n const closest = Math.min(...distances)\n const index = distances.indexOf(closest)\n\n currentIndex.current = index\n\n const start = index === 0\n const oppositeIndex = index === 0 ? 1 : 0\n const oppositeValue = value[oppositeIndex]\n\n onChangeStart?.(\n (start ? [panValue, oppositeValue] : [oppositeValue, panValue]) as Y,\n )\n } else {\n currentIndex.current = 0\n\n onChangeStart?.(value)\n }\n\n onChange(currentIndex.current, panValue)\n },\n })\n const range = !isNumber(value)\n const percent = (\n range\n ? value.map((value) => valueToPercent(value, min, max))\n : valueToPercent(value, min, max)\n ) as Y extends number ? number : number[]\n const tenStep = (max - min) / 10\n const oneStep = step || (max - min) / 100\n\n if (max < min) console.warn(\"Do not assign a number less than 'min' to 'max'\")\n\n const getMinMax = useCallback(\n (index: number) => {\n const start = index === 0\n const oppositeIndex = index === 0 ? 1 : 0\n const oppositeValue = range ? value[oppositeIndex] : value\n\n return {\n max: range ? (start ? oppositeValue - betweenThumbs : max) : max,\n min: range ? (start ? min : oppositeValue + betweenThumbs) : min,\n }\n },\n [betweenThumbs, max, min, range, value],\n )\n\n const getPanValue = useCallback(\n ({ x, y }: Point, { bottom, height, left, width }: DOMRect) => {\n const diff = orientation === \"horizontal\" ? x - left : bottom - y\n const length = orientation === \"horizontal\" ? width : height\n const percent = diff / length\n\n let nextValue = percentToValue(percent, min, max)\n\n nextValue = parseFloat(roundNumberToStep(nextValue, min, step))\n nextValue = clampNumber(nextValue, min, max)\n\n return nextValue\n },\n [orientation, min, max, step],\n )\n\n const onChange = useCallback(\n (index: number, value: number) => {\n if (!interactive) return\n\n const { max, min } = getMinMax(index)\n\n value = parseFloat(roundNumberToStep(value, min, oneStep))\n value = clampNumber(value, min, max)\n\n setValue((prev) => {\n if (isArray(prev)) {\n const next = [...prev]\n\n next[index] = value\n\n return next as Y\n } else {\n return value as Y\n }\n })\n },\n [getMinMax, interactive, oneStep, setValue],\n )\n\n const stepUp = useCallback(\n (index: number, step = oneStep) =>\n range\n ? onChange(index, value[index]! + step)\n : onChange(index, value + step),\n [oneStep, range, onChange, value],\n )\n\n const stepDown = useCallback(\n (index: number, step = oneStep) =>\n range\n ? onChange(index, value[index]! - step)\n : onChange(index, value - step),\n [oneStep, range, onChange, value],\n )\n\n const onKeyDown = useCallback(\n (index: number) => (ev: KeyboardEvent<HTMLDivElement>) => {\n const { max, min } = getMinMax(index)\n\n runKeyAction(ev, {\n ArrowDown: () => stepDown(index),\n ArrowLeft: () => stepDown(index),\n ArrowRight: () => stepUp(index),\n ArrowUp: () => stepUp(index),\n End: () => onChange(index, max),\n Home: () => onChange(index, min),\n PageDown: () => stepDown(index, tenStep),\n PageUp: () => stepUp(index, tenStep),\n })\n },\n [getMinMax, onChange, stepDown, stepUp, tenStep],\n )\n\n const getRootProps: PropGetter = useCallback(\n (props = {}) => {\n const computedProps: HTMLProps = mergeProps(\n dataProps,\n { \"data-orientation\": orientation },\n rest,\n props,\n { onBlur: eventProps.onBlur, onFocus: eventProps.onFocus },\n )()\n\n computedProps.style ??= {}\n\n if (isArray(percent)) {\n computedProps.style[\"--range-start\"] = `${Math.abs(percent[0]!)}%`\n computedProps.style[\"--range-end\"] = `${Math.abs(percent[1]!)}%`\n } else {\n computedProps.style[\"--range-start\"] = \"0%\"\n computedProps.style[\"--range-end\"] = `${Math.abs(percent)}%`\n }\n\n return computedProps\n },\n [dataProps, eventProps, orientation, percent, rest],\n )\n\n const getInputProps: PropGetter<\"input\", { index?: number }> = useCallback(\n ({ index = 0, ...props } = {}) => ({\n ...visuallyHiddenAttributes,\n ...dataProps,\n ...ariaProps,\n id,\n type: \"hidden\",\n name,\n disabled,\n readOnly,\n required,\n value: range ? value[index]! : value,\n ...props,\n ref: index === 0 ? mergeRefs(props.ref, ref) : props.ref,\n }),\n [\n dataProps,\n ariaProps,\n id,\n name,\n disabled,\n readOnly,\n required,\n range,\n value,\n ref,\n ],\n )\n\n const getTrackProps: PropGetter = useCallback(\n (props) =>\n getPanEventProps({\n ...dataProps,\n \"data-orientation\": orientation,\n ...props,\n }),\n [dataProps, getPanEventProps, orientation],\n )\n\n const getRangeProps: PropGetter = useCallback(\n (props) => ({\n ...dataProps,\n \"data-orientation\": orientation,\n \"data-range\": dataAttr(range),\n ...props,\n }),\n [dataProps, orientation, range],\n )\n\n const getMarkProps: RequiredPropGetter<\"div\", { value: number }> =\n useCallback(\n ({ style, value: valueProp, ...props }) => {\n const between = range\n ? value[0] < valueProp && valueProp < value[1]\n : valueProp < value\n const percent = valueToPercent(valueProp, min, max)\n\n return {\n ...dataProps,\n \"aria-hidden\": true,\n \"data-between\": dataAttr(between),\n \"data-orientation\": orientation,\n role: \"presentation\",\n ...props,\n style: { ...style, \"--mark-position\": `${percent}%` },\n }\n },\n [dataProps, max, min, orientation, range, value],\n )\n\n const getThumbProps: PropGetter<\"div\", { index?: number }> = useCallback(\n ({ index = 0, ...rest } = {}) => {\n const { max, min } = getMinMax(index)\n\n const props: HTMLProps = {\n ...dataProps,\n ...ariaProps,\n \"aria-label\": t(\"Slider thumb\"),\n \"aria-orientation\": orientation,\n \"aria-valuemax\": max,\n \"aria-valuemin\": min,\n role: \"slider\",\n tabIndex: interactive ? 0 : -1,\n ...rest,\n \"aria-labelledby\": cx(rest[\"aria-labelledby\"], ariaLabelledBy),\n onKeyDown: handlerAll(rest.onKeyDown, onKeyDown(index)),\n }\n\n if (range) {\n const currentValue = value[index]!\n\n props[\"data-start\"] = dataAttr(index === 0)\n props[\"data-end\"] = dataAttr(index === 1)\n props[\"aria-valuenow\"] = currentValue\n props[\"aria-valuetext\"] =\n ariaValueText ??\n getAriaValueText?.(currentValue, index) ??\n currentValue.toString()\n } else {\n props[\"data-end\"] = dataAttr(index === 0)\n props[\"aria-valuenow\"] = value\n props[\"aria-valuetext\"] =\n ariaValueText ?? getAriaValueText?.(value, index) ?? value.toString()\n }\n\n return props\n },\n [\n t,\n ariaLabelledBy,\n ariaProps,\n ariaValueText,\n dataProps,\n getAriaValueText,\n getMinMax,\n interactive,\n onKeyDown,\n orientation,\n range,\n value,\n ],\n )\n\n return {\n percent,\n range,\n setValue,\n stepDown,\n stepUp,\n value,\n getInputProps,\n getMarkProps,\n getRangeProps,\n getRootProps,\n getThumbProps,\n getTrackProps,\n onChange,\n }\n}\n\nexport type UseSliderReturn = ReturnType<typeof useSlider>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"create-component.js","names":["createContext"],"sources":["../../../../src/core/components/create-component.tsx"],"sourcesContent":["\"use client\"\n\nimport type { FC, FunctionComponent } from \"react\"\nimport type { AnyString, Dict, Merge } from \"../../utils\"\nimport type { CSSObject, CSSSlotObject } from \"../css\"\nimport type {\n ComponentSlotStyle,\n ComponentStyle,\n StyledOptions,\n System,\n WithoutThemeProps,\n} from \"../system\"\nimport type {\n As,\n DOMElement,\n HTMLStyledProps,\n Component as OriginalComponent,\n} from \"./index.types\"\nimport { Fragment } from \"react\"\nimport {\n createContext,\n cx,\n isArray,\n isFunction,\n isObject,\n isString,\n runIfFn,\n toArray,\n toCamelCase,\n toPascalCase,\n} from \"../../utils\"\nimport { styled, useSystem } from \"../system\"\nimport { chainProps, mergeProps } from \"./props\"\nimport {\n getSlotClassName,\n mergeSlotCSS,\n useComponentSlotStyle,\n useComponentStyle,\n} from \"./use-component-style\"\nimport { getClassName, getDisplayName } from \"./utils\"\n\ntype AsWithFragment = \"fragment\" | As\ntype ClassName = ((system: System) => string) | string\n\ntype Component<\n Y extends AsWithFragment = AsWithFragment,\n M extends object = {},\n> = Y extends \"fragment\"\n ? FunctionComponent<M>\n : OriginalComponent<Exclude<Y, \"fragment\">, M>\n\nexport type ComponentSlotName<\n Y extends ComponentSlotStyle | ComponentStyle = ComponentSlotStyle,\n> = AnyString | Extract<keyof NonNullable<Y[\"base\"]>, string>\n\nexport type ComponentSlot<Y extends string> =\n | [Y, Y]\n | Y\n | { name: string; slot: [Y, Y] | Y }\n\nexport type InitialProps<Y extends Dict = Dict> =\n | ((props: Y) => any)\n | Partial<Y>\nexport type SuperProps<Y extends Dict = Dict> = ((props: Y) => any) | Y\n\nexport type SuperWithoutThemeProps<\n Y extends Dict = Dict,\n M extends Dict = Dict,\n D extends keyof Y = keyof Y,\n> = ((props: WithoutThemeProps<Y, M, D>) => any) | WithoutThemeProps<Y, M, D>\n\nexport interface UseComponentPropsOptions<\n Y extends number | string | symbol = string,\n> {\n className?: ClassName\n withContext?: boolean\n transferProps?: Y[]\n}\n\nexport interface ComponentOptions extends Omit<StyledOptions, \"transferProps\"> {\n className?: ClassName\n shouldStyleProps?: boolean\n}\n\ninterface classNameOptions<Y extends string = string> {\n className?: ClassName\n slot?: ComponentSlot<Y>\n}\n\nexport interface ComponentWithContextOptions<\n Y extends number | string | symbol = string,\n>\n extends ComponentOptions, UseComponentPropsOptions<Y> {}\n\nfunction createProxyComponent<\n Y extends AsWithFragment = \"div\",\n M extends Dict = Dict,\n>(el: FC<M> | Y, { shouldStyleProps, ...options }: ComponentOptions = {}) {\n options.shouldForwardProp ??= isFunction(el)\n shouldStyleProps ??= !isFunction(el)\n\n if (el === \"fragment\") el = Fragment\n\n if (shouldStyleProps || isString(el)) {\n const ProxyComponent = styled(el as As, options)\n\n ProxyComponent.displayName = \"ProxyComponent\"\n\n return ProxyComponent\n } else {\n el.displayName ??= \"ProxyComponent\"\n\n return el as FC<M>\n }\n}\n\nfunction withDisplayName<\n Y extends AsWithFragment = AsWithFragment,\n M extends object = {},\n>(Component: FC<M>, displayName: string) {\n Object.defineProperty(Component, \"name\", { value: displayName })\n Object.defineProperty(Component, \"displayName\", { value: displayName })\n\n return Component as Component<Y, M>\n}\n\nfunction getSlotKey<Y extends string>(slot?: ComponentSlot<Y>) {\n if (!slot) return \"unknown\"\n\n if (isArray(slot) || !isObject(slot))\n return toCamelCase(toArray(slot).join(\"-\"))\n else return toCamelCase(slot.name)\n}\n\nfunction getSlotName<Y extends string>(slot?: ComponentSlot<Y>) {\n if (!slot) return \"\"\n\n if (isArray(slot))\n return slot.map((value) => toPascalCase(value as string)).join(\"\")\n else if (isObject(slot)) return toPascalCase(slot.name)\n else return toPascalCase(slot as string)\n}\n\nexport function createComponent<\n Y extends object = {},\n M extends ComponentStyle = Dict,\n D extends Dict = Dict,\n>(name: string, style?: M) {\n const defaultClassName = style?.className\n const defaultDisplayName = getDisplayName(name)\n const [ComponentContext, useComponentContext] = createContext<D>({\n name: `${defaultDisplayName}Context`,\n })\n const [PropsContext, usePropsContext] = createContext<Partial<Y>>({\n name: `${defaultDisplayName}PropsContext`,\n strict: false,\n })\n\n function useClassName(name?: string, className?: ClassName) {\n const system = useSystem()\n\n className = runIfFn(className, system)\n className ??= getClassName(name, defaultClassName)(system)\n\n return className\n }\n\n function useComponentProps<H extends Y = Y, R extends keyof H = keyof H>(\n props: H,\n {\n className,\n withContext = true,\n transferProps,\n }: UseComponentPropsOptions<R> = {},\n ) {\n const system = useSystem()\n\n className = runIfFn(className, system)\n className ??= defaultClassName\n className ??= getClassName(name)(system)\n\n const contextProps = usePropsContext() ?? {}\n const mergedProps = withContext\n ? (mergeProps(contextProps, props)() as H)\n : props\n const [, rest] = useComponentStyle(mergedProps, {\n name,\n className,\n style,\n transferProps,\n })\n\n return rest\n }\n\n function component<D extends AsWithFragment = \"div\", H extends Dict = Y>(\n el: D | FC<H>,\n { name, className, ...options }: ComponentOptions = {},\n ) {\n const displayName = getDisplayName(name, defaultDisplayName)\n const ProxyComponent = createProxyComponent(el, options)\n\n return function (\n initialProps?: InitialProps<H>,\n ...superProps: SuperProps<H>[]\n ) {\n return withDisplayName<D, H>((props) => {\n className = useClassName(name, className)\n\n const computedProps = isFunction(initialProps)\n ? initialProps(props)\n : mergeProps(initialProps ?? {}, props)()\n const mergedProps = chainProps<any>(...superProps)()(computedProps)\n\n return (\n <ProxyComponent\n {...mergedProps}\n className={cx(className, mergedProps.className)}\n />\n )\n }, displayName)\n }\n }\n\n function withContext<\n D extends AsWithFragment = \"div\",\n H extends Y = Y,\n R extends keyof H = keyof H,\n >(\n el: D | FC<WithoutThemeProps<H, M, R>>,\n {\n name,\n className,\n withContext,\n transferProps,\n ...options\n }: ComponentWithContextOptions<R> = {},\n ) {\n const displayName = getDisplayName(name, defaultDisplayName)\n const ProxyComponent = createProxyComponent(el, options)\n\n return function (\n initialProps?: InitialProps<H>,\n ...superProps: SuperWithoutThemeProps<H, M, R>[]\n ) {\n return withDisplayName<D, H>((props) => {\n className = useClassName(name, className)\n\n const computedProps = isFunction(initialProps)\n ? initialProps(props)\n : mergeProps(initialProps ?? {}, props)()\n const mergedProps = useComponentProps(computedProps, {\n className,\n withContext,\n transferProps,\n })\n const rest = chainProps<any>(...toArray(superProps))()(mergedProps)\n\n return <ProxyComponent {...rest} />\n }, displayName)\n }\n }\n\n return {\n component,\n ComponentContext,\n PropsContext,\n useComponentContext,\n usePropsContext,\n withContext,\n useComponentProps,\n }\n}\n\nexport function createSlotComponent<\n Y extends object = {},\n M extends ComponentSlotStyle = Dict,\n D extends Dict = Dict,\n>(rootName: string, style?: M) {\n const rootClassName = style?.className\n const rootDisplayName = getDisplayName(rootName)\n const classNameMap = new Map<string, classNameOptions>()\n const [StyleContext, useStyleContext] = createContext<\n CSSSlotObject<ComponentSlotName<M>>\n >({\n name: `${rootDisplayName}StyleContext`,\n })\n const [ComponentContext, useComponentContext] = createContext<D>({\n name: `${rootDisplayName}Context`,\n })\n const [PropsContext, usePropsContext] = createContext<Partial<Y>>({\n name: `${rootDisplayName}PropsContext`,\n strict: false,\n })\n\n function useClassName(\n slot?: ComponentSlot<ComponentSlotName<M>>,\n className?: ClassName,\n ) {\n const system = useSystem()\n\n className = runIfFn(className, system)\n className ??= getSlotClassName(\n rootClassName ?? getClassName(rootName)(system),\n slot,\n )\n\n return className\n }\n\n function useClassNames() {\n const system = useSystem()\n const entries = classNameMap.entries().map(([key, { className, slot }]) => {\n className = runIfFn(className, system)\n className ??= getSlotClassName(\n rootClassName ?? getClassName(rootName)(system),\n slot,\n )\n\n return [key, className]\n })\n\n return Object.fromEntries(\n entries.filter(([_, className]) => className),\n ) as { [key: string]: string }\n }\n\n function useRootComponentProps<\n Y extends Dict = {},\n R extends keyof Y = keyof Y,\n >(\n props: Y,\n slot?: ComponentSlot<ComponentSlotName<M>>,\n {\n className,\n withContext = true,\n transferProps,\n }: UseComponentPropsOptions<R> = {},\n ): [\n CSSSlotObject,\n Merge<WithoutThemeProps<Y, M, R>, { css?: CSSObject | CSSObject[] }>,\n ] {\n className = useClassName(slot, className)\n\n const contextProps = usePropsContext() ?? {}\n const mergedProps = withContext\n ? (mergeProps(contextProps, props)() as Y)\n : props\n const [css, rest] = useComponentSlotStyle(mergedProps, {\n name: rootName,\n className,\n style,\n slot,\n transferProps,\n })\n\n return [css, rest]\n }\n\n function useSlotComponentProps<Y extends Dict = {}>(\n props: Y,\n slot?: ComponentSlot<ComponentSlotName<M>>,\n { className }: Omit<UseComponentPropsOptions, \"transferProps\"> = {},\n ) {\n className = useClassName(slot, className)\n\n const style = useStyleContext()\n\n return {\n ...props,\n className: cx(className, props.className),\n css: mergeSlotCSS(slot, style, props.css),\n }\n }\n\n function component<H extends AsWithFragment = \"div\", R extends Dict = Dict>(\n el: FC<R> | H,\n slot?: ComponentSlot<ComponentSlotName<M>>,\n { name, className, ...options }: ComponentOptions = {},\n ) {\n const ProxyComponent = createProxyComponent(el, options)\n const slotKey = getSlotKey(slot)\n const slotName = getSlotName(slot)\n const displayName = getDisplayName(name, `${rootDisplayName}${slotName}`)\n\n classNameMap.set(slotKey, { className, slot })\n\n return function (\n initialProps?: InitialProps<R>,\n ...superProps: SuperProps<R>[]\n ) {\n return withDisplayName<H, R>((props) => {\n className = useClassName(slot, className)\n\n const computedProps = isFunction(initialProps)\n ? initialProps(props)\n : mergeProps(initialProps ?? {}, props)()\n const mergedProps = chainProps(...superProps)()(computedProps)\n\n return (\n <ProxyComponent\n {...mergedProps}\n className={cx(className, mergedProps.className)}\n />\n )\n }, displayName)\n }\n }\n\n function withProvider<\n H extends AsWithFragment = \"div\",\n R extends Y = Y,\n T extends keyof R = keyof R,\n >(\n el: FC<WithoutThemeProps<R, M, T>> | H,\n slot: ComponentSlot<ComponentSlotName<M>> = \"root\" as ComponentSlot<\n ComponentSlotName<M>\n >,\n {\n name,\n className,\n withContext,\n transferProps,\n ...options\n }: ComponentWithContextOptions<T> = {},\n ) {\n const ProxyComponent = createProxyComponent(el, options)\n const slotKey = getSlotKey(slot)\n const slotName = getSlotName(slot)\n const displayName = getDisplayName(name, `${rootDisplayName}${slotName}`)\n\n classNameMap.set(slotKey, { className, slot })\n\n return function (\n initialProps?: InitialProps<R>,\n ...superProps: SuperWithoutThemeProps<R, M, T>[]\n ) {\n return withDisplayName<H, R>((props) => {\n const computedProps = isFunction(initialProps)\n ? initialProps(props)\n : mergeProps(initialProps ?? {}, props)()\n const [context, mergedProps] = useRootComponentProps(\n computedProps,\n slot,\n {\n className,\n withContext,\n transferProps,\n },\n )\n const rest = chainProps<any>(...superProps)()(mergedProps)\n\n return (\n <StyleContext value={context}>\n <ProxyComponent {...rest} />\n </StyleContext>\n )\n }, displayName)\n }\n }\n\n function withContext<\n H extends AsWithFragment = \"div\",\n R extends Dict = H extends DOMElement ? HTMLStyledProps<H> : Dict,\n >(\n el: FC<R> | H,\n slot?: ComponentSlot<ComponentSlotName<M>>,\n {\n name,\n className,\n withContext,\n ...options\n }: Omit<ComponentWithContextOptions, \"transferProps\"> = {},\n ) {\n const ProxyComponent = createProxyComponent(el, options)\n const slotKey = getSlotKey(slot)\n const slotName = getSlotName(slot)\n const displayName = getDisplayName(name, `${rootDisplayName}${slotName}`)\n\n classNameMap.set(slotKey, { className, slot })\n\n return function (\n initialProps?: InitialProps<R>,\n ...superProps: SuperProps<R>[]\n ) {\n return withDisplayName<H, R>((props) => {\n const computedProps = isFunction(initialProps)\n ? initialProps(props)\n : mergeProps(initialProps ?? {}, props)()\n const mergedProps = useSlotComponentProps(computedProps, slot, {\n className,\n withContext,\n })\n const rest = chainProps(...superProps)()(mergedProps)\n\n return <ProxyComponent {...rest} />\n }, displayName)\n }\n }\n\n return {\n component,\n ComponentContext,\n PropsContext,\n StyleContext,\n useClassNames,\n useComponentContext,\n usePropsContext,\n useStyleContext,\n withContext,\n withProvider,\n useRootComponentProps,\n useSlotComponentProps,\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"create-component.js","names":["createContext"],"sources":["../../../../src/core/components/create-component.tsx"],"sourcesContent":["\"use client\"\n\nimport type { FC, FunctionComponent } from \"react\"\nimport type { AnyString, Dict, Merge } from \"../../utils\"\nimport type { CSSObject, CSSSlotObject } from \"../css\"\nimport type {\n ComponentSlotStyle,\n ComponentStyle,\n StyledOptions,\n System,\n WithoutThemeProps,\n} from \"../system\"\nimport type {\n As,\n DOMElement,\n HTMLStyledProps,\n Component as OriginalComponent,\n} from \"./index.types\"\nimport { Fragment } from \"react\"\nimport {\n createContext,\n cx,\n isArray,\n isFunction,\n isObject,\n isString,\n runIfFn,\n toArray,\n toCamelCase,\n toPascalCase,\n} from \"../../utils\"\nimport { styled, useSystem } from \"../system\"\nimport { chainProps, mergeProps } from \"./props\"\nimport {\n getSlotClassName,\n mergeSlotCSS,\n useComponentSlotStyle,\n useComponentStyle,\n} from \"./use-component-style\"\nimport { getClassName, getDisplayName } from \"./utils\"\n\ntype AsWithFragment = \"fragment\" | As\ntype ClassName = ((system: System) => string) | string\n\ntype Component<\n Y extends AsWithFragment = AsWithFragment,\n M extends object = {},\n> = Y extends \"fragment\"\n ? FunctionComponent<M>\n : OriginalComponent<Exclude<Y, \"fragment\">, M>\n\nexport type ComponentSlotName<\n Y extends ComponentSlotStyle | ComponentStyle = ComponentSlotStyle,\n> = AnyString | Extract<keyof NonNullable<Y[\"base\"]>, string>\n\nexport type ComponentSlot<Y extends string> =\n | [Y, Y]\n | Y\n | { name: string; slot: [Y, Y] | Y }\n\nexport type InitialProps<Y extends Dict = Dict> =\n | ((props: Y) => any)\n | Partial<Y>\nexport type SuperProps<Y extends Dict = Dict> = ((props: Y) => any) | Y\n\nexport type SuperWithoutThemeProps<\n Y extends Dict = Dict,\n M extends Dict = Dict,\n D extends keyof Y = keyof Y,\n> = ((props: WithoutThemeProps<Y, M, D>) => any) | WithoutThemeProps<Y, M, D>\n\nexport interface UseComponentPropsOptions<\n Y extends number | string | symbol = string,\n> {\n className?: ClassName\n withContext?: boolean\n transferProps?: Y[]\n}\n\nexport interface ComponentOptions extends Omit<StyledOptions, \"transferProps\"> {\n className?: ClassName\n shouldStyleProps?: boolean\n}\n\ninterface classNameOptions<Y extends string = string> {\n className?: ClassName\n slot?: ComponentSlot<Y>\n}\n\nexport interface ComponentWithContextOptions<\n Y extends number | string | symbol = string,\n>\n extends ComponentOptions, UseComponentPropsOptions<Y> {}\n\nfunction createProxyComponent<\n Y extends AsWithFragment = \"div\",\n M extends Dict = Dict,\n>(el: FC<M> | Y, { shouldStyleProps, ...options }: ComponentOptions = {}) {\n options.shouldForwardProp ??= isFunction(el)\n shouldStyleProps ??= !isFunction(el)\n\n if (el === \"fragment\") el = Fragment\n\n if (shouldStyleProps || isString(el)) {\n const ProxyComponent = styled(el as As, options)\n\n ProxyComponent.displayName = \"ProxyComponent\"\n\n return ProxyComponent\n } else {\n el.displayName ??= \"ProxyComponent\"\n\n return el as FC<M>\n }\n}\n\nfunction withDisplayName<\n Y extends AsWithFragment = AsWithFragment,\n M extends object = {},\n>(Component: FC<M>, displayName: string) {\n Object.defineProperty(Component, \"name\", { value: displayName })\n Object.defineProperty(Component, \"displayName\", { value: displayName })\n\n return Component as Component<Y, M>\n}\n\nfunction getSlotKey<Y extends string>(slot?: ComponentSlot<Y>) {\n if (!slot) return \"unknown\"\n\n if (isArray(slot) || !isObject(slot))\n return toCamelCase(toArray(slot).join(\"-\"))\n else return toCamelCase(slot.name)\n}\n\nfunction getSlotName<Y extends string>(slot?: ComponentSlot<Y>) {\n if (!slot) return \"\"\n\n if (isArray(slot))\n return slot.map((value) => toPascalCase(value as string)).join(\"\")\n else if (isObject(slot)) return toPascalCase(slot.name)\n else return toPascalCase(slot)\n}\n\nexport function createComponent<\n Y extends object = {},\n M extends ComponentStyle = Dict,\n D extends Dict = Dict,\n>(name: string, style?: M) {\n const defaultClassName = style?.className\n const defaultDisplayName = getDisplayName(name)\n const [ComponentContext, useComponentContext] = createContext<D>({\n name: `${defaultDisplayName}Context`,\n })\n const [PropsContext, usePropsContext] = createContext<Partial<Y>>({\n name: `${defaultDisplayName}PropsContext`,\n strict: false,\n })\n\n function useClassName(name?: string, className?: ClassName) {\n const system = useSystem()\n\n className = runIfFn(className, system)\n className ??= getClassName(name, defaultClassName)(system)\n\n return className\n }\n\n function useComponentProps<H extends Y = Y, R extends keyof H = keyof H>(\n props: H,\n {\n className,\n withContext = true,\n transferProps,\n }: UseComponentPropsOptions<R> = {},\n ) {\n const system = useSystem()\n\n className = runIfFn(className, system)\n className ??= defaultClassName\n className ??= getClassName(name)(system)\n\n const contextProps = usePropsContext() ?? {}\n const mergedProps = withContext\n ? (mergeProps(contextProps, props)() as H)\n : props\n const [, rest] = useComponentStyle(mergedProps, {\n name,\n className,\n style,\n transferProps,\n })\n\n return rest\n }\n\n function component<D extends AsWithFragment = \"div\", H extends Dict = Y>(\n el: D | FC<H>,\n { name, className, ...options }: ComponentOptions = {},\n ) {\n const displayName = getDisplayName(name, defaultDisplayName)\n const ProxyComponent = createProxyComponent(el, options)\n\n return function (\n initialProps?: InitialProps<H>,\n ...superProps: SuperProps<H>[]\n ) {\n return withDisplayName<D, H>((props) => {\n className = useClassName(name, className)\n\n const computedProps = isFunction(initialProps)\n ? initialProps(props)\n : mergeProps(initialProps ?? {}, props)()\n const mergedProps = chainProps<any>(...superProps)()(computedProps)\n\n return (\n <ProxyComponent\n {...mergedProps}\n className={cx(className, mergedProps.className)}\n />\n )\n }, displayName)\n }\n }\n\n function withContext<\n D extends AsWithFragment = \"div\",\n H extends Y = Y,\n R extends keyof H = keyof H,\n >(\n el: D | FC<WithoutThemeProps<H, M, R>>,\n {\n name,\n className,\n withContext,\n transferProps,\n ...options\n }: ComponentWithContextOptions<R> = {},\n ) {\n const displayName = getDisplayName(name, defaultDisplayName)\n const ProxyComponent = createProxyComponent(el, options)\n\n return function (\n initialProps?: InitialProps<H>,\n ...superProps: SuperWithoutThemeProps<H, M, R>[]\n ) {\n return withDisplayName<D, H>((props) => {\n className = useClassName(name, className)\n\n const computedProps = isFunction(initialProps)\n ? initialProps(props)\n : mergeProps(initialProps ?? {}, props)()\n const mergedProps = useComponentProps(computedProps, {\n className,\n withContext,\n transferProps,\n })\n const rest = chainProps<any>(...toArray(superProps))()(mergedProps)\n\n return <ProxyComponent {...rest} />\n }, displayName)\n }\n }\n\n return {\n component,\n ComponentContext,\n PropsContext,\n useComponentContext,\n usePropsContext,\n withContext,\n useComponentProps,\n }\n}\n\nexport function createSlotComponent<\n Y extends object = {},\n M extends ComponentSlotStyle = Dict,\n D extends Dict = Dict,\n>(rootName: string, style?: M) {\n const rootClassName = style?.className\n const rootDisplayName = getDisplayName(rootName)\n const classNameMap = new Map<string, classNameOptions>()\n const [StyleContext, useStyleContext] = createContext<\n CSSSlotObject<ComponentSlotName<M>>\n >({\n name: `${rootDisplayName}StyleContext`,\n })\n const [ComponentContext, useComponentContext] = createContext<D>({\n name: `${rootDisplayName}Context`,\n })\n const [PropsContext, usePropsContext] = createContext<Partial<Y>>({\n name: `${rootDisplayName}PropsContext`,\n strict: false,\n })\n\n function useClassName(\n slot?: ComponentSlot<ComponentSlotName<M>>,\n className?: ClassName,\n ) {\n const system = useSystem()\n\n className = runIfFn(className, system)\n className ??= getSlotClassName(\n rootClassName ?? getClassName(rootName)(system),\n slot,\n )\n\n return className\n }\n\n function useClassNames() {\n const system = useSystem()\n const entries = classNameMap.entries().map(([key, { className, slot }]) => {\n className = runIfFn(className, system)\n className ??= getSlotClassName(\n rootClassName ?? getClassName(rootName)(system),\n slot,\n )\n\n return [key, className]\n })\n\n return Object.fromEntries(\n entries.filter(([_, className]) => className),\n ) as { [key: string]: string }\n }\n\n function useRootComponentProps<\n Y extends Dict = {},\n R extends keyof Y = keyof Y,\n >(\n props: Y,\n slot?: ComponentSlot<ComponentSlotName<M>>,\n {\n className,\n withContext = true,\n transferProps,\n }: UseComponentPropsOptions<R> = {},\n ): [\n CSSSlotObject,\n Merge<WithoutThemeProps<Y, M, R>, { css?: CSSObject | CSSObject[] }>,\n ] {\n className = useClassName(slot, className)\n\n const contextProps = usePropsContext() ?? {}\n const mergedProps = withContext\n ? (mergeProps(contextProps, props)() as Y)\n : props\n const [css, rest] = useComponentSlotStyle(mergedProps, {\n name: rootName,\n className,\n style,\n slot,\n transferProps,\n })\n\n return [css, rest]\n }\n\n function useSlotComponentProps<Y extends Dict = {}>(\n props: Y,\n slot?: ComponentSlot<ComponentSlotName<M>>,\n { className }: Omit<UseComponentPropsOptions, \"transferProps\"> = {},\n ) {\n className = useClassName(slot, className)\n\n const style = useStyleContext()\n\n return {\n ...props,\n className: cx(className, props.className),\n css: mergeSlotCSS(slot, style, props.css),\n }\n }\n\n function component<H extends AsWithFragment = \"div\", R extends Dict = Dict>(\n el: FC<R> | H,\n slot?: ComponentSlot<ComponentSlotName<M>>,\n { name, className, ...options }: ComponentOptions = {},\n ) {\n const ProxyComponent = createProxyComponent(el, options)\n const slotKey = getSlotKey(slot)\n const slotName = getSlotName(slot)\n const displayName = getDisplayName(name, `${rootDisplayName}${slotName}`)\n\n classNameMap.set(slotKey, { className, slot })\n\n return function (\n initialProps?: InitialProps<R>,\n ...superProps: SuperProps<R>[]\n ) {\n return withDisplayName<H, R>((props) => {\n className = useClassName(slot, className)\n\n const computedProps = isFunction(initialProps)\n ? initialProps(props)\n : mergeProps(initialProps ?? {}, props)()\n const mergedProps = chainProps(...superProps)()(computedProps)\n\n return (\n <ProxyComponent\n {...mergedProps}\n className={cx(className, mergedProps.className)}\n />\n )\n }, displayName)\n }\n }\n\n function withProvider<\n H extends AsWithFragment = \"div\",\n R extends Y = Y,\n T extends keyof R = keyof R,\n >(\n el: FC<WithoutThemeProps<R, M, T>> | H,\n slot: ComponentSlot<ComponentSlotName<M>> = \"root\",\n {\n name,\n className,\n withContext,\n transferProps,\n ...options\n }: ComponentWithContextOptions<T> = {},\n ) {\n const ProxyComponent = createProxyComponent(el, options)\n const slotKey = getSlotKey(slot)\n const slotName = getSlotName(slot)\n const displayName = getDisplayName(name, `${rootDisplayName}${slotName}`)\n\n classNameMap.set(slotKey, { className, slot })\n\n return function (\n initialProps?: InitialProps<R>,\n ...superProps: SuperWithoutThemeProps<R, M, T>[]\n ) {\n return withDisplayName<H, R>((props) => {\n const computedProps = isFunction(initialProps)\n ? initialProps(props)\n : mergeProps(initialProps ?? {}, props)()\n const [context, mergedProps] = useRootComponentProps(\n computedProps,\n slot,\n {\n className,\n withContext,\n transferProps,\n },\n )\n const rest = chainProps<any>(...superProps)()(mergedProps)\n\n return (\n <StyleContext value={context}>\n <ProxyComponent {...rest} />\n </StyleContext>\n )\n }, displayName)\n }\n }\n\n function withContext<\n H extends AsWithFragment = \"div\",\n R extends Dict = H extends DOMElement ? HTMLStyledProps<H> : Dict,\n >(\n el: FC<R> | H,\n slot?: ComponentSlot<ComponentSlotName<M>>,\n {\n name,\n className,\n withContext,\n ...options\n }: Omit<ComponentWithContextOptions, \"transferProps\"> = {},\n ) {\n const ProxyComponent = createProxyComponent(el, options)\n const slotKey = getSlotKey(slot)\n const slotName = getSlotName(slot)\n const displayName = getDisplayName(name, `${rootDisplayName}${slotName}`)\n\n classNameMap.set(slotKey, { className, slot })\n\n return function (\n initialProps?: InitialProps<R>,\n ...superProps: SuperProps<R>[]\n ) {\n return withDisplayName<H, R>((props) => {\n const computedProps = isFunction(initialProps)\n ? initialProps(props)\n : mergeProps(initialProps ?? {}, props)()\n const mergedProps = useSlotComponentProps(computedProps, slot, {\n className,\n withContext,\n })\n const rest = chainProps(...superProps)()(mergedProps)\n\n return <ProxyComponent {...rest} />\n }, displayName)\n }\n }\n\n return {\n component,\n ComponentContext,\n PropsContext,\n StyleContext,\n useClassNames,\n useComponentContext,\n usePropsContext,\n useStyleContext,\n withContext,\n withProvider,\n useRootComponentProps,\n useSlotComponentProps,\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-component-style.js","names":[],"sources":["../../../../src/core/components/use-component-style.ts"],"sourcesContent":["\"use client\"\n\nimport type { Dict } from \"../../utils\"\nimport type {\n ColorModeArray,\n CSSModifierObject,\n CSSObject,\n CSSPropObject,\n CSSSlotObject,\n ResponsiveWithConditionObject,\n StyleValueWithCondition,\n} from \"../css\"\nimport type {\n Breakpoints,\n ComponentCompound,\n ComponentSlotStyle,\n ComponentStyle,\n Layers,\n LayerScheme,\n ThemeProps,\n WithoutThemeProps,\n} from \"../system\"\nimport type { ComponentSlot, ComponentSlotName } from \"./create-component\"\nimport type { HTMLStyledProps } from \"./index.types\"\nimport { useRef } from \"react\"\nimport {\n bem,\n cx,\n filterEmpty,\n isArray,\n isBooleanish,\n isEmptyObject,\n isObject,\n isRegExp,\n isUndefined,\n merge,\n omitObject,\n toArray,\n toKebabCase,\n} from \"../../utils\"\nimport { conditions, getCondition, mergeCSS } from \"../css\"\nimport { useColorSchemeContext, useSystem } from \"../system\"\nimport { isEqualProps } from \"./props\"\n\ntype Style<Y extends boolean = false> = Y extends false\n ? CSSObject\n : CSSSlotObject\n\ntype MergedStyle = CSSModifierObject | CSSModifierObject<CSSSlotObject>\n\ninterface GetStyleOptions\n extends Partial<Breakpoints>, Pick<Partial<Layers>, \"wrap\"> {\n hasSlot?: boolean\n modifier?: string\n name?: string\n selectors?: (string | undefined)[]\n value?: string\n}\n\nfunction getSelectorStyle<Y extends Dict = Dict>(\n selectors: (string | undefined)[],\n style: Y,\n) {\n return selectors.reduceRight<Dict>(\n (prev, key) => (key ? { [key]: prev } : prev),\n style,\n ) as Y\n}\n\nfunction getStyle<Y extends boolean = false>(\n style: CSSObject | CSSSlotObject | undefined,\n) {\n return function ({\n name: rootName,\n hasSlot = false,\n modifier,\n selectors = [],\n value,\n }: GetStyleOptions): Style<Y> | undefined {\n if (!style || isEmptyObject(style)) return\n\n if (hasSlot) {\n return Object.fromEntries(\n Object.entries(style as CSSSlotObject).map(([name, style]) => {\n if (selectors.length) {\n if (value && modifier)\n style = {\n [`--${rootName}-${name}-${modifier}`]: `\"${value}\"`,\n ...style,\n } as CSSObject\n\n return [name, getSelectorStyle(selectors, style ?? {})]\n } else {\n if (value && modifier)\n style = {\n [`--${rootName}-${name}-${modifier}`]: `\"${value}\"`,\n ...style,\n } as CSSObject\n\n return [name, style]\n }\n }),\n ) as Style<Y>\n } else if (selectors.length) {\n if (value && modifier)\n style = {\n [`--${rootName}-${modifier}`]: `\"${value}\"`,\n ...style,\n } as CSSObject\n\n return getSelectorStyle(selectors, style) as Style<Y>\n } else {\n if (value && modifier)\n style = {\n [`--${rootName}-${modifier}`]: `\"${value}\"`,\n ...style,\n } as CSSObject\n\n return style as Style<Y>\n }\n }\n}\n\nfunction getColorModeStyle<Y extends boolean = false>(\n value: ColorModeArray<string>,\n mergedStyle: MergedStyle,\n) {\n return function ({ selectors = [], ...rest }: GetStyleOptions) {\n const [lightValue, darkValue] = value\n\n const lightStyle = getModifierStyle<Y>(\n lightValue,\n mergedStyle,\n )({ ...rest, selectors })\n\n const darkStyle = getModifierStyle<Y>(\n darkValue,\n mergedStyle,\n )({ ...rest, selectors: [...selectors, conditions._dark] })\n\n return merge(lightStyle, darkStyle)\n }\n}\n\nfunction getConditionStyle<Y extends boolean = false>(\n value: ResponsiveWithConditionObject<string>,\n mergedStyle: MergedStyle,\n) {\n return function (options: GetStyleOptions) {\n const { isResponsiveKey, queries = [], selectors = [] } = options\n const conditionalKeys = Object.keys(value).filter(\n (key) => !isResponsiveKey?.(key),\n )\n\n const breakpointObj = queries.reduce<Style<Y>>(\n (prev, { breakpoint, query }) => {\n if (!isUndefined(value[breakpoint]))\n prev = merge(\n prev,\n getModifierStyle<Y>(\n value[breakpoint],\n mergedStyle,\n )({ ...options, selectors: [...selectors, query] }),\n )\n\n return prev\n },\n {},\n )\n\n const additionalObj = conditionalKeys.reduce<Style<Y>>((prev, key) => {\n prev = merge(\n prev,\n getModifierStyle<Y>(\n value[key as keyof typeof value],\n mergedStyle,\n )({ ...options, selectors: [...selectors, getCondition(key)] }),\n )\n\n return prev\n }, {})\n\n return merge(breakpointObj, additionalObj)\n }\n}\n\nfunction getModifierStyle<Y extends boolean = false>(\n value: StyleValueWithCondition<string> | undefined,\n mergedStyle: MergedStyle,\n) {\n return function (options: GetStyleOptions): Style<Y> | undefined {\n let style: Style<Y> | undefined = undefined\n\n if (!value) return style\n\n if (isArray(value))\n style = getColorModeStyle<Y>(value, mergedStyle)(options)\n else if (isObject(value))\n style = getConditionStyle<Y>(value, mergedStyle)(options)\n else style = getStyle<Y>(mergedStyle[value])({ ...options, value })\n\n return style\n }\n}\n\nfunction getPropStyle<Y extends boolean = false>(\n props: Dict,\n propVariants: CSSPropObject | CSSPropObject<CSSSlotObject>,\n style: Style<Y> | undefined = {},\n) {\n const variants = Object.entries(propVariants)\n\n return function (options: GetStyleOptions) {\n if (!variants.length) return style\n\n variants.forEach(([modifier, variants]) => {\n const value = props[modifier as keyof typeof props]\n\n if (value) {\n const propStyle = getModifierStyle<Y>(\n value,\n variants,\n )({ modifier, value, ...options })\n\n if (propStyle)\n style = merge(style, wrapStyle<Y>(\"props\", propStyle)(options))\n } else {\n const boolean = Object.keys(variants).every((key) => isBooleanish(key))\n\n if (boolean) {\n const propStyle = getModifierStyle<Y>(\n \"false\",\n variants,\n )({ modifier, value: \"true\", ...options })\n\n if (propStyle)\n style = merge(style, wrapStyle<Y>(\"props\", propStyle)(options))\n }\n }\n })\n\n return style\n }\n}\n\nfunction getCompoundStyle<Y extends boolean = false>(\n props: Dict,\n compounds: ComponentCompound<CSSSlotObject>[] | ComponentCompound[],\n style: Style<Y> | undefined = {},\n) {\n return function (options: GetStyleOptions) {\n if (!compounds.length) return style\n\n compounds.forEach(({ css, layer, ...rest }) => {\n const conditions = Object.entries(rest)\n\n if (!conditions.length) return\n\n const apply = conditions.every(([key, value]) =>\n isArray(value)\n ? value.includes(props[key])\n : isRegExp(value)\n ? value.test(props[key])\n : props[key] === value,\n )\n\n if (!apply) return\n\n style = merge(\n style,\n wrapStyle<Y>(layer ?? \"compounds\", css as Style<Y>)(options),\n )\n })\n\n return style\n }\n}\n\nexport function getSlotClassName<Y extends string>(\n className?: string,\n slot?: ComponentSlot<Y>,\n) {\n if (!className || !slot) return className\n\n if (isArray(slot)) {\n const [element, modifier] = slot.map((value) =>\n toKebabCase(value as string),\n )\n\n return cx(bem(className, element), bem(className, element, modifier))\n } else if (isObject(slot)) {\n const slotArray = toArray(slot.slot)\n const [element, modifier] = slotArray.map((value) =>\n toKebabCase(value as string),\n )\n\n return cx(bem(className, element), bem(className, element, modifier))\n } else {\n return bem(className, toKebabCase(slot as string))\n }\n}\n\nexport function mergeSlotCSS<Y extends string>(\n slot?: ComponentSlot<Y>,\n style?: CSSSlotObject<Y>,\n css?: CSSObject | CSSObject[],\n): CSSObject | CSSObject[] | undefined {\n if (!style || !slot) return css\n\n const temp: (CSSObject | undefined)[] = []\n\n if (isArray(slot)) temp.push(...slot.map((slot) => style[slot]))\n else if (isObject(slot))\n if (isArray(slot.slot)) temp.push(...slot.slot.map((slot) => style[slot]))\n else temp.push(style[slot.slot])\n else temp.push(style[slot])\n\n if (css) temp.push(...toArray(css))\n\n const result = filterEmpty(temp)\n\n return result.length ? result : undefined\n}\n\nfunction omitThemeProps<\n Y extends Dict = Dict,\n M extends ComponentSlotStyle | ComponentStyle = ComponentStyle,\n D extends keyof Y = keyof Y,\n>(props: Y, omitKeys: string[] = [], transferProps?: D[]) {\n if (transferProps)\n omitKeys = omitKeys.filter((key) => !transferProps.includes(key as D))\n\n return omitObject(props, omitKeys) as unknown as WithoutThemeProps<Y, M, D>\n}\n\nfunction wrapStyle<Y extends boolean = false>(\n layer: LayerScheme,\n style?: Style<Y>,\n) {\n return function ({ hasSlot, wrap }: GetStyleOptions) {\n if (hasSlot) {\n if (!style) return undefined\n\n return Object.fromEntries(\n Object.entries(style).map(([slot, style]) => [\n slot,\n wrap?.(layer, style) ?? style,\n ]),\n )\n } else {\n return wrap?.(layer, style) ?? style\n }\n }\n}\n\nfunction getHasAtRuleStyle(css?: CSSObject | CSSObject[]) {\n return (getAtRule?: Layers[\"getAtRule\"]) => {\n let hasVariant = false\n let hasSize = false\n\n if (!css || !getAtRule) return { hasSize, hasVariant }\n\n const variantAtRule = getAtRule(\"variant\")\n const sizeAtRule = getAtRule(\"size\")\n\n css = toArray(css)\n\n css.forEach((css) => {\n const keys = Object.keys(css)\n\n if (keys.includes(variantAtRule)) hasVariant = true\n if (keys.includes(sizeAtRule)) hasSize = true\n })\n\n return { hasSize, hasVariant }\n }\n}\n\nfunction mergeDefaultProps<\n Y extends ComponentSlotStyle | ComponentStyle = ComponentStyle,\n M extends Dict = Dict,\n>(defaultProps: Y[\"defaultProps\"], props: M) {\n return Object.entries(defaultProps ?? {}).reduce<Dict>(\n (prev, [key, value]) => {\n prev[key] ??= value\n\n return prev\n },\n props,\n ) as M\n}\n\ninterface UseStyleOptions<\n Y extends Dict = Dict,\n M extends ComponentSlotStyle | ComponentStyle = ComponentStyle,\n D extends keyof Y = keyof Y,\n H extends boolean = false,\n> {\n className?: string\n hasSlot?: H\n name?: string\n slot?: ComponentSlot<ComponentSlotName<M>>\n style?: M\n transferProps?: D[]\n}\n\nfunction useStyle<\n Y extends HTMLStyledProps & ThemeProps<{}> = Dict,\n M extends ComponentSlotStyle | ComponentStyle = ComponentStyle,\n D extends keyof Y = keyof Y,\n H extends boolean = false,\n>(\n props: Y,\n {\n name,\n className: defaultClassName,\n style: componentStyle,\n hasSlot,\n slot,\n transferProps,\n }: UseStyleOptions<Y, M, D, H> = {},\n): [Style<H>, WithoutThemeProps<Y, M, D>] {\n const system = useSystem()\n const { getAtRule, wrap } = system.layers\n const rootColorScheme = useColorSchemeContext()\n const options = { ...system.breakpoints, name, hasSlot, wrap }\n\n const propsRef = useRef<Dict>({})\n const mergedPropsRef = useRef<Dict>({})\n const styleRef = useRef<Style<H> | undefined>(undefined)\n\n const hasComponentStyle =\n componentStyle && !!Object.keys(componentStyle).length\n\n if (hasComponentStyle) {\n const {\n className: customClassName,\n base,\n compounds,\n props: propVariants,\n sizes,\n variants,\n defaultProps: { colorScheme: defaultColorScheme, ...defaultProps } = {},\n } = componentStyle\n\n const colorScheme =\n props.colorScheme ?? rootColorScheme ?? defaultColorScheme\n\n const className = cx(defaultClassName ?? customClassName, props.className)\n const mergedProps = {\n ...mergeDefaultProps(defaultProps, props),\n className,\n colorScheme,\n }\n const omitProps = Object.keys(propVariants ?? {})\n const { size, variant } = mergedProps\n\n if (variants) omitProps.push(\"variant\")\n if (sizes) omitProps.push(\"size\")\n\n const computedProps = omitThemeProps(\n mergedProps,\n omitProps,\n transferProps,\n ) as Y\n\n if (\n !isEqualProps(mergedPropsRef.current, mergedProps, [\"css\", \"children\"])\n ) {\n const { hasSize, hasVariant } = getHasAtRuleStyle(props.css)(getAtRule)\n\n let style: Style<H> = {}\n\n if (base) {\n const baseStyle = getStyle<H>(base)(options)\n\n style = merge(style, wrapStyle<H>(\"base\", baseStyle)(options))\n }\n\n if (sizes && !hasSize) {\n const sizeStyle = merge(\n sizes.base,\n getModifierStyle<H>(size, sizes)({ modifier: \"size\", ...options }),\n )\n\n style = merge(style, wrapStyle<H>(\"size\", sizeStyle)(options))\n }\n\n if (variants && !hasVariant) {\n const variantStyle = merge(\n variants.base,\n getModifierStyle<H>(\n variant,\n variants,\n )({ modifier: \"variant\", ...options }),\n )\n\n style = merge(style, wrapStyle<H>(\"variant\", variantStyle)(options))\n }\n\n if (propVariants)\n style = getPropStyle<H>(mergedProps, propVariants, style)(options)\n\n if (compounds)\n style = getCompoundStyle<H>(mergedProps, compounds, style)(options)\n\n styleRef.current = style\n\n if (hasSlot)\n computedProps.css = mergeSlotCSS<ComponentSlotName<M>>(\n slot,\n style as CSSSlotObject,\n computedProps.css,\n )\n else computedProps.css = mergeCSS(style as CSSObject, computedProps.css)\n } else {\n computedProps.css = propsRef.current.css\n }\n\n mergedPropsRef.current = mergedProps\n\n if (!isEqualProps(propsRef.current, computedProps))\n propsRef.current = computedProps\n } else {\n const className = cx(defaultClassName, props.className)\n\n if (className) props.className = className\n\n if (!isEqualProps(propsRef.current, props))\n propsRef.current = props as unknown as WithoutThemeProps<Y, M, D>\n }\n\n return [\n styleRef.current ?? {},\n propsRef.current as WithoutThemeProps<Y, M, D>,\n ]\n}\n\nexport interface UseComponentStyleOptions<\n Y extends Dict = Dict,\n M extends ComponentSlotStyle | ComponentStyle = ComponentStyle,\n D extends keyof Y = keyof Y,\n> extends Omit<UseStyleOptions<Y, M, D>, \"hasSlot\" | \"slot\"> {}\n\nexport function useComponentStyle<\n Y extends Dict = Dict,\n M extends ComponentStyle = ComponentStyle,\n D extends keyof Y = keyof Y,\n>(props: Y, options: UseComponentStyleOptions<Y, M, D> = {}) {\n return useStyle<Y, M, D>(props, options)\n}\n\nexport interface UseComponentSlotStyleOptions<\n Y extends Dict = Dict,\n M extends ComponentSlotStyle | ComponentStyle = ComponentStyle,\n D extends keyof Y = keyof Y,\n> extends Omit<UseStyleOptions<Y, M, D, true>, \"hasSlot\"> {}\n\nexport function useComponentSlotStyle<\n Y extends Dict = Dict,\n M extends ComponentSlotStyle = ComponentSlotStyle,\n D extends keyof Y = keyof Y,\n>(props: Y, options: UseComponentSlotStyleOptions<Y, M, D> = {}) {\n return useStyle<Y, M, D, true>(props, { ...options, hasSlot: true })\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"use-component-style.js","names":[],"sources":["../../../../src/core/components/use-component-style.ts"],"sourcesContent":["\"use client\"\n\nimport type { Dict } from \"../../utils\"\nimport type {\n ColorModeArray,\n CSSModifierObject,\n CSSObject,\n CSSPropObject,\n CSSSlotObject,\n ResponsiveWithConditionObject,\n StyleValueWithCondition,\n} from \"../css\"\nimport type {\n Breakpoints,\n ComponentCompound,\n ComponentSlotStyle,\n ComponentStyle,\n Layers,\n LayerScheme,\n ThemeProps,\n WithoutThemeProps,\n} from \"../system\"\nimport type { ComponentSlot, ComponentSlotName } from \"./create-component\"\nimport type { HTMLStyledProps } from \"./index.types\"\nimport { useRef } from \"react\"\nimport {\n bem,\n cx,\n filterEmpty,\n isArray,\n isBooleanish,\n isEmptyObject,\n isObject,\n isRegExp,\n isUndefined,\n merge,\n omitObject,\n toArray,\n toKebabCase,\n} from \"../../utils\"\nimport { conditions, getCondition, mergeCSS } from \"../css\"\nimport { useColorSchemeContext, useSystem } from \"../system\"\nimport { isEqualProps } from \"./props\"\n\ntype Style<Y extends boolean = false> = Y extends false\n ? CSSObject\n : CSSSlotObject\n\ntype MergedStyle = CSSModifierObject | CSSModifierObject<CSSSlotObject>\n\ninterface GetStyleOptions\n extends Partial<Breakpoints>, Pick<Partial<Layers>, \"wrap\"> {\n hasSlot?: boolean\n modifier?: string\n name?: string\n selectors?: (string | undefined)[]\n value?: string\n}\n\nfunction getSelectorStyle<Y extends Dict = Dict>(\n selectors: (string | undefined)[],\n style: Y,\n) {\n return selectors.reduceRight<Dict>(\n (prev, key) => (key ? { [key]: prev } : prev),\n style,\n ) as Y\n}\n\nfunction getStyle<Y extends boolean = false>(\n style: CSSObject | CSSSlotObject | undefined,\n) {\n return function ({\n name: rootName,\n hasSlot = false,\n modifier,\n selectors = [],\n value,\n }: GetStyleOptions): Style<Y> | undefined {\n if (!style || isEmptyObject(style)) return\n\n if (hasSlot) {\n return Object.fromEntries(\n Object.entries(style as CSSSlotObject).map(([name, style]) => {\n if (selectors.length) {\n if (value && modifier)\n style = {\n [`--${rootName}-${name}-${modifier}`]: `\"${value}\"`,\n ...style,\n }\n\n return [name, getSelectorStyle(selectors, style ?? {})]\n } else {\n if (value && modifier)\n style = {\n [`--${rootName}-${name}-${modifier}`]: `\"${value}\"`,\n ...style,\n }\n\n return [name, style]\n }\n }),\n ) as Style<Y>\n } else if (selectors.length) {\n if (value && modifier)\n style = {\n [`--${rootName}-${modifier}`]: `\"${value}\"`,\n ...style,\n } as CSSObject\n\n return getSelectorStyle(selectors, style) as Style<Y>\n } else {\n if (value && modifier)\n style = {\n [`--${rootName}-${modifier}`]: `\"${value}\"`,\n ...style,\n } as CSSObject\n\n return style as Style<Y>\n }\n }\n}\n\nfunction getColorModeStyle<Y extends boolean = false>(\n value: ColorModeArray<string>,\n mergedStyle: MergedStyle,\n) {\n return function ({ selectors = [], ...rest }: GetStyleOptions) {\n const [lightValue, darkValue] = value\n\n const lightStyle = getModifierStyle<Y>(\n lightValue,\n mergedStyle,\n )({ ...rest, selectors })\n\n const darkStyle = getModifierStyle<Y>(\n darkValue,\n mergedStyle,\n )({ ...rest, selectors: [...selectors, conditions._dark] })\n\n return merge(lightStyle, darkStyle)\n }\n}\n\nfunction getConditionStyle<Y extends boolean = false>(\n value: ResponsiveWithConditionObject<string>,\n mergedStyle: MergedStyle,\n) {\n return function (options: GetStyleOptions) {\n const { isResponsiveKey, queries = [], selectors = [] } = options\n const conditionalKeys = Object.keys(value).filter(\n (key) => !isResponsiveKey?.(key),\n )\n\n const breakpointObj = queries.reduce<Style<Y>>(\n (prev, { breakpoint, query }) => {\n if (!isUndefined(value[breakpoint]))\n prev = merge(\n prev,\n getModifierStyle<Y>(\n value[breakpoint],\n mergedStyle,\n )({ ...options, selectors: [...selectors, query] }),\n )\n\n return prev\n },\n {},\n )\n\n const additionalObj = conditionalKeys.reduce<Style<Y>>((prev, key) => {\n prev = merge(\n prev,\n getModifierStyle<Y>(\n value[key as keyof typeof value],\n mergedStyle,\n )({ ...options, selectors: [...selectors, getCondition(key)] }),\n )\n\n return prev\n }, {})\n\n return merge(breakpointObj, additionalObj)\n }\n}\n\nfunction getModifierStyle<Y extends boolean = false>(\n value: StyleValueWithCondition<string> | undefined,\n mergedStyle: MergedStyle,\n) {\n return function (options: GetStyleOptions): Style<Y> | undefined {\n let style: Style<Y> | undefined = undefined\n\n if (!value) return style\n\n if (isArray(value))\n style = getColorModeStyle<Y>(value, mergedStyle)(options)\n else if (isObject(value))\n style = getConditionStyle<Y>(value, mergedStyle)(options)\n else style = getStyle<Y>(mergedStyle[value])({ ...options, value })\n\n return style\n }\n}\n\nfunction getPropStyle<Y extends boolean = false>(\n props: Dict,\n propVariants: CSSPropObject | CSSPropObject<CSSSlotObject>,\n style: Style<Y> | undefined = {},\n) {\n const variants = Object.entries(propVariants)\n\n return function (options: GetStyleOptions) {\n if (!variants.length) return style\n\n variants.forEach(([modifier, variants]) => {\n const value = props[modifier as keyof typeof props]\n\n if (value) {\n const propStyle = getModifierStyle<Y>(\n value,\n variants,\n )({ modifier, value, ...options })\n\n if (propStyle)\n style = merge(style, wrapStyle<Y>(\"props\", propStyle)(options))\n } else {\n const boolean = Object.keys(variants).every((key) => isBooleanish(key))\n\n if (boolean) {\n const propStyle = getModifierStyle<Y>(\n \"false\",\n variants,\n )({ modifier, value: \"true\", ...options })\n\n if (propStyle)\n style = merge(style, wrapStyle<Y>(\"props\", propStyle)(options))\n }\n }\n })\n\n return style\n }\n}\n\nfunction getCompoundStyle<Y extends boolean = false>(\n props: Dict,\n compounds: ComponentCompound<CSSSlotObject>[] | ComponentCompound[],\n style: Style<Y> | undefined = {},\n) {\n return function (options: GetStyleOptions) {\n if (!compounds.length) return style\n\n compounds.forEach(({ css, layer, ...rest }) => {\n const conditions = Object.entries(rest)\n\n if (!conditions.length) return\n\n const apply = conditions.every(([key, value]) =>\n isArray(value)\n ? value.includes(props[key])\n : isRegExp(value)\n ? value.test(props[key])\n : props[key] === value,\n )\n\n if (!apply) return\n\n style = merge(\n style,\n wrapStyle<Y>(layer ?? \"compounds\", css as Style<Y>)(options),\n )\n })\n\n return style\n }\n}\n\nexport function getSlotClassName<Y extends string>(\n className?: string,\n slot?: ComponentSlot<Y>,\n) {\n if (!className || !slot) return className\n\n if (isArray(slot)) {\n const [element, modifier] = slot.map((value) =>\n toKebabCase(value as string),\n )\n\n return cx(bem(className, element), bem(className, element, modifier))\n } else if (isObject(slot)) {\n const slotArray = toArray(slot.slot)\n const [element, modifier] = slotArray.map((value) => toKebabCase(value))\n\n return cx(bem(className, element), bem(className, element, modifier))\n } else {\n return bem(className, toKebabCase(slot))\n }\n}\n\nexport function mergeSlotCSS<Y extends string>(\n slot?: ComponentSlot<Y>,\n style?: CSSSlotObject<Y>,\n css?: CSSObject | CSSObject[],\n): CSSObject | CSSObject[] | undefined {\n if (!style || !slot) return css\n\n const temp: (CSSObject | undefined)[] = []\n\n if (isArray(slot)) temp.push(...slot.map((slot) => style[slot]))\n else if (isObject(slot))\n if (isArray(slot.slot)) temp.push(...slot.slot.map((slot) => style[slot]))\n else temp.push(style[slot.slot])\n else temp.push(style[slot])\n\n if (css) temp.push(...toArray(css))\n\n const result = filterEmpty(temp)\n\n return result.length ? result : undefined\n}\n\nfunction omitThemeProps<\n Y extends Dict = Dict,\n M extends ComponentSlotStyle | ComponentStyle = ComponentStyle,\n D extends keyof Y = keyof Y,\n>(props: Y, omitKeys: string[] = [], transferProps?: D[]) {\n if (transferProps)\n omitKeys = omitKeys.filter((key) => !transferProps.includes(key as D))\n\n return omitObject(props, omitKeys) as unknown as WithoutThemeProps<Y, M, D>\n}\n\nfunction wrapStyle<Y extends boolean = false>(\n layer: LayerScheme,\n style?: Style<Y>,\n) {\n return function ({ hasSlot, wrap }: GetStyleOptions) {\n if (hasSlot) {\n if (!style) return undefined\n\n return Object.fromEntries(\n Object.entries(style).map(([slot, style]) => [\n slot,\n wrap?.(layer, style) ?? style,\n ]),\n )\n } else {\n return wrap?.(layer, style) ?? style\n }\n }\n}\n\nfunction getHasAtRuleStyle(css?: CSSObject | CSSObject[]) {\n return (getAtRule?: Layers[\"getAtRule\"]) => {\n let hasVariant = false\n let hasSize = false\n\n if (!css || !getAtRule) return { hasSize, hasVariant }\n\n const variantAtRule = getAtRule(\"variant\")\n const sizeAtRule = getAtRule(\"size\")\n\n css = toArray(css)\n\n css.forEach((css) => {\n const keys = Object.keys(css)\n\n if (keys.includes(variantAtRule)) hasVariant = true\n if (keys.includes(sizeAtRule)) hasSize = true\n })\n\n return { hasSize, hasVariant }\n }\n}\n\nfunction mergeDefaultProps<\n Y extends ComponentSlotStyle | ComponentStyle = ComponentStyle,\n M extends Dict = Dict,\n>(defaultProps: Y[\"defaultProps\"], props: M) {\n return Object.entries(defaultProps ?? {}).reduce<Dict>(\n (prev, [key, value]) => {\n prev[key] ??= value\n\n return prev\n },\n props,\n ) as M\n}\n\ninterface UseStyleOptions<\n Y extends Dict = Dict,\n M extends ComponentSlotStyle | ComponentStyle = ComponentStyle,\n D extends keyof Y = keyof Y,\n H extends boolean = false,\n> {\n className?: string\n hasSlot?: H\n name?: string\n slot?: ComponentSlot<ComponentSlotName<M>>\n style?: M\n transferProps?: D[]\n}\n\nfunction useStyle<\n Y extends HTMLStyledProps & ThemeProps<{}> = Dict,\n M extends ComponentSlotStyle | ComponentStyle = ComponentStyle,\n D extends keyof Y = keyof Y,\n H extends boolean = false,\n>(\n props: Y,\n {\n name,\n className: defaultClassName,\n style: componentStyle,\n hasSlot,\n slot,\n transferProps,\n }: UseStyleOptions<Y, M, D, H> = {},\n): [Style<H>, WithoutThemeProps<Y, M, D>] {\n const system = useSystem()\n const { getAtRule, wrap } = system.layers\n const rootColorScheme = useColorSchemeContext()\n const options = { ...system.breakpoints, name, hasSlot, wrap }\n\n const propsRef = useRef<Dict>({})\n const mergedPropsRef = useRef<Dict>({})\n const styleRef = useRef<Style<H> | undefined>(undefined)\n\n const hasComponentStyle =\n componentStyle && !!Object.keys(componentStyle).length\n\n if (hasComponentStyle) {\n const {\n className: customClassName,\n base,\n compounds,\n props: propVariants,\n sizes,\n variants,\n defaultProps: { colorScheme: defaultColorScheme, ...defaultProps } = {},\n } = componentStyle\n\n const colorScheme =\n props.colorScheme ?? rootColorScheme ?? defaultColorScheme\n\n const className = cx(defaultClassName ?? customClassName, props.className)\n const mergedProps = {\n ...mergeDefaultProps(defaultProps, props),\n className,\n colorScheme,\n }\n const omitProps = Object.keys(propVariants ?? {})\n const { size, variant } = mergedProps\n\n if (variants) omitProps.push(\"variant\")\n if (sizes) omitProps.push(\"size\")\n\n const computedProps = omitThemeProps(\n mergedProps,\n omitProps,\n transferProps,\n ) as Y\n\n if (\n !isEqualProps(mergedPropsRef.current, mergedProps, [\"css\", \"children\"])\n ) {\n const { hasSize, hasVariant } = getHasAtRuleStyle(props.css)(getAtRule)\n\n let style: Style<H> = {}\n\n if (base) {\n const baseStyle = getStyle<H>(base)(options)\n\n style = merge(style, wrapStyle<H>(\"base\", baseStyle)(options))\n }\n\n if (sizes && !hasSize) {\n const sizeStyle = merge(\n sizes.base,\n getModifierStyle<H>(size, sizes)({ modifier: \"size\", ...options }),\n )\n\n style = merge(style, wrapStyle<H>(\"size\", sizeStyle)(options))\n }\n\n if (variants && !hasVariant) {\n const variantStyle = merge(\n variants.base,\n getModifierStyle<H>(\n variant,\n variants,\n )({ modifier: \"variant\", ...options }),\n )\n\n style = merge(style, wrapStyle<H>(\"variant\", variantStyle)(options))\n }\n\n if (propVariants)\n style = getPropStyle<H>(mergedProps, propVariants, style)(options)\n\n if (compounds)\n style = getCompoundStyle<H>(mergedProps, compounds, style)(options)\n\n styleRef.current = style\n\n if (hasSlot)\n computedProps.css = mergeSlotCSS<ComponentSlotName<M>>(\n slot,\n style as CSSSlotObject,\n computedProps.css,\n )\n else computedProps.css = mergeCSS(style as CSSObject, computedProps.css)\n } else {\n computedProps.css = propsRef.current.css\n }\n\n mergedPropsRef.current = mergedProps\n\n if (!isEqualProps(propsRef.current, computedProps))\n propsRef.current = computedProps\n } else {\n const className = cx(defaultClassName, props.className)\n\n if (className) props.className = className\n\n if (!isEqualProps(propsRef.current, props)) propsRef.current = props\n }\n\n return [\n styleRef.current ?? {},\n propsRef.current as WithoutThemeProps<Y, M, D>,\n ]\n}\n\nexport interface UseComponentStyleOptions<\n Y extends Dict = Dict,\n M extends ComponentSlotStyle | ComponentStyle = ComponentStyle,\n D extends keyof Y = keyof Y,\n> extends Omit<UseStyleOptions<Y, M, D>, \"hasSlot\" | \"slot\"> {}\n\nexport function useComponentStyle<\n Y extends Dict = Dict,\n M extends ComponentStyle = ComponentStyle,\n D extends keyof Y = keyof Y,\n>(props: Y, options: UseComponentStyleOptions<Y, M, D> = {}) {\n return useStyle<Y, M, D>(props, options)\n}\n\nexport interface UseComponentSlotStyleOptions<\n Y extends Dict = Dict,\n M extends ComponentSlotStyle | ComponentStyle = ComponentStyle,\n D extends keyof Y = keyof Y,\n> extends Omit<UseStyleOptions<Y, M, D, true>, \"hasSlot\"> {}\n\nexport function useComponentSlotStyle<\n Y extends Dict = Dict,\n M extends ComponentSlotStyle = ComponentSlotStyle,\n D extends keyof Y = keyof Y,\n>(props: Y, options: UseComponentSlotStyleOptions<Y, M, D> = {}) {\n return useStyle<Y, M, D, true>(props, { ...options, hasSlot: true })\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../src/hooks/use-focus/index.ts"],"sourcesContent":["\"use client\"\n\nimport type { RefObject } from \"react\"\nimport { useCallback, useRef } from \"react\"\nimport {\n getActiveElement,\n getDocument,\n getFirstFocusableElement,\n isRefObject,\n isSafari,\n useUpdateEffect,\n} from \"../../utils\"\nimport { useEventListener } from \"../use-event-listener\"\n\nexport interface UseFocusOnShowProps {\n focusTarget?: HTMLElement | null | RefObject<HTMLElement | null>\n preventScroll?: boolean\n shouldFocus?: boolean\n visible?: boolean\n}\n\n/**\n * `useFocusOnShow` is a custom hook that focuses on the target element when it is shown.\n *\n * @see https://yamada-ui.com/docs/hooks/use-focus-on-show\n */\nexport const useFocusOnShow = <Y extends HTMLElement>(\n refOrEl: RefObject<null | Y> | Y,\n {\n focusTarget: focusRefOrEl,\n preventScroll,\n shouldFocus,\n visible,\n }: UseFocusOnShowProps = {\n preventScroll: true,\n shouldFocus: false,\n },\n) => {\n const trulyShouldFocus = shouldFocus && visible\n const focused = useRef(false)\n\n const getTarget = useCallback(() => {\n return isRefObject(refOrEl) ? refOrEl.current : refOrEl\n }, [refOrEl])\n\n const getFocusTarget = useCallback(() => {\n return isRefObject(focusRefOrEl) ? focusRefOrEl.current : focusRefOrEl\n }, [focusRefOrEl])\n\n const onFocus = useCallback(() => {\n const target = getTarget()\n\n if (!target || !trulyShouldFocus || focused.current) return\n if (target.contains(document.activeElement as HTMLElement)) return\n\n const focusTarget = getFocusTarget()\n\n if (focusTarget) {\n requestAnimationFrame(() => {\n focusTarget.focus({ preventScroll })\n\n focused.current = true\n })\n } else {\n const firstFocusable = getFirstFocusableElement(target)\n\n if (firstFocusable)\n requestAnimationFrame(() => {\n firstFocusable.focus({ preventScroll })\n\n focused.current = true\n })\n else\n requestAnimationFrame(() => {\n target.focus({ preventScroll })\n\n focused.current = true\n })\n }\n }, [getTarget, trulyShouldFocus, getFocusTarget, preventScroll])\n\n useUpdateEffect(() => {\n focused.current = !trulyShouldFocus\n }, [trulyShouldFocus])\n\n useUpdateEffect(() => {\n requestAnimationFrame(onFocus)\n }, [onFocus])\n\n useEventListener(getTarget, \"transitionend\", onFocus)\n}\n\nexport interface UseFocusOnMouseDownProps {\n ref: RefObject<HTMLElement | null>\n elements?: (HTMLElement | null | RefObject<HTMLElement | null>)[]\n enabled?: boolean\n}\n\n/**\n * `useFocusOnPointerDown` is a custom hook that focuses on the target element when it is clicked.\n *\n * @see https://yamada-ui.com/docs/hooks/use-focus-on-pointer-down\n */\nexport const useFocusOnPointerDown = ({\n ref,\n elements,\n enabled,\n}: UseFocusOnMouseDownProps) => {\n useEventListener(\n () => getDocument(ref.current),\n \"pointerdown\",\n (ev) => {\n if (!isSafari() || !enabled) return\n const target = ev.target as HTMLElement\n\n const els = elements ?? [ref]\n\n const validTarget = els.some((elOrRef) => {\n const el = isRefObject(elOrRef) ? elOrRef.current : elOrRef\n\n return el?.contains(target) || el === target\n })\n\n if (\n getActiveElement(getDocument(ref.current)) !== target &&\n validTarget\n ) {\n ev.preventDefault()\n\n target.focus()\n }\n },\n )\n}\n"],"mappings":";;;;;;;;;;;;AA0BA,MAAa,kBACX,SACA,EACE,aAAa,cACb,eACA,aACA,YACuB;CACvB,eAAe;CACf,aAAa;AACf,MACG;CACH,MAAM,mBAAmB,eAAe;CACxC,MAAM,UAAU,OAAO,KAAK;CAE5B,MAAM,YAAY,kBAAkB;EAClC,OAAO,YAAY,OAAO,IAAI,QAAQ,UAAU;CAClD,GAAG,CAAC,OAAO,CAAC;CAEZ,MAAM,iBAAiB,kBAAkB;EACvC,OAAO,YAAY,YAAY,IAAI,aAAa,UAAU;CAC5D,GAAG,CAAC,YAAY,CAAC;CAEjB,MAAM,UAAU,kBAAkB;EAChC,MAAM,SAAS,UAAU;EAEzB,IAAI,CAAC,UAAU,CAAC,oBAAoB,QAAQ,SAAS;EACrD,IAAI,OAAO,SAAS,SAAS,aAA4B,GAAG;EAE5D,MAAM,cAAc,eAAe;EAEnC,IAAI,aACF,4BAA4B;GAC1B,YAAY,MAAM,EAAE,cAAc,CAAC;GAEnC,QAAQ,UAAU;EACpB,CAAC;OACI;GACL,MAAM,kBAAA,GAAA,cAAA,yBAAA,CAA0C,MAAM;GAEtD,IAAI,gBACF,4BAA4B;IAC1B,eAAe,MAAM,EAAE,cAAc,CAAC;IAEtC,QAAQ,UAAU;GACpB,CAAC;QAED,4BAA4B;IAC1B,OAAO,MAAM,EAAE,cAAc,CAAC;IAE9B,QAAQ,UAAU;GACpB,CAAC;EACL;CACF,GAAG;EAAC;EAAW;EAAkB;EAAgB;CAAa,CAAC;CAE/D,sBAAsB;EACpB,QAAQ,UAAU,CAAC;CACrB,GAAG,CAAC,gBAAgB,CAAC;CAErB,sBAAsB;EACpB,sBAAsB,OAAO;CAC/B,GAAG,CAAC,OAAO,CAAC;CAEZ,iBAAiB,WAAW,iBAAiB,OAAO;AACtD;;;;;;AAaA,MAAa,yBAAyB,EACpC,KACA,UACA,cAC8B;CAC9B,wBAAA,GAAA,cAAA,YAAA,CACoB,IAAI,OAAO,GAC7B,gBACC,OAAO;EACN,IAAI,EAAA,GAAA,cAAA,SAAA,CAAU,KAAK,CAAC,SAAS;EAC7B,MAAM,SAAS,GAAG;EAIlB,MAAM,eAFM,YAAY,CAAC,GAAG,EAAA,CAEJ,MAAM,YAAY;GACxC,MAAM,KAAK,YAAY,OAAO,IAAI,QAAQ,UAAU;GAEpD,OAAO,IAAI,SAAS,MAAM,KAAK,OAAO;EACxC,CAAC;EAED,KAAA,GAAA,cAAA,iBAAA,EAAA,GAAA,cAAA,YAAA,CAC+B,IAAI,OAAO,CAAC,MAAM,UAC/C,aACA;GACA,GAAG,eAAe;GAElB,OAAO,MAAM;EACf;CACF,CACF;AACF"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/hooks/use-focus/index.ts"],"sourcesContent":["\"use client\"\n\nimport type { RefObject } from \"react\"\nimport { useCallback, useRef } from \"react\"\nimport {\n getActiveElement,\n getDocument,\n getFirstFocusableElement,\n isRefObject,\n isSafari,\n useUpdateEffect,\n} from \"../../utils\"\nimport { useEventListener } from \"../use-event-listener\"\n\nexport interface UseFocusOnShowProps {\n focusTarget?: HTMLElement | null | RefObject<HTMLElement | null>\n preventScroll?: boolean\n shouldFocus?: boolean\n visible?: boolean\n}\n\n/**\n * `useFocusOnShow` is a custom hook that focuses on the target element when it is shown.\n *\n * @see https://yamada-ui.com/docs/hooks/use-focus-on-show\n */\nexport const useFocusOnShow = <Y extends HTMLElement>(\n refOrEl: RefObject<null | Y> | Y,\n {\n focusTarget: focusRefOrEl,\n preventScroll,\n shouldFocus,\n visible,\n }: UseFocusOnShowProps = {\n preventScroll: true,\n shouldFocus: false,\n },\n) => {\n const trulyShouldFocus = shouldFocus && visible\n const focused = useRef(false)\n\n const getTarget = useCallback(() => {\n return isRefObject(refOrEl) ? refOrEl.current : refOrEl\n }, [refOrEl])\n\n const getFocusTarget = useCallback(() => {\n return isRefObject(focusRefOrEl) ? focusRefOrEl.current : focusRefOrEl\n }, [focusRefOrEl])\n\n const onFocus = useCallback(() => {\n const target = getTarget()\n\n if (!target || !trulyShouldFocus || focused.current) return\n if (target.contains(document.activeElement)) return\n\n const focusTarget = getFocusTarget()\n\n if (focusTarget) {\n requestAnimationFrame(() => {\n focusTarget.focus({ preventScroll })\n\n focused.current = true\n })\n } else {\n const firstFocusable = getFirstFocusableElement(target)\n\n if (firstFocusable)\n requestAnimationFrame(() => {\n firstFocusable.focus({ preventScroll })\n\n focused.current = true\n })\n else\n requestAnimationFrame(() => {\n target.focus({ preventScroll })\n\n focused.current = true\n })\n }\n }, [getTarget, trulyShouldFocus, getFocusTarget, preventScroll])\n\n useUpdateEffect(() => {\n focused.current = !trulyShouldFocus\n }, [trulyShouldFocus])\n\n useUpdateEffect(() => {\n requestAnimationFrame(onFocus)\n }, [onFocus])\n\n useEventListener(getTarget, \"transitionend\", onFocus)\n}\n\nexport interface UseFocusOnMouseDownProps {\n ref: RefObject<HTMLElement | null>\n elements?: (HTMLElement | null | RefObject<HTMLElement | null>)[]\n enabled?: boolean\n}\n\n/**\n * `useFocusOnPointerDown` is a custom hook that focuses on the target element when it is clicked.\n *\n * @see https://yamada-ui.com/docs/hooks/use-focus-on-pointer-down\n */\nexport const useFocusOnPointerDown = ({\n ref,\n elements,\n enabled,\n}: UseFocusOnMouseDownProps) => {\n useEventListener(\n () => getDocument(ref.current),\n \"pointerdown\",\n (ev) => {\n if (!isSafari() || !enabled) return\n const target = ev.target as HTMLElement\n\n const els = elements ?? [ref]\n\n const validTarget = els.some((elOrRef) => {\n const el = isRefObject(elOrRef) ? elOrRef.current : elOrRef\n\n return el?.contains(target) || el === target\n })\n\n if (\n getActiveElement(getDocument(ref.current)) !== target &&\n validTarget\n ) {\n ev.preventDefault()\n\n target.focus()\n }\n },\n )\n}\n"],"mappings":";;;;;;;;;;;;AA0BA,MAAa,kBACX,SACA,EACE,aAAa,cACb,eACA,aACA,YACuB;CACvB,eAAe;CACf,aAAa;AACf,MACG;CACH,MAAM,mBAAmB,eAAe;CACxC,MAAM,UAAU,OAAO,KAAK;CAE5B,MAAM,YAAY,kBAAkB;EAClC,OAAO,YAAY,OAAO,IAAI,QAAQ,UAAU;CAClD,GAAG,CAAC,OAAO,CAAC;CAEZ,MAAM,iBAAiB,kBAAkB;EACvC,OAAO,YAAY,YAAY,IAAI,aAAa,UAAU;CAC5D,GAAG,CAAC,YAAY,CAAC;CAEjB,MAAM,UAAU,kBAAkB;EAChC,MAAM,SAAS,UAAU;EAEzB,IAAI,CAAC,UAAU,CAAC,oBAAoB,QAAQ,SAAS;EACrD,IAAI,OAAO,SAAS,SAAS,aAAa,GAAG;EAE7C,MAAM,cAAc,eAAe;EAEnC,IAAI,aACF,4BAA4B;GAC1B,YAAY,MAAM,EAAE,cAAc,CAAC;GAEnC,QAAQ,UAAU;EACpB,CAAC;OACI;GACL,MAAM,kBAAA,GAAA,cAAA,yBAAA,CAA0C,MAAM;GAEtD,IAAI,gBACF,4BAA4B;IAC1B,eAAe,MAAM,EAAE,cAAc,CAAC;IAEtC,QAAQ,UAAU;GACpB,CAAC;QAED,4BAA4B;IAC1B,OAAO,MAAM,EAAE,cAAc,CAAC;IAE9B,QAAQ,UAAU;GACpB,CAAC;EACL;CACF,GAAG;EAAC;EAAW;EAAkB;EAAgB;CAAa,CAAC;CAE/D,sBAAsB;EACpB,QAAQ,UAAU,CAAC;CACrB,GAAG,CAAC,gBAAgB,CAAC;CAErB,sBAAsB;EACpB,sBAAsB,OAAO;CAC/B,GAAG,CAAC,OAAO,CAAC;CAEZ,iBAAiB,WAAW,iBAAiB,OAAO;AACtD;;;;;;AAaA,MAAa,yBAAyB,EACpC,KACA,UACA,cAC8B;CAC9B,wBAAA,GAAA,cAAA,YAAA,CACoB,IAAI,OAAO,GAC7B,gBACC,OAAO;EACN,IAAI,EAAA,GAAA,cAAA,SAAA,CAAU,KAAK,CAAC,SAAS;EAC7B,MAAM,SAAS,GAAG;EAIlB,MAAM,eAFM,YAAY,CAAC,GAAG,EAAA,CAEJ,MAAM,YAAY;GACxC,MAAM,KAAK,YAAY,OAAO,IAAI,QAAQ,UAAU;GAEpD,OAAO,IAAI,SAAS,MAAM,KAAK,OAAO;EACxC,CAAC;EAED,KAAA,GAAA,cAAA,iBAAA,EAAA,GAAA,cAAA,YAAA,CAC+B,IAAI,OAAO,CAAC,MAAM,UAC/C,aACA;GACA,GAAG,eAAe;GAElB,OAAO,MAAM;EACf;CACF,CACF;AACF"}