@uxf/ui
Advanced tools
Comparing version 10.0.12 to 10.3.0
@@ -1,10 +0,18 @@ | ||
import React, { ReactNode } from "react"; | ||
import React, { MouseEventHandler, ReactNode } from "react"; | ||
import { FileInputBaseProps } from "../_file-input-base"; | ||
import { IconName } from "../icon/types"; | ||
import { AvatarFileInputVariant } from "./theme"; | ||
export interface AvatarFileInputProps extends FileInputBaseProps { | ||
customControls?: (args: { | ||
onSelectFile: MouseEventHandler; | ||
onRemoveFile: MouseEventHandler; | ||
}) => ReactNode; | ||
helperText?: ReactNode; | ||
hiddenLabel?: boolean; | ||
icon?: IconName; | ||
label?: ReactNode; | ||
changeFileLabel?: ReactNode; | ||
removeFileLabel?: ReactNode; | ||
selectFileLabel?: ReactNode; | ||
variant?: AvatarFileInputVariant; | ||
} | ||
export declare const AvatarFileInput: React.ForwardRefExoticComponent<AvatarFileInputProps & React.RefAttributes<HTMLInputElement>>; |
@@ -29,2 +29,3 @@ "use strict"; | ||
const useInputFocus_1 = require("@uxf/core/hooks/useInputFocus"); | ||
const composeRefs_1 = require("@uxf/core/utils/composeRefs"); | ||
const cx_1 = require("@uxf/core/utils/cx"); | ||
@@ -35,5 +36,7 @@ const file_1 = require("@uxf/core/utils/file"); | ||
const avatar_1 = require("../avatar"); | ||
const button_1 = require("../button"); | ||
const form_component_1 = require("../form-component"); | ||
const icon_1 = require("../icon"); | ||
exports.AvatarFileInput = (0, react_1.forwardRef)((props, ref) => { | ||
var _a, _b; | ||
var _a, _b, _c, _d, _e; | ||
const generatedId = (0, react_1.useId)(); | ||
@@ -44,13 +47,19 @@ const id = props.id || generatedId; | ||
const errorId = props.isInvalid && props.id ? `${props.id}--errormessage` : undefined; | ||
const stateClassNames = (0, cx_1.cx)(input.focused && classes_1.CLASSES.IS_FOCUSED, (props.isDisabled || props.isReadOnly) && classes_1.CLASSES.IS_DISABLED, props.isInvalid && classes_1.CLASSES.IS_INVALID); | ||
const label = props.value && props.changeFileLabel ? props.changeFileLabel : props.label; | ||
return (react_1.default.createElement("div", { className: `uxf-avatar-file-input uxf-avatar-file-input--variant-${(_a = props.variant) !== null && _a !== void 0 ? _a : "default"} ${(_b = props.className) !== null && _b !== void 0 ? _b : ""}` }, | ||
react_1.default.createElement("div", { className: "uxf-avatar-file-input__label-wrapper" }, | ||
props.value ? (react_1.default.createElement(avatar_1.Avatar, { className: (0, cx_1.cx)("uxf-avatar-file-input__image", stateClassNames), src: (0, file_1.getFileUrl)(props.value) })) : (react_1.default.createElement("label", { className: (0, cx_1.cx)("uxf-avatar-file-input__label", stateClassNames), htmlFor: id, tabIndex: 0 }, | ||
react_1.default.createElement(icon_1.Icon, { className: (0, cx_1.cx)("uxf-avatar-file-input__label-icon", stateClassNames), name: "cloud", size: 28 }))), | ||
(props.label && typeof props.label === "string") || | ||
(props.value && props.changeFileLabel && typeof props.changeFileLabel === "string") ? (react_1.default.createElement("label", { className: (0, cx_1.cx)("uxf-avatar-file-input__label-text", stateClassNames), htmlFor: id, tabIndex: 0 }, label)) : (label)), | ||
react_1.default.createElement(_file_input_base_1._FileInputBase, { accept: props.accept, "aria-describedby": errorId, "aria-invalid": props.isInvalid, className: "uxf-avatar-file-input__input", form: props.form, id: id, isDisabled: props.isDisabled, isFocused: props.isFocused, isInvalid: props.isInvalid, isReadOnly: props.isReadOnly, isRequired: props.isRequired, name: props.name, onBlur: input.onBlur, onChange: props.onChange, onFocus: input.onFocus, onUploadError: props.onUploadError, onUploadFile: props.onUploadFile, ref: ref, value: props.value }), | ||
props.helperText && (react_1.default.createElement("div", { className: (0, cx_1.cx)("uxf-helper-text", errorId && classes_1.CLASSES.IS_INVALID), id: errorId }, props.helperText)))); | ||
const stateClassName = (0, cx_1.cx)(((_a = props.isFocused) !== null && _a !== void 0 ? _a : input.focused) && classes_1.CLASSES.IS_FOCUSED, props.isDisabled && classes_1.CLASSES.IS_DISABLED, props.isInvalid && classes_1.CLASSES.IS_INVALID, props.isReadOnly && classes_1.CLASSES.IS_READONLY, props.isRequired && classes_1.CLASSES.IS_REQUIRED); | ||
const rootClassName = (0, cx_1.cx)(`uxf-avatar-file-input uxf-avatar-file-input--variant-${(_b = props.variant) !== null && _b !== void 0 ? _b : "default"}`, stateClassName, props.className); | ||
const onSelectFile = () => { var _a; return (_a = innerRef.current) === null || _a === void 0 ? void 0 : _a.click(); }; | ||
const onRemoveFile = () => props.onChange(null); | ||
return (react_1.default.createElement(form_component_1.FormComponent, { className: rootClassName, errorId: props.id, helperText: props.helperText, hiddenLabel: props.hiddenLabel, inputId: id, label: props.label }, | ||
react_1.default.createElement("div", { className: "uxf-avatar-file-input__inner-wrapper" }, | ||
react_1.default.createElement("div", { className: (0, cx_1.cx)("uxf-avatar-file-input__input", stateClassName), onClick: onSelectFile }, | ||
react_1.default.createElement(_file_input_base_1._FileInputBase, { accept: props.accept, "aria-describedby": errorId, "aria-invalid": props.isInvalid, className: "uxf-avatar-file-input__input-element", form: props.form, id: id, isDisabled: props.isDisabled, isFocused: props.isFocused, isInvalid: props.isInvalid, isReadOnly: props.isReadOnly, isRequired: props.isRequired, name: props.name, onBlur: input.onBlur, onFocus: input.onFocus, onChange: props.onChange, onUploadError: props.onUploadError, onUploadFile: props.onUploadFile, ref: (0, composeRefs_1.composeRefs)(innerRef, ref), value: props.value }), | ||
props.value ? (react_1.default.createElement(avatar_1.Avatar, { className: "uxf-avatar-file-input__input-avatar", src: (0, file_1.getFileUrl)(props.value) })) : (react_1.default.createElement("div", { className: "uxf-avatar-file-input__input-empty" }, | ||
react_1.default.createElement(icon_1.Icon, { className: "uxf-avatar-file-input__input-empty-icon", name: (_c = props.icon) !== null && _c !== void 0 ? _c : "cloud" })))), | ||
react_1.default.createElement("div", { className: "uxf-avatar-file-input__controls" }, props.customControls ? (props.customControls({ | ||
onSelectFile, | ||
onRemoveFile, | ||
})) : (react_1.default.createElement("div", { className: "uxf-avatar-file-input__controls-buttons" }, | ||
react_1.default.createElement(button_1.Button, { className: "uxf-avatar-file-input__controls-button uxf-avatar-file-input__controls-button--select", disabled: props.isDisabled, onClick: onSelectFile, size: "sm", variant: "white" }, (_d = props.selectFileLabel) !== null && _d !== void 0 ? _d : "Upload image"), | ||
!!props.value && !props.isDisabled && (react_1.default.createElement(button_1.Button, { className: "uxf-avatar-file-input__controls-button uxf-avatar-file-input__controls-button--remove", color: "error", disabled: props.isDisabled, onClick: onRemoveFile, size: "sm", variant: "white" }, (_e = props.removeFileLabel) !== null && _e !== void 0 ? _e : "Remove avatar")))))))); | ||
}); | ||
exports.AvatarFileInput.displayName = "UxfUiAvatarFileInput"; |
{ | ||
"name": "@uxf/ui", | ||
"version": "10.0.12", | ||
"version": "10.3.0", | ||
"description": "", | ||
@@ -5,0 +5,0 @@ "publishConfig": { |
Sorry, the diff of this file is not supported yet
775224
16446