ropav 0.0.5 → 0.0.7
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/README.md +20 -51
- package/dist/_plugin-vue_export-helper.js +1 -11
- package/dist/accordion.css +112 -0
- package/dist/accordion.js +360 -0
- package/dist/accordion.js.map +1 -0
- package/dist/badge.css +169 -0
- package/dist/badge.js +103 -0
- package/dist/badge.js.map +1 -0
- package/dist/base.css +21 -0
- package/dist/bem.js +11 -0
- package/dist/bem.js.map +1 -0
- package/dist/button-group.css +50 -0
- package/dist/button-group.js +50 -0
- package/dist/button-group.js.map +1 -0
- package/dist/button.css +72 -42
- package/dist/button.js +43 -32
- package/dist/button.js.map +1 -1
- package/dist/card.js +2 -1
- package/dist/card.js.map +1 -1
- package/dist/checkbox.css +105 -102
- package/dist/checkbox.js +20 -7
- package/dist/checkbox.js.map +1 -1
- package/dist/collapse.css +32 -0
- package/dist/collapse.js +68 -0
- package/dist/collapse.js.map +1 -0
- package/dist/componentColors.js +22 -0
- package/dist/componentColors.js.map +1 -0
- package/dist/components/accordion/accordion-item.d.ts +40 -0
- package/dist/components/accordion/accordion.d.ts +23 -0
- package/dist/components/accordion/index.d.ts +4 -0
- package/dist/components/accordion/index.js +2 -0
- package/dist/components/accordion/types.d.ts +100 -0
- package/dist/components/accordion/useAccordion.d.ts +3 -0
- package/dist/components/badge/badge.d.ts +25 -0
- package/dist/components/badge/index.d.ts +3 -0
- package/dist/components/badge/index.js +2 -0
- package/dist/components/badge/types.d.ts +16 -0
- package/dist/components/badge/useBadgeColor.d.ts +8 -0
- package/dist/components/button/button.d.ts +2 -0
- package/dist/components/button/types.d.ts +2 -1
- package/dist/components/button/useButtonColor.d.ts +13 -0
- package/dist/components/button-group/button-group.d.ts +21 -0
- package/dist/components/button-group/index.d.ts +2 -0
- package/dist/components/button-group/index.js +2 -0
- package/dist/components/button-group/types.d.ts +10 -0
- package/dist/components/checkbox/types.d.ts +2 -1
- package/dist/components/checkbox/useCheckbox.d.ts +4 -0
- package/dist/components/collapse/collapse.d.ts +36 -0
- package/dist/components/collapse/index.d.ts +3 -0
- package/dist/components/collapse/index.js +3 -0
- package/dist/components/collapse/types.d.ts +76 -0
- package/dist/components/collapse/useCollapse.d.ts +2 -0
- package/dist/components/dropdown-menu/dropdown-menu-items.d.ts +16 -0
- package/dist/components/dropdown-menu/dropdown-menu-utils.d.ts +23 -0
- package/dist/components/dropdown-menu/dropdown-menu.d.ts +26 -0
- package/dist/components/dropdown-menu/index.d.ts +3 -0
- package/dist/components/dropdown-menu/index.js +2 -0
- package/dist/components/dropdown-menu/types.d.ts +104 -0
- package/dist/components/dropdown-menu/useDropdownMenu.d.ts +32 -0
- package/dist/components/dropdown-menu/useDropdownMenuDisclosure.d.ts +30 -0
- package/dist/components/dropdown-menu/useDropdownMenuDom.d.ts +28 -0
- package/dist/components/dropdown-menu/useDropdownMenuHoverIntent.d.ts +24 -0
- package/dist/components/dropdown-menu/useDropdownMenuInteractions.d.ts +51 -0
- package/dist/components/dropdown-menu/useDropdownMenuNavigation.d.ts +16 -0
- package/dist/components/dropdown-menu/useDropdownMenuRenderItems.d.ts +25 -0
- package/dist/components/dropdown-menu/useDropdownSubmenus.d.ts +18 -0
- package/dist/components/field/field.d.ts +2 -2
- package/dist/components/field/useField.d.ts +16 -0
- package/dist/components/input/useInput.d.ts +8 -0
- package/dist/components/modal/index.d.ts +2 -0
- package/dist/components/modal/index.js +2 -0
- package/dist/components/modal/modal.d.ts +42 -0
- package/dist/components/modal/types.d.ts +32 -0
- package/dist/components/modal/useModal.d.ts +29 -0
- package/dist/components/overlay/index.d.ts +2 -0
- package/dist/components/overlay/index.js +2 -0
- package/dist/components/overlay/overlay.d.ts +19 -0
- package/dist/components/overlay/types.d.ts +12 -0
- package/dist/components/overlay/useOverlay.d.ts +7 -0
- package/dist/components/popover/index.d.ts +2 -0
- package/dist/components/popover/index.js +2 -0
- package/dist/components/popover/popover.d.ts +43 -0
- package/dist/components/popover/types.d.ts +40 -0
- package/dist/components/popover/usePopover.d.ts +20 -0
- package/dist/components/progress/index.d.ts +3 -0
- package/dist/components/progress/index.js +2 -0
- package/dist/components/progress/progress.d.ts +27 -0
- package/dist/components/progress/types.d.ts +24 -0
- package/dist/components/progress/useProgress.d.ts +28 -0
- package/dist/components/radio/types.d.ts +2 -1
- package/dist/components/radio/useRadio.d.ts +4 -0
- package/dist/components/slider/index.d.ts +3 -0
- package/dist/components/slider/index.js +2 -0
- package/dist/components/slider/slider.d.ts +35 -0
- package/dist/components/slider/types.d.ts +50 -0
- package/dist/components/slider/useSlider.d.ts +50 -0
- package/dist/components/switch/types.d.ts +2 -1
- package/dist/components/switch/useSwitch.d.ts +3 -0
- package/dist/components/tabs/index.d.ts +6 -0
- package/dist/components/tabs/index.js +2 -0
- package/dist/components/tabs/tabs-content.d.ts +24 -0
- package/dist/components/tabs/tabs-list.d.ts +26 -0
- package/dist/components/tabs/tabs-trigger.d.ts +29 -0
- package/dist/components/tabs/tabs.d.ts +31 -0
- package/dist/components/tabs/types.d.ts +160 -0
- package/dist/components/tabs/useTabs.d.ts +5 -0
- package/dist/components/textarea/index.d.ts +1 -1
- package/dist/components/textarea/types.d.ts +5 -0
- package/dist/components/textarea/useTextarea.d.ts +2 -0
- package/dist/components/tooltip/index.d.ts +2 -0
- package/dist/components/tooltip/index.js +2 -0
- package/dist/components/tooltip/tooltip.d.ts +27 -0
- package/dist/components/tooltip/types.d.ts +29 -0
- package/dist/components/tooltip/useTooltip.d.ts +17 -0
- package/dist/dropdown-menu.css +159 -0
- package/dist/dropdown-menu.js +903 -0
- package/dist/dropdown-menu.js.map +1 -0
- package/dist/field.css +8 -8
- package/dist/field.js +68 -50
- package/dist/field.js.map +1 -1
- package/dist/icon-button.css +82 -49
- package/dist/icon-button.js +15 -10
- package/dist/icon-button.js.map +1 -1
- package/dist/index.d.ts +12 -0
- package/dist/index.js +17 -1
- package/dist/input.css +25 -25
- package/dist/input.js +57 -38
- package/dist/input.js.map +1 -1
- package/dist/modal.css +134 -0
- package/dist/modal.js +433 -0
- package/dist/modal.js.map +1 -0
- package/dist/overlay.css +28 -0
- package/dist/overlay.js +84 -0
- package/dist/overlay.js.map +1 -0
- package/dist/popover.css +75 -0
- package/dist/popover.js +367 -0
- package/dist/popover.js.map +1 -0
- package/dist/progress.css +125 -0
- package/dist/progress.js +178 -0
- package/dist/progress.js.map +1 -0
- package/dist/radio.css +83 -83
- package/dist/radio.js +21 -14
- package/dist/radio.js.map +1 -1
- package/dist/select.css +3 -1
- package/dist/select.js +15 -37
- package/dist/select.js.map +1 -1
- package/dist/slider.css +438 -0
- package/dist/slider.js +413 -0
- package/dist/slider.js.map +1 -0
- package/dist/switch.css +77 -77
- package/dist/switch.js +17 -7
- package/dist/switch.js.map +1 -1
- package/dist/tabs.css +279 -0
- package/dist/tabs.js +515 -0
- package/dist/tabs.js.map +1 -0
- package/dist/textarea.css +33 -26
- package/dist/textarea.js +108 -16
- package/dist/textarea.js.map +1 -1
- package/dist/tooltip.css +136 -0
- package/dist/tooltip.js +385 -0
- package/dist/tooltip.js.map +1 -0
- package/dist/useButtonColor.js +33 -0
- package/dist/useButtonColor.js.map +1 -0
- package/dist/useClickOutside.js +26 -0
- package/dist/useClickOutside.js.map +1 -0
- package/dist/useCollapse.js +94 -0
- package/dist/useCollapse.js.map +1 -0
- package/dist/useRequiredInject.js +11 -0
- package/dist/useRequiredInject.js.map +1 -0
- package/dist/x.js +14 -0
- package/dist/x.js.map +1 -0
- package/package.json +52 -4
- package/src/styles/_mixins.scss +17 -0
- package/src/styles/_utilities.scss +13 -0
- package/src/styles/base.scss +1 -0
- package/dist/_plugin-vue_export-helper.js.map +0 -1
- package/dist/loader-circle.js +0 -14
- package/dist/loader-circle.js.map +0 -1
package/dist/textarea.css
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.rp-textarea[data-v-
|
|
1
|
+
.rp-textarea[data-v-6c62dc31] {
|
|
2
2
|
--_rp-textarea-padding-y: var(--rp-spacing-3);
|
|
3
3
|
--_rp-textarea-padding-x: var(--rp-spacing-3);
|
|
4
4
|
--_rp-textarea-font-size: var(--rp-font-size-base);
|
|
@@ -16,101 +16,108 @@
|
|
|
16
16
|
cursor: text;
|
|
17
17
|
transition: border-color var(--rp-transition-fast), box-shadow var(--rp-transition-fast);
|
|
18
18
|
}
|
|
19
|
-
.rp-textarea[data-v-
|
|
19
|
+
.rp-textarea[data-v-6c62dc31]:hover:not(.rp-textarea--disabled):not(.rp-textarea--invalid):not(.rp-textarea--valid) {
|
|
20
20
|
border-color: var(--rp-color-control-border-hover);
|
|
21
21
|
}
|
|
22
|
-
.rp-textarea[data-v-
|
|
22
|
+
.rp-textarea[data-v-6c62dc31]:focus-within:not(.rp-textarea--disabled):not(.rp-textarea--invalid):not(.rp-textarea--valid) {
|
|
23
23
|
border-color: var(--rp-color-control-border-focus);
|
|
24
24
|
box-shadow: 0 0 0 var(--rp-border-width-medium) var(--rp-color-focus-ring);
|
|
25
25
|
}
|
|
26
|
-
.rp-textarea[data-v-
|
|
27
|
-
padding: var(--_rp-textarea-padding-y) var(--_rp-textarea-padding-x);
|
|
26
|
+
.rp-textarea[data-v-6c62dc31] {
|
|
28
27
|
font-size: var(--_rp-textarea-font-size);
|
|
29
28
|
border-radius: var(--_rp-textarea-radius);
|
|
30
29
|
}
|
|
31
|
-
.rp-textarea--size-xs[data-v-
|
|
30
|
+
.rp-textarea--size-xs[data-v-6c62dc31] {
|
|
32
31
|
--_rp-textarea-padding-y: var(--rp-spacing-1);
|
|
33
32
|
--_rp-textarea-padding-x: var(--rp-spacing-1);
|
|
34
33
|
--_rp-textarea-font-size: var(--rp-font-size-xs);
|
|
35
34
|
}
|
|
36
|
-
.rp-textarea--size-sm[data-v-
|
|
35
|
+
.rp-textarea--size-sm[data-v-6c62dc31] {
|
|
37
36
|
--_rp-textarea-padding-y: var(--rp-spacing-2);
|
|
38
37
|
--_rp-textarea-padding-x: var(--rp-spacing-2);
|
|
39
38
|
--_rp-textarea-font-size: var(--rp-font-size-sm);
|
|
40
39
|
}
|
|
41
|
-
.rp-textarea--size-md[data-v-
|
|
40
|
+
.rp-textarea--size-md[data-v-6c62dc31] {
|
|
42
41
|
--_rp-textarea-padding-y: var(--rp-spacing-3);
|
|
43
42
|
--_rp-textarea-padding-x: var(--rp-spacing-3);
|
|
44
43
|
--_rp-textarea-font-size: var(--rp-font-size-base);
|
|
45
44
|
}
|
|
46
|
-
.rp-textarea--size-lg[data-v-
|
|
45
|
+
.rp-textarea--size-lg[data-v-6c62dc31] {
|
|
47
46
|
--_rp-textarea-padding-y: var(--rp-spacing-4);
|
|
48
47
|
--_rp-textarea-padding-x: var(--rp-spacing-4);
|
|
49
48
|
--_rp-textarea-font-size: var(--rp-font-size-lg);
|
|
50
49
|
}
|
|
51
|
-
.rp-textarea--size-xl[data-v-
|
|
50
|
+
.rp-textarea--size-xl[data-v-6c62dc31] {
|
|
52
51
|
--_rp-textarea-padding-y: var(--rp-spacing-5);
|
|
53
52
|
--_rp-textarea-padding-x: var(--rp-spacing-5);
|
|
54
53
|
--_rp-textarea-font-size: var(--rp-font-size-lg);
|
|
55
54
|
}
|
|
56
|
-
.rp-textarea--radius-xs[data-v-
|
|
55
|
+
.rp-textarea--radius-xs[data-v-6c62dc31] {
|
|
57
56
|
--_rp-textarea-radius: var(--rp-radius-xs);
|
|
58
57
|
}
|
|
59
|
-
.rp-textarea--radius-sm[data-v-
|
|
58
|
+
.rp-textarea--radius-sm[data-v-6c62dc31] {
|
|
60
59
|
--_rp-textarea-radius: var(--rp-radius-sm);
|
|
61
60
|
}
|
|
62
|
-
.rp-textarea--radius-md[data-v-
|
|
61
|
+
.rp-textarea--radius-md[data-v-6c62dc31] {
|
|
63
62
|
--_rp-textarea-radius: var(--rp-radius-md);
|
|
64
63
|
}
|
|
65
|
-
.rp-textarea--radius-lg[data-v-
|
|
64
|
+
.rp-textarea--radius-lg[data-v-6c62dc31] {
|
|
66
65
|
--_rp-textarea-radius: var(--rp-radius-lg);
|
|
67
66
|
}
|
|
68
|
-
.rp-textarea--radius-xl[data-v-
|
|
67
|
+
.rp-textarea--radius-xl[data-v-6c62dc31] {
|
|
69
68
|
--_rp-textarea-radius: var(--rp-radius-xl);
|
|
70
69
|
}
|
|
71
|
-
html.dark .rp-textarea[data-v-
|
|
70
|
+
html.dark .rp-textarea[data-v-6c62dc31] {
|
|
72
71
|
--_rp-textarea-valid-border: var(--rp-color-success-fg);
|
|
73
72
|
--_rp-textarea-valid-ring: color-mix(in srgb, var(--rp-color-success-fg) 32%, transparent);
|
|
74
73
|
--_rp-textarea-invalid-border: var(--rp-color-danger-fg);
|
|
75
74
|
--_rp-textarea-invalid-ring: color-mix(in srgb, var(--rp-color-danger-fg) 32%, transparent);
|
|
76
75
|
}
|
|
77
|
-
.rp-textarea--disabled[data-v-
|
|
76
|
+
.rp-textarea--disabled[data-v-6c62dc31] {
|
|
78
77
|
opacity: var(--rp-opacity-disabled);
|
|
79
78
|
cursor: not-allowed;
|
|
80
79
|
}
|
|
81
|
-
.rp-textarea--valid[data-v-
|
|
80
|
+
.rp-textarea--valid[data-v-6c62dc31] {
|
|
82
81
|
border-color: var(--_rp-textarea-valid-border);
|
|
83
82
|
}
|
|
84
|
-
.rp-textarea--valid[data-v-
|
|
83
|
+
.rp-textarea--valid[data-v-6c62dc31]:focus-within:not(.rp-textarea--disabled) {
|
|
85
84
|
border-color: var(--_rp-textarea-valid-border);
|
|
86
85
|
box-shadow: 0 0 0 var(--rp-border-width-medium) var(--_rp-textarea-valid-ring);
|
|
87
86
|
}
|
|
88
|
-
.rp-textarea--invalid[data-v-
|
|
87
|
+
.rp-textarea--invalid[data-v-6c62dc31] {
|
|
89
88
|
border-color: var(--_rp-textarea-invalid-border);
|
|
90
89
|
}
|
|
91
|
-
.rp-textarea--invalid[data-v-
|
|
90
|
+
.rp-textarea--invalid[data-v-6c62dc31]:focus-within:not(.rp-textarea--disabled) {
|
|
92
91
|
border-color: var(--_rp-textarea-invalid-border);
|
|
93
92
|
box-shadow: 0 0 0 var(--rp-border-width-medium) var(--_rp-textarea-invalid-ring);
|
|
94
93
|
}
|
|
95
|
-
.rp-textarea--readonly[data-v-
|
|
94
|
+
.rp-textarea--readonly[data-v-6c62dc31] {
|
|
96
95
|
background-color: var(--rp-color-control-readonly-bg);
|
|
97
96
|
}
|
|
98
|
-
.rp-textarea__native[data-v-
|
|
97
|
+
.rp-textarea--resize-vertical .rp-textarea__native[data-v-6c62dc31] {
|
|
98
|
+
resize: vertical;
|
|
99
|
+
}
|
|
100
|
+
.rp-textarea--resize-both .rp-textarea__native[data-v-6c62dc31] {
|
|
101
|
+
resize: both;
|
|
102
|
+
}
|
|
103
|
+
.rp-textarea__native[data-v-6c62dc31] {
|
|
99
104
|
box-sizing: border-box;
|
|
100
105
|
flex: 1;
|
|
101
106
|
width: 100%;
|
|
102
107
|
min-width: 0;
|
|
103
|
-
|
|
108
|
+
min-height: calc(1lh + var(--_rp-textarea-padding-y) + var(--_rp-textarea-padding-y));
|
|
109
|
+
padding: var(--_rp-textarea-padding-y) var(--_rp-textarea-padding-x);
|
|
104
110
|
border: none;
|
|
105
111
|
outline: none;
|
|
112
|
+
resize: none;
|
|
106
113
|
background: transparent;
|
|
107
114
|
font: inherit;
|
|
108
115
|
color: var(--rp-color-control-fg);
|
|
109
116
|
line-height: var(--rp-line-height-relaxed);
|
|
110
117
|
}
|
|
111
|
-
.rp-textarea__native[data-v-
|
|
118
|
+
.rp-textarea__native[data-v-6c62dc31]::placeholder {
|
|
112
119
|
color: var(--rp-color-control-placeholder);
|
|
113
120
|
}
|
|
114
|
-
.rp-textarea__native[data-v-
|
|
121
|
+
.rp-textarea__native[data-v-6c62dc31]:disabled {
|
|
115
122
|
cursor: not-allowed;
|
|
116
123
|
}
|
package/dist/textarea.js
CHANGED
|
@@ -1,48 +1,131 @@
|
|
|
1
1
|
import './textarea.css';
|
|
2
|
-
import {
|
|
2
|
+
import { t as bem } from "./bem.js";
|
|
3
|
+
import { t as _plugin_vue_export_helper_default } from "./_plugin-vue_export-helper.js";
|
|
3
4
|
import { t as useControlState } from "./useControlState.js";
|
|
4
|
-
import { child, computed, createInvoker, defineVaporComponent, delegateEvents, renderEffect, setAttr, setClass, setProp, setValue, template, unref } from "vue";
|
|
5
|
+
import { child, computed, createInvoker, createTemplateRefSetter, defineVaporComponent, delegateEvents, nextTick, onMounted, ref, renderEffect, setAttr, setClass, setProp, setValue, template, unref, watch } from "vue";
|
|
5
6
|
//#region src/components/textarea/useTextarea.ts
|
|
7
|
+
var MIN_ROWS = 1;
|
|
8
|
+
var INTERACTIVE_SELECTOR = [
|
|
9
|
+
"button",
|
|
10
|
+
"a[href]",
|
|
11
|
+
"input",
|
|
12
|
+
"select",
|
|
13
|
+
`textarea:not(.rp-textarea__native)`,
|
|
14
|
+
"[contenteditable=\"true\"]",
|
|
15
|
+
"[tabindex]:not([tabindex=\"-1\"])"
|
|
16
|
+
].join(",");
|
|
6
17
|
function isInteractiveElement(target) {
|
|
7
|
-
return Boolean(target.closest(
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
18
|
+
return Boolean(target.closest(INTERACTIVE_SELECTOR));
|
|
19
|
+
}
|
|
20
|
+
function normalizeRows(value, fallback) {
|
|
21
|
+
if (value === void 0 || !Number.isFinite(value)) return fallback;
|
|
22
|
+
return Math.max(MIN_ROWS, Math.floor(value));
|
|
23
|
+
}
|
|
24
|
+
function getPixelValue(value) {
|
|
25
|
+
const parsed = Number.parseFloat(value);
|
|
26
|
+
return Number.isFinite(parsed) ? parsed : 0;
|
|
27
|
+
}
|
|
28
|
+
function getLineHeight(styles) {
|
|
29
|
+
const lineHeight = getPixelValue(styles.lineHeight);
|
|
30
|
+
if (lineHeight > 0) return lineHeight;
|
|
31
|
+
const fontSize = getPixelValue(styles.fontSize);
|
|
32
|
+
return fontSize > 0 ? fontSize * 1.2 : 0;
|
|
33
|
+
}
|
|
34
|
+
function getTextareaMetrics(textarea) {
|
|
35
|
+
const styles = getComputedStyle(textarea);
|
|
36
|
+
return {
|
|
37
|
+
lineHeight: getLineHeight(styles),
|
|
38
|
+
paddingHeight: getPixelValue(styles.paddingTop) + getPixelValue(styles.paddingBottom),
|
|
39
|
+
borderHeight: getPixelValue(styles.borderTopWidth) + getPixelValue(styles.borderBottomWidth)
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
function getRowsHeight(metrics, rows) {
|
|
43
|
+
return rows * metrics.lineHeight + metrics.paddingHeight + metrics.borderHeight;
|
|
44
|
+
}
|
|
45
|
+
function getAutosizeMeasurement(textarea, rows) {
|
|
46
|
+
const metrics = getTextareaMetrics(textarea);
|
|
47
|
+
const maxHeight = rows.maxRows === void 0 ? void 0 : getRowsHeight(metrics, rows.maxRows);
|
|
48
|
+
return {
|
|
49
|
+
contentHeight: textarea.scrollHeight + metrics.borderHeight,
|
|
50
|
+
minHeight: getRowsHeight(metrics, rows.minRows),
|
|
51
|
+
maxHeight
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
function resetTextareaHeight(textarea) {
|
|
55
|
+
textarea.style.height = "";
|
|
56
|
+
textarea.style.overflowY = "";
|
|
16
57
|
}
|
|
17
58
|
function useTextarea(props, emitUpdate) {
|
|
59
|
+
const textareaRef = ref(null);
|
|
18
60
|
const control = useControlState(props);
|
|
61
|
+
const autosizeRows = computed(() => {
|
|
62
|
+
const minRows = normalizeRows(props.minRows, normalizeRows(props.rows, MIN_ROWS)) ?? MIN_ROWS;
|
|
63
|
+
const maxRows = normalizeRows(props.maxRows);
|
|
64
|
+
return {
|
|
65
|
+
minRows,
|
|
66
|
+
maxRows: maxRows === void 0 ? void 0 : Math.max(minRows, maxRows)
|
|
67
|
+
};
|
|
68
|
+
});
|
|
69
|
+
const nativeRows = computed(() => props.autosize ? autosizeRows.value.minRows : props.rows);
|
|
19
70
|
const rootClass = computed(() => bem("rp-textarea", {
|
|
20
71
|
[`size-${props.size}`]: Boolean(props.size),
|
|
21
72
|
[`radius-${props.radius}`]: Boolean(props.radius),
|
|
73
|
+
[`resize-${props.resize}`]: props.resize !== void 0 && props.resize !== "none",
|
|
74
|
+
autosize: props.autosize,
|
|
22
75
|
disabled: control.disabled,
|
|
23
76
|
invalid: control.invalid,
|
|
24
77
|
valid: control.valid && !control.invalid,
|
|
25
78
|
readonly: props.readonly
|
|
26
79
|
}));
|
|
80
|
+
const autosizeWatchSource = computed(() => [
|
|
81
|
+
props.modelValue,
|
|
82
|
+
props.autosize,
|
|
83
|
+
props.minRows,
|
|
84
|
+
props.maxRows,
|
|
85
|
+
props.rows,
|
|
86
|
+
props.size
|
|
87
|
+
]);
|
|
88
|
+
function syncTextareaHeight() {
|
|
89
|
+
const textarea = textareaRef.value;
|
|
90
|
+
if (!textarea) return;
|
|
91
|
+
if (!props.autosize) {
|
|
92
|
+
resetTextareaHeight(textarea);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
textarea.style.height = "auto";
|
|
96
|
+
const { contentHeight, minHeight, maxHeight } = getAutosizeMeasurement(textarea, autosizeRows.value);
|
|
97
|
+
const heightLimit = maxHeight ?? Number.POSITIVE_INFINITY;
|
|
98
|
+
const nextHeight = Math.min(Math.max(contentHeight, minHeight), heightLimit);
|
|
99
|
+
textarea.style.height = `${nextHeight}px`;
|
|
100
|
+
textarea.style.overflowY = maxHeight !== void 0 && contentHeight > maxHeight ? "auto" : "hidden";
|
|
101
|
+
}
|
|
102
|
+
function scheduleTextareaHeightSync() {
|
|
103
|
+
nextTick(syncTextareaHeight);
|
|
104
|
+
}
|
|
27
105
|
function onInput(e) {
|
|
28
106
|
emitUpdate(e.target.value);
|
|
107
|
+
syncTextareaHeight();
|
|
29
108
|
}
|
|
30
109
|
function focusTextarea(e) {
|
|
31
110
|
if (control.disabled) return;
|
|
32
111
|
const target = e.target;
|
|
33
112
|
if (target instanceof Element && isInteractiveElement(target)) return;
|
|
34
|
-
|
|
113
|
+
textareaRef.value?.focus();
|
|
35
114
|
}
|
|
115
|
+
onMounted(scheduleTextareaHeightSync);
|
|
116
|
+
watch(autosizeWatchSource, scheduleTextareaHeightSync);
|
|
36
117
|
return {
|
|
118
|
+
textareaRef,
|
|
37
119
|
control,
|
|
38
120
|
rootClass,
|
|
121
|
+
nativeRows,
|
|
39
122
|
onInput,
|
|
40
123
|
focusTextarea
|
|
41
124
|
};
|
|
42
125
|
}
|
|
43
126
|
//#endregion
|
|
44
127
|
//#region src/components/textarea/textarea.vue?vue&type=script&setup=true&vapor=true&lang.ts
|
|
45
|
-
var t0 = template("<div data-v-
|
|
128
|
+
var t0 = template("<div data-v-6c62dc31><textarea data-v-6c62dc31 class=rp-textarea__native>", 1);
|
|
46
129
|
delegateEvents("input", "mousedown");
|
|
47
130
|
//#endregion
|
|
48
131
|
//#region src/components/textarea/textarea.vue
|
|
@@ -55,6 +138,13 @@ var textarea_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
|
|
|
55
138
|
modelValue: {},
|
|
56
139
|
size: {},
|
|
57
140
|
radius: {},
|
|
141
|
+
resize: { default: "none" },
|
|
142
|
+
autosize: {
|
|
143
|
+
type: Boolean,
|
|
144
|
+
default: false
|
|
145
|
+
},
|
|
146
|
+
minRows: { default: void 0 },
|
|
147
|
+
maxRows: { default: void 0 },
|
|
58
148
|
placeholder: { default: "" },
|
|
59
149
|
rows: { default: 3 },
|
|
60
150
|
disabled: {
|
|
@@ -85,12 +175,14 @@ var textarea_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
|
|
|
85
175
|
setup(__props, { emit: __emit }) {
|
|
86
176
|
const props = __props;
|
|
87
177
|
const emit = __emit;
|
|
88
|
-
const { control, rootClass, onInput, focusTextarea } = useTextarea(props, (value) => {
|
|
178
|
+
const { textareaRef, control, rootClass, nativeRows, onInput, focusTextarea } = useTextarea(props, (value) => {
|
|
89
179
|
emit("update:modelValue", value);
|
|
90
180
|
});
|
|
181
|
+
const _setTemplateRef = createTemplateRefSetter();
|
|
91
182
|
const n1 = t0();
|
|
92
183
|
const n0 = child(n1);
|
|
93
184
|
n0.$evtinput = createInvoker((e) => unref(onInput)(e));
|
|
185
|
+
_setTemplateRef(n0, textareaRef, null, "textareaRef");
|
|
94
186
|
n1.$evtmousedown = createInvoker((e) => unref(focusTextarea)(e));
|
|
95
187
|
renderEffect(() => {
|
|
96
188
|
const _control = unref(control);
|
|
@@ -100,7 +192,7 @@ var textarea_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
|
|
|
100
192
|
setProp(n0, "name", __props.name);
|
|
101
193
|
setValue(n0, __props.modelValue);
|
|
102
194
|
setProp(n0, "placeholder", __props.placeholder);
|
|
103
|
-
setProp(n0, "rows",
|
|
195
|
+
setProp(n0, "rows", unref(nativeRows));
|
|
104
196
|
setProp(n0, "disabled", _control.disabled || void 0);
|
|
105
197
|
setProp(n0, "readonly", __props.readonly || void 0);
|
|
106
198
|
setProp(n0, "required", _control_required || void 0);
|
|
@@ -112,7 +204,7 @@ var textarea_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
|
|
|
112
204
|
});
|
|
113
205
|
return n1;
|
|
114
206
|
}
|
|
115
|
-
}), [["__scopeId", "data-v-
|
|
207
|
+
}), [["__scopeId", "data-v-6c62dc31"]]);
|
|
116
208
|
//#endregion
|
|
117
209
|
export { textarea_default as t };
|
|
118
210
|
|
package/dist/textarea.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"textarea.js","names":[],"sources":["../src/components/textarea/useTextarea.ts","../src/components/textarea/textarea.vue","../src/components/textarea/textarea.vue"],"sourcesContent":["import { computed } from 'vue';\nimport { useControlState } from '@/composables/useControlState';\nimport { bem } from '@/utils/bem';\nimport type { TextareaProps } from './types';\n\nfunction isInteractiveElement(target: Element) {\n return Boolean(\n target.closest(\n [\n 'button',\n 'a[href]',\n 'input',\n 'select',\n 'textarea:not(.rp-textarea__native)',\n '[contenteditable=\"true\"]',\n '[tabindex]:not([tabindex=\"-1\"])',\n ].join(','),\n ),\n );\n}\n\nexport function useTextarea(props: Readonly<TextareaProps>, emitUpdate: (value: string) => void) {\n const control = useControlState(props);\n\n const rootClass = computed(() =>\n bem('rp-textarea', {\n [`size-${props.size}`]: Boolean(props.size),\n [`radius-${props.radius}`]: Boolean(props.radius),\n disabled: control.disabled,\n invalid: control.invalid,\n valid: control.valid && !control.invalid,\n readonly: props.readonly,\n }),\n );\n\n function onInput(e: Event) {\n emitUpdate((e.target as HTMLTextAreaElement).value);\n }\n\n function focusTextarea(e: MouseEvent) {\n if (control.disabled) return;\n\n const target = e.target;\n if (target instanceof Element && isInteractiveElement(target)) return;\n\n (e.currentTarget as HTMLElement)\n .querySelector<HTMLTextAreaElement>('.rp-textarea__native')\n ?.focus();\n }\n\n return {\n control,\n rootClass,\n onInput,\n focusTextarea,\n };\n}\n","<template>\n <div :class=\"rootClass\" @mousedown=\"focusTextarea\">\n <textarea\n :id=\"control.id\"\n :name=\"name\"\n class=\"rp-textarea__native\"\n :value=\"modelValue\"\n :placeholder=\"placeholder\"\n :rows=\"rows\"\n :disabled=\"control.disabled || undefined\"\n :readonly=\"readonly || undefined\"\n :required=\"control.required || undefined\"\n :aria-label=\"ariaLabel || undefined\"\n :aria-labelledby=\"control.ariaLabelledby\"\n :aria-describedby=\"control.ariaDescribedby\"\n :aria-invalid=\"control.invalid || undefined\"\n :aria-required=\"control.required || undefined\"\n @input=\"onInput\"\n />\n </div>\n</template>\n\n<script lang=\"ts\" setup vapor>\nimport { useTextarea } from './useTextarea';\nimport type { TextareaProps } from './types';\n\ndefineOptions({ name: 'RpTextarea' });\n\nconst props = withDefaults(defineProps<TextareaProps>(), {\n placeholder: '',\n rows: 3,\n disabled: undefined,\n required: undefined,\n invalid: undefined,\n valid: undefined,\n readonly: false,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string];\n}>();\n\nconst { control, rootClass, onInput, focusTextarea } = useTextarea(props, (value) => {\n emit('update:modelValue', value);\n});\n</script>\n\n<style src=\"./textarea.scss\" lang=\"scss\" scoped></style>\n","<template>\n <div :class=\"rootClass\" @mousedown=\"focusTextarea\">\n <textarea\n :id=\"control.id\"\n :name=\"name\"\n class=\"rp-textarea__native\"\n :value=\"modelValue\"\n :placeholder=\"placeholder\"\n :rows=\"rows\"\n :disabled=\"control.disabled || undefined\"\n :readonly=\"readonly || undefined\"\n :required=\"control.required || undefined\"\n :aria-label=\"ariaLabel || undefined\"\n :aria-labelledby=\"control.ariaLabelledby\"\n :aria-describedby=\"control.ariaDescribedby\"\n :aria-invalid=\"control.invalid || undefined\"\n :aria-required=\"control.required || undefined\"\n @input=\"onInput\"\n />\n </div>\n</template>\n\n<script lang=\"ts\" setup vapor>\nimport { useTextarea } from './useTextarea';\nimport type { TextareaProps } from './types';\n\ndefineOptions({ name: 'RpTextarea' });\n\nconst props = withDefaults(defineProps<TextareaProps>(), {\n placeholder: '',\n rows: 3,\n disabled: undefined,\n required: undefined,\n invalid: undefined,\n valid: undefined,\n readonly: false,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string];\n}>();\n\nconst { control, rootClass, onInput, focusTextarea } = useTextarea(props, (value) => {\n emit('update:modelValue', value);\n});\n</script>\n\n<style src=\"./textarea.scss\" lang=\"scss\" scoped></style>\n"],"mappings":";;;;AAKA,SAAS,qBAAqB,QAAiB;CAC3C,OAAO,QACH,OAAO,QACH;EACI;EACA;EACA;EACA;EACA;EACA;EACA;CACJ,CAAC,CAAC,KAAK,GAAG,CACd,CACJ;AACJ;AAEA,SAAgB,YAAY,OAAgC,YAAqC;CAC7F,MAAM,UAAU,gBAAgB,KAAK;CAErC,MAAM,YAAY,eACd,IAAI,eAAe;GACd,QAAQ,MAAM,SAAS,QAAQ,MAAM,IAAI;GACzC,UAAU,MAAM,WAAW,QAAQ,MAAM,MAAM;EAChD,UAAU,QAAQ;EAClB,SAAS,QAAQ;EACjB,OAAO,QAAQ,SAAS,CAAC,QAAQ;EACjC,UAAU,MAAM;CACpB,CAAC,CACL;CAEA,SAAS,QAAQ,GAAU;EACvB,WAAY,EAAE,OAA+B,KAAK;CACtD;CAEA,SAAS,cAAc,GAAe;EAClC,IAAI,QAAQ,UAAU;EAEtB,MAAM,SAAS,EAAE;EACjB,IAAI,kBAAkB,WAAW,qBAAqB,MAAM,GAAG;EAE/D,EAAG,cACE,cAAmC,sBAAsB,CAAC,EACzD,MAAM;CAChB;CAEA,OAAO;EACH;EACA;EACA;EACA;CACJ;AACJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EC5BA,MAAM,QAAQ;EAUd,MAAM,OAAO;EAIb,MAAM,EAAE,SAAS,WAAW,SAAS,kBAAkB,YAAY,QAAQ,UAAU;GACjF,KAAK,qBAAqB,KAAK;EACnC,CAAC;;;sCA3BmB,MAAA,OAAA,CAAO,CAAA,CAAA,CAAA;0CAhBa,MAAA,aAAA,CAAa,CAAA,CAAA,CAAA;;;;gBAApC,MAAA,SAAA,CAAS;eAEb,MAAI,SAAO,EAAA;eACX,QAAM,QAAA,IAAI;gBAEH,QAAA,UAAU;eACjB,eAAa,QAAA,WAAW;eACxB,QAAM,QAAA,IAAI;eACV,YAAU,SAAO,YAAa,KAAA,CAAS;eACvC,YAAU,QAAA,YAAY,KAAA,CAAS;eAC/B,YAAU,qBAAoB,KAAA,CAAS;eACvC,cAAY,QAAA,aAAa,KAAA,CAAS;eAClC,mBAAiB,SAAO,cAAA;eACxB,oBAAkB,SAAO,eAAA;eACzB,gBAAc,SAAO,WAAY,KAAA,CAAS;eAC1C,iBAAe,qBAAoB,KAAA,CAAS"}
|
|
1
|
+
{"version":3,"file":"textarea.js","names":[],"sources":["../src/components/textarea/useTextarea.ts","../src/components/textarea/textarea.vue","../src/components/textarea/textarea.vue"],"sourcesContent":["import { computed, nextTick, onMounted, ref, watch } from 'vue';\nimport { useControlState } from '@/composables/useControlState';\nimport { bem } from '@/utils/bem';\nimport type { TextareaProps } from './types';\n\nconst MIN_ROWS = 1;\nconst NATIVE_TEXTAREA_SELECTOR = '.rp-textarea__native';\nconst INTERACTIVE_SELECTOR = [\n 'button',\n 'a[href]',\n 'input',\n 'select',\n `textarea:not(${NATIVE_TEXTAREA_SELECTOR})`,\n '[contenteditable=\"true\"]',\n '[tabindex]:not([tabindex=\"-1\"])',\n].join(',');\n\ninterface AutosizeRows {\n minRows: number;\n maxRows: number | undefined;\n}\n\ninterface TextareaMetrics {\n lineHeight: number;\n paddingHeight: number;\n borderHeight: number;\n}\n\nfunction isInteractiveElement(target: Element) {\n return Boolean(target.closest(INTERACTIVE_SELECTOR));\n}\n\nfunction normalizeRows(value: number | undefined, fallback?: number) {\n if (value === undefined || !Number.isFinite(value)) return fallback;\n return Math.max(MIN_ROWS, Math.floor(value));\n}\n\nfunction getPixelValue(value: string) {\n const parsed = Number.parseFloat(value);\n return Number.isFinite(parsed) ? parsed : 0;\n}\n\nfunction getLineHeight(styles: CSSStyleDeclaration) {\n const lineHeight = getPixelValue(styles.lineHeight);\n if (lineHeight > 0) return lineHeight;\n\n const fontSize = getPixelValue(styles.fontSize);\n return fontSize > 0 ? fontSize * 1.2 : 0;\n}\n\nfunction getTextareaMetrics(textarea: HTMLTextAreaElement): TextareaMetrics {\n const styles = getComputedStyle(textarea);\n\n return {\n lineHeight: getLineHeight(styles),\n paddingHeight: getPixelValue(styles.paddingTop) + getPixelValue(styles.paddingBottom),\n borderHeight:\n getPixelValue(styles.borderTopWidth) + getPixelValue(styles.borderBottomWidth),\n };\n}\n\nfunction getRowsHeight(metrics: TextareaMetrics, rows: number) {\n return rows * metrics.lineHeight + metrics.paddingHeight + metrics.borderHeight;\n}\n\nfunction getAutosizeMeasurement(textarea: HTMLTextAreaElement, rows: AutosizeRows) {\n const metrics = getTextareaMetrics(textarea);\n const maxHeight = rows.maxRows === undefined ? undefined : getRowsHeight(metrics, rows.maxRows);\n\n return {\n contentHeight: textarea.scrollHeight + metrics.borderHeight,\n minHeight: getRowsHeight(metrics, rows.minRows),\n maxHeight,\n };\n}\n\nfunction resetTextareaHeight(textarea: HTMLTextAreaElement) {\n textarea.style.height = '';\n textarea.style.overflowY = '';\n}\n\nexport function useTextarea(props: Readonly<TextareaProps>, emitUpdate: (value: string) => void) {\n const textareaRef = ref<HTMLTextAreaElement | null>(null);\n const control = useControlState(props);\n\n const autosizeRows = computed<AutosizeRows>(() => {\n const minRows =\n normalizeRows(props.minRows, normalizeRows(props.rows, MIN_ROWS)) ?? MIN_ROWS;\n const maxRows = normalizeRows(props.maxRows);\n\n return {\n minRows,\n maxRows: maxRows === undefined ? undefined : Math.max(minRows, maxRows),\n };\n });\n\n const nativeRows = computed(() => (props.autosize ? autosizeRows.value.minRows : props.rows));\n\n const rootClass = computed(() =>\n bem('rp-textarea', {\n [`size-${props.size}`]: Boolean(props.size),\n [`radius-${props.radius}`]: Boolean(props.radius),\n [`resize-${props.resize}`]: props.resize !== undefined && props.resize !== 'none',\n autosize: props.autosize,\n disabled: control.disabled,\n invalid: control.invalid,\n valid: control.valid && !control.invalid,\n readonly: props.readonly,\n }),\n );\n\n const autosizeWatchSource = computed(() => [\n props.modelValue,\n props.autosize,\n props.minRows,\n props.maxRows,\n props.rows,\n props.size,\n ]);\n\n function syncTextareaHeight() {\n const textarea = textareaRef.value;\n if (!textarea) return;\n\n if (!props.autosize) {\n resetTextareaHeight(textarea);\n return;\n }\n\n textarea.style.height = 'auto';\n\n const { contentHeight, minHeight, maxHeight } = getAutosizeMeasurement(\n textarea,\n autosizeRows.value,\n );\n const heightLimit = maxHeight ?? Number.POSITIVE_INFINITY;\n const nextHeight = Math.min(Math.max(contentHeight, minHeight), heightLimit);\n\n textarea.style.height = `${nextHeight}px`;\n textarea.style.overflowY =\n maxHeight !== undefined && contentHeight > maxHeight ? 'auto' : 'hidden';\n }\n\n function scheduleTextareaHeightSync() {\n void nextTick(syncTextareaHeight);\n }\n\n function onInput(e: Event) {\n emitUpdate((e.target as HTMLTextAreaElement).value);\n syncTextareaHeight();\n }\n\n function focusTextarea(e: MouseEvent) {\n if (control.disabled) return;\n\n const target = e.target;\n if (target instanceof Element && isInteractiveElement(target)) return;\n\n textareaRef.value?.focus();\n }\n\n onMounted(scheduleTextareaHeightSync);\n\n watch(autosizeWatchSource, scheduleTextareaHeightSync);\n\n return {\n textareaRef,\n control,\n rootClass,\n nativeRows,\n onInput,\n focusTextarea,\n };\n}\n","<template>\n <div :class=\"rootClass\" @mousedown=\"focusTextarea\">\n <textarea\n :id=\"control.id\"\n ref=\"textareaRef\"\n :name=\"name\"\n class=\"rp-textarea__native\"\n :value=\"modelValue\"\n :placeholder=\"placeholder\"\n :rows=\"nativeRows\"\n :disabled=\"control.disabled || undefined\"\n :readonly=\"readonly || undefined\"\n :required=\"control.required || undefined\"\n :aria-label=\"ariaLabel || undefined\"\n :aria-labelledby=\"control.ariaLabelledby\"\n :aria-describedby=\"control.ariaDescribedby\"\n :aria-invalid=\"control.invalid || undefined\"\n :aria-required=\"control.required || undefined\"\n @input=\"onInput\"\n />\n </div>\n</template>\n\n<script lang=\"ts\" setup vapor>\nimport { useTextarea } from './useTextarea';\nimport type { TextareaProps } from './types';\n\ndefineOptions({ name: 'RpTextarea' });\n\nconst props = withDefaults(defineProps<TextareaProps>(), {\n placeholder: '',\n rows: 3,\n resize: 'none',\n autosize: false,\n minRows: undefined,\n maxRows: undefined,\n disabled: undefined,\n required: undefined,\n invalid: undefined,\n valid: undefined,\n readonly: false,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string];\n}>();\n\nconst { textareaRef, control, rootClass, nativeRows, onInput, focusTextarea } = useTextarea(\n props,\n (value) => {\n emit('update:modelValue', value);\n },\n);\n\nvoid textareaRef;\n</script>\n\n<style src=\"./textarea.scss\" lang=\"scss\" scoped></style>\n","<template>\n <div :class=\"rootClass\" @mousedown=\"focusTextarea\">\n <textarea\n :id=\"control.id\"\n ref=\"textareaRef\"\n :name=\"name\"\n class=\"rp-textarea__native\"\n :value=\"modelValue\"\n :placeholder=\"placeholder\"\n :rows=\"nativeRows\"\n :disabled=\"control.disabled || undefined\"\n :readonly=\"readonly || undefined\"\n :required=\"control.required || undefined\"\n :aria-label=\"ariaLabel || undefined\"\n :aria-labelledby=\"control.ariaLabelledby\"\n :aria-describedby=\"control.ariaDescribedby\"\n :aria-invalid=\"control.invalid || undefined\"\n :aria-required=\"control.required || undefined\"\n @input=\"onInput\"\n />\n </div>\n</template>\n\n<script lang=\"ts\" setup vapor>\nimport { useTextarea } from './useTextarea';\nimport type { TextareaProps } from './types';\n\ndefineOptions({ name: 'RpTextarea' });\n\nconst props = withDefaults(defineProps<TextareaProps>(), {\n placeholder: '',\n rows: 3,\n resize: 'none',\n autosize: false,\n minRows: undefined,\n maxRows: undefined,\n disabled: undefined,\n required: undefined,\n invalid: undefined,\n valid: undefined,\n readonly: false,\n});\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string];\n}>();\n\nconst { textareaRef, control, rootClass, nativeRows, onInput, focusTextarea } = useTextarea(\n props,\n (value) => {\n emit('update:modelValue', value);\n },\n);\n\nvoid textareaRef;\n</script>\n\n<style src=\"./textarea.scss\" lang=\"scss\" scoped></style>\n"],"mappings":"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"}
|
package/dist/tooltip.css
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
.rp-tooltip[data-v-13c39164] {
|
|
2
|
+
--_rp-tooltip-main-axis-offset: var(--rp-spacing-2);
|
|
3
|
+
--_rp-tooltip-cross-axis-offset: 0px;
|
|
4
|
+
--_rp-tooltip-arrow-size: 0.5rem;
|
|
5
|
+
--_rp-tooltip-bg: var(--_rp-tooltip-custom-bg, var(--rp-color-surface-inverted));
|
|
6
|
+
--_rp-tooltip-fg: var(--_rp-tooltip-custom-fg, var(--rp-color-text-inverted));
|
|
7
|
+
position: relative;
|
|
8
|
+
display: inline-flex;
|
|
9
|
+
font-family: var(--rp-font-family);
|
|
10
|
+
vertical-align: middle;
|
|
11
|
+
}
|
|
12
|
+
.rp-tooltip__content[data-v-13c39164] {
|
|
13
|
+
position: absolute;
|
|
14
|
+
z-index: 1000;
|
|
15
|
+
box-sizing: border-box;
|
|
16
|
+
width: max-content;
|
|
17
|
+
max-width: min(20rem, 100vw - var(--rp-spacing-6));
|
|
18
|
+
padding: var(--rp-spacing-2) var(--rp-spacing-3);
|
|
19
|
+
color: var(--_rp-tooltip-fg);
|
|
20
|
+
font-size: var(--rp-font-size-sm);
|
|
21
|
+
font-weight: var(--rp-font-weight-medium);
|
|
22
|
+
line-height: var(--rp-line-height-normal);
|
|
23
|
+
text-align: center;
|
|
24
|
+
white-space: normal;
|
|
25
|
+
overflow-wrap: anywhere;
|
|
26
|
+
pointer-events: none;
|
|
27
|
+
background-color: var(--_rp-tooltip-bg);
|
|
28
|
+
border-radius: var(--rp-radius-sm);
|
|
29
|
+
box-shadow: var(--rp-shadow-md);
|
|
30
|
+
}
|
|
31
|
+
.rp-tooltip--arrow .rp-tooltip__content[data-v-13c39164]::before {
|
|
32
|
+
position: absolute;
|
|
33
|
+
width: var(--_rp-tooltip-arrow-size);
|
|
34
|
+
height: var(--_rp-tooltip-arrow-size);
|
|
35
|
+
content: "";
|
|
36
|
+
background-color: inherit;
|
|
37
|
+
rotate: 45deg;
|
|
38
|
+
}
|
|
39
|
+
.rp-tooltip--color-primary[data-v-13c39164] {
|
|
40
|
+
--_rp-tooltip-bg: var(--rp-color-primary);
|
|
41
|
+
--_rp-tooltip-fg: var(--rp-color-on-primary);
|
|
42
|
+
}
|
|
43
|
+
.rp-tooltip--color-secondary[data-v-13c39164] {
|
|
44
|
+
--_rp-tooltip-bg: var(--rp-color-secondary);
|
|
45
|
+
--_rp-tooltip-fg: var(--rp-color-on-secondary);
|
|
46
|
+
}
|
|
47
|
+
.rp-tooltip--color-success[data-v-13c39164] {
|
|
48
|
+
--_rp-tooltip-bg: var(--rp-color-success);
|
|
49
|
+
--_rp-tooltip-fg: var(--rp-color-on-success);
|
|
50
|
+
}
|
|
51
|
+
.rp-tooltip--color-warning[data-v-13c39164] {
|
|
52
|
+
--_rp-tooltip-bg: var(--rp-color-warning);
|
|
53
|
+
--_rp-tooltip-fg: var(--rp-color-on-warning);
|
|
54
|
+
}
|
|
55
|
+
.rp-tooltip--color-danger[data-v-13c39164] {
|
|
56
|
+
--_rp-tooltip-bg: var(--rp-color-danger);
|
|
57
|
+
--_rp-tooltip-fg: var(--rp-color-on-danger);
|
|
58
|
+
}
|
|
59
|
+
.rp-tooltip--color-info[data-v-13c39164] {
|
|
60
|
+
--_rp-tooltip-bg: var(--rp-color-info);
|
|
61
|
+
--_rp-tooltip-fg: var(--rp-color-on-info);
|
|
62
|
+
}
|
|
63
|
+
.rp-tooltip--color-neutral[data-v-13c39164] {
|
|
64
|
+
--_rp-tooltip-bg: var(--rp-color-neutral);
|
|
65
|
+
--_rp-tooltip-fg: var(--rp-color-on-neutral);
|
|
66
|
+
}
|
|
67
|
+
.rp-tooltip--placement-top .rp-tooltip__content[data-v-13c39164] {
|
|
68
|
+
bottom: calc(100% + var(--_rp-tooltip-main-axis-offset));
|
|
69
|
+
left: calc(50% + var(--_rp-tooltip-cross-axis-offset));
|
|
70
|
+
translate: -50% 0;
|
|
71
|
+
}
|
|
72
|
+
.rp-tooltip--arrow.rp-tooltip--placement-top .rp-tooltip__content[data-v-13c39164]::before {
|
|
73
|
+
top: calc(100% - var(--_rp-tooltip-arrow-size) / 2);
|
|
74
|
+
left: 50%;
|
|
75
|
+
translate: -50% 0;
|
|
76
|
+
}
|
|
77
|
+
.rp-tooltip--placement-right .rp-tooltip__content[data-v-13c39164] {
|
|
78
|
+
top: calc(50% + var(--_rp-tooltip-cross-axis-offset));
|
|
79
|
+
left: calc(100% + var(--_rp-tooltip-main-axis-offset));
|
|
80
|
+
translate: 0 -50%;
|
|
81
|
+
}
|
|
82
|
+
.rp-tooltip--arrow.rp-tooltip--placement-right .rp-tooltip__content[data-v-13c39164]::before {
|
|
83
|
+
top: 50%;
|
|
84
|
+
right: calc(100% - var(--_rp-tooltip-arrow-size) / 2);
|
|
85
|
+
translate: 0 -50%;
|
|
86
|
+
}
|
|
87
|
+
.rp-tooltip--placement-bottom .rp-tooltip__content[data-v-13c39164] {
|
|
88
|
+
top: calc(100% + var(--_rp-tooltip-main-axis-offset));
|
|
89
|
+
left: calc(50% + var(--_rp-tooltip-cross-axis-offset));
|
|
90
|
+
translate: -50% 0;
|
|
91
|
+
}
|
|
92
|
+
.rp-tooltip--arrow.rp-tooltip--placement-bottom .rp-tooltip__content[data-v-13c39164]::before {
|
|
93
|
+
bottom: calc(100% - var(--_rp-tooltip-arrow-size) / 2);
|
|
94
|
+
left: 50%;
|
|
95
|
+
translate: -50% 0;
|
|
96
|
+
}
|
|
97
|
+
.rp-tooltip--placement-left .rp-tooltip__content[data-v-13c39164] {
|
|
98
|
+
top: calc(50% + var(--_rp-tooltip-cross-axis-offset));
|
|
99
|
+
right: calc(100% + var(--_rp-tooltip-main-axis-offset));
|
|
100
|
+
translate: 0 -50%;
|
|
101
|
+
}
|
|
102
|
+
.rp-tooltip--arrow.rp-tooltip--placement-left .rp-tooltip__content[data-v-13c39164]::before {
|
|
103
|
+
top: 50%;
|
|
104
|
+
left: calc(100% - var(--_rp-tooltip-arrow-size) / 2);
|
|
105
|
+
translate: 0 -50%;
|
|
106
|
+
}
|
|
107
|
+
.rp-tooltip--target[data-v-13c39164] {
|
|
108
|
+
display: contents;
|
|
109
|
+
}
|
|
110
|
+
.rp-tooltip--target .rp-tooltip__content[data-v-13c39164] {
|
|
111
|
+
position: fixed;
|
|
112
|
+
top: var(--_rp-tooltip-target-y, 0);
|
|
113
|
+
right: auto;
|
|
114
|
+
bottom: auto;
|
|
115
|
+
left: var(--_rp-tooltip-target-x, 0);
|
|
116
|
+
}
|
|
117
|
+
.rp-tooltip--target.rp-tooltip--placement-top .rp-tooltip__content[data-v-13c39164] {
|
|
118
|
+
translate: calc(-50% + var(--_rp-tooltip-cross-axis-offset)) calc(-100% - var(--_rp-tooltip-main-axis-offset));
|
|
119
|
+
}
|
|
120
|
+
.rp-tooltip--target.rp-tooltip--placement-right .rp-tooltip__content[data-v-13c39164] {
|
|
121
|
+
translate: var(--_rp-tooltip-main-axis-offset) calc(-50% + var(--_rp-tooltip-cross-axis-offset));
|
|
122
|
+
}
|
|
123
|
+
.rp-tooltip--target.rp-tooltip--placement-bottom .rp-tooltip__content[data-v-13c39164] {
|
|
124
|
+
translate: calc(-50% + var(--_rp-tooltip-cross-axis-offset)) var(--_rp-tooltip-main-axis-offset);
|
|
125
|
+
}
|
|
126
|
+
.rp-tooltip--target.rp-tooltip--placement-left .rp-tooltip__content[data-v-13c39164] {
|
|
127
|
+
translate: calc(-100% - var(--_rp-tooltip-main-axis-offset)) calc(-50% + var(--_rp-tooltip-cross-axis-offset));
|
|
128
|
+
}
|
|
129
|
+
.rp-tooltip-content-enter-active[data-v-13c39164],
|
|
130
|
+
.rp-tooltip-content-leave-active[data-v-13c39164] {
|
|
131
|
+
transition: opacity var(--rp-transition-fast);
|
|
132
|
+
}
|
|
133
|
+
.rp-tooltip-content-enter-from[data-v-13c39164],
|
|
134
|
+
.rp-tooltip-content-leave-to[data-v-13c39164] {
|
|
135
|
+
opacity: 0;
|
|
136
|
+
}
|