@citizenplane/pimp 10.0.8 → 10.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/dist/pimp.es.js +1305 -1303
  2. package/dist/pimp.umd.js +22 -22
  3. package/dist/style.css +1 -1
  4. package/package.json +1 -1
  5. package/src/assets/css/base.css +16 -1
  6. package/src/assets/css/colors.css +111 -110
  7. package/src/assets/css/dimensions.css +36 -35
  8. package/src/assets/css/easings.css +2 -1
  9. package/src/assets/css/shadows.css +67 -65
  10. package/src/assets/css/tokens.css +355 -386
  11. package/src/assets/css/typography.css +109 -0
  12. package/src/assets/main.css +1 -1
  13. package/src/assets/styles/helpers/_functions.scss +2 -2
  14. package/src/assets/styles/helpers/_mixins.scss +1 -1
  15. package/src/assets/styles/utilities/_index.scss +3 -6
  16. package/src/components/BaseInputLabel.vue +23 -21
  17. package/src/components/BaseSelectClearButton.vue +15 -9
  18. package/src/components/CpAirlineLogo.vue +1 -1
  19. package/src/components/CpAlert.vue +16 -16
  20. package/src/components/CpBadge.vue +149 -29
  21. package/src/components/CpButton.vue +135 -110
  22. package/src/components/CpButtonGroup.vue +3 -3
  23. package/src/components/CpCalendar.vue +32 -32
  24. package/src/components/CpCheckbox.vue +43 -33
  25. package/src/components/CpContextualMenu.vue +6 -9
  26. package/src/components/CpDate.vue +53 -40
  27. package/src/components/CpDatepicker.vue +3 -3
  28. package/src/components/CpDialog.vue +19 -19
  29. package/src/components/CpHeading.vue +23 -23
  30. package/src/components/CpInput.vue +71 -52
  31. package/src/components/CpItemActions.vue +4 -4
  32. package/src/components/CpLoader.vue +14 -7
  33. package/src/components/CpMenuItem.vue +23 -17
  34. package/src/components/CpMultiselect.vue +84 -58
  35. package/src/components/CpPartnerBadge.vue +13 -13
  36. package/src/components/CpRadio.vue +32 -24
  37. package/src/components/CpSelect.vue +43 -30
  38. package/src/components/CpSelectMenu.vue +39 -39
  39. package/src/components/CpSwitch.vue +51 -40
  40. package/src/components/CpTable.vue +249 -81
  41. package/src/components/CpTableColumnEditor.vue +18 -16
  42. package/src/components/CpTableEmptyState.vue +9 -9
  43. package/src/components/CpTabs.vue +15 -15
  44. package/src/components/CpTelInput.vue +76 -70
  45. package/src/components/CpTextarea.vue +27 -17
  46. package/src/components/CpToast.vue +49 -49
  47. package/src/components/CpTooltip.vue +6 -6
  48. package/src/components/CpTransitionDialog.vue +1 -1
  49. package/src/constants/Sizes.ts +5 -0
  50. package/src/constants/colors/Colors.ts +15 -5
  51. package/src/constants/colors/ToggleColors.ts +2 -1
  52. package/src/libs/CoreDatepicker.vue +21 -18
  53. package/src/stories/CpBadge.stories.ts +25 -17
  54. package/src/stories/CpButton.stories.ts +6 -5
  55. package/src/stories/CpCheckbox.stories.ts +4 -4
  56. package/src/stories/CpContextualMenu.stories.ts +3 -2
  57. package/src/stories/CpLoader.stories.ts +2 -2
  58. package/src/stories/CpMenuItem.stories.ts +104 -0
  59. package/src/stories/CpRadio.stories.ts +29 -2
  60. package/src/stories/CpSwitch.stories.ts +27 -0
  61. package/src/stories/CpTable.stories.ts +94 -0
  62. package/src/assets/css/spacing.css +0 -43
  63. package/src/assets/styles/helpers/_keyframes.scss +0 -48
  64. package/src/assets/styles/variables/_sizing.scss +0 -4
@@ -192,7 +192,7 @@ onMounted(async () => {
192
192
  flex-direction: column;
193
193
 
194
194
  &:has(.cpInput__help, .cpInput__error) .cpInput__container {
195
- margin-bottom: sp.$space;
195
+ margin-bottom: var(--cp-spacing-md);
196
196
  }
197
197
 
198
198
  &__container {
@@ -206,26 +206,32 @@ onMounted(async () => {
206
206
  }
207
207
 
208
208
  &__inner {
209
- box-shadow: 0 0 0 fn.px-to-rem(1) colors.$border-color;
209
+ box-shadow:
210
+ var(--cp-drop-shadow-3xs-offset-x) var(--cp-drop-shadow-3xs-offset-y) var(--cp-drop-shadow-3xs-blur) -1px
211
+ var(--cp-drop-shadow-3xs-color),
212
+ 0 0 0 var(--cp-dimensions-0_25) var(--cp-border-soft);
210
213
  appearance: none;
211
- border-radius: fn.px-to-rem(8);
214
+ border-radius: var(--cp-radius-md);
212
215
  width: 100%;
213
216
  color: inherit;
214
- padding: sp.$space sp.$space-lg;
215
- line-height: fn.px-to-rem(24);
216
- font-size: fn.px-to-rem(14);
217
+ padding: var(--cp-spacing-md) var(--cp-spacing-xl);
218
+ line-height: var(--cp-line-height-md);
219
+ font-size: var(--cp-text-size-sm);
217
220
 
218
221
  &:hover {
219
- box-shadow: 0 0 0 fn.px-to-rem(1) colors.$primary-color;
222
+ box-shadow:
223
+ var(--cp-drop-shadow-3xs-offset-x) var(--cp-drop-shadow-3xs-offset-y) var(--cp-drop-shadow-3xs-blur) -1px
224
+ var(--cp-drop-shadow-3xs-color),
225
+ 0 0 0 var(--cp-dimensions-0_25) var(--cp-border-soft-hover);
220
226
  }
221
227
 
222
228
  &:focus {
223
- outline: fn.px-to-rem(2) solid colors.$primary-color;
224
- background-color: colors.$neutral-light;
229
+ outline: var(--cp-dimensions-0_5) solid var(--cp-focus);
230
+ background-color: var(--cp-background-primary);
225
231
  }
226
232
 
227
233
  &::placeholder {
228
- color: colors.$neutral-dark-1;
234
+ color: var(--cp-text-placeholder);
229
235
  }
230
236
  }
231
237
 
@@ -234,33 +240,35 @@ onMounted(async () => {
234
240
  .cpInput__inner:hover,
235
241
  .cpInput__inner:focus,
236
242
  .cpInput__icon:hover ~ .cpInput__inner {
237
- box-shadow: 0 0 0 fn.px-to-rem(1) colors.$error-color;
243
+ box-shadow:
244
+ var(--cp-drop-shadow-3xs-offset-x) var(--cp-drop-shadow-3xs-offset-y) var(--cp-drop-shadow-3xs-blur) -1px
245
+ var(--cp-drop-shadow-3xs-color),
246
+ 0 0 0 var(--cp-dimensions-0_25) var(--cp-border-error-solid);
238
247
  }
239
248
 
240
249
  .cpInput__inner:focus {
241
- outline: fn.px-to-rem(2) solid colors.$error-color;
242
- box-shadow: 0 0 0 fn.px-to-em(1) color.scale(colors.$error-color, $lightness: 60%);
250
+ outline: var(--cp-dimensions-0_5) solid var(--cp-border-error-solid);
243
251
  }
244
252
  }
245
253
 
246
254
  &--isDisabled {
247
- color: colors.$neutral-dark-2;
255
+ color: var(--cp-foreground-disabled);
248
256
 
249
257
  .cpInput__container * {
250
258
  cursor: not-allowed;
251
259
  }
252
260
 
253
261
  .cpInput__inner {
254
- background: colors.$neutral-light-1;
262
+ background: var(--cp-background-disabled);
255
263
  }
256
264
 
257
265
  .cpInput__inner,
258
266
  .cpInput__inner:hover {
259
- box-shadow: 0 0 0 fn.px-to-rem(1) colors.$neutral-dark-4;
267
+ box-shadow: 0 0 0 var(--cp-dimensions-0_25) var(--cp-border-disabled);
260
268
  }
261
269
 
262
270
  .cpInput__icon:hover ~ .cpInput__inner {
263
- box-shadow: 0 0 0 fn.px-to-rem(1) colors.$neutral-dark-4;
271
+ box-shadow: 0 0 0 var(--cp-dimensions-0_25) var(--cp-border-disabled);
264
272
  }
265
273
  }
266
274
 
@@ -273,11 +281,12 @@ onMounted(async () => {
273
281
  }
274
282
 
275
283
  &__icon {
276
- @include mx.square-sizing(16);
284
+ width: var(--cp-dimensions-4);
285
+ height: var(--cp-dimensions-4);
277
286
 
278
287
  display: flex;
279
288
  align-items: center;
280
- left: fn.px-to-rem(14);
289
+ left: var(--cp-dimensions-3_5);
281
290
  z-index: 1;
282
291
  position: absolute;
283
292
  top: 50%;
@@ -285,7 +294,7 @@ onMounted(async () => {
285
294
  overflow: hidden;
286
295
 
287
296
  &:hover ~ .cpInput__inner {
288
- box-shadow: 0 0 0 fn.px-to-rem(1) colors.$primary-color;
297
+ box-shadow: 0 0 0 var(--cp-dimensions-0_25) var(--cp-foreground-accent-primary);
289
298
  }
290
299
 
291
300
  svg {
@@ -296,81 +305,82 @@ onMounted(async () => {
296
305
 
297
306
  &--isBefore,
298
307
  &--isAfter {
299
- font-size: fn.px-to-rem(14);
308
+ font-size: var(--cp-text-size-sm);
300
309
  }
301
310
 
302
311
  &--isAfter {
303
312
  left: auto;
304
- right: fn.px-to-rem(14);
313
+ right: var(--cp-dimensions-3_5);
305
314
  }
306
315
 
307
316
  &--isBefore ~ input {
308
- padding-left: calc(#{sp.$space-md} + #{sp.$space-sm} + #{fn.px-to-rem(16) + sp.$space});
317
+ padding-left: calc(var(--cp-spacing-lg) + var(--cp-spacing-sm) + var(--cp-dimensions-4) + var(--cp-spacing-md));
309
318
  }
310
319
  }
311
320
 
312
321
  &:has(.cpInput__icon--isAfter) input {
313
- padding-right: calc(#{sp.$space-md} + #{sp.$space-sm} + #{fn.px-to-rem(16) + sp.$space});
322
+ padding-right: calc(var(--cp-spacing-lg) + var(--cp-spacing-sm) + var(--cp-dimensions-4) + var(--cp-spacing-md));
314
323
  }
315
324
 
316
325
  &--lg {
317
326
  .cpInput__inner {
318
- border-radius: fn.px-to-rem(10);
319
- padding: sp.$space-md sp.$space-lg;
320
- font-size: fn.px-to-rem(16);
327
+ border-radius: var(--cp-radius-md-lg);
328
+ padding: var(--cp-spacing-lg) var(--cp-spacing-xl);
329
+ font-size: var(--cp-text-size-md);
321
330
  }
322
331
 
323
332
  .cpInput__icon {
324
- @include mx.square-sizing(20);
333
+ width: var(--cp-dimensions-5);
334
+ height: var(--cp-dimensions-5);
325
335
 
326
- left: fn.px-to-rem(12);
336
+ left: var(--cp-spacing-lg);
327
337
  }
328
338
 
329
339
  .cpInput__icon--isBefore,
330
340
  .cpInput__icon--isAfter {
331
- font-size: fn.px-to-rem(16);
341
+ font-size: var(--cp-text-size-md);
332
342
  }
333
343
 
334
344
  .cpInput__icon--isAfter {
335
345
  left: auto;
336
- right: fn.px-to-rem(12);
346
+ right: var(--cp-spacing-lg);
337
347
  }
338
348
 
339
349
  .cpInput__icon--isAfter ~ input {
340
- padding-right: calc(#{sp.$space-lg} + #{fn.px-to-rem(20)} + #{sp.$space-sm});
350
+ padding-right: calc(var(--cp-spacing-xl) + var(--cp-dimensions-5) + var(--cp-spacing-sm));
341
351
  }
342
352
 
343
353
  .cpInput__icon--isBefore ~ input {
344
- padding-left: calc(#{sp.$space-lg} + #{fn.px-to-rem(20)} + #{sp.$space-sm});
354
+ padding-left: calc(var(--cp-spacing-xl) + var(--cp-dimensions-5) + var(--cp-spacing-sm));
345
355
  }
346
356
  }
347
357
 
348
358
  &--sm {
349
359
  .cpInput__inner {
350
- padding: sp.$space-sm sp.$space-md;
351
- font-size: fn.px-to-rem(14);
360
+ padding: var(--cp-spacing-sm) var(--cp-spacing-lg);
361
+ font-size: var(--cp-text-size-sm);
352
362
  }
353
363
 
354
364
  .cpInput__icon {
355
- left: fn.px-to-rem(10);
365
+ left: var(--cp-dimensions-2_5);
356
366
  }
357
367
 
358
368
  .cpInput__icon--isBefore,
359
369
  .cpInput__icon--isAfter {
360
- font-size: fn.px-to-rem(12);
370
+ font-size: var(--cp-text-size-xs);
361
371
  }
362
372
 
363
373
  .cpInput__icon--isAfter {
364
374
  left: auto;
365
- right: fn.px-to-rem(10);
375
+ right: var(--cp-dimensions-2_5);
366
376
  }
367
377
 
368
378
  .cpInput__icon--isBefore ~ input {
369
- padding-left: calc(#{sp.$space-sm * 2} + #{fn.px-to-rem(20) + sp.$space});
379
+ padding-left: calc(var(--cp-spacing-md) + var(--cp-dimensions-5) + var(--cp-spacing-md));
370
380
  }
371
381
 
372
382
  .cpInput__icon--isAfter ~ input {
373
- padding-right: calc(#{sp.$space-sm * 2} + #{fn.px-to-rem(20) + sp.$space});
383
+ padding-right: calc(var(--cp-spacing-md) + var(--cp-dimensions-5) + var(--cp-spacing-md));
374
384
  }
375
385
  }
376
386
 
@@ -390,40 +400,49 @@ onMounted(async () => {
390
400
 
391
401
  .cpInput__clear {
392
402
  display: flex;
393
- color: colors.$neutral-light;
394
- padding: sp.$space-xs;
395
- border-radius: 50%;
396
- background-color: colors.$neutral-dark-1;
403
+ color: var(--cp-foreground-secondary);
404
+ padding: var(--cp-spacing-sm);
405
+ width: var(--cp-dimensions-6);
406
+ height: var(--cp-dimensions-6);
407
+ border-radius: var(--cp-radius-full);
408
+ background-color: transparent;
409
+
410
+ &:hover {
411
+ color: var(--cp-foreground-secondary-hover);
412
+ background-color: var(--cp-background-primary-hover);
413
+ }
397
414
 
398
415
  &:focus-visible {
399
- outline: fn.px-to-rem(2) solid colors.$primary-color;
400
- outline-offset: fn.px-to-rem(1);
416
+ outline: var(--cp-dimensions-0_5) solid var(--cp-focus);
417
+ outline-offset: var(--cp-dimensions-0_25);
401
418
  }
402
419
  }
403
420
 
404
421
  .cpInput__clearIcon {
405
- @include mx.square-sizing(12);
422
+ width: var(--cp-dimensions-4);
423
+ height: var(--cp-dimensions-4);
406
424
 
407
425
  pointer-events: none;
408
426
  }
409
427
 
410
428
  &.cpInput--lg .cpInput__clearIcon {
411
- @include mx.square-sizing(16);
429
+ width: var(--cp-dimensions-4);
430
+ height: var(--cp-dimensions-4);
412
431
  }
413
432
  }
414
433
 
415
434
  &__help,
416
435
  &__error {
417
- font-size: fn.px-to-em(14);
418
- line-height: fn.px-to-rem(24);
436
+ font-size: var(--cp-text-size-sm);
437
+ line-height: var(--cp-line-height-md);
419
438
  }
420
439
 
421
440
  &__help {
422
- color: colors.$neutral-dark-1;
441
+ color: var(--cp-text-secondary);
423
442
  }
424
443
 
425
444
  &__error {
426
- color: colors.$error-color;
445
+ color: var(--cp-text-error-primary);
427
446
 
428
447
  &::first-letter {
429
448
  text-transform: capitalize;
@@ -63,19 +63,19 @@ const slicedActions = computed(() => {
63
63
  <style lang="scss">
64
64
  .cpItemActions {
65
65
  position: absolute;
66
- right: sp.$space-md;
66
+ right: var(--cp-spacing-lg);
67
67
  top: 50%;
68
- transform: translate3d(fn.px-to-rem(5), -50%, 0);
68
+ transform: translate3d(calc(var(--cp-dimensions-1) * 1.25), -50%, 0);
69
69
  transition:
70
70
  transform 150ms ease,
71
71
  opacity 150ms ease;
72
72
 
73
73
  &__buttonGroup {
74
- background-color: colors.$neutral-light;
74
+ background-color: var(--cp-background-primary);
75
75
  }
76
76
 
77
77
  .cpMenuItem__button {
78
- padding: sp.$space-xs sp.$space-sm;
78
+ padding: var(--cp-spacing-xs) var(--cp-spacing-sm);
79
79
  }
80
80
  }
81
81
 
@@ -46,7 +46,7 @@ interface Props {
46
46
  size?: number | string
47
47
  }
48
48
 
49
- const props = withDefaults(defineProps<Props>(), { color: Colors.PURPLE, size: 24 })
49
+ const props = withDefaults(defineProps<Props>(), { color: Colors.ACCENT, size: 24 })
50
50
 
51
51
  const capitalizedColor = computed(() => capitalizeFirstLetter(props.color))
52
52
 
@@ -68,11 +68,18 @@ const sizeAttrs = computed(() => ({
68
68
  }
69
69
 
70
70
  .cpLoader {
71
- @include cp-loader-themed('Blue', colors.$secondary-color);
72
- @include cp-loader-themed('Purple', colors.$primary-color);
73
- @include cp-loader-themed('Green', colors.$success-color);
74
- @include cp-loader-themed('Orange', colors.$warning-color);
75
- @include cp-loader-themed('Red', colors.$error-color);
76
- @include cp-loader-themed('Yellow', colors.$yellow);
71
+ @include cp-loader-themed('Neutral', var(--cp-utility-neutral-500));
72
+ @include cp-loader-themed('Accent', var(--cp-foreground-accent-primary));
73
+ @include cp-loader-themed('Error', var(--cp-foreground-error-secondary));
74
+ @include cp-loader-themed('Warning', var(--cp-foreground-warning-secondary));
75
+ @include cp-loader-themed('Success', var(--cp-foreground-success-secondary));
76
+
77
+ @include cp-loader-themed('Blue', var(--cp-foreground-blue-secondary));
78
+ @include cp-loader-themed('Yellow', var(--cp-utility-yellow-300));
79
+
80
+ @include cp-loader-themed('Purple', var(--cp-text-accent-primary)); // TODO: Should be replace by ACCENT
81
+ @include cp-loader-themed('Green', var(--cp-text-success-primary)); // TODO: Should be replace by SUCCESS
82
+ @include cp-loader-themed('Orange', var(--cp-text-warning-primary)); // TODO: Should be replace by WARNING
83
+ @include cp-loader-themed('Red', var(--cp-text-error-primary)); // TODO: Should be replace by ERROR
77
84
  }
78
85
  </style>
@@ -79,8 +79,10 @@ const handleItemClick = async (event: Event) => {
79
79
 
80
80
  <style lang="scss">
81
81
  .cpMenuItem {
82
+ padding: 0 var(--cp-spacing-sm);
83
+
82
84
  > * {
83
- padding: sp.$space sp.$space-md;
85
+ padding: var(--cp-spacing-md) var(--cp-spacing-md);
84
86
  }
85
87
 
86
88
  &__button {
@@ -88,15 +90,19 @@ const handleItemClick = async (event: Event) => {
88
90
  @extend %u-text-ellipsis;
89
91
 
90
92
  [data-p-focused='true'] & {
91
- background-color: colors.$neutral-light-1;
93
+ background-color: var(--cp-background-primary-hover);
94
+ }
95
+
96
+ [data-p-focused='true'] &--isCritical {
97
+ background-color: var(--cp-background-error-primary-hover);
92
98
  }
93
99
 
94
100
  position: relative;
95
101
  display: flex;
96
102
  width: 100%;
97
103
  align-items: center;
98
- gap: sp.$space;
99
- line-height: fn.px-to-rem(20);
104
+ gap: var(--cp-spacing-md);
105
+ line-height: var(--cp-line-height-sm);
100
106
  text-align: start;
101
107
 
102
108
  &--reverseLabel {
@@ -104,7 +110,7 @@ const handleItemClick = async (event: Event) => {
104
110
  }
105
111
 
106
112
  &:disabled {
107
- color: colors.$neutral-dark-2;
113
+ color: var(--cp-foreground-disabled);
108
114
  cursor: not-allowed;
109
115
  }
110
116
 
@@ -117,19 +123,17 @@ const handleItemClick = async (event: Event) => {
117
123
 
118
124
  &:hover:not(:disabled):not(#{&}--isCritical),
119
125
  &:focus-visible:not(:disabled):not(#{&}--isCritical) {
120
- background-color: colors.$neutral-light-1;
121
- color: colors.$primary-color;
126
+ background-color: var(--cp-background-primary-hover);
127
+ color: var(--cp-foreground-primary);
122
128
  }
123
129
 
124
- &--isCritical,
125
- &--isCritical:hover:not(:disabled),
126
- &--isCritical:focus-visible:not(:disabled) {
127
- color: colors.$error-color;
128
- }
130
+ &--isCritical {
131
+ color: var(--cp-foreground-error-primary);
129
132
 
130
- &--isCritical:hover:not(:disabled),
131
- &--isCritical:focus-visible:not(:disabled) {
132
- background-color: color.scale(colors.$error-color, $lightness: 86%);
133
+ &:is(:hover, :focus-visible):not(:disabled) {
134
+ background-color: var(--cp-background-error-primary-hover);
135
+ color: var(--cp-foreground-error-primary-hover);
136
+ }
133
137
  }
134
138
  }
135
139
 
@@ -140,7 +144,8 @@ const handleItemClick = async (event: Event) => {
140
144
 
141
145
  &__icon,
142
146
  &__loaderWrapper {
143
- @include mx.square-sizing(16);
147
+ width: var(--cp-dimensions-4);
148
+ height: var(--cp-dimensions-4);
144
149
  }
145
150
 
146
151
  &__button:is(:hover, :focus-visible) &__icon {
@@ -159,7 +164,8 @@ const handleItemClick = async (event: Event) => {
159
164
  }
160
165
 
161
166
  &__loader {
162
- @include mx.square-sizing(22);
167
+ width: calc(var(--cp-dimensions-1) * 5.5);
168
+ height: calc(var(--cp-dimensions-1) * 5.5);
163
169
  }
164
170
  }
165
171
  </style>