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
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,29 @@
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [2.0.3] - 2026-09-21
|
|
10
|
+
|
|
11
|
+
### 新增
|
|
12
|
+
|
|
13
|
+
- 文档站接入 vue-i18n(`site/locales`)。顶栏切语言同步 `RsConfigProvider.locale` 与 vue-i18n,并记住上次选择。只用于 site,不进组件库依赖。
|
|
14
|
+
- `RsBadge`:补 `name` 与公开类型 `RsBadgeVariant`。只写 `variant` + 默认插槽时仍是原来的状态芯片。可选 `count` / `max` / `dot` / `showZero`:有插槽时为角标,无插槽时只渲染数字或点。文档站按 site README 补全 events / methods / tokens / FAQ。
|
|
15
|
+
|
|
16
|
+
### 变更
|
|
17
|
+
|
|
18
|
+
- 文档站演示与壳层不再用 `isEn` 二分。文案按 locale 表选取(`useSiteDemo` / `pickSitePair`),缺语言回退 en-US → zh-CN;顶栏语言按 `SITE_LOCALES` 轮换。主题仍走 `resolvedTheme` / `data-rs-theme` / token。
|
|
19
|
+
- `RsTag`:补 `name`;关闭钮改用 `RsButton`(仍是 `.rs-tag__close`,props / `close` 语义与原来相同)。文档站按 site README 补全 events / methods / tokens(中英)。
|
|
20
|
+
- `RsDivider`:补 `name` 与公开类型 `RsDividerOrientation`。仍是 `div[role=separator]`,`orientation` / `dashed` / 默认插槽语义不变。文档站按 site README 补全 events / methods / tokens / FAQ(中英)。
|
|
21
|
+
- 文档站基础组 Avatar / Card / Container / Scrollbar:按 site README 补全中英演示、events / methods / tokens / FAQ。Scrollbar 演示可点 `scrollTop` / `getViewport`。
|
|
22
|
+
- `RsIcon`:补 `name`;尺寸档位与 `RS_COMPONENT_SIZE_ICON_PX` 对齐(lg 现为 18);抽 `icon-utils`;`spin` 尊重减少动态。文档站 Icon 用法与 Button 对齐(中英)。
|
|
23
|
+
- 文档站基础组:Button 补 `iconSize` / 原生 `click` / 事件演示;Badge–Scrollbar 按源码补全 props、事件、插槽、方法(中英)。
|
|
24
|
+
- `RsLink`:去掉 Reka `Primitive`,改为原生 `<a>`;补 `name`、`tone`、`icon`;样式改 scoped,并尊重减少动态。默认 `inline`(有图标才 `inline-flex`)。文档站按 site README 补 events / methods / tokens、跟正文与可感知 click。公开类型 `RsLinkTone` / `RsLinkUnderline`;helper 保持内部。不设 size / theme prop。
|
|
25
|
+
|
|
26
|
+
### 修复
|
|
27
|
+
|
|
28
|
+
- `RsButton`:补 `name`,loading 时拦住点击;内置 tip 用自研定位,不再提 Reka。图标在按钮内为装饰,可访问名称只走 `aria-label`。
|
|
29
|
+
- `RsButton` 内置 tip 回到 `calc(var(--rs-z-modal) + 2)`,与 `RsTooltip` / Dialog 内浮层同一档,避免在对话框里被盖住。
|
|
30
|
+
- `RsButton` 幽灵:未传 `bordered` 时不再被 Vue 收成 false(与 text 撞车);hover 改为 `--rs-surface-hover` 实底,语义色再叠 14% 色相。
|
|
31
|
+
|
|
9
32
|
## [2.0.2] - 2026-09-21
|
|
10
33
|
|
|
11
34
|
### 变更
|
package/README.md
CHANGED
|
@@ -82,12 +82,14 @@ Component APIs live on the docs site. The architecture contract is for maintaine
|
|
|
82
82
|
|
|
83
83
|
- **Component site:** [https://blair-shang.github.io/niuma-ui/](https://blair-shang.github.io/niuma-ui/) (source: `site/`)
|
|
84
84
|
- Local docs: `pnpm dev:site` → http://127.0.0.1:5181
|
|
85
|
+
- **How to write demos and APIs:** [site/README.en.md](./site/README.en.md) ([中文](./site/README.md)) — catalog must list props / events / slots / methods; demos are bilingual and events must be visible
|
|
85
86
|
- `playground/` is internal smoke / visual regression only (`pnpm dev` → :5180). It is not usage documentation.
|
|
86
87
|
|
|
87
88
|
| Doc | Audience |
|
|
88
89
|
|-----|----------|
|
|
89
90
|
| [docs/consumers.en.md](./docs/consumers.en.md) | People installing the library ([中文](./docs/consumers.md)) |
|
|
90
91
|
| [docs/locales.en.md](./docs/locales.en.md) | Registering extra languages ([中文](./docs/locales.md)) |
|
|
92
|
+
| [site/README.en.md](./site/README.en.md) | How to write site demos and API tables ([中文](./site/README.md)) |
|
|
91
93
|
| [docs/components.en.md](./docs/components.en.md) | People changing this repository ([中文](./docs/components.md)) |
|
|
92
94
|
| [CONTRIBUTING.en.md](./CONTRIBUTING.en.md) | PRs, tests, releases ([中文](./CONTRIBUTING.md)) |
|
|
93
95
|
| [CHANGELOG.md](./CHANGELOG.md) | Release notes |
|
package/README.zh-CN.md
CHANGED
|
@@ -82,12 +82,14 @@ import { RsConfigProvider, RsButton } from 'niuma-ui'
|
|
|
82
82
|
|
|
83
83
|
- **组件文档(官网)**:[https://blair-shang.github.io/niuma-ui/](https://blair-shang.github.io/niuma-ui/)(源码 `site/`)
|
|
84
84
|
- 本地文档站:`pnpm dev:site` → http://127.0.0.1:5181
|
|
85
|
+
- **演示与 API 写法**:[site/README.md](./site/README.md)([English](./site/README.en.md))— catalog 必须写清 props / events / slots / methods,演示要中英对照且事件可感知
|
|
85
86
|
- `playground/` 仅内部冒烟与像素回归(`pnpm dev` → :5180),不提供对外用法
|
|
86
87
|
|
|
87
88
|
| 文档 | 给谁看 |
|
|
88
89
|
|------|--------|
|
|
89
90
|
| [docs/consumers.md](./docs/consumers.md) | 把库装进产品的人([English](./docs/consumers.en.md)) |
|
|
90
91
|
| [docs/locales.md](./docs/locales.md) | 登记第三方语言([English](./docs/locales.en.md)) |
|
|
92
|
+
| [site/README.md](./site/README.md) | 文档站演示与 API 表怎么写([English](./site/README.en.md)) |
|
|
91
93
|
| [docs/components.md](./docs/components.md) | 改本仓库的人([English](./docs/components.en.md)) |
|
|
92
94
|
| [CONTRIBUTING.md](./CONTRIBUTING.md) | PR、测试、发版([English](./CONTRIBUTING.en.md)) |
|
|
93
95
|
| [CHANGELOG.md](./CHANGELOG.md) | 版本记录 |
|
|
@@ -1,41 +1,94 @@
|
|
|
1
1
|
|
|
2
|
-
.rs-badge[data-v-
|
|
2
|
+
.rs-badge[data-v-f91a65a7] {
|
|
3
|
+
--rs-badge-padding-y: 0.125rem;
|
|
4
|
+
--rs-badge-padding-x: 0.625rem;
|
|
5
|
+
--rs-badge-dot-size: var(--rs-space-sm);
|
|
6
|
+
--rs-badge-count-min: 1.125rem;
|
|
7
|
+
--rs-badge-ring: var(--rs-surface);
|
|
3
8
|
display: inline-flex;
|
|
4
9
|
align-items: center;
|
|
5
|
-
|
|
10
|
+
justify-content: center;
|
|
11
|
+
box-sizing: border-box;
|
|
12
|
+
padding: var(--rs-badge-padding-y) var(--rs-badge-padding-x);
|
|
6
13
|
border-radius: var(--rs-radius-full);
|
|
7
14
|
font-size: var(--rs-font-size-xs);
|
|
8
15
|
font-weight: var(--rs-font-weight-medium);
|
|
9
16
|
line-height: var(--rs-line-height-tight);
|
|
10
17
|
letter-spacing: 0.02em;
|
|
18
|
+
white-space: nowrap;
|
|
19
|
+
vertical-align: middle;
|
|
11
20
|
}
|
|
12
|
-
.rs-badge
|
|
21
|
+
.rs-badge-wrap[data-v-f91a65a7] {
|
|
22
|
+
position: relative;
|
|
23
|
+
display: inline-flex;
|
|
24
|
+
vertical-align: middle;
|
|
25
|
+
}
|
|
26
|
+
.rs-badge-wrap .rs-badge--mark[data-v-f91a65a7] {
|
|
27
|
+
position: absolute;
|
|
28
|
+
inset-block-start: 0;
|
|
29
|
+
inset-inline-end: 0;
|
|
30
|
+
z-index: 1;
|
|
31
|
+
transform: translate(50%, -50%);
|
|
32
|
+
box-shadow: 0 0 0 2px var(--rs-badge-ring);
|
|
33
|
+
}
|
|
34
|
+
:dir(rtl) .rs-badge-wrap .rs-badge--mark[data-v-f91a65a7] {
|
|
35
|
+
transform: translate(-50%, -50%);
|
|
36
|
+
}
|
|
37
|
+
.rs-badge--mark[data-v-f91a65a7]:not(.rs-badge--dot) {
|
|
38
|
+
min-width: var(--rs-badge-count-min);
|
|
39
|
+
min-height: var(--rs-badge-count-min);
|
|
40
|
+
padding: 0 0.375rem;
|
|
41
|
+
letter-spacing: 0;
|
|
42
|
+
line-height: 1;
|
|
43
|
+
}
|
|
44
|
+
.rs-badge--dot[data-v-f91a65a7] {
|
|
45
|
+
width: var(--rs-badge-dot-size);
|
|
46
|
+
height: var(--rs-badge-dot-size);
|
|
47
|
+
min-width: var(--rs-badge-dot-size);
|
|
48
|
+
padding: 0;
|
|
49
|
+
border-radius: var(--rs-radius-full);
|
|
50
|
+
}
|
|
51
|
+
.rs-badge--default[data-v-f91a65a7] {
|
|
13
52
|
background: var(--rs-surface-hover);
|
|
14
53
|
color: var(--rs-text);
|
|
15
54
|
border: 1px solid var(--rs-border);
|
|
16
55
|
}
|
|
17
|
-
.rs-badge--primary[data-v-
|
|
56
|
+
.rs-badge--primary[data-v-f91a65a7] {
|
|
18
57
|
background: var(--rs-primary-container);
|
|
19
58
|
color: var(--rs-on-primary-container);
|
|
20
59
|
border: 1px solid color-mix(in srgb, var(--rs-primary) 40%, transparent);
|
|
21
60
|
}
|
|
22
|
-
.rs-badge--success[data-v-
|
|
61
|
+
.rs-badge--success[data-v-f91a65a7] {
|
|
23
62
|
background: var(--rs-success-container);
|
|
24
63
|
color: var(--rs-on-success-container);
|
|
25
64
|
border: 1px solid color-mix(in srgb, var(--rs-success) 40%, transparent);
|
|
26
65
|
}
|
|
27
|
-
.rs-badge--warning[data-v-
|
|
66
|
+
.rs-badge--warning[data-v-f91a65a7] {
|
|
28
67
|
background: var(--rs-warning-container);
|
|
29
68
|
color: var(--rs-on-warning-container);
|
|
30
69
|
border: 1px solid color-mix(in srgb, var(--rs-warning) 40%, transparent);
|
|
31
70
|
}
|
|
32
|
-
.rs-badge--danger[data-v-
|
|
71
|
+
.rs-badge--danger[data-v-f91a65a7] {
|
|
33
72
|
background: var(--rs-danger-container);
|
|
34
73
|
color: var(--rs-on-danger-container);
|
|
35
74
|
border: 1px solid color-mix(in srgb, var(--rs-danger) 40%, transparent);
|
|
36
75
|
}
|
|
37
|
-
.rs-badge--info[data-v-
|
|
76
|
+
.rs-badge--info[data-v-f91a65a7] {
|
|
38
77
|
background: var(--rs-info-container);
|
|
39
78
|
color: var(--rs-on-info-container);
|
|
40
79
|
border: 1px solid color-mix(in srgb, var(--rs-info) 40%, transparent);
|
|
41
80
|
}
|
|
81
|
+
.rs-badge--dot.rs-badge--default[data-v-f91a65a7],
|
|
82
|
+
.rs-badge--dot.rs-badge--primary[data-v-f91a65a7],
|
|
83
|
+
.rs-badge--dot.rs-badge--success[data-v-f91a65a7],
|
|
84
|
+
.rs-badge--dot.rs-badge--warning[data-v-f91a65a7],
|
|
85
|
+
.rs-badge--dot.rs-badge--danger[data-v-f91a65a7],
|
|
86
|
+
.rs-badge--dot.rs-badge--info[data-v-f91a65a7] {
|
|
87
|
+
color: transparent;
|
|
88
|
+
}
|
|
89
|
+
@media (forced-colors: active) {
|
|
90
|
+
.rs-badge[data-v-f91a65a7] {
|
|
91
|
+
border: 1px solid CanvasText;
|
|
92
|
+
forced-color-adjust: none;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
@@ -1,12 +1,28 @@
|
|
|
1
|
+
import { type RsBadgeVariant } from './badge-utils';
|
|
2
|
+
export type { RsBadgeVariant };
|
|
1
3
|
type __VLS_Props = {
|
|
2
|
-
variant?:
|
|
4
|
+
variant?: RsBadgeVariant;
|
|
5
|
+
/** 角标数字。与默认插槽同时出现时,插槽是宿主,数字挂在角上。 */
|
|
6
|
+
count?: number;
|
|
7
|
+
/** 超过后显示 `{max}+`。 */
|
|
8
|
+
max?: number;
|
|
9
|
+
/** 小圆点,不计数字。与 count 同时出现时只显示点。 */
|
|
10
|
+
dot?: boolean;
|
|
11
|
+
/** count 为 0 时仍显示。 */
|
|
12
|
+
showZero?: boolean;
|
|
3
13
|
};
|
|
4
|
-
declare var __VLS_1: {};
|
|
14
|
+
declare var __VLS_1: {}, __VLS_3: {};
|
|
5
15
|
type __VLS_Slots = {} & {
|
|
6
16
|
default?: (props: typeof __VLS_1) => any;
|
|
17
|
+
} & {
|
|
18
|
+
default?: (props: typeof __VLS_3) => any;
|
|
7
19
|
};
|
|
8
20
|
declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
|
|
9
|
-
variant:
|
|
21
|
+
variant: RsBadgeVariant;
|
|
22
|
+
count: number;
|
|
23
|
+
max: number;
|
|
24
|
+
dot: boolean;
|
|
25
|
+
showZero: boolean;
|
|
10
26
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
11
27
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
12
28
|
declare const _default: typeof __VLS_export;
|
|
@@ -1,11 +1,54 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { formatRsBadgeCount, resolveRsBadgeVariant } from "./badge-utils.js";
|
|
2
|
+
import { computed, createCommentVNode, createElementBlock, defineComponent, normalizeClass, openBlock, renderSlot, toDisplayString, useSlots } from "vue";
|
|
2
3
|
//#region src/components/badge/src/RsBadge.vue?vue&type=script&setup=true&lang.ts
|
|
4
|
+
var _hoisted_1 = {
|
|
5
|
+
key: 0,
|
|
6
|
+
class: "rs-badge-wrap"
|
|
7
|
+
};
|
|
8
|
+
var _hoisted_2 = ["aria-hidden", "aria-label"];
|
|
9
|
+
var _hoisted_3 = ["aria-hidden", "aria-label"];
|
|
3
10
|
var RsBadge_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
11
|
+
name: "RsBadge",
|
|
4
12
|
__name: "RsBadge",
|
|
5
|
-
props: {
|
|
13
|
+
props: {
|
|
14
|
+
variant: { default: "default" },
|
|
15
|
+
count: { default: void 0 },
|
|
16
|
+
max: { default: 99 },
|
|
17
|
+
dot: {
|
|
18
|
+
type: Boolean,
|
|
19
|
+
default: false
|
|
20
|
+
},
|
|
21
|
+
showZero: {
|
|
22
|
+
type: Boolean,
|
|
23
|
+
default: false
|
|
24
|
+
}
|
|
25
|
+
},
|
|
6
26
|
setup(__props) {
|
|
27
|
+
const props = __props;
|
|
28
|
+
const slots = useSlots();
|
|
29
|
+
const resolvedVariant = computed(() => resolveRsBadgeVariant(props.variant));
|
|
30
|
+
const variantClass = computed(() => `rs-badge--${resolvedVariant.value}`);
|
|
31
|
+
const isMarkMode = computed(() => props.dot || props.count !== void 0);
|
|
32
|
+
const countText = computed(() => formatRsBadgeCount(props.count, props.max, props.showZero));
|
|
33
|
+
const showMark = computed(() => props.dot || countText.value != null);
|
|
34
|
+
const hasHost = computed(() => Boolean(slots.default));
|
|
35
|
+
const overlay = computed(() => isMarkMode.value && hasHost.value);
|
|
36
|
+
const markLabel = computed(() => props.dot ? void 0 : countText.value ?? void 0);
|
|
7
37
|
return (_ctx, _cache) => {
|
|
8
|
-
return openBlock(), createElementBlock("span",
|
|
38
|
+
return overlay.value ? (openBlock(), createElementBlock("span", _hoisted_1, [renderSlot(_ctx.$slots, "default", {}, void 0, true), showMark.value ? (openBlock(), createElementBlock("span", {
|
|
39
|
+
key: 0,
|
|
40
|
+
class: normalizeClass(["rs-badge rs-badge--mark", [variantClass.value, { "rs-badge--dot": __props.dot }]]),
|
|
41
|
+
"aria-hidden": __props.dot ? "true" : void 0,
|
|
42
|
+
"aria-label": markLabel.value
|
|
43
|
+
}, toDisplayString(__props.dot ? "" : countText.value), 11, _hoisted_2)) : createCommentVNode("", true)])) : showMark.value ? (openBlock(), createElementBlock("span", {
|
|
44
|
+
key: 1,
|
|
45
|
+
class: normalizeClass(["rs-badge rs-badge--mark", [variantClass.value, { "rs-badge--dot": __props.dot }]]),
|
|
46
|
+
"aria-hidden": __props.dot ? "true" : void 0,
|
|
47
|
+
"aria-label": markLabel.value
|
|
48
|
+
}, toDisplayString(__props.dot ? "" : countText.value), 11, _hoisted_3)) : !isMarkMode.value ? (openBlock(), createElementBlock("span", {
|
|
49
|
+
key: 2,
|
|
50
|
+
class: normalizeClass(["rs-badge", variantClass.value])
|
|
51
|
+
}, [renderSlot(_ctx.$slots, "default", {}, void 0, true)], 2)) : createCommentVNode("", true);
|
|
9
52
|
};
|
|
10
53
|
}
|
|
11
54
|
});
|
|
@@ -3,6 +3,6 @@ import _plugin_vue_export_helper_default from "../../../_virtual/_plugin-vue_exp
|
|
|
3
3
|
import RsBadge_vue_vue_type_script_setup_true_lang_default from "./RsBadge.impl.js";
|
|
4
4
|
|
|
5
5
|
//#region src/components/badge/src/RsBadge.vue
|
|
6
|
-
var RsBadge_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RsBadge_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-
|
|
6
|
+
var RsBadge_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RsBadge_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-f91a65a7"]]);
|
|
7
7
|
//#endregion
|
|
8
8
|
export { RsBadge_default as default };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RsBadge 语义色。芯片与角标共用同一套 variant,不另开 tone 轴。
|
|
3
|
+
* 可关闭的筛选请用 RsTag,不要用本组件冒充标签。
|
|
4
|
+
*/
|
|
5
|
+
export declare const RS_BADGE_VARIANTS: readonly ["default", "primary", "success", "warning", "danger", "info"];
|
|
6
|
+
export type RsBadgeVariant = (typeof RS_BADGE_VARIANTS)[number];
|
|
7
|
+
export declare const RS_BADGE_COUNT_MAX_DEFAULT = 99;
|
|
8
|
+
export declare function isRsBadgeVariant(value: unknown): value is RsBadgeVariant;
|
|
9
|
+
export declare function resolveRsBadgeVariant(variant?: RsBadgeVariant | null): RsBadgeVariant;
|
|
10
|
+
/** 未传 count、非有限数字、负数、或 0 且未 showZero 时不展示数字。 */
|
|
11
|
+
export declare function formatRsBadgeCount(count: number | string | null | undefined, max?: number, showZero?: boolean): string | null;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
//#region src/components/badge/src/badge-utils.ts
|
|
2
|
+
/**
|
|
3
|
+
* RsBadge 语义色。芯片与角标共用同一套 variant,不另开 tone 轴。
|
|
4
|
+
* 可关闭的筛选请用 RsTag,不要用本组件冒充标签。
|
|
5
|
+
*/
|
|
6
|
+
var RS_BADGE_VARIANTS = [
|
|
7
|
+
"default",
|
|
8
|
+
"primary",
|
|
9
|
+
"success",
|
|
10
|
+
"warning",
|
|
11
|
+
"danger",
|
|
12
|
+
"info"
|
|
13
|
+
];
|
|
14
|
+
function isRsBadgeVariant(value) {
|
|
15
|
+
return typeof value === "string" && RS_BADGE_VARIANTS.includes(value);
|
|
16
|
+
}
|
|
17
|
+
function resolveRsBadgeVariant(variant) {
|
|
18
|
+
return isRsBadgeVariant(variant) ? variant : "default";
|
|
19
|
+
}
|
|
20
|
+
/** 未传 count、非有限数字、负数、或 0 且未 showZero 时不展示数字。 */
|
|
21
|
+
function formatRsBadgeCount(count, max = 99, showZero = false) {
|
|
22
|
+
if (count == null || count === "") return null;
|
|
23
|
+
const n = typeof count === "number" ? count : Number(count);
|
|
24
|
+
if (!Number.isFinite(n) || n < 0) return null;
|
|
25
|
+
if (n === 0 && !showZero) return null;
|
|
26
|
+
const cap = Number.isFinite(max) && max > 0 ? Math.floor(max) : 99;
|
|
27
|
+
const value = Math.floor(n);
|
|
28
|
+
if (value > cap) return `${cap}+`;
|
|
29
|
+
return String(value);
|
|
30
|
+
}
|
|
31
|
+
//#endregion
|
|
32
|
+
export { RS_BADGE_VARIANTS, formatRsBadgeCount, isRsBadgeVariant, resolveRsBadgeVariant };
|