Individual skill
c15t-react
Set up, customize or debug c15t consent management with @c15t/react. Use when the project is a React app, such as Vite or React Router, or when a task mentions a cookie banner, consent dialog, GDPR or CCPA prompts, blocking analytics until consent, Google Consent Mode or IAB TCF.
packages/react/SKILL.md
Source commit 0ae883c23306c0ff60eeef26a6cedaa259cc98e1
What was checked
- Matches the observed repository HEAD
- Yes
- Scanner rules are current
- Yes
- Repository scan complete
- Yes
- Skill scan complete
- Yes
- Observed behavior
- Network or broad shell
- Last checked
- Nov 9, 2026
These are observations at the recorded commit, not a guarantee of safety. Review the source before running it.
Install this skill
Choose an agent in your Stack or copy a command below. Commands fetch the pinned commit and copy only this skill directory. Existing destinations are refused. Copying a command does not install anything.
An install command is unavailable: current rules, complete repository and skill scans, an eligible behavior level and a permitted license are required.
Repository context
- Repository stars (not skill ratings)
- 2,024
- Repository last updated
- Nov 6, 2026
- License
- Apache-2.0
Observed agent integration: codex
- cmp Repository topic
- cookie-banner Repository topic
- typescript Repository topic
- ccpa Repository topic
- consent-mode Repository topic
- cookie-consent Repository topic
- gdpr Repository topic
- iab-tcf Repository topic
- javascript Repository topic
- nextjs Repository topic
- data Derived category
- engineering Derived category
- engineering-web Derived category
Files and excerpt
File metadata and permitted, redacted excerpts come from the recorded scan. Source links are pinned to that commit.
Browse files
.npmignoreasset · 68 bytesAGENTS.mddoc · 27,004 bytesCHANGELOG.mddoc · 152,216 bytesREADME.mddoc · 9,084 bytesSKILL.mdcore · 2,751 bytesdocs/integrations/cloudflare-zaraz.mddoc · 15,042 bytesiab/styles.cssasset · 34 bytesiab/styles.tw3.cssasset · 38 bytesknip.jsonasset · 1,413 bytespackage.jsonruns · 8,901 bytespublic/mockServiceWorker.jsruns · 8,661 bytesreadme.jsonasset · 2,738 bytesrslib.config.tsruns · 781 bytesscripts/generate-distribution-css.tsruns · 176 bytessrc/__tests__/aggregate-dialog.test.tsxruns · 2,226 bytessrc/__tests__/astro-iab-loader.test.tsxruns · 2,241 bytessrc/__tests__/branding-logo-module.test.tsruns · 1,291 bytessrc/__tests__/category-discovery.test.tsxruns · 8,946 bytessrc/__tests__/clear-on-revocation-remount.test.tsxruns · 3,377 bytessrc/__tests__/clear-on-revocation.test.tsxruns · 4,722 bytessrc/__tests__/client-policy-imports.test.tsruns · 1,839 bytessrc/__tests__/component-fixture-provider.tsxruns · 2,360 bytessrc/__tests__/conformance.test.tsxruns · 13,064 bytessrc/__tests__/consent-markup.tsruns · 673 bytessrc/__tests__/consent-state-fixture.tsruns · 680 bytessrc/__tests__/core-exports.type-test.tsruns · 896 bytessrc/__tests__/devtools.test.tsxruns · 20,891 bytessrc/__tests__/dialog-scroll.test.tsxruns · 3,273 bytessrc/__tests__/dialog-stylesheet.test.tsxruns · 2,476 bytessrc/__tests__/draft.test.tsxruns · 7,637 bytessrc/__tests__/event-dispatcher.test.tsxruns · 2,665 bytessrc/__tests__/experiment.test.tsxruns · 15,784 bytessrc/__tests__/external-iab-actions.test.tsxruns · 7,945 bytessrc/__tests__/external-runtime-draft.test.tsxruns · 7,379 bytessrc/__tests__/external-runtime-provider.test.tsxruns · 6,469 bytessrc/__tests__/external-runtime-remount.test.tsxruns · 1,512 bytessrc/__tests__/external-source.test.tsxruns · 3,955 bytessrc/__tests__/framework-conformance.tsxruns · 14,650 bytessrc/__tests__/framework-policy-driver.tsxruns · 28,035 bytessrc/__tests__/framework-root.tsruns · 487 bytessrc/__tests__/gpp.test.tsxruns · 3,867 bytessrc/__tests__/hooks.test.tsxruns · 14,762 bytessrc/__tests__/iab-dialog-deferred.test.tsxruns · 7,879 bytessrc/__tests__/iab-dialog-warming.test.tsxruns · 6,211 bytessrc/__tests__/iab-policy-guard-provider.test.tsxruns · 2,237 bytessrc/__tests__/iab-policy-guard.test.tsxruns · 5,736 bytessrc/__tests__/iab-presentation.test.tsxruns · 13,274 bytessrc/__tests__/iab-provider-kernel-switch.test.tsxruns · 15,503 bytessrc/__tests__/idle-dialog-warming.test.tsxruns · 5,961 bytessrc/__tests__/iframe-blocker-on-demand.test.tsxruns · 11,783 bytessrc/__tests__/module-requests.tsruns · 669 bytessrc/__tests__/network-blocker-early.test.tsxruns · 3,147 bytessrc/__tests__/network-blocker-unmount.test.tsxruns · 3,733 bytessrc/__tests__/pending-save.test.tsxruns · 9,463 bytessrc/__tests__/policy-driver-smoke.test.tsxruns · 3,146 bytessrc/__tests__/policy-driver.tsxruns · 25,809 bytessrc/__tests__/policy-fixture.tsruns · 1,387 bytessrc/__tests__/policy-presentation.test.tsxruns · 14,606 bytessrc/__tests__/postcss-tailwind3-entry.test.tsruns · 827 bytessrc/__tests__/provider-early-init-registered.test.tsxruns · 6,944 bytessrc/__tests__/provider-early-init.test.tsxruns · 28,876 bytessrc/__tests__/provider-modules.test.tsxruns · 4,313 bytessrc/__tests__/provider-prefetch-promise.test.tsxruns · 5,838 bytessrc/__tests__/provider-runtime-lifecycle.test.tsxruns · 6,374 bytessrc/__tests__/provider-update-chunk.test.tsxruns · 1,625 bytessrc/__tests__/provider-update-failure.test.tsxruns · 2,098 bytessrc/__tests__/provider.test.tsxruns · 25,458 bytessrc/__tests__/quickstart-remount.test.tsxruns · 2,932 bytessrc/__tests__/quickstart.test.tsxruns · 2,514 bytessrc/__tests__/render-count-bench.test.tsxruns · 3,540 bytessrc/__tests__/revocation-reload.test.tsxruns · 2,302 bytessrc/__tests__/scoped-notice-save.test.tsxruns · 4,979 bytessrc/__tests__/script-loader-at-mount.test.tsxruns · 6,546 bytessrc/__tests__/selector-hooks-scope.test.tsxruns · 4,196 bytessrc/__tests__/set-language.test.tsxruns · 6,251 bytessrc/__tests__/showcase-support-chat.test.tsxruns · 2,291 bytessrc/__tests__/spa-modes.test.tsruns · 2,972 bytessrc/__tests__/split-entry-deferral.test.tsxruns · 2,850 bytessrc/__tests__/stable-context-providers.tsxruns · 1,662 bytessrc/__tests__/streamed-banner.test.tsxruns · 15,290 bytessrc/__tests__/streamed-headless-banner.test.tsxruns · 4,957 bytessrc/__tests__/streamed-ssr-harness.tsxruns · 6,767 bytessrc/__tests__/switch-theme.test.tsxruns · 3,034 bytessrc/__tests__/theme-exports.type-test.tsruns · 535 bytessrc/__tests__/theme-slots.test.tsxruns · 5,175 bytessrc/__tests__/theme-ssr.test.tsxruns · 8,485 bytessrc/__tests__/theme-tokens.test.tsxruns · 3,764 bytessrc/__tests__/ui-source.test.tsxruns · 1,898 bytessrc/__tests__/use-network-blocker-early.test.tsxruns · 8,839 bytessrc/__tests__/vendor-options.test.tsxruns · 23,115 bytessrc/aggregate-components.tsxruns · 3,611 bytessrc/chunk-warming.tsruns · 4,901 bytessrc/component-hooks/__tests__/use-consent-dialog-trigger.test.tsxruns · 3,352 bytessrc/component-hooks/__tests__/use-consent-gate.test.tsxruns · 7,699 bytessrc/component-hooks/__tests__/use-consent-labels.test.tsxruns · 1,972 bytessrc/component-hooks/__tests__/use-consent-text-direction.test.tsxruns · 1,441 bytessrc/component-hooks/__tests__/use-headless-consent-ui.test.tsxruns · 5,581 bytessrc/component-hooks/__tests__/use-translations.test.tsxruns · 5,770 bytessrc/component-hooks/__tests__/use-vendors-listed-under.test.tsxruns · 2,653 bytessrc/component-hooks/use-consent-gate.tsruns · 6,410 bytessrc/component-hooks/use-consent-labels.tsruns · 1,533 bytessrc/component-hooks/use-consent-text-direction.tsruns · 936 bytessrc/component-hooks/use-headless-consent-ui.tsruns · 4,452 bytessrc/component-hooks/use-headless-iab-consent-ui.tsruns · 2,338 bytessrc/component-hooks/use-panel-trigger.tsruns · 1,756 bytessrc/component-hooks/use-translations.tsruns · 544 bytessrc/component-hooks/use-vendors-listed-under.tsruns · 1,535 bytessrc/components/__tests__/active-ui-transitions.e2e.test.tsxruns · 12,835 bytessrc/components/__tests__/consent-flow.e2e.test.tsxruns · 15,825 bytessrc/components/__tests__/models-prop.e2e.test.tsxruns · 6,444 bytessrc/components/__tests__/no-policy-surfaces.test.tsxruns · 5,205 bytessrc/components/__tests__/none-model-surfaces.test.tsxruns · 5,906 bytessrc/components/__tests__/theme-regressions.test.tsxruns · 10,320 bytessrc/components/__tests__/theme-slot-contract.test.tsxruns · 4,792 bytessrc/components/__tests__/ui-source-tracking.e2e.test.tsxruns · 7,167 bytessrc/components/consent-gate/__tests__/consent-gate-placeholder.test.tsxruns · 8,067 bytessrc/components/consent-gate/__tests__/consent-gate-renders.test.tsxruns · 1,774 bytessrc/components/consent-gate/__tests__/frame-deprecation.test.tsxruns · 1,676 bytessrc/components/consent-gate/atoms.tsxruns · 3,205 bytessrc/components/consent-gate/consent-gate.tsxruns · 1,826 bytessrc/components/consent-gate/frame.tsxruns · 2,932 bytessrc/components/consent-gate/index.tsruns · 1,331 bytessrc/components/consent-gate/types.tsruns · 1,217 bytessrc/components/consent-preferences-link/__tests__/consent-preferences-link.test.tsxruns · 3,513 bytessrc/components/consent-preferences-link/consent-preferences-link.tsxruns · 1,460 bytessrc/components/consent-preferences-link/index.tsruns · 111 bytessrc/components/iab-panel/__tests__/features-section.test.tsxruns · 5,408 bytessrc/components/iab-panel/__tests__/preference-center.test.tsxruns · 11,894 bytessrc/components/iab-panel/__tests__/purpose-item.test.tsxruns · 2,829 bytessrc/components/iab-panel/__tests__/purposes-tab.test.tsxruns · 6,425 bytessrc/components/iab-panel/__tests__/vendors-tab.test.tsxruns · 15,776 bytessrc/components/iab-panel/atoms/ad-tech-provider-section.tsxruns · 4,915 bytessrc/components/iab-panel/atoms/card.tsxruns · 2,703 bytessrc/components/iab-panel/atoms/content.tsxruns · 904 bytessrc/components/iab-panel/atoms/feature-item.tsxruns · 5,826 bytessrc/components/iab-panel/atoms/footer.tsxruns · 3,092 bytessrc/components/iab-panel/atoms/header.tsxruns · 2,794 bytessrc/components/iab-panel/atoms/overlay.tsxruns · 2,290 bytessrc/components/iab-panel/atoms/purpose-item.tsxruns · 19,729 bytessrc/components/iab-panel/atoms/root.tsxruns · 5,055 bytessrc/components/iab-panel/atoms/stack-item.tsxruns · 6,298 bytessrc/components/iab-panel/atoms/tabs.tsxruns · 2,385 bytessrc/components/iab-panel/atoms/vendor-list.tsxruns · 25,976 bytessrc/components/iab-panel/hooks/use-display-model.tsruns · 885 bytessrc/components/iab-panel/hooks/use-gvl-data.tsruns · 882 bytessrc/components/iab-panel/iab-panel.tsxruns · 31,210 bytessrc/components/iab-panel/index.tsruns · 4,382 bytessrc/components/iab-panel/types.tsruns · 335 bytessrc/components/iab-panel/use-iab-translations.tsruns · 4,174 bytessrc/components/iab-prompt/__tests__/iab-consent-banner.test.tsxruns · 8,989 bytessrc/components/iab-prompt/atoms/button-group.tsxruns · 1,318 bytessrc/components/iab-prompt/atoms/card.tsxruns · 1,873 bytessrc/components/iab-prompt/atoms/description.tsxruns · 806 bytessrc/components/iab-prompt/atoms/footer.tsxruns · 1,263 bytessrc/components/iab-prompt/atoms/header.tsxruns · 1,285 bytessrc/components/iab-prompt/atoms/overlay.tsxruns · 2,155 bytessrc/components/iab-prompt/atoms/root.tsxruns · 5,129 bytessrc/components/iab-prompt/atoms/title.tsxruns · 743 bytessrc/components/iab-prompt/iab-prompt.tsxruns · 9,303 bytessrc/components/iab-prompt/index.tsruns · 4,064 bytessrc/components/iab/__tests__/e2e-setup.tsruns · 8,010 bytessrc/components/iab/__tests__/fixtures/mock-consent-state.tsruns · 10,172 bytessrc/components/iab/__tests__/iab-banner.e2e.test.tsxruns · 7,295 bytessrc/components/iab/__tests__/iab-consent-flow.e2e.test.tsxruns · 7,899 bytessrc/components/iab/__tests__/iab-events.e2e.test.tsxruns · 11,593 bytessrc/components/iab/__tests__/iab-gvl.e2e.test.tsxruns · 7,389 bytessrc/components/iab/__tests__/iab-preference-center.e2e.test.tsxruns · 2,003 bytessrc/components/iab/__tests__/iab-storage.e2e.test.tsxruns · 9,253 bytessrc/components/iab/__tests__/iab-stub.e2e.test.tsxruns · 7,809 bytessrc/components/iab/__tests__/iab-tcfapi.e2e.test.tsxruns · 10,600 bytessrc/components/iab/__tests__/msw-handlers.tsruns · 1,661 bytessrc/components/panel-link/index.tsruns · 137 bytessrc/components/panel-trigger/__tests__/consent-dialog-trigger-devtools-toolbar.test.tsxruns · 1,786 bytessrc/components/panel-trigger/__tests__/consent-dialog-trigger-devtools.test.tsxruns · 4,569 bytessrc/components/panel-trigger/__tests__/consent-dialog-trigger-rights.test.tsxruns · 8,140 bytessrc/components/panel-trigger/__tests__/consent-dialog-trigger-toolbar-loading.test.tsxruns · 2,013 bytessrc/components/panel-trigger/__tests__/consent-dialog-trigger-toolbar.test.tsxruns · 10,265 bytessrc/components/panel-trigger/__tests__/panel-trigger.type-test.tsxruns · 877 bytessrc/components/panel-trigger/__tests__/trigger-disable-animation.test.tsxruns · 1,919 bytessrc/components/panel-trigger/atoms/button.tsxruns · 4,035 bytessrc/components/panel-trigger/atoms/icon.tsxruns · 2,558 bytessrc/components/panel-trigger/atoms/root.tsxruns · 4,517 bytessrc/components/panel-trigger/atoms/text.tsxruns · 1,368 bytessrc/components/panel-trigger/atoms/toolbar.tsxruns · 12,550 bytessrc/components/panel-trigger/atoms/trigger-icons.tsxruns · 2,864 bytessrc/components/panel-trigger/index.tsruns · 896 bytessrc/components/panel-trigger/panel-trigger-toolbar.tsxruns · 2,952 bytessrc/components/panel-trigger/panel-trigger.tsxruns · 6,135 bytessrc/components/panel-trigger/toolbar-loader.tsruns · 1,716 bytessrc/components/panel-trigger/types.tsruns · 5,784 bytessrc/components/panel-trigger/use-draggable.tsruns · 6,701 bytessrc/components/panel/atoms/card.tsxruns · 8,911 bytessrc/components/panel/atoms/overlay.tsxruns · 4,321 bytessrc/components/panel/atoms/root.tsxruns · 10,499 bytessrc/components/panel/index.tsruns · 4,256 bytessrc/components/panel/panel.tsxruns · 4,325 bytessrc/components/preferences/__tests__/category-order.test.tsxruns · 1,914 bytessrc/components/preferences/__tests__/policy-actions.test.tsxruns · 8,133 bytessrc/components/preferences/__tests__/restriction-notice.test.tsxruns · 3,334 bytessrc/components/preferences/__tests__/vendor-list.test.tsxruns · 14,711 bytessrc/components/preferences/atoms/accordion.tsxruns · 11,585 bytessrc/components/preferences/atoms/button.tsxruns · 3,326 bytessrc/components/preferences/atoms/footer.tsxruns · 1,836 bytessrc/components/preferences/atoms/root.tsxruns · 4,947 bytessrc/components/preferences/atoms/vendor-list.tsxruns · 7,580 bytessrc/components/preferences/index.tsruns · 5,019 bytessrc/components/preferences/policy-actions.tsxruns · 2,709 bytessrc/components/preferences/preferences.tsxruns · 1,649 bytessrc/components/preferences/types.tsruns · 1,689 bytessrc/components/prompt/__tests__/consent-banner-compose.test.tsxruns · 8,816 bytessrc/components/prompt/__tests__/consent-banner-footer-layout.test.tsxruns · 2,932 bytessrc/components/prompt/__tests__/consent-banner-hit-area.test.tsxruns · 4,227 bytessrc/components/prompt/__tests__/consent-banner-notice.test.tsxruns · 6,470 bytessrc/components/prompt/__tests__/consent-banner-policy-ordering.test.tsxruns · 6,675 bytessrc/components/prompt/__tests__/consent-banner-variants.test.tsxruns · 6,329 bytessrc/components/prompt/__tests__/customize-warming.test.tsxruns · 4,492 bytessrc/components/prompt/__tests__/policy-actions.test.tsxruns · 8,640 bytessrc/components/prompt/__tests__/presentation-behavior.test.tsxruns · 3,953 bytessrc/components/prompt/atoms/early-tap-script.tsxruns · 2,827 bytessrc/components/prompt/atoms/overlay.tsxruns · 3,617 bytessrc/components/prompt/atoms/root.tsxruns · 12,779 bytessrc/components/prompt/components.tsxruns · 17,429 bytessrc/components/prompt/error-boundary.tsxruns · 2,396 bytessrc/components/prompt/index.tsruns · 5,281 bytessrc/components/prompt/policy-actions.tsxruns · 2,761 bytessrc/components/prompt/prompt.tsxruns · 12,043 bytessrc/components/prompt/surface-context.tsruns · 1,526 bytessrc/components/prompt/use-banner-copy.tsruns · 1,019 bytessrc/components/shared/__tests__/deferred-surface-styles.test.tsxruns · 5,305 bytessrc/components/shared/__tests__/iab-surface-styles.test.tsxruns · 6,879 bytessrc/components/shared/__tests__/streamed-surface.test.tsruns · 1,622 bytessrc/components/shared/__tests__/surface-styles.test.tsxruns · 4,716 bytessrc/components/shared/dialog-sheets.tsruns · 490 bytessrc/components/shared/first-paint-sheets.tsruns · 355 bytessrc/components/shared/iab-dialog-sheets.tsruns · 441 bytessrc/components/shared/iab-first-paint-sheets.tsruns · 363 bytessrc/components/shared/libs/__tests__/slot.test.tsxruns · 1,880 bytessrc/components/shared/libs/compose-refs.tsruns · 1,205 bytessrc/components/shared/libs/polymorphic.tsruns · 600 bytessrc/components/shared/libs/recursive-clone-children.tsxruns · 1,772 bytessrc/components/shared/libs/slot.tsxruns · 2,828 bytessrc/components/shared/libs/use-controllable-state.tsruns · 728 bytessrc/components/shared/policy-actions.tsxruns · 3,247 bytessrc/components/shared/primitives/box.tsxruns · 2,291 bytessrc/components/shared/primitives/button.tsxruns · 12,180 bytessrc/components/shared/primitives/button.types.tsruns · 1,496 bytessrc/components/shared/primitives/legal-links/index.tsxruns · 4,492 bytessrc/components/shared/streamed-surface.tsxruns · 4,244 bytessrc/components/shared/surface-styles.tsxruns · 7,425 bytessrc/components/shared/ui/__tests__/branding.test.tsxruns · 8,887 bytessrc/components/shared/ui/__tests__/primitives.test.tsxruns · 31,396 bytessrc/components/shared/ui/accordion/accordion.tsxruns · 12,031 bytessrc/components/shared/ui/accordion/accordion.types.tsruns · 420 bytessrc/components/shared/ui/accordion/index.tsruns · 64 bytessrc/components/shared/ui/animated-collapse/animated-collapse.tsxruns · 6,795 bytessrc/components/shared/ui/animated-collapse/index.tsruns · 122 bytessrc/components/shared/ui/branding.tsxruns · 4,381 bytessrc/components/shared/ui/button/button.tsxruns · 5,175 bytessrc/components/shared/ui/button/button.types.tsruns · 1,853 bytessrc/components/shared/ui/button/index.tsruns · 58 bytessrc/components/shared/ui/collapsible/collapsible.tsxruns · 5,638 bytessrc/components/shared/ui/collapsible/index.tsruns · 31 bytessrc/components/shared/ui/dialog/dialog.tsxruns · 7,608 bytessrc/components/shared/ui/dialog/index.tsruns · 26 bytessrc/components/shared/ui/icon.tsxruns · 981 bytessrc/components/shared/ui/logo.tsxruns · 3,282 bytessrc/components/shared/ui/preference-item/index.tsruns · 35 bytessrc/components/shared/ui/preference-item/preference-item.tsxruns · 11,843 bytessrc/components/shared/ui/switch/index.tsruns · 163 bytessrc/components/shared/ui/switch/switch.tsxruns · 3,592 bytessrc/components/shared/ui/switch/switch.types.tsruns · 321 bytessrc/components/shared/ui/tabs/index.tsruns · 24 bytessrc/components/shared/ui/tabs/tabs.tsxruns · 8,212 bytessrc/consent-gate.tsruns · 286 bytessrc/consent-theme.tsxruns · 2,067 bytessrc/context.tsruns · 1,982 bytessrc/context/consent-tracking-context.tsruns · 1,602 bytessrc/context/iab-context-value.tsruns · 1,576 bytessrc/context/index.tsruns · 387 bytessrc/context/theme-context.tsruns · 2,019 bytessrc/declaration.d.tsruns · 112 bytessrc/devtools-launcher.tsruns · 3,227 bytessrc/devtools.tsxruns · 9,710 bytessrc/draft-context.tsruns · 4,222 bytessrc/draft.tsxruns · 8,142 bytessrc/event-dispatcher.tsruns · 1,932 bytessrc/external-iab-context.tsxruns · 4,667 bytessrc/gpp.tsxruns · 2,379 bytessrc/headless.tsruns · 2,089 bytessrc/hooks.tsruns · 17,642 bytessrc/hooks/__tests__/use-color-scheme.test.tsxruns · 3,410 bytessrc/hooks/__tests__/use-focus-trap.test.tsxruns · 5,930 bytessrc/hooks/__tests__/use-late-entry.test.tsxruns · 3,188 bytessrc/hooks/__tests__/use-scroll-lock.test.tsxruns · 10,348 bytessrc/hooks/__tests__/use-styles.test.tsxruns · 1,709 bytessrc/hooks/__tests__/use-theme.test.tsxruns · 2,384 bytessrc/hooks/use-color-scheme.tsruns · 531 bytessrc/hooks/use-committed-ref.tsruns · 1,306 bytessrc/hooks/use-component-config.tsruns · 2,640 bytessrc/hooks/use-focus-trap.tsruns · 1,050 bytessrc/hooks/use-headless-iab-consent-ui.tsruns · 5,252 bytessrc/hooks/use-iab-manager.tsruns · 1,586 bytessrc/hooks/use-iab-policy-guard.tsruns · 2,713 bytessrc/hooks/use-is-hydrated.tsruns · 535 bytessrc/hooks/use-late-entry.tsruns · 1,203 bytessrc/hooks/use-reduced-motion.tsruns · 1,584 bytessrc/hooks/use-scroll-lock.tsruns · 770 bytessrc/hooks/use-text-direction.tsruns · 490 bytessrc/hooks/use-theme.tsruns · 2,234 bytessrc/iab-context.tsxruns · 11,225 bytessrc/iab-dialog-deferred.tsxruns · 6,260 bytessrc/iab.tsruns · 1,245 bytessrc/iab/styles.cssasset · 367 bytessrc/iab/styles.tw3.cssasset · 447 bytessrc/index-parts/consent-banner.tsruns · 376 bytessrc/index-parts/consent-dialog-link.tsruns · 359 bytessrc/index-parts/consent-dialog-trigger.tsruns · 397 bytessrc/index-parts/consent-dialog.tsruns · 369 bytessrc/index-parts/consent-gate.tsruns · 355 bytessrc/index-parts/core.tsruns · 355 bytessrc/index-parts/draft.tsruns · 383 bytessrc/index-parts/event-dispatcher.tsruns · 355 bytessrc/index-parts/frame.tsruns · 355 bytessrc/index-parts/hooks.tsruns · 1,178 bytessrc/index-parts/hosted.tsruns · 334 bytessrc/index-parts/module-hooks.tsruns · 406 bytessrc/index-parts/offline.tsruns · 353 bytessrc/index-parts/presets.tsruns · 345 bytessrc/index-parts/provider.tsruns · 344 bytessrc/index-parts/theme.tsruns · 392 bytessrc/index-parts/translations.tsruns · 368 bytessrc/index.tsruns · 4,323 bytessrc/kernel-selector.tsruns · 4,490 bytessrc/modes.tsruns · 1,126 bytessrc/module-hooks.tsruns · 632 bytessrc/module-hooks/iframe-blocker.tsruns · 9,119 bytessrc/module-hooks/network-blocker.tsruns · 3,707 bytessrc/module-hooks/network-hold.tsruns · 4,245 bytessrc/module-hooks/persistence.tsruns · 1,364 bytessrc/module-hooks/script-loader.tsruns · 2,260 bytessrc/module-hooks/shared.tsruns · 423 bytessrc/panel-link.tsruns · 108 bytessrc/panel-trigger.tsruns · 669 bytessrc/panel.tsruns · 628 bytessrc/postcss-tailwind3.tsruns · 610 bytessrc/preferences.tsruns · 641 bytessrc/primitives.tsruns · 549 bytessrc/primitives/accordion.tsruns · 51 bytessrc/primitives/button.tsruns · 48 bytessrc/primitives/collapsible.tsruns · 53 bytessrc/primitives/dialog.tsruns · 48 bytessrc/primitives/preference-item.tsruns · 57 bytessrc/primitives/switch.tsruns · 48 bytessrc/primitives/tabs.tsruns · 46 bytessrc/prompt.tsruns · 129 bytessrc/provider.tsxruns · 40,384 bytessrc/server/fetch-ssr-data.test.tsruns · 7,426 bytessrc/server/fetch-ssr-data.tsruns · 8,283 bytessrc/server/headers.test.tsruns · 5,709 bytessrc/server/headers.tsruns · 2,764 bytessrc/server/index.tsruns · 1,058 bytessrc/server/init-cache-key.test.tsruns · 1,922 bytessrc/server/init-cache-key.tsruns · 1,276 bytessrc/server/normalize-url.test.tsruns · 5,555 bytessrc/server/normalize-url.tsruns · 3,195 bytessrc/server/types.tsruns · 1,961 bytessrc/styles.cssasset · 282 bytessrc/styles.tw3.cssasset · 403 bytessrc/test-setup.browser.tsruns · 1,689 bytessrc/theme-provider.tsxruns · 701 bytessrc/transports/hosted.tsruns · 2,345 bytessrc/transports/manifest.tsruns · 3,304 bytessrc/transports/offline.tsruns · 416 bytessrc/types/index.tsruns · 77 bytessrc/types/manager.tsruns · 505 bytessrc/types/slots.tsruns · 375 bytessrc/types/theme/index.tsruns · 31 bytessrc/types/theme/style-types.tsruns · 1,764 bytessrc/ui-config-context.tsruns · 1,130 bytessrc/utils/__tests__/deferred-module.test.tsxruns · 7,007 bytessrc/utils/__tests__/theme-utils.test.tsruns · 721 bytessrc/utils/cn.tsruns · 281 bytessrc/utils/default-translation-config.tsruns · 274 bytessrc/utils/deferred-module.tsxruns · 3,709 bytessrc/utils/index.tsruns · 131 bytessrc/utils/merge-slot-props.tsruns · 2,033 bytessrc/utils/merge-styles.tsruns · 670 bytessrc/utils/theme-utils.tsruns · 1,571 bytesstyles.cssasset · 29 bytesstyles.tw3.cssasset · 33 bytestsconfig.jsonasset · 1,415 bytestsconfig.type-tests.jsonasset · 231 bytesvitest.config.tsruns · 6,952 bytes
Read excerpt
# c15t with @c15t/react
The Markdown under `./docs` matches the installed version. Read it before writing code: v3 renamed most v2 APIs, so remembered examples are usually wrong.
## Before writing code
1. Find the framework, router, rendering mode (server, static, cached or single-page) and host in the project. Check the framework config and route files for settings that prerender or cache pages.
2. Pick the matching row in [Choose your setup](./docs/concepts/choose-your-setup.md).
3. Follow that guide from start to finish: [React](./docs/frameworks/react/quickstart.md).
## Rules
- Install with `npm install c15t` and import `c15t/react`. Keep every c15t package on the same release. New apps install `c15t` and import its framework subpath. An app that already depends on this scoped package can keep importing from it, but should not install both.
- The backend URL comes from the user's Inth project or self-hosted backend. It is public configuration. Never invent one; ask for it or read it from the environment.