|
|
| interface Inputs {
|
| input: boolean;
|
| required?: boolean;
|
| placeholder?: string;
|
| validate?: boolean;
|
| validateString?: string;
|
| }
|
| interface SelectOptions {
|
| value: string;
|
| name: string;
|
| disabled: boolean;
|
| }
|
|
|
| interface Both {
|
| enabled: boolean;
|
| showOnSelect?: {
|
| value: string;
|
| };
|
| showOnInput?: boolean;
|
| }
|
| interface Selects {
|
| select: boolean;
|
| name?: string;
|
| multiple?: boolean;
|
| options?: SelectOptions[];
|
| }
|
| interface Buttons {
|
| name: string;
|
| id: string;
|
| }
|
| interface Props {
|
| title: string;
|
| description: string;
|
| input: Inputs;
|
| select: Selects;
|
| both: Both;
|
| button: Buttons;
|
| }
|
|
|
| const { title, description, input, select, both, button } = Astro.props;
|
|
|
|
|
| <div class={`${both.enabled ? "h-72" : "h-64"} w-64 rounded-3xl bg-navbar-color flex flex-col items-center p-4`}>
|
| <h1 class="text-3xl font-bold mb-2"> { title } </h1>
|
| <p class="text-md w-full text-ellipsis text-center"> { description } </p>
|
| <div class="w-full h-full flex-grow flex justify-center items-center flex-col gap-4">
|
| <!
|
| {(input.input && !both.enabled) &&
|
| <input class="text-md w-full h-10 p-2 bg-input border border-input-border-color rounded-md text-input-text" required={input.required} placeholder={input.placeholder}></input>
|
| }
|
| <!
|
| {select.select &&
|
| <select id={select.name?.replace(/[^a-zA-Z0-9]/g, '').toLowerCase()} class="text-md w-full h-10 p-2 bg-input border border-input-border-color rounded-md text-input-text" multiple={select.multiple} name={select.name}>
|
| {select.options!.map((option) => (
|
| <option id={option.value} disabled={option.disabled} value={option.value}>{option.name}</option>
|
| ))}
|
| </select>
|
| }
|
| {(both.enabled && both.showOnSelect?.value) &&
|
| <input id={'inputOnSelectValue' + both.showOnSelect?.value} class="hidden text-md w-full h-10 p-2 bg-input border border-input-border-color rounded-md text-input-text" required={input.required} placeholder={input.placeholder}></input>
|
| }
|
| <button id={button.id.replace(/[^a-zA-Z0-9]/g, '').toLowerCase()} class="w-36 h-10 rounded-md border border-input-border-color text-input-text bg-input hover:border-input hover:bg-input-border-color hover:text-input hover:font-bold active:bg-input active:text-input-text transition-all duration-200">
|
| {button.name}
|
| </button>
|
| </div>
|
| </div>
|
|
|