@flamingo-stack/openframe-frontend-core 0.0.404 → 0.0.405-snapshot.20260711081601
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-HBO2DMX4.js → chunk-3KZXOLFK.js} +3 -3
- package/dist/{chunk-RNKXG55J.js → chunk-6WMVBCNA.js} +4 -4
- package/dist/{chunk-A636Y7GU.js → chunk-7RVSGGO6.js} +5 -5
- package/dist/{chunk-YXOWUHGQ.js → chunk-AYFWYOL6.js} +6 -6
- package/dist/{chunk-GA5AN24T.cjs → chunk-BX3R44MR.cjs} +2 -2
- package/dist/chunk-BX3R44MR.cjs.map +1 -0
- package/dist/{chunk-GYFUGMNM.js → chunk-C3NPMZBI.js} +2 -2
- package/dist/{chunk-J4XR6YYZ.cjs → chunk-CCIBZ7TO.cjs} +10 -6
- package/dist/chunk-CCIBZ7TO.cjs.map +1 -0
- package/dist/{chunk-6MO5HF6P.cjs → chunk-CF3LBCNI.cjs} +32 -32
- package/dist/{chunk-6MO5HF6P.cjs.map → chunk-CF3LBCNI.cjs.map} +1 -1
- package/dist/{chunk-S4ZHBKGS.cjs → chunk-COERBDG4.cjs} +73 -73
- package/dist/{chunk-S4ZHBKGS.cjs.map → chunk-COERBDG4.cjs.map} +1 -1
- package/dist/{chunk-DH6HTYOV.js → chunk-E6YHDT3D.js} +6 -2
- package/dist/chunk-E6YHDT3D.js.map +1 -0
- package/dist/{chunk-OJ4HFM3I.cjs → chunk-GNS65HNC.cjs} +18 -18
- package/dist/{chunk-OJ4HFM3I.cjs.map → chunk-GNS65HNC.cjs.map} +1 -1
- package/dist/{chunk-G4YLKA7O.cjs → chunk-HJJXNMM7.cjs} +5 -5
- package/dist/{chunk-G4YLKA7O.cjs.map → chunk-HJJXNMM7.cjs.map} +1 -1
- package/dist/{chunk-TBXE5S6P.cjs → chunk-ISYVNPRT.cjs} +40 -40
- package/dist/{chunk-TBXE5S6P.cjs.map → chunk-ISYVNPRT.cjs.map} +1 -1
- package/dist/{chunk-CRUPO3MR.cjs → chunk-JAPP2F4M.cjs} +93 -93
- package/dist/{chunk-CRUPO3MR.cjs.map → chunk-JAPP2F4M.cjs.map} +1 -1
- package/dist/{chunk-G3QYCV63.cjs → chunk-LL4QQSAD.cjs} +500 -441
- package/dist/chunk-LL4QQSAD.cjs.map +1 -0
- package/dist/{chunk-YORONSXG.js → chunk-LSPBPUQM.js} +3 -3
- package/dist/{chunk-AMPQKNAX.js → chunk-OATWTTCI.js} +6 -6
- package/dist/{chunk-FFWIUNOT.cjs → chunk-P43ZHPM6.cjs} +40 -40
- package/dist/{chunk-FFWIUNOT.cjs.map → chunk-P43ZHPM6.cjs.map} +1 -1
- package/dist/{chunk-MTBFE3JF.js → chunk-PNJ5LMVK.js} +16 -2
- package/dist/chunk-PNJ5LMVK.js.map +1 -0
- package/dist/{chunk-R6SMQ2CO.js → chunk-PQN5R5II.js} +6 -6
- package/dist/{chunk-Q3AO2QWK.cjs → chunk-QAFRLO5N.cjs} +18 -4
- package/dist/chunk-QAFRLO5N.cjs.map +1 -0
- package/dist/{chunk-PFQQ5H6G.cjs → chunk-SF4G7M6U.cjs} +19 -19
- package/dist/{chunk-PFQQ5H6G.cjs.map → chunk-SF4G7M6U.cjs.map} +1 -1
- package/dist/{chunk-TTUQSOBL.js → chunk-SOK32D6C.js} +62 -3
- package/dist/chunk-SOK32D6C.js.map +1 -0
- package/dist/{chunk-5Z5GXXRU.js → chunk-TFDNJTBX.js} +4 -4
- package/dist/{chunk-QXAHXMPD.cjs → chunk-VANFD4FX.cjs} +12 -12
- package/dist/{chunk-QXAHXMPD.cjs.map → chunk-VANFD4FX.cjs.map} +1 -1
- package/dist/{chunk-KVB7SHXY.cjs → chunk-VIB4SGCD.cjs} +12 -12
- package/dist/{chunk-KVB7SHXY.cjs.map → chunk-VIB4SGCD.cjs.map} +1 -1
- package/dist/{chunk-M7LIGEAX.cjs → chunk-VZGU4BV6.cjs} +33 -33
- package/dist/{chunk-M7LIGEAX.cjs.map → chunk-VZGU4BV6.cjs.map} +1 -1
- package/dist/{chunk-HGKWTKW7.js → chunk-WJRPMULP.js} +2 -2
- package/dist/chunk-WJRPMULP.js.map +1 -0
- package/dist/{chunk-NOWXUQWF.js → chunk-XXG2Z2JT.js} +3 -3
- package/dist/{chunk-3I4IZYHM.js → chunk-ZVUR3A33.js} +3 -3
- package/dist/components/announcement-bar.d.ts +27 -1
- package/dist/components/announcement-bar.d.ts.map +1 -1
- package/dist/components/case-studies/index.cjs +10 -10
- package/dist/components/case-studies/index.js +4 -4
- package/dist/components/chat/index.cjs +4 -4
- package/dist/components/chat/index.js +3 -3
- package/dist/components/contact/index.cjs +5 -5
- package/dist/components/contact/index.js +4 -4
- package/dist/components/docs/index.cjs +7 -7
- package/dist/components/docs/index.js +6 -6
- package/dist/components/embeds/index.cjs +5 -5
- package/dist/components/embeds/index.js +4 -4
- package/dist/components/faq/index.cjs +6 -6
- package/dist/components/faq/index.js +5 -5
- package/dist/components/features/index.cjs +4 -4
- package/dist/components/features/index.js +3 -3
- package/dist/components/help-center-pages/index.cjs +23 -23
- package/dist/components/help-center-pages/index.js +14 -14
- package/dist/components/index.cjs +274 -299
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.js +110 -135
- package/dist/components/index.js.map +1 -1
- package/dist/components/navigation/index.cjs +4 -4
- package/dist/components/navigation/index.js +3 -3
- package/dist/components/onboarding-guides/index.cjs +8 -8
- package/dist/components/onboarding-guides/index.js +7 -7
- package/dist/components/related-content/index.cjs +6 -6
- package/dist/components/related-content/index.js +5 -5
- package/dist/components/tickets/index.cjs +7 -7
- package/dist/components/tickets/index.js +6 -6
- package/dist/components/ui/file-manager/index.cjs +50 -50
- package/dist/components/ui/file-manager/index.js +1 -1
- package/dist/components/ui/index.cjs +4 -4
- package/dist/components/ui/index.js +3 -3
- package/dist/hooks/api-hooks.d.ts +0 -4
- package/dist/hooks/api-hooks.d.ts.map +1 -1
- package/dist/hooks/index.cjs +2 -2
- package/dist/hooks/index.js +1 -1
- package/dist/hooks/use-self-fetch.d.ts +7 -0
- package/dist/hooks/use-self-fetch.d.ts.map +1 -1
- package/dist/index.cjs +20 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +19 -3
- package/dist/types/announcement.cjs +5 -0
- package/dist/types/announcement.cjs.map +1 -1
- package/dist/types/announcement.d.ts +37 -7
- package/dist/types/announcement.d.ts.map +1 -1
- package/dist/types/announcement.js +5 -1
- package/dist/types/announcement.js.map +1 -1
- package/dist/types/index.cjs +5 -0
- package/dist/types/index.cjs.map +1 -1
- package/dist/types/index.js +5 -1
- package/dist/types/index.js.map +1 -1
- package/dist/utils/announcement-storage.d.ts +39 -7
- package/dist/utils/announcement-storage.d.ts.map +1 -1
- package/dist/utils/app-config.d.ts.map +1 -1
- package/dist/utils/color-analysis.d.ts +13 -0
- package/dist/utils/color-analysis.d.ts.map +1 -1
- package/dist/utils/index.cjs +58 -1
- package/dist/utils/index.cjs.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +52 -2
- package/dist/utils/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/.announcement-bar.md +32 -30
- package/src/components/announcement-bar.tsx +227 -182
- package/src/components/features/video.tsx +8 -0
- package/src/components/ui/button/button.tsx +1 -1
- package/src/hooks/.api-hooks.md +1 -4
- package/src/hooks/api-hooks.ts +0 -7
- package/src/hooks/use-self-fetch.ts +29 -1
- package/src/stories/AnnouncementBar.stories.tsx +188 -152
- package/src/types/.announcement.md +2 -2
- package/src/types/announcement.ts +37 -7
- package/src/utils/.announcement-storage.md +19 -24
- package/src/utils/announcement-storage.ts +74 -28
- package/src/utils/app-config.ts +10 -1
- package/src/utils/color-analysis.ts +16 -1
- package/src/utils/index.ts +3 -0
- package/dist/chunk-DH6HTYOV.js.map +0 -1
- package/dist/chunk-G3QYCV63.cjs.map +0 -1
- package/dist/chunk-GA5AN24T.cjs.map +0 -1
- package/dist/chunk-HGKWTKW7.js.map +0 -1
- package/dist/chunk-J4XR6YYZ.cjs.map +0 -1
- package/dist/chunk-MTBFE3JF.js.map +0 -1
- package/dist/chunk-Q3AO2QWK.cjs.map +0 -1
- package/dist/chunk-TTUQSOBL.js.map +0 -1
- /package/dist/{chunk-HBO2DMX4.js.map → chunk-3KZXOLFK.js.map} +0 -0
- /package/dist/{chunk-RNKXG55J.js.map → chunk-6WMVBCNA.js.map} +0 -0
- /package/dist/{chunk-A636Y7GU.js.map → chunk-7RVSGGO6.js.map} +0 -0
- /package/dist/{chunk-YXOWUHGQ.js.map → chunk-AYFWYOL6.js.map} +0 -0
- /package/dist/{chunk-GYFUGMNM.js.map → chunk-C3NPMZBI.js.map} +0 -0
- /package/dist/{chunk-YORONSXG.js.map → chunk-LSPBPUQM.js.map} +0 -0
- /package/dist/{chunk-AMPQKNAX.js.map → chunk-OATWTTCI.js.map} +0 -0
- /package/dist/{chunk-R6SMQ2CO.js.map → chunk-PQN5R5II.js.map} +0 -0
- /package/dist/{chunk-5Z5GXXRU.js.map → chunk-TFDNJTBX.js.map} +0 -0
- /package/dist/{chunk-NOWXUQWF.js.map → chunk-XXG2Z2JT.js.map} +0 -0
- /package/dist/{chunk-3I4IZYHM.js.map → chunk-ZVUR3A33.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/types/announcement.ts"],"names":[],"mappings":";;;
|
|
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,4 +1,5 @@
|
|
|
1
|
-
import type { LegacyPlatform, PlatformFilter
|
|
1
|
+
import type { LegacyPlatform, PlatformFilter } from './platform';
|
|
2
|
+
import type { EntityPlatformAssoc } from './entity-platform';
|
|
2
3
|
export interface Announcement {
|
|
3
4
|
id: string;
|
|
4
5
|
title: string;
|
|
@@ -8,8 +9,9 @@ export interface Announcement {
|
|
|
8
9
|
icon_url?: string;
|
|
9
10
|
/** Extra props for the main bar/icon */
|
|
10
11
|
icon_props?: Record<string, any>;
|
|
11
|
-
|
|
12
|
-
|
|
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[];
|
|
13
15
|
is_active: boolean;
|
|
14
16
|
cta_enabled?: boolean;
|
|
15
17
|
cta_text?: string;
|
|
@@ -95,9 +97,23 @@ export interface AnnouncementListResponse {
|
|
|
95
97
|
is_active?: boolean;
|
|
96
98
|
};
|
|
97
99
|
}
|
|
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
|
+
*/
|
|
98
105
|
export interface AnnouncementResponse {
|
|
99
|
-
announcement: Announcement;
|
|
100
|
-
}
|
|
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
|
+
};
|
|
101
117
|
export interface AnnouncementFormData {
|
|
102
118
|
title: string;
|
|
103
119
|
description: string;
|
|
@@ -179,8 +195,22 @@ export interface AnnouncementStats {
|
|
|
179
195
|
recent_announcements: Announcement[];
|
|
180
196
|
}
|
|
181
197
|
export interface AnnouncementBarProps {
|
|
182
|
-
|
|
183
|
-
|
|
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;
|
|
184
214
|
className?: string;
|
|
185
215
|
}
|
|
186
216
|
export interface AnnouncementFormProps {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"announcement.d.ts","sourceRoot":"","sources":["../../src/types/announcement.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"announcement.d.ts","sourceRoot":"","sources":["../../src/types/announcement.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
// src/types/announcement.ts
|
|
2
|
+
var ANNOUNCEMENT_CTA_DEFAULTS = {
|
|
3
|
+
background: "#1A1A1A",
|
|
4
|
+
text: "#FAFAFA"
|
|
5
|
+
};
|
|
2
6
|
var AVAILABLE_SVG_ICONS = [
|
|
3
7
|
// OpenFrame Logo Options
|
|
4
8
|
{ name: "openframe-logo", label: "OpenFrame Logo", component: null },
|
|
@@ -14,6 +18,6 @@ var AVAILABLE_SVG_ICONS = [
|
|
|
14
18
|
{ name: "package", label: "Package", component: null }
|
|
15
19
|
];
|
|
16
20
|
|
|
17
|
-
export { AVAILABLE_SVG_ICONS };
|
|
21
|
+
export { ANNOUNCEMENT_CTA_DEFAULTS, AVAILABLE_SVG_ICONS };
|
|
18
22
|
//# sourceMappingURL=announcement.js.map
|
|
19
23
|
//# sourceMappingURL=announcement.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/types/announcement.ts"],"names":[],"mappings":";
|
|
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]; "]}
|
package/dist/types/index.cjs
CHANGED
|
@@ -7,6 +7,10 @@ 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
|
+
};
|
|
10
14
|
var AVAILABLE_SVG_ICONS = [
|
|
11
15
|
// OpenFrame Logo Options
|
|
12
16
|
{ name: "openframe-logo", label: "OpenFrame Logo", component: null },
|
|
@@ -558,6 +562,7 @@ var TMCG_SOCIAL_PLATFORMS = {
|
|
|
558
562
|
slack: "Slack"
|
|
559
563
|
};
|
|
560
564
|
|
|
565
|
+
exports.ANNOUNCEMENT_CTA_DEFAULTS = ANNOUNCEMENT_CTA_DEFAULTS;
|
|
561
566
|
exports.AVAILABLE_SVG_ICONS = AVAILABLE_SVG_ICONS;
|
|
562
567
|
exports.OSTypeValues = OSTypeValues;
|
|
563
568
|
exports.OS_TYPES = OS_TYPES;
|