# Anchors of 0003-billing-ui-free-plan.patch (plan part 1, task 3.5).
# Format: path|literal text|exact count (see anchors/0004-tiktok-audit-ux.txt).
#
# Exact upstream contracts from task 3.5 step 1; the first billing import must also disappear.
apps/frontend/src/components/new-layout/layout.component.tsx|user.tier === 'FREE' && isGeneral && billingEnabled|1
apps/frontend/src/components/new-layout/layout.component.tsx|import { FirstBillingComponent } from '@gitroom/frontend/components/billing/first.billing.component';|1
apps/frontend/src/components/new-layout/layout.component.tsx|<InvoicesComponent />|1
apps/frontend/src/components/billing/main.billing.component.tsx|tiers.filter((name) => !isGeneral || name !== 'FREE')|1
apps/frontend/src/components/billing/main.billing.component.tsx|${price}|1
apps/frontend/src/components/billing/main.billing.component.tsx|${Math.max(price, 0).toFixed(2)}|1
apps/frontend/src/components/billing/main.billing.component.tsx|{capitalize(name)}|1
apps/frontend/src/components/billing/main.billing.component.tsx|currency: 'USD'|1
apps/frontend/src/components/billing/main.billing.component.tsx|billing_ai_credits_reset_monthly|1
apps/frontend/src/components/billing/main.billing.component.tsx|].filter((p) => p.total);|1
apps/frontend/src/components/billing/first.billing.component.tsx|Object.entries(pricing).filter(([key, value]) => key !== 'FREE')|1
#
# Contract of the result: FREE always enters the app, invoices remain and ULTIMATE is hidden in both lists.
after:apps/frontend/src/components/new-layout/layout.component.tsx|FirstBillingComponent|0
after:apps/frontend/src/components/new-layout/layout.component.tsx|billingEnabled|0
after:apps/frontend/src/components/new-layout/layout.component.tsx|isGeneral|0
after:apps/frontend/src/components/new-layout/layout.component.tsx|<InvoicesComponent />|1
after:apps/frontend/src/components/billing/main.billing.component.tsx|const tiers = Object.keys(pricing).filter((n) => n !== 'ULTIMATE');|1
after:apps/frontend/src/components/billing/main.billing.component.tsx|const plans = tiers;|1
after:apps/frontend/src/components/billing/main.billing.component.tsx|tiers.filter((name) => !isGeneral || name !== 'FREE')|0
after:apps/frontend/src/components/billing/first.billing.component.tsx|([key]) => key !== 'FREE' && key !== 'ULTIMATE'|1
# Both monetary displays share the same formatter; the checkout tracking event uses the same currency.
after:apps/frontend/src/components/billing/main.billing.component.tsx|new Intl.NumberFormat('pt-PT', {\n  style: 'currency',\n  currency: 'EUR',\n});|1
after:apps/frontend/src/components/billing/main.billing.component.tsx|{euroFormatter.format(Math.max(price, 0))}|1
after:apps/frontend/src/components/billing/main.billing.component.tsx|{euroFormatter.format(price)}|1
after:apps/frontend/src/components/billing/main.billing.component.tsx|${price}|0
after:apps/frontend/src/components/billing/main.billing.component.tsx|${Math.max(price, 0).toFixed(2)}|0
after:apps/frontend/src/components/billing/main.billing.component.tsx|currency: 'USD'|0
after:apps/frontend/src/components/billing/main.billing.component.tsx|currency: 'EUR'|2
# Translation values are a separate handoff to 0007; keep the English defaults agreed in the work order.
after:apps/frontend/src/components/billing/main.billing.component.tsx|t('ild_plan_free', 'Free')|1
after:apps/frontend/src/components/billing/main.billing.component.tsx|t('ild_plan_standard', 'Starter')|1
after:apps/frontend/src/components/billing/main.billing.component.tsx|t('ild_plan_team', 'Team')|1
after:apps/frontend/src/components/billing/main.billing.component.tsx|t('ild_plan_pro', 'Agency')|1
after:apps/frontend/src/components/billing/main.billing.component.tsx|{planNames[name] || capitalize(name)}|1
after:apps/frontend/src/components/billing/main.billing.component.tsx|{capitalize(name)}|0
# Zero AI quotas hide the credit counters and their reset notice, without hiding renewal information.
after:apps/frontend/src/components/billing/main.billing.component.tsx|].filter((p) => p.total);|1
after:apps/frontend/src/components/billing/main.billing.component.tsx|{usage.length > 0 &&\n            t(\n              'billing_ai_credits_reset_monthly',|1
after:apps/frontend/src/components/billing/main.billing.component.tsx|t('billing_renews_on', 'Your plan renews on')|1
