> ## Documentation Index
> Fetch the complete documentation index at: https://docs.raykoi.com/llms.txt
> Use this file to discover all available pages before exploring further.

# UI & Behavior

> Loading state, analytics opt-out, debug logging, and site-wide script-tag defaults.

Loading state, analytics, debugging, and one legacy CAPTCHA escape hatch.

<ParamField body="data-ui" type="boolean">
  Set to `false` to disable *all* built-in UI (loading state, messages, error mapping, redirect). The form still emits every [lifecycle event](/integrations/options-reference/events) — use this for a fully custom UI driven entirely off events.
</ParamField>

<ParamField body="data-loading" type="boolean">
  Set to `false` to disable the built-in submit-button loading state.
</ParamField>

<ParamField body="data-loading-text" type="string">
  Custom button text while a submission is in flight.
</ParamField>

<ParamField body="data-analytics" type="boolean">
  Set to `false` to opt this form out of automatic view/start/submit event tracking.
</ParamField>

<ParamField body="data-debug" type="boolean">
  Verbose console logging for this form (never logs submitted field values).
</ParamField>

<ParamField body="data-turnstile-sitekey" type="string">
  Manual Cloudflare Turnstile sitekey override — only takes effect when the form has **no** CAPTCHA configured server-side. A legacy escape hatch, not a way to override a workspace's actual provider choice.
</ParamField>

## Script-tag defaults

Any of the above (except `data-form-id`, which is per-form) can also be set on the `<script>` tag itself as a site-wide default, overridden per-form by the matching attribute on an individual `<form>`.

```html theme={null}
<script src="https://app.raykoi.com/submit.js" data-success="inline:#thanks" data-analytics="false"></script>
```
