pascal-maker's picture
Upload folder using huggingface_hub
92189dd verified
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import GradientBorder from '@/common/components/button/GradientBorder';
import useScreenSize from '@/common/screen/useScreenSize';
import {BLUE_PINK_FILL_BR} from '@/theme/gradientStyle';
import type {CarbonIconType} from '@carbon/icons-react';
import {Loading} from 'react-daisyui';
type Props = {
isDisabled?: boolean;
isActive?: boolean;
icon: CarbonIconType;
title: string;
badge?: React.ReactNode;
variant: 'toggle' | 'button' | 'gradient' | 'flat';
span?: 1 | 2;
loadingProps?: {
loading: boolean;
label?: string;
};
onClick: () => void;
};
export default function ToolbarActionIcon({
variant,
isDisabled = false,
isActive = false,
title,
badge,
loadingProps,
icon: Icon,
span = 1,
onClick,
}: Props) {
const {isMobile} = useScreenSize();
const isLoading = loadingProps?.loading === true;
function handleClick() {
if (isDisabled) {
return;
}
onClick();
}
const ButtonBase = (
<div
onClick={handleClick}
className={`relative rounded-lg h-full flex items-center justify-center select-none
${!isDisabled && 'cursor-pointer hover:bg-black'}
${span === 1 && 'col-span-1'}
${span === 2 && 'col-span-2'}
${variant === 'button' && (isDisabled ? 'bg-graydark-500 text-gray-300' : 'bg-graydark-700 hover:bg-graydark-800 text-white')}
${variant === 'toggle' && (isActive ? BLUE_PINK_FILL_BR : 'bg-inherit')}
${variant === 'flat' && (isDisabled ? ' text-gray-600' : 'text-white')}
`}>
<div className="py-4 px-2">
<div className="flex items-center justify-center">
{isLoading ? (
<Loading size="md" className="mx-auto" />
) : (
<Icon
size={isMobile ? 24 : 28}
color={isActive ? 'white' : 'black'}
className={`mx-auto ${isDisabled ? 'text-gray-300' : 'text-white'}`}
/>
)}
</div>
<div
className={`mt-1 md:mt-2 text-center text-xs font-bold ${isActive && 'text-white'}`}>
{isLoading && loadingProps?.label != null
? loadingProps.label
: title}
</div>
{isActive && badge}
</div>
</div>
);
return variant == 'gradient' ? (
<GradientBorder rounded={false} className="rounded-lg h-full text-white">
{ButtonBase}
</GradientBorder>
) : (
ButtonBase
);
}