@carbon/vue 3.0.5-alpha.0 → 3.0.7-alpha.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 (64) hide show
  1. package/README.md +16 -0
  2. package/dist/carbon-vue-3.common.js +22859 -11008
  3. package/dist/carbon-vue-3.common.js.map +1 -1
  4. package/dist/carbon-vue-3.css +1 -0
  5. package/dist/carbon-vue-3.umd.js +22859 -11008
  6. package/dist/carbon-vue-3.umd.js.map +1 -1
  7. package/dist/carbon-vue-3.umd.min.js +30 -2
  8. package/dist/carbon-vue-3.umd.min.js.map +1 -1
  9. package/package.json +5 -4
  10. package/src/components/CvAccordion/CvAccordion.stories.js +1 -0
  11. package/src/components/CvButton/CvButton.stories.js +3 -3
  12. package/src/components/CvButton/CvButtonSkeleton.stories.js +79 -0
  13. package/src/components/CvButton/CvButtonSkeleton.vue +19 -0
  14. package/src/components/CvButton/index.js +8 -1
  15. package/src/components/CvDatePicker/CvDatePicker-notes.md +86 -0
  16. package/src/components/CvDatePicker/CvDatePicker.stories.js +241 -0
  17. package/src/components/CvDatePicker/CvDatePicker.vue +402 -0
  18. package/src/components/CvDatePicker/CvDatePickerSkeleton.vue +106 -0
  19. package/src/components/CvDatePicker/index.js +4 -0
  20. package/src/components/CvDatePicker/plugins/appendToPlugin.js +64 -0
  21. package/src/components/CvDatePicker/plugins/fixEventsPlugin.js +79 -0
  22. package/src/components/CvDatePicker/plugins/monthSelectPlugin.js +86 -0
  23. package/src/components/CvDatePicker/plugins/rangePlugin.js +47 -0
  24. package/src/components/CvDropdown/CvDropdown.stories.mdx +407 -0
  25. package/src/components/CvDropdown/CvDropdown.vue +418 -0
  26. package/src/components/CvDropdown/CvDropdownItem.vue +86 -0
  27. package/src/components/CvDropdown/CvDropdownSkeleton.vue +17 -0
  28. package/src/components/CvDropdown/index.js +5 -0
  29. package/src/components/CvForm/CvForm.stories.mdx +193 -0
  30. package/src/components/CvForm/CvForm.vue +9 -0
  31. package/src/components/CvForm/CvFormGroup.vue +27 -0
  32. package/src/components/CvForm/CvFormItem.vue +9 -0
  33. package/src/components/CvForm/index.js +5 -0
  34. package/src/components/CvInlineLoading/CvInlineLoading.stories.mdx +87 -0
  35. package/src/components/CvInlineLoading/CvInlineLoading.vue +144 -0
  36. package/src/components/CvInlineLoading/consts.js +9 -0
  37. package/src/components/CvInlineLoading/index.js +4 -0
  38. package/src/components/CvModal/CvModal.stories.mdx +236 -0
  39. package/src/components/CvModal/CvModal.vue +401 -0
  40. package/src/components/CvModal/index.js +3 -0
  41. package/src/components/CvMultiSelect/CvMultiSelect.stories.mdx +333 -0
  42. package/src/components/CvMultiSelect/CvMultiSelect.vue +705 -0
  43. package/src/components/CvMultiSelect/consts.js +16 -0
  44. package/src/components/CvMultiSelect/index.js +3 -0
  45. package/src/components/CvNumberInput/CvNumberInput.stories.js +265 -0
  46. package/src/components/CvNumberInput/CvNumberInput.vue +227 -0
  47. package/src/components/CvNumberInput/CvNumberInputSkeleton.stories.js +30 -0
  48. package/src/components/CvNumberInput/CvNumberInputSkeleton.vue +10 -0
  49. package/src/components/CvNumberInput/StorybookGroupConst.js +1 -0
  50. package/src/components/CvNumberInput/__tests__/__snapshots__/CvNumberInput.spec.js.snap +21 -0
  51. package/src/components/CvNumberInput/index.js +5 -0
  52. package/src/components/CvTabs/CvTab.vue +77 -0
  53. package/src/components/CvTabs/CvTabs.stories.mdx +175 -0
  54. package/src/components/CvTabs/CvTabs.vue +406 -0
  55. package/src/components/CvTabs/CvTabsSkeleton.vue +24 -0
  56. package/src/components/CvTabs/_SbContainer.vue +22 -0
  57. package/src/components/CvTabs/index.js +5 -0
  58. package/src/components/CvToggle/CvToggle-Skeleton.vue +29 -0
  59. package/src/components/CvToggle/CvToggle.stories.js +232 -0
  60. package/src/components/CvToggle/CvToggle.vue +70 -0
  61. package/src/components/CvToggle/__tests__/__snapshots__/CvToggle.spec.js.snap +7 -0
  62. package/src/components/CvToggle/index.js +4 -0
  63. package/src/global/storybook-utils/story-source-code.js +1 -0
  64. package/src/use/cvInput.js +34 -0
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@carbon/vue",
3
3
  "license": "Apache-2.0",
4
- "version": "3.0.5-alpha.0",
4
+ "version": "3.0.7-alpha.0",
5
5
  "description": "A collection of components for the Carbon Design System built using Vue.js",
6
6
  "packageManager": "yarn@3.2.0",
7
7
  "main": "dist/carbon-vue-3.umd.min.js",
@@ -28,6 +28,7 @@
28
28
  "@carbon/icons-vue": "^10.60.0",
29
29
  "@vueuse/core": "^4.11.2",
30
30
  "carbon-components": "^10.58.5",
31
+ "flatpickr": "^4.6.13",
31
32
  "mitt": "^3.0.0"
32
33
  },
33
34
  "devDependencies": {
@@ -42,7 +43,7 @@
42
43
  "@vue/cli-plugin-eslint": "^5.0.8",
43
44
  "@vue/cli-plugin-unit-jest": "^5.0.8",
44
45
  "@vue/cli-service": "^5.0.8",
45
- "@vue/compiler-sfc": "^3.2.45",
46
+ "@vue/compiler-sfc": "^3.3.4",
46
47
  "@vue/eslint-config-prettier": "^7.0.0",
47
48
  "@vue/test-utils": "^2.2.4",
48
49
  "@vue/vue3-jest": "^27.0.0",
@@ -69,7 +70,7 @@
69
70
  "stylelint": "^14.15.0",
70
71
  "stylelint-config-property-sort-order-smacss": "^9.0.0",
71
72
  "stylelint-config-sass-guidelines": "^9.0.1",
72
- "vue": "^3.2.45",
73
+ "vue": "^3.3.4",
73
74
  "vue-loader": "^17.0.1",
74
75
  "webpack": "^5.75.0"
75
76
  },
@@ -202,5 +203,5 @@
202
203
  "url": "git+https://github.com/carbon-design-system/carbon-components-vue.git"
203
204
  },
204
205
  "sideEffects": true,
205
- "gitHead": "797d1eaacec0dcb8802ff5fea1fb08947955c9aa"
206
+ "gitHead": "39152672459e58bef32b4eba92078c4ebdbe7ec9"
206
207
  }
@@ -30,6 +30,7 @@ const template = `<cv-accordion @change="onChange" v-bind="args">
30
30
  </cv-accordion-item>
31
31
  </cv-accordion>`;
32
32
  const Template = (args, { argTypes }) => {
33
+ // eslint-disable-next-line no-param-reassign
33
34
  args = {
34
35
  ...args,
35
36
  align: alignConsts[alignConsts.$labels[args.align]],
@@ -87,7 +87,7 @@ Secondary.parameters = storyParametersObject(
87
87
 
88
88
  export const Field = Template.bind({});
89
89
  Field.args = {
90
- 'slotArgs.default': 'Field size',
90
+ default: 'Field size',
91
91
  size: 'field',
92
92
  };
93
93
  Field.parameters = storyParametersObject(
@@ -98,7 +98,7 @@ Field.parameters = storyParametersObject(
98
98
 
99
99
  export const Small = Template.bind({});
100
100
  Small.args = {
101
- 'slotArgs.default': 'sm',
101
+ default: 'sm',
102
102
  size: 'sm',
103
103
  };
104
104
  Small.parameters = storyParametersObject(
@@ -109,7 +109,7 @@ Small.parameters = storyParametersObject(
109
109
 
110
110
  export const Large = Template.bind({});
111
111
  Large.args = {
112
- 'slotArgs.default': 'Large size',
112
+ default: 'Large size',
113
113
  size: 'lg',
114
114
  };
115
115
  Large.parameters = storyParametersObject(
@@ -0,0 +1,79 @@
1
+ import { CvButtonSkeleton } from '.';
2
+ import { buttonSizes } from './consts.js';
3
+ import {
4
+ sbCompPrefix,
5
+ storybookControlsFromProps,
6
+ storyParametersObject,
7
+ } from '../../global/storybook-utils';
8
+ import { sbBtnPrefix } from './sbBtnPrefix';
9
+
10
+ import { props as commonCvButtonProps } from './CvButtonCommon';
11
+
12
+ export default {
13
+ title: `${sbCompPrefix}/${sbBtnPrefix}/CvButtonSkeleton`,
14
+ component: CvButtonSkeleton,
15
+ argTypes: {
16
+ ...storybookControlsFromProps({ size: commonCvButtonProps.size }),
17
+ size: {
18
+ control: { type: 'select', options: buttonSizes },
19
+ defaultValue: 'default',
20
+ },
21
+ },
22
+ };
23
+
24
+ const template = `<cv-button-skeleton v-bind="buttonProps" />`;
25
+ const Template = (args, { argTypes }) => {
26
+ const buttonProps = { ...args };
27
+ return {
28
+ props: Object.keys(argTypes),
29
+ components: { CvButtonSkeleton },
30
+ template,
31
+ setup() {
32
+ return { buttonProps };
33
+ },
34
+ };
35
+ };
36
+
37
+ export const Default = Template.bind({});
38
+ Default.args = {
39
+ size: 'default',
40
+ };
41
+ Default.parameters = storyParametersObject(
42
+ Default.parameters,
43
+ template,
44
+ Default.args,
45
+ 'v-bind="buttonProps"'
46
+ );
47
+
48
+ export const Field = Template.bind({});
49
+ Field.args = {
50
+ size: 'field',
51
+ };
52
+ Field.parameters = storyParametersObject(
53
+ Field.parameters,
54
+ template,
55
+ Field.args,
56
+ 'v-bind="buttonProps"'
57
+ );
58
+
59
+ export const Small = Template.bind({});
60
+ Small.args = {
61
+ size: 'sm',
62
+ };
63
+ Small.parameters = storyParametersObject(
64
+ Small.parameters,
65
+ template,
66
+ Small.args,
67
+ 'v-bind="buttonProps"'
68
+ );
69
+
70
+ export const Large = Template.bind({});
71
+ Large.args = {
72
+ size: 'lg',
73
+ };
74
+ Large.parameters = storyParametersObject(
75
+ Large.parameters,
76
+ template,
77
+ Large.args,
78
+ 'v-bind="buttonProps"'
79
+ );
@@ -0,0 +1,19 @@
1
+ <template>
2
+ <button disabled :class="buttonClasses" type="button"></button>
3
+ </template>
4
+
5
+ <script setup>
6
+ import {
7
+ props as commonCvButtonProps,
8
+ useCvButtonCommon,
9
+ } from './CvButtonCommon';
10
+
11
+ const props = defineProps({
12
+ /**
13
+ * Size of the button
14
+ */
15
+ size: commonCvButtonProps.size,
16
+ });
17
+
18
+ const { buttonClasses } = useCvButtonCommon(undefined, props.size, true);
19
+ </script>
@@ -1,7 +1,14 @@
1
1
  import CvButton from './CvButton.vue';
2
2
  import CvIconButton from './CvIconButton.vue';
3
3
  import CvButtonSet from './CvButtonSet.vue';
4
+ import CvButtonSkeleton from './CvButtonSkeleton.vue';
4
5
  import CvButtonConsts from './consts';
5
6
 
6
- export { CvButton, CvButtonConsts, CvButtonSet, CvIconButton };
7
+ export {
8
+ CvButton,
9
+ CvButtonConsts,
10
+ CvButtonSet,
11
+ CvIconButton,
12
+ CvButtonSkeleton,
13
+ };
7
14
  export default CvButton;
@@ -0,0 +1,86 @@
1
+ # cv-date-picker
2
+
3
+ A Vue implementation of a Carbon Components date-picker.
4
+
5
+ http://www.carbondesignsystem.com/components/date-picker/code
6
+
7
+ ## Usage
8
+
9
+ ### Short
10
+
11
+ ```html
12
+ <cv-date-picker
13
+ kind="short"
14
+ pattern="\d{1,2}/\d{2}"
15
+ placeholder="mm/yy"
16
+ @onChange="actionChange"
17
+ >
18
+ </cv-date-picker>
19
+ ```
20
+
21
+ ### Simple
22
+
23
+ ```html
24
+ <cv-date-picker
25
+ kind="simple"
26
+ pattern="\d{1,2}/\d{1,2}/\d{4}"
27
+ placeholder="mm/dd/yyyy"
28
+ @onChange="actionChange"
29
+ >
30
+ </cv-date-picker>
31
+ ```
32
+
33
+ ### Single
34
+
35
+ ```html
36
+ <cv-date-picker
37
+ kind="single"
38
+ pattern="\d{1,2}/\d{1,2}/\d{4}"
39
+ placeholder="mm/dd/yyyy"
40
+ :cal-options="calOptions"
41
+ @onChange="actionChange"
42
+ >
43
+ </cv-date-picker>
44
+ ```
45
+
46
+ ### Range
47
+
48
+ ```html
49
+ <cv-date-picker
50
+ kind="range"
51
+ pattern="\d{1,2}/\d{1,2}/\d{4}"
52
+ placeholder="mm/dd/yyyy"
53
+ :cal-options="calOptions"
54
+ @onChange="actionChange"
55
+ >
56
+ </cv-date-picker>
57
+ ```
58
+
59
+ ## Attributes
60
+
61
+ - dateLabel: optional label for the date input (first in range)
62
+ - dateEndLabel: optional for the end range date input (first in range)
63
+ - kind: 'short', 'simple', 'single', 'range' as per carbon components core only single and range have a date picker
64
+ - calOptions: Options to confiure flatpickr, see flatpickr for full details.
65
+
66
+ - e.g. { dateFormat: 'd/m/Y', defaultDate: '01/01/2019' }
67
+ - NOTE: passing event handlers onChange and onValueUpdate are swallowed internally. Both produce an onChange.
68
+
69
+ - pattern: Regex pattern used for form validation '\\d{1,2}/\\d{1,2}/\\d{4}',
70
+ - placeholder: Shown when date picker is empty,
71
+ - invalidMessage: Message displayed if invalid is true
72
+
73
+ - value: can be
74
+ - Javascript Date
75
+ - String with a date matching the format based on the calendar options
76
+ - Object (kind === 'range' only): { startDate: val, endDate: val2 } where val and val2 are a javascript date or date string as per format option
77
+
78
+ ## Slots
79
+
80
+ invalid-message: Overrides the invalid message property
81
+
82
+ ###
83
+
84
+ ## Events
85
+
86
+ - change raised when single or ranged date picker value changes.
@@ -0,0 +1,241 @@
1
+ import {
2
+ sbCompPrefix,
3
+ storyParametersObject,
4
+ } from '../../global/storybook-utils';
5
+
6
+ import { CvDatePicker } from '.';
7
+ import { CvDatePickerSkeleton } from '.';
8
+ import { action } from '@storybook/addon-actions';
9
+ import { ref } from 'vue';
10
+
11
+ const initArgs = {
12
+ dateLabel: 'Date label',
13
+ invalidMessage: '',
14
+ };
15
+
16
+ const now = new Date();
17
+ const tomorrow = new Date();
18
+ tomorrow.setDate(now.getDate() + 1);
19
+
20
+ export default {
21
+ title: `${sbCompPrefix}/CvDatePicker`,
22
+ component: CvDatePicker,
23
+ parameters: {
24
+ a11y: {
25
+ config: {
26
+ rules: [],
27
+ },
28
+ manual: true,
29
+ },
30
+ },
31
+ argTypes: {
32
+ dateLabel: { type: String, description: 'Date picker label' },
33
+ invalidMessage: {
34
+ type: String,
35
+ description: 'Date picker text on invalid value',
36
+ },
37
+ },
38
+ };
39
+
40
+ /* DEFAULT STORY */
41
+
42
+ const template = `
43
+ <div>
44
+ <cv-date-picker v-bind='args' @change='onChange'>
45
+ </cv-date-picker>
46
+ </div>
47
+ `;
48
+ const Template = args => {
49
+ return {
50
+ components: { CvDatePicker },
51
+ setup: () => ({
52
+ args,
53
+ onChange: action('change'),
54
+ }),
55
+ template,
56
+ };
57
+ };
58
+
59
+ export const Default = Template.bind({});
60
+ Default.args = initArgs;
61
+ Default.parameters = storyParametersObject(
62
+ Default.parameters,
63
+ template,
64
+ Default.args
65
+ );
66
+
67
+ /* V-MODEL STORY */
68
+
69
+ const modelValue = ref('');
70
+ const templateVModel = `
71
+ <div>
72
+ <cv-date-picker v-bind='args' @change='onChange' v-model="modelValue">
73
+ </cv-date-picker>
74
+ </div>
75
+ <div style="margin: 32px 0;">
76
+ <div style="font-size: 150%;">Sample interaction</div>
77
+ <label for="date-model" style='margin-right: 0.5rem'>V-model:</label>
78
+ <input id="date-model" type="text" :value="modelValue.startDate || modelValue" @change="ev => { if (args.kind === 'range') { modelValue.startDate = ev.currentTarget.value } else { modelValue = ev.currentTarget.value } }"/>
79
+ <input v-if="args.kind === 'range'" id="date-model" type="text" :value="modelValue.endDate" @change="ev => modelValue.endDate = ev.currentTarget.value"/>
80
+ </div>
81
+ `;
82
+
83
+ const TemplateVModel = args => {
84
+ return {
85
+ components: { CvDatePicker },
86
+ setup: () => ({
87
+ args,
88
+ modelValue,
89
+ now,
90
+ onChange: action('change'),
91
+ }),
92
+ template: templateVModel,
93
+ };
94
+ };
95
+
96
+ export const vModel = TemplateVModel.bind({});
97
+ vModel.args = initArgs;
98
+ vModel.parameters = storyParametersObject(
99
+ vModel.parameters,
100
+ templateVModel,
101
+ vModel.args
102
+ );
103
+
104
+ /* INVALID MESSAGE STORY */
105
+
106
+ const templateInvalidMessage = `
107
+ <div>
108
+ <cv-date-picker v-bind='args' @change='onChange'>
109
+ </cv-date-picker>
110
+ </div>
111
+ `;
112
+
113
+ const TemplateInvalidMessage = args => {
114
+ return {
115
+ components: { CvDatePicker },
116
+ setup: () => ({
117
+ args,
118
+ onChange: action('change'),
119
+ }),
120
+ template: templateInvalidMessage,
121
+ };
122
+ };
123
+
124
+ export const InvalidMessage = TemplateInvalidMessage.bind({});
125
+ InvalidMessage.args = { ...initArgs, invalidMessage: 'Invalid date' };
126
+
127
+ /* INVALID MESSAGE SLOT STORY */
128
+
129
+ const templateInvalidMessageSlot = `
130
+ <div>
131
+ <cv-date-picker v-bind='args' @change='onChange'>
132
+ <template #invalid-message>Invalid date slot</template>
133
+ </cv-date-picker>
134
+ </div>
135
+ `;
136
+
137
+ const TemplateInvalidMessageSlot = args => {
138
+ return {
139
+ components: { CvDatePicker },
140
+ setup: () => ({
141
+ args,
142
+ onChange: action('change'),
143
+ }),
144
+ template: templateInvalidMessageSlot,
145
+ };
146
+ };
147
+
148
+ export const InvalidMessageSlot = TemplateInvalidMessageSlot.bind({});
149
+ InvalidMessageSlot.args = initArgs;
150
+
151
+ /* SINGLE USING DATE STORY */
152
+
153
+ const templateSingleUsingDate = `
154
+ <div>
155
+ <cv-date-picker v-bind='args' @change='onChange' kind="single" :value="now">
156
+ </cv-date-picker>
157
+ </div>
158
+ `;
159
+
160
+ const TemplateSingleUsingDate = args => {
161
+ return {
162
+ components: { CvDatePicker },
163
+ setup: () => ({
164
+ args,
165
+ now,
166
+ onChange: action('change'),
167
+ }),
168
+ template: templateSingleUsingDate,
169
+ };
170
+ };
171
+
172
+ export const SingleUsingDate = TemplateSingleUsingDate.bind({});
173
+ SingleUsingDate.args = initArgs;
174
+
175
+ /* RANGE USING DATE STORY */
176
+
177
+ const templateRangeUsingDate = `
178
+ <div>
179
+ <cv-date-picker v-bind='args' @change='onChange' kind="range" :value="{startDate: now.toLocaleDateString(), endDate: tomorrow.toLocaleDateString()}">
180
+ </cv-date-picker>
181
+ </div>
182
+ `;
183
+
184
+ const TemplateRangeUsingDate = args => {
185
+ return {
186
+ components: { CvDatePicker },
187
+ setup: () => ({
188
+ args,
189
+ now,
190
+ tomorrow,
191
+ onChange: action('change'),
192
+ }),
193
+ template: templateRangeUsingDate,
194
+ };
195
+ };
196
+
197
+ export const RangeUsingDate = TemplateRangeUsingDate.bind({});
198
+ RangeUsingDate.args = initArgs;
199
+
200
+ /* MINIMAL STORY */
201
+
202
+ const templateMinimal = `
203
+ <div>
204
+ <cv-date-picker v-bind='args' @change='onChange'>
205
+ </cv-date-picker>
206
+ </div>
207
+ `;
208
+
209
+ const TemplateMinimal = args => {
210
+ return {
211
+ components: { CvDatePicker },
212
+ setup: () => ({
213
+ args,
214
+ onChange: action('change'),
215
+ }),
216
+ template: templateMinimal,
217
+ };
218
+ };
219
+
220
+ export const Minimal = TemplateMinimal.bind({});
221
+
222
+ /* SKELETON STORY */
223
+
224
+ const templateSkeleton = `
225
+ <div>
226
+ <cv-date-picker-skeleton v-bind='args'></cv-date-picker-skeleton>
227
+ </div>
228
+ `;
229
+
230
+ const TemplateSkeleton = args => {
231
+ return {
232
+ components: { CvDatePicker, CvDatePickerSkeleton },
233
+ setup: () => ({
234
+ args,
235
+ onChange: action('change'),
236
+ }),
237
+ template: templateSkeleton,
238
+ };
239
+ };
240
+
241
+ export const Skeleton = TemplateSkeleton.bind({});