@flamingo-stack/openframe-frontend-core 0.0.404-snapshot.20260711053526 → 0.0.404

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 (147) hide show
  1. package/dist/{chunk-F3YLM5PO.js → chunk-3I4IZYHM.js} +3 -3
  2. package/dist/{chunk-QYTGHN2T.js → chunk-5Z5GXXRU.js} +4 -4
  3. package/dist/{chunk-DHIYBC5Z.cjs → chunk-6MO5HF6P.cjs} +32 -32
  4. package/dist/{chunk-DHIYBC5Z.cjs.map → chunk-6MO5HF6P.cjs.map} +1 -1
  5. package/dist/{chunk-UIAQXIA6.js → chunk-A636Y7GU.js} +5 -5
  6. package/dist/{chunk-BK7QCB5J.js → chunk-AMPQKNAX.js} +6 -6
  7. package/dist/{chunk-ACJ4CM6H.cjs → chunk-CRUPO3MR.cjs} +93 -93
  8. package/dist/{chunk-ACJ4CM6H.cjs.map → chunk-CRUPO3MR.cjs.map} +1 -1
  9. package/dist/{chunk-E6YHDT3D.js → chunk-DH6HTYOV.js} +2 -6
  10. package/dist/chunk-DH6HTYOV.js.map +1 -0
  11. package/dist/{chunk-VFWEFR3Q.cjs → chunk-FFWIUNOT.cjs} +40 -40
  12. package/dist/{chunk-VFWEFR3Q.cjs.map → chunk-FFWIUNOT.cjs.map} +1 -1
  13. package/dist/{chunk-FFYEDIAG.cjs → chunk-G3QYCV63.cjs} +441 -499
  14. package/dist/chunk-G3QYCV63.cjs.map +1 -0
  15. package/dist/{chunk-ELLTTMPE.cjs → chunk-G4YLKA7O.cjs} +5 -5
  16. package/dist/{chunk-ELLTTMPE.cjs.map → chunk-G4YLKA7O.cjs.map} +1 -1
  17. package/dist/{chunk-BX3R44MR.cjs → chunk-GA5AN24T.cjs} +2 -2
  18. package/dist/chunk-GA5AN24T.cjs.map +1 -0
  19. package/dist/{chunk-GT7AJXKH.js → chunk-GYFUGMNM.js} +2 -2
  20. package/dist/{chunk-5XZEY34X.js → chunk-HBO2DMX4.js} +3 -3
  21. package/dist/{chunk-WJRPMULP.js → chunk-HGKWTKW7.js} +2 -2
  22. package/dist/chunk-HGKWTKW7.js.map +1 -0
  23. package/dist/{chunk-CCIBZ7TO.cjs → chunk-J4XR6YYZ.cjs} +6 -10
  24. package/dist/chunk-J4XR6YYZ.cjs.map +1 -0
  25. package/dist/{chunk-V4MOB3AD.cjs → chunk-KVB7SHXY.cjs} +12 -12
  26. package/dist/{chunk-V4MOB3AD.cjs.map → chunk-KVB7SHXY.cjs.map} +1 -1
  27. package/dist/{chunk-6OQ7YOX5.cjs → chunk-M7LIGEAX.cjs} +33 -33
  28. package/dist/{chunk-6OQ7YOX5.cjs.map → chunk-M7LIGEAX.cjs.map} +1 -1
  29. package/dist/{chunk-PNJ5LMVK.js → chunk-MTBFE3JF.js} +2 -16
  30. package/dist/chunk-MTBFE3JF.js.map +1 -0
  31. package/dist/{chunk-3XCNFTFV.js → chunk-NOWXUQWF.js} +3 -3
  32. package/dist/{chunk-WEZIVLCO.cjs → chunk-OJ4HFM3I.cjs} +18 -18
  33. package/dist/{chunk-WEZIVLCO.cjs.map → chunk-OJ4HFM3I.cjs.map} +1 -1
  34. package/dist/{chunk-M6BGJVDY.cjs → chunk-PFQQ5H6G.cjs} +19 -19
  35. package/dist/{chunk-M6BGJVDY.cjs.map → chunk-PFQQ5H6G.cjs.map} +1 -1
  36. package/dist/{chunk-QAFRLO5N.cjs → chunk-Q3AO2QWK.cjs} +4 -18
  37. package/dist/chunk-Q3AO2QWK.cjs.map +1 -0
  38. package/dist/{chunk-LREN3G7R.cjs → chunk-QXAHXMPD.cjs} +12 -12
  39. package/dist/{chunk-LREN3G7R.cjs.map → chunk-QXAHXMPD.cjs.map} +1 -1
  40. package/dist/{chunk-RC35ITSR.js → chunk-R6SMQ2CO.js} +6 -6
  41. package/dist/{chunk-RIGB7LP7.js → chunk-RNKXG55J.js} +4 -4
  42. package/dist/{chunk-FOJRR647.cjs → chunk-S4ZHBKGS.cjs} +73 -73
  43. package/dist/{chunk-FOJRR647.cjs.map → chunk-S4ZHBKGS.cjs.map} +1 -1
  44. package/dist/{chunk-BS6O4HLJ.cjs → chunk-TBXE5S6P.cjs} +40 -40
  45. package/dist/{chunk-BS6O4HLJ.cjs.map → chunk-TBXE5S6P.cjs.map} +1 -1
  46. package/dist/{chunk-ICJRSNBM.js → chunk-TTUQSOBL.js} +3 -61
  47. package/dist/chunk-TTUQSOBL.js.map +1 -0
  48. package/dist/{chunk-UN2BJ7XW.js → chunk-YORONSXG.js} +3 -3
  49. package/dist/{chunk-Q2KKEE6W.js → chunk-YXOWUHGQ.js} +6 -6
  50. package/dist/components/announcement-bar.d.ts +1 -27
  51. package/dist/components/announcement-bar.d.ts.map +1 -1
  52. package/dist/components/case-studies/index.cjs +10 -10
  53. package/dist/components/case-studies/index.js +4 -4
  54. package/dist/components/chat/index.cjs +4 -4
  55. package/dist/components/chat/index.js +3 -3
  56. package/dist/components/contact/index.cjs +5 -5
  57. package/dist/components/contact/index.js +4 -4
  58. package/dist/components/docs/index.cjs +7 -7
  59. package/dist/components/docs/index.js +6 -6
  60. package/dist/components/embeds/index.cjs +5 -5
  61. package/dist/components/embeds/index.js +4 -4
  62. package/dist/components/faq/index.cjs +6 -6
  63. package/dist/components/faq/index.js +5 -5
  64. package/dist/components/features/index.cjs +4 -4
  65. package/dist/components/features/index.js +3 -3
  66. package/dist/components/help-center-pages/index.cjs +23 -23
  67. package/dist/components/help-center-pages/index.js +14 -14
  68. package/dist/components/index.cjs +299 -274
  69. package/dist/components/index.cjs.map +1 -1
  70. package/dist/components/index.js +135 -110
  71. package/dist/components/index.js.map +1 -1
  72. package/dist/components/navigation/index.cjs +4 -4
  73. package/dist/components/navigation/index.js +3 -3
  74. package/dist/components/onboarding-guides/index.cjs +8 -8
  75. package/dist/components/onboarding-guides/index.js +7 -7
  76. package/dist/components/related-content/index.cjs +6 -6
  77. package/dist/components/related-content/index.js +5 -5
  78. package/dist/components/tickets/index.cjs +7 -7
  79. package/dist/components/tickets/index.js +6 -6
  80. package/dist/components/ui/file-manager/index.cjs +50 -50
  81. package/dist/components/ui/file-manager/index.js +1 -1
  82. package/dist/components/ui/index.cjs +4 -4
  83. package/dist/components/ui/index.js +3 -3
  84. package/dist/hooks/api-hooks.d.ts +4 -0
  85. package/dist/hooks/api-hooks.d.ts.map +1 -1
  86. package/dist/hooks/index.cjs +2 -2
  87. package/dist/hooks/index.js +1 -1
  88. package/dist/hooks/use-self-fetch.d.ts +0 -7
  89. package/dist/hooks/use-self-fetch.d.ts.map +1 -1
  90. package/dist/index.cjs +4 -20
  91. package/dist/index.cjs.map +1 -1
  92. package/dist/index.js +3 -19
  93. package/dist/types/announcement.cjs +0 -5
  94. package/dist/types/announcement.cjs.map +1 -1
  95. package/dist/types/announcement.d.ts +7 -37
  96. package/dist/types/announcement.d.ts.map +1 -1
  97. package/dist/types/announcement.js +1 -5
  98. package/dist/types/announcement.js.map +1 -1
  99. package/dist/types/index.cjs +0 -5
  100. package/dist/types/index.cjs.map +1 -1
  101. package/dist/types/index.js +1 -5
  102. package/dist/types/index.js.map +1 -1
  103. package/dist/utils/announcement-storage.d.ts +7 -39
  104. package/dist/utils/announcement-storage.d.ts.map +1 -1
  105. package/dist/utils/app-config.d.ts.map +1 -1
  106. package/dist/utils/color-analysis.d.ts +0 -13
  107. package/dist/utils/color-analysis.d.ts.map +1 -1
  108. package/dist/utils/index.cjs +1 -58
  109. package/dist/utils/index.cjs.map +1 -1
  110. package/dist/utils/index.d.ts +0 -1
  111. package/dist/utils/index.d.ts.map +1 -1
  112. package/dist/utils/index.js +2 -52
  113. package/dist/utils/index.js.map +1 -1
  114. package/package.json +1 -1
  115. package/src/components/.announcement-bar.md +30 -32
  116. package/src/components/announcement-bar.tsx +182 -227
  117. package/src/components/ui/button/button.tsx +1 -1
  118. package/src/hooks/.api-hooks.md +4 -1
  119. package/src/hooks/api-hooks.ts +7 -0
  120. package/src/hooks/use-self-fetch.ts +1 -29
  121. package/src/stories/AnnouncementBar.stories.tsx +152 -188
  122. package/src/types/.announcement.md +2 -2
  123. package/src/types/announcement.ts +7 -37
  124. package/src/utils/.announcement-storage.md +24 -19
  125. package/src/utils/announcement-storage.ts +28 -74
  126. package/src/utils/app-config.ts +1 -10
  127. package/src/utils/color-analysis.ts +1 -16
  128. package/src/utils/index.ts +0 -3
  129. package/dist/chunk-BX3R44MR.cjs.map +0 -1
  130. package/dist/chunk-CCIBZ7TO.cjs.map +0 -1
  131. package/dist/chunk-E6YHDT3D.js.map +0 -1
  132. package/dist/chunk-FFYEDIAG.cjs.map +0 -1
  133. package/dist/chunk-ICJRSNBM.js.map +0 -1
  134. package/dist/chunk-PNJ5LMVK.js.map +0 -1
  135. package/dist/chunk-QAFRLO5N.cjs.map +0 -1
  136. package/dist/chunk-WJRPMULP.js.map +0 -1
  137. /package/dist/{chunk-F3YLM5PO.js.map → chunk-3I4IZYHM.js.map} +0 -0
  138. /package/dist/{chunk-QYTGHN2T.js.map → chunk-5Z5GXXRU.js.map} +0 -0
  139. /package/dist/{chunk-UIAQXIA6.js.map → chunk-A636Y7GU.js.map} +0 -0
  140. /package/dist/{chunk-BK7QCB5J.js.map → chunk-AMPQKNAX.js.map} +0 -0
  141. /package/dist/{chunk-GT7AJXKH.js.map → chunk-GYFUGMNM.js.map} +0 -0
  142. /package/dist/{chunk-5XZEY34X.js.map → chunk-HBO2DMX4.js.map} +0 -0
  143. /package/dist/{chunk-3XCNFTFV.js.map → chunk-NOWXUQWF.js.map} +0 -0
  144. /package/dist/{chunk-RC35ITSR.js.map → chunk-R6SMQ2CO.js.map} +0 -0
  145. /package/dist/{chunk-RIGB7LP7.js.map → chunk-RNKXG55J.js.map} +0 -0
  146. /package/dist/{chunk-UN2BJ7XW.js.map → chunk-YORONSXG.js.map} +0 -0
  147. /package/dist/{chunk-Q2KKEE6W.js.map → chunk-YXOWUHGQ.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/types/announcement.ts"],"names":[],"mappings":";;;AA8HO,IAAM,yBAAA,GAA4B;AAAA,EACvC,UAAA,EAAY,SAAA;AAAA,EACZ,IAAA,EAAM;AACR;AAkKO,IAAM,mBAAA,GAAiC;AAAA;AAAA,EAE5C,EAAE,IAAA,EAAM,gBAAA,EAAkB,KAAA,EAAO,gBAAA,EAAkB,WAAW,IAAA,EAAY;AAAA;AAAA,EAG1E,EAAE,IAAA,EAAM,cAAA,EAAgB,KAAA,EAAO,cAAA,EAAgB,WAAW,IAAA,EAAY;AAAA,EACtE,EAAE,IAAA,EAAM,eAAA,EAAiB,KAAA,EAAO,eAAA,EAAiB,WAAW,IAAA,EAAY;AAAA;AAAA,EAGxE,EAAE,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,WAAA,EAAa,WAAW,IAAA,EAAY;AAAA,EAChE,EAAE,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,WAAW,IAAA,EAAY;AAAA,EACtD,EAAE,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAO,aAAA,EAAe,WAAW,IAAA,EAAY;AAAA,EAC7D,EAAE,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,WAAW,IAAA,EAAY;AAAA,EACtD,EAAE,IAAA,EAAM,QAAA,EAAU,KAAA,EAAO,QAAA,EAAU,WAAW,IAAA,EAAY;AAAA,EAC1D,EAAE,IAAA,EAAM,SAAA,EAAW,KAAA,EAAO,SAAA,EAAW,WAAW,IAAA;AAClD","file":"announcement.cjs","sourcesContent":["// Announcement system TypeScript types\nimport type { LegacyPlatform, PlatformFilter } from './platform';\nimport type { EntityPlatformAssoc } from './entity-platform';\n\n// Database Models\nexport interface Announcement {\n id: string;\n title: string;\n description: string;\n background_color: string;\n icon_name?: string;\n icon_url?: string;\n /** Extra props for the main bar/icon */\n icon_props?: Record<string, any>;\n /** Hydrated entity_platforms associations (featured-first) what the hub\n * DAL's attachPlatformsToRow(s) emits. No singular platform/platform_id. */\n announcement_platforms?: EntityPlatformAssoc[];\n is_active: boolean;\n // CTA (Call-To-Action) fields\n cta_enabled?: boolean;\n cta_text?: string;\n cta_icon_name?: string;\n cta_show_icon?: boolean;\n cta_url?: string;\n cta_target?: '_self' | '_blank';\n // Custom CTA button colors (hex codes like #FFFFFF). Optional.\n cta_button_background_color?: string | null;\n cta_button_text_color?: string | null;\n /** Additional props to spread onto the CTA icon component */\n cta_icon_props?: Record<string, any>;\n created_at: string;\n updated_at: string;\n created_by?: string;\n created_by_user?: {\n id: string;\n email: string;\n full_name?: string;\n };\n announcement_assets?: AnnouncementAsset[];\n}\n\nexport interface AnnouncementAsset {\n id: string;\n announcement_id: string;\n file_name: string;\n file_url: string;\n file_size: number;\n mime_type: string;\n upload_path: string;\n created_at: string;\n}\n\n// API Request/Response Types\nexport interface CreateAnnouncementData {\n title: string;\n description: string;\n background_color: string;\n icon_name?: string;\n icon_url?: string;\n /** Extra props for the main bar/icon */\n icon_props?: Record<string, any>;\n platforms?: string[]; // entity_platforms set (multi-select)\n is_active?: boolean;\n // CTA (Call-To-Action) fields\n cta_enabled?: boolean;\n cta_text?: string;\n cta_icon_name?: string;\n cta_show_icon?: boolean;\n cta_url?: string;\n cta_target?: '_self' | '_blank';\n cta_button_background_color?: string;\n cta_button_text_color?: string;\n cta_icon_props?: Record<string, any>;\n created_by: string;\n}\n\nexport interface UpdateAnnouncementData {\n title?: string;\n description?: string;\n background_color?: string;\n icon_name?: string;\n icon_url?: string;\n /** Extra props for the main bar/icon */\n icon_props?: Record<string, any>;\n platforms?: string[]; // entity_platforms set (multi-select)\n is_active?: boolean;\n // CTA (Call-To-Action) fields\n cta_enabled?: boolean;\n cta_text?: string;\n cta_icon_name?: string;\n cta_show_icon?: boolean;\n cta_url?: string;\n cta_target?: '_self' | '_blank';\n cta_button_background_color?: string;\n cta_button_text_color?: string;\n cta_icon_props?: Record<string, any>;\n}\n\nexport interface AnnouncementListResponse {\n announcements: Announcement[];\n pagination: {\n page: number;\n page_size: number;\n total_count: number;\n total_pages: number;\n };\n filters?: {\n platform?: LegacyPlatform;\n is_active?: boolean;\n };\n}\n\n/**\n * Wire shape of GET /api/announcements/active — the single typed home for the\n * `{ announcement }` envelope (hub route return + AnnouncementBar's\n * useSelfFetch generic). `null` when no active announcement exists.\n */\nexport interface AnnouncementResponse {\n announcement: Announcement | null;\n}\n\n/**\n * Default CTA button colors — one home for the pair the DAL create/update\n * defaults and the admin form both reference. Announcement colors are\n * admin-chosen data (not ODS-token surfaces) by design.\n */\nexport const ANNOUNCEMENT_CTA_DEFAULTS = {\n background: '#1A1A1A',\n text: '#FAFAFA',\n} as const;\n\n// Form Data Types\nexport interface AnnouncementFormData {\n title: string;\n description: string;\n background_color: string;\n icon_name: string;\n icon_url?: string;\n platforms: string[]; // entity_platforms set (multi-select; no single platform_id)\n is_active: boolean;\n // CTA (Call-To-Action) fields\n cta_enabled: boolean;\n cta_text: string;\n cta_icon_name: string;\n cta_show_icon: boolean;\n cta_url: string;\n cta_target: '_self' | '_blank';\n // New CTA button custom colors\n cta_button_background_color?: string;\n cta_button_text_color?: string;\n cta_icon_props?: string; // JSON string in form\n /** Extra props for the main bar/icon */\n icon_props?: string;\n}\n\n// API Query Parameters\nexport interface GetAnnouncementsOptions {\n platform?: PlatformFilter; // Changed from Platform to PlatformFilter to include 'all'\n is_active?: boolean;\n page?: number;\n pageSize?: number;\n sortBy?: 'created_at' | 'updated_at' | 'title';\n sortOrder?: 'asc' | 'desc';\n}\n\n// File Upload Types\nexport interface IconUploadResponse {\n success: boolean;\n file_url?: string;\n file_name?: string;\n file_size?: number;\n error?: string;\n}\n\nexport interface IconUploadData {\n file: File;\n announcement_id?: string;\n}\n\n// Available SVG Icons (extend as needed)\nexport interface AvailableSvgIcon {\n name: string;\n display_name: string;\n component_name: string;\n}\n\n// Error Types\nexport interface AnnouncementError {\n code: string;\n message: string;\n details?: string;\n}\n\n// Validation Types\nexport interface AnnouncementValidation {\n title: {\n required: boolean;\n minLength: number;\n maxLength: number;\n };\n description: {\n required: boolean;\n minLength: number;\n maxLength: number;\n };\n background_color: {\n required: boolean;\n pattern: RegExp;\n };\n icon_name: {\n required: boolean;\n validOptions: string[];\n };\n platform: {\n required: boolean;\n validOptions: LegacyPlatform[];\n };\n}\n\n// Import unified platform configuration (removed duplicate definition)\nexport type { PlatformConfig } from './platform';\n\n// Admin Dashboard Types\nexport interface AnnouncementStats {\n total_announcements: number;\n active_announcements: number;\n announcements_by_platform: Record<LegacyPlatform, number>;\n recent_announcements: Announcement[];\n}\n\n// Component Props Types\nexport interface AnnouncementBarProps {\n /**\n * SSR mode seed. `null` = the server resolved \"nothing to show\" (no active\n * announcement, or dismissed via cookie) — seeds the fetch hook and skips\n * the mount fetch. Absent (`undefined`) = client-only mode: the bar\n * self-fetches on mount from the EndpointsRuntime provider's\n * `announcementsUrl` (see react-embedding-example — no per-component URL\n * or platform knobs; the server resolves its own platform via\n * currentPlatform()).\n */\n initialAnnouncement?: Announcement | null;\n /**\n * Render-only mode for the admin live preview: no fetch/revalidation, inert\n * dismiss button, and no storage side effects (never writes dismissal\n * cookies or touches localStorage).\n */\n previewMode?: boolean;\n className?: string;\n}\n\nexport interface AnnouncementFormProps {\n announcement?: Announcement;\n onSubmit: (data: AnnouncementFormData) => Promise<void>;\n onCancel: () => void;\n isLoading?: boolean;\n availableIcons: AvailableSvgIcon[];\n}\n\nexport interface AnnouncementListProps {\n announcements: Announcement[];\n onEdit: (announcement: Announcement) => void;\n onDelete: (announcementId: string) => void;\n onToggleActive: (announcementId: string, isActive: boolean) => void;\n isLoading?: boolean;\n}\n\n// Database Utility Types\nexport interface AnnouncementFilters {\n platform?: LegacyPlatform;\n is_active?: boolean;\n created_by?: string;\n search?: string;\n}\n\nexport interface AnnouncementSortOptions {\n field: 'created_at' | 'updated_at' | 'title' | 'platform';\n direction: 'asc' | 'desc';\n}\n\n// SVG Icon Type\nexport interface SvgIcon {\n name: string;\n label: string;\n component: any;\n}\n\n// Platform display configuration\n// PLATFORM_CONFIGS removed - all platform data now comes from database via getPlatformsConfig()\n\n// Available SVG icons configuration\nexport const AVAILABLE_SVG_ICONS: SvgIcon[] = [\n // OpenFrame Logo Options\n { name: 'openframe-logo', label: 'OpenFrame Logo', component: null as any },\n \n // Platform Logos\n { name: 'openmsp-logo', label: 'OpenMSP Logo', component: null as any },\n { name: 'flamingo-logo', label: 'Flamingo Logo', component: null as any },\n \n // Lucide Icons\n { name: 'megaphone', label: 'Megaphone', component: null as any },\n { name: 'bell', label: 'Bell', component: null as any },\n { name: 'info', label: 'Information', component: null as any },\n { name: 'star', label: 'Star', component: null as any },\n { name: 'rocket', label: 'Rocket', component: null as any },\n { name: 'package', label: 'Package', component: null as any }\n]; "]}
1
+ {"version":3,"sources":["../../src/types/announcement.ts"],"names":[],"mappings":";;;AAqQO,IAAM,mBAAA,GAAiC;AAAA;AAAA,EAE5C,EAAE,IAAA,EAAM,gBAAA,EAAkB,KAAA,EAAO,gBAAA,EAAkB,WAAW,IAAA,EAAY;AAAA;AAAA,EAG1E,EAAE,IAAA,EAAM,cAAA,EAAgB,KAAA,EAAO,cAAA,EAAgB,WAAW,IAAA,EAAY;AAAA,EACtE,EAAE,IAAA,EAAM,eAAA,EAAiB,KAAA,EAAO,eAAA,EAAiB,WAAW,IAAA,EAAY;AAAA;AAAA,EAGxE,EAAE,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,WAAA,EAAa,WAAW,IAAA,EAAY;AAAA,EAChE,EAAE,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,WAAW,IAAA,EAAY;AAAA,EACtD,EAAE,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAO,aAAA,EAAe,WAAW,IAAA,EAAY;AAAA,EAC7D,EAAE,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,WAAW,IAAA,EAAY;AAAA,EACtD,EAAE,IAAA,EAAM,QAAA,EAAU,KAAA,EAAO,QAAA,EAAU,WAAW,IAAA,EAAY;AAAA,EAC1D,EAAE,IAAA,EAAM,SAAA,EAAW,KAAA,EAAO,SAAA,EAAW,WAAW,IAAA;AAClD","file":"announcement.cjs","sourcesContent":["// Announcement system TypeScript types\nimport type { LegacyPlatform, PlatformFilter, PlatformRecord } from './platform';\n\n// For backward compatibility, maintain the old Platform type temporarily\n// Database Models\nexport interface Announcement {\n id: string;\n title: string;\n description: string;\n background_color: string;\n icon_name?: string;\n icon_url?: string;\n /** Extra props for the main bar/icon */\n icon_props?: Record<string, any>;\n platform_id: string; // Foreign key to platforms table\n platform?: PlatformRecord; // Joined platform data\n is_active: boolean;\n // CTA (Call-To-Action) fields\n cta_enabled?: boolean;\n cta_text?: string;\n cta_icon_name?: string;\n cta_show_icon?: boolean;\n cta_url?: string;\n cta_target?: '_self' | '_blank';\n // Custom CTA button colors (hex codes like #FFFFFF). Optional.\n cta_button_background_color?: string | null;\n cta_button_text_color?: string | null;\n /** Additional props to spread onto the CTA icon component */\n cta_icon_props?: Record<string, any>;\n created_at: string;\n updated_at: string;\n created_by?: string;\n created_by_user?: {\n id: string;\n email: string;\n full_name?: string;\n };\n announcement_assets?: AnnouncementAsset[];\n}\n\nexport interface AnnouncementAsset {\n id: string;\n announcement_id: string;\n file_name: string;\n file_url: string;\n file_size: number;\n mime_type: string;\n upload_path: string;\n created_at: string;\n}\n\n// API Request/Response Types\nexport interface CreateAnnouncementData {\n title: string;\n description: string;\n background_color: string;\n icon_name?: string;\n icon_url?: string;\n /** Extra props for the main bar/icon */\n icon_props?: Record<string, any>;\n platforms?: string[]; // entity_platforms set (multi-select)\n is_active?: boolean;\n // CTA (Call-To-Action) fields\n cta_enabled?: boolean;\n cta_text?: string;\n cta_icon_name?: string;\n cta_show_icon?: boolean;\n cta_url?: string;\n cta_target?: '_self' | '_blank';\n cta_button_background_color?: string;\n cta_button_text_color?: string;\n cta_icon_props?: Record<string, any>;\n created_by: string;\n}\n\nexport interface UpdateAnnouncementData {\n title?: string;\n description?: string;\n background_color?: string;\n icon_name?: string;\n icon_url?: string;\n /** Extra props for the main bar/icon */\n icon_props?: Record<string, any>;\n platforms?: string[]; // entity_platforms set (multi-select)\n is_active?: boolean;\n // CTA (Call-To-Action) fields\n cta_enabled?: boolean;\n cta_text?: string;\n cta_icon_name?: string;\n cta_show_icon?: boolean;\n cta_url?: string;\n cta_target?: '_self' | '_blank';\n cta_button_background_color?: string;\n cta_button_text_color?: string;\n cta_icon_props?: Record<string, any>;\n}\n\nexport interface AnnouncementListResponse {\n announcements: Announcement[];\n pagination: {\n page: number;\n page_size: number;\n total_count: number;\n total_pages: number;\n };\n filters?: {\n platform?: LegacyPlatform;\n is_active?: boolean;\n };\n}\n\nexport interface AnnouncementResponse {\n announcement: Announcement;\n}\n\n// Form Data Types\nexport interface AnnouncementFormData {\n title: string;\n description: string;\n background_color: string;\n icon_name: string;\n icon_url?: string;\n platforms: string[]; // entity_platforms set (multi-select; no single platform_id)\n is_active: boolean;\n // CTA (Call-To-Action) fields\n cta_enabled: boolean;\n cta_text: string;\n cta_icon_name: string;\n cta_show_icon: boolean;\n cta_url: string;\n cta_target: '_self' | '_blank';\n // New CTA button custom colors\n cta_button_background_color?: string;\n cta_button_text_color?: string;\n cta_icon_props?: string; // JSON string in form\n /** Extra props for the main bar/icon */\n icon_props?: string;\n}\n\n// API Query Parameters\nexport interface GetAnnouncementsOptions {\n platform?: PlatformFilter; // Changed from Platform to PlatformFilter to include 'all'\n is_active?: boolean;\n page?: number;\n pageSize?: number;\n sortBy?: 'created_at' | 'updated_at' | 'title';\n sortOrder?: 'asc' | 'desc';\n}\n\n// File Upload Types\nexport interface IconUploadResponse {\n success: boolean;\n file_url?: string;\n file_name?: string;\n file_size?: number;\n error?: string;\n}\n\nexport interface IconUploadData {\n file: File;\n announcement_id?: string;\n}\n\n// Available SVG Icons (extend as needed)\nexport interface AvailableSvgIcon {\n name: string;\n display_name: string;\n component_name: string;\n}\n\n// Error Types\nexport interface AnnouncementError {\n code: string;\n message: string;\n details?: string;\n}\n\n// Validation Types\nexport interface AnnouncementValidation {\n title: {\n required: boolean;\n minLength: number;\n maxLength: number;\n };\n description: {\n required: boolean;\n minLength: number;\n maxLength: number;\n };\n background_color: {\n required: boolean;\n pattern: RegExp;\n };\n icon_name: {\n required: boolean;\n validOptions: string[];\n };\n platform: {\n required: boolean;\n validOptions: LegacyPlatform[];\n };\n}\n\n// Import unified platform configuration (removed duplicate definition)\nexport type { PlatformConfig } from './platform';\n\n// Admin Dashboard Types\nexport interface AnnouncementStats {\n total_announcements: number;\n active_announcements: number;\n announcements_by_platform: Record<LegacyPlatform, number>;\n recent_announcements: Announcement[];\n}\n\n// Component Props Types\nexport interface AnnouncementBarProps {\n announcement?: Announcement;\n onDismiss?: (announcementId: string) => void;\n className?: string;\n}\n\nexport interface AnnouncementFormProps {\n announcement?: Announcement;\n onSubmit: (data: AnnouncementFormData) => Promise<void>;\n onCancel: () => void;\n isLoading?: boolean;\n availableIcons: AvailableSvgIcon[];\n}\n\nexport interface AnnouncementListProps {\n announcements: Announcement[];\n onEdit: (announcement: Announcement) => void;\n onDelete: (announcementId: string) => void;\n onToggleActive: (announcementId: string, isActive: boolean) => void;\n isLoading?: boolean;\n}\n\n// Database Utility Types\nexport interface AnnouncementFilters {\n platform?: LegacyPlatform;\n is_active?: boolean;\n created_by?: string;\n search?: string;\n}\n\nexport interface AnnouncementSortOptions {\n field: 'created_at' | 'updated_at' | 'title' | 'platform';\n direction: 'asc' | 'desc';\n}\n\n// SVG Icon Type\nexport interface SvgIcon {\n name: string;\n label: string;\n component: any;\n}\n\n// Platform display configuration\n// PLATFORM_CONFIGS removed - all platform data now comes from database via getPlatformsConfig()\n\n// Available SVG icons configuration\nexport const AVAILABLE_SVG_ICONS: SvgIcon[] = [\n // OpenFrame Logo Options\n { name: 'openframe-logo', label: 'OpenFrame Logo', component: null as any },\n \n // Platform Logos\n { name: 'openmsp-logo', label: 'OpenMSP Logo', component: null as any },\n { name: 'flamingo-logo', label: 'Flamingo Logo', component: null as any },\n \n // Lucide Icons\n { name: 'megaphone', label: 'Megaphone', component: null as any },\n { name: 'bell', label: 'Bell', component: null as any },\n { name: 'info', label: 'Information', component: null as any },\n { name: 'star', label: 'Star', component: null as any },\n { name: 'rocket', label: 'Rocket', component: null as any },\n { name: 'package', label: 'Package', component: null as any }\n]; "]}
@@ -1,5 +1,4 @@
1
- import type { LegacyPlatform, PlatformFilter } from './platform';
2
- import type { EntityPlatformAssoc } from './entity-platform';
1
+ import type { LegacyPlatform, PlatformFilter, PlatformRecord } from './platform';
3
2
  export interface Announcement {
4
3
  id: string;
5
4
  title: string;
@@ -9,9 +8,8 @@ export interface Announcement {
9
8
  icon_url?: string;
10
9
  /** Extra props for the main bar/icon */
11
10
  icon_props?: Record<string, any>;
12
- /** Hydrated entity_platforms associations (featured-first) — what the hub
13
- * DAL's attachPlatformsToRow(s) emits. No singular platform/platform_id. */
14
- announcement_platforms?: EntityPlatformAssoc[];
11
+ platform_id: string;
12
+ platform?: PlatformRecord;
15
13
  is_active: boolean;
16
14
  cta_enabled?: boolean;
17
15
  cta_text?: string;
@@ -97,23 +95,9 @@ export interface AnnouncementListResponse {
97
95
  is_active?: boolean;
98
96
  };
99
97
  }
100
- /**
101
- * Wire shape of GET /api/announcements/active — the single typed home for the
102
- * `{ announcement }` envelope (hub route return + AnnouncementBar's
103
- * useSelfFetch generic). `null` when no active announcement exists.
104
- */
105
98
  export interface AnnouncementResponse {
106
- announcement: Announcement | null;
107
- }
108
- /**
109
- * Default CTA button colors — one home for the pair the DAL create/update
110
- * defaults and the admin form both reference. Announcement colors are
111
- * admin-chosen data (not ODS-token surfaces) by design.
112
- */
113
- export declare const ANNOUNCEMENT_CTA_DEFAULTS: {
114
- readonly background: "#1A1A1A";
115
- readonly text: "#FAFAFA";
116
- };
99
+ announcement: Announcement;
100
+ }
117
101
  export interface AnnouncementFormData {
118
102
  title: string;
119
103
  description: string;
@@ -195,22 +179,8 @@ export interface AnnouncementStats {
195
179
  recent_announcements: Announcement[];
196
180
  }
197
181
  export interface AnnouncementBarProps {
198
- /**
199
- * SSR mode seed. `null` = the server resolved "nothing to show" (no active
200
- * announcement, or dismissed via cookie) — seeds the fetch hook and skips
201
- * the mount fetch. Absent (`undefined`) = client-only mode: the bar
202
- * self-fetches on mount from the EndpointsRuntime provider's
203
- * `announcementsUrl` (see react-embedding-example — no per-component URL
204
- * or platform knobs; the server resolves its own platform via
205
- * currentPlatform()).
206
- */
207
- initialAnnouncement?: Announcement | null;
208
- /**
209
- * Render-only mode for the admin live preview: no fetch/revalidation, inert
210
- * dismiss button, and no storage side effects (never writes dismissal
211
- * cookies or touches localStorage).
212
- */
213
- previewMode?: boolean;
182
+ announcement?: Announcement;
183
+ onDismiss?: (announcementId: string) => void;
214
184
  className?: string;
215
185
  }
216
186
  export interface AnnouncementFormProps {
@@ -1 +1 @@
1
- {"version":3,"file":"announcement.d.ts","sourceRoot":"","sources":["../../src/types/announcement.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"announcement.d.ts","sourceRoot":"","sources":["../../src/types/announcement.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,4 @@
1
1
  // src/types/announcement.ts
2
- var ANNOUNCEMENT_CTA_DEFAULTS = {
3
- background: "#1A1A1A",
4
- text: "#FAFAFA"
5
- };
6
2
  var AVAILABLE_SVG_ICONS = [
7
3
  // OpenFrame Logo Options
8
4
  { name: "openframe-logo", label: "OpenFrame Logo", component: null },
@@ -18,6 +14,6 @@ var AVAILABLE_SVG_ICONS = [
18
14
  { name: "package", label: "Package", component: null }
19
15
  ];
20
16
 
21
- export { ANNOUNCEMENT_CTA_DEFAULTS, AVAILABLE_SVG_ICONS };
17
+ export { AVAILABLE_SVG_ICONS };
22
18
  //# sourceMappingURL=announcement.js.map
23
19
  //# sourceMappingURL=announcement.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/types/announcement.ts"],"names":[],"mappings":";AA8HO,IAAM,yBAAA,GAA4B;AAAA,EACvC,UAAA,EAAY,SAAA;AAAA,EACZ,IAAA,EAAM;AACR;AAkKO,IAAM,mBAAA,GAAiC;AAAA;AAAA,EAE5C,EAAE,IAAA,EAAM,gBAAA,EAAkB,KAAA,EAAO,gBAAA,EAAkB,WAAW,IAAA,EAAY;AAAA;AAAA,EAG1E,EAAE,IAAA,EAAM,cAAA,EAAgB,KAAA,EAAO,cAAA,EAAgB,WAAW,IAAA,EAAY;AAAA,EACtE,EAAE,IAAA,EAAM,eAAA,EAAiB,KAAA,EAAO,eAAA,EAAiB,WAAW,IAAA,EAAY;AAAA;AAAA,EAGxE,EAAE,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,WAAA,EAAa,WAAW,IAAA,EAAY;AAAA,EAChE,EAAE,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,WAAW,IAAA,EAAY;AAAA,EACtD,EAAE,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAO,aAAA,EAAe,WAAW,IAAA,EAAY;AAAA,EAC7D,EAAE,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,WAAW,IAAA,EAAY;AAAA,EACtD,EAAE,IAAA,EAAM,QAAA,EAAU,KAAA,EAAO,QAAA,EAAU,WAAW,IAAA,EAAY;AAAA,EAC1D,EAAE,IAAA,EAAM,SAAA,EAAW,KAAA,EAAO,SAAA,EAAW,WAAW,IAAA;AAClD","file":"announcement.js","sourcesContent":["// Announcement system TypeScript types\nimport type { LegacyPlatform, PlatformFilter } from './platform';\nimport type { EntityPlatformAssoc } from './entity-platform';\n\n// Database Models\nexport interface Announcement {\n id: string;\n title: string;\n description: string;\n background_color: string;\n icon_name?: string;\n icon_url?: string;\n /** Extra props for the main bar/icon */\n icon_props?: Record<string, any>;\n /** Hydrated entity_platforms associations (featured-first) what the hub\n * DAL's attachPlatformsToRow(s) emits. No singular platform/platform_id. */\n announcement_platforms?: EntityPlatformAssoc[];\n is_active: boolean;\n // CTA (Call-To-Action) fields\n cta_enabled?: boolean;\n cta_text?: string;\n cta_icon_name?: string;\n cta_show_icon?: boolean;\n cta_url?: string;\n cta_target?: '_self' | '_blank';\n // Custom CTA button colors (hex codes like #FFFFFF). Optional.\n cta_button_background_color?: string | null;\n cta_button_text_color?: string | null;\n /** Additional props to spread onto the CTA icon component */\n cta_icon_props?: Record<string, any>;\n created_at: string;\n updated_at: string;\n created_by?: string;\n created_by_user?: {\n id: string;\n email: string;\n full_name?: string;\n };\n announcement_assets?: AnnouncementAsset[];\n}\n\nexport interface AnnouncementAsset {\n id: string;\n announcement_id: string;\n file_name: string;\n file_url: string;\n file_size: number;\n mime_type: string;\n upload_path: string;\n created_at: string;\n}\n\n// API Request/Response Types\nexport interface CreateAnnouncementData {\n title: string;\n description: string;\n background_color: string;\n icon_name?: string;\n icon_url?: string;\n /** Extra props for the main bar/icon */\n icon_props?: Record<string, any>;\n platforms?: string[]; // entity_platforms set (multi-select)\n is_active?: boolean;\n // CTA (Call-To-Action) fields\n cta_enabled?: boolean;\n cta_text?: string;\n cta_icon_name?: string;\n cta_show_icon?: boolean;\n cta_url?: string;\n cta_target?: '_self' | '_blank';\n cta_button_background_color?: string;\n cta_button_text_color?: string;\n cta_icon_props?: Record<string, any>;\n created_by: string;\n}\n\nexport interface UpdateAnnouncementData {\n title?: string;\n description?: string;\n background_color?: string;\n icon_name?: string;\n icon_url?: string;\n /** Extra props for the main bar/icon */\n icon_props?: Record<string, any>;\n platforms?: string[]; // entity_platforms set (multi-select)\n is_active?: boolean;\n // CTA (Call-To-Action) fields\n cta_enabled?: boolean;\n cta_text?: string;\n cta_icon_name?: string;\n cta_show_icon?: boolean;\n cta_url?: string;\n cta_target?: '_self' | '_blank';\n cta_button_background_color?: string;\n cta_button_text_color?: string;\n cta_icon_props?: Record<string, any>;\n}\n\nexport interface AnnouncementListResponse {\n announcements: Announcement[];\n pagination: {\n page: number;\n page_size: number;\n total_count: number;\n total_pages: number;\n };\n filters?: {\n platform?: LegacyPlatform;\n is_active?: boolean;\n };\n}\n\n/**\n * Wire shape of GET /api/announcements/active — the single typed home for the\n * `{ announcement }` envelope (hub route return + AnnouncementBar's\n * useSelfFetch generic). `null` when no active announcement exists.\n */\nexport interface AnnouncementResponse {\n announcement: Announcement | null;\n}\n\n/**\n * Default CTA button colors — one home for the pair the DAL create/update\n * defaults and the admin form both reference. Announcement colors are\n * admin-chosen data (not ODS-token surfaces) by design.\n */\nexport const ANNOUNCEMENT_CTA_DEFAULTS = {\n background: '#1A1A1A',\n text: '#FAFAFA',\n} as const;\n\n// Form Data Types\nexport interface AnnouncementFormData {\n title: string;\n description: string;\n background_color: string;\n icon_name: string;\n icon_url?: string;\n platforms: string[]; // entity_platforms set (multi-select; no single platform_id)\n is_active: boolean;\n // CTA (Call-To-Action) fields\n cta_enabled: boolean;\n cta_text: string;\n cta_icon_name: string;\n cta_show_icon: boolean;\n cta_url: string;\n cta_target: '_self' | '_blank';\n // New CTA button custom colors\n cta_button_background_color?: string;\n cta_button_text_color?: string;\n cta_icon_props?: string; // JSON string in form\n /** Extra props for the main bar/icon */\n icon_props?: string;\n}\n\n// API Query Parameters\nexport interface GetAnnouncementsOptions {\n platform?: PlatformFilter; // Changed from Platform to PlatformFilter to include 'all'\n is_active?: boolean;\n page?: number;\n pageSize?: number;\n sortBy?: 'created_at' | 'updated_at' | 'title';\n sortOrder?: 'asc' | 'desc';\n}\n\n// File Upload Types\nexport interface IconUploadResponse {\n success: boolean;\n file_url?: string;\n file_name?: string;\n file_size?: number;\n error?: string;\n}\n\nexport interface IconUploadData {\n file: File;\n announcement_id?: string;\n}\n\n// Available SVG Icons (extend as needed)\nexport interface AvailableSvgIcon {\n name: string;\n display_name: string;\n component_name: string;\n}\n\n// Error Types\nexport interface AnnouncementError {\n code: string;\n message: string;\n details?: string;\n}\n\n// Validation Types\nexport interface AnnouncementValidation {\n title: {\n required: boolean;\n minLength: number;\n maxLength: number;\n };\n description: {\n required: boolean;\n minLength: number;\n maxLength: number;\n };\n background_color: {\n required: boolean;\n pattern: RegExp;\n };\n icon_name: {\n required: boolean;\n validOptions: string[];\n };\n platform: {\n required: boolean;\n validOptions: LegacyPlatform[];\n };\n}\n\n// Import unified platform configuration (removed duplicate definition)\nexport type { PlatformConfig } from './platform';\n\n// Admin Dashboard Types\nexport interface AnnouncementStats {\n total_announcements: number;\n active_announcements: number;\n announcements_by_platform: Record<LegacyPlatform, number>;\n recent_announcements: Announcement[];\n}\n\n// Component Props Types\nexport interface AnnouncementBarProps {\n /**\n * SSR mode seed. `null` = the server resolved \"nothing to show\" (no active\n * announcement, or dismissed via cookie) — seeds the fetch hook and skips\n * the mount fetch. Absent (`undefined`) = client-only mode: the bar\n * self-fetches on mount from the EndpointsRuntime provider's\n * `announcementsUrl` (see react-embedding-example — no per-component URL\n * or platform knobs; the server resolves its own platform via\n * currentPlatform()).\n */\n initialAnnouncement?: Announcement | null;\n /**\n * Render-only mode for the admin live preview: no fetch/revalidation, inert\n * dismiss button, and no storage side effects (never writes dismissal\n * cookies or touches localStorage).\n */\n previewMode?: boolean;\n className?: string;\n}\n\nexport interface AnnouncementFormProps {\n announcement?: Announcement;\n onSubmit: (data: AnnouncementFormData) => Promise<void>;\n onCancel: () => void;\n isLoading?: boolean;\n availableIcons: AvailableSvgIcon[];\n}\n\nexport interface AnnouncementListProps {\n announcements: Announcement[];\n onEdit: (announcement: Announcement) => void;\n onDelete: (announcementId: string) => void;\n onToggleActive: (announcementId: string, isActive: boolean) => void;\n isLoading?: boolean;\n}\n\n// Database Utility Types\nexport interface AnnouncementFilters {\n platform?: LegacyPlatform;\n is_active?: boolean;\n created_by?: string;\n search?: string;\n}\n\nexport interface AnnouncementSortOptions {\n field: 'created_at' | 'updated_at' | 'title' | 'platform';\n direction: 'asc' | 'desc';\n}\n\n// SVG Icon Type\nexport interface SvgIcon {\n name: string;\n label: string;\n component: any;\n}\n\n// Platform display configuration\n// PLATFORM_CONFIGS removed - all platform data now comes from database via getPlatformsConfig()\n\n// Available SVG icons configuration\nexport const AVAILABLE_SVG_ICONS: SvgIcon[] = [\n // OpenFrame Logo Options\n { name: 'openframe-logo', label: 'OpenFrame Logo', component: null as any },\n \n // Platform Logos\n { name: 'openmsp-logo', label: 'OpenMSP Logo', component: null as any },\n { name: 'flamingo-logo', label: 'Flamingo Logo', component: null as any },\n \n // Lucide Icons\n { name: 'megaphone', label: 'Megaphone', component: null as any },\n { name: 'bell', label: 'Bell', component: null as any },\n { name: 'info', label: 'Information', component: null as any },\n { name: 'star', label: 'Star', component: null as any },\n { name: 'rocket', label: 'Rocket', component: null as any },\n { name: 'package', label: 'Package', component: null as any }\n]; "]}
1
+ {"version":3,"sources":["../../src/types/announcement.ts"],"names":[],"mappings":";AAqQO,IAAM,mBAAA,GAAiC;AAAA;AAAA,EAE5C,EAAE,IAAA,EAAM,gBAAA,EAAkB,KAAA,EAAO,gBAAA,EAAkB,WAAW,IAAA,EAAY;AAAA;AAAA,EAG1E,EAAE,IAAA,EAAM,cAAA,EAAgB,KAAA,EAAO,cAAA,EAAgB,WAAW,IAAA,EAAY;AAAA,EACtE,EAAE,IAAA,EAAM,eAAA,EAAiB,KAAA,EAAO,eAAA,EAAiB,WAAW,IAAA,EAAY;AAAA;AAAA,EAGxE,EAAE,IAAA,EAAM,WAAA,EAAa,KAAA,EAAO,WAAA,EAAa,WAAW,IAAA,EAAY;AAAA,EAChE,EAAE,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,WAAW,IAAA,EAAY;AAAA,EACtD,EAAE,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAO,aAAA,EAAe,WAAW,IAAA,EAAY;AAAA,EAC7D,EAAE,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,WAAW,IAAA,EAAY;AAAA,EACtD,EAAE,IAAA,EAAM,QAAA,EAAU,KAAA,EAAO,QAAA,EAAU,WAAW,IAAA,EAAY;AAAA,EAC1D,EAAE,IAAA,EAAM,SAAA,EAAW,KAAA,EAAO,SAAA,EAAW,WAAW,IAAA;AAClD","file":"announcement.js","sourcesContent":["// Announcement system TypeScript types\nimport type { LegacyPlatform, PlatformFilter, PlatformRecord } from './platform';\n\n// For backward compatibility, maintain the old Platform type temporarily\n// Database Models\nexport interface Announcement {\n id: string;\n title: string;\n description: string;\n background_color: string;\n icon_name?: string;\n icon_url?: string;\n /** Extra props for the main bar/icon */\n icon_props?: Record<string, any>;\n platform_id: string; // Foreign key to platforms table\n platform?: PlatformRecord; // Joined platform data\n is_active: boolean;\n // CTA (Call-To-Action) fields\n cta_enabled?: boolean;\n cta_text?: string;\n cta_icon_name?: string;\n cta_show_icon?: boolean;\n cta_url?: string;\n cta_target?: '_self' | '_blank';\n // Custom CTA button colors (hex codes like #FFFFFF). Optional.\n cta_button_background_color?: string | null;\n cta_button_text_color?: string | null;\n /** Additional props to spread onto the CTA icon component */\n cta_icon_props?: Record<string, any>;\n created_at: string;\n updated_at: string;\n created_by?: string;\n created_by_user?: {\n id: string;\n email: string;\n full_name?: string;\n };\n announcement_assets?: AnnouncementAsset[];\n}\n\nexport interface AnnouncementAsset {\n id: string;\n announcement_id: string;\n file_name: string;\n file_url: string;\n file_size: number;\n mime_type: string;\n upload_path: string;\n created_at: string;\n}\n\n// API Request/Response Types\nexport interface CreateAnnouncementData {\n title: string;\n description: string;\n background_color: string;\n icon_name?: string;\n icon_url?: string;\n /** Extra props for the main bar/icon */\n icon_props?: Record<string, any>;\n platforms?: string[]; // entity_platforms set (multi-select)\n is_active?: boolean;\n // CTA (Call-To-Action) fields\n cta_enabled?: boolean;\n cta_text?: string;\n cta_icon_name?: string;\n cta_show_icon?: boolean;\n cta_url?: string;\n cta_target?: '_self' | '_blank';\n cta_button_background_color?: string;\n cta_button_text_color?: string;\n cta_icon_props?: Record<string, any>;\n created_by: string;\n}\n\nexport interface UpdateAnnouncementData {\n title?: string;\n description?: string;\n background_color?: string;\n icon_name?: string;\n icon_url?: string;\n /** Extra props for the main bar/icon */\n icon_props?: Record<string, any>;\n platforms?: string[]; // entity_platforms set (multi-select)\n is_active?: boolean;\n // CTA (Call-To-Action) fields\n cta_enabled?: boolean;\n cta_text?: string;\n cta_icon_name?: string;\n cta_show_icon?: boolean;\n cta_url?: string;\n cta_target?: '_self' | '_blank';\n cta_button_background_color?: string;\n cta_button_text_color?: string;\n cta_icon_props?: Record<string, any>;\n}\n\nexport interface AnnouncementListResponse {\n announcements: Announcement[];\n pagination: {\n page: number;\n page_size: number;\n total_count: number;\n total_pages: number;\n };\n filters?: {\n platform?: LegacyPlatform;\n is_active?: boolean;\n };\n}\n\nexport interface AnnouncementResponse {\n announcement: Announcement;\n}\n\n// Form Data Types\nexport interface AnnouncementFormData {\n title: string;\n description: string;\n background_color: string;\n icon_name: string;\n icon_url?: string;\n platforms: string[]; // entity_platforms set (multi-select; no single platform_id)\n is_active: boolean;\n // CTA (Call-To-Action) fields\n cta_enabled: boolean;\n cta_text: string;\n cta_icon_name: string;\n cta_show_icon: boolean;\n cta_url: string;\n cta_target: '_self' | '_blank';\n // New CTA button custom colors\n cta_button_background_color?: string;\n cta_button_text_color?: string;\n cta_icon_props?: string; // JSON string in form\n /** Extra props for the main bar/icon */\n icon_props?: string;\n}\n\n// API Query Parameters\nexport interface GetAnnouncementsOptions {\n platform?: PlatformFilter; // Changed from Platform to PlatformFilter to include 'all'\n is_active?: boolean;\n page?: number;\n pageSize?: number;\n sortBy?: 'created_at' | 'updated_at' | 'title';\n sortOrder?: 'asc' | 'desc';\n}\n\n// File Upload Types\nexport interface IconUploadResponse {\n success: boolean;\n file_url?: string;\n file_name?: string;\n file_size?: number;\n error?: string;\n}\n\nexport interface IconUploadData {\n file: File;\n announcement_id?: string;\n}\n\n// Available SVG Icons (extend as needed)\nexport interface AvailableSvgIcon {\n name: string;\n display_name: string;\n component_name: string;\n}\n\n// Error Types\nexport interface AnnouncementError {\n code: string;\n message: string;\n details?: string;\n}\n\n// Validation Types\nexport interface AnnouncementValidation {\n title: {\n required: boolean;\n minLength: number;\n maxLength: number;\n };\n description: {\n required: boolean;\n minLength: number;\n maxLength: number;\n };\n background_color: {\n required: boolean;\n pattern: RegExp;\n };\n icon_name: {\n required: boolean;\n validOptions: string[];\n };\n platform: {\n required: boolean;\n validOptions: LegacyPlatform[];\n };\n}\n\n// Import unified platform configuration (removed duplicate definition)\nexport type { PlatformConfig } from './platform';\n\n// Admin Dashboard Types\nexport interface AnnouncementStats {\n total_announcements: number;\n active_announcements: number;\n announcements_by_platform: Record<LegacyPlatform, number>;\n recent_announcements: Announcement[];\n}\n\n// Component Props Types\nexport interface AnnouncementBarProps {\n announcement?: Announcement;\n onDismiss?: (announcementId: string) => void;\n className?: string;\n}\n\nexport interface AnnouncementFormProps {\n announcement?: Announcement;\n onSubmit: (data: AnnouncementFormData) => Promise<void>;\n onCancel: () => void;\n isLoading?: boolean;\n availableIcons: AvailableSvgIcon[];\n}\n\nexport interface AnnouncementListProps {\n announcements: Announcement[];\n onEdit: (announcement: Announcement) => void;\n onDelete: (announcementId: string) => void;\n onToggleActive: (announcementId: string, isActive: boolean) => void;\n isLoading?: boolean;\n}\n\n// Database Utility Types\nexport interface AnnouncementFilters {\n platform?: LegacyPlatform;\n is_active?: boolean;\n created_by?: string;\n search?: string;\n}\n\nexport interface AnnouncementSortOptions {\n field: 'created_at' | 'updated_at' | 'title' | 'platform';\n direction: 'asc' | 'desc';\n}\n\n// SVG Icon Type\nexport interface SvgIcon {\n name: string;\n label: string;\n component: any;\n}\n\n// Platform display configuration\n// PLATFORM_CONFIGS removed - all platform data now comes from database via getPlatformsConfig()\n\n// Available SVG icons configuration\nexport const AVAILABLE_SVG_ICONS: SvgIcon[] = [\n // OpenFrame Logo Options\n { name: 'openframe-logo', label: 'OpenFrame Logo', component: null as any },\n \n // Platform Logos\n { name: 'openmsp-logo', label: 'OpenMSP Logo', component: null as any },\n { name: 'flamingo-logo', label: 'Flamingo Logo', component: null as any },\n \n // Lucide Icons\n { name: 'megaphone', label: 'Megaphone', component: null as any },\n { name: 'bell', label: 'Bell', component: null as any },\n { name: 'info', label: 'Information', component: null as any },\n { name: 'star', label: 'Star', component: null as any },\n { name: 'rocket', label: 'Rocket', component: null as any },\n { name: 'package', label: 'Package', component: null as any }\n]; "]}
@@ -7,10 +7,6 @@ require('clsx');
7
7
  var tailwindMerge = require('tailwind-merge');
8
8
 
9
9
  // src/types/announcement.ts
10
- var ANNOUNCEMENT_CTA_DEFAULTS = {
11
- background: "#1A1A1A",
12
- text: "#FAFAFA"
13
- };
14
10
  var AVAILABLE_SVG_ICONS = [
15
11
  // OpenFrame Logo Options
16
12
  { name: "openframe-logo", label: "OpenFrame Logo", component: null },
@@ -562,7 +558,6 @@ var TMCG_SOCIAL_PLATFORMS = {
562
558
  slack: "Slack"
563
559
  };
564
560
 
565
- exports.ANNOUNCEMENT_CTA_DEFAULTS = ANNOUNCEMENT_CTA_DEFAULTS;
566
561
  exports.AVAILABLE_SVG_ICONS = AVAILABLE_SVG_ICONS;
567
562
  exports.OSTypeValues = OSTypeValues;
568
563
  exports.OS_TYPES = OS_TYPES;