@citizenplane/pimp 8.11.2 → 8.12.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 (52) hide show
  1. package/README.md +0 -2
  2. package/dist/pimp.es.js +1146 -1139
  3. package/dist/pimp.umd.js +3 -3
  4. package/dist/style.css +1 -1
  5. package/package.json +26 -4
  6. package/src/README.md +0 -25
  7. package/src/assets/styles/base/_base.scss +1 -5
  8. package/src/assets/styles/utilities/_index.scss +19 -0
  9. package/src/components/core/BaseInputLabel.vue +0 -2
  10. package/src/components/date-pickers/CpDate.vue +8 -5
  11. package/src/components/inputs/CpInput.vue +5 -16
  12. package/src/components/inputs/CpTextarea.vue +4 -6
  13. package/src/components/selects/CpSelect.vue +5 -5
  14. package/src/stories/BaseInputLabel.stories.ts +35 -0
  15. package/src/stories/CpAlert.stories.ts +90 -0
  16. package/src/stories/CpBadge.stories.ts +158 -0
  17. package/src/stories/CpButton.stories.ts +134 -0
  18. package/src/stories/CpCheckbox.stories.ts +184 -0
  19. package/src/stories/CpDate.stories.ts +110 -0
  20. package/src/stories/CpDatepicker.stories.ts +162 -0
  21. package/src/stories/CpDialog.stories.ts +53 -0
  22. package/src/stories/CpHeading.stories.ts +77 -0
  23. package/src/stories/CpIcon.stories.ts +79 -0
  24. package/src/stories/CpInput.stories.ts +155 -0
  25. package/src/stories/CpLoader.stories.ts +29 -0
  26. package/src/stories/CpRadio.stories.ts +139 -0
  27. package/src/stories/CpSelect.stories.ts +147 -0
  28. package/src/stories/CpSelectMenu.stories.ts +132 -0
  29. package/src/stories/CpSwitch.stories.ts +137 -0
  30. package/src/stories/CpTable.stories.ts +192 -0
  31. package/src/stories/CpTableEmptyState.stories.ts +34 -0
  32. package/src/stories/CpTextarea.stories.ts +112 -0
  33. package/src/stories/CpToaster.stories.ts +147 -0
  34. package/src/stories/CpTooltip.stories.ts +101 -0
  35. package/src/stories/TransitionExpand.stories.ts +85 -0
  36. package/vitest.workspace.js +31 -0
  37. package/src/App.vue +0 -110
  38. package/src/components/core/playground-sections/SectionAtomicElements.vue +0 -83
  39. package/src/components/core/playground-sections/SectionButtons.vue +0 -142
  40. package/src/components/core/playground-sections/SectionContainer.vue +0 -50
  41. package/src/components/core/playground-sections/SectionDatePickers.vue +0 -160
  42. package/src/components/core/playground-sections/SectionDialog.vue +0 -47
  43. package/src/components/core/playground-sections/SectionFeedbackIndicators.vue +0 -47
  44. package/src/components/core/playground-sections/SectionInputs.vue +0 -46
  45. package/src/components/core/playground-sections/SectionListsAndTables.vue +0 -268
  46. package/src/components/core/playground-sections/SectionSelectMenus.vue +0 -98
  47. package/src/components/core/playground-sections/SectionSelects.vue +0 -120
  48. package/src/components/core/playground-sections/SectionSimpleInputs.vue +0 -305
  49. package/src/components/core/playground-sections/SectionToasters.vue +0 -68
  50. package/src/components/core/playground-sections/SectionToggles.vue +0 -158
  51. package/src/components/core/playground-sections/SectionTypography.vue +0 -40
  52. package/src/main.js +0 -15
@@ -0,0 +1,35 @@
1
+ import type { Meta, StoryObj } from '@storybook/vue3'
2
+ import BaseInputLabel from '@/components/core/BaseInputLabel.vue'
3
+
4
+ const meta = {
5
+ title: 'BaseInputLabel',
6
+ component: BaseInputLabel,
7
+ argTypes: {
8
+ isInvalid: {
9
+ control: 'boolean',
10
+ description: 'Whether the label should show an invalid state',
11
+ },
12
+ },
13
+ } satisfies Meta<typeof BaseInputLabel>
14
+
15
+ export default meta
16
+ type Story = StoryObj<typeof meta>
17
+
18
+ export const Default: Story = {
19
+ args: {
20
+ isInvalid: false,
21
+ },
22
+ render: (args) => ({
23
+ components: { BaseInputLabel },
24
+ setup() {
25
+ return { args }
26
+ },
27
+ template: `
28
+ <div class="baseInputLabel-story">
29
+ <BaseInputLabel v-bind="args">
30
+ Default Label
31
+ </BaseInputLabel>
32
+ </div>
33
+ `,
34
+ }),
35
+ }
@@ -0,0 +1,90 @@
1
+ import type { Meta, StoryObj } from '@storybook/vue3'
2
+ import CpAlert from '@/components/feedback-indicators/CpAlert.vue'
3
+
4
+ const meta = {
5
+ title: 'CpAlert',
6
+ component: CpAlert,
7
+ argTypes: {
8
+ intent: {
9
+ control: 'select',
10
+ options: ['info', 'success', 'warning', 'critical'],
11
+ description: 'The type of alert',
12
+ },
13
+ title: {
14
+ control: 'text',
15
+ description: 'The title of the alert',
16
+ },
17
+ isClosable: {
18
+ control: 'boolean',
19
+ description: 'Whether the alert can be closed',
20
+ },
21
+ onClose: { action: 'closed' },
22
+ },
23
+ } satisfies Meta<typeof CpAlert>
24
+
25
+ export default meta
26
+ type Story = StoryObj<typeof meta>
27
+
28
+ const defaultTemplate = `
29
+ <CpAlert v-bind="args">
30
+ Default slot content
31
+ </CpAlert>
32
+ `
33
+
34
+ export const Default: Story = {
35
+ args: {
36
+ title: 'Alert title',
37
+ intent: 'info',
38
+ isClosable: true,
39
+ },
40
+ render: (args) => ({
41
+ components: { CpAlert },
42
+ setup() {
43
+ return { args }
44
+ },
45
+ template: defaultTemplate,
46
+ }),
47
+ }
48
+
49
+ export const Success: Story = {
50
+ args: {
51
+ ...Default.args,
52
+ intent: 'success',
53
+ },
54
+ render: (args) => ({
55
+ ...Default.render(args),
56
+ template: defaultTemplate,
57
+ }),
58
+ }
59
+ export const Warning: Story = {
60
+ args: {
61
+ ...Default.args,
62
+ intent: 'warning',
63
+ },
64
+ render: (args) => ({
65
+ ...Default.render(args),
66
+ template: defaultTemplate,
67
+ }),
68
+ }
69
+
70
+ export const Error: Story = {
71
+ args: {
72
+ ...Default.args,
73
+ intent: 'critical',
74
+ },
75
+ render: (args) => ({
76
+ ...Default.render(args),
77
+ template: defaultTemplate,
78
+ }),
79
+ }
80
+
81
+ export const NotClosable: Story = {
82
+ args: {
83
+ ...Default.args,
84
+ isClosable: false,
85
+ },
86
+ render: (args) => ({
87
+ ...Default.render(args),
88
+ template: defaultTemplate,
89
+ }),
90
+ }
@@ -0,0 +1,158 @@
1
+ import type { Meta, StoryObj } from '@storybook/vue3'
2
+
3
+ import CpBadge from '@/components/atomic-elements/CpBadge.vue'
4
+
5
+ const meta = {
6
+ title: 'CpBadge',
7
+ component: CpBadge,
8
+ argTypes: {
9
+ color: {
10
+ control: 'select',
11
+ options: ['neutral', 'blue', 'green', 'red', 'orange', 'purple', 'teal', 'pink', 'yellow'],
12
+ description: 'The color variant of the badge',
13
+ },
14
+ isSolid: {
15
+ control: 'boolean',
16
+ description: 'Whether the badge has a solid background',
17
+ },
18
+ isPlain: {
19
+ control: 'boolean',
20
+ description: 'Whether the badge has a plain style (no dot)',
21
+ },
22
+ isClearable: {
23
+ control: 'boolean',
24
+ description: 'Whether the badge can be cleared',
25
+ },
26
+ icon: {
27
+ control: 'select',
28
+ options: ['arrow-left', 'arrow-right', 'arrow-up', 'arrow-down', 'check'],
29
+ description: 'The icon to display in the badge',
30
+ },
31
+ onClear: { action: 'cleared' },
32
+ },
33
+ } satisfies Meta<typeof CpBadge>
34
+
35
+ export default meta
36
+ type Story = StoryObj<typeof meta>
37
+
38
+ export const Default: Story = {
39
+ args: {
40
+ color: 'neutral',
41
+ isSolid: false,
42
+ isPlain: false,
43
+ isClearable: false,
44
+ icon: '',
45
+ },
46
+ render: (args) => ({
47
+ components: { CpBadge },
48
+ setup() {
49
+ return { args }
50
+ },
51
+ template: '<CpBadge v-bind="args">Badge</CpBadge>',
52
+ }),
53
+ }
54
+
55
+ export const WithColors: Story = {
56
+ render: (args) => ({
57
+ components: { CpBadge },
58
+ setup() {
59
+ return { args }
60
+ },
61
+ template: `
62
+ <div style="display: flex; gap: 8px; flex-wrap: wrap;">
63
+ <CpBadge color="neutral">Neutral</CpBadge>
64
+ <CpBadge color="blue">Blue</CpBadge>
65
+ <CpBadge color="green">Green</CpBadge>
66
+ <CpBadge color="red">Red</CpBadge>
67
+ <CpBadge color="orange">Orange</CpBadge>
68
+ <CpBadge color="purple">Purple</CpBadge>
69
+ <CpBadge color="teal">Teal</CpBadge>
70
+ <CpBadge color="pink">Pink</CpBadge>
71
+ <CpBadge color="yellow">Yellow</CpBadge>
72
+ </div>
73
+ `,
74
+ }),
75
+ }
76
+
77
+ export const Solid: Story = {
78
+ render: (args) => ({
79
+ components: { CpBadge },
80
+ setup() {
81
+ return { args }
82
+ },
83
+ template: `
84
+ <div style="display: flex; gap: 8px; flex-wrap: wrap;">
85
+ <CpBadge color="neutral" is-solid>Neutral</CpBadge>
86
+ <CpBadge color="blue" is-solid>Blue</CpBadge>
87
+ <CpBadge color="green" is-solid>Green</CpBadge>
88
+ <CpBadge color="red" is-solid>Red</CpBadge>
89
+ <CpBadge color="orange" is-solid>Orange</CpBadge>
90
+ <CpBadge color="purple" is-solid>Purple</CpBadge>
91
+ <CpBadge color="teal" is-solid>Teal</CpBadge>
92
+ <CpBadge color="pink" is-solid>Pink</CpBadge>
93
+ <CpBadge color="yellow" is-solid>Yellow</CpBadge>
94
+ </div>
95
+ `,
96
+ }),
97
+ }
98
+
99
+ export const WithIcon: Story = {
100
+ args: {
101
+ color: 'blue',
102
+ icon: 'check',
103
+ },
104
+ render: (args) => ({
105
+ components: { CpBadge },
106
+ setup() {
107
+ return { args }
108
+ },
109
+ template: '<CpBadge v-bind="args">With Icon</CpBadge>',
110
+ }),
111
+ }
112
+
113
+ export const Clearable: Story = {
114
+ args: {
115
+ color: 'blue',
116
+ isClearable: true,
117
+ },
118
+ render: (args) => ({
119
+ components: { CpBadge },
120
+ setup() {
121
+ return { args }
122
+ },
123
+ template: '<CpBadge v-bind="args">Clearable Badge</CpBadge>',
124
+ }),
125
+ }
126
+
127
+ export const Plain: Story = {
128
+ args: {
129
+ color: 'green',
130
+ isPlain: true,
131
+ },
132
+ render: (args) => ({
133
+ components: { CpBadge },
134
+ setup() {
135
+ return { args }
136
+ },
137
+ template: '<CpBadge v-bind="args">Plain Badge</CpBadge>',
138
+ }),
139
+ }
140
+
141
+ export const AllVariants: Story = {
142
+ render: (args) => ({
143
+ components: { CpBadge },
144
+ setup() {
145
+ return { args }
146
+ },
147
+ template: `
148
+ <div style="display: flex; gap: 8px; flex-wrap: wrap;">
149
+ <CpBadge color="blue">Default</CpBadge>
150
+ <CpBadge color="blue" is-solid>Solid</CpBadge>
151
+ <CpBadge color="blue" is-plain>Plain</CpBadge>
152
+ <CpBadge color="blue" is-clearable>Clearable</CpBadge>
153
+ <CpBadge color="blue" icon="check">With Icon</CpBadge>
154
+ <CpBadge color="blue" is-solid is-clearable>Solid Clearable</CpBadge>
155
+ </div>
156
+ `,
157
+ }),
158
+ }
@@ -0,0 +1,134 @@
1
+ import type { Meta, StoryObj } from '@storybook/vue3'
2
+
3
+ import CpButton from '@/components/buttons/CpButton.vue'
4
+
5
+ const meta = {
6
+ title: 'CpButton',
7
+ component: CpButton,
8
+ argTypes: {
9
+ appearance: {
10
+ control: 'select',
11
+ options: ['default', 'primary', 'minimal'],
12
+ description: 'The visual style of the button',
13
+ },
14
+ color: {
15
+ control: 'select',
16
+ options: ['Blue', 'Purple', 'Green', 'Orange', 'Red'],
17
+ description: 'The color variant of the button',
18
+ },
19
+ disabled: {
20
+ control: 'boolean',
21
+ description: 'Whether the button is disabled',
22
+ },
23
+ tag: {
24
+ control: 'select',
25
+ options: ['button', 'a'],
26
+ description: 'The HTML element to render',
27
+ },
28
+ type: {
29
+ control: 'select',
30
+ options: ['button', 'submit', 'reset'],
31
+ description: 'The type of button',
32
+ },
33
+ isLoading: {
34
+ control: 'boolean',
35
+ description: 'Whether the button is in loading state',
36
+ },
37
+ isSquare: {
38
+ control: 'boolean',
39
+ description: 'Whether the button has square corners',
40
+ },
41
+ isLarge: {
42
+ control: 'boolean',
43
+ description: 'Whether the button is large size',
44
+ },
45
+ onClick: { action: 'clicked' },
46
+ },
47
+ } satisfies Meta<typeof CpButton>
48
+
49
+ export default meta
50
+ type Story = StoryObj<typeof meta>
51
+
52
+ const defaultTemplate = '<CpButton v-bind="args">Button</CpButton>'
53
+ const defaultRender = (args) => ({
54
+ components: { CpButton },
55
+ setup() {
56
+ return { args }
57
+ },
58
+ template: defaultTemplate,
59
+ })
60
+
61
+ export const Default: Story = {
62
+ args: {
63
+ appearance: 'default',
64
+ color: 'purple',
65
+ disabled: false,
66
+ tag: 'button',
67
+ type: 'button',
68
+ isLoading: false,
69
+ isSquare: false,
70
+ isLarge: false,
71
+ },
72
+ render: defaultRender,
73
+ }
74
+
75
+ export const Primary: Story = {
76
+ args: {
77
+ ...Default.args,
78
+ appearance: 'primary',
79
+ color: 'Purple',
80
+ },
81
+ render: defaultRender,
82
+ }
83
+
84
+ export const Minimal: Story = {
85
+ args: {
86
+ ...Default.args,
87
+ appearance: 'minimal',
88
+ color: 'Blue',
89
+ },
90
+ render: defaultRender,
91
+ }
92
+
93
+ export const WithIcons: Story = {
94
+ args: {
95
+ ...Default.args,
96
+ appearance: 'primary',
97
+ color: 'Purple',
98
+ },
99
+ render: (args) => ({
100
+ components: { CpButton },
101
+ setup: () => ({ args }),
102
+ template: `
103
+ <CpButton v-bind="args">
104
+ <template #icon-before>
105
+ <CpIcon type="arrow-left" />
106
+ </template>
107
+ Button with Icon
108
+ <template #icon-after>
109
+ <CpIcon type="arrow-right" />
110
+ </template>
111
+ </CpButton>
112
+ `,
113
+ }),
114
+ }
115
+
116
+ export const Loading: Story = {
117
+ args: { ...Default.args, isLoading: true },
118
+ render: defaultRender,
119
+ }
120
+
121
+ export const Disabled: Story = {
122
+ args: { ...Default.args, disabled: true },
123
+ render: defaultRender,
124
+ }
125
+
126
+ export const Large: Story = {
127
+ args: { ...Default.args, isLarge: true },
128
+ render: defaultRender,
129
+ }
130
+
131
+ export const Square: Story = {
132
+ args: { ...Default.args, isSquare: true },
133
+ render: defaultRender,
134
+ }
@@ -0,0 +1,184 @@
1
+ import type { Meta, StoryObj } from '@storybook/vue3'
2
+ import { ref } from 'vue'
3
+ import CpCheckbox from '@/components/toggles/CpCheckbox.vue'
4
+
5
+ const meta = {
6
+ title: 'CpCheckbox',
7
+ component: CpCheckbox,
8
+ argTypes: {
9
+ modelValue: {
10
+ control: 'boolean',
11
+ description: 'The checkbox value',
12
+ },
13
+ checkboxValue: {
14
+ control: 'text',
15
+ description: 'Value when used in a group',
16
+ },
17
+ checkboxLabel: {
18
+ control: 'text',
19
+ description: 'Label text for the checkbox',
20
+ },
21
+ isDisabled: {
22
+ control: 'boolean',
23
+ description: 'Whether the checkbox is disabled',
24
+ },
25
+ groupName: {
26
+ control: 'text',
27
+ description: 'Name attribute for checkbox group',
28
+ },
29
+ capitalizeLabel: {
30
+ control: 'boolean',
31
+ description: 'Whether to capitalize the first letter of the label',
32
+ },
33
+ color: {
34
+ control: 'select',
35
+ options: ['blue', 'purple'],
36
+ description: 'Color variant of the checkbox',
37
+ },
38
+ reverseLabel: {
39
+ control: 'boolean',
40
+ description: 'Whether to show label before the checkbox',
41
+ },
42
+ autofocus: {
43
+ control: 'boolean',
44
+ description: 'Whether to autofocus the checkbox',
45
+ },
46
+ helper: {
47
+ control: 'text',
48
+ description: 'Helper text to display below the label',
49
+ },
50
+ },
51
+ } satisfies Meta<typeof CpCheckbox>
52
+
53
+ export default meta
54
+ type Story = StoryObj<typeof meta>
55
+
56
+ export const Default: Story = {
57
+ args: {
58
+ checkboxLabel: 'Checkbox Label',
59
+ modelValue: false,
60
+ isDisabled: false,
61
+ capitalizeLabel: true,
62
+ color: 'blue',
63
+ reverseLabel: false,
64
+ autofocus: false,
65
+ helper: '',
66
+ },
67
+ render: (args) => ({
68
+ components: { CpCheckbox },
69
+ setup() {
70
+ const value = ref(args.modelValue)
71
+ return { args, value }
72
+ },
73
+ template: `
74
+ <div style="padding: 20px;">
75
+ <CpCheckbox
76
+ v-model="value"
77
+ v-bind="args"
78
+ />
79
+ </div>
80
+ `,
81
+ }),
82
+ }
83
+
84
+ export const Checked: Story = {
85
+ args: {
86
+ ...Default.args,
87
+ modelValue: true,
88
+ },
89
+ }
90
+
91
+ export const Disabled: Story = {
92
+ args: {
93
+ ...Default.args,
94
+ isDisabled: true,
95
+ },
96
+ }
97
+
98
+ export const WithHelper: Story = {
99
+ args: {
100
+ ...Default.args,
101
+ helper: 'This is a helper text that provides additional information',
102
+ },
103
+ }
104
+
105
+ export const Purple: Story = {
106
+ args: {
107
+ ...Default.args,
108
+ color: 'purple',
109
+ },
110
+ }
111
+
112
+ export const Reversed: Story = {
113
+ args: {
114
+ ...Default.args,
115
+ reverseLabel: true,
116
+ },
117
+ }
118
+
119
+ export const WithoutCapitalization: Story = {
120
+ args: {
121
+ ...Default.args,
122
+ capitalizeLabel: false,
123
+ checkboxLabel: 'checkbox label',
124
+ },
125
+ }
126
+
127
+ export const CheckboxGroup: Story = {
128
+ render: () => ({
129
+ components: { CpCheckbox },
130
+ setup() {
131
+ const selectedValues = ref(['option1'])
132
+ return { selectedValues }
133
+ },
134
+ template: `
135
+ <div style="padding: 20px; display: flex; flex-direction: column; gap: 12px;">
136
+ <CpCheckbox
137
+ v-model="selectedValues"
138
+ checkbox-value="option1"
139
+ checkbox-label="Option 1"
140
+ group-name="group1"
141
+ />
142
+ <CpCheckbox
143
+ v-model="selectedValues"
144
+ checkbox-value="option2"
145
+ checkbox-label="Option 2"
146
+ group-name="group1"
147
+ />
148
+ <CpCheckbox
149
+ v-model="selectedValues"
150
+ checkbox-value="option3"
151
+ checkbox-label="Option 3"
152
+ group-name="group1"
153
+ />
154
+ </div>
155
+ `,
156
+ }),
157
+ }
158
+
159
+ export const CustomContent: Story = {
160
+ args: {
161
+ ...Default.args,
162
+ checkboxLabel: '',
163
+ },
164
+ render: (args) => ({
165
+ components: { CpCheckbox },
166
+ setup() {
167
+ const value = ref(args.modelValue)
168
+ return { args, value }
169
+ },
170
+ template: `
171
+ <div style="padding: 20px;">
172
+ <CpCheckbox
173
+ v-model="value"
174
+ v-bind="args"
175
+ >
176
+ <div style="display: flex; flex-direction: column; gap: 4px;">
177
+ <span style="font-weight: 500;">Custom Content</span>
178
+ <span style="font-size: 14px; color: #666;">With multiple lines and styling</span>
179
+ </div>
180
+ </CpCheckbox>
181
+ </div>
182
+ `,
183
+ }),
184
+ }
@@ -0,0 +1,110 @@
1
+ import type { Meta, StoryObj } from '@storybook/vue3'
2
+ import { ref } from 'vue'
3
+ import CpDate from '@/components/date-pickers/CpDate.vue'
4
+
5
+ const meta = {
6
+ title: 'CpDate',
7
+ component: CpDate,
8
+ argTypes: {
9
+ modelValue: {
10
+ control: 'text',
11
+ description: 'The date value (ISO format)',
12
+ },
13
+ label: {
14
+ control: 'text',
15
+ description: 'Label text for the date input',
16
+ },
17
+ required: {
18
+ control: 'boolean',
19
+ description: 'Whether the field is required',
20
+ },
21
+ disabled: {
22
+ control: 'boolean',
23
+ description: 'Whether the field is disabled',
24
+ },
25
+ isInvalid: {
26
+ control: 'boolean',
27
+ description: 'Whether the field is in an invalid state',
28
+ },
29
+ errorMessage: {
30
+ control: 'text',
31
+ description: 'Custom error message to display',
32
+ },
33
+ displayErrorMessage: {
34
+ control: 'boolean',
35
+ description: 'Whether to display error messages',
36
+ },
37
+ autocompleteBirthday: {
38
+ control: 'boolean',
39
+ description: 'Whether to enable birthday autocomplete',
40
+ },
41
+ locale: {
42
+ control: 'text',
43
+ description: 'Locale for date formatting',
44
+ },
45
+ minDate: {
46
+ control: 'text',
47
+ description: 'Minimum allowed date',
48
+ },
49
+ maxDate: {
50
+ control: 'text',
51
+ description: 'Maximum allowed date',
52
+ },
53
+ },
54
+ } satisfies Meta<typeof CpDate>
55
+
56
+ export default meta
57
+ type Story = StoryObj<typeof meta>
58
+
59
+ export const Default: Story = {
60
+ args: {
61
+ label: 'Date',
62
+ required: false,
63
+ disabled: false,
64
+ isInvalid: false,
65
+ displayErrorMessage: true,
66
+ },
67
+ render: (args) => ({
68
+ components: { CpDate },
69
+ setup() {
70
+ const date = ref('')
71
+ return { args, date }
72
+ },
73
+ template: `
74
+ <div style="max-width: 400px; padding: 20px;">
75
+ <CpDate
76
+ v-model="date"
77
+ v-bind="args"
78
+ @on-validation="(isValid) => console.log('Validation:', isValid)"
79
+ />
80
+ </div>
81
+ `,
82
+ }),
83
+ }
84
+
85
+ export const Required: Story = {
86
+ args: {
87
+ ...Default.args,
88
+ label: 'Required Date',
89
+ required: true,
90
+ displayErrorMessage: false,
91
+ },
92
+ }
93
+
94
+ export const WithError: Story = {
95
+ args: {
96
+ ...Default.args,
97
+ label: 'Date with Error',
98
+ isInvalid: true,
99
+ required: true,
100
+ errorMessage: 'Please enter a valid date',
101
+ },
102
+ }
103
+
104
+ export const Disabled: Story = {
105
+ args: {
106
+ ...Default.args,
107
+ label: 'Disabled Date',
108
+ disabled: true,
109
+ },
110
+ }