@omnitron-dev/prism 0.1.1

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.
Files changed (83) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +44 -0
  3. package/bin/prism.js +13 -0
  4. package/dist/accessibility/index.d.ts +157 -0
  5. package/dist/accessibility/index.js +186 -0
  6. package/dist/accessibility/index.js.map +1 -0
  7. package/dist/blocks/index.d.ts +1239 -0
  8. package/dist/blocks/index.js +1712 -0
  9. package/dist/blocks/index.js.map +1 -0
  10. package/dist/chunk-77KIJLPP.js +37 -0
  11. package/dist/chunk-77KIJLPP.js.map +1 -0
  12. package/dist/chunk-BTIT7WYH.js +339 -0
  13. package/dist/chunk-BTIT7WYH.js.map +1 -0
  14. package/dist/chunk-BV32OJ2A.js +1409 -0
  15. package/dist/chunk-BV32OJ2A.js.map +1 -0
  16. package/dist/chunk-DDY7TLUI.js +139 -0
  17. package/dist/chunk-DDY7TLUI.js.map +1 -0
  18. package/dist/chunk-DXXZ3ITR.js +4227 -0
  19. package/dist/chunk-DXXZ3ITR.js.map +1 -0
  20. package/dist/chunk-E3XANPTO.js +2319 -0
  21. package/dist/chunk-E3XANPTO.js.map +1 -0
  22. package/dist/chunk-FU52GL2E.js +3 -0
  23. package/dist/chunk-FU52GL2E.js.map +1 -0
  24. package/dist/chunk-GYDT5EKX.js +16505 -0
  25. package/dist/chunk-GYDT5EKX.js.map +1 -0
  26. package/dist/chunk-HO2GKTWJ.js +28 -0
  27. package/dist/chunk-HO2GKTWJ.js.map +1 -0
  28. package/dist/chunk-JDTC2SBY.js +140 -0
  29. package/dist/chunk-JDTC2SBY.js.map +1 -0
  30. package/dist/chunk-JNU4QHJK.js +6 -0
  31. package/dist/chunk-JNU4QHJK.js.map +1 -0
  32. package/dist/chunk-LAEY5USO.js +2621 -0
  33. package/dist/chunk-LAEY5USO.js.map +1 -0
  34. package/dist/chunk-UR6X3W5I.js +530 -0
  35. package/dist/chunk-UR6X3W5I.js.map +1 -0
  36. package/dist/chunk-WC2WM2JD.js +883 -0
  37. package/dist/chunk-WC2WM2JD.js.map +1 -0
  38. package/dist/chunk-XWL6J6IO.js +40 -0
  39. package/dist/chunk-XWL6J6IO.js.map +1 -0
  40. package/dist/cli/index.js +2695 -0
  41. package/dist/cli/index.js.map +1 -0
  42. package/dist/config-BA6IeTq9.d.ts +100 -0
  43. package/dist/core/index.d.ts +454 -0
  44. package/dist/core/index.js +9 -0
  45. package/dist/core/index.js.map +1 -0
  46. package/dist/forms/index.d.ts +562 -0
  47. package/dist/forms/index.js +545 -0
  48. package/dist/forms/index.js.map +1 -0
  49. package/dist/hooks/index.d.ts +7 -0
  50. package/dist/hooks/index.js +10 -0
  51. package/dist/hooks/index.js.map +1 -0
  52. package/dist/http/index.d.ts +233 -0
  53. package/dist/http/index.js +282 -0
  54. package/dist/http/index.js.map +1 -0
  55. package/dist/index-odhPSv9I.d.ts +2491 -0
  56. package/dist/index.css +131 -0
  57. package/dist/index.css.map +1 -0
  58. package/dist/index.d.ts +9109 -0
  59. package/dist/index.js +13280 -0
  60. package/dist/index.js.map +1 -0
  61. package/dist/layouts/index.d.ts +854 -0
  62. package/dist/layouts/index.js +6 -0
  63. package/dist/layouts/index.js.map +1 -0
  64. package/dist/netron/index.d.ts +4 -0
  65. package/dist/netron/index.js +4 -0
  66. package/dist/netron/index.js.map +1 -0
  67. package/dist/registry/index.d.ts +352 -0
  68. package/dist/registry/index.js +4 -0
  69. package/dist/registry/index.js.map +1 -0
  70. package/dist/registry-BrDNftd5.d.ts +574 -0
  71. package/dist/settings-plpR26Xk.d.ts +455 -0
  72. package/dist/state/index.d.ts +981 -0
  73. package/dist/state/index.js +5 -0
  74. package/dist/state/index.js.map +1 -0
  75. package/dist/theme/index.d.ts +1049 -0
  76. package/dist/theme/index.js +5 -0
  77. package/dist/theme/index.js.map +1 -0
  78. package/dist/theme-CrXLfP1c.d.ts +389 -0
  79. package/dist/types/index.d.ts +146 -0
  80. package/dist/types/index.js +5 -0
  81. package/dist/types/index.js.map +1 -0
  82. package/dist/use-timeout-D7U3EAtH.d.ts +808 -0
  83. package/package.json +194 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/blocks/dashboard-block/dashboard-block.tsx","../../src/blocks/dashboard-block/use-dashboard-block.ts","../../src/blocks/auth-block/auth-block.tsx","../../src/blocks/auth-block/guards.tsx","../../src/blocks/data-grid-block/data-grid-block.tsx"],"names":["Box","Typography","IconButton","Button","useCallback","useMemo","jsxs","jsx","useState","Fragment","Divider","useEffect","createContext","useContext","ErrorState","Paper"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Dashboard Block Component\n *\n * Reusable dashboard widget/card block with header, content, and footer slots.\n * Supports loading, error states, and collapsible behavior.\n *\n * @module @omnitron-dev/prism/blocks/dashboard-block\n */\n\n'use client';\n\nimport { type ReactNode, createContext, useContext, useMemo, useCallback } from 'react';\nimport Box from '@mui/material/Box';\nimport Paper from '@mui/material/Paper';\nimport Typography from '@mui/material/Typography';\nimport IconButton from '@mui/material/IconButton';\nimport Collapse from '@mui/material/Collapse';\nimport Divider from '@mui/material/Divider';\nimport Skeleton from '@mui/material/Skeleton';\nimport Button from '@mui/material/Button';\nimport { useBoolean } from '../../core/hooks/use-boolean.js';\nimport type {\n DashboardBlockProps,\n DashboardBlockContextValue,\n DashboardBlockHeaderProps,\n DashboardBlockContentProps,\n DashboardBlockFooterProps,\n} from './types.js';\n\n// =============================================================================\n// CONTEXT\n// =============================================================================\n\n/** Stable no-op for non-collapsible blocks */\nconst collapseNoop = () => {};\n\nconst DashboardBlockContext = createContext<DashboardBlockContextValue | null>(null);\n\n/**\n * Hook to access dashboard block context.\n */\nexport function useDashboardBlockContext(): DashboardBlockContextValue {\n const context = useContext(DashboardBlockContext);\n if (!context) {\n throw new Error('useDashboardBlockContext must be used within DashboardBlock');\n }\n return context;\n}\n\n// =============================================================================\n// SIZE CONFIGS\n// =============================================================================\n\nconst sizeConfig = {\n small: {\n headerPx: 2,\n headerPy: 1.5,\n contentPx: 2,\n contentPy: 1.5,\n titleVariant: 'subtitle1' as const,\n subtitleVariant: 'caption' as const,\n },\n medium: {\n headerPx: 2.5,\n headerPy: 2,\n contentPx: 2.5,\n contentPy: 2,\n titleVariant: 'h6' as const,\n subtitleVariant: 'body2' as const,\n },\n large: {\n headerPx: 3,\n headerPy: 2.5,\n contentPx: 3,\n contentPy: 2.5,\n titleVariant: 'h5' as const,\n subtitleVariant: 'body1' as const,\n },\n};\n\n// =============================================================================\n// SUB-COMPONENTS\n// =============================================================================\n\n/**\n * Dashboard block header component.\n */\nexport function DashboardBlockHeader({ title, subtitle, icon, actions, sx }: DashboardBlockHeaderProps): ReactNode {\n const { collapsed, toggleCollapse, variant, size } = useDashboardBlockContext();\n const config = sizeConfig[size];\n\n return (\n <Box\n data-testid=\"prism-dashboard-block-header\"\n sx={[\n {\n display: 'flex',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n gap: 2,\n px: config.headerPx,\n py: config.headerPy,\n },\n ...(Array.isArray(sx) ? sx : [sx]),\n ]}\n >\n <Box sx={{ display: 'flex', alignItems: 'flex-start', gap: 1.5, flex: 1, minWidth: 0 }}>\n {icon && (\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n mt: 0.25,\n color: 'primary.main',\n }}\n >\n {icon}\n </Box>\n )}\n <Box sx={{ flex: 1, minWidth: 0 }}>\n <Typography variant={config.titleVariant} component=\"h3\" sx={{ fontWeight: 600, lineHeight: 1.4 }} noWrap>\n {title}\n </Typography>\n {subtitle && (\n <Typography variant={config.subtitleVariant} color=\"text.secondary\" sx={{ mt: 0.25 }}>\n {subtitle}\n </Typography>\n )}\n </Box>\n </Box>\n\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5, flexShrink: 0 }}>\n {actions}\n {collapsed !== undefined && (\n <IconButton\n size=\"small\"\n onClick={toggleCollapse}\n aria-expanded={!collapsed}\n aria-label={collapsed ? 'Expand block' : 'Collapse block'}\n data-testid=\"prism-dashboard-block-collapse\"\n >\n <ChevronIcon direction={collapsed ? 'down' : 'up'} />\n </IconButton>\n )}\n </Box>\n </Box>\n );\n}\n\n/**\n * Dashboard block content component.\n */\nexport function DashboardBlockContent({ children, disablePadding = false, sx }: DashboardBlockContentProps): ReactNode {\n const { collapsed, loading, error, size } = useDashboardBlockContext();\n const config = sizeConfig[size];\n\n return (\n <Collapse in={!collapsed} timeout=\"auto\">\n <Box\n data-testid=\"prism-dashboard-block-content\"\n sx={[\n {\n ...(!disablePadding && {\n px: config.contentPx,\n py: config.contentPy,\n }),\n },\n ...(Array.isArray(sx) ? sx : [sx]),\n ]}\n >\n {children}\n </Box>\n </Collapse>\n );\n}\n\n/**\n * Dashboard block footer component.\n */\nexport function DashboardBlockFooter({ children, divider = true, sx }: DashboardBlockFooterProps): ReactNode {\n const { collapsed, size } = useDashboardBlockContext();\n const config = sizeConfig[size];\n\n if (collapsed) return null;\n\n return (\n <>\n {divider && <Divider />}\n <Box\n data-testid=\"prism-dashboard-block-footer\"\n sx={[\n {\n px: config.contentPx,\n py: 1.5,\n },\n ...(Array.isArray(sx) ? sx : [sx]),\n ]}\n >\n {children}\n </Box>\n </>\n );\n}\n\n// =============================================================================\n// LOADING & ERROR STATES\n// =============================================================================\n\ninterface LoadingStateProps {\n rows?: number;\n size: 'small' | 'medium' | 'large';\n}\n\nfunction LoadingState({ rows = 3, size }: LoadingStateProps): ReactNode {\n const config = sizeConfig[size];\n return (\n <Box sx={{ px: config.contentPx, py: config.contentPy }}>\n {Array.from({ length: rows }).map((_, i) => (\n <Skeleton key={i} variant=\"text\" animation=\"wave\" sx={{ height: 20, mb: 1 }} />\n ))}\n </Box>\n );\n}\n\ninterface ErrorStateProps {\n message?: string;\n onRetry?: () => void;\n size: 'small' | 'medium' | 'large';\n}\n\nfunction ErrorState({ message = 'Failed to load data', onRetry, size }: ErrorStateProps): ReactNode {\n const config = sizeConfig[size];\n return (\n <Box\n sx={{\n px: config.contentPx,\n py: config.contentPy,\n textAlign: 'center',\n }}\n >\n <Typography color=\"error\" variant=\"body2\" sx={{ mb: onRetry ? 1.5 : 0 }}>\n {message}\n </Typography>\n {onRetry && (\n <Button size=\"small\" onClick={onRetry}>\n Retry\n </Button>\n )}\n </Box>\n );\n}\n\n// =============================================================================\n// MAIN COMPONENT\n// =============================================================================\n\n/**\n * Dashboard Block - Reusable dashboard widget/card.\n *\n * Features:\n * - Header with title, subtitle, icon, and actions\n * - Content area with optional padding\n * - Footer slot with optional divider\n * - Loading and error states\n * - Collapsible behavior (controlled or uncontrolled)\n * - Three size presets (small, medium, large)\n * - Three variants (default, outlined, filled)\n *\n * @example\n * ```tsx\n * <DashboardBlock\n * title=\"Revenue Overview\"\n * subtitle=\"Last 30 days\"\n * icon={<BarChartIcon />}\n * actions={<IconButton><MoreIcon /></IconButton>}\n * collapsible\n * >\n * <RevenueChart />\n * </DashboardBlock>\n * ```\n */\nexport function DashboardBlock({\n title,\n subtitle,\n icon,\n actions,\n children,\n footer,\n variant = 'default',\n size = 'medium',\n loading = false,\n loadingConfig,\n error = false,\n errorConfig,\n collapsible = false,\n defaultCollapsed = false,\n collapsed: controlledCollapsed,\n onCollapseChange,\n disablePadding = false,\n footerDivider = true,\n sx,\n slotProps,\n}: DashboardBlockProps): ReactNode {\n // Collapse state (controlled or uncontrolled)\n const uncontrolledCollapse = useBoolean(defaultCollapsed);\n const isControlled = controlledCollapsed !== undefined;\n const collapsed = isControlled ? controlledCollapsed : uncontrolledCollapse.value;\n\n const handleToggleCollapse = useCallback(() => {\n if (isControlled) {\n onCollapseChange?.(!controlledCollapsed);\n } else {\n uncontrolledCollapse.onToggle();\n }\n }, [isControlled, controlledCollapsed, onCollapseChange, uncontrolledCollapse]);\n\n const handleSetCollapsed = useCallback(\n (value: boolean) => {\n if (isControlled) {\n onCollapseChange?.(value);\n } else {\n uncontrolledCollapse.setValue(value);\n }\n },\n [isControlled, onCollapseChange, uncontrolledCollapse]\n );\n\n // Context value\n const contextValue = useMemo<DashboardBlockContextValue>(\n () => ({\n collapsed: collapsible ? collapsed : false,\n toggleCollapse: collapsible ? handleToggleCollapse : collapseNoop,\n setCollapsed: collapsible ? handleSetCollapsed : collapseNoop,\n loading,\n error,\n variant,\n size,\n }),\n [collapsed, collapsible, handleToggleCollapse, handleSetCollapsed, loading, error, variant, size]\n );\n\n // Paper variant based on block variant\n const paperVariant = variant === 'outlined' ? 'outlined' : 'elevation';\n const paperElevation = variant === 'default' ? 1 : 0;\n\n return (\n <DashboardBlockContext.Provider value={contextValue}>\n <Paper\n data-testid=\"prism-dashboard-block\"\n variant={paperVariant}\n elevation={paperElevation}\n sx={[\n {\n overflow: 'hidden',\n ...(variant === 'filled' && {\n bgcolor: 'action.hover',\n }),\n },\n ...(Array.isArray(sx) ? sx : [sx]),\n ]}\n >\n {/* Header */}\n {title && (\n <DashboardBlockHeader\n title={title}\n subtitle={subtitle}\n icon={icon}\n actions={actions}\n {...slotProps?.header}\n />\n )}\n\n {/* Divider after header */}\n {title && <Divider />}\n\n {/* Content */}\n <Box aria-live=\"polite\" aria-busy={loading}>\n {loading ? (\n (loadingConfig?.loadingComponent ?? <LoadingState rows={loadingConfig?.skeletonRows ?? 3} size={size} />)\n ) : error ? (\n (errorConfig?.errorComponent ?? (\n <ErrorState message={errorConfig?.message} onRetry={errorConfig?.onRetry} size={size} />\n ))\n ) : children ? (\n <DashboardBlockContent disablePadding={disablePadding} {...slotProps?.content}>\n {children}\n </DashboardBlockContent>\n ) : null}\n </Box>\n\n {/* Footer */}\n {footer && !loading && !error && (\n <DashboardBlockFooter divider={footerDivider} {...slotProps?.footer}>\n {footer}\n </DashboardBlockFooter>\n )}\n </Paper>\n </DashboardBlockContext.Provider>\n );\n}\n\n// =============================================================================\n// CHEVRON ICON\n// =============================================================================\n\ninterface ChevronIconProps {\n direction: 'up' | 'down';\n}\n\nfunction ChevronIcon({ direction }: ChevronIconProps): ReactNode {\n return (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n style={{\n transform: direction === 'up' ? 'rotate(180deg)' : undefined,\n transition: 'transform 0.2s ease',\n }}\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n );\n}\n","/**\n * Dashboard Block Hook\n *\n * Hook for managing dashboard block state and behavior.\n *\n * @module @omnitron-dev/prism/blocks/dashboard-block/use-dashboard-block\n */\n\n'use client';\n\nimport { useState, useCallback, useMemo } from 'react';\nimport type { DashboardBlockProps } from './types.js';\n\n/**\n * Dashboard block state.\n */\nexport interface DashboardBlockState {\n /** Current collapsed state */\n collapsed: boolean;\n /** Current loading state */\n loading: boolean;\n /** Current error state */\n error: boolean;\n /** Error message */\n errorMessage?: string;\n}\n\n/**\n * Dashboard block actions.\n */\nexport interface DashboardBlockActions {\n /** Toggle collapse state */\n toggleCollapse: () => void;\n /** Set collapsed state */\n setCollapsed: (collapsed: boolean) => void;\n /** Expand block */\n expand: () => void;\n /** Collapse block */\n collapse: () => void;\n /** Set loading state */\n setLoading: (loading: boolean) => void;\n /** Set error state */\n setError: (error: boolean, message?: string) => void;\n /** Clear error state */\n clearError: () => void;\n /** Reset to initial state */\n reset: () => void;\n}\n\n/**\n * Dashboard block hook return value.\n */\nexport interface UseDashboardBlockReturn {\n /** Current state */\n state: DashboardBlockState;\n /** Actions to modify state */\n actions: DashboardBlockActions;\n /** Props to spread on DashboardBlock */\n blockProps: Pick<DashboardBlockProps, 'collapsed' | 'onCollapseChange' | 'loading' | 'error' | 'errorConfig'>;\n}\n\n/**\n * Options for useDashboardBlock hook.\n */\nexport interface UseDashboardBlockOptions {\n /** Initial collapsed state */\n defaultCollapsed?: boolean;\n /** Initial loading state */\n defaultLoading?: boolean;\n /** Retry callback for error state */\n onRetry?: () => void;\n}\n\n/**\n * Hook for managing dashboard block state.\n *\n * Provides controlled state management for DashboardBlock component,\n * including collapse, loading, and error states.\n *\n * @example\n * ```tsx\n * function MyWidget() {\n * const { state, actions, blockProps } = useDashboardBlock({\n * defaultCollapsed: false,\n * onRetry: () => fetchData(),\n * });\n *\n * useEffect(() => {\n * actions.setLoading(true);\n * fetchData()\n * .then(() => actions.setLoading(false))\n * .catch((err) => actions.setError(true, err.message));\n * }, []);\n *\n * return (\n * <DashboardBlock title=\"My Widget\" {...blockProps}>\n * <Content />\n * </DashboardBlock>\n * );\n * }\n * ```\n */\nexport function useDashboardBlock(options: UseDashboardBlockOptions = {}): UseDashboardBlockReturn {\n const { defaultCollapsed = false, defaultLoading = false, onRetry } = options;\n\n const [state, setState] = useState<DashboardBlockState>({\n collapsed: defaultCollapsed,\n loading: defaultLoading,\n error: false,\n errorMessage: undefined,\n });\n\n const toggleCollapse = useCallback(() => {\n setState((prev) => ({ ...prev, collapsed: !prev.collapsed }));\n }, []);\n\n const setCollapsed = useCallback((collapsed: boolean) => {\n setState((prev) => ({ ...prev, collapsed }));\n }, []);\n\n const expand = useCallback(() => {\n setState((prev) => ({ ...prev, collapsed: false }));\n }, []);\n\n const collapse = useCallback(() => {\n setState((prev) => ({ ...prev, collapsed: true }));\n }, []);\n\n const setLoading = useCallback((loading: boolean) => {\n setState((prev) => ({ ...prev, loading }));\n }, []);\n\n const setError = useCallback((error: boolean, errorMessage?: string) => {\n setState((prev) => ({ ...prev, error, errorMessage, loading: false }));\n }, []);\n\n const clearError = useCallback(() => {\n setState((prev) => ({ ...prev, error: false, errorMessage: undefined }));\n }, []);\n\n const reset = useCallback(() => {\n setState({\n collapsed: defaultCollapsed,\n loading: defaultLoading,\n error: false,\n errorMessage: undefined,\n });\n }, [defaultCollapsed, defaultLoading]);\n\n const actions = useMemo<DashboardBlockActions>(\n () => ({\n toggleCollapse,\n setCollapsed,\n expand,\n collapse,\n setLoading,\n setError,\n clearError,\n reset,\n }),\n [toggleCollapse, setCollapsed, expand, collapse, setLoading, setError, clearError, reset]\n );\n\n const blockProps = useMemo(\n () => ({\n collapsed: state.collapsed,\n onCollapseChange: setCollapsed,\n loading: state.loading,\n error: state.error,\n errorConfig: state.error\n ? {\n message: state.errorMessage,\n onRetry,\n }\n : undefined,\n }),\n [state.collapsed, state.loading, state.error, state.errorMessage, setCollapsed, onRetry]\n );\n\n return {\n state,\n actions,\n blockProps,\n };\n}\n","'use client';\n\n/**\n * Auth Block Component\n *\n * Reusable authentication forms: login, register, forgot password, etc.\n * Integrates with React Hook Form and Zod for validation.\n *\n * @module @omnitron-dev/prism/blocks/auth-block\n */\n\nimport type { ReactNode } from 'react';\nimport { useState, useEffect, useCallback } from 'react';\nimport { useForm, FormProvider, type Resolver } from 'react-hook-form';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { z } from 'zod';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport Typography from '@mui/material/Typography';\nimport Link from '@mui/material/Link';\nimport Divider from '@mui/material/Divider';\nimport Alert from '@mui/material/Alert';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport InputAdornment from '@mui/material/InputAdornment';\nimport IconButton from '@mui/material/IconButton';\nimport { Field } from '../../components/field/index.js';\nimport type {\n LoginFormProps,\n LoginFormData,\n RegisterFormProps,\n RegisterFormData,\n ForgotPasswordFormProps,\n ForgotPasswordFormData,\n ResetPasswordFormProps,\n ResetPasswordFormData,\n VerifyCodeFormProps,\n VerifyCodeFormData,\n} from './types.js';\n\n// =============================================================================\n// ICONS (inline SVG to avoid dependencies)\n// =============================================================================\n\nfunction EyeIcon(): ReactNode {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n );\n}\n\nfunction EyeOffIcon(): ReactNode {\n return (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24\" />\n <line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\" />\n </svg>\n );\n}\n\n// =============================================================================\n// ERROR SANITIZATION\n// =============================================================================\n\n/**\n * Patterns that indicate a server-internal error message that should not\n * be shown to the user (e.g., stack traces, connection strings, file paths).\n */\nconst UNSAFE_ERROR_PATTERNS = [\n /at\\s+\\w+\\s*\\(/i, // stack trace frames\n /\\b(ECONNREFUSED|ETIMEDOUT|ENOTFOUND)\\b/, // Node.js system errors\n /\\b(SELECT|INSERT|UPDATE|DELETE)\\b.*\\bFROM\\b/i, // SQL fragments\n /\\/[a-z_-]+\\/[a-z_-]+\\//i, // Unix file paths\n /[A-Z]:\\\\[^\\s]+/, // Windows file paths\n /password|secret|token|key/i, // sensitive keywords in error context\n];\n\nconst DEFAULT_AUTH_ERROR = 'An error occurred. Please try again.';\n\n/**\n * Sanitize error messages to prevent information disclosure.\n * Passes through safe, user-facing messages while replacing\n * server-internal details with a generic fallback.\n */\nfunction sanitizeErrorMessage(err: unknown, fallback: string = DEFAULT_AUTH_ERROR): string {\n if (!(err instanceof Error)) return fallback;\n\n const message = err.message;\n\n // Reject messages that look like internal server errors\n for (const pattern of UNSAFE_ERROR_PATTERNS) {\n if (pattern.test(message)) return fallback;\n }\n\n // Reject overly long messages (likely stack traces or debug info)\n if (message.length > 200) return fallback;\n\n return message;\n}\n\n// =============================================================================\n// DEFAULT SCHEMAS\n// =============================================================================\n\nconst defaultLoginSchema = z.object({\n email: z.string().email('Please enter a valid email'),\n password: z.string().min(1, 'Password is required'),\n rememberMe: z.boolean().optional(),\n});\n\nconst createRegisterSchema = (minPasswordLength: number = 8, requireTerms: boolean = true) =>\n z\n .object({\n email: z.string().email('Please enter a valid email'),\n password: z.string().min(minPasswordLength, `Password must be at least ${minPasswordLength} characters`),\n confirmPassword: z.string(),\n firstName: z.string().optional(),\n lastName: z.string().optional(),\n acceptTerms: requireTerms\n ? z.boolean().refine((val) => val === true, { message: 'You must accept the terms' })\n : z.boolean().optional(),\n })\n .refine((data) => data.password === data.confirmPassword, {\n message: 'Passwords do not match',\n path: ['confirmPassword'],\n });\n\nconst defaultForgotPasswordSchema = z.object({\n email: z.string().email('Please enter a valid email'),\n});\n\nconst createResetPasswordSchema = (minPasswordLength: number = 8) =>\n z\n .object({\n password: z.string().min(minPasswordLength, `Password must be at least ${minPasswordLength} characters`),\n confirmPassword: z.string(),\n })\n .refine((data) => data.password === data.confirmPassword, {\n message: 'Passwords do not match',\n path: ['confirmPassword'],\n });\n\nconst createVerifyCodeSchema = (codeLength: number = 6) =>\n z.object({\n code: z.string().length(codeLength, `Code must be ${codeLength} digits`),\n });\n\n// =============================================================================\n// LOGIN FORM\n// =============================================================================\n\n/**\n * Login form component with email/password authentication.\n *\n * @example\n * ```tsx\n * <LoginForm\n * onSubmit={async (data) => {\n * await signIn(data.email, data.password);\n * }}\n * showRememberMe\n * showForgotPassword\n * onForgotPassword={() => navigate('/forgot-password')}\n * />\n * ```\n */\nexport function LoginForm({\n onSubmit,\n loading = false,\n disabled = false,\n showRememberMe = true,\n showForgotPassword = true,\n onForgotPassword,\n showSocialLogin = false,\n socialProviders = [],\n schema,\n labels = {},\n sx,\n slotProps,\n}: LoginFormProps): ReactNode {\n const [showPassword, setShowPassword] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const methods = useForm<LoginFormData>({\n resolver: zodResolver(schema ?? (defaultLoginSchema as any)) as Resolver<LoginFormData>,\n defaultValues: {\n email: '',\n password: '',\n rememberMe: false,\n },\n });\n\n const handleSubmit = methods.handleSubmit(async (data: LoginFormData) => {\n setError(null);\n try {\n await onSubmit(data);\n } catch (err) {\n setError(sanitizeErrorMessage(err));\n }\n });\n\n return (\n <FormProvider {...methods}>\n <Box\n component=\"form\"\n onSubmit={handleSubmit}\n sx={[{ display: 'flex', flexDirection: 'column', gap: 2.5 }, ...(Array.isArray(sx) ? sx : [sx])]}\n {...slotProps?.wrapper}\n >\n {error && (\n <Alert severity=\"error\" onClose={() => setError(null)}>\n {error}\n </Alert>\n )}\n\n <Field.Text\n name=\"email\"\n label={labels.email ?? 'Email'}\n type=\"email\"\n autoComplete=\"email\"\n disabled={disabled || loading}\n {...slotProps?.textField}\n />\n\n <Field.Text\n name=\"password\"\n label={labels.password ?? 'Password'}\n type={showPassword ? 'text' : 'password'}\n autoComplete=\"current-password\"\n disabled={disabled || loading}\n slotProps={{\n input: {\n endAdornment: (\n <InputAdornment position=\"end\">\n <IconButton\n onClick={() => setShowPassword(!showPassword)}\n edge=\"end\"\n aria-label={showPassword ? 'Hide password' : 'Show password'}\n >\n {showPassword ? <EyeOffIcon /> : <EyeIcon />}\n </IconButton>\n </InputAdornment>\n ),\n },\n }}\n {...slotProps?.textField}\n />\n\n {(showRememberMe || showForgotPassword) && (\n <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>\n {showRememberMe && (\n <Field.Checkbox\n name=\"rememberMe\"\n label={labels.rememberMe ?? 'Remember me'}\n disabled={disabled || loading}\n />\n )}\n {showForgotPassword && (\n <Link\n component=\"button\"\n type=\"button\"\n variant=\"body2\"\n onClick={onForgotPassword}\n sx={{ textDecoration: 'none' }}\n >\n {labels.forgotPassword ?? 'Forgot password?'}\n </Link>\n )}\n </Box>\n )}\n\n <Button\n type=\"submit\"\n variant=\"contained\"\n size=\"large\"\n fullWidth\n disabled={disabled || loading}\n {...slotProps?.submitButton}\n >\n {loading ? <CircularProgress size={24} color=\"inherit\" /> : (labels.submit ?? 'Sign In')}\n </Button>\n\n {showSocialLogin && socialProviders.length > 0 && (\n <>\n <Divider>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {labels.socialDivider ?? 'or continue with'}\n </Typography>\n </Divider>\n <Box sx={{ display: 'flex', gap: 1.5, justifyContent: 'center' }}>\n {socialProviders.map((provider) => (\n <IconButton\n key={provider.id}\n onClick={provider.onClick}\n disabled={disabled || loading}\n sx={{\n border: 1,\n borderColor: 'divider',\n borderRadius: 1,\n p: 1,\n }}\n aria-label={`Sign in with ${provider.name}`}\n >\n {provider.icon}\n </IconButton>\n ))}\n </Box>\n </>\n )}\n </Box>\n </FormProvider>\n );\n}\n\n// =============================================================================\n// REGISTER FORM\n// =============================================================================\n\n/**\n * Registration form component.\n *\n * @example\n * ```tsx\n * <RegisterForm\n * onSubmit={async (data) => {\n * await signUp(data);\n * }}\n * showNameFields\n * requireTerms\n * onTermsClick={() => window.open('/terms')}\n * />\n * ```\n */\nexport function RegisterForm({\n onSubmit,\n loading = false,\n disabled = false,\n showNameFields = false,\n requireTerms = true,\n onTermsClick,\n onPrivacyClick,\n minPasswordLength = 8,\n schema,\n labels = {},\n sx,\n slotProps,\n}: RegisterFormProps): ReactNode {\n const [showPassword, setShowPassword] = useState(false);\n const [showConfirmPassword, setShowConfirmPassword] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const methods = useForm<RegisterFormData>({\n resolver: zodResolver(\n schema ?? (createRegisterSchema(minPasswordLength, requireTerms) as any)\n ) as Resolver<RegisterFormData>,\n defaultValues: {\n email: '',\n password: '',\n confirmPassword: '',\n firstName: '',\n lastName: '',\n acceptTerms: false,\n },\n });\n\n const handleSubmit = methods.handleSubmit(async (data: RegisterFormData) => {\n setError(null);\n try {\n await onSubmit(data);\n } catch (err) {\n setError(sanitizeErrorMessage(err));\n }\n });\n\n return (\n <FormProvider {...methods}>\n <Box\n component=\"form\"\n onSubmit={handleSubmit}\n sx={[{ display: 'flex', flexDirection: 'column', gap: 2.5 }, ...(Array.isArray(sx) ? sx : [sx])]}\n {...slotProps?.wrapper}\n >\n {error && (\n <Alert severity=\"error\" onClose={() => setError(null)}>\n {error}\n </Alert>\n )}\n\n {showNameFields && (\n <Box sx={{ display: 'flex', gap: 2 }}>\n <Field.Text\n name=\"firstName\"\n label={labels.firstName ?? 'First Name'}\n autoComplete=\"given-name\"\n disabled={disabled || loading}\n {...slotProps?.textField}\n />\n <Field.Text\n name=\"lastName\"\n label={labels.lastName ?? 'Last Name'}\n autoComplete=\"family-name\"\n disabled={disabled || loading}\n {...slotProps?.textField}\n />\n </Box>\n )}\n\n <Field.Text\n name=\"email\"\n label={labels.email ?? 'Email'}\n type=\"email\"\n autoComplete=\"email\"\n disabled={disabled || loading}\n {...slotProps?.textField}\n />\n\n <Field.Text\n name=\"password\"\n label={labels.password ?? 'Password'}\n type={showPassword ? 'text' : 'password'}\n autoComplete=\"new-password\"\n disabled={disabled || loading}\n helperText={`At least ${minPasswordLength} characters`}\n slotProps={{\n input: {\n endAdornment: (\n <InputAdornment position=\"end\">\n <IconButton\n onClick={() => setShowPassword(!showPassword)}\n edge=\"end\"\n aria-label={showPassword ? 'Hide password' : 'Show password'}\n >\n {showPassword ? <EyeOffIcon /> : <EyeIcon />}\n </IconButton>\n </InputAdornment>\n ),\n },\n }}\n {...slotProps?.textField}\n />\n\n <Field.Text\n name=\"confirmPassword\"\n label={labels.confirmPassword ?? 'Confirm Password'}\n type={showConfirmPassword ? 'text' : 'password'}\n autoComplete=\"new-password\"\n disabled={disabled || loading}\n slotProps={{\n input: {\n endAdornment: (\n <InputAdornment position=\"end\">\n <IconButton\n onClick={() => setShowConfirmPassword(!showConfirmPassword)}\n edge=\"end\"\n aria-label={showConfirmPassword ? 'Hide password' : 'Show password'}\n >\n {showConfirmPassword ? <EyeOffIcon /> : <EyeIcon />}\n </IconButton>\n </InputAdornment>\n ),\n },\n }}\n {...slotProps?.textField}\n />\n\n {requireTerms && (\n <Field.Checkbox\n name=\"acceptTerms\"\n disabled={disabled || loading}\n label={\n <Typography variant=\"body2\" component=\"span\">\n {labels.acceptTerms ?? 'I agree to the '}\n <Link component=\"button\" type=\"button\" onClick={onTermsClick}>\n {labels.termsLink ?? 'Terms of Service'}\n </Link>\n {' and '}\n <Link component=\"button\" type=\"button\" onClick={onPrivacyClick}>\n {labels.privacyLink ?? 'Privacy Policy'}\n </Link>\n </Typography>\n }\n />\n )}\n\n <Button\n type=\"submit\"\n variant=\"contained\"\n size=\"large\"\n fullWidth\n disabled={disabled || loading}\n {...slotProps?.submitButton}\n >\n {loading ? <CircularProgress size={24} color=\"inherit\" /> : (labels.submit ?? 'Create Account')}\n </Button>\n </Box>\n </FormProvider>\n );\n}\n\n// =============================================================================\n// FORGOT PASSWORD FORM\n// =============================================================================\n\n/**\n * Forgot password form component.\n *\n * @example\n * ```tsx\n * <ForgotPasswordForm\n * onSubmit={async (data) => {\n * await sendPasswordResetEmail(data.email);\n * }}\n * onBackToLogin={() => navigate('/login')}\n * />\n * ```\n */\nexport function ForgotPasswordForm({\n onSubmit,\n loading = false,\n disabled = false,\n onBackToLogin,\n schema,\n labels = {},\n sx,\n slotProps,\n}: ForgotPasswordFormProps): ReactNode {\n const [error, setError] = useState<string | null>(null);\n const [success, setSuccess] = useState(false);\n\n const methods = useForm<ForgotPasswordFormData>({\n resolver: zodResolver(schema ?? (defaultForgotPasswordSchema as any)) as Resolver<ForgotPasswordFormData>,\n defaultValues: {\n email: '',\n },\n });\n\n const handleSubmit = methods.handleSubmit(async (data: ForgotPasswordFormData) => {\n setError(null);\n try {\n await onSubmit(data);\n setSuccess(true);\n } catch (err) {\n setError(sanitizeErrorMessage(err));\n }\n });\n\n if (success) {\n return (\n <Box sx={{ textAlign: 'center' }}>\n <Typography variant=\"h6\" gutterBottom>\n Check your email\n </Typography>\n <Typography variant=\"body2\" color=\"text.secondary\" sx={{ mb: 3 }}>\n We sent a password reset link to your email address.\n </Typography>\n {onBackToLogin && (\n <Button variant=\"text\" onClick={onBackToLogin}>\n {labels.backToLogin ?? 'Back to login'}\n </Button>\n )}\n </Box>\n );\n }\n\n return (\n <FormProvider {...methods}>\n <Box\n component=\"form\"\n onSubmit={handleSubmit}\n sx={[{ display: 'flex', flexDirection: 'column', gap: 2.5 }, ...(Array.isArray(sx) ? sx : [sx])]}\n {...slotProps?.wrapper}\n >\n <Box sx={{ textAlign: 'center', mb: 1 }}>\n <Typography variant=\"h6\" gutterBottom>\n {labels.title ?? 'Forgot password?'}\n </Typography>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {labels.description ?? \"Enter your email and we'll send you a reset link.\"}\n </Typography>\n </Box>\n\n {error && (\n <Alert severity=\"error\" onClose={() => setError(null)}>\n {error}\n </Alert>\n )}\n\n <Field.Text\n name=\"email\"\n label={labels.email ?? 'Email'}\n type=\"email\"\n autoComplete=\"email\"\n disabled={disabled || loading}\n {...slotProps?.textField}\n />\n\n <Button\n type=\"submit\"\n variant=\"contained\"\n size=\"large\"\n fullWidth\n disabled={disabled || loading}\n {...slotProps?.submitButton}\n >\n {loading ? <CircularProgress size={24} color=\"inherit\" /> : (labels.submit ?? 'Send Reset Link')}\n </Button>\n\n {onBackToLogin && (\n <Button variant=\"text\" onClick={onBackToLogin} disabled={loading}>\n {labels.backToLogin ?? 'Back to login'}\n </Button>\n )}\n </Box>\n </FormProvider>\n );\n}\n\n// =============================================================================\n// RESET PASSWORD FORM\n// =============================================================================\n\n/**\n * Reset password form component.\n *\n * @example\n * ```tsx\n * <ResetPasswordForm\n * onSubmit={async (data) => {\n * await resetPassword(token, data.password);\n * }}\n * />\n * ```\n */\nexport function ResetPasswordForm({\n onSubmit,\n loading = false,\n disabled = false,\n minPasswordLength = 8,\n schema,\n labels = {},\n sx,\n slotProps,\n}: ResetPasswordFormProps): ReactNode {\n const [showPassword, setShowPassword] = useState(false);\n const [showConfirmPassword, setShowConfirmPassword] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const methods = useForm<ResetPasswordFormData>({\n resolver: zodResolver(\n schema ?? (createResetPasswordSchema(minPasswordLength) as any)\n ) as Resolver<ResetPasswordFormData>,\n defaultValues: {\n password: '',\n confirmPassword: '',\n },\n });\n\n const handleSubmit = methods.handleSubmit(async (data: ResetPasswordFormData) => {\n setError(null);\n try {\n await onSubmit(data);\n } catch (err) {\n setError(sanitizeErrorMessage(err));\n }\n });\n\n return (\n <FormProvider {...methods}>\n <Box\n component=\"form\"\n onSubmit={handleSubmit}\n sx={[{ display: 'flex', flexDirection: 'column', gap: 2.5 }, ...(Array.isArray(sx) ? sx : [sx])]}\n {...slotProps?.wrapper}\n >\n <Box sx={{ textAlign: 'center', mb: 1 }}>\n <Typography variant=\"h6\" gutterBottom>\n {labels.title ?? 'Set new password'}\n </Typography>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {labels.description ?? 'Create a new password for your account.'}\n </Typography>\n </Box>\n\n {error && (\n <Alert severity=\"error\" onClose={() => setError(null)}>\n {error}\n </Alert>\n )}\n\n <Field.Text\n name=\"password\"\n label={labels.password ?? 'New Password'}\n type={showPassword ? 'text' : 'password'}\n autoComplete=\"new-password\"\n disabled={disabled || loading}\n helperText={`At least ${minPasswordLength} characters`}\n slotProps={{\n input: {\n endAdornment: (\n <InputAdornment position=\"end\">\n <IconButton\n onClick={() => setShowPassword(!showPassword)}\n edge=\"end\"\n aria-label={showPassword ? 'Hide password' : 'Show password'}\n >\n {showPassword ? <EyeOffIcon /> : <EyeIcon />}\n </IconButton>\n </InputAdornment>\n ),\n },\n }}\n {...slotProps?.textField}\n />\n\n <Field.Text\n name=\"confirmPassword\"\n label={labels.confirmPassword ?? 'Confirm Password'}\n type={showConfirmPassword ? 'text' : 'password'}\n autoComplete=\"new-password\"\n disabled={disabled || loading}\n slotProps={{\n input: {\n endAdornment: (\n <InputAdornment position=\"end\">\n <IconButton\n onClick={() => setShowConfirmPassword(!showConfirmPassword)}\n edge=\"end\"\n aria-label={showConfirmPassword ? 'Hide password' : 'Show password'}\n >\n {showConfirmPassword ? <EyeOffIcon /> : <EyeIcon />}\n </IconButton>\n </InputAdornment>\n ),\n },\n }}\n {...slotProps?.textField}\n />\n\n <Button\n type=\"submit\"\n variant=\"contained\"\n size=\"large\"\n fullWidth\n disabled={disabled || loading}\n {...slotProps?.submitButton}\n >\n {loading ? <CircularProgress size={24} color=\"inherit\" /> : (labels.submit ?? 'Reset Password')}\n </Button>\n </Box>\n </FormProvider>\n );\n}\n\n// =============================================================================\n// VERIFY CODE FORM\n// =============================================================================\n\n/**\n * Verify code form component (OTP verification).\n *\n * @example\n * ```tsx\n * <VerifyCodeForm\n * onSubmit={async (data) => {\n * await verifyCode(data.code);\n * }}\n * onResendCode={async () => {\n * await resendVerificationCode();\n * }}\n * resendCooldown={60}\n * />\n * ```\n */\nexport function VerifyCodeForm({\n onSubmit,\n loading = false,\n disabled = false,\n codeLength = 6,\n onResendCode,\n resendCooldown = 60,\n schema,\n labels = {},\n sx,\n slotProps,\n}: VerifyCodeFormProps): ReactNode {\n const [error, setError] = useState<string | null>(null);\n const [cooldown, setCooldown] = useState(0);\n\n const methods = useForm<VerifyCodeFormData>({\n resolver: zodResolver(schema ?? (createVerifyCodeSchema(codeLength) as any)) as Resolver<VerifyCodeFormData>,\n defaultValues: {\n code: '',\n },\n });\n\n // Cooldown timer\n useEffect(() => {\n if (cooldown > 0) {\n const timer = setTimeout(() => setCooldown(cooldown - 1), 1000);\n return () => clearTimeout(timer);\n }\n return undefined;\n }, [cooldown]);\n\n const handleResendCode = useCallback(async () => {\n if (cooldown > 0 || !onResendCode) return;\n try {\n await onResendCode();\n setCooldown(resendCooldown);\n } catch (err) {\n setError(sanitizeErrorMessage(err, 'Failed to resend code'));\n }\n }, [cooldown, onResendCode, resendCooldown]);\n\n const handleSubmit = methods.handleSubmit(async (data: VerifyCodeFormData) => {\n setError(null);\n try {\n await onSubmit(data);\n } catch (err) {\n setError(sanitizeErrorMessage(err));\n }\n });\n\n return (\n <FormProvider {...methods}>\n <Box\n component=\"form\"\n onSubmit={handleSubmit}\n sx={[\n { display: 'flex', flexDirection: 'column', gap: 2.5, alignItems: 'center' },\n ...(Array.isArray(sx) ? sx : [sx]),\n ]}\n {...slotProps?.wrapper}\n >\n <Box sx={{ textAlign: 'center', mb: 1 }}>\n <Typography variant=\"h6\" gutterBottom>\n {labels.title ?? 'Enter verification code'}\n </Typography>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {labels.description ?? 'We sent a verification code to your email.'}\n </Typography>\n </Box>\n\n {error && (\n <Alert severity=\"error\" onClose={() => setError(null)} sx={{ width: '100%' }}>\n {error}\n </Alert>\n )}\n\n <Field.Code name=\"code\" length={codeLength} autoFocus disabled={disabled || loading} />\n\n <Button\n type=\"submit\"\n variant=\"contained\"\n size=\"large\"\n fullWidth\n disabled={disabled || loading}\n {...slotProps?.submitButton}\n >\n {loading ? <CircularProgress size={24} color=\"inherit\" /> : (labels.submit ?? 'Verify')}\n </Button>\n\n {onResendCode && (\n <Box sx={{ textAlign: 'center' }}>\n {cooldown > 0 ? (\n <Typography variant=\"body2\" color=\"text.secondary\">\n {labels.resendIn ?? 'Resend code in'} {cooldown}s\n </Typography>\n ) : (\n <Link component=\"button\" type=\"button\" variant=\"body2\" onClick={handleResendCode} disabled={loading}>\n {labels.resendCode ?? \"Didn't receive the code? Resend\"}\n </Link>\n )}\n </Box>\n )}\n </Box>\n </FormProvider>\n );\n}\n\n// =============================================================================\n// EXPORTS\n// =============================================================================\n\n/**\n * AuthBlock namespace for auth-related forms.\n */\nexport const AuthBlock = {\n Login: LoginForm,\n Register: RegisterForm,\n ForgotPassword: ForgotPasswordForm,\n ResetPassword: ResetPasswordForm,\n VerifyCode: VerifyCodeForm,\n} as const;\n","'use client';\n\n/**\n * Route Guards\n *\n * Authentication and authorization guards for route protection.\n * Works with any router (React Router, Next.js, TanStack Router).\n *\n * @module @omnitron-dev/prism/blocks/auth-block\n */\n\nimport { type ReactNode, useEffect, useState } from 'react';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\n/**\n * User role type - string or enum value.\n */\nexport type Role = string;\n\n/**\n * Permission type - string identifier.\n */\nexport type Permission = string;\n\n/**\n * User with roles and permissions for authorization.\n */\nexport interface AuthUser {\n /** User ID */\n id: string | number;\n /** User roles */\n roles?: Role[];\n /** User permissions (fine-grained) */\n permissions?: Permission[];\n /** Email verified status */\n emailVerified?: boolean;\n /** Any additional properties */\n [key: string]: unknown;\n}\n\n/**\n * Auth state for guards.\n */\nexport interface AuthState {\n /** Whether user is authenticated */\n isAuthenticated: boolean;\n /** Whether auth state is still loading */\n isLoading: boolean;\n /** Current user (if authenticated) */\n user?: AuthUser | null;\n}\n\n/**\n * Props for useAuth hook.\n * Guards need this to check auth state.\n */\nexport interface UseAuth {\n (): AuthState;\n}\n\n// =============================================================================\n// AUTH GUARD\n// =============================================================================\n\n/**\n * AuthGuard props.\n */\nexport interface AuthGuardProps {\n /** Children to render when authorized */\n children: ReactNode;\n /** Hook to get auth state */\n useAuth: UseAuth;\n /** Component to show while loading */\n loadingComponent?: ReactNode;\n /** Called when not authenticated (e.g., redirect to login) */\n onUnauthenticated?: () => void;\n /** Component to show when not authenticated (if no redirect) */\n unauthenticatedComponent?: ReactNode;\n}\n\n/**\n * Guard that requires authentication.\n *\n * @example\n * ```tsx\n * import { AuthGuard } from '@omnitron-dev/prism/blocks';\n * import { useAuth } from '../hooks/use-auth';\n *\n * function ProtectedPage() {\n * return (\n * <AuthGuard\n * useAuth={useAuth}\n * onUnauthenticated={() => navigate('/login')}\n * loadingComponent={<LoadingScreen />}\n * >\n * <DashboardContent />\n * </AuthGuard>\n * );\n * }\n * ```\n */\nexport function AuthGuard({\n children,\n useAuth,\n loadingComponent = null,\n onUnauthenticated,\n unauthenticatedComponent = null,\n}: AuthGuardProps): ReactNode {\n const { isAuthenticated, isLoading } = useAuth();\n const [checked, setChecked] = useState(false);\n\n useEffect(() => {\n if (!isLoading) {\n if (!isAuthenticated) {\n onUnauthenticated?.();\n }\n setChecked(true);\n }\n }, [isAuthenticated, isLoading, onUnauthenticated]);\n\n if (isLoading || !checked) {\n return loadingComponent;\n }\n\n if (!isAuthenticated) {\n return unauthenticatedComponent;\n }\n\n return children;\n}\n\n// =============================================================================\n// GUEST GUARD\n// =============================================================================\n\n/**\n * GuestGuard props.\n */\nexport interface GuestGuardProps {\n /** Children to render when not authenticated */\n children: ReactNode;\n /** Hook to get auth state */\n useAuth: UseAuth;\n /** Component to show while loading */\n loadingComponent?: ReactNode;\n /** Called when authenticated (e.g., redirect to dashboard) */\n onAuthenticated?: () => void;\n /** Component to show when authenticated (if no redirect) */\n authenticatedComponent?: ReactNode;\n}\n\n/**\n * Guard that requires NO authentication.\n * Use for login, register, forgot password pages.\n *\n * @example\n * ```tsx\n * import { GuestGuard } from '@omnitron-dev/prism/blocks';\n * import { useAuth } from '../hooks/use-auth';\n *\n * function LoginPage() {\n * return (\n * <GuestGuard\n * useAuth={useAuth}\n * onAuthenticated={() => navigate('/dashboard')}\n * loadingComponent={<LoadingScreen />}\n * >\n * <LoginForm />\n * </GuestGuard>\n * );\n * }\n * ```\n */\nexport function GuestGuard({\n children,\n useAuth,\n loadingComponent = null,\n onAuthenticated,\n authenticatedComponent = null,\n}: GuestGuardProps): ReactNode {\n const { isAuthenticated, isLoading } = useAuth();\n const [checked, setChecked] = useState(false);\n\n useEffect(() => {\n if (!isLoading) {\n if (isAuthenticated) {\n onAuthenticated?.();\n }\n setChecked(true);\n }\n }, [isAuthenticated, isLoading, onAuthenticated]);\n\n if (isLoading || !checked) {\n return loadingComponent;\n }\n\n if (isAuthenticated) {\n return authenticatedComponent;\n }\n\n return children;\n}\n\n// =============================================================================\n// ROLE-BASED GUARD\n// =============================================================================\n\n/**\n * RoleBasedGuard props.\n */\nexport interface RoleBasedGuardProps {\n /** Children to render when authorized */\n children: ReactNode;\n /** Hook to get auth state */\n useAuth: UseAuth;\n /** Required roles (user must have at least one) */\n roles?: Role[];\n /** Required permissions (user must have ALL) */\n permissions?: Permission[];\n /** Require email verification */\n requireEmailVerified?: boolean;\n /** Match strategy for roles: 'any' (default) or 'all' */\n roleMatchStrategy?: 'any' | 'all';\n /** Component to show while loading */\n loadingComponent?: ReactNode;\n /** Called when access denied */\n onAccessDenied?: (reason: AccessDeniedReason) => void;\n /** Component to show when access denied */\n accessDeniedComponent?: ReactNode;\n}\n\n/**\n * Reason for access denial.\n */\nexport type AccessDeniedReason = 'not_authenticated' | 'missing_role' | 'missing_permission' | 'email_not_verified';\n\n/**\n * Guard for role/permission-based access control.\n *\n * @example\n * ```tsx\n * import { RoleBasedGuard } from '@omnitron-dev/prism/blocks';\n * import { useAuth } from '../hooks/use-auth';\n *\n * // Require admin role\n * function AdminPage() {\n * return (\n * <RoleBasedGuard\n * useAuth={useAuth}\n * roles={['admin']}\n * onAccessDenied={() => navigate('/403')}\n * >\n * <AdminPanel />\n * </RoleBasedGuard>\n * );\n * }\n *\n * // Require specific permission\n * function EditUserPage() {\n * return (\n * <RoleBasedGuard\n * useAuth={useAuth}\n * permissions={['users:write']}\n * accessDeniedComponent={<AccessDenied />}\n * >\n * <UserEditForm />\n * </RoleBasedGuard>\n * );\n * }\n *\n * // Require admin OR moderator role\n * function ModeratePage() {\n * return (\n * <RoleBasedGuard\n * useAuth={useAuth}\n * roles={['admin', 'moderator']}\n * roleMatchStrategy=\"any\"\n * >\n * <ModerateContent />\n * </RoleBasedGuard>\n * );\n * }\n *\n * // Require email verified\n * function VerifiedOnlyPage() {\n * return (\n * <RoleBasedGuard\n * useAuth={useAuth}\n * requireEmailVerified\n * onAccessDenied={(reason) => {\n * if (reason === 'email_not_verified') {\n * navigate('/verify-email');\n * }\n * }}\n * >\n * <VerifiedContent />\n * </RoleBasedGuard>\n * );\n * }\n * ```\n */\nexport function RoleBasedGuard({\n children,\n useAuth,\n roles = [],\n permissions = [],\n requireEmailVerified = false,\n roleMatchStrategy = 'any',\n loadingComponent = null,\n onAccessDenied,\n accessDeniedComponent = null,\n}: RoleBasedGuardProps): ReactNode {\n const { isAuthenticated, isLoading, user } = useAuth();\n const [checked, setChecked] = useState(false);\n const [accessGranted, setAccessGranted] = useState(false);\n\n useEffect(() => {\n if (!isLoading) {\n // Check authentication\n if (!isAuthenticated || !user) {\n onAccessDenied?.('not_authenticated');\n setAccessGranted(false);\n setChecked(true);\n return;\n }\n\n // Check email verification\n if (requireEmailVerified && !user.emailVerified) {\n onAccessDenied?.('email_not_verified');\n setAccessGranted(false);\n setChecked(true);\n return;\n }\n\n // Check roles\n if (roles.length > 0) {\n const userRoles = user.roles ?? [];\n const hasRequiredRole =\n roleMatchStrategy === 'all'\n ? roles.every((role) => userRoles.includes(role))\n : roles.some((role) => userRoles.includes(role));\n\n if (!hasRequiredRole) {\n onAccessDenied?.('missing_role');\n setAccessGranted(false);\n setChecked(true);\n return;\n }\n }\n\n // Check permissions (always ALL)\n if (permissions.length > 0) {\n const userPermissions = user.permissions ?? [];\n const hasAllPermissions = permissions.every((perm) => userPermissions.includes(perm));\n\n if (!hasAllPermissions) {\n onAccessDenied?.('missing_permission');\n setAccessGranted(false);\n setChecked(true);\n return;\n }\n }\n\n // Access granted\n setAccessGranted(true);\n setChecked(true);\n }\n }, [isAuthenticated, isLoading, user, roles, permissions, requireEmailVerified, roleMatchStrategy, onAccessDenied]);\n\n if (isLoading || !checked) {\n return loadingComponent;\n }\n\n if (!accessGranted) {\n return accessDeniedComponent;\n }\n\n return children;\n}\n\n// =============================================================================\n// UTILITY HOOKS\n// =============================================================================\n\n/**\n * Check if user has specific role(s).\n *\n * @example\n * ```tsx\n * const isAdmin = hasRole(user, 'admin');\n * const isModerator = hasRole(user, ['admin', 'moderator'], 'any');\n * const isSuperAdmin = hasRole(user, ['admin', 'superuser'], 'all');\n * ```\n */\nexport function hasRole(\n user: AuthUser | null | undefined,\n role: Role | Role[],\n strategy: 'any' | 'all' = 'any'\n): boolean {\n if (!user?.roles?.length) return false;\n\n const roles = Array.isArray(role) ? role : [role];\n\n return strategy === 'all' ? roles.every((r) => user.roles!.includes(r)) : roles.some((r) => user.roles!.includes(r));\n}\n\n/**\n * Check if user has specific permission(s).\n *\n * @example\n * ```tsx\n * const canEdit = hasPermission(user, 'users:write');\n * const canManage = hasPermission(user, ['users:read', 'users:write'], 'all');\n * ```\n */\nexport function hasPermission(\n user: AuthUser | null | undefined,\n permission: Permission | Permission[],\n strategy: 'any' | 'all' = 'all'\n): boolean {\n if (!user?.permissions?.length) return false;\n\n const permissions = Array.isArray(permission) ? permission : [permission];\n\n return strategy === 'all'\n ? permissions.every((p) => user.permissions!.includes(p))\n : permissions.some((p) => user.permissions!.includes(p));\n}\n\n/**\n * Create a conditional render helper based on roles/permissions.\n *\n * @example\n * ```tsx\n * const { canRender } = useConditionalRender(user);\n *\n * return (\n * <div>\n * {canRender({ roles: ['admin'] }) && <AdminPanel />}\n * {canRender({ permissions: ['users:write'] }) && <EditButton />}\n * </div>\n * );\n * ```\n */\nexport function createConditionalRender(user: AuthUser | null | undefined) {\n return {\n canRender: (options: {\n roles?: Role[];\n permissions?: Permission[];\n roleMatchStrategy?: 'any' | 'all';\n }): boolean => {\n const { roles = [], permissions = [], roleMatchStrategy = 'any' } = options;\n\n if (roles.length > 0 && !hasRole(user, roles, roleMatchStrategy)) {\n return false;\n }\n\n if (permissions.length > 0 && !hasPermission(user, permissions, 'all')) {\n return false;\n }\n\n return true;\n },\n };\n}\n","/**\n * DataGrid Block Component\n *\n * Advanced data table block with toolbar, pagination, sorting, filtering,\n * row actions, and server-side data support.\n *\n * @module @omnitron-dev/prism/blocks/data-grid-block\n */\n\n'use client';\n\nimport {\n type ReactNode,\n type MouseEvent,\n createContext,\n useContext,\n useMemo,\n useState,\n useCallback,\n useRef,\n useEffect,\n} from 'react';\nimport Box from '@mui/material/Box';\nimport Paper from '@mui/material/Paper';\nimport Typography from '@mui/material/Typography';\nimport Button from '@mui/material/Button';\nimport IconButton from '@mui/material/IconButton';\nimport Menu from '@mui/material/Menu';\nimport MenuItem from '@mui/material/MenuItem';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport ListItemText from '@mui/material/ListItemText';\nimport Divider from '@mui/material/Divider';\nimport Tooltip from '@mui/material/Tooltip';\nimport { SearchInput } from '../../components/search-input/search-input.js';\nimport LinearProgress from '@mui/material/LinearProgress';\nimport {\n DataGrid,\n type GridColDef,\n type GridRenderCellParams,\n type GridPaginationModel,\n type GridSortModel,\n type GridFilterModel,\n type GridRowSelectionModel,\n type GridCallbackDetails,\n type GridDensity,\n type GridRowId,\n GridToolbarContainer,\n GridToolbarColumnsButton,\n GridToolbarDensitySelector,\n GridToolbarExport,\n} from '@mui/x-data-grid';\nimport type {\n DataGridBlockProps,\n DataGridBlockContextValue,\n DataGridRowAction,\n UseDataGridBlockOptions,\n UseDataGridBlockReturn,\n DataGridFetchParams,\n} from './types.js';\n\n// =============================================================================\n// CONTEXT\n// =============================================================================\n\nconst DataGridBlockContext = createContext<DataGridBlockContextValue | null>(null);\n\n/**\n * Hook to access data grid block context.\n */\nexport function useDataGridBlockContext(): DataGridBlockContextValue {\n const context = useContext(DataGridBlockContext);\n if (!context) {\n throw new Error('useDataGridBlockContext must be used within DataGridBlock');\n }\n return context;\n}\n\n// =============================================================================\n// ICONS\n// =============================================================================\n\nfunction MoreVertIcon(): ReactNode {\n return (\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"1\" />\n <circle cx=\"12\" cy=\"5\" r=\"1\" />\n <circle cx=\"12\" cy=\"19\" r=\"1\" />\n </svg>\n );\n}\n\nfunction EmptyIcon(): ReactNode {\n return (\n <svg\n width=\"64\"\n height=\"64\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n style={{ opacity: 0.4 }}\n >\n <path d=\"M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z\" />\n <polyline points=\"13 2 13 9 20 9\" />\n <line x1=\"10\" y1=\"12\" x2=\"10\" y2=\"18\" />\n <line x1=\"14\" y1=\"12\" x2=\"14\" y2=\"18\" />\n <line x1=\"10\" y1=\"15\" x2=\"14\" y2=\"15\" />\n </svg>\n );\n}\n\n// =============================================================================\n// CUSTOM TOOLBAR\n// =============================================================================\n\ninterface CustomToolbarProps {\n quickFilter?: {\n enabled?: boolean;\n placeholder?: string;\n debounceMs?: number;\n };\n exportConfig?: {\n csv?: boolean;\n excel?: boolean;\n print?: boolean;\n };\n showColumnSelector?: boolean;\n showDensitySelector?: boolean;\n startContent?: ReactNode;\n endContent?: ReactNode;\n actions?: ReactNode;\n onQuickFilterChange?: (value: string) => void;\n}\n\nfunction CustomToolbar({\n quickFilter,\n exportConfig,\n showColumnSelector = true,\n showDensitySelector = true,\n startContent,\n endContent,\n actions,\n onQuickFilterChange,\n}: CustomToolbarProps): ReactNode {\n const [searchValue, setSearchValue] = useState('');\n const debounceRef = useRef<NodeJS.Timeout | null>(null);\n\n // Cleanup debounce timer on unmount\n useEffect(\n () => () => {\n if (debounceRef.current) clearTimeout(debounceRef.current);\n },\n []\n );\n\n const handleSearchChange = useCallback(\n (value: string) => {\n setSearchValue(value);\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n }\n debounceRef.current = setTimeout(() => {\n onQuickFilterChange?.(value);\n }, quickFilter?.debounceMs ?? 300);\n },\n [onQuickFilterChange, quickFilter?.debounceMs]\n );\n\n return (\n <GridToolbarContainer\n sx={{\n gap: 1.5,\n p: 2,\n borderBottom: 1,\n borderColor: 'divider',\n }}\n >\n {startContent}\n\n {quickFilter?.enabled !== false && (\n <SearchInput\n value={searchValue}\n onChange={handleSearchChange}\n placeholder={quickFilter?.placeholder ?? 'Search...'}\n fullWidth={false}\n minWidth={200}\n />\n )}\n\n <Box sx={{ flex: 1 }} />\n\n {showColumnSelector && <GridToolbarColumnsButton />}\n {showDensitySelector && <GridToolbarDensitySelector />}\n\n {(exportConfig?.csv !== false || exportConfig?.print !== false) && (\n <GridToolbarExport\n printOptions={exportConfig?.print === false ? { disableToolbarButton: true } : undefined}\n csvOptions={exportConfig?.csv === false ? { disableToolbarButton: true } : undefined}\n />\n )}\n\n {actions}\n {endContent}\n </GridToolbarContainer>\n );\n}\n\n// =============================================================================\n// ROW ACTIONS CELL\n// =============================================================================\n\ninterface RowActionsCellProps<R> {\n row: R;\n actions: DataGridRowAction<R>[];\n}\n\nfunction RowActionsCell<R extends Record<string, unknown>>({ row, actions }: RowActionsCellProps<R>): ReactNode {\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n const open = Boolean(anchorEl);\n\n const handleClick = useCallback((event: MouseEvent<HTMLElement>) => {\n event.stopPropagation();\n setAnchorEl(event.currentTarget);\n }, []);\n\n const handleClose = useCallback(() => {\n setAnchorEl(null);\n }, []);\n\n const handleAction = useCallback(\n (action: DataGridRowAction<R>, event: MouseEvent<HTMLElement>) => {\n setAnchorEl(null);\n action.onClick(row, event);\n },\n [row]\n );\n\n const visibleActions = actions.filter((action) => {\n if (typeof action.hidden === 'function') {\n return !action.hidden(row);\n }\n return !action.hidden;\n });\n\n if (visibleActions.length === 0) {\n return null;\n }\n\n // If only 1-2 actions, show inline buttons\n if (visibleActions.length <= 2) {\n return (\n <Box sx={{ display: 'flex', gap: 0.5 }}>\n {visibleActions.map((action) => {\n const isDisabled = typeof action.disabled === 'function' ? action.disabled(row) : action.disabled;\n\n return (\n <Tooltip key={action.key} title={action.label}>\n <span>\n <IconButton\n size=\"small\"\n color={action.color ?? 'default'}\n disabled={isDisabled}\n onClick={(e) => handleAction(action, e)}\n aria-label={action.label}\n >\n {action.icon ?? action.label.charAt(0)}\n </IconButton>\n </span>\n </Tooltip>\n );\n })}\n </Box>\n );\n }\n\n // More than 2 actions, show menu\n return (\n <>\n <IconButton\n size=\"small\"\n onClick={handleClick}\n aria-label=\"Row actions\"\n aria-controls={open ? 'row-actions-menu' : undefined}\n aria-haspopup=\"true\"\n aria-expanded={open ? 'true' : undefined}\n >\n <MoreVertIcon />\n </IconButton>\n <Menu\n id=\"row-actions-menu\"\n anchorEl={anchorEl}\n open={open}\n onClose={handleClose}\n onClick={(e) => e.stopPropagation()}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\n >\n {visibleActions.map((action, index) => {\n const isDisabled = typeof action.disabled === 'function' ? action.disabled(row) : action.disabled;\n\n return [\n <MenuItem key={action.key} disabled={isDisabled} onClick={(e) => handleAction(action, e)}>\n {action.icon && <ListItemIcon>{action.icon}</ListItemIcon>}\n <ListItemText primary={action.label} sx={{ color: action.color ? `${action.color}.main` : undefined }} />\n </MenuItem>,\n action.divider && index < visibleActions.length - 1 && <Divider key={`${action.key}-divider`} />,\n ];\n })}\n </Menu>\n </>\n );\n}\n\n// =============================================================================\n// EMPTY STATE\n// =============================================================================\n\ninterface EmptyStateProps {\n icon?: ReactNode;\n title?: string;\n description?: string;\n action?: {\n label: string;\n onClick: () => void;\n };\n component?: ReactNode;\n}\n\nfunction EmptyState({\n icon,\n title = 'No data',\n description = 'No records to display.',\n action,\n component,\n}: EmptyStateProps): ReactNode {\n if (component) {\n return <>{component}</>;\n }\n\n return (\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n py: 8,\n px: 3,\n textAlign: 'center',\n }}\n >\n <Box sx={{ mb: 2, color: 'text.disabled' }}>{icon ?? <EmptyIcon />}</Box>\n <Typography variant=\"h6\" gutterBottom>\n {title}\n </Typography>\n <Typography variant=\"body2\" color=\"text.secondary\" sx={{ mb: action ? 2 : 0 }}>\n {description}\n </Typography>\n {action && (\n <Button variant=\"contained\" size=\"small\" onClick={action.onClick}>\n {action.label}\n </Button>\n )}\n </Box>\n );\n}\n\n// =============================================================================\n// ERROR STATE\n// =============================================================================\n\ninterface ErrorStateProps {\n message?: string;\n onRetry?: () => void;\n}\n\nfunction ErrorState({ message = 'Failed to load data', onRetry }: ErrorStateProps): ReactNode {\n return (\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n py: 8,\n px: 3,\n textAlign: 'center',\n }}\n >\n <Typography color=\"error\" variant=\"body1\" gutterBottom>\n {message}\n </Typography>\n {onRetry && (\n <Button variant=\"outlined\" size=\"small\" onClick={onRetry} sx={{ mt: 1 }}>\n Retry\n </Button>\n )}\n </Box>\n );\n}\n\n// =============================================================================\n// MAIN COMPONENT\n// =============================================================================\n\n/**\n * DataGridBlock - Advanced data table with common patterns.\n *\n * Features:\n * - Custom toolbar with search, filters, export, and column visibility\n * - Row actions column (inline or dropdown menu)\n * - Server-side pagination, sorting, and filtering support\n * - Custom empty state\n * - Loading and error states\n * - Selection handling\n * - Density customization\n *\n * @example\n * ```tsx\n * <DataGridBlock\n * columns={[\n * { field: 'name', headerName: 'Name', flex: 1 },\n * { field: 'email', headerName: 'Email', flex: 1 },\n * { field: 'status', headerName: 'Status', width: 120 },\n * ]}\n * rows={users}\n * loading={isLoading}\n * rowActions={[\n * { key: 'edit', label: 'Edit', icon: <EditIcon />, onClick: handleEdit },\n * { key: 'delete', label: 'Delete', icon: <DeleteIcon />, color: 'error', onClick: handleDelete },\n * ]}\n * toolbar={{\n * quickFilter: { placeholder: 'Search users...' },\n * export: { csv: true },\n * }}\n * pagination={{\n * mode: 'server',\n * rowCount: totalCount,\n * }}\n * onPaginationChange={handlePaginationChange}\n * />\n * ```\n */\nexport function DataGridBlock<R extends Record<string, unknown> = Record<string, unknown>>({\n columns,\n rows,\n loading = false,\n error = false,\n errorMessage,\n onRetry,\n rowActions,\n rowActionsWidth = 80,\n toolbar,\n pagination,\n selection,\n empty,\n density: defaultDensity = 'standard',\n autoHeight = false,\n height = 500,\n hideFooter = false,\n rowHeight,\n getRowId,\n onRowClick,\n onRowDoubleClick,\n onSelectionChange,\n onPaginationChange,\n onSortChange,\n onFilterChange,\n paginationModel: controlledPaginationModel,\n sortModel: controlledSortModel,\n filterModel: controlledFilterModel,\n selectionModel: controlledSelectionModel,\n columnVisibilityModel,\n onColumnVisibilityChange,\n slots,\n slotProps,\n disableColumnMenu = false,\n disableColumnFilter = false,\n disableColumnSelector = false,\n disableRowSelectionOnClick = true,\n disableVirtualization = false,\n sx,\n}: DataGridBlockProps<R>): ReactNode {\n const [density, setDensity] = useState<GridDensity>(defaultDensity);\n const [internalPaginationModel, setInternalPaginationModel] = useState<GridPaginationModel>({\n page: 0,\n pageSize: pagination?.defaultPageSize ?? 25,\n });\n const [internalSortModel, setInternalSortModel] = useState<GridSortModel>([]);\n const [internalFilterModel, setInternalFilterModel] = useState<GridFilterModel>({ items: [] });\n const [internalSelectionModel, setInternalSelectionModel] = useState<GridRowSelectionModel>({\n type: 'include',\n ids: new Set<GridRowId>(),\n });\n const [quickFilterValue, setQuickFilterValue] = useState('');\n\n // Use controlled or internal state\n const paginationModel = controlledPaginationModel ?? internalPaginationModel;\n const sortModel = controlledSortModel ?? internalSortModel;\n const filterModel = controlledFilterModel ?? internalFilterModel;\n const selectionModelValue = controlledSelectionModel ?? internalSelectionModel;\n\n // Build columns with row actions\n const finalColumns = useMemo<GridColDef<R>[]>(() => {\n if (!rowActions || rowActions.length === 0) {\n return columns;\n }\n\n const actionsColumn: GridColDef<R> = {\n field: '__actions__',\n headerName: '',\n width: rowActionsWidth,\n sortable: false,\n filterable: false,\n disableColumnMenu: true,\n disableReorder: true,\n renderCell: (params: GridRenderCellParams<R>) => <RowActionsCell row={params.row} actions={rowActions} />,\n };\n\n return [...columns, actionsColumn];\n }, [columns, rowActions, rowActionsWidth]);\n\n // Handlers\n const handlePaginationChange = useCallback(\n (model: GridPaginationModel, details: GridCallbackDetails) => {\n if (!controlledPaginationModel) {\n setInternalPaginationModel(model);\n }\n onPaginationChange?.(model);\n },\n [controlledPaginationModel, onPaginationChange]\n );\n\n const handleSortChange = useCallback(\n (model: GridSortModel, details: GridCallbackDetails) => {\n if (!controlledSortModel) {\n setInternalSortModel(model);\n }\n onSortChange?.(model);\n },\n [controlledSortModel, onSortChange]\n );\n\n const handleFilterChange = useCallback(\n (model: GridFilterModel, details: GridCallbackDetails) => {\n if (!controlledFilterModel) {\n setInternalFilterModel(model);\n }\n onFilterChange?.(model);\n },\n [controlledFilterModel, onFilterChange]\n );\n\n const handleSelectionChange = useCallback(\n (model: GridRowSelectionModel, details: GridCallbackDetails) => {\n if (!controlledSelectionModel) {\n setInternalSelectionModel(model);\n }\n onSelectionChange?.(model);\n },\n [controlledSelectionModel, onSelectionChange]\n );\n\n // Context value\n const contextValue = useMemo<DataGridBlockContextValue>(\n () => ({\n loading,\n error,\n density,\n setDensity,\n rowCount: rows.length,\n selectedCount: selectionModelValue.ids.size,\n refresh: onRetry,\n }),\n [loading, error, density, rows.length, selectionModelValue, onRetry]\n );\n\n // Determine row count for pagination\n const rowCount = pagination?.mode === 'server' ? (pagination.rowCount ?? 0) : rows.length;\n\n // Custom toolbar slot\n const toolbarSlot = useMemo(() => {\n if (toolbar?.show === false) {\n return undefined;\n }\n\n return () => (\n <CustomToolbar\n quickFilter={toolbar?.quickFilter}\n exportConfig={toolbar?.export}\n showColumnSelector={toolbar?.columnVisibility?.enabled !== false}\n showDensitySelector={toolbar?.densitySelector !== false}\n startContent={toolbar?.startContent}\n endContent={toolbar?.endContent}\n actions={toolbar?.actions}\n onQuickFilterChange={setQuickFilterValue}\n />\n );\n }, [toolbar]);\n\n // No data overlay\n const noRowsOverlay = useMemo(() => {\n if (error) {\n return () => <ErrorState message={errorMessage} onRetry={onRetry} />;\n }\n return () => (\n <EmptyState\n icon={empty?.icon}\n title={empty?.title}\n description={empty?.description}\n action={empty?.action}\n component={empty?.component}\n />\n );\n }, [error, errorMessage, onRetry, empty]);\n\n return (\n <DataGridBlockContext.Provider value={contextValue}>\n <Paper\n data-testid=\"prism-data-grid-block\"\n variant=\"outlined\"\n sx={[\n {\n width: '100%',\n overflow: 'hidden',\n },\n ...(Array.isArray(sx) ? sx : [sx]),\n ]}\n >\n <Box sx={{ width: '100%', height: autoHeight ? 'auto' : height }}>\n <DataGrid\n rows={rows}\n columns={finalColumns}\n loading={loading}\n density={density}\n autoHeight={autoHeight}\n rowHeight={rowHeight}\n getRowId={getRowId}\n onRowClick={onRowClick}\n onRowDoubleClick={onRowDoubleClick}\n // Pagination\n paginationMode={pagination?.mode ?? 'client'}\n paginationModel={paginationModel}\n onPaginationModelChange={handlePaginationChange}\n pageSizeOptions={pagination?.pageSizeOptions ?? [10, 25, 50, 100]}\n rowCount={rowCount}\n // Sorting\n sortingMode={pagination?.mode === 'server' ? 'server' : 'client'}\n sortModel={sortModel}\n onSortModelChange={handleSortChange}\n // Filtering\n filterMode={pagination?.mode === 'server' ? 'server' : 'client'}\n filterModel={filterModel}\n onFilterModelChange={handleFilterChange}\n // Selection\n checkboxSelection={selection?.checkboxSelection ?? false}\n rowSelectionModel={selectionModelValue}\n onRowSelectionModelChange={handleSelectionChange}\n disableRowSelectionOnClick={selection?.disableSelectionOnClick ?? disableRowSelectionOnClick}\n disableMultipleRowSelection={selection?.mode === 'single'}\n keepNonExistentRowsSelected={selection?.keepNonExistentRowsSelected}\n // Column visibility\n columnVisibilityModel={columnVisibilityModel}\n onColumnVisibilityModelChange={onColumnVisibilityChange}\n // Features\n disableColumnMenu={disableColumnMenu}\n disableColumnFilter={disableColumnFilter}\n disableColumnSelector={disableColumnSelector}\n disableVirtualization={disableVirtualization}\n hideFooter={hideFooter || pagination?.hide}\n // Slots\n slots={{\n toolbar: toolbarSlot,\n noRowsOverlay,\n loadingOverlay: () => <LinearProgress sx={{ position: 'absolute', top: 0, left: 0, right: 0 }} />,\n ...slots,\n }}\n slotProps={slotProps}\n sx={{\n border: 0,\n '& .MuiDataGrid-columnHeaders': {\n bgcolor: 'action.hover',\n },\n '& .MuiDataGrid-cell:focus': {\n outline: 'none',\n },\n '& .MuiDataGrid-row:hover': {\n bgcolor: 'action.hover',\n },\n }}\n />\n </Box>\n </Paper>\n </DataGridBlockContext.Provider>\n );\n}\n\n// =============================================================================\n// USE DATA GRID BLOCK HOOK\n// =============================================================================\n\n/**\n * Hook for managing DataGridBlock with server-side data fetching.\n *\n * @example\n * ```tsx\n * const { rows, loading, error, total, paginationModel, onPaginationChange, refresh } =\n * useDataGridBlock({\n * fetcher: async ({ page, pageSize, sortModel, filterModel }) => {\n * const response = await api.getUsers({ page, pageSize, sort: sortModel[0] });\n * return { rows: response.data, total: response.total };\n * },\n * });\n *\n * return (\n * <DataGridBlock\n * columns={columns}\n * rows={rows}\n * loading={loading}\n * error={!!error}\n * pagination={{ mode: 'server', rowCount: total }}\n * paginationModel={paginationModel}\n * onPaginationChange={onPaginationChange}\n * />\n * );\n * ```\n */\nexport function useDataGridBlock<R extends Record<string, unknown> = Record<string, unknown>>(\n options: UseDataGridBlockOptions<R>\n): UseDataGridBlockReturn<R> {\n const {\n fetcher,\n initialPageSize = 25,\n initialSortModel = [],\n initialFilterModel = { items: [] },\n autoFetch = true,\n keepPreviousData = true,\n } = options;\n\n const [rows, setRows] = useState<R[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [total, setTotal] = useState(0);\n\n const [paginationModel, setPaginationModel] = useState<GridPaginationModel>({\n page: 0,\n pageSize: initialPageSize,\n });\n const [sortModel, setSortModel] = useState<GridSortModel>(initialSortModel);\n const [filterModel, setFilterModel] = useState<GridFilterModel>(initialFilterModel);\n\n const isMountedRef = useRef(true);\n const abortControllerRef = useRef<AbortController | null>(null);\n\n const fetchData = useCallback(\n async (params: DataGridFetchParams) => {\n // Cancel previous request\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n abortControllerRef.current = new AbortController();\n\n setLoading(true);\n setError(null);\n\n try {\n const result = await fetcher(params);\n if (isMountedRef.current) {\n setRows(result.rows);\n setTotal(result.total);\n }\n } catch (err) {\n if (isMountedRef.current && err instanceof Error && err.name !== 'AbortError') {\n setError(err);\n if (!keepPreviousData) {\n setRows([]);\n }\n }\n } finally {\n if (isMountedRef.current) {\n setLoading(false);\n }\n }\n },\n [fetcher, keepPreviousData]\n );\n\n const refresh = useCallback(() => {\n fetchData({\n page: paginationModel.page,\n pageSize: paginationModel.pageSize,\n sortModel,\n filterModel,\n });\n }, [fetchData, paginationModel, sortModel, filterModel]);\n\n const reset = useCallback(() => {\n setPaginationModel({ page: 0, pageSize: initialPageSize });\n setSortModel(initialSortModel);\n setFilterModel(initialFilterModel);\n }, [initialPageSize, initialSortModel, initialFilterModel]);\n\n // Fetch on params change\n useEffect(() => {\n if (autoFetch) {\n fetchData({\n page: paginationModel.page,\n pageSize: paginationModel.pageSize,\n sortModel,\n filterModel,\n });\n }\n }, [fetchData, paginationModel, sortModel, filterModel, autoFetch]);\n\n // Cleanup on unmount\n useEffect(\n () => () => {\n isMountedRef.current = false;\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n },\n []\n );\n\n const handlePaginationChange = useCallback((model: GridPaginationModel, _details: GridCallbackDetails) => {\n setPaginationModel(model);\n }, []);\n\n const handleSortChange = useCallback((model: GridSortModel, _details: GridCallbackDetails) => {\n setSortModel(model);\n // Reset to first page on sort change\n setPaginationModel((prev) => ({ ...prev, page: 0 }));\n }, []);\n\n const handleFilterChange = useCallback((model: GridFilterModel, _details: GridCallbackDetails) => {\n setFilterModel(model);\n // Reset to first page on filter change\n setPaginationModel((prev) => ({ ...prev, page: 0 }));\n }, []);\n\n return {\n rows,\n loading,\n error,\n total,\n paginationModel,\n sortModel,\n filterModel,\n onPaginationChange: handlePaginationChange,\n onSortChange: handleSortChange,\n onFilterChange: handleFilterChange,\n refresh,\n reset,\n };\n}\n"]}
@@ -0,0 +1,37 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __esm = (fn, res) => function __init() {
8
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
9
+ };
10
+ var __commonJS = (cb, mod) => function __require() {
11
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
12
+ };
13
+ var __export = (target, all) => {
14
+ for (var name in all)
15
+ __defProp(target, name, { get: all[name], enumerable: true });
16
+ };
17
+ var __copyProps = (to, from, except, desc) => {
18
+ if (from && typeof from === "object" || typeof from === "function") {
19
+ for (let key of __getOwnPropNames(from))
20
+ if (!__hasOwnProp.call(to, key) && key !== except)
21
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
22
+ }
23
+ return to;
24
+ };
25
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
26
+ // If the importer is in node compatibility mode or this is not an ESM
27
+ // file that has been converted to a CommonJS file using a Babel-
28
+ // compatible transform (i.e. "__esModule" has not been set), then set
29
+ // "default" to the CommonJS "module.exports" for node compatibility.
30
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
31
+ mod
32
+ ));
33
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
34
+
35
+ export { __commonJS, __esm, __export, __toCommonJS, __toESM };
36
+ //# sourceMappingURL=chunk-77KIJLPP.js.map
37
+ //# sourceMappingURL=chunk-77KIJLPP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-77KIJLPP.js"}