@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,19 +1,19 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
import { Select as SelectPrimitive } from 'bits-ui';
|
|
3
|
+
import type { GroupHeadingProps } from '../types';
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
import type { Snippet } from 'svelte';
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
interface Props extends GroupHeadingProps {
|
|
8
|
+
children: Snippet;
|
|
9
|
+
class?: string;
|
|
10
|
+
}
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
let { class: className = '', children, ...restProps }: Props = $props();
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
const baseClasses = 'py-1.5 pl-2 pr-2 text-sm font-semibold text-muted-foreground';
|
|
15
15
|
</script>
|
|
16
16
|
|
|
17
17
|
<SelectPrimitive.GroupHeading {...restProps} class="{baseClasses} {className}">
|
|
18
|
-
|
|
18
|
+
{@render children()}
|
|
19
19
|
</SelectPrimitive.GroupHeading>
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
import { Select as SelectPrimitive } from 'bits-ui';
|
|
3
|
+
import type { ItemProps, ItemSlotProps } 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
|
-
|
|
8
|
+
interface Props extends ItemProps {
|
|
9
|
+
children?: Snippet<[ItemSlotProps]>;
|
|
10
|
+
class?: string;
|
|
11
|
+
}
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
let { class: className = '', children, ...restProps }: Props = $props();
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
const baseClasses = `
|
|
16
16
|
relative flex w-full h-auto gap-2 cursor-default select-none items-center justify-between rounded-lg p-3 text-sm outline-none
|
|
17
17
|
focus:bg-neutral focus:text-accent-foreground
|
|
18
18
|
data-[disabled]:pointer-events-none data-[disabled]:opacity-50
|
|
@@ -21,19 +21,19 @@
|
|
|
21
21
|
</script>
|
|
22
22
|
|
|
23
23
|
<SelectPrimitive.Item {...restProps} class={baseClasses + ' ' + className}>
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
24
|
+
{#snippet children(params: ItemSlotProps)}
|
|
25
|
+
{#if children}
|
|
26
|
+
{@render children(params)}
|
|
27
|
+
{:else}
|
|
28
|
+
<span>
|
|
29
|
+
{restProps.label ??
|
|
30
|
+
(typeof restProps.value === 'string' || typeof restProps.value === 'number'
|
|
31
|
+
? restProps.value
|
|
32
|
+
: 'Item')}</span
|
|
33
|
+
>
|
|
34
|
+
{/if}
|
|
35
|
+
{#if params.selected}
|
|
36
|
+
<Icon iconName="Check" color="accent" />
|
|
37
|
+
{/if}
|
|
38
|
+
{/snippet}
|
|
39
39
|
</SelectPrimitive.Item>
|
|
@@ -1,48 +1,48 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
import { Select as SelectPrimitive } from 'bits-ui';
|
|
3
|
+
import type { TriggerProps, IconSnippet } from '../types';
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
import type { Snippet } from 'svelte';
|
|
6
|
+
import { Icon } from '../../icons';
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
8
|
+
interface Props extends TriggerProps {
|
|
9
|
+
TriggerIcon?: IconSnippet;
|
|
10
|
+
children?: Snippet;
|
|
11
|
+
class?: string;
|
|
12
|
+
placeholder?: string;
|
|
13
|
+
displayValue?: string;
|
|
14
|
+
}
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
16
|
+
let {
|
|
17
|
+
class: className = '',
|
|
18
|
+
TriggerIcon = undefined,
|
|
19
|
+
children,
|
|
20
|
+
placeholder = 'Select an option',
|
|
21
|
+
displayValue = undefined,
|
|
22
|
+
...restProps
|
|
23
|
+
}: Props = $props();
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
const baseClasses =
|
|
26
|
+
'flex h-10 w-full items-center justify-between rounded-lg border border-input bg-surface p-2 text-sm placeholder:text-tertiary focus:outline-none hover:border-hover focus:border-accent disabled:cursor-not-allowed disabled:opacity-50 transition-colors shadow-input';
|
|
27
27
|
</script>
|
|
28
28
|
|
|
29
29
|
<SelectPrimitive.Trigger
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
{...restProps}
|
|
31
|
+
class={baseClasses + ' ' + className}
|
|
32
|
+
aria-label={placeholder}
|
|
33
33
|
>
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
34
|
+
<div class="flex-1 truncate text-left">
|
|
35
|
+
{#if children}
|
|
36
|
+
{@render children()}
|
|
37
|
+
{:else if displayValue !== undefined}
|
|
38
|
+
{displayValue}
|
|
39
|
+
{:else}
|
|
40
|
+
<span class="text-tertiary">{placeholder}</span>
|
|
41
|
+
{/if}
|
|
42
|
+
</div>
|
|
43
|
+
{#if TriggerIcon}
|
|
44
|
+
{@render TriggerIcon()}
|
|
45
|
+
{:else}
|
|
46
|
+
<Icon iconName="CaretDown" color="secondary" class="mx-1 shrink-0" />
|
|
47
|
+
{/if}
|
|
48
48
|
</SelectPrimitive.Trigger>
|
|
@@ -1,92 +1,92 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
import type { ComponentProps } from '@sjsf/form';
|
|
3
|
+
import { getFormContext, inputAttributes } from '@sjsf/form';
|
|
4
|
+
import Input from '../input/Input.svelte';
|
|
5
|
+
import type { FocusEventHandler } from 'svelte/elements';
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
type Props = ComponentProps['numberWidget'];
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
let { value = $bindable(), config, handlers, errors }: Props = $props();
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
const ctx = getFormContext();
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
13
|
+
const derivedAttrs = $derived(
|
|
14
|
+
inputAttributes(ctx, config, 'number', handlers, {
|
|
15
|
+
type: 'number',
|
|
16
|
+
})
|
|
17
|
+
);
|
|
18
|
+
const placeholder = $derived(
|
|
19
|
+
config?.uiSchema?.['ui:placeholder'] ||
|
|
20
|
+
config?.schema?.description ||
|
|
21
|
+
(Array.isArray(config?.schema?.examples) && config.schema.examples.length > 0
|
|
22
|
+
? String(config.schema.examples[0]) // Ensure the example is also a string
|
|
23
|
+
: '') ||
|
|
24
|
+
''
|
|
25
|
+
);
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
const readonly = $derived(config?.schema?.readOnly ?? false);
|
|
28
|
+
const currentClass = $derived(derivedAttrs?.class ?? 'w-full');
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
30
|
+
const onBlurHandler = $derived(
|
|
31
|
+
derivedAttrs.onblur
|
|
32
|
+
? (event: FocusEvent) =>
|
|
33
|
+
(derivedAttrs.onblur as FocusEventHandler<HTMLInputElement>)(event as any)
|
|
34
|
+
: undefined
|
|
35
|
+
);
|
|
36
36
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
37
|
+
const onChangeHandler = $derived(
|
|
38
|
+
derivedAttrs.onchange
|
|
39
|
+
? (event: Event) =>
|
|
40
|
+
(derivedAttrs.onchange as FocusEventHandler<HTMLInputElement>)(event as any)
|
|
41
|
+
: undefined
|
|
42
|
+
);
|
|
43
43
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
44
|
+
const onInputHandler = $derived(
|
|
45
|
+
derivedAttrs.oninput
|
|
46
|
+
? (event: Event) =>
|
|
47
|
+
(derivedAttrs.oninput as FocusEventHandler<HTMLInputElement>)(event as any)
|
|
48
|
+
: undefined
|
|
49
|
+
);
|
|
50
50
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
51
|
+
const getStringValue = () => {
|
|
52
|
+
if (value === undefined || value === null || isNaN(value)) {
|
|
53
|
+
return '';
|
|
54
|
+
}
|
|
55
|
+
return String(value);
|
|
56
|
+
};
|
|
57
57
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
58
|
+
const setNumericValue = (newValueFromInput: unknown) => {
|
|
59
|
+
const stringifiedInput =
|
|
60
|
+
newValueFromInput === null || newValueFromInput === undefined
|
|
61
|
+
? ''
|
|
62
|
+
: String(newValueFromInput);
|
|
63
63
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
64
|
+
if (stringifiedInput.trim() === '') {
|
|
65
|
+
value = undefined;
|
|
66
|
+
} else {
|
|
67
|
+
const num = parseFloat(stringifiedInput);
|
|
68
|
+
value = isNaN(num) ? undefined : num;
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
71
|
</script>
|
|
72
72
|
|
|
73
73
|
<Input
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
74
|
+
bind:value={() => getStringValue(), (v) => setNumericValue(v)}
|
|
75
|
+
placeholder={String(placeholder)}
|
|
76
|
+
type={'number'}
|
|
77
|
+
{readonly}
|
|
78
|
+
id={String(derivedAttrs.id)}
|
|
79
|
+
name={String(derivedAttrs.name)}
|
|
80
|
+
disabled={derivedAttrs.disabled}
|
|
81
|
+
required={derivedAttrs.required}
|
|
82
|
+
step={config?.schema?.multipleOf ?? (config?.schema?.type === 'integer' ? 1 : 'any')}
|
|
83
|
+
min={config?.schema?.minimum ?? config?.schema?.exclusiveMinimum}
|
|
84
|
+
max={config?.schema?.maximum ?? config?.schema?.exclusiveMaximum}
|
|
85
|
+
aria-invalid={errors && errors.length > 0 ? true : undefined}
|
|
86
|
+
aria-describedby={errors && errors.length > 0 ? `${String(derivedAttrs.id)}-errors` : undefined}
|
|
87
|
+
class={String(currentClass)}
|
|
88
|
+
autocomplete="off"
|
|
89
|
+
oninput={onInputHandler}
|
|
90
|
+
onchange={onChangeHandler}
|
|
91
|
+
onblur={onBlurHandler}
|
|
92
92
|
/>
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
declare const SjsfNumberInputWrapper: import("svelte").Component<
|
|
1
|
+
declare const SjsfNumberInputWrapper: import("svelte").Component<ComponentProps, {}, "value">;
|
|
2
2
|
type SjsfNumberInputWrapper = ReturnType<typeof SjsfNumberInputWrapper>;
|
|
3
3
|
export default SjsfNumberInputWrapper;
|
|
@@ -1,65 +1,65 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
import type { ComponentProps } from '@sjsf/form';
|
|
3
|
+
import { getFormContext, inputAttributes } from '@sjsf/form';
|
|
4
|
+
import Input from '../input/Input.svelte';
|
|
5
|
+
import type { FormEventHandler, FocusEventHandler } from 'svelte/elements';
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
type Props = ComponentProps['textWidget'];
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
let { value = $bindable(), config, handlers, errors }: Props = $props();
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
const ctx = getFormContext();
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
13
|
+
const derivedAttrs = $derived(
|
|
14
|
+
inputAttributes(ctx, config, 'text', handlers, {
|
|
15
|
+
type: 'text',
|
|
16
|
+
})
|
|
17
|
+
);
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
19
|
+
const placeholder = $derived(
|
|
20
|
+
config?.uiSchema?.['ui:placeholder'] ||
|
|
21
|
+
config?.schema?.description ||
|
|
22
|
+
(Array.isArray(config?.schema?.examples) && config.schema.examples.length > 0
|
|
23
|
+
? String(config.schema.examples[0])
|
|
24
|
+
: '') ||
|
|
25
|
+
''
|
|
26
|
+
);
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
const readonly = $derived(config?.schema?.readOnly ?? false);
|
|
29
|
+
const currentClass = $derived(derivedAttrs?.class ?? 'w-full');
|
|
30
30
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
31
|
+
const onInput = $derived(
|
|
32
|
+
derivedAttrs.oninput
|
|
33
|
+
? (event: Event) => (derivedAttrs.oninput as FormEventHandler<HTMLInputElement>)(event as any)
|
|
34
|
+
: undefined
|
|
35
|
+
);
|
|
36
|
+
const onChange = $derived(
|
|
37
|
+
derivedAttrs.onchange
|
|
38
|
+
? (event: Event) =>
|
|
39
|
+
(derivedAttrs.onchange as FormEventHandler<HTMLInputElement>)(event as any)
|
|
40
|
+
: undefined
|
|
41
|
+
);
|
|
42
|
+
const onBlur = $derived(
|
|
43
|
+
derivedAttrs.onblur
|
|
44
|
+
? (event: FocusEvent) =>
|
|
45
|
+
(derivedAttrs.onblur as FocusEventHandler<HTMLInputElement>)(event as any)
|
|
46
|
+
: undefined
|
|
47
|
+
);
|
|
48
48
|
</script>
|
|
49
49
|
|
|
50
50
|
<Input
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
51
|
+
bind:value
|
|
52
|
+
placeholder={String(placeholder)}
|
|
53
|
+
type="text"
|
|
54
|
+
{readonly}
|
|
55
|
+
id={String(derivedAttrs.id)}
|
|
56
|
+
name={String(derivedAttrs.name)}
|
|
57
|
+
disabled={derivedAttrs.disabled}
|
|
58
|
+
required={derivedAttrs.required}
|
|
59
|
+
oninput={onInput}
|
|
60
|
+
onchange={onChange}
|
|
61
|
+
onblur={onBlur}
|
|
62
|
+
aria-invalid={errors && errors.length > 0 ? true : undefined}
|
|
63
|
+
aria-describedby={errors && errors.length > 0 ? `${String(derivedAttrs.id)}-errors` : undefined}
|
|
64
|
+
class={String(currentClass)}
|
|
65
65
|
/>
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
declare const SjsfTextInputWrapper: import("svelte").Component<
|
|
1
|
+
declare const SjsfTextInputWrapper: import("svelte").Component<ComponentProps, {}, "value">;
|
|
2
2
|
type SjsfTextInputWrapper = ReturnType<typeof SjsfTextInputWrapper>;
|
|
3
3
|
export default SjsfTextInputWrapper;
|
|
@@ -4,5 +4,5 @@ import SjsfNumberInputWrapper from './SjsfNumberInputWrapper.svelte';
|
|
|
4
4
|
import SjsfTextInputWrapper from './SjsfTextInputWrapper.svelte';
|
|
5
5
|
export const sjsfCustomTheme = overrideByRecord(BasicTheme, {
|
|
6
6
|
numberWidget: SjsfNumberInputWrapper,
|
|
7
|
-
textWidget: SjsfTextInputWrapper
|
|
7
|
+
textWidget: SjsfTextInputWrapper,
|
|
8
8
|
});
|
|
@@ -1,45 +1,45 @@
|
|
|
1
1
|
<script module>
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
import SkeletonLoader from './SkeletonLoader.svelte';
|
|
3
|
+
import StatcardSkeleton from './StatcardSkeleton.svelte';
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
import { defineMeta } from '@storybook/addon-svelte-csf';
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
const { Story } = defineMeta({
|
|
8
|
+
component: SkeletonLoader,
|
|
9
|
+
title: 'Design System/SkeletonLoader',
|
|
10
|
+
});
|
|
11
11
|
</script>
|
|
12
12
|
|
|
13
13
|
<Story name="Primary" asChild>
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
14
|
+
<SkeletonLoader class="h-[50px] w-[200px]">
|
|
15
|
+
{#snippet children({ Skeleton })}
|
|
16
|
+
<Skeleton class="h-full w-full" />
|
|
17
|
+
{/snippet}
|
|
18
|
+
</SkeletonLoader>
|
|
19
19
|
</Story>
|
|
20
20
|
|
|
21
21
|
<Story name="ImagePlaceholder" asChild>
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
22
|
+
<SkeletonLoader class="h-[100px] w-[500px]">
|
|
23
|
+
{#snippet children({ Skeleton, SkeletonImage })}
|
|
24
|
+
<div class="flex h-full gap-2">
|
|
25
|
+
<Skeleton class="flex h-full w-[160px] items-center justify-center">
|
|
26
|
+
<SkeletonImage />
|
|
27
|
+
</Skeleton>
|
|
28
|
+
<div class="flex flex-1 flex-col gap-2">
|
|
29
|
+
<Skeleton class="flex h-[20px] w-full" />
|
|
30
|
+
<Skeleton class="flex h-[20px] w-full" />
|
|
31
|
+
<Skeleton class="flex h-[20px] w-full" />
|
|
32
|
+
<Skeleton class="flex h-[20px] w-full" />
|
|
33
|
+
</div>
|
|
34
|
+
</div>
|
|
35
|
+
{/snippet}
|
|
36
|
+
</SkeletonLoader>
|
|
37
37
|
</Story>
|
|
38
38
|
|
|
39
39
|
<Story name="StatCard" asChild>
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
40
|
+
<div class="flex w-[900px] gap-4">
|
|
41
|
+
<StatcardSkeleton />
|
|
42
|
+
<StatcardSkeleton />
|
|
43
|
+
<StatcardSkeleton />
|
|
44
|
+
</div>
|
|
45
45
|
</Story>
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
import type { Snippet } from 'svelte';
|
|
3
|
+
import Skeleton from './components/Skeleton.svelte';
|
|
4
|
+
import SkeletonImage from './components/SkeletonImage.svelte';
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
interface Props {
|
|
7
|
+
class?: string;
|
|
8
|
+
dataTestId?: string;
|
|
9
|
+
children?: Snippet<[{ Skeleton: typeof Skeleton; SkeletonImage: typeof SkeletonImage }]>;
|
|
10
|
+
}
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
let { class: className = '', dataTestId = '', children }: Props = $props();
|
|
13
13
|
</script>
|
|
14
14
|
|
|
15
15
|
<div role="status" class={`h-full w-full animate-pulse ${className}`} data-testid={dataTestId}>
|
|
16
|
-
|
|
16
|
+
{@render children?.({ Skeleton, SkeletonImage })}
|
|
17
17
|
</div>
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
|
|
2
|
+
import SkeletonLoader from './SkeletonLoader.svelte';
|
|
3
3
|
</script>
|
|
4
4
|
|
|
5
5
|
<SkeletonLoader>
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
6
|
+
{#snippet children({ Skeleton })}
|
|
7
|
+
<div class="flex h-[92px] flex-1 flex-col justify-between gap-2 rounded-lg bg-neutral p-4">
|
|
8
|
+
<Skeleton class="h-4 w-1/2 "></Skeleton>
|
|
9
|
+
<div class="flex items-baseline gap-2">
|
|
10
|
+
<Skeleton class="h-8 w-16" />
|
|
11
|
+
</div>
|
|
12
|
+
</div>
|
|
13
|
+
{/snippet}
|
|
14
14
|
</SkeletonLoader>
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
|
|
2
|
+
import type { Snippet } from 'svelte';
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
interface Props {
|
|
5
|
+
class?: string;
|
|
6
|
+
children?: Snippet;
|
|
7
|
+
}
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
let { class: className = '', children }: Props = $props();
|
|
10
10
|
</script>
|
|
11
11
|
|
|
12
12
|
<div class={`bg-neutral ${className}`}>
|
|
13
|
-
|
|
13
|
+
{@render children?.()}
|
|
14
14
|
</div>
|