This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

core / web / src / lib / components / ui / Select.stories.svelte
3.8 kB 145 lines
1<script module lang="ts"> 2 import { resolve } from "$app/paths"; 3 import { defineMeta } from "@storybook/addon-svelte-csf"; 4 import Select from "./Select.svelte"; 5 import type { SelectOption } from "./selectField"; 6 7 const { Story } = defineMeta({ 8 title: "UI/Select", 9 component: Select, 10 tags: ["autodocs"], 11 argTypes: { 12 rich: { control: "boolean" }, 13 error: { control: "boolean" }, 14 disabled: { control: "boolean" } 15 }, 16 args: { 17 rich: false, 18 error: false, 19 disabled: false, 20 label: "Pick one", 21 value: "two", 22 options: [ 23 { value: "one", label: "One" }, 24 { value: "two", label: "Two" }, 25 { value: "three", label: "Three" } 26 ] satisfies SelectOption[] 27 } 28 }); 29 30 const refs: SelectOption[] = [ 31 { value: "main", hint: "default", group: "Branches" }, 32 { value: "next", group: "Branches" }, 33 { value: "feature/combobox", group: "Branches" }, 34 { value: "feature/storybook", group: "Branches" }, 35 { value: "v1.0.0", group: "Tags" }, 36 { value: "v0.9.0", group: "Tags" } 37 ]; 38 39 const many: SelectOption[] = Array.from({ length: 60 }, (_, index) => ({ 40 value: index === 0 ? "main" : `renovate/dependency-${index}`, 41 hint: index === 0 ? "default" : undefined, 42 group: "Branches" 43 })); 44</script> 45 46<!-- the same options render either way: `rich` only changes the control drawn around them --> 47<Story name="Native"> 48 {#snippet template(args)} 49 <div class="w-64"><Select {...args} /></div> 50 {/snippet} 51</Story> 52 53<Story name="Rich" args={{ rich: true }}> 54 {#snippet template(args)} 55 <div class="w-64"><Select {...args} /></div> 56 {/snippet} 57</Story> 58 59<Story name="Placeholder" args={{ value: "", placeholder: "Choose one" }}> 60 {#snippet template(args)} 61 <div class="w-64"><Select {...args} /></div> 62 {/snippet} 63</Story> 64 65<Story name="Grouped" args={{ options: refs, value: "main" }}> 66 {#snippet template(args)} 67 <div class="w-64"><Select {...args} /></div> 68 {/snippet} 69</Story> 70 71<Story name="Grouped rich" args={{ rich: true, options: refs, value: "main" }}> 72 {#snippet template(args)} 73 <div class="w-64"><Select {...args} /></div> 74 {/snippet} 75</Story> 76 77<Story 78 name="Rich value outside the options" 79 args={{ rich: true, options: refs, value: "0123456789abcdef" }} 80> 81 {#snippet template(args)} 82 <div class="w-64"><Select {...args} /></div> 83 {/snippet} 84</Story> 85 86<Story name="Rich scrolling list with a footer" args={{ rich: true, options: many, value: "main" }}> 87 {#snippet template(args)} 88 <div class="w-64"> 89 <Select {...args}> 90 {#snippet footer()} 91 <a href={resolve("/")} class="block p-2 typography-paragraph-small">View all branches</a> 92 {/snippet} 93 </Select> 94 </div> 95 {/snippet} 96</Story> 97 98<Story 99 name="Disabled options" 100 args={{ 101 rich: true, 102 value: "main", 103 options: [ 104 { value: "main", hint: "default", group: "Branches" }, 105 { value: "next", group: "Branches" }, 106 { value: "No tags found", disabled: true, group: "Tags" } 107 ] 108 }} 109> 110 {#snippet template(args)} 111 <div class="w-64"><Select {...args} /></div> 112 {/snippet} 113</Story> 114 115<Story name="Right aligned" args={{ rich: true, align: "right" }}> 116 {#snippet template(args)} 117 <div class="flex justify-end"> 118 <div class="w-64"><Select {...args} /></div> 119 </div> 120 {/snippet} 121</Story> 122 123<Story name="Error" args={{ error: true }}> 124 {#snippet template(args)} 125 <div class="w-64"><Select {...args} /></div> 126 {/snippet} 127</Story> 128 129<Story name="Error rich" args={{ rich: true, error: true }}> 130 {#snippet template(args)} 131 <div class="w-64"><Select {...args} /></div> 132 {/snippet} 133</Story> 134 135<Story name="Disabled" args={{ disabled: true }}> 136 {#snippet template(args)} 137 <div class="w-64"><Select {...args} /></div> 138 {/snippet} 139</Story> 140 141<Story name="Disabled rich" args={{ rich: true, disabled: true }}> 142 {#snippet template(args)} 143 <div class="w-64"><Select {...args} /></div> 144 {/snippet} 145</Story>