gradio/js/radio/shared/Radio.svelte
pngwn 1419538ea7
Refactor component directories (#5074)
* asd

* changes

* fix everything

* cleanup

* add changeset

* fix casing

* lockfile

* fix casing

* fix ci, enable linting

* fix test

* add changeset

* add changeset

* delete changeset

* fix dirs

* fix casing

* fix notebooks

* fix casing

* fix casing

* fix casing

* fix casing

* fix casing

* fix casing

* fix casing

* fix casing

---------

Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com>
2023-08-03 23:01:18 +01:00

126 lines
3.0 KiB
Svelte

<script lang="ts">
import { createEventDispatcher, afterUpdate } from "svelte";
import { BlockTitle } from "@gradio/atoms";
import type { SelectData } from "@gradio/utils";
export let value: string | null;
export let value_is_output = false;
export let choices: string[];
export let disabled = false;
export let label: string;
export let info: string | undefined = undefined;
export let show_label = true;
export let elem_id: string;
const dispatch = createEventDispatcher<{
change: string | null;
input: undefined;
select: SelectData;
}>();
function handle_change(): void {
dispatch("change", value);
if (!value_is_output) {
dispatch("input");
}
}
afterUpdate(() => {
value_is_output = false;
});
$: value, handle_change();
</script>
<BlockTitle {show_label} {info}>{label}</BlockTitle>
<div class="wrap">
{#each choices as choice, i (i)}
<label
class:disabled
class:selected={value === choice}
data-testid={`${choice}-radio-label`}
>
<input
{disabled}
bind:group={value}
on:input={() => dispatch("select", { value: choice, index: i })}
type="radio"
name="radio-{elem_id}"
value={choice}
/>
<span class="ml-2">{choice}</span>
</label>
{/each}
</div>
<style>
.wrap {
display: flex;
flex-wrap: wrap;
gap: var(--checkbox-label-gap);
}
label {
display: flex;
align-items: center;
transition: var(--button-transition);
cursor: pointer;
box-shadow: var(--checkbox-label-shadow);
border: var(--checkbox-label-border-width) solid
var(--checkbox-label-border-color);
border-radius: var(--button-small-radius);
background: var(--checkbox-label-background-fill);
padding: var(--checkbox-label-padding);
color: var(--checkbox-label-text-color);
font-weight: var(--checkbox-label-text-weight);
font-size: var(--checkbox-label-text-size);
line-height: var(--line-md);
}
label:hover {
background: var(--checkbox-label-background-fill-hover);
}
label:focus {
background: var(--checkbox-label-background-fill-focus);
}
label.selected {
background: var(--checkbox-label-background-fill-selected);
color: var(--checkbox-label-text-color-selected);
}
label > * + * {
margin-left: var(--size-2);
}
input {
--ring-color: transparent;
position: relative;
box-shadow: var(--checkbox-shadow);
border: var(--checkbox-border-width) solid var(--checkbox-border-color);
border-radius: var(--radius-full);
background-color: var(--checkbox-background-color);
line-height: var(--line-sm);
}
input:checked,
input:checked:hover,
input:checked:focus {
border-color: var(--checkbox-border-color-selected);
background-image: var(--radio-circle);
background-color: var(--checkbox-background-color-selected);
}
input:hover {
border-color: var(--checkbox-border-color-hover);
background-color: var(--checkbox-background-color-hover);
}
input:focus {
border-color: var(--checkbox-border-color-focus);
background-color: var(--checkbox-background-color-focus);
}
input[disabled],
.disabled {
cursor: not-allowed;
}
</style>