@burdenoff/website-sdk 0.0.0-dev

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 (119) hide show
  1. package/LICENSE +24 -0
  2. package/README.md +357 -0
  3. package/dist/analytics/index.d.mts +27 -0
  4. package/dist/analytics/index.d.ts +27 -0
  5. package/dist/analytics/index.js +36 -0
  6. package/dist/analytics/index.js.map +1 -0
  7. package/dist/analytics/index.mjs +34 -0
  8. package/dist/analytics/index.mjs.map +1 -0
  9. package/dist/client/index.d.mts +29 -0
  10. package/dist/client/index.d.ts +29 -0
  11. package/dist/client/index.js +261 -0
  12. package/dist/client/index.js.map +1 -0
  13. package/dist/client/index.mjs +255 -0
  14. package/dist/client/index.mjs.map +1 -0
  15. package/dist/components/contact.d.mts +144 -0
  16. package/dist/components/contact.d.ts +144 -0
  17. package/dist/components/contact.js +806 -0
  18. package/dist/components/contact.js.map +1 -0
  19. package/dist/components/contact.mjs +780 -0
  20. package/dist/components/contact.mjs.map +1 -0
  21. package/dist/components/electron-download.d.mts +32 -0
  22. package/dist/components/electron-download.d.ts +32 -0
  23. package/dist/components/electron-download.js +131 -0
  24. package/dist/components/electron-download.js.map +1 -0
  25. package/dist/components/electron-download.mjs +108 -0
  26. package/dist/components/electron-download.mjs.map +1 -0
  27. package/dist/components/launch-countdown.d.mts +15 -0
  28. package/dist/components/launch-countdown.d.ts +15 -0
  29. package/dist/components/launch-countdown.js +89 -0
  30. package/dist/components/launch-countdown.js.map +1 -0
  31. package/dist/components/launch-countdown.mjs +87 -0
  32. package/dist/components/launch-countdown.mjs.map +1 -0
  33. package/dist/components/newsletter.d.mts +155 -0
  34. package/dist/components/newsletter.d.ts +155 -0
  35. package/dist/components/newsletter.js +880 -0
  36. package/dist/components/newsletter.js.map +1 -0
  37. package/dist/components/newsletter.mjs +854 -0
  38. package/dist/components/newsletter.mjs.map +1 -0
  39. package/dist/components/partners.d.mts +88 -0
  40. package/dist/components/partners.d.ts +88 -0
  41. package/dist/components/partners.js +1169 -0
  42. package/dist/components/partners.js.map +1 -0
  43. package/dist/components/partners.mjs +1143 -0
  44. package/dist/components/partners.mjs.map +1 -0
  45. package/dist/components/pricing.d.mts +194 -0
  46. package/dist/components/pricing.d.ts +194 -0
  47. package/dist/components/pricing.js +813 -0
  48. package/dist/components/pricing.js.map +1 -0
  49. package/dist/components/pricing.mjs +791 -0
  50. package/dist/components/pricing.mjs.map +1 -0
  51. package/dist/components/problems-solved.d.mts +37 -0
  52. package/dist/components/problems-solved.d.ts +37 -0
  53. package/dist/components/problems-solved.js +157 -0
  54. package/dist/components/problems-solved.js.map +1 -0
  55. package/dist/components/problems-solved.mjs +135 -0
  56. package/dist/components/problems-solved.mjs.map +1 -0
  57. package/dist/components/resource-links.d.mts +28 -0
  58. package/dist/components/resource-links.d.ts +28 -0
  59. package/dist/components/resource-links.js +229 -0
  60. package/dist/components/resource-links.js.map +1 -0
  61. package/dist/components/resource-links.mjs +227 -0
  62. package/dist/components/resource-links.mjs.map +1 -0
  63. package/dist/components/social-links.d.mts +37 -0
  64. package/dist/components/social-links.d.ts +37 -0
  65. package/dist/components/social-links.js +268 -0
  66. package/dist/components/social-links.js.map +1 -0
  67. package/dist/components/social-links.mjs +266 -0
  68. package/dist/components/social-links.mjs.map +1 -0
  69. package/dist/components/unsubscribe.d.mts +14 -0
  70. package/dist/components/unsubscribe.d.ts +14 -0
  71. package/dist/components/unsubscribe.js +538 -0
  72. package/dist/components/unsubscribe.js.map +1 -0
  73. package/dist/components/unsubscribe.mjs +517 -0
  74. package/dist/components/unsubscribe.mjs.map +1 -0
  75. package/dist/components/waitlist.d.mts +70 -0
  76. package/dist/components/waitlist.d.ts +70 -0
  77. package/dist/components/waitlist.js +864 -0
  78. package/dist/components/waitlist.js.map +1 -0
  79. package/dist/components/waitlist.mjs +841 -0
  80. package/dist/components/waitlist.mjs.map +1 -0
  81. package/dist/components/website-switcher.d.mts +27 -0
  82. package/dist/components/website-switcher.d.ts +27 -0
  83. package/dist/components/website-switcher.js +168 -0
  84. package/dist/components/website-switcher.js.map +1 -0
  85. package/dist/components/website-switcher.mjs +146 -0
  86. package/dist/components/website-switcher.mjs.map +1 -0
  87. package/dist/content/index.d.mts +247 -0
  88. package/dist/content/index.d.ts +247 -0
  89. package/dist/content/index.js +2458 -0
  90. package/dist/content/index.js.map +1 -0
  91. package/dist/content/index.mjs +2428 -0
  92. package/dist/content/index.mjs.map +1 -0
  93. package/dist/index.d.mts +72 -0
  94. package/dist/index.d.ts +72 -0
  95. package/dist/index.js +6273 -0
  96. package/dist/index.js.map +1 -0
  97. package/dist/index.mjs +6204 -0
  98. package/dist/index.mjs.map +1 -0
  99. package/dist/product/index.d.mts +94 -0
  100. package/dist/product/index.d.ts +94 -0
  101. package/dist/product/index.js +282 -0
  102. package/dist/product/index.js.map +1 -0
  103. package/dist/product/index.mjs +278 -0
  104. package/dist/product/index.mjs.map +1 -0
  105. package/dist/provider-D7Rij9UM.d.mts +86 -0
  106. package/dist/provider-D7Rij9UM.d.ts +86 -0
  107. package/dist/seo/index.d.mts +64 -0
  108. package/dist/seo/index.d.ts +64 -0
  109. package/dist/seo/index.js +61 -0
  110. package/dist/seo/index.js.map +1 -0
  111. package/dist/seo/index.mjs +59 -0
  112. package/dist/seo/index.mjs.map +1 -0
  113. package/dist/utils/index.d.mts +21 -0
  114. package/dist/utils/index.d.ts +21 -0
  115. package/dist/utils/index.js +12 -0
  116. package/dist/utils/index.js.map +1 -0
  117. package/dist/utils/index.mjs +10 -0
  118. package/dist/utils/index.mjs.map +1 -0
  119. package/package.json +168 -0
@@ -0,0 +1,144 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ /**
4
+ * Contact Page Component
5
+ * Complete contact page with form submission via GraphQL, reCAPTCHA validation,
6
+ * contact information display, and additional contact options.
7
+ * Uses the WebSDKClient provider for API calls.
8
+ *
9
+ * @example
10
+ * ```tsx
11
+ * import { ContactPage } from '@burdenoff/website-sdk/components/contact'
12
+ *
13
+ * <ContactPage
14
+ * productName="MyProduct"
15
+ * recaptchaSiteKey="your-recaptcha-key"
16
+ * contactEmail="contact@myproduct.com"
17
+ * contactPhone="+1-234-567-8900"
18
+ * officeAddress={{
19
+ * line1: "123 Main St",
20
+ * line2: "Suite 100",
21
+ * line3: "City, State 12345",
22
+ * country: "USA"
23
+ * }}
24
+ * />
25
+ * ```
26
+ */
27
+ interface OfficeAddress {
28
+ line1: string;
29
+ line2: string;
30
+ line3: string;
31
+ country: string;
32
+ }
33
+ interface ContactOption {
34
+ title: string;
35
+ description: string;
36
+ buttonText: string;
37
+ buttonLink: string;
38
+ }
39
+ /**
40
+ * One entry in the contact-form Category dropdown. Each product website
41
+ * supplies its own allow-list via the `categories` prop so the
42
+ * vocabulary stays product-appropriate (e.g. VibeControls uses
43
+ * `plugin-developer`, a manufacturing site uses `dealer`). The backend
44
+ * accepts whatever `value` string is sent and persists it directly.
45
+ *
46
+ * `value` flows to the backend; `label` is what the user sees.
47
+ */
48
+ interface ContactCategory {
49
+ /** Stored on the server. Short, kebab-case is conventional. */
50
+ value: string;
51
+ /** Human-readable label shown in the dropdown. */
52
+ label: string;
53
+ }
54
+ /**
55
+ * Conservative starter category list — Burdenoff-generic vocabulary
56
+ * (General / Sales / Support / Partnership / Press / Careers / Security).
57
+ *
58
+ * **Not** applied by default: pass it explicitly to opt in:
59
+ *
60
+ * ```tsx
61
+ * <ContactPage
62
+ * …
63
+ * categories={DEFAULT_CONTACT_CATEGORIES}
64
+ * />
65
+ * ```
66
+ *
67
+ * The component default for `categories` is `[]` (no dropdown) so this
68
+ * SDK release is backward-compatible with existing consumers that
69
+ * don't yet know about the field — see the prop docs.
70
+ */
71
+ declare const DEFAULT_CONTACT_CATEGORIES: ContactCategory[];
72
+ interface ContactPageProps {
73
+ /** Product name. Falls back to SDK config productId if not provided. */
74
+ productName?: string;
75
+ /** reCAPTCHA site key (optional, falls back to SDK config) */
76
+ recaptchaSiteKey?: string;
77
+ /** Contact email */
78
+ contactEmail: string;
79
+ /** Contact phone number */
80
+ contactPhone: string;
81
+ /** Office address */
82
+ officeAddress: OfficeAddress;
83
+ /** Response time message */
84
+ responseTime?: string;
85
+ /** Hero title */
86
+ heroTitle?: string;
87
+ /** Hero description */
88
+ heroDescription?: string;
89
+ /**
90
+ * Heading level for the hero title. Defaults to `1` (a full page hero,
91
+ * `<h1>`). Pass `2` when embedding ContactPage inside another page that
92
+ * already owns the page `<h1>` (e.g. `PartnersPage`) — renders a compact
93
+ * `<h2>` section header instead of a competing hero, keeping one `<h1>`
94
+ * per page for SEO and a clean visual hierarchy.
95
+ */
96
+ headingLevel?: 1 | 2;
97
+ /** Additional contact options */
98
+ additionalOptions?: ContactOption[];
99
+ /**
100
+ * Inquiry-type dropdown allow-list. **Defaults to `[]`** — the
101
+ * dropdown does not render unless the consumer explicitly opts in.
102
+ *
103
+ * Two ways to opt in:
104
+ *
105
+ * ```tsx
106
+ * // 1. Provide a product-specific list
107
+ * <ContactPage categories={[{ value: 'sales', label: 'Sales' }, …]} />
108
+ *
109
+ * // 2. Or use the conservative SDK starter list
110
+ * <ContactPage categories={DEFAULT_CONTACT_CATEGORIES} />
111
+ * ```
112
+ *
113
+ * Default is intentionally empty (not `DEFAULT_CONTACT_CATEGORIES`)
114
+ * to keep this SDK release backward-compatible with existing
115
+ * consumers that don't yet wire `categories` — they get zero
116
+ * behavior change.
117
+ *
118
+ * Typed `readonly` because the component never mutates the array;
119
+ * lets product sites pass an `as const`-frozen config without an
120
+ * extra `[...spread]` at the call site.
121
+ */
122
+ categories?: readonly ContactCategory[];
123
+ /** Label shown above the category dropdown. */
124
+ categoryLabel?: string;
125
+ /** Placeholder text for the unselected state of the dropdown. */
126
+ categoryPlaceholder?: string;
127
+ /**
128
+ * Whether selecting a category is required to submit. Defaults to
129
+ * `true` — the whole point of the dropdown is routing, so users
130
+ * self-triage instead of pushing that work onto support.
131
+ */
132
+ categoryRequired?: boolean;
133
+ /** SEO metadata */
134
+ seo?: {
135
+ title?: string;
136
+ description?: string;
137
+ keywords?: string;
138
+ image?: string;
139
+ url?: string;
140
+ };
141
+ }
142
+ declare function ContactPage({ productName, recaptchaSiteKey, contactEmail, contactPhone, officeAddress, responseTime, heroTitle, heroDescription, headingLevel, categories, categoryLabel, categoryPlaceholder, categoryRequired, additionalOptions, seo, }: ContactPageProps): react_jsx_runtime.JSX.Element;
143
+
144
+ export { type ContactCategory, ContactPage, type ContactPageProps, DEFAULT_CONTACT_CATEGORIES };
@@ -0,0 +1,144 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ /**
4
+ * Contact Page Component
5
+ * Complete contact page with form submission via GraphQL, reCAPTCHA validation,
6
+ * contact information display, and additional contact options.
7
+ * Uses the WebSDKClient provider for API calls.
8
+ *
9
+ * @example
10
+ * ```tsx
11
+ * import { ContactPage } from '@burdenoff/website-sdk/components/contact'
12
+ *
13
+ * <ContactPage
14
+ * productName="MyProduct"
15
+ * recaptchaSiteKey="your-recaptcha-key"
16
+ * contactEmail="contact@myproduct.com"
17
+ * contactPhone="+1-234-567-8900"
18
+ * officeAddress={{
19
+ * line1: "123 Main St",
20
+ * line2: "Suite 100",
21
+ * line3: "City, State 12345",
22
+ * country: "USA"
23
+ * }}
24
+ * />
25
+ * ```
26
+ */
27
+ interface OfficeAddress {
28
+ line1: string;
29
+ line2: string;
30
+ line3: string;
31
+ country: string;
32
+ }
33
+ interface ContactOption {
34
+ title: string;
35
+ description: string;
36
+ buttonText: string;
37
+ buttonLink: string;
38
+ }
39
+ /**
40
+ * One entry in the contact-form Category dropdown. Each product website
41
+ * supplies its own allow-list via the `categories` prop so the
42
+ * vocabulary stays product-appropriate (e.g. VibeControls uses
43
+ * `plugin-developer`, a manufacturing site uses `dealer`). The backend
44
+ * accepts whatever `value` string is sent and persists it directly.
45
+ *
46
+ * `value` flows to the backend; `label` is what the user sees.
47
+ */
48
+ interface ContactCategory {
49
+ /** Stored on the server. Short, kebab-case is conventional. */
50
+ value: string;
51
+ /** Human-readable label shown in the dropdown. */
52
+ label: string;
53
+ }
54
+ /**
55
+ * Conservative starter category list — Burdenoff-generic vocabulary
56
+ * (General / Sales / Support / Partnership / Press / Careers / Security).
57
+ *
58
+ * **Not** applied by default: pass it explicitly to opt in:
59
+ *
60
+ * ```tsx
61
+ * <ContactPage
62
+ * …
63
+ * categories={DEFAULT_CONTACT_CATEGORIES}
64
+ * />
65
+ * ```
66
+ *
67
+ * The component default for `categories` is `[]` (no dropdown) so this
68
+ * SDK release is backward-compatible with existing consumers that
69
+ * don't yet know about the field — see the prop docs.
70
+ */
71
+ declare const DEFAULT_CONTACT_CATEGORIES: ContactCategory[];
72
+ interface ContactPageProps {
73
+ /** Product name. Falls back to SDK config productId if not provided. */
74
+ productName?: string;
75
+ /** reCAPTCHA site key (optional, falls back to SDK config) */
76
+ recaptchaSiteKey?: string;
77
+ /** Contact email */
78
+ contactEmail: string;
79
+ /** Contact phone number */
80
+ contactPhone: string;
81
+ /** Office address */
82
+ officeAddress: OfficeAddress;
83
+ /** Response time message */
84
+ responseTime?: string;
85
+ /** Hero title */
86
+ heroTitle?: string;
87
+ /** Hero description */
88
+ heroDescription?: string;
89
+ /**
90
+ * Heading level for the hero title. Defaults to `1` (a full page hero,
91
+ * `<h1>`). Pass `2` when embedding ContactPage inside another page that
92
+ * already owns the page `<h1>` (e.g. `PartnersPage`) — renders a compact
93
+ * `<h2>` section header instead of a competing hero, keeping one `<h1>`
94
+ * per page for SEO and a clean visual hierarchy.
95
+ */
96
+ headingLevel?: 1 | 2;
97
+ /** Additional contact options */
98
+ additionalOptions?: ContactOption[];
99
+ /**
100
+ * Inquiry-type dropdown allow-list. **Defaults to `[]`** — the
101
+ * dropdown does not render unless the consumer explicitly opts in.
102
+ *
103
+ * Two ways to opt in:
104
+ *
105
+ * ```tsx
106
+ * // 1. Provide a product-specific list
107
+ * <ContactPage categories={[{ value: 'sales', label: 'Sales' }, …]} />
108
+ *
109
+ * // 2. Or use the conservative SDK starter list
110
+ * <ContactPage categories={DEFAULT_CONTACT_CATEGORIES} />
111
+ * ```
112
+ *
113
+ * Default is intentionally empty (not `DEFAULT_CONTACT_CATEGORIES`)
114
+ * to keep this SDK release backward-compatible with existing
115
+ * consumers that don't yet wire `categories` — they get zero
116
+ * behavior change.
117
+ *
118
+ * Typed `readonly` because the component never mutates the array;
119
+ * lets product sites pass an `as const`-frozen config without an
120
+ * extra `[...spread]` at the call site.
121
+ */
122
+ categories?: readonly ContactCategory[];
123
+ /** Label shown above the category dropdown. */
124
+ categoryLabel?: string;
125
+ /** Placeholder text for the unselected state of the dropdown. */
126
+ categoryPlaceholder?: string;
127
+ /**
128
+ * Whether selecting a category is required to submit. Defaults to
129
+ * `true` — the whole point of the dropdown is routing, so users
130
+ * self-triage instead of pushing that work onto support.
131
+ */
132
+ categoryRequired?: boolean;
133
+ /** SEO metadata */
134
+ seo?: {
135
+ title?: string;
136
+ description?: string;
137
+ keywords?: string;
138
+ image?: string;
139
+ url?: string;
140
+ };
141
+ }
142
+ declare function ContactPage({ productName, recaptchaSiteKey, contactEmail, contactPhone, officeAddress, responseTime, heroTitle, heroDescription, headingLevel, categories, categoryLabel, categoryPlaceholder, categoryRequired, additionalOptions, seo, }: ContactPageProps): react_jsx_runtime.JSX.Element;
143
+
144
+ export { type ContactCategory, ContactPage, type ContactPageProps, DEFAULT_CONTACT_CATEGORIES };