@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 +45 -5
- package/dist/index.d.mts +7 -7
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
# blankjs
|
|
2
2
|
|
|
3
|
+
[](https://www.npmjs.com/package/@blankjs/react)
|
|
4
|
+
[](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
|
-
|
|
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,
|
|
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
|
|
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,
|
|
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
|
-
|
|
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,
|
package/dist/index.mjs.map
CHANGED
|
@@ -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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"}
|