{"success":true,"data":{"category":{"slug":"integrations","name":"Integrations","description":"Collection of integrations components"},"blocks":[{"id":"tripleseat-form","name":"TripleSeat Lead Form","title":"Tripleseat Form","category":"Integrations","categorySlug":"integrations","description":"Embeds the client's own TripleSeat lead/inquiry form, branded to match the site. Use only when the client has supplied their TripleSeat embed script; the block extracts lead_form_id and public_key from that script URL. Includes a bounded wait with a visible fallback (business phone/email plus a retry) so a form that fails to load never silently costs the client a booking.","thumbnail":{"desktop":"https://cdn.ing/assets/i/r/316265/o9yvfal1drb59lt1o7l7i4066cmg/tripleseat-form-desktop.jpg","mobile":"https://cdn.ing/assets/i/r/316264/z5bygxcpfnjbsd27ayn2l53lhn5p/tripleseat-form-mobile.jpg"},"componentPath":"blocks/integrations/tripleseat-form.tsx","code":"import { TripleseatForm } from \"@opensite/ui/blocks/integrations/tripleseat-form\";\n\n// `leadFormId` and `publicKey` are the two query-parameter values from the\n// client's own TripleSeat script tag —\n// https://api.tripleseat.com/v1/leads/ts_script.js?lead_form_id=…&public_key=…\n// Copy them verbatim; the values below are fake placeholders that match the\n// library's own example props.\nexport default function Demo() {\n  return (\n    // Showcase-only: `recaptchaTimeoutSeconds={5}` lets this public demo settle\n    // into the honest degraded state instead of spinning on a form whose fake\n    // credentials can never load. Real sites omit the prop — the default is 30\n    // seconds, and a shorter deadline shows visitors a false failure banner\n    // while the third-party script is still loading.\n    <TripleseatForm\n      title=\"Plan Your Private Event\"\n      subtitle=\"Inquiries\"\n      leadFormId=\"12345\"\n      publicKey=\"your-tripleseat-public-key\"\n      recaptchaTimeoutSeconds={5}\n      degradedTitle=\"The booking form isn't loading\"\n      degradedMessage=\"Reach our events team directly and we'll get straight back to you.\"\n      contactPhone=\"(555) 010-4477\"\n      contactEmail=\"events@example.com\"\n      retryLabel=\"Try loading the form again\"\n      successTitle=\"Request received\"\n      successMessage=\"Our events team will follow up within one business day.\"\n    />\n  );\n}","propsSchema":{"leadFormId":{"type":"string","description":"The `lead_form_id` query parameter from the client's TripleSeat script tag.\nCopy it verbatim out of the URL the client supplied — never invent one.","required":true},"publicKey":{"type":"string","description":"The `public_key` query parameter from the client's TripleSeat script tag.\nCopy it verbatim out of the URL the client supplied — never invent one.","required":true},"successRedirectPath":{"type":"string","description":"Internal site path to send the visitor to after a successful submission\n(for example \"/thank-you\"). Must start with a single \"/\" — it is navigated\nin-app via the client-side router. Absolute URLs, protocol-relative \"//host\"\nvalues and any other scheme are REFUSED (the confirmation stays in place),\nso this block never navigates off-site. Leave empty to show the confirmation\nin place instead.","required":false},"successTitle":{"type":"string","description":"Heading shown in place of the form after a successful submission.","required":false,"maxLength":60},"successMessage":{"type":"string","description":"Body copy shown in place of the form after a successful submission.","required":false,"maxLength":200},"degradedTitle":{"type":"string","description":"Heading for the degraded state shown when the form cannot become usable.","required":false,"maxLength":60},"degradedMessage":{"type":"string","description":"Body copy for the degraded state. Required: a form that silently fails to\nload must always tell the visitor how else to reach the business.","required":true,"maxLength":200},"contactPhone":{"type":"string","description":"Real business phone number offered as a fallback in the degraded state.","required":false},"contactEmail":{"type":"string","description":"Real business email address offered as a fallback in the degraded state.","required":false},"retryLabel":{"type":"string","description":"Label for the button that re-attempts loading the form. Required.","required":true,"maxLength":40},"recaptchaTimeoutSeconds":{"type":"number","description":"Seconds to wait for the form's reCAPTCHA before degrading. Default 30.","required":false},"formMinHeight":{"type":"string","description":"Reserved height for the embed while it loads. Default \"400px\".","required":false},"sectionId":{"type":"string","description":"Optional Section ID","required":false},"title":{"type":"string","description":"Section heading rendered above the form","required":false},"subtitle":{"type":"string","description":"Section eyebrow rendered above the heading","required":false},"background":{"type":"string","description":"Section background variant","typeLabel":"SectionBackground","enum":["default","white","gray","dark","gradient","primary","secondary","transparent","muted"],"required":false},"spacing":{"type":"string","description":"Section spacing variant","typeLabel":"SectionSpacing","enum":["none","sm","md","lg","xl","hero"],"required":false},"pattern":{"type":"string","description":"Pattern background key or URL","typeLabel":"PatternName","enum":["squareAltGrid","grid1","noise","dotPattern","dotPattern2","circles","waves","crossPattern","architect","tinyCheckers","p6","dots","circuitBoardBasic","circuitBoardFadeTop","circuitBoardFadeBottom","circuitBoardFadeCenter","circuitBoardFadeTopLeft","circuitBoardFadeTopRight","circuitBoardFadeBottomLeft","circuitBoardFadeBottomRight","dashedGridBasic","dashedGridFadeTop","dashedGridFadeBottom","dashedGridFadeCenter","dashedGridFadeTopLeft","dashedGridFadeTopRight","dashedGridFadeBottomLeft","dashedGridFadeBottomRight","diagonalCrossBasic","diagonalCrossFadeTop","diagonalCrossFadeBottom","diagonalCrossFadeCenter","diagonalCrossFadeTopLeft","diagonalCrossFadeTopRight","diagonalCrossFadeBottomLeft","diagonalCrossFadeBottomRight","gridBasic","gridFadeTop","gridFadeBottom","gridFadeCenter","gridFadeTopLeft","gridFadeTopRight","gridFadeBottomLeft","gridFadeBottomRight","gridDotsBasic","gridDotsFadeCenter","gradientGlowTop","gradientGlowBottom","spotlightLeft","spotlightRight","radialGradientTop","radialGradientBottom"],"required":false},"patternOpacity":{"type":"number","description":"Pattern opacity (0-1)","required":false},"className":{"type":"string","description":"Additional CSS classes for the section","required":false},"containerClassName":{"type":"string","description":"Additional CSS classes for the container","required":false},"style":{"type":"object","description":"Inline styles for the section","typeLabel":"React.CSSProperties","required":false}},"exampleProps":{"title":"Plan Your Private Event","subtitle":"Inquiries","leadFormId":"12345","publicKey":"your-tripleseat-public-key","degradedTitle":"The booking form isn't loading","degradedMessage":"Reach our events team directly and we'll get straight back to you.","contactPhone":"(555) 010-4477","contactEmail":"events@example.com","retryLabel":"Try loading the form again","successTitle":"Request received","successMessage":"Our events team will follow up within one business day."},"dependencies":["@opensite/ui"],"tags":["tripleseat","lead-form","private-events","booking","restaurant","catering","event-inquiry","form","integration","third-party","embed"],"performance":{},"importantUsageNotes":"NEVER use this block unless the client supplied their own TripleSeat embed script. Extract leadFormId and publicKey VERBATIM from the script URL they provided (https://api.tripleseat.com/v1/leads/ts_script.js?lead_form_id=<leadFormId>&public_key=<publicKey>) — copy the two query-parameter values exactly, character for character, and never invent, guess, complete, reformat, or reuse credentials from another site. If the user did not supply the script URL, do not emit this block. degradedMessage and retryLabel are required: when the third-party form cannot load, the visitor must still be told how to reach the business, so supply the client's real contactPhone/contactEmail whenever they are known. successRedirectPath must be an internal path on this site (for example \"/thank-you\") and that page must exist; leave it empty to show the confirmation in place. All copy must be the client's own — do not fabricate confirmation or fallback wording.","usageRequirements":{"requiredProps":["leadFormId","publicKey","degradedMessage","retryLabel"],"propConstraints":{"leadFormId":{"required":true,"note":"VERBATIM lead_form_id query-parameter value from the client's own ts_script.js URL. Never invented."},"publicKey":{"required":true,"note":"VERBATIM public_key query-parameter value from the client's own ts_script.js URL. Never invented."},"degradedMessage":{"required":true,"maxLength":200,"note":"Shown when the form cannot become usable. Must point the visitor at another way to reach the business."},"retryLabel":{"required":true,"maxLength":40,"note":"Label for the button that re-attempts loading the form."},"degradedTitle":{"maxLength":60},"contactPhone":{"note":"Real business phone number only, from site contact data. Rendered as a tel: link."},"contactEmail":{"note":"Real business email address only, from site contact data. Rendered as a mailto: link."},"successTitle":{"maxLength":60},"successMessage":{"maxLength":200},"successRedirectPath":{"note":"Internal site path only — must start with a single \"/\" (for example \"/thank-you\") and that page must exist. Absolute URLs, protocol-relative \"//host\" values and any other scheme are REFUSED at runtime: the block logs a breadcrumb and shows the confirmation in place instead. Omit to show the confirmation in place."},"recaptchaTimeoutSeconds":{"note":"Seconds to wait before showing the fallback. Defaults to 30; only change with a reason."}},"mediaSlots":{},"requiresSiteCapabilities":["contact_info"],"notes":["Third-party embed: renders nothing at all unless both leadFormId and publicKey are present.","One instance per page — TripleSeat's markup uses global element ids."]}}]},"timestamp":"2026-08-27T07:52:19.105Z"}