UNPKG

@helpwave/hightide

Version:

helpwave's component and theming library

162 lines (156 loc) 4.85 kB
// src/components/properties/PropertyBase.tsx import { AlertTriangle } from "lucide-react"; import clsx2 from "clsx"; // src/components/Button.tsx import clsx from "clsx"; import { jsx, jsxs } from "react/jsx-runtime"; var ButtonSizePaddings = { small: "btn-sm", medium: "btn-md", large: "btn-lg" }; var TextButton = ({ children, disabled = false, color = "neutral", size = "medium", startIcon, endIcon, onClick, className, ...restProps }) => { const colorClasses = { negative: "bg-transparent text-button-text-negative-text", neutral: "bg-transparent text-button-text-neutral-text" }[color]; const iconColorClasses = { negative: "text-button-text-negative-icon", neutral: "text-button-text-neutral-icon" }[color]; return /* @__PURE__ */ jsxs( "button", { onClick: disabled ? void 0 : onClick, disabled: disabled || onClick === void 0, className: clsx( className, { "text-disabled-text": disabled, [clsx(colorClasses, "hover:bg-button-text-hover-background rounded-full")]: !disabled }, ButtonSizePaddings[size] ), ...restProps, children: [ startIcon && /* @__PURE__ */ jsx( "span", { className: clsx({ [iconColorClasses]: !disabled, [`text-disabled-icon`]: disabled }), children: startIcon } ), children, endIcon && /* @__PURE__ */ jsx( "span", { className: clsx({ [iconColorClasses]: !disabled, [`text-disabled-icon`]: disabled }), children: endIcon } ) ] } ); }; // src/hooks/useLanguage.tsx import { createContext, useContext, useEffect as useEffect2, useState as useState2 } from "react"; // src/hooks/useLocalStorage.tsx import { useCallback, useEffect, useState } from "react"; // src/hooks/useLanguage.tsx import { jsx as jsx2 } from "react/jsx-runtime"; var DEFAULT_LANGUAGE = "en"; var LanguageContext = createContext({ language: DEFAULT_LANGUAGE, setLanguage: (v) => v }); var useLanguage = () => useContext(LanguageContext); // src/hooks/useTranslation.ts var useTranslation = (defaults, translationOverwrite = {}) => { const { language: languageProp, translation: overwrite } = translationOverwrite; const { language: inferredLanguage } = useLanguage(); const usedLanguage = languageProp ?? inferredLanguage; let defaultValues = defaults[usedLanguage]; if (overwrite && overwrite[usedLanguage]) { defaultValues = { ...defaultValues, ...overwrite[usedLanguage] }; } return defaultValues; }; // src/components/properties/PropertyBase.tsx import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime"; var defaultPropertyBaseTranslation = { en: { remove: "Remove" }, de: { remove: "Entfernen" } }; var PropertyBase = ({ overwriteTranslation, name, input, softRequired = false, hasValue, icon, readOnly, onRemove, className = "" }) => { const translation = useTranslation(defaultPropertyBaseTranslation, overwriteTranslation); const requiredAndNoValue = softRequired && !hasValue; return /* @__PURE__ */ jsxs2("div", { className: clsx2("row gap-x-0 group", className), children: [ /* @__PURE__ */ jsxs2( "div", { className: clsx2("row gap-x-2 !w-[200px] px-4 py-2 items-center rounded-l-xl border-2 border-r-0", { "bg-gray-100 text-black group-hover:border-primary border-gray-400": !requiredAndNoValue, "bg-warning text-surface-warning group-hover:border-warning border-warning/90": requiredAndNoValue }, className), children: [ icon, name ] } ), /* @__PURE__ */ jsxs2( "div", { className: clsx2("row grow justify-between items-center rounded-r-xl border-2 border-l-0", { "bg-white group-hover:border-primary border-gray-400": !requiredAndNoValue, "bg-surface-warning group-hover:border-warning border-warning/90": requiredAndNoValue }, className), children: [ input({ softRequired, hasValue }), requiredAndNoValue && /* @__PURE__ */ jsx3("div", { className: "text-warning pr-4", children: /* @__PURE__ */ jsx3(AlertTriangle, { size: 24 }) }), onRemove && /* @__PURE__ */ jsx3( TextButton, { onClick: onRemove, color: "negative", className: clsx2("pr-4 items-center", { "!text-transparent": !hasValue || readOnly }), disabled: !hasValue || readOnly, children: translation.remove } ) ] } ) ] }); }; export { PropertyBase }; //# sourceMappingURL=PropertyBase.mjs.map