inconel 0.1.0 → 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.
Files changed (175) hide show
  1. package/README.md +31 -0
  2. package/dist/components/Button/Button.d.ts +8 -0
  3. package/dist/components/Button/Button.d.ts.map +1 -0
  4. package/dist/components/Button/index.d.ts +3 -0
  5. package/dist/components/Button/index.d.ts.map +1 -0
  6. package/dist/components/Checkbox/Checkbox.d.ts +7 -0
  7. package/dist/components/Checkbox/Checkbox.d.ts.map +1 -0
  8. package/dist/components/Checkbox/index.d.ts +3 -0
  9. package/dist/components/Checkbox/index.d.ts.map +1 -0
  10. package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +15 -0
  11. package/dist/components/CheckboxGroup/CheckboxGroup.d.ts.map +1 -0
  12. package/dist/components/CheckboxGroup/index.d.ts +3 -0
  13. package/dist/components/CheckboxGroup/index.d.ts.map +1 -0
  14. package/dist/components/CheckboxGroup/utils.d.ts +2 -0
  15. package/dist/components/CheckboxGroup/utils.d.ts.map +1 -0
  16. package/dist/components/CurrencyInput/CurrencyInput.d.ts +6 -0
  17. package/dist/components/CurrencyInput/CurrencyInput.d.ts.map +1 -0
  18. package/dist/components/CurrencyInput/index.d.ts +3 -0
  19. package/dist/components/CurrencyInput/index.d.ts.map +1 -0
  20. package/dist/components/CustomizableSwitch/CustomizableSwitch.d.ts +4 -0
  21. package/dist/components/CustomizableSwitch/CustomizableSwitch.d.ts.map +1 -0
  22. package/dist/components/CustomizableSwitch/index.d.ts +3 -0
  23. package/dist/components/CustomizableSwitch/index.d.ts.map +1 -0
  24. package/dist/components/DataGrid/DataGrid.d.ts +4 -0
  25. package/dist/components/DataGrid/DataGrid.d.ts.map +1 -0
  26. package/dist/components/DataGrid/index.d.ts +3 -0
  27. package/dist/components/DataGrid/index.d.ts.map +1 -0
  28. package/dist/components/DatePicker/DatePicker.d.ts +8 -0
  29. package/dist/components/DatePicker/DatePicker.d.ts.map +1 -0
  30. package/dist/components/DatePicker/index.d.ts +3 -0
  31. package/dist/components/DatePicker/index.d.ts.map +1 -0
  32. package/dist/components/DatePicker/utils.d.ts +2 -0
  33. package/dist/components/DatePicker/utils.d.ts.map +1 -0
  34. package/dist/components/DndFileUpload/DndFileUpload.d.ts +4 -0
  35. package/dist/components/DndFileUpload/DndFileUpload.d.ts.map +1 -0
  36. package/dist/components/DndFileUpload/index.d.ts +3 -0
  37. package/dist/components/DndFileUpload/index.d.ts.map +1 -0
  38. package/dist/components/DotLoader/DotLoader.d.ts +6 -0
  39. package/dist/components/DotLoader/DotLoader.d.ts.map +1 -0
  40. package/dist/components/DotLoader/constants.d.ts +2 -0
  41. package/dist/components/DotLoader/constants.d.ts.map +1 -0
  42. package/dist/components/DotLoader/index.d.ts +3 -0
  43. package/dist/components/DotLoader/index.d.ts.map +1 -0
  44. package/dist/components/DragDropUpload/DragDropUpload.d.ts +8 -0
  45. package/dist/components/DragDropUpload/DragDropUpload.d.ts.map +1 -0
  46. package/dist/components/DragDropUpload/constants.d.ts +2 -0
  47. package/dist/components/DragDropUpload/constants.d.ts.map +1 -0
  48. package/dist/components/DragDropUpload/index.d.ts +3 -0
  49. package/dist/components/DragDropUpload/index.d.ts.map +1 -0
  50. package/dist/components/ExcelTable/ExcelTable.d.ts +4 -0
  51. package/dist/components/ExcelTable/ExcelTable.d.ts.map +1 -0
  52. package/dist/components/ExcelTable/index.d.ts +3 -0
  53. package/dist/components/ExcelTable/index.d.ts.map +1 -0
  54. package/dist/components/FieldFeedback/FieldFeedback.d.ts.map +1 -1
  55. package/dist/components/FileUpload/FileUpload.d.ts +8 -0
  56. package/dist/components/FileUpload/FileUpload.d.ts.map +1 -0
  57. package/dist/components/FileUpload/constants.d.ts +2 -0
  58. package/dist/components/FileUpload/constants.d.ts.map +1 -0
  59. package/dist/components/FileUpload/index.d.ts +3 -0
  60. package/dist/components/FileUpload/index.d.ts.map +1 -0
  61. package/dist/components/FileUploadText/FileUploadText.d.ts +4 -0
  62. package/dist/components/FileUploadText/FileUploadText.d.ts.map +1 -0
  63. package/dist/components/FileUploadText/index.d.ts +3 -0
  64. package/dist/components/FileUploadText/index.d.ts.map +1 -0
  65. package/dist/components/Filter/Filter.d.ts +7 -0
  66. package/dist/components/Filter/Filter.d.ts.map +1 -0
  67. package/dist/components/Filter/index.d.ts +3 -0
  68. package/dist/components/Filter/index.d.ts.map +1 -0
  69. package/dist/components/HTMLTable/HTMLTable.d.ts +4 -0
  70. package/dist/components/HTMLTable/HTMLTable.d.ts.map +1 -0
  71. package/dist/components/HTMLTable/index.d.ts +3 -0
  72. package/dist/components/HTMLTable/index.d.ts.map +1 -0
  73. package/dist/components/HtmlEditor/HtmlEditor.d.ts +9 -0
  74. package/dist/components/HtmlEditor/HtmlEditor.d.ts.map +1 -0
  75. package/dist/components/HtmlEditor/index.d.ts +3 -0
  76. package/dist/components/HtmlEditor/index.d.ts.map +1 -0
  77. package/dist/components/Input/Input.d.ts.map +1 -1
  78. package/dist/components/InputText/InputText.d.ts +4 -0
  79. package/dist/components/InputText/InputText.d.ts.map +1 -0
  80. package/dist/components/InputText/index.d.ts +3 -0
  81. package/dist/components/InputText/index.d.ts.map +1 -0
  82. package/dist/components/Loader/Loader.d.ts +7 -0
  83. package/dist/components/Loader/Loader.d.ts.map +1 -0
  84. package/dist/components/Loader/constants.d.ts +2 -0
  85. package/dist/components/Loader/constants.d.ts.map +1 -0
  86. package/dist/components/Loader/index.d.ts +3 -0
  87. package/dist/components/Loader/index.d.ts.map +1 -0
  88. package/dist/components/LoaderMini/LoaderMini.d.ts +4 -0
  89. package/dist/components/LoaderMini/LoaderMini.d.ts.map +1 -0
  90. package/dist/components/LoaderMini/index.d.ts +3 -0
  91. package/dist/components/LoaderMini/index.d.ts.map +1 -0
  92. package/dist/components/Modal/Modal.d.ts +13 -0
  93. package/dist/components/Modal/Modal.d.ts.map +1 -0
  94. package/dist/components/Modal/constants.d.ts +2 -0
  95. package/dist/components/Modal/constants.d.ts.map +1 -0
  96. package/dist/components/Modal/index.d.ts +3 -0
  97. package/dist/components/Modal/index.d.ts.map +1 -0
  98. package/dist/components/MultiSelect/MultiSelect.d.ts +15 -0
  99. package/dist/components/MultiSelect/MultiSelect.d.ts.map +1 -0
  100. package/dist/components/MultiSelect/index.d.ts +3 -0
  101. package/dist/components/MultiSelect/index.d.ts.map +1 -0
  102. package/dist/components/MultiSelectWithCheckbox/MultiSelectWithCheckbox.d.ts +4 -0
  103. package/dist/components/MultiSelectWithCheckbox/MultiSelectWithCheckbox.d.ts.map +1 -0
  104. package/dist/components/MultiSelectWithCheckbox/index.d.ts +3 -0
  105. package/dist/components/MultiSelectWithCheckbox/index.d.ts.map +1 -0
  106. package/dist/components/Option/Option.d.ts +8 -0
  107. package/dist/components/Option/Option.d.ts.map +1 -0
  108. package/dist/components/Option/index.d.ts +3 -0
  109. package/dist/components/Option/index.d.ts.map +1 -0
  110. package/dist/components/OptionWithIcon/OptionWithIcon.d.ts +4 -0
  111. package/dist/components/OptionWithIcon/OptionWithIcon.d.ts.map +1 -0
  112. package/dist/components/OptionWithIcon/index.d.ts +3 -0
  113. package/dist/components/OptionWithIcon/index.d.ts.map +1 -0
  114. package/dist/components/RadioGroup/RadioGroup.d.ts +15 -0
  115. package/dist/components/RadioGroup/RadioGroup.d.ts.map +1 -0
  116. package/dist/components/RadioGroup/index.d.ts +3 -0
  117. package/dist/components/RadioGroup/index.d.ts.map +1 -0
  118. package/dist/components/ReadOnly/ReadOnly.d.ts +8 -0
  119. package/dist/components/ReadOnly/ReadOnly.d.ts.map +1 -0
  120. package/dist/components/ReadOnly/constants.d.ts +2 -0
  121. package/dist/components/ReadOnly/constants.d.ts.map +1 -0
  122. package/dist/components/ReadOnly/index.d.ts +3 -0
  123. package/dist/components/ReadOnly/index.d.ts.map +1 -0
  124. package/dist/components/Select/Select.d.ts.map +1 -1
  125. package/dist/components/SlideTabs/SlideTabs.d.ts +4 -0
  126. package/dist/components/SlideTabs/SlideTabs.d.ts.map +1 -0
  127. package/dist/components/SlideTabs/index.d.ts +3 -0
  128. package/dist/components/SlideTabs/index.d.ts.map +1 -0
  129. package/dist/components/SocketStatus/SocketStatus.d.ts +8 -0
  130. package/dist/components/SocketStatus/SocketStatus.d.ts.map +1 -0
  131. package/dist/components/SocketStatus/index.d.ts +3 -0
  132. package/dist/components/SocketStatus/index.d.ts.map +1 -0
  133. package/dist/components/Svg/Svg.d.ts +10 -0
  134. package/dist/components/Svg/Svg.d.ts.map +1 -0
  135. package/dist/components/Svg/index.d.ts +3 -0
  136. package/dist/components/Svg/index.d.ts.map +1 -0
  137. package/dist/components/Switch/Switch.d.ts +9 -0
  138. package/dist/components/Switch/Switch.d.ts.map +1 -0
  139. package/dist/components/Switch/index.d.ts +3 -0
  140. package/dist/components/Switch/index.d.ts.map +1 -0
  141. package/dist/components/Table/Table.d.ts +16 -0
  142. package/dist/components/Table/Table.d.ts.map +1 -0
  143. package/dist/components/Table/constants.d.ts +2 -0
  144. package/dist/components/Table/constants.d.ts.map +1 -0
  145. package/dist/components/Table/index.d.ts +3 -0
  146. package/dist/components/Table/index.d.ts.map +1 -0
  147. package/dist/components/Table/utils.d.ts +2 -0
  148. package/dist/components/Table/utils.d.ts.map +1 -0
  149. package/dist/components/Tabs/Tabs.d.ts +16 -0
  150. package/dist/components/Tabs/Tabs.d.ts.map +1 -0
  151. package/dist/components/Tabs/index.d.ts +3 -0
  152. package/dist/components/Tabs/index.d.ts.map +1 -0
  153. package/dist/components/TextEditor/TextEditor.d.ts +4 -0
  154. package/dist/components/TextEditor/TextEditor.d.ts.map +1 -0
  155. package/dist/components/TextEditor/index.d.ts +3 -0
  156. package/dist/components/TextEditor/index.d.ts.map +1 -0
  157. package/dist/components/TextInput/TextInput.d.ts +4 -0
  158. package/dist/components/TextInput/TextInput.d.ts.map +1 -0
  159. package/dist/components/TextInput/index.d.ts +3 -0
  160. package/dist/components/TextInput/index.d.ts.map +1 -0
  161. package/dist/components/Textarea/Textarea.d.ts.map +1 -1
  162. package/dist/components/Tooltip/Tooltip.d.ts +9 -0
  163. package/dist/components/Tooltip/Tooltip.d.ts.map +1 -0
  164. package/dist/components/Tooltip/index.d.ts +3 -0
  165. package/dist/components/Tooltip/index.d.ts.map +1 -0
  166. package/dist/components/index.d.ts +35 -0
  167. package/dist/components/index.d.ts.map +1 -1
  168. package/dist/components/shared/classNames.d.ts +2 -0
  169. package/dist/components/shared/classNames.d.ts.map +1 -0
  170. package/dist/index.cjs +1 -1
  171. package/dist/index.cjs.map +1 -1
  172. package/dist/index.js +1047 -499
  173. package/dist/index.js.map +1 -1
  174. package/dist/styles.css +1 -1
  175. package/package.json +3 -2
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","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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"}
1
+ {"version":3,"file":"index.js","sources":["../src/components/shared/classNames.ts","../src/components/Button/Button.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/CheckboxGroup/utils.ts","../src/components/CheckboxGroup/CheckboxGroup.tsx","../src/components/FieldFeedback/FieldFeedback.tsx","../src/components/Input/constants.ts","../src/components/Input/utils.ts","../src/components/Input/Input.tsx","../src/components/CurrencyInput/CurrencyInput.tsx","../src/components/Switch/Switch.tsx","../src/components/CustomizableSwitch/CustomizableSwitch.tsx","../src/components/Table/constants.ts","../src/components/Table/utils.ts","../src/components/Table/Table.tsx","../src/components/DataGrid/DataGrid.tsx","../src/components/DatePicker/utils.ts","../src/components/DatePicker/DatePicker.tsx","../src/components/FileUpload/constants.ts","../src/components/FileUpload/FileUpload.tsx","../src/components/DragDropUpload/constants.ts","../src/components/DragDropUpload/DragDropUpload.tsx","../src/components/DndFileUpload/DndFileUpload.tsx","../src/components/DotLoader/constants.ts","../src/components/DotLoader/DotLoader.tsx","../src/components/ExcelTable/ExcelTable.tsx","../src/components/FileUploadText/FileUploadText.tsx","../src/components/Filter/Filter.tsx","../src/components/HTMLTable/HTMLTable.tsx","../src/components/HtmlEditor/HtmlEditor.tsx","../src/components/InputText/InputText.tsx","../src/components/Loader/constants.ts","../src/components/Loader/Loader.tsx","../src/components/LoaderMini/LoaderMini.tsx","../src/components/Modal/constants.ts","../src/components/Modal/Modal.tsx","../src/components/MultiSelect/MultiSelect.tsx","../src/components/MultiSelectWithCheckbox/MultiSelectWithCheckbox.tsx","../src/components/Option/Option.tsx","../src/components/OptionWithIcon/OptionWithIcon.tsx","../src/components/RadioGroup/RadioGroup.tsx","../src/components/ReadOnly/constants.ts","../src/components/ReadOnly/ReadOnly.tsx","../src/components/Select/Select.tsx","../src/components/Tabs/Tabs.tsx","../src/components/SlideTabs/SlideTabs.tsx","../src/components/SocketStatus/SocketStatus.tsx","../src/components/Svg/Svg.tsx","../src/components/TextEditor/TextEditor.tsx","../src/components/TextInput/TextInput.tsx","../src/components/Textarea/Textarea.tsx","../src/components/Tooltip/Tooltip.tsx"],"sourcesContent":["export function classNames(\n ...values: Array<string | false | null | undefined>\n) {\n return values.filter(Boolean).join(' ')\n}\n","import type { ButtonHTMLAttributes } from 'react'\n\nimport { classNames } from '../shared/classNames'\nimport './styles.css'\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n loading?: boolean\n fullWidth?: boolean\n variant?: 'primary' | 'secondary' | 'danger' | 'ghost'\n}\n\nexport function Button({\n loading = false,\n fullWidth = false,\n variant = 'primary',\n disabled,\n className,\n children,\n ...props\n}: ButtonProps) {\n return (\n <button\n {...props}\n disabled={disabled || loading}\n className={classNames(\n 'inconel-button',\n `inconel-button--${variant}`,\n fullWidth && 'inconel-button--full-width',\n loading && 'inconel-is-loading',\n className,\n )}\n >\n {loading && <span className=\"inconel-button__spinner\" aria-hidden=\"true\" />}\n {children}\n </button>\n )\n}\n","import { useEffect, useRef, type InputHTMLAttributes, type ReactNode } from 'react'\n\nimport { classNames } from '../shared/classNames'\nimport './styles.css'\n\nexport interface CheckboxProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type'> {\n label?: ReactNode\n indeterminate?: boolean\n}\n\nexport function Checkbox({\n label,\n indeterminate = false,\n className,\n ...props\n}: CheckboxProps) {\n const ref = useRef<HTMLInputElement>(null)\n useEffect(() => {\n if (ref.current) ref.current.indeterminate = indeterminate\n }, [indeterminate])\n\n return (\n <label className={classNames('inconel-checkbox', className)}>\n <input {...props} ref={ref} type=\"checkbox\" />\n <span className=\"inconel-checkbox__control\" aria-hidden=\"true\" />\n {label && <span className=\"inconel-checkbox__label\">{label}</span>}\n </label>\n )\n}\n","export function toggleArrayValue<T>(values: T[], value: T) {\n return values.includes(value)\n ? values.filter((item) => item !== value)\n : [...values, value]\n}\n","import type { ReactNode } from 'react'\n\nimport { Checkbox } from '../Checkbox'\n\nimport { classNames } from '../shared/classNames'\nimport './styles.css'\nimport { toggleArrayValue } from './utils'\n\nexport interface CheckboxOption<T extends string | number = string> {\n label: ReactNode\n value: T\n disabled?: boolean\n}\n\nexport interface CheckboxGroupProps<T extends string | number = string> {\n options: CheckboxOption<T>[]\n value?: T[]\n onChange?: (value: T[]) => void\n name?: string\n className?: string\n}\n\nexport function CheckboxGroup<T extends string | number = string>({\n options,\n value = [],\n onChange,\n name,\n className,\n}: CheckboxGroupProps<T>) {\n const toggle = (optionValue: T) =>\n onChange?.(toggleArrayValue(value, optionValue))\n\n return (\n <div className={classNames('inconel-checkbox-group', className)}>\n {options.map((option) => (\n <Checkbox\n key={option.value}\n name={name}\n label={option.label}\n value={option.value}\n checked={value.includes(option.value)}\n disabled={option.disabled}\n onChange={() => toggle(option.value)}\n />\n ))}\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport '../shared/field.css'\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={[\n 'inconel-field-feedback',\n 'inconel-is-error',\n className ?? '',\n ].join(' ')}\n role=\"alert\"\n >\n {errorMessage}\n </p>\n )\n }\n\n if (hint) {\n return (\n <p\n id={hintId}\n className={[\n 'inconel-field-feedback',\n 'inconel-is-hint',\n className ?? '',\n ].join(' ')}\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 '../shared/field.css'\nimport '../shared/field-controls.css'\nimport './styles.css'\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 ? 'inconel-is-invalid' : '', disabled ? 'inconel-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 Input, { type InputProps } from '../Input/Input'\n\nexport interface CurrencyInputProps extends Omit<InputProps, 'type'> {\n currency?: string\n}\n\nexport function CurrencyInput(props: CurrencyInputProps) {\n return <Input {...props} type=\"currency\" />\n}\n","import type { ChangeEvent, InputHTMLAttributes, ReactNode } from 'react'\n\nimport { classNames } from '../shared/classNames'\nimport './styles.css'\n\nexport interface SwitchProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'onChange'> {\n label?: ReactNode\n onChange?: (checked: boolean, event: ChangeEvent<HTMLInputElement>) => void\n onLabel?: ReactNode\n offLabel?: ReactNode\n}\n\nexport function Switch({\n label,\n onLabel,\n offLabel,\n checked,\n defaultChecked,\n onChange,\n className,\n ...props\n}: SwitchProps) {\n return (\n <label className={classNames('inconel-switch', className)}>\n {label && <span className=\"inconel-switch__label\">{label}</span>}\n <input\n {...props}\n type=\"checkbox\"\n checked={checked}\n defaultChecked={defaultChecked}\n onChange={(event) => onChange?.(event.target.checked, event)}\n />\n <span className=\"inconel-switch__track\">\n <span className=\"inconel-switch__thumb\" />\n </span>\n {(onLabel || offLabel) && (\n <span className=\"inconel-switch__state\">\n {checked ? onLabel : offLabel}\n </span>\n )}\n </label>\n )\n}\n","import { Switch, type SwitchProps } from '../Switch'\n\nexport type CustomizableSwitchProps = SwitchProps\nexport const CustomizableSwitch = Switch\n","export const DEFAULT_TABLE_EMPTY_MESSAGE = 'Kayıt bulunamadı.'\n","export function getRowKey<T extends object>(\n row: T,\n index: number,\n rowKey?: keyof T | ((row: T, index: number) => string | number),\n) {\n if (typeof rowKey === 'function') return rowKey(row, index)\n if (rowKey) return String(row[rowKey])\n return index\n}\n","import type { ReactNode, TableHTMLAttributes } from 'react'\n\nimport { classNames } from '../shared/classNames'\nimport './styles.css'\nimport { DEFAULT_TABLE_EMPTY_MESSAGE } from './constants'\nimport { getRowKey } from './utils'\n\nexport interface Column<T> {\n key: keyof T | string\n header: ReactNode\n render?: (row: T, index: number) => ReactNode\n className?: string\n}\n\nexport interface TableProps<T extends object>\n extends Omit<TableHTMLAttributes<HTMLTableElement>, 'children'> {\n columns: Column<T>[]\n data: T[]\n rowKey?: keyof T | ((row: T, index: number) => string | number)\n emptyMessage?: ReactNode\n onRowClick?: (row: T, index: number) => void\n}\n\nexport function Table<T extends object>({\n columns,\n data,\n rowKey,\n emptyMessage = DEFAULT_TABLE_EMPTY_MESSAGE,\n onRowClick,\n className,\n ...props\n}: TableProps<T>) {\n return (\n <div className=\"inconel-table-wrapper\">\n <table {...props} className={classNames('inconel-table', className)}>\n <thead>\n <tr>\n {columns.map((column) => (\n <th key={String(column.key)} className={column.className}>\n {column.header}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {data.map((row, index) => (\n <tr\n key={getRowKey(row, index, rowKey)}\n onClick={() => onRowClick?.(row, index)}\n >\n {columns.map((column) => (\n <td key={String(column.key)} className={column.className}>\n {column.render\n ? column.render(row, index)\n : String(row[column.key as keyof T] ?? '')}\n </td>\n ))}\n </tr>\n ))}\n {data.length === 0 && (\n <tr>\n <td className=\"inconel-table__empty\" colSpan={columns.length}>\n {emptyMessage}\n </td>\n </tr>\n )}\n </tbody>\n </table>\n </div>\n )\n}\n","import { Table, type TableProps } from '../Table'\n\nexport type DataGridProps<T extends object = Record<string, unknown>> = TableProps<T>\nexport const DataGrid = Table\n","export function formatDateValue(value?: string | Date | null) {\n return value instanceof Date ? value.toISOString().slice(0, 10) : value ?? ''\n}\n","import type { ChangeEvent, InputHTMLAttributes, ReactNode } from 'react'\n\nimport { classNames } from '../shared/classNames'\nimport './styles.css'\nimport { formatDateValue } from './utils'\n\nexport interface DatePickerProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'value' | 'onChange'> {\n value?: string | Date | null\n onChange?: (value: string, event: ChangeEvent<HTMLInputElement>) => void\n label?: ReactNode\n}\n\nexport function DatePicker({\n value,\n onChange,\n label,\n className,\n ...props\n}: DatePickerProps) {\n const formatted = formatDateValue(value)\n return (\n <label className={classNames('inconel-date-picker', className)}>\n {label && <span className=\"inconel-field__label\">{label}</span>}\n <input\n {...props}\n type=\"date\"\n value={formatted}\n onChange={(event) => onChange?.(event.target.value, event)}\n />\n </label>\n )\n}\n","export const DEFAULT_FILE_UPLOAD_LABEL = 'Dosya seç'\n","import type { InputHTMLAttributes, ReactNode } from 'react'\n\nimport { classNames } from '../shared/classNames'\nimport './styles.css'\nimport { DEFAULT_FILE_UPLOAD_LABEL } from './constants'\n\nexport interface FileUploadProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'onChange'> {\n label?: ReactNode\n files?: File[]\n onFilesChange?: (files: File[]) => void\n}\n\nexport function FileUpload({\n label = DEFAULT_FILE_UPLOAD_LABEL,\n files,\n multiple,\n onFilesChange,\n className,\n ...props\n}: FileUploadProps) {\n return (\n <label className={classNames('inconel-file-upload', className)}>\n <span className=\"inconel-file-upload__button\">{label}</span>\n <input\n {...props}\n type=\"file\"\n multiple={multiple}\n onChange={(event) => onFilesChange?.(Array.from(event.target.files ?? []))}\n />\n {files && files.length > 0 && (\n <span className=\"inconel-file-upload__text\">\n {files.map((file) => file.name).join(', ')}\n </span>\n )}\n </label>\n )\n}\n","export const DEFAULT_DROP_LABEL = 'Dosyaları buraya bırakın'\n","import { useState, type DragEvent, type ReactNode } from 'react'\n\nimport { FileUpload, type FileUploadProps } from '../FileUpload'\n\nimport { classNames } from '../shared/classNames'\nimport './styles.css'\nimport { DEFAULT_DROP_LABEL } from './constants'\n\nexport interface DragDropUploadProps extends FileUploadProps {\n onDropFiles?: (files: File[]) => void\n dropLabel?: ReactNode\n}\n\nexport function DragDropUpload({\n onDropFiles,\n dropLabel = DEFAULT_DROP_LABEL,\n className,\n ...props\n}: DragDropUploadProps) {\n const [dragging, setDragging] = useState(false)\n const handleDrop = (event: DragEvent<HTMLDivElement>) => {\n event.preventDefault()\n setDragging(false)\n onDropFiles?.(Array.from(event.dataTransfer.files))\n }\n\n return (\n <div\n className={classNames(\n 'inconel-drag-drop-upload',\n dragging && 'inconel-is-dragging',\n className,\n )}\n onDragEnter={() => setDragging(true)}\n onDragLeave={() => setDragging(false)}\n onDragOver={(event) => event.preventDefault()}\n onDrop={handleDrop}\n >\n <span>{dropLabel}</span>\n <FileUpload {...props} />\n </div>\n )\n}\n","import { DragDropUpload, type DragDropUploadProps } from '../DragDropUpload'\n\nexport type DndFileUploadProps = DragDropUploadProps\nexport const DndFileUpload = DragDropUpload\n","export const DEFAULT_DOT_LOADER_LABEL = 'Yükleniyor...'\n","import type { HTMLAttributes } from 'react'\n\nimport { classNames } from '../shared/classNames'\nimport './styles.css'\nimport { DEFAULT_DOT_LOADER_LABEL } from './constants'\n\nexport interface DotLoaderProps extends HTMLAttributes<HTMLSpanElement> {\n label?: string\n}\n\nexport function DotLoader({\n label = DEFAULT_DOT_LOADER_LABEL,\n className,\n ...props\n}: DotLoaderProps) {\n return (\n <span\n {...props}\n className={classNames('inconel-dot-loader', className)}\n role=\"status\"\n aria-label={label}\n >\n <i />\n <i />\n <i />\n </span>\n )\n}\n","import { Table, type TableProps } from '../Table'\n\nexport type ExcelTableProps<T extends object = Record<string, unknown>> = TableProps<T>\nexport const ExcelTable = Table\n","import { FileUpload, type FileUploadProps } from '../FileUpload'\n\nexport type FileUploadTextProps = FileUploadProps\nexport const FileUploadText = FileUpload\n","import type { HTMLAttributes, ReactNode } from 'react'\n\nimport { Button } from '../Button'\n\nimport { classNames } from '../shared/classNames'\nimport './styles.css'\n\nexport interface FilterProps extends HTMLAttributes<HTMLDivElement> {\n onClear?: () => void\n clearLabel?: ReactNode\n}\n\nexport function Filter({\n children,\n onClear,\n clearLabel = 'Temizle',\n className,\n ...props\n}: FilterProps) {\n return (\n <div {...props} className={classNames('inconel-filter', className)}>\n <div className=\"inconel-filter__content\">{children}</div>\n {onClear && (\n <Button type=\"button\" variant=\"ghost\" onClick={onClear}>\n {clearLabel}\n </Button>\n )}\n </div>\n )\n}\n","import { Table, type TableProps } from '../Table'\n\nexport type HTMLTableProps<T extends object = Record<string, unknown>> = TableProps<T>\nexport const HTMLTable = Table\n","import type { HTMLAttributes } from 'react'\n\nimport { classNames } from '../shared/classNames'\nimport './styles.css'\n\nexport interface HtmlEditorProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {\n value?: string\n onChange?: (value: string) => void\n placeholder?: string\n readOnly?: boolean\n}\n\nexport function HtmlEditor({\n value,\n onChange,\n placeholder,\n readOnly = false,\n className,\n ...props\n}: HtmlEditorProps) {\n return (\n <div\n {...props}\n className={classNames('inconel-editor', className)}\n contentEditable={!readOnly}\n suppressContentEditableWarning\n data-placeholder={placeholder}\n dangerouslySetInnerHTML={{ __html: value ?? '' }}\n onInput={(event) => onChange?.(event.currentTarget.innerHTML)}\n />\n )\n}\n","import Input, { type InputProps } from '../Input/Input'\n\nexport type InputTextProps = InputProps\nexport const InputText = Input\n","export const DEFAULT_LOADER_LABEL = 'Yükleniyor...'\n","import type { HTMLAttributes } from 'react'\n\nimport { classNames } from '../shared/classNames'\nimport './styles.css'\nimport { DEFAULT_LOADER_LABEL } from './constants'\n\nexport interface LoaderProps extends HTMLAttributes<HTMLDivElement> {\n label?: string\n fullscreen?: boolean\n}\n\nexport function Loader({\n label = DEFAULT_LOADER_LABEL,\n fullscreen = false,\n className,\n ...props\n}: LoaderProps) {\n return (\n <div\n {...props}\n className={classNames(\n 'inconel-loader',\n fullscreen && 'inconel-loader--fullscreen',\n className,\n )}\n role=\"status\"\n aria-label={label}\n >\n <span className=\"inconel-loader__spinner\" aria-hidden=\"true\" />\n </div>\n )\n}\n","import { Loader, type LoaderProps } from '../Loader'\nimport { classNames } from '../shared/classNames'\n\nexport type LoaderMiniProps = LoaderProps\nexport function LoaderMini(props: LoaderMiniProps) {\n return <Loader {...props} className={classNames('inconel-loader--mini', props.className)} />\n}\n","export const DEFAULT_MODAL_CLOSE_LABEL = 'Kapat'\n","import type { ReactNode } from 'react'\n\nimport { classNames } from '../shared/classNames'\nimport './styles.css'\nimport { DEFAULT_MODAL_CLOSE_LABEL } from './constants'\n\nexport interface ModalProps {\n open: boolean\n title?: ReactNode\n children?: ReactNode\n footer?: ReactNode\n closeLabel?: string\n closeOnBackdrop?: boolean\n onClose?: () => void\n className?: string\n}\n\nexport function Modal({\n open,\n title,\n children,\n footer,\n closeLabel = DEFAULT_MODAL_CLOSE_LABEL,\n closeOnBackdrop = true,\n onClose,\n className,\n}: ModalProps) {\n if (!open) return null\n\n return (\n <div\n className=\"inconel-modal-backdrop\"\n role=\"presentation\"\n onMouseDown={(event) => {\n if (closeOnBackdrop && event.target === event.currentTarget) onClose?.()\n }}\n >\n <section\n className={classNames('inconel-modal', className)}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={typeof title === 'string' ? title : undefined}\n >\n <header className=\"inconel-modal__header\">\n <div className=\"inconel-modal__title\">{title}</div>\n <button\n type=\"button\"\n className=\"inconel-modal__close\"\n aria-label={closeLabel}\n onClick={onClose}\n >\n ×\n </button>\n </header>\n <div className=\"inconel-modal__content\">{children}</div>\n {footer && <footer className=\"inconel-modal__footer\">{footer}</footer>}\n </section>\n </div>\n )\n}\n","import type { ReactNode } from 'react'\n\nimport { CheckboxGroup } from '../CheckboxGroup'\n\nimport { classNames } from '../shared/classNames'\nimport './styles.css'\n\nexport interface MultiSelectOption<T extends string | number = string> {\n label: ReactNode\n value: T\n disabled?: boolean\n}\n\nexport interface MultiSelectProps<T extends string | number = string> {\n options: MultiSelectOption<T>[]\n value?: T[]\n onChange?: (value: T[]) => void\n label?: ReactNode\n className?: string\n}\n\nexport function MultiSelect<T extends string | number = string>({\n options,\n value = [],\n onChange,\n label,\n className,\n}: MultiSelectProps<T>) {\n return (\n <fieldset className={classNames('inconel-multi-select', className)}>\n {label && <legend>{label}</legend>}\n <CheckboxGroup options={options} value={value} onChange={onChange} />\n </fieldset>\n )\n}\n","import { MultiSelect, type MultiSelectProps } from '../MultiSelect'\n\nexport type MultiSelectWithCheckboxProps<T extends string | number = string> = MultiSelectProps<T>\nexport const MultiSelectWithCheckbox = MultiSelect\n","import type { HTMLAttributes, ReactNode } from 'react'\n\nimport { classNames } from '../shared/classNames'\nimport './styles.css'\n\nexport interface OptionProps extends HTMLAttributes<HTMLDivElement> {\n selected?: boolean\n disabled?: boolean\n icon?: ReactNode\n}\n\nexport function Option({\n selected,\n disabled,\n icon,\n children,\n className,\n ...props\n}: OptionProps) {\n return (\n <div\n {...props}\n role=\"option\"\n aria-selected={selected}\n aria-disabled={disabled}\n className={classNames(\n 'inconel-option',\n selected && 'inconel-is-selected',\n disabled && 'inconel-is-disabled',\n className,\n )}\n >\n {icon && <span className=\"inconel-option__icon\">{icon}</span>}\n {children}\n </div>\n )\n}\n\n","import { Option, type OptionProps } from '../Option'\n\nexport type OptionWithIconProps = OptionProps\nexport const OptionWithIcon = Option\n","import type { ReactNode } from 'react'\n\nimport { classNames } from '../shared/classNames'\nimport './styles.css'\n\nexport interface RadioOption<T extends string | number = string> {\n label: ReactNode\n value: T\n disabled?: boolean\n}\n\nexport interface RadioGroupProps<T extends string | number = string> {\n options: RadioOption<T>[]\n value?: T\n onChange?: (value: T) => void\n name: string\n className?: string\n}\n\nexport function RadioGroup<T extends string | number = string>({\n options,\n value,\n onChange,\n name,\n className,\n}: RadioGroupProps<T>) {\n return (\n <div className={classNames('inconel-radio-group', className)}>\n {options.map((option) => (\n <label className=\"inconel-radio\" key={option.value}>\n <input\n type=\"radio\"\n name={name}\n value={option.value}\n checked={option.value === value}\n disabled={option.disabled}\n onChange={() => onChange?.(option.value)}\n />\n <span className=\"inconel-radio__control\" aria-hidden=\"true\" />\n <span>{option.label}</span>\n </label>\n ))}\n </div>\n )\n}\n","export const DEFAULT_READ_ONLY_EMPTY_VALUE = '—'\n","import type { HTMLAttributes, ReactNode } from 'react'\n\nimport { classNames } from '../shared/classNames'\nimport './styles.css'\nimport { DEFAULT_READ_ONLY_EMPTY_VALUE } from './constants'\n\nexport interface ReadOnlyProps extends HTMLAttributes<HTMLDivElement> {\n label?: ReactNode\n value?: ReactNode\n emptyValue?: ReactNode\n}\n\nexport function ReadOnly({\n label,\n value,\n emptyValue = DEFAULT_READ_ONLY_EMPTY_VALUE,\n className,\n ...props\n}: ReadOnlyProps) {\n return (\n <div {...props} className={classNames('inconel-read-only', className)}>\n {label && <span className=\"inconel-read-only__label\">{label}</span>}\n <span className=\"inconel-read-only__value\">\n {value === null || value === undefined || value === '' ? emptyValue : value}\n </span>\n </div>\n )\n}\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'\nimport { classNames as mergeClassNames } from '../shared/classNames'\nimport '../shared/field.css'\nimport '../shared/field-controls.css'\nimport './styles.css'\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 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={mergeClassNames(\n 'inconel-select-option',\n index === activeIndex && 'inconel-is-active',\n optionId === value && 'inconel-is-selected',\n disabled && 'inconel-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={mergeClassNames('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={mergeClassNames('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={mergeClassNames('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={mergeClassNames(\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={mergeClassNames('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={mergeClassNames(\n 'inconel-select-control',\n isOpen && 'inconel-is-open',\n isDisabled && 'inconel-is-disabled',\n Boolean(errorMessage) && 'inconel-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={mergeClassNames('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={mergeClassNames('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 { useState, type ReactNode } from 'react'\n\nimport { classNames } from '../shared/classNames'\nimport './styles.css'\n\nexport interface TabsItem {\n id: string\n label: ReactNode\n content?: ReactNode\n disabled?: boolean\n}\n\nexport interface TabsProps {\n items: TabsItem[]\n value?: string\n defaultValue?: string\n onChange?: (id: string) => void\n className?: string\n}\n\nexport function Tabs({\n items,\n value,\n defaultValue,\n onChange,\n className,\n}: TabsProps) {\n const [internalValue, setInternalValue] = useState(\n defaultValue ?? items[0]?.id,\n )\n const activeValue = value ?? internalValue\n const active = items.find((item) => item.id === activeValue)\n\n return (\n <div className={classNames('inconel-tabs', className)}>\n <div className=\"inconel-tabs__list\" role=\"tablist\">\n {items.map((item) => (\n <button\n key={item.id}\n type=\"button\"\n role=\"tab\"\n disabled={item.disabled}\n aria-selected={item.id === activeValue}\n className={classNames(\n 'inconel-tabs__tab',\n item.id === activeValue && 'inconel-is-active',\n )}\n onClick={() => {\n setInternalValue(item.id)\n onChange?.(item.id)\n }}\n >\n {item.label}\n </button>\n ))}\n </div>\n {active?.content !== undefined && (\n <div className=\"inconel-tabs__panel\" role=\"tabpanel\">\n {active.content}\n </div>\n )}\n </div>\n )\n}\n","import { Tabs, type TabsProps } from '../Tabs'\n\nexport type SlideTabsProps = TabsProps\nexport const SlideTabs = Tabs\n","import type { HTMLAttributes, ReactNode } from 'react'\n\nimport { classNames } from '../shared/classNames'\nimport './styles.css'\n\nexport interface SocketStatusProps extends HTMLAttributes<HTMLSpanElement> {\n connected: boolean\n connectedLabel?: ReactNode\n disconnectedLabel?: ReactNode\n}\n\nexport function SocketStatus({\n connected,\n connectedLabel = 'Bağlı',\n disconnectedLabel = 'Bağlantı yok',\n className,\n ...props\n}: SocketStatusProps) {\n return (\n <span\n {...props}\n className={classNames(\n 'inconel-socket-status',\n connected ? 'inconel-is-connected' : 'inconel-is-disconnected',\n className,\n )}\n role=\"status\"\n >\n <i aria-hidden=\"true\" />\n {connected ? connectedLabel : disconnectedLabel}\n </span>\n )\n}\n","import { ReactSVG, type Props as ReactSVGProps } from 'react-svg'\nimport './styles.css'\n\nexport interface SvgProps\n extends Omit<ReactSVGProps, 'className' | 'src' | 'title' | 'wrapper'> {\n className?: string\n src?: string | null\n title?: string | null\n render?: boolean\n}\n\nfunction Svg({\n className,\n src,\n title,\n render = true,\n ...svgProps\n}: SvgProps) {\n if (!render || !src) {\n return null\n }\n\n const classes = ['inconel-svg', className].filter(Boolean).join(' ')\n\n return (\n <ReactSVG\n {...svgProps}\n className={classes}\n src={src}\n title={title ?? undefined}\n wrapper=\"span\"\n />\n )\n}\n\nexport default Svg\n","import { HtmlEditor, type HtmlEditorProps } from '../HtmlEditor'\n\nexport type TextEditorProps = HtmlEditorProps\nexport const TextEditor = HtmlEditor\n","import Input, { type InputProps } from '../Input/Input'\n\nexport type TextInputProps = InputProps\nexport const TextInput = Input\n","import {\n forwardRef,\n useId,\n type TextareaHTMLAttributes,\n} from 'react'\n\nimport FieldFeedback from '../FieldFeedback/FieldFeedback'\nimport type { FieldFeedbackContentProps } from '../FieldFeedback/FieldFeedback'\nimport '../shared/field.css'\nimport '../shared/field-controls.css'\nimport './styles.css'\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 ? 'inconel-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","import type { ReactElement, ReactNode } from 'react'\n\nimport { classNames } from '../shared/classNames'\nimport './styles.css'\n\nexport interface TooltipProps {\n content: ReactNode\n children: ReactElement\n placement?: 'top' | 'right' | 'bottom' | 'left'\n className?: string\n}\n\nexport function Tooltip({\n content,\n children,\n placement = 'top',\n className,\n}: TooltipProps) {\n return (\n <span\n className={classNames(\n 'inconel-tooltip',\n `inconel-tooltip--${placement}`,\n className,\n )}\n >\n {children}\n <span className=\"inconel-tooltip__content\" role=\"tooltip\">\n {content}\n </span>\n </span>\n )\n}\n"],"names":["classNames","values","Button","loading","fullWidth","variant","disabled","className","children","props","jsxs","jsx","Checkbox","label","indeterminate","ref","useRef","useEffect","toggleArrayValue","value","item","CheckboxGroup","options","onChange","name","toggle","optionValue","option","FieldFeedback","hint","errorMessage","hintId","errorId","FORMATTED_INPUT_TYPES","LENGTH_VALIDATED_INPUT_TYPES","isFormattedInputType","type","candidate","isLengthValidatedInputType","getInputSeparators","locale","parts","part","parseInputNumber","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","startAdornment","endAdornment","inputClassName","labelClassName","defaultValue","onBlur","onFocus","onKeyDown","onMouseEnter","onMouseLeave","roundMode","roundOnBlur","allowNegative","debounceMs","validateOnSubmit","validationMessages","limit","isClearable","readOnly","clearButtonLabel","readOnlyEmptyValue","autoComplete","ariaDescribedBy","inputProps","generatedId","useId","inputId","controlled","localValue","setLocalValue","useState","currentValue","editingValue","setEditingValue","focused","setFocused","validationError","setValidationError","debounceRef","visibleError","validate","formattedValue","useMemo","buildPayload","rawValue","eventType","char","emitChange","payload","immediate","normalize","text","parsed","handleChange","describedBy","event","editValue","CurrencyInput","Switch","onLabel","offLabel","checked","defaultChecked","CustomizableSwitch","DEFAULT_TABLE_EMPTY_MESSAGE","getRowKey","row","rowKey","Table","columns","data","emptyMessage","onRowClick","column","DataGrid","formatDateValue","DatePicker","formatted","DEFAULT_FILE_UPLOAD_LABEL","FileUpload","files","multiple","onFilesChange","file","DEFAULT_DROP_LABEL","DragDropUpload","onDropFiles","dropLabel","dragging","setDragging","handleDrop","DndFileUpload","DEFAULT_DOT_LOADER_LABEL","DotLoader","ExcelTable","FileUploadText","Filter","onClear","clearLabel","HTMLTable","HtmlEditor","placeholder","InputText","DEFAULT_LOADER_LABEL","Loader","fullscreen","LoaderMini","DEFAULT_MODAL_CLOSE_LABEL","Modal","open","title","footer","closeLabel","closeOnBackdrop","onClose","MultiSelect","MultiSelectWithCheckbox","Option","selected","icon","OptionWithIcon","RadioGroup","DEFAULT_READ_ONLY_EMPTY_VALUE","ReadOnly","emptyValue","SelectInner","optionLabel","getOptionSearchText","isOptionDisabled","isDisabled","isReadOnly","isRequired","isLoading","loadOptions","loadOptionsDebounceMs","asyncErrorMessage","loadingMessage","noOptionsMessage","openMenuButtonLabel","closeMenuButtonLabel","searchLocale","menuPortalTarget","virtualize","virtualizationThreshold","optionHeight","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","getLabel","useCallback","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","mergeClassNames","menuContent","virtualRow","menu","node","createPortal","Select","Tabs","items","internalValue","setInternalValue","activeValue","active","SlideTabs","SocketStatus","connected","connectedLabel","disconnectedLabel","Svg","src","render","svgProps","classes","ReactSVG","TextEditor","TextInput","Textarea","resize","textareaProps","textareaId","Tooltip","content","placement"],"mappings":"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"}
package/dist/styles.css CHANGED
@@ -1 +1 @@
1
- :root{--inconel-font-family: Inter, ui-sans-serif, system-ui, -apple-system, sans-serif;--inconel-color-primary: #6366f1;--inconel-color-primary-hover: #4f46e5;--inconel-color-text: #101828;--inconel-color-text-muted: #667085;--inconel-color-placeholder: #98a2b3;--inconel-color-border: #d0d5dd;--inconel-color-border-subtle: #eaecf0;--inconel-color-surface: #ffffff;--inconel-color-surface-muted: #f8fafc;--inconel-color-danger: #d92d20;--inconel-radius-sm: 8px;--inconel-radius-md: 12px;--inconel-shadow-focus: 0 0 0 4px rgb(99 102 241 / 12%);--inconel-shadow-menu: 0 16px 32px rgb(16 24 40 / 14%)}.inconel-field,.inconel-select-field{position:relative;color:var(--inconel-color-text);font-family:var(--inconel-font-family)}.inconel-field--full-width{width:100%}.inconel-field__label,.inconel-select-field>label{display:block;margin-bottom:8px;color:#344054;font-size:.9rem;font-weight:600}.inconel-field-feedback{margin:7px 0 0;font-size:.82rem}.inconel-field-feedback.is-hint{color:var(--inconel-color-text-muted)}.inconel-field-feedback.is-error,.inconel-field__required{color:var(--inconel-color-danger)}.inconel-input-control,.inconel-select-control{display:flex;overflow:hidden;width:100%;border:1px solid var(--inconel-color-border);border-radius:var(--inconel-radius-md);background:var(--inconel-color-surface);box-shadow:0 1px 2px #1018280d;transition:border-color .16s ease,box-shadow .16s ease}.inconel-input-control:focus-within,.inconel-select-control:focus-within,.inconel-select-control.is-open{border-color:var(--inconel-color-primary);box-shadow:var(--inconel-shadow-focus)}.inconel-input-control.is-invalid,.inconel-select-control.has-error,.inconel-textarea.is-invalid{border-color:var(--inconel-color-danger)}.inconel-input-control.is-disabled,.inconel-select-control.is-disabled{color:var(--inconel-color-placeholder);background:#f2f4f7;cursor:not-allowed}.inconel-input,.inconel-select-control input{width:100%;min-width:0;padding:12px 14px;border:0;outline:0;color:var(--inconel-color-text);background:transparent;font:inherit}.inconel-input::placeholder,.inconel-textarea::placeholder,.inconel-select-control input::placeholder{color:var(--inconel-color-placeholder);opacity:1}.inconel-input-adornment{display:grid;flex:0 0 auto;place-items:center;padding:0 12px;color:var(--inconel-color-text-muted)}.inconel-input-clear{display:grid;width:36px;flex:0 0 auto;place-items:center;border:0;color:var(--inconel-color-placeholder);background:transparent;font-size:1.35rem;cursor:pointer}.inconel-input-clear:hover{color:var(--inconel-color-text)}.inconel-input-clear:focus-visible{outline:2px solid var(--inconel-color-primary);outline-offset:-4px}.inconel-input-readonly{min-height:46px;padding:12px 14px;border:1px solid var(--inconel-color-border);border-radius:var(--inconel-radius-md);background:var(--inconel-color-surface-muted);font-weight:600}.inconel-textarea{display:block;width:100%;min-height:96px;padding:12px 14px;border:1px solid var(--inconel-color-border);border-radius:var(--inconel-radius-md);outline:0;color:var(--inconel-color-text);background:var(--inconel-color-surface);box-shadow:0 1px 2px #1018280d;font:inherit;line-height:1.5;transition:border-color .16s ease,box-shadow .16s ease}.inconel-textarea:focus{border-color:var(--inconel-color-primary);box-shadow:var(--inconel-shadow-focus)}.inconel-select-clear,.inconel-select-toggle{display:grid;width:42px;flex:0 0 auto;place-items:center;border:0;color:var(--inconel-color-text-muted);background:transparent;cursor:pointer}.inconel-select-clear{width:34px;color:var(--inconel-color-placeholder);font-size:1.35rem}.inconel-select-clear:hover{color:#344054}.inconel-select-toggle svg{display:block;transition:transform .16s ease}.is-open .inconel-select-toggle svg{transform:rotate(180deg)}.inconel-select-menu{z-index:50;overflow-y:auto;margin:0;padding:6px;border:1px solid var(--inconel-color-border-subtle);border-radius:var(--inconel-radius-md);background:var(--inconel-color-surface);box-shadow:var(--inconel-shadow-menu);font-family:var(--inconel-font-family)}.inconel-select-menu-portal{z-index:9999}.inconel-select-virtual-content{position:relative;width:100%}.inconel-select-option{display:flex;align-items:center;justify-content:space-between;padding:11px 12px;border-radius:var(--inconel-radius-sm);color:var(--inconel-color-text);cursor:pointer}.inconel-select-option.is-active{background:#f2f4ff}.inconel-select-option.is-selected{color:var(--inconel-color-primary-hover);font-weight:600}.inconel-select-option.is-disabled{color:var(--inconel-color-placeholder);cursor:not-allowed}.inconel-select-message{display:flex;align-items:center;justify-content:center;gap:8px;padding:16px 12px;color:var(--inconel-color-text-muted);text-align:center}.inconel-select-message-error{color:var(--inconel-color-danger)}.inconel-select-spinner{width:16px;height:16px;flex:0 0 auto;border:2px solid var(--inconel-color-border);border-top-color:var(--inconel-color-primary);border-radius:50%;animation:inconel-spin .7s linear infinite}@keyframes inconel-spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.inconel-select-spinner,.inconel-select-toggle svg{animation-duration:1ms;transition-duration:1ms}}
1
+ :root{--inconel-font-family: Inter, ui-sans-serif, system-ui, -apple-system, sans-serif;--inconel-color-primary: #6366f1;--inconel-color-primary-hover: #4f46e5;--inconel-color-text: #101828;--inconel-color-text-muted: #667085;--inconel-color-placeholder: #98a2b3;--inconel-color-border: #d0d5dd;--inconel-color-border-subtle: #eaecf0;--inconel-color-surface: #ffffff;--inconel-color-surface-muted: #f8fafc;--inconel-color-danger: #d92d20;--inconel-radius-sm: 8px;--inconel-radius-md: 12px;--inconel-shadow-focus: 0 0 0 4px rgb(99 102 241 / 12%);--inconel-shadow-menu: 0 16px 32px rgb(16 24 40 / 14%)}@keyframes inconel-spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.inconel-select-spinner,.inconel-select-toggle svg{animation-duration:1ms;transition-duration:1ms}}.inconel-button{display:inline-flex;min-height:40px;align-items:center;justify-content:center;gap:8px;padding:8px 16px;border:1px solid transparent;border-radius:var(--inconel-radius-sm);font:600 .9rem/1 var(--inconel-font-family);cursor:pointer}.inconel-button:disabled{cursor:not-allowed;opacity:.55}.inconel-button--primary{color:#fff;background:var(--inconel-color-primary)}.inconel-button--secondary{border-color:var(--inconel-color-border);color:var(--inconel-color-text);background:var(--inconel-color-surface)}.inconel-button--danger{color:#fff;background:var(--inconel-color-danger)}.inconel-button--ghost{color:var(--inconel-color-primary-hover);background:transparent}.inconel-button--full-width{width:100%}.inconel-button__spinner{width:14px;height:14px;border:2px solid currentcolor;border-right-color:transparent;border-radius:50%;animation:inconel-spin .7s linear infinite}.inconel-checkbox{display:inline-flex;align-items:center;gap:8px;color:var(--inconel-color-text);font-family:var(--inconel-font-family);cursor:pointer}.inconel-checkbox input{position:absolute;overflow:hidden;width:1px;height:1px;clip:rect(0 0 0 0);white-space:nowrap}.inconel-checkbox__control{display:grid;width:18px;height:18px;flex:0 0 auto;place-items:center;border:1px solid var(--inconel-color-border);border-radius:5px;background:var(--inconel-color-surface)}.inconel-checkbox input:checked+.inconel-checkbox__control{border:5px solid var(--inconel-color-primary)}.inconel-checkbox input:focus-visible+.inconel-checkbox__control{box-shadow:var(--inconel-shadow-focus)}.inconel-checkbox-group{display:flex;flex-wrap:wrap;gap:12px}.inconel-field,.inconel-select-field{position:relative;color:var(--inconel-color-text);font-family:var(--inconel-font-family)}.inconel-field--full-width{width:100%}.inconel-field__label,.inconel-select-field>label{display:block;margin-bottom:8px;color:#344054;font-size:.9rem;font-weight:600}.inconel-field-feedback{margin:7px 0 0;font-size:.82rem}.inconel-field-feedback.inconel-is-hint{color:var(--inconel-color-text-muted)}.inconel-field-feedback.inconel-is-error,.inconel-field__required{color:var(--inconel-color-danger)}.inconel-input-control,.inconel-select-control{display:flex;overflow:hidden;width:100%;border:1px solid var(--inconel-color-border);border-radius:var(--inconel-radius-md);background:var(--inconel-color-surface);box-shadow:0 1px 2px #1018280d;transition:border-color .16s ease,box-shadow .16s ease}.inconel-input-control:focus-within,.inconel-select-control:focus-within,.inconel-select-control.inconel-is-open{border-color:var(--inconel-color-primary);box-shadow:var(--inconel-shadow-focus)}.inconel-input-control.inconel-is-invalid,.inconel-select-control.inconel-has-error,.inconel-textarea.inconel-is-invalid{border-color:var(--inconel-color-danger)}.inconel-input-control.inconel-is-disabled,.inconel-select-control.inconel-is-disabled{color:var(--inconel-color-placeholder);background:#f2f4f7;cursor:not-allowed}.inconel-input,.inconel-select-control input{width:100%;min-width:0;padding:12px 14px;border:0;outline:0;color:var(--inconel-color-text);background:transparent;font:inherit}.inconel-input::placeholder,.inconel-textarea::placeholder,.inconel-select-control input::placeholder{color:var(--inconel-color-placeholder);opacity:1}.inconel-input-adornment{display:grid;flex:0 0 auto;place-items:center;padding:0 12px;color:var(--inconel-color-text-muted)}.inconel-input-clear{display:grid;width:36px;flex:0 0 auto;place-items:center;border:0;color:var(--inconel-color-placeholder);background:transparent;font-size:1.35rem;cursor:pointer}.inconel-input-clear:hover{color:var(--inconel-color-text)}.inconel-input-clear:focus-visible{outline:2px solid var(--inconel-color-primary);outline-offset:-4px}.inconel-input-readonly{min-height:46px;padding:12px 14px;border:1px solid var(--inconel-color-border);border-radius:var(--inconel-radius-md);background:var(--inconel-color-surface-muted);font-weight:600}.inconel-switch{display:inline-flex;align-items:center;gap:8px;color:var(--inconel-color-text);font-family:var(--inconel-font-family);cursor:pointer}.inconel-switch input{position:absolute;overflow:hidden;width:1px;height:1px;clip:rect(0 0 0 0);white-space:nowrap}.inconel-switch__track{position:relative;width:42px;height:24px;border-radius:999px;background:var(--inconel-color-border);transition:background .16s ease}.inconel-switch__thumb{position:absolute;top:3px;left:3px;width:18px;height:18px;border-radius:50%;background:#fff;box-shadow:0 1px 3px #1018284d;transition:transform .16s ease}.inconel-switch input:focus-visible+.inconel-switch__track{box-shadow:var(--inconel-shadow-focus)}.inconel-switch input:checked+.inconel-switch__track{background:var(--inconel-color-primary)}.inconel-switch input:checked+.inconel-switch__track .inconel-switch__thumb{transform:translate(18px)}.inconel-table-wrapper{overflow-x:auto;width:100%}.inconel-table{width:100%;border-spacing:0;border-collapse:collapse;color:var(--inconel-color-text);font-family:var(--inconel-font-family)}.inconel-table th,.inconel-table td{padding:11px 13px;border-bottom:1px solid var(--inconel-color-border-subtle);text-align:left}.inconel-table th{color:var(--inconel-color-text-muted);background:var(--inconel-color-surface-muted);font-size:.82rem;font-weight:700}.inconel-table tbody tr:hover{background:var(--inconel-color-surface-muted)}.inconel-table__empty{color:var(--inconel-color-text-muted);text-align:center!important}.inconel-date-picker{display:grid;gap:6px;color:var(--inconel-color-text);font-family:var(--inconel-font-family)}.inconel-date-picker input{min-height:44px;padding:8px 12px;border:1px solid var(--inconel-color-border);border-radius:var(--inconel-radius-md);color:inherit;background:var(--inconel-color-surface);font:inherit}.inconel-file-upload{display:flex;align-items:center;gap:10px;color:var(--inconel-color-text-muted);font-family:var(--inconel-font-family)}.inconel-file-upload input{position:absolute;overflow:hidden;width:1px;height:1px;clip:rect(0 0 0 0);white-space:nowrap}.inconel-file-upload__button{padding:9px 13px;border:1px solid var(--inconel-color-border);border-radius:var(--inconel-radius-sm);color:var(--inconel-color-text);background:var(--inconel-color-surface);cursor:pointer}.inconel-drag-drop-upload{display:flex;min-height:140px;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:20px;border:2px dashed var(--inconel-color-border);border-radius:var(--inconel-radius-md);color:var(--inconel-color-text-muted);font-family:var(--inconel-font-family)}.inconel-drag-drop-upload.inconel-is-dragging{border-color:var(--inconel-color-primary);background:#f2f4ff}.inconel-dot-loader{display:inline-flex;align-items:center;gap:4px}.inconel-dot-loader i{width:6px;height:6px;border-radius:50%;background:var(--inconel-color-primary);animation:inconel-pulse .9s ease-in-out infinite alternate}.inconel-dot-loader i:nth-child(2){animation-delay:.15s}.inconel-dot-loader i:nth-child(3){animation-delay:.3s}@keyframes inconel-pulse{to{opacity:.25;transform:translateY(-3px)}}.inconel-filter{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;padding:16px;border:1px solid var(--inconel-color-border-subtle);border-radius:var(--inconel-radius-md)}.inconel-filter__content{display:flex;flex:1;flex-wrap:wrap;gap:12px}.inconel-editor{overflow:auto;min-height:180px;padding:12px;border:1px solid var(--inconel-color-border);border-radius:var(--inconel-radius-md);color:var(--inconel-color-text);background:var(--inconel-color-surface);font-family:var(--inconel-font-family)}.inconel-editor:empty:before{color:var(--inconel-color-placeholder);content:attr(data-placeholder)}.inconel-loader{display:grid;place-items:center}.inconel-loader--fullscreen{position:fixed;z-index:11000;background:#fffc;inset:0}.inconel-loader__spinner{width:36px;height:36px;border:3px solid var(--inconel-color-border);border-top-color:var(--inconel-color-primary);border-radius:50%;animation:inconel-spin .7s linear infinite}.inconel-loader--mini .inconel-loader__spinner{width:18px;height:18px;border-width:2px}.inconel-modal-backdrop{position:fixed;z-index:10000;display:grid;padding:24px;background:#1018288c;inset:0;place-items:center}.inconel-modal{overflow:hidden;width:min(100%,640px);max-height:calc(100vh - 48px);border-radius:var(--inconel-radius-md);color:var(--inconel-color-text);background:var(--inconel-color-surface);box-shadow:var(--inconel-shadow-menu);font-family:var(--inconel-font-family)}.inconel-modal__header,.inconel-modal__footer{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--inconel-color-border-subtle)}.inconel-modal__footer{justify-content:flex-end;border-top:1px solid var(--inconel-color-border-subtle);border-bottom:0}.inconel-modal__title{font-weight:700}.inconel-modal__content{overflow:auto;padding:20px}.inconel-modal__close{border:0;color:var(--inconel-color-text-muted);background:transparent;font-size:1.5rem;cursor:pointer}.inconel-multi-select{margin:0;padding:12px;border:1px solid var(--inconel-color-border);border-radius:var(--inconel-radius-md)}.inconel-option{display:flex;align-items:center;gap:8px;padding:9px 12px;border-radius:var(--inconel-radius-sm);color:var(--inconel-color-text);cursor:pointer}.inconel-option.inconel-is-selected{color:var(--inconel-color-primary-hover);background:#f2f4ff}.inconel-option.inconel-is-disabled{color:var(--inconel-color-placeholder);cursor:not-allowed}.inconel-radio-group{display:flex;flex-wrap:wrap;gap:12px}.inconel-radio{display:inline-flex;align-items:center;gap:8px;color:var(--inconel-color-text);font-family:var(--inconel-font-family);cursor:pointer}.inconel-radio input{position:absolute;overflow:hidden;width:1px;height:1px;clip:rect(0 0 0 0);white-space:nowrap}.inconel-radio__control{display:grid;width:18px;height:18px;flex:0 0 auto;place-items:center;border:1px solid var(--inconel-color-border);border-radius:50%;background:var(--inconel-color-surface)}.inconel-radio input:checked+.inconel-radio__control{border:5px solid var(--inconel-color-primary)}.inconel-radio input:focus-visible+.inconel-radio__control{box-shadow:var(--inconel-shadow-focus)}.inconel-read-only{display:grid;gap:6px;color:var(--inconel-color-text);font-family:var(--inconel-font-family)}.inconel-read-only__label{color:var(--inconel-color-text-muted);font-size:.82rem;font-weight:600}.inconel-select-clear,.inconel-select-toggle{display:grid;width:42px;flex:0 0 auto;place-items:center;border:0;color:var(--inconel-color-text-muted);background:transparent;cursor:pointer}.inconel-select-clear{width:34px;color:var(--inconel-color-placeholder);font-size:1.35rem}.inconel-select-clear:hover{color:#344054}.inconel-select-toggle svg{display:block;transition:transform .16s ease}.inconel-is-open .inconel-select-toggle svg{transform:rotate(180deg)}.inconel-select-menu{z-index:50;overflow-y:auto;margin:0;padding:6px;border:1px solid var(--inconel-color-border-subtle);border-radius:var(--inconel-radius-md);background:var(--inconel-color-surface);box-shadow:var(--inconel-shadow-menu);font-family:var(--inconel-font-family)}.inconel-select-menu-portal{z-index:9999}.inconel-select-virtual-content{position:relative;width:100%}.inconel-select-option{display:flex;align-items:center;justify-content:space-between;padding:11px 12px;border-radius:var(--inconel-radius-sm);color:var(--inconel-color-text);cursor:pointer}.inconel-select-option.inconel-is-active{background:#f2f4ff}.inconel-select-option.inconel-is-selected{color:var(--inconel-color-primary-hover);font-weight:600}.inconel-select-option.inconel-is-disabled{color:var(--inconel-color-placeholder);cursor:not-allowed}.inconel-select-message{display:flex;align-items:center;justify-content:center;gap:8px;padding:16px 12px;color:var(--inconel-color-text-muted);text-align:center}.inconel-select-message-error{color:var(--inconel-color-danger)}.inconel-select-spinner{width:16px;height:16px;flex:0 0 auto;border:2px solid var(--inconel-color-border);border-top-color:var(--inconel-color-primary);border-radius:50%;animation:inconel-spin .7s linear infinite}.inconel-tabs__list{display:flex;gap:4px;border-bottom:1px solid var(--inconel-color-border)}.inconel-tabs__tab{padding:10px 14px;border:0;border-bottom:2px solid transparent;color:var(--inconel-color-text-muted);background:transparent;font:600 .9rem var(--inconel-font-family);cursor:pointer}.inconel-tabs__tab.inconel-is-active{border-bottom-color:var(--inconel-color-primary);color:var(--inconel-color-primary-hover)}.inconel-tabs__panel{padding:16px 0}.inconel-socket-status{display:inline-flex;align-items:center;gap:7px;color:var(--inconel-color-text-muted);font-family:var(--inconel-font-family)}.inconel-socket-status i{width:8px;height:8px;border-radius:50%}.inconel-socket-status.inconel-is-connected i{background:#12b76a}.inconel-socket-status.inconel-is-disconnected i{background:var(--inconel-color-danger)}.inconel-svg{position:relative;display:inline-flex;align-items:center;justify-content:center}.inconel-svg>span{display:inline-flex;align-items:center;justify-content:center}.inconel-textarea{display:block;width:100%;min-height:96px;padding:12px 14px;border:1px solid var(--inconel-color-border);border-radius:var(--inconel-radius-md);outline:0;color:var(--inconel-color-text);background:var(--inconel-color-surface);box-shadow:0 1px 2px #1018280d;font:inherit;line-height:1.5;transition:border-color .16s ease,box-shadow .16s ease}.inconel-textarea:focus{border-color:var(--inconel-color-primary);box-shadow:var(--inconel-shadow-focus)}.inconel-tooltip{position:relative;display:inline-flex}.inconel-tooltip__content{position:absolute;z-index:1000;bottom:calc(100% + 8px);left:50%;width:max-content;max-width:280px;padding:7px 10px;border-radius:6px;color:#fff;background:#101828;font:.8rem/1.4 var(--inconel-font-family);opacity:0;pointer-events:none;transform:translate(-50%);transition:opacity .12s ease}.inconel-tooltip:hover .inconel-tooltip__content,.inconel-tooltip:focus-within .inconel-tooltip__content{opacity:1}.inconel-tooltip--bottom .inconel-tooltip__content{top:calc(100% + 8px);bottom:auto}.inconel-tooltip--left .inconel-tooltip__content{top:50%;right:calc(100% + 8px);bottom:auto;left:auto;transform:translateY(-50%)}.inconel-tooltip--right .inconel-tooltip__content{top:50%;bottom:auto;left:calc(100% + 8px);transform:translateY(-50%)}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "inconel",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "Accessible, type-safe React UI components for modern applications.",
5
5
  "keywords": [
6
6
  "react",
@@ -59,7 +59,8 @@
59
59
  },
60
60
  "dependencies": {
61
61
  "@floating-ui/react": "^0.27.20",
62
- "@tanstack/react-virtual": "^3.14.8"
62
+ "@tanstack/react-virtual": "^3.14.8",
63
+ "react-svg": "^17.2.4"
63
64
  },
64
65
  "devDependencies": {
65
66
  "@eslint/js": "^9.36.0",