@blankjs/react 0.1.0 → 0.1.1

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/README.md CHANGED
@@ -1,7 +1,14 @@
1
1
  # blankjs
2
2
 
3
+ [![npm](https://img.shields.io/npm/v/@blankjs/react?label=%40blankjs%2Freact)](https://www.npmjs.com/package/@blankjs/react)
4
+ [![npm](https://img.shields.io/npm/v/@blankjs/core?label=%40blankjs%2Fcore)](https://www.npmjs.com/package/@blankjs/core)
5
+
3
6
  Form-first React components built on native form elements.
4
7
 
8
+ ```bash
9
+ npm install @blankjs/react
10
+ ```
11
+
5
12
  blankjs is a component library that treats the browser as an ally instead of an obstacle. Where other libraries rebuild form controls from `<div>`s and ARIA, blankjs styles the real elements and lets the platform do the work.
6
13
 
7
14
  ## Packages
@@ -10,7 +17,8 @@ blankjs is a component library that treats the browser as an ally instead of an
10
17
  |---------|----------|
11
18
  | `@blankjs/react` | Styled, accessible components |
12
19
  | `@blankjs/core` | Headless hooks: `useControllableState`, `useFieldControlProps`, `useCollection` |
13
- | `@blankjs/tokens` | Design tokens as CSS variables |
20
+
21
+ Design tokens live in a private `@blankjs/tokens` workspace package and ship inlined in `styles.css` as CSS variables.
14
22
 
15
23
  ## Philosophy
16
24
 
@@ -72,6 +80,33 @@ How it works:
72
80
 
73
81
  No form library required. React Hook Form and friends still work if you want them, but they stop being a prerequisite.
74
82
 
83
+ ### Validation through the browser
84
+
85
+ Validation rides on the Constraint Validation API instead of a schema library:
86
+
87
+ ```tsx
88
+ <Form onSubmit={(data) => send(serialize(data))} errors={serverErrors}>
89
+ <Field.Root
90
+ name="username"
91
+ required
92
+ validationMode="change"
93
+ validate={(value) => (value.includes(" ") ? "No spaces allowed" : null)}
94
+ >
95
+ <Field.Label>Username</Field.Label>
96
+ <TextInput name="username" />
97
+ <Field.Error match="valueMissing">Enter a username</Field.Error>
98
+ <Field.Error />
99
+ </Field.Root>
100
+ </Form>
101
+ ```
102
+
103
+ - HTML constraints (`required`, `pattern`, `minLength`, `type="email"`) report through `ValidityState`; `Field.Error match` filters by flag, and without children it renders the browser's localized message
104
+ - Errors reveal on submit by default; `validationMode="blur"` or `"change"` reveals them earlier
105
+ - `validate` feeds `setCustomValidity`, so a failing custom rule blocks submit exactly like a native constraint
106
+ - Composite widgets participate: `required` on an empty Select blocks submit and moves focus to the trigger
107
+ - `<Form errors={{ username: "Taken" }}>` routes server errors to fields by `name`; editing the field clears the error
108
+ - `serialize(formData)` returns a plain object, with arrays for repeated names
109
+
75
110
  ### A predictable event contract
76
111
 
77
112
  Every component follows one rule: your handler runs first, then the library acts, unless you veto.
@@ -119,7 +154,10 @@ Filtering stays in your hands: you own the list, the library owns keyboard navig
119
154
  | `Select` | Single value, typeahead, hidden input, `Select.Clear` |
120
155
  | `MultiSelect` | Multiple values, stays open while picking, `formData.getAll` |
121
156
  | `Combobox` | Controlled filtering, draft revert on Escape and blur |
122
- | `Field` | Label, description, and error wiring through ARIA |
157
+ | `Field` | Label, description, error wiring, native validation |
158
+ | `Form` | `FormData` in `onSubmit`, server errors, focuses the first invalid field |
159
+
160
+ Every control takes `size="sm" | "md" | "lg"` (default `md`). Composite widgets size through their `Root`.
123
161
 
124
162
  ### Field
125
163
 
@@ -159,7 +197,9 @@ import { Select, Field, Checkbox } from "@blankjs/react";
159
197
  import "@blankjs/react/styles.css";
160
198
  ```
161
199
 
162
- The packages are not published to npm yet. To explore locally:
200
+ Requires React 19. The components lean on 19-only APIs: `ref` as a regular prop and `<Context>` as a provider.
201
+
202
+ To explore locally:
163
203
 
164
204
  ```bash
165
205
  pnpm install
@@ -172,7 +212,7 @@ The playground demonstrates every component plus a full form submitting through
172
212
 
173
213
  - pnpm workspaces + Turborepo
174
214
  - React 19, TypeScript strict
175
- - Vitest + Testing Library, 230+ tests across core and react
215
+ - Vitest + Testing Library, 260+ tests across core and react
176
216
  - tsdown for package builds
177
217
 
178
218
  ```bash
@@ -183,7 +223,7 @@ pnpm lint
183
223
 
184
224
  ## Status
185
225
 
186
- Pre-release. The API may change before 1.0.
226
+ Published as 0.1.x. The API may change before 1.0.
187
227
 
188
228
  ## License
189
229
 
package/dist/index.d.mts CHANGED
@@ -123,7 +123,7 @@ declare const Field: {
123
123
  type Size = "sm" | "md" | "lg";
124
124
  //#endregion
125
125
  //#region src/text-input/text-input.d.ts
126
- interface TextInputProps extends Omit<ComponentProps<"input">, "size"> {
126
+ interface TextInputProps extends Omit<ComponentProps<"input">, "size" | "children" | "dangerouslySetInnerHTML"> {
127
127
  size?: Size;
128
128
  }
129
129
  declare const TextInput: {
@@ -136,7 +136,7 @@ declare const TextInput: {
136
136
  };
137
137
  //#endregion
138
138
  //#region src/textarea/textarea.d.ts
139
- interface TextareaProps extends ComponentProps<"textarea"> {
139
+ interface TextareaProps extends Omit<ComponentProps<"textarea">, "children" | "dangerouslySetInnerHTML"> {
140
140
  size?: Size;
141
141
  }
142
142
  declare const Textarea: {
@@ -149,7 +149,7 @@ declare const Textarea: {
149
149
  };
150
150
  //#endregion
151
151
  //#region src/password-field/password-field.d.ts
152
- type PasswordFieldProps = Omit<ComponentProps<"input">, "size"> & {
152
+ type PasswordFieldProps = Omit<ComponentProps<"input">, "size" | "children" | "dangerouslySetInnerHTML" | "type"> & {
153
153
  size?: Size;
154
154
  };
155
155
  declare const PasswordField: ({
@@ -324,7 +324,7 @@ declare const Button: ({
324
324
  }: ButtonProps) => import("react").JSX.Element;
325
325
  //#endregion
326
326
  //#region src/checkbox/checkbox.d.ts
327
- interface CheckboxProps extends Omit<ComponentProps<"input">, "type" | "checked" | "defaultChecked" | "onChange" | "size"> {
327
+ interface CheckboxProps extends Omit<ComponentProps<"input">, "type" | "checked" | "defaultChecked" | "onChange" | "size" | "children" | "dangerouslySetInnerHTML"> {
328
328
  checked?: boolean;
329
329
  defaultChecked?: boolean;
330
330
  onCheckedChange?: (checked: boolean) => void;
@@ -345,7 +345,7 @@ declare const Checkbox: ({
345
345
  }: CheckboxProps) => import("react").JSX.Element;
346
346
  //#endregion
347
347
  //#region src/switch/switch.d.ts
348
- interface SwitchProps extends Omit<ComponentProps<"input">, "type" | "checked" | "defaultChecked" | "size"> {
348
+ interface SwitchProps extends Omit<ComponentProps<"input">, "type" | "checked" | "defaultChecked" | "size" | "children" | "dangerouslySetInnerHTML"> {
349
349
  checked?: boolean;
350
350
  defaultChecked?: boolean;
351
351
  onCheckedChange?: (checked: boolean) => void;
@@ -392,7 +392,7 @@ declare const RadioGroupRoot: {
392
392
  };
393
393
  //#endregion
394
394
  //#region src/radio/item.d.ts
395
- interface RadioGroupItemProps extends Omit<ComponentProps<"input">, "type" | "name" | "checked" | "defaultChecked" | "value"> {
395
+ interface RadioGroupItemProps extends Omit<ComponentProps<"input">, "type" | "name" | "checked" | "defaultChecked" | "value" | "size"> {
396
396
  value: string;
397
397
  }
398
398
  declare const RadioGroupItem: {
@@ -601,7 +601,7 @@ type UseComboboxRootOptions = {
601
601
  };
602
602
  //#endregion
603
603
  //#region src/combobox/input.d.ts
604
- type ComboboxInputProps = Omit<ComponentProps<"input">, "value" | "defaultValue">;
604
+ type ComboboxInputProps = Omit<ComponentProps<"input">, "value" | "defaultValue" | "size" | "children" | "dangerouslySetInnerHTML">;
605
605
  declare const ComboboxInput: {
606
606
  ({
607
607
  className,
@@ -1 +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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"}
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<\n ComponentProps<\"input\">,\n \"size\" | \"children\" | \"dangerouslySetInnerHTML\"\n> {\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 Omit<\n ComponentProps<\"textarea\">,\n \"children\" | \"dangerouslySetInnerHTML\"\n> {\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<\r\n ComponentProps<\"input\">,\r\n \"size\" | \"children\" | \"dangerouslySetInnerHTML\" | \"type\"\r\n> & {\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\"\r\n | \"checked\"\r\n | \"defaultChecked\"\r\n | \"onChange\"\r\n | \"size\"\r\n | \"children\"\r\n | \"dangerouslySetInnerHTML\"\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\"\r\n | \"checked\"\r\n | \"defaultChecked\"\r\n | \"size\"\r\n | \"children\"\r\n | \"dangerouslySetInnerHTML\"\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\" | \"size\"\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\" | \"size\" | \"children\" | \"dangerouslySetInnerHTML\"\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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blankjs/react",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Form-first React components",
5
5
  "type": "module",
6
6
  "license": "MIT",