@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/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: styles14.multiValueRoot, children: [
3954
- /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { pointerEvents: "none", style: styles14.measureRow, children: [
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: styles14.chip,
4159
+ style: styles15.chip,
3959
4160
  onLayout: (event) => handleChipLayout(option.value, event),
3960
4161
  children: [
3961
- /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles14.chipLabel, numberOfLines: 1, children: option.label }),
3962
- /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles14.chipRemove, children: "\xD7" })
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: styles14.ellipsis, onLayout: handleEllipsisLayout, children: /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles14.ellipsisText, children: "..." }) })
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: styles14.chipsRow, onLayout: handleContainerLayout, children: [
3970
- visible.map((option) => /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: styles14.chip, children: [
3971
- /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles14.chipLabel, numberOfLines: 1, children: option.label }),
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: styles14.chipRemove, children: "\xD7" })
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: styles14.ellipsis, children: /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles14.ellipsisText, children: "..." }) }) : null
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: [styles14.root, isOpen && styles14.rootOpen, disabled && styles14.disabled, 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: [styles14.label, { color: labelColor }], children: label }) : null,
4215
- /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: [styles14.triggerWrap, isOpen && styles14.triggerWrapOpen], children: [
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
- styles14.trigger,
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: styles14.iconSlot, children: leftIconNode }) : null,
4234
- /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles14.triggerContent, children: multiple && hasValue ? /* @__PURE__ */ jsxRuntime.jsx(
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: [styles14.triggerText, { color: triggerTextColor }], numberOfLines: 1, children: multiple ? placeholder : singleLabel }) }),
4242
- /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: [styles14.iconSlot, isOpen && styles14.chevronOpen], children: /* @__PURE__ */ jsxRuntime.jsx(ChevronDownIcon, { size: ICON_SIZE8, color: isOpen ? colors.primary : colors.grey100 }) })
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: styles14.menu, children: [
4247
- showSearch ? /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: styles14.searchField, children: [
4248
- /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles14.iconSlot, children: /* @__PURE__ */ jsxRuntime.jsx(SearchIcon, { size: ICON_SIZE8, color: colors.grey100 }) }),
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
- styles14.searchInput,
4260
- reactNative.Platform.OS === "web" ? styles14.searchInputWeb : null,
4261
- reactNative.Platform.OS === "android" ? styles14.searchInputAndroid : null
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: styles14.optionList,
4271
- contentContainerStyle: styles14.optionListContent,
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: styles14.statusRow, children: /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles14.statusText, children: "Loading..." }) }) : filteredOptions.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles14.statusRow, children: /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles14.statusText, children: emptyText }) }) : null,
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
- styles14.item,
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: styles14.itemCheckbox, children: /* @__PURE__ */ jsxRuntime.jsx(Checkbox, { value: isSelected, variant: "light" }) }) : null,
4299
- /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles14.itemLabel, numberOfLines: 1, children: option.label })
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: [styles14.hint, { color: hintColor }], children: hint }) : null
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 styles14 = reactNative.StyleSheet.create({
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: [styles15.root, disabled && styles15.disabled, style], children: [
4579
- showLabel && label ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [styles15.label, { color: chrome.labelColor }], children: label }) : null,
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
- styles15.field,
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
- styles15.input,
4817
+ styles16.input,
4617
4818
  textareaTypography.field,
4618
4819
  { color: chrome.textColor },
4619
- reactNative.Platform.OS === "web" ? styles15.inputWeb : null,
4620
- reactNative.Platform.OS === "android" ? styles15.inputAndroid : null,
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: [styles15.hint, { color: chrome.hintColor }], children: hint }) : null
4830
+ showHint && hint ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: [styles16.hint, { color: chrome.hintColor }], children: hint }) : null
4630
4831
  ] });
4631
4832
  });
4632
- var styles15 = reactNative.StyleSheet.create({
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: [styles16.pressable, disabled && styles16.disabled, 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
- styles16.track,
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
- styles16.thumb,
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: [styles16.label, labelStyle], children: labelContent }) : labelContent : null
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 styles16 = reactNative.StyleSheet.create({
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: [styles17.root, disabled && styles17.disabled, style],
5037
+ style: [styles18.root, disabled && styles18.disabled, style],
4837
5038
  children: [
4838
- showValue ? /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { numberOfLines: 1, style: [styles17.value, valueStyle], children: selectedValue.toFixed(precision) }) : null,
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: [styles17.stars, { gap: resolvedStarGap }],
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 = [styles17.starItem, { width: size, height: size }];
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 styles17 = reactNative.StyleSheet.create({
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: [styles18.root, style], children: [
4941
- /* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: styles18.header, children: [
4942
- /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: styles18.avatar, children: hasImage ? /* @__PURE__ */ jsxRuntime.jsx(
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: styles18.avatarImage,
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: styles18.identity, children: [
4951
- /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { numberOfLines: 1, style: styles18.name, children: userName }),
4952
- /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { numberOfLines: 1, style: styles18.date, children: date })
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: [styles18.comment, commentStyle],
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: styles18.action,
5174
+ style: styles19.action,
4974
5175
  children: /* @__PURE__ */ jsxRuntime.jsx(
4975
5176
  reactNative.Text,
4976
5177
  {
4977
5178
  style: [
4978
- styles18.actionText,
4979
- expanded && styles18.closeActionText,
4980
- actionHovered && (expanded ? styles18.closeActionTextHovered : styles18.openActionTextHovered)
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 styles18 = reactNative.StyleSheet.create({
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: [styles19.root, disabled && styles19.disabled, 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: styles19.sliderPlane,
5644
+ style: styles20.sliderPlane,
5444
5645
  tabIndex: -1,
5445
5646
  children: [
5446
- /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { pointerEvents: "none", style: styles19.track }),
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
- styles19.activeTrack,
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
- styles19.thumb,
5495
- reactNative.Platform.OS === "web" && styles19.thumbWeb,
5496
- focusedThumb === "from" && reactNative.Platform.OS === "web" && styles19.thumbFocusedWeb,
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
- styles19.thumb,
5537
- reactNative.Platform.OS === "web" && styles19.thumbWeb,
5538
- focusedThumb === "to" && reactNative.Platform.OS === "web" && styles19.thumbFocusedWeb,
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: styles19.inputs, children: [
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: [styles19.inputField, focused && styles19.inputFieldFocused], children: [
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: [styles19.input, reactNative.Platform.OS === "web" && styles19.inputWeb],
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: styles19.currencySlot, children: /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: styles19.currency, children: currency }) })
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 styles19 = reactNative.StyleSheet.create({
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;