@citizenplane/pimp 18.7.0 → 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.
- package/biome.json +178 -0
- package/dist/components/BaseInputLabel.vue.d.ts.map +1 -1
- package/dist/components/BaseSelectClearButton.vue.d.ts.map +1 -1
- package/dist/components/CpAccordion.vue.d.ts.map +1 -1
- package/dist/components/CpAlert.vue.d.ts.map +1 -1
- package/dist/components/CpBadge.vue.d.ts.map +1 -1
- package/dist/components/CpButton.vue.d.ts.map +1 -1
- package/dist/components/CpButtonToggle.vue.d.ts +1 -1
- package/dist/components/CpButtonToggle.vue.d.ts.map +1 -1
- package/dist/components/CpCalendar.vue.d.ts.map +1 -1
- package/dist/components/CpCheckbox.vue.d.ts.map +1 -1
- package/dist/components/CpContextualMenu.vue.d.ts.map +1 -1
- package/dist/components/CpDate.vue.d.ts.map +1 -1
- package/dist/components/CpDatepicker.vue.d.ts.map +1 -1
- package/dist/components/CpInput.vue.d.ts.map +1 -1
- package/dist/components/CpItemActions.vue.d.ts.map +1 -1
- package/dist/components/CpMenu.vue.d.ts.map +1 -1
- package/dist/components/CpMenuItem.vue.d.ts.map +1 -1
- package/dist/components/CpMultiselect.vue.d.ts.map +1 -1
- package/dist/components/CpRadio.vue.d.ts.map +1 -1
- package/dist/components/CpRadioGroup.vue.d.ts.map +1 -1
- package/dist/components/CpRadioNew.vue.d.ts.map +1 -1
- package/dist/components/CpSelect.vue.d.ts.map +1 -1
- package/dist/components/CpSelectMenu.vue.d.ts.map +1 -1
- package/dist/components/CpSelectableButton.vue.d.ts +1 -1
- package/dist/components/CpSelectableButton.vue.d.ts.map +1 -1
- package/dist/components/CpSwitch.vue.d.ts.map +1 -1
- package/dist/components/CpTable.vue.d.ts.map +1 -1
- package/dist/components/CpTelInput.vue.d.ts.map +1 -1
- package/dist/components/CpTooltip.vue.d.ts +2 -0
- package/dist/components/CpTooltip.vue.d.ts.map +1 -1
- package/dist/components/CpTrip.vue.d.ts +48 -0
- package/dist/components/CpTrip.vue.d.ts.map +1 -0
- package/dist/components/CpTripTimeline.vue.d.ts +24 -0
- package/dist/components/CpTripTimeline.vue.d.ts.map +1 -0
- package/dist/components/index.d.ts +2 -1
- package/dist/components/index.d.ts.map +1 -1
- package/dist/composables/useDynamicSize.d.ts +9 -0
- package/dist/composables/useDynamicSize.d.ts.map +1 -0
- package/dist/constants/index.d.ts +2 -2
- package/dist/constants/index.d.ts.map +1 -1
- package/dist/constants/layout/Breakpoints.d.ts +9 -0
- package/dist/constants/layout/Breakpoints.d.ts.map +1 -0
- package/dist/constants/layout/Sizes.d.ts +2 -0
- package/dist/constants/layout/Sizes.d.ts.map +1 -0
- package/dist/constants/layout/index.d.ts +3 -0
- package/dist/constants/layout/index.d.ts.map +1 -0
- package/dist/helpers/functions.d.ts +1 -0
- package/dist/helpers/functions.d.ts.map +1 -1
- package/dist/libs/CoreDatepicker.vue.d.ts.map +1 -1
- package/dist/pimp.es.js +6794 -6459
- package/dist/pimp.umd.js +54 -54
- package/dist/style.css +1 -1
- package/package.json +14 -24
- package/src/assets/css/base.css +17 -11
- package/src/assets/css/colors.css +12 -22
- package/src/assets/css/dimensions.css +4 -0
- package/src/assets/css/shadows.css +0 -3
- package/src/assets/css/tokens.css +21 -65
- package/src/assets/css/typography.css +0 -17
- package/src/assets/main.css +7 -7
- package/src/assets/styles/helpers/_functions.scss +2 -2
- package/src/assets/styles/utilities/_index.scss +2 -3
- package/src/components/BaseInputLabel.vue +7 -11
- package/src/components/BaseSelectClearButton.vue +6 -7
- package/src/components/CpAccordion.vue +27 -28
- package/src/components/CpAccordionGroup.vue +2 -2
- package/src/components/CpAlert.vue +12 -11
- package/src/components/CpBadge.vue +4 -19
- package/src/components/CpButton.vue +23 -25
- package/src/components/CpButtonGroup.vue +2 -2
- package/src/components/CpButtonToggle.vue +22 -22
- package/src/components/CpCalendar.vue +30 -26
- package/src/components/CpCheckbox.vue +29 -33
- package/src/components/CpContextualMenu.vue +1 -2
- package/src/components/CpDate.vue +72 -76
- package/src/components/CpDatepicker.vue +2 -3
- package/src/components/CpDialog.vue +8 -8
- package/src/components/CpHeading.vue +6 -6
- package/src/components/CpIcon.vue +2 -2
- package/src/components/CpInput.vue +46 -48
- package/src/components/CpItemActions.vue +10 -10
- package/src/components/CpMenu.vue +8 -9
- package/src/components/CpMenuItem.vue +7 -7
- package/src/components/CpMenuList.vue +3 -3
- package/src/components/CpMultiselect.vue +29 -30
- package/src/components/CpRadio.vue +53 -59
- package/src/components/CpRadioGroup.vue +11 -12
- package/src/components/CpRadioNew.vue +56 -58
- package/src/components/CpSelect.vue +42 -42
- package/src/components/CpSelectMenu.vue +32 -32
- package/src/components/CpSelectableButton.vue +50 -51
- package/src/components/CpSwitch.vue +43 -44
- package/src/components/CpTable.vue +69 -81
- package/src/components/CpTableColumnEditor.vue +16 -16
- package/src/components/CpTableEmptyState.vue +4 -4
- package/src/components/CpTableFooter.vue +2 -2
- package/src/components/CpTableFooterDesktop.vue +2 -2
- package/src/components/CpTableFooterDetails.vue +2 -2
- package/src/components/CpTableFooterMobile.vue +4 -4
- package/src/components/CpTabs.vue +1 -1
- package/src/components/CpTelInput.vue +31 -32
- package/src/components/CpTextarea.vue +13 -13
- package/src/components/CpToast.vue +25 -24
- package/src/components/CpTooltip.vue +15 -13
- package/src/components/CpTransitionCounter.vue +1 -1
- package/src/components/CpTransitionExpand.vue +5 -5
- package/src/components/CpTransitionSize.vue +1 -1
- package/src/components/CpTrip.vue +190 -0
- package/src/components/CpTripTimeline.vue +272 -0
- package/src/components/index.ts +36 -34
- package/src/composables/useDynamicSize.ts +60 -0
- package/src/constants/index.ts +2 -2
- package/src/constants/layout/Breakpoints.ts +8 -0
- package/src/constants/layout/Sizes.ts +1 -0
- package/src/constants/layout/index.ts +3 -0
- package/src/directives/ClickOutside.ts +1 -1
- package/src/directives/ResizeSelect.ts +1 -1
- package/src/helpers/functions.ts +1 -1
- package/src/helpers/index.ts +1 -1
- package/src/libs/CoreDatepicker.vue +115 -134
- package/src/stories/Colors.stories.ts +2 -1
- package/src/stories/CpAccordion.stories.ts +2 -2
- package/src/stories/CpAccordionGroup.stories.ts +1 -2
- package/src/stories/CpButtonToggle.stories.ts +1 -2
- package/src/stories/CpCheckbox.stories.ts +1 -2
- package/src/stories/CpContextualMenu.stories.ts +1 -2
- package/src/stories/CpDate.stories.ts +1 -2
- package/src/stories/CpDatepicker.stories.ts +1 -2
- package/src/stories/CpDialog.stories.ts +1 -2
- package/src/stories/CpInput.stories.ts +1 -2
- package/src/stories/CpItemActions.stories.ts +1 -2
- package/src/stories/CpMenu.stories.ts +1 -2
- package/src/stories/CpMenuItem.stories.ts +1 -2
- package/src/stories/CpMultiselect.stories.ts +1 -2
- package/src/stories/CpRadio.stories.ts +1 -2
- package/src/stories/CpRadioGroup.stories.ts +1 -2
- package/src/stories/CpSelect.stories.ts +1 -2
- package/src/stories/CpSelectMenu.stories.ts +1 -2
- package/src/stories/CpSwitch.stories.ts +1 -2
- package/src/stories/CpTable.stories.ts +2 -3
- package/src/stories/CpTabs.stories.ts +1 -2
- package/src/stories/CpText.stories.ts +2 -1
- package/src/stories/CpTextarea.stories.ts +1 -2
- package/src/stories/CpToast.stories.ts +2 -3
- package/src/stories/CpTransitionCounter.stories.ts +1 -2
- package/src/stories/CpTransitionExpand.stories.ts +1 -2
- package/src/stories/CpTransitionListItems.stories.ts +1 -2
- package/src/stories/CpTransitionSize.stories.ts +1 -2
- package/src/stories/CpTransitionSlide.stories.ts +1 -2
- package/src/stories/CpTransitionTabContent.stories.ts +1 -2
- package/src/stories/CpTrip.stories.ts +323 -0
- package/src/stories/Dimensions.stories.ts +1 -0
- package/src/stories/Shadows.stories.ts +1 -0
- package/src/stories/Typography.stories.ts +1 -0
- package/src/vendors/ff-polyfill.ts +1 -1
- package/vitest.workspace.js +1 -1
- package/src/components/Pimp.vue +0 -10
|
@@ -41,13 +41,13 @@
|
|
|
41
41
|
</template>
|
|
42
42
|
|
|
43
43
|
<script setup lang="ts">
|
|
44
|
+
import type { ComponentPublicInstance } from 'vue'
|
|
44
45
|
import { computed, nextTick, ref, useAttrs, useId, useTemplateRef } from 'vue'
|
|
45
46
|
|
|
46
|
-
import type {
|
|
47
|
+
import type { Sizes } from '@/constants'
|
|
47
48
|
|
|
48
49
|
import BaseInputLabel from '@/components/BaseInputLabel.vue'
|
|
49
50
|
|
|
50
|
-
import type { Sizes } from '@/constants'
|
|
51
51
|
import { capitalizeFirstLetter } from '@/helpers'
|
|
52
52
|
|
|
53
53
|
interface Props {
|
|
@@ -179,21 +179,21 @@ const handleOnValidate = (phoneObject: PhoneObject) => emit('validate', phoneObj
|
|
|
179
179
|
}
|
|
180
180
|
|
|
181
181
|
&__container {
|
|
182
|
-
z-index: 9;
|
|
183
182
|
position: relative;
|
|
183
|
+
z-index: 9;
|
|
184
184
|
display: flex;
|
|
185
185
|
}
|
|
186
186
|
|
|
187
187
|
&__wrapper {
|
|
188
188
|
--box-shadow: var(--cp-shadows-3xs-inset);
|
|
189
189
|
|
|
190
|
+
width: 100%;
|
|
190
191
|
border: 0;
|
|
192
|
+
border-radius: var(--cp-radius-md-lg);
|
|
193
|
+
appearance: none;
|
|
191
194
|
box-shadow:
|
|
192
195
|
var(--box-shadow),
|
|
193
196
|
0 0 0 var(--cp-dimensions-0_25) var(--cp-border-soft);
|
|
194
|
-
appearance: none;
|
|
195
|
-
border-radius: var(--cp-radius-md-lg);
|
|
196
|
-
width: 100%;
|
|
197
197
|
color: inherit;
|
|
198
198
|
|
|
199
199
|
&:not(.cpTelInput__wrapper--isDisabled):focus-within {
|
|
@@ -237,19 +237,19 @@ const handleOnValidate = (phoneObject: PhoneObject) => emit('validate', phoneObj
|
|
|
237
237
|
|
|
238
238
|
&__input {
|
|
239
239
|
padding: var(--cp-spacing-md) var(--cp-spacing-xl);
|
|
240
|
+
border-bottom-right-radius: var(--cp-radius-md-lg);
|
|
241
|
+
border-top-right-radius: var(--cp-radius-md-lg);
|
|
240
242
|
color: inherit;
|
|
241
|
-
line-height: var(--cp-line-height-md);
|
|
242
243
|
font-size: var(--cp-text-size-sm);
|
|
243
|
-
|
|
244
|
-
border-bottom-right-radius: var(--cp-radius-md-lg);
|
|
244
|
+
line-height: var(--cp-line-height-md);
|
|
245
245
|
|
|
246
246
|
&:is(:hover, :focus) {
|
|
247
247
|
z-index: 1;
|
|
248
248
|
}
|
|
249
249
|
|
|
250
250
|
&:not(.cpTelInput__input--isInvalid, .cpTelInput__input--isDisabled):focus {
|
|
251
|
-
outline: var(--cp-dimensions-0_5) solid var(--cp-border-accent-solid);
|
|
252
251
|
background-color: var(--cp-background-primary);
|
|
252
|
+
outline: var(--cp-dimensions-0_5) solid var(--cp-border-accent-solid);
|
|
253
253
|
}
|
|
254
254
|
|
|
255
255
|
&::placeholder {
|
|
@@ -257,8 +257,8 @@ const handleOnValidate = (phoneObject: PhoneObject) => emit('validate', phoneObj
|
|
|
257
257
|
}
|
|
258
258
|
|
|
259
259
|
&--isDisabled {
|
|
260
|
-
pointer-events: none;
|
|
261
260
|
background-color: var(--cp-background-disabled);
|
|
261
|
+
pointer-events: none;
|
|
262
262
|
}
|
|
263
263
|
}
|
|
264
264
|
|
|
@@ -268,8 +268,8 @@ const handleOnValidate = (phoneObject: PhoneObject) => emit('validate', phoneObj
|
|
|
268
268
|
}
|
|
269
269
|
|
|
270
270
|
.cpTelInput__input:focus {
|
|
271
|
-
outline: var(--cp-dimensions-0_5) solid var(--cp-border-error-solid);
|
|
272
271
|
box-shadow: 0 0 0 var(--cp-dimensions-0_25) solid var(--cp-border-error-solid);
|
|
272
|
+
outline: var(--cp-dimensions-0_5) solid var(--cp-border-error-solid);
|
|
273
273
|
}
|
|
274
274
|
}
|
|
275
275
|
|
|
@@ -280,20 +280,20 @@ const handleOnValidate = (phoneObject: PhoneObject) => emit('validate', phoneObj
|
|
|
280
280
|
}
|
|
281
281
|
|
|
282
282
|
.vti__dropdown.open .cpTelInput__arrow {
|
|
283
|
-
transform: rotate(180deg);
|
|
284
283
|
color: var(--cp-foreground-primary);
|
|
284
|
+
transform: rotate(180deg);
|
|
285
285
|
}
|
|
286
286
|
|
|
287
287
|
.vti__dropdown {
|
|
288
|
-
z-index: 1;
|
|
289
288
|
position: unset;
|
|
289
|
+
z-index: 1;
|
|
290
290
|
border-right: var(--cp-dimensions-0_25) solid var(--cp-border-strong);
|
|
291
291
|
|
|
292
292
|
&:focus,
|
|
293
293
|
&:focus-within {
|
|
294
294
|
z-index: 2;
|
|
295
|
-
outline: var(--cp-dimensions-0_5) solid var(--cp-border-accent-solid);
|
|
296
295
|
border-right: var(--cp-dimensions-0_25) solid transparent;
|
|
296
|
+
outline: var(--cp-dimensions-0_5) solid var(--cp-border-accent-solid);
|
|
297
297
|
}
|
|
298
298
|
}
|
|
299
299
|
|
|
@@ -323,8 +323,8 @@ const handleOnValidate = (phoneObject: PhoneObject) => emit('validate', phoneObj
|
|
|
323
323
|
}
|
|
324
324
|
|
|
325
325
|
.vti__flag {
|
|
326
|
-
max-width: var(--cp-dimensions-5);
|
|
327
326
|
min-width: var(--cp-dimensions-5);
|
|
327
|
+
max-width: var(--cp-dimensions-5);
|
|
328
328
|
border-radius: var(--cp-radius-xs);
|
|
329
329
|
}
|
|
330
330
|
|
|
@@ -342,26 +342,26 @@ const handleOnValidate = (phoneObject: PhoneObject) => emit('validate', phoneObj
|
|
|
342
342
|
}
|
|
343
343
|
|
|
344
344
|
.vti__search_box {
|
|
345
|
+
width: 100%;
|
|
346
|
+
padding: var(--cp-spacing-sm) var(--cp-spacing-sm) var(--cp-spacing-sm) var(--cp-spacing-md);
|
|
347
|
+
border: none;
|
|
348
|
+
border-radius: var(--cp-radius-sm-md);
|
|
349
|
+
appearance: none;
|
|
345
350
|
box-shadow:
|
|
346
351
|
var(--cp-shadows-3xs),
|
|
347
352
|
0 0 0 var(--cp-dimensions-0_25) var(--cp-border-soft);
|
|
348
|
-
appearance: none;
|
|
349
|
-
border-radius: var(--cp-radius-sm-md);
|
|
350
|
-
width: 100%;
|
|
351
353
|
color: inherit;
|
|
352
|
-
padding: var(--cp-spacing-sm) var(--cp-spacing-sm) var(--cp-spacing-sm) var(--cp-spacing-md);
|
|
353
|
-
line-height: var(--cp-line-height-md);
|
|
354
354
|
font-size: var(--cp-text-size-sm);
|
|
355
|
+
line-height: var(--cp-line-height-md);
|
|
355
356
|
text-indent: calc(var(--cp-dimensions-1) * 7);
|
|
356
|
-
border: none;
|
|
357
357
|
|
|
358
358
|
&:hover {
|
|
359
359
|
box-shadow: 0 0 0 var(--cp-dimensions-0_25) var(--cp-border-soft-hover);
|
|
360
360
|
}
|
|
361
361
|
|
|
362
362
|
&:focus {
|
|
363
|
-
outline: var(--cp-dimensions-0_5) solid var(--cp-border-accent-solid);
|
|
364
363
|
background-color: var(--cp-background-primary);
|
|
364
|
+
outline: var(--cp-dimensions-0_5) solid var(--cp-border-accent-solid);
|
|
365
365
|
}
|
|
366
366
|
|
|
367
367
|
&::placeholder {
|
|
@@ -370,22 +370,21 @@ const handleOnValidate = (phoneObject: PhoneObject) => emit('validate', phoneObj
|
|
|
370
370
|
}
|
|
371
371
|
|
|
372
372
|
&__searchIcon {
|
|
373
|
-
width: var(--cp-dimensions-4);
|
|
374
|
-
height: var(--cp-dimensions-4);
|
|
375
|
-
|
|
376
373
|
position: absolute;
|
|
377
374
|
top: 50%;
|
|
378
|
-
transform: translateY(-50%);
|
|
379
375
|
left: var(--cp-dimensions-3);
|
|
376
|
+
width: var(--cp-dimensions-4);
|
|
377
|
+
height: var(--cp-dimensions-4);
|
|
378
|
+
transform: translateY(-50%);
|
|
380
379
|
}
|
|
381
380
|
|
|
382
381
|
.vti__dropdown-list {
|
|
383
|
-
clip-path: inset(0 round var(--cp-radius-md-lg));
|
|
384
|
-
max-height: calc(var(--cp-dimensions-1) * 32.5);
|
|
385
382
|
width: calc(100% + var(--cp-dimensions-0_5));
|
|
383
|
+
max-height: calc(var(--cp-dimensions-1) * 32.5);
|
|
386
384
|
padding: var(--cp-spacing-sm);
|
|
387
|
-
border-radius: var(--cp-radius-md-lg);
|
|
388
385
|
border: var(--cp-dimensions-0_25) solid var(--cp-border-soft);
|
|
386
|
+
border-radius: var(--cp-radius-md-lg);
|
|
387
|
+
clip-path: inset(0 round var(--cp-radius-md-lg));
|
|
389
388
|
|
|
390
389
|
&:has(.vti__search_box) {
|
|
391
390
|
max-height: calc(var(--cp-dimensions-1) * 42.5);
|
|
@@ -401,9 +400,9 @@ const handleOnValidate = (phoneObject: PhoneObject) => emit('validate', phoneObj
|
|
|
401
400
|
}
|
|
402
401
|
|
|
403
402
|
.vti__dropdown-item {
|
|
404
|
-
padding: var(--cp-spacing-lg) var(--cp-spacing-xl) var(--cp-spacing-lg) var(--cp-spacing-lg);
|
|
405
403
|
display: flex;
|
|
406
404
|
align-items: flex-start;
|
|
405
|
+
padding: var(--cp-spacing-lg) var(--cp-spacing-xl) var(--cp-spacing-lg) var(--cp-spacing-lg);
|
|
407
406
|
border-radius: var(--cp-radius-sm-md);
|
|
408
407
|
font-size: var(--cp-text-size-sm);
|
|
409
408
|
line-height: var(--cp-line-height-md);
|
|
@@ -430,8 +429,8 @@ const handleOnValidate = (phoneObject: PhoneObject) => emit('validate', phoneObj
|
|
|
430
429
|
|
|
431
430
|
&--lg {
|
|
432
431
|
.cpTelInput__input {
|
|
433
|
-
font-size: var(--cp-text-size-md);
|
|
434
432
|
padding: var(--cp-spacing-lg) var(--cp-spacing-xl);
|
|
433
|
+
font-size: var(--cp-text-size-md);
|
|
435
434
|
}
|
|
436
435
|
|
|
437
436
|
.vti__dropdown {
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
</template>
|
|
29
29
|
|
|
30
30
|
<script setup lang="ts">
|
|
31
|
-
import {
|
|
31
|
+
import { computed, ref, useId } from 'vue'
|
|
32
32
|
|
|
33
33
|
import BaseInputLabel from '@/components/BaseInputLabel.vue'
|
|
34
34
|
import CpTransitionExpand from '@/components/CpTransitionExpand.vue'
|
|
@@ -89,19 +89,19 @@ const handleChange = (newValue: string) => emit('update:modelValue', newValue)
|
|
|
89
89
|
position: relative;
|
|
90
90
|
|
|
91
91
|
&__input {
|
|
92
|
-
|
|
92
|
+
width: 100%;
|
|
93
|
+
max-width: 100%;
|
|
94
|
+
height: 100%;
|
|
95
|
+
padding: var(--cp-spacing-xl);
|
|
93
96
|
border: none;
|
|
97
|
+
border-radius: var(--cp-radius-md-lg);
|
|
98
|
+
appearance: none;
|
|
94
99
|
box-shadow:
|
|
95
100
|
var(--cp-shadows-3xs),
|
|
96
101
|
0 0 0 var(--cp-dimensions-0_25) var(--cp-border-soft);
|
|
97
|
-
border-radius: var(--cp-radius-md-lg);
|
|
98
|
-
outline: none;
|
|
99
|
-
padding: var(--cp-spacing-xl);
|
|
100
|
-
width: 100%;
|
|
101
|
-
max-width: 100%;
|
|
102
|
-
height: 100%;
|
|
103
|
-
font-size: var(--cp-text-size-md);
|
|
104
102
|
color: var(--cp-text-primary);
|
|
103
|
+
font-size: var(--cp-text-size-md);
|
|
104
|
+
outline: none;
|
|
105
105
|
|
|
106
106
|
&:hover {
|
|
107
107
|
box-shadow:
|
|
@@ -110,15 +110,15 @@ const handleChange = (newValue: string) => emit('update:modelValue', newValue)
|
|
|
110
110
|
}
|
|
111
111
|
|
|
112
112
|
&:focus {
|
|
113
|
-
outline: var(--cp-dimensions-0_5) solid var(--cp-focus);
|
|
114
113
|
background-color: var(--cp-background-primary);
|
|
114
|
+
outline: var(--cp-dimensions-0_5) solid var(--cp-focus);
|
|
115
115
|
}
|
|
116
116
|
|
|
117
117
|
&:disabled {
|
|
118
|
-
cursor: not-allowed;
|
|
119
118
|
background: var(--cp-background-disabled);
|
|
120
|
-
color: var(--cp-text-disabled);
|
|
121
119
|
box-shadow: 0 0 0 var(--cp-dimensions-0_25) var(--cp-border-disabled);
|
|
120
|
+
color: var(--cp-text-disabled);
|
|
121
|
+
cursor: not-allowed;
|
|
122
122
|
}
|
|
123
123
|
|
|
124
124
|
&::placeholder {
|
|
@@ -144,9 +144,9 @@ const handleChange = (newValue: string) => emit('update:modelValue', newValue)
|
|
|
144
144
|
}
|
|
145
145
|
|
|
146
146
|
&__error {
|
|
147
|
+
color: var(--cp-text-error-primary);
|
|
147
148
|
font-size: var(--cp-text-size-sm);
|
|
148
149
|
line-height: var(--cp-line-height-md);
|
|
149
|
-
color: var(--cp-text-error-primary);
|
|
150
150
|
}
|
|
151
151
|
}
|
|
152
152
|
</style>
|
|
@@ -68,7 +68,6 @@ import { useWebHaptics } from 'web-haptics/vue'
|
|
|
68
68
|
|
|
69
69
|
import { CpToastTypes } from '@/constants/CpToastTypes'
|
|
70
70
|
import { Haptics } from '@/constants/Hapitcs'
|
|
71
|
-
|
|
72
71
|
import { capitalizeFirstLetter } from '@/helpers'
|
|
73
72
|
|
|
74
73
|
interface Message {
|
|
@@ -177,9 +176,9 @@ const handleToastAdded = (message: Message) => {
|
|
|
177
176
|
|
|
178
177
|
.p-toast-message-enter-from,
|
|
179
178
|
.p-toast-message-leave-to {
|
|
179
|
+
z-index: -1;
|
|
180
180
|
opacity: 0;
|
|
181
181
|
transform: translate3d(0, calc(var(--cp-dimensions-1) * -7.5), 0) scale3d(0.75, 0.75, 1);
|
|
182
|
-
z-index: -1;
|
|
183
182
|
}
|
|
184
183
|
|
|
185
184
|
.cpToasts {
|
|
@@ -188,8 +187,8 @@ const handleToastAdded = (message: Message) => {
|
|
|
188
187
|
|
|
189
188
|
.cpToasts .p-toast-message-leave-active:not(:only-child) {
|
|
190
189
|
position: absolute;
|
|
191
|
-
left: 0;
|
|
192
190
|
right: 0;
|
|
191
|
+
left: 0;
|
|
193
192
|
}
|
|
194
193
|
|
|
195
194
|
.cpToasts[data-p$='center'] {
|
|
@@ -206,24 +205,24 @@ const handleToastAdded = (message: Message) => {
|
|
|
206
205
|
.cpToasts > div {
|
|
207
206
|
display: flex;
|
|
208
207
|
flex-direction: column;
|
|
209
|
-
pointer-events: auto;
|
|
210
208
|
gap: var(--cp-spacing-md);
|
|
209
|
+
pointer-events: auto;
|
|
211
210
|
}
|
|
212
211
|
|
|
213
212
|
.cpToast {
|
|
214
213
|
--toaster-shadow: #{var(--cp-drop-shadow-md-offset-x)} #{var(--cp-drop-shadow-md-offset-y)}
|
|
215
214
|
#{var(--cp-drop-shadow-md-blur)} #{var(--cp-drop-shadow-md-spread)} #{var(--cp-drop-shadow-md-color)};
|
|
216
215
|
|
|
216
|
+
position: relative;
|
|
217
217
|
display: inline-flex;
|
|
218
218
|
overflow: hidden;
|
|
219
|
-
position: relative;
|
|
220
|
-
flex-direction: column;
|
|
221
219
|
max-width: calc(var(--cp-dimensions-1) * 100);
|
|
220
|
+
flex-direction: column;
|
|
222
221
|
padding: var(--cp-spacing-lg);
|
|
223
222
|
border-radius: var(--cp-radius-md);
|
|
223
|
+
background-color: var(--cp-background-primary);
|
|
224
224
|
box-shadow: var(--toaster-shadow);
|
|
225
225
|
gap: var(--cp-spacing-md);
|
|
226
|
-
background-color: var(--cp-background-primary);
|
|
227
226
|
|
|
228
227
|
&__inner {
|
|
229
228
|
display: flex;
|
|
@@ -233,11 +232,11 @@ const handleToastAdded = (message: Message) => {
|
|
|
233
232
|
|
|
234
233
|
&__content {
|
|
235
234
|
display: flex;
|
|
235
|
+
flex: 1;
|
|
236
236
|
flex-direction: column;
|
|
237
237
|
align-items: flex-start;
|
|
238
|
-
flex: 1;
|
|
239
|
-
text-align: left;
|
|
240
238
|
gap: var(--cp-spacing-sm);
|
|
239
|
+
text-align: left;
|
|
241
240
|
}
|
|
242
241
|
|
|
243
242
|
&__icon {
|
|
@@ -255,30 +254,30 @@ const handleToastAdded = (message: Message) => {
|
|
|
255
254
|
}
|
|
256
255
|
|
|
257
256
|
&__summary {
|
|
258
|
-
font-weight: 600;
|
|
259
257
|
color: var(--cp-text-accent-primary);
|
|
258
|
+
font-weight: 600;
|
|
260
259
|
|
|
261
|
-
|
|
260
|
+
&::first-letter {
|
|
262
261
|
text-transform: capitalize;
|
|
263
262
|
}
|
|
264
263
|
}
|
|
265
264
|
|
|
266
265
|
&__detail {
|
|
267
|
-
font-weight: 500;
|
|
268
266
|
color: var(--cp-text-accent-secondary);
|
|
267
|
+
font-weight: 500;
|
|
269
268
|
}
|
|
270
269
|
|
|
271
270
|
&__actions {
|
|
272
|
-
margin-top: var(--cp-spacing-sm);
|
|
273
271
|
display: flex;
|
|
274
272
|
justify-content: flex-end;
|
|
273
|
+
margin-top: var(--cp-spacing-sm);
|
|
275
274
|
gap: var(--cp-spacing-md);
|
|
276
275
|
}
|
|
277
276
|
|
|
278
277
|
&__close {
|
|
279
278
|
display: flex;
|
|
280
|
-
margin-top: var(--cp-spacing-xs);
|
|
281
279
|
border-radius: var(--cp-radius-full);
|
|
280
|
+
margin-top: var(--cp-spacing-xs);
|
|
282
281
|
|
|
283
282
|
&:focus-visible {
|
|
284
283
|
outline: var(--cp-dimensions-0_5) solid var(--cp-border-accent-solid);
|
|
@@ -289,25 +288,23 @@ const handleToastAdded = (message: Message) => {
|
|
|
289
288
|
from {
|
|
290
289
|
transform: scale3d(1, 1, 1);
|
|
291
290
|
}
|
|
291
|
+
|
|
292
292
|
to {
|
|
293
293
|
transform: scale3d(0, 1, 1);
|
|
294
294
|
}
|
|
295
295
|
}
|
|
296
296
|
|
|
297
|
-
&:has(.cpToast__timer):hover .cpToast__timer {
|
|
298
|
-
animation-play-state: paused;
|
|
299
|
-
}
|
|
300
|
-
|
|
301
297
|
&__timer {
|
|
302
298
|
position: absolute;
|
|
303
|
-
inset: 0;
|
|
304
299
|
top: auto;
|
|
305
300
|
height: var(--cp-dimensions-1);
|
|
306
|
-
|
|
301
|
+
animation-fill-mode: forwards;
|
|
307
302
|
animation-name: toast-timer;
|
|
308
303
|
animation-timing-function: linear;
|
|
309
|
-
animation-fill-mode: forwards;
|
|
310
304
|
background-color: var(--cp-border-accent-solid);
|
|
305
|
+
// stylelint-disable-next-line declaration-block-no-shorthand-property-overrides
|
|
306
|
+
inset: 0;
|
|
307
|
+
transform-origin: left;
|
|
311
308
|
}
|
|
312
309
|
|
|
313
310
|
&--isInfo {
|
|
@@ -393,21 +390,25 @@ const handleToastAdded = (message: Message) => {
|
|
|
393
390
|
background-color: var(--cp-border-warning-solid);
|
|
394
391
|
}
|
|
395
392
|
}
|
|
393
|
+
|
|
394
|
+
&:has(.cpToast__timer):hover .cpToast__timer {
|
|
395
|
+
animation-play-state: paused;
|
|
396
|
+
}
|
|
396
397
|
}
|
|
397
398
|
|
|
398
399
|
@media (max-width: 551px) {
|
|
399
400
|
.cpToasts {
|
|
400
|
-
max-width: calc(100% - #{calc(var(--cp-spacing-2xl) * 3)});
|
|
401
|
-
width: 100%;
|
|
402
401
|
right: 0 !important;
|
|
403
402
|
left: 0;
|
|
403
|
+
width: 100%;
|
|
404
|
+
max-width: calc(100% - #{calc(var(--cp-spacing-2xl) * 3)});
|
|
404
405
|
margin: 0 auto;
|
|
405
406
|
text-align: center;
|
|
406
407
|
}
|
|
407
408
|
|
|
408
409
|
.cpToast {
|
|
409
|
-
max-width: 100%;
|
|
410
410
|
min-width: 100%;
|
|
411
|
+
max-width: 100%;
|
|
411
412
|
}
|
|
412
413
|
}
|
|
413
414
|
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<v-tooltip
|
|
3
3
|
:aria-id="ariaId"
|
|
4
|
-
class="
|
|
5
|
-
:class="dynamicTooltipClasses"
|
|
6
|
-
:container="false"
|
|
4
|
+
:popper-class="dynamicTooltipClasses"
|
|
7
5
|
:disabled
|
|
8
6
|
:distance
|
|
9
7
|
:placement
|
|
8
|
+
:container="dynamicContainer"
|
|
10
9
|
>
|
|
11
10
|
<slot />
|
|
12
11
|
<template #popper>
|
|
@@ -34,10 +33,10 @@
|
|
|
34
33
|
</template>
|
|
35
34
|
|
|
36
35
|
<script setup lang="ts">
|
|
36
|
+
// biome-ignore lint: required for floating-vue
|
|
37
37
|
import { Tooltip as VTooltip } from 'floating-vue'
|
|
38
|
-
import { useId, useSlots, computed } from 'vue'
|
|
39
|
-
|
|
40
38
|
import type { Slots } from 'vue'
|
|
39
|
+
import { computed, useId, useSlots } from 'vue'
|
|
41
40
|
|
|
42
41
|
import { Colors } from '@/constants'
|
|
43
42
|
import { capitalizeFirstLetter } from '@/helpers'
|
|
@@ -46,6 +45,7 @@ type TooltipColors = Extract<Colors, 'accent' | 'neutral'>
|
|
|
46
45
|
type Placement = 'top' | 'right' | 'bottom' | 'left'
|
|
47
46
|
|
|
48
47
|
interface Props {
|
|
48
|
+
allowOutsideContainer?: boolean
|
|
49
49
|
color?: TooltipColors
|
|
50
50
|
content?: string
|
|
51
51
|
disabled?: boolean
|
|
@@ -60,6 +60,7 @@ const props = withDefaults(defineProps<Props>(), {
|
|
|
60
60
|
color: 'accent',
|
|
61
61
|
placement: undefined,
|
|
62
62
|
subcontent: '',
|
|
63
|
+
allowOutsideContainer: false,
|
|
63
64
|
})
|
|
64
65
|
|
|
65
66
|
const ariaId = useId()
|
|
@@ -67,7 +68,8 @@ const slots: Slots = useSlots()
|
|
|
67
68
|
|
|
68
69
|
const hasSubcontent = computed(() => !!(props.subcontent || slots.subcontent))
|
|
69
70
|
|
|
70
|
-
const dynamicTooltipClasses = computed(() => [`cpTooltip--is${capitalizeFirstLetter(props.color)}`])
|
|
71
|
+
const dynamicTooltipClasses = computed(() => ['cpTooltip', `cpTooltip--is${capitalizeFirstLetter(props.color)}`])
|
|
72
|
+
const dynamicContainer = computed(() => props.allowOutsideContainer ? undefined : false)
|
|
71
73
|
</script>
|
|
72
74
|
|
|
73
75
|
<style lang="scss">
|
|
@@ -76,14 +78,14 @@ const dynamicTooltipClasses = computed(() => [`cpTooltip--is${capitalizeFirstLet
|
|
|
76
78
|
white-space: pre-wrap;
|
|
77
79
|
|
|
78
80
|
.v-popper__inner {
|
|
81
|
+
max-width: fn.px-to-rem(300);
|
|
79
82
|
padding: var(--cp-spacing-md) var(--cp-spacing-lg);
|
|
80
83
|
border-radius: var(--cp-radius-md);
|
|
81
84
|
background-color: var(--cp-tooltip-bg);
|
|
82
85
|
font-size: var(--cp-text-size-xs);
|
|
86
|
+
font-weight: 400;
|
|
83
87
|
line-height: var(--cp-line-height-xs);
|
|
84
|
-
max-width: fn.px-to-rem(300);
|
|
85
88
|
text-align: left;
|
|
86
|
-
font-weight: 400;
|
|
87
89
|
}
|
|
88
90
|
|
|
89
91
|
.cpTooltip__content {
|
|
@@ -97,16 +99,16 @@ const dynamicTooltipClasses = computed(() => [`cpTooltip--is${capitalizeFirstLet
|
|
|
97
99
|
}
|
|
98
100
|
|
|
99
101
|
.cpTooltip__separator {
|
|
102
|
+
width: 100%;
|
|
100
103
|
border: none;
|
|
101
104
|
border-top: 1px solid var(--cp-colors-white);
|
|
102
|
-
opacity: 0.5;
|
|
103
|
-
width: 100%;
|
|
104
105
|
margin: var(--cp-spacing-md) 0;
|
|
106
|
+
opacity: 0.5;
|
|
105
107
|
}
|
|
106
108
|
|
|
107
109
|
.cpTooltip__subcontent {
|
|
108
|
-
font-style: italic;
|
|
109
110
|
color: var(--cp-tooltip-subcontent-text);
|
|
111
|
+
font-style: italic;
|
|
110
112
|
}
|
|
111
113
|
|
|
112
114
|
.v-popper__arrow-outer {
|
|
@@ -120,9 +122,9 @@ const dynamicTooltipClasses = computed(() => [`cpTooltip--is${capitalizeFirstLet
|
|
|
120
122
|
}
|
|
121
123
|
|
|
122
124
|
&.cpTooltip--isNeutral {
|
|
123
|
-
--cp-tooltip-bg: color-mix(in
|
|
125
|
+
--cp-tooltip-bg: color-mix(in sRGB, var(--cp-background-black) 80%, transparent);
|
|
124
126
|
--cp-tooltip-content-text: var(--cp-foreground-white);
|
|
125
|
-
--cp-tooltip-subcontent-text: color-mix(in
|
|
127
|
+
--cp-tooltip-subcontent-text: color-mix(in sRGB, var(--cp-foreground-white) 70%, transparent);
|
|
126
128
|
}
|
|
127
129
|
}
|
|
128
130
|
</style>
|
|
@@ -29,7 +29,7 @@ const enter = (element: Element) => {
|
|
|
29
29
|
// Force repaint to make sure the
|
|
30
30
|
// animation is triggered correctly.
|
|
31
31
|
|
|
32
|
-
//
|
|
32
|
+
// Intentional expression statement to force layout recalculation before animating.
|
|
33
33
|
void getComputedStyle(el).height
|
|
34
34
|
|
|
35
35
|
requestAnimationFrame(() => (el.style.height = height))
|
|
@@ -51,20 +51,20 @@ const leave = (element: Element): void => {
|
|
|
51
51
|
|
|
52
52
|
<style scoped>
|
|
53
53
|
* {
|
|
54
|
-
will-change: height;
|
|
55
|
-
transform: translateZ(0);
|
|
56
54
|
backface-visibility: hidden;
|
|
57
55
|
perspective: 1000px;
|
|
56
|
+
transform: translateZ(0);
|
|
57
|
+
will-change: height;
|
|
58
58
|
}
|
|
59
59
|
</style>
|
|
60
60
|
|
|
61
61
|
<style lang="scss">
|
|
62
62
|
.expand-enter-active,
|
|
63
63
|
.expand-leave-active {
|
|
64
|
-
|
|
64
|
+
overflow: hidden;
|
|
65
65
|
transition-duration: 0.2s;
|
|
66
|
+
transition-property: opacity, height;
|
|
66
67
|
transition-timing-function: ease-out;
|
|
67
|
-
overflow: hidden;
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
.expand-enter-from,
|