@reshape-biotech/design-system 1.2.5 → 1.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -1
- package/dist/app.css +97 -97
- package/dist/components/activity/Activity.stories.svelte +104 -104
- package/dist/components/activity/Activity.svelte +112 -112
- package/dist/components/avatar/Avatar.stories.svelte +23 -23
- package/dist/components/avatar/Avatar.svelte +54 -54
- package/dist/components/banner/Banner.stories.svelte +105 -105
- package/dist/components/banner/Banner.svelte +42 -42
- package/dist/components/button/Button.stories.svelte +61 -61
- package/dist/components/button/Button.svelte +95 -95
- package/dist/components/card/Card.stories.svelte +112 -112
- package/dist/components/card/Card.svelte +18 -18
- package/dist/components/checkbox/Checkbox.stories.svelte +8 -8
- package/dist/components/checkbox/Checkbox.svelte +17 -17
- package/dist/components/collapsible/Collapsible.stories.svelte +26 -26
- package/dist/components/collapsible/components/collapsible-content.svelte +20 -20
- package/dist/components/collapsible/components/collapsible-trigger.svelte +12 -12
- package/dist/components/combobox/Combobox.stories.svelte +412 -412
- package/dist/components/combobox/components/combobox-add.svelte +8 -8
- package/dist/components/combobox/components/combobox-content.svelte +39 -39
- package/dist/components/combobox/components/combobox-indicator.svelte +1 -1
- package/dist/components/datepicker/DatePicker.stories.svelte +196 -196
- package/dist/components/datepicker/DatePicker.svelte +173 -173
- package/dist/components/divider/Divider.stories.svelte +7 -7
- package/dist/components/divider/Divider.svelte +9 -9
- package/dist/components/drawer/Drawer.stories.svelte +51 -51
- package/dist/components/drawer/Drawer.svelte +33 -33
- package/dist/components/drawer/DrawerLabel.svelte +10 -10
- package/dist/components/dropdown/Dropdown.stories.svelte +210 -210
- package/dist/components/dropdown/Dropdown.svelte +57 -57
- package/dist/components/dropdown/components/DropdownContent.svelte +16 -16
- package/dist/components/dropdown/components/DropdownMenu.svelte +10 -10
- package/dist/components/dropdown/components/DropdownTrigger.svelte +37 -37
- package/dist/components/dropdown/components/OutlinedButton.svelte +9 -9
- package/dist/components/empty-content/EmptyContent.stories.svelte +38 -38
- package/dist/components/empty-content/EmptyContent.svelte +12 -12
- package/dist/components/graphs/bar-chart/BarChart.stories.svelte +91 -91
- package/dist/components/graphs/bar-chart/BarChart.svelte +147 -147
- package/dist/components/graphs/bar-chart/StackedBarChart.stories.svelte +57 -57
- package/dist/components/graphs/bar-chart/StackedBarChart.svelte +198 -199
- package/dist/components/graphs/chart/Chart.stories.svelte +96 -96
- package/dist/components/graphs/chart/Chart.svelte +207 -207
- package/dist/components/graphs/line/LineChart.stories.svelte +138 -138
- package/dist/components/graphs/line/LineChart.svelte +140 -142
- package/dist/components/graphs/matrix/Matrix.stories.svelte +117 -117
- package/dist/components/graphs/matrix/Matrix.svelte +141 -141
- package/dist/components/graphs/multiline/MultiLineChart.stories.svelte +168 -168
- package/dist/components/graphs/multiline/MultiLineChart.svelte +236 -236
- package/dist/components/graphs/scatterplot/Scatterplot.stories.svelte +84 -84
- package/dist/components/graphs/scatterplot/Scatterplot.svelte +302 -302
- package/dist/components/graphs/utils/duration.d.ts +1 -0
- package/dist/components/graphs/utils/duration.js +33 -0
- package/dist/components/graphs/utils/tooltipFormatter.js +1 -1
- package/dist/components/icon-button/IconButton.stories.svelte +64 -64
- package/dist/components/icon-button/IconButton.svelte +88 -88
- package/dist/components/icons/AnalysisIcon.stories.svelte +18 -18
- package/dist/components/icons/AnalysisIcon.svelte +96 -96
- package/dist/components/icons/Icon.stories.svelte +111 -111
- package/dist/components/icons/Icon.svelte +17 -17
- package/dist/components/icons/PrincipalIcon.svelte +59 -59
- package/dist/components/icons/custom/Halo.svelte +31 -31
- package/dist/components/icons/custom/Well.svelte +27 -27
- package/dist/components/icons/index.d.ts +3 -2
- package/dist/components/icons/index.js +3 -1
- package/dist/components/image/Image.svelte +42 -42
- package/dist/components/input/Input.stories.svelte +55 -55
- package/dist/components/input/Input.svelte +121 -121
- package/dist/components/label/Label.stories.svelte +18 -18
- package/dist/components/label/Label.svelte +11 -11
- package/dist/components/list/List.stories.svelte +84 -84
- package/dist/components/list/List.svelte +20 -20
- package/dist/components/logo/Logo.stories.svelte +15 -15
- package/dist/components/logo/Logo.svelte +30 -30
- package/dist/components/manual-cfu-counter/ManualCFUCounter.stories.svelte +102 -102
- package/dist/components/manual-cfu-counter/ManualCFUCounter.svelte +557 -565
- package/dist/components/manual-cfu-counter/test/ManualCFUCounterTestWrapper.svelte +11 -11
- package/dist/components/markdown/Markdown.stories.svelte +10 -10
- package/dist/components/markdown/Markdown.svelte +6 -6
- package/dist/components/modal/Modal.stories.svelte +29 -29
- package/dist/components/modal/Modal.svelte +71 -71
- package/dist/components/multi-cfu-counter/MultiCFUCounter.stories.svelte +215 -0
- package/dist/components/multi-cfu-counter/MultiCFUCounter.stories.svelte.d.ts +3 -0
- package/dist/components/multi-cfu-counter/MultiCFUCounter.svelte +662 -0
- package/dist/components/multi-cfu-counter/MultiCFUCounter.svelte.d.ts +32 -0
- package/dist/components/multi-cfu-counter/index.d.ts +1 -0
- package/dist/components/multi-cfu-counter/index.js +1 -0
- package/dist/components/multi-cfu-counter/test/MultiCFUCounterTestWrapper.svelte +28 -0
- package/dist/components/multi-cfu-counter/test/MultiCFUCounterTestWrapper.svelte.d.ts +20 -0
- package/dist/components/notification-popup/NotificationPopup.stories.svelte +18 -18
- package/dist/components/notification-popup/NotificationPopup.svelte +26 -26
- package/dist/components/notifications/Notifications.stories.svelte +101 -101
- package/dist/components/notifications/Notifications.svelte +9 -9
- package/dist/components/pill/Pill.stories.svelte +8 -8
- package/dist/components/pill/Pill.svelte +27 -27
- package/dist/components/progress-circle/ProgressCircle.stories.svelte +8 -8
- package/dist/components/progress-circle/ProgressCircle.svelte +54 -54
- package/dist/components/required-status-indicator/RequiredStatusIndicator.stories.svelte +18 -18
- package/dist/components/required-status-indicator/RequiredStatusIndicator.svelte +14 -14
- package/dist/components/segmented-control-buttons/ControlButton.svelte +36 -36
- package/dist/components/segmented-control-buttons/SegmentedControlButtons.stories.svelte +35 -35
- package/dist/components/segmented-control-buttons/SegmentedControlButtons.svelte +13 -13
- package/dist/components/select/Select.stories.svelte +77 -77
- package/dist/components/select/Select.svelte +114 -114
- package/dist/components/select-new/Select.stories.svelte +188 -188
- package/dist/components/select-new/components/Group.svelte +17 -17
- package/dist/components/select-new/components/MultiSelectTrigger.svelte +57 -57
- package/dist/components/select-new/components/SelectContent.svelte +22 -22
- package/dist/components/select-new/components/SelectGroupHeading.svelte +10 -10
- package/dist/components/select-new/components/SelectItem.svelte +25 -25
- package/dist/components/select-new/components/SelectTrigger.svelte +38 -38
- package/dist/components/sjsf-wrappers/SjsfNumberInputWrapper.svelte +76 -76
- package/dist/components/sjsf-wrappers/SjsfNumberInputWrapper.svelte.d.ts +1 -1
- package/dist/components/sjsf-wrappers/SjsfTextInputWrapper.svelte +53 -53
- package/dist/components/sjsf-wrappers/SjsfTextInputWrapper.svelte.d.ts +1 -1
- package/dist/components/sjsf-wrappers/sjsfCustomTheme.js +1 -1
- package/dist/components/skeleton-loader/SkeletonLoader.stories.svelte +32 -32
- package/dist/components/skeleton-loader/SkeletonLoader.svelte +10 -10
- package/dist/components/skeleton-loader/StatcardSkeleton.svelte +9 -9
- package/dist/components/skeleton-loader/components/Skeleton.svelte +7 -7
- package/dist/components/skeleton-loader/components/SkeletonImage.svelte +12 -12
- package/dist/components/slider/Slider.stories.svelte +23 -23
- package/dist/components/slider/Slider.svelte +107 -107
- package/dist/components/spinner/Spinner.stories.svelte +8 -8
- package/dist/components/spinner/Spinner.svelte +18 -18
- package/dist/components/stat-card/StatCard.stories.svelte +26 -26
- package/dist/components/stat-card/StatCard.svelte +128 -128
- package/dist/components/status-badge/StatusBadge.stories.svelte +365 -365
- package/dist/components/status-badge/StatusBadge.svelte +54 -54
- package/dist/components/stepper/Stepper.stories.svelte +219 -219
- package/dist/components/stepper/components/stepper-root.svelte +12 -12
- package/dist/components/stepper/components/stepper-step.svelte +83 -83
- package/dist/components/table/Table.stories.svelte +87 -87
- package/dist/components/table/Table.svelte +32 -32
- package/dist/components/table/components/TBody.svelte +7 -7
- package/dist/components/table/components/THead.svelte +7 -7
- package/dist/components/table/components/Td.svelte +8 -8
- package/dist/components/table/components/Th.svelte +8 -8
- package/dist/components/table/components/Tr.svelte +11 -11
- package/dist/components/tabs/Tabs.stories.svelte +20 -20
- package/dist/components/tabs/Tabs.svelte +8 -8
- package/dist/components/tabs/components/Content.svelte +8 -8
- package/dist/components/tabs/components/Tab.svelte +14 -14
- package/dist/components/tabs/components/Tabs.svelte +7 -7
- package/dist/components/tag/Tag.stories.svelte +57 -57
- package/dist/components/tag/Tag.svelte +95 -95
- package/dist/components/textarea/Textarea.stories.svelte +70 -70
- package/dist/components/textarea/Textarea.svelte +76 -76
- package/dist/components/toast/Toast.stories.svelte +204 -204
- package/dist/components/toast/Toast.svelte +53 -53
- package/dist/components/toggle/Toggle.stories.svelte +9 -9
- package/dist/components/toggle/Toggle.svelte +53 -53
- package/dist/components/toggle-icon-button/ToggleIconButton.stories.svelte +152 -152
- package/dist/components/toggle-icon-button/ToggleIconButton.svelte +99 -99
- package/dist/components/tooltip/Tooltip.stories.svelte +105 -105
- package/dist/components/tooltip/Tooltip.svelte +26 -26
- package/dist/fonts/index.js +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.js +5 -1
- package/dist/notifications.d.ts +1 -4
- package/dist/notifications.js +1 -1
- package/dist/styles.d.ts +1 -0
- package/dist/styles.js +4 -0
- package/dist/tailwind-safelist.js +406 -398
- package/dist/tailwind.preset.d.ts +4 -0
- package/dist/tailwind.preset.js +10 -10
- package/dist/tokens/colors.d.ts +246 -0
- package/dist/tokens/colors.js +139 -0
- package/dist/tokens/index.d.ts +3 -0
- package/dist/tokens/index.js +5 -0
- package/dist/tokens/typography.d.ts +48 -0
- package/dist/tokens/typography.js +48 -0
- package/dist/tokens.d.ts +16 -252
- package/dist/tokens.js +33 -164
- package/dist/types/fonts.d.ts +2 -2
- package/package.json +398 -78
|
@@ -1,219 +1,219 @@
|
|
|
1
1
|
<script module lang="ts">
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
import { defineMeta } from '@storybook/addon-svelte-csf';
|
|
3
|
+
import * as Select from './index';
|
|
4
|
+
import { Icon, type IconName } from '../icons';
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
const { Story } = defineMeta({
|
|
7
|
+
title: 'Design System/Select(New)',
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
9
|
+
argTypes: {
|
|
10
|
+
placeholder: { control: 'text', defaultValue: 'Select an option...' },
|
|
11
|
+
disabled: { control: 'boolean', defaultValue: false },
|
|
12
|
+
multiple: { control: 'boolean', defaultValue: false },
|
|
13
|
+
},
|
|
14
|
+
});
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
16
|
+
const foodGroups = [
|
|
17
|
+
{ value: 'fruits', label: 'Fruits' },
|
|
18
|
+
{ value: 'vegetables', label: 'Vegetables' },
|
|
19
|
+
{ value: 'grains', label: 'Grains' },
|
|
20
|
+
{ value: 'protein', label: 'Protein Foods' },
|
|
21
|
+
{ value: 'dairy', label: 'Dairy' },
|
|
22
|
+
];
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
24
|
+
const moreFruits = [
|
|
25
|
+
{ value: 'apple', label: 'Apple' },
|
|
26
|
+
{ value: 'banana', label: 'Banana' },
|
|
27
|
+
{ value: 'blueberry', label: 'Blueberry' },
|
|
28
|
+
{ value: 'grapes', label: 'Grapes' },
|
|
29
|
+
{ value: 'mango', label: 'Mango' },
|
|
30
|
+
];
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
32
|
+
let selectedValueSingle = $state<string | undefined>(undefined);
|
|
33
|
+
let selectedValueMultiple = $state<string[]>([]);
|
|
34
|
+
let selectedValueSinglePreselected = $state<string | undefined>('vegetables');
|
|
35
|
+
let selectedValueMultiplePreselected = $state<string[]>(['fruits', 'grains']);
|
|
36
36
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
37
|
+
const customIconItems = [
|
|
38
|
+
{ value: 'insect_count', label: 'Insect count', iconName: 'Hash' },
|
|
39
|
+
{ value: 'insect_health', label: 'Insect health', iconName: 'Hash' },
|
|
40
|
+
{ value: 'leaf_area', label: 'Leaf area', iconName: 'Ruler' },
|
|
41
|
+
{ value: 'time_spent', label: 'Time spent on leaf', iconName: 'Timer' },
|
|
42
|
+
];
|
|
43
|
+
let selectedCustomItems = $state<string[]>(['insect_count', 'leaf_area']);
|
|
44
44
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
45
|
+
const handleRemoveCustomItem = (itemValue: string) => {
|
|
46
|
+
selectedCustomItems = selectedCustomItems.filter((v) => v !== itemValue);
|
|
47
|
+
};
|
|
48
|
+
const handleRemoveValueMultiple = (itemValue: string) => {
|
|
49
|
+
selectedValueMultiple = selectedValueMultiple.filter((v) => v !== itemValue);
|
|
50
|
+
};
|
|
51
|
+
const handleRemoveValueMultiplePreselected = (itemValue: string) => {
|
|
52
|
+
selectedValueMultiplePreselected = selectedValueMultiplePreselected.filter(
|
|
53
|
+
(v) => v !== itemValue
|
|
54
|
+
);
|
|
55
|
+
};
|
|
56
56
|
</script>
|
|
57
57
|
|
|
58
58
|
<Story name="Default (Single Select)" asChild>
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
59
|
+
<div class="p-4">
|
|
60
|
+
<Select.Root bind:value={selectedValueSingle} items={foodGroups} type="single" open>
|
|
61
|
+
<Select.Trigger
|
|
62
|
+
class="w-[250px]"
|
|
63
|
+
placeholder={'Select a food group'}
|
|
64
|
+
displayValue={foodGroups.find((f) => f.value === selectedValueSingle)?.label}
|
|
65
|
+
/>
|
|
66
66
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
67
|
+
<Select.Content>
|
|
68
|
+
{#each foodGroups as item (item.value)}
|
|
69
|
+
<Select.Item value={item.value} label={item.label} />
|
|
70
|
+
{/each}
|
|
71
|
+
</Select.Content>
|
|
72
|
+
</Select.Root>
|
|
73
|
+
<div class="mt-2 rounded bg-gray-100 p-2 text-sm">
|
|
74
|
+
Selected: {selectedValueSingle ?? 'Nothing'}
|
|
75
|
+
</div>
|
|
76
|
+
</div>
|
|
77
77
|
</Story>
|
|
78
78
|
|
|
79
79
|
<Story name="With Groups (Single Select)" asChild>
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
80
|
+
<div class="p-4">
|
|
81
|
+
<Select.Root bind:value={selectedValueSingle} items={moreFruits} type="single">
|
|
82
|
+
<Select.Trigger
|
|
83
|
+
class="w-[250px]"
|
|
84
|
+
placeholder={'Select a fruit'}
|
|
85
|
+
displayValue={moreFruits.find((f) => f.value === selectedValueSingle)?.label}
|
|
86
|
+
/>
|
|
87
|
+
<Select.Portal>
|
|
88
|
+
<Select.Content>
|
|
89
|
+
<Select.Group label="Fruits">
|
|
90
|
+
{#each moreFruits.slice(0, 2) as item (item.value)}
|
|
91
|
+
<Select.Item value={item.value} label={item.label} />
|
|
92
|
+
{/each}
|
|
93
|
+
</Select.Group>
|
|
94
|
+
<Select.Group label="More Fruits">
|
|
95
|
+
{#each moreFruits.slice(2) as item (item.value)}
|
|
96
|
+
<Select.Item value={item.value} label={item.label} />
|
|
97
|
+
{/each}
|
|
98
|
+
</Select.Group>
|
|
99
|
+
</Select.Content>
|
|
100
|
+
</Select.Portal>
|
|
101
|
+
</Select.Root>
|
|
102
|
+
<div class="mt-2 rounded bg-gray-100 p-2 text-sm">
|
|
103
|
+
Selected: {selectedValueSingle ?? 'Nothing'}
|
|
104
|
+
</div>
|
|
105
|
+
</div>
|
|
106
106
|
</Story>
|
|
107
107
|
|
|
108
108
|
<Story name="Multiple Select Example" asChild>
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
109
|
+
<div class="p-4">
|
|
110
|
+
<Select.Root bind:value={selectedValueMultiple} items={foodGroups} type="multiple">
|
|
111
|
+
<Select.MultiSelectTrigger
|
|
112
|
+
selectedValues={selectedValueMultiple}
|
|
113
|
+
items={foodGroups}
|
|
114
|
+
onRemoveItem={handleRemoveValueMultiple}
|
|
115
|
+
/>
|
|
116
|
+
<Select.Portal>
|
|
117
|
+
<Select.Content>
|
|
118
|
+
{#each foodGroups as item (item.value)}
|
|
119
|
+
<Select.Item value={item.value} label={item.label} />
|
|
120
|
+
{/each}
|
|
121
|
+
</Select.Content>
|
|
122
|
+
</Select.Portal>
|
|
123
|
+
</Select.Root>
|
|
124
|
+
<div class="mt-2 rounded bg-gray-100 p-2 text-sm">
|
|
125
|
+
Selected: {selectedValueMultiple.join(', ') || 'Nothing'}
|
|
126
|
+
</div>
|
|
127
|
+
</div>
|
|
128
128
|
</Story>
|
|
129
129
|
|
|
130
130
|
<Story name="Disabled Select" asChild>
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
131
|
+
<div class="p-4">
|
|
132
|
+
<Select.Root items={foodGroups} type="single" disabled={true}>
|
|
133
|
+
<Select.Trigger class="w-[250px]" placeholder={'Cannot select (disabled)'} disabled={true} />
|
|
134
|
+
<Select.Portal>
|
|
135
|
+
<Select.Content>
|
|
136
|
+
{#each foodGroups as item (item.value)}
|
|
137
|
+
<Select.Item value={item.value} label={item.label} disabled={true} />
|
|
138
|
+
{/each}
|
|
139
|
+
</Select.Content>
|
|
140
|
+
</Select.Portal>
|
|
141
|
+
</Select.Root>
|
|
142
|
+
<div class="mt-2 rounded bg-gray-100 p-2 text-sm">Selected: Nothing (disabled)</div>
|
|
143
|
+
</div>
|
|
144
144
|
</Story>
|
|
145
145
|
|
|
146
146
|
<Story name="Pre-selected (Single Select)" asChild>
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
147
|
+
<div class="p-4">
|
|
148
|
+
<Select.Root bind:value={selectedValueSinglePreselected} items={foodGroups} type="single">
|
|
149
|
+
<Select.Trigger
|
|
150
|
+
class="w-[250px]"
|
|
151
|
+
placeholder={'Select a food group'}
|
|
152
|
+
displayValue={foodGroups.find((f) => f.value === selectedValueSinglePreselected)?.label}
|
|
153
|
+
/>
|
|
154
|
+
<Select.Portal>
|
|
155
|
+
<Select.Content>
|
|
156
|
+
{#each foodGroups as item (item.value)}
|
|
157
|
+
<Select.Item value={item.value} label={item.label} />
|
|
158
|
+
{/each}
|
|
159
|
+
</Select.Content>
|
|
160
|
+
</Select.Portal>
|
|
161
|
+
</Select.Root>
|
|
162
|
+
<div class="mt-2 rounded bg-gray-100 p-2 text-sm">
|
|
163
|
+
Selected: {selectedValueSinglePreselected ?? 'Nothing'}
|
|
164
|
+
</div>
|
|
165
|
+
</div>
|
|
166
166
|
</Story>
|
|
167
167
|
|
|
168
168
|
<Story name="Pre-selected (Multiple Select)" asChild>
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
169
|
+
<div class="p-4">
|
|
170
|
+
<Select.Root bind:value={selectedValueMultiplePreselected} items={foodGroups} type="multiple">
|
|
171
|
+
<Select.MultiSelectTrigger
|
|
172
|
+
selectedValues={selectedValueMultiplePreselected}
|
|
173
|
+
items={foodGroups}
|
|
174
|
+
onRemoveItem={handleRemoveValueMultiplePreselected}
|
|
175
|
+
/>
|
|
176
|
+
<Select.Portal>
|
|
177
|
+
<Select.Content>
|
|
178
|
+
{#each foodGroups as item (item.value)}
|
|
179
|
+
<Select.Item value={item.value} label={item.label} />
|
|
180
|
+
{/each}
|
|
181
|
+
</Select.Content>
|
|
182
|
+
</Select.Portal>
|
|
183
|
+
</Select.Root>
|
|
184
|
+
<div class="mt-2 rounded bg-gray-100 p-2 text-sm">
|
|
185
|
+
Selected: {selectedValueMultiplePreselected.join(', ') || 'Nothing'}
|
|
186
|
+
</div>
|
|
187
|
+
</div>
|
|
188
188
|
</Story>
|
|
189
189
|
|
|
190
190
|
<Story name="Multiple Select with Custom Icons and Dismissible Tags" asChild>
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
191
|
+
<div class="p-4">
|
|
192
|
+
<Select.Root bind:value={selectedCustomItems} items={customIconItems} type="multiple">
|
|
193
|
+
<Select.MultiSelectTrigger
|
|
194
|
+
class="w-[350px]"
|
|
195
|
+
selectedValues={selectedCustomItems}
|
|
196
|
+
items={customIconItems}
|
|
197
|
+
placeholder="Select metrics..."
|
|
198
|
+
onRemoveItem={handleRemoveCustomItem}
|
|
199
|
+
/>
|
|
200
|
+
<Select.Portal>
|
|
201
|
+
<Select.Content>
|
|
202
|
+
{#each customIconItems as item (item.value)}
|
|
203
|
+
<Select.Item value={item.value} label={item.label}>
|
|
204
|
+
{#snippet children()}
|
|
205
|
+
<div class="flex items-center gap-2">
|
|
206
|
+
<Icon iconName={item.iconName as IconName} class="h-4 w-4" />
|
|
207
|
+
<span>{item.label}</span>
|
|
208
|
+
</div>
|
|
209
|
+
{/snippet}
|
|
210
|
+
</Select.Item>
|
|
211
|
+
{/each}
|
|
212
|
+
</Select.Content>
|
|
213
|
+
</Select.Portal>
|
|
214
|
+
</Select.Root>
|
|
215
|
+
<div class="mt-2 rounded bg-neutral p-2 text-sm">
|
|
216
|
+
Selected Values: {selectedCustomItems.join(', ') || 'Nothing'}
|
|
217
|
+
</div>
|
|
218
|
+
</div>
|
|
219
219
|
</Story>
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
import { Select as SelectPrimitive } from 'bits-ui';
|
|
3
|
+
import type { Snippet } from 'svelte';
|
|
4
|
+
import type { GroupProps as PrimitiveGroupProps } from '../types';
|
|
5
|
+
import GroupHeading from './SelectGroupHeading.svelte';
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
7
|
+
interface Props extends PrimitiveGroupProps {
|
|
8
|
+
label?: string;
|
|
9
|
+
children: Snippet;
|
|
10
|
+
class?: string;
|
|
11
|
+
contentClass?: string;
|
|
12
|
+
}
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
let { label, children, class: className, contentClass, ...restProps }: Props = $props();
|
|
15
15
|
</script>
|
|
16
16
|
|
|
17
17
|
<SelectPrimitive.Group class={className} {...restProps}>
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
18
|
+
{#if label}
|
|
19
|
+
<GroupHeading>{label}</GroupHeading>
|
|
20
|
+
{/if}
|
|
21
|
+
<div class={contentClass}>
|
|
22
|
+
{@render children()}
|
|
23
|
+
</div>
|
|
24
24
|
</SelectPrimitive.Group>
|
|
@@ -1,66 +1,66 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
import * as Select from '../index';
|
|
3
|
+
import { Icon, type IconName } from '../../icons';
|
|
4
|
+
import IconButton from '../../icon-button/IconButton.svelte';
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
type ItemType = {
|
|
7
|
+
value: string;
|
|
8
|
+
label: string;
|
|
9
|
+
iconName?: IconName | string;
|
|
10
|
+
};
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
12
|
+
interface Props {
|
|
13
|
+
selectedValues: string[];
|
|
14
|
+
items: ItemType[];
|
|
15
|
+
onRemoveItem: (itemValue: string) => void;
|
|
16
|
+
placeholder?: string;
|
|
17
|
+
class?: string;
|
|
18
|
+
[key: string]: any;
|
|
19
|
+
}
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
21
|
+
let {
|
|
22
|
+
selectedValues,
|
|
23
|
+
items,
|
|
24
|
+
onRemoveItem,
|
|
25
|
+
placeholder = 'Select items...',
|
|
26
|
+
class: className,
|
|
27
|
+
...restProps
|
|
28
|
+
}: Props = $props();
|
|
29
29
|
</script>
|
|
30
30
|
|
|
31
31
|
<Select.Trigger
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
32
|
+
class={'bg-background ring-offset-background placeholder:text-muted-foreground focus:ring-ring flex h-10 w-full items-center justify-between rounded-md border border-input px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50' +
|
|
33
|
+
(className || '')}
|
|
34
|
+
{...restProps}
|
|
35
35
|
>
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
36
|
+
{#if selectedValues.length === 0}
|
|
37
|
+
<span class="flex-grow px-2 text-tertiary">{placeholder}</span>
|
|
38
|
+
{:else}
|
|
39
|
+
<div class="flex flex-grow flex-wrap items-center gap-1">
|
|
40
|
+
{#each selectedValues as selectedVal (selectedVal)}
|
|
41
|
+
{@const item = items.find((i) => i.value === selectedVal)}
|
|
42
|
+
{#if item}
|
|
43
|
+
<div
|
|
44
|
+
class="flex w-fit items-center gap-1 rounded-sm bg-neutral px-1 py-0.5 text-sm"
|
|
45
|
+
aria-label={`Selected item ${item.label}`}
|
|
46
|
+
>
|
|
47
|
+
{#if item.iconName}
|
|
48
|
+
<Icon iconName={item.iconName as IconName} />
|
|
49
|
+
{/if}
|
|
50
|
+
<span>{item.label}</span>
|
|
51
|
+
<IconButton
|
|
52
|
+
type="button"
|
|
53
|
+
aria-label={`Remove ${item.label}`}
|
|
54
|
+
onclick={() => onRemoveItem(item.value)}
|
|
55
|
+
size="xs"
|
|
56
|
+
variant="transparent"
|
|
57
|
+
class="text-primary focus:outline-none"
|
|
58
|
+
>
|
|
59
|
+
<Icon iconName="X" />
|
|
60
|
+
</IconButton>
|
|
61
|
+
</div>
|
|
62
|
+
{/if}
|
|
63
|
+
{/each}
|
|
64
|
+
</div>
|
|
65
|
+
{/if}
|
|
66
66
|
</Select.Trigger>
|
|
@@ -1,33 +1,33 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
import { Select as SelectPrimitive } from 'bits-ui';
|
|
3
|
+
import type { ContentProps } from '../types';
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
import type { Snippet } from 'svelte';
|
|
6
|
+
import Icon from '../../icons/Icon.svelte';
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
interface Props extends ContentProps {
|
|
9
|
+
children: Snippet;
|
|
10
|
+
class?: string;
|
|
11
|
+
sideOffset?: number;
|
|
12
|
+
}
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
let { class: className = '', sideOffset = 4, children, ...restProps }: Props = $props();
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
const baseClasses = `
|
|
17
17
|
w-[var(--bits-select-anchor-width)] relative z-50 min-w-[8rem] overflow-hidden rounded-md border bg-surface text-surface-foreground shadow-md
|
|
18
18
|
`;
|
|
19
19
|
</script>
|
|
20
20
|
|
|
21
21
|
<SelectPrimitive.Portal>
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
22
|
+
<SelectPrimitive.Content {...restProps} {sideOffset} class={baseClasses + ' ' + className}>
|
|
23
|
+
<SelectPrimitive.ScrollUpButton class="flex justify-center">
|
|
24
|
+
<Icon iconName="CaretUp" />
|
|
25
|
+
</SelectPrimitive.ScrollUpButton>
|
|
26
|
+
<SelectPrimitive.Viewport class="p-1 ">
|
|
27
|
+
{@render children()}
|
|
28
|
+
</SelectPrimitive.Viewport>
|
|
29
|
+
<SelectPrimitive.ScrollDownButton class="flex justify-center">
|
|
30
|
+
<Icon iconName="CaretDown" />
|
|
31
|
+
</SelectPrimitive.ScrollDownButton>
|
|
32
|
+
</SelectPrimitive.Content>
|
|
33
33
|
</SelectPrimitive.Portal>
|