@reshape-biotech/design-system 1.2.6 → 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.
Files changed (159) hide show
  1. package/README.md +3 -1
  2. package/dist/app.css +97 -97
  3. package/dist/components/activity/Activity.stories.svelte +104 -104
  4. package/dist/components/activity/Activity.svelte +112 -112
  5. package/dist/components/avatar/Avatar.stories.svelte +23 -23
  6. package/dist/components/avatar/Avatar.svelte +54 -54
  7. package/dist/components/banner/Banner.stories.svelte +105 -105
  8. package/dist/components/banner/Banner.svelte +42 -42
  9. package/dist/components/button/Button.stories.svelte +61 -61
  10. package/dist/components/button/Button.svelte +95 -95
  11. package/dist/components/card/Card.stories.svelte +112 -112
  12. package/dist/components/card/Card.svelte +18 -18
  13. package/dist/components/checkbox/Checkbox.stories.svelte +8 -8
  14. package/dist/components/checkbox/Checkbox.svelte +17 -17
  15. package/dist/components/collapsible/Collapsible.stories.svelte +26 -26
  16. package/dist/components/collapsible/components/collapsible-content.svelte +20 -20
  17. package/dist/components/collapsible/components/collapsible-trigger.svelte +12 -12
  18. package/dist/components/combobox/Combobox.stories.svelte +412 -412
  19. package/dist/components/combobox/components/combobox-add.svelte +8 -8
  20. package/dist/components/combobox/components/combobox-content.svelte +39 -39
  21. package/dist/components/combobox/components/combobox-indicator.svelte +1 -1
  22. package/dist/components/datepicker/DatePicker.stories.svelte +196 -196
  23. package/dist/components/datepicker/DatePicker.svelte +173 -173
  24. package/dist/components/divider/Divider.stories.svelte +7 -7
  25. package/dist/components/divider/Divider.svelte +9 -9
  26. package/dist/components/drawer/Drawer.stories.svelte +51 -51
  27. package/dist/components/drawer/Drawer.svelte +33 -33
  28. package/dist/components/drawer/DrawerLabel.svelte +10 -10
  29. package/dist/components/dropdown/Dropdown.stories.svelte +210 -210
  30. package/dist/components/dropdown/Dropdown.svelte +57 -57
  31. package/dist/components/dropdown/components/DropdownContent.svelte +16 -16
  32. package/dist/components/dropdown/components/DropdownMenu.svelte +10 -10
  33. package/dist/components/dropdown/components/DropdownTrigger.svelte +37 -37
  34. package/dist/components/dropdown/components/OutlinedButton.svelte +9 -9
  35. package/dist/components/empty-content/EmptyContent.stories.svelte +38 -38
  36. package/dist/components/empty-content/EmptyContent.svelte +12 -12
  37. package/dist/components/graphs/bar-chart/BarChart.stories.svelte +91 -91
  38. package/dist/components/graphs/bar-chart/BarChart.svelte +147 -147
  39. package/dist/components/graphs/bar-chart/StackedBarChart.stories.svelte +57 -57
  40. package/dist/components/graphs/bar-chart/StackedBarChart.svelte +198 -199
  41. package/dist/components/graphs/chart/Chart.stories.svelte +96 -96
  42. package/dist/components/graphs/chart/Chart.svelte +207 -207
  43. package/dist/components/graphs/line/LineChart.stories.svelte +138 -138
  44. package/dist/components/graphs/line/LineChart.svelte +140 -142
  45. package/dist/components/graphs/matrix/Matrix.stories.svelte +117 -117
  46. package/dist/components/graphs/matrix/Matrix.svelte +141 -141
  47. package/dist/components/graphs/multiline/MultiLineChart.stories.svelte +168 -168
  48. package/dist/components/graphs/multiline/MultiLineChart.svelte +236 -236
  49. package/dist/components/graphs/scatterplot/Scatterplot.stories.svelte +84 -84
  50. package/dist/components/graphs/scatterplot/Scatterplot.svelte +302 -302
  51. package/dist/components/graphs/utils/duration.d.ts +1 -0
  52. package/dist/components/graphs/utils/duration.js +33 -0
  53. package/dist/components/graphs/utils/tooltipFormatter.js +1 -1
  54. package/dist/components/icon-button/IconButton.stories.svelte +64 -64
  55. package/dist/components/icon-button/IconButton.svelte +88 -88
  56. package/dist/components/icons/AnalysisIcon.stories.svelte +18 -18
  57. package/dist/components/icons/AnalysisIcon.svelte +96 -96
  58. package/dist/components/icons/Icon.stories.svelte +111 -111
  59. package/dist/components/icons/Icon.svelte +17 -17
  60. package/dist/components/icons/PrincipalIcon.svelte +59 -59
  61. package/dist/components/icons/custom/Halo.svelte +31 -31
  62. package/dist/components/icons/custom/Well.svelte +27 -27
  63. package/dist/components/icons/index.js +1 -1
  64. package/dist/components/image/Image.svelte +42 -42
  65. package/dist/components/input/Input.stories.svelte +55 -55
  66. package/dist/components/input/Input.svelte +121 -121
  67. package/dist/components/label/Label.stories.svelte +18 -18
  68. package/dist/components/label/Label.svelte +11 -11
  69. package/dist/components/list/List.stories.svelte +84 -84
  70. package/dist/components/list/List.svelte +20 -20
  71. package/dist/components/logo/Logo.stories.svelte +15 -15
  72. package/dist/components/logo/Logo.svelte +30 -30
  73. package/dist/components/manual-cfu-counter/ManualCFUCounter.stories.svelte +102 -102
  74. package/dist/components/manual-cfu-counter/ManualCFUCounter.svelte +557 -557
  75. package/dist/components/manual-cfu-counter/test/ManualCFUCounterTestWrapper.svelte +11 -11
  76. package/dist/components/markdown/Markdown.stories.svelte +10 -10
  77. package/dist/components/markdown/Markdown.svelte +6 -6
  78. package/dist/components/modal/Modal.stories.svelte +29 -29
  79. package/dist/components/modal/Modal.svelte +71 -71
  80. package/dist/components/multi-cfu-counter/MultiCFUCounter.stories.svelte +201 -201
  81. package/dist/components/multi-cfu-counter/MultiCFUCounter.svelte +606 -606
  82. package/dist/components/multi-cfu-counter/test/MultiCFUCounterTestWrapper.svelte +17 -17
  83. package/dist/components/notification-popup/NotificationPopup.stories.svelte +18 -18
  84. package/dist/components/notification-popup/NotificationPopup.svelte +26 -26
  85. package/dist/components/notifications/Notifications.stories.svelte +101 -101
  86. package/dist/components/notifications/Notifications.svelte +9 -9
  87. package/dist/components/pill/Pill.stories.svelte +8 -8
  88. package/dist/components/pill/Pill.svelte +27 -27
  89. package/dist/components/progress-circle/ProgressCircle.stories.svelte +8 -8
  90. package/dist/components/progress-circle/ProgressCircle.svelte +54 -54
  91. package/dist/components/required-status-indicator/RequiredStatusIndicator.stories.svelte +18 -18
  92. package/dist/components/required-status-indicator/RequiredStatusIndicator.svelte +14 -14
  93. package/dist/components/segmented-control-buttons/ControlButton.svelte +36 -36
  94. package/dist/components/segmented-control-buttons/SegmentedControlButtons.stories.svelte +35 -35
  95. package/dist/components/segmented-control-buttons/SegmentedControlButtons.svelte +13 -13
  96. package/dist/components/select/Select.stories.svelte +77 -77
  97. package/dist/components/select/Select.svelte +114 -114
  98. package/dist/components/select-new/Select.stories.svelte +188 -188
  99. package/dist/components/select-new/components/Group.svelte +17 -17
  100. package/dist/components/select-new/components/MultiSelectTrigger.svelte +57 -57
  101. package/dist/components/select-new/components/SelectContent.svelte +22 -22
  102. package/dist/components/select-new/components/SelectGroupHeading.svelte +10 -10
  103. package/dist/components/select-new/components/SelectItem.svelte +25 -25
  104. package/dist/components/select-new/components/SelectTrigger.svelte +38 -38
  105. package/dist/components/sjsf-wrappers/SjsfNumberInputWrapper.svelte +76 -76
  106. package/dist/components/sjsf-wrappers/SjsfNumberInputWrapper.svelte.d.ts +1 -1
  107. package/dist/components/sjsf-wrappers/SjsfTextInputWrapper.svelte +53 -53
  108. package/dist/components/sjsf-wrappers/SjsfTextInputWrapper.svelte.d.ts +1 -1
  109. package/dist/components/sjsf-wrappers/sjsfCustomTheme.js +1 -1
  110. package/dist/components/skeleton-loader/SkeletonLoader.stories.svelte +32 -32
  111. package/dist/components/skeleton-loader/SkeletonLoader.svelte +10 -10
  112. package/dist/components/skeleton-loader/StatcardSkeleton.svelte +9 -9
  113. package/dist/components/skeleton-loader/components/Skeleton.svelte +7 -7
  114. package/dist/components/skeleton-loader/components/SkeletonImage.svelte +12 -12
  115. package/dist/components/slider/Slider.stories.svelte +23 -23
  116. package/dist/components/slider/Slider.svelte +107 -107
  117. package/dist/components/spinner/Spinner.stories.svelte +8 -8
  118. package/dist/components/spinner/Spinner.svelte +18 -18
  119. package/dist/components/stat-card/StatCard.stories.svelte +26 -26
  120. package/dist/components/stat-card/StatCard.svelte +128 -128
  121. package/dist/components/status-badge/StatusBadge.stories.svelte +365 -365
  122. package/dist/components/status-badge/StatusBadge.svelte +54 -54
  123. package/dist/components/stepper/Stepper.stories.svelte +219 -219
  124. package/dist/components/stepper/components/stepper-root.svelte +12 -12
  125. package/dist/components/stepper/components/stepper-step.svelte +83 -83
  126. package/dist/components/table/Table.stories.svelte +87 -87
  127. package/dist/components/table/Table.svelte +32 -32
  128. package/dist/components/table/components/TBody.svelte +7 -7
  129. package/dist/components/table/components/THead.svelte +7 -7
  130. package/dist/components/table/components/Td.svelte +8 -8
  131. package/dist/components/table/components/Th.svelte +8 -8
  132. package/dist/components/table/components/Tr.svelte +11 -11
  133. package/dist/components/tabs/Tabs.stories.svelte +20 -20
  134. package/dist/components/tabs/Tabs.svelte +8 -8
  135. package/dist/components/tabs/components/Content.svelte +8 -8
  136. package/dist/components/tabs/components/Tab.svelte +14 -14
  137. package/dist/components/tabs/components/Tabs.svelte +7 -7
  138. package/dist/components/tag/Tag.stories.svelte +57 -57
  139. package/dist/components/tag/Tag.svelte +95 -95
  140. package/dist/components/textarea/Textarea.stories.svelte +70 -70
  141. package/dist/components/textarea/Textarea.svelte +76 -76
  142. package/dist/components/toast/Toast.stories.svelte +204 -204
  143. package/dist/components/toast/Toast.svelte +53 -53
  144. package/dist/components/toggle/Toggle.stories.svelte +9 -9
  145. package/dist/components/toggle/Toggle.svelte +53 -53
  146. package/dist/components/toggle-icon-button/ToggleIconButton.stories.svelte +152 -152
  147. package/dist/components/toggle-icon-button/ToggleIconButton.svelte +99 -99
  148. package/dist/components/tooltip/Tooltip.stories.svelte +105 -105
  149. package/dist/components/tooltip/Tooltip.svelte +26 -26
  150. package/dist/fonts/index.js +1 -1
  151. package/dist/notifications.d.ts +1 -4
  152. package/dist/notifications.js +1 -1
  153. package/dist/tailwind-safelist.js +406 -406
  154. package/dist/tailwind.preset.js +10 -10
  155. package/dist/tokens/colors.js +18 -18
  156. package/dist/tokens/typography.js +6 -6
  157. package/dist/tokens.js +19 -19
  158. package/dist/types/fonts.d.ts +2 -2
  159. package/package.json +199 -198
@@ -1,20 +1,20 @@
1
1
  <script lang="ts">
2
- import { Icon } from '../../icons';
3
- import type { Snippet } from 'svelte';
4
- import type { HTMLButtonAttributes } from 'svelte/elements';
2
+ import { Icon } from '../../icons';
3
+ import type { Snippet } from 'svelte';
4
+ import type { HTMLButtonAttributes } from 'svelte/elements';
5
5
 
6
- type Props = { children: Snippet } & HTMLButtonAttributes;
6
+ type Props = { children: Snippet } & HTMLButtonAttributes;
7
7
 
8
- let { children, ...props }: Props = $props();
8
+ let { children, ...props }: Props = $props();
9
9
  </script>
10
10
 
11
11
  <button {...props}>
12
- <Icon iconName="Plus" class="text-icon-secondary" />
13
- {@render children()}
12
+ <Icon iconName="Plus" class="text-icon-secondary" />
13
+ {@render children()}
14
14
  </button>
15
15
 
16
16
  <style>
17
- button {
17
+ button {
18
18
  margin-left: 0.5rem;
19
19
  display: flex;
20
20
  height: 2.5rem;
@@ -1,49 +1,49 @@
1
1
  <script lang="ts">
2
- import { Combobox } from 'bits-ui';
3
- import type { ComboboxContentProps } from '../types';
4
- import { Icon } from '../../icons';
5
-
6
- let {
7
- children,
8
- class: className,
9
- showScroll = true,
10
- portalled = true,
11
- header,
12
- footer,
13
- ...props
14
- }: ComboboxContentProps = $props();
2
+ import { Combobox } from 'bits-ui';
3
+ import type { ComboboxContentProps } from '../types';
4
+ import { Icon } from '../../icons';
5
+
6
+ let {
7
+ children,
8
+ class: className,
9
+ showScroll = true,
10
+ portalled = true,
11
+ header,
12
+ footer,
13
+ ...props
14
+ }: ComboboxContentProps = $props();
15
15
  </script>
16
16
 
17
17
  {#snippet content()}
18
- <Combobox.Content {...props} class={className}>
19
- {@render header?.()}
20
- {#if showScroll}
21
- <Combobox.ScrollUpButton class="flex justify-center">
22
- <Icon iconName="CaretUp" />
23
- </Combobox.ScrollUpButton>
24
- <Combobox.Viewport class="p-1">
25
- {@render children()}
26
- </Combobox.Viewport>
27
- <Combobox.ScrollDownButton class="flex justify-center">
28
- <Icon iconName="CaretDown" />
29
- </Combobox.ScrollDownButton>
30
- {:else}
31
- {@render children()}
32
- {/if}
33
- {@render footer?.()}
34
- </Combobox.Content>
18
+ <Combobox.Content {...props} class={className}>
19
+ {@render header?.()}
20
+ {#if showScroll}
21
+ <Combobox.ScrollUpButton class="flex justify-center">
22
+ <Icon iconName="CaretUp" />
23
+ </Combobox.ScrollUpButton>
24
+ <Combobox.Viewport class="p-1">
25
+ {@render children()}
26
+ </Combobox.Viewport>
27
+ <Combobox.ScrollDownButton class="flex justify-center">
28
+ <Icon iconName="CaretDown" />
29
+ </Combobox.ScrollDownButton>
30
+ {:else}
31
+ {@render children()}
32
+ {/if}
33
+ {@render footer?.()}
34
+ </Combobox.Content>
35
35
  {/snippet}
36
36
 
37
37
  {#if portalled}
38
- <Combobox.Portal>
39
- {@render content()}
40
- </Combobox.Portal>
38
+ <Combobox.Portal>
39
+ {@render content()}
40
+ </Combobox.Portal>
41
41
  {:else}
42
- {@render content()}
42
+ {@render content()}
43
43
  {/if}
44
44
 
45
45
  <style>
46
- :global([data-combobox-content]) {
46
+ :global([data-combobox-content]) {
47
47
 
48
48
  width: 100%;
49
49
 
@@ -66,7 +66,7 @@
66
66
  outline-offset: 2px
67
67
  }
68
68
 
69
- :global([data-combobox-input]) {
69
+ :global([data-combobox-input]) {
70
70
 
71
71
  width: 100%;
72
72
 
@@ -91,7 +91,7 @@
91
91
  outline-offset: 2px
92
92
  }
93
93
 
94
- :global([data-combobox-item]) {
94
+ :global([data-combobox-item]) {
95
95
 
96
96
  display: flex;
97
97
 
@@ -115,12 +115,12 @@
115
115
 
116
116
  line-height: 1.25rem
117
117
  }
118
- :global([data-combobox-item][data-highlighted]) {
118
+ :global([data-combobox-item][data-highlighted]) {
119
119
 
120
120
  background-color: #12192a0A
121
121
  }
122
122
 
123
- :global([data-combobox-group-label]) {
123
+ :global([data-combobox-group-label]) {
124
124
 
125
125
  padding-left: 0.75rem;
126
126
 
@@ -1,5 +1,5 @@
1
1
  <script lang="ts">
2
- import { Icon } from '../../icons';
2
+ import { Icon } from '../../icons';
3
3
  </script>
4
4
 
5
5
  <Icon iconName="Check" />
@@ -1,53 +1,53 @@
1
1
  <script module lang="ts">
2
- import { defineMeta } from '@storybook/addon-svelte-csf';
3
- import { userEvent, within } from '@storybook/test';
4
- import { DateTime } from 'luxon';
5
- import DatePicker from './DatePicker.svelte';
6
- import Dropdown from '../dropdown/Dropdown.svelte';
7
- import { Icon } from '../icons';
8
-
9
- const { Story } = defineMeta({
10
- component: DatePicker,
11
- title: 'Design System/DatePicker',
12
- tags: ['autodocs'],
13
- parameters: {
14
- design: {
15
- type: 'figma',
16
- url: 'https://www.figma.com/design/WkxhG4H2Ybc7STFi1VJIau/%F0%9F%92%A0-Reshape-Design-System%3A-V1?node-id=4381-32638&t=Epi2Ul7Cw7sCJpGy-0'
17
- }
18
- }
19
- });
20
-
21
- const staticDate = DateTime.local(2023, 10, 15);
22
-
23
- let selectedDate = $state<DateTime | undefined>(undefined);
24
- let loggedDate = $state<string | undefined>(undefined);
25
-
26
- function handleDateSelection(date: DateTime) {
27
- loggedDate = date.toFormat('yyyy-MM-dd');
28
- }
29
-
30
- // States for the dropdown story
31
- let dropdownDate = $state<DateTime | undefined>(undefined);
32
- let displayText = $state('Select a date');
33
- let isOpen = $state(false);
34
-
35
- // States for the form test
36
- let formDropdownDate = $state<DateTime | undefined>(undefined);
37
- let formDisplayText = $state('Select a date');
38
- let formIsOpen = $state(false);
39
-
40
- function handleDropdownSelection(date: DateTime) {
41
- dropdownDate = date;
42
- displayText = date.toFormat('MMM dd, yyyy');
43
- isOpen = false;
44
- }
45
-
46
- function handleFormDateSelection(date: DateTime) {
47
- formDropdownDate = date;
48
- formDisplayText = date.toFormat('MMM dd, yyyy');
49
- formIsOpen = false;
50
- }
2
+ import { defineMeta } from '@storybook/addon-svelte-csf';
3
+ import { userEvent, within } from '@storybook/test';
4
+ import { DateTime } from 'luxon';
5
+ import DatePicker from './DatePicker.svelte';
6
+ import Dropdown from '../dropdown/Dropdown.svelte';
7
+ import { Icon } from '../icons';
8
+
9
+ const { Story } = defineMeta({
10
+ component: DatePicker,
11
+ title: 'Design System/DatePicker',
12
+ tags: ['autodocs'],
13
+ parameters: {
14
+ design: {
15
+ type: 'figma',
16
+ url: 'https://www.figma.com/design/WkxhG4H2Ybc7STFi1VJIau/%F0%9F%92%A0-Reshape-Design-System%3A-V1?node-id=4381-32638&t=Epi2Ul7Cw7sCJpGy-0',
17
+ },
18
+ },
19
+ });
20
+
21
+ const staticDate = DateTime.local(2023, 10, 15);
22
+
23
+ let selectedDate = $state<DateTime | undefined>(undefined);
24
+ let loggedDate = $state<string | undefined>(undefined);
25
+
26
+ function handleDateSelection(date: DateTime) {
27
+ loggedDate = date.toFormat('yyyy-MM-dd');
28
+ }
29
+
30
+ // States for the dropdown story
31
+ let dropdownDate = $state<DateTime | undefined>(undefined);
32
+ let displayText = $state('Select a date');
33
+ let isOpen = $state(false);
34
+
35
+ // States for the form test
36
+ let formDropdownDate = $state<DateTime | undefined>(undefined);
37
+ let formDisplayText = $state('Select a date');
38
+ let formIsOpen = $state(false);
39
+
40
+ function handleDropdownSelection(date: DateTime) {
41
+ dropdownDate = date;
42
+ displayText = date.toFormat('MMM dd, yyyy');
43
+ isOpen = false;
44
+ }
45
+
46
+ function handleFormDateSelection(date: DateTime) {
47
+ formDropdownDate = date;
48
+ formDisplayText = date.toFormat('MMM dd, yyyy');
49
+ formIsOpen = false;
50
+ }
51
51
  </script>
52
52
 
53
53
  <Story name="Default" args={{ selectedDate: undefined }} />
@@ -55,168 +55,168 @@
55
55
  <Story name="With Selected Date" args={{ selectedDate: staticDate }} />
56
56
 
57
57
  <Story name="With Date Change Handler" asChild>
58
- <div class="p-4">
59
- <div class="mb-4">
60
- <DatePicker {selectedDate} onClick={handleDateSelection} />
61
- </div>
62
- {#if loggedDate}
63
- <div class="mt-4 rounded bg-neutral p-2">
64
- <p>Selected date: <strong>{loggedDate}</strong></p>
65
- </div>
66
- {/if}
67
- </div>
58
+ <div class="p-4">
59
+ <div class="mb-4">
60
+ <DatePicker {selectedDate} onClick={handleDateSelection} />
61
+ </div>
62
+ {#if loggedDate}
63
+ <div class="mt-4 rounded bg-neutral p-2">
64
+ <p>Selected date: <strong>{loggedDate}</strong></p>
65
+ </div>
66
+ {/if}
67
+ </div>
68
68
  </Story>
69
69
 
70
70
  <Story name="Month Navigation" asChild>
71
- <div class="p-4">
72
- <DatePicker selectedDate={staticDate} />
73
- <div class="mt-4 text-sm text-tertiary">
74
- <p>Click the arrow buttons to navigate between months</p>
75
- </div>
76
- </div>
71
+ <div class="p-4">
72
+ <DatePicker selectedDate={staticDate} />
73
+ <div class="mt-4 text-sm text-tertiary">
74
+ <p>Click the arrow buttons to navigate between months</p>
75
+ </div>
76
+ </div>
77
77
  </Story>
78
78
 
79
79
  <Story
80
- name="Interaction Test"
81
- asChild
82
- play={async ({ canvasElement }) => {
83
- const canvas = within(canvasElement);
84
-
85
- // Click next month button
86
- const nextMonthButton = canvas.getAllByRole('button')[1]; // Second button is next month
87
- await userEvent.click(nextMonthButton);
88
-
89
- // Wait a moment
90
- await new Promise((resolve) => setTimeout(resolve, 300));
91
-
92
- // Click a date (the 15th of the month)
93
- const dateButtons = canvas.getAllByRole('button').filter((button) => {
94
- // Find buttons with just numbers as their text content
95
- const text = button.textContent?.trim();
96
- return text && !isNaN(Number(text));
97
- });
98
-
99
- // Find the button with text "15" if it exists
100
- const date15Button = dateButtons.find((button) => button.textContent?.trim() === '15');
101
-
102
- if (date15Button) {
103
- await userEvent.click(date15Button);
104
- }
105
- }}
80
+ name="Interaction Test"
81
+ asChild
82
+ play={async ({ canvasElement }) => {
83
+ const canvas = within(canvasElement);
84
+
85
+ // Click next month button
86
+ const nextMonthButton = canvas.getAllByRole('button')[1]; // Second button is next month
87
+ await userEvent.click(nextMonthButton);
88
+
89
+ // Wait a moment
90
+ await new Promise((resolve) => setTimeout(resolve, 300));
91
+
92
+ // Click a date (the 15th of the month)
93
+ const dateButtons = canvas.getAllByRole('button').filter((button) => {
94
+ // Find buttons with just numbers as their text content
95
+ const text = button.textContent?.trim();
96
+ return text && !isNaN(Number(text));
97
+ });
98
+
99
+ // Find the button with text "15" if it exists
100
+ const date15Button = dateButtons.find((button) => button.textContent?.trim() === '15');
101
+
102
+ if (date15Button) {
103
+ await userEvent.click(date15Button);
104
+ }
105
+ }}
106
106
  >
107
- <div class="p-4">
108
- <DatePicker bind:selectedDate />
109
- {#if selectedDate}
110
- <div class="mt-4 rounded bg-neutral p-2">
111
- <p>Selected date: <strong>{selectedDate.toFormat('yyyy-MM-dd')}</strong></p>
112
- </div>
113
- {/if}
114
- </div>
107
+ <div class="p-4">
108
+ <DatePicker bind:selectedDate />
109
+ {#if selectedDate}
110
+ <div class="mt-4 rounded bg-neutral p-2">
111
+ <p>Selected date: <strong>{selectedDate.toFormat('yyyy-MM-dd')}</strong></p>
112
+ </div>
113
+ {/if}
114
+ </div>
115
115
  </Story>
116
116
 
117
117
  <Story name="Multiple DatePickers" asChild>
118
- <div class="flex flex-col gap-4 p-4 md:flex-row">
119
- <div>
120
- <h3 class="mb-2 text-sm font-medium">Start Date</h3>
121
- <DatePicker selectedDate={staticDate.minus({ days: 7 })} />
122
- </div>
123
- <div>
124
- <h3 class="mb-2 text-sm font-medium">End Date</h3>
125
- <DatePicker selectedDate={staticDate} />
126
- </div>
127
- </div>
118
+ <div class="flex flex-col gap-4 p-4 md:flex-row">
119
+ <div>
120
+ <h3 class="mb-2 text-sm font-medium">Start Date</h3>
121
+ <DatePicker selectedDate={staticDate.minus({ days: 7 })} />
122
+ </div>
123
+ <div>
124
+ <h3 class="mb-2 text-sm font-medium">End Date</h3>
125
+ <DatePicker selectedDate={staticDate} />
126
+ </div>
127
+ </div>
128
128
  </Story>
129
129
 
130
130
  <Story name="In Dropdown" asChild>
131
- <div class="p-4">
132
- <Dropdown bind:open={isOpen} side="dropdown-bottom" alignEnd={false}>
133
- {#snippet trigger({ Trigger })}
134
- <Trigger>
135
- <Icon iconName="CalendarBlank" class="mr-2" size={16} />
136
- {displayText}
137
- </Trigger>
138
- {/snippet}
139
-
140
- {#snippet content()}
141
- <DatePicker selectedDate={dropdownDate} onClick={handleDropdownSelection} />
142
- {/snippet}
143
- </Dropdown>
144
-
145
- {#if dropdownDate}
146
- <div class="mt-4 rounded bg-neutral p-2">
147
- <p>You selected: <strong>{dropdownDate.toFormat('MMMM dd, yyyy')}</strong></p>
148
- </div>
149
- {/if}
150
- </div>
131
+ <div class="p-4">
132
+ <Dropdown bind:open={isOpen} side="dropdown-bottom" alignEnd={false}>
133
+ {#snippet trigger({ Trigger })}
134
+ <Trigger>
135
+ <Icon iconName="CalendarBlank" class="mr-2" size={16} />
136
+ {displayText}
137
+ </Trigger>
138
+ {/snippet}
139
+
140
+ {#snippet content()}
141
+ <DatePicker selectedDate={dropdownDate} onClick={handleDropdownSelection} />
142
+ {/snippet}
143
+ </Dropdown>
144
+
145
+ {#if dropdownDate}
146
+ <div class="mt-4 rounded bg-neutral p-2">
147
+ <p>You selected: <strong>{dropdownDate.toFormat('MMMM dd, yyyy')}</strong></p>
148
+ </div>
149
+ {/if}
150
+ </div>
151
151
  </Story>
152
152
 
153
153
  <Story
154
- name="Form Submit Prevention Test"
155
- asChild
156
- play={async ({ canvasElement }) => {
157
- const canvas = within(canvasElement);
158
-
159
- // Setup spy on form submission
160
- const form = canvas.getByTestId('test-form');
161
- let submissionCount = 0;
162
- form.addEventListener('submit', (e) => {
163
- e.preventDefault();
164
- submissionCount++;
165
- console.log('Form was submitted!');
166
- });
167
-
168
- // First open the dropdown
169
- const dropdownTrigger = canvas.getByTestId('form-date-trigger');
170
- await userEvent.click(dropdownTrigger);
171
-
172
- // Click prev/next month and verify no submission
173
- const buttons = document.querySelectorAll('button');
174
- const prevMonthButton = Array.from(buttons).find((btn) => btn.innerHTML.includes('CaretLeft'));
175
- const nextMonthButton = Array.from(buttons).find((btn) => btn.innerHTML.includes('CaretRight'));
176
-
177
- if (prevMonthButton) {
178
- await userEvent.click(prevMonthButton);
179
- console.log('Clicked prev month, submission count:', submissionCount);
180
- }
181
-
182
- if (nextMonthButton) {
183
- await userEvent.click(nextMonthButton);
184
- console.log('Clicked next month, submission count:', submissionCount);
185
- }
186
-
187
- // Success message if no form submission occurred
188
- if (submissionCount === 0) {
189
- console.log('TEST PASSED: Month navigation did not trigger form submission');
190
- } else {
191
- console.error('TEST FAILED: Month navigation triggered form submission');
192
- }
193
- }}
154
+ name="Form Submit Prevention Test"
155
+ asChild
156
+ play={async ({ canvasElement }) => {
157
+ const canvas = within(canvasElement);
158
+
159
+ // Setup spy on form submission
160
+ const form = canvas.getByTestId('test-form');
161
+ let submissionCount = 0;
162
+ form.addEventListener('submit', (e) => {
163
+ e.preventDefault();
164
+ submissionCount++;
165
+ console.log('Form was submitted!');
166
+ });
167
+
168
+ // First open the dropdown
169
+ const dropdownTrigger = canvas.getByTestId('form-date-trigger');
170
+ await userEvent.click(dropdownTrigger);
171
+
172
+ // Click prev/next month and verify no submission
173
+ const buttons = document.querySelectorAll('button');
174
+ const prevMonthButton = Array.from(buttons).find((btn) => btn.innerHTML.includes('CaretLeft'));
175
+ const nextMonthButton = Array.from(buttons).find((btn) => btn.innerHTML.includes('CaretRight'));
176
+
177
+ if (prevMonthButton) {
178
+ await userEvent.click(prevMonthButton);
179
+ console.log('Clicked prev month, submission count:', submissionCount);
180
+ }
181
+
182
+ if (nextMonthButton) {
183
+ await userEvent.click(nextMonthButton);
184
+ console.log('Clicked next month, submission count:', submissionCount);
185
+ }
186
+
187
+ // Success message if no form submission occurred
188
+ if (submissionCount === 0) {
189
+ console.log('TEST PASSED: Month navigation did not trigger form submission');
190
+ } else {
191
+ console.error('TEST FAILED: Month navigation triggered form submission');
192
+ }
193
+ }}
194
194
  >
195
- <div class="p-4">
196
- <form data-testid="test-form" onsubmit={(e) => e.preventDefault()}>
197
- <div class="mb-4">
198
- <label for="name" class="mb-1 block text-sm font-medium">Name</label>
199
- <input id="name" type="text" class="input input-bordered w-full" />
200
- </div>
201
-
202
- <div class="mb-4">
203
- <Dropdown bind:open={formIsOpen} side="dropdown-bottom" alignEnd={false}>
204
- {#snippet trigger({ Trigger })}
205
- <Trigger>
206
- <div data-testid="form-date-trigger" class="flex items-center gap-2">
207
- <Icon iconName="CalendarBlank" class="mr-2" size={16} />
208
- {formDisplayText}
209
- </div>
210
- </Trigger>
211
- {/snippet}
212
-
213
- {#snippet content()}
214
- <DatePicker selectedDate={formDropdownDate} onClick={handleFormDateSelection} />
215
- {/snippet}
216
- </Dropdown>
217
- </div>
218
-
219
- <button type="submit" class="btn btn-primary mt-4">Submit Form</button>
220
- </form>
221
- </div>
195
+ <div class="p-4">
196
+ <form data-testid="test-form" onsubmit={(e) => e.preventDefault()}>
197
+ <div class="mb-4">
198
+ <label for="name" class="mb-1 block text-sm font-medium">Name</label>
199
+ <input id="name" type="text" class="input input-bordered w-full" />
200
+ </div>
201
+
202
+ <div class="mb-4">
203
+ <Dropdown bind:open={formIsOpen} side="dropdown-bottom" alignEnd={false}>
204
+ {#snippet trigger({ Trigger })}
205
+ <Trigger>
206
+ <div data-testid="form-date-trigger" class="flex items-center gap-2">
207
+ <Icon iconName="CalendarBlank" class="mr-2" size={16} />
208
+ {formDisplayText}
209
+ </div>
210
+ </Trigger>
211
+ {/snippet}
212
+
213
+ {#snippet content()}
214
+ <DatePicker selectedDate={formDropdownDate} onClick={handleFormDateSelection} />
215
+ {/snippet}
216
+ </Dropdown>
217
+ </div>
218
+
219
+ <button type="submit" class="btn btn-primary mt-4">Submit Form</button>
220
+ </form>
221
+ </div>
222
222
  </Story>