@flamingo-stack/openframe-frontend-core 0.0.672 → 0.0.673-2406.7239.1
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/{chunk-YNGAJGYB.cjs → chunk-6LWIJJJ6.cjs} +410 -6
- package/dist/{chunk-3PVOF3IB.js.map → chunk-6LWIJJJ6.cjs.map} +1 -1
- package/dist/{chunk-XLJNYTUW.cjs → chunk-6YSDCC3J.cjs} +56 -55
- package/dist/chunk-6YSDCC3J.cjs.map +1 -0
- package/dist/{chunk-GV7R2NTS.cjs → chunk-76DQOFZG.cjs} +23 -23
- package/dist/{chunk-GV7R2NTS.cjs.map → chunk-76DQOFZG.cjs.map} +1 -1
- package/dist/{chunk-UUOBCUHW.cjs → chunk-7ALCRUZ3.cjs} +3 -3
- package/dist/{chunk-UUOBCUHW.cjs.map → chunk-7ALCRUZ3.cjs.map} +1 -1
- package/dist/{chunk-PWPYCJ33.js → chunk-7RQZ2FTF.js} +2 -2
- package/dist/{chunk-XDTU23P4.js → chunk-ALSCESHG.js} +2 -2
- package/dist/{chunk-HVEX4BSC.cjs → chunk-AUQ4UITE.cjs} +60 -45
- package/dist/chunk-AUQ4UITE.cjs.map +1 -0
- package/dist/{chunk-CBCETEB4.cjs → chunk-E6B34U5Q.cjs} +6 -6
- package/dist/{chunk-CBCETEB4.cjs.map → chunk-E6B34U5Q.cjs.map} +1 -1
- package/dist/{chunk-H54F476P.cjs → chunk-FK3VSQ35.cjs} +3 -3
- package/dist/{chunk-H54F476P.cjs.map → chunk-FK3VSQ35.cjs.map} +1 -1
- package/dist/{chunk-HOEVEB7N.cjs → chunk-GCOVKIE7.cjs} +40 -29
- package/dist/chunk-GCOVKIE7.cjs.map +1 -0
- package/dist/{chunk-42OVTTOM.js → chunk-GIYAUKCY.js} +18 -3
- package/dist/{chunk-42OVTTOM.js.map → chunk-GIYAUKCY.js.map} +1 -1
- package/dist/{chunk-TQPKNG2E.js → chunk-INVZNRWB.js} +3 -3
- package/dist/{chunk-ZRIVCLPR.js → chunk-JD5TKRCU.js} +1 -1
- package/dist/chunk-JD5TKRCU.js.map +1 -0
- package/dist/{chunk-IBGHJLNT.js → chunk-JF4ZQZZJ.js} +2 -2
- package/dist/{chunk-SNWAN52K.cjs → chunk-JJDPSYBV.cjs} +3 -3
- package/dist/{chunk-SNWAN52K.cjs.map → chunk-JJDPSYBV.cjs.map} +1 -1
- package/dist/{chunk-D55IENZJ.cjs → chunk-LCMT2GZK.cjs} +1 -1
- package/dist/chunk-LCMT2GZK.cjs.map +1 -0
- package/dist/{chunk-AL4I5HHB.js → chunk-MMDGSGVE.js} +4 -4
- package/dist/{chunk-O5PYXQ6H.js → chunk-N3Q4FMMB.js} +3 -3
- package/dist/{chunk-RD3I5PBB.cjs → chunk-NUVRMZW5.cjs} +15 -15
- package/dist/{chunk-RD3I5PBB.cjs.map → chunk-NUVRMZW5.cjs.map} +1 -1
- package/dist/{chunk-T3KXCOB2.js → chunk-OIE6GKS3.js} +2 -2
- package/dist/{chunk-TFSGYKWG.js → chunk-OZL6FSB2.js} +28 -17
- package/dist/chunk-OZL6FSB2.js.map +1 -0
- package/dist/{chunk-NETIHUEY.cjs → chunk-P2A3KAYW.cjs} +10 -10
- package/dist/{chunk-NETIHUEY.cjs.map → chunk-P2A3KAYW.cjs.map} +1 -1
- package/dist/{chunk-6S2KLT7O.js → chunk-Q4KRZOQR.js} +4 -4
- package/dist/{chunk-BODMICIH.cjs → chunk-S7W7MTBM.cjs} +40 -40
- package/dist/{chunk-BODMICIH.cjs.map → chunk-S7W7MTBM.cjs.map} +1 -1
- package/dist/{chunk-3PVOF3IB.js → chunk-SGK4Q2W2.js} +407 -3
- package/dist/chunk-SGK4Q2W2.js.map +1 -0
- package/dist/{chunk-VZRVQEMT.cjs → chunk-SYTDEWZJ.cjs} +7 -7
- package/dist/{chunk-VZRVQEMT.cjs.map → chunk-SYTDEWZJ.cjs.map} +1 -1
- package/dist/{chunk-Z6E45TJM.js → chunk-TDCIGINK.js} +5 -5
- package/dist/{chunk-UOQRNZIB.cjs → chunk-TQATQ4CX.cjs} +17 -17
- package/dist/{chunk-UOQRNZIB.cjs.map → chunk-TQATQ4CX.cjs.map} +1 -1
- package/dist/{chunk-PSL2WBEO.cjs → chunk-TT6O7BUZ.cjs} +33 -33
- package/dist/{chunk-PSL2WBEO.cjs.map → chunk-TT6O7BUZ.cjs.map} +1 -1
- package/dist/{chunk-JREG4T6K.cjs → chunk-U7BJC4WF.cjs} +3 -3
- package/dist/{chunk-JREG4T6K.cjs.map → chunk-U7BJC4WF.cjs.map} +1 -1
- package/dist/{chunk-EKABOXNB.js → chunk-UIKMPCHW.js} +2 -2
- package/dist/{chunk-7KM34VWL.js → chunk-XMJT3QZ2.js} +3 -3
- package/dist/{chunk-4AZWVS7F.js → chunk-XSOL5ISO.js} +7 -6
- package/dist/{chunk-4AZWVS7F.js.map → chunk-XSOL5ISO.js.map} +1 -1
- package/dist/{chunk-KSBDARII.js → chunk-Y2ASYQ3P.js} +5 -5
- package/dist/components/case-studies/index.cjs +17 -14
- package/dist/components/case-studies/index.cjs.map +1 -1
- package/dist/components/case-studies/index.js +8 -5
- package/dist/components/case-studies/index.js.map +1 -1
- package/dist/components/case-studies/share-experience-section.d.ts.map +1 -1
- package/dist/components/contact/contact-form.d.ts +7 -1
- package/dist/components/contact/contact-form.d.ts.map +1 -1
- package/dist/components/contact/index.cjs +5 -5
- package/dist/components/contact/index.js +4 -4
- package/dist/components/docs/index.cjs +8 -8
- package/dist/components/docs/index.js +7 -7
- package/dist/components/embeds/index.cjs +5 -5
- package/dist/components/embeds/index.js +4 -4
- package/dist/components/faq/index.cjs +5 -5
- package/dist/components/faq/index.js +4 -4
- package/dist/components/features/index.cjs +4 -4
- package/dist/components/features/index.js +3 -3
- package/dist/components/features/waitlist-form.d.ts +7 -2
- package/dist/components/features/waitlist-form.d.ts.map +1 -1
- package/dist/components/help-center-pages/index.cjs +54 -52
- package/dist/components/help-center-pages/index.cjs.map +1 -1
- package/dist/components/help-center-pages/index.js +17 -15
- package/dist/components/help-center-pages/index.js.map +1 -1
- package/dist/components/help-center-pages/trust-center-sections.d.ts.map +1 -1
- package/dist/components/index.cjs +35 -35
- package/dist/components/index.js +14 -14
- package/dist/components/meeting-scheduler/booking-form.d.ts +7 -1
- package/dist/components/meeting-scheduler/booking-form.d.ts.map +1 -1
- package/dist/components/meeting-scheduler/index.cjs +53 -31
- package/dist/components/meeting-scheduler/index.cjs.map +1 -1
- package/dist/components/meeting-scheduler/index.d.ts +5 -1
- package/dist/components/meeting-scheduler/index.d.ts.map +1 -1
- package/dist/components/meeting-scheduler/index.js +31 -9
- package/dist/components/meeting-scheduler/index.js.map +1 -1
- package/dist/components/navigation/index.cjs +7 -7
- package/dist/components/navigation/index.js +6 -6
- package/dist/components/onboarding-guides/index.cjs +7 -7
- package/dist/components/onboarding-guides/index.js +6 -6
- package/dist/components/tickets/help-center-create-form.d.ts.map +1 -1
- package/dist/components/tickets/index.cjs +8 -8
- package/dist/components/tickets/index.js +7 -7
- package/dist/components/ui/index.cjs +4 -4
- package/dist/components/ui/index.js +3 -3
- package/dist/contexts/endpoints-runtime-context.d.ts +5 -0
- package/dist/contexts/endpoints-runtime-context.d.ts.map +1 -1
- package/dist/contexts/index.cjs +2 -2
- package/dist/contexts/index.js +1 -1
- package/dist/hooks/index.cjs +9 -3
- package/dist/hooks/index.cjs.map +1 -1
- package/dist/hooks/index.d.ts +2 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +8 -2
- package/dist/hooks/use-form-rescue.d.ts +43 -0
- package/dist/hooks/use-form-rescue.d.ts.map +1 -0
- package/dist/hooks/use-rescued-form.d.ts +28 -0
- package/dist/hooks/use-rescued-form.d.ts.map +1 -0
- package/dist/index.cjs +60 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +59 -7
- package/dist/index.js.map +1 -1
- package/dist/utils/form-rescue.cjs +142 -0
- package/dist/utils/form-rescue.cjs.map +1 -0
- package/dist/utils/form-rescue.d.ts +133 -0
- package/dist/utils/form-rescue.d.ts.map +1 -0
- package/dist/utils/form-rescue.js +118 -0
- package/dist/utils/form-rescue.js.map +1 -0
- package/dist/utils/index.cjs +138 -0
- package/dist/utils/index.cjs.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +116 -1
- package/dist/utils/index.js.map +1 -1
- package/package.json +7 -1
- package/src/components/case-studies/share-experience-section.tsx +2 -0
- package/src/components/contact/contact-form.tsx +33 -12
- package/src/components/features/waitlist-form.tsx +27 -2
- package/src/components/help-center-pages/trust-center-sections.tsx +2 -0
- package/src/components/meeting-scheduler/booking-form.tsx +30 -2
- package/src/components/meeting-scheduler/index.tsx +10 -1
- package/src/components/tickets/help-center-create-form.tsx +2 -0
- package/src/contexts/endpoints-runtime-context.tsx +5 -0
- package/src/hooks/__tests__/use-form-rescue.test.tsx +189 -0
- package/src/hooks/__tests__/use-rescued-form.test.tsx +91 -0
- package/src/hooks/index.ts +4 -0
- package/src/hooks/use-form-rescue.ts +330 -0
- package/src/hooks/use-rescued-form.ts +71 -0
- package/src/utils/__tests__/form-rescue.test.ts +124 -0
- package/src/utils/form-rescue.ts +237 -0
- package/src/utils/index.ts +5 -0
- package/dist/chunk-D55IENZJ.cjs.map +0 -1
- package/dist/chunk-HOEVEB7N.cjs.map +0 -1
- package/dist/chunk-HVEX4BSC.cjs.map +0 -1
- package/dist/chunk-TFSGYKWG.js.map +0 -1
- package/dist/chunk-XLJNYTUW.cjs.map +0 -1
- package/dist/chunk-YNGAJGYB.cjs.map +0 -1
- package/dist/chunk-ZRIVCLPR.js.map +0 -1
- /package/dist/{chunk-PWPYCJ33.js.map → chunk-7RQZ2FTF.js.map} +0 -0
- /package/dist/{chunk-XDTU23P4.js.map → chunk-ALSCESHG.js.map} +0 -0
- /package/dist/{chunk-TQPKNG2E.js.map → chunk-INVZNRWB.js.map} +0 -0
- /package/dist/{chunk-IBGHJLNT.js.map → chunk-JF4ZQZZJ.js.map} +0 -0
- /package/dist/{chunk-AL4I5HHB.js.map → chunk-MMDGSGVE.js.map} +0 -0
- /package/dist/{chunk-O5PYXQ6H.js.map → chunk-N3Q4FMMB.js.map} +0 -0
- /package/dist/{chunk-T3KXCOB2.js.map → chunk-OIE6GKS3.js.map} +0 -0
- /package/dist/{chunk-6S2KLT7O.js.map → chunk-Q4KRZOQR.js.map} +0 -0
- /package/dist/{chunk-Z6E45TJM.js.map → chunk-TDCIGINK.js.map} +0 -0
- /package/dist/{chunk-EKABOXNB.js.map → chunk-UIKMPCHW.js.map} +0 -0
- /package/dist/{chunk-7KM34VWL.js.map → chunk-XMJT3QZ2.js.map} +0 -0
- /package/dist/{chunk-KSBDARII.js.map → chunk-Y2ASYQ3P.js.map} +0 -0
|
@@ -3,16 +3,16 @@ import {
|
|
|
3
3
|
FileDownloadCard,
|
|
4
4
|
GoogleSheetsViewer,
|
|
5
5
|
PdfViewer
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-XMJT3QZ2.js";
|
|
7
7
|
import {
|
|
8
8
|
MobileNavigationDropdown,
|
|
9
9
|
MultiLevelNavigation,
|
|
10
10
|
StickySectionNav
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-OIE6GKS3.js";
|
|
12
12
|
import {
|
|
13
13
|
DocSearchBar,
|
|
14
14
|
useDocSearch
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-UIKMPCHW.js";
|
|
16
16
|
import {
|
|
17
17
|
CategorySidebarSkeleton,
|
|
18
18
|
DEFAULT_FOLDER_INDEX_FILE,
|
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
findDocNodeByPath,
|
|
23
23
|
getDocAncestorNodeIds,
|
|
24
24
|
stripFolderIndexFromPath
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-GIYAUKCY.js";
|
|
26
26
|
import {
|
|
27
27
|
contentFetch
|
|
28
28
|
} from "./chunk-MT5A25AX.js";
|
|
@@ -1069,4 +1069,4 @@ export {
|
|
|
1069
1069
|
EmbedSkeleton,
|
|
1070
1070
|
DocsHubPage
|
|
1071
1071
|
};
|
|
1072
|
-
//# sourceMappingURL=chunk-
|
|
1072
|
+
//# sourceMappingURL=chunk-Y2ASYQ3P.js.map
|
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var _chunkGCOVKIE7cjs = require('../../chunk-GCOVKIE7.cjs');
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
var
|
|
11
|
+
var _chunkAUQ4UITEcjs = require('../../chunk-AUQ4UITE.cjs');
|
|
12
12
|
require('../../chunk-GQWM3ECA.cjs');
|
|
13
13
|
require('../../chunk-TON3YCCW.cjs');
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
var _chunk6LWIJJJ6cjs = require('../../chunk-6LWIJJJ6.cjs');
|
|
17
|
+
require('../../chunk-LCMT2GZK.cjs');
|
|
16
18
|
require('../../chunk-JU6SBF3C.cjs');
|
|
17
19
|
require('../../chunk-VTYP25OW.cjs');
|
|
18
20
|
require('../../chunk-QVSVRG7I.cjs');
|
|
@@ -70,7 +72,8 @@ var DEFAULT_CONTACT_FORM_PROPS = {
|
|
|
70
72
|
noPadding: true,
|
|
71
73
|
buttonVariant: "outline",
|
|
72
74
|
buttonClassName: "w-full",
|
|
73
|
-
successToastMessage: "Thank you! We'll reach out to schedule your case study."
|
|
75
|
+
successToastMessage: "Thank you! We'll reach out to schedule your case study.",
|
|
76
|
+
rescue: _chunk6LWIJJJ6cjs.RESCUE_FORMS.caseStudyPitch
|
|
74
77
|
};
|
|
75
78
|
function ShareExperienceSection({
|
|
76
79
|
title = DEFAULT_TITLE,
|
|
@@ -90,9 +93,9 @@ function ShareExperienceSection({
|
|
|
90
93
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h3", { className: "text-h2", children: howItWorksTitle }),
|
|
91
94
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-h4", children: howItWorksBody })
|
|
92
95
|
] }),
|
|
93
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
96
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkAUQ4UITEcjs.BenefitCardGrid, { columns: 4, children: [
|
|
94
97
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
95
|
-
|
|
98
|
+
_chunkAUQ4UITEcjs.BenefitCard,
|
|
96
99
|
{
|
|
97
100
|
icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex h-12 w-12 items-center justify-center rounded-md border border-ods-border bg-ods-bg p-2", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk5R4QMTMLcjs.G2Icon, { width: 24, height: 24 }) }),
|
|
98
101
|
title: "G2",
|
|
@@ -101,7 +104,7 @@ function ShareExperienceSection({
|
|
|
101
104
|
}
|
|
102
105
|
),
|
|
103
106
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
104
|
-
|
|
107
|
+
_chunkAUQ4UITEcjs.BenefitCard,
|
|
105
108
|
{
|
|
106
109
|
icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex h-12 w-12 items-center justify-center rounded-md border border-ods-border bg-ods-bg p-2", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk5R4QMTMLcjs.CapterraIcon, { width: 24, height: 24 }) }),
|
|
107
110
|
title: "Capterra",
|
|
@@ -110,7 +113,7 @@ function ShareExperienceSection({
|
|
|
110
113
|
}
|
|
111
114
|
),
|
|
112
115
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
113
|
-
|
|
116
|
+
_chunkAUQ4UITEcjs.BenefitCard,
|
|
114
117
|
{
|
|
115
118
|
icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex h-12 w-12 items-center justify-center rounded-md border border-ods-border bg-ods-bg p-2", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk5R4QMTMLcjs.TrustpilotIcon, { width: 24, height: 24 }) }),
|
|
116
119
|
title: "TrustPilot",
|
|
@@ -119,7 +122,7 @@ function ShareExperienceSection({
|
|
|
119
122
|
}
|
|
120
123
|
),
|
|
121
124
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
122
|
-
|
|
125
|
+
_chunkAUQ4UITEcjs.BenefitCard,
|
|
123
126
|
{
|
|
124
127
|
icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex h-12 w-12 items-center justify-center rounded-md border border-ods-border bg-ods-bg p-2", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk5R4QMTMLcjs.GetAppIcon, { width: 24, height: 24 }) }),
|
|
125
128
|
title: "GetApp",
|
|
@@ -128,7 +131,7 @@ function ShareExperienceSection({
|
|
|
128
131
|
}
|
|
129
132
|
)
|
|
130
133
|
] }),
|
|
131
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
134
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkGCOVKIE7cjs.ContactForm, { ...DEFAULT_CONTACT_FORM_PROPS, ...contactFormProps })
|
|
132
135
|
] }) })
|
|
133
136
|
] });
|
|
134
137
|
}
|
|
@@ -138,10 +141,10 @@ function ShareExperienceSection({
|
|
|
138
141
|
function EntityQuotesPanel({ quotes, className }) {
|
|
139
142
|
if (!quotes || quotes.length === 0) return null;
|
|
140
143
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
141
|
-
|
|
144
|
+
_chunkAUQ4UITEcjs.StackedRowsPanel,
|
|
142
145
|
{
|
|
143
146
|
className,
|
|
144
|
-
title: `${
|
|
147
|
+
title: `${_chunkAUQ4UITEcjs.ENTITY_QUOTES_TITLE} \xB7 ${quotes.length}`,
|
|
145
148
|
rows: quotes.map((q) => ({
|
|
146
149
|
id: q.key,
|
|
147
150
|
columns: [
|
|
@@ -182,7 +185,7 @@ function QuoteCardsStrip({ quotes, className }) {
|
|
|
182
185
|
onPointerLeave: ctx.isTouch ? void 0 : () => ctx.onDeactivate(ctx.cardKey),
|
|
183
186
|
className: "relative shrink-0 rounded-md border-ods-border bg-ods-card p-[var(--spacing-system-sf)] shadow-none hover:border-ods-border-hover",
|
|
184
187
|
children: [
|
|
185
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
188
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkAUQ4UITEcjs.PersonCell, { size: "lg", name: `"${quote.text}"`, secondary: quote.attribution, avatarUrl: quote.logoUrl }),
|
|
186
189
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk3UDBK2YGcjs.CardHitLayer, { href: quote.href, label: `${quote.text}, ${quote.attribution}`, decorative: ctx.isClone })
|
|
187
190
|
]
|
|
188
191
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/components/case-studies/index.cjs","../../../src/components/case-studies/share-experience-section.tsx","../../../src/components/case-studies/entity-quotes-panel.tsx","../../../src/components/case-studies/quote-cards-strip.tsx"],"names":["jsx","jsxs"],"mappings":"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","file":"/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/components/case-studies/index.cjs","sourcesContent":[null,"'use client';\n\nimport type React from 'react';\nimport { ContactForm, type ContactFormProps } from '../contact';\nimport { G2Icon, CapterraIcon, TrustpilotIcon, GetAppIcon } from '../icons';\nimport { BenefitCard, BenefitCardGrid } from '../ui';\n\n/**\n * `<ShareExperienceSection>` — the case-studies \"Share Your Experience\"\n * CTA block.\n *\n * Hub usage: rendered inside the unified case-studies chrome (between\n * the search bar and the case-study card grid) so it stays at the same\n * y-offset + gutters as the rest of the page content.\n *\n * Embedders mount this anywhere they like. The inner `<ContactForm>`\n * submits through the AMBIENT `EndpointsRuntime.contactUrl` (same proxy\n * seam every other embed-aware form uses), so embedders behind a\n * `/content` reverse proxy get a working submission with no per-call-\n * site wiring.\n *\n * **Copy is overridable.** Every string is a prop with a sensible\n * \"Flamingo case-studies\" default so the hub keeps its existing copy\n * verbatim; embedders override what they need.\n *\n * **Contact-form integration is configurable.** Hub auto-resolves\n * `userId` / `helpCategoryOptions` / `rdtCid` / `onSubmitSuccess` from\n * its app context and passes them down via `contactFormProps`;\n * embedders without that context just omit them. All other\n * `ContactFormProps` are forwarded too, so the host can adjust prefill,\n * success redirect, hidden fields, etc. without forking this component.\n */\nexport interface ShareExperienceSectionProps {\n /** Override the section heading. JSX so the host can break lines /\n * colorize the accent the same way the hub does. Default: the\n * hub's two-line \"Share Your Experience / with Fellow MSPs:\" copy. */\n title?: React.ReactNode;\n /** Override the lead paragraph. Default: the hub's review-incentive\n * copy referencing Flamingo. Pass a brand-neutral string in embeds. */\n subtitle?: React.ReactNode;\n /** Override the \"How it works?\" sub-heading. */\n howItWorksTitle?: React.ReactNode;\n /** Override the \"How it works?\" body copy. */\n howItWorksBody?: React.ReactNode;\n /** Forwarded to the inner `<ContactForm>`. The hub passes its\n * auto-resolved `userId` / `helpCategoryOptions` / `rdtCid` /\n * `onSubmitSuccess` here. Embedders pass overrides like\n * `successRedirectUrl` or extra prefill copy. */\n contactFormProps?: Partial<ContactFormProps>;\n className?: string;\n}\n\nconst DEFAULT_TITLE: React.ReactNode = (\n <>\n Share Your Experience\n <br />\n with Fellow MSPs<span className=\"text-ods-accent\">:</span>\n </>\n);\n\nconst DEFAULT_SUBTITLE: React.ReactNode = (\n <>\n We know your time is valuable. When you leave an honest review about your Flamingo experience, we'd like to\n thank you with a gift certificate – not as payment for a review, but as appreciation for the time you invest in\n helping other MSPs make informed decisions.\n </>\n);\n\nconst DEFAULT_HOW_IT_WORKS_TITLE: React.ReactNode = (\n <>\n How it works<span className=\"text-ods-accent\">?</span>\n </>\n);\n\nconst DEFAULT_HOW_IT_WORKS_BODY: React.ReactNode = (\n <>\n Share your name and email with us, and we'll reach out to guide you through the review process and arrange your\n thank-you gift certificate.\n </>\n);\n\n/** Defaults that match the hub's existing /case-studies behavior. Host\n * overrides via `contactFormProps` win over these. */\nconst DEFAULT_CONTACT_FORM_PROPS = {\n prefilledReason: 'I want to do a case study',\n prefilledMessage: 'I want to do a case study',\n hideFields: ['companySize', 'referralSource', 'helpCategory', 'message'] as ContactFormProps['hideFields'],\n title: '',\n subtitle: '',\n footerText: '',\n noBorder: true,\n noPadding: true,\n buttonVariant: 'outline' as ContactFormProps['buttonVariant'],\n buttonClassName: 'w-full',\n successToastMessage: \"Thank you! We'll reach out to schedule your case study.\",\n} satisfies Partial<ContactFormProps>;\n\nexport function ShareExperienceSection({\n title = DEFAULT_TITLE,\n subtitle = DEFAULT_SUBTITLE,\n howItWorksTitle = DEFAULT_HOW_IT_WORKS_TITLE,\n howItWorksBody = DEFAULT_HOW_IT_WORKS_BODY,\n contactFormProps,\n className,\n}: ShareExperienceSectionProps = {}) {\n return (\n <section className={`flex flex-col gap-10${className ? ` ${className}` : ''}`}>\n <div className=\"text-ods-text-primary\">\n <h2 className=\"text-ods-text-primary text-h1\">{title}</h2>\n <p className=\"mt-6 max-w-[765px] text-h4\">{subtitle}</p>\n </div>\n\n <div className=\"rounded-md border border-ods-border bg-ods-bg p-10\">\n <div className=\"flex flex-col gap-10\">\n <div className=\"flex flex-col gap-6 text-ods-text-primary\">\n <h3 className=\"text-h2\">{howItWorksTitle}</h3>\n <p className=\"text-h4\">{howItWorksBody}</p>\n </div>\n\n <BenefitCardGrid columns={4}>\n <BenefitCard\n icon={\n <div className=\"flex h-12 w-12 items-center justify-center rounded-md border border-ods-border bg-ods-bg p-2\">\n <G2Icon width={24} height={24} />\n </div>\n }\n title=\"G2\"\n description=\"g2.com\"\n variant=\"auth-figma\"\n />\n <BenefitCard\n icon={\n <div className=\"flex h-12 w-12 items-center justify-center rounded-md border border-ods-border bg-ods-bg p-2\">\n <CapterraIcon width={24} height={24} />\n </div>\n }\n title=\"Capterra\"\n description=\"capterra.com\"\n variant=\"auth-figma\"\n />\n <BenefitCard\n icon={\n <div className=\"flex h-12 w-12 items-center justify-center rounded-md border border-ods-border bg-ods-bg p-2\">\n <TrustpilotIcon width={24} height={24} />\n </div>\n }\n title=\"TrustPilot\"\n description=\"trustpilot.com\"\n variant=\"auth-figma\"\n />\n <BenefitCard\n icon={\n <div className=\"flex h-12 w-12 items-center justify-center rounded-md border border-ods-border bg-ods-bg p-2\">\n <GetAppIcon width={24} height={24} />\n </div>\n }\n title=\"GetApp\"\n description=\"getapp.com\"\n variant=\"auth-figma\"\n />\n </BenefitCardGrid>\n\n {/* Submission proxies through ambient EndpointsRuntime.contactUrl —\n * no per-call-site wiring needed for embeds behind a reverse\n * proxy. Hub's auto-resolving wrapper passes userId / rdtCid /\n * onSubmitSuccess via `contactFormProps`. */}\n <ContactForm {...DEFAULT_CONTACT_FORM_PROPS} {...contactFormProps} />\n </div>\n </div>\n </section>\n );\n}\n","'use client';\n\nimport type { EntityQuote } from '../../types/video-processing';\nimport { ENTITY_QUOTES_TITLE } from '../../types/video-processing';\nimport { StackedRowsPanel } from '../ui';\n\nexport interface EntityQuotesPanelProps {\n /** A record's `quotes` column (case study, customer interview, prospect call). */\n quotes: readonly EntityQuote[] | null | undefined;\n className?: string;\n}\n\n/**\n * THE quote list display: one `StackedRowsPanel` row per quote, the quote\n * with its speaker beneath, under a \"Key Quotes · N\" caption. Renders nothing\n * when there are none.\n */\nexport function EntityQuotesPanel({ quotes, className }: EntityQuotesPanelProps) {\n if (!quotes || quotes.length === 0) return null;\n return (\n <StackedRowsPanel\n className={className}\n title={`${ENTITY_QUOTES_TITLE} · ${quotes.length}`}\n rows={quotes.map(q => ({\n id: q.key,\n columns: [\n {\n key: 'quote',\n content: (\n <blockquote className=\"flex flex-col gap-[var(--spacing-system-xxs)]\">\n <p className=\"text-ods-text-primary text-h4\">“{q.text}”</p>\n {q.speaker && <p className=\"text-ods-text-secondary text-h4\">{q.speaker}</p>}\n </blockquote>\n ),\n },\n ],\n }))}\n />\n );\n}\n","'use client';\n\nimport { CardHitLayer } from '../features/card-hit-layer';\nimport { CardsStrip } from '../features/cards-strip';\nimport { Card } from '../ui/card';\nimport { PersonCell } from '../ui/people-cell';\n\n/** One customer quote chip: the line, who said it, their logo, and the case study it opens. */\nexport interface QuoteCard {\n key: string;\n text: string;\n /** \"Albert Guerra, Owner\" — the customer's name and job title. */\n attribution: string;\n /** The customer's MSP logo, else their avatar. */\n logoUrl: string | null;\n /** The case study the quote comes from. */\n href: string;\n}\n\nexport interface QuoteCardsStripProps {\n quotes: readonly QuoteCard[];\n className?: string;\n}\n\n/**\n * A scrolling row of customer quote chips on THE strip engine every card rail\n * uses (`CardsStrip`, render-prop mode so each chip keeps its natural width).\n * The whole chip opens the case study the quote comes from; the loop clone\n * keeps the click but stays out of the a11y tree. Renders nothing when empty.\n */\nexport function QuoteCardsStrip({ quotes, className }: QuoteCardsStripProps) {\n if (quotes.length === 0) return null;\n return (\n <CardsStrip\n className={className}\n showTitle={false}\n showChevrons={false}\n items={[...quotes]}\n itemKey={quote => quote.key}\n renderCard={(quote, ctx) => (\n <Card\n key={ctx.cardKey}\n aria-hidden={ctx.isClone || undefined}\n onPointerEnter={ctx.isTouch ? undefined : () => ctx.onActivate(ctx.cardKey)}\n onPointerLeave={ctx.isTouch ? undefined : () => ctx.onDeactivate(ctx.cardKey)}\n className=\"relative shrink-0 rounded-md border-ods-border bg-ods-card p-[var(--spacing-system-sf)] shadow-none hover:border-ods-border-hover\"\n >\n <PersonCell size=\"lg\" name={`\"${quote.text}\"`} secondary={quote.attribution} avatarUrl={quote.logoUrl} />\n <CardHitLayer href={quote.href} label={`${quote.text}, ${quote.attribution}`} decorative={ctx.isClone} />\n </Card>\n )}\n />\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/components/case-studies/index.cjs","../../../src/components/case-studies/share-experience-section.tsx","../../../src/components/case-studies/entity-quotes-panel.tsx","../../../src/components/case-studies/quote-cards-strip.tsx"],"names":["jsx","jsxs"],"mappings":"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","file":"/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/components/case-studies/index.cjs","sourcesContent":[null,"'use client';\n\nimport type React from 'react';\nimport { RESCUE_FORMS } from '../../utils/form-rescue';\nimport { ContactForm, type ContactFormProps } from '../contact';\nimport { G2Icon, CapterraIcon, TrustpilotIcon, GetAppIcon } from '../icons';\nimport { BenefitCard, BenefitCardGrid } from '../ui';\n\n/**\n * `<ShareExperienceSection>` — the case-studies \"Share Your Experience\"\n * CTA block.\n *\n * Hub usage: rendered inside the unified case-studies chrome (between\n * the search bar and the case-study card grid) so it stays at the same\n * y-offset + gutters as the rest of the page content.\n *\n * Embedders mount this anywhere they like. The inner `<ContactForm>`\n * submits through the AMBIENT `EndpointsRuntime.contactUrl` (same proxy\n * seam every other embed-aware form uses), so embedders behind a\n * `/content` reverse proxy get a working submission with no per-call-\n * site wiring.\n *\n * **Copy is overridable.** Every string is a prop with a sensible\n * \"Flamingo case-studies\" default so the hub keeps its existing copy\n * verbatim; embedders override what they need.\n *\n * **Contact-form integration is configurable.** Hub auto-resolves\n * `userId` / `helpCategoryOptions` / `rdtCid` / `onSubmitSuccess` from\n * its app context and passes them down via `contactFormProps`;\n * embedders without that context just omit them. All other\n * `ContactFormProps` are forwarded too, so the host can adjust prefill,\n * success redirect, hidden fields, etc. without forking this component.\n */\nexport interface ShareExperienceSectionProps {\n /** Override the section heading. JSX so the host can break lines /\n * colorize the accent the same way the hub does. Default: the\n * hub's two-line \"Share Your Experience / with Fellow MSPs:\" copy. */\n title?: React.ReactNode;\n /** Override the lead paragraph. Default: the hub's review-incentive\n * copy referencing Flamingo. Pass a brand-neutral string in embeds. */\n subtitle?: React.ReactNode;\n /** Override the \"How it works?\" sub-heading. */\n howItWorksTitle?: React.ReactNode;\n /** Override the \"How it works?\" body copy. */\n howItWorksBody?: React.ReactNode;\n /** Forwarded to the inner `<ContactForm>`. The hub passes its\n * auto-resolved `userId` / `helpCategoryOptions` / `rdtCid` /\n * `onSubmitSuccess` here. Embedders pass overrides like\n * `successRedirectUrl` or extra prefill copy. */\n contactFormProps?: Partial<ContactFormProps>;\n className?: string;\n}\n\nconst DEFAULT_TITLE: React.ReactNode = (\n <>\n Share Your Experience\n <br />\n with Fellow MSPs<span className=\"text-ods-accent\">:</span>\n </>\n);\n\nconst DEFAULT_SUBTITLE: React.ReactNode = (\n <>\n We know your time is valuable. When you leave an honest review about your Flamingo experience, we'd like to\n thank you with a gift certificate – not as payment for a review, but as appreciation for the time you invest in\n helping other MSPs make informed decisions.\n </>\n);\n\nconst DEFAULT_HOW_IT_WORKS_TITLE: React.ReactNode = (\n <>\n How it works<span className=\"text-ods-accent\">?</span>\n </>\n);\n\nconst DEFAULT_HOW_IT_WORKS_BODY: React.ReactNode = (\n <>\n Share your name and email with us, and we'll reach out to guide you through the review process and arrange your\n thank-you gift certificate.\n </>\n);\n\n/** Defaults that match the hub's existing /case-studies behavior. Host\n * overrides via `contactFormProps` win over these. */\nconst DEFAULT_CONTACT_FORM_PROPS = {\n prefilledReason: 'I want to do a case study',\n prefilledMessage: 'I want to do a case study',\n hideFields: ['companySize', 'referralSource', 'helpCategory', 'message'] as ContactFormProps['hideFields'],\n title: '',\n subtitle: '',\n footerText: '',\n noBorder: true,\n noPadding: true,\n buttonVariant: 'outline' as ContactFormProps['buttonVariant'],\n buttonClassName: 'w-full',\n successToastMessage: \"Thank you! We'll reach out to schedule your case study.\",\n rescue: RESCUE_FORMS.caseStudyPitch,\n} satisfies Partial<ContactFormProps>;\n\nexport function ShareExperienceSection({\n title = DEFAULT_TITLE,\n subtitle = DEFAULT_SUBTITLE,\n howItWorksTitle = DEFAULT_HOW_IT_WORKS_TITLE,\n howItWorksBody = DEFAULT_HOW_IT_WORKS_BODY,\n contactFormProps,\n className,\n}: ShareExperienceSectionProps = {}) {\n return (\n <section className={`flex flex-col gap-10${className ? ` ${className}` : ''}`}>\n <div className=\"text-ods-text-primary\">\n <h2 className=\"text-ods-text-primary text-h1\">{title}</h2>\n <p className=\"mt-6 max-w-[765px] text-h4\">{subtitle}</p>\n </div>\n\n <div className=\"rounded-md border border-ods-border bg-ods-bg p-10\">\n <div className=\"flex flex-col gap-10\">\n <div className=\"flex flex-col gap-6 text-ods-text-primary\">\n <h3 className=\"text-h2\">{howItWorksTitle}</h3>\n <p className=\"text-h4\">{howItWorksBody}</p>\n </div>\n\n <BenefitCardGrid columns={4}>\n <BenefitCard\n icon={\n <div className=\"flex h-12 w-12 items-center justify-center rounded-md border border-ods-border bg-ods-bg p-2\">\n <G2Icon width={24} height={24} />\n </div>\n }\n title=\"G2\"\n description=\"g2.com\"\n variant=\"auth-figma\"\n />\n <BenefitCard\n icon={\n <div className=\"flex h-12 w-12 items-center justify-center rounded-md border border-ods-border bg-ods-bg p-2\">\n <CapterraIcon width={24} height={24} />\n </div>\n }\n title=\"Capterra\"\n description=\"capterra.com\"\n variant=\"auth-figma\"\n />\n <BenefitCard\n icon={\n <div className=\"flex h-12 w-12 items-center justify-center rounded-md border border-ods-border bg-ods-bg p-2\">\n <TrustpilotIcon width={24} height={24} />\n </div>\n }\n title=\"TrustPilot\"\n description=\"trustpilot.com\"\n variant=\"auth-figma\"\n />\n <BenefitCard\n icon={\n <div className=\"flex h-12 w-12 items-center justify-center rounded-md border border-ods-border bg-ods-bg p-2\">\n <GetAppIcon width={24} height={24} />\n </div>\n }\n title=\"GetApp\"\n description=\"getapp.com\"\n variant=\"auth-figma\"\n />\n </BenefitCardGrid>\n\n {/* Submission proxies through ambient EndpointsRuntime.contactUrl —\n * no per-call-site wiring needed for embeds behind a reverse\n * proxy. Hub's auto-resolving wrapper passes userId / rdtCid /\n * onSubmitSuccess via `contactFormProps`. */}\n <ContactForm {...DEFAULT_CONTACT_FORM_PROPS} {...contactFormProps} />\n </div>\n </div>\n </section>\n );\n}\n","'use client';\n\nimport type { EntityQuote } from '../../types/video-processing';\nimport { ENTITY_QUOTES_TITLE } from '../../types/video-processing';\nimport { StackedRowsPanel } from '../ui';\n\nexport interface EntityQuotesPanelProps {\n /** A record's `quotes` column (case study, customer interview, prospect call). */\n quotes: readonly EntityQuote[] | null | undefined;\n className?: string;\n}\n\n/**\n * THE quote list display: one `StackedRowsPanel` row per quote, the quote\n * with its speaker beneath, under a \"Key Quotes · N\" caption. Renders nothing\n * when there are none.\n */\nexport function EntityQuotesPanel({ quotes, className }: EntityQuotesPanelProps) {\n if (!quotes || quotes.length === 0) return null;\n return (\n <StackedRowsPanel\n className={className}\n title={`${ENTITY_QUOTES_TITLE} · ${quotes.length}`}\n rows={quotes.map(q => ({\n id: q.key,\n columns: [\n {\n key: 'quote',\n content: (\n <blockquote className=\"flex flex-col gap-[var(--spacing-system-xxs)]\">\n <p className=\"text-ods-text-primary text-h4\">“{q.text}”</p>\n {q.speaker && <p className=\"text-ods-text-secondary text-h4\">{q.speaker}</p>}\n </blockquote>\n ),\n },\n ],\n }))}\n />\n );\n}\n","'use client';\n\nimport { CardHitLayer } from '../features/card-hit-layer';\nimport { CardsStrip } from '../features/cards-strip';\nimport { Card } from '../ui/card';\nimport { PersonCell } from '../ui/people-cell';\n\n/** One customer quote chip: the line, who said it, their logo, and the case study it opens. */\nexport interface QuoteCard {\n key: string;\n text: string;\n /** \"Albert Guerra, Owner\" — the customer's name and job title. */\n attribution: string;\n /** The customer's MSP logo, else their avatar. */\n logoUrl: string | null;\n /** The case study the quote comes from. */\n href: string;\n}\n\nexport interface QuoteCardsStripProps {\n quotes: readonly QuoteCard[];\n className?: string;\n}\n\n/**\n * A scrolling row of customer quote chips on THE strip engine every card rail\n * uses (`CardsStrip`, render-prop mode so each chip keeps its natural width).\n * The whole chip opens the case study the quote comes from; the loop clone\n * keeps the click but stays out of the a11y tree. Renders nothing when empty.\n */\nexport function QuoteCardsStrip({ quotes, className }: QuoteCardsStripProps) {\n if (quotes.length === 0) return null;\n return (\n <CardsStrip\n className={className}\n showTitle={false}\n showChevrons={false}\n items={[...quotes]}\n itemKey={quote => quote.key}\n renderCard={(quote, ctx) => (\n <Card\n key={ctx.cardKey}\n aria-hidden={ctx.isClone || undefined}\n onPointerEnter={ctx.isTouch ? undefined : () => ctx.onActivate(ctx.cardKey)}\n onPointerLeave={ctx.isTouch ? undefined : () => ctx.onDeactivate(ctx.cardKey)}\n className=\"relative shrink-0 rounded-md border-ods-border bg-ods-card p-[var(--spacing-system-sf)] shadow-none hover:border-ods-border-hover\"\n >\n <PersonCell size=\"lg\" name={`\"${quote.text}\"`} secondary={quote.attribution} avatarUrl={quote.logoUrl} />\n <CardHitLayer href={quote.href} label={`${quote.text}, ${quote.attribution}`} decorative={ctx.isClone} />\n </Card>\n )}\n />\n );\n}\n"]}
|
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
ContactForm
|
|
4
|
-
} from "../../chunk-
|
|
4
|
+
} from "../../chunk-OZL6FSB2.js";
|
|
5
5
|
import {
|
|
6
6
|
BenefitCard,
|
|
7
7
|
BenefitCardGrid,
|
|
8
8
|
ENTITY_QUOTES_TITLE,
|
|
9
9
|
PersonCell,
|
|
10
10
|
StackedRowsPanel
|
|
11
|
-
} from "../../chunk-
|
|
11
|
+
} from "../../chunk-GIYAUKCY.js";
|
|
12
12
|
import "../../chunk-L2SLFCXP.js";
|
|
13
13
|
import "../../chunk-BJXDHKUX.js";
|
|
14
|
-
import
|
|
15
|
-
|
|
14
|
+
import {
|
|
15
|
+
RESCUE_FORMS
|
|
16
|
+
} from "../../chunk-SGK4Q2W2.js";
|
|
17
|
+
import "../../chunk-JD5TKRCU.js";
|
|
16
18
|
import "../../chunk-GRBZC5N3.js";
|
|
17
19
|
import "../../chunk-MT5A25AX.js";
|
|
18
20
|
import "../../chunk-BXWXBBAC.js";
|
|
@@ -70,7 +72,8 @@ var DEFAULT_CONTACT_FORM_PROPS = {
|
|
|
70
72
|
noPadding: true,
|
|
71
73
|
buttonVariant: "outline",
|
|
72
74
|
buttonClassName: "w-full",
|
|
73
|
-
successToastMessage: "Thank you! We'll reach out to schedule your case study."
|
|
75
|
+
successToastMessage: "Thank you! We'll reach out to schedule your case study.",
|
|
76
|
+
rescue: RESCUE_FORMS.caseStudyPitch
|
|
74
77
|
};
|
|
75
78
|
function ShareExperienceSection({
|
|
76
79
|
title = DEFAULT_TITLE,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/case-studies/share-experience-section.tsx","../../../src/components/case-studies/entity-quotes-panel.tsx","../../../src/components/case-studies/quote-cards-strip.tsx"],"sourcesContent":["'use client';\n\nimport type React from 'react';\nimport { ContactForm, type ContactFormProps } from '../contact';\nimport { G2Icon, CapterraIcon, TrustpilotIcon, GetAppIcon } from '../icons';\nimport { BenefitCard, BenefitCardGrid } from '../ui';\n\n/**\n * `<ShareExperienceSection>` — the case-studies \"Share Your Experience\"\n * CTA block.\n *\n * Hub usage: rendered inside the unified case-studies chrome (between\n * the search bar and the case-study card grid) so it stays at the same\n * y-offset + gutters as the rest of the page content.\n *\n * Embedders mount this anywhere they like. The inner `<ContactForm>`\n * submits through the AMBIENT `EndpointsRuntime.contactUrl` (same proxy\n * seam every other embed-aware form uses), so embedders behind a\n * `/content` reverse proxy get a working submission with no per-call-\n * site wiring.\n *\n * **Copy is overridable.** Every string is a prop with a sensible\n * \"Flamingo case-studies\" default so the hub keeps its existing copy\n * verbatim; embedders override what they need.\n *\n * **Contact-form integration is configurable.** Hub auto-resolves\n * `userId` / `helpCategoryOptions` / `rdtCid` / `onSubmitSuccess` from\n * its app context and passes them down via `contactFormProps`;\n * embedders without that context just omit them. All other\n * `ContactFormProps` are forwarded too, so the host can adjust prefill,\n * success redirect, hidden fields, etc. without forking this component.\n */\nexport interface ShareExperienceSectionProps {\n /** Override the section heading. JSX so the host can break lines /\n * colorize the accent the same way the hub does. Default: the\n * hub's two-line \"Share Your Experience / with Fellow MSPs:\" copy. */\n title?: React.ReactNode;\n /** Override the lead paragraph. Default: the hub's review-incentive\n * copy referencing Flamingo. Pass a brand-neutral string in embeds. */\n subtitle?: React.ReactNode;\n /** Override the \"How it works?\" sub-heading. */\n howItWorksTitle?: React.ReactNode;\n /** Override the \"How it works?\" body copy. */\n howItWorksBody?: React.ReactNode;\n /** Forwarded to the inner `<ContactForm>`. The hub passes its\n * auto-resolved `userId` / `helpCategoryOptions` / `rdtCid` /\n * `onSubmitSuccess` here. Embedders pass overrides like\n * `successRedirectUrl` or extra prefill copy. */\n contactFormProps?: Partial<ContactFormProps>;\n className?: string;\n}\n\nconst DEFAULT_TITLE: React.ReactNode = (\n <>\n Share Your Experience\n <br />\n with Fellow MSPs<span className=\"text-ods-accent\">:</span>\n </>\n);\n\nconst DEFAULT_SUBTITLE: React.ReactNode = (\n <>\n We know your time is valuable. When you leave an honest review about your Flamingo experience, we'd like to\n thank you with a gift certificate – not as payment for a review, but as appreciation for the time you invest in\n helping other MSPs make informed decisions.\n </>\n);\n\nconst DEFAULT_HOW_IT_WORKS_TITLE: React.ReactNode = (\n <>\n How it works<span className=\"text-ods-accent\">?</span>\n </>\n);\n\nconst DEFAULT_HOW_IT_WORKS_BODY: React.ReactNode = (\n <>\n Share your name and email with us, and we'll reach out to guide you through the review process and arrange your\n thank-you gift certificate.\n </>\n);\n\n/** Defaults that match the hub's existing /case-studies behavior. Host\n * overrides via `contactFormProps` win over these. */\nconst DEFAULT_CONTACT_FORM_PROPS = {\n prefilledReason: 'I want to do a case study',\n prefilledMessage: 'I want to do a case study',\n hideFields: ['companySize', 'referralSource', 'helpCategory', 'message'] as ContactFormProps['hideFields'],\n title: '',\n subtitle: '',\n footerText: '',\n noBorder: true,\n noPadding: true,\n buttonVariant: 'outline' as ContactFormProps['buttonVariant'],\n buttonClassName: 'w-full',\n successToastMessage: \"Thank you! We'll reach out to schedule your case study.\",\n} satisfies Partial<ContactFormProps>;\n\nexport function ShareExperienceSection({\n title = DEFAULT_TITLE,\n subtitle = DEFAULT_SUBTITLE,\n howItWorksTitle = DEFAULT_HOW_IT_WORKS_TITLE,\n howItWorksBody = DEFAULT_HOW_IT_WORKS_BODY,\n contactFormProps,\n className,\n}: ShareExperienceSectionProps = {}) {\n return (\n <section className={`flex flex-col gap-10${className ? ` ${className}` : ''}`}>\n <div className=\"text-ods-text-primary\">\n <h2 className=\"text-ods-text-primary text-h1\">{title}</h2>\n <p className=\"mt-6 max-w-[765px] text-h4\">{subtitle}</p>\n </div>\n\n <div className=\"rounded-md border border-ods-border bg-ods-bg p-10\">\n <div className=\"flex flex-col gap-10\">\n <div className=\"flex flex-col gap-6 text-ods-text-primary\">\n <h3 className=\"text-h2\">{howItWorksTitle}</h3>\n <p className=\"text-h4\">{howItWorksBody}</p>\n </div>\n\n <BenefitCardGrid columns={4}>\n <BenefitCard\n icon={\n <div className=\"flex h-12 w-12 items-center justify-center rounded-md border border-ods-border bg-ods-bg p-2\">\n <G2Icon width={24} height={24} />\n </div>\n }\n title=\"G2\"\n description=\"g2.com\"\n variant=\"auth-figma\"\n />\n <BenefitCard\n icon={\n <div className=\"flex h-12 w-12 items-center justify-center rounded-md border border-ods-border bg-ods-bg p-2\">\n <CapterraIcon width={24} height={24} />\n </div>\n }\n title=\"Capterra\"\n description=\"capterra.com\"\n variant=\"auth-figma\"\n />\n <BenefitCard\n icon={\n <div className=\"flex h-12 w-12 items-center justify-center rounded-md border border-ods-border bg-ods-bg p-2\">\n <TrustpilotIcon width={24} height={24} />\n </div>\n }\n title=\"TrustPilot\"\n description=\"trustpilot.com\"\n variant=\"auth-figma\"\n />\n <BenefitCard\n icon={\n <div className=\"flex h-12 w-12 items-center justify-center rounded-md border border-ods-border bg-ods-bg p-2\">\n <GetAppIcon width={24} height={24} />\n </div>\n }\n title=\"GetApp\"\n description=\"getapp.com\"\n variant=\"auth-figma\"\n />\n </BenefitCardGrid>\n\n {/* Submission proxies through ambient EndpointsRuntime.contactUrl —\n * no per-call-site wiring needed for embeds behind a reverse\n * proxy. Hub's auto-resolving wrapper passes userId / rdtCid /\n * onSubmitSuccess via `contactFormProps`. */}\n <ContactForm {...DEFAULT_CONTACT_FORM_PROPS} {...contactFormProps} />\n </div>\n </div>\n </section>\n );\n}\n","'use client';\n\nimport type { EntityQuote } from '../../types/video-processing';\nimport { ENTITY_QUOTES_TITLE } from '../../types/video-processing';\nimport { StackedRowsPanel } from '../ui';\n\nexport interface EntityQuotesPanelProps {\n /** A record's `quotes` column (case study, customer interview, prospect call). */\n quotes: readonly EntityQuote[] | null | undefined;\n className?: string;\n}\n\n/**\n * THE quote list display: one `StackedRowsPanel` row per quote, the quote\n * with its speaker beneath, under a \"Key Quotes · N\" caption. Renders nothing\n * when there are none.\n */\nexport function EntityQuotesPanel({ quotes, className }: EntityQuotesPanelProps) {\n if (!quotes || quotes.length === 0) return null;\n return (\n <StackedRowsPanel\n className={className}\n title={`${ENTITY_QUOTES_TITLE} · ${quotes.length}`}\n rows={quotes.map(q => ({\n id: q.key,\n columns: [\n {\n key: 'quote',\n content: (\n <blockquote className=\"flex flex-col gap-[var(--spacing-system-xxs)]\">\n <p className=\"text-ods-text-primary text-h4\">“{q.text}”</p>\n {q.speaker && <p className=\"text-ods-text-secondary text-h4\">{q.speaker}</p>}\n </blockquote>\n ),\n },\n ],\n }))}\n />\n );\n}\n","'use client';\n\nimport { CardHitLayer } from '../features/card-hit-layer';\nimport { CardsStrip } from '../features/cards-strip';\nimport { Card } from '../ui/card';\nimport { PersonCell } from '../ui/people-cell';\n\n/** One customer quote chip: the line, who said it, their logo, and the case study it opens. */\nexport interface QuoteCard {\n key: string;\n text: string;\n /** \"Albert Guerra, Owner\" — the customer's name and job title. */\n attribution: string;\n /** The customer's MSP logo, else their avatar. */\n logoUrl: string | null;\n /** The case study the quote comes from. */\n href: string;\n}\n\nexport interface QuoteCardsStripProps {\n quotes: readonly QuoteCard[];\n className?: string;\n}\n\n/**\n * A scrolling row of customer quote chips on THE strip engine every card rail\n * uses (`CardsStrip`, render-prop mode so each chip keeps its natural width).\n * The whole chip opens the case study the quote comes from; the loop clone\n * keeps the click but stays out of the a11y tree. Renders nothing when empty.\n */\nexport function QuoteCardsStrip({ quotes, className }: QuoteCardsStripProps) {\n if (quotes.length === 0) return null;\n return (\n <CardsStrip\n className={className}\n showTitle={false}\n showChevrons={false}\n items={[...quotes]}\n itemKey={quote => quote.key}\n renderCard={(quote, ctx) => (\n <Card\n key={ctx.cardKey}\n aria-hidden={ctx.isClone || undefined}\n onPointerEnter={ctx.isTouch ? undefined : () => ctx.onActivate(ctx.cardKey)}\n onPointerLeave={ctx.isTouch ? undefined : () => ctx.onDeactivate(ctx.cardKey)}\n className=\"relative shrink-0 rounded-md border-ods-border bg-ods-card p-[var(--spacing-system-sf)] shadow-none hover:border-ods-border-hover\"\n >\n <PersonCell size=\"lg\" name={`\"${quote.text}\"`} secondary={quote.attribution} avatarUrl={quote.logoUrl} />\n <CardHitLayer href={quote.href} label={`${quote.text}, ${quote.attribution}`} decorative={ctx.isClone} />\n </Card>\n )}\n />\n );\n}\n"],"mappings":"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","names":["jsx","jsxs","jsx","jsxs"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/case-studies/share-experience-section.tsx","../../../src/components/case-studies/entity-quotes-panel.tsx","../../../src/components/case-studies/quote-cards-strip.tsx"],"sourcesContent":["'use client';\n\nimport type React from 'react';\nimport { RESCUE_FORMS } from '../../utils/form-rescue';\nimport { ContactForm, type ContactFormProps } from '../contact';\nimport { G2Icon, CapterraIcon, TrustpilotIcon, GetAppIcon } from '../icons';\nimport { BenefitCard, BenefitCardGrid } from '../ui';\n\n/**\n * `<ShareExperienceSection>` — the case-studies \"Share Your Experience\"\n * CTA block.\n *\n * Hub usage: rendered inside the unified case-studies chrome (between\n * the search bar and the case-study card grid) so it stays at the same\n * y-offset + gutters as the rest of the page content.\n *\n * Embedders mount this anywhere they like. The inner `<ContactForm>`\n * submits through the AMBIENT `EndpointsRuntime.contactUrl` (same proxy\n * seam every other embed-aware form uses), so embedders behind a\n * `/content` reverse proxy get a working submission with no per-call-\n * site wiring.\n *\n * **Copy is overridable.** Every string is a prop with a sensible\n * \"Flamingo case-studies\" default so the hub keeps its existing copy\n * verbatim; embedders override what they need.\n *\n * **Contact-form integration is configurable.** Hub auto-resolves\n * `userId` / `helpCategoryOptions` / `rdtCid` / `onSubmitSuccess` from\n * its app context and passes them down via `contactFormProps`;\n * embedders without that context just omit them. All other\n * `ContactFormProps` are forwarded too, so the host can adjust prefill,\n * success redirect, hidden fields, etc. without forking this component.\n */\nexport interface ShareExperienceSectionProps {\n /** Override the section heading. JSX so the host can break lines /\n * colorize the accent the same way the hub does. Default: the\n * hub's two-line \"Share Your Experience / with Fellow MSPs:\" copy. */\n title?: React.ReactNode;\n /** Override the lead paragraph. Default: the hub's review-incentive\n * copy referencing Flamingo. Pass a brand-neutral string in embeds. */\n subtitle?: React.ReactNode;\n /** Override the \"How it works?\" sub-heading. */\n howItWorksTitle?: React.ReactNode;\n /** Override the \"How it works?\" body copy. */\n howItWorksBody?: React.ReactNode;\n /** Forwarded to the inner `<ContactForm>`. The hub passes its\n * auto-resolved `userId` / `helpCategoryOptions` / `rdtCid` /\n * `onSubmitSuccess` here. Embedders pass overrides like\n * `successRedirectUrl` or extra prefill copy. */\n contactFormProps?: Partial<ContactFormProps>;\n className?: string;\n}\n\nconst DEFAULT_TITLE: React.ReactNode = (\n <>\n Share Your Experience\n <br />\n with Fellow MSPs<span className=\"text-ods-accent\">:</span>\n </>\n);\n\nconst DEFAULT_SUBTITLE: React.ReactNode = (\n <>\n We know your time is valuable. When you leave an honest review about your Flamingo experience, we'd like to\n thank you with a gift certificate – not as payment for a review, but as appreciation for the time you invest in\n helping other MSPs make informed decisions.\n </>\n);\n\nconst DEFAULT_HOW_IT_WORKS_TITLE: React.ReactNode = (\n <>\n How it works<span className=\"text-ods-accent\">?</span>\n </>\n);\n\nconst DEFAULT_HOW_IT_WORKS_BODY: React.ReactNode = (\n <>\n Share your name and email with us, and we'll reach out to guide you through the review process and arrange your\n thank-you gift certificate.\n </>\n);\n\n/** Defaults that match the hub's existing /case-studies behavior. Host\n * overrides via `contactFormProps` win over these. */\nconst DEFAULT_CONTACT_FORM_PROPS = {\n prefilledReason: 'I want to do a case study',\n prefilledMessage: 'I want to do a case study',\n hideFields: ['companySize', 'referralSource', 'helpCategory', 'message'] as ContactFormProps['hideFields'],\n title: '',\n subtitle: '',\n footerText: '',\n noBorder: true,\n noPadding: true,\n buttonVariant: 'outline' as ContactFormProps['buttonVariant'],\n buttonClassName: 'w-full',\n successToastMessage: \"Thank you! We'll reach out to schedule your case study.\",\n rescue: RESCUE_FORMS.caseStudyPitch,\n} satisfies Partial<ContactFormProps>;\n\nexport function ShareExperienceSection({\n title = DEFAULT_TITLE,\n subtitle = DEFAULT_SUBTITLE,\n howItWorksTitle = DEFAULT_HOW_IT_WORKS_TITLE,\n howItWorksBody = DEFAULT_HOW_IT_WORKS_BODY,\n contactFormProps,\n className,\n}: ShareExperienceSectionProps = {}) {\n return (\n <section className={`flex flex-col gap-10${className ? ` ${className}` : ''}`}>\n <div className=\"text-ods-text-primary\">\n <h2 className=\"text-ods-text-primary text-h1\">{title}</h2>\n <p className=\"mt-6 max-w-[765px] text-h4\">{subtitle}</p>\n </div>\n\n <div className=\"rounded-md border border-ods-border bg-ods-bg p-10\">\n <div className=\"flex flex-col gap-10\">\n <div className=\"flex flex-col gap-6 text-ods-text-primary\">\n <h3 className=\"text-h2\">{howItWorksTitle}</h3>\n <p className=\"text-h4\">{howItWorksBody}</p>\n </div>\n\n <BenefitCardGrid columns={4}>\n <BenefitCard\n icon={\n <div className=\"flex h-12 w-12 items-center justify-center rounded-md border border-ods-border bg-ods-bg p-2\">\n <G2Icon width={24} height={24} />\n </div>\n }\n title=\"G2\"\n description=\"g2.com\"\n variant=\"auth-figma\"\n />\n <BenefitCard\n icon={\n <div className=\"flex h-12 w-12 items-center justify-center rounded-md border border-ods-border bg-ods-bg p-2\">\n <CapterraIcon width={24} height={24} />\n </div>\n }\n title=\"Capterra\"\n description=\"capterra.com\"\n variant=\"auth-figma\"\n />\n <BenefitCard\n icon={\n <div className=\"flex h-12 w-12 items-center justify-center rounded-md border border-ods-border bg-ods-bg p-2\">\n <TrustpilotIcon width={24} height={24} />\n </div>\n }\n title=\"TrustPilot\"\n description=\"trustpilot.com\"\n variant=\"auth-figma\"\n />\n <BenefitCard\n icon={\n <div className=\"flex h-12 w-12 items-center justify-center rounded-md border border-ods-border bg-ods-bg p-2\">\n <GetAppIcon width={24} height={24} />\n </div>\n }\n title=\"GetApp\"\n description=\"getapp.com\"\n variant=\"auth-figma\"\n />\n </BenefitCardGrid>\n\n {/* Submission proxies through ambient EndpointsRuntime.contactUrl —\n * no per-call-site wiring needed for embeds behind a reverse\n * proxy. Hub's auto-resolving wrapper passes userId / rdtCid /\n * onSubmitSuccess via `contactFormProps`. */}\n <ContactForm {...DEFAULT_CONTACT_FORM_PROPS} {...contactFormProps} />\n </div>\n </div>\n </section>\n );\n}\n","'use client';\n\nimport type { EntityQuote } from '../../types/video-processing';\nimport { ENTITY_QUOTES_TITLE } from '../../types/video-processing';\nimport { StackedRowsPanel } from '../ui';\n\nexport interface EntityQuotesPanelProps {\n /** A record's `quotes` column (case study, customer interview, prospect call). */\n quotes: readonly EntityQuote[] | null | undefined;\n className?: string;\n}\n\n/**\n * THE quote list display: one `StackedRowsPanel` row per quote, the quote\n * with its speaker beneath, under a \"Key Quotes · N\" caption. Renders nothing\n * when there are none.\n */\nexport function EntityQuotesPanel({ quotes, className }: EntityQuotesPanelProps) {\n if (!quotes || quotes.length === 0) return null;\n return (\n <StackedRowsPanel\n className={className}\n title={`${ENTITY_QUOTES_TITLE} · ${quotes.length}`}\n rows={quotes.map(q => ({\n id: q.key,\n columns: [\n {\n key: 'quote',\n content: (\n <blockquote className=\"flex flex-col gap-[var(--spacing-system-xxs)]\">\n <p className=\"text-ods-text-primary text-h4\">“{q.text}”</p>\n {q.speaker && <p className=\"text-ods-text-secondary text-h4\">{q.speaker}</p>}\n </blockquote>\n ),\n },\n ],\n }))}\n />\n );\n}\n","'use client';\n\nimport { CardHitLayer } from '../features/card-hit-layer';\nimport { CardsStrip } from '../features/cards-strip';\nimport { Card } from '../ui/card';\nimport { PersonCell } from '../ui/people-cell';\n\n/** One customer quote chip: the line, who said it, their logo, and the case study it opens. */\nexport interface QuoteCard {\n key: string;\n text: string;\n /** \"Albert Guerra, Owner\" — the customer's name and job title. */\n attribution: string;\n /** The customer's MSP logo, else their avatar. */\n logoUrl: string | null;\n /** The case study the quote comes from. */\n href: string;\n}\n\nexport interface QuoteCardsStripProps {\n quotes: readonly QuoteCard[];\n className?: string;\n}\n\n/**\n * A scrolling row of customer quote chips on THE strip engine every card rail\n * uses (`CardsStrip`, render-prop mode so each chip keeps its natural width).\n * The whole chip opens the case study the quote comes from; the loop clone\n * keeps the click but stays out of the a11y tree. Renders nothing when empty.\n */\nexport function QuoteCardsStrip({ quotes, className }: QuoteCardsStripProps) {\n if (quotes.length === 0) return null;\n return (\n <CardsStrip\n className={className}\n showTitle={false}\n showChevrons={false}\n items={[...quotes]}\n itemKey={quote => quote.key}\n renderCard={(quote, ctx) => (\n <Card\n key={ctx.cardKey}\n aria-hidden={ctx.isClone || undefined}\n onPointerEnter={ctx.isTouch ? undefined : () => ctx.onActivate(ctx.cardKey)}\n onPointerLeave={ctx.isTouch ? undefined : () => ctx.onDeactivate(ctx.cardKey)}\n className=\"relative shrink-0 rounded-md border-ods-border bg-ods-card p-[var(--spacing-system-sf)] shadow-none hover:border-ods-border-hover\"\n >\n <PersonCell size=\"lg\" name={`\"${quote.text}\"`} secondary={quote.attribution} avatarUrl={quote.logoUrl} />\n <CardHitLayer href={quote.href} label={`${quote.text}, ${quote.attribution}`} decorative={ctx.isClone} />\n </Card>\n )}\n />\n );\n}\n"],"mappings":"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","names":["jsx","jsxs","jsx","jsxs"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"share-experience-section.d.ts","sourceRoot":"","sources":["../../../src/components/case-studies/share-experience-section.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"share-experience-section.d.ts","sourceRoot":"","sources":["../../../src/components/case-studies/share-experience-section.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAe,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAIhE;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,WAAW,2BAA2B;IAC1C;;2EAEuE;IACvE,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB;4EACwE;IACxE,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,gDAAgD;IAChD,eAAe,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAClC,8CAA8C;IAC9C,cAAc,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACjC;;;sDAGkD;IAClD,gBAAgB,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAgDD,wBAAgB,sBAAsB,CAAC,EACrC,KAAqB,EACrB,QAA2B,EAC3B,eAA4C,EAC5C,cAA0C,EAC1C,gBAAgB,EAChB,SAAS,GACV,GAAE,2BAAgC,qBAmElC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type ReactNode } from 'react';
|
|
2
2
|
import { type ContactFormData } from '../../schemas/contact-schema';
|
|
3
|
+
import type { FormRescueDefinition } from '../../utils/form-rescue';
|
|
3
4
|
import type { ChatAttachment } from '../chat/utils/chat-attachment-markdown';
|
|
4
5
|
import { type ButtonProps } from '../ui';
|
|
5
6
|
/**
|
|
@@ -76,6 +77,11 @@ export interface ContactFormProps {
|
|
|
76
77
|
submitSuccessLabel?: string;
|
|
77
78
|
successRedirectUrl?: string;
|
|
78
79
|
successToastMessage?: string;
|
|
80
|
+
/** Form rescue (a half-filled form is saved so the team can follow up): the
|
|
81
|
+
* form's definition (`RESCUE_FORMS.contact`, or the host's own
|
|
82
|
+
* `defineRescueForm`). OPT-IN: omitted or `null` saves nothing, so a host that
|
|
83
|
+
* has not chosen rescue never starts storing what visitors type. */
|
|
84
|
+
rescue?: FormRescueDefinition | null;
|
|
79
85
|
}
|
|
80
|
-
export declare function ContactForm({ userId, helpCategoryOptions, rdtCid, onSubmitSuccess, prefilledReason, prefilledMessage, hideFields, defaultValues: defaultValuesProp, onCustomSubmit, extraTopField, attachmentsEnabled, title, subtitle, footerText, noBorder, noPadding, buttonVariant, buttonClassName, submitLabel, submitSuccessLabel, successRedirectUrl, successToastMessage, }?: ContactFormProps): import("react").JSX.Element;
|
|
86
|
+
export declare function ContactForm({ userId, helpCategoryOptions, rdtCid, onSubmitSuccess, prefilledReason, prefilledMessage, hideFields, defaultValues: defaultValuesProp, onCustomSubmit, extraTopField, attachmentsEnabled, title, subtitle, footerText, noBorder, noPadding, buttonVariant, buttonClassName, submitLabel, submitSuccessLabel, successRedirectUrl, successToastMessage, rescue: rescueForm, }?: ContactFormProps): import("react").JSX.Element;
|
|
81
87
|
//# sourceMappingURL=contact-form.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contact-form.d.ts","sourceRoot":"","sources":["../../../src/components/contact/contact-form.tsx"],"names":[],"mappings":"AAwBA,OAAO,
|
|
1
|
+
{"version":3,"file":"contact-form.d.ts","sourceRoot":"","sources":["../../../src/components/contact/contact-form.tsx"],"names":[],"mappings":"AAwBA,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAK1D,OAAO,EAEL,KAAK,eAAe,EAIrB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAIpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAE7E,OAAO,EAEL,KAAK,WAAW,EASjB,MAAM,OAAO,CAAC;AAIf;;;;;GAKG;AACH,MAAM,MAAM,wBAAwB,GAAG,MAAM,GAAG,OAAO,GAAG,aAAa,GAAG,gBAAgB,GAAG,cAAc,GAAG,SAAS,CAAC;AAExH,MAAM,WAAW,gBAAgB;IAC/B;;oEAEgE;IAChE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;8CAE0C;IAC1C,mBAAmB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC;;wDAEoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;+DAE2D;IAC3D,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAE7B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,wBAAwB,EAAE,CAAC;IACxC;;;;0EAIsE;IACtE,aAAa,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IACzC;;;;;;;;;;6DAUyD;IACzD,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,cAAc,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACzF;;;;;4CAKwC;IACxC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;;;8CAI0C;IAC1C,aAAa,CAAC,EAAE,SAAS,CAAC;IAE1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;IACvC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;gDAC4C;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;0EAEsE;IACtE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;yEAGqE;IACrE,MAAM,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;CACtC;AAED,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,mBAAgD,EAChD,MAAM,EACN,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,UAAe,EACf,aAAa,EAAE,iBAAiB,EAChC,cAAc,EACd,aAAa,EACb,kBAA0B,EAC1B,KAAmB,EACnB,QAAQ,EACR,UAA6F,EAC7F,QAAgB,EAChB,SAAiB,EACjB,aAAwB,EACxB,eAAoB,EACpB,WAA4B,EAC5B,kBAAoC,EACpC,kBAAsC,EACtC,mBAAgE,EAChE,MAAM,EAAE,UAAiB,GAC1B,GAAE,gBAAqB,+BA2WvB"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
var
|
|
5
|
-
require('../../chunk-
|
|
4
|
+
var _chunkGCOVKIE7cjs = require('../../chunk-GCOVKIE7.cjs');
|
|
5
|
+
require('../../chunk-AUQ4UITE.cjs');
|
|
6
6
|
require('../../chunk-GQWM3ECA.cjs');
|
|
7
7
|
require('../../chunk-TON3YCCW.cjs');
|
|
8
|
-
require('../../chunk-
|
|
9
|
-
require('../../chunk-
|
|
8
|
+
require('../../chunk-6LWIJJJ6.cjs');
|
|
9
|
+
require('../../chunk-LCMT2GZK.cjs');
|
|
10
10
|
require('../../chunk-JU6SBF3C.cjs');
|
|
11
11
|
require('../../chunk-VTYP25OW.cjs');
|
|
12
12
|
require('../../chunk-QVSVRG7I.cjs');
|
|
@@ -30,5 +30,5 @@ require('../../chunk-I5JVSFNV.cjs');
|
|
|
30
30
|
require('../../chunk-K4RM5MEW.cjs');
|
|
31
31
|
|
|
32
32
|
|
|
33
|
-
exports.ContactForm =
|
|
33
|
+
exports.ContactForm = _chunkGCOVKIE7cjs.ContactForm;
|
|
34
34
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
ContactForm
|
|
4
|
-
} from "../../chunk-
|
|
5
|
-
import "../../chunk-
|
|
4
|
+
} from "../../chunk-OZL6FSB2.js";
|
|
5
|
+
import "../../chunk-GIYAUKCY.js";
|
|
6
6
|
import "../../chunk-L2SLFCXP.js";
|
|
7
7
|
import "../../chunk-BJXDHKUX.js";
|
|
8
|
-
import "../../chunk-
|
|
9
|
-
import "../../chunk-
|
|
8
|
+
import "../../chunk-SGK4Q2W2.js";
|
|
9
|
+
import "../../chunk-JD5TKRCU.js";
|
|
10
10
|
import "../../chunk-GRBZC5N3.js";
|
|
11
11
|
import "../../chunk-MT5A25AX.js";
|
|
12
12
|
import "../../chunk-BXWXBBAC.js";
|
|
@@ -9,15 +9,15 @@
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
var
|
|
13
|
-
require('../../chunk-
|
|
14
|
-
require('../../chunk-
|
|
15
|
-
require('../../chunk-
|
|
16
|
-
require('../../chunk-
|
|
12
|
+
var _chunkTT6O7BUZcjs = require('../../chunk-TT6O7BUZ.cjs');
|
|
13
|
+
require('../../chunk-SYTDEWZJ.cjs');
|
|
14
|
+
require('../../chunk-FK3VSQ35.cjs');
|
|
15
|
+
require('../../chunk-U7BJC4WF.cjs');
|
|
16
|
+
require('../../chunk-AUQ4UITE.cjs');
|
|
17
17
|
require('../../chunk-GQWM3ECA.cjs');
|
|
18
18
|
require('../../chunk-TON3YCCW.cjs');
|
|
19
|
-
require('../../chunk-
|
|
20
|
-
require('../../chunk-
|
|
19
|
+
require('../../chunk-6LWIJJJ6.cjs');
|
|
20
|
+
require('../../chunk-LCMT2GZK.cjs');
|
|
21
21
|
require('../../chunk-JU6SBF3C.cjs');
|
|
22
22
|
require('../../chunk-VTYP25OW.cjs');
|
|
23
23
|
require('../../chunk-QVSVRG7I.cjs');
|
|
@@ -48,5 +48,5 @@ require('../../chunk-K4RM5MEW.cjs');
|
|
|
48
48
|
|
|
49
49
|
|
|
50
50
|
|
|
51
|
-
exports.DocNavigationProvider =
|
|
51
|
+
exports.DocNavigationProvider = _chunkTT6O7BUZcjs.DocNavigationProvider; exports.DocViewer = _chunkTT6O7BUZcjs.DocViewer; exports.DocsHubPage = _chunkTT6O7BUZcjs.DocsHubPage; exports.EmbedSkeleton = _chunkTT6O7BUZcjs.EmbedSkeleton; exports.MarkdownSkeleton = _chunkTT6O7BUZcjs.MarkdownSkeleton; exports.useDocNavigation = _chunkTT6O7BUZcjs.useDocNavigation; exports.useDocumentTree = _chunkTT6O7BUZcjs.useDocumentTree; exports.useScrollSpy = _chunkTT6O7BUZcjs.useScrollSpy;
|
|
52
52
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -9,15 +9,15 @@ import {
|
|
|
9
9
|
useDocNavigation,
|
|
10
10
|
useDocumentTree,
|
|
11
11
|
useScrollSpy
|
|
12
|
-
} from "../../chunk-
|
|
13
|
-
import "../../chunk-
|
|
14
|
-
import "../../chunk-
|
|
15
|
-
import "../../chunk-
|
|
16
|
-
import "../../chunk-
|
|
12
|
+
} from "../../chunk-Y2ASYQ3P.js";
|
|
13
|
+
import "../../chunk-XMJT3QZ2.js";
|
|
14
|
+
import "../../chunk-OIE6GKS3.js";
|
|
15
|
+
import "../../chunk-UIKMPCHW.js";
|
|
16
|
+
import "../../chunk-GIYAUKCY.js";
|
|
17
17
|
import "../../chunk-L2SLFCXP.js";
|
|
18
18
|
import "../../chunk-BJXDHKUX.js";
|
|
19
|
-
import "../../chunk-
|
|
20
|
-
import "../../chunk-
|
|
19
|
+
import "../../chunk-SGK4Q2W2.js";
|
|
20
|
+
import "../../chunk-JD5TKRCU.js";
|
|
21
21
|
import "../../chunk-GRBZC5N3.js";
|
|
22
22
|
import "../../chunk-MT5A25AX.js";
|
|
23
23
|
import "../../chunk-BXWXBBAC.js";
|
|
@@ -4,7 +4,7 @@ require('../../chunk-UGAHDPNU.cjs');
|
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
|
|
7
|
-
var
|
|
7
|
+
var _chunkSYTDEWZJcjs = require('../../chunk-SYTDEWZJ.cjs');
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
|
|
@@ -25,11 +25,11 @@ var _chunkVZRVQEMTcjs = require('../../chunk-VZRVQEMT.cjs');
|
|
|
25
25
|
|
|
26
26
|
|
|
27
27
|
|
|
28
|
-
var
|
|
28
|
+
var _chunkAUQ4UITEcjs = require('../../chunk-AUQ4UITE.cjs');
|
|
29
29
|
require('../../chunk-GQWM3ECA.cjs');
|
|
30
30
|
require('../../chunk-TON3YCCW.cjs');
|
|
31
|
-
require('../../chunk-
|
|
32
|
-
require('../../chunk-
|
|
31
|
+
require('../../chunk-6LWIJJJ6.cjs');
|
|
32
|
+
require('../../chunk-LCMT2GZK.cjs');
|
|
33
33
|
require('../../chunk-JU6SBF3C.cjs');
|
|
34
34
|
require('../../chunk-VTYP25OW.cjs');
|
|
35
35
|
require('../../chunk-QVSVRG7I.cjs');
|
|
@@ -74,5 +74,5 @@ require('../../chunk-K4RM5MEW.cjs');
|
|
|
74
74
|
|
|
75
75
|
|
|
76
76
|
|
|
77
|
-
exports.ClaudeEmbed =
|
|
77
|
+
exports.ClaudeEmbed = _chunkAUQ4UITEcjs.ClaudeEmbed; exports.EMBED_SIZES = _chunkAUQ4UITEcjs.EMBED_SIZES; exports.EmbedContainer = _chunkAUQ4UITEcjs.EmbedContainer; exports.EmbedIframe = _chunkAUQ4UITEcjs.EmbedIframe; exports.EmbedViewerFrame = _chunkAUQ4UITEcjs.EmbedViewerFrame; exports.FigmaEmbed = _chunkAUQ4UITEcjs.FigmaEmbed; exports.FileDownloadCard = _chunkSYTDEWZJcjs.FileDownloadCard; exports.GoogleSheetsViewer = _chunkSYTDEWZJcjs.GoogleSheetsViewer; exports.LinkPreviewContainer = _chunkAUQ4UITEcjs.LinkPreviewContainer; exports.LinkedInContainer = _chunkAUQ4UITEcjs.LinkedInContainer; exports.LinkedInEmbedClient = _chunkAUQ4UITEcjs.LinkedInEmbedClient; exports.MarkdownImage = _chunkAUQ4UITEcjs.MarkdownImage; exports.OGLinkErrorBoundary = _chunkAUQ4UITEcjs.OGLinkErrorBoundary; exports.OGLinkPreview = _chunkAUQ4UITEcjs.OGLinkPreview; exports.PdfViewer = _chunkSYTDEWZJcjs.PdfViewer; exports.RedditContainer = _chunkAUQ4UITEcjs.RedditContainer; exports.RedditEmbedClient = _chunkAUQ4UITEcjs.RedditEmbedClient; exports.RichMarkdownRuntimeProvider = _chunkAUQ4UITEcjs.RichMarkdownRuntimeProvider; exports.TwitterContainer = _chunkAUQ4UITEcjs.TwitterContainer; exports.TwitterEmbedClient = _chunkAUQ4UITEcjs.TwitterEmbedClient; exports.YouTubeContainer = _chunkAUQ4UITEcjs.YouTubeContainer; exports.useRichMarkdownRuntime = _chunkAUQ4UITEcjs.useRichMarkdownRuntime;
|
|
78
78
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
FileDownloadCard,
|
|
5
5
|
GoogleSheetsViewer,
|
|
6
6
|
PdfViewer
|
|
7
|
-
} from "../../chunk-
|
|
7
|
+
} from "../../chunk-XMJT3QZ2.js";
|
|
8
8
|
import {
|
|
9
9
|
ClaudeEmbed,
|
|
10
10
|
EMBED_SIZES,
|
|
@@ -25,11 +25,11 @@ import {
|
|
|
25
25
|
TwitterEmbedClient,
|
|
26
26
|
YouTubeContainer,
|
|
27
27
|
useRichMarkdownRuntime
|
|
28
|
-
} from "../../chunk-
|
|
28
|
+
} from "../../chunk-GIYAUKCY.js";
|
|
29
29
|
import "../../chunk-L2SLFCXP.js";
|
|
30
30
|
import "../../chunk-BJXDHKUX.js";
|
|
31
|
-
import "../../chunk-
|
|
32
|
-
import "../../chunk-
|
|
31
|
+
import "../../chunk-SGK4Q2W2.js";
|
|
32
|
+
import "../../chunk-JD5TKRCU.js";
|
|
33
33
|
import "../../chunk-GRBZC5N3.js";
|
|
34
34
|
import "../../chunk-MT5A25AX.js";
|
|
35
35
|
import "../../chunk-BXWXBBAC.js";
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
|
|
5
|
-
var
|
|
5
|
+
var _chunkE6B34U5Qcjs = require('../../chunk-E6B34U5Q.cjs');
|
|
6
6
|
require('../../chunk-DOVVKQMZ.cjs');
|
|
7
|
-
require('../../chunk-
|
|
7
|
+
require('../../chunk-AUQ4UITE.cjs');
|
|
8
8
|
require('../../chunk-GQWM3ECA.cjs');
|
|
9
9
|
require('../../chunk-TON3YCCW.cjs');
|
|
10
|
-
require('../../chunk-
|
|
11
|
-
require('../../chunk-
|
|
10
|
+
require('../../chunk-6LWIJJJ6.cjs');
|
|
11
|
+
require('../../chunk-LCMT2GZK.cjs');
|
|
12
12
|
require('../../chunk-JU6SBF3C.cjs');
|
|
13
13
|
require('../../chunk-VTYP25OW.cjs');
|
|
14
14
|
require('../../chunk-QVSVRG7I.cjs');
|
|
@@ -33,5 +33,5 @@ require('../../chunk-K4RM5MEW.cjs');
|
|
|
33
33
|
|
|
34
34
|
|
|
35
35
|
|
|
36
|
-
exports.FaqDocumentPage =
|
|
36
|
+
exports.FaqDocumentPage = _chunkE6B34U5Qcjs.FaqDocumentPage; exports.FaqSection = _chunkE6B34U5Qcjs.FaqSection;
|
|
37
37
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
import {
|
|
3
3
|
FaqDocumentPage,
|
|
4
4
|
FaqSection
|
|
5
|
-
} from "../../chunk-
|
|
5
|
+
} from "../../chunk-INVZNRWB.js";
|
|
6
6
|
import "../../chunk-KKSSA4CS.js";
|
|
7
|
-
import "../../chunk-
|
|
7
|
+
import "../../chunk-GIYAUKCY.js";
|
|
8
8
|
import "../../chunk-L2SLFCXP.js";
|
|
9
9
|
import "../../chunk-BJXDHKUX.js";
|
|
10
|
-
import "../../chunk-
|
|
11
|
-
import "../../chunk-
|
|
10
|
+
import "../../chunk-SGK4Q2W2.js";
|
|
11
|
+
import "../../chunk-JD5TKRCU.js";
|
|
12
12
|
import "../../chunk-GRBZC5N3.js";
|
|
13
13
|
import "../../chunk-MT5A25AX.js";
|
|
14
14
|
import "../../chunk-BXWXBBAC.js";
|