@judo/feedback 0.1.0

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 (85) hide show
  1. package/LICENSE +277 -0
  2. package/README.md +172 -0
  3. package/dist/dialogs/components/alert-dialog.d.ts +11 -0
  4. package/dist/dialogs/components/alert-dialog.d.ts.map +1 -0
  5. package/dist/dialogs/components/confirm-dialog.d.ts +12 -0
  6. package/dist/dialogs/components/confirm-dialog.d.ts.map +1 -0
  7. package/dist/dialogs/components/dialog-host.d.ts +10 -0
  8. package/dist/dialogs/components/dialog-host.d.ts.map +1 -0
  9. package/dist/dialogs/components/index.d.ts +4 -0
  10. package/dist/dialogs/components/index.d.ts.map +1 -0
  11. package/dist/dialogs/hooks/index.d.ts +2 -0
  12. package/dist/dialogs/hooks/index.d.ts.map +1 -0
  13. package/dist/dialogs/hooks/use-confirmation.d.ts +9 -0
  14. package/dist/dialogs/hooks/use-confirmation.d.ts.map +1 -0
  15. package/dist/dialogs/index.d.ts +11 -0
  16. package/dist/dialogs/index.d.ts.map +1 -0
  17. package/dist/dialogs/provider/dialog-provider.d.ts +20 -0
  18. package/dist/dialogs/provider/dialog-provider.d.ts.map +1 -0
  19. package/dist/dialogs/provider/index.d.ts +2 -0
  20. package/dist/dialogs/provider/index.d.ts.map +1 -0
  21. package/dist/dialogs/service/dialog-service-impl.d.ts +18 -0
  22. package/dist/dialogs/service/dialog-service-impl.d.ts.map +1 -0
  23. package/dist/dialogs/service/dialog-service.d.ts +71 -0
  24. package/dist/dialogs/service/dialog-service.d.ts.map +1 -0
  25. package/dist/dialogs/service/index.d.ts +3 -0
  26. package/dist/dialogs/service/index.d.ts.map +1 -0
  27. package/dist/index.d.ts +11 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +497 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/loading/components/container-loading.d.ts +13 -0
  32. package/dist/loading/components/container-loading.d.ts.map +1 -0
  33. package/dist/loading/components/global-loading-overlay.d.ts +9 -0
  34. package/dist/loading/components/global-loading-overlay.d.ts.map +1 -0
  35. package/dist/loading/components/index.d.ts +4 -0
  36. package/dist/loading/components/index.d.ts.map +1 -0
  37. package/dist/loading/components/skeletons/card-skeleton.d.ts +5 -0
  38. package/dist/loading/components/skeletons/card-skeleton.d.ts.map +1 -0
  39. package/dist/loading/components/skeletons/form-skeleton.d.ts +9 -0
  40. package/dist/loading/components/skeletons/form-skeleton.d.ts.map +1 -0
  41. package/dist/loading/components/skeletons/index.d.ts +6 -0
  42. package/dist/loading/components/skeletons/index.d.ts.map +1 -0
  43. package/dist/loading/components/skeletons/link-skeleton.d.ts +5 -0
  44. package/dist/loading/components/skeletons/link-skeleton.d.ts.map +1 -0
  45. package/dist/loading/components/skeletons/table-skeleton.d.ts +10 -0
  46. package/dist/loading/components/skeletons/table-skeleton.d.ts.map +1 -0
  47. package/dist/loading/components/skeletons/text-input-skeleton.d.ts +8 -0
  48. package/dist/loading/components/skeletons/text-input-skeleton.d.ts.map +1 -0
  49. package/dist/loading/hooks/index.d.ts +3 -0
  50. package/dist/loading/hooks/index.d.ts.map +1 -0
  51. package/dist/loading/hooks/use-component-loading.d.ts +10 -0
  52. package/dist/loading/hooks/use-component-loading.d.ts.map +1 -0
  53. package/dist/loading/hooks/use-loading-state.d.ts +6 -0
  54. package/dist/loading/hooks/use-loading-state.d.ts.map +1 -0
  55. package/dist/loading/index.d.ts +11 -0
  56. package/dist/loading/index.d.ts.map +1 -0
  57. package/dist/loading/provider/index.d.ts +2 -0
  58. package/dist/loading/provider/index.d.ts.map +1 -0
  59. package/dist/loading/provider/loading-provider.d.ts +22 -0
  60. package/dist/loading/provider/loading-provider.d.ts.map +1 -0
  61. package/dist/loading/service/index.d.ts +3 -0
  62. package/dist/loading/service/index.d.ts.map +1 -0
  63. package/dist/loading/service/loading-service-impl.d.ts +19 -0
  64. package/dist/loading/service/loading-service-impl.d.ts.map +1 -0
  65. package/dist/loading/service/loading-service.d.ts +43 -0
  66. package/dist/loading/service/loading-service.d.ts.map +1 -0
  67. package/dist/notifications/hooks/index.d.ts +2 -0
  68. package/dist/notifications/hooks/index.d.ts.map +1 -0
  69. package/dist/notifications/hooks/use-notifications.d.ts +7 -0
  70. package/dist/notifications/hooks/use-notifications.d.ts.map +1 -0
  71. package/dist/notifications/index.d.ts +10 -0
  72. package/dist/notifications/index.d.ts.map +1 -0
  73. package/dist/notifications/provider/index.d.ts +2 -0
  74. package/dist/notifications/provider/index.d.ts.map +1 -0
  75. package/dist/notifications/provider/notification-provider.d.ts +12 -0
  76. package/dist/notifications/provider/notification-provider.d.ts.map +1 -0
  77. package/dist/notifications/service/index.d.ts +3 -0
  78. package/dist/notifications/service/index.d.ts.map +1 -0
  79. package/dist/notifications/service/notification-service-impl.d.ts +14 -0
  80. package/dist/notifications/service/notification-service-impl.d.ts.map +1 -0
  81. package/dist/notifications/service/notification-service.d.ts +62 -0
  82. package/dist/notifications/service/notification-service.d.ts.map +1 -0
  83. package/dist/provider/index.d.ts +40 -0
  84. package/dist/provider/index.d.ts.map +1 -0
  85. package/package.json +60 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["positionMap: Record<\n\t\tNotificationPosition,\n\t\t{ vertical: \"top\" | \"bottom\"; horizontal: \"left\" | \"center\" | \"right\" }\n\t>"],"sources":["../src/dialogs/service/dialog-service.ts","../src/dialogs/service/dialog-service-impl.ts","../src/dialogs/components/confirm-dialog.tsx","../src/dialogs/components/alert-dialog.tsx","../src/dialogs/components/dialog-host.tsx","../src/dialogs/provider/dialog-provider.tsx","../src/dialogs/hooks/use-confirmation.ts","../src/notifications/service/notification-service.ts","../src/notifications/service/notification-service-impl.ts","../src/notifications/provider/notification-provider.tsx","../src/notifications/hooks/use-notifications.ts","../src/loading/service/loading-service-impl.ts","../src/loading/components/skeletons/text-input-skeleton.tsx","../src/loading/components/skeletons/table-skeleton.tsx","../src/loading/components/skeletons/form-skeleton.tsx","../src/loading/components/skeletons/card-skeleton.tsx","../src/loading/components/skeletons/link-skeleton.tsx","../src/loading/components/container-loading.tsx","../src/loading/components/global-loading-overlay.tsx","../src/loading/provider/loading-provider.tsx","../src/loading/hooks/use-loading-state.ts","../src/loading/hooks/use-component-loading.ts","../src/provider/index.tsx"],"sourcesContent":["import type { ComponentType } from \"react\";\n\n/**\n * Options for confirmation dialogs.\n */\nexport interface ConfirmDialogOptions {\n\ttitle?: string;\n\tmessage: string;\n\tconfirmText?: string;\n\tcancelText?: string;\n\tconfirmColor?: \"primary\" | \"secondary\" | \"error\" | \"warning\";\n\t/** Show dangerous action styling */\n\tdestructive?: boolean;\n}\n\n/**\n * Options for alert dialogs.\n */\nexport interface AlertDialogOptions {\n\ttitle?: string;\n\tmessage: string;\n\tvariant?: \"info\" | \"warning\" | \"error\";\n\tokText?: string;\n}\n\n/**\n * Props passed to custom dialog components.\n */\nexport interface CustomDialogProps<T = unknown> {\n\tonClose: (result?: T) => void;\n}\n\n/**\n * Custom dialog configuration.\n */\nexport interface CustomDialog<T = unknown, P extends CustomDialogProps<T> = CustomDialogProps<T>> {\n\tcomponent: ComponentType<P>;\n\tprops?: Omit<P, \"onClose\">;\n\tsize?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n\tfullWidth?: boolean;\n\tdisableBackdropClick?: boolean;\n}\n\n/**\n * Internal dialog state for tracking open dialogs.\n */\nexport interface DialogState {\n\tid: string;\n\ttype: \"confirm\" | \"alert\" | \"custom\";\n\toptions?: ConfirmDialogOptions | AlertDialogOptions;\n\tdialog?: CustomDialog<unknown>;\n}\n\n/**\n * DialogService interface for managing dialogs.\n */\nexport interface DialogService {\n\t/** Show confirmation dialog, returns true if confirmed */\n\tconfirm(options: ConfirmDialogOptions): Promise<boolean>;\n\n\t/** Show alert dialog */\n\talert(options: AlertDialogOptions): Promise<void>;\n\n\t/** Show custom dialog */\n\topen<T, P extends CustomDialogProps<T> = CustomDialogProps<T>>(dialog: CustomDialog<T, P>): Promise<T | undefined>;\n\n\t/** Close dialog by ID */\n\tclose(id: string, result?: unknown): void;\n\n\t/** Close all dialogs */\n\tcloseAll(): void;\n\n\t/** Subscribe to dialog state changes */\n\tsubscribe(callback: () => void): () => void;\n\n\t/** Get current dialog states */\n\tgetSnapshot(): DialogState[];\n}\n\n/**\n * Generate a unique ID for dialogs.\n */\nexport function generateDialogId(): string {\n\treturn `dialog-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;\n}\n","import type {\n\tAlertDialogOptions,\n\tConfirmDialogOptions,\n\tCustomDialog,\n\tCustomDialogProps,\n\tDialogService,\n\tDialogState,\n} from \"./dialog-service\";\nimport { generateDialogId } from \"./dialog-service\";\n\n/**\n * Implementation of DialogService.\n */\nexport class DialogServiceImpl implements DialogService {\n\tprivate dialogs: DialogState[] = [];\n\tprivate resolvers = new Map<string, (result: unknown) => void>();\n\tprivate subscribers = new Set<() => void>();\n\n\tconfirm(options: ConfirmDialogOptions): Promise<boolean> {\n\t\treturn new Promise((resolve) => {\n\t\t\tconst id = generateDialogId();\n\t\t\tthis.resolvers.set(id, resolve as (r: unknown) => void);\n\t\t\tthis.dialogs = [...this.dialogs, { id, type: \"confirm\", options }];\n\t\t\tthis.notify();\n\t\t});\n\t}\n\n\talert(options: AlertDialogOptions): Promise<void> {\n\t\treturn new Promise((resolve) => {\n\t\t\tconst id = generateDialogId();\n\t\t\tthis.resolvers.set(id, resolve as (r: unknown) => void);\n\t\t\tthis.dialogs = [...this.dialogs, { id, type: \"alert\", options }];\n\t\t\tthis.notify();\n\t\t});\n\t}\n\n\topen<T, P extends CustomDialogProps<T> = CustomDialogProps<T>>(dialog: CustomDialog<T, P>): Promise<T | undefined> {\n\t\treturn new Promise((resolve) => {\n\t\t\tconst id = generateDialogId();\n\t\t\tthis.resolvers.set(id, resolve as (r: unknown) => void);\n\t\t\tthis.dialogs = [...this.dialogs, { id, type: \"custom\", dialog: dialog as CustomDialog<unknown> }];\n\t\t\tthis.notify();\n\t\t});\n\t}\n\n\tclose(id: string, result?: unknown): void {\n\t\tconst resolver = this.resolvers.get(id);\n\t\tif (resolver) {\n\t\t\tresolver(result);\n\t\t\tthis.resolvers.delete(id);\n\t\t}\n\t\tthis.dialogs = this.dialogs.filter((d) => d.id !== id);\n\t\tthis.notify();\n\t}\n\n\tcloseAll(): void {\n\t\tfor (const [_id, resolver] of this.resolvers) {\n\t\t\tresolver(undefined);\n\t\t}\n\t\tthis.resolvers.clear();\n\t\tthis.dialogs = [];\n\t\tthis.notify();\n\t}\n\n\tsubscribe(callback: () => void): () => void {\n\t\tthis.subscribers.add(callback);\n\t\treturn () => {\n\t\t\tthis.subscribers.delete(callback);\n\t\t};\n\t}\n\n\tgetSnapshot(): DialogState[] {\n\t\treturn this.dialogs;\n\t}\n\n\tprivate notify(): void {\n\t\tfor (const callback of this.subscribers) {\n\t\t\tcallback();\n\t\t}\n\t}\n}\n","import { Button, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle } from \"@mui/material\";\nimport type { ConfirmDialogOptions } from \"../service\";\n\nexport interface ConfirmDialogProps {\n\topen: boolean;\n\toptions: ConfirmDialogOptions;\n\tonConfirm: () => void;\n\tonCancel: () => void;\n}\n\n/**\n * Confirmation dialog component.\n */\nexport function ConfirmDialog({ open, options, onConfirm, onCancel }: ConfirmDialogProps) {\n\treturn (\n\t\t<Dialog open={open} onClose={onCancel} aria-labelledby=\"confirm-dialog-title\">\n\t\t\t<DialogTitle id=\"confirm-dialog-title\">{options.title ?? \"Confirm\"}</DialogTitle>\n\t\t\t<DialogContent>\n\t\t\t\t<DialogContentText>{options.message}</DialogContentText>\n\t\t\t</DialogContent>\n\t\t\t<DialogActions>\n\t\t\t\t<Button onClick={onCancel}>{options.cancelText ?? \"Cancel\"}</Button>\n\t\t\t\t<Button\n\t\t\t\t\tonClick={onConfirm}\n\t\t\t\t\tvariant=\"contained\"\n\t\t\t\t\tcolor={options.destructive ? \"error\" : (options.confirmColor ?? \"primary\")}\n\t\t\t\t>\n\t\t\t\t\t{options.confirmText ?? \"Confirm\"}\n\t\t\t\t</Button>\n\t\t\t</DialogActions>\n\t\t</Dialog>\n\t);\n}\n","import { Alert, Button, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle } from \"@mui/material\";\nimport type { AlertDialogOptions } from \"../service\";\n\nexport interface AlertDialogProps {\n\topen: boolean;\n\toptions: AlertDialogOptions;\n\tonClose: () => void;\n}\n\n/**\n * Alert dialog component.\n */\nexport function AlertDialog({ open, options, onClose }: AlertDialogProps) {\n\treturn (\n\t\t<Dialog open={open} onClose={onClose} aria-labelledby=\"alert-dialog-title\">\n\t\t\t<DialogTitle id=\"alert-dialog-title\">{options.title ?? \"Alert\"}</DialogTitle>\n\t\t\t<DialogContent>\n\t\t\t\t{options.variant ? (\n\t\t\t\t\t<Alert severity={options.variant} sx={{ mb: 1 }}>\n\t\t\t\t\t\t{options.message}\n\t\t\t\t\t</Alert>\n\t\t\t\t) : (\n\t\t\t\t\t<DialogContentText>{options.message}</DialogContentText>\n\t\t\t\t)}\n\t\t\t</DialogContent>\n\t\t\t<DialogActions>\n\t\t\t\t<Button onClick={onClose} variant=\"contained\">\n\t\t\t\t\t{options.okText ?? \"OK\"}\n\t\t\t\t</Button>\n\t\t\t</DialogActions>\n\t\t</Dialog>\n\t);\n}\n","import { Dialog } from \"@mui/material\";\nimport { useSyncExternalStore } from \"react\";\nimport type { AlertDialogOptions, ConfirmDialogOptions, DialogService, DialogState } from \"../service\";\nimport { AlertDialog } from \"./alert-dialog\";\nimport { ConfirmDialog } from \"./confirm-dialog\";\n\nexport interface DialogHostProps {\n\tservice: DialogService;\n}\n\n/**\n * Dialog host component that renders all active dialogs.\n * Place this component near the root of your application.\n */\nexport function DialogHost({ service }: DialogHostProps) {\n\tconst dialogs = useSyncExternalStore(service.subscribe.bind(service), service.getSnapshot.bind(service));\n\n\treturn (\n\t\t<>\n\t\t\t{dialogs.map((dialog) => (\n\t\t\t\t<DialogRenderer key={dialog.id} dialog={dialog} service={service} />\n\t\t\t))}\n\t\t</>\n\t);\n}\n\ninterface DialogRendererProps {\n\tdialog: DialogState;\n\tservice: DialogService;\n}\n\nfunction DialogRenderer({ dialog, service }: DialogRendererProps) {\n\tif (dialog.type === \"confirm\") {\n\t\treturn (\n\t\t\t<ConfirmDialog\n\t\t\t\topen={true}\n\t\t\t\toptions={dialog.options as ConfirmDialogOptions}\n\t\t\t\tonConfirm={() => service.close(dialog.id, true)}\n\t\t\t\tonCancel={() => service.close(dialog.id, false)}\n\t\t\t/>\n\t\t);\n\t}\n\n\tif (dialog.type === \"alert\") {\n\t\treturn (\n\t\t\t<AlertDialog\n\t\t\t\topen={true}\n\t\t\t\toptions={dialog.options as AlertDialogOptions}\n\t\t\t\tonClose={() => service.close(dialog.id)}\n\t\t\t/>\n\t\t);\n\t}\n\n\tif (dialog.type === \"custom\" && dialog.dialog) {\n\t\tconst CustomComponent = dialog.dialog.component as React.ComponentType<{\n\t\t\tonClose: (result?: unknown) => void;\n\t\t\t[key: string]: unknown;\n\t\t}>;\n\t\treturn (\n\t\t\t<Dialog\n\t\t\t\topen={true}\n\t\t\t\tonClose={dialog.dialog.disableBackdropClick ? undefined : () => service.close(dialog.id)}\n\t\t\t\tmaxWidth={dialog.dialog.size ?? \"sm\"}\n\t\t\t\tfullWidth={dialog.dialog.fullWidth ?? true}\n\t\t\t>\n\t\t\t\t<CustomComponent onClose={(result?: unknown) => service.close(dialog.id, result)} {...dialog.dialog.props} />\n\t\t\t</Dialog>\n\t\t);\n\t}\n\n\treturn null;\n}\n","import { type ReactNode, createContext, useContext, useMemo } from \"react\";\nimport { DialogHost } from \"../components\";\nimport { DialogServiceImpl } from \"../service\";\nimport type { DialogService } from \"../service\";\n\nconst DialogContext = createContext<DialogService | null>(null);\n\nexport interface DialogProviderProps {\n\tchildren: ReactNode;\n\t/** Optional custom service implementation */\n\tservice?: DialogService;\n}\n\n/**\n * Provider component that provides DialogService and renders the DialogHost.\n */\nexport function DialogProvider({ children, service: providedService }: DialogProviderProps) {\n\tconst service = useMemo(() => providedService ?? new DialogServiceImpl(), [providedService]);\n\n\treturn (\n\t\t<DialogContext.Provider value={service}>\n\t\t\t{children}\n\t\t\t<DialogHost service={service} />\n\t\t</DialogContext.Provider>\n\t);\n}\n\n/**\n * Hook to get the DialogService from context.\n */\nexport function useDialog(): DialogService {\n\tconst context = useContext(DialogContext);\n\tif (!context) {\n\t\tthrow new Error(\"useDialog must be used within a DialogProvider\");\n\t}\n\treturn context;\n}\n\n/**\n * Hook to get the DialogService from context, returns null if not available.\n */\nexport function useDialogOptional(): DialogService | null {\n\treturn useContext(DialogContext);\n}\n","import { useCallback } from \"react\";\nimport { useDialog } from \"../provider\";\nimport type { ConfirmDialogOptions } from \"../service\";\n\n/**\n * Hook for handling model-driven confirmation flows.\n * Integrates with the Confirmation type from the meta-model.\n */\nexport function useConfirmation() {\n\tconst dialog = useDialog();\n\n\t/**\n\t * Show confirmation dialog and return result.\n\t */\n\tconst confirm = useCallback(\n\t\t(options: ConfirmDialogOptions): Promise<boolean> => {\n\t\t\treturn dialog.confirm(options);\n\t\t},\n\t\t[dialog]\n\t);\n\n\treturn { confirm };\n}\n","/**\n * Notification options for customizing notification behavior.\n */\nexport interface NotificationOptions {\n\t/** Auto-hide duration in ms (default: 5000, 0 = no auto-hide) */\n\tduration?: number;\n\t/** Position on screen */\n\tposition?: NotificationPosition;\n\t/** Action button */\n\taction?: NotificationAction;\n\t/** Prevent duplicate notifications with same key */\n\tkey?: string;\n}\n\n/**\n * Full notification configuration.\n */\nexport interface Notification extends NotificationOptions {\n\tmessage: string;\n\tvariant: NotificationVariant;\n}\n\n/**\n * Notification action button configuration.\n */\nexport interface NotificationAction {\n\tlabel: string;\n\tonClick: () => void;\n}\n\n/**\n * Notification variant types.\n */\nexport type NotificationVariant = \"success\" | \"error\" | \"warning\" | \"info\";\n\n/**\n * Notification position options.\n */\nexport type NotificationPosition =\n\t| \"top-right\"\n\t| \"top-center\"\n\t| \"top-left\"\n\t| \"bottom-right\"\n\t| \"bottom-center\"\n\t| \"bottom-left\";\n\n/**\n * NotificationService interface for showing notifications.\n */\nexport interface NotificationService {\n\t/** Show success notification */\n\tsuccess(message: string, options?: NotificationOptions): string;\n\n\t/** Show error notification */\n\terror(message: string, options?: NotificationOptions): string;\n\n\t/** Show warning notification */\n\twarning(message: string, options?: NotificationOptions): string;\n\n\t/** Show info notification */\n\tinfo(message: string, options?: NotificationOptions): string;\n\n\t/** Show custom notification */\n\tshow(notification: Notification): string;\n\n\t/** Dismiss notification by ID */\n\tdismiss(id: string): void;\n\n\t/** Dismiss all notifications */\n\tdismissAll(): void;\n}\n\n/**\n * Map notification position to notistack anchor origin.\n */\nexport function mapPositionToAnchorOrigin(position?: NotificationPosition): {\n\tvertical: \"top\" | \"bottom\";\n\thorizontal: \"left\" | \"center\" | \"right\";\n} {\n\tconst positionMap: Record<\n\t\tNotificationPosition,\n\t\t{ vertical: \"top\" | \"bottom\"; horizontal: \"left\" | \"center\" | \"right\" }\n\t> = {\n\t\t\"top-right\": { vertical: \"top\", horizontal: \"right\" },\n\t\t\"top-center\": { vertical: \"top\", horizontal: \"center\" },\n\t\t\"top-left\": { vertical: \"top\", horizontal: \"left\" },\n\t\t\"bottom-right\": { vertical: \"bottom\", horizontal: \"right\" },\n\t\t\"bottom-center\": { vertical: \"bottom\", horizontal: \"center\" },\n\t\t\"bottom-left\": { vertical: \"bottom\", horizontal: \"left\" },\n\t};\n\treturn positionMap[position ?? \"bottom-right\"];\n}\n","import { type SnackbarKey, closeSnackbar, enqueueSnackbar } from \"notistack\";\nimport {\n\ttype Notification,\n\ttype NotificationOptions,\n\ttype NotificationService,\n\tmapPositionToAnchorOrigin,\n} from \"./notification-service\";\n\n/**\n * Implementation of NotificationService using notistack.\n */\nexport class NotificationServiceImpl implements NotificationService {\n\tsuccess(message: string, options?: NotificationOptions): string {\n\t\treturn this.show({ message, variant: \"success\", ...options });\n\t}\n\n\terror(message: string, options?: NotificationOptions): string {\n\t\t// Errors persist by default (duration: 0)\n\t\treturn this.show({ message, variant: \"error\", duration: 0, ...options });\n\t}\n\n\twarning(message: string, options?: NotificationOptions): string {\n\t\treturn this.show({ message, variant: \"warning\", ...options });\n\t}\n\n\tinfo(message: string, options?: NotificationOptions): string {\n\t\treturn this.show({ message, variant: \"info\", ...options });\n\t}\n\n\tshow(notification: Notification): string {\n\t\tconst key = enqueueSnackbar(notification.message, {\n\t\t\tvariant: notification.variant,\n\t\t\tautoHideDuration: notification.duration === 0 ? null : (notification.duration ?? 5000),\n\t\t\tanchorOrigin: mapPositionToAnchorOrigin(notification.position),\n\t\t\tpreventDuplicate: notification.key !== undefined,\n\t\t\tkey: notification.key,\n\t\t});\n\t\treturn String(key);\n\t}\n\n\tdismiss(id: string): void {\n\t\tcloseSnackbar(id as SnackbarKey);\n\t}\n\n\tdismissAll(): void {\n\t\tcloseSnackbar();\n\t}\n}\n","import { SnackbarProvider } from \"notistack\";\nimport type { ReactNode } from \"react\";\n\nexport interface NotificationProviderProps {\n\tchildren: ReactNode;\n\t/** Maximum number of notifications to show at once */\n\tmaxSnack?: number;\n}\n\n/**\n * Provider component that wraps the application with notistack SnackbarProvider.\n * Must be placed near the root of the application.\n */\nexport function NotificationProvider({ children, maxSnack = 5 }: NotificationProviderProps) {\n\treturn (\n\t\t<SnackbarProvider maxSnack={maxSnack} anchorOrigin={{ vertical: \"bottom\", horizontal: \"right\" }}>\n\t\t\t{children}\n\t\t</SnackbarProvider>\n\t);\n}\n","import { useSnackbar } from \"notistack\";\nimport { useMemo } from \"react\";\nimport type { Notification, NotificationOptions, NotificationService } from \"../service\";\nimport { mapPositionToAnchorOrigin } from \"../service/notification-service\";\n\n/**\n * Hook to get a NotificationService instance.\n * Uses notistack's useSnackbar hook internally.\n */\nexport function useNotifications(): NotificationService {\n\tconst { enqueueSnackbar, closeSnackbar } = useSnackbar();\n\n\tconst service = useMemo<NotificationService>(\n\t\t() => ({\n\t\t\tsuccess(message: string, options?: NotificationOptions): string {\n\t\t\t\treturn this.show({ message, variant: \"success\", ...options });\n\t\t\t},\n\n\t\t\terror(message: string, options?: NotificationOptions): string {\n\t\t\t\t// Errors persist by default (duration: 0)\n\t\t\t\treturn this.show({ message, variant: \"error\", duration: 0, ...options });\n\t\t\t},\n\n\t\t\twarning(message: string, options?: NotificationOptions): string {\n\t\t\t\treturn this.show({ message, variant: \"warning\", ...options });\n\t\t\t},\n\n\t\t\tinfo(message: string, options?: NotificationOptions): string {\n\t\t\t\treturn this.show({ message, variant: \"info\", ...options });\n\t\t\t},\n\n\t\t\tshow(notification: Notification): string {\n\t\t\t\tconst key = enqueueSnackbar(notification.message, {\n\t\t\t\t\tvariant: notification.variant,\n\t\t\t\t\tautoHideDuration: notification.duration === 0 ? null : (notification.duration ?? 5000),\n\t\t\t\t\tanchorOrigin: mapPositionToAnchorOrigin(notification.position),\n\t\t\t\t\tpreventDuplicate: notification.key !== undefined,\n\t\t\t\t\tkey: notification.key,\n\t\t\t\t});\n\t\t\t\treturn String(key);\n\t\t\t},\n\n\t\t\tdismiss(id: string): void {\n\t\t\t\tcloseSnackbar(id);\n\t\t\t},\n\n\t\t\tdismissAll(): void {\n\t\t\t\tcloseSnackbar();\n\t\t\t},\n\t\t}),\n\t\t[enqueueSnackbar, closeSnackbar]\n\t);\n\n\treturn service;\n}\n","import type { LoadingOptions, LoadingService, LoadingSnapshot } from \"./loading-service\";\n\n/**\n * Implementation of LoadingService.\n */\nexport class LoadingServiceImpl implements LoadingService {\n\tprivate loadingStates = new Map<string, LoadingOptions>();\n\tprivate subscribers = new Set<() => void>();\n\tprivate cachedSnapshot: LoadingSnapshot | null = null;\n\n\tstart(key: string, options: LoadingOptions = {}): void {\n\t\tthis.loadingStates.set(key, options);\n\t\tthis.invalidateSnapshot();\n\t\tthis.notify();\n\t}\n\n\tend(key: string): void {\n\t\tthis.loadingStates.delete(key);\n\t\tthis.invalidateSnapshot();\n\t\tthis.notify();\n\t}\n\n\tisLoading(): boolean {\n\t\treturn this.loadingStates.size > 0;\n\t}\n\n\tisLoadingKey(key: string): boolean {\n\t\treturn this.loadingStates.has(key);\n\t}\n\n\tgetActiveKeys(): string[] {\n\t\treturn Array.from(this.loadingStates.keys());\n\t}\n\n\tsubscribe(callback: () => void): () => void {\n\t\tthis.subscribers.add(callback);\n\t\treturn () => {\n\t\t\tthis.subscribers.delete(callback);\n\t\t};\n\t}\n\n\tgetSnapshot(): LoadingSnapshot {\n\t\tif (this.cachedSnapshot) {\n\t\t\treturn this.cachedSnapshot;\n\t\t}\n\n\t\tconst globalEntry = Array.from(this.loadingStates.entries()).find(([, opts]) => opts.global);\n\n\t\tthis.cachedSnapshot = {\n\t\t\tisLoading: this.loadingStates.size > 0,\n\t\t\tactiveKeys: this.getActiveKeys(),\n\t\t\tglobalLoading: !!globalEntry,\n\t\t\tmessage: globalEntry?.[1].message,\n\t\t\tprogress: globalEntry?.[1].progress,\n\t\t};\n\n\t\treturn this.cachedSnapshot;\n\t}\n\n\tprivate invalidateSnapshot(): void {\n\t\tthis.cachedSnapshot = null;\n\t}\n\n\tprivate notify(): void {\n\t\tfor (const callback of this.subscribers) {\n\t\t\tcallback();\n\t\t}\n\t}\n}\n","import { Box, Skeleton } from \"@mui/material\";\n\nexport interface TextInputSkeletonProps {\n\twidth?: string | number;\n}\n\n/**\n * Skeleton component for text inputs.\n */\nexport function TextInputSkeleton({ width = \"100%\" }: TextInputSkeletonProps) {\n\treturn (\n\t\t<Box sx={{ width }}>\n\t\t\t<Skeleton variant=\"text\" width={80} height={20} sx={{ mb: 0.5 }} />\n\t\t\t<Skeleton variant=\"rectangular\" height={56} />\n\t\t</Box>\n\t);\n}\n","import { Box, Skeleton } from \"@mui/material\";\n\nexport interface TableSkeletonProps {\n\trows?: number;\n\tcolumns?: number;\n}\n\n/**\n * Skeleton component for tables.\n * Uses array index as key since these are static placeholder elements that never reorder.\n */\nexport function TableSkeleton({ rows = 5, columns = 4 }: TableSkeletonProps) {\n\tconst headerCells = Array.from({ length: columns }, (_, i) => (\n\t\t// oxlint-disable-next-line react/no-array-index-key -- Static skeleton placeholders that never reorder\n\t\t<Skeleton key={i} variant=\"text\" sx={{ flex: 1 }} height={40} />\n\t));\n\n\tconst rowElements = Array.from({ length: rows }, (_row, rowIndex) => {\n\t\tconst cells = Array.from({ length: columns }, (_col, colIndex) => (\n\t\t\t// oxlint-disable-next-line react/no-array-index-key -- Static skeleton placeholders that never reorder\n\t\t\t<Skeleton key={colIndex} variant=\"text\" sx={{ flex: 1 }} height={32} />\n\t\t));\n\n\t\treturn (\n\t\t\t// oxlint-disable-next-line react/no-array-index-key -- Static skeleton placeholders that never reorder\n\t\t\t<Box key={rowIndex} display=\"flex\" gap={2} mb={1}>\n\t\t\t\t{cells}\n\t\t\t</Box>\n\t\t);\n\t});\n\n\treturn (\n\t\t<Box>\n\t\t\t{/* Header */}\n\t\t\t<Box display=\"flex\" gap={2} mb={1}>\n\t\t\t\t{headerCells}\n\t\t\t</Box>\n\t\t\t{/* Rows */}\n\t\t\t{rowElements}\n\t\t</Box>\n\t);\n}\n","import { Box } from \"@mui/material\";\nimport { TextInputSkeleton } from \"./text-input-skeleton\";\n\nexport interface FormSkeletonProps {\n\tfields?: number;\n}\n\n/**\n * Skeleton component for forms.\n * Uses array index as key since these are static placeholder elements that never reorder.\n */\nexport function FormSkeleton({ fields = 4 }: FormSkeletonProps) {\n\tconst fieldElements = Array.from({ length: fields }, (_, i) => (\n\t\t// oxlint-disable-next-line react/no-array-index-key -- Static skeleton placeholders that never reorder\n\t\t<TextInputSkeleton key={i} />\n\t));\n\n\treturn (\n\t\t<Box display=\"flex\" flexDirection=\"column\" gap={2}>\n\t\t\t{fieldElements}\n\t\t</Box>\n\t);\n}\n","import { Card, CardContent, Skeleton } from \"@mui/material\";\n\n/**\n * Skeleton component for cards.\n */\nexport function CardSkeleton() {\n\treturn (\n\t\t<Card>\n\t\t\t<CardContent>\n\t\t\t\t<Skeleton variant=\"text\" width=\"60%\" height={32} />\n\t\t\t\t<Skeleton variant=\"text\" width=\"80%\" />\n\t\t\t\t<Skeleton variant=\"text\" width=\"40%\" />\n\t\t\t</CardContent>\n\t\t</Card>\n\t);\n}\n","import { Box, Skeleton } from \"@mui/material\";\n\n/**\n * Skeleton component for link/autocomplete inputs.\n */\nexport function LinkSkeleton() {\n\treturn (\n\t\t<Box>\n\t\t\t<Skeleton variant=\"text\" width={80} height={20} sx={{ mb: 0.5 }} />\n\t\t\t<Skeleton variant=\"rectangular\" height={56} />\n\t\t</Box>\n\t);\n}\n","import { Box, CircularProgress } from \"@mui/material\";\nimport { type ReactNode, useEffect, useRef, useState } from \"react\";\n\nexport interface ContainerLoadingProps {\n\tloading: boolean;\n\tskeleton?: ReactNode;\n\tchildren: ReactNode;\n\t/** Minimum time to show loading (prevents flicker) */\n\tminLoadingTime?: number;\n}\n\n/**\n * Container component that shows loading state or content.\n */\nexport function ContainerLoading({ loading, skeleton, children, minLoadingTime = 200 }: ContainerLoadingProps) {\n\tconst [showLoading, setShowLoading] = useState(loading);\n\tconst loadingStartTime = useRef<number | null>(null);\n\n\tuseEffect(() => {\n\t\tif (loading) {\n\t\t\tloadingStartTime.current = Date.now();\n\t\t\tsetShowLoading(true);\n\t\t} else if (loadingStartTime.current) {\n\t\t\tconst elapsed = Date.now() - loadingStartTime.current;\n\t\t\tconst remaining = Math.max(0, minLoadingTime - elapsed);\n\n\t\t\tif (remaining > 0) {\n\t\t\t\tconst timer = setTimeout(() => setShowLoading(false), remaining);\n\t\t\t\treturn () => clearTimeout(timer);\n\t\t\t}\n\t\t\tsetShowLoading(false);\n\t\t\tloadingStartTime.current = null;\n\t\t} else {\n\t\t\tsetShowLoading(false);\n\t\t}\n\t}, [loading, minLoadingTime]);\n\n\tif (showLoading && skeleton) {\n\t\treturn <>{skeleton}</>;\n\t}\n\n\tif (showLoading) {\n\t\treturn (\n\t\t\t<Box display=\"flex\" justifyContent=\"center\" alignItems=\"center\" p={4}>\n\t\t\t\t<CircularProgress />\n\t\t\t</Box>\n\t\t);\n\t}\n\n\treturn <>{children}</>;\n}\n","import { Backdrop, CircularProgress, Typography } from \"@mui/material\";\nimport { useSyncExternalStore } from \"react\";\nimport type { LoadingService } from \"../service\";\n\nexport interface GlobalLoadingOverlayProps {\n\tservice: LoadingService;\n}\n\n/**\n * Global loading overlay that shows when global loading is active.\n */\nexport function GlobalLoadingOverlay({ service }: GlobalLoadingOverlayProps) {\n\tconst snapshot = useSyncExternalStore(service.subscribe.bind(service), service.getSnapshot.bind(service));\n\n\tif (!snapshot.globalLoading) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<Backdrop\n\t\t\topen={snapshot.globalLoading}\n\t\t\tsx={{\n\t\t\t\tzIndex: (theme) => theme.zIndex.modal + 1,\n\t\t\t\tflexDirection: \"column\",\n\t\t\t\tgap: 2,\n\t\t\t\tcolor: \"#fff\",\n\t\t\t}}\n\t\t>\n\t\t\t{snapshot.progress !== undefined ? (\n\t\t\t\t<CircularProgress variant=\"determinate\" value={snapshot.progress} size={60} color=\"inherit\" />\n\t\t\t) : (\n\t\t\t\t<CircularProgress size={60} color=\"inherit\" />\n\t\t\t)}\n\t\t\t{snapshot.message && (\n\t\t\t\t<Typography color=\"inherit\" variant=\"h6\">\n\t\t\t\t\t{snapshot.message}\n\t\t\t\t</Typography>\n\t\t\t)}\n\t\t</Backdrop>\n\t);\n}\n","import { type ReactNode, createContext, useContext, useMemo } from \"react\";\nimport { GlobalLoadingOverlay } from \"../components/global-loading-overlay\";\nimport { LoadingServiceImpl } from \"../service\";\nimport type { LoadingService } from \"../service\";\n\nconst LoadingContext = createContext<LoadingService | null>(null);\n\nexport interface LoadingProviderProps {\n\tchildren: ReactNode;\n\t/** Optional custom service implementation */\n\tservice?: LoadingService;\n\t/** Whether to show global loading overlay */\n\tshowGlobalOverlay?: boolean;\n}\n\n/**\n * Provider component that provides LoadingService via context.\n */\nexport function LoadingProvider({\n\tchildren,\n\tservice: providedService,\n\tshowGlobalOverlay = true,\n}: LoadingProviderProps) {\n\tconst service = useMemo(() => providedService ?? new LoadingServiceImpl(), [providedService]);\n\n\treturn (\n\t\t<LoadingContext.Provider value={service}>\n\t\t\t{children}\n\t\t\t{showGlobalOverlay && <GlobalLoadingOverlay service={service} />}\n\t\t</LoadingContext.Provider>\n\t);\n}\n\n/**\n * Hook to get the LoadingService from context.\n */\nexport function useLoading(): LoadingService {\n\tconst context = useContext(LoadingContext);\n\tif (!context) {\n\t\tthrow new Error(\"useLoading must be used within a LoadingProvider\");\n\t}\n\treturn context;\n}\n\n/**\n * Hook to get the LoadingService from context, returns null if not available.\n */\nexport function useLoadingOptional(): LoadingService | null {\n\treturn useContext(LoadingContext);\n}\n","import { useSyncExternalStore } from \"react\";\nimport { useLoading } from \"../provider\";\nimport type { LoadingSnapshot } from \"../service\";\n\n/**\n * Hook to get current loading state snapshot.\n */\nexport function useLoadingState(): LoadingSnapshot {\n\tconst loading = useLoading();\n\n\treturn useSyncExternalStore(loading.subscribe.bind(loading), loading.getSnapshot.bind(loading));\n}\n","import { useCallback, useSyncExternalStore } from \"react\";\nimport { useLoading } from \"../provider\";\nimport type { LoadingOptions } from \"../service\";\n\n/**\n * Hook for component-level loading state management.\n */\nexport function useComponentLoading(key: string): {\n\tisLoading: boolean;\n\tstartLoading: (options?: LoadingOptions) => void;\n\tendLoading: () => void;\n} {\n\tconst loading = useLoading();\n\n\tconst isLoading = useSyncExternalStore(loading.subscribe.bind(loading), () => loading.isLoadingKey(key));\n\n\tconst startLoading = useCallback(\n\t\t(options?: LoadingOptions) => {\n\t\t\tloading.start(key, options);\n\t\t},\n\t\t[loading, key]\n\t);\n\n\tconst endLoading = useCallback(() => {\n\t\tloading.end(key);\n\t}, [loading, key]);\n\n\treturn {\n\t\tisLoading,\n\t\tstartLoading,\n\t\tendLoading,\n\t};\n}\n","import type React from \"react\";\nimport { DialogProvider, useDialog } from \"../dialogs/provider\";\nimport { LoadingProvider, useLoading } from \"../loading/provider\";\nimport { useNotifications } from \"../notifications/hooks\";\nimport { NotificationProvider } from \"../notifications/provider\";\n\nexport interface FeedbackProviderProps {\n\tchildren: React.ReactNode;\n}\n\n/**\n * Unified feedback provider that combines dialogs, notifications, and loading providers.\n * Simplifies setup by wrapping all three feedback mechanisms in a single component.\n *\n * @example\n * ```tsx\n * <FeedbackProvider>\n * <App />\n * </FeedbackProvider>\n * ```\n */\nexport function FeedbackProvider({ children }: FeedbackProviderProps) {\n\treturn (\n\t\t<DialogProvider>\n\t\t\t<NotificationProvider>\n\t\t\t\t<LoadingProvider>{children}</LoadingProvider>\n\t\t\t</NotificationProvider>\n\t\t</DialogProvider>\n\t);\n}\n\n/**\n * Unified hook to access all feedback services.\n * Returns dialogs, notifications, and loading services.\n *\n * @example\n * ```tsx\n * const { dialogs, notifications, loading } = useFeedback();\n *\n * // Use dialog service\n * await dialogs.confirm({ title: 'Delete?', message: 'Are you sure?' });\n *\n * // Use notification service\n * notifications.success('Saved!');\n *\n * // Use loading service\n * loading.start('save-operation');\n * ```\n */\nexport function useFeedback() {\n\tconst dialogs = useDialog();\n\tconst notifications = useNotifications();\n\tconst loading = useLoading();\n\n\treturn {\n\t\tdialogs,\n\t\tnotifications,\n\t\tloading,\n\t};\n}\n"],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { ReactNode } from 'react';
2
+ export interface ContainerLoadingProps {
3
+ loading: boolean;
4
+ skeleton?: ReactNode;
5
+ children: ReactNode;
6
+ /** Minimum time to show loading (prevents flicker) */
7
+ minLoadingTime?: number;
8
+ }
9
+ /**
10
+ * Container component that shows loading state or content.
11
+ */
12
+ export declare function ContainerLoading({ loading, skeleton, children, minLoadingTime }: ContainerLoadingProps): import("react/jsx-runtime").JSX.Element;
13
+ //# sourceMappingURL=container-loading.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container-loading.d.ts","sourceRoot":"","sources":["../../../src/loading/components/container-loading.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,SAAS,EAA+B,MAAM,OAAO,CAAC;AAEpE,MAAM,WAAW,qBAAqB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,SAAS,CAAC;IACpB,sDAAsD;IACtD,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAoB,EAAE,EAAE,qBAAqB,2CAoC5G"}
@@ -0,0 +1,9 @@
1
+ import { LoadingService } from '../service';
2
+ export interface GlobalLoadingOverlayProps {
3
+ service: LoadingService;
4
+ }
5
+ /**
6
+ * Global loading overlay that shows when global loading is active.
7
+ */
8
+ export declare function GlobalLoadingOverlay({ service }: GlobalLoadingOverlayProps): import("react/jsx-runtime").JSX.Element | null;
9
+ //# sourceMappingURL=global-loading-overlay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-loading-overlay.d.ts","sourceRoot":"","sources":["../../../src/loading/components/global-loading-overlay.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,MAAM,WAAW,yBAAyB;IACzC,OAAO,EAAE,cAAc,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,OAAO,EAAE,EAAE,yBAAyB,kDA6B1E"}
@@ -0,0 +1,4 @@
1
+ export * from './skeletons';
2
+ export { ContainerLoading, type ContainerLoadingProps } from './container-loading';
3
+ export { GlobalLoadingOverlay, type GlobalLoadingOverlayProps } from './global-loading-overlay';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/loading/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,KAAK,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACnF,OAAO,EAAE,oBAAoB,EAAE,KAAK,yBAAyB,EAAE,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Skeleton component for cards.
3
+ */
4
+ export declare function CardSkeleton(): import("react/jsx-runtime").JSX.Element;
5
+ //# sourceMappingURL=card-skeleton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card-skeleton.d.ts","sourceRoot":"","sources":["../../../../src/loading/components/skeletons/card-skeleton.tsx"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAgB,YAAY,4CAU3B"}
@@ -0,0 +1,9 @@
1
+ export interface FormSkeletonProps {
2
+ fields?: number;
3
+ }
4
+ /**
5
+ * Skeleton component for forms.
6
+ * Uses array index as key since these are static placeholder elements that never reorder.
7
+ */
8
+ export declare function FormSkeleton({ fields }: FormSkeletonProps): import("react/jsx-runtime").JSX.Element;
9
+ //# sourceMappingURL=form-skeleton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-skeleton.d.ts","sourceRoot":"","sources":["../../../../src/loading/components/skeletons/form-skeleton.tsx"],"names":[],"mappings":"AAGA,MAAM,WAAW,iBAAiB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,EAAE,MAAU,EAAE,EAAE,iBAAiB,2CAW7D"}
@@ -0,0 +1,6 @@
1
+ export { TextInputSkeleton, type TextInputSkeletonProps } from './text-input-skeleton';
2
+ export { TableSkeleton, type TableSkeletonProps } from './table-skeleton';
3
+ export { FormSkeleton, type FormSkeletonProps } from './form-skeleton';
4
+ export { CardSkeleton } from './card-skeleton';
5
+ export { LinkSkeleton } from './link-skeleton';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/loading/components/skeletons/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,KAAK,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACvF,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Skeleton component for link/autocomplete inputs.
3
+ */
4
+ export declare function LinkSkeleton(): import("react/jsx-runtime").JSX.Element;
5
+ //# sourceMappingURL=link-skeleton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link-skeleton.d.ts","sourceRoot":"","sources":["../../../../src/loading/components/skeletons/link-skeleton.tsx"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAgB,YAAY,4CAO3B"}
@@ -0,0 +1,10 @@
1
+ export interface TableSkeletonProps {
2
+ rows?: number;
3
+ columns?: number;
4
+ }
5
+ /**
6
+ * Skeleton component for tables.
7
+ * Uses array index as key since these are static placeholder elements that never reorder.
8
+ */
9
+ export declare function TableSkeleton({ rows, columns }: TableSkeletonProps): import("react/jsx-runtime").JSX.Element;
10
+ //# sourceMappingURL=table-skeleton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-skeleton.d.ts","sourceRoot":"","sources":["../../../../src/loading/components/skeletons/table-skeleton.tsx"],"names":[],"mappings":"AAEA,MAAM,WAAW,kBAAkB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAAE,IAAQ,EAAE,OAAW,EAAE,EAAE,kBAAkB,2CA8B1E"}
@@ -0,0 +1,8 @@
1
+ export interface TextInputSkeletonProps {
2
+ width?: string | number;
3
+ }
4
+ /**
5
+ * Skeleton component for text inputs.
6
+ */
7
+ export declare function TextInputSkeleton({ width }: TextInputSkeletonProps): import("react/jsx-runtime").JSX.Element;
8
+ //# sourceMappingURL=text-input-skeleton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-input-skeleton.d.ts","sourceRoot":"","sources":["../../../../src/loading/components/skeletons/text-input-skeleton.tsx"],"names":[],"mappings":"AAEA,MAAM,WAAW,sBAAsB;IACtC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,KAAc,EAAE,EAAE,sBAAsB,2CAO3E"}
@@ -0,0 +1,3 @@
1
+ export { useLoadingState } from './use-loading-state';
2
+ export { useComponentLoading } from './use-component-loading';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/loading/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { LoadingOptions } from '../service';
2
+ /**
3
+ * Hook for component-level loading state management.
4
+ */
5
+ export declare function useComponentLoading(key: string): {
6
+ isLoading: boolean;
7
+ startLoading: (options?: LoadingOptions) => void;
8
+ endLoading: () => void;
9
+ };
10
+ //# sourceMappingURL=use-component-loading.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-component-loading.d.ts","sourceRoot":"","sources":["../../../src/loading/hooks/use-component-loading.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG;IACjD,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,CAAC,OAAO,CAAC,EAAE,cAAc,KAAK,IAAI,CAAC;IACjD,UAAU,EAAE,MAAM,IAAI,CAAC;CACvB,CAqBA"}
@@ -0,0 +1,6 @@
1
+ import { LoadingSnapshot } from '../service';
2
+ /**
3
+ * Hook to get current loading state snapshot.
4
+ */
5
+ export declare function useLoadingState(): LoadingSnapshot;
6
+ //# sourceMappingURL=use-loading-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-loading-state.d.ts","sourceRoot":"","sources":["../../../src/loading/hooks/use-loading-state.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD;;GAEG;AACH,wBAAgB,eAAe,IAAI,eAAe,CAIjD"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @judo/loading
3
+ *
4
+ * Loading states and skeleton components for JUDO UI Runtime.
5
+ * Provides loading indicators and skeleton UI for better UX during data loading.
6
+ */
7
+ export { type LoadingService, type LoadingSnapshot, type LoadingOptions, LoadingServiceImpl } from './service';
8
+ export { TextInputSkeleton, type TextInputSkeletonProps, TableSkeleton, type TableSkeletonProps, FormSkeleton, type FormSkeletonProps, CardSkeleton, LinkSkeleton, ContainerLoading, type ContainerLoadingProps, GlobalLoadingOverlay, type GlobalLoadingOverlayProps, } from './components';
9
+ export { LoadingProvider, useLoading, useLoadingOptional, type LoadingProviderProps } from './provider';
10
+ export { useLoadingState, useComponentLoading } from './hooks';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/loading/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAG/G,OAAO,EACN,iBAAiB,EACjB,KAAK,sBAAsB,EAC3B,aAAa,EACb,KAAK,kBAAkB,EACvB,YAAY,EACZ,KAAK,iBAAiB,EACtB,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,oBAAoB,EACpB,KAAK,yBAAyB,GAC9B,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,kBAAkB,EAAE,KAAK,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAGxG,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { LoadingProvider, useLoading, useLoadingOptional, type LoadingProviderProps } from './loading-provider';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/loading/provider/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,kBAAkB,EAAE,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { ReactNode } from 'react';
2
+ import { LoadingService } from '../service';
3
+ export interface LoadingProviderProps {
4
+ children: ReactNode;
5
+ /** Optional custom service implementation */
6
+ service?: LoadingService;
7
+ /** Whether to show global loading overlay */
8
+ showGlobalOverlay?: boolean;
9
+ }
10
+ /**
11
+ * Provider component that provides LoadingService via context.
12
+ */
13
+ export declare function LoadingProvider({ children, service: providedService, showGlobalOverlay, }: LoadingProviderProps): import("react/jsx-runtime").JSX.Element;
14
+ /**
15
+ * Hook to get the LoadingService from context.
16
+ */
17
+ export declare function useLoading(): LoadingService;
18
+ /**
19
+ * Hook to get the LoadingService from context, returns null if not available.
20
+ */
21
+ export declare function useLoadingOptional(): LoadingService | null;
22
+ //# sourceMappingURL=loading-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loading-provider.d.ts","sourceRoot":"","sources":["../../../src/loading/provider/loading-provider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAsC,MAAM,OAAO,CAAC;AAG3E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAIjD,MAAM,WAAW,oBAAoB;IACpC,QAAQ,EAAE,SAAS,CAAC;IACpB,6CAA6C;IAC7C,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,6CAA6C;IAC7C,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAC/B,QAAQ,EACR,OAAO,EAAE,eAAe,EACxB,iBAAwB,GACxB,EAAE,oBAAoB,2CAStB;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,cAAc,CAM3C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,cAAc,GAAG,IAAI,CAE1D"}
@@ -0,0 +1,3 @@
1
+ export type { LoadingService, LoadingSnapshot, LoadingOptions } from './loading-service';
2
+ export { LoadingServiceImpl } from './loading-service-impl';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/loading/service/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACzF,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { LoadingOptions, LoadingService, LoadingSnapshot } from './loading-service';
2
+ /**
3
+ * Implementation of LoadingService.
4
+ */
5
+ export declare class LoadingServiceImpl implements LoadingService {
6
+ private loadingStates;
7
+ private subscribers;
8
+ private cachedSnapshot;
9
+ start(key: string, options?: LoadingOptions): void;
10
+ end(key: string): void;
11
+ isLoading(): boolean;
12
+ isLoadingKey(key: string): boolean;
13
+ getActiveKeys(): string[];
14
+ subscribe(callback: () => void): () => void;
15
+ getSnapshot(): LoadingSnapshot;
16
+ private invalidateSnapshot;
17
+ private notify;
18
+ }
19
+ //# sourceMappingURL=loading-service-impl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loading-service-impl.d.ts","sourceRoot":"","sources":["../../../src/loading/service/loading-service-impl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzF;;GAEG;AACH,qBAAa,kBAAmB,YAAW,cAAc;IACxD,OAAO,CAAC,aAAa,CAAqC;IAC1D,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,cAAc,CAAgC;IAEtD,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,IAAI;IAMtD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAMtB,SAAS,IAAI,OAAO;IAIpB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIlC,aAAa,IAAI,MAAM,EAAE;IAIzB,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAO3C,WAAW,IAAI,eAAe;IAkB9B,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,MAAM;CAKd"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Loading options for tracking loading states.
3
+ */
4
+ export interface LoadingOptions {
5
+ /** Show global loading overlay */
6
+ global?: boolean;
7
+ /** Loading message to display */
8
+ message?: string;
9
+ /** Show progress indicator */
10
+ showProgress?: boolean;
11
+ /** Progress value (0-100) for determinate progress */
12
+ progress?: number;
13
+ }
14
+ /**
15
+ * Snapshot of current loading state.
16
+ */
17
+ export interface LoadingSnapshot {
18
+ isLoading: boolean;
19
+ activeKeys: string[];
20
+ globalLoading: boolean;
21
+ message?: string;
22
+ progress?: number;
23
+ }
24
+ /**
25
+ * LoadingService interface for managing loading states.
26
+ */
27
+ export interface LoadingService {
28
+ /** Start a loading operation */
29
+ start(key: string, options?: LoadingOptions): void;
30
+ /** End a loading operation */
31
+ end(key: string): void;
32
+ /** Check if any loading is active */
33
+ isLoading(): boolean;
34
+ /** Check if specific key is loading */
35
+ isLoadingKey(key: string): boolean;
36
+ /** Get all active loading keys */
37
+ getActiveKeys(): string[];
38
+ /** Subscribe to loading state changes */
39
+ subscribe(callback: () => void): () => void;
40
+ /** Get current snapshot */
41
+ getSnapshot(): LoadingSnapshot;
42
+ }
43
+ //# sourceMappingURL=loading-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loading-service.d.ts","sourceRoot":"","sources":["../../../src/loading/service/loading-service.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,cAAc;IAC9B,kCAAkC;IAClC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,sDAAsD;IACtD,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC/B,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC9B,gCAAgC;IAChC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IAEnD,8BAA8B;IAC9B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAEvB,qCAAqC;IACrC,SAAS,IAAI,OAAO,CAAC;IAErB,uCAAuC;IACvC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAEnC,kCAAkC;IAClC,aAAa,IAAI,MAAM,EAAE,CAAC;IAE1B,yCAAyC;IACzC,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;IAE5C,2BAA2B;IAC3B,WAAW,IAAI,eAAe,CAAC;CAC/B"}
@@ -0,0 +1,2 @@
1
+ export { useNotifications } from './use-notifications';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/notifications/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { NotificationService } from '../service';
2
+ /**
3
+ * Hook to get a NotificationService instance.
4
+ * Uses notistack's useSnackbar hook internally.
5
+ */
6
+ export declare function useNotifications(): NotificationService;
7
+ //# sourceMappingURL=use-notifications.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-notifications.d.ts","sourceRoot":"","sources":["../../../src/notifications/hooks/use-notifications.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAqC,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAGzF;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,mBAAmB,CA6CtD"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @judo/notifications
3
+ *
4
+ * Notification system for JUDO UI Runtime.
5
+ * Provides snackbar/toast notifications using notistack.
6
+ */
7
+ export { type NotificationService, type Notification, type NotificationOptions, type NotificationAction, type NotificationVariant, type NotificationPosition, mapPositionToAnchorOrigin, NotificationServiceImpl, } from './service';
8
+ export { NotificationProvider, type NotificationProviderProps } from './provider';
9
+ export { useNotifications } from './hooks';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/notifications/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACN,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,yBAAyB,EACzB,uBAAuB,GACvB,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,oBAAoB,EAAE,KAAK,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAGlF,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { NotificationProvider, type NotificationProviderProps } from './notification-provider';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/notifications/provider/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,KAAK,yBAAyB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { ReactNode } from 'react';
2
+ export interface NotificationProviderProps {
3
+ children: ReactNode;
4
+ /** Maximum number of notifications to show at once */
5
+ maxSnack?: number;
6
+ }
7
+ /**
8
+ * Provider component that wraps the application with notistack SnackbarProvider.
9
+ * Must be placed near the root of the application.
10
+ */
11
+ export declare function NotificationProvider({ children, maxSnack }: NotificationProviderProps): import("react/jsx-runtime").JSX.Element;
12
+ //# sourceMappingURL=notification-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notification-provider.d.ts","sourceRoot":"","sources":["../../../src/notifications/provider/notification-provider.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,WAAW,yBAAyB;IACzC,QAAQ,EAAE,SAAS,CAAC;IACpB,sDAAsD;IACtD,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,QAAQ,EAAE,QAAY,EAAE,EAAE,yBAAyB,2CAMzF"}
@@ -0,0 +1,3 @@
1
+ export { type NotificationService, type Notification, type NotificationOptions, type NotificationAction, type NotificationVariant, type NotificationPosition, mapPositionToAnchorOrigin, } from './notification-service';
2
+ export { NotificationServiceImpl } from './notification-service-impl';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/notifications/service/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,yBAAyB,GACzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { Notification, NotificationOptions, NotificationService } from './notification-service';
2
+ /**
3
+ * Implementation of NotificationService using notistack.
4
+ */
5
+ export declare class NotificationServiceImpl implements NotificationService {
6
+ success(message: string, options?: NotificationOptions): string;
7
+ error(message: string, options?: NotificationOptions): string;
8
+ warning(message: string, options?: NotificationOptions): string;
9
+ info(message: string, options?: NotificationOptions): string;
10
+ show(notification: Notification): string;
11
+ dismiss(id: string): void;
12
+ dismissAll(): void;
13
+ }
14
+ //# sourceMappingURL=notification-service-impl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notification-service-impl.d.ts","sourceRoot":"","sources":["../../../src/notifications/service/notification-service-impl.ts"],"names":[],"mappings":"AACA,OAAO,EACN,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EAExB,MAAM,wBAAwB,CAAC;AAEhC;;GAEG;AACH,qBAAa,uBAAwB,YAAW,mBAAmB;IAClE,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,MAAM;IAI/D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,MAAM;IAK7D,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,MAAM;IAI/D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,MAAM;IAI5D,IAAI,CAAC,YAAY,EAAE,YAAY,GAAG,MAAM;IAWxC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAIzB,UAAU,IAAI,IAAI;CAGlB"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Notification options for customizing notification behavior.
3
+ */
4
+ export interface NotificationOptions {
5
+ /** Auto-hide duration in ms (default: 5000, 0 = no auto-hide) */
6
+ duration?: number;
7
+ /** Position on screen */
8
+ position?: NotificationPosition;
9
+ /** Action button */
10
+ action?: NotificationAction;
11
+ /** Prevent duplicate notifications with same key */
12
+ key?: string;
13
+ }
14
+ /**
15
+ * Full notification configuration.
16
+ */
17
+ export interface Notification extends NotificationOptions {
18
+ message: string;
19
+ variant: NotificationVariant;
20
+ }
21
+ /**
22
+ * Notification action button configuration.
23
+ */
24
+ export interface NotificationAction {
25
+ label: string;
26
+ onClick: () => void;
27
+ }
28
+ /**
29
+ * Notification variant types.
30
+ */
31
+ export type NotificationVariant = "success" | "error" | "warning" | "info";
32
+ /**
33
+ * Notification position options.
34
+ */
35
+ export type NotificationPosition = "top-right" | "top-center" | "top-left" | "bottom-right" | "bottom-center" | "bottom-left";
36
+ /**
37
+ * NotificationService interface for showing notifications.
38
+ */
39
+ export interface NotificationService {
40
+ /** Show success notification */
41
+ success(message: string, options?: NotificationOptions): string;
42
+ /** Show error notification */
43
+ error(message: string, options?: NotificationOptions): string;
44
+ /** Show warning notification */
45
+ warning(message: string, options?: NotificationOptions): string;
46
+ /** Show info notification */
47
+ info(message: string, options?: NotificationOptions): string;
48
+ /** Show custom notification */
49
+ show(notification: Notification): string;
50
+ /** Dismiss notification by ID */
51
+ dismiss(id: string): void;
52
+ /** Dismiss all notifications */
53
+ dismissAll(): void;
54
+ }
55
+ /**
56
+ * Map notification position to notistack anchor origin.
57
+ */
58
+ export declare function mapPositionToAnchorOrigin(position?: NotificationPosition): {
59
+ vertical: "top" | "bottom";
60
+ horizontal: "left" | "center" | "right";
61
+ };
62
+ //# sourceMappingURL=notification-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notification-service.d.ts","sourceRoot":"","sources":["../../../src/notifications/service/notification-service.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yBAAyB;IACzB,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC,oBAAoB;IACpB,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,oDAAoD;IACpD,GAAG,CAAC,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,mBAAmB;IACxD,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,mBAAmB,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAE3E;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAC7B,WAAW,GACX,YAAY,GACZ,UAAU,GACV,cAAc,GACd,eAAe,GACf,aAAa,CAAC;AAEjB;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC,gCAAgC;IAChC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,MAAM,CAAC;IAEhE,8BAA8B;IAC9B,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,MAAM,CAAC;IAE9D,gCAAgC;IAChC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,MAAM,CAAC;IAEhE,6BAA6B;IAC7B,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,MAAM,CAAC;IAE7D,+BAA+B;IAC/B,IAAI,CAAC,YAAY,EAAE,YAAY,GAAG,MAAM,CAAC;IAEzC,iCAAiC;IACjC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAE1B,gCAAgC;IAChC,UAAU,IAAI,IAAI,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,CAAC,EAAE,oBAAoB,GAAG;IAC3E,QAAQ,EAAE,KAAK,GAAG,QAAQ,CAAC;IAC3B,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;CACxC,CAaA"}
@@ -0,0 +1,40 @@
1
+ import { default as React } from 'react';
2
+ export interface FeedbackProviderProps {
3
+ children: React.ReactNode;
4
+ }
5
+ /**
6
+ * Unified feedback provider that combines dialogs, notifications, and loading providers.
7
+ * Simplifies setup by wrapping all three feedback mechanisms in a single component.
8
+ *
9
+ * @example
10
+ * ```tsx
11
+ * <FeedbackProvider>
12
+ * <App />
13
+ * </FeedbackProvider>
14
+ * ```
15
+ */
16
+ export declare function FeedbackProvider({ children }: FeedbackProviderProps): import("react/jsx-runtime").JSX.Element;
17
+ /**
18
+ * Unified hook to access all feedback services.
19
+ * Returns dialogs, notifications, and loading services.
20
+ *
21
+ * @example
22
+ * ```tsx
23
+ * const { dialogs, notifications, loading } = useFeedback();
24
+ *
25
+ * // Use dialog service
26
+ * await dialogs.confirm({ title: 'Delete?', message: 'Are you sure?' });
27
+ *
28
+ * // Use notification service
29
+ * notifications.success('Saved!');
30
+ *
31
+ * // Use loading service
32
+ * loading.start('save-operation');
33
+ * ```
34
+ */
35
+ export declare function useFeedback(): {
36
+ dialogs: import('..').DialogService;
37
+ notifications: import('..').NotificationService;
38
+ loading: import('..').LoadingService;
39
+ };
40
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/provider/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,MAAM,WAAW,qBAAqB;IACrC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC1B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,QAAQ,EAAE,EAAE,qBAAqB,2CAQnE;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,WAAW;;;;EAU1B"}