@unif/react-native-ui 0.2.30 → 0.3.2

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.
@@ -87,6 +87,12 @@ Object.defineProperty(exports, "Space", {
87
87
  return _space.default;
88
88
  }
89
89
  });
90
+ Object.defineProperty(exports, "Tag", {
91
+ enumerable: true,
92
+ get: function () {
93
+ return _tag.default;
94
+ }
95
+ });
90
96
  Object.defineProperty(exports, "Text", {
91
97
  enumerable: true,
92
98
  get: function () {
@@ -139,6 +145,7 @@ var _avatar = _interopRequireDefault(require("./avatar"));
139
145
  var _waveAnimation = _interopRequireDefault(require("./wave-animation"));
140
146
  var _input = _interopRequireDefault(require("./input"));
141
147
  var _chip = _interopRequireDefault(require("./chip"));
148
+ var _tag = _interopRequireDefault(require("./tag"));
142
149
  var _actionSheet = _interopRequireDefault(require("./action-sheet"));
143
150
  var _popover = _interopRequireDefault(require("./popover"));
144
151
  var _menu = _interopRequireDefault(require("./menu"));
@@ -1 +1 @@
1
- {"version":3,"names":["_context","require","_tokens","_hooks","_row","_interopRequireDefault","_column","_center","_space","_text","_button","_divider","_listItem","_touchable","_avatar","_waveAnimation","_input","_chip","_actionSheet","_popover","_menu","e","__esModule","default"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,IAAAA,QAAA,GAAAC,OAAA;AAEA,IAAAC,OAAA,GAAAD,OAAA;AAIA,IAAAE,MAAA,GAAAF,OAAA;AAGA,IAAAG,IAAA,GAAAC,sBAAA,CAAAJ,OAAA;AAEA,IAAAK,OAAA,GAAAD,sBAAA,CAAAJ,OAAA;AAEA,IAAAM,OAAA,GAAAF,sBAAA,CAAAJ,OAAA;AAEA,IAAAO,MAAA,GAAAH,sBAAA,CAAAJ,OAAA;AAIA,IAAAQ,KAAA,GAAAJ,sBAAA,CAAAJ,OAAA;AAEA,IAAAS,OAAA,GAAAL,sBAAA,CAAAJ,OAAA;AAGA,IAAAU,QAAA,GAAAN,sBAAA,CAAAJ,OAAA;AACA,IAAAW,SAAA,GAAAP,sBAAA,CAAAJ,OAAA;AACA,IAAAY,UAAA,GAAAR,sBAAA,CAAAJ,OAAA;AAIA,IAAAa,OAAA,GAAAT,sBAAA,CAAAJ,OAAA;AAGA,IAAAc,cAAA,GAAAV,sBAAA,CAAAJ,OAAA;AAIA,IAAAe,MAAA,GAAAX,sBAAA,CAAAJ,OAAA;AAGA,IAAAgB,KAAA,GAAAZ,sBAAA,CAAAJ,OAAA;AAGA,IAAAiB,YAAA,GAAAb,sBAAA,CAAAJ,OAAA;AAMA,IAAAkB,QAAA,GAAAd,sBAAA,CAAAJ,OAAA;AAGA,IAAAmB,KAAA,GAAAf,sBAAA,CAAAJ,OAAA;AAAyC,SAAAI,uBAAAgB,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA","ignoreList":[]}
1
+ {"version":3,"names":["_context","require","_tokens","_hooks","_row","_interopRequireDefault","_column","_center","_space","_text","_button","_divider","_listItem","_touchable","_avatar","_waveAnimation","_input","_chip","_tag","_actionSheet","_popover","_menu","e","__esModule","default"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,IAAAA,QAAA,GAAAC,OAAA;AAEA,IAAAC,OAAA,GAAAD,OAAA;AAIA,IAAAE,MAAA,GAAAF,OAAA;AAGA,IAAAG,IAAA,GAAAC,sBAAA,CAAAJ,OAAA;AAEA,IAAAK,OAAA,GAAAD,sBAAA,CAAAJ,OAAA;AAEA,IAAAM,OAAA,GAAAF,sBAAA,CAAAJ,OAAA;AAEA,IAAAO,MAAA,GAAAH,sBAAA,CAAAJ,OAAA;AAIA,IAAAQ,KAAA,GAAAJ,sBAAA,CAAAJ,OAAA;AAEA,IAAAS,OAAA,GAAAL,sBAAA,CAAAJ,OAAA;AAGA,IAAAU,QAAA,GAAAN,sBAAA,CAAAJ,OAAA;AACA,IAAAW,SAAA,GAAAP,sBAAA,CAAAJ,OAAA;AACA,IAAAY,UAAA,GAAAR,sBAAA,CAAAJ,OAAA;AAIA,IAAAa,OAAA,GAAAT,sBAAA,CAAAJ,OAAA;AAGA,IAAAc,cAAA,GAAAV,sBAAA,CAAAJ,OAAA;AAIA,IAAAe,MAAA,GAAAX,sBAAA,CAAAJ,OAAA;AAGA,IAAAgB,KAAA,GAAAZ,sBAAA,CAAAJ,OAAA;AAGA,IAAAiB,IAAA,GAAAb,sBAAA,CAAAJ,OAAA;AAGA,IAAAkB,YAAA,GAAAd,sBAAA,CAAAJ,OAAA;AAMA,IAAAmB,QAAA,GAAAf,sBAAA,CAAAJ,OAAA;AAGA,IAAAoB,KAAA,GAAAhB,sBAAA,CAAAJ,OAAA;AAAyC,SAAAI,uBAAAiB,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA","ignoreList":[]}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _reactNative = require("react-native");
9
+ var _hooks = require("../hooks");
10
+ var _context = require("../theme/context");
11
+ var _style = require("./style");
12
+ var _jsxRuntime = require("react/jsx-runtime");
13
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
14
+ /**
15
+ * Tag 标签组件
16
+ *
17
+ * 信息展示标签,支持三种变体:
18
+ * - filled(默认):浅色底 + 深色字
19
+ * - solid:纯色底 + 白字
20
+ * - outlined:边框 + 深色字
21
+ *
22
+ * color 支持预设语义色(success/processing/warning/error/default)或自定义 hex。
23
+ */
24
+
25
+ const Tag = ({
26
+ children,
27
+ variant = 'filled',
28
+ color,
29
+ size = 'default',
30
+ style,
31
+ styles: semanticStyles,
32
+ testID
33
+ }) => {
34
+ const tokens = (0, _context.useTokens)();
35
+ const resolved = (0, _style.resolveColor)(color);
36
+ const s = (0, _react.useMemo)(() => {
37
+ let variantStyles;
38
+ if (variant === 'solid') {
39
+ variantStyles = (0, _style.createSolidStyles)(resolved);
40
+ } else if (variant === 'outlined') {
41
+ variantStyles = (0, _style.createOutlinedStyles)(resolved);
42
+ } else {
43
+ variantStyles = (0, _style.createFilledStyles)(resolved);
44
+ }
45
+ return (0, _hooks.mergeStyles)((0, _style.createDefaultStyles)(tokens), size === 'small' ? (0, _style.createSmallStyles)() : undefined, variantStyles, semanticStyles);
46
+ }, [variant, resolved, size, tokens, semanticStyles]);
47
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
48
+ style: [s.root, style],
49
+ testID: testID,
50
+ children: typeof children === 'string' ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
51
+ style: s.content,
52
+ children: children
53
+ }) : children
54
+ });
55
+ };
56
+ var _default = exports.default = Tag;
57
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_hooks","_context","_style","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","Tag","children","variant","color","size","style","styles","semanticStyles","testID","tokens","useTokens","resolved","resolveColor","s","useMemo","variantStyles","createSolidStyles","createOutlinedStyles","createFilledStyles","mergeStyles","createDefaultStyles","createSmallStyles","undefined","jsx","View","root","Text","content","_default","exports"],"sourceRoot":"../../../src","sources":["tag/index.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createSolidStyles = exports.createSmallStyles = exports.createOutlinedStyles = exports.createFilledStyles = exports.createDefaultStyles = void 0;
7
+ exports.resolveColor = resolveColor;
8
+ /** 预设语义色 → 实际色值映射 */
9
+ const PRESET_COLORS = {
10
+ success: '#52C41A',
11
+ processing: '#1677FF',
12
+ warning: '#FF9500',
13
+ error: '#FF3B30',
14
+ default: '#8C8C8C'
15
+ };
16
+ /** 解析颜色:支持预设名或自定义 hex */
17
+ function resolveColor(color) {
18
+ if (!color) return PRESET_COLORS.default;
19
+ if (color in PRESET_COLORS) return PRESET_COLORS[color];
20
+ return color;
21
+ }
22
+
23
+ /**
24
+ * 十六进制颜色追加透明度
25
+ * '#1677FF' + 0.1 → '#1677FF1A'
26
+ */
27
+ function withAlpha(hex, alpha) {
28
+ const a = Math.round(alpha * 255).toString(16).padStart(2, '0');
29
+ const base = hex.length === 9 ? hex.slice(0, 7) : hex;
30
+ return `${base}${a}`;
31
+ }
32
+ const createDefaultStyles = t => ({
33
+ root: {
34
+ flexDirection: 'row',
35
+ alignItems: 'center',
36
+ alignSelf: 'flex-start',
37
+ borderRadius: t.radiusSm,
38
+ paddingHorizontal: 8,
39
+ paddingVertical: 2
40
+ },
41
+ content: {
42
+ fontSize: t.fontSizeXs
43
+ }
44
+ });
45
+ exports.createDefaultStyles = createDefaultStyles;
46
+ const createSmallStyles = () => ({
47
+ root: {
48
+ paddingHorizontal: 6,
49
+ paddingVertical: 1
50
+ },
51
+ content: {
52
+ fontSize: 10
53
+ }
54
+ });
55
+
56
+ /** filled: 浅色底 + 深色字(默认) */
57
+ exports.createSmallStyles = createSmallStyles;
58
+ const createFilledStyles = color => ({
59
+ root: {
60
+ backgroundColor: withAlpha(color, 0.1)
61
+ },
62
+ content: {
63
+ color
64
+ }
65
+ });
66
+
67
+ /** solid: 纯色底 + 白字 */
68
+ exports.createFilledStyles = createFilledStyles;
69
+ const createSolidStyles = color => ({
70
+ root: {
71
+ backgroundColor: color
72
+ },
73
+ content: {
74
+ color: '#FFFFFF'
75
+ }
76
+ });
77
+
78
+ /** outlined: 边框 + 深色字 + 透明底 */
79
+ exports.createSolidStyles = createSolidStyles;
80
+ const createOutlinedStyles = color => ({
81
+ root: {
82
+ backgroundColor: 'transparent',
83
+ borderWidth: 1,
84
+ borderColor: color
85
+ },
86
+ content: {
87
+ color
88
+ }
89
+ });
90
+ exports.createOutlinedStyles = createOutlinedStyles;
91
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["PRESET_COLORS","success","processing","warning","error","default","resolveColor","color","withAlpha","hex","alpha","a","Math","round","toString","padStart","base","length","slice","createDefaultStyles","t","root","flexDirection","alignItems","alignSelf","borderRadius","radiusSm","paddingHorizontal","paddingVertical","content","fontSize","fontSizeXs","exports","createSmallStyles","createFilledStyles","backgroundColor","createSolidStyles","createOutlinedStyles","borderWidth","borderColor"],"sourceRoot":"../../../../src","sources":["tag/style/index.tsx"],"mappings":";;;;;;;AAQA;AACA,MAAMA,aAAa,GAAG;EACpBC,OAAO,EAAE,SAAS;EAClBC,UAAU,EAAE,SAAS;EACrBC,OAAO,EAAE,SAAS;EAClBC,KAAK,EAAE,SAAS;EAChBC,OAAO,EAAE;AACX,CAAU;AAIV;AACO,SAASC,YAAYA,CAACC,KAAyB,EAAU;EAC9D,IAAI,CAACA,KAAK,EAAE,OAAOP,aAAa,CAACK,OAAO;EACxC,IAAIE,KAAK,IAAIP,aAAa,EAAE,OAAOA,aAAa,CAACO,KAAK,CAAe;EACrE,OAAOA,KAAK;AACd;;AAEA;AACA;AACA;AACA;AACA,SAASC,SAASA,CAACC,GAAW,EAAEC,KAAa,EAAU;EACrD,MAAMC,CAAC,GAAGC,IAAI,CAACC,KAAK,CAACH,KAAK,GAAG,GAAG,CAAC,CAC9BI,QAAQ,CAAC,EAAE,CAAC,CACZC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;EACnB,MAAMC,IAAI,GAAGP,GAAG,CAACQ,MAAM,KAAK,CAAC,GAAGR,GAAG,CAACS,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAGT,GAAG;EACrD,OAAO,GAAGO,IAAI,GAAGL,CAAC,EAAE;AACtB;AAEO,MAAMQ,mBAAmB,GAAIC,CAAS,KAAyB;EACpEC,IAAI,EAAE;IACJC,aAAa,EAAE,KAAK;IACpBC,UAAU,EAAE,QAAQ;IACpBC,SAAS,EAAE,YAAY;IACvBC,YAAY,EAAEL,CAAC,CAACM,QAAQ;IACxBC,iBAAiB,EAAE,CAAC;IACpBC,eAAe,EAAE;EACnB,CAAC;EACDC,OAAO,EAAE;IACPC,QAAQ,EAAEV,CAAC,CAACW;EACd;AACF,CAAC,CAAC;AAACC,OAAA,CAAAb,mBAAA,GAAAA,mBAAA;AAEI,MAAMc,iBAAiB,GAAGA,CAAA,MAAmC;EAClEZ,IAAI,EAAE;IACJM,iBAAiB,EAAE,CAAC;IACpBC,eAAe,EAAE;EACnB,CAAC;EACDC,OAAO,EAAE;IACPC,QAAQ,EAAE;EACZ;AACF,CAAC,CAAC;;AAEF;AAAAE,OAAA,CAAAC,iBAAA,GAAAA,iBAAA;AACO,MAAMC,kBAAkB,GAC7B3B,KAAa,KACmB;EAChCc,IAAI,EAAE;IACJc,eAAe,EAAE3B,SAAS,CAACD,KAAK,EAAE,GAAG;EACvC,CAAC;EACDsB,OAAO,EAAE;IACPtB;EACF;AACF,CAAC,CAAC;;AAEF;AAAAyB,OAAA,CAAAE,kBAAA,GAAAA,kBAAA;AACO,MAAME,iBAAiB,GAC5B7B,KAAa,KACmB;EAChCc,IAAI,EAAE;IACJc,eAAe,EAAE5B;EACnB,CAAC;EACDsB,OAAO,EAAE;IACPtB,KAAK,EAAE;EACT;AACF,CAAC,CAAC;;AAEF;AAAAyB,OAAA,CAAAI,iBAAA,GAAAA,iBAAA;AACO,MAAMC,oBAAoB,GAC/B9B,KAAa,KACmB;EAChCc,IAAI,EAAE;IACJc,eAAe,EAAE,aAAa;IAC9BG,WAAW,EAAE,CAAC;IACdC,WAAW,EAAEhC;EACf,CAAC;EACDsB,OAAO,EAAE;IACPtB;EACF;AACF,CAAC,CAAC;AAACyB,OAAA,CAAAK,oBAAA,GAAAA,oBAAA","ignoreList":[]}
@@ -23,6 +23,7 @@ export { default as WaveAnimation } from "./wave-animation/index.js";
23
23
  // Base
24
24
  export { default as Input } from "./input/index.js";
25
25
  export { default as Chip } from "./chip/index.js";
26
+ export { default as Tag } from "./tag/index.js";
26
27
  export { default as ActionSheet } from "./action-sheet/index.js";
27
28
  export { default as Popover } from "./popover/index.js";
28
29
  export { default as Menu } from "./menu/index.js";
@@ -1 +1 @@
1
- {"version":3,"names":["ConfigProvider","useTokens","defaultTokens","mergeStyles","default","Row","Column","Center","Space","Text","Button","Divider","ListItem","Touchable","Avatar","WaveAnimation","Input","Chip","ActionSheet","Popover","Menu"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA;AACA,SAASA,cAAc,EAAEC,SAAS,QAAQ,oBAAiB;AAE3D,SAASC,aAAa,QAAQ,mBAAgB;AAG9C;AACA,SAASC,WAAW,QAAQ,kBAAS;;AAErC;AACA,SAASC,OAAO,IAAIC,GAAG,QAAQ,gBAAO;AAEtC,SAASD,OAAO,IAAIE,MAAM,QAAQ,mBAAU;AAE5C,SAASF,OAAO,IAAIG,MAAM,QAAQ,mBAAU;AAE5C,SAASH,OAAO,IAAII,KAAK,QAAQ,kBAAS;AAG1C;AACA,SAASJ,OAAO,IAAIK,IAAI,QAAQ,iBAAQ;AAExC,SAASL,OAAO,IAAIM,MAAM,QAAQ,mBAAU;AAG5C,SAASN,OAAO,IAAIO,OAAO,QAAQ,oBAAW;AAC9C,SAASP,OAAO,IAAIQ,QAAQ,QAAQ,sBAAa;AACjD,SAASR,OAAO,IAAIS,SAAS,QAAQ,sBAAa;AAGlD;AACA,SAAST,OAAO,IAAIU,MAAM,QAAQ,mBAAU;AAG5C,SAASV,OAAO,IAAIW,aAAa,QAAQ,2BAAkB;AAG3D;AACA,SAASX,OAAO,IAAIY,KAAK,QAAQ,kBAAS;AAG1C,SAASZ,OAAO,IAAIa,IAAI,QAAQ,iBAAQ;AAGxC,SAASb,OAAO,IAAIc,WAAW,QAAQ,yBAAgB;AAMvD,SAASd,OAAO,IAAIe,OAAO,QAAQ,oBAAW;AAG9C,SAASf,OAAO,IAAIgB,IAAI,QAAQ,iBAAQ","ignoreList":[]}
1
+ {"version":3,"names":["ConfigProvider","useTokens","defaultTokens","mergeStyles","default","Row","Column","Center","Space","Text","Button","Divider","ListItem","Touchable","Avatar","WaveAnimation","Input","Chip","Tag","ActionSheet","Popover","Menu"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA;AACA,SAASA,cAAc,EAAEC,SAAS,QAAQ,oBAAiB;AAE3D,SAASC,aAAa,QAAQ,mBAAgB;AAG9C;AACA,SAASC,WAAW,QAAQ,kBAAS;;AAErC;AACA,SAASC,OAAO,IAAIC,GAAG,QAAQ,gBAAO;AAEtC,SAASD,OAAO,IAAIE,MAAM,QAAQ,mBAAU;AAE5C,SAASF,OAAO,IAAIG,MAAM,QAAQ,mBAAU;AAE5C,SAASH,OAAO,IAAII,KAAK,QAAQ,kBAAS;AAG1C;AACA,SAASJ,OAAO,IAAIK,IAAI,QAAQ,iBAAQ;AAExC,SAASL,OAAO,IAAIM,MAAM,QAAQ,mBAAU;AAG5C,SAASN,OAAO,IAAIO,OAAO,QAAQ,oBAAW;AAC9C,SAASP,OAAO,IAAIQ,QAAQ,QAAQ,sBAAa;AACjD,SAASR,OAAO,IAAIS,SAAS,QAAQ,sBAAa;AAGlD;AACA,SAAST,OAAO,IAAIU,MAAM,QAAQ,mBAAU;AAG5C,SAASV,OAAO,IAAIW,aAAa,QAAQ,2BAAkB;AAG3D;AACA,SAASX,OAAO,IAAIY,KAAK,QAAQ,kBAAS;AAG1C,SAASZ,OAAO,IAAIa,IAAI,QAAQ,iBAAQ;AAGxC,SAASb,OAAO,IAAIc,GAAG,QAAQ,gBAAO;AAGtC,SAASd,OAAO,IAAIe,WAAW,QAAQ,yBAAgB;AAMvD,SAASf,OAAO,IAAIgB,OAAO,QAAQ,oBAAW;AAG9C,SAAShB,OAAO,IAAIiB,IAAI,QAAQ,iBAAQ","ignoreList":[]}
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Tag 标签组件
5
+ *
6
+ * 信息展示标签,支持三种变体:
7
+ * - filled(默认):浅色底 + 深色字
8
+ * - solid:纯色底 + 白字
9
+ * - outlined:边框 + 深色字
10
+ *
11
+ * color 支持预设语义色(success/processing/warning/error/default)或自定义 hex。
12
+ */
13
+
14
+ import React, { useMemo } from 'react';
15
+ import { View, Text } from 'react-native';
16
+ import { mergeStyles } from "../hooks/index.js";
17
+ import { useTokens } from "../theme/context.js";
18
+ import { createDefaultStyles, createSmallStyles, createFilledStyles, createSolidStyles, createOutlinedStyles, resolveColor } from "./style/index.js";
19
+ import { jsx as _jsx } from "react/jsx-runtime";
20
+ const Tag = ({
21
+ children,
22
+ variant = 'filled',
23
+ color,
24
+ size = 'default',
25
+ style,
26
+ styles: semanticStyles,
27
+ testID
28
+ }) => {
29
+ const tokens = useTokens();
30
+ const resolved = resolveColor(color);
31
+ const s = useMemo(() => {
32
+ let variantStyles;
33
+ if (variant === 'solid') {
34
+ variantStyles = createSolidStyles(resolved);
35
+ } else if (variant === 'outlined') {
36
+ variantStyles = createOutlinedStyles(resolved);
37
+ } else {
38
+ variantStyles = createFilledStyles(resolved);
39
+ }
40
+ return mergeStyles(createDefaultStyles(tokens), size === 'small' ? createSmallStyles() : undefined, variantStyles, semanticStyles);
41
+ }, [variant, resolved, size, tokens, semanticStyles]);
42
+ return /*#__PURE__*/_jsx(View, {
43
+ style: [s.root, style],
44
+ testID: testID,
45
+ children: typeof children === 'string' ? /*#__PURE__*/_jsx(Text, {
46
+ style: s.content,
47
+ children: children
48
+ }) : children
49
+ });
50
+ };
51
+ export default Tag;
52
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","useMemo","View","Text","mergeStyles","useTokens","createDefaultStyles","createSmallStyles","createFilledStyles","createSolidStyles","createOutlinedStyles","resolveColor","jsx","_jsx","Tag","children","variant","color","size","style","styles","semanticStyles","testID","tokens","resolved","s","variantStyles","undefined","root","content"],"sourceRoot":"../../../src","sources":["tag/index.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAOA,KAAK,IAAIC,OAAO,QAAQ,OAAO;AACtC,SAASC,IAAI,EAAEC,IAAI,QAAQ,cAAc;AAEzC,SAASC,WAAW,QAAQ,mBAAU;AACtC,SAASC,SAAS,QAAQ,qBAAkB;AAE5C,SACEC,mBAAmB,EACnBC,iBAAiB,EACjBC,kBAAkB,EAClBC,iBAAiB,EACjBC,oBAAoB,EACpBC,YAAY,QACP,kBAAS;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAYjB,MAAMC,GAAuB,GAAGA,CAAC;EAC/BC,QAAQ;EACRC,OAAO,GAAG,QAAQ;EAClBC,KAAK;EACLC,IAAI,GAAG,SAAS;EAChBC,KAAK;EACLC,MAAM,EAAEC,cAAc;EACtBC;AACF,CAAC,KAAK;EACJ,MAAMC,MAAM,GAAGlB,SAAS,CAAC,CAAC;EAC1B,MAAMmB,QAAQ,GAAGb,YAAY,CAACM,KAAK,CAAC;EAEpC,MAAMQ,CAAC,GAAGxB,OAAO,CAAC,MAAM;IACtB,IAAIyB,aAAa;IACjB,IAAIV,OAAO,KAAK,OAAO,EAAE;MACvBU,aAAa,GAAGjB,iBAAiB,CAACe,QAAQ,CAAC;IAC7C,CAAC,MAAM,IAAIR,OAAO,KAAK,UAAU,EAAE;MACjCU,aAAa,GAAGhB,oBAAoB,CAACc,QAAQ,CAAC;IAChD,CAAC,MAAM;MACLE,aAAa,GAAGlB,kBAAkB,CAACgB,QAAQ,CAAC;IAC9C;IAEA,OAAOpB,WAAW,CAChBE,mBAAmB,CAACiB,MAAM,CAAC,EAC3BL,IAAI,KAAK,OAAO,GAAGX,iBAAiB,CAAC,CAAC,GAAGoB,SAAS,EAClDD,aAAa,EACbL,cACF,CAAC;EACH,CAAC,EAAE,CAACL,OAAO,EAAEQ,QAAQ,EAAEN,IAAI,EAAEK,MAAM,EAAEF,cAAc,CAAC,CAAC;EAErD,oBACER,IAAA,CAACX,IAAI;IAACiB,KAAK,EAAE,CAACM,CAAC,CAACG,IAAI,EAAET,KAAK,CAAE;IAACG,MAAM,EAAEA,MAAO;IAAAP,QAAA,EAC1C,OAAOA,QAAQ,KAAK,QAAQ,gBAC3BF,IAAA,CAACV,IAAI;MAACgB,KAAK,EAAEM,CAAC,CAACI,OAAQ;MAAAd,QAAA,EAAEA;IAAQ,CAAO,CAAC,GAEzCA;EACD,CACG,CAAC;AAEX,CAAC;AAED,eAAeD,GAAG","ignoreList":[]}
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+
3
+ /** 预设语义色 → 实际色值映射 */
4
+ const PRESET_COLORS = {
5
+ success: '#52C41A',
6
+ processing: '#1677FF',
7
+ warning: '#FF9500',
8
+ error: '#FF3B30',
9
+ default: '#8C8C8C'
10
+ };
11
+ /** 解析颜色:支持预设名或自定义 hex */
12
+ export function resolveColor(color) {
13
+ if (!color) return PRESET_COLORS.default;
14
+ if (color in PRESET_COLORS) return PRESET_COLORS[color];
15
+ return color;
16
+ }
17
+
18
+ /**
19
+ * 十六进制颜色追加透明度
20
+ * '#1677FF' + 0.1 → '#1677FF1A'
21
+ */
22
+ function withAlpha(hex, alpha) {
23
+ const a = Math.round(alpha * 255).toString(16).padStart(2, '0');
24
+ const base = hex.length === 9 ? hex.slice(0, 7) : hex;
25
+ return `${base}${a}`;
26
+ }
27
+ export const createDefaultStyles = t => ({
28
+ root: {
29
+ flexDirection: 'row',
30
+ alignItems: 'center',
31
+ alignSelf: 'flex-start',
32
+ borderRadius: t.radiusSm,
33
+ paddingHorizontal: 8,
34
+ paddingVertical: 2
35
+ },
36
+ content: {
37
+ fontSize: t.fontSizeXs
38
+ }
39
+ });
40
+ export const createSmallStyles = () => ({
41
+ root: {
42
+ paddingHorizontal: 6,
43
+ paddingVertical: 1
44
+ },
45
+ content: {
46
+ fontSize: 10
47
+ }
48
+ });
49
+
50
+ /** filled: 浅色底 + 深色字(默认) */
51
+ export const createFilledStyles = color => ({
52
+ root: {
53
+ backgroundColor: withAlpha(color, 0.1)
54
+ },
55
+ content: {
56
+ color
57
+ }
58
+ });
59
+
60
+ /** solid: 纯色底 + 白字 */
61
+ export const createSolidStyles = color => ({
62
+ root: {
63
+ backgroundColor: color
64
+ },
65
+ content: {
66
+ color: '#FFFFFF'
67
+ }
68
+ });
69
+
70
+ /** outlined: 边框 + 深色字 + 透明底 */
71
+ export const createOutlinedStyles = color => ({
72
+ root: {
73
+ backgroundColor: 'transparent',
74
+ borderWidth: 1,
75
+ borderColor: color
76
+ },
77
+ content: {
78
+ color
79
+ }
80
+ });
81
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["PRESET_COLORS","success","processing","warning","error","default","resolveColor","color","withAlpha","hex","alpha","a","Math","round","toString","padStart","base","length","slice","createDefaultStyles","t","root","flexDirection","alignItems","alignSelf","borderRadius","radiusSm","paddingHorizontal","paddingVertical","content","fontSize","fontSizeXs","createSmallStyles","createFilledStyles","backgroundColor","createSolidStyles","createOutlinedStyles","borderWidth","borderColor"],"sourceRoot":"../../../../src","sources":["tag/style/index.tsx"],"mappings":";;AAQA;AACA,MAAMA,aAAa,GAAG;EACpBC,OAAO,EAAE,SAAS;EAClBC,UAAU,EAAE,SAAS;EACrBC,OAAO,EAAE,SAAS;EAClBC,KAAK,EAAE,SAAS;EAChBC,OAAO,EAAE;AACX,CAAU;AAIV;AACA,OAAO,SAASC,YAAYA,CAACC,KAAyB,EAAU;EAC9D,IAAI,CAACA,KAAK,EAAE,OAAOP,aAAa,CAACK,OAAO;EACxC,IAAIE,KAAK,IAAIP,aAAa,EAAE,OAAOA,aAAa,CAACO,KAAK,CAAe;EACrE,OAAOA,KAAK;AACd;;AAEA;AACA;AACA;AACA;AACA,SAASC,SAASA,CAACC,GAAW,EAAEC,KAAa,EAAU;EACrD,MAAMC,CAAC,GAAGC,IAAI,CAACC,KAAK,CAACH,KAAK,GAAG,GAAG,CAAC,CAC9BI,QAAQ,CAAC,EAAE,CAAC,CACZC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;EACnB,MAAMC,IAAI,GAAGP,GAAG,CAACQ,MAAM,KAAK,CAAC,GAAGR,GAAG,CAACS,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAGT,GAAG;EACrD,OAAO,GAAGO,IAAI,GAAGL,CAAC,EAAE;AACtB;AAEA,OAAO,MAAMQ,mBAAmB,GAAIC,CAAS,KAAyB;EACpEC,IAAI,EAAE;IACJC,aAAa,EAAE,KAAK;IACpBC,UAAU,EAAE,QAAQ;IACpBC,SAAS,EAAE,YAAY;IACvBC,YAAY,EAAEL,CAAC,CAACM,QAAQ;IACxBC,iBAAiB,EAAE,CAAC;IACpBC,eAAe,EAAE;EACnB,CAAC;EACDC,OAAO,EAAE;IACPC,QAAQ,EAAEV,CAAC,CAACW;EACd;AACF,CAAC,CAAC;AAEF,OAAO,MAAMC,iBAAiB,GAAGA,CAAA,MAAmC;EAClEX,IAAI,EAAE;IACJM,iBAAiB,EAAE,CAAC;IACpBC,eAAe,EAAE;EACnB,CAAC;EACDC,OAAO,EAAE;IACPC,QAAQ,EAAE;EACZ;AACF,CAAC,CAAC;;AAEF;AACA,OAAO,MAAMG,kBAAkB,GAC7B1B,KAAa,KACmB;EAChCc,IAAI,EAAE;IACJa,eAAe,EAAE1B,SAAS,CAACD,KAAK,EAAE,GAAG;EACvC,CAAC;EACDsB,OAAO,EAAE;IACPtB;EACF;AACF,CAAC,CAAC;;AAEF;AACA,OAAO,MAAM4B,iBAAiB,GAC5B5B,KAAa,KACmB;EAChCc,IAAI,EAAE;IACJa,eAAe,EAAE3B;EACnB,CAAC;EACDsB,OAAO,EAAE;IACPtB,KAAK,EAAE;EACT;AACF,CAAC,CAAC;;AAEF;AACA,OAAO,MAAM6B,oBAAoB,GAC/B7B,KAAa,KACmB;EAChCc,IAAI,EAAE;IACJa,eAAe,EAAE,aAAa;IAC9BG,WAAW,EAAE,CAAC;IACdC,WAAW,EAAE/B;EACf,CAAC;EACDsB,OAAO,EAAE;IACPtB;EACF;AACF,CAAC,CAAC","ignoreList":[]}
@@ -31,6 +31,9 @@ export type { InputSemanticStyles } from './input/style';
31
31
  export { default as Chip } from './chip';
32
32
  export type { ChipProps } from './chip';
33
33
  export type { ChipSemanticStyles } from './chip/style';
34
+ export { default as Tag } from './tag';
35
+ export type { TagProps } from './tag';
36
+ export type { TagSemanticStyles } from './tag/style';
34
37
  export { default as ActionSheet } from './action-sheet';
35
38
  export type { ActionSheetProps } from './action-sheet';
36
39
  export type { ActionSheetOption, ActionSheetSemanticStyles, } from './action-sheet/style';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5D,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,YAAY,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAG7C,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAGtC,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,OAAO,CAAC;AACvC,YAAY,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAC7C,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAC7C,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAG1C,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAC;AACzC,YAAY,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAC7C,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,YAAY,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAC7C,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,YAAY,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC5D,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAG3D,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,YAAY,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAC;AACzC,YAAY,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACxC,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACxD,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,YAAY,EACV,iBAAiB,EACjB,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,WAAW,CAAC;AAC/C,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,YAAY,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAC;AACzC,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Tag 标签组件
3
+ *
4
+ * 信息展示标签,支持三种变体:
5
+ * - filled(默认):浅色底 + 深色字
6
+ * - solid:纯色底 + 白字
7
+ * - outlined:边框 + 深色字
8
+ *
9
+ * color 支持预设语义色(success/processing/warning/error/default)或自定义 hex。
10
+ */
11
+ import React from 'react';
12
+ import type { ViewStyle } from 'react-native';
13
+ import type { TagSemanticStyles } from './style';
14
+ export interface TagProps {
15
+ children: React.ReactNode;
16
+ variant?: 'filled' | 'solid' | 'outlined';
17
+ color?: string;
18
+ size?: 'default' | 'small';
19
+ style?: ViewStyle;
20
+ styles?: Partial<TagSemanticStyles>;
21
+ testID?: string;
22
+ }
23
+ declare const Tag: React.FC<TagProps>;
24
+ export default Tag;
25
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/tag/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAkB,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAG9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAUjD,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,OAAO,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,UAAU,CAAC;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IAC3B,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,QAAA,MAAM,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC,QAAQ,CAuC3B,CAAC;AAEF,eAAe,GAAG,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { ViewStyle, TextStyle } from 'react-native';
2
+ import type { Tokens } from '../../theme/tokens';
3
+ export type TagSemanticStyles = {
4
+ root?: ViewStyle;
5
+ content?: TextStyle;
6
+ };
7
+ /** 解析颜色:支持预设名或自定义 hex */
8
+ export declare function resolveColor(color: string | undefined): string;
9
+ export declare const createDefaultStyles: (t: Tokens) => TagSemanticStyles;
10
+ export declare const createSmallStyles: () => Partial<TagSemanticStyles>;
11
+ /** filled: 浅色底 + 深色字(默认) */
12
+ export declare const createFilledStyles: (color: string) => Partial<TagSemanticStyles>;
13
+ /** solid: 纯色底 + 白字 */
14
+ export declare const createSolidStyles: (color: string) => Partial<TagSemanticStyles>;
15
+ /** outlined: 边框 + 深色字 + 透明底 */
16
+ export declare const createOutlinedStyles: (color: string) => Partial<TagSemanticStyles>;
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/tag/style/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB,CAAC;AAaF,yBAAyB;AACzB,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAI9D;AAcD,eAAO,MAAM,mBAAmB,GAAI,GAAG,MAAM,KAAG,iBAY9C,CAAC;AAEH,eAAO,MAAM,iBAAiB,QAAO,OAAO,CAAC,iBAAiB,CAQ5D,CAAC;AAEH,4BAA4B;AAC5B,eAAO,MAAM,kBAAkB,GAC7B,OAAO,MAAM,KACZ,OAAO,CAAC,iBAAiB,CAO1B,CAAC;AAEH,sBAAsB;AACtB,eAAO,MAAM,iBAAiB,GAC5B,OAAO,MAAM,KACZ,OAAO,CAAC,iBAAiB,CAO1B,CAAC;AAEH,+BAA+B;AAC/B,eAAO,MAAM,oBAAoB,GAC/B,OAAO,MAAM,KACZ,OAAO,CAAC,iBAAiB,CAS1B,CAAC"}
@@ -31,6 +31,9 @@ export type { InputSemanticStyles } from './input/style';
31
31
  export { default as Chip } from './chip';
32
32
  export type { ChipProps } from './chip';
33
33
  export type { ChipSemanticStyles } from './chip/style';
34
+ export { default as Tag } from './tag';
35
+ export type { TagProps } from './tag';
36
+ export type { TagSemanticStyles } from './tag/style';
34
37
  export { default as ActionSheet } from './action-sheet';
35
38
  export type { ActionSheetProps } from './action-sheet';
36
39
  export type { ActionSheetOption, ActionSheetSemanticStyles, } from './action-sheet/style';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5D,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,YAAY,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAG7C,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAGtC,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,OAAO,CAAC;AACvC,YAAY,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAC7C,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAC7C,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAG1C,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAC;AACzC,YAAY,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAC7C,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,YAAY,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAC7C,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,YAAY,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC5D,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAG3D,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,YAAY,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAC;AACzC,YAAY,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACxC,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACxD,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,YAAY,EACV,iBAAiB,EACjB,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,WAAW,CAAC;AAC/C,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,YAAY,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,QAAQ,CAAC;AACzC,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Tag 标签组件
3
+ *
4
+ * 信息展示标签,支持三种变体:
5
+ * - filled(默认):浅色底 + 深色字
6
+ * - solid:纯色底 + 白字
7
+ * - outlined:边框 + 深色字
8
+ *
9
+ * color 支持预设语义色(success/processing/warning/error/default)或自定义 hex。
10
+ */
11
+ import React from 'react';
12
+ import type { ViewStyle } from 'react-native';
13
+ import type { TagSemanticStyles } from './style';
14
+ export interface TagProps {
15
+ children: React.ReactNode;
16
+ variant?: 'filled' | 'solid' | 'outlined';
17
+ color?: string;
18
+ size?: 'default' | 'small';
19
+ style?: ViewStyle;
20
+ styles?: Partial<TagSemanticStyles>;
21
+ testID?: string;
22
+ }
23
+ declare const Tag: React.FC<TagProps>;
24
+ export default Tag;
25
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/tag/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAkB,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAG9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAUjD,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,OAAO,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,UAAU,CAAC;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IAC3B,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,QAAA,MAAM,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC,QAAQ,CAuC3B,CAAC;AAEF,eAAe,GAAG,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { ViewStyle, TextStyle } from 'react-native';
2
+ import type { Tokens } from '../../theme/tokens';
3
+ export type TagSemanticStyles = {
4
+ root?: ViewStyle;
5
+ content?: TextStyle;
6
+ };
7
+ /** 解析颜色:支持预设名或自定义 hex */
8
+ export declare function resolveColor(color: string | undefined): string;
9
+ export declare const createDefaultStyles: (t: Tokens) => TagSemanticStyles;
10
+ export declare const createSmallStyles: () => Partial<TagSemanticStyles>;
11
+ /** filled: 浅色底 + 深色字(默认) */
12
+ export declare const createFilledStyles: (color: string) => Partial<TagSemanticStyles>;
13
+ /** solid: 纯色底 + 白字 */
14
+ export declare const createSolidStyles: (color: string) => Partial<TagSemanticStyles>;
15
+ /** outlined: 边框 + 深色字 + 透明底 */
16
+ export declare const createOutlinedStyles: (color: string) => Partial<TagSemanticStyles>;
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/tag/style/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB,CAAC;AAaF,yBAAyB;AACzB,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAI9D;AAcD,eAAO,MAAM,mBAAmB,GAAI,GAAG,MAAM,KAAG,iBAY9C,CAAC;AAEH,eAAO,MAAM,iBAAiB,QAAO,OAAO,CAAC,iBAAiB,CAQ5D,CAAC;AAEH,4BAA4B;AAC5B,eAAO,MAAM,kBAAkB,GAC7B,OAAO,MAAM,KACZ,OAAO,CAAC,iBAAiB,CAO1B,CAAC;AAEH,sBAAsB;AACtB,eAAO,MAAM,iBAAiB,GAC5B,OAAO,MAAM,KACZ,OAAO,CAAC,iBAAiB,CAO1B,CAAC;AAEH,+BAA+B;AAC/B,eAAO,MAAM,oBAAoB,GAC/B,OAAO,MAAM,KACZ,OAAO,CAAC,iBAAiB,CAS1B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unif/react-native-ui",
3
- "version": "0.2.30",
3
+ "version": "0.3.2",
4
4
  "description": "UNIF React Native UI Components",
5
5
  "main": "./lib/commonjs/index.js",
6
6
  "module": "./lib/module/index.js",
package/src/index.tsx CHANGED
@@ -42,6 +42,9 @@ export type { InputSemanticStyles } from './input/style';
42
42
  export { default as Chip } from './chip';
43
43
  export type { ChipProps } from './chip';
44
44
  export type { ChipSemanticStyles } from './chip/style';
45
+ export { default as Tag } from './tag';
46
+ export type { TagProps } from './tag';
47
+ export type { TagSemanticStyles } from './tag/style';
45
48
  export { default as ActionSheet } from './action-sheet';
46
49
  export type { ActionSheetProps } from './action-sheet';
47
50
  export type {
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Tag 标签组件
3
+ *
4
+ * 信息展示标签,支持三种变体:
5
+ * - filled(默认):浅色底 + 深色字
6
+ * - solid:纯色底 + 白字
7
+ * - outlined:边框 + 深色字
8
+ *
9
+ * color 支持预设语义色(success/processing/warning/error/default)或自定义 hex。
10
+ */
11
+
12
+ import React, { useMemo } from 'react';
13
+ import { View, Text } from 'react-native';
14
+ import type { ViewStyle } from 'react-native';
15
+ import { mergeStyles } from '../hooks';
16
+ import { useTokens } from '../theme/context';
17
+ import type { TagSemanticStyles } from './style';
18
+ import {
19
+ createDefaultStyles,
20
+ createSmallStyles,
21
+ createFilledStyles,
22
+ createSolidStyles,
23
+ createOutlinedStyles,
24
+ resolveColor,
25
+ } from './style';
26
+
27
+ export interface TagProps {
28
+ children: React.ReactNode;
29
+ variant?: 'filled' | 'solid' | 'outlined';
30
+ color?: string;
31
+ size?: 'default' | 'small';
32
+ style?: ViewStyle;
33
+ styles?: Partial<TagSemanticStyles>;
34
+ testID?: string;
35
+ }
36
+
37
+ const Tag: React.FC<TagProps> = ({
38
+ children,
39
+ variant = 'filled',
40
+ color,
41
+ size = 'default',
42
+ style,
43
+ styles: semanticStyles,
44
+ testID,
45
+ }) => {
46
+ const tokens = useTokens();
47
+ const resolved = resolveColor(color);
48
+
49
+ const s = useMemo(() => {
50
+ let variantStyles;
51
+ if (variant === 'solid') {
52
+ variantStyles = createSolidStyles(resolved);
53
+ } else if (variant === 'outlined') {
54
+ variantStyles = createOutlinedStyles(resolved);
55
+ } else {
56
+ variantStyles = createFilledStyles(resolved);
57
+ }
58
+
59
+ return mergeStyles<TagSemanticStyles>(
60
+ createDefaultStyles(tokens),
61
+ size === 'small' ? createSmallStyles() : undefined,
62
+ variantStyles,
63
+ semanticStyles
64
+ );
65
+ }, [variant, resolved, size, tokens, semanticStyles]);
66
+
67
+ return (
68
+ <View style={[s.root, style]} testID={testID}>
69
+ {typeof children === 'string' ? (
70
+ <Text style={s.content}>{children}</Text>
71
+ ) : (
72
+ children
73
+ )}
74
+ </View>
75
+ );
76
+ };
77
+
78
+ export default Tag;
@@ -0,0 +1,99 @@
1
+ import type { ViewStyle, TextStyle } from 'react-native';
2
+ import type { Tokens } from '../../theme/tokens';
3
+
4
+ export type TagSemanticStyles = {
5
+ root?: ViewStyle;
6
+ content?: TextStyle;
7
+ };
8
+
9
+ /** 预设语义色 → 实际色值映射 */
10
+ const PRESET_COLORS = {
11
+ success: '#52C41A',
12
+ processing: '#1677FF',
13
+ warning: '#FF9500',
14
+ error: '#FF3B30',
15
+ default: '#8C8C8C',
16
+ } as const;
17
+
18
+ type PresetName = keyof typeof PRESET_COLORS;
19
+
20
+ /** 解析颜色:支持预设名或自定义 hex */
21
+ export function resolveColor(color: string | undefined): string {
22
+ if (!color) return PRESET_COLORS.default;
23
+ if (color in PRESET_COLORS) return PRESET_COLORS[color as PresetName];
24
+ return color;
25
+ }
26
+
27
+ /**
28
+ * 十六进制颜色追加透明度
29
+ * '#1677FF' + 0.1 → '#1677FF1A'
30
+ */
31
+ function withAlpha(hex: string, alpha: number): string {
32
+ const a = Math.round(alpha * 255)
33
+ .toString(16)
34
+ .padStart(2, '0');
35
+ const base = hex.length === 9 ? hex.slice(0, 7) : hex;
36
+ return `${base}${a}`;
37
+ }
38
+
39
+ export const createDefaultStyles = (t: Tokens): TagSemanticStyles => ({
40
+ root: {
41
+ flexDirection: 'row',
42
+ alignItems: 'center',
43
+ alignSelf: 'flex-start',
44
+ borderRadius: t.radiusSm,
45
+ paddingHorizontal: 8,
46
+ paddingVertical: 2,
47
+ },
48
+ content: {
49
+ fontSize: t.fontSizeXs,
50
+ },
51
+ });
52
+
53
+ export const createSmallStyles = (): Partial<TagSemanticStyles> => ({
54
+ root: {
55
+ paddingHorizontal: 6,
56
+ paddingVertical: 1,
57
+ },
58
+ content: {
59
+ fontSize: 10,
60
+ },
61
+ });
62
+
63
+ /** filled: 浅色底 + 深色字(默认) */
64
+ export const createFilledStyles = (
65
+ color: string
66
+ ): Partial<TagSemanticStyles> => ({
67
+ root: {
68
+ backgroundColor: withAlpha(color, 0.1),
69
+ },
70
+ content: {
71
+ color,
72
+ },
73
+ });
74
+
75
+ /** solid: 纯色底 + 白字 */
76
+ export const createSolidStyles = (
77
+ color: string
78
+ ): Partial<TagSemanticStyles> => ({
79
+ root: {
80
+ backgroundColor: color,
81
+ },
82
+ content: {
83
+ color: '#FFFFFF',
84
+ },
85
+ });
86
+
87
+ /** outlined: 边框 + 深色字 + 透明底 */
88
+ export const createOutlinedStyles = (
89
+ color: string
90
+ ): Partial<TagSemanticStyles> => ({
91
+ root: {
92
+ backgroundColor: 'transparent',
93
+ borderWidth: 1,
94
+ borderColor: color,
95
+ },
96
+ content: {
97
+ color,
98
+ },
99
+ });