@atlaskit/media-card 79.11.4 → 79.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/cjs/card/card.js +1 -1
  3. package/dist/cjs/card/externalImageCard.js +17 -12
  4. package/dist/cjs/card/fileCard.js +34 -12
  5. package/dist/cjs/card/media-card-analytics-error-boundary.js +1 -1
  6. package/dist/cjs/card/ui/tickBox/tickBoxWrapper-compiled.compiled.css +0 -3
  7. package/dist/cjs/card/ui/tickBox/tickBoxWrapper-compiled.js +1 -3
  8. package/dist/cjs/card/ui/titleBox/failedTitleBox.js +0 -2
  9. package/dist/cjs/card/ui/titleBox/titleBoxComponents-compiled.js +1 -3
  10. package/dist/cjs/inline/loader.js +1 -1
  11. package/dist/cjs/inline/mediaInlineAnalyticsErrorBoundary.js +0 -2
  12. package/dist/cjs/utils/globalScope/globalScope.js +2 -1
  13. package/dist/cjs/utils/mediaPerformanceObserver/durationMetrics.js +1 -0
  14. package/dist/cjs/utils/ufoExperiences.js +454 -68
  15. package/dist/es2019/card/card.js +1 -1
  16. package/dist/es2019/card/externalImageCard.js +16 -13
  17. package/dist/es2019/card/fileCard.js +33 -13
  18. package/dist/es2019/card/media-card-analytics-error-boundary.js +1 -1
  19. package/dist/es2019/card/ui/tickBox/tickBoxWrapper-compiled.compiled.css +0 -3
  20. package/dist/es2019/card/ui/tickBox/tickBoxWrapper-compiled.js +1 -3
  21. package/dist/es2019/card/ui/titleBox/failedTitleBox.js +0 -2
  22. package/dist/es2019/card/ui/titleBox/titleBoxComponents-compiled.js +1 -3
  23. package/dist/es2019/inline/loader.js +1 -1
  24. package/dist/es2019/inline/mediaInlineAnalyticsErrorBoundary.js +0 -2
  25. package/dist/es2019/utils/globalScope/globalScope.js +1 -0
  26. package/dist/es2019/utils/mediaPerformanceObserver/durationMetrics.js +1 -0
  27. package/dist/es2019/utils/ufoExperiences.js +449 -72
  28. package/dist/esm/card/card.js +1 -1
  29. package/dist/esm/card/externalImageCard.js +18 -13
  30. package/dist/esm/card/fileCard.js +35 -13
  31. package/dist/esm/card/media-card-analytics-error-boundary.js +1 -1
  32. package/dist/esm/card/ui/tickBox/tickBoxWrapper-compiled.compiled.css +0 -3
  33. package/dist/esm/card/ui/tickBox/tickBoxWrapper-compiled.js +1 -3
  34. package/dist/esm/card/ui/titleBox/failedTitleBox.js +0 -2
  35. package/dist/esm/card/ui/titleBox/titleBoxComponents-compiled.js +1 -3
  36. package/dist/esm/inline/loader.js +1 -1
  37. package/dist/esm/inline/mediaInlineAnalyticsErrorBoundary.js +0 -2
  38. package/dist/esm/utils/globalScope/globalScope.js +1 -0
  39. package/dist/esm/utils/mediaPerformanceObserver/durationMetrics.js +1 -0
  40. package/dist/esm/utils/ufoExperiences.js +454 -68
  41. package/dist/types/utils/globalScope/globalScope.d.ts +2 -0
  42. package/dist/types/utils/mediaPerformanceObserver/durationMetrics.d.ts +1 -0
  43. package/dist/types/utils/ufoExperiences.d.ts +88 -5
  44. package/dist/types-ts4.5/utils/globalScope/globalScope.d.ts +2 -0
  45. package/dist/types-ts4.5/utils/mediaPerformanceObserver/durationMetrics.d.ts +1 -0
  46. package/dist/types-ts4.5/utils/ufoExperiences.d.ts +88 -5
  47. package/package.json +9 -9
@@ -5,8 +5,10 @@ import { type MediaCardErrorInfo } from '../../utils/analytics';
5
5
  import { type MediaCardSsr } from './types';
6
6
  export declare const GLOBAL_MEDIA_CARD_SSR = "mediaCardSsr";
7
7
  export declare const GLOBAL_MEDIA_NAMESPACE = "__MEDIA_INTERNAL";
8
+ export declare const GLOBAL_MEDIA_PERFORMANCE_ENTRIES = "performanceEntries";
8
9
  export type MediaGlobalScope = {
9
10
  [GLOBAL_MEDIA_CARD_SSR]?: MediaCardSsr;
11
+ [GLOBAL_MEDIA_PERFORMANCE_ENTRIES]?: PerformanceEntry[];
10
12
  };
11
13
  export declare function getMediaGlobalScope(globalScope?: any): MediaGlobalScope;
12
14
  export declare function getMediaCardSSR(globalScope?: any): MediaCardSsr;
@@ -36,6 +36,7 @@ export declare const createMediaDurationMetrics: (entry: ExperimentalPerformance
36
36
  decodedBodySize: number;
37
37
  totalDuration: number;
38
38
  initiatorType: string;
39
+ endedAt: number;
39
40
  responseEnd: number;
40
41
  browserCacheHit: boolean;
41
42
  nextHopProtocol: string;
@@ -1,15 +1,98 @@
1
1
  import { type CardStatus } from '../types';
2
2
  import { type FileAttributes } from '@atlaskit/media-common';
3
- import { type SSRStatus } from './analytics';
3
+ import { type MediaCardErrorInfo, type SSRStatus } from './analytics';
4
4
  import { MediaCardError } from '../errors';
5
+ import { type RequestMetadata } from '@atlaskit/media-client';
5
6
  import { type FileStateFlags } from '../types';
7
+ /**
8
+ * Determines if performance events should be sampled for this instance.
9
+ * Approximately 5% of instances will be sampled.
10
+ */
11
+ export declare const shouldPerformanceBeSampled: () => boolean;
12
+ export type SSRPreviewInfo = {
13
+ /** The srcset of the SSR preview (used to match performance entries) */
14
+ srcset?: string;
15
+ /** The full URI of the SSR preview (used to match performance entries) */
16
+ dataUri?: string;
17
+ /** Whether SSR was attempted (ssr prop was provided) */
18
+ wasSSRAttempted: boolean;
19
+ /** Whether SSR was successful (server or client status is 'success') */
20
+ wasSSRSuccessful: boolean;
21
+ };
6
22
  type SucceedUfoPayload = {
7
23
  fileAttributes: FileAttributes;
8
24
  ssrReliability: SSRStatus;
9
25
  fileStateFlags: FileStateFlags;
10
26
  };
11
- export declare const shouldPerformanceBeSampled: () => boolean;
12
- export declare const startUfoExperience: (id: string) => void;
13
- export declare const completeUfoExperience: (id: string, status: CardStatus, fileAttributes: FileAttributes, fileStateFlags: FileStateFlags, ssrReliability: SSRStatus, error?: MediaCardError) => void;
27
+ type FailedProcessingPayload = {
28
+ fileAttributes: FileAttributes;
29
+ ssrReliability: SSRStatus;
30
+ failReason: 'failed-processing';
31
+ fileStateFlags: FileStateFlags;
32
+ };
33
+ type ErrorUfoPayload = {
34
+ fileAttributes: FileAttributes;
35
+ ssrReliability: SSRStatus;
36
+ request: RequestMetadata | undefined;
37
+ fileStateFlags: FileStateFlags;
38
+ } & MediaCardErrorInfo;
39
+ export interface UseMediaCardUfoExperienceOptions {
40
+ /** Unique identifier for this experience instance */
41
+ instanceId: string;
42
+ /** Whether to enable UFO tracking for this instance */
43
+ enabled: boolean;
44
+ }
45
+ export interface StartOptions {
46
+ /**
47
+ * When true, uses the UFO interaction start time instead of current time.
48
+ * Use this for SSR non-lazy scenarios where the image loading started at interaction start.
49
+ */
50
+ useInteractionTime?: boolean;
51
+ }
52
+ export interface MediaCardUfoExperience {
53
+ /**
54
+ * Start the UFO experience. Call when card becomes visible.
55
+ * @param options - Optional configuration for start behavior
56
+ */
57
+ start: (options?: StartOptions) => void;
58
+ /**
59
+ * Complete the UFO experience with appropriate timing strategy.
60
+ * @param status - The final card status
61
+ * @param fileAttributes - File metadata
62
+ * @param fileStateFlags - File state flags
63
+ * @param ssrReliability - SSR reliability status
64
+ * @param error - Optional error for error status
65
+ * @param ssrPreviewInfo - SSR preview information for timing lookup
66
+ */
67
+ complete: (status: CardStatus, fileAttributes: FileAttributes, fileStateFlags: FileStateFlags, ssrReliability: SSRStatus, error?: MediaCardError, ssrPreviewInfo?: SSRPreviewInfo) => void;
68
+ /** Abort the UFO experience. Call on unmount if not completed. */
69
+ abort: (properties?: Partial<SucceedUfoPayload>) => void;
70
+ }
71
+ /**
72
+ * Hook to create a UFO experience tied to a media card component lifecycle.
73
+ *
74
+ * This creates a unique UFOExperience instance per component, allowing:
75
+ * - Unique timing config per instance
76
+ * - Direct control over experience lifecycle
77
+ * - Proper cleanup on unmount
78
+ *
79
+ * @example
80
+ * ```tsx
81
+ * const ufoExperience = useMediaCardUfoExperience({
82
+ * instanceId: internalOccurrenceKey,
83
+ * enabled: shouldSendPerformanceEvent,
84
+ * });
85
+ *
86
+ * // On card visible
87
+ * ufoExperience.start();
88
+ *
89
+ * // On card complete/error
90
+ * ufoExperience.complete(status, fileAttributes, fileStateFlags, ssrReliability, error, ssrPreviewInfo);
91
+ * ```
92
+ */
93
+ export declare const useMediaCardUfoExperience: ({ instanceId, enabled, }: UseMediaCardUfoExperienceOptions) => MediaCardUfoExperience;
94
+ export declare const startUfoExperience: (id: string, startTime?: number) => void;
95
+ export declare const completeUfoExperience: (id: string, status: CardStatus, fileAttributes: FileAttributes, fileStateFlags: FileStateFlags, ssrReliability: SSRStatus, error?: MediaCardError, ssrPreviewInfo?: SSRPreviewInfo) => void;
14
96
  export declare const abortUfoExperience: (id: string, properties?: Partial<SucceedUfoPayload>) => void;
15
- export {};
97
+ export type { FailedProcessingPayload as _FailedProcessingPayload };
98
+ export type { ErrorUfoPayload as _ErrorUfoPayload };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/media-card",
3
- "version": "79.11.4",
3
+ "version": "79.13.0",
4
4
  "description": "Includes all media card related components, CardView, CardViewSmall, Card...",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
@@ -32,24 +32,24 @@
32
32
  },
33
33
  "dependencies": {
34
34
  "@atlaskit/analytics-next": "^11.1.0",
35
- "@atlaskit/dropdown-menu": "^16.3.0",
35
+ "@atlaskit/dropdown-menu": "^16.4.0",
36
36
  "@atlaskit/editor-shared-styles": "^3.10.0",
37
- "@atlaskit/icon": "^29.3.0",
38
- "@atlaskit/link": "^3.2.0",
37
+ "@atlaskit/icon": "^29.4.0",
38
+ "@atlaskit/link": "^3.3.0",
39
39
  "@atlaskit/media-client": "^35.7.0",
40
40
  "@atlaskit/media-client-react": "^4.1.0",
41
41
  "@atlaskit/media-common": "^12.3.0",
42
42
  "@atlaskit/media-file-preview": "^0.15.0",
43
43
  "@atlaskit/media-svg": "^2.1.0",
44
44
  "@atlaskit/media-ui": "^28.7.0",
45
- "@atlaskit/media-viewer": "^52.5.0",
45
+ "@atlaskit/media-viewer": "^52.6.0",
46
46
  "@atlaskit/platform-feature-flags": "^1.1.0",
47
47
  "@atlaskit/primitives": "^17.0.0",
48
48
  "@atlaskit/react-ufo": "^4.16.0",
49
49
  "@atlaskit/spinner": "^19.0.0",
50
50
  "@atlaskit/theme": "^21.0.0",
51
- "@atlaskit/tokens": "^9.0.0",
52
- "@atlaskit/tooltip": "^20.11.0",
51
+ "@atlaskit/tokens": "^9.1.0",
52
+ "@atlaskit/tooltip": "^20.12.0",
53
53
  "@atlaskit/ufo": "^0.4.0",
54
54
  "@atlaskit/visually-hidden": "^3.0.0",
55
55
  "@babel/runtime": "^7.0.0",
@@ -71,14 +71,14 @@
71
71
  "@af/integration-testing": "workspace:^",
72
72
  "@atlaskit/analytics-listeners": "^9.2.0",
73
73
  "@atlaskit/analytics-namespaced-context": "^7.2.0",
74
- "@atlaskit/form": "^15.2.0",
74
+ "@atlaskit/form": "^15.3.0",
75
75
  "@atlaskit/inline-message": "^15.5.0",
76
76
  "@atlaskit/media-core": "^37.0.0",
77
77
  "@atlaskit/media-picker": "^70.1.0",
78
78
  "@atlaskit/media-state": "^1.8.0",
79
79
  "@atlaskit/media-test-data": "^3.2.0",
80
80
  "@atlaskit/media-test-helpers": "^39.0.0",
81
- "@atlaskit/radio": "^8.3.0",
81
+ "@atlaskit/radio": "^8.4.0",
82
82
  "@atlaskit/range": "^9.3.0",
83
83
  "@atlaskit/ssr": "workspace:^",
84
84
  "@atlaskit/toggle": "^15.2.0",