From 66b671da940c845bde58c5c92d846b2008f96919 Mon Sep 17 00:00:00 2001 From: Micheal Parks <103450731+micheal-parks@users.noreply.github.com> Date: Wed, 21 Feb 2024 14:50:04 -0500 Subject: [PATCH] Design maintenance: add radio icon and description options (#485) --- packages/core/package.json | 2 +- packages/core/src/lib/radio.svelte | 63 +++++++++++++------ packages/storybook/src/stories/radio.mdx | 8 +++ .../src/stories/radio.stories.svelte | 45 +++++++++++++ 4 files changed, 99 insertions(+), 19 deletions(-) diff --git a/packages/core/package.json b/packages/core/package.json index 8b1b7dd4..dd9a6753 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@viamrobotics/prime-core", - "version": "0.0.91", + "version": "0.0.92", "publishConfig": { "access": "public" }, diff --git a/packages/core/src/lib/radio.svelte b/packages/core/src/lib/radio.svelte index 122a2aae..57a08061 100644 --- a/packages/core/src/lib/radio.svelte +++ b/packages/core/src/lib/radio.svelte @@ -19,8 +19,17 @@ import Label from '$lib/label.svelte'; import { Icon, type IconName } from '$lib/icon'; import { preventHandler, preventKeyboardHandler } from '$lib/prevent-handler'; +interface Option { + label: string; + value: string; + description?: string; + icon?: IconName; +} + +type Options = (string | Option)[]; + /** The set of options that is available in the radio button. */ -export let options: string[]; +export let options: Options; /** The name for the inputs in the fieldset of radio options. */ export let name: string; @@ -41,11 +50,13 @@ export let direction: 'col' | 'row' = 'col'; let extraClasses: cx.Argument = ''; export { extraClasses as cx }; -$: isSelected = (option: string) => option === selected; +let optionsInternal: Option[] = []; + +$: optionsInternal = options.map((option) => + typeof option === 'string' ? { label: option, value: option } : option +); $: handleDisabled = preventHandler(disabled); $: handleDisabledKeydown = preventKeyboardHandler(disabled); -$: getIcon = (option: string): IconName => - isSelected(option) ? 'radiobox-marked' : 'radiobox-blank';
{#if $$slots.legend} {/if}
- {#each options as option} + {#each optionsInternal as { label, value, description, icon }} + {@const isSelected = value === selected} + {@const radioIcon = isSelected ? 'radiobox-marked' : 'radiobox-blank'} {/each} diff --git a/packages/storybook/src/stories/radio.mdx b/packages/storybook/src/stories/radio.mdx index 6fc185ec..f536898a 100644 --- a/packages/storybook/src/stories/radio.mdx +++ b/packages/storybook/src/stories/radio.mdx @@ -26,3 +26,11 @@ import { Radio } from '@viamrobotics/prime-core'; + + + + + + + + diff --git a/packages/storybook/src/stories/radio.stories.svelte b/packages/storybook/src/stories/radio.stories.svelte index 1346679a..d0580948 100644 --- a/packages/storybook/src/stories/radio.stories.svelte +++ b/packages/storybook/src/stories/radio.stories.svelte @@ -44,3 +44,48 @@ import { Radio } from '@viamrobotics/prime-core'; Favorite animal + + + + Upload model + + + + + + Visibility + +