@reshape-biotech/design-system 1.2.6 → 2.0.0

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 (187) hide show
  1. package/README.md +5 -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/collapsible/index.d.ts +1 -1
  19. package/dist/components/combobox/Combobox.stories.svelte +412 -412
  20. package/dist/components/combobox/components/combobox-add.svelte +8 -8
  21. package/dist/components/combobox/components/combobox-content.svelte +39 -39
  22. package/dist/components/combobox/components/combobox-indicator.svelte +1 -1
  23. package/dist/components/combobox/index.d.ts +1 -1
  24. package/dist/components/datepicker/DatePicker.stories.svelte +196 -196
  25. package/dist/components/datepicker/DatePicker.svelte +173 -173
  26. package/dist/components/divider/Divider.stories.svelte +7 -7
  27. package/dist/components/divider/Divider.svelte +9 -9
  28. package/dist/components/drawer/Drawer.stories.svelte +51 -51
  29. package/dist/components/drawer/Drawer.svelte +33 -33
  30. package/dist/components/drawer/DrawerLabel.svelte +10 -10
  31. package/dist/components/dropdown/Dropdown.stories.svelte +210 -210
  32. package/dist/components/dropdown/Dropdown.svelte +57 -57
  33. package/dist/components/dropdown/components/DropdownContent.svelte +16 -16
  34. package/dist/components/dropdown/components/DropdownMenu.svelte +10 -10
  35. package/dist/components/dropdown/components/DropdownTrigger.svelte +37 -37
  36. package/dist/components/dropdown/components/OutlinedButton.svelte +9 -9
  37. package/dist/components/empty-content/EmptyContent.stories.svelte +38 -38
  38. package/dist/components/empty-content/EmptyContent.svelte +12 -12
  39. package/dist/components/graphs/bar-chart/BarChart.stories.svelte +91 -91
  40. package/dist/components/graphs/bar-chart/BarChart.svelte +147 -147
  41. package/dist/components/graphs/bar-chart/StackedBarChart.stories.svelte +57 -57
  42. package/dist/components/graphs/bar-chart/StackedBarChart.svelte +198 -199
  43. package/dist/components/graphs/chart/Chart.stories.svelte +96 -96
  44. package/dist/components/graphs/chart/Chart.svelte +207 -207
  45. package/dist/components/graphs/line/LineChart.stories.svelte +138 -138
  46. package/dist/components/graphs/line/LineChart.svelte +140 -142
  47. package/dist/components/graphs/matrix/Matrix.stories.svelte +117 -117
  48. package/dist/components/graphs/matrix/Matrix.svelte +141 -141
  49. package/dist/components/graphs/multiline/MultiLineChart.stories.svelte +168 -168
  50. package/dist/components/graphs/multiline/MultiLineChart.svelte +236 -236
  51. package/dist/components/graphs/scatterplot/Scatterplot.stories.svelte +84 -84
  52. package/dist/components/graphs/scatterplot/Scatterplot.svelte +302 -302
  53. package/dist/components/graphs/utils/duration.d.ts +1 -0
  54. package/dist/components/graphs/utils/duration.js +33 -0
  55. package/dist/components/graphs/utils/tooltipFormatter.js +1 -1
  56. package/dist/components/icon-button/IconButton.stories.svelte +64 -64
  57. package/dist/components/icon-button/IconButton.svelte +88 -88
  58. package/dist/components/icons/AnalysisIcon.stories.svelte +18 -18
  59. package/dist/components/icons/AnalysisIcon.svelte +96 -96
  60. package/dist/components/icons/Icon.stories.svelte +111 -111
  61. package/dist/components/icons/Icon.svelte +17 -17
  62. package/dist/components/icons/PrincipalIcon.svelte +59 -59
  63. package/dist/components/icons/custom/Halo.svelte +31 -31
  64. package/dist/components/icons/custom/Well.svelte +27 -27
  65. package/dist/components/icons/index.js +1 -1
  66. package/dist/components/image/Image.svelte +42 -42
  67. package/dist/components/input/Input.stories.svelte +55 -55
  68. package/dist/components/input/Input.svelte +121 -121
  69. package/dist/components/label/Label.stories.svelte +18 -18
  70. package/dist/components/label/Label.svelte +11 -11
  71. package/dist/components/list/List.stories.svelte +84 -84
  72. package/dist/components/list/List.svelte +20 -20
  73. package/dist/components/logo/Logo.stories.svelte +15 -15
  74. package/dist/components/logo/Logo.svelte +30 -30
  75. package/dist/components/manual-cfu-counter/ManualCFUCounter.stories.svelte +102 -102
  76. package/dist/components/manual-cfu-counter/ManualCFUCounter.svelte +557 -557
  77. package/dist/components/manual-cfu-counter/test/ManualCFUCounterTestWrapper.svelte +11 -11
  78. package/dist/components/markdown/Markdown.stories.svelte +10 -10
  79. package/dist/components/markdown/Markdown.svelte +6 -6
  80. package/dist/components/modal/Modal.stories.svelte +29 -29
  81. package/dist/components/modal/Modal.svelte +71 -71
  82. package/dist/components/multi-cfu-counter/MultiCFUCounter.stories.svelte +201 -201
  83. package/dist/components/multi-cfu-counter/MultiCFUCounter.svelte +606 -606
  84. package/dist/components/multi-cfu-counter/test/MultiCFUCounterTestWrapper.svelte +17 -17
  85. package/dist/components/notification-popup/NotificationPopup.stories.svelte +18 -18
  86. package/dist/components/notification-popup/NotificationPopup.svelte +26 -26
  87. package/dist/components/notifications/Notifications.stories.svelte +101 -101
  88. package/dist/components/notifications/Notifications.svelte +9 -9
  89. package/dist/components/pill/Pill.stories.svelte +8 -8
  90. package/dist/components/pill/Pill.svelte +27 -27
  91. package/dist/components/progress-circle/ProgressCircle.stories.svelte +8 -8
  92. package/dist/components/progress-circle/ProgressCircle.svelte +54 -54
  93. package/dist/components/required-status-indicator/RequiredStatusIndicator.stories.svelte +18 -18
  94. package/dist/components/required-status-indicator/RequiredStatusIndicator.svelte +14 -14
  95. package/dist/components/segmented-control-buttons/ControlButton.svelte +36 -36
  96. package/dist/components/segmented-control-buttons/SegmentedControlButtons.stories.svelte +35 -35
  97. package/dist/components/segmented-control-buttons/SegmentedControlButtons.svelte +13 -13
  98. package/dist/components/select/Select.stories.svelte +200 -94
  99. package/dist/components/select/Select.stories.svelte.d.ts +1 -1
  100. package/dist/components/select/components/Group.svelte +24 -0
  101. package/dist/components/select/components/MultiSelectTrigger.svelte +66 -0
  102. package/dist/components/select/components/SelectContent.svelte +33 -0
  103. package/dist/components/select/components/SelectGroupHeading.svelte +19 -0
  104. package/dist/components/select/components/SelectItem.svelte +39 -0
  105. package/dist/components/select/components/SelectTrigger.svelte +48 -0
  106. package/dist/components/select/index.d.ts +10 -7
  107. package/dist/components/select/index.js +12 -1
  108. package/dist/components/sjsf-wrappers/SjsfNumberInputWrapper.svelte +102 -87
  109. package/dist/components/sjsf-wrappers/SjsfNumberInputWrapper.svelte.d.ts +1 -1
  110. package/dist/components/sjsf-wrappers/SjsfTextInputWrapper.svelte +53 -53
  111. package/dist/components/sjsf-wrappers/SjsfTextInputWrapper.svelte.d.ts +1 -1
  112. package/dist/components/sjsf-wrappers/sjsfCustomTheme.js +1 -1
  113. package/dist/components/skeleton-loader/SkeletonLoader.stories.svelte +32 -32
  114. package/dist/components/skeleton-loader/SkeletonLoader.svelte +10 -10
  115. package/dist/components/skeleton-loader/StatcardSkeleton.svelte +9 -9
  116. package/dist/components/skeleton-loader/components/Skeleton.svelte +7 -7
  117. package/dist/components/skeleton-loader/components/SkeletonImage.svelte +12 -12
  118. package/dist/components/slider/Slider.stories.svelte +23 -23
  119. package/dist/components/slider/Slider.svelte +107 -107
  120. package/dist/components/spinner/Spinner.stories.svelte +8 -8
  121. package/dist/components/spinner/Spinner.svelte +18 -18
  122. package/dist/components/stat-card/StatCard.stories.svelte +26 -26
  123. package/dist/components/stat-card/StatCard.svelte +128 -128
  124. package/dist/components/status-badge/StatusBadge.stories.svelte +365 -365
  125. package/dist/components/status-badge/StatusBadge.svelte +54 -54
  126. package/dist/components/stepper/Stepper.stories.svelte +219 -219
  127. package/dist/components/stepper/components/stepper-root.svelte +12 -12
  128. package/dist/components/stepper/components/stepper-step.svelte +83 -83
  129. package/dist/components/table/Table.stories.svelte +87 -87
  130. package/dist/components/table/Table.svelte +32 -32
  131. package/dist/components/table/components/TBody.svelte +7 -7
  132. package/dist/components/table/components/THead.svelte +7 -7
  133. package/dist/components/table/components/Td.svelte +8 -8
  134. package/dist/components/table/components/Th.svelte +8 -8
  135. package/dist/components/table/components/Tr.svelte +11 -11
  136. package/dist/components/tabs/Tabs.stories.svelte +20 -20
  137. package/dist/components/tabs/Tabs.svelte +8 -8
  138. package/dist/components/tabs/components/Content.svelte +8 -8
  139. package/dist/components/tabs/components/Tab.svelte +14 -14
  140. package/dist/components/tabs/components/Tabs.svelte +7 -7
  141. package/dist/components/tag/Tag.stories.svelte +57 -57
  142. package/dist/components/tag/Tag.svelte +95 -95
  143. package/dist/components/textarea/Textarea.stories.svelte +70 -70
  144. package/dist/components/textarea/Textarea.svelte +76 -76
  145. package/dist/components/toast/Toast.stories.svelte +204 -204
  146. package/dist/components/toast/Toast.svelte +53 -53
  147. package/dist/components/toggle/Toggle.stories.svelte +9 -9
  148. package/dist/components/toggle/Toggle.svelte +53 -53
  149. package/dist/components/toggle-icon-button/ToggleIconButton.stories.svelte +152 -152
  150. package/dist/components/toggle-icon-button/ToggleIconButton.svelte +99 -99
  151. package/dist/components/tooltip/Tooltip.stories.svelte +85 -111
  152. package/dist/components/tooltip/Tooltip.svelte +57 -46
  153. package/dist/components/tooltip/Tooltip.svelte.d.ts +1 -1
  154. package/dist/components/tooltip/TooltipTest.svelte +31 -0
  155. package/dist/components/tooltip/TooltipTest.svelte.d.ts +11 -0
  156. package/dist/fonts/index.js +1 -1
  157. package/dist/index.d.ts +0 -1
  158. package/dist/index.js +0 -1
  159. package/dist/notifications.d.ts +1 -4
  160. package/dist/notifications.js +1 -1
  161. package/dist/tailwind-safelist.js +406 -406
  162. package/dist/tailwind.preset.js +10 -10
  163. package/dist/tokens/colors.js +18 -18
  164. package/dist/tokens/typography.js +6 -6
  165. package/dist/tokens.js +19 -19
  166. package/dist/types/fonts.d.ts +2 -2
  167. package/package.json +199 -204
  168. package/dist/components/select/Select.svelte +0 -139
  169. package/dist/components/select/Select.svelte.d.ts +0 -60
  170. package/dist/components/select-new/Select.stories.svelte +0 -219
  171. package/dist/components/select-new/Select.stories.svelte.d.ts +0 -19
  172. package/dist/components/select-new/components/Group.svelte +0 -24
  173. package/dist/components/select-new/components/MultiSelectTrigger.svelte +0 -66
  174. package/dist/components/select-new/components/SelectContent.svelte +0 -33
  175. package/dist/components/select-new/components/SelectGroupHeading.svelte +0 -19
  176. package/dist/components/select-new/components/SelectItem.svelte +0 -39
  177. package/dist/components/select-new/components/SelectTrigger.svelte +0 -48
  178. package/dist/components/select-new/index.d.ts +0 -10
  179. package/dist/components/select-new/index.js +0 -12
  180. /package/dist/components/{select-new → select}/components/Group.svelte.d.ts +0 -0
  181. /package/dist/components/{select-new → select}/components/MultiSelectTrigger.svelte.d.ts +0 -0
  182. /package/dist/components/{select-new → select}/components/SelectContent.svelte.d.ts +0 -0
  183. /package/dist/components/{select-new → select}/components/SelectGroupHeading.svelte.d.ts +0 -0
  184. /package/dist/components/{select-new → select}/components/SelectItem.svelte.d.ts +0 -0
  185. /package/dist/components/{select-new → select}/components/SelectTrigger.svelte.d.ts +0 -0
  186. /package/dist/components/{select-new → select}/types.d.ts +0 -0
  187. /package/dist/components/{select-new → select}/types.js +0 -0
@@ -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,5 +1,5 @@
1
1
  import { Combobox } from 'bits-ui';
2
- export declare const Root: import("svelte").Component<import("bits-ui").ComboboxRootPropsWithoutHTML, {}, "open" | "value">;
2
+ export declare const Root: import("svelte").Component<import("bits-ui").ComboboxRootPropsWithoutHTML, {}, "value" | "open">;
3
3
  export declare const Item: import("svelte").Component<Combobox.ItemProps, {}, "ref">;
4
4
  export declare const Group: import("svelte").Component<Combobox.GroupProps, {}, "ref">;
5
5
  export declare const GroupHeading: import("svelte").Component<Combobox.GroupHeadingProps, {}, "ref">;
@@ -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>