Spaces:
Build error
Build error
| """ | |
| Create Character tab UI component. | |
| """ | |
| import gradio as gr | |
| from typing import Dict, Any, List | |
| def create_character_tab(dnd_races: List[str], dnd_classes: List[str]) -> Dict[str, Any]: | |
| """ | |
| Create the Create Character tab UI. | |
| Args: | |
| dnd_races: List of available D&D races | |
| dnd_classes: List of available D&D classes | |
| Returns: | |
| Dict containing all UI components that need event handler wiring | |
| """ | |
| components = {} | |
| with gr.Tab("✨ Create Character"): | |
| gr.Markdown(""" | |
| ## Create Your D&D Character | |
| Fill in the fields below to create a new character. Your character will be saved and available in the character dropdown. | |
| """) | |
| with gr.Row(): | |
| with gr.Column(): | |
| components['char_name'] = gr.Textbox(label="Character Name", placeholder="e.g., Gandalf the Grey") | |
| with gr.Row(): | |
| components['char_race'] = gr.Dropdown( | |
| choices=dnd_races, | |
| value="Human", | |
| label="Race" | |
| ) | |
| components['char_class'] = gr.Dropdown( | |
| choices=dnd_classes, | |
| value="Fighter", | |
| label="Class" | |
| ) | |
| with gr.Row(): | |
| components['char_level'] = gr.Slider( | |
| minimum=1, | |
| maximum=20, | |
| value=1, | |
| step=1, | |
| label="Level", | |
| info="Character level (1-20)" | |
| ) | |
| components['char_alignment'] = gr.Dropdown( | |
| choices=[ | |
| "Lawful Good", "Neutral Good", "Chaotic Good", | |
| "Lawful Neutral", "True Neutral", "Chaotic Neutral", | |
| "Lawful Evil", "Neutral Evil", "Chaotic Evil" | |
| ], | |
| value="True Neutral", | |
| label="Alignment" | |
| ) | |
| components['char_background'] = gr.Textbox(label="Background", placeholder="e.g., Soldier, Sage, Folk Hero") | |
| with gr.Column(): | |
| gr.Markdown("### Ability Scores") | |
| gr.Markdown("*Standard array: 15, 14, 13, 12, 10, 8 | Or roll random with 3d6*") | |
| components['roll_stats_btn'] = gr.Button("🎲 Roll Random Stats (3d6)", variant="secondary", size="sm") | |
| with gr.Row(): | |
| components['str_slider'] = gr.Slider(minimum=3, maximum=18, value=10, step=1, label="Strength") | |
| components['dex_slider'] = gr.Slider(minimum=3, maximum=18, value=10, step=1, label="Dexterity") | |
| with gr.Row(): | |
| components['con_slider'] = gr.Slider(minimum=3, maximum=18, value=10, step=1, label="Constitution") | |
| components['int_slider'] = gr.Slider(minimum=3, maximum=18, value=10, step=1, label="Intelligence") | |
| with gr.Row(): | |
| components['wis_slider'] = gr.Slider(minimum=3, maximum=18, value=10, step=1, label="Wisdom") | |
| components['cha_slider'] = gr.Slider(minimum=3, maximum=18, value=10, step=1, label="Charisma") | |
| components['create_btn'] = gr.Button("Create Character", variant="primary", size="lg") | |
| components['create_output'] = gr.Textbox(label="Status", interactive=False) | |
| gr.Markdown(""" | |
| --- | |
| **Note:** Equipment and spells will be automatically assigned based on your class. | |
| Character images can be added later via the GAN generation feature (coming soon). | |
| """) | |
| return components | |