@multiplatform.one/frappe-ui 7.37.0 → 7.38.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/record/RecordBars.cjs +4 -1
- package/dist/cjs/record/RecordBars.native.js +5 -1
- package/dist/cjs/record/RecordBars.native.js.map +1 -1
- package/dist/cjs/record/RecordPager.cjs +64 -45
- package/dist/cjs/record/RecordPager.native.js +65 -45
- package/dist/cjs/record/RecordPager.native.js.map +1 -1
- package/dist/esm/record/RecordBars.mjs +5 -2
- package/dist/esm/record/RecordBars.mjs.map +1 -1
- package/dist/esm/record/RecordBars.native.js +6 -2
- package/dist/esm/record/RecordBars.native.js.map +1 -1
- package/dist/esm/record/RecordPager.mjs +66 -47
- package/dist/esm/record/RecordPager.mjs.map +1 -1
- package/dist/esm/record/RecordPager.native.js +67 -47
- package/dist/esm/record/RecordPager.native.js.map +1 -1
- package/dist/jsx/record/RecordBars.mjs +5 -2
- package/dist/jsx/record/RecordBars.mjs.map +1 -1
- package/dist/jsx/record/RecordBars.native.js +5 -1
- package/dist/jsx/record/RecordBars.native.js.map +1 -1
- package/dist/jsx/record/RecordPager.mjs +66 -47
- package/dist/jsx/record/RecordPager.mjs.map +1 -1
- package/dist/jsx/record/RecordPager.native.js +65 -45
- package/dist/jsx/record/RecordPager.native.js.map +1 -1
- package/package.json +16 -16
- package/src/record/RecordBars.spec.tsx +64 -0
- package/src/record/RecordBars.tsx +12 -2
- package/src/record/RecordPager.spec.tsx +37 -0
- package/src/record/RecordPager.tsx +46 -34
- package/types/record/RecordBars.d.ts.map +1 -1
- package/types/record/RecordPager.d.ts.map +1 -1
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { Avatar, Text, XStack, YStack } from "@multiplatform.one/components";
|
|
2
|
-
import {
|
|
3
|
-
import { sizeRecipeEscape, useResolvedKnobs } from "@multiplatform.one/theme";
|
|
1
|
+
import { Avatar, Text, XStack, YStack, isWeb, useTheme } from "@multiplatform.one/components";
|
|
2
|
+
import { useResolvedKnobs } from "@multiplatform.one/theme";
|
|
4
3
|
import { ArrowLeftIcon, ArrowRightIcon } from "@phosphor-icons/react";
|
|
5
4
|
import { useTranslation } from "react-i18next";
|
|
6
5
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -12,61 +11,73 @@ function PagerButton({
|
|
|
12
11
|
const {
|
|
13
12
|
t
|
|
14
13
|
} = useTranslation();
|
|
14
|
+
const theme = useTheme();
|
|
15
15
|
const {
|
|
16
|
-
knobProps
|
|
16
|
+
knobProps,
|
|
17
|
+
control
|
|
17
18
|
} = useResolvedKnobs();
|
|
18
19
|
const isPrev = direction === "prev";
|
|
20
|
+
const label = isPrev ? t("Previous") : t("Next");
|
|
21
|
+
const Arrow = isPrev ? ArrowLeftIcon : ArrowRightIcon;
|
|
19
22
|
const avatar = /* @__PURE__ */jsx(Avatar, {
|
|
20
23
|
src: entry.image,
|
|
21
24
|
name: entry.title,
|
|
22
25
|
backgroundColor: "$color4",
|
|
23
26
|
fallbackBackgroundColor: "$color4"
|
|
24
27
|
});
|
|
25
|
-
return /* @__PURE__ */
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
28
|
+
return /* @__PURE__ */jsxs(YStack, {
|
|
29
|
+
...(isWeb ? {
|
|
30
|
+
render: /* @__PURE__ */jsx("button", {
|
|
31
|
+
type: "button"
|
|
32
|
+
})
|
|
33
|
+
} : {}),
|
|
34
|
+
role: "button",
|
|
35
|
+
tabIndex: 0,
|
|
36
|
+
"aria-label": [label, entry.code, entry.title].filter(Boolean).join(" "),
|
|
37
|
+
...knobProps.inputSurface,
|
|
38
|
+
...knobProps.containerRadius,
|
|
39
|
+
...knobProps.panelPadding,
|
|
40
|
+
...knobProps.gapSm,
|
|
41
|
+
backgroundColor: "$background",
|
|
42
|
+
borderColor: "$borderColor",
|
|
43
|
+
hoverStyle: control.hoverKnobProps,
|
|
44
|
+
pressStyle: control.pressKnobProps,
|
|
45
|
+
focusVisibleStyle: control.focusVisibleKnobProps,
|
|
46
|
+
flexGrow: 1,
|
|
47
|
+
flexBasis: 0,
|
|
29
48
|
minWidth: 0,
|
|
49
|
+
cursor: "pointer",
|
|
30
50
|
onPress: entry.onPress,
|
|
31
|
-
icon: isPrev ? /* @__PURE__ */jsx(ArrowLeftIcon, {
|
|
32
|
-
size: 18
|
|
33
|
-
}) : void 0,
|
|
34
|
-
iconAfter: isPrev ? void 0 : /* @__PURE__ */jsx(ArrowRightIcon, {
|
|
35
|
-
size: 18
|
|
36
|
-
}),
|
|
37
51
|
testID,
|
|
38
|
-
children: /* @__PURE__ */jsxs(XStack, {
|
|
39
|
-
|
|
52
|
+
children: [/* @__PURE__ */jsxs(XStack, {
|
|
53
|
+
...knobProps.gapSm,
|
|
40
54
|
alignItems: "center",
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
55
|
+
flexDirection: isPrev ? "row" : "row-reverse",
|
|
56
|
+
children: [/* @__PURE__ */jsx(Arrow, {
|
|
57
|
+
size: knobProps.controlIcon.width,
|
|
58
|
+
color: theme.color11?.val
|
|
59
|
+
}), /* @__PURE__ */jsx(Text, {
|
|
60
|
+
...knobProps.label,
|
|
61
|
+
color: "$color11",
|
|
62
|
+
numberOfLines: 1,
|
|
45
63
|
flexShrink: 1,
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
numberOfLines: 1,
|
|
64
|
-
flexShrink: 1,
|
|
65
|
-
children: entry.title
|
|
66
|
-
})]
|
|
67
|
-
})]
|
|
68
|
-
}), isPrev ? null : avatar]
|
|
69
|
-
})
|
|
64
|
+
children: label
|
|
65
|
+
})]
|
|
66
|
+
}), /* @__PURE__ */jsxs(XStack, {
|
|
67
|
+
...knobProps.gapSm,
|
|
68
|
+
alignItems: "center",
|
|
69
|
+
flexWrap: "wrap",
|
|
70
|
+
children: [avatar, entry.code ? /* @__PURE__ */jsx(Text, {
|
|
71
|
+
...knobProps.label,
|
|
72
|
+
color: "$color11",
|
|
73
|
+
children: entry.code
|
|
74
|
+
}) : null]
|
|
75
|
+
}), /* @__PURE__ */jsx(Text, {
|
|
76
|
+
...knobProps.body,
|
|
77
|
+
fontWeight: "700",
|
|
78
|
+
textAlign: "left",
|
|
79
|
+
children: entry.title
|
|
80
|
+
})]
|
|
70
81
|
});
|
|
71
82
|
}
|
|
72
83
|
function RecordPager({
|
|
@@ -79,18 +90,26 @@ function RecordPager({
|
|
|
79
90
|
} = useResolvedKnobs();
|
|
80
91
|
if (!prev && !next) return null;
|
|
81
92
|
return /* @__PURE__ */jsxs(XStack, {
|
|
82
|
-
justifyContent: "space-between",
|
|
83
93
|
...knobProps.gap,
|
|
84
94
|
marginTop: "$2",
|
|
95
|
+
alignItems: "stretch",
|
|
85
96
|
children: [prev ? /* @__PURE__ */jsx(PagerButton, {
|
|
86
97
|
direction: "prev",
|
|
87
98
|
entry: prev,
|
|
88
99
|
testID: testID && `${testID}-prev`
|
|
89
|
-
}) : /* @__PURE__ */jsx(YStack, {
|
|
100
|
+
}) : /* @__PURE__ */jsx(YStack, {
|
|
101
|
+
flexGrow: 1,
|
|
102
|
+
flexBasis: 0,
|
|
103
|
+
minWidth: 0
|
|
104
|
+
}), next ? /* @__PURE__ */jsx(PagerButton, {
|
|
90
105
|
direction: "next",
|
|
91
106
|
entry: next,
|
|
92
107
|
testID: testID && `${testID}-next`
|
|
93
|
-
}) : /* @__PURE__ */jsx(YStack, {
|
|
108
|
+
}) : /* @__PURE__ */jsx(YStack, {
|
|
109
|
+
flexGrow: 1,
|
|
110
|
+
flexBasis: 0,
|
|
111
|
+
minWidth: 0
|
|
112
|
+
})]
|
|
94
113
|
});
|
|
95
114
|
}
|
|
96
115
|
export { RecordPager };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Avatar","Text","XStack","YStack","
|
|
1
|
+
{"version":3,"names":["Avatar","Text","XStack","YStack","isWeb","useTheme","useResolvedKnobs","ArrowLeftIcon","ArrowRightIcon","useTranslation","jsx","jsxs","PagerButton","direction","entry","testID","t","theme","knobProps","control","isPrev","label","Arrow","avatar","src","image","name","title","backgroundColor","fallbackBackgroundColor","render","type","role","tabIndex","code","filter","Boolean","join","inputSurface","containerRadius","panelPadding","gapSm","borderColor","hoverStyle","hoverKnobProps","pressStyle","pressKnobProps","focusVisibleStyle","focusVisibleKnobProps","flexGrow","flexBasis","minWidth","cursor","onPress","children","alignItems","flexDirection","size","controlIcon","width","color","color11","val","numberOfLines","flexShrink","flexWrap","body","fontWeight","textAlign","RecordPager","prev","next","gap","marginTop"],"sources":["../../../src/record/RecordPager.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -29,7 +29,6 @@ __export(RecordPager_exports, {
|
|
|
29
29
|
module.exports = __toCommonJS(RecordPager_exports);
|
|
30
30
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
31
31
|
var import_components = require("@multiplatform.one/components");
|
|
32
|
-
var import_forms = require("@multiplatform.one/forms");
|
|
33
32
|
var import_theme = require("@multiplatform.one/theme");
|
|
34
33
|
var import_react = require("@phosphor-icons/react");
|
|
35
34
|
var import_react_i18next = require("react-i18next");
|
|
@@ -39,64 +38,77 @@ function PagerButton(param) {
|
|
|
39
38
|
entry,
|
|
40
39
|
testID
|
|
41
40
|
} = param;
|
|
41
|
+
var _theme_color11;
|
|
42
42
|
var {
|
|
43
43
|
t
|
|
44
44
|
} = (0, import_react_i18next.useTranslation)();
|
|
45
|
+
var theme = (0, import_components.useTheme)();
|
|
45
46
|
var {
|
|
46
|
-
knobProps
|
|
47
|
+
knobProps,
|
|
48
|
+
control
|
|
47
49
|
} = (0, import_theme.useResolvedKnobs)();
|
|
48
50
|
var isPrev = direction === "prev";
|
|
51
|
+
var label = isPrev ? t("Previous") : t("Next");
|
|
52
|
+
var Arrow = isPrev ? import_react.ArrowLeftIcon : import_react.ArrowRightIcon;
|
|
49
53
|
var avatar = /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.Avatar, {
|
|
50
54
|
src: entry.image,
|
|
51
55
|
name: entry.title,
|
|
52
56
|
backgroundColor: "$color4",
|
|
53
57
|
fallbackBackgroundColor: "$color4"
|
|
54
58
|
});
|
|
55
|
-
return /* @__PURE__ */(0, import_jsx_runtime.
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
+
return /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_components.YStack, {
|
|
60
|
+
...(import_components.isWeb ? {
|
|
61
|
+
render: /* @__PURE__ */(0, import_jsx_runtime.jsx)("button", {
|
|
62
|
+
type: "button"
|
|
63
|
+
})
|
|
64
|
+
} : {}),
|
|
65
|
+
role: "button",
|
|
66
|
+
tabIndex: 0,
|
|
67
|
+
"aria-label": [label, entry.code, entry.title].filter(Boolean).join(" "),
|
|
68
|
+
...knobProps.inputSurface,
|
|
69
|
+
...knobProps.containerRadius,
|
|
70
|
+
...knobProps.panelPadding,
|
|
71
|
+
...knobProps.gapSm,
|
|
72
|
+
backgroundColor: "$background",
|
|
73
|
+
borderColor: "$borderColor",
|
|
74
|
+
hoverStyle: control.hoverKnobProps,
|
|
75
|
+
pressStyle: control.pressKnobProps,
|
|
76
|
+
focusVisibleStyle: control.focusVisibleKnobProps,
|
|
77
|
+
flexGrow: 1,
|
|
78
|
+
flexBasis: 0,
|
|
59
79
|
minWidth: 0,
|
|
80
|
+
cursor: "pointer",
|
|
60
81
|
onPress: entry.onPress,
|
|
61
|
-
icon: isPrev ? /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_react.ArrowLeftIcon, {
|
|
62
|
-
size: 18
|
|
63
|
-
}) : void 0,
|
|
64
|
-
iconAfter: isPrev ? void 0 : /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_react.ArrowRightIcon, {
|
|
65
|
-
size: 18
|
|
66
|
-
}),
|
|
67
82
|
testID,
|
|
68
|
-
children: /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_components.XStack, {
|
|
69
|
-
|
|
83
|
+
children: [/* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_components.XStack, {
|
|
84
|
+
...knobProps.gapSm,
|
|
70
85
|
alignItems: "center",
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
86
|
+
flexDirection: isPrev ? "row" : "row-reverse",
|
|
87
|
+
children: [/* @__PURE__ */(0, import_jsx_runtime.jsx)(Arrow, {
|
|
88
|
+
size: knobProps.controlIcon.width,
|
|
89
|
+
color: (_theme_color11 = theme.color11) === null || _theme_color11 === void 0 ? void 0 : _theme_color11.val
|
|
90
|
+
}), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.Text, {
|
|
91
|
+
...knobProps.label,
|
|
92
|
+
color: "$color11",
|
|
93
|
+
numberOfLines: 1,
|
|
75
94
|
flexShrink: 1,
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
numberOfLines: 1,
|
|
94
|
-
flexShrink: 1,
|
|
95
|
-
children: entry.title
|
|
96
|
-
})]
|
|
97
|
-
})]
|
|
98
|
-
}), isPrev ? null : avatar]
|
|
99
|
-
})
|
|
95
|
+
children: label
|
|
96
|
+
})]
|
|
97
|
+
}), /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_components.XStack, {
|
|
98
|
+
...knobProps.gapSm,
|
|
99
|
+
alignItems: "center",
|
|
100
|
+
flexWrap: "wrap",
|
|
101
|
+
children: [avatar, entry.code ? /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.Text, {
|
|
102
|
+
...knobProps.label,
|
|
103
|
+
color: "$color11",
|
|
104
|
+
children: entry.code
|
|
105
|
+
}) : null]
|
|
106
|
+
}), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.Text, {
|
|
107
|
+
...knobProps.body,
|
|
108
|
+
fontWeight: "700",
|
|
109
|
+
textAlign: "left",
|
|
110
|
+
children: entry.title
|
|
111
|
+
})]
|
|
100
112
|
});
|
|
101
113
|
}
|
|
102
114
|
function RecordPager(param) {
|
|
@@ -110,18 +122,26 @@ function RecordPager(param) {
|
|
|
110
122
|
} = (0, import_theme.useResolvedKnobs)();
|
|
111
123
|
if (!prev && !next) return null;
|
|
112
124
|
return /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_components.XStack, {
|
|
113
|
-
justifyContent: "space-between",
|
|
114
125
|
...knobProps.gap,
|
|
115
126
|
marginTop: "$2",
|
|
127
|
+
alignItems: "stretch",
|
|
116
128
|
children: [prev ? /* @__PURE__ */(0, import_jsx_runtime.jsx)(PagerButton, {
|
|
117
129
|
direction: "prev",
|
|
118
130
|
entry: prev,
|
|
119
131
|
testID: testID && `${testID}-prev`
|
|
120
|
-
}) : /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.YStack, {
|
|
132
|
+
}) : /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.YStack, {
|
|
133
|
+
flexGrow: 1,
|
|
134
|
+
flexBasis: 0,
|
|
135
|
+
minWidth: 0
|
|
136
|
+
}), next ? /* @__PURE__ */(0, import_jsx_runtime.jsx)(PagerButton, {
|
|
121
137
|
direction: "next",
|
|
122
138
|
entry: next,
|
|
123
139
|
testID: testID && `${testID}-next`
|
|
124
|
-
}) : /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.YStack, {
|
|
140
|
+
}) : /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_components.YStack, {
|
|
141
|
+
flexGrow: 1,
|
|
142
|
+
flexBasis: 0,
|
|
143
|
+
minWidth: 0
|
|
144
|
+
})]
|
|
125
145
|
});
|
|
126
146
|
}
|
|
127
147
|
//# sourceMappingURL=RecordPager.native.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","RecordPager_exports","RecordPager","module","exports","import_jsx_runtime","require","import_components","
|
|
1
|
+
{"version":3,"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","RecordPager_exports","RecordPager","module","exports","import_jsx_runtime","require","import_components","import_theme","import_react","import_react_i18next","PagerButton","param","direction","entry","testID","_theme_color11","t","useTranslation","theme","useTheme","knobProps","control","useResolvedKnobs","isPrev","label","Arrow","ArrowLeftIcon","ArrowRightIcon","avatar","jsx","Avatar","src","image","title","backgroundColor","fallbackBackgroundColor","jsxs","YStack","isWeb","render","type","role","tabIndex","code","filter","Boolean","join","inputSurface","containerRadius","panelPadding","gapSm","borderColor","hoverStyle","hoverKnobProps","pressStyle","pressKnobProps","focusVisibleStyle","focusVisibleKnobProps","flexGrow","flexBasis","minWidth","cursor","onPress","children","XStack","alignItems","flexDirection","size","controlIcon","width","color","color11","val"],"sources":["../../../src/record/RecordPager.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@multiplatform.one/frappe-ui",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.38.0",
|
|
4
4
|
"description": "Pre-wired Tamagui components for Frappe doctypes with live data",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"cross-platform",
|
|
@@ -72,18 +72,18 @@
|
|
|
72
72
|
"access": "public"
|
|
73
73
|
},
|
|
74
74
|
"dependencies": {
|
|
75
|
-
"@multiplatform.one/components": "^7.
|
|
76
|
-
"@multiplatform.one/desktop": "^7.
|
|
77
|
-
"@multiplatform.one/forms": "^7.
|
|
78
|
-
"@multiplatform.one/frappe": "^7.
|
|
79
|
-
"@multiplatform.one/i18n": "^7.
|
|
80
|
-
"@multiplatform.one/markdown": "^7.
|
|
81
|
-
"@multiplatform.one/platform": "^7.
|
|
82
|
-
"@multiplatform.one/rich-text": "^7.
|
|
83
|
-
"@multiplatform.one/router": "^7.
|
|
84
|
-
"@multiplatform.one/store": "^7.
|
|
85
|
-
"@multiplatform.one/table": "^7.
|
|
86
|
-
"@multiplatform.one/theme": "^7.
|
|
75
|
+
"@multiplatform.one/components": "^7.38.0",
|
|
76
|
+
"@multiplatform.one/desktop": "^7.38.0",
|
|
77
|
+
"@multiplatform.one/forms": "^7.38.0",
|
|
78
|
+
"@multiplatform.one/frappe": "^7.38.0",
|
|
79
|
+
"@multiplatform.one/i18n": "^7.38.0",
|
|
80
|
+
"@multiplatform.one/markdown": "^7.38.0",
|
|
81
|
+
"@multiplatform.one/platform": "^7.38.0",
|
|
82
|
+
"@multiplatform.one/rich-text": "^7.38.0",
|
|
83
|
+
"@multiplatform.one/router": "^7.38.0",
|
|
84
|
+
"@multiplatform.one/store": "^7.38.0",
|
|
85
|
+
"@multiplatform.one/table": "^7.38.0",
|
|
86
|
+
"@multiplatform.one/theme": "^7.38.0",
|
|
87
87
|
"@phosphor-icons/react": "^2.1.10",
|
|
88
88
|
"@tamagui/colors": "2.7.6",
|
|
89
89
|
"@tanstack/db": "0.8.0",
|
|
@@ -100,9 +100,9 @@
|
|
|
100
100
|
"tamagui": "2.7.6"
|
|
101
101
|
},
|
|
102
102
|
"devDependencies": {
|
|
103
|
-
"@multiplatform.one/config": "7.
|
|
104
|
-
"@multiplatform.one/storybook": "7.
|
|
105
|
-
"@multiplatform.one/test-utils": "7.
|
|
103
|
+
"@multiplatform.one/config": "7.38.0",
|
|
104
|
+
"@multiplatform.one/storybook": "7.38.0",
|
|
105
|
+
"@multiplatform.one/test-utils": "7.38.0",
|
|
106
106
|
"@tamagui/build": "2.7.6",
|
|
107
107
|
"@testing-library/jest-dom": "^7.0.1",
|
|
108
108
|
"@testing-library/react": "^16.3.3",
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { createDefaultThemeConfig } from "@multiplatform.one/theme";
|
|
2
|
+
import { TamaguiProvider } from "tamagui";
|
|
3
|
+
import type { ReactElement } from "react";
|
|
4
|
+
import { cleanup, render } from "@testing-library/react";
|
|
5
|
+
import { afterEach, describe, expect, it } from "vitest";
|
|
6
|
+
import { RecordBars } from "./RecordBars";
|
|
7
|
+
import type { FrappeRecordBarsSection } from "./recordSections";
|
|
8
|
+
|
|
9
|
+
const config = createDefaultThemeConfig().tamagui;
|
|
10
|
+
function renderWithProviders(ui: ReactElement) {
|
|
11
|
+
return render(
|
|
12
|
+
<TamaguiProvider config={config} defaultTheme="light">
|
|
13
|
+
{ui}
|
|
14
|
+
</TamaguiProvider>,
|
|
15
|
+
);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const stats = [
|
|
19
|
+
{ stat: "HP", value: 45 },
|
|
20
|
+
{ stat: "Attack", value: 30 },
|
|
21
|
+
{ stat: "Defense", value: 35 },
|
|
22
|
+
{ stat: "Sp. Atk", value: 20 },
|
|
23
|
+
{ stat: "Sp. Def", value: 20 },
|
|
24
|
+
{ stat: "Speed", value: 45 },
|
|
25
|
+
];
|
|
26
|
+
const section: FrappeRecordBarsSection = {
|
|
27
|
+
kind: "bars",
|
|
28
|
+
id: "stats",
|
|
29
|
+
table: "stats",
|
|
30
|
+
label: "stat",
|
|
31
|
+
value: "value",
|
|
32
|
+
max: 255,
|
|
33
|
+
title: "Stats",
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
afterEach(cleanup);
|
|
37
|
+
|
|
38
|
+
describe("RecordBars", () => {
|
|
39
|
+
it.each([undefined, "lime", "missing-hue"])("paints every stat with tint %s", (tint) => {
|
|
40
|
+
const { container, getByRole } = renderWithProviders(
|
|
41
|
+
<RecordBars rows={stats} section={section} tint={tint} />,
|
|
42
|
+
);
|
|
43
|
+
const fills = container.querySelectorAll<HTMLElement>("[data-record-bar-fill]");
|
|
44
|
+
stats.forEach(({ stat, value }, index) => {
|
|
45
|
+
expect(getByRole("meter", { name: stat }).getAttribute("aria-valuenow")).toBe(String(value));
|
|
46
|
+
expect(getComputedStyle(fills[index]).width).toBe(`${(value / 255) * 100}%`);
|
|
47
|
+
const paintClass = (element: HTMLElement) =>
|
|
48
|
+
Array.from(element.classList).find((name) => name.startsWith("_bg-"));
|
|
49
|
+
expect(paintClass(fills[index])).toBeTruthy();
|
|
50
|
+
expect(paintClass(fills[index])).toBe(paintClass(fills[1]));
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
it("keeps a supported hue on the maximum bars", () => {
|
|
54
|
+
const { container } = renderWithProviders(
|
|
55
|
+
<RecordBars rows={stats} section={section} tint="blue" />,
|
|
56
|
+
);
|
|
57
|
+
const fills = container.querySelectorAll<HTMLElement>("[data-record-bar-fill]");
|
|
58
|
+
const paintClass = (element: HTMLElement) =>
|
|
59
|
+
Array.from(element.classList).find((name) => name.startsWith("_bg-"));
|
|
60
|
+
expect(paintClass(fills[0])).toBeTruthy();
|
|
61
|
+
expect(paintClass(fills[0])).not.toBe(paintClass(fills[1]));
|
|
62
|
+
expect(paintClass(fills[5])).toBe(paintClass(fills[0]));
|
|
63
|
+
});
|
|
64
|
+
});
|
|
@@ -1,4 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
Separator,
|
|
3
|
+
Text,
|
|
4
|
+
XStack,
|
|
5
|
+
YStack,
|
|
6
|
+
getTokens,
|
|
7
|
+
useTheme,
|
|
8
|
+
} from "@multiplatform.one/components";
|
|
2
9
|
import { useResolvedKnobs } from "@multiplatform.one/theme";
|
|
3
10
|
import { useTranslation } from "react-i18next";
|
|
4
11
|
import { childBars } from "./recordData";
|
|
@@ -27,6 +34,9 @@ export function RecordBars({
|
|
|
27
34
|
testID?: string;
|
|
28
35
|
}) {
|
|
29
36
|
const { t } = useTranslation();
|
|
37
|
+
const theme = useTheme();
|
|
38
|
+
const tintToken = `$${tint}9`;
|
|
39
|
+
const hasTint = tint && (theme[`${tint}9`]?.val || getTokens().color?.[tintToken]);
|
|
30
40
|
const { knobProps } = useResolvedKnobs();
|
|
31
41
|
const { knobProps: nested } = useResolvedKnobs();
|
|
32
42
|
const { bars, total } = childBars(rows, section);
|
|
@@ -52,7 +62,7 @@ export function RecordBars({
|
|
|
52
62
|
<YStack role="list" {...knobProps.gap}>
|
|
53
63
|
{bars.map((bar) => {
|
|
54
64
|
const percent = Math.max(0, Math.min(100, (bar.value / section.max) * 100));
|
|
55
|
-
const fill =
|
|
65
|
+
const fill = hasTint && bar.value === top ? tintToken : "$color9";
|
|
56
66
|
return (
|
|
57
67
|
<XStack
|
|
58
68
|
key={bar.key}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
2
|
+
import { cleanup, fireEvent } from "@testing-library/react";
|
|
3
|
+
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
4
|
+
import { RecordPager } from "./RecordPager";
|
|
5
|
+
|
|
6
|
+
afterEach(cleanup);
|
|
7
|
+
|
|
8
|
+
describe("RecordPager", () => {
|
|
9
|
+
it("uses growing, equal-width cards and preserves full record names", () => {
|
|
10
|
+
const previous = vi.fn();
|
|
11
|
+
const next = vi.fn();
|
|
12
|
+
const { getByRole, getByText } = renderWithProviders(
|
|
13
|
+
<RecordPager
|
|
14
|
+
prev={{ title: "Blastoise", code: "#009", onPress: previous }}
|
|
15
|
+
next={{ title: "Metapod", code: "#011", onPress: next }}
|
|
16
|
+
/>,
|
|
17
|
+
);
|
|
18
|
+
const cards = [
|
|
19
|
+
getByRole("button", { name: "Previous #009 Blastoise" }),
|
|
20
|
+
getByRole("button", { name: "Next #011 Metapod" }),
|
|
21
|
+
];
|
|
22
|
+
for (const card of cards) {
|
|
23
|
+
expect(card.tagName).toBe("BUTTON");
|
|
24
|
+
const style = getComputedStyle(card);
|
|
25
|
+
expect(style.height).not.toMatch(/\d/);
|
|
26
|
+
expect(style.flexBasis).toMatch(/^0(px|%)?$/);
|
|
27
|
+
expect(style.flexGrow).toBe("1");
|
|
28
|
+
}
|
|
29
|
+
for (const title of ["Blastoise", "Metapod"]) {
|
|
30
|
+
expect(getComputedStyle(getByText(title)).whiteSpace).not.toBe("nowrap");
|
|
31
|
+
}
|
|
32
|
+
fireEvent.click(cards[0]);
|
|
33
|
+
fireEvent.click(cards[1]);
|
|
34
|
+
expect(previous).toHaveBeenCalledOnce();
|
|
35
|
+
expect(next).toHaveBeenCalledOnce();
|
|
36
|
+
});
|
|
37
|
+
});
|