UNPKG

@kloudlite/design-system

Version:

A design system for building ambitious products.

1,478 lines (1,467 loc) 57.5 kB
// components/icons.tsx import { BellSimple, Warning, WarningCircleFill, Domain, ArrowLeftLg, ArrowRightLg, ArrowUpLg, ArrowDownLg, ArrowsDownUp, Plus, Trash, PencilLine, PencilSimple, GithubLogoFill, GitlabLogoFill, GitBranchFill, Users, Check, ChevronLeft, ChevronRight, X, SmileySad, InfoFill, CheckCircleFill, WarningFill, WarningOctagonFill, LockSimple, XCircleFill, LockSimpleOpen, MinusCircle, Search, ArrowsCounterClockwise, ArrowClockwise, Copy, GearSix, QrCode, WireGuardlogo, ChevronUpDown, ChevronDown, Buildings, Project, InfraAsCode, Container, File, TreeStructure, CirclesFour, BackingServices, VirtualMachine, Database, ArrowsClockwise, Info, Fan, WarningCircle, ChecksFill, CircleNotch, Circle, CircleFill, Spinner, Globe, ShieldCheck, NoOps, Nodeless, GitMerge, PencilLine as PencilLine2, AWSlogoFill, GoogleCloudlogo, ArrowCounterClockwise, CopySimple, RecordFill, CheckCircle, ArrowLeftLg as ArrowLeftLg2, EyeSlash, Eye, CaretUpFill, CaretDownFill, XFill, HamburgerFill, CalendarCheckFill, GearFill, EnvelopeSimple } from "@jengaicons/react"; import { jsx } from "react/jsx-runtime"; // components/organisms/headerV2.tsx import { useRef as useRef4, useState as useState4 } from "react"; // components/atoms/button.tsx import { AnimatePresence, motion } from "framer-motion"; import React from "react"; // components/utils.tsx import classNames from "classnames"; import { useMemo } from "react"; import { v4 } from "uuid"; var cn = (...props) => { return classNames(...props); }; // components/atoms/button.tsx import { jsx as jsx2, jsxs } from "react/jsx-runtime"; var ButtonBase = React.forwardRef((props, ref) => { const { onClick = () => { }, to = "", linkComponent = motion.button, disabled = false, suffix, prefix, block = false, type = "button", variant = "primary", // noRing, noRounded = false, noBorder = false, sharpLeft = false, sharpRight = false, selected = false, iconOnly = false, className = "", content, size = "md", loading = false, tabIndex, toLabel = "to", target, iconSize, ...mprops } = props; let Component = linkComponent; let tempToLabel = toLabel; let extraProps = {}; if (to) { if (linkComponent === motion.button) { Component = motion.a; tempToLabel = "href"; } else { Component = linkComponent; } } if (Component === motion.button || Component === motion.a) { extraProps = { initial: { scale: 1 }, whileTap: { scale: 0.99 } }; } const noRing = false; return /* @__PURE__ */ jsxs( Component, { ...mprops, ...{ [tempToLabel]: to }, disabled, onClick, ...extraProps, ref, type, tabIndex, target, className: cn( "pulsable kl-flex-nowrap", { "kl-w-full": !!block, "kl-w-fit": !block, selected }, { "kl-pointer-events-none": loading }, { "kl-bodyMd-medium": !variant?.includes("plain"), "kl-bodyMd": variant?.includes("plain") }, { "kl-pointer-events-none !kl-text-text-disabled kl-bg-surface-basic-disabled": disabled, "!kl-border-border-disabled": disabled && ![ "plain", "primary-plain", "critical-plain", "secondary-plain" ].includes(variant) }, "kl-relative kl-ring-offset-1", "kl-outline-none", "kl-flex kl-flex-row kl-gap-lg kl-items-center kl-justify-center", "disabled:kl-text-text-disabled disabled:kl-bg-surface-basic-disabled", { // noRing "focus-visible:kl-ring-2 focus:kl-ring-border-focus focus:kl-z-10": !noRing }, { ...!noRounded && { "kl-rounded-none": sharpLeft && sharpRight, "kl-rounded-r": sharpLeft && !sharpRight, "kl-rounded-l": !sharpLeft && sharpRight, "kl-rounded": !sharpLeft && !sharpRight } }, "disabled:kl-pointer-events-none", { "kl-border-none": noBorder, ...!noBorder && { "kl-border-border-default disabled:kl-border-border-disabled": variant === "basic" || variant === "outline" || variant === "secondary-outline", "kl-border-border-primary disabled:kl-border-border-disabled": variant === "primary" || variant === "primary-outline", "kl-border-border-secondary disabled:kl-border-border-disabled": variant === "secondary", "kl-border-border-critical disabled:kl-border-border-disabled": variant === "critical-outline" || variant === "critical", "kl-border-border-purple": variant === "purple", "kl-border-border-warning": variant === "warning", "kl-border-border-tertiary": variant === "tertiary", "kl-border-none": variant === "plain" || variant === "primary-plain" || variant === "critical-plain" || variant === "secondary-plain", "kl-border": !(variant === "plain" || variant === "primary-plain" || variant === "critical-plain" || variant === "secondary-plain") } }, !disabled ? { "kl-bg-surface-basic-default hover:kl-bg-surface-basic-hovered active:kl-bg-surface-basic-pressed disabled:kl-bg-surface-basic-default": variant === "basic" && !selected, "kl-bg-surface-basic-pressed hover:kl-bg-surface-basic-pressed active:kl-bg-surface-basic-pressed disabled:kl-bg-surface-basic-default": variant === "basic" && selected, "kl-bg-surface-primary-default hover:kl-bg-surface-primary-hovered active:kl-bg-surface-primary-pressed disabled:kl-bg-surface-basic-default": variant === "primary", "kl-bg-surface-secondary-default hover:kl-bg-surface-secondary-hovered active:kl-bg-surface-secondary-pressed disabled:kl-bg-surface-basic-default": variant === "secondary", "kl-bg-surface-critical-default hover:kl-bg-surface-critical-hovered active:kl-bg-surface-critical-pressed disabled:kl-bg-surface-basic-default": variant === "critical", "kl-bg-none hover:kl-bg-surface-critical-subdued active:kl-bg-surface-critical-subdued": variant === "critical-outline", "kl-bg-none hover:kl-bg-surface-primary-subdued active:kl-bg-surface-primary-subdued": variant === "primary-outline", "kl-bg-none hover:kl-bg-surface-secondary-subdued active:kl-bg-surface-secondary-subdued": variant === "secondary-outline", "kl-bg-none hover:kl-bg-surface-basic-hovered active:kl-bg-surface-basic-pressed": variant === "outline", "kl-bg-surface-basic-pressed kl-shadow-none hover:kl-bg-surface-basic-hovered active:kl-bg-surface-basic-pressed hover:kl-shadow-button": variant === "outline" && selected, "kl-bg-none kl-shadow-none": (variant === "plain" || variant === "primary-plain" || variant === "secondary-plain" || variant === "critical-plain") && !iconOnly, "kl-shadow-none active:kl-shadow-button kl-bg-surface-basic-pressed": variant === "plain" && !iconOnly && selected, "kl-bg-none kl-shadow-none hover:kl-bg-surface-basic-hovered active:kl-bg-surface-basic-pressed active:kl-shadow-button active:kl-shadow-button": variant === "plain" && iconOnly, "kl-bg-surface-basic-pressed kl-shadow-none hover:kl-bg-surface-basic-hovered active:kl-bg-surface-basic-pressed active:kl-shadow-button": variant === "plain" && iconOnly && selected, "kl-bg-surface-purple-default hover:kl-bg-surface-purple-hovered active:kl-bg-surface-purple-pressed": variant === "purple", "kl-bg-surface-tertiary-default hover:kl-bg-surface-tertiary-hovered active:kl-bg-surface-tertiary-pressed": variant === "tertiary", "kl-bg-surface-warning-default hover:kl-bg-surface-warning-hovered active:kl-bg-surface-warning-pressed": variant === "warning" } : {}, { "kl-text-text-default": variant === "basic" || variant === "plain" || variant === "outline", "kl-text-text-on-primary": variant === "primary" || variant === "critical" || variant === "secondary" || variant === "secondary-outline" || variant === "purple" || variant === "warning", "kl-text-text-critical": variant === "critical-outline" || variant === "critical-plain", "kl-text-text-primary": variant === "primary-outline" || variant === "primary-plain", "kl-text-text-secondary": variant === "secondary-plain", "kl-text-text-on-secondary": variant === "tertiary" }, { "focus:kl-underline": noRing }, { "hover:kl-underline": variant === "plain" || variant === "primary-plain" || variant === "critical-plain" || variant === "secondary-plain" }, { // icon ...!iconOnly && !(variant === "plain" || variant === "primary-plain" || variant === "critical-plain" || variant === "secondary-plain") && { "kl-py-md kl-px-lg": size === "sm", "kl-py-lg kl-px-2xl": size === "md", "kl-py-xl kl-px-4xl": size === "lg", "kl-py-2xl kl-px-6xl": size === "xl", "kl-py-2xl kl-px-9xl": size === "2xl" } }, { ...!iconOnly && (variant === "plain" || variant === "primary-plain" || variant === "critical-plain" || variant === "secondary-plain") && { "kl-px-md kl-py-sm": size === "sm", "kl-py-sm kl-px-md": size === "md", "kl-py-md kl-px-lg": size === "lg" } }, { "kl-p-lg !kl-h-[36px] !kl-w-[36px]": iconOnly && (size === "md" || size === "lg"), "kl-p-md": iconOnly && size === "sm", "kl-p-sm": iconOnly && size === "xs" }, className ), children: [ /* @__PURE__ */ jsx2(AnimatePresence, { children: loading && /* @__PURE__ */ jsx2( motion.span, { initial: { width: 0 }, animate: { width: "auto", paddingRight: 0 }, exit: { width: 0 }, className: cn( "kl-flex kl-items-center kl-justify-center kl-aspect-square kl-overflow-hidden" ), children: /* @__PURE__ */ jsx2("span", { className: cn("kl-animate-spin"), children: /* @__PURE__ */ jsx2(Spinner, { color: "currentColor", weight: 2, size: 18 }) }) } ) }), !!prefix && React.cloneElement(prefix, { size: iconSize || (iconOnly && size === "lg" ? 20 : 16), color: "currentColor" }), !iconOnly && /* @__PURE__ */ jsx2("span", { className: cn("kl-block kl-truncate"), children: content }), !!suffix && React.cloneElement(suffix, { size: iconSize || 16, color: "currentColor" }) ] } ); }); var IconButton = React.forwardRef( (props, ref) => { const { icon, block } = props; return /* @__PURE__ */ jsx2( ButtonBase, { ...props, ref, iconOnly: true, content: null, prefix: icon, block: !!block } ); } ); var Button = React.forwardRef( (props, ref) => { const { block } = props; return /* @__PURE__ */ jsx2(ButtonBase, { ...props, iconOnly: false, ref, block: !!block }); } ); // components/atoms/option-list.tsx import { motion as motion4 } from "framer-motion"; import { Children, cloneElement as cloneElement2, forwardRef as forwardRef4, useEffect, useRef as useRef3, useState as useState3 } from "react"; // components/atoms/_dropdown-primitive.tsx import * as React2 from "react"; import { composeEventHandlers } from "@radix-ui/primitive"; import { composeRefs } from "@radix-ui/react-compose-refs"; import { createContextScope } from "@radix-ui/react-context"; import { useControllableState } from "@radix-ui/react-use-controllable-state"; import { Primitive } from "@radix-ui/react-primitive"; import * as MenuPrimitive from "@radix-ui/react-menu"; import { createMenuScope } from "@radix-ui/react-menu"; import { useId } from "@radix-ui/react-id"; import { jsx as jsx3 } from "react/jsx-runtime"; var DROPDOWN_MENU_NAME = "DropdownMenu"; var [createDropdownMenuContext, createDropdownMenuScope] = createContextScope( DROPDOWN_MENU_NAME, [createMenuScope] ); var useMenuScope = createMenuScope(); var [DropdownMenuProvider, useDropdownMenuContext] = createDropdownMenuContext(DROPDOWN_MENU_NAME); var DropdownMenu = (props) => { const { __scopeDropdownMenu, children, dir, open: openProp, defaultOpen, onOpenChange, modal = true } = props; const menuScope = useMenuScope(__scopeDropdownMenu); const triggerRef = React2.useRef(null); const [open = false, setOpen] = useControllableState({ prop: openProp, defaultProp: defaultOpen, onChange: onOpenChange }); return /* @__PURE__ */ jsx3( DropdownMenuProvider, { scope: __scopeDropdownMenu, triggerId: useId(), triggerRef, contentId: useId(), open, onOpenChange: setOpen, onOpenToggle: React2.useCallback( () => setOpen((prevOpen) => !prevOpen), [setOpen] ), modal, children: /* @__PURE__ */ jsx3( MenuPrimitive.Root, { ...menuScope, open, onOpenChange: setOpen, dir, modal, children } ) } ); }; DropdownMenu.displayName = DROPDOWN_MENU_NAME; var TRIGGER_NAME = "DropdownMenuTrigger"; var DropdownMenuTrigger = React2.forwardRef((props, forwardedRef) => { const { __scopeDropdownMenu, disabled = false, ...triggerProps } = props; const context = useDropdownMenuContext(TRIGGER_NAME, __scopeDropdownMenu); const menuScope = useMenuScope(__scopeDropdownMenu); return /* @__PURE__ */ jsx3(MenuPrimitive.Anchor, { asChild: true, ...menuScope, children: /* @__PURE__ */ jsx3( Primitive.button, { type: "button", id: context.triggerId, "aria-haspopup": "menu", "aria-expanded": context.open, "aria-controls": context.open ? context.contentId : void 0, "data-state": context.open ? "open" : "closed", "data-disabled": disabled ? "" : void 0, disabled, ...triggerProps, ref: composeRefs(forwardedRef, context.triggerRef), onPointerDown: composeEventHandlers(props.onPointerDown, (event) => { if (!disabled && event.button === 0 && event.ctrlKey === false) { context.onOpenToggle(); if (!context.open) event.preventDefault(); } }), onKeyDown: composeEventHandlers(props.onKeyDown, (event) => { if (disabled) return; if (["Enter", " "].includes(event.key)) context.onOpenToggle(); if (event.key === "ArrowDown") context.onOpenChange(true); if (["Enter", " ", "ArrowDown"].includes(event.key)) event.preventDefault(); }) } ) }); }); DropdownMenuTrigger.displayName = TRIGGER_NAME; var PORTAL_NAME = "DropdownMenuPortal"; var DropdownMenuPortal = (props) => { const { __scopeDropdownMenu, ...portalProps } = props; const menuScope = useMenuScope(__scopeDropdownMenu); return /* @__PURE__ */ jsx3(MenuPrimitive.Portal, { ...menuScope, ...portalProps }); }; DropdownMenuPortal.displayName = PORTAL_NAME; var CONTENT_NAME = "DropdownMenuContent"; var DropdownMenuContent = React2.forwardRef((props, forwardedRef) => { const { __scopeDropdownMenu, ...contentProps } = props; const context = useDropdownMenuContext(CONTENT_NAME, __scopeDropdownMenu); const menuScope = useMenuScope(__scopeDropdownMenu); const hasInteractedOutsideRef = React2.useRef(false); return /* @__PURE__ */ jsx3( MenuPrimitive.Content, { id: context.contentId, "aria-labelledby": context.triggerId, ...menuScope, ...contentProps, ref: forwardedRef, onCloseAutoFocus: composeEventHandlers( props.onCloseAutoFocus, (event) => { if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus(); hasInteractedOutsideRef.current = false; event.preventDefault(); } ), onInteractOutside: composeEventHandlers( props.onInteractOutside, (event) => { const originalEvent = event.detail.originalEvent; const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true; const isRightClick = originalEvent.button === 2 || ctrlLeftClick; if (!context.modal || isRightClick) hasInteractedOutsideRef.current = true; } ), style: { ...props.style, // re-namespace exposed content custom properties ...{ "--radix-dropdown-menu-content-transform-origin": "var(--radix-popper-transform-origin)", "--radix-dropdown-menu-content-available-width": "var(--radix-popper-available-width)", "--radix-dropdown-menu-content-available-height": "var(--radix-popper-available-height)", "--radix-dropdown-menu-trigger-width": "var(--radix-popper-anchor-width)", "--radix-dropdown-menu-trigger-height": "var(--radix-popper-anchor-height)" } } } ); }); DropdownMenuContent.displayName = CONTENT_NAME; var GROUP_NAME = "DropdownMenuGroup"; var DropdownMenuGroup = React2.forwardRef((props, forwardedRef) => { const { __scopeDropdownMenu, ...groupProps } = props; const menuScope = useMenuScope(__scopeDropdownMenu); return /* @__PURE__ */ jsx3(MenuPrimitive.Group, { ...menuScope, ...groupProps, ref: forwardedRef }); }); DropdownMenuGroup.displayName = GROUP_NAME; var LABEL_NAME = "DropdownMenuLabel"; var DropdownMenuLabel = React2.forwardRef((props, forwardedRef) => { const { __scopeDropdownMenu, ...labelProps } = props; const menuScope = useMenuScope(__scopeDropdownMenu); return /* @__PURE__ */ jsx3(MenuPrimitive.Label, { ...menuScope, ...labelProps, ref: forwardedRef }); }); DropdownMenuLabel.displayName = LABEL_NAME; var ITEM_NAME = "DropdownMenuItem"; var DropdownMenuItem = React2.forwardRef((props, forwardedRef) => { const { __scopeDropdownMenu, ...itemProps } = props; const menuScope = useMenuScope(__scopeDropdownMenu); return /* @__PURE__ */ jsx3(MenuPrimitive.Item, { ...menuScope, ...itemProps, ref: forwardedRef }); }); DropdownMenuItem.displayName = ITEM_NAME; var CHECKBOX_ITEM_NAME = "DropdownMenuCheckboxItem"; var DropdownMenuCheckboxItem = React2.forwardRef((props, forwardedRef) => { const { __scopeDropdownMenu, ...checkboxItemProps } = props; const menuScope = useMenuScope(__scopeDropdownMenu); return /* @__PURE__ */ jsx3( MenuPrimitive.CheckboxItem, { ...menuScope, ...checkboxItemProps, ref: forwardedRef } ); }); DropdownMenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME; var RADIO_GROUP_NAME = "DropdownMenuRadioGroup"; var DropdownMenuRadioGroup = React2.forwardRef((props, forwardedRef) => { const { __scopeDropdownMenu, ...radioGroupProps } = props; const menuScope = useMenuScope(__scopeDropdownMenu); return /* @__PURE__ */ jsx3( MenuPrimitive.RadioGroup, { ...menuScope, ...radioGroupProps, ref: forwardedRef } ); }); DropdownMenuRadioGroup.displayName = RADIO_GROUP_NAME; var RADIO_ITEM_NAME = "DropdownMenuRadioItem"; var DropdownMenuRadioItem = React2.forwardRef((props, forwardedRef) => { const { __scopeDropdownMenu, ...radioItemProps } = props; const menuScope = useMenuScope(__scopeDropdownMenu); return /* @__PURE__ */ jsx3( MenuPrimitive.RadioItem, { ...menuScope, ...radioItemProps, ref: forwardedRef } ); }); DropdownMenuRadioItem.displayName = RADIO_ITEM_NAME; var INDICATOR_NAME = "DropdownMenuItemIndicator"; var DropdownMenuItemIndicator = React2.forwardRef((props, forwardedRef) => { const { __scopeDropdownMenu, ...itemIndicatorProps } = props; const menuScope = useMenuScope(__scopeDropdownMenu); return /* @__PURE__ */ jsx3( MenuPrimitive.ItemIndicator, { ...menuScope, ...itemIndicatorProps, ref: forwardedRef } ); }); DropdownMenuItemIndicator.displayName = INDICATOR_NAME; var SEPARATOR_NAME = "DropdownMenuSeparator"; var DropdownMenuSeparator = React2.forwardRef((props, forwardedRef) => { const { __scopeDropdownMenu, ...separatorProps } = props; const menuScope = useMenuScope(__scopeDropdownMenu); return /* @__PURE__ */ jsx3( MenuPrimitive.Separator, { ...menuScope, ...separatorProps, ref: forwardedRef } ); }); DropdownMenuSeparator.displayName = SEPARATOR_NAME; var ARROW_NAME = "DropdownMenuArrow"; var DropdownMenuArrow = React2.forwardRef((props, forwardedRef) => { const { __scopeDropdownMenu, ...arrowProps } = props; const menuScope = useMenuScope(__scopeDropdownMenu); return /* @__PURE__ */ jsx3(MenuPrimitive.Arrow, { ...menuScope, ...arrowProps, ref: forwardedRef }); }); DropdownMenuArrow.displayName = ARROW_NAME; var SUB_TRIGGER_NAME = "DropdownMenuSubTrigger"; var DropdownMenuSubTrigger = React2.forwardRef((props, forwardedRef) => { const { __scopeDropdownMenu, ...subTriggerProps } = props; const menuScope = useMenuScope(__scopeDropdownMenu); return /* @__PURE__ */ jsx3( MenuPrimitive.SubTrigger, { ...menuScope, ...subTriggerProps, ref: forwardedRef } ); }); DropdownMenuSubTrigger.displayName = SUB_TRIGGER_NAME; var SUB_CONTENT_NAME = "DropdownMenuSubContent"; var DropdownMenuSubContent = React2.forwardRef((props, forwardedRef) => { const { __scopeDropdownMenu, ...subContentProps } = props; const menuScope = useMenuScope(__scopeDropdownMenu); return /* @__PURE__ */ jsx3( MenuPrimitive.SubContent, { ...menuScope, ...subContentProps, ref: forwardedRef, style: { ...props.style, // re-namespace exposed content custom properties ...{ "--radix-dropdown-menu-content-transform-origin": "var(--radix-popper-transform-origin)", "--radix-dropdown-menu-content-available-width": "var(--radix-popper-available-width)", "--radix-dropdown-menu-content-available-height": "var(--radix-popper-available-height)", "--radix-dropdown-menu-trigger-width": "var(--radix-popper-anchor-width)", "--radix-dropdown-menu-trigger-height": "var(--radix-popper-anchor-height)" } } } ); }); DropdownMenuSubContent.displayName = SUB_CONTENT_NAME; var Root2 = DropdownMenu; var Trigger = DropdownMenuTrigger; var Portal2 = DropdownMenuPortal; var Content2 = DropdownMenuContent; var Item2 = DropdownMenuItem; var CheckboxItem2 = DropdownMenuCheckboxItem; var RadioGroup2 = DropdownMenuRadioGroup; var RadioItem2 = DropdownMenuRadioItem; var ItemIndicator2 = DropdownMenuItemIndicator; var Separator2 = DropdownMenuSeparator; // components/atoms/input.tsx import { cloneElement, forwardRef as forwardRef2, useId as useId2, useRef as useRef2, useState } from "react"; // components/atoms/animate-hide.tsx import { AnimatePresence as AnimatePresence2, motion as motion2 } from "framer-motion"; import { jsx as jsx4 } from "react/jsx-runtime"; var AnimateHide = ({ children, show, initial = false, className, onClick }) => { return /* @__PURE__ */ jsx4(AnimatePresence2, { initial, children: show && /* @__PURE__ */ jsx4( motion2.div, { onClick, initial: { height: 0, opacity: 0, y: -5 }, animate: { height: "auto", opacity: 1, y: 0 }, exit: { opacity: 0, height: 0, y: -5 }, className: cn(className, "kl-overflow-hidden"), children } ) }); }; var animate_hide_default = AnimateHide; // components/atoms/input.tsx import { jsx as jsx5, jsxs as jsxs2 } from "react/jsx-runtime"; var TextInputBase = forwardRef2( (props, ref) => { const { name, value, type, component = "input", extra, className = "", containerClassName = "", error = false, disabled = false, label, onKeyDown, autoComplete = "off", onBlur = () => { }, onFocus = () => { }, onChange = () => { }, message = "", showclear, placeholder, size = "md", resize = true, prefix, suffix, prefixIcon, suffixIcon, id, tabIndex, shimmerLoading, autoFocus, focusRing = true, textFieldClassName, ...extraProps } = props; const [t, setT] = useState(type || "text"); const Component = component; const containerRef = useRef2(null); return /* @__PURE__ */ jsxs2("div", { className: cn("kl-flex kl-flex-col", containerClassName), children: [ (label || extra) && /* @__PURE__ */ jsxs2( "div", { className: cn( "kl-flex kl-items-center kl-justify-between kl-gap-md", { "kl-pb-md": !!label || !!extra } ), children: [ /* @__PURE__ */ jsx5( "label", { className: "kl-select-none kl-bodyMd-medium pulsable kl-min-w-[33%] kl-text-text-default", htmlFor: id, children: label } ), /* @__PURE__ */ jsx5( "div", { className: cn({ "kl-h-4xl pulsable": !!label || !!extra }), children: extra && cloneElement(extra) } ) ] } ), /* @__PURE__ */ jsxs2( "div", { ref: containerRef, className: cn( "kl-transition-all kl-rounded kl-border kl-flex kl-flex-row kl-items-center kl-relative kl-ring-offset-1 group-data-[theme=dark]/html:kl-ring-offset-0", { "kl-text-text-critical kl-bg-surface-critical-subdued kl-border-border-critical": error, "kl-text-text-default kl-border-border-default kl-bg-surface-basic-input": !error, "kl-text-text-disabled kl-border-border-disabled kl-bg-surface-basic-input": disabled, "kl-pr-0": component !== "input" }, { "kl-h-[38px]": size === "md" && component === "input", "kl-h-[48px]": size === "lg" && component === "input", "kl-h-[60px]": size === "xl" && component === "input" }, size === "xl" ? "!kl-px-2xl" : "kl-px-lg", className ), children: [ !!prefixIcon && /* @__PURE__ */ jsx5( "div", { className: cn("kl-pr-lg kl-bodyMd", { "kl-text-text-strong": !error && !disabled, "kl-text-text-critical": error, "kl-text-text-disabled": disabled }), children: cloneElement(prefixIcon, { size: 16, color: "currentColor" }) } ), !!prefix && /* @__PURE__ */ jsx5("div", { className: "kl-cursor-default", children: prefix }), /* @__PURE__ */ jsx5( Component, { ...type === "number" ? { pattern: "[0-9]" } : {}, name, autoFocus, type: t, placeholder, id, tabIndex, className: cn( "kl-outline-none focus-within:kl-outline-none focus:kl-outline-none focus-visible:kl-outline-none kl-flex-1 kl-w-full kl-h-full", "kl-rounded kl-bg-transparent", { "kl-text-text-critical placeholder:kl-text-text-critical/70": error && !disabled, "kl-text-text-default": !error && !disabled, "kl-text-text-disabled": disabled }, { "kl-py-xl": size === "lg", "kl-py-lg": size === "md" }, { "kl-resize-none": !resize }, { "kl-no-spinner": type === "number" }, size === "xl" ? "" : "kl-bodyMd", textFieldClassName ), value, onChange: (e) => { if (onChange) { onChange(e); } }, onFocus: (e) => { if (focusRing) { containerRef.current?.classList.add("kl-ring-2"); } onFocus(e); }, disabled, ref, onKeyDown, autoComplete, onBlur: (e) => { containerRef.current?.classList.remove("kl-ring-2"); onBlur(e); }, ...extraProps } ), !!suffix && /* @__PURE__ */ jsx5("div", { className: "kl-cursor-default", children: suffix }), !!suffixIcon && /* @__PURE__ */ jsx5( "div", { className: cn("kl-pl-lg kl-bodyMd", { "kl-text-text-critical": error, "kl-text-text-strong": !error && !disabled, "kl-text-text-disabled": disabled }), children: cloneElement(suffixIcon, { color: "currentColor", size: 16 }) } ), showclear && !disabled && /* @__PURE__ */ jsx5( "button", { "aria-label": "Clear", type: "button", tabIndex: -1, onClick: (e) => { if (onChange) onChange({ ...e, target: { value: "" } }); }, className: cn( "kl-outline-none kl-flex kl-items-center kl-rounded kl-justify-center", { "kl-cursor-default": disabled } ), children: /* @__PURE__ */ jsx5(X, { size: 16, color: "currentColor" }) } ), type === "password" && !disabled && /* @__PURE__ */ jsx5( "button", { type: "button", tabIndex: -1, onClick: () => { setT((prev) => prev === "text" ? "password" : "text"); }, className: cn( "kl-outline-none kl-flex kl-items-center kl-rounded kl-justify-center", { "kl-cursor-default": disabled } ), children: t === "password" ? /* @__PURE__ */ jsx5(EyeSlash, { size: 16, color: "currentColor" }) : /* @__PURE__ */ jsx5(Eye, { size: 16, color: "currentColor" }) } ) ] } ), /* @__PURE__ */ jsx5(animate_hide_default, { show: !!message, children: /* @__PURE__ */ jsx5( "div", { className: cn( "kl-bodySm pulsable", { "kl-text-text-critical": error, "kl-text-text-default": !error }, "kl-pt-md" ), children: message } ) }) ] }); } ); var TextInput = forwardRef2( (props, ref) => { const id = useId2(); return /* @__PURE__ */ jsx5( TextInputBase, { ...{ ...props, id, component: "input", type: "text", ref } } ); } ); var TextArea = forwardRef2( ({ autoComplete = "off", onChange = (_) => { }, resize = false, rows = "3", ...etc }, ref) => { const id = useId2(); return /* @__PURE__ */ jsx5( TextInputBase, { ...{ ...etc, id, rows, autoComplete, onChange, resize, component: "textarea", ref, type: "text" } } ); } ); // components/atoms/tabs.tsx import * as RovingFocusGroup from "@radix-ui/react-roving-focus"; import { AnimatePresence as AnimatePresence3, LayoutGroup, motion as motion3 } from "framer-motion"; import React3, { forwardRef as forwardRef3, useId as useId3, useState as useState2 } from "react"; import { jsx as jsx6, jsxs as jsxs3 } from "react/jsx-runtime"; var TabBase = ({ to = "", label, active = false, fitted = false, onClick = () => { }, LinkComponent = "div", variant = "plain", size = "md", prefix, layoutId, toLabel = "to" }) => { let Component = LinkComponent; let tempToLabel = toLabel; let extraProps = {}; if (to) { if (LinkComponent === "div") { Component = motion3.a; tempToLabel = "href"; } else { Component = LinkComponent; } } else { extraProps = { role: "button" }; } const [hoverd, setHoverd] = useState2(false); return /* @__PURE__ */ jsxs3( "div", { onMouseEnter: () => { setHoverd(true); }, onMouseLeave: () => { setHoverd(false); }, className: cn( "kl-outline-none kl-flex kl-flex-col kl-relative kl-group kl-bodyMd-medium kl-transition-all kl-cursor-pointer hover:kl-text-text-default active:kl-text-text-default", { "kl-text-text-default": active, "kl-text-text-soft": !active, "kl-rounded-lg hover:kl-bg-surface-basic-hovered active:kl-bg-surface-basic-pressed": variant === "filled" // 'border border-transparent': variant === 'filled' && !active, } ), children: [ /* @__PURE__ */ jsx6( RovingFocusGroup.Item, { asChild: true, focusable: true, onKeyDown: (e) => { if (["Enter", " "].includes(e.key)) { onClick(e); } }, children: /* @__PURE__ */ jsxs3( Component, { ...{ [tempToLabel]: to }, ...extraProps, onClick, className: cn( "kl-relative kl-z-10 kl-tab-item kl-outline-none", "kl-ring-offset-0 focus-visible:kl-ring-border-focus focus-visible:kl-ring-2", // 'focus-visible:shadow-focus', { ...(!fitted || variant === "filled") && { "kl-px-2xl kl-py-lg": size === "md", "kl-px-lg kl-py-md": size === "sm", "kl-rounded-lg": true }, ...fitted && { "kl-py-md": variant !== "filled" } } ), children: [ variant === "plain" && /* @__PURE__ */ jsx6("div", { className: "kl-h-md kl-bg-none kl-w-full kl-z-0" }), /* @__PURE__ */ jsxs3("div", { className: "kl-flex kl-flex-row kl-items-center kl-gap-lg", children: [ !!prefix && React3.cloneElement(prefix, { size: 16, color: "currentColor" }), typeof label === "function" ? label(active) : label ] }), active && variant === "plain" && /* @__PURE__ */ jsx6( motion3.div, { layoutId: "underline", className: cn( "kl-h-md kl-z-10 kl-absolute kl-left-0 kl-bottom-0 kl-w-full kl-bg-border-primary" ) } ), variant === "plain" && hoverd && /* @__PURE__ */ jsx6( motion3.div, { layoutId: "hoverd-underline", className: "kl-h-md kl-bg-none kl-absolute kl-bottom-0 kl-w-full kl-z-0 kl-left-0 kl-bg-border-default group-active:kl-bg-border-tertiary" } ), variant === "plain" && /* @__PURE__ */ jsx6("div", { className: "kl-h-md kl-bg-none kl-w-full kl-z-0" }) ] } ) } ), /* @__PURE__ */ jsx6(AnimatePresence3, { children: variant === "filled" && active && /* @__PURE__ */ jsx6( motion3.div, { layoutId, className: "kl-absolute kl-inset-0 kl-rounded-lg kl-shadow-button kl-border kl-border-border-default kl-bg-surface-basic-default", transition: { type: "spring", bounce: 0.1, duration: 0.3 } } ) }) ] } ); }; var Tab = ({ to, label, prefix, value: _ }) => /* @__PURE__ */ jsx6(TabBase, { to, label, prefix, layoutId: "" }); var Root4 = forwardRef3( ({ variant = "plain", size = "md", fitted = false, onChange = () => { }, value, LinkComponent, className = "", basePath = "", children, toLabel }, ref) => { const id = useId3(); return /* @__PURE__ */ jsx6( RovingFocusGroup.Root, { orientation: "horizontal", loop: true, className: cn( "kl-flex kl-flex-row kl-items-center kl-transition-all", "kl-snap-x", { "md:kl-gap-4xl": size === "md" && variant !== "filled", "kl-gap-lg": size === "sm" || variant === "filled" }, className ), ref, asChild: true, children: /* @__PURE__ */ jsx6(motion3.div, { layout: true, layoutRoot: true, children: /* @__PURE__ */ jsx6(LayoutGroup, { id, children: React3.Children.map(children, (child) => { if (!child) { throw Error("Tab child is required"); } const tabChild = child; const tabChildProps = tabChild.props; return /* @__PURE__ */ jsx6( "div", { className: cn("kl-snap-start", { "kl-px-xl md:kl-px-0": variant === "plain" }), children: /* @__PURE__ */ jsx6( TabBase, { ...tabChildProps, onClick: () => { onChange?.(tabChildProps.value); }, layoutId: id, fitted, to: basePath + (tabChildProps.to || ""), active: value === tabChildProps.value, LinkComponent, variant, size, toLabel } ) } ); }) }) }) } ); } ); var Tabs = { Tab, Root: Root4 }; var tabs_default = Tabs; // components/atoms/option-list.tsx import { jsx as jsx7, jsxs as jsxs4 } from "react/jsx-runtime"; var OptionMenu = Root2; var OptionMenuTriggerBase = Trigger; var OptionMenuRadioGroup = RadioGroup2; var blurElement = (e) => { e.preventDefault(); const element = e.target; element.blur(); }; var preventDefaultEvents = { onMouseMove: (e) => e.preventDefault(), onMouseEnter: (e) => e.preventDefault(), onMouseLeave: (e) => blurElement(e), onPointerLeave: (e) => e.preventDefault(), onPointerEnter: (e) => e.preventDefault(), onPointerMove: (e) => e.preventDefault() // onClick: (e: any) => e.preventDefault(), }; var OptionMenuTrigger = forwardRef4( ({ children, ...props }, ref) => { const { open } = props; return /* @__PURE__ */ jsx7(OptionMenuTriggerBase, { ref, ...props, asChild: true, "is-menu-button": "true", children: cloneElement2(children, { selected: open }) }); } ); OptionMenuTrigger.displayName = "OptionMenuTrigger"; var OptionMenuContent = forwardRef4( ({ className, sideOffset = 4, children, open, align = "end", alignOffset, side, ...props }, ref) => /* @__PURE__ */ jsx7(Portal2, { children: /* @__PURE__ */ jsx7( Content2, { ref, sideOffset, align, side, alignOffset, loop: true, asChild: true, ...props, onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ jsx7( "div", { className: cn( "kl-z-50 kl-border kl-border-border-default kl-shadow-popover kl-bg-surface-basic-default kl-rounded kl-min-w-[160px] kl-overflow-hidden kl-origin-top kl-py-lg kl-will-change-[opacity,transform] data-[side=bottom]:kl-animate-slideUpAndFade data-[side=left]:kl-animate-slideRightAndFade data-[side=right]:kl-animate-slideLeftAndFade data-[side=top]:kl-animate-slideDownAndFade", className ), children } ) } ) }) ); OptionMenuContent.displayName = Content2.displayName; var OptionItemRaw = forwardRef4( ({ children, active, className }, ref) => { return /* @__PURE__ */ jsx7( "div", { ref, className: cn( "kl-group kl-relative kl-flex kl-flex-row kl-gap-xl kl-items-center kl-bodyMd kl-gap kl-cursor-pointer kl-select-none kl-py-lg kl-px-xl kl-text-text-default kl-outline-none kl-transition-colors focus:kl-bg-surface-basic-hovered hover:kl-bg-surface-basic-hovered data-[disabled]:kl-pointer-events-none data-[disabled]:kl-text-text-disabled", { "kl-bg-surface-basic-active": !!active }, className ), children } ); } ); var OptionMenuItem = forwardRef4( ({ className, ...props }, ref) => { return /* @__PURE__ */ jsx7( Item2, { ref, ...preventDefaultEvents, onSelect: props.onClick, asChild: true, children: /* @__PURE__ */ jsx7( "div", { className: cn( "kl-group kl-relative kl-flex kl-flex-row kl-gap-xl kl-items-center kl-bodyMd kl-gap kl-cursor-pointer kl-select-none kl-py-lg kl-px-xl kl-text-text-default kl-outline-none kl-transition-colors focus:kl-bg-surface-basic-hovered hover:kl-bg-surface-basic-hovered data-[disabled]:kl-pointer-events-none data-[disabled]:kl-text-text-disabled", { "kl-bg-surface-basic-active": !!props.active }, className ), children: props.children } ) } ); } ); OptionMenuItem.displayName = Item2.displayName; var OptionMenuLink = forwardRef4( ({ className, LinkComponent = "a", to = "", toLabel = "to", target, rel, children }, ref) => { let tempToLabel = toLabel; let Component = LinkComponent; if (to) { if (LinkComponent === motion4.button) { Component = "a"; tempToLabel = "href"; } else { Component = LinkComponent; } } return /* @__PURE__ */ jsx7( Item2, { ref, className: cn( "kl-group kl-relative kl-flex kl-flex-row kl-gap-xl kl-items-center kl-bodyMd kl-gap kl-cursor-pointer kl-select-none kl-py-lg kl-px-xl kl-text-text-default kl-outline-none kl-transition-colors focus:kl-bg-surface-basic-hovered hover:kl-bg-surface-basic-hovered data-[disabled]:kl-pointer-events-none data-[disabled]:kl-text-text-disabled", className ), asChild: true, children: /* @__PURE__ */ jsx7(Component, { ...{ [tempToLabel]: to }, target, rel, children }) } ); } ); OptionMenuLink.displayName = "OptionMenuLink"; var OptionMenuTextInputItem = forwardRef4(({ onChange, compact = false, ...props }, ref) => { const searchRef = useRef3(null); const setSearchFocus = (e) => { e?.preventDefault(); searchRef.current?.focus(); }; useEffect(() => { if (searchRef.current) { searchRef.current.focus(); } }, []); return /* @__PURE__ */ jsx7( "div", { className: cn({ "kl-py-lg kl-px-xl": !compact }), children: /* @__PURE__ */ jsx7( Item2, { ref, onSelect: setSearchFocus, onClick: () => setSearchFocus(), onPointerUp: setSearchFocus, onPointerDown: () => setSearchFocus(), onMouseMove: (e) => e.preventDefault(), onMouseEnter: (e) => e.preventDefault(), onMouseLeave: (e) => e.preventDefault(), onPointerMove: (e) => e.preventDefault(), onPointerLeave: (e) => e.preventDefault(), onFocus: () => { searchRef.current?.focus(); }, asChild: true, children: /* @__PURE__ */ jsx7( TextInput, { ...props, ref: searchRef, autoComplete: "off", onChange, onFocus: (event) => { if (props.focusRing) { event.target?.parentElement?.classList?.add( "kl-ring-2", "kl-ring-border-focus" ); } }, onBlur: (e) => { e.target?.parentElement?.classList?.remove( "kl-ring-2", "kl-ring-border-focus" ); }, onKeyDown: (e) => { if (e.key !== "Escape") e.stopPropagation(); } } ) } ) } ); }); OptionMenuTextInputItem.displayName = Item2.displayName; var OptionMenuCheckboxItem = forwardRef4( ({ className, showIndicator = true, children, checked, onValueChange, ...props }, ref) => /* @__PURE__ */ jsxs4( CheckboxItem2, { ref, className: cn( "kl-group kl-relative kl-flex kl-flex-row kl-gap-xl kl-items-center kl-bodyMd kl-gap kl-cursor-pointer kl-select-none kl-py-lg kl-px-xl kl-text-text-default kl-outline-none kl-transition-colors focus:kl-bg-surface-basic-hovered hover:kl-bg-surface-basic-hovered data-[disabled]:kl-pointer-events-none data-[disabled]:kl-text-text-disabled", { "data-[state=checked]:kl-bg-surface-primary-subdued data-[state=checked]:kl-text-text-primary data-[state=checked]:kl-text-text-darktheme-primary": !showIndicator }, className ), checked, ...preventDefaultEvents, onCheckedChange: onValueChange, onSelect: props.onClick, children: [ showIndicator && /* @__PURE__ */ jsx7("span", { className: "kl-w-2xl kl-h-2xl kl-rounded kl-border kl-transition-all kl-flex kl-items-center kl-justify-center kl-border-border-default group-data-[state=checked]:kl-border-border-primary group-data-[state=checked]:kl-bg-surface-primary-default group-data-[disabled]:kl-border-border-disabled group-data-[disabled]:kl-bg-surface-basic-default", children: /* @__PURE__ */ jsx7(ItemIndicator2, { children: /* @__PURE__ */ jsx7( "svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ jsx7( "path", { d: "M12.25 3.50017L5.25 10.4999L1.75 7.00017", strokeLinecap: "round", strokeLinejoin: "round", className: cn( "kl-stroke-text-on-primary group-data-[disabled]:kl-stroke-text-disabled" ) } ) } ) }) }), children ] } ) ); OptionMenuCheckboxItem.displayName = CheckboxItem2.displayName; var OptionMenuRadioItem = forwardRef4( ({ className, showIndicator = true, children, value, ...props }, ref) => /* @__PURE__ */ jsxs4( RadioItem2, { ref, className: cn( "kl-group kl-relative kl-flex kl-flex-row kl-gap-xl kl-items-center kl-bodyMd kl-gap kl-cursor-pointer kl-select-none kl-py-lg kl-px-xl kl-text-text-default kl-outline-none kl-transition-colors focus:kl-bg-surface-basic-hovered hover:kl-bg-surface-basic-hovered data-[disabled]:kl-pointer-events-none data-[disabled]:kl-text-text-disabled", { "data-[state=checked]:kl-bg-surface-primary-subdued data-[state=checked]:kl-text-text-primary": !showIndicator }, className ), onSelect: props.onClick, value, ...preventDefaultEvents, children: [ showIndicator && /* @__PURE__ */ jsx7( "span", { className: cn( "kl-w-2xl kl-h-2xl kl-rounded-full kl-border kl-transition-all kl-flex kl-items-center kl-justify-center kl-border-border-default group-data-[state=checked]:kl-border-border-primary group-data-[disabled]:kl-border-border-disabled" ), children: /* @__PURE__ */ jsx7(ItemIndicator2, { children: /* @__PURE__ */ jsx7( "div", { className: cn( "kl-block kl-w-lg kl-h-lg kl-rounded-full kl-bg-surface-primary-default group-data-[disabled]:kl-bg-icon-disabled group-data-[disabled]:kl-bg-icon-darktheme-disabled" ) } ) }) } ), children ] } ) ); OptionMenuRadioItem.displayName = RadioItem2.displayName; var OptionMenuSeparator = forwardRef4( ({ className, ...props }, ref) => /* @__PURE__ */ jsx7( Separator2, { ref, className: cn("kl-h-xs kl-bg-border-disabled kl-my-md", className), ...props } ) ); OptionMenuS