niuma-ui 2.0.2 → 2.0.3
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/CHANGELOG.md +23 -0
- package/README.md +2 -0
- package/README.zh-CN.md +2 -0
- package/dist/components/badge/index.d.ts +1 -0
- package/dist/components/badge/src/RsBadge.css +61 -8
- package/dist/components/badge/src/RsBadge.d.ts +19 -3
- package/dist/components/badge/src/RsBadge.impl.js +46 -3
- package/dist/components/badge/src/RsBadge.js +1 -1
- package/dist/components/badge/src/badge-utils.d.ts +11 -0
- package/dist/components/badge/src/badge-utils.js +32 -0
- package/dist/components/button/src/RsButton.css +87 -71
- package/dist/components/button/src/RsButton.d.ts +7 -3
- package/dist/components/button/src/RsButton.impl.js +43 -31
- package/dist/components/button/src/RsButton.js +1 -1
- package/dist/components/button/src/button-utils.d.ts +17 -0
- package/dist/components/button/src/button-utils.js +14 -1
- package/dist/components/cascader/src/RsCascader.d.ts +1 -1
- package/dist/components/divider/index.d.ts +1 -0
- package/dist/components/divider/src/RsDivider.css +37 -22
- package/dist/components/divider/src/RsDivider.d.ts +4 -2
- package/dist/components/divider/src/RsDivider.impl.js +26 -12
- package/dist/components/divider/src/RsDivider.js +1 -1
- package/dist/components/divider/src/divider-utils.d.ts +4 -0
- package/dist/components/dynamic-tags/src/RsDynamicTags.css +23 -23
- package/dist/components/dynamic-tags/src/RsDynamicTags.d.ts +1 -1
- package/dist/components/dynamic-tags/src/RsDynamicTags.js +1 -1
- package/dist/components/icon/src/RsIcon.css +9 -4
- package/dist/components/icon/src/RsIcon.d.ts +4 -3
- package/dist/components/icon/src/RsIcon.impl.js +9 -32
- package/dist/components/icon/src/RsIcon.js +1 -1
- package/dist/components/icon/src/icon-utils.d.ts +17 -0
- package/dist/components/icon/src/icon-utils.js +39 -0
- package/dist/components/link/index.d.ts +1 -0
- package/dist/components/link/src/RsLink.css +58 -17
- package/dist/components/link/src/RsLink.d.ts +12 -4
- package/dist/components/link/src/RsLink.impl.js +26 -25
- package/dist/components/link/src/RsLink.js +2 -1
- package/dist/components/link/src/link-utils.d.ts +9 -0
- package/dist/components/link/src/link-utils.js +15 -0
- package/dist/components/loading/src/RsLoading.d.ts +2 -2
- package/dist/components/tag/index.d.ts +1 -1
- package/dist/components/tag/src/RsTag.css +42 -38
- package/dist/components/tag/src/RsTag.d.ts +3 -2
- package/dist/components/tag/src/RsTag.impl.js +18 -9
- package/dist/components/tag/src/RsTag.js +1 -1
- package/dist/components/tag/src/tag-utils.d.ts +8 -0
- package/dist/components/terminal/src/RsTerminal.d.ts +1 -1
- package/dist/index.d.ts +3 -0
- package/package.json +9 -8
|
@@ -1,51 +1,66 @@
|
|
|
1
1
|
|
|
2
|
-
.rs-divider[data-v-
|
|
2
|
+
.rs-divider[data-v-489327cb] {
|
|
3
|
+
--rs-divider-color: var(--rs-border);
|
|
4
|
+
--rs-divider-width: 1px;
|
|
5
|
+
--rs-divider-gap: var(--rs-space-md);
|
|
3
6
|
flex-shrink: 0;
|
|
4
7
|
box-sizing: border-box;
|
|
5
8
|
border: 0;
|
|
6
9
|
background: transparent;
|
|
7
10
|
}
|
|
8
|
-
.rs-divider--horizontal[data-v-
|
|
11
|
+
.rs-divider--horizontal[data-v-489327cb] {
|
|
9
12
|
display: flex;
|
|
10
13
|
align-items: center;
|
|
11
14
|
width: 100%;
|
|
12
|
-
margin: var(--rs-
|
|
15
|
+
margin-block: var(--rs-divider-gap);
|
|
16
|
+
margin-inline: 0;
|
|
13
17
|
}
|
|
14
|
-
.rs-divider--horizontal[data-v-
|
|
15
|
-
content: '';
|
|
18
|
+
hr.rs-divider--horizontal[data-v-489327cb] {
|
|
16
19
|
display: block;
|
|
17
|
-
|
|
18
|
-
border-
|
|
20
|
+
height: 0;
|
|
21
|
+
border-block-start: var(--rs-divider-width) solid var(--rs-divider-color);
|
|
19
22
|
}
|
|
20
|
-
.rs-divider--horizontal.rs-divider--dashed[data-v-
|
|
21
|
-
border-
|
|
23
|
+
hr.rs-divider--horizontal.rs-divider--dashed[data-v-489327cb] {
|
|
24
|
+
border-block-start-style: dashed;
|
|
22
25
|
}
|
|
23
|
-
.rs-divider--horizontal.rs-divider--with-label[data-v-
|
|
24
|
-
.rs-divider--horizontal.rs-divider--with-label[data-v-
|
|
26
|
+
.rs-divider--horizontal.rs-divider--with-label[data-v-489327cb]::before,
|
|
27
|
+
.rs-divider--horizontal.rs-divider--with-label[data-v-489327cb]::after {
|
|
25
28
|
content: '';
|
|
26
29
|
flex: 1 1 auto;
|
|
27
|
-
border-
|
|
30
|
+
border-block-start: var(--rs-divider-width) solid var(--rs-divider-color);
|
|
28
31
|
}
|
|
29
|
-
.rs-divider--horizontal.rs-divider--dashed.rs-divider--with-label[data-v-
|
|
30
|
-
.rs-divider--horizontal.rs-divider--dashed.rs-divider--with-label[data-v-
|
|
31
|
-
border-
|
|
32
|
+
.rs-divider--horizontal.rs-divider--dashed.rs-divider--with-label[data-v-489327cb]::before,
|
|
33
|
+
.rs-divider--horizontal.rs-divider--dashed.rs-divider--with-label[data-v-489327cb]::after {
|
|
34
|
+
border-block-start-style: dashed;
|
|
32
35
|
}
|
|
33
|
-
.rs-divider__label[data-v-
|
|
36
|
+
.rs-divider__label[data-v-489327cb] {
|
|
34
37
|
flex-shrink: 0;
|
|
35
|
-
padding: 0
|
|
38
|
+
padding-block: 0;
|
|
39
|
+
padding-inline: var(--rs-divider-gap);
|
|
36
40
|
font-size: var(--rs-font-size-xs);
|
|
37
|
-
color: var(--rs-
|
|
41
|
+
color: var(--rs-text-secondary);
|
|
38
42
|
white-space: nowrap;
|
|
39
43
|
}
|
|
40
|
-
.rs-divider--vertical[data-v-
|
|
44
|
+
.rs-divider--vertical[data-v-489327cb] {
|
|
41
45
|
display: inline-block;
|
|
42
46
|
align-self: stretch;
|
|
43
47
|
width: 0;
|
|
44
48
|
min-height: 1em;
|
|
45
|
-
margin: 0
|
|
46
|
-
|
|
49
|
+
margin-block: 0;
|
|
50
|
+
margin-inline: var(--rs-divider-gap);
|
|
51
|
+
border-inline-start: var(--rs-divider-width) solid var(--rs-divider-color);
|
|
47
52
|
vertical-align: middle;
|
|
48
53
|
}
|
|
49
|
-
.rs-divider--vertical.rs-divider--dashed[data-v-
|
|
54
|
+
.rs-divider--vertical.rs-divider--dashed[data-v-489327cb] {
|
|
50
55
|
border-inline-start-style: dashed;
|
|
51
56
|
}
|
|
57
|
+
@media (forced-colors: active) {
|
|
58
|
+
hr.rs-divider--horizontal[data-v-489327cb],
|
|
59
|
+
.rs-divider--horizontal.rs-divider--with-label[data-v-489327cb]::before,
|
|
60
|
+
.rs-divider--horizontal.rs-divider--with-label[data-v-489327cb]::after {
|
|
61
|
+
border-block-start-color: CanvasText;
|
|
62
|
+
}
|
|
63
|
+
.rs-divider--vertical[data-v-489327cb] {
|
|
64
|
+
border-inline-start-color: CanvasText;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import { type RsDividerOrientation } from './divider-utils';
|
|
2
|
+
export type { RsDividerOrientation };
|
|
1
3
|
type __VLS_Props = {
|
|
2
|
-
orientation?:
|
|
4
|
+
orientation?: RsDividerOrientation;
|
|
3
5
|
dashed?: boolean;
|
|
4
6
|
};
|
|
5
7
|
declare var __VLS_1: {};
|
|
@@ -7,7 +9,7 @@ type __VLS_Slots = {} & {
|
|
|
7
9
|
default?: (props: typeof __VLS_1) => any;
|
|
8
10
|
};
|
|
9
11
|
declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
|
|
10
|
-
orientation:
|
|
12
|
+
orientation: RsDividerOrientation;
|
|
11
13
|
dashed: boolean;
|
|
12
14
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
13
15
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { computed, createElementBlock, createElementVNode, defineComponent, normalizeClass, openBlock, renderSlot, unref, useId, useSlots } from "vue";
|
|
2
2
|
//#region src/components/divider/src/RsDivider.vue?vue&type=script&setup=true&lang.ts
|
|
3
3
|
var _hoisted_1 = ["aria-orientation"];
|
|
4
|
-
var _hoisted_2 =
|
|
5
|
-
key: 0,
|
|
6
|
-
class: "rs-divider__label"
|
|
7
|
-
};
|
|
4
|
+
var _hoisted_2 = ["id"];
|
|
8
5
|
var RsDivider_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
6
|
+
name: "RsDivider",
|
|
9
7
|
__name: "RsDivider",
|
|
10
8
|
props: {
|
|
11
9
|
orientation: { default: "horizontal" },
|
|
@@ -15,15 +13,31 @@ var RsDivider_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ define
|
|
|
15
13
|
}
|
|
16
14
|
},
|
|
17
15
|
setup(__props) {
|
|
16
|
+
const props = __props;
|
|
17
|
+
const slots = useSlots();
|
|
18
|
+
const labelId = useId();
|
|
19
|
+
const hasSlot = computed(() => Boolean(slots.default));
|
|
20
|
+
const showLabel = computed(() => hasSlot.value && props.orientation === "horizontal");
|
|
21
|
+
const rootClass = computed(() => [
|
|
22
|
+
"rs-divider",
|
|
23
|
+
`rs-divider--${props.orientation}`,
|
|
24
|
+
{
|
|
25
|
+
"rs-divider--dashed": props.dashed,
|
|
26
|
+
"rs-divider--with-label": hasSlot.value
|
|
27
|
+
}
|
|
28
|
+
]);
|
|
18
29
|
return (_ctx, _cache) => {
|
|
19
|
-
return openBlock(), createElementBlock("
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
"rs-divider--with-label": _ctx.$slots.default
|
|
23
|
-
}]]),
|
|
24
|
-
role: "separator",
|
|
30
|
+
return !showLabel.value ? (openBlock(), createElementBlock("hr", {
|
|
31
|
+
key: 0,
|
|
32
|
+
class: normalizeClass(rootClass.value),
|
|
25
33
|
"aria-orientation": __props.orientation
|
|
26
|
-
},
|
|
34
|
+
}, null, 10, _hoisted_1)) : (openBlock(), createElementBlock("div", {
|
|
35
|
+
key: 1,
|
|
36
|
+
class: normalizeClass(rootClass.value)
|
|
37
|
+
}, [createElementVNode("span", {
|
|
38
|
+
id: unref(labelId),
|
|
39
|
+
class: "rs-divider__label"
|
|
40
|
+
}, [renderSlot(_ctx.$slots, "default", {}, void 0, true)], 8, _hoisted_2)], 2));
|
|
27
41
|
};
|
|
28
42
|
}
|
|
29
43
|
});
|
|
@@ -3,6 +3,6 @@ import _plugin_vue_export_helper_default from "../../../_virtual/_plugin-vue_exp
|
|
|
3
3
|
import RsDivider_vue_vue_type_script_setup_true_lang_default from "./RsDivider.impl.js";
|
|
4
4
|
|
|
5
5
|
//#region src/components/divider/src/RsDivider.vue
|
|
6
|
-
var RsDivider_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RsDivider_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-
|
|
6
|
+
var RsDivider_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RsDivider_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-489327cb"]]);
|
|
7
7
|
//#endregion
|
|
8
8
|
export { RsDivider_default as default };
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare const RS_DIVIDER_ORIENTATIONS: readonly ["horizontal", "vertical"];
|
|
2
|
+
export type RsDividerOrientation = (typeof RS_DIVIDER_ORIENTATIONS)[number];
|
|
3
|
+
export declare function isRsDividerOrientation(value: unknown): value is RsDividerOrientation;
|
|
4
|
+
export declare function resolveRsDividerOrientation(orientation?: RsDividerOrientation | null): RsDividerOrientation;
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
|
|
2
|
-
.rs-dynamic-tags-field[data-v-
|
|
2
|
+
.rs-dynamic-tags-field[data-v-a441b090] {
|
|
3
3
|
display: flex;
|
|
4
4
|
flex-direction: column;
|
|
5
5
|
width: 100%;
|
|
6
6
|
min-width: 0;
|
|
7
7
|
}
|
|
8
|
-
.rs-dynamic-tags-field__error[data-v-
|
|
8
|
+
.rs-dynamic-tags-field__error[data-v-a441b090] {
|
|
9
9
|
margin: 0.25rem 0 0;
|
|
10
10
|
font-size: var(--rs-font-size-xs);
|
|
11
11
|
line-height: var(--rs-line-height-tight);
|
|
12
12
|
color: var(--rs-danger);
|
|
13
13
|
}
|
|
14
|
-
.rs-dynamic-tags[data-v-
|
|
14
|
+
.rs-dynamic-tags[data-v-a441b090] {
|
|
15
15
|
--rs-dynamic-tags-chip-height: 1.5rem;
|
|
16
16
|
display: flex;
|
|
17
17
|
flex-wrap: wrap;
|
|
@@ -37,43 +37,43 @@
|
|
|
37
37
|
box-shadow var(--rs-transition-fast),
|
|
38
38
|
background-color var(--rs-transition-fast);
|
|
39
39
|
}
|
|
40
|
-
.rs-dynamic-tags[data-v-
|
|
40
|
+
.rs-dynamic-tags[data-v-a441b090]:hover:not(.rs-dynamic-tags--disabled) {
|
|
41
41
|
border-color: var(
|
|
42
42
|
--rs-dynamic-tags-border-hover,
|
|
43
43
|
var(--rs-input-border-hover, var(--rs-border))
|
|
44
44
|
);
|
|
45
45
|
}
|
|
46
|
-
.rs-dynamic-tags--ssm[data-v-
|
|
46
|
+
.rs-dynamic-tags--ssm[data-v-a441b090] {
|
|
47
47
|
--rs-dynamic-tags-chip-height: 1.125rem;
|
|
48
48
|
}
|
|
49
|
-
.rs-dynamic-tags--sm[data-v-
|
|
49
|
+
.rs-dynamic-tags--sm[data-v-a441b090] {
|
|
50
50
|
--rs-dynamic-tags-chip-height: 1.25rem;
|
|
51
51
|
}
|
|
52
|
-
.rs-dynamic-tags--md[data-v-
|
|
52
|
+
.rs-dynamic-tags--md[data-v-a441b090] {
|
|
53
53
|
--rs-dynamic-tags-chip-height: 1.5rem;
|
|
54
54
|
}
|
|
55
|
-
.rs-dynamic-tags--lg[data-v-
|
|
55
|
+
.rs-dynamic-tags--lg[data-v-a441b090] {
|
|
56
56
|
--rs-dynamic-tags-chip-height: 1.75rem;
|
|
57
57
|
}
|
|
58
|
-
.rs-dynamic-tags--editing[data-v-
|
|
59
|
-
.rs-dynamic-tags[data-v-
|
|
58
|
+
.rs-dynamic-tags--editing[data-v-a441b090]:not(.rs-dynamic-tags--disabled),
|
|
59
|
+
.rs-dynamic-tags[data-v-a441b090]:focus-within:not(.rs-dynamic-tags--disabled) {
|
|
60
60
|
border-color: var(--rs-focus-border, var(--rs-primary));
|
|
61
61
|
box-shadow:
|
|
62
62
|
var(--rs-dynamic-tags-shadow, var(--rs-input-shadow, none)),
|
|
63
63
|
0 0 0 var(--rs-focus-ring-width, 2px) var(--rs-focus-ring);
|
|
64
64
|
}
|
|
65
|
-
.rs-dynamic-tags--feedback[data-v-
|
|
66
|
-
.rs-dynamic-tags--invalid[data-v-
|
|
65
|
+
.rs-dynamic-tags--feedback[data-v-a441b090],
|
|
66
|
+
.rs-dynamic-tags--invalid[data-v-a441b090] {
|
|
67
67
|
border-color: var(--rs-danger);
|
|
68
68
|
}
|
|
69
|
-
.rs-dynamic-tags--feedback[data-v-
|
|
70
|
-
animation: rs-dynamic-tags-shake-
|
|
69
|
+
.rs-dynamic-tags--feedback[data-v-a441b090] {
|
|
70
|
+
animation: rs-dynamic-tags-shake-a441b090 0.45s ease;
|
|
71
71
|
}
|
|
72
|
-
.rs-dynamic-tags--disabled[data-v-
|
|
72
|
+
.rs-dynamic-tags--disabled[data-v-a441b090] {
|
|
73
73
|
opacity: 0.55;
|
|
74
74
|
cursor: not-allowed;
|
|
75
75
|
}
|
|
76
|
-
.rs-dynamic-tags__input[data-v-
|
|
76
|
+
.rs-dynamic-tags__input[data-v-a441b090] {
|
|
77
77
|
flex: 1 1 6rem;
|
|
78
78
|
min-width: 4rem;
|
|
79
79
|
width: 0;
|
|
@@ -91,15 +91,15 @@
|
|
|
91
91
|
box-shadow: none;
|
|
92
92
|
appearance: none;
|
|
93
93
|
}
|
|
94
|
-
.rs-dynamic-tags--ssm .rs-dynamic-tags__input[data-v-
|
|
95
|
-
.rs-dynamic-tags--sm .rs-dynamic-tags__input[data-v-
|
|
94
|
+
.rs-dynamic-tags--ssm .rs-dynamic-tags__input[data-v-a441b090],
|
|
95
|
+
.rs-dynamic-tags--sm .rs-dynamic-tags__input[data-v-a441b090] {
|
|
96
96
|
font-size: var(--rs-font-size-xs);
|
|
97
97
|
}
|
|
98
|
-
.rs-dynamic-tags__input[data-v-
|
|
98
|
+
.rs-dynamic-tags__input[data-v-a441b090]::placeholder {
|
|
99
99
|
color: var(--rs-placeholder);
|
|
100
100
|
line-height: var(--rs-dynamic-tags-chip-height);
|
|
101
101
|
}
|
|
102
|
-
.rs-dynamic-tags__trigger[data-v-
|
|
102
|
+
.rs-dynamic-tags__trigger[data-v-a441b090] {
|
|
103
103
|
display: inline-flex;
|
|
104
104
|
flex-shrink: 0;
|
|
105
105
|
align-items: center;
|
|
@@ -120,15 +120,15 @@
|
|
|
120
120
|
border-color var(--rs-transition-fast),
|
|
121
121
|
background-color var(--rs-transition-fast);
|
|
122
122
|
}
|
|
123
|
-
.rs-dynamic-tags__trigger[data-v-
|
|
123
|
+
.rs-dynamic-tags__trigger[data-v-a441b090]:hover {
|
|
124
124
|
color: var(--rs-primary);
|
|
125
125
|
border-color: var(--rs-primary);
|
|
126
126
|
background: color-mix(in srgb, var(--rs-primary) 8%, transparent);
|
|
127
127
|
}
|
|
128
|
-
.rs-dynamic-tags__trigger[data-v-
|
|
128
|
+
.rs-dynamic-tags__trigger[data-v-a441b090]:focus-visible {
|
|
129
129
|
box-shadow: 0 0 0 var(--rs-focus-ring-width, 2px) var(--rs-focus-ring);
|
|
130
130
|
}
|
|
131
|
-
@keyframes rs-dynamic-tags-shake-
|
|
131
|
+
@keyframes rs-dynamic-tags-shake-a441b090 {
|
|
132
132
|
0%,
|
|
133
133
|
100% {
|
|
134
134
|
transform: translateX(0);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { RsComponentSize, RsRadius } from '../../../theme/types';
|
|
2
2
|
import { type RsFormRuleTrigger } from '../../form/src/form-rules';
|
|
3
|
-
import type { RsTagVariant } from '../../tag
|
|
3
|
+
import type { RsTagVariant } from '../../tag';
|
|
4
4
|
export type RsDynamicTagsInputMode = 'trigger' | 'always';
|
|
5
5
|
export type RsDynamicTagsRejectReason = 'duplicate' | 'max';
|
|
6
6
|
type __VLS_Props = {
|
|
@@ -3,6 +3,6 @@ import _plugin_vue_export_helper_default from "../../../_virtual/_plugin-vue_exp
|
|
|
3
3
|
import RsDynamicTags_vue_vue_type_script_setup_true_lang_default from "./RsDynamicTags.impl.js";
|
|
4
4
|
|
|
5
5
|
//#region src/components/dynamic-tags/src/RsDynamicTags.vue
|
|
6
|
-
var RsDynamicTags_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RsDynamicTags_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-
|
|
6
|
+
var RsDynamicTags_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RsDynamicTags_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-a441b090"]]);
|
|
7
7
|
//#endregion
|
|
8
8
|
export { RsDynamicTags_default as default };
|
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
|
|
2
|
-
.rs-icon[data-v-
|
|
2
|
+
.rs-icon[data-v-260b0681] {
|
|
3
3
|
display: inline-block;
|
|
4
4
|
flex-shrink: 0;
|
|
5
5
|
vertical-align: middle;
|
|
6
6
|
}
|
|
7
|
-
.rs-icon--spin[data-v-
|
|
8
|
-
animation: rs-icon-spin-
|
|
7
|
+
.rs-icon--spin[data-v-260b0681] {
|
|
8
|
+
animation: rs-icon-spin-260b0681 0.8s linear infinite;
|
|
9
9
|
}
|
|
10
|
-
@keyframes rs-icon-spin-
|
|
10
|
+
@keyframes rs-icon-spin-260b0681 {
|
|
11
11
|
to {
|
|
12
12
|
transform: rotate(360deg);
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
|
+
@media (prefers-reduced-motion: reduce) {
|
|
16
|
+
.rs-icon--spin[data-v-260b0681] {
|
|
17
|
+
animation: none;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type { RsComponentSize } from '../../../theme/types';
|
|
2
|
+
import { type RsIconFlip } from './icon-utils';
|
|
2
3
|
type __VLS_Props = {
|
|
3
|
-
/** Lucide
|
|
4
|
+
/** Lucide kebab-case 名称(如 `house`、`trash-2`),或内置品牌 mark */
|
|
4
5
|
name: string;
|
|
5
|
-
/** 数字 px、CSS
|
|
6
|
+
/** 数字 px、CSS 长度,或与控件同一套 ssm / sm / md / lg */
|
|
6
7
|
size?: number | string | RsComponentSize;
|
|
7
8
|
/** 无障碍名称;有值时作为语义图标,无值时为装饰性图标 */
|
|
8
9
|
label?: string;
|
|
@@ -10,7 +11,7 @@ type __VLS_Props = {
|
|
|
10
11
|
/** 覆盖颜色,默认继承 currentColor */
|
|
11
12
|
color?: string;
|
|
12
13
|
/** 水平 / 垂直 / 双向翻转 */
|
|
13
|
-
flip?:
|
|
14
|
+
flip?: RsIconFlip;
|
|
14
15
|
/** 旋转角度(度),与 spin 不宜同时使用 */
|
|
15
16
|
rotate?: number;
|
|
16
17
|
/** 旋转动画,适合 loader 等加载态 */
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { resolveLucideIcon } from "../../../icons/lucide.js";
|
|
2
2
|
import { isRsBrandIconName } from "../../../icons/brand.js";
|
|
3
|
+
import { buildRsIconStyle, resolveRsIconPixelSize } from "./icon-utils.js";
|
|
3
4
|
import { computed, createBlock, createCommentVNode, defineComponent, normalizeClass, normalizeStyle, openBlock, resolveDynamicComponent } from "vue";
|
|
4
5
|
//#region src/components/icon/src/RsIcon.vue?vue&type=script&setup=true&lang.ts
|
|
5
6
|
var RsIcon_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
7
|
+
name: "RsIcon",
|
|
6
8
|
__name: "RsIcon",
|
|
7
9
|
props: {
|
|
8
10
|
name: {},
|
|
@@ -15,41 +17,16 @@ var RsIcon_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCom
|
|
|
15
17
|
spin: { type: Boolean }
|
|
16
18
|
},
|
|
17
19
|
setup(__props) {
|
|
18
|
-
const SIZE_PRESET = {
|
|
19
|
-
ssm: 12,
|
|
20
|
-
sm: 14,
|
|
21
|
-
md: 16,
|
|
22
|
-
lg: 20
|
|
23
|
-
};
|
|
24
20
|
const props = __props;
|
|
25
21
|
const iconComponent = computed(() => resolveLucideIcon(props.name));
|
|
26
|
-
const
|
|
27
|
-
const { size } = props;
|
|
28
|
-
return typeof size === "string" && !(size in SIZE_PRESET) && !/^\d+$/.test(size);
|
|
29
|
-
});
|
|
30
|
-
const lucideSize = computed(() => {
|
|
31
|
-
if (usesCustomSize.value) return void 0;
|
|
32
|
-
const { size } = props;
|
|
33
|
-
if (typeof size === "number") return size;
|
|
34
|
-
if (size in SIZE_PRESET) return SIZE_PRESET[size];
|
|
35
|
-
return Number.parseInt(String(size), 10) || SIZE_PRESET.md;
|
|
36
|
-
});
|
|
22
|
+
const lucideSize = computed(() => resolveRsIconPixelSize(props.size));
|
|
37
23
|
const isBrand = computed(() => isRsBrandIconName(props.name));
|
|
38
|
-
const iconStyle = computed(() => {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
else if (props.flip === "both") transforms.push("scale(-1)");
|
|
45
|
-
if (props.rotate) transforms.push(`rotate(${props.rotate}deg)`);
|
|
46
|
-
if (transforms.length) style.transform = transforms.join(" ");
|
|
47
|
-
if (usesCustomSize.value && typeof props.size === "string") {
|
|
48
|
-
style.width = props.size;
|
|
49
|
-
style.height = props.size;
|
|
50
|
-
}
|
|
51
|
-
return Object.keys(style).length ? style : void 0;
|
|
52
|
-
});
|
|
24
|
+
const iconStyle = computed(() => buildRsIconStyle({
|
|
25
|
+
color: props.color,
|
|
26
|
+
flip: props.flip,
|
|
27
|
+
rotate: props.rotate,
|
|
28
|
+
size: props.size
|
|
29
|
+
}));
|
|
53
30
|
const isSemantic = computed(() => Boolean(props.label));
|
|
54
31
|
return (_ctx, _cache) => {
|
|
55
32
|
return iconComponent.value ? (openBlock(), createBlock(resolveDynamicComponent(iconComponent.value), {
|
|
@@ -3,6 +3,6 @@ import _plugin_vue_export_helper_default from "../../../_virtual/_plugin-vue_exp
|
|
|
3
3
|
import RsIcon_vue_vue_type_script_setup_true_lang_default from "./RsIcon.impl.js";
|
|
4
4
|
|
|
5
5
|
//#region src/components/icon/src/RsIcon.vue
|
|
6
|
-
var RsIcon_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RsIcon_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-
|
|
6
|
+
var RsIcon_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RsIcon_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-260b0681"]]);
|
|
7
7
|
//#endregion
|
|
8
8
|
export { RsIcon_default as default };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type RsComponentSize } from '../../../theme/types';
|
|
2
|
+
export type RsIconFlip = 'horizontal' | 'vertical' | 'both';
|
|
3
|
+
/** 数字 px、CSS 长度,或 ssm / sm / md / lg 档位字符串。 */
|
|
4
|
+
export type RsIconSize = number | string;
|
|
5
|
+
/** 与控件档位同一套边长(ssm 12 / sm 14 / md 16 / lg 18)。 */
|
|
6
|
+
export declare function isRsIconSizePreset(size: unknown): size is RsComponentSize;
|
|
7
|
+
/** CSS 长度(如 `1.5rem`)不走 Lucide 的 size 数字。 */
|
|
8
|
+
export declare function rsIconUsesCssSize(size: RsIconSize | undefined): boolean;
|
|
9
|
+
/** 解析成 Lucide / 自定义 mark 的像素边长;CSS 长度返回 undefined。 */
|
|
10
|
+
export declare function resolveRsIconPixelSize(size: RsIconSize | undefined): number | undefined;
|
|
11
|
+
export declare function buildRsIconTransform(flip?: RsIconFlip, rotate?: number): string | undefined;
|
|
12
|
+
export declare function buildRsIconStyle(options: {
|
|
13
|
+
color?: string;
|
|
14
|
+
flip?: RsIconFlip;
|
|
15
|
+
rotate?: number;
|
|
16
|
+
size?: RsIconSize;
|
|
17
|
+
}): Record<string, string> | undefined;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { RS_COMPONENT_SIZE_ICON_PX } from "../../../theme/types.js";
|
|
2
|
+
//#region src/components/icon/src/icon-utils.ts
|
|
3
|
+
/** 与控件档位同一套边长(ssm 12 / sm 14 / md 16 / lg 18)。 */
|
|
4
|
+
function isRsIconSizePreset(size) {
|
|
5
|
+
return typeof size === "string" && size in RS_COMPONENT_SIZE_ICON_PX;
|
|
6
|
+
}
|
|
7
|
+
/** CSS 长度(如 `1.5rem`)不走 Lucide 的 size 数字。 */
|
|
8
|
+
function rsIconUsesCssSize(size) {
|
|
9
|
+
return typeof size === "string" && !isRsIconSizePreset(size) && !/^\d+$/.test(size);
|
|
10
|
+
}
|
|
11
|
+
/** 解析成 Lucide / 自定义 mark 的像素边长;CSS 长度返回 undefined。 */
|
|
12
|
+
function resolveRsIconPixelSize(size) {
|
|
13
|
+
if (size == null) return RS_COMPONENT_SIZE_ICON_PX.md;
|
|
14
|
+
if (rsIconUsesCssSize(size)) return void 0;
|
|
15
|
+
if (typeof size === "number" && Number.isFinite(size)) return size;
|
|
16
|
+
if (isRsIconSizePreset(size)) return RS_COMPONENT_SIZE_ICON_PX[size];
|
|
17
|
+
return Number.parseInt(String(size), 10) || RS_COMPONENT_SIZE_ICON_PX.md;
|
|
18
|
+
}
|
|
19
|
+
function buildRsIconTransform(flip, rotate) {
|
|
20
|
+
const transforms = [];
|
|
21
|
+
if (flip === "horizontal") transforms.push("scaleX(-1)");
|
|
22
|
+
else if (flip === "vertical") transforms.push("scaleY(-1)");
|
|
23
|
+
else if (flip === "both") transforms.push("scale(-1)");
|
|
24
|
+
if (rotate) transforms.push(`rotate(${rotate}deg)`);
|
|
25
|
+
return transforms.length ? transforms.join(" ") : void 0;
|
|
26
|
+
}
|
|
27
|
+
function buildRsIconStyle(options) {
|
|
28
|
+
const style = {};
|
|
29
|
+
if (options.color) style.color = options.color;
|
|
30
|
+
const transform = buildRsIconTransform(options.flip, options.rotate);
|
|
31
|
+
if (transform) style.transform = transform;
|
|
32
|
+
if (rsIconUsesCssSize(options.size) && typeof options.size === "string") {
|
|
33
|
+
style.width = options.size;
|
|
34
|
+
style.height = options.size;
|
|
35
|
+
}
|
|
36
|
+
return Object.keys(style).length ? style : void 0;
|
|
37
|
+
}
|
|
38
|
+
//#endregion
|
|
39
|
+
export { buildRsIconStyle, buildRsIconTransform, isRsIconSizePreset, resolveRsIconPixelSize, rsIconUsesCssSize };
|
|
@@ -1,45 +1,86 @@
|
|
|
1
1
|
|
|
2
|
-
.rs-link {
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
.rs-link[data-v-78d8e4b3] {
|
|
3
|
+
display: inline;
|
|
4
|
+
color: var(--rs-link-tone, var(--rs-primary));
|
|
5
|
+
font-size: inherit;
|
|
5
6
|
font-weight: var(--rs-font-weight-medium);
|
|
6
7
|
line-height: var(--rs-line-height-tight);
|
|
7
8
|
text-underline-offset: 0.18em;
|
|
8
9
|
text-decoration-thickness: 1px;
|
|
10
|
+
cursor: pointer;
|
|
9
11
|
transition:
|
|
10
12
|
color var(--rs-transition-fast),
|
|
11
13
|
text-decoration-color var(--rs-transition-fast);
|
|
12
14
|
}
|
|
13
|
-
.rs-link
|
|
14
|
-
|
|
15
|
+
.rs-link--has-icon[data-v-78d8e4b3] {
|
|
16
|
+
display: inline-flex;
|
|
17
|
+
align-items: center;
|
|
18
|
+
gap: 0.3em;
|
|
15
19
|
}
|
|
16
|
-
.rs-link:
|
|
17
|
-
color: var(--rs-primary
|
|
20
|
+
.rs-link[data-v-78d8e4b3]:visited {
|
|
21
|
+
color: var(--rs-link-tone, var(--rs-primary));
|
|
18
22
|
}
|
|
19
|
-
.rs-link:
|
|
20
|
-
|
|
23
|
+
.rs-link[data-v-78d8e4b3]:hover,
|
|
24
|
+
.rs-link[data-v-78d8e4b3]:active {
|
|
25
|
+
color: var(--rs-link-tone-hover, var(--rs-primary-hover));
|
|
21
26
|
}
|
|
22
|
-
.rs-link:focus-visible {
|
|
27
|
+
.rs-link[data-v-78d8e4b3]:focus-visible {
|
|
23
28
|
outline: none;
|
|
24
29
|
border-radius: var(--rs-radius-xs);
|
|
25
30
|
box-shadow: 0 0 0 var(--rs-focus-ring-width, 2px) var(--rs-focus-ring);
|
|
26
31
|
}
|
|
27
|
-
.rs-link--underline-always {
|
|
32
|
+
.rs-link--underline-always[data-v-78d8e4b3] {
|
|
28
33
|
text-decoration: underline;
|
|
29
34
|
}
|
|
30
|
-
.rs-link--underline-hover {
|
|
35
|
+
.rs-link--underline-hover[data-v-78d8e4b3] {
|
|
31
36
|
text-decoration: none;
|
|
32
37
|
}
|
|
33
|
-
.rs-link--underline-hover:hover,
|
|
34
|
-
.rs-link--underline-hover:focus-visible {
|
|
38
|
+
.rs-link--underline-hover[data-v-78d8e4b3]:hover,
|
|
39
|
+
.rs-link--underline-hover[data-v-78d8e4b3]:focus-visible {
|
|
35
40
|
text-decoration: underline;
|
|
36
41
|
}
|
|
37
|
-
.rs-link--underline-none
|
|
42
|
+
.rs-link--underline-none[data-v-78d8e4b3],
|
|
43
|
+
.rs-link--underline-none[data-v-78d8e4b3]:hover,
|
|
44
|
+
.rs-link--underline-none[data-v-78d8e4b3]:focus-visible {
|
|
38
45
|
text-decoration: none;
|
|
39
46
|
}
|
|
40
|
-
.rs-link--
|
|
47
|
+
.rs-link--tone-primary[data-v-78d8e4b3] {
|
|
48
|
+
--rs-link-tone: var(--rs-primary);
|
|
49
|
+
--rs-link-tone-hover: var(--rs-primary-hover);
|
|
50
|
+
}
|
|
51
|
+
.rs-link--tone-neutral[data-v-78d8e4b3] {
|
|
52
|
+
--rs-link-tone: var(--rs-text);
|
|
53
|
+
--rs-link-tone-hover: var(--rs-primary);
|
|
54
|
+
}
|
|
55
|
+
.rs-link--tone-success[data-v-78d8e4b3] {
|
|
56
|
+
--rs-link-tone: var(--rs-success, #18a058);
|
|
57
|
+
--rs-link-tone-hover: var(--rs-success, #18a058);
|
|
58
|
+
}
|
|
59
|
+
.rs-link--tone-warning[data-v-78d8e4b3] {
|
|
60
|
+
--rs-link-tone: var(--rs-warning, #f0a020);
|
|
61
|
+
--rs-link-tone-hover: var(--rs-warning, #f0a020);
|
|
62
|
+
}
|
|
63
|
+
.rs-link--tone-danger[data-v-78d8e4b3] {
|
|
64
|
+
--rs-link-tone: var(--rs-danger);
|
|
65
|
+
--rs-link-tone-hover: var(--rs-danger);
|
|
66
|
+
}
|
|
67
|
+
.rs-link--tone-info[data-v-78d8e4b3] {
|
|
68
|
+
--rs-link-tone: var(--rs-info, #2080f0);
|
|
69
|
+
--rs-link-tone-hover: var(--rs-info, #2080f0);
|
|
70
|
+
}
|
|
71
|
+
.rs-link__icon[data-v-78d8e4b3] {
|
|
72
|
+
color: inherit;
|
|
73
|
+
}
|
|
74
|
+
.rs-link--disabled[data-v-78d8e4b3],
|
|
75
|
+
.rs-link--disabled[data-v-78d8e4b3]:visited,
|
|
76
|
+
.rs-link--disabled[data-v-78d8e4b3]:hover,
|
|
77
|
+
.rs-link--disabled[data-v-78d8e4b3]:active {
|
|
41
78
|
color: var(--rs-muted);
|
|
42
79
|
cursor: not-allowed;
|
|
43
80
|
text-decoration: none;
|
|
44
|
-
|
|
81
|
+
}
|
|
82
|
+
@media (prefers-reduced-motion: reduce) {
|
|
83
|
+
.rs-link[data-v-78d8e4b3] {
|
|
84
|
+
transition: none;
|
|
85
|
+
}
|
|
45
86
|
}
|
|
@@ -1,19 +1,27 @@
|
|
|
1
|
+
import { type RsLinkTone, type RsLinkUnderline } from './link-utils';
|
|
2
|
+
export type { RsLinkTone, RsLinkUnderline };
|
|
1
3
|
type __VLS_Props = {
|
|
2
4
|
href: string;
|
|
3
5
|
target?: '_self' | '_blank' | '_parent' | '_top' | (string & {});
|
|
4
6
|
rel?: string;
|
|
5
7
|
disabled?: boolean;
|
|
6
|
-
underline?:
|
|
8
|
+
underline?: RsLinkUnderline;
|
|
9
|
+
/** 语义色。默认 primary。不要用业务 CSS 改颜色。 */
|
|
10
|
+
tone?: RsLinkTone;
|
|
11
|
+
/** 前缀图标,Lucide kebab-case。装饰性,名称走默认插槽。 */
|
|
12
|
+
icon?: string;
|
|
7
13
|
};
|
|
8
|
-
declare var
|
|
14
|
+
declare var __VLS_6: {};
|
|
9
15
|
type __VLS_Slots = {} & {
|
|
10
|
-
default?: (props: typeof
|
|
16
|
+
default?: (props: typeof __VLS_6) => any;
|
|
11
17
|
};
|
|
12
18
|
declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
|
|
19
|
+
tone: RsLinkTone;
|
|
13
20
|
disabled: boolean;
|
|
21
|
+
icon: string;
|
|
14
22
|
target: "_self" | "_blank" | "_parent" | "_top" | (string & {});
|
|
15
23
|
rel: string;
|
|
16
|
-
underline:
|
|
24
|
+
underline: RsLinkUnderline;
|
|
17
25
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
18
26
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
19
27
|
declare const _default: typeof __VLS_export;
|