@tachui/forms 0.7.1-alpha → 0.8.0-alpha
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 +87 -272
- package/dist/DatePicker-D5nRFTUm.js +475 -0
- package/dist/DatePicker-D5nRFTUm.js.map +1 -0
- package/dist/Select-yZyKooXk.js +945 -0
- package/dist/Select-yZyKooXk.js.map +1 -0
- package/dist/Slider-0-oal5YR.js +644 -0
- package/dist/Slider-0-oal5YR.js.map +1 -0
- package/dist/TextField-hX15dY3U.js +509 -0
- package/dist/TextField-hX15dY3U.js.map +1 -0
- package/dist/components/advanced/Slider.d.ts +190 -0
- package/dist/components/advanced/Slider.d.ts.map +1 -0
- package/dist/components/advanced/Stepper.d.ts +161 -0
- package/dist/components/advanced/Stepper.d.ts.map +1 -0
- package/dist/components/advanced/index.d.ts +15 -0
- package/dist/components/advanced/index.d.ts.map +1 -0
- package/dist/components/advanced/index.js +6 -0
- package/dist/components/advanced/index.js.map +1 -0
- package/dist/components/date-picker/DatePicker.d.ts +126 -0
- package/dist/components/date-picker/DatePicker.d.ts.map +1 -0
- package/dist/components/date-picker/index.d.ts +14 -0
- package/dist/components/date-picker/index.d.ts.map +1 -0
- package/dist/components/date-picker/index.js +5 -0
- package/dist/components/date-picker/index.js.map +1 -0
- package/dist/components/form-container/index.d.ts +58 -0
- package/dist/components/form-container/index.d.ts.map +1 -0
- package/dist/components/selection/Checkbox.d.ts.map +1 -0
- package/dist/components/selection/Radio.d.ts.map +1 -0
- package/dist/components/selection/Select.d.ts.map +1 -0
- package/dist/components/selection/index.d.ts +68 -0
- package/dist/components/selection/index.d.ts.map +1 -0
- package/dist/components/selection/index.js +12 -0
- package/dist/components/selection/index.js.map +1 -0
- package/dist/components/text-input/TextField.d.ts.map +1 -0
- package/dist/components/text-input/index.d.ts +8 -0
- package/dist/components/text-input/index.d.ts.map +1 -0
- package/dist/components/text-input/index.js +18 -0
- package/dist/components/text-input/index.js.map +1 -0
- package/dist/{state/index.js → index-D3WfkqVv.js} +15 -8
- package/dist/index-D3WfkqVv.js.map +1 -0
- package/dist/index.d.ts +10 -15
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +198 -376
- package/dist/index.js.map +1 -0
- package/dist/state/index.d.ts.map +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/index.d.ts +19 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/validation/component-validation.d.ts +11 -2
- package/dist/validation/component-validation.d.ts.map +1 -1
- package/dist/validation/index.d.ts.map +1 -1
- package/dist/validation/index.js +282 -191
- package/dist/validation/index.js.map +1 -0
- package/package.json +53 -39
- package/src/components/advanced/Slider.ts +722 -0
- package/src/components/advanced/Stepper.ts +715 -0
- package/src/components/advanced/index.ts +20 -0
- package/src/components/date-picker/DatePicker.ts +925 -0
- package/src/components/date-picker/index.ts +20 -0
- package/src/components/form-container/index.ts +266 -0
- package/src/components/selection/Checkbox.ts +478 -0
- package/src/components/selection/Radio.ts +470 -0
- package/src/components/selection/Select.ts +620 -0
- package/src/components/selection/index.ts +81 -0
- package/src/components/text-input/TextField.ts +728 -0
- package/src/components/text-input/index.ts +35 -0
- package/src/index.ts +48 -0
- package/src/state/index.ts +544 -0
- package/src/types/index.ts +579 -0
- package/src/utils/formatters.ts +184 -0
- package/src/utils/index.ts +57 -0
- package/src/validation/component-validation.ts +429 -0
- package/src/validation/index.ts +641 -0
- package/dist/TextField-CGBM3x7K.js +0 -1799
- package/dist/components/Form.d.ts +0 -76
- package/dist/components/Form.d.ts.map +0 -1
- package/dist/components/index.d.ts +0 -9
- package/dist/components/index.d.ts.map +0 -1
- package/dist/components/index.js +0 -28
- package/dist/components/input/Checkbox.d.ts.map +0 -1
- package/dist/components/input/Radio.d.ts.map +0 -1
- package/dist/components/input/Select.d.ts.map +0 -1
- package/dist/components/input/TextField.d.ts.map +0 -1
- package/dist/components/input/index.d.ts +0 -11
- package/dist/components/input/index.d.ts.map +0 -1
- package/dist/utils/validators.d.ts +0 -101
- package/dist/utils/validators.d.ts.map +0 -1
- /package/dist/components/{input → selection}/Checkbox.d.ts +0 -0
- /package/dist/components/{input → selection}/Radio.d.ts +0 -0
- /package/dist/components/{input → selection}/Select.d.ts +0 -0
- /package/dist/components/{input → text-input}/TextField.d.ts +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Select-yZyKooXk.js","sources":["../src/components/selection/Checkbox.ts","../src/components/selection/Radio.ts","../src/components/selection/Select.ts"],"sourcesContent":["/**\n * Checkbox Component\n *\n * SwiftUI-inspired checkbox with support for indeterminate state,\n * validation, and accessibility features.\n */\n\nimport type { Component, ComponentInstance } from '@tachui/core'\nimport { createEffect, createSignal, h, text } from '@tachui/core'\nimport { createField } from '../../state'\nimport type { CheckboxProps } from '../../types'\n\n/**\n * Checkbox component implementation\n */\nexport const Checkbox: Component<CheckboxProps> = props => {\n const {\n name,\n label,\n disabled = false,\n required = false,\n checked: controlledChecked,\n defaultChecked = false,\n indeterminate = false,\n validation,\n onChange,\n onBlur,\n onFocus,\n error: externalError,\n helperText,\n ...restProps\n } = props\n\n // Get form context if available\n const formContext = (props as any)._formContext\n\n // Create field state\n const field = createField(\n name,\n controlledChecked ?? defaultChecked,\n validation\n )\n\n // Register field with form if form context exists\n if (formContext) {\n formContext.register(name, validation)\n }\n\n const [focused, setFocused] = createSignal(false)\n\n // Sync with controlled value\n if (controlledChecked !== undefined) {\n createEffect(() => {\n if (field.value() !== controlledChecked) {\n field.setValue(controlledChecked)\n }\n })\n }\n\n // Handle checkbox change\n const handleChange = (event: Event) => {\n const target = event.target as HTMLInputElement\n const newChecked = target.checked\n\n field.setValue(newChecked)\n\n if (formContext) {\n formContext.setValue(name, newChecked)\n }\n\n if (onChange) {\n onChange(name, newChecked, field as any)\n }\n }\n\n // Handle focus\n const handleFocus = (_event: Event) => {\n setFocused(true)\n field.onFocus()\n\n if (onFocus) {\n onFocus(name, field.value())\n }\n }\n\n // Handle blur\n const handleBlur = (_event: Event) => {\n setFocused(false)\n field.onBlur()\n\n if (onBlur) {\n onBlur(name, field.value())\n }\n }\n\n // Determine error message\n const errorMessage =\n externalError || field.error() || formContext?.getError(name)\n\n // Handle keyboard interaction for custom styling\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault()\n const checkbox = event.target as HTMLInputElement\n checkbox.checked = !checkbox.checked\n handleChange(event)\n }\n }\n\n const componentInstance: ComponentInstance = {\n type: 'component',\n id: restProps.id || `checkbox-${name}`,\n render: () =>\n h(\n 'div',\n {\n ...restProps,\n class: `tachui-checkbox ${restProps.class || ''}`.trim(),\n 'data-tachui-checkbox-container': true,\n 'data-field-state': errorMessage\n ? 'error'\n : field.validating()\n ? 'validating'\n : 'valid',\n 'data-checked': field.value(),\n 'data-indeterminate': indeterminate,\n 'data-disabled': disabled,\n },\n // Checkbox input and label wrapper\n h(\n 'label',\n {\n 'data-tachui-checkbox-label': true,\n 'data-focused': focused(),\n 'data-disabled': disabled,\n },\n // Hidden native checkbox for accessibility\n h('input', {\n type: 'checkbox',\n id: restProps.id || name,\n name,\n checked: field.value(),\n disabled,\n required,\n onchange: handleChange,\n onfocus: handleFocus,\n onblur: handleBlur,\n onkeydown: handleKeyDown,\n 'aria-invalid': !!errorMessage,\n 'aria-describedby':\n [\n errorMessage ? `${name}-error` : null,\n helperText ? `${name}-helper` : null,\n ]\n .filter(Boolean)\n .join(' ') || undefined,\n 'data-tachui-checkbox-input': true,\n style: {\n position: 'absolute',\n opacity: '0',\n width: '1px',\n height: '1px',\n margin: '-1px',\n padding: '0',\n border: '0',\n clip: 'rect(0,0,0,0)',\n },\n }),\n\n // Custom checkbox visual\n h(\n 'div',\n {\n 'data-tachui-checkbox-visual': true,\n 'data-checked': field.value(),\n 'data-indeterminate': indeterminate,\n 'data-focused': focused(),\n 'data-disabled': disabled,\n 'data-error': !!errorMessage,\n 'aria-hidden': 'true',\n role: 'presentation',\n },\n // Checkmark or indeterminate indicator\n ...(field.value() || indeterminate\n ? [\n h(\n 'div',\n {\n 'data-tachui-checkbox-indicator': true,\n 'data-type': indeterminate ? 'indeterminate' : 'checked',\n },\n text(indeterminate ? '−' : '✓')\n ),\n ]\n : [])\n ),\n\n // Label text\n ...(label\n ? [\n h(\n 'span',\n {\n 'data-tachui-checkbox-text': true,\n 'data-disabled': disabled,\n },\n text(label),\n ...(required\n ? [\n h(\n 'span',\n {\n 'aria-label': 'required',\n 'data-required-indicator': true,\n },\n text(' *')\n ),\n ]\n : [])\n ),\n ]\n : [])\n ),\n\n // Error message\n ...(errorMessage\n ? [\n h(\n 'div',\n {\n id: `${name}-error`,\n role: 'alert',\n 'aria-live': 'polite',\n 'data-tachui-error': true,\n },\n text(errorMessage)\n ),\n ]\n : []),\n\n // Helper text\n ...(helperText && !errorMessage\n ? [\n h(\n 'div',\n {\n id: `${name}-helper`,\n 'data-tachui-helper': true,\n },\n text(helperText)\n ),\n ]\n : []),\n\n // Validation indicator\n ...(field.validating()\n ? [\n h(\n 'div',\n {\n 'data-tachui-validation-spinner': true,\n 'aria-label': 'Validating...',\n },\n text('⏳')\n ),\n ]\n : [])\n ),\n props: props,\n cleanup: [\n () => {\n if (formContext) {\n formContext.unregister(name)\n }\n },\n ],\n }\n\n return componentInstance\n}\n\n/**\n * Switch/Toggle component variant of Checkbox\n */\nexport const Switch: Component<\n CheckboxProps & {\n size?: 'small' | 'medium' | 'large'\n }\n> = props => {\n const { size = 'medium', ...checkboxProps } = props\n\n // Add switch-specific props\n const switchProps = {\n ...checkboxProps,\n class:\n `tachui-switch tachui-switch-${size} ${checkboxProps.class || ''}`.trim(),\n }\n\n const checkbox = Checkbox(switchProps)\n return {\n ...checkbox,\n render: () => {\n const result = checkbox.render()\n if (Array.isArray(result)) {\n return result.map(node => ({\n ...node,\n props: {\n ...node.props,\n 'data-tachui-switch': true,\n 'data-switch-size': size,\n },\n }))\n }\n return {\n ...result,\n props: {\n ...result.props,\n 'data-tachui-switch': true,\n 'data-switch-size': size,\n },\n }\n },\n }\n}\n\n/**\n * CheckboxGroup component for managing multiple related checkboxes\n */\nexport const CheckboxGroup: Component<{\n name: string\n label?: string\n options: Array<{\n value: any\n label: string\n disabled?: boolean\n }>\n value?: any[]\n defaultValue?: any[]\n onChange?: (name: string, value: any[], selected: any) => void\n validation?: any\n error?: string\n helperText?: string\n disabled?: boolean\n required?: boolean\n direction?: 'horizontal' | 'vertical'\n id?: string\n [key: string]: any\n}> = props => {\n const {\n name,\n label,\n options,\n value: controlledValue,\n defaultValue = [],\n onChange,\n validation,\n error,\n helperText,\n disabled = false,\n required = false,\n direction = 'vertical',\n ...restProps\n } = props\n\n // Create field state for the group\n const field = createField(name, controlledValue ?? defaultValue, validation)\n\n // Handle individual checkbox changes\n const handleCheckboxChange = (optionValue: any, checked: boolean) => {\n const currentValue = field.value() || []\n let newValue: any[]\n\n if (checked) {\n newValue = [...currentValue, optionValue]\n } else {\n newValue = currentValue.filter((v: any) => v !== optionValue)\n }\n\n field.setValue(newValue)\n\n if (onChange) {\n onChange(name, newValue, optionValue)\n }\n }\n\n const componentInstance: ComponentInstance = {\n type: 'component',\n id: restProps.id || `checkbox-group-${name}`,\n render: () =>\n h(\n 'fieldset',\n {\n ...restProps,\n 'data-tachui-checkbox-group': true,\n 'data-direction': direction,\n 'data-disabled': disabled,\n },\n // Group label\n ...(label\n ? [\n h(\n 'legend',\n {\n 'data-tachui-group-label': true,\n },\n text(label),\n ...(required\n ? [\n h(\n 'span',\n {\n 'aria-label': 'required',\n 'data-required-indicator': true,\n },\n text(' *')\n ),\n ]\n : [])\n ),\n ]\n : []),\n\n // Checkbox options\n h(\n 'div',\n {\n 'data-tachui-checkbox-options': true,\n 'data-direction': direction,\n },\n ...options.flatMap((option, index) => {\n const checkbox = Checkbox({\n name: `${name}-${index}`,\n label: option.label,\n checked: (field.value() || []).includes(option.value),\n disabled: disabled || option.disabled,\n onChange: (_, checked) =>\n handleCheckboxChange(option.value, checked),\n })\n const result = checkbox.render()\n return Array.isArray(result) ? result : [result]\n })\n ),\n\n // Error message\n ...(error\n ? [\n h(\n 'div',\n {\n id: `${name}-error`,\n role: 'alert',\n 'aria-live': 'polite',\n 'data-tachui-error': true,\n },\n text(error)\n ),\n ]\n : []),\n\n // Helper text\n ...(helperText && !error\n ? [\n h(\n 'div',\n {\n id: `${name}-helper`,\n 'data-tachui-helper': true,\n },\n text(helperText)\n ),\n ]\n : [])\n ),\n props: props,\n }\n\n return componentInstance\n}\n","/**\n * Radio Button Component\n *\n * SwiftUI-inspired radio button with group management,\n * validation, and comprehensive accessibility support.\n */\n\nimport type { Component, ComponentInstance } from '@tachui/core'\nimport { createEffect, createSignal, h, text } from '@tachui/core'\nimport { createField } from '../../state'\nimport type { RadioProps } from '../../types'\n\n/**\n * Individual Radio component\n */\nexport const Radio: Component<RadioProps> = props => {\n const {\n name,\n value,\n label,\n checked: controlledChecked,\n groupName,\n disabled = false,\n required = false,\n validation,\n onChange,\n onBlur,\n onFocus,\n error: externalError,\n helperText,\n ...restProps\n } = props\n\n // Get form context if available\n const formContext = (props as any)._formContext\n\n // For radio buttons, we use the group name or the name\n const fieldName = groupName || name\n\n // Create field state (shared across radio group)\n const field = createField(\n fieldName,\n controlledChecked ? value : undefined,\n validation\n )\n\n // Register field with form if form context exists\n if (formContext) {\n formContext.register(fieldName, validation)\n }\n\n const [focused, setFocused] = createSignal(false)\n\n // Determine if this radio is checked\n const isChecked = () => field.value() === value\n\n // Handle radio change\n const handleChange = (event: Event) => {\n const target = event.target as HTMLInputElement\n\n if (target.checked) {\n field.setValue(value)\n\n if (formContext) {\n formContext.setValue(fieldName, value)\n }\n\n if (onChange) {\n onChange(fieldName, value, field as any)\n }\n }\n }\n\n // Handle focus\n const handleFocus = (_event: Event) => {\n setFocused(true)\n field.onFocus()\n\n if (onFocus) {\n onFocus(fieldName, field.value())\n }\n }\n\n // Handle blur\n const handleBlur = (_event: Event) => {\n setFocused(false)\n field.onBlur()\n\n if (onBlur) {\n onBlur(fieldName, field.value())\n }\n }\n\n // Determine error message\n const errorMessage =\n externalError || field.error() || formContext?.getError(fieldName)\n\n // Handle keyboard interaction\n const handleKeyDown = (event: KeyboardEvent) => {\n // Arrow keys for radio group navigation would be handled at the group level\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault()\n handleChange(event)\n }\n }\n\n const componentInstance: ComponentInstance = {\n type: 'component',\n id: restProps.id || `radio-${fieldName}-${value}`,\n render: () =>\n h(\n 'div',\n {\n ...restProps,\n class: `tachui-radio ${restProps.class || ''}`.trim(),\n 'data-tachui-radio-container': true,\n 'data-field-state': errorMessage\n ? 'error'\n : field.validating()\n ? 'validating'\n : 'valid',\n 'data-checked': isChecked(),\n 'data-disabled': disabled,\n },\n // Radio input and label wrapper\n h(\n 'label',\n {\n 'data-tachui-radio-label': true,\n 'data-focused': focused(),\n 'data-disabled': disabled,\n },\n // Hidden native radio for accessibility\n h('input', {\n type: 'radio',\n id: restProps.id || `${fieldName}-${value}`,\n name: fieldName,\n value: value,\n checked: isChecked(),\n disabled,\n required,\n onchange: handleChange,\n onfocus: handleFocus,\n onblur: handleBlur,\n onkeydown: handleKeyDown,\n 'aria-invalid': !!errorMessage,\n 'aria-describedby':\n [\n errorMessage ? `${fieldName}-error` : null,\n helperText ? `${fieldName}-helper` : null,\n ]\n .filter(Boolean)\n .join(' ') || undefined,\n 'data-tachui-radio-input': true,\n style: {\n position: 'absolute',\n opacity: '0',\n width: '1px',\n height: '1px',\n margin: '-1px',\n padding: '0',\n border: '0',\n clip: 'rect(0,0,0,0)',\n },\n }),\n\n // Custom radio visual\n h(\n 'div',\n {\n 'data-tachui-radio-visual': true,\n 'data-checked': isChecked(),\n 'data-focused': focused(),\n 'data-disabled': disabled,\n 'data-error': !!errorMessage,\n 'aria-hidden': 'true',\n role: 'presentation',\n },\n // Radio dot indicator\n ...(isChecked()\n ? [\n h('div', {\n 'data-tachui-radio-dot': true,\n }),\n ]\n : [])\n ),\n\n // Label text\n ...(label\n ? [\n h(\n 'span',\n {\n 'data-tachui-radio-text': true,\n 'data-disabled': disabled,\n },\n text(label),\n ...(required\n ? [\n h(\n 'span',\n {\n 'aria-label': 'required',\n 'data-required-indicator': true,\n },\n text(' *')\n ),\n ]\n : [])\n ),\n ]\n : [])\n )\n ),\n props: props,\n cleanup: [\n () => {\n // Only unregister if this is the last radio in the group\n // This would need more sophisticated group management\n // For now, we let the form handle cleanup\n },\n ],\n }\n\n return componentInstance\n}\n\n/**\n * RadioGroup component for managing multiple radio buttons\n */\nexport const RadioGroup: Component<{\n name: string\n label?: string\n options: Array<{\n value: any\n label: string\n disabled?: boolean\n }>\n value?: any\n defaultValue?: any\n onChange?: (name: string, value: any) => void\n validation?: any\n error?: string\n helperText?: string\n disabled?: boolean\n required?: boolean\n direction?: 'horizontal' | 'vertical'\n id?: string\n [key: string]: any\n}> = props => {\n const {\n name,\n label,\n options,\n value: controlledValue,\n defaultValue,\n onChange,\n validation,\n error,\n helperText,\n disabled = false,\n required = false,\n direction = 'vertical',\n ...restProps\n } = props\n\n // Get form context if available\n const formContext = (props as any)._formContext\n\n // Create field state for the group\n const field = createField(name, controlledValue ?? defaultValue, validation)\n\n // Register field with form if form context exists\n if (formContext) {\n formContext.register(name, validation)\n }\n\n // Sync with controlled value\n if (controlledValue !== undefined) {\n createEffect(() => {\n if (field.value() !== controlledValue) {\n field.setValue(controlledValue)\n }\n })\n }\n\n // Handle radio selection change\n const handleRadioChange = (optionValue: any) => {\n field.setValue(optionValue)\n\n if (formContext) {\n formContext.setValue(name, optionValue)\n }\n\n if (onChange) {\n onChange(name, optionValue)\n }\n }\n\n // Keyboard navigation for radio group\n const handleKeyDown = (event: KeyboardEvent) => {\n const currentIndex = options.findIndex(opt => opt.value === field.value())\n let nextIndex = currentIndex\n\n switch (event.key) {\n case 'ArrowDown':\n case 'ArrowRight':\n event.preventDefault()\n nextIndex = (currentIndex + 1) % options.length\n break\n case 'ArrowUp':\n case 'ArrowLeft':\n event.preventDefault()\n nextIndex = currentIndex === 0 ? options.length - 1 : currentIndex - 1\n break\n case 'Home':\n event.preventDefault()\n nextIndex = 0\n break\n case 'End':\n event.preventDefault()\n nextIndex = options.length - 1\n break\n default:\n return\n }\n\n // Skip disabled options\n while (options[nextIndex]?.disabled) {\n if (event.key === 'ArrowDown' || event.key === 'ArrowRight') {\n nextIndex = (nextIndex + 1) % options.length\n } else {\n nextIndex = nextIndex === 0 ? options.length - 1 : nextIndex - 1\n }\n\n // Prevent infinite loop\n if (nextIndex === currentIndex) break\n }\n\n if (!options[nextIndex]?.disabled) {\n handleRadioChange(options[nextIndex].value)\n\n // Focus the newly selected radio\n setTimeout(() => {\n const radioInput = document.querySelector(\n `input[name=\"${name}\"][value=\"${options[nextIndex].value}\"]`\n ) as HTMLInputElement\n if (radioInput) {\n radioInput.focus()\n }\n }, 0)\n }\n }\n\n const errorMessage = error || field.error()\n\n const componentInstance: ComponentInstance = {\n type: 'component',\n id: restProps.id || `radio-group-${name}`,\n render: () =>\n h(\n 'fieldset',\n {\n ...restProps,\n 'data-tachui-radio-group': true,\n 'data-direction': direction,\n 'data-disabled': disabled,\n role: 'radiogroup',\n 'aria-invalid': !!errorMessage,\n 'aria-describedby':\n [\n errorMessage ? `${name}-error` : null,\n helperText ? `${name}-helper` : null,\n ]\n .filter(Boolean)\n .join(' ') || undefined,\n onkeydown: handleKeyDown,\n },\n // Group label\n ...(label\n ? [\n h(\n 'legend',\n {\n 'data-tachui-group-label': true,\n },\n text(label),\n ...(required\n ? [\n h(\n 'span',\n {\n 'aria-label': 'required',\n 'data-required-indicator': true,\n },\n text(' *')\n ),\n ]\n : [])\n ),\n ]\n : []),\n\n // Radio options\n h(\n 'div',\n {\n 'data-tachui-radio-options': true,\n 'data-direction': direction,\n },\n ...options.flatMap((option, index) => {\n const radio = Radio({\n name: `${name}-${index}`,\n groupName: name,\n value: option.value,\n label: option.label,\n checked: field.value() === option.value,\n disabled: disabled || option.disabled,\n required,\n onChange: () => handleRadioChange(option.value),\n _formContext: formContext,\n })\n const result = radio.render()\n return Array.isArray(result) ? result : [result]\n })\n ),\n\n // Error message\n ...(errorMessage\n ? [\n h(\n 'div',\n {\n id: `${name}-error`,\n role: 'alert',\n 'aria-live': 'polite',\n 'data-tachui-error': true,\n },\n text(errorMessage)\n ),\n ]\n : []),\n\n // Helper text\n ...(helperText && !errorMessage\n ? [\n h(\n 'div',\n {\n id: `${name}-helper`,\n 'data-tachui-helper': true,\n },\n text(helperText)\n ),\n ]\n : [])\n ),\n props: props,\n cleanup: [\n () => {\n if (formContext) {\n formContext.unregister(name)\n }\n },\n ],\n }\n\n return componentInstance\n}\n","/**\n * Select/Picker Component\n *\n * SwiftUI-inspired select component with search, multiple selection,\n * async options loading, and comprehensive accessibility support.\n */\n\nimport type { Component, ComponentInstance } from '@tachui/core'\nimport {\n createEffect,\n createSignal,\n h,\n text,\n useLifecycle,\n setupOutsideClickDetection,\n} from '@tachui/core'\nimport { createField } from '../../state'\nimport type { SelectOption, SelectProps } from '../../types'\n\n/**\n * Select component implementation\n */\nexport const Select: Component<SelectProps> = props => {\n const {\n name,\n label,\n options,\n multiple = false,\n searchable = false,\n clearable = false,\n placeholder = multiple ? 'Select options...' : 'Select an option...',\n noOptionsMessage = 'No options available',\n loadingMessage = 'Loading...',\n maxMenuHeight = 200,\n disabled = false,\n required = false,\n value: controlledValue,\n defaultValue,\n validation,\n onChange,\n onBlur,\n onFocus,\n error: externalError,\n helperText,\n ...restProps\n } = props\n\n // Get form context if available\n const formContext = (props as any)._formContext\n\n // Create field state\n const field = createField(name, controlledValue ?? defaultValue, validation)\n\n // Register field with form if form context exists\n if (formContext) {\n formContext.register(name, validation)\n }\n\n const [isOpen, setIsOpen] = createSignal(false)\n const [focused, setFocused] = createSignal(false)\n const [searchQuery, setSearchQuery] = createSignal('')\n const [highlightedIndex, setHighlightedIndex] = createSignal(-1)\n const [loading] = createSignal(false)\n\n // Sync with controlled value\n if (controlledValue !== undefined) {\n createEffect(() => {\n if (field.value() !== controlledValue) {\n field.setValue(controlledValue)\n }\n })\n }\n\n // Filter options based on search query\n const filteredOptions = () => {\n if (!searchable || !searchQuery()) {\n return options\n }\n\n const query = searchQuery().toLowerCase()\n return options.filter(\n option =>\n option.label.toLowerCase().includes(query) ||\n String(option.value).toLowerCase().includes(query)\n )\n }\n\n // Get display value for selected option(s)\n const getDisplayValue = () => {\n const value = field.value()\n\n if (multiple) {\n if (!value || !Array.isArray(value) || value.length === 0) {\n return placeholder\n }\n\n const selectedOptions = options.filter(opt => value.includes(opt.value))\n return selectedOptions.map(opt => opt.label).join(', ')\n } else {\n if (value === null || value === undefined || value === '') {\n return placeholder\n }\n\n const selectedOption = options.find(opt => opt.value === value)\n return selectedOption ? selectedOption.label : String(value)\n }\n }\n\n // Handle option selection\n const handleOptionSelect = (option: SelectOption) => {\n if (option.disabled) return\n\n let newValue: any\n\n if (multiple) {\n const currentValue = field.value() || []\n if (currentValue.includes(option.value)) {\n newValue = currentValue.filter((v: any) => v !== option.value)\n } else {\n newValue = [...currentValue, option.value]\n }\n } else {\n newValue = option.value\n setIsOpen(false)\n setSearchQuery('')\n }\n\n field.setValue(newValue)\n\n if (formContext) {\n formContext.setValue(name, newValue)\n }\n\n if (onChange) {\n onChange(name, newValue, field as any)\n }\n }\n\n // Handle dropdown toggle\n const toggleDropdown = () => {\n if (disabled) return\n\n const newOpen = !isOpen()\n setIsOpen(newOpen)\n\n if (newOpen) {\n setHighlightedIndex(-1)\n if (searchable) {\n setSearchQuery('')\n }\n }\n }\n\n // Handle search input\n const handleSearch = (event: Event) => {\n const target = event.target as HTMLInputElement\n setSearchQuery(target.value)\n setHighlightedIndex(-1)\n }\n\n // Handle keyboard navigation\n const handleKeyDown = (event: KeyboardEvent) => {\n const filtered = filteredOptions()\n\n switch (event.key) {\n case 'Enter':\n event.preventDefault()\n if (!isOpen()) {\n toggleDropdown()\n } else if (highlightedIndex() >= 0 && filtered[highlightedIndex()]) {\n handleOptionSelect(filtered[highlightedIndex()])\n }\n break\n\n case ' ':\n if (!searchable || !isOpen()) {\n event.preventDefault()\n toggleDropdown()\n }\n break\n\n case 'Escape':\n event.preventDefault()\n setIsOpen(false)\n setSearchQuery('')\n break\n\n case 'ArrowDown':\n event.preventDefault()\n if (!isOpen()) {\n toggleDropdown()\n } else {\n const nextIndex = Math.min(\n highlightedIndex() + 1,\n filtered.length - 1\n )\n setHighlightedIndex(nextIndex)\n }\n break\n\n case 'ArrowUp':\n event.preventDefault()\n if (isOpen()) {\n const prevIndex = Math.max(highlightedIndex() - 1, -1)\n setHighlightedIndex(prevIndex)\n }\n break\n\n case 'Home':\n if (isOpen()) {\n event.preventDefault()\n setHighlightedIndex(0)\n }\n break\n\n case 'End':\n if (isOpen()) {\n event.preventDefault()\n setHighlightedIndex(filtered.length - 1)\n }\n break\n\n case 'Backspace':\n if (clearable && !searchable && field.value() !== null) {\n event.preventDefault()\n handleClear()\n }\n break\n }\n }\n\n // Handle focus\n const handleFocus = () => {\n setFocused(true)\n field.onFocus()\n\n if (onFocus) {\n onFocus(name, field.value())\n }\n }\n\n // Handle blur\n const handleBlur = (event: FocusEvent) => {\n // ENHANCED: Use requestAnimationFrame instead of setTimeout for better performance\n requestAnimationFrame(() => {\n const relatedTarget = event.relatedTarget as Element\n const container = (event.target as Element).closest(\n '[data-tachui-select-container]'\n )\n\n if (!container?.contains(relatedTarget)) {\n setFocused(false)\n setIsOpen(false)\n field.onBlur()\n\n if (onBlur) {\n onBlur(name, field.value())\n }\n }\n })\n }\n\n // Handle clear\n const handleClear = () => {\n const newValue = multiple ? [] : null\n field.setValue(newValue)\n\n if (formContext) {\n formContext.setValue(name, newValue)\n }\n\n if (onChange) {\n onChange(name, newValue, field as any)\n }\n }\n\n // Check if option is selected\n const isOptionSelected = (option: SelectOption) => {\n const value = field.value()\n\n if (multiple) {\n return Array.isArray(value) && value.includes(option.value)\n }\n\n return value === option.value\n }\n\n // Determine error message\n const errorMessage =\n externalError || field.error() || formContext?.getError(name)\n\n const componentInstance: ComponentInstance = {\n type: 'component',\n id: restProps.id || `select-${name}`,\n cleanup: [],\n render: () => ({\n type: 'element',\n tag: 'div',\n props: {\n ...restProps,\n class: `tachui-select ${restProps.class || ''}`.trim(),\n 'data-tachui-select-container': true,\n 'data-field-state': errorMessage\n ? 'error'\n : field.validating()\n ? 'validating'\n : 'valid',\n 'data-open': isOpen(),\n 'data-disabled': disabled,\n 'data-multiple': multiple,\n 'data-searchable': searchable,\n },\n children: [\n // Label\n ...(label\n ? [\n h(\n 'label',\n {\n for: restProps.id || name,\n 'data-tachui-label': true,\n 'data-required': required,\n },\n text(label),\n ...(required\n ? [\n h(\n 'span',\n {\n 'aria-label': 'required',\n 'data-required-indicator': true,\n },\n text(' *')\n ),\n ]\n : [])\n ),\n ]\n : []),\n\n // Select trigger\n {\n type: 'element' as const,\n tag: 'div',\n props: {\n id: restProps.id || name,\n tabindex: disabled ? -1 : 0,\n role: 'combobox',\n 'aria-expanded': isOpen(),\n 'aria-haspopup': 'listbox',\n 'aria-invalid': !!errorMessage,\n 'aria-describedby':\n [\n errorMessage ? `${name}-error` : null,\n helperText ? `${name}-helper` : null,\n ]\n .filter(Boolean)\n .join(' ') || undefined,\n onclick: toggleDropdown,\n onkeydown: handleKeyDown,\n onfocus: handleFocus,\n onblur: handleBlur,\n 'data-tachui-select-trigger': true,\n 'data-focused': focused(),\n 'data-disabled': disabled,\n 'data-error': !!errorMessage,\n },\n children: [\n // Display value\n {\n type: 'element' as const,\n tag: 'div',\n props: {\n 'data-tachui-select-value': true,\n 'data-placeholder':\n !field.value() ||\n (multiple && (!field.value() || field.value().length === 0)),\n },\n children: [text(getDisplayValue())],\n },\n\n // Actions (clear, dropdown arrow)\n {\n type: 'element' as const,\n tag: 'div',\n props: {\n 'data-tachui-select-actions': true,\n },\n children: [\n // Clear button\n ...(clearable &&\n field.value() &&\n (!multiple ||\n (Array.isArray(field.value()) && field.value().length > 0))\n ? [\n {\n type: 'element' as const,\n tag: 'button',\n props: {\n type: 'button',\n onclick: (e: Event) => {\n e.stopPropagation()\n handleClear()\n },\n 'aria-label': 'Clear selection',\n 'data-tachui-select-clear': true,\n },\n children: [text('×')],\n },\n ]\n : []),\n\n // Dropdown arrow\n {\n type: 'element' as const,\n tag: 'div',\n props: {\n 'data-tachui-select-arrow': true,\n 'data-open': isOpen(),\n },\n children: [text('▼')],\n },\n ],\n },\n ],\n },\n\n // Dropdown menu\n ...(isOpen()\n ? [\n {\n type: 'element' as const,\n tag: 'div',\n props: {\n 'data-tachui-select-dropdown': true,\n style: {\n maxHeight: `${maxMenuHeight}px`,\n },\n },\n children: [\n // Search input\n ...(searchable\n ? [\n {\n type: 'element' as const,\n tag: 'div',\n props: {\n 'data-tachui-select-search': true,\n },\n children: [\n {\n type: 'element' as const,\n tag: 'input',\n props: {\n type: 'text',\n placeholder: 'Search...',\n value: searchQuery(),\n oninput: handleSearch,\n 'data-tachui-select-search-input': true,\n },\n },\n ],\n },\n ]\n : []),\n\n // Options list\n {\n type: 'element' as const,\n tag: 'div',\n props: {\n role: 'listbox',\n 'aria-multiselectable': multiple,\n 'data-tachui-select-options': true,\n },\n children:\n filteredOptions().length > 0\n ? filteredOptions().map((option, index) => ({\n type: 'element' as const,\n tag: 'div',\n props: {\n role: 'option',\n 'aria-selected': isOptionSelected(option),\n 'aria-disabled': option.disabled,\n onclick: () => handleOptionSelect(option),\n 'data-tachui-select-option': true,\n 'data-selected': isOptionSelected(option),\n 'data-highlighted': highlightedIndex() === index,\n 'data-disabled': option.disabled,\n 'data-group': option.group,\n },\n children: [\n // Selection indicator for multiple\n ...(multiple\n ? [\n {\n type: 'element' as const,\n tag: 'div',\n props: {\n 'data-tachui-select-checkbox': true,\n 'data-checked':\n isOptionSelected(option),\n },\n children: [\n text(\n isOptionSelected(option) ? '✓' : ''\n ),\n ],\n },\n ]\n : []),\n\n // Option label\n text(option.label),\n ],\n }))\n : [\n {\n type: 'element' as const,\n tag: 'div',\n props: {\n 'data-tachui-select-no-options': true,\n },\n children: [\n text(\n loading() ? loadingMessage : noOptionsMessage\n ),\n ],\n },\n ],\n },\n ],\n },\n ]\n : []),\n\n // Error message\n ...(errorMessage\n ? [\n {\n type: 'element' as const,\n tag: 'div',\n props: {\n id: `${name}-error`,\n role: 'alert',\n 'aria-live': 'polite',\n 'data-tachui-error': true,\n },\n children: [text(errorMessage)],\n },\n ]\n : []),\n\n // Helper text\n ...(helperText && !errorMessage\n ? [\n {\n type: 'element' as const,\n tag: 'div',\n props: {\n id: `${name}-helper`,\n 'data-tachui-helper': true,\n },\n children: [text(helperText)],\n },\n ]\n : []),\n ],\n }),\n props: props,\n }\n\n // Add form cleanup\n if (!componentInstance.cleanup) componentInstance.cleanup = []\n componentInstance.cleanup.push(() => {\n if (formContext) {\n formContext.unregister(name)\n }\n })\n\n // ENHANCED: Set up lifecycle hooks for improved click outside detection\n useLifecycle(componentInstance, {\n onDOMReady: (_elements, primaryElement) => {\n if (primaryElement) {\n // Set up enhanced outside click detection instead of relying on setTimeout blur\n setupOutsideClickDetection(\n componentInstance,\n () => {\n if (isOpen()) {\n setIsOpen(false)\n setFocused(false)\n field.onBlur()\n\n if (onBlur) {\n onBlur(name, field.value())\n }\n }\n },\n '[data-tachui-select-container]'\n )\n }\n },\n })\n\n return componentInstance\n}\n\n/**\n * MultiSelect variant for clearer multiple selection intent\n */\nexport const MultiSelect: Component<SelectProps> = props => {\n return Select({ ...props, multiple: true })\n}\n\n/**\n * Combobox variant with always-searchable behavior\n */\nexport const Combobox: Component<SelectProps> = props => {\n return Select({ ...props, searchable: true })\n}\n"],"names":["Checkbox","props","name","label","disabled","required","controlledChecked","defaultChecked","indeterminate","validation","onChange","onBlur","onFocus","externalError","helperText","restProps","formContext","field","createField","focused","setFocused","createSignal","createEffect","handleChange","event","newChecked","handleFocus","_event","handleBlur","errorMessage","handleKeyDown","checkbox","h","text","Switch","size","checkboxProps","switchProps","result","node","CheckboxGroup","options","controlledValue","defaultValue","error","direction","handleCheckboxChange","optionValue","checked","currentValue","newValue","v","option","index","_","Radio","value","groupName","fieldName","isChecked","RadioGroup","handleRadioChange","currentIndex","opt","nextIndex","radioInput","Select","multiple","searchable","clearable","placeholder","noOptionsMessage","loadingMessage","maxMenuHeight","isOpen","setIsOpen","searchQuery","setSearchQuery","highlightedIndex","setHighlightedIndex","loading","filteredOptions","query","getDisplayValue","selectedOption","handleOptionSelect","toggleDropdown","newOpen","handleSearch","target","filtered","prevIndex","handleClear","relatedTarget","isOptionSelected","componentInstance","e","useLifecycle","_elements","primaryElement","setupOutsideClickDetection","MultiSelect","Combobox"],"mappings":"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"}
|