@blankjs/react 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +190 -0
- package/dist/index.d.mts +738 -0
- package/dist/index.mjs +1732 -0
- package/dist/index.mjs.map +1 -0
- package/dist/style.css +1161 -0
- package/package.json +68 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["useFieldControlProps","useFieldControlProps","useFieldControlProps","useFieldControlProps","useFieldControlProps","useFieldControlProps","useFieldControlProps","useFieldControlProps","useFieldControlProps","useFieldControlProps","useFieldControlProps","useFieldControlProps","useFieldControlProps"],"sources":["../src/slot/merge-props.ts","../src/slot/compose-refs.ts","../src/slot/slot.tsx","../src/form/context.ts","../src/form/form.tsx","../src/form/serialize.ts","../src/field/root.tsx","../src/field/label.tsx","../src/field/description.tsx","../src/field/error.tsx","../src/field/control.tsx","../src/field/index.ts","../src/text-input/text-input.tsx","../src/textarea/textarea.tsx","../src/password-field/password-field.tsx","../src/select/context.ts","../src/select/hidden-input.tsx","../src/select/use-select-root.ts","../src/select/root.tsx","../src/internal/use-popover.ts","../src/internal/use-initial-active-item.ts","../src/internal/use-listbox-keyboard.ts","../src/select/trigger.tsx","../src/select/content.tsx","../src/select/item.tsx","../src/select/value.tsx","../src/select/clear.tsx","../src/select/index.ts","../src/button/button.tsx","../src/checkbox/checkbox.tsx","../src/switch/switch.tsx","../src/radio/context.ts","../src/radio/use-radio-group-root.ts","../src/radio/root.tsx","../src/radio/item.tsx","../src/radio/index.ts","../src/multi-select/use-multi-select-root.ts","../src/multi-select/context.ts","../src/multi-select/hidden-input.tsx","../src/multi-select/root.tsx","../src/multi-select/trigger.tsx","../src/multi-select/content.tsx","../src/multi-select/item.tsx","../src/multi-select/value.tsx","../src/multi-select/clear.tsx","../src/multi-select/index.ts","../src/combobox/use-combobox-root.ts","../src/combobox/context.ts","../src/combobox/hidden-input.tsx","../src/combobox/root.tsx","../src/combobox/input.tsx","../src/combobox/content.tsx","../src/combobox/item.tsx","../src/combobox/clear.tsx","../src/combobox/index.ts"],"sourcesContent":["type Props = Record<string, unknown>;\r\n\r\ntype Fn = (...args: unknown[]) => void;\r\n\r\nexport const mergeProps = (slotProps: Props, childProps: Props): Props => {\r\n const merged: Props = { ...slotProps, ...childProps };\r\n\r\n for (const key in childProps) {\r\n const slotValue = slotProps[key];\r\n const childValue = childProps[key];\r\n\r\n if (childValue === undefined) {\r\n merged[key] = slotValue;\r\n continue;\r\n }\r\n\r\n const isHandler = /^on[A-Z]/.test(key);\r\n\r\n if (isHandler) {\r\n const bothFns =\r\n typeof slotValue === \"function\" && typeof childValue === \"function\";\r\n\r\n if (bothFns) {\r\n merged[key] = (...args: unknown[]) => {\r\n (childValue as Fn)(...args);\r\n (slotValue as Fn)(...args);\r\n };\r\n }\r\n } else if (key === \"className\") {\r\n merged[key] = [slotValue, childValue].filter(Boolean).join(\" \");\r\n } else if (key === \"style\") {\r\n merged[key] = {\r\n ...(slotValue as Record<string, unknown>),\r\n ...(childValue as Record<string, unknown>),\r\n };\r\n }\r\n }\r\n\r\n return merged;\r\n};\r\n","import type { Ref } from \"react\";\r\n\r\nconst setRef = <T>(ref: Ref<T> | undefined, node: T) => {\r\n if (typeof ref === \"function\") {\r\n ref(node);\r\n } else if (ref) {\r\n ref.current = node;\r\n }\r\n};\r\n\r\nexport const composeRefs = <T>(...refs: (Ref<T> | undefined)[]) => {\r\n return (node: T) => {\r\n refs.forEach((ref) => setRef(ref, node));\r\n };\r\n};\r\n","import {\r\n cloneElement,\r\n isValidElement,\r\n Children,\r\n type ReactElement,\r\n type Ref,\r\n type HTMLAttributes,\r\n} from \"react\";\r\nimport { mergeProps } from \"./merge-props\";\r\nimport { composeRefs } from \"./compose-refs\";\r\n\r\nexport interface SlotProps extends HTMLAttributes<HTMLElement> {\r\n children: ReactElement;\r\n ref?: Ref<HTMLElement>;\r\n}\r\n\r\nexport const Slot = ({ children, ...slotProps }: SlotProps) => {\r\n if (!isValidElement(children)) {\r\n return Children.count(children) > 1 ? Children.only(null) : null;\r\n }\r\n\r\n const childProps = children.props as Record<string, unknown>;\r\n const childRef = (childProps as { ref?: Ref<unknown> }).ref;\r\n const slotRef = slotProps.ref as Ref<unknown> | undefined;\r\n\r\n const merged = mergeProps(slotProps, childProps);\r\n\r\n if (slotRef || childRef) {\r\n merged.ref = composeRefs(slotRef, childRef);\r\n }\r\n\r\n return cloneElement(children, merged);\r\n};\r\n","import { createContext } from \"react\";\r\n\r\nexport interface FormContextType {\r\n errors?: Record<string, string>;\r\n}\r\n\r\nexport const FormContext = createContext<FormContextType | null>(null);\r\n","import { useEffect, useMemo, useRef, type ComponentProps } from \"react\";\r\nimport { FormContext } from \"./context\";\r\nimport { composeRefs } from \"../slot\";\r\n\r\ntype FormSubmitEvent = Parameters<\r\n NonNullable<ComponentProps<\"form\">[\"onSubmit\"]>\r\n>[0];\r\n\r\nexport interface FormProps extends Omit<ComponentProps<\"form\">, \"onSubmit\"> {\r\n onSubmit?: (data: FormData, event: FormSubmitEvent) => void;\r\n errors?: Record<string, string>;\r\n}\r\n\r\nexport const Form = ({\r\n onSubmit,\r\n errors,\r\n ref,\r\n children,\r\n ...rest\r\n}: FormProps) => {\r\n const innerRef = useRef<HTMLFormElement>(null);\r\n\r\n const formContextValue = useMemo(\r\n () => ({\r\n errors,\r\n }),\r\n [errors],\r\n );\r\n\r\n const handleSubmit = (e: FormSubmitEvent) => {\r\n if (!onSubmit) return;\r\n\r\n e.preventDefault();\r\n\r\n onSubmit(new FormData(e.currentTarget), e);\r\n };\r\n\r\n useEffect(() => {\r\n const form = innerRef.current;\r\n\r\n if (!form) return;\r\n\r\n let focused = false;\r\n\r\n const onInvalid = (e: Event) => {\r\n if (focused) return;\r\n\r\n focused = true;\r\n\r\n queueMicrotask(() => {\r\n focused = false;\r\n });\r\n\r\n (e.target as HTMLElement | null)?.focus?.();\r\n };\r\n\r\n form.addEventListener(\"invalid\", onInvalid, true);\r\n\r\n return () => form.removeEventListener(\"invalid\", onInvalid, true);\r\n }, []);\r\n\r\n return (\r\n <FormContext value={formContextValue}>\r\n <form ref={composeRefs(innerRef, ref)} onSubmit={handleSubmit} {...rest}>\r\n {children}\r\n </form>\r\n </FormContext>\r\n );\r\n};\r\n\r\nForm.displayName = \"Form\";\r\n","export const serialize = (data: FormData) => {\n const result: Record<string, FormDataEntryValue | FormDataEntryValue[]> = {};\n\n for (const key of new Set(data.keys())) {\n const values = data.getAll(key);\n\n result[key] = values.length > 1 ? values : (values[0] ?? \"\");\n }\n\n return result;\n};\n","import {\r\n FieldContext,\r\n useFieldRoot,\r\n type UseFieldRootOptions,\r\n} from \"@blankjs/core\";\r\nimport {\r\n useContext,\r\n useEffect,\r\n useMemo,\r\n useRef,\r\n useState,\r\n type ComponentProps,\r\n} from \"react\";\r\nimport { composeRefs } from \"../slot\";\r\nimport { FormContext } from \"../form\";\r\n\r\nexport type FieldRootProps = UseFieldRootOptions &\r\n ComponentProps<\"div\"> & {\r\n name?: string;\r\n };\r\n\r\nexport const FieldRoot = ({\r\n children,\r\n invalid,\r\n disabled,\r\n required,\r\n validationMode,\r\n name,\r\n ref,\r\n validate,\r\n ...props\r\n}: FieldRootProps) => {\r\n const formContext = useContext(FormContext);\r\n const serverError = name ? formContext?.errors?.[name] : undefined;\r\n const [dismissed, setDismissed] = useState(false);\r\n\r\n const activeServerError = dismissed ? undefined : serverError;\r\n\r\n const {\r\n onBlurCapture,\r\n onChangeCapture,\r\n onInvalidCapture,\r\n resetValidation,\r\n validateControl,\r\n ...contextValue\r\n } = useFieldRoot({\r\n invalid: invalid ?? (activeServerError ? true : undefined),\r\n disabled,\r\n required,\r\n validationMode,\r\n validate,\r\n });\r\n\r\n const innerRef = useRef<HTMLDivElement>(null);\r\n\r\n useEffect(() => {\r\n const control = innerRef.current?.querySelector(\r\n \"input:not([type=hidden]), textarea, select\",\r\n );\r\n\r\n if (control) validateControl(control);\r\n }, [validateControl]);\r\n\r\n useEffect(() => {\r\n // a dismissed server error must come back when the server responds again,\r\n // even with the same message; the only signal is the identity of the\r\n // errors object, so this is a sync-with-external-value reset (one extra\r\n // render per server response, scoped to this field)\r\n // eslint-disable-next-line react-hooks/set-state-in-effect\r\n setDismissed(false);\r\n }, [formContext?.errors]);\r\n\r\n useEffect(() => {\r\n const form = innerRef.current?.closest(\"form\");\r\n\r\n if (!form) return;\r\n\r\n form.addEventListener(\"reset\", resetValidation);\r\n\r\n return () => form.removeEventListener(\"reset\", resetValidation);\r\n }, [resetValidation]);\r\n\r\n // native capture listeners: React's onChangeCapture misses programmatic\r\n // change events dispatched by the hidden inputs of composite widgets\r\n useEffect(() => {\r\n const node = innerRef.current;\r\n\r\n if (!node || !onChangeCapture) return;\r\n\r\n const handler = (e: Event) => {\r\n onChangeCapture(e as never);\r\n setDismissed(true);\r\n };\r\n\r\n node.addEventListener(\"change\", handler, true);\r\n node.addEventListener(\"input\", handler, true);\r\n\r\n return () => {\r\n node.removeEventListener(\"change\", handler, true);\r\n node.removeEventListener(\"input\", handler, true);\r\n };\r\n }, [onChangeCapture]);\r\n\r\n const fieldContextValue = useMemo(\r\n () => ({ ...contextValue, serverError: activeServerError }),\r\n [activeServerError, contextValue],\r\n );\r\n\r\n return (\r\n <FieldContext value={fieldContextValue}>\r\n <div\r\n {...props}\r\n ref={composeRefs(innerRef, ref)}\r\n data-invalid={contextValue.invalid ? \"\" : undefined}\r\n data-disabled={disabled ? \"\" : undefined}\r\n onBlurCapture={onBlurCapture}\r\n onInvalidCapture={onInvalidCapture}\r\n >\r\n {children}\r\n </div>\r\n </FieldContext>\r\n );\r\n};\r\n\r\nFieldRoot.displayName = \"Field.Root\";\r\n","import { useFieldContext } from \"@blankjs/core\";\r\nimport { useEffect, type ComponentProps } from \"react\";\r\n\r\ntype FieldLabelProps = ComponentProps<\"label\">;\r\n\r\nexport const FieldLabel = ({ children, ...props }: FieldLabelProps) => {\r\n const { controlId, labelId, registerLabel, hasGroupControl } =\r\n useFieldContext();\r\n\r\n useEffect(() => registerLabel(), [registerLabel]);\r\n\r\n return (\r\n <label\r\n {...props}\r\n id={labelId}\r\n htmlFor={hasGroupControl ? undefined : controlId}\r\n >\r\n {children}\r\n </label>\r\n );\r\n};\r\n\r\nFieldLabel.displayName = \"Field.Label\";\r\n","import { useFieldContext } from \"@blankjs/core\";\r\nimport { useEffect, type ComponentProps } from \"react\";\r\n\r\ntype FieldDescriptionProps = ComponentProps<\"div\">;\r\n\r\nexport const FieldDescription = ({\r\n children,\r\n ...props\r\n}: FieldDescriptionProps) => {\r\n const { descriptionId, registerDescription } = useFieldContext();\r\n\r\n useEffect(() => registerDescription(), [registerDescription]);\r\n\r\n return (\r\n <div {...props} id={descriptionId}>\r\n {children}\r\n </div>\r\n );\r\n};\r\n\r\nFieldDescription.displayName = \"Field.Description\";\r\n","import { useFieldContext } from \"@blankjs/core\";\r\nimport { useEffect, type ComponentProps } from \"react\";\r\n\r\ntype FieldErrorProps = ComponentProps<\"div\"> & {\r\n match?: keyof ValidityState;\r\n};\r\n\r\nexport const FieldError = ({ children, match, ...props }: FieldErrorProps) => {\r\n const {\r\n errorId,\r\n registerError,\r\n invalid,\r\n validity,\r\n validationMessage,\r\n serverError,\r\n } = useFieldContext();\r\n\r\n const visible = match ? validity?.[match] === true : invalid;\r\n\r\n useEffect(() => {\r\n let cleanup: (() => void) | null = null;\r\n\r\n if (visible) {\r\n cleanup = registerError();\r\n }\r\n\r\n return () => cleanup?.();\r\n }, [registerError, visible]);\r\n\r\n if (!visible) return null;\r\n\r\n return (\r\n <div {...props} id={errorId}>\r\n {children ?? serverError ?? validationMessage}\r\n </div>\r\n );\r\n};\r\n\r\nFieldError.displayName = \"Field.Error\";\r\n","import { useFieldControlProps } from \"@blankjs/core\";\r\nimport { Slot, type SlotProps } from \"../slot\";\r\n\r\nexport const FieldControl = ({\r\n children,\r\n}: {\r\n children: SlotProps[\"children\"];\r\n}) => {\r\n const controlProps = useFieldControlProps();\r\n\r\n return <Slot {...controlProps}>{children}</Slot>;\r\n};\r\n\r\nFieldControl.displayName = \"Field.Control\";\r\n","import { FieldRoot } from \"./root\";\r\nimport { FieldLabel } from \"./label\";\r\nimport { FieldDescription } from \"./description\";\r\nimport { FieldError } from \"./error\";\r\nimport { FieldControl } from \"./control\";\r\n\r\nexport { FieldControl, FieldRoot, FieldLabel, FieldDescription, FieldError };\r\n\r\nexport const Field = {\r\n Control: FieldControl,\r\n Root: FieldRoot,\r\n Label: FieldLabel,\r\n Description: FieldDescription,\r\n Error: FieldError,\r\n};\r\n","import type { ComponentProps } from \"react\";\nimport { useFieldControlProps } from \"@blankjs/core\";\nimport type { Size } from \"../types\";\n\nexport interface TextInputProps extends Omit<ComponentProps<\"input\">, \"size\"> {\n size?: Size;\n}\n\nexport const TextInput = ({\n className,\n size = \"md\",\n ...props\n}: TextInputProps) => {\n const fieldProps = useFieldControlProps();\n\n return (\n <input\n {...fieldProps}\n {...props}\n data-size={size}\n className={[\"bk-input\", className].filter(Boolean).join(\" \")}\n />\n );\n};\n\nTextInput.displayName = \"TextInput\";\n","import { useFieldControlProps } from \"@blankjs/core\";\nimport type { ComponentProps } from \"react\";\nimport type { Size } from \"../types\";\n\nexport interface TextareaProps extends ComponentProps<\"textarea\"> {\n size?: Size;\n}\n\nexport const Textarea = ({\n className,\n size = \"md\",\n ...props\n}: TextareaProps) => {\n const fieldProps = useFieldControlProps();\n\n return (\n <textarea\n rows={3}\n {...fieldProps}\n {...props}\n data-size={size}\n className={[\"bk-textarea\", className].filter(Boolean).join(\" \")}\n />\n );\n};\n\nTextarea.displayName = \"Textarea\";\n","import { useFieldControlProps } from \"@blankjs/core\";\r\nimport { useState, type ComponentProps } from \"react\";\r\nimport type { Size } from \"../types\";\r\n\r\nconst EyeIcon = ({ off }: { off: boolean }) => (\r\n <svg\r\n width=\"18\"\r\n height=\"18\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n aria-hidden=\"true\"\r\n >\r\n <path d=\"M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7-10-7-10-7z\" />\r\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\r\n {off && <line x1=\"3\" y1=\"3\" x2=\"21\" y2=\"21\" />}\r\n </svg>\r\n);\r\n\r\ntype PasswordFieldProps = Omit<ComponentProps<\"input\">, \"size\"> & {\r\n size?: Size;\r\n};\r\n\r\nexport const PasswordField = ({\r\n className,\r\n disabled,\r\n size = \"md\",\r\n ...rest\r\n}: PasswordFieldProps) => {\r\n const fieldProps = useFieldControlProps();\r\n\r\n const [visible, setVisible] = useState(false);\r\n\r\n const isDisabled = disabled || fieldProps.disabled;\r\n\r\n const mergedInput = [\"bk-input\", className].filter(Boolean).join(\" \");\r\n\r\n return (\r\n <div className=\"bk-password\" data-size={size}>\r\n <input\r\n {...rest}\r\n {...fieldProps}\r\n type={visible ? \"text\" : \"password\"}\r\n disabled={isDisabled}\r\n className={mergedInput}\r\n />\r\n\r\n <button\r\n className=\"bk-password-toggle\"\r\n type=\"button\"\r\n disabled={isDisabled}\r\n aria-label={visible ? \"Hide password\" : \"Show password\"}\r\n onClick={() => setVisible((v) => !v)}\r\n onMouseDown={(e) => e.preventDefault()}\r\n >\r\n <EyeIcon off={visible} />\r\n </button>\r\n </div>\r\n );\r\n};\r\n","import { createContext, useContext } from \"react\";\r\nimport type { SelectContextValue } from \"./types\";\r\n\r\nexport const SelectContext = createContext<SelectContextValue | null>(null);\r\n\r\nexport const useSelectContext = () => {\r\n const context = useContext(SelectContext);\r\n\r\n if (!context) {\r\n throw new Error(\"[blankjs] Select.* must be used within Select.Root\");\r\n }\r\n\r\n return context;\r\n};\r\n","import { useEffect, useRef } from \"react\";\nimport { useSelectContext } from \"./context\";\nimport { useFieldControlProps } from \"@blankjs/core\";\n\nexport interface SelectHiddenInputProps {\n name: string;\n defaultValue?: string;\n required?: boolean;\n}\n\nexport const SelectHiddenInput = ({\n name,\n defaultValue,\n required,\n}: SelectHiddenInputProps) => {\n const { value, setValue, disabled, triggerElement } = useSelectContext();\n const ref = useRef<HTMLInputElement>(null);\n\n const controlProps = useFieldControlProps();\n const isRequired = required ?? controlProps.required ?? false;\n\n const mountedRef = useRef(false);\n\n useEffect(() => {\n if (!mountedRef.current) {\n mountedRef.current = true;\n\n return;\n }\n\n ref.current?.dispatchEvent(new Event(\"change\", { bubbles: true }));\n }, [value]);\n\n useEffect(() => {\n const form = ref.current?.form;\n\n if (!form) return;\n\n const onReset = () => setValue(defaultValue);\n\n form.addEventListener(\"reset\", onReset);\n\n return () => form.removeEventListener(\"reset\", onReset);\n }, [setValue, defaultValue]);\n\n return (\n <input\n ref={ref}\n type=\"text\"\n name={name}\n value={value ?? \"\"}\n disabled={disabled}\n className=\"bk-select-hidden-input\"\n tabIndex={-1}\n aria-hidden=\"true\"\n autoComplete=\"off\"\n onChange={() => {}}\n required={isRequired}\n onFocus={() => triggerElement?.focus()}\n />\n );\n};\n\nSelectHiddenInput.displayName = \"Select.HiddenInput\";\n","import { useId, useMemo, useState } from \"react\";\r\nimport {\r\n useCollection,\r\n useControllableState,\r\n type CollectionItem,\r\n} from \"@blankjs/core\";\r\n\r\nimport type { SelectContextValue, UseSelectRootOptions } from \"./types\";\r\n\r\nexport const useSelectRoot = (\r\n options: UseSelectRootOptions = {},\r\n): SelectContextValue => {\r\n const [value, setValue] = useControllableState({\r\n prop: options.value,\r\n defaultProp: options.defaultValue,\r\n onChange: options.onValueChange,\r\n });\r\n\r\n const [open, setOpen] = useControllableState({\r\n prop: options.open,\r\n defaultProp: options.defaultOpen,\r\n onChange: options.onOpenChange,\r\n });\r\n\r\n const { getItems, registerItem } = useCollection<string>();\r\n\r\n const [activeItem, setActiveItem] = useState<\r\n CollectionItem<string> | undefined\r\n >(undefined);\r\n\r\n const [triggerElement, setTriggerElement] = useState<HTMLElement | null>(\r\n null,\r\n );\r\n\r\n const triggerId = useId();\r\n const listboxId = useId();\r\n\r\n return useMemo<SelectContextValue>(\r\n () => ({\r\n open: open ?? false,\r\n setOpen,\r\n\r\n activeItem,\r\n setActiveItem,\r\n\r\n value,\r\n setValue,\r\n\r\n triggerElement,\r\n setTriggerElement,\r\n\r\n listboxId,\r\n triggerId,\r\n\r\n getItems,\r\n registerItem,\r\n\r\n disabled: options.disabled ?? false,\r\n\r\n size: options.size ?? \"md\",\r\n }),\r\n [\r\n activeItem,\r\n getItems,\r\n listboxId,\r\n open,\r\n options.disabled,\r\n options.size,\r\n registerItem,\r\n setOpen,\r\n setValue,\r\n triggerElement,\r\n triggerId,\r\n value,\r\n ],\r\n );\r\n};\r\n","import type { PropsWithChildren } from \"react\";\r\nimport { SelectContext } from \"./context\";\r\nimport { SelectHiddenInput } from \"./hidden-input\";\r\nimport type { UseSelectRootOptions } from \"./types\";\r\nimport { useSelectRoot } from \"./use-select-root\";\r\n\r\ntype SelectRootProps = PropsWithChildren<UseSelectRootOptions>;\r\n\r\nexport const SelectRoot = ({\r\n children,\r\n required,\r\n ...options\r\n}: SelectRootProps) => {\r\n const contextValue = useSelectRoot(options);\r\n\r\n return (\r\n <SelectContext value={contextValue}>\r\n <div className=\"bk-select-root\" data-size={contextValue.size}>\r\n {children}\r\n {options.name && (\r\n <SelectHiddenInput\r\n name={options.name}\r\n defaultValue={options.defaultValue}\r\n required={required}\r\n />\r\n )}\r\n </div>\r\n </SelectContext>\r\n );\r\n};\r\n\r\nSelectRoot.displayName = \"Select.Root\";\r\n","import {\r\n autoUpdate,\r\n flip,\r\n offset,\r\n shift,\r\n size,\r\n useFloating,\r\n} from \"@floating-ui/react\";\r\nimport { useEffect } from \"react\";\r\n\r\nexport type MatchWidth = \"exact\" | \"min\";\r\n\r\nexport interface UsePopoverOptions {\r\n anchor: HTMLElement | null;\r\n onDismiss: (reason: \"escape\" | \"outside-press\") => void;\r\n matchWidth?: MatchWidth;\r\n}\r\n\r\nconst matchWidthMap: Record<MatchWidth, string> = {\r\n exact: \"width\",\r\n min: \"minWidth\",\r\n};\r\n\r\nexport const usePopover = ({\r\n anchor,\r\n onDismiss,\r\n matchWidth,\r\n}: UsePopoverOptions) => {\r\n const { refs, floatingStyles, elements } = useFloating({\r\n placement: \"bottom-start\",\r\n middleware: [\r\n offset(4),\r\n flip(),\r\n shift({ padding: 8 }),\r\n size({\r\n apply({ elements: floatingState, rects }) {\r\n Object.assign(floatingState.floating.style, {\r\n [matchWidthMap[matchWidth ?? \"exact\"]]:\r\n `${rects.reference.width}px`,\r\n });\r\n },\r\n }),\r\n ],\r\n whileElementsMounted: autoUpdate,\r\n elements: { reference: anchor },\r\n });\r\n\r\n const { setFloating } = refs;\r\n\r\n useEffect(() => {\r\n const onKeyDown = (e: KeyboardEvent) => {\r\n if (e.key !== \"Escape\" || e.defaultPrevented) return;\r\n\r\n e.preventDefault();\r\n\r\n onDismiss(\"escape\");\r\n };\r\n\r\n document.addEventListener(\"keydown\", onKeyDown);\r\n\r\n return () => document.removeEventListener(\"keydown\", onKeyDown);\r\n }, [onDismiss]);\r\n\r\n useEffect(() => {\r\n const onPointerDown = (e: PointerEvent) => {\r\n const target = e.target as Node;\r\n\r\n if (elements.floating?.contains(target)) return;\r\n if (anchor?.contains(target)) return;\r\n\r\n onDismiss(\"outside-press\");\r\n };\r\n\r\n document.addEventListener(\"pointerdown\", onPointerDown);\r\n\r\n return () => document.removeEventListener(\"pointerdown\", onPointerDown);\r\n }, [anchor, elements.floating, onDismiss]);\r\n\r\n return { setFloating, floatingStyles };\r\n};\r\n","import type { CollectionItem } from \"@blankjs/core\";\r\nimport { useEffect, useState } from \"react\";\r\n\r\nexport interface UseInitialActiveItemOptions<T> {\r\n getItems: () => CollectionItem<T>[];\r\n setActiveItem: (item: CollectionItem<T> | undefined) => void;\r\n isSelected: (item: CollectionItem<T>) => boolean;\r\n}\r\n\r\nexport const useInitialActiveItem = <T>({\r\n getItems,\r\n setActiveItem,\r\n isSelected,\r\n}: UseInitialActiveItemOptions<T>) => {\r\n const [mounted, setMounted] = useState(false);\r\n\r\n // eslint-disable-next-line react-hooks/set-state-in-effect\r\n useEffect(() => setMounted(true), []);\r\n\r\n useEffect(() => {\r\n if (!mounted) return;\r\n\r\n const items = getItems();\r\n const selected = items.find(isSelected);\r\n\r\n setActiveItem(selected ?? items[0]);\r\n\r\n return () => setActiveItem(undefined);\r\n // re-runs when mounted flips true: the commit after Items registered\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [mounted]);\r\n\r\n return mounted;\r\n};\r\n","import type { CollectionItem, SetStateFn } from \"@blankjs/core\";\nimport { useRef, type KeyboardEvent } from \"react\";\n\nexport interface UseListboxKeyboardOptions {\n open: boolean;\n setOpen: SetStateFn<boolean>;\n getItems: () => CollectionItem<string>[];\n activeItem: CollectionItem<string> | undefined;\n setActiveItem: (item: CollectionItem<string> | undefined) => void;\n onCommit: (item: CollectionItem<string>) => void;\n}\n\nexport const useListboxKeyboard = ({\n open,\n setOpen,\n getItems,\n activeItem,\n setActiveItem,\n onCommit,\n}: UseListboxKeyboardOptions) => {\n const searchRef = useRef(\"\");\n const timerRef = useRef<number | null>(null);\n\n const onKeyDown = (e: KeyboardEvent<HTMLButtonElement>) => {\n const key = e.key;\n\n if (!open) {\n switch (key) {\n case \"ArrowDown\":\n case \"ArrowUp\":\n case \"Enter\":\n case \" \": {\n e.preventDefault();\n setOpen(true);\n\n break;\n }\n\n default:\n break;\n }\n\n return;\n }\n\n const items = getItems();\n const index = items.findIndex((item) => item.value === activeItem?.value);\n\n const isPrintable =\n key.length === 1 && !e.ctrlKey && !e.metaKey && !e.altKey;\n const isSpaceSelect = key === \" \" && searchRef.current === \"\";\n\n if (isPrintable && !isSpaceSelect) {\n e.preventDefault();\n\n searchRef.current += key;\n\n if (timerRef.current) clearTimeout(timerRef.current);\n\n timerRef.current = setTimeout(() => {\n searchRef.current = \"\";\n }, 500);\n\n const query = searchRef.current.toLowerCase();\n\n for (let offset = 1; offset <= items.length; offset++) {\n const i = (index + offset) % items.length;\n const item = items[i];\n\n if (item && item.label.toLowerCase().startsWith(query)) {\n setActiveItem(item);\n\n break;\n }\n }\n\n return;\n }\n\n switch (key) {\n case \"ArrowDown\": {\n e.preventDefault();\n\n const next = items[Math.min(index + 1, items.length - 1)];\n\n if (next) {\n setActiveItem(next);\n }\n\n break;\n }\n\n case \"ArrowUp\": {\n e.preventDefault();\n\n const prev = items[Math.max(index - 1, 0)];\n\n if (prev) {\n setActiveItem(prev);\n }\n\n break;\n }\n\n case \"Enter\":\n case \" \": {\n e.preventDefault();\n\n if (activeItem && searchRef.current === \"\") {\n onCommit(activeItem);\n }\n\n break;\n }\n\n case \"Tab\":\n setOpen(false);\n break;\n\n case \"Home\":\n e.preventDefault();\n\n setActiveItem(items[0]);\n\n break;\n\n case \"End\":\n e.preventDefault();\n\n setActiveItem(items[items.length - 1]);\n\n break;\n\n default:\n break;\n }\n };\n\n return onKeyDown;\n};\n","import { type ComponentProps, type ReactElement, type ReactNode } from \"react\";\nimport { useFieldControlProps } from \"@blankjs/core\";\nimport { useSelectContext } from \"./context\";\nimport { Slot } from \"../slot\";\nimport { composeRefs } from \"../slot/compose-refs\";\nimport { useListboxKeyboard } from \"../internal\";\n\nexport interface SelectTriggerProps extends ComponentProps<\"button\"> {\n children: ReactNode;\n asChild?: boolean;\n}\n\nconst SelectArrow = () => (\n <svg\n className=\"bk-select-arrow\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n aria-hidden=\"true\"\n >\n <path d=\"M6 9l6 6 6-6\" />\n </svg>\n);\n\nexport const SelectTrigger = ({\n asChild,\n children,\n className,\n ...props\n}: SelectTriggerProps) => {\n const { required: _, ...fieldProps } = useFieldControlProps();\n\n const {\n open,\n setOpen,\n triggerId,\n listboxId,\n disabled,\n activeItem,\n setTriggerElement,\n getItems,\n setActiveItem,\n setValue,\n } = useSelectContext();\n\n const isDisabled = fieldProps.disabled || disabled;\n const id = fieldProps.id ?? triggerId;\n\n const activeDescendant = open ? activeItem?.id : undefined;\n\n const onListboxKeyDown = useListboxKeyboard({\n activeItem,\n setActiveItem,\n getItems,\n open,\n setOpen,\n onCommit: (item) => {\n setValue(item.value);\n setOpen(false);\n },\n });\n\n const triggerProps: ComponentProps<\"button\"> = {\n type: \"button\" as const,\n ...props,\n ...fieldProps,\n className: [\"bk-select-trigger\", className].filter(Boolean).join(\" \"),\n id,\n role: \"combobox\",\n \"aria-disabled\": isDisabled || undefined,\n \"aria-haspopup\": \"listbox\",\n \"aria-expanded\": open,\n \"aria-controls\": open ? listboxId : undefined,\n \"aria-activedescendant\": activeDescendant,\n disabled: isDisabled,\n onKeyDown: (e) => {\n if (isDisabled) return;\n\n props.onKeyDown?.(e);\n onListboxKeyDown(e);\n },\n onClick: (e) => {\n if (isDisabled) return;\n\n props.onClick?.(e);\n setOpen((o) => !o);\n },\n };\n\n if (asChild) {\n return (\n <Slot\n {...triggerProps}\n ref={composeRefs<HTMLButtonElement>(setTriggerElement, props.ref)}\n >\n {children as ReactElement}\n </Slot>\n );\n }\n\n return (\n <button\n {...triggerProps}\n ref={composeRefs<HTMLButtonElement>(setTriggerElement, props.ref)}\n >\n {children}\n <SelectArrow />\n </button>\n );\n};\n\nSelectTrigger.displayName = \"Select.Trigger\";\n","import { useCallback, type ComponentProps } from \"react\";\r\nimport { createPortal } from \"react-dom\";\r\n\r\nimport { useSelectContext } from \"./context\";\r\nimport {\r\n useInitialActiveItem,\r\n usePopover,\r\n type UsePopoverOptions,\r\n} from \"../internal\";\r\n\r\nexport interface SelectContentProps extends ComponentProps<\"div\"> {\r\n container?: HTMLElement;\r\n}\r\n\r\nconst SelectContentInner = ({\r\n children,\r\n style,\r\n className,\r\n container,\r\n ...props\r\n}: SelectContentProps) => {\r\n const {\r\n triggerElement,\r\n listboxId,\r\n setOpen,\r\n getItems,\r\n value,\r\n setActiveItem,\r\n size,\r\n } = useSelectContext();\r\n\r\n const onDismiss: UsePopoverOptions[\"onDismiss\"] = useCallback(\r\n () => setOpen(false),\r\n [setOpen],\r\n );\r\n\r\n const { setFloating, floatingStyles } = usePopover({\r\n anchor: triggerElement,\r\n onDismiss,\r\n matchWidth: \"exact\",\r\n });\r\n\r\n const mounted = useInitialActiveItem({\r\n getItems,\r\n setActiveItem,\r\n isSelected: (item) => item.value === value,\r\n });\r\n\r\n if (!mounted) return null;\r\n\r\n const target = container ?? document.body;\r\n\r\n return createPortal(\r\n <div\r\n {...props}\r\n ref={setFloating}\r\n style={{ ...style, ...floatingStyles }}\r\n className={[\"bk-select-content\", className].filter(Boolean).join(\" \")}\r\n role=\"listbox\"\r\n id={listboxId}\r\n data-size={size}\r\n >\r\n {children}\r\n </div>,\r\n target,\r\n );\r\n};\r\n\r\nexport const SelectContent = ({ children, ...props }: SelectContentProps) => {\r\n const { open } = useSelectContext();\r\n\r\n if (!open) return null;\r\n\r\n return <SelectContentInner {...props}>{children}</SelectContentInner>;\r\n};\r\n\r\nSelectContent.displayName = \"Select.Content\";\r\n","import { useEffect, useId, useRef, type ComponentProps } from \"react\";\r\nimport { useSelectContext } from \"./context\";\r\n\r\nexport interface SelectItemProps extends ComponentProps<\"div\"> {\r\n value: string;\r\n textValue?: string;\r\n}\r\n\r\nconst SelectCheck = () => (\r\n <svg\r\n className=\"bk-select-check\"\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n aria-hidden=\"true\"\r\n >\r\n <path d=\"M20 6L9 17l-5-5\" />\r\n </svg>\r\n);\r\n\r\nexport const SelectItem = ({\r\n value,\r\n textValue,\r\n children,\r\n className,\r\n ...props\r\n}: SelectItemProps) => {\r\n const ref = useRef<HTMLDivElement>(null);\r\n const optionId = useId();\r\n\r\n const {\r\n value: selectedValue,\r\n activeItem,\r\n setValue,\r\n setOpen,\r\n registerItem,\r\n setActiveItem,\r\n } = useSelectContext();\r\n\r\n const isSelected = value === selectedValue;\r\n\r\n const isActive = value === activeItem?.value;\r\n\r\n useEffect(() => {\r\n const node = ref.current;\r\n\r\n if (!node) return;\r\n\r\n const unregister = registerItem({\r\n node,\r\n value,\r\n label: textValue ?? node.textContent ?? \"\",\r\n id: optionId,\r\n });\r\n\r\n return () => {\r\n unregister();\r\n setActiveItem((prev) => (prev?.value === value ? undefined : prev));\r\n };\r\n }, [registerItem, textValue, value, optionId, setActiveItem]);\r\n\r\n useEffect(() => {\r\n if (isActive) {\r\n ref.current?.scrollIntoView({ block: \"nearest\" });\r\n }\r\n }, [isActive]);\r\n\r\n return (\r\n <div\r\n {...props}\r\n ref={ref}\r\n className={[\"bk-select-item\", className].filter(Boolean).join(\" \")}\r\n role=\"option\"\r\n id={optionId}\r\n aria-selected={isSelected}\r\n data-active={isActive ? \"\" : undefined}\r\n onClick={(e) => {\r\n props.onClick?.(e);\r\n\r\n if (e.defaultPrevented) return;\r\n\r\n setValue(value);\r\n setOpen(false);\r\n }}\r\n >\r\n {children}\r\n <SelectCheck />\r\n </div>\r\n );\r\n};\r\n\r\nSelectItem.displayName = \"Select.Item\";\r\n","import { useSelectContext } from \"./context\";\r\nimport type { ReactNode } from \"react\";\r\n\r\nexport interface SelectValueProps {\r\n placeholder?: ReactNode;\r\n children?: (value: string) => ReactNode;\r\n}\r\n\r\nexport const SelectValue = ({ placeholder, children }: SelectValueProps) => {\r\n const { value } = useSelectContext();\r\n\r\n const getValue = () => {\r\n if (value === undefined) return placeholder;\r\n\r\n if (children) return children(value);\r\n\r\n return value;\r\n };\r\n\r\n return (\r\n <span\r\n className=\"bk-select-value\"\r\n data-placeholder={value === undefined ? \"\" : undefined}\r\n >\r\n {getValue()}\r\n </span>\r\n );\r\n};\r\n\r\nSelectValue.displayName = \"Select.Value\";\r\n","import type { ComponentProps, MouseEvent } from \"react\";\r\nimport { useSelectContext } from \"./context\";\r\n\r\nconst SelectClearIcon = () => (\r\n <svg\r\n width=\"14\"\r\n height=\"14\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n aria-hidden=\"true\"\r\n >\r\n <path d=\"M18 6L6 18M6 6l12 12\" />\r\n </svg>\r\n);\r\n\r\nexport type SelectClearProps = ComponentProps<\"button\">;\r\n\r\nexport const SelectClear = ({\r\n className,\r\n children,\r\n onClick,\r\n ...props\r\n}: SelectClearProps) => {\r\n const { value, setValue, disabled, triggerElement } = useSelectContext();\r\n\r\n if (!value || disabled) return null;\r\n\r\n const handleClick = (e: MouseEvent<HTMLButtonElement>) => {\r\n onClick?.(e);\r\n\r\n if (e.defaultPrevented) return;\r\n\r\n setValue(undefined);\r\n\r\n triggerElement?.focus();\r\n };\r\n\r\n return (\r\n <button\r\n type=\"button\"\r\n aria-label=\"Clear\"\r\n className={[\"bk-select-clear\", className].filter(Boolean).join(\" \")}\r\n onClick={handleClick}\r\n {...props}\r\n >\r\n {children ?? <SelectClearIcon />}\r\n </button>\r\n );\r\n};\r\n\r\nSelectClear.displayName = \"Select.Clear\";\r\n","import { SelectRoot } from \"./root\";\r\nimport { SelectTrigger } from \"./trigger\";\r\nimport { SelectContent } from \"./content\";\r\nimport { SelectItem } from \"./item\";\r\nimport { SelectValue } from \"./value\";\r\nimport { SelectClear } from \"./clear\";\r\n\r\nexport {\r\n SelectRoot,\r\n SelectTrigger,\r\n SelectContent,\r\n SelectItem,\r\n SelectValue,\r\n SelectClear,\r\n};\r\n\r\nexport type { SelectTriggerProps } from \"./trigger\";\r\nexport type { SelectContentProps } from \"./content\";\r\n\r\nexport const Select = {\r\n Root: SelectRoot,\r\n Trigger: SelectTrigger,\r\n Content: SelectContent,\r\n Item: SelectItem,\r\n Value: SelectValue,\r\n Clear: SelectClear,\r\n};\r\n","import type { ComponentProps, ReactElement } from \"react\";\r\nimport { Slot } from \"../slot\";\r\nimport type { Size } from \"../types\";\r\n\r\nexport interface ButtonProps extends ComponentProps<\"button\"> {\r\n asChild?: boolean;\r\n variant?: \"solid\" | \"outline\" | \"ghost\";\r\n size?: Size;\r\n}\r\n\r\nexport const Button = ({\r\n children,\r\n className,\r\n asChild,\r\n variant = \"solid\",\r\n size = \"md\",\r\n ...props\r\n}: ButtonProps) => {\r\n const buttonProps = {\r\n type: \"button\" as const,\r\n ...props,\r\n className: [\"bk-button\", className].filter(Boolean).join(\" \"),\r\n \"data-variant\": variant,\r\n \"data-size\": size,\r\n };\r\n\r\n if (asChild) {\r\n return <Slot {...buttonProps}>{children as ReactElement}</Slot>;\r\n }\r\n\r\n return <button {...buttonProps}>{children}</button>;\r\n};\r\n","import { useControllableState, useFieldControlProps } from \"@blankjs/core\";\r\nimport {\r\n useEffect,\r\n useRef,\r\n type ChangeEvent,\r\n type ComponentProps,\r\n} from \"react\";\r\nimport { composeRefs } from \"../slot\";\r\nimport type { Size } from \"../types\";\r\n\r\nexport interface CheckboxProps extends Omit<\r\n ComponentProps<\"input\">,\r\n \"type\" | \"checked\" | \"defaultChecked\" | \"onChange\" | \"size\"\r\n> {\r\n checked?: boolean;\r\n defaultChecked?: boolean;\r\n onCheckedChange?: (checked: boolean) => void;\r\n indeterminate?: boolean;\r\n onChange?: ComponentProps<\"input\">[\"onChange\"];\r\n size?: Size;\r\n}\r\n\r\nexport const Checkbox = ({\r\n checked,\r\n defaultChecked,\r\n onCheckedChange,\r\n indeterminate,\r\n onChange,\r\n disabled,\r\n className,\r\n size = \"md\",\r\n ...props\r\n}: CheckboxProps) => {\r\n const fieldProps = useFieldControlProps();\r\n\r\n const [value, setValue] = useControllableState({\r\n prop: checked,\r\n defaultProp: defaultChecked,\r\n onChange: onCheckedChange,\r\n });\r\n\r\n const ref = useRef<HTMLInputElement>(null);\r\n\r\n useEffect(() => {\r\n const form = ref.current?.form;\r\n\r\n if (!form) return;\r\n\r\n const onReset = () => setValue(defaultChecked ?? false);\r\n\r\n form.addEventListener(\"reset\", onReset);\r\n\r\n return () => form.removeEventListener(\"reset\", onReset);\r\n }, [setValue, defaultChecked]);\r\n\r\n useEffect(() => {\r\n if (ref.current) ref.current.indeterminate = indeterminate ?? false;\r\n }, [indeterminate, value]);\r\n\r\n const isDisabled = disabled ?? fieldProps.disabled;\r\n\r\n const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\r\n onChange?.(e);\r\n\r\n if (e.defaultPrevented) return;\r\n\r\n setValue(e.target.checked);\r\n };\r\n\r\n return (\r\n <input\r\n {...fieldProps}\r\n {...props}\r\n checked={value ?? false}\r\n onChange={handleChange}\r\n ref={composeRefs(ref, props.ref)}\r\n disabled={isDisabled}\r\n data-size={size}\r\n className={[\"bk-checkbox\", className].filter(Boolean).join(\" \")}\r\n type=\"checkbox\"\r\n />\r\n );\r\n};\r\n","import { useControllableState, useFieldControlProps } from \"@blankjs/core\";\r\nimport {\r\n useEffect,\r\n useRef,\r\n type ChangeEvent,\r\n type ComponentProps,\r\n} from \"react\";\r\nimport { composeRefs } from \"../slot\";\r\nimport type { Size } from \"../types\";\r\n\r\nexport interface SwitchProps extends Omit<\r\n ComponentProps<\"input\">,\r\n \"type\" | \"checked\" | \"defaultChecked\" | \"size\"\r\n> {\r\n checked?: boolean;\r\n defaultChecked?: boolean;\r\n onCheckedChange?: (checked: boolean) => void;\r\n size?: Size;\r\n}\r\n\r\nexport const Switch = ({\r\n checked,\r\n defaultChecked,\r\n onCheckedChange,\r\n disabled,\r\n className,\r\n style,\r\n onChange,\r\n size = \"md\",\r\n ...props\r\n}: SwitchProps) => {\r\n const fieldProps = useFieldControlProps();\r\n\r\n const [value, setValue] = useControllableState({\r\n prop: checked,\r\n defaultProp: defaultChecked,\r\n onChange: onCheckedChange,\r\n });\r\n\r\n const ref = useRef<HTMLInputElement>(null);\r\n\r\n useEffect(() => {\r\n const form = ref.current?.form;\r\n\r\n if (!form) return;\r\n\r\n const onReset = () => setValue(defaultChecked ?? false);\r\n\r\n form.addEventListener(\"reset\", onReset);\r\n\r\n return () => form.removeEventListener(\"reset\", onReset);\r\n }, [setValue, defaultChecked]);\r\n\r\n const isDisabled = disabled ?? fieldProps.disabled;\r\n\r\n const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\r\n onChange?.(e);\r\n\r\n if (e.defaultPrevented) return;\r\n\r\n setValue(e.target.checked);\r\n };\r\n\r\n return (\r\n <span\r\n className={[\"bk-switch\", className].filter(Boolean).join(\" \")}\r\n style={style}\r\n data-size={size}\r\n >\r\n <input\r\n {...fieldProps}\r\n {...props}\r\n role=\"switch\"\r\n checked={value ?? false}\r\n onChange={handleChange}\r\n ref={composeRefs(ref, props.ref)}\r\n disabled={isDisabled}\r\n className=\"bk-switch-input\"\r\n type=\"checkbox\"\r\n />\r\n <span className=\"bk-switch-thumb\" aria-hidden=\"true\" />\r\n </span>\r\n );\r\n};\r\n","import { createContext, useContext } from \"react\";\r\nimport type { RadioGroupContextValue } from \"./types\";\r\n\r\nexport const RadioGroupContext = createContext<RadioGroupContextValue | null>(\r\n null,\r\n);\r\n\r\nexport const useRadioGroupContext = () => {\r\n const context = useContext(RadioGroupContext);\r\n\r\n if (!context) {\r\n throw new Error(\r\n \"[blankjs] RadioGroup.* must be used within RadioGroup.Root\",\r\n );\r\n }\r\n\r\n return context;\r\n};\r\n","import { useControllableState } from \"@blankjs/core\";\r\nimport type { RadioGroupContextValue, UseRadioGroupRootOptions } from \"./types\";\r\nimport { useId, useMemo } from \"react\";\r\n\r\nexport const useRadioGroupRoot = (\r\n options: UseRadioGroupRootOptions = {},\r\n): RadioGroupContextValue => {\r\n const [value, setValue] = useControllableState({\r\n prop: options.value,\r\n defaultProp: options.defaultValue,\r\n onChange: options.onValueChange,\r\n });\r\n\r\n const fallbackName = useId();\r\n\r\n const name = options.name ?? fallbackName;\r\n\r\n return useMemo(\r\n () => ({\r\n value,\r\n setValue,\r\n disabled: options.disabled ?? false,\r\n name,\r\n }),\r\n [name, options.disabled, setValue, value],\r\n );\r\n};\r\n","import { useContext, useEffect, useRef, type ComponentProps } from \"react\";\nimport type { UseRadioGroupRootOptions } from \"./types\";\nimport { RadioGroupContext } from \"./context\";\nimport { useRadioGroupRoot } from \"./use-radio-group-root\";\nimport { FieldContext, useFieldControlProps } from \"@blankjs/core\";\nimport { composeRefs } from \"../slot\";\nimport type { Size } from \"../types\";\n\nexport type RadioGroupRootProps = UseRadioGroupRootOptions &\n Omit<ComponentProps<\"div\">, \"defaultValue\" | \"onChange\"> & {\n size?: Size;\n };\n\nexport const RadioGroupRoot = ({\n children,\n value,\n defaultValue,\n onValueChange,\n disabled,\n name,\n className,\n size = \"md\",\n ...props\n}: RadioGroupRootProps) => {\n const { disabled: fieldDisabled, ...fieldProps } = useFieldControlProps();\n\n const fieldContext = useContext(FieldContext);\n const labelledBy = fieldContext?.hasLabel ? fieldContext.labelId : undefined;\n const registerGroupControl = fieldContext?.registerGroupControl;\n\n useEffect(() => registerGroupControl?.(), [registerGroupControl]);\n\n const contextValue = useRadioGroupRoot({\n value,\n defaultValue,\n onValueChange,\n disabled: disabled ?? fieldDisabled,\n name,\n });\n\n const { setValue } = contextValue;\n\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const form = ref.current?.closest(\"form\");\n\n if (!form) return;\n\n const onReset = () => setValue(defaultValue);\n\n form.addEventListener(\"reset\", onReset);\n\n return () => form.removeEventListener(\"reset\", onReset);\n }, [setValue, defaultValue]);\n\n return (\n <RadioGroupContext value={contextValue}>\n <div\n {...fieldProps}\n {...props}\n ref={composeRefs(ref, props.ref)}\n role=\"radiogroup\"\n data-size={size}\n aria-labelledby={props[\"aria-labelledby\"] ?? labelledBy}\n className={[\"bk-radio-group\", className].filter(Boolean).join(\" \")}\n >\n {children}\n </div>\n </RadioGroupContext>\n );\n};\n\nRadioGroupRoot.displayName = \"RadioGroup.Root\";\n","import type { ChangeEvent, ComponentProps } from \"react\";\nimport { useRadioGroupContext } from \"./context\";\n\nexport interface RadioGroupItemProps extends Omit<\n ComponentProps<\"input\">,\n \"type\" | \"name\" | \"checked\" | \"defaultChecked\" | \"value\"\n> {\n value: string;\n}\n\nexport const RadioGroupItem = ({\n className,\n style,\n onChange,\n children,\n ...props\n}: RadioGroupItemProps) => {\n const {\n name,\n setValue,\n value: contextValue,\n disabled,\n } = useRadioGroupContext();\n\n const isDisabled = props.disabled ?? disabled;\n\n const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n onChange?.(e);\n\n if (e.defaultPrevented) return;\n\n setValue(e.target.value);\n };\n\n const input = (\n <input\n {...props}\n checked={contextValue === props.value}\n onChange={handleChange}\n disabled={isDisabled}\n type=\"radio\"\n name={name}\n className={\n children\n ? \"bk-radio-item\"\n : [\"bk-radio-item\", className].filter(Boolean).join(\" \")\n }\n style={children ? undefined : style}\n />\n );\n\n if (!children) return input;\n\n return (\n <label\n className={[\"bk-radio-label\", className].filter(Boolean).join(\" \")}\n style={style}\n >\n {input}\n {children}\n </label>\n );\n};\n\nRadioGroupItem.displayName = \"RadioGroup.Item\";\n","import { RadioGroupRoot } from \"./root\";\nimport { RadioGroupItem } from \"./item\";\n\nexport { RadioGroupRoot, RadioGroupItem };\n\nexport type { RadioGroupRootProps } from \"./root\";\nexport type { RadioGroupItemProps } from \"./item\";\n\nexport const RadioGroup = {\n Root: RadioGroupRoot,\n Item: RadioGroupItem,\n};\n","import { useCallback, useId, useMemo, useState } from \"react\";\r\nimport {\r\n useCollection,\r\n useControllableState,\r\n type CollectionItem,\r\n} from \"@blankjs/core\";\r\n\r\nimport type {\r\n MultiSelectContextValue,\r\n UseMultiSelectRootOptions,\r\n} from \"./types\";\r\n\r\nexport const useMultiSelectRoot = (\r\n options: UseMultiSelectRootOptions = {},\r\n): MultiSelectContextValue => {\r\n const [value, setValue] = useControllableState({\r\n prop: options.value,\r\n defaultProp: options.defaultValue ?? [],\r\n onChange: options.onValueChange,\r\n });\r\n\r\n const [open, setOpen] = useControllableState({\r\n prop: options.open,\r\n defaultProp: options.defaultOpen,\r\n onChange: options.onOpenChange,\r\n });\r\n\r\n const { getItems, registerItem } = useCollection<string>();\r\n\r\n const [activeItem, setActiveItem] = useState<\r\n CollectionItem<string> | undefined\r\n >(undefined);\r\n\r\n const [triggerElement, setTriggerElement] = useState<HTMLElement | null>(\r\n null,\r\n );\r\n\r\n const triggerId = useId();\r\n const listboxId = useId();\r\n\r\n const toggleValue = useCallback(\r\n (v: string) =>\r\n setValue((prev = []) =>\r\n prev.includes(v) ? prev.filter((x) => x !== v) : [...prev, v],\r\n ),\r\n [setValue],\r\n );\r\n\r\n return useMemo<MultiSelectContextValue>(\r\n () => ({\r\n open: open ?? false,\r\n setOpen,\r\n\r\n activeItem,\r\n setActiveItem,\r\n\r\n value: value ?? [],\r\n setValue,\r\n\r\n triggerElement,\r\n setTriggerElement,\r\n\r\n listboxId,\r\n triggerId,\r\n\r\n getItems,\r\n registerItem,\r\n\r\n toggleValue,\r\n\r\n disabled: options.disabled ?? false,\r\n\r\n size: options.size ?? \"md\",\r\n }),\r\n [\r\n activeItem,\r\n getItems,\r\n listboxId,\r\n open,\r\n options.disabled,\r\n options.size,\r\n registerItem,\r\n setOpen,\r\n setValue,\r\n toggleValue,\r\n triggerElement,\r\n triggerId,\r\n value,\r\n ],\r\n );\r\n};\r\n","import { createContext, useContext } from \"react\";\r\nimport type { MultiSelectContextValue } from \"./types\";\r\n\r\nexport const MultiSelectContext = createContext<MultiSelectContextValue | null>(\r\n null,\r\n);\r\n\r\nexport const useMultiSelectContext = () => {\r\n const context = useContext(MultiSelectContext);\r\n\r\n if (!context) {\r\n throw new Error(\r\n \"[blankjs] MultiSelect.* must be used within MultiSelect.Root\",\r\n );\r\n }\r\n\r\n return context;\r\n};\r\n","import { useEffect, useRef } from \"react\";\nimport { useMultiSelectContext } from \"./context\";\nimport { useFieldControlProps } from \"@blankjs/core\";\n\nexport interface MultiSelectHiddenInputProps {\n name: string;\n defaultValue?: string[];\n required?: boolean;\n}\n\nexport const MultiSelectHiddenInput = ({\n name,\n defaultValue,\n required,\n}: MultiSelectHiddenInputProps) => {\n const { value, setValue, disabled, triggerElement } =\n useMultiSelectContext();\n const ref = useRef<HTMLInputElement>(null);\n\n const controlProps = useFieldControlProps();\n const isRequired = required ?? controlProps.required ?? false;\n\n const defaultValueRef = useRef(defaultValue);\n\n useEffect(() => {\n defaultValueRef.current = defaultValue;\n }, [defaultValue]);\n\n const mountedRef = useRef(false);\n\n useEffect(() => {\n if (!mountedRef.current) {\n mountedRef.current = true;\n\n return;\n }\n\n ref.current?.dispatchEvent(new Event(\"change\", { bubbles: true }));\n }, [value]);\n\n useEffect(() => {\n const form = ref.current?.form;\n\n if (!form) return;\n\n const onReset = () => setValue(defaultValueRef.current ?? []);\n\n form.addEventListener(\"reset\", onReset);\n\n return () => form.removeEventListener(\"reset\", onReset);\n }, [setValue]);\n\n return (\n <>\n <input\n ref={ref}\n type=\"text\"\n value={value.join(\",\")}\n disabled={disabled}\n className=\"bk-multi-select-hidden-input\"\n tabIndex={-1}\n aria-hidden=\"true\"\n autoComplete=\"off\"\n onChange={() => {}}\n required={isRequired}\n onFocus={() => triggerElement?.focus()}\n />\n {value.map((v) => (\n <input\n key={v}\n type=\"hidden\"\n name={name}\n value={v}\n disabled={disabled}\n readOnly\n />\n ))}\n </>\n );\n};\n\nMultiSelectHiddenInput.displayName = \"MultiSelect.HiddenInput\";\n","import type { PropsWithChildren } from \"react\";\r\nimport type { UseMultiSelectRootOptions } from \"./types\";\r\nimport { useMultiSelectRoot } from \"./use-multi-select-root\";\r\nimport { MultiSelectContext } from \"./context\";\r\nimport { MultiSelectHiddenInput } from \"./hidden-input\";\r\n\r\ntype MultiSelectRootProps = PropsWithChildren<UseMultiSelectRootOptions>;\r\n\r\nexport const MultiSelectRoot = ({\r\n children,\r\n required,\r\n ...options\r\n}: MultiSelectRootProps) => {\r\n const contextValue = useMultiSelectRoot(options);\r\n\r\n return (\r\n <MultiSelectContext value={contextValue}>\r\n <div className=\"bk-multi-select-root\" data-size={contextValue.size}>\r\n {children}\r\n {options.name && (\r\n <MultiSelectHiddenInput\r\n name={options.name}\r\n defaultValue={options.defaultValue}\r\n required={required}\r\n />\r\n )}\r\n </div>\r\n </MultiSelectContext>\r\n );\r\n};\r\n\r\nMultiSelectRoot.displayName = \"MultiSelect.Root\";\r\n","import { useFieldControlProps } from \"@blankjs/core\";\nimport {\n type ComponentProps,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { useMultiSelectContext } from \"./context\";\nimport { composeRefs, Slot } from \"../slot\";\nimport { useListboxKeyboard } from \"../internal\";\n\nexport interface MultiSelectTriggerProps extends ComponentProps<\"button\"> {\n children: ReactNode;\n asChild?: boolean;\n}\n\nconst MultiSelectArrow = () => (\n <svg\n className=\"bk-multi-select-arrow\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n aria-hidden=\"true\"\n >\n <path d=\"M6 9l6 6 6-6\" />\n </svg>\n);\n\nexport const MultiSelectTrigger = ({\n asChild,\n children,\n className,\n ...props\n}: MultiSelectTriggerProps) => {\n const { required: _required, ...fieldProps } = useFieldControlProps();\n\n const {\n open,\n setOpen,\n triggerId,\n listboxId,\n disabled,\n activeItem,\n setTriggerElement,\n getItems,\n setActiveItem,\n toggleValue,\n } = useMultiSelectContext();\n\n const isDisabled = fieldProps.disabled || disabled;\n const id = fieldProps.id ?? triggerId;\n\n const activeDescendant = open ? activeItem?.id : undefined;\n\n const onListboxKeyDown = useListboxKeyboard({\n activeItem,\n setActiveItem,\n getItems,\n open,\n setOpen,\n onCommit: (item) => toggleValue(item.value),\n });\n\n const triggerProps: ComponentProps<\"button\"> = {\n type: \"button\" as const,\n ...props,\n ...fieldProps,\n className: [\"bk-multi-select-trigger\", className].filter(Boolean).join(\" \"),\n id,\n role: \"combobox\",\n \"aria-disabled\": isDisabled || undefined,\n \"aria-haspopup\": \"listbox\",\n \"aria-expanded\": open,\n \"aria-controls\": open ? listboxId : undefined,\n \"aria-activedescendant\": activeDescendant,\n disabled: isDisabled,\n onKeyDown: (e) => {\n if (isDisabled) return;\n\n props.onKeyDown?.(e);\n onListboxKeyDown(e);\n },\n onClick: (e) => {\n if (isDisabled) return;\n\n props.onClick?.(e);\n setOpen((o) => !o);\n },\n };\n\n if (asChild) {\n return (\n <Slot\n {...triggerProps}\n ref={composeRefs<HTMLButtonElement>(setTriggerElement, props.ref)}\n >\n {children as ReactElement}\n </Slot>\n );\n }\n\n return (\n <button\n {...triggerProps}\n ref={composeRefs<HTMLButtonElement>(setTriggerElement, props.ref)}\n >\n {children}\n <MultiSelectArrow />\n </button>\n );\n};\n\nMultiSelectTrigger.displayName = \"MultiSelect.Trigger\";\n","import { useCallback, type ComponentProps } from \"react\";\nimport { createPortal } from \"react-dom\";\n\nimport { useMultiSelectContext } from \"./context\";\nimport {\n useInitialActiveItem,\n usePopover,\n type UsePopoverOptions,\n} from \"../internal\";\n\nexport interface MultiSelectContentProps extends ComponentProps<\"div\"> {\n container?: HTMLElement;\n}\n\nconst MultiSelectContentInner = ({\n children,\n style,\n className,\n container,\n ...props\n}: MultiSelectContentProps) => {\n const {\n triggerElement,\n listboxId,\n setOpen,\n getItems,\n value,\n setActiveItem,\n size,\n } = useMultiSelectContext();\n\n const onDismiss: UsePopoverOptions[\"onDismiss\"] = useCallback(\n () => setOpen(false),\n [setOpen],\n );\n\n const { setFloating, floatingStyles } = usePopover({\n anchor: triggerElement,\n onDismiss,\n });\n\n const mounted = useInitialActiveItem({\n getItems,\n setActiveItem,\n isSelected: (item) => value.includes(item.value),\n });\n\n if (!mounted) return null;\n\n const target = container ?? document.body;\n\n return createPortal(\n <div\n {...props}\n ref={setFloating}\n style={{ ...style, ...floatingStyles }}\n className={[\"bk-multi-select-content\", className]\n .filter(Boolean)\n .join(\" \")}\n role=\"listbox\"\n aria-multiselectable=\"true\"\n id={listboxId}\n data-size={size}\n >\n {children}\n </div>,\n target,\n );\n};\n\nexport const MultiSelectContent = ({\n children,\n ...props\n}: MultiSelectContentProps) => {\n const { open } = useMultiSelectContext();\n\n if (!open) return null;\n\n return (\n <MultiSelectContentInner {...props}>{children}</MultiSelectContentInner>\n );\n};\n\nMultiSelectContent.displayName = \"MultiSelect.Content\";\n","import { useEffect, useId, useRef, type ComponentProps } from \"react\";\r\nimport { useMultiSelectContext } from \"./context\";\r\n\r\nexport interface MultiSelectItemProps extends ComponentProps<\"div\"> {\r\n value: string;\r\n textValue?: string;\r\n}\r\n\r\nconst MultiSelectCheck = () => (\r\n <svg\r\n className=\"bk-multi-select-check\"\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n aria-hidden=\"true\"\r\n >\r\n <path d=\"M20 6L9 17l-5-5\" />\r\n </svg>\r\n);\r\n\r\nexport const MultiSelectItem = ({\r\n value,\r\n textValue,\r\n children,\r\n className,\r\n ...props\r\n}: MultiSelectItemProps) => {\r\n const ref = useRef<HTMLDivElement>(null);\r\n const optionId = useId();\r\n\r\n const {\r\n value: selectedValue,\r\n activeItem,\r\n registerItem,\r\n setActiveItem,\r\n toggleValue,\r\n } = useMultiSelectContext();\r\n\r\n const isSelected = selectedValue.includes(value);\r\n\r\n const isActive = value === activeItem?.value;\r\n\r\n useEffect(() => {\r\n const node = ref.current;\r\n\r\n if (!node) return;\r\n\r\n const unregister = registerItem({\r\n node,\r\n value,\r\n label: textValue ?? node.textContent ?? \"\",\r\n id: optionId,\r\n });\r\n\r\n return () => {\r\n unregister();\r\n setActiveItem((prev) => (prev?.value === value ? undefined : prev));\r\n };\r\n }, [registerItem, textValue, value, optionId, setActiveItem]);\r\n\r\n useEffect(() => {\r\n if (isActive) {\r\n ref.current?.scrollIntoView({ block: \"nearest\" });\r\n }\r\n }, [isActive]);\r\n\r\n return (\r\n <div\r\n {...props}\r\n ref={ref}\r\n className={[\"bk-multi-select-item\", className].filter(Boolean).join(\" \")}\r\n role=\"option\"\r\n id={optionId}\r\n aria-selected={isSelected}\r\n data-active={isActive ? \"\" : undefined}\r\n onClick={(e) => {\r\n props.onClick?.(e);\r\n\r\n if (e.defaultPrevented) return;\r\n\r\n toggleValue(value);\r\n }}\r\n >\r\n {children}\r\n <MultiSelectCheck />\r\n </div>\r\n );\r\n};\r\n\r\nMultiSelectItem.displayName = \"MultiSelect.Item\";\r\n","import type { ReactNode } from \"react\";\r\nimport { useMultiSelectContext } from \"./context\";\r\n\r\nexport interface MultiSelectValueProps {\r\n placeholder?: string;\r\n children?: (value: string[]) => ReactNode;\r\n}\r\n\r\nexport const MultiSelectValue = ({\r\n placeholder,\r\n children,\r\n}: MultiSelectValueProps) => {\r\n const { value } = useMultiSelectContext();\r\n\r\n const isValueEmpty = value.length === 0;\r\n\r\n const getValue = () => {\r\n if (isValueEmpty) return placeholder;\r\n\r\n if (children) return children(value);\r\n\r\n return value.join(\", \");\r\n };\r\n\r\n return (\r\n <span\r\n className=\"bk-multi-select-value\"\r\n data-placeholder={isValueEmpty ? \"\" : undefined}\r\n >\r\n {getValue()}\r\n </span>\r\n );\r\n};\r\n\r\nMultiSelectValue.displayName = \"MultiSelect.Value\";\r\n","import type { ComponentProps, MouseEvent } from \"react\";\nimport { useMultiSelectContext } from \"./context\";\n\nconst MultiSelectClearIcon = () => (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n aria-hidden=\"true\"\n >\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n);\n\nexport type MultiSelectClearProps = ComponentProps<\"button\">;\n\nexport const MultiSelectClear = ({\n className,\n children,\n onClick,\n ...props\n}: MultiSelectClearProps) => {\n const { value, setValue, disabled, triggerElement } =\n useMultiSelectContext();\n\n if (!value.length || disabled) return null;\n\n const handleClick = (e: MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n\n if (e.defaultPrevented) return;\n\n setValue([]);\n\n triggerElement?.focus();\n };\n\n return (\n <button\n type=\"button\"\n aria-label=\"Clear\"\n className={[\"bk-multi-select-clear\", className].filter(Boolean).join(\" \")}\n onClick={handleClick}\n {...props}\n >\n {children ?? <MultiSelectClearIcon />}\n </button>\n );\n};\n\nMultiSelectClear.displayName = \"MultiSelect.Clear\";\n","import { MultiSelectRoot } from \"./root\";\nimport { MultiSelectTrigger } from \"./trigger\";\nimport { MultiSelectContent } from \"./content\";\nimport { MultiSelectItem } from \"./item\";\nimport { MultiSelectValue } from \"./value\";\nimport { MultiSelectClear } from \"./clear\";\n\nexport {\n MultiSelectRoot,\n MultiSelectTrigger,\n MultiSelectContent,\n MultiSelectItem,\n MultiSelectValue,\n MultiSelectClear,\n};\n\nexport type { MultiSelectTriggerProps } from \"./trigger\";\nexport type { MultiSelectContentProps } from \"./content\";\nexport type { MultiSelectItemProps } from \"./item\";\nexport type { MultiSelectValueProps } from \"./value\";\n\nexport const MultiSelect = {\n Root: MultiSelectRoot,\n Trigger: MultiSelectTrigger,\n Content: MultiSelectContent,\n Item: MultiSelectItem,\n Value: MultiSelectValue,\n Clear: MultiSelectClear,\n};\n","import {\r\n useCollection,\r\n useControllableState,\r\n type CollectionItem,\r\n} from \"@blankjs/core\";\r\nimport type { ComboboxContextValue, UseComboboxRootOptions } from \"./types\";\r\nimport { useCallback, useId, useMemo, useRef, useState } from \"react\";\r\n\r\nexport const useComboboxRoot = (\r\n options: UseComboboxRootOptions = {},\r\n): ComboboxContextValue => {\r\n const [value, setValue] = useControllableState({\r\n prop: options.value,\r\n defaultProp: options.defaultValue,\r\n onChange: options.onValueChange,\r\n });\r\n\r\n const [open, setOpen] = useControllableState({\r\n prop: options.open,\r\n defaultProp: options.defaultOpen,\r\n onChange: options.onOpenChange,\r\n });\r\n\r\n const [inputValue, setInputValue] = useControllableState({\r\n prop: options.inputValue,\r\n defaultProp: options.defaultInputValue ?? \"\",\r\n onChange: options.onInputValueChange,\r\n });\r\n\r\n const committedLabelRef = useRef(options.defaultInputValue ?? \"\");\r\n\r\n const { getItems, registerItem } = useCollection<string>();\r\n\r\n const [activeItem, setActiveItem] = useState<\r\n CollectionItem<string> | undefined\r\n >();\r\n\r\n const [inputGroupElement, setInputGroupElement] =\r\n useState<HTMLElement | null>(null);\r\n\r\n const inputId = useId();\r\n const listboxId = useId();\r\n\r\n const revertInputValue = useCallback(() => {\r\n setInputValue(committedLabelRef.current);\r\n }, [setInputValue]);\r\n\r\n const commitItem = useCallback(\r\n (item: CollectionItem<string>) => {\r\n setValue(item.value);\r\n setInputValue(item.label);\r\n setOpen(false);\r\n\r\n committedLabelRef.current = item.label;\r\n },\r\n [setInputValue, setOpen, setValue],\r\n );\r\n\r\n const resetToDefault = useCallback(() => {\r\n const defaultInputValue = options.defaultInputValue ?? \"\";\r\n\r\n setInputValue(defaultInputValue);\r\n setValue(options.defaultValue);\r\n setOpen(false);\r\n\r\n committedLabelRef.current = defaultInputValue;\r\n }, [\r\n options.defaultInputValue,\r\n options.defaultValue,\r\n setInputValue,\r\n setOpen,\r\n setValue,\r\n ]);\r\n\r\n const clear = useCallback(() => {\r\n setValue(undefined);\r\n setInputValue(\"\");\r\n committedLabelRef.current = \"\";\r\n }, [setInputValue, setValue]);\r\n\r\n return useMemo(\r\n () => ({\r\n open: open ?? false,\r\n setOpen,\r\n\r\n value,\r\n setValue,\r\n\r\n inputValue: inputValue ?? \"\",\r\n setInputValue,\r\n\r\n activeItem,\r\n setActiveItem,\r\n\r\n commitItem,\r\n\r\n registerItem,\r\n getItems,\r\n\r\n inputGroupElement,\r\n setInputGroupElement,\r\n\r\n inputId,\r\n listboxId,\r\n\r\n disabled: options.disabled ?? false,\r\n\r\n revertInputValue,\r\n\r\n resetToDefault,\r\n\r\n clear,\r\n\r\n size: options.size ?? \"md\",\r\n }),\r\n [\r\n activeItem,\r\n clear,\r\n options.size,\r\n commitItem,\r\n getItems,\r\n inputGroupElement,\r\n inputId,\r\n inputValue,\r\n listboxId,\r\n open,\r\n options.disabled,\r\n registerItem,\r\n resetToDefault,\r\n revertInputValue,\r\n setInputValue,\r\n setOpen,\r\n setValue,\r\n value,\r\n ],\r\n );\r\n};\r\n","import { createContext, useContext } from \"react\";\r\nimport type { ComboboxContextValue } from \"./types\";\r\n\r\nexport const ComboboxContext = createContext<ComboboxContextValue | null>(null);\r\n\r\nexport const useComboboxContext = () => {\r\n const context = useContext(ComboboxContext);\r\n\r\n if (!context) {\r\n throw new Error(\"[blankjs] Combobox.* must be used within Combobox.Root\");\r\n }\r\n\r\n return context;\r\n};\r\n","import { useEffect, useRef } from \"react\";\nimport { useComboboxContext } from \"./context\";\nimport { useFieldControlProps } from \"@blankjs/core\";\n\nexport interface ComboboxHiddenInputProps {\n name: string;\n required?: boolean;\n}\n\nexport const ComboboxHiddenInput = ({\n name,\n required,\n}: ComboboxHiddenInputProps) => {\n const { value, resetToDefault, disabled, inputGroupElement } =\n useComboboxContext();\n const ref = useRef<HTMLInputElement>(null);\n\n const controlProps = useFieldControlProps();\n const isRequired = required ?? controlProps.required ?? false;\n\n const mountedRef = useRef(false);\n\n useEffect(() => {\n if (!mountedRef.current) {\n mountedRef.current = true;\n\n return;\n }\n\n ref.current?.dispatchEvent(new Event(\"change\", { bubbles: true }));\n }, [value]);\n\n useEffect(() => {\n const form = ref.current?.form;\n\n if (!form) return;\n\n form.addEventListener(\"reset\", resetToDefault);\n\n return () => form.removeEventListener(\"reset\", resetToDefault);\n }, [resetToDefault]);\n\n return (\n <input\n ref={ref}\n type=\"text\"\n name={name}\n value={value ?? \"\"}\n disabled={disabled}\n className=\"bk-combobox-hidden-input\"\n tabIndex={-1}\n aria-hidden=\"true\"\n autoComplete=\"off\"\n onChange={() => {}}\n required={isRequired}\n onFocus={() => inputGroupElement?.querySelector(\"input\")?.focus()}\n />\n );\n};\n\nComboboxHiddenInput.displayName = \"Combobox.HiddenInput\";\n","import type { PropsWithChildren } from \"react\";\r\nimport type { UseComboboxRootOptions } from \"./types\";\r\nimport { useComboboxRoot } from \"./use-combobox-root\";\r\nimport { ComboboxHiddenInput } from \"./hidden-input\";\r\nimport { ComboboxContext } from \"./context\";\r\n\r\ntype ComboboxRootProps = PropsWithChildren<UseComboboxRootOptions>;\r\n\r\nexport const ComboboxRoot = ({\r\n children,\r\n required,\r\n ...options\r\n}: ComboboxRootProps) => {\r\n const contextValue = useComboboxRoot(options);\r\n\r\n return (\r\n <ComboboxContext value={contextValue}>\r\n <div className=\"bk-combobox-root\" data-size={contextValue.size}>\r\n {children}\r\n\r\n {options.name && (\r\n <ComboboxHiddenInput name={options.name} required={required} />\r\n )}\r\n </div>\r\n </ComboboxContext>\r\n );\r\n};\r\n\r\nComboboxRoot.displayName = \"Combobox.Root\";\r\n","import type {\r\n ChangeEvent,\r\n ComponentProps,\r\n FocusEvent,\r\n KeyboardEvent,\r\n MouseEvent,\r\n} from \"react\";\r\nimport { useComboboxContext } from \"./context\";\r\nimport { useFieldControlProps } from \"@blankjs/core\";\r\n\r\nconst ComboboxArrow = () => (\r\n <svg\r\n className=\"bk-combobox-arrow\"\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n aria-hidden=\"true\"\r\n >\r\n <path d=\"M6 9l6 6 6-6\" />\r\n </svg>\r\n);\r\n\r\nexport type ComboboxInputProps = Omit<\r\n ComponentProps<\"input\">,\r\n \"value\" | \"defaultValue\"\r\n>;\r\n\r\nexport const ComboboxInput = ({ className, ...props }: ComboboxInputProps) => {\r\n const {\r\n inputId,\r\n disabled,\r\n open,\r\n activeItem,\r\n inputValue,\r\n listboxId,\r\n setInputValue,\r\n setInputGroupElement,\r\n getItems,\r\n setActiveItem,\r\n setOpen,\r\n commitItem,\r\n revertInputValue,\r\n } = useComboboxContext();\r\n const { required: _required, ...fieldProps } = useFieldControlProps();\r\n\r\n const id = fieldProps.id ?? inputId;\r\n const isDisabled = fieldProps.disabled || props.disabled || disabled;\r\n\r\n const activeDescendant = open ? activeItem?.id : undefined;\r\n\r\n const onBlur = (e: FocusEvent<HTMLInputElement>) => {\r\n if (isDisabled) return;\r\n\r\n props.onBlur?.(e);\r\n\r\n if (e.defaultPrevented) return;\r\n\r\n revertInputValue();\r\n\r\n setOpen(false);\r\n };\r\n\r\n const onChange = (e: ChangeEvent<HTMLInputElement>) => {\r\n if (isDisabled) return;\r\n\r\n props.onChange?.(e);\r\n\r\n if (e.defaultPrevented) return;\r\n\r\n setInputValue(e.target.value);\r\n\r\n setOpen(true);\r\n };\r\n\r\n const onKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\r\n if (isDisabled) return;\r\n\r\n props.onKeyDown?.(e);\r\n\r\n if (e.defaultPrevented) return;\r\n\r\n const key = e.key;\r\n\r\n if (!open) {\r\n switch (key) {\r\n case \"ArrowDown\":\r\n case \"ArrowUp\": {\r\n e.preventDefault();\r\n setOpen(true);\r\n\r\n break;\r\n }\r\n\r\n default:\r\n break;\r\n }\r\n\r\n return;\r\n }\r\n\r\n const items = getItems();\r\n const index = items.findIndex((item) => item.value === activeItem?.value);\r\n\r\n switch (key) {\r\n case \"ArrowDown\": {\r\n e.preventDefault();\r\n\r\n const next = items[Math.min(index + 1, items.length - 1)];\r\n\r\n if (next) {\r\n setActiveItem(next);\r\n }\r\n\r\n break;\r\n }\r\n\r\n case \"ArrowUp\": {\r\n e.preventDefault();\r\n\r\n const prev = items[Math.max(index - 1, 0)];\r\n\r\n if (prev) {\r\n setActiveItem(prev);\r\n }\r\n\r\n break;\r\n }\r\n\r\n case \"Enter\": {\r\n e.preventDefault();\r\n\r\n if (activeItem) {\r\n commitItem(activeItem);\r\n }\r\n\r\n break;\r\n }\r\n\r\n case \"Tab\":\r\n setOpen(false);\r\n\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n const onClick = (e: MouseEvent<HTMLInputElement>) => {\r\n if (isDisabled) return;\r\n\r\n props.onClick?.(e);\r\n\r\n if (e.defaultPrevented) return;\r\n\r\n setOpen(true);\r\n };\r\n\r\n return (\r\n <div className=\"bk-combobox-group\" ref={setInputGroupElement}>\r\n <input\r\n {...props}\r\n {...fieldProps}\r\n value={inputValue}\r\n onClick={onClick}\r\n onKeyDown={onKeyDown}\r\n onChange={onChange}\r\n onBlur={onBlur}\r\n className={[\"bk-combobox-input\", className].filter(Boolean).join(\" \")}\r\n role=\"combobox\"\r\n aria-autocomplete=\"list\"\r\n aria-expanded={open}\r\n aria-controls={open ? listboxId : undefined}\r\n aria-activedescendant={activeDescendant}\r\n disabled={isDisabled}\r\n id={id}\r\n />\r\n <ComboboxArrow />\r\n </div>\r\n );\r\n};\r\n\r\nComboboxInput.displayName = \"Combobox.Input\";\r\n","import {\n Children,\n useCallback,\n type ComponentProps,\n type PointerEvent as ReactPointerEvent,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\n\nimport { useComboboxContext } from \"./context\";\nimport {\n useInitialActiveItem,\n usePopover,\n type UsePopoverOptions,\n} from \"../internal\";\n\nexport interface ComboboxContentProps extends ComponentProps<\"div\"> {\n container?: HTMLElement;\n}\n\nconst ComboboxContentInner = ({\n children,\n style,\n className,\n container,\n ...props\n}: ComboboxContentProps) => {\n const {\n inputGroupElement,\n listboxId,\n setOpen,\n getItems,\n value,\n setActiveItem,\n revertInputValue,\n size,\n } = useComboboxContext();\n\n const onDismiss: UsePopoverOptions[\"onDismiss\"] = useCallback(\n (reason) => {\n if (reason === \"escape\") {\n revertInputValue();\n }\n\n setOpen(false);\n },\n [revertInputValue, setOpen],\n );\n\n const { setFloating, floatingStyles } = usePopover({\n anchor: inputGroupElement,\n onDismiss,\n matchWidth: \"min\",\n });\n\n const onPointerDown = (e: ReactPointerEvent<HTMLDivElement>) => {\n props.onPointerDown?.(e);\n\n if (e.defaultPrevented) return;\n\n e.preventDefault();\n };\n\n const mounted = useInitialActiveItem({\n getItems,\n setActiveItem,\n isSelected: (item) => item.value === value,\n });\n\n if (!mounted) return null;\n\n const target = container ?? document.body;\n\n return createPortal(\n <div\n {...props}\n onPointerDown={onPointerDown}\n ref={setFloating}\n style={{ ...style, ...floatingStyles }}\n className={[\"bk-combobox-content\", className].filter(Boolean).join(\" \")}\n role=\"listbox\"\n id={listboxId}\n data-size={size}\n data-empty={Children.count(children) === 0 ? \"\" : undefined}\n >\n {children}\n </div>,\n target,\n );\n};\n\nexport const ComboboxContent = ({\n children,\n ...props\n}: ComboboxContentProps) => {\n const { open } = useComboboxContext();\n\n if (!open) return null;\n\n return <ComboboxContentInner {...props}>{children}</ComboboxContentInner>;\n};\n\nComboboxContent.displayName = \"Combobox.Content\";\n","import {\r\n useEffect,\r\n useId,\r\n useRef,\r\n type ComponentProps,\r\n type PointerEvent,\r\n} from \"react\";\r\nimport { useComboboxContext } from \"./context\";\r\n\r\nexport interface ComboboxItemProps extends ComponentProps<\"div\"> {\r\n value: string;\r\n textValue?: string;\r\n}\r\n\r\nconst ComboboxCheck = () => (\r\n <svg\r\n className=\"bk-combobox-check\"\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n aria-hidden=\"true\"\r\n >\r\n <path d=\"M20 6L9 17l-5-5\" />\r\n </svg>\r\n);\r\n\r\nexport const ComboboxItem = ({\r\n value,\r\n textValue,\r\n children,\r\n className,\r\n ...props\r\n}: ComboboxItemProps) => {\r\n const ref = useRef<HTMLDivElement>(null);\r\n const optionId = useId();\r\n\r\n const {\r\n value: selectedValue,\r\n activeItem,\r\n registerItem,\r\n commitItem,\r\n setActiveItem,\r\n } = useComboboxContext();\r\n\r\n const isSelected = value === selectedValue;\r\n\r\n const isActive = value === activeItem?.value;\r\n\r\n useEffect(() => {\r\n const node = ref.current;\r\n\r\n if (!node) return;\r\n\r\n const unregister = registerItem({\r\n node,\r\n value,\r\n label: textValue ?? node.textContent ?? \"\",\r\n id: optionId,\r\n });\r\n\r\n return () => {\r\n unregister();\r\n setActiveItem((prev) => (prev?.value === value ? undefined : prev));\r\n };\r\n }, [registerItem, textValue, value, optionId, setActiveItem]);\r\n\r\n useEffect(() => {\r\n if (isActive) {\r\n ref.current?.scrollIntoView({ block: \"nearest\" });\r\n }\r\n }, [isActive]);\r\n\r\n const onPointerDown = (e: PointerEvent<HTMLDivElement>) => {\r\n props.onPointerDown?.(e);\r\n\r\n if (e.defaultPrevented) return;\r\n\r\n e.preventDefault();\r\n\r\n const node = ref.current;\r\n\r\n if (!node) return;\r\n\r\n commitItem({\r\n id: optionId,\r\n value,\r\n label: textValue ?? node.textContent ?? \"\",\r\n node,\r\n });\r\n };\r\n\r\n return (\r\n <div\r\n {...props}\r\n ref={ref}\r\n className={[\"bk-combobox-item\", className].filter(Boolean).join(\" \")}\r\n role=\"option\"\r\n id={optionId}\r\n aria-selected={isSelected}\r\n data-active={isActive ? \"\" : undefined}\r\n onPointerDown={onPointerDown}\r\n >\r\n {children}\r\n <ComboboxCheck />\r\n </div>\r\n );\r\n};\r\n\r\nComboboxItem.displayName = \"Combobox.Item\";\r\n","import type { ComponentProps, MouseEvent } from \"react\";\r\nimport { useComboboxContext } from \"./context\";\r\n\r\nconst ComboboxClearIcon = () => (\r\n <svg\r\n width=\"14\"\r\n height=\"14\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth=\"2\"\r\n aria-hidden=\"true\"\r\n >\r\n <path d=\"M18 6L6 18M6 6l12 12\" />\r\n </svg>\r\n);\r\n\r\nexport type ComboboxClearProps = ComponentProps<\"button\">;\r\n\r\nexport const ComboboxClear = ({\r\n children,\r\n className,\r\n onClick,\r\n ...props\r\n}: ComboboxClearProps) => {\r\n const { value, disabled, clear, inputGroupElement } = useComboboxContext();\r\n\r\n if (!value || disabled) return null;\r\n\r\n const handleClick = (e: MouseEvent<HTMLButtonElement>) => {\r\n onClick?.(e);\r\n\r\n if (e.defaultPrevented) return;\r\n\r\n clear();\r\n inputGroupElement?.querySelector(\"input\")?.focus();\r\n };\r\n\r\n return (\r\n <button\r\n type=\"button\"\r\n aria-label=\"Clear\"\r\n className={[\"bk-combobox-clear\", className].filter(Boolean).join(\" \")}\r\n onClick={handleClick}\r\n {...props}\r\n >\r\n {children ?? <ComboboxClearIcon />}\r\n </button>\r\n );\r\n};\r\n\r\nComboboxClear.displayName = \"Combobox.Clear\";\r\n","import { ComboboxRoot } from \"./root\";\r\nimport { ComboboxInput } from \"./input\";\r\nimport { ComboboxContent } from \"./content\";\r\nimport { ComboboxItem } from \"./item\";\r\nimport { ComboboxClear } from \"./clear\";\r\n\r\nexport {\r\n ComboboxRoot,\r\n ComboboxInput,\r\n ComboboxContent,\r\n ComboboxItem,\r\n ComboboxClear,\r\n};\r\n\r\nexport const Combobox = {\r\n Root: ComboboxRoot,\r\n Input: ComboboxInput,\r\n Content: ComboboxContent,\r\n Item: ComboboxItem,\r\n Clear: ComboboxClear,\r\n};\r\n"],"mappings":"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"}
|