@sonordev/site-kit 4.0.1 → 4.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agent-manifest.json +6 -1
- package/dist/AnalyticsProvider-G5P5RQOA.js +31 -0
- package/dist/{AnalyticsProvider-UE34SYF2.js.map → AnalyticsProvider-G5P5RQOA.js.map} +1 -1
- package/dist/AnalyticsProvider-NGQLQL5N.mjs +10 -0
- package/dist/{AnalyticsProvider-NSXC6IOO.mjs.map → AnalyticsProvider-NGQLQL5N.mjs.map} +1 -1
- package/dist/ChatWidget-AYKZBKJH.js +20 -0
- package/dist/{ChatWidget-OW37OU3Z.js.map → ChatWidget-AYKZBKJH.js.map} +1 -1
- package/dist/ChatWidget-LPFHRK7U.mjs +11 -0
- package/dist/{ChatWidget-ASWCGCJJ.mjs.map → ChatWidget-LPFHRK7U.mjs.map} +1 -1
- package/dist/DatePicker-4WNKNNCV.mjs +4 -0
- package/dist/DatePicker-4WNKNNCV.mjs.map +1 -0
- package/dist/DatePicker-VPZR7RU3.js +13 -0
- package/dist/DatePicker-VPZR7RU3.js.map +1 -0
- package/dist/EngageWidget-HKPAJAMR.js +18 -0
- package/dist/{EngageWidget-MXOCMVBQ.js.map → EngageWidget-HKPAJAMR.js.map} +1 -1
- package/dist/EngageWidget-KDE7BYAK.mjs +9 -0
- package/dist/{EngageWidget-67UZ3P5P.mjs.map → EngageWidget-KDE7BYAK.mjs.map} +1 -1
- package/dist/FileField-DDDNSRMR.js +91 -0
- package/dist/FileField-DDDNSRMR.js.map +1 -0
- package/dist/FileField-SU4HTY4F.mjs +85 -0
- package/dist/FileField-SU4HTY4F.mjs.map +1 -0
- package/dist/{FormSpotlight-6MXGX6TU.mjs → FormSpotlight-B6TJPNYN.mjs} +7 -6
- package/dist/FormSpotlight-B6TJPNYN.mjs.map +1 -0
- package/dist/{FormSpotlight-LOR57ENP.js → FormSpotlight-M4S57VC6.js} +20 -19
- package/dist/FormSpotlight-M4S57VC6.js.map +1 -0
- package/dist/{FormStage-H35FBWTX.js → FormStage-2ASJGNOX.js} +16 -16
- package/dist/FormStage-2ASJGNOX.js.map +1 -0
- package/dist/{FormStage-ZLZD5EW4.mjs → FormStage-GH7SA6FQ.mjs} +6 -6
- package/dist/FormStage-GH7SA6FQ.mjs.map +1 -0
- package/dist/ManagedForm-D2JT3QV3.js +23 -0
- package/dist/ManagedForm-D2JT3QV3.js.map +1 -0
- package/dist/ManagedForm-RCC7NEV2.mjs +14 -0
- package/dist/ManagedForm-RCC7NEV2.mjs.map +1 -0
- package/dist/{SignalCore-HEXXYFSX.mjs → SignalCore-36PY3SRB.mjs} +5 -5
- package/dist/{SignalCore-HEXXYFSX.mjs.map → SignalCore-36PY3SRB.mjs.map} +1 -1
- package/dist/{SignalCore-EUMJIPDK.js → SignalCore-7H4ZGFZO.js} +11 -11
- package/dist/{SignalCore-EUMJIPDK.js.map → SignalCore-7H4ZGFZO.js.map} +1 -1
- package/dist/SitemapSync-AYVBNCH4.js +17 -0
- package/dist/{SitemapSync-HKUEDDG6.js.map → SitemapSync-AYVBNCH4.js.map} +1 -1
- package/dist/SitemapSync-HKAG3JU3.mjs +8 -0
- package/dist/{SitemapSync-T4QDPMFG.mjs.map → SitemapSync-HKAG3JU3.mjs.map} +1 -1
- package/dist/analytics/index.js +9 -9
- package/dist/analytics/index.mjs +4 -4
- package/dist/{chunk-ZGQUIL7L.js → chunk-2ACKOMAL.js} +105 -514
- package/dist/chunk-2ACKOMAL.js.map +1 -0
- package/dist/{chunk-52K556WM.js → chunk-2IH5FM2A.js} +14 -14
- package/dist/{chunk-52K556WM.js.map → chunk-2IH5FM2A.js.map} +1 -1
- package/dist/{chunk-PVE6G5XQ.mjs → chunk-2RJ5UHAC.mjs} +3 -3
- package/dist/{chunk-PVE6G5XQ.mjs.map → chunk-2RJ5UHAC.mjs.map} +1 -1
- package/dist/{chunk-VL2WAC22.js → chunk-3GJBSUVS.js} +14 -14
- package/dist/{chunk-VL2WAC22.js.map → chunk-3GJBSUVS.js.map} +1 -1
- package/dist/chunk-4ROQDPUE.mjs +60 -0
- package/dist/chunk-4ROQDPUE.mjs.map +1 -0
- package/dist/{chunk-4JEJTQYC.mjs → chunk-5GAOZTMW.mjs} +3 -3
- package/dist/{chunk-4JEJTQYC.mjs.map → chunk-5GAOZTMW.mjs.map} +1 -1
- package/dist/{chunk-NU5DJUVI.js → chunk-5JFJJNWS.js} +12 -192
- package/dist/chunk-5JFJJNWS.js.map +1 -0
- package/dist/{chunk-JGTIVQIN.mjs → chunk-7CYSA5EN.mjs} +3 -3
- package/dist/{chunk-JGTIVQIN.mjs.map → chunk-7CYSA5EN.mjs.map} +1 -1
- package/dist/{chunk-CTZHLX2B.mjs → chunk-7JES77WC.mjs} +5 -182
- package/dist/chunk-7JES77WC.mjs.map +1 -0
- package/dist/{chunk-DG34TZ6T.mjs → chunk-A4E6EOU4.mjs} +5 -5
- package/dist/{chunk-DG34TZ6T.mjs.map → chunk-A4E6EOU4.mjs.map} +1 -1
- package/dist/{chunk-YNIZKOEW.js → chunk-A624YYDG.js} +2 -2
- package/dist/{chunk-YNIZKOEW.js.map → chunk-A624YYDG.js.map} +1 -1
- package/dist/chunk-ANTVZSQI.mjs +183 -0
- package/dist/chunk-ANTVZSQI.mjs.map +1 -0
- package/dist/{chunk-2LKWN26R.mjs → chunk-D7IY27X5.mjs} +3 -3
- package/dist/{chunk-2LKWN26R.mjs.map → chunk-D7IY27X5.mjs.map} +1 -1
- package/dist/{chunk-QXIVUWQZ.js → chunk-DAGLPS6P.js} +8 -8
- package/dist/{chunk-QXIVUWQZ.js.map → chunk-DAGLPS6P.js.map} +1 -1
- package/dist/{chunk-XAMUTD4I.mjs → chunk-DBZU2TRZ.mjs} +3 -3
- package/dist/{chunk-XAMUTD4I.mjs.map → chunk-DBZU2TRZ.mjs.map} +1 -1
- package/dist/{chunk-I424AZPT.js → chunk-DCITIONV.js} +4 -4
- package/dist/{chunk-I424AZPT.js.map → chunk-DCITIONV.js.map} +1 -1
- package/dist/chunk-DVYYGHSG.js +285 -0
- package/dist/chunk-DVYYGHSG.js.map +1 -0
- package/dist/{chunk-62QRWS2I.mjs → chunk-FJ5EMPCK.mjs} +8 -8
- package/dist/{chunk-62QRWS2I.mjs.map → chunk-FJ5EMPCK.mjs.map} +1 -1
- package/dist/{chunk-6SHBMFYM.mjs → chunk-FNOCLT4A.mjs} +3 -3
- package/dist/{chunk-6SHBMFYM.mjs.map → chunk-FNOCLT4A.mjs.map} +1 -1
- package/dist/chunk-FQ4BDJXG.js +46 -0
- package/dist/chunk-FQ4BDJXG.js.map +1 -0
- package/dist/{chunk-EDFZ6EMM.js → chunk-FYPA5GLS.js} +15 -15
- package/dist/{chunk-EDFZ6EMM.js.map → chunk-FYPA5GLS.js.map} +1 -1
- package/dist/chunk-G7IMEY5T.mjs +44 -0
- package/dist/chunk-G7IMEY5T.mjs.map +1 -0
- package/dist/chunk-GJVC7KKL.mjs +508 -0
- package/dist/chunk-GJVC7KKL.mjs.map +1 -0
- package/dist/{chunk-Q7HLRTZA.js → chunk-HK33JRWA.js} +16 -16
- package/dist/{chunk-Q7HLRTZA.js.map → chunk-HK33JRWA.js.map} +1 -1
- package/dist/{chunk-ARBOKZAU.mjs → chunk-IUZ2RH4V.mjs} +3 -4
- package/dist/chunk-IUZ2RH4V.mjs.map +1 -0
- package/dist/{chunk-62RQTXHX.js → chunk-L6WWNP2N.js} +5 -5
- package/dist/{chunk-62RQTXHX.js.map → chunk-L6WWNP2N.js.map} +1 -1
- package/dist/chunk-LAWESLXJ.js +511 -0
- package/dist/chunk-LAWESLXJ.js.map +1 -0
- package/dist/{chunk-LYDTOFXJ.mjs → chunk-LB7LHVWI.mjs} +107 -503
- package/dist/chunk-LB7LHVWI.mjs.map +1 -0
- package/dist/{chunk-OIBQYBEL.mjs → chunk-LMKDQCU7.mjs} +3 -3
- package/dist/{chunk-OIBQYBEL.mjs.map → chunk-LMKDQCU7.mjs.map} +1 -1
- package/dist/{chunk-RZW4XVG5.js → chunk-LRHECSZK.js} +14 -14
- package/dist/{chunk-RZW4XVG5.js.map → chunk-LRHECSZK.js.map} +1 -1
- package/dist/{chunk-L5Q2ZJJM.js → chunk-MKQZVTD3.js} +6 -6
- package/dist/{chunk-L5Q2ZJJM.js.map → chunk-MKQZVTD3.js.map} +1 -1
- package/dist/chunk-MU3D5IO7.mjs +283 -0
- package/dist/chunk-MU3D5IO7.mjs.map +1 -0
- package/dist/{chunk-Z74IVGJB.mjs → chunk-MXPGAJLM.mjs} +4 -4
- package/dist/{chunk-Z74IVGJB.mjs.map → chunk-MXPGAJLM.mjs.map} +1 -1
- package/dist/{chunk-7QDTXT4N.js → chunk-NF3QVKWU.js} +6 -7
- package/dist/chunk-NF3QVKWU.js.map +1 -0
- package/dist/chunk-NSIRG3C3.js +148 -0
- package/dist/chunk-NSIRG3C3.js.map +1 -0
- package/dist/{chunk-WHGVQJG4.js → chunk-NTFLRRTQ.js} +8 -8
- package/dist/{chunk-WHGVQJG4.js.map → chunk-NTFLRRTQ.js.map} +1 -1
- package/dist/{chunk-NDB7EIOI.js → chunk-O554YMPI.js} +3 -3
- package/dist/{chunk-NDB7EIOI.js.map → chunk-O554YMPI.js.map} +1 -1
- package/dist/chunk-PKCEJWLD.mjs +6 -0
- package/dist/{chunk-6GFEJH4F.mjs.map → chunk-PKCEJWLD.mjs.map} +1 -1
- package/dist/{chunk-MJY7LYOV.mjs → chunk-QYLGVXRX.mjs} +4 -4
- package/dist/{chunk-MJY7LYOV.mjs.map → chunk-QYLGVXRX.mjs.map} +1 -1
- package/dist/chunk-R35CW6MM.js +8 -0
- package/dist/{chunk-34WY5XN2.js.map → chunk-R35CW6MM.js.map} +1 -1
- package/dist/chunk-S4U44UUD.mjs +138 -0
- package/dist/chunk-S4U44UUD.mjs.map +1 -0
- package/dist/{chunk-LDRE2ELU.js → chunk-SEH2K6NG.js} +12 -12
- package/dist/{chunk-LDRE2ELU.js.map → chunk-SEH2K6NG.js.map} +1 -1
- package/dist/chunk-TH2ANDPK.mjs +104 -0
- package/dist/chunk-TH2ANDPK.mjs.map +1 -0
- package/dist/{chunk-KHJYA64F.mjs → chunk-U2CJZ6O5.mjs} +2 -2
- package/dist/{chunk-KHJYA64F.mjs.map → chunk-U2CJZ6O5.mjs.map} +1 -1
- package/dist/{chunk-5GPFPMDQ.mjs → chunk-UDHQNYBD.mjs} +4 -4
- package/dist/{chunk-5GPFPMDQ.mjs.map → chunk-UDHQNYBD.mjs.map} +1 -1
- package/dist/chunk-UTANIZUO.js +110 -0
- package/dist/chunk-UTANIZUO.js.map +1 -0
- package/dist/{chunk-QABZPSHD.js → chunk-VJAUA77N.js} +5 -5
- package/dist/{chunk-QABZPSHD.js.map → chunk-VJAUA77N.js.map} +1 -1
- package/dist/{chunk-CBUK2XB3.js → chunk-VOYLJCHB.js} +9 -9
- package/dist/{chunk-CBUK2XB3.js.map → chunk-VOYLJCHB.js.map} +1 -1
- package/dist/{chunk-XCCW4Y3B.mjs → chunk-VPBLW4ZN.mjs} +5 -5
- package/dist/{chunk-XCCW4Y3B.mjs.map → chunk-VPBLW4ZN.mjs.map} +1 -1
- package/dist/{chunk-6535RSF5.mjs → chunk-WJJQWAG2.mjs} +3 -3
- package/dist/{chunk-6535RSF5.mjs.map → chunk-WJJQWAG2.mjs.map} +1 -1
- package/dist/chunk-WNUUVBD7.js +64 -0
- package/dist/chunk-WNUUVBD7.js.map +1 -0
- package/dist/{chunk-DPTNQVMK.mjs → chunk-XCCMVJUA.mjs} +3 -3
- package/dist/{chunk-DPTNQVMK.mjs.map → chunk-XCCMVJUA.mjs.map} +1 -1
- package/dist/chunk-XRQ47XDA.js +188 -0
- package/dist/chunk-XRQ47XDA.js.map +1 -0
- package/dist/{chunk-YGWWLTH5.js → chunk-ZDXGB3UC.js} +4 -4
- package/dist/{chunk-YGWWLTH5.js.map → chunk-ZDXGB3UC.js.map} +1 -1
- package/dist/cli/index.js +3 -3
- package/dist/cli/index.mjs +1 -1
- package/dist/client/index.js +5 -5
- package/dist/client/index.mjs +4 -4
- package/dist/cms/index.d.ts +23 -0
- package/dist/cms/index.d.ts.map +1 -1
- package/dist/cms/index.js +2 -2
- package/dist/cms/index.mjs +1 -1
- package/dist/cms/server-api.d.ts.map +1 -1
- package/dist/cms/server.js +4 -4
- package/dist/cms/server.mjs +1 -1
- package/dist/commerce/index.js +56 -56
- package/dist/commerce/index.mjs +5 -5
- package/dist/engage/EngageWidget.d.ts.map +1 -1
- package/dist/engage/dependency-contract.test.d.ts +2 -0
- package/dist/engage/dependency-contract.test.d.ts.map +1 -0
- package/dist/engage/index.js +10 -9
- package/dist/engage/index.js.map +1 -1
- package/dist/engage/index.mjs +7 -6
- package/dist/engage/index.mjs.map +1 -1
- package/dist/engage/socket-loader.d.ts +13 -0
- package/dist/engage/socket-loader.d.ts.map +1 -1
- package/dist/fleet/index.js +9 -9
- package/dist/fleet/index.mjs +5 -5
- package/dist/forms/FileField.d.ts +31 -0
- package/dist/forms/FileField.d.ts.map +1 -0
- package/dist/forms/FormClient.d.ts +10 -1
- package/dist/forms/FormClient.d.ts.map +1 -1
- package/dist/forms/FormEnhancer.d.ts +72 -0
- package/dist/forms/FormEnhancer.d.ts.map +1 -0
- package/dist/forms/FormField.d.ts +26 -3
- package/dist/forms/FormField.d.ts.map +1 -1
- package/dist/forms/FormSpotlight.d.ts.map +1 -1
- package/dist/forms/FormStage.d.ts.map +1 -1
- package/dist/forms/HoneypotField.d.ts +8 -2
- package/dist/forms/HoneypotField.d.ts.map +1 -1
- package/dist/forms/ManagedForm.d.ts +1 -1
- package/dist/forms/ManagedForm.d.ts.map +1 -1
- package/dist/forms/ServerForm.d.ts +73 -0
- package/dist/forms/ServerForm.d.ts.map +1 -0
- package/dist/forms/StaticForm.d.ts +50 -0
- package/dist/forms/StaticForm.d.ts.map +1 -0
- package/dist/forms/field-controls.d.ts +7 -0
- package/dist/forms/field-controls.d.ts.map +1 -0
- package/dist/forms/index.d.ts +7 -0
- package/dist/forms/index.d.ts.map +1 -1
- package/dist/forms/index.js +33 -557
- package/dist/forms/index.js.map +1 -1
- package/dist/forms/index.mjs +14 -550
- package/dist/forms/index.mjs.map +1 -1
- package/dist/forms/normalize-config.d.ts +18 -0
- package/dist/forms/normalize-config.d.ts.map +1 -0
- package/dist/forms/server.d.ts +5 -0
- package/dist/forms/server.d.ts.map +1 -1
- package/dist/forms/server.js +47 -0
- package/dist/forms/server.js.map +1 -1
- package/dist/forms/server.mjs +44 -1
- package/dist/forms/server.mjs.map +1 -1
- package/dist/forms/static-form.test.d.ts +2 -0
- package/dist/forms/static-form.test.d.ts.map +1 -0
- package/dist/forms/static.d.ts +17 -0
- package/dist/forms/static.d.ts.map +1 -0
- package/dist/forms/static.js +20 -0
- package/dist/forms/static.js.map +1 -0
- package/dist/forms/static.mjs +11 -0
- package/dist/forms/static.mjs.map +1 -0
- package/dist/forms/types.d.ts +7 -0
- package/dist/forms/types.d.ts.map +1 -1
- package/dist/forms/useForm.d.ts.map +1 -1
- package/dist/images/index.js +11 -11
- package/dist/images/index.mjs +4 -4
- package/dist/index.js +109 -109
- package/dist/index.mjs +9 -9
- package/dist/layout/client.js +9 -9
- package/dist/layout/client.mjs +8 -8
- package/dist/layout/index.js +11 -11
- package/dist/layout/index.mjs +9 -9
- package/dist/maps/index.js +5 -5
- package/dist/maps/index.mjs +3 -3
- package/dist/search/index.js +4 -4
- package/dist/search/index.mjs +3 -3
- package/dist/seo/client.js +5 -5
- package/dist/seo/client.mjs +4 -4
- package/dist/seo/index.js +14 -14
- package/dist/seo/index.mjs +6 -6
- package/dist/seo/server.js +5 -5
- package/dist/seo/server.mjs +1 -1
- package/dist/server/index.js +3 -3
- package/dist/server/index.mjs +2 -2
- package/dist/shared/build-entries.d.ts +6 -0
- package/dist/shared/build-entries.d.ts.map +1 -1
- package/dist/shared/no-cjs-require.test.d.ts +2 -0
- package/dist/shared/no-cjs-require.test.d.ts.map +1 -0
- package/dist/shared/version.d.ts +1 -1
- package/dist/signal/index.js +11 -11
- package/dist/signal/index.mjs +2 -2
- package/dist/{socket-loader-YEAQZ3XC.js → socket-loader-2NYBMBFQ.js} +2 -2
- package/dist/socket-loader-2NYBMBFQ.js.map +1 -0
- package/dist/{socket-loader-JHNN2QK4.mjs → socket-loader-JA2DI2RT.mjs} +2 -2
- package/dist/socket-loader-JA2DI2RT.mjs.map +1 -0
- package/dist/sync/index.js +16 -16
- package/dist/sync/index.mjs +4 -4
- package/package.json +28 -11
- package/dist/AnalyticsProvider-NSXC6IOO.mjs +0 -10
- package/dist/AnalyticsProvider-UE34SYF2.js +0 -31
- package/dist/ChatWidget-ASWCGCJJ.mjs +0 -10
- package/dist/ChatWidget-OW37OU3Z.js +0 -19
- package/dist/EngageWidget-67UZ3P5P.mjs +0 -9
- package/dist/EngageWidget-MXOCMVBQ.js +0 -18
- package/dist/FormSpotlight-6MXGX6TU.mjs.map +0 -1
- package/dist/FormSpotlight-LOR57ENP.js.map +0 -1
- package/dist/FormStage-H35FBWTX.js.map +0 -1
- package/dist/FormStage-ZLZD5EW4.mjs.map +0 -1
- package/dist/SitemapSync-HKUEDDG6.js +0 -17
- package/dist/SitemapSync-T4QDPMFG.mjs +0 -8
- package/dist/chunk-34WY5XN2.js +0 -8
- package/dist/chunk-6GFEJH4F.mjs +0 -6
- package/dist/chunk-7QDTXT4N.js.map +0 -1
- package/dist/chunk-ARBOKZAU.mjs.map +0 -1
- package/dist/chunk-CTZHLX2B.mjs.map +0 -1
- package/dist/chunk-LYDTOFXJ.mjs.map +0 -1
- package/dist/chunk-NU5DJUVI.js.map +0 -1
- package/dist/chunk-ZGQUIL7L.js.map +0 -1
- package/dist/socket-loader-JHNN2QK4.mjs.map +0 -1
- package/dist/socket-loader-YEAQZ3XC.js.map +0 -1
package/dist/fleet/index.mjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
export { FLEET_HEARTBEAT_PATH, FleetHeartbeat, detectNextVersion, sendFleetHeartbeat } from '../chunk-
|
|
3
|
-
import '../chunk-ZVBLXXNJ.mjs';
|
|
2
|
+
export { FLEET_HEARTBEAT_PATH, FleetHeartbeat, detectNextVersion, sendFleetHeartbeat } from '../chunk-VPBLW4ZN.mjs';
|
|
4
3
|
export { FLEET_CONTRACT_VERSION, FLEET_MODULES, FLEET_MODULES_MAX, FLEET_SITE_MAX_LENGTH, FLEET_VERSION_MAX_LENGTH, FLEET_VERSION_PATTERN, buildFleetHeartbeatPayload, isFleetModule, normalizeFleetModules, normalizeFleetSite, sanitizeFleetVersion } from '../chunk-ZPLN537Q.mjs';
|
|
5
|
-
import '../chunk-
|
|
6
|
-
import '../chunk-
|
|
7
|
-
import '../chunk-
|
|
4
|
+
import '../chunk-ZVBLXXNJ.mjs';
|
|
5
|
+
import '../chunk-UDHQNYBD.mjs';
|
|
6
|
+
import '../chunk-7CYSA5EN.mjs';
|
|
7
|
+
import '../chunk-PKCEJWLD.mjs';
|
|
8
8
|
import '../chunk-BEXTDHO4.mjs';
|
|
9
9
|
//# sourceMappingURL=index.mjs.map
|
|
10
10
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File upload field — the one field type that cannot render on the server.
|
|
3
|
+
*
|
|
4
|
+
* It holds upload state and reads the browser-published credential globals, so
|
|
5
|
+
* it lives here rather than in FormField.tsx. Pulling it out is what lets
|
|
6
|
+
* FormField drop its `'use client'` directive and render inside a Server
|
|
7
|
+
* Component (see StaticForm.tsx); a form WITHOUT a file field now ships no
|
|
8
|
+
* field-rendering JavaScript at all.
|
|
9
|
+
*
|
|
10
|
+
* Uploads the chosen file to the Sonor API, which stores it and returns a
|
|
11
|
+
* public URL — that URL becomes the field value, so large files never touch
|
|
12
|
+
* the JSON submission body. The value stays empty until the upload succeeds,
|
|
13
|
+
* so a required file field correctly blocks submission until the upload
|
|
14
|
+
* completes (rather than submitting a useless bare filename).
|
|
15
|
+
*
|
|
16
|
+
* Note: forms containing a file field are NOT native-POST eligible (see
|
|
17
|
+
* native-fallback.tsx) — a form-encoded POST cannot run this upload — so the
|
|
18
|
+
* server shell renders a plain disabled-looking file input and the real
|
|
19
|
+
* control arrives with the enhancement.
|
|
20
|
+
*/
|
|
21
|
+
import React from 'react';
|
|
22
|
+
import type { FormField as FormFieldType } from './types';
|
|
23
|
+
export interface FileFieldProps {
|
|
24
|
+
field: FormFieldType;
|
|
25
|
+
inputId: string;
|
|
26
|
+
classPrefix: string;
|
|
27
|
+
baseInputStyle: React.CSSProperties;
|
|
28
|
+
onChange: (value: unknown) => void;
|
|
29
|
+
}
|
|
30
|
+
export declare function FileField({ field, inputId, classPrefix, baseInputStyle, onChange, }: FileFieldProps): React.JSX.Element;
|
|
31
|
+
//# sourceMappingURL=FileField.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileField.d.ts","sourceRoot":"","sources":["../../src/forms/FileField.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,KAAK,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,SAAS,CAAA;AAGzD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,aAAa,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,EAAE,KAAK,CAAC,aAAa,CAAA;IACnC,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;CACnC;AAED,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,OAAO,EACP,WAAW,EACX,cAAc,EACd,QAAQ,GACT,EAAE,cAAc,qBA6ChB"}
|
|
@@ -12,6 +12,15 @@ interface FormClientProps {
|
|
|
12
12
|
onSuccess?: (submission: FormSubmission) => void;
|
|
13
13
|
onError?: (error: Error) => void;
|
|
14
14
|
customRender?: (props: FormRenderProps) => React.ReactNode;
|
|
15
|
+
/**
|
|
16
|
+
* Pre-fill field values by slug. For context the page already has and the
|
|
17
|
+
* visitor should not retype: an email captured earlier in a conversation,
|
|
18
|
+
* the service they were reading about, an estimate the assistant just
|
|
19
|
+
* produced. Applied ON TOP of each field's configured default_value.
|
|
20
|
+
*
|
|
21
|
+
* Unknown slugs are ignored, so a stale key cannot break the form.
|
|
22
|
+
*/
|
|
23
|
+
defaultValues?: Record<string, unknown>;
|
|
15
24
|
/**
|
|
16
25
|
* Which rendering the form gets. Defaults to the form's `layout` config
|
|
17
26
|
* (`layout: 'stage'` in Sonor flips a form to stage with no site deploy),
|
|
@@ -21,6 +30,6 @@ interface FormClientProps {
|
|
|
21
30
|
/** Absolute page URL for the no-JS 303 to land on (see native-fallback). */
|
|
22
31
|
nativeReturnTo?: string;
|
|
23
32
|
}
|
|
24
|
-
export declare function FormClient({ config, className, onSuccess, onError, customRender, experience, nativeReturnTo, }: FormClientProps): React.JSX.Element;
|
|
33
|
+
export declare function FormClient({ config, className, onSuccess, onError, customRender, experience, nativeReturnTo, defaultValues, }: FormClientProps): React.JSX.Element;
|
|
25
34
|
export {};
|
|
26
35
|
//# sourceMappingURL=FormClient.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormClient.d.ts","sourceRoot":"","sources":["../../src/forms/FormClient.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAA4D,MAAM,OAAO,CAAA;AAIhF,OAAO,KAAK,EACV,iBAAiB,EAEjB,eAAe,EACf,cAAc,EACf,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"FormClient.d.ts","sourceRoot":"","sources":["../../src/forms/FormClient.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAA4D,MAAM,OAAO,CAAA;AAIhF,OAAO,KAAK,EACV,iBAAiB,EAEjB,eAAe,EACf,cAAc,EACf,MAAM,SAAS,CAAA;AAOhB,OAAO,KAAK,EAAyB,cAAc,EAAE,MAAM,SAAS,CAAA;AAEpE,UAAU,eAAe;IACvB,MAAM,EAAE,iBAAiB,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,KAAK,IAAI,CAAA;IAChD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IAChC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,KAAK,CAAC,SAAS,CAAA;IAC1D;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACvC;;;;OAIG;IACH,UAAU,CAAC,EAAE,cAAc,CAAA;IAC3B,4EAA4E;IAC5E,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,wBAAgB,UAAU,CAAC,EACzB,MAAM,EACN,SAAS,EACT,SAAS,EACT,OAAO,EACP,YAAY,EACZ,UAAU,EACV,cAAc,EACd,aAAa,GACd,EAAE,eAAe,qBA6nBjB"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FormEnhancer — the only client code a managed form needs up front.
|
|
3
|
+
*
|
|
4
|
+
* Renders the server-rendered shell (<StaticForm>, passed as `children`) until
|
|
5
|
+
* an idle/first-interaction gate fires, then lazy-imports the interactive form
|
|
6
|
+
* and swaps it in. Everything expensive — validation, conditional logic,
|
|
7
|
+
* spotlight/stage, celebration, momentum — lives behind that dynamic import,
|
|
8
|
+
* so a page ships this boundary and nothing else in its initial chunk set.
|
|
9
|
+
*
|
|
10
|
+
* The shell is a REAL form the whole time (native action + signed token), so
|
|
11
|
+
* the progression is:
|
|
12
|
+
*
|
|
13
|
+
* no JS at all -> shell, submits natively. Works.
|
|
14
|
+
* JS, pre-idle -> shell, submits natively. Works.
|
|
15
|
+
* JS, post-idle -> enhanced form, submits over JSON. Works, with delight.
|
|
16
|
+
* chunk 404s -> shell stays. Works. (Never left blank.)
|
|
17
|
+
*
|
|
18
|
+
* That last line is the invariant to protect: the shell is only removed once
|
|
19
|
+
* the enhancement has actually rendered. Do not "hide the shell then load" —
|
|
20
|
+
* a CDN hiccup would leave a visitor staring at an empty box where the form
|
|
21
|
+
* used to be.
|
|
22
|
+
*
|
|
23
|
+
* ── Entrance animation ──────────────────────────────────────────────────
|
|
24
|
+
*
|
|
25
|
+
* Above-the-fold forms upgrade while the visitor is looking at them, so the
|
|
26
|
+
* swap must not pop. The wrapper carries `data-sk-form-mount="shell"` and
|
|
27
|
+
* flips to `"enhanced"`, and the enhanced form gets `data-sk-enter` for one
|
|
28
|
+
* frame, so a site can style the transition entirely in CSS:
|
|
29
|
+
*
|
|
30
|
+
* [data-sk-form-mount] { transition: opacity .35s ease }
|
|
31
|
+
* [data-sk-form-mount="shell"] { opacity: .6 }
|
|
32
|
+
*
|
|
33
|
+
* Defaults ship as CSS variables rather than hard-coded values:
|
|
34
|
+
*
|
|
35
|
+
* --sk-form-enter-duration (default 320ms)
|
|
36
|
+
* --sk-form-enter-easing (default cubic-bezier(.22,1,.36,1))
|
|
37
|
+
* --sk-form-enter-distance (default 6px)
|
|
38
|
+
*
|
|
39
|
+
* `enter="none"` opts out entirely; `enter="custom"` emits the data
|
|
40
|
+
* attributes but no site-kit styles, leaving the animation to the site.
|
|
41
|
+
* Every default is collapsed by prefers-reduced-motion.
|
|
42
|
+
*/
|
|
43
|
+
import React from 'react';
|
|
44
|
+
import type { FormExperience, FormSubmission } from './types';
|
|
45
|
+
export type FormEnterAnimation = 'fade' | 'none' | 'custom';
|
|
46
|
+
export interface FormEnhancerProps {
|
|
47
|
+
formId: string;
|
|
48
|
+
/** Server-fetched raw config — hands the enhancement its fields instantly. */
|
|
49
|
+
initialConfig?: Record<string, unknown> | null;
|
|
50
|
+
className?: string;
|
|
51
|
+
nativeReturnTo?: string;
|
|
52
|
+
experience?: FormExperience;
|
|
53
|
+
/** Pre-fill field values by slug. See ManagedForm.defaultValues. */
|
|
54
|
+
defaultValues?: Record<string, unknown>;
|
|
55
|
+
onSuccess?: (submission: FormSubmission) => void;
|
|
56
|
+
onError?: (error: Error) => void;
|
|
57
|
+
/**
|
|
58
|
+
* How the enhanced form arrives. 'fade' (default) crossfades and lifts it
|
|
59
|
+
* into place; 'none' swaps instantly; 'custom' emits the data attributes
|
|
60
|
+
* and no styles so the site owns the animation.
|
|
61
|
+
*/
|
|
62
|
+
enter?: FormEnterAnimation;
|
|
63
|
+
/**
|
|
64
|
+
* Set false to enhance immediately instead of waiting for idle. Only worth
|
|
65
|
+
* it for a form that is the entire point of the page AND above the fold.
|
|
66
|
+
*/
|
|
67
|
+
defer?: boolean;
|
|
68
|
+
/** The server-rendered <StaticForm>. Shown until the enhancement mounts. */
|
|
69
|
+
children: React.ReactNode;
|
|
70
|
+
}
|
|
71
|
+
export declare function FormEnhancer({ formId, initialConfig, className, nativeReturnTo, experience, defaultValues, onSuccess, onError, enter, defer, children, }: FormEnhancerProps): React.JSX.Element;
|
|
72
|
+
//# sourceMappingURL=FormEnhancer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FormEnhancer.d.ts","sourceRoot":"","sources":["../../src/forms/FormEnhancer.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAEH,OAAO,KAAsD,MAAM,OAAO,CAAA;AAE1E,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAO7D,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAA;AAE3D,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAA;IACd,8EAA8E;IAC9E,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,UAAU,CAAC,EAAE,cAAc,CAAA;IAC3B,oEAAoE;IACpE,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACvC,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,KAAK,IAAI,CAAA;IAChD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IAChC;;;;OAIG;IACH,KAAK,CAAC,EAAE,kBAAkB,CAAA;IAC1B;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,4EAA4E;IAC5E,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC1B;AAED,wBAAgB,YAAY,CAAC,EAC3B,MAAM,EACN,aAAa,EACb,SAAS,EACT,cAAc,EACd,UAAU,EACV,aAAa,EACb,SAAS,EACT,OAAO,EACP,KAAc,EACd,KAAY,EACZ,QAAQ,GACT,EAAE,iBAAiB,qBAiCnB"}
|
|
@@ -29,12 +29,35 @@ interface FormFieldProps {
|
|
|
29
29
|
/** Render the valid-state tick (touched + validated). Text-like fields only. */
|
|
30
30
|
showValid?: boolean;
|
|
31
31
|
field: FormFieldType;
|
|
32
|
-
value
|
|
32
|
+
value?: unknown;
|
|
33
33
|
error?: string;
|
|
34
|
-
|
|
34
|
+
/**
|
|
35
|
+
* Omit to render STATIC mode: uncontrolled native controls with
|
|
36
|
+
* `defaultValue`, no React state, no event handlers. That is what lets a
|
|
37
|
+
* Server Component render a complete, submittable form with zero client
|
|
38
|
+
* JavaScript (see StaticForm.tsx). Pass a handler for the usual controlled
|
|
39
|
+
* behaviour once the enhancement hydrates.
|
|
40
|
+
*
|
|
41
|
+
* The two modes MUST emit the same element/class structure — the
|
|
42
|
+
* enhancement replaces the shell in place, and a mismatch shows up as a
|
|
43
|
+
* visible jump. field-parity.test.tsx pins this.
|
|
44
|
+
*/
|
|
45
|
+
onChange?: (value: unknown) => void;
|
|
35
46
|
/** Optional class name prefix for custom styling */
|
|
36
47
|
classPrefix?: string;
|
|
48
|
+
/**
|
|
49
|
+
* Client-only controls, injected by FormClient. DatePicker and FileField
|
|
50
|
+
* carry hooks; importing them here would pull them into this module's chunk
|
|
51
|
+
* and the build would stamp the whole thing `'use client'`, so a Server
|
|
52
|
+
* Component rendering one text input would ship the date picker too.
|
|
53
|
+
* Injection keeps this file hook-free and therefore server-renderable.
|
|
54
|
+
* Absent = static mode falls back to the native control.
|
|
55
|
+
*/
|
|
56
|
+
controls?: {
|
|
57
|
+
Date?: React.ComponentType<any>;
|
|
58
|
+
File?: React.ComponentType<any>;
|
|
59
|
+
};
|
|
37
60
|
}
|
|
38
|
-
export declare function FormField({ field, value, error, onChange, classPrefix, showValid }: FormFieldProps): React.JSX.Element;
|
|
61
|
+
export declare function FormField({ field, value, error, onChange, classPrefix, showValid, controls }: FormFieldProps): React.JSX.Element;
|
|
39
62
|
export {};
|
|
40
63
|
//# sourceMappingURL=FormField.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormField.d.ts","sourceRoot":"","sources":["../../src/forms/FormField.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;
|
|
1
|
+
{"version":3,"file":"FormField.d.ts","sourceRoot":"","sources":["../../src/forms/FormField.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,SAAS,CAAA;AAEzD,UAAU,cAAc;IACtB,gFAAgF;IAChF,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,KAAK,EAAE,aAAa,CAAA;IACpB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IACnC,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE;QACT,IAAI,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;QAC/B,IAAI,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;KAChC,CAAA;CACF;AA4BD,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAuB,EAAG,SAAS,EAAE,QAAQ,EAAE,EAAE,cAAc,qBA4WzH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormSpotlight.d.ts","sourceRoot":"","sources":["../../src/forms/FormSpotlight.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,KAA4D,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"FormSpotlight.d.ts","sourceRoot":"","sources":["../../src/forms/FormSpotlight.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,KAA4D,MAAM,OAAO,CAAA;AAYhF,OAAO,KAAK,EAAE,qBAAqB,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,SAAS,CAAA;AA+BhF;;6BAE6B;AAC7B,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,CAeR;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,aAAa,EAAE,EACvB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,GAAG,IAAI,CAuEf;AAgID,wBAAgB,UAAU,sBAEzB;AAsBD,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,MAAM,EACN,MAAM,EACN,OAAO,EACP,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,SAAS,EACT,aAAa,EACb,aAAa,EACb,cAAc,EACd,eAAe,EACf,eAAe,EACf,MAAM,EACN,eAAe,EACf,QAAQ,GACT,EAAE,qBAAqB,qBA+kBvB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormStage.d.ts","sourceRoot":"","sources":["../../src/forms/FormStage.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAA4D,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"FormStage.d.ts","sourceRoot":"","sources":["../../src/forms/FormStage.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAA4D,MAAM,OAAO,CAAA;AAahF,OAAO,KAAK,EAAE,qBAAqB,EAA8B,MAAM,SAAS,CAAA;AAKhF,wBAAgB,SAAS,CAAC,EACxB,MAAM,EACN,MAAM,EACN,MAAM,EACN,OAAO,EACP,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,SAAS,EACT,aAAa,EACb,aAAa,EACb,cAAc,EACd,eAAe,EACf,eAAe,EACf,MAAM,EACN,eAAe,EACf,QAAQ,GACT,EAAE,qBAAqB,qBA2evB"}
|
|
@@ -23,8 +23,14 @@
|
|
|
23
23
|
import React from 'react';
|
|
24
24
|
export interface HoneypotFieldProps {
|
|
25
25
|
name: string;
|
|
26
|
-
value
|
|
27
|
-
|
|
26
|
+
value?: string;
|
|
27
|
+
/**
|
|
28
|
+
* Omit for STATIC mode — an uncontrolled trap a Server Component can render.
|
|
29
|
+
* The trap's whole job is server-side (the value is read off the submission
|
|
30
|
+
* and stripped), so it needs no client state to work; the controlled form is
|
|
31
|
+
* only so the hydrated JSON path can read it back out of React state.
|
|
32
|
+
*/
|
|
33
|
+
onChange?: (value: string) => void;
|
|
28
34
|
}
|
|
29
35
|
export declare function HoneypotField({ name, value, onChange }: HoneypotFieldProps): React.JSX.Element;
|
|
30
36
|
//# sourceMappingURL=HoneypotField.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HoneypotField.d.ts","sourceRoot":"","sources":["../../src/forms/HoneypotField.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"HoneypotField.d.ts","sourceRoot":"","sources":["../../src/forms/HoneypotField.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CACnC;AAED,wBAAgB,aAAa,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,kBAAkB,qBAyC1E"}
|
|
@@ -4,5 +4,5 @@
|
|
|
4
4
|
* Fetches form config from Portal API and renders fields with validation
|
|
5
5
|
*/
|
|
6
6
|
import type { ManagedFormProps } from './types';
|
|
7
|
-
export declare function ManagedForm({ formId, projectId, className, onSuccess, onError, initialConfig, experience, nativeReturnTo, children, }: ManagedFormProps): import("react").JSX.Element;
|
|
7
|
+
export declare function ManagedForm({ formId, projectId, className, onSuccess, onError, initialConfig, experience, nativeReturnTo, defaultValues, children, }: ManagedFormProps): import("react").JSX.Element;
|
|
8
8
|
//# sourceMappingURL=ManagedForm.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ManagedForm.d.ts","sourceRoot":"","sources":["../../src/forms/ManagedForm.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAQ/C,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,SAAS,EACT,SAAS,EACT,SAAS,EACT,OAAO,EACP,aAAa,EACb,UAAU,EACV,cAAc,EACd,QAAQ,GACT,EAAE,gBAAgB,+
|
|
1
|
+
{"version":3,"file":"ManagedForm.d.ts","sourceRoot":"","sources":["../../src/forms/ManagedForm.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAQ/C,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,SAAS,EACT,SAAS,EACT,SAAS,EACT,OAAO,EACP,aAAa,EACb,UAAU,EACV,cAAc,EACd,aAAa,EACb,QAAQ,GACT,EAAE,gBAAgB,+BA2ClB"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ServerForm — the managed form as a Server Component. This is the one to use.
|
|
3
|
+
*
|
|
4
|
+
* ```tsx
|
|
5
|
+
* import { ServerForm } from '@sonordev/site-kit/forms/server'
|
|
6
|
+
*
|
|
7
|
+
* export default function ContactPage() {
|
|
8
|
+
* return <ServerForm formId="contact" returnTo="https://example.com/contact/" />
|
|
9
|
+
* }
|
|
10
|
+
* ```
|
|
11
|
+
*
|
|
12
|
+
* That single line fetches the config on the server, renders a complete
|
|
13
|
+
* working `<form>` into the HTML, and upgrades it to the interactive
|
|
14
|
+
* experience at idle. No `'use client'` in the page, no config flash, no
|
|
15
|
+
* "Loading form...", and no forms runtime in the initial chunk set.
|
|
16
|
+
*
|
|
17
|
+
* What each layer is for:
|
|
18
|
+
*
|
|
19
|
+
* getFormConfig — server fetch, ISR-cached. No client round trip.
|
|
20
|
+
* StaticForm — real HTML form: fields, honeypot, signed native token.
|
|
21
|
+
* Submits without JavaScript.
|
|
22
|
+
* FormEnhancer — ~1 KB client boundary. Lazy-loads the interactive form
|
|
23
|
+
* at idle and swaps it in over the shell.
|
|
24
|
+
*
|
|
25
|
+
* Set `enhance={false}` for a form that should never load JavaScript at all —
|
|
26
|
+
* the native POST handles it, and the page ships zero form script.
|
|
27
|
+
*
|
|
28
|
+
* The client `ManagedForm` from `@sonordev/site-kit/forms` still exists and
|
|
29
|
+
* still works; reach for it only when the form must live inside an existing
|
|
30
|
+
* client component (a modal, a chat panel) where a Server Component cannot go.
|
|
31
|
+
*/
|
|
32
|
+
import React from 'react';
|
|
33
|
+
import { type FormEnterAnimation } from './FormEnhancer';
|
|
34
|
+
import { type GetFormConfigOptions } from './server';
|
|
35
|
+
import type { FormExperience } from './types';
|
|
36
|
+
export interface ServerFormProps {
|
|
37
|
+
/** Form slug or id from Sonor. */
|
|
38
|
+
formId: string;
|
|
39
|
+
/**
|
|
40
|
+
* Absolute URL the no-JS submission should return to — normally the page
|
|
41
|
+
* hosting the form. Without it sonor-api falls back to the Referer origin,
|
|
42
|
+
* which lands the visitor on the site's homepage rather than back here.
|
|
43
|
+
*/
|
|
44
|
+
returnTo?: string;
|
|
45
|
+
className?: string;
|
|
46
|
+
/** Rendering experience once enhanced. Defaults to the Sonor form config. */
|
|
47
|
+
experience?: FormExperience;
|
|
48
|
+
/** Entrance animation for the idle upgrade. See FormEnhancer. */
|
|
49
|
+
enter?: FormEnterAnimation;
|
|
50
|
+
/**
|
|
51
|
+
* false = ship no form JavaScript at all. The static form still submits via
|
|
52
|
+
* the native endpoint; you lose inline validation, the experiences, and the
|
|
53
|
+
* celebration. Good for a footer newsletter field, wrong for a long form.
|
|
54
|
+
*/
|
|
55
|
+
enhance?: boolean;
|
|
56
|
+
/**
|
|
57
|
+
* false = enhance on mount instead of at idle. Only for a form that is the
|
|
58
|
+
* entire purpose of the page.
|
|
59
|
+
*/
|
|
60
|
+
defer?: boolean;
|
|
61
|
+
/**
|
|
62
|
+
* Pre-fill field values by slug — context the page already has at render
|
|
63
|
+
* time (the service this page is about, a campaign source). Applied on top
|
|
64
|
+
* of each field's configured default_value.
|
|
65
|
+
*/
|
|
66
|
+
defaultValues?: Record<string, unknown>;
|
|
67
|
+
/** Pre-fetched config, if the page already has it. Skips the fetch. */
|
|
68
|
+
initialConfig?: Record<string, unknown> | null;
|
|
69
|
+
/** Passed through to getFormConfig (api key / url / revalidate). */
|
|
70
|
+
configOptions?: GetFormConfigOptions;
|
|
71
|
+
}
|
|
72
|
+
export declare function ServerForm({ formId, returnTo, className, experience, enter, enhance, defer, initialConfig, configOptions, defaultValues, }: ServerFormProps): Promise<React.JSX.Element>;
|
|
73
|
+
//# sourceMappingURL=ServerForm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ServerForm.d.ts","sourceRoot":"","sources":["../../src/forms/ServerForm.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAgB,KAAK,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AACtE,OAAO,EAAiB,KAAK,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAEnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAE7C,MAAM,WAAW,eAAe;IAC9B,kCAAkC;IAClC,MAAM,EAAE,MAAM,CAAA;IACd;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,6EAA6E;IAC7E,UAAU,CAAC,EAAE,cAAc,CAAA;IAC3B,iEAAiE;IACjE,KAAK,CAAC,EAAE,kBAAkB,CAAA;IAC1B;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IACf;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACvC,uEAAuE;IACvE,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;IAC9C,oEAAoE;IACpE,aAAa,CAAC,EAAE,oBAAoB,CAAA;CACrC;AAED,wBAAsB,UAAU,CAAC,EAC/B,MAAM,EACN,QAAQ,EACR,SAAS,EACT,UAAU,EACV,KAAc,EACd,OAAc,EACd,KAAY,EACZ,aAAa,EACb,aAAa,EACb,aAAa,GACd,EAAE,eAAe,8BA0BjB"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* StaticForm — a complete, submittable managed form with ZERO client JavaScript.
|
|
3
|
+
*
|
|
4
|
+
* No `'use client'`. This renders in a Server Component, and what it emits is
|
|
5
|
+
* a real `<form>`: every field, the honeypot, the signed native token, and a
|
|
6
|
+
* submit button. With JavaScript disabled, off, or still downloading, the
|
|
7
|
+
* browser performs an ordinary form-encoded POST to
|
|
8
|
+
* `/api/public/forms/submit-native`, sonor-api runs the honeypot +
|
|
9
|
+
* render-timestamp + quarantine stack, and the lead lands. 4.0.1 built that
|
|
10
|
+
* endpoint; this is what finally puts it under every form by default.
|
|
11
|
+
*
|
|
12
|
+
* ── Why this exists ─────────────────────────────────────────────────────
|
|
13
|
+
*
|
|
14
|
+
* ManagedForm was a client component for historical reasons that no longer
|
|
15
|
+
* hold: it used to fetch its own config (getFormConfig removed that) and it
|
|
16
|
+
* could only submit via JSON (the native endpoint removed that). Nobody moved
|
|
17
|
+
* the boundary afterward, so every site that rendered a form paid for the
|
|
18
|
+
* whole forms runtime — validation, spotlight, celebration, momentum — as an
|
|
19
|
+
* INITIAL script, on the LCP-critical path.
|
|
20
|
+
*
|
|
21
|
+
* Measured on upforge.io's homepage: 48 KB of form code in the initial chunk
|
|
22
|
+
* set cost 6 Lighthouse points (88 -> 82, LCP 3.8s -> 4.7s). Deferring the
|
|
23
|
+
* client component recovered the score but deleted the form from the HTML,
|
|
24
|
+
* taking the no-JS floor and crawlable fields with it. Neither half was
|
|
25
|
+
* acceptable; a server-rendered form is what makes both true at once.
|
|
26
|
+
*
|
|
27
|
+
* Pair it with <FormEnhancer> to upgrade this markup at idle. Alone, it is
|
|
28
|
+
* still a working form — that is the point. Never make this file `'use
|
|
29
|
+
* client'`, and never import a hook into it.
|
|
30
|
+
*/
|
|
31
|
+
import React from 'react';
|
|
32
|
+
import type { ManagedFormConfig } from './types';
|
|
33
|
+
export interface StaticFormProps {
|
|
34
|
+
/**
|
|
35
|
+
* RAW /api/public/forms/config payload from `getFormConfig`, or an
|
|
36
|
+
* already-normalized config. Normalized here through the SAME function the
|
|
37
|
+
* client fetch uses, so the shell and the enhancement cannot disagree about
|
|
38
|
+
* field order, step count, or success copy.
|
|
39
|
+
*/
|
|
40
|
+
config: Record<string, unknown> | ManagedFormConfig | null | undefined;
|
|
41
|
+
className?: string;
|
|
42
|
+
/**
|
|
43
|
+
* Absolute URL the no-JS 303 should return to (usually the page hosting the
|
|
44
|
+
* form). Without it the API falls back to the Referer origin — right site,
|
|
45
|
+
* wrong page.
|
|
46
|
+
*/
|
|
47
|
+
nativeReturnTo?: string;
|
|
48
|
+
}
|
|
49
|
+
export declare function StaticForm({ config: raw, className, nativeReturnTo }: StaticFormProps): React.JSX.Element | null;
|
|
50
|
+
//# sourceMappingURL=StaticForm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StaticForm.d.ts","sourceRoot":"","sources":["../../src/forms/StaticForm.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAA;AAMzB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAEhD,MAAM,WAAW,eAAe;IAC9B;;;;;OAKG;IACH,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,iBAAiB,GAAG,IAAI,GAAG,SAAS,CAAA;IACtE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAgBD,wBAAgB,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,cAAc,EAAE,EAAE,eAAe,4BA2CrF"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { FormField as FormFieldType } from './types';
|
|
2
|
+
export interface FieldControls {
|
|
3
|
+
Date?: React.ComponentType<any>;
|
|
4
|
+
File?: React.ComponentType<any>;
|
|
5
|
+
}
|
|
6
|
+
export declare function useFieldControls(fields: FormFieldType[] | undefined): FieldControls;
|
|
7
|
+
//# sourceMappingURL=field-controls.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field-controls.d.ts","sourceRoot":"","sources":["../../src/forms/field-controls.ts"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,SAAS,CAAA;AAEzD,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;IAC/B,IAAI,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;CAChC;AAKD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,SAAS,GAAG,aAAa,CA+CnF"}
|
package/dist/forms/index.d.ts
CHANGED
|
@@ -100,6 +100,13 @@ export type { Form, FormField, FormStep, FormType, FieldType, CreateFormInput, U
|
|
|
100
100
|
export { useForm } from './useForm';
|
|
101
101
|
export type { UseFormOptions, UseFormReturn } from './useForm';
|
|
102
102
|
export { ManagedForm } from './ManagedForm';
|
|
103
|
+
/**
|
|
104
|
+
* Client boundary that upgrades a server-rendered <StaticForm> at idle.
|
|
105
|
+
* Most sites want ServerForm from '@sonordev/site-kit/forms/server' instead,
|
|
106
|
+
* which wires this up for them.
|
|
107
|
+
*/
|
|
108
|
+
export { FormEnhancer } from './FormEnhancer';
|
|
109
|
+
export type { FormEnhancerProps, FormEnterAnimation } from './FormEnhancer';
|
|
103
110
|
export { FormClient } from './FormClient';
|
|
104
111
|
export { FormCelebration } from './FormCelebration';
|
|
105
112
|
export type { FormCelebrationProps } from './FormCelebration';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/forms/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgGG;AAGH,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAC5F,YAAY,EACV,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,cAAc,EACf,MAAM,YAAY,CAAA;AAGnB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAG9D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,YAAY,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAC7D,OAAO,EAAE,SAAS,IAAI,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAG7D,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAG7C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAGnD,YAAY,EACV,iBAAiB,EACjB,cAAc,EACd,SAAS,IAAI,eAAe,GAC7B,MAAM,SAAS,CAAA;AAEhB,OAAO,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAA;AAGtE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/forms/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgGG;AAGH,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAC5F,YAAY,EACV,IAAI,EACJ,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,cAAc,EACf,MAAM,YAAY,CAAA;AAGnB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAG9D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C;;;;GAIG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAC3E,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,YAAY,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAC7D,OAAO,EAAE,SAAS,IAAI,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAG7D,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAG7C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAGnD,YAAY,EACV,iBAAiB,EACjB,cAAc,EACd,SAAS,IAAI,eAAe,GAC7B,MAAM,SAAS,CAAA;AAEhB,OAAO,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAA;AAGtE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA"}
|