@citizenplane/pimp 18.6.2 → 18.8.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 (159) hide show
  1. package/biome.json +178 -0
  2. package/dist/components/BaseInputLabel.vue.d.ts.map +1 -1
  3. package/dist/components/BaseSelectClearButton.vue.d.ts.map +1 -1
  4. package/dist/components/CpAccordion.vue.d.ts.map +1 -1
  5. package/dist/components/CpAlert.vue.d.ts.map +1 -1
  6. package/dist/components/CpBadge.vue.d.ts.map +1 -1
  7. package/dist/components/CpButton.vue.d.ts.map +1 -1
  8. package/dist/components/CpButtonToggle.vue.d.ts +1 -1
  9. package/dist/components/CpButtonToggle.vue.d.ts.map +1 -1
  10. package/dist/components/CpCalendar.vue.d.ts.map +1 -1
  11. package/dist/components/CpCheckbox.vue.d.ts.map +1 -1
  12. package/dist/components/CpContextualMenu.vue.d.ts.map +1 -1
  13. package/dist/components/CpDate.vue.d.ts.map +1 -1
  14. package/dist/components/CpDatepicker.vue.d.ts.map +1 -1
  15. package/dist/components/CpInput.vue.d.ts.map +1 -1
  16. package/dist/components/CpItemActions.vue.d.ts +2 -0
  17. package/dist/components/CpItemActions.vue.d.ts.map +1 -1
  18. package/dist/components/CpMenu.vue.d.ts.map +1 -1
  19. package/dist/components/CpMenuItem.vue.d.ts.map +1 -1
  20. package/dist/components/CpMultiselect.vue.d.ts.map +1 -1
  21. package/dist/components/CpRadio.vue.d.ts.map +1 -1
  22. package/dist/components/CpRadioGroup.vue.d.ts.map +1 -1
  23. package/dist/components/CpRadioNew.vue.d.ts.map +1 -1
  24. package/dist/components/CpSelect.vue.d.ts.map +1 -1
  25. package/dist/components/CpSelectMenu.vue.d.ts.map +1 -1
  26. package/dist/components/CpSelectableButton.vue.d.ts +1 -1
  27. package/dist/components/CpSelectableButton.vue.d.ts.map +1 -1
  28. package/dist/components/CpSwitch.vue.d.ts.map +1 -1
  29. package/dist/components/CpTable.vue.d.ts.map +1 -1
  30. package/dist/components/CpTelInput.vue.d.ts.map +1 -1
  31. package/dist/components/CpTooltip.vue.d.ts +2 -0
  32. package/dist/components/CpTooltip.vue.d.ts.map +1 -1
  33. package/dist/components/CpTrip.vue.d.ts +48 -0
  34. package/dist/components/CpTrip.vue.d.ts.map +1 -0
  35. package/dist/components/CpTripTimeline.vue.d.ts +24 -0
  36. package/dist/components/CpTripTimeline.vue.d.ts.map +1 -0
  37. package/dist/components/index.d.ts +2 -1
  38. package/dist/components/index.d.ts.map +1 -1
  39. package/dist/composables/useDynamicSize.d.ts +9 -0
  40. package/dist/composables/useDynamicSize.d.ts.map +1 -0
  41. package/dist/constants/index.d.ts +2 -2
  42. package/dist/constants/index.d.ts.map +1 -1
  43. package/dist/constants/layout/Breakpoints.d.ts +9 -0
  44. package/dist/constants/layout/Breakpoints.d.ts.map +1 -0
  45. package/dist/constants/layout/Sizes.d.ts +2 -0
  46. package/dist/constants/layout/Sizes.d.ts.map +1 -0
  47. package/dist/constants/layout/index.d.ts +3 -0
  48. package/dist/constants/layout/index.d.ts.map +1 -0
  49. package/dist/helpers/functions.d.ts +1 -0
  50. package/dist/helpers/functions.d.ts.map +1 -1
  51. package/dist/libs/CoreDatepicker.vue.d.ts.map +1 -1
  52. package/dist/pimp.es.js +6797 -6461
  53. package/dist/pimp.umd.js +54 -54
  54. package/dist/style.css +1 -1
  55. package/package.json +14 -24
  56. package/src/assets/css/base.css +17 -11
  57. package/src/assets/css/colors.css +12 -22
  58. package/src/assets/css/dimensions.css +4 -0
  59. package/src/assets/css/shadows.css +0 -3
  60. package/src/assets/css/tokens.css +21 -65
  61. package/src/assets/css/typography.css +0 -17
  62. package/src/assets/main.css +7 -7
  63. package/src/assets/styles/helpers/_functions.scss +2 -2
  64. package/src/assets/styles/utilities/_index.scss +2 -3
  65. package/src/components/BaseInputLabel.vue +7 -11
  66. package/src/components/BaseSelectClearButton.vue +6 -7
  67. package/src/components/CpAccordion.vue +27 -28
  68. package/src/components/CpAccordionGroup.vue +2 -2
  69. package/src/components/CpAlert.vue +12 -11
  70. package/src/components/CpBadge.vue +4 -19
  71. package/src/components/CpButton.vue +23 -25
  72. package/src/components/CpButtonGroup.vue +2 -2
  73. package/src/components/CpButtonToggle.vue +22 -22
  74. package/src/components/CpCalendar.vue +30 -26
  75. package/src/components/CpCheckbox.vue +29 -33
  76. package/src/components/CpContextualMenu.vue +1 -2
  77. package/src/components/CpDate.vue +72 -76
  78. package/src/components/CpDatepicker.vue +2 -3
  79. package/src/components/CpDialog.vue +8 -8
  80. package/src/components/CpHeading.vue +6 -6
  81. package/src/components/CpIcon.vue +2 -2
  82. package/src/components/CpInput.vue +46 -48
  83. package/src/components/CpItemActions.vue +17 -16
  84. package/src/components/CpMenu.vue +8 -9
  85. package/src/components/CpMenuItem.vue +7 -7
  86. package/src/components/CpMenuList.vue +3 -3
  87. package/src/components/CpMultiselect.vue +29 -30
  88. package/src/components/CpRadio.vue +53 -59
  89. package/src/components/CpRadioGroup.vue +11 -12
  90. package/src/components/CpRadioNew.vue +56 -58
  91. package/src/components/CpSelect.vue +42 -42
  92. package/src/components/CpSelectMenu.vue +32 -32
  93. package/src/components/CpSelectableButton.vue +50 -51
  94. package/src/components/CpSwitch.vue +43 -44
  95. package/src/components/CpTable.vue +69 -81
  96. package/src/components/CpTableColumnEditor.vue +16 -16
  97. package/src/components/CpTableEmptyState.vue +4 -4
  98. package/src/components/CpTableFooter.vue +2 -2
  99. package/src/components/CpTableFooterDesktop.vue +2 -2
  100. package/src/components/CpTableFooterDetails.vue +2 -2
  101. package/src/components/CpTableFooterMobile.vue +4 -4
  102. package/src/components/CpTabs.vue +1 -1
  103. package/src/components/CpTelInput.vue +31 -32
  104. package/src/components/CpTextarea.vue +13 -13
  105. package/src/components/CpToast.vue +25 -24
  106. package/src/components/CpTooltip.vue +15 -13
  107. package/src/components/CpTransitionCounter.vue +1 -1
  108. package/src/components/CpTransitionExpand.vue +5 -5
  109. package/src/components/CpTransitionSize.vue +1 -1
  110. package/src/components/CpTrip.vue +190 -0
  111. package/src/components/CpTripTimeline.vue +272 -0
  112. package/src/components/index.ts +36 -34
  113. package/src/composables/useDynamicSize.ts +60 -0
  114. package/src/constants/index.ts +2 -2
  115. package/src/constants/layout/Breakpoints.ts +8 -0
  116. package/src/constants/layout/Sizes.ts +1 -0
  117. package/src/constants/layout/index.ts +3 -0
  118. package/src/directives/ClickOutside.ts +1 -1
  119. package/src/directives/ResizeSelect.ts +1 -1
  120. package/src/helpers/functions.ts +1 -1
  121. package/src/helpers/index.ts +1 -1
  122. package/src/libs/CoreDatepicker.vue +115 -134
  123. package/src/stories/Colors.stories.ts +2 -1
  124. package/src/stories/CpAccordion.stories.ts +2 -2
  125. package/src/stories/CpAccordionGroup.stories.ts +1 -2
  126. package/src/stories/CpButtonToggle.stories.ts +1 -2
  127. package/src/stories/CpCheckbox.stories.ts +1 -2
  128. package/src/stories/CpContextualMenu.stories.ts +1 -2
  129. package/src/stories/CpDate.stories.ts +1 -2
  130. package/src/stories/CpDatepicker.stories.ts +1 -2
  131. package/src/stories/CpDialog.stories.ts +1 -2
  132. package/src/stories/CpInput.stories.ts +1 -2
  133. package/src/stories/CpItemActions.stories.ts +10 -5
  134. package/src/stories/CpMenu.stories.ts +1 -2
  135. package/src/stories/CpMenuItem.stories.ts +1 -2
  136. package/src/stories/CpMultiselect.stories.ts +1 -2
  137. package/src/stories/CpRadio.stories.ts +1 -2
  138. package/src/stories/CpRadioGroup.stories.ts +1 -2
  139. package/src/stories/CpSelect.stories.ts +1 -2
  140. package/src/stories/CpSelectMenu.stories.ts +1 -2
  141. package/src/stories/CpSwitch.stories.ts +1 -2
  142. package/src/stories/CpTable.stories.ts +2 -3
  143. package/src/stories/CpTabs.stories.ts +1 -2
  144. package/src/stories/CpText.stories.ts +2 -1
  145. package/src/stories/CpTextarea.stories.ts +1 -2
  146. package/src/stories/CpToast.stories.ts +2 -3
  147. package/src/stories/CpTransitionCounter.stories.ts +1 -2
  148. package/src/stories/CpTransitionExpand.stories.ts +1 -2
  149. package/src/stories/CpTransitionListItems.stories.ts +1 -2
  150. package/src/stories/CpTransitionSize.stories.ts +1 -2
  151. package/src/stories/CpTransitionSlide.stories.ts +1 -2
  152. package/src/stories/CpTransitionTabContent.stories.ts +1 -2
  153. package/src/stories/CpTrip.stories.ts +323 -0
  154. package/src/stories/Dimensions.stories.ts +1 -0
  155. package/src/stories/Shadows.stories.ts +1 -0
  156. package/src/stories/Typography.stories.ts +1 -0
  157. package/src/vendors/ff-polyfill.ts +1 -1
  158. package/vitest.workspace.js +1 -1
  159. package/src/components/Pimp.vue +0 -10
@@ -79,38 +79,21 @@ const dynamicClasses = computed(() => {
79
79
  <style lang="scss">
80
80
  .cpSelectableButton {
81
81
  display: inline-flex;
82
- border-radius: var(--cp-selectable-border-radius);
83
82
  padding: var(--cp-selectable-border-padding);
83
+ border-radius: var(--cp-selectable-border-radius);
84
+ background-color: var(--cp-selectable-background-color);
85
+ box-shadow:
86
+ var(--cp-selectable-box-shadow),
87
+ 0 0 0 var(--cp-dimensions-0_25) var(--cp-selectable-border-color);
88
+ color: var(--cp-selectable-text-color);
84
89
  font-size: var(--cp-selectable-font-size);
85
- line-height: var(--cp-selectable-line-height);
86
90
  font-weight: 500;
91
+ line-height: var(--cp-selectable-line-height);
87
92
  transition:
88
93
  background-color 0.1s ease-out,
89
94
  box-shadow 0.1s ease-out,
90
95
  color 0.1s ease-out,
91
96
  transform 0.15s ease-out;
92
- box-shadow:
93
- var(--cp-selectable-box-shadow),
94
- 0 0 0 var(--cp-dimensions-0_25) var(--cp-selectable-border-color);
95
- background-color: var(--cp-selectable-background-color);
96
- color: var(--cp-selectable-text-color);
97
-
98
- &:hover:not(.cpSelectableButton--isDisabled) {
99
- box-shadow:
100
- var(--cp-selectable-box-shadow),
101
- 0 0 0 var(--cp-dimensions-0_25) var(--cp-selectable-border-color-hover);
102
- background-color: var(--cp-selectable-background-color-hover);
103
- color: var(--cp-selectable-text-color-hover);
104
- transform: translateY(var(--cp-dimensions-minus-0_25));
105
-
106
- & > .cpSelectableButton__body {
107
- background-color: var(--cp-selectable-body-background-color-hover);
108
- }
109
- }
110
-
111
- &:active:not(.cpSelectableButton--isDisabled) {
112
- transform: translateY(var(--cp-dimensions-0_25));
113
- }
114
97
 
115
98
  &:focus-visible {
116
99
  outline: var(--cp-dimensions-0_5) solid var(--cp-background-accent-solid);
@@ -119,25 +102,56 @@ const dynamicClasses = computed(() => {
119
102
 
120
103
  &__body {
121
104
  display: inline-flex;
105
+ width: 100%;
122
106
  align-items: center;
123
107
  justify-content: center;
124
108
  padding: var(--cp-selectable-body-padding);
125
- gap: var(--cp-selectable-body-gap);
126
- background-color: var(--cp-selectable-body-background-color);
127
109
  border-radius: var(--cp-selectable-body-border-radius);
110
+ background-color: var(--cp-selectable-body-background-color);
111
+ gap: var(--cp-selectable-body-gap);
128
112
  transition:
129
113
  background-color 0.1s ease-out,
130
114
  box-shadow 0.1s ease-out,
131
115
  color 0.1s ease-out;
132
- width: 100%;
116
+ }
117
+
118
+ &--isDisabled {
119
+ background-color: var(--cp-background-disabled);
120
+ box-shadow: var(--cp-shadows-3xs);
121
+ color: var(--cp-text-disabled);
122
+ cursor: not-allowed;
123
+ transform: none;
124
+
125
+ & > .cpSelectableButton__body {
126
+ background-color: var(--cp-background-disabled);
127
+ color: var(--cp-text-disabled);
128
+ cursor: not-allowed;
129
+ }
130
+ }
131
+
132
+ &:hover:not(.cpSelectableButton--isDisabled) {
133
+ background-color: var(--cp-selectable-background-color-hover);
134
+ box-shadow:
135
+ var(--cp-selectable-box-shadow),
136
+ 0 0 0 var(--cp-dimensions-0_25) var(--cp-selectable-border-color-hover);
137
+ color: var(--cp-selectable-text-color-hover);
138
+ transform: translateY(var(--cp-dimensions-minus-0_25));
139
+
140
+ & > .cpSelectableButton__body {
141
+ background-color: var(--cp-selectable-body-background-color-hover);
142
+ }
143
+ }
144
+
145
+ &:active:not(.cpSelectableButton--isDisabled) {
146
+ transform: translateY(var(--cp-dimensions-0_25));
133
147
  }
134
148
 
135
149
  &__icon i,
136
150
  &__icon svg {
137
151
  width: var(--cp-selectable-icon-size);
138
152
  height: var(--cp-selectable-icon-size);
139
- aspect-ratio: 1 / 1;
140
153
  flex-shrink: 0;
154
+ aspect-ratio: 1 / 1;
141
155
  }
142
156
 
143
157
  --cp-selectable-border-padding: var(--cp-spacing-sm);
@@ -148,7 +162,6 @@ const dynamicClasses = computed(() => {
148
162
  --cp-selectable-body-gap: var(--cp-spacing-sm-md);
149
163
  --cp-selectable-body-border-radius: var(--cp-radius-sm);
150
164
  --cp-selectable-icon-size: var(--cp-dimensions-5);
151
-
152
165
  --cp-selectable-border-color: transparent;
153
166
  --cp-selectable-border-color-hover: transparent;
154
167
  --cp-selectable-text-color: var(--cp-foreground-white);
@@ -342,21 +355,21 @@ const dynamicClasses = computed(() => {
342
355
  --cp-selectable-text-color: var(--cp-foreground-white);
343
356
  --cp-selectable-text-color-hover: var(--cp-foreground-white);
344
357
  --cp-selectable-background-color: transparent;
345
- --cp-selectable-background-color-hover: color-mix(in srgb, var(--cp-background-white) 10%, transparent);
358
+ --cp-selectable-background-color-hover: color-mix(in sRGB, var(--cp-background-white) 10%, transparent);
346
359
  --cp-selectable-body-background-color: transparent;
347
360
  --cp-selectable-body-background-color-hover: transparent;
348
361
  --cp-selectable-box-shadow: var(--cp-shadows-3xs-inset);
349
362
  }
350
363
 
351
364
  &--isInverse:is(&--isSelected) {
352
- --cp-selectable-border-color: color-mix(in srgb, var(--cp-background-white) 20%, transparent);
353
- --cp-selectable-border-color-hover: color-mix(in srgb, var(--cp-background-white) 20%, transparent);
365
+ --cp-selectable-border-color: color-mix(in sRGB, var(--cp-background-white) 20%, transparent);
366
+ --cp-selectable-border-color-hover: color-mix(in sRGB, var(--cp-background-white) 20%, transparent);
354
367
  --cp-selectable-text-color: var(--cp-foreground-white);
355
368
  --cp-selectable-text-color-hover: var(--cp-foreground-white);
356
369
  --cp-selectable-background-color: transparent;
357
370
  --cp-selectable-background-color-hover: transparent;
358
- --cp-selectable-body-background-color: color-mix(in srgb, var(--cp-background-white) 20%, transparent);
359
- --cp-selectable-body-background-color-hover: color-mix(in srgb, var(--cp-background-white) 30%, transparent);
371
+ --cp-selectable-body-background-color: color-mix(in sRGB, var(--cp-background-white) 20%, transparent);
372
+ --cp-selectable-body-background-color-hover: color-mix(in sRGB, var(--cp-background-white) 30%, transparent);
360
373
  }
361
374
 
362
375
  &--isInverse:is(&--isExpanded) {
@@ -366,8 +379,8 @@ const dynamicClasses = computed(() => {
366
379
  --cp-selectable-text-color-hover: var(--cp-foreground-white);
367
380
  --cp-selectable-background-color: transparent;
368
381
  --cp-selectable-background-color-hover: transparent;
369
- --cp-selectable-body-background-color: color-mix(in srgb, var(--cp-background-white) 20%, transparent);
370
- --cp-selectable-body-background-color-hover: color-mix(in srgb, var(--cp-background-white) 30%, transparent);
382
+ --cp-selectable-body-background-color: color-mix(in sRGB, var(--cp-background-white) 20%, transparent);
383
+ --cp-selectable-body-background-color-hover: color-mix(in sRGB, var(--cp-background-white) 30%, transparent);
371
384
  }
372
385
 
373
386
  &__icon {
@@ -377,23 +390,9 @@ const dynamicClasses = computed(() => {
377
390
 
378
391
  &__label {
379
392
  display: flex;
380
- align-items: center;
381
393
  flex-shrink: 0;
394
+ align-items: center;
382
395
  padding: var(--cp-spacing-none) var(--cp-spacing-xs);
383
396
  }
384
-
385
- &--isDisabled {
386
- background-color: var(--cp-background-disabled);
387
- color: var(--cp-text-disabled);
388
- cursor: not-allowed;
389
- box-shadow: var(--cp-shadows-3xs);
390
- transform: none;
391
-
392
- & > .cpSelectableButton__body {
393
- background-color: var(--cp-background-disabled);
394
- color: var(--cp-text-disabled);
395
- cursor: not-allowed;
396
- }
397
- }
398
397
  }
399
398
  </style>
@@ -32,11 +32,10 @@
32
32
  import { computed, useId } from 'vue'
33
33
  import { useWebHaptics } from 'web-haptics/vue'
34
34
 
35
- import { Haptics } from '@/constants/Hapitcs'
36
-
37
35
  import CpTooltip from '@/components/CpTooltip.vue'
38
36
 
39
37
  import { ToggleColors } from '@/constants'
38
+ import { Haptics } from '@/constants/Hapitcs'
40
39
  import { capitalizeFirstLetter } from '@/helpers'
41
40
 
42
41
  interface Props {
@@ -135,6 +134,7 @@ const handleClick = (value: boolean): void => {
135
134
 
136
135
  .cpSwitch {
137
136
  --cp-switch-base-height: var(--cp-dimensions-5);
137
+
138
138
  align-items: center;
139
139
 
140
140
  &,
@@ -163,15 +163,15 @@ const handleClick = (value: boolean): void => {
163
163
  }
164
164
 
165
165
  &__tooltip {
166
- color: var(--cp-foreground-quaternary);
167
166
  padding: var(--cp-spacing-sm);
167
+ color: var(--cp-foreground-quaternary);
168
168
  }
169
169
 
170
170
  &--hasLabel {
171
171
  display: grid;
172
- grid-template-columns: min-content 1fr;
173
- grid-gap: var(--cp-spacing-lg);
174
172
  align-items: flex-start;
173
+ gap: var(--cp-spacing-lg);
174
+ grid-template-columns: min-content 1fr;
175
175
  }
176
176
 
177
177
  &--isReversed {
@@ -182,6 +182,40 @@ const handleClick = (value: boolean): void => {
182
182
  }
183
183
  }
184
184
 
185
+ &__knobContainer {
186
+ display: flex;
187
+ width: 100%;
188
+ align-items: center;
189
+ padding: var(--cp-dimensions-0_5);
190
+ transition: transform 300ms var(--cp-easing-elastic);
191
+ }
192
+
193
+ &__knob {
194
+ width: calc(var(--cp-switch-base-height) - var(--cp-dimensions-1));
195
+ height: calc(var(--cp-switch-base-height) - var(--cp-dimensions-1));
196
+ border-radius: var(--cp-radius-full);
197
+ background-color: var(--cp-foreground-white);
198
+ box-shadow: var(--cp-shadows-3xs);
199
+ }
200
+
201
+ &--isActive .cpSwitch {
202
+ &__knobContainer {
203
+ transform: translate3d(50%, 0, 0);
204
+ }
205
+ }
206
+
207
+ &__switch {
208
+ position: relative;
209
+ display: flex;
210
+ overflow: hidden;
211
+ width: calc(var(--cp-switch-base-height) * 2);
212
+ height: var(--cp-switch-base-height);
213
+ border-radius: var(--cp-radius-full);
214
+ background-color: var(--cp-background-quaternary);
215
+ margin-block: var(--cp-spacing-xs);
216
+ transition: background-color 100ms ease-out;
217
+ }
218
+
185
219
  &--isDisabled,
186
220
  &--isDisabled:hover {
187
221
  &,
@@ -190,8 +224,8 @@ const handleClick = (value: boolean): void => {
190
224
  }
191
225
 
192
226
  .cpSwitch__switch {
193
- background-color: var(--cp-background-disabled);
194
227
  border: var(--cp-dimensions-0_25) solid var(--cp-border-disabled);
228
+ background-color: var(--cp-background-disabled);
195
229
  }
196
230
 
197
231
  .cpSwitch__label,
@@ -200,10 +234,10 @@ const handleClick = (value: boolean): void => {
200
234
  }
201
235
 
202
236
  .cpSwitch__knob {
203
- background-color: var(--cp-foreground-disabled);
204
- box-shadow: none;
205
237
  width: calc(var(--cp-switch-base-height) * 0.5 - var(--cp-dimensions-0_5));
206
238
  height: calc(var(--cp-switch-base-height) * 0.5 - var(--cp-dimensions-0_5));
239
+ background-color: var(--cp-foreground-disabled);
240
+ box-shadow: none;
207
241
  }
208
242
 
209
243
  .cpSwitch__knobContainer {
@@ -211,52 +245,17 @@ const handleClick = (value: boolean): void => {
211
245
  }
212
246
  }
213
247
 
214
- &--isActive .cpSwitch {
215
- &__knobContainer {
216
- transform: translate3d(50%, 0, 0);
217
- }
218
- }
219
-
220
248
  @include cp-switch-style(var(--cp-background-accent-solid), 'Accent');
221
-
222
249
  @include cp-switch-style(var(--cp-background-accent-solid), 'Purple'); // TODO: Should be replace by ACCENT
223
250
 
224
- &__switch {
225
- position: relative;
226
- border-radius: var(--cp-radius-full);
227
- background-color: var(--cp-background-quaternary);
228
- overflow: hidden;
229
- transition: background-color 100ms ease-out;
230
- display: flex;
231
- height: var(--cp-switch-base-height);
232
- width: calc(var(--cp-switch-base-height) * 2);
233
- margin-block: var(--cp-spacing-xs);
234
- }
235
-
236
251
  input {
237
252
  position: absolute;
238
253
  z-index: 1;
239
254
  top: 0;
240
255
  left: 0;
241
- opacity: 0;
242
256
  width: 100%;
243
257
  height: 100%;
244
- }
245
-
246
- &__knobContainer {
247
- width: 100%;
248
- padding: var(--cp-dimensions-0_5);
249
- display: flex;
250
- align-items: center;
251
- transition: transform 300ms var(--cp-easing-elastic);
252
- }
253
-
254
- &__knob {
255
- background-color: var(--cp-foreground-white);
256
- border-radius: var(--cp-radius-full);
257
- box-shadow: var(--cp-shadows-3xs);
258
- width: calc(var(--cp-switch-base-height) - var(--cp-dimensions-1));
259
- height: calc(var(--cp-switch-base-height) - var(--cp-dimensions-1));
258
+ opacity: 0;
260
259
  }
261
260
  }
262
261
  </style>
@@ -120,20 +120,17 @@
120
120
  </template>
121
121
 
122
122
  <script setup lang="ts">
123
- import { ref, computed, useId, watch, useSlots } from 'vue'
124
-
125
123
  import type { MenuItemCommandEvent } from 'primevue/menuitem'
126
-
127
- import { CpTableColumnObject } from '@/constants/CpTableColumn'
124
+ import { computed, ref, useId, useSlots, watch } from 'vue'
128
125
 
129
126
  import CpContextualMenu from '@/components/CpContextualMenu.vue'
130
127
  import CpTableEmptyState from '@/components/CpTableEmptyState.vue'
131
128
  import CpTableFooter from '@/components/CpTableFooter.vue'
132
129
 
133
- import { camelize, decamelize } from '@/helpers/string'
134
-
135
130
  import { RESERVED_KEYS, VISIBLE_ROWS_MAX } from '@/constants'
131
+ import { CpTableColumnObject } from '@/constants/CpTableColumn'
136
132
  import { capitalizeFirstLetter } from '@/helpers'
133
+ import { camelize, decamelize } from '@/helpers/string'
137
134
 
138
135
  interface Emits {
139
136
  (evt: 'onRowClick', data: Record<string, unknown>): void
@@ -564,33 +561,24 @@ defineExpose({ hideContextualMenu, resetPagination, currentRowData })
564
561
  &__container {
565
562
  position: relative;
566
563
  display: flex;
567
- flex-direction: column;
568
564
  flex: 1;
565
+ flex-direction: column;
569
566
 
570
567
  &--hasPagination {
571
568
  border-bottom: var(--cp-dimensions-0_25) solid var(--cp-border-soft);
572
569
  }
573
570
  }
574
571
 
575
- /* Standard Tables */
576
- &__container[role='region'][aria-labelledby][tabindex] {
577
- overflow: auto;
578
- }
579
-
580
- &__container[role='region'][aria-labelledby][tabindex]:focus {
581
- border-radius: var(--cp-radius-md-lg);
582
- box-shadow: 0 0 0 calc(var(--cp-dimensions-0_5) * 1.5) var(--cp-focus);
583
- }
584
-
585
- &__container[role='region'][aria-labelledby][tabindex] &__table {
586
- margin: 0;
587
- border: none;
572
+ &__table {
573
+ width: 100%;
574
+ border-collapse: collapse;
588
575
  }
589
576
 
590
577
  /* Scrolling Visual Cue */
591
578
  &__container[role='region'][aria-labelledby][tabindex] {
592
579
  @extend %u-scrolling-visual-cue;
593
580
 
581
+ overflow: auto;
594
582
  background:
595
583
  linear-gradient(
596
584
  to right,
@@ -614,36 +602,50 @@ defineExpose({ hideContextualMenu, resetPagination, currentRowData })
614
602
  color-mix(in srgb, #{var(--cp-colors-grey-shadow-color-50)} 0%, transparent)
615
603
  )
616
604
  0 100%;
617
- background-repeat: no-repeat;
605
+ background-attachment: local, local, scroll, scroll;
618
606
  background-color: var(--cp-background-white);
619
- background-size:
620
- var(--cp-dimensions-10) 100%,
621
- var(--cp-dimensions-10) 100%,
622
- var(--cp-dimensions-3_5) 100%,
623
- var(--cp-dimensions-3_5) 100%;
624
607
  background-position:
625
608
  0 0,
626
609
  100%,
627
610
  0 0,
628
611
  100%;
629
- background-attachment: local, local, scroll, scroll;
612
+ background-repeat: no-repeat;
613
+ background-size:
614
+ var(--cp-dimensions-10) 100%,
615
+ var(--cp-dimensions-10) 100%,
616
+ var(--cp-dimensions-3_5) 100%,
617
+ var(--cp-dimensions-3_5) 100%;
618
+ }
619
+
620
+ &__container[role='region'][aria-labelledby][tabindex]:focus {
621
+ border-radius: var(--cp-radius-md-lg);
622
+ box-shadow: 0 0 0 calc(var(--cp-dimensions-0_5) * 1.5) var(--cp-focus);
623
+ }
624
+
625
+ &__container[role='region'][aria-labelledby][tabindex] &__table {
626
+ border: none;
627
+ margin: 0;
630
628
  }
631
629
 
632
630
  &__caption {
633
631
  position: sticky;
634
632
  left: 0;
635
633
  margin-bottom: var(--cp-spacing-xl);
636
- text-align: left;
637
634
  font-size: var(--cp-text-size-lg);
635
+ text-align: left;
638
636
 
639
- &:first-letter {
637
+ &::first-letter {
640
638
  text-transform: capitalize;
641
639
  }
642
640
  }
643
641
 
644
- &__table {
645
- border-collapse: collapse;
646
- width: 100%;
642
+ &__body {
643
+ vertical-align: middle;
644
+ }
645
+
646
+ &__row--body,
647
+ &__cell {
648
+ vertical-align: inherit;
647
649
  }
648
650
 
649
651
  &__row {
@@ -684,30 +686,30 @@ defineExpose({ hideContextualMenu, resetPagination, currentRowData })
684
686
 
685
687
  &__column {
686
688
  position: sticky;
687
- top: 0;
688
689
  z-index: 3;
690
+ top: 0;
689
691
  padding: var(--cp-spacing-md) var(--cp-spacing-lg);
690
- text-align: left;
691
- white-space: nowrap;
692
+ background-color: var(--cp-background-primary);
693
+ color: var(--cp-text-secondary);
692
694
  font-size: var(--cp-text-size-xs);
693
- line-height: var(--cp-line-height-xs);
694
695
  font-weight: normal;
695
- color: var(--cp-text-secondary);
696
- background-color: var(--cp-background-primary);
696
+ line-height: var(--cp-line-height-xs);
697
+ text-align: left;
698
+ white-space: nowrap;
697
699
 
698
- &:first-letter {
700
+ &::first-letter {
699
701
  text-transform: capitalize;
700
702
  }
701
703
 
702
704
  /* Workaround for sticky header border-bottom */
703
- &:after {
704
- content: '';
705
+ &::after {
705
706
  position: absolute;
706
707
  bottom: 0;
707
708
  left: 0;
708
709
  width: 100%;
709
710
  height: var(--cp-dimensions-0_25);
710
711
  background-color: var(--cp-border-soft);
712
+ content: '';
711
713
  }
712
714
 
713
715
  &--isOptions {
@@ -728,15 +730,6 @@ defineExpose({ hideContextualMenu, resetPagination, currentRowData })
728
730
  }
729
731
  }
730
732
 
731
- &__body {
732
- vertical-align: middle;
733
- }
734
-
735
- &__row--body,
736
- &__cell {
737
- vertical-align: inherit;
738
- }
739
-
740
733
  &__cell {
741
734
  &:not(#{&}--isFullWidth):not(#{&}--isOptions) {
742
735
  padding: var(--cp-spacing-xl) var(--cp-spacing-lg);
@@ -750,8 +743,8 @@ defineExpose({ hideContextualMenu, resetPagination, currentRowData })
750
743
 
751
744
  &--isFullWidth > * {
752
745
  left: 50%;
753
- transform: translateX(-50%);
754
746
  display: inline-block;
747
+ transform: translateX(-50%);
755
748
  }
756
749
 
757
750
  &--isOptions {
@@ -777,8 +770,8 @@ defineExpose({ hideContextualMenu, resetPagination, currentRowData })
777
770
  }
778
771
 
779
772
  &:is(:hover, :focus):not(:disabled) {
780
- box-shadow: none;
781
773
  background-color: var(--cp-background-primary-hover);
774
+ box-shadow: none;
782
775
  color: var(--cp-foreground-primary);
783
776
  }
784
777
 
@@ -798,18 +791,18 @@ defineExpose({ hideContextualMenu, resetPagination, currentRowData })
798
791
  }
799
792
 
800
793
  &:focus {
801
- outline: none !important;
802
794
  box-shadow: 0 0 0 calc(var(--cp-dimensions-0_5) * 1.5) var(--cp-focus);
795
+ outline: none !important;
803
796
  }
804
797
  }
805
798
 
806
799
  @mixin cp-table-only-default-action-visible-style {
807
800
  padding: var(--cp-spacing-sm);
801
+ border-radius: var(--cp-radius-md);
802
+ background-color: var(--cp-background-primary);
808
803
  box-shadow:
809
804
  var(--cp-shadows-3xs),
810
805
  0 0 0 var(--cp-dimensions-0_25) var(--cp-border-soft);
811
- border-radius: var(--cp-radius-md);
812
- background-color: var(--cp-background-primary);
813
806
  }
814
807
 
815
808
  // Solo default action mode
@@ -850,17 +843,17 @@ defineExpose({ hideContextualMenu, resetPagination, currentRowData })
850
843
  // Actions wrapper on desktop : displayed only if there are quick actions inside
851
844
  &__cell--isOptions .cpTable__actions {
852
845
  position: absolute;
853
- opacity: 0;
854
846
  top: 50%;
855
- transform: translateY(-50%);
856
847
  right: var(--cp-dimensions-3);
857
848
  display: inline-flex;
858
849
  overflow: hidden;
850
+ border-radius: var(--cp-radius-md);
851
+ background-color: var(--cp-background-primary);
859
852
  box-shadow:
860
853
  var(--cp-shadows-3xs),
861
854
  0 0 0 var(--cp-dimensions-0_25) var(--cp-border-soft);
862
- border-radius: var(--cp-radius-md);
863
- background-color: var(--cp-background-primary);
855
+ opacity: 0;
856
+ transform: translateY(-50%);
864
857
 
865
858
  &:has(.cpTable__action:only-child) {
866
859
  right: var(--cp-dimensions-4);
@@ -882,38 +875,22 @@ defineExpose({ hideContextualMenu, resetPagination, currentRowData })
882
875
  flex: 1;
883
876
  }
884
877
 
885
- &--isLoading &__overlay {
886
- opacity: 0.5;
887
- pointer-events: all;
888
-
889
- &::after {
890
- animation-play-state: running;
891
- }
892
- }
893
878
 
894
879
  &__overlay {
895
880
  position: absolute;
881
+ z-index: 4;
896
882
  overflow: hidden;
897
- left: 0;
898
- right: 0;
899
- top: 0;
900
- bottom: 0;
901
883
  border-radius: var(--cp-radius-md-lg);
902
884
  background-color: var(--cp-background-primary);
903
- z-index: 4;
904
- opacity: 0;
905
- transition: 0.15s opacity ease-in-out;
906
885
  cursor: wait;
886
+ inset: 0;
887
+ opacity: 0;
907
888
  pointer-events: none;
889
+ transition: 0.15s opacity ease-in-out;
908
890
 
909
891
  &::after {
910
- content: '';
911
892
  position: absolute;
912
- top: 0;
913
- right: 0;
914
- bottom: 0;
915
- left: 0;
916
- transform: translate3d(-100%, 0, 0);
893
+ animation: shimmer 2s infinite paused;
917
894
  background-image: linear-gradient(
918
895
  90deg,
919
896
  color-mix(in srgb, #{var(--cp-colors-grey-shadow-color-20)} 0%, transparent) 0,
@@ -921,7 +898,9 @@ defineExpose({ hideContextualMenu, resetPagination, currentRowData })
921
898
  color-mix(in srgb, #{var(--cp-colors-grey-shadow-color-20)} 50%, transparent) 60%,
922
899
  color-mix(in srgb, #{var(--cp-colors-grey-shadow-color-20)} 0%, transparent)
923
900
  );
924
- animation: shimmer 2s infinite paused;
901
+ content: '';
902
+ inset: 0;
903
+ transform: translate3d(-100%, 0, 0);
925
904
  }
926
905
 
927
906
  @keyframes shimmer {
@@ -930,5 +909,14 @@ defineExpose({ hideContextualMenu, resetPagination, currentRowData })
930
909
  }
931
910
  }
932
911
  }
912
+
913
+ &--isLoading &__overlay {
914
+ opacity: 0.5;
915
+ pointer-events: all;
916
+
917
+ &::after {
918
+ animation-play-state: running;
919
+ }
920
+ }
933
921
  }
934
922
  </style>