@sonordev/site-kit 4.1.0 → 4.2.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.
Files changed (211) hide show
  1. package/agent-manifest.json +6 -1
  2. package/dist/AnalyticsProvider-JTAJ27EC.js +31 -0
  3. package/dist/{AnalyticsProvider-G5P5RQOA.js.map → AnalyticsProvider-JTAJ27EC.js.map} +1 -1
  4. package/dist/AnalyticsProvider-QD7H2FER.mjs +10 -0
  5. package/dist/{AnalyticsProvider-NGQLQL5N.mjs.map → AnalyticsProvider-QD7H2FER.mjs.map} +1 -1
  6. package/dist/ChatWidget-7UV4LXJR.js +20 -0
  7. package/dist/{ChatWidget-AYKZBKJH.js.map → ChatWidget-7UV4LXJR.js.map} +1 -1
  8. package/dist/ChatWidget-BS6STWYV.mjs +11 -0
  9. package/dist/{ChatWidget-LPFHRK7U.mjs.map → ChatWidget-BS6STWYV.mjs.map} +1 -1
  10. package/dist/EngageWidget-AQOTCO46.js +18 -0
  11. package/dist/{EngageWidget-HKPAJAMR.js.map → EngageWidget-AQOTCO46.js.map} +1 -1
  12. package/dist/EngageWidget-M7MZXPC4.mjs +9 -0
  13. package/dist/{EngageWidget-KDE7BYAK.mjs.map → EngageWidget-M7MZXPC4.mjs.map} +1 -1
  14. package/dist/{FileField-DDDNSRMR.js → FileField-JIWKVY73.js} +6 -6
  15. package/dist/{FileField-DDDNSRMR.js.map → FileField-JIWKVY73.js.map} +1 -1
  16. package/dist/{FileField-SU4HTY4F.mjs → FileField-VIYBV4GM.mjs} +5 -5
  17. package/dist/{FileField-SU4HTY4F.mjs.map → FileField-VIYBV4GM.mjs.map} +1 -1
  18. package/dist/{FormSpotlight-B6TJPNYN.mjs → FormSpotlight-7P3JV3XK.mjs} +3 -3
  19. package/dist/{FormSpotlight-B6TJPNYN.mjs.map → FormSpotlight-7P3JV3XK.mjs.map} +1 -1
  20. package/dist/{FormSpotlight-M4S57VC6.js → FormSpotlight-MSBWEM3F.js} +15 -15
  21. package/dist/{FormSpotlight-M4S57VC6.js.map → FormSpotlight-MSBWEM3F.js.map} +1 -1
  22. package/dist/{FormStage-GH7SA6FQ.mjs → FormStage-327WGVBM.mjs} +3 -3
  23. package/dist/{FormStage-GH7SA6FQ.mjs.map → FormStage-327WGVBM.mjs.map} +1 -1
  24. package/dist/{FormStage-2ASJGNOX.js → FormStage-FME3O3N2.js} +13 -13
  25. package/dist/{FormStage-2ASJGNOX.js.map → FormStage-FME3O3N2.js.map} +1 -1
  26. package/dist/ManagedForm-5BXS3XKX.js +23 -0
  27. package/dist/{ManagedForm-D2JT3QV3.js.map → ManagedForm-5BXS3XKX.js.map} +1 -1
  28. package/dist/ManagedForm-BFZWPWGY.mjs +14 -0
  29. package/dist/{ManagedForm-RCC7NEV2.mjs.map → ManagedForm-BFZWPWGY.mjs.map} +1 -1
  30. package/dist/{SignalCore-36PY3SRB.mjs → SignalCore-EE2RAGZ2.mjs} +5 -5
  31. package/dist/{SignalCore-36PY3SRB.mjs.map → SignalCore-EE2RAGZ2.mjs.map} +1 -1
  32. package/dist/{SignalCore-7H4ZGFZO.js → SignalCore-IPLGFFC3.js} +11 -11
  33. package/dist/{SignalCore-7H4ZGFZO.js.map → SignalCore-IPLGFFC3.js.map} +1 -1
  34. package/dist/SitemapSync-2X6NM3TX.mjs +8 -0
  35. package/dist/{SitemapSync-HKAG3JU3.mjs.map → SitemapSync-2X6NM3TX.mjs.map} +1 -1
  36. package/dist/SitemapSync-XBYRZ7WH.js +17 -0
  37. package/dist/{SitemapSync-AYVBNCH4.js.map → SitemapSync-XBYRZ7WH.js.map} +1 -1
  38. package/dist/analytics/index.js +9 -9
  39. package/dist/analytics/index.mjs +4 -4
  40. package/dist/{chunk-2RJ5UHAC.mjs → chunk-4HNFMOYE.mjs} +3 -3
  41. package/dist/{chunk-2RJ5UHAC.mjs.map → chunk-4HNFMOYE.mjs.map} +1 -1
  42. package/dist/{chunk-DCITIONV.js → chunk-4PP4D3TF.js} +4 -4
  43. package/dist/{chunk-DCITIONV.js.map → chunk-4PP4D3TF.js.map} +1 -1
  44. package/dist/{chunk-UTANIZUO.js → chunk-4YWGUQPU.js} +3 -3
  45. package/dist/{chunk-UTANIZUO.js.map → chunk-4YWGUQPU.js.map} +1 -1
  46. package/dist/{chunk-G7IMEY5T.mjs → chunk-57IFVXCB.mjs} +4 -4
  47. package/dist/{chunk-G7IMEY5T.mjs.map → chunk-57IFVXCB.mjs.map} +1 -1
  48. package/dist/{chunk-FQ4BDJXG.js → chunk-7UCKV4WA.js} +8 -8
  49. package/dist/{chunk-FQ4BDJXG.js.map → chunk-7UCKV4WA.js.map} +1 -1
  50. package/dist/{chunk-QYLGVXRX.mjs → chunk-A5FJZWGY.mjs} +4 -4
  51. package/dist/{chunk-QYLGVXRX.mjs.map → chunk-A5FJZWGY.mjs.map} +1 -1
  52. package/dist/chunk-AAZNH3MA.mjs +23 -0
  53. package/dist/chunk-AAZNH3MA.mjs.map +1 -0
  54. package/dist/{chunk-3GJBSUVS.js → chunk-AVWIKVVE.js} +14 -14
  55. package/dist/{chunk-3GJBSUVS.js.map → chunk-AVWIKVVE.js.map} +1 -1
  56. package/dist/chunk-CBN73TLK.js +8 -0
  57. package/dist/{chunk-R35CW6MM.js.map → chunk-CBN73TLK.js.map} +1 -1
  58. package/dist/chunk-CIM5W3UO.js +26 -0
  59. package/dist/chunk-CIM5W3UO.js.map +1 -0
  60. package/dist/{chunk-A4E6EOU4.mjs → chunk-CMIFYDKA.mjs} +4 -4
  61. package/dist/{chunk-A4E6EOU4.mjs.map → chunk-CMIFYDKA.mjs.map} +1 -1
  62. package/dist/{chunk-FNOCLT4A.mjs → chunk-DNEUGYTE.mjs} +3 -3
  63. package/dist/{chunk-FNOCLT4A.mjs.map → chunk-DNEUGYTE.mjs.map} +1 -1
  64. package/dist/{chunk-DBZU2TRZ.mjs → chunk-DSECSIWJ.mjs} +3 -3
  65. package/dist/{chunk-DBZU2TRZ.mjs.map → chunk-DSECSIWJ.mjs.map} +1 -1
  66. package/dist/{chunk-MXPGAJLM.mjs → chunk-DYDAV4Y4.mjs} +4 -4
  67. package/dist/{chunk-MXPGAJLM.mjs.map → chunk-DYDAV4Y4.mjs.map} +1 -1
  68. package/dist/{chunk-FYPA5GLS.js → chunk-FFQAKIV5.js} +15 -15
  69. package/dist/{chunk-FYPA5GLS.js.map → chunk-FFQAKIV5.js.map} +1 -1
  70. package/dist/{chunk-5JFJJNWS.js → chunk-FMAEUQEZ.js} +12 -12
  71. package/dist/{chunk-5JFJJNWS.js.map → chunk-FMAEUQEZ.js.map} +1 -1
  72. package/dist/{chunk-NSIRG3C3.js → chunk-GXABJJ4F.js} +3 -3
  73. package/dist/{chunk-NSIRG3C3.js.map → chunk-GXABJJ4F.js.map} +1 -1
  74. package/dist/{chunk-WJJQWAG2.mjs → chunk-HI6DVYVN.mjs} +3 -3
  75. package/dist/{chunk-WJJQWAG2.mjs.map → chunk-HI6DVYVN.mjs.map} +1 -1
  76. package/dist/{chunk-2IH5FM2A.js → chunk-HLCCE7BD.js} +14 -14
  77. package/dist/{chunk-2IH5FM2A.js.map → chunk-HLCCE7BD.js.map} +1 -1
  78. package/dist/{chunk-MKQZVTD3.js → chunk-INW43FWV.js} +6 -6
  79. package/dist/{chunk-MKQZVTD3.js.map → chunk-INW43FWV.js.map} +1 -1
  80. package/dist/{chunk-WNUUVBD7.js → chunk-IV7LOJZO.js} +4 -4
  81. package/dist/{chunk-WNUUVBD7.js.map → chunk-IV7LOJZO.js.map} +1 -1
  82. package/dist/{chunk-HK33JRWA.js → chunk-IWFP2FQ5.js} +15 -15
  83. package/dist/{chunk-HK33JRWA.js.map → chunk-IWFP2FQ5.js.map} +1 -1
  84. package/dist/chunk-JA77WXRE.js +30 -0
  85. package/dist/chunk-JA77WXRE.js.map +1 -0
  86. package/dist/{chunk-VJAUA77N.js → chunk-JWIJZQYI.js} +5 -5
  87. package/dist/{chunk-VJAUA77N.js.map → chunk-JWIJZQYI.js.map} +1 -1
  88. package/dist/{chunk-ZDXGB3UC.js → chunk-KFDFXRBE.js} +4 -4
  89. package/dist/{chunk-ZDXGB3UC.js.map → chunk-KFDFXRBE.js.map} +1 -1
  90. package/dist/chunk-LS64Y25E.mjs +6 -0
  91. package/dist/{chunk-PKCEJWLD.mjs.map → chunk-LS64Y25E.mjs.map} +1 -1
  92. package/dist/{chunk-GJVC7KKL.mjs → chunk-MTXQG3TX.mjs} +7 -7
  93. package/dist/{chunk-GJVC7KKL.mjs.map → chunk-MTXQG3TX.mjs.map} +1 -1
  94. package/dist/{chunk-D7IY27X5.mjs → chunk-MZZQHGXY.mjs} +3 -3
  95. package/dist/{chunk-D7IY27X5.mjs.map → chunk-MZZQHGXY.mjs.map} +1 -1
  96. package/dist/{chunk-VOYLJCHB.js → chunk-NDASB3X3.js} +9 -9
  97. package/dist/{chunk-VOYLJCHB.js.map → chunk-NDASB3X3.js.map} +1 -1
  98. package/dist/{chunk-4ROQDPUE.mjs → chunk-OO4T5X4Z.mjs} +3 -3
  99. package/dist/{chunk-4ROQDPUE.mjs.map → chunk-OO4T5X4Z.mjs.map} +1 -1
  100. package/dist/{chunk-SEH2K6NG.js → chunk-PKQVV6LW.js} +12 -12
  101. package/dist/{chunk-SEH2K6NG.js.map → chunk-PKQVV6LW.js.map} +1 -1
  102. package/dist/{chunk-L6WWNP2N.js → chunk-QNEBWBZ4.js} +5 -5
  103. package/dist/{chunk-L6WWNP2N.js.map → chunk-QNEBWBZ4.js.map} +1 -1
  104. package/dist/chunk-QZF5NTXQ.mjs +28 -0
  105. package/dist/chunk-QZF5NTXQ.mjs.map +1 -0
  106. package/dist/{chunk-UDHQNYBD.mjs → chunk-R6LQRHPQ.mjs} +4 -4
  107. package/dist/{chunk-UDHQNYBD.mjs.map → chunk-R6LQRHPQ.mjs.map} +1 -1
  108. package/dist/{chunk-LAWESLXJ.js → chunk-S2C3QU4E.js} +18 -18
  109. package/dist/{chunk-LAWESLXJ.js.map → chunk-S2C3QU4E.js.map} +1 -1
  110. package/dist/{chunk-5GAOZTMW.mjs → chunk-SDBUPTF4.mjs} +3 -3
  111. package/dist/{chunk-5GAOZTMW.mjs.map → chunk-SDBUPTF4.mjs.map} +1 -1
  112. package/dist/{chunk-FJ5EMPCK.mjs → chunk-TGGSXT3F.mjs} +8 -8
  113. package/dist/{chunk-FJ5EMPCK.mjs.map → chunk-TGGSXT3F.mjs.map} +1 -1
  114. package/dist/{chunk-S4U44UUD.mjs → chunk-UDPUBSSS.mjs} +3 -3
  115. package/dist/{chunk-S4U44UUD.mjs.map → chunk-UDPUBSSS.mjs.map} +1 -1
  116. package/dist/{chunk-XCCMVJUA.mjs → chunk-UKFBG6FV.mjs} +3 -3
  117. package/dist/{chunk-XCCMVJUA.mjs.map → chunk-UKFBG6FV.mjs.map} +1 -1
  118. package/dist/{chunk-TH2ANDPK.mjs → chunk-VGPZ4PCZ.mjs} +3 -3
  119. package/dist/{chunk-TH2ANDPK.mjs.map → chunk-VGPZ4PCZ.mjs.map} +1 -1
  120. package/dist/{chunk-O554YMPI.js → chunk-VOMAEC5G.js} +3 -3
  121. package/dist/{chunk-O554YMPI.js.map → chunk-VOMAEC5G.js.map} +1 -1
  122. package/dist/{chunk-NTFLRRTQ.js → chunk-VTFDE7H2.js} +7 -7
  123. package/dist/{chunk-NTFLRRTQ.js.map → chunk-VTFDE7H2.js.map} +1 -1
  124. package/dist/{chunk-7CYSA5EN.mjs → chunk-WCIQKO7W.mjs} +3 -3
  125. package/dist/{chunk-7CYSA5EN.mjs.map → chunk-WCIQKO7W.mjs.map} +1 -1
  126. package/dist/{chunk-7JES77WC.mjs → chunk-WCRBZZRI.mjs} +4 -4
  127. package/dist/{chunk-7JES77WC.mjs.map → chunk-WCRBZZRI.mjs.map} +1 -1
  128. package/dist/{chunk-VPBLW4ZN.mjs → chunk-WFCRXUNA.mjs} +4 -4
  129. package/dist/{chunk-VPBLW4ZN.mjs.map → chunk-WFCRXUNA.mjs.map} +1 -1
  130. package/dist/{chunk-XRQ47XDA.js → chunk-WLVS4QBK.js} +4 -4
  131. package/dist/{chunk-XRQ47XDA.js.map → chunk-WLVS4QBK.js.map} +1 -1
  132. package/dist/{chunk-DAGLPS6P.js → chunk-XOSAVYAI.js} +8 -8
  133. package/dist/{chunk-DAGLPS6P.js.map → chunk-XOSAVYAI.js.map} +1 -1
  134. package/dist/{chunk-ANTVZSQI.mjs → chunk-XXBVF7WN.mjs} +3 -3
  135. package/dist/{chunk-ANTVZSQI.mjs.map → chunk-XXBVF7WN.mjs.map} +1 -1
  136. package/dist/{chunk-LMKDQCU7.mjs → chunk-XZCZCND2.mjs} +3 -3
  137. package/dist/{chunk-LMKDQCU7.mjs.map → chunk-XZCZCND2.mjs.map} +1 -1
  138. package/dist/{chunk-LRHECSZK.js → chunk-Z7HAQTWP.js} +14 -14
  139. package/dist/{chunk-LRHECSZK.js.map → chunk-Z7HAQTWP.js.map} +1 -1
  140. package/dist/cli/index.js +3 -3
  141. package/dist/cli/index.mjs +1 -1
  142. package/dist/client/index.js +4 -4
  143. package/dist/client/index.mjs +3 -3
  144. package/dist/commerce/index.js +56 -56
  145. package/dist/commerce/index.mjs +5 -5
  146. package/dist/engage/index.js +10 -10
  147. package/dist/engage/index.mjs +7 -7
  148. package/dist/fleet/index.js +8 -8
  149. package/dist/fleet/index.mjs +4 -4
  150. package/dist/forms/index.js +16 -16
  151. package/dist/forms/index.mjs +9 -9
  152. package/dist/forms/server.js +10 -10
  153. package/dist/forms/server.mjs +8 -8
  154. package/dist/forms/static.js +7 -7
  155. package/dist/forms/static.mjs +6 -6
  156. package/dist/images/index.js +11 -11
  157. package/dist/images/index.mjs +4 -4
  158. package/dist/index.js +67 -66
  159. package/dist/index.js.map +1 -1
  160. package/dist/index.mjs +11 -10
  161. package/dist/index.mjs.map +1 -1
  162. package/dist/landing/index.d.ts +12 -0
  163. package/dist/landing/index.d.ts.map +1 -1
  164. package/dist/landing/index.js +5 -4
  165. package/dist/landing/index.mjs +2 -1
  166. package/dist/landing/server-entry.test.d.ts +2 -0
  167. package/dist/landing/server-entry.test.d.ts.map +1 -0
  168. package/dist/landing/server.d.ts +32 -0
  169. package/dist/landing/server.d.ts.map +1 -0
  170. package/dist/landing/server.js +17 -0
  171. package/dist/landing/server.js.map +1 -0
  172. package/dist/landing/server.mjs +4 -0
  173. package/dist/landing/server.mjs.map +1 -0
  174. package/dist/layout/client.js +8 -8
  175. package/dist/layout/client.mjs +7 -7
  176. package/dist/layout/index.js +10 -10
  177. package/dist/layout/index.mjs +8 -8
  178. package/dist/maps/index.js +5 -5
  179. package/dist/maps/index.mjs +3 -3
  180. package/dist/search/index.js +4 -4
  181. package/dist/search/index.mjs +3 -3
  182. package/dist/seo/client.js +5 -5
  183. package/dist/seo/client.mjs +4 -4
  184. package/dist/seo/index.js +5 -5
  185. package/dist/seo/index.mjs +4 -4
  186. package/dist/server/index.js +3 -3
  187. package/dist/server/index.mjs +2 -2
  188. package/dist/shared/build-entries.d.ts +7 -0
  189. package/dist/shared/build-entries.d.ts.map +1 -1
  190. package/dist/shared/version.d.ts +1 -1
  191. package/dist/signal/index.js +11 -11
  192. package/dist/signal/index.mjs +2 -2
  193. package/dist/sync/index.js +16 -16
  194. package/dist/sync/index.mjs +4 -4
  195. package/package.json +6 -1
  196. package/dist/AnalyticsProvider-G5P5RQOA.js +0 -31
  197. package/dist/AnalyticsProvider-NGQLQL5N.mjs +0 -10
  198. package/dist/ChatWidget-AYKZBKJH.js +0 -20
  199. package/dist/ChatWidget-LPFHRK7U.mjs +0 -11
  200. package/dist/EngageWidget-HKPAJAMR.js +0 -18
  201. package/dist/EngageWidget-KDE7BYAK.mjs +0 -9
  202. package/dist/ManagedForm-D2JT3QV3.js +0 -23
  203. package/dist/ManagedForm-RCC7NEV2.mjs +0 -14
  204. package/dist/SitemapSync-AYVBNCH4.js +0 -17
  205. package/dist/SitemapSync-HKAG3JU3.mjs +0 -8
  206. package/dist/chunk-EU2UGO25.js +0 -52
  207. package/dist/chunk-EU2UGO25.js.map +0 -1
  208. package/dist/chunk-IBMOX3YE.mjs +0 -48
  209. package/dist/chunk-IBMOX3YE.mjs.map +0 -1
  210. package/dist/chunk-PKCEJWLD.mjs +0 -6
  211. package/dist/chunk-R35CW6MM.js +0 -8
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/forms/FormStage.tsx"],"names":[],"mappings":"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","file":"FormStage-GH7SA6FQ.mjs","sourcesContent":["'use client'\n\n/**\n * FormStage — the \"stage\" experience: a spotlight ACCORDION. Beats expand and\n * collapse on one surface (paired grid-rows morphs: the active beat blooms\n * while the previous settles into a filled summary row of label · answer ·\n * tick; upcoming beats wait as dim numbered rows). Enter advances: next field\n * in the beat, then the next beat, then the wake-lit submit. Because every\n * answer stays visible, the form is its own review — no confirm screen.\n *\n * A beat is a VIEW, not a field (see experience-plan.ts): consecutive\n * half/third-width fields share a beat exactly like they share a row in the\n * classic grid; full-width fields stand alone; steps break beats.\n *\n * This is a RENDER BRANCH of FormClient, never a customRender: FormClient\n * still owns values/errors/honeypot/submit, so spam defense and validation\n * are identical to classic. Beat index rides the existing step-tracking pipe,\n * turning form_analytics into a per-beat funnel with zero API changes.\n *\n * Loaded lazily by FormClient — classic-form sites never download it.\n */\n\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { useFieldControls } from './field-controls'\nimport { FormField } from './FormField'\nimport { StageStyles, SummaryTick } from './experience-chrome'\nimport {\n AUTO_ADVANCE_TYPES,\n formatAnswer,\n isEmptyValue,\n stageEstimate,\n stageFirstName,\n stageViews,\n} from './experience-plan'\nimport type { StageView } from './experience-plan'\nimport type { ExperienceRenderProps, FormField as FormFieldType } from './types'\n\n/** -1 = at rest (nothing active — every beat settled, submit has the floor). */\nconst REST = -1\n\nexport function FormStage({\n config,\n values,\n errors,\n touched,\n isSubmitting,\n submitError,\n momentum,\n className,\n setFieldValue,\n validateField,\n isFieldVisible,\n fieldIsComplete,\n applyFieldError,\n submit,\n trackStepChange,\n honeypot,\n}: ExperienceRenderProps) {\n // Same on-demand date/file controls the classic form uses.\n const fieldControls = useFieldControls(config.fields)\n const [activeIndex, setActiveIndex] = useState(0)\n // Beats deliberately passed through (including skipped-empty optionals) —\n // drives \"Skipped\" vs \"not there yet\" in the settled rows.\n const [visited, setVisited] = useState<Record<number, boolean>>({})\n // Incremented on each rejected advance so the shake animation replays.\n const [shakeCount, setShakeCount] = useState(0)\n\n const formRef = useRef<HTMLFormElement | null>(null)\n const autoAdvanceTimer = useRef<number | null>(null)\n // Focus is only ever moved after the user has interacted — never on load.\n const hasInteractedRef = useRef(false)\n\n // The run respects conditional visibility live — answering an earlier\n // beat can add or remove later ones.\n const views = useMemo(() => {\n return stageViews(config)\n .map((v) => ({ ...v, fields: v.fields.filter(isFieldVisible) }))\n .filter((v) => v.fields.length > 0)\n }, [config, isFieldVisible])\n const total = views.length\n const questionCount = useMemo(\n () => views.reduce((n, v) => n + v.fields.length, 0),\n [views],\n )\n\n // Clamp if a conditional hid beats behind the cursor.\n useEffect(() => {\n if (activeIndex > 0 && activeIndex >= total) setActiveIndex(total - 1)\n }, [activeIndex, total])\n\n // Greeting: the beat right after the first-name answer says hello.\n const nameViewIndex = useMemo(\n () => views.findIndex((v) => v.fields.some((f) => /^first[_-]?name$/i.test(f.slug))),\n [views],\n )\n const nameField =\n nameViewIndex >= 0\n ? views[nameViewIndex].fields.find((f) => /^first[_-]?name$/i.test(f.slug))\n : undefined\n const firstName = nameField ? stageFirstName(values[nameField.slug]) : null\n\n const clearAutoAdvance = useCallback(() => {\n if (autoAdvanceTimer.current !== null) {\n window.clearTimeout(autoAdvanceTimer.current)\n autoAdvanceTimer.current = null\n }\n }, [])\n useEffect(() => clearAutoAdvance, [clearAutoAdvance])\n\n const beatHasValue = useCallback(\n (index: number) =>\n (views[index]?.fields || []).some((f) => !isEmptyValue(values[f.slug])),\n [views, values],\n )\n const beatComplete = useCallback(\n (index: number) => {\n const v = views[index]\n if (!v) return false\n return v.fields.every(\n (f) => fieldIsComplete(f) || (!f.is_required && isEmptyValue(values[f.slug])),\n ) && (beatHasValue(index) || visited[index] === true)\n },\n [views, fieldIsComplete, values, beatHasValue, visited],\n )\n\n const activate = useCallback(\n (index: number) => {\n hasInteractedRef.current = true\n clearAutoAdvance()\n setShakeCount(0)\n setActiveIndex(index)\n if (index !== REST) trackStepChange(index + 1)\n },\n [clearAutoAdvance, trackStepChange],\n )\n\n const advance = useCallback(() => {\n hasInteractedRef.current = true\n clearAutoAdvance()\n const view = views[activeIndex]\n if (!view) return\n let failed = false\n for (const field of view.fields) {\n const error = validateField(field)\n if (error) {\n applyFieldError(field.slug, error)\n failed = true\n }\n }\n if (failed) {\n setShakeCount((n) => n + 1)\n return\n }\n setShakeCount(0)\n setVisited((prev) => ({ ...prev, [activeIndex]: true }))\n if (activeIndex >= views.length - 1) {\n // Every beat settled — the submit takes the floor (wake glow via\n // [data-sk-ready] once momentum completes).\n setActiveIndex(REST)\n } else {\n setActiveIndex(activeIndex + 1)\n trackStepChange(activeIndex + 2)\n }\n }, [views, activeIndex, validateField, applyFieldError, trackStepChange, clearAutoAdvance])\n\n // advance() closes over stale state inside the auto-advance timeout — the\n // ref always points at the freshest render's advance.\n const advanceRef = useRef(advance)\n advanceRef.current = advance\n\n // Validation errors raised by submit()'s validateAll while at rest: travel\n // to the first offending beat, shaking. (Errors raised by advance() are\n // always in the active beat, so this never fights the user's typing.)\n useEffect(() => {\n const index = views.findIndex((v) => v.fields.some((f) => errors[f.slug]))\n if (index >= 0 && index !== activeIndex) {\n setActiveIndex(index)\n setShakeCount((n) => n + 1)\n trackStepChange(index + 1)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [errors])\n\n // Land focus inside the newly active beat — first errored field after a\n // shake, else the first field. At rest, focus the finale submit so Enter\n // finishes the arc. Only after real interaction, never on load.\n useEffect(() => {\n if (!hasInteractedRef.current) return\n const timer = window.setTimeout(() => {\n if (activeIndex === REST) {\n formRef.current\n ?.querySelector<HTMLElement>('[data-sk-part=\"stage-submit\"]')\n ?.focus()\n return\n }\n const root = formRef.current?.querySelector<HTMLElement>(\n '[data-sk-beat-state=\"active\"]',\n )\n if (!root) return\n const inputs = Array.from(\n root.querySelectorAll<HTMLElement>(\n 'input:not([data-sk-honeypot]), textarea, select',\n ),\n )\n const errored = inputs.find((el) => {\n const name = el.getAttribute('name')\n return name ? !!errors[name] : false\n })\n ;(errored || inputs[0])?.focus({ preventScroll: false })\n }, 90) // let the bloom start so focus scroll lands on settled layout\n return () => window.clearTimeout(timer)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [activeIndex, shakeCount])\n\n const handleFieldChange = useCallback(\n (field: FormFieldType, soloAutoAdvance: boolean) => (value: unknown) => {\n hasInteractedRef.current = true\n setFieldValue(field.slug, value)\n // A solo single-select beat locks in and advances after a moment — the\n // pick IS the confirmation. Grouped beats and text wait for Enter/OK.\n if (soloAutoAdvance && !isEmptyValue(value)) {\n clearAutoAdvance()\n autoAdvanceTimer.current = window.setTimeout(() => {\n autoAdvanceTimer.current = null\n advanceRef.current()\n }, 380)\n }\n },\n [setFieldValue, clearAutoAdvance],\n )\n\n /** Focusable travel order inside the active beat (excludes radio/checkbox\n — those advance via their own click/auto-advance path). */\n const travelInputs = useCallback((): HTMLElement[] => {\n const root = formRef.current?.querySelector<HTMLElement>(\n '[data-sk-beat-state=\"active\"]',\n )\n if (!root) return []\n return Array.from(\n root.querySelectorAll<HTMLElement>(\n 'input:not([data-sk-honeypot]):not([type=\"radio\"]):not([type=\"checkbox\"]), textarea, select',\n ),\n )\n }, [])\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLFormElement>) => {\n if (activeIndex === REST) return\n const target = e.target as HTMLElement\n const tag = target.tagName\n const isField = tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT'\n if (!isField) return\n\n // Enter does the next thing: next field in the beat, else next beat.\n // Shift+Enter keeps making newlines in long answers.\n if (e.key === 'Enter') {\n if (tag === 'TEXTAREA' && e.shiftKey) return\n e.preventDefault()\n const inputs = travelInputs()\n const index = inputs.indexOf(target)\n if (index >= 0 && index < inputs.length - 1) inputs[index + 1].focus()\n else advance()\n return\n }\n\n // Vertical arrows travel too — but never where they already mean\n // something (textarea caret, select option, number/range steppers).\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n if (tag !== 'INPUT') return\n const type = (target as HTMLInputElement).type\n if (type === 'number' || type === 'range') return\n e.preventDefault()\n const inputs = travelInputs()\n const index = inputs.indexOf(target)\n if (e.key === 'ArrowDown') {\n if (index >= 0 && index < inputs.length - 1) inputs[index + 1].focus()\n else advance()\n } else {\n if (index > 0) inputs[index - 1].focus()\n else if (activeIndex > 0) activate(activeIndex - 1)\n }\n }\n },\n [activeIndex, advance, activate, travelInputs],\n )\n\n // Enter inside a beat routes through keydown; form submission here only\n // fires from the beat's OK button. The finale submit is type=\"button\".\n const handleSubmit = useCallback(\n (e: React.FormEvent) => {\n e.preventDefault()\n if (isSubmitting) return\n if (activeIndex !== REST) advance()\n else void submit()\n },\n [activeIndex, isSubmitting, advance, submit],\n )\n\n const handleFinaleSubmit = useCallback(() => {\n hasInteractedRef.current = true\n clearAutoAdvance()\n if (isSubmitting) return\n // validateAll inside submit() surfaces gaps; the errors effect then\n // travels to the first offending beat.\n void submit()\n }, [isSubmitting, submit, clearAutoAdvance])\n\n const ready = momentum.total > 0 ? momentum.done >= momentum.total : true\n const completeBeats = views.reduce((n, _v, i) => n + (beatComplete(i) ? 1 : 0), 0)\n\n const activeView = activeIndex === REST ? null : views[activeIndex]\n const activeIsGroup = !!activeView && activeView.fields.length > 1\n const activeAllOptionalEmpty =\n !!activeView &&\n activeView.fields.every((f) => !f.is_required && isEmptyValue(values[f.slug]))\n const activeHasTextarea =\n !!activeView && activeView.fields.some((f) => f.field_type === 'textarea')\n const eyebrow =\n activeIndex !== REST && firstName && activeIndex === nameViewIndex + 1\n ? { text: `Nice to meet you, ${firstName}.`, greet: true }\n : activeView?.step?.title\n ? { text: activeView.step.title, greet: false }\n : null\n\n return (\n <form\n ref={formRef}\n className={`sk-form sk-stage ${className || ''}`}\n data-sk-part=\"stage\"\n data-sk-state={isSubmitting ? 'submitting' : 'idle'}\n data-sk-ready={activeIndex === REST && ready && total > 0 ? 'true' : undefined}\n onSubmit={handleSubmit}\n onKeyDown={handleKeyDown}\n >\n <StageStyles />\n\n <header className=\"sk-stage__head\" data-sk-part=\"stage-head\">\n <span className=\"sk-stage__head-name\">{config.name}</span>\n <span className=\"sk-stage__head-meta\" data-sk-part=\"stage-estimate\">\n {`Takes ${stageEstimate(questionCount)}`}\n </span>\n </header>\n\n <div className=\"sk-stage__hud\" data-sk-part=\"stage-hud\">\n <div\n className=\"sk-stage__meter\"\n data-sk-part=\"stage-meter\"\n role=\"progressbar\"\n // A progressbar must have an accessible name; aria-valuetext alone\n // is not one (axe: aria-progressbar-name).\n aria-label=\"Form progress\"\n aria-valuemin={0}\n aria-valuemax={total}\n aria-valuenow={completeBeats}\n aria-valuetext={`${completeBeats} of ${total} answered`}\n >\n {views.map((v, i) => (\n <span\n key={v.fields[0].id}\n className=\"sk-stage__seg\"\n data-sk-lit={beatComplete(i) ? 'true' : undefined}\n data-sk-live={i === activeIndex ? 'true' : undefined}\n aria-hidden=\"true\"\n />\n ))}\n </div>\n <span\n className=\"sk-stage__counter\"\n data-sk-part=\"stage-counter\"\n data-sk-ready={activeIndex === REST && ready ? 'true' : undefined}\n aria-live=\"polite\"\n >\n {activeIndex === REST\n ? ready\n ? 'Ready'\n : `${completeBeats} / ${total}`\n : `${activeIndex + 1} / ${total}`}\n </span>\n </div>\n\n <div className=\"sk-stage__beats\" data-sk-part=\"stage-beats\">\n {views.map((view, i) => {\n const isActive = i === activeIndex\n const filled = visited[i] === true || beatHasValue(i)\n const answers = view.fields\n .map((f) => formatAnswer(values[f.slug]))\n .filter((a): a is string => a !== null)\n const summaryValue = answers.length\n ? answers.join(' · ')\n : filled\n ? 'Skipped'\n : null\n const summaryLabel =\n view.step?.title || view.fields.map((f) => f.label).join(' · ')\n const complete = beatComplete(i) && answers.length > 0\n\n return (\n <section\n key={view.fields[0].id}\n className=\"sk-stage__beat\"\n data-sk-part=\"stage-beat\"\n data-sk-beat-state={isActive ? 'active' : filled ? 'filled' : 'upcoming'}\n data-sk-beat-filled={filled ? 'true' : undefined}\n >\n {/* Settled / waiting row — collapses away while active. */}\n <div className=\"sk-stage__collapse sk-stage__collapse--summary\">\n <div inert={isActive ? true : undefined}>\n <div className=\"sk-stage__summary-inner\">\n <button\n type=\"button\"\n className=\"sk-stage__summary\"\n data-sk-part=\"stage-summary\"\n onClick={() => activate(i)}\n >\n <span className=\"sk-stage__summary-idx\" aria-hidden=\"true\">\n {String(i + 1).padStart(2, '0')}\n </span>\n <span className=\"sk-stage__summary-label\">{summaryLabel}</span>\n {summaryValue !== null && (\n <span\n className={\n 'sk-stage__summary-value' +\n (answers.length === 0\n ? ' sk-stage__summary-value--skipped'\n : '')\n }\n >\n {summaryValue}\n {complete && <SummaryTick />}\n </span>\n )}\n </button>\n </div>\n </div>\n </div>\n\n {/* The lit stage — blooms open while everything else settles. */}\n <div className=\"sk-stage__collapse sk-stage__collapse--body\">\n <div inert={isActive ? undefined : true}>\n <div\n key={isActive ? shakeCount : 0}\n className={\n 'sk-stage__body-inner' +\n (isActive && shakeCount > 0 ? ' sk-stage__shake' : '')\n }\n >\n {isActive && eyebrow && (\n <p\n className={\n 'sk-stage__eyebrow' +\n (eyebrow.greet ? ' sk-stage__eyebrow--greet' : '')\n }\n data-sk-part=\"stage-eyebrow\"\n >\n {eyebrow.text}\n </p>\n )}\n <div\n className={\n 'sk-stage__question' +\n (view.fields.length > 1 ? ' sk-stage__question--group' : '')\n }\n data-sk-part=\"stage-question\"\n >\n <div className=\"sk-stage__fields\">\n {view.fields.map((f) => (\n <FormField\n controls={fieldControls}\n key={f.id}\n // The question IS the label — a hide_label form\n // still asks it.\n field={{ ...f, hide_label: false }}\n value={values[f.slug]}\n error={errors[f.slug]}\n showValid={\n !!touched[f.slug] && !errors[f.slug] && fieldIsComplete(f)\n }\n onChange={handleFieldChange(\n f,\n view.fields.length === 1 &&\n AUTO_ADVANCE_TYPES.includes(f.field_type),\n )}\n classPrefix=\"sk-stage\"\n />\n ))}\n </div>\n <div className=\"sk-stage__actions\" data-sk-part=\"stage-actions\">\n <button\n type=\"submit\"\n className=\"sk-form__btn sk-form__btn--submit\"\n data-sk-part=\"stage-ok\"\n >\n {isActive && activeAllOptionalEmpty ? 'Skip' : 'OK'}\n </button>\n <span className=\"sk-stage__hint\" data-sk-part=\"stage-hint\">\n {isActive && activeHasTextarea ? (\n <>\n <kbd>Enter ↵</kbd> to continue · <kbd>Shift + Enter</kbd>{' '}\n for a new line\n </>\n ) : (\n <>\n press <kbd>Enter ↵</kbd>\n </>\n )}\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </section>\n )\n })}\n </div>\n\n {/* The finale — wakes ([data-sk-ready] pop + breathe) once every\n requirement clears and the run is at rest. */}\n <div className=\"sk-stage__finale\" data-sk-part=\"stage-finale\">\n <button\n type=\"button\"\n className=\"sk-form__btn sk-form__btn--submit\"\n data-sk-part=\"stage-submit\"\n disabled={isSubmitting}\n onClick={handleFinaleSubmit}\n >\n {isSubmitting ? 'Submitting...' : config.submit_button_text}\n </button>\n {activeIndex === REST && ready && (\n <span className=\"sk-stage__hint\">\n press <kbd>Enter ↵</kbd>\n </span>\n )}\n </div>\n\n {submitError && (\n <p\n className=\"sk-stage__submit-error\"\n role=\"alert\"\n style={{ color: 'var(--sk-error, #dc2626)' }}\n >\n {submitError}\n </p>\n )}\n\n {honeypot}\n </form>\n )\n}\n"]}
1
+ {"version":3,"sources":["../src/forms/FormStage.tsx"],"names":[],"mappings":"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","file":"FormStage-327WGVBM.mjs","sourcesContent":["'use client'\n\n/**\n * FormStage — the \"stage\" experience: a spotlight ACCORDION. Beats expand and\n * collapse on one surface (paired grid-rows morphs: the active beat blooms\n * while the previous settles into a filled summary row of label · answer ·\n * tick; upcoming beats wait as dim numbered rows). Enter advances: next field\n * in the beat, then the next beat, then the wake-lit submit. Because every\n * answer stays visible, the form is its own review — no confirm screen.\n *\n * A beat is a VIEW, not a field (see experience-plan.ts): consecutive\n * half/third-width fields share a beat exactly like they share a row in the\n * classic grid; full-width fields stand alone; steps break beats.\n *\n * This is a RENDER BRANCH of FormClient, never a customRender: FormClient\n * still owns values/errors/honeypot/submit, so spam defense and validation\n * are identical to classic. Beat index rides the existing step-tracking pipe,\n * turning form_analytics into a per-beat funnel with zero API changes.\n *\n * Loaded lazily by FormClient — classic-form sites never download it.\n */\n\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { useFieldControls } from './field-controls'\nimport { FormField } from './FormField'\nimport { StageStyles, SummaryTick } from './experience-chrome'\nimport {\n AUTO_ADVANCE_TYPES,\n formatAnswer,\n isEmptyValue,\n stageEstimate,\n stageFirstName,\n stageViews,\n} from './experience-plan'\nimport type { StageView } from './experience-plan'\nimport type { ExperienceRenderProps, FormField as FormFieldType } from './types'\n\n/** -1 = at rest (nothing active — every beat settled, submit has the floor). */\nconst REST = -1\n\nexport function FormStage({\n config,\n values,\n errors,\n touched,\n isSubmitting,\n submitError,\n momentum,\n className,\n setFieldValue,\n validateField,\n isFieldVisible,\n fieldIsComplete,\n applyFieldError,\n submit,\n trackStepChange,\n honeypot,\n}: ExperienceRenderProps) {\n // Same on-demand date/file controls the classic form uses.\n const fieldControls = useFieldControls(config.fields)\n const [activeIndex, setActiveIndex] = useState(0)\n // Beats deliberately passed through (including skipped-empty optionals) —\n // drives \"Skipped\" vs \"not there yet\" in the settled rows.\n const [visited, setVisited] = useState<Record<number, boolean>>({})\n // Incremented on each rejected advance so the shake animation replays.\n const [shakeCount, setShakeCount] = useState(0)\n\n const formRef = useRef<HTMLFormElement | null>(null)\n const autoAdvanceTimer = useRef<number | null>(null)\n // Focus is only ever moved after the user has interacted — never on load.\n const hasInteractedRef = useRef(false)\n\n // The run respects conditional visibility live — answering an earlier\n // beat can add or remove later ones.\n const views = useMemo(() => {\n return stageViews(config)\n .map((v) => ({ ...v, fields: v.fields.filter(isFieldVisible) }))\n .filter((v) => v.fields.length > 0)\n }, [config, isFieldVisible])\n const total = views.length\n const questionCount = useMemo(\n () => views.reduce((n, v) => n + v.fields.length, 0),\n [views],\n )\n\n // Clamp if a conditional hid beats behind the cursor.\n useEffect(() => {\n if (activeIndex > 0 && activeIndex >= total) setActiveIndex(total - 1)\n }, [activeIndex, total])\n\n // Greeting: the beat right after the first-name answer says hello.\n const nameViewIndex = useMemo(\n () => views.findIndex((v) => v.fields.some((f) => /^first[_-]?name$/i.test(f.slug))),\n [views],\n )\n const nameField =\n nameViewIndex >= 0\n ? views[nameViewIndex].fields.find((f) => /^first[_-]?name$/i.test(f.slug))\n : undefined\n const firstName = nameField ? stageFirstName(values[nameField.slug]) : null\n\n const clearAutoAdvance = useCallback(() => {\n if (autoAdvanceTimer.current !== null) {\n window.clearTimeout(autoAdvanceTimer.current)\n autoAdvanceTimer.current = null\n }\n }, [])\n useEffect(() => clearAutoAdvance, [clearAutoAdvance])\n\n const beatHasValue = useCallback(\n (index: number) =>\n (views[index]?.fields || []).some((f) => !isEmptyValue(values[f.slug])),\n [views, values],\n )\n const beatComplete = useCallback(\n (index: number) => {\n const v = views[index]\n if (!v) return false\n return v.fields.every(\n (f) => fieldIsComplete(f) || (!f.is_required && isEmptyValue(values[f.slug])),\n ) && (beatHasValue(index) || visited[index] === true)\n },\n [views, fieldIsComplete, values, beatHasValue, visited],\n )\n\n const activate = useCallback(\n (index: number) => {\n hasInteractedRef.current = true\n clearAutoAdvance()\n setShakeCount(0)\n setActiveIndex(index)\n if (index !== REST) trackStepChange(index + 1)\n },\n [clearAutoAdvance, trackStepChange],\n )\n\n const advance = useCallback(() => {\n hasInteractedRef.current = true\n clearAutoAdvance()\n const view = views[activeIndex]\n if (!view) return\n let failed = false\n for (const field of view.fields) {\n const error = validateField(field)\n if (error) {\n applyFieldError(field.slug, error)\n failed = true\n }\n }\n if (failed) {\n setShakeCount((n) => n + 1)\n return\n }\n setShakeCount(0)\n setVisited((prev) => ({ ...prev, [activeIndex]: true }))\n if (activeIndex >= views.length - 1) {\n // Every beat settled — the submit takes the floor (wake glow via\n // [data-sk-ready] once momentum completes).\n setActiveIndex(REST)\n } else {\n setActiveIndex(activeIndex + 1)\n trackStepChange(activeIndex + 2)\n }\n }, [views, activeIndex, validateField, applyFieldError, trackStepChange, clearAutoAdvance])\n\n // advance() closes over stale state inside the auto-advance timeout — the\n // ref always points at the freshest render's advance.\n const advanceRef = useRef(advance)\n advanceRef.current = advance\n\n // Validation errors raised by submit()'s validateAll while at rest: travel\n // to the first offending beat, shaking. (Errors raised by advance() are\n // always in the active beat, so this never fights the user's typing.)\n useEffect(() => {\n const index = views.findIndex((v) => v.fields.some((f) => errors[f.slug]))\n if (index >= 0 && index !== activeIndex) {\n setActiveIndex(index)\n setShakeCount((n) => n + 1)\n trackStepChange(index + 1)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [errors])\n\n // Land focus inside the newly active beat — first errored field after a\n // shake, else the first field. At rest, focus the finale submit so Enter\n // finishes the arc. Only after real interaction, never on load.\n useEffect(() => {\n if (!hasInteractedRef.current) return\n const timer = window.setTimeout(() => {\n if (activeIndex === REST) {\n formRef.current\n ?.querySelector<HTMLElement>('[data-sk-part=\"stage-submit\"]')\n ?.focus()\n return\n }\n const root = formRef.current?.querySelector<HTMLElement>(\n '[data-sk-beat-state=\"active\"]',\n )\n if (!root) return\n const inputs = Array.from(\n root.querySelectorAll<HTMLElement>(\n 'input:not([data-sk-honeypot]), textarea, select',\n ),\n )\n const errored = inputs.find((el) => {\n const name = el.getAttribute('name')\n return name ? !!errors[name] : false\n })\n ;(errored || inputs[0])?.focus({ preventScroll: false })\n }, 90) // let the bloom start so focus scroll lands on settled layout\n return () => window.clearTimeout(timer)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [activeIndex, shakeCount])\n\n const handleFieldChange = useCallback(\n (field: FormFieldType, soloAutoAdvance: boolean) => (value: unknown) => {\n hasInteractedRef.current = true\n setFieldValue(field.slug, value)\n // A solo single-select beat locks in and advances after a moment — the\n // pick IS the confirmation. Grouped beats and text wait for Enter/OK.\n if (soloAutoAdvance && !isEmptyValue(value)) {\n clearAutoAdvance()\n autoAdvanceTimer.current = window.setTimeout(() => {\n autoAdvanceTimer.current = null\n advanceRef.current()\n }, 380)\n }\n },\n [setFieldValue, clearAutoAdvance],\n )\n\n /** Focusable travel order inside the active beat (excludes radio/checkbox\n — those advance via their own click/auto-advance path). */\n const travelInputs = useCallback((): HTMLElement[] => {\n const root = formRef.current?.querySelector<HTMLElement>(\n '[data-sk-beat-state=\"active\"]',\n )\n if (!root) return []\n return Array.from(\n root.querySelectorAll<HTMLElement>(\n 'input:not([data-sk-honeypot]):not([type=\"radio\"]):not([type=\"checkbox\"]), textarea, select',\n ),\n )\n }, [])\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLFormElement>) => {\n if (activeIndex === REST) return\n const target = e.target as HTMLElement\n const tag = target.tagName\n const isField = tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT'\n if (!isField) return\n\n // Enter does the next thing: next field in the beat, else next beat.\n // Shift+Enter keeps making newlines in long answers.\n if (e.key === 'Enter') {\n if (tag === 'TEXTAREA' && e.shiftKey) return\n e.preventDefault()\n const inputs = travelInputs()\n const index = inputs.indexOf(target)\n if (index >= 0 && index < inputs.length - 1) inputs[index + 1].focus()\n else advance()\n return\n }\n\n // Vertical arrows travel too — but never where they already mean\n // something (textarea caret, select option, number/range steppers).\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n if (tag !== 'INPUT') return\n const type = (target as HTMLInputElement).type\n if (type === 'number' || type === 'range') return\n e.preventDefault()\n const inputs = travelInputs()\n const index = inputs.indexOf(target)\n if (e.key === 'ArrowDown') {\n if (index >= 0 && index < inputs.length - 1) inputs[index + 1].focus()\n else advance()\n } else {\n if (index > 0) inputs[index - 1].focus()\n else if (activeIndex > 0) activate(activeIndex - 1)\n }\n }\n },\n [activeIndex, advance, activate, travelInputs],\n )\n\n // Enter inside a beat routes through keydown; form submission here only\n // fires from the beat's OK button. The finale submit is type=\"button\".\n const handleSubmit = useCallback(\n (e: React.FormEvent) => {\n e.preventDefault()\n if (isSubmitting) return\n if (activeIndex !== REST) advance()\n else void submit()\n },\n [activeIndex, isSubmitting, advance, submit],\n )\n\n const handleFinaleSubmit = useCallback(() => {\n hasInteractedRef.current = true\n clearAutoAdvance()\n if (isSubmitting) return\n // validateAll inside submit() surfaces gaps; the errors effect then\n // travels to the first offending beat.\n void submit()\n }, [isSubmitting, submit, clearAutoAdvance])\n\n const ready = momentum.total > 0 ? momentum.done >= momentum.total : true\n const completeBeats = views.reduce((n, _v, i) => n + (beatComplete(i) ? 1 : 0), 0)\n\n const activeView = activeIndex === REST ? null : views[activeIndex]\n const activeIsGroup = !!activeView && activeView.fields.length > 1\n const activeAllOptionalEmpty =\n !!activeView &&\n activeView.fields.every((f) => !f.is_required && isEmptyValue(values[f.slug]))\n const activeHasTextarea =\n !!activeView && activeView.fields.some((f) => f.field_type === 'textarea')\n const eyebrow =\n activeIndex !== REST && firstName && activeIndex === nameViewIndex + 1\n ? { text: `Nice to meet you, ${firstName}.`, greet: true }\n : activeView?.step?.title\n ? { text: activeView.step.title, greet: false }\n : null\n\n return (\n <form\n ref={formRef}\n className={`sk-form sk-stage ${className || ''}`}\n data-sk-part=\"stage\"\n data-sk-state={isSubmitting ? 'submitting' : 'idle'}\n data-sk-ready={activeIndex === REST && ready && total > 0 ? 'true' : undefined}\n onSubmit={handleSubmit}\n onKeyDown={handleKeyDown}\n >\n <StageStyles />\n\n <header className=\"sk-stage__head\" data-sk-part=\"stage-head\">\n <span className=\"sk-stage__head-name\">{config.name}</span>\n <span className=\"sk-stage__head-meta\" data-sk-part=\"stage-estimate\">\n {`Takes ${stageEstimate(questionCount)}`}\n </span>\n </header>\n\n <div className=\"sk-stage__hud\" data-sk-part=\"stage-hud\">\n <div\n className=\"sk-stage__meter\"\n data-sk-part=\"stage-meter\"\n role=\"progressbar\"\n // A progressbar must have an accessible name; aria-valuetext alone\n // is not one (axe: aria-progressbar-name).\n aria-label=\"Form progress\"\n aria-valuemin={0}\n aria-valuemax={total}\n aria-valuenow={completeBeats}\n aria-valuetext={`${completeBeats} of ${total} answered`}\n >\n {views.map((v, i) => (\n <span\n key={v.fields[0].id}\n className=\"sk-stage__seg\"\n data-sk-lit={beatComplete(i) ? 'true' : undefined}\n data-sk-live={i === activeIndex ? 'true' : undefined}\n aria-hidden=\"true\"\n />\n ))}\n </div>\n <span\n className=\"sk-stage__counter\"\n data-sk-part=\"stage-counter\"\n data-sk-ready={activeIndex === REST && ready ? 'true' : undefined}\n aria-live=\"polite\"\n >\n {activeIndex === REST\n ? ready\n ? 'Ready'\n : `${completeBeats} / ${total}`\n : `${activeIndex + 1} / ${total}`}\n </span>\n </div>\n\n <div className=\"sk-stage__beats\" data-sk-part=\"stage-beats\">\n {views.map((view, i) => {\n const isActive = i === activeIndex\n const filled = visited[i] === true || beatHasValue(i)\n const answers = view.fields\n .map((f) => formatAnswer(values[f.slug]))\n .filter((a): a is string => a !== null)\n const summaryValue = answers.length\n ? answers.join(' · ')\n : filled\n ? 'Skipped'\n : null\n const summaryLabel =\n view.step?.title || view.fields.map((f) => f.label).join(' · ')\n const complete = beatComplete(i) && answers.length > 0\n\n return (\n <section\n key={view.fields[0].id}\n className=\"sk-stage__beat\"\n data-sk-part=\"stage-beat\"\n data-sk-beat-state={isActive ? 'active' : filled ? 'filled' : 'upcoming'}\n data-sk-beat-filled={filled ? 'true' : undefined}\n >\n {/* Settled / waiting row — collapses away while active. */}\n <div className=\"sk-stage__collapse sk-stage__collapse--summary\">\n <div inert={isActive ? true : undefined}>\n <div className=\"sk-stage__summary-inner\">\n <button\n type=\"button\"\n className=\"sk-stage__summary\"\n data-sk-part=\"stage-summary\"\n onClick={() => activate(i)}\n >\n <span className=\"sk-stage__summary-idx\" aria-hidden=\"true\">\n {String(i + 1).padStart(2, '0')}\n </span>\n <span className=\"sk-stage__summary-label\">{summaryLabel}</span>\n {summaryValue !== null && (\n <span\n className={\n 'sk-stage__summary-value' +\n (answers.length === 0\n ? ' sk-stage__summary-value--skipped'\n : '')\n }\n >\n {summaryValue}\n {complete && <SummaryTick />}\n </span>\n )}\n </button>\n </div>\n </div>\n </div>\n\n {/* The lit stage — blooms open while everything else settles. */}\n <div className=\"sk-stage__collapse sk-stage__collapse--body\">\n <div inert={isActive ? undefined : true}>\n <div\n key={isActive ? shakeCount : 0}\n className={\n 'sk-stage__body-inner' +\n (isActive && shakeCount > 0 ? ' sk-stage__shake' : '')\n }\n >\n {isActive && eyebrow && (\n <p\n className={\n 'sk-stage__eyebrow' +\n (eyebrow.greet ? ' sk-stage__eyebrow--greet' : '')\n }\n data-sk-part=\"stage-eyebrow\"\n >\n {eyebrow.text}\n </p>\n )}\n <div\n className={\n 'sk-stage__question' +\n (view.fields.length > 1 ? ' sk-stage__question--group' : '')\n }\n data-sk-part=\"stage-question\"\n >\n <div className=\"sk-stage__fields\">\n {view.fields.map((f) => (\n <FormField\n controls={fieldControls}\n key={f.id}\n // The question IS the label — a hide_label form\n // still asks it.\n field={{ ...f, hide_label: false }}\n value={values[f.slug]}\n error={errors[f.slug]}\n showValid={\n !!touched[f.slug] && !errors[f.slug] && fieldIsComplete(f)\n }\n onChange={handleFieldChange(\n f,\n view.fields.length === 1 &&\n AUTO_ADVANCE_TYPES.includes(f.field_type),\n )}\n classPrefix=\"sk-stage\"\n />\n ))}\n </div>\n <div className=\"sk-stage__actions\" data-sk-part=\"stage-actions\">\n <button\n type=\"submit\"\n className=\"sk-form__btn sk-form__btn--submit\"\n data-sk-part=\"stage-ok\"\n >\n {isActive && activeAllOptionalEmpty ? 'Skip' : 'OK'}\n </button>\n <span className=\"sk-stage__hint\" data-sk-part=\"stage-hint\">\n {isActive && activeHasTextarea ? (\n <>\n <kbd>Enter ↵</kbd> to continue · <kbd>Shift + Enter</kbd>{' '}\n for a new line\n </>\n ) : (\n <>\n press <kbd>Enter ↵</kbd>\n </>\n )}\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </section>\n )\n })}\n </div>\n\n {/* The finale — wakes ([data-sk-ready] pop + breathe) once every\n requirement clears and the run is at rest. */}\n <div className=\"sk-stage__finale\" data-sk-part=\"stage-finale\">\n <button\n type=\"button\"\n className=\"sk-form__btn sk-form__btn--submit\"\n data-sk-part=\"stage-submit\"\n disabled={isSubmitting}\n onClick={handleFinaleSubmit}\n >\n {isSubmitting ? 'Submitting...' : config.submit_button_text}\n </button>\n {activeIndex === REST && ready && (\n <span className=\"sk-stage__hint\">\n press <kbd>Enter ↵</kbd>\n </span>\n )}\n </div>\n\n {submitError && (\n <p\n className=\"sk-stage__submit-error\"\n role=\"alert\"\n style={{ color: 'var(--sk-error, #dc2626)' }}\n >\n {submitError}\n </p>\n )}\n\n {honeypot}\n </form>\n )\n}\n"]}
@@ -2,7 +2,7 @@
2
2
  'use strict';
3
3
 
4
4
  var chunkMVHR77V4_js = require('./chunk-MVHR77V4.js');
5
- var chunkNSIRG3C3_js = require('./chunk-NSIRG3C3.js');
5
+ var chunkGXABJJ4F_js = require('./chunk-GXABJJ4F.js');
6
6
  var chunk2ACKOMAL_js = require('./chunk-2ACKOMAL.js');
7
7
  require('./chunk-SNAQBZPT.js');
8
8
  var react = require('react');
@@ -27,7 +27,7 @@ function FormStage({
27
27
  trackStepChange,
28
28
  honeypot
29
29
  }) {
30
- const fieldControls = chunkNSIRG3C3_js.useFieldControls(config.fields);
30
+ const fieldControls = chunkGXABJJ4F_js.useFieldControls(config.fields);
31
31
  const [activeIndex, setActiveIndex] = react.useState(0);
32
32
  const [visited, setVisited] = react.useState({});
33
33
  const [shakeCount, setShakeCount] = react.useState(0);
@@ -35,7 +35,7 @@ function FormStage({
35
35
  const autoAdvanceTimer = react.useRef(null);
36
36
  const hasInteractedRef = react.useRef(false);
37
37
  const views = react.useMemo(() => {
38
- return chunkNSIRG3C3_js.stageViews(config).map((v) => ({ ...v, fields: v.fields.filter(isFieldVisible) })).filter((v) => v.fields.length > 0);
38
+ return chunkGXABJJ4F_js.stageViews(config).map((v) => ({ ...v, fields: v.fields.filter(isFieldVisible) })).filter((v) => v.fields.length > 0);
39
39
  }, [config, isFieldVisible]);
40
40
  const total = views.length;
41
41
  const questionCount = react.useMemo(
@@ -50,7 +50,7 @@ function FormStage({
50
50
  [views]
51
51
  );
52
52
  const nameField = nameViewIndex >= 0 ? views[nameViewIndex].fields.find((f) => /^first[_-]?name$/i.test(f.slug)) : void 0;
53
- const firstName = nameField ? chunkNSIRG3C3_js.stageFirstName(values[nameField.slug]) : null;
53
+ const firstName = nameField ? chunkGXABJJ4F_js.stageFirstName(values[nameField.slug]) : null;
54
54
  const clearAutoAdvance = react.useCallback(() => {
55
55
  if (autoAdvanceTimer.current !== null) {
56
56
  window.clearTimeout(autoAdvanceTimer.current);
@@ -59,7 +59,7 @@ function FormStage({
59
59
  }, []);
60
60
  react.useEffect(() => clearAutoAdvance, [clearAutoAdvance]);
61
61
  const beatHasValue = react.useCallback(
62
- (index) => (views[index]?.fields || []).some((f) => !chunkNSIRG3C3_js.isEmptyValue(values[f.slug])),
62
+ (index) => (views[index]?.fields || []).some((f) => !chunkGXABJJ4F_js.isEmptyValue(values[f.slug])),
63
63
  [views, values]
64
64
  );
65
65
  const beatComplete = react.useCallback(
@@ -67,7 +67,7 @@ function FormStage({
67
67
  const v = views[index];
68
68
  if (!v) return false;
69
69
  return v.fields.every(
70
- (f) => fieldIsComplete(f) || !f.is_required && chunkNSIRG3C3_js.isEmptyValue(values[f.slug])
70
+ (f) => fieldIsComplete(f) || !f.is_required && chunkGXABJJ4F_js.isEmptyValue(values[f.slug])
71
71
  ) && (beatHasValue(index) || visited[index] === true);
72
72
  },
73
73
  [views, fieldIsComplete, values, beatHasValue, visited]
@@ -146,7 +146,7 @@ function FormStage({
146
146
  (field, soloAutoAdvance) => (value) => {
147
147
  hasInteractedRef.current = true;
148
148
  setFieldValue(field.slug, value);
149
- if (soloAutoAdvance && !chunkNSIRG3C3_js.isEmptyValue(value)) {
149
+ if (soloAutoAdvance && !chunkGXABJJ4F_js.isEmptyValue(value)) {
150
150
  clearAutoAdvance();
151
151
  autoAdvanceTimer.current = window.setTimeout(() => {
152
152
  autoAdvanceTimer.current = null;
@@ -220,7 +220,7 @@ function FormStage({
220
220
  const completeBeats = views.reduce((n, _v, i) => n + (beatComplete(i) ? 1 : 0), 0);
221
221
  const activeView = activeIndex === REST ? null : views[activeIndex];
222
222
  !!activeView && activeView.fields.length > 1;
223
- const activeAllOptionalEmpty = !!activeView && activeView.fields.every((f) => !f.is_required && chunkNSIRG3C3_js.isEmptyValue(values[f.slug]));
223
+ const activeAllOptionalEmpty = !!activeView && activeView.fields.every((f) => !f.is_required && chunkGXABJJ4F_js.isEmptyValue(values[f.slug]));
224
224
  const activeHasTextarea = !!activeView && activeView.fields.some((f) => f.field_type === "textarea");
225
225
  const eyebrow = activeIndex !== REST && firstName && activeIndex === nameViewIndex + 1 ? { text: `Nice to meet you, ${firstName}.`, greet: true } : activeView?.step?.title ? { text: activeView.step.title, greet: false } : null;
226
226
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -237,7 +237,7 @@ function FormStage({
237
237
  /* @__PURE__ */ jsxRuntime.jsx(chunkMVHR77V4_js.StageStyles, {}),
238
238
  /* @__PURE__ */ jsxRuntime.jsxs("header", { className: "sk-stage__head", "data-sk-part": "stage-head", children: [
239
239
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sk-stage__head-name", children: config.name }),
240
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sk-stage__head-meta", "data-sk-part": "stage-estimate", children: `Takes ${chunkNSIRG3C3_js.stageEstimate(questionCount)}` })
240
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sk-stage__head-meta", "data-sk-part": "stage-estimate", children: `Takes ${chunkGXABJJ4F_js.stageEstimate(questionCount)}` })
241
241
  ] }),
242
242
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "sk-stage__hud", "data-sk-part": "stage-hud", children: [
243
243
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -277,7 +277,7 @@ function FormStage({
277
277
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "sk-stage__beats", "data-sk-part": "stage-beats", children: views.map((view, i) => {
278
278
  const isActive = i === activeIndex;
279
279
  const filled = visited[i] === true || beatHasValue(i);
280
- const answers = view.fields.map((f) => chunkNSIRG3C3_js.formatAnswer(values[f.slug])).filter((a) => a !== null);
280
+ const answers = view.fields.map((f) => chunkGXABJJ4F_js.formatAnswer(values[f.slug])).filter((a) => a !== null);
281
281
  const summaryValue = answers.length ? answers.join(" \xB7 ") : filled ? "Skipped" : null;
282
282
  const summaryLabel = view.step?.title || view.fields.map((f) => f.label).join(" \xB7 ");
283
283
  const complete = beatComplete(i) && answers.length > 0;
@@ -341,7 +341,7 @@ function FormStage({
341
341
  showValid: !!touched[f.slug] && !errors[f.slug] && fieldIsComplete(f),
342
342
  onChange: handleFieldChange(
343
343
  f,
344
- view.fields.length === 1 && chunkNSIRG3C3_js.AUTO_ADVANCE_TYPES.includes(f.field_type)
344
+ view.fields.length === 1 && chunkGXABJJ4F_js.AUTO_ADVANCE_TYPES.includes(f.field_type)
345
345
  ),
346
346
  classPrefix: "sk-stage"
347
347
  },
@@ -413,5 +413,5 @@ function FormStage({
413
413
  }
414
414
 
415
415
  exports.FormStage = FormStage;
416
- //# sourceMappingURL=FormStage-2ASJGNOX.js.map
417
- //# sourceMappingURL=FormStage-2ASJGNOX.js.map
416
+ //# sourceMappingURL=FormStage-FME3O3N2.js.map
417
+ //# sourceMappingURL=FormStage-FME3O3N2.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/forms/FormStage.tsx"],"names":["useFieldControls","useState","useRef","useMemo","stageViews","useEffect","stageFirstName","useCallback","isEmptyValue","jsxs","jsx","StageStyles","stageEstimate","formatAnswer","SummaryTick","FormField","AUTO_ADVANCE_TYPES","Fragment"],"mappings":"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","file":"FormStage-2ASJGNOX.js","sourcesContent":["'use client'\n\n/**\n * FormStage — the \"stage\" experience: a spotlight ACCORDION. Beats expand and\n * collapse on one surface (paired grid-rows morphs: the active beat blooms\n * while the previous settles into a filled summary row of label · answer ·\n * tick; upcoming beats wait as dim numbered rows). Enter advances: next field\n * in the beat, then the next beat, then the wake-lit submit. Because every\n * answer stays visible, the form is its own review — no confirm screen.\n *\n * A beat is a VIEW, not a field (see experience-plan.ts): consecutive\n * half/third-width fields share a beat exactly like they share a row in the\n * classic grid; full-width fields stand alone; steps break beats.\n *\n * This is a RENDER BRANCH of FormClient, never a customRender: FormClient\n * still owns values/errors/honeypot/submit, so spam defense and validation\n * are identical to classic. Beat index rides the existing step-tracking pipe,\n * turning form_analytics into a per-beat funnel with zero API changes.\n *\n * Loaded lazily by FormClient — classic-form sites never download it.\n */\n\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { useFieldControls } from './field-controls'\nimport { FormField } from './FormField'\nimport { StageStyles, SummaryTick } from './experience-chrome'\nimport {\n AUTO_ADVANCE_TYPES,\n formatAnswer,\n isEmptyValue,\n stageEstimate,\n stageFirstName,\n stageViews,\n} from './experience-plan'\nimport type { StageView } from './experience-plan'\nimport type { ExperienceRenderProps, FormField as FormFieldType } from './types'\n\n/** -1 = at rest (nothing active — every beat settled, submit has the floor). */\nconst REST = -1\n\nexport function FormStage({\n config,\n values,\n errors,\n touched,\n isSubmitting,\n submitError,\n momentum,\n className,\n setFieldValue,\n validateField,\n isFieldVisible,\n fieldIsComplete,\n applyFieldError,\n submit,\n trackStepChange,\n honeypot,\n}: ExperienceRenderProps) {\n // Same on-demand date/file controls the classic form uses.\n const fieldControls = useFieldControls(config.fields)\n const [activeIndex, setActiveIndex] = useState(0)\n // Beats deliberately passed through (including skipped-empty optionals) —\n // drives \"Skipped\" vs \"not there yet\" in the settled rows.\n const [visited, setVisited] = useState<Record<number, boolean>>({})\n // Incremented on each rejected advance so the shake animation replays.\n const [shakeCount, setShakeCount] = useState(0)\n\n const formRef = useRef<HTMLFormElement | null>(null)\n const autoAdvanceTimer = useRef<number | null>(null)\n // Focus is only ever moved after the user has interacted — never on load.\n const hasInteractedRef = useRef(false)\n\n // The run respects conditional visibility live — answering an earlier\n // beat can add or remove later ones.\n const views = useMemo(() => {\n return stageViews(config)\n .map((v) => ({ ...v, fields: v.fields.filter(isFieldVisible) }))\n .filter((v) => v.fields.length > 0)\n }, [config, isFieldVisible])\n const total = views.length\n const questionCount = useMemo(\n () => views.reduce((n, v) => n + v.fields.length, 0),\n [views],\n )\n\n // Clamp if a conditional hid beats behind the cursor.\n useEffect(() => {\n if (activeIndex > 0 && activeIndex >= total) setActiveIndex(total - 1)\n }, [activeIndex, total])\n\n // Greeting: the beat right after the first-name answer says hello.\n const nameViewIndex = useMemo(\n () => views.findIndex((v) => v.fields.some((f) => /^first[_-]?name$/i.test(f.slug))),\n [views],\n )\n const nameField =\n nameViewIndex >= 0\n ? views[nameViewIndex].fields.find((f) => /^first[_-]?name$/i.test(f.slug))\n : undefined\n const firstName = nameField ? stageFirstName(values[nameField.slug]) : null\n\n const clearAutoAdvance = useCallback(() => {\n if (autoAdvanceTimer.current !== null) {\n window.clearTimeout(autoAdvanceTimer.current)\n autoAdvanceTimer.current = null\n }\n }, [])\n useEffect(() => clearAutoAdvance, [clearAutoAdvance])\n\n const beatHasValue = useCallback(\n (index: number) =>\n (views[index]?.fields || []).some((f) => !isEmptyValue(values[f.slug])),\n [views, values],\n )\n const beatComplete = useCallback(\n (index: number) => {\n const v = views[index]\n if (!v) return false\n return v.fields.every(\n (f) => fieldIsComplete(f) || (!f.is_required && isEmptyValue(values[f.slug])),\n ) && (beatHasValue(index) || visited[index] === true)\n },\n [views, fieldIsComplete, values, beatHasValue, visited],\n )\n\n const activate = useCallback(\n (index: number) => {\n hasInteractedRef.current = true\n clearAutoAdvance()\n setShakeCount(0)\n setActiveIndex(index)\n if (index !== REST) trackStepChange(index + 1)\n },\n [clearAutoAdvance, trackStepChange],\n )\n\n const advance = useCallback(() => {\n hasInteractedRef.current = true\n clearAutoAdvance()\n const view = views[activeIndex]\n if (!view) return\n let failed = false\n for (const field of view.fields) {\n const error = validateField(field)\n if (error) {\n applyFieldError(field.slug, error)\n failed = true\n }\n }\n if (failed) {\n setShakeCount((n) => n + 1)\n return\n }\n setShakeCount(0)\n setVisited((prev) => ({ ...prev, [activeIndex]: true }))\n if (activeIndex >= views.length - 1) {\n // Every beat settled — the submit takes the floor (wake glow via\n // [data-sk-ready] once momentum completes).\n setActiveIndex(REST)\n } else {\n setActiveIndex(activeIndex + 1)\n trackStepChange(activeIndex + 2)\n }\n }, [views, activeIndex, validateField, applyFieldError, trackStepChange, clearAutoAdvance])\n\n // advance() closes over stale state inside the auto-advance timeout — the\n // ref always points at the freshest render's advance.\n const advanceRef = useRef(advance)\n advanceRef.current = advance\n\n // Validation errors raised by submit()'s validateAll while at rest: travel\n // to the first offending beat, shaking. (Errors raised by advance() are\n // always in the active beat, so this never fights the user's typing.)\n useEffect(() => {\n const index = views.findIndex((v) => v.fields.some((f) => errors[f.slug]))\n if (index >= 0 && index !== activeIndex) {\n setActiveIndex(index)\n setShakeCount((n) => n + 1)\n trackStepChange(index + 1)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [errors])\n\n // Land focus inside the newly active beat — first errored field after a\n // shake, else the first field. At rest, focus the finale submit so Enter\n // finishes the arc. Only after real interaction, never on load.\n useEffect(() => {\n if (!hasInteractedRef.current) return\n const timer = window.setTimeout(() => {\n if (activeIndex === REST) {\n formRef.current\n ?.querySelector<HTMLElement>('[data-sk-part=\"stage-submit\"]')\n ?.focus()\n return\n }\n const root = formRef.current?.querySelector<HTMLElement>(\n '[data-sk-beat-state=\"active\"]',\n )\n if (!root) return\n const inputs = Array.from(\n root.querySelectorAll<HTMLElement>(\n 'input:not([data-sk-honeypot]), textarea, select',\n ),\n )\n const errored = inputs.find((el) => {\n const name = el.getAttribute('name')\n return name ? !!errors[name] : false\n })\n ;(errored || inputs[0])?.focus({ preventScroll: false })\n }, 90) // let the bloom start so focus scroll lands on settled layout\n return () => window.clearTimeout(timer)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [activeIndex, shakeCount])\n\n const handleFieldChange = useCallback(\n (field: FormFieldType, soloAutoAdvance: boolean) => (value: unknown) => {\n hasInteractedRef.current = true\n setFieldValue(field.slug, value)\n // A solo single-select beat locks in and advances after a moment — the\n // pick IS the confirmation. Grouped beats and text wait for Enter/OK.\n if (soloAutoAdvance && !isEmptyValue(value)) {\n clearAutoAdvance()\n autoAdvanceTimer.current = window.setTimeout(() => {\n autoAdvanceTimer.current = null\n advanceRef.current()\n }, 380)\n }\n },\n [setFieldValue, clearAutoAdvance],\n )\n\n /** Focusable travel order inside the active beat (excludes radio/checkbox\n — those advance via their own click/auto-advance path). */\n const travelInputs = useCallback((): HTMLElement[] => {\n const root = formRef.current?.querySelector<HTMLElement>(\n '[data-sk-beat-state=\"active\"]',\n )\n if (!root) return []\n return Array.from(\n root.querySelectorAll<HTMLElement>(\n 'input:not([data-sk-honeypot]):not([type=\"radio\"]):not([type=\"checkbox\"]), textarea, select',\n ),\n )\n }, [])\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLFormElement>) => {\n if (activeIndex === REST) return\n const target = e.target as HTMLElement\n const tag = target.tagName\n const isField = tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT'\n if (!isField) return\n\n // Enter does the next thing: next field in the beat, else next beat.\n // Shift+Enter keeps making newlines in long answers.\n if (e.key === 'Enter') {\n if (tag === 'TEXTAREA' && e.shiftKey) return\n e.preventDefault()\n const inputs = travelInputs()\n const index = inputs.indexOf(target)\n if (index >= 0 && index < inputs.length - 1) inputs[index + 1].focus()\n else advance()\n return\n }\n\n // Vertical arrows travel too — but never where they already mean\n // something (textarea caret, select option, number/range steppers).\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n if (tag !== 'INPUT') return\n const type = (target as HTMLInputElement).type\n if (type === 'number' || type === 'range') return\n e.preventDefault()\n const inputs = travelInputs()\n const index = inputs.indexOf(target)\n if (e.key === 'ArrowDown') {\n if (index >= 0 && index < inputs.length - 1) inputs[index + 1].focus()\n else advance()\n } else {\n if (index > 0) inputs[index - 1].focus()\n else if (activeIndex > 0) activate(activeIndex - 1)\n }\n }\n },\n [activeIndex, advance, activate, travelInputs],\n )\n\n // Enter inside a beat routes through keydown; form submission here only\n // fires from the beat's OK button. The finale submit is type=\"button\".\n const handleSubmit = useCallback(\n (e: React.FormEvent) => {\n e.preventDefault()\n if (isSubmitting) return\n if (activeIndex !== REST) advance()\n else void submit()\n },\n [activeIndex, isSubmitting, advance, submit],\n )\n\n const handleFinaleSubmit = useCallback(() => {\n hasInteractedRef.current = true\n clearAutoAdvance()\n if (isSubmitting) return\n // validateAll inside submit() surfaces gaps; the errors effect then\n // travels to the first offending beat.\n void submit()\n }, [isSubmitting, submit, clearAutoAdvance])\n\n const ready = momentum.total > 0 ? momentum.done >= momentum.total : true\n const completeBeats = views.reduce((n, _v, i) => n + (beatComplete(i) ? 1 : 0), 0)\n\n const activeView = activeIndex === REST ? null : views[activeIndex]\n const activeIsGroup = !!activeView && activeView.fields.length > 1\n const activeAllOptionalEmpty =\n !!activeView &&\n activeView.fields.every((f) => !f.is_required && isEmptyValue(values[f.slug]))\n const activeHasTextarea =\n !!activeView && activeView.fields.some((f) => f.field_type === 'textarea')\n const eyebrow =\n activeIndex !== REST && firstName && activeIndex === nameViewIndex + 1\n ? { text: `Nice to meet you, ${firstName}.`, greet: true }\n : activeView?.step?.title\n ? { text: activeView.step.title, greet: false }\n : null\n\n return (\n <form\n ref={formRef}\n className={`sk-form sk-stage ${className || ''}`}\n data-sk-part=\"stage\"\n data-sk-state={isSubmitting ? 'submitting' : 'idle'}\n data-sk-ready={activeIndex === REST && ready && total > 0 ? 'true' : undefined}\n onSubmit={handleSubmit}\n onKeyDown={handleKeyDown}\n >\n <StageStyles />\n\n <header className=\"sk-stage__head\" data-sk-part=\"stage-head\">\n <span className=\"sk-stage__head-name\">{config.name}</span>\n <span className=\"sk-stage__head-meta\" data-sk-part=\"stage-estimate\">\n {`Takes ${stageEstimate(questionCount)}`}\n </span>\n </header>\n\n <div className=\"sk-stage__hud\" data-sk-part=\"stage-hud\">\n <div\n className=\"sk-stage__meter\"\n data-sk-part=\"stage-meter\"\n role=\"progressbar\"\n // A progressbar must have an accessible name; aria-valuetext alone\n // is not one (axe: aria-progressbar-name).\n aria-label=\"Form progress\"\n aria-valuemin={0}\n aria-valuemax={total}\n aria-valuenow={completeBeats}\n aria-valuetext={`${completeBeats} of ${total} answered`}\n >\n {views.map((v, i) => (\n <span\n key={v.fields[0].id}\n className=\"sk-stage__seg\"\n data-sk-lit={beatComplete(i) ? 'true' : undefined}\n data-sk-live={i === activeIndex ? 'true' : undefined}\n aria-hidden=\"true\"\n />\n ))}\n </div>\n <span\n className=\"sk-stage__counter\"\n data-sk-part=\"stage-counter\"\n data-sk-ready={activeIndex === REST && ready ? 'true' : undefined}\n aria-live=\"polite\"\n >\n {activeIndex === REST\n ? ready\n ? 'Ready'\n : `${completeBeats} / ${total}`\n : `${activeIndex + 1} / ${total}`}\n </span>\n </div>\n\n <div className=\"sk-stage__beats\" data-sk-part=\"stage-beats\">\n {views.map((view, i) => {\n const isActive = i === activeIndex\n const filled = visited[i] === true || beatHasValue(i)\n const answers = view.fields\n .map((f) => formatAnswer(values[f.slug]))\n .filter((a): a is string => a !== null)\n const summaryValue = answers.length\n ? answers.join(' · ')\n : filled\n ? 'Skipped'\n : null\n const summaryLabel =\n view.step?.title || view.fields.map((f) => f.label).join(' · ')\n const complete = beatComplete(i) && answers.length > 0\n\n return (\n <section\n key={view.fields[0].id}\n className=\"sk-stage__beat\"\n data-sk-part=\"stage-beat\"\n data-sk-beat-state={isActive ? 'active' : filled ? 'filled' : 'upcoming'}\n data-sk-beat-filled={filled ? 'true' : undefined}\n >\n {/* Settled / waiting row — collapses away while active. */}\n <div className=\"sk-stage__collapse sk-stage__collapse--summary\">\n <div inert={isActive ? true : undefined}>\n <div className=\"sk-stage__summary-inner\">\n <button\n type=\"button\"\n className=\"sk-stage__summary\"\n data-sk-part=\"stage-summary\"\n onClick={() => activate(i)}\n >\n <span className=\"sk-stage__summary-idx\" aria-hidden=\"true\">\n {String(i + 1).padStart(2, '0')}\n </span>\n <span className=\"sk-stage__summary-label\">{summaryLabel}</span>\n {summaryValue !== null && (\n <span\n className={\n 'sk-stage__summary-value' +\n (answers.length === 0\n ? ' sk-stage__summary-value--skipped'\n : '')\n }\n >\n {summaryValue}\n {complete && <SummaryTick />}\n </span>\n )}\n </button>\n </div>\n </div>\n </div>\n\n {/* The lit stage — blooms open while everything else settles. */}\n <div className=\"sk-stage__collapse sk-stage__collapse--body\">\n <div inert={isActive ? undefined : true}>\n <div\n key={isActive ? shakeCount : 0}\n className={\n 'sk-stage__body-inner' +\n (isActive && shakeCount > 0 ? ' sk-stage__shake' : '')\n }\n >\n {isActive && eyebrow && (\n <p\n className={\n 'sk-stage__eyebrow' +\n (eyebrow.greet ? ' sk-stage__eyebrow--greet' : '')\n }\n data-sk-part=\"stage-eyebrow\"\n >\n {eyebrow.text}\n </p>\n )}\n <div\n className={\n 'sk-stage__question' +\n (view.fields.length > 1 ? ' sk-stage__question--group' : '')\n }\n data-sk-part=\"stage-question\"\n >\n <div className=\"sk-stage__fields\">\n {view.fields.map((f) => (\n <FormField\n controls={fieldControls}\n key={f.id}\n // The question IS the label — a hide_label form\n // still asks it.\n field={{ ...f, hide_label: false }}\n value={values[f.slug]}\n error={errors[f.slug]}\n showValid={\n !!touched[f.slug] && !errors[f.slug] && fieldIsComplete(f)\n }\n onChange={handleFieldChange(\n f,\n view.fields.length === 1 &&\n AUTO_ADVANCE_TYPES.includes(f.field_type),\n )}\n classPrefix=\"sk-stage\"\n />\n ))}\n </div>\n <div className=\"sk-stage__actions\" data-sk-part=\"stage-actions\">\n <button\n type=\"submit\"\n className=\"sk-form__btn sk-form__btn--submit\"\n data-sk-part=\"stage-ok\"\n >\n {isActive && activeAllOptionalEmpty ? 'Skip' : 'OK'}\n </button>\n <span className=\"sk-stage__hint\" data-sk-part=\"stage-hint\">\n {isActive && activeHasTextarea ? (\n <>\n <kbd>Enter ↵</kbd> to continue · <kbd>Shift + Enter</kbd>{' '}\n for a new line\n </>\n ) : (\n <>\n press <kbd>Enter ↵</kbd>\n </>\n )}\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </section>\n )\n })}\n </div>\n\n {/* The finale — wakes ([data-sk-ready] pop + breathe) once every\n requirement clears and the run is at rest. */}\n <div className=\"sk-stage__finale\" data-sk-part=\"stage-finale\">\n <button\n type=\"button\"\n className=\"sk-form__btn sk-form__btn--submit\"\n data-sk-part=\"stage-submit\"\n disabled={isSubmitting}\n onClick={handleFinaleSubmit}\n >\n {isSubmitting ? 'Submitting...' : config.submit_button_text}\n </button>\n {activeIndex === REST && ready && (\n <span className=\"sk-stage__hint\">\n press <kbd>Enter ↵</kbd>\n </span>\n )}\n </div>\n\n {submitError && (\n <p\n className=\"sk-stage__submit-error\"\n role=\"alert\"\n style={{ color: 'var(--sk-error, #dc2626)' }}\n >\n {submitError}\n </p>\n )}\n\n {honeypot}\n </form>\n )\n}\n"]}
1
+ {"version":3,"sources":["../src/forms/FormStage.tsx"],"names":["useFieldControls","useState","useRef","useMemo","stageViews","useEffect","stageFirstName","useCallback","isEmptyValue","jsxs","jsx","StageStyles","stageEstimate","formatAnswer","SummaryTick","FormField","AUTO_ADVANCE_TYPES","Fragment"],"mappings":";;;;;;;;;AAsCA,IAAM,IAAA,GAAO,EAAA;AAEN,SAAS,SAAA,CAAU;AAAA,EACxB,MAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,eAAA;AAAA,EACA,eAAA;AAAA,EACA,MAAA;AAAA,EACA,eAAA;AAAA,EACA;AACF,CAAA,EAA0B;AAExB,EAAA,MAAM,aAAA,GAAgBA,iCAAA,CAAiB,MAAA,CAAO,MAAM,CAAA;AACpD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIC,eAAS,CAAC,CAAA;AAGhD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,cAAA,CAAkC,EAAE,CAAA;AAElE,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,eAAS,CAAC,CAAA;AAE9C,EAAA,MAAM,OAAA,GAAUC,aAA+B,IAAI,CAAA;AACnD,EAAA,MAAM,gBAAA,GAAmBA,aAAsB,IAAI,CAAA;AAEnD,EAAA,MAAM,gBAAA,GAAmBA,aAAO,KAAK,CAAA;AAIrC,EAAA,MAAM,KAAA,GAAQC,cAAQ,MAAM;AAC1B,IAAA,OAAOC,2BAAA,CAAW,MAAM,CAAA,CACrB,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,EAAG,MAAA,EAAQ,CAAA,CAAE,OAAO,MAAA,CAAO,cAAc,CAAA,EAAE,CAAE,CAAA,CAC9D,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA;AAAA,EACtC,CAAA,EAAG,CAAC,MAAA,EAAQ,cAAc,CAAC,CAAA;AAC3B,EAAA,MAAM,QAAQ,KAAA,CAAM,MAAA;AACpB,EAAA,MAAM,aAAA,GAAgBD,aAAA;AAAA,IACpB,MAAM,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,EAAG,MAAM,CAAA,GAAI,CAAA,CAAE,MAAA,CAAO,MAAA,EAAQ,CAAC,CAAA;AAAA,IACnD,CAAC,KAAK;AAAA,GACR;AAGA,EAAAE,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,cAAc,CAAA,IAAK,WAAA,IAAe,KAAA,EAAO,cAAA,CAAe,QAAQ,CAAC,CAAA;AAAA,EACvE,CAAA,EAAG,CAAC,WAAA,EAAa,KAAK,CAAC,CAAA;AAGvB,EAAA,MAAM,aAAA,GAAgBF,aAAA;AAAA,IACpB,MAAM,KAAA,CAAM,SAAA,CAAU,CAAC,MAAM,CAAA,CAAE,MAAA,CAAO,IAAA,CAAK,CAAC,MAAM,mBAAA,CAAoB,IAAA,CAAK,CAAA,CAAE,IAAI,CAAC,CAAC,CAAA;AAAA,IACnF,CAAC,KAAK;AAAA,GACR;AACA,EAAA,MAAM,SAAA,GACJ,aAAA,IAAiB,CAAA,GACb,KAAA,CAAM,aAAa,CAAA,CAAE,MAAA,CAAO,IAAA,CAAK,CAAC,MAAM,mBAAA,CAAoB,IAAA,CAAK,CAAA,CAAE,IAAI,CAAC,CAAA,GACxE,MAAA;AACN,EAAA,MAAM,YAAY,SAAA,GAAYG,+BAAA,CAAe,OAAO,SAAA,CAAU,IAAI,CAAC,CAAA,GAAI,IAAA;AAEvE,EAAA,MAAM,gBAAA,GAAmBC,kBAAY,MAAM;AACzC,IAAA,IAAI,gBAAA,CAAiB,YAAY,IAAA,EAAM;AACrC,MAAA,MAAA,CAAO,YAAA,CAAa,iBAAiB,OAAO,CAAA;AAC5C,MAAA,gBAAA,CAAiB,OAAA,GAAU,IAAA;AAAA,IAC7B;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AACL,EAAAF,eAAA,CAAU,MAAM,gBAAA,EAAkB,CAAC,gBAAgB,CAAC,CAAA;AAEpD,EAAA,MAAM,YAAA,GAAeE,iBAAA;AAAA,IACnB,CAAC,KAAA,KAAA,CACE,KAAA,CAAM,KAAK,CAAA,EAAG,UAAU,EAAC,EAAG,IAAA,CAAK,CAAC,MAAM,CAACC,6BAAA,CAAa,OAAO,CAAA,CAAE,IAAI,CAAC,CAAC,CAAA;AAAA,IACxE,CAAC,OAAO,MAAM;AAAA,GAChB;AACA,EAAA,MAAM,YAAA,GAAeD,iBAAA;AAAA,IACnB,CAAC,KAAA,KAAkB;AACjB,MAAA,MAAM,CAAA,GAAI,MAAM,KAAK,CAAA;AACrB,MAAA,IAAI,CAAC,GAAG,OAAO,KAAA;AACf,MAAA,OAAO,EAAE,MAAA,CAAO,KAAA;AAAA,QACd,CAAC,CAAA,KAAM,eAAA,CAAgB,CAAC,CAAA,IAAM,CAAC,CAAA,CAAE,WAAA,IAAeC,6BAAA,CAAa,MAAA,CAAO,CAAA,CAAE,IAAI,CAAC;AAAA,YACvE,YAAA,CAAa,KAAK,CAAA,IAAK,OAAA,CAAQ,KAAK,CAAA,KAAM,IAAA,CAAA;AAAA,IAClD,CAAA;AAAA,IACA,CAAC,KAAA,EAAO,eAAA,EAAiB,MAAA,EAAQ,cAAc,OAAO;AAAA,GACxD;AAEA,EAAA,MAAM,QAAA,GAAWD,iBAAA;AAAA,IACf,CAAC,KAAA,KAAkB;AACjB,MAAA,gBAAA,CAAiB,OAAA,GAAU,IAAA;AAC3B,MAAA,gBAAA,EAAiB;AACjB,MAAA,aAAA,CAAc,CAAC,CAAA;AACf,MAAA,cAAA,CAAe,KAAK,CAAA;AACpB,MAAA,IAAI,KAAA,KAAU,IAAA,EAAM,eAAA,CAAgB,KAAA,GAAQ,CAAC,CAAA;AAAA,IAC/C,CAAA;AAAA,IACA,CAAC,kBAAkB,eAAe;AAAA,GACpC;AAEA,EAAA,MAAM,OAAA,GAAUA,kBAAY,MAAM;AAChC,IAAA,gBAAA,CAAiB,OAAA,GAAU,IAAA;AAC3B,IAAA,gBAAA,EAAiB;AACjB,IAAA,MAAM,IAAA,GAAO,MAAM,WAAW,CAAA;AAC9B,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,IAAI,MAAA,GAAS,KAAA;AACb,IAAA,KAAA,MAAW,KAAA,IAAS,KAAK,MAAA,EAAQ;AAC/B,MAAA,MAAM,KAAA,GAAQ,cAAc,KAAK,CAAA;AACjC,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,eAAA,CAAgB,KAAA,CAAM,MAAM,KAAK,CAAA;AACjC,QAAA,MAAA,GAAS,IAAA;AAAA,MACX;AAAA,IACF;AACA,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,aAAA,CAAc,CAAC,CAAA,KAAM,CAAA,GAAI,CAAC,CAAA;AAC1B,MAAA;AAAA,IACF;AACA,IAAA,aAAA,CAAc,CAAC,CAAA;AACf,IAAA,UAAA,CAAW,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,WAAW,GAAG,IAAA,EAAK,CAAE,CAAA;AACvD,IAAA,IAAI,WAAA,IAAe,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG;AAGnC,MAAA,cAAA,CAAe,IAAI,CAAA;AAAA,IACrB,CAAA,MAAO;AACL,MAAA,cAAA,CAAe,cAAc,CAAC,CAAA;AAC9B,MAAA,eAAA,CAAgB,cAAc,CAAC,CAAA;AAAA,IACjC;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,EAAO,WAAA,EAAa,eAAe,eAAA,EAAiB,eAAA,EAAiB,gBAAgB,CAAC,CAAA;AAI1F,EAAA,MAAM,UAAA,GAAaL,aAAO,OAAO,CAAA;AACjC,EAAA,UAAA,CAAW,OAAA,GAAU,OAAA;AAKrB,EAAAG,eAAA,CAAU,MAAM;AACd,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,SAAA,CAAU,CAAC,MAAM,CAAA,CAAE,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAM,MAAA,CAAO,CAAA,CAAE,IAAI,CAAC,CAAC,CAAA;AACzE,IAAA,IAAI,KAAA,IAAS,CAAA,IAAK,KAAA,KAAU,WAAA,EAAa;AACvC,MAAA,cAAA,CAAe,KAAK,CAAA;AACpB,MAAA,aAAA,CAAc,CAAC,CAAA,KAAM,CAAA,GAAI,CAAC,CAAA;AAC1B,MAAA,eAAA,CAAgB,QAAQ,CAAC,CAAA;AAAA,IAC3B;AAAA,EAEF,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAKX,EAAAA,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,iBAAiB,OAAA,EAAS;AAC/B,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,UAAA,CAAW,MAAM;AACpC,MAAA,IAAI,gBAAgB,IAAA,EAAM;AACxB,QAAA,OAAA,CAAQ,OAAA,EACJ,aAAA,CAA2B,+BAA+B,CAAA,EAC1D,KAAA,EAAM;AACV,QAAA;AAAA,MACF;AACA,MAAA,MAAM,IAAA,GAAO,QAAQ,OAAA,EAAS,aAAA;AAAA,QAC5B;AAAA,OACF;AACA,MAAA,IAAI,CAAC,IAAA,EAAM;AACX,MAAA,MAAM,SAAS,KAAA,CAAM,IAAA;AAAA,QACnB,IAAA,CAAK,gBAAA;AAAA,UACH;AAAA;AACF,OACF;AACA,MAAA,MAAM,OAAA,GAAU,MAAA,CAAO,IAAA,CAAK,CAAC,EAAA,KAAO;AAClC,QAAA,MAAM,IAAA,GAAO,EAAA,CAAG,YAAA,CAAa,MAAM,CAAA;AACnC,QAAA,OAAO,IAAA,GAAO,CAAC,CAAC,MAAA,CAAO,IAAI,CAAA,GAAI,KAAA;AAAA,MACjC,CAAC,CAAA;AACA,MAAA,CAAC,OAAA,IAAW,OAAO,CAAC,CAAA,GAAI,MAAM,EAAE,aAAA,EAAe,OAAO,CAAA;AAAA,IACzD,GAAG,EAAE,CAAA;AACL,IAAA,OAAO,MAAM,MAAA,CAAO,YAAA,CAAa,KAAK,CAAA;AAAA,EAExC,CAAA,EAAG,CAAC,WAAA,EAAa,UAAU,CAAC,CAAA;AAE5B,EAAA,MAAM,iBAAA,GAAoBE,iBAAA;AAAA,IACxB,CAAC,KAAA,EAAsB,eAAA,KAA6B,CAAC,KAAA,KAAmB;AACtE,MAAA,gBAAA,CAAiB,OAAA,GAAU,IAAA;AAC3B,MAAA,aAAA,CAAc,KAAA,CAAM,MAAM,KAAK,CAAA;AAG/B,MAAA,IAAI,eAAA,IAAmB,CAACC,6BAAA,CAAa,KAAK,CAAA,EAAG;AAC3C,QAAA,gBAAA,EAAiB;AACjB,QAAA,gBAAA,CAAiB,OAAA,GAAU,MAAA,CAAO,UAAA,CAAW,MAAM;AACjD,UAAA,gBAAA,CAAiB,OAAA,GAAU,IAAA;AAC3B,UAAA,UAAA,CAAW,OAAA,EAAQ;AAAA,QACrB,GAAG,GAAG,CAAA;AAAA,MACR;AAAA,IACF,CAAA;AAAA,IACA,CAAC,eAAe,gBAAgB;AAAA,GAClC;AAIA,EAAA,MAAM,YAAA,GAAeD,kBAAY,MAAqB;AACpD,IAAA,MAAM,IAAA,GAAO,QAAQ,OAAA,EAAS,aAAA;AAAA,MAC5B;AAAA,KACF;AACA,IAAA,IAAI,CAAC,IAAA,EAAM,OAAO,EAAC;AACnB,IAAA,OAAO,KAAA,CAAM,IAAA;AAAA,MACX,IAAA,CAAK,gBAAA;AAAA,QACH;AAAA;AACF,KACF;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,aAAA,GAAgBA,iBAAA;AAAA,IACpB,CAAC,CAAA,KAA4C;AAC3C,MAAA,IAAI,gBAAgB,IAAA,EAAM;AAC1B,MAAA,MAAM,SAAS,CAAA,CAAE,MAAA;AACjB,MAAA,MAAM,MAAM,MAAA,CAAO,OAAA;AACnB,MAAA,MAAM,OAAA,GAAU,GAAA,KAAQ,OAAA,IAAW,GAAA,KAAQ,cAAc,GAAA,KAAQ,QAAA;AACjE,MAAA,IAAI,CAAC,OAAA,EAAS;AAId,MAAA,IAAI,CAAA,CAAE,QAAQ,OAAA,EAAS;AACrB,QAAA,IAAI,GAAA,KAAQ,UAAA,IAAc,CAAA,CAAE,QAAA,EAAU;AACtC,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,MAAM,SAAS,YAAA,EAAa;AAC5B,QAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA;AACnC,QAAA,IAAI,KAAA,IAAS,CAAA,IAAK,KAAA,GAAQ,MAAA,CAAO,MAAA,GAAS,GAAG,MAAA,CAAO,KAAA,GAAQ,CAAC,CAAA,CAAE,KAAA,EAAM;AAAA,aAChE,OAAA,EAAQ;AACb,QAAA;AAAA,MACF;AAIA,MAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,WAAA,IAAe,CAAA,CAAE,QAAQ,SAAA,EAAW;AAChD,QAAA,IAAI,QAAQ,OAAA,EAAS;AACrB,QAAA,MAAM,OAAQ,MAAA,CAA4B,IAAA;AAC1C,QAAA,IAAI,IAAA,KAAS,QAAA,IAAY,IAAA,KAAS,OAAA,EAAS;AAC3C,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,MAAM,SAAS,YAAA,EAAa;AAC5B,QAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA;AACnC,QAAA,IAAI,CAAA,CAAE,QAAQ,WAAA,EAAa;AACzB,UAAA,IAAI,KAAA,IAAS,CAAA,IAAK,KAAA,GAAQ,MAAA,CAAO,MAAA,GAAS,GAAG,MAAA,CAAO,KAAA,GAAQ,CAAC,CAAA,CAAE,KAAA,EAAM;AAAA,eAChE,OAAA,EAAQ;AAAA,QACf,CAAA,MAAO;AACL,UAAA,IAAI,QAAQ,CAAA,EAAG,MAAA,CAAO,KAAA,GAAQ,CAAC,EAAE,KAAA,EAAM;AAAA,eAAA,IAC9B,WAAA,GAAc,CAAA,EAAG,QAAA,CAAS,WAAA,GAAc,CAAC,CAAA;AAAA,QACpD;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,CAAC,WAAA,EAAa,OAAA,EAAS,QAAA,EAAU,YAAY;AAAA,GAC/C;AAIA,EAAA,MAAM,YAAA,GAAeA,iBAAA;AAAA,IACnB,CAAC,CAAA,KAAuB;AACtB,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,IAAI,YAAA,EAAc;AAClB,MAAA,IAAI,WAAA,KAAgB,MAAM,OAAA,EAAQ;AAAA,gBACxB,MAAA,EAAO;AAAA,IACnB,CAAA;AAAA,IACA,CAAC,WAAA,EAAa,YAAA,EAAc,OAAA,EAAS,MAAM;AAAA,GAC7C;AAEA,EAAA,MAAM,kBAAA,GAAqBA,kBAAY,MAAM;AAC3C,IAAA,gBAAA,CAAiB,OAAA,GAAU,IAAA;AAC3B,IAAA,gBAAA,EAAiB;AACjB,IAAA,IAAI,YAAA,EAAc;AAGlB,IAAA,KAAK,MAAA,EAAO;AAAA,EACd,CAAA,EAAG,CAAC,YAAA,EAAc,MAAA,EAAQ,gBAAgB,CAAC,CAAA;AAE3C,EAAA,MAAM,QAAQ,QAAA,CAAS,KAAA,GAAQ,IAAI,QAAA,CAAS,IAAA,IAAQ,SAAS,KAAA,GAAQ,IAAA;AACrE,EAAA,MAAM,aAAA,GAAgB,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,EAAG,EAAA,EAAI,CAAA,KAAM,CAAA,IAAK,YAAA,CAAa,CAAC,CAAA,GAAI,CAAA,GAAI,IAAI,CAAC,CAAA;AAEjF,EAAA,MAAM,UAAA,GAAa,WAAA,KAAgB,IAAA,GAAO,IAAA,GAAO,MAAM,WAAW,CAAA;AAClE,EAAsB,CAAC,CAAC,UAAA,IAAc,UAAA,CAAW,OAAO,MAAA,GAAS;AACjE,EAAA,MAAM,yBACJ,CAAC,CAAC,UAAA,IACF,UAAA,CAAW,OAAO,KAAA,CAAM,CAAC,CAAA,KAAM,CAAC,EAAE,WAAA,IAAeC,6BAAA,CAAa,OAAO,CAAA,CAAE,IAAI,CAAC,CAAC,CAAA;AAC/E,EAAA,MAAM,iBAAA,GACJ,CAAC,CAAC,UAAA,IAAc,UAAA,CAAW,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,UAAA,KAAe,UAAU,CAAA;AAC3E,EAAA,MAAM,OAAA,GACJ,WAAA,KAAgB,IAAA,IAAQ,SAAA,IAAa,WAAA,KAAgB,gBAAgB,CAAA,GACjE,EAAE,IAAA,EAAM,CAAA,kBAAA,EAAqB,SAAS,CAAA,CAAA,CAAA,EAAK,OAAO,IAAA,EAAK,GACvD,UAAA,EAAY,IAAA,EAAM,KAAA,GAChB,EAAE,IAAA,EAAM,UAAA,CAAW,IAAA,CAAK,KAAA,EAAO,KAAA,EAAO,KAAA,EAAM,GAC5C,IAAA;AAER,EAAA,uBACEC,eAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,OAAA;AAAA,MACL,SAAA,EAAW,CAAA,iBAAA,EAAoB,SAAA,IAAa,EAAE,CAAA,CAAA;AAAA,MAC9C,cAAA,EAAa,OAAA;AAAA,MACb,eAAA,EAAe,eAAe,YAAA,GAAe,MAAA;AAAA,MAC7C,iBAAe,WAAA,KAAgB,IAAA,IAAQ,KAAA,IAAS,KAAA,GAAQ,IAAI,MAAA,GAAS,MAAA;AAAA,MACrE,QAAA,EAAU,YAAA;AAAA,MACV,SAAA,EAAW,aAAA;AAAA,MAEX,QAAA,EAAA;AAAA,wBAAAC,cAAA,CAACC,4BAAA,EAAA,EAAY,CAAA;AAAA,wBAEbF,eAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,gBAAA,EAAiB,gBAAa,YAAA,EAC9C,QAAA,EAAA;AAAA,0BAAAC,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAA,EAAuB,QAAA,EAAA,MAAA,CAAO,IAAA,EAAK,CAAA;AAAA,0BACnDA,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAA,EAAsB,cAAA,EAAa,kBAChD,QAAA,EAAA,CAAA,MAAA,EAASE,8BAAA,CAAc,aAAa,CAAC,CAAA,CAAA,EACxC;AAAA,SAAA,EACF,CAAA;AAAA,wBAEAH,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EAAgB,gBAAa,WAAA,EAC1C,QAAA,EAAA;AAAA,0BAAAC,cAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,iBAAA;AAAA,cACV,cAAA,EAAa,aAAA;AAAA,cACb,IAAA,EAAK,aAAA;AAAA,cAGL,YAAA,EAAW,eAAA;AAAA,cACX,eAAA,EAAe,CAAA;AAAA,cACf,eAAA,EAAe,KAAA;AAAA,cACf,eAAA,EAAe,aAAA;AAAA,cACf,gBAAA,EAAgB,CAAA,EAAG,aAAa,CAAA,IAAA,EAAO,KAAK,CAAA,SAAA,CAAA;AAAA,cAE3C,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,qBACbA,cAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBAEC,SAAA,EAAU,eAAA;AAAA,kBACV,aAAA,EAAa,YAAA,CAAa,CAAC,CAAA,GAAI,MAAA,GAAS,MAAA;AAAA,kBACxC,cAAA,EAAc,CAAA,KAAM,WAAA,GAAc,MAAA,GAAS,MAAA;AAAA,kBAC3C,aAAA,EAAY;AAAA,iBAAA;AAAA,gBAJP,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,CAAE;AAAA,eAMpB;AAAA;AAAA,WACH;AAAA,0BACAA,cAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,mBAAA;AAAA,cACV,cAAA,EAAa,eAAA;AAAA,cACb,eAAA,EAAe,WAAA,KAAgB,IAAA,IAAQ,KAAA,GAAQ,MAAA,GAAS,MAAA;AAAA,cACxD,WAAA,EAAU,QAAA;AAAA,cAET,QAAA,EAAA,WAAA,KAAgB,IAAA,GACb,KAAA,GACE,OAAA,GACA,CAAA,EAAG,aAAa,CAAA,GAAA,EAAM,KAAK,CAAA,CAAA,GAC7B,CAAA,EAAG,WAAA,GAAc,CAAC,MAAM,KAAK,CAAA;AAAA;AAAA;AACnC,SAAA,EACF,CAAA;AAAA,wBAEAA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EAAkB,cAAA,EAAa,eAC3C,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,KAAM;AACtB,UAAA,MAAM,WAAW,CAAA,KAAM,WAAA;AACvB,UAAA,MAAM,SAAS,OAAA,CAAQ,CAAC,CAAA,KAAM,IAAA,IAAQ,aAAa,CAAC,CAAA;AACpD,UAAA,MAAM,UAAU,IAAA,CAAK,MAAA,CAClB,GAAA,CAAI,CAAC,MAAMG,6BAAA,CAAa,MAAA,CAAO,CAAA,CAAE,IAAI,CAAC,CAAC,CAAA,CACvC,OAAO,CAAC,CAAA,KAAmB,MAAM,IAAI,CAAA;AACxC,UAAA,MAAM,YAAA,GAAe,QAAQ,MAAA,GACzB,OAAA,CAAQ,KAAK,QAAK,CAAA,GAClB,SACE,SAAA,GACA,IAAA;AACN,UAAA,MAAM,YAAA,GACJ,IAAA,CAAK,IAAA,EAAM,KAAA,IAAS,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,KAAK,CAAA,CAAE,KAAK,QAAK,CAAA;AAChE,UAAA,MAAM,QAAA,GAAW,YAAA,CAAa,CAAC,CAAA,IAAK,QAAQ,MAAA,GAAS,CAAA;AAErD,UAAA,uBACEJ,eAAA;AAAA,YAAC,SAAA;AAAA,YAAA;AAAA,cAEC,SAAA,EAAU,gBAAA;AAAA,cACV,cAAA,EAAa,YAAA;AAAA,cACb,oBAAA,EAAoB,QAAA,GAAW,QAAA,GAAW,MAAA,GAAS,QAAA,GAAW,UAAA;AAAA,cAC9D,qBAAA,EAAqB,SAAS,MAAA,GAAS,MAAA;AAAA,cAGvC,QAAA,EAAA;AAAA,gCAAAC,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gDAAA,EACb,QAAA,kBAAAA,cAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,QAAA,GAAW,IAAA,GAAO,MAAA,EAC5B,QAAA,kBAAAA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,kBAAAD,eAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,IAAA,EAAK,QAAA;AAAA,oBACL,SAAA,EAAU,mBAAA;AAAA,oBACV,cAAA,EAAa,eAAA;AAAA,oBACb,OAAA,EAAS,MAAM,QAAA,CAAS,CAAC,CAAA;AAAA,oBAEzB,QAAA,EAAA;AAAA,sCAAAC,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uBAAA,EAAwB,aAAA,EAAY,MAAA,EACjD,QAAA,EAAA,MAAA,CAAO,CAAA,GAAI,CAAC,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAA,EAChC,CAAA;AAAA,sCACAA,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAA,EAA2B,QAAA,EAAA,YAAA,EAAa,CAAA;AAAA,sBACvD,iBAAiB,IAAA,oBAChBD,eAAA;AAAA,wBAAC,MAAA;AAAA,wBAAA;AAAA,0BACC,SAAA,EACE,yBAAA,IACC,OAAA,CAAQ,MAAA,KAAW,IAChB,mCAAA,GACA,EAAA,CAAA;AAAA,0BAGL,QAAA,EAAA;AAAA,4BAAA,YAAA;AAAA,4BACA,QAAA,mCAAaK,4BAAA,EAAA,EAAY;AAAA;AAAA;AAAA;AAC5B;AAAA;AAAA,iBAEJ,EACF,GACF,CAAA,EACF,CAAA;AAAA,gCAGAJ,cAAA,CAAC,SAAI,SAAA,EAAU,6CAAA,EACb,yCAAC,KAAA,EAAA,EAAI,KAAA,EAAO,QAAA,GAAW,MAAA,GAAY,IAAA,EACjC,QAAA,kBAAAD,eAAA;AAAA,kBAAC,KAAA;AAAA,kBAAA;AAAA,oBAEC,SAAA,EACE,sBAAA,IACC,QAAA,IAAY,UAAA,GAAa,IAAI,kBAAA,GAAqB,EAAA,CAAA;AAAA,oBAGpD,QAAA,EAAA;AAAA,sBAAA,QAAA,IAAY,OAAA,oBACXC,cAAA;AAAA,wBAAC,GAAA;AAAA,wBAAA;AAAA,0BACC,SAAA,EACE,mBAAA,IACC,OAAA,CAAQ,KAAA,GAAQ,2BAAA,GAA8B,EAAA,CAAA;AAAA,0BAEjD,cAAA,EAAa,eAAA;AAAA,0BAEZ,QAAA,EAAA,OAAA,CAAQ;AAAA;AAAA,uBACX;AAAA,sCAEFD,eAAA;AAAA,wBAAC,KAAA;AAAA,wBAAA;AAAA,0BACC,WACE,oBAAA,IACC,IAAA,CAAK,MAAA,CAAO,MAAA,GAAS,IAAI,4BAAA,GAA+B,EAAA,CAAA;AAAA,0BAE3D,cAAA,EAAa,gBAAA;AAAA,0BAEb,QAAA,EAAA;AAAA,4CAAAC,cAAA,CAAC,SAAI,SAAA,EAAU,kBAAA,EACZ,eAAK,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,qBAChBA,cAAA;AAAA,8BAACK,0BAAA;AAAA,8BAAA;AAAA,gCACC,QAAA,EAAU,aAAA;AAAA,gCAIV,KAAA,EAAO,EAAE,GAAG,CAAA,EAAG,YAAY,KAAA,EAAM;AAAA,gCACjC,KAAA,EAAO,MAAA,CAAO,CAAA,CAAE,IAAI,CAAA;AAAA,gCACpB,KAAA,EAAO,MAAA,CAAO,CAAA,CAAE,IAAI,CAAA;AAAA,gCACpB,SAAA,EACE,CAAC,CAAC,OAAA,CAAQ,CAAA,CAAE,IAAI,CAAA,IAAK,CAAC,MAAA,CAAO,CAAA,CAAE,IAAI,CAAA,IAAK,gBAAgB,CAAC,CAAA;AAAA,gCAE3D,QAAA,EAAU,iBAAA;AAAA,kCACR,CAAA;AAAA,kCACA,KAAK,MAAA,CAAO,MAAA,KAAW,KACrBC,mCAAA,CAAmB,QAAA,CAAS,EAAE,UAAU;AAAA,iCAC5C;AAAA,gCACA,WAAA,EAAY;AAAA,+BAAA;AAAA,8BAdP,CAAA,CAAE;AAAA,6BAgBV,CAAA,EACH,CAAA;AAAA,4CACAP,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAA,EAAoB,gBAAa,eAAA,EAC9C,QAAA,EAAA;AAAA,8CAAAC,cAAA;AAAA,gCAAC,QAAA;AAAA,gCAAA;AAAA,kCACC,IAAA,EAAK,QAAA;AAAA,kCACL,SAAA,EAAU,mCAAA;AAAA,kCACV,cAAA,EAAa,UAAA;AAAA,kCAEZ,QAAA,EAAA,QAAA,IAAY,yBAAyB,MAAA,GAAS;AAAA;AAAA,+BACjD;AAAA,8CACAA,cAAA,CAAC,UAAK,SAAA,EAAU,gBAAA,EAAiB,gBAAa,YAAA,EAC3C,QAAA,EAAA,QAAA,IAAY,oCACXD,eAAA,CAAAQ,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,gDAAAP,cAAA,CAAC,SAAI,QAAA,EAAA,cAAA,EAAO,CAAA;AAAA,gCAAM,oBAAA;AAAA,gDAAeA,cAAA,CAAC,SAAI,QAAA,EAAA,eAAA,EAAa,CAAA;AAAA,gCAAO,GAAA;AAAA,gCAAI;AAAA,+BAAA,EAEhE,oBAEAD,eAAA,CAAAQ,mBAAA,EAAA,EAAE,QAAA,EAAA;AAAA,gCAAA,QAAA;AAAA,gDACMP,cAAA,CAAC,SAAI,QAAA,EAAA,cAAA,EAAO;AAAA,+BAAA,EACpB,CAAA,EAEJ;AAAA,6BAAA,EACF;AAAA;AAAA;AAAA;AACF;AAAA,mBAAA;AAAA,kBAnEK,WAAW,UAAA,GAAa;AAAA,mBAqEjC,CAAA,EACF;AAAA;AAAA,aAAA;AAAA,YAhHK,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,CAAE;AAAA,WAiHtB;AAAA,QAEJ,CAAC,CAAA,EACH,CAAA;AAAA,wBAIAD,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EAAmB,gBAAa,cAAA,EAC7C,QAAA,EAAA;AAAA,0BAAAC,cAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,SAAA,EAAU,mCAAA;AAAA,cACV,cAAA,EAAa,cAAA;AAAA,cACb,QAAA,EAAU,YAAA;AAAA,cACV,OAAA,EAAS,kBAAA;AAAA,cAER,QAAA,EAAA,YAAA,GAAe,kBAAkB,MAAA,CAAO;AAAA;AAAA,WAC3C;AAAA,UACC,gBAAgB,IAAA,IAAQ,KAAA,oBACvBD,eAAA,CAAC,MAAA,EAAA,EAAK,WAAU,gBAAA,EAAiB,QAAA,EAAA;AAAA,YAAA,QAAA;AAAA,4BACzBC,cAAA,CAAC,SAAI,QAAA,EAAA,cAAA,EAAO;AAAA,WAAA,EACpB;AAAA,SAAA,EAEJ,CAAA;AAAA,QAEC,WAAA,oBACCA,cAAA;AAAA,UAAC,GAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,wBAAA;AAAA,YACV,IAAA,EAAK,OAAA;AAAA,YACL,KAAA,EAAO,EAAE,KAAA,EAAO,0BAAA,EAA2B;AAAA,YAE1C,QAAA,EAAA;AAAA;AAAA,SACH;AAAA,QAGD;AAAA;AAAA;AAAA,GACH;AAEJ","file":"FormStage-FME3O3N2.js","sourcesContent":["'use client'\n\n/**\n * FormStage — the \"stage\" experience: a spotlight ACCORDION. Beats expand and\n * collapse on one surface (paired grid-rows morphs: the active beat blooms\n * while the previous settles into a filled summary row of label · answer ·\n * tick; upcoming beats wait as dim numbered rows). Enter advances: next field\n * in the beat, then the next beat, then the wake-lit submit. Because every\n * answer stays visible, the form is its own review — no confirm screen.\n *\n * A beat is a VIEW, not a field (see experience-plan.ts): consecutive\n * half/third-width fields share a beat exactly like they share a row in the\n * classic grid; full-width fields stand alone; steps break beats.\n *\n * This is a RENDER BRANCH of FormClient, never a customRender: FormClient\n * still owns values/errors/honeypot/submit, so spam defense and validation\n * are identical to classic. Beat index rides the existing step-tracking pipe,\n * turning form_analytics into a per-beat funnel with zero API changes.\n *\n * Loaded lazily by FormClient — classic-form sites never download it.\n */\n\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { useFieldControls } from './field-controls'\nimport { FormField } from './FormField'\nimport { StageStyles, SummaryTick } from './experience-chrome'\nimport {\n AUTO_ADVANCE_TYPES,\n formatAnswer,\n isEmptyValue,\n stageEstimate,\n stageFirstName,\n stageViews,\n} from './experience-plan'\nimport type { StageView } from './experience-plan'\nimport type { ExperienceRenderProps, FormField as FormFieldType } from './types'\n\n/** -1 = at rest (nothing active — every beat settled, submit has the floor). */\nconst REST = -1\n\nexport function FormStage({\n config,\n values,\n errors,\n touched,\n isSubmitting,\n submitError,\n momentum,\n className,\n setFieldValue,\n validateField,\n isFieldVisible,\n fieldIsComplete,\n applyFieldError,\n submit,\n trackStepChange,\n honeypot,\n}: ExperienceRenderProps) {\n // Same on-demand date/file controls the classic form uses.\n const fieldControls = useFieldControls(config.fields)\n const [activeIndex, setActiveIndex] = useState(0)\n // Beats deliberately passed through (including skipped-empty optionals) —\n // drives \"Skipped\" vs \"not there yet\" in the settled rows.\n const [visited, setVisited] = useState<Record<number, boolean>>({})\n // Incremented on each rejected advance so the shake animation replays.\n const [shakeCount, setShakeCount] = useState(0)\n\n const formRef = useRef<HTMLFormElement | null>(null)\n const autoAdvanceTimer = useRef<number | null>(null)\n // Focus is only ever moved after the user has interacted — never on load.\n const hasInteractedRef = useRef(false)\n\n // The run respects conditional visibility live — answering an earlier\n // beat can add or remove later ones.\n const views = useMemo(() => {\n return stageViews(config)\n .map((v) => ({ ...v, fields: v.fields.filter(isFieldVisible) }))\n .filter((v) => v.fields.length > 0)\n }, [config, isFieldVisible])\n const total = views.length\n const questionCount = useMemo(\n () => views.reduce((n, v) => n + v.fields.length, 0),\n [views],\n )\n\n // Clamp if a conditional hid beats behind the cursor.\n useEffect(() => {\n if (activeIndex > 0 && activeIndex >= total) setActiveIndex(total - 1)\n }, [activeIndex, total])\n\n // Greeting: the beat right after the first-name answer says hello.\n const nameViewIndex = useMemo(\n () => views.findIndex((v) => v.fields.some((f) => /^first[_-]?name$/i.test(f.slug))),\n [views],\n )\n const nameField =\n nameViewIndex >= 0\n ? views[nameViewIndex].fields.find((f) => /^first[_-]?name$/i.test(f.slug))\n : undefined\n const firstName = nameField ? stageFirstName(values[nameField.slug]) : null\n\n const clearAutoAdvance = useCallback(() => {\n if (autoAdvanceTimer.current !== null) {\n window.clearTimeout(autoAdvanceTimer.current)\n autoAdvanceTimer.current = null\n }\n }, [])\n useEffect(() => clearAutoAdvance, [clearAutoAdvance])\n\n const beatHasValue = useCallback(\n (index: number) =>\n (views[index]?.fields || []).some((f) => !isEmptyValue(values[f.slug])),\n [views, values],\n )\n const beatComplete = useCallback(\n (index: number) => {\n const v = views[index]\n if (!v) return false\n return v.fields.every(\n (f) => fieldIsComplete(f) || (!f.is_required && isEmptyValue(values[f.slug])),\n ) && (beatHasValue(index) || visited[index] === true)\n },\n [views, fieldIsComplete, values, beatHasValue, visited],\n )\n\n const activate = useCallback(\n (index: number) => {\n hasInteractedRef.current = true\n clearAutoAdvance()\n setShakeCount(0)\n setActiveIndex(index)\n if (index !== REST) trackStepChange(index + 1)\n },\n [clearAutoAdvance, trackStepChange],\n )\n\n const advance = useCallback(() => {\n hasInteractedRef.current = true\n clearAutoAdvance()\n const view = views[activeIndex]\n if (!view) return\n let failed = false\n for (const field of view.fields) {\n const error = validateField(field)\n if (error) {\n applyFieldError(field.slug, error)\n failed = true\n }\n }\n if (failed) {\n setShakeCount((n) => n + 1)\n return\n }\n setShakeCount(0)\n setVisited((prev) => ({ ...prev, [activeIndex]: true }))\n if (activeIndex >= views.length - 1) {\n // Every beat settled — the submit takes the floor (wake glow via\n // [data-sk-ready] once momentum completes).\n setActiveIndex(REST)\n } else {\n setActiveIndex(activeIndex + 1)\n trackStepChange(activeIndex + 2)\n }\n }, [views, activeIndex, validateField, applyFieldError, trackStepChange, clearAutoAdvance])\n\n // advance() closes over stale state inside the auto-advance timeout — the\n // ref always points at the freshest render's advance.\n const advanceRef = useRef(advance)\n advanceRef.current = advance\n\n // Validation errors raised by submit()'s validateAll while at rest: travel\n // to the first offending beat, shaking. (Errors raised by advance() are\n // always in the active beat, so this never fights the user's typing.)\n useEffect(() => {\n const index = views.findIndex((v) => v.fields.some((f) => errors[f.slug]))\n if (index >= 0 && index !== activeIndex) {\n setActiveIndex(index)\n setShakeCount((n) => n + 1)\n trackStepChange(index + 1)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [errors])\n\n // Land focus inside the newly active beat — first errored field after a\n // shake, else the first field. At rest, focus the finale submit so Enter\n // finishes the arc. Only after real interaction, never on load.\n useEffect(() => {\n if (!hasInteractedRef.current) return\n const timer = window.setTimeout(() => {\n if (activeIndex === REST) {\n formRef.current\n ?.querySelector<HTMLElement>('[data-sk-part=\"stage-submit\"]')\n ?.focus()\n return\n }\n const root = formRef.current?.querySelector<HTMLElement>(\n '[data-sk-beat-state=\"active\"]',\n )\n if (!root) return\n const inputs = Array.from(\n root.querySelectorAll<HTMLElement>(\n 'input:not([data-sk-honeypot]), textarea, select',\n ),\n )\n const errored = inputs.find((el) => {\n const name = el.getAttribute('name')\n return name ? !!errors[name] : false\n })\n ;(errored || inputs[0])?.focus({ preventScroll: false })\n }, 90) // let the bloom start so focus scroll lands on settled layout\n return () => window.clearTimeout(timer)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [activeIndex, shakeCount])\n\n const handleFieldChange = useCallback(\n (field: FormFieldType, soloAutoAdvance: boolean) => (value: unknown) => {\n hasInteractedRef.current = true\n setFieldValue(field.slug, value)\n // A solo single-select beat locks in and advances after a moment — the\n // pick IS the confirmation. Grouped beats and text wait for Enter/OK.\n if (soloAutoAdvance && !isEmptyValue(value)) {\n clearAutoAdvance()\n autoAdvanceTimer.current = window.setTimeout(() => {\n autoAdvanceTimer.current = null\n advanceRef.current()\n }, 380)\n }\n },\n [setFieldValue, clearAutoAdvance],\n )\n\n /** Focusable travel order inside the active beat (excludes radio/checkbox\n — those advance via their own click/auto-advance path). */\n const travelInputs = useCallback((): HTMLElement[] => {\n const root = formRef.current?.querySelector<HTMLElement>(\n '[data-sk-beat-state=\"active\"]',\n )\n if (!root) return []\n return Array.from(\n root.querySelectorAll<HTMLElement>(\n 'input:not([data-sk-honeypot]):not([type=\"radio\"]):not([type=\"checkbox\"]), textarea, select',\n ),\n )\n }, [])\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLFormElement>) => {\n if (activeIndex === REST) return\n const target = e.target as HTMLElement\n const tag = target.tagName\n const isField = tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT'\n if (!isField) return\n\n // Enter does the next thing: next field in the beat, else next beat.\n // Shift+Enter keeps making newlines in long answers.\n if (e.key === 'Enter') {\n if (tag === 'TEXTAREA' && e.shiftKey) return\n e.preventDefault()\n const inputs = travelInputs()\n const index = inputs.indexOf(target)\n if (index >= 0 && index < inputs.length - 1) inputs[index + 1].focus()\n else advance()\n return\n }\n\n // Vertical arrows travel too — but never where they already mean\n // something (textarea caret, select option, number/range steppers).\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n if (tag !== 'INPUT') return\n const type = (target as HTMLInputElement).type\n if (type === 'number' || type === 'range') return\n e.preventDefault()\n const inputs = travelInputs()\n const index = inputs.indexOf(target)\n if (e.key === 'ArrowDown') {\n if (index >= 0 && index < inputs.length - 1) inputs[index + 1].focus()\n else advance()\n } else {\n if (index > 0) inputs[index - 1].focus()\n else if (activeIndex > 0) activate(activeIndex - 1)\n }\n }\n },\n [activeIndex, advance, activate, travelInputs],\n )\n\n // Enter inside a beat routes through keydown; form submission here only\n // fires from the beat's OK button. The finale submit is type=\"button\".\n const handleSubmit = useCallback(\n (e: React.FormEvent) => {\n e.preventDefault()\n if (isSubmitting) return\n if (activeIndex !== REST) advance()\n else void submit()\n },\n [activeIndex, isSubmitting, advance, submit],\n )\n\n const handleFinaleSubmit = useCallback(() => {\n hasInteractedRef.current = true\n clearAutoAdvance()\n if (isSubmitting) return\n // validateAll inside submit() surfaces gaps; the errors effect then\n // travels to the first offending beat.\n void submit()\n }, [isSubmitting, submit, clearAutoAdvance])\n\n const ready = momentum.total > 0 ? momentum.done >= momentum.total : true\n const completeBeats = views.reduce((n, _v, i) => n + (beatComplete(i) ? 1 : 0), 0)\n\n const activeView = activeIndex === REST ? null : views[activeIndex]\n const activeIsGroup = !!activeView && activeView.fields.length > 1\n const activeAllOptionalEmpty =\n !!activeView &&\n activeView.fields.every((f) => !f.is_required && isEmptyValue(values[f.slug]))\n const activeHasTextarea =\n !!activeView && activeView.fields.some((f) => f.field_type === 'textarea')\n const eyebrow =\n activeIndex !== REST && firstName && activeIndex === nameViewIndex + 1\n ? { text: `Nice to meet you, ${firstName}.`, greet: true }\n : activeView?.step?.title\n ? { text: activeView.step.title, greet: false }\n : null\n\n return (\n <form\n ref={formRef}\n className={`sk-form sk-stage ${className || ''}`}\n data-sk-part=\"stage\"\n data-sk-state={isSubmitting ? 'submitting' : 'idle'}\n data-sk-ready={activeIndex === REST && ready && total > 0 ? 'true' : undefined}\n onSubmit={handleSubmit}\n onKeyDown={handleKeyDown}\n >\n <StageStyles />\n\n <header className=\"sk-stage__head\" data-sk-part=\"stage-head\">\n <span className=\"sk-stage__head-name\">{config.name}</span>\n <span className=\"sk-stage__head-meta\" data-sk-part=\"stage-estimate\">\n {`Takes ${stageEstimate(questionCount)}`}\n </span>\n </header>\n\n <div className=\"sk-stage__hud\" data-sk-part=\"stage-hud\">\n <div\n className=\"sk-stage__meter\"\n data-sk-part=\"stage-meter\"\n role=\"progressbar\"\n // A progressbar must have an accessible name; aria-valuetext alone\n // is not one (axe: aria-progressbar-name).\n aria-label=\"Form progress\"\n aria-valuemin={0}\n aria-valuemax={total}\n aria-valuenow={completeBeats}\n aria-valuetext={`${completeBeats} of ${total} answered`}\n >\n {views.map((v, i) => (\n <span\n key={v.fields[0].id}\n className=\"sk-stage__seg\"\n data-sk-lit={beatComplete(i) ? 'true' : undefined}\n data-sk-live={i === activeIndex ? 'true' : undefined}\n aria-hidden=\"true\"\n />\n ))}\n </div>\n <span\n className=\"sk-stage__counter\"\n data-sk-part=\"stage-counter\"\n data-sk-ready={activeIndex === REST && ready ? 'true' : undefined}\n aria-live=\"polite\"\n >\n {activeIndex === REST\n ? ready\n ? 'Ready'\n : `${completeBeats} / ${total}`\n : `${activeIndex + 1} / ${total}`}\n </span>\n </div>\n\n <div className=\"sk-stage__beats\" data-sk-part=\"stage-beats\">\n {views.map((view, i) => {\n const isActive = i === activeIndex\n const filled = visited[i] === true || beatHasValue(i)\n const answers = view.fields\n .map((f) => formatAnswer(values[f.slug]))\n .filter((a): a is string => a !== null)\n const summaryValue = answers.length\n ? answers.join(' · ')\n : filled\n ? 'Skipped'\n : null\n const summaryLabel =\n view.step?.title || view.fields.map((f) => f.label).join(' · ')\n const complete = beatComplete(i) && answers.length > 0\n\n return (\n <section\n key={view.fields[0].id}\n className=\"sk-stage__beat\"\n data-sk-part=\"stage-beat\"\n data-sk-beat-state={isActive ? 'active' : filled ? 'filled' : 'upcoming'}\n data-sk-beat-filled={filled ? 'true' : undefined}\n >\n {/* Settled / waiting row — collapses away while active. */}\n <div className=\"sk-stage__collapse sk-stage__collapse--summary\">\n <div inert={isActive ? true : undefined}>\n <div className=\"sk-stage__summary-inner\">\n <button\n type=\"button\"\n className=\"sk-stage__summary\"\n data-sk-part=\"stage-summary\"\n onClick={() => activate(i)}\n >\n <span className=\"sk-stage__summary-idx\" aria-hidden=\"true\">\n {String(i + 1).padStart(2, '0')}\n </span>\n <span className=\"sk-stage__summary-label\">{summaryLabel}</span>\n {summaryValue !== null && (\n <span\n className={\n 'sk-stage__summary-value' +\n (answers.length === 0\n ? ' sk-stage__summary-value--skipped'\n : '')\n }\n >\n {summaryValue}\n {complete && <SummaryTick />}\n </span>\n )}\n </button>\n </div>\n </div>\n </div>\n\n {/* The lit stage — blooms open while everything else settles. */}\n <div className=\"sk-stage__collapse sk-stage__collapse--body\">\n <div inert={isActive ? undefined : true}>\n <div\n key={isActive ? shakeCount : 0}\n className={\n 'sk-stage__body-inner' +\n (isActive && shakeCount > 0 ? ' sk-stage__shake' : '')\n }\n >\n {isActive && eyebrow && (\n <p\n className={\n 'sk-stage__eyebrow' +\n (eyebrow.greet ? ' sk-stage__eyebrow--greet' : '')\n }\n data-sk-part=\"stage-eyebrow\"\n >\n {eyebrow.text}\n </p>\n )}\n <div\n className={\n 'sk-stage__question' +\n (view.fields.length > 1 ? ' sk-stage__question--group' : '')\n }\n data-sk-part=\"stage-question\"\n >\n <div className=\"sk-stage__fields\">\n {view.fields.map((f) => (\n <FormField\n controls={fieldControls}\n key={f.id}\n // The question IS the label — a hide_label form\n // still asks it.\n field={{ ...f, hide_label: false }}\n value={values[f.slug]}\n error={errors[f.slug]}\n showValid={\n !!touched[f.slug] && !errors[f.slug] && fieldIsComplete(f)\n }\n onChange={handleFieldChange(\n f,\n view.fields.length === 1 &&\n AUTO_ADVANCE_TYPES.includes(f.field_type),\n )}\n classPrefix=\"sk-stage\"\n />\n ))}\n </div>\n <div className=\"sk-stage__actions\" data-sk-part=\"stage-actions\">\n <button\n type=\"submit\"\n className=\"sk-form__btn sk-form__btn--submit\"\n data-sk-part=\"stage-ok\"\n >\n {isActive && activeAllOptionalEmpty ? 'Skip' : 'OK'}\n </button>\n <span className=\"sk-stage__hint\" data-sk-part=\"stage-hint\">\n {isActive && activeHasTextarea ? (\n <>\n <kbd>Enter ↵</kbd> to continue · <kbd>Shift + Enter</kbd>{' '}\n for a new line\n </>\n ) : (\n <>\n press <kbd>Enter ↵</kbd>\n </>\n )}\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </section>\n )\n })}\n </div>\n\n {/* The finale — wakes ([data-sk-ready] pop + breathe) once every\n requirement clears and the run is at rest. */}\n <div className=\"sk-stage__finale\" data-sk-part=\"stage-finale\">\n <button\n type=\"button\"\n className=\"sk-form__btn sk-form__btn--submit\"\n data-sk-part=\"stage-submit\"\n disabled={isSubmitting}\n onClick={handleFinaleSubmit}\n >\n {isSubmitting ? 'Submitting...' : config.submit_button_text}\n </button>\n {activeIndex === REST && ready && (\n <span className=\"sk-stage__hint\">\n press <kbd>Enter ↵</kbd>\n </span>\n )}\n </div>\n\n {submitError && (\n <p\n className=\"sk-stage__submit-error\"\n role=\"alert\"\n style={{ color: 'var(--sk-error, #dc2626)' }}\n >\n {submitError}\n </p>\n )}\n\n {honeypot}\n </form>\n )\n}\n"]}
@@ -0,0 +1,23 @@
1
+ 'use strict';
2
+
3
+ var chunkS2C3QU4E_js = require('./chunk-S2C3QU4E.js');
4
+ require('./chunk-GXABJJ4F.js');
5
+ require('./chunk-IV7LOJZO.js');
6
+ require('./chunk-2ACKOMAL.js');
7
+ require('./chunk-FMAEUQEZ.js');
8
+ require('./chunk-WLVS4QBK.js');
9
+ require('./chunk-KHPJ3CEL.js');
10
+ require('./chunk-VJMPIRSD.js');
11
+ require('./chunk-FFQAKIV5.js');
12
+ require('./chunk-KFDFXRBE.js');
13
+ require('./chunk-CBN73TLK.js');
14
+ require('./chunk-SNAQBZPT.js');
15
+
16
+
17
+
18
+ Object.defineProperty(exports, "ManagedForm", {
19
+ enumerable: true,
20
+ get: function () { return chunkS2C3QU4E_js.ManagedForm; }
21
+ });
22
+ //# sourceMappingURL=ManagedForm-5BXS3XKX.js.map
23
+ //# sourceMappingURL=ManagedForm-5BXS3XKX.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"ManagedForm-D2JT3QV3.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"ManagedForm-5BXS3XKX.js"}
@@ -0,0 +1,14 @@
1
+ export { ManagedForm } from './chunk-MTXQG3TX.mjs';
2
+ import './chunk-UDPUBSSS.mjs';
3
+ import './chunk-OO4T5X4Z.mjs';
4
+ import './chunk-LB7LHVWI.mjs';
5
+ import './chunk-WCRBZZRI.mjs';
6
+ import './chunk-XXBVF7WN.mjs';
7
+ import './chunk-TMVKRQGJ.mjs';
8
+ import './chunk-6EDVCUAG.mjs';
9
+ import './chunk-R6LQRHPQ.mjs';
10
+ import './chunk-WCIQKO7W.mjs';
11
+ import './chunk-LS64Y25E.mjs';
12
+ import './chunk-BEXTDHO4.mjs';
13
+ //# sourceMappingURL=ManagedForm-BFZWPWGY.mjs.map
14
+ //# sourceMappingURL=ManagedForm-BFZWPWGY.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"ManagedForm-RCC7NEV2.mjs"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"ManagedForm-BFZWPWGY.mjs"}
@@ -1,9 +1,9 @@
1
1
  'use client';
2
2
  import { getOrCreateVisitorId, getOrCreateSessionId } from './chunk-ZZQAGCSI.mjs';
3
3
  import './chunk-6EDVCUAG.mjs';
4
- import { sonorFetch } from './chunk-UDHQNYBD.mjs';
5
- import { getFreshCredential, isSiteToken } from './chunk-7CYSA5EN.mjs';
6
- import './chunk-PKCEJWLD.mjs';
4
+ import { sonorFetch } from './chunk-R6LQRHPQ.mjs';
5
+ import { getFreshCredential, isSiteToken } from './chunk-WCIQKO7W.mjs';
6
+ import './chunk-LS64Y25E.mjs';
7
7
  import './chunk-BEXTDHO4.mjs';
8
8
  import { useState, useRef, useEffect, useCallback } from 'react';
9
9
 
@@ -326,5 +326,5 @@ function SignalCore({
326
326
  }
327
327
 
328
328
  export { SignalCore };
329
- //# sourceMappingURL=SignalCore-36PY3SRB.mjs.map
330
- //# sourceMappingURL=SignalCore-36PY3SRB.mjs.map
329
+ //# sourceMappingURL=SignalCore-EE2RAGZ2.mjs.map
330
+ //# sourceMappingURL=SignalCore-EE2RAGZ2.mjs.map