@contractspec/bundle.library 3.9.5 → 3.9.7

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 (122) hide show
  1. package/.turbo/turbo-build.log +154 -150
  2. package/CHANGELOG.md +85 -0
  3. package/dist/components/docs/DocsIndexPage.js +2 -2
  4. package/dist/components/docs/docsManifest.js +1 -1
  5. package/dist/components/docs/guides/GuideContractDrivenFormsPage.content.d.ts +3 -0
  6. package/dist/components/docs/guides/GuideContractDrivenFormsPage.content.js +95 -0
  7. package/dist/components/docs/guides/GuideContractDrivenFormsPage.d.ts +1 -0
  8. package/dist/components/docs/guides/GuideContractDrivenFormsPage.js +95 -0
  9. package/dist/components/docs/guides/GuideSpecValidationTypingPage.js +1 -1
  10. package/dist/components/docs/guides/GuidesIndexPage.js +2 -2
  11. package/dist/components/docs/guides/guides.docblocks.js +3 -1
  12. package/dist/components/docs/guides/index.d.ts +1 -0
  13. package/dist/components/docs/guides/index.js +139 -44
  14. package/dist/components/docs/index.js +352 -257
  15. package/dist/index.js +363 -268
  16. package/dist/libs/posthog/client.js +1 -1
  17. package/dist/node/components/docs/DocsIndexPage.js +2 -2
  18. package/dist/node/components/docs/docsManifest.js +1 -1
  19. package/dist/node/components/docs/guides/GuideContractDrivenFormsPage.content.js +94 -0
  20. package/dist/node/components/docs/guides/GuideContractDrivenFormsPage.js +94 -0
  21. package/dist/node/components/docs/guides/GuideSpecValidationTypingPage.js +1 -1
  22. package/dist/node/components/docs/guides/GuidesIndexPage.js +2 -2
  23. package/dist/node/components/docs/guides/guides.docblocks.js +3 -1
  24. package/dist/node/components/docs/guides/index.js +139 -44
  25. package/dist/node/components/docs/index.js +352 -257
  26. package/dist/node/index.js +363 -268
  27. package/dist/node/libs/posthog/client.js +1 -1
  28. package/package.json +47 -23
  29. package/src/components/docs/docsManifest.ts +12 -0
  30. package/src/components/docs/generated/docs-index._common.json +2008 -1699
  31. package/src/components/docs/generated/docs-index.agent-console.json +377 -377
  32. package/src/components/docs/generated/docs-index.ai-chat-assistant.json +17 -17
  33. package/src/components/docs/generated/docs-index.ai-chat.json +105 -105
  34. package/src/components/docs/generated/docs-index.ai-support-bot.json +9 -9
  35. package/src/components/docs/generated/docs-index.analytics-dashboard.json +169 -169
  36. package/src/components/docs/generated/docs-index.app-config.json +137 -137
  37. package/src/components/docs/generated/docs-index.artisan-knowledge-product.json +17 -17
  38. package/src/components/docs/generated/docs-index.artisan-payments-stripe.json +33 -33
  39. package/src/components/docs/generated/docs-index.audit-trail.json +49 -49
  40. package/src/components/docs/generated/docs-index.calendar-google.json +9 -9
  41. package/src/components/docs/generated/docs-index.content-generation.json +9 -9
  42. package/src/components/docs/generated/docs-index.control-plane.json +17 -17
  43. package/src/components/docs/generated/docs-index.crm-pipeline.json +161 -161
  44. package/src/components/docs/generated/docs-index.data-grid-showcase.json +25 -25
  45. package/src/components/docs/generated/docs-index.defineExample.json +9 -9
  46. package/src/components/docs/generated/docs-index.email-gmail.json +9 -9
  47. package/src/components/docs/generated/docs-index.feature-flags.json +217 -217
  48. package/src/components/docs/generated/docs-index.files.json +177 -177
  49. package/src/components/docs/generated/docs-index.generated.ts +20 -20
  50. package/src/components/docs/generated/docs-index.harness-lab.json +9 -9
  51. package/src/components/docs/generated/docs-index.health.json +97 -97
  52. package/src/components/docs/generated/docs-index.identity-rbac.json +313 -313
  53. package/src/components/docs/generated/docs-index.in-app-docs.json +9 -9
  54. package/src/components/docs/generated/docs-index.integration-hub.json +265 -265
  55. package/src/components/docs/generated/docs-index.integration-posthog.json +9 -9
  56. package/src/components/docs/generated/docs-index.integration-stripe.json +9 -9
  57. package/src/components/docs/generated/docs-index.integration-supabase.json +9 -9
  58. package/src/components/docs/generated/docs-index.jobs.json +137 -137
  59. package/src/components/docs/generated/docs-index.kb-update-pipeline.json +129 -129
  60. package/src/components/docs/generated/docs-index.knowledge-canon.json +9 -9
  61. package/src/components/docs/generated/docs-index.learning-journey-ambient-coach.json +9 -9
  62. package/src/components/docs/generated/docs-index.learning-journey-crm-onboarding.json +49 -49
  63. package/src/components/docs/generated/docs-index.learning-journey-duo-drills.json +9 -9
  64. package/src/components/docs/generated/docs-index.learning-journey-platform-tour.json +49 -49
  65. package/src/components/docs/generated/docs-index.learning-journey-quest-challenges.json +9 -9
  66. package/src/components/docs/generated/docs-index.learning-journey-registry.json +33 -33
  67. package/src/components/docs/generated/docs-index.learning-journey-studio-onboarding.json +49 -49
  68. package/src/components/docs/generated/docs-index.learning-journey-ui-coaching.json +9 -9
  69. package/src/components/docs/generated/docs-index.learning-journey-ui-gamified.json +9 -9
  70. package/src/components/docs/generated/docs-index.learning-journey-ui-onboarding.json +9 -9
  71. package/src/components/docs/generated/docs-index.learning-journey-ui-shared.json +9 -9
  72. package/src/components/docs/generated/docs-index.learning-journey.json +241 -241
  73. package/src/components/docs/generated/docs-index.learning-patterns.json +9 -9
  74. package/src/components/docs/generated/docs-index.lifecycle-cli.json +9 -9
  75. package/src/components/docs/generated/docs-index.lifecycle-dashboard.json +9 -9
  76. package/src/components/docs/generated/docs-index.locale-jurisdiction-gate.json +65 -65
  77. package/src/components/docs/generated/docs-index.marketplace.json +337 -337
  78. package/src/components/docs/generated/docs-index.meeting-recorder-providers.json +9 -9
  79. package/src/components/docs/generated/docs-index.meeting-recorder.json +49 -49
  80. package/src/components/docs/generated/docs-index.messaging-agent-actions.json +17 -17
  81. package/src/components/docs/generated/docs-index.metrics.json +201 -201
  82. package/src/components/docs/generated/docs-index.minimal.json +17 -17
  83. package/src/components/docs/generated/docs-index.mobile-demo-landing.json +41 -41
  84. package/src/components/docs/generated/docs-index.notifications.json +65 -65
  85. package/src/components/docs/generated/docs-index.openbanking-powens.json +9 -9
  86. package/src/components/docs/generated/docs-index.openbanking.json +65 -65
  87. package/src/components/docs/generated/docs-index.opencode-cli.json +17 -17
  88. package/src/components/docs/generated/docs-index.personalization.json +9 -9
  89. package/src/components/docs/generated/docs-index.platform-acp.json +137 -137
  90. package/src/components/docs/generated/docs-index.platform-agent.json +201 -201
  91. package/src/components/docs/generated/docs-index.platform-context.json +121 -121
  92. package/src/components/docs/generated/docs-index.platform-control-plane.json +321 -321
  93. package/src/components/docs/generated/docs-index.platform-database.json +89 -89
  94. package/src/components/docs/generated/docs-index.platform-docs.json +161 -161
  95. package/src/components/docs/generated/docs-index.platform-harness.json +177 -177
  96. package/src/components/docs/generated/docs-index.platform-integrations.json +329 -329
  97. package/src/components/docs/generated/docs-index.platform-knowledge.json +57 -57
  98. package/src/components/docs/generated/docs-index.platform-provider-ranking.json +217 -217
  99. package/src/components/docs/generated/docs-index.pocket-family-office.json +129 -129
  100. package/src/components/docs/generated/docs-index.policy-safe-knowledge-assistant.json +9 -9
  101. package/src/components/docs/generated/docs-index.product-intent.json +9 -9
  102. package/src/components/docs/generated/docs-index.project-management-sync.json +9 -9
  103. package/src/components/docs/generated/docs-index.saas-boilerplate.json +209 -209
  104. package/src/components/docs/generated/docs-index.service-business-os.json +193 -193
  105. package/src/components/docs/generated/docs-index.team-hub.json +185 -185
  106. package/src/components/docs/generated/docs-index.unknown.json +521 -521
  107. package/src/components/docs/generated/docs-index.versioned-knowledge-base.json +81 -81
  108. package/src/components/docs/generated/docs-index.video-api-showcase.json +33 -33
  109. package/src/components/docs/generated/docs-index.video-docs-terminal.json +9 -9
  110. package/src/components/docs/generated/docs-index.video-marketing-clip.json +9 -9
  111. package/src/components/docs/generated/docs-index.visualization-showcase.json +17 -17
  112. package/src/components/docs/generated/docs-index.voice-providers.json +9 -9
  113. package/src/components/docs/generated/docs-index.wealth-snapshot.json +153 -153
  114. package/src/components/docs/generated/docs-index.workflow-system.json +433 -433
  115. package/src/components/docs/generated/docs-index.workspace-cli.json +9 -9
  116. package/src/components/docs/guides/GuideContractDrivenFormsPage.content.ts +98 -0
  117. package/src/components/docs/guides/GuideContractDrivenFormsPage.tsx +143 -0
  118. package/src/components/docs/guides/GuideSpecValidationTypingPage.tsx +2 -2
  119. package/src/components/docs/guides/GuidesIndexPage.tsx +7 -0
  120. package/src/components/docs/guides/guides.docblocks.ts +12 -0
  121. package/src/components/docs/guides/index.ts +1 -0
  122. package/src/libs/posthog/client.ts +11 -9
@@ -1,10 +1,10 @@
1
1
  [
2
- {
3
- "id": "workspace-cli/workspace-cli",
4
- "title": "workspace-cli",
5
- "summary": "Core CLI operations for managing ContractSpec workspaces\n- **Type**: feature\n- **Version**: 1.0.0\n- **Stability**: stable\n- **Owners**: @lssm/core\n- **Tags**: cli, core\n- **File**: `packages/bundles/workspace/src/contracts/features/cli.feature.ts`",
6
- "route": "/docs/reference/workspace-cli/workspace-cli",
7
- "source": "generated",
8
- "contentPath": "workspace-cli/workspace-cli.md"
9
- }
10
- ]
2
+ {
3
+ "id": "workspace-cli/workspace-cli",
4
+ "title": "workspace-cli",
5
+ "summary": "Core CLI operations for managing ContractSpec workspaces\n- **Type**: feature\n- **Version**: 1.0.0\n- **Stability**: stable\n- **Owners**: @lssm/core\n- **Tags**: cli, core\n- **File**: `packages/bundles/workspace/src/contracts/features/cli.feature.ts`",
6
+ "route": "/docs/reference/workspace-cli/workspace-cli",
7
+ "source": "generated",
8
+ "contentPath": "workspace-cli/workspace-cli.md"
9
+ }
10
+ ]
@@ -0,0 +1,98 @@
1
+ export const leadCaptureFormCode = `import {
2
+ defineFormSpec,
3
+ FormRegistry,
4
+ responsiveFormColumns,
5
+ } from "@contractspec/lib.contracts-spec/forms";
6
+ import { fromZod } from "@contractspec/lib.schema";
7
+ import { z } from "zod";
8
+
9
+ const LeadCaptureModel = fromZod(
10
+ z.object({
11
+ fullName: z.string().min(1),
12
+ email: z.string().email(),
13
+ company: z.string().min(1),
14
+ intent: z.enum(["demo", "pricing", "pilot"]),
15
+ notes: z.string().max(1000).optional(),
16
+ newsletter: z.boolean().optional(),
17
+ }),
18
+ { name: "LeadCaptureModel" },
19
+ );
20
+
21
+ export const LeadCaptureForm = defineFormSpec({
22
+ meta: {
23
+ key: "marketing.lead.form",
24
+ version: "1.0.0",
25
+ title: "Lead capture form",
26
+ description: "Collect qualified OSS and Studio leads.",
27
+ domain: "marketing",
28
+ owners: ["@growth"],
29
+ tags: ["forms", "leads"],
30
+ stability: "experimental",
31
+ },
32
+ model: LeadCaptureModel,
33
+ layout: {
34
+ columns: responsiveFormColumns(2),
35
+ gap: "md",
36
+ flow: {
37
+ kind: "sections",
38
+ sections: [
39
+ { key: "identity", titleI18n: "Who you are", fieldNames: ["fullName", "email", "company"] },
40
+ { key: "request", titleI18n: "What you need", fieldNames: ["intent", "notes", "newsletter"] },
41
+ ],
42
+ },
43
+ },
44
+ fields: [
45
+ { kind: "text", name: "fullName", labelI18n: "Full name", required: true, autoComplete: "name" },
46
+ { kind: "email", name: "email", labelI18n: "Work email", required: true, autoComplete: "email" },
47
+ { kind: "text", name: "company", labelI18n: "Company", required: true, autoComplete: "organization" },
48
+ {
49
+ kind: "select",
50
+ name: "intent",
51
+ labelI18n: "Primary goal",
52
+ required: true,
53
+ options: [
54
+ { labelI18n: "Book a demo", value: "demo" },
55
+ { labelI18n: "Understand pricing", value: "pricing" },
56
+ { labelI18n: "Plan a pilot", value: "pilot" },
57
+ ],
58
+ },
59
+ { kind: "textarea", name: "notes", labelI18n: "Context", rows: 4, layout: { colSpan: "full" } },
60
+ { kind: "checkbox", name: "newsletter", labelI18n: "Send product updates" },
61
+ ],
62
+ actions: [{ key: "submit", labelI18n: "Send request", op: { name: "lead.create", version: "1.0.0" } }],
63
+ policy: { flags: ["lead-capture"], pii: ["fullName", "email", "company", "notes"] },
64
+ renderHints: { ui: "shadcn", form: "react-hook-form" },
65
+ });
66
+
67
+ export const formRegistry = new FormRegistry().register(LeadCaptureForm);`;
68
+
69
+ export const leadCapturePanelCode = `"use client";
70
+
71
+ import { formRenderer } from "@contractspec/lib.design-system/renderers/form-contract";
72
+ import { LeadCaptureForm } from "../contracts/forms/lead-capture.form";
73
+
74
+ export function LeadCapturePanel() {
75
+ return formRenderer.render(LeadCaptureForm, {
76
+ defaultValues: { newsletter: true },
77
+ overrides: {
78
+ onSubmitOverride: async (values, actionKey) => {
79
+ await fetch("/api/leads", {
80
+ method: "POST",
81
+ headers: { "content-type": "application/json" },
82
+ body: JSON.stringify({ actionKey, values }),
83
+ });
84
+ },
85
+ },
86
+ });
87
+ }`;
88
+
89
+ export const formShowcaseTemplateCode = `bun add @contractspec/example.form-showcase
90
+
91
+ # Full form-only example docs
92
+ open https://www.contractspec.io/docs/examples/form-showcase
93
+
94
+ # Template catalog filtered to forms
95
+ open https://www.contractspec.io/templates?tag=forms
96
+
97
+ # Sandbox spec preview
98
+ open https://www.contractspec.io/sandbox?template=form-showcase`;
@@ -0,0 +1,143 @@
1
+ import { CodeBlock } from '@contractspec/lib.design-system';
2
+ import { HStack, VStack } from '@contractspec/lib.design-system/layout';
3
+ import { List, ListItem } from '@contractspec/lib.design-system/list';
4
+ import {
5
+ Code,
6
+ H1,
7
+ H2,
8
+ H3,
9
+ P,
10
+ Text,
11
+ } from '@contractspec/lib.design-system/typography';
12
+ import Link from '@contractspec/lib.ui-link';
13
+ import { ChevronRight } from 'lucide-react';
14
+ import { StudioPrompt } from '../shared/StudioPrompt';
15
+ import {
16
+ formShowcaseTemplateCode,
17
+ leadCaptureFormCode,
18
+ leadCapturePanelCode,
19
+ } from './GuideContractDrivenFormsPage.content';
20
+
21
+ export function GuideContractDrivenFormsPage() {
22
+ return (
23
+ <VStack className="space-y-8">
24
+ <VStack className="space-y-3">
25
+ <H1 className="font-bold text-4xl">Build a contract-driven form</H1>
26
+ <P className="text-lg text-muted-foreground">
27
+ Define form data, fields, layout, policy, and submit behavior once,
28
+ then let your app render from the same ContractSpec surface.
29
+ </P>
30
+ </VStack>
31
+
32
+ <VStack className="card-subtle space-y-4 p-6">
33
+ <H2 className="font-bold text-2xl">What you'll build</H2>
34
+ <List className="space-y-2 text-muted-foreground text-sm">
35
+ <ListItem>
36
+ <Text>A schema-backed FormSpec for a lead capture form.</Text>
37
+ </ListItem>
38
+ <ListItem>
39
+ <Text>
40
+ A FormRegistry that exposes the latest version by stable key.
41
+ </Text>
42
+ </ListItem>
43
+ <ListItem>
44
+ <Text>
45
+ A React renderer that keeps UI, validation, and policy aligned.
46
+ </Text>
47
+ </ListItem>
48
+ </List>
49
+ </VStack>
50
+
51
+ <VStack className="space-y-6">
52
+ <VStack className="space-y-3">
53
+ <H2 className="font-bold text-2xl">1) Define the form spec</H2>
54
+ <P className="text-muted-foreground text-sm">
55
+ Create <Code>src/contracts/forms/lead-capture.form.ts</Code>:
56
+ </P>
57
+ <CodeBlock
58
+ language="typescript"
59
+ filename="src/contracts/forms/lead-capture.form.ts"
60
+ code={leadCaptureFormCode}
61
+ />
62
+ </VStack>
63
+
64
+ <VStack className="card-subtle space-y-3 p-6">
65
+ <H3 className="font-semibold text-lg">Need every form field?</H3>
66
+ <P className="text-muted-foreground text-sm">
67
+ Start from the{' '}
68
+ <Link href="/docs/examples/form-showcase">
69
+ Form Showcase example
70
+ </Link>{' '}
71
+ or the{' '}
72
+ <Link href="/templates?tag=forms">form template catalog</Link>. It
73
+ is focused only on forms and covers field kinds, section layouts,
74
+ step layouts, arrays, groups, conditionals, and validation hints.
75
+ </P>
76
+ <CodeBlock
77
+ language="bash"
78
+ filename="form-showcase-template"
79
+ code={formShowcaseTemplateCode}
80
+ />
81
+ </VStack>
82
+
83
+ <VStack className="space-y-3">
84
+ <H2 className="font-bold text-2xl">2) Render from the contract</H2>
85
+ <P className="text-muted-foreground text-sm">
86
+ Use the shared renderer, or provide your own driver if your app uses
87
+ a different component library.
88
+ </P>
89
+ <CodeBlock
90
+ language="tsx"
91
+ filename="src/components/LeadCapturePanel.tsx"
92
+ code={leadCapturePanelCode}
93
+ />
94
+ </VStack>
95
+
96
+ <VStack className="space-y-3">
97
+ <H2 className="font-bold text-2xl">3) Validate and evolve</H2>
98
+ <CodeBlock
99
+ language="bash"
100
+ filename="validate-form"
101
+ code={`contractspec validate src/contracts/forms/lead-capture.form.ts`}
102
+ />
103
+ <P className="text-muted-foreground text-sm">
104
+ Expected output: <Code>Validation passed</Code>. When the form
105
+ becomes public contract surface, version changes deliberately
106
+ instead of editing field meaning in place.
107
+ </P>
108
+ </VStack>
109
+
110
+ <VStack className="card-subtle space-y-3 p-6">
111
+ <H3 className="font-semibold text-lg">Repo tutorial</H3>
112
+ <P className="text-muted-foreground text-sm">
113
+ The repository guide adds the longer implementation checklist,
114
+ custom renderer notes, and rollout rules.
115
+ </P>
116
+ <CodeBlock
117
+ language="bash"
118
+ filename="repo-guide"
119
+ code={`open docs/tutorials/contract-driven-forms.md`}
120
+ />
121
+ </VStack>
122
+
123
+ <StudioPrompt
124
+ title="Need governed form changes?"
125
+ body="Studio can connect form edits to customer evidence, approval packets, and rollout checks before teams regenerate public surfaces."
126
+ />
127
+ </VStack>
128
+
129
+ <HStack className="flex items-center gap-4 pt-4">
130
+ <Link
131
+ href="/docs/guides/generate-docs-clients-schemas"
132
+ className="btn-primary"
133
+ >
134
+ <Text>Next: Generate docs + clients</Text>
135
+ <ChevronRight size={16} />
136
+ </Link>
137
+ <Link href="/docs/guides" className="btn-ghost">
138
+ <Text>Back to guides</Text>
139
+ </Link>
140
+ </HStack>
141
+ </VStack>
142
+ );
143
+ }
@@ -144,10 +144,10 @@ bun run validate`}
144
144
 
145
145
  <div className="flex items-center gap-4 pt-4">
146
146
  <Link
147
- href="/docs/guides/generate-docs-clients-schemas"
147
+ href="/docs/guides/contract-driven-forms"
148
148
  className="btn-primary"
149
149
  >
150
- Next: Generate docs + clients <ChevronRight size={16} />
150
+ Next: Contract-driven forms <ChevronRight size={16} />
151
151
  </Link>
152
152
  <Link href="/docs/guides" className="btn-ghost">
153
153
  Back to guides
@@ -24,6 +24,13 @@ const guides = [
24
24
  href: '/docs/guides/spec-validation-and-typing',
25
25
  time: '20 min',
26
26
  },
27
+ {
28
+ title: 'Build a contract-driven form',
29
+ description:
30
+ 'Use FormSpec to keep data shape, fields, layout, policy, and submit behavior aligned.',
31
+ href: '/docs/guides/contract-driven-forms',
32
+ time: '25 min',
33
+ },
27
34
  {
28
35
  title: 'Generate docs and clients',
29
36
  description:
@@ -37,6 +37,18 @@ Create a single OperationSpec, register it, and expose it through a Next.js App
37
37
  body: `# Spec-driven validation and typing
38
38
 
39
39
  Define command/query specs that enforce validation and generate types without rewriting your app.`,
40
+ },
41
+ {
42
+ id: 'docs.guides.contract-driven-forms',
43
+ title: 'Contract-driven forms',
44
+ summary: 'Define schema-backed FormSpec surfaces and render them safely.',
45
+ kind: 'usage',
46
+ visibility: 'public',
47
+ route: '/docs/guides/contract-driven-forms',
48
+ tags: ['guides', 'forms', 'ui'],
49
+ body: `# Build a contract-driven form
50
+
51
+ Define a FormSpec with model, fields, layout, policy, and actions, then render it through a shared or app-specific renderer.`,
40
52
  },
41
53
  {
42
54
  id: 'docs.guides.docs-clients-schemas',
@@ -2,6 +2,7 @@ import './guides.docblocks';
2
2
 
3
3
  export { GuideCIDiffGatingPage } from './GuideCIDiffGatingPage';
4
4
  export { GuideConnectInRepoPage } from './GuideConnectInRepoPage';
5
+ export { GuideContractDrivenFormsPage } from './GuideContractDrivenFormsPage';
5
6
  export { GuideContractTypesPage } from './GuideContractTypesPage';
6
7
  export { GuideDocsPipelinePage } from './GuideDocsPipelinePage';
7
8
  export { GuideFirstModuleBundlePage } from './GuideFirstModuleBundlePage';
@@ -29,25 +29,26 @@ const shouldCaptureAnalytics = () => {
29
29
  return dnt !== '1' && dnt !== 'yes';
30
30
  };
31
31
 
32
+ const isDevelopment = () => process.env.NODE_ENV === 'development';
33
+
32
34
  export function initPosthog() {
33
35
  if (typeof window === 'undefined') return;
36
+ if (isDevelopment()) return;
34
37
  if (!posthogKey) {
35
38
  console.warn('[PostHog] NEXT_PUBLIC_CONTRACTSPEC_POSTHOG_KEY is missing');
36
39
  return;
37
40
  }
38
41
  if (!shouldCaptureAnalytics()) return;
39
42
 
40
- const isDev = process.env.NODE_ENV === 'development';
41
-
42
43
  posthog.init(posthogKey, {
43
44
  api_host: posthogHost,
44
- autocapture: !isDev,
45
- capture_dead_clicks: !isDev,
46
- capture_performance: !isDev,
47
- capture_pageview: !isDev,
48
- capture_heatmaps: !isDev,
49
- capture_exceptions: !isDev,
50
- debug: process.env.NODE_ENV === 'development',
45
+ autocapture: true,
46
+ capture_dead_clicks: true,
47
+ capture_performance: true,
48
+ capture_pageview: true,
49
+ capture_heatmaps: true,
50
+ capture_exceptions: true,
51
+ debug: false,
51
52
  });
52
53
  }
53
54
 
@@ -56,6 +57,7 @@ export function captureAnalyticsEvent(
56
57
  properties?: Record<string, unknown>
57
58
  ) {
58
59
  if (!posthogKey) return;
60
+ if (isDevelopment()) return;
59
61
  if (!shouldCaptureAnalytics()) return;
60
62
  try {
61
63
  const globalPosthog = (globalThis as { posthog?: PostHogInstance }).posthog;