@spark-web/text-input 1.0.2 → 1.1.1
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/README.md +80 -13
- package/dist/declarations/src/InputAdornment.d.ts +46 -0
- package/dist/declarations/src/TextInput.d.ts +1869 -933
- package/dist/declarations/src/childrenToAdornments.d.ts +12 -0
- package/dist/declarations/src/index.d.ts +2 -0
- package/dist/spark-web-text-input.cjs.dev.js +191 -31
- package/dist/spark-web-text-input.cjs.prod.js +191 -31
- package/dist/spark-web-text-input.esm.js +192 -33
- package/package.json +16 -10
- package/CHANGELOG.md +0 -57
- package/src/TextInput.stories.tsx +0 -35
- package/src/TextInput.tsx +0 -95
- package/src/index.ts +0 -5
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ReactElement } from 'react';
|
|
2
|
+
import type { InputAdornmentProps } from './InputAdornment';
|
|
3
|
+
export declare type AdornmentChild = ReactElement<InputAdornmentProps> | null | undefined;
|
|
4
|
+
export declare type AdornmentsAsChildren = AdornmentChild | [AdornmentChild, AdornmentChild];
|
|
5
|
+
/**
|
|
6
|
+
* Map children for placement within the `TextInput` flex container. Ensures that
|
|
7
|
+
* placeholders are provided for unused placements.
|
|
8
|
+
*/
|
|
9
|
+
export declare const childrenToAdornments: (children?: AdornmentsAsChildren) => {
|
|
10
|
+
startAdornment: ReactElement<InputAdornmentProps> | null;
|
|
11
|
+
endAdornment: ReactElement<InputAdornmentProps> | null;
|
|
12
|
+
};
|
|
@@ -2,25 +2,155 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
|
|
6
5
|
var _objectSpread = require('@babel/runtime/helpers/objectSpread2');
|
|
7
|
-
var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
|
|
8
|
-
var css = require('@emotion/css');
|
|
9
|
-
var a11y = require('@spark-web/a11y');
|
|
10
6
|
var box = require('@spark-web/box');
|
|
11
7
|
var field = require('@spark-web/field');
|
|
12
|
-
var text = require('@spark-web/text');
|
|
13
8
|
var theme = require('@spark-web/theme');
|
|
14
|
-
var internal = require('@spark-web/utils/internal');
|
|
15
9
|
var react = require('react');
|
|
16
10
|
var jsxRuntime = require('react/jsx-runtime');
|
|
11
|
+
var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
|
|
12
|
+
var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
|
|
13
|
+
var css = require('@emotion/css');
|
|
14
|
+
var a11y = require('@spark-web/a11y');
|
|
15
|
+
var text = require('@spark-web/text');
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Components like the `SelectInput` may subscribe to the adornment context and
|
|
19
|
+
* change their appearance or behaviour.
|
|
20
|
+
*/
|
|
21
|
+
var InputAdornmentContext = /*#__PURE__*/react.createContext(null);
|
|
22
|
+
var placementToPadding = {
|
|
23
|
+
start: {
|
|
24
|
+
paddingLeft: 'medium',
|
|
25
|
+
paddingRight: 'xsmall'
|
|
26
|
+
},
|
|
27
|
+
end: {
|
|
28
|
+
paddingLeft: 'xsmall',
|
|
29
|
+
paddingRight: 'medium'
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Places an element at the "start" or "end" of the input, only one adornment
|
|
35
|
+
* may be provided for each placement. By default, the adornment element will be
|
|
36
|
+
* wrapped to provide alignment and spacing, use the "raw" property to opt-out
|
|
37
|
+
* of this behaviour.
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* <TextInput>
|
|
41
|
+
* <InputAdornment placement="start">
|
|
42
|
+
* <Text tone="placeholder">$</Text>
|
|
43
|
+
* </InputAdornment>
|
|
44
|
+
* </TextInput>
|
|
45
|
+
*/
|
|
46
|
+
var InputAdornment = function InputAdornment(_ref) {
|
|
47
|
+
var children = _ref.children,
|
|
48
|
+
fieldLabel = _ref.fieldLabel,
|
|
49
|
+
placement = _ref.placement,
|
|
50
|
+
raw = _ref.raw;
|
|
51
|
+
|
|
52
|
+
var _useTheme = theme.useTheme(),
|
|
53
|
+
sizing = _useTheme.sizing;
|
|
54
|
+
|
|
55
|
+
var adornmentContext = react.useMemo(function () {
|
|
56
|
+
return {
|
|
57
|
+
placement: placement
|
|
58
|
+
};
|
|
59
|
+
}, [placement]);
|
|
60
|
+
var _placementToPadding$p = placementToPadding[placement],
|
|
61
|
+
paddingLeft = _placementToPadding$p.paddingLeft,
|
|
62
|
+
paddingRight = _placementToPadding$p.paddingRight;
|
|
63
|
+
var content = children;
|
|
64
|
+
|
|
65
|
+
if (!raw) {
|
|
66
|
+
content = /*#__PURE__*/jsxRuntime.jsx(box.Box, {
|
|
67
|
+
paddingLeft: paddingLeft,
|
|
68
|
+
paddingRight: paddingRight,
|
|
69
|
+
children: /*#__PURE__*/jsxRuntime.jsx(box.Box, {
|
|
70
|
+
display: "flex",
|
|
71
|
+
alignItems: "center",
|
|
72
|
+
justifyContent: "center",
|
|
73
|
+
style: {
|
|
74
|
+
minWidth: sizing.xxsmall
|
|
75
|
+
},
|
|
76
|
+
children: children
|
|
77
|
+
})
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
var wrappedContent = /*#__PURE__*/jsxRuntime.jsx(InputAdornmentContext.Provider, {
|
|
82
|
+
value: adornmentContext,
|
|
83
|
+
children: content
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
if (fieldLabel) {
|
|
87
|
+
return /*#__PURE__*/jsxRuntime.jsx(FieldAdornment, {
|
|
88
|
+
fieldLabel: fieldLabel,
|
|
89
|
+
children: wrappedContent
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return wrappedContent;
|
|
94
|
+
};
|
|
95
|
+
/**
|
|
96
|
+
* Wrap the element with a field provider to override the parent field label.
|
|
97
|
+
* Only split-out from `InputAdornment` to avoid the conditional hook rule.
|
|
98
|
+
*/
|
|
99
|
+
|
|
100
|
+
var FieldAdornment = function FieldAdornment(_ref2) {
|
|
101
|
+
var children = _ref2.children,
|
|
102
|
+
fieldLabel = _ref2.fieldLabel;
|
|
103
|
+
var parentFieldContext = field.useFieldContext();
|
|
104
|
+
var fieldContext = react.useMemo(function () {
|
|
105
|
+
return _objectSpread(_objectSpread({}, parentFieldContext), {}, {
|
|
106
|
+
accessibilityLabel: fieldLabel
|
|
107
|
+
});
|
|
108
|
+
}, [fieldLabel, parentFieldContext]);
|
|
109
|
+
return /*#__PURE__*/jsxRuntime.jsx(field.FieldContextProvider, {
|
|
110
|
+
value: fieldContext,
|
|
111
|
+
children: children
|
|
112
|
+
});
|
|
113
|
+
};
|
|
17
114
|
|
|
18
|
-
|
|
115
|
+
/**
|
|
116
|
+
* Map children for placement within the `TextInput` flex container. Ensures that
|
|
117
|
+
* placeholders are provided for unused placements.
|
|
118
|
+
*/
|
|
119
|
+
var childrenToAdornments = function childrenToAdornments(children) {
|
|
120
|
+
var startAdornment = null;
|
|
121
|
+
var endAdornment = null;
|
|
122
|
+
|
|
123
|
+
if (!children) {
|
|
124
|
+
return {
|
|
125
|
+
startAdornment: startAdornment,
|
|
126
|
+
endAdornment: endAdornment
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
react.Children.forEach(children, function (child) {
|
|
131
|
+
if ( /*#__PURE__*/react.isValidElement(child)) {
|
|
132
|
+
if (child.props.placement === 'end') {
|
|
133
|
+
endAdornment = child;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
if (child.props.placement === 'start') {
|
|
137
|
+
startAdornment = child;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
return {
|
|
142
|
+
startAdornment: startAdornment,
|
|
143
|
+
endAdornment: endAdornment
|
|
144
|
+
};
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
var _excluded = ["children", "data"],
|
|
19
148
|
_excluded2 = ["disabled", "invalid"];
|
|
20
149
|
|
|
21
150
|
/** Organize and emphasize information quickly and effectively in a list of text elements. */
|
|
22
151
|
var TextInput = /*#__PURE__*/react.forwardRef(function (_ref, forwardedRef) {
|
|
23
|
-
var
|
|
152
|
+
var children = _ref.children,
|
|
153
|
+
data = _ref.data,
|
|
24
154
|
consumerProps = _objectWithoutProperties(_ref, _excluded);
|
|
25
155
|
|
|
26
156
|
var _useFieldContext = field.useFieldContext(),
|
|
@@ -28,28 +158,48 @@ var TextInput = /*#__PURE__*/react.forwardRef(function (_ref, forwardedRef) {
|
|
|
28
158
|
invalid = _useFieldContext.invalid,
|
|
29
159
|
a11yProps = _objectWithoutProperties(_useFieldContext, _excluded2);
|
|
30
160
|
|
|
31
|
-
var
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
return /*#__PURE__*/jsxRuntime.
|
|
36
|
-
as: "input",
|
|
37
|
-
disabled: disabled,
|
|
38
|
-
ref: forwardedRef // styles
|
|
39
|
-
,
|
|
161
|
+
var _childrenToAdornments = childrenToAdornments(children),
|
|
162
|
+
startAdornment = _childrenToAdornments.startAdornment,
|
|
163
|
+
endAdornment = _childrenToAdornments.endAdornment;
|
|
164
|
+
|
|
165
|
+
return /*#__PURE__*/jsxRuntime.jsxs(box.Box, {
|
|
40
166
|
background: disabled ? 'inputDisabled' : 'input',
|
|
41
167
|
border: invalid ? 'critical' : 'field',
|
|
42
168
|
borderRadius: "small",
|
|
169
|
+
display: "inline-flex",
|
|
170
|
+
alignItems: "center",
|
|
171
|
+
flexDirection: "row",
|
|
43
172
|
height: "medium",
|
|
44
|
-
|
|
45
|
-
className: css.css(
|
|
46
|
-
|
|
173
|
+
marginY: "none",
|
|
174
|
+
className: css.css(useInput({
|
|
175
|
+
disabled: disabled,
|
|
176
|
+
invalid: invalid
|
|
177
|
+
})),
|
|
178
|
+
children: [startAdornment, /*#__PURE__*/jsxRuntime.jsx(box.Box, _objectSpread(_objectSpread({
|
|
179
|
+
as: "input",
|
|
180
|
+
"aria-invalid": invalid || undefined,
|
|
181
|
+
ref: forwardedRef,
|
|
182
|
+
disabled: disabled // Styles
|
|
183
|
+
,
|
|
184
|
+
flex: 1,
|
|
185
|
+
height: "medium",
|
|
186
|
+
paddingX: "medium",
|
|
187
|
+
paddingLeft: startAdornment ? 'none' : 'medium',
|
|
188
|
+
paddingRight: endAdornment ? 'none' : 'medium',
|
|
189
|
+
className: css.css(useInput({
|
|
190
|
+
disabled: disabled,
|
|
191
|
+
invalid: invalid,
|
|
192
|
+
isNested: true
|
|
193
|
+
})),
|
|
194
|
+
data: data
|
|
195
|
+
}, a11yProps), consumerProps)), endAdornment]
|
|
196
|
+
});
|
|
47
197
|
});
|
|
48
|
-
TextInput.displayName = 'TextInput';
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
198
|
+
TextInput.displayName = 'TextInput';
|
|
199
|
+
var useInput = function useInput(_ref2) {
|
|
200
|
+
var disabled = _ref2.disabled,
|
|
201
|
+
_ref2$isNested = _ref2.isNested,
|
|
202
|
+
isNested = _ref2$isNested === void 0 ? false : _ref2$isNested;
|
|
53
203
|
var theme$1 = theme.useTheme();
|
|
54
204
|
var focusRingStyles = a11y.useFocusRing({
|
|
55
205
|
always: true
|
|
@@ -65,17 +215,27 @@ function useInput(_ref2) {
|
|
|
65
215
|
typographyStyles = _textStyles[0],
|
|
66
216
|
responsiveStyles = _textStyles[1];
|
|
67
217
|
|
|
68
|
-
return _objectSpread(_objectSpread(_objectSpread({}, typographyStyles), responsiveStyles),
|
|
218
|
+
return _objectSpread(_objectSpread(_objectSpread({}, typographyStyles), responsiveStyles), isNested ? {
|
|
219
|
+
':focus': {
|
|
220
|
+
// This removes the nested input outline visibility since
|
|
221
|
+
// the wrapper will be outlined, but still visibly focusable
|
|
222
|
+
// to windows high contrast mode users.
|
|
223
|
+
// @see https://tailwindcss.com/docs/outline-style#removing-outlines
|
|
224
|
+
outline: '2px solid transparent',
|
|
225
|
+
outlineOffset: '2px'
|
|
226
|
+
}
|
|
227
|
+
} : {
|
|
69
228
|
':enabled': {
|
|
70
|
-
'&:hover': {
|
|
71
|
-
borderColor: theme$1.border.color.fieldHover
|
|
72
|
-
},
|
|
73
229
|
'&:focus': _objectSpread(_objectSpread({}, focusRingStyles), {}, {
|
|
74
230
|
borderColor: theme$1.border.color.fieldAccent
|
|
75
231
|
})
|
|
76
|
-
}
|
|
232
|
+
},
|
|
233
|
+
':focus-within': _objectSpread(_objectSpread({}, focusRingStyles), {}, {
|
|
234
|
+
borderColor: theme$1.border.color.fieldAccent
|
|
235
|
+
})
|
|
77
236
|
});
|
|
78
|
-
}
|
|
237
|
+
};
|
|
79
238
|
|
|
239
|
+
exports.InputAdornment = InputAdornment;
|
|
80
240
|
exports.TextInput = TextInput;
|
|
81
241
|
exports.useInput = useInput;
|
|
@@ -2,25 +2,155 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
|
|
6
5
|
var _objectSpread = require('@babel/runtime/helpers/objectSpread2');
|
|
7
|
-
var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
|
|
8
|
-
var css = require('@emotion/css');
|
|
9
|
-
var a11y = require('@spark-web/a11y');
|
|
10
6
|
var box = require('@spark-web/box');
|
|
11
7
|
var field = require('@spark-web/field');
|
|
12
|
-
var text = require('@spark-web/text');
|
|
13
8
|
var theme = require('@spark-web/theme');
|
|
14
|
-
var internal = require('@spark-web/utils/internal');
|
|
15
9
|
var react = require('react');
|
|
16
10
|
var jsxRuntime = require('react/jsx-runtime');
|
|
11
|
+
var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
|
|
12
|
+
var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
|
|
13
|
+
var css = require('@emotion/css');
|
|
14
|
+
var a11y = require('@spark-web/a11y');
|
|
15
|
+
var text = require('@spark-web/text');
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Components like the `SelectInput` may subscribe to the adornment context and
|
|
19
|
+
* change their appearance or behaviour.
|
|
20
|
+
*/
|
|
21
|
+
var InputAdornmentContext = /*#__PURE__*/react.createContext(null);
|
|
22
|
+
var placementToPadding = {
|
|
23
|
+
start: {
|
|
24
|
+
paddingLeft: 'medium',
|
|
25
|
+
paddingRight: 'xsmall'
|
|
26
|
+
},
|
|
27
|
+
end: {
|
|
28
|
+
paddingLeft: 'xsmall',
|
|
29
|
+
paddingRight: 'medium'
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Places an element at the "start" or "end" of the input, only one adornment
|
|
35
|
+
* may be provided for each placement. By default, the adornment element will be
|
|
36
|
+
* wrapped to provide alignment and spacing, use the "raw" property to opt-out
|
|
37
|
+
* of this behaviour.
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* <TextInput>
|
|
41
|
+
* <InputAdornment placement="start">
|
|
42
|
+
* <Text tone="placeholder">$</Text>
|
|
43
|
+
* </InputAdornment>
|
|
44
|
+
* </TextInput>
|
|
45
|
+
*/
|
|
46
|
+
var InputAdornment = function InputAdornment(_ref) {
|
|
47
|
+
var children = _ref.children,
|
|
48
|
+
fieldLabel = _ref.fieldLabel,
|
|
49
|
+
placement = _ref.placement,
|
|
50
|
+
raw = _ref.raw;
|
|
51
|
+
|
|
52
|
+
var _useTheme = theme.useTheme(),
|
|
53
|
+
sizing = _useTheme.sizing;
|
|
54
|
+
|
|
55
|
+
var adornmentContext = react.useMemo(function () {
|
|
56
|
+
return {
|
|
57
|
+
placement: placement
|
|
58
|
+
};
|
|
59
|
+
}, [placement]);
|
|
60
|
+
var _placementToPadding$p = placementToPadding[placement],
|
|
61
|
+
paddingLeft = _placementToPadding$p.paddingLeft,
|
|
62
|
+
paddingRight = _placementToPadding$p.paddingRight;
|
|
63
|
+
var content = children;
|
|
64
|
+
|
|
65
|
+
if (!raw) {
|
|
66
|
+
content = /*#__PURE__*/jsxRuntime.jsx(box.Box, {
|
|
67
|
+
paddingLeft: paddingLeft,
|
|
68
|
+
paddingRight: paddingRight,
|
|
69
|
+
children: /*#__PURE__*/jsxRuntime.jsx(box.Box, {
|
|
70
|
+
display: "flex",
|
|
71
|
+
alignItems: "center",
|
|
72
|
+
justifyContent: "center",
|
|
73
|
+
style: {
|
|
74
|
+
minWidth: sizing.xxsmall
|
|
75
|
+
},
|
|
76
|
+
children: children
|
|
77
|
+
})
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
var wrappedContent = /*#__PURE__*/jsxRuntime.jsx(InputAdornmentContext.Provider, {
|
|
82
|
+
value: adornmentContext,
|
|
83
|
+
children: content
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
if (fieldLabel) {
|
|
87
|
+
return /*#__PURE__*/jsxRuntime.jsx(FieldAdornment, {
|
|
88
|
+
fieldLabel: fieldLabel,
|
|
89
|
+
children: wrappedContent
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return wrappedContent;
|
|
94
|
+
};
|
|
95
|
+
/**
|
|
96
|
+
* Wrap the element with a field provider to override the parent field label.
|
|
97
|
+
* Only split-out from `InputAdornment` to avoid the conditional hook rule.
|
|
98
|
+
*/
|
|
99
|
+
|
|
100
|
+
var FieldAdornment = function FieldAdornment(_ref2) {
|
|
101
|
+
var children = _ref2.children,
|
|
102
|
+
fieldLabel = _ref2.fieldLabel;
|
|
103
|
+
var parentFieldContext = field.useFieldContext();
|
|
104
|
+
var fieldContext = react.useMemo(function () {
|
|
105
|
+
return _objectSpread(_objectSpread({}, parentFieldContext), {}, {
|
|
106
|
+
accessibilityLabel: fieldLabel
|
|
107
|
+
});
|
|
108
|
+
}, [fieldLabel, parentFieldContext]);
|
|
109
|
+
return /*#__PURE__*/jsxRuntime.jsx(field.FieldContextProvider, {
|
|
110
|
+
value: fieldContext,
|
|
111
|
+
children: children
|
|
112
|
+
});
|
|
113
|
+
};
|
|
17
114
|
|
|
18
|
-
|
|
115
|
+
/**
|
|
116
|
+
* Map children for placement within the `TextInput` flex container. Ensures that
|
|
117
|
+
* placeholders are provided for unused placements.
|
|
118
|
+
*/
|
|
119
|
+
var childrenToAdornments = function childrenToAdornments(children) {
|
|
120
|
+
var startAdornment = null;
|
|
121
|
+
var endAdornment = null;
|
|
122
|
+
|
|
123
|
+
if (!children) {
|
|
124
|
+
return {
|
|
125
|
+
startAdornment: startAdornment,
|
|
126
|
+
endAdornment: endAdornment
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
react.Children.forEach(children, function (child) {
|
|
131
|
+
if ( /*#__PURE__*/react.isValidElement(child)) {
|
|
132
|
+
if (child.props.placement === 'end') {
|
|
133
|
+
endAdornment = child;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
if (child.props.placement === 'start') {
|
|
137
|
+
startAdornment = child;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
return {
|
|
142
|
+
startAdornment: startAdornment,
|
|
143
|
+
endAdornment: endAdornment
|
|
144
|
+
};
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
var _excluded = ["children", "data"],
|
|
19
148
|
_excluded2 = ["disabled", "invalid"];
|
|
20
149
|
|
|
21
150
|
/** Organize and emphasize information quickly and effectively in a list of text elements. */
|
|
22
151
|
var TextInput = /*#__PURE__*/react.forwardRef(function (_ref, forwardedRef) {
|
|
23
|
-
var
|
|
152
|
+
var children = _ref.children,
|
|
153
|
+
data = _ref.data,
|
|
24
154
|
consumerProps = _objectWithoutProperties(_ref, _excluded);
|
|
25
155
|
|
|
26
156
|
var _useFieldContext = field.useFieldContext(),
|
|
@@ -28,28 +158,48 @@ var TextInput = /*#__PURE__*/react.forwardRef(function (_ref, forwardedRef) {
|
|
|
28
158
|
invalid = _useFieldContext.invalid,
|
|
29
159
|
a11yProps = _objectWithoutProperties(_useFieldContext, _excluded2);
|
|
30
160
|
|
|
31
|
-
var
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
return /*#__PURE__*/jsxRuntime.
|
|
36
|
-
as: "input",
|
|
37
|
-
disabled: disabled,
|
|
38
|
-
ref: forwardedRef // styles
|
|
39
|
-
,
|
|
161
|
+
var _childrenToAdornments = childrenToAdornments(children),
|
|
162
|
+
startAdornment = _childrenToAdornments.startAdornment,
|
|
163
|
+
endAdornment = _childrenToAdornments.endAdornment;
|
|
164
|
+
|
|
165
|
+
return /*#__PURE__*/jsxRuntime.jsxs(box.Box, {
|
|
40
166
|
background: disabled ? 'inputDisabled' : 'input',
|
|
41
167
|
border: invalid ? 'critical' : 'field',
|
|
42
168
|
borderRadius: "small",
|
|
169
|
+
display: "inline-flex",
|
|
170
|
+
alignItems: "center",
|
|
171
|
+
flexDirection: "row",
|
|
43
172
|
height: "medium",
|
|
44
|
-
|
|
45
|
-
className: css.css(
|
|
46
|
-
|
|
173
|
+
marginY: "none",
|
|
174
|
+
className: css.css(useInput({
|
|
175
|
+
disabled: disabled,
|
|
176
|
+
invalid: invalid
|
|
177
|
+
})),
|
|
178
|
+
children: [startAdornment, /*#__PURE__*/jsxRuntime.jsx(box.Box, _objectSpread(_objectSpread({
|
|
179
|
+
as: "input",
|
|
180
|
+
"aria-invalid": invalid || undefined,
|
|
181
|
+
ref: forwardedRef,
|
|
182
|
+
disabled: disabled // Styles
|
|
183
|
+
,
|
|
184
|
+
flex: 1,
|
|
185
|
+
height: "medium",
|
|
186
|
+
paddingX: "medium",
|
|
187
|
+
paddingLeft: startAdornment ? 'none' : 'medium',
|
|
188
|
+
paddingRight: endAdornment ? 'none' : 'medium',
|
|
189
|
+
className: css.css(useInput({
|
|
190
|
+
disabled: disabled,
|
|
191
|
+
invalid: invalid,
|
|
192
|
+
isNested: true
|
|
193
|
+
})),
|
|
194
|
+
data: data
|
|
195
|
+
}, a11yProps), consumerProps)), endAdornment]
|
|
196
|
+
});
|
|
47
197
|
});
|
|
48
|
-
TextInput.displayName = 'TextInput';
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
198
|
+
TextInput.displayName = 'TextInput';
|
|
199
|
+
var useInput = function useInput(_ref2) {
|
|
200
|
+
var disabled = _ref2.disabled,
|
|
201
|
+
_ref2$isNested = _ref2.isNested,
|
|
202
|
+
isNested = _ref2$isNested === void 0 ? false : _ref2$isNested;
|
|
53
203
|
var theme$1 = theme.useTheme();
|
|
54
204
|
var focusRingStyles = a11y.useFocusRing({
|
|
55
205
|
always: true
|
|
@@ -65,17 +215,27 @@ function useInput(_ref2) {
|
|
|
65
215
|
typographyStyles = _textStyles[0],
|
|
66
216
|
responsiveStyles = _textStyles[1];
|
|
67
217
|
|
|
68
|
-
return _objectSpread(_objectSpread(_objectSpread({}, typographyStyles), responsiveStyles),
|
|
218
|
+
return _objectSpread(_objectSpread(_objectSpread({}, typographyStyles), responsiveStyles), isNested ? {
|
|
219
|
+
':focus': {
|
|
220
|
+
// This removes the nested input outline visibility since
|
|
221
|
+
// the wrapper will be outlined, but still visibly focusable
|
|
222
|
+
// to windows high contrast mode users.
|
|
223
|
+
// @see https://tailwindcss.com/docs/outline-style#removing-outlines
|
|
224
|
+
outline: '2px solid transparent',
|
|
225
|
+
outlineOffset: '2px'
|
|
226
|
+
}
|
|
227
|
+
} : {
|
|
69
228
|
':enabled': {
|
|
70
|
-
'&:hover': {
|
|
71
|
-
borderColor: theme$1.border.color.fieldHover
|
|
72
|
-
},
|
|
73
229
|
'&:focus': _objectSpread(_objectSpread({}, focusRingStyles), {}, {
|
|
74
230
|
borderColor: theme$1.border.color.fieldAccent
|
|
75
231
|
})
|
|
76
|
-
}
|
|
232
|
+
},
|
|
233
|
+
':focus-within': _objectSpread(_objectSpread({}, focusRingStyles), {}, {
|
|
234
|
+
borderColor: theme$1.border.color.fieldAccent
|
|
235
|
+
})
|
|
77
236
|
});
|
|
78
|
-
}
|
|
237
|
+
};
|
|
79
238
|
|
|
239
|
+
exports.InputAdornment = InputAdornment;
|
|
80
240
|
exports.TextInput = TextInput;
|
|
81
241
|
exports.useInput = useInput;
|