@carbon/vue 3.0.6-alpha.0 → 3.0.8-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 (109) hide show
  1. package/README.md +7 -0
  2. package/dist/carbon-vue-3.common.js +16111 -9105
  3. package/dist/carbon-vue-3.common.js.map +1 -1
  4. package/dist/carbon-vue-3.umd.js +16111 -9105
  5. package/dist/carbon-vue-3.umd.js.map +1 -1
  6. package/dist/carbon-vue-3.umd.min.js +4 -4
  7. package/dist/carbon-vue-3.umd.min.js.map +1 -1
  8. package/package.json +9 -6
  9. package/src/components/CvAccordion/CvAccordion.stories.js +1 -0
  10. package/src/components/CvButton/CvButton.stories.js +3 -3
  11. package/src/components/CvButton/CvButtonSkeleton.stories.js +79 -0
  12. package/src/components/CvButton/CvButtonSkeleton.vue +19 -0
  13. package/src/components/CvButton/index.js +8 -1
  14. package/src/components/CvCheckbox/CvCheckbox.stories.js +18 -7
  15. package/src/components/CvCheckbox/CvCheckbox.vue +19 -3
  16. package/src/components/CvCheckbox/CvCheckboxSkeleton.vue +16 -0
  17. package/src/components/CvCheckbox/__tests__/__snapshots__/CvCheckboxSkeleton.spec.js.snap +3 -0
  18. package/src/components/CvCheckbox/index.js +2 -1
  19. package/src/components/CvDatePicker/CvDatePicker.vue +1 -1
  20. package/src/components/CvDropdown/CvDropdown.stories.mdx +407 -0
  21. package/src/components/CvDropdown/CvDropdown.vue +416 -0
  22. package/src/components/CvDropdown/CvDropdownItem.vue +86 -0
  23. package/src/components/CvDropdown/CvDropdownSkeleton.vue +17 -0
  24. package/src/components/CvDropdown/index.js +5 -0
  25. package/src/components/CvFileUploader/CvFileUploader.stories.mdx +333 -0
  26. package/src/components/CvFileUploader/CvFileUploader.vue +286 -0
  27. package/src/components/CvFileUploader/CvFileUploaderItem.vue +92 -0
  28. package/src/components/CvFileUploader/CvFileUploaderSkeleton.vue +16 -0
  29. package/src/components/CvFileUploader/const.js +10 -0
  30. package/src/components/CvFileUploader/index.js +5 -0
  31. package/src/components/CvForm/CvFormGroup.vue +1 -1
  32. package/src/components/CvInlineLoading/CvInlineLoading.stories.mdx +87 -0
  33. package/src/components/CvInlineLoading/CvInlineLoading.vue +144 -0
  34. package/src/components/CvInlineLoading/consts.js +9 -0
  35. package/src/components/CvInlineLoading/index.js +4 -0
  36. package/src/components/CvModal/CvModal.stories.mdx +4 -2
  37. package/src/components/CvModal/CvModal.vue +3 -5
  38. package/src/components/CvMultiSelect/CvMultiSelect.stories.mdx +333 -0
  39. package/src/components/CvMultiSelect/CvMultiSelect.vue +705 -0
  40. package/src/components/CvMultiSelect/consts.js +16 -0
  41. package/src/components/CvMultiSelect/index.js +3 -0
  42. package/src/components/CvNumberInput/CvNumberInput.stories.js +265 -0
  43. package/src/components/CvNumberInput/CvNumberInput.vue +227 -0
  44. package/src/components/CvNumberInput/CvNumberInputSkeleton.stories.js +30 -0
  45. package/src/components/CvNumberInput/CvNumberInputSkeleton.vue +10 -0
  46. package/src/components/CvNumberInput/StorybookGroupConst.js +1 -0
  47. package/src/components/CvNumberInput/__tests__/__snapshots__/CvNumberInput.spec.js.snap +21 -0
  48. package/src/components/CvNumberInput/index.js +5 -0
  49. package/src/components/CvProgress/CvProgress.stories.mdx +202 -0
  50. package/src/components/CvProgress/CvProgress.vue +78 -0
  51. package/src/components/CvProgress/CvProgressStep.vue +124 -0
  52. package/src/components/CvProgress/index.js +4 -0
  53. package/src/components/CvRadioButton/CvRadioButton.stories.js +166 -0
  54. package/src/components/CvRadioButton/CvRadioButton.vue +57 -0
  55. package/src/components/CvRadioButton/CvRadioGroup.vue +27 -0
  56. package/src/components/CvRadioButton/__tests__/__snapshots__/CvRadioButton.spec.js.snap +27 -0
  57. package/src/components/CvRadioButton/index.js +6 -0
  58. package/src/components/CvSearch/CvSearch.stories.mdx +168 -0
  59. package/src/components/CvSearch/CvSearch.vue +250 -0
  60. package/src/components/CvSearch/index.js +3 -0
  61. package/src/components/CvSelect/CvSelect.vue +27 -6
  62. package/src/components/CvSlider/CvSlider.stories.js +166 -0
  63. package/src/components/CvSlider/CvSlider.vue +324 -0
  64. package/src/components/CvSlider/CvSliderSkeleton.stories.js +26 -0
  65. package/src/components/CvSlider/CvSliderSkeleton.vue +18 -0
  66. package/src/components/CvSlider/__tests__/__snapshots__/CvSlider.spec.js.snap +13 -0
  67. package/src/components/CvSlider/__tests__/__snapshots__/CvSliderSkeleton.spec.js.snap +13 -0
  68. package/src/components/CvSlider/index.js +5 -0
  69. package/src/components/CvSlider/sbSliderPrefix.js +2 -0
  70. package/src/components/CvTabs/CvTab.vue +77 -0
  71. package/src/components/CvTabs/CvTabs.stories.mdx +175 -0
  72. package/src/components/CvTabs/CvTabs.vue +406 -0
  73. package/src/components/CvTabs/CvTabsSkeleton.vue +24 -0
  74. package/src/components/CvTabs/_SbContainer.vue +22 -0
  75. package/src/components/CvTabs/index.js +5 -0
  76. package/src/components/CvTextArea/CvTextArea.stories.js +2 -2
  77. package/src/components/CvTextArea/CvTextAreaSkeleton.stories.js +29 -0
  78. package/src/components/CvTextArea/CvTextAreaSkeleton.vue +10 -0
  79. package/src/components/CvTextArea/StorybookGroupConst.js +1 -0
  80. package/src/components/CvTextArea/__tests__/__snapshots__/CvTextAreaSkeleton.spec.js.snap +7 -0
  81. package/src/components/CvTextArea/index.js +2 -1
  82. package/src/components/CvTimePicker/CvTimePicker.stories.mdx +325 -0
  83. package/src/components/CvTimePicker/CvTimePicker.vue +217 -0
  84. package/src/components/CvTimePicker/index.js +21 -0
  85. package/src/components/CvToggle/CvToggle-Skeleton.vue +44 -0
  86. package/src/components/CvToggle/CvToggle.stories.js +249 -0
  87. package/src/components/CvToggle/CvToggle.vue +87 -0
  88. package/src/components/CvToggle/__tests__/__snapshots__/CvToggle.spec.js.snap +7 -0
  89. package/src/components/CvToggle/index.js +4 -0
  90. package/src/components/CvTooltip/CvDefinitionTooltip.stories.js +80 -0
  91. package/src/components/CvTooltip/CvDefinitionTooltip.vue +61 -0
  92. package/src/components/CvTooltip/CvInteractiveTooltip.stories.js +90 -0
  93. package/src/components/CvTooltip/CvInteractiveTooltip.vue +267 -0
  94. package/src/components/CvTooltip/CvTooltip.stories.js +128 -0
  95. package/src/components/CvTooltip/CvTooltip.vue +44 -0
  96. package/src/components/CvTooltip/__tests__/__snapshots__/CvTooltip.spec.js.snap +525 -0
  97. package/src/components/CvTooltip/consts.js +15 -0
  98. package/src/components/CvTooltip/index.js +6 -0
  99. package/src/components/CvTooltip/sbTooltipPrefix.js +2 -0
  100. package/src/components/CvUIShell/CvSideNav.vue +10 -1
  101. package/src/components/CvUIShell/CvUIShell.stories.mdx +116 -50
  102. package/src/global/storybook-utils/story-source-code.js +1 -0
  103. package/src/index.d.ts +6 -0
  104. package/src/index.js +11 -0
  105. package/src/use/cvCheck.js +3 -0
  106. package/src/use/cvInput.js +34 -0
  107. package/src/use/index.js +2 -0
  108. package/src/use/useMethods.js +18 -0
  109. package/src/use/useRadio.js +25 -0
@@ -0,0 +1,249 @@
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
+ checked: {
35
+ type: 'boolean',
36
+ table: {
37
+ type: { summary: 'boolean' },
38
+ category: 'props',
39
+ },
40
+ },
41
+ },
42
+ };
43
+
44
+ /* DEFAULT STORY */
45
+
46
+ const template = `
47
+ <cv-toggle @change="onChange" v-bind='args' >
48
+ <template v-slot:text-left v-if="args.use_textLeft"> 0 </template>
49
+ <template v-slot:text-right v-if="args.use_textRight"> 1 </template>
50
+ </cv-toggle>
51
+ `;
52
+ const Template = args => {
53
+ return {
54
+ components: { CvToggle },
55
+ setup: () => ({
56
+ args,
57
+ onChange: action('change'),
58
+ }),
59
+ template,
60
+ };
61
+ };
62
+
63
+ export const Default = Template.bind({});
64
+ Default.args = initArgs;
65
+ Default.parameters = {
66
+ controls: {
67
+ exclude: ['change', 'update:modelValue', 'text-left', 'text-right'],
68
+ },
69
+ };
70
+ Default.parameters = storyParametersObject(
71
+ Default.parameters,
72
+ template,
73
+ Default.args
74
+ );
75
+
76
+ /* MINIMAL STORY */
77
+ const templateMinimal = `
78
+ <div>
79
+ <cv-toggle @change="onChange" v-bind='args'> </cv-toggle>
80
+ </div>
81
+ `;
82
+ const TemplateMinimal = args => {
83
+ return {
84
+ components: { CvToggle },
85
+ setup: () => ({
86
+ args,
87
+ onChange: action('change'),
88
+ }),
89
+ template: templateMinimal,
90
+ };
91
+ };
92
+
93
+ export const Minimal = TemplateMinimal.bind({});
94
+ Minimal.args = initArgsMinimal;
95
+
96
+ /* EVENTS STORY */
97
+
98
+ const templateEvents = `
99
+ <cv-toggle @change="onChange" v-bind='args'>
100
+ </cv-toggle>
101
+ `;
102
+ const TemplateEvents = args => {
103
+ return {
104
+ components: { CvToggle },
105
+ setup: () => ({
106
+ args,
107
+ onChange: action('change'),
108
+ }),
109
+ template: templateEvents,
110
+ };
111
+ };
112
+
113
+ export const Events = TemplateEvents.bind({});
114
+ Events.args = initArgs;
115
+ Events.parameters = storyParametersObject(
116
+ Events.parameters,
117
+ template,
118
+ Events.args
119
+ );
120
+ Events.args = initArgsMinimal;
121
+
122
+ /* VMODEL STORY */
123
+
124
+ const modelValue = ref(false);
125
+
126
+ const templateVModel = `
127
+ <div>
128
+ <cv-toggle @change="onChange" v-model="modelValue" v-bind='args'>
129
+ </cv-toggle>
130
+ <div style="margin-top:1rem; background-color: #888888; padding:1rem"><div style="font-size: 150%">Sample interaction</div>
131
+ <label for="checkbox">V-model: Check 1:</label>
132
+ <input id="checkbox" type="checkbox" :checked='modelValue' @change="(ev) => {modelValue = ev.currentTarget.checked}"/>
133
+ <div>Checked: <span style="font-weight: bold;">{{modelValue}}</span></div>
134
+ </div>
135
+ </div>
136
+ `;
137
+
138
+ const TemplateVModel = args => {
139
+ return {
140
+ components: { CvToggle },
141
+ setup: () => ({
142
+ args,
143
+ onChange: action('change'),
144
+ modelValue,
145
+ }),
146
+ template: templateVModel,
147
+ };
148
+ };
149
+
150
+ export const VModel = TemplateVModel.bind({});
151
+ VModel.parameters = storyParametersObject(
152
+ VModel.parameters,
153
+ templateVModel,
154
+ VModel.args
155
+ );
156
+ VModel.args = initArgsMinimal;
157
+
158
+ /* ARRAY VMODEL STORY */
159
+
160
+ const handleModelValue = event => {
161
+ const tempArr = new Set(Object.values(arrayModelValue.value));
162
+ if (event.currentTarget.checked) {
163
+ tempArr.add(event.currentTarget.id);
164
+ arrayModelValue.value = Array.from(tempArr);
165
+ return;
166
+ }
167
+ tempArr.delete(event.currentTarget.id);
168
+ arrayModelValue.value = Array.from(tempArr);
169
+ };
170
+ let arrayModelValue = ref([]);
171
+
172
+ const isChecked = value => {
173
+ const tempArr = new Set(Object.values(arrayModelValue.value));
174
+ return tempArr.has(value);
175
+ };
176
+
177
+ const templateArrayVModel = `
178
+ <div>
179
+ <cv-toggle v-model="arrayModelValue" name="check-1" value="check-1" v-bind='args'>
180
+ </cv-toggle>
181
+ <cv-toggle v-model="arrayModelValue" name="check-2" value="check-2" v-bind='args'>
182
+ </cv-toggle>
183
+ <cv-toggle v-model="arrayModelValue" name="check-3" value="check-3" v-bind='args'>
184
+ </cv-toggle>
185
+ <div style="margin-top:1rem; background-color: #888888; padding:1rem"><div style="font-size: 150%">Sample interaction</div>
186
+ <label for="check-1">V-model: Check 1:</label>
187
+ <input id="check-1" type="checkbox" :checked="isChecked('check-1')" @change="handleModelValue"/>
188
+ <label for="check-2">V-model: Check 2:</label>
189
+ <input id="check-2" type="checkbox" :checked="isChecked('check-2')" @change="handleModelValue"/>
190
+ <label for="check-3">V-model: Check 3:</label>
191
+ <input id="check-3" type="checkbox" :checked="isChecked('check-3')" @change="handleModelValue"/>
192
+ <div>Checked: <span style="font-weight: bold;">{{arrayModelValue}}</span></div>
193
+ </div>
194
+ </div>
195
+ `;
196
+
197
+ const TemplateArrayVModel = args => {
198
+ return {
199
+ components: { CvToggle },
200
+ setup: () => ({
201
+ args,
202
+ arrayModelValue,
203
+ handleModelValue,
204
+ isChecked,
205
+ }),
206
+ template: templateArrayVModel,
207
+ };
208
+ };
209
+
210
+ export const arrayVModel = TemplateArrayVModel.bind({});
211
+ arrayVModel.parameters = storyParametersObject(
212
+ arrayVModel.parameters,
213
+ templateArrayVModel,
214
+ arrayVModel.args
215
+ );
216
+
217
+ /* SKELETON STORY */
218
+
219
+ const templateSkeleton = `
220
+ <div>
221
+ <cv-toggle-skeleton :small="small"></cv-toggle-skeleton>
222
+ </div>
223
+ `;
224
+
225
+ const TemplateSkeleton = args => {
226
+ return {
227
+ components: { CvToggle, CvToggleSkeleton },
228
+ setup: () => ({
229
+ args,
230
+ small: args.small,
231
+ }),
232
+ template: templateSkeleton,
233
+ };
234
+ };
235
+
236
+ export const Skeleton = TemplateSkeleton.bind({});
237
+ Skeleton.parameters = {
238
+ controls: {
239
+ exclude: [
240
+ 'change',
241
+ 'text-left',
242
+ 'text-right',
243
+ 'update:modelValue',
244
+ 'hideLabel',
245
+ 'formItem',
246
+ 'checked',
247
+ ],
248
+ },
249
+ };
@@ -0,0 +1,87 @@
1
+ <template>
2
+ <div :class="{ [`${carbonPrefix}--form-item`]: formItem }">
3
+ <input
4
+ :id="cvId"
5
+ ref="input"
6
+ role="toggle"
7
+ v-bind="$attrs"
8
+ :class="[
9
+ `${carbonPrefix}--toggle-input`,
10
+ {
11
+ [`${carbonPrefix}--toggle-input--small`]: small,
12
+ },
13
+ ]"
14
+ type="checkbox"
15
+ :checked="isChecked"
16
+ :value="value"
17
+ @change="onChange"
18
+ />
19
+ <label
20
+ :class="`${carbonPrefix}--toggle-input__label`"
21
+ :for="cvId"
22
+ :aria-label="hiddenLabel"
23
+ >
24
+ {{ visibleLabel }}
25
+ <span :class="`${carbonPrefix}--toggle__switch`">
26
+ <svg
27
+ :class="`${carbonPrefix}--toggle__check`"
28
+ width="6px"
29
+ height="5px"
30
+ viewBox="0 0 6 5"
31
+ >
32
+ <path d="M2.2 2.7L5 0 6 1 2.2 5 0 2.7 1 1.5z" />
33
+ </svg>
34
+ <span :class="`${carbonPrefix}--toggle__text--off`" aria-hidden="true">
35
+ <slot name="text-left">Off</slot>
36
+ </span>
37
+ <span :class="`${carbonPrefix}--toggle__text--on`" aria-hidden="true">
38
+ <slot name="text-right">On</slot>
39
+ </span>
40
+ </span>
41
+ </label>
42
+ </div>
43
+ </template>
44
+
45
+ <script setup>
46
+ import { computed, toRefs } from 'vue';
47
+ import { carbonPrefix } from '../../global/settings';
48
+ import { useCvId, props as propsCvId } from '../../use/cvId';
49
+ import { useCheck, props as propsCvCheck } from '../../use/cvCheck';
50
+
51
+ const hiddenLabel = computed(() => {
52
+ return props.hideLabel ? props.label : undefined;
53
+ });
54
+
55
+ const visibleLabel = computed(() => {
56
+ return props.hideLabel ? undefined : props.label;
57
+ });
58
+
59
+ const props = defineProps({
60
+ /**
61
+ * Specify the size of the Toggle. Default is medium. Set to `true` for small.
62
+ */
63
+ small: Boolean,
64
+ /**
65
+ * Label and aria-label for the toggle
66
+ */
67
+ label: {
68
+ type: String,
69
+ default: 'Toggle element',
70
+ },
71
+ /**
72
+ * Set the carbon form-item class
73
+ */
74
+ formItem: { type: Boolean, default: true },
75
+ /**
76
+ * Visibly hide the toggle label
77
+ */
78
+ hideLabel: Boolean,
79
+ ...propsCvId,
80
+ ...propsCvCheck,
81
+ });
82
+
83
+ const emit = defineEmits(['update:modelValue', 'change']);
84
+ const { onChange, isChecked } = useCheck(toRefs(props), emit);
85
+
86
+ const cvId = useCvId(props);
87
+ </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 id="test-1" role="toggle" class="bx--toggle-input" type="checkbox" value="check-1"><label class="bx--toggle-input__label" for="test-1">Toggle element <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 id="test-1" role="toggle" disabled="" class="bx--toggle-input bx--toggle-input--small" type="checkbox" value="check-1"><label class="bx--toggle-input__label" for="test-1" aria-label="Toggle element"> <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 id="test-1" role="toggle" disabled="" class="bx--toggle-input" type="checkbox" value="check-1"><label class="bx--toggle-input__label" for="test-1">Toggle element <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>`;
@@ -0,0 +1,4 @@
1
+ import CvToggle from './CvToggle.vue';
2
+ import CvToggleSkeleton from './CvToggle-Skeleton.vue';
3
+ export { CvToggle, CvToggleSkeleton };
4
+ export default CvToggle;
@@ -0,0 +1,80 @@
1
+ import CvDefinitionTooltip from './CvDefinitionTooltip.vue';
2
+ import {
3
+ sbCompPrefix,
4
+ storyParametersObject,
5
+ } from '../../global/storybook-utils';
6
+ import { alignments, directions } from './consts';
7
+ import { sbTooltipPrefix } from './sbTooltipPrefix';
8
+
9
+ export default {
10
+ title: `${sbCompPrefix}/${sbTooltipPrefix}/CvDefinitionTooltip`,
11
+ component: CvDefinitionTooltip,
12
+ argTypes: {
13
+ alignment: {
14
+ control: {
15
+ type: 'select',
16
+ },
17
+ options: alignments,
18
+ defaultValue: CvDefinitionTooltip.props.alignment.default,
19
+ },
20
+ direction: {
21
+ control: {
22
+ type: 'select',
23
+ },
24
+ options: directions,
25
+ defaultValue: CvDefinitionTooltip.props.direction.default,
26
+ },
27
+ definition: {
28
+ control: { type: 'text' },
29
+ table: { category: 'props' },
30
+ description: 'Definition of the term',
31
+ },
32
+ term: {
33
+ control: { type: 'text' },
34
+ table: { category: 'props' },
35
+ description: 'Term to be defined',
36
+ },
37
+ 'definition ': {
38
+ table: {
39
+ type: { summary: 'string | html | Component' },
40
+ category: 'slots',
41
+ },
42
+ description: 'Definition of the term slot.',
43
+ },
44
+ 'term ': {
45
+ table: {
46
+ type: { summary: 'string | html | Component' },
47
+ category: 'slots',
48
+ },
49
+ description: 'Term slot',
50
+ },
51
+ },
52
+ };
53
+
54
+ const Term = 'A term needing definition';
55
+ const Definition = 'Brief description of the dotted, underlined term';
56
+
57
+ const template = `<cv-definition-tooltip v-bind="args" />`;
58
+
59
+ const Template = args => {
60
+ return {
61
+ components: { CvDefinitionTooltip },
62
+ template,
63
+ setup() {
64
+ return {
65
+ args,
66
+ };
67
+ },
68
+ };
69
+ };
70
+
71
+ export const Default = Template.bind({});
72
+ Default.args = {
73
+ term: Term,
74
+ definition: Definition,
75
+ };
76
+ Default.parameters = storyParametersObject(
77
+ Default.parameters,
78
+ template,
79
+ Default.args
80
+ );
@@ -0,0 +1,61 @@
1
+ <template>
2
+ <div
3
+ :class="`cv-definition-tooltip ${carbonPrefix}--tooltip--definition ${carbonPrefix}--tooltip--a11y`"
4
+ :id="cvId"
5
+ >
6
+ <button
7
+ :aria-describedby="`${cvId}-label`"
8
+ :class="[
9
+ `${carbonPrefix}--tooltip__trigger`,
10
+ `${carbonPrefix}--tooltip--a11y`,
11
+ `${carbonPrefix}--tooltip__trigger--definition`,
12
+ `${carbonPrefix}--tooltip--${direction}`,
13
+ `${carbonPrefix}--tooltip--align-${alignment}`,
14
+ ]"
15
+ type="button"
16
+ >
17
+ <slot name="term">
18
+ {{ term }}
19
+ </slot>
20
+ </button>
21
+ <div
22
+ :class="`${carbonPrefix}--assistive-text`"
23
+ :id="`${cvId}-label`"
24
+ role="tooltip"
25
+ >
26
+ <slot name="definition">
27
+ {{ definition }}
28
+ </slot>
29
+ </div>
30
+ </div>
31
+ </template>
32
+
33
+ <script setup>
34
+ import { carbonPrefix } from '../../global/settings';
35
+ import { useCvId, props as propsCvId } from '../../use/cvId';
36
+ import { TipAlignments, alignments, TipDirections, directions } from './consts';
37
+
38
+ const props = defineProps({
39
+ alignment: {
40
+ type: String,
41
+ default: TipAlignments.center,
42
+ validator: val => alignments.includes(val),
43
+ },
44
+ direction: {
45
+ type: String,
46
+ default: TipDirections.top,
47
+ validator: val => directions.includes(val),
48
+ },
49
+ definition: {
50
+ type: String,
51
+ default: '',
52
+ },
53
+ term: {
54
+ type: String,
55
+ default: '',
56
+ },
57
+ ...propsCvId,
58
+ });
59
+
60
+ const cvId = useCvId(props);
61
+ </script>
@@ -0,0 +1,90 @@
1
+ import CvInteractiveTooltip from './CvInteractiveTooltip.vue';
2
+ import {
3
+ sbCompPrefix,
4
+ storyParametersObject,
5
+ } from '../../global/storybook-utils';
6
+ import { alignments, directions } from './consts';
7
+ import { sbTooltipPrefix } from './sbTooltipPrefix';
8
+ import Filter16 from '@carbon/icons-vue/es/filter/16';
9
+
10
+ export default {
11
+ title: `${sbCompPrefix}/${sbTooltipPrefix}/CvInteractiveTooltip`,
12
+ component: CvInteractiveTooltip,
13
+ argTypes: {
14
+ alignment: {
15
+ control: {
16
+ type: 'select',
17
+ },
18
+ options: alignments,
19
+ defaultValue: CvInteractiveTooltip.props.alignment.default,
20
+ },
21
+ direction: {
22
+ control: {
23
+ type: 'select',
24
+ },
25
+ options: directions,
26
+ defaultValue: CvInteractiveTooltip.props.direction.default,
27
+ },
28
+ visible: {
29
+ control: {
30
+ type: 'boolean',
31
+ },
32
+ defaultValue: CvInteractiveTooltip.props.visible.default,
33
+ description: 'Initial tooltip visibility state',
34
+ },
35
+ label: {
36
+ table: {
37
+ type: { summary: 'string | html | Component' },
38
+ category: 'slots',
39
+ },
40
+ description: 'Label slot.',
41
+ },
42
+ content: {
43
+ table: {
44
+ type: { summary: 'string | html | Component' },
45
+ category: 'slots',
46
+ },
47
+ description: 'Content slot.',
48
+ },
49
+ trigger: {
50
+ table: {
51
+ type: { summary: 'string | html | Component' },
52
+ category: 'slots',
53
+ },
54
+ description: 'Trigger slot',
55
+ },
56
+ },
57
+ };
58
+ const template = `
59
+ <cv-interactive-tooltip v-bind="args">
60
+ <template #label>
61
+ Tooltip label
62
+ </template>
63
+ <template #trigger>
64
+ <Filter16 class="bx--overflow-menu__icon bx--toolbar-filter-icon" />
65
+ </template>
66
+ <template #content>
67
+ <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, seed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
68
+ <button class="bx--button">Clicky one</button>
69
+ </template>
70
+ </cv-interactive-tooltip>
71
+ `;
72
+
73
+ const Template = args => {
74
+ return {
75
+ components: { CvInteractiveTooltip, Filter16 },
76
+ template,
77
+ setup() {
78
+ return {
79
+ args,
80
+ };
81
+ },
82
+ };
83
+ };
84
+
85
+ export const Default = Template.bind({});
86
+ Default.parameters = storyParametersObject(
87
+ Default.parameters,
88
+ template,
89
+ Default.args
90
+ );