inconel 0.1.35 → 0.1.37
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/Input/Input.cjs +1 -1
- package/dist/cjs/components/Input/Input.cjs.map +1 -1
- package/dist/cjs/components/Select/Select.cjs +1 -1
- package/dist/cjs/components/Select/Select.cjs.map +1 -1
- package/dist/components/Input/Input.d.ts.map +1 -1
- package/dist/components/Input/Input.js +44 -44
- package/dist/components/Input/Input.js.map +1 -1
- package/dist/components/Select/Select.d.ts +1 -1
- package/dist/components/Select/Select.d.ts.map +1 -1
- package/dist/components/Select/Select.js +48 -46
- package/dist/components/Select/Select.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const i=require("react/jsx-runtime"),u=require("react"),Ve=require("../FieldFeedback/FieldFeedback.cjs");;/* empty css */;/* empty css */;/* empty css */;/* empty css */const t=require("./utils.cjs"),
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const i=require("react/jsx-runtime"),u=require("react"),Ve=require("../FieldFeedback/FieldFeedback.cjs");;/* empty css */;/* empty css */;/* empty css */;/* empty css */const t=require("./utils.cjs"),Fe=require("../../adapters/context.cjs"),Ne=u.forwardRef(function({id:H,label:d,hint:_,errorMessage:J,startAdornment:B,endAdornment:E,fullWidth:R=!1,inputClassName:O,labelClassName:S,className:w,required:b,disabled:h,value:y,defaultValue:Q="",onChange:v,onBlur:U,onFocus:X,onKeyDown:Z,onMouseEnter:A,onMouseLeave:W,type:n="text",locale:f="tr-TR",currency:T="TRY",decimalScale:m=0,roundMode:ee="floor",roundOnBlur:ne=!1,min:V,max:F,allowNegative:$=!1,debounceMs:z=0,validateOnSubmit:D=!1,validationMessages:re,mask:s,limit:I,isClearable:te=!1,readOnly:ie=!1,clearButtonLabel:oe,readOnlyEmptyValue:le=null,size:L="md",variant:ue="outlined",autoComplete:se="off","aria-describedby":ae,...ce},de){const fe=Fe.useInconelAdapters(),pe=oe??String(fe.translate?.("clear","Temizle")??"Temizle"),he=u.useId(),j=H??`inconel-input-${he.replace(/:/g,"")}`,C=`${j}-hint`,P=`${j}-error`,K=y!==void 0,[me,Ie]=u.useState(Q),o=K?y:me,[Y,N]=u.useState(""),[je,k]=u.useState(!1),[ge,q]=u.useState(null),a=u.useRef(null),be=re??{},p=J??ge,g=e=>t.validateInputValue(e,{required:!!b,type:n,min:V,max:F,mask:s,messages:be}),M=u.useMemo(()=>t.formatInputValue(o,n,f,m,T,s),[o,T,m,f,s,n]),c=(e,r,l=null)=>({rawValue:e,formattedValue:t.formatInputValue(e,n,f,m,T,s),error:!!g(e),char:l,eventType:r}),x=(e,r=!1)=>{K||Ie(e.rawValue),a.current&&clearTimeout(a.current),v&&(r||z<=0?v(e):a.current=setTimeout(()=>v(e),z))};u.useEffect(()=>()=>{a.current&&clearTimeout(a.current)},[]),u.useEffect(()=>{D&&q(g(o))},[D]);const G=e=>{if(n==="phone"&&s)return e.replace(/\D/g,"");if(t.isFormattedInputType(n)){const r=t.parseInputNumber(e,f);return r===null?null:$?r:Math.abs(r)}return e},ve=e=>{const r=e.replace(/\D/g,"");if(I&&(t.isFormattedInputType(n)||n==="phone")&&r.length>I||I&&t.isLengthValidatedInputType(n)&&e.length>I)return;const l=G(e);typeof l=="number"&&(typeof V=="number"&&l<V||typeof F=="number"&&l>F)||(N(n==="phone"&&s?t.applyInputMask(l,s):e),x(c(l,"change",e.slice(-1)||null)))},Te=[ae,_&&!p?C:void 0,p?P:void 0].filter(Boolean).join(" ")||void 0;return ie?i.jsxs("div",{className:["inconel-field",`inconel-size-${L}`,R?"inconel-field--full-width":"",w??""].join(" "),children:[d&&i.jsx("span",{className:["inconel-field__label",S??""].join(" "),children:d}),i.jsx("div",{className:"inconel-input-readonly","aria-label":d,children:M||le})]}):i.jsxs("div",{className:["inconel-field",`inconel-size-${L}`,R?"inconel-field--full-width":"",w??""].join(" "),children:[d&&i.jsxs("label",{className:["inconel-field__label",S??""].join(" "),htmlFor:j,children:[d,b&&i.jsx("span",{className:"inconel-field__required","aria-hidden":"true",children:" *"})]}),i.jsxs("div",{className:["inconel-input-control",ue==="plain"?"inconel-input-control--plain":"",p?"inconel-is-invalid":"",h?"inconel-is-disabled":""].join(" "),children:[B&&i.jsx("span",{className:"inconel-input-adornment","aria-hidden":"true",children:B}),i.jsx("input",{...ce,ref:de,id:j,type:n==="password"||n==="email"?n:"text",inputMode:t.isFormattedInputType(n)?"decimal":n==="phone"?"tel":void 0,value:je?Y:M,required:b,disabled:h,autoComplete:se,"aria-invalid":!!p,"aria-describedby":Te,className:["inconel-input",O??""].join(" "),onChange:e=>ve(e.target.value),onFocus:e=>{if(h)return;k(!0);const r=n==="phone"&&s?t.applyInputMask(o,s):t.isFormattedInputType(n)?String(o??"").replace(".",t.getInputSeparators(f).decimal):String(o??"");N(r),X?.(c(o,"focus"),e)},onBlur:e=>{k(!1),a.current&&clearTimeout(a.current);let r=G(Y);typeof r=="number"&&(r=t.roundInputNumber(r,m,ne?ee:"floor")),q(g(r));const l=c(r,"blur");x(l,!0),U?.(l,e)},onKeyDown:e=>{t.isFormattedInputType(n)&&!$&&(e.key==="-"||e.key==="Subtract")&&e.preventDefault(),Z?.(c(o,"keydown",e.key),e)},onMouseEnter:e=>A?.(c(o,"mouseenter"),e),onMouseLeave:e=>W?.(c(o,"mouseleave"),e)}),te&&!h&&M&&i.jsx("button",{type:"button",className:"inconel-input-clear","aria-label":pe,onClick:()=>{N(""),q(g(null)),x(c(null,"clear"),!0)},children:"×"}),E&&i.jsx("span",{className:"inconel-input-adornment","aria-hidden":"true",children:E})]}),i.jsx(Ve.default,{hint:_,errorMessage:p,hintId:C,errorId:P})]})});exports.default=Ne;
|
|
2
2
|
//# sourceMappingURL=Input.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Input.cjs","sources":["../../../../src/components/Input/Input.tsx"],"sourcesContent":["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 { useInconelAdapters } from '../../adapters'\nimport FieldFeedback from '../FieldFeedback/FieldFeedback'\nimport type { FieldFeedbackContentProps } from '../FieldFeedback/FieldFeedback'\nimport '../shared/field.css'\nimport '../shared/field-controls.css'\nimport '../shared/sizes.css'\nimport type { ControlSize } from '../shared/types'\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 size?: ControlSize\n variant?: 'outlined' | 'plain'\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 size = 'md',\n variant = 'outlined',\n autoComplete = 'off',\n 'aria-describedby': ariaDescribedBy,\n ...inputProps\n },\n ref,\n) {\n const adapters = useInconelAdapters()\n const resolvedClearButtonLabel =\n clearButtonLabel ??\n String(adapters.translate?.('clear', 'Temizle') ?? 'Temizle')\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 null\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', `inconel-size-${size}`, 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', `inconel-size-${size}`, 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', variant === 'plain' ? 'inconel-input-control--plain' : '', 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 && (\n <button\n type=\"button\"\n className=\"inconel-input-clear\"\n aria-label={resolvedClearButtonLabel}\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"],"names":["Input","forwardRef","id","label","hint","errorMessage","startAdornment","endAdornment","fullWidth","inputClassName","labelClassName","className","required","disabled","value","defaultValue","onChange","onBlur","onFocus","onKeyDown","onMouseEnter","onMouseLeave","type","locale","currency","decimalScale","roundMode","roundOnBlur","min","max","allowNegative","debounceMs","validateOnSubmit","validationMessages","mask","limit","isClearable","readOnly","clearButtonLabel","readOnlyEmptyValue","size","variant","autoComplete","ariaDescribedBy","inputProps","ref","adapters","useInconelAdapters","resolvedClearButtonLabel","generatedId","useId","inputId","hintId","errorId","controlled","localValue","setLocalValue","useState","currentValue","editingValue","setEditingValue","focused","setFocused","validationError","setValidationError","debounceRef","useRef","messages","visibleError","validate","candidate","validateInputValue","formattedValue","useMemo","formatInputValue","buildPayload","rawValue","eventType","char","emitChange","payload","immediate","useEffect","normalize","text","isFormattedInputType","parsed","parseInputNumber","handleChange","digits","isLengthValidatedInputType","applyInputMask","describedBy","jsx","jsxs","event","editValue","getInputSeparators","roundInputNumber","FieldFeedback"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Input.cjs","sources":["../../../../src/components/Input/Input.tsx"],"sourcesContent":["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 { useInconelAdapters } from '../../adapters'\nimport FieldFeedback from '../FieldFeedback/FieldFeedback'\nimport type { FieldFeedbackContentProps } from '../FieldFeedback/FieldFeedback'\nimport '../shared/field.css'\nimport '../shared/field-controls.css'\nimport '../shared/sizes.css'\nimport type { ControlSize } from '../shared/types'\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 size?: ControlSize\n variant?: 'outlined' | 'plain'\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 size = 'md',\n variant = 'outlined',\n autoComplete = 'off',\n 'aria-describedby': ariaDescribedBy,\n ...inputProps\n },\n ref,\n) {\n const adapters = useInconelAdapters()\n const resolvedClearButtonLabel =\n clearButtonLabel ??\n String(adapters.translate?.('clear', 'Temizle') ?? 'Temizle')\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 null\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', `inconel-size-${size}`, 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', `inconel-size-${size}`, 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', variant === 'plain' ? 'inconel-input-control--plain' : '', 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 (\n isFormattedInputType(type) &&\n !allowNegative &&\n (event.key === '-' || event.key === 'Subtract')\n ) 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 && (\n <button\n type=\"button\"\n className=\"inconel-input-clear\"\n aria-label={resolvedClearButtonLabel}\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"],"names":["Input","forwardRef","id","label","hint","errorMessage","startAdornment","endAdornment","fullWidth","inputClassName","labelClassName","className","required","disabled","value","defaultValue","onChange","onBlur","onFocus","onKeyDown","onMouseEnter","onMouseLeave","type","locale","currency","decimalScale","roundMode","roundOnBlur","min","max","allowNegative","debounceMs","validateOnSubmit","validationMessages","mask","limit","isClearable","readOnly","clearButtonLabel","readOnlyEmptyValue","size","variant","autoComplete","ariaDescribedBy","inputProps","ref","adapters","useInconelAdapters","resolvedClearButtonLabel","generatedId","useId","inputId","hintId","errorId","controlled","localValue","setLocalValue","useState","currentValue","editingValue","setEditingValue","focused","setFocused","validationError","setValidationError","debounceRef","useRef","messages","visibleError","validate","candidate","validateInputValue","formattedValue","useMemo","formatInputValue","buildPayload","rawValue","eventType","char","emitChange","payload","immediate","useEffect","normalize","text","isFormattedInputType","parsed","parseInputNumber","handleChange","digits","isLengthValidatedInputType","applyInputMask","describedBy","jsx","jsxs","event","editValue","getInputSeparators","roundInputNumber","FieldFeedback"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const s=require("react/jsx-runtime"),n=require("react"),w=require("@floating-ui/react"),gt=require("@tanstack/react-virtual"),bt=require("react-dom"),u=require("../shared/classNames.cjs");;/* empty css */;/* empty css */;/* empty css */;/* empty css */const
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const s=require("react/jsx-runtime"),n=require("react"),w=require("@floating-ui/react"),gt=require("@tanstack/react-virtual"),bt=require("react-dom"),u=require("../shared/classNames.cjs");;/* empty css */;/* empty css */;/* empty css */;/* empty css */const yt=require("../FieldFeedback/FieldFeedback.cjs"),ht=require("../../adapters/context.cjs");function xt({id:ve,name:P,label:j,options:M=[],value:Se,onChange:L,optionLabel:A="label",optionValue:B="value",getOptionSearchText:F,isOptionDisabled:C=()=>!1,placeholder:ke,isClearable:ee=!1,isDisabled:we=!1,isReadOnly:je=!1,isRequired:te=!1,isLoading:Ie=!1,loadOptions:y,loadOptionsDebounceMs:ne=250,hint:se,errorMessage:h,asyncErrorMessage:Ee,loadingMessage:Ne,noOptionsMessage:qe,clearButtonLabel:Le,openMenuButtonLabel:Ae,closeMenuButtonLabel:Be,searchLocale:$,menuPortalTarget:D,virtualize:Ce=!1,virtualizationThreshold:De=100,optionHeight:ze=44,className:Oe,classNames:o={},styles:i={},onInputChange:I,onMenuOpen:Ve,onMenuClose:le,autoFocus:Re,selectClassName:re,disabled:Me,isSearchable:Fe=!0,readOnly:$e,defaultValue:He,errorPlace:H,onBlur:Te,setFieldValue:Ue,render:Ye=!0,singleValue:Ke,sortByUppercase:_e,inputClassName:We,labelClassName:Ge,size:ae="md",required:Je},Qe){const p=ht.useInconelAdapters(),oe=Ke!==void 0||re!==void 0||H!==void 0,z=Se??Ue??He??null,Xe=n.useId(),d=ve??`inconel-select-${Xe.replace(/:/g,"")}`,ie=`${d}-label`,ce=`${d}-listbox`,ue=`${d}-message`,de=`${d}-hint`,fe=n.useRef(null),E=n.useRef(null),T=n.useRef(null),[l,me]=n.useState(!1),[g,U]=n.useState(""),[c,f]=n.useState(0),[Ze,Pe]=n.useState(null),[et,pe]=n.useState(!1),[tt,ge]=n.useState(!1);n.useEffect(()=>{if(!y)return;const e=new AbortController,t=window.setTimeout(async()=>{pe(!0),ge(!1);try{const a=await y(g,e.signal);e.signal.aborted||Pe(a)}catch{e.signal.aborted||ge(!0)}finally{e.signal.aborted||pe(!1)}},ne);return()=>{window.clearTimeout(t),e.abort()}},[g,y,ne]);const x=y?Ze??M:M,Y=Ie||et,b=we||!!Me,N=je||!!$e,K=te||!!Je,nt=(H==="in"&&h?String(h):ke)??String(p.translate?.("select","Seçim yapın...")??"Seçim yapın..."),st=qe??p.translate?.("noData","Sonuç bulunamadı.")??"Sonuç bulunamadı.",lt=Ne??p.translate?.("loading","Yükleniyor...")??"Yükleniyor...",rt=Le??String(p.translate?.("clearSelection","Seçimi temizle")??"Seçimi temizle"),at=Ae??String(p.translate?.("openOptions","Seçenekleri aç")??"Seçenekleri aç"),ot=Be??String(p.translate?.("closeOptions","Seçenekleri kapat")??"Seçenekleri kapat"),_=n.useCallback(e=>typeof A=="function"?A(e):String(e[A]),[A]),W=n.useCallback(e=>{if(F)return F(e);const t=_(e);return typeof t=="string"||typeof t=="number"?String(t):""},[_,F]),v=n.useCallback(e=>{const t=typeof B=="function"?B(e):e[B];if(typeof t!="string"&&typeof t!="number"&&typeof t!="boolean")throw new TypeError("optionValue must resolve to a string, number or boolean.");return t},[B]),m=z&&typeof z=="object"?v(z):z,G=n.useCallback((e,t)=>{L&&(oe?L(t):L(e,t))},[oe,L]),J=n.useMemo(()=>{const e=new Set;return x.map(v).filter(t=>e.has(t)?!0:(e.add(t),!1))},[x,v]);n.useEffect(()=>{J.length&&console.warn(`Duplicate optionValue found in Select "${j}":`,J)},[J,j]);const Q=[...M,...x].find(e=>v(e)===m),it=Q?W(Q):"",r=n.useMemo(()=>{const e=g.trim().toLocaleLowerCase($);return!e||y?x:x.filter(t=>W(t).toLocaleLowerCase($).includes(e))},[x,W,g,y,$]),{refs:be,floatingStyles:ct}=w.useFloating({open:l,placement:"bottom-start",strategy:D?"fixed":"absolute",whileElementsMounted:w.autoUpdate,middleware:[w.offset(8),w.flip({padding:12}),w.shift({padding:12}),w.size({padding:12,apply({availableHeight:e,rects:t,elements:a}){Object.assign(a.floating.style,{maxHeight:`${Math.min(230,e)}px`,width:`${t.reference.width}px`})}})]}),O=Ce||r.length>=De,V=gt.useVirtualizer({count:r.length,getScrollElement:()=>T.current,estimateSize:()=>ze,overscan:5,enabled:O&&l}),S=n.useCallback(()=>{me(!1),U(""),I?.(""),le?.()},[I,le]),q=()=>{b||N||(l||Ve?.(),me(!0))},R=n.useCallback(()=>{b||N||(G(null,null),U(""),f(0),I?.(""),E.current?.focus())},[b,N,G,I]);n.useImperativeHandle(Qe,()=>({focus:()=>E.current?.focus(),blur:()=>E.current?.blur(),clear:R}),[R]),n.useEffect(()=>{const e=t=>{const a=t.target;!fe.current?.contains(a)&&!T.current?.contains(a)&&S()};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[S]),n.useEffect(()=>{c>=r.length&&f(0)},[c,r.length]),n.useEffect(()=>{O&&l&&r[c]&&V.scrollToIndex(c,{align:"auto"})},[c,r,l,O,V]);const ye=e=>{C(e)||(G(v(e),e),S(),E.current?.focus())},ut=e=>{if(!r.length)return;let t=c;do t=(t+e+r.length)%r.length;while(C(r[t])&&t!==c);f(t)},X=(e=!1)=>{const t=r.map((a,k)=>({option:a,index:k}));return e&&t.reverse(),t.find(({option:a})=>!C(a))?.index??0},dt=e=>{if(e.key==="Backspace"&&!g&&m!==null&&ee){e.preventDefault(),R();return}if(e.key==="ArrowDown"||e.key==="ArrowUp")e.preventDefault(),l?ut(e.key==="ArrowDown"?1:-1):(q(),f(X(e.key==="ArrowUp")));else if(e.key==="Home"&&l)e.preventDefault(),f(X());else if(e.key==="End"&&l)e.preventDefault(),f(X(!0));else if(e.key==="Enter"&&l){e.preventDefault();const t=r[c];t&&ye(t)}else e.key==="Escape"&&l?(e.preventDefault(),S()):e.key==="Tab"&&S()},he=(e,t,a)=>{const k=v(e),xe=C(e);return s.jsxs("div",{id:`${d}-option-${t}`,role:"option","aria-selected":k===m,"aria-disabled":xe,"aria-posinset":t+1,"aria-setsize":r.length,className:u.classNames("inconel-select-option",t===c&&"inconel-is-active",k===m&&"inconel-is-selected",xe&&"inconel-is-disabled",o.option),style:{...a,...i.option},onMouseEnter:()=>f(t),onMouseDown:pt=>pt.preventDefault(),onClick:()=>ye(e),children:[s.jsx("span",{children:_(e)}),k===m&&s.jsx("span",{"aria-hidden":"true",children:"✓"})]},String(k))},ft=Y?s.jsxs("div",{role:"status",className:u.classNames("inconel-select-message",o.message),style:i.message,children:[s.jsx("span",{className:"inconel-select-spinner","aria-hidden":"true"}),lt]}):tt?s.jsx("div",{role:"alert",className:u.classNames("inconel-select-message inconel-select-message-error",o.message),style:i.message,children:Ee}):r.length===0?s.jsx("div",{className:u.classNames("inconel-select-message",o.message),style:i.message,children:st}):O?s.jsx("div",{role:"presentation",className:"inconel-select-virtual-content",style:{height:V.getTotalSize()},children:V.getVirtualItems().map(e=>he(r[e.index],e.index,{position:"absolute",top:0,left:0,width:"100%",height:e.size,transform:`translateY(${e.start}px)`}))}):r.map((e,t)=>he(e,t)),Z=l?s.jsx("div",{ref:e=>{T.current=e,be.setFloating(e)},id:ce,role:"listbox","aria-labelledby":j?ie:void 0,className:u.classNames("inconel-select-menu",D&&"inconel-select-menu-portal",o.menu),style:{...ct,...i.menu},children:ft}):null,mt=h?ue:se?de:void 0;return Ye?s.jsxs("div",{ref:fe,className:u.classNames("inconel-select-field",`inconel-size-${ae}`,`inconel-select-field--${ae}`,Oe,o.root),style:i.root,children:[j&&s.jsxs("label",{id:ie,htmlFor:d,className:u.classNames(o.label,Ge),style:i.label,children:[j,K&&s.jsx("span",{"aria-hidden":"true",children:" *"})]}),s.jsxs("div",{ref:be.setReference,className:u.classNames("inconel-select-control",l&&"inconel-is-open",b&&"inconel-is-disabled",!!h&&"inconel-has-error",o.control),style:i.control,children:[s.jsx("input",{ref:E,id:d,role:"combobox","aria-expanded":l,"aria-controls":ce,"aria-autocomplete":"list","aria-activedescendant":l&&r[c]?`${d}-option-${c}`:void 0,"aria-describedby":mt,"aria-invalid":!!h,"aria-required":te,"aria-busy":Y,required:K,disabled:b,readOnly:N||!Fe,autoFocus:Re,autoComplete:"off",placeholder:nt,value:g||it,className:u.classNames(o.input,We,re),style:i.input,onChange:e=>{const t=_e?e.target.value.toLocaleUpperCase(p.locale??"tr-TR"):e.target.value;U(t),f(0),I?.(t),q()},onClick:q,onFocus:e=>{q(),Q&&!g&&e.currentTarget.select()},onBlur:Te,onKeyDown:dt}),Y&&s.jsx("span",{className:"inconel-select-spinner","aria-hidden":"true"}),ee&&m!==null&&!b&&!N&&s.jsx("button",{type:"button",className:u.classNames("inconel-select-clear",o.clearButton),style:i.clearButton,"aria-label":rt,onClick:R,children:"×"}),s.jsx("button",{type:"button",className:u.classNames("inconel-select-toggle",o.toggleButton),style:i.toggleButton,"aria-label":l?ot:at,"aria-expanded":l,disabled:b,tabIndex:-1,onClick:()=>l?S():q(),children:s.jsx("svg",{"aria-hidden":"true",viewBox:"0 0 20 20",width:"20",height:"20",fill:"none",children:s.jsx("path",{d:"m5 7.5 5 5 5-5",stroke:"currentColor",strokeWidth:"1.75",strokeLinecap:"round",strokeLinejoin:"round"})})})]}),P&&s.jsx("input",{type:"hidden",name:P,value:m===null?"":String(m),required:K}),s.jsx(yt.default,{hint:se,errorMessage:H==="in"?void 0:h,hintId:de,errorId:ue}),D&&Z?bt.createPortal(Z,D):Z]}):null}const vt=n.forwardRef(xt);exports.default=vt;
|
|
2
2
|
//# sourceMappingURL=Select.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Select.cjs","sources":["../../../../src/components/Select/Select.tsx"],"sourcesContent":["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 as floatingSize,\n useFloating,\n} from '@floating-ui/react'\nimport { useVirtualizer } from '@tanstack/react-virtual'\nimport { createPortal } from 'react-dom'\nimport { useInconelAdapters } from '../../adapters'\nimport { classNames as mergeClassNames } from '../shared/classNames'\nimport '../shared/field.css'\nimport '../shared/field-controls.css'\nimport '../shared/sizes.css'\nimport type { ControlSize } from '../shared/types'\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?: ReactNode\n options?: T[]\n value?: OptionValue | T | null\n onChange?:\n | ((value: OptionValue | null, option: T | null) => void)\n | ((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 autoFocus?: boolean\n selectClassName?: string\n disabled?: boolean\n isSearchable?: boolean\n readOnly?: boolean\n defaultValue?: OptionValue | T | null\n errorPlace?: 'in' | 'out' | string\n onBlur?: () => void\n setFieldValue?: OptionValue | string | null\n render?: boolean\n singleValue?: boolean\n sortByUppercase?: boolean\n selectClassNamePrefix?: string\n menuPlacement?: 'auto' | 'bottom' | 'top'\n maxMenuHeight?: number\n inputClassName?: string\n labelClassName?: string\n size?: ControlSize\n required?: boolean\n components?: Record<string, unknown>\n}\n\nfunction SelectInner<T extends object>(\n {\n id,\n name,\n label,\n options = [],\n value,\n onChange,\n optionLabel = 'label' as keyof T,\n optionValue = 'value' as keyof T,\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 autoFocus,\n selectClassName,\n disabled,\n isSearchable = true,\n readOnly,\n defaultValue,\n errorPlace,\n onBlur,\n setFieldValue,\n render = true,\n singleValue,\n sortByUppercase,\n inputClassName,\n labelClassName,\n size = 'md',\n required,\n }: SelectProps<T>,\n forwardedRef: ForwardedRef<SelectHandle>,\n) {\n const adapters = useInconelAdapters()\n const legacyMode =\n singleValue !== undefined ||\n selectClassName !== undefined ||\n errorPlace !== undefined\n const controlledValue = value ?? setFieldValue ?? defaultValue ?? null\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 const componentDisabled = isDisabled || Boolean(disabled)\n const componentReadOnly = isReadOnly || Boolean(readOnly)\n const componentRequired = isRequired || Boolean(required)\n const resolvedPlaceholder =\n (errorPlace === 'in' && errorMessage\n ? String(errorMessage)\n : placeholder) ??\n String(adapters.translate?.('select', 'Seçim yapın...') ?? 'Seçim yapın...')\n const resolvedNoOptionsMessage =\n noOptionsMessage ??\n adapters.translate?.('noData', 'Sonuç bulunamadı.') ??\n 'Sonuç bulunamadı.'\n const resolvedLoadingMessage =\n loadingMessage ??\n adapters.translate?.('loading', 'Yükleniyor...') ??\n 'Yükleniyor...'\n const resolvedClearLabel =\n clearButtonLabel ??\n String(adapters.translate?.('clearSelection', 'Seçimi temizle') ?? 'Seçimi temizle')\n const resolvedOpenLabel =\n openMenuButtonLabel ??\n String(adapters.translate?.('openOptions', 'Seçenekleri aç') ?? 'Seçenekleri aç')\n const resolvedCloseLabel =\n closeMenuButtonLabel ??\n String(adapters.translate?.('closeOptions', 'Seçenekleri kapat') ?? 'Seçenekleri kapat')\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 normalizedValue =\n controlledValue && typeof controlledValue === 'object'\n ? getValue(controlledValue as T)\n : (controlledValue as OptionValue | null)\n\n const emitChange = useCallback(\n (nextValue: OptionValue | null, option: T | null) => {\n if (!onChange) return\n if (legacyMode) {\n ;(onChange as (selected: T | null) => void)(option)\n } else {\n ;(\n onChange as (\n value: OptionValue | null,\n selected: T | null,\n ) => void\n )(nextValue, option)\n }\n },\n [legacyMode, onChange],\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) === normalizedValue,\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 floatingSize({\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 (componentDisabled || componentReadOnly) return\n if (!isOpen) onMenuOpen?.()\n setIsOpen(true)\n }\n\n const clearSelection = useCallback(() => {\n if (componentDisabled || componentReadOnly) return\n emitChange(null, null)\n setInputValue('')\n setActiveIndex(0)\n onInputChange?.('')\n inputRef.current?.focus()\n }, [componentDisabled, componentReadOnly, emitChange, 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 emitChange(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 normalizedValue !== 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 === normalizedValue}\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 === normalizedValue && '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 === normalizedValue && <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 {resolvedLoadingMessage}\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 {resolvedNoOptionsMessage}\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={label ? labelId : undefined}\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 if (!render) return null\n\n return (\n <div\n ref={rootRef}\n className={mergeClassNames(\n 'inconel-select-field',\n `inconel-size-${size}`,\n `inconel-select-field--${size}`,\n className,\n classNames.root,\n )}\n style={styles.root}\n >\n {label && (\n <label\n id={labelId}\n htmlFor={inputId}\n className={mergeClassNames(classNames.label, labelClassName)}\n style={styles.label}\n >\n {label}\n {componentRequired && <span aria-hidden=\"true\"> *</span>}\n </label>\n )}\n <div\n ref={refs.setReference}\n className={mergeClassNames(\n 'inconel-select-control',\n isOpen && 'inconel-is-open',\n componentDisabled && '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={componentRequired}\n disabled={componentDisabled}\n readOnly={componentReadOnly || !isSearchable}\n autoFocus={autoFocus}\n autoComplete=\"off\"\n placeholder={resolvedPlaceholder}\n value={inputValue || selectedLabel}\n className={mergeClassNames(classNames.input, inputClassName, selectClassName)}\n style={styles.input}\n onChange={(event) => {\n const nextInput = sortByUppercase\n ? event.target.value.toLocaleUpperCase(\n adapters.locale ?? 'tr-TR',\n )\n : event.target.value\n setInputValue(nextInput)\n setActiveIndex(0)\n onInputChange?.(nextInput)\n openMenu()\n }}\n onClick={openMenu}\n onFocus={(event) => {\n openMenu()\n if (selectedOption && !inputValue) event.currentTarget.select()\n }}\n onBlur={onBlur}\n onKeyDown={handleKeyDown}\n />\n {loading && <span className=\"inconel-select-spinner\" aria-hidden=\"true\" />}\n {isClearable && normalizedValue !== null && !componentDisabled && !componentReadOnly && (\n <button\n type=\"button\"\n className={mergeClassNames('inconel-select-clear', classNames.clearButton)}\n style={styles.clearButton}\n aria-label={resolvedClearLabel}\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 ? resolvedCloseLabel : resolvedOpenLabel}\n aria-expanded={isOpen}\n disabled={componentDisabled}\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={normalizedValue ?? ''}\n required={componentRequired}\n />\n )}\n <FieldFeedback\n hint={hint}\n errorMessage={errorPlace === 'in' ? undefined : 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"],"names":["SelectInner","id","name","label","options","value","onChange","optionLabel","optionValue","getOptionSearchText","isOptionDisabled","placeholder","isClearable","isDisabled","isReadOnly","isRequired","isLoading","loadOptions","loadOptionsDebounceMs","hint","errorMessage","asyncErrorMessage","loadingMessage","noOptionsMessage","clearButtonLabel","openMenuButtonLabel","closeMenuButtonLabel","searchLocale","menuPortalTarget","virtualize","virtualizationThreshold","optionHeight","className","classNames","styles","onInputChange","onMenuOpen","onMenuClose","autoFocus","selectClassName","disabled","isSearchable","readOnly","defaultValue","errorPlace","onBlur","setFieldValue","render","singleValue","sortByUppercase","inputClassName","labelClassName","size","required","forwardedRef","adapters","useInconelAdapters","legacyMode","controlledValue","generatedId","useId","inputId","labelId","listboxId","messageId","hintId","rootRef","useRef","inputRef","menuRef","isOpen","setIsOpen","useState","inputValue","setInputValue","activeIndex","setActiveIndex","asyncOptions","setAsyncOptions","isAsyncLoading","setIsAsyncLoading","hasAsyncError","setHasAsyncError","useEffect","controller","timeout","loadedOptions","availableOptions","loading","componentDisabled","componentReadOnly","componentRequired","resolvedPlaceholder","resolvedNoOptionsMessage","resolvedLoadingMessage","resolvedClearLabel","resolvedOpenLabel","resolvedCloseLabel","getLabel","useCallback","option","getSearchLabel","renderedLabel","getValue","resolvedValue","normalizedValue","emitChange","nextValue","duplicateValues","useMemo","seen","optionId","selectedOption","selectedLabel","filteredOptions","query","refs","floatingStyles","useFloating","autoUpdate","offset","flip","shift","floatingSize","availableHeight","rects","elements","shouldVirtualize","virtualizer","useVirtualizer","closeMenu","openMenu","clearSelection","useImperativeHandle","closeOnOutsideClick","event","target","selectOption","moveActiveOption","direction","nextIndex","findEnabledIndex","fromEnd","entries","index","handleKeyDown","activeOption","renderOption","style","jsxs","mergeClassNames","jsx","menuContent","virtualRow","menu","node","describedBy","nextInput","FieldFeedback","createPortal","Select","forwardRef"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Select.cjs","sources":["../../../../src/components/Select/Select.tsx"],"sourcesContent":["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 as floatingSize,\n useFloating,\n} from '@floating-ui/react'\nimport { useVirtualizer } from '@tanstack/react-virtual'\nimport { createPortal } from 'react-dom'\nimport { useInconelAdapters } from '../../adapters'\nimport { classNames as mergeClassNames } from '../shared/classNames'\nimport '../shared/field.css'\nimport '../shared/field-controls.css'\nimport '../shared/sizes.css'\nimport type { ControlSize } from '../shared/types'\nimport './styles.css'\n\nimport FieldFeedback from '../FieldFeedback/FieldFeedback'\nimport type { FieldFeedbackContentProps } from '../FieldFeedback/FieldFeedback'\n\nexport type OptionValue = string | number | boolean\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?: ReactNode\n options?: T[]\n value?: OptionValue | T | null\n onChange?:\n | ((value: OptionValue | null, option: T | null) => void)\n | ((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 autoFocus?: boolean\n selectClassName?: string\n disabled?: boolean\n isSearchable?: boolean\n readOnly?: boolean\n defaultValue?: OptionValue | T | null\n errorPlace?: 'in' | 'out' | string\n onBlur?: () => void\n setFieldValue?: OptionValue | string | null\n render?: boolean\n singleValue?: boolean\n sortByUppercase?: boolean\n selectClassNamePrefix?: string\n menuPlacement?: 'auto' | 'bottom' | 'top'\n maxMenuHeight?: number\n inputClassName?: string\n labelClassName?: string\n size?: ControlSize\n required?: boolean\n components?: Record<string, unknown>\n}\n\nfunction SelectInner<T extends object>(\n {\n id,\n name,\n label,\n options = [],\n value,\n onChange,\n optionLabel = 'label' as keyof T,\n optionValue = 'value' as keyof T,\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 autoFocus,\n selectClassName,\n disabled,\n isSearchable = true,\n readOnly,\n defaultValue,\n errorPlace,\n onBlur,\n setFieldValue,\n render = true,\n singleValue,\n sortByUppercase,\n inputClassName,\n labelClassName,\n size = 'md',\n required,\n }: SelectProps<T>,\n forwardedRef: ForwardedRef<SelectHandle>,\n) {\n const adapters = useInconelAdapters()\n const legacyMode =\n singleValue !== undefined ||\n selectClassName !== undefined ||\n errorPlace !== undefined\n const controlledValue = value ?? setFieldValue ?? defaultValue ?? null\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 const componentDisabled = isDisabled || Boolean(disabled)\n const componentReadOnly = isReadOnly || Boolean(readOnly)\n const componentRequired = isRequired || Boolean(required)\n const resolvedPlaceholder =\n (errorPlace === 'in' && errorMessage\n ? String(errorMessage)\n : placeholder) ??\n String(adapters.translate?.('select', 'Seçim yapın...') ?? 'Seçim yapın...')\n const resolvedNoOptionsMessage =\n noOptionsMessage ??\n adapters.translate?.('noData', 'Sonuç bulunamadı.') ??\n 'Sonuç bulunamadı.'\n const resolvedLoadingMessage =\n loadingMessage ??\n adapters.translate?.('loading', 'Yükleniyor...') ??\n 'Yükleniyor...'\n const resolvedClearLabel =\n clearButtonLabel ??\n String(adapters.translate?.('clearSelection', 'Seçimi temizle') ?? 'Seçimi temizle')\n const resolvedOpenLabel =\n openMenuButtonLabel ??\n String(adapters.translate?.('openOptions', 'Seçenekleri aç') ?? 'Seçenekleri aç')\n const resolvedCloseLabel =\n closeMenuButtonLabel ??\n String(adapters.translate?.('closeOptions', 'Seçenekleri kapat') ?? 'Seçenekleri kapat')\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 typeof resolvedValue !== 'boolean'\n ) {\n throw new TypeError(\n 'optionValue must resolve to a string, number or boolean.',\n )\n }\n return resolvedValue\n },\n [optionValue],\n )\n\n const normalizedValue =\n controlledValue && typeof controlledValue === 'object'\n ? getValue(controlledValue as T)\n : (controlledValue as OptionValue | null)\n\n const emitChange = useCallback(\n (nextValue: OptionValue | null, option: T | null) => {\n if (!onChange) return\n if (legacyMode) {\n ;(onChange as (selected: T | null) => void)(option)\n } else {\n ;(\n onChange as (\n value: OptionValue | null,\n selected: T | null,\n ) => void\n )(nextValue, option)\n }\n },\n [legacyMode, onChange],\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) === normalizedValue,\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 floatingSize({\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 (componentDisabled || componentReadOnly) return\n if (!isOpen) onMenuOpen?.()\n setIsOpen(true)\n }\n\n const clearSelection = useCallback(() => {\n if (componentDisabled || componentReadOnly) return\n emitChange(null, null)\n setInputValue('')\n setActiveIndex(0)\n onInputChange?.('')\n inputRef.current?.focus()\n }, [componentDisabled, componentReadOnly, emitChange, 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 emitChange(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 normalizedValue !== 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={String(optionId)}\n role=\"option\"\n aria-selected={optionId === normalizedValue}\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 === normalizedValue && '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 === normalizedValue && <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 {resolvedLoadingMessage}\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 {resolvedNoOptionsMessage}\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={label ? labelId : undefined}\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 if (!render) return null\n\n return (\n <div\n ref={rootRef}\n className={mergeClassNames(\n 'inconel-select-field',\n `inconel-size-${size}`,\n `inconel-select-field--${size}`,\n className,\n classNames.root,\n )}\n style={styles.root}\n >\n {label && (\n <label\n id={labelId}\n htmlFor={inputId}\n className={mergeClassNames(classNames.label, labelClassName)}\n style={styles.label}\n >\n {label}\n {componentRequired && <span aria-hidden=\"true\"> *</span>}\n </label>\n )}\n <div\n ref={refs.setReference}\n className={mergeClassNames(\n 'inconel-select-control',\n isOpen && 'inconel-is-open',\n componentDisabled && '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={componentRequired}\n disabled={componentDisabled}\n readOnly={componentReadOnly || !isSearchable}\n autoFocus={autoFocus}\n autoComplete=\"off\"\n placeholder={resolvedPlaceholder}\n value={inputValue || selectedLabel}\n className={mergeClassNames(classNames.input, inputClassName, selectClassName)}\n style={styles.input}\n onChange={(event) => {\n const nextInput = sortByUppercase\n ? event.target.value.toLocaleUpperCase(\n adapters.locale ?? 'tr-TR',\n )\n : event.target.value\n setInputValue(nextInput)\n setActiveIndex(0)\n onInputChange?.(nextInput)\n openMenu()\n }}\n onClick={openMenu}\n onFocus={(event) => {\n openMenu()\n if (selectedOption && !inputValue) event.currentTarget.select()\n }}\n onBlur={onBlur}\n onKeyDown={handleKeyDown}\n />\n {loading && <span className=\"inconel-select-spinner\" aria-hidden=\"true\" />}\n {isClearable && normalizedValue !== null && !componentDisabled && !componentReadOnly && (\n <button\n type=\"button\"\n className={mergeClassNames('inconel-select-clear', classNames.clearButton)}\n style={styles.clearButton}\n aria-label={resolvedClearLabel}\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 ? resolvedCloseLabel : resolvedOpenLabel}\n aria-expanded={isOpen}\n disabled={componentDisabled}\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={normalizedValue === null ? '' : String(normalizedValue)}\n required={componentRequired}\n />\n )}\n <FieldFeedback\n hint={hint}\n errorMessage={errorPlace === 'in' ? undefined : 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"],"names":["SelectInner","id","name","label","options","value","onChange","optionLabel","optionValue","getOptionSearchText","isOptionDisabled","placeholder","isClearable","isDisabled","isReadOnly","isRequired","isLoading","loadOptions","loadOptionsDebounceMs","hint","errorMessage","asyncErrorMessage","loadingMessage","noOptionsMessage","clearButtonLabel","openMenuButtonLabel","closeMenuButtonLabel","searchLocale","menuPortalTarget","virtualize","virtualizationThreshold","optionHeight","className","classNames","styles","onInputChange","onMenuOpen","onMenuClose","autoFocus","selectClassName","disabled","isSearchable","readOnly","defaultValue","errorPlace","onBlur","setFieldValue","render","singleValue","sortByUppercase","inputClassName","labelClassName","size","required","forwardedRef","adapters","useInconelAdapters","legacyMode","controlledValue","generatedId","useId","inputId","labelId","listboxId","messageId","hintId","rootRef","useRef","inputRef","menuRef","isOpen","setIsOpen","useState","inputValue","setInputValue","activeIndex","setActiveIndex","asyncOptions","setAsyncOptions","isAsyncLoading","setIsAsyncLoading","hasAsyncError","setHasAsyncError","useEffect","controller","timeout","loadedOptions","availableOptions","loading","componentDisabled","componentReadOnly","componentRequired","resolvedPlaceholder","resolvedNoOptionsMessage","resolvedLoadingMessage","resolvedClearLabel","resolvedOpenLabel","resolvedCloseLabel","getLabel","useCallback","option","getSearchLabel","renderedLabel","getValue","resolvedValue","normalizedValue","emitChange","nextValue","duplicateValues","useMemo","seen","optionId","selectedOption","selectedLabel","filteredOptions","query","refs","floatingStyles","useFloating","autoUpdate","offset","flip","shift","floatingSize","availableHeight","rects","elements","shouldVirtualize","virtualizer","useVirtualizer","closeMenu","openMenu","clearSelection","useImperativeHandle","closeOnOutsideClick","event","target","selectOption","moveActiveOption","direction","nextIndex","findEnabledIndex","fromEnd","entries","index","handleKeyDown","activeOption","renderOption","style","jsxs","mergeClassNames","jsx","menuContent","virtualRow","menu","node","describedBy","nextInput","FieldFeedback","createPortal","Select","forwardRef"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Input.d.ts","sourceRoot":"","sources":["../../../src/components/Input/Input.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Input.d.ts","sourceRoot":"","sources":["../../../src/components/Input/Input.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import { forwardRef as Ee, useId as Fe, useState as
|
|
1
|
+
import { jsxs as I, jsx as t } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef as Ee, useId as Fe, useState as v, useRef as Me, useMemo as _e, useEffect as X } from "react";
|
|
3
3
|
import Re from "../FieldFeedback/FieldFeedback.js";
|
|
4
4
|
/* empty css */
|
|
5
5
|
/* empty css */
|
|
6
6
|
/* empty css */
|
|
7
7
|
/* empty css */
|
|
8
|
-
import { formatInputValue as
|
|
8
|
+
import { formatInputValue as Z, isFormattedInputType as f, applyInputMask as k, getInputSeparators as $e, validateInputValue as ze, parseInputNumber as De, isLengthValidatedInputType as Le, roundInputNumber as Ce } from "./utils.js";
|
|
9
9
|
import { useInconelAdapters as Se } from "../../adapters/context.js";
|
|
10
|
-
const
|
|
11
|
-
id:
|
|
10
|
+
const Ze = Ee(function({
|
|
11
|
+
id: y,
|
|
12
12
|
label: s,
|
|
13
13
|
hint: _,
|
|
14
14
|
errorMessage: A,
|
|
@@ -19,7 +19,7 @@ const Xe = Ee(function({
|
|
|
19
19
|
labelClassName: D,
|
|
20
20
|
className: L,
|
|
21
21
|
required: V,
|
|
22
|
-
disabled:
|
|
22
|
+
disabled: p,
|
|
23
23
|
value: C,
|
|
24
24
|
defaultValue: W = "",
|
|
25
25
|
onChange: N,
|
|
@@ -31,7 +31,7 @@ const Xe = Ee(function({
|
|
|
31
31
|
type: n = "text",
|
|
32
32
|
locale: c = "tr-TR",
|
|
33
33
|
currency: T = "TRY",
|
|
34
|
-
decimalScale:
|
|
34
|
+
decimalScale: m = 0,
|
|
35
35
|
roundMode: ie = "floor",
|
|
36
36
|
roundOnBlur: le = !1,
|
|
37
37
|
min: j,
|
|
@@ -41,7 +41,7 @@ const Xe = Ee(function({
|
|
|
41
41
|
validateOnSubmit: P = !1,
|
|
42
42
|
validationMessages: te,
|
|
43
43
|
mask: l,
|
|
44
|
-
limit:
|
|
44
|
+
limit: h,
|
|
45
45
|
isClearable: ae = !1,
|
|
46
46
|
readOnly: ue = !1,
|
|
47
47
|
clearButtonLabel: se,
|
|
@@ -52,7 +52,7 @@ const Xe = Ee(function({
|
|
|
52
52
|
"aria-describedby": pe,
|
|
53
53
|
...me
|
|
54
54
|
}, he) {
|
|
55
|
-
const ge = Se(), be = se ?? String(ge.translate?.("clear", "Temizle") ?? "Temizle"), Ie = Fe(),
|
|
55
|
+
const ge = Se(), be = se ?? String(ge.translate?.("clear", "Temizle") ?? "Temizle"), Ie = Fe(), g = y ?? `inconel-input-${Ie.replace(/:/g, "")}`, q = `${g}-hint`, G = `${g}-error`, H = C !== void 0, [ve, Ve] = v(W), o = H ? C : ve, [J, w] = v(""), [Ne, Q] = v(!1), [Te, E] = v(null), a = Me(null), je = te ?? {}, d = A ?? Te, b = (e) => ze(e, {
|
|
56
56
|
required: !!V,
|
|
57
57
|
type: n,
|
|
58
58
|
min: j,
|
|
@@ -60,109 +60,109 @@ const Xe = Ee(function({
|
|
|
60
60
|
mask: l,
|
|
61
61
|
messages: je
|
|
62
62
|
}), F = _e(
|
|
63
|
-
() =>
|
|
63
|
+
() => Z(
|
|
64
64
|
o,
|
|
65
65
|
n,
|
|
66
66
|
c,
|
|
67
|
-
|
|
67
|
+
m,
|
|
68
68
|
T,
|
|
69
69
|
l
|
|
70
70
|
),
|
|
71
|
-
[o, T,
|
|
71
|
+
[o, T, m, c, l, n]
|
|
72
72
|
), u = (e, r, i = null) => ({
|
|
73
73
|
rawValue: e,
|
|
74
|
-
formattedValue:
|
|
74
|
+
formattedValue: Z(
|
|
75
75
|
e,
|
|
76
76
|
n,
|
|
77
77
|
c,
|
|
78
|
-
|
|
78
|
+
m,
|
|
79
79
|
T,
|
|
80
80
|
l
|
|
81
81
|
),
|
|
82
|
-
error: !!
|
|
82
|
+
error: !!b(e),
|
|
83
83
|
char: i,
|
|
84
84
|
eventType: r
|
|
85
85
|
}), M = (e, r = !1) => {
|
|
86
|
-
|
|
86
|
+
H || Ve(e.rawValue), a.current && clearTimeout(a.current), N && (r || K <= 0 ? N(e) : a.current = setTimeout(() => N(e), K));
|
|
87
87
|
};
|
|
88
|
-
|
|
88
|
+
X(() => () => {
|
|
89
89
|
a.current && clearTimeout(a.current);
|
|
90
|
-
}, []),
|
|
91
|
-
P && E(
|
|
90
|
+
}, []), X(() => {
|
|
91
|
+
P && E(b(o));
|
|
92
92
|
}, [P]);
|
|
93
|
-
const
|
|
93
|
+
const U = (e) => {
|
|
94
94
|
if (n === "phone" && l) return e.replace(/\D/g, "");
|
|
95
|
-
if (
|
|
95
|
+
if (f(n)) {
|
|
96
96
|
const r = De(e, c);
|
|
97
97
|
return r === null ? null : S ? r : Math.abs(r);
|
|
98
98
|
}
|
|
99
99
|
return e;
|
|
100
100
|
}, Be = (e) => {
|
|
101
101
|
const r = e.replace(/\D/g, "");
|
|
102
|
-
if (
|
|
103
|
-
const i =
|
|
102
|
+
if (h && (f(n) || n === "phone") && r.length > h || h && Le(n) && e.length > h) return;
|
|
103
|
+
const i = U(e);
|
|
104
104
|
typeof i == "number" && (typeof j == "number" && i < j || typeof B == "number" && i > B) || (w(
|
|
105
|
-
n === "phone" && l ?
|
|
105
|
+
n === "phone" && l ? k(i, l) : e
|
|
106
106
|
), M(u(i, "change", e.slice(-1) || null)));
|
|
107
107
|
}, we = [
|
|
108
108
|
pe,
|
|
109
109
|
_ && !d ? q : void 0,
|
|
110
|
-
d ?
|
|
110
|
+
d ? G : void 0
|
|
111
111
|
].filter(Boolean).join(" ") || void 0;
|
|
112
|
-
return ue ? /* @__PURE__ */
|
|
112
|
+
return ue ? /* @__PURE__ */ I("div", { className: ["inconel-field", `inconel-size-${Y}`, z ? "inconel-field--full-width" : "", L ?? ""].join(" "), children: [
|
|
113
113
|
s && /* @__PURE__ */ t("span", { className: ["inconel-field__label", D ?? ""].join(" "), children: s }),
|
|
114
114
|
/* @__PURE__ */ t("div", { className: "inconel-input-readonly", "aria-label": s, children: F || ce })
|
|
115
|
-
] }) : /* @__PURE__ */
|
|
116
|
-
s && /* @__PURE__ */
|
|
115
|
+
] }) : /* @__PURE__ */ I("div", { className: ["inconel-field", `inconel-size-${Y}`, z ? "inconel-field--full-width" : "", L ?? ""].join(" "), children: [
|
|
116
|
+
s && /* @__PURE__ */ I("label", { className: ["inconel-field__label", D ?? ""].join(" "), htmlFor: g, children: [
|
|
117
117
|
s,
|
|
118
118
|
V && /* @__PURE__ */ t("span", { className: "inconel-field__required", "aria-hidden": "true", children: " *" })
|
|
119
119
|
] }),
|
|
120
|
-
/* @__PURE__ */
|
|
120
|
+
/* @__PURE__ */ I("div", { className: ["inconel-input-control", de === "plain" ? "inconel-input-control--plain" : "", d ? "inconel-is-invalid" : "", p ? "inconel-is-disabled" : ""].join(" "), children: [
|
|
121
121
|
R && /* @__PURE__ */ t("span", { className: "inconel-input-adornment", "aria-hidden": "true", children: R }),
|
|
122
122
|
/* @__PURE__ */ t(
|
|
123
123
|
"input",
|
|
124
124
|
{
|
|
125
125
|
...me,
|
|
126
126
|
ref: he,
|
|
127
|
-
id:
|
|
127
|
+
id: g,
|
|
128
128
|
type: n === "password" || n === "email" ? n : "text",
|
|
129
|
-
inputMode:
|
|
130
|
-
value: Ne ?
|
|
129
|
+
inputMode: f(n) ? "decimal" : n === "phone" ? "tel" : void 0,
|
|
130
|
+
value: Ne ? J : F,
|
|
131
131
|
required: V,
|
|
132
|
-
disabled:
|
|
132
|
+
disabled: p,
|
|
133
133
|
autoComplete: fe,
|
|
134
134
|
"aria-invalid": !!d,
|
|
135
135
|
"aria-describedby": we,
|
|
136
136
|
className: ["inconel-input", O ?? ""].join(" "),
|
|
137
137
|
onChange: (e) => Be(e.target.value),
|
|
138
138
|
onFocus: (e) => {
|
|
139
|
-
if (
|
|
140
|
-
|
|
141
|
-
const r = n === "phone" && l ?
|
|
139
|
+
if (p) return;
|
|
140
|
+
Q(!0);
|
|
141
|
+
const r = n === "phone" && l ? k(o, l) : f(n) ? String(o ?? "").replace(".", $e(c).decimal) : String(o ?? "");
|
|
142
142
|
w(r), ee?.(u(o, "focus"), e);
|
|
143
143
|
},
|
|
144
144
|
onBlur: (e) => {
|
|
145
|
-
|
|
146
|
-
let r =
|
|
147
|
-
typeof r == "number" && (r = Ce(r,
|
|
145
|
+
Q(!1), a.current && clearTimeout(a.current);
|
|
146
|
+
let r = U(J);
|
|
147
|
+
typeof r == "number" && (r = Ce(r, m, le ? ie : "floor")), E(b(r));
|
|
148
148
|
const i = u(r, "blur");
|
|
149
149
|
M(i, !0), x?.(i, e);
|
|
150
150
|
},
|
|
151
151
|
onKeyDown: (e) => {
|
|
152
|
-
!S && (e.key === "-" || e.key === "Subtract") && e.preventDefault(), ne?.(u(o, "keydown", e.key), e);
|
|
152
|
+
f(n) && !S && (e.key === "-" || e.key === "Subtract") && e.preventDefault(), ne?.(u(o, "keydown", e.key), e);
|
|
153
153
|
},
|
|
154
154
|
onMouseEnter: (e) => re?.(u(o, "mouseenter"), e),
|
|
155
155
|
onMouseLeave: (e) => oe?.(u(o, "mouseleave"), e)
|
|
156
156
|
}
|
|
157
157
|
),
|
|
158
|
-
ae && !
|
|
158
|
+
ae && !p && F && /* @__PURE__ */ t(
|
|
159
159
|
"button",
|
|
160
160
|
{
|
|
161
161
|
type: "button",
|
|
162
162
|
className: "inconel-input-clear",
|
|
163
163
|
"aria-label": be,
|
|
164
164
|
onClick: () => {
|
|
165
|
-
w(""), E(
|
|
165
|
+
w(""), E(b(null)), M(u(null, "clear"), !0);
|
|
166
166
|
},
|
|
167
167
|
children: "×"
|
|
168
168
|
}
|
|
@@ -175,12 +175,12 @@ const Xe = Ee(function({
|
|
|
175
175
|
hint: _,
|
|
176
176
|
errorMessage: d,
|
|
177
177
|
hintId: q,
|
|
178
|
-
errorId:
|
|
178
|
+
errorId: G
|
|
179
179
|
}
|
|
180
180
|
)
|
|
181
181
|
] });
|
|
182
182
|
});
|
|
183
183
|
export {
|
|
184
|
-
|
|
184
|
+
Ze as default
|
|
185
185
|
};
|
|
186
186
|
//# sourceMappingURL=Input.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Input.js","sources":["../../../src/components/Input/Input.tsx"],"sourcesContent":["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 { useInconelAdapters } from '../../adapters'\nimport FieldFeedback from '../FieldFeedback/FieldFeedback'\nimport type { FieldFeedbackContentProps } from '../FieldFeedback/FieldFeedback'\nimport '../shared/field.css'\nimport '../shared/field-controls.css'\nimport '../shared/sizes.css'\nimport type { ControlSize } from '../shared/types'\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 size?: ControlSize\n variant?: 'outlined' | 'plain'\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 size = 'md',\n variant = 'outlined',\n autoComplete = 'off',\n 'aria-describedby': ariaDescribedBy,\n ...inputProps\n },\n ref,\n) {\n const adapters = useInconelAdapters()\n const resolvedClearButtonLabel =\n clearButtonLabel ??\n String(adapters.translate?.('clear', 'Temizle') ?? 'Temizle')\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 null\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', `inconel-size-${size}`, 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', `inconel-size-${size}`, 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', variant === 'plain' ? 'inconel-input-control--plain' : '', 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 && (\n <button\n type=\"button\"\n className=\"inconel-input-clear\"\n aria-label={resolvedClearButtonLabel}\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"],"names":["Input","forwardRef","id","label","hint","errorMessage","startAdornment","endAdornment","fullWidth","inputClassName","labelClassName","className","required","disabled","value","defaultValue","onChange","onBlur","onFocus","onKeyDown","onMouseEnter","onMouseLeave","type","locale","currency","decimalScale","roundMode","roundOnBlur","min","max","allowNegative","debounceMs","validateOnSubmit","validationMessages","mask","limit","isClearable","readOnly","clearButtonLabel","readOnlyEmptyValue","size","variant","autoComplete","ariaDescribedBy","inputProps","ref","adapters","useInconelAdapters","resolvedClearButtonLabel","generatedId","useId","inputId","hintId","errorId","controlled","localValue","setLocalValue","useState","currentValue","editingValue","setEditingValue","focused","setFocused","validationError","setValidationError","debounceRef","useRef","messages","visibleError","validate","candidate","validateInputValue","formattedValue","useMemo","formatInputValue","buildPayload","rawValue","eventType","char","emitChange","payload","immediate","useEffect","normalize","text","isFormattedInputType","parsed","parseInputNumber","handleChange","digits","isLengthValidatedInputType","applyInputMask","describedBy","jsx","jsxs","event","editValue","getInputSeparators","roundInputNumber","FieldFeedback"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Input.js","sources":["../../../src/components/Input/Input.tsx"],"sourcesContent":["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 { useInconelAdapters } from '../../adapters'\nimport FieldFeedback from '../FieldFeedback/FieldFeedback'\nimport type { FieldFeedbackContentProps } from '../FieldFeedback/FieldFeedback'\nimport '../shared/field.css'\nimport '../shared/field-controls.css'\nimport '../shared/sizes.css'\nimport type { ControlSize } from '../shared/types'\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 size?: ControlSize\n variant?: 'outlined' | 'plain'\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 size = 'md',\n variant = 'outlined',\n autoComplete = 'off',\n 'aria-describedby': ariaDescribedBy,\n ...inputProps\n },\n ref,\n) {\n const adapters = useInconelAdapters()\n const resolvedClearButtonLabel =\n clearButtonLabel ??\n String(adapters.translate?.('clear', 'Temizle') ?? 'Temizle')\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 null\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', `inconel-size-${size}`, 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', `inconel-size-${size}`, 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', variant === 'plain' ? 'inconel-input-control--plain' : '', 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 (\n isFormattedInputType(type) &&\n !allowNegative &&\n (event.key === '-' || event.key === 'Subtract')\n ) 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 && (\n <button\n type=\"button\"\n className=\"inconel-input-clear\"\n aria-label={resolvedClearButtonLabel}\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"],"names":["Input","forwardRef","id","label","hint","errorMessage","startAdornment","endAdornment","fullWidth","inputClassName","labelClassName","className","required","disabled","value","defaultValue","onChange","onBlur","onFocus","onKeyDown","onMouseEnter","onMouseLeave","type","locale","currency","decimalScale","roundMode","roundOnBlur","min","max","allowNegative","debounceMs","validateOnSubmit","validationMessages","mask","limit","isClearable","readOnly","clearButtonLabel","readOnlyEmptyValue","size","variant","autoComplete","ariaDescribedBy","inputProps","ref","adapters","useInconelAdapters","resolvedClearButtonLabel","generatedId","useId","inputId","hintId","errorId","controlled","localValue","setLocalValue","useState","currentValue","editingValue","setEditingValue","focused","setFocused","validationError","setValidationError","debounceRef","useRef","messages","visibleError","validate","candidate","validateInputValue","formattedValue","useMemo","formatInputValue","buildPayload","rawValue","eventType","char","emitChange","payload","immediate","useEffect","normalize","text","isFormattedInputType","parsed","parseInputNumber","handleChange","digits","isLengthValidatedInputType","applyInputMask","describedBy","jsx","jsxs","event","editValue","getInputSeparators","roundInputNumber","FieldFeedback"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { CSSProperties, ForwardedRef, ReactNode } from 'react';
|
|
2
2
|
import { ControlSize } from '../shared/types';
|
|
3
3
|
import { FieldFeedbackContentProps } from '../FieldFeedback/FieldFeedback';
|
|
4
|
-
export type OptionValue = string | number;
|
|
4
|
+
export type OptionValue = string | number | boolean;
|
|
5
5
|
export interface SelectHandle {
|
|
6
6
|
focus: () => void;
|
|
7
7
|
blur: () => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Select.d.ts","sourceRoot":"","sources":["../../../src/components/Select/Select.tsx"],"names":[],"mappings":"AAAA,OAAO,EASL,KAAK,aAAa,EAClB,KAAK,YAAY,EAEjB,KAAK,SAAS,EACf,MAAM,OAAO,CAAA;AAad,OAAO,qBAAqB,CAAA;AAC5B,OAAO,8BAA8B,CAAA;AACrC,OAAO,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,cAAc,CAAA;AAGrB,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAE/E,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"Select.d.ts","sourceRoot":"","sources":["../../../src/components/Select/Select.tsx"],"names":[],"mappings":"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"}
|
|
@@ -27,10 +27,10 @@ function Vt({
|
|
|
27
27
|
isReadOnly: ze = !1,
|
|
28
28
|
isRequired: oe = !1,
|
|
29
29
|
isLoading: Be = !1,
|
|
30
|
-
loadOptions:
|
|
30
|
+
loadOptions: b,
|
|
31
31
|
loadOptionsDebounceMs: re = 250,
|
|
32
32
|
hint: ie,
|
|
33
|
-
errorMessage:
|
|
33
|
+
errorMessage: h,
|
|
34
34
|
asyncErrorMessage: De,
|
|
35
35
|
loadingMessage: Oe,
|
|
36
36
|
noOptionsMessage: Ve,
|
|
@@ -65,28 +65,28 @@ function Vt({
|
|
|
65
65
|
size: ce = "md",
|
|
66
66
|
required: Pe
|
|
67
67
|
}, et) {
|
|
68
|
-
const
|
|
68
|
+
const m = Ot(), de = Qe !== void 0 || ae !== void 0 || T !== void 0, j = Le ?? Ge ?? Ke ?? null, tt = kt(), d = Ie ?? `inconel-select-${tt.replace(/:/g, "")}`, ue = `${d}-label`, fe = `${d}-listbox`, me = `${d}-message`, pe = `${d}-hint`, ge = te(null), A = te(null), Y = te(null), [n, be] = S(!1), [p, K] = S(""), [a, u] = S(0), [nt, lt] = S(null), [ot, he] = S(!1), [rt, ye] = S(!1);
|
|
69
69
|
D(() => {
|
|
70
|
-
if (!
|
|
70
|
+
if (!b) return;
|
|
71
71
|
const e = new AbortController(), t = window.setTimeout(async () => {
|
|
72
|
-
|
|
72
|
+
he(!0), ye(!1);
|
|
73
73
|
try {
|
|
74
|
-
const r = await
|
|
75
|
-
|
|
74
|
+
const r = await b(
|
|
75
|
+
p,
|
|
76
76
|
e.signal
|
|
77
77
|
);
|
|
78
78
|
e.signal.aborted || lt(r);
|
|
79
79
|
} catch {
|
|
80
|
-
e.signal.aborted ||
|
|
80
|
+
e.signal.aborted || ye(!0);
|
|
81
81
|
} finally {
|
|
82
|
-
e.signal.aborted ||
|
|
82
|
+
e.signal.aborted || he(!1);
|
|
83
83
|
}
|
|
84
84
|
}, re);
|
|
85
85
|
return () => {
|
|
86
86
|
window.clearTimeout(t), e.abort();
|
|
87
87
|
};
|
|
88
|
-
}, [
|
|
89
|
-
const
|
|
88
|
+
}, [p, b, re]);
|
|
89
|
+
const y = b ? nt ?? M : M, W = Be || ot, g = Ee || !!$e, E = ze || !!Ye, G = oe || !!Pe, it = (T === "in" && h ? String(h) : Ae) ?? String(m.translate?.("select", "Seçim yapın...") ?? "Seçim yapın..."), st = Ve ?? m.translate?.("noData", "Sonuç bulunamadı.") ?? "Sonuç bulunamadı.", at = Oe ?? m.translate?.("loading", "Yükleniyor...") ?? "Yükleniyor...", ct = Ce ?? String(m.translate?.("clearSelection", "Seçimi temizle") ?? "Seçimi temizle"), dt = Fe ?? String(m.translate?.("openOptions", "Seçenekleri aç") ?? "Seçenekleri aç"), ut = Ne ?? String(m.translate?.("closeOptions", "Seçenekleri kapat") ?? "Seçenekleri kapat"), J = x(
|
|
90
90
|
(e) => typeof V == "function" ? V(e) : String(e[V]),
|
|
91
91
|
[V]
|
|
92
92
|
), Q = x(
|
|
@@ -99,34 +99,36 @@ function Vt({
|
|
|
99
99
|
), v = x(
|
|
100
100
|
(e) => {
|
|
101
101
|
const t = typeof C == "function" ? C(e) : e[C];
|
|
102
|
-
if (typeof t != "string" && typeof t != "number")
|
|
103
|
-
throw new TypeError(
|
|
102
|
+
if (typeof t != "string" && typeof t != "number" && typeof t != "boolean")
|
|
103
|
+
throw new TypeError(
|
|
104
|
+
"optionValue must resolve to a string, number or boolean."
|
|
105
|
+
);
|
|
104
106
|
return t;
|
|
105
107
|
},
|
|
106
108
|
[C]
|
|
107
|
-
),
|
|
109
|
+
), f = j && typeof j == "object" ? v(j) : j, X = x(
|
|
108
110
|
(e, t) => {
|
|
109
111
|
O && (de ? O(t) : O(e, t));
|
|
110
112
|
},
|
|
111
113
|
[de, O]
|
|
112
114
|
), Z = xe(() => {
|
|
113
115
|
const e = /* @__PURE__ */ new Set();
|
|
114
|
-
return
|
|
115
|
-
}, [
|
|
116
|
+
return y.map(v).filter((t) => e.has(t) ? !0 : (e.add(t), !1));
|
|
117
|
+
}, [y, v]);
|
|
116
118
|
D(() => {
|
|
117
119
|
Z.length && console.warn(
|
|
118
120
|
`Duplicate optionValue found in Select "${I}":`,
|
|
119
121
|
Z
|
|
120
122
|
);
|
|
121
123
|
}, [Z, I]);
|
|
122
|
-
const _ = [...M, ...
|
|
123
|
-
(e) => v(e) ===
|
|
124
|
+
const _ = [...M, ...y].find(
|
|
125
|
+
(e) => v(e) === f
|
|
124
126
|
), ft = _ ? Q(_) : "", l = xe(() => {
|
|
125
|
-
const e =
|
|
126
|
-
return !e ||
|
|
127
|
+
const e = p.trim().toLocaleLowerCase($);
|
|
128
|
+
return !e || b ? y : y.filter(
|
|
127
129
|
(t) => Q(t).toLocaleLowerCase($).includes(e)
|
|
128
130
|
);
|
|
129
|
-
}, [
|
|
131
|
+
}, [y, Q, p, b, $]), { refs: ve, floatingStyles: mt } = St({
|
|
130
132
|
open: n,
|
|
131
133
|
placement: "bottom-start",
|
|
132
134
|
strategy: N ? "fixed" : "absolute",
|
|
@@ -152,12 +154,12 @@ function Vt({
|
|
|
152
154
|
overscan: 5,
|
|
153
155
|
enabled: R && n
|
|
154
156
|
}), k = x(() => {
|
|
155
|
-
|
|
157
|
+
be(!1), K(""), L?.(""), se?.();
|
|
156
158
|
}, [L, se]), z = () => {
|
|
157
|
-
|
|
159
|
+
g || E || (n || Me?.(), be(!0));
|
|
158
160
|
}, H = x(() => {
|
|
159
|
-
|
|
160
|
-
}, [
|
|
161
|
+
g || E || (X(null, null), K(""), u(0), L?.(""), A.current?.focus());
|
|
162
|
+
}, [g, E, X, L]);
|
|
161
163
|
wt(
|
|
162
164
|
et,
|
|
163
165
|
() => ({
|
|
@@ -196,7 +198,7 @@ function Vt({
|
|
|
196
198
|
const t = l.map((r, w) => ({ option: r, index: w }));
|
|
197
199
|
return e && t.reverse(), t.find(({ option: r }) => !F(r))?.index ?? 0;
|
|
198
200
|
}, gt = (e) => {
|
|
199
|
-
if (e.key === "Backspace" && !
|
|
201
|
+
if (e.key === "Backspace" && !p && f !== null && le) {
|
|
200
202
|
e.preventDefault(), H();
|
|
201
203
|
return;
|
|
202
204
|
}
|
|
@@ -218,29 +220,29 @@ function Vt({
|
|
|
218
220
|
{
|
|
219
221
|
id: `${d}-option-${t}`,
|
|
220
222
|
role: "option",
|
|
221
|
-
"aria-selected": w ===
|
|
223
|
+
"aria-selected": w === f,
|
|
222
224
|
"aria-disabled": Se,
|
|
223
225
|
"aria-posinset": t + 1,
|
|
224
226
|
"aria-setsize": l.length,
|
|
225
227
|
className: c(
|
|
226
228
|
"inconel-select-option",
|
|
227
229
|
t === a && "inconel-is-active",
|
|
228
|
-
w ===
|
|
230
|
+
w === f && "inconel-is-selected",
|
|
229
231
|
Se && "inconel-is-disabled",
|
|
230
232
|
i.option
|
|
231
233
|
),
|
|
232
234
|
style: { ...r, ...s.option },
|
|
233
235
|
onMouseEnter: () => u(t),
|
|
234
|
-
onMouseDown: (
|
|
236
|
+
onMouseDown: (yt) => yt.preventDefault(),
|
|
235
237
|
onClick: () => ke(e),
|
|
236
238
|
children: [
|
|
237
239
|
/* @__PURE__ */ o("span", { children: J(e) }),
|
|
238
|
-
w ===
|
|
240
|
+
w === f && /* @__PURE__ */ o("span", { "aria-hidden": "true", children: "✓" })
|
|
239
241
|
]
|
|
240
242
|
},
|
|
241
|
-
w
|
|
243
|
+
String(w)
|
|
242
244
|
);
|
|
243
|
-
},
|
|
245
|
+
}, bt = W ? /* @__PURE__ */ B(
|
|
244
246
|
"div",
|
|
245
247
|
{
|
|
246
248
|
role: "status",
|
|
@@ -298,9 +300,9 @@ function Vt({
|
|
|
298
300
|
i.menu
|
|
299
301
|
),
|
|
300
302
|
style: { ...mt, ...s.menu },
|
|
301
|
-
children:
|
|
303
|
+
children: bt
|
|
302
304
|
}
|
|
303
|
-
) : null,
|
|
305
|
+
) : null, ht = h ? me : ie ? pe : void 0;
|
|
304
306
|
return Je ? /* @__PURE__ */ B(
|
|
305
307
|
"div",
|
|
306
308
|
{
|
|
@@ -334,8 +336,8 @@ function Vt({
|
|
|
334
336
|
className: c(
|
|
335
337
|
"inconel-select-control",
|
|
336
338
|
n && "inconel-is-open",
|
|
337
|
-
|
|
338
|
-
!!
|
|
339
|
+
g && "inconel-is-disabled",
|
|
340
|
+
!!h && "inconel-has-error",
|
|
339
341
|
i.control
|
|
340
342
|
),
|
|
341
343
|
style: s.control,
|
|
@@ -350,35 +352,35 @@ function Vt({
|
|
|
350
352
|
"aria-controls": fe,
|
|
351
353
|
"aria-autocomplete": "list",
|
|
352
354
|
"aria-activedescendant": n && l[a] ? `${d}-option-${a}` : void 0,
|
|
353
|
-
"aria-describedby":
|
|
354
|
-
"aria-invalid": !!
|
|
355
|
+
"aria-describedby": ht,
|
|
356
|
+
"aria-invalid": !!h,
|
|
355
357
|
"aria-required": oe,
|
|
356
358
|
"aria-busy": W,
|
|
357
359
|
required: G,
|
|
358
|
-
disabled:
|
|
360
|
+
disabled: g,
|
|
359
361
|
readOnly: E || !Te,
|
|
360
362
|
autoFocus: Ue,
|
|
361
363
|
autoComplete: "off",
|
|
362
364
|
placeholder: it,
|
|
363
|
-
value:
|
|
365
|
+
value: p || ft,
|
|
364
366
|
className: c(i.input, Ze, ae),
|
|
365
367
|
style: s.input,
|
|
366
368
|
onChange: (e) => {
|
|
367
369
|
const t = Xe ? e.target.value.toLocaleUpperCase(
|
|
368
|
-
|
|
370
|
+
m.locale ?? "tr-TR"
|
|
369
371
|
) : e.target.value;
|
|
370
372
|
K(t), u(0), L?.(t), z();
|
|
371
373
|
},
|
|
372
374
|
onClick: z,
|
|
373
375
|
onFocus: (e) => {
|
|
374
|
-
z(), _ && !
|
|
376
|
+
z(), _ && !p && e.currentTarget.select();
|
|
375
377
|
},
|
|
376
378
|
onBlur: We,
|
|
377
379
|
onKeyDown: gt
|
|
378
380
|
}
|
|
379
381
|
),
|
|
380
382
|
W && /* @__PURE__ */ o("span", { className: "inconel-select-spinner", "aria-hidden": "true" }),
|
|
381
|
-
le &&
|
|
383
|
+
le && f !== null && !g && !E && /* @__PURE__ */ o(
|
|
382
384
|
"button",
|
|
383
385
|
{
|
|
384
386
|
type: "button",
|
|
@@ -397,7 +399,7 @@ function Vt({
|
|
|
397
399
|
style: s.toggleButton,
|
|
398
400
|
"aria-label": n ? ut : dt,
|
|
399
401
|
"aria-expanded": n,
|
|
400
|
-
disabled:
|
|
402
|
+
disabled: g,
|
|
401
403
|
tabIndex: -1,
|
|
402
404
|
onClick: () => n ? k() : z(),
|
|
403
405
|
children: /* @__PURE__ */ o(
|
|
@@ -430,7 +432,7 @@ function Vt({
|
|
|
430
432
|
{
|
|
431
433
|
type: "hidden",
|
|
432
434
|
name: ne,
|
|
433
|
-
value:
|
|
435
|
+
value: f === null ? "" : String(f),
|
|
434
436
|
required: G
|
|
435
437
|
}
|
|
436
438
|
),
|
|
@@ -438,7 +440,7 @@ function Vt({
|
|
|
438
440
|
Dt,
|
|
439
441
|
{
|
|
440
442
|
hint: ie,
|
|
441
|
-
errorMessage: T === "in" ? void 0 :
|
|
443
|
+
errorMessage: T === "in" ? void 0 : h,
|
|
442
444
|
hintId: pe,
|
|
443
445
|
errorId: me
|
|
444
446
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Select.js","sources":["../../../src/components/Select/Select.tsx"],"sourcesContent":["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 as floatingSize,\n useFloating,\n} from '@floating-ui/react'\nimport { useVirtualizer } from '@tanstack/react-virtual'\nimport { createPortal } from 'react-dom'\nimport { useInconelAdapters } from '../../adapters'\nimport { classNames as mergeClassNames } from '../shared/classNames'\nimport '../shared/field.css'\nimport '../shared/field-controls.css'\nimport '../shared/sizes.css'\nimport type { ControlSize } from '../shared/types'\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?: ReactNode\n options?: T[]\n value?: OptionValue | T | null\n onChange?:\n | ((value: OptionValue | null, option: T | null) => void)\n | ((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 autoFocus?: boolean\n selectClassName?: string\n disabled?: boolean\n isSearchable?: boolean\n readOnly?: boolean\n defaultValue?: OptionValue | T | null\n errorPlace?: 'in' | 'out' | string\n onBlur?: () => void\n setFieldValue?: OptionValue | string | null\n render?: boolean\n singleValue?: boolean\n sortByUppercase?: boolean\n selectClassNamePrefix?: string\n menuPlacement?: 'auto' | 'bottom' | 'top'\n maxMenuHeight?: number\n inputClassName?: string\n labelClassName?: string\n size?: ControlSize\n required?: boolean\n components?: Record<string, unknown>\n}\n\nfunction SelectInner<T extends object>(\n {\n id,\n name,\n label,\n options = [],\n value,\n onChange,\n optionLabel = 'label' as keyof T,\n optionValue = 'value' as keyof T,\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 autoFocus,\n selectClassName,\n disabled,\n isSearchable = true,\n readOnly,\n defaultValue,\n errorPlace,\n onBlur,\n setFieldValue,\n render = true,\n singleValue,\n sortByUppercase,\n inputClassName,\n labelClassName,\n size = 'md',\n required,\n }: SelectProps<T>,\n forwardedRef: ForwardedRef<SelectHandle>,\n) {\n const adapters = useInconelAdapters()\n const legacyMode =\n singleValue !== undefined ||\n selectClassName !== undefined ||\n errorPlace !== undefined\n const controlledValue = value ?? setFieldValue ?? defaultValue ?? null\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 const componentDisabled = isDisabled || Boolean(disabled)\n const componentReadOnly = isReadOnly || Boolean(readOnly)\n const componentRequired = isRequired || Boolean(required)\n const resolvedPlaceholder =\n (errorPlace === 'in' && errorMessage\n ? String(errorMessage)\n : placeholder) ??\n String(adapters.translate?.('select', 'Seçim yapın...') ?? 'Seçim yapın...')\n const resolvedNoOptionsMessage =\n noOptionsMessage ??\n adapters.translate?.('noData', 'Sonuç bulunamadı.') ??\n 'Sonuç bulunamadı.'\n const resolvedLoadingMessage =\n loadingMessage ??\n adapters.translate?.('loading', 'Yükleniyor...') ??\n 'Yükleniyor...'\n const resolvedClearLabel =\n clearButtonLabel ??\n String(adapters.translate?.('clearSelection', 'Seçimi temizle') ?? 'Seçimi temizle')\n const resolvedOpenLabel =\n openMenuButtonLabel ??\n String(adapters.translate?.('openOptions', 'Seçenekleri aç') ?? 'Seçenekleri aç')\n const resolvedCloseLabel =\n closeMenuButtonLabel ??\n String(adapters.translate?.('closeOptions', 'Seçenekleri kapat') ?? 'Seçenekleri kapat')\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 normalizedValue =\n controlledValue && typeof controlledValue === 'object'\n ? getValue(controlledValue as T)\n : (controlledValue as OptionValue | null)\n\n const emitChange = useCallback(\n (nextValue: OptionValue | null, option: T | null) => {\n if (!onChange) return\n if (legacyMode) {\n ;(onChange as (selected: T | null) => void)(option)\n } else {\n ;(\n onChange as (\n value: OptionValue | null,\n selected: T | null,\n ) => void\n )(nextValue, option)\n }\n },\n [legacyMode, onChange],\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) === normalizedValue,\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 floatingSize({\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 (componentDisabled || componentReadOnly) return\n if (!isOpen) onMenuOpen?.()\n setIsOpen(true)\n }\n\n const clearSelection = useCallback(() => {\n if (componentDisabled || componentReadOnly) return\n emitChange(null, null)\n setInputValue('')\n setActiveIndex(0)\n onInputChange?.('')\n inputRef.current?.focus()\n }, [componentDisabled, componentReadOnly, emitChange, 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 emitChange(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 normalizedValue !== 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 === normalizedValue}\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 === normalizedValue && '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 === normalizedValue && <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 {resolvedLoadingMessage}\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 {resolvedNoOptionsMessage}\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={label ? labelId : undefined}\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 if (!render) return null\n\n return (\n <div\n ref={rootRef}\n className={mergeClassNames(\n 'inconel-select-field',\n `inconel-size-${size}`,\n `inconel-select-field--${size}`,\n className,\n classNames.root,\n )}\n style={styles.root}\n >\n {label && (\n <label\n id={labelId}\n htmlFor={inputId}\n className={mergeClassNames(classNames.label, labelClassName)}\n style={styles.label}\n >\n {label}\n {componentRequired && <span aria-hidden=\"true\"> *</span>}\n </label>\n )}\n <div\n ref={refs.setReference}\n className={mergeClassNames(\n 'inconel-select-control',\n isOpen && 'inconel-is-open',\n componentDisabled && '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={componentRequired}\n disabled={componentDisabled}\n readOnly={componentReadOnly || !isSearchable}\n autoFocus={autoFocus}\n autoComplete=\"off\"\n placeholder={resolvedPlaceholder}\n value={inputValue || selectedLabel}\n className={mergeClassNames(classNames.input, inputClassName, selectClassName)}\n style={styles.input}\n onChange={(event) => {\n const nextInput = sortByUppercase\n ? event.target.value.toLocaleUpperCase(\n adapters.locale ?? 'tr-TR',\n )\n : event.target.value\n setInputValue(nextInput)\n setActiveIndex(0)\n onInputChange?.(nextInput)\n openMenu()\n }}\n onClick={openMenu}\n onFocus={(event) => {\n openMenu()\n if (selectedOption && !inputValue) event.currentTarget.select()\n }}\n onBlur={onBlur}\n onKeyDown={handleKeyDown}\n />\n {loading && <span className=\"inconel-select-spinner\" aria-hidden=\"true\" />}\n {isClearable && normalizedValue !== null && !componentDisabled && !componentReadOnly && (\n <button\n type=\"button\"\n className={mergeClassNames('inconel-select-clear', classNames.clearButton)}\n style={styles.clearButton}\n aria-label={resolvedClearLabel}\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 ? resolvedCloseLabel : resolvedOpenLabel}\n aria-expanded={isOpen}\n disabled={componentDisabled}\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={normalizedValue ?? ''}\n required={componentRequired}\n />\n )}\n <FieldFeedback\n hint={hint}\n errorMessage={errorPlace === 'in' ? undefined : 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"],"names":["SelectInner","id","name","label","options","value","onChange","optionLabel","optionValue","getOptionSearchText","isOptionDisabled","placeholder","isClearable","isDisabled","isReadOnly","isRequired","isLoading","loadOptions","loadOptionsDebounceMs","hint","errorMessage","asyncErrorMessage","loadingMessage","noOptionsMessage","clearButtonLabel","openMenuButtonLabel","closeMenuButtonLabel","searchLocale","menuPortalTarget","virtualize","virtualizationThreshold","optionHeight","className","classNames","styles","onInputChange","onMenuOpen","onMenuClose","autoFocus","selectClassName","disabled","isSearchable","readOnly","defaultValue","errorPlace","onBlur","setFieldValue","render","singleValue","sortByUppercase","inputClassName","labelClassName","size","required","forwardedRef","adapters","useInconelAdapters","legacyMode","controlledValue","generatedId","useId","inputId","labelId","listboxId","messageId","hintId","rootRef","useRef","inputRef","menuRef","isOpen","setIsOpen","useState","inputValue","setInputValue","activeIndex","setActiveIndex","asyncOptions","setAsyncOptions","isAsyncLoading","setIsAsyncLoading","hasAsyncError","setHasAsyncError","useEffect","controller","timeout","loadedOptions","availableOptions","loading","componentDisabled","componentReadOnly","componentRequired","resolvedPlaceholder","resolvedNoOptionsMessage","resolvedLoadingMessage","resolvedClearLabel","resolvedOpenLabel","resolvedCloseLabel","getLabel","useCallback","option","getSearchLabel","renderedLabel","getValue","resolvedValue","normalizedValue","emitChange","nextValue","duplicateValues","useMemo","seen","optionId","selectedOption","selectedLabel","filteredOptions","query","refs","floatingStyles","useFloating","autoUpdate","offset","flip","shift","floatingSize","availableHeight","rects","elements","shouldVirtualize","virtualizer","useVirtualizer","closeMenu","openMenu","clearSelection","useImperativeHandle","closeOnOutsideClick","event","target","selectOption","moveActiveOption","direction","nextIndex","findEnabledIndex","fromEnd","entries","index","handleKeyDown","activeOption","renderOption","style","jsxs","mergeClassNames","jsx","menuContent","virtualRow","menu","node","describedBy","nextInput","FieldFeedback","createPortal","Select","forwardRef"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Select.js","sources":["../../../src/components/Select/Select.tsx"],"sourcesContent":["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 as floatingSize,\n useFloating,\n} from '@floating-ui/react'\nimport { useVirtualizer } from '@tanstack/react-virtual'\nimport { createPortal } from 'react-dom'\nimport { useInconelAdapters } from '../../adapters'\nimport { classNames as mergeClassNames } from '../shared/classNames'\nimport '../shared/field.css'\nimport '../shared/field-controls.css'\nimport '../shared/sizes.css'\nimport type { ControlSize } from '../shared/types'\nimport './styles.css'\n\nimport FieldFeedback from '../FieldFeedback/FieldFeedback'\nimport type { FieldFeedbackContentProps } from '../FieldFeedback/FieldFeedback'\n\nexport type OptionValue = string | number | boolean\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?: ReactNode\n options?: T[]\n value?: OptionValue | T | null\n onChange?:\n | ((value: OptionValue | null, option: T | null) => void)\n | ((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 autoFocus?: boolean\n selectClassName?: string\n disabled?: boolean\n isSearchable?: boolean\n readOnly?: boolean\n defaultValue?: OptionValue | T | null\n errorPlace?: 'in' | 'out' | string\n onBlur?: () => void\n setFieldValue?: OptionValue | string | null\n render?: boolean\n singleValue?: boolean\n sortByUppercase?: boolean\n selectClassNamePrefix?: string\n menuPlacement?: 'auto' | 'bottom' | 'top'\n maxMenuHeight?: number\n inputClassName?: string\n labelClassName?: string\n size?: ControlSize\n required?: boolean\n components?: Record<string, unknown>\n}\n\nfunction SelectInner<T extends object>(\n {\n id,\n name,\n label,\n options = [],\n value,\n onChange,\n optionLabel = 'label' as keyof T,\n optionValue = 'value' as keyof T,\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 autoFocus,\n selectClassName,\n disabled,\n isSearchable = true,\n readOnly,\n defaultValue,\n errorPlace,\n onBlur,\n setFieldValue,\n render = true,\n singleValue,\n sortByUppercase,\n inputClassName,\n labelClassName,\n size = 'md',\n required,\n }: SelectProps<T>,\n forwardedRef: ForwardedRef<SelectHandle>,\n) {\n const adapters = useInconelAdapters()\n const legacyMode =\n singleValue !== undefined ||\n selectClassName !== undefined ||\n errorPlace !== undefined\n const controlledValue = value ?? setFieldValue ?? defaultValue ?? null\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 const componentDisabled = isDisabled || Boolean(disabled)\n const componentReadOnly = isReadOnly || Boolean(readOnly)\n const componentRequired = isRequired || Boolean(required)\n const resolvedPlaceholder =\n (errorPlace === 'in' && errorMessage\n ? String(errorMessage)\n : placeholder) ??\n String(adapters.translate?.('select', 'Seçim yapın...') ?? 'Seçim yapın...')\n const resolvedNoOptionsMessage =\n noOptionsMessage ??\n adapters.translate?.('noData', 'Sonuç bulunamadı.') ??\n 'Sonuç bulunamadı.'\n const resolvedLoadingMessage =\n loadingMessage ??\n adapters.translate?.('loading', 'Yükleniyor...') ??\n 'Yükleniyor...'\n const resolvedClearLabel =\n clearButtonLabel ??\n String(adapters.translate?.('clearSelection', 'Seçimi temizle') ?? 'Seçimi temizle')\n const resolvedOpenLabel =\n openMenuButtonLabel ??\n String(adapters.translate?.('openOptions', 'Seçenekleri aç') ?? 'Seçenekleri aç')\n const resolvedCloseLabel =\n closeMenuButtonLabel ??\n String(adapters.translate?.('closeOptions', 'Seçenekleri kapat') ?? 'Seçenekleri kapat')\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 typeof resolvedValue !== 'boolean'\n ) {\n throw new TypeError(\n 'optionValue must resolve to a string, number or boolean.',\n )\n }\n return resolvedValue\n },\n [optionValue],\n )\n\n const normalizedValue =\n controlledValue && typeof controlledValue === 'object'\n ? getValue(controlledValue as T)\n : (controlledValue as OptionValue | null)\n\n const emitChange = useCallback(\n (nextValue: OptionValue | null, option: T | null) => {\n if (!onChange) return\n if (legacyMode) {\n ;(onChange as (selected: T | null) => void)(option)\n } else {\n ;(\n onChange as (\n value: OptionValue | null,\n selected: T | null,\n ) => void\n )(nextValue, option)\n }\n },\n [legacyMode, onChange],\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) === normalizedValue,\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 floatingSize({\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 (componentDisabled || componentReadOnly) return\n if (!isOpen) onMenuOpen?.()\n setIsOpen(true)\n }\n\n const clearSelection = useCallback(() => {\n if (componentDisabled || componentReadOnly) return\n emitChange(null, null)\n setInputValue('')\n setActiveIndex(0)\n onInputChange?.('')\n inputRef.current?.focus()\n }, [componentDisabled, componentReadOnly, emitChange, 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 emitChange(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 normalizedValue !== 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={String(optionId)}\n role=\"option\"\n aria-selected={optionId === normalizedValue}\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 === normalizedValue && '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 === normalizedValue && <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 {resolvedLoadingMessage}\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 {resolvedNoOptionsMessage}\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={label ? labelId : undefined}\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 if (!render) return null\n\n return (\n <div\n ref={rootRef}\n className={mergeClassNames(\n 'inconel-select-field',\n `inconel-size-${size}`,\n `inconel-select-field--${size}`,\n className,\n classNames.root,\n )}\n style={styles.root}\n >\n {label && (\n <label\n id={labelId}\n htmlFor={inputId}\n className={mergeClassNames(classNames.label, labelClassName)}\n style={styles.label}\n >\n {label}\n {componentRequired && <span aria-hidden=\"true\"> *</span>}\n </label>\n )}\n <div\n ref={refs.setReference}\n className={mergeClassNames(\n 'inconel-select-control',\n isOpen && 'inconel-is-open',\n componentDisabled && '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={componentRequired}\n disabled={componentDisabled}\n readOnly={componentReadOnly || !isSearchable}\n autoFocus={autoFocus}\n autoComplete=\"off\"\n placeholder={resolvedPlaceholder}\n value={inputValue || selectedLabel}\n className={mergeClassNames(classNames.input, inputClassName, selectClassName)}\n style={styles.input}\n onChange={(event) => {\n const nextInput = sortByUppercase\n ? event.target.value.toLocaleUpperCase(\n adapters.locale ?? 'tr-TR',\n )\n : event.target.value\n setInputValue(nextInput)\n setActiveIndex(0)\n onInputChange?.(nextInput)\n openMenu()\n }}\n onClick={openMenu}\n onFocus={(event) => {\n openMenu()\n if (selectedOption && !inputValue) event.currentTarget.select()\n }}\n onBlur={onBlur}\n onKeyDown={handleKeyDown}\n />\n {loading && <span className=\"inconel-select-spinner\" aria-hidden=\"true\" />}\n {isClearable && normalizedValue !== null && !componentDisabled && !componentReadOnly && (\n <button\n type=\"button\"\n className={mergeClassNames('inconel-select-clear', classNames.clearButton)}\n style={styles.clearButton}\n aria-label={resolvedClearLabel}\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 ? resolvedCloseLabel : resolvedOpenLabel}\n aria-expanded={isOpen}\n disabled={componentDisabled}\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={normalizedValue === null ? '' : String(normalizedValue)}\n required={componentRequired}\n />\n )}\n <FieldFeedback\n hint={hint}\n errorMessage={errorPlace === 'in' ? undefined : 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"],"names":["SelectInner","id","name","label","options","value","onChange","optionLabel","optionValue","getOptionSearchText","isOptionDisabled","placeholder","isClearable","isDisabled","isReadOnly","isRequired","isLoading","loadOptions","loadOptionsDebounceMs","hint","errorMessage","asyncErrorMessage","loadingMessage","noOptionsMessage","clearButtonLabel","openMenuButtonLabel","closeMenuButtonLabel","searchLocale","menuPortalTarget","virtualize","virtualizationThreshold","optionHeight","className","classNames","styles","onInputChange","onMenuOpen","onMenuClose","autoFocus","selectClassName","disabled","isSearchable","readOnly","defaultValue","errorPlace","onBlur","setFieldValue","render","singleValue","sortByUppercase","inputClassName","labelClassName","size","required","forwardedRef","adapters","useInconelAdapters","legacyMode","controlledValue","generatedId","useId","inputId","labelId","listboxId","messageId","hintId","rootRef","useRef","inputRef","menuRef","isOpen","setIsOpen","useState","inputValue","setInputValue","activeIndex","setActiveIndex","asyncOptions","setAsyncOptions","isAsyncLoading","setIsAsyncLoading","hasAsyncError","setHasAsyncError","useEffect","controller","timeout","loadedOptions","availableOptions","loading","componentDisabled","componentReadOnly","componentRequired","resolvedPlaceholder","resolvedNoOptionsMessage","resolvedLoadingMessage","resolvedClearLabel","resolvedOpenLabel","resolvedCloseLabel","getLabel","useCallback","option","getSearchLabel","renderedLabel","getValue","resolvedValue","normalizedValue","emitChange","nextValue","duplicateValues","useMemo","seen","optionId","selectedOption","selectedLabel","filteredOptions","query","refs","floatingStyles","useFloating","autoUpdate","offset","flip","shift","floatingSize","availableHeight","rects","elements","shouldVirtualize","virtualizer","useVirtualizer","closeMenu","openMenu","clearSelection","useImperativeHandle","closeOnOutsideClick","event","target","selectOption","moveActiveOption","direction","nextIndex","findEnabledIndex","fromEnd","entries","index","handleKeyDown","activeOption","renderOption","style","jsxs","mergeClassNames","jsx","menuContent","virtualRow","menu","node","describedBy","nextInput","FieldFeedback","createPortal","Select","forwardRef"],"mappings":"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"}
|