@oxyhq/bloom 0.3.5 → 0.3.7
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/lib/commonjs/button/Button.js +68 -30
- package/lib/commonjs/button/Button.js.map +1 -1
- package/lib/commonjs/fonts/FontLoader.native.js +6 -6
- package/lib/commonjs/fonts/FontLoader.native.js.map +1 -1
- package/lib/commonjs/fonts/tokens.js +1 -1
- package/lib/commonjs/fonts/tokens.js.map +1 -1
- package/lib/commonjs/typography/index.js +6 -4
- package/lib/commonjs/typography/index.js.map +1 -1
- package/lib/module/button/Button.js +70 -32
- package/lib/module/button/Button.js.map +1 -1
- package/lib/module/fonts/FontLoader.native.js +6 -6
- package/lib/module/fonts/FontLoader.native.js.map +1 -1
- package/lib/module/fonts/tokens.js +1 -1
- package/lib/module/fonts/tokens.js.map +1 -1
- package/lib/module/typography/index.js +6 -4
- package/lib/module/typography/index.js.map +1 -1
- package/lib/typescript/commonjs/button/Button.d.ts.map +1 -1
- package/lib/typescript/commonjs/button/types.d.ts +11 -0
- package/lib/typescript/commonjs/button/types.d.ts.map +1 -1
- package/lib/typescript/commonjs/fonts/FontLoader.native.d.ts +2 -2
- package/lib/typescript/commonjs/fonts/tokens.d.ts +1 -1
- package/lib/typescript/commonjs/typography/index.d.ts.map +1 -1
- package/lib/typescript/module/button/Button.d.ts.map +1 -1
- package/lib/typescript/module/button/types.d.ts +11 -0
- package/lib/typescript/module/button/types.d.ts.map +1 -1
- package/lib/typescript/module/fonts/FontLoader.native.d.ts +2 -2
- package/lib/typescript/module/fonts/tokens.d.ts +1 -1
- package/lib/typescript/module/typography/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/Button.test.tsx +35 -0
- package/src/__tests__/FontLoader.native.test.tsx +7 -7
- package/src/button/Button.tsx +80 -30
- package/src/button/types.ts +12 -0
- package/src/fonts/FontLoader.native.tsx +6 -6
- package/src/fonts/tokens.ts +1 -1
- package/src/typography/index.tsx +6 -2
|
@@ -48,6 +48,8 @@ const ButtonComponent = ({
|
|
|
48
48
|
textStyle,
|
|
49
49
|
icon,
|
|
50
50
|
iconPosition = 'left',
|
|
51
|
+
loading = false,
|
|
52
|
+
loadingColor,
|
|
51
53
|
accessibilityLabel,
|
|
52
54
|
accessibilityHint,
|
|
53
55
|
hitSlop,
|
|
@@ -57,11 +59,12 @@ const ButtonComponent = ({
|
|
|
57
59
|
}) => {
|
|
58
60
|
const theme = (0, _useTheme.useTheme)();
|
|
59
61
|
const hasScaleFeedback = SCALE_VARIANTS.has(variant);
|
|
62
|
+
const isInteractionBlocked = disabled || loading;
|
|
60
63
|
const {
|
|
61
64
|
scaleAnim,
|
|
62
65
|
onPressIn,
|
|
63
66
|
onPressOut
|
|
64
|
-
} = (0, _usePressAnimation.usePressAnimation)(hasScaleFeedback ? PRESS_SCALE : undefined);
|
|
67
|
+
} = (0, _usePressAnimation.usePressAnimation)(hasScaleFeedback && !isInteractionBlocked ? PRESS_SCALE : undefined);
|
|
65
68
|
const baseStyles = (0, _react.useMemo)(() => {
|
|
66
69
|
const sizeConfig = SIZE_CONFIG[size];
|
|
67
70
|
const styles = {
|
|
@@ -108,68 +111,103 @@ const ButtonComponent = ({
|
|
|
108
111
|
}
|
|
109
112
|
return styles;
|
|
110
113
|
}, [variant, size, theme]);
|
|
111
|
-
const
|
|
112
|
-
const sizeConfig = SIZE_CONFIG[size];
|
|
113
|
-
const styles = {
|
|
114
|
-
fontSize: sizeConfig.fontSize,
|
|
115
|
-
fontWeight: _reactNative.Platform.OS === 'web' ? 'bold' : '600'
|
|
116
|
-
};
|
|
114
|
+
const resolvedTextColor = (0, _react.useMemo)(() => {
|
|
117
115
|
switch (variant) {
|
|
118
116
|
case 'primary':
|
|
119
|
-
|
|
120
|
-
break;
|
|
117
|
+
return theme.colors.card;
|
|
121
118
|
case 'secondary':
|
|
122
|
-
|
|
123
|
-
break;
|
|
119
|
+
return theme.colors.text;
|
|
124
120
|
case 'inverse':
|
|
125
|
-
|
|
126
|
-
break;
|
|
121
|
+
return '#000000';
|
|
127
122
|
case 'ghost':
|
|
128
123
|
case 'text':
|
|
129
|
-
|
|
130
|
-
|
|
124
|
+
return theme.colors.primary;
|
|
125
|
+
case 'icon':
|
|
126
|
+
default:
|
|
127
|
+
return theme.colors.text;
|
|
131
128
|
}
|
|
132
|
-
|
|
133
|
-
|
|
129
|
+
}, [variant, theme]);
|
|
130
|
+
const computedTextStyle = (0, _react.useMemo)(() => {
|
|
131
|
+
const sizeConfig = SIZE_CONFIG[size];
|
|
132
|
+
return {
|
|
133
|
+
fontSize: sizeConfig.fontSize,
|
|
134
|
+
fontWeight: _reactNative.Platform.OS === 'web' ? 'bold' : '600',
|
|
135
|
+
color: resolvedTextColor
|
|
136
|
+
};
|
|
137
|
+
}, [size, resolvedTextColor]);
|
|
134
138
|
const defaultHitSlop = variant === 'icon' ? ICON_HIT_SLOP : undefined;
|
|
135
139
|
const resolvedActiveOpacity = activeOpacity ?? (variant === 'icon' ? 0.7 : 0.8);
|
|
136
140
|
const resolvedClassName = className ?? (variant === 'icon' ? 'bg-background border border-border' : undefined);
|
|
141
|
+
const content = /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
|
|
142
|
+
children: [iconPosition === 'left' && icon, children != null && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
143
|
+
style: [computedTextStyle, textStyle],
|
|
144
|
+
children: children
|
|
145
|
+
}), iconPosition === 'right' && icon]
|
|
146
|
+
});
|
|
137
147
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.View, {
|
|
138
148
|
style: hasScaleFeedback ? {
|
|
139
149
|
transform: [{
|
|
140
150
|
scale: scaleAnim
|
|
141
151
|
}]
|
|
142
152
|
} : undefined,
|
|
143
|
-
children: /*#__PURE__*/(0, _jsxRuntime.
|
|
153
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Pressable, {
|
|
144
154
|
...(resolvedClassName ? {
|
|
145
155
|
className: resolvedClassName
|
|
146
156
|
} : {}),
|
|
147
157
|
style: ({
|
|
148
158
|
pressed
|
|
149
|
-
}) => [baseStyles, disabled && {
|
|
159
|
+
}) => [baseStyles, disabled && !loading && {
|
|
150
160
|
opacity: 0.5
|
|
151
|
-
}, pressed && !hasScaleFeedback && {
|
|
161
|
+
}, pressed && !hasScaleFeedback && !isInteractionBlocked && {
|
|
152
162
|
opacity: resolvedActiveOpacity
|
|
153
163
|
}, style],
|
|
154
|
-
onPress: onPress,
|
|
155
|
-
onPressIn: onPressIn,
|
|
156
|
-
onPressOut: onPressOut,
|
|
157
|
-
disabled:
|
|
164
|
+
onPress: isInteractionBlocked ? undefined : onPress,
|
|
165
|
+
onPressIn: isInteractionBlocked ? undefined : onPressIn,
|
|
166
|
+
onPressOut: isInteractionBlocked ? undefined : onPressOut,
|
|
167
|
+
disabled: isInteractionBlocked,
|
|
158
168
|
hitSlop: hitSlop ?? defaultHitSlop,
|
|
159
169
|
accessibilityLabel: accessibilityLabel,
|
|
160
170
|
accessibilityHint: accessibilityHint,
|
|
161
171
|
accessibilityRole: "button",
|
|
162
|
-
accessibilityState: {
|
|
163
|
-
disabled
|
|
172
|
+
accessibilityState: loading ? {
|
|
173
|
+
disabled: isInteractionBlocked,
|
|
174
|
+
busy: true
|
|
175
|
+
} : {
|
|
176
|
+
disabled: isInteractionBlocked
|
|
164
177
|
},
|
|
165
178
|
testID: testID,
|
|
166
|
-
children:
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
179
|
+
children: loading ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
|
|
180
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
181
|
+
style: styles.loadingHiddenContent,
|
|
182
|
+
importantForAccessibility: "no-hide-descendants",
|
|
183
|
+
accessibilityElementsHidden: true,
|
|
184
|
+
children: content
|
|
185
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
186
|
+
style: styles.loadingOverlay,
|
|
187
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ActivityIndicator, {
|
|
188
|
+
size: "small",
|
|
189
|
+
color: loadingColor ?? resolvedTextColor
|
|
190
|
+
})
|
|
191
|
+
})]
|
|
192
|
+
}) : content
|
|
170
193
|
})
|
|
171
194
|
});
|
|
172
195
|
};
|
|
196
|
+
const styles = _reactNative.StyleSheet.create({
|
|
197
|
+
loadingHiddenContent: {
|
|
198
|
+
flexDirection: 'row',
|
|
199
|
+
alignItems: 'center',
|
|
200
|
+
justifyContent: 'center',
|
|
201
|
+
opacity: 0,
|
|
202
|
+
pointerEvents: 'none'
|
|
203
|
+
},
|
|
204
|
+
loadingOverlay: {
|
|
205
|
+
..._reactNative.StyleSheet.absoluteFillObject,
|
|
206
|
+
alignItems: 'center',
|
|
207
|
+
justifyContent: 'center',
|
|
208
|
+
pointerEvents: 'none'
|
|
209
|
+
}
|
|
210
|
+
});
|
|
173
211
|
const Button = exports.Button = /*#__PURE__*/(0, _react.memo)(ButtonComponent);
|
|
174
212
|
Button.displayName = 'Button';
|
|
175
213
|
const PrimaryButton = exports.PrimaryButton = /*#__PURE__*/(0, _react.memo)(props => /*#__PURE__*/(0, _jsxRuntime.jsx)(Button, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_useTheme","_usePressAnimation","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","SIZE_CONFIG","small","paddingVertical","paddingHorizontal","fontSize","minHeight","medium","large","ICON_HIT_SLOP","top","bottom","left","right","PRESS_SCALE","SCALE_VARIANTS","Set","ButtonComponent","onPress","children","disabled","variant","size","style","textStyle","icon","iconPosition","accessibilityLabel","accessibilityHint","hitSlop","activeOpacity","testID","className","theme","useTheme","hasScaleFeedback","scaleAnim","onPressIn","onPressOut","usePressAnimation","undefined","baseStyles","useMemo","sizeConfig","styles","alignItems","justifyContent","flexDirection","overflow","backgroundColor","colors","primary","borderRadius","borderWidth","borderColor","border","padding","width","height","computedTextStyle","fontWeight","Platform","OS","color","
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_useTheme","_usePressAnimation","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","SIZE_CONFIG","small","paddingVertical","paddingHorizontal","fontSize","minHeight","medium","large","ICON_HIT_SLOP","top","bottom","left","right","PRESS_SCALE","SCALE_VARIANTS","Set","ButtonComponent","onPress","children","disabled","variant","size","style","textStyle","icon","iconPosition","loading","loadingColor","accessibilityLabel","accessibilityHint","hitSlop","activeOpacity","testID","className","theme","useTheme","hasScaleFeedback","isInteractionBlocked","scaleAnim","onPressIn","onPressOut","usePressAnimation","undefined","baseStyles","useMemo","sizeConfig","styles","alignItems","justifyContent","flexDirection","overflow","backgroundColor","colors","primary","borderRadius","borderWidth","borderColor","border","padding","width","height","resolvedTextColor","card","text","computedTextStyle","fontWeight","Platform","OS","color","defaultHitSlop","resolvedActiveOpacity","resolvedClassName","content","jsxs","Fragment","jsx","Text","Animated","View","transform","scale","Pressable","pressed","opacity","accessibilityRole","accessibilityState","busy","loadingHiddenContent","importantForAccessibility","accessibilityElementsHidden","loadingOverlay","ActivityIndicator","StyleSheet","create","pointerEvents","absoluteFillObject","Button","exports","memo","displayName","PrimaryButton","props","SecondaryButton","IconButton","GhostButton","InverseButton","TextButton"],"sourceRoot":"../../../src","sources":["button/Button.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAYA,IAAAE,SAAA,GAAAF,OAAA;AACA,IAAAG,kBAAA,GAAAH,OAAA;AAA+D,IAAAI,WAAA,GAAAJ,OAAA;AAAA,SAAAD,wBAAAM,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAR,uBAAA,YAAAA,CAAAM,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAK/D,MAAMkB,WAAW,GAAG;EAClBC,KAAK,EAAE;IACLC,eAAe,EAAE,CAAC;IAClBC,iBAAiB,EAAE,EAAE;IACrBC,QAAQ,EAAE,EAAE;IACZC,SAAS,EAAE;EACb,CAAC;EACDC,MAAM,EAAE;IACNJ,eAAe,EAAE,CAAC;IAClBC,iBAAiB,EAAE,EAAE;IACrBC,QAAQ,EAAE,EAAE;IACZC,SAAS,EAAE;EACb,CAAC;EACDE,KAAK,EAAE;IACLL,eAAe,EAAE,EAAE;IACnBC,iBAAiB,EAAE,EAAE;IACrBC,QAAQ,EAAE,EAAE;IACZC,SAAS,EAAE;EACb;AACF,CAAU;AAEV,MAAMG,aAAa,GAAG;EAAEC,GAAG,EAAE,EAAE;EAAEC,MAAM,EAAE,EAAE;EAAEC,IAAI,EAAE,EAAE;EAAEC,KAAK,EAAE;AAAG,CAAU;AAE3E,MAAMC,WAAW,GAAG,IAAI;AACxB,MAAMC,cAAc,GAAG,IAAIC,GAAG,CAAS,CAAC,SAAS,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;AAE3E,MAAMC,eAAsC,GAAGA,CAAC;EAC9CC,OAAO;EACPC,QAAQ;EACRC,QAAQ,GAAG,KAAK;EAChBC,OAAO,GAAG,SAAS;EACnBC,IAAI,GAAG,QAAQ;EACfC,KAAK;EACLC,SAAS;EACTC,IAAI;EACJC,YAAY,GAAG,MAAM;EACrBC,OAAO,GAAG,KAAK;EACfC,YAAY;EACZC,kBAAkB;EAClBC,iBAAiB;EACjBC,OAAO;EACPC,aAAa;EACbC,MAAM;EACNC;AACF,CAAC,KAAK;EACJ,MAAMC,KAAK,GAAG,IAAAC,kBAAQ,EAAC,CAAC;EACxB,MAAMC,gBAAgB,GAAGtB,cAAc,CAACtB,GAAG,CAAC4B,OAAO,CAAC;EACpD,MAAMiB,oBAAoB,GAAGlB,QAAQ,IAAIO,OAAO;EAChD,MAAM;IAAEY,SAAS;IAAEC,SAAS;IAAEC;EAAW,CAAC,GAAG,IAAAC,oCAAiB,EAC5DL,gBAAgB,IAAI,CAACC,oBAAoB,GAAGxB,WAAW,GAAG6B,SAC5D,CAAC;EAED,MAAMC,UAAU,GAAG,IAAAC,cAAO,EAAC,MAAiB;IAC1C,MAAMC,UAAU,GAAG7C,WAAW,CAACqB,IAAI,CAAC;IACpC,MAAMyB,MAAiB,GAAG;MACxBC,UAAU,EAAE,QAAQ;MACpBC,cAAc,EAAE,QAAQ;MACxBC,aAAa,EAAE,KAAK;MACpBC,QAAQ,EAAE;IACZ,CAAC;IAED,IAAI9B,OAAO,KAAK,MAAM,EAAE;MACtB0B,MAAM,CAAC5C,eAAe,GAAG2C,UAAU,CAAC3C,eAAe;MACnD4C,MAAM,CAAC3C,iBAAiB,GAAG0C,UAAU,CAAC1C,iBAAiB;MACvD2C,MAAM,CAACzC,SAAS,GAAGwC,UAAU,CAACxC,SAAS;IACzC;IAEA,QAAQe,OAAO;MACb,KAAK,SAAS;QACZ0B,MAAM,CAACK,eAAe,GAAGjB,KAAK,CAACkB,MAAM,CAACC,OAAO;QAC7CP,MAAM,CAACQ,YAAY,GAAG,EAAE;QACxB;MACF,KAAK,WAAW;QACdR,MAAM,CAACK,eAAe,GAAG,aAAa;QACtCL,MAAM,CAACS,WAAW,GAAG,CAAC;QACtBT,MAAM,CAACU,WAAW,GAAGtB,KAAK,CAACkB,MAAM,CAACK,MAAM;QACxCX,MAAM,CAACQ,YAAY,GAAG,EAAE;QACxB;MACF,KAAK,SAAS;QACZR,MAAM,CAACK,eAAe,GAAG,SAAS;QAClCL,MAAM,CAACQ,YAAY,GAAG,EAAE;QACxB;MACF,KAAK,MAAM;QACTR,MAAM,CAACQ,YAAY,GAAG,GAAG;QACzBR,MAAM,CAACY,OAAO,GAAG,CAAC;QAClBZ,MAAM,CAACa,KAAK,GAAGd,UAAU,CAACxC,SAAS;QACnCyC,MAAM,CAACc,MAAM,GAAGf,UAAU,CAACxC,SAAS;QACpC;MACF,KAAK,OAAO;QACVyC,MAAM,CAACK,eAAe,GAAG,aAAa;QACtCL,MAAM,CAACQ,YAAY,GAAG,CAAC;QACvB;MACF,KAAK,MAAM;QACTR,MAAM,CAACK,eAAe,GAAG,aAAa;QACtCL,MAAM,CAAC5C,eAAe,GAAG,CAAC;QAC1B4C,MAAM,CAAC3C,iBAAiB,GAAG,CAAC;QAC5B;IACJ;IAEA,OAAO2C,MAAM;EACf,CAAC,EAAE,CAAC1B,OAAO,EAAEC,IAAI,EAAEa,KAAK,CAAC,CAAC;EAE1B,MAAM2B,iBAAiB,GAAG,IAAAjB,cAAO,EAAC,MAAc;IAC9C,QAAQxB,OAAO;MACb,KAAK,SAAS;QACZ,OAAOc,KAAK,CAACkB,MAAM,CAACU,IAAI;MAC1B,KAAK,WAAW;QACd,OAAO5B,KAAK,CAACkB,MAAM,CAACW,IAAI;MAC1B,KAAK,SAAS;QACZ,OAAO,SAAS;MAClB,KAAK,OAAO;MACZ,KAAK,MAAM;QACT,OAAO7B,KAAK,CAACkB,MAAM,CAACC,OAAO;MAC7B,KAAK,MAAM;MACX;QACE,OAAOnB,KAAK,CAACkB,MAAM,CAACW,IAAI;IAC5B;EACF,CAAC,EAAE,CAAC3C,OAAO,EAAEc,KAAK,CAAC,CAAC;EAEpB,MAAM8B,iBAAiB,GAAG,IAAApB,cAAO,EAAC,MAAiB;IACjD,MAAMC,UAAU,GAAG7C,WAAW,CAACqB,IAAI,CAAC;IACpC,OAAO;MACLjB,QAAQ,EAAEyC,UAAU,CAACzC,QAAQ;MAC7B6D,UAAU,EAAEC,qBAAQ,CAACC,EAAE,KAAK,KAAK,GAAG,MAAM,GAAG,KAAK;MAClDC,KAAK,EAAEP;IACT,CAAC;EACH,CAAC,EAAE,CAACxC,IAAI,EAAEwC,iBAAiB,CAAC,CAAC;EAE7B,MAAMQ,cAAc,GAAGjD,OAAO,KAAK,MAAM,GAAGZ,aAAa,GAAGkC,SAAS;EACrE,MAAM4B,qBAAqB,GAAGvC,aAAa,KAAKX,OAAO,KAAK,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC;EAC/E,MAAMmD,iBAAiB,GAAGtC,SAAS,KAAKb,OAAO,KAAK,MAAM,GAAG,oCAAoC,GAAGsB,SAAS,CAAC;EAE9G,MAAM8B,OAAO,gBACX,IAAA5F,WAAA,CAAA6F,IAAA,EAAA7F,WAAA,CAAA8F,QAAA;IAAAxD,QAAA,GACGO,YAAY,KAAK,MAAM,IAAID,IAAI,EAC/BN,QAAQ,IAAI,IAAI,iBACf,IAAAtC,WAAA,CAAA+F,GAAA,EAAClG,YAAA,CAAAmG,IAAI;MAACtD,KAAK,EAAE,CAAC0C,iBAAiB,EAAEzC,SAAS,CAAE;MAAAL,QAAA,EAAEA;IAAQ,CAAO,CAC9D,EACAO,YAAY,KAAK,OAAO,IAAID,IAAI;EAAA,CACjC,CACH;EAED,oBACE,IAAA5C,WAAA,CAAA+F,GAAA,EAAClG,YAAA,CAAAoG,QAAQ,CAACC,IAAI;IAACxD,KAAK,EAAEc,gBAAgB,GAAG;MAAE2C,SAAS,EAAE,CAAC;QAAEC,KAAK,EAAE1C;MAAU,CAAC;IAAE,CAAC,GAAGI,SAAU;IAAAxB,QAAA,eACzF,IAAAtC,WAAA,CAAA+F,GAAA,EAAClG,YAAA,CAAAwG,SAAS;MAAA,IACHV,iBAAiB,GAAG;QAAEtC,SAAS,EAAEsC;MAAkB,CAAC,GAA6B,CAAC,CAAC;MACxFjD,KAAK,EAAEA,CAAC;QAAE4D;MAAQ,CAAC,KAAK,CACtBvC,UAAU,EACVxB,QAAQ,IAAI,CAACO,OAAO,IAAI;QAAEyD,OAAO,EAAE;MAAI,CAAC,EACxCD,OAAO,IAAI,CAAC9C,gBAAgB,IAAI,CAACC,oBAAoB,IAAI;QAAE8C,OAAO,EAAEb;MAAsB,CAAC,EAC3FhD,KAAK,CACL;MACFL,OAAO,EAAEoB,oBAAoB,GAAGK,SAAS,GAAGzB,OAAQ;MACpDsB,SAAS,EAAEF,oBAAoB,GAAGK,SAAS,GAAGH,SAAU;MACxDC,UAAU,EAAEH,oBAAoB,GAAGK,SAAS,GAAGF,UAAW;MAC1DrB,QAAQ,EAAEkB,oBAAqB;MAC/BP,OAAO,EAAEA,OAAO,IAAIuC,cAAe;MACnCzC,kBAAkB,EAAEA,kBAAmB;MACvCC,iBAAiB,EAAEA,iBAAkB;MACrCuD,iBAAiB,EAAC,QAAQ;MAC1BC,kBAAkB,EAAE3D,OAAO,GAAG;QAAEP,QAAQ,EAAEkB,oBAAoB;QAAEiD,IAAI,EAAE;MAAK,CAAC,GAAG;QAAEnE,QAAQ,EAAEkB;MAAqB,CAAE;MAClHL,MAAM,EAAEA,MAAO;MAAAd,QAAA,EAEdQ,OAAO,gBACN,IAAA9C,WAAA,CAAA6F,IAAA,EAAA7F,WAAA,CAAA8F,QAAA;QAAAxD,QAAA,gBACE,IAAAtC,WAAA,CAAA+F,GAAA,EAAClG,YAAA,CAAAqG,IAAI;UACHxD,KAAK,EAAEwB,MAAM,CAACyC,oBAAqB;UACnCC,yBAAyB,EAAC,qBAAqB;UAC/CC,2BAA2B;UAAAvE,QAAA,EAE1BsD;QAAO,CACJ,CAAC,eACP,IAAA5F,WAAA,CAAA+F,GAAA,EAAClG,YAAA,CAAAqG,IAAI;UAACxD,KAAK,EAAEwB,MAAM,CAAC4C,cAAe;UAAAxE,QAAA,eACjC,IAAAtC,WAAA,CAAA+F,GAAA,EAAClG,YAAA,CAAAkH,iBAAiB;YAACtE,IAAI,EAAC,OAAO;YAAC+C,KAAK,EAAEzC,YAAY,IAAIkC;UAAkB,CAAE;QAAC,CACxE,CAAC;MAAA,CACP,CAAC,GAEHW;IACD,CACQ;EAAC,CACC,CAAC;AAEpB,CAAC;AAED,MAAM1B,MAAM,GAAG8C,uBAAU,CAACC,MAAM,CAAC;EAC/BN,oBAAoB,EAAE;IACpBtC,aAAa,EAAE,KAAK;IACpBF,UAAU,EAAE,QAAQ;IACpBC,cAAc,EAAE,QAAQ;IACxBmC,OAAO,EAAE,CAAC;IACVW,aAAa,EAAE;EACjB,CAAC;EACDJ,cAAc,EAAE;IACd,GAAGE,uBAAU,CAACG,kBAAkB;IAChChD,UAAU,EAAE,QAAQ;IACpBC,cAAc,EAAE,QAAQ;IACxB8C,aAAa,EAAE;EACjB;AACF,CAAC,CAAC;AAEK,MAAME,MAAM,GAAAC,OAAA,CAAAD,MAAA,gBAAG,IAAAE,WAAI,EAAClF,eAAe,CAAC;AAC3CgF,MAAM,CAACG,WAAW,GAAG,QAAQ;AAEtB,MAAMC,aAAa,GAAAH,OAAA,CAAAG,aAAA,gBAAG,IAAAF,WAAI,EAAEG,KAAmC,iBACpE,IAAAzH,WAAA,CAAA+F,GAAA,EAACqB,MAAM;EAAA,GAAKK,KAAK;EAAEjF,OAAO,EAAC;AAAS,CAAE,CACvC,CAAC;AACFgF,aAAa,CAACD,WAAW,GAAG,eAAe;AAEpC,MAAMG,eAAe,GAAAL,OAAA,CAAAK,eAAA,gBAAG,IAAAJ,WAAI,EAAEG,KAAmC,iBACtE,IAAAzH,WAAA,CAAA+F,GAAA,EAACqB,MAAM;EAAA,GAAKK,KAAK;EAAEjF,OAAO,EAAC;AAAW,CAAE,CACzC,CAAC;AACFkF,eAAe,CAACH,WAAW,GAAG,iBAAiB;AAExC,MAAMI,UAAU,GAAAN,OAAA,CAAAM,UAAA,gBAAG,IAAAL,WAAI,EAAEG,KAAmC,iBACjE,IAAAzH,WAAA,CAAA+F,GAAA,EAACqB,MAAM;EAAA,GAAKK,KAAK;EAAEjF,OAAO,EAAC;AAAM,CAAE,CACpC,CAAC;AACFmF,UAAU,CAACJ,WAAW,GAAG,YAAY;AAE9B,MAAMK,WAAW,GAAAP,OAAA,CAAAO,WAAA,gBAAG,IAAAN,WAAI,EAAEG,KAAmC,iBAClE,IAAAzH,WAAA,CAAA+F,GAAA,EAACqB,MAAM;EAAA,GAAKK,KAAK;EAAEjF,OAAO,EAAC;AAAO,CAAE,CACrC,CAAC;AACFoF,WAAW,CAACL,WAAW,GAAG,aAAa;AAEhC,MAAMM,aAAa,GAAAR,OAAA,CAAAQ,aAAA,gBAAG,IAAAP,WAAI,EAAEG,KAAmC,iBACpE,IAAAzH,WAAA,CAAA+F,GAAA,EAACqB,MAAM;EAAA,GAAKK,KAAK;EAAEjF,OAAO,EAAC;AAAS,CAAE,CACvC,CAAC;AACFqF,aAAa,CAACN,WAAW,GAAG,eAAe;AAEpC,MAAMO,UAAU,GAAAT,OAAA,CAAAS,UAAA,gBAAG,IAAAR,WAAI,EAAEG,KAAmC,iBACjE,IAAAzH,WAAA,CAAA+F,GAAA,EAACqB,MAAM;EAAA,GAAKK,KAAK;EAAEjF,OAAO,EAAC;AAAM,CAAE,CACpC,CAAC;AACFsF,UAAU,CAACP,WAAW,GAAG,YAAY","ignoreList":[]}
|
|
@@ -19,9 +19,9 @@ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r
|
|
|
19
19
|
|
|
20
20
|
/**
|
|
21
21
|
* Mutates `Text.defaultProps.style` so every native `<Text>` in the consuming
|
|
22
|
-
* app inherits Bloom's
|
|
23
|
-
* to any existing default style so caller-provided `style`
|
|
24
|
-
* applies AFTER `defaultProps.style`) still wins for overrides.
|
|
22
|
+
* app inherits Bloom's default font (BlomusModernus). The Bloom family name
|
|
23
|
+
* is prepended to any existing default style so caller-provided `style`
|
|
24
|
+
* (which React applies AFTER `defaultProps.style`) still wins for overrides.
|
|
25
25
|
*
|
|
26
26
|
* Idempotent: re-invoking it after the first apply is a no-op because the
|
|
27
27
|
* first style entry will already be the Bloom default we added.
|
|
@@ -30,7 +30,7 @@ function applyDefaultTextFont() {
|
|
|
30
30
|
const TextWithDefaults = _reactNative.Text;
|
|
31
31
|
const existing = TextWithDefaults.defaultProps?.style;
|
|
32
32
|
const bloomDefault = {
|
|
33
|
-
fontFamily: '
|
|
33
|
+
fontFamily: 'BlomusModernus'
|
|
34
34
|
};
|
|
35
35
|
|
|
36
36
|
// Detect whether we've already prepended ourselves. `existing` may be an
|
|
@@ -61,8 +61,8 @@ function applyDefaultTextFont() {
|
|
|
61
61
|
* provider tree ever flips `fonts` back on.
|
|
62
62
|
*
|
|
63
63
|
* Once the bundled fonts report `loaded === true`, this component also
|
|
64
|
-
* mutates `Text.defaultProps.style` to prepend `{ fontFamily: '
|
|
65
|
-
* so every native `<Text>` in the consuming app inherits Bloom's
|
|
64
|
+
* mutates `Text.defaultProps.style` to prepend `{ fontFamily: 'BlomusModernus' }`
|
|
65
|
+
* so every native `<Text>` in the consuming app inherits Bloom's default
|
|
66
66
|
* family without callers needing to import `<Text>` from `@oxyhq/bloom`.
|
|
67
67
|
* The mutation is gated by a `useRef` so it runs at most once per
|
|
68
68
|
* FontLoader instance, and the underlying apply is idempotent — the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_expoFont","_fontAssets","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","applyDefaultTextFont","TextWithDefaults","Text","existing","defaultProps","style","bloomDefault","fontFamily","Array","isArray","first","nextStyle","FontLoader","enabled","fallback","children","loaded","useFonts","FONT_ASSETS","defaultsApplied","useRef","current","jsx","Fragment"],"sourceRoot":"../../../src","sources":["fonts/FontLoader.native.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,SAAA,GAAAF,OAAA;AACA,IAAAG,WAAA,GAAAH,OAAA;AAA4C,IAAAI,WAAA,GAAAJ,OAAA;AAAA,SAAAD,wBAAAM,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAR,uBAAA,YAAAA,CAAAM,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAc5C;AACA;AACA;AACA;AACA;AACA;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASkB,oBAAoBA,CAAA,EAAS;EACpC,MAAMC,gBAAgB,GAAGC,iBAAwB;EACjD,MAAMC,QAAQ,GAAGF,gBAAgB,CAACG,YAAY,EAAEC,KAAK;EACrD,MAAMC,YAAuB,GAAG;IAAEC,UAAU,EAAE;
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_expoFont","_fontAssets","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","applyDefaultTextFont","TextWithDefaults","Text","existing","defaultProps","style","bloomDefault","fontFamily","Array","isArray","first","nextStyle","FontLoader","enabled","fallback","children","loaded","useFonts","FONT_ASSETS","defaultsApplied","useRef","current","jsx","Fragment"],"sourceRoot":"../../../src","sources":["fonts/FontLoader.native.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -16,7 +16,7 @@ exports.fontFamilies = exports.fontCssVars = void 0;
|
|
|
16
16
|
|
|
17
17
|
const fontFamilies = exports.fontFamilies = {
|
|
18
18
|
display: 'BlomusModernus, Georgia, "Times New Roman", serif',
|
|
19
|
-
sans: '
|
|
19
|
+
sans: 'BlomusModernus, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',
|
|
20
20
|
mono: '"Geist Mono", ui-monospace, SFMono-Regular, Menlo, monospace'
|
|
21
21
|
};
|
|
22
22
|
const fontCssVars = exports.fontCssVars = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["fontFamilies","exports","display","sans","mono","fontCssVars"],"sourceRoot":"../../../src","sources":["fonts/tokens.ts"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO,MAAMA,YAAY,GAAAC,OAAA,CAAAD,YAAA,GAAG;EAC1BE,OAAO,EAAE,mDAAmD;EAC5DC,IAAI,EAAE,
|
|
1
|
+
{"version":3,"names":["fontFamilies","exports","display","sans","mono","fontCssVars"],"sourceRoot":"../../../src","sources":["fonts/tokens.ts"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO,MAAMA,YAAY,GAAAC,OAAA,CAAAD,YAAA,GAAG;EAC1BE,OAAO,EAAE,mDAAmD;EAC5DC,IAAI,EAAE,mFAAmF;EACzFC,IAAI,EAAE;AACR,CAAU;AAEH,MAAMC,WAAW,GAAAJ,OAAA,CAAAI,WAAA,GAAG;EACzBH,OAAO,EAAE,sBAAsB;EAC/BC,IAAI,EAAE,mBAAmB;EACzBC,IAAI,EAAE;AACR,CAAU","ignoreList":[]}
|
|
@@ -30,14 +30,16 @@ function fontFamilyStyle(kind) {
|
|
|
30
30
|
fontFamily: `var(--bloom-font-${kind})`
|
|
31
31
|
};
|
|
32
32
|
}
|
|
33
|
-
if (kind === 'display') return {
|
|
34
|
-
fontFamily: 'BlomusModernus'
|
|
35
|
-
};
|
|
36
33
|
if (kind === 'mono') return {
|
|
37
34
|
fontFamily: 'Geist Mono'
|
|
38
35
|
};
|
|
36
|
+
// `display` and `sans` both resolve to BlomusModernus on native — Bloom's
|
|
37
|
+
// default body font. The CSS stack in `tokens.ts` differs (display vs sans
|
|
38
|
+
// have different fallback chains for web), but on RN the literal family
|
|
39
|
+
// name is the only thing that matters; the .ttf is registered via
|
|
40
|
+
// `useFonts(FONT_ASSETS)` in `FontLoader.native.tsx`.
|
|
39
41
|
return {
|
|
40
|
-
fontFamily: '
|
|
42
|
+
fontFamily: 'BlomusModernus'
|
|
41
43
|
};
|
|
42
44
|
}
|
|
43
45
|
const SANS_FONT_FAMILY = fontFamilyStyle('sans');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_useTheme","_tokens","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","fontFamilyStyle","kind","Platform","OS","fontFamily","SANS_FONT_FAMILY","DISPLAY_FONT_FAMILY","TextComponent","Text","children","style","rest","colors","useTheme","jsx","fontSize","color","text","exports","Span","memo","displayName","HEADING_STYLE","fontWeight","createHeadingElement","level","HeadingElement","extraProps","role","H1","H2","H3","H4","H5","H6","P","lineHeight"],"sourceRoot":"../../../src","sources":["typography/index.tsx"],"mappings":";;;;;;;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAQA,IAAAE,SAAA,GAAAF,OAAA;AACA,IAAAG,OAAA,GAAAH,OAAA;AAA+C,IAAAI,WAAA,GAAAJ,OAAA;AAAA,SAAAD,wBAAAM,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAR,uBAAA,YAAAA,CAAAM,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAI/C;AACA;AACA;AACA;AACA;AACA;AACA,SAASkB,eAAeA,CACtBC,IAAiC,EACT;EACxB,IAAIC,qBAAQ,CAACC,EAAE,KAAK,KAAK,EAAE;IACzB,OAAO;MAAEC,UAAU,EAAE,oBAAoBH,IAAI;IAAI,CAAC;EACpD;EACA,IAAIA,IAAI,KAAK,
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_useTheme","_tokens","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","fontFamilyStyle","kind","Platform","OS","fontFamily","SANS_FONT_FAMILY","DISPLAY_FONT_FAMILY","TextComponent","Text","children","style","rest","colors","useTheme","jsx","fontSize","color","text","exports","Span","memo","displayName","HEADING_STYLE","fontWeight","createHeadingElement","level","HeadingElement","extraProps","role","H1","H2","H3","H4","H5","H6","P","lineHeight"],"sourceRoot":"../../../src","sources":["typography/index.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import React, { useMemo, memo } from 'react';
|
|
4
|
-
import {
|
|
4
|
+
import { ActivityIndicator, Animated, Platform, Pressable, StyleSheet, Text, View } from 'react-native';
|
|
5
5
|
import { useTheme } from "../theme/use-theme.js";
|
|
6
6
|
import { usePressAnimation } from "../hooks/usePressAnimation.js";
|
|
7
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
7
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
8
8
|
const SIZE_CONFIG = {
|
|
9
9
|
small: {
|
|
10
10
|
paddingVertical: 6,
|
|
@@ -43,6 +43,8 @@ const ButtonComponent = ({
|
|
|
43
43
|
textStyle,
|
|
44
44
|
icon,
|
|
45
45
|
iconPosition = 'left',
|
|
46
|
+
loading = false,
|
|
47
|
+
loadingColor,
|
|
46
48
|
accessibilityLabel,
|
|
47
49
|
accessibilityHint,
|
|
48
50
|
hitSlop,
|
|
@@ -52,11 +54,12 @@ const ButtonComponent = ({
|
|
|
52
54
|
}) => {
|
|
53
55
|
const theme = useTheme();
|
|
54
56
|
const hasScaleFeedback = SCALE_VARIANTS.has(variant);
|
|
57
|
+
const isInteractionBlocked = disabled || loading;
|
|
55
58
|
const {
|
|
56
59
|
scaleAnim,
|
|
57
60
|
onPressIn,
|
|
58
61
|
onPressOut
|
|
59
|
-
} = usePressAnimation(hasScaleFeedback ? PRESS_SCALE : undefined);
|
|
62
|
+
} = usePressAnimation(hasScaleFeedback && !isInteractionBlocked ? PRESS_SCALE : undefined);
|
|
60
63
|
const baseStyles = useMemo(() => {
|
|
61
64
|
const sizeConfig = SIZE_CONFIG[size];
|
|
62
65
|
const styles = {
|
|
@@ -103,68 +106,103 @@ const ButtonComponent = ({
|
|
|
103
106
|
}
|
|
104
107
|
return styles;
|
|
105
108
|
}, [variant, size, theme]);
|
|
106
|
-
const
|
|
107
|
-
const sizeConfig = SIZE_CONFIG[size];
|
|
108
|
-
const styles = {
|
|
109
|
-
fontSize: sizeConfig.fontSize,
|
|
110
|
-
fontWeight: Platform.OS === 'web' ? 'bold' : '600'
|
|
111
|
-
};
|
|
109
|
+
const resolvedTextColor = useMemo(() => {
|
|
112
110
|
switch (variant) {
|
|
113
111
|
case 'primary':
|
|
114
|
-
|
|
115
|
-
break;
|
|
112
|
+
return theme.colors.card;
|
|
116
113
|
case 'secondary':
|
|
117
|
-
|
|
118
|
-
break;
|
|
114
|
+
return theme.colors.text;
|
|
119
115
|
case 'inverse':
|
|
120
|
-
|
|
121
|
-
break;
|
|
116
|
+
return '#000000';
|
|
122
117
|
case 'ghost':
|
|
123
118
|
case 'text':
|
|
124
|
-
|
|
125
|
-
|
|
119
|
+
return theme.colors.primary;
|
|
120
|
+
case 'icon':
|
|
121
|
+
default:
|
|
122
|
+
return theme.colors.text;
|
|
126
123
|
}
|
|
127
|
-
|
|
128
|
-
|
|
124
|
+
}, [variant, theme]);
|
|
125
|
+
const computedTextStyle = useMemo(() => {
|
|
126
|
+
const sizeConfig = SIZE_CONFIG[size];
|
|
127
|
+
return {
|
|
128
|
+
fontSize: sizeConfig.fontSize,
|
|
129
|
+
fontWeight: Platform.OS === 'web' ? 'bold' : '600',
|
|
130
|
+
color: resolvedTextColor
|
|
131
|
+
};
|
|
132
|
+
}, [size, resolvedTextColor]);
|
|
129
133
|
const defaultHitSlop = variant === 'icon' ? ICON_HIT_SLOP : undefined;
|
|
130
134
|
const resolvedActiveOpacity = activeOpacity ?? (variant === 'icon' ? 0.7 : 0.8);
|
|
131
135
|
const resolvedClassName = className ?? (variant === 'icon' ? 'bg-background border border-border' : undefined);
|
|
136
|
+
const content = /*#__PURE__*/_jsxs(_Fragment, {
|
|
137
|
+
children: [iconPosition === 'left' && icon, children != null && /*#__PURE__*/_jsx(Text, {
|
|
138
|
+
style: [computedTextStyle, textStyle],
|
|
139
|
+
children: children
|
|
140
|
+
}), iconPosition === 'right' && icon]
|
|
141
|
+
});
|
|
132
142
|
return /*#__PURE__*/_jsx(Animated.View, {
|
|
133
143
|
style: hasScaleFeedback ? {
|
|
134
144
|
transform: [{
|
|
135
145
|
scale: scaleAnim
|
|
136
146
|
}]
|
|
137
147
|
} : undefined,
|
|
138
|
-
children: /*#__PURE__*/
|
|
148
|
+
children: /*#__PURE__*/_jsx(Pressable, {
|
|
139
149
|
...(resolvedClassName ? {
|
|
140
150
|
className: resolvedClassName
|
|
141
151
|
} : {}),
|
|
142
152
|
style: ({
|
|
143
153
|
pressed
|
|
144
|
-
}) => [baseStyles, disabled && {
|
|
154
|
+
}) => [baseStyles, disabled && !loading && {
|
|
145
155
|
opacity: 0.5
|
|
146
|
-
}, pressed && !hasScaleFeedback && {
|
|
156
|
+
}, pressed && !hasScaleFeedback && !isInteractionBlocked && {
|
|
147
157
|
opacity: resolvedActiveOpacity
|
|
148
158
|
}, style],
|
|
149
|
-
onPress: onPress,
|
|
150
|
-
onPressIn: onPressIn,
|
|
151
|
-
onPressOut: onPressOut,
|
|
152
|
-
disabled:
|
|
159
|
+
onPress: isInteractionBlocked ? undefined : onPress,
|
|
160
|
+
onPressIn: isInteractionBlocked ? undefined : onPressIn,
|
|
161
|
+
onPressOut: isInteractionBlocked ? undefined : onPressOut,
|
|
162
|
+
disabled: isInteractionBlocked,
|
|
153
163
|
hitSlop: hitSlop ?? defaultHitSlop,
|
|
154
164
|
accessibilityLabel: accessibilityLabel,
|
|
155
165
|
accessibilityHint: accessibilityHint,
|
|
156
166
|
accessibilityRole: "button",
|
|
157
|
-
accessibilityState: {
|
|
158
|
-
disabled
|
|
167
|
+
accessibilityState: loading ? {
|
|
168
|
+
disabled: isInteractionBlocked,
|
|
169
|
+
busy: true
|
|
170
|
+
} : {
|
|
171
|
+
disabled: isInteractionBlocked
|
|
159
172
|
},
|
|
160
173
|
testID: testID,
|
|
161
|
-
children:
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
174
|
+
children: loading ? /*#__PURE__*/_jsxs(_Fragment, {
|
|
175
|
+
children: [/*#__PURE__*/_jsx(View, {
|
|
176
|
+
style: styles.loadingHiddenContent,
|
|
177
|
+
importantForAccessibility: "no-hide-descendants",
|
|
178
|
+
accessibilityElementsHidden: true,
|
|
179
|
+
children: content
|
|
180
|
+
}), /*#__PURE__*/_jsx(View, {
|
|
181
|
+
style: styles.loadingOverlay,
|
|
182
|
+
children: /*#__PURE__*/_jsx(ActivityIndicator, {
|
|
183
|
+
size: "small",
|
|
184
|
+
color: loadingColor ?? resolvedTextColor
|
|
185
|
+
})
|
|
186
|
+
})]
|
|
187
|
+
}) : content
|
|
165
188
|
})
|
|
166
189
|
});
|
|
167
190
|
};
|
|
191
|
+
const styles = StyleSheet.create({
|
|
192
|
+
loadingHiddenContent: {
|
|
193
|
+
flexDirection: 'row',
|
|
194
|
+
alignItems: 'center',
|
|
195
|
+
justifyContent: 'center',
|
|
196
|
+
opacity: 0,
|
|
197
|
+
pointerEvents: 'none'
|
|
198
|
+
},
|
|
199
|
+
loadingOverlay: {
|
|
200
|
+
...StyleSheet.absoluteFillObject,
|
|
201
|
+
alignItems: 'center',
|
|
202
|
+
justifyContent: 'center',
|
|
203
|
+
pointerEvents: 'none'
|
|
204
|
+
}
|
|
205
|
+
});
|
|
168
206
|
export const Button = /*#__PURE__*/memo(ButtonComponent);
|
|
169
207
|
Button.displayName = 'Button';
|
|
170
208
|
export const PrimaryButton = /*#__PURE__*/memo(props => /*#__PURE__*/_jsx(Button, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useMemo","memo","
|
|
1
|
+
{"version":3,"names":["React","useMemo","memo","ActivityIndicator","Animated","Platform","Pressable","StyleSheet","Text","View","useTheme","usePressAnimation","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","SIZE_CONFIG","small","paddingVertical","paddingHorizontal","fontSize","minHeight","medium","large","ICON_HIT_SLOP","top","bottom","left","right","PRESS_SCALE","SCALE_VARIANTS","Set","ButtonComponent","onPress","children","disabled","variant","size","style","textStyle","icon","iconPosition","loading","loadingColor","accessibilityLabel","accessibilityHint","hitSlop","activeOpacity","testID","className","theme","hasScaleFeedback","has","isInteractionBlocked","scaleAnim","onPressIn","onPressOut","undefined","baseStyles","sizeConfig","styles","alignItems","justifyContent","flexDirection","overflow","backgroundColor","colors","primary","borderRadius","borderWidth","borderColor","border","padding","width","height","resolvedTextColor","card","text","computedTextStyle","fontWeight","OS","color","defaultHitSlop","resolvedActiveOpacity","resolvedClassName","content","transform","scale","pressed","opacity","accessibilityRole","accessibilityState","busy","loadingHiddenContent","importantForAccessibility","accessibilityElementsHidden","loadingOverlay","create","pointerEvents","absoluteFillObject","Button","displayName","PrimaryButton","props","SecondaryButton","IconButton","GhostButton","InverseButton","TextButton"],"sourceRoot":"../../../src","sources":["button/Button.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,OAAO,EAAEC,IAAI,QAAQ,OAAO;AAC5C,SACEC,iBAAiB,EACjBC,QAAQ,EACRC,QAAQ,EACRC,SAAS,EACTC,UAAU,EACVC,IAAI,EACJC,IAAI,QAGC,cAAc;AAErB,SAASC,QAAQ,QAAQ,uBAAoB;AAC7C,SAASC,iBAAiB,QAAQ,+BAA4B;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,QAAA,IAAAC,SAAA,EAAAC,IAAA,IAAAC,KAAA;AAK/D,MAAMC,WAAW,GAAG;EAClBC,KAAK,EAAE;IACLC,eAAe,EAAE,CAAC;IAClBC,iBAAiB,EAAE,EAAE;IACrBC,QAAQ,EAAE,EAAE;IACZC,SAAS,EAAE;EACb,CAAC;EACDC,MAAM,EAAE;IACNJ,eAAe,EAAE,CAAC;IAClBC,iBAAiB,EAAE,EAAE;IACrBC,QAAQ,EAAE,EAAE;IACZC,SAAS,EAAE;EACb,CAAC;EACDE,KAAK,EAAE;IACLL,eAAe,EAAE,EAAE;IACnBC,iBAAiB,EAAE,EAAE;IACrBC,QAAQ,EAAE,EAAE;IACZC,SAAS,EAAE;EACb;AACF,CAAU;AAEV,MAAMG,aAAa,GAAG;EAAEC,GAAG,EAAE,EAAE;EAAEC,MAAM,EAAE,EAAE;EAAEC,IAAI,EAAE,EAAE;EAAEC,KAAK,EAAE;AAAG,CAAU;AAE3E,MAAMC,WAAW,GAAG,IAAI;AACxB,MAAMC,cAAc,GAAG,IAAIC,GAAG,CAAS,CAAC,SAAS,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;AAE3E,MAAMC,eAAsC,GAAGA,CAAC;EAC9CC,OAAO;EACPC,QAAQ;EACRC,QAAQ,GAAG,KAAK;EAChBC,OAAO,GAAG,SAAS;EACnBC,IAAI,GAAG,QAAQ;EACfC,KAAK;EACLC,SAAS;EACTC,IAAI;EACJC,YAAY,GAAG,MAAM;EACrBC,OAAO,GAAG,KAAK;EACfC,YAAY;EACZC,kBAAkB;EAClBC,iBAAiB;EACjBC,OAAO;EACPC,aAAa;EACbC,MAAM;EACNC;AACF,CAAC,KAAK;EACJ,MAAMC,KAAK,GAAG1C,QAAQ,CAAC,CAAC;EACxB,MAAM2C,gBAAgB,GAAGrB,cAAc,CAACsB,GAAG,CAAChB,OAAO,CAAC;EACpD,MAAMiB,oBAAoB,GAAGlB,QAAQ,IAAIO,OAAO;EAChD,MAAM;IAAEY,SAAS;IAAEC,SAAS;IAAEC;EAAW,CAAC,GAAG/C,iBAAiB,CAC5D0C,gBAAgB,IAAI,CAACE,oBAAoB,GAAGxB,WAAW,GAAG4B,SAC5D,CAAC;EAED,MAAMC,UAAU,GAAG3D,OAAO,CAAC,MAAiB;IAC1C,MAAM4D,UAAU,GAAG3C,WAAW,CAACqB,IAAI,CAAC;IACpC,MAAMuB,MAAiB,GAAG;MACxBC,UAAU,EAAE,QAAQ;MACpBC,cAAc,EAAE,QAAQ;MACxBC,aAAa,EAAE,KAAK;MACpBC,QAAQ,EAAE;IACZ,CAAC;IAED,IAAI5B,OAAO,KAAK,MAAM,EAAE;MACtBwB,MAAM,CAAC1C,eAAe,GAAGyC,UAAU,CAACzC,eAAe;MACnD0C,MAAM,CAACzC,iBAAiB,GAAGwC,UAAU,CAACxC,iBAAiB;MACvDyC,MAAM,CAACvC,SAAS,GAAGsC,UAAU,CAACtC,SAAS;IACzC;IAEA,QAAQe,OAAO;MACb,KAAK,SAAS;QACZwB,MAAM,CAACK,eAAe,GAAGf,KAAK,CAACgB,MAAM,CAACC,OAAO;QAC7CP,MAAM,CAACQ,YAAY,GAAG,EAAE;QACxB;MACF,KAAK,WAAW;QACdR,MAAM,CAACK,eAAe,GAAG,aAAa;QACtCL,MAAM,CAACS,WAAW,GAAG,CAAC;QACtBT,MAAM,CAACU,WAAW,GAAGpB,KAAK,CAACgB,MAAM,CAACK,MAAM;QACxCX,MAAM,CAACQ,YAAY,GAAG,EAAE;QACxB;MACF,KAAK,SAAS;QACZR,MAAM,CAACK,eAAe,GAAG,SAAS;QAClCL,MAAM,CAACQ,YAAY,GAAG,EAAE;QACxB;MACF,KAAK,MAAM;QACTR,MAAM,CAACQ,YAAY,GAAG,GAAG;QACzBR,MAAM,CAACY,OAAO,GAAG,CAAC;QAClBZ,MAAM,CAACa,KAAK,GAAGd,UAAU,CAACtC,SAAS;QACnCuC,MAAM,CAACc,MAAM,GAAGf,UAAU,CAACtC,SAAS;QACpC;MACF,KAAK,OAAO;QACVuC,MAAM,CAACK,eAAe,GAAG,aAAa;QACtCL,MAAM,CAACQ,YAAY,GAAG,CAAC;QACvB;MACF,KAAK,MAAM;QACTR,MAAM,CAACK,eAAe,GAAG,aAAa;QACtCL,MAAM,CAAC1C,eAAe,GAAG,CAAC;QAC1B0C,MAAM,CAACzC,iBAAiB,GAAG,CAAC;QAC5B;IACJ;IAEA,OAAOyC,MAAM;EACf,CAAC,EAAE,CAACxB,OAAO,EAAEC,IAAI,EAAEa,KAAK,CAAC,CAAC;EAE1B,MAAMyB,iBAAiB,GAAG5E,OAAO,CAAC,MAAc;IAC9C,QAAQqC,OAAO;MACb,KAAK,SAAS;QACZ,OAAOc,KAAK,CAACgB,MAAM,CAACU,IAAI;MAC1B,KAAK,WAAW;QACd,OAAO1B,KAAK,CAACgB,MAAM,CAACW,IAAI;MAC1B,KAAK,SAAS;QACZ,OAAO,SAAS;MAClB,KAAK,OAAO;MACZ,KAAK,MAAM;QACT,OAAO3B,KAAK,CAACgB,MAAM,CAACC,OAAO;MAC7B,KAAK,MAAM;MACX;QACE,OAAOjB,KAAK,CAACgB,MAAM,CAACW,IAAI;IAC5B;EACF,CAAC,EAAE,CAACzC,OAAO,EAAEc,KAAK,CAAC,CAAC;EAEpB,MAAM4B,iBAAiB,GAAG/E,OAAO,CAAC,MAAiB;IACjD,MAAM4D,UAAU,GAAG3C,WAAW,CAACqB,IAAI,CAAC;IACpC,OAAO;MACLjB,QAAQ,EAAEuC,UAAU,CAACvC,QAAQ;MAC7B2D,UAAU,EAAE5E,QAAQ,CAAC6E,EAAE,KAAK,KAAK,GAAG,MAAM,GAAG,KAAK;MAClDC,KAAK,EAAEN;IACT,CAAC;EACH,CAAC,EAAE,CAACtC,IAAI,EAAEsC,iBAAiB,CAAC,CAAC;EAE7B,MAAMO,cAAc,GAAG9C,OAAO,KAAK,MAAM,GAAGZ,aAAa,GAAGiC,SAAS;EACrE,MAAM0B,qBAAqB,GAAGpC,aAAa,KAAKX,OAAO,KAAK,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC;EAC/E,MAAMgD,iBAAiB,GAAGnC,SAAS,KAAKb,OAAO,KAAK,MAAM,GAAG,oCAAoC,GAAGqB,SAAS,CAAC;EAE9G,MAAM4B,OAAO,gBACXtE,KAAA,CAAAF,SAAA;IAAAqB,QAAA,GACGO,YAAY,KAAK,MAAM,IAAID,IAAI,EAC/BN,QAAQ,IAAI,IAAI,iBACfvB,IAAA,CAACL,IAAI;MAACgC,KAAK,EAAE,CAACwC,iBAAiB,EAAEvC,SAAS,CAAE;MAAAL,QAAA,EAAEA;IAAQ,CAAO,CAC9D,EACAO,YAAY,KAAK,OAAO,IAAID,IAAI;EAAA,CACjC,CACH;EAED,oBACE7B,IAAA,CAACT,QAAQ,CAACK,IAAI;IAAC+B,KAAK,EAAEa,gBAAgB,GAAG;MAAEmC,SAAS,EAAE,CAAC;QAAEC,KAAK,EAAEjC;MAAU,CAAC;IAAE,CAAC,GAAGG,SAAU;IAAAvB,QAAA,eACzFvB,IAAA,CAACP,SAAS;MAAA,IACHgF,iBAAiB,GAAG;QAAEnC,SAAS,EAAEmC;MAAkB,CAAC,GAA6B,CAAC,CAAC;MACxF9C,KAAK,EAAEA,CAAC;QAAEkD;MAAQ,CAAC,KAAK,CACtB9B,UAAU,EACVvB,QAAQ,IAAI,CAACO,OAAO,IAAI;QAAE+C,OAAO,EAAE;MAAI,CAAC,EACxCD,OAAO,IAAI,CAACrC,gBAAgB,IAAI,CAACE,oBAAoB,IAAI;QAAEoC,OAAO,EAAEN;MAAsB,CAAC,EAC3F7C,KAAK,CACL;MACFL,OAAO,EAAEoB,oBAAoB,GAAGI,SAAS,GAAGxB,OAAQ;MACpDsB,SAAS,EAAEF,oBAAoB,GAAGI,SAAS,GAAGF,SAAU;MACxDC,UAAU,EAAEH,oBAAoB,GAAGI,SAAS,GAAGD,UAAW;MAC1DrB,QAAQ,EAAEkB,oBAAqB;MAC/BP,OAAO,EAAEA,OAAO,IAAIoC,cAAe;MACnCtC,kBAAkB,EAAEA,kBAAmB;MACvCC,iBAAiB,EAAEA,iBAAkB;MACrC6C,iBAAiB,EAAC,QAAQ;MAC1BC,kBAAkB,EAAEjD,OAAO,GAAG;QAAEP,QAAQ,EAAEkB,oBAAoB;QAAEuC,IAAI,EAAE;MAAK,CAAC,GAAG;QAAEzD,QAAQ,EAAEkB;MAAqB,CAAE;MAClHL,MAAM,EAAEA,MAAO;MAAAd,QAAA,EAEdQ,OAAO,gBACN3B,KAAA,CAAAF,SAAA;QAAAqB,QAAA,gBACEvB,IAAA,CAACJ,IAAI;UACH+B,KAAK,EAAEsB,MAAM,CAACiC,oBAAqB;UACnCC,yBAAyB,EAAC,qBAAqB;UAC/CC,2BAA2B;UAAA7D,QAAA,EAE1BmD;QAAO,CACJ,CAAC,eACP1E,IAAA,CAACJ,IAAI;UAAC+B,KAAK,EAAEsB,MAAM,CAACoC,cAAe;UAAA9D,QAAA,eACjCvB,IAAA,CAACV,iBAAiB;YAACoC,IAAI,EAAC,OAAO;YAAC4C,KAAK,EAAEtC,YAAY,IAAIgC;UAAkB,CAAE;QAAC,CACxE,CAAC;MAAA,CACP,CAAC,GAEHU;IACD,CACQ;EAAC,CACC,CAAC;AAEpB,CAAC;AAED,MAAMzB,MAAM,GAAGvD,UAAU,CAAC4F,MAAM,CAAC;EAC/BJ,oBAAoB,EAAE;IACpB9B,aAAa,EAAE,KAAK;IACpBF,UAAU,EAAE,QAAQ;IACpBC,cAAc,EAAE,QAAQ;IACxB2B,OAAO,EAAE,CAAC;IACVS,aAAa,EAAE;EACjB,CAAC;EACDF,cAAc,EAAE;IACd,GAAG3F,UAAU,CAAC8F,kBAAkB;IAChCtC,UAAU,EAAE,QAAQ;IACpBC,cAAc,EAAE,QAAQ;IACxBoC,aAAa,EAAE;EACjB;AACF,CAAC,CAAC;AAEF,OAAO,MAAME,MAAM,gBAAGpG,IAAI,CAACgC,eAAe,CAAC;AAC3CoE,MAAM,CAACC,WAAW,GAAG,QAAQ;AAE7B,OAAO,MAAMC,aAAa,gBAAGtG,IAAI,CAAEuG,KAAmC,iBACpE5F,IAAA,CAACyF,MAAM;EAAA,GAAKG,KAAK;EAAEnE,OAAO,EAAC;AAAS,CAAE,CACvC,CAAC;AACFkE,aAAa,CAACD,WAAW,GAAG,eAAe;AAE3C,OAAO,MAAMG,eAAe,gBAAGxG,IAAI,CAAEuG,KAAmC,iBACtE5F,IAAA,CAACyF,MAAM;EAAA,GAAKG,KAAK;EAAEnE,OAAO,EAAC;AAAW,CAAE,CACzC,CAAC;AACFoE,eAAe,CAACH,WAAW,GAAG,iBAAiB;AAE/C,OAAO,MAAMI,UAAU,gBAAGzG,IAAI,CAAEuG,KAAmC,iBACjE5F,IAAA,CAACyF,MAAM;EAAA,GAAKG,KAAK;EAAEnE,OAAO,EAAC;AAAM,CAAE,CACpC,CAAC;AACFqE,UAAU,CAACJ,WAAW,GAAG,YAAY;AAErC,OAAO,MAAMK,WAAW,gBAAG1G,IAAI,CAAEuG,KAAmC,iBAClE5F,IAAA,CAACyF,MAAM;EAAA,GAAKG,KAAK;EAAEnE,OAAO,EAAC;AAAO,CAAE,CACrC,CAAC;AACFsE,WAAW,CAACL,WAAW,GAAG,aAAa;AAEvC,OAAO,MAAMM,aAAa,gBAAG3G,IAAI,CAAEuG,KAAmC,iBACpE5F,IAAA,CAACyF,MAAM;EAAA,GAAKG,KAAK;EAAEnE,OAAO,EAAC;AAAS,CAAE,CACvC,CAAC;AACFuE,aAAa,CAACN,WAAW,GAAG,eAAe;AAE3C,OAAO,MAAMO,UAAU,gBAAG5G,IAAI,CAAEuG,KAAmC,iBACjE5F,IAAA,CAACyF,MAAM;EAAA,GAAKG,KAAK;EAAEnE,OAAO,EAAC;AAAM,CAAE,CACpC,CAAC;AACFwE,UAAU,CAACP,WAAW,GAAG,YAAY","ignoreList":[]}
|
|
@@ -14,9 +14,9 @@ import { FONT_ASSETS } from "./font-assets.js";
|
|
|
14
14
|
import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
|
|
15
15
|
/**
|
|
16
16
|
* Mutates `Text.defaultProps.style` so every native `<Text>` in the consuming
|
|
17
|
-
* app inherits Bloom's
|
|
18
|
-
* to any existing default style so caller-provided `style`
|
|
19
|
-
* applies AFTER `defaultProps.style`) still wins for overrides.
|
|
17
|
+
* app inherits Bloom's default font (BlomusModernus). The Bloom family name
|
|
18
|
+
* is prepended to any existing default style so caller-provided `style`
|
|
19
|
+
* (which React applies AFTER `defaultProps.style`) still wins for overrides.
|
|
20
20
|
*
|
|
21
21
|
* Idempotent: re-invoking it after the first apply is a no-op because the
|
|
22
22
|
* first style entry will already be the Bloom default we added.
|
|
@@ -25,7 +25,7 @@ function applyDefaultTextFont() {
|
|
|
25
25
|
const TextWithDefaults = Text;
|
|
26
26
|
const existing = TextWithDefaults.defaultProps?.style;
|
|
27
27
|
const bloomDefault = {
|
|
28
|
-
fontFamily: '
|
|
28
|
+
fontFamily: 'BlomusModernus'
|
|
29
29
|
};
|
|
30
30
|
|
|
31
31
|
// Detect whether we've already prepended ourselves. `existing` may be an
|
|
@@ -56,8 +56,8 @@ function applyDefaultTextFont() {
|
|
|
56
56
|
* provider tree ever flips `fonts` back on.
|
|
57
57
|
*
|
|
58
58
|
* Once the bundled fonts report `loaded === true`, this component also
|
|
59
|
-
* mutates `Text.defaultProps.style` to prepend `{ fontFamily: '
|
|
60
|
-
* so every native `<Text>` in the consuming app inherits Bloom's
|
|
59
|
+
* mutates `Text.defaultProps.style` to prepend `{ fontFamily: 'BlomusModernus' }`
|
|
60
|
+
* so every native `<Text>` in the consuming app inherits Bloom's default
|
|
61
61
|
* family without callers needing to import `<Text>` from `@oxyhq/bloom`.
|
|
62
62
|
* The mutation is gated by a `useRef` so it runs at most once per
|
|
63
63
|
* FontLoader instance, and the underlying apply is idempotent — the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useRef","Text","useFonts","FONT_ASSETS","Fragment","_Fragment","jsx","_jsx","applyDefaultTextFont","TextWithDefaults","existing","defaultProps","style","bloomDefault","fontFamily","Array","isArray","first","nextStyle","FontLoader","enabled","fallback","children","loaded","defaultsApplied","current"],"sourceRoot":"../../../src","sources":["fonts/FontLoader.native.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,MAAM,QAAQ,OAAO;AACrC,SAASC,IAAI,QAAwD,cAAc;AACnF,SAASC,QAAQ,QAAQ,WAAW;AACpC,SAASC,WAAW,QAAQ,kBAAe;;AAc3C;AACA;AACA;AACA;AACA;AACA;AALA,SAAAC,QAAA,IAAAC,SAAA,EAAAC,GAAA,IAAAC,IAAA;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,oBAAoBA,CAAA,EAAS;EACpC,MAAMC,gBAAgB,GAAGR,IAAwB;EACjD,MAAMS,QAAQ,GAAGD,gBAAgB,CAACE,YAAY,EAAEC,KAAK;EACrD,MAAMC,YAAuB,GAAG;IAAEC,UAAU,EAAE;
|
|
1
|
+
{"version":3,"names":["React","useRef","Text","useFonts","FONT_ASSETS","Fragment","_Fragment","jsx","_jsx","applyDefaultTextFont","TextWithDefaults","existing","defaultProps","style","bloomDefault","fontFamily","Array","isArray","first","nextStyle","FontLoader","enabled","fallback","children","loaded","defaultsApplied","current"],"sourceRoot":"../../../src","sources":["fonts/FontLoader.native.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,MAAM,QAAQ,OAAO;AACrC,SAASC,IAAI,QAAwD,cAAc;AACnF,SAASC,QAAQ,QAAQ,WAAW;AACpC,SAASC,WAAW,QAAQ,kBAAe;;AAc3C;AACA;AACA;AACA;AACA;AACA;AALA,SAAAC,QAAA,IAAAC,SAAA,EAAAC,GAAA,IAAAC,IAAA;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,oBAAoBA,CAAA,EAAS;EACpC,MAAMC,gBAAgB,GAAGR,IAAwB;EACjD,MAAMS,QAAQ,GAAGD,gBAAgB,CAACE,YAAY,EAAEC,KAAK;EACrD,MAAMC,YAAuB,GAAG;IAAEC,UAAU,EAAE;EAAiB,CAAC;;EAEhE;EACA;EACA;EACA;EACA,IAAIC,KAAK,CAACC,OAAO,CAACN,QAAQ,CAAC,EAAE;IAC3B,MAAMO,KAAK,GAAGP,QAAQ,CAAC,CAAC,CAAC;IACzB,IACEO,KAAK,IACL,OAAOA,KAAK,KAAK,QAAQ,IACzB,CAACF,KAAK,CAACC,OAAO,CAACC,KAAK,CAAC,IACpBA,KAAK,CAAeH,UAAU,KAAKD,YAAY,CAACC,UAAU,EAC3D;MACA;IACF;EACF,CAAC,MAAM,IACLJ,QAAQ,IACR,OAAOA,QAAQ,KAAK,QAAQ,IAC3BA,QAAQ,CAAeI,UAAU,KAAKD,YAAY,CAACC,UAAU,EAC9D;IACA;EACF;EAEA,MAAMI,SAA+B,GACnCR,QAAQ,IAAI,IAAI,GAAGG,YAAY,GAAG,CAACA,YAAY,EAAEH,QAAQ,CAAC;EAE5DD,gBAAgB,CAACE,YAAY,GAAG;IAC9B,GAAGF,gBAAgB,CAACE,YAAY;IAChCC,KAAK,EAAEM;EACT,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,UAAUA,CAAC;EAAEC,OAAO;EAAEC,QAAQ;EAAEC;AAA0B,CAAC,EAAE;EAC3E,MAAM,CAACC,MAAM,CAAC,GAAGrB,QAAQ,CAACC,WAAW,CAAC;EACtC,MAAMqB,eAAe,GAAGxB,MAAM,CAAC,KAAK,CAAC;EAErC,IAAIuB,MAAM,IAAI,CAACC,eAAe,CAACC,OAAO,EAAE;IACtCD,eAAe,CAACC,OAAO,GAAG,IAAI;IAC9BjB,oBAAoB,CAAC,CAAC;EACxB;EAEA,IAAI,CAACY,OAAO,EAAE,oBAAOb,IAAA,CAAAF,SAAA;IAAAiB,QAAA,EAAGA;EAAQ,CAAG,CAAC;EACpC,IAAI,CAACC,MAAM,EAAE,oBAAOhB,IAAA,CAAAF,SAAA;IAAAiB,QAAA,EAAGD,QAAQ,IAAI;EAAI,CAAG,CAAC;EAC3C,oBAAOd,IAAA,CAAAF,SAAA;IAAAiB,QAAA,EAAGA;EAAQ,CAAG,CAAC;AACxB","ignoreList":[]}
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
|
|
13
13
|
export const fontFamilies = {
|
|
14
14
|
display: 'BlomusModernus, Georgia, "Times New Roman", serif',
|
|
15
|
-
sans: '
|
|
15
|
+
sans: 'BlomusModernus, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',
|
|
16
16
|
mono: '"Geist Mono", ui-monospace, SFMono-Regular, Menlo, monospace'
|
|
17
17
|
};
|
|
18
18
|
export const fontCssVars = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["fontFamilies","display","sans","mono","fontCssVars"],"sourceRoot":"../../../src","sources":["fonts/tokens.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO,MAAMA,YAAY,GAAG;EAC1BC,OAAO,EAAE,mDAAmD;EAC5DC,IAAI,EAAE,
|
|
1
|
+
{"version":3,"names":["fontFamilies","display","sans","mono","fontCssVars"],"sourceRoot":"../../../src","sources":["fonts/tokens.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO,MAAMA,YAAY,GAAG;EAC1BC,OAAO,EAAE,mDAAmD;EAC5DC,IAAI,EAAE,mFAAmF;EACzFC,IAAI,EAAE;AACR,CAAU;AAEV,OAAO,MAAMC,WAAW,GAAG;EACzBH,OAAO,EAAE,sBAAsB;EAC/BC,IAAI,EAAE,mBAAmB;EACzBC,IAAI,EAAE;AACR,CAAU","ignoreList":[]}
|
|
@@ -17,14 +17,16 @@ function fontFamilyStyle(kind) {
|
|
|
17
17
|
fontFamily: `var(--bloom-font-${kind})`
|
|
18
18
|
};
|
|
19
19
|
}
|
|
20
|
-
if (kind === 'display') return {
|
|
21
|
-
fontFamily: 'BlomusModernus'
|
|
22
|
-
};
|
|
23
20
|
if (kind === 'mono') return {
|
|
24
21
|
fontFamily: 'Geist Mono'
|
|
25
22
|
};
|
|
23
|
+
// `display` and `sans` both resolve to BlomusModernus on native — Bloom's
|
|
24
|
+
// default body font. The CSS stack in `tokens.ts` differs (display vs sans
|
|
25
|
+
// have different fallback chains for web), but on RN the literal family
|
|
26
|
+
// name is the only thing that matters; the .ttf is registered via
|
|
27
|
+
// `useFonts(FONT_ASSETS)` in `FontLoader.native.tsx`.
|
|
26
28
|
return {
|
|
27
|
-
fontFamily: '
|
|
29
|
+
fontFamily: 'BlomusModernus'
|
|
28
30
|
};
|
|
29
31
|
}
|
|
30
32
|
const SANS_FONT_FAMILY = fontFamilyStyle('sans');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","memo","Text","RNText","Platform","useTheme","fontFamilies","jsx","_jsx","fontFamilyStyle","kind","OS","fontFamily","SANS_FONT_FAMILY","DISPLAY_FONT_FAMILY","TextComponent","children","style","rest","colors","fontSize","color","text","displayName","Span","HEADING_STYLE","fontWeight","createHeadingElement","level","HeadingElement","extraProps","role","H1","H2","H3","H4","H5","H6","P","lineHeight"],"sourceRoot":"../../../src","sources":["typography/index.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,IAAI,QAAQ,OAAO;AACnC,SACEC,IAAI,IAAIC,MAAM,EAEdC,QAAQ,QAGH,cAAc;AAErB,SAASC,QAAQ,QAAQ,uBAAoB;AAC7C,SAASC,YAAY,QAAQ,oBAAiB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAI/C;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,eAAeA,CACtBC,IAAiC,EACT;EACxB,IAAIN,QAAQ,CAACO,EAAE,KAAK,KAAK,EAAE;IACzB,OAAO;MAAEC,UAAU,EAAE,oBAAoBF,IAAI;IAAI,CAAC;EACpD;EACA,IAAIA,IAAI,KAAK,
|
|
1
|
+
{"version":3,"names":["React","memo","Text","RNText","Platform","useTheme","fontFamilies","jsx","_jsx","fontFamilyStyle","kind","OS","fontFamily","SANS_FONT_FAMILY","DISPLAY_FONT_FAMILY","TextComponent","children","style","rest","colors","fontSize","color","text","displayName","Span","HEADING_STYLE","fontWeight","createHeadingElement","level","HeadingElement","extraProps","role","H1","H2","H3","H4","H5","H6","P","lineHeight"],"sourceRoot":"../../../src","sources":["typography/index.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../../src/button/Button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAwB,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../../src/button/Button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAwB,MAAM,OAAO,CAAC;AAe7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AA0MtE,eAAO,MAAM,MAAM,yCAAwB,CAAC;AAG5C,eAAO,MAAM,aAAa,oCAAgB,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,6CAEpE,CAAC;AAGH,eAAO,MAAM,eAAe,oCAAgB,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,6CAEtE,CAAC;AAGH,eAAO,MAAM,UAAU,oCAAgB,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,6CAEjE,CAAC;AAGH,eAAO,MAAM,WAAW,oCAAgB,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,6CAElE,CAAC;AAGH,eAAO,MAAM,aAAa,oCAAgB,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,6CAEpE,CAAC;AAGH,eAAO,MAAM,UAAU,oCAAgB,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,6CAEjE,CAAC"}
|
|
@@ -11,6 +11,17 @@ export interface ButtonProps {
|
|
|
11
11
|
textStyle?: StyleProp<TextStyle>;
|
|
12
12
|
icon?: React.ReactNode;
|
|
13
13
|
iconPosition?: 'left' | 'right';
|
|
14
|
+
/**
|
|
15
|
+
* When true, displays a centered loading spinner overlay and prevents
|
|
16
|
+
* presses. Children remain in the layout (but visually hidden) so the
|
|
17
|
+
* button preserves its width. Use this for async actions like submit.
|
|
18
|
+
*/
|
|
19
|
+
loading?: boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Optional color override for the loading spinner. Defaults to the
|
|
22
|
+
* resolved button text color.
|
|
23
|
+
*/
|
|
24
|
+
loadingColor?: string;
|
|
14
25
|
accessibilityLabel?: string;
|
|
15
26
|
accessibilityHint?: string;
|
|
16
27
|
hitSlop?: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/button/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEpE,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAE5F,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEtD,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,SAAS,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAEjC,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAEhC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACvE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/button/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEpE,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAE5F,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEtD,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,SAAS,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAEjC,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAEhC;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACvE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
|
|
@@ -19,8 +19,8 @@ export interface FontLoaderProps {
|
|
|
19
19
|
* provider tree ever flips `fonts` back on.
|
|
20
20
|
*
|
|
21
21
|
* Once the bundled fonts report `loaded === true`, this component also
|
|
22
|
-
* mutates `Text.defaultProps.style` to prepend `{ fontFamily: '
|
|
23
|
-
* so every native `<Text>` in the consuming app inherits Bloom's
|
|
22
|
+
* mutates `Text.defaultProps.style` to prepend `{ fontFamily: 'BlomusModernus' }`
|
|
23
|
+
* so every native `<Text>` in the consuming app inherits Bloom's default
|
|
24
24
|
* family without callers needing to import `<Text>` from `@oxyhq/bloom`.
|
|
25
25
|
* The mutation is gated by a `useRef` so it runs at most once per
|
|
26
26
|
* FontLoader instance, and the underlying apply is idempotent — the
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
export declare const fontFamilies: {
|
|
11
11
|
readonly display: "BlomusModernus, Georgia, \"Times New Roman\", serif";
|
|
12
|
-
readonly sans: "
|
|
12
|
+
readonly sans: "BlomusModernus, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif";
|
|
13
13
|
readonly mono: "\"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, monospace";
|
|
14
14
|
};
|
|
15
15
|
export declare const fontCssVars: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/typography/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAe,MAAM,OAAO,CAAC;AACpC,OAAO,EAEL,KAAK,SAAS,IAAI,WAAW,EAI9B,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,MAAM,SAAS,GAAG,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/typography/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAe,MAAM,OAAO,CAAC;AACpC,OAAO,EAEL,KAAK,SAAS,IAAI,WAAW,EAI9B,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,MAAM,SAAS,GAAG,WAAW,CAAC;AA0CpC,eAAO,MAAM,IAAI,2DAZiD,SAAS,6CAYpC,CAAC;AAGxC,OAAO,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC;AAiBxB,eAAO,MAAM,EAAE,uBAAqC,CAAC;AAErD,eAAO,MAAM,EAAE,uBAAqC,CAAC;AAErD,eAAO,MAAM,EAAE,uBAAqC,CAAC;AAErD,eAAO,MAAM,EAAE,uBAAqC,CAAC;AAErD,eAAO,MAAM,EAAE,uBAAqC,CAAC;AAErD,eAAO,MAAM,EAAE,uBAAqC,CAAC;AAGrD,wBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,EAAE,SAAS,2CAU9C;yBAVe,CAAC;;;AAajB,OAAO,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../../src/button/Button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAwB,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../../src/button/Button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAwB,MAAM,OAAO,CAAC;AAe7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AA0MtE,eAAO,MAAM,MAAM,yCAAwB,CAAC;AAG5C,eAAO,MAAM,aAAa,oCAAgB,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,6CAEpE,CAAC;AAGH,eAAO,MAAM,eAAe,oCAAgB,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,6CAEtE,CAAC;AAGH,eAAO,MAAM,UAAU,oCAAgB,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,6CAEjE,CAAC;AAGH,eAAO,MAAM,WAAW,oCAAgB,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,6CAElE,CAAC;AAGH,eAAO,MAAM,aAAa,oCAAgB,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,6CAEpE,CAAC;AAGH,eAAO,MAAM,UAAU,oCAAgB,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,6CAEjE,CAAC"}
|
|
@@ -11,6 +11,17 @@ export interface ButtonProps {
|
|
|
11
11
|
textStyle?: StyleProp<TextStyle>;
|
|
12
12
|
icon?: React.ReactNode;
|
|
13
13
|
iconPosition?: 'left' | 'right';
|
|
14
|
+
/**
|
|
15
|
+
* When true, displays a centered loading spinner overlay and prevents
|
|
16
|
+
* presses. Children remain in the layout (but visually hidden) so the
|
|
17
|
+
* button preserves its width. Use this for async actions like submit.
|
|
18
|
+
*/
|
|
19
|
+
loading?: boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Optional color override for the loading spinner. Defaults to the
|
|
22
|
+
* resolved button text color.
|
|
23
|
+
*/
|
|
24
|
+
loadingColor?: string;
|
|
14
25
|
accessibilityLabel?: string;
|
|
15
26
|
accessibilityHint?: string;
|
|
16
27
|
hitSlop?: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/button/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEpE,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAE5F,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEtD,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,SAAS,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAEjC,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAEhC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACvE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/button/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEpE,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAE5F,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEtD,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,SAAS,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAEjC,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAEhC;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACvE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
|
|
@@ -19,8 +19,8 @@ export interface FontLoaderProps {
|
|
|
19
19
|
* provider tree ever flips `fonts` back on.
|
|
20
20
|
*
|
|
21
21
|
* Once the bundled fonts report `loaded === true`, this component also
|
|
22
|
-
* mutates `Text.defaultProps.style` to prepend `{ fontFamily: '
|
|
23
|
-
* so every native `<Text>` in the consuming app inherits Bloom's
|
|
22
|
+
* mutates `Text.defaultProps.style` to prepend `{ fontFamily: 'BlomusModernus' }`
|
|
23
|
+
* so every native `<Text>` in the consuming app inherits Bloom's default
|
|
24
24
|
* family without callers needing to import `<Text>` from `@oxyhq/bloom`.
|
|
25
25
|
* The mutation is gated by a `useRef` so it runs at most once per
|
|
26
26
|
* FontLoader instance, and the underlying apply is idempotent — the
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
export declare const fontFamilies: {
|
|
11
11
|
readonly display: "BlomusModernus, Georgia, \"Times New Roman\", serif";
|
|
12
|
-
readonly sans: "
|
|
12
|
+
readonly sans: "BlomusModernus, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif";
|
|
13
13
|
readonly mono: "\"Geist Mono\", ui-monospace, SFMono-Regular, Menlo, monospace";
|
|
14
14
|
};
|
|
15
15
|
export declare const fontCssVars: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/typography/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAe,MAAM,OAAO,CAAC;AACpC,OAAO,EAEL,KAAK,SAAS,IAAI,WAAW,EAI9B,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,MAAM,SAAS,GAAG,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/typography/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAe,MAAM,OAAO,CAAC;AACpC,OAAO,EAEL,KAAK,SAAS,IAAI,WAAW,EAI9B,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,MAAM,SAAS,GAAG,WAAW,CAAC;AA0CpC,eAAO,MAAM,IAAI,2DAZiD,SAAS,6CAYpC,CAAC;AAGxC,OAAO,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC;AAiBxB,eAAO,MAAM,EAAE,uBAAqC,CAAC;AAErD,eAAO,MAAM,EAAE,uBAAqC,CAAC;AAErD,eAAO,MAAM,EAAE,uBAAqC,CAAC;AAErD,eAAO,MAAM,EAAE,uBAAqC,CAAC;AAErD,eAAO,MAAM,EAAE,uBAAqC,CAAC;AAErD,eAAO,MAAM,EAAE,uBAAqC,CAAC;AAGrD,wBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,EAAE,SAAS,2CAU9C;yBAVe,CAAC;;;AAajB,OAAO,EAAE,YAAY,EAAE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
import { Text } from 'react-native';
|
|
2
3
|
import { render, fireEvent } from '@testing-library/react-native';
|
|
3
4
|
|
|
4
5
|
import { BloomThemeProvider } from '../theme/BloomThemeProvider';
|
|
@@ -58,6 +59,40 @@ describe('Button', () => {
|
|
|
58
59
|
const btn = getByTestId('dis-btn');
|
|
59
60
|
expect(btn.props.accessibilityState).toEqual({ disabled: true });
|
|
60
61
|
});
|
|
62
|
+
|
|
63
|
+
it('keeps children mounted when loading so width is preserved', () => {
|
|
64
|
+
const { UNSAFE_queryAllByType } = renderWithTheme(
|
|
65
|
+
<Button loading>Submit</Button>,
|
|
66
|
+
);
|
|
67
|
+
// The text node remains in the tree even though it is visually hidden.
|
|
68
|
+
const texts = UNSAFE_queryAllByType(Text);
|
|
69
|
+
const hasSubmit = texts.some((node) =>
|
|
70
|
+
Array.isArray(node.props.children)
|
|
71
|
+
? node.props.children.includes('Submit')
|
|
72
|
+
: node.props.children === 'Submit',
|
|
73
|
+
);
|
|
74
|
+
expect(hasSubmit).toBe(true);
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
it('disables the underlying Pressable when loading', () => {
|
|
78
|
+
const { getByTestId } = renderWithTheme(
|
|
79
|
+
<Button testID="loading-btn" loading>
|
|
80
|
+
Submit
|
|
81
|
+
</Button>,
|
|
82
|
+
);
|
|
83
|
+
const btn = getByTestId('loading-btn');
|
|
84
|
+
expect(btn.props.disabled).toBe(true);
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
it('marks loading state via accessibilityState busy + disabled', () => {
|
|
88
|
+
const { getByTestId } = renderWithTheme(
|
|
89
|
+
<Button testID="busy-btn" loading>
|
|
90
|
+
Submit
|
|
91
|
+
</Button>,
|
|
92
|
+
);
|
|
93
|
+
const btn = getByTestId('busy-btn');
|
|
94
|
+
expect(btn.props.accessibilityState).toEqual({ disabled: true, busy: true });
|
|
95
|
+
});
|
|
61
96
|
});
|
|
62
97
|
|
|
63
98
|
describe('Button variants', () => {
|
|
@@ -86,7 +86,7 @@ describe('FontLoader (native)', () => {
|
|
|
86
86
|
expect(getByText('content')).toBeTruthy();
|
|
87
87
|
});
|
|
88
88
|
|
|
89
|
-
it('prepends
|
|
89
|
+
it('prepends BlomusModernus to Text.defaultProps.style once fonts are loaded', () => {
|
|
90
90
|
setUseFontsResult([true, null]);
|
|
91
91
|
render(
|
|
92
92
|
<FontLoader enabled>
|
|
@@ -94,7 +94,7 @@ describe('FontLoader (native)', () => {
|
|
|
94
94
|
</FontLoader>,
|
|
95
95
|
);
|
|
96
96
|
const defaults = (Text as TextWithDefaults).defaultProps;
|
|
97
|
-
expect(defaults?.style).toEqual({ fontFamily: '
|
|
97
|
+
expect(defaults?.style).toEqual({ fontFamily: 'BlomusModernus' });
|
|
98
98
|
});
|
|
99
99
|
|
|
100
100
|
it('does not touch Text.defaultProps until fonts are loaded', () => {
|
|
@@ -107,7 +107,7 @@ describe('FontLoader (native)', () => {
|
|
|
107
107
|
expect((Text as TextWithDefaults).defaultProps?.style).toBeUndefined();
|
|
108
108
|
});
|
|
109
109
|
|
|
110
|
-
it('preserves a pre-existing default style by appending it after
|
|
110
|
+
it('preserves a pre-existing default style by appending it after BlomusModernus', () => {
|
|
111
111
|
const preExisting = { color: '#abcdef' } as const;
|
|
112
112
|
(Text as TextWithDefaults).defaultProps = { style: preExisting };
|
|
113
113
|
setUseFontsResult([true, null]);
|
|
@@ -119,7 +119,7 @@ describe('FontLoader (native)', () => {
|
|
|
119
119
|
const style = (Text as TextWithDefaults).defaultProps?.style;
|
|
120
120
|
expect(Array.isArray(style)).toBe(true);
|
|
121
121
|
if (Array.isArray(style)) {
|
|
122
|
-
expect(style[0]).toEqual({ fontFamily: '
|
|
122
|
+
expect(style[0]).toEqual({ fontFamily: 'BlomusModernus' });
|
|
123
123
|
expect(style[1]).toBe(preExisting);
|
|
124
124
|
}
|
|
125
125
|
});
|
|
@@ -139,8 +139,8 @@ describe('FontLoader (native)', () => {
|
|
|
139
139
|
);
|
|
140
140
|
second.unmount();
|
|
141
141
|
const style = (Text as TextWithDefaults).defaultProps?.style;
|
|
142
|
-
// Should still be the single, plain
|
|
143
|
-
// or duplicated entries.
|
|
144
|
-
expect(style).toEqual({ fontFamily: '
|
|
142
|
+
// Should still be the single, plain BlomusModernus object — not nested
|
|
143
|
+
// arrays or duplicated entries.
|
|
144
|
+
expect(style).toEqual({ fontFamily: 'BlomusModernus' });
|
|
145
145
|
});
|
|
146
146
|
});
|
package/src/button/Button.tsx
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
import React, { useMemo, memo } from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
ActivityIndicator,
|
|
4
|
+
Animated,
|
|
5
|
+
Platform,
|
|
6
|
+
Pressable,
|
|
7
|
+
StyleSheet,
|
|
8
|
+
Text,
|
|
9
|
+
View,
|
|
10
|
+
type TextStyle,
|
|
11
|
+
type ViewStyle,
|
|
12
|
+
} from 'react-native';
|
|
3
13
|
|
|
4
14
|
import { useTheme } from '../theme/use-theme';
|
|
5
15
|
import { usePressAnimation } from '../hooks/usePressAnimation';
|
|
@@ -43,6 +53,8 @@ const ButtonComponent: React.FC<ButtonProps> = ({
|
|
|
43
53
|
textStyle,
|
|
44
54
|
icon,
|
|
45
55
|
iconPosition = 'left',
|
|
56
|
+
loading = false,
|
|
57
|
+
loadingColor,
|
|
46
58
|
accessibilityLabel,
|
|
47
59
|
accessibilityHint,
|
|
48
60
|
hitSlop,
|
|
@@ -52,8 +64,9 @@ const ButtonComponent: React.FC<ButtonProps> = ({
|
|
|
52
64
|
}) => {
|
|
53
65
|
const theme = useTheme();
|
|
54
66
|
const hasScaleFeedback = SCALE_VARIANTS.has(variant);
|
|
67
|
+
const isInteractionBlocked = disabled || loading;
|
|
55
68
|
const { scaleAnim, onPressIn, onPressOut } = usePressAnimation(
|
|
56
|
-
hasScaleFeedback ? PRESS_SCALE : undefined,
|
|
69
|
+
hasScaleFeedback && !isInteractionBlocked ? PRESS_SCALE : undefined,
|
|
57
70
|
);
|
|
58
71
|
|
|
59
72
|
const baseStyles = useMemo((): ViewStyle => {
|
|
@@ -106,67 +119,104 @@ const ButtonComponent: React.FC<ButtonProps> = ({
|
|
|
106
119
|
return styles;
|
|
107
120
|
}, [variant, size, theme]);
|
|
108
121
|
|
|
109
|
-
const
|
|
110
|
-
const sizeConfig = SIZE_CONFIG[size];
|
|
111
|
-
const styles: TextStyle = {
|
|
112
|
-
fontSize: sizeConfig.fontSize,
|
|
113
|
-
fontWeight: Platform.OS === 'web' ? 'bold' : '600',
|
|
114
|
-
};
|
|
115
|
-
|
|
122
|
+
const resolvedTextColor = useMemo((): string => {
|
|
116
123
|
switch (variant) {
|
|
117
124
|
case 'primary':
|
|
118
|
-
|
|
119
|
-
break;
|
|
125
|
+
return theme.colors.card;
|
|
120
126
|
case 'secondary':
|
|
121
|
-
|
|
122
|
-
break;
|
|
127
|
+
return theme.colors.text;
|
|
123
128
|
case 'inverse':
|
|
124
|
-
|
|
125
|
-
break;
|
|
129
|
+
return '#000000';
|
|
126
130
|
case 'ghost':
|
|
127
131
|
case 'text':
|
|
128
|
-
|
|
129
|
-
|
|
132
|
+
return theme.colors.primary;
|
|
133
|
+
case 'icon':
|
|
134
|
+
default:
|
|
135
|
+
return theme.colors.text;
|
|
130
136
|
}
|
|
137
|
+
}, [variant, theme]);
|
|
131
138
|
|
|
132
|
-
|
|
133
|
-
|
|
139
|
+
const computedTextStyle = useMemo((): TextStyle => {
|
|
140
|
+
const sizeConfig = SIZE_CONFIG[size];
|
|
141
|
+
return {
|
|
142
|
+
fontSize: sizeConfig.fontSize,
|
|
143
|
+
fontWeight: Platform.OS === 'web' ? 'bold' : '600',
|
|
144
|
+
color: resolvedTextColor,
|
|
145
|
+
};
|
|
146
|
+
}, [size, resolvedTextColor]);
|
|
134
147
|
|
|
135
148
|
const defaultHitSlop = variant === 'icon' ? ICON_HIT_SLOP : undefined;
|
|
136
149
|
const resolvedActiveOpacity = activeOpacity ?? (variant === 'icon' ? 0.7 : 0.8);
|
|
137
150
|
const resolvedClassName = className ?? (variant === 'icon' ? 'bg-background border border-border' : undefined);
|
|
138
151
|
|
|
152
|
+
const content = (
|
|
153
|
+
<>
|
|
154
|
+
{iconPosition === 'left' && icon}
|
|
155
|
+
{children != null && (
|
|
156
|
+
<Text style={[computedTextStyle, textStyle]}>{children}</Text>
|
|
157
|
+
)}
|
|
158
|
+
{iconPosition === 'right' && icon}
|
|
159
|
+
</>
|
|
160
|
+
);
|
|
161
|
+
|
|
139
162
|
return (
|
|
140
163
|
<Animated.View style={hasScaleFeedback ? { transform: [{ scale: scaleAnim }] } : undefined}>
|
|
141
164
|
<Pressable
|
|
142
165
|
{...(resolvedClassName ? { className: resolvedClassName } as Record<string, string> : {})}
|
|
143
166
|
style={({ pressed }) => [
|
|
144
167
|
baseStyles,
|
|
145
|
-
disabled && { opacity: 0.5 },
|
|
146
|
-
pressed && !hasScaleFeedback && { opacity: resolvedActiveOpacity },
|
|
168
|
+
disabled && !loading && { opacity: 0.5 },
|
|
169
|
+
pressed && !hasScaleFeedback && !isInteractionBlocked && { opacity: resolvedActiveOpacity },
|
|
147
170
|
style,
|
|
148
171
|
]}
|
|
149
|
-
onPress={onPress}
|
|
150
|
-
onPressIn={onPressIn}
|
|
151
|
-
onPressOut={onPressOut}
|
|
152
|
-
disabled={
|
|
172
|
+
onPress={isInteractionBlocked ? undefined : onPress}
|
|
173
|
+
onPressIn={isInteractionBlocked ? undefined : onPressIn}
|
|
174
|
+
onPressOut={isInteractionBlocked ? undefined : onPressOut}
|
|
175
|
+
disabled={isInteractionBlocked}
|
|
153
176
|
hitSlop={hitSlop ?? defaultHitSlop}
|
|
154
177
|
accessibilityLabel={accessibilityLabel}
|
|
155
178
|
accessibilityHint={accessibilityHint}
|
|
156
179
|
accessibilityRole="button"
|
|
157
|
-
accessibilityState={{ disabled }}
|
|
180
|
+
accessibilityState={loading ? { disabled: isInteractionBlocked, busy: true } : { disabled: isInteractionBlocked }}
|
|
158
181
|
testID={testID}
|
|
159
182
|
>
|
|
160
|
-
{
|
|
161
|
-
|
|
162
|
-
|
|
183
|
+
{loading ? (
|
|
184
|
+
<>
|
|
185
|
+
<View
|
|
186
|
+
style={styles.loadingHiddenContent}
|
|
187
|
+
importantForAccessibility="no-hide-descendants"
|
|
188
|
+
accessibilityElementsHidden
|
|
189
|
+
>
|
|
190
|
+
{content}
|
|
191
|
+
</View>
|
|
192
|
+
<View style={styles.loadingOverlay}>
|
|
193
|
+
<ActivityIndicator size="small" color={loadingColor ?? resolvedTextColor} />
|
|
194
|
+
</View>
|
|
195
|
+
</>
|
|
196
|
+
) : (
|
|
197
|
+
content
|
|
163
198
|
)}
|
|
164
|
-
{iconPosition === 'right' && icon}
|
|
165
199
|
</Pressable>
|
|
166
200
|
</Animated.View>
|
|
167
201
|
);
|
|
168
202
|
};
|
|
169
203
|
|
|
204
|
+
const styles = StyleSheet.create({
|
|
205
|
+
loadingHiddenContent: {
|
|
206
|
+
flexDirection: 'row',
|
|
207
|
+
alignItems: 'center',
|
|
208
|
+
justifyContent: 'center',
|
|
209
|
+
opacity: 0,
|
|
210
|
+
pointerEvents: 'none',
|
|
211
|
+
},
|
|
212
|
+
loadingOverlay: {
|
|
213
|
+
...StyleSheet.absoluteFillObject,
|
|
214
|
+
alignItems: 'center',
|
|
215
|
+
justifyContent: 'center',
|
|
216
|
+
pointerEvents: 'none',
|
|
217
|
+
},
|
|
218
|
+
});
|
|
219
|
+
|
|
170
220
|
export const Button = memo(ButtonComponent);
|
|
171
221
|
Button.displayName = 'Button';
|
|
172
222
|
|
package/src/button/types.ts
CHANGED
|
@@ -17,6 +17,18 @@ export interface ButtonProps {
|
|
|
17
17
|
icon?: React.ReactNode;
|
|
18
18
|
iconPosition?: 'left' | 'right';
|
|
19
19
|
|
|
20
|
+
/**
|
|
21
|
+
* When true, displays a centered loading spinner overlay and prevents
|
|
22
|
+
* presses. Children remain in the layout (but visually hidden) so the
|
|
23
|
+
* button preserves its width. Use this for async actions like submit.
|
|
24
|
+
*/
|
|
25
|
+
loading?: boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Optional color override for the loading spinner. Defaults to the
|
|
28
|
+
* resolved button text color.
|
|
29
|
+
*/
|
|
30
|
+
loadingColor?: string;
|
|
31
|
+
|
|
20
32
|
accessibilityLabel?: string;
|
|
21
33
|
accessibilityHint?: string;
|
|
22
34
|
hitSlop?: { top: number; bottom: number; left: number; right: number };
|
|
@@ -27,9 +27,9 @@ type TextWithDefaults = typeof Text & {
|
|
|
27
27
|
|
|
28
28
|
/**
|
|
29
29
|
* Mutates `Text.defaultProps.style` so every native `<Text>` in the consuming
|
|
30
|
-
* app inherits Bloom's
|
|
31
|
-
* to any existing default style so caller-provided `style`
|
|
32
|
-
* applies AFTER `defaultProps.style`) still wins for overrides.
|
|
30
|
+
* app inherits Bloom's default font (BlomusModernus). The Bloom family name
|
|
31
|
+
* is prepended to any existing default style so caller-provided `style`
|
|
32
|
+
* (which React applies AFTER `defaultProps.style`) still wins for overrides.
|
|
33
33
|
*
|
|
34
34
|
* Idempotent: re-invoking it after the first apply is a no-op because the
|
|
35
35
|
* first style entry will already be the Bloom default we added.
|
|
@@ -37,7 +37,7 @@ type TextWithDefaults = typeof Text & {
|
|
|
37
37
|
function applyDefaultTextFont(): void {
|
|
38
38
|
const TextWithDefaults = Text as TextWithDefaults;
|
|
39
39
|
const existing = TextWithDefaults.defaultProps?.style;
|
|
40
|
-
const bloomDefault: TextStyle = { fontFamily: '
|
|
40
|
+
const bloomDefault: TextStyle = { fontFamily: 'BlomusModernus' };
|
|
41
41
|
|
|
42
42
|
// Detect whether we've already prepended ourselves. `existing` may be an
|
|
43
43
|
// array (multiple style fragments), a single object, a registered style
|
|
@@ -79,8 +79,8 @@ function applyDefaultTextFont(): void {
|
|
|
79
79
|
* provider tree ever flips `fonts` back on.
|
|
80
80
|
*
|
|
81
81
|
* Once the bundled fonts report `loaded === true`, this component also
|
|
82
|
-
* mutates `Text.defaultProps.style` to prepend `{ fontFamily: '
|
|
83
|
-
* so every native `<Text>` in the consuming app inherits Bloom's
|
|
82
|
+
* mutates `Text.defaultProps.style` to prepend `{ fontFamily: 'BlomusModernus' }`
|
|
83
|
+
* so every native `<Text>` in the consuming app inherits Bloom's default
|
|
84
84
|
* family without callers needing to import `<Text>` from `@oxyhq/bloom`.
|
|
85
85
|
* The mutation is gated by a `useRef` so it runs at most once per
|
|
86
86
|
* FontLoader instance, and the underlying apply is idempotent — the
|
package/src/fonts/tokens.ts
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
export const fontFamilies = {
|
|
12
12
|
display: 'BlomusModernus, Georgia, "Times New Roman", serif',
|
|
13
|
-
sans: '
|
|
13
|
+
sans: 'BlomusModernus, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',
|
|
14
14
|
mono: '"Geist Mono", ui-monospace, SFMono-Regular, Menlo, monospace',
|
|
15
15
|
} as const;
|
|
16
16
|
|
package/src/typography/index.tsx
CHANGED
|
@@ -24,9 +24,13 @@ function fontFamilyStyle(
|
|
|
24
24
|
if (Platform.OS === 'web') {
|
|
25
25
|
return { fontFamily: `var(--bloom-font-${kind})` };
|
|
26
26
|
}
|
|
27
|
-
if (kind === 'display') return { fontFamily: 'BlomusModernus' };
|
|
28
27
|
if (kind === 'mono') return { fontFamily: 'Geist Mono' };
|
|
29
|
-
|
|
28
|
+
// `display` and `sans` both resolve to BlomusModernus on native — Bloom's
|
|
29
|
+
// default body font. The CSS stack in `tokens.ts` differs (display vs sans
|
|
30
|
+
// have different fallback chains for web), but on RN the literal family
|
|
31
|
+
// name is the only thing that matters; the .ttf is registered via
|
|
32
|
+
// `useFonts(FONT_ASSETS)` in `FontLoader.native.tsx`.
|
|
33
|
+
return { fontFamily: 'BlomusModernus' };
|
|
30
34
|
}
|
|
31
35
|
|
|
32
36
|
const SANS_FONT_FAMILY = fontFamilyStyle('sans');
|