/* Brainstorm X — Naming wizard. Interactive multi-step flow. */
(function () {
const { useState } = React;
const DS = window.BrainstormXDesignSystem_f2a458;
const { Button, Card, Input, Textarea, Chip, SentimentSlider, ProgressSteps, Badge } = DS;
const I = window.BXIcons;
const STEPS = ['Basics', 'Keywords', 'Feeling', 'Style', 'Email'];
const PROJECT_TYPES = ['Business name', 'Product name', 'App / platform', 'Service name', 'Event name', 'Campaign name'];
const QUICK_CHIPS = ['Fun', 'Clever', 'Clean', 'Technical', 'Luxurious', 'Quirky', 'Warm', 'Direct', 'Inventive', 'Trustworthy'];
const STYLES = [
['Auto', 'All styles'], ['Brandable', 'Invented, like Google'], ['Evocative', 'Energy, like Red Bull'],
['Short phrase', 'Like Dollar Shave Club'], ['Compound', 'Blended, like FedEx'],
['Alternate spelling', 'Like Lyft'], ['Real words', 'Like Apple'],
];
const AXES = [['Playful', 'Serious'], ['Premium', 'Affordable'], ['Minimal', 'Expressive'], ['Safe', 'Unusual']];
function Shell({ step, children, onBack, onNext, nextLabel, canBack = true }) {
return (
Brainstorm X
{children}
}>Back
}>{nextLabel || 'Continue'}
);
}
function Field({ label, children, hint }) {
return (
{label}
{children}
{hint &&
{hint}
}
);
}
function Wizard({ goto }) {
const [step, setStep] = useState(0);
const [type, setType] = useState('Business name');
const [chips, setChips] = useState({ Quirky: true, Fun: true });
const [styles, setStyles] = useState({ Brandable: true, Evocative: true, Compound: true });
const [kw, setKw] = useState(['quirky', 'cute', 'paws']);
const [kwInput, setKwInput] = useState('');
const [axes, setAxes] = useState([28, 62, 40, 70]);
const next = () => (step < STEPS.length - 1 ? setStep(step + 1) : goto('invite'));
const back = () => setStep(Math.max(0, step - 1));
const toggle = (obj, set, k) => set({ ...obj, [k]: !obj[k] });
const addKw = (e) => { e.preventDefault(); const v = kwInput.trim(); if (v && !kw.includes(v)) setKw([...kw, v]); setKwInput(''); };
const heads = [
['What are you naming?', "Let's train your naming session — answer a few quick questions and we'll generate your first set of ideas."],
['Add your keywords', 'Add words, themes or existing names that point the AI in the right direction.'],
['Feeling & personality', 'Slide towards the qualities that fit your brand. Add a few quick chips too.'],
['Name style', 'Pick one or more styles. You can always change this later.'],
['Save your naming session', "Enter your email and we'll send a secure magic link. No password needed."],
];
return (
0}
nextLabel={step === STEPS.length - 1 ? 'Send magic link' : 'Continue'}>
Step {step + 1} of {STEPS.length}
{heads[step][0]}
{heads[step][1]}
{step === 0 && (<>
{PROJECT_TYPES.map((t) => setType(t)}>{t})}
>)}
{step === 1 && (<>
{kw.map((k) => setKw(kw.filter((x) => x !== k))}>{k})}
{}}>corporate
{}}>marketplace
>)}
{step === 2 && (<>
{AXES.map(([l, r], i) => (
setAxes(axes.map((a, j) => (j === i ? v : a)))} />
))}
{QUICK_CHIPS.map((c) => toggle(chips, setChips, c)}>{c})}
>)}
{step === 3 && (<>
{STYLES.map(([name, eg]) => {
const on = !!styles[name];
return (
);
})}
{['Low', 'Medium', 'High'].map((r) => {r})}
>)}
{step === 4 && (<>
} helper="We'll send a secure magic link to save your session and invite others." />
Your wizard answers are ready — we'll generate 40 names across your selected styles.
>)}
);
}
window.BXWizard = Wizard;
})();