@citizenplane/pimp 13.1.0 → 14.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 (56) hide show
  1. package/dist/pimp.es.js +2654 -2531
  2. package/dist/pimp.umd.js +16 -16
  3. package/dist/style.css +1 -1
  4. package/package.json +1 -1
  5. package/src/components/CpAccordion.vue +2 -13
  6. package/src/components/CpDate.vue +2 -2
  7. package/src/components/CpInput.vue +2 -2
  8. package/src/components/CpMultiselect.vue +3 -3
  9. package/src/components/CpSelect.vue +3 -3
  10. package/src/components/CpTelInput.vue +2 -2
  11. package/src/components/CpTextarea.vue +3 -3
  12. package/src/components/CpTransitionCounter.vue +77 -0
  13. package/src/components/CpTransitionListItems.vue +41 -0
  14. package/src/components/CpTransitionSize.vue +88 -0
  15. package/src/components/CpTransitionSlide.vue +44 -0
  16. package/src/components/CpTransitionTabContent.vue +70 -0
  17. package/src/components/index.ts +12 -2
  18. package/src/stories/BaseInputLabel.stories.ts +1 -1
  19. package/src/stories/CpAccordion.stories.ts +1 -1
  20. package/src/stories/CpAccordionGroup.stories.ts +1 -1
  21. package/src/stories/CpAirlineLogo.stories.ts +1 -1
  22. package/src/stories/CpAlert.stories.ts +1 -1
  23. package/src/stories/CpBadge.stories.ts +1 -1
  24. package/src/stories/CpButton.stories.ts +1 -1
  25. package/src/stories/CpCheckbox.stories.ts +1 -1
  26. package/src/stories/CpContextualMenu.stories.ts +1 -1
  27. package/src/stories/CpDate.stories.ts +1 -1
  28. package/src/stories/CpDatepicker.stories.ts +1 -1
  29. package/src/stories/CpDialog.stories.ts +1 -1
  30. package/src/stories/CpHeading.stories.ts +1 -1
  31. package/src/stories/CpIcon.stories.ts +1 -1
  32. package/src/stories/CpInput.stories.ts +1 -1
  33. package/src/stories/CpItemActions.stories.ts +1 -1
  34. package/src/stories/CpLoader.stories.ts +1 -1
  35. package/src/stories/CpMenuItem.stories.ts +1 -1
  36. package/src/stories/CpMultiselect.stories.ts +1 -1
  37. package/src/stories/CpPartnerBadge.stories.ts +1 -1
  38. package/src/stories/CpRadio.stories.ts +1 -1
  39. package/src/stories/CpSelect.stories.ts +1 -1
  40. package/src/stories/CpSelectMenu.stories.ts +1 -1
  41. package/src/stories/CpSelectableButton.stories.ts +1 -1
  42. package/src/stories/CpSwitch.stories.ts +1 -1
  43. package/src/stories/CpTable.stories.ts +1 -1
  44. package/src/stories/CpTableEmptyState.stories.ts +1 -1
  45. package/src/stories/CpTabs.stories.ts +1 -1
  46. package/src/stories/CpTelInput.stories.ts +1 -1
  47. package/src/stories/CpTextarea.stories.ts +1 -1
  48. package/src/stories/CpToast.stories.ts +1 -1
  49. package/src/stories/CpTooltip.stories.ts +1 -1
  50. package/src/stories/CpTransitionCounter.stories.ts +66 -0
  51. package/src/stories/{TransitionExpand.stories.ts → CpTransitionExpand.stories.ts} +11 -11
  52. package/src/stories/CpTransitionListItems.stories.ts +147 -0
  53. package/src/stories/CpTransitionSize.stories.ts +147 -0
  54. package/src/stories/CpTransitionSlide.stories.ts +65 -0
  55. package/src/stories/CpTransitionTabContent.stories.ts +78 -0
  56. /package/src/components/{TransitionExpand.vue → CpTransitionExpand.vue} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@citizenplane/pimp",
3
- "version": "13.1.0",
3
+ "version": "14.0.0",
4
4
  "scripts": {
5
5
  "dev": "storybook dev -p 8080",
6
6
  "build-storybook": "storybook build --output-dir ./docs",
@@ -29,11 +29,11 @@
29
29
  :quick-options-limit="resolvedQuickOptionsLimit"
30
30
  />
31
31
  </button>
32
- <transition-expand>
32
+ <cp-transition-expand>
33
33
  <div v-if="isToggled" :id="accordionContentId" :aria-labelledby="accordionId" class="cpAccordion__content">
34
34
  <slot />
35
35
  </div>
36
- </transition-expand>
36
+ </cp-transition-expand>
37
37
  </div>
38
38
  </template>
39
39
 
@@ -150,12 +150,8 @@ const handleClick = () => (isToggled.value = !isToggled.value)
150
150
  }
151
151
 
152
152
  &__actions {
153
- right: 0;
154
- top: 0;
155
- height: 100%;
156
153
  background: linear-gradient(270deg, var(--cp-utility-neutral-100) 0%, rgba(242, 246, 250, 0) 100%);
157
154
  padding: 0 var(--cp-spacing-md) 0 15%;
158
- transform: translate3d(calc(var(--cp-dimensions-1) * 1.25), 0%, 0);
159
155
  display: flex;
160
156
  align-items: center;
161
157
  }
@@ -164,11 +160,4 @@ const handleClick = () => (isToggled.value = !isToggled.value)
164
160
  color: var(--cp-foreground-primary);
165
161
  }
166
162
  }
167
-
168
- @media (hover: hover) and (pointer: fine) {
169
- [cp-item-actions-trigger]:has(.cpItemActions--isDropdownOpen) .cpItemActions,
170
- [cp-item-actions-trigger]:is(:focus-within, :focus-visible, :hover) .cpItemActions {
171
- transform: translate3d(0, 0, 0);
172
- }
173
- }
174
163
  </style>
@@ -45,9 +45,9 @@
45
45
  :required="required"
46
46
  />
47
47
  </div>
48
- <transition-expand>
48
+ <cp-transition-expand>
49
49
  <div v-if="advancedErrorMessage" class="cpDate__errorMessage">{{ advancedErrorMessage }}</div>
50
- </transition-expand>
50
+ </cp-transition-expand>
51
51
  </div>
52
52
  </template>
53
53
 
@@ -39,14 +39,14 @@
39
39
  </transition>
40
40
  </div>
41
41
  </div>
42
- <transition-expand mode="out-in">
42
+ <cp-transition-expand mode="out-in">
43
43
  <p v-if="displayErrorMessage" :id="errorMessageId" class="cpInput__error">
44
44
  {{ errorMessage }}
45
45
  </p>
46
46
  <p v-else-if="displayHelp" :id="helpMessageId" class="cpInput__help">
47
47
  {{ help }}
48
48
  </p>
49
- </transition-expand>
49
+ </cp-transition-expand>
50
50
  </div>
51
51
  </template>
52
52
 
@@ -86,11 +86,11 @@
86
86
  />
87
87
  </template>
88
88
  </auto-complete>
89
- <transition-expand mode="out-in">
89
+ <cp-transition-expand mode="out-in">
90
90
  <p v-if="isInvalid" class="cpMultiselect__error">
91
91
  {{ errorMessage }}
92
92
  </p>
93
- </transition-expand>
93
+ </cp-transition-expand>
94
94
  </div>
95
95
  </template>
96
96
 
@@ -101,7 +101,7 @@ import { ref, computed, onMounted, useSlots, useId } from 'vue'
101
101
 
102
102
  import BaseInputLabel from '@/components/BaseInputLabel.vue'
103
103
  import BaseSelectClearButton from '@/components/BaseSelectClearButton.vue'
104
- import TransitionExpand from '@/components/TransitionExpand.vue'
104
+ import CpTransitionExpand from '@/components/CpTransitionExpand.vue'
105
105
 
106
106
  import { isEmpty } from '@/helpers/object'
107
107
 
@@ -25,14 +25,14 @@
25
25
  <option v-for="(option, index) in options" :key="index" :value="option.value">{{ option.label }}</option>
26
26
  </select>
27
27
  </div>
28
- <transition-expand mode="out-in">
28
+ <cp-transition-expand mode="out-in">
29
29
  <p v-if="displayErrorMessage" :id="errorMessageId" class="cpSelect__error">
30
30
  {{ errorMessage }}
31
31
  </p>
32
32
  <p v-else-if="displayHelp" :id="helpMessageId" class="cpSelect__help">
33
33
  {{ help }}
34
34
  </p>
35
- </transition-expand>
35
+ </cp-transition-expand>
36
36
  </div>
37
37
  </template>
38
38
 
@@ -40,7 +40,7 @@
40
40
  import { computed, useId } from 'vue'
41
41
 
42
42
  import BaseInputLabel from '@/components/BaseInputLabel.vue'
43
- import TransitionExpand from '@/components/TransitionExpand.vue'
43
+ import CpTransitionExpand from '@/components/CpTransitionExpand.vue'
44
44
 
45
45
  import type { Sizes } from '@/constants'
46
46
  import { capitalizeFirstLetter } from '@/helpers'
@@ -28,14 +28,14 @@
28
28
  </template>
29
29
  </vue-tel-input>
30
30
  </div>
31
- <transition-expand mode="out-in">
31
+ <cp-transition-expand mode="out-in">
32
32
  <p v-if="displayErrorMessage" :id="errorMessageId" class="cpTelInput__error">
33
33
  {{ errorMessage }}
34
34
  </p>
35
35
  <p v-else-if="displayHelp" :id="helpMessageId" class="cpTelInput__help">
36
36
  {{ help }}
37
37
  </p>
38
- </transition-expand>
38
+ </cp-transition-expand>
39
39
  </div>
40
40
  </template>
41
41
 
@@ -19,11 +19,11 @@
19
19
  :required="required"
20
20
  :style="`min-height: ${height}px`"
21
21
  />
22
- <transition-expand>
22
+ <cp-transition-expand>
23
23
  <p v-if="displayErrorMessage" class="cpTextarea__error">
24
24
  {{ errorMessage }}
25
25
  </p>
26
- </transition-expand>
26
+ </cp-transition-expand>
27
27
  </div>
28
28
  </template>
29
29
 
@@ -31,7 +31,7 @@
31
31
  import { ref, computed, useId } from 'vue'
32
32
 
33
33
  import BaseInputLabel from '@/components/BaseInputLabel.vue'
34
- import TransitionExpand from '@/components/TransitionExpand.vue'
34
+ import CpTransitionExpand from '@/components/CpTransitionExpand.vue'
35
35
 
36
36
  import { capitalizeFirstLetter } from '@/helpers'
37
37
 
@@ -0,0 +1,77 @@
1
+ <template>
2
+ <div class="cpTransitionCounter">
3
+ <transition :duration="duration" mode="out-in" :name="formattedTransitionName">
4
+ <span :key="counterNumber">
5
+ <slot />
6
+ </span>
7
+ </transition>
8
+ </div>
9
+ </template>
10
+
11
+ <script setup lang="ts">
12
+ import { ref, computed, watch } from 'vue'
13
+
14
+ interface Props {
15
+ counterNumber?: number
16
+ duration?: number
17
+ }
18
+
19
+ const props = withDefaults(defineProps<Props>(), {
20
+ counterNumber: 0,
21
+ duration: 300,
22
+ })
23
+
24
+ enum Directions {
25
+ UP = 'up',
26
+ DOWN = 'down',
27
+ }
28
+
29
+ const direction = ref<Directions>(Directions.UP)
30
+
31
+ const formattedTransitionName = computed(() => `counter-${direction.value}`)
32
+
33
+ watch(
34
+ () => props.counterNumber,
35
+ (newValue: number, oldValue: number) => {
36
+ direction.value = newValue < oldValue ? Directions.DOWN : Directions.UP
37
+ },
38
+ )
39
+ </script>
40
+
41
+ <style lang="scss">
42
+ .cpTransitionCounter {
43
+ display: inline-flex;
44
+ overflow: hidden;
45
+
46
+ &-up-enter-from {
47
+ transform: translate3d(0, 100%, 0);
48
+ }
49
+
50
+ &-down-enter-from {
51
+ transform: translate3d(0, -100%, 0);
52
+ }
53
+
54
+ &-up-leave-to,
55
+ &-down-leave-to {
56
+ filter: blur(1px);
57
+ opacity: 0;
58
+ }
59
+
60
+ &-up-leave-to {
61
+ transform: translate3d(0, -100%, 0) skewY(-30deg);
62
+ }
63
+
64
+ &-down-leave-to {
65
+ transform: translate3d(0, 100%, 0) skewY(30deg);
66
+ }
67
+
68
+ &-up-enter-active,
69
+ &-down-enter-active,
70
+ &-up-leave-active,
71
+ &-down-leave-active {
72
+ transition:
73
+ transform 200ms ease,
74
+ opacity 200ms ease;
75
+ }
76
+ }
77
+ </style>
@@ -0,0 +1,41 @@
1
+ <template>
2
+ <transition-group :name="dynamicTransitionName">
3
+ <slot />
4
+ </transition-group>
5
+ </template>
6
+
7
+ <script setup lang="ts">
8
+ import { computed, onMounted, ref } from 'vue'
9
+
10
+ interface Props {
11
+ disableOnLoad?: boolean
12
+ }
13
+
14
+ const props = withDefaults(defineProps<Props>(), { disableOnLoad: false })
15
+
16
+ const isDisabled = ref<boolean>(props.disableOnLoad)
17
+
18
+ const dynamicTransitionName = computed<string>(() => (isDisabled.value ? '' : 'list-items'))
19
+
20
+ onMounted(() => (isDisabled.value = false))
21
+ </script>
22
+
23
+ <style lang="scss">
24
+ .list-items-move,
25
+ .list-items-enter-active,
26
+ .list-items-leave-active {
27
+ transition:
28
+ transform 400ms ease,
29
+ opacity 200ms ease;
30
+ }
31
+
32
+ .list-items-enter-from,
33
+ .list-items-leave-to {
34
+ opacity: 0;
35
+ transform: translate3d(fn.px-to-rem(30), 0, 0);
36
+ }
37
+
38
+ .list-items-leave-active {
39
+ position: absolute;
40
+ }
41
+ </style>
@@ -0,0 +1,88 @@
1
+ <template>
2
+ <div :id="transitionId" ref="slotWrapper" class="cpTransitionSize" :class="componentDynamicClass">
3
+ <slot />
4
+ </div>
5
+ </template>
6
+
7
+ <script setup lang="ts">
8
+ import { computed, ref, onMounted, onBeforeUnmount, useId, nextTick } from 'vue'
9
+
10
+ interface Props {
11
+ type?: 'width' | 'height'
12
+ }
13
+
14
+ const props = withDefaults(defineProps<Props>(), { type: 'width' })
15
+
16
+ const slotWrapper = ref()
17
+ const slotContent = computed<HTMLElement | null>(() => slotWrapper.value?.children[0])
18
+
19
+ const isHeight = computed<boolean>(() => props.type === 'height')
20
+
21
+ const componentDynamicClass = computed(() => {
22
+ return { 'cpTransitionSize--isHeight': isHeight.value }
23
+ })
24
+
25
+ const transitionId = useId()
26
+
27
+ const updateWrapperSize = async () => {
28
+ if (!slotContent.value) return
29
+
30
+ const size = slotContent.value[isHeight.value ? 'clientHeight' : 'clientWidth']
31
+ const property = isHeight.value ? 'min-height' : 'width'
32
+
33
+ slotWrapper.value.style[property] = `${size}px`
34
+
35
+ const transitionItem = document.getElementById(transitionId)
36
+ if (!transitionItem || !isHeight.value) return
37
+
38
+ slotWrapper.value.style.height = 0
39
+
40
+ await nextTick()
41
+
42
+ transitionItem.addEventListener(
43
+ 'transitionend',
44
+ () => {
45
+ if (slotWrapper.value) {
46
+ slotWrapper.value.style.height = 'auto'
47
+ }
48
+ },
49
+ { once: true },
50
+ )
51
+ }
52
+
53
+ const observer = ref<MutationObserver>()
54
+
55
+ const initObserver = () => {
56
+ observer.value = new MutationObserver(updateWrapperSize)
57
+ observer.value.observe(slotContent.value as HTMLElement, { childList: true, subtree: false })
58
+
59
+ updateWrapperSize()
60
+ }
61
+
62
+ onMounted(() => {
63
+ if (slotContent.value) {
64
+ initObserver()
65
+ }
66
+ })
67
+
68
+ onBeforeUnmount(() => {
69
+ if (observer.value) observer.value.disconnect()
70
+ })
71
+ </script>
72
+
73
+ <style lang="scss">
74
+ .cpTransitionSize {
75
+ display: inline-flex;
76
+ overflow: hidden;
77
+ transition-duration: 350ms;
78
+ transition-property: width;
79
+ transition-timing-function: var(--cp-easing-elastic);
80
+ white-space: nowrap;
81
+
82
+ &--isHeight {
83
+ display: block;
84
+ transition-property: min-height;
85
+ transition-timing-function: ease;
86
+ }
87
+ }
88
+ </style>
@@ -0,0 +1,44 @@
1
+ <template>
2
+ <transition :mode="mode" :name="formattedTransitionName">
3
+ <slot />
4
+ </transition>
5
+ </template>
6
+
7
+ <script setup lang="ts">
8
+ import { computed } from 'vue'
9
+
10
+ interface Props {
11
+ mode?: 'in-out' | 'out-in' | 'default'
12
+ slideTo?: 'top' | 'left'
13
+ }
14
+
15
+ const props = withDefaults(defineProps<Props>(), {
16
+ slideTo: 'top',
17
+ mode: 'out-in',
18
+ })
19
+
20
+ const formattedTransitionName = computed(() => `slide-${props.slideTo}`)
21
+ </script>
22
+
23
+ <style lang="scss">
24
+ .slide-top-enter-active,
25
+ .slide-top-leave-active,
26
+ .slide-left-enter-active,
27
+ .slide-left-leave-active {
28
+ transition:
29
+ transform 300ms ease,
30
+ opacity 300ms ease;
31
+ }
32
+
33
+ .slide-top-enter-from,
34
+ .slide-top-leave-to {
35
+ opacity: 0;
36
+ transform: scale3d(0.8, 0.8, 1) translate3d(0, fn.px-to-rem(10), 0);
37
+ }
38
+
39
+ .slide-left-enter-from,
40
+ .slide-left-leave-to {
41
+ opacity: 0;
42
+ transform: scale3d(0.8, 0.8, 1) translate3d(fn.px-to-rem(10), 0, 0);
43
+ }
44
+ </style>
@@ -0,0 +1,70 @@
1
+ <template>
2
+ <transition :duration="duration" mode="out-in" :name="formattedTransitionName" @after-enter="emit('onAfterEnter')">
3
+ <slot />
4
+ </transition>
5
+ </template>
6
+
7
+ <script setup lang="ts">
8
+ import { computed } from 'vue'
9
+
10
+ type Direction = 'forward' | 'backward'
11
+
12
+ type EmitType = {
13
+ (event: 'onAfterEnter'): void
14
+ }
15
+
16
+ interface Props {
17
+ direction?: Direction
18
+ duration?: number
19
+ }
20
+
21
+ const props = withDefaults(defineProps<Props>(), {
22
+ direction: 'forward',
23
+ duration: 300,
24
+ })
25
+
26
+ const emit = defineEmits<EmitType>()
27
+
28
+ const formattedTransitionName = computed(() => `tab-content-${props.direction}`)
29
+ </script>
30
+
31
+ <style lang="scss">
32
+ .tab-content-backward,
33
+ .tab-content-forward {
34
+ &-enter-active,
35
+ &-leave-active {
36
+ transition:
37
+ transform 300ms ease,
38
+ opacity 300ms ease;
39
+ }
40
+
41
+ &-enter-from,
42
+ &-leave-to {
43
+ opacity: 0;
44
+ }
45
+
46
+ &-enter-to {
47
+ transform: translate3d(0, 0, 0);
48
+ }
49
+ }
50
+
51
+ .tab-content-forward {
52
+ &-enter-from {
53
+ transform: translate3d(10vw, 0, 0);
54
+ }
55
+
56
+ &-leave-to {
57
+ transform: translate3d(-10vw, 0, 0);
58
+ }
59
+ }
60
+
61
+ .tab-content-backward {
62
+ &-enter-from {
63
+ transform: translate3d(-10vw, 0, 0);
64
+ }
65
+
66
+ &-leave-to {
67
+ transform: translate3d(10vw, 0, 0);
68
+ }
69
+ }
70
+ </style>
@@ -47,7 +47,13 @@ import CpTelInput from './CpTelInput.vue'
47
47
  import CpTextarea from './CpTextarea.vue'
48
48
  import CpToast from './CpToast.vue'
49
49
  import CpTooltip from './CpTooltip.vue'
50
+ import CpTransitionCounter from './CpTransitionCounter.vue'
50
51
  import CpTransitionDialog from './CpTransitionDialog.vue'
52
+ import CpTransitionExpand from './CpTransitionExpand.vue'
53
+ import CpTransitionListItems from './CpTransitionListItems.vue'
54
+ import CpTransitionSize from './CpTransitionSize.vue'
55
+ import CpTransitionSlide from './CpTransitionSlide.vue'
56
+ import CpTransitionTabContent from './CpTransitionTabContent.vue'
51
57
  import IconAirline from './icons/IconAirline.vue'
52
58
  import IconCheckList from './icons/IconCheckList.vue'
53
59
  import IconCollapse from './icons/IconCollapse.vue'
@@ -57,7 +63,6 @@ import IconOta from './icons/IconOta.vue'
57
63
  import IconSupplier from './icons/IconSupplier.vue'
58
64
  import IconThirdParty from './icons/IconThirdParty.vue'
59
65
  import IconTooltip from './icons/IconTooltip.vue'
60
- import TransitionExpand from './TransitionExpand.vue'
61
66
 
62
67
  const Components = {
63
68
  CpAccordion,
@@ -104,7 +109,12 @@ const Components = {
104
109
  IconExpand,
105
110
  IconCheckList,
106
111
  CpTransitionDialog,
107
- TransitionExpand,
112
+ CpTransitionExpand,
113
+ CpTransitionSize,
114
+ CpTransitionCounter,
115
+ CpTransitionListItems,
116
+ CpTransitionSlide,
117
+ CpTransitionTabContent,
108
118
  }
109
119
 
110
120
  const Pimp = {
@@ -3,7 +3,7 @@ import type { Meta, StoryObj } from '@storybook/vue3'
3
3
  import BaseInputLabel from '@/components/BaseInputLabel.vue'
4
4
 
5
5
  const meta = {
6
- title: 'BaseInputLabel',
6
+ title: 'Form/BaseInputLabel',
7
7
  component: BaseInputLabel,
8
8
  argTypes: {
9
9
  isInvalid: {
@@ -37,7 +37,7 @@ const defaultStoryActions: MenuItem[] = [
37
37
  ]
38
38
 
39
39
  const meta = {
40
- title: 'CpAccordion',
40
+ title: 'Navigation/CpAccordion',
41
41
  component: CpAccordion,
42
42
  argTypes: {
43
43
  title: {
@@ -43,7 +43,7 @@ const defaultItemActions: MenuItem[] = [
43
43
  ]
44
44
 
45
45
  const meta = {
46
- title: 'CpAccordionGroup',
46
+ title: 'Navigation/CpAccordionGroup',
47
47
  component: CpAccordionGroup,
48
48
  argTypes: {
49
49
  variant: {
@@ -3,7 +3,7 @@ import type { Meta, StoryObj } from '@storybook/vue3'
3
3
  import CpAirlineLogo from '@/components/CpAirlineLogo.vue'
4
4
 
5
5
  const meta = {
6
- title: 'CpAirlineLogo',
6
+ title: 'Visual/CpAirlineLogo',
7
7
  component: CpAirlineLogo,
8
8
  parameters: {
9
9
  docs: {
@@ -3,7 +3,7 @@ import type { Meta, StoryObj } from '@storybook/vue3'
3
3
  import CpAlert from '@/components/CpAlert.vue'
4
4
 
5
5
  const meta = {
6
- title: 'CpAlert',
6
+ title: 'Feedback/CpAlert',
7
7
  component: CpAlert,
8
8
  argTypes: {
9
9
  intent: {
@@ -3,7 +3,7 @@ import type { Args, Meta, StoryObj } from '@storybook/vue3'
3
3
  import CpBadge from '@/components/CpBadge.vue'
4
4
 
5
5
  const meta = {
6
- title: 'CpBadge',
6
+ title: 'Visual/CpBadge',
7
7
  component: CpBadge,
8
8
  argTypes: {
9
9
  color: {
@@ -15,7 +15,7 @@ import {
15
15
  } from '@/stories/documentationStyles'
16
16
 
17
17
  const meta = {
18
- title: 'CpButton',
18
+ title: 'Form/CpButton',
19
19
  component: CpButton,
20
20
  argTypes: {
21
21
  appearance: {
@@ -5,7 +5,7 @@ import type { Meta, StoryObj } from '@storybook/vue3'
5
5
  import CpCheckbox from '@/components/CpCheckbox.vue'
6
6
 
7
7
  const meta = {
8
- title: 'CpCheckbox',
8
+ title: 'Form/CpCheckbox',
9
9
  component: CpCheckbox,
10
10
  argTypes: {
11
11
  modelValue: {
@@ -6,7 +6,7 @@ import CpButton from '@/components/CpButton.vue'
6
6
  import CpContextualMenu from '@/components/CpContextualMenu.vue'
7
7
 
8
8
  const meta = {
9
- title: 'CpContextualMenu',
9
+ title: 'Menu/CpContextualMenu',
10
10
  component: CpContextualMenu,
11
11
  parameters: {
12
12
  docs: {
@@ -5,7 +5,7 @@ import type { Meta, StoryObj } from '@storybook/vue3'
5
5
  import CpDate from '@/components/CpDate.vue'
6
6
 
7
7
  const meta = {
8
- title: 'CpDate',
8
+ title: 'Form/CpDate',
9
9
  component: CpDate,
10
10
  argTypes: {
11
11
  size: {
@@ -5,7 +5,7 @@ import type { Meta, StoryObj } from '@storybook/vue3'
5
5
  import CpDatepicker from '@/components/CpDatepicker.vue'
6
6
 
7
7
  const meta = {
8
- title: 'CpDatepicker',
8
+ title: 'Form/CpDatepicker',
9
9
  component: CpDatepicker,
10
10
 
11
11
  argTypes: {
@@ -5,7 +5,7 @@ import type { Meta, StoryObj } from '@storybook/vue3'
5
5
  import CpDialog from '@/components/CpDialog.vue'
6
6
 
7
7
  const meta = {
8
- title: 'CpDialog',
8
+ title: 'Navigation/CpDialog',
9
9
  component: CpDialog,
10
10
  argTypes: {
11
11
  maxWidth: {
@@ -3,7 +3,7 @@ import type { Meta, StoryObj } from '@storybook/vue3'
3
3
  import CpHeading from '@/components/CpHeading.vue'
4
4
 
5
5
  const meta = {
6
- title: 'CpHeading',
6
+ title: 'Visual/CpHeading',
7
7
  component: CpHeading,
8
8
  argTypes: {
9
9
  headingLevel: {
@@ -30,7 +30,7 @@ const iconsOptions = [
30
30
  ].sort()
31
31
 
32
32
  const meta = {
33
- title: 'CpIcon',
33
+ title: 'Visual/CpIcon',
34
34
  component: CpIcon,
35
35
  argTypes: {
36
36
  type: {