shared-features 0.0.3 → 0.0.5

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 (92) hide show
  1. package/README.md +2 -0
  2. package/dist/{AdBanner-D-KuNTje.cjs → AnnouncementModal-Bqy0pn3V.cjs} +432 -4
  3. package/dist/AnnouncementModal-Bqy0pn3V.cjs.map +1 -0
  4. package/dist/{AdBanner-Ben0vVXV.js → AnnouncementModal-sxH4K5gy.js} +434 -6
  5. package/dist/AnnouncementModal-sxH4K5gy.js.map +1 -0
  6. package/dist/admin-notifications-D9n9h-eY.cjs +362 -0
  7. package/dist/admin-notifications-D9n9h-eY.cjs.map +1 -0
  8. package/dist/admin-notifications-p1dy3zIP.js +363 -0
  9. package/dist/admin-notifications-p1dy3zIP.js.map +1 -0
  10. package/dist/{analytics-CdpCtTpu.js → analytics-40-S_fHC.js} +3 -2
  11. package/dist/{analytics-CdpCtTpu.js.map → analytics-40-S_fHC.js.map} +1 -1
  12. package/dist/{analytics--ZSO9ova.cjs → analytics-lEzOx2vl.cjs} +2 -1
  13. package/dist/{analytics--ZSO9ova.cjs.map → analytics-lEzOx2vl.cjs.map} +1 -1
  14. package/dist/broadcasts-3_WfQMNL.cjs +278 -0
  15. package/dist/broadcasts-3_WfQMNL.cjs.map +1 -0
  16. package/dist/broadcasts-DgZUzqMf.js +257 -0
  17. package/dist/broadcasts-DgZUzqMf.js.map +1 -0
  18. package/dist/components/ads/AdModal.d.ts.map +1 -1
  19. package/dist/components/index.cjs +23 -20
  20. package/dist/components/index.cjs.map +1 -1
  21. package/dist/components/index.d.ts +1 -0
  22. package/dist/components/index.d.ts.map +1 -1
  23. package/dist/components/index.js +4 -1
  24. package/dist/components/notifications/AnnouncementModal.d.ts +21 -0
  25. package/dist/components/notifications/AnnouncementModal.d.ts.map +1 -0
  26. package/dist/components/notifications/BroadcastBanner.d.ts +55 -0
  27. package/dist/components/notifications/BroadcastBanner.d.ts.map +1 -0
  28. package/dist/components/notifications/index.d.ts +11 -0
  29. package/dist/components/notifications/index.d.ts.map +1 -0
  30. package/dist/hooks/index.cjs +9 -1
  31. package/dist/hooks/index.cjs.map +1 -1
  32. package/dist/hooks/index.d.ts +2 -0
  33. package/dist/hooks/index.d.ts.map +1 -1
  34. package/dist/hooks/index.js +9 -1
  35. package/dist/hooks/index.js.map +1 -1
  36. package/dist/hooks/useBroadcasts.d.ts +122 -0
  37. package/dist/hooks/useBroadcasts.d.ts.map +1 -0
  38. package/dist/index.cjs +99 -22
  39. package/dist/index.cjs.map +1 -1
  40. package/dist/index.d.ts +2 -0
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +94 -17
  43. package/dist/index.js.map +1 -1
  44. package/dist/notifications/events/index.d.ts +14 -0
  45. package/dist/notifications/events/index.d.ts.map +1 -0
  46. package/dist/notifications/events/registry.d.ts +75 -0
  47. package/dist/notifications/events/registry.d.ts.map +1 -0
  48. package/dist/notifications/events/templates/engine.d.ts +57 -0
  49. package/dist/notifications/events/templates/engine.d.ts.map +1 -0
  50. package/dist/notifications/events/templates/standard.d.ts +20 -0
  51. package/dist/notifications/events/templates/standard.d.ts.map +1 -0
  52. package/dist/notifications/events/useNotificationEvents.d.ts +36 -0
  53. package/dist/notifications/events/useNotificationEvents.d.ts.map +1 -0
  54. package/dist/notifications/index.cjs +25 -0
  55. package/dist/notifications/index.cjs.map +1 -0
  56. package/dist/notifications/index.d.ts +9 -0
  57. package/dist/notifications/index.d.ts.map +1 -0
  58. package/dist/notifications/index.js +25 -0
  59. package/dist/notifications/index.js.map +1 -0
  60. package/dist/services/admin-notifications.d.ts +95 -0
  61. package/dist/services/admin-notifications.d.ts.map +1 -0
  62. package/dist/services/broadcasts.d.ts +55 -0
  63. package/dist/services/broadcasts.d.ts.map +1 -0
  64. package/dist/services/index.cjs +34 -1
  65. package/dist/services/index.cjs.map +1 -1
  66. package/dist/services/index.d.ts +2 -0
  67. package/dist/services/index.d.ts.map +1 -1
  68. package/dist/services/index.js +35 -2
  69. package/dist/services/index.js.map +1 -1
  70. package/dist/types/index.cjs +108 -0
  71. package/dist/types/index.cjs.map +1 -1
  72. package/dist/types/index.d.ts +1 -0
  73. package/dist/types/index.d.ts.map +1 -1
  74. package/dist/types/index.js +109 -1
  75. package/dist/types/index.js.map +1 -1
  76. package/dist/types/notifications.d.ts +634 -0
  77. package/dist/types/notifications.d.ts.map +1 -0
  78. package/dist/useBroadcasts-DzpCcbC8.js +161 -0
  79. package/dist/useBroadcasts-DzpCcbC8.js.map +1 -0
  80. package/dist/useBroadcasts-FP6ZrcY_.cjs +160 -0
  81. package/dist/useBroadcasts-FP6ZrcY_.cjs.map +1 -0
  82. package/dist/{useCampaigns-Dltisb9N.cjs → useCampaigns-BOZ9dDsG.cjs} +2 -2
  83. package/dist/{useCampaigns-Dltisb9N.cjs.map → useCampaigns-BOZ9dDsG.cjs.map} +1 -1
  84. package/dist/{useCampaigns-nwfsALsN.js → useCampaigns-D46b9zuf.js} +2 -2
  85. package/dist/{useCampaigns-nwfsALsN.js.map → useCampaigns-D46b9zuf.js.map} +1 -1
  86. package/dist/useNotificationEvents-BXeMqdak.cjs +954 -0
  87. package/dist/useNotificationEvents-BXeMqdak.cjs.map +1 -0
  88. package/dist/useNotificationEvents-D8DVxah1.js +955 -0
  89. package/dist/useNotificationEvents-D8DVxah1.js.map +1 -0
  90. package/package.json +13 -5
  91. package/dist/AdBanner-Ben0vVXV.js.map +0 -1
  92. package/dist/AdBanner-D-KuNTje.cjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useNotificationEvents-BXeMqdak.cjs","sources":["../src/notifications/events/templates/engine.ts","../src/notifications/events/templates/standard.ts","../src/notifications/events/registry.ts","../src/notifications/events/useNotificationEvents.ts"],"sourcesContent":["/**\n * Template Engine\n *\n * Simple template interpolation for notification messages.\n * Supports {{variable}} syntax for dynamic content.\n *\n * @author Ahsan Mahmood <aoneahsan@gmail.com>\n */\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface TemplateContext {\n [key: string]: string | number | boolean | undefined | null;\n}\n\nexport interface InterpolateOptions {\n /** Whether to throw on missing variables (default: false) */\n strict?: boolean;\n /** Default value for missing variables (default: '') */\n defaultValue?: string;\n /** Custom formatters for values */\n formatters?: Record<string, (value: unknown) => string>;\n}\n\n// ============================================================================\n// INTERPOLATION\n// ============================================================================\n\n/**\n * Interpolate template variables in a string\n *\n * @example\n * ```ts\n * interpolate('Hello, {{name}}!', { name: 'John' });\n * // => 'Hello, John!'\n *\n * interpolate('You have {{count}} items', { count: 5 });\n * // => 'You have 5 items'\n * ```\n */\nexport function interpolate(\n template: string,\n context: TemplateContext,\n options: InterpolateOptions = {}\n): string {\n const { strict = false, defaultValue = '', formatters = {} } = options;\n\n // Match {{variable}} or {{variable|formatter}}\n const pattern = /\\{\\{([^}|]+)(?:\\|([^}]+))?\\}\\}/g;\n\n return template.replace(pattern, (_match, variableName, formatterName) => {\n const trimmedName = variableName.trim();\n const value = context[trimmedName];\n\n // Handle missing values\n if (value === undefined || value === null) {\n if (strict) {\n throw new Error(`Missing template variable: ${trimmedName}`);\n }\n return defaultValue;\n }\n\n // Apply formatter if specified\n if (formatterName) {\n const formatter = formatters[formatterName.trim()];\n if (formatter) {\n return formatter(value);\n }\n }\n\n // Convert to string\n return String(value);\n });\n}\n\n/**\n * Extract all variable names from a template\n *\n * @example\n * ```ts\n * extractVariables('Hello, {{name}}! You have {{count}} items.');\n * // => ['name', 'count']\n * ```\n */\nexport function extractVariables(template: string): string[] {\n const pattern = /\\{\\{([^}|]+)(?:\\|[^}]+)?\\}\\}/g;\n const variables: string[] = [];\n let match;\n\n while ((match = pattern.exec(template)) !== null) {\n const matchResult = match[1];\n if (matchResult) {\n const variableName = matchResult.trim();\n if (!variables.includes(variableName)) {\n variables.push(variableName);\n }\n }\n }\n\n return variables;\n}\n\n/**\n * Validate that all required variables are provided\n */\nexport function validateContext(\n template: string,\n context: TemplateContext\n): { valid: boolean; missing: string[] } {\n const required = extractVariables(template);\n const missing = required.filter(\n (v) => context[v] === undefined || context[v] === null\n );\n\n return {\n valid: missing.length === 0,\n missing,\n };\n}\n\n// ============================================================================\n// BUILT-IN FORMATTERS\n// ============================================================================\n\nexport const defaultFormatters: Record<string, (value: unknown) => string> = {\n /**\n * Capitalize first letter\n */\n capitalize: (value) => {\n const str = String(value);\n return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();\n },\n\n /**\n * Convert to uppercase\n */\n upper: (value) => String(value).toUpperCase(),\n\n /**\n * Convert to lowercase\n */\n lower: (value) => String(value).toLowerCase(),\n\n /**\n * Format number with commas\n */\n number: (value) => {\n const num = Number(value);\n if (isNaN(num)) return String(value);\n return num.toLocaleString();\n },\n\n /**\n * Format as date\n */\n date: (value) => {\n const date = new Date(value as string | number);\n if (isNaN(date.getTime())) return String(value);\n return date.toLocaleDateString();\n },\n\n /**\n * Format as time\n */\n time: (value) => {\n const date = new Date(value as string | number);\n if (isNaN(date.getTime())) return String(value);\n return date.toLocaleTimeString();\n },\n\n /**\n * Format as datetime\n */\n datetime: (value) => {\n const date = new Date(value as string | number);\n if (isNaN(date.getTime())) return String(value);\n return date.toLocaleString();\n },\n\n /**\n * Truncate to 50 characters\n */\n truncate: (value) => {\n const str = String(value);\n return str.length > 50 ? str.substring(0, 47) + '...' : str;\n },\n\n /**\n * Join array with commas\n */\n list: (value) => {\n if (Array.isArray(value)) {\n return value.join(', ');\n }\n return String(value);\n },\n};\n\n/**\n * Interpolate with default formatters\n */\nexport function interpolateWithFormatters(\n template: string,\n context: TemplateContext,\n options: Omit<InterpolateOptions, 'formatters'> & {\n customFormatters?: Record<string, (value: unknown) => string>;\n } = {}\n): string {\n const { customFormatters = {}, ...restOptions } = options;\n\n return interpolate(template, context, {\n ...restOptions,\n formatters: { ...defaultFormatters, ...customFormatters },\n });\n}\n","/**\n * Standard Notification Templates\n *\n * Pre-defined templates for common notification events.\n * These can be customized or overridden by consumer projects.\n *\n * @author Ahsan Mahmood <aoneahsan@gmail.com>\n */\n\nimport type {\n NotificationTemplate,\n StandardEventType,\n NotificationCategory,\n} from '../../../types/notifications';\n\n// ============================================================================\n// ACCOUNT EVENT TEMPLATES\n// ============================================================================\n\nexport const ACCOUNT_TEMPLATES: NotificationTemplate[] = [\n {\n id: 'tpl_account_created',\n name: 'Account Created',\n eventType: 'ACCOUNT_CREATED',\n category: 'account',\n title: 'Welcome to {{appName}}!',\n message:\n 'Hi {{userName}}, your account has been created successfully. Start exploring all the features we have to offer.',\n variables: ['appName', 'userName'],\n type: 'success',\n isImportant: true,\n actionUrl: '/getting-started',\n actionText: 'Get Started',\n enabled: true,\n createdAt: new Date(),\n updatedAt: new Date(),\n },\n {\n id: 'tpl_account_welcome',\n name: 'Welcome Message',\n eventType: 'ACCOUNT_WELCOME',\n category: 'account',\n title: 'Tips to get started with {{appName}}',\n message:\n 'Here are some tips to help you get the most out of {{appName}}. Check out our quick start guide!',\n variables: ['appName'],\n type: 'info',\n isImportant: false,\n actionUrl: '/help/quick-start',\n actionText: 'Quick Start Guide',\n enabled: true,\n createdAt: new Date(),\n updatedAt: new Date(),\n },\n {\n id: 'tpl_new_device_signin',\n name: 'New Device Sign-in',\n eventType: 'NEW_DEVICE_SIGNIN',\n category: 'account',\n title: 'New Sign-in Detected',\n message:\n 'Your account was accessed from a new device: {{deviceName}}{{#location}} in {{location}}{{/location}}. If this wasn\\'t you, please secure your account.',\n variables: ['deviceName', 'location'],\n type: 'warning',\n isImportant: true,\n actionUrl: '/settings/security',\n actionText: 'Review Activity',\n enabled: true,\n createdAt: new Date(),\n updatedAt: new Date(),\n },\n {\n id: 'tpl_password_changed',\n name: 'Password Changed',\n eventType: 'PASSWORD_CHANGED',\n category: 'account',\n title: 'Password Changed Successfully',\n message:\n 'Your password was changed on {{timestamp}}. If you didn\\'t make this change, please contact support immediately.',\n variables: ['timestamp'],\n type: 'info',\n isImportant: true,\n actionUrl: '/settings/security',\n actionText: 'Security Settings',\n enabled: true,\n createdAt: new Date(),\n updatedAt: new Date(),\n },\n {\n id: 'tpl_profile_updated',\n name: 'Profile Updated',\n eventType: 'PROFILE_UPDATED',\n category: 'account',\n title: 'Profile Updated',\n message: 'Your profile has been updated: {{changes}}.',\n variables: ['changes'],\n type: 'success',\n isImportant: false,\n enabled: true,\n createdAt: new Date(),\n updatedAt: new Date(),\n },\n];\n\n// ============================================================================\n// REPORT EVENT TEMPLATES\n// ============================================================================\n\nexport const REPORT_TEMPLATES: NotificationTemplate[] = [\n {\n id: 'tpl_weekly_summary',\n name: 'Weekly Summary',\n eventType: 'WEEKLY_SUMMARY',\n category: 'report',\n title: 'Your Weekly Summary',\n message:\n 'Here\\'s your activity summary for the week of {{weekStart}}: {{summary}}',\n variables: ['weekStart', 'summary'],\n type: 'info',\n isImportant: false,\n actionUrl: '/reports/weekly',\n actionText: 'View Full Report',\n enabled: true,\n createdAt: new Date(),\n updatedAt: new Date(),\n },\n {\n id: 'tpl_monthly_summary',\n name: 'Monthly Summary',\n eventType: 'MONTHLY_SUMMARY',\n category: 'report',\n title: 'Your Monthly Summary',\n message:\n 'Your activity summary for {{monthName}} is ready. {{summary}}',\n variables: ['monthName', 'summary'],\n type: 'info',\n isImportant: false,\n actionUrl: '/reports/monthly',\n actionText: 'View Full Report',\n enabled: true,\n createdAt: new Date(),\n updatedAt: new Date(),\n },\n {\n id: 'tpl_quarterly_summary',\n name: 'Quarterly Summary',\n eventType: 'QUARTERLY_SUMMARY',\n category: 'report',\n title: 'Your Quarterly Review',\n message:\n 'Your Q{{quarter}} {{year}} summary is ready. See how you\\'ve progressed!',\n variables: ['quarter', 'year'],\n type: 'milestone',\n isImportant: true,\n actionUrl: '/reports/quarterly',\n actionText: 'View Report',\n enabled: true,\n createdAt: new Date(),\n updatedAt: new Date(),\n },\n {\n id: 'tpl_yearly_summary',\n name: 'Yearly Summary',\n eventType: 'YEARLY_SUMMARY',\n category: 'report',\n title: 'Your Year in Review',\n message:\n 'Congratulations on another great year! Your {{year}} summary is ready.',\n variables: ['year'],\n type: 'milestone',\n isImportant: true,\n actionUrl: '/reports/yearly',\n actionText: 'View Year in Review',\n enabled: true,\n createdAt: new Date(),\n updatedAt: new Date(),\n },\n];\n\n// ============================================================================\n// PROMOTIONAL EVENT TEMPLATES\n// ============================================================================\n\nexport const PROMOTIONAL_TEMPLATES: NotificationTemplate[] = [\n {\n id: 'tpl_app_tip',\n name: 'App Tip',\n eventType: 'APP_TIP',\n category: 'promotional',\n title: 'Tip: {{tipTitle}}',\n message: '{{tipBody}}',\n variables: ['tipTitle', 'tipBody'],\n type: 'info',\n isImportant: false,\n enabled: true,\n createdAt: new Date(),\n updatedAt: new Date(),\n },\n {\n id: 'tpl_hidden_feature',\n name: 'Hidden Feature',\n eventType: 'HIDDEN_FEATURE',\n category: 'promotional',\n title: 'Did you know?',\n message: '{{featureDescription}}',\n variables: ['featureName', 'featureDescription'],\n type: 'info',\n isImportant: false,\n actionUrl: '{{featureUrl}}',\n actionText: 'Try it now',\n enabled: true,\n createdAt: new Date(),\n updatedAt: new Date(),\n },\n {\n id: 'tpl_new_feature',\n name: 'New Feature Announcement',\n eventType: 'NEW_FEATURE_ANNOUNCEMENT',\n category: 'promotional',\n title: 'New Feature: {{featureName}}',\n message: '{{featureDescription}}',\n variables: ['featureName', 'featureDescription'],\n type: 'announcement',\n isImportant: true,\n actionUrl: '{{featureUrl}}',\n actionText: 'Check it out',\n enabled: true,\n createdAt: new Date(),\n updatedAt: new Date(),\n },\n {\n id: 'tpl_holiday_greeting',\n name: 'Holiday Greeting',\n eventType: 'HOLIDAY_GREETING',\n category: 'promotional',\n title: 'Happy {{holidayName}}!',\n message: '{{greetingMessage}}',\n variables: ['holidayName', 'greetingMessage'],\n type: 'info',\n isImportant: false,\n enabled: true,\n createdAt: new Date(),\n updatedAt: new Date(),\n },\n];\n\n// ============================================================================\n// SYSTEM EVENT TEMPLATES\n// ============================================================================\n\nexport const SYSTEM_TEMPLATES: NotificationTemplate[] = [\n {\n id: 'tpl_system_maintenance',\n name: 'System Maintenance',\n eventType: 'SYSTEM_MAINTENANCE',\n category: 'system',\n title: 'Scheduled Maintenance',\n message:\n 'We\\'ll be performing maintenance on {{date}} from {{startTime}} to {{endTime}} ({{timezone}}). Some features may be unavailable.',\n variables: ['date', 'startTime', 'endTime', 'timezone'],\n type: 'warning',\n isImportant: true,\n enabled: true,\n createdAt: new Date(),\n updatedAt: new Date(),\n },\n {\n id: 'tpl_app_update',\n name: 'App Update Available',\n eventType: 'APP_UPDATE_AVAILABLE',\n category: 'system',\n title: 'Update Available',\n message:\n 'A new version ({{version}}) is available with improvements and bug fixes.',\n variables: ['version'],\n type: 'info',\n isImportant: false,\n actionUrl: '/update',\n actionText: 'Update Now',\n enabled: true,\n createdAt: new Date(),\n updatedAt: new Date(),\n },\n {\n id: 'tpl_data_export_ready',\n name: 'Data Export Ready',\n eventType: 'DATA_EXPORT_READY',\n category: 'system',\n title: 'Your Data Export is Ready',\n message:\n 'Your requested data export is ready for download. The link will expire in {{expiryHours}} hours.',\n variables: ['expiryHours'],\n type: 'success',\n isImportant: true,\n actionUrl: '{{downloadUrl}}',\n actionText: 'Download',\n enabled: true,\n createdAt: new Date(),\n updatedAt: new Date(),\n },\n];\n\n// ============================================================================\n// ACTIVITY EVENT TEMPLATES\n// ============================================================================\n\nexport const ACTIVITY_TEMPLATES: NotificationTemplate[] = [\n {\n id: 'tpl_item_created',\n name: 'Item Created',\n eventType: 'ITEM_CREATED',\n category: 'activity',\n title: '{{entityType}} Created',\n message: 'Your {{entityType}} \"{{entityName}}\" has been created successfully.',\n variables: ['entityType', 'entityName'],\n type: 'success',\n isImportant: false,\n enabled: true,\n createdAt: new Date(),\n updatedAt: new Date(),\n },\n {\n id: 'tpl_item_updated',\n name: 'Item Updated',\n eventType: 'ITEM_UPDATED',\n category: 'activity',\n title: '{{entityType}} Updated',\n message: 'Your {{entityType}} \"{{entityName}}\" has been updated.',\n variables: ['entityType', 'entityName'],\n type: 'info',\n isImportant: false,\n enabled: true,\n createdAt: new Date(),\n updatedAt: new Date(),\n },\n {\n id: 'tpl_item_deleted',\n name: 'Item Deleted',\n eventType: 'ITEM_DELETED',\n category: 'activity',\n title: '{{entityType}} Deleted',\n message: 'Your {{entityType}} \"{{entityName}}\" has been deleted.',\n variables: ['entityType', 'entityName'],\n type: 'info',\n isImportant: false,\n enabled: true,\n createdAt: new Date(),\n updatedAt: new Date(),\n },\n {\n id: 'tpl_bulk_operation',\n name: 'Bulk Operation Complete',\n eventType: 'BULK_OPERATION_COMPLETE',\n category: 'activity',\n title: 'Bulk Operation Complete',\n message:\n 'Successfully processed {{successCount}} of {{totalCount}} items. {{#failedCount}}{{failedCount}} items failed.{{/failedCount}}',\n variables: ['successCount', 'totalCount', 'failedCount'],\n type: 'success',\n isImportant: false,\n enabled: true,\n createdAt: new Date(),\n updatedAt: new Date(),\n },\n];\n\n// ============================================================================\n// ALL TEMPLATES\n// ============================================================================\n\nexport const ALL_STANDARD_TEMPLATES: NotificationTemplate[] = [\n ...ACCOUNT_TEMPLATES,\n ...REPORT_TEMPLATES,\n ...PROMOTIONAL_TEMPLATES,\n ...SYSTEM_TEMPLATES,\n ...ACTIVITY_TEMPLATES,\n];\n\n/**\n * Get template by event type\n */\nexport function getTemplateByEventType(\n eventType: StandardEventType | string\n): NotificationTemplate | undefined {\n return ALL_STANDARD_TEMPLATES.find((t) => t.eventType === eventType);\n}\n\n/**\n * Get templates by category\n */\nexport function getTemplatesByCategory(\n category: NotificationCategory\n): NotificationTemplate[] {\n return ALL_STANDARD_TEMPLATES.filter((t) => t.category === category);\n}\n\n/**\n * Get all enabled templates\n */\nexport function getEnabledTemplates(): NotificationTemplate[] {\n return ALL_STANDARD_TEMPLATES.filter((t) => t.enabled);\n}\n","/**\n * Event Registry\n *\n * Manages notification event definitions and provides a centralized\n * registry for all standard and custom events.\n *\n * @author Ahsan Mahmood <aoneahsan@gmail.com>\n */\n\nimport type {\n NotificationEventDefinition,\n StandardEventType,\n NotificationCategory,\n} from '../../types/notifications';\n\n// ============================================================================\n// STANDARD EVENT DEFINITIONS\n// ============================================================================\n\n/**\n * Standard event definitions with metadata\n */\nexport const STANDARD_EVENTS: Record<StandardEventType, NotificationEventDefinition> = {\n // Account Events\n ACCOUNT_CREATED: {\n type: 'ACCOUNT_CREATED',\n name: 'Account Created',\n description: 'Triggered when a new user account is created',\n category: 'account',\n notificationType: 'success',\n priority: 'high',\n variables: ['appName', 'userName', 'email'],\n defaultEnabled: true,\n },\n ACCOUNT_WELCOME: {\n type: 'ACCOUNT_WELCOME',\n name: 'Welcome Message',\n description: 'Sent to new users with getting started tips',\n category: 'account',\n notificationType: 'info',\n priority: 'normal',\n variables: ['appName', 'userName'],\n defaultEnabled: true,\n },\n NEW_DEVICE_SIGNIN: {\n type: 'NEW_DEVICE_SIGNIN',\n name: 'New Device Sign-in',\n description: 'Alerts user when account is accessed from a new device',\n category: 'account',\n notificationType: 'warning',\n priority: 'high',\n variables: ['deviceName', 'location', 'timestamp'],\n defaultEnabled: true,\n },\n PASSWORD_CHANGED: {\n type: 'PASSWORD_CHANGED',\n name: 'Password Changed',\n description: 'Confirms password change to user',\n category: 'account',\n notificationType: 'info',\n priority: 'high',\n variables: ['timestamp'],\n defaultEnabled: true,\n },\n PROFILE_UPDATED: {\n type: 'PROFILE_UPDATED',\n name: 'Profile Updated',\n description: 'Confirms profile changes to user',\n category: 'account',\n notificationType: 'success',\n priority: 'low',\n variables: ['changes'],\n defaultEnabled: true,\n },\n ACCOUNT_DELETED: {\n type: 'ACCOUNT_DELETED',\n name: 'Account Deleted',\n description: 'Confirms account deletion',\n category: 'account',\n notificationType: 'info',\n priority: 'high',\n variables: ['deletionDate'],\n defaultEnabled: true,\n },\n\n // Report Events\n DAILY_SUMMARY: {\n type: 'DAILY_SUMMARY',\n name: 'Daily Summary',\n description: 'Daily activity summary',\n category: 'report',\n notificationType: 'info',\n priority: 'low',\n variables: ['date', 'summary'],\n defaultEnabled: false,\n },\n WEEKLY_SUMMARY: {\n type: 'WEEKLY_SUMMARY',\n name: 'Weekly Summary',\n description: 'Weekly activity summary',\n category: 'report',\n notificationType: 'info',\n priority: 'normal',\n variables: ['weekStart', 'weekEnd', 'summary'],\n defaultEnabled: true,\n },\n MONTHLY_SUMMARY: {\n type: 'MONTHLY_SUMMARY',\n name: 'Monthly Summary',\n description: 'Monthly activity summary',\n category: 'report',\n notificationType: 'info',\n priority: 'normal',\n variables: ['monthName', 'year', 'summary'],\n defaultEnabled: true,\n },\n QUARTERLY_SUMMARY: {\n type: 'QUARTERLY_SUMMARY',\n name: 'Quarterly Summary',\n description: 'Quarterly activity review',\n category: 'report',\n notificationType: 'milestone',\n priority: 'normal',\n variables: ['quarter', 'year', 'summary'],\n defaultEnabled: true,\n },\n YEARLY_SUMMARY: {\n type: 'YEARLY_SUMMARY',\n name: 'Yearly Summary',\n description: 'Year-in-review summary',\n category: 'report',\n notificationType: 'milestone',\n priority: 'high',\n variables: ['year', 'summary'],\n defaultEnabled: true,\n },\n\n // Promotional Events\n APP_TIP: {\n type: 'APP_TIP',\n name: 'App Tip',\n description: 'Helpful tips about app features',\n category: 'promotional',\n notificationType: 'info',\n priority: 'low',\n variables: ['tipTitle', 'tipBody', 'tipUrl'],\n defaultEnabled: true,\n },\n HIDDEN_FEATURE: {\n type: 'HIDDEN_FEATURE',\n name: 'Hidden Feature',\n description: 'Reveals lesser-known features to users',\n category: 'promotional',\n notificationType: 'info',\n priority: 'low',\n variables: ['featureName', 'featureDescription', 'featureUrl'],\n defaultEnabled: true,\n },\n NEW_FEATURE_ANNOUNCEMENT: {\n type: 'NEW_FEATURE_ANNOUNCEMENT',\n name: 'New Feature Announcement',\n description: 'Announces new features to users',\n category: 'promotional',\n notificationType: 'announcement',\n priority: 'high',\n variables: ['featureName', 'featureDescription', 'featureUrl'],\n defaultEnabled: true,\n },\n HOLIDAY_GREETING: {\n type: 'HOLIDAY_GREETING',\n name: 'Holiday Greeting',\n description: 'Seasonal and holiday greetings',\n category: 'promotional',\n notificationType: 'info',\n priority: 'low',\n variables: ['holidayName', 'greetingMessage'],\n defaultEnabled: true,\n },\n\n // System Events\n SYSTEM_MAINTENANCE: {\n type: 'SYSTEM_MAINTENANCE',\n name: 'System Maintenance',\n description: 'Scheduled maintenance notifications',\n category: 'system',\n notificationType: 'warning',\n priority: 'high',\n variables: ['date', 'startTime', 'endTime', 'timezone', 'description'],\n defaultEnabled: true,\n },\n APP_UPDATE_AVAILABLE: {\n type: 'APP_UPDATE_AVAILABLE',\n name: 'App Update Available',\n description: 'New version available notification',\n category: 'system',\n notificationType: 'info',\n priority: 'normal',\n variables: ['version', 'releaseNotes'],\n defaultEnabled: true,\n },\n DATA_EXPORT_READY: {\n type: 'DATA_EXPORT_READY',\n name: 'Data Export Ready',\n description: 'User data export is ready for download',\n category: 'system',\n notificationType: 'success',\n priority: 'high',\n variables: ['downloadUrl', 'expiryHours'],\n defaultEnabled: true,\n },\n\n // Activity Events\n ITEM_CREATED: {\n type: 'ITEM_CREATED',\n name: 'Item Created',\n description: 'Generic item creation notification',\n category: 'activity',\n notificationType: 'success',\n priority: 'low',\n variables: ['entityType', 'entityName', 'entityId'],\n defaultEnabled: true,\n },\n ITEM_UPDATED: {\n type: 'ITEM_UPDATED',\n name: 'Item Updated',\n description: 'Generic item update notification',\n category: 'activity',\n notificationType: 'info',\n priority: 'low',\n variables: ['entityType', 'entityName', 'entityId', 'changes'],\n defaultEnabled: true,\n },\n ITEM_DELETED: {\n type: 'ITEM_DELETED',\n name: 'Item Deleted',\n description: 'Generic item deletion notification',\n category: 'activity',\n notificationType: 'info',\n priority: 'low',\n variables: ['entityType', 'entityName'],\n defaultEnabled: true,\n },\n BULK_OPERATION_COMPLETE: {\n type: 'BULK_OPERATION_COMPLETE',\n name: 'Bulk Operation Complete',\n description: 'Bulk operation completion notification',\n category: 'activity',\n notificationType: 'success',\n priority: 'normal',\n variables: ['operationType', 'successCount', 'totalCount', 'failedCount'],\n defaultEnabled: true,\n },\n};\n\n// ============================================================================\n// REGISTRY CLASS\n// ============================================================================\n\n/**\n * Event registry for managing notification events\n */\nclass EventRegistry {\n private events: Map<string, NotificationEventDefinition> = new Map();\n private customEvents: Map<string, NotificationEventDefinition> = new Map();\n\n constructor() {\n // Register all standard events\n Object.values(STANDARD_EVENTS).forEach((event) => {\n this.events.set(event.type, event);\n });\n }\n\n /**\n * Register a custom event\n */\n register(event: NotificationEventDefinition): void {\n this.customEvents.set(event.type, event);\n this.events.set(event.type, event);\n }\n\n /**\n * Unregister a custom event\n */\n unregister(eventType: string): boolean {\n if (this.customEvents.has(eventType)) {\n this.customEvents.delete(eventType);\n this.events.delete(eventType);\n return true;\n }\n return false;\n }\n\n /**\n * Get event definition by type\n */\n get(eventType: string): NotificationEventDefinition | undefined {\n return this.events.get(eventType);\n }\n\n /**\n * Check if event type exists\n */\n has(eventType: string): boolean {\n return this.events.has(eventType);\n }\n\n /**\n * Get all events\n */\n getAll(): NotificationEventDefinition[] {\n return Array.from(this.events.values());\n }\n\n /**\n * Get events by category\n */\n getByCategory(category: NotificationCategory): NotificationEventDefinition[] {\n return this.getAll().filter((e) => e.category === category);\n }\n\n /**\n * Get all custom events\n */\n getCustomEvents(): NotificationEventDefinition[] {\n return Array.from(this.customEvents.values());\n }\n\n /**\n * Get all standard events\n */\n getStandardEvents(): NotificationEventDefinition[] {\n return Object.values(STANDARD_EVENTS);\n }\n\n /**\n * Check if event type is standard\n */\n isStandardEvent(eventType: string): boolean {\n return eventType in STANDARD_EVENTS;\n }\n\n /**\n * Reset registry to standard events only\n */\n reset(): void {\n this.customEvents.clear();\n this.events.clear();\n Object.values(STANDARD_EVENTS).forEach((event) => {\n this.events.set(event.type, event);\n });\n }\n}\n\n// ============================================================================\n// SINGLETON INSTANCE\n// ============================================================================\n\n/**\n * Global event registry instance\n */\nexport const eventRegistry = new EventRegistry();\n\n// ============================================================================\n// HELPER FUNCTIONS\n// ============================================================================\n\n/**\n * Get event definition\n */\nexport function getEventDefinition(\n eventType: StandardEventType | string\n): NotificationEventDefinition | undefined {\n return eventRegistry.get(eventType);\n}\n\n/**\n * Get events by category\n */\nexport function getEventsByCategory(\n category: NotificationCategory\n): NotificationEventDefinition[] {\n return eventRegistry.getByCategory(category);\n}\n\n/**\n * Register a custom event\n */\nexport function registerCustomEvent(\n event: NotificationEventDefinition\n): void {\n eventRegistry.register(event);\n}\n\n/**\n * Get all event types\n */\nexport function getAllEventTypes(): string[] {\n return eventRegistry.getAll().map((e) => e.type);\n}\n","/**\n * useNotificationEvents Hook\n *\n * React hook for triggering notification events.\n * Used by consumer projects to create notifications from standard events.\n *\n * @author Ahsan Mahmood <aoneahsan@gmail.com>\n */\n\nimport { useCallback } from 'react';\nimport { getEventDefinition } from './registry';\nimport { getTemplateByEventType } from './templates/standard';\nimport { interpolate } from './templates/engine';\nimport type {\n NotificationEventPayload,\n CreateUserNotificationInput,\n UseNotificationEventsReturn,\n} from '../../types/notifications';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface UseNotificationEventsOptions {\n /** App name for templates */\n appName: string;\n /** User ID for notifications */\n userId?: string;\n /** Callback to create notification in project's Firebase */\n onCreateNotification: (input: CreateUserNotificationInput) => Promise<string>;\n /** Whether to log events (debug mode) */\n debug?: boolean;\n}\n\n// ============================================================================\n// HOOK\n// ============================================================================\n\n/**\n * Hook to trigger notification events\n *\n * @example\n * ```tsx\n * const { trigger, triggerAccountCreated } = useNotificationEvents({\n * appName: 'My App',\n * userId: currentUser?.id,\n * onCreateNotification: notificationService.create,\n * });\n *\n * // On user signup\n * await triggerAccountCreated({ userName: 'John', email: 'john@example.com' });\n *\n * // Generic trigger\n * await trigger({\n * type: 'ITEM_CREATED',\n * userId: currentUser.id,\n * data: { entityType: 'Task', entityName: 'My Task' },\n * });\n * ```\n */\nexport function useNotificationEvents(\n options: UseNotificationEventsOptions\n): UseNotificationEventsReturn {\n const { appName, userId, onCreateNotification, debug = false } = options;\n\n /**\n * Process an event and create a notification\n */\n const processEvent = useCallback(\n async (payload: NotificationEventPayload): Promise<void> => {\n const { type, userId: payloadUserId, data, titleOverride, messageOverride, actionUrl, actionText, metadata } = payload;\n\n const targetUserId = payloadUserId || userId;\n if (!targetUserId) {\n if (debug) {\n console.warn('[notification-events] No userId provided for event:', type);\n }\n return;\n }\n\n // Get event definition\n const eventDef = getEventDefinition(type);\n if (!eventDef) {\n if (debug) {\n console.warn('[notification-events] Unknown event type:', type);\n }\n return;\n }\n\n // Get template\n const template = getTemplateByEventType(type);\n\n // Build context for interpolation\n const context = {\n appName,\n ...data,\n };\n\n // Determine title and message\n let title: string;\n let message: string;\n\n if (titleOverride) {\n title = titleOverride;\n } else if (template) {\n title = interpolate(template.title, context);\n } else {\n title = eventDef.name;\n }\n\n if (messageOverride) {\n message = messageOverride;\n } else if (template) {\n message = interpolate(template.message, context);\n } else {\n message = `${eventDef.description}`;\n }\n\n // Build notification input\n const notificationInput: CreateUserNotificationInput = {\n userId: targetUserId,\n title,\n message,\n type: template?.type || eventDef.notificationType,\n category: eventDef.category,\n source: 'event',\n eventType: type,\n isImportant: template?.isImportant,\n actionUrl: actionUrl || (template?.actionUrl ? interpolate(template.actionUrl, context) : undefined),\n actionText: actionText || template?.actionText,\n metadata: {\n ...metadata,\n eventData: data,\n },\n };\n\n if (debug) {\n console.log('[notification-events] Creating notification:', notificationInput);\n }\n\n // Create the notification\n await onCreateNotification(notificationInput);\n },\n [appName, userId, onCreateNotification, debug]\n );\n\n /**\n * Main trigger function\n */\n const trigger = useCallback(\n async (payload: NotificationEventPayload): Promise<void> => {\n await processEvent(payload);\n },\n [processEvent]\n );\n\n // ============================================================================\n // CONVENIENCE METHODS\n // ============================================================================\n\n const triggerAccountCreated = useCallback(\n async (data: { userName: string; email: string }): Promise<void> => {\n if (!userId) return;\n await trigger({\n type: 'ACCOUNT_CREATED',\n userId,\n data,\n });\n },\n [userId, trigger]\n );\n\n const triggerNewDeviceSignin = useCallback(\n async (data: { deviceName: string; location?: string }): Promise<void> => {\n if (!userId) return;\n await trigger({\n type: 'NEW_DEVICE_SIGNIN',\n userId,\n data: {\n ...data,\n timestamp: new Date().toISOString(),\n },\n });\n },\n [userId, trigger]\n );\n\n const triggerPasswordChanged = useCallback(async (): Promise<void> => {\n if (!userId) return;\n await trigger({\n type: 'PASSWORD_CHANGED',\n userId,\n data: {\n timestamp: new Date().toLocaleString(),\n },\n });\n }, [userId, trigger]);\n\n const triggerProfileUpdated = useCallback(\n async (data: { changes: string[] }): Promise<void> => {\n if (!userId) return;\n await trigger({\n type: 'PROFILE_UPDATED',\n userId,\n data: {\n changes: data.changes.join(', '),\n },\n });\n },\n [userId, trigger]\n );\n\n const triggerCrudEvent = useCallback(\n async (data: {\n action: 'created' | 'updated' | 'deleted';\n entityType: string;\n entityName: string;\n }): Promise<void> => {\n if (!userId) return;\n\n const eventTypeMap = {\n created: 'ITEM_CREATED',\n updated: 'ITEM_UPDATED',\n deleted: 'ITEM_DELETED',\n } as const;\n\n await trigger({\n type: eventTypeMap[data.action],\n userId,\n data: {\n entityType: data.entityType,\n entityName: data.entityName,\n },\n });\n },\n [userId, trigger]\n );\n\n const triggerAppTip = useCallback(\n async (data: { tipId: string; title: string; body: string }): Promise<void> => {\n if (!userId) return;\n await trigger({\n type: 'APP_TIP',\n userId,\n data: {\n tipTitle: data.title,\n tipBody: data.body,\n },\n metadata: {\n tipId: data.tipId,\n },\n });\n },\n [userId, trigger]\n );\n\n return {\n trigger,\n triggerAccountCreated,\n triggerNewDeviceSignin,\n triggerPasswordChanged,\n triggerProfileUpdated,\n triggerCrudEvent,\n triggerAppTip,\n };\n}\n\nexport default useNotificationEvents;\n"],"names":["useCallback"],"mappings":"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"}