@carlonicora/nextjs-jsonapi 3.24.2 → 3.26.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.
- package/dist/{AssistantMessageInterface-1Kbz8RVs.d.ts → AssistantMessageInterface-CubxuBIJ.d.ts} +1 -1
- package/dist/{AssistantMessageInterface-CoxJyuFM.d.mts → AssistantMessageInterface-sHjI2zPN.d.mts} +1 -1
- package/dist/{BlockNoteEditor-35D4R7HJ.js → BlockNoteEditor-4EIKMNY3.js} +31 -21
- package/dist/BlockNoteEditor-4EIKMNY3.js.map +1 -0
- package/dist/{BlockNoteEditor-65HR6ULV.mjs → BlockNoteEditor-AXYVDDXM.mjs} +16 -6
- package/dist/{BlockNoteEditor-65HR6ULV.mjs.map → BlockNoteEditor-AXYVDDXM.mjs.map} +1 -1
- package/dist/{BlockNoteViewer-QDXDVYEM.js → BlockNoteViewer-7BFNTN4E.js} +4 -4
- package/dist/{BlockNoteViewer-QDXDVYEM.js.map → BlockNoteViewer-7BFNTN4E.js.map} +1 -1
- package/dist/{BlockNoteViewer-KDKGUIG5.mjs → BlockNoteViewer-KRTAFTUX.mjs} +3 -3
- package/dist/{HandbookSectionInterface-OePKPbqN.d.ts → HandbookSectionInterface-Ck1wZJ81.d.ts} +1 -1
- package/dist/{HandbookSectionInterface-BYsmnPEz.d.mts → HandbookSectionInterface-DgYH--Ik.d.mts} +1 -1
- package/dist/JsonApiRequest-TE5WD3WS.js +26 -0
- package/dist/{JsonApiRequest-G625QAH5.js.map → JsonApiRequest-TE5WD3WS.js.map} +1 -1
- package/dist/{JsonApiRequest-RRMNV7YE.mjs → JsonApiRequest-UHOWNI3O.mjs} +2 -2
- package/dist/analytics.modules-CfczU12P.d.ts +25 -0
- package/dist/analytics.modules-pzGwMASI.d.mts +25 -0
- package/dist/{auth.interface-BC1jp_ni.d.ts → auth.interface-BzI4onI_.d.ts} +1 -1
- package/dist/{auth.interface-dR2-6gPM.d.mts → auth.interface-Df4vXbNz.d.mts} +1 -1
- package/dist/billing/index.js +402 -402
- package/dist/billing/index.mjs +4 -4
- package/dist/{chunk-YXRVPEEJ.js → chunk-26MQIJNB.js} +1 -1
- package/dist/{chunk-YXRVPEEJ.js.map → chunk-26MQIJNB.js.map} +1 -1
- package/dist/{chunk-T76WLDE5.mjs → chunk-37DMFVLN.mjs} +1 -1
- package/dist/{chunk-3AR4KA5D.js → chunk-4Z45NYPR.js} +13 -13
- package/dist/{chunk-3AR4KA5D.js.map → chunk-4Z45NYPR.js.map} +1 -1
- package/dist/chunk-7B4E42R5.mjs +280 -0
- package/dist/chunk-7B4E42R5.mjs.map +1 -0
- package/dist/{chunk-2XCUAHQT.js → chunk-ABVTYQIJ.js} +1563 -1336
- package/dist/chunk-ABVTYQIJ.js.map +1 -0
- package/dist/{chunk-U7QVISQS.js → chunk-CAKOFJZD.js} +450 -40
- package/dist/chunk-CAKOFJZD.js.map +1 -0
- package/dist/{chunk-IBVKPLHT.mjs → chunk-E3I4MT53.mjs} +422 -12
- package/dist/chunk-E3I4MT53.mjs.map +1 -0
- package/dist/chunk-GHFMKH3M.js +280 -0
- package/dist/chunk-GHFMKH3M.js.map +1 -0
- package/dist/chunk-GKDHYB2R.js +110 -0
- package/dist/chunk-GKDHYB2R.js.map +1 -0
- package/dist/{chunk-ZJI5ZZW5.mjs → chunk-Q6J2ICKO.mjs} +3 -3
- package/dist/{chunk-4O7R2Z2O.mjs → chunk-QWZAGQWJ.mjs} +2175 -1948
- package/dist/chunk-QWZAGQWJ.mjs.map +1 -0
- package/dist/chunk-U65JPKO3.mjs +110 -0
- package/dist/chunk-U65JPKO3.mjs.map +1 -0
- package/dist/client/index.d.mts +6 -5
- package/dist/client/index.d.ts +6 -5
- package/dist/client/index.js +5 -5
- package/dist/client/index.js.map +1 -1
- package/dist/client/index.mjs +4 -4
- package/dist/components/index.d.mts +33 -10
- package/dist/components/index.d.ts +33 -10
- package/dist/components/index.js +7 -5
- package/dist/components/index.js.map +1 -1
- package/dist/components/index.mjs +6 -4
- package/dist/{config-B6UB7j69.d.ts → config-3N1LSrcC.d.ts} +1 -1
- package/dist/{config-Cd5xTEfZ.d.ts → config-AVtuvfM1.d.ts} +1 -1
- package/dist/{config-n-ZpPmOL.d.mts → config-BSKTYDoh.d.mts} +1 -1
- package/dist/{config-YyhFHxkU.d.mts → config-BmufyEj6.d.mts} +1 -1
- package/dist/contexts/index.d.mts +5 -4
- package/dist/contexts/index.d.ts +5 -4
- package/dist/contexts/index.js +5 -5
- package/dist/contexts/index.mjs +4 -4
- package/dist/core/index.d.mts +31 -14
- package/dist/core/index.d.ts +31 -14
- package/dist/core/index.js +9 -5
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.mjs +8 -4
- package/dist/features/analytics/index.css +30 -0
- package/dist/features/analytics/index.css.map +1 -0
- package/dist/features/analytics/index.d.mts +508 -0
- package/dist/features/analytics/index.d.ts +508 -0
- package/dist/features/analytics/index.js +1166 -0
- package/dist/features/analytics/index.js.map +1 -0
- package/dist/features/analytics/index.mjs +1166 -0
- package/dist/features/analytics/index.mjs.map +1 -0
- package/dist/features/analytics/server.d.mts +28 -0
- package/dist/features/analytics/server.d.ts +28 -0
- package/dist/features/analytics/server.js +41 -0
- package/dist/features/analytics/server.js.map +1 -0
- package/dist/features/analytics/server.mjs +41 -0
- package/dist/features/analytics/server.mjs.map +1 -0
- package/dist/features/help/index.d.mts +2 -2
- package/dist/features/help/index.d.ts +2 -2
- package/dist/features/help/index.js +43 -43
- package/dist/features/help/index.js.map +1 -1
- package/dist/features/help/index.mjs +9 -9
- package/dist/features/help/index.mjs.map +1 -1
- package/dist/features/tokenusage/index.d.mts +2 -2
- package/dist/features/tokenusage/index.d.ts +2 -2
- package/dist/features/tokenusage/index.js +141 -223
- package/dist/features/tokenusage/index.js.map +1 -1
- package/dist/features/tokenusage/index.mjs +28 -110
- package/dist/features/tokenusage/index.mjs.map +1 -1
- package/dist/index.d.mts +11 -9
- package/dist/index.d.ts +11 -9
- package/dist/index.js +10 -6
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +9 -5
- package/dist/notification.interface-BNCvnVCW.d.ts +34 -0
- package/dist/notification.interface-P_pNfzZQ.d.mts +34 -0
- package/dist/{s3.service-Bqr-fQmi.d.ts → s3.service-CbUa6a-8.d.ts} +3 -2
- package/dist/{s3.service-Buiy1ncj.d.mts → s3.service-DAp8FbuG.d.mts} +3 -2
- package/dist/server/index.d.mts +5 -4
- package/dist/server/index.d.ts +5 -4
- package/dist/server/index.js +39 -279
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +20 -260
- package/dist/server/index.mjs.map +1 -1
- package/dist/{types-bsm8Fp55.d.ts → types-Cn153-mH.d.ts} +1 -1
- package/dist/{types-Bq_UA8Lg.d.mts → types-D0uLYV2P.d.mts} +1 -1
- package/dist/{usePageUrlGenerator-J_ECv-oQ.d.ts → usePageUrlGenerator-B-3FRKBD.d.ts} +1 -1
- package/dist/{usePageUrlGenerator-uKBjAKqC.d.mts → usePageUrlGenerator-CCJ_cdQy.d.mts} +1 -1
- package/dist/{useSocket-BcH7l7B8.d.mts → useSocket-B9gTbuCj.d.mts} +1 -1
- package/dist/{useSocket-DCZd_eJk.d.ts → useSocket-BHVIyigI.d.ts} +1 -1
- package/dist/{notification.interface-MnRt1Tjm.d.mts → user.interface-CSaGWFbg.d.mts} +1 -31
- package/dist/{notification.interface-CjzV_KII.d.ts → user.interface-CrmwJLYW.d.ts} +1 -31
- package/package.json +11 -1
- package/src/client/index.ts +2 -0
- package/src/components/containers/PageContainer.tsx +1 -1
- package/src/components/containers/RoundPageContainer.tsx +60 -16
- package/src/components/containers/RoundPageContainerTitle.tsx +75 -35
- package/src/components/editors/BlockNoteEditor.tsx +13 -1
- package/src/components/forms/EntityMultiSelector.tsx +4 -4
- package/src/components/forms/EntitySelector.tsx +4 -4
- package/src/components/forms/FormBlockNote.tsx +21 -1
- package/src/components/forms/FormCheckbox.tsx +6 -2
- package/src/components/forms/__tests__/useEditorDialog.test.ts +47 -0
- package/src/components/forms/useEditorDialog.ts +22 -0
- package/src/components/navigations/Breadcrumb.tsx +45 -16
- package/src/components/navigations/Header.tsx +16 -3
- package/src/components/navigations/MobileNavigationBar.tsx +12 -0
- package/src/components/navigations/__tests__/MobileNavigationBar.spec.tsx +17 -0
- package/src/components/tables/ContentListTable.tsx +52 -32
- package/src/core/index.ts +4 -0
- package/src/core/registry/ModuleRegistry.ts +7 -0
- package/src/features/__tests__/i18n-keys.contract.spec.ts +1 -0
- package/src/features/analytics/__tests__/server-entry.spec.tsx +64 -0
- package/src/features/analytics/analytics.modules.ts +30 -0
- package/src/features/analytics/components/AnalyticsAdminContainer.tsx +97 -0
- package/src/features/analytics/components/AnalyticsAdminFilterBar.tsx +120 -0
- package/src/features/analytics/components/AnalyticsAdminPageContainer.tsx +25 -0
- package/src/features/analytics/components/AnalyticsAdminTiles.tsx +191 -0
- package/src/features/analytics/components/AnalyticsBreakdownTable.tsx +105 -0
- package/src/features/analytics/components/AnalyticsJourneyContainer.tsx +246 -0
- package/src/features/analytics/components/AnalyticsJourneyPageContainer.tsx +14 -0
- package/src/features/analytics/components/AnalyticsSessionsTable.tsx +107 -0
- package/src/features/analytics/components/AnalyticsTimelineChart.tsx +175 -0
- package/src/features/analytics/components/AnalyticsTracker.tsx +112 -0
- package/src/features/analytics/components/__tests__/AnalyticsAdminTiles.spec.tsx +39 -0
- package/src/features/analytics/components/__tests__/AnalyticsBreakdownTable.spec.tsx +39 -0
- package/src/features/analytics/components/__tests__/AnalyticsJourneyContainer.spec.tsx +124 -0
- package/src/features/analytics/components/__tests__/AnalyticsPageContainers.spec.tsx +117 -0
- package/src/features/analytics/components/__tests__/AnalyticsSessionsTable.spec.tsx +121 -0
- package/src/features/analytics/components/__tests__/AnalyticsTimelineChart.spec.tsx +35 -0
- package/src/features/analytics/components/__tests__/AnalyticsTracker.spec.tsx +248 -0
- package/src/features/analytics/components/server/AnalyticsAdminPage.tsx +28 -0
- package/src/features/analytics/components/server/AnalyticsJourneyPage.tsx +25 -0
- package/src/features/analytics/contexts/AnalyticsAdminContext.tsx +273 -0
- package/src/features/analytics/contexts/__tests__/AnalyticsAdminContext.spec.tsx +140 -0
- package/src/features/analytics/data/AnalyticsAdminService.ts +91 -0
- package/src/features/analytics/data/AnalyticsService.ts +23 -0
- package/src/features/analytics/data/__tests__/AnalyticsAdminService.spec.ts +117 -0
- package/src/features/analytics/data/__tests__/AnalyticsService.spec.ts +56 -0
- package/src/features/analytics/data/__tests__/models.spec.ts +300 -0
- package/src/features/analytics/data/analytics-breakdown.interface.ts +9 -0
- package/src/features/analytics/data/analytics-breakdown.ts +65 -0
- package/src/features/analytics/data/analytics-event.interface.ts +7 -0
- package/src/features/analytics/data/analytics-event.ts +63 -0
- package/src/features/analytics/data/analytics-page-view.interface.ts +9 -0
- package/src/features/analytics/data/analytics-page-view.ts +57 -0
- package/src/features/analytics/data/analytics-session.interface.ts +23 -0
- package/src/features/analytics/data/analytics-session.ts +144 -0
- package/src/features/analytics/data/analytics-summary.interface.ts +11 -0
- package/src/features/analytics/data/analytics-summary.ts +79 -0
- package/src/features/analytics/data/analytics-timeline.interface.ts +10 -0
- package/src/features/analytics/data/analytics-timeline.ts +67 -0
- package/src/features/analytics/data/analytics.types.ts +97 -0
- package/src/features/analytics/data/index.ts +15 -0
- package/src/features/analytics/i18n-keys.ts +76 -0
- package/src/features/analytics/index.ts +31 -0
- package/src/features/analytics/lib/__tests__/utm.spec.ts +20 -0
- package/src/features/analytics/lib/__tests__/visitorCookie.spec.ts +63 -0
- package/src/features/analytics/lib/utm.ts +29 -0
- package/src/features/analytics/lib/visitorCookie.ts +32 -0
- package/src/features/analytics/server-entry.ts +8 -0
- package/src/features/assistant/components/parts/AssistantBlockNoteComposer.tsx +1 -1
- package/src/features/assistant/components/parts/AssistantComposer.tsx +1 -1
- package/src/features/assistant-message/components/MessageItem.tsx +2 -2
- package/src/features/assistant-message/components/parts/tabs/CitationsTab.tsx +23 -5
- package/src/features/auth/components/containers/AuthContainer.tsx +8 -1
- package/src/features/company/components/details/CompanyContent.tsx +3 -1
- package/src/features/company/components/details/CompanyDetails.tsx +9 -1
- package/src/features/company/components/details/TokenStatusIndicator.tsx +42 -13
- package/src/features/help/components/HelpHeader.tsx +7 -5
- package/src/features/tokenusage/components/TokenUsageAdminFilterBar.tsx +9 -6
- package/src/features/tokenusage/lib/__tests__/formatters.spec.ts +21 -0
- package/src/features/tokenusage/lib/formatters.ts +5 -1
- package/src/features/waitlist/components/lists/WaitlistList.tsx +68 -121
- package/src/features/waitlist/data/WaitlistService.ts +2 -2
- package/src/features/waitlist/data/index.ts +1 -0
- package/src/features/waitlist/data/waitlist.fields.ts +8 -0
- package/src/features/waitlist/hooks/useWaitlistTableStructure.tsx +69 -30
- package/src/shadcnui/ui/button.tsx +1 -1
- package/src/shadcnui/ui/checkbox.tsx +1 -1
- package/src/shadcnui/ui/command.tsx +4 -4
- package/src/shadcnui/ui/dialog.tsx +2 -0
- package/src/shadcnui/ui/input.tsx +1 -1
- package/src/shadcnui/ui/popover.tsx +9 -0
- package/src/shadcnui/ui/select.tsx +1 -1
- package/src/shadcnui/ui/sheet.tsx +8 -1
- package/src/shadcnui/ui/table.tsx +2 -2
- package/src/shadcnui/ui/textarea.tsx +1 -1
- package/dist/BlockNoteEditor-35D4R7HJ.js.map +0 -1
- package/dist/JsonApiRequest-G625QAH5.js +0 -26
- package/dist/chunk-2XCUAHQT.js.map +0 -1
- package/dist/chunk-4O7R2Z2O.mjs.map +0 -1
- package/dist/chunk-IBVKPLHT.mjs.map +0 -1
- package/dist/chunk-U7QVISQS.js.map +0 -1
- /package/dist/{BlockNoteViewer-KDKGUIG5.mjs.map → BlockNoteViewer-KRTAFTUX.mjs.map} +0 -0
- /package/dist/{JsonApiRequest-RRMNV7YE.mjs.map → JsonApiRequest-UHOWNI3O.mjs.map} +0 -0
- /package/dist/{chunk-T76WLDE5.mjs.map → chunk-37DMFVLN.mjs.map} +0 -0
- /package/dist/{chunk-ZJI5ZZW5.mjs.map → chunk-Q6J2ICKO.mjs.map} +0 -0
|
@@ -0,0 +1,508 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
import { A as ApiDataInterface, J as JsonApiHydratedDataInterface } from '../../ApiDataInterface-BcZeXy5X.mjs';
|
|
4
|
+
import { U as UserInterface } from '../../user.interface-CSaGWFbg.mjs';
|
|
5
|
+
import { A as AbstractApiData } from '../../AbstractApiData-XLhBP5Tl.mjs';
|
|
6
|
+
import { A as AbstractService, N as NextRef } from '../../AbstractService-Ckm2X5fW.mjs';
|
|
7
|
+
export { a as analyticsModules } from '../../analytics.modules-pzGwMASI.mjs';
|
|
8
|
+
import '../../feature.interface-CXb1-vNq.mjs';
|
|
9
|
+
import '../../ApiRequestDataTypeInterface-CYEcRUrh.mjs';
|
|
10
|
+
import '../../types-D0uLYV2P.mjs';
|
|
11
|
+
import 'lucide-react';
|
|
12
|
+
|
|
13
|
+
type AnalyticsTrackerProps = {
|
|
14
|
+
hasConsent: boolean;
|
|
15
|
+
resolveSection: (pathname: string) => "public" | "app";
|
|
16
|
+
sensitivePrefixes?: string[];
|
|
17
|
+
};
|
|
18
|
+
declare function AnalyticsTracker({ hasConsent, resolveSection, sensitivePrefixes }: AnalyticsTrackerProps): null;
|
|
19
|
+
|
|
20
|
+
interface AnalyticsBreakdownInterface extends ApiDataInterface {
|
|
21
|
+
get dimension(): string;
|
|
22
|
+
get key(): string;
|
|
23
|
+
get visitors(): number;
|
|
24
|
+
get sessions(): number;
|
|
25
|
+
get pageViews(): number;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
interface AnalyticsSessionInterface extends ApiDataInterface {
|
|
29
|
+
get visitorId(): string;
|
|
30
|
+
get consented(): boolean;
|
|
31
|
+
/** Backend declares this `type: "datetime"`, so it is a Date in memory. */
|
|
32
|
+
get startedAt(): Date;
|
|
33
|
+
/** Backend declares this `type: "datetime"`, so it is a Date in memory. */
|
|
34
|
+
get lastSeenAt(): Date;
|
|
35
|
+
get pageViews(): number;
|
|
36
|
+
get section(): string;
|
|
37
|
+
get landingRoute(): string;
|
|
38
|
+
get referrerHost(): string | undefined;
|
|
39
|
+
get utmSource(): string | undefined;
|
|
40
|
+
get utmMedium(): string | undefined;
|
|
41
|
+
get utmCampaign(): string | undefined;
|
|
42
|
+
get utmTerm(): string | undefined;
|
|
43
|
+
get utmContent(): string | undefined;
|
|
44
|
+
get deviceType(): string;
|
|
45
|
+
/** Present only when the session belongs to a signed-in user. */
|
|
46
|
+
get user(): UserInterface | undefined;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
interface AnalyticsSummaryInterface extends ApiDataInterface {
|
|
50
|
+
get section(): string;
|
|
51
|
+
get window(): string;
|
|
52
|
+
get visitors(): number;
|
|
53
|
+
get sessions(): number;
|
|
54
|
+
get pageViews(): number;
|
|
55
|
+
get pagesPerSession(): number;
|
|
56
|
+
get consentShare(): number;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
interface AnalyticsTimelineInterface extends ApiDataInterface {
|
|
60
|
+
/** Backend declares this `type: "date"`, so it is a Date in memory. */
|
|
61
|
+
get bucket(): Date;
|
|
62
|
+
get section(): string;
|
|
63
|
+
get visitors(): number;
|
|
64
|
+
get sessions(): number;
|
|
65
|
+
get pageViews(): number;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
declare const ANALYTICS_SECTIONS: readonly ["all", "public", "app"];
|
|
69
|
+
type AnalyticsSection = (typeof ANALYTICS_SECTIONS)[number];
|
|
70
|
+
declare const ANALYTICS_GRANULARITIES: readonly ["day", "week", "month"];
|
|
71
|
+
type AnalyticsGranularity = (typeof ANALYTICS_GRANULARITIES)[number];
|
|
72
|
+
declare const ANALYTICS_DIMENSIONS: readonly ["source", "medium", "campaign", "referrer", "route", "landing"];
|
|
73
|
+
type AnalyticsDimension = (typeof ANALYTICS_DIMENSIONS)[number];
|
|
74
|
+
type AnalyticsFilters = {
|
|
75
|
+
/** ISO 8601 instant. */
|
|
76
|
+
from: string;
|
|
77
|
+
/** ISO 8601 instant. */
|
|
78
|
+
to: string;
|
|
79
|
+
section: AnalyticsSection;
|
|
80
|
+
};
|
|
81
|
+
/** One page view, as the tracker posts it to `analytics/events`. */
|
|
82
|
+
type AnalyticsEventInput = {
|
|
83
|
+
id: string;
|
|
84
|
+
path: string;
|
|
85
|
+
section: "public" | "app";
|
|
86
|
+
referrer?: string;
|
|
87
|
+
utmSource?: string;
|
|
88
|
+
utmMedium?: string;
|
|
89
|
+
utmCampaign?: string;
|
|
90
|
+
utmTerm?: string;
|
|
91
|
+
utmContent?: string;
|
|
92
|
+
visitorId?: string;
|
|
93
|
+
screenWidth?: number;
|
|
94
|
+
};
|
|
95
|
+
type AnalyticsSummaryInput = {
|
|
96
|
+
id: string;
|
|
97
|
+
section: string;
|
|
98
|
+
window: string;
|
|
99
|
+
visitors: number;
|
|
100
|
+
sessions: number;
|
|
101
|
+
pageViews: number;
|
|
102
|
+
pagesPerSession: number;
|
|
103
|
+
consentShare: number;
|
|
104
|
+
};
|
|
105
|
+
type AnalyticsTimelineInput = {
|
|
106
|
+
id: string;
|
|
107
|
+
/** Backend field type is "date" — emitted via formatLocalDate, never raw. */
|
|
108
|
+
bucket: Date;
|
|
109
|
+
section: string;
|
|
110
|
+
visitors: number;
|
|
111
|
+
sessions: number;
|
|
112
|
+
pageViews: number;
|
|
113
|
+
};
|
|
114
|
+
type AnalyticsBreakdownInput = {
|
|
115
|
+
id: string;
|
|
116
|
+
dimension: string;
|
|
117
|
+
key: string;
|
|
118
|
+
visitors: number;
|
|
119
|
+
sessions: number;
|
|
120
|
+
pageViews: number;
|
|
121
|
+
};
|
|
122
|
+
type AnalyticsSessionInput = {
|
|
123
|
+
id: string;
|
|
124
|
+
visitorId: string;
|
|
125
|
+
consented: boolean;
|
|
126
|
+
/** Backend field type is "datetime" — emitted via toISOString(). */
|
|
127
|
+
startedAt: Date;
|
|
128
|
+
/** Backend field type is "datetime" — emitted via toISOString(). */
|
|
129
|
+
lastSeenAt: Date;
|
|
130
|
+
pageViews: number;
|
|
131
|
+
section: string;
|
|
132
|
+
landingRoute: string;
|
|
133
|
+
referrerHost?: string;
|
|
134
|
+
utmSource?: string;
|
|
135
|
+
utmMedium?: string;
|
|
136
|
+
utmCampaign?: string;
|
|
137
|
+
utmTerm?: string;
|
|
138
|
+
utmContent?: string;
|
|
139
|
+
deviceType: string;
|
|
140
|
+
userId?: string;
|
|
141
|
+
};
|
|
142
|
+
type AnalyticsPageViewInput = {
|
|
143
|
+
id: string;
|
|
144
|
+
/** Backend field type is "datetime" — emitted via toISOString(). */
|
|
145
|
+
createdAt: Date;
|
|
146
|
+
path: string;
|
|
147
|
+
route: string;
|
|
148
|
+
section: string;
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
type AnalyticsAdminFilterState = {
|
|
152
|
+
/** ISO 8601 instant. */
|
|
153
|
+
from: string;
|
|
154
|
+
/** ISO 8601 instant. */
|
|
155
|
+
to: string;
|
|
156
|
+
section: AnalyticsSection;
|
|
157
|
+
granularity: AnalyticsGranularity;
|
|
158
|
+
};
|
|
159
|
+
interface AnalyticsAdminContextType {
|
|
160
|
+
/** The six summary rows: {public, app, total} × {current, previous}. */
|
|
161
|
+
summary: AnalyticsSummaryInterface[];
|
|
162
|
+
timeline: AnalyticsTimelineInterface[];
|
|
163
|
+
breakdowns: Record<AnalyticsDimension, AnalyticsBreakdownInterface[]>;
|
|
164
|
+
sessions: AnalyticsSessionInterface[];
|
|
165
|
+
filters: AnalyticsAdminFilterState;
|
|
166
|
+
/** Merges a partial patch into the current filters; every key is optional. */
|
|
167
|
+
setFilters: (next: Partial<AnalyticsAdminFilterState>) => void;
|
|
168
|
+
/** Appends the next page of sessions; a no-op when there is none. */
|
|
169
|
+
loadMoreSessions: () => Promise<void>;
|
|
170
|
+
hasMoreSessions: boolean;
|
|
171
|
+
/** Base route of the journey page, as passed to the provider. */
|
|
172
|
+
sessionPageUrl: string;
|
|
173
|
+
isLoading: boolean;
|
|
174
|
+
error: string | null;
|
|
175
|
+
}
|
|
176
|
+
type AnalyticsAdminProviderProps = {
|
|
177
|
+
children: ReactNode;
|
|
178
|
+
/** ISO 8601 instant. Defaults to 30 days ago. */
|
|
179
|
+
initialFrom?: string;
|
|
180
|
+
/** ISO 8601 instant. Defaults to now. */
|
|
181
|
+
initialTo?: string;
|
|
182
|
+
/** Route the breadcrumb links back to. */
|
|
183
|
+
pageUrl?: string;
|
|
184
|
+
/** Base route of the journey page each session row links to. */
|
|
185
|
+
sessionPageUrl?: string;
|
|
186
|
+
};
|
|
187
|
+
/**
|
|
188
|
+
* Owns every filter the administrative analytics page reads, fetches the panels
|
|
189
|
+
* behind it, and publishes the filter bar into the page title bar.
|
|
190
|
+
*
|
|
191
|
+
* The filter bar is rendered into `title.functions` here — NOT in the container —
|
|
192
|
+
* because `RoundPageContainer`'s title bar reads `title.functions` from
|
|
193
|
+
* `SharedContext`, and a descendant cannot inject nodes into an ancestor's
|
|
194
|
+
* provider value. That is why the filter state lives at this level.
|
|
195
|
+
*/
|
|
196
|
+
declare const AnalyticsAdminProvider: ({ children, initialFrom, initialTo, pageUrl, sessionPageUrl, }: AnalyticsAdminProviderProps) => React.JSX.Element;
|
|
197
|
+
declare const useAnalyticsAdmin: () => AnalyticsAdminContextType;
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* Page body for the administrative analytics dashboard.
|
|
201
|
+
*
|
|
202
|
+
* Stateless by design — every value it renders comes from
|
|
203
|
+
* `useAnalyticsAdmin()`. The filter bar is deliberately NOT here: it belongs to
|
|
204
|
+
* the page title bar, which `RoundPageContainer` fills from `SharedContext`, so
|
|
205
|
+
* the provider publishes it (see AnalyticsAdminContext).
|
|
206
|
+
*/
|
|
207
|
+
declare function AnalyticsAdminContainer(): React.JSX.Element;
|
|
208
|
+
|
|
209
|
+
type FilterState = {
|
|
210
|
+
from: string;
|
|
211
|
+
to: string;
|
|
212
|
+
section: AnalyticsSection;
|
|
213
|
+
granularity: AnalyticsGranularity;
|
|
214
|
+
};
|
|
215
|
+
type Props$6 = FilterState & {
|
|
216
|
+
/** Receives ONLY the keys that changed. */
|
|
217
|
+
onChange: (next: Partial<FilterState>) => void;
|
|
218
|
+
};
|
|
219
|
+
/**
|
|
220
|
+
* The single control row above the KPI tiles.
|
|
221
|
+
*
|
|
222
|
+
* It is deliberately stateless: every control reports the one key it changed and
|
|
223
|
+
* the owning context re-fetches. Keeping the whole filter state in one place is
|
|
224
|
+
* what lets the page issue a single coordinated batch of requests instead of one
|
|
225
|
+
* per control.
|
|
226
|
+
*/
|
|
227
|
+
declare function AnalyticsAdminFilterBar({ section, granularity, onChange }: Props$6): React.JSX.Element;
|
|
228
|
+
|
|
229
|
+
type Props$5 = {
|
|
230
|
+
/** The six summary rows: {public, app, total} × {current, previous}. */
|
|
231
|
+
summary: AnalyticsSummaryInterface[];
|
|
232
|
+
};
|
|
233
|
+
/**
|
|
234
|
+
* The KPI header of the administrative analytics page.
|
|
235
|
+
*
|
|
236
|
+
* Three lead tiles carry the traffic volumes — visitors, sessions, page views —
|
|
237
|
+
* each with its delta against the equal-length preceding window. Two supporting
|
|
238
|
+
* tiles below carry the ratios that give those numbers context.
|
|
239
|
+
*
|
|
240
|
+
* The tiles read the `total` row: the backend already applies the section filter
|
|
241
|
+
* to it, so it is the figure for whatever the filter bar selected. The backend
|
|
242
|
+
* always returns both windows, which is why no tile has to branch on a missing
|
|
243
|
+
* row: an absent one is simply zero-filled here.
|
|
244
|
+
*/
|
|
245
|
+
declare function AnalyticsAdminTiles({ summary }: Props$5): React.JSX.Element;
|
|
246
|
+
|
|
247
|
+
type AnalyticsTimelineChartProps = {
|
|
248
|
+
rows: AnalyticsTimelineInterface[];
|
|
249
|
+
className?: string;
|
|
250
|
+
};
|
|
251
|
+
/**
|
|
252
|
+
* Traffic over time as a grouped bar chart: visitors and page views per bucket.
|
|
253
|
+
*
|
|
254
|
+
* The backend returns one row per bucket per section; the chart sums the
|
|
255
|
+
* sections into one entry per bucket. The two series measure different things,
|
|
256
|
+
* so they sit side by side rather than stacked.
|
|
257
|
+
*
|
|
258
|
+
* Colour does an IDENTITY job here — each bar is a series, not a magnitude — so
|
|
259
|
+
* it draws the fixed categorical order from the token-usage palette (slots 0 and
|
|
260
|
+
* 1). The palette's light-mode validator run carries a sub-3:1 contrast WARN,
|
|
261
|
+
* which obliges a relief channel: the legend and the value-carrying tooltip
|
|
262
|
+
* below are what make the fills readable.
|
|
263
|
+
*/
|
|
264
|
+
declare function AnalyticsTimelineChart({ rows, className }: AnalyticsTimelineChartProps): React.JSX.Element;
|
|
265
|
+
|
|
266
|
+
type Props$4 = {
|
|
267
|
+
breakdowns: Record<AnalyticsDimension, AnalyticsBreakdownInterface[]>;
|
|
268
|
+
};
|
|
269
|
+
/**
|
|
270
|
+
* Attribution and content breakdowns, one tab per dimension.
|
|
271
|
+
*
|
|
272
|
+
* Each tab is the same four-column table — key, visitors, sessions, page views —
|
|
273
|
+
* sorted by visitors. Sorting is client-side because the whole ranked set is
|
|
274
|
+
* already in memory, so a round trip would buy nothing. Keys are data, not
|
|
275
|
+
* vocabulary: `(none)` and the routes are rendered as the backend wrote them;
|
|
276
|
+
* only the `other` rollup is translated.
|
|
277
|
+
*/
|
|
278
|
+
declare function AnalyticsBreakdownTable({ breakdowns }: Props$4): React.JSX.Element;
|
|
279
|
+
|
|
280
|
+
type Props$3 = {
|
|
281
|
+
rows: AnalyticsSessionInterface[];
|
|
282
|
+
/** Base route of the journey page; each row links to `${sessionPageUrl}/${id}`. */
|
|
283
|
+
sessionPageUrl: string;
|
|
284
|
+
onLoadMore: () => void;
|
|
285
|
+
hasMore: boolean;
|
|
286
|
+
};
|
|
287
|
+
/**
|
|
288
|
+
* The sessions in the selected window, newest first as the backend returns them.
|
|
289
|
+
*
|
|
290
|
+
* Paginated by cursor: the owning context holds the next-page reference and
|
|
291
|
+
* appends on `onLoadMore`, so this table stays stateless. A session linked to a
|
|
292
|
+
* signed-in user shows the user; any other shows a short visitor suffix, enough
|
|
293
|
+
* to tell two anonymous visitors apart without displaying the whole id.
|
|
294
|
+
*/
|
|
295
|
+
declare function AnalyticsSessionsTable({ rows, sessionPageUrl, onLoadMore, hasMore }: Props$3): React.JSX.Element;
|
|
296
|
+
|
|
297
|
+
type Props$2 = {
|
|
298
|
+
sessionId: string;
|
|
299
|
+
/** Route of the dashboard; the journey pages live under `${pageUrl}/sessions`. */
|
|
300
|
+
pageUrl?: string;
|
|
301
|
+
};
|
|
302
|
+
/**
|
|
303
|
+
* One session, followed page by page.
|
|
304
|
+
*
|
|
305
|
+
* The attribution header says where the visitor came from, the page-view table
|
|
306
|
+
* replays the session in order with the time spent before each step, and the
|
|
307
|
+
* visitor's other sessions close the page. Unlike the dashboard this page has no
|
|
308
|
+
* filters, so it fetches on mount without a provider and publishes its own
|
|
309
|
+
* breadcrumb back to the dashboard.
|
|
310
|
+
*/
|
|
311
|
+
declare function AnalyticsJourneyContainer({ sessionId, pageUrl }: Props$2): React.JSX.Element;
|
|
312
|
+
|
|
313
|
+
type Props$1 = {
|
|
314
|
+
/** Route the breadcrumb links back to. Defaults to the provider's default. */
|
|
315
|
+
pageUrl?: string;
|
|
316
|
+
/** Base route of the journey page each session row links to. */
|
|
317
|
+
sessionPageUrl?: string;
|
|
318
|
+
};
|
|
319
|
+
/**
|
|
320
|
+
* The whole administrative analytics page as one client component, so a host
|
|
321
|
+
* app's server page renders a single element. `AnalyticsAdminContainer` owns
|
|
322
|
+
* the `RoundPageContainer`; the provider sits above it because it publishes the
|
|
323
|
+
* filter bar into the title bar.
|
|
324
|
+
*/
|
|
325
|
+
declare function AnalyticsAdminPageContainer({ pageUrl, sessionPageUrl }: Props$1): React.JSX.Element;
|
|
326
|
+
|
|
327
|
+
type Props = {
|
|
328
|
+
sessionId: string;
|
|
329
|
+
/** Route the breadcrumb links back to. Defaults to the container's default. */
|
|
330
|
+
pageUrl?: string;
|
|
331
|
+
};
|
|
332
|
+
/** The single-session journey page as one client component. */
|
|
333
|
+
declare function AnalyticsJourneyPageContainer({ sessionId, pageUrl }: Props): React.JSX.Element;
|
|
334
|
+
|
|
335
|
+
/** Write-only resource: the tracker posts it, rehydrate reads the two attributes back. */
|
|
336
|
+
interface AnalyticsEventInterface extends ApiDataInterface {
|
|
337
|
+
get path(): string;
|
|
338
|
+
get section(): string;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
/**
|
|
342
|
+
* One page view as the tracker posts it. The API answers with the stored event,
|
|
343
|
+
* so rehydrate reads back the two attributes every event carries.
|
|
344
|
+
*/
|
|
345
|
+
declare class AnalyticsEvent extends AbstractApiData implements AnalyticsEventInterface {
|
|
346
|
+
private _path;
|
|
347
|
+
private _section;
|
|
348
|
+
get path(): string;
|
|
349
|
+
get section(): string;
|
|
350
|
+
rehydrate(data: JsonApiHydratedDataInterface): this;
|
|
351
|
+
createJsonApi(data: AnalyticsEventInput): any;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
/** One (section, window) row of the headline tiles: current or previous period. */
|
|
355
|
+
declare class AnalyticsSummary extends AbstractApiData implements AnalyticsSummaryInterface {
|
|
356
|
+
private _section;
|
|
357
|
+
private _window;
|
|
358
|
+
private _visitors;
|
|
359
|
+
private _sessions;
|
|
360
|
+
private _pageViews;
|
|
361
|
+
private _pagesPerSession;
|
|
362
|
+
private _consentShare;
|
|
363
|
+
get section(): string;
|
|
364
|
+
get window(): string;
|
|
365
|
+
get visitors(): number;
|
|
366
|
+
get sessions(): number;
|
|
367
|
+
get pageViews(): number;
|
|
368
|
+
get pagesPerSession(): number;
|
|
369
|
+
get consentShare(): number;
|
|
370
|
+
rehydrate(data: JsonApiHydratedDataInterface): this;
|
|
371
|
+
createJsonApi(data: AnalyticsSummaryInput): any;
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
/** One (bucket, section) point of the visitors-over-time chart. */
|
|
375
|
+
declare class AnalyticsTimeline extends AbstractApiData implements AnalyticsTimelineInterface {
|
|
376
|
+
private _bucket;
|
|
377
|
+
private _section;
|
|
378
|
+
private _visitors;
|
|
379
|
+
private _sessions;
|
|
380
|
+
private _pageViews;
|
|
381
|
+
get bucket(): Date;
|
|
382
|
+
get section(): string;
|
|
383
|
+
get visitors(): number;
|
|
384
|
+
get sessions(): number;
|
|
385
|
+
get pageViews(): number;
|
|
386
|
+
rehydrate(data: JsonApiHydratedDataInterface): this;
|
|
387
|
+
createJsonApi(data: AnalyticsTimelineInput): any;
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
/** One row of a breakdown table: a key (source, route, …) and its counts. */
|
|
391
|
+
declare class AnalyticsBreakdown extends AbstractApiData implements AnalyticsBreakdownInterface {
|
|
392
|
+
private _dimension;
|
|
393
|
+
private _key;
|
|
394
|
+
private _visitors;
|
|
395
|
+
private _sessions;
|
|
396
|
+
private _pageViews;
|
|
397
|
+
get dimension(): string;
|
|
398
|
+
get key(): string;
|
|
399
|
+
get visitors(): number;
|
|
400
|
+
get sessions(): number;
|
|
401
|
+
get pageViews(): number;
|
|
402
|
+
rehydrate(data: JsonApiHydratedDataInterface): this;
|
|
403
|
+
createJsonApi(data: AnalyticsBreakdownInput): any;
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
/** One visit: a run of page views from one visitor with no 30-minute gap. */
|
|
407
|
+
declare class AnalyticsSession extends AbstractApiData implements AnalyticsSessionInterface {
|
|
408
|
+
private _visitorId;
|
|
409
|
+
private _consented;
|
|
410
|
+
private _startedAt;
|
|
411
|
+
private _lastSeenAt;
|
|
412
|
+
private _pageViews;
|
|
413
|
+
private _section;
|
|
414
|
+
private _landingRoute;
|
|
415
|
+
private _referrerHost?;
|
|
416
|
+
private _utmSource?;
|
|
417
|
+
private _utmMedium?;
|
|
418
|
+
private _utmCampaign?;
|
|
419
|
+
private _utmTerm?;
|
|
420
|
+
private _utmContent?;
|
|
421
|
+
private _deviceType;
|
|
422
|
+
private _user?;
|
|
423
|
+
get visitorId(): string;
|
|
424
|
+
get consented(): boolean;
|
|
425
|
+
get startedAt(): Date;
|
|
426
|
+
get lastSeenAt(): Date;
|
|
427
|
+
get pageViews(): number;
|
|
428
|
+
get section(): string;
|
|
429
|
+
get landingRoute(): string;
|
|
430
|
+
get referrerHost(): string | undefined;
|
|
431
|
+
get utmSource(): string | undefined;
|
|
432
|
+
get utmMedium(): string | undefined;
|
|
433
|
+
get utmCampaign(): string | undefined;
|
|
434
|
+
get utmTerm(): string | undefined;
|
|
435
|
+
get utmContent(): string | undefined;
|
|
436
|
+
get deviceType(): string;
|
|
437
|
+
get user(): UserInterface | undefined;
|
|
438
|
+
rehydrate(data: JsonApiHydratedDataInterface): this;
|
|
439
|
+
createJsonApi(data: AnalyticsSessionInput): any;
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
interface AnalyticsPageViewInterface extends ApiDataInterface {
|
|
443
|
+
/** Backend declares this `type: "datetime"`, so it is a Date in memory. */
|
|
444
|
+
get createdAt(): Date;
|
|
445
|
+
get path(): string;
|
|
446
|
+
get route(): string;
|
|
447
|
+
get section(): string;
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
/** One step of a session journey. */
|
|
451
|
+
declare class AnalyticsPageView extends AbstractApiData implements AnalyticsPageViewInterface {
|
|
452
|
+
private _path;
|
|
453
|
+
private _route;
|
|
454
|
+
private _section;
|
|
455
|
+
get path(): string;
|
|
456
|
+
get route(): string;
|
|
457
|
+
get section(): string;
|
|
458
|
+
rehydrate(data: JsonApiHydratedDataInterface): this;
|
|
459
|
+
createJsonApi(data: AnalyticsPageViewInput): any;
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
declare class AnalyticsService extends AbstractService {
|
|
463
|
+
/**
|
|
464
|
+
* Posts one page view. Fire-and-forget: a lost page view must never surface
|
|
465
|
+
* an error to the visitor, so the global handler is suppressed and any
|
|
466
|
+
* rejection is logged at debug level and swallowed here.
|
|
467
|
+
*/
|
|
468
|
+
static track(input: AnalyticsEventInput): Promise<void>;
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
declare class AnalyticsAdminService extends AbstractService {
|
|
472
|
+
/** Headline tiles: one row per window (current, previous). */
|
|
473
|
+
static getSummary(filters: AnalyticsFilters): Promise<AnalyticsSummaryInterface[]>;
|
|
474
|
+
static getTimeline(params: AnalyticsFilters & {
|
|
475
|
+
granularity: AnalyticsGranularity;
|
|
476
|
+
}): Promise<AnalyticsTimelineInterface[]>;
|
|
477
|
+
static getBreakdown(params: AnalyticsFilters & {
|
|
478
|
+
dimension: AnalyticsDimension;
|
|
479
|
+
limit?: number;
|
|
480
|
+
}): Promise<AnalyticsBreakdownInterface[]>;
|
|
481
|
+
/** Newest sessions first, cursor-paginated through `next`. */
|
|
482
|
+
static getSessions(params: AnalyticsFilters & {
|
|
483
|
+
visitorId?: string;
|
|
484
|
+
userId?: string;
|
|
485
|
+
next?: NextRef;
|
|
486
|
+
}): Promise<AnalyticsSessionInterface[]>;
|
|
487
|
+
static getSession(params: {
|
|
488
|
+
id: string;
|
|
489
|
+
}): Promise<AnalyticsSessionInterface>;
|
|
490
|
+
/** The journey: every page view of one session, oldest first. */
|
|
491
|
+
static getSessionPageViews(params: {
|
|
492
|
+
sessionId: string;
|
|
493
|
+
}): Promise<AnalyticsPageViewInterface[]>;
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
/**
|
|
497
|
+
* The fixed namespace of i18n keys the administrative analytics feature reads
|
|
498
|
+
* via useTranslations. Consuming apps must define each entry in their
|
|
499
|
+
* messages/<locale>.json — this list is the contract between the package and
|
|
500
|
+
* the app.
|
|
501
|
+
*
|
|
502
|
+
* The description key is read by the consuming app's page metadata only, not by
|
|
503
|
+
* a component in this package, which is why the contract spec lists it among
|
|
504
|
+
* the keys declared for app-rendered surfaces.
|
|
505
|
+
*/
|
|
506
|
+
declare const ANALYTICS_ADMIN_I18N_KEYS: readonly ["analytics.admin.title", "analytics.admin.description", "analytics.admin.tiles.visitors", "analytics.admin.tiles.sessions", "analytics.admin.tiles.page_views", "analytics.admin.tiles.pages_per_session", "analytics.admin.tiles.consent_share", "analytics.admin.tiles.vs_previous", "analytics.admin.tiles.summarised_note", "analytics.admin.filter.section", "analytics.admin.filter.section_all", "analytics.admin.filter.section_public", "analytics.admin.filter.section_app", "analytics.admin.filter.granularity", "analytics.admin.filter.granularity_day", "analytics.admin.filter.granularity_week", "analytics.admin.filter.granularity_month", "analytics.admin.panels.over_time", "analytics.admin.panels.breakdown", "analytics.admin.panels.sessions", "analytics.admin.panels.journey", "analytics.admin.panels.other_sessions", "analytics.admin.dimensions.source", "analytics.admin.dimensions.medium", "analytics.admin.dimensions.campaign", "analytics.admin.dimensions.referrer", "analytics.admin.dimensions.route", "analytics.admin.dimensions.landing", "analytics.admin.columns.key", "analytics.admin.columns.visitors", "analytics.admin.columns.sessions", "analytics.admin.columns.page_views", "analytics.admin.columns.started", "analytics.admin.columns.visitor", "analytics.admin.columns.source", "analytics.admin.columns.landing", "analytics.admin.columns.pages", "analytics.admin.columns.device", "analytics.admin.columns.time", "analytics.admin.columns.gap", "analytics.admin.columns.path", "analytics.admin.anonymous", "analytics.admin.consented", "analytics.admin.not_consented", "analytics.admin.load_more", "analytics.admin.no_data", "analytics.admin.other", "analytics.admin.series.visitors", "analytics.admin.series.page_views"];
|
|
507
|
+
|
|
508
|
+
export { ANALYTICS_ADMIN_I18N_KEYS, ANALYTICS_DIMENSIONS, ANALYTICS_GRANULARITIES, ANALYTICS_SECTIONS, AnalyticsAdminContainer, type AnalyticsAdminContextType, AnalyticsAdminFilterBar, type AnalyticsAdminFilterState, AnalyticsAdminPageContainer, AnalyticsAdminProvider, AnalyticsAdminService, AnalyticsAdminTiles, AnalyticsBreakdown, type AnalyticsBreakdownInput, type AnalyticsBreakdownInterface, AnalyticsBreakdownTable, type AnalyticsDimension, AnalyticsEvent, type AnalyticsEventInput, type AnalyticsEventInterface, type AnalyticsFilters, type AnalyticsGranularity, AnalyticsJourneyContainer, AnalyticsJourneyPageContainer, AnalyticsPageView, type AnalyticsPageViewInput, type AnalyticsPageViewInterface, type AnalyticsSection, AnalyticsService, AnalyticsSession, type AnalyticsSessionInput, type AnalyticsSessionInterface, AnalyticsSessionsTable, AnalyticsSummary, type AnalyticsSummaryInput, type AnalyticsSummaryInterface, AnalyticsTimeline, AnalyticsTimelineChart, type AnalyticsTimelineInput, type AnalyticsTimelineInterface, AnalyticsTracker, useAnalyticsAdmin };
|