@ecohouse/ui 0.1.28 → 0.1.29
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 +14 -13
- package/dist/index.cjs +281 -79
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +26 -1
- package/dist/index.d.ts +26 -1
- package/dist/index.js +283 -82
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/VerificationCodeInput/VerificationCodeInput.stories.tsx +112 -0
- package/src/components/VerificationCodeInput/VerificationCodeInput.test.ts +42 -0
- package/src/components/VerificationCodeInput/VerificationCodeInput.tsx +255 -0
- package/src/components/VerificationCodeInput/VerificationCodeInput.utils.ts +34 -0
- package/src/components/VerificationCodeInput/index.ts +5 -0
- package/src/components/index.ts +6 -0
- package/src/index.ts +3 -0
package/dist/index.cjs
CHANGED
|
@@ -3871,6 +3871,207 @@ var styles13 = reactNative.StyleSheet.create({
|
|
|
3871
3871
|
...inputTypography.hint
|
|
3872
3872
|
}
|
|
3873
3873
|
});
|
|
3874
|
+
|
|
3875
|
+
// src/components/VerificationCodeInput/VerificationCodeInput.utils.ts
|
|
3876
|
+
function normalizeVerificationCode(value, length) {
|
|
3877
|
+
return value.replace(/\D/g, "").slice(0, Math.max(1, length));
|
|
3878
|
+
}
|
|
3879
|
+
function updateVerificationCode(currentCode, index, input, length) {
|
|
3880
|
+
const safeLength = Math.max(1, length);
|
|
3881
|
+
const safeIndex = Math.min(Math.max(0, index), safeLength - 1);
|
|
3882
|
+
const current = normalizeVerificationCode(currentCode, safeLength);
|
|
3883
|
+
const insertedDigits = normalizeVerificationCode(input, safeLength - safeIndex);
|
|
3884
|
+
if (!insertedDigits) {
|
|
3885
|
+
return {
|
|
3886
|
+
code: `${current.slice(0, safeIndex)}${current.slice(safeIndex + 1)}`,
|
|
3887
|
+
nextFocus: safeIndex
|
|
3888
|
+
};
|
|
3889
|
+
}
|
|
3890
|
+
return {
|
|
3891
|
+
code: `${current.slice(0, safeIndex)}${insertedDigits}${current.slice(
|
|
3892
|
+
safeIndex + insertedDigits.length
|
|
3893
|
+
)}`.slice(0, safeLength),
|
|
3894
|
+
nextFocus: Math.min(safeIndex + insertedDigits.length, safeLength - 1)
|
|
3895
|
+
};
|
|
3896
|
+
}
|
|
3897
|
+
var DEFAULT_LENGTH = 6;
|
|
3898
|
+
var DESKTOP_CELL_WIDTH = 54;
|
|
3899
|
+
var MOBILE_CELL_WIDTH = 50;
|
|
3900
|
+
var CELL_HEIGHT = 68;
|
|
3901
|
+
var DESKTOP_GAP = 12;
|
|
3902
|
+
var MOBILE_GAP = 4;
|
|
3903
|
+
var MOBILE_BREAKPOINT = 640;
|
|
3904
|
+
var VerificationCodeInput = react.forwardRef(function VerificationCodeInput2({
|
|
3905
|
+
length = DEFAULT_LENGTH,
|
|
3906
|
+
value,
|
|
3907
|
+
defaultValue = "",
|
|
3908
|
+
onValueChange,
|
|
3909
|
+
onComplete,
|
|
3910
|
+
onSubmit,
|
|
3911
|
+
error = false,
|
|
3912
|
+
disabled = false,
|
|
3913
|
+
autoFocus = false,
|
|
3914
|
+
getDigitAccessibilityLabel,
|
|
3915
|
+
style,
|
|
3916
|
+
inputStyle,
|
|
3917
|
+
className,
|
|
3918
|
+
...viewProps
|
|
3919
|
+
}, forwardedRef) {
|
|
3920
|
+
const safeLength = Math.max(1, Math.floor(length));
|
|
3921
|
+
const isControlled = typeof value === "string";
|
|
3922
|
+
const [uncontrolledValue, setUncontrolledValue] = react.useState(
|
|
3923
|
+
() => normalizeVerificationCode(defaultValue, safeLength)
|
|
3924
|
+
);
|
|
3925
|
+
const [focusedIndex, setFocusedIndex] = react.useState(null);
|
|
3926
|
+
const { width: viewportWidth } = reactNative.useWindowDimensions();
|
|
3927
|
+
const rootRef = react.useRef(null);
|
|
3928
|
+
const inputRefs = react.useRef([]);
|
|
3929
|
+
const currentCode = normalizeVerificationCode(
|
|
3930
|
+
isControlled ? value : uncontrolledValue,
|
|
3931
|
+
safeLength
|
|
3932
|
+
);
|
|
3933
|
+
useApplyWebClassName(rootRef, className);
|
|
3934
|
+
const focus = react.useCallback(
|
|
3935
|
+
(index = 0) => {
|
|
3936
|
+
const safeIndex = Math.min(Math.max(0, index), safeLength - 1);
|
|
3937
|
+
inputRefs.current[safeIndex]?.focus();
|
|
3938
|
+
},
|
|
3939
|
+
[safeLength]
|
|
3940
|
+
);
|
|
3941
|
+
const commit = react.useCallback(
|
|
3942
|
+
(nextValue) => {
|
|
3943
|
+
const normalized = normalizeVerificationCode(nextValue, safeLength);
|
|
3944
|
+
if (!isControlled) {
|
|
3945
|
+
setUncontrolledValue(normalized);
|
|
3946
|
+
}
|
|
3947
|
+
onValueChange?.(normalized);
|
|
3948
|
+
if (normalized.length === safeLength) {
|
|
3949
|
+
onComplete?.(normalized);
|
|
3950
|
+
}
|
|
3951
|
+
},
|
|
3952
|
+
[isControlled, onComplete, onValueChange, safeLength]
|
|
3953
|
+
);
|
|
3954
|
+
react.useImperativeHandle(
|
|
3955
|
+
forwardedRef,
|
|
3956
|
+
() => ({
|
|
3957
|
+
clear: () => {
|
|
3958
|
+
commit("");
|
|
3959
|
+
focus(0);
|
|
3960
|
+
},
|
|
3961
|
+
focus
|
|
3962
|
+
}),
|
|
3963
|
+
[commit, focus]
|
|
3964
|
+
);
|
|
3965
|
+
const handleChange = (index, input) => {
|
|
3966
|
+
const update = updateVerificationCode(currentCode, index, input, safeLength);
|
|
3967
|
+
commit(update.code);
|
|
3968
|
+
focus(update.nextFocus);
|
|
3969
|
+
};
|
|
3970
|
+
const handleKeyPress = (index, event) => {
|
|
3971
|
+
const key = event.nativeEvent.key;
|
|
3972
|
+
if (key === "Backspace" && !currentCode[index] && index > 0) {
|
|
3973
|
+
const update = updateVerificationCode(currentCode, index - 1, "", safeLength);
|
|
3974
|
+
commit(update.code);
|
|
3975
|
+
focus(index - 1);
|
|
3976
|
+
return;
|
|
3977
|
+
}
|
|
3978
|
+
if (key === "ArrowLeft" && index > 0) {
|
|
3979
|
+
focus(index - 1);
|
|
3980
|
+
}
|
|
3981
|
+
if (key === "ArrowRight" && index < safeLength - 1) {
|
|
3982
|
+
focus(index + 1);
|
|
3983
|
+
}
|
|
3984
|
+
};
|
|
3985
|
+
const mobile = viewportWidth < MOBILE_BREAKPOINT;
|
|
3986
|
+
const cellWidth = mobile ? MOBILE_CELL_WIDTH : DESKTOP_CELL_WIDTH;
|
|
3987
|
+
const cellGap = mobile ? MOBILE_GAP : DESKTOP_GAP;
|
|
3988
|
+
const rootWidth = cellWidth * safeLength + cellGap * Math.max(0, safeLength - 1);
|
|
3989
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
3990
|
+
reactNative.View,
|
|
3991
|
+
{
|
|
3992
|
+
...viewProps,
|
|
3993
|
+
ref: rootRef,
|
|
3994
|
+
style: [
|
|
3995
|
+
styles14.root,
|
|
3996
|
+
{ width: rootWidth, maxWidth: "100%", gap: cellGap },
|
|
3997
|
+
disabled && styles14.disabled,
|
|
3998
|
+
style
|
|
3999
|
+
],
|
|
4000
|
+
children: Array.from({ length: safeLength }, (_, index) => {
|
|
4001
|
+
const active = focusedIndex === index;
|
|
4002
|
+
const borderColor = error ? colors.redHover : active ? colors.primary : colors.grey600;
|
|
4003
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
4004
|
+
reactNative.TextInput,
|
|
4005
|
+
{
|
|
4006
|
+
ref: (element) => {
|
|
4007
|
+
inputRefs.current[index] = element;
|
|
4008
|
+
},
|
|
4009
|
+
accessibilityLabel: getDigitAccessibilityLabel?.(index) ?? `Verification code digit ${index + 1}`,
|
|
4010
|
+
accessibilityState: { disabled },
|
|
4011
|
+
autoComplete: index === 0 ? "one-time-code" : "off",
|
|
4012
|
+
autoFocus: autoFocus && index === 0,
|
|
4013
|
+
caretHidden: reactNative.Platform.OS !== "web",
|
|
4014
|
+
editable: !disabled,
|
|
4015
|
+
inputMode: "numeric",
|
|
4016
|
+
keyboardType: "number-pad",
|
|
4017
|
+
maxLength: safeLength,
|
|
4018
|
+
onBlur: () => setFocusedIndex((current) => current === index ? null : current),
|
|
4019
|
+
onChangeText: (text) => handleChange(index, text),
|
|
4020
|
+
onFocus: () => setFocusedIndex(index),
|
|
4021
|
+
onKeyPress: (event) => handleKeyPress(index, event),
|
|
4022
|
+
onSubmitEditing: () => onSubmit?.(currentCode),
|
|
4023
|
+
selectTextOnFocus: true,
|
|
4024
|
+
style: [
|
|
4025
|
+
styles14.cell,
|
|
4026
|
+
{
|
|
4027
|
+
width: cellWidth,
|
|
4028
|
+
height: CELL_HEIGHT,
|
|
4029
|
+
borderColor,
|
|
4030
|
+
color: error ? colors.red : colors.white
|
|
4031
|
+
},
|
|
4032
|
+
reactNative.Platform.OS === "web" ? styles14.cellWeb : null,
|
|
4033
|
+
reactNative.Platform.OS === "android" ? styles14.cellAndroid : null,
|
|
4034
|
+
inputStyle
|
|
4035
|
+
],
|
|
4036
|
+
value: currentCode[index] ?? ""
|
|
4037
|
+
},
|
|
4038
|
+
index
|
|
4039
|
+
);
|
|
4040
|
+
})
|
|
4041
|
+
}
|
|
4042
|
+
);
|
|
4043
|
+
});
|
|
4044
|
+
var styles14 = reactNative.StyleSheet.create({
|
|
4045
|
+
root: {
|
|
4046
|
+
minWidth: 0,
|
|
4047
|
+
alignSelf: "center",
|
|
4048
|
+
flexDirection: "row",
|
|
4049
|
+
justifyContent: "center"
|
|
4050
|
+
},
|
|
4051
|
+
disabled: {
|
|
4052
|
+
opacity: 0.6
|
|
4053
|
+
},
|
|
4054
|
+
cell: {
|
|
4055
|
+
minWidth: 0,
|
|
4056
|
+
flexGrow: 0,
|
|
4057
|
+
flexShrink: 0,
|
|
4058
|
+
borderWidth: 1,
|
|
4059
|
+
borderRadius: 16,
|
|
4060
|
+
padding: 0,
|
|
4061
|
+
margin: 0,
|
|
4062
|
+
textAlign: "center",
|
|
4063
|
+
fontFamily: fonts.sans,
|
|
4064
|
+
fontSize: 22,
|
|
4065
|
+
fontWeight: "600",
|
|
4066
|
+
lineHeight: 22
|
|
4067
|
+
},
|
|
4068
|
+
cellWeb: {
|
|
4069
|
+
outlineStyle: "none"
|
|
4070
|
+
},
|
|
4071
|
+
cellAndroid: {
|
|
4072
|
+
includeFontPadding: false
|
|
4073
|
+
}
|
|
4074
|
+
});
|
|
3874
4075
|
var DEFAULT_WIDTH3 = 308;
|
|
3875
4076
|
var TRIGGER_HEIGHT2 = 44;
|
|
3876
4077
|
var TRIGGER_RADIUS2 = 60;
|
|
@@ -3950,25 +4151,25 @@ function MultiValueChips({ options, disabled, onRemove }) {
|
|
|
3950
4151
|
const next = Math.ceil(event.nativeEvent.layout.width);
|
|
3951
4152
|
setEllipsisWidth((current) => current === next ? current : next);
|
|
3952
4153
|
};
|
|
3953
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style:
|
|
3954
|
-
/* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { pointerEvents: "none", style:
|
|
4154
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: styles15.multiValueRoot, children: [
|
|
4155
|
+
/* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { pointerEvents: "none", style: styles15.measureRow, children: [
|
|
3955
4156
|
options.map((option) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
3956
4157
|
reactNative.View,
|
|
3957
4158
|
{
|
|
3958
|
-
style:
|
|
4159
|
+
style: styles15.chip,
|
|
3959
4160
|
onLayout: (event) => handleChipLayout(option.value, event),
|
|
3960
4161
|
children: [
|
|
3961
|
-
/* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style:
|
|
3962
|
-
/* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style:
|
|
4162
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles15.chipLabel, numberOfLines: 1, children: option.label }),
|
|
4163
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles15.chipRemove, children: "\xD7" })
|
|
3963
4164
|
]
|
|
3964
4165
|
},
|
|
3965
4166
|
`measure-${option.value}`
|
|
3966
4167
|
)),
|
|
3967
|
-
/* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style:
|
|
4168
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles15.ellipsis, onLayout: handleEllipsisLayout, children: /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles15.ellipsisText, children: "..." }) })
|
|
3968
4169
|
] }),
|
|
3969
|
-
/* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style:
|
|
3970
|
-
visible.map((option) => /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style:
|
|
3971
|
-
/* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style:
|
|
4170
|
+
/* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: styles15.chipsRow, onLayout: handleContainerLayout, children: [
|
|
4171
|
+
visible.map((option) => /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: styles15.chip, children: [
|
|
4172
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles15.chipLabel, numberOfLines: 1, children: option.label }),
|
|
3972
4173
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3973
4174
|
reactNative.Pressable,
|
|
3974
4175
|
{
|
|
@@ -3980,11 +4181,11 @@ function MultiValueChips({ options, disabled, onRemove }) {
|
|
|
3980
4181
|
hitSlop: 6,
|
|
3981
4182
|
accessibilityRole: "button",
|
|
3982
4183
|
accessibilityLabel: `Remove ${option.label}`,
|
|
3983
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style:
|
|
4184
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles15.chipRemove, children: "\xD7" })
|
|
3984
4185
|
}
|
|
3985
4186
|
)
|
|
3986
4187
|
] }, option.value)),
|
|
3987
|
-
hasOverflow ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style:
|
|
4188
|
+
hasOverflow ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles15.ellipsis, children: /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles15.ellipsisText, children: "..." }) }) : null
|
|
3988
4189
|
] })
|
|
3989
4190
|
] });
|
|
3990
4191
|
}
|
|
@@ -4208,11 +4409,11 @@ var Select = react.forwardRef(
|
|
|
4208
4409
|
{
|
|
4209
4410
|
...rest,
|
|
4210
4411
|
ref: setRootRef,
|
|
4211
|
-
style: [
|
|
4412
|
+
style: [styles15.root, isOpen && styles15.rootOpen, disabled && styles15.disabled, style],
|
|
4212
4413
|
accessibilityState: { disabled, expanded: isOpen },
|
|
4213
4414
|
children: [
|
|
4214
|
-
showLabel && label ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [
|
|
4215
|
-
/* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: [
|
|
4415
|
+
showLabel && label ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [styles15.label, { color: labelColor }], children: label }) : null,
|
|
4416
|
+
/* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: [styles15.triggerWrap, isOpen && styles15.triggerWrapOpen], children: [
|
|
4216
4417
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
4217
4418
|
reactNative.Pressable,
|
|
4218
4419
|
{
|
|
@@ -4223,29 +4424,29 @@ var Select = react.forwardRef(
|
|
|
4223
4424
|
accessibilityLabel: resolvedAccessibilityLabel,
|
|
4224
4425
|
accessibilityState: { disabled, expanded: isOpen },
|
|
4225
4426
|
style: [
|
|
4226
|
-
|
|
4427
|
+
styles15.trigger,
|
|
4227
4428
|
{
|
|
4228
4429
|
borderColor: triggerBorderColor,
|
|
4229
4430
|
backgroundColor: colors.grey700
|
|
4230
4431
|
}
|
|
4231
4432
|
],
|
|
4232
4433
|
children: [
|
|
4233
|
-
hasLeftIcon ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style:
|
|
4234
|
-
/* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style:
|
|
4434
|
+
hasLeftIcon ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles15.iconSlot, children: leftIconNode }) : null,
|
|
4435
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles15.triggerContent, children: multiple && hasValue ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
4235
4436
|
MultiValueChips,
|
|
4236
4437
|
{
|
|
4237
4438
|
options: selectedOptions,
|
|
4238
4439
|
disabled,
|
|
4239
4440
|
onRemove: handleRemoveChip
|
|
4240
4441
|
}
|
|
4241
|
-
) : /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [
|
|
4242
|
-
/* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: [
|
|
4442
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [styles15.triggerText, { color: triggerTextColor }], numberOfLines: 1, children: multiple ? placeholder : singleLabel }) }),
|
|
4443
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: [styles15.iconSlot, isOpen && styles15.chevronOpen], children: /* @__PURE__ */ jsxRuntime.jsx(ChevronDownIcon, { size: ICON_SIZE8, color: isOpen ? colors.primary : colors.grey100 }) })
|
|
4243
4444
|
]
|
|
4244
4445
|
}
|
|
4245
4446
|
),
|
|
4246
|
-
isOpen ? /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style:
|
|
4247
|
-
showSearch ? /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style:
|
|
4248
|
-
/* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style:
|
|
4447
|
+
isOpen ? /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: styles15.menu, children: [
|
|
4448
|
+
showSearch ? /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: styles15.searchField, children: [
|
|
4449
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles15.iconSlot, children: /* @__PURE__ */ jsxRuntime.jsx(SearchIcon, { size: ICON_SIZE8, color: colors.grey100 }) }),
|
|
4249
4450
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4250
4451
|
reactNative.TextInput,
|
|
4251
4452
|
{
|
|
@@ -4256,9 +4457,9 @@ var Select = react.forwardRef(
|
|
|
4256
4457
|
placeholder: searchPlaceholder,
|
|
4257
4458
|
placeholderTextColor: colors.grey100,
|
|
4258
4459
|
style: [
|
|
4259
|
-
|
|
4260
|
-
reactNative.Platform.OS === "web" ?
|
|
4261
|
-
reactNative.Platform.OS === "android" ?
|
|
4460
|
+
styles15.searchInput,
|
|
4461
|
+
reactNative.Platform.OS === "web" ? styles15.searchInputWeb : null,
|
|
4462
|
+
reactNative.Platform.OS === "android" ? styles15.searchInputAndroid : null
|
|
4262
4463
|
],
|
|
4263
4464
|
accessibilityLabel: searchPlaceholder
|
|
4264
4465
|
}
|
|
@@ -4267,12 +4468,12 @@ var Select = react.forwardRef(
|
|
|
4267
4468
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
4268
4469
|
reactNative.ScrollView,
|
|
4269
4470
|
{
|
|
4270
|
-
style:
|
|
4271
|
-
contentContainerStyle:
|
|
4471
|
+
style: styles15.optionList,
|
|
4472
|
+
contentContainerStyle: styles15.optionListContent,
|
|
4272
4473
|
keyboardShouldPersistTaps: "handled",
|
|
4273
4474
|
showsVerticalScrollIndicator: false,
|
|
4274
4475
|
children: [
|
|
4275
|
-
loading ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style:
|
|
4476
|
+
loading ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles15.statusRow, children: /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles15.statusText, children: "Loading..." }) }) : filteredOptions.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles15.statusRow, children: /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles15.statusText, children: emptyText }) }) : null,
|
|
4276
4477
|
!loading && filteredOptions.map((option) => {
|
|
4277
4478
|
const isSelected = selectedValues.includes(option.value);
|
|
4278
4479
|
const isHovered = hoveredValue === option.value;
|
|
@@ -4289,14 +4490,14 @@ var Select = react.forwardRef(
|
|
|
4289
4490
|
accessibilityRole: multiple ? "checkbox" : "button",
|
|
4290
4491
|
accessibilityState: { selected: isSelected, checked: isSelected, disabled },
|
|
4291
4492
|
style: [
|
|
4292
|
-
|
|
4493
|
+
styles15.item,
|
|
4293
4494
|
{
|
|
4294
4495
|
backgroundColor: itemBackground(visualState)
|
|
4295
4496
|
}
|
|
4296
4497
|
],
|
|
4297
4498
|
children: [
|
|
4298
|
-
multiple ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { pointerEvents: "none", style:
|
|
4299
|
-
/* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style:
|
|
4499
|
+
multiple ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { pointerEvents: "none", style: styles15.itemCheckbox, children: /* @__PURE__ */ jsxRuntime.jsx(Checkbox, { value: isSelected, variant: "light" }) }) : null,
|
|
4500
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles15.itemLabel, numberOfLines: 1, children: option.label })
|
|
4300
4501
|
]
|
|
4301
4502
|
},
|
|
4302
4503
|
option.value
|
|
@@ -4307,13 +4508,13 @@ var Select = react.forwardRef(
|
|
|
4307
4508
|
)
|
|
4308
4509
|
] }) : null
|
|
4309
4510
|
] }),
|
|
4310
|
-
showHint && hint ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [
|
|
4511
|
+
showHint && hint ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [styles15.hint, { color: hintColor }], children: hint }) : null
|
|
4311
4512
|
]
|
|
4312
4513
|
}
|
|
4313
4514
|
);
|
|
4314
4515
|
}
|
|
4315
4516
|
);
|
|
4316
|
-
var
|
|
4517
|
+
var styles15 = reactNative.StyleSheet.create({
|
|
4317
4518
|
root: {
|
|
4318
4519
|
width: DEFAULT_WIDTH3,
|
|
4319
4520
|
gap: 8,
|
|
@@ -4575,13 +4776,13 @@ var Textarea = react.forwardRef(function Textarea2({
|
|
|
4575
4776
|
const resolvedAccessibilityLabel = accessibilityLabel ?? (showLabel ? void 0 : label);
|
|
4576
4777
|
useApplyWebClassName(rootRef, className);
|
|
4577
4778
|
useApplyWebClassName(inputRef, inputClassName);
|
|
4578
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { ref: rootRef, style: [
|
|
4579
|
-
showLabel && label ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [
|
|
4779
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { ref: rootRef, style: [styles16.root, disabled && styles16.disabled, style], children: [
|
|
4780
|
+
showLabel && label ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [styles16.label, { color: chrome.labelColor }], children: label }) : null,
|
|
4580
4781
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4581
4782
|
reactNative.View,
|
|
4582
4783
|
{
|
|
4583
4784
|
style: [
|
|
4584
|
-
|
|
4785
|
+
styles16.field,
|
|
4585
4786
|
{
|
|
4586
4787
|
borderColor: chrome.borderColor,
|
|
4587
4788
|
backgroundColor: chrome.backgroundColor
|
|
@@ -4613,11 +4814,11 @@ var Textarea = react.forwardRef(function Textarea2({
|
|
|
4613
4814
|
onBlur?.(event);
|
|
4614
4815
|
},
|
|
4615
4816
|
style: [
|
|
4616
|
-
|
|
4817
|
+
styles16.input,
|
|
4617
4818
|
textareaTypography.field,
|
|
4618
4819
|
{ color: chrome.textColor },
|
|
4619
|
-
reactNative.Platform.OS === "web" ?
|
|
4620
|
-
reactNative.Platform.OS === "android" ?
|
|
4820
|
+
reactNative.Platform.OS === "web" ? styles16.inputWeb : null,
|
|
4821
|
+
reactNative.Platform.OS === "android" ? styles16.inputAndroid : null,
|
|
4621
4822
|
inputStyle
|
|
4622
4823
|
],
|
|
4623
4824
|
accessibilityLabel: resolvedAccessibilityLabel,
|
|
@@ -4626,10 +4827,10 @@ var Textarea = react.forwardRef(function Textarea2({
|
|
|
4626
4827
|
)
|
|
4627
4828
|
}
|
|
4628
4829
|
),
|
|
4629
|
-
showHint && hint ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [
|
|
4830
|
+
showHint && hint ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [styles16.hint, { color: chrome.hintColor }], children: hint }) : null
|
|
4630
4831
|
] });
|
|
4631
4832
|
});
|
|
4632
|
-
var
|
|
4833
|
+
var styles16 = reactNative.StyleSheet.create({
|
|
4633
4834
|
root: {
|
|
4634
4835
|
width: DEFAULT_WIDTH4,
|
|
4635
4836
|
gap: 8,
|
|
@@ -4729,13 +4930,13 @@ var Toggle = react.forwardRef(function Toggle2({
|
|
|
4729
4930
|
accessibilityRole: "switch",
|
|
4730
4931
|
accessibilityLabel: resolvedAccessibilityLabel,
|
|
4731
4932
|
accessibilityState: { checked: isActive, disabled },
|
|
4732
|
-
style: [
|
|
4933
|
+
style: [styles17.pressable, disabled && styles17.disabled, style],
|
|
4733
4934
|
children: [
|
|
4734
4935
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4735
4936
|
reactNative.Animated.View,
|
|
4736
4937
|
{
|
|
4737
4938
|
style: [
|
|
4738
|
-
|
|
4939
|
+
styles17.track,
|
|
4739
4940
|
{
|
|
4740
4941
|
backgroundColor: trackBackgroundColor
|
|
4741
4942
|
}
|
|
@@ -4744,7 +4945,7 @@ var Toggle = react.forwardRef(function Toggle2({
|
|
|
4744
4945
|
reactNative.Animated.View,
|
|
4745
4946
|
{
|
|
4746
4947
|
style: [
|
|
4747
|
-
|
|
4948
|
+
styles17.thumb,
|
|
4748
4949
|
{
|
|
4749
4950
|
transform: [{ translateX: thumbTranslateX }]
|
|
4750
4951
|
}
|
|
@@ -4753,12 +4954,12 @@ var Toggle = react.forwardRef(function Toggle2({
|
|
|
4753
4954
|
)
|
|
4754
4955
|
}
|
|
4755
4956
|
),
|
|
4756
|
-
labelContent != null && labelContent !== false ? typeof labelContent === "string" || typeof labelContent === "number" ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [
|
|
4957
|
+
labelContent != null && labelContent !== false ? typeof labelContent === "string" || typeof labelContent === "number" ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [styles17.label, labelStyle], children: labelContent }) : labelContent : null
|
|
4757
4958
|
]
|
|
4758
4959
|
}
|
|
4759
4960
|
);
|
|
4760
4961
|
});
|
|
4761
|
-
var
|
|
4962
|
+
var styles17 = reactNative.StyleSheet.create({
|
|
4762
4963
|
pressable: {
|
|
4763
4964
|
flexDirection: "row",
|
|
4764
4965
|
alignItems: "center",
|
|
@@ -4833,21 +5034,21 @@ var RatingInput = react.forwardRef(
|
|
|
4833
5034
|
{
|
|
4834
5035
|
...rest,
|
|
4835
5036
|
ref: setContainerRef,
|
|
4836
|
-
style: [
|
|
5037
|
+
style: [styles18.root, disabled && styles18.disabled, style],
|
|
4837
5038
|
children: [
|
|
4838
|
-
showValue ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { numberOfLines: 1, style: [
|
|
5039
|
+
showValue ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { numberOfLines: 1, style: [styles18.value, valueStyle], children: selectedValue.toFixed(precision) }) : null,
|
|
4839
5040
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
4840
5041
|
reactNative.View,
|
|
4841
5042
|
{
|
|
4842
5043
|
accessibilityRole: readOnly ? "image" : "radiogroup",
|
|
4843
5044
|
accessibilityLabel: resolvedAccessibilityLabel,
|
|
4844
5045
|
accessibilityState: { disabled },
|
|
4845
|
-
style: [
|
|
5046
|
+
style: [styles18.stars, { gap: resolvedStarGap }],
|
|
4846
5047
|
children: Array.from({ length: STAR_COUNT }, (_, index) => {
|
|
4847
5048
|
const starValue = index + 1;
|
|
4848
5049
|
const isSelected = starValue <= selectedStarCount;
|
|
4849
5050
|
const icon = isSelected ? /* @__PURE__ */ jsxRuntime.jsx(StarFilledIcon, { size: iconWidth, height: iconHeight }) : /* @__PURE__ */ jsxRuntime.jsx(StarIcon, { size: iconWidth, height: iconHeight });
|
|
4850
|
-
const itemStyle = [
|
|
5051
|
+
const itemStyle = [styles18.starItem, { width: size, height: size }];
|
|
4851
5052
|
if (readOnly) {
|
|
4852
5053
|
return /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: itemStyle, children: icon }, starValue);
|
|
4853
5054
|
}
|
|
@@ -4873,7 +5074,7 @@ var RatingInput = react.forwardRef(
|
|
|
4873
5074
|
);
|
|
4874
5075
|
}
|
|
4875
5076
|
);
|
|
4876
|
-
var
|
|
5077
|
+
var styles18 = reactNative.StyleSheet.create({
|
|
4877
5078
|
root: {
|
|
4878
5079
|
flexDirection: "row",
|
|
4879
5080
|
alignItems: "center",
|
|
@@ -4937,19 +5138,19 @@ var CommentCard = react.forwardRef(
|
|
|
4937
5138
|
setExpanded(next);
|
|
4938
5139
|
onExpandedChange?.(next);
|
|
4939
5140
|
};
|
|
4940
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { ...rest, ref: setContainerRef, style: [
|
|
4941
|
-
/* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style:
|
|
4942
|
-
/* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style:
|
|
5141
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { ...rest, ref: setContainerRef, style: [styles19.root, style], children: [
|
|
5142
|
+
/* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: styles19.header, children: [
|
|
5143
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles19.avatar, children: hasImage ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
4943
5144
|
reactNative.Image,
|
|
4944
5145
|
{
|
|
4945
5146
|
source: { uri: imageUrl ?? void 0 },
|
|
4946
|
-
style:
|
|
5147
|
+
style: styles19.avatarImage,
|
|
4947
5148
|
onError: () => setImageFailed(true)
|
|
4948
5149
|
}
|
|
4949
5150
|
) : /* @__PURE__ */ jsxRuntime.jsx(UserIcon, { size: 20, color: colors.primary }) }),
|
|
4950
|
-
/* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style:
|
|
4951
|
-
/* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { numberOfLines: 1, style:
|
|
4952
|
-
/* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { numberOfLines: 1, style:
|
|
5151
|
+
/* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: styles19.identity, children: [
|
|
5152
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { numberOfLines: 1, style: styles19.name, children: userName }),
|
|
5153
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { numberOfLines: 1, style: styles19.date, children: date })
|
|
4953
5154
|
] }),
|
|
4954
5155
|
/* @__PURE__ */ jsxRuntime.jsx(RatingInput, { value: rating, readOnly: true, showValue: false, size: 16 })
|
|
4955
5156
|
] }),
|
|
@@ -4957,7 +5158,7 @@ var CommentCard = react.forwardRef(
|
|
|
4957
5158
|
reactNative.Text,
|
|
4958
5159
|
{
|
|
4959
5160
|
numberOfLines: expanded ? void 0 : maxCommentLines,
|
|
4960
|
-
style: [
|
|
5161
|
+
style: [styles19.comment, commentStyle],
|
|
4961
5162
|
children: commentText
|
|
4962
5163
|
}
|
|
4963
5164
|
),
|
|
@@ -4970,14 +5171,14 @@ var CommentCard = react.forwardRef(
|
|
|
4970
5171
|
hitSlop: 6,
|
|
4971
5172
|
onHoverIn: () => setActionHovered(true),
|
|
4972
5173
|
onHoverOut: () => setActionHovered(false),
|
|
4973
|
-
style:
|
|
5174
|
+
style: styles19.action,
|
|
4974
5175
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
4975
5176
|
reactNative.Text,
|
|
4976
5177
|
{
|
|
4977
5178
|
style: [
|
|
4978
|
-
|
|
4979
|
-
expanded &&
|
|
4980
|
-
actionHovered && (expanded ?
|
|
5179
|
+
styles19.actionText,
|
|
5180
|
+
expanded && styles19.closeActionText,
|
|
5181
|
+
actionHovered && (expanded ? styles19.closeActionTextHovered : styles19.openActionTextHovered)
|
|
4981
5182
|
],
|
|
4982
5183
|
children: expanded ? readLessLabel : readMoreLabel
|
|
4983
5184
|
}
|
|
@@ -4987,7 +5188,7 @@ var CommentCard = react.forwardRef(
|
|
|
4987
5188
|
] });
|
|
4988
5189
|
}
|
|
4989
5190
|
);
|
|
4990
|
-
var
|
|
5191
|
+
var styles19 = reactNative.StyleSheet.create({
|
|
4991
5192
|
root: {
|
|
4992
5193
|
width: CARD_WIDTH,
|
|
4993
5194
|
minHeight: CARD_MIN_HEIGHT,
|
|
@@ -5426,7 +5627,7 @@ var Range = react.forwardRef(function Range2({
|
|
|
5426
5627
|
...rest,
|
|
5427
5628
|
ref: setRootRef,
|
|
5428
5629
|
onLayout,
|
|
5429
|
-
style: [
|
|
5630
|
+
style: [styles20.root, disabled && styles20.disabled, style],
|
|
5430
5631
|
children: [
|
|
5431
5632
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
5432
5633
|
reactNative.Pressable,
|
|
@@ -5440,16 +5641,16 @@ var Range = react.forwardRef(function Range2({
|
|
|
5440
5641
|
updateNearestFromTrack(event.nativeEvent.offsetX);
|
|
5441
5642
|
} : void 0,
|
|
5442
5643
|
onPress: reactNative.Platform.OS === "web" ? void 0 : handleTrackPress,
|
|
5443
|
-
style:
|
|
5644
|
+
style: styles20.sliderPlane,
|
|
5444
5645
|
tabIndex: -1,
|
|
5445
5646
|
children: [
|
|
5446
|
-
/* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { pointerEvents: "none", style:
|
|
5647
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { pointerEvents: "none", style: styles20.track }),
|
|
5447
5648
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5448
5649
|
reactNative.View,
|
|
5449
5650
|
{
|
|
5450
5651
|
pointerEvents: "none",
|
|
5451
5652
|
style: [
|
|
5452
|
-
|
|
5653
|
+
styles20.activeTrack,
|
|
5453
5654
|
{
|
|
5454
5655
|
left: TRACK_HORIZONTAL_INSET + fromOffset,
|
|
5455
5656
|
width: toOffset - fromOffset + THUMB_SIZE2
|
|
@@ -5491,9 +5692,9 @@ var Range = react.forwardRef(function Range2({
|
|
|
5491
5692
|
onAccessibilityAction: (event) => handleAccessibilityAction(event, effectiveFrom, updateFromInput),
|
|
5492
5693
|
pointerEvents: disabled ? "none" : "auto",
|
|
5493
5694
|
style: [
|
|
5494
|
-
|
|
5495
|
-
reactNative.Platform.OS === "web" &&
|
|
5496
|
-
focusedThumb === "from" && reactNative.Platform.OS === "web" &&
|
|
5695
|
+
styles20.thumb,
|
|
5696
|
+
reactNative.Platform.OS === "web" && styles20.thumbWeb,
|
|
5697
|
+
focusedThumb === "from" && reactNative.Platform.OS === "web" && styles20.thumbFocusedWeb,
|
|
5497
5698
|
{ left: TRACK_HORIZONTAL_INSET + fromOffset }
|
|
5498
5699
|
],
|
|
5499
5700
|
tabIndex: disabled ? -1 : 0
|
|
@@ -5533,9 +5734,9 @@ var Range = react.forwardRef(function Range2({
|
|
|
5533
5734
|
onAccessibilityAction: (event) => handleAccessibilityAction(event, effectiveTo, updateToInput),
|
|
5534
5735
|
pointerEvents: disabled ? "none" : "auto",
|
|
5535
5736
|
style: [
|
|
5536
|
-
|
|
5537
|
-
reactNative.Platform.OS === "web" &&
|
|
5538
|
-
focusedThumb === "to" && reactNative.Platform.OS === "web" &&
|
|
5737
|
+
styles20.thumb,
|
|
5738
|
+
reactNative.Platform.OS === "web" && styles20.thumbWeb,
|
|
5739
|
+
focusedThumb === "to" && reactNative.Platform.OS === "web" && styles20.thumbFocusedWeb,
|
|
5539
5740
|
{ left: TRACK_HORIZONTAL_INSET + toOffset }
|
|
5540
5741
|
],
|
|
5541
5742
|
tabIndex: disabled ? -1 : 0
|
|
@@ -5544,7 +5745,7 @@ var Range = react.forwardRef(function Range2({
|
|
|
5544
5745
|
]
|
|
5545
5746
|
}
|
|
5546
5747
|
),
|
|
5547
|
-
/* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style:
|
|
5748
|
+
/* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: styles20.inputs, children: [
|
|
5548
5749
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5549
5750
|
RangeInput,
|
|
5550
5751
|
{
|
|
@@ -5595,7 +5796,7 @@ function RangeInput({
|
|
|
5595
5796
|
placeholder,
|
|
5596
5797
|
value
|
|
5597
5798
|
}) {
|
|
5598
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: [
|
|
5799
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: [styles20.inputField, focused && styles20.inputFieldFocused], children: [
|
|
5599
5800
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5600
5801
|
reactNative.TextInput,
|
|
5601
5802
|
{
|
|
@@ -5611,15 +5812,15 @@ function RangeInput({
|
|
|
5611
5812
|
placeholder,
|
|
5612
5813
|
placeholderTextColor: colors.grey150,
|
|
5613
5814
|
returnKeyType: "done",
|
|
5614
|
-
style: [
|
|
5815
|
+
style: [styles20.input, reactNative.Platform.OS === "web" && styles20.inputWeb],
|
|
5615
5816
|
tabIndex: disabled ? -1 : void 0,
|
|
5616
5817
|
value
|
|
5617
5818
|
}
|
|
5618
5819
|
),
|
|
5619
|
-
/* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style:
|
|
5820
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles20.currencySlot, children: /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles20.currency, children: currency }) })
|
|
5620
5821
|
] });
|
|
5621
5822
|
}
|
|
5622
|
-
var
|
|
5823
|
+
var styles20 = reactNative.StyleSheet.create({
|
|
5623
5824
|
root: {
|
|
5624
5825
|
width: DEFAULT_WIDTH5,
|
|
5625
5826
|
gap: 15,
|
|
@@ -5807,6 +6008,7 @@ exports.Toggle = Toggle;
|
|
|
5807
6008
|
exports.TooltipArrowIcon = TooltipArrowIcon;
|
|
5808
6009
|
exports.UserIcon = UserIcon;
|
|
5809
6010
|
exports.UsersAltIcon = UsersAltIcon;
|
|
6011
|
+
exports.VerificationCodeInput = VerificationCodeInput;
|
|
5810
6012
|
exports.VideoIcon = VideoIcon;
|
|
5811
6013
|
exports.WhatsAppIcon = WhatsAppIcon;
|
|
5812
6014
|
exports.avatarTypography = avatarTypography;
|