@delmaredigital/payload-experiments 0.3.0-rc.4 → 0.4.0-rc.2
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/README.md +122 -27
- package/dist/admin/MetricSourceSelect.js +3 -3
- package/dist/admin/PlacementStatus.d.ts +3 -0
- package/dist/admin/PlacementStatus.js +54 -0
- package/dist/admin/PreviewLinks.d.ts +2 -1
- package/dist/admin/PreviewLinks.js +2 -2
- package/dist/admin/TestsDashboardCards.d.ts +1 -0
- package/dist/admin/TestsDashboardCards.js +4 -8
- package/dist/admin/TestsNavLink.d.ts +1 -0
- package/dist/admin/TestsNavLink.js +4 -10
- package/dist/admin/actions/ConfirmDialog.d.ts +2 -1
- package/dist/admin/actions/ConfirmDialog.js +2 -2
- package/dist/admin/actions/DecideDialog.d.ts +2 -1
- package/dist/admin/actions/DecideDialog.js +2 -2
- package/dist/admin/api.d.ts +18 -2
- package/dist/admin/api.js +47 -2
- package/dist/admin/blocks/BlockPanel.d.ts +4 -0
- package/dist/admin/blocks/BlockPanel.js +199 -0
- package/dist/admin/blocks/TestBlockField.d.ts +5 -0
- package/dist/admin/blocks/TestBlockField.js +163 -0
- package/dist/admin/blocks/formApi.d.ts +46 -0
- package/dist/admin/blocks/formApi.js +159 -0
- package/dist/admin/blocks/inject.d.ts +7 -0
- package/dist/admin/blocks/inject.js +41 -0
- package/dist/admin/blocks/model.d.ts +17 -0
- package/dist/admin/blocks/model.js +45 -0
- package/dist/admin/blocks/statusCache.d.ts +9 -0
- package/dist/admin/blocks/statusCache.js +92 -0
- package/dist/admin/blocks/useBlockForm.d.ts +17 -0
- package/dist/admin/blocks/useBlockForm.js +46 -0
- package/dist/admin/copy/actions.d.ts +2 -0
- package/dist/admin/copy/actions.js +9 -0
- package/dist/admin/copy/blocks.d.ts +43 -0
- package/dist/admin/copy/blocks.js +64 -0
- package/dist/admin/copy/common.d.ts +1 -0
- package/dist/admin/copy/common.js +1 -1
- package/dist/admin/copy/goals.d.ts +2 -0
- package/dist/admin/copy/goals.js +4 -1
- package/dist/admin/copy/newTest.d.ts +10 -0
- package/dist/admin/copy/newTest.js +10 -0
- package/dist/admin/copy/pages.d.ts +24 -0
- package/dist/admin/copy/pages.js +24 -0
- package/dist/admin/copy/readiness.d.ts +23 -3
- package/dist/admin/copy/readiness.js +24 -3
- package/dist/admin/copy/results.d.ts +1 -0
- package/dist/admin/copy/results.js +1 -0
- package/dist/admin/copy/testPage.d.ts +4 -0
- package/dist/admin/copy/testPage.js +4 -0
- package/dist/admin/goals/XpGoalField.d.ts +4 -0
- package/dist/admin/goals/XpGoalField.js +168 -0
- package/dist/admin/goals/xpGoalField.css +48 -0
- package/dist/admin/metricSource.model.d.ts +2 -0
- package/dist/admin/metricSource.model.js +4 -0
- package/dist/admin/pageCollections.d.ts +10 -0
- package/dist/admin/pageCollections.js +20 -0
- package/dist/admin/paths.d.ts +9 -0
- package/dist/admin/paths.js +9 -0
- package/dist/admin/placementStatus.model.d.ts +2 -0
- package/dist/admin/placementStatus.model.js +19 -0
- package/dist/admin/placements/placementLabels.d.ts +11 -0
- package/dist/admin/placements/placementLabels.js +21 -0
- package/dist/admin/placements/placementLabels.model.d.ts +13 -0
- package/dist/admin/placements/placementLabels.model.js +12 -0
- package/dist/admin/placements/usePlacementLabels.d.ts +12 -0
- package/dist/admin/placements/usePlacementLabels.js +102 -0
- package/dist/admin/results/DataQualityPanel.js +4 -1
- package/dist/admin/results/results.model.d.ts +3 -0
- package/dist/admin/results/results.model.js +8 -4
- package/dist/admin/surface/TestsHome.js +39 -10
- package/dist/admin/surface/TestsSurface.js +7 -6
- package/dist/admin/surface/contracts.d.ts +6 -5
- package/dist/admin/surface/goals/GoalForm.js +71 -44
- package/dist/admin/surface/goals/GoalsList.js +5 -4
- package/dist/admin/surface/goals/data.js +4 -1
- package/dist/admin/surface/goals/goals.model.d.ts +1 -2
- package/dist/admin/surface/goals/goals.model.js +1 -3
- package/dist/admin/surface/home.model.d.ts +3 -3
- package/dist/admin/surface/home.model.js +8 -4
- package/dist/admin/surface/newTest/NewTest.js +56 -17
- package/dist/admin/surface/newTest/PageWizard.d.ts +7 -0
- package/dist/admin/surface/newTest/PageWizard.js +214 -0
- package/dist/admin/surface/pagePicker/CopyRoute.d.ts +6 -0
- package/dist/admin/surface/pagePicker/CopyRoute.js +53 -0
- package/dist/admin/surface/pagePicker/PageCombobox.d.ts +10 -0
- package/dist/admin/surface/pagePicker/PageCombobox.js +395 -0
- package/dist/admin/surface/pagePicker/pagePicker.css +10 -0
- package/dist/admin/surface/pagePicker/pagePicker.model.d.ts +27 -0
- package/dist/admin/surface/pagePicker/pagePicker.model.js +25 -0
- package/dist/admin/surface/readiness/ActionDialogs.js +99 -64
- package/dist/admin/surface/readiness/Banner.js +30 -6
- package/dist/admin/surface/readiness/readiness.model.d.ts +8 -1
- package/dist/admin/surface/readiness/readiness.model.js +92 -9
- package/dist/admin/surface/results/ReleasePages.d.ts +3 -1
- package/dist/admin/surface/results/ReleasePages.js +3 -7
- package/dist/admin/surface/results/ResultsBody.js +21 -2
- package/dist/admin/surface/results/ResultsHeader.js +5 -13
- package/dist/admin/surface/results/useResults.d.ts +20 -1
- package/dist/admin/surface/test/AdvancedSection.js +111 -104
- package/dist/admin/surface/test/GoalSection.js +94 -14
- package/dist/admin/surface/test/LengthSection.js +1 -1
- package/dist/admin/surface/test/PageHoldout.d.ts +3 -0
- package/dist/admin/surface/test/PageHoldout.js +67 -0
- package/dist/admin/surface/test/TestPage.js +5 -9
- package/dist/admin/surface/test/VersionsSection.js +12 -5
- package/dist/admin/surface/test/fields.d.ts +13 -4
- package/dist/admin/surface/test/fields.js +46 -14
- package/dist/admin/surface/test/jumpToSection.d.ts +1 -1
- package/dist/admin/surface/test/jumpToSection.js +4 -3
- package/dist/admin/surface/test/pageParts.d.ts +4 -1
- package/dist/admin/surface/test/pageParts.js +49 -1
- package/dist/admin/surface/test/testPage.css +3 -1
- package/dist/admin/surface/testDocument.model.d.ts +1 -0
- package/dist/admin/surface/testDocument.model.js +2 -1
- package/dist/admin/surface/useTestDocument.d.ts +15 -2
- package/dist/admin/surface/useTestDocument.js +53 -15
- package/dist/admin/surfaceUrls.d.ts +7 -0
- package/dist/admin/surfaceUrls.js +19 -0
- package/dist/admin/theme.css +2 -0
- package/dist/admin/useApi.d.ts +21 -2
- package/dist/admin/useApi.js +3 -5
- package/dist/admin/views/CollectionListRedirect.d.ts +1 -0
- package/dist/admin/views/CollectionListRedirect.js +1 -1
- package/dist/admin/views/ExperimentsRootView.js +28 -133
- package/dist/admin/views/GoalEditRedirect.d.ts +4 -0
- package/dist/admin/views/GoalEditRedirect.js +14 -0
- package/dist/admin/views/GoalsCollectionListView.d.ts +2 -0
- package/dist/admin/views/GoalsCollectionListView.js +4 -0
- package/dist/admin/views/TestsCollectionListView.d.ts +2 -0
- package/dist/admin/views/TestsCollectionListView.js +4 -0
- package/dist/admin/views/TestsNavLinkServer.d.ts +1 -0
- package/dist/admin/views/TestsNavLinkServer.js +1 -1
- package/dist/admin/views/buildSurfaceProps.d.ts +8 -0
- package/dist/admin/views/buildSurfaceProps.js +143 -0
- package/dist/admin/views/renderCollectionList.d.ts +2 -0
- package/dist/admin/views/renderCollectionList.js +34 -0
- package/dist/admin/views/renderTestsSurface.d.ts +3 -0
- package/dist/admin/views/renderTestsSurface.js +34 -0
- package/dist/blocks/bindings.d.ts +3 -0
- package/dist/blocks/bindings.js +34 -0
- package/dist/blocks/createExperimentBlock.d.ts +6 -0
- package/dist/blocks/createExperimentBlock.js +77 -0
- package/dist/blocks/formState.d.ts +31 -0
- package/dist/blocks/formState.js +146 -0
- package/dist/blocks/model.d.ts +41 -0
- package/dist/blocks/model.js +34 -0
- package/dist/client/ExperimentGroup.d.ts +6 -0
- package/dist/client/ExperimentGroup.js +9 -0
- package/dist/client/ExperimentsProvider.js +20 -4
- package/dist/client/clickGoals.d.ts +4 -0
- package/dist/client/clickGoals.js +43 -0
- package/dist/collections/experiments/config.js +21 -7
- package/dist/collections/experiments/deleteGuard.d.ts +2 -1
- package/dist/collections/experiments/deleteGuard.js +12 -1
- package/dist/collections/experiments/editability.js +4 -2
- package/dist/collections/experiments/pickSlug.d.ts +2 -0
- package/dist/collections/experiments/pickSlug.js +8 -0
- package/dist/collections/labels.d.ts +3 -0
- package/dist/collections/labels.js +20 -0
- package/dist/collections/metrics.js +28 -6
- package/dist/collections/phases.js +1 -0
- package/dist/collections/serialize.js +7 -0
- package/dist/db/clickGoals.d.ts +9 -0
- package/dist/db/clickGoals.js +22 -0
- package/dist/db/delete.d.ts +1 -0
- package/dist/db/delete.js +1 -0
- package/dist/db/locks.d.ts +8 -0
- package/dist/db/locks.js +27 -4
- package/dist/db/names.d.ts +4 -0
- package/dist/db/names.js +4 -0
- package/dist/db/pageBindings.d.ts +4 -0
- package/dist/db/pageBindings.js +17 -0
- package/dist/db/pageBusy.d.ts +2 -0
- package/dist/db/pageBusy.js +10 -0
- package/dist/db/pageContent.d.ts +10 -0
- package/dist/db/pageContent.js +79 -0
- package/dist/db/placements.d.ts +33 -0
- package/dist/db/placements.js +54 -0
- package/dist/db/slugs.d.ts +8 -0
- package/dist/db/slugs.js +40 -0
- package/dist/db/snapshots.d.ts +6 -0
- package/dist/db/snapshots.js +8 -5
- package/dist/endpoints/clickKeys.d.ts +5 -0
- package/dist/endpoints/clickKeys.js +17 -0
- package/dist/endpoints/events.js +4 -1
- package/dist/endpoints/index.js +28 -0
- package/dist/endpoints/pages.d.ts +5 -0
- package/dist/endpoints/pages.js +120 -0
- package/dist/endpoints/placementStatus.d.ts +6 -0
- package/dist/endpoints/placementStatus.js +238 -0
- package/dist/endpoints/readBody.d.ts +2 -0
- package/dist/endpoints/readBody.js +24 -0
- package/dist/endpoints/results.js +5 -1
- package/dist/endpoints/summary.js +11 -4
- package/dist/endpoints/wrapBlock.d.ts +6 -0
- package/dist/endpoints/wrapBlock.js +76 -0
- package/dist/errors.d.ts +3 -3
- package/dist/errors.js +4 -4
- package/dist/events/rows.d.ts +1 -1
- package/dist/events/rows.js +5 -3
- package/dist/exports/adminClient.d.ts +5 -0
- package/dist/exports/adminClient.js +5 -0
- package/dist/exports/adminRsc.d.ts +3 -0
- package/dist/exports/adminRsc.js +3 -0
- package/dist/exports/blocks.d.ts +2 -0
- package/dist/exports/blocks.js +1 -0
- package/dist/exports/client.d.ts +1 -0
- package/dist/exports/client.js +1 -0
- package/dist/exports/index.d.ts +6 -1
- package/dist/exports/index.js +3 -0
- package/dist/exports/puck.d.ts +3 -1
- package/dist/exports/puck.js +2 -0
- package/dist/exports/puckEditor.d.ts +3 -0
- package/dist/exports/puckEditor.js +2 -0
- package/dist/exports/rsc.d.ts +3 -0
- package/dist/exports/rsc.js +2 -0
- package/dist/fields/xpGoal.d.ts +3 -0
- package/dist/fields/xpGoal.js +16 -0
- package/dist/globals/state.js +10 -0
- package/dist/goals/cache.d.ts +3 -0
- package/dist/goals/cache.js +35 -0
- package/dist/goals/fairness.d.ts +40 -0
- package/dist/goals/fairness.js +200 -0
- package/dist/goals/key.d.ts +4 -0
- package/dist/goals/key.js +3 -0
- package/dist/goals/picker/clickGoalPicker.model.d.ts +29 -0
- package/dist/goals/picker/clickGoalPicker.model.js +45 -0
- package/dist/goals/picker/copy.d.ts +16 -0
- package/dist/goals/picker/copy.js +15 -0
- package/dist/goals/picker/useClickGoalPicker.d.ts +30 -0
- package/dist/goals/picker/useClickGoalPicker.js +220 -0
- package/dist/goals/validate.d.ts +3 -0
- package/dist/goals/validate.js +14 -0
- package/dist/hooks/pageGuard.d.ts +5 -1
- package/dist/hooks/pageGuard.js +157 -95
- package/dist/hooks/puckGoals.d.ts +3 -0
- package/dist/hooks/puckGoals.js +38 -0
- package/dist/onInit.js +29 -0
- package/dist/options.d.ts +2 -0
- package/dist/options.js +41 -1
- package/dist/plugin.js +50 -43
- package/dist/puck/copy.d.ts +1 -0
- package/dist/puck/copy.js +1 -0
- package/dist/puck/editor/editor.chrome.css +14 -0
- package/dist/puck/editor/editor.css +106 -0
- package/dist/puck/editor/editor.model.d.ts +4 -2
- package/dist/puck/editor/editor.model.js +6 -3
- package/dist/puck/editor/integration.d.ts +10 -0
- package/dist/puck/editor/integration.js +30 -0
- package/dist/puck/editor/xpGoalPuckEditorField.d.ts +7 -0
- package/dist/puck/editor/xpGoalPuckEditorField.js +142 -0
- package/dist/puck/integration.d.ts +6 -0
- package/dist/puck/integration.js +21 -0
- package/dist/puck/xpGoalField.d.ts +3 -0
- package/dist/puck/xpGoalField.js +6 -0
- package/dist/results/health.d.ts +4 -0
- package/dist/results/health.js +27 -0
- package/dist/results/snapshot.js +15 -2
- package/dist/sanitizeReadinessDetail.js +43 -0
- package/dist/server/pageKindSeoContract.d.ts +27 -0
- package/dist/server/pageKindSeoContract.js +80 -0
- package/dist/server/recordContentChange.js +58 -8
- package/dist/server/resolveExperimentBlocks.d.ts +5 -0
- package/dist/server/resolveExperimentBlocks.js +54 -0
- package/dist/server/runResults.js +56 -15
- package/dist/server/toClientAssignments.js +2 -1
- package/dist/transitions/addMetric.d.ts +2 -1
- package/dist/transitions/addMetric.js +28 -1
- package/dist/transitions/checkStart.d.ts +14 -1
- package/dist/transitions/checkStart.js +92 -8
- package/dist/transitions/decide.js +25 -0
- package/dist/transitions/deleteExperiment.d.ts +3 -1
- package/dist/transitions/deleteExperiment.js +27 -1
- package/dist/transitions/kernel.js +4 -0
- package/dist/transitions/makeContent.d.ts +5 -0
- package/dist/transitions/makeContent.js +39 -11
- package/dist/transitions/pageCollection.d.ts +10 -0
- package/dist/transitions/pageCollection.js +20 -0
- package/dist/transitions/pageVersions.d.ts +10 -0
- package/dist/transitions/pageVersions.js +44 -0
- package/dist/transitions/phaseRecord.d.ts +1 -0
- package/dist/transitions/placementInteractions.d.ts +40 -0
- package/dist/transitions/placementInteractions.js +94 -0
- package/dist/transitions/placements.d.ts +8 -0
- package/dist/transitions/placements.js +148 -1
- package/dist/transitions/preflightData.d.ts +2 -2
- package/dist/transitions/preflightData.js +137 -5
- package/dist/transitions/resolveCaps.d.ts +1 -0
- package/dist/transitions/resolveCaps.js +6 -2
- package/dist/transitions/start.js +46 -1
- package/dist/types/admin.d.ts +1 -1
- package/dist/types/assignments.d.ts +1 -0
- package/dist/types/contracts.d.ts +15 -0
- package/dist/types/endpoints.d.ts +92 -5
- package/dist/types/index.d.ts +3 -0
- package/dist/types/puck.d.ts +7 -1
- package/dist/types/snapshot.d.ts +17 -4
- package/dist/types/surface.d.ts +13 -0
- package/dist/ui/ui.css +4 -0
- package/package.json +8 -1
|
@@ -7,7 +7,7 @@ import type { Snapshot, VerdictCode } from './snapshot.js';
|
|
|
7
7
|
export type ArmIssueCode = 'weights-total' | 'control-count' | 'control-first' | 'holdout-last' | 'holdout-count' | 'variant-count' | 'duplicate-key' | 'duplicate-slot' | 'slot-required' | 'invalid-key';
|
|
8
8
|
/** Content-report dismiss/restore refusals (CORE-44). */
|
|
9
9
|
export type ContentEntryRefusal = 'not-decided' | 'entry-not-found' | 'entry-ok' | 'entry-dismissed' | 'entry-not-dismissed';
|
|
10
|
-
export type RefusalCode = ArmIssueCode | 'not-found' | ContentEntryRefusal | 'no-planned-duration' | 'no-primary-metric' | 'no-placements' | 'empty-slot' | 'page-in-use' | 'page-no-targets' | 'page-target-unpublished' | 'page-user-unit' | 'version-page-unavailable' | 'version-page-unchecked' | 'flag-no-point' | 'flag-params-invalid' | 'flag-point-busy' | 'flag-placement-missing' | 'layer-full' | 'layer-unit-mismatch' | 'unknown-metric-source' | 'unit-source-mismatch' | 'no-reach-per-day' | 'invalid-status' | 'stale-draft' | 'stale-edit' | 'commit-unverified' | 'allocation-lower' | 'confirmation-required' | 'invalid-winner' | 'slices-taken' | 'locked-placement' | 'not-implemented' | 'forbidden' | 'unauthenticated' | 'body-too-large' | 'invalid-body' | 'too-many-ids' | 'invalid-phase' | 'invalid-ids' | 'recompute-failed' | 'analysis-failed' | 'undeclared-targeting-key' | 'invalid-targeting-rule' | 'block-path-rule' | 'duplicate-metric';
|
|
10
|
+
export type RefusalCode = ArmIssueCode | 'goal-in-some-versions' | 'placement-unchecked' | 'placement-unpublished' | 'duplicate-version-row' | 'interacting-tests' | 'placements-changed' | 'page-busy' | 'wrap-target-missing' | 'version-identical' | 'version-same-address' | 'unknown-collection' | 'not-found' | ContentEntryRefusal | 'no-planned-duration' | 'no-primary-metric' | 'no-placements' | 'placement-removed' | 'empty-slot' | 'page-in-use' | 'page-no-targets' | 'page-target-unpublished' | 'page-user-unit' | 'version-page-unavailable' | 'version-page-unchecked' | 'flag-no-point' | 'flag-params-invalid' | 'flag-point-busy' | 'flag-placement-missing' | 'layer-full' | 'layer-unit-mismatch' | 'unknown-metric-source' | 'unit-source-mismatch' | 'no-reach-per-day' | 'invalid-status' | 'stale-draft' | 'stale-edit' | 'commit-unverified' | 'allocation-lower' | 'confirmation-required' | 'invalid-winner' | 'slices-taken' | 'locked-placement' | 'not-implemented' | 'forbidden' | 'unauthenticated' | 'body-too-large' | 'invalid-body' | 'too-many-ids' | 'invalid-phase' | 'invalid-ids' | 'recompute-failed' | 'analysis-failed' | 'undeclared-targeting-key' | 'invalid-targeting-rule' | 'block-path-rule' | 'duplicate-metric';
|
|
11
11
|
export type ErrorEnvelope = {
|
|
12
12
|
errors: Array<{
|
|
13
13
|
code: RefusalCode;
|
|
@@ -22,6 +22,13 @@ export type TransitionSuccess = {
|
|
|
22
22
|
export type AllocateBody = {
|
|
23
23
|
allocation: number;
|
|
24
24
|
};
|
|
25
|
+
export type AddMetricWarning = {
|
|
26
|
+
code: 'goal-in-some-versions' | 'goal-added-mid-test' | 'placement-unchecked';
|
|
27
|
+
detail?: unknown;
|
|
28
|
+
};
|
|
29
|
+
export type AddMetricResult = TransitionSuccess & {
|
|
30
|
+
warnings: AddMetricWarning[];
|
|
31
|
+
};
|
|
25
32
|
export type AddMetricBody = {
|
|
26
33
|
metric: DocId;
|
|
27
34
|
role: 'secondary' | 'guardrail';
|
|
@@ -57,12 +64,27 @@ export type MakeContentResult = TransitionSuccess & {
|
|
|
57
64
|
}>;
|
|
58
65
|
};
|
|
59
66
|
export type PreflightResult = {
|
|
67
|
+
goalNotes?: Array<{
|
|
68
|
+
metricId: DocId;
|
|
69
|
+
message: string;
|
|
70
|
+
}>;
|
|
60
71
|
checks: Array<{
|
|
61
72
|
code: ReadinessCode;
|
|
62
73
|
ok: boolean;
|
|
63
74
|
detail?: unknown;
|
|
64
75
|
warning?: boolean;
|
|
65
76
|
}>;
|
|
77
|
+
pagePlacements?: Array<{
|
|
78
|
+
arm: string;
|
|
79
|
+
path: string;
|
|
80
|
+
collection?: string;
|
|
81
|
+
id?: DocId | null;
|
|
82
|
+
title?: string;
|
|
83
|
+
published: boolean;
|
|
84
|
+
slug?: string;
|
|
85
|
+
url?: string;
|
|
86
|
+
editorUrl?: string;
|
|
87
|
+
}>;
|
|
66
88
|
placements: Array<{
|
|
67
89
|
collection: string;
|
|
68
90
|
id: DocId;
|
|
@@ -104,6 +126,7 @@ export interface PhaseSummary {
|
|
|
104
126
|
name: string;
|
|
105
127
|
kind: MetricSource['kind'];
|
|
106
128
|
role: 'primary' | 'secondary' | 'guardrail';
|
|
129
|
+
clickGoal?: true;
|
|
107
130
|
resolvedCap?: number | null;
|
|
108
131
|
historyUnits?: number;
|
|
109
132
|
capNotice?: 'no-history';
|
|
@@ -137,10 +160,7 @@ export type SummaryResponse = Record<DocId, {
|
|
|
137
160
|
code: ReadinessCode;
|
|
138
161
|
detail?: unknown;
|
|
139
162
|
};
|
|
140
|
-
health?:
|
|
141
|
-
code: 'version-page-unavailable' | 'version-page-unchecked';
|
|
142
|
-
path: string;
|
|
143
|
-
}>;
|
|
163
|
+
health?: import('./snapshot.js').SnapshotHealth[];
|
|
144
164
|
exposures: number;
|
|
145
165
|
days: number;
|
|
146
166
|
verdict: {
|
|
@@ -174,3 +194,70 @@ export type EndpointContext<TUser extends {
|
|
|
174
194
|
visitorId: string;
|
|
175
195
|
};
|
|
176
196
|
};
|
|
197
|
+
export type ClickKeysResult = {
|
|
198
|
+
keys: Array<{
|
|
199
|
+
key: string;
|
|
200
|
+
arms: string[];
|
|
201
|
+
label: string;
|
|
202
|
+
}>;
|
|
203
|
+
};
|
|
204
|
+
export type PagesResult = {
|
|
205
|
+
docs: Array<{
|
|
206
|
+
id: DocId;
|
|
207
|
+
title: string;
|
|
208
|
+
path: string | null;
|
|
209
|
+
pathKey: string | null;
|
|
210
|
+
published: boolean;
|
|
211
|
+
}>;
|
|
212
|
+
hasNextPage: boolean;
|
|
213
|
+
};
|
|
214
|
+
export type PlacementStatusBody = {
|
|
215
|
+
docs?: Array<{
|
|
216
|
+
collection: string;
|
|
217
|
+
id: DocId;
|
|
218
|
+
}>;
|
|
219
|
+
slugs?: string[];
|
|
220
|
+
};
|
|
221
|
+
export type PageTestStatus = {
|
|
222
|
+
slug: string;
|
|
223
|
+
name: string;
|
|
224
|
+
status: Status;
|
|
225
|
+
role: 'original' | 'version';
|
|
226
|
+
winner: boolean;
|
|
227
|
+
armLabel: string;
|
|
228
|
+
winnerLabel?: string;
|
|
229
|
+
winnerTitle?: string;
|
|
230
|
+
winnerPath?: string;
|
|
231
|
+
originalPath?: string;
|
|
232
|
+
rollout: boolean;
|
|
233
|
+
pagesReleased: boolean;
|
|
234
|
+
};
|
|
235
|
+
export type PlacementStatusResult = {
|
|
236
|
+
docs: Record<string, {
|
|
237
|
+
path: string | null;
|
|
238
|
+
tests: PageTestStatus[];
|
|
239
|
+
}>;
|
|
240
|
+
slugs: Record<string, {
|
|
241
|
+
missing: true;
|
|
242
|
+
} | {
|
|
243
|
+
deleted: true;
|
|
244
|
+
} | {
|
|
245
|
+
name: string;
|
|
246
|
+
status: Status;
|
|
247
|
+
kind: ExperimentKind;
|
|
248
|
+
arms: Array<{
|
|
249
|
+
key: string;
|
|
250
|
+
label: string;
|
|
251
|
+
slot?: string;
|
|
252
|
+
}>;
|
|
253
|
+
winnerArm?: string;
|
|
254
|
+
rollout: boolean;
|
|
255
|
+
}>;
|
|
256
|
+
};
|
|
257
|
+
export type WrapBlockBody = {
|
|
258
|
+
collection: string;
|
|
259
|
+
id: DocId;
|
|
260
|
+
field: string;
|
|
261
|
+
blockId: string;
|
|
262
|
+
experiment: string;
|
|
263
|
+
};
|
package/dist/types/index.d.ts
CHANGED
|
@@ -7,3 +7,6 @@ export * from './admin.js';
|
|
|
7
7
|
export * from './endpoints.js';
|
|
8
8
|
export * from './snapshot.js';
|
|
9
9
|
export * from './reasons.js';
|
|
10
|
+
export type { HostBlock, ExperimentBlock, ExperimentBlockGroup, ResolvedHostBlock, ResolvedExperimentBlocks } from '../blocks/model.js';
|
|
11
|
+
export type { WrapBlockBody } from './endpoints.js';
|
|
12
|
+
export type { SnapshotHealth } from './snapshot.js';
|
package/dist/types/puck.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { DocId } from './contracts.js';
|
|
2
|
-
import type { Slot } from '@puckeditor/core';
|
|
2
|
+
import type { ComponentConfig, Config, Plugin, Slot } from '@puckeditor/core';
|
|
3
3
|
export type { Slot } from '@puckeditor/core';
|
|
4
4
|
export type ArmSlot = 'control' | 'variantA' | 'variantB' | 'variantC';
|
|
5
5
|
export type ExperimentRef = {
|
|
@@ -21,3 +21,9 @@ export type ExperimentSlotProps = {
|
|
|
21
21
|
};
|
|
22
22
|
};
|
|
23
23
|
export declare const EXPERIMENT_SLOT_TYPE: "ExperimentSlot";
|
|
24
|
+
export interface ExperimentsPuckIntegration {
|
|
25
|
+
name: string;
|
|
26
|
+
components: Record<string, ComponentConfig<ExperimentSlotProps>>;
|
|
27
|
+
categories: Config['categories'];
|
|
28
|
+
plugins?: readonly Plugin[];
|
|
29
|
+
}
|
package/dist/types/snapshot.d.ts
CHANGED
|
@@ -1,3 +1,18 @@
|
|
|
1
|
+
export type SnapshotHealth = {
|
|
2
|
+
code: 'version-page-unavailable' | 'version-page-unchecked';
|
|
3
|
+
path: string;
|
|
4
|
+
} | {
|
|
5
|
+
code: 'goal-in-some-versions';
|
|
6
|
+
metricId: string | number;
|
|
7
|
+
name: string;
|
|
8
|
+
} | {
|
|
9
|
+
code: 'placement-unchecked';
|
|
10
|
+
detail: {
|
|
11
|
+
collection?: string;
|
|
12
|
+
id?: string | number;
|
|
13
|
+
path?: string;
|
|
14
|
+
};
|
|
15
|
+
};
|
|
1
16
|
import type { GaussianPrior } from '@delmaredigital/experiments-stats';
|
|
2
17
|
import type { DocId, MetricSource } from './contracts.js';
|
|
3
18
|
import type { MetricUnavailableReason } from './reasons.js';
|
|
@@ -108,10 +123,8 @@ export interface Snapshot {
|
|
|
108
123
|
guardrailLine?: string;
|
|
109
124
|
worstArm?: string;
|
|
110
125
|
};
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
path: string;
|
|
114
|
-
}>;
|
|
126
|
+
goalFairnessNotice?: string;
|
|
127
|
+
health?: SnapshotHealth[];
|
|
115
128
|
contentChanges: Array<{
|
|
116
129
|
at: string;
|
|
117
130
|
doc: {
|
package/dist/types/surface.d.ts
CHANGED
|
@@ -7,6 +7,9 @@ export interface TestsSurfaceProps {
|
|
|
7
7
|
returnToTest?: string;
|
|
8
8
|
adminRoute: string;
|
|
9
9
|
apiRoute: string;
|
|
10
|
+
collectionTitles?: Record<string, string>;
|
|
11
|
+
userId?: string | number;
|
|
12
|
+
userCollection?: string;
|
|
10
13
|
isAdmin: boolean;
|
|
11
14
|
pages?: Array<{
|
|
12
15
|
collection: string;
|
|
@@ -14,6 +17,15 @@ export interface TestsSurfaceProps {
|
|
|
14
17
|
id: DocId;
|
|
15
18
|
title: string;
|
|
16
19
|
editorUrl: string;
|
|
20
|
+
editor: 'puck' | 'blocks';
|
|
21
|
+
}>;
|
|
22
|
+
pageCollections?: Array<{
|
|
23
|
+
slug: string;
|
|
24
|
+
label: string;
|
|
25
|
+
contentChecks: boolean;
|
|
26
|
+
copyHint?: string;
|
|
27
|
+
copyUrl?: string;
|
|
28
|
+
copyLabel?: string;
|
|
17
29
|
}>;
|
|
18
30
|
canManage: boolean;
|
|
19
31
|
canReadResults: boolean;
|
|
@@ -22,6 +34,7 @@ export interface TestsSurfaceProps {
|
|
|
22
34
|
metricSources: SerializedMetricSource[];
|
|
23
35
|
admin?: {
|
|
24
36
|
descriptions?: {
|
|
37
|
+
page?: string;
|
|
25
38
|
block?: string;
|
|
26
39
|
document?: string;
|
|
27
40
|
setting?: string;
|
package/dist/ui/ui.css
CHANGED
|
@@ -74,6 +74,10 @@
|
|
|
74
74
|
.xp-ui-chips p:not(.xp-ui-error) { margin: 0; color: var(--xp-text-muted); font-size: var(--xp-font-size-small); }
|
|
75
75
|
/* Quiet actions and breadcrumb links stay neutral; only the selected tab takes the text accent. */
|
|
76
76
|
.xp-ui-button-group { display: flex; flex-wrap: wrap; gap: 8px; min-width: 0; max-width: 100%; }
|
|
77
|
+
.xp-ui-inline-row { display: flex; flex-wrap: wrap; align-items: end; gap: var(--xp-space-3); min-width: 0; }
|
|
78
|
+
.xp-ui-inline-row > .xp-ui-field { flex: 1 1 auto; min-width: 0; }
|
|
79
|
+
.xp-ui-inline-row > .xp-ui-button { flex: 0 0 auto; }
|
|
80
|
+
.xp-ui-subpanel { display: grid; gap: var(--xp-space-3); border: 1px solid var(--xp-border); border-radius: var(--xp-radius-card); padding: var(--xp-space-4); }
|
|
77
81
|
@media (prefers-reduced-motion: reduce) {
|
|
78
82
|
.xp-ui-button, .xp-ui-input, .xp-ui-toggle, .xp-ui-toggle::before, .xp-ui-chips-control { transition: none; }
|
|
79
83
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@delmaredigital/payload-experiments",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0-rc.2",
|
|
4
4
|
"description": "No-code A/B testing for Payload CMS and Next.js: block, page and flag experiments with holdouts, layers, exposure logging and honest statistics inside the admin — no vendor",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -37,6 +37,12 @@
|
|
|
37
37
|
"import": "./dist/exports/rsc.js",
|
|
38
38
|
"default": "./dist/exports/rsc.js"
|
|
39
39
|
},
|
|
40
|
+
"./blocks": {
|
|
41
|
+
"@delmaredigital/source": "./src/exports/blocks.ts",
|
|
42
|
+
"types": "./dist/exports/blocks.d.ts",
|
|
43
|
+
"import": "./dist/exports/blocks.js",
|
|
44
|
+
"default": "./dist/exports/blocks.js"
|
|
45
|
+
},
|
|
40
46
|
"./client": {
|
|
41
47
|
"@delmaredigital/source": "./src/exports/client.ts",
|
|
42
48
|
"types": "./dist/exports/client.d.ts",
|
|
@@ -120,6 +126,7 @@
|
|
|
120
126
|
},
|
|
121
127
|
"homepage": "https://delmaredigital.com/developers",
|
|
122
128
|
"devDependencies": {
|
|
129
|
+
"@delmaredigital/payload-puck": "0.10.3",
|
|
123
130
|
"payload": "^3.90.2",
|
|
124
131
|
"@payloadcms/db-postgres": "^3.90.2",
|
|
125
132
|
"@payloadcms/ui": "^3.90.2",
|