@beyondcorp/beyond-ui 1.1.25 → 1.1.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/DashboardHeader/DashboardHeader.js +6 -1
- package/dist/components/DashboardHeader/DashboardHeader.js.map +1 -1
- package/dist/components/ProfileManagement/EditModal.d.ts +37 -0
- package/dist/components/ProfileManagement/EditModal.js +26 -2
- package/dist/components/ProfileManagement/EditModal.js.map +1 -1
- package/dist/components/Radio/Radio.d.ts +14 -0
- package/dist/components/Radio/Radio.js +21 -0
- package/dist/components/Radio/Radio.js.map +1 -0
- package/dist/components/Select/Select.d.ts +16 -0
- package/dist/components/Select/Select.js +28 -0
- package/dist/components/Select/Select.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +2 -0
- package/package.json +1 -1
|
@@ -42,7 +42,12 @@ const DashboardHeader = React.forwardRef(({ className, breadcrumbs = [{ label: "
|
|
|
42
42
|
? centerSlot.map((item, idx) => (jsx("span", { onClick: item.onClick, className: item.onClick ? "cursor-pointer" : undefined, children: item.element }, item.id || idx)))
|
|
43
43
|
: centerSlot })) : (isSectionVisible(showSearch, isMobile ? "mobile" : "desktop") && (jsx("div", { className: "flex-1 min-w-0 mx-2", children: jsxs("div", { className: "relative", children: [jsx(Search, { className: "absolute left-3 top-1/2 transform -translate-y-1/2 h-4 w-4 text-gray-400" }), jsx(Input, { type: "text", placeholder: searchPlaceholder, value: searchValue, onChange: handleSearchChange, className: "pl-10 bg-gray-50 border-gray-200 focus:bg-white w-full" })] }) }))), jsxs("div", { className: "flex items-center space-x-3 flex-shrink-0 flex-grow-0 min-w-0", children: [Array.isArray(rightSlot)
|
|
44
44
|
? rightSlot.map((item, idx) => (jsx("span", { onClick: item.onClick, className: item.onClick ? "cursor-pointer" : undefined, children: item.element }, item.id || idx)))
|
|
45
|
-
: rightSlot, isSectionVisible(showNotifications, isMobile ? "mobile" : "desktop") && (jsx("div", { className: "relative", children: jsxs(Button, { variant: "ghost", size: "sm", className: "relative", onClick: onNotificationClick, children: [jsx(Bell, { className: "h-5 w-5" }), jsx(Badge, { variant: "danger", className: "absolute -top-1 -right-1 h-5 w-5 text-xs p-0 flex items-center justify-center", children: "3" })] }) })), isSectionVisible(showSettings, isMobile ? "mobile" : "desktop") && (jsx(Button, { variant: "ghost", size: "sm", onClick: onSettingsClick, children: jsx(Settings, { className: "h-5 w-5" }) })), isSectionVisible(showProfile, isMobile ? "mobile" : "desktop") && (jsxs("div", { className: "flex items-center space-x-3 pl-3 border-l border-gray-200",
|
|
45
|
+
: rightSlot, isSectionVisible(showNotifications, isMobile ? "mobile" : "desktop") && (jsx("div", { className: "relative", children: jsxs(Button, { variant: "ghost", size: "sm", className: "relative", onClick: onNotificationClick, children: [jsx(Bell, { className: "h-5 w-5" }), jsx(Badge, { variant: "danger", className: "absolute -top-1 -right-1 h-5 w-5 text-xs p-0 flex items-center justify-center", children: "3" })] }) })), isSectionVisible(showSettings, isMobile ? "mobile" : "desktop") && (jsx(Button, { variant: "ghost", size: "sm", onClick: onSettingsClick, children: jsx(Settings, { className: "h-5 w-5" }) })), isSectionVisible(showProfile, isMobile ? "mobile" : "desktop") && (jsxs("div", { className: cn("flex items-center space-x-3 pl-3 border-l border-gray-200", onProfileClick ? "cursor-pointer hover:bg-gray-100 transition" : ""), onClick: onProfileClick, tabIndex: onProfileClick ? 0 : undefined, role: onProfileClick ? "button" : undefined, onKeyDown: onProfileClick ? (e) => {
|
|
46
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
47
|
+
e.preventDefault();
|
|
48
|
+
onProfileClick();
|
|
49
|
+
}
|
|
50
|
+
} : undefined, "aria-label": onProfileClick ? "Profile section" : undefined, children: [jsxs("div", { className: "hidden sm:block text-right", children: [jsx("p", { className: "text-sm font-medium text-gray-900", children: "John Doe" }), jsx("p", { className: "text-xs text-gray-500", children: "Administrator" })] }), jsxs(Avatar, { size: "sm", children: [jsx(AvatarImage, { src: "https://images.pexels.com/photos/774909/pexels-photo-774909.jpeg?auto=compress&cs=tinysrgb&w=64" }), jsx(AvatarFallback, { children: "JD" })] })] }))] })] }) }));
|
|
46
51
|
});
|
|
47
52
|
DashboardHeader.displayName = "DashboardHeader";
|
|
48
53
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DashboardHeader.js","sources":["../../../src/components/DashboardHeader/DashboardHeader.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { Search, Bell, Settings, Menu } from \"lucide-react\";\nimport { cn } from \"../../utils/cn\";\nimport { Input } from \"../Input\";\nimport { Button } from \"../Button\";\nimport { Avatar, AvatarImage, AvatarFallback } from \"../Avatar\";\nimport { Badge } from \"../Badge\";\n\ninterface BreadcrumbItem {\n label: string;\n href?: string;\n}\n\ntype ResponsiveShow = boolean | { mobile?: boolean; desktop?: boolean };\n\ntype DashboardHeaderSlotItem = {\n element: React.ReactNode;\n onClick?: () => void;\n id?: string;\n};\ntype DashboardHeaderSlot = React.ReactNode | DashboardHeaderSlotItem[];\n\ninterface DashboardHeaderProps {\n className?: string;\n breadcrumbs?: BreadcrumbItem[];\n onMenuToggle?: () => void;\n sidebarCollapsed?: boolean;\n showSearch?: ResponsiveShow;\n searchPlaceholder?: string;\n onSearchChange?: (value: string) => void;\n style?: React.CSSProperties;\n\n // New flexible API\n showBreadcrumbs?: ResponsiveShow; // default true\n showNotifications?: ResponsiveShow; // default true\n showSettings?: ResponsiveShow; // default true\n showProfile?: ResponsiveShow; // default true\n showMenuButton?: ResponsiveShow; // default true\n\n // OnClick handlers for standard components\n onMenuButtonClick?: () => void;\n onNotificationClick?: () => void;\n onSettingsClick?: () => void;\n onProfileClick?: () => void;\n onBreadcrumbClick?: (item: BreadcrumbItem, index: number) => void;\n\n // Custom slots\n leftSlot?: DashboardHeaderSlot;\n centerSlot?: DashboardHeaderSlot;\n rightSlot?: DashboardHeaderSlot;\n}\n\nimport { useBreakpoint } from \"../../hooks/useBreakpoint\";\n\nconst DashboardHeader = React.forwardRef<HTMLDivElement, DashboardHeaderProps>(\n ({\n className,\n breadcrumbs = [{ label: \"Dashboard\" }],\n onMenuToggle,\n sidebarCollapsed = false,\n showSearch = true,\n searchPlaceholder = \"Search...\",\n onSearchChange,\n showBreadcrumbs = true,\n showNotifications = true,\n showSettings = true,\n showProfile = true,\n showMenuButton = true,\n leftSlot,\n centerSlot,\n rightSlot,\n onMenuButtonClick,\n onNotificationClick,\n onSettingsClick,\n onProfileClick,\n onBreadcrumbClick,\n ...props\n }, ref) => {\n const [searchValue, setSearchValue] = React.useState(\"\");\n const { currentBreakpoint } = useBreakpoint();\n\n // Helper to resolve ResponsiveShow prop\n const isSectionVisible = (\n prop: ResponsiveShow | undefined,\n view: \"mobile\" | \"desktop\"\n ): boolean => {\n if (typeof prop === \"boolean\") return prop;\n if (!prop) return true;\n if (view === \"mobile\") return prop.mobile ?? false;\n if (view === \"desktop\") return prop.desktop ?? false;\n return true;\n };\n\n const isMobile = currentBreakpoint === \"sm\" || currentBreakpoint === \"md\";\n const isDesktop = currentBreakpoint === \"lg\" || currentBreakpoint === \"xl\" || currentBreakpoint === \"2xl\";\n\n const handleSearchChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value;\n setSearchValue(value);\n onSearchChange?.(value);\n };\n\n return (\n <header\n ref={ref}\n className={cn(\n \"z-30 bg-white border-b border-gray-200 transition-all duration-300\",\n className\n )}\n style={props.style}\n {...props}\n >\n <div className=\"flex w-full items-center justify-between px-6 py-4\">\n {/* Left Section */}\n <div className=\"flex items-center space-x-4 flex-shrink-0 flex-grow-0 min-w-0\">\n {/* Custom left slot */}\n {Array.isArray(leftSlot)\n ? leftSlot.map((item, idx) => (\n <span\n key={item.id || idx}\n onClick={item.onClick}\n className={item.onClick ? \"cursor-pointer\" : undefined}\n >\n {item.element}\n </span>\n ))\n : leftSlot}\n\n {/* Mobile Menu Button */}\n {(isSectionVisible(showMenuButton, isMobile ? \"mobile\" : \"desktop\")) && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={e => {\n onMenuButtonClick?.();\n onMenuToggle?.();\n }}\n className=\"md:hidden\"\n >\n <Menu className=\"h-5 w-5\" />\n </Button>\n )}\n\n {/* Breadcrumbs */}\n {isSectionVisible(showBreadcrumbs, isMobile ? \"mobile\" : \"desktop\") && (\n <nav\n className={cn(\n \"flex items-center space-x-2 text-sm\",\n isMobile ? \"w-full overflow-x-auto whitespace-nowrap py-1\" : \"\"\n )}\n >\n {breadcrumbs.map((item, index) => (\n <React.Fragment key={index}>\n {index > 0 && (\n <span className=\"text-gray-400\">/</span>\n )}\n {item.href ? (\n <a\n href={item.href}\n className=\"text-gray-600 hover:text-gray-900 transition-colors\"\n onClick={e => {\n onBreadcrumbClick?.(item, index);\n }}\n >\n {item.label}\n </a>\n ) : (\n <span\n className=\"text-gray-900 font-medium\"\n onClick={e => {\n onBreadcrumbClick?.(item, index);\n }}\n style={onBreadcrumbClick ? { cursor: \"pointer\" } : undefined}\n >\n {item.label}\n </span>\n )}\n </React.Fragment>\n ))}\n </nav>\n )}\n </div>\n\n {/* Center Section - Search or custom center slot */}\n {centerSlot ? (\n <div className=\"flex-1 min-w-0 flex justify-center\">\n {Array.isArray(centerSlot)\n ? centerSlot.map((item, idx) => (\n <span\n key={item.id || idx}\n onClick={item.onClick}\n className={item.onClick ? \"cursor-pointer\" : undefined}\n >\n {item.element}\n </span>\n ))\n : centerSlot}\n </div>\n ) : (\n isSectionVisible(showSearch, isMobile ? \"mobile\" : \"desktop\") && (\n <div className=\"flex-1 min-w-0 mx-2\">\n <div className=\"relative\">\n <Search className=\"absolute left-3 top-1/2 transform -translate-y-1/2 h-4 w-4 text-gray-400\" />\n <Input\n type=\"text\"\n placeholder={searchPlaceholder}\n value={searchValue}\n onChange={handleSearchChange}\n className=\"pl-10 bg-gray-50 border-gray-200 focus:bg-white w-full\"\n />\n </div>\n </div>\n )\n )}\n\n {/* Right Section */}\n <div className=\"flex items-center space-x-3 flex-shrink-0 flex-grow-0 min-w-0\">\n {/* Custom right slot */}\n {Array.isArray(rightSlot)\n ? rightSlot.map((item, idx) => (\n <span\n key={item.id || idx}\n onClick={item.onClick}\n className={item.onClick ? \"cursor-pointer\" : undefined}\n >\n {item.element}\n </span>\n ))\n : rightSlot}\n\n {/* Notifications */}\n {isSectionVisible(showNotifications, isMobile ? \"mobile\" : \"desktop\") && (\n <div className=\"relative\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"relative\"\n onClick={onNotificationClick}\n >\n <Bell className=\"h-5 w-5\" />\n <Badge\n variant=\"danger\"\n className=\"absolute -top-1 -right-1 h-5 w-5 text-xs p-0 flex items-center justify-center\"\n >\n 3\n </Badge>\n </Button>\n </div>\n )}\n\n {/* Settings */}\n {isSectionVisible(showSettings, isMobile ? \"mobile\" : \"desktop\") && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={onSettingsClick}\n >\n <Settings className=\"h-5 w-5\" />\n </Button>\n )}\n\n {/* User Profile */}\n {isSectionVisible(showProfile, isMobile ? \"mobile\" : \"desktop\") && (\n <div className=\"flex items-center space-x-3 pl-3 border-l border-gray-200\">\n <div\n className=\"hidden sm:block text-right\"\n onClick={onProfileClick}\n style={onProfileClick ? { cursor: \"pointer\" } : undefined}\n >\n <p className=\"text-sm font-medium text-gray-900\">John Doe</p>\n <p className=\"text-xs text-gray-500\">Administrator</p>\n </div>\n <Avatar size=\"sm\">\n <AvatarImage src=\"https://images.pexels.com/photos/774909/pexels-photo-774909.jpeg?auto=compress&cs=tinysrgb&w=64\" />\n <AvatarFallback>JD</AvatarFallback>\n </Avatar>\n </div>\n )}\n </div>\n </div>\n </header>\n );\n }\n);\n\nDashboardHeader.displayName = \"DashboardHeader\";\n\nexport { DashboardHeader, type BreadcrumbItem, type DashboardHeaderProps };"],"names":["_jsx","_jsxs"],"mappings":";;;;;;;;;;AAsDA,MAAM,eAAe,GAAG,KAAK,CAAC,UAAU,CACtC,CAAC,EACC,SAAS,EACT,WAAW,GAAG,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,EACtC,YAAY,EACZ,gBAAgB,GAAG,KAAK,EACxB,UAAU,GAAG,IAAI,EACjB,iBAAiB,GAAG,WAAW,EAC/B,cAAc,EACd,eAAe,GAAG,IAAI,EACtB,iBAAiB,GAAG,IAAI,EACxB,YAAY,GAAG,IAAI,EACnB,WAAW,GAAG,IAAI,EAClB,cAAc,GAAG,IAAI,EACrB,QAAQ,EACR,UAAU,EACV,SAAS,EACT,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,GAAG,KAAK,EACT,EAAE,GAAG,KAAI;AACR,IAAA,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;AACxD,IAAA,MAAM,EAAE,iBAAiB,EAAE,GAAG,aAAa,EAAE;;AAG7C,IAAA,MAAM,gBAAgB,GAAG,CACvB,IAAgC,EAChC,IAA0B,KACf;QACX,IAAI,OAAO,IAAI,KAAK,SAAS;AAAE,YAAA,OAAO,IAAI;AAC1C,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI;QACtB,IAAI,IAAI,KAAK,QAAQ;AAAE,YAAA,OAAO,IAAI,CAAC,MAAM,IAAI,KAAK;QAClD,IAAI,IAAI,KAAK,SAAS;AAAE,YAAA,OAAO,IAAI,CAAC,OAAO,IAAI,KAAK;AACpD,QAAA,OAAO,IAAI;AACb,IAAA,CAAC;IAED,MAAM,QAAQ,GAAG,iBAAiB,KAAK,IAAI,IAAI,iBAAiB,KAAK,IAAI;AAGzE,IAAA,MAAM,kBAAkB,GAAG,CAAC,CAAsC,KAAI;AACpE,QAAA,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK;QAC5B,cAAc,CAAC,KAAK,CAAC;AACrB,QAAA,cAAc,GAAG,KAAK,CAAC;AACzB,IAAA,CAAC;AAED,IAAA,QACEA,GAAA,CAAA,QAAA,EAAA,EACE,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CACX,oEAAoE,EACpE,SAAS,CACV,EACD,KAAK,EAAE,KAAK,CAAC,KAAK,EAAA,GACd,KAAK,EAAA,QAAA,EAETC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,oDAAoD,EAAA,QAAA,EAAA,CAEjEA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,+DAA+D,EAAA,QAAA,EAAA,CAE3E,KAAK,CAAC,OAAO,CAAC,QAAQ;8BACnB,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,MACrBD,cAEE,OAAO,EAAE,IAAI,CAAC,OAAO,EACrB,SAAS,EAAE,IAAI,CAAC,OAAO,GAAG,gBAAgB,GAAG,SAAS,EAAA,QAAA,EAErD,IAAI,CAAC,OAAO,IAJR,IAAI,CAAC,EAAE,IAAI,GAAG,CAKd,CACR;AACH,8BAAE,QAAQ,EAGX,CAAC,gBAAgB,CAAC,cAAc,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC,MACjEA,GAAA,CAAC,MAAM,EAAA,EACL,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,IAAI,EACT,OAAO,EAAE,CAAC,IAAG;gCACX,iBAAiB,IAAI;gCACrB,YAAY,IAAI;4BAClB,CAAC,EACD,SAAS,EAAC,WAAW,YAErBA,GAAA,CAAC,IAAI,EAAA,EAAC,SAAS,EAAC,SAAS,GAAG,EAAA,CACrB,CACV,EAGA,gBAAgB,CAAC,eAAe,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC,KACjEA,GAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,EAAE,CACX,qCAAqC,EACrC,QAAQ,GAAG,+CAA+C,GAAG,EAAE,CAChE,EAAA,QAAA,EAEA,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,MAC3BC,IAAA,CAAC,KAAK,CAAC,QAAQ,EAAA,EAAA,QAAA,EAAA,CACZ,KAAK,GAAG,CAAC,KACRD,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,eAAe,EAAA,QAAA,EAAA,GAAA,EAAA,CAAS,CACzC,EACA,IAAI,CAAC,IAAI,IACRA,GAAA,CAAA,GAAA,EAAA,EACE,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,SAAS,EAAC,qDAAqD,EAC/D,OAAO,EAAE,CAAC,IAAG;AACX,4CAAA,iBAAiB,GAAG,IAAI,EAAE,KAAK,CAAC;AAClC,wCAAA,CAAC,YAEA,IAAI,CAAC,KAAK,EAAA,CACT,KAEJA,GAAA,CAAA,MAAA,EAAA,EACE,SAAS,EAAC,2BAA2B,EACrC,OAAO,EAAE,CAAC,IAAG;AACX,4CAAA,iBAAiB,GAAG,IAAI,EAAE,KAAK,CAAC;wCAClC,CAAC,EACD,KAAK,EAAE,iBAAiB,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,SAAS,YAE3D,IAAI,CAAC,KAAK,EAAA,CACN,CACR,CAAA,EAAA,EAxBkB,KAAK,CAyBT,CAClB,CAAC,EAAA,CACE,CACP,IACG,EAGL,UAAU,IACTA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,oCAAoC,EAAA,QAAA,EAChD,KAAK,CAAC,OAAO,CAAC,UAAU;0BACrB,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,MACvBA,cAEE,OAAO,EAAE,IAAI,CAAC,OAAO,EACrB,SAAS,EAAE,IAAI,CAAC,OAAO,GAAG,gBAAgB,GAAG,SAAS,EAAA,QAAA,EAErD,IAAI,CAAC,OAAO,IAJR,IAAI,CAAC,EAAE,IAAI,GAAG,CAKd,CACR;AACH,0BAAE,UAAU,EAAA,CACV,KAEN,gBAAgB,CAAC,UAAU,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC,KAC3DA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,qBAAqB,EAAA,QAAA,EAClCC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,UAAU,EAAA,QAAA,EAAA,CACvBD,IAAC,MAAM,EAAA,EAAC,SAAS,EAAC,0EAA0E,EAAA,CAAG,EAC/FA,IAAC,KAAK,EAAA,EACJ,IAAI,EAAC,MAAM,EACX,WAAW,EAAE,iBAAiB,EAC9B,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,kBAAkB,EAC5B,SAAS,EAAC,wDAAwD,EAAA,CAClE,CAAA,EAAA,CACE,EAAA,CACF,CACP,CACF,EAGDC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,+DAA+D,EAAA,QAAA,EAAA,CAE3E,KAAK,CAAC,OAAO,CAAC,SAAS;8BACpB,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,MACtBD,cAEE,OAAO,EAAE,IAAI,CAAC,OAAO,EACrB,SAAS,EAAE,IAAI,CAAC,OAAO,GAAG,gBAAgB,GAAG,SAAS,EAAA,QAAA,EAErD,IAAI,CAAC,OAAO,IAJR,IAAI,CAAC,EAAE,IAAI,GAAG,CAKd,CACR;8BACD,SAAS,EAGZ,gBAAgB,CAAC,iBAAiB,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC,KACnEA,aAAK,SAAS,EAAC,UAAU,EAAA,QAAA,EACvBC,IAAA,CAAC,MAAM,EAAA,EACL,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,IAAI,EACT,SAAS,EAAC,UAAU,EACpB,OAAO,EAAE,mBAAmB,EAAA,QAAA,EAAA,CAE5BD,IAAC,IAAI,EAAA,EAAC,SAAS,EAAC,SAAS,GAAG,EAC5BA,GAAA,CAAC,KAAK,EAAA,EACJ,OAAO,EAAC,QAAQ,EAChB,SAAS,EAAC,+EAA+E,kBAGnF,CAAA,EAAA,CACD,EAAA,CACL,CACP,EAGA,gBAAgB,CAAC,YAAY,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC,KAC9DA,IAAC,MAAM,EAAA,EACL,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,IAAI,EACT,OAAO,EAAE,eAAe,EAAA,QAAA,EAExBA,GAAA,CAAC,QAAQ,EAAA,EAAC,SAAS,EAAC,SAAS,EAAA,CAAG,GACzB,CACV,EAGA,gBAAgB,CAAC,WAAW,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC,KAC7DC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,2DAA2D,EAAA,QAAA,EAAA,CACxEA,cACE,SAAS,EAAC,4BAA4B,EACtC,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,cAAc,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,SAAS,EAAA,QAAA,EAAA,CAEzDD,WAAG,SAAS,EAAC,mCAAmC,EAAA,QAAA,EAAA,UAAA,EAAA,CAAa,EAC7DA,WAAG,SAAS,EAAC,uBAAuB,EAAA,QAAA,EAAA,eAAA,EAAA,CAAkB,CAAA,EAAA,CAClD,EACNC,IAAA,CAAC,MAAM,IAAC,IAAI,EAAC,IAAI,EAAA,QAAA,EAAA,CACfD,GAAA,CAAC,WAAW,EAAA,EAAC,GAAG,EAAC,iGAAiG,EAAA,CAAG,EACrHA,GAAA,CAAC,cAAc,qBAAoB,CAAA,EAAA,CAC5B,CAAA,EAAA,CACL,CACP,CAAA,EAAA,CACG,CAAA,EAAA,CACF,EAAA,CACC;AAEb,CAAC;AAGH,eAAe,CAAC,WAAW,GAAG,iBAAiB;;;;"}
|
|
1
|
+
{"version":3,"file":"DashboardHeader.js","sources":["../../../src/components/DashboardHeader/DashboardHeader.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { Search, Bell, Settings, Menu } from \"lucide-react\";\nimport { cn } from \"../../utils/cn\";\nimport { Input } from \"../Input\";\nimport { Button } from \"../Button\";\nimport { Avatar, AvatarImage, AvatarFallback } from \"../Avatar\";\nimport { Badge } from \"../Badge\";\n\ninterface BreadcrumbItem {\n label: string;\n href?: string;\n}\n\ntype ResponsiveShow = boolean | { mobile?: boolean; desktop?: boolean };\n\ntype DashboardHeaderSlotItem = {\n element: React.ReactNode;\n onClick?: () => void;\n id?: string;\n};\ntype DashboardHeaderSlot = React.ReactNode | DashboardHeaderSlotItem[];\n\ninterface DashboardHeaderProps {\n className?: string;\n breadcrumbs?: BreadcrumbItem[];\n onMenuToggle?: () => void;\n sidebarCollapsed?: boolean;\n showSearch?: ResponsiveShow;\n searchPlaceholder?: string;\n onSearchChange?: (value: string) => void;\n style?: React.CSSProperties;\n\n // New flexible API\n showBreadcrumbs?: ResponsiveShow; // default true\n showNotifications?: ResponsiveShow; // default true\n showSettings?: ResponsiveShow; // default true\n showProfile?: ResponsiveShow; // default true\n showMenuButton?: ResponsiveShow; // default true\n\n // OnClick handlers for standard components\n onMenuButtonClick?: () => void;\n onNotificationClick?: () => void;\n onSettingsClick?: () => void;\n onProfileClick?: () => void;\n onBreadcrumbClick?: (item: BreadcrumbItem, index: number) => void;\n\n // Custom slots\n leftSlot?: DashboardHeaderSlot;\n centerSlot?: DashboardHeaderSlot;\n rightSlot?: DashboardHeaderSlot;\n}\n\nimport { useBreakpoint } from \"../../hooks/useBreakpoint\";\n\nconst DashboardHeader = React.forwardRef<HTMLDivElement, DashboardHeaderProps>(\n ({\n className,\n breadcrumbs = [{ label: \"Dashboard\" }],\n onMenuToggle,\n sidebarCollapsed = false,\n showSearch = true,\n searchPlaceholder = \"Search...\",\n onSearchChange,\n showBreadcrumbs = true,\n showNotifications = true,\n showSettings = true,\n showProfile = true,\n showMenuButton = true,\n leftSlot,\n centerSlot,\n rightSlot,\n onMenuButtonClick,\n onNotificationClick,\n onSettingsClick,\n onProfileClick,\n onBreadcrumbClick,\n ...props\n }, ref) => {\n const [searchValue, setSearchValue] = React.useState(\"\");\n const { currentBreakpoint } = useBreakpoint();\n\n // Helper to resolve ResponsiveShow prop\n const isSectionVisible = (\n prop: ResponsiveShow | undefined,\n view: \"mobile\" | \"desktop\"\n ): boolean => {\n if (typeof prop === \"boolean\") return prop;\n if (!prop) return true;\n if (view === \"mobile\") return prop.mobile ?? false;\n if (view === \"desktop\") return prop.desktop ?? false;\n return true;\n };\n\n const isMobile = currentBreakpoint === \"sm\" || currentBreakpoint === \"md\";\n const isDesktop = currentBreakpoint === \"lg\" || currentBreakpoint === \"xl\" || currentBreakpoint === \"2xl\";\n\n const handleSearchChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value;\n setSearchValue(value);\n onSearchChange?.(value);\n };\n\n return (\n <header\n ref={ref}\n className={cn(\n \"z-30 bg-white border-b border-gray-200 transition-all duration-300\",\n className\n )}\n style={props.style}\n {...props}\n >\n <div className=\"flex w-full items-center justify-between px-6 py-4\">\n {/* Left Section */}\n <div className=\"flex items-center space-x-4 flex-shrink-0 flex-grow-0 min-w-0\">\n {/* Custom left slot */}\n {Array.isArray(leftSlot)\n ? leftSlot.map((item, idx) => (\n <span\n key={item.id || idx}\n onClick={item.onClick}\n className={item.onClick ? \"cursor-pointer\" : undefined}\n >\n {item.element}\n </span>\n ))\n : leftSlot}\n\n {/* Mobile Menu Button */}\n {(isSectionVisible(showMenuButton, isMobile ? \"mobile\" : \"desktop\")) && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={e => {\n onMenuButtonClick?.();\n onMenuToggle?.();\n }}\n className=\"md:hidden\"\n >\n <Menu className=\"h-5 w-5\" />\n </Button>\n )}\n\n {/* Breadcrumbs */}\n {isSectionVisible(showBreadcrumbs, isMobile ? \"mobile\" : \"desktop\") && (\n <nav\n className={cn(\n \"flex items-center space-x-2 text-sm\",\n isMobile ? \"w-full overflow-x-auto whitespace-nowrap py-1\" : \"\"\n )}\n >\n {breadcrumbs.map((item, index) => (\n <React.Fragment key={index}>\n {index > 0 && (\n <span className=\"text-gray-400\">/</span>\n )}\n {item.href ? (\n <a\n href={item.href}\n className=\"text-gray-600 hover:text-gray-900 transition-colors\"\n onClick={e => {\n onBreadcrumbClick?.(item, index);\n }}\n >\n {item.label}\n </a>\n ) : (\n <span\n className=\"text-gray-900 font-medium\"\n onClick={e => {\n onBreadcrumbClick?.(item, index);\n }}\n style={onBreadcrumbClick ? { cursor: \"pointer\" } : undefined}\n >\n {item.label}\n </span>\n )}\n </React.Fragment>\n ))}\n </nav>\n )}\n </div>\n\n {/* Center Section - Search or custom center slot */}\n {centerSlot ? (\n <div className=\"flex-1 min-w-0 flex justify-center\">\n {Array.isArray(centerSlot)\n ? centerSlot.map((item, idx) => (\n <span\n key={item.id || idx}\n onClick={item.onClick}\n className={item.onClick ? \"cursor-pointer\" : undefined}\n >\n {item.element}\n </span>\n ))\n : centerSlot}\n </div>\n ) : (\n isSectionVisible(showSearch, isMobile ? \"mobile\" : \"desktop\") && (\n <div className=\"flex-1 min-w-0 mx-2\">\n <div className=\"relative\">\n <Search className=\"absolute left-3 top-1/2 transform -translate-y-1/2 h-4 w-4 text-gray-400\" />\n <Input\n type=\"text\"\n placeholder={searchPlaceholder}\n value={searchValue}\n onChange={handleSearchChange}\n className=\"pl-10 bg-gray-50 border-gray-200 focus:bg-white w-full\"\n />\n </div>\n </div>\n )\n )}\n\n {/* Right Section */}\n <div className=\"flex items-center space-x-3 flex-shrink-0 flex-grow-0 min-w-0\">\n {/* Custom right slot */}\n {Array.isArray(rightSlot)\n ? rightSlot.map((item, idx) => (\n <span\n key={item.id || idx}\n onClick={item.onClick}\n className={item.onClick ? \"cursor-pointer\" : undefined}\n >\n {item.element}\n </span>\n ))\n : rightSlot}\n\n {/* Notifications */}\n {isSectionVisible(showNotifications, isMobile ? \"mobile\" : \"desktop\") && (\n <div className=\"relative\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"relative\"\n onClick={onNotificationClick}\n >\n <Bell className=\"h-5 w-5\" />\n <Badge\n variant=\"danger\"\n className=\"absolute -top-1 -right-1 h-5 w-5 text-xs p-0 flex items-center justify-center\"\n >\n 3\n </Badge>\n </Button>\n </div>\n )}\n\n {/* Settings */}\n {isSectionVisible(showSettings, isMobile ? \"mobile\" : \"desktop\") && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={onSettingsClick}\n >\n <Settings className=\"h-5 w-5\" />\n </Button>\n )}\n\n {/* User Profile */}\n {isSectionVisible(showProfile, isMobile ? \"mobile\" : \"desktop\") && (\n <div\n className={cn(\n \"flex items-center space-x-3 pl-3 border-l border-gray-200\",\n onProfileClick ? \"cursor-pointer hover:bg-gray-100 transition\" : \"\"\n )}\n onClick={onProfileClick}\n tabIndex={onProfileClick ? 0 : undefined}\n role={onProfileClick ? \"button\" : undefined}\n onKeyDown={onProfileClick ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onProfileClick();\n }\n } : undefined}\n aria-label={onProfileClick ? \"Profile section\" : undefined}\n >\n <div className=\"hidden sm:block text-right\">\n <p className=\"text-sm font-medium text-gray-900\">John Doe</p>\n <p className=\"text-xs text-gray-500\">Administrator</p>\n </div>\n <Avatar size=\"sm\">\n <AvatarImage src=\"https://images.pexels.com/photos/774909/pexels-photo-774909.jpeg?auto=compress&cs=tinysrgb&w=64\" />\n <AvatarFallback>JD</AvatarFallback>\n </Avatar>\n </div>\n )}\n </div>\n </div>\n </header>\n );\n }\n);\n\nDashboardHeader.displayName = \"DashboardHeader\";\n\nexport { DashboardHeader, type BreadcrumbItem, type DashboardHeaderProps };"],"names":["_jsx","_jsxs"],"mappings":"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"}
|
|
@@ -17,6 +17,43 @@ export type EditModalField = {
|
|
|
17
17
|
required?: boolean;
|
|
18
18
|
rows?: number;
|
|
19
19
|
onChange?: (e: React.ChangeEvent<HTMLTextAreaElement>) => void;
|
|
20
|
+
} | {
|
|
21
|
+
type: "select";
|
|
22
|
+
label: string;
|
|
23
|
+
name: string;
|
|
24
|
+
value?: string;
|
|
25
|
+
options: {
|
|
26
|
+
label: string;
|
|
27
|
+
value: string;
|
|
28
|
+
}[];
|
|
29
|
+
placeholder?: string;
|
|
30
|
+
required?: boolean;
|
|
31
|
+
onChange?: (e: React.ChangeEvent<HTMLSelectElement>) => void;
|
|
32
|
+
} | {
|
|
33
|
+
type: "checkbox";
|
|
34
|
+
label: string;
|
|
35
|
+
name: string;
|
|
36
|
+
checked?: boolean;
|
|
37
|
+
required?: boolean;
|
|
38
|
+
onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;
|
|
39
|
+
} | {
|
|
40
|
+
type: "radio";
|
|
41
|
+
label: string;
|
|
42
|
+
name: string;
|
|
43
|
+
value?: string;
|
|
44
|
+
options: {
|
|
45
|
+
label: string;
|
|
46
|
+
value: string;
|
|
47
|
+
}[];
|
|
48
|
+
required?: boolean;
|
|
49
|
+
onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;
|
|
50
|
+
} | {
|
|
51
|
+
type: "switch";
|
|
52
|
+
label: string;
|
|
53
|
+
name: string;
|
|
54
|
+
checked?: boolean;
|
|
55
|
+
required?: boolean;
|
|
56
|
+
onChange?: (checked: boolean) => void;
|
|
20
57
|
} | {
|
|
21
58
|
type: "custom";
|
|
22
59
|
name: string;
|
|
@@ -13,13 +13,37 @@ const EditModal = ({ open, title, description, fields, onChange, onSave, onClose
|
|
|
13
13
|
if (field.type === "custom") {
|
|
14
14
|
return jsx("div", { children: field.render() }, field.name);
|
|
15
15
|
}
|
|
16
|
-
// Title above every input/textarea
|
|
16
|
+
// Title above every input/textarea/select/etc.
|
|
17
17
|
const title = (jsx("div", { className: "mb-1 font-medium text-gray-700", children: field.label }, field.name + "-title"));
|
|
18
18
|
if (field.type === "textarea") {
|
|
19
19
|
return (jsxs(React.Fragment, { children: [title, jsx(Textarea, { name: field.name, value: field.value, placeholder: field.placeholder, rows: field.rows || 3, required: field.required, onChange: e => field.onChange ? field.onChange(e) : onChange(field.name, e.target.value), className: "w-full" })] }, field.name));
|
|
20
20
|
}
|
|
21
|
+
if (field.type === "select") {
|
|
22
|
+
// Lazy import to avoid breaking if not present
|
|
23
|
+
const { Select } = require("../Select/Select");
|
|
24
|
+
return (jsxs(React.Fragment, { children: [title, jsx(Select, { name: field.name, value: field.value, options: field.options, placeholder: field.placeholder, required: field.required, onChange: (e) => field.onChange ? field.onChange(e) : onChange(field.name, e.target.value), className: "w-full" })] }, field.name));
|
|
25
|
+
}
|
|
26
|
+
if (field.type === "checkbox") {
|
|
27
|
+
const { Checkbox } = require("../Checkbox/Checkbox");
|
|
28
|
+
return (jsxs(React.Fragment, { children: [title, jsx(Checkbox, { name: field.name, checked: field.checked, required: field.required, onChange: (e) => field.onChange ? field.onChange(e) : onChange(field.name, e.target.checked ? "true" : "false"), className: "w-5 h-5" })] }, field.name));
|
|
29
|
+
}
|
|
30
|
+
if (field.type === "radio") {
|
|
31
|
+
const { RadioGroup } = require("../Radio/Radio");
|
|
32
|
+
return (jsxs(React.Fragment, { children: [title, jsx(RadioGroup, { name: field.name, value: field.value, options: field.options, onChange: (e) => field.onChange ? field.onChange(e) : onChange(field.name, e.target.value) })] }, field.name));
|
|
33
|
+
}
|
|
34
|
+
if (field.type === "switch") {
|
|
35
|
+
const { Switch } = require("../Switch/Switch");
|
|
36
|
+
return (jsxs(React.Fragment, { children: [title, jsx(Switch, { name: field.name, checked: field.checked, onCheckedChange: (checked) => field.onChange ? field.onChange(checked) : onChange(field.name, checked ? "true" : "false") })] }, field.name));
|
|
37
|
+
}
|
|
21
38
|
// Default: Input
|
|
22
|
-
|
|
39
|
+
if (field.type === "text" ||
|
|
40
|
+
field.type === "email" ||
|
|
41
|
+
field.type === "tel" ||
|
|
42
|
+
field.type === "url" ||
|
|
43
|
+
field.type === "password") {
|
|
44
|
+
return (jsxs(React.Fragment, { children: [title, jsx(Input, { type: field.type, name: field.name, value: field.value, placeholder: field.placeholder, required: field.required, autoFocus: field.autoFocus, onChange: e => field.onChange ? field.onChange(e) : onChange(field.name, e.target.value), className: "w-full" })] }, field.name));
|
|
45
|
+
}
|
|
46
|
+
return null;
|
|
23
47
|
}) }), jsxs("div", { className: "flex justify-end space-x-2 mt-8", children: [jsx(Button, { type: "button", variant: "secondary", onClick: onClose, children: closeLabel }), jsx(Button, { type: "submit", variant: "primary", disabled: saving, children: saveLabel })] })] })] }) }));
|
|
24
48
|
EditModal.displayName = "EditModal";
|
|
25
49
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditModal.js","sources":["../../../src/components/ProfileManagement/EditModal.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport { Modal } from \"../Modal/Modal\";\r\nimport { Button } from \"../Button\";\r\nimport { Input } from \"../Input\";\r\nimport { Textarea } from \"../Textarea\";\r\nimport { cn } from \"../../utils/cn\";\r\n\r\nexport type EditModalField =\r\n | {\r\n type: \"text\" | \"email\" | \"tel\" | \"url\" | \"password\";\r\n label: string;\r\n name: string;\r\n value?: string;\r\n placeholder?: string;\r\n required?: boolean;\r\n autoFocus?: boolean;\r\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\r\n }\r\n | {\r\n type: \"textarea\";\r\n label: string;\r\n name: string;\r\n value?: string;\r\n placeholder?: string;\r\n required?: boolean;\r\n rows?: number;\r\n onChange?: (e: React.ChangeEvent<HTMLTextAreaElement>) => void;\r\n }\r\n | {\r\n type: \"custom\";\r\n name: string;\r\n render: () => React.ReactNode;\r\n };\r\n\r\nexport interface EditModalProps {\r\n open: boolean;\r\n title?: string;\r\n description?: string;\r\n fields: EditModalField[];\r\n onChange: (name: string, value: string) => void;\r\n onSave: () => void;\r\n onClose: () => void;\r\n saving?: boolean;\r\n saveLabel?: string;\r\n closeLabel?: string;\r\n className?: string;\r\n}\r\n\r\nexport const EditModal: React.FC<EditModalProps> = ({\r\n open,\r\n title,\r\n description,\r\n fields,\r\n onChange,\r\n onSave,\r\n onClose,\r\n saving,\r\n saveLabel = \"Save Changes\",\r\n closeLabel = \"Close\",\r\n className,\r\n}) => (\r\n <Modal open={open} onOpenChange={() => onClose()}>\r\n <div className={cn(\"max-w-2xl rounded-2xl p-0 p-8 mx-auto bg-white\", className)}>\r\n {title && <h2 className=\"text-2xl font-bold mb-1 text-gray-900\">{title}</h2>}\r\n {description && <p className=\"text-gray-500 mb-6\">{description}</p>}\r\n <form\r\n className=\"space-y-6\"\r\n onSubmit={e => {\r\n e.preventDefault();\r\n onSave();\r\n }}\r\n >\r\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\r\n {fields.map((field, idx) => {\r\n if (field.type === \"custom\") {\r\n return <div key={field.name}>{field.render()}</div>;\r\n }\r\n // Title above every input/textarea\r\n const title = (\r\n <div key={field.name + \"-title\"} className=\"mb-1 font-medium text-gray-700\">\r\n {field.label}\r\n </div>\r\n );\r\n if (field.type === \"textarea\") {\r\n return (\r\n <React.Fragment key={field.name}>\r\n {title}\r\n <Textarea\r\n name={field.name}\r\n value={field.value}\r\n placeholder={field.placeholder}\r\n rows={field.rows || 3}\r\n required={field.required}\r\n onChange={e => field.onChange ? field.onChange(e) : onChange(field.name, e.target.value)}\r\n className=\"w-full\"\r\n />\r\n </React.Fragment>\r\n );\r\n }\r\n // Default: Input\r\n return (\r\n <React.Fragment key={field.name}>\r\n {title}\r\n <Input\r\n type={field.type}\r\n name={field.name}\r\n value={field.value}\r\n placeholder={field.placeholder}\r\n required={field.required}\r\n autoFocus={field.autoFocus}\r\n onChange={e => field.onChange ? field.onChange(e) : onChange(field.name, e.target.value)}\r\n className=\"w-full\"\r\n />\r\n </React.Fragment>\r\n );\r\n })}\r\n </div>\r\n <div className=\"flex justify-end space-x-2 mt-8\">\r\n <Button type=\"button\" variant=\"secondary\" onClick={onClose}>\r\n {closeLabel}\r\n </Button>\r\n <Button type=\"submit\" variant=\"primary\" disabled={saving}>\r\n {saveLabel}\r\n </Button>\r\n </div>\r\n </form>\r\n </div>\r\n </Modal>\r\n);\r\n\r\nEditModal.displayName = \"EditModal\";"],"names":["_jsx","_jsxs"],"mappings":";;;;;;;;AAgDO,MAAM,SAAS,GAA6B,CAAC,EAClD,IAAI,EACJ,KAAK,EACL,WAAW,EACX,MAAM,EACN,QAAQ,EACR,MAAM,EACN,OAAO,EACP,MAAM,EACN,SAAS,GAAG,cAAc,EAC1B,UAAU,GAAG,OAAO,EACpB,SAAS,GACV,MACCA,IAAC,KAAK,EAAA,EAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,OAAO,EAAE,YAC9CC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,EAAE,CAAC,gDAAgD,EAAE,SAAS,CAAC,EAAA,QAAA,EAAA,CAC5E,KAAK,IAAID,GAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,uCAAuC,EAAA,QAAA,EAAE,KAAK,EAAA,CAAM,EAC3E,WAAW,IAAIA,GAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,oBAAoB,YAAE,WAAW,EAAA,CAAK,EACnEC,IAAA,CAAA,MAAA,EAAA,EACE,SAAS,EAAC,WAAW,EACrB,QAAQ,EAAE,CAAC,IAAG;oBACZ,CAAC,CAAC,cAAc,EAAE;AAClB,oBAAA,MAAM,EAAE;AACV,gBAAA,CAAC,EAAA,QAAA,EAAA,CAEDD,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,uCAAuC,EAAA,QAAA,EACnD,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,KAAI;AACzB,4BAAA,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;gCAC3B,OAAOA,GAAA,CAAA,KAAA,EAAA,EAAA,QAAA,EAAuB,KAAK,CAAC,MAAM,EAAE,IAA3B,KAAK,CAAC,IAAI,CAAwB;4BACrD;;AAEA,4BAAA,MAAM,KAAK,IACTA,aAAiC,SAAS,EAAC,gCAAgC,EAAA,QAAA,EACxE,KAAK,CAAC,KAAK,EAAA,EADJ,KAAK,CAAC,IAAI,GAAG,QAAQ,CAEzB,CACP;AACD,4BAAA,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE;AAC7B,gCAAA,QACEC,IAAA,CAAC,KAAK,CAAC,QAAQ,EAAA,EAAA,QAAA,EAAA,CACZ,KAAK,EACND,GAAA,CAAC,QAAQ,EAAA,EACP,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,WAAW,EAAE,KAAK,CAAC,WAAW,EAC9B,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,EACrB,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,QAAQ,EAAE,CAAC,IAAI,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EACxF,SAAS,EAAC,QAAQ,GAClB,CAAA,EAAA,EAViB,KAAK,CAAC,IAAI,CAWd;4BAErB;;AAEA,4BAAA,QACEC,IAAA,CAAC,KAAK,CAAC,QAAQ,EAAA,EAAA,QAAA,EAAA,CACZ,KAAK,EACND,GAAA,CAAC,KAAK,EAAA,EACJ,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,WAAW,EAAE,KAAK,CAAC,WAAW,EAC9B,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,SAAS,EAAE,KAAK,CAAC,SAAS,EAC1B,QAAQ,EAAE,CAAC,IAAI,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EACxF,SAAS,EAAC,QAAQ,GAClB,CAAA,EAAA,EAXiB,KAAK,CAAC,IAAI,CAYd;wBAErB,CAAC,CAAC,GACE,EACNC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,iCAAiC,EAAA,QAAA,EAAA,CAC9CD,GAAA,CAAC,MAAM,EAAA,EAAC,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAC,WAAW,EAAC,OAAO,EAAE,OAAO,EAAA,QAAA,EACvD,UAAU,GACJ,EACTA,GAAA,CAAC,MAAM,EAAA,EAAC,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAC,SAAS,EAAC,QAAQ,EAAE,MAAM,YACrD,SAAS,EAAA,CACH,IACL,CAAA,EAAA,CACD,CAAA,EAAA,CACH,EAAA,CACA;AAGV,SAAS,CAAC,WAAW,GAAG,WAAW;;;;"}
|
|
1
|
+
{"version":3,"file":"EditModal.js","sources":["../../../src/components/ProfileManagement/EditModal.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport { Modal } from \"../Modal/Modal\";\r\nimport { Button } from \"../Button\";\r\nimport { Input } from \"../Input\";\r\nimport { Textarea } from \"../Textarea\";\r\nimport { cn } from \"../../utils/cn\";\r\n\r\nexport type EditModalField =\r\n | {\r\n type: \"text\" | \"email\" | \"tel\" | \"url\" | \"password\";\r\n label: string;\r\n name: string;\r\n value?: string;\r\n placeholder?: string;\r\n required?: boolean;\r\n autoFocus?: boolean;\r\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\r\n }\r\n | {\r\n type: \"textarea\";\r\n label: string;\r\n name: string;\r\n value?: string;\r\n placeholder?: string;\r\n required?: boolean;\r\n rows?: number;\r\n onChange?: (e: React.ChangeEvent<HTMLTextAreaElement>) => void;\r\n }\r\n | {\r\n type: \"select\";\r\n label: string;\r\n name: string;\r\n value?: string;\r\n options: { label: string; value: string }[];\r\n placeholder?: string;\r\n required?: boolean;\r\n onChange?: (e: React.ChangeEvent<HTMLSelectElement>) => void;\r\n }\r\n | {\r\n type: \"checkbox\";\r\n label: string;\r\n name: string;\r\n checked?: boolean;\r\n required?: boolean;\r\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\r\n }\r\n | {\r\n type: \"radio\";\r\n label: string;\r\n name: string;\r\n value?: string;\r\n options: { label: string; value: string }[];\r\n required?: boolean;\r\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\r\n }\r\n | {\r\n type: \"switch\";\r\n label: string;\r\n name: string;\r\n checked?: boolean;\r\n required?: boolean;\r\n onChange?: (checked: boolean) => void;\r\n }\r\n | {\r\n type: \"custom\";\r\n name: string;\r\n render: () => React.ReactNode;\r\n };\r\n\r\nexport interface EditModalProps {\r\n open: boolean;\r\n title?: string;\r\n description?: string;\r\n fields: EditModalField[];\r\n onChange: (name: string, value: string) => void;\r\n onSave: () => void;\r\n onClose: () => void;\r\n saving?: boolean;\r\n saveLabel?: string;\r\n closeLabel?: string;\r\n className?: string;\r\n}\r\n\r\nexport const EditModal: React.FC<EditModalProps> = ({\r\n open,\r\n title,\r\n description,\r\n fields,\r\n onChange,\r\n onSave,\r\n onClose,\r\n saving,\r\n saveLabel = \"Save Changes\",\r\n closeLabel = \"Close\",\r\n className,\r\n}) => (\r\n <Modal open={open} onOpenChange={() => onClose()}>\r\n <div className={cn(\"max-w-2xl rounded-2xl p-0 p-8 mx-auto bg-white\", className)}>\r\n {title && <h2 className=\"text-2xl font-bold mb-1 text-gray-900\">{title}</h2>}\r\n {description && <p className=\"text-gray-500 mb-6\">{description}</p>}\r\n <form\r\n className=\"space-y-6\"\r\n onSubmit={e => {\r\n e.preventDefault();\r\n onSave();\r\n }}\r\n >\r\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\r\n {fields.map((field, idx) => {\r\n if (field.type === \"custom\") {\r\n return <div key={field.name}>{field.render()}</div>;\r\n }\r\n // Title above every input/textarea/select/etc.\r\n const title = (\r\n <div key={field.name + \"-title\"} className=\"mb-1 font-medium text-gray-700\">\r\n {field.label}\r\n </div>\r\n );\r\n if (field.type === \"textarea\") {\r\n return (\r\n <React.Fragment key={field.name}>\r\n {title}\r\n <Textarea\r\n name={field.name}\r\n value={field.value}\r\n placeholder={field.placeholder}\r\n rows={field.rows || 3}\r\n required={field.required}\r\n onChange={e => field.onChange ? field.onChange(e) : onChange(field.name, e.target.value)}\r\n className=\"w-full\"\r\n />\r\n </React.Fragment>\r\n );\r\n }\r\n if (field.type === \"select\") {\r\n // Lazy import to avoid breaking if not present\r\n const { Select } = require(\"../Select/Select\");\r\n return (\r\n <React.Fragment key={field.name}>\r\n {title}\r\n <Select\r\n name={field.name}\r\n value={field.value}\r\n options={field.options}\r\n placeholder={field.placeholder}\r\n required={field.required}\r\n onChange={(e: React.ChangeEvent<HTMLSelectElement>) => field.onChange ? field.onChange(e) : onChange(field.name, e.target.value)}\r\n className=\"w-full\"\r\n />\r\n </React.Fragment>\r\n );\r\n }\r\n if (field.type === \"checkbox\") {\r\n const { Checkbox } = require(\"../Checkbox/Checkbox\");\r\n return (\r\n <React.Fragment key={field.name}>\r\n {title}\r\n <Checkbox\r\n name={field.name}\r\n checked={field.checked}\r\n required={field.required}\r\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => field.onChange ? field.onChange(e) : onChange(field.name, e.target.checked ? \"true\" : \"false\")}\r\n className=\"w-5 h-5\"\r\n />\r\n </React.Fragment>\r\n );\r\n }\r\n if (field.type === \"radio\") {\r\n const { RadioGroup } = require(\"../Radio/Radio\");\r\n return (\r\n <React.Fragment key={field.name}>\r\n {title}\r\n <RadioGroup\r\n name={field.name}\r\n value={field.value}\r\n options={field.options}\r\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => field.onChange ? field.onChange(e) : onChange(field.name, e.target.value)}\r\n />\r\n </React.Fragment>\r\n );\r\n }\r\n if (field.type === \"switch\") {\r\n const { Switch } = require(\"../Switch/Switch\");\r\n return (\r\n <React.Fragment key={field.name}>\r\n {title}\r\n <Switch\r\n name={field.name}\r\n checked={field.checked}\r\n onCheckedChange={(checked: boolean) => field.onChange ? field.onChange(checked) : onChange(field.name, checked ? \"true\" : \"false\")}\r\n />\r\n </React.Fragment>\r\n );\r\n }\r\n // Default: Input\r\n if (\r\n field.type === \"text\" ||\r\n field.type === \"email\" ||\r\n field.type === \"tel\" ||\r\n field.type === \"url\" ||\r\n field.type === \"password\"\r\n ) {\r\n return (\r\n <React.Fragment key={field.name}>\r\n {title}\r\n <Input\r\n type={field.type}\r\n name={field.name}\r\n value={field.value}\r\n placeholder={field.placeholder}\r\n required={field.required}\r\n autoFocus={field.autoFocus}\r\n onChange={e => field.onChange ? field.onChange(e) : onChange(field.name, e.target.value)}\r\n className=\"w-full\"\r\n />\r\n </React.Fragment>\r\n );\r\n }\r\n return null;\r\n })}\r\n </div>\r\n <div className=\"flex justify-end space-x-2 mt-8\">\r\n <Button type=\"button\" variant=\"secondary\" onClick={onClose}>\r\n {closeLabel}\r\n </Button>\r\n <Button type=\"submit\" variant=\"primary\" disabled={saving}>\r\n {saveLabel}\r\n </Button>\r\n </div>\r\n </form>\r\n </div>\r\n </Modal>\r\n);\r\n\r\nEditModal.displayName = \"EditModal\";"],"names":["_jsx","_jsxs"],"mappings":";;;;;;;;AAmFO,MAAM,SAAS,GAA6B,CAAC,EAClD,IAAI,EACJ,KAAK,EACL,WAAW,EACX,MAAM,EACN,QAAQ,EACR,MAAM,EACN,OAAO,EACP,MAAM,EACN,SAAS,GAAG,cAAc,EAC1B,UAAU,GAAG,OAAO,EACpB,SAAS,GACV,MACCA,IAAC,KAAK,EAAA,EAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,OAAO,EAAE,YAC9CC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,EAAE,CAAC,gDAAgD,EAAE,SAAS,CAAC,EAAA,QAAA,EAAA,CAC5E,KAAK,IAAID,GAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,uCAAuC,EAAA,QAAA,EAAE,KAAK,EAAA,CAAM,EAC3E,WAAW,IAAIA,GAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,oBAAoB,YAAE,WAAW,EAAA,CAAK,EACnEC,IAAA,CAAA,MAAA,EAAA,EACE,SAAS,EAAC,WAAW,EACrB,QAAQ,EAAE,CAAC,IAAG;oBACZ,CAAC,CAAC,cAAc,EAAE;AAClB,oBAAA,MAAM,EAAE;AACV,gBAAA,CAAC,EAAA,QAAA,EAAA,CAEDD,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,uCAAuC,EAAA,QAAA,EACnD,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,KAAI;AACzB,4BAAA,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;gCAC3B,OAAOA,GAAA,CAAA,KAAA,EAAA,EAAA,QAAA,EAAuB,KAAK,CAAC,MAAM,EAAE,IAA3B,KAAK,CAAC,IAAI,CAAwB;4BACrD;;AAEA,4BAAA,MAAM,KAAK,IACTA,aAAiC,SAAS,EAAC,gCAAgC,EAAA,QAAA,EACxE,KAAK,CAAC,KAAK,EAAA,EADJ,KAAK,CAAC,IAAI,GAAG,QAAQ,CAEzB,CACP;AACD,4BAAA,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE;AAC7B,gCAAA,QACEC,IAAA,CAAC,KAAK,CAAC,QAAQ,EAAA,EAAA,QAAA,EAAA,CACZ,KAAK,EACND,GAAA,CAAC,QAAQ,EAAA,EACP,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,WAAW,EAAE,KAAK,CAAC,WAAW,EAC9B,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,EACrB,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,QAAQ,EAAE,CAAC,IAAI,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EACxF,SAAS,EAAC,QAAQ,GAClB,CAAA,EAAA,EAViB,KAAK,CAAC,IAAI,CAWd;4BAErB;AACA,4BAAA,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;;gCAE3B,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAC9C,gCAAA,QACEC,IAAA,CAAC,KAAK,CAAC,QAAQ,EAAA,EAAA,QAAA,EAAA,CACZ,KAAK,EACND,GAAA,CAAC,MAAM,EAAA,EACL,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,WAAW,EAAE,KAAK,CAAC,WAAW,EAC9B,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,QAAQ,EAAE,CAAC,CAAuC,KAAK,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAChI,SAAS,EAAC,QAAQ,GAClB,CAAA,EAAA,EAViB,KAAK,CAAC,IAAI,CAWd;4BAErB;AACA,4BAAA,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE;gCAC7B,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,sBAAsB,CAAC;AACpD,gCAAA,QACEC,IAAA,CAAC,KAAK,CAAC,QAAQ,eACZ,KAAK,EACND,GAAA,CAAC,QAAQ,IACP,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,QAAQ,EAAE,CAAC,CAAsC,KAAK,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC,EACpJ,SAAS,EAAC,SAAS,GACnB,CAAA,EAAA,EARiB,KAAK,CAAC,IAAI,CASd;4BAErB;AACA,4BAAA,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE;gCAC1B,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC;AAChD,gCAAA,QACEC,IAAA,CAAC,KAAK,CAAC,QAAQ,EAAA,EAAA,QAAA,EAAA,CACZ,KAAK,EACND,GAAA,CAAC,UAAU,EAAA,EACT,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,QAAQ,EAAE,CAAC,CAAsC,KAAK,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAA,CAC/H,KAPiB,KAAK,CAAC,IAAI,CAQd;4BAErB;AACA,4BAAA,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;gCAC3B,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC;AAC9C,gCAAA,QACEC,IAAA,CAAC,KAAK,CAAC,QAAQ,EAAA,EAAA,QAAA,EAAA,CACZ,KAAK,EACND,GAAA,CAAC,MAAM,EAAA,EACL,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,eAAe,EAAE,CAAC,OAAgB,KAAK,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC,EAAA,CAClI,CAAA,EAAA,EANiB,KAAK,CAAC,IAAI,CAOd;4BAErB;;AAEA,4BAAA,IACE,KAAK,CAAC,IAAI,KAAK,MAAM;gCACrB,KAAK,CAAC,IAAI,KAAK,OAAO;gCACtB,KAAK,CAAC,IAAI,KAAK,KAAK;gCACpB,KAAK,CAAC,IAAI,KAAK,KAAK;AACpB,gCAAA,KAAK,CAAC,IAAI,KAAK,UAAU,EACzB;AACA,gCAAA,QACEC,IAAA,CAAC,KAAK,CAAC,QAAQ,EAAA,EAAA,QAAA,EAAA,CACZ,KAAK,EACND,GAAA,CAAC,KAAK,EAAA,EACJ,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,WAAW,EAAE,KAAK,CAAC,WAAW,EAC9B,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,SAAS,EAAE,KAAK,CAAC,SAAS,EAC1B,QAAQ,EAAE,CAAC,IAAI,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EACxF,SAAS,EAAC,QAAQ,GAClB,CAAA,EAAA,EAXiB,KAAK,CAAC,IAAI,CAYd;4BAErB;AACA,4BAAA,OAAO,IAAI;wBACb,CAAC,CAAC,GACE,EACNC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,iCAAiC,EAAA,QAAA,EAAA,CAC9CD,GAAA,CAAC,MAAM,EAAA,EAAC,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAC,WAAW,EAAC,OAAO,EAAE,OAAO,EAAA,QAAA,EACvD,UAAU,GACJ,EACTA,GAAA,CAAC,MAAM,EAAA,EAAC,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAC,SAAS,EAAC,QAAQ,EAAE,MAAM,YACrD,SAAS,EAAA,CACH,IACL,CAAA,EAAA,CACD,CAAA,EAAA,CACH,EAAA,CACA;AAGV,SAAS,CAAC,WAAW,GAAG,WAAW;;;;"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export interface RadioOption {
|
|
3
|
+
label: string;
|
|
4
|
+
value: string;
|
|
5
|
+
}
|
|
6
|
+
export interface RadioGroupProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
7
|
+
name: string;
|
|
8
|
+
value?: string;
|
|
9
|
+
options: RadioOption[];
|
|
10
|
+
onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;
|
|
11
|
+
size?: "sm" | "md" | "lg";
|
|
12
|
+
disabled?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export declare const RadioGroup: React.FC<RadioGroupProps>;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import { cva } from 'class-variance-authority';
|
|
3
|
+
import { cn } from '../../utils/cn.js';
|
|
4
|
+
|
|
5
|
+
const radioVariants = cva("peer h-4 w-4 shrink-0 rounded-full border border-gray-300 ring-offset-white focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary-600 data-[state=checked]:border-primary-600", {
|
|
6
|
+
variants: {
|
|
7
|
+
size: {
|
|
8
|
+
sm: "h-3 w-3",
|
|
9
|
+
md: "h-4 w-4",
|
|
10
|
+
lg: "h-5 w-5",
|
|
11
|
+
},
|
|
12
|
+
},
|
|
13
|
+
defaultVariants: {
|
|
14
|
+
size: "md",
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
const RadioGroup = ({ name, value, options, onChange, size = "md", disabled, className, ...props }) => (jsx("div", { className: cn("flex flex-col gap-2", className), ...props, children: options.map(opt => (jsxs("label", { className: "inline-flex items-center gap-2 cursor-pointer", children: [jsx("input", { type: "radio", name: name, value: opt.value, checked: value === opt.value, onChange: onChange, disabled: disabled, className: cn(radioVariants({ size }), "appearance-none"), "data-state": value === opt.value ? "checked" : "unchecked" }), jsx("span", { className: "text-sm", children: opt.label })] }, opt.value))) }));
|
|
18
|
+
RadioGroup.displayName = "RadioGroup";
|
|
19
|
+
|
|
20
|
+
export { RadioGroup };
|
|
21
|
+
//# sourceMappingURL=Radio.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Radio.js","sources":["../../../src/components/Radio/Radio.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport { cva, type VariantProps } from \"class-variance-authority\";\r\nimport { cn } from \"../../utils/cn\";\r\n\r\nconst radioVariants = cva(\r\n \"peer h-4 w-4 shrink-0 rounded-full border border-gray-300 ring-offset-white focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary-600 data-[state=checked]:border-primary-600\",\r\n {\r\n variants: {\r\n size: {\r\n sm: \"h-3 w-3\",\r\n md: \"h-4 w-4\",\r\n lg: \"h-5 w-5\",\r\n },\r\n },\r\n defaultVariants: {\r\n size: \"md\",\r\n },\r\n }\r\n);\r\n\r\nexport interface RadioOption {\r\n label: string;\r\n value: string;\r\n}\r\n\r\nexport interface RadioGroupProps extends React.HTMLAttributes<HTMLDivElement> {\r\n name: string;\r\n value?: string;\r\n options: RadioOption[];\r\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n disabled?: boolean;\r\n}\r\n\r\nexport const RadioGroup: React.FC<RadioGroupProps> = ({\r\n name,\r\n value,\r\n options,\r\n onChange,\r\n size = \"md\",\r\n disabled,\r\n className,\r\n ...props\r\n}) => (\r\n <div className={cn(\"flex flex-col gap-2\", className)} {...props}>\r\n {options.map(opt => (\r\n <label key={opt.value} className=\"inline-flex items-center gap-2 cursor-pointer\">\r\n <input\r\n type=\"radio\"\r\n name={name}\r\n value={opt.value}\r\n checked={value === opt.value}\r\n onChange={onChange}\r\n disabled={disabled}\r\n className={cn(radioVariants({ size }), \"appearance-none\")}\r\n data-state={value === opt.value ? \"checked\" : \"unchecked\"}\r\n />\r\n <span className=\"text-sm\">{opt.label}</span>\r\n </label>\r\n ))}\r\n </div>\r\n);\r\n\r\nRadioGroup.displayName = \"RadioGroup\";"],"names":["_jsx","_jsxs"],"mappings":";;;;AAIA,MAAM,aAAa,GAAG,GAAG,CACvB,oTAAoT,EACpT;AACE,IAAA,QAAQ,EAAE;AACR,QAAA,IAAI,EAAE;AACJ,YAAA,EAAE,EAAE,SAAS;AACb,YAAA,EAAE,EAAE,SAAS;AACb,YAAA,EAAE,EAAE,SAAS;AACd,SAAA;AACF,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,IAAI,EAAE,IAAI;AACX,KAAA;AACF,CAAA,CACF;AAgBM,MAAM,UAAU,GAA8B,CAAC,EACpD,IAAI,EACJ,KAAK,EACL,OAAO,EACP,QAAQ,EACR,IAAI,GAAG,IAAI,EACX,QAAQ,EACR,SAAS,EACT,GAAG,KAAK,EACT,MACCA,aAAK,SAAS,EAAE,EAAE,CAAC,qBAAqB,EAAE,SAAS,CAAC,EAAA,GAAM,KAAK,EAAA,QAAA,EAC5D,OAAO,CAAC,GAAG,CAAC,GAAG,KACdC,IAAA,CAAA,OAAA,EAAA,EAAuB,SAAS,EAAC,+CAA+C,EAAA,QAAA,EAAA,CAC9ED,GAAA,CAAA,OAAA,EAAA,EACE,IAAI,EAAC,OAAO,EACZ,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,GAAG,CAAC,KAAK,EAChB,OAAO,EAAE,KAAK,KAAK,GAAG,CAAC,KAAK,EAC5B,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,iBAAiB,CAAC,EAAA,YAAA,EAC7C,KAAK,KAAK,GAAG,CAAC,KAAK,GAAG,SAAS,GAAG,WAAW,EAAA,CACzD,EACFA,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,SAAS,EAAA,QAAA,EAAE,GAAG,CAAC,KAAK,GAAQ,CAAA,EAAA,EAXlC,GAAG,CAAC,KAAK,CAYb,CACT,CAAC,EAAA,CACE;AAGR,UAAU,CAAC,WAAW,GAAG,YAAY;;;;"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { type VariantProps } from "class-variance-authority";
|
|
3
|
+
declare const selectVariants: (props?: ({
|
|
4
|
+
variant?: "default" | "success" | "error" | null | undefined;
|
|
5
|
+
selectSize?: "sm" | "md" | "lg" | null | undefined;
|
|
6
|
+
} & import("class-variance-authority/dist/types").ClassProp) | undefined) => string;
|
|
7
|
+
export interface SelectOption {
|
|
8
|
+
label: string;
|
|
9
|
+
value: string;
|
|
10
|
+
}
|
|
11
|
+
export interface SelectProps extends Omit<React.SelectHTMLAttributes<HTMLSelectElement>, "size">, VariantProps<typeof selectVariants> {
|
|
12
|
+
options: SelectOption[];
|
|
13
|
+
placeholder?: string;
|
|
14
|
+
}
|
|
15
|
+
export declare const Select: React.ForwardRefExoticComponent<SelectProps & React.RefAttributes<HTMLSelectElement>>;
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { cva } from 'class-variance-authority';
|
|
4
|
+
import { cn } from '../../utils/cn.js';
|
|
5
|
+
|
|
6
|
+
const selectVariants = cva("block w-full rounded-md border bg-white px-3 py-2 text-sm ring-offset-white focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50", {
|
|
7
|
+
variants: {
|
|
8
|
+
variant: {
|
|
9
|
+
default: "border-gray-300",
|
|
10
|
+
error: "border-danger-500 focus-visible:ring-danger-500",
|
|
11
|
+
success: "border-success-500 focus-visible:ring-success-500",
|
|
12
|
+
},
|
|
13
|
+
selectSize: {
|
|
14
|
+
sm: "h-8 px-2 text-xs",
|
|
15
|
+
md: "h-10 px-3",
|
|
16
|
+
lg: "h-12 px-4 text-base",
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
defaultVariants: {
|
|
20
|
+
variant: "default",
|
|
21
|
+
selectSize: "md",
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
const Select = React.forwardRef(({ className, variant, selectSize, options, placeholder, ...props }, ref) => (jsxs("select", { className: cn(selectVariants({ variant, selectSize, className })), ref: ref, ...props, children: [placeholder && (jsx("option", { value: "", disabled: true, hidden: true, children: placeholder })), options.map(opt => (jsx("option", { value: opt.value, children: opt.label }, opt.value)))] })));
|
|
25
|
+
Select.displayName = "Select";
|
|
26
|
+
|
|
27
|
+
export { Select };
|
|
28
|
+
//# sourceMappingURL=Select.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Select.js","sources":["../../../src/components/Select/Select.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport { cva, type VariantProps } from \"class-variance-authority\";\r\nimport { cn } from \"../../utils/cn\";\r\n\r\nconst selectVariants = cva(\r\n \"block w-full rounded-md border bg-white px-3 py-2 text-sm ring-offset-white focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-500 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\r\n {\r\n variants: {\r\n variant: {\r\n default: \"border-gray-300\",\r\n error: \"border-danger-500 focus-visible:ring-danger-500\",\r\n success: \"border-success-500 focus-visible:ring-success-500\",\r\n },\r\n selectSize: {\r\n sm: \"h-8 px-2 text-xs\",\r\n md: \"h-10 px-3\",\r\n lg: \"h-12 px-4 text-base\",\r\n },\r\n },\r\n defaultVariants: {\r\n variant: \"default\",\r\n selectSize: \"md\",\r\n },\r\n }\r\n);\r\n\r\nexport interface SelectOption {\r\n label: string;\r\n value: string;\r\n}\r\n\r\nexport interface SelectProps\r\n extends Omit<React.SelectHTMLAttributes<HTMLSelectElement>, \"size\">,\r\n VariantProps<typeof selectVariants> {\r\n options: SelectOption[];\r\n placeholder?: string;\r\n}\r\n\r\nexport const Select = React.forwardRef<HTMLSelectElement, SelectProps>(\r\n ({ className, variant, selectSize, options, placeholder, ...props }, ref) => (\r\n <select\r\n className={cn(selectVariants({ variant, selectSize, className }))}\r\n ref={ref}\r\n {...props}\r\n >\r\n {placeholder && (\r\n <option value=\"\" disabled hidden>\r\n {placeholder}\r\n </option>\r\n )}\r\n {options.map(opt => (\r\n <option key={opt.value} value={opt.value}>\r\n {opt.label}\r\n </option>\r\n ))}\r\n </select>\r\n )\r\n);\r\n\r\nSelect.displayName = \"Select\";"],"names":["_jsxs","_jsx"],"mappings":";;;;;AAIA,MAAM,cAAc,GAAG,GAAG,CACxB,wOAAwO,EACxO;AACE,IAAA,QAAQ,EAAE;AACR,QAAA,OAAO,EAAE;AACP,YAAA,OAAO,EAAE,iBAAiB;AAC1B,YAAA,KAAK,EAAE,iDAAiD;AACxD,YAAA,OAAO,EAAE,mDAAmD;AAC7D,SAAA;AACD,QAAA,UAAU,EAAE;AACV,YAAA,EAAE,EAAE,kBAAkB;AACtB,YAAA,EAAE,EAAE,WAAW;AACf,YAAA,EAAE,EAAE,qBAAqB;AAC1B,SAAA;AACF,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,UAAU,EAAE,IAAI;AACjB,KAAA;AACF,CAAA,CACF;MAcY,MAAM,GAAG,KAAK,CAAC,UAAU,CACpC,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,MACtEA,iBACE,SAAS,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,EACjE,GAAG,EAAE,GAAG,EAAA,GACJ,KAAK,aAER,WAAW,KACVC,GAAA,CAAA,QAAA,EAAA,EAAQ,KAAK,EAAC,EAAE,EAAC,QAAQ,EAAA,IAAA,EAAC,MAAM,kBAC7B,WAAW,EAAA,CACL,CACV,EACA,OAAO,CAAC,GAAG,CAAC,GAAG,KACdA,GAAA,CAAA,QAAA,EAAA,EAAwB,KAAK,EAAE,GAAG,CAAC,KAAK,EAAA,QAAA,EACrC,GAAG,CAAC,KAAK,EAAA,EADC,GAAG,CAAC,KAAK,CAEb,CACV,CAAC,CAAA,EAAA,CACK,CACV;AAGH,MAAM,CAAC,WAAW,GAAG,QAAQ;;;;"}
|
package/dist/index.d.ts
CHANGED
|
@@ -24,6 +24,9 @@ export * from './components/Auth';
|
|
|
24
24
|
export * from './components/PageLayout';
|
|
25
25
|
export * from './components/ProfileManagement/ProfileCard';
|
|
26
26
|
export * from './components/ProfileManagement/EditModal';
|
|
27
|
+
export * from './components/Checkbox/Checkbox';
|
|
28
|
+
export * from './components/Select/Select';
|
|
29
|
+
export * from './components/Radio/Radio';
|
|
27
30
|
export * from './hooks/useDarkMode';
|
|
28
31
|
export * from './hooks/useDebounce';
|
|
29
32
|
export * from './hooks/useLocalStorage';
|
package/dist/index.js
CHANGED
|
@@ -30,6 +30,8 @@ export { BlogPostExample, LandingPageExample, ProductPageExample } from './compo
|
|
|
30
30
|
export { PageLayoutShowcase } from './components/PageLayout/PageLayoutShowcase.js';
|
|
31
31
|
export { ProfileCard } from './components/ProfileManagement/ProfileCard.js';
|
|
32
32
|
export { EditModal } from './components/ProfileManagement/EditModal.js';
|
|
33
|
+
export { Select } from './components/Select/Select.js';
|
|
34
|
+
export { RadioGroup } from './components/Radio/Radio.js';
|
|
33
35
|
export { useDarkMode } from './hooks/useDarkMode.js';
|
|
34
36
|
export { useDebounce } from './hooks/useDebounce.js';
|
|
35
37
|
export { useLocalStorage } from './hooks/useLocalStorage.js';
|