UNPKG

koval-ui

Version:

React components collection with minimalistic design. Supports theming, layout, and input validation.

1 lines 6.42 kB
{"version":3,"file":"InputTime.cjs","sources":["../../../../src/lib/InputTime/InputTime.tsx"],"sourcesContent":["import type {ChangeEvent, KeyboardEvent} from 'react';\nimport {forwardRef, useCallback} from 'react';\nimport classNames from 'classnames';\n\nimport {IconClock} from '@/internal/Icons';\nimport type {DataAttributes, LibraryProps} from '@/internal/LibraryAPI';\nimport type {NativePropsTextual, CallbackPropsTextual, ValidationProps} from '@/internal/inputs';\nimport {useExternalValidation} from '@/internal/inputs';\nimport {useRevalidateOnFormChange} from '@/internal/inputs';\nimport {ValidationState, useValidationIcon, useValidation} from '@/internal/inputs';\nimport {useInternalRef} from '@/internal/hooks/useInternalRef.ts';\n\nimport classes from './InputTime.module.css';\n\nexport type Props = DataAttributes &\n LibraryProps &\n Omit<NativePropsTextual, 'maxLength' | 'minLength' | 'autoComplete' | 'inputMode' | 'size'> &\n Omit<CallbackPropsTextual, 'onChange'> &\n ValidationProps & {\n onChange?: (event: ChangeEvent<HTMLInputElement>) => void;\n min?: string;\n max?: string;\n };\n\nexport const InputTime = forwardRef<HTMLInputElement, Props>(\n (\n {\n className,\n placeholder = '',\n disabled,\n value,\n onChange = () => {},\n onFocus = () => {},\n onBlur = () => {},\n onKeyDown = () => {},\n onKeyUp = () => {},\n defaultValue,\n revalidateOnFormChange,\n validation,\n errorMessage,\n displayIcon = true,\n ...nativeProps\n },\n ref\n ) => {\n const inputRef = useInternalRef(ref);\n const hasValidators =\n Boolean(validation) ||\n typeof nativeProps.min === 'string' ||\n typeof nativeProps.max === 'string';\n\n const {validity, setValidity, validateTextual} = useValidation({validation, hasValidators});\n\n useRevalidateOnFormChange(inputRef, validateTextual, revalidateOnFormChange);\n useExternalValidation({errorMessage, inputRef, setValidity, validation});\n\n const ValidationIcon = useValidationIcon(validity);\n\n const handleInvalid = useCallback(() => {\n setValidity(ValidationState.error);\n }, [setValidity]);\n\n const handleIconClick = useCallback(() => {\n inputRef.current?.focus();\n inputRef.current?.showPicker();\n }, [inputRef]);\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLInputElement>) => {\n onKeyDown(event);\n },\n [onKeyDown]\n );\n\n const handleKeyUp = useCallback(\n (event: KeyboardEvent<HTMLInputElement>) => {\n onKeyUp(event);\n },\n [onKeyUp]\n );\n\n const handleChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n const isValid = event.target.checkValidity();\n isValid && setValidity(ValidationState.valid);\n onChange(event);\n },\n [onChange, setValidity]\n );\n\n return (\n <div className={classNames(classes.wrapper, className)}>\n <IconClock tabIndex={-1} onClick={handleIconClick} className={classes.icon} />\n <input\n {...nativeProps}\n type=\"time\"\n placeholder={placeholder}\n className={classes.input}\n ref={inputRef}\n disabled={disabled}\n value={value}\n defaultValue={defaultValue}\n onBlur={onBlur}\n onFocus={onFocus}\n onKeyUp={handleKeyUp}\n onKeyDown={handleKeyDown}\n onInvalid={handleInvalid}\n onChange={handleChange}\n onInput={validateTextual}\n />\n {displayIcon && validity && <ValidationIcon />}\n </div>\n );\n }\n);\n\nInputTime.displayName = 'InputTime';\n"],"names":["InputTime","forwardRef","className","placeholder","disabled","value","onChange","onFocus","onBlur","onKeyDown","onKeyUp","defaultValue","revalidateOnFormChange","validation","errorMessage","displayIcon","nativeProps","ref","inputRef","useInternalRef","hasValidators","validity","setValidity","validateTextual","useValidation","useRevalidateOnFormChange","useExternalValidation","ValidationIcon","useValidationIcon","handleInvalid","useCallback","ValidationState","handleIconClick","handleKeyDown","event","handleKeyUp","handleChange","classNames","classes","jsx","IconClock"],"mappings":"6lBAwBaA,EAAYC,EAAAA,WACrB,CACI,CACI,UAAAC,EACA,YAAAC,EAAc,GACd,SAAAC,EACA,MAAAC,EACA,SAAAC,EAAW,IAAM,CAAC,EAClB,QAAAC,EAAU,IAAM,CAAC,EACjB,OAAAC,EAAS,IAAM,CAAC,EAChB,UAAAC,EAAY,IAAM,CAAC,EACnB,QAAAC,EAAU,IAAM,CAAC,EACjB,aAAAC,EACA,uBAAAC,EACA,WAAAC,EACA,aAAAC,EACA,YAAAC,EAAc,GACd,GAAGC,CAAA,EAEPC,IACC,CACD,MAAMC,EAAWC,EAAAA,eAAeF,CAAG,EAC7BG,EACF,EAAQP,GACR,OAAOG,EAAY,KAAQ,UAC3B,OAAOA,EAAY,KAAQ,SAEzB,CAAC,SAAAK,EAAU,YAAAC,EAAa,gBAAAC,CAAA,EAAmBC,EAAAA,cAAc,CAAC,WAAAX,EAAY,cAAAO,EAAc,EAE1FK,4BAA0BP,EAAUK,EAAiBX,CAAsB,EAC3Ec,EAAAA,sBAAsB,CAAC,aAAAZ,EAAc,SAAAI,EAAU,YAAAI,EAAa,WAAAT,EAAW,EAEvE,MAAMc,EAAiBC,EAAAA,kBAAkBP,CAAQ,EAE3CQ,EAAgBC,EAAAA,YAAY,IAAM,CACpCR,EAAYS,EAAAA,gBAAgB,KAAK,CACrC,EAAG,CAACT,CAAW,CAAC,EAEVU,EAAkBF,EAAAA,YAAY,IAAM,CACtCZ,EAAS,SAAS,MAAA,EAClBA,EAAS,SAAS,WAAA,CACtB,EAAG,CAACA,CAAQ,CAAC,EAEPe,EAAgBH,EAAAA,YACjBI,GAA2C,CACxCzB,EAAUyB,CAAK,CACnB,EACA,CAACzB,CAAS,CAAA,EAGR0B,EAAcL,EAAAA,YACfI,GAA2C,CACxCxB,EAAQwB,CAAK,CACjB,EACA,CAACxB,CAAO,CAAA,EAGN0B,EAAeN,EAAAA,YAChBI,GAAyC,CACtBA,EAAM,OAAO,cAAA,GAClBZ,EAAYS,EAAAA,gBAAgB,KAAK,EAC5CzB,EAAS4B,CAAK,CAClB,EACA,CAAC5B,EAAUgB,CAAW,CAAA,EAG1B,cACK,MAAA,CAAI,UAAWe,EAAWC,EAAAA,QAAQ,QAASpC,CAAS,EACjD,SAAA,CAAAqC,MAACC,EAAAA,WAAU,SAAU,GAAI,QAASR,EAAiB,UAAWM,UAAQ,KAAM,EAC5EC,EAAAA,IAAC,QAAA,CACI,GAAGvB,EACJ,KAAK,OACL,YAAAb,EACA,UAAWmC,EAAAA,QAAQ,MACnB,IAAKpB,EACL,SAAAd,EACA,MAAAC,EACA,aAAAM,EACA,OAAAH,EACA,QAAAD,EACA,QAAS4B,EACT,UAAWF,EACX,UAAWJ,EACX,SAAUO,EACV,QAASb,CAAA,CAAA,EAEZR,GAAeM,GAAYkB,MAACZ,EAAA,CAAA,CAAe,CAAA,EAChD,CAER,CACJ,EAEA3B,EAAU,YAAc"}