[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-webflow-webflow-code-componentcomponent-audit":3,"mdc-wwkk60-key":37,"related-org-webflow-webflow-code-componentcomponent-audit":3362,"related-repo-webflow-webflow-code-componentcomponent-audit":3541},{"slug":4,"name":5,"fn":6,"description":7,"org":8,"tags":12,"stars":24,"repoUrl":25,"updatedAt":26,"license":27,"forks":28,"topics":29,"repo":32,"sourceUrl":35,"mdContent":36},"webflow-code-componentcomponent-audit","webflow-code-component:component-audit","audit Webflow Code Component architecture","Audit Webflow Code Components for architecture decisions - prop exposure, state management, slot opportunities, and Shadow DOM compatibility. Focused on Webflow-specific patterns, not generic React best practices.",{"slug":9,"name":10,"logoUrl":11,"githubOrg":9},"webflow","Webflow","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fwebflow.png",[13,17,20,21],{"name":14,"slug":15,"type":16},"React","react","tag",{"name":18,"slug":19,"type":16},"Architecture","architecture",{"name":10,"slug":9,"type":16},{"name":22,"slug":23,"type":16},"Code Analysis","code-analysis",107,"https:\u002F\u002Fgithub.com\u002Fwebflow\u002Fwebflow-skills","2026-05-18T06:47:46.277768",null,17,[30,31],"agent","skills",{"repoUrl":25,"stars":24,"forks":28,"topics":33,"description":34},[30,31],"Official Webflow Agent Skills","https:\u002F\u002Fgithub.com\u002Fwebflow\u002Fwebflow-skills\u002Ftree\u002FHEAD\u002Fplugins\u002Fwebflow-skills\u002Fskills\u002Fcomponent-audit","---\nname: webflow-code-component:component-audit\ndescription: Audit Webflow Code Components for architecture decisions - prop exposure, state management, slot opportunities, and Shadow DOM compatibility. Focused on Webflow-specific patterns, not generic React best practices.\ncompatibility: Node.js 18+, React 18+, TypeScript, @webflow\u002Fwebflow-cli\nmetadata:\n  author: webflow\n  version: \"2.0\"\n---\n\n# Component Audit\n\nAudit existing code components for **Webflow-specific architecture decisions**. This skill focuses on how well components integrate with Webflow Designer, not generic React best practices.\n\n## When to Use This Skill\n\n**Use when:**\n- User wants to improve how their components work in Webflow Designer\n- Reviewing whether the right things are exposed as props vs hardcoded\n- Checking if state management patterns are Webflow-compatible\n- Looking for opportunities to make components more designer-friendly\n- Component isn't rendering or behaving as expected in Webflow\n\n**Do NOT use when:**\n- Validating before deployment (use pre-deploy-check instead)\n- Creating new components (use component-scaffold instead)\n- Converting a React component (use convert-component instead)\n- Generic code quality review (use a linter)\n\n## Core Philosophy\n\nThis audit answers three questions:\n\n1. **Designer Control**: Are the right things exposed as props for designers to customize?\n2. **Webflow Compatibility**: Does the component work within Webflow's constraints (Shadow DOM, SSR, isolated React roots)?\n3. **Component Architecture**: Is this the right level of granularity, or should it be split\u002Fcombined?\n\n## Instructions\n\n### Phase 1: Discovery\n\n1. **Find all components**:\n   - Locate webflow.json\n   - Find all .webflow.tsx files\n   - Read corresponding React components\n\n2. **Understand intent**: Ask user what the components are for and any specific concerns\n\n### Phase 2: Analysis\n\nFor each component, analyze these Webflow-specific areas:\n\n#### A. Prop Exposure Analysis\n\n**Goal**: Identify what designers SHOULD be able to control but currently can't.\n\n| Look For | Recommendation |\n|----------|----------------|\n| Hardcoded text strings | Expose as `props.Text()` |\n| Text that designers should edit on canvas | Expose as `props.RichText()` |\n| Hardcoded values from a fixed set of options | Expose as `props.Variant({ options: [...] })` |\n| Hardcoded image URLs | Expose as `props.Image()` |\n| Hardcoded link URLs | Expose as `props.Link()` |\n| Hardcoded HTML `id` attributes | Expose as `props.Id()` |\n| Conditional rendering with boolean | Expose as `props.Boolean()` or `props.Visibility()` |\n| Internal state that affects appearance | Consider exposing initial value as prop |\n| `children` not using Slot | Convert to `props.Slot()` |\n\n> **Aliases:** `props.String` = `props.Text`, `props.Children` = `props.Slot`. Treat these as equivalent during audit.\n\n**Questions to ask:**\n- \"What would a designer want to change?\"\n- \"What requires a code change that shouldn't?\"\n\n#### B. State Management Architecture\n\n**Goal**: Identify patterns that won't work in Webflow.\n\n| Anti-Pattern | Why It Fails | Alternative |\n|--------------|--------------|-------------|\n| React Context for cross-component state | Each component has isolated React root | Use nano stores, custom events, or URL params |\n| Prop drilling through Slots | Slot children are separate React apps | Use nano stores or custom events |\n| Shared state via module-level variables | May cause SSR issues | Use browser storage or nano stores |\n| Global event listeners without cleanup | Memory leaks, SSR issues | Use useEffect with cleanup |\n\n**Refactoring recommendations:**\n- If components need to communicate → suggest cross-component state pattern\n- If using Context internally only → that's fine, document it\n- If components are tightly coupled → suggest decomposition\n\n#### C. Slot Opportunities\n\n**Goal**: Identify hardcoded content that should be designer-controlled.\n\n| Current Pattern | Better Pattern |\n|-----------------|----------------|\n| Hardcoded button inside card | Slot for actions area |\n| Hardcoded icon component | Slot or Image prop |\n| Fixed header\u002Ffooter structure | Slots for header and footer |\n| Hardcoded list items | Consider if this should be multiple components |\n\n**When NOT to use Slots:**\n- When content has specific behavioral requirements\n- When content needs to interact with component state\n- When the structure is truly fixed and not customizable\n\n#### D. Shadow DOM Compatibility\n\n**Goal**: Ensure styles work in isolation.\n\n| Issue | Detection | Fix |\n|-------|-----------|-----|\n| Using site\u002Fglobal CSS classes | Class names like `.container`, `.btn` | Use CSS Modules or component-scoped styles |\n| CSS-in-JS not configured | styled-components\u002FEmotion without decorator | Add globals.ts with `styledComponentsShadowDomDecorator` (styled-components) or `emotionShadowDomDecorator` (Emotion\u002FMUI) |\n| Missing style imports | Styles defined but not imported in .webflow.tsx | Add import statement |\n| Relying on inherited styles | Expecting parent styles to cascade | Use explicit styles or CSS variables |\n| Needs tag selectors (h1, p, etc.) | Tags not styled inside Shadow DOM | Enable `applyTagSelectors: true` in component options |\n\n> **SSR Note:** When using styled-components or Emotion, you must also configure the server renderer in `webflow.json` for SSR to work correctly:\n> - styled-components: `\"library\": { \"renderer\": { \"server\": \"@webflow\u002Fstyled-components-utils\u002Fserver\" } }`\n> - Emotion: `\"library\": { \"renderer\": { \"server\": \"@webflow\u002Femotion-utils\u002Fserver\" } }`\n\n#### E. SSR Safety\n\n**Goal**: Identify browser-only code that runs during render.\n\n| Pattern | Problem | Solution |\n|---------|---------|----------|\n| `window.innerWidth` in render | SSR error | Use useEffect or set `ssr: false` |\n| `document.getElementById` in render | SSR error | Use useEffect or refs |\n| `localStorage.getItem` outside useEffect | SSR error | Wrap in useEffect with useState |\n| Third-party library that requires window | SSR error | Dynamic import or `ssr: false` |\n\n#### F. Component Granularity\n\n**Goal**: Determine if component is at the right level of abstraction.\n\n**Signs a component should be SPLIT:**\n- Too many props (>10) making Designer UI cluttered\n- Multiple distinct sections that could be independent\n- Designers want to use parts separately\n- Component handles multiple unrelated concerns\n\n**Signs components should be COMBINED:**\n- Always used together\n- Tightly coupled state that's awkward to sync\n- Small components with no standalone use\n\n### Phase 3: Report\n\nGenerate actionable report with:\n\n1. **Summary**: Quick overview of findings\n2. **By Component**: Specific issues and recommendations for each\n3. **Architecture Recommendations**: Cross-cutting concerns\n4. **Priority Actions**: What to fix first\n\n## Audit Checklist\n\n### Designer Control (Most Important for Webflow)\n\n| Check | Question |\n|-------|----------|\n| Prop completeness | Can designers customize everything they'd want to? |\n| Prop types | Are the right Webflow prop types used? |\n| Default values | Do props have sensible defaults? |\n| Prop naming | Are names clear for non-developers? |\n| Slot usage | Is nested content handled via Slots? |\n| Visibility props | Can sections be shown\u002Fhidden? |\n\n### Webflow Compatibility\n\n| Check | Question |\n|-------|----------|\n| SSR safe | Does component render without browser APIs? |\n| Style isolation | Do styles work in Shadow DOM? |\n| State independence | Does component work without Context from parent? |\n| No function props | Are there callback props that won't work? |\n\n### Architecture\n\n| Check | Question |\n|-------|----------|\n| Single responsibility | Does component do one thing well? |\n| Right granularity | Is this the right size for Designer use? |\n| Cross-component state | If needed, is it implemented correctly? |\n\n## Example\n\n**User prompt:**\n```\nAudit my ProductCard component\n```\n\n**Response:**\n```markdown\n## Audit: ProductCard\n\n### Component Overview\n\n```typescript\n\u002F\u002F Current props\nprops: {\n  title: props.Text(),\n  price: props.Number(),\n  imageUrl: props.Text()  \u002F\u002F ⚠️ Should be Image\n}\n```\n\n---\n\n### A. Prop Exposure Analysis\n\n| Finding | Severity | Recommendation |\n|---------|----------|----------------|\n| `imageUrl` is Text, not Image | Warning | Change to `props.Image()` for proper asset handling |\n| \"Add to Cart\" button text is hardcoded | Suggestion | Expose as prop: `addToCartText: props.Text()` |\n| Sale badge is conditionally rendered but not controllable | Suggestion | Add `showSaleBadge: props.Boolean()` |\n| Badge color is hardcoded red | Suggestion | Add `badgeVariant: props.Variant({ options: [\"sale\", \"new\", \"featured\"] })` |\n\n**Hardcoded Content Found:**\n```typescript\n\u002F\u002F Line 24 - hardcoded, should be prop\n\u003Cbutton>Add to Cart\u003C\u002Fbutton>\n\n\u002F\u002F Line 18 - hardcoded, should be prop or removed\n{onSale && \u003Cspan className=\"badge\">SALE\u003C\u002Fspan>}\n```\n\n**Recommended Props to Add:**\n```typescript\nprops: {\n  \u002F\u002F ...existing\n  addToCartLabel: props.Text({\n    name: \"Button Label\",\n    defaultValue: \"Add to Cart\"\n  }),\n  showBadge: props.Boolean({\n    name: \"Show Badge\",\n    defaultValue: false\n  }),\n  badgeType: props.Variant({\n    name: \"Badge Type\",\n    options: [\"sale\", \"new\", \"featured\"],\n    defaultValue: \"sale\"\n  })\n}\n```\n\n---\n\n### B. State Management\n\n| Finding | Severity |\n|---------|----------|\n| Uses `localStorage` for cart count | Warning |\n| No React Context dependencies | OK |\n\n**Issue: localStorage in render**\n```typescript\n\u002F\u002F Line 8 - will break SSR\nconst cartCount = localStorage.getItem('cart');\n```\n\n**Fix:**\n```typescript\nconst [cartCount, setCartCount] = useState(0);\nuseEffect(() => {\n  setCartCount(parseInt(localStorage.getItem('cart') || '0'));\n}, []);\n```\n\n---\n\n### C. Slot Opportunities\n\n| Current | Recommendation |\n|---------|----------------|\n| Hardcoded button | Consider: `actions: props.Slot()` for flexible CTAs |\n\nIf designers need to put different content (button, link, custom element) in the action area:\n```typescript\nprops: {\n  actions: props.Slot({\n    name: \"Actions\"\n  })\n}\n\n\u002F\u002F Component\n\u003Cdiv className={styles.actions}>\n  {actions}\n\u003C\u002Fdiv>\n```\n\n**However**, if button behavior is tied to cart logic, keep it hardcoded.\n\n---\n\n### D. Shadow DOM Compatibility\n\n| Check | Status |\n|-------|--------|\n| Styles imported in .webflow.tsx | ✅ OK |\n| CSS Modules used | ✅ OK |\n| No global class references | ✅ OK |\n\n---\n\n### E. SSR Safety\n\n| Check | Status |\n|-------|--------|\n| window usage | ✅ None |\n| document usage | ✅ None |\n| localStorage usage | ⚠️ Needs guard (see fix above) |\n\n---\n\n### F. Component Granularity\n\n**Current size**: 4 props (will be 7 after recommendations)\n**Verdict**: Good granularity - single purpose, manageable props\n\n---\n\n## Summary\n\n| Category | Status |\n|----------|--------|\n| Designer Control | ⚠️ Needs work - 4 hardcoded items found |\n| State Management | ⚠️ localStorage needs SSR guard |\n| Shadow DOM | ✅ Good |\n| SSR Safety | ⚠️ One issue |\n| Granularity | ✅ Good |\n\n**Priority Actions:**\n1. Fix localStorage SSR issue (blocks deployment)\n2. Change imageUrl from Text to Image prop\n3. Expose badge controls as props\n4. Consider exposing button label\n```\n\n## Guidelines\n\n### What This Audit Does NOT Check\n\nThis is not a generic code quality audit. Skip:\n- Generic React performance patterns (let users use React DevTools)\n- Generic accessibility (let users use axe or similar)\n- Code formatting (let users use Prettier\u002FESLint)\n- Generic TypeScript best practices\n\nFocus only on Webflow-specific concerns.\n\n### Prop Exposure Heuristics\n\n**Should be a prop:**\n- Any text visible in the UI\n- Any image or media\n- Any color or size that might vary\n- Any boolean that controls visibility\n- Any value that changes per-use\n\n**Should NOT be a prop:**\n- Internal implementation details\n- State that changes during interaction\n- Values derived from other props\n- Animation timing\u002Feasing (unless explicitly customizable)\n\n### When to Recommend Slots vs Props\n\n**Use Slot when:**\n- Designer wants to put arbitrary Webflow elements inside\n- Content structure is flexible\n- Nested content doesn't need to interact with component state\n\n**Use Props when:**\n- Content is simple (text, image, link)\n- Component needs to process\u002Ftransform the content\n- Specific structure is required\n\n### State Pattern Recommendations\n\nIf components need to share state, recommend in this order:\n1. **URL parameters** - if state should be shareable\u002Fbookmarkable\n2. **Nano stores** - for real-time sync between components\n3. **Custom events** - for fire-and-forget communication\n4. **Browser storage** - for persistence across sessions\n",{"data":38,"body":42},{"name":5,"description":7,"compatibility":39,"metadata":40},"Node.js 18+, React 18+, TypeScript, @webflow\u002Fwebflow-cli",{"author":9,"version":41},"2.0",{"type":43,"children":44},"root",[45,54,68,75,83,113,121,144,150,155,189,195,202,243,249,254,261,271,481,526,534,547,553,562,661,669,687,693,702,776,784,802,808,817,971,1017,1023,1032,1156,1162,1171,1179,1202,1210,1228,1234,1239,1282,1288,1294,1394,1399,1471,1475,1534,1540,1548,1560,1568,1790,1794,1799,1925,1933,2071,2079,2491,2494,2500,2553,2561,2635,2643,2830,2833,2838,2880,2885,3057,3067,3070,3075,3133,3136,3141,3199,3202,3207,3224,3227,3232,3316,3324,3347,3356],{"type":46,"tag":47,"props":48,"children":50},"element","h1",{"id":49},"component-audit",[51],{"type":52,"value":53},"text","Component Audit",{"type":46,"tag":55,"props":56,"children":57},"p",{},[58,60,66],{"type":52,"value":59},"Audit existing code components for ",{"type":46,"tag":61,"props":62,"children":63},"strong",{},[64],{"type":52,"value":65},"Webflow-specific architecture decisions",{"type":52,"value":67},". This skill focuses on how well components integrate with Webflow Designer, not generic React best practices.",{"type":46,"tag":69,"props":70,"children":72},"h2",{"id":71},"when-to-use-this-skill",[73],{"type":52,"value":74},"When to Use This Skill",{"type":46,"tag":55,"props":76,"children":77},{},[78],{"type":46,"tag":61,"props":79,"children":80},{},[81],{"type":52,"value":82},"Use when:",{"type":46,"tag":84,"props":85,"children":86},"ul",{},[87,93,98,103,108],{"type":46,"tag":88,"props":89,"children":90},"li",{},[91],{"type":52,"value":92},"User wants to improve how their components work in Webflow Designer",{"type":46,"tag":88,"props":94,"children":95},{},[96],{"type":52,"value":97},"Reviewing whether the right things are exposed as props vs hardcoded",{"type":46,"tag":88,"props":99,"children":100},{},[101],{"type":52,"value":102},"Checking if state management patterns are Webflow-compatible",{"type":46,"tag":88,"props":104,"children":105},{},[106],{"type":52,"value":107},"Looking for opportunities to make components more designer-friendly",{"type":46,"tag":88,"props":109,"children":110},{},[111],{"type":52,"value":112},"Component isn't rendering or behaving as expected in Webflow",{"type":46,"tag":55,"props":114,"children":115},{},[116],{"type":46,"tag":61,"props":117,"children":118},{},[119],{"type":52,"value":120},"Do NOT use when:",{"type":46,"tag":84,"props":122,"children":123},{},[124,129,134,139],{"type":46,"tag":88,"props":125,"children":126},{},[127],{"type":52,"value":128},"Validating before deployment (use pre-deploy-check instead)",{"type":46,"tag":88,"props":130,"children":131},{},[132],{"type":52,"value":133},"Creating new components (use component-scaffold instead)",{"type":46,"tag":88,"props":135,"children":136},{},[137],{"type":52,"value":138},"Converting a React component (use convert-component instead)",{"type":46,"tag":88,"props":140,"children":141},{},[142],{"type":52,"value":143},"Generic code quality review (use a linter)",{"type":46,"tag":69,"props":145,"children":147},{"id":146},"core-philosophy",[148],{"type":52,"value":149},"Core Philosophy",{"type":46,"tag":55,"props":151,"children":152},{},[153],{"type":52,"value":154},"This audit answers three questions:",{"type":46,"tag":156,"props":157,"children":158},"ol",{},[159,169,179],{"type":46,"tag":88,"props":160,"children":161},{},[162,167],{"type":46,"tag":61,"props":163,"children":164},{},[165],{"type":52,"value":166},"Designer Control",{"type":52,"value":168},": Are the right things exposed as props for designers to customize?",{"type":46,"tag":88,"props":170,"children":171},{},[172,177],{"type":46,"tag":61,"props":173,"children":174},{},[175],{"type":52,"value":176},"Webflow Compatibility",{"type":52,"value":178},": Does the component work within Webflow's constraints (Shadow DOM, SSR, isolated React roots)?",{"type":46,"tag":88,"props":180,"children":181},{},[182,187],{"type":46,"tag":61,"props":183,"children":184},{},[185],{"type":52,"value":186},"Component Architecture",{"type":52,"value":188},": Is this the right level of granularity, or should it be split\u002Fcombined?",{"type":46,"tag":69,"props":190,"children":192},{"id":191},"instructions",[193],{"type":52,"value":194},"Instructions",{"type":46,"tag":196,"props":197,"children":199},"h3",{"id":198},"phase-1-discovery",[200],{"type":52,"value":201},"Phase 1: Discovery",{"type":46,"tag":156,"props":203,"children":204},{},[205,233],{"type":46,"tag":88,"props":206,"children":207},{},[208,213,215],{"type":46,"tag":61,"props":209,"children":210},{},[211],{"type":52,"value":212},"Find all components",{"type":52,"value":214},":",{"type":46,"tag":84,"props":216,"children":217},{},[218,223,228],{"type":46,"tag":88,"props":219,"children":220},{},[221],{"type":52,"value":222},"Locate webflow.json",{"type":46,"tag":88,"props":224,"children":225},{},[226],{"type":52,"value":227},"Find all .webflow.tsx files",{"type":46,"tag":88,"props":229,"children":230},{},[231],{"type":52,"value":232},"Read corresponding React components",{"type":46,"tag":88,"props":234,"children":235},{},[236,241],{"type":46,"tag":61,"props":237,"children":238},{},[239],{"type":52,"value":240},"Understand intent",{"type":52,"value":242},": Ask user what the components are for and any specific concerns",{"type":46,"tag":196,"props":244,"children":246},{"id":245},"phase-2-analysis",[247],{"type":52,"value":248},"Phase 2: Analysis",{"type":46,"tag":55,"props":250,"children":251},{},[252],{"type":52,"value":253},"For each component, analyze these Webflow-specific areas:",{"type":46,"tag":255,"props":256,"children":258},"h4",{"id":257},"a-prop-exposure-analysis",[259],{"type":52,"value":260},"A. Prop Exposure Analysis",{"type":46,"tag":55,"props":262,"children":263},{},[264,269],{"type":46,"tag":61,"props":265,"children":266},{},[267],{"type":52,"value":268},"Goal",{"type":52,"value":270},": Identify what designers SHOULD be able to control but currently can't.",{"type":46,"tag":272,"props":273,"children":274},"table",{},[275,294],{"type":46,"tag":276,"props":277,"children":278},"thead",{},[279],{"type":46,"tag":280,"props":281,"children":282},"tr",{},[283,289],{"type":46,"tag":284,"props":285,"children":286},"th",{},[287],{"type":52,"value":288},"Look For",{"type":46,"tag":284,"props":290,"children":291},{},[292],{"type":52,"value":293},"Recommendation",{"type":46,"tag":295,"props":296,"children":297},"tbody",{},[298,319,337,355,373,391,417,443,456],{"type":46,"tag":280,"props":299,"children":300},{},[301,307],{"type":46,"tag":302,"props":303,"children":304},"td",{},[305],{"type":52,"value":306},"Hardcoded text strings",{"type":46,"tag":302,"props":308,"children":309},{},[310,312],{"type":52,"value":311},"Expose as ",{"type":46,"tag":313,"props":314,"children":316},"code",{"className":315},[],[317],{"type":52,"value":318},"props.Text()",{"type":46,"tag":280,"props":320,"children":321},{},[322,327],{"type":46,"tag":302,"props":323,"children":324},{},[325],{"type":52,"value":326},"Text that designers should edit on canvas",{"type":46,"tag":302,"props":328,"children":329},{},[330,331],{"type":52,"value":311},{"type":46,"tag":313,"props":332,"children":334},{"className":333},[],[335],{"type":52,"value":336},"props.RichText()",{"type":46,"tag":280,"props":338,"children":339},{},[340,345],{"type":46,"tag":302,"props":341,"children":342},{},[343],{"type":52,"value":344},"Hardcoded values from a fixed set of options",{"type":46,"tag":302,"props":346,"children":347},{},[348,349],{"type":52,"value":311},{"type":46,"tag":313,"props":350,"children":352},{"className":351},[],[353],{"type":52,"value":354},"props.Variant({ options: [...] })",{"type":46,"tag":280,"props":356,"children":357},{},[358,363],{"type":46,"tag":302,"props":359,"children":360},{},[361],{"type":52,"value":362},"Hardcoded image URLs",{"type":46,"tag":302,"props":364,"children":365},{},[366,367],{"type":52,"value":311},{"type":46,"tag":313,"props":368,"children":370},{"className":369},[],[371],{"type":52,"value":372},"props.Image()",{"type":46,"tag":280,"props":374,"children":375},{},[376,381],{"type":46,"tag":302,"props":377,"children":378},{},[379],{"type":52,"value":380},"Hardcoded link URLs",{"type":46,"tag":302,"props":382,"children":383},{},[384,385],{"type":52,"value":311},{"type":46,"tag":313,"props":386,"children":388},{"className":387},[],[389],{"type":52,"value":390},"props.Link()",{"type":46,"tag":280,"props":392,"children":393},{},[394,407],{"type":46,"tag":302,"props":395,"children":396},{},[397,399,405],{"type":52,"value":398},"Hardcoded HTML ",{"type":46,"tag":313,"props":400,"children":402},{"className":401},[],[403],{"type":52,"value":404},"id",{"type":52,"value":406}," attributes",{"type":46,"tag":302,"props":408,"children":409},{},[410,411],{"type":52,"value":311},{"type":46,"tag":313,"props":412,"children":414},{"className":413},[],[415],{"type":52,"value":416},"props.Id()",{"type":46,"tag":280,"props":418,"children":419},{},[420,425],{"type":46,"tag":302,"props":421,"children":422},{},[423],{"type":52,"value":424},"Conditional rendering with boolean",{"type":46,"tag":302,"props":426,"children":427},{},[428,429,435,437],{"type":52,"value":311},{"type":46,"tag":313,"props":430,"children":432},{"className":431},[],[433],{"type":52,"value":434},"props.Boolean()",{"type":52,"value":436}," or ",{"type":46,"tag":313,"props":438,"children":440},{"className":439},[],[441],{"type":52,"value":442},"props.Visibility()",{"type":46,"tag":280,"props":444,"children":445},{},[446,451],{"type":46,"tag":302,"props":447,"children":448},{},[449],{"type":52,"value":450},"Internal state that affects appearance",{"type":46,"tag":302,"props":452,"children":453},{},[454],{"type":52,"value":455},"Consider exposing initial value as prop",{"type":46,"tag":280,"props":457,"children":458},{},[459,470],{"type":46,"tag":302,"props":460,"children":461},{},[462,468],{"type":46,"tag":313,"props":463,"children":465},{"className":464},[],[466],{"type":52,"value":467},"children",{"type":52,"value":469}," not using Slot",{"type":46,"tag":302,"props":471,"children":472},{},[473,475],{"type":52,"value":474},"Convert to ",{"type":46,"tag":313,"props":476,"children":478},{"className":477},[],[479],{"type":52,"value":480},"props.Slot()",{"type":46,"tag":482,"props":483,"children":484},"blockquote",{},[485],{"type":46,"tag":55,"props":486,"children":487},{},[488,493,495,501,503,509,511,517,518,524],{"type":46,"tag":61,"props":489,"children":490},{},[491],{"type":52,"value":492},"Aliases:",{"type":52,"value":494}," ",{"type":46,"tag":313,"props":496,"children":498},{"className":497},[],[499],{"type":52,"value":500},"props.String",{"type":52,"value":502}," = ",{"type":46,"tag":313,"props":504,"children":506},{"className":505},[],[507],{"type":52,"value":508},"props.Text",{"type":52,"value":510},", ",{"type":46,"tag":313,"props":512,"children":514},{"className":513},[],[515],{"type":52,"value":516},"props.Children",{"type":52,"value":502},{"type":46,"tag":313,"props":519,"children":521},{"className":520},[],[522],{"type":52,"value":523},"props.Slot",{"type":52,"value":525},". Treat these as equivalent during audit.",{"type":46,"tag":55,"props":527,"children":528},{},[529],{"type":46,"tag":61,"props":530,"children":531},{},[532],{"type":52,"value":533},"Questions to ask:",{"type":46,"tag":84,"props":535,"children":536},{},[537,542],{"type":46,"tag":88,"props":538,"children":539},{},[540],{"type":52,"value":541},"\"What would a designer want to change?\"",{"type":46,"tag":88,"props":543,"children":544},{},[545],{"type":52,"value":546},"\"What requires a code change that shouldn't?\"",{"type":46,"tag":255,"props":548,"children":550},{"id":549},"b-state-management-architecture",[551],{"type":52,"value":552},"B. State Management Architecture",{"type":46,"tag":55,"props":554,"children":555},{},[556,560],{"type":46,"tag":61,"props":557,"children":558},{},[559],{"type":52,"value":268},{"type":52,"value":561},": Identify patterns that won't work in Webflow.",{"type":46,"tag":272,"props":563,"children":564},{},[565,586],{"type":46,"tag":276,"props":566,"children":567},{},[568],{"type":46,"tag":280,"props":569,"children":570},{},[571,576,581],{"type":46,"tag":284,"props":572,"children":573},{},[574],{"type":52,"value":575},"Anti-Pattern",{"type":46,"tag":284,"props":577,"children":578},{},[579],{"type":52,"value":580},"Why It Fails",{"type":46,"tag":284,"props":582,"children":583},{},[584],{"type":52,"value":585},"Alternative",{"type":46,"tag":295,"props":587,"children":588},{},[589,607,625,643],{"type":46,"tag":280,"props":590,"children":591},{},[592,597,602],{"type":46,"tag":302,"props":593,"children":594},{},[595],{"type":52,"value":596},"React Context for cross-component state",{"type":46,"tag":302,"props":598,"children":599},{},[600],{"type":52,"value":601},"Each component has isolated React root",{"type":46,"tag":302,"props":603,"children":604},{},[605],{"type":52,"value":606},"Use nano stores, custom events, or URL params",{"type":46,"tag":280,"props":608,"children":609},{},[610,615,620],{"type":46,"tag":302,"props":611,"children":612},{},[613],{"type":52,"value":614},"Prop drilling through Slots",{"type":46,"tag":302,"props":616,"children":617},{},[618],{"type":52,"value":619},"Slot children are separate React apps",{"type":46,"tag":302,"props":621,"children":622},{},[623],{"type":52,"value":624},"Use nano stores or custom events",{"type":46,"tag":280,"props":626,"children":627},{},[628,633,638],{"type":46,"tag":302,"props":629,"children":630},{},[631],{"type":52,"value":632},"Shared state via module-level variables",{"type":46,"tag":302,"props":634,"children":635},{},[636],{"type":52,"value":637},"May cause SSR issues",{"type":46,"tag":302,"props":639,"children":640},{},[641],{"type":52,"value":642},"Use browser storage or nano stores",{"type":46,"tag":280,"props":644,"children":645},{},[646,651,656],{"type":46,"tag":302,"props":647,"children":648},{},[649],{"type":52,"value":650},"Global event listeners without cleanup",{"type":46,"tag":302,"props":652,"children":653},{},[654],{"type":52,"value":655},"Memory leaks, SSR issues",{"type":46,"tag":302,"props":657,"children":658},{},[659],{"type":52,"value":660},"Use useEffect with cleanup",{"type":46,"tag":55,"props":662,"children":663},{},[664],{"type":46,"tag":61,"props":665,"children":666},{},[667],{"type":52,"value":668},"Refactoring recommendations:",{"type":46,"tag":84,"props":670,"children":671},{},[672,677,682],{"type":46,"tag":88,"props":673,"children":674},{},[675],{"type":52,"value":676},"If components need to communicate → suggest cross-component state pattern",{"type":46,"tag":88,"props":678,"children":679},{},[680],{"type":52,"value":681},"If using Context internally only → that's fine, document it",{"type":46,"tag":88,"props":683,"children":684},{},[685],{"type":52,"value":686},"If components are tightly coupled → suggest decomposition",{"type":46,"tag":255,"props":688,"children":690},{"id":689},"c-slot-opportunities",[691],{"type":52,"value":692},"C. Slot Opportunities",{"type":46,"tag":55,"props":694,"children":695},{},[696,700],{"type":46,"tag":61,"props":697,"children":698},{},[699],{"type":52,"value":268},{"type":52,"value":701},": Identify hardcoded content that should be designer-controlled.",{"type":46,"tag":272,"props":703,"children":704},{},[705,721],{"type":46,"tag":276,"props":706,"children":707},{},[708],{"type":46,"tag":280,"props":709,"children":710},{},[711,716],{"type":46,"tag":284,"props":712,"children":713},{},[714],{"type":52,"value":715},"Current Pattern",{"type":46,"tag":284,"props":717,"children":718},{},[719],{"type":52,"value":720},"Better Pattern",{"type":46,"tag":295,"props":722,"children":723},{},[724,737,750,763],{"type":46,"tag":280,"props":725,"children":726},{},[727,732],{"type":46,"tag":302,"props":728,"children":729},{},[730],{"type":52,"value":731},"Hardcoded button inside card",{"type":46,"tag":302,"props":733,"children":734},{},[735],{"type":52,"value":736},"Slot for actions area",{"type":46,"tag":280,"props":738,"children":739},{},[740,745],{"type":46,"tag":302,"props":741,"children":742},{},[743],{"type":52,"value":744},"Hardcoded icon component",{"type":46,"tag":302,"props":746,"children":747},{},[748],{"type":52,"value":749},"Slot or Image prop",{"type":46,"tag":280,"props":751,"children":752},{},[753,758],{"type":46,"tag":302,"props":754,"children":755},{},[756],{"type":52,"value":757},"Fixed header\u002Ffooter structure",{"type":46,"tag":302,"props":759,"children":760},{},[761],{"type":52,"value":762},"Slots for header and footer",{"type":46,"tag":280,"props":764,"children":765},{},[766,771],{"type":46,"tag":302,"props":767,"children":768},{},[769],{"type":52,"value":770},"Hardcoded list items",{"type":46,"tag":302,"props":772,"children":773},{},[774],{"type":52,"value":775},"Consider if this should be multiple components",{"type":46,"tag":55,"props":777,"children":778},{},[779],{"type":46,"tag":61,"props":780,"children":781},{},[782],{"type":52,"value":783},"When NOT to use Slots:",{"type":46,"tag":84,"props":785,"children":786},{},[787,792,797],{"type":46,"tag":88,"props":788,"children":789},{},[790],{"type":52,"value":791},"When content has specific behavioral requirements",{"type":46,"tag":88,"props":793,"children":794},{},[795],{"type":52,"value":796},"When content needs to interact with component state",{"type":46,"tag":88,"props":798,"children":799},{},[800],{"type":52,"value":801},"When the structure is truly fixed and not customizable",{"type":46,"tag":255,"props":803,"children":805},{"id":804},"d-shadow-dom-compatibility",[806],{"type":52,"value":807},"D. Shadow DOM Compatibility",{"type":46,"tag":55,"props":809,"children":810},{},[811,815],{"type":46,"tag":61,"props":812,"children":813},{},[814],{"type":52,"value":268},{"type":52,"value":816},": Ensure styles work in isolation.",{"type":46,"tag":272,"props":818,"children":819},{},[820,841],{"type":46,"tag":276,"props":821,"children":822},{},[823],{"type":46,"tag":280,"props":824,"children":825},{},[826,831,836],{"type":46,"tag":284,"props":827,"children":828},{},[829],{"type":52,"value":830},"Issue",{"type":46,"tag":284,"props":832,"children":833},{},[834],{"type":52,"value":835},"Detection",{"type":46,"tag":284,"props":837,"children":838},{},[839],{"type":52,"value":840},"Fix",{"type":46,"tag":295,"props":842,"children":843},{},[844,875,909,927,945],{"type":46,"tag":280,"props":845,"children":846},{},[847,852,870],{"type":46,"tag":302,"props":848,"children":849},{},[850],{"type":52,"value":851},"Using site\u002Fglobal CSS classes",{"type":46,"tag":302,"props":853,"children":854},{},[855,857,863,864],{"type":52,"value":856},"Class names like ",{"type":46,"tag":313,"props":858,"children":860},{"className":859},[],[861],{"type":52,"value":862},".container",{"type":52,"value":510},{"type":46,"tag":313,"props":865,"children":867},{"className":866},[],[868],{"type":52,"value":869},".btn",{"type":46,"tag":302,"props":871,"children":872},{},[873],{"type":52,"value":874},"Use CSS Modules or component-scoped styles",{"type":46,"tag":280,"props":876,"children":877},{},[878,883,888],{"type":46,"tag":302,"props":879,"children":880},{},[881],{"type":52,"value":882},"CSS-in-JS not configured",{"type":46,"tag":302,"props":884,"children":885},{},[886],{"type":52,"value":887},"styled-components\u002FEmotion without decorator",{"type":46,"tag":302,"props":889,"children":890},{},[891,893,899,901,907],{"type":52,"value":892},"Add globals.ts with ",{"type":46,"tag":313,"props":894,"children":896},{"className":895},[],[897],{"type":52,"value":898},"styledComponentsShadowDomDecorator",{"type":52,"value":900}," (styled-components) or ",{"type":46,"tag":313,"props":902,"children":904},{"className":903},[],[905],{"type":52,"value":906},"emotionShadowDomDecorator",{"type":52,"value":908}," (Emotion\u002FMUI)",{"type":46,"tag":280,"props":910,"children":911},{},[912,917,922],{"type":46,"tag":302,"props":913,"children":914},{},[915],{"type":52,"value":916},"Missing style imports",{"type":46,"tag":302,"props":918,"children":919},{},[920],{"type":52,"value":921},"Styles defined but not imported in .webflow.tsx",{"type":46,"tag":302,"props":923,"children":924},{},[925],{"type":52,"value":926},"Add import statement",{"type":46,"tag":280,"props":928,"children":929},{},[930,935,940],{"type":46,"tag":302,"props":931,"children":932},{},[933],{"type":52,"value":934},"Relying on inherited styles",{"type":46,"tag":302,"props":936,"children":937},{},[938],{"type":52,"value":939},"Expecting parent styles to cascade",{"type":46,"tag":302,"props":941,"children":942},{},[943],{"type":52,"value":944},"Use explicit styles or CSS variables",{"type":46,"tag":280,"props":946,"children":947},{},[948,953,958],{"type":46,"tag":302,"props":949,"children":950},{},[951],{"type":52,"value":952},"Needs tag selectors (h1, p, etc.)",{"type":46,"tag":302,"props":954,"children":955},{},[956],{"type":52,"value":957},"Tags not styled inside Shadow DOM",{"type":46,"tag":302,"props":959,"children":960},{},[961,963,969],{"type":52,"value":962},"Enable ",{"type":46,"tag":313,"props":964,"children":966},{"className":965},[],[967],{"type":52,"value":968},"applyTagSelectors: true",{"type":52,"value":970}," in component options",{"type":46,"tag":482,"props":972,"children":973},{},[974,992],{"type":46,"tag":55,"props":975,"children":976},{},[977,982,984,990],{"type":46,"tag":61,"props":978,"children":979},{},[980],{"type":52,"value":981},"SSR Note:",{"type":52,"value":983}," When using styled-components or Emotion, you must also configure the server renderer in ",{"type":46,"tag":313,"props":985,"children":987},{"className":986},[],[988],{"type":52,"value":989},"webflow.json",{"type":52,"value":991}," for SSR to work correctly:",{"type":46,"tag":84,"props":993,"children":994},{},[995,1006],{"type":46,"tag":88,"props":996,"children":997},{},[998,1000],{"type":52,"value":999},"styled-components: ",{"type":46,"tag":313,"props":1001,"children":1003},{"className":1002},[],[1004],{"type":52,"value":1005},"\"library\": { \"renderer\": { \"server\": \"@webflow\u002Fstyled-components-utils\u002Fserver\" } }",{"type":46,"tag":88,"props":1007,"children":1008},{},[1009,1011],{"type":52,"value":1010},"Emotion: ",{"type":46,"tag":313,"props":1012,"children":1014},{"className":1013},[],[1015],{"type":52,"value":1016},"\"library\": { \"renderer\": { \"server\": \"@webflow\u002Femotion-utils\u002Fserver\" } }",{"type":46,"tag":255,"props":1018,"children":1020},{"id":1019},"e-ssr-safety",[1021],{"type":52,"value":1022},"E. SSR Safety",{"type":46,"tag":55,"props":1024,"children":1025},{},[1026,1030],{"type":46,"tag":61,"props":1027,"children":1028},{},[1029],{"type":52,"value":268},{"type":52,"value":1031},": Identify browser-only code that runs during render.",{"type":46,"tag":272,"props":1033,"children":1034},{},[1035,1056],{"type":46,"tag":276,"props":1036,"children":1037},{},[1038],{"type":46,"tag":280,"props":1039,"children":1040},{},[1041,1046,1051],{"type":46,"tag":284,"props":1042,"children":1043},{},[1044],{"type":52,"value":1045},"Pattern",{"type":46,"tag":284,"props":1047,"children":1048},{},[1049],{"type":52,"value":1050},"Problem",{"type":46,"tag":284,"props":1052,"children":1053},{},[1054],{"type":52,"value":1055},"Solution",{"type":46,"tag":295,"props":1057,"children":1058},{},[1059,1089,1111,1134],{"type":46,"tag":280,"props":1060,"children":1061},{},[1062,1073,1078],{"type":46,"tag":302,"props":1063,"children":1064},{},[1065,1071],{"type":46,"tag":313,"props":1066,"children":1068},{"className":1067},[],[1069],{"type":52,"value":1070},"window.innerWidth",{"type":52,"value":1072}," in render",{"type":46,"tag":302,"props":1074,"children":1075},{},[1076],{"type":52,"value":1077},"SSR error",{"type":46,"tag":302,"props":1079,"children":1080},{},[1081,1083],{"type":52,"value":1082},"Use useEffect or set ",{"type":46,"tag":313,"props":1084,"children":1086},{"className":1085},[],[1087],{"type":52,"value":1088},"ssr: false",{"type":46,"tag":280,"props":1090,"children":1091},{},[1092,1102,1106],{"type":46,"tag":302,"props":1093,"children":1094},{},[1095,1101],{"type":46,"tag":313,"props":1096,"children":1098},{"className":1097},[],[1099],{"type":52,"value":1100},"document.getElementById",{"type":52,"value":1072},{"type":46,"tag":302,"props":1103,"children":1104},{},[1105],{"type":52,"value":1077},{"type":46,"tag":302,"props":1107,"children":1108},{},[1109],{"type":52,"value":1110},"Use useEffect or refs",{"type":46,"tag":280,"props":1112,"children":1113},{},[1114,1125,1129],{"type":46,"tag":302,"props":1115,"children":1116},{},[1117,1123],{"type":46,"tag":313,"props":1118,"children":1120},{"className":1119},[],[1121],{"type":52,"value":1122},"localStorage.getItem",{"type":52,"value":1124}," outside useEffect",{"type":46,"tag":302,"props":1126,"children":1127},{},[1128],{"type":52,"value":1077},{"type":46,"tag":302,"props":1130,"children":1131},{},[1132],{"type":52,"value":1133},"Wrap in useEffect with useState",{"type":46,"tag":280,"props":1135,"children":1136},{},[1137,1142,1146],{"type":46,"tag":302,"props":1138,"children":1139},{},[1140],{"type":52,"value":1141},"Third-party library that requires window",{"type":46,"tag":302,"props":1143,"children":1144},{},[1145],{"type":52,"value":1077},{"type":46,"tag":302,"props":1147,"children":1148},{},[1149,1151],{"type":52,"value":1150},"Dynamic import or ",{"type":46,"tag":313,"props":1152,"children":1154},{"className":1153},[],[1155],{"type":52,"value":1088},{"type":46,"tag":255,"props":1157,"children":1159},{"id":1158},"f-component-granularity",[1160],{"type":52,"value":1161},"F. Component Granularity",{"type":46,"tag":55,"props":1163,"children":1164},{},[1165,1169],{"type":46,"tag":61,"props":1166,"children":1167},{},[1168],{"type":52,"value":268},{"type":52,"value":1170},": Determine if component is at the right level of abstraction.",{"type":46,"tag":55,"props":1172,"children":1173},{},[1174],{"type":46,"tag":61,"props":1175,"children":1176},{},[1177],{"type":52,"value":1178},"Signs a component should be SPLIT:",{"type":46,"tag":84,"props":1180,"children":1181},{},[1182,1187,1192,1197],{"type":46,"tag":88,"props":1183,"children":1184},{},[1185],{"type":52,"value":1186},"Too many props (>10) making Designer UI cluttered",{"type":46,"tag":88,"props":1188,"children":1189},{},[1190],{"type":52,"value":1191},"Multiple distinct sections that could be independent",{"type":46,"tag":88,"props":1193,"children":1194},{},[1195],{"type":52,"value":1196},"Designers want to use parts separately",{"type":46,"tag":88,"props":1198,"children":1199},{},[1200],{"type":52,"value":1201},"Component handles multiple unrelated concerns",{"type":46,"tag":55,"props":1203,"children":1204},{},[1205],{"type":46,"tag":61,"props":1206,"children":1207},{},[1208],{"type":52,"value":1209},"Signs components should be COMBINED:",{"type":46,"tag":84,"props":1211,"children":1212},{},[1213,1218,1223],{"type":46,"tag":88,"props":1214,"children":1215},{},[1216],{"type":52,"value":1217},"Always used together",{"type":46,"tag":88,"props":1219,"children":1220},{},[1221],{"type":52,"value":1222},"Tightly coupled state that's awkward to sync",{"type":46,"tag":88,"props":1224,"children":1225},{},[1226],{"type":52,"value":1227},"Small components with no standalone use",{"type":46,"tag":196,"props":1229,"children":1231},{"id":1230},"phase-3-report",[1232],{"type":52,"value":1233},"Phase 3: Report",{"type":46,"tag":55,"props":1235,"children":1236},{},[1237],{"type":52,"value":1238},"Generate actionable report with:",{"type":46,"tag":156,"props":1240,"children":1241},{},[1242,1252,1262,1272],{"type":46,"tag":88,"props":1243,"children":1244},{},[1245,1250],{"type":46,"tag":61,"props":1246,"children":1247},{},[1248],{"type":52,"value":1249},"Summary",{"type":52,"value":1251},": Quick overview of findings",{"type":46,"tag":88,"props":1253,"children":1254},{},[1255,1260],{"type":46,"tag":61,"props":1256,"children":1257},{},[1258],{"type":52,"value":1259},"By Component",{"type":52,"value":1261},": Specific issues and recommendations for each",{"type":46,"tag":88,"props":1263,"children":1264},{},[1265,1270],{"type":46,"tag":61,"props":1266,"children":1267},{},[1268],{"type":52,"value":1269},"Architecture Recommendations",{"type":52,"value":1271},": Cross-cutting concerns",{"type":46,"tag":88,"props":1273,"children":1274},{},[1275,1280],{"type":46,"tag":61,"props":1276,"children":1277},{},[1278],{"type":52,"value":1279},"Priority Actions",{"type":52,"value":1281},": What to fix first",{"type":46,"tag":69,"props":1283,"children":1285},{"id":1284},"audit-checklist",[1286],{"type":52,"value":1287},"Audit Checklist",{"type":46,"tag":196,"props":1289,"children":1291},{"id":1290},"designer-control-most-important-for-webflow",[1292],{"type":52,"value":1293},"Designer Control (Most Important for Webflow)",{"type":46,"tag":272,"props":1295,"children":1296},{},[1297,1313],{"type":46,"tag":276,"props":1298,"children":1299},{},[1300],{"type":46,"tag":280,"props":1301,"children":1302},{},[1303,1308],{"type":46,"tag":284,"props":1304,"children":1305},{},[1306],{"type":52,"value":1307},"Check",{"type":46,"tag":284,"props":1309,"children":1310},{},[1311],{"type":52,"value":1312},"Question",{"type":46,"tag":295,"props":1314,"children":1315},{},[1316,1329,1342,1355,1368,1381],{"type":46,"tag":280,"props":1317,"children":1318},{},[1319,1324],{"type":46,"tag":302,"props":1320,"children":1321},{},[1322],{"type":52,"value":1323},"Prop completeness",{"type":46,"tag":302,"props":1325,"children":1326},{},[1327],{"type":52,"value":1328},"Can designers customize everything they'd want to?",{"type":46,"tag":280,"props":1330,"children":1331},{},[1332,1337],{"type":46,"tag":302,"props":1333,"children":1334},{},[1335],{"type":52,"value":1336},"Prop types",{"type":46,"tag":302,"props":1338,"children":1339},{},[1340],{"type":52,"value":1341},"Are the right Webflow prop types used?",{"type":46,"tag":280,"props":1343,"children":1344},{},[1345,1350],{"type":46,"tag":302,"props":1346,"children":1347},{},[1348],{"type":52,"value":1349},"Default values",{"type":46,"tag":302,"props":1351,"children":1352},{},[1353],{"type":52,"value":1354},"Do props have sensible defaults?",{"type":46,"tag":280,"props":1356,"children":1357},{},[1358,1363],{"type":46,"tag":302,"props":1359,"children":1360},{},[1361],{"type":52,"value":1362},"Prop naming",{"type":46,"tag":302,"props":1364,"children":1365},{},[1366],{"type":52,"value":1367},"Are names clear for non-developers?",{"type":46,"tag":280,"props":1369,"children":1370},{},[1371,1376],{"type":46,"tag":302,"props":1372,"children":1373},{},[1374],{"type":52,"value":1375},"Slot usage",{"type":46,"tag":302,"props":1377,"children":1378},{},[1379],{"type":52,"value":1380},"Is nested content handled via Slots?",{"type":46,"tag":280,"props":1382,"children":1383},{},[1384,1389],{"type":46,"tag":302,"props":1385,"children":1386},{},[1387],{"type":52,"value":1388},"Visibility props",{"type":46,"tag":302,"props":1390,"children":1391},{},[1392],{"type":52,"value":1393},"Can sections be shown\u002Fhidden?",{"type":46,"tag":196,"props":1395,"children":1397},{"id":1396},"webflow-compatibility",[1398],{"type":52,"value":176},{"type":46,"tag":272,"props":1400,"children":1401},{},[1402,1416],{"type":46,"tag":276,"props":1403,"children":1404},{},[1405],{"type":46,"tag":280,"props":1406,"children":1407},{},[1408,1412],{"type":46,"tag":284,"props":1409,"children":1410},{},[1411],{"type":52,"value":1307},{"type":46,"tag":284,"props":1413,"children":1414},{},[1415],{"type":52,"value":1312},{"type":46,"tag":295,"props":1417,"children":1418},{},[1419,1432,1445,1458],{"type":46,"tag":280,"props":1420,"children":1421},{},[1422,1427],{"type":46,"tag":302,"props":1423,"children":1424},{},[1425],{"type":52,"value":1426},"SSR safe",{"type":46,"tag":302,"props":1428,"children":1429},{},[1430],{"type":52,"value":1431},"Does component render without browser APIs?",{"type":46,"tag":280,"props":1433,"children":1434},{},[1435,1440],{"type":46,"tag":302,"props":1436,"children":1437},{},[1438],{"type":52,"value":1439},"Style isolation",{"type":46,"tag":302,"props":1441,"children":1442},{},[1443],{"type":52,"value":1444},"Do styles work in Shadow DOM?",{"type":46,"tag":280,"props":1446,"children":1447},{},[1448,1453],{"type":46,"tag":302,"props":1449,"children":1450},{},[1451],{"type":52,"value":1452},"State independence",{"type":46,"tag":302,"props":1454,"children":1455},{},[1456],{"type":52,"value":1457},"Does component work without Context from parent?",{"type":46,"tag":280,"props":1459,"children":1460},{},[1461,1466],{"type":46,"tag":302,"props":1462,"children":1463},{},[1464],{"type":52,"value":1465},"No function props",{"type":46,"tag":302,"props":1467,"children":1468},{},[1469],{"type":52,"value":1470},"Are there callback props that won't work?",{"type":46,"tag":196,"props":1472,"children":1473},{"id":19},[1474],{"type":52,"value":18},{"type":46,"tag":272,"props":1476,"children":1477},{},[1478,1492],{"type":46,"tag":276,"props":1479,"children":1480},{},[1481],{"type":46,"tag":280,"props":1482,"children":1483},{},[1484,1488],{"type":46,"tag":284,"props":1485,"children":1486},{},[1487],{"type":52,"value":1307},{"type":46,"tag":284,"props":1489,"children":1490},{},[1491],{"type":52,"value":1312},{"type":46,"tag":295,"props":1493,"children":1494},{},[1495,1508,1521],{"type":46,"tag":280,"props":1496,"children":1497},{},[1498,1503],{"type":46,"tag":302,"props":1499,"children":1500},{},[1501],{"type":52,"value":1502},"Single responsibility",{"type":46,"tag":302,"props":1504,"children":1505},{},[1506],{"type":52,"value":1507},"Does component do one thing well?",{"type":46,"tag":280,"props":1509,"children":1510},{},[1511,1516],{"type":46,"tag":302,"props":1512,"children":1513},{},[1514],{"type":52,"value":1515},"Right granularity",{"type":46,"tag":302,"props":1517,"children":1518},{},[1519],{"type":52,"value":1520},"Is this the right size for Designer use?",{"type":46,"tag":280,"props":1522,"children":1523},{},[1524,1529],{"type":46,"tag":302,"props":1525,"children":1526},{},[1527],{"type":52,"value":1528},"Cross-component state",{"type":46,"tag":302,"props":1530,"children":1531},{},[1532],{"type":52,"value":1533},"If needed, is it implemented correctly?",{"type":46,"tag":69,"props":1535,"children":1537},{"id":1536},"example",[1538],{"type":52,"value":1539},"Example",{"type":46,"tag":55,"props":1541,"children":1542},{},[1543],{"type":46,"tag":61,"props":1544,"children":1545},{},[1546],{"type":52,"value":1547},"User prompt:",{"type":46,"tag":1549,"props":1550,"children":1554},"pre",{"className":1551,"code":1553,"language":52},[1552],"language-text","Audit my ProductCard component\n",[1555],{"type":46,"tag":313,"props":1556,"children":1558},{"__ignoreMap":1557},"",[1559],{"type":52,"value":1553},{"type":46,"tag":55,"props":1561,"children":1562},{},[1563],{"type":46,"tag":61,"props":1564,"children":1565},{},[1566],{"type":52,"value":1567},"Response:",{"type":46,"tag":1549,"props":1569,"children":1573},{"className":1570,"code":1571,"language":1572,"meta":1557,"style":1557},"language-markdown shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","## Audit: ProductCard\n\n### Component Overview\n\n```typescript\n\u002F\u002F Current props\nprops: {\n  title: props.Text(),\n  price: props.Number(),\n  imageUrl: props.Text()  \u002F\u002F ⚠️ Should be Image\n}\n","markdown",[1574],{"type":46,"tag":313,"props":1575,"children":1576},{"__ignoreMap":1557},[1577,1595,1605,1619,1627,1643,1653,1671,1712,1746,1781],{"type":46,"tag":1578,"props":1579,"children":1582},"span",{"class":1580,"line":1581},"line",1,[1583,1589],{"type":46,"tag":1578,"props":1584,"children":1586},{"style":1585},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[1587],{"type":52,"value":1588},"## ",{"type":46,"tag":1578,"props":1590,"children":1592},{"style":1591},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[1593],{"type":52,"value":1594},"Audit: ProductCard\n",{"type":46,"tag":1578,"props":1596,"children":1598},{"class":1580,"line":1597},2,[1599],{"type":46,"tag":1578,"props":1600,"children":1602},{"emptyLinePlaceholder":1601},true,[1603],{"type":52,"value":1604},"\n",{"type":46,"tag":1578,"props":1606,"children":1608},{"class":1580,"line":1607},3,[1609,1614],{"type":46,"tag":1578,"props":1610,"children":1611},{"style":1585},[1612],{"type":52,"value":1613},"### ",{"type":46,"tag":1578,"props":1615,"children":1616},{"style":1591},[1617],{"type":52,"value":1618},"Component Overview\n",{"type":46,"tag":1578,"props":1620,"children":1622},{"class":1580,"line":1621},4,[1623],{"type":46,"tag":1578,"props":1624,"children":1625},{"emptyLinePlaceholder":1601},[1626],{"type":52,"value":1604},{"type":46,"tag":1578,"props":1628,"children":1630},{"class":1580,"line":1629},5,[1631,1637],{"type":46,"tag":1578,"props":1632,"children":1634},{"style":1633},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[1635],{"type":52,"value":1636},"```",{"type":46,"tag":1578,"props":1638,"children":1640},{"style":1639},"--shiki-light:#90A4AE90;--shiki-default:#EEFFFF90;--shiki-dark:#BABED890",[1641],{"type":52,"value":1642},"typescript\n",{"type":46,"tag":1578,"props":1644,"children":1646},{"class":1580,"line":1645},6,[1647],{"type":46,"tag":1578,"props":1648,"children":1650},{"style":1649},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[1651],{"type":52,"value":1652},"\u002F\u002F Current props\n",{"type":46,"tag":1578,"props":1654,"children":1656},{"class":1580,"line":1655},7,[1657,1662,1666],{"type":46,"tag":1578,"props":1658,"children":1659},{"style":1591},[1660],{"type":52,"value":1661},"props",{"type":46,"tag":1578,"props":1663,"children":1664},{"style":1585},[1665],{"type":52,"value":214},{"type":46,"tag":1578,"props":1667,"children":1668},{"style":1585},[1669],{"type":52,"value":1670}," {\n",{"type":46,"tag":1578,"props":1672,"children":1674},{"class":1580,"line":1673},8,[1675,1680,1684,1690,1695,1701,1707],{"type":46,"tag":1578,"props":1676,"children":1677},{"style":1591},[1678],{"type":52,"value":1679},"  title",{"type":46,"tag":1578,"props":1681,"children":1682},{"style":1585},[1683],{"type":52,"value":214},{"type":46,"tag":1578,"props":1685,"children":1687},{"style":1686},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[1688],{"type":52,"value":1689}," props",{"type":46,"tag":1578,"props":1691,"children":1692},{"style":1585},[1693],{"type":52,"value":1694},".",{"type":46,"tag":1578,"props":1696,"children":1698},{"style":1697},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[1699],{"type":52,"value":1700},"Text",{"type":46,"tag":1578,"props":1702,"children":1704},{"style":1703},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[1705],{"type":52,"value":1706},"()",{"type":46,"tag":1578,"props":1708,"children":1709},{"style":1585},[1710],{"type":52,"value":1711},",\n",{"type":46,"tag":1578,"props":1713,"children":1715},{"class":1580,"line":1714},9,[1716,1721,1725,1729,1733,1738,1742],{"type":46,"tag":1578,"props":1717,"children":1718},{"style":1591},[1719],{"type":52,"value":1720},"  price",{"type":46,"tag":1578,"props":1722,"children":1723},{"style":1585},[1724],{"type":52,"value":214},{"type":46,"tag":1578,"props":1726,"children":1727},{"style":1686},[1728],{"type":52,"value":1689},{"type":46,"tag":1578,"props":1730,"children":1731},{"style":1585},[1732],{"type":52,"value":1694},{"type":46,"tag":1578,"props":1734,"children":1735},{"style":1697},[1736],{"type":52,"value":1737},"Number",{"type":46,"tag":1578,"props":1739,"children":1740},{"style":1703},[1741],{"type":52,"value":1706},{"type":46,"tag":1578,"props":1743,"children":1744},{"style":1585},[1745],{"type":52,"value":1711},{"type":46,"tag":1578,"props":1747,"children":1749},{"class":1580,"line":1748},10,[1750,1755,1759,1763,1767,1771,1776],{"type":46,"tag":1578,"props":1751,"children":1752},{"style":1591},[1753],{"type":52,"value":1754},"  imageUrl",{"type":46,"tag":1578,"props":1756,"children":1757},{"style":1585},[1758],{"type":52,"value":214},{"type":46,"tag":1578,"props":1760,"children":1761},{"style":1686},[1762],{"type":52,"value":1689},{"type":46,"tag":1578,"props":1764,"children":1765},{"style":1585},[1766],{"type":52,"value":1694},{"type":46,"tag":1578,"props":1768,"children":1769},{"style":1697},[1770],{"type":52,"value":1700},{"type":46,"tag":1578,"props":1772,"children":1773},{"style":1703},[1774],{"type":52,"value":1775},"()  ",{"type":46,"tag":1578,"props":1777,"children":1778},{"style":1649},[1779],{"type":52,"value":1780},"\u002F\u002F ⚠️ Should be Image\n",{"type":46,"tag":1578,"props":1782,"children":1784},{"class":1580,"line":1783},11,[1785],{"type":46,"tag":1578,"props":1786,"children":1787},{"style":1585},[1788],{"type":52,"value":1789},"}\n",{"type":46,"tag":1791,"props":1792,"children":1793},"hr",{},[],{"type":46,"tag":196,"props":1795,"children":1797},{"id":1796},"a-prop-exposure-analysis-1",[1798],{"type":52,"value":260},{"type":46,"tag":272,"props":1800,"children":1801},{},[1802,1822],{"type":46,"tag":276,"props":1803,"children":1804},{},[1805],{"type":46,"tag":280,"props":1806,"children":1807},{},[1808,1813,1818],{"type":46,"tag":284,"props":1809,"children":1810},{},[1811],{"type":52,"value":1812},"Finding",{"type":46,"tag":284,"props":1814,"children":1815},{},[1816],{"type":52,"value":1817},"Severity",{"type":46,"tag":284,"props":1819,"children":1820},{},[1821],{"type":52,"value":293},{"type":46,"tag":295,"props":1823,"children":1824},{},[1825,1856,1880,1903],{"type":46,"tag":280,"props":1826,"children":1827},{},[1828,1839,1844],{"type":46,"tag":302,"props":1829,"children":1830},{},[1831,1837],{"type":46,"tag":313,"props":1832,"children":1834},{"className":1833},[],[1835],{"type":52,"value":1836},"imageUrl",{"type":52,"value":1838}," is Text, not Image",{"type":46,"tag":302,"props":1840,"children":1841},{},[1842],{"type":52,"value":1843},"Warning",{"type":46,"tag":302,"props":1845,"children":1846},{},[1847,1849,1854],{"type":52,"value":1848},"Change to ",{"type":46,"tag":313,"props":1850,"children":1852},{"className":1851},[],[1853],{"type":52,"value":372},{"type":52,"value":1855}," for proper asset handling",{"type":46,"tag":280,"props":1857,"children":1858},{},[1859,1864,1869],{"type":46,"tag":302,"props":1860,"children":1861},{},[1862],{"type":52,"value":1863},"\"Add to Cart\" button text is hardcoded",{"type":46,"tag":302,"props":1865,"children":1866},{},[1867],{"type":52,"value":1868},"Suggestion",{"type":46,"tag":302,"props":1870,"children":1871},{},[1872,1874],{"type":52,"value":1873},"Expose as prop: ",{"type":46,"tag":313,"props":1875,"children":1877},{"className":1876},[],[1878],{"type":52,"value":1879},"addToCartText: props.Text()",{"type":46,"tag":280,"props":1881,"children":1882},{},[1883,1888,1892],{"type":46,"tag":302,"props":1884,"children":1885},{},[1886],{"type":52,"value":1887},"Sale badge is conditionally rendered but not controllable",{"type":46,"tag":302,"props":1889,"children":1890},{},[1891],{"type":52,"value":1868},{"type":46,"tag":302,"props":1893,"children":1894},{},[1895,1897],{"type":52,"value":1896},"Add ",{"type":46,"tag":313,"props":1898,"children":1900},{"className":1899},[],[1901],{"type":52,"value":1902},"showSaleBadge: props.Boolean()",{"type":46,"tag":280,"props":1904,"children":1905},{},[1906,1911,1915],{"type":46,"tag":302,"props":1907,"children":1908},{},[1909],{"type":52,"value":1910},"Badge color is hardcoded red",{"type":46,"tag":302,"props":1912,"children":1913},{},[1914],{"type":52,"value":1868},{"type":46,"tag":302,"props":1916,"children":1917},{},[1918,1919],{"type":52,"value":1896},{"type":46,"tag":313,"props":1920,"children":1922},{"className":1921},[],[1923],{"type":52,"value":1924},"badgeVariant: props.Variant({ options: [\"sale\", \"new\", \"featured\"] })",{"type":46,"tag":55,"props":1926,"children":1927},{},[1928],{"type":46,"tag":61,"props":1929,"children":1930},{},[1931],{"type":52,"value":1932},"Hardcoded Content Found:",{"type":46,"tag":1549,"props":1934,"children":1938},{"className":1935,"code":1936,"language":1937,"meta":1557,"style":1557},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F Line 24 - hardcoded, should be prop\n\u003Cbutton>Add to Cart\u003C\u002Fbutton>\n\n\u002F\u002F Line 18 - hardcoded, should be prop or removed\n{onSale && \u003Cspan className=\"badge\">SALE\u003C\u002Fspan>}\n","typescript",[1939],{"type":46,"tag":313,"props":1940,"children":1941},{"__ignoreMap":1557},[1942,1950,1982,1989,1997],{"type":46,"tag":1578,"props":1943,"children":1944},{"class":1580,"line":1581},[1945],{"type":46,"tag":1578,"props":1946,"children":1947},{"style":1649},[1948],{"type":52,"value":1949},"\u002F\u002F Line 24 - hardcoded, should be prop\n",{"type":46,"tag":1578,"props":1951,"children":1952},{"class":1580,"line":1597},[1953,1958,1963,1968,1973,1977],{"type":46,"tag":1578,"props":1954,"children":1955},{"style":1686},[1956],{"type":52,"value":1957},"\u003C",{"type":46,"tag":1578,"props":1959,"children":1960},{"style":1591},[1961],{"type":52,"value":1962},"button",{"type":46,"tag":1578,"props":1964,"children":1965},{"style":1686},[1966],{"type":52,"value":1967},">Add to Cart",{"type":46,"tag":1578,"props":1969,"children":1970},{"style":1585},[1971],{"type":52,"value":1972},"\u003C\u002F",{"type":46,"tag":1578,"props":1974,"children":1975},{"style":1686},[1976],{"type":52,"value":1962},{"type":46,"tag":1578,"props":1978,"children":1979},{"style":1585},[1980],{"type":52,"value":1981},">\n",{"type":46,"tag":1578,"props":1983,"children":1984},{"class":1580,"line":1607},[1985],{"type":46,"tag":1578,"props":1986,"children":1987},{"emptyLinePlaceholder":1601},[1988],{"type":52,"value":1604},{"type":46,"tag":1578,"props":1990,"children":1991},{"class":1580,"line":1621},[1992],{"type":46,"tag":1578,"props":1993,"children":1994},{"style":1649},[1995],{"type":52,"value":1996},"\u002F\u002F Line 18 - hardcoded, should be prop or removed\n",{"type":46,"tag":1578,"props":1998,"children":1999},{"class":1580,"line":1629},[2000,2005,2010,2015,2020,2024,2029,2034,2039,2044,2048,2053,2058,2062,2066],{"type":46,"tag":1578,"props":2001,"children":2002},{"style":1585},[2003],{"type":52,"value":2004},"{",{"type":46,"tag":1578,"props":2006,"children":2007},{"style":1686},[2008],{"type":52,"value":2009},"onSale",{"type":46,"tag":1578,"props":2011,"children":2012},{"style":1585},[2013],{"type":52,"value":2014}," &&",{"type":46,"tag":1578,"props":2016,"children":2017},{"style":1703},[2018],{"type":52,"value":2019}," \u003C",{"type":46,"tag":1578,"props":2021,"children":2022},{"style":1591},[2023],{"type":52,"value":1578},{"type":46,"tag":1578,"props":2025,"children":2026},{"style":1591},[2027],{"type":52,"value":2028}," className",{"type":46,"tag":1578,"props":2030,"children":2031},{"style":1703},[2032],{"type":52,"value":2033},"=",{"type":46,"tag":1578,"props":2035,"children":2036},{"style":1585},[2037],{"type":52,"value":2038},"\"",{"type":46,"tag":1578,"props":2040,"children":2041},{"style":1633},[2042],{"type":52,"value":2043},"badge",{"type":46,"tag":1578,"props":2045,"children":2046},{"style":1585},[2047],{"type":52,"value":2038},{"type":46,"tag":1578,"props":2049,"children":2050},{"style":1703},[2051],{"type":52,"value":2052},">",{"type":46,"tag":1578,"props":2054,"children":2055},{"style":1686},[2056],{"type":52,"value":2057},"SALE",{"type":46,"tag":1578,"props":2059,"children":2060},{"style":1585},[2061],{"type":52,"value":1972},{"type":46,"tag":1578,"props":2063,"children":2064},{"style":1686},[2065],{"type":52,"value":1578},{"type":46,"tag":1578,"props":2067,"children":2068},{"style":1585},[2069],{"type":52,"value":2070},">}\n",{"type":46,"tag":55,"props":2072,"children":2073},{},[2074],{"type":46,"tag":61,"props":2075,"children":2076},{},[2077],{"type":52,"value":2078},"Recommended Props to Add:",{"type":46,"tag":1549,"props":2080,"children":2082},{"className":1935,"code":2081,"language":1937,"meta":1557,"style":1557},"props: {\n  \u002F\u002F ...existing\n  addToCartLabel: props.Text({\n    name: \"Button Label\",\n    defaultValue: \"Add to Cart\"\n  }),\n  showBadge: props.Boolean({\n    name: \"Show Badge\",\n    defaultValue: false\n  }),\n  badgeType: props.Variant({\n    name: \"Badge Type\",\n    options: [\"sale\", \"new\", \"featured\"],\n    defaultValue: \"sale\"\n  })\n}\n",[2083],{"type":46,"tag":313,"props":2084,"children":2085},{"__ignoreMap":1557},[2086,2101,2109,2143,2173,2199,2216,2249,2277,2294,2309,2342,2371,2446,2470,2483],{"type":46,"tag":1578,"props":2087,"children":2088},{"class":1580,"line":1581},[2089,2093,2097],{"type":46,"tag":1578,"props":2090,"children":2091},{"style":1591},[2092],{"type":52,"value":1661},{"type":46,"tag":1578,"props":2094,"children":2095},{"style":1585},[2096],{"type":52,"value":214},{"type":46,"tag":1578,"props":2098,"children":2099},{"style":1585},[2100],{"type":52,"value":1670},{"type":46,"tag":1578,"props":2102,"children":2103},{"class":1580,"line":1597},[2104],{"type":46,"tag":1578,"props":2105,"children":2106},{"style":1649},[2107],{"type":52,"value":2108},"  \u002F\u002F ...existing\n",{"type":46,"tag":1578,"props":2110,"children":2111},{"class":1580,"line":1607},[2112,2117,2121,2125,2129,2133,2138],{"type":46,"tag":1578,"props":2113,"children":2114},{"style":1591},[2115],{"type":52,"value":2116},"  addToCartLabel",{"type":46,"tag":1578,"props":2118,"children":2119},{"style":1585},[2120],{"type":52,"value":214},{"type":46,"tag":1578,"props":2122,"children":2123},{"style":1686},[2124],{"type":52,"value":1689},{"type":46,"tag":1578,"props":2126,"children":2127},{"style":1585},[2128],{"type":52,"value":1694},{"type":46,"tag":1578,"props":2130,"children":2131},{"style":1697},[2132],{"type":52,"value":1700},{"type":46,"tag":1578,"props":2134,"children":2135},{"style":1703},[2136],{"type":52,"value":2137},"(",{"type":46,"tag":1578,"props":2139,"children":2140},{"style":1585},[2141],{"type":52,"value":2142},"{\n",{"type":46,"tag":1578,"props":2144,"children":2145},{"class":1580,"line":1621},[2146,2151,2155,2160,2165,2169],{"type":46,"tag":1578,"props":2147,"children":2148},{"style":1703},[2149],{"type":52,"value":2150},"    name",{"type":46,"tag":1578,"props":2152,"children":2153},{"style":1585},[2154],{"type":52,"value":214},{"type":46,"tag":1578,"props":2156,"children":2157},{"style":1585},[2158],{"type":52,"value":2159}," \"",{"type":46,"tag":1578,"props":2161,"children":2162},{"style":1633},[2163],{"type":52,"value":2164},"Button Label",{"type":46,"tag":1578,"props":2166,"children":2167},{"style":1585},[2168],{"type":52,"value":2038},{"type":46,"tag":1578,"props":2170,"children":2171},{"style":1585},[2172],{"type":52,"value":1711},{"type":46,"tag":1578,"props":2174,"children":2175},{"class":1580,"line":1629},[2176,2181,2185,2189,2194],{"type":46,"tag":1578,"props":2177,"children":2178},{"style":1703},[2179],{"type":52,"value":2180},"    defaultValue",{"type":46,"tag":1578,"props":2182,"children":2183},{"style":1585},[2184],{"type":52,"value":214},{"type":46,"tag":1578,"props":2186,"children":2187},{"style":1585},[2188],{"type":52,"value":2159},{"type":46,"tag":1578,"props":2190,"children":2191},{"style":1633},[2192],{"type":52,"value":2193},"Add to Cart",{"type":46,"tag":1578,"props":2195,"children":2196},{"style":1585},[2197],{"type":52,"value":2198},"\"\n",{"type":46,"tag":1578,"props":2200,"children":2201},{"class":1580,"line":1645},[2202,2207,2212],{"type":46,"tag":1578,"props":2203,"children":2204},{"style":1585},[2205],{"type":52,"value":2206},"  }",{"type":46,"tag":1578,"props":2208,"children":2209},{"style":1703},[2210],{"type":52,"value":2211},")",{"type":46,"tag":1578,"props":2213,"children":2214},{"style":1585},[2215],{"type":52,"value":1711},{"type":46,"tag":1578,"props":2217,"children":2218},{"class":1580,"line":1655},[2219,2224,2228,2232,2236,2241,2245],{"type":46,"tag":1578,"props":2220,"children":2221},{"style":1591},[2222],{"type":52,"value":2223},"  showBadge",{"type":46,"tag":1578,"props":2225,"children":2226},{"style":1585},[2227],{"type":52,"value":214},{"type":46,"tag":1578,"props":2229,"children":2230},{"style":1686},[2231],{"type":52,"value":1689},{"type":46,"tag":1578,"props":2233,"children":2234},{"style":1585},[2235],{"type":52,"value":1694},{"type":46,"tag":1578,"props":2237,"children":2238},{"style":1697},[2239],{"type":52,"value":2240},"Boolean",{"type":46,"tag":1578,"props":2242,"children":2243},{"style":1703},[2244],{"type":52,"value":2137},{"type":46,"tag":1578,"props":2246,"children":2247},{"style":1585},[2248],{"type":52,"value":2142},{"type":46,"tag":1578,"props":2250,"children":2251},{"class":1580,"line":1673},[2252,2256,2260,2264,2269,2273],{"type":46,"tag":1578,"props":2253,"children":2254},{"style":1703},[2255],{"type":52,"value":2150},{"type":46,"tag":1578,"props":2257,"children":2258},{"style":1585},[2259],{"type":52,"value":214},{"type":46,"tag":1578,"props":2261,"children":2262},{"style":1585},[2263],{"type":52,"value":2159},{"type":46,"tag":1578,"props":2265,"children":2266},{"style":1633},[2267],{"type":52,"value":2268},"Show Badge",{"type":46,"tag":1578,"props":2270,"children":2271},{"style":1585},[2272],{"type":52,"value":2038},{"type":46,"tag":1578,"props":2274,"children":2275},{"style":1585},[2276],{"type":52,"value":1711},{"type":46,"tag":1578,"props":2278,"children":2279},{"class":1580,"line":1714},[2280,2284,2288],{"type":46,"tag":1578,"props":2281,"children":2282},{"style":1703},[2283],{"type":52,"value":2180},{"type":46,"tag":1578,"props":2285,"children":2286},{"style":1585},[2287],{"type":52,"value":214},{"type":46,"tag":1578,"props":2289,"children":2291},{"style":2290},"--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC",[2292],{"type":52,"value":2293}," false\n",{"type":46,"tag":1578,"props":2295,"children":2296},{"class":1580,"line":1748},[2297,2301,2305],{"type":46,"tag":1578,"props":2298,"children":2299},{"style":1585},[2300],{"type":52,"value":2206},{"type":46,"tag":1578,"props":2302,"children":2303},{"style":1703},[2304],{"type":52,"value":2211},{"type":46,"tag":1578,"props":2306,"children":2307},{"style":1585},[2308],{"type":52,"value":1711},{"type":46,"tag":1578,"props":2310,"children":2311},{"class":1580,"line":1783},[2312,2317,2321,2325,2329,2334,2338],{"type":46,"tag":1578,"props":2313,"children":2314},{"style":1591},[2315],{"type":52,"value":2316},"  badgeType",{"type":46,"tag":1578,"props":2318,"children":2319},{"style":1585},[2320],{"type":52,"value":214},{"type":46,"tag":1578,"props":2322,"children":2323},{"style":1686},[2324],{"type":52,"value":1689},{"type":46,"tag":1578,"props":2326,"children":2327},{"style":1585},[2328],{"type":52,"value":1694},{"type":46,"tag":1578,"props":2330,"children":2331},{"style":1697},[2332],{"type":52,"value":2333},"Variant",{"type":46,"tag":1578,"props":2335,"children":2336},{"style":1703},[2337],{"type":52,"value":2137},{"type":46,"tag":1578,"props":2339,"children":2340},{"style":1585},[2341],{"type":52,"value":2142},{"type":46,"tag":1578,"props":2343,"children":2345},{"class":1580,"line":2344},12,[2346,2350,2354,2358,2363,2367],{"type":46,"tag":1578,"props":2347,"children":2348},{"style":1703},[2349],{"type":52,"value":2150},{"type":46,"tag":1578,"props":2351,"children":2352},{"style":1585},[2353],{"type":52,"value":214},{"type":46,"tag":1578,"props":2355,"children":2356},{"style":1585},[2357],{"type":52,"value":2159},{"type":46,"tag":1578,"props":2359,"children":2360},{"style":1633},[2361],{"type":52,"value":2362},"Badge Type",{"type":46,"tag":1578,"props":2364,"children":2365},{"style":1585},[2366],{"type":52,"value":2038},{"type":46,"tag":1578,"props":2368,"children":2369},{"style":1585},[2370],{"type":52,"value":1711},{"type":46,"tag":1578,"props":2372,"children":2374},{"class":1580,"line":2373},13,[2375,2380,2384,2389,2393,2398,2402,2407,2411,2416,2420,2424,2428,2433,2437,2442],{"type":46,"tag":1578,"props":2376,"children":2377},{"style":1703},[2378],{"type":52,"value":2379},"    options",{"type":46,"tag":1578,"props":2381,"children":2382},{"style":1585},[2383],{"type":52,"value":214},{"type":46,"tag":1578,"props":2385,"children":2386},{"style":1703},[2387],{"type":52,"value":2388}," [",{"type":46,"tag":1578,"props":2390,"children":2391},{"style":1585},[2392],{"type":52,"value":2038},{"type":46,"tag":1578,"props":2394,"children":2395},{"style":1633},[2396],{"type":52,"value":2397},"sale",{"type":46,"tag":1578,"props":2399,"children":2400},{"style":1585},[2401],{"type":52,"value":2038},{"type":46,"tag":1578,"props":2403,"children":2404},{"style":1585},[2405],{"type":52,"value":2406},",",{"type":46,"tag":1578,"props":2408,"children":2409},{"style":1585},[2410],{"type":52,"value":2159},{"type":46,"tag":1578,"props":2412,"children":2413},{"style":1633},[2414],{"type":52,"value":2415},"new",{"type":46,"tag":1578,"props":2417,"children":2418},{"style":1585},[2419],{"type":52,"value":2038},{"type":46,"tag":1578,"props":2421,"children":2422},{"style":1585},[2423],{"type":52,"value":2406},{"type":46,"tag":1578,"props":2425,"children":2426},{"style":1585},[2427],{"type":52,"value":2159},{"type":46,"tag":1578,"props":2429,"children":2430},{"style":1633},[2431],{"type":52,"value":2432},"featured",{"type":46,"tag":1578,"props":2434,"children":2435},{"style":1585},[2436],{"type":52,"value":2038},{"type":46,"tag":1578,"props":2438,"children":2439},{"style":1703},[2440],{"type":52,"value":2441},"]",{"type":46,"tag":1578,"props":2443,"children":2444},{"style":1585},[2445],{"type":52,"value":1711},{"type":46,"tag":1578,"props":2447,"children":2449},{"class":1580,"line":2448},14,[2450,2454,2458,2462,2466],{"type":46,"tag":1578,"props":2451,"children":2452},{"style":1703},[2453],{"type":52,"value":2180},{"type":46,"tag":1578,"props":2455,"children":2456},{"style":1585},[2457],{"type":52,"value":214},{"type":46,"tag":1578,"props":2459,"children":2460},{"style":1585},[2461],{"type":52,"value":2159},{"type":46,"tag":1578,"props":2463,"children":2464},{"style":1633},[2465],{"type":52,"value":2397},{"type":46,"tag":1578,"props":2467,"children":2468},{"style":1585},[2469],{"type":52,"value":2198},{"type":46,"tag":1578,"props":2471,"children":2473},{"class":1580,"line":2472},15,[2474,2478],{"type":46,"tag":1578,"props":2475,"children":2476},{"style":1585},[2477],{"type":52,"value":2206},{"type":46,"tag":1578,"props":2479,"children":2480},{"style":1703},[2481],{"type":52,"value":2482},")\n",{"type":46,"tag":1578,"props":2484,"children":2486},{"class":1580,"line":2485},16,[2487],{"type":46,"tag":1578,"props":2488,"children":2489},{"style":1585},[2490],{"type":52,"value":1789},{"type":46,"tag":1791,"props":2492,"children":2493},{},[],{"type":46,"tag":196,"props":2495,"children":2497},{"id":2496},"b-state-management",[2498],{"type":52,"value":2499},"B. State Management",{"type":46,"tag":272,"props":2501,"children":2502},{},[2503,2517],{"type":46,"tag":276,"props":2504,"children":2505},{},[2506],{"type":46,"tag":280,"props":2507,"children":2508},{},[2509,2513],{"type":46,"tag":284,"props":2510,"children":2511},{},[2512],{"type":52,"value":1812},{"type":46,"tag":284,"props":2514,"children":2515},{},[2516],{"type":52,"value":1817},{"type":46,"tag":295,"props":2518,"children":2519},{},[2520,2540],{"type":46,"tag":280,"props":2521,"children":2522},{},[2523,2536],{"type":46,"tag":302,"props":2524,"children":2525},{},[2526,2528,2534],{"type":52,"value":2527},"Uses ",{"type":46,"tag":313,"props":2529,"children":2531},{"className":2530},[],[2532],{"type":52,"value":2533},"localStorage",{"type":52,"value":2535}," for cart count",{"type":46,"tag":302,"props":2537,"children":2538},{},[2539],{"type":52,"value":1843},{"type":46,"tag":280,"props":2541,"children":2542},{},[2543,2548],{"type":46,"tag":302,"props":2544,"children":2545},{},[2546],{"type":52,"value":2547},"No React Context dependencies",{"type":46,"tag":302,"props":2549,"children":2550},{},[2551],{"type":52,"value":2552},"OK",{"type":46,"tag":55,"props":2554,"children":2555},{},[2556],{"type":46,"tag":61,"props":2557,"children":2558},{},[2559],{"type":52,"value":2560},"Issue: localStorage in render",{"type":46,"tag":1549,"props":2562,"children":2564},{"className":1935,"code":2563,"language":1937,"meta":1557,"style":1557},"\u002F\u002F Line 8 - will break SSR\nconst cartCount = localStorage.getItem('cart');\n",[2565],{"type":46,"tag":313,"props":2566,"children":2567},{"__ignoreMap":1557},[2568,2576],{"type":46,"tag":1578,"props":2569,"children":2570},{"class":1580,"line":1581},[2571],{"type":46,"tag":1578,"props":2572,"children":2573},{"style":1649},[2574],{"type":52,"value":2575},"\u002F\u002F Line 8 - will break SSR\n",{"type":46,"tag":1578,"props":2577,"children":2578},{"class":1580,"line":1597},[2579,2585,2590,2594,2599,2603,2608,2612,2617,2622,2626,2630],{"type":46,"tag":1578,"props":2580,"children":2582},{"style":2581},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[2583],{"type":52,"value":2584},"const",{"type":46,"tag":1578,"props":2586,"children":2587},{"style":1686},[2588],{"type":52,"value":2589}," cartCount ",{"type":46,"tag":1578,"props":2591,"children":2592},{"style":1585},[2593],{"type":52,"value":2033},{"type":46,"tag":1578,"props":2595,"children":2596},{"style":1686},[2597],{"type":52,"value":2598}," localStorage",{"type":46,"tag":1578,"props":2600,"children":2601},{"style":1585},[2602],{"type":52,"value":1694},{"type":46,"tag":1578,"props":2604,"children":2605},{"style":1697},[2606],{"type":52,"value":2607},"getItem",{"type":46,"tag":1578,"props":2609,"children":2610},{"style":1686},[2611],{"type":52,"value":2137},{"type":46,"tag":1578,"props":2613,"children":2614},{"style":1585},[2615],{"type":52,"value":2616},"'",{"type":46,"tag":1578,"props":2618,"children":2619},{"style":1633},[2620],{"type":52,"value":2621},"cart",{"type":46,"tag":1578,"props":2623,"children":2624},{"style":1585},[2625],{"type":52,"value":2616},{"type":46,"tag":1578,"props":2627,"children":2628},{"style":1686},[2629],{"type":52,"value":2211},{"type":46,"tag":1578,"props":2631,"children":2632},{"style":1585},[2633],{"type":52,"value":2634},";\n",{"type":46,"tag":55,"props":2636,"children":2637},{},[2638],{"type":46,"tag":61,"props":2639,"children":2640},{},[2641],{"type":52,"value":2642},"Fix:",{"type":46,"tag":1549,"props":2644,"children":2646},{"className":1935,"code":2645,"language":1937,"meta":1557,"style":1557},"const [cartCount, setCartCount] = useState(0);\nuseEffect(() => {\n  setCartCount(parseInt(localStorage.getItem('cart') || '0'));\n}, []);\n",[2647],{"type":46,"tag":313,"props":2648,"children":2649},{"__ignoreMap":1557},[2650,2707,2732,2813],{"type":46,"tag":1578,"props":2651,"children":2652},{"class":1580,"line":1581},[2653,2657,2661,2666,2670,2675,2679,2684,2689,2693,2699,2703],{"type":46,"tag":1578,"props":2654,"children":2655},{"style":2581},[2656],{"type":52,"value":2584},{"type":46,"tag":1578,"props":2658,"children":2659},{"style":1585},[2660],{"type":52,"value":2388},{"type":46,"tag":1578,"props":2662,"children":2663},{"style":1686},[2664],{"type":52,"value":2665},"cartCount",{"type":46,"tag":1578,"props":2667,"children":2668},{"style":1585},[2669],{"type":52,"value":2406},{"type":46,"tag":1578,"props":2671,"children":2672},{"style":1686},[2673],{"type":52,"value":2674}," setCartCount",{"type":46,"tag":1578,"props":2676,"children":2677},{"style":1585},[2678],{"type":52,"value":2441},{"type":46,"tag":1578,"props":2680,"children":2681},{"style":1585},[2682],{"type":52,"value":2683}," =",{"type":46,"tag":1578,"props":2685,"children":2686},{"style":1697},[2687],{"type":52,"value":2688}," useState",{"type":46,"tag":1578,"props":2690,"children":2691},{"style":1686},[2692],{"type":52,"value":2137},{"type":46,"tag":1578,"props":2694,"children":2696},{"style":2695},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[2697],{"type":52,"value":2698},"0",{"type":46,"tag":1578,"props":2700,"children":2701},{"style":1686},[2702],{"type":52,"value":2211},{"type":46,"tag":1578,"props":2704,"children":2705},{"style":1585},[2706],{"type":52,"value":2634},{"type":46,"tag":1578,"props":2708,"children":2709},{"class":1580,"line":1597},[2710,2715,2719,2723,2728],{"type":46,"tag":1578,"props":2711,"children":2712},{"style":1697},[2713],{"type":52,"value":2714},"useEffect",{"type":46,"tag":1578,"props":2716,"children":2717},{"style":1686},[2718],{"type":52,"value":2137},{"type":46,"tag":1578,"props":2720,"children":2721},{"style":1585},[2722],{"type":52,"value":1706},{"type":46,"tag":1578,"props":2724,"children":2725},{"style":2581},[2726],{"type":52,"value":2727}," =>",{"type":46,"tag":1578,"props":2729,"children":2730},{"style":1585},[2731],{"type":52,"value":1670},{"type":46,"tag":1578,"props":2733,"children":2734},{"class":1580,"line":1607},[2735,2740,2744,2749,2753,2757,2761,2765,2769,2773,2777,2781,2786,2791,2796,2800,2804,2809],{"type":46,"tag":1578,"props":2736,"children":2737},{"style":1697},[2738],{"type":52,"value":2739},"  setCartCount",{"type":46,"tag":1578,"props":2741,"children":2742},{"style":1703},[2743],{"type":52,"value":2137},{"type":46,"tag":1578,"props":2745,"children":2746},{"style":1697},[2747],{"type":52,"value":2748},"parseInt",{"type":46,"tag":1578,"props":2750,"children":2751},{"style":1703},[2752],{"type":52,"value":2137},{"type":46,"tag":1578,"props":2754,"children":2755},{"style":1686},[2756],{"type":52,"value":2533},{"type":46,"tag":1578,"props":2758,"children":2759},{"style":1585},[2760],{"type":52,"value":1694},{"type":46,"tag":1578,"props":2762,"children":2763},{"style":1697},[2764],{"type":52,"value":2607},{"type":46,"tag":1578,"props":2766,"children":2767},{"style":1703},[2768],{"type":52,"value":2137},{"type":46,"tag":1578,"props":2770,"children":2771},{"style":1585},[2772],{"type":52,"value":2616},{"type":46,"tag":1578,"props":2774,"children":2775},{"style":1633},[2776],{"type":52,"value":2621},{"type":46,"tag":1578,"props":2778,"children":2779},{"style":1585},[2780],{"type":52,"value":2616},{"type":46,"tag":1578,"props":2782,"children":2783},{"style":1703},[2784],{"type":52,"value":2785},") ",{"type":46,"tag":1578,"props":2787,"children":2788},{"style":1585},[2789],{"type":52,"value":2790},"||",{"type":46,"tag":1578,"props":2792,"children":2793},{"style":1585},[2794],{"type":52,"value":2795}," '",{"type":46,"tag":1578,"props":2797,"children":2798},{"style":1633},[2799],{"type":52,"value":2698},{"type":46,"tag":1578,"props":2801,"children":2802},{"style":1585},[2803],{"type":52,"value":2616},{"type":46,"tag":1578,"props":2805,"children":2806},{"style":1703},[2807],{"type":52,"value":2808},"))",{"type":46,"tag":1578,"props":2810,"children":2811},{"style":1585},[2812],{"type":52,"value":2634},{"type":46,"tag":1578,"props":2814,"children":2815},{"class":1580,"line":1621},[2816,2821,2826],{"type":46,"tag":1578,"props":2817,"children":2818},{"style":1585},[2819],{"type":52,"value":2820},"},",{"type":46,"tag":1578,"props":2822,"children":2823},{"style":1686},[2824],{"type":52,"value":2825}," [])",{"type":46,"tag":1578,"props":2827,"children":2828},{"style":1585},[2829],{"type":52,"value":2634},{"type":46,"tag":1791,"props":2831,"children":2832},{},[],{"type":46,"tag":196,"props":2834,"children":2836},{"id":2835},"c-slot-opportunities-1",[2837],{"type":52,"value":692},{"type":46,"tag":272,"props":2839,"children":2840},{},[2841,2856],{"type":46,"tag":276,"props":2842,"children":2843},{},[2844],{"type":46,"tag":280,"props":2845,"children":2846},{},[2847,2852],{"type":46,"tag":284,"props":2848,"children":2849},{},[2850],{"type":52,"value":2851},"Current",{"type":46,"tag":284,"props":2853,"children":2854},{},[2855],{"type":52,"value":293},{"type":46,"tag":295,"props":2857,"children":2858},{},[2859],{"type":46,"tag":280,"props":2860,"children":2861},{},[2862,2867],{"type":46,"tag":302,"props":2863,"children":2864},{},[2865],{"type":52,"value":2866},"Hardcoded button",{"type":46,"tag":302,"props":2868,"children":2869},{},[2870,2872,2878],{"type":52,"value":2871},"Consider: ",{"type":46,"tag":313,"props":2873,"children":2875},{"className":2874},[],[2876],{"type":52,"value":2877},"actions: props.Slot()",{"type":52,"value":2879}," for flexible CTAs",{"type":46,"tag":55,"props":2881,"children":2882},{},[2883],{"type":52,"value":2884},"If designers need to put different content (button, link, custom element) in the action area:",{"type":46,"tag":1549,"props":2886,"children":2888},{"className":1935,"code":2887,"language":1937,"meta":1557,"style":1557},"props: {\n  actions: props.Slot({\n    name: \"Actions\"\n  })\n}\n\n\u002F\u002F Component\n\u003Cdiv className={styles.actions}>\n  {actions}\n\u003C\u002Fdiv>\n",[2889],{"type":46,"tag":313,"props":2890,"children":2891},{"__ignoreMap":1557},[2892,2907,2940,2964,2975,2982,2989,2997,3024,3041],{"type":46,"tag":1578,"props":2893,"children":2894},{"class":1580,"line":1581},[2895,2899,2903],{"type":46,"tag":1578,"props":2896,"children":2897},{"style":1591},[2898],{"type":52,"value":1661},{"type":46,"tag":1578,"props":2900,"children":2901},{"style":1585},[2902],{"type":52,"value":214},{"type":46,"tag":1578,"props":2904,"children":2905},{"style":1585},[2906],{"type":52,"value":1670},{"type":46,"tag":1578,"props":2908,"children":2909},{"class":1580,"line":1597},[2910,2915,2919,2923,2927,2932,2936],{"type":46,"tag":1578,"props":2911,"children":2912},{"style":1591},[2913],{"type":52,"value":2914},"  actions",{"type":46,"tag":1578,"props":2916,"children":2917},{"style":1585},[2918],{"type":52,"value":214},{"type":46,"tag":1578,"props":2920,"children":2921},{"style":1686},[2922],{"type":52,"value":1689},{"type":46,"tag":1578,"props":2924,"children":2925},{"style":1585},[2926],{"type":52,"value":1694},{"type":46,"tag":1578,"props":2928,"children":2929},{"style":1697},[2930],{"type":52,"value":2931},"Slot",{"type":46,"tag":1578,"props":2933,"children":2934},{"style":1703},[2935],{"type":52,"value":2137},{"type":46,"tag":1578,"props":2937,"children":2938},{"style":1585},[2939],{"type":52,"value":2142},{"type":46,"tag":1578,"props":2941,"children":2942},{"class":1580,"line":1607},[2943,2947,2951,2955,2960],{"type":46,"tag":1578,"props":2944,"children":2945},{"style":1703},[2946],{"type":52,"value":2150},{"type":46,"tag":1578,"props":2948,"children":2949},{"style":1585},[2950],{"type":52,"value":214},{"type":46,"tag":1578,"props":2952,"children":2953},{"style":1585},[2954],{"type":52,"value":2159},{"type":46,"tag":1578,"props":2956,"children":2957},{"style":1633},[2958],{"type":52,"value":2959},"Actions",{"type":46,"tag":1578,"props":2961,"children":2962},{"style":1585},[2963],{"type":52,"value":2198},{"type":46,"tag":1578,"props":2965,"children":2966},{"class":1580,"line":1621},[2967,2971],{"type":46,"tag":1578,"props":2968,"children":2969},{"style":1585},[2970],{"type":52,"value":2206},{"type":46,"tag":1578,"props":2972,"children":2973},{"style":1703},[2974],{"type":52,"value":2482},{"type":46,"tag":1578,"props":2976,"children":2977},{"class":1580,"line":1629},[2978],{"type":46,"tag":1578,"props":2979,"children":2980},{"style":1585},[2981],{"type":52,"value":1789},{"type":46,"tag":1578,"props":2983,"children":2984},{"class":1580,"line":1645},[2985],{"type":46,"tag":1578,"props":2986,"children":2987},{"emptyLinePlaceholder":1601},[2988],{"type":52,"value":1604},{"type":46,"tag":1578,"props":2990,"children":2991},{"class":1580,"line":1655},[2992],{"type":46,"tag":1578,"props":2993,"children":2994},{"style":1649},[2995],{"type":52,"value":2996},"\u002F\u002F Component\n",{"type":46,"tag":1578,"props":2998,"children":2999},{"class":1580,"line":1673},[3000,3004,3009,3014,3019],{"type":46,"tag":1578,"props":3001,"children":3002},{"style":1585},[3003],{"type":52,"value":1957},{"type":46,"tag":1578,"props":3005,"children":3006},{"style":1686},[3007],{"type":52,"value":3008},"div className",{"type":46,"tag":1578,"props":3010,"children":3011},{"style":1585},[3012],{"type":52,"value":3013},"={",{"type":46,"tag":1578,"props":3015,"children":3016},{"style":1686},[3017],{"type":52,"value":3018},"styles.actions",{"type":46,"tag":1578,"props":3020,"children":3021},{"style":1585},[3022],{"type":52,"value":3023},"}>\n",{"type":46,"tag":1578,"props":3025,"children":3026},{"class":1580,"line":1714},[3027,3032,3037],{"type":46,"tag":1578,"props":3028,"children":3029},{"style":1585},[3030],{"type":52,"value":3031},"  {",{"type":46,"tag":1578,"props":3033,"children":3034},{"style":1686},[3035],{"type":52,"value":3036},"actions",{"type":46,"tag":1578,"props":3038,"children":3039},{"style":1585},[3040],{"type":52,"value":1789},{"type":46,"tag":1578,"props":3042,"children":3043},{"class":1580,"line":1748},[3044,3048,3053],{"type":46,"tag":1578,"props":3045,"children":3046},{"style":1585},[3047],{"type":52,"value":1972},{"type":46,"tag":1578,"props":3049,"children":3050},{"style":1686},[3051],{"type":52,"value":3052},"div",{"type":46,"tag":1578,"props":3054,"children":3055},{"style":1585},[3056],{"type":52,"value":1981},{"type":46,"tag":55,"props":3058,"children":3059},{},[3060,3065],{"type":46,"tag":61,"props":3061,"children":3062},{},[3063],{"type":52,"value":3064},"However",{"type":52,"value":3066},", if button behavior is tied to cart logic, keep it hardcoded.",{"type":46,"tag":1791,"props":3068,"children":3069},{},[],{"type":46,"tag":196,"props":3071,"children":3073},{"id":3072},"d-shadow-dom-compatibility-1",[3074],{"type":52,"value":807},{"type":46,"tag":272,"props":3076,"children":3077},{},[3078,3093],{"type":46,"tag":276,"props":3079,"children":3080},{},[3081],{"type":46,"tag":280,"props":3082,"children":3083},{},[3084,3088],{"type":46,"tag":284,"props":3085,"children":3086},{},[3087],{"type":52,"value":1307},{"type":46,"tag":284,"props":3089,"children":3090},{},[3091],{"type":52,"value":3092},"Status",{"type":46,"tag":295,"props":3094,"children":3095},{},[3096,3109,3121],{"type":46,"tag":280,"props":3097,"children":3098},{},[3099,3104],{"type":46,"tag":302,"props":3100,"children":3101},{},[3102],{"type":52,"value":3103},"Styles imported in .webflow.tsx",{"type":46,"tag":302,"props":3105,"children":3106},{},[3107],{"type":52,"value":3108},"✅ OK",{"type":46,"tag":280,"props":3110,"children":3111},{},[3112,3117],{"type":46,"tag":302,"props":3113,"children":3114},{},[3115],{"type":52,"value":3116},"CSS Modules used",{"type":46,"tag":302,"props":3118,"children":3119},{},[3120],{"type":52,"value":3108},{"type":46,"tag":280,"props":3122,"children":3123},{},[3124,3129],{"type":46,"tag":302,"props":3125,"children":3126},{},[3127],{"type":52,"value":3128},"No global class references",{"type":46,"tag":302,"props":3130,"children":3131},{},[3132],{"type":52,"value":3108},{"type":46,"tag":1791,"props":3134,"children":3135},{},[],{"type":46,"tag":196,"props":3137,"children":3139},{"id":3138},"e-ssr-safety-1",[3140],{"type":52,"value":1022},{"type":46,"tag":272,"props":3142,"children":3143},{},[3144,3158],{"type":46,"tag":276,"props":3145,"children":3146},{},[3147],{"type":46,"tag":280,"props":3148,"children":3149},{},[3150,3154],{"type":46,"tag":284,"props":3151,"children":3152},{},[3153],{"type":52,"value":1307},{"type":46,"tag":284,"props":3155,"children":3156},{},[3157],{"type":52,"value":3092},{"type":46,"tag":295,"props":3159,"children":3160},{},[3161,3174,3186],{"type":46,"tag":280,"props":3162,"children":3163},{},[3164,3169],{"type":46,"tag":302,"props":3165,"children":3166},{},[3167],{"type":52,"value":3168},"window usage",{"type":46,"tag":302,"props":3170,"children":3171},{},[3172],{"type":52,"value":3173},"✅ None",{"type":46,"tag":280,"props":3175,"children":3176},{},[3177,3182],{"type":46,"tag":302,"props":3178,"children":3179},{},[3180],{"type":52,"value":3181},"document usage",{"type":46,"tag":302,"props":3183,"children":3184},{},[3185],{"type":52,"value":3173},{"type":46,"tag":280,"props":3187,"children":3188},{},[3189,3194],{"type":46,"tag":302,"props":3190,"children":3191},{},[3192],{"type":52,"value":3193},"localStorage usage",{"type":46,"tag":302,"props":3195,"children":3196},{},[3197],{"type":52,"value":3198},"⚠️ Needs guard (see fix above)",{"type":46,"tag":1791,"props":3200,"children":3201},{},[],{"type":46,"tag":196,"props":3203,"children":3205},{"id":3204},"f-component-granularity-1",[3206],{"type":52,"value":1161},{"type":46,"tag":55,"props":3208,"children":3209},{},[3210,3215,3217,3222],{"type":46,"tag":61,"props":3211,"children":3212},{},[3213],{"type":52,"value":3214},"Current size",{"type":52,"value":3216},": 4 props (will be 7 after recommendations)\n",{"type":46,"tag":61,"props":3218,"children":3219},{},[3220],{"type":52,"value":3221},"Verdict",{"type":52,"value":3223},": Good granularity - single purpose, manageable props",{"type":46,"tag":1791,"props":3225,"children":3226},{},[],{"type":46,"tag":69,"props":3228,"children":3230},{"id":3229},"summary",[3231],{"type":52,"value":1249},{"type":46,"tag":272,"props":3233,"children":3234},{},[3235,3250],{"type":46,"tag":276,"props":3236,"children":3237},{},[3238],{"type":46,"tag":280,"props":3239,"children":3240},{},[3241,3246],{"type":46,"tag":284,"props":3242,"children":3243},{},[3244],{"type":52,"value":3245},"Category",{"type":46,"tag":284,"props":3247,"children":3248},{},[3249],{"type":52,"value":3092},{"type":46,"tag":295,"props":3251,"children":3252},{},[3253,3265,3278,3291,3304],{"type":46,"tag":280,"props":3254,"children":3255},{},[3256,3260],{"type":46,"tag":302,"props":3257,"children":3258},{},[3259],{"type":52,"value":166},{"type":46,"tag":302,"props":3261,"children":3262},{},[3263],{"type":52,"value":3264},"⚠️ Needs work - 4 hardcoded items found",{"type":46,"tag":280,"props":3266,"children":3267},{},[3268,3273],{"type":46,"tag":302,"props":3269,"children":3270},{},[3271],{"type":52,"value":3272},"State Management",{"type":46,"tag":302,"props":3274,"children":3275},{},[3276],{"type":52,"value":3277},"⚠️ localStorage needs SSR guard",{"type":46,"tag":280,"props":3279,"children":3280},{},[3281,3286],{"type":46,"tag":302,"props":3282,"children":3283},{},[3284],{"type":52,"value":3285},"Shadow DOM",{"type":46,"tag":302,"props":3287,"children":3288},{},[3289],{"type":52,"value":3290},"✅ Good",{"type":46,"tag":280,"props":3292,"children":3293},{},[3294,3299],{"type":46,"tag":302,"props":3295,"children":3296},{},[3297],{"type":52,"value":3298},"SSR Safety",{"type":46,"tag":302,"props":3300,"children":3301},{},[3302],{"type":52,"value":3303},"⚠️ One issue",{"type":46,"tag":280,"props":3305,"children":3306},{},[3307,3312],{"type":46,"tag":302,"props":3308,"children":3309},{},[3310],{"type":52,"value":3311},"Granularity",{"type":46,"tag":302,"props":3313,"children":3314},{},[3315],{"type":52,"value":3290},{"type":46,"tag":55,"props":3317,"children":3318},{},[3319],{"type":46,"tag":61,"props":3320,"children":3321},{},[3322],{"type":52,"value":3323},"Priority Actions:",{"type":46,"tag":156,"props":3325,"children":3326},{},[3327,3332,3337,3342],{"type":46,"tag":88,"props":3328,"children":3329},{},[3330],{"type":52,"value":3331},"Fix localStorage SSR issue (blocks deployment)",{"type":46,"tag":88,"props":3333,"children":3334},{},[3335],{"type":52,"value":3336},"Change imageUrl from Text to Image prop",{"type":46,"tag":88,"props":3338,"children":3339},{},[3340],{"type":52,"value":3341},"Expose badge controls as props",{"type":46,"tag":88,"props":3343,"children":3344},{},[3345],{"type":52,"value":3346},"Consider exposing button label",{"type":46,"tag":1549,"props":3348,"children":3351},{"className":3349,"code":3350,"language":52},[1552],"\n## Guidelines\n\n### What This Audit Does NOT Check\n\nThis is not a generic code quality audit. Skip:\n- Generic React performance patterns (let users use React DevTools)\n- Generic accessibility (let users use axe or similar)\n- Code formatting (let users use Prettier\u002FESLint)\n- Generic TypeScript best practices\n\nFocus only on Webflow-specific concerns.\n\n### Prop Exposure Heuristics\n\n**Should be a prop:**\n- Any text visible in the UI\n- Any image or media\n- Any color or size that might vary\n- Any boolean that controls visibility\n- Any value that changes per-use\n\n**Should NOT be a prop:**\n- Internal implementation details\n- State that changes during interaction\n- Values derived from other props\n- Animation timing\u002Feasing (unless explicitly customizable)\n\n### When to Recommend Slots vs Props\n\n**Use Slot when:**\n- Designer wants to put arbitrary Webflow elements inside\n- Content structure is flexible\n- Nested content doesn't need to interact with component state\n\n**Use Props when:**\n- Content is simple (text, image, link)\n- Component needs to process\u002Ftransform the content\n- Specific structure is required\n\n### State Pattern Recommendations\n\nIf components need to share state, recommend in this order:\n1. **URL parameters** - if state should be shareable\u002Fbookmarkable\n2. **Nano stores** - for real-time sync between components\n3. **Custom events** - for fire-and-forget communication\n4. **Browser storage** - for persistence across sessions\n",[3352],{"type":46,"tag":313,"props":3353,"children":3354},{"__ignoreMap":1557},[3355],{"type":52,"value":3350},{"type":46,"tag":3357,"props":3358,"children":3359},"style",{},[3360],{"type":52,"value":3361},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":3363,"total":3540},[3364,3385,3400,3416,3433,3449,3456,3470,3484,3496,3510,3526],{"slug":3365,"name":3366,"fn":3367,"description":3368,"org":3369,"tags":3370,"stars":24,"repoUrl":25,"updatedAt":3384},"webflow-clicloud","webflow-cli:cloud","deploy applications to Webflow Cloud","Initialize, build, and deploy full-stack Webflow applications to Webflow Cloud hosting. Supports site-attached deploys (linked to an existing Webflow site) and project app deploys (independent project, no existing site required). Use when creating new projects, deploying existing ones, or setting up CI\u002FCD pipelines for Webflow Cloud.",{"slug":9,"name":10,"logoUrl":11,"githubOrg":9},[3371,3374,3377,3380,3383],{"name":3372,"slug":3373,"type":16},"CLI","cli",{"name":3375,"slug":3376,"type":16},"Cloud","cloud",{"name":3378,"slug":3379,"type":16},"Deployment","deployment",{"name":3381,"slug":3382,"type":16},"Full-stack","full-stack",{"name":10,"slug":9,"type":16},"2026-05-18T06:47:47.514609",{"slug":3386,"name":3387,"fn":3388,"description":3389,"org":3390,"tags":3391,"stars":24,"repoUrl":25,"updatedAt":3399},"webflow-clicode-component","webflow-cli:code-component","create and deploy Webflow Code Components","Create and deploy reusable React components for Webflow Designer. Configure existing React projects with webflow.json, build and bundle code, validate output, and deploy to workspace using library share. Use when building custom components for designers.",{"slug":9,"name":10,"logoUrl":11,"githubOrg":9},[3392,3393,3394,3395,3398],{"name":3372,"slug":3373,"type":16},{"name":3378,"slug":3379,"type":16},{"name":14,"slug":15,"type":16},{"name":3396,"slug":3397,"type":16},"UI Components","ui-components",{"name":10,"slug":9,"type":16},"2026-05-18T06:47:41.421071",{"slug":3401,"name":3402,"fn":3403,"description":3404,"org":3405,"tags":3406,"stars":24,"repoUrl":25,"updatedAt":3415},"webflow-clidesigner-extension","webflow-cli:designer-extension","build Webflow Designer Extensions","Build Designer Extensions for custom Webflow Designer functionality. Lists available templates, initializes extension projects from templates (default\u002Freact\u002Ftypescript-alt), bundles extensions for upload, and serves locally for development.",{"slug":9,"name":10,"logoUrl":11,"githubOrg":9},[3407,3408,3411,3412,3414],{"name":3372,"slug":3373,"type":16},{"name":3409,"slug":3410,"type":16},"Plugin Development","plugin-development",{"name":14,"slug":15,"type":16},{"name":3413,"slug":1937,"type":16},"TypeScript",{"name":10,"slug":9,"type":16},"2026-05-18T06:47:43.853573",{"slug":3417,"name":3418,"fn":3419,"description":3420,"org":3421,"tags":3422,"stars":24,"repoUrl":25,"updatedAt":3432},"webflow-clidevlink","webflow-cli:devlink","export Webflow components to React and Next.js","Export Webflow Designer components to React\u002FNext.js code for external projects. Configure devlink settings in webflow.json, sync design updates with devlink sync, validate generated code, show diffs, and provide integration examples. Use when building with Webflow designs in React\u002FNext.js.",{"slug":9,"name":10,"logoUrl":11,"githubOrg":9},[3423,3424,3427,3430,3431],{"name":3372,"slug":3373,"type":16},{"name":3425,"slug":3426,"type":16},"Frontend","frontend",{"name":3428,"slug":3429,"type":16},"Next.js","next-js",{"name":14,"slug":15,"type":16},{"name":10,"slug":9,"type":16},"2026-05-18T06:47:40.182468",{"slug":3434,"name":3435,"fn":3436,"description":3437,"org":3438,"tags":3439,"stars":24,"repoUrl":25,"updatedAt":3448},"webflow-clitroubleshooter","webflow-cli:troubleshooter","troubleshoot Webflow CLI issues","Diagnose and fix Webflow CLI issues including installation problems, authentication failures, build errors, and bundle problems. Uses CLI diagnostic flags (--version, --help, --verbose, --debug-bundler) for troubleshooting.",{"slug":9,"name":10,"logoUrl":11,"githubOrg":9},[3440,3441,3444,3447],{"name":3372,"slug":3373,"type":16},{"name":3442,"slug":3443,"type":16},"Configuration","configuration",{"name":3445,"slug":3446,"type":16},"Debugging","debugging",{"name":10,"slug":9,"type":16},"2026-05-18T06:47:48.831648",{"slug":4,"name":5,"fn":6,"description":7,"org":3450,"tags":3451,"stars":24,"repoUrl":25,"updatedAt":26},{"slug":9,"name":10,"logoUrl":11,"githubOrg":9},[3452,3453,3454,3455],{"name":18,"slug":19,"type":16},{"name":22,"slug":23,"type":16},{"name":14,"slug":15,"type":16},{"name":10,"slug":9,"type":16},{"slug":3457,"name":3458,"fn":3459,"description":3460,"org":3461,"tags":3462,"stars":24,"repoUrl":25,"updatedAt":3469},"webflow-code-componentcomponent-scaffold","webflow-code-component:component-scaffold","scaffold Webflow Code Component boilerplate","Generate new Webflow Code Component boilerplate with React component, definition file, and optional styling. Automatically checks prerequisites and can set up missing config\u002Fdependencies.",{"slug":9,"name":10,"logoUrl":11,"githubOrg":9},[3463,3464,3465,3468],{"name":3425,"slug":3426,"type":16},{"name":14,"slug":15,"type":16},{"name":3466,"slug":3467,"type":16},"Templates","templates",{"name":10,"slug":9,"type":16},"2026-05-18T06:47:42.638042",{"slug":3471,"name":3472,"fn":3473,"description":3474,"org":3475,"tags":3476,"stars":24,"repoUrl":25,"updatedAt":3483},"webflow-code-componentconvert-component","webflow-code-component:convert-component","convert React components to Webflow Code Components","Convert an existing React component into a Webflow Code Component. Analyzes TypeScript props, maps to Webflow prop types, generates the .webflow.tsx definition file, and identifies required modifications.",{"slug":9,"name":10,"logoUrl":11,"githubOrg":9},[3477,3480,3481,3482],{"name":3478,"slug":3479,"type":16},"Migration","migration",{"name":14,"slug":15,"type":16},{"name":3413,"slug":1937,"type":16},{"name":10,"slug":9,"type":16},"2026-05-18T06:47:52.523608",{"slug":3485,"name":3486,"fn":3487,"description":3488,"org":3489,"tags":3490,"stars":24,"repoUrl":25,"updatedAt":3495},"webflow-code-componentdeploy-guide","webflow-code-component:deploy-guide","deploy Webflow Code Components","Step-by-step guide for deploying Webflow Code Components to a workspace. Covers authentication, pre-flight checks, deployment execution, and verification.",{"slug":9,"name":10,"logoUrl":11,"githubOrg":9},[3491,3492,3493,3494],{"name":3378,"slug":3379,"type":16},{"name":3425,"slug":3426,"type":16},{"name":14,"slug":15,"type":16},{"name":10,"slug":9,"type":16},"2026-05-18T06:47:38.947875",{"slug":3497,"name":3498,"fn":3499,"description":3500,"org":3501,"tags":3502,"stars":24,"repoUrl":25,"updatedAt":3509},"webflow-code-componentlocal-dev-setup","webflow-code-component:local-dev-setup","set up local Webflow Code Component projects","Initialize a new Webflow Code Components project from scratch. Creates project structure, installs dependencies, configures webflow.json, and sets up development environment.",{"slug":9,"name":10,"logoUrl":11,"githubOrg":9},[3503,3504,3507,3508],{"name":3442,"slug":3443,"type":16},{"name":3505,"slug":3506,"type":16},"Local Development","local-development",{"name":14,"slug":15,"type":16},{"name":10,"slug":9,"type":16},"2026-05-18T06:47:50.062783",{"slug":3511,"name":3512,"fn":3513,"description":3514,"org":3515,"tags":3516,"stars":24,"repoUrl":25,"updatedAt":3525},"webflow-code-componentpre-deploy-check","webflow-code-component:pre-deploy-check","validate Webflow Code Components before deployment","Pre-deployment validation for Webflow Code Components. Checks bundle size, dependencies, prop configurations, SSR compatibility, styling setup, and common issues before running webflow library share.",{"slug":9,"name":10,"logoUrl":11,"githubOrg":9},[3517,3518,3521,3524],{"name":3378,"slug":3379,"type":16},{"name":3519,"slug":3520,"type":16},"QA","qa",{"name":3522,"slug":3523,"type":16},"Validation","validation",{"name":10,"slug":9,"type":16},"2026-05-18T06:47:51.300653",{"slug":3527,"name":3528,"fn":3529,"description":3530,"org":3531,"tags":3532,"stars":24,"repoUrl":25,"updatedAt":3539},"webflow-code-componenttroubleshoot-deploy","webflow-code-component:troubleshoot-deploy","troubleshoot Webflow Code Component deployments","Debug deployment failures for Webflow Code Components. Analyzes error messages, identifies root causes, and provides specific fixes for common issues.",{"slug":9,"name":10,"logoUrl":11,"githubOrg":9},[3533,3534,3535,3538],{"name":3445,"slug":3446,"type":16},{"name":3378,"slug":3379,"type":16},{"name":3536,"slug":3537,"type":16},"Observability","observability",{"name":10,"slug":9,"type":16},"2026-05-18T06:47:45.057571",28,{"items":3542,"total":3540},[3543,3551,3559,3567,3575,3582,3589],{"slug":3365,"name":3366,"fn":3367,"description":3368,"org":3544,"tags":3545,"stars":24,"repoUrl":25,"updatedAt":3384},{"slug":9,"name":10,"logoUrl":11,"githubOrg":9},[3546,3547,3548,3549,3550],{"name":3372,"slug":3373,"type":16},{"name":3375,"slug":3376,"type":16},{"name":3378,"slug":3379,"type":16},{"name":3381,"slug":3382,"type":16},{"name":10,"slug":9,"type":16},{"slug":3386,"name":3387,"fn":3388,"description":3389,"org":3552,"tags":3553,"stars":24,"repoUrl":25,"updatedAt":3399},{"slug":9,"name":10,"logoUrl":11,"githubOrg":9},[3554,3555,3556,3557,3558],{"name":3372,"slug":3373,"type":16},{"name":3378,"slug":3379,"type":16},{"name":14,"slug":15,"type":16},{"name":3396,"slug":3397,"type":16},{"name":10,"slug":9,"type":16},{"slug":3401,"name":3402,"fn":3403,"description":3404,"org":3560,"tags":3561,"stars":24,"repoUrl":25,"updatedAt":3415},{"slug":9,"name":10,"logoUrl":11,"githubOrg":9},[3562,3563,3564,3565,3566],{"name":3372,"slug":3373,"type":16},{"name":3409,"slug":3410,"type":16},{"name":14,"slug":15,"type":16},{"name":3413,"slug":1937,"type":16},{"name":10,"slug":9,"type":16},{"slug":3417,"name":3418,"fn":3419,"description":3420,"org":3568,"tags":3569,"stars":24,"repoUrl":25,"updatedAt":3432},{"slug":9,"name":10,"logoUrl":11,"githubOrg":9},[3570,3571,3572,3573,3574],{"name":3372,"slug":3373,"type":16},{"name":3425,"slug":3426,"type":16},{"name":3428,"slug":3429,"type":16},{"name":14,"slug":15,"type":16},{"name":10,"slug":9,"type":16},{"slug":3434,"name":3435,"fn":3436,"description":3437,"org":3576,"tags":3577,"stars":24,"repoUrl":25,"updatedAt":3448},{"slug":9,"name":10,"logoUrl":11,"githubOrg":9},[3578,3579,3580,3581],{"name":3372,"slug":3373,"type":16},{"name":3442,"slug":3443,"type":16},{"name":3445,"slug":3446,"type":16},{"name":10,"slug":9,"type":16},{"slug":4,"name":5,"fn":6,"description":7,"org":3583,"tags":3584,"stars":24,"repoUrl":25,"updatedAt":26},{"slug":9,"name":10,"logoUrl":11,"githubOrg":9},[3585,3586,3587,3588],{"name":18,"slug":19,"type":16},{"name":22,"slug":23,"type":16},{"name":14,"slug":15,"type":16},{"name":10,"slug":9,"type":16},{"slug":3457,"name":3458,"fn":3459,"description":3460,"org":3590,"tags":3591,"stars":24,"repoUrl":25,"updatedAt":3469},{"slug":9,"name":10,"logoUrl":11,"githubOrg":9},[3592,3593,3594,3595],{"name":3425,"slug":3426,"type":16},{"name":14,"slug":15,"type":16},{"name":3466,"slug":3467,"type":16},{"name":10,"slug":9,"type":16}]