/** * near-me-schema — Plan feature display data * * Maps each surfaced feature to per-plan display text the pricing UI renders: * - `true` → enabled, render with a checkmark * - `false` → locked, render with a lock icon * - `string` → display the string (e.g. "10", "Unlimited") * - `{ text, helpText? }` → display text with an optional tooltip * * `getNearMePlanFeatureDisplay(planId)` walks this list to build the * included/locked feature lists shown on a plan card. * * @module near-me-schema/plan-features-data */ import type { NearMePlanId } from './plan-limits.js'; /** One row's display value with an optional tooltip. */ export interface FeatureDisplayValue { text: string; helpText?: string; } export type FeaturePlanCell = boolean | string | FeatureDisplayValue; export interface FeatureDisplayItem { /** Stable feature key. Matches NearMePlanLimits where it's a limit too. */ key: string; /** Human-readable feature label (rendered next to the icon). */ label: string; /** Optional explanation tooltip (rendered alongside the label as a help icon). */ helpText?: string; /** Per-plan display value. */ byPlan: Record; /** Optional sort key — lower renders first. Default 100. */ order?: number; } /** * One row per feature the pricing UI surfaces. Deliberately lean and honest — * only levers we actually enforce, plus the always-on value (listings, * reviews, dashboard) so the Free tier reads as genuinely useful. Seeker-side * actions (browse, search, save, enquire) are free for everyone, so they are * not plan differentiators and do not appear here. */ export declare const NEAR_ME_PLAN_FEATURE_DISPLAY_DATA: FeatureDisplayItem[]; export interface FeatureChipDisplay { key: string; label: string; helpText?: string; /** Display value. `null` when the feature is a plain boolean (label is the text). */ value: string | null; /** `true` when the feature is enabled (boolean true or non-empty string). */ included: boolean; } /** * Build the feature chips for a plan, split into included (checkmarks) and * locked (lock icon). Items are sorted by `order` ascending. For boolean-true * features the `label` is the chip text (value `null`); for string-valued * features the value is the chip text; locked (boolean-false) features return * `value: null` in the `locked` bucket. */ export declare function getNearMePlanFeatureDisplay(planId: NearMePlanId): { included: FeatureChipDisplay[]; locked: FeatureChipDisplay[]; }; //# sourceMappingURL=plan-features-data.d.ts.map