@page-speed/forms 0.1.1 → 0.1.2
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 +5 -3
- package/dist/inputs.cjs +160 -36
- package/dist/inputs.cjs.map +1 -1
- package/dist/inputs.d.cts +143 -1
- package/dist/inputs.d.ts +143 -1
- package/dist/inputs.js +159 -36
- package/dist/inputs.js.map +1 -1
- package/package.json +1 -1
package/dist/inputs.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/inputs/TextInput.tsx","../src/inputs/TextArea.tsx","../src/inputs/Checkbox.tsx","../src/inputs/Radio.tsx","../src/inputs/Select.tsx"],"names":["React","React2","React3","React4","React5"],"mappings":"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","file":"inputs.cjs","sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport type { InputProps } from \"../core/types\";\n\n/**\n * TextInput - High-performance text input component\n *\n * A lightweight, accessible text input with error state support.\n * Designed to work seamlessly with useForm and Field components.\n *\n * Features:\n * - Full accessibility support\n * - Error state styling\n * - Controlled input behavior\n * - All native input attributes supported\n *\n * @example\n * ```tsx\n * const form = useForm({ initialValues: { email: '' } });\n *\n * <TextInput\n * {...form.getFieldProps('email')}\n * type=\"email\"\n * placeholder=\"Enter your email\"\n * error={!!form.errors.email}\n * aria-invalid={!!form.errors.email}\n * aria-describedby={form.errors.email ? 'email-error' : undefined}\n * />\n * ```\n *\n * @see https://opensite.ai/developers/page-speed/forms/text-input\n */\nexport function TextInput({\n name,\n value,\n onChange,\n onBlur,\n placeholder,\n disabled = false,\n required = false,\n error = false,\n className = \"\",\n type = \"text\",\n ...props\n}: InputProps<string> & {\n type?: \"text\" | \"email\" | \"password\" | \"url\" | \"tel\" | \"search\";\n}) {\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange(e.target.value);\n };\n\n const handleBlur = () => {\n onBlur?.();\n };\n\n const baseClassName = \"text-input\";\n const errorClassName = error ? \"text-input--error\" : \"\";\n const combinedClassName = `${baseClassName} ${errorClassName} ${className}`.trim();\n\n return (\n <input\n type={type}\n name={name}\n value={value ?? \"\"}\n onChange={handleChange}\n onBlur={handleBlur}\n placeholder={placeholder}\n disabled={disabled}\n required={required}\n className={combinedClassName}\n aria-invalid={error || props[\"aria-invalid\"]}\n aria-describedby={props[\"aria-describedby\"]}\n aria-required={required || props[\"aria-required\"]}\n {...props}\n />\n );\n}\n\nTextInput.displayName = \"TextInput\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport type { InputProps } from \"../core/types\";\n\n/**\n * Additional props specific to TextArea\n */\nexport interface TextAreaProps extends Omit<InputProps<string>, \"onChange\"> {\n /**\n * Number of visible text rows\n * @default 3\n */\n rows?: number;\n\n /**\n * Number of visible text columns (characters)\n */\n cols?: number;\n\n /**\n * Maximum character length\n */\n maxLength?: number;\n\n /**\n * Minimum character length\n */\n minLength?: number;\n\n /**\n * Text wrapping behavior\n * - soft: text wraps but newlines not submitted (default)\n * - hard: text wraps and newlines submitted (requires cols)\n * - off: no wrapping\n */\n wrap?: \"soft\" | \"hard\" | \"off\";\n\n /**\n * Change handler\n */\n onChange: (value: string) => void;\n\n /**\n * Additional native textarea attributes\n */\n [key: string]: any;\n}\n\n/**\n * TextArea - High-performance multi-line text input component\n *\n * A lightweight, accessible textarea with error state support.\n * Designed to work seamlessly with useForm and Field components.\n *\n * Features:\n * - Full accessibility support\n * - Error state styling\n * - Controlled input behavior\n * - Configurable rows and columns\n * - Text wrapping options\n * - Character length validation\n * - All native textarea attributes supported\n *\n * @example\n * ```tsx\n * const form = useForm({ initialValues: { bio: '' } });\n *\n * <TextArea\n * {...form.getFieldProps('bio')}\n * rows={5}\n * placeholder=\"Tell us about yourself\"\n * error={!!form.errors.bio}\n * aria-invalid={!!form.errors.bio}\n * aria-describedby={form.errors.bio ? 'bio-error' : undefined}\n * />\n * ```\n *\n * @see https://opensite.ai/developers/page-speed/forms/textarea\n */\nexport function TextArea({\n name,\n value,\n onChange,\n onBlur,\n placeholder,\n disabled = false,\n required = false,\n error = false,\n className = \"\",\n rows = 3,\n cols,\n maxLength,\n minLength,\n wrap = \"soft\",\n ...props\n}: TextAreaProps) {\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n onChange(e.target.value);\n };\n\n const handleBlur = () => {\n onBlur?.();\n };\n\n const baseClassName = \"textarea\";\n const errorClassName = error ? \"textarea--error\" : \"\";\n const combinedClassName = `${baseClassName} ${errorClassName} ${className}`.trim();\n\n return (\n <textarea\n name={name}\n value={value ?? \"\"}\n onChange={handleChange}\n onBlur={handleBlur}\n placeholder={placeholder}\n disabled={disabled}\n required={required}\n className={combinedClassName}\n rows={rows}\n cols={cols}\n maxLength={maxLength}\n minLength={minLength}\n wrap={wrap}\n aria-invalid={error || props[\"aria-invalid\"]}\n aria-describedby={props[\"aria-describedby\"]}\n aria-required={required || props[\"aria-required\"]}\n {...props}\n />\n );\n}\n\nTextArea.displayName = \"TextArea\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport type { InputProps } from \"../core/types\";\n\n/**\n * Additional props specific to Checkbox\n */\nexport interface CheckboxProps\n extends Omit<InputProps<boolean>, \"onChange\" | \"placeholder\"> {\n /**\n * Change handler - receives boolean checked state\n */\n onChange: (checked: boolean) => void;\n\n /**\n * Indeterminate state for partial selections\n * Useful for \"select all\" checkboxes with some items selected\n * @default false\n */\n indeterminate?: boolean;\n\n /**\n * Label text for the checkbox\n * Can also wrap checkbox in a label element\n */\n label?: React.ReactNode;\n\n /**\n * Additional native input attributes\n */\n [key: string]: any;\n}\n\n/**\n * Checkbox - High-performance boolean input component\n *\n * A lightweight, accessible checkbox with error state support.\n * Designed to work seamlessly with useForm and Field components.\n *\n * Features:\n * - Full accessibility support (ARIA attributes)\n * - Error state styling\n * - Controlled input behavior\n * - Indeterminate state support\n * - Optional label text\n * - All native checkbox attributes supported\n *\n * @example\n * ```tsx\n * const form = useForm({ initialValues: { terms: false } });\n *\n * <Checkbox\n * {...form.getFieldProps('terms')}\n * label=\"I agree to the terms and conditions\"\n * error={!!form.errors.terms}\n * aria-describedby={form.errors.terms ? 'terms-error' : undefined}\n * />\n * ```\n *\n * @example\n * ```tsx\n * // With indeterminate state\n * <Checkbox\n * name=\"selectAll\"\n * value={allSelected}\n * onChange={handleSelectAll}\n * indeterminate={someSelected}\n * label=\"Select all items\"\n * />\n * ```\n *\n * @see https://opensite.ai/developers/page-speed/forms/checkbox\n */\nexport function Checkbox({\n name,\n value,\n onChange,\n onBlur,\n disabled = false,\n required = false,\n error = false,\n className = \"\",\n indeterminate = false,\n label,\n ...props\n}: CheckboxProps) {\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n // Set indeterminate state on the native input element\n React.useEffect(() => {\n if (inputRef.current) {\n inputRef.current.indeterminate = indeterminate;\n }\n }, [indeterminate]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange(e.target.checked);\n };\n\n const handleBlur = () => {\n onBlur?.();\n };\n\n const baseClassName = \"checkbox\";\n const errorClassName = error ? \"checkbox--error\" : \"\";\n const combinedClassName = `${baseClassName} ${errorClassName} ${className}`.trim();\n\n const checkbox = (\n <input\n ref={inputRef}\n type=\"checkbox\"\n name={name}\n checked={value}\n onChange={handleChange}\n onBlur={handleBlur}\n disabled={disabled}\n required={required}\n className={combinedClassName}\n aria-invalid={error || props[\"aria-invalid\"]}\n aria-describedby={props[\"aria-describedby\"]}\n aria-required={required || props[\"aria-required\"]}\n {...props}\n />\n );\n\n // If label is provided, wrap checkbox in label element\n if (label) {\n return (\n <label className=\"checkbox-label\">\n {checkbox}\n <span className=\"checkbox-label-text\">{label}</span>\n </label>\n );\n }\n\n return checkbox;\n}\n\nCheckbox.displayName = \"Checkbox\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport type { InputProps } from \"../core/types\";\n\n/**\n * Radio option type\n */\nexport interface RadioOption {\n /**\n * The value for this radio option\n */\n value: string;\n\n /**\n * Display label for the option\n */\n label: React.ReactNode;\n\n /**\n * Optional description text below the label\n */\n description?: React.ReactNode;\n\n /**\n * Whether this option is disabled\n */\n disabled?: boolean;\n}\n\n/**\n * Additional props specific to Radio\n */\nexport interface RadioProps\n extends Omit<InputProps<string>, \"onChange\" | \"placeholder\"> {\n /**\n * Change handler - receives selected value\n */\n onChange: (value: string) => void;\n\n /**\n * Array of radio options\n */\n options: RadioOption[];\n\n /**\n * Layout direction\n * @default \"stacked\"\n */\n layout?: \"inline\" | \"stacked\";\n\n /**\n * Group-level label\n */\n label?: React.ReactNode;\n\n /**\n * Additional native input attributes\n */\n [key: string]: any;\n}\n\n/**\n * Radio - High-performance single selection component\n *\n * A lightweight, accessible radio group with error state support.\n * Designed to work seamlessly with useForm and Field components.\n *\n * Features:\n * - Full accessibility support (ARIA attributes, role=\"radiogroup\")\n * - Error state styling\n * - Controlled input behavior\n * - Keyboard navigation (arrow keys)\n * - Inline or stacked layout\n * - Optional descriptions for each option\n * - Individual option disabled state\n * - All native radio attributes supported\n *\n * @example\n * ```tsx\n * const form = useForm({ initialValues: { plan: 'basic' } });\n *\n * <Radio\n * {...form.getFieldProps('plan')}\n * label=\"Select your plan\"\n * options={[\n * { value: 'basic', label: 'Basic', description: '$9/month' },\n * { value: 'pro', label: 'Pro', description: '$29/month' },\n * { value: 'enterprise', label: 'Enterprise', description: '$99/month' }\n * ]}\n * error={!!form.errors.plan}\n * aria-describedby={form.errors.plan ? 'plan-error' : undefined}\n * />\n * ```\n *\n * @example\n * ```tsx\n * // Inline layout\n * <Radio\n * name=\"size\"\n * value={size}\n * onChange={handleSizeChange}\n * layout=\"inline\"\n * options={[\n * { value: 'sm', label: 'Small' },\n * { value: 'md', label: 'Medium' },\n * { value: 'lg', label: 'Large' }\n * ]}\n * />\n * ```\n *\n * @see https://opensite.ai/developers/page-speed/forms/radio\n */\nexport function Radio({\n name,\n value,\n onChange,\n onBlur,\n disabled = false,\n required = false,\n error = false,\n className = \"\",\n layout = \"stacked\",\n label,\n options,\n ...props\n}: RadioProps) {\n const handleChange = (optionValue: string) => {\n onChange(optionValue);\n };\n\n const handleKeyDown = (\n e: React.KeyboardEvent<HTMLDivElement>,\n currentIndex: number\n ) => {\n if (e.key === \"ArrowDown\" || e.key === \"ArrowRight\") {\n e.preventDefault();\n // Find next non-disabled option\n let nextIndex = (currentIndex + 1) % options.length;\n let attempts = 0;\n while (\n options[nextIndex].disabled &&\n attempts < options.length &&\n !disabled\n ) {\n nextIndex = (nextIndex + 1) % options.length;\n attempts++;\n }\n if (!options[nextIndex].disabled) {\n handleChange(options[nextIndex].value);\n }\n } else if (e.key === \"ArrowUp\" || e.key === \"ArrowLeft\") {\n e.preventDefault();\n // Find previous non-disabled option\n let prevIndex = (currentIndex - 1 + options.length) % options.length;\n let attempts = 0;\n while (\n options[prevIndex].disabled &&\n attempts < options.length &&\n !disabled\n ) {\n prevIndex = (prevIndex - 1 + options.length) % options.length;\n attempts++;\n }\n if (!options[prevIndex].disabled) {\n handleChange(options[prevIndex].value);\n }\n }\n };\n\n const handleBlur = () => {\n onBlur?.();\n };\n\n const baseClassName = \"radio-group\";\n const errorClassName = error ? \"radio-group--error\" : \"\";\n const layoutClassName = `radio-group--${layout}`;\n const combinedClassName =\n `${baseClassName} ${errorClassName} ${layoutClassName} ${className}`.trim();\n\n return (\n <div\n className={combinedClassName}\n role=\"radiogroup\"\n aria-invalid={error || props[\"aria-invalid\"]}\n aria-describedby={props[\"aria-describedby\"]}\n aria-required={required || props[\"aria-required\"]}\n aria-label={typeof label === \"string\" ? label : props[\"aria-label\"]}\n >\n {label && <div className=\"radio-group-label\">{label}</div>}\n <div className=\"radio-options\">\n {options.map((option, index) => {\n const isChecked = value === option.value;\n const isDisabled = disabled || option.disabled;\n const radioId = `${name}-${option.value}`;\n\n return (\n <label\n key={option.value}\n className={`radio-option ${isDisabled ? \"radio-option--disabled\" : \"\"}`}\n htmlFor={radioId}\n >\n <input\n type=\"radio\"\n id={radioId}\n name={name}\n value={option.value}\n checked={isChecked}\n onChange={(e) => handleChange(e.target.value)}\n onBlur={handleBlur}\n onKeyDown={(e) => handleKeyDown(e, index)}\n disabled={isDisabled}\n required={required}\n className=\"radio-input\"\n aria-describedby={\n option.description\n ? `${radioId}-description`\n : props[\"aria-describedby\"]\n }\n />\n <div className=\"radio-content\">\n <span className=\"radio-label\">{option.label}</span>\n {option.description && (\n <span\n className=\"radio-description\"\n id={`${radioId}-description`}\n >\n {option.description}\n </span>\n )}\n </div>\n </label>\n );\n })}\n </div>\n </div>\n );\n}\n\nRadio.displayName = \"Radio\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport type { InputProps } from \"../core/types\";\n\n/**\n * Select option type\n */\nexport interface SelectOption {\n /**\n * The value for this option\n */\n value: string;\n\n /**\n * Display label for the option\n */\n label: React.ReactNode;\n\n /**\n * Whether this option is disabled\n */\n disabled?: boolean;\n}\n\n/**\n * Select option group type for organizing options\n */\nexport interface SelectOptionGroup {\n /**\n * Group label\n */\n label: string;\n\n /**\n * Options in this group\n */\n options: SelectOption[];\n}\n\n/**\n * Additional props specific to Select\n */\nexport interface SelectProps\n extends Omit<InputProps<string>, \"onChange\" | \"onFocus\"> {\n /**\n * Change handler - receives selected value\n */\n onChange: (value: string) => void;\n\n /**\n * Focus handler\n */\n onFocus?: () => void;\n\n /**\n * Array of select options (flat structure)\n */\n options?: SelectOption[];\n\n /**\n * Array of option groups (grouped structure)\n */\n optionGroups?: SelectOptionGroup[];\n\n /**\n * Placeholder text when no option is selected\n * @default \"Select...\"\n */\n placeholder?: string;\n\n /**\n * Enable search/filter functionality\n * @default true\n */\n searchable?: boolean;\n\n /**\n * Enable clearable button to reset selection\n * @default true\n */\n clearable?: boolean;\n\n /**\n * Loading state for async options\n * @default false\n */\n loading?: boolean;\n\n /**\n * Custom render function for options\n */\n renderOption?: (option: SelectOption) => React.ReactNode;\n\n /**\n * Additional native input attributes\n */\n [key: string]: any;\n}\n\n/**\n * Select - High-performance dropdown selection component\n *\n * A lightweight, accessible select/dropdown with search, keyboard navigation,\n * and error state support. Designed to work seamlessly with useForm and Field components.\n *\n * Features:\n * - Full accessibility support (ARIA attributes, role=\"combobox\")\n * - Error state styling\n * - Controlled input behavior\n * - Keyboard navigation (arrow keys, Enter, Escape, type-ahead)\n * - Searchable options with filtering\n * - Clearable selection\n * - Option groups support\n * - Loading state for async options\n * - Disabled options support\n * - Click outside to close\n *\n * @example\n * ```tsx\n * const form = useForm({ initialValues: { country: '' } });\n *\n * <Select\n * {...form.getFieldProps('country')}\n * placeholder=\"Select a country\"\n * options={[\n * { value: 'us', label: 'United States' },\n * { value: 'ca', label: 'Canada' },\n * { value: 'mx', label: 'Mexico' }\n * ]}\n * searchable\n * clearable\n * error={!!form.errors.country}\n * aria-describedby={form.errors.country ? 'country-error' : undefined}\n * />\n * ```\n *\n * @example\n * ```tsx\n * // With option groups\n * <Select\n * name=\"timezone\"\n * value={timezone}\n * onChange={handleTimezoneChange}\n * optionGroups={[\n * {\n * label: 'North America',\n * options: [\n * { value: 'est', label: 'Eastern Time' },\n * { value: 'cst', label: 'Central Time' }\n * ]\n * },\n * {\n * label: 'Europe',\n * options: [\n * { value: 'gmt', label: 'GMT' },\n * { value: 'cet', label: 'Central European Time' }\n * ]\n * }\n * ]}\n * />\n * ```\n *\n * @see https://opensite.ai/developers/page-speed/forms/select\n */\nexport function Select({\n name,\n value,\n onChange,\n onBlur,\n onFocus,\n disabled = false,\n required = false,\n error = false,\n className = \"\",\n placeholder = \"Select...\",\n searchable = true,\n clearable = true,\n loading = false,\n options = [],\n optionGroups = [],\n renderOption,\n ...props\n}: SelectProps) {\n const [isOpen, setIsOpen] = React.useState(false);\n const [searchQuery, setSearchQuery] = React.useState(\"\");\n const [focusedIndex, setFocusedIndex] = React.useState(-1);\n const selectRef = React.useRef<HTMLDivElement>(null);\n const searchInputRef = React.useRef<HTMLInputElement>(null);\n const dropdownId = `${name}-dropdown`;\n\n // Flatten options from groups or use flat options\n const allOptions = React.useMemo(() => {\n if (optionGroups.length > 0) {\n return optionGroups.flatMap((group) => group.options);\n }\n return options;\n }, [options, optionGroups]);\n\n // Filter options based on search query\n const filteredOptions = React.useMemo(() => {\n if (!searchQuery.trim()) {\n return allOptions;\n }\n const query = searchQuery.toLowerCase();\n return allOptions.filter((option) => {\n const label =\n typeof option.label === \"string\" ? option.label : String(option.label);\n return label.toLowerCase().includes(query);\n });\n }, [allOptions, searchQuery]);\n\n // Get selected option\n const selectedOption = React.useMemo(() => {\n return allOptions.find((opt) => opt.value === value);\n }, [allOptions, value]);\n\n // Handle option selection\n const handleSelect = (optionValue: string) => {\n onChange(optionValue);\n setIsOpen(false);\n setSearchQuery(\"\");\n setFocusedIndex(-1);\n };\n\n // Handle clear selection\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n onChange(\"\");\n setSearchQuery(\"\");\n setFocusedIndex(-1);\n };\n\n // Toggle dropdown\n const handleToggle = () => {\n if (disabled) return;\n const newIsOpen = !isOpen;\n setIsOpen(newIsOpen);\n if (newIsOpen && searchable && searchInputRef.current) {\n // Focus search input when opening\n setTimeout(() => searchInputRef.current?.focus(), 0);\n }\n if (newIsOpen) {\n onFocus?.();\n }\n };\n\n // Handle search input change\n const handleSearchChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setSearchQuery(e.target.value);\n setFocusedIndex(0); // Reset focus to first filtered option\n };\n\n // Keyboard navigation\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (disabled) return;\n\n switch (e.key) {\n case \"ArrowDown\":\n e.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n setFocusedIndex(0);\n } else {\n const enabledOptions = filteredOptions.filter((opt) => !opt.disabled);\n if (enabledOptions.length > 0) {\n const currentIndexInFiltered = focusedIndex;\n const nextIndex = (currentIndexInFiltered + 1) % enabledOptions.length;\n setFocusedIndex(\n filteredOptions.indexOf(enabledOptions[nextIndex])\n );\n }\n }\n break;\n\n case \"ArrowUp\":\n e.preventDefault();\n if (isOpen) {\n const enabledOptions = filteredOptions.filter((opt) => !opt.disabled);\n if (enabledOptions.length > 0) {\n const currentIndexInFiltered = focusedIndex;\n const prevIndex =\n (currentIndexInFiltered - 1 + enabledOptions.length) %\n enabledOptions.length;\n setFocusedIndex(\n filteredOptions.indexOf(enabledOptions[prevIndex])\n );\n }\n }\n break;\n\n case \"Enter\":\n e.preventDefault();\n if (isOpen && focusedIndex >= 0 && focusedIndex < filteredOptions.length) {\n const focusedOption = filteredOptions[focusedIndex];\n if (!focusedOption.disabled) {\n handleSelect(focusedOption.value);\n }\n } else if (!isOpen) {\n setIsOpen(true);\n }\n break;\n\n case \"Escape\":\n e.preventDefault();\n if (isOpen) {\n setIsOpen(false);\n setSearchQuery(\"\");\n setFocusedIndex(-1);\n }\n break;\n\n case \" \":\n // Space key to open dropdown if not searching\n if (!isOpen && !searchable) {\n e.preventDefault();\n setIsOpen(true);\n }\n break;\n\n default:\n // Type-ahead search (only if not already searching)\n if (!searchable && e.key.length === 1 && !e.ctrlKey && !e.metaKey) {\n const char = e.key.toLowerCase();\n const matchingOption = filteredOptions.find((opt) => {\n const label =\n typeof opt.label === \"string\"\n ? opt.label\n : String(opt.label);\n return label.toLowerCase().startsWith(char) && !opt.disabled;\n });\n if (matchingOption) {\n handleSelect(matchingOption.value);\n }\n }\n break;\n }\n };\n\n // Handle blur\n const handleBlur = () => {\n onBlur?.();\n };\n\n // Close dropdown when clicking outside\n React.useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n selectRef.current &&\n !selectRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n setSearchQuery(\"\");\n setFocusedIndex(-1);\n handleBlur();\n }\n };\n\n if (isOpen) {\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }\n }, [isOpen]);\n\n const baseClassName = \"select\";\n const errorClassName = error ? \"select--error\" : \"\";\n const disabledClassName = disabled ? \"select--disabled\" : \"\";\n const openClassName = isOpen ? \"select--open\" : \"\";\n const combinedClassName =\n `${baseClassName} ${errorClassName} ${disabledClassName} ${openClassName} ${className}`.trim();\n\n return (\n <div\n ref={selectRef}\n className={combinedClassName}\n onKeyDown={handleKeyDown}\n onBlur={handleBlur}\n >\n {/* Hidden native select for form submission */}\n <select\n name={name}\n value={value}\n onChange={() => {}}\n disabled={disabled}\n required={required}\n aria-hidden=\"true\"\n tabIndex={-1}\n style={{ display: \"none\" }}\n >\n <option value=\"\">Select...</option>\n {allOptions.map((option) => (\n <option key={option.value} value={option.value}>\n {typeof option.label === \"string\" ? option.label : option.value}\n </option>\n ))}\n </select>\n\n {/* Custom select trigger */}\n <div\n className=\"select-trigger\"\n onClick={handleToggle}\n role=\"combobox\"\n aria-expanded={isOpen}\n aria-controls={dropdownId}\n aria-invalid={error || props[\"aria-invalid\"]}\n aria-describedby={props[\"aria-describedby\"]}\n aria-required={required || props[\"aria-required\"]}\n aria-disabled={disabled}\n tabIndex={disabled ? -1 : 0}\n >\n <span className=\"select-value\">\n {selectedOption ? (\n renderOption ? (\n renderOption(selectedOption)\n ) : (\n selectedOption.label\n )\n ) : (\n <span className=\"select-placeholder\">{placeholder}</span>\n )}\n </span>\n <div className=\"select-icons\">\n {loading && <span className=\"select-loading\">⏳</span>}\n {clearable && value && !disabled && !loading && (\n <button\n type=\"button\"\n className=\"select-clear\"\n onClick={handleClear}\n aria-label=\"Clear selection\"\n tabIndex={-1}\n >\n ✕\n </button>\n )}\n <span className=\"select-arrow\" aria-hidden=\"true\">\n {isOpen ? \"▲\" : \"▼\"}\n </span>\n </div>\n </div>\n\n {/* Dropdown */}\n {isOpen && (\n <div id={dropdownId} className=\"select-dropdown\" role=\"listbox\">\n {searchable && (\n <div className=\"select-search\">\n <input\n ref={searchInputRef}\n type=\"text\"\n className=\"select-search-input\"\n placeholder=\"Search...\"\n value={searchQuery}\n onChange={handleSearchChange}\n onClick={(e) => e.stopPropagation()}\n aria-label=\"Search options\"\n />\n </div>\n )}\n\n <div className=\"select-options\">\n {filteredOptions.length === 0 ? (\n <div className=\"select-no-options\">No options found</div>\n ) : optionGroups.length > 0 ? (\n // Render grouped options\n optionGroups.map((group, groupIndex) => {\n const groupOptions = group.options.filter((opt) =>\n filteredOptions.includes(opt)\n );\n if (groupOptions.length === 0) return null;\n\n return (\n <div key={groupIndex} className=\"select-optgroup\">\n <div className=\"select-optgroup-label\">{group.label}</div>\n {groupOptions.map((option) => {\n const globalIndex = filteredOptions.indexOf(option);\n const isSelected = value === option.value;\n const isFocused = globalIndex === focusedIndex;\n const isDisabled = option.disabled;\n\n return (\n <div\n key={option.value}\n className={`select-option ${isSelected ? \"select-option--selected\" : \"\"} ${isFocused ? \"select-option--focused\" : \"\"} ${isDisabled ? \"select-option--disabled\" : \"\"}`}\n onClick={() =>\n !isDisabled && handleSelect(option.value)\n }\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={isDisabled}\n >\n {renderOption ? renderOption(option) : option.label}\n </div>\n );\n })}\n </div>\n );\n })\n ) : (\n // Render flat options\n filteredOptions.map((option, index) => {\n const isSelected = value === option.value;\n const isFocused = index === focusedIndex;\n const isDisabled = option.disabled;\n\n return (\n <div\n key={option.value}\n className={`select-option ${isSelected ? \"select-option--selected\" : \"\"} ${isFocused ? \"select-option--focused\" : \"\"} ${isDisabled ? \"select-option--disabled\" : \"\"}`}\n onClick={() => !isDisabled && handleSelect(option.value)}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={isDisabled}\n >\n {renderOption ? renderOption(option) : option.label}\n </div>\n );\n })\n )}\n </div>\n </div>\n )}\n </div>\n );\n}\n\nSelect.displayName = \"Select\";\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/inputs/TextInput.tsx","../src/inputs/TextArea.tsx","../src/inputs/Checkbox.tsx","../src/inputs/CheckboxGroup.tsx","../src/inputs/Radio.tsx","../src/inputs/Select.tsx"],"names":["React","React2","React3","React4","React5","React6"],"mappings":"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","file":"inputs.cjs","sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport type { InputProps } from \"../core/types\";\n\n/**\n * TextInput - High-performance text input component\n *\n * A lightweight, accessible text input with error state support.\n * Designed to work seamlessly with useForm and Field components.\n *\n * Features:\n * - Full accessibility support\n * - Error state styling\n * - Controlled input behavior\n * - All native input attributes supported\n *\n * @example\n * ```tsx\n * const form = useForm({ initialValues: { email: '' } });\n *\n * <TextInput\n * {...form.getFieldProps('email')}\n * type=\"email\"\n * placeholder=\"Enter your email\"\n * error={!!form.errors.email}\n * aria-invalid={!!form.errors.email}\n * aria-describedby={form.errors.email ? 'email-error' : undefined}\n * />\n * ```\n *\n * @see https://opensite.ai/developers/page-speed/forms/text-input\n */\nexport function TextInput({\n name,\n value,\n onChange,\n onBlur,\n placeholder,\n disabled = false,\n required = false,\n error = false,\n className = \"\",\n type = \"text\",\n ...props\n}: InputProps<string> & {\n type?: \"text\" | \"email\" | \"password\" | \"url\" | \"tel\" | \"search\";\n}) {\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange(e.target.value);\n };\n\n const handleBlur = () => {\n onBlur?.();\n };\n\n const baseClassName = \"text-input\";\n const errorClassName = error ? \"text-input--error\" : \"\";\n const combinedClassName = `${baseClassName} ${errorClassName} ${className}`.trim();\n\n return (\n <input\n type={type}\n name={name}\n value={value ?? \"\"}\n onChange={handleChange}\n onBlur={handleBlur}\n placeholder={placeholder}\n disabled={disabled}\n required={required}\n className={combinedClassName}\n aria-invalid={error || props[\"aria-invalid\"]}\n aria-describedby={props[\"aria-describedby\"]}\n aria-required={required || props[\"aria-required\"]}\n {...props}\n />\n );\n}\n\nTextInput.displayName = \"TextInput\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport type { InputProps } from \"../core/types\";\n\n/**\n * Additional props specific to TextArea\n */\nexport interface TextAreaProps extends Omit<InputProps<string>, \"onChange\"> {\n /**\n * Number of visible text rows\n * @default 3\n */\n rows?: number;\n\n /**\n * Number of visible text columns (characters)\n */\n cols?: number;\n\n /**\n * Maximum character length\n */\n maxLength?: number;\n\n /**\n * Minimum character length\n */\n minLength?: number;\n\n /**\n * Text wrapping behavior\n * - soft: text wraps but newlines not submitted (default)\n * - hard: text wraps and newlines submitted (requires cols)\n * - off: no wrapping\n */\n wrap?: \"soft\" | \"hard\" | \"off\";\n\n /**\n * Change handler\n */\n onChange: (value: string) => void;\n\n /**\n * Additional native textarea attributes\n */\n [key: string]: any;\n}\n\n/**\n * TextArea - High-performance multi-line text input component\n *\n * A lightweight, accessible textarea with error state support.\n * Designed to work seamlessly with useForm and Field components.\n *\n * Features:\n * - Full accessibility support\n * - Error state styling\n * - Controlled input behavior\n * - Configurable rows and columns\n * - Text wrapping options\n * - Character length validation\n * - All native textarea attributes supported\n *\n * @example\n * ```tsx\n * const form = useForm({ initialValues: { bio: '' } });\n *\n * <TextArea\n * {...form.getFieldProps('bio')}\n * rows={5}\n * placeholder=\"Tell us about yourself\"\n * error={!!form.errors.bio}\n * aria-invalid={!!form.errors.bio}\n * aria-describedby={form.errors.bio ? 'bio-error' : undefined}\n * />\n * ```\n *\n * @see https://opensite.ai/developers/page-speed/forms/textarea\n */\nexport function TextArea({\n name,\n value,\n onChange,\n onBlur,\n placeholder,\n disabled = false,\n required = false,\n error = false,\n className = \"\",\n rows = 3,\n cols,\n maxLength,\n minLength,\n wrap = \"soft\",\n ...props\n}: TextAreaProps) {\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n onChange(e.target.value);\n };\n\n const handleBlur = () => {\n onBlur?.();\n };\n\n const baseClassName = \"textarea\";\n const errorClassName = error ? \"textarea--error\" : \"\";\n const combinedClassName = `${baseClassName} ${errorClassName} ${className}`.trim();\n\n return (\n <textarea\n name={name}\n value={value ?? \"\"}\n onChange={handleChange}\n onBlur={handleBlur}\n placeholder={placeholder}\n disabled={disabled}\n required={required}\n className={combinedClassName}\n rows={rows}\n cols={cols}\n maxLength={maxLength}\n minLength={minLength}\n wrap={wrap}\n aria-invalid={error || props[\"aria-invalid\"]}\n aria-describedby={props[\"aria-describedby\"]}\n aria-required={required || props[\"aria-required\"]}\n {...props}\n />\n );\n}\n\nTextArea.displayName = \"TextArea\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport type { InputProps } from \"../core/types\";\n\n/**\n * Additional props specific to Checkbox\n */\nexport interface CheckboxProps\n extends Omit<InputProps<boolean>, \"onChange\" | \"placeholder\"> {\n /**\n * Change handler - receives boolean checked state\n */\n onChange: (checked: boolean) => void;\n\n /**\n * Indeterminate state for partial selections\n * Useful for \"select all\" checkboxes with some items selected\n * @default false\n */\n indeterminate?: boolean;\n\n /**\n * Label text for the checkbox\n * Can also wrap checkbox in a label element\n */\n label?: React.ReactNode;\n\n /**\n * Additional native input attributes\n */\n [key: string]: any;\n}\n\n/**\n * Checkbox - High-performance boolean input component\n *\n * A lightweight, accessible checkbox with error state support.\n * Designed to work seamlessly with useForm and Field components.\n *\n * Features:\n * - Full accessibility support (ARIA attributes)\n * - Error state styling\n * - Controlled input behavior\n * - Indeterminate state support\n * - Optional label text\n * - All native checkbox attributes supported\n *\n * @example\n * ```tsx\n * const form = useForm({ initialValues: { terms: false } });\n *\n * <Checkbox\n * {...form.getFieldProps('terms')}\n * label=\"I agree to the terms and conditions\"\n * error={!!form.errors.terms}\n * aria-describedby={form.errors.terms ? 'terms-error' : undefined}\n * />\n * ```\n *\n * @example\n * ```tsx\n * // With indeterminate state\n * <Checkbox\n * name=\"selectAll\"\n * value={allSelected}\n * onChange={handleSelectAll}\n * indeterminate={someSelected}\n * label=\"Select all items\"\n * />\n * ```\n *\n * @see https://opensite.ai/developers/page-speed/forms/checkbox\n */\nexport function Checkbox({\n name,\n value,\n onChange,\n onBlur,\n disabled = false,\n required = false,\n error = false,\n className = \"\",\n indeterminate = false,\n label,\n ...props\n}: CheckboxProps) {\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n // Set indeterminate state on the native input element\n React.useEffect(() => {\n if (inputRef.current) {\n inputRef.current.indeterminate = indeterminate;\n }\n }, [indeterminate]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange(e.target.checked);\n };\n\n const handleBlur = () => {\n onBlur?.();\n };\n\n const baseClassName = \"checkbox\";\n const errorClassName = error ? \"checkbox--error\" : \"\";\n const combinedClassName = `${baseClassName} ${errorClassName} ${className}`.trim();\n\n const checkbox = (\n <input\n ref={inputRef}\n type=\"checkbox\"\n name={name}\n checked={value}\n onChange={handleChange}\n onBlur={handleBlur}\n disabled={disabled}\n required={required}\n className={combinedClassName}\n aria-invalid={error || props[\"aria-invalid\"]}\n aria-describedby={props[\"aria-describedby\"]}\n aria-required={required || props[\"aria-required\"]}\n {...props}\n />\n );\n\n // If label is provided, wrap checkbox in label element\n if (label) {\n return (\n <label className=\"checkbox-label\">\n {checkbox}\n <span className=\"checkbox-label-text\">{label}</span>\n </label>\n );\n }\n\n return checkbox;\n}\n\nCheckbox.displayName = \"Checkbox\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport type { InputProps } from \"../core/types\";\n\n/**\n * CheckboxGroup option type\n */\nexport interface CheckboxGroupOption {\n /**\n * The value for this checkbox option\n */\n value: string;\n\n /**\n * Display label for the option\n */\n label: React.ReactNode;\n\n /**\n * Optional description text below the label\n */\n description?: React.ReactNode;\n\n /**\n * Whether this option is disabled\n */\n disabled?: boolean;\n}\n\n/**\n * Additional props specific to CheckboxGroup\n */\nexport interface CheckboxGroupProps\n extends Omit<InputProps<string[]>, \"onChange\" | \"placeholder\"> {\n /**\n * Change handler - receives array of selected values\n */\n onChange: (values: string[]) => void;\n\n /**\n * Array of checkbox options\n */\n options: CheckboxGroupOption[];\n\n /**\n * Layout direction\n * @default \"stacked\"\n */\n layout?: \"inline\" | \"stacked\" | \"grid\";\n\n /**\n * Group-level label\n */\n label?: React.ReactNode;\n\n /**\n * Group-level description\n */\n description?: React.ReactNode;\n\n /**\n * Show \"select all\" checkbox\n * @default false\n */\n showSelectAll?: boolean;\n\n /**\n * Label for the select all checkbox\n * @default \"Select all\"\n */\n selectAllLabel?: string;\n\n /**\n * Minimum number of selections required\n */\n minSelections?: number;\n\n /**\n * Maximum number of selections allowed\n */\n maxSelections?: number;\n\n /**\n * Custom render function for options\n */\n renderOption?: (option: CheckboxGroupOption) => React.ReactNode;\n\n /**\n * Grid columns (only applies when layout=\"grid\")\n * @default 2\n */\n gridColumns?: number;\n\n /**\n * Additional native input attributes\n */\n [key: string]: any;\n}\n\n/**\n * CheckboxGroup - High-performance multiple selection component\n *\n * A lightweight, accessible checkbox group with error state support.\n * Designed to work seamlessly with useForm and Field components.\n *\n * Features:\n * - Full accessibility support (ARIA attributes, role=\"group\")\n * - Error state styling\n * - Controlled input behavior\n * - Multiple layout options (inline, stacked, grid)\n * - Optional \"select all\" checkbox\n * - Individual option disabled state\n * - Minimum/maximum selection validation\n * - Custom option rendering\n * - Optional descriptions for each option\n * - All native checkbox attributes supported\n *\n * @example\n * ```tsx\n * const form = useForm({ initialValues: { interests: [] } });\n *\n * <CheckboxGroup\n * {...form.getFieldProps('interests')}\n * label=\"Select your interests\"\n * options={[\n * { value: 'sports', label: 'Sports', description: 'Football, Basketball, etc.' },\n * { value: 'music', label: 'Music', description: 'All genres' },\n * { value: 'reading', label: 'Reading', description: 'Books and articles' }\n * ]}\n * showSelectAll\n * error={!!form.errors.interests}\n * aria-describedby={form.errors.interests ? 'interests-error' : undefined}\n * />\n * ```\n *\n * @example\n * ```tsx\n * // Grid layout with min/max selections\n * <CheckboxGroup\n * name=\"features\"\n * value={features}\n * onChange={handleFeaturesChange}\n * layout=\"grid\"\n * gridColumns={3}\n * minSelections={1}\n * maxSelections={3}\n * label=\"Select 1-3 features\"\n * options={[\n * { value: 'ssl', label: 'SSL Certificate' },\n * { value: 'cdn', label: 'CDN' },\n * { value: 'backup', label: 'Daily Backups' },\n * { value: 'support', label: '24/7 Support' }\n * ]}\n * />\n * ```\n *\n * @see https://opensite.ai/developers/page-speed/forms/checkbox-group\n */\nexport function CheckboxGroup({\n name,\n value = [],\n onChange,\n onBlur,\n disabled = false,\n required = false,\n error = false,\n className = \"\",\n layout = \"stacked\",\n label,\n description,\n options,\n showSelectAll = false,\n selectAllLabel = \"Select all\",\n minSelections,\n maxSelections,\n renderOption,\n gridColumns = 2,\n ...props\n}: CheckboxGroupProps) {\n // Calculate select all state\n const enabledOptions = options.filter((opt) => !opt.disabled);\n const enabledValues = enabledOptions.map((opt) => opt.value);\n const selectedEnabledCount = value.filter((v) =>\n enabledValues.includes(v)\n ).length;\n const allSelected = selectedEnabledCount === enabledOptions.length;\n const someSelected = selectedEnabledCount > 0 && !allSelected;\n\n // Handle individual checkbox change\n const handleChange = (optionValue: string, checked: boolean) => {\n const newValues = checked\n ? [...value, optionValue]\n : value.filter((v) => v !== optionValue);\n\n // Enforce max selections\n if (maxSelections && checked && newValues.length > maxSelections) {\n return;\n }\n\n onChange(newValues);\n };\n\n // Handle select all change\n const handleSelectAll = (checked: boolean) => {\n if (checked) {\n // Select all enabled options\n const allValues = enabledOptions.map((opt) => opt.value);\n onChange(allValues);\n } else {\n // Deselect all\n onChange([]);\n }\n };\n\n const handleBlur = () => {\n onBlur?.();\n };\n\n const baseClassName = \"checkbox-group\";\n const errorClassName = error ? \"checkbox-group--error\" : \"\";\n const layoutClassName = `checkbox-group--${layout}`;\n const combinedClassName =\n `${baseClassName} ${errorClassName} ${layoutClassName} ${className}`.trim();\n\n // Determine if max selections reached\n const maxReached = Boolean(maxSelections && value.length >= maxSelections);\n\n return (\n <div\n className={combinedClassName}\n role=\"group\"\n aria-invalid={error || props[\"aria-invalid\"]}\n aria-describedby={props[\"aria-describedby\"]}\n aria-required={required || props[\"aria-required\"]}\n aria-label={typeof label === \"string\" ? label : props[\"aria-label\"]}\n style={\n layout === \"grid\"\n ? {\n gridTemplateColumns: `repeat(${gridColumns}, 1fr)`,\n }\n : undefined\n }\n >\n {label && <div className=\"checkbox-group-label\">{label}</div>}\n {description && (\n <div className=\"checkbox-group-description\">{description}</div>\n )}\n\n <div className=\"checkbox-options\">\n {/* Select All Checkbox */}\n {showSelectAll && enabledOptions.length > 0 && (\n <label className=\"checkbox-option checkbox-option--select-all\">\n <input\n type=\"checkbox\"\n checked={allSelected}\n ref={(input) => {\n if (input) {\n input.indeterminate = someSelected;\n }\n }}\n onChange={(e) => handleSelectAll(e.target.checked)}\n onBlur={handleBlur}\n disabled={disabled}\n className=\"checkbox-input\"\n aria-label={selectAllLabel}\n />\n <div className=\"checkbox-content\">\n <span className=\"checkbox-label\">{selectAllLabel}</span>\n </div>\n </label>\n )}\n\n {/* Individual Checkboxes */}\n {options.map((option) => {\n const isChecked = value.includes(option.value);\n const isDisabled =\n disabled || option.disabled || (maxReached && !isChecked);\n const checkboxId = `${name}-${option.value}`;\n\n return (\n <label\n key={option.value}\n className={`checkbox-option ${isDisabled ? \"checkbox-option--disabled\" : \"\"}`}\n htmlFor={checkboxId}\n >\n <input\n type=\"checkbox\"\n id={checkboxId}\n name={name}\n value={option.value}\n checked={isChecked}\n onChange={(e) => handleChange(option.value, e.target.checked)}\n onBlur={handleBlur}\n disabled={isDisabled}\n required={required && minSelections ? value.length < minSelections : false}\n className=\"checkbox-input\"\n aria-describedby={\n option.description\n ? `${checkboxId}-description`\n : props[\"aria-describedby\"]\n }\n />\n <div className=\"checkbox-content\">\n {renderOption ? (\n renderOption(option)\n ) : (\n <>\n <span className=\"checkbox-label\">{option.label}</span>\n {option.description && (\n <span\n className=\"checkbox-description\"\n id={`${checkboxId}-description`}\n >\n {option.description}\n </span>\n )}\n </>\n )}\n </div>\n </label>\n );\n })}\n </div>\n\n {/* Selection count feedback */}\n {(minSelections || maxSelections) && (\n <div className=\"checkbox-group-feedback\" aria-live=\"polite\">\n {minSelections && value.length < minSelections && (\n <span className=\"checkbox-group-feedback-min\">\n Select at least {minSelections} option{minSelections !== 1 ? \"s\" : \"\"}\n </span>\n )}\n {maxSelections && (\n <span className=\"checkbox-group-feedback-max\">\n {value.length}/{maxSelections} selected\n </span>\n )}\n </div>\n )}\n </div>\n );\n}\n\nCheckboxGroup.displayName = \"CheckboxGroup\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport type { InputProps } from \"../core/types\";\n\n/**\n * Radio option type\n */\nexport interface RadioOption {\n /**\n * The value for this radio option\n */\n value: string;\n\n /**\n * Display label for the option\n */\n label: React.ReactNode;\n\n /**\n * Optional description text below the label\n */\n description?: React.ReactNode;\n\n /**\n * Whether this option is disabled\n */\n disabled?: boolean;\n}\n\n/**\n * Additional props specific to Radio\n */\nexport interface RadioProps\n extends Omit<InputProps<string>, \"onChange\" | \"placeholder\"> {\n /**\n * Change handler - receives selected value\n */\n onChange: (value: string) => void;\n\n /**\n * Array of radio options\n */\n options: RadioOption[];\n\n /**\n * Layout direction\n * @default \"stacked\"\n */\n layout?: \"inline\" | \"stacked\";\n\n /**\n * Group-level label\n */\n label?: React.ReactNode;\n\n /**\n * Additional native input attributes\n */\n [key: string]: any;\n}\n\n/**\n * Radio - High-performance single selection component\n *\n * A lightweight, accessible radio group with error state support.\n * Designed to work seamlessly with useForm and Field components.\n *\n * Features:\n * - Full accessibility support (ARIA attributes, role=\"radiogroup\")\n * - Error state styling\n * - Controlled input behavior\n * - Keyboard navigation (arrow keys)\n * - Inline or stacked layout\n * - Optional descriptions for each option\n * - Individual option disabled state\n * - All native radio attributes supported\n *\n * @example\n * ```tsx\n * const form = useForm({ initialValues: { plan: 'basic' } });\n *\n * <Radio\n * {...form.getFieldProps('plan')}\n * label=\"Select your plan\"\n * options={[\n * { value: 'basic', label: 'Basic', description: '$9/month' },\n * { value: 'pro', label: 'Pro', description: '$29/month' },\n * { value: 'enterprise', label: 'Enterprise', description: '$99/month' }\n * ]}\n * error={!!form.errors.plan}\n * aria-describedby={form.errors.plan ? 'plan-error' : undefined}\n * />\n * ```\n *\n * @example\n * ```tsx\n * // Inline layout\n * <Radio\n * name=\"size\"\n * value={size}\n * onChange={handleSizeChange}\n * layout=\"inline\"\n * options={[\n * { value: 'sm', label: 'Small' },\n * { value: 'md', label: 'Medium' },\n * { value: 'lg', label: 'Large' }\n * ]}\n * />\n * ```\n *\n * @see https://opensite.ai/developers/page-speed/forms/radio\n */\nexport function Radio({\n name,\n value,\n onChange,\n onBlur,\n disabled = false,\n required = false,\n error = false,\n className = \"\",\n layout = \"stacked\",\n label,\n options,\n ...props\n}: RadioProps) {\n const handleChange = (optionValue: string) => {\n onChange(optionValue);\n };\n\n const handleKeyDown = (\n e: React.KeyboardEvent<HTMLDivElement>,\n currentIndex: number\n ) => {\n if (e.key === \"ArrowDown\" || e.key === \"ArrowRight\") {\n e.preventDefault();\n // Find next non-disabled option\n let nextIndex = (currentIndex + 1) % options.length;\n let attempts = 0;\n while (\n options[nextIndex].disabled &&\n attempts < options.length &&\n !disabled\n ) {\n nextIndex = (nextIndex + 1) % options.length;\n attempts++;\n }\n if (!options[nextIndex].disabled) {\n handleChange(options[nextIndex].value);\n }\n } else if (e.key === \"ArrowUp\" || e.key === \"ArrowLeft\") {\n e.preventDefault();\n // Find previous non-disabled option\n let prevIndex = (currentIndex - 1 + options.length) % options.length;\n let attempts = 0;\n while (\n options[prevIndex].disabled &&\n attempts < options.length &&\n !disabled\n ) {\n prevIndex = (prevIndex - 1 + options.length) % options.length;\n attempts++;\n }\n if (!options[prevIndex].disabled) {\n handleChange(options[prevIndex].value);\n }\n }\n };\n\n const handleBlur = () => {\n onBlur?.();\n };\n\n const baseClassName = \"radio-group\";\n const errorClassName = error ? \"radio-group--error\" : \"\";\n const layoutClassName = `radio-group--${layout}`;\n const combinedClassName =\n `${baseClassName} ${errorClassName} ${layoutClassName} ${className}`.trim();\n\n return (\n <div\n className={combinedClassName}\n role=\"radiogroup\"\n aria-invalid={error || props[\"aria-invalid\"]}\n aria-describedby={props[\"aria-describedby\"]}\n aria-required={required || props[\"aria-required\"]}\n aria-label={typeof label === \"string\" ? label : props[\"aria-label\"]}\n >\n {label && <div className=\"radio-group-label\">{label}</div>}\n <div className=\"radio-options\">\n {options.map((option, index) => {\n const isChecked = value === option.value;\n const isDisabled = disabled || option.disabled;\n const radioId = `${name}-${option.value}`;\n\n return (\n <label\n key={option.value}\n className={`radio-option ${isDisabled ? \"radio-option--disabled\" : \"\"}`}\n htmlFor={radioId}\n >\n <input\n type=\"radio\"\n id={radioId}\n name={name}\n value={option.value}\n checked={isChecked}\n onChange={(e) => handleChange(e.target.value)}\n onBlur={handleBlur}\n onKeyDown={(e) => handleKeyDown(e, index)}\n disabled={isDisabled}\n required={required}\n className=\"radio-input\"\n aria-describedby={\n option.description\n ? `${radioId}-description`\n : props[\"aria-describedby\"]\n }\n />\n <div className=\"radio-content\">\n <span className=\"radio-label\">{option.label}</span>\n {option.description && (\n <span\n className=\"radio-description\"\n id={`${radioId}-description`}\n >\n {option.description}\n </span>\n )}\n </div>\n </label>\n );\n })}\n </div>\n </div>\n );\n}\n\nRadio.displayName = \"Radio\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport type { InputProps } from \"../core/types\";\n\n/**\n * Select option type\n */\nexport interface SelectOption {\n /**\n * The value for this option\n */\n value: string;\n\n /**\n * Display label for the option\n */\n label: React.ReactNode;\n\n /**\n * Whether this option is disabled\n */\n disabled?: boolean;\n}\n\n/**\n * Select option group type for organizing options\n */\nexport interface SelectOptionGroup {\n /**\n * Group label\n */\n label: string;\n\n /**\n * Options in this group\n */\n options: SelectOption[];\n}\n\n/**\n * Additional props specific to Select\n */\nexport interface SelectProps\n extends Omit<InputProps<string>, \"onChange\" | \"onFocus\"> {\n /**\n * Change handler - receives selected value\n */\n onChange: (value: string) => void;\n\n /**\n * Focus handler\n */\n onFocus?: () => void;\n\n /**\n * Array of select options (flat structure)\n */\n options?: SelectOption[];\n\n /**\n * Array of option groups (grouped structure)\n */\n optionGroups?: SelectOptionGroup[];\n\n /**\n * Placeholder text when no option is selected\n * @default \"Select...\"\n */\n placeholder?: string;\n\n /**\n * Enable search/filter functionality\n * @default true\n */\n searchable?: boolean;\n\n /**\n * Enable clearable button to reset selection\n * @default true\n */\n clearable?: boolean;\n\n /**\n * Loading state for async options\n * @default false\n */\n loading?: boolean;\n\n /**\n * Custom render function for options\n */\n renderOption?: (option: SelectOption) => React.ReactNode;\n\n /**\n * Additional native input attributes\n */\n [key: string]: any;\n}\n\n/**\n * Select - High-performance dropdown selection component\n *\n * A lightweight, accessible select/dropdown with search, keyboard navigation,\n * and error state support. Designed to work seamlessly with useForm and Field components.\n *\n * Features:\n * - Full accessibility support (ARIA attributes, role=\"combobox\")\n * - Error state styling\n * - Controlled input behavior\n * - Keyboard navigation (arrow keys, Enter, Escape, type-ahead)\n * - Searchable options with filtering\n * - Clearable selection\n * - Option groups support\n * - Loading state for async options\n * - Disabled options support\n * - Click outside to close\n *\n * @example\n * ```tsx\n * const form = useForm({ initialValues: { country: '' } });\n *\n * <Select\n * {...form.getFieldProps('country')}\n * placeholder=\"Select a country\"\n * options={[\n * { value: 'us', label: 'United States' },\n * { value: 'ca', label: 'Canada' },\n * { value: 'mx', label: 'Mexico' }\n * ]}\n * searchable\n * clearable\n * error={!!form.errors.country}\n * aria-describedby={form.errors.country ? 'country-error' : undefined}\n * />\n * ```\n *\n * @example\n * ```tsx\n * // With option groups\n * <Select\n * name=\"timezone\"\n * value={timezone}\n * onChange={handleTimezoneChange}\n * optionGroups={[\n * {\n * label: 'North America',\n * options: [\n * { value: 'est', label: 'Eastern Time' },\n * { value: 'cst', label: 'Central Time' }\n * ]\n * },\n * {\n * label: 'Europe',\n * options: [\n * { value: 'gmt', label: 'GMT' },\n * { value: 'cet', label: 'Central European Time' }\n * ]\n * }\n * ]}\n * />\n * ```\n *\n * @see https://opensite.ai/developers/page-speed/forms/select\n */\nexport function Select({\n name,\n value,\n onChange,\n onBlur,\n onFocus,\n disabled = false,\n required = false,\n error = false,\n className = \"\",\n placeholder = \"Select...\",\n searchable = true,\n clearable = true,\n loading = false,\n options = [],\n optionGroups = [],\n renderOption,\n ...props\n}: SelectProps) {\n const [isOpen, setIsOpen] = React.useState(false);\n const [searchQuery, setSearchQuery] = React.useState(\"\");\n const [focusedIndex, setFocusedIndex] = React.useState(-1);\n const selectRef = React.useRef<HTMLDivElement>(null);\n const searchInputRef = React.useRef<HTMLInputElement>(null);\n const dropdownId = `${name}-dropdown`;\n\n // Flatten options from groups or use flat options\n const allOptions = React.useMemo(() => {\n if (optionGroups.length > 0) {\n return optionGroups.flatMap((group) => group.options);\n }\n return options;\n }, [options, optionGroups]);\n\n // Filter options based on search query\n const filteredOptions = React.useMemo(() => {\n if (!searchQuery.trim()) {\n return allOptions;\n }\n const query = searchQuery.toLowerCase();\n return allOptions.filter((option) => {\n const label =\n typeof option.label === \"string\" ? option.label : String(option.label);\n return label.toLowerCase().includes(query);\n });\n }, [allOptions, searchQuery]);\n\n // Get selected option\n const selectedOption = React.useMemo(() => {\n return allOptions.find((opt) => opt.value === value);\n }, [allOptions, value]);\n\n // Handle option selection\n const handleSelect = (optionValue: string) => {\n onChange(optionValue);\n setIsOpen(false);\n setSearchQuery(\"\");\n setFocusedIndex(-1);\n };\n\n // Handle clear selection\n const handleClear = (e: React.MouseEvent) => {\n e.stopPropagation();\n onChange(\"\");\n setSearchQuery(\"\");\n setFocusedIndex(-1);\n };\n\n // Toggle dropdown\n const handleToggle = () => {\n if (disabled) return;\n const newIsOpen = !isOpen;\n setIsOpen(newIsOpen);\n if (newIsOpen && searchable && searchInputRef.current) {\n // Focus search input when opening\n setTimeout(() => searchInputRef.current?.focus(), 0);\n }\n if (newIsOpen) {\n onFocus?.();\n }\n };\n\n // Handle search input change\n const handleSearchChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setSearchQuery(e.target.value);\n setFocusedIndex(0); // Reset focus to first filtered option\n };\n\n // Keyboard navigation\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (disabled) return;\n\n switch (e.key) {\n case \"ArrowDown\":\n e.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n setFocusedIndex(0);\n } else {\n const enabledOptions = filteredOptions.filter((opt) => !opt.disabled);\n if (enabledOptions.length > 0) {\n const currentIndexInFiltered = focusedIndex;\n const nextIndex = (currentIndexInFiltered + 1) % enabledOptions.length;\n setFocusedIndex(\n filteredOptions.indexOf(enabledOptions[nextIndex])\n );\n }\n }\n break;\n\n case \"ArrowUp\":\n e.preventDefault();\n if (isOpen) {\n const enabledOptions = filteredOptions.filter((opt) => !opt.disabled);\n if (enabledOptions.length > 0) {\n const currentIndexInFiltered = focusedIndex;\n const prevIndex =\n (currentIndexInFiltered - 1 + enabledOptions.length) %\n enabledOptions.length;\n setFocusedIndex(\n filteredOptions.indexOf(enabledOptions[prevIndex])\n );\n }\n }\n break;\n\n case \"Enter\":\n e.preventDefault();\n if (isOpen && focusedIndex >= 0 && focusedIndex < filteredOptions.length) {\n const focusedOption = filteredOptions[focusedIndex];\n if (!focusedOption.disabled) {\n handleSelect(focusedOption.value);\n }\n } else if (!isOpen) {\n setIsOpen(true);\n }\n break;\n\n case \"Escape\":\n e.preventDefault();\n if (isOpen) {\n setIsOpen(false);\n setSearchQuery(\"\");\n setFocusedIndex(-1);\n }\n break;\n\n case \" \":\n // Space key to open dropdown if not searching\n if (!isOpen && !searchable) {\n e.preventDefault();\n setIsOpen(true);\n }\n break;\n\n default:\n // Type-ahead search (only if not already searching)\n if (!searchable && e.key.length === 1 && !e.ctrlKey && !e.metaKey) {\n const char = e.key.toLowerCase();\n const matchingOption = filteredOptions.find((opt) => {\n const label =\n typeof opt.label === \"string\"\n ? opt.label\n : String(opt.label);\n return label.toLowerCase().startsWith(char) && !opt.disabled;\n });\n if (matchingOption) {\n handleSelect(matchingOption.value);\n }\n }\n break;\n }\n };\n\n // Handle blur\n const handleBlur = () => {\n onBlur?.();\n };\n\n // Close dropdown when clicking outside\n React.useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n selectRef.current &&\n !selectRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n setSearchQuery(\"\");\n setFocusedIndex(-1);\n handleBlur();\n }\n };\n\n if (isOpen) {\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }\n }, [isOpen]);\n\n const baseClassName = \"select\";\n const errorClassName = error ? \"select--error\" : \"\";\n const disabledClassName = disabled ? \"select--disabled\" : \"\";\n const openClassName = isOpen ? \"select--open\" : \"\";\n const combinedClassName =\n `${baseClassName} ${errorClassName} ${disabledClassName} ${openClassName} ${className}`.trim();\n\n return (\n <div\n ref={selectRef}\n className={combinedClassName}\n onKeyDown={handleKeyDown}\n onBlur={handleBlur}\n >\n {/* Hidden native select for form submission */}\n <select\n name={name}\n value={value}\n onChange={() => {}}\n disabled={disabled}\n required={required}\n aria-hidden=\"true\"\n tabIndex={-1}\n style={{ display: \"none\" }}\n >\n <option value=\"\">Select...</option>\n {allOptions.map((option) => (\n <option key={option.value} value={option.value}>\n {typeof option.label === \"string\" ? option.label : option.value}\n </option>\n ))}\n </select>\n\n {/* Custom select trigger */}\n <div\n className=\"select-trigger\"\n onClick={handleToggle}\n role=\"combobox\"\n aria-expanded={isOpen}\n aria-controls={dropdownId}\n aria-invalid={error || props[\"aria-invalid\"]}\n aria-describedby={props[\"aria-describedby\"]}\n aria-required={required || props[\"aria-required\"]}\n aria-disabled={disabled}\n tabIndex={disabled ? -1 : 0}\n >\n <span className=\"select-value\">\n {selectedOption ? (\n renderOption ? (\n renderOption(selectedOption)\n ) : (\n selectedOption.label\n )\n ) : (\n <span className=\"select-placeholder\">{placeholder}</span>\n )}\n </span>\n <div className=\"select-icons\">\n {loading && <span className=\"select-loading\">⏳</span>}\n {clearable && value && !disabled && !loading && (\n <button\n type=\"button\"\n className=\"select-clear\"\n onClick={handleClear}\n aria-label=\"Clear selection\"\n tabIndex={-1}\n >\n ✕\n </button>\n )}\n <span className=\"select-arrow\" aria-hidden=\"true\">\n {isOpen ? \"▲\" : \"▼\"}\n </span>\n </div>\n </div>\n\n {/* Dropdown */}\n {isOpen && (\n <div id={dropdownId} className=\"select-dropdown\" role=\"listbox\">\n {searchable && (\n <div className=\"select-search\">\n <input\n ref={searchInputRef}\n type=\"text\"\n className=\"select-search-input\"\n placeholder=\"Search...\"\n value={searchQuery}\n onChange={handleSearchChange}\n onClick={(e) => e.stopPropagation()}\n aria-label=\"Search options\"\n />\n </div>\n )}\n\n <div className=\"select-options\">\n {filteredOptions.length === 0 ? (\n <div className=\"select-no-options\">No options found</div>\n ) : optionGroups.length > 0 ? (\n // Render grouped options\n optionGroups.map((group, groupIndex) => {\n const groupOptions = group.options.filter((opt) =>\n filteredOptions.includes(opt)\n );\n if (groupOptions.length === 0) return null;\n\n return (\n <div key={groupIndex} className=\"select-optgroup\">\n <div className=\"select-optgroup-label\">{group.label}</div>\n {groupOptions.map((option) => {\n const globalIndex = filteredOptions.indexOf(option);\n const isSelected = value === option.value;\n const isFocused = globalIndex === focusedIndex;\n const isDisabled = option.disabled;\n\n return (\n <div\n key={option.value}\n className={`select-option ${isSelected ? \"select-option--selected\" : \"\"} ${isFocused ? \"select-option--focused\" : \"\"} ${isDisabled ? \"select-option--disabled\" : \"\"}`}\n onClick={() =>\n !isDisabled && handleSelect(option.value)\n }\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={isDisabled}\n >\n {renderOption ? renderOption(option) : option.label}\n </div>\n );\n })}\n </div>\n );\n })\n ) : (\n // Render flat options\n filteredOptions.map((option, index) => {\n const isSelected = value === option.value;\n const isFocused = index === focusedIndex;\n const isDisabled = option.disabled;\n\n return (\n <div\n key={option.value}\n className={`select-option ${isSelected ? \"select-option--selected\" : \"\"} ${isFocused ? \"select-option--focused\" : \"\"} ${isDisabled ? \"select-option--disabled\" : \"\"}`}\n onClick={() => !isDisabled && handleSelect(option.value)}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={isDisabled}\n >\n {renderOption ? renderOption(option) : option.label}\n </div>\n );\n })\n )}\n </div>\n </div>\n )}\n </div>\n );\n}\n\nSelect.displayName = \"Select\";\n"]}
|
package/dist/inputs.d.cts
CHANGED
|
@@ -178,6 +178,148 @@ declare namespace Checkbox {
|
|
|
178
178
|
var displayName: string;
|
|
179
179
|
}
|
|
180
180
|
|
|
181
|
+
/**
|
|
182
|
+
* CheckboxGroup option type
|
|
183
|
+
*/
|
|
184
|
+
interface CheckboxGroupOption {
|
|
185
|
+
/**
|
|
186
|
+
* The value for this checkbox option
|
|
187
|
+
*/
|
|
188
|
+
value: string;
|
|
189
|
+
/**
|
|
190
|
+
* Display label for the option
|
|
191
|
+
*/
|
|
192
|
+
label: React.ReactNode;
|
|
193
|
+
/**
|
|
194
|
+
* Optional description text below the label
|
|
195
|
+
*/
|
|
196
|
+
description?: React.ReactNode;
|
|
197
|
+
/**
|
|
198
|
+
* Whether this option is disabled
|
|
199
|
+
*/
|
|
200
|
+
disabled?: boolean;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Additional props specific to CheckboxGroup
|
|
204
|
+
*/
|
|
205
|
+
interface CheckboxGroupProps extends Omit<InputProps<string[]>, "onChange" | "placeholder"> {
|
|
206
|
+
/**
|
|
207
|
+
* Change handler - receives array of selected values
|
|
208
|
+
*/
|
|
209
|
+
onChange: (values: string[]) => void;
|
|
210
|
+
/**
|
|
211
|
+
* Array of checkbox options
|
|
212
|
+
*/
|
|
213
|
+
options: CheckboxGroupOption[];
|
|
214
|
+
/**
|
|
215
|
+
* Layout direction
|
|
216
|
+
* @default "stacked"
|
|
217
|
+
*/
|
|
218
|
+
layout?: "inline" | "stacked" | "grid";
|
|
219
|
+
/**
|
|
220
|
+
* Group-level label
|
|
221
|
+
*/
|
|
222
|
+
label?: React.ReactNode;
|
|
223
|
+
/**
|
|
224
|
+
* Group-level description
|
|
225
|
+
*/
|
|
226
|
+
description?: React.ReactNode;
|
|
227
|
+
/**
|
|
228
|
+
* Show "select all" checkbox
|
|
229
|
+
* @default false
|
|
230
|
+
*/
|
|
231
|
+
showSelectAll?: boolean;
|
|
232
|
+
/**
|
|
233
|
+
* Label for the select all checkbox
|
|
234
|
+
* @default "Select all"
|
|
235
|
+
*/
|
|
236
|
+
selectAllLabel?: string;
|
|
237
|
+
/**
|
|
238
|
+
* Minimum number of selections required
|
|
239
|
+
*/
|
|
240
|
+
minSelections?: number;
|
|
241
|
+
/**
|
|
242
|
+
* Maximum number of selections allowed
|
|
243
|
+
*/
|
|
244
|
+
maxSelections?: number;
|
|
245
|
+
/**
|
|
246
|
+
* Custom render function for options
|
|
247
|
+
*/
|
|
248
|
+
renderOption?: (option: CheckboxGroupOption) => React.ReactNode;
|
|
249
|
+
/**
|
|
250
|
+
* Grid columns (only applies when layout="grid")
|
|
251
|
+
* @default 2
|
|
252
|
+
*/
|
|
253
|
+
gridColumns?: number;
|
|
254
|
+
/**
|
|
255
|
+
* Additional native input attributes
|
|
256
|
+
*/
|
|
257
|
+
[key: string]: any;
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* CheckboxGroup - High-performance multiple selection component
|
|
261
|
+
*
|
|
262
|
+
* A lightweight, accessible checkbox group with error state support.
|
|
263
|
+
* Designed to work seamlessly with useForm and Field components.
|
|
264
|
+
*
|
|
265
|
+
* Features:
|
|
266
|
+
* - Full accessibility support (ARIA attributes, role="group")
|
|
267
|
+
* - Error state styling
|
|
268
|
+
* - Controlled input behavior
|
|
269
|
+
* - Multiple layout options (inline, stacked, grid)
|
|
270
|
+
* - Optional "select all" checkbox
|
|
271
|
+
* - Individual option disabled state
|
|
272
|
+
* - Minimum/maximum selection validation
|
|
273
|
+
* - Custom option rendering
|
|
274
|
+
* - Optional descriptions for each option
|
|
275
|
+
* - All native checkbox attributes supported
|
|
276
|
+
*
|
|
277
|
+
* @example
|
|
278
|
+
* ```tsx
|
|
279
|
+
* const form = useForm({ initialValues: { interests: [] } });
|
|
280
|
+
*
|
|
281
|
+
* <CheckboxGroup
|
|
282
|
+
* {...form.getFieldProps('interests')}
|
|
283
|
+
* label="Select your interests"
|
|
284
|
+
* options={[
|
|
285
|
+
* { value: 'sports', label: 'Sports', description: 'Football, Basketball, etc.' },
|
|
286
|
+
* { value: 'music', label: 'Music', description: 'All genres' },
|
|
287
|
+
* { value: 'reading', label: 'Reading', description: 'Books and articles' }
|
|
288
|
+
* ]}
|
|
289
|
+
* showSelectAll
|
|
290
|
+
* error={!!form.errors.interests}
|
|
291
|
+
* aria-describedby={form.errors.interests ? 'interests-error' : undefined}
|
|
292
|
+
* />
|
|
293
|
+
* ```
|
|
294
|
+
*
|
|
295
|
+
* @example
|
|
296
|
+
* ```tsx
|
|
297
|
+
* // Grid layout with min/max selections
|
|
298
|
+
* <CheckboxGroup
|
|
299
|
+
* name="features"
|
|
300
|
+
* value={features}
|
|
301
|
+
* onChange={handleFeaturesChange}
|
|
302
|
+
* layout="grid"
|
|
303
|
+
* gridColumns={3}
|
|
304
|
+
* minSelections={1}
|
|
305
|
+
* maxSelections={3}
|
|
306
|
+
* label="Select 1-3 features"
|
|
307
|
+
* options={[
|
|
308
|
+
* { value: 'ssl', label: 'SSL Certificate' },
|
|
309
|
+
* { value: 'cdn', label: 'CDN' },
|
|
310
|
+
* { value: 'backup', label: 'Daily Backups' },
|
|
311
|
+
* { value: 'support', label: '24/7 Support' }
|
|
312
|
+
* ]}
|
|
313
|
+
* />
|
|
314
|
+
* ```
|
|
315
|
+
*
|
|
316
|
+
* @see https://opensite.ai/developers/page-speed/forms/checkbox-group
|
|
317
|
+
*/
|
|
318
|
+
declare function CheckboxGroup({ name, value, onChange, onBlur, disabled, required, error, className, layout, label, description, options, showSelectAll, selectAllLabel, minSelections, maxSelections, renderOption, gridColumns, ...props }: CheckboxGroupProps): React.JSX.Element;
|
|
319
|
+
declare namespace CheckboxGroup {
|
|
320
|
+
var displayName: string;
|
|
321
|
+
}
|
|
322
|
+
|
|
181
323
|
/**
|
|
182
324
|
* Radio option type
|
|
183
325
|
*/
|
|
@@ -430,4 +572,4 @@ declare namespace Select {
|
|
|
430
572
|
var displayName: string;
|
|
431
573
|
}
|
|
432
574
|
|
|
433
|
-
export { Checkbox, type CheckboxProps, Radio, type RadioOption, type RadioProps, Select, type SelectOption, type SelectOptionGroup, type SelectProps, TextArea, type TextAreaProps, TextInput };
|
|
575
|
+
export { Checkbox, CheckboxGroup, type CheckboxGroupOption, type CheckboxGroupProps, type CheckboxProps, Radio, type RadioOption, type RadioProps, Select, type SelectOption, type SelectOptionGroup, type SelectProps, TextArea, type TextAreaProps, TextInput };
|
package/dist/inputs.d.ts
CHANGED
|
@@ -178,6 +178,148 @@ declare namespace Checkbox {
|
|
|
178
178
|
var displayName: string;
|
|
179
179
|
}
|
|
180
180
|
|
|
181
|
+
/**
|
|
182
|
+
* CheckboxGroup option type
|
|
183
|
+
*/
|
|
184
|
+
interface CheckboxGroupOption {
|
|
185
|
+
/**
|
|
186
|
+
* The value for this checkbox option
|
|
187
|
+
*/
|
|
188
|
+
value: string;
|
|
189
|
+
/**
|
|
190
|
+
* Display label for the option
|
|
191
|
+
*/
|
|
192
|
+
label: React.ReactNode;
|
|
193
|
+
/**
|
|
194
|
+
* Optional description text below the label
|
|
195
|
+
*/
|
|
196
|
+
description?: React.ReactNode;
|
|
197
|
+
/**
|
|
198
|
+
* Whether this option is disabled
|
|
199
|
+
*/
|
|
200
|
+
disabled?: boolean;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Additional props specific to CheckboxGroup
|
|
204
|
+
*/
|
|
205
|
+
interface CheckboxGroupProps extends Omit<InputProps<string[]>, "onChange" | "placeholder"> {
|
|
206
|
+
/**
|
|
207
|
+
* Change handler - receives array of selected values
|
|
208
|
+
*/
|
|
209
|
+
onChange: (values: string[]) => void;
|
|
210
|
+
/**
|
|
211
|
+
* Array of checkbox options
|
|
212
|
+
*/
|
|
213
|
+
options: CheckboxGroupOption[];
|
|
214
|
+
/**
|
|
215
|
+
* Layout direction
|
|
216
|
+
* @default "stacked"
|
|
217
|
+
*/
|
|
218
|
+
layout?: "inline" | "stacked" | "grid";
|
|
219
|
+
/**
|
|
220
|
+
* Group-level label
|
|
221
|
+
*/
|
|
222
|
+
label?: React.ReactNode;
|
|
223
|
+
/**
|
|
224
|
+
* Group-level description
|
|
225
|
+
*/
|
|
226
|
+
description?: React.ReactNode;
|
|
227
|
+
/**
|
|
228
|
+
* Show "select all" checkbox
|
|
229
|
+
* @default false
|
|
230
|
+
*/
|
|
231
|
+
showSelectAll?: boolean;
|
|
232
|
+
/**
|
|
233
|
+
* Label for the select all checkbox
|
|
234
|
+
* @default "Select all"
|
|
235
|
+
*/
|
|
236
|
+
selectAllLabel?: string;
|
|
237
|
+
/**
|
|
238
|
+
* Minimum number of selections required
|
|
239
|
+
*/
|
|
240
|
+
minSelections?: number;
|
|
241
|
+
/**
|
|
242
|
+
* Maximum number of selections allowed
|
|
243
|
+
*/
|
|
244
|
+
maxSelections?: number;
|
|
245
|
+
/**
|
|
246
|
+
* Custom render function for options
|
|
247
|
+
*/
|
|
248
|
+
renderOption?: (option: CheckboxGroupOption) => React.ReactNode;
|
|
249
|
+
/**
|
|
250
|
+
* Grid columns (only applies when layout="grid")
|
|
251
|
+
* @default 2
|
|
252
|
+
*/
|
|
253
|
+
gridColumns?: number;
|
|
254
|
+
/**
|
|
255
|
+
* Additional native input attributes
|
|
256
|
+
*/
|
|
257
|
+
[key: string]: any;
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* CheckboxGroup - High-performance multiple selection component
|
|
261
|
+
*
|
|
262
|
+
* A lightweight, accessible checkbox group with error state support.
|
|
263
|
+
* Designed to work seamlessly with useForm and Field components.
|
|
264
|
+
*
|
|
265
|
+
* Features:
|
|
266
|
+
* - Full accessibility support (ARIA attributes, role="group")
|
|
267
|
+
* - Error state styling
|
|
268
|
+
* - Controlled input behavior
|
|
269
|
+
* - Multiple layout options (inline, stacked, grid)
|
|
270
|
+
* - Optional "select all" checkbox
|
|
271
|
+
* - Individual option disabled state
|
|
272
|
+
* - Minimum/maximum selection validation
|
|
273
|
+
* - Custom option rendering
|
|
274
|
+
* - Optional descriptions for each option
|
|
275
|
+
* - All native checkbox attributes supported
|
|
276
|
+
*
|
|
277
|
+
* @example
|
|
278
|
+
* ```tsx
|
|
279
|
+
* const form = useForm({ initialValues: { interests: [] } });
|
|
280
|
+
*
|
|
281
|
+
* <CheckboxGroup
|
|
282
|
+
* {...form.getFieldProps('interests')}
|
|
283
|
+
* label="Select your interests"
|
|
284
|
+
* options={[
|
|
285
|
+
* { value: 'sports', label: 'Sports', description: 'Football, Basketball, etc.' },
|
|
286
|
+
* { value: 'music', label: 'Music', description: 'All genres' },
|
|
287
|
+
* { value: 'reading', label: 'Reading', description: 'Books and articles' }
|
|
288
|
+
* ]}
|
|
289
|
+
* showSelectAll
|
|
290
|
+
* error={!!form.errors.interests}
|
|
291
|
+
* aria-describedby={form.errors.interests ? 'interests-error' : undefined}
|
|
292
|
+
* />
|
|
293
|
+
* ```
|
|
294
|
+
*
|
|
295
|
+
* @example
|
|
296
|
+
* ```tsx
|
|
297
|
+
* // Grid layout with min/max selections
|
|
298
|
+
* <CheckboxGroup
|
|
299
|
+
* name="features"
|
|
300
|
+
* value={features}
|
|
301
|
+
* onChange={handleFeaturesChange}
|
|
302
|
+
* layout="grid"
|
|
303
|
+
* gridColumns={3}
|
|
304
|
+
* minSelections={1}
|
|
305
|
+
* maxSelections={3}
|
|
306
|
+
* label="Select 1-3 features"
|
|
307
|
+
* options={[
|
|
308
|
+
* { value: 'ssl', label: 'SSL Certificate' },
|
|
309
|
+
* { value: 'cdn', label: 'CDN' },
|
|
310
|
+
* { value: 'backup', label: 'Daily Backups' },
|
|
311
|
+
* { value: 'support', label: '24/7 Support' }
|
|
312
|
+
* ]}
|
|
313
|
+
* />
|
|
314
|
+
* ```
|
|
315
|
+
*
|
|
316
|
+
* @see https://opensite.ai/developers/page-speed/forms/checkbox-group
|
|
317
|
+
*/
|
|
318
|
+
declare function CheckboxGroup({ name, value, onChange, onBlur, disabled, required, error, className, layout, label, description, options, showSelectAll, selectAllLabel, minSelections, maxSelections, renderOption, gridColumns, ...props }: CheckboxGroupProps): React.JSX.Element;
|
|
319
|
+
declare namespace CheckboxGroup {
|
|
320
|
+
var displayName: string;
|
|
321
|
+
}
|
|
322
|
+
|
|
181
323
|
/**
|
|
182
324
|
* Radio option type
|
|
183
325
|
*/
|
|
@@ -430,4 +572,4 @@ declare namespace Select {
|
|
|
430
572
|
var displayName: string;
|
|
431
573
|
}
|
|
432
574
|
|
|
433
|
-
export { Checkbox, type CheckboxProps, Radio, type RadioOption, type RadioProps, Select, type SelectOption, type SelectOptionGroup, type SelectProps, TextArea, type TextAreaProps, TextInput };
|
|
575
|
+
export { Checkbox, CheckboxGroup, type CheckboxGroupOption, type CheckboxGroupProps, type CheckboxProps, Radio, type RadioOption, type RadioProps, Select, type SelectOption, type SelectOptionGroup, type SelectProps, TextArea, type TextAreaProps, TextInput };
|