UNPKG

4.59 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.default = void 0;
7
8var React = _interopRequireWildcard(require("react"));
9
10var _reactNative = require("react-native");
11
12var _color = _interopRequireDefault(require("color"));
13
14var _TouchableRipple = _interopRequireDefault(require("./TouchableRipple/TouchableRipple"));
15
16var _Icon = _interopRequireDefault(require("./Icon"));
17
18var _CrossFadeIcon = _interopRequireDefault(require("./CrossFadeIcon"));
19
20var _theming = require("../core/theming");
21
22function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
24function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
25
26function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
27
28function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
29
30/**
31 * An icon button is a button which displays only an icon without a label.
32 * By default button has 150% size of the icon.
33 *
34 * <div class="screenshots">
35 * <figure>
36 * <img src="screenshots/icon-button-1.png" />
37 * <figcaption>Icon button</figcaption>
38 * </figure>
39 * <figure>
40 * <img src="screenshots/icon-button-2.png" />
41 * <figcaption>Pressed icon button</figcaption>
42 * </figure>
43 * </div>
44 *
45 * ## Usage
46 * ```js
47 * import * as React from 'react';
48 * import { IconButton, Colors } from 'react-native-paper';
49 *
50 * const MyComponent = () => (
51 * <IconButton
52 * icon="camera"
53 * color={Colors.red500}
54 * size={20}
55 * onPress={() => console.log('Pressed')}
56 * />
57 * );
58 *
59 * export default MyComponent;
60 * ```
61 *
62 * @extends TouchableRipple props https://callstack.github.io/react-native-paper/touchable-ripple.html
63 */
64const IconButton = ({
65 icon,
66 color: customColor,
67 size = 24,
68 accessibilityLabel,
69 disabled,
70 onPress,
71 animated = false,
72 theme,
73 style,
74 ...rest
75}) => {
76 const iconColor = typeof customColor !== 'undefined' ? customColor : theme.colors.text;
77 const rippleColor = (0, _color.default)(iconColor).alpha(0.32).rgb().string();
78 const IconComponent = animated ? _CrossFadeIcon.default : _Icon.default;
79 const buttonSize = size * 1.5;
80 return /*#__PURE__*/React.createElement(_TouchableRipple.default, _extends({
81 borderless: true,
82 centered: true,
83 onPress: onPress,
84 rippleColor: rippleColor,
85 style: [styles.container, {
86 width: buttonSize,
87 height: buttonSize,
88 borderRadius: buttonSize / 2
89 }, disabled && styles.disabled, style],
90 accessibilityLabel: accessibilityLabel // @ts-expect-error We keep old a11y props for backwards compat with old RN versions
91 ,
92 accessibilityTraits: disabled ? ['button', 'disabled'] : 'button',
93 accessibilityComponentType: "button",
94 accessibilityRole: "button",
95 accessibilityState: {
96 disabled
97 },
98 disabled: disabled,
99 hitSlop: _TouchableRipple.default.supported ? {
100 top: 10,
101 left: 10,
102 bottom: 10,
103 right: 10
104 } : {
105 top: 6,
106 left: 6,
107 bottom: 6,
108 right: 6
109 }
110 }, rest), /*#__PURE__*/React.createElement(_reactNative.View, null, /*#__PURE__*/React.createElement(IconComponent, {
111 color: iconColor,
112 source: icon,
113 size: size
114 })));
115};
116
117const styles = _reactNative.StyleSheet.create({
118 container: {
119 alignItems: 'center',
120 justifyContent: 'center',
121 overflow: 'hidden',
122 margin: 6
123 },
124 disabled: {
125 opacity: 0.32
126 }
127});
128
129var _default = (0, _theming.withTheme)(IconButton);
130
131exports.default = _default;
132//# sourceMappingURL=IconButton.js.map
\No newline at end of file