@flamingo-stack/openframe-frontend-core 0.0.178 → 0.0.179

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 (53) hide show
  1. package/dist/{chunk-L4T24AN4.cjs → chunk-4TM2SBMX.cjs} +855 -1325
  2. package/dist/chunk-4TM2SBMX.cjs.map +1 -0
  3. package/dist/{chunk-AAX27BCR.js → chunk-ZMQP3UZJ.js} +3690 -4160
  4. package/dist/chunk-ZMQP3UZJ.js.map +1 -0
  5. package/dist/components/features/entity-video-section.d.ts +54 -0
  6. package/dist/components/features/entity-video-section.d.ts.map +1 -0
  7. package/dist/components/features/index.cjs +18 -2
  8. package/dist/components/features/index.cjs.map +1 -1
  9. package/dist/components/features/index.d.ts +4 -2
  10. package/dist/components/features/index.d.ts.map +1 -1
  11. package/dist/components/features/index.js +21 -5
  12. package/dist/components/features/video-bites-display.d.ts +38 -0
  13. package/dist/components/features/video-bites-display.d.ts.map +1 -0
  14. package/dist/components/features/video-ratio-tabs.d.ts +62 -0
  15. package/dist/components/features/video-ratio-tabs.d.ts.map +1 -0
  16. package/dist/components/features/video.d.ts +94 -0
  17. package/dist/components/features/video.d.ts.map +1 -0
  18. package/dist/components/index.cjs +18 -2
  19. package/dist/components/index.cjs.map +1 -1
  20. package/dist/components/index.js +21 -5
  21. package/dist/components/media-carousel.d.ts.map +1 -1
  22. package/dist/components/navigation/index.cjs +2 -2
  23. package/dist/components/navigation/index.js +1 -1
  24. package/dist/components/shared/product-release/release-detail-page.d.ts.map +1 -1
  25. package/dist/components/ui/index.cjs +2 -2
  26. package/dist/components/ui/index.js +1 -1
  27. package/dist/index.cjs +18 -2
  28. package/dist/index.cjs.map +1 -1
  29. package/dist/index.js +21 -5
  30. package/package.json +2 -2
  31. package/src/components/features/entity-video-section.tsx +175 -0
  32. package/src/components/features/index.ts +9 -2
  33. package/src/components/features/video-bites-display.tsx +216 -0
  34. package/src/components/features/video-ratio-tabs.tsx +174 -0
  35. package/src/components/features/video.tsx +474 -0
  36. package/src/components/media-carousel.tsx +43 -236
  37. package/src/components/shared/product-release/release-detail-page.tsx +26 -19
  38. package/dist/chunk-AAX27BCR.js.map +0 -1
  39. package/dist/chunk-L4T24AN4.cjs.map +0 -1
  40. package/dist/components/features/video-player.d.ts +0 -44
  41. package/dist/components/features/video-player.d.ts.map +0 -1
  42. package/dist/components/features/youtube-embed.d.ts +0 -31
  43. package/dist/components/features/youtube-embed.d.ts.map +0 -1
  44. package/dist/utils/lite-youtube-embed-stub.d.ts +0 -8
  45. package/dist/utils/lite-youtube-embed-stub.d.ts.map +0 -1
  46. package/dist/utils/lite-youtube-embed.d.ts +0 -9
  47. package/dist/utils/lite-youtube-embed.d.ts.map +0 -1
  48. package/src/components/features/.video-player.md +0 -44
  49. package/src/components/features/.youtube-embed.md +0 -40
  50. package/src/components/features/video-player.tsx +0 -893
  51. package/src/components/features/youtube-embed.tsx +0 -158
  52. package/src/utils/lite-youtube-embed-stub.tsx +0 -21
  53. package/src/utils/lite-youtube-embed.tsx +0 -46
@@ -0,0 +1,54 @@
1
+ import { ComponentType } from 'react';
2
+ import type { VideoTeaser } from '../../types/video-processing';
3
+ /**
4
+ * <EntityVideoSection> — public detail-page video block.
5
+ *
6
+ * Tabbed Full Video / Highlights when both exist, plus optional
7
+ * markdown summary + video bites grid. The actual video rendering
8
+ * (YouTube facade, Mux HLS, MP4 fallback) is delegated to `<Video>` —
9
+ * the single source of truth.
10
+ *
11
+ * YouTube takes precedence over the uploaded video when both
12
+ * `youtubeUrl` and `mainVideoUrl` are present. That precedence is
13
+ * resolved here (in the section wrapper) rather than inside `<Video>`,
14
+ * so the underlying primitive stays single-source-per-render.
15
+ */
16
+ interface MarkdownRendererProps {
17
+ content: string;
18
+ }
19
+ export interface EntityVideoSectionProps {
20
+ /** Main uploaded video URL. */
21
+ mainVideoUrl?: string | null;
22
+ /** YouTube URL (takes priority over `mainVideoUrl` for display). */
23
+ youtubeUrl?: string | null;
24
+ /** AI-generated highlight video URL. */
25
+ highlightVideoUrl?: string | null;
26
+ /** Thumbnail for highlight video. */
27
+ highlightVideoThumbnail?: string | null;
28
+ /** Poster/thumbnail for main video. */
29
+ mainVideoPoster?: string | null;
30
+ /** Title for YouTube embed. */
31
+ title?: string;
32
+ /** AI-generated video summary (markdown). */
33
+ videoSummary?: string | null;
34
+ /** Video bites/teasers array. */
35
+ videoBites?: VideoTeaser[];
36
+ /** Title for the video bites section. */
37
+ bitesTitle?: string;
38
+ /** Whether to filter bites to published only. */
39
+ filterPublishedBites?: boolean;
40
+ /** Markdown renderer component injected by the host app. */
41
+ MarkdownRenderer?: ComponentType<MarkdownRendererProps>;
42
+ /**
43
+ * Raw SRT content. Deprecated — pass `captionsUrl` instead.
44
+ * Forwarded to `<Video>` for the dev-only warning.
45
+ */
46
+ srtContent?: string | null;
47
+ /** HTTPS URL to a VTT captions file (rendered as native `<track>`). */
48
+ captionsUrl?: string | null;
49
+ /** LCP hint — when true, the full-video tab's poster eager-loads. */
50
+ priority?: boolean;
51
+ }
52
+ export declare function EntityVideoSection({ mainVideoUrl, youtubeUrl, highlightVideoUrl, highlightVideoThumbnail, mainVideoPoster, title, videoSummary, videoBites, bitesTitle, filterPublishedBites, MarkdownRenderer, srtContent, captionsUrl, priority, }: EntityVideoSectionProps): import("react/jsx-runtime").JSX.Element | null;
53
+ export {};
54
+ //# sourceMappingURL=entity-video-section.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-video-section.d.ts","sourceRoot":"","sources":["../../../src/components/features/entity-video-section.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAOtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAIhE;;;;;;;;;;;;GAYG;AAEH,UAAU,qBAAqB;IAC7B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,+BAA+B;IAC/B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,wCAAwC;IACxC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,qCAAqC;IACrC,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,uCAAuC;IACvC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,iCAAiC;IACjC,UAAU,CAAC,EAAE,WAAW,EAAE,CAAC;IAC3B,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iDAAiD;IACjD,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,4DAA4D;IAC5D,gBAAgB,CAAC,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAC;IACxD;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,uEAAuE;IACvE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,qEAAqE;IACrE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,kBAAkB,CAAC,EACjC,YAAY,EACZ,UAAU,EACV,iBAAiB,EACjB,uBAAuB,EACvB,eAAe,EACf,KAAe,EACf,YAAY,EACZ,UAAU,EACV,UAA+B,EAC/B,oBAA2B,EAC3B,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,QAAgB,GACjB,EAAE,uBAAuB,kDA8FzB"}
@@ -77,7 +77,15 @@
77
77
 
78
78
 
79
79
 
80
- var _chunkL4T24AN4cjs = require('../../chunk-L4T24AN4.cjs');
80
+
81
+
82
+
83
+
84
+
85
+
86
+
87
+
88
+ var _chunk4TM2SBMXcjs = require('../../chunk-4TM2SBMX.cjs');
81
89
  require('../../chunk-ALW3D72O.cjs');
82
90
  require('../../chunk-BJTOSUT4.cjs');
83
91
  require('../../chunk-EWIC26TW.cjs');
@@ -163,5 +171,13 @@ require('../../chunk-VRHGVLSL.cjs');
163
171
 
164
172
 
165
173
 
166
- exports.AIEnrichButton = _chunkL4T24AN4cjs.AIEnrichButton; exports.AIEnrichSection = _chunkL4T24AN4cjs.AIEnrichSection; exports.AIRequiredBadge = _chunkL4T24AN4cjs.AIRequiredBadge; exports.AIStatusIndicator = _chunkL4T24AN4cjs.AIStatusIndicator; exports.AIWarningsSection = _chunkL4T24AN4cjs.AIWarningsSection; exports.ArrayEntryManager = _chunkL4T24AN4cjs.ArrayEntryManager; exports.AuthProvidersList = _chunkL4T24AN4cjs.AuthProvidersList; exports.Board = _chunkL4T24AN4cjs.Board; exports.BoardColumn = _chunkL4T24AN4cjs.BoardColumn; exports.BoardColumnHeader = _chunkL4T24AN4cjs.BoardColumnHeader; exports.ChangelogManager = _chunkL4T24AN4cjs.ChangelogManager; exports.ChangelogSectionsManager = _chunkL4T24AN4cjs.ChangelogSectionsManager; exports.ClickUpTasksManager = _chunkL4T24AN4cjs.ClickUpTasksManager; exports.CommandBox = _chunkL4T24AN4cjs.CommandBox; exports.ConfidenceBadge = _chunkL4T24AN4cjs.ConfidenceBadge; exports.DynamicThemeProvider = _chunkL4T24AN4cjs.DynamicThemeProvider; exports.EntitySummaryEditor = _chunkL4T24AN4cjs.EntitySummaryEditor; exports.ErrorBoundary = _chunkL4T24AN4cjs.ErrorBoundary; exports.FigmaPrototypeViewer = _chunkL4T24AN4cjs.FigmaPrototypeViewer; exports.FiltersDropdown = _chunkL4T24AN4cjs.FiltersDropdown; exports.GitHubReleasesManager = _chunkL4T24AN4cjs.GitHubReleasesManager; exports.HighlightConfigSection = _chunkL4T24AN4cjs.HighlightConfigSection; exports.HighlightGenerationSection = _chunkL4T24AN4cjs.HighlightGenerationSection; exports.HighlightVideoCombinedSection = _chunkL4T24AN4cjs.HighlightVideoCombinedSection; exports.HighlightVideoPreview = _chunkL4T24AN4cjs.HighlightVideoPreview; exports.HighlightVideoSection = _chunkL4T24AN4cjs.HighlightVideoSection; exports.KnowledgeBaseLinksManager = _chunkL4T24AN4cjs.KnowledgeBaseLinksManager; exports.LoadingProvider = _chunkL4T24AN4cjs.LoadingProvider; exports.MediaGalleryManager = _chunkL4T24AN4cjs.MediaGalleryManager; exports.MoreAboutButton = _chunkL4T24AN4cjs.MoreAboutButton; exports.NotificationDrawer = _chunkL4T24AN4cjs.NotificationDrawer; exports.NotificationTile = _chunkL4T24AN4cjs.NotificationTile; exports.NotificationsProvider = _chunkL4T24AN4cjs.NotificationsProvider; exports.OPENFRAME_PATHS = _chunkL4T24AN4cjs.OPENFRAME_PATHS; exports.OSTypeBadge = _chunkL4T24AN4cjs.OSTypeBadge; exports.OSTypeBadgeGroup = _chunkL4T24AN4cjs.OSTypeBadgeGroup; exports.OSTypeIcon = _chunkL4T24AN4cjs.OSTypeIcon; exports.OSTypeLabel = _chunkL4T24AN4cjs.OSTypeLabel; exports.OrganizationIcon = _chunkL4T24AN4cjs.OrganizationIcon; exports.ParallaxImageShowcase = _chunkL4T24AN4cjs.ParallaxImageShowcase; exports.PathsDisplay = _chunkL4T24AN4cjs.PathsDisplay; exports.PlatformBadge = _chunkL4T24AN4cjs.PlatformBadge; exports.PlatformFilterComponent = _chunkL4T24AN4cjs.PlatformFilterComponent; exports.PolicyConfigurationPanel = _chunkL4T24AN4cjs.PolicyConfigurationPanel; exports.ProviderButton = _chunkL4T24AN4cjs.ProviderButton; exports.PushButtonSelector = _chunkL4T24AN4cjs.PushButtonSelector; exports.ReleaseMediaManager = _chunkL4T24AN4cjs.ReleaseMediaManager; exports.SEOEditorPreview = _chunkL4T24AN4cjs.SEOEditorPreview; exports.SectionSelector = _chunkL4T24AN4cjs.SectionSelector; exports.SelectButton = _chunkL4T24AN4cjs.SelectButton; exports.SocialLinksManager = _chunkL4T24AN4cjs.SocialLinksManager; exports.StartWithOpenFrameButton = _chunkL4T24AN4cjs.StartWithOpenFrameButton; exports.StatusFilterComponent = _chunkL4T24AN4cjs.StatusFilterComponent; exports.TagsSelector = _chunkL4T24AN4cjs.TagsSelector; exports.TicketCard = _chunkL4T24AN4cjs.TicketCard; exports.TicketCardSkeleton = _chunkL4T24AN4cjs.TicketCardSkeleton; exports.TranscribeAndSummarizeCombinedSection = _chunkL4T24AN4cjs.TranscribeAndSummarizeCombinedSection; exports.TranscribeSummarizeSection = _chunkL4T24AN4cjs.TranscribeSummarizeSection; exports.TranscriptSummaryEditor = _chunkL4T24AN4cjs.TranscriptSummaryEditor; exports.VideoClipsSection = _chunkL4T24AN4cjs.VideoClipsSection; exports.VideoPlayer = _chunkL4T24AN4cjs.VideoPlayer; exports.VideoSourceSelector = _chunkL4T24AN4cjs.VideoSourceSelector; exports.ViewToggle = _chunkL4T24AN4cjs.ViewToggle; exports.WaitlistForm = _chunkL4T24AN4cjs.WaitlistForm; exports.YouTubeEmbed = _chunkL4T24AN4cjs.YouTubeEmbed; exports.columnFromTicketStatus = _chunkL4T24AN4cjs.columnFromTicketStatus; exports.extractYouTubeId = _chunkL4T24AN4cjs.extractYouTubeId; exports.getOpenFramePaths = _chunkL4T24AN4cjs.getOpenFramePaths; exports.groupTicketsByStatus = _chunkL4T24AN4cjs.groupTicketsByStatus; exports.tintOnDark = _chunkL4T24AN4cjs.tintOnDark; exports.useBoardCollapse = _chunkL4T24AN4cjs.useBoardCollapse; exports.useDynamicTheme = _chunkL4T24AN4cjs.useDynamicTheme; exports.useFiltersDropdown = _chunkL4T24AN4cjs.useFiltersDropdown; exports.useLoading = _chunkL4T24AN4cjs.useLoading; exports.useNotifications = _chunkL4T24AN4cjs.useNotifications; exports.useOptionalNotifications = _chunkL4T24AN4cjs.useOptionalNotifications;
174
+
175
+
176
+
177
+
178
+
179
+
180
+
181
+
182
+ exports.AIEnrichButton = _chunk4TM2SBMXcjs.AIEnrichButton; exports.AIEnrichSection = _chunk4TM2SBMXcjs.AIEnrichSection; exports.AIRequiredBadge = _chunk4TM2SBMXcjs.AIRequiredBadge; exports.AIStatusIndicator = _chunk4TM2SBMXcjs.AIStatusIndicator; exports.AIWarningsSection = _chunk4TM2SBMXcjs.AIWarningsSection; exports.ArrayEntryManager = _chunk4TM2SBMXcjs.ArrayEntryManager; exports.AuthProvidersList = _chunk4TM2SBMXcjs.AuthProvidersList; exports.Board = _chunk4TM2SBMXcjs.Board; exports.BoardColumn = _chunk4TM2SBMXcjs.BoardColumn; exports.BoardColumnHeader = _chunk4TM2SBMXcjs.BoardColumnHeader; exports.ChangelogManager = _chunk4TM2SBMXcjs.ChangelogManager; exports.ChangelogSectionsManager = _chunk4TM2SBMXcjs.ChangelogSectionsManager; exports.ClickUpTasksManager = _chunk4TM2SBMXcjs.ClickUpTasksManager; exports.CommandBox = _chunk4TM2SBMXcjs.CommandBox; exports.ConfidenceBadge = _chunk4TM2SBMXcjs.ConfidenceBadge; exports.DynamicThemeProvider = _chunk4TM2SBMXcjs.DynamicThemeProvider; exports.EntitySummaryEditor = _chunk4TM2SBMXcjs.EntitySummaryEditor; exports.EntityVideoSection = _chunk4TM2SBMXcjs.EntityVideoSection; exports.ErrorBoundary = _chunk4TM2SBMXcjs.ErrorBoundary; exports.FigmaPrototypeViewer = _chunk4TM2SBMXcjs.FigmaPrototypeViewer; exports.FiltersDropdown = _chunk4TM2SBMXcjs.FiltersDropdown; exports.GitHubReleasesManager = _chunk4TM2SBMXcjs.GitHubReleasesManager; exports.HighlightConfigSection = _chunk4TM2SBMXcjs.HighlightConfigSection; exports.HighlightGenerationSection = _chunk4TM2SBMXcjs.HighlightGenerationSection; exports.HighlightVideoCombinedSection = _chunk4TM2SBMXcjs.HighlightVideoCombinedSection; exports.HighlightVideoPreview = _chunk4TM2SBMXcjs.HighlightVideoPreview; exports.HighlightVideoSection = _chunk4TM2SBMXcjs.HighlightVideoSection; exports.KnowledgeBaseLinksManager = _chunk4TM2SBMXcjs.KnowledgeBaseLinksManager; exports.LoadingProvider = _chunk4TM2SBMXcjs.LoadingProvider; exports.MediaGalleryManager = _chunk4TM2SBMXcjs.MediaGalleryManager; exports.MoreAboutButton = _chunk4TM2SBMXcjs.MoreAboutButton; exports.NotificationDrawer = _chunk4TM2SBMXcjs.NotificationDrawer; exports.NotificationTile = _chunk4TM2SBMXcjs.NotificationTile; exports.NotificationsProvider = _chunk4TM2SBMXcjs.NotificationsProvider; exports.OPENFRAME_PATHS = _chunk4TM2SBMXcjs.OPENFRAME_PATHS; exports.OSTypeBadge = _chunk4TM2SBMXcjs.OSTypeBadge; exports.OSTypeBadgeGroup = _chunk4TM2SBMXcjs.OSTypeBadgeGroup; exports.OSTypeIcon = _chunk4TM2SBMXcjs.OSTypeIcon; exports.OSTypeLabel = _chunk4TM2SBMXcjs.OSTypeLabel; exports.OrganizationIcon = _chunk4TM2SBMXcjs.OrganizationIcon; exports.ParallaxImageShowcase = _chunk4TM2SBMXcjs.ParallaxImageShowcase; exports.PathsDisplay = _chunk4TM2SBMXcjs.PathsDisplay; exports.PlatformBadge = _chunk4TM2SBMXcjs.PlatformBadge; exports.PlatformFilterComponent = _chunk4TM2SBMXcjs.PlatformFilterComponent; exports.PolicyConfigurationPanel = _chunk4TM2SBMXcjs.PolicyConfigurationPanel; exports.ProviderButton = _chunk4TM2SBMXcjs.ProviderButton; exports.PushButtonSelector = _chunk4TM2SBMXcjs.PushButtonSelector; exports.RATIO_DISPLAY_GRID_CLASS = _chunk4TM2SBMXcjs.RATIO_DISPLAY_GRID_CLASS; exports.RATIO_GRID_CLASS = _chunk4TM2SBMXcjs.RATIO_GRID_CLASS; exports.RatioTabs = _chunk4TM2SBMXcjs.RatioTabs; exports.ReleaseMediaManager = _chunk4TM2SBMXcjs.ReleaseMediaManager; exports.SEOEditorPreview = _chunk4TM2SBMXcjs.SEOEditorPreview; exports.SectionSelector = _chunk4TM2SBMXcjs.SectionSelector; exports.SelectButton = _chunk4TM2SBMXcjs.SelectButton; exports.SocialLinksManager = _chunk4TM2SBMXcjs.SocialLinksManager; exports.StartWithOpenFrameButton = _chunk4TM2SBMXcjs.StartWithOpenFrameButton; exports.StatusFilterComponent = _chunk4TM2SBMXcjs.StatusFilterComponent; exports.TagsSelector = _chunk4TM2SBMXcjs.TagsSelector; exports.TicketCard = _chunk4TM2SBMXcjs.TicketCard; exports.TicketCardSkeleton = _chunk4TM2SBMXcjs.TicketCardSkeleton; exports.TranscribeAndSummarizeCombinedSection = _chunk4TM2SBMXcjs.TranscribeAndSummarizeCombinedSection; exports.TranscribeSummarizeSection = _chunk4TM2SBMXcjs.TranscribeSummarizeSection; exports.TranscriptSummaryEditor = _chunk4TM2SBMXcjs.TranscriptSummaryEditor; exports.Video = _chunk4TM2SBMXcjs.Video; exports.VideoBiteCard = _chunk4TM2SBMXcjs.VideoBiteCard; exports.VideoBitesDisplay = _chunk4TM2SBMXcjs.VideoBitesDisplay; exports.VideoClipsSection = _chunk4TM2SBMXcjs.VideoClipsSection; exports.VideoSourceSelector = _chunk4TM2SBMXcjs.VideoSourceSelector; exports.ViewToggle = _chunk4TM2SBMXcjs.ViewToggle; exports.WaitlistForm = _chunk4TM2SBMXcjs.WaitlistForm; exports.columnFromTicketStatus = _chunk4TM2SBMXcjs.columnFromTicketStatus; exports.detectAspectRatio = _chunk4TM2SBMXcjs.detectAspectRatio; exports.extractYouTubeId = _chunk4TM2SBMXcjs.extractYouTubeId; exports.getOpenFramePaths = _chunk4TM2SBMXcjs.getOpenFramePaths; exports.groupByAspectRatio = _chunk4TM2SBMXcjs.groupByAspectRatio; exports.groupTicketsByStatus = _chunk4TM2SBMXcjs.groupTicketsByStatus; exports.ratioToCategory = _chunk4TM2SBMXcjs.ratioToCategory; exports.tintOnDark = _chunk4TM2SBMXcjs.tintOnDark; exports.useBoardCollapse = _chunk4TM2SBMXcjs.useBoardCollapse; exports.useDynamicTheme = _chunk4TM2SBMXcjs.useDynamicTheme; exports.useFiltersDropdown = _chunk4TM2SBMXcjs.useFiltersDropdown; exports.useLoading = _chunk4TM2SBMXcjs.useLoading; exports.useNotifications = _chunk4TM2SBMXcjs.useNotifications; exports.useOptionalNotifications = _chunk4TM2SBMXcjs.useOptionalNotifications;
167
183
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/components/features/index.cjs"],"names":[],"mappings":"AAAA,qFAAY;AACZ,YAAY;AACZ;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,4DAAiC;AACjC,oCAAiC;AACjC,oCAAiC;AACjC,oCAAiC;AACjC,oCAAiC;AACjC,oCAAiC;AACjC,oCAAiC;AACjC,oCAAiC;AACjC,oCAAiC;AACjC;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,q2JAAC","file":"/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/components/features/index.cjs"}
1
+ {"version":3,"sources":["/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/components/features/index.cjs"],"names":[],"mappings":"AAAA,qFAAY;AACZ,YAAY;AACZ;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,4DAAiC;AACjC,oCAAiC;AACjC,oCAAiC;AACjC,oCAAiC;AACjC,oCAAiC;AACjC,oCAAiC;AACjC,oCAAiC;AACjC,oCAAiC;AACjC,oCAAiC;AACjC;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,+1KAAC","file":"/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/components/features/index.cjs"}
@@ -30,7 +30,10 @@ export * from './social-links-manager';
30
30
  export * from './start-with-openframe-button';
31
31
  export * from './status-filter-component';
32
32
  export * from './tags-selector';
33
- export * from './video-player';
33
+ export * from './video';
34
+ export * from './video-ratio-tabs';
35
+ export * from './video-bites-display';
36
+ export * from './entity-video-section';
34
37
  export * from './video-source-selector';
35
38
  export * from './transcript-summary-editor';
36
39
  export * from './highlight-video-section';
@@ -43,7 +46,6 @@ export * from './highlight-video-preview';
43
46
  export * from './transcribe-and-summarize-combined-section';
44
47
  export * from './highlight-video-combined-section';
45
48
  export * from './view-toggle';
46
- export * from './youtube-embed';
47
49
  export * from './ai-enrich';
48
50
  export * from './policy-configuration-panel';
49
51
  export * from './waitlist-form';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/features/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAA;AAC3F,cAAc,uBAAuB,CAAA;AACrC,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AACnC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,yBAAyB,CAAA;AACvC,cAAc,eAAe,CAAA;AAC7B,cAAc,kBAAkB,CAAA;AAChC,cAAc,0BAA0B,CAAA;AACxC,cAAc,oBAAoB,CAAA;AAClC,cAAc,2BAA2B,CAAA;AACzC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,oBAAoB,CAAA;AAClC,cAAc,yBAAyB,CAAA;AACvC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,uBAAuB,CAAA;AACrC,cAAc,2BAA2B,CAAA;AACzC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,wBAAwB,CAAA;AACtC,cAAc,yBAAyB,CAAA;AACvC,cAAc,oBAAoB,CAAA;AAClC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,sBAAsB,CAAA;AACpC,cAAc,wBAAwB,CAAA;AACtC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,2BAA2B,CAAA;AACzC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,yBAAyB,CAAA;AACvC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,2BAA2B,CAAA;AACzC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,yBAAyB,CAAA;AACvC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,uBAAuB,CAAA;AACrC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,2BAA2B,CAAA;AACzC,cAAc,6CAA6C,CAAA;AAC3D,cAAc,oCAAoC,CAAA;AAClD,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAE/B,cAAc,aAAa,CAAA;AAC3B,cAAc,8BAA8B,CAAA;AAC5C,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,SAAS,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/features/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAA;AAC3F,cAAc,uBAAuB,CAAA;AACrC,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AACnC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,yBAAyB,CAAA;AACvC,cAAc,eAAe,CAAA;AAC7B,cAAc,kBAAkB,CAAA;AAChC,cAAc,0BAA0B,CAAA;AACxC,cAAc,oBAAoB,CAAA;AAClC,cAAc,2BAA2B,CAAA;AACzC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,oBAAoB,CAAA;AAClC,cAAc,yBAAyB,CAAA;AACvC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,uBAAuB,CAAA;AACrC,cAAc,2BAA2B,CAAA;AACzC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,wBAAwB,CAAA;AACtC,cAAc,yBAAyB,CAAA;AACvC,cAAc,oBAAoB,CAAA;AAClC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,sBAAsB,CAAA;AACpC,cAAc,wBAAwB,CAAA;AACtC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,2BAA2B,CAAA;AACzC,cAAc,iBAAiB,CAAA;AAM/B,cAAc,SAAS,CAAA;AACvB,cAAc,oBAAoB,CAAA;AAClC,cAAc,uBAAuB,CAAA;AACrC,cAAc,wBAAwB,CAAA;AACtC,cAAc,yBAAyB,CAAA;AACvC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,2BAA2B,CAAA;AACzC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,yBAAyB,CAAA;AACvC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,uBAAuB,CAAA;AACrC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,2BAA2B,CAAA;AACzC,cAAc,6CAA6C,CAAA;AAC3D,cAAc,oCAAoC,CAAA;AAClD,cAAc,eAAe,CAAA;AAE7B,cAAc,aAAa,CAAA;AAC3B,cAAc,8BAA8B,CAAA;AAC5C,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,SAAS,CAAA"}
@@ -18,6 +18,7 @@ import {
18
18
  ConfidenceBadge,
19
19
  DynamicThemeProvider,
20
20
  EntitySummaryEditor,
21
+ EntityVideoSection,
21
22
  ErrorBoundary,
22
23
  FigmaPrototypeViewer,
23
24
  FiltersDropdown,
@@ -47,6 +48,9 @@ import {
47
48
  PolicyConfigurationPanel,
48
49
  ProviderButton,
49
50
  PushButtonSelector,
51
+ RATIO_DISPLAY_GRID_CLASS,
52
+ RATIO_GRID_CLASS,
53
+ RatioTabs,
50
54
  ReleaseMediaManager,
51
55
  SEOEditorPreview,
52
56
  SectionSelector,
@@ -60,16 +64,20 @@ import {
60
64
  TranscribeAndSummarizeCombinedSection,
61
65
  TranscribeSummarizeSection,
62
66
  TranscriptSummaryEditor,
67
+ Video,
68
+ VideoBiteCard,
69
+ VideoBitesDisplay,
63
70
  VideoClipsSection,
64
- VideoPlayer,
65
71
  VideoSourceSelector,
66
72
  ViewToggle,
67
73
  WaitlistForm,
68
- YouTubeEmbed,
69
74
  columnFromTicketStatus,
75
+ detectAspectRatio,
70
76
  extractYouTubeId,
71
77
  getOpenFramePaths,
78
+ groupByAspectRatio,
72
79
  groupTicketsByStatus,
80
+ ratioToCategory,
73
81
  tintOnDark,
74
82
  useBoardCollapse,
75
83
  useDynamicTheme,
@@ -77,7 +85,7 @@ import {
77
85
  useLoading,
78
86
  useNotifications,
79
87
  useOptionalNotifications
80
- } from "../../chunk-AAX27BCR.js";
88
+ } from "../../chunk-ZMQP3UZJ.js";
81
89
  import "../../chunk-FMWHOUFE.js";
82
90
  import "../../chunk-HSTU7Y4R.js";
83
91
  import "../../chunk-F7ETWH2M.js";
@@ -104,6 +112,7 @@ export {
104
112
  ConfidenceBadge,
105
113
  DynamicThemeProvider,
106
114
  EntitySummaryEditor,
115
+ EntityVideoSection,
107
116
  ErrorBoundary,
108
117
  FigmaPrototypeViewer,
109
118
  FiltersDropdown,
@@ -133,6 +142,9 @@ export {
133
142
  PolicyConfigurationPanel,
134
143
  ProviderButton,
135
144
  PushButtonSelector,
145
+ RATIO_DISPLAY_GRID_CLASS,
146
+ RATIO_GRID_CLASS,
147
+ RatioTabs,
136
148
  ReleaseMediaManager,
137
149
  SEOEditorPreview,
138
150
  SectionSelector,
@@ -146,16 +158,20 @@ export {
146
158
  TranscribeAndSummarizeCombinedSection,
147
159
  TranscribeSummarizeSection,
148
160
  TranscriptSummaryEditor,
161
+ Video,
162
+ VideoBiteCard,
163
+ VideoBitesDisplay,
149
164
  VideoClipsSection,
150
- VideoPlayer,
151
165
  VideoSourceSelector,
152
166
  ViewToggle,
153
167
  WaitlistForm,
154
- YouTubeEmbed,
155
168
  columnFromTicketStatus,
169
+ detectAspectRatio,
156
170
  extractYouTubeId,
157
171
  getOpenFramePaths,
172
+ groupByAspectRatio,
158
173
  groupTicketsByStatus,
174
+ ratioToCategory,
159
175
  tintOnDark,
160
176
  useBoardCollapse,
161
177
  useDynamicTheme,
@@ -0,0 +1,38 @@
1
+ import type { VideoTeaser } from '../../types/video-processing';
2
+ export interface VideoBitesDisplayProps {
3
+ /** Array of video bites/teasers to display. */
4
+ bites: VideoTeaser[];
5
+ /** Title for the section. */
6
+ title?: string;
7
+ /** Whether to filter to only show published bites. Default `true`. */
8
+ filterPublished?: boolean;
9
+ /** Whether to show the title section heading. Default `true`. */
10
+ showTitle?: boolean;
11
+ }
12
+ /**
13
+ * Unified video-bites grid.
14
+ *
15
+ * Groups by aspect ratio when multiple ratios are present, otherwise
16
+ * renders a flat grid. Each bite mounts lazily via `LazyBite` so
17
+ * off-screen players don't cost the page.
18
+ */
19
+ export declare function VideoBitesDisplay({ bites, title, filterPublished, showTitle, }: VideoBitesDisplayProps): import("react/jsx-runtime").JSX.Element | null;
20
+ interface VideoBiteCardProps {
21
+ url: string;
22
+ title?: string | null;
23
+ thumbnailUrl?: string | null;
24
+ }
25
+ /**
26
+ * Individual bite card — routes through `<Video>` so the SSoT player
27
+ * is the only video primitive in the lib.
28
+ *
29
+ * Layout: `LazyBite` sets the OUTER `aspectRatio` (portrait/square/landscape),
30
+ * but `<Card>` between LazyBite and `<Video>` has no intrinsic height, so
31
+ * we wrap `<Video>` in `layout="fill"` + an explicit `relative` parent so
32
+ * the player fills the bite's aspect box from first paint. Otherwise
33
+ * MuxPlayer renders at its intrinsic default size and grows once metadata
34
+ * loads — the same CLS that hits the centered layout.
35
+ */
36
+ declare function VideoBiteCard({ url, title, thumbnailUrl }: VideoBiteCardProps): import("react/jsx-runtime").JSX.Element;
37
+ export { VideoBiteCard };
38
+ //# sourceMappingURL=video-bites-display.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"video-bites-display.d.ts","sourceRoot":"","sources":["../../../src/components/features/video-bites-display.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAoEhE,MAAM,WAAW,sBAAsB;IACrC,+CAA+C;IAC/C,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,6BAA6B;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iEAAiE;IACjE,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,KAA0B,EAC1B,eAAsB,EACtB,SAAgB,GACjB,EAAE,sBAAsB,kDAgExB;AAuBD,UAAU,kBAAkB;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED;;;;;;;;;;GAUG;AACH,iBAAS,aAAa,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,kBAAkB,2CAatE;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,62 @@
1
+ import type { VideoTeaser } from '../../types/video-processing';
2
+ /**
3
+ * Vizard clip extraction aspect ratios. Mirrors `lib/types/aspect-ratio.ts`
4
+ * in the hub — narrow on purpose. If the hub's `VizardAspectRatio` adds a
5
+ * value, mirror it here.
6
+ */
7
+ export type VizardAspectRatio = '9:16' | '16:9' | '1:1';
8
+ /**
9
+ * Extended VideoTeaser with aspect_ratio metadata from Vizard.
10
+ * The lib `VideoTeaser` is the canonical type but doesn't include
11
+ * `aspect_ratio` (stored in JSONB, preserved through spreads).
12
+ * Import this when you need the ratio at compile time.
13
+ */
14
+ export interface VideoTeaserWithRatio extends VideoTeaser {
15
+ aspect_ratio?: VizardAspectRatio;
16
+ confidence?: number;
17
+ viral_reason?: string;
18
+ start_time_ms?: number;
19
+ end_time_ms?: number;
20
+ }
21
+ /** Ratio category used for grid layout and tab grouping. */
22
+ export type RatioCategory = 'portrait' | 'square' | 'landscape';
23
+ /** Grid class for each aspect ratio (admin editors — narrower columns). */
24
+ export declare const RATIO_GRID_CLASS: Record<RatioCategory, string>;
25
+ /** Grid class for public display (wider grids on detail pages). */
26
+ export declare const RATIO_DISPLAY_GRID_CLASS: Record<RatioCategory, string>;
27
+ interface RatioTabsProps {
28
+ groups: Record<RatioCategory, {
29
+ count: number;
30
+ render: () => React.ReactNode;
31
+ }>;
32
+ defaultTab?: RatioCategory;
33
+ className?: string;
34
+ }
35
+ /**
36
+ * RatioTabs — shared aspect-ratio tab wrapper.
37
+ *
38
+ * Only renders tabs that have content. `forceMount` + `data-[state=inactive]:hidden`
39
+ * keeps inactive tabs in the DOM so switching back doesn't scroll-jump.
40
+ */
41
+ export declare function RatioTabs({ groups, defaultTab, className, }: RatioTabsProps): import("react/jsx-runtime").JSX.Element | null;
42
+ /**
43
+ * Detect aspect ratio from a Vizard ratio string, falling back to
44
+ * inferring from width/height if the string is missing or unknown.
45
+ * Default: portrait (`'9:16'`).
46
+ */
47
+ export declare function detectAspectRatio(ratioString?: string, width?: number, height?: number): VizardAspectRatio;
48
+ /** Map a `VizardAspectRatio` to its `RatioCategory` for grouping. */
49
+ export declare function ratioToCategory(ratio: VizardAspectRatio): RatioCategory;
50
+ /**
51
+ * Group items by aspect ratio into portrait / square / landscape buckets.
52
+ * `hasMultiple` is true when 2+ buckets are non-empty (drives tab vs. flat
53
+ * grid rendering downstream).
54
+ */
55
+ export declare function groupByAspectRatio<T>(items: T[], getAspectRatio: (item: T) => VizardAspectRatio): {
56
+ portrait: T[];
57
+ square: T[];
58
+ landscape: T[];
59
+ hasMultiple: boolean;
60
+ };
61
+ export {};
62
+ //# sourceMappingURL=video-ratio-tabs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"video-ratio-tabs.d.ts","sourceRoot":"","sources":["../../../src/components/features/video-ratio-tabs.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAEhE;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAExD;;;;;GAKG;AACH,MAAM,WAAW,oBAAqB,SAAQ,WAAW;IACvD,YAAY,CAAC,EAAE,iBAAiB,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,4DAA4D;AAC5D,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,QAAQ,GAAG,WAAW,CAAC;AAMhE,2EAA2E;AAC3E,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAI1D,CAAC;AAEF,mEAAmE;AACnE,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAIlE,CAAC;AAQF,UAAU,cAAc;IACtB,MAAM,EAAE,MAAM,CAAC,aAAa,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,KAAK,CAAC,SAAS,CAAA;KAAE,CAAC,CAAC;IAChF,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,EACxB,MAAM,EACN,UAAU,EACV,SAAc,GACf,EAAE,cAAc,kDAiChB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,WAAW,CAAC,EAAE,MAAM,EACpB,KAAK,CAAC,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,GACd,iBAAiB,CASnB;AAED,qEAAqE;AACrE,wBAAgB,eAAe,CAAC,KAAK,EAAE,iBAAiB,GAAG,aAAa,CAIvE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAClC,KAAK,EAAE,CAAC,EAAE,EACV,cAAc,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,iBAAiB,GAC7C;IACD,QAAQ,EAAE,CAAC,EAAE,CAAC;IACd,MAAM,EAAE,CAAC,EAAE,CAAC;IACZ,SAAS,EAAE,CAAC,EAAE,CAAC;IACf,WAAW,EAAE,OAAO,CAAC;CACtB,CAYA"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * <Video> — single source of truth for every public video surface
3
+ * across every Flamingo platform consumer of this lib.
4
+ *
5
+ * One component, three sources, three layouts. Replaces and deletes
6
+ * the previous lib primitives:
7
+ *
8
+ * - `<VideoPlayer>` (react-player wrapper, ~900 LOC custom controls)
9
+ * - `<YouTubeEmbed>` (separate lite-youtube facade)
10
+ *
11
+ * Routing (`kind` discriminant, default `'auto'`):
12
+ *
13
+ * kind="youtube" → inline lite-youtube facade (poster + click→iframe)
14
+ * kind="file" → <MuxPlayer> (HLS + MP4 + Mux Data + CMCD all in one)
15
+ * kind="auto" → strict URL parse:
16
+ * bare 11-char id → youtube
17
+ * YouTube hostname → youtube
18
+ * anything else → file
19
+ *
20
+ * `<MuxPlayer>` handles both `.m3u8` (HLS via hls.js, native on Safari)
21
+ * AND plain `.mp4` (uses the underlying `<video>` element). One component,
22
+ * both paths — no internal "HLS vs MP4" branch needed. Captions are
23
+ * rendered as native `<track>` children when `captionsUrl` is passed.
24
+ *
25
+ * Layouts:
26
+ * layout="centered" → max-w-3xl centered wrapper. Detail-page surface.
27
+ * layout="fill" → absolute inset-0 w-full h-full. Carousel slides.
28
+ * layout="native" → intrinsic aspect ratio. Bites grid, blog cards.
29
+ */
30
+ import React from 'react';
31
+ /**
32
+ * Extract the YouTube video id from any common URL shape OR from a
33
+ * bare 11-char id (carousels and some admin shapes pass that form
34
+ * directly).
35
+ *
36
+ * Uses strict `URL` parsing + an anchored pathname regex — NOT the
37
+ * legacy `.*v=` pattern that CodeQL flagged for polynomial-time
38
+ * backtracking on adversarial input like `youtube.com/watch?`
39
+ * repeated N times. Bare-id fallback uses an anchored character-class
40
+ * regex so it can never ReDoS either.
41
+ *
42
+ * Exported so admin tooling and carousel thumbnail logic can validate
43
+ * a URL without rendering the full `<Video>` component.
44
+ */
45
+ export declare function extractYouTubeId(url: string): string | null;
46
+ export type VideoLayout = 'centered' | 'fill' | 'native';
47
+ interface VideoCommonProps {
48
+ /** Layout wrapper. Detail pages pass `"centered"`. Default `"native"`. */
49
+ layout?: VideoLayout;
50
+ /** Poster / thumbnail. */
51
+ poster?: string | null;
52
+ /** Mute by default — for autoplay carousels. */
53
+ muted?: boolean;
54
+ /** LCP hint — YouTube facade poster gets `fetchpriority="high"`. */
55
+ priority?: boolean;
56
+ /** Tailwind classes applied to the underlying player root. */
57
+ className?: string;
58
+ /** Accessible label (used as YT facade title; ignored for file branch). */
59
+ title?: string;
60
+ /**
61
+ * YouTube-only: hide YT player chrome (controls, info, fullscreen, related
62
+ * videos, keyboard shortcuts). Used for marketing/landing-page embeds that
63
+ * want a minimal look. No-op for file (MP4/HLS) branches.
64
+ */
65
+ minimalControls?: boolean;
66
+ }
67
+ interface VideoFileProps extends VideoCommonProps {
68
+ kind: 'file';
69
+ url: string;
70
+ /**
71
+ * SRT raw content. Deprecated: pass `captionsUrl` (VTT) instead.
72
+ * Native `<track>` requires a URL; raw SRT can't be rendered without
73
+ * a custom overlay. Setting this without `captionsUrl` is a no-op
74
+ * with a dev warning.
75
+ */
76
+ srtContent?: string | null;
77
+ /** HTTPS URL to a VTT captions file. Rendered as a native `<track>`. */
78
+ captionsUrl?: string | null;
79
+ }
80
+ interface VideoYouTubeProps extends VideoCommonProps {
81
+ kind: 'youtube';
82
+ /** Either a full YT URL or just the video id. */
83
+ url: string;
84
+ }
85
+ interface VideoAutoProps extends VideoCommonProps {
86
+ kind?: 'auto';
87
+ url: string;
88
+ srtContent?: string | null;
89
+ captionsUrl?: string | null;
90
+ }
91
+ export type VideoProps = VideoFileProps | VideoYouTubeProps | VideoAutoProps;
92
+ export declare function Video(props: VideoProps): React.ReactElement | null;
93
+ export {};
94
+ //# sourceMappingURL=video.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"video.d.ts","sourceRoot":"","sources":["../../../src/components/features/video.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAsC,MAAM,OAAO,CAAC;AA6B3D;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAsB3D;AAMD,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEzD,UAAU,gBAAgB;IACxB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,0BAA0B;IAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,gDAAgD;IAChD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,UAAU,cAAe,SAAQ,gBAAgB;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,UAAU,iBAAkB,SAAQ,gBAAgB;IAClD,IAAI,EAAE,SAAS,CAAC;IAChB,iDAAiD;IACjD,GAAG,EAAE,MAAM,CAAC;CACb;AAED,UAAU,cAAe,SAAQ,gBAAgB;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG,iBAAiB,GAAG,cAAc,CAAC;AAM7E,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,KAAK,CAAC,YAAY,GAAG,IAAI,CA4BlE"}