inconel 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../src/components/FieldFeedback/FieldFeedback.tsx","../src/components/Input/constants.ts","../src/components/Input/utils.ts","../src/components/Input/Input.tsx","../src/components/Select/Select.tsx","../src/components/Textarea/Textarea.tsx"],"sourcesContent":["import type { ReactNode } from 'react'\n\nexport interface FieldFeedbackContentProps {\n hint?: ReactNode\n errorMessage?: ReactNode\n}\n\nexport interface FieldFeedbackProps extends FieldFeedbackContentProps {\n hintId: string\n errorId: string\n className?: string\n}\n\nfunction FieldFeedback({\n hint,\n errorMessage,\n hintId,\n errorId,\n className,\n}: FieldFeedbackProps) {\n if (errorMessage) {\n return (\n <p\n id={errorId}\n className={['inconel-field-feedback', 'is-error', className ?? ''].join(\n ' ',\n )}\n role=\"alert\"\n >\n {errorMessage}\n </p>\n )\n }\n\n if (hint) {\n return (\n <p\n id={hintId}\n className={['inconel-field-feedback', 'is-hint', className ?? ''].join(\n ' ',\n )}\n >\n {hint}\n </p>\n )\n }\n\n return null\n}\n\nexport default FieldFeedback\n","export const FORMATTED_INPUT_TYPES = [\n 'number',\n 'currency',\n 'percent',\n] as const\n\nexport const LENGTH_VALIDATED_INPUT_TYPES = [\n 'text',\n 'email',\n 'password',\n] as const\n","import {\n FORMATTED_INPUT_TYPES,\n LENGTH_VALIDATED_INPUT_TYPES,\n} from './constants'\nimport type {\n InputRoundMode,\n InputType,\n InputValidationMessages,\n InputValue,\n} from './Input'\n\nexport interface InputValidationOptions {\n required: boolean\n type: InputType\n min?: number\n max?: number\n mask?: string\n messages: InputValidationMessages\n}\n\nexport function isFormattedInputType(type: InputType) {\n return FORMATTED_INPUT_TYPES.some((candidate) => candidate === type)\n}\n\nexport function isLengthValidatedInputType(type: InputType) {\n return LENGTH_VALIDATED_INPUT_TYPES.some((candidate) => candidate === type)\n}\n\nexport function getInputSeparators(locale: string) {\n const parts = new Intl.NumberFormat(locale).formatToParts(1000.1)\n return {\n group: parts.find((part) => part.type === 'group')?.value ?? '.',\n decimal: parts.find((part) => part.type === 'decimal')?.value ?? ',',\n }\n}\n\nexport function parseInputNumber(value: string, locale: string): number | null {\n if (!value || value === '-') return null\n const { group, decimal } = getInputSeparators(locale)\n const normalized = value.split(group).join('').replace(decimal, '.')\n const result = Number(normalized)\n return Number.isNaN(result) ? null : result\n}\n\nexport function roundInputNumber(\n value: number,\n scale: number,\n mode: InputRoundMode,\n) {\n const factor = 10 ** scale\n if (mode === 'ceil') return Math.ceil(value * factor) / factor\n if (mode === 'round') return Math.round(value * factor) / factor\n return value >= 0\n ? Math.floor(value * factor) / factor\n : Math.ceil(value * factor) / factor\n}\n\nexport function applyInputMask(value: InputValue, mask: string) {\n const digits = String(value ?? '').replace(/\\D/g, '')\n let index = 0\n let result = ''\n\n for (const character of mask) {\n if (character === 'X') {\n if (index >= digits.length) break\n result += digits[index++]\n } else if (index < digits.length) {\n result += character\n }\n }\n\n return result\n}\n\nexport function formatInputValue(\n value: InputValue,\n type: InputType,\n locale: string,\n decimalScale: number,\n currency: string,\n mask?: string,\n) {\n if (value === null || value === undefined || value === '') return ''\n if (type === 'phone' && mask) return applyInputMask(value, mask)\n if (!isFormattedInputType(type)) return String(value)\n if (typeof value !== 'number' || Number.isNaN(value)) return String(value)\n\n return new Intl.NumberFormat(locale, {\n style:\n type === 'currency'\n ? 'currency'\n : type === 'percent'\n ? 'percent'\n : 'decimal',\n currency: type === 'currency' ? currency : undefined,\n minimumFractionDigits: decimalScale,\n maximumFractionDigits: decimalScale,\n }).format(value)\n}\n\nexport function validateInputValue(\n candidate: InputValue,\n {\n required,\n type,\n min,\n max,\n mask,\n messages,\n }: InputValidationOptions,\n) {\n if (\n required &&\n (candidate === null || candidate === undefined || candidate === '')\n ) {\n return messages.required ?? null\n }\n if (candidate === null || candidate === undefined || candidate === '') {\n return null\n }\n if (\n type === 'email' &&\n !/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(String(candidate))\n ) {\n return messages.invalidEmail ?? null\n }\n if (type === 'phone') {\n const digits = String(candidate).replace(/\\D/g, '')\n const expected = mask\n ? (mask.match(/X/g) ?? []).length\n : digits.startsWith('0')\n ? 11\n : 10\n if (digits.length !== expected) return messages.invalidPhone ?? null\n }\n if (isLengthValidatedInputType(type)) {\n if (typeof min === 'number' && String(candidate).length < min) {\n return messages.minLength?.replace('{min}', String(min)) ?? null\n }\n if (typeof max === 'number' && String(candidate).length > max) {\n return messages.maxLength?.replace('{max}', String(max)) ?? null\n }\n }\n if (isFormattedInputType(type)) {\n if (typeof candidate !== 'number' || Number.isNaN(candidate)) {\n return messages.invalidNumber ?? null\n }\n if (typeof min === 'number' && candidate < min) {\n return messages.minNumber?.replace('{min}', String(min)) ?? null\n }\n if (typeof max === 'number' && candidate > max) {\n return messages.maxNumber?.replace('{max}', String(max)) ?? null\n }\n }\n return null\n}\n","import {\n forwardRef,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type FocusEvent,\n type InputHTMLAttributes,\n type KeyboardEvent,\n type MouseEvent,\n type ReactNode,\n} from 'react'\n\nimport FieldFeedback from '../FieldFeedback/FieldFeedback'\nimport type { FieldFeedbackContentProps } from '../FieldFeedback/FieldFeedback'\nimport {\n applyInputMask,\n formatInputValue,\n getInputSeparators,\n isFormattedInputType,\n isLengthValidatedInputType,\n parseInputNumber,\n roundInputNumber,\n validateInputValue,\n} from './utils'\n\nexport type InputType =\n | 'text'\n | 'number'\n | 'currency'\n | 'percent'\n | 'phone'\n | 'email'\n | 'password'\n\nexport type InputRoundMode = 'ceil' | 'floor' | 'round'\nexport type InputValue = string | number | null\nexport type InputEventType =\n | 'change'\n | 'blur'\n | 'focus'\n | 'keydown'\n | 'mouseenter'\n | 'mouseleave'\n | 'clear'\n\nexport interface InputPayload {\n rawValue: InputValue\n formattedValue: string\n error: boolean\n char: string | null\n eventType: InputEventType\n}\n\nexport interface InputValidationMessages {\n required?: string\n invalidNumber?: string\n minNumber?: string\n maxNumber?: string\n minLength?: string\n maxLength?: string\n invalidPhone?: string\n invalidEmail?: string\n}\n\ntype NativeInputProps = Omit<\n InputHTMLAttributes<HTMLInputElement>,\n | 'type'\n | 'value'\n | 'defaultValue'\n | 'onChange'\n | 'onBlur'\n | 'onFocus'\n | 'onKeyDown'\n | 'onMouseEnter'\n | 'onMouseLeave'\n | 'min'\n | 'max'\n | 'size'\n | 'readOnly'\n>\n\nexport interface InputProps extends NativeInputProps, FieldFeedbackContentProps {\n label?: string\n startAdornment?: ReactNode\n endAdornment?: ReactNode\n fullWidth?: boolean\n inputClassName?: string\n labelClassName?: string\n value?: InputValue\n defaultValue?: InputValue\n onChange?: (payload: InputPayload) => void\n onBlur?: (payload: InputPayload, event: FocusEvent<HTMLInputElement>) => void\n onFocus?: (payload: InputPayload, event: FocusEvent<HTMLInputElement>) => void\n onKeyDown?: (\n payload: InputPayload,\n event: KeyboardEvent<HTMLInputElement>,\n ) => void\n onMouseEnter?: (\n payload: InputPayload,\n event: MouseEvent<HTMLInputElement>,\n ) => void\n onMouseLeave?: (\n payload: InputPayload,\n event: MouseEvent<HTMLInputElement>,\n ) => void\n type?: InputType\n locale?: string\n currency?: string\n decimalScale?: number\n roundMode?: InputRoundMode\n roundOnBlur?: boolean\n min?: number\n max?: number\n allowNegative?: boolean\n debounceMs?: number\n validateOnSubmit?: boolean\n validationMessages?: InputValidationMessages\n mask?: string\n limit?: number\n isClearable?: boolean\n readOnly?: boolean\n clearButtonLabel?: string\n readOnlyEmptyValue?: ReactNode\n}\n\nconst Input = forwardRef<HTMLInputElement, InputProps>(function Input(\n {\n id,\n label,\n hint,\n errorMessage,\n startAdornment,\n endAdornment,\n fullWidth = false,\n inputClassName,\n labelClassName,\n className,\n required,\n disabled,\n value,\n defaultValue = '',\n onChange,\n onBlur,\n onFocus,\n onKeyDown,\n onMouseEnter,\n onMouseLeave,\n type = 'text',\n locale = 'tr-TR',\n currency = 'TRY',\n decimalScale = 0,\n roundMode = 'floor',\n roundOnBlur = false,\n min,\n max,\n allowNegative = false,\n debounceMs = 0,\n validateOnSubmit = false,\n validationMessages,\n mask,\n limit,\n isClearable = false,\n readOnly = false,\n clearButtonLabel,\n readOnlyEmptyValue = null,\n autoComplete = 'off',\n 'aria-describedby': ariaDescribedBy,\n ...inputProps\n },\n ref,\n) {\n const generatedId = useId()\n const inputId = id ?? `inconel-input-${generatedId.replace(/:/g, '')}`\n const hintId = `${inputId}-hint`\n const errorId = `${inputId}-error`\n const controlled = value !== undefined\n const [localValue, setLocalValue] = useState<InputValue>(defaultValue)\n const currentValue = controlled ? value : localValue\n const [editingValue, setEditingValue] = useState('')\n const [focused, setFocused] = useState(false)\n const [validationError, setValidationError] = useState<string | null>(null)\n const debounceRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n const messages = validationMessages ?? {}\n const visibleError = errorMessage ?? validationError\n\n const validate = (candidate: InputValue) =>\n validateInputValue(candidate, {\n required: Boolean(required),\n type,\n min,\n max,\n mask,\n messages,\n })\n\n const formattedValue = useMemo(\n () =>\n formatInputValue(\n currentValue,\n type,\n locale,\n decimalScale,\n currency,\n mask,\n ),\n [currentValue, currency, decimalScale, locale, mask, type],\n )\n\n const buildPayload = (\n rawValue: InputValue,\n eventType: InputEventType,\n char: string | null = null,\n ): InputPayload => ({\n rawValue,\n formattedValue: formatInputValue(\n rawValue,\n type,\n locale,\n decimalScale,\n currency,\n mask,\n ),\n error: Boolean(validate(rawValue)),\n char,\n eventType,\n })\n\n const emitChange = (payload: InputPayload, immediate = false) => {\n if (!controlled) setLocalValue(payload.rawValue)\n if (debounceRef.current) clearTimeout(debounceRef.current)\n if (!onChange) return\n if (immediate || debounceMs <= 0) onChange(payload)\n else debounceRef.current = setTimeout(() => onChange(payload), debounceMs)\n }\n\n useEffect(() => () => {\n if (debounceRef.current) clearTimeout(debounceRef.current)\n }, [])\n\n useEffect(() => {\n if (validateOnSubmit) setValidationError(validate(currentValue))\n // Validation intentionally runs when submit state changes.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [validateOnSubmit])\n\n const normalize = (text: string): InputValue => {\n if (type === 'phone' && mask) return text.replace(/\\D/g, '')\n if (isFormattedInputType(type)) {\n const parsed = parseInputNumber(text, locale)\n if (parsed === null) return text === '' ? null : text\n return allowNegative ? parsed : Math.abs(parsed)\n }\n return text\n }\n\n const handleChange = (text: string) => {\n const digits = text.replace(/\\D/g, '')\n if (\n limit &&\n (isFormattedInputType(type) || type === 'phone') &&\n digits.length > limit\n ) return\n if (limit && isLengthValidatedInputType(type) && text.length > limit) return\n const rawValue = normalize(text)\n if (typeof rawValue === 'number') {\n if (typeof min === 'number' && rawValue < min) return\n if (typeof max === 'number' && rawValue > max) return\n }\n setEditingValue(\n type === 'phone' && mask ? applyInputMask(rawValue, mask) : text,\n )\n emitChange(buildPayload(rawValue, 'change', text.slice(-1) || null))\n }\n\n const describedBy = [\n ariaDescribedBy,\n hint && !visibleError ? hintId : undefined,\n visibleError ? errorId : undefined,\n ].filter(Boolean).join(' ') || undefined\n\n if (readOnly) {\n return (\n <div className={['inconel-field', fullWidth ? 'inconel-field--full-width' : '', className ?? ''].join(' ')}>\n {label && <span className={['inconel-field__label', labelClassName ?? ''].join(' ')}>{label}</span>}\n <div className=\"inconel-input-readonly\" aria-label={label}>\n {formattedValue || readOnlyEmptyValue}\n </div>\n </div>\n )\n }\n\n return (\n <div className={['inconel-field', fullWidth ? 'inconel-field--full-width' : '', className ?? ''].join(' ')}>\n {label && (\n <label className={['inconel-field__label', labelClassName ?? ''].join(' ')} htmlFor={inputId}>\n {label}{required && <span className=\"inconel-field__required\" aria-hidden=\"true\"> *</span>}\n </label>\n )}\n <div className={['inconel-input-control', visibleError ? 'is-invalid' : '', disabled ? 'is-disabled' : ''].join(' ')}>\n {startAdornment && <span className=\"inconel-input-adornment\" aria-hidden=\"true\">{startAdornment}</span>}\n <input\n {...inputProps}\n ref={ref}\n id={inputId}\n type={type === 'password' || type === 'email' ? type : 'text'}\n inputMode={isFormattedInputType(type) ? 'decimal' : type === 'phone' ? 'tel' : undefined}\n value={focused ? editingValue : formattedValue}\n required={required}\n disabled={disabled}\n autoComplete={autoComplete}\n aria-invalid={Boolean(visibleError)}\n aria-describedby={describedBy}\n className={['inconel-input', inputClassName ?? ''].join(' ')}\n onChange={(event) => handleChange(event.target.value)}\n onFocus={(event) => {\n if (disabled) return\n setFocused(true)\n const editValue = type === 'phone' && mask\n ? applyInputMask(currentValue, mask)\n : isFormattedInputType(type)\n ? String(currentValue ?? '').replace('.', getInputSeparators(locale).decimal)\n : String(currentValue ?? '')\n setEditingValue(editValue)\n onFocus?.(buildPayload(currentValue, 'focus'), event)\n }}\n onBlur={(event) => {\n setFocused(false)\n if (debounceRef.current) clearTimeout(debounceRef.current)\n let rawValue = normalize(editingValue)\n if (typeof rawValue === 'number') {\n rawValue = roundInputNumber(rawValue, decimalScale, roundOnBlur ? roundMode : 'floor')\n }\n setValidationError(validate(rawValue))\n const payload = buildPayload(rawValue, 'blur')\n emitChange(payload, true)\n onBlur?.(payload, event)\n }}\n onKeyDown={(event) => {\n if (!allowNegative && (event.key === '-' || event.key === 'Subtract')) event.preventDefault()\n onKeyDown?.(buildPayload(currentValue, 'keydown', event.key), event)\n }}\n onMouseEnter={(event) => onMouseEnter?.(buildPayload(currentValue, 'mouseenter'), event)}\n onMouseLeave={(event) => onMouseLeave?.(buildPayload(currentValue, 'mouseleave'), event)}\n />\n {isClearable && !disabled && formattedValue && clearButtonLabel && (\n <button\n type=\"button\"\n className=\"inconel-input-clear\"\n aria-label={clearButtonLabel}\n onClick={() => {\n setEditingValue('')\n setValidationError(validate(null))\n emitChange(buildPayload(null, 'clear'), true)\n }}\n >\n ×\n </button>\n )}\n {endAdornment && <span className=\"inconel-input-adornment\" aria-hidden=\"true\">{endAdornment}</span>}\n </div>\n <FieldFeedback\n hint={hint}\n errorMessage={visibleError}\n hintId={hintId}\n errorId={errorId}\n />\n </div>\n )\n})\n\nexport default Input\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type ForwardedRef,\n type KeyboardEvent,\n type ReactNode,\n} from 'react'\nimport {\n autoUpdate,\n flip,\n offset,\n shift,\n size,\n useFloating,\n} from '@floating-ui/react'\nimport { useVirtualizer } from '@tanstack/react-virtual'\nimport { createPortal } from 'react-dom'\n\nimport FieldFeedback from '../FieldFeedback/FieldFeedback'\nimport type { FieldFeedbackContentProps } from '../FieldFeedback/FieldFeedback'\n\nexport type OptionValue = string | number\n\nexport interface SelectHandle {\n focus: () => void\n blur: () => void\n clear: () => void\n}\n\ntype SelectPart =\n | 'root'\n | 'label'\n | 'control'\n | 'input'\n | 'clearButton'\n | 'toggleButton'\n | 'menu'\n | 'option'\n | 'message'\n\nexport type SelectClassNames = Partial<Record<SelectPart, string>>\nexport type SelectStyles = Partial<Record<SelectPart, CSSProperties>>\n\nexport interface SelectProps<T extends object> extends FieldFeedbackContentProps {\n id?: string\n name?: string\n label: string\n options: T[]\n value: OptionValue | null\n onChange: (value: OptionValue | null, option: T | null) => void\n optionLabel: keyof T | ((option: T) => ReactNode)\n optionValue: keyof T | ((option: T) => OptionValue)\n getOptionSearchText?: (option: T) => string\n isOptionDisabled?: (option: T) => boolean\n placeholder?: string\n isClearable?: boolean\n isDisabled?: boolean\n isReadOnly?: boolean\n isRequired?: boolean\n isLoading?: boolean\n loadOptions?: (inputValue: string, signal: AbortSignal) => Promise<T[]>\n loadOptionsDebounceMs?: number\n asyncErrorMessage?: ReactNode\n loadingMessage?: ReactNode\n noOptionsMessage?: ReactNode\n clearButtonLabel?: string\n openMenuButtonLabel?: string\n closeMenuButtonLabel?: string\n searchLocale?: string\n menuPortalTarget?: HTMLElement | null\n virtualize?: boolean\n virtualizationThreshold?: number\n optionHeight?: number\n className?: string\n classNames?: SelectClassNames\n styles?: SelectStyles\n onInputChange?: (value: string) => void\n onMenuOpen?: () => void\n onMenuClose?: () => void\n}\n\nfunction cx(...values: Array<string | null | undefined | false>) {\n return values.filter(Boolean).join(' ')\n}\n\nfunction SelectInner<T extends object>(\n {\n id,\n name,\n label,\n options,\n value,\n onChange,\n optionLabel,\n optionValue,\n getOptionSearchText,\n isOptionDisabled = () => false,\n placeholder,\n isClearable = false,\n isDisabled = false,\n isReadOnly = false,\n isRequired = false,\n isLoading = false,\n loadOptions,\n loadOptionsDebounceMs = 250,\n hint,\n errorMessage,\n asyncErrorMessage,\n loadingMessage,\n noOptionsMessage,\n clearButtonLabel,\n openMenuButtonLabel,\n closeMenuButtonLabel,\n searchLocale,\n menuPortalTarget,\n virtualize = false,\n virtualizationThreshold = 100,\n optionHeight = 44,\n className,\n classNames = {},\n styles = {},\n onInputChange,\n onMenuOpen,\n onMenuClose,\n }: SelectProps<T>,\n forwardedRef: ForwardedRef<SelectHandle>,\n) {\n const generatedId = useId()\n const inputId = id ?? `inconel-select-${generatedId.replace(/:/g, '')}`\n const labelId = `${inputId}-label`\n const listboxId = `${inputId}-listbox`\n const messageId = `${inputId}-message`\n const hintId = `${inputId}-hint`\n const rootRef = useRef<HTMLDivElement>(null)\n const inputRef = useRef<HTMLInputElement>(null)\n const menuRef = useRef<HTMLDivElement>(null)\n const [isOpen, setIsOpen] = useState(false)\n const [inputValue, setInputValue] = useState('')\n const [activeIndex, setActiveIndex] = useState(0)\n const [asyncOptions, setAsyncOptions] = useState<T[] | null>(null)\n const [isAsyncLoading, setIsAsyncLoading] = useState(false)\n const [hasAsyncError, setHasAsyncError] = useState(false)\n\n useEffect(() => {\n if (!loadOptions) return\n const controller = new AbortController()\n const timeout = window.setTimeout(async () => {\n setIsAsyncLoading(true)\n setHasAsyncError(false)\n try {\n const loadedOptions = await loadOptions(\n inputValue,\n controller.signal,\n )\n if (!controller.signal.aborted) setAsyncOptions(loadedOptions)\n } catch {\n if (!controller.signal.aborted) setHasAsyncError(true)\n } finally {\n if (!controller.signal.aborted) setIsAsyncLoading(false)\n }\n }, loadOptionsDebounceMs)\n\n return () => {\n window.clearTimeout(timeout)\n controller.abort()\n }\n }, [inputValue, loadOptions, loadOptionsDebounceMs])\n\n const availableOptions = loadOptions\n ? (asyncOptions ?? options)\n : options\n const loading = isLoading || isAsyncLoading\n\n const getLabel = useCallback(\n (option: T): ReactNode =>\n typeof optionLabel === 'function'\n ? optionLabel(option)\n : String(option[optionLabel]),\n [optionLabel],\n )\n\n const getSearchLabel = useCallback(\n (option: T) => {\n if (getOptionSearchText) return getOptionSearchText(option)\n const renderedLabel = getLabel(option)\n return typeof renderedLabel === 'string' ||\n typeof renderedLabel === 'number'\n ? String(renderedLabel)\n : ''\n },\n [getLabel, getOptionSearchText],\n )\n\n const getValue = useCallback(\n (option: T): OptionValue => {\n const resolvedValue =\n typeof optionValue === 'function'\n ? optionValue(option)\n : option[optionValue]\n\n if (\n typeof resolvedValue !== 'string' &&\n typeof resolvedValue !== 'number'\n ) {\n throw new TypeError('optionValue must resolve to a string or number.')\n }\n return resolvedValue\n },\n [optionValue],\n )\n\n const duplicateValues = useMemo(() => {\n const seen = new Set<OptionValue>()\n return availableOptions\n .map(getValue)\n .filter((optionId) => {\n if (seen.has(optionId)) return true\n seen.add(optionId)\n return false\n })\n }, [availableOptions, getValue])\n\n useEffect(() => {\n if (duplicateValues.length) {\n console.warn(\n `Duplicate optionValue found in Select \"${label}\":`,\n duplicateValues,\n )\n }\n }, [duplicateValues, label])\n\n const selectedOption = [...options, ...availableOptions].find(\n (option) => getValue(option) === value,\n )\n const selectedLabel = selectedOption ? getSearchLabel(selectedOption) : ''\n\n const filteredOptions = useMemo(() => {\n const query = inputValue.trim().toLocaleLowerCase(searchLocale)\n if (!query || loadOptions) return availableOptions\n return availableOptions.filter((option) =>\n getSearchLabel(option).toLocaleLowerCase(searchLocale).includes(query),\n )\n }, [availableOptions, getSearchLabel, inputValue, loadOptions, searchLocale])\n\n const { refs, floatingStyles } = useFloating({\n open: isOpen,\n placement: 'bottom-start',\n strategy: menuPortalTarget ? 'fixed' : 'absolute',\n whileElementsMounted: autoUpdate,\n middleware: [\n offset(8),\n flip({ padding: 12 }),\n shift({ padding: 12 }),\n size({\n padding: 12,\n apply({ availableHeight, rects, elements }) {\n Object.assign(elements.floating.style, {\n maxHeight: `${Math.min(230, availableHeight)}px`,\n width: `${rects.reference.width}px`,\n })\n },\n }),\n ],\n })\n\n const shouldVirtualize =\n virtualize || filteredOptions.length >= virtualizationThreshold\n const virtualizer = useVirtualizer({\n count: filteredOptions.length,\n getScrollElement: () => menuRef.current,\n estimateSize: () => optionHeight,\n overscan: 5,\n enabled: shouldVirtualize && isOpen,\n })\n\n const closeMenu = useCallback(() => {\n setIsOpen(false)\n setInputValue('')\n onInputChange?.('')\n onMenuClose?.()\n }, [onInputChange, onMenuClose])\n\n const openMenu = () => {\n if (isDisabled || isReadOnly) return\n if (!isOpen) onMenuOpen?.()\n setIsOpen(true)\n }\n\n const clearSelection = useCallback(() => {\n if (isDisabled || isReadOnly) return\n onChange(null, null)\n setInputValue('')\n setActiveIndex(0)\n onInputChange?.('')\n inputRef.current?.focus()\n }, [isDisabled, isReadOnly, onChange, onInputChange])\n\n useImperativeHandle(\n forwardedRef,\n () => ({\n focus: () => inputRef.current?.focus(),\n blur: () => inputRef.current?.blur(),\n clear: clearSelection,\n }),\n [clearSelection],\n )\n\n useEffect(() => {\n const closeOnOutsideClick = (event: MouseEvent) => {\n const target = event.target as Node\n if (\n !rootRef.current?.contains(target) &&\n !menuRef.current?.contains(target)\n ) {\n closeMenu()\n }\n }\n\n document.addEventListener('mousedown', closeOnOutsideClick)\n return () => document.removeEventListener('mousedown', closeOnOutsideClick)\n }, [closeMenu])\n\n useEffect(() => {\n if (activeIndex >= filteredOptions.length) setActiveIndex(0)\n }, [activeIndex, filteredOptions.length])\n\n useEffect(() => {\n if (shouldVirtualize && isOpen && filteredOptions[activeIndex]) {\n virtualizer.scrollToIndex(activeIndex, { align: 'auto' })\n }\n }, [\n activeIndex,\n filteredOptions,\n isOpen,\n shouldVirtualize,\n virtualizer,\n ])\n\n const selectOption = (option: T) => {\n if (isOptionDisabled(option)) return\n onChange(getValue(option), option)\n closeMenu()\n inputRef.current?.focus()\n }\n\n const moveActiveOption = (direction: 1 | -1) => {\n if (!filteredOptions.length) return\n let nextIndex = activeIndex\n do {\n nextIndex =\n (nextIndex + direction + filteredOptions.length) %\n filteredOptions.length\n } while (\n isOptionDisabled(filteredOptions[nextIndex]) &&\n nextIndex !== activeIndex\n )\n setActiveIndex(nextIndex)\n }\n\n const findEnabledIndex = (fromEnd = false) => {\n const entries = filteredOptions.map((option, index) => ({ option, index }))\n if (fromEnd) entries.reverse()\n return entries.find(({ option }) => !isOptionDisabled(option))?.index ?? 0\n }\n\n const handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (\n event.key === 'Backspace' &&\n !inputValue &&\n value !== null &&\n isClearable\n ) {\n event.preventDefault()\n clearSelection()\n return\n }\n\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault()\n if (!isOpen) {\n openMenu()\n setActiveIndex(findEnabledIndex(event.key === 'ArrowUp'))\n } else {\n moveActiveOption(event.key === 'ArrowDown' ? 1 : -1)\n }\n } else if (event.key === 'Home' && isOpen) {\n event.preventDefault()\n setActiveIndex(findEnabledIndex())\n } else if (event.key === 'End' && isOpen) {\n event.preventDefault()\n setActiveIndex(findEnabledIndex(true))\n } else if (event.key === 'Enter' && isOpen) {\n event.preventDefault()\n const activeOption = filteredOptions[activeIndex]\n if (activeOption) selectOption(activeOption)\n } else if (event.key === 'Escape' && isOpen) {\n event.preventDefault()\n closeMenu()\n } else if (event.key === 'Tab') {\n closeMenu()\n }\n }\n\n const renderOption = (option: T, index: number, style?: CSSProperties) => {\n const optionId = getValue(option)\n const disabled = isOptionDisabled(option)\n return (\n <div\n id={`${inputId}-option-${index}`}\n key={optionId}\n role=\"option\"\n aria-selected={optionId === value}\n aria-disabled={disabled}\n aria-posinset={index + 1}\n aria-setsize={filteredOptions.length}\n className={cx(\n 'inconel-select-option',\n index === activeIndex && 'is-active',\n optionId === value && 'is-selected',\n disabled && 'is-disabled',\n classNames.option,\n )}\n style={{ ...style, ...styles.option }}\n onMouseEnter={() => setActiveIndex(index)}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => selectOption(option)}\n >\n <span>{getLabel(option)}</span>\n {optionId === value && <span aria-hidden=\"true\">✓</span>}\n </div>\n )\n }\n\n const menuContent = loading ? (\n <div\n role=\"status\"\n className={cx('inconel-select-message', classNames.message)}\n style={styles.message}\n >\n <span className=\"inconel-select-spinner\" aria-hidden=\"true\" />\n {loadingMessage}\n </div>\n ) : hasAsyncError ? (\n <div\n role=\"alert\"\n className={cx('inconel-select-message inconel-select-message-error', classNames.message)}\n style={styles.message}\n >\n {asyncErrorMessage}\n </div>\n ) : filteredOptions.length === 0 ? (\n <div\n className={cx('inconel-select-message', classNames.message)}\n style={styles.message}\n >\n {noOptionsMessage}\n </div>\n ) : shouldVirtualize ? (\n <div\n role=\"presentation\"\n className=\"inconel-select-virtual-content\"\n style={{ height: virtualizer.getTotalSize() }}\n >\n {virtualizer.getVirtualItems().map((virtualRow) =>\n renderOption(filteredOptions[virtualRow.index], virtualRow.index, {\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: virtualRow.size,\n transform: `translateY(${virtualRow.start}px)`,\n }),\n )}\n </div>\n ) : (\n filteredOptions.map((option, index) => renderOption(option, index))\n )\n\n const menu = isOpen ? (\n <div\n ref={(node) => {\n menuRef.current = node\n refs.setFloating(node)\n }}\n id={listboxId}\n role=\"listbox\"\n aria-labelledby={labelId}\n className={cx(\n 'inconel-select-menu',\n menuPortalTarget && 'inconel-select-menu-portal',\n classNames.menu,\n )}\n style={{ ...floatingStyles, ...styles.menu }}\n >\n {menuContent}\n </div>\n ) : null\n\n const describedBy = errorMessage ? messageId : hint ? hintId : undefined\n\n return (\n <div\n ref={rootRef}\n className={cx('inconel-select-field', className, classNames.root)}\n style={styles.root}\n >\n <label\n id={labelId}\n htmlFor={inputId}\n className={classNames.label}\n style={styles.label}\n >\n {label}\n {isRequired && <span aria-hidden=\"true\"> *</span>}\n </label>\n <div\n ref={refs.setReference}\n className={cx(\n 'inconel-select-control',\n isOpen && 'is-open',\n isDisabled && 'is-disabled',\n Boolean(errorMessage) && 'has-error',\n classNames.control,\n )}\n style={styles.control}\n >\n <input\n ref={inputRef}\n id={inputId}\n role=\"combobox\"\n aria-expanded={isOpen}\n aria-controls={listboxId}\n aria-autocomplete=\"list\"\n aria-activedescendant={\n isOpen && filteredOptions[activeIndex]\n ? `${inputId}-option-${activeIndex}`\n : undefined\n }\n aria-describedby={describedBy}\n aria-invalid={Boolean(errorMessage)}\n aria-required={isRequired}\n aria-busy={loading}\n required={isRequired}\n disabled={isDisabled}\n readOnly={isReadOnly}\n autoComplete=\"off\"\n placeholder={placeholder}\n value={inputValue || selectedLabel}\n className={classNames.input}\n style={styles.input}\n onChange={(event) => {\n setInputValue(event.target.value)\n setActiveIndex(0)\n onInputChange?.(event.target.value)\n openMenu()\n }}\n onClick={openMenu}\n onFocus={(event) => {\n openMenu()\n if (selectedOption && !inputValue) event.currentTarget.select()\n }}\n onKeyDown={handleKeyDown}\n />\n {loading && <span className=\"inconel-select-spinner\" aria-hidden=\"true\" />}\n {isClearable && value !== null && !isDisabled && !isReadOnly && clearButtonLabel && (\n <button\n type=\"button\"\n className={cx('inconel-select-clear', classNames.clearButton)}\n style={styles.clearButton}\n aria-label={clearButtonLabel}\n onClick={clearSelection}\n >\n ×\n </button>\n )}\n <button\n type=\"button\"\n className={cx('inconel-select-toggle', classNames.toggleButton)}\n style={styles.toggleButton}\n aria-label={isOpen ? closeMenuButtonLabel : openMenuButtonLabel}\n aria-expanded={isOpen}\n disabled={isDisabled}\n tabIndex={-1}\n onClick={() => (isOpen ? closeMenu() : openMenu())}\n >\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 20 20\"\n width=\"20\"\n height=\"20\"\n fill=\"none\"\n >\n <path\n d=\"m5 7.5 5 5 5-5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.75\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n </div>\n\n {name && (\n <input\n type=\"hidden\"\n name={name}\n value={value ?? ''}\n required={isRequired}\n />\n )}\n <FieldFeedback\n hint={hint}\n errorMessage={errorMessage}\n hintId={hintId}\n errorId={messageId}\n />\n\n {menuPortalTarget && menu\n ? createPortal(menu, menuPortalTarget)\n : menu}\n </div>\n )\n}\n\nconst Select = forwardRef(SelectInner) as <T extends object>(\n props: SelectProps<T> & { ref?: ForwardedRef<SelectHandle> },\n) => ReactNode\n\nexport default Select\n","import {\n forwardRef,\n useId,\n type TextareaHTMLAttributes,\n} from 'react'\n\nimport FieldFeedback from '../FieldFeedback/FieldFeedback'\nimport type { FieldFeedbackContentProps } from '../FieldFeedback/FieldFeedback'\n\nexport interface TextareaProps\n extends TextareaHTMLAttributes<HTMLTextAreaElement>,\n FieldFeedbackContentProps {\n label?: string\n fullWidth?: boolean\n resize?: 'none' | 'vertical' | 'horizontal' | 'both'\n}\n\nconst Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(\n function Textarea(\n {\n id,\n label,\n hint,\n errorMessage,\n fullWidth = false,\n resize = 'vertical',\n className,\n required,\n disabled,\n 'aria-describedby': ariaDescribedBy,\n style,\n ...textareaProps\n },\n ref,\n ) {\n const generatedId = useId()\n const textareaId =\n id ?? `inconel-textarea-${generatedId.replace(/:/g, '')}`\n const hintId = `${textareaId}-hint`\n const errorId = `${textareaId}-error`\n const describedBy =\n [\n ariaDescribedBy,\n hint && !errorMessage ? hintId : undefined,\n errorMessage ? errorId : undefined,\n ]\n .filter(Boolean)\n .join(' ') || undefined\n\n return (\n <div\n className={[\n 'inconel-field',\n fullWidth ? 'inconel-field--full-width' : '',\n className ?? '',\n ].join(' ')}\n >\n {label && (\n <label className=\"inconel-field__label\" htmlFor={textareaId}>\n {label}\n {required && <span aria-hidden=\"true\"> *</span>}\n </label>\n )}\n <textarea\n {...textareaProps}\n ref={ref}\n id={textareaId}\n required={required}\n disabled={disabled}\n aria-invalid={Boolean(errorMessage)}\n aria-describedby={describedBy}\n className={[\n 'inconel-textarea',\n errorMessage ? 'is-invalid' : '',\n ].join(' ')}\n style={{ ...style, resize }}\n />\n <FieldFeedback\n hint={hint}\n errorMessage={errorMessage}\n hintId={hintId}\n errorId={errorId}\n />\n </div>\n )\n },\n)\n\nexport default Textarea\n"],"names":["FieldFeedback","hint","errorMessage","hintId","errorId","className","jsx","FORMATTED_INPUT_TYPES","LENGTH_VALIDATED_INPUT_TYPES","isFormattedInputType","type","candidate","isLengthValidatedInputType","getInputSeparators","locale","parts","part","parseInputNumber","value","group","decimal","normalized","result","roundInputNumber","scale","mode","factor","applyInputMask","mask","digits","index","character","formatInputValue","decimalScale","currency","validateInputValue","required","min","max","messages","expected","Input","forwardRef","id","label","startAdornment","endAdornment","fullWidth","inputClassName","labelClassName","disabled","defaultValue","onChange","onBlur","onFocus","onKeyDown","onMouseEnter","onMouseLeave","roundMode","roundOnBlur","allowNegative","debounceMs","validateOnSubmit","validationMessages","limit","isClearable","readOnly","clearButtonLabel","readOnlyEmptyValue","autoComplete","ariaDescribedBy","inputProps","ref","generatedId","useId","inputId","controlled","localValue","setLocalValue","useState","currentValue","editingValue","setEditingValue","focused","setFocused","validationError","setValidationError","debounceRef","useRef","visibleError","validate","formattedValue","useMemo","buildPayload","rawValue","eventType","char","emitChange","payload","immediate","useEffect","normalize","text","parsed","handleChange","describedBy","jsxs","event","editValue","cx","values","SelectInner","name","options","optionLabel","optionValue","getOptionSearchText","isOptionDisabled","placeholder","isDisabled","isReadOnly","isRequired","isLoading","loadOptions","loadOptionsDebounceMs","asyncErrorMessage","loadingMessage","noOptionsMessage","openMenuButtonLabel","closeMenuButtonLabel","searchLocale","menuPortalTarget","virtualize","virtualizationThreshold","optionHeight","classNames","styles","onInputChange","onMenuOpen","onMenuClose","forwardedRef","labelId","listboxId","messageId","rootRef","inputRef","menuRef","isOpen","setIsOpen","inputValue","setInputValue","activeIndex","setActiveIndex","asyncOptions","setAsyncOptions","isAsyncLoading","setIsAsyncLoading","hasAsyncError","setHasAsyncError","controller","timeout","loadedOptions","availableOptions","loading","getLabel","useCallback","option","getSearchLabel","renderedLabel","getValue","resolvedValue","duplicateValues","seen","optionId","selectedOption","selectedLabel","filteredOptions","query","refs","floatingStyles","useFloating","autoUpdate","offset","flip","shift","size","availableHeight","rects","elements","shouldVirtualize","virtualizer","useVirtualizer","closeMenu","openMenu","clearSelection","useImperativeHandle","closeOnOutsideClick","target","selectOption","moveActiveOption","direction","nextIndex","findEnabledIndex","fromEnd","entries","handleKeyDown","activeOption","renderOption","style","menuContent","virtualRow","menu","node","createPortal","Select","Textarea","resize","textareaProps","textareaId"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './components';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,CAAA;AAE3B,cAAc,cAAc,CAAA"}