@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.
- package/README.md +16 -0
- package/dist/carbon-vue-3.common.js +22859 -11008
- package/dist/carbon-vue-3.common.js.map +1 -1
- package/dist/carbon-vue-3.css +1 -0
- package/dist/carbon-vue-3.umd.js +22859 -11008
- package/dist/carbon-vue-3.umd.js.map +1 -1
- package/dist/carbon-vue-3.umd.min.js +30 -2
- package/dist/carbon-vue-3.umd.min.js.map +1 -1
- package/package.json +5 -4
- package/src/components/CvAccordion/CvAccordion.stories.js +1 -0
- package/src/components/CvButton/CvButton.stories.js +3 -3
- package/src/components/CvButton/CvButtonSkeleton.stories.js +79 -0
- package/src/components/CvButton/CvButtonSkeleton.vue +19 -0
- package/src/components/CvButton/index.js +8 -1
- package/src/components/CvDatePicker/CvDatePicker-notes.md +86 -0
- package/src/components/CvDatePicker/CvDatePicker.stories.js +241 -0
- package/src/components/CvDatePicker/CvDatePicker.vue +402 -0
- package/src/components/CvDatePicker/CvDatePickerSkeleton.vue +106 -0
- package/src/components/CvDatePicker/index.js +4 -0
- package/src/components/CvDatePicker/plugins/appendToPlugin.js +64 -0
- package/src/components/CvDatePicker/plugins/fixEventsPlugin.js +79 -0
- package/src/components/CvDatePicker/plugins/monthSelectPlugin.js +86 -0
- package/src/components/CvDatePicker/plugins/rangePlugin.js +47 -0
- package/src/components/CvDropdown/CvDropdown.stories.mdx +407 -0
- package/src/components/CvDropdown/CvDropdown.vue +418 -0
- package/src/components/CvDropdown/CvDropdownItem.vue +86 -0
- package/src/components/CvDropdown/CvDropdownSkeleton.vue +17 -0
- package/src/components/CvDropdown/index.js +5 -0
- package/src/components/CvForm/CvForm.stories.mdx +193 -0
- package/src/components/CvForm/CvForm.vue +9 -0
- package/src/components/CvForm/CvFormGroup.vue +27 -0
- package/src/components/CvForm/CvFormItem.vue +9 -0
- package/src/components/CvForm/index.js +5 -0
- package/src/components/CvInlineLoading/CvInlineLoading.stories.mdx +87 -0
- package/src/components/CvInlineLoading/CvInlineLoading.vue +144 -0
- package/src/components/CvInlineLoading/consts.js +9 -0
- package/src/components/CvInlineLoading/index.js +4 -0
- package/src/components/CvModal/CvModal.stories.mdx +236 -0
- package/src/components/CvModal/CvModal.vue +401 -0
- package/src/components/CvModal/index.js +3 -0
- package/src/components/CvMultiSelect/CvMultiSelect.stories.mdx +333 -0
- package/src/components/CvMultiSelect/CvMultiSelect.vue +705 -0
- package/src/components/CvMultiSelect/consts.js +16 -0
- package/src/components/CvMultiSelect/index.js +3 -0
- package/src/components/CvNumberInput/CvNumberInput.stories.js +265 -0
- package/src/components/CvNumberInput/CvNumberInput.vue +227 -0
- package/src/components/CvNumberInput/CvNumberInputSkeleton.stories.js +30 -0
- package/src/components/CvNumberInput/CvNumberInputSkeleton.vue +10 -0
- package/src/components/CvNumberInput/StorybookGroupConst.js +1 -0
- package/src/components/CvNumberInput/__tests__/__snapshots__/CvNumberInput.spec.js.snap +21 -0
- package/src/components/CvNumberInput/index.js +5 -0
- package/src/components/CvTabs/CvTab.vue +77 -0
- package/src/components/CvTabs/CvTabs.stories.mdx +175 -0
- package/src/components/CvTabs/CvTabs.vue +406 -0
- package/src/components/CvTabs/CvTabsSkeleton.vue +24 -0
- package/src/components/CvTabs/_SbContainer.vue +22 -0
- package/src/components/CvTabs/index.js +5 -0
- package/src/components/CvToggle/CvToggle-Skeleton.vue +29 -0
- package/src/components/CvToggle/CvToggle.stories.js +232 -0
- package/src/components/CvToggle/CvToggle.vue +70 -0
- package/src/components/CvToggle/__tests__/__snapshots__/CvToggle.spec.js.snap +7 -0
- package/src/components/CvToggle/index.js +4 -0
- package/src/global/storybook-utils/story-source-code.js +1 -0
- package/src/use/cvInput.js +34 -0
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
import {
|
|
2
|
+
sbCompPrefix,
|
|
3
|
+
storyParametersObject,
|
|
4
|
+
} from '../../global/storybook-utils';
|
|
5
|
+
|
|
6
|
+
import { CvToggle } from '.';
|
|
7
|
+
import { CvToggleSkeleton } from '.';
|
|
8
|
+
import { action } from '@storybook/addon-actions';
|
|
9
|
+
import { ref } from 'vue';
|
|
10
|
+
|
|
11
|
+
const initArgs = {
|
|
12
|
+
label: 'label',
|
|
13
|
+
value: 'check-1',
|
|
14
|
+
use_textLeft: false,
|
|
15
|
+
use_textRight: false,
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
const initArgsMinimal = {
|
|
19
|
+
value: 'check-1',
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export default {
|
|
23
|
+
title: `${sbCompPrefix}/CvToggle`,
|
|
24
|
+
component: CvToggle,
|
|
25
|
+
parameters: {
|
|
26
|
+
a11y: {
|
|
27
|
+
config: {
|
|
28
|
+
rules: [],
|
|
29
|
+
},
|
|
30
|
+
manual: true,
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
argTypes: {
|
|
34
|
+
label: { description: 'Toggle label' },
|
|
35
|
+
checked: {
|
|
36
|
+
type: 'boolean',
|
|
37
|
+
table: {
|
|
38
|
+
type: { summary: 'boolean' },
|
|
39
|
+
category: 'props',
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
/* DEFAULT STORY */
|
|
46
|
+
|
|
47
|
+
const template = `
|
|
48
|
+
<cv-toggle @change="onChange" v-bind='args' >
|
|
49
|
+
<template v-slot:text-left v-if="args.use_textLeft"> 0 </template>
|
|
50
|
+
<template v-slot:text-right v-if="args.use_textRight"> 1 </template>
|
|
51
|
+
</cv-toggle>
|
|
52
|
+
`;
|
|
53
|
+
const Template = args => {
|
|
54
|
+
return {
|
|
55
|
+
components: { CvToggle },
|
|
56
|
+
setup: () => ({
|
|
57
|
+
args,
|
|
58
|
+
onChange: action('change'),
|
|
59
|
+
}),
|
|
60
|
+
template,
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
export const Default = Template.bind({});
|
|
65
|
+
Default.args = initArgs;
|
|
66
|
+
Default.parameters = storyParametersObject(
|
|
67
|
+
Default.parameters,
|
|
68
|
+
template,
|
|
69
|
+
Default.args
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
/* MINIMAL STORY */
|
|
73
|
+
const templateMinimal = `
|
|
74
|
+
<div>
|
|
75
|
+
<cv-toggle @change="onChange" v-bind='args'> </cv-toggle>
|
|
76
|
+
</div>
|
|
77
|
+
`;
|
|
78
|
+
const TemplateMinimal = args => {
|
|
79
|
+
return {
|
|
80
|
+
components: { CvToggle },
|
|
81
|
+
setup: () => ({
|
|
82
|
+
args,
|
|
83
|
+
onChange: action('change'),
|
|
84
|
+
}),
|
|
85
|
+
template: templateMinimal,
|
|
86
|
+
};
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
export const Minimal = TemplateMinimal.bind({});
|
|
90
|
+
Minimal.args = initArgsMinimal;
|
|
91
|
+
|
|
92
|
+
/* EVENTS STORY */
|
|
93
|
+
|
|
94
|
+
const templateEvents = `
|
|
95
|
+
<cv-toggle @change="onChange" v-bind='args'>
|
|
96
|
+
</cv-toggle>
|
|
97
|
+
`;
|
|
98
|
+
const TemplateEvents = args => {
|
|
99
|
+
return {
|
|
100
|
+
components: { CvToggle },
|
|
101
|
+
setup: () => ({
|
|
102
|
+
args,
|
|
103
|
+
onChange: action('change'),
|
|
104
|
+
}),
|
|
105
|
+
template: templateEvents,
|
|
106
|
+
};
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
export const Events = TemplateEvents.bind({});
|
|
110
|
+
Events.args = initArgs;
|
|
111
|
+
Events.parameters = storyParametersObject(
|
|
112
|
+
Events.parameters,
|
|
113
|
+
template,
|
|
114
|
+
Events.args
|
|
115
|
+
);
|
|
116
|
+
Events.args = initArgsMinimal;
|
|
117
|
+
|
|
118
|
+
/* VMODEL STORY */
|
|
119
|
+
|
|
120
|
+
const modelValue = ref(false);
|
|
121
|
+
|
|
122
|
+
const templateVModel = `
|
|
123
|
+
<div>
|
|
124
|
+
<cv-toggle @change="onChange" v-model="modelValue" v-bind='args'>
|
|
125
|
+
</cv-toggle>
|
|
126
|
+
<div style="margin-top:1rem; background-color: #888888; padding:1rem"><div style="font-size: 150%">Sample interaction</div>
|
|
127
|
+
<label for="checkbox">V-model: Check 1:</label>
|
|
128
|
+
<input id="checkbox" type="checkbox" :checked='modelValue' @change="(ev) => {modelValue = ev.currentTarget.checked}"/>
|
|
129
|
+
<div>Checked: <span style="font-weight: bold;">{{modelValue}}</span></div>
|
|
130
|
+
</div>
|
|
131
|
+
</div>
|
|
132
|
+
`;
|
|
133
|
+
|
|
134
|
+
const TemplateVModel = args => {
|
|
135
|
+
return {
|
|
136
|
+
components: { CvToggle },
|
|
137
|
+
setup: () => ({
|
|
138
|
+
args,
|
|
139
|
+
onChange: action('change'),
|
|
140
|
+
modelValue,
|
|
141
|
+
}),
|
|
142
|
+
template: templateVModel,
|
|
143
|
+
};
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
export const VModel = TemplateVModel.bind({});
|
|
147
|
+
VModel.parameters = storyParametersObject(
|
|
148
|
+
VModel.parameters,
|
|
149
|
+
templateVModel,
|
|
150
|
+
VModel.args
|
|
151
|
+
);
|
|
152
|
+
VModel.args = initArgsMinimal;
|
|
153
|
+
|
|
154
|
+
/* ARRAY VMODEL STORY */
|
|
155
|
+
|
|
156
|
+
const handleModelValue = event => {
|
|
157
|
+
const tempArr = new Set(Object.values(arrayModelValue.value));
|
|
158
|
+
if (event.currentTarget.checked) {
|
|
159
|
+
tempArr.add(event.currentTarget.id);
|
|
160
|
+
arrayModelValue.value = Array.from(tempArr);
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
tempArr.delete(event.currentTarget.id);
|
|
164
|
+
arrayModelValue.value = Array.from(tempArr);
|
|
165
|
+
};
|
|
166
|
+
let arrayModelValue = ref([]);
|
|
167
|
+
|
|
168
|
+
const isChecked = value => {
|
|
169
|
+
const tempArr = new Set(Object.values(arrayModelValue.value));
|
|
170
|
+
return tempArr.has(value);
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
const templateArrayVModel = `
|
|
174
|
+
<div>
|
|
175
|
+
<cv-toggle v-model="arrayModelValue" name="check-1" value="check-1" v-bind='args'>
|
|
176
|
+
</cv-toggle>
|
|
177
|
+
<cv-toggle v-model="arrayModelValue" name="check-2" value="check-2" v-bind='args'>
|
|
178
|
+
</cv-toggle>
|
|
179
|
+
<cv-toggle v-model="arrayModelValue" name="check-3" value="check-3" v-bind='args'>
|
|
180
|
+
</cv-toggle>
|
|
181
|
+
<div style="margin-top:1rem; background-color: #888888; padding:1rem"><div style="font-size: 150%">Sample interaction</div>
|
|
182
|
+
<label for="check-1">V-model: Check 1:</label>
|
|
183
|
+
<input id="check-1" type="checkbox" :checked="isChecked('check-1')" @change="handleModelValue"/>
|
|
184
|
+
<label for="check-2">V-model: Check 2:</label>
|
|
185
|
+
<input id="check-2" type="checkbox" :checked="isChecked('check-2')" @change="handleModelValue"/>
|
|
186
|
+
<label for="check-3">V-model: Check 3:</label>
|
|
187
|
+
<input id="check-3" type="checkbox" :checked="isChecked('check-3')" @change="handleModelValue"/>
|
|
188
|
+
<div>Checked: <span style="font-weight: bold;">{{arrayModelValue}}</span></div>
|
|
189
|
+
</div>
|
|
190
|
+
</div>
|
|
191
|
+
`;
|
|
192
|
+
|
|
193
|
+
const TemplateArrayVModel = args => {
|
|
194
|
+
return {
|
|
195
|
+
components: { CvToggle },
|
|
196
|
+
setup: () => ({
|
|
197
|
+
args,
|
|
198
|
+
arrayModelValue,
|
|
199
|
+
handleModelValue,
|
|
200
|
+
isChecked,
|
|
201
|
+
}),
|
|
202
|
+
template: templateArrayVModel,
|
|
203
|
+
};
|
|
204
|
+
};
|
|
205
|
+
|
|
206
|
+
export const arrayVModel = TemplateArrayVModel.bind({});
|
|
207
|
+
arrayVModel.parameters = storyParametersObject(
|
|
208
|
+
arrayVModel.parameters,
|
|
209
|
+
templateArrayVModel,
|
|
210
|
+
arrayVModel.args
|
|
211
|
+
);
|
|
212
|
+
|
|
213
|
+
/* SKELETON STORY */
|
|
214
|
+
|
|
215
|
+
const templateSkeleton = `
|
|
216
|
+
<div>
|
|
217
|
+
<cv-toggle-skeleton></cv-toggle-skeleton>
|
|
218
|
+
</div>
|
|
219
|
+
`;
|
|
220
|
+
|
|
221
|
+
const TemplateSkeleton = args => {
|
|
222
|
+
return {
|
|
223
|
+
components: { CvToggle, CvToggleSkeleton },
|
|
224
|
+
setup: () => ({
|
|
225
|
+
args,
|
|
226
|
+
onChange: action('change'),
|
|
227
|
+
}),
|
|
228
|
+
template: templateSkeleton,
|
|
229
|
+
};
|
|
230
|
+
};
|
|
231
|
+
|
|
232
|
+
export const Skeleton = TemplateSkeleton.bind({});
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div :class="{ [`${carbonPrefix}--form-item`]: formItem }">
|
|
3
|
+
<input
|
|
4
|
+
role="toggle"
|
|
5
|
+
v-bind="$attrs"
|
|
6
|
+
:class="[
|
|
7
|
+
`${carbonPrefix}--toggle-input`,
|
|
8
|
+
{ 'bx--toggle-input--small': small },
|
|
9
|
+
]"
|
|
10
|
+
type="checkbox"
|
|
11
|
+
:id="cvId"
|
|
12
|
+
:checked="isChecked"
|
|
13
|
+
@change="onChange"
|
|
14
|
+
:value="value"
|
|
15
|
+
ref="input"
|
|
16
|
+
/>
|
|
17
|
+
<label
|
|
18
|
+
:class="`${carbonPrefix}--toggle-input__label`"
|
|
19
|
+
:for="cvId"
|
|
20
|
+
:aria-label="hiddenLabel"
|
|
21
|
+
>
|
|
22
|
+
{{ visibleLabel }}
|
|
23
|
+
<span :class="`${carbonPrefix}--toggle__switch`">
|
|
24
|
+
<svg
|
|
25
|
+
:class="`${carbonPrefix}--toggle__check`"
|
|
26
|
+
width="6px"
|
|
27
|
+
height="5px"
|
|
28
|
+
viewBox="0 0 6 5"
|
|
29
|
+
>
|
|
30
|
+
<path d="M2.2 2.7L5 0 6 1 2.2 5 0 2.7 1 1.5z" />
|
|
31
|
+
</svg>
|
|
32
|
+
<span :class="`${carbonPrefix}--toggle__text--off`" aria-hidden="true">
|
|
33
|
+
<slot name="text-left">Off</slot>
|
|
34
|
+
</span>
|
|
35
|
+
<span :class="`${carbonPrefix}--toggle__text--on`" aria-hidden="true">
|
|
36
|
+
<slot name="text-right">On</slot>
|
|
37
|
+
</span>
|
|
38
|
+
</span>
|
|
39
|
+
</label>
|
|
40
|
+
</div>
|
|
41
|
+
</template>
|
|
42
|
+
|
|
43
|
+
<script setup>
|
|
44
|
+
import { computed, toRefs } from 'vue';
|
|
45
|
+
import { carbonPrefix } from '../../global/settings';
|
|
46
|
+
import { useCvId, props as propsCvId } from '../../use/cvId';
|
|
47
|
+
import { useCheck, props as propsCvCheck } from '../../use/cvCheck';
|
|
48
|
+
|
|
49
|
+
const hiddenLabel = computed(() => {
|
|
50
|
+
return props.hideLabel ? props.label : undefined;
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
const visibleLabel = computed(() => {
|
|
54
|
+
return props.hideLabel ? undefined : props.label;
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
const props = defineProps({
|
|
58
|
+
small: Boolean,
|
|
59
|
+
label: String,
|
|
60
|
+
formItem: { type: Boolean, default: true },
|
|
61
|
+
hideLabel: Boolean,
|
|
62
|
+
...propsCvId,
|
|
63
|
+
...propsCvCheck,
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
const emit = defineEmits(['update:modelValue', 'change']);
|
|
67
|
+
const { onChange, isChecked } = useCheck(toRefs(props), emit);
|
|
68
|
+
|
|
69
|
+
const cvId = useCvId(props);
|
|
70
|
+
</script>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
2
|
+
|
|
3
|
+
exports[`CvToggle CvToggle - should render formItem: default 1`] = `<div class="bx--form-item"><input role="toggle" class="bx--toggle-input" type="checkbox" id="test-1" value="check-1"><label class="bx--toggle-input__label" for="test-1"> <span class="bx--toggle__switch"><svg class="bx--toggle__check" width="6px" height="5px" viewBox="0 0 6 5"><path d="M2.2 2.7L5 0 6 1 2.2 5 0 2.7 1 1.5z"></path></svg><span class="bx--toggle__text--off" aria-hidden="true">Off</span><span class="bx--toggle__text--on" aria-hidden="true">On</span></span></label></div>`;
|
|
4
|
+
|
|
5
|
+
exports[`CvToggle CvToggle - should render when formItem: false && small && hideLabel 1`] = `<div class="" disabled="true"><input role="toggle" disabled="" class="bx--toggle-input bx--toggle-input--small" type="checkbox" id="test-1" value="check-1"><label class="bx--toggle-input__label" for="test-1"> <span class="bx--toggle__switch"><svg class="bx--toggle__check" width="6px" height="5px" viewBox="0 0 6 5"><path d="M2.2 2.7L5 0 6 1 2.2 5 0 2.7 1 1.5z"></path></svg><span class="bx--toggle__text--off" aria-hidden="true">Off</span><span class="bx--toggle__text--on" aria-hidden="true">On</span></span></label></div>`;
|
|
6
|
+
|
|
7
|
+
exports[`CvToggle CvToggle - should render when formItem: true && disabled 1`] = `<div class="bx--form-item" disabled="true"><input role="toggle" disabled="" class="bx--toggle-input" type="checkbox" id="test-1" value="check-1"><label class="bx--toggle-input__label" for="test-1"> <span class="bx--toggle__switch"><svg class="bx--toggle__check" width="6px" height="5px" viewBox="0 0 6 5"><path d="M2.2 2.7L5 0 6 1 2.2 5 0 2.7 1 1.5z"></path></svg><span class="bx--toggle__text--off" aria-hidden="true">Off</span><span class="bx--toggle__text--on" aria-hidden="true">On</span></span></label></div>`;
|
|
@@ -36,6 +36,7 @@ export const storyParametersObject = (
|
|
|
36
36
|
const code = storySourceCode(templateSource, args, replacing);
|
|
37
37
|
|
|
38
38
|
if (!parameters) {
|
|
39
|
+
// eslint-disable-next-line no-param-reassign
|
|
39
40
|
parameters = { docs: { source: { code } } };
|
|
40
41
|
} else {
|
|
41
42
|
if (!parameters.docs) {
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { onBeforeMount, onBeforeUpdate, ref, useSlots } from 'vue';
|
|
2
|
+
import { useIsLight } from './cvTheme';
|
|
3
|
+
|
|
4
|
+
export const useCvInputHelpers = props => {
|
|
5
|
+
const slots = useSlots();
|
|
6
|
+
const isInvalid = ref(false);
|
|
7
|
+
const isWarn = ref(false);
|
|
8
|
+
const isHelper = ref(false);
|
|
9
|
+
const isLight = useIsLight(props);
|
|
10
|
+
|
|
11
|
+
function checkSlots() {
|
|
12
|
+
// NOTE: slots is not reactive so needs to be managed on updated
|
|
13
|
+
isInvalid.value = !!(
|
|
14
|
+
props.invalidMessage?.length || slots['invalid-message']
|
|
15
|
+
);
|
|
16
|
+
isWarn.value =
|
|
17
|
+
!isInvalid.value && !!(props.warnText?.length || slots['warn-text']);
|
|
18
|
+
isHelper.value =
|
|
19
|
+
!isInvalid.value &&
|
|
20
|
+
!isWarn.value &&
|
|
21
|
+
!!(props.helperText?.length || slots['helper-text']);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
onBeforeMount(checkSlots);
|
|
25
|
+
onBeforeUpdate(checkSlots);
|
|
26
|
+
|
|
27
|
+
return {
|
|
28
|
+
slots,
|
|
29
|
+
isInvalid,
|
|
30
|
+
isWarn,
|
|
31
|
+
isHelper,
|
|
32
|
+
isLight,
|
|
33
|
+
};
|
|
34
|
+
};
|