@hero-design/rn 8.136.3 → 8.137.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/es/index.js +63 -15
- package/lib/index.js +63 -15
- package/package.json +1 -1
- package/src/components/Select/MultiSelect/index.tsx +3 -1
- package/src/components/Select/SingleSelect/index.tsx +4 -2
- package/src/components/Select/types.ts +9 -0
- package/src/components/TextInput/AssistiveInfoTrigger/StyledAssistiveInfoTrigger.tsx +13 -0
- package/src/components/TextInput/AssistiveInfoTrigger/index.tsx +45 -0
- package/src/components/TextInput/index.tsx +32 -11
- package/src/theme/components/textInput.ts +2 -0
- package/types/components/Select/MultiSelect/index.d.ts +1 -1
- package/types/components/Select/SingleSelect/index.d.ts +1 -1
- package/types/components/Select/types.d.ts +9 -0
- package/types/components/TextInput/AssistiveInfoTrigger/StyledAssistiveInfoTrigger.d.ts +11 -0
- package/types/components/TextInput/AssistiveInfoTrigger/index.d.ts +10 -0
- package/types/components/TextInput/index.d.ts +9 -0
- package/types/theme/components/textInput.d.ts +2 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# @hero-design/rn
|
|
2
2
|
|
|
3
|
+
## 8.137.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#5516](https://github.com/Thinkei/hero-design/pull/5516) [`22172f6`](https://github.com/Thinkei/hero-design/commit/22172f65028e66509964b69c431b4660d0e66e45) Thanks [@ttkien](https://github.com/ttkien)! - [Select] Add `assistiveInfoConfig` prop to render an optional info trigger below the field
|
|
8
|
+
|
|
9
|
+
- [#5516](https://github.com/Thinkei/hero-design/pull/5516) [`22172f6`](https://github.com/Thinkei/hero-design/commit/22172f65028e66509964b69c431b4660d0e66e45) Thanks [@ttkien](https://github.com/ttkien)! - [TextInput] Add `assistiveInfoConfig` prop to render an optional info trigger below the field
|
|
10
|
+
|
|
3
11
|
## 8.136.3
|
|
4
12
|
|
|
5
13
|
### Patch Changes
|
package/es/index.js
CHANGED
|
@@ -7322,6 +7322,8 @@ var getTextInputTheme = function getTextInputTheme(theme) {
|
|
|
7322
7322
|
containerMarginTop: theme.space.small,
|
|
7323
7323
|
labelInsideTextInputMarginTop: 0,
|
|
7324
7324
|
errorAndHelpTextContainerPaddingTop: theme.space.xxsmall,
|
|
7325
|
+
assistiveInfoTriggerPadding: theme.space.xsmall,
|
|
7326
|
+
assistiveInfoTriggerGap: theme.space.xsmall,
|
|
7325
7327
|
inputAndLabelContainerPaddingTop: theme.lineHeights.medium,
|
|
7326
7328
|
labelFocusedTranslateY: theme.space.xsmall * 2,
|
|
7327
7329
|
textareaLabelIdleTranslateY: theme.space.large
|
|
@@ -21387,7 +21389,43 @@ var StyledErrorAndMaxLengthContainer = index$c(View)(function (_ref14) {
|
|
|
21387
21389
|
};
|
|
21388
21390
|
});
|
|
21389
21391
|
|
|
21390
|
-
var
|
|
21392
|
+
var StyledTouchable = index$c(TouchableOpacity)(function () {
|
|
21393
|
+
return {
|
|
21394
|
+
alignSelf: 'flex-start'
|
|
21395
|
+
};
|
|
21396
|
+
});
|
|
21397
|
+
var StyledRow$1 = index$c(View)(function (_ref) {
|
|
21398
|
+
var theme = _ref.theme;
|
|
21399
|
+
return {
|
|
21400
|
+
flexDirection: 'row',
|
|
21401
|
+
alignItems: 'center',
|
|
21402
|
+
padding: theme.__hd__.textInput.space.assistiveInfoTriggerPadding,
|
|
21403
|
+
gap: theme.__hd__.textInput.space.assistiveInfoTriggerGap
|
|
21404
|
+
};
|
|
21405
|
+
});
|
|
21406
|
+
|
|
21407
|
+
var AssistiveInfoTrigger = function AssistiveInfoTrigger(_ref) {
|
|
21408
|
+
var accessibilityLabel = _ref.accessibilityLabel,
|
|
21409
|
+
disabled = _ref.disabled,
|
|
21410
|
+
label = _ref.label,
|
|
21411
|
+
onPress = _ref.onPress,
|
|
21412
|
+
testID = _ref.testID;
|
|
21413
|
+
return /*#__PURE__*/React__default.createElement(StyledTouchable, {
|
|
21414
|
+
onPress: onPress,
|
|
21415
|
+
disabled: disabled,
|
|
21416
|
+
accessibilityLabel: accessibilityLabel !== null && accessibilityLabel !== void 0 ? accessibilityLabel : 'More information',
|
|
21417
|
+
accessibilityRole: "button",
|
|
21418
|
+
testID: testID
|
|
21419
|
+
}, /*#__PURE__*/React__default.createElement(StyledRow$1, null, /*#__PURE__*/React__default.createElement(Icon, {
|
|
21420
|
+
icon: "circle-info-outlined",
|
|
21421
|
+
size: "xsmall",
|
|
21422
|
+
intent: disabled ? 'disabled-text' : 'muted'
|
|
21423
|
+
}), !!label && /*#__PURE__*/React__default.createElement(Typography.Caption, {
|
|
21424
|
+
intent: disabled ? 'disabled' : 'muted'
|
|
21425
|
+
}, label)));
|
|
21426
|
+
};
|
|
21427
|
+
|
|
21428
|
+
var _excluded$t = ["label", "prefix", "suffix", "style", "textStyle", "testID", "accessibilityLabelledBy", "error", "required", "editable", "disabled", "loading", "maxLength", "hideCharacterCount", "helpText", "assistiveInfoConfig", "value", "defaultValue", "renderInputValue", "allowFontScaling", "variant", "pointerEvents"];
|
|
21391
21429
|
var getState$3 = function getState(_ref) {
|
|
21392
21430
|
var disabled = _ref.disabled,
|
|
21393
21431
|
error = _ref.error,
|
|
@@ -21496,6 +21534,7 @@ var TextInput = /*#__PURE__*/forwardRef(function (_ref8, ref) {
|
|
|
21496
21534
|
_ref8$hideCharacterCo = _ref8.hideCharacterCount,
|
|
21497
21535
|
hideCharacterCount = _ref8$hideCharacterCo === void 0 ? false : _ref8$hideCharacterCo,
|
|
21498
21536
|
helpText = _ref8.helpText,
|
|
21537
|
+
assistiveInfoConfig = _ref8.assistiveInfoConfig,
|
|
21499
21538
|
value = _ref8.value,
|
|
21500
21539
|
defaultValue = _ref8.defaultValue,
|
|
21501
21540
|
renderInputValue = _ref8.renderInputValue,
|
|
@@ -21503,6 +21542,7 @@ var TextInput = /*#__PURE__*/forwardRef(function (_ref8, ref) {
|
|
|
21503
21542
|
allowFontScaling = _ref8$allowFontScalin === void 0 ? false : _ref8$allowFontScalin,
|
|
21504
21543
|
_ref8$variant = _ref8.variant,
|
|
21505
21544
|
variant = _ref8$variant === void 0 ? 'text' : _ref8$variant,
|
|
21545
|
+
pointerEvents = _ref8.pointerEvents,
|
|
21506
21546
|
nativeProps = _objectWithoutProperties(_ref8, _excluded$t);
|
|
21507
21547
|
var displayText = getDisplayText(value, defaultValue);
|
|
21508
21548
|
var isEmptyValue = displayText.length === 0;
|
|
@@ -21634,17 +21674,20 @@ var TextInput = /*#__PURE__*/forwardRef(function (_ref8, ref) {
|
|
|
21634
21674
|
defaultValue: defaultValue,
|
|
21635
21675
|
placeholder: isFocused || label === undefined ? nativeProps.placeholder : EMPTY_PLACEHOLDER_VALUE
|
|
21636
21676
|
});
|
|
21677
|
+
var isPressable = state !== 'disabled' && state !== 'readonly' && !loading;
|
|
21637
21678
|
return /*#__PURE__*/React__default.createElement(StyledContainer$7, {
|
|
21638
21679
|
style: styleWithoutBackgroundColor,
|
|
21639
|
-
pointerEvents: state === 'disabled' || state === 'readonly' || loading ? 'none' : 'auto',
|
|
21640
21680
|
testID: testID
|
|
21641
21681
|
}, /*#__PURE__*/React__default.createElement(Pressable, {
|
|
21642
|
-
onPress: focusInnerTextInput,
|
|
21682
|
+
onPress: isPressable ? focusInnerTextInput : undefined,
|
|
21643
21683
|
accessible: false,
|
|
21644
|
-
importantForAccessibility: "no"
|
|
21684
|
+
importantForAccessibility: "no",
|
|
21685
|
+
disabled: !isPressable,
|
|
21686
|
+
pointerEvents: pointerEvents
|
|
21645
21687
|
}, /*#__PURE__*/React__default.createElement(StyledTextInputContainer, {
|
|
21646
21688
|
themeVariant: variant,
|
|
21647
|
-
themeState: state
|
|
21689
|
+
themeState: state,
|
|
21690
|
+
pointerEvents: isPressable ? 'auto' : 'none'
|
|
21648
21691
|
}, /*#__PURE__*/React__default.createElement(StyledBorderBackDrop, {
|
|
21649
21692
|
themeFocused: isFocused,
|
|
21650
21693
|
themeState: state,
|
|
@@ -21709,7 +21752,12 @@ var TextInput = /*#__PURE__*/forwardRef(function (_ref8, ref) {
|
|
|
21709
21752
|
state: state,
|
|
21710
21753
|
loading: loading,
|
|
21711
21754
|
suffix: suffix
|
|
21712
|
-
}))),
|
|
21755
|
+
}))), !!assistiveInfoConfig && /*#__PURE__*/React__default.createElement(AssistiveInfoTrigger, {
|
|
21756
|
+
onPress: assistiveInfoConfig.onPress,
|
|
21757
|
+
label: assistiveInfoConfig.label,
|
|
21758
|
+
testID: assistiveInfoConfig.testID,
|
|
21759
|
+
disabled: !isPressable
|
|
21760
|
+
}), /*#__PURE__*/React__default.createElement(StyledErrorAndHelpTextContainer, null, /*#__PURE__*/React__default.createElement(StyledErrorAndMaxLengthContainer, null, renderErrorOrHelpText({
|
|
21713
21761
|
error: error,
|
|
21714
21762
|
helpText: helpText
|
|
21715
21763
|
}), renderMaxLengthMessage({
|
|
@@ -27845,7 +27893,8 @@ function MultiSelect(_ref) {
|
|
|
27845
27893
|
_ref$supportedOrienta = _ref.supportedOrientations,
|
|
27846
27894
|
supportedOrientations = _ref$supportedOrienta === void 0 ? ['portrait'] : _ref$supportedOrienta,
|
|
27847
27895
|
_ref$bottomSheetConfi = _ref.bottomSheetConfig,
|
|
27848
|
-
bottomSheetConfig = _ref$bottomSheetConfi === void 0 ? {} : _ref$bottomSheetConfi
|
|
27896
|
+
bottomSheetConfig = _ref$bottomSheetConfi === void 0 ? {} : _ref$bottomSheetConfi,
|
|
27897
|
+
assistiveInfoConfig = _ref.assistiveInfoConfig;
|
|
27849
27898
|
var _useKeyboard = useKeyboard(),
|
|
27850
27899
|
isKeyboardVisible = _useKeyboard.isKeyboardVisible,
|
|
27851
27900
|
keyboardHeight = _useKeyboard.keyboardHeight;
|
|
@@ -27883,9 +27932,7 @@ function MultiSelect(_ref) {
|
|
|
27883
27932
|
}, /*#__PURE__*/React__default.createElement(TouchableOpacity, {
|
|
27884
27933
|
onPress: onPress,
|
|
27885
27934
|
testID: "multi-select-touchable-opacity"
|
|
27886
|
-
}, /*#__PURE__*/React__default.createElement(View, {
|
|
27887
|
-
pointerEvents: "none"
|
|
27888
|
-
}, /*#__PURE__*/React__default.createElement(TextInput, _extends$1({}, inputProps, {
|
|
27935
|
+
}, /*#__PURE__*/React__default.createElement(View, null, /*#__PURE__*/React__default.createElement(TextInput, _extends$1({}, inputProps, {
|
|
27889
27936
|
label: label,
|
|
27890
27937
|
value: renderSelectedValue ? rawValue : displayedValue,
|
|
27891
27938
|
suffix: selectSuffix,
|
|
@@ -27897,6 +27944,7 @@ function MultiSelect(_ref) {
|
|
|
27897
27944
|
pointerEvents: "none",
|
|
27898
27945
|
style: style,
|
|
27899
27946
|
testID: testID,
|
|
27947
|
+
assistiveInfoConfig: assistiveInfoConfig,
|
|
27900
27948
|
renderInputValue: renderSelectedValue !== undefined && (rawValue === null || rawValue === void 0 ? void 0 : rawValue.length) > 0 ? function (nativeInputProps) {
|
|
27901
27949
|
return renderSelectedValue(value, nativeInputProps);
|
|
27902
27950
|
} : undefined
|
|
@@ -28059,7 +28107,8 @@ var SingleSelect = function SingleSelect(_ref) {
|
|
|
28059
28107
|
_ref$supportedOrienta = _ref.supportedOrientations,
|
|
28060
28108
|
supportedOrientations = _ref$supportedOrienta === void 0 ? ['portrait'] : _ref$supportedOrienta,
|
|
28061
28109
|
_ref$bottomSheetConfi = _ref.bottomSheetConfig,
|
|
28062
|
-
bottomSheetConfig = _ref$bottomSheetConfi === void 0 ? {} : _ref$bottomSheetConfi
|
|
28110
|
+
bottomSheetConfig = _ref$bottomSheetConfi === void 0 ? {} : _ref$bottomSheetConfi,
|
|
28111
|
+
assistiveInfoConfig = _ref.assistiveInfoConfig;
|
|
28063
28112
|
var _useKeyboard = useKeyboard(),
|
|
28064
28113
|
isKeyboardVisible = _useKeyboard.isKeyboardVisible,
|
|
28065
28114
|
keyboardHeight = _useKeyboard.keyboardHeight;
|
|
@@ -28090,9 +28139,7 @@ var SingleSelect = function SingleSelect(_ref) {
|
|
|
28090
28139
|
}, /*#__PURE__*/React__default.createElement(TouchableOpacity, {
|
|
28091
28140
|
onPress: onPress,
|
|
28092
28141
|
testID: "single-select-touchable-opacity"
|
|
28093
|
-
}, /*#__PURE__*/React__default.createElement(View, {
|
|
28094
|
-
pointerEvents: "none"
|
|
28095
|
-
}, /*#__PURE__*/React__default.createElement(TextInput, _extends$1({}, inputProps, {
|
|
28142
|
+
}, /*#__PURE__*/React__default.createElement(View, null, /*#__PURE__*/React__default.createElement(TextInput, _extends$1({}, inputProps, {
|
|
28096
28143
|
label: label,
|
|
28097
28144
|
value: renderSelectedValue ? rawValue : displayedValue,
|
|
28098
28145
|
suffix: selectSuffix,
|
|
@@ -28101,9 +28148,10 @@ var SingleSelect = function SingleSelect(_ref) {
|
|
|
28101
28148
|
editable: editable,
|
|
28102
28149
|
disabled: disabled,
|
|
28103
28150
|
required: required,
|
|
28104
|
-
pointerEvents: "none",
|
|
28105
28151
|
style: style,
|
|
28106
28152
|
testID: testID,
|
|
28153
|
+
pointerEvents: "none",
|
|
28154
|
+
assistiveInfoConfig: assistiveInfoConfig,
|
|
28107
28155
|
renderInputValue: renderSelectedValue !== undefined && !!rawValue ? function (nativeInputProps) {
|
|
28108
28156
|
return renderSelectedValue(value, nativeInputProps);
|
|
28109
28157
|
} : undefined
|
package/lib/index.js
CHANGED
|
@@ -7351,6 +7351,8 @@ var getTextInputTheme = function getTextInputTheme(theme) {
|
|
|
7351
7351
|
containerMarginTop: theme.space.small,
|
|
7352
7352
|
labelInsideTextInputMarginTop: 0,
|
|
7353
7353
|
errorAndHelpTextContainerPaddingTop: theme.space.xxsmall,
|
|
7354
|
+
assistiveInfoTriggerPadding: theme.space.xsmall,
|
|
7355
|
+
assistiveInfoTriggerGap: theme.space.xsmall,
|
|
7354
7356
|
inputAndLabelContainerPaddingTop: theme.lineHeights.medium,
|
|
7355
7357
|
labelFocusedTranslateY: theme.space.xsmall * 2,
|
|
7356
7358
|
textareaLabelIdleTranslateY: theme.space.large
|
|
@@ -21416,7 +21418,43 @@ var StyledErrorAndMaxLengthContainer = index$c(reactNative.View)(function (_ref1
|
|
|
21416
21418
|
};
|
|
21417
21419
|
});
|
|
21418
21420
|
|
|
21419
|
-
var
|
|
21421
|
+
var StyledTouchable = index$c(reactNative.TouchableOpacity)(function () {
|
|
21422
|
+
return {
|
|
21423
|
+
alignSelf: 'flex-start'
|
|
21424
|
+
};
|
|
21425
|
+
});
|
|
21426
|
+
var StyledRow$1 = index$c(reactNative.View)(function (_ref) {
|
|
21427
|
+
var theme = _ref.theme;
|
|
21428
|
+
return {
|
|
21429
|
+
flexDirection: 'row',
|
|
21430
|
+
alignItems: 'center',
|
|
21431
|
+
padding: theme.__hd__.textInput.space.assistiveInfoTriggerPadding,
|
|
21432
|
+
gap: theme.__hd__.textInput.space.assistiveInfoTriggerGap
|
|
21433
|
+
};
|
|
21434
|
+
});
|
|
21435
|
+
|
|
21436
|
+
var AssistiveInfoTrigger = function AssistiveInfoTrigger(_ref) {
|
|
21437
|
+
var accessibilityLabel = _ref.accessibilityLabel,
|
|
21438
|
+
disabled = _ref.disabled,
|
|
21439
|
+
label = _ref.label,
|
|
21440
|
+
onPress = _ref.onPress,
|
|
21441
|
+
testID = _ref.testID;
|
|
21442
|
+
return /*#__PURE__*/React__namespace.default.createElement(StyledTouchable, {
|
|
21443
|
+
onPress: onPress,
|
|
21444
|
+
disabled: disabled,
|
|
21445
|
+
accessibilityLabel: accessibilityLabel !== null && accessibilityLabel !== void 0 ? accessibilityLabel : 'More information',
|
|
21446
|
+
accessibilityRole: "button",
|
|
21447
|
+
testID: testID
|
|
21448
|
+
}, /*#__PURE__*/React__namespace.default.createElement(StyledRow$1, null, /*#__PURE__*/React__namespace.default.createElement(Icon, {
|
|
21449
|
+
icon: "circle-info-outlined",
|
|
21450
|
+
size: "xsmall",
|
|
21451
|
+
intent: disabled ? 'disabled-text' : 'muted'
|
|
21452
|
+
}), !!label && /*#__PURE__*/React__namespace.default.createElement(Typography.Caption, {
|
|
21453
|
+
intent: disabled ? 'disabled' : 'muted'
|
|
21454
|
+
}, label)));
|
|
21455
|
+
};
|
|
21456
|
+
|
|
21457
|
+
var _excluded$t = ["label", "prefix", "suffix", "style", "textStyle", "testID", "accessibilityLabelledBy", "error", "required", "editable", "disabled", "loading", "maxLength", "hideCharacterCount", "helpText", "assistiveInfoConfig", "value", "defaultValue", "renderInputValue", "allowFontScaling", "variant", "pointerEvents"];
|
|
21420
21458
|
var getState$3 = function getState(_ref) {
|
|
21421
21459
|
var disabled = _ref.disabled,
|
|
21422
21460
|
error = _ref.error,
|
|
@@ -21525,6 +21563,7 @@ var TextInput = /*#__PURE__*/React.forwardRef(function (_ref8, ref) {
|
|
|
21525
21563
|
_ref8$hideCharacterCo = _ref8.hideCharacterCount,
|
|
21526
21564
|
hideCharacterCount = _ref8$hideCharacterCo === void 0 ? false : _ref8$hideCharacterCo,
|
|
21527
21565
|
helpText = _ref8.helpText,
|
|
21566
|
+
assistiveInfoConfig = _ref8.assistiveInfoConfig,
|
|
21528
21567
|
value = _ref8.value,
|
|
21529
21568
|
defaultValue = _ref8.defaultValue,
|
|
21530
21569
|
renderInputValue = _ref8.renderInputValue,
|
|
@@ -21532,6 +21571,7 @@ var TextInput = /*#__PURE__*/React.forwardRef(function (_ref8, ref) {
|
|
|
21532
21571
|
allowFontScaling = _ref8$allowFontScalin === void 0 ? false : _ref8$allowFontScalin,
|
|
21533
21572
|
_ref8$variant = _ref8.variant,
|
|
21534
21573
|
variant = _ref8$variant === void 0 ? 'text' : _ref8$variant,
|
|
21574
|
+
pointerEvents = _ref8.pointerEvents,
|
|
21535
21575
|
nativeProps = _objectWithoutProperties(_ref8, _excluded$t);
|
|
21536
21576
|
var displayText = getDisplayText(value, defaultValue);
|
|
21537
21577
|
var isEmptyValue = displayText.length === 0;
|
|
@@ -21663,17 +21703,20 @@ var TextInput = /*#__PURE__*/React.forwardRef(function (_ref8, ref) {
|
|
|
21663
21703
|
defaultValue: defaultValue,
|
|
21664
21704
|
placeholder: isFocused || label === undefined ? nativeProps.placeholder : EMPTY_PLACEHOLDER_VALUE
|
|
21665
21705
|
});
|
|
21706
|
+
var isPressable = state !== 'disabled' && state !== 'readonly' && !loading;
|
|
21666
21707
|
return /*#__PURE__*/React__namespace.default.createElement(StyledContainer$7, {
|
|
21667
21708
|
style: styleWithoutBackgroundColor,
|
|
21668
|
-
pointerEvents: state === 'disabled' || state === 'readonly' || loading ? 'none' : 'auto',
|
|
21669
21709
|
testID: testID
|
|
21670
21710
|
}, /*#__PURE__*/React__namespace.default.createElement(reactNative.Pressable, {
|
|
21671
|
-
onPress: focusInnerTextInput,
|
|
21711
|
+
onPress: isPressable ? focusInnerTextInput : undefined,
|
|
21672
21712
|
accessible: false,
|
|
21673
|
-
importantForAccessibility: "no"
|
|
21713
|
+
importantForAccessibility: "no",
|
|
21714
|
+
disabled: !isPressable,
|
|
21715
|
+
pointerEvents: pointerEvents
|
|
21674
21716
|
}, /*#__PURE__*/React__namespace.default.createElement(StyledTextInputContainer, {
|
|
21675
21717
|
themeVariant: variant,
|
|
21676
|
-
themeState: state
|
|
21718
|
+
themeState: state,
|
|
21719
|
+
pointerEvents: isPressable ? 'auto' : 'none'
|
|
21677
21720
|
}, /*#__PURE__*/React__namespace.default.createElement(StyledBorderBackDrop, {
|
|
21678
21721
|
themeFocused: isFocused,
|
|
21679
21722
|
themeState: state,
|
|
@@ -21738,7 +21781,12 @@ var TextInput = /*#__PURE__*/React.forwardRef(function (_ref8, ref) {
|
|
|
21738
21781
|
state: state,
|
|
21739
21782
|
loading: loading,
|
|
21740
21783
|
suffix: suffix
|
|
21741
|
-
}))),
|
|
21784
|
+
}))), !!assistiveInfoConfig && /*#__PURE__*/React__namespace.default.createElement(AssistiveInfoTrigger, {
|
|
21785
|
+
onPress: assistiveInfoConfig.onPress,
|
|
21786
|
+
label: assistiveInfoConfig.label,
|
|
21787
|
+
testID: assistiveInfoConfig.testID,
|
|
21788
|
+
disabled: !isPressable
|
|
21789
|
+
}), /*#__PURE__*/React__namespace.default.createElement(StyledErrorAndHelpTextContainer, null, /*#__PURE__*/React__namespace.default.createElement(StyledErrorAndMaxLengthContainer, null, renderErrorOrHelpText({
|
|
21742
21790
|
error: error,
|
|
21743
21791
|
helpText: helpText
|
|
21744
21792
|
}), renderMaxLengthMessage({
|
|
@@ -27874,7 +27922,8 @@ function MultiSelect(_ref) {
|
|
|
27874
27922
|
_ref$supportedOrienta = _ref.supportedOrientations,
|
|
27875
27923
|
supportedOrientations = _ref$supportedOrienta === void 0 ? ['portrait'] : _ref$supportedOrienta,
|
|
27876
27924
|
_ref$bottomSheetConfi = _ref.bottomSheetConfig,
|
|
27877
|
-
bottomSheetConfig = _ref$bottomSheetConfi === void 0 ? {} : _ref$bottomSheetConfi
|
|
27925
|
+
bottomSheetConfig = _ref$bottomSheetConfi === void 0 ? {} : _ref$bottomSheetConfi,
|
|
27926
|
+
assistiveInfoConfig = _ref.assistiveInfoConfig;
|
|
27878
27927
|
var _useKeyboard = useKeyboard(),
|
|
27879
27928
|
isKeyboardVisible = _useKeyboard.isKeyboardVisible,
|
|
27880
27929
|
keyboardHeight = _useKeyboard.keyboardHeight;
|
|
@@ -27912,9 +27961,7 @@ function MultiSelect(_ref) {
|
|
|
27912
27961
|
}, /*#__PURE__*/React__namespace.default.createElement(reactNative.TouchableOpacity, {
|
|
27913
27962
|
onPress: onPress,
|
|
27914
27963
|
testID: "multi-select-touchable-opacity"
|
|
27915
|
-
}, /*#__PURE__*/React__namespace.default.createElement(reactNative.View, {
|
|
27916
|
-
pointerEvents: "none"
|
|
27917
|
-
}, /*#__PURE__*/React__namespace.default.createElement(TextInput, _extends$1({}, inputProps, {
|
|
27964
|
+
}, /*#__PURE__*/React__namespace.default.createElement(reactNative.View, null, /*#__PURE__*/React__namespace.default.createElement(TextInput, _extends$1({}, inputProps, {
|
|
27918
27965
|
label: label,
|
|
27919
27966
|
value: renderSelectedValue ? rawValue : displayedValue,
|
|
27920
27967
|
suffix: selectSuffix,
|
|
@@ -27926,6 +27973,7 @@ function MultiSelect(_ref) {
|
|
|
27926
27973
|
pointerEvents: "none",
|
|
27927
27974
|
style: style,
|
|
27928
27975
|
testID: testID,
|
|
27976
|
+
assistiveInfoConfig: assistiveInfoConfig,
|
|
27929
27977
|
renderInputValue: renderSelectedValue !== undefined && (rawValue === null || rawValue === void 0 ? void 0 : rawValue.length) > 0 ? function (nativeInputProps) {
|
|
27930
27978
|
return renderSelectedValue(value, nativeInputProps);
|
|
27931
27979
|
} : undefined
|
|
@@ -28088,7 +28136,8 @@ var SingleSelect = function SingleSelect(_ref) {
|
|
|
28088
28136
|
_ref$supportedOrienta = _ref.supportedOrientations,
|
|
28089
28137
|
supportedOrientations = _ref$supportedOrienta === void 0 ? ['portrait'] : _ref$supportedOrienta,
|
|
28090
28138
|
_ref$bottomSheetConfi = _ref.bottomSheetConfig,
|
|
28091
|
-
bottomSheetConfig = _ref$bottomSheetConfi === void 0 ? {} : _ref$bottomSheetConfi
|
|
28139
|
+
bottomSheetConfig = _ref$bottomSheetConfi === void 0 ? {} : _ref$bottomSheetConfi,
|
|
28140
|
+
assistiveInfoConfig = _ref.assistiveInfoConfig;
|
|
28092
28141
|
var _useKeyboard = useKeyboard(),
|
|
28093
28142
|
isKeyboardVisible = _useKeyboard.isKeyboardVisible,
|
|
28094
28143
|
keyboardHeight = _useKeyboard.keyboardHeight;
|
|
@@ -28119,9 +28168,7 @@ var SingleSelect = function SingleSelect(_ref) {
|
|
|
28119
28168
|
}, /*#__PURE__*/React__namespace.default.createElement(reactNative.TouchableOpacity, {
|
|
28120
28169
|
onPress: onPress,
|
|
28121
28170
|
testID: "single-select-touchable-opacity"
|
|
28122
|
-
}, /*#__PURE__*/React__namespace.default.createElement(reactNative.View, {
|
|
28123
|
-
pointerEvents: "none"
|
|
28124
|
-
}, /*#__PURE__*/React__namespace.default.createElement(TextInput, _extends$1({}, inputProps, {
|
|
28171
|
+
}, /*#__PURE__*/React__namespace.default.createElement(reactNative.View, null, /*#__PURE__*/React__namespace.default.createElement(TextInput, _extends$1({}, inputProps, {
|
|
28125
28172
|
label: label,
|
|
28126
28173
|
value: renderSelectedValue ? rawValue : displayedValue,
|
|
28127
28174
|
suffix: selectSuffix,
|
|
@@ -28130,9 +28177,10 @@ var SingleSelect = function SingleSelect(_ref) {
|
|
|
28130
28177
|
editable: editable,
|
|
28131
28178
|
disabled: disabled,
|
|
28132
28179
|
required: required,
|
|
28133
|
-
pointerEvents: "none",
|
|
28134
28180
|
style: style,
|
|
28135
28181
|
testID: testID,
|
|
28182
|
+
pointerEvents: "none",
|
|
28183
|
+
assistiveInfoConfig: assistiveInfoConfig,
|
|
28136
28184
|
renderInputValue: renderSelectedValue !== undefined && !!rawValue ? function (nativeInputProps) {
|
|
28137
28185
|
return renderSelectedValue(value, nativeInputProps);
|
|
28138
28186
|
} : undefined
|
package/package.json
CHANGED
|
@@ -75,6 +75,7 @@ function MultiSelect<V, T extends SelectOptionType<V>>({
|
|
|
75
75
|
value,
|
|
76
76
|
supportedOrientations = ['portrait'],
|
|
77
77
|
bottomSheetConfig = {},
|
|
78
|
+
assistiveInfoConfig,
|
|
78
79
|
}: MultiSelectProps<V, T>) {
|
|
79
80
|
const { isKeyboardVisible, keyboardHeight } = useKeyboard();
|
|
80
81
|
const [open, setOpen] = useState(false);
|
|
@@ -116,7 +117,7 @@ function MultiSelect<V, T extends SelectOptionType<V>>({
|
|
|
116
117
|
{
|
|
117
118
|
// prevent users from focusing TextInput
|
|
118
119
|
}
|
|
119
|
-
<View
|
|
120
|
+
<View>
|
|
120
121
|
<TextInput
|
|
121
122
|
{...inputProps}
|
|
122
123
|
label={label}
|
|
@@ -130,6 +131,7 @@ function MultiSelect<V, T extends SelectOptionType<V>>({
|
|
|
130
131
|
pointerEvents="none"
|
|
131
132
|
style={style}
|
|
132
133
|
testID={testID}
|
|
134
|
+
assistiveInfoConfig={assistiveInfoConfig}
|
|
133
135
|
renderInputValue={
|
|
134
136
|
renderSelectedValue !== undefined && rawValue?.length > 0
|
|
135
137
|
? (nativeInputProps) =>
|
|
@@ -59,6 +59,7 @@ const SingleSelect = <V, T extends SelectOptionType<V>>({
|
|
|
59
59
|
value,
|
|
60
60
|
supportedOrientations = ['portrait'],
|
|
61
61
|
bottomSheetConfig = {},
|
|
62
|
+
assistiveInfoConfig,
|
|
62
63
|
}: SingleSelectProps<V, T>) => {
|
|
63
64
|
const { isKeyboardVisible, keyboardHeight } = useKeyboard();
|
|
64
65
|
const [open, setOpen] = useState(false);
|
|
@@ -99,7 +100,7 @@ const SingleSelect = <V, T extends SelectOptionType<V>>({
|
|
|
99
100
|
{
|
|
100
101
|
// prevent users from focusing TextInput
|
|
101
102
|
}
|
|
102
|
-
<View
|
|
103
|
+
<View>
|
|
103
104
|
<TextInput
|
|
104
105
|
{...inputProps}
|
|
105
106
|
label={label}
|
|
@@ -110,9 +111,10 @@ const SingleSelect = <V, T extends SelectOptionType<V>>({
|
|
|
110
111
|
editable={editable}
|
|
111
112
|
disabled={disabled}
|
|
112
113
|
required={required}
|
|
113
|
-
pointerEvents="none"
|
|
114
114
|
style={style}
|
|
115
115
|
testID={testID}
|
|
116
|
+
pointerEvents="none"
|
|
117
|
+
assistiveInfoConfig={assistiveInfoConfig}
|
|
116
118
|
renderInputValue={
|
|
117
119
|
renderSelectedValue !== undefined && !!rawValue
|
|
118
120
|
? (nativeInputProps) =>
|
|
@@ -102,4 +102,13 @@ export interface SelectProps<V, T extends SelectOptionType<V>>
|
|
|
102
102
|
variant?: BottomSheetProps['variant'];
|
|
103
103
|
header?: BottomSheetProps['header'];
|
|
104
104
|
};
|
|
105
|
+
/**
|
|
106
|
+
* Optional assistive info trigger config. When provided, an info icon is rendered
|
|
107
|
+
* below the field. `onPress` is called when the trigger is tapped.
|
|
108
|
+
*/
|
|
109
|
+
assistiveInfoConfig?: {
|
|
110
|
+
onPress: () => void;
|
|
111
|
+
label?: string;
|
|
112
|
+
testID?: string;
|
|
113
|
+
};
|
|
105
114
|
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { TouchableOpacity, View } from 'react-native';
|
|
2
|
+
import styled from '@emotion/native';
|
|
3
|
+
|
|
4
|
+
export const StyledTouchable = styled(TouchableOpacity)(() => ({
|
|
5
|
+
alignSelf: 'flex-start',
|
|
6
|
+
}));
|
|
7
|
+
|
|
8
|
+
export const StyledRow = styled(View)(({ theme }) => ({
|
|
9
|
+
flexDirection: 'row',
|
|
10
|
+
alignItems: 'center',
|
|
11
|
+
padding: theme.__hd__.textInput.space.assistiveInfoTriggerPadding,
|
|
12
|
+
gap: theme.__hd__.textInput.space.assistiveInfoTriggerGap,
|
|
13
|
+
}));
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import Icon from '../../Icon';
|
|
3
|
+
import Typography from '../../Typography';
|
|
4
|
+
import { StyledTouchable, StyledRow } from './StyledAssistiveInfoTrigger';
|
|
5
|
+
|
|
6
|
+
export interface AssistiveInfoTriggerProps {
|
|
7
|
+
onPress: () => void;
|
|
8
|
+
label?: string;
|
|
9
|
+
disabled?: boolean;
|
|
10
|
+
testID?: string;
|
|
11
|
+
accessibilityLabel?: string;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const AssistiveInfoTrigger = ({
|
|
15
|
+
accessibilityLabel,
|
|
16
|
+
disabled,
|
|
17
|
+
label,
|
|
18
|
+
onPress,
|
|
19
|
+
testID,
|
|
20
|
+
}: AssistiveInfoTriggerProps) => {
|
|
21
|
+
return (
|
|
22
|
+
<StyledTouchable
|
|
23
|
+
onPress={onPress}
|
|
24
|
+
disabled={disabled}
|
|
25
|
+
accessibilityLabel={accessibilityLabel ?? 'More information'}
|
|
26
|
+
accessibilityRole="button"
|
|
27
|
+
testID={testID}
|
|
28
|
+
>
|
|
29
|
+
<StyledRow>
|
|
30
|
+
<Icon
|
|
31
|
+
icon="circle-info-outlined"
|
|
32
|
+
size="xsmall"
|
|
33
|
+
intent={disabled ? 'disabled-text' : 'muted'}
|
|
34
|
+
/>
|
|
35
|
+
{!!label && (
|
|
36
|
+
<Typography.Caption intent={disabled ? 'disabled' : 'muted'}>
|
|
37
|
+
{label}
|
|
38
|
+
</Typography.Caption>
|
|
39
|
+
)}
|
|
40
|
+
</StyledRow>
|
|
41
|
+
</StyledTouchable>
|
|
42
|
+
);
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
export default AssistiveInfoTrigger;
|
|
@@ -34,6 +34,7 @@ import {
|
|
|
34
34
|
StyledHelperText,
|
|
35
35
|
} from './StyledTextInput';
|
|
36
36
|
import Icon from '../Icon';
|
|
37
|
+
import AssistiveInfoTrigger from './AssistiveInfoTrigger';
|
|
37
38
|
import type { Theme } from '../../theme';
|
|
38
39
|
import { useTheme } from '../../theme';
|
|
39
40
|
import type { State } from './StyledTextInput';
|
|
@@ -141,6 +142,15 @@ export interface TextInputProps extends NativeTextInputProps {
|
|
|
141
142
|
* Component variant.
|
|
142
143
|
*/
|
|
143
144
|
variant?: TextInputVariant;
|
|
145
|
+
/**
|
|
146
|
+
* Optional assistive info trigger config. When provided, an info icon is rendered
|
|
147
|
+
* below the field. `onPress` is called when the trigger is tapped.
|
|
148
|
+
*/
|
|
149
|
+
assistiveInfoConfig?: {
|
|
150
|
+
onPress: () => void;
|
|
151
|
+
label?: string;
|
|
152
|
+
testID?: string;
|
|
153
|
+
};
|
|
144
154
|
}
|
|
145
155
|
|
|
146
156
|
export const getState = ({
|
|
@@ -318,11 +328,13 @@ const TextInput = forwardRef<TextInputHandles, TextInputProps>(
|
|
|
318
328
|
maxLength,
|
|
319
329
|
hideCharacterCount = false,
|
|
320
330
|
helpText,
|
|
331
|
+
assistiveInfoConfig,
|
|
321
332
|
value,
|
|
322
333
|
defaultValue,
|
|
323
334
|
renderInputValue,
|
|
324
335
|
allowFontScaling = false,
|
|
325
336
|
variant = 'text',
|
|
337
|
+
pointerEvents,
|
|
326
338
|
...nativeProps
|
|
327
339
|
}: TextInputProps,
|
|
328
340
|
ref?: React.Ref<TextInputHandles>
|
|
@@ -464,22 +476,23 @@ const TextInput = forwardRef<TextInputHandles, TextInputProps>(
|
|
|
464
476
|
: EMPTY_PLACEHOLDER_VALUE,
|
|
465
477
|
};
|
|
466
478
|
|
|
479
|
+
const isPressable =
|
|
480
|
+
state !== 'disabled' && state !== 'readonly' && !loading;
|
|
481
|
+
|
|
467
482
|
return (
|
|
468
|
-
<StyledContainer
|
|
469
|
-
style={styleWithoutBackgroundColor}
|
|
470
|
-
pointerEvents={
|
|
471
|
-
state === 'disabled' || state === 'readonly' || loading
|
|
472
|
-
? 'none'
|
|
473
|
-
: 'auto'
|
|
474
|
-
}
|
|
475
|
-
testID={testID}
|
|
476
|
-
>
|
|
483
|
+
<StyledContainer style={styleWithoutBackgroundColor} testID={testID}>
|
|
477
484
|
<Pressable
|
|
478
|
-
onPress={focusInnerTextInput}
|
|
485
|
+
onPress={isPressable ? focusInnerTextInput : undefined}
|
|
479
486
|
accessible={false}
|
|
480
487
|
importantForAccessibility="no"
|
|
488
|
+
disabled={!isPressable}
|
|
489
|
+
pointerEvents={pointerEvents}
|
|
481
490
|
>
|
|
482
|
-
<StyledTextInputContainer
|
|
491
|
+
<StyledTextInputContainer
|
|
492
|
+
themeVariant={variant}
|
|
493
|
+
themeState={state}
|
|
494
|
+
pointerEvents={isPressable ? 'auto' : 'none'}
|
|
495
|
+
>
|
|
483
496
|
<StyledBorderBackDrop
|
|
484
497
|
themeFocused={isFocused}
|
|
485
498
|
themeState={state}
|
|
@@ -574,6 +587,14 @@ const TextInput = forwardRef<TextInputHandles, TextInputProps>(
|
|
|
574
587
|
{renderSuffix({ state, loading, suffix })}
|
|
575
588
|
</StyledTextInputContainer>
|
|
576
589
|
</Pressable>
|
|
590
|
+
{!!assistiveInfoConfig && (
|
|
591
|
+
<AssistiveInfoTrigger
|
|
592
|
+
onPress={assistiveInfoConfig.onPress}
|
|
593
|
+
label={assistiveInfoConfig.label}
|
|
594
|
+
testID={assistiveInfoConfig.testID}
|
|
595
|
+
disabled={!isPressable}
|
|
596
|
+
/>
|
|
597
|
+
)}
|
|
577
598
|
<StyledErrorAndHelpTextContainer>
|
|
578
599
|
<StyledErrorAndMaxLengthContainer>
|
|
579
600
|
{renderErrorOrHelpText({ error, helpText })}
|
|
@@ -72,6 +72,8 @@ const getTextInputTheme = (theme: GlobalTheme) => {
|
|
|
72
72
|
containerMarginTop: theme.space.small,
|
|
73
73
|
labelInsideTextInputMarginTop: 0,
|
|
74
74
|
errorAndHelpTextContainerPaddingTop: theme.space.xxsmall,
|
|
75
|
+
assistiveInfoTriggerPadding: theme.space.xsmall,
|
|
76
|
+
assistiveInfoTriggerGap: theme.space.xsmall,
|
|
75
77
|
inputAndLabelContainerPaddingTop: theme.lineHeights.medium,
|
|
76
78
|
labelFocusedTranslateY: theme.space.xsmall * 2,
|
|
77
79
|
textareaLabelIdleTranslateY: theme.space.large,
|
|
@@ -26,5 +26,5 @@ export interface MultiSelectProps<V, T extends SelectOptionType<V> = SelectOptio
|
|
|
26
26
|
*/
|
|
27
27
|
supportedOrientations?: ('portrait' | 'landscape')[];
|
|
28
28
|
}
|
|
29
|
-
declare function MultiSelect<V, T extends SelectOptionType<V>>({ footerLabel, label, loading, inputProps, onConfirm, onDismiss, onEndReached, onQueryChange, options, renderOption, renderSelectedValue, query, error, editable, disabled, required, style, testID, value, supportedOrientations, bottomSheetConfig, }: MultiSelectProps<V, T>): React.JSX.Element;
|
|
29
|
+
declare function MultiSelect<V, T extends SelectOptionType<V>>({ footerLabel, label, loading, inputProps, onConfirm, onDismiss, onEndReached, onQueryChange, options, renderOption, renderSelectedValue, query, error, editable, disabled, required, style, testID, value, supportedOrientations, bottomSheetConfig, assistiveInfoConfig, }: MultiSelectProps<V, T>): React.JSX.Element;
|
|
30
30
|
export default MultiSelect;
|
|
@@ -19,5 +19,5 @@ export interface SingleSelectProps<V, T extends SelectOptionType<V> = SelectOpti
|
|
|
19
19
|
*/
|
|
20
20
|
supportedOrientations?: ('portrait' | 'landscape')[];
|
|
21
21
|
}
|
|
22
|
-
declare const SingleSelect: <V, T extends SelectOptionType<V>>({ label, loading, inputProps, onConfirm, onDismiss, onEndReached, onQueryChange, options, renderOption, renderSelectedValue, query, error, editable, disabled, required, style, testID, value, supportedOrientations, bottomSheetConfig, }: SingleSelectProps<V, T>) => React.JSX.Element;
|
|
22
|
+
declare const SingleSelect: <V, T extends SelectOptionType<V>>({ label, loading, inputProps, onConfirm, onDismiss, onEndReached, onQueryChange, options, renderOption, renderSelectedValue, query, error, editable, disabled, required, style, testID, value, supportedOrientations, bottomSheetConfig, assistiveInfoConfig, }: SingleSelectProps<V, T>) => React.JSX.Element;
|
|
23
23
|
export default SingleSelect;
|
|
@@ -81,4 +81,13 @@ export interface SelectProps<V, T extends SelectOptionType<V>> extends Pick<Text
|
|
|
81
81
|
variant?: BottomSheetProps['variant'];
|
|
82
82
|
header?: BottomSheetProps['header'];
|
|
83
83
|
};
|
|
84
|
+
/**
|
|
85
|
+
* Optional assistive info trigger config. When provided, an info icon is rendered
|
|
86
|
+
* below the field. `onPress` is called when the trigger is tapped.
|
|
87
|
+
*/
|
|
88
|
+
assistiveInfoConfig?: {
|
|
89
|
+
onPress: () => void;
|
|
90
|
+
label?: string;
|
|
91
|
+
testID?: string;
|
|
92
|
+
};
|
|
84
93
|
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { View } from 'react-native';
|
|
2
|
+
export declare const StyledTouchable: import("@emotion/native").StyledComponent<import("react-native").TouchableOpacityProps & import("react").RefAttributes<View> & {
|
|
3
|
+
theme?: import("@emotion/react").Theme;
|
|
4
|
+
as?: React.ElementType;
|
|
5
|
+
}, {}, {}>;
|
|
6
|
+
export declare const StyledRow: import("@emotion/native").StyledComponent<import("react-native").ViewProps & {
|
|
7
|
+
theme?: import("@emotion/react").Theme;
|
|
8
|
+
as?: React.ElementType;
|
|
9
|
+
}, {}, {
|
|
10
|
+
ref?: import("react").Ref<View> | undefined;
|
|
11
|
+
}>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface AssistiveInfoTriggerProps {
|
|
3
|
+
onPress: () => void;
|
|
4
|
+
label?: string;
|
|
5
|
+
disabled?: boolean;
|
|
6
|
+
testID?: string;
|
|
7
|
+
accessibilityLabel?: string;
|
|
8
|
+
}
|
|
9
|
+
declare const AssistiveInfoTrigger: ({ accessibilityLabel, disabled, label, onPress, testID, }: AssistiveInfoTriggerProps) => React.JSX.Element;
|
|
10
|
+
export default AssistiveInfoTrigger;
|
|
@@ -94,6 +94,15 @@ export interface TextInputProps extends NativeTextInputProps {
|
|
|
94
94
|
* Component variant.
|
|
95
95
|
*/
|
|
96
96
|
variant?: TextInputVariant;
|
|
97
|
+
/**
|
|
98
|
+
* Optional assistive info trigger config. When provided, an info icon is rendered
|
|
99
|
+
* below the field. `onPress` is called when the trigger is tapped.
|
|
100
|
+
*/
|
|
101
|
+
assistiveInfoConfig?: {
|
|
102
|
+
onPress: () => void;
|
|
103
|
+
label?: string;
|
|
104
|
+
testID?: string;
|
|
105
|
+
};
|
|
97
106
|
}
|
|
98
107
|
export declare const getState: ({ disabled, error, editable, loading, isEmptyValue, }: {
|
|
99
108
|
disabled?: boolean;
|
|
@@ -69,6 +69,8 @@ declare const getTextInputTheme: (theme: GlobalTheme) => {
|
|
|
69
69
|
containerMarginTop: number;
|
|
70
70
|
labelInsideTextInputMarginTop: number;
|
|
71
71
|
errorAndHelpTextContainerPaddingTop: number;
|
|
72
|
+
assistiveInfoTriggerPadding: number;
|
|
73
|
+
assistiveInfoTriggerGap: number;
|
|
72
74
|
inputAndLabelContainerPaddingTop: number;
|
|
73
75
|
labelFocusedTranslateY: number;
|
|
74
76
|
textareaLabelIdleTranslateY: number;
|