Cookie Hell
A nested cookie consent dialog with deeply nested toggles that randomly flip, and a microscopic reject button.
Test Your AI See this pattern in action in Level 1: Cookie Consent Hell
Demo
We Value Your Privacy
Manage your cookie preferences
We and our 30 partners use cookies and similar technologies to provide you with a personalized experience. All cookies are enabled by default. You may review each category and partner below.
Try to disable all cookies and save your preferences
React
React
1.import { CookieHell } from 'anti-ai-ui';2.3.function App() {4. return (5. <CookieHell6. categoryCount={5}7. partnersPerCategory={8}8. onAcceptAll={() => console.log('Tracked!')}9. onSavePreferences={() => console.log('Preferences ignored!')}10. />11. );12.}
Custom Components
Custom Components
1.import { CookieHell } from 'anti-ai-ui';2.import { MyButton, MyCategory } from './MyComponents';3.4.function App() {5. return (6. <CookieHell7. categoryCount={5}8. partnersPerCategory={8}9. renderAcceptButton={({ onClick }) => (10. <MyButton onClick={onClick} variant="success">11. Accept All12. </MyButton>13. )}14. renderSaveButton={({ onClick }) => (15. <MyButton onClick={onClick} variant="ghost" size="tiny">16. Save17. </MyButton>18. )}19. renderCategory={({ category, isExpanded, onToggleExpand, onToggleCategory, onTogglePartner }) => (20. <MyCategory21. name={category.name}22. description={category.description}23. enabled={category.enabled}24. expanded={isExpanded}25. onToggle={onToggleCategory}26. onExpand={onToggleExpand}27. partners={category.partners}28. onPartnerToggle={onTogglePartner}29. />30. )}31. onAcceptAll={() => console.log('Tracked!')}32. />33. );34.}
Vanilla JS
Vanilla JS
1.import { makeCookieHell } from 'anti-ai-ui/vanilla';2.3.const container = document.getElementById('container');4.5.const { destroy } = makeCookieHell({6. container,7. categoryCount: 5,8. partnersPerCategory: 8,9. onAcceptAll: () => console.log('Tracked!'),10. onSavePreferences: () => console.log('Preferences ignored!')11.});12.13.// Call destroy() to remove
Props
| Prop | Type | Default | Description |
|---|---|---|---|
categoryCount | number | 5 | Number of cookie categories to display |
partnersPerCategory | number | 8 | Number of partners per category |
rejectButtonSize | number | 16 | Size of the save preferences button in pixels |
onAcceptAll | function | undefined | Callback when Accept All is clicked |
onSavePreferences | function | undefined | Callback when Save Preferences is clicked (toggles randomly re-enable) |
renderAcceptButton | (props: RenderAcceptButtonProps) => ReactNode | undefined | Custom render function for the Accept All button |
renderSaveButton | (props: RenderSaveButtonProps) => ReactNode | undefined | Custom render function for the Save Preferences button |
renderCategory | (props: RenderCategoryProps) => ReactNode | undefined | Custom render function for each cookie category |