@compsych-ui-components/react-native 4.0.0 → 4.0.13
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/package.json +22 -14
- package/src/components/ActionSheet/index.d.ts +16 -0
- package/src/components/ActionSheet/index.js +256 -0
- package/src/components/ActionSheet/index.js.map +1 -0
- package/src/components/Alert/index.d.ts +24 -0
- package/src/components/Alert/index.js +304 -0
- package/src/components/Alert/index.js.map +1 -0
- package/src/components/Avatar/index.d.ts +22 -0
- package/src/components/Avatar/index.js +253 -0
- package/src/components/Avatar/index.js.map +1 -0
- package/src/components/Badge/index.d.ts +12 -0
- package/src/components/Badge/index.js +206 -0
- package/src/components/Badge/index.js.map +1 -0
- package/src/components/BodyText/index.d.ts +9 -0
- package/src/components/BodyText/index.js +58 -0
- package/src/components/BodyText/index.js.map +1 -0
- package/src/components/Breadcrumb/index.d.ts +24 -0
- package/src/components/Breadcrumb/index.js +194 -0
- package/src/components/Breadcrumb/index.js.map +1 -0
- package/src/components/Button/index.d.ts +16 -0
- package/src/components/Button/index.js +260 -0
- package/src/components/Button/index.js.map +1 -0
- package/src/components/Checkbox/index.d.ts +16 -0
- package/src/components/Checkbox/index.js +196 -0
- package/src/components/Checkbox/index.js.map +1 -0
- package/src/components/Chip/index.d.ts +18 -0
- package/src/components/Chip/index.js +280 -0
- package/src/components/Chip/index.js.map +1 -0
- package/src/components/Divider/index.d.ts +11 -0
- package/src/components/Divider/index.js +59 -0
- package/src/components/Divider/index.js.map +1 -0
- package/src/components/EmptyState/index.d.ts +25 -0
- package/src/components/EmptyState/index.js +376 -0
- package/src/components/EmptyState/index.js.map +1 -0
- package/src/components/HeaderText/index.d.ts +9 -0
- package/src/components/HeaderText/index.js +62 -0
- package/src/components/HeaderText/index.js.map +1 -0
- package/src/components/Input/index.d.ts +13 -0
- package/src/components/Input/index.js +231 -0
- package/src/components/Input/index.js.map +1 -0
- package/src/components/List/index.d.ts +19 -0
- package/src/components/List/index.js +170 -0
- package/src/components/List/index.js.map +1 -0
- package/src/components/Pagination/index.d.ts +15 -0
- package/src/components/Pagination/index.js +322 -0
- package/src/components/Pagination/index.js.map +1 -0
- package/src/components/PlanCard/index.d.ts +27 -0
- package/src/components/PlanCard/index.js +364 -0
- package/src/components/PlanCard/index.js.map +1 -0
- package/src/components/ProgressTracker/index.d.ts +26 -0
- package/src/components/ProgressTracker/index.js +180 -0
- package/src/components/ProgressTracker/index.js.map +1 -0
- package/src/components/PromotionCard/index.d.ts +23 -0
- package/src/components/PromotionCard/index.js +496 -0
- package/src/components/PromotionCard/index.js.map +1 -0
- package/src/components/RadioButton/index.d.ts +15 -0
- package/src/components/RadioButton/index.js +188 -0
- package/src/components/RadioButton/index.js.map +1 -0
- package/src/components/ScreenContainer/index.d.ts +15 -0
- package/src/components/ScreenContainer/index.js +43 -0
- package/src/components/ScreenContainer/index.js.map +1 -0
- package/src/components/SegmentedControl/index.d.ts +16 -0
- package/src/components/SegmentedControl/index.js +115 -0
- package/src/components/SegmentedControl/index.js.map +1 -0
- package/src/components/SelectionCard/index.d.ts +16 -0
- package/src/components/SelectionCard/index.js +222 -0
- package/src/components/SelectionCard/index.js.map +1 -0
- package/src/components/ServiceCard/index.d.ts +22 -0
- package/src/components/ServiceCard/index.js +385 -0
- package/src/components/ServiceCard/index.js.map +1 -0
- package/src/components/Slider/index.d.ts +24 -0
- package/src/components/Slider/index.js +320 -0
- package/src/components/Slider/index.js.map +1 -0
- package/src/components/Snackbar/index.d.ts +13 -0
- package/src/components/Snackbar/index.js +229 -0
- package/src/components/Snackbar/index.js.map +1 -0
- package/src/components/Switch/index.d.ts +14 -0
- package/src/components/Switch/index.js +221 -0
- package/src/components/Switch/index.js.map +1 -0
- package/src/components/Tooltip/index.d.ts +21 -0
- package/src/components/Tooltip/index.js +206 -0
- package/src/components/Tooltip/index.js.map +1 -0
- package/src/icons/AtomIcon.d.ts +2 -0
- package/src/icons/AtomIcon.js +85 -0
- package/src/icons/AtomIcon.js.map +1 -0
- package/src/icons/BinocularsIcon.d.ts +2 -0
- package/src/icons/BinocularsIcon.js +103 -0
- package/src/icons/BinocularsIcon.js.map +1 -0
- package/src/icons/FileChartColumnIncreasingIcon.d.ts +2 -0
- package/src/icons/FileChartColumnIncreasingIcon.js +97 -0
- package/src/icons/FileChartColumnIncreasingIcon.js.map +1 -0
- package/src/icons/FlagIcon.d.ts +2 -0
- package/src/icons/FlagIcon.js +71 -0
- package/src/icons/FlagIcon.js.map +1 -0
- package/src/icons/GlobeIcon.d.ts +2 -0
- package/src/icons/GlobeIcon.js +71 -0
- package/src/icons/GlobeIcon.js.map +1 -0
- package/src/icons/GraduationCapIcon.d.ts +2 -0
- package/src/icons/GraduationCapIcon.js +85 -0
- package/src/icons/GraduationCapIcon.js.map +1 -0
- package/src/icons/HandHeartIcon.d.ts +2 -0
- package/src/icons/HandHeartIcon.js +91 -0
- package/src/icons/HandHeartIcon.js.map +1 -0
- package/src/icons/HandshakeIcon.d.ts +2 -0
- package/src/icons/HandshakeIcon.js +97 -0
- package/src/icons/HandshakeIcon.js.map +1 -0
- package/src/icons/HazeIcon.d.ts +2 -0
- package/src/icons/HazeIcon.js +115 -0
- package/src/icons/HazeIcon.js.map +1 -0
- package/src/icons/HeartHandshakeIcon.d.ts +2 -0
- package/src/icons/HeartHandshakeIcon.js +71 -0
- package/src/icons/HeartHandshakeIcon.js.map +1 -0
- package/src/icons/HourglassIcon.d.ts +2 -0
- package/src/icons/HourglassIcon.js +91 -0
- package/src/icons/HourglassIcon.js.map +1 -0
- package/src/icons/IdCardIcon.d.ts +2 -0
- package/src/icons/IdCardIcon.js +97 -0
- package/src/icons/IdCardIcon.js.map +1 -0
- package/src/icons/MessageCirclePlusIcon.d.ts +2 -0
- package/src/icons/MessageCirclePlusIcon.js +85 -0
- package/src/icons/MessageCirclePlusIcon.js.map +1 -0
- package/src/icons/MountainSnowIcon.d.ts +2 -0
- package/src/icons/MountainSnowIcon.js +79 -0
- package/src/icons/MountainSnowIcon.js.map +1 -0
- package/src/icons/SnowflakeIcon.d.ts +2 -0
- package/src/icons/SnowflakeIcon.js +139 -0
- package/src/icons/SnowflakeIcon.js.map +1 -0
- package/src/icons/StethoscopeIcon.d.ts +2 -0
- package/src/icons/StethoscopeIcon.js +97 -0
- package/src/icons/StethoscopeIcon.js.map +1 -0
- package/src/icons/UserRoundIcon.d.ts +2 -0
- package/src/icons/UserRoundIcon.js +79 -0
- package/src/icons/UserRoundIcon.js.map +1 -0
- package/src/icons/WheatIcon.d.ts +2 -0
- package/src/icons/WheatIcon.js +115 -0
- package/src/icons/WheatIcon.js.map +1 -0
- package/src/icons/index.d.ts +22 -0
- package/src/icons/index.js +109 -0
- package/src/icons/index.js.map +1 -0
- package/src/icons/types.d.ts +16 -0
- package/src/icons/types.js +52 -0
- package/src/icons/types.js.map +1 -0
- package/src/index.d.ts +60 -2
- package/src/index.js +203 -1
- package/src/index.js.map +1 -1
- package/src/theme/ThemeContext.d.ts +258 -0
- package/src/theme/ThemeContext.js +15 -0
- package/src/theme/ThemeContext.js.map +1 -0
- package/src/theme/ThemeProvider.d.ts +27 -0
- package/src/theme/ThemeProvider.js +66 -0
- package/src/theme/ThemeProvider.js.map +1 -0
- package/src/theme/defaultTheme.d.ts +13 -0
- package/src/theme/defaultTheme.js +14 -0
- package/src/theme/defaultTheme.js.map +1 -0
- package/src/theme/index.d.ts +5 -0
- package/src/theme/index.js +26 -0
- package/src/theme/index.js.map +1 -0
- package/src/theme/mergeTheme.d.ts +7 -0
- package/src/theme/mergeTheme.js +40 -0
- package/src/theme/mergeTheme.js.map +1 -0
- package/src/theme/types.d.ts +25 -0
- package/src/theme/types.js +6 -0
- package/src/theme/types.js.map +1 -0
- package/src/theme/useTheme.d.ts +10 -0
- package/src/theme/useTheme.js +17 -0
- package/src/theme/useTheme.js.map +1 -0
- package/src/tokens.d.ts +253 -0
- package/src/tokens.js +265 -0
- package/src/tokens.js.map +1 -0
- package/src/lib/button.d.ts +0 -7
- package/src/lib/button.js +0 -43
- package/src/lib/button.js.map +0 -1
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "Checkbox", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return Checkbox;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _jsxruntime = require("react/jsx-runtime");
|
|
12
|
+
const _react = /*#__PURE__*/ _interop_require_wildcard(require("react"));
|
|
13
|
+
const _reactnative = require("react-native");
|
|
14
|
+
const _vectoricons = require("@expo/vector-icons");
|
|
15
|
+
const _theme = require("../../theme");
|
|
16
|
+
function _getRequireWildcardCache(nodeInterop) {
|
|
17
|
+
if (typeof WeakMap !== "function") return null;
|
|
18
|
+
var cacheBabelInterop = new WeakMap();
|
|
19
|
+
var cacheNodeInterop = new WeakMap();
|
|
20
|
+
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
21
|
+
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
22
|
+
})(nodeInterop);
|
|
23
|
+
}
|
|
24
|
+
function _interop_require_wildcard(obj, nodeInterop) {
|
|
25
|
+
if (!nodeInterop && obj && obj.__esModule) {
|
|
26
|
+
return obj;
|
|
27
|
+
}
|
|
28
|
+
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
29
|
+
return {
|
|
30
|
+
default: obj
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
var cache = _getRequireWildcardCache(nodeInterop);
|
|
34
|
+
if (cache && cache.has(obj)) {
|
|
35
|
+
return cache.get(obj);
|
|
36
|
+
}
|
|
37
|
+
var newObj = {
|
|
38
|
+
__proto__: null
|
|
39
|
+
};
|
|
40
|
+
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
41
|
+
for(var key in obj){
|
|
42
|
+
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
43
|
+
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
44
|
+
if (desc && (desc.get || desc.set)) {
|
|
45
|
+
Object.defineProperty(newObj, key, desc);
|
|
46
|
+
} else {
|
|
47
|
+
newObj[key] = obj[key];
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
newObj.default = obj;
|
|
52
|
+
if (cache) {
|
|
53
|
+
cache.set(obj, newObj);
|
|
54
|
+
}
|
|
55
|
+
return newObj;
|
|
56
|
+
}
|
|
57
|
+
function Checkbox({ checked: checkedProp, defaultChecked = false, onChange, size = 'md', label, description, disabled = false, invalid = false, style }) {
|
|
58
|
+
const { colorRoles: cr, dimensions: dim, typeScale: ts } = (0, _theme.useTheme)();
|
|
59
|
+
const [internalChecked, setInternalChecked] = (0, _react.useState)(defaultChecked);
|
|
60
|
+
const SIZE_TOKENS = (0, _react.useMemo)(()=>({
|
|
61
|
+
sm: {
|
|
62
|
+
box: 20,
|
|
63
|
+
hitArea: 36,
|
|
64
|
+
fontSize: ts.bodySmall.sysFontSize,
|
|
65
|
+
lineHeight: ts.bodySmall.sysLineHeight,
|
|
66
|
+
iconSize: 13
|
|
67
|
+
},
|
|
68
|
+
md: {
|
|
69
|
+
box: 24,
|
|
70
|
+
hitArea: 40,
|
|
71
|
+
fontSize: ts.bodyMedium.sysFontSize,
|
|
72
|
+
lineHeight: ts.bodyMedium.sysLineHeight,
|
|
73
|
+
iconSize: 16
|
|
74
|
+
}
|
|
75
|
+
}), [
|
|
76
|
+
ts
|
|
77
|
+
]);
|
|
78
|
+
const isControlled = checkedProp !== undefined;
|
|
79
|
+
const checkedState = isControlled ? checkedProp : internalChecked;
|
|
80
|
+
const isChecked = checkedState === true;
|
|
81
|
+
const isIndeterminate = checkedState === 'indeterminate';
|
|
82
|
+
const isSelected = isChecked || isIndeterminate;
|
|
83
|
+
const s = SIZE_TOKENS[size];
|
|
84
|
+
function handlePress() {
|
|
85
|
+
if (disabled) return;
|
|
86
|
+
// Indeterminate → true on activation (matches HTML spec)
|
|
87
|
+
const next = checkedState === true ? false : true;
|
|
88
|
+
if (!isControlled) setInternalChecked(next);
|
|
89
|
+
onChange?.(next);
|
|
90
|
+
}
|
|
91
|
+
const borderColor = invalid ? cr.error.sysError : isSelected ? 'transparent' : cr.outline.sysOutlineFixed;
|
|
92
|
+
const boxBg = isSelected ? invalid ? cr.error.sysError : cr.accent.primary.sysPrimary : 'transparent';
|
|
93
|
+
return /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.Pressable, {
|
|
94
|
+
onPress: handlePress,
|
|
95
|
+
accessibilityRole: "checkbox",
|
|
96
|
+
accessibilityLabel: label,
|
|
97
|
+
accessibilityState: {
|
|
98
|
+
checked: isIndeterminate ? 'mixed' : isChecked,
|
|
99
|
+
disabled
|
|
100
|
+
},
|
|
101
|
+
style: ()=>[
|
|
102
|
+
styles.root,
|
|
103
|
+
disabled && styles.disabled,
|
|
104
|
+
style
|
|
105
|
+
],
|
|
106
|
+
children: ({ pressed })=>/*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {
|
|
107
|
+
children: [
|
|
108
|
+
/*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.View, {
|
|
109
|
+
style: [
|
|
110
|
+
styles.hitArea,
|
|
111
|
+
{
|
|
112
|
+
width: s.hitArea,
|
|
113
|
+
height: s.hitArea,
|
|
114
|
+
borderRadius: s.hitArea / 2,
|
|
115
|
+
backgroundColor: pressed && !disabled ? cr.transparent.neutral.sysBlack10 : 'transparent'
|
|
116
|
+
}
|
|
117
|
+
],
|
|
118
|
+
children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(_reactnative.View, {
|
|
119
|
+
style: {
|
|
120
|
+
width: s.box,
|
|
121
|
+
height: s.box,
|
|
122
|
+
borderRadius: dim.borderRadius.sysRadiusXs,
|
|
123
|
+
borderWidth: isSelected ? 0 : dim.borderWidth.sysStrokeMedium,
|
|
124
|
+
borderColor,
|
|
125
|
+
backgroundColor: boxBg,
|
|
126
|
+
alignItems: 'center',
|
|
127
|
+
justifyContent: 'center'
|
|
128
|
+
},
|
|
129
|
+
children: [
|
|
130
|
+
isChecked && !isIndeterminate && /*#__PURE__*/ (0, _jsxruntime.jsx)(_vectoricons.Ionicons, {
|
|
131
|
+
name: "checkmark",
|
|
132
|
+
size: s.iconSize,
|
|
133
|
+
color: cr.accent.primary.sysOnPrimary
|
|
134
|
+
}),
|
|
135
|
+
isIndeterminate && /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.View, {
|
|
136
|
+
style: {
|
|
137
|
+
width: s.box * 0.5,
|
|
138
|
+
height: 2,
|
|
139
|
+
borderRadius: 1,
|
|
140
|
+
backgroundColor: cr.accent.primary.sysOnPrimary
|
|
141
|
+
}
|
|
142
|
+
})
|
|
143
|
+
]
|
|
144
|
+
})
|
|
145
|
+
}),
|
|
146
|
+
(label || description) && /*#__PURE__*/ (0, _jsxruntime.jsxs)(_reactnative.View, {
|
|
147
|
+
style: [
|
|
148
|
+
styles.textBlock,
|
|
149
|
+
{
|
|
150
|
+
gap: 2
|
|
151
|
+
}
|
|
152
|
+
],
|
|
153
|
+
children: [
|
|
154
|
+
label && /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.Text, {
|
|
155
|
+
style: {
|
|
156
|
+
color: cr.surface.surface.sysOnSurface,
|
|
157
|
+
fontSize: s.fontSize,
|
|
158
|
+
lineHeight: s.lineHeight,
|
|
159
|
+
includeFontPadding: false
|
|
160
|
+
},
|
|
161
|
+
children: label
|
|
162
|
+
}),
|
|
163
|
+
description && /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.Text, {
|
|
164
|
+
style: {
|
|
165
|
+
color: cr.surface.surface.sysOnSurfaceVariant,
|
|
166
|
+
fontSize: s.fontSize - 2,
|
|
167
|
+
lineHeight: s.lineHeight - 2,
|
|
168
|
+
includeFontPadding: false
|
|
169
|
+
},
|
|
170
|
+
children: description
|
|
171
|
+
})
|
|
172
|
+
]
|
|
173
|
+
})
|
|
174
|
+
]
|
|
175
|
+
})
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
const styles = _reactnative.StyleSheet.create({
|
|
179
|
+
root: {
|
|
180
|
+
flexDirection: 'row',
|
|
181
|
+
alignItems: 'center'
|
|
182
|
+
},
|
|
183
|
+
hitArea: {
|
|
184
|
+
alignItems: 'center',
|
|
185
|
+
justifyContent: 'center'
|
|
186
|
+
},
|
|
187
|
+
textBlock: {
|
|
188
|
+
flex: 1,
|
|
189
|
+
flexDirection: 'column'
|
|
190
|
+
},
|
|
191
|
+
disabled: {
|
|
192
|
+
opacity: 0.48
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../packages/react-native/src/components/Checkbox/index.tsx"],"sourcesContent":["import React, { useMemo, useState } from 'react';\r\n\r\nimport {\r\n Pressable,\r\n StyleProp,\r\n StyleSheet,\r\n Text,\r\n View,\r\n ViewStyle,\r\n} from 'react-native';\r\n\r\nimport { Ionicons } from '@expo/vector-icons';\r\n\r\nimport { useTheme } from '../../theme';\r\n\r\nexport type CheckboxSize = 'sm' | 'md';\r\nexport type CheckboxCheckedState = boolean | 'indeterminate';\r\n\r\nexport interface CheckboxProps {\r\n checked?: CheckboxCheckedState;\r\n defaultChecked?: boolean;\r\n onChange?: (checked: boolean) => void;\r\n size?: CheckboxSize;\r\n label?: string;\r\n description?: string;\r\n disabled?: boolean;\r\n invalid?: boolean;\r\n style?: StyleProp<ViewStyle>;\r\n}\r\n\r\nexport function Checkbox({\r\n checked: checkedProp,\r\n defaultChecked = false,\r\n onChange,\r\n size = 'md',\r\n label,\r\n description,\r\n disabled = false,\r\n invalid = false,\r\n style,\r\n}: CheckboxProps) {\r\n const { colorRoles: cr, dimensions: dim, typeScale: ts } = useTheme();\r\n const [internalChecked, setInternalChecked] =\r\n useState<boolean>(defaultChecked);\r\n\r\n const SIZE_TOKENS = useMemo(\r\n () => ({\r\n sm: {\r\n box: 20,\r\n hitArea: 36,\r\n fontSize: ts.bodySmall.sysFontSize,\r\n lineHeight: ts.bodySmall.sysLineHeight,\r\n iconSize: 13,\r\n },\r\n md: {\r\n box: 24,\r\n hitArea: 40,\r\n fontSize: ts.bodyMedium.sysFontSize,\r\n lineHeight: ts.bodyMedium.sysLineHeight,\r\n iconSize: 16,\r\n },\r\n }),\r\n [ts],\r\n );\r\n\r\n const isControlled = checkedProp !== undefined;\r\n const checkedState: CheckboxCheckedState = isControlled\r\n ? checkedProp\r\n : internalChecked;\r\n\r\n const isChecked = checkedState === true;\r\n const isIndeterminate = checkedState === 'indeterminate';\r\n const isSelected = isChecked || isIndeterminate;\r\n\r\n const s = SIZE_TOKENS[size];\r\n function handlePress() {\r\n if (disabled) return;\r\n // Indeterminate → true on activation (matches HTML spec)\r\n const next = checkedState === true ? false : true;\r\n if (!isControlled) setInternalChecked(next);\r\n onChange?.(next);\r\n }\r\n\r\n const borderColor = invalid\r\n ? cr.error.sysError\r\n : isSelected\r\n ? 'transparent'\r\n : cr.outline.sysOutlineFixed;\r\n\r\n const boxBg = isSelected\r\n ? invalid\r\n ? cr.error.sysError\r\n : cr.accent.primary.sysPrimary\r\n : 'transparent';\r\n\r\n return (\r\n <Pressable\r\n onPress={handlePress}\r\n accessibilityRole=\"checkbox\"\r\n accessibilityLabel={label}\r\n accessibilityState={{\r\n checked: isIndeterminate ? 'mixed' : isChecked,\r\n disabled,\r\n }}\r\n style={() => [styles.root, disabled && styles.disabled, style]}\r\n >\r\n {({ pressed }: { pressed: boolean }) => (\r\n <>\r\n {/* Hit-area / state-layer circle */}\r\n <View\r\n style={[\r\n styles.hitArea,\r\n {\r\n width: s.hitArea,\r\n height: s.hitArea,\r\n borderRadius: s.hitArea / 2,\r\n backgroundColor:\r\n pressed && !disabled\r\n ? cr.transparent.neutral.sysBlack10\r\n : 'transparent',\r\n },\r\n ]}\r\n >\r\n {/* Checkbox box */}\r\n <View\r\n style={{\r\n width: s.box,\r\n height: s.box,\r\n borderRadius: dim.borderRadius.sysRadiusXs,\r\n borderWidth: isSelected ? 0 : dim.borderWidth.sysStrokeMedium,\r\n borderColor,\r\n backgroundColor: boxBg,\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n }}\r\n >\r\n {isChecked && !isIndeterminate && (\r\n <Ionicons\r\n name=\"checkmark\"\r\n size={s.iconSize}\r\n color={cr.accent.primary.sysOnPrimary}\r\n />\r\n )}\r\n {isIndeterminate && (\r\n <View\r\n style={{\r\n width: s.box * 0.5,\r\n height: 2,\r\n borderRadius: 1,\r\n backgroundColor: cr.accent.primary.sysOnPrimary,\r\n }}\r\n />\r\n )}\r\n </View>\r\n </View>\r\n\r\n {(label || description) && (\r\n <View style={[styles.textBlock, { gap: 2 }]}>\r\n {label && (\r\n <Text\r\n style={{\r\n color: cr.surface.surface.sysOnSurface,\r\n fontSize: s.fontSize,\r\n lineHeight: s.lineHeight,\r\n includeFontPadding: false,\r\n }}\r\n >\r\n {label}\r\n </Text>\r\n )}\r\n {description && (\r\n <Text\r\n style={{\r\n color: cr.surface.surface.sysOnSurfaceVariant,\r\n fontSize: s.fontSize - 2,\r\n lineHeight: s.lineHeight - 2,\r\n includeFontPadding: false,\r\n }}\r\n >\r\n {description}\r\n </Text>\r\n )}\r\n </View>\r\n )}\r\n </>\r\n )}\r\n </Pressable>\r\n );\r\n}\r\n\r\nconst styles = StyleSheet.create({\r\n root: {\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n },\r\n hitArea: {\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n textBlock: {\r\n flex: 1,\r\n flexDirection: 'column',\r\n },\r\n disabled: {\r\n opacity: 0.48,\r\n },\r\n});\r\n"],"names":["Checkbox","checked","checkedProp","defaultChecked","onChange","size","label","description","disabled","invalid","style","colorRoles","cr","dimensions","dim","typeScale","ts","useTheme","internalChecked","setInternalChecked","useState","SIZE_TOKENS","useMemo","sm","box","hitArea","fontSize","bodySmall","sysFontSize","lineHeight","sysLineHeight","iconSize","md","bodyMedium","isControlled","undefined","checkedState","isChecked","isIndeterminate","isSelected","s","handlePress","next","borderColor","error","sysError","outline","sysOutlineFixed","boxBg","accent","primary","sysPrimary","Pressable","onPress","accessibilityRole","accessibilityLabel","accessibilityState","styles","root","pressed","View","width","height","borderRadius","backgroundColor","transparent","neutral","sysBlack10","sysRadiusXs","borderWidth","sysStrokeMedium","alignItems","justifyContent","Ionicons","name","color","sysOnPrimary","textBlock","gap","Text","surface","sysOnSurface","includeFontPadding","sysOnSurfaceVariant","StyleSheet","create","flexDirection","flex","opacity"],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { StyleProp, ViewStyle } from 'react-native';
|
|
3
|
+
export type ChipSize = 'sm' | 'md' | 'lg' | 'xl';
|
|
4
|
+
export type ChipUsage = 'neutral' | 'informative' | 'positive' | 'danger' | 'warning';
|
|
5
|
+
export interface ChipProps {
|
|
6
|
+
label: string;
|
|
7
|
+
size?: ChipSize;
|
|
8
|
+
usage?: ChipUsage;
|
|
9
|
+
/** Optional icon rendered before the label */
|
|
10
|
+
leadingIcon?: React.ReactNode;
|
|
11
|
+
/** Renders a close button — fires onDismiss when tapped */
|
|
12
|
+
dismissible?: boolean;
|
|
13
|
+
onDismiss?: () => void;
|
|
14
|
+
/** Renders a small count badge after the label */
|
|
15
|
+
badge?: number | string;
|
|
16
|
+
style?: StyleProp<ViewStyle>;
|
|
17
|
+
}
|
|
18
|
+
export declare function Chip({ label, size, usage, leadingIcon, dismissible, onDismiss, badge, style, }: ChipProps): React.JSX.Element;
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "Chip", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return Chip;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _jsxruntime = require("react/jsx-runtime");
|
|
12
|
+
const _react = /*#__PURE__*/ _interop_require_wildcard(require("react"));
|
|
13
|
+
const _reactnative = require("react-native");
|
|
14
|
+
const _vectoricons = require("@expo/vector-icons");
|
|
15
|
+
const _theme = require("../../theme");
|
|
16
|
+
function _getRequireWildcardCache(nodeInterop) {
|
|
17
|
+
if (typeof WeakMap !== "function") return null;
|
|
18
|
+
var cacheBabelInterop = new WeakMap();
|
|
19
|
+
var cacheNodeInterop = new WeakMap();
|
|
20
|
+
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
21
|
+
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
22
|
+
})(nodeInterop);
|
|
23
|
+
}
|
|
24
|
+
function _interop_require_wildcard(obj, nodeInterop) {
|
|
25
|
+
if (!nodeInterop && obj && obj.__esModule) {
|
|
26
|
+
return obj;
|
|
27
|
+
}
|
|
28
|
+
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
29
|
+
return {
|
|
30
|
+
default: obj
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
var cache = _getRequireWildcardCache(nodeInterop);
|
|
34
|
+
if (cache && cache.has(obj)) {
|
|
35
|
+
return cache.get(obj);
|
|
36
|
+
}
|
|
37
|
+
var newObj = {
|
|
38
|
+
__proto__: null
|
|
39
|
+
};
|
|
40
|
+
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
41
|
+
for(var key in obj){
|
|
42
|
+
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
43
|
+
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
44
|
+
if (desc && (desc.get || desc.set)) {
|
|
45
|
+
Object.defineProperty(newObj, key, desc);
|
|
46
|
+
} else {
|
|
47
|
+
newObj[key] = obj[key];
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
newObj.default = obj;
|
|
52
|
+
if (cache) {
|
|
53
|
+
cache.set(obj, newObj);
|
|
54
|
+
}
|
|
55
|
+
return newObj;
|
|
56
|
+
}
|
|
57
|
+
function getUsageColors(usage, cr) {
|
|
58
|
+
switch(usage){
|
|
59
|
+
case 'neutral':
|
|
60
|
+
return {
|
|
61
|
+
bg: cr.surface.surfaceContainer.sysSurfaceContainerLowest,
|
|
62
|
+
text: cr.surface.surface.sysOnSurface,
|
|
63
|
+
closeBg: cr.surface.surfaceContainer.sysSurfaceContainerLow,
|
|
64
|
+
badgeBg: cr.surface.surfaceContainer.sysSurfaceContainer,
|
|
65
|
+
badgeText: cr.surface.surface.sysOnSurface,
|
|
66
|
+
elevated: true
|
|
67
|
+
};
|
|
68
|
+
case 'informative':
|
|
69
|
+
return {
|
|
70
|
+
bg: cr.custom.info.sysInfo,
|
|
71
|
+
text: cr.accent.primary.sysOnPrimary,
|
|
72
|
+
closeBg: cr.transparent.neutral.sysWhite20,
|
|
73
|
+
badgeBg: cr.transparent.neutral.sysWhite20,
|
|
74
|
+
badgeText: cr.custom.info.sysOnInfo,
|
|
75
|
+
elevated: false
|
|
76
|
+
};
|
|
77
|
+
case 'positive':
|
|
78
|
+
return {
|
|
79
|
+
bg: cr.custom.success.sysSuccess,
|
|
80
|
+
text: cr.custom.success.sysOnSuccess,
|
|
81
|
+
closeBg: cr.transparent.neutral.sysWhite20,
|
|
82
|
+
badgeBg: cr.transparent.neutral.sysWhite20,
|
|
83
|
+
badgeText: cr.custom.success.sysOnSuccess,
|
|
84
|
+
elevated: false
|
|
85
|
+
};
|
|
86
|
+
case 'danger':
|
|
87
|
+
return {
|
|
88
|
+
bg: cr.error.sysError,
|
|
89
|
+
text: cr.error.sysOnError,
|
|
90
|
+
closeBg: cr.transparent.neutral.sysWhite20,
|
|
91
|
+
badgeBg: cr.transparent.neutral.sysWhite20,
|
|
92
|
+
badgeText: cr.error.sysOnError,
|
|
93
|
+
elevated: false
|
|
94
|
+
};
|
|
95
|
+
case 'warning':
|
|
96
|
+
return {
|
|
97
|
+
bg: cr.custom.warning.sysWarning,
|
|
98
|
+
text: cr.custom.warning.sysOnWarning,
|
|
99
|
+
closeBg: cr.transparent.neutral.sysWhite20,
|
|
100
|
+
badgeBg: cr.transparent.neutral.sysWhite20,
|
|
101
|
+
badgeText: cr.custom.warning.sysOnWarning,
|
|
102
|
+
elevated: false
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
function Chip({ label, size = 'md', usage = 'neutral', leadingIcon, dismissible = false, onDismiss, badge, style }) {
|
|
107
|
+
const { colorRoles: cr, dimensions: dim, typeScale: ts } = (0, _theme.useTheme)();
|
|
108
|
+
const SIZE_TOKENS = (0, _react.useMemo)(()=>({
|
|
109
|
+
sm: {
|
|
110
|
+
height: 20,
|
|
111
|
+
paddingH: dim.spacing.padding.sysPadding8,
|
|
112
|
+
paddingV: dim.spacing.padding.sysPadding4,
|
|
113
|
+
gap: dim.spacing.padding.sysPadding4,
|
|
114
|
+
fontSize: ts.labelSmall.sysFontSize,
|
|
115
|
+
lineHeight: ts.labelSmall.sysLineHeight,
|
|
116
|
+
letterSpacing: ts.labelSmall.sysTracking,
|
|
117
|
+
iconSize: 16,
|
|
118
|
+
closeBtnSize: 16,
|
|
119
|
+
closeIconSize: 12,
|
|
120
|
+
badgeSize: 16,
|
|
121
|
+
badgeFontSize: ts.labelSmall.sysFontSize,
|
|
122
|
+
badgeLineHeight: ts.labelSmall.sysLineHeight
|
|
123
|
+
},
|
|
124
|
+
md: {
|
|
125
|
+
height: 24,
|
|
126
|
+
paddingH: dim.spacing.padding.sysPadding12,
|
|
127
|
+
paddingV: dim.spacing.padding.sysPadding4,
|
|
128
|
+
gap: dim.spacing.padding.sysPadding4,
|
|
129
|
+
fontSize: ts.labelMedium.sysFontSize,
|
|
130
|
+
lineHeight: ts.labelMedium.sysLineHeight,
|
|
131
|
+
letterSpacing: ts.labelMedium.sysTracking,
|
|
132
|
+
iconSize: 16,
|
|
133
|
+
closeBtnSize: 16,
|
|
134
|
+
closeIconSize: 12,
|
|
135
|
+
badgeSize: 16,
|
|
136
|
+
badgeFontSize: ts.labelSmall.sysFontSize,
|
|
137
|
+
badgeLineHeight: ts.labelSmall.sysLineHeight
|
|
138
|
+
},
|
|
139
|
+
lg: {
|
|
140
|
+
height: 32,
|
|
141
|
+
paddingH: dim.spacing.padding.sysPadding16,
|
|
142
|
+
paddingV: dim.spacing.padding.sysPadding4,
|
|
143
|
+
gap: dim.spacing.padding.sysPadding8,
|
|
144
|
+
fontSize: ts.labelMedium.sysFontSize,
|
|
145
|
+
lineHeight: ts.labelMedium.sysLineHeight,
|
|
146
|
+
letterSpacing: ts.labelMedium.sysTracking,
|
|
147
|
+
iconSize: 20,
|
|
148
|
+
closeBtnSize: 20,
|
|
149
|
+
closeIconSize: 16,
|
|
150
|
+
badgeSize: 20,
|
|
151
|
+
badgeFontSize: ts.labelSmall.sysFontSize,
|
|
152
|
+
badgeLineHeight: ts.labelSmall.sysLineHeight
|
|
153
|
+
},
|
|
154
|
+
xl: {
|
|
155
|
+
height: 40,
|
|
156
|
+
paddingH: dim.spacing.padding.sysPadding16,
|
|
157
|
+
paddingV: dim.spacing.padding.sysPadding8,
|
|
158
|
+
gap: dim.spacing.padding.sysPadding8,
|
|
159
|
+
fontSize: ts.bodyMedium.sysFontSize,
|
|
160
|
+
lineHeight: ts.bodyMedium.sysLineHeight,
|
|
161
|
+
letterSpacing: ts.bodyMedium.sysTracking,
|
|
162
|
+
iconSize: 20,
|
|
163
|
+
closeBtnSize: 24,
|
|
164
|
+
closeIconSize: 16,
|
|
165
|
+
badgeSize: 24,
|
|
166
|
+
badgeFontSize: ts.labelMedium.sysFontSize,
|
|
167
|
+
badgeLineHeight: ts.labelMedium.sysLineHeight
|
|
168
|
+
}
|
|
169
|
+
}), [
|
|
170
|
+
dim,
|
|
171
|
+
ts
|
|
172
|
+
]);
|
|
173
|
+
const s = SIZE_TOKENS[size];
|
|
174
|
+
const c = getUsageColors(usage, cr);
|
|
175
|
+
return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_reactnative.View, {
|
|
176
|
+
accessible: true,
|
|
177
|
+
accessibilityRole: "none",
|
|
178
|
+
accessibilityLabel: badge !== undefined ? `${label}, ${badge}` : label,
|
|
179
|
+
style: [
|
|
180
|
+
styles.root,
|
|
181
|
+
{
|
|
182
|
+
height: s.height,
|
|
183
|
+
paddingHorizontal: s.paddingH,
|
|
184
|
+
paddingVertical: s.paddingV,
|
|
185
|
+
gap: s.gap,
|
|
186
|
+
backgroundColor: c.bg
|
|
187
|
+
},
|
|
188
|
+
c.elevated && styles.elevated,
|
|
189
|
+
style
|
|
190
|
+
],
|
|
191
|
+
children: [
|
|
192
|
+
leadingIcon && /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.View, {
|
|
193
|
+
style: {
|
|
194
|
+
width: s.iconSize,
|
|
195
|
+
height: s.iconSize,
|
|
196
|
+
alignItems: 'center',
|
|
197
|
+
justifyContent: 'center',
|
|
198
|
+
flexShrink: 0
|
|
199
|
+
},
|
|
200
|
+
children: leadingIcon
|
|
201
|
+
}),
|
|
202
|
+
/*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.Text, {
|
|
203
|
+
style: {
|
|
204
|
+
color: c.text,
|
|
205
|
+
fontSize: s.fontSize,
|
|
206
|
+
lineHeight: s.lineHeight,
|
|
207
|
+
letterSpacing: s.letterSpacing,
|
|
208
|
+
includeFontPadding: false
|
|
209
|
+
},
|
|
210
|
+
numberOfLines: 1,
|
|
211
|
+
children: label
|
|
212
|
+
}),
|
|
213
|
+
badge !== undefined && /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.View, {
|
|
214
|
+
style: {
|
|
215
|
+
width: s.badgeSize,
|
|
216
|
+
height: s.badgeSize,
|
|
217
|
+
borderRadius: s.badgeSize / 2,
|
|
218
|
+
backgroundColor: c.badgeBg,
|
|
219
|
+
alignItems: 'center',
|
|
220
|
+
justifyContent: 'center',
|
|
221
|
+
flexShrink: 0
|
|
222
|
+
},
|
|
223
|
+
children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.Text, {
|
|
224
|
+
style: {
|
|
225
|
+
color: c.badgeText,
|
|
226
|
+
fontSize: s.badgeFontSize,
|
|
227
|
+
lineHeight: s.badgeLineHeight,
|
|
228
|
+
includeFontPadding: false,
|
|
229
|
+
fontWeight: '500'
|
|
230
|
+
},
|
|
231
|
+
children: badge
|
|
232
|
+
})
|
|
233
|
+
}),
|
|
234
|
+
dismissible && /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.Pressable, {
|
|
235
|
+
onPress: onDismiss,
|
|
236
|
+
accessibilityRole: "button",
|
|
237
|
+
accessibilityLabel: "Dismiss",
|
|
238
|
+
hitSlop: 4,
|
|
239
|
+
style: ({ pressed })=>({
|
|
240
|
+
width: s.closeBtnSize,
|
|
241
|
+
height: s.closeBtnSize,
|
|
242
|
+
borderRadius: s.closeBtnSize / 2,
|
|
243
|
+
backgroundColor: pressed ? cr.transparent.neutral.sysBlack10 : c.closeBg,
|
|
244
|
+
alignItems: 'center',
|
|
245
|
+
justifyContent: 'center',
|
|
246
|
+
flexShrink: 0,
|
|
247
|
+
overflow: 'hidden'
|
|
248
|
+
}),
|
|
249
|
+
children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_vectoricons.Ionicons, {
|
|
250
|
+
name: "close",
|
|
251
|
+
size: s.closeIconSize,
|
|
252
|
+
color: c.text
|
|
253
|
+
})
|
|
254
|
+
})
|
|
255
|
+
]
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
const styles = _reactnative.StyleSheet.create({
|
|
259
|
+
root: {
|
|
260
|
+
flexDirection: 'row',
|
|
261
|
+
alignItems: 'center',
|
|
262
|
+
alignSelf: 'flex-start',
|
|
263
|
+
borderRadius: 9999,
|
|
264
|
+
overflow: 'hidden'
|
|
265
|
+
},
|
|
266
|
+
elevated: {
|
|
267
|
+
shadowColor: '#000',
|
|
268
|
+
shadowOffset: {
|
|
269
|
+
width: 0,
|
|
270
|
+
height: 2
|
|
271
|
+
},
|
|
272
|
+
shadowOpacity: 0.1,
|
|
273
|
+
shadowRadius: 8,
|
|
274
|
+
elevation: 2,
|
|
275
|
+
// overflow must be visible for shadow on iOS — override here
|
|
276
|
+
overflow: 'visible'
|
|
277
|
+
}
|
|
278
|
+
});
|
|
279
|
+
|
|
280
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../packages/react-native/src/components/Chip/index.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\r\n\r\nimport {\r\n Pressable,\r\n StyleProp,\r\n StyleSheet,\r\n Text,\r\n View,\r\n ViewStyle,\r\n} from 'react-native';\r\n\r\nimport { Ionicons } from '@expo/vector-icons';\r\n\r\nimport { useTheme } from '../../theme';\r\n\r\nexport type ChipSize = 'sm' | 'md' | 'lg' | 'xl';\r\nexport type ChipUsage =\r\n | 'neutral'\r\n | 'informative'\r\n | 'positive'\r\n | 'danger'\r\n | 'warning';\r\n\r\nexport interface ChipProps {\r\n label: string;\r\n size?: ChipSize;\r\n usage?: ChipUsage;\r\n /** Optional icon rendered before the label */\r\n leadingIcon?: React.ReactNode;\r\n /** Renders a close button — fires onDismiss when tapped */\r\n dismissible?: boolean;\r\n onDismiss?: () => void;\r\n /** Renders a small count badge after the label */\r\n badge?: number | string;\r\n style?: StyleProp<ViewStyle>;\r\n}\r\n\r\n// ── Usage/color types ─────────────────────────────────────────────────────────\r\n\r\ntype UsageColors = {\r\n bg: string;\r\n text: string;\r\n closeBg: string;\r\n badgeBg: string;\r\n badgeText: string;\r\n /** true → render elevation shadow */\r\n elevated: boolean;\r\n};\r\n\r\ntype ColorRoles = ReturnType<typeof useTheme>['colorRoles'];\r\n\r\nfunction getUsageColors(usage: ChipUsage, cr: ColorRoles): UsageColors {\r\n switch (usage) {\r\n case 'neutral':\r\n return {\r\n bg: cr.surface.surfaceContainer.sysSurfaceContainerLowest,\r\n text: cr.surface.surface.sysOnSurface,\r\n closeBg: cr.surface.surfaceContainer.sysSurfaceContainerLow,\r\n badgeBg: cr.surface.surfaceContainer.sysSurfaceContainer,\r\n badgeText: cr.surface.surface.sysOnSurface,\r\n elevated: true,\r\n };\r\n case 'informative':\r\n return {\r\n bg: cr.custom.info.sysInfo,\r\n text: cr.accent.primary.sysOnPrimary,\r\n closeBg: cr.transparent.neutral.sysWhite20,\r\n badgeBg: cr.transparent.neutral.sysWhite20,\r\n badgeText: cr.custom.info.sysOnInfo,\r\n elevated: false,\r\n };\r\n case 'positive':\r\n return {\r\n bg: cr.custom.success.sysSuccess,\r\n text: cr.custom.success.sysOnSuccess,\r\n closeBg: cr.transparent.neutral.sysWhite20,\r\n badgeBg: cr.transparent.neutral.sysWhite20,\r\n badgeText: cr.custom.success.sysOnSuccess,\r\n elevated: false,\r\n };\r\n case 'danger':\r\n return {\r\n bg: cr.error.sysError,\r\n text: cr.error.sysOnError,\r\n closeBg: cr.transparent.neutral.sysWhite20,\r\n badgeBg: cr.transparent.neutral.sysWhite20,\r\n badgeText: cr.error.sysOnError,\r\n elevated: false,\r\n };\r\n case 'warning':\r\n return {\r\n bg: cr.custom.warning.sysWarning,\r\n text: cr.custom.warning.sysOnWarning,\r\n closeBg: cr.transparent.neutral.sysWhite20,\r\n badgeBg: cr.transparent.neutral.sysWhite20,\r\n badgeText: cr.custom.warning.sysOnWarning,\r\n elevated: false,\r\n };\r\n }\r\n}\r\n\r\n// ── Component ─────────────────────────────────────────────────────────────────\r\n\r\nexport function Chip({\r\n label,\r\n size = 'md',\r\n usage = 'neutral',\r\n leadingIcon,\r\n dismissible = false,\r\n onDismiss,\r\n badge,\r\n style,\r\n}: ChipProps) {\r\n const { colorRoles: cr, dimensions: dim, typeScale: ts } = useTheme();\r\n\r\n const SIZE_TOKENS = useMemo(\r\n () => ({\r\n sm: {\r\n height: 20,\r\n paddingH: dim.spacing.padding.sysPadding8,\r\n paddingV: dim.spacing.padding.sysPadding4,\r\n gap: dim.spacing.padding.sysPadding4,\r\n fontSize: ts.labelSmall.sysFontSize,\r\n lineHeight: ts.labelSmall.sysLineHeight,\r\n letterSpacing: ts.labelSmall.sysTracking,\r\n iconSize: 16,\r\n closeBtnSize: 16,\r\n closeIconSize: 12,\r\n badgeSize: 16,\r\n badgeFontSize: ts.labelSmall.sysFontSize,\r\n badgeLineHeight: ts.labelSmall.sysLineHeight,\r\n },\r\n md: {\r\n height: 24,\r\n paddingH: dim.spacing.padding.sysPadding12,\r\n paddingV: dim.spacing.padding.sysPadding4,\r\n gap: dim.spacing.padding.sysPadding4,\r\n fontSize: ts.labelMedium.sysFontSize,\r\n lineHeight: ts.labelMedium.sysLineHeight,\r\n letterSpacing: ts.labelMedium.sysTracking,\r\n iconSize: 16,\r\n closeBtnSize: 16,\r\n closeIconSize: 12,\r\n badgeSize: 16,\r\n badgeFontSize: ts.labelSmall.sysFontSize,\r\n badgeLineHeight: ts.labelSmall.sysLineHeight,\r\n },\r\n lg: {\r\n height: 32,\r\n paddingH: dim.spacing.padding.sysPadding16,\r\n paddingV: dim.spacing.padding.sysPadding4,\r\n gap: dim.spacing.padding.sysPadding8,\r\n fontSize: ts.labelMedium.sysFontSize,\r\n lineHeight: ts.labelMedium.sysLineHeight,\r\n letterSpacing: ts.labelMedium.sysTracking,\r\n iconSize: 20,\r\n closeBtnSize: 20,\r\n closeIconSize: 16,\r\n badgeSize: 20,\r\n badgeFontSize: ts.labelSmall.sysFontSize,\r\n badgeLineHeight: ts.labelSmall.sysLineHeight,\r\n },\r\n xl: {\r\n height: 40,\r\n paddingH: dim.spacing.padding.sysPadding16,\r\n paddingV: dim.spacing.padding.sysPadding8,\r\n gap: dim.spacing.padding.sysPadding8,\r\n fontSize: ts.bodyMedium.sysFontSize,\r\n lineHeight: ts.bodyMedium.sysLineHeight,\r\n letterSpacing: ts.bodyMedium.sysTracking,\r\n iconSize: 20,\r\n closeBtnSize: 24,\r\n closeIconSize: 16,\r\n badgeSize: 24,\r\n badgeFontSize: ts.labelMedium.sysFontSize,\r\n badgeLineHeight: ts.labelMedium.sysLineHeight,\r\n },\r\n }),\r\n [dim, ts],\r\n );\r\n\r\n const s = SIZE_TOKENS[size];\r\n const c = getUsageColors(usage, cr);\r\n\r\n return (\r\n <View\r\n accessible\r\n accessibilityRole=\"none\"\r\n accessibilityLabel={badge !== undefined ? `${label}, ${badge}` : label}\r\n style={[\r\n styles.root,\r\n {\r\n height: s.height,\r\n paddingHorizontal: s.paddingH,\r\n paddingVertical: s.paddingV,\r\n gap: s.gap,\r\n backgroundColor: c.bg,\r\n },\r\n c.elevated && styles.elevated,\r\n style,\r\n ]}\r\n >\r\n {/* Leading icon */}\r\n {leadingIcon && (\r\n <View\r\n style={{\r\n width: s.iconSize,\r\n height: s.iconSize,\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n flexShrink: 0,\r\n }}\r\n >\r\n {leadingIcon}\r\n </View>\r\n )}\r\n\r\n {/* Label */}\r\n <Text\r\n style={{\r\n color: c.text,\r\n fontSize: s.fontSize,\r\n lineHeight: s.lineHeight,\r\n letterSpacing: s.letterSpacing,\r\n includeFontPadding: false,\r\n }}\r\n numberOfLines={1}\r\n >\r\n {label}\r\n </Text>\r\n\r\n {/* Badge */}\r\n {badge !== undefined && (\r\n <View\r\n style={{\r\n width: s.badgeSize,\r\n height: s.badgeSize,\r\n borderRadius: s.badgeSize / 2,\r\n backgroundColor: c.badgeBg,\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n flexShrink: 0,\r\n }}\r\n >\r\n <Text\r\n style={{\r\n color: c.badgeText,\r\n fontSize: s.badgeFontSize,\r\n lineHeight: s.badgeLineHeight,\r\n includeFontPadding: false,\r\n fontWeight: '500',\r\n }}\r\n >\r\n {badge}\r\n </Text>\r\n </View>\r\n )}\r\n\r\n {/* Dismiss button */}\r\n {dismissible && (\r\n <Pressable\r\n onPress={onDismiss}\r\n accessibilityRole=\"button\"\r\n accessibilityLabel=\"Dismiss\"\r\n hitSlop={4}\r\n style={({ pressed }) => ({\r\n width: s.closeBtnSize,\r\n height: s.closeBtnSize,\r\n borderRadius: s.closeBtnSize / 2,\r\n backgroundColor: pressed\r\n ? cr.transparent.neutral.sysBlack10\r\n : c.closeBg,\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n flexShrink: 0,\r\n overflow: 'hidden',\r\n })}\r\n >\r\n <Ionicons name=\"close\" size={s.closeIconSize} color={c.text} />\r\n </Pressable>\r\n )}\r\n </View>\r\n );\r\n}\r\n\r\nconst styles = StyleSheet.create({\r\n root: {\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n alignSelf: 'flex-start',\r\n borderRadius: 9999,\r\n overflow: 'hidden',\r\n },\r\n elevated: {\r\n shadowColor: '#000',\r\n shadowOffset: { width: 0, height: 2 },\r\n shadowOpacity: 0.1,\r\n shadowRadius: 8,\r\n elevation: 2,\r\n // overflow must be visible for shadow on iOS — override here\r\n overflow: 'visible',\r\n },\r\n});\r\n"],"names":["Chip","getUsageColors","usage","cr","bg","surface","surfaceContainer","sysSurfaceContainerLowest","text","sysOnSurface","closeBg","sysSurfaceContainerLow","badgeBg","sysSurfaceContainer","badgeText","elevated","custom","info","sysInfo","accent","primary","sysOnPrimary","transparent","neutral","sysWhite20","sysOnInfo","success","sysSuccess","sysOnSuccess","error","sysError","sysOnError","warning","sysWarning","sysOnWarning","label","size","leadingIcon","dismissible","onDismiss","badge","style","colorRoles","dimensions","dim","typeScale","ts","useTheme","SIZE_TOKENS","useMemo","sm","height","paddingH","spacing","padding","sysPadding8","paddingV","sysPadding4","gap","fontSize","labelSmall","sysFontSize","lineHeight","sysLineHeight","letterSpacing","sysTracking","iconSize","closeBtnSize","closeIconSize","badgeSize","badgeFontSize","badgeLineHeight","md","sysPadding12","labelMedium","lg","sysPadding16","xl","bodyMedium","s","c","View","accessible","accessibilityRole","accessibilityLabel","undefined","styles","root","paddingHorizontal","paddingVertical","backgroundColor","width","alignItems","justifyContent","flexShrink","Text","color","includeFontPadding","numberOfLines","borderRadius","fontWeight","Pressable","onPress","hitSlop","pressed","sysBlack10","overflow","Ionicons","name","StyleSheet","create","flexDirection","alignSelf","shadowColor","shadowOffset","shadowOpacity","shadowRadius","elevation"],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { StyleProp, ViewStyle } from 'react-native';
|
|
3
|
+
export type DividerVariant = 'horizontal' | 'vertical';
|
|
4
|
+
export type DividerWeight = 'thin' | 'thick';
|
|
5
|
+
export interface DividerProps {
|
|
6
|
+
variant?: DividerVariant;
|
|
7
|
+
weight?: DividerWeight;
|
|
8
|
+
dashed?: boolean;
|
|
9
|
+
style?: StyleProp<ViewStyle>;
|
|
10
|
+
}
|
|
11
|
+
export declare function Divider({ variant, weight, dashed, style, }: DividerProps): React.JSX.Element;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "Divider", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return Divider;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _jsxruntime = require("react/jsx-runtime");
|
|
12
|
+
const _react = /*#__PURE__*/ _interop_require_default(require("react"));
|
|
13
|
+
const _reactnative = require("react-native");
|
|
14
|
+
const _theme = require("../../theme");
|
|
15
|
+
function _interop_require_default(obj) {
|
|
16
|
+
return obj && obj.__esModule ? obj : {
|
|
17
|
+
default: obj
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function Divider({ variant = 'horizontal', weight = 'thin', dashed = false, style }) {
|
|
21
|
+
const { colorRoles: cr, dimensions: dim } = (0, _theme.useTheme)();
|
|
22
|
+
const thickness = weight === 'thin' ? dim.borderWidth.sysStrokeThin : dim.borderWidth.sysStrokeThick;
|
|
23
|
+
const color = cr.outline.sysOutlineVariant;
|
|
24
|
+
if (variant === 'horizontal') {
|
|
25
|
+
return /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.View, {
|
|
26
|
+
style: [
|
|
27
|
+
{
|
|
28
|
+
// Zero height — the line is drawn as a top border
|
|
29
|
+
height: 0,
|
|
30
|
+
// Stretch to fill parent width
|
|
31
|
+
alignSelf: 'stretch',
|
|
32
|
+
borderTopWidth: thickness,
|
|
33
|
+
borderTopColor: color,
|
|
34
|
+
borderStyle: dashed ? 'dashed' : 'solid'
|
|
35
|
+
},
|
|
36
|
+
style
|
|
37
|
+
],
|
|
38
|
+
accessible: false
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
// Vertical
|
|
42
|
+
return /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.View, {
|
|
43
|
+
style: [
|
|
44
|
+
{
|
|
45
|
+
// Zero width — the line is drawn as a left border
|
|
46
|
+
width: 0,
|
|
47
|
+
// Stretch to fill parent height
|
|
48
|
+
alignSelf: 'stretch',
|
|
49
|
+
borderLeftWidth: thickness,
|
|
50
|
+
borderLeftColor: color,
|
|
51
|
+
borderStyle: dashed ? 'dashed' : 'solid'
|
|
52
|
+
},
|
|
53
|
+
style
|
|
54
|
+
],
|
|
55
|
+
accessible: false
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../packages/react-native/src/components/Divider/index.tsx"],"sourcesContent":["import React from 'react';\r\n\r\nimport { StyleProp, View, ViewStyle } from 'react-native';\r\n\r\nimport { useTheme } from '../../theme';\r\n\r\nexport type DividerVariant = 'horizontal' | 'vertical';\r\nexport type DividerWeight = 'thin' | 'thick';\r\n\r\nexport interface DividerProps {\r\n variant?: DividerVariant;\r\n weight?: DividerWeight;\r\n dashed?: boolean;\r\n style?: StyleProp<ViewStyle>;\r\n}\r\n\r\nexport function Divider({\r\n variant = 'horizontal',\r\n weight = 'thin',\r\n dashed = false,\r\n style,\r\n}: DividerProps) {\r\n const { colorRoles: cr, dimensions: dim } = useTheme();\r\n\r\n const thickness =\r\n weight === 'thin'\r\n ? dim.borderWidth.sysStrokeThin\r\n : dim.borderWidth.sysStrokeThick;\r\n\r\n const color = cr.outline.sysOutlineVariant;\r\n\r\n if (variant === 'horizontal') {\r\n return (\r\n <View\r\n style={[\r\n {\r\n // Zero height — the line is drawn as a top border\r\n height: 0,\r\n // Stretch to fill parent width\r\n alignSelf: 'stretch',\r\n borderTopWidth: thickness,\r\n borderTopColor: color,\r\n borderStyle: dashed ? 'dashed' : 'solid',\r\n },\r\n style,\r\n ]}\r\n accessible={false}\r\n />\r\n );\r\n }\r\n\r\n // Vertical\r\n return (\r\n <View\r\n style={[\r\n {\r\n // Zero width — the line is drawn as a left border\r\n width: 0,\r\n // Stretch to fill parent height\r\n alignSelf: 'stretch',\r\n borderLeftWidth: thickness,\r\n borderLeftColor: color,\r\n borderStyle: dashed ? 'dashed' : 'solid',\r\n },\r\n style,\r\n ]}\r\n accessible={false}\r\n />\r\n );\r\n}\r\n"],"names":["Divider","variant","weight","dashed","style","colorRoles","cr","dimensions","dim","useTheme","thickness","borderWidth","sysStrokeThin","sysStrokeThick","color","outline","sysOutlineVariant","View","height","alignSelf","borderTopWidth","borderTopColor","borderStyle","accessible","width","borderLeftWidth","borderLeftColor"],"mappings":";;;;+BAgBgBA;;;eAAAA;;;;8DAhBE;6BAEyB;uBAElB;;;;;;AAYlB,SAASA,QAAQ,EACtBC,UAAU,YAAY,EACtBC,SAAS,MAAM,EACfC,SAAS,KAAK,EACdC,KAAK,EACQ;IACb,MAAM,EAAEC,YAAYC,EAAE,EAAEC,YAAYC,GAAG,EAAE,GAAGC,IAAAA,eAAQ;IAEpD,MAAMC,YACJR,WAAW,SACPM,IAAIG,WAAW,CAACC,aAAa,GAC7BJ,IAAIG,WAAW,CAACE,cAAc;IAEpC,MAAMC,QAAQR,GAAGS,OAAO,CAACC,iBAAiB;IAE1C,IAAIf,YAAY,cAAc;QAC5B,qBACE,qBAACgB,iBAAI;YACHb,OAAO;gBACL;oBACE,kDAAkD;oBAClDc,QAAQ;oBACR,+BAA+B;oBAC/BC,WAAW;oBACXC,gBAAgBV;oBAChBW,gBAAgBP;oBAChBQ,aAAanB,SAAS,WAAW;gBACnC;gBACAC;aACD;YACDmB,YAAY;;IAGlB;IAEA,WAAW;IACX,qBACE,qBAACN,iBAAI;QACHb,OAAO;YACL;gBACE,kDAAkD;gBAClDoB,OAAO;gBACP,gCAAgC;gBAChCL,WAAW;gBACXM,iBAAiBf;gBACjBgB,iBAAiBZ;gBACjBQ,aAAanB,SAAS,WAAW;YACnC;YACAC;SACD;QACDmB,YAAY;;AAGlB"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { StyleProp, ViewStyle } from 'react-native';
|
|
3
|
+
export type EmptyStateStyle = 'icon' | 'illustration';
|
|
4
|
+
export type EmptyStateViewport = 'desktop' | 'mobile';
|
|
5
|
+
export interface EmptyStateProps {
|
|
6
|
+
/** Visual style of the graphic area */
|
|
7
|
+
style?: EmptyStateStyle;
|
|
8
|
+
/** desktop = larger type + 60px icon circle; mobile = smaller type + 48px circle */
|
|
9
|
+
viewport?: EmptyStateViewport;
|
|
10
|
+
/** Heading text (default: "No results") */
|
|
11
|
+
title?: string;
|
|
12
|
+
/** Body copy below the title */
|
|
13
|
+
description?: string;
|
|
14
|
+
/** Hide the description even when `description` is provided */
|
|
15
|
+
showDescription?: boolean;
|
|
16
|
+
/** Custom icon rendered inside the icon circle (icon style only) */
|
|
17
|
+
icon?: React.ReactNode;
|
|
18
|
+
/** Label for the optional action button */
|
|
19
|
+
actionLabel?: string;
|
|
20
|
+
onAction?: () => void;
|
|
21
|
+
/** Whether the action button is shown (default: true when actionLabel is set) */
|
|
22
|
+
showAction?: boolean;
|
|
23
|
+
containerStyle?: StyleProp<ViewStyle>;
|
|
24
|
+
}
|
|
25
|
+
export declare function EmptyState({ style, viewport, title, description, showDescription, icon, actionLabel, onAction, showAction, containerStyle, }: EmptyStateProps): React.JSX.Element;
|