@akshar-technosoft/ui 1.0.0 → 1.0.2
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/data/data-table/data-table-types.cjs.map +1 -1
- package/dist/components/data/data-table/data-table-types.d.cts +2 -0
- package/dist/components/data/data-table/data-table-types.d.ts +2 -0
- package/dist/components/data/data-table/data-table.cjs +1 -1
- package/dist/components/data/data-table/data-table.cjs.map +1 -1
- package/dist/components/data/data-table/data-table.d.cts +1 -1
- package/dist/components/data/data-table/data-table.d.ts +1 -1
- package/dist/components/data/data-table/data-table.js +1 -1
- package/dist/components/data/data-table/data-table.js.map +1 -1
- package/dist/components/data/data-table/index.cjs +1 -1
- package/dist/components/data/data-table/index.cjs.map +1 -1
- package/dist/components/data/data-table/index.js +1 -1
- package/dist/components/data/data-table/index.js.map +1 -1
- package/dist/components/layouts/app-content.cjs +1 -1
- package/dist/components/layouts/app-content.cjs.map +1 -1
- package/dist/components/layouts/app-content.d.cts +1 -2
- package/dist/components/layouts/app-content.d.ts +1 -2
- package/dist/components/layouts/app-content.js +1 -1
- package/dist/components/layouts/app-content.js.map +1 -1
- package/dist/components/layouts/factories.cjs +1 -1
- package/dist/components/layouts/factories.cjs.map +1 -1
- package/dist/components/layouts/factories.js +1 -1
- package/dist/components/layouts/factories.js.map +1 -1
- package/dist/components/layouts/index.cjs +1 -1
- package/dist/components/layouts/index.cjs.map +1 -1
- package/dist/components/layouts/index.js +1 -1
- package/dist/components/layouts/index.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/utils.ts","../../../src/components/layouts/app-container.tsx","../../../src/components/layouts/app-header.tsx","../../../src/components/ui/button.tsx","../../../src/components/layouts/app-content.tsx","../../../src/components/ui/sheet.tsx","../../../src/components/layouts/app-footer.tsx","../../../src/components/layouts/factories.tsx"],"sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}","import { cn } from '../../lib/utils.js';\r\nimport type { ReactNode } from 'react';\r\n\r\ntype SpacingSize = 'none' | 'tight' | 'default' | 'loose' | 'extra-loose';\r\n\r\nconst spacingClasses: Record<SpacingSize, string> = {\r\n 'none': 'gap-0',\r\n 'tight': 'gap-2',\r\n 'default': 'gap-4',\r\n 'loose': 'gap-6',\r\n 'extra-loose': 'gap-8'\r\n};\r\n\r\nexport type AppContainerProps = {\r\n children: ReactNode;\r\n className?: string;\r\n spacing?: SpacingSize;\r\n padding?: 'none' | 'tight' | 'default' | 'loose';\r\n};\r\n\r\nconst paddingClasses: Record<NonNullable<AppContainerProps['padding']>, string> = {\r\n 'none': 'p-0',\r\n 'tight': 'p-2',\r\n 'default': 'p-4',\r\n 'loose': 'p-6'\r\n};\r\n\r\nexport const AppContainer = ({\r\n children,\r\n className,\r\n spacing = 'tight',\r\n padding = 'none',\r\n}: AppContainerProps) => {\r\n return (\r\n <div className={cn(\r\n 'flex flex-col h-full',\r\n spacingClasses[spacing],\r\n paddingClasses[padding],\r\n className\r\n )}>\r\n {children}\r\n </div>\r\n );\r\n};","import { AppMeta, useAppMeta } from '../../context/index.js';\r\nimport { ArrowLeftIcon, ChevronRight } from 'lucide-react';\r\nimport { cn } from '../../lib/utils.js';\r\nimport { Button } from '../../components/ui/button.jsx';\r\nimport type { ReactNode } from 'react';\r\nimport { NavLink } from 'react-router';\r\n\r\ntype ColumnConfig = {\r\n content: ReactNode;\r\n align?: 'left' | 'center' | 'right';\r\n width?: 'auto' | 'fill';\r\n className?: string;\r\n};\r\n\r\nexport type AppHeaderProps = {\r\n className?: string;\r\n columns?: [ColumnConfig?, ColumnConfig?, ColumnConfig?];\r\n showBackButton?: boolean;\r\n meta?: AppMeta;\r\n};\r\n\r\nexport const AppHeader = ({\r\n className,\r\n columns = [],\r\n showBackButton = true,\r\n meta = { title: \"\" },\r\n}: AppHeaderProps) => {\r\n // const { meta } = useAppMeta();\r\n\r\n const renderBackAction = () => {\r\n if (!meta.backAction || !showBackButton) return null;\r\n\r\n const buttonProps = {\r\n variant: 'secondary',\r\n size: 'icon',\r\n className: 'hover:bg-primary/20 inline-flex',\r\n } as const;\r\n\r\n if (meta.backAction.href) {\r\n return (\r\n <NavLink to={meta.backAction.href}>\r\n <Button {...buttonProps}>\r\n <ArrowLeftIcon className=\"size-6\" />\r\n {meta.backAction.content}\r\n </Button>\r\n </NavLink>\r\n );\r\n }\r\n\r\n return (\r\n <Button {...buttonProps} onClick={meta.backAction.onClick}>\r\n <ArrowLeftIcon className=\"size-6\" />\r\n {meta.backAction.content}\r\n </Button>\r\n );\r\n };\r\n\r\n const renderMetadata = () => {\r\n if (!meta.metadata || meta.metadata.length === 0) return null;\r\n\r\n return (\r\n <div className=\"flex gap-4\">\r\n {meta.metadata.map((item, index) => (\r\n item.value && (\r\n <div key={index} className=\"text-sm\">\r\n <span className=\"text-muted-foreground\">{item.label} </span>\r\n <span>{item.value}</span>\r\n </div>\r\n )\r\n ))}\r\n </div>\r\n );\r\n };\r\n\r\n const renderStatus = () => {\r\n if (!meta.status) return null;\r\n\r\n const colorClasses = {\r\n success: 'bg-green-100 text-green-800',\r\n warning: 'bg-yellow-100 text-yellow-800',\r\n critical: 'bg-red-100 text-red-800',\r\n info: 'bg-blue-100 text-blue-800',\r\n default: 'bg-gray-100 text-gray-800',\r\n };\r\n\r\n return (\r\n <span className={cn(\r\n 'inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium',\r\n colorClasses[meta.status.color as keyof typeof colorClasses]\r\n )}>\r\n {meta.status.content}\r\n </span>\r\n );\r\n };\r\n\r\n const reservedColumn: ColumnConfig = {\r\n content: (\r\n <div className=\"flex gap-2 items-center\">\r\n {renderBackAction()}\r\n <div className=\"flex flex-col gap-2 w-max\">\r\n <h1 className=\"text-2xl font-bold tracking-tight\">{meta.title}</h1>\r\n {renderStatus()}\r\n {meta.description && (\r\n <p className=\"text-muted-foreground\">{meta.description}</p>\r\n )}\r\n {renderMetadata()}\r\n {meta.breadcrumbs && meta.breadcrumbs.length > 0 && (\r\n <div className=\"flex items-center text-sm text-muted-foreground\">\r\n {meta.breadcrumbs.map((crumb, index) => (\r\n <div key={index} className=\"flex items-center\">\r\n {crumb.href ? (\r\n <span className=\"hover:text-primary hover:underline\">\r\n {crumb.label}\r\n </span>\r\n ) : (\r\n <span>{crumb.label}</span>\r\n )}\r\n {index < meta.breadcrumbs!.length - 1 && (\r\n <ChevronRight className=\"mx-2 h-4 w-4\" />\r\n )}\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n ),\r\n align: 'left',\r\n width: 'fill',\r\n };\r\n\r\n const actionsColumn: ColumnConfig = {\r\n content: meta.primaryActions,\r\n align: 'right',\r\n width: 'auto',\r\n };\r\n\r\n const allColumns: ColumnConfig[] = [\r\n reservedColumn,\r\n ...columns.filter((col): col is ColumnConfig => col !== undefined),\r\n actionsColumn\r\n ];\r\n\r\n return (\r\n <div className={cn('flex items-center w-full gap-4 p-2', className)}>\r\n {allColumns.map((column, index) => (\r\n <div\r\n key={index}\r\n className={cn(\r\n 'flex items-center h-full',\r\n column.className,\r\n {\r\n 'justify-start': column.align === 'left',\r\n 'justify-center': column.align === 'center',\r\n 'justify-end': column.align === 'right',\r\n 'flex-1': column.width === 'fill',\r\n }\r\n )}\r\n >\r\n {column.content}\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n};","import * as React from \"react\"\nimport { Slot as SlotPrimitive } from \"radix-ui\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils.js\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n {\n variants: {\n variant: {\n default:\n \"bg-primary text-primary-foreground shadow-xs hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\n secondary:\n \"bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Button({\n className,\n variant,\n size,\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }) {\n const Comp = asChild ? SlotPrimitive.Slot : \"button\"\n\n return (\n <Comp\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, className }), \"transition-none\")}\n {...props}\n />\n )\n}\n\nexport { Button, buttonVariants }\n","import { cn } from \"../../lib/utils.js\"\r\nimport React, { useState, createContext, useContext } from \"react\"\r\nimport {\r\n Sheet,\r\n SheetTrigger,\r\n SheetContent,\r\n SheetPortal,\r\n SheetOverlay\r\n} from \"../../components/ui/sheet.jsx\"\r\n\r\nconst AppContentContext = createContext(false)\r\n\r\ntype SplitRatio = \"one-half\" | \"one-third\" | \"two-third\" | \"one-fourth\" | \"three-fourth\" | \"one-fifth\" | \"four-fifth\"\r\n\r\ntype SheetSide = \"right\" | \"bottom\" | \"left\" | \"top\"\r\ntype SheetMode = \"fullscreen\" | \"container\"\r\n\r\ntype BaseAppContentProps = {\r\n children: React.ReactNode\r\n className?: string\r\n variant?: \"default\" | \"card\" | \"border\" | \"transparent\"\r\n header?: React.ReactNode\r\n footer?: React.ReactNode\r\n headerClassName?: string\r\n footerClassName?: string\r\n parentContainer?: boolean\r\n padding?: \"none\" | \"tight\" | \"default\" | \"loose\"\r\n}\r\n\r\ntype FullLayoutProps = BaseAppContentProps & {\r\n layout?: \"full\"\r\n}\r\n\r\ntype SplitLayoutProps = BaseAppContentProps & {\r\n layout: \"split\"\r\n splitRatio?: SplitRatio\r\n reverse?: boolean\r\n}\r\n\r\ntype SheetOptions = {\r\n sheetContent: React.ReactNode\r\n sheetWidth?: SplitRatio\r\n sheetSide?: SheetSide\r\n sheetMode?: SheetMode\r\n onSheetClose?: () => void\r\n showSheetOverlay?: boolean\r\n sheetClassName?: string\r\n isSheetOpen?: boolean\r\n onSheetOpenChange?: (open: boolean) => void\r\n sheetTrigger?: React.ReactNode\r\n disableOverlay?: boolean\r\n}\r\n\r\ntype WithSheetLayoutProps = BaseAppContentProps & {\r\n layout: \"with-sheet\"\r\n} & SheetOptions\r\n\r\nexport type AppContentProps = FullLayoutProps | SplitLayoutProps | WithSheetLayoutProps\r\n\r\nconst splitRatioClasses: Record<SplitRatio, [string, string]> = {\r\n \"one-half\": [\"w-1/2\", \"w-1/2\"],\r\n \"one-third\": [\"w-1/3\", \"w-2/3\"],\r\n \"two-third\": [\"w-2/3\", \"w-1/3\"],\r\n \"one-fourth\": [\"w-1/4\", \"w-3/4\"],\r\n \"three-fourth\": [\"w-3/4\", \"w-1/4\"],\r\n \"one-fifth\": [\"w-1/5\", \"w-4/5\"],\r\n \"four-fifth\": [\"w-4/5\", \"w-1/5\"],\r\n}\r\n\r\nconst paddingClasses = {\r\n none: \"p-0\",\r\n tight: \"p-2\",\r\n default: \"p-4\",\r\n loose: \"p-6\",\r\n}\r\n\r\nconst getContainerSheetClasses = (side: SheetSide, width: SplitRatio) => {\r\n const [contentWidth, sheetWidth] = splitRatioClasses[width]\r\n\r\n return {\r\n container: \"inset-y-0 z-50 transition-all duration-500 ease-in-out\",\r\n content: cn(\r\n \"h-full bg-background transition-all duration-500 ease-in-out\",\r\n side === \"right\" ? \"border-l\" : \"border-r\"\r\n ),\r\n transform: side === \"right\" ? \"translate-x-full\" : \"-translate-x-full\",\r\n transformOpen: \"translate-x-0\",\r\n contentPushClass: side === \"right\" ? contentWidth : sheetWidth,\r\n sheetPushClass: side === \"right\" ? sheetWidth : contentWidth,\r\n }\r\n}\r\n\r\nconst baseClasses = \"flex flex-col overflow-hidden rounded-2xl relative\"\r\nconst variantClasses = {\r\n default: \"bg-background\",\r\n card: \"bg-background shadow-sm border\",\r\n border: \"bg-background border-2\",\r\n transparent: \"bg-transparent\",\r\n}\r\n\r\nexport const AppContent = (props: AppContentProps) => {\r\n const {\r\n children,\r\n className,\r\n variant = \"default\",\r\n layout = \"full\",\r\n header,\r\n footer,\r\n headerClassName,\r\n footerClassName,\r\n parentContainer = false,\r\n padding = parentContainer ? \"none\" : \"tight\",\r\n } = props\r\n\r\n const isNested = useContext(AppContentContext)\r\n const [internalSheetOpen, setInternalSheetOpen] = useState(false)\r\n\r\n const contentWrapper = React.useCallback(\r\n (content: React.ReactNode) => (\r\n <div className={cn(\r\n \"flex-1 overflow-auto h-full no-scrollbar\",\r\n parentContainer && \"flex\",\r\n !parentContainer && paddingClasses[padding]\r\n )}>\r\n {content}\r\n </div>\r\n ),\r\n [padding, parentContainer]\r\n )\r\n\r\n const renderContent = () => {\r\n switch (layout) {\r\n case \"split\": {\r\n const { splitRatio = \"three-fourth\", reverse = false } = props as SplitLayoutProps\r\n if (!Array.isArray(children) || children.length !== 2) {\r\n return (\r\n <div className=\"flex items-center justify-center h-full text-red-500\">\r\n Error: AppContent with layout=\"split\" requires exactly 2 children\r\n </div>\r\n )\r\n }\r\n\r\n const [leftClass, rightClass] = splitRatioClasses[splitRatio]\r\n const [firstChild, secondChild] = reverse ? [children[1], children[0]] : [children[0], children[1]]\r\n const [firstClass, secondClass] = reverse ? [rightClass, leftClass] : [leftClass, rightClass]\r\n\r\n return (\r\n <div className=\"flex h-full gap-2\">\r\n <div className={cn(firstClass, \"overflow-auto\")}>\r\n {contentWrapper(firstChild)}\r\n </div>\r\n <div className={cn(secondClass, \"overflow-auto\")}>\r\n {contentWrapper(secondChild)}\r\n </div>\r\n </div>\r\n )\r\n }\r\n\r\n case \"with-sheet\": {\r\n const {\r\n sheetContent,\r\n sheetWidth = \"four-fifth\",\r\n sheetSide = \"right\",\r\n sheetMode = \"container\",\r\n sheetTrigger,\r\n sheetClassName,\r\n isSheetOpen,\r\n onSheetOpenChange,\r\n showSheetOverlay = true,\r\n disableOverlay = true,\r\n } = props as WithSheetLayoutProps\r\n\r\n const isControlled = isSheetOpen !== undefined\r\n const sheetOpen = isControlled ? isSheetOpen : internalSheetOpen\r\n const setSheetOpen = isControlled ? onSheetOpenChange : setInternalSheetOpen\r\n\r\n if (sheetMode === \"container\") {\r\n const sheetClasses = getContainerSheetClasses(sheetSide, sheetWidth)\r\n\r\n return (\r\n <div className={cn(\r\n \"flex relative flex-1 overflow-hidden\",\r\n sheetOpen && disableOverlay && [\"left\", \"right\"].includes(sheetSide)\r\n )}>\r\n {/* Main content area */}\r\n <div className={cn(\r\n \"h-full overflow-auto transition-all duration-500\",\r\n sheetOpen && disableOverlay && [\"left\", \"right\"].includes(sheetSide)\r\n ? sheetClasses.contentPushClass\r\n : \"w-full\",\r\n sheetOpen && disableOverlay && \"overflow-y-auto overflow-x-hidden\"\r\n )}>\r\n {sheetTrigger && (\r\n <div onClick={() => setSheetOpen?.(!sheetOpen)}>\r\n {sheetTrigger}\r\n </div>\r\n )}\r\n <div className={cn(\"h-full\", !parentContainer && paddingClasses[padding])}>\r\n {children}\r\n </div>\r\n </div>\r\n\r\n {/* Container sheet */}\r\n <div\r\n className={cn(\r\n sheetClasses.container,\r\n \"transition-all duration-500 ease-in-out\",\r\n sheetOpen && disableOverlay && [\"left\", \"right\"].includes(sheetSide)\r\n ? cn(sheetClasses.sheetPushClass, \"overflow-y-auto\")\r\n : sheetOpen\r\n ? sheetClasses.transformOpen\r\n : cn(sheetClasses.transform, \"hidden\"),\r\n \"overflow-y-auto\"\r\n )}\r\n >\r\n <div className={cn(sheetClasses.content, sheetClassName, \"h-full\")}>\r\n {sheetContent}\r\n </div>\r\n </div>\r\n\r\n {/* Container overlay */}\r\n {sheetOpen && showSheetOverlay && !disableOverlay && (\r\n <div\r\n className={cn(\r\n \"absolute inset-0 bg-secondary/20 z-40\",\r\n \"transition-opacity duration-500 ease-in-out\",\r\n \"opacity-0\",\r\n sheetOpen ? \"opacity-100\" : \"opacity-0\"\r\n )}\r\n onClick={() => setSheetOpen?.(false)}\r\n />\r\n )}\r\n </div>\r\n )\r\n }\r\n\r\n return (\r\n <Sheet open={sheetOpen} onOpenChange={setSheetOpen}>\r\n {sheetTrigger && <SheetTrigger asChild>{sheetTrigger}</SheetTrigger>}\r\n <SheetPortal>\r\n {showSheetOverlay && <SheetOverlay className=\"fixed inset-0 bg-secondary/50 z-50\" />}\r\n <SheetContent\r\n side={sheetSide}\r\n className={cn(\r\n \"fixed bg-background border\",\r\n \"transition-all duration-500 ease-in-out\",\r\n splitRatioClasses[sheetWidth][1],\r\n sheetClassName\r\n )}\r\n >\r\n {sheetContent}\r\n </SheetContent>\r\n </SheetPortal>\r\n </Sheet>\r\n )\r\n }\r\n\r\n default:\r\n return contentWrapper(children)\r\n }\r\n }\r\n\r\n return (\r\n <AppContentContext.Provider value={true}>\r\n <div className={cn(\r\n baseClasses,\r\n variantClasses[variant],\r\n paddingClasses[padding],\r\n isNested && \"flex-1\",\r\n parentContainer && \"h-full\",\r\n !parentContainer && \"rounded-2xl\",\r\n className\r\n )}>\r\n {header && (\r\n <div\r\n className={cn(\r\n \"border-b\",\r\n headerClassName,\r\n variant === \"card\" && !parentContainer && \"rounded-t-2xl\",\r\n variant === \"border\" && \"border-b-2\",\r\n paddingClasses[padding]\r\n )}\r\n >\r\n {header}\r\n </div>\r\n )}\r\n {renderContent()}\r\n {footer && (\r\n <div\r\n className={cn(\r\n \"border-t\",\r\n footerClassName,\r\n variant === \"card\" && !parentContainer && \"rounded-b-2xl\",\r\n variant === \"border\" && \"border-t-2\",\r\n paddingClasses[padding]\r\n )}\r\n >\r\n {footer}\r\n </div>\r\n )}\r\n </div>\r\n </AppContentContext.Provider>\r\n )\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n// import { cn } from \"@/lib/utils\"\r\n// import React, { useState, createContext, useContext } from \"react\"\r\n// import {\r\n// Sheet,\r\n// SheetTrigger,\r\n// SheetContent,\r\n// SheetPortal,\r\n// SheetOverlay\r\n// } from \"@/components/ui/sheet\"\r\n\r\n// const AppContentContext = createContext(false)\r\n\r\n// type SplitRatio = \"one-half\" | \"one-third\" | \"two-third\" | \"one-fourth\" | \"three-fourth\" | \"one-fifth\" | \"four-fifth\"\r\n\r\n// type SheetSide = \"right\" | \"bottom\" | \"left\" | \"top\"\r\n// type SheetMode = \"fullscreen\" | \"container\"\r\n\r\n// type BaseAppContentProps = {\r\n// children: React.ReactNode\r\n// className?: string\r\n// variant?: \"default\" | \"card\" | \"border\" | \"transparent\"\r\n// header?: React.ReactNode\r\n// footer?: React.ReactNode\r\n// headerClassName?: string\r\n// footerClassName?: string\r\n// parentContainer?: boolean\r\n// padding?: \"none\" | \"tight\" | \"default\" | \"loose\"\r\n// }\r\n\r\n// type FullLayoutProps = BaseAppContentProps & {\r\n// layout?: \"full\"\r\n// }\r\n\r\n// type SplitLayoutProps = BaseAppContentProps & {\r\n// layout: \"split\"\r\n// splitRatio?: SplitRatio\r\n// reverse?: boolean\r\n// }\r\n\r\n// type SheetOptions = {\r\n// sheetContent: React.ReactNode\r\n// sheetWidth?: SplitRatio\r\n// sheetSide?: SheetSide\r\n// sheetMode?: SheetMode\r\n// onSheetClose?: () => void\r\n// showSheetOverlay?: boolean\r\n// sheetClassName?: string\r\n// isSheetOpen?: boolean\r\n// onSheetOpenChange?: (open: boolean) => void\r\n// sheetTrigger?: React.ReactNode\r\n// disableOverlay?: boolean\r\n// }\r\n\r\n// type WithSheetLayoutProps = BaseAppContentProps & {\r\n// layout: \"with-sheet\"\r\n// } & SheetOptions\r\n\r\n// type AppContentProps = FullLayoutProps | SplitLayoutProps | WithSheetLayoutProps\r\n\r\n// const splitRatioClasses: Record<SplitRatio, [string, string]> = {\r\n// \"one-half\": [\"w-1/2\", \"w-1/2\"],\r\n// \"one-third\": [\"w-1/3\", \"w-2/3\"],\r\n// \"two-third\": [\"w-2/3\", \"w-1/3\"],\r\n// \"one-fourth\": [\"w-1/4\", \"w-3/4\"],\r\n// \"three-fourth\": [\"w-3/4\", \"w-1/4\"],\r\n// \"one-fifth\": [\"w-1/5\", \"w-4/5\"],\r\n// \"four-fifth\": [\"w-4/5\", \"w-1/5\"],\r\n// }\r\n\r\n// const paddingClasses = {\r\n// none: \"p-0\",\r\n// tight: \"p-2\",\r\n// default: \"p-4\",\r\n// loose: \"p-6\",\r\n// }\r\n\r\n// const getContainerSheetClasses = (side: SheetSide, width: SplitRatio) => {\r\n// const [contentWidth, sheetWidth] = splitRatioClasses[width]\r\n\r\n// return {\r\n// container: \"inset-y-0 z-50\",\r\n// content: cn(\"h-full bg-background\", side === \"right\" ? \"border-l\" : \"border-r\"),\r\n// transform: side === \"right\" ? \"translate-x-full\" : \"-translate-x-full\",\r\n// transformOpen: \"translate-x-0\",\r\n// contentPushClass: side === \"right\" ? contentWidth : sheetWidth,\r\n// sheetPushClass: side === \"right\" ? sheetWidth : contentWidth,\r\n// }\r\n// }\r\n\r\n// const baseClasses = \"flex flex-col overflow-hidden rounded-2xl relative\"\r\n// const variantClasses = {\r\n// default: \"bg-background\",\r\n// card: \"bg-background shadow-sm border\",\r\n// border: \"bg-background border-2\",\r\n// transparent: \"bg-transparent\",\r\n// }\r\n\r\n// export const AppContent = (props: AppContentProps) => {\r\n// const {\r\n// children,\r\n// className,\r\n// variant = \"default\",\r\n// layout = \"full\",\r\n// header,\r\n// footer,\r\n// headerClassName,\r\n// footerClassName,\r\n// parentContainer = false,\r\n// padding = parentContainer ? \"none\" : \"tight\",\r\n// } = props\r\n\r\n// const isNested = useContext(AppContentContext)\r\n// const [internalSheetOpen, setInternalSheetOpen] = useState(false)\r\n\r\n// const contentWrapper = React.useCallback(\r\n// (content: React.ReactNode) => (\r\n// <div className={cn(\r\n// \"flex-1 overflow-auto h-full\",\r\n// !parentContainer && paddingClasses[padding]\r\n// )}>\r\n// {content}\r\n// </div>\r\n// ),\r\n// [padding, parentContainer]\r\n// )\r\n\r\n// const renderContent = () => {\r\n// switch (layout) {\r\n// case \"split\": {\r\n// const { splitRatio = \"three-fourth\", reverse = false } = props as SplitLayoutProps\r\n// if (!Array.isArray(children) || children.length !== 2) {\r\n// return (\r\n// <div className=\"flex items-center justify-center h-full text-red-500\">\r\n// Error: AppContent with layout=\"split\" requires exactly 2 children\r\n// </div>\r\n// )\r\n// }\r\n\r\n// const [leftClass, rightClass] = splitRatioClasses[splitRatio]\r\n// const [firstChild, secondChild] = reverse ? [children[1], children[0]] : [children[0], children[1]]\r\n// const [firstClass, secondClass] = reverse ? [rightClass, leftClass] : [leftClass, rightClass]\r\n\r\n// return (\r\n// <div className=\"flex h-full gap-4\">\r\n// <div className={cn(firstClass, \"overflow-auto\")}>\r\n// {contentWrapper(firstChild)}\r\n// </div>\r\n// <div className={cn(secondClass, \"overflow-auto\")}>\r\n// {contentWrapper(secondChild)}\r\n// </div>\r\n// </div>\r\n// )\r\n// }\r\n\r\n// case \"with-sheet\": {\r\n// const {\r\n// sheetContent,\r\n// sheetWidth = \"four-fifth\",\r\n// sheetSide = \"right\",\r\n// sheetMode = \"container\",\r\n// sheetTrigger,\r\n// sheetClassName,\r\n// isSheetOpen,\r\n// onSheetOpenChange,\r\n// showSheetOverlay = true,\r\n// disableOverlay = false,\r\n// } = props as WithSheetLayoutProps\r\n\r\n// const isControlled = isSheetOpen !== undefined\r\n// const sheetOpen = isControlled ? isSheetOpen : internalSheetOpen\r\n// const setSheetOpen = isControlled ? onSheetOpenChange : setInternalSheetOpen\r\n\r\n// if (sheetMode === \"container\") {\r\n// const sheetClasses = getContainerSheetClasses(sheetSide, sheetWidth)\r\n\r\n// return (\r\n// <div className={cn(\r\n// \"flex relative flex-1 overflow-hidden\",\r\n// sheetOpen && disableOverlay && [\"left\", \"right\"].includes(sheetSide)\r\n// )}>\r\n// {/* Main content area */}\r\n// <div className={cn(\r\n// \"h-full overflow-auto transition-all duration-500\",\r\n// sheetOpen && disableOverlay && [\"left\", \"right\"].includes(sheetSide)\r\n// ? sheetClasses.contentPushClass\r\n// : \"w-full\",\r\n// sheetOpen && disableOverlay && \"overflow-y-auto overflow-x-hidden\"\r\n// )}>\r\n// {sheetTrigger && (\r\n// <div onClick={() => setSheetOpen?.(!sheetOpen)}>\r\n// {sheetTrigger}\r\n// </div>\r\n// )}\r\n// <div className={cn(!parentContainer && paddingClasses[padding])}>\r\n// {children}\r\n// </div>\r\n// </div>\r\n\r\n// {/* Container sheet */}\r\n// <div\r\n// className={cn(\r\n// sheetClasses.container,\r\n// \"transition-all duration-500 ease-out\",\r\n// sheetOpen && disableOverlay && [\"left\", \"right\"].includes(sheetSide)\r\n// ? cn(sheetClasses.sheetPushClass, \"overflow-y-auto\")\r\n// : sheetOpen\r\n// ? sheetClasses.transformOpen\r\n// : cn(sheetClasses.transform, \"hidden\"),\r\n// \"overflow-y-auto\"\r\n// )}\r\n// >\r\n// <div className={cn(sheetClasses.content, sheetClassName, \"h-full\")}>\r\n// {sheetContent}\r\n// </div>\r\n// </div>\r\n\r\n// {/* Container overlay */}\r\n// {sheetOpen && showSheetOverlay && !disableOverlay && (\r\n// <div\r\n// className={cn(\"absolute inset-0 bg-secondary/20 z-40\")}\r\n// onClick={() => setSheetOpen?.(false)}\r\n// />\r\n// )}\r\n// </div>\r\n// )\r\n// }\r\n\r\n// return (\r\n// <Sheet open={sheetOpen} onOpenChange={setSheetOpen}>\r\n// {sheetTrigger && <SheetTrigger asChild>{sheetTrigger}</SheetTrigger>}\r\n// <SheetPortal>\r\n// {showSheetOverlay && <SheetOverlay className=\"fixed inset-0 bg-secondary/50 z-50\" />}\r\n// <SheetContent\r\n// side={sheetSide}\r\n// className={cn(\r\n// \"fixed bg-background border\",\r\n// splitRatioClasses[sheetWidth][1],\r\n// sheetClassName\r\n// )}\r\n// >\r\n// {sheetContent}\r\n// </SheetContent>\r\n// </SheetPortal>\r\n// </Sheet>\r\n// )\r\n// }\r\n\r\n// default:\r\n// return contentWrapper(children)\r\n// }\r\n// }\r\n\r\n// return (\r\n// <AppContentContext.Provider value={true}>\r\n// <div className={cn(\r\n// baseClasses,\r\n// variantClasses[variant],\r\n// paddingClasses[padding],\r\n// isNested && \"flex-1\",\r\n// parentContainer && \"h-full\",\r\n// !parentContainer && \"rounded-2xl\",\r\n// className\r\n// )}>\r\n// {header && (\r\n// <div\r\n// className={cn(\r\n// \"border-b\",\r\n// headerClassName,\r\n// variant === \"card\" && !parentContainer && \"rounded-t-2xl\",\r\n// variant === \"border\" && \"border-b-2\",\r\n// paddingClasses[padding]\r\n// )}\r\n// >\r\n// {header}\r\n// </div>\r\n// )}\r\n// {renderContent()}\r\n// {footer && (\r\n// <div\r\n// className={cn(\r\n// \"border-t\",\r\n// footerClassName,\r\n// variant === \"card\" && !parentContainer && \"rounded-b-2xl\",\r\n// variant === \"border\" && \"border-t-2\",\r\n// paddingClasses[padding]\r\n// )}\r\n// >\r\n// {footer}\r\n// </div>\r\n// )}\r\n// </div>\r\n// </AppContentContext.Provider>\r\n// )\r\n// }\r\n\r\n","import * as React from \"react\"\nimport { Dialog as SheetPrimitive } from \"radix-ui\"\nimport { XIcon } from \"lucide-react\"\nimport { cn } from \"../../lib/utils.js\"\n\nfunction Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />\n}\n\nfunction SheetTrigger({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Trigger>) {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />\n}\n\nfunction SheetClose({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Close>) {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />\n}\n\nfunction SheetPortal({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Portal>) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />\n}\n\nfunction SheetOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Overlay>) {\n return (\n <SheetPrimitive.Overlay\n data-slot=\"sheet-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SheetContent({\n className,\n children,\n side = \"right\",\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\"\n}) {\n return (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n data-slot=\"sheet-content\"\n className={cn(\n \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500\",\n side === \"right\" &&\n \"data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm\",\n side === \"left\" &&\n \"data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm\",\n side === \"top\" &&\n \"data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b\",\n side === \"bottom\" &&\n \"data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t\",\n className\n )}\n {...props}\n >\n {children}\n <SheetPrimitive.Close className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-secondary absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none\">\n <XIcon className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\n </SheetPrimitive.Content>\n </SheetPortal>\n )\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-header\"\n className={cn(\"flex flex-col gap-1.5 p-4\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetTitle({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Title>) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn(\"text-foreground font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetDescription({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Description>) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetOverlay,\n SheetPortal,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n}\n","import { AppMeta, useAppMeta } from '../../context/index.js';\r\nimport { cn } from '../../lib/utils.js';\r\n\r\ntype ColumnConfig = {\r\n content: React.ReactNode;\r\n align?: 'left' | 'center' | 'right';\r\n width?: 'auto' | 'fill';\r\n className?: string;\r\n};\r\n\r\nexport type AppFooterProps = {\r\n className?: string;\r\n columns?: [ColumnConfig?, ColumnConfig?, ColumnConfig?];\r\n meta?: AppMeta;\r\n};\r\n\r\nexport const AppFooter = ({\r\n className,\r\n columns = [],\r\n meta = { title: \"\" },\r\n}: AppFooterProps) => {\r\n // const { meta } = useAppMeta();\r\n\r\n // const renderPagination = () => {\r\n // if (!meta.pagination) return null;\r\n\r\n // return (\r\n // <div className=\"flex items-center gap-2\">\r\n // <Button\r\n // variant=\"outline\"\r\n // size=\"sm\"\r\n // disabled={!meta.pagination.hasPrevious}\r\n // onClick={meta.pagination.onPrevious}\r\n // >\r\n // <ChevronLeft className=\"h-4 w-4 mr-1\" />\r\n // {meta.pagination.previousLabel || 'Previous'}\r\n // </Button>\r\n // <Button\r\n // variant=\"outline\"\r\n // size=\"sm\"\r\n // disabled={!meta.pagination.hasNext}\r\n // onClick={meta.pagination.onNext}\r\n // >\r\n // {meta.pagination.nextLabel || 'Next'}\r\n // <ChevronRight className=\"h-4 w-4 ml-1\" />\r\n // </Button>\r\n // </div>\r\n // );\r\n // };\r\n\r\n const actionsColumn: ColumnConfig = {\r\n content: (\r\n <div className=\"flex items-center gap-4 p-2\">\r\n {/* {renderPagination()} */}\r\n {meta.secondaryActions}\r\n </div>\r\n ),\r\n align: 'right',\r\n width: 'fill',\r\n };\r\n\r\n const allColumns: ColumnConfig[] = [\r\n ...columns.filter((col): col is ColumnConfig => col !== undefined),\r\n actionsColumn\r\n ];\r\n\r\n return (\r\n <div className={cn('flex items-center w-full gap-4', className)}>\r\n {allColumns.map((column, index) => (\r\n <div\r\n key={index}\r\n className={cn(\r\n 'flex items-center h-full',\r\n column.className,\r\n {\r\n 'justify-start': column.align === 'left',\r\n 'justify-center': column.align === 'center',\r\n 'justify-end': column.align === 'right',\r\n 'flex-1': column.width === 'fill',\r\n }\r\n )}\r\n >\r\n {column.content}\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n};","import type { AppMetaContextType } from '../../context/app-meta/types.js';\r\nimport { AppHeaderProps, AppHeader as BaseAppHeader } from './app-header.jsx';\r\nimport { AppFooterProps, AppFooter as BaseAppFooter } from './app-footer.jsx';\r\nimport { AppContentProps, AppContent as BaseAppContent } from './app-content.jsx';\r\nimport { AppContainerProps, AppContainer as BaseAppContainer } from './app-container.jsx';\r\n\r\nexport function createLayoutComponents<TRoute extends string>({\r\n useTypedAppMeta,\r\n}: {\r\n useTypedAppMeta: () => AppMetaContextType<TRoute>;\r\n}) {\r\n const AppHeader = (props: Omit<AppHeaderProps, 'meta'>) => {\r\n const { meta } = useTypedAppMeta();\r\n return <BaseAppHeader {...props} meta={meta} />;\r\n };\r\n\r\n const AppFooter = (props: Omit<AppFooterProps, 'meta'>) => {\r\n const { meta } = useTypedAppMeta();\r\n return <BaseAppFooter {...props} meta={meta} />;\r\n };\r\n\r\n const AppContent = (props: AppContentProps) => (\r\n <BaseAppContent {...props} />\r\n );\r\n\r\n const AppContainer = (props: AppContainerProps) => (\r\n <BaseAppContainer {...props} />\r\n );\r\n\r\n return {\r\n AppHeader,\r\n AppFooter,\r\n AppContent,\r\n AppContainer,\r\n };\r\n}"],"mappings":"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","names":["clsx","twMerge","cn","inputs","jsx","spacingClasses","paddingClasses","AppContainer","children","className","spacing","padding","cn","ArrowLeftIcon","ChevronRight","SlotPrimitive","cva","jsx","buttonVariants","cva","Button","className","variant","size","asChild","props","Comp","SlotPrimitive","cn","NavLink","jsx","jsxs","AppHeader","className","columns","showBackButton","meta","renderBackAction","buttonProps","Button","ArrowLeftIcon","renderMetadata","item","index","renderStatus","cn","reservedColumn","crumb","ChevronRight","actionsColumn","allColumns","col","column","React","useState","createContext","useContext","SheetPrimitive","XIcon","jsx","jsxs","Sheet","props","SheetPrimitive","SheetTrigger","SheetPortal","props","jsx","SheetPrimitive","SheetOverlay","className","cn","SheetContent","children","side","jsxs","XIcon","jsx","jsxs","AppContentContext","createContext","splitRatioClasses","paddingClasses","getContainerSheetClasses","side","width","contentWidth","sheetWidth","cn","baseClasses","variantClasses","AppContent","props","children","className","variant","layout","header","footer","headerClassName","footerClassName","parentContainer","padding","isNested","useContext","internalSheetOpen","setInternalSheetOpen","useState","contentWrapper","React","content","renderContent","splitRatio","reverse","leftClass","rightClass","firstChild","secondChild","firstClass","secondClass","sheetContent","sheetSide","sheetMode","sheetTrigger","sheetClassName","isSheetOpen","onSheetOpenChange","showSheetOverlay","disableOverlay","isControlled","sheetOpen","setSheetOpen","sheetClasses","Sheet","SheetTrigger","SheetPortal","SheetOverlay","SheetContent","jsx","AppFooter","className","columns","meta","actionsColumn","allColumns","col","cn","column","index","jsx","createLayoutComponents","useTypedAppMeta","props","meta","AppHeader","AppFooter","AppContent","AppContainer"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/utils.ts","../../../src/components/layouts/app-container.tsx","../../../src/components/layouts/app-header.tsx","../../../src/components/ui/button.tsx","../../../src/components/layouts/app-content.tsx","../../../src/components/ui/sheet.tsx","../../../src/components/layouts/app-footer.tsx","../../../src/components/layouts/factories.tsx"],"sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}","import { cn } from '../../lib/utils.js';\r\nimport type { ReactNode } from 'react';\r\n\r\ntype SpacingSize = 'none' | 'tight' | 'default' | 'loose' | 'extra-loose';\r\n\r\nconst spacingClasses: Record<SpacingSize, string> = {\r\n 'none': 'gap-0',\r\n 'tight': 'gap-2',\r\n 'default': 'gap-4',\r\n 'loose': 'gap-6',\r\n 'extra-loose': 'gap-8'\r\n};\r\n\r\nexport type AppContainerProps = {\r\n children: ReactNode;\r\n className?: string;\r\n spacing?: SpacingSize;\r\n padding?: 'none' | 'tight' | 'default' | 'loose';\r\n};\r\n\r\nconst paddingClasses: Record<NonNullable<AppContainerProps['padding']>, string> = {\r\n 'none': 'p-0',\r\n 'tight': 'p-2',\r\n 'default': 'p-4',\r\n 'loose': 'p-6'\r\n};\r\n\r\nexport const AppContainer = ({\r\n children,\r\n className,\r\n spacing = 'tight',\r\n padding = 'none',\r\n}: AppContainerProps) => {\r\n return (\r\n <div className={cn(\r\n 'flex flex-col h-full',\r\n spacingClasses[spacing],\r\n paddingClasses[padding],\r\n className\r\n )}>\r\n {children}\r\n </div>\r\n );\r\n};","import { AppMeta, useAppMeta } from '../../context/index.js';\r\nimport { ArrowLeftIcon, ChevronRight } from 'lucide-react';\r\nimport { cn } from '../../lib/utils.js';\r\nimport { Button } from '../../components/ui/button.jsx';\r\nimport type { ReactNode } from 'react';\r\nimport { NavLink } from 'react-router';\r\n\r\ntype ColumnConfig = {\r\n content: ReactNode;\r\n align?: 'left' | 'center' | 'right';\r\n width?: 'auto' | 'fill';\r\n className?: string;\r\n};\r\n\r\nexport type AppHeaderProps = {\r\n className?: string;\r\n columns?: [ColumnConfig?, ColumnConfig?, ColumnConfig?];\r\n showBackButton?: boolean;\r\n meta?: AppMeta;\r\n};\r\n\r\nexport const AppHeader = ({\r\n className,\r\n columns = [],\r\n showBackButton = true,\r\n meta = { title: \"\" },\r\n}: AppHeaderProps) => {\r\n // const { meta } = useAppMeta();\r\n\r\n const renderBackAction = () => {\r\n if (!meta.backAction || !showBackButton) return null;\r\n\r\n const buttonProps = {\r\n variant: 'secondary',\r\n size: 'icon',\r\n className: 'hover:bg-primary/20 inline-flex',\r\n } as const;\r\n\r\n if (meta.backAction.href) {\r\n return (\r\n <NavLink to={meta.backAction.href}>\r\n <Button {...buttonProps}>\r\n <ArrowLeftIcon className=\"size-6\" />\r\n {meta.backAction.content}\r\n </Button>\r\n </NavLink>\r\n );\r\n }\r\n\r\n return (\r\n <Button {...buttonProps} onClick={meta.backAction.onClick}>\r\n <ArrowLeftIcon className=\"size-6\" />\r\n {meta.backAction.content}\r\n </Button>\r\n );\r\n };\r\n\r\n const renderMetadata = () => {\r\n if (!meta.metadata || meta.metadata.length === 0) return null;\r\n\r\n return (\r\n <div className=\"flex gap-4\">\r\n {meta.metadata.map((item, index) => (\r\n item.value && (\r\n <div key={index} className=\"text-sm\">\r\n <span className=\"text-muted-foreground\">{item.label} </span>\r\n <span>{item.value}</span>\r\n </div>\r\n )\r\n ))}\r\n </div>\r\n );\r\n };\r\n\r\n const renderStatus = () => {\r\n if (!meta.status) return null;\r\n\r\n const colorClasses = {\r\n success: 'bg-green-100 text-green-800',\r\n warning: 'bg-yellow-100 text-yellow-800',\r\n critical: 'bg-red-100 text-red-800',\r\n info: 'bg-blue-100 text-blue-800',\r\n default: 'bg-gray-100 text-gray-800',\r\n };\r\n\r\n return (\r\n <span className={cn(\r\n 'inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium',\r\n colorClasses[meta.status.color as keyof typeof colorClasses]\r\n )}>\r\n {meta.status.content}\r\n </span>\r\n );\r\n };\r\n\r\n const reservedColumn: ColumnConfig = {\r\n content: (\r\n <div className=\"flex gap-2 items-center\">\r\n {renderBackAction()}\r\n <div className=\"flex flex-col gap-2 w-max\">\r\n <h1 className=\"text-2xl font-bold tracking-tight\">{meta.title}</h1>\r\n {renderStatus()}\r\n {meta.description && (\r\n <p className=\"text-muted-foreground\">{meta.description}</p>\r\n )}\r\n {renderMetadata()}\r\n {meta.breadcrumbs && meta.breadcrumbs.length > 0 && (\r\n <div className=\"flex items-center text-sm text-muted-foreground\">\r\n {meta.breadcrumbs.map((crumb, index) => (\r\n <div key={index} className=\"flex items-center\">\r\n {crumb.href ? (\r\n <span className=\"hover:text-primary hover:underline\">\r\n {crumb.label}\r\n </span>\r\n ) : (\r\n <span>{crumb.label}</span>\r\n )}\r\n {index < meta.breadcrumbs!.length - 1 && (\r\n <ChevronRight className=\"mx-2 h-4 w-4\" />\r\n )}\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n ),\r\n align: 'left',\r\n width: 'fill',\r\n };\r\n\r\n const actionsColumn: ColumnConfig = {\r\n content: meta.primaryActions,\r\n align: 'right',\r\n width: 'auto',\r\n };\r\n\r\n const allColumns: ColumnConfig[] = [\r\n reservedColumn,\r\n ...columns.filter((col): col is ColumnConfig => col !== undefined),\r\n actionsColumn\r\n ];\r\n\r\n return (\r\n <div className={cn('flex items-center w-full gap-4 p-2', className)}>\r\n {allColumns.map((column, index) => (\r\n <div\r\n key={index}\r\n className={cn(\r\n 'flex items-center h-full',\r\n column.className,\r\n {\r\n 'justify-start': column.align === 'left',\r\n 'justify-center': column.align === 'center',\r\n 'justify-end': column.align === 'right',\r\n 'flex-1': column.width === 'fill',\r\n }\r\n )}\r\n >\r\n {column.content}\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n};","import * as React from \"react\"\nimport { Slot as SlotPrimitive } from \"radix-ui\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils.js\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n {\n variants: {\n variant: {\n default:\n \"bg-primary text-primary-foreground shadow-xs hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\n secondary:\n \"bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Button({\n className,\n variant,\n size,\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }) {\n const Comp = asChild ? SlotPrimitive.Slot : \"button\"\n\n return (\n <Comp\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, className }), \"transition-none\")}\n {...props}\n />\n )\n}\n\nexport { Button, buttonVariants }\n","import { cn } from \"../../lib/utils.js\"\r\nimport React, { useState, createContext, useContext } from \"react\"\r\nimport {\r\n Sheet,\r\n SheetTrigger,\r\n SheetContent,\r\n SheetPortal,\r\n SheetOverlay\r\n} from \"../../components/ui/sheet.jsx\"\r\n\r\nconst AppContentContext = createContext(false)\r\n\r\ntype SplitRatio = \"one-half\" | \"one-third\" | \"two-third\" | \"one-fourth\" | \"three-fourth\" | \"one-fifth\" | \"four-fifth\"\r\n\r\ntype SheetSide = \"right\" | \"bottom\" | \"left\" | \"top\"\r\ntype SheetMode = \"fullscreen\" | \"container\"\r\n\r\ntype BaseAppContentProps = {\r\n children: React.ReactNode\r\n className?: string\r\n variant?: \"default\" | \"card\" | \"border\" | \"transparent\"\r\n header?: React.ReactNode\r\n footer?: React.ReactNode\r\n headerClassName?: string\r\n footerClassName?: string\r\n parentContainer?: boolean\r\n padding?: \"none\" | \"tight\" | \"default\" | \"loose\"\r\n}\r\n\r\ntype FullLayoutProps = BaseAppContentProps & {\r\n layout?: \"full\"\r\n}\r\n\r\ntype SplitLayoutProps = BaseAppContentProps & {\r\n layout: \"split\"\r\n splitRatio?: SplitRatio\r\n reverse?: boolean\r\n}\r\n\r\ntype SheetOptions = {\r\n sheetContent: React.ReactNode\r\n sheetWidth?: SplitRatio\r\n sheetSide?: SheetSide\r\n sheetMode?: SheetMode\r\n onSheetClose?: () => void\r\n sheetClassName?: string\r\n isSheetOpen?: boolean\r\n onSheetOpenChange?: (open: boolean) => void\r\n // sheetTrigger?: React.ReactNode\r\n disableOverlay?: boolean\r\n showSheetOverlay?: boolean\r\n}\r\n\r\ntype WithSheetLayoutProps = BaseAppContentProps & {\r\n layout: \"with-sheet\"\r\n} & SheetOptions\r\n\r\nexport type AppContentProps = FullLayoutProps | SplitLayoutProps | WithSheetLayoutProps\r\n\r\nconst splitRatioClasses: Record<SplitRatio, [string, string]> = {\r\n \"one-half\": [\"w-1/2\", \"w-1/2\"],\r\n \"one-third\": [\"w-1/3\", \"w-2/3\"],\r\n \"two-third\": [\"w-2/3\", \"w-1/3\"],\r\n \"one-fourth\": [\"w-1/4\", \"w-3/4\"],\r\n \"three-fourth\": [\"w-3/4\", \"w-1/4\"],\r\n \"one-fifth\": [\"w-1/5\", \"w-4/5\"],\r\n \"four-fifth\": [\"w-4/5\", \"w-1/5\"],\r\n}\r\n\r\nconst paddingClasses = {\r\n none: \"p-0\",\r\n tight: \"p-2\",\r\n default: \"p-4\",\r\n loose: \"p-6\",\r\n}\r\n\r\nconst getContainerSheetClasses = (side: SheetSide, width: SplitRatio) => {\r\n const [contentWidth, sheetWidth] = splitRatioClasses[width]\r\n\r\n return {\r\n container: \"inset-y-0 z-50 transition-all duration-500 ease-in-out\",\r\n content: cn(\r\n \"h-full bg-background transition-all duration-500 ease-in-out\",\r\n side === \"right\" ? \"border-l\" : \"border-r\"\r\n ),\r\n transform: side === \"right\" ? \"translate-x-full\" : \"-translate-x-full\",\r\n transformOpen: \"translate-x-0\",\r\n contentPushClass: side === \"right\" ? sheetWidth : contentWidth,\r\n sheetPushClass: side === \"right\" ? contentWidth : sheetWidth,\r\n }\r\n}\r\n\r\nconst baseClasses = \"flex flex-col overflow-hidden rounded-2xl relative\"\r\nconst variantClasses = {\r\n default: \"bg-background\",\r\n card: \"bg-background shadow-sm border\",\r\n border: \"bg-background border-2\",\r\n transparent: \"bg-transparent\",\r\n}\r\n\r\nexport const AppContent = (props: AppContentProps) => {\r\n const {\r\n children,\r\n className,\r\n variant = \"default\",\r\n layout = \"full\",\r\n header,\r\n footer,\r\n headerClassName,\r\n footerClassName,\r\n parentContainer = false,\r\n padding = parentContainer ? \"none\" : \"tight\",\r\n } = props\r\n\r\n const isNested = useContext(AppContentContext)\r\n const [internalSheetOpen, setInternalSheetOpen] = useState(false)\r\n\r\n const contentWrapper = React.useCallback(\r\n (content: React.ReactNode) => (\r\n <div className={cn(\r\n \"flex-1 overflow-auto h-full no-scrollbar\",\r\n parentContainer && \"flex\",\r\n !parentContainer && paddingClasses[padding]\r\n )}>\r\n {content}\r\n </div>\r\n ),\r\n [padding, parentContainer]\r\n )\r\n\r\n const renderContent = () => {\r\n switch (layout) {\r\n case \"split\": {\r\n const { splitRatio = \"three-fourth\", reverse = false } = props as SplitLayoutProps\r\n if (!Array.isArray(children) || children.length !== 2) {\r\n return (\r\n <div className=\"flex items-center justify-center h-full text-red-500\">\r\n Error: AppContent with layout=\"split\" requires exactly 2 children\r\n </div>\r\n )\r\n }\r\n\r\n const [leftClass, rightClass] = splitRatioClasses[splitRatio]\r\n const [firstChild, secondChild] = reverse ? [children[1], children[0]] : [children[0], children[1]]\r\n const [firstClass, secondClass] = reverse ? [rightClass, leftClass] : [leftClass, rightClass]\r\n\r\n return (\r\n <div className=\"flex h-full gap-2\">\r\n <div className={cn(firstClass, \"overflow-auto\")}>\r\n {contentWrapper(firstChild)}\r\n </div>\r\n <div className={cn(secondClass, \"overflow-auto\")}>\r\n {contentWrapper(secondChild)}\r\n </div>\r\n </div>\r\n )\r\n }\r\n\r\n case \"with-sheet\": {\r\n const {\r\n sheetContent,\r\n sheetWidth = \"four-fifth\",\r\n sheetSide = \"right\",\r\n sheetMode = \"container\",\r\n sheetClassName,\r\n isSheetOpen,\r\n onSheetOpenChange,\r\n disableOverlay = true,\r\n showSheetOverlay = true,\r\n } = props as WithSheetLayoutProps;\r\n\r\n const isControlled = isSheetOpen !== undefined && onSheetOpenChange;\r\n const sheetOpen = isControlled ? isSheetOpen : internalSheetOpen;\r\n const setSheetOpen = isControlled ? onSheetOpenChange : setInternalSheetOpen;\r\n\r\n if (sheetMode === \"container\") {\r\n const sheetClasses = getContainerSheetClasses(sheetSide, sheetWidth);\r\n const sheetWidthClass = splitRatioClasses[sheetWidth][0];\r\n\r\n // Separate rendering for overlay mode vs push mode\r\n if (disableOverlay) {\r\n // Push mode - sheet pushes content\r\n return (\r\n <div className={cn(\"flex relative flex-1 overflow-hidden\")}>\r\n {/* Main content area */}\r\n <div className={cn(\r\n \"h-full overflow-auto transition-all duration-500\",\r\n sheetOpen\r\n ? sheetClasses.contentPushClass\r\n : \"w-full\",\r\n sheetOpen && \"overflow-y-auto overflow-x-hidden\"\r\n )}>\r\n <div className={cn(\"h-full\", !parentContainer && paddingClasses[padding])}>\r\n {children}\r\n </div>\r\n </div>\r\n\r\n {/* Container sheet */}\r\n <div\r\n className={cn(\r\n sheetClasses.container,\r\n \"transition-all duration-500 ease-in-out h-full\",\r\n sheetWidthClass,\r\n sheetOpen && [\"left\", \"right\"].includes(sheetSide)\r\n ? cn(sheetClasses.sheetPushClass, \"overflow-y-auto\")\r\n : sheetOpen\r\n ? sheetClasses.transformOpen\r\n : cn(sheetClasses.transform, \"hidden\"),\r\n \"overflow-y-auto\"\r\n )}\r\n >\r\n <div className={cn(sheetClasses.content, sheetClassName, \"h-full\")}>\r\n {sheetContent}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n } else {\r\n // Overlay mode - sheet overlays content with dark background\r\n return (\r\n <div className={cn(\"flex relative flex-1 overflow-hidden\")}>\r\n {/* Main content area (always full width) */}\r\n <div className={cn(\r\n \"h-full overflow-auto w-full transition-all duration-500 relative z-10\"\r\n )}>\r\n <div className={cn(\"h-full\", !parentContainer && paddingClasses[padding])}>\r\n {children}\r\n </div>\r\n </div>\r\n\r\n {/* Container for sheet and overlay */}\r\n <div className={cn(\r\n \"absolute inset-0 z-20\",\r\n !sheetOpen && \"pointer-events-none\"\r\n )}>\r\n {/* Overlay layer */}\r\n {showSheetOverlay && (\r\n <div\r\n className={cn(\r\n \"absolute inset-0 bg-black/50 transition-opacity duration-500\",\r\n sheetOpen ? \"opacity-100\" : \"opacity-0 pointer-events-none\"\r\n )}\r\n onClick={() => setSheetOpen(false)}\r\n />\r\n )}\r\n\r\n {/* Container sheet */}\r\n <div\r\n className={cn(\r\n sheetClasses.container,\r\n \"transition-all duration-500 backdrop-blur-2xl ease-in-out h-full absolute\",\r\n sheetWidthClass,\r\n sheetOpen\r\n ? \"translate-x-0 opacity-100\"\r\n : cn(\r\n sheetSide === \"right\" ? \"translate-x-full\" : \"-translate-x-full\",\r\n \"opacity-0 pointer-events-none\"\r\n ),\r\n \"overflow-y-auto\"\r\n )}\r\n style={{ [sheetSide]: 0 }}\r\n >\r\n <div className={cn(sheetClasses.content, sheetClassName, \"h-full\")}>\r\n {sheetContent}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n }\r\n }\r\n\r\n return (\r\n <>\r\n {children}\r\n <Sheet open={sheetOpen} onOpenChange={setSheetOpen}>\r\n <SheetPortal>\r\n <SheetContent\r\n side={sheetSide}\r\n className={cn(\r\n \"fixed bg-background border sm:max-w-full\",\r\n \"transition-all duration-500 ease-in-out\",\r\n splitRatioClasses[sheetWidth][0],\r\n sheetClassName\r\n )}\r\n >\r\n {sheetContent}\r\n </SheetContent>\r\n </SheetPortal>\r\n </Sheet>\r\n </>\r\n );\r\n }\r\n\r\n default:\r\n return contentWrapper(children)\r\n }\r\n }\r\n\r\n return (\r\n <AppContentContext.Provider value={true}>\r\n <div className={cn(\r\n baseClasses,\r\n variantClasses[variant],\r\n paddingClasses[padding],\r\n isNested && \"flex-1\",\r\n parentContainer && \"h-full\",\r\n !parentContainer && \"rounded-2xl\",\r\n className\r\n )}>\r\n {header && (\r\n <div\r\n className={cn(\r\n \"border-b\",\r\n headerClassName,\r\n variant === \"card\" && !parentContainer && \"rounded-t-2xl\",\r\n variant === \"border\" && \"border-b-2\",\r\n paddingClasses[padding]\r\n )}\r\n >\r\n {header}\r\n </div>\r\n )}\r\n {renderContent()}\r\n {footer && (\r\n <div\r\n className={cn(\r\n \"border-t\",\r\n footerClassName,\r\n variant === \"card\" && !parentContainer && \"rounded-b-2xl\",\r\n variant === \"border\" && \"border-t-2\",\r\n paddingClasses[padding]\r\n )}\r\n >\r\n {footer}\r\n </div>\r\n )}\r\n </div>\r\n </AppContentContext.Provider>\r\n )\r\n}\r\n","import * as React from \"react\"\nimport { Dialog as SheetPrimitive } from \"radix-ui\"\nimport { XIcon } from \"lucide-react\"\nimport { cn } from \"../../lib/utils.js\"\n\nfunction Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />\n}\n\nfunction SheetTrigger({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Trigger>) {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />\n}\n\nfunction SheetClose({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Close>) {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />\n}\n\nfunction SheetPortal({\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Portal>) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />\n}\n\nfunction SheetOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Overlay>) {\n return (\n <SheetPrimitive.Overlay\n data-slot=\"sheet-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SheetContent({\n className,\n children,\n side = \"right\",\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\"\n}) {\n return (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n data-slot=\"sheet-content\"\n className={cn(\n \"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500\",\n side === \"right\" &&\n \"data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm\",\n side === \"left\" &&\n \"data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm\",\n side === \"top\" &&\n \"data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b\",\n side === \"bottom\" &&\n \"data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t\",\n className\n )}\n {...props}\n >\n {children}\n <SheetPrimitive.Close className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-secondary absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none\">\n <XIcon className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\n </SheetPrimitive.Content>\n </SheetPortal>\n )\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-header\"\n className={cn(\"flex flex-col gap-1.5 p-4\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetTitle({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Title>) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn(\"text-foreground font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction SheetDescription({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Description>) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetOverlay,\n SheetPortal,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n}\n","import { AppMeta, useAppMeta } from '../../context/index.js';\r\nimport { cn } from '../../lib/utils.js';\r\n\r\ntype ColumnConfig = {\r\n content: React.ReactNode;\r\n align?: 'left' | 'center' | 'right';\r\n width?: 'auto' | 'fill';\r\n className?: string;\r\n};\r\n\r\nexport type AppFooterProps = {\r\n className?: string;\r\n columns?: [ColumnConfig?, ColumnConfig?, ColumnConfig?];\r\n meta?: AppMeta;\r\n};\r\n\r\nexport const AppFooter = ({\r\n className,\r\n columns = [],\r\n meta = { title: \"\" },\r\n}: AppFooterProps) => {\r\n // const { meta } = useAppMeta();\r\n\r\n // const renderPagination = () => {\r\n // if (!meta.pagination) return null;\r\n\r\n // return (\r\n // <div className=\"flex items-center gap-2\">\r\n // <Button\r\n // variant=\"outline\"\r\n // size=\"sm\"\r\n // disabled={!meta.pagination.hasPrevious}\r\n // onClick={meta.pagination.onPrevious}\r\n // >\r\n // <ChevronLeft className=\"h-4 w-4 mr-1\" />\r\n // {meta.pagination.previousLabel || 'Previous'}\r\n // </Button>\r\n // <Button\r\n // variant=\"outline\"\r\n // size=\"sm\"\r\n // disabled={!meta.pagination.hasNext}\r\n // onClick={meta.pagination.onNext}\r\n // >\r\n // {meta.pagination.nextLabel || 'Next'}\r\n // <ChevronRight className=\"h-4 w-4 ml-1\" />\r\n // </Button>\r\n // </div>\r\n // );\r\n // };\r\n\r\n const actionsColumn: ColumnConfig = {\r\n content: (\r\n <div className=\"flex items-center gap-4 p-2\">\r\n {/* {renderPagination()} */}\r\n {meta.secondaryActions}\r\n </div>\r\n ),\r\n align: 'right',\r\n width: 'fill',\r\n };\r\n\r\n const allColumns: ColumnConfig[] = [\r\n ...columns.filter((col): col is ColumnConfig => col !== undefined),\r\n actionsColumn\r\n ];\r\n\r\n return (\r\n <div className={cn('flex items-center w-full gap-4', className)}>\r\n {allColumns.map((column, index) => (\r\n <div\r\n key={index}\r\n className={cn(\r\n 'flex items-center h-full',\r\n column.className,\r\n {\r\n 'justify-start': column.align === 'left',\r\n 'justify-center': column.align === 'center',\r\n 'justify-end': column.align === 'right',\r\n 'flex-1': column.width === 'fill',\r\n }\r\n )}\r\n >\r\n {column.content}\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n};","import type { AppMetaContextType } from '../../context/app-meta/types.js';\r\nimport { AppHeaderProps, AppHeader as BaseAppHeader } from './app-header.jsx';\r\nimport { AppFooterProps, AppFooter as BaseAppFooter } from './app-footer.jsx';\r\nimport { AppContentProps, AppContent as BaseAppContent } from './app-content.jsx';\r\nimport { AppContainerProps, AppContainer as BaseAppContainer } from './app-container.jsx';\r\n\r\nexport function createLayoutComponents<TRoute extends string>({\r\n useTypedAppMeta,\r\n}: {\r\n useTypedAppMeta: () => AppMetaContextType<TRoute>;\r\n}) {\r\n const AppHeader = (props: Omit<AppHeaderProps, 'meta'>) => {\r\n const { meta } = useTypedAppMeta();\r\n return <BaseAppHeader {...props} meta={meta} />;\r\n };\r\n\r\n const AppFooter = (props: Omit<AppFooterProps, 'meta'>) => {\r\n const { meta } = useTypedAppMeta();\r\n return <BaseAppFooter {...props} meta={meta} />;\r\n };\r\n\r\n const AppContent = (props: AppContentProps) => (\r\n <BaseAppContent {...props} />\r\n );\r\n\r\n const AppContainer = (props: AppContainerProps) => (\r\n <BaseAppContainer {...props} />\r\n );\r\n\r\n return {\r\n AppHeader,\r\n AppFooter,\r\n AppContent,\r\n AppContainer,\r\n };\r\n}"],"mappings":";AAAA,OAAS,QAAAA,MAA6B,OACtC,OAAS,WAAAC,MAAe,iBAEjB,SAASC,KAAMC,EAAsB,CAC1C,OAAOF,EAAQD,EAAKG,CAAM,CAAC,CAC7B,CC6BI,cAAAC,OAAA,oBA7BJ,IAAMC,GAA8C,CAClD,KAAQ,QACR,MAAS,QACT,QAAW,QACX,MAAS,QACT,cAAe,OACjB,EASMC,GAA4E,CAChF,KAAQ,MACR,MAAS,MACT,QAAW,MACX,MAAS,KACX,EAEaC,EAAe,CAAC,CAC3B,SAAAC,EACA,UAAAC,EACA,QAAAC,EAAU,QACV,QAAAC,EAAU,MACZ,IAEIP,GAAC,OAAI,UAAWQ,EACd,uBACAP,GAAeK,CAAO,EACtBJ,GAAeK,CAAO,EACtBF,CACF,EACG,SAAAD,EACH,ECxCJ,OAAS,iBAAAK,EAAe,gBAAAC,OAAoB,eCA5C,OAAS,QAAQC,OAAqB,WACtC,OAAS,OAAAC,OAA8B,2BAgDnC,cAAAC,OAAA,oBA5CJ,IAAMC,GAAiBC,GACrB,8bACA,CACE,SAAU,CACR,QAAS,CACP,QACE,mEACF,YACE,8JACF,QACE,wIACF,UACE,yEACF,MACE,uEACF,KAAM,iDACR,EACA,KAAM,CACJ,QAAS,gCACT,GAAI,gDACJ,GAAI,uCACJ,KAAM,QACR,CACF,EACA,gBAAiB,CACf,QAAS,UACT,KAAM,SACR,CACF,CACF,EAEA,SAASC,EAAO,CACd,UAAAC,EACA,QAAAC,EACA,KAAAC,EACA,QAAAC,EAAU,GACV,GAAGC,CACL,EAGK,CACH,IAAMC,EAAOF,EAAUG,GAAc,KAAO,SAE5C,OACEV,GAACS,EAAA,CACC,YAAU,SACV,UAAWE,EAAGV,GAAe,CAAE,QAAAI,EAAS,KAAAC,EAAM,UAAAF,CAAU,CAAC,EAAG,iBAAiB,EAC5E,GAAGI,EACN,CAEJ,CDnDA,OAAS,WAAAI,OAAe,eAoCd,OACE,OAAAC,EADF,QAAAC,MAAA,oBApBH,IAAMC,EAAY,CAAC,CACxB,UAAAC,EACA,QAAAC,EAAU,CAAC,EACX,eAAAC,EAAiB,GACjB,KAAAC,EAAO,CAAE,MAAO,EAAG,CACrB,IAAsB,CAGpB,IAAMC,EAAmB,IAAM,CAC7B,GAAI,CAACD,EAAK,YAAc,CAACD,EAAgB,OAAO,KAEhD,IAAMG,EAAc,CAClB,QAAS,YACT,KAAM,OACN,UAAW,iCACb,EAEA,OAAIF,EAAK,WAAW,KAEhBN,EAACD,GAAA,CAAQ,GAAIO,EAAK,WAAW,KAC3B,SAAAL,EAACQ,EAAA,CAAQ,GAAGD,EACV,UAAAR,EAACU,EAAA,CAAc,UAAU,SAAS,EACjCJ,EAAK,WAAW,SACnB,EACF,EAKFL,EAACQ,EAAA,CAAQ,GAAGD,EAAa,QAASF,EAAK,WAAW,QAChD,UAAAN,EAACU,EAAA,CAAc,UAAU,SAAS,EACjCJ,EAAK,WAAW,SACnB,CAEJ,EAEMK,EAAiB,IACjB,CAACL,EAAK,UAAYA,EAAK,SAAS,SAAW,EAAU,KAGvDN,EAAC,OAAI,UAAU,aACZ,SAAAM,EAAK,SAAS,IAAI,CAACM,EAAMC,IACxBD,EAAK,OACHX,EAAC,OAAgB,UAAU,UACzB,UAAAA,EAAC,QAAK,UAAU,wBAAyB,UAAAW,EAAK,MAAM,KAAC,EACrDZ,EAAC,QAAM,SAAAY,EAAK,MAAM,IAFVC,CAGV,CAEH,EACH,EAIEC,EAAe,IACdR,EAAK,OAWRN,EAAC,QAAK,UAAWe,EACf,0EAViB,CACnB,QAAS,8BACT,QAAS,gCACT,SAAU,0BACV,KAAM,4BACN,QAAS,2BACX,EAKiBT,EAAK,OAAO,KAAkC,CAC7D,EACG,SAAAA,EAAK,OAAO,QACf,EAhBuB,KAoBrBU,EAA+B,CACnC,QACEf,EAAC,OAAI,UAAU,0BACZ,UAAAM,EAAiB,EAClBN,EAAC,OAAI,UAAU,4BACb,UAAAD,EAAC,MAAG,UAAU,oCAAqC,SAAAM,EAAK,MAAM,EAC7DQ,EAAa,EACbR,EAAK,aACJN,EAAC,KAAE,UAAU,wBAAyB,SAAAM,EAAK,YAAY,EAExDK,EAAe,EACfL,EAAK,aAAeA,EAAK,YAAY,OAAS,GAC7CN,EAAC,OAAI,UAAU,kDACZ,SAAAM,EAAK,YAAY,IAAI,CAACW,EAAOJ,IAC5BZ,EAAC,OAAgB,UAAU,oBACxB,UAAAgB,EAAM,KACLjB,EAAC,QAAK,UAAU,qCACb,SAAAiB,EAAM,MACT,EAEAjB,EAAC,QAAM,SAAAiB,EAAM,MAAM,EAEpBJ,EAAQP,EAAK,YAAa,OAAS,GAClCN,EAACkB,GAAA,CAAa,UAAU,eAAe,IATjCL,CAWV,CACD,EACH,GAEJ,GACF,EAEF,MAAO,OACP,MAAO,MACT,EAEMM,EAA8B,CAClC,QAASb,EAAK,eACd,MAAO,QACP,MAAO,MACT,EAEMc,EAA6B,CACjCJ,EACA,GAAGZ,EAAQ,OAAQiB,GAA6BA,IAAQ,MAAS,EACjEF,CACF,EAEA,OACEnB,EAAC,OAAI,UAAWe,EAAG,qCAAsCZ,CAAS,EAC/D,SAAAiB,EAAW,IAAI,CAACE,EAAQT,IACvBb,EAAC,OAEC,UAAWe,EACT,2BACAO,EAAO,UACP,CACE,gBAAiBA,EAAO,QAAU,OAClC,iBAAkBA,EAAO,QAAU,SACnC,cAAeA,EAAO,QAAU,QAChC,SAAUA,EAAO,QAAU,MAC7B,CACF,EAEC,SAAAA,EAAO,SAZHT,CAaP,CACD,EACH,CAEJ,EEnKA,OAAOU,IAAS,YAAAC,GAAU,iBAAAC,GAAe,cAAAC,OAAkB,QCA3D,OAAS,UAAUC,MAAsB,WACzC,OAAS,SAAAC,OAAa,eAIb,cAAAC,EAiED,QAAAC,MAjEC,oBADT,SAASC,EAAM,CAAE,GAAGC,CAAM,EAAqD,CAC7E,OAAOH,EAACI,EAAe,KAAf,CAAoB,YAAU,QAAS,GAAGD,EAAO,CAC3D,CAcA,SAASE,EAAY,CACnB,GAAGC,CACL,EAAuD,CACrD,OAAOC,EAACC,EAAe,OAAf,CAAsB,YAAU,eAAgB,GAAGF,EAAO,CACpE,CAEA,SAASG,GAAa,CACpB,UAAAC,EACA,GAAGJ,CACL,EAAwD,CACtD,OACEC,EAACC,EAAe,QAAf,CACC,YAAU,gBACV,UAAWG,EACT,yJACAD,CACF,EACC,GAAGJ,EACN,CAEJ,CAEA,SAASM,EAAa,CACpB,UAAAF,EACA,SAAAG,EACA,KAAAC,EAAO,QACP,GAAGR,CACL,EAEG,CACD,OACES,EAACV,EAAA,CACC,UAAAE,EAACE,GAAA,EAAa,EACdM,EAACP,EAAe,QAAf,CACC,YAAU,gBACV,UAAWG,EACT,6MACAG,IAAS,SACT,mIACAA,IAAS,QACT,gIACAA,IAAS,OACT,2GACAA,IAAS,UACT,oHACAJ,CACF,EACC,GAAGJ,EAEH,UAAAO,EACDE,EAACP,EAAe,MAAf,CAAqB,UAAU,6OAC9B,UAAAD,EAACS,GAAA,CAAM,UAAU,SAAS,EAC1BT,EAAC,QAAK,UAAU,UAAU,iBAAK,GACjC,GACF,GACF,CAEJ,CDyCM,OA0JI,YAAAU,GA1JJ,OAAAC,EA4BI,QAAAC,MA5BJ,oBA7GN,IAAMC,EAAoBC,GAAc,EAAK,EAiDvCC,EAA0D,CAC9D,WAAY,CAAC,QAAS,OAAO,EAC7B,YAAa,CAAC,QAAS,OAAO,EAC9B,YAAa,CAAC,QAAS,OAAO,EAC9B,aAAc,CAAC,QAAS,OAAO,EAC/B,eAAgB,CAAC,QAAS,OAAO,EACjC,YAAa,CAAC,QAAS,OAAO,EAC9B,aAAc,CAAC,QAAS,OAAO,CACjC,EAEMC,EAAiB,CACrB,KAAM,MACN,MAAO,MACP,QAAS,MACT,MAAO,KACT,EAEMC,GAA2B,CAACC,EAAiBC,IAAsB,CACvE,GAAM,CAACC,EAAcC,CAAU,EAAIN,EAAkBI,CAAK,EAE1D,MAAO,CACL,UAAW,yDACX,QAASG,EACP,+DACAJ,IAAS,QAAU,WAAa,UAClC,EACA,UAAWA,IAAS,QAAU,mBAAqB,oBACnD,cAAe,gBACf,iBAAkBA,IAAS,QAAUG,EAAaD,EAClD,eAAgBF,IAAS,QAAUE,EAAeC,CACpD,CACF,EAEME,GAAc,qDACdC,GAAiB,CACrB,QAAS,gBACT,KAAM,iCACN,OAAQ,yBACR,YAAa,gBACf,EAEaC,EAAcC,GAA2B,CACpD,GAAM,CACJ,SAAAC,EACA,UAAAC,EACA,QAAAC,EAAU,UACV,OAAAC,EAAS,OACT,OAAAC,EACA,OAAAC,EACA,gBAAAC,EACA,gBAAAC,EACA,gBAAAC,EAAkB,GAClB,QAAAC,EAAUD,EAAkB,OAAS,OACvC,EAAIT,EAEEW,EAAWC,GAAWzB,CAAiB,EACvC,CAAC0B,EAAmBC,CAAoB,EAAIC,GAAS,EAAK,EAE1DC,EAAiBC,GAAM,YAC1BC,GACCjC,EAAC,OAAI,UAAWW,EACd,2CACAa,GAAmB,OACnB,CAACA,GAAmBnB,EAAeoB,CAAO,CAC5C,EACG,SAAAQ,EACH,EAEF,CAACR,EAASD,CAAe,CAC3B,EAEMU,EAAgB,IAAM,CAC1B,OAAQf,EAAQ,CACd,IAAK,QAAS,CACZ,GAAM,CAAE,WAAAgB,EAAa,eAAgB,QAAAC,EAAU,EAAM,EAAIrB,EACzD,GAAI,CAAC,MAAM,QAAQC,CAAQ,GAAKA,EAAS,SAAW,EAClD,OACEhB,EAAC,OAAI,UAAU,uDAAuD,6EAEtE,EAIJ,GAAM,CAACqC,EAAWC,CAAU,EAAIlC,EAAkB+B,CAAU,EACtD,CAACI,EAAYC,CAAW,EAAIJ,EAAU,CAACpB,EAAS,CAAC,EAAGA,EAAS,CAAC,CAAC,EAAI,CAACA,EAAS,CAAC,EAAGA,EAAS,CAAC,CAAC,EAC5F,CAACyB,EAAYC,CAAW,EAAIN,EAAU,CAACE,EAAYD,CAAS,EAAI,CAACA,EAAWC,CAAU,EAE5F,OACErC,EAAC,OAAI,UAAU,oBACb,UAAAD,EAAC,OAAI,UAAWW,EAAG8B,EAAY,eAAe,EAC3C,SAAAV,EAAeQ,CAAU,EAC5B,EACAvC,EAAC,OAAI,UAAWW,EAAG+B,EAAa,eAAe,EAC5C,SAAAX,EAAeS,CAAW,EAC7B,GACF,CAEJ,CAEA,IAAK,aAAc,CACjB,GAAM,CACJ,aAAAG,EACA,WAAAjC,EAAa,aACb,UAAAkC,EAAY,QACZ,UAAAC,EAAY,YACZ,eAAAC,EACA,YAAAC,EACA,kBAAAC,EACA,eAAAC,EAAiB,GACjB,iBAAAC,EAAmB,EACrB,EAAInC,EAEEoC,EAAeJ,IAAgB,QAAaC,EAC5CI,EAAYD,EAAeJ,EAAcnB,EACzCyB,EAAeF,EAAeH,EAAoBnB,EAExD,GAAIgB,IAAc,YAAa,CAC7B,IAAMS,EAAehD,GAAyBsC,EAAWlC,CAAU,EAC7D6C,EAAkBnD,EAAkBM,CAAU,EAAE,CAAC,EAGvD,OAAIuC,EAGAhD,EAAC,OAAI,UAAWU,EAAG,sCAAsC,EAEvD,UAAAX,EAAC,OAAI,UAAWW,EACd,mDACAyC,EACIE,EAAa,iBACb,SACJF,GAAa,mCACf,EACE,SAAApD,EAAC,OAAI,UAAWW,EAAG,SAAU,CAACa,GAAmBnB,EAAeoB,CAAO,CAAC,EACrE,SAAAT,EACH,EACF,EAGAhB,EAAC,OACC,UAAWW,EACT2C,EAAa,UACb,iDACAC,EACAH,GAAa,CAAC,OAAQ,OAAO,EAAE,SAASR,CAAS,EAC7CjC,EAAG2C,EAAa,eAAgB,iBAAiB,EACjDF,EACEE,EAAa,cACb3C,EAAG2C,EAAa,UAAW,QAAQ,EACzC,iBACF,EAEA,SAAAtD,EAAC,OAAI,UAAWW,EAAG2C,EAAa,QAASR,EAAgB,QAAQ,EAC9D,SAAAH,EACH,EACF,GACF,EAKA1C,EAAC,OAAI,UAAWU,EAAG,sCAAsC,EAEvD,UAAAX,EAAC,OAAI,UAAWW,EACd,uEACF,EACE,SAAAX,EAAC,OAAI,UAAWW,EAAG,SAAU,CAACa,GAAmBnB,EAAeoB,CAAO,CAAC,EACrE,SAAAT,EACH,EACF,EAGAf,EAAC,OAAI,UAAWU,EACd,wBACA,CAACyC,GAAa,qBAChB,EAEG,UAAAF,GACClD,EAAC,OACC,UAAWW,EACT,+DACAyC,EAAY,cAAgB,+BAC9B,EACA,QAAS,IAAMC,EAAa,EAAK,EACnC,EAIFrD,EAAC,OACC,UAAWW,EACT2C,EAAa,UACb,4EACAC,EACAH,EACI,4BACAzC,EACAiC,IAAc,QAAU,mBAAqB,oBAC7C,+BACF,EACF,iBACF,EACA,MAAO,CAAE,CAACA,CAAS,EAAG,CAAE,EAExB,SAAA5C,EAAC,OAAI,UAAWW,EAAG2C,EAAa,QAASR,EAAgB,QAAQ,EAC9D,SAAAH,EACH,EACF,GACF,GACF,CAGN,CAEA,OACE1C,EAAAF,GAAA,CACG,UAAAiB,EACDhB,EAACwD,EAAA,CAAM,KAAMJ,EAAW,aAAcC,EACpC,SAAArD,EAACyD,EAAA,CACC,SAAAzD,EAAC0D,EAAA,CACC,KAAMd,EACN,UAAWjC,EACT,2CACA,0CACAP,EAAkBM,CAAU,EAAE,CAAC,EAC/BoC,CACF,EAEC,SAAAH,EACH,EACF,EACF,GACF,CAEJ,CAEA,QACE,OAAOZ,EAAef,CAAQ,CAClC,CACF,EAEA,OACEhB,EAACE,EAAkB,SAAlB,CAA2B,MAAO,GACjC,SAAAD,EAAC,OAAI,UAAWU,EACdC,GACAC,GAAeK,CAAO,EACtBb,EAAeoB,CAAO,EACtBC,GAAY,SACZF,GAAmB,SACnB,CAACA,GAAmB,cACpBP,CACF,EACG,UAAAG,GACCpB,EAAC,OACC,UAAWW,EACT,WACAW,EACAJ,IAAY,QAAU,CAACM,GAAmB,gBAC1CN,IAAY,UAAY,aACxBb,EAAeoB,CAAO,CACxB,EAEC,SAAAL,EACH,EAEDc,EAAc,EACdb,GACCrB,EAAC,OACC,UAAWW,EACT,WACAY,EACAL,IAAY,QAAU,CAACM,GAAmB,gBAC1CN,IAAY,UAAY,aACxBb,EAAeoB,CAAO,CACxB,EAEC,SAAAJ,EACH,GAEJ,EACF,CAEJ,EEhSM,cAAAsC,MAAA,oBApCC,IAAMC,EAAY,CAAC,CACxB,UAAAC,EACA,QAAAC,EAAU,CAAC,EACX,KAAAC,EAAO,CAAE,MAAO,EAAG,CACrB,IAAsB,CA8BpB,IAAMC,EAA8B,CAClC,QACEL,EAAC,OAAI,UAAU,8BAEZ,SAAAI,EAAK,iBACR,EAEF,MAAO,QACP,MAAO,MACT,EAEME,EAA6B,CACjC,GAAGH,EAAQ,OAAQI,GAA6BA,IAAQ,MAAS,EACjEF,CACF,EAEA,OACEL,EAAC,OAAI,UAAWQ,EAAG,iCAAkCN,CAAS,EAC3D,SAAAI,EAAW,IAAI,CAACG,EAAQC,IACvBV,EAAC,OAEC,UAAWQ,EACT,2BACAC,EAAO,UACP,CACE,gBAAiBA,EAAO,QAAU,OAClC,iBAAkBA,EAAO,QAAU,SACnC,cAAeA,EAAO,QAAU,QAChC,SAAUA,EAAO,QAAU,MAC7B,CACF,EAEC,SAAAA,EAAO,SAZHC,CAaP,CACD,EACH,CAEJ,EC1EW,cAAAC,MAAA,oBAPJ,SAASC,GAA8C,CAC5D,gBAAAC,CACF,EAEG,CAmBD,MAAO,CACL,UAnBiBC,GAAwC,CACzD,GAAM,CAAE,KAAAC,CAAK,EAAIF,EAAgB,EACjC,OAAOF,EAACK,EAAA,CAAe,GAAGF,EAAO,KAAMC,EAAM,CAC/C,EAiBE,UAfiBD,GAAwC,CACzD,GAAM,CAAE,KAAAC,CAAK,EAAIF,EAAgB,EACjC,OAAOF,EAACM,EAAA,CAAe,GAAGH,EAAO,KAAMC,EAAM,CAC/C,EAaE,WAXkBD,GAClBH,EAACO,EAAA,CAAgB,GAAGJ,EAAO,EAW3B,aARoBA,GACpBH,EAACQ,EAAA,CAAkB,GAAGL,EAAO,CAQ/B,CACF","names":["clsx","twMerge","cn","inputs","jsx","spacingClasses","paddingClasses","AppContainer","children","className","spacing","padding","cn","ArrowLeftIcon","ChevronRight","SlotPrimitive","cva","jsx","buttonVariants","cva","Button","className","variant","size","asChild","props","Comp","SlotPrimitive","cn","NavLink","jsx","jsxs","AppHeader","className","columns","showBackButton","meta","renderBackAction","buttonProps","Button","ArrowLeftIcon","renderMetadata","item","index","renderStatus","cn","reservedColumn","crumb","ChevronRight","actionsColumn","allColumns","col","column","React","useState","createContext","useContext","SheetPrimitive","XIcon","jsx","jsxs","Sheet","props","SheetPrimitive","SheetPortal","props","jsx","SheetPrimitive","SheetOverlay","className","cn","SheetContent","children","side","jsxs","XIcon","Fragment","jsx","jsxs","AppContentContext","createContext","splitRatioClasses","paddingClasses","getContainerSheetClasses","side","width","contentWidth","sheetWidth","cn","baseClasses","variantClasses","AppContent","props","children","className","variant","layout","header","footer","headerClassName","footerClassName","parentContainer","padding","isNested","useContext","internalSheetOpen","setInternalSheetOpen","useState","contentWrapper","React","content","renderContent","splitRatio","reverse","leftClass","rightClass","firstChild","secondChild","firstClass","secondClass","sheetContent","sheetSide","sheetMode","sheetClassName","isSheetOpen","onSheetOpenChange","disableOverlay","showSheetOverlay","isControlled","sheetOpen","setSheetOpen","sheetClasses","sheetWidthClass","Sheet","SheetPortal","SheetContent","jsx","AppFooter","className","columns","meta","actionsColumn","allColumns","col","cn","column","index","jsx","createLayoutComponents","useTypedAppMeta","props","meta","AppHeader","AppFooter","AppContent","AppContainer"]}
|