@webority/mobile-ui 0.10.0 → 0.11.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.
Files changed (74) hide show
  1. package/android/src/newarch/java/com/webority/mobileui/pdfrasterizer/PdfRasterizerModule.kt +6 -7
  2. package/ios/PdfRasterizer.mm +36 -9
  3. package/lib/commonjs/components/Checkbox/Checkbox.js +1 -1
  4. package/lib/commonjs/components/FieldBase/ChoiceText.js +1 -1
  5. package/lib/commonjs/components/FieldBase/FieldBase.js +1 -1
  6. package/lib/commonjs/components/FieldBase/useFloatingLabel.js +1 -1
  7. package/lib/commonjs/components/FormField/FormField.js +1 -1
  8. package/lib/commonjs/components/Input/Input.js +1 -1
  9. package/lib/commonjs/components/Notation/Notation.js +1 -1
  10. package/lib/commonjs/components/OptionSheet/OptionSheet.js +1 -1
  11. package/lib/commonjs/components/PermissionPrompt/PermissionPrompt.js +1 -0
  12. package/lib/commonjs/components/PermissionPrompt/index.js +1 -0
  13. package/lib/commonjs/components/PermissionPrompt/usePermissionPrompt.js +1 -0
  14. package/lib/commonjs/components/PhoneNumberInput/PhoneNumberInput.js +1 -1
  15. package/lib/commonjs/components/Radio/Radio.js +1 -1
  16. package/lib/commonjs/components/Radio/RadioGroup.js +1 -1
  17. package/lib/commonjs/components/SegmentedControl/SegmentedControl.js +1 -1
  18. package/lib/commonjs/components/Select/Select.js +1 -1
  19. package/lib/commonjs/components/Switch/Switch.js +1 -1
  20. package/lib/commonjs/components/TagInput/TagInput.js +1 -1
  21. package/lib/commonjs/components/index.js +1 -1
  22. package/lib/module/components/Checkbox/Checkbox.js +1 -1
  23. package/lib/module/components/FieldBase/ChoiceText.js +1 -1
  24. package/lib/module/components/FieldBase/FieldBase.js +1 -1
  25. package/lib/module/components/FieldBase/useFloatingLabel.js +1 -1
  26. package/lib/module/components/FormField/FormField.js +1 -1
  27. package/lib/module/components/Input/Input.js +1 -1
  28. package/lib/module/components/Notation/Notation.js +1 -1
  29. package/lib/module/components/OptionSheet/OptionSheet.js +1 -1
  30. package/lib/module/components/PermissionPrompt/PermissionPrompt.js +1 -0
  31. package/lib/module/components/PermissionPrompt/index.js +1 -0
  32. package/lib/module/components/PermissionPrompt/usePermissionPrompt.js +1 -0
  33. package/lib/module/components/PhoneNumberInput/PhoneNumberInput.js +1 -1
  34. package/lib/module/components/Radio/Radio.js +1 -1
  35. package/lib/module/components/Radio/RadioGroup.js +1 -1
  36. package/lib/module/components/SegmentedControl/SegmentedControl.js +1 -1
  37. package/lib/module/components/Select/Select.js +1 -1
  38. package/lib/module/components/Switch/Switch.js +1 -1
  39. package/lib/module/components/TagInput/TagInput.js +1 -1
  40. package/lib/module/components/index.js +1 -1
  41. package/lib/typescript/commonjs/components/Checkbox/Checkbox.d.ts +4 -1
  42. package/lib/typescript/commonjs/components/FileViewer/FileViewer.d.ts +1 -1
  43. package/lib/typescript/commonjs/components/Notation/Notation.d.ts +10 -4
  44. package/lib/typescript/commonjs/components/OptionSheet/OptionSheet.d.ts +2 -0
  45. package/lib/typescript/commonjs/components/PermissionPrompt/PermissionPrompt.d.ts +39 -0
  46. package/lib/typescript/commonjs/components/PermissionPrompt/index.d.ts +5 -0
  47. package/lib/typescript/commonjs/components/PermissionPrompt/usePermissionPrompt.d.ts +44 -0
  48. package/lib/typescript/commonjs/components/PhoneNumberInput/PhoneNumberInput.d.ts +5 -2
  49. package/lib/typescript/commonjs/components/Radio/Radio.d.ts +13 -4
  50. package/lib/typescript/commonjs/components/Radio/RadioGroup.d.ts +5 -0
  51. package/lib/typescript/commonjs/components/SegmentedControl/SegmentedControl.d.ts +5 -1
  52. package/lib/typescript/commonjs/components/Select/Select.d.ts +2 -0
  53. package/lib/typescript/commonjs/components/Switch/Switch.d.ts +11 -4
  54. package/lib/typescript/commonjs/components/TagInput/TagInput.d.ts +4 -0
  55. package/lib/typescript/commonjs/components/index.d.ts +2 -0
  56. package/lib/typescript/commonjs/specs/NativePdfRasterizer.d.ts +1 -1
  57. package/lib/typescript/module/components/Checkbox/Checkbox.d.ts +4 -1
  58. package/lib/typescript/module/components/FileViewer/FileViewer.d.ts +1 -1
  59. package/lib/typescript/module/components/Notation/Notation.d.ts +10 -4
  60. package/lib/typescript/module/components/OptionSheet/OptionSheet.d.ts +2 -0
  61. package/lib/typescript/module/components/PermissionPrompt/PermissionPrompt.d.ts +39 -0
  62. package/lib/typescript/module/components/PermissionPrompt/index.d.ts +5 -0
  63. package/lib/typescript/module/components/PermissionPrompt/usePermissionPrompt.d.ts +44 -0
  64. package/lib/typescript/module/components/PhoneNumberInput/PhoneNumberInput.d.ts +5 -2
  65. package/lib/typescript/module/components/Radio/Radio.d.ts +13 -4
  66. package/lib/typescript/module/components/Radio/RadioGroup.d.ts +5 -0
  67. package/lib/typescript/module/components/SegmentedControl/SegmentedControl.d.ts +5 -1
  68. package/lib/typescript/module/components/Select/Select.d.ts +2 -0
  69. package/lib/typescript/module/components/Switch/Switch.d.ts +11 -4
  70. package/lib/typescript/module/components/TagInput/TagInput.d.ts +4 -0
  71. package/lib/typescript/module/components/index.d.ts +2 -0
  72. package/lib/typescript/module/specs/NativePdfRasterizer.d.ts +1 -1
  73. package/package.json +3 -3
  74. package/src/specs/NativePdfRasterizer.ts +1 -1
@@ -42,7 +42,7 @@ class PdfRasterizerModule(reactContext: ReactApplicationContext) :
42
42
  private const val ERR_UNKNOWN_HANDLE = "E_UNKNOWN_HANDLE"
43
43
  private const val ERR_PAGE_OUT_OF_RANGE = "E_PAGE_OUT_OF_RANGE"
44
44
 
45
- // Clamp the larger render dimension to avoid an OOM on a pathological scale value.
45
+ // Both render sides stay within this, scaled together so the aspect ratio holds; avoids an OOM on a pathological scale value.
46
46
  private const val MAX_RENDER_DIMENSION_PX = 4096
47
47
  }
48
48
 
@@ -151,8 +151,10 @@ class PdfRasterizerModule(reactContext: ReactApplicationContext) :
151
151
  }
152
152
 
153
153
  val page = doc.renderer.openPage(index)
154
- val targetWidth = clampDimension((page.width * scale).roundToInt())
155
- val targetHeight = clampDimension((page.height * scale).roundToInt())
154
+ val longSide = maxOf(page.width, page.height) * scale
155
+ val fit = if (longSide > MAX_RENDER_DIMENSION_PX) MAX_RENDER_DIMENSION_PX / longSide else 1.0
156
+ val targetWidth = positiveDimension((page.width * scale * fit).roundToInt())
157
+ val targetHeight = positiveDimension((page.height * scale * fit).roundToInt())
156
158
 
157
159
  val bitmap = Bitmap.createBitmap(targetWidth, targetHeight, Bitmap.Config.ARGB_8888)
158
160
  // Fill white first — PDF transparency renders as black on some devices otherwise.
@@ -200,10 +202,7 @@ class PdfRasterizerModule(reactContext: ReactApplicationContext) :
200
202
  }
201
203
  }
202
204
 
203
- private fun clampDimension(dimension: Int): Int {
204
- val positive = if (dimension < 1) 1 else dimension
205
- return if (positive > MAX_RENDER_DIMENSION_PX) MAX_RENDER_DIMENSION_PX else positive
206
- }
205
+ private fun positiveDimension(dimension: Int): Int = if (dimension < 1) 1 else dimension
207
206
 
208
207
  private fun normalizePath(path: String): String {
209
208
  return if (path.startsWith("file://")) path.removePrefix("file://") else path
@@ -5,6 +5,9 @@
5
5
 
6
6
  static NSString *const kCacheDirName = @"pdf-rasterizer-cache";
7
7
 
8
+ // Both render sides stay within this, scaled together so the aspect ratio holds.
9
+ static const CGFloat kMaxRenderDimensionPx = 4096;
10
+
8
11
  // Wraps a CGPDFDocumentRef so ARC can own its lifetime inside an NSMutableDictionary —
9
12
  // CGPDFDocumentRef is a plain CF type with no toll-free-bridged Foundation counterpart.
10
13
  @interface PdfRasterizerDocumentBox : NSObject
@@ -60,11 +63,15 @@ RCT_EXPORT_MODULE(PdfRasterizer)
60
63
  return path;
61
64
  }
62
65
 
63
- // Page size in points, respecting rotation (90/270 swap width & height) — same
64
- // logic used both for open()'s page-0 read and getPageInfo()'s arbitrary page.
66
+ // /Rotate may be any multiple of 90, negative or past 360.
67
+ static int PdfRasterizerNormalizedRotation(CGPDFPageRef page) {
68
+ return ((CGPDFPageGetRotationAngle(page) % 360) + 360) % 360;
69
+ }
70
+
71
+ // The crop box is what CGContextDrawPDFPage shows, so it is the page's visible size.
65
72
  + (CGSize)pageSizeForPage:(CGPDFPageRef)page {
66
- CGRect box = CGPDFPageGetBoxRect(page, kCGPDFMediaBox);
67
- int rotation = CGPDFPageGetRotationAngle(page);
73
+ CGRect box = CGPDFPageGetBoxRect(page, kCGPDFCropBox);
74
+ int rotation = PdfRasterizerNormalizedRotation(page);
68
75
  CGFloat width = box.size.width;
69
76
  CGFloat height = box.size.height;
70
77
  if (rotation == 90 || rotation == 270) {
@@ -75,6 +82,24 @@ RCT_EXPORT_MODULE(PdfRasterizer)
75
82
  return CGSizeMake(width, height);
76
83
  }
77
84
 
85
+ // Maps the rotated crop box onto a y-up target, scaled up or down to fit it and
86
+ // centred. CGPDFPageGetDrawingTransform only ever scales down, which left an
87
+ // upscaled render drawn at 1x in the middle of a larger white bitmap.
88
+ static CGAffineTransform PdfRasterizerFillTransform(CGPDFPageRef page, CGSize target) {
89
+ CGRect crop = CGPDFPageGetBoxRect(page, kCGPDFCropBox);
90
+ int rotation = PdfRasterizerNormalizedRotation(page);
91
+ BOOL quarterTurn = rotation == 90 || rotation == 270;
92
+ CGFloat rotatedWidth = quarterTurn ? crop.size.height : crop.size.width;
93
+ CGFloat rotatedHeight = quarterTurn ? crop.size.width : crop.size.height;
94
+ CGFloat fit = MIN(target.width / rotatedWidth, target.height / rotatedHeight);
95
+
96
+ // /Rotate turns the page clockwise for display, a negative angle in y-up space.
97
+ CGAffineTransform transform = CGAffineTransformMakeTranslation(-CGRectGetMidX(crop), -CGRectGetMidY(crop));
98
+ transform = CGAffineTransformConcat(transform, CGAffineTransformMakeRotation(-rotation * M_PI / 180.0));
99
+ transform = CGAffineTransformConcat(transform, CGAffineTransformMakeScale(fit, fit));
100
+ return CGAffineTransformConcat(transform, CGAffineTransformMakeTranslation(target.width / 2.0, target.height / 2.0));
101
+ }
102
+
78
103
  - (NSString *)cacheDirectoryForHandle:(NSString *)handle {
79
104
  return [[NSTemporaryDirectory() stringByAppendingPathComponent:kCacheDirName]
80
105
  stringByAppendingPathComponent:handle];
@@ -228,6 +253,11 @@ RCT_EXPORT_MODULE(PdfRasterizer)
228
253
  reject(@"E_RENDER_FAILED", @"Computed render size is empty.", nil);
229
254
  return;
230
255
  }
256
+ CGFloat longSide = MAX(renderSize.width, renderSize.height);
257
+ if (longSide > kMaxRenderDimensionPx) {
258
+ CGFloat fit = kMaxRenderDimensionPx / longSide;
259
+ renderSize = CGSizeMake(MAX(1, round(renderSize.width * fit)), MAX(1, round(renderSize.height * fit)));
260
+ }
231
261
 
232
262
  UIGraphicsImageRendererFormat *format = [UIGraphicsImageRendererFormat preferredFormat];
233
263
  format.opaque = YES;
@@ -241,13 +271,10 @@ RCT_EXPORT_MODULE(PdfRasterizer)
241
271
  CGContextFillRect(ctx, CGRectMake(0, 0, renderSize.width, renderSize.height));
242
272
 
243
273
  CGContextSaveGState(ctx);
244
- // Flip into PDF's bottom-left-origin space, then let CGPDFPageGetDrawingTransform
245
- // account for the page's own rotation/media box when mapping into renderSize.
274
+ // Flip into PDF's bottom-left-origin space before mapping the page in.
246
275
  CGContextTranslateCTM(ctx, 0, renderSize.height);
247
276
  CGContextScaleCTM(ctx, 1, -1);
248
- CGAffineTransform transform = CGPDFPageGetDrawingTransform(
249
- page, kCGPDFMediaBox, CGRectMake(0, 0, renderSize.width, renderSize.height), 0, true);
250
- CGContextConcatCTM(ctx, transform);
277
+ CGContextConcatCTM(ctx, PdfRasterizerFillTransform(page, renderSize));
251
278
  CGContextDrawPDFPage(ctx, page);
252
279
  CGContextRestoreGState(ctx);
253
280
  }];
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.Checkbox=void 0;var _react=require("react"),_reactNative=require("react-native"),_reactNativeSvg=_interopRequireWildcard(require("react-native-svg")),_index=require("../../hooks/index.js"),_index2=require("../../theme/index.js"),_corners=require("../../utils/corners.js"),_hapticUtils=require("../../utils/hapticUtils.js"),_ChoiceText=require("../FieldBase/ChoiceText.js"),_FieldBase=require("../FieldBase/FieldBase.js"),_jsxRuntime=require("react/jsx-runtime");function _interopRequireWildcard(e,r){if("function"==typeof WeakMap)var t=new WeakMap,i=new WeakMap;return(_interopRequireWildcard=function(e,r){if(!r&&e&&e.__esModule)return e;var s,o,a={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return a;if(s=r?i:t){if(s.has(e))return s.get(e);s.set(e,a)}for(const r in e)"default"!==r&&{}.hasOwnProperty.call(e,r)&&((o=(s=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,r))&&(o.get||o.set)?s(a,r,o):a[r]=e[r]);return a})(e,r)}const sizeMap={sm:16,md:20,lg:24},toneColor=(e,r)=>{switch(r){case"success":return e.colors.success;case"warning":return e.colors.warning;case"error":return e.colors.error;default:return e.colors.primary}},toneOnColor=(e,r)=>{switch(r){case"success":return e.colors.onSuccess;case"warning":return e.colors.onWarning;case"error":return e.colors.onError;default:return e.colors.onPrimary}},Checkbox=exports.Checkbox=(0,_react.forwardRef)((e,r)=>{const{checked:t,defaultChecked:i,onChange:s,indeterminate:o=!1,disabled:a=!1,label:n,description:l,error:c,help:d,labelLines:u,size:h="md",tone:p="primary",accessibilityLabel:x,haptic:_,style:b,boxStyle:f,indeterminateBarStyle:m,containerStyle:y,labelStyle:g,testID:j,...v}=e,[w,C]=(0,_index.useControllableState)({value:t,defaultValue:i??!1,onChange:s}),k=(0,_index2.useTheme)(),S=(0,_react.useMemo)(()=>buildStyles(k),[k]),R=k.components.checkbox?.[h]?.boxSize??sizeMap[h],T=k.colors.border.width,N=k.components.checkbox?.labelGap??10,q=toneColor(k,p),M=w||o,F=(0,_react.useRef)((0,_index2.createAnimatedValue)(M?1:0)).current;(0,_react.useEffect)(()=>{const e=_reactNative.Animated.spring(F,{toValue:M?1:0,damping:k.motion.spring.snappy.damping,stiffness:k.motion.spring.snappy.stiffness,mass:k.motion.spring.snappy.mass,useNativeDriver:!0});return e.start(),()=>e.stop()},[M,F,k.motion.spring.snappy]);const B=F.interpolate({inputRange:[0,1],outputRange:[0,1]}),W=x??(0,_FieldBase.fieldTextAsString)(n),L=M?q:a?k.colors.border.primary:(0,_FieldBase.hasFieldText)(c)?k.colors.field.borderError:k.colors.border.primary,P=M?q:a?k.colors.surface.disabled:"transparent",D=a&&!M?k.colors.text.disabled:toneOnColor(k,p),O=Math.round(.72*R),V=Math.round(.55*R),I=Math.max(2,Math.round(.12*R)),A=(0,_jsxRuntime.jsxs)(_reactNative.Pressable,{ref:r,onPress:e=>{if(a)return;const r=(0,_hapticUtils.resolveHaptic)(_,"selection");r&&(0,_hapticUtils.triggerHaptic)(r),C(!w),v.onPressOut?.(e)},disabled:a,accessibilityRole:"checkbox",accessibilityLabel:W,accessibilityHint:v.accessibilityHint??(0,_FieldBase.fieldTextAsString)(l),accessibilityState:{checked:o?"mixed":w,disabled:a},"aria-checked":o?"mixed":w,"aria-disabled":a,testID:j,hitSlop:6,...v,style:({pressed:e})=>[S.row,(0,_ChoiceText.hasChoiceDetail)(l,c)?S.rowTop:null,(0,_FieldBase.hasFieldText)(d)?S.rowShrink:null,{opacity:a?.55:e?.85:1},y,b],children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:[S.box,{width:R,height:R,borderWidth:T,borderRadius:k.radius.xs,..._corners.smoothCorners,borderColor:L,backgroundColor:P},f],children:(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:[S.glyphWrap,{opacity:F,transform:[{scale:B}]}],children:o?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[{width:V,height:I,borderRadius:I/2,..._corners.smoothCorners,backgroundColor:D},m]}):(0,_jsxRuntime.jsx)(_reactNativeSvg.default,{width:O,height:O,viewBox:"0 0 24 24",children:(0,_jsxRuntime.jsx)(_reactNativeSvg.Path,{d:"M5 12.5l4.5 4.5L19 7.5",stroke:D,strokeWidth:3,strokeLinecap:"round",strokeLinejoin:"round",fill:"none"})})})}),(0,_jsxRuntime.jsx)(_ChoiceText.ChoiceText,{label:n,description:l,error:c,disabled:a,labelLines:u||void 0,descriptionLines:u||void 0,style:{marginLeft:N},labelStyle:g})]});return(0,_FieldBase.hasFieldText)(d)?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[S.helpRow,(0,_ChoiceText.hasChoiceDetail)(l,c)?S.rowTop:null],children:[A,(0,_jsxRuntime.jsx)(_reactNative.View,{style:[S.help,{marginLeft:k.spacing.xs}],children:d})]}):A});Checkbox.displayName="Checkbox";const buildStyles=e=>_reactNative.StyleSheet.create({row:{flexDirection:"row",alignItems:"center"},rowTop:{alignItems:"flex-start"},rowShrink:{flexShrink:1},helpRow:{flexDirection:"row",alignItems:"center"},help:{flexShrink:0},box:{alignItems:"center",justifyContent:"center"},glyphWrap:{alignItems:"center",justifyContent:"center"}});var _default=exports.default=Checkbox;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.Checkbox=void 0;var _react=require("react"),_reactNative=require("react-native"),_reactNativeSvg=_interopRequireWildcard(require("react-native-svg")),_index=require("../../hooks/index.js"),_index2=require("../../theme/index.js"),_corners=require("../../utils/corners.js"),_hapticUtils=require("../../utils/hapticUtils.js"),_ChoiceText=require("../FieldBase/ChoiceText.js"),_FieldBase=require("../FieldBase/FieldBase.js"),_jsxRuntime=require("react/jsx-runtime");function _interopRequireWildcard(e,r){if("function"==typeof WeakMap)var t=new WeakMap,i=new WeakMap;return(_interopRequireWildcard=function(e,r){if(!r&&e&&e.__esModule)return e;var s,o,a={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return a;if(s=r?i:t){if(s.has(e))return s.get(e);s.set(e,a)}for(const r in e)"default"!==r&&{}.hasOwnProperty.call(e,r)&&((o=(s=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,r))&&(o.get||o.set)?s(a,r,o):a[r]=e[r]);return a})(e,r)}const sizeMap={sm:16,md:20,lg:24},toneColor=(e,r)=>{switch(r){case"success":return e.colors.success;case"warning":return e.colors.warning;case"error":return e.colors.error;default:return e.colors.primary}},toneOnColor=(e,r)=>{switch(r){case"success":return e.colors.onSuccess;case"warning":return e.colors.onWarning;case"error":return e.colors.onError;default:return e.colors.onPrimary}},Checkbox=exports.Checkbox=(0,_react.forwardRef)((e,r)=>{const{checked:t,defaultChecked:i,onChange:s,indeterminate:o=!1,disabled:a=!1,label:n,description:l,error:c,help:d,labelLines:u,size:h="md",tone:p="primary",accessibilityLabel:x,haptic:_,style:b,boxStyle:f,indeterminateBarStyle:m,containerStyle:y,labelStyle:g,testID:j,...v}=e,[w,C]=(0,_index.useControllableState)({value:t,defaultValue:i??!1,onChange:s}),k=(0,_index2.useTheme)(),S=(0,_react.useMemo)(()=>buildStyles(k),[k]),R=k.components.checkbox?.[h]?.boxSize??sizeMap[h],T=k.colors.border.width,N=k.components.checkbox?.labelGap??10,q=toneColor(k,p),M=w||o,F=(0,_react.useRef)((0,_index2.createAnimatedValue)(M?1:0)).current;(0,_react.useEffect)(()=>{const e=_reactNative.Animated.spring(F,{toValue:M?1:0,damping:k.motion.spring.snappy.damping,stiffness:k.motion.spring.snappy.stiffness,mass:k.motion.spring.snappy.mass,useNativeDriver:!0});return e.start(),()=>e.stop()},[M,F,k.motion.spring.snappy]);const B=F.interpolate({inputRange:[0,1],outputRange:[0,1]}),W=x??(0,_FieldBase.fieldTextAsString)(n),L=!0===c||(0,_FieldBase.hasFieldText)(c),P=M?q:a?k.colors.border.primary:L?k.colors.field.borderError:k.colors.border.primary,D=M?q:a?k.colors.surface.disabled:"transparent",O=a&&!M?k.colors.text.disabled:toneOnColor(k,p),V=Math.round(.72*R),I=Math.round(.55*R),A=Math.max(2,Math.round(.12*R)),z=(0,_jsxRuntime.jsxs)(_reactNative.Pressable,{ref:r,onPress:e=>{if(a)return;const r=(0,_hapticUtils.resolveHaptic)(_,"selection");r&&(0,_hapticUtils.triggerHaptic)(r),C(!w),v.onPressOut?.(e)},disabled:a,accessibilityRole:"checkbox",accessibilityLabel:W,accessibilityHint:v.accessibilityHint??(0,_FieldBase.fieldTextAsString)(l),accessibilityState:{checked:o?"mixed":w,disabled:a},"aria-checked":o?"mixed":w,"aria-disabled":a,testID:j,hitSlop:6,...v,style:({pressed:e})=>[S.row,(0,_ChoiceText.hasChoiceDetail)(l,c)?S.rowTop:null,(0,_FieldBase.hasFieldText)(d)?S.rowShrink:null,{opacity:a?.55:e?.85:1},y,b],children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:[S.box,{width:R,height:R,borderWidth:T,borderRadius:k.radius.xs,..._corners.smoothCorners,borderColor:P,backgroundColor:D},f],children:(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:[S.glyphWrap,{opacity:F,transform:[{scale:B}]}],children:o?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[{width:I,height:A,borderRadius:A/2,..._corners.smoothCorners,backgroundColor:O},m]}):(0,_jsxRuntime.jsx)(_reactNativeSvg.default,{width:V,height:V,viewBox:"0 0 24 24",children:(0,_jsxRuntime.jsx)(_reactNativeSvg.Path,{d:"M5 12.5l4.5 4.5L19 7.5",stroke:O,strokeWidth:3,strokeLinecap:"round",strokeLinejoin:"round",fill:"none"})})})}),(0,_jsxRuntime.jsx)(_ChoiceText.ChoiceText,{label:n,description:l,error:c,disabled:a,labelLines:u||void 0,descriptionLines:u||void 0,style:{marginLeft:N},labelStyle:g})]});return(0,_FieldBase.hasFieldText)(d)?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[S.helpRow,(0,_ChoiceText.hasChoiceDetail)(l,c)?S.rowTop:null],children:[z,(0,_jsxRuntime.jsx)(_reactNative.View,{style:[S.help,{marginLeft:k.spacing.xs}],children:d})]}):z});Checkbox.displayName="Checkbox";const buildStyles=e=>_reactNative.StyleSheet.create({row:{flexDirection:"row",alignItems:"center"},rowTop:{alignItems:"flex-start"},rowShrink:{flexShrink:1},helpRow:{flexDirection:"row",alignItems:"center"},help:{flexShrink:0},box:{alignItems:"center",justifyContent:"center"},glyphWrap:{alignItems:"center",justifyContent:"center"}});var _default=exports.default=Checkbox;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.hasChoiceDetail=exports.ChoiceText=void 0;var _reactNative=require("react-native"),_index=require("../../theme/index.js"),_FieldBase=require("./FieldBase.js"),_jsxRuntime=require("react/jsx-runtime");const hasChoiceDetail=(e,i)=>(0,_FieldBase.hasFieldText)(e)||(0,_FieldBase.hasFieldText)(i);exports.hasChoiceDetail=hasChoiceDetail;const ChoiceText=({label:e,description:i,error:s,disabled:t=!1,labelLines:l,descriptionLines:r,style:o,labelStyle:a})=>{const n=(0,_index.useTheme)();if(!(0,_FieldBase.hasFieldText)(e)&&!(0,_FieldBase.hasFieldText)(i)&&!(0,_FieldBase.hasFieldText)(s))return null;const c=n.typography.fontSize.sm;return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[styles.column,o],children:[(0,_FieldBase.hasFieldText)(e)?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[{color:t?n.colors.text.disabled:n.colors.text.primary,fontSize:n.typography.fontSize.base,...(0,_index.fontFor)(n,"normal")},a],numberOfLines:l,children:e}):null,(0,_FieldBase.hasFieldText)(i)?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:{color:t?n.colors.text.disabled:n.colors.text.secondary,fontSize:c,marginTop:n.spacing.xs/2,...(0,_index.fontFor)(n,"normal")},numberOfLines:r,children:i}):null,(0,_FieldBase.hasFieldText)(s)?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[styles.errorRow,{marginTop:n.spacing.xs,columnGap:n.spacing.xs}],accessibilityLiveRegion:"polite",children:[(0,_jsxRuntime.jsx)(_FieldBase.FieldErrorGlyph,{size:c,color:n.colors.field.message}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:{flexShrink:1,color:n.colors.field.message,fontSize:c,...(0,_index.fontFor)(n,"normal")},children:s})]}):null]})};exports.ChoiceText=ChoiceText;const styles=_reactNative.StyleSheet.create({column:{flexShrink:1},errorRow:{flexDirection:"row",alignItems:"center"}});
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.hasChoiceDetail=exports.ChoiceText=void 0;var _reactNative=require("react-native"),_index=require("../../theme/index.js"),_Notation=require("../Notation/Notation.js"),_FieldBase=require("./FieldBase.js"),_jsxRuntime=require("react/jsx-runtime");const hasChoiceDetail=(e,t)=>(0,_FieldBase.hasFieldText)(e)||(0,_FieldBase.hasFieldText)(t);exports.hasChoiceDetail=hasChoiceDetail;const ChoiceText=({label:e,description:t,error:i,disabled:o=!1,labelLines:s,descriptionLines:n,style:a,labelStyle:l})=>{const r=(0,_index.useTheme)(),x=o?r.colors.text.disabled:r.colors.text.primary,c=o?r.colors.text.disabled:r.colors.text.secondary,d=r.typography.fontSize.sm,_=(0,_Notation.useNotationInk)(l,r.typography.fontSize.base,x),h=(0,_Notation.useNotationInk)(void 0,d,c),u=(0,_Notation.useNotationInk)(void 0,d,r.colors.field.message);return(0,_FieldBase.hasFieldText)(e)||(0,_FieldBase.hasFieldText)(t)||(0,_FieldBase.hasFieldText)(i)?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[styles.column,a],children:[(0,_FieldBase.hasFieldText)(e)?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[{color:x,fontSize:r.typography.fontSize.base,...(0,_index.fontFor)(r,"normal")},l],numberOfLines:s,children:(0,_jsxRuntime.jsx)(_Notation.NotationInkContext.Provider,{value:_,children:e})}):null,(0,_FieldBase.hasFieldText)(t)?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:{color:c,fontSize:d,marginTop:r.spacing.xs/2,...(0,_index.fontFor)(r,"normal")},numberOfLines:n,children:(0,_jsxRuntime.jsx)(_Notation.NotationInkContext.Provider,{value:h,children:t})}):null,(0,_FieldBase.hasFieldText)(i)?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[styles.errorRow,{marginTop:r.spacing.xs,columnGap:r.spacing.xs}],accessibilityLiveRegion:"polite",children:[(0,_jsxRuntime.jsx)(_FieldBase.FieldErrorGlyph,{size:d,color:r.colors.field.message}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:{flexShrink:1,color:r.colors.field.message,fontSize:d,...(0,_index.fontFor)(r,"normal")},children:(0,_jsxRuntime.jsx)(_Notation.NotationInkContext.Provider,{value:u,children:i})})]}):null]}):null};exports.ChoiceText=ChoiceText;const styles=_reactNative.StyleSheet.create({column:{flexShrink:1},errorRow:{flexDirection:"row",alignItems:"center"}});
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.resolveVariantColors=exports.resolveFieldTextStyle=exports.resolveFieldSize=exports.pickRepresentativeBorderColor=exports.hasFieldText=exports.fieldTextAsString=exports.default=exports.RequiredPlaceholder=exports.RequiredMark=exports.FieldMessage=exports.FieldLabel=exports.FieldErrorGlyph=exports.FieldBase=void 0;var _react=require("react"),_reactNative=require("react-native"),_index=require("../../theme/index.js"),_ariaState=require("../../utils/ariaState.js"),_corners=require("../../utils/corners.js"),_defaultIcons=require("../AppIcon/defaultIcons.js"),_Notation=require("../Notation/Notation.js"),_SquircleFill=require("../SquircleFill/SquircleFill.js"),_jsxRuntime=require("react/jsx-runtime");const expandColorSides=e=>"string"==typeof e?{top:e,right:e,bottom:e,left:e}:{top:e.top??"transparent",right:e.right??"transparent",bottom:e.bottom??"transparent",left:e.left??"transparent"},expandWidthSides=e=>"number"==typeof e?{top:e,right:e,bottom:e,left:e}:{top:e.top??0,right:e.right??0,bottom:e.bottom??0,left:e.left??0},pickRepresentativeBorderColor=e=>{for(const t of["bottom","top","left","right"]){const r=e[t];if(r&&"transparent"!==r)return r}return e.bottom};exports.pickRepresentativeBorderColor=pickRepresentativeBorderColor;const resolveFieldTextStyle=(e,t={})=>{const{disabled:r=!1}=t,o=e.components.field,i=e.colors.field;return{color:r?o?.disabledTextColor??i.textDisabled:o?.textColor??i.text,placeholderColor:o?.placeholderColor??(r?i.placeholderDisabled:i.placeholder),weightStyle:o?.fontWeight?{fontWeight:o.fontWeight}:(0,_index.fontFor)(e,"normal")}};exports.resolveFieldTextStyle=resolveFieldTextStyle;const RequiredMark=()=>{const e=(0,_index.useTheme)(),t=e.components.field;return(0,_jsxRuntime.jsx)(_reactNative.Text,{style:{color:t?.requiredMarkerColor??e.colors.toneText.error},children:` ${t?.requiredMarker??"*"}`})};exports.RequiredMark=RequiredMark;const RequiredPlaceholder=({text:e,color:t,fontSize:r,weightStyle:o,align:i="center",paddingTop:l,textAlign:a})=>(0,_jsxRuntime.jsx)(_reactNative.View,{pointerEvents:"none",style:[_reactNative.StyleSheet.absoluteFill,{justifyContent:"top"===i?"flex-start":"center",paddingTop:l}],children:(0,_jsxRuntime.jsxs)(_reactNative.Text,{accessible:!1,numberOfLines:1,style:{color:t,fontSize:r,...o,includeFontPadding:!1,textAlign:a},children:[e,(0,_jsxRuntime.jsx)(RequiredMark,{})]})});exports.RequiredPlaceholder=RequiredPlaceholder;const FieldErrorGlyph=({size:e,color:t})=>{const r=(0,_index.useTheme)(),o=r.icons?.error??_defaultIcons.defaultIcons.error;return(0,_jsxRuntime.jsx)(_jsxRuntime.Fragment,{children:o({size:e,color:t})})};exports.FieldErrorGlyph=FieldErrorGlyph;const hasFieldText=e=>null!=e&&!1!==e&&!0!==e&&""!==e;exports.hasFieldText=hasFieldText;const fieldTextAsString=e=>"string"==typeof e?e:void 0;exports.fieldTextAsString=fieldTextAsString;const FieldLabel=({children:e,size:t="md",required:r=!1,help:o,color:i,style:l})=>{const a=(0,_index.useTheme)(),s=resolveFieldSize(a,t),n=hasFieldText(o),d=_reactNative.StyleSheet.flatten(l),c=d?.fontSize??s.labelFontSize,u=d?.color??i??a.colors.field.label,b=(0,_react.useMemo)(()=>({fontSize:c,color:u}),[c,u]),p=(0,_jsxRuntime.jsxs)(_reactNative.Text,{style:[familyStyles.label,{color:i??a.colors.field.label,fontSize:s.labelFontSize,...(0,_index.fontFor)(a,"semibold"),marginBottom:n?0:s.labelGap},n?familyStyles.labelShrink:null,l],children:[(0,_jsxRuntime.jsx)(_Notation.NotationInkContext.Provider,{value:b,children:e}),r?(0,_jsxRuntime.jsx)(RequiredMark,{}):null]});return n?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[familyStyles.labelRow,{marginBottom:s.labelGap}],children:[p,(0,_jsxRuntime.jsx)(_reactNative.View,{style:[familyStyles.help,{marginLeft:a.spacing.xs}],children:o})]}):p};exports.FieldLabel=FieldLabel;const FieldMessage=({text:e,error:t=!1,size:r="md",style:o})=>{const i=(0,_index.useTheme)(),l=resolveFieldSize(i,r);if(!hasFieldText(e))return null;const a=t?i.colors.field.message:i.colors.text.secondary;return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[familyStyles.messageRow,{marginTop:l.messageGap,columnGap:i.spacing.xs+2}],accessibilityLiveRegion:t?"polite":"none",children:[t?(0,_jsxRuntime.jsx)(FieldErrorGlyph,{size:l.messageFontSize,color:a}):null,(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[familyStyles.messageText,{color:a,fontSize:l.messageFontSize,...(0,_index.fontFor)(i,"normal")},o],children:e})]})};exports.FieldMessage=FieldMessage;const familyStyles=_reactNative.StyleSheet.create({label:{includeFontPadding:!1},labelShrink:{flexShrink:1},labelRow:{flexDirection:"row",alignItems:"center"},help:{flexShrink:0,alignItems:"center",justifyContent:"center"},messageRow:{flexDirection:"row",alignItems:"center"},messageText:{flexShrink:1,includeFontPadding:!1}}),resolveFieldSize=(e,t)=>{const r=e.components.field?.[t],o=DEFAULT_SIZES[t];return{paddingHorizontal:r?.paddingHorizontal??o.paddingHorizontal,paddingVertical:r?.paddingVertical??o.paddingVertical,minHeight:r?.minHeight??o.minHeight,fontSize:r?.fontSize??o.fontSize,borderRadius:r?.borderRadius??o.borderRadius,iconSize:r?.iconSize??o.iconSize,labelFontSize:r?.labelFontSize??o.labelFontSize,labelGap:r?.labelGap??o.labelGap,messageFontSize:r?.messageFontSize??o.messageFontSize,messageGap:r?.messageGap??o.messageGap}};exports.resolveFieldSize=resolveFieldSize;const DEFAULT_SIZES={sm:{paddingHorizontal:12,paddingVertical:10,minHeight:38,fontSize:13,borderRadius:10,iconSize:14,labelFontSize:11,labelGap:4,messageFontSize:11,messageGap:2},md:{paddingHorizontal:14,paddingVertical:13,minHeight:44,fontSize:14,borderRadius:10,iconSize:16,labelFontSize:12,labelGap:4,messageFontSize:12,messageGap:2},lg:{paddingHorizontal:16,paddingVertical:15,minHeight:52,fontSize:16,borderRadius:10,iconSize:18,labelFontSize:13,labelGap:4,messageFontSize:13,messageGap:2}},resolveVariantColors=(e,t,r)=>{const o=e.components.field?.[t],i=e.colors.field;let l,a,s,n,d;"outlined"===t?(l=i.background,a=i.backgroundFocused,s=i.backgroundDisabled,n=i.border,d=e.colors.border.width):"underline"===t?(l="transparent",a=void 0,s="transparent",n={bottom:i.border},d={bottom:e.colors.border.width}):(l=i.background,a=void 0,s=i.backgroundDisabled,n="transparent",d=0);const wrapToIdleShape=e=>"string"==typeof n?e:{bottom:e},c=expandColorSides(r?.borderIdle??o?.borderIdle??n),u=expandColorSides(r?.borderFocused??o?.borderFocused??wrapToIdleShape(i.borderFocused)),b=expandColorSides(r?.borderError??o?.borderError??wrapToIdleShape(i.borderError)),p=expandColorSides(r?.borderDisabled??o?.borderDisabled??n),g=expandWidthSides(r?.borderWidth??o?.borderWidth??d);return{backgroundIdleEmpty:r?.backgroundIdleEmpty??o?.backgroundIdleEmpty??l,backgroundIdleFilled:r?.backgroundIdleFilled??o?.backgroundIdleFilled??r?.backgroundIdleEmpty??o?.backgroundIdleEmpty??l,backgroundFocused:r?.backgroundFocused??o?.backgroundFocused??a,backgroundError:r?.backgroundError??o?.backgroundError??void 0,backgroundDisabled:r?.backgroundDisabled??o?.backgroundDisabled??s,borderIdle:c,borderFocused:u,borderError:b,borderDisabled:p,borderWidth:g,borderFocusedRepresentative:pickRepresentativeBorderColor(u)}};exports.resolveVariantColors=resolveVariantColors;const FieldBase=e=>{const{size:t="md",variant:r,focused:o=!1,disabled:i=!1,error:l=!1,filled:a=!1,leading:s,leadingDivider:n=!1,trailing:d,slotAlign:c="center",slotLineHeight:u,topNotch:b,children:p,onPress:g,pressFeedback:m=!0,minHeight:x,maxHeight:h,width:f,height:S,paddingHorizontal:F,paddingLeft:_,paddingRight:R,paddingVertical:y,borderRadius:v,borderTopLeftRadius:z,borderTopRightRadius:j,borderBottomLeftRadius:k,borderBottomRightRadius:C,borderWidth:T,borderTopWidth:I,borderRightWidth:N,borderBottomWidth:w,borderLeftWidth:q,gap:E,fillOverrides:V,style:L,testID:H,accessibilityRole:D,accessibilityLabel:B,accessibilityState:G,accessibilityHint:W}=e,M=(0,_index.useTheme)(),A=(0,_react.useMemo)(()=>buildStyles(),[]),P=r??M.components.field?.defaultVariant??"outlined",O=resolveFieldSize(M,t),U=(0,_react.useMemo)(()=>resolveVariantColors(M,P,V),[M,P,V]),Z=l?2:o?1:0,$=(0,_react.useRef)((0,_index.createAnimatedValue)(Z)).current;(0,_react.useEffect)(()=>{const e=_reactNative.Animated.timing($,{toValue:Z,duration:M.motion.duration.fast,easing:_reactNative.Easing.bezier(...M.motion.easing.standard),useNativeDriver:!1});return e.start(),()=>e.stop()},[Z,$,M.motion.duration.fast,M.motion.easing.standard]);const J=[0,1,2],K=a?U.backgroundIdleFilled:U.backgroundIdleEmpty,Q=U.backgroundFocused??K,X=U.backgroundError??K,Y=i?U.backgroundDisabled:$.interpolate({inputRange:J,outputRange:[K,Q,X]}),ee=U.borderIdle,te=U.borderFocused,re=U.borderError,oe={top:I,right:N,bottom:w,left:q},ie={top:oe.top??T??U.borderWidth.top,right:oe.right??T??U.borderWidth.right,bottom:oe.bottom??T??U.borderWidth.bottom,left:oe.left??T??U.borderWidth.left},le={minHeight:S??x??O.minHeight,maxHeight:h,paddingHorizontal:F??O.paddingHorizontal,paddingVertical:y??O.paddingVertical,paddingLeft:_??F??O.paddingHorizontal,paddingRight:R??F??O.paddingHorizontal,backgroundColor:Y,columnGap:E??M.spacing.md,alignItems:"top"===c?"flex-start":"center"},ae="underline"===P,se=ae?0:v??O.borderRadius,ne=ae?{tl:0,tr:0,bl:0,br:0}:{tl:z??se,tr:j??se,bl:k??se,br:C??se};le.borderTopLeftRadius=ne.tl,le.borderTopRightRadius=ne.tr,le.borderBottomLeftRadius=ne.bl,le.borderBottomRightRadius=ne.br,le.borderCurve=_corners.smoothCorners.borderCurve,le.borderTopWidth=ie.top,le.borderRightWidth=ie.right,le.borderBottomWidth=ie.bottom,le.borderLeftWidth=ie.left;const sideColor=e=>$.interpolate({inputRange:J,outputRange:[ee[e],te[e],re[e]]}),sameOnEverySide=e=>e.top===e.right&&e.top===e.bottom&&e.top===e.left,de=!ae&&ne.tl===ne.tr&&ne.tl===ne.bl&&ne.tl===ne.br&&sameOnEverySide(ie)&&sameOnEverySide(ee)&&sameOnEverySide(te)&&sameOnEverySide(re)&&sameOnEverySide(U.borderDisabled),ce=(0,_SquircleFill.useSquircle)(de,ne.tl);if(ce.active)le.backgroundColor="transparent",le.borderTopColor="transparent",le.borderRightColor="transparent",le.borderBottomColor="transparent",le.borderLeftColor="transparent";else if(i){const e=U.borderDisabled;le.borderTopColor=e.top,le.borderRightColor=e.right,le.borderBottomColor=e.bottom,le.borderLeftColor=e.left}else le.borderTopColor=sideColor("top"),le.borderRightColor=sideColor("right"),le.borderBottomColor=sideColor("bottom"),le.borderLeftColor=sideColor("left");const ue=i?U.borderDisabled.top:sideColor("top"),be=(0,_react.useRef)(Z);be.current=Z,(0,_react.useEffect)(()=>{$.setValue(be.current)},[U,$]),void 0!==f&&(le.width=f),void 0!==S&&(le.height=S);const pe={disabled:i,...G},ge="top"===c,me=ge?{alignSelf:"flex-start",marginTop:Math.max(0,((u??O.iconSize)-O.iconSize)/2)}:null,xe=S??x??O.minHeight,he=(()=>{if(!b)return 0;const e=Math.min(ne.tl,xe/2),t=b.left;return e<=0||t>=e?0:Math.ceil(e-Math.sqrt(e*e-(e-t)*(e-t)))})(),fe=b&&ie.top>0?(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{pointerEvents:"none",style:{position:"absolute",top:-ie.top,left:b.left-ie.left,width:b.width,height:ie.top+he,backgroundColor:Y}}):null,renderInner=e=>(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[ce.active&&ce.size?(0,_jsxRuntime.jsx)(_SquircleFill.SquircleFill,{width:ce.size.width,height:ce.size.height,radius:ne.tl,fill:e&&!i?M.colors.surface.pressed:Y,stroke:ue,strokeWidth:ie.top,outset:ie.top}):null,fe,null!=s?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[A.slot,me],children:s}):null,null!=s&&n?(0,_jsxRuntime.jsx)(_reactNative.View,{pointerEvents:"none",style:[A.divider,me,{height:O.iconSize,backgroundColor:M.colors.field.border}]}):null,(0,_jsxRuntime.jsx)(_reactNative.View,{style:[A.content,ge?A.contentTop:null],children:p}),null!=d?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[A.slot,me],children:d}):null]}),Se=(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{onLayout:ce.onLayout,style:[A.box,le,L],accessibilityRole:D,accessibilityLabel:B,accessibilityHint:W,accessibilityState:pe,...(0,_ariaState.ariaFromState)(pe),testID:H,children:renderInner(!1)});return g&&!m?(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:g,disabled:i,accessible:!1,children:Se}):g?(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:g,disabled:i,accessibilityRole:D??"button",accessibilityLabel:B,accessibilityHint:W,accessibilityState:pe,...(0,_ariaState.ariaFromState)(pe),testID:H,children:({pressed:e})=>(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{onLayout:ce.onLayout,style:[A.box,le,!e||i||ce.active?null:{backgroundColor:M.colors.surface.pressed},L],children:renderInner(e)})}):Se};exports.FieldBase=FieldBase,FieldBase.displayName="FieldBase";const buildStyles=()=>_reactNative.StyleSheet.create({box:{flexDirection:"row",alignItems:"center",overflow:"visible"},slot:{alignItems:"center",justifyContent:"center"},divider:{width:1,alignSelf:"center"},content:{flex:1,flexDirection:"row",alignItems:"center"},contentTop:{alignItems:"flex-start"}});var _default=exports.default=FieldBase;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.resolveVariantColors=exports.resolveFieldTextStyle=exports.resolveFieldSize=exports.pickRepresentativeBorderColor=exports.hasFieldText=exports.fieldTextAsString=exports.default=exports.RequiredPlaceholder=exports.RequiredMark=exports.FieldMessage=exports.FieldLabel=exports.FieldErrorGlyph=exports.FieldBase=void 0;var _react=require("react"),_reactNative=require("react-native"),_index=require("../../theme/index.js"),_ariaState=require("../../utils/ariaState.js"),_corners=require("../../utils/corners.js"),_defaultIcons=require("../AppIcon/defaultIcons.js"),_Notation=require("../Notation/Notation.js"),_SquircleFill=require("../SquircleFill/SquircleFill.js"),_jsxRuntime=require("react/jsx-runtime");const expandColorSides=e=>"string"==typeof e?{top:e,right:e,bottom:e,left:e}:{top:e.top??"transparent",right:e.right??"transparent",bottom:e.bottom??"transparent",left:e.left??"transparent"},expandWidthSides=e=>"number"==typeof e?{top:e,right:e,bottom:e,left:e}:{top:e.top??0,right:e.right??0,bottom:e.bottom??0,left:e.left??0},pickRepresentativeBorderColor=e=>{for(const t of["bottom","top","left","right"]){const r=e[t];if(r&&"transparent"!==r)return r}return e.bottom};exports.pickRepresentativeBorderColor=pickRepresentativeBorderColor;const resolveFieldTextStyle=(e,t={})=>{const{disabled:r=!1}=t,o=e.components.field,i=e.colors.field;return{color:r?o?.disabledTextColor??i.textDisabled:o?.textColor??i.text,placeholderColor:o?.placeholderColor??(r?i.placeholderDisabled:i.placeholder),weightStyle:o?.fontWeight?{fontWeight:o.fontWeight}:(0,_index.fontFor)(e,"normal")}};exports.resolveFieldTextStyle=resolveFieldTextStyle;const RequiredMark=()=>{const e=(0,_index.useTheme)(),t=e.components.field;return(0,_jsxRuntime.jsx)(_reactNative.Text,{style:{color:t?.requiredMarkerColor??e.colors.toneText.error},children:` ${t?.requiredMarker??"*"}`})};exports.RequiredMark=RequiredMark;const RequiredPlaceholder=({text:e,color:t,fontSize:r,weightStyle:o,align:i="center",paddingTop:l,textAlign:a})=>(0,_jsxRuntime.jsx)(_reactNative.View,{pointerEvents:"none",style:[_reactNative.StyleSheet.absoluteFill,{justifyContent:"top"===i?"flex-start":"center",paddingTop:l}],children:(0,_jsxRuntime.jsxs)(_reactNative.Text,{accessible:!1,numberOfLines:1,style:{color:t,fontSize:r,...o,includeFontPadding:!1,textAlign:a},children:[e,(0,_jsxRuntime.jsx)(RequiredMark,{})]})});exports.RequiredPlaceholder=RequiredPlaceholder;const FieldErrorGlyph=({size:e,color:t})=>{const r=(0,_index.useTheme)(),o=r.icons?.error??_defaultIcons.defaultIcons.error;return(0,_jsxRuntime.jsx)(_jsxRuntime.Fragment,{children:o({size:e,color:t})})};exports.FieldErrorGlyph=FieldErrorGlyph;const hasFieldText=e=>null!=e&&!1!==e&&!0!==e&&""!==e;exports.hasFieldText=hasFieldText;const fieldTextAsString=e=>"string"==typeof e?e:void 0;exports.fieldTextAsString=fieldTextAsString;const FieldLabel=({children:e,size:t="md",required:r=!1,help:o,color:i,style:l})=>{const a=(0,_index.useTheme)(),n=resolveFieldSize(a,t),s=hasFieldText(o),d=(0,_Notation.useNotationInk)(l,n.labelFontSize,i??a.colors.field.label),c=(0,_jsxRuntime.jsxs)(_reactNative.Text,{style:[familyStyles.label,{color:i??a.colors.field.label,fontSize:n.labelFontSize,...(0,_index.fontFor)(a,"semibold"),marginBottom:s?0:n.labelGap},s?familyStyles.labelShrink:null,l],children:[(0,_jsxRuntime.jsx)(_Notation.NotationInkContext.Provider,{value:d,children:e}),r?(0,_jsxRuntime.jsx)(RequiredMark,{}):null]});return s?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[familyStyles.labelRow,{marginBottom:n.labelGap}],children:[c,(0,_jsxRuntime.jsx)(_reactNative.View,{style:[familyStyles.help,{marginLeft:a.spacing.xs}],children:o})]}):c};exports.FieldLabel=FieldLabel;const FieldMessage=({text:e,error:t=!1,size:r="md",style:o})=>{const i=(0,_index.useTheme)(),l=resolveFieldSize(i,r),a=t?i.colors.field.message:i.colors.text.secondary,n=(0,_Notation.useNotationInk)(o,l.messageFontSize,a);return hasFieldText(e)?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[familyStyles.messageRow,{marginTop:l.messageGap,columnGap:i.spacing.xs+2}],accessibilityLiveRegion:t?"polite":"none",children:[t?(0,_jsxRuntime.jsx)(FieldErrorGlyph,{size:l.messageFontSize,color:a}):null,(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[familyStyles.messageText,{color:a,fontSize:l.messageFontSize,...(0,_index.fontFor)(i,"normal")},o],children:(0,_jsxRuntime.jsx)(_Notation.NotationInkContext.Provider,{value:n,children:e})})]}):null};exports.FieldMessage=FieldMessage;const familyStyles=_reactNative.StyleSheet.create({label:{includeFontPadding:!1},labelShrink:{flexShrink:1},labelRow:{flexDirection:"row",alignItems:"center"},help:{flexShrink:0,alignItems:"center",justifyContent:"center"},messageRow:{flexDirection:"row",alignItems:"center"},messageText:{flexShrink:1,includeFontPadding:!1}}),resolveFieldSize=(e,t)=>{const r=e.components.field?.[t],o=DEFAULT_SIZES[t];return{paddingHorizontal:r?.paddingHorizontal??o.paddingHorizontal,paddingVertical:r?.paddingVertical??o.paddingVertical,minHeight:r?.minHeight??o.minHeight,fontSize:r?.fontSize??o.fontSize,borderRadius:r?.borderRadius??o.borderRadius,iconSize:r?.iconSize??o.iconSize,labelFontSize:r?.labelFontSize??o.labelFontSize,labelGap:r?.labelGap??o.labelGap,messageFontSize:r?.messageFontSize??o.messageFontSize,messageGap:r?.messageGap??o.messageGap}};exports.resolveFieldSize=resolveFieldSize;const DEFAULT_SIZES={sm:{paddingHorizontal:12,paddingVertical:10,minHeight:38,fontSize:13,borderRadius:10,iconSize:14,labelFontSize:11,labelGap:4,messageFontSize:11,messageGap:2},md:{paddingHorizontal:14,paddingVertical:13,minHeight:44,fontSize:14,borderRadius:10,iconSize:16,labelFontSize:12,labelGap:4,messageFontSize:12,messageGap:2},lg:{paddingHorizontal:16,paddingVertical:15,minHeight:52,fontSize:16,borderRadius:10,iconSize:18,labelFontSize:13,labelGap:4,messageFontSize:13,messageGap:2}},resolveVariantColors=(e,t,r)=>{const o=e.components.field?.[t],i=e.colors.field;let l,a,n,s,d;"outlined"===t?(l=i.background,a=i.backgroundFocused,n=i.backgroundDisabled,s=i.border,d=e.colors.border.width):"underline"===t?(l="transparent",a=void 0,n="transparent",s={bottom:i.border},d={bottom:e.colors.border.width}):(l=i.background,a=void 0,n=i.backgroundDisabled,s="transparent",d=0);const wrapToIdleShape=e=>"string"==typeof s?e:{bottom:e},c=expandColorSides(r?.borderIdle??o?.borderIdle??s),u=expandColorSides(r?.borderFocused??o?.borderFocused??wrapToIdleShape(i.borderFocused)),b=expandColorSides(r?.borderError??o?.borderError??wrapToIdleShape(i.borderError)),p=expandColorSides(r?.borderDisabled??o?.borderDisabled??s),g=expandWidthSides(r?.borderWidth??o?.borderWidth??d);return{backgroundIdleEmpty:r?.backgroundIdleEmpty??o?.backgroundIdleEmpty??l,backgroundIdleFilled:r?.backgroundIdleFilled??o?.backgroundIdleFilled??r?.backgroundIdleEmpty??o?.backgroundIdleEmpty??l,backgroundFocused:r?.backgroundFocused??o?.backgroundFocused??a,backgroundError:r?.backgroundError??o?.backgroundError??void 0,backgroundDisabled:r?.backgroundDisabled??o?.backgroundDisabled??n,borderIdle:c,borderFocused:u,borderError:b,borderDisabled:p,borderWidth:g,borderFocusedRepresentative:pickRepresentativeBorderColor(u)}};exports.resolveVariantColors=resolveVariantColors;const FieldBase=e=>{const{size:t="md",variant:r,focused:o=!1,disabled:i=!1,error:l=!1,filled:a=!1,leading:n,leadingDivider:s=!1,trailing:d,slotAlign:c="center",slotLineHeight:u,topNotch:b,children:p,onPress:g,pressFeedback:m=!0,minHeight:x,maxHeight:h,width:f,height:S,paddingHorizontal:F,paddingLeft:_,paddingRight:R,paddingVertical:y,borderRadius:v,borderTopLeftRadius:j,borderTopRightRadius:z,borderBottomLeftRadius:k,borderBottomRightRadius:C,borderWidth:T,borderTopWidth:N,borderRightWidth:I,borderBottomWidth:w,borderLeftWidth:q,gap:E,fillOverrides:V,style:L,testID:H,accessibilityRole:D,accessibilityLabel:B,accessibilityState:G,accessibilityHint:W}=e,M=(0,_index.useTheme)(),A=(0,_react.useMemo)(()=>buildStyles(),[]),P=r??M.components.field?.defaultVariant??"outlined",O=resolveFieldSize(M,t),U=(0,_react.useMemo)(()=>resolveVariantColors(M,P,V),[M,P,V]),Z=l?2:o?1:0,$=(0,_react.useRef)((0,_index.createAnimatedValue)(Z)).current;(0,_react.useEffect)(()=>{const e=_reactNative.Animated.timing($,{toValue:Z,duration:M.motion.duration.fast,easing:_reactNative.Easing.bezier(...M.motion.easing.standard),useNativeDriver:!1});return e.start(),()=>e.stop()},[Z,$,M.motion.duration.fast,M.motion.easing.standard]);const J=[0,1,2],K=a?U.backgroundIdleFilled:U.backgroundIdleEmpty,Q=U.backgroundFocused??K,X=U.backgroundError??K,Y=i?U.backgroundDisabled:$.interpolate({inputRange:J,outputRange:[K,Q,X]}),ee=U.borderIdle,te=U.borderFocused,re=U.borderError,oe={top:N,right:I,bottom:w,left:q},ie={top:oe.top??T??U.borderWidth.top,right:oe.right??T??U.borderWidth.right,bottom:oe.bottom??T??U.borderWidth.bottom,left:oe.left??T??U.borderWidth.left},le={minHeight:S??x??O.minHeight,maxHeight:h,paddingHorizontal:F??O.paddingHorizontal,paddingVertical:y??O.paddingVertical,paddingLeft:_??F??O.paddingHorizontal,paddingRight:R??F??O.paddingHorizontal,backgroundColor:Y,columnGap:E??M.spacing.md,alignItems:"top"===c?"flex-start":"center"},ae="underline"===P,ne=ae?0:v??O.borderRadius,se=ae?{tl:0,tr:0,bl:0,br:0}:{tl:j??ne,tr:z??ne,bl:k??ne,br:C??ne};le.borderTopLeftRadius=se.tl,le.borderTopRightRadius=se.tr,le.borderBottomLeftRadius=se.bl,le.borderBottomRightRadius=se.br,le.borderCurve=_corners.smoothCorners.borderCurve,le.borderTopWidth=ie.top,le.borderRightWidth=ie.right,le.borderBottomWidth=ie.bottom,le.borderLeftWidth=ie.left;const sideColor=e=>$.interpolate({inputRange:J,outputRange:[ee[e],te[e],re[e]]}),sameOnEverySide=e=>e.top===e.right&&e.top===e.bottom&&e.top===e.left,de=!ae&&se.tl===se.tr&&se.tl===se.bl&&se.tl===se.br&&sameOnEverySide(ie)&&sameOnEverySide(ee)&&sameOnEverySide(te)&&sameOnEverySide(re)&&sameOnEverySide(U.borderDisabled),ce=(0,_SquircleFill.useSquircle)(de,se.tl);if(ce.active)le.backgroundColor="transparent",le.borderTopColor="transparent",le.borderRightColor="transparent",le.borderBottomColor="transparent",le.borderLeftColor="transparent";else if(i){const e=U.borderDisabled;le.borderTopColor=e.top,le.borderRightColor=e.right,le.borderBottomColor=e.bottom,le.borderLeftColor=e.left}else le.borderTopColor=sideColor("top"),le.borderRightColor=sideColor("right"),le.borderBottomColor=sideColor("bottom"),le.borderLeftColor=sideColor("left");const ue=i?U.borderDisabled.top:sideColor("top"),be=(0,_react.useRef)(Z);be.current=Z,(0,_react.useEffect)(()=>{$.setValue(be.current)},[U,$]),void 0!==f&&(le.width=f),void 0!==S&&(le.height=S);const pe={disabled:i,...G},ge="top"===c,me=ge?{alignSelf:"flex-start",marginTop:Math.max(0,((u??O.iconSize)-O.iconSize)/2)}:null,xe=S??x??O.minHeight,he=(()=>{if(!b)return 0;const e=Math.min(se.tl,xe/2),t=b.left;return e<=0||t>=e?0:Math.ceil(e-Math.sqrt(e*e-(e-t)*(e-t)))})(),fe=b&&ie.top>0?(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{pointerEvents:"none",style:{position:"absolute",top:-ie.top,left:b.left-ie.left,width:b.width,height:ie.top+he,backgroundColor:Y}}):null,renderInner=e=>(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[ce.active&&ce.size?(0,_jsxRuntime.jsx)(_SquircleFill.SquircleFill,{width:ce.size.width,height:ce.size.height,radius:se.tl,fill:e&&!i?M.colors.surface.pressed:Y,stroke:ue,strokeWidth:ie.top,outset:ie.top}):null,fe,null!=n?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[A.slot,me],children:n}):null,null!=n&&s?(0,_jsxRuntime.jsx)(_reactNative.View,{pointerEvents:"none",style:[A.divider,me,{height:O.iconSize,backgroundColor:M.colors.field.border}]}):null,(0,_jsxRuntime.jsx)(_reactNative.View,{style:[A.content,ge?A.contentTop:null],children:p}),null!=d?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[A.slot,me],children:d}):null]}),Se=(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{onLayout:ce.onLayout,style:[A.box,le,L],accessibilityRole:D,accessibilityLabel:B,accessibilityHint:W,accessibilityState:pe,...(0,_ariaState.ariaFromState)(pe),testID:H,children:renderInner(!1)});return g&&!m?(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:g,disabled:i,accessible:!1,children:Se}):g?(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:g,disabled:i,accessibilityRole:D??"button",accessibilityLabel:B,accessibilityHint:W,accessibilityState:pe,...(0,_ariaState.ariaFromState)(pe),testID:H,children:({pressed:e})=>(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{onLayout:ce.onLayout,style:[A.box,le,!e||i||ce.active?null:{backgroundColor:M.colors.surface.pressed},L],children:renderInner(e)})}):Se};exports.FieldBase=FieldBase,FieldBase.displayName="FieldBase";const buildStyles=()=>_reactNative.StyleSheet.create({box:{flexDirection:"row",alignItems:"center",overflow:"visible"},slot:{alignItems:"center",justifyContent:"center"},divider:{width:1,alignSelf:"center"},content:{flex:1,flexDirection:"row",alignItems:"center"},contentTop:{alignItems:"flex-start"}});var _default=exports.default=FieldBase;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.useFloatingLabel=exports.FLOATED_LABEL_SCALE=void 0;var _react=require("react"),_reactNative=require("react-native"),_index=require("../../theme/index.js"),_FieldBase=require("./FieldBase.js"),_jsxRuntime=require("react/jsx-runtime");const FLOATED_LABEL_SCALE=exports.FLOATED_LABEL_SCALE=.85,FLOATED_LABEL_LIFT=1,NOTCH_GAP=4,useFloatingLabel=({label:e,enabled:t,floated:i,required:n=!1,variant:a,sizeTokens:r,leadingOffset:o,trailingOffset:s=0,textAlign:l="left",paddingLeft:u,lineHeight:d,restNudge:c=0,floatTrim:g=0,color:_,style:h})=>{const L=(0,_index.useTheme)(),f=(0,_react.useRef)((0,_index.createAnimatedValue)(i?1:0)).current,p=(0,_react.useRef)((0,_index.createAnimatedValue)(i?1:0)).current,m="outlined"===a,[x,A]=(0,_react.useState)(null);return(0,_react.useEffect)(()=>{const e=i?1:0,timing=(t,i)=>_reactNative.Animated.timing(t,{toValue:e,duration:L.motion.duration.fast,easing:_reactNative.Easing.bezier(...L.motion.easing.standard),useNativeDriver:i});m||p.setValue(e);const t=m?_reactNative.Animated.parallel([timing(f,!0),timing(p,!1)]):timing(f,!0);return t.start(),()=>t.stop()},[i,m,f,p,L.motion.duration.fast,L.motion.easing.standard]),(0,_react.useMemo)(()=>{if(!t||!(0,_FieldBase.hasFieldText)(e))return{node:null,topNotch:void 0};const i=d??x?.height??r.fontSize,a=null!=d?r.paddingVertical+c:Math.max(0,(r.minHeight-i)/2),E=-(a+i/2+1-g),v=f.interpolate({inputRange:[0,1],outputRange:[0,E]}),F=f.interpolate({inputRange:[0,1],outputRange:[1,FLOATED_LABEL_SCALE]}),R=-o,O=f.interpolate({inputRange:[0,1],outputRange:[0,R]}),T="right"===l?{right:r.paddingHorizontal+s,transformOrigin:"right center"}:"center"===l?{alignSelf:"center",transformOrigin:"center"}:{left:u+o,transformOrigin:"left center"},S=x?x.width*FLOATED_LABEL_SCALE:0,b=x?"right"===l?x.width-S:"center"===l?(x.width-S)/2:0:0,N=m&&x?{left:x.x+R+b-4,width:p.interpolate({inputRange:[0,1],outputRange:[0,S+8]})}:void 0;return{node:(0,_jsxRuntime.jsxs)(_reactNative.Animated.Text,{pointerEvents:"none",onLayout:e=>{const{x:t,width:i,height:n}=e.nativeEvent.layout;A(e=>e&&e.x===t&&e.width===i&&e.height===n?e:{x:t,width:i,height:n})},style:[styles.label,T,{top:a,color:_,fontSize:r.fontSize,lineHeight:d,...(0,_index.fontFor)(L,"medium"),transform:[{translateX:O},{translateY:v},{scale:F}]},h],children:[e,n?(0,_jsxRuntime.jsx)(_FieldBase.RequiredMark,{}):null]}),topNotch:N}},[t,e,n,m,r,o,s,l,u,d,c,g,_,h,f,p,x,L])};exports.useFloatingLabel=useFloatingLabel;const styles=_reactNative.StyleSheet.create({label:{position:"absolute",zIndex:1}});
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.useFloatingLabel=exports.FLOATED_LABEL_SCALE=void 0;var _react=require("react"),_reactNative=require("react-native"),_index=require("../../theme/index.js"),_Notation=require("../Notation/Notation.js"),_FieldBase=require("./FieldBase.js"),_jsxRuntime=require("react/jsx-runtime");const FLOATED_LABEL_SCALE=exports.FLOATED_LABEL_SCALE=.85,FLOATED_LABEL_LIFT=1,NOTCH_GAP=4,useFloatingLabel=({label:e,enabled:t,floated:i,required:n=!1,variant:a,sizeTokens:r,leadingOffset:o,trailingOffset:l=0,textAlign:s="left",paddingLeft:u,lineHeight:d,restNudge:c=0,floatTrim:_=0,color:g,style:f})=>{const h=(0,_index.useTheme)(),L=(0,_react.useRef)((0,_index.createAnimatedValue)(i?1:0)).current,x=(0,_react.useRef)((0,_index.createAnimatedValue)(i?1:0)).current,p="outlined"===a,[m,A]=(0,_react.useState)(null);return(0,_react.useEffect)(()=>{const e=i?1:0,timing=(t,i)=>_reactNative.Animated.timing(t,{toValue:e,duration:h.motion.duration.fast,easing:_reactNative.Easing.bezier(...h.motion.easing.standard),useNativeDriver:i});p||x.setValue(e);const t=p?_reactNative.Animated.parallel([timing(L,!0),timing(x,!1)]):timing(L,!0);return t.start(),()=>t.stop()},[i,p,L,x,h.motion.duration.fast,h.motion.easing.standard]),(0,_react.useMemo)(()=>{if(!t||!(0,_FieldBase.hasFieldText)(e))return{node:null,topNotch:void 0};const i=d??m?.height??r.fontSize,a=null!=d?r.paddingVertical+c:Math.max(0,(r.minHeight-i)/2),v=-(a+i/2+1-_),E=L.interpolate({inputRange:[0,1],outputRange:[0,v]}),F=L.interpolate({inputRange:[0,1],outputRange:[1,FLOATED_LABEL_SCALE]}),N=-o,S=L.interpolate({inputRange:[0,1],outputRange:[0,N]}),R="right"===s?{right:r.paddingHorizontal+l,transformOrigin:"right center"}:"center"===s?{alignSelf:"center",transformOrigin:"center"}:{left:u+o,transformOrigin:"left center"},O=m?m.width*FLOATED_LABEL_SCALE:0,T=m?"right"===s?m.width-O:"center"===s?(m.width-O)/2:0:0,j=p&&m?{left:m.x+N+T-4,width:x.interpolate({inputRange:[0,1],outputRange:[0,O+8]})}:void 0,b=_reactNative.StyleSheet.flatten(f),z={fontSize:b?.fontSize??r.fontSize,color:b?.color??g};return{node:(0,_jsxRuntime.jsxs)(_reactNative.Animated.Text,{pointerEvents:"none",onLayout:e=>{const{x:t,width:i,height:n}=e.nativeEvent.layout;A(e=>e&&e.x===t&&e.width===i&&e.height===n?e:{x:t,width:i,height:n})},style:[styles.label,R,{top:a,color:g,fontSize:r.fontSize,lineHeight:d,...(0,_index.fontFor)(h,"medium"),transform:[{translateX:S},{translateY:E},{scale:F}]},f],children:[(0,_jsxRuntime.jsx)(_Notation.NotationInkContext.Provider,{value:z,children:e}),n?(0,_jsxRuntime.jsx)(_FieldBase.RequiredMark,{}):null]}),topNotch:j}},[t,e,n,p,r,o,l,s,u,d,c,_,g,f,L,x,m,h])};exports.useFloatingLabel=useFloatingLabel;const styles=_reactNative.StyleSheet.create({label:{position:"absolute",zIndex:1}});
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.FormField=void 0;var _react=_interopRequireWildcard(require("react")),_reactNative=require("react-native"),_FormContext=require("../../form/FormContext.js"),_index=require("../../theme/index.js"),_index2=require("../FieldBase/index.js"),_jsxRuntime=require("react/jsx-runtime");function _interopRequireWildcard(e,t){if("function"==typeof WeakMap)var r=new WeakMap,i=new WeakMap;return(_interopRequireWildcard=function(e,t){if(!t&&e&&e.__esModule)return e;var n,l,o={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return o;if(n=t?i:r){if(n.has(e))return n.get(e);n.set(e,o)}for(const t in e)"default"!==t&&{}.hasOwnProperty.call(e,t)&&((l=(n=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,t))&&(l.get||l.set)?n(o,t,l):o[t]=e[t]);return o})(e,t)}const FormField=exports.FormField=(0,_react.forwardRef)((e,t)=>{const{label:r,help:i,helperText:n,error:l,required:o=!1,name:a,children:s,layout:u="stacked",helperLines:c,labelStyle:d,helperStyle:x,errorStyle:p,containerStyle:f,inputContainerStyle:_,accessibilityLabel:m,testID:h}=e,y=(0,_index.useTheme)(),F=(0,_react.useMemo)(()=>buildStyles(y),[y]),v=(0,_FormContext.useOptionalFormContext)(),b=null!=a&&null!=v,j=b?v.getFieldProps(a):null,S="function"==typeof s,g=b?S?j?.error:void 0:l,R=(0,_index2.fieldTextAsString)(b?j?.error:l),T=(0,_react.useRef)((0,_index.createAnimatedValue)(g?1:0)).current;(0,_react.useEffect)(()=>{const e=_reactNative.Animated.timing(T,{toValue:g?1:0,duration:y.motion.duration.fast,useNativeDriver:!0});return e.start(),()=>e.stop()},[g,T,y.motion.duration.fast]);const w=(0,_react.useMemo)(()=>{if(m)return m;const e=(0,_index2.fieldTextAsString)(r);return e?R?`${e}, error: ${R}`:e:void 0},[m,r,R]),k=(0,_index2.hasFieldText)(r),q=(0,_jsxRuntime.jsxs)(_reactNative.Text,{style:[F.label,"inline"!==u||(0,_index2.hasFieldText)(i)?null:F.labelInline,(0,_index2.hasFieldText)(i)?F.labelShrink:null,d],children:[r,o?(0,_jsxRuntime.jsx)(_index2.RequiredMark,{}):null]}),N=k?(0,_index2.hasFieldText)(i)?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[F.labelRow,"inline"===u?F.labelInline:null],children:[q,(0,_jsxRuntime.jsx)(_reactNative.View,{style:[F.help,{marginLeft:y.spacing.xs}],children:i})]}):q:null,I="inline"===u?F.inputInline:F.inputStacked,W=(0,_index2.hasFieldText)(g),C=!W&&(0,_index2.hasFieldText)(n),L=(()=>{if(S)return j?s(j):null;if(b&&j&&_react.default.isValidElement(s)){const e=s,t=e.props.onChangeText,r=e.props.onBlur,i=e.props.onFocus;return _react.default.cloneElement(e,{value:j.value,onChangeText:e=>{j.onChangeText(e),t?.(e)},onBlur:e=>{j.onBlur(),r?.(e)},onFocus:e=>{j.onFocus(),i?.(e)},error:j.error,ref:e=>v.registerField(a,e??null)})}return s})(),M=o&&!k&&_react.default.isValidElement(L)?_react.default.cloneElement(L,{required:!0}):L;return(0,_jsxRuntime.jsxs)(_reactNative.View,{ref:t,style:["inline"===u?F.rootInline:F.rootStacked,f],accessibilityLabel:w,accessibilityHint:R||void 0,testID:h,children:[N,(0,_jsxRuntime.jsx)(_reactNative.View,{style:[I,_],children:M}),C?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[F.helper,x],numberOfLines:c||void 0,children:n}):null,W?(0,_jsxRuntime.jsx)(_reactNative.Animated.Text,{style:[F.error,{opacity:T},p],numberOfLines:c||void 0,accessibilityLiveRegion:"polite",children:g}):null]})});FormField.displayName="FormField";const buildStyles=e=>_reactNative.StyleSheet.create({rootStacked:{flexDirection:"column",gap:e.spacing.xs},rootInline:{flexDirection:"row",alignItems:"center",flexWrap:"wrap",gap:e.spacing.xs},label:{fontSize:e.typography.fontSize.sm,...(0,_index.fontFor)(e,"medium"),color:e.colors.text.secondary},labelShrink:{flexShrink:1},labelRow:{flexDirection:"row",alignItems:"center"},help:{flexShrink:0},labelInline:{width:e.components.formField?.inlineLabelWidth??"35%"},inputStacked:{width:"100%"},inputInline:{flex:1,minWidth:0},helper:{fontSize:e.typography.fontSize.sm,color:e.colors.text.tertiary},error:{fontSize:e.typography.fontSize.sm,color:e.colors.toneText.error}});var _default=exports.default=FormField;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.FormField=void 0;var _react=_interopRequireWildcard(require("react")),_reactNative=require("react-native"),_FormContext=require("../../form/FormContext.js"),_index=require("../../theme/index.js"),_index2=require("../FieldBase/index.js"),_Notation=require("../Notation/Notation.js"),_jsxRuntime=require("react/jsx-runtime");function _interopRequireWildcard(e,t){if("function"==typeof WeakMap)var r=new WeakMap,i=new WeakMap;return(_interopRequireWildcard=function(e,t){if(!t&&e&&e.__esModule)return e;var n,o,l={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return l;if(n=t?i:r){if(n.has(e))return n.get(e);n.set(e,l)}for(const t in e)"default"!==t&&{}.hasOwnProperty.call(e,t)&&((o=(n=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,t))&&(o.get||o.set)?n(l,t,o):l[t]=e[t]);return l})(e,t)}const FormField=exports.FormField=(0,_react.forwardRef)((e,t)=>{const{label:r,help:i,helperText:n,error:o,required:l=!1,name:a,children:s,layout:u="stacked",helperLines:c,labelStyle:d,helperStyle:x,errorStyle:_,containerStyle:p,inputContainerStyle:f,accessibilityLabel:m,testID:h}=e,y=(0,_index.useTheme)(),v=(0,_react.useMemo)(()=>buildStyles(y),[y]),j=(0,_FormContext.useOptionalFormContext)(),F=null!=a&&null!=j,S=F?j.getFieldProps(a):null,N="function"==typeof s,b=F?N?S?.error:void 0:o,g=(0,_index2.fieldTextAsString)(F?S?.error:o),R=(0,_react.useRef)((0,_index.createAnimatedValue)(b?1:0)).current;(0,_react.useEffect)(()=>{const e=_reactNative.Animated.timing(R,{toValue:b?1:0,duration:y.motion.duration.fast,useNativeDriver:!0});return e.start(),()=>e.stop()},[b,R,y.motion.duration.fast]);const k=(0,_react.useMemo)(()=>{if(m)return m;const e=(0,_index2.fieldTextAsString)(r);return e?g?`${e}, error: ${g}`:e:void 0},[m,r,g]),T=(0,_Notation.useNotationInk)(d,y.typography.fontSize.sm,y.colors.text.secondary),I=(0,_Notation.useNotationInk)(x,y.typography.fontSize.sm,y.colors.text.tertiary),w=(0,_Notation.useNotationInk)(_,y.typography.fontSize.sm,y.colors.toneText.error),q=(0,_index2.hasFieldText)(r),C=(0,_jsxRuntime.jsxs)(_reactNative.Text,{style:[v.label,"inline"!==u||(0,_index2.hasFieldText)(i)?null:v.labelInline,(0,_index2.hasFieldText)(i)?v.labelShrink:null,d],children:[(0,_jsxRuntime.jsx)(_Notation.NotationInkContext.Provider,{value:T,children:r}),l?(0,_jsxRuntime.jsx)(_index2.RequiredMark,{}):null]}),z=q?(0,_index2.hasFieldText)(i)?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[v.labelRow,"inline"===u?v.labelInline:null],children:[C,(0,_jsxRuntime.jsx)(_reactNative.View,{style:[v.help,{marginLeft:y.spacing.xs}],children:i})]}):C:null,W="inline"===u?v.inputInline:v.inputStacked,L=(0,_index2.hasFieldText)(b),M=!L&&(0,_index2.hasFieldText)(n),O=(()=>{if(N)return S?s(S):null;if(F&&S&&_react.default.isValidElement(s)){const e=s,t=e.props.onChangeText,r=e.props.onBlur,i=e.props.onFocus;return _react.default.cloneElement(e,{value:S.value,onChangeText:e=>{S.onChangeText(e),t?.(e)},onBlur:e=>{S.onBlur(),r?.(e)},onFocus:e=>{S.onFocus(),i?.(e)},error:S.error,ref:e=>j.registerField(a,e??null)})}return s})(),P=l&&!q&&_react.default.isValidElement(O)?_react.default.cloneElement(O,{required:!0}):O;return(0,_jsxRuntime.jsxs)(_reactNative.View,{ref:t,style:["inline"===u?v.rootInline:v.rootStacked,p],accessibilityLabel:k,accessibilityHint:g||void 0,testID:h,children:[z,(0,_jsxRuntime.jsx)(_reactNative.View,{style:[W,f],children:P}),M?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[v.helper,x],numberOfLines:c||void 0,children:(0,_jsxRuntime.jsx)(_Notation.NotationInkContext.Provider,{value:I,children:n})}):null,L?(0,_jsxRuntime.jsx)(_reactNative.Animated.Text,{style:[v.error,{opacity:R},_],numberOfLines:c||void 0,accessibilityLiveRegion:"polite",children:(0,_jsxRuntime.jsx)(_Notation.NotationInkContext.Provider,{value:w,children:b})}):null]})});FormField.displayName="FormField";const buildStyles=e=>_reactNative.StyleSheet.create({rootStacked:{flexDirection:"column",gap:e.spacing.xs},rootInline:{flexDirection:"row",alignItems:"center",flexWrap:"wrap",gap:e.spacing.xs},label:{fontSize:e.typography.fontSize.sm,...(0,_index.fontFor)(e,"medium"),color:e.colors.text.secondary},labelShrink:{flexShrink:1},labelRow:{flexDirection:"row",alignItems:"center"},help:{flexShrink:0},labelInline:{width:e.components.formField?.inlineLabelWidth??"35%"},inputStacked:{width:"100%"},inputInline:{flex:1,minWidth:0},helper:{fontSize:e.typography.fontSize.sm,color:e.colors.text.tertiary},error:{fontSize:e.typography.fontSize.sm,color:e.colors.toneText.error}});var _default=exports.default=FormField;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.Input=void 0;var _react=require("react"),_reactNative=require("react-native"),_index=require("../../hooks/index.js"),_index2=require("../../theme/index.js"),_index3=require("../../utils/index.js"),_defaultIcons=require("../AppIcon/defaultIcons.js"),_slotIcon=require("../AppIcon/slotIcon.js"),_index4=require("../Button/index.js"),_FieldBase=require("../FieldBase/FieldBase.js"),_useFloatingLabel=require("../FieldBase/useFloatingLabel.js"),_Notation=require("../Notation/Notation.js"),_jsxRuntime=require("react/jsx-runtime");const multilineMinHeightMap={sm:72,md:92,lg:110},Input=exports.Input=(0,_react.forwardRef)((e,t)=>{const{label:i,help:n,placeholder:o,value:a,onChangeText:r,error:l,helperText:s,type:d="input",secureTextEntry:c=!1,showPasswordToggle:u=!1,disabled:x=!1,multiline:p=!1,leftIcon:f,rightIcon:g,unit:m,unitStyle:_,prefix:v,prefixStyle:h,readOnly:y=!1,action:j,actionStyle:b,size:S="md",variant:R,labelMode:F,required:N=!1,maxLength:w,showCounter:z=!0,textAlign:I,format:T,parse:V,style:B,containerStyle:A,inputStyle:k,labelStyle:C,messageStyle:q,borderRadius:D,onFocus:L,onBlur:H,accessibilityLabel:M,testID:P,editable:E,...O}=e,G=(0,_index2.useTheme)(),W=(0,_react.useMemo)(()=>buildStyles(G),[G]),$=(0,_FieldBase.resolveFieldSize)(G,S),X=multilineMinHeightMap[S],J=Math.round(1.4*$.fontSize),K=R??G.components.input?.defaultVariant??G.components.field?.defaultVariant??"outlined",Q=F??G.components.input?.defaultLabelMode??"top",[U,Y]=(0,_react.useState)(!1),[Z,ee]=(0,_react.useState)(!1),te="password"===d||u||c,ie="password"===d||u,ne="textarea"===d||p,oe=ne?Math.round(.1*$.fontSize):0,ae="string"==typeof a&&a.length>0,re=(0,_FieldBase.hasFieldText)(l),le=!0===l||re,se=(0,_FieldBase.hasFieldText)(s),de=re||!le&&se,ce=(0,_FieldBase.hasFieldText)(i),ue=(0,_FieldBase.hasFieldText)(v),xe=!x&&!1!==E,pe=U||ae||ue,fe=(0,_react.useRef)(null),ge=(0,_react.useMemo)(()=>(0,_index3.mergeRefs)(fe,t),[t]),me=(0,_react.useCallback)(()=>{xe&&fe.current?.focus()},[xe]),_e=ce&&"float"===Q,ve=(0,_react.useRef)((0,_index2.createAnimatedValue)(0)).current,he=(0,_react.useRef)((0,_index2.createAnimatedValue)(de?1:0)).current;(0,_react.useEffect)(()=>{const e=_reactNative.Animated.timing(he,{toValue:de?1:0,duration:G.motion.duration.fast,easing:_reactNative.Easing.bezier(...G.motion.easing.standard),useNativeDriver:!0});return e.start(),()=>e.stop()},[de,he,G.motion.duration.fast,G.motion.easing.standard]);const ye=(0,_index.useReducedMotion)(),je=G.components.input?.shakeOnError??!1,be=(0,_react.useRef)(le);(0,_react.useEffect)(()=>{if(!je)return void(be.current=le);let e;return le&&!be.current&&(ye||((0,_index2.setNativeValue)(ve,0),e=_reactNative.Animated.sequence([_reactNative.Animated.timing(ve,{toValue:1,duration:50,useNativeDriver:!0}),_reactNative.Animated.timing(ve,{toValue:-1,duration:50,useNativeDriver:!0}),_reactNative.Animated.timing(ve,{toValue:1,duration:50,useNativeDriver:!0}),_reactNative.Animated.timing(ve,{toValue:-1,duration:50,useNativeDriver:!0}),_reactNative.Animated.timing(ve,{toValue:0,duration:100,useNativeDriver:!0})]),e.start()),(0,_index3.triggerHaptic)("notificationError")),be.current=le,()=>e?.stop()},[le,ve,je,ye]);const Se=(0,_react.useCallback)(e=>{Y(!0),L?.(e)},[L]),Re=(0,_react.useCallback)(e=>{Y(!1),H?.(e)},[H]),Fe=(0,_react.useCallback)(()=>{(0,_index3.triggerHaptic)("selection"),ee(e=>!e)},[]),Ne=(0,_react.useMemo)(()=>{const e=G.components.input?.fillColors?.[K];if(!e)return;const t={};return void 0!==e.idleEmpty&&(t.backgroundIdleEmpty=e.idleEmpty),void 0!==e.idleFilled&&(t.backgroundIdleFilled=e.idleFilled),void 0!==e.focus&&(t.backgroundFocused=e.focus),void 0!==e.error&&(t.backgroundError=e.error),void 0!==e.disabled&&(t.backgroundDisabled=e.disabled),Object.keys(t).length>0?t:void 0},[G.components.input?.fillColors,K]),we=G.colors.field.caret,ze=D??G.components.input?.borderRadius,Ie=G.components.input?.tintLabelOnFocus??!1,Te=U&&Ie?G.colors.field.borderFocused:G.colors.field.label,Ve=ve.interpolate({inputRange:[-1,0,1],outputRange:[-6,0,6]}),Be=Boolean(g)||Boolean(m)||ie,Ae="underline"===K,ke=f?$.iconSize+G.spacing.md+1+G.spacing.md:0,Ce=(0,_useFloatingLabel.useFloatingLabel)({label:i,enabled:_e,floated:pe,required:N,variant:K,sizeTokens:$,leadingOffset:ke,trailingOffset:Be?$.iconSize+G.spacing.sm:0,textAlign:I,paddingLeft:Ae?0:$.paddingHorizontal,lineHeight:ne?J:void 0,restNudge:oe,floatTrim:ne?2:0,color:Te,style:C}),qe=(0,_FieldBase.resolveFieldTextStyle)(G,{disabled:x}),De=qe.color,Le=qe.placeholderColor,He=N&&!ce&&!ae&&"string"==typeof o&&o.length>0,Me=le?l:s,Pe=z&&"number"==typeof w&&"string"==typeof a?`${a.length} / ${w}`:null,Ee=le?G.colors.field.message:G.colors.text.secondary,Oe=M??(0,_FieldBase.fieldTextAsString)(i)??o,Ge=G.colors.field,We=x?Ge.iconDisabled:U?Ge.iconFocused:Ge.icon,$e={focused:U,disabled:x,error:le,color:We,size:$.iconSize},renderSlot=e=>(0,_slotIcon.renderSlotIcon)(e,$e),Xe=(()=>{if(ie){const e=(Z?G.icons?.eyeOff:G.icons?.eye)??(Z?_defaultIcons.defaultIcons.eyeOff:_defaultIcons.defaultIcons.eye);return(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:Fe,disabled:!xe,hitSlop:8,accessibilityRole:"button",accessibilityLabel:Z?"Hide password":"Show password",children:e({size:$.iconSize,color:We})})}const e=m?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[W.unit,{fontSize:$.fontSize,color:Le},_],children:m}):null,t=g?(0,_jsxRuntime.jsx)(_reactNative.View,{children:renderSlot(g)}):null;return e&&t?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:W.trailingRow,children:[e,t]}):e??t})(),Je=f?(0,_jsxRuntime.jsx)(_reactNative.View,{children:renderSlot(f)}):null,Ke=_reactNative.StyleSheet.flatten(h),Qe=Ke?.fontSize??$.fontSize,Ue=Ke?.color??Le,Ye=(0,_react.useMemo)(()=>({fontSize:Qe,color:Ue}),[Qe,Ue]),Ze=ue?"string"==typeof v||"number"==typeof v?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[W.prefix,{fontSize:$.fontSize,color:Le,marginRight:G.spacing.xs,lineHeight:ne?J:void 0,paddingTop:ne?oe:void 0},h],children:v}):(0,_jsxRuntime.jsx)(_reactNative.View,{style:[W.prefixNode,{marginRight:G.spacing.xs,minHeight:ne?J:void 0,justifyContent:"center",paddingTop:ne?oe:void 0}],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[W.prefix,{fontSize:$.fontSize,color:Le,lineHeight:ne?J:void 0},h],children:(0,_jsxRuntime.jsx)(_Notation.NotationInkContext.Provider,{value:Ye,children:v})})}):null,et=j?(0,_jsxRuntime.jsx)(_index4.Button,{variant:j.variant??"outline",tone:j.tone??"primary",size:S,title:j.label,leftIcon:j.icon,loading:j.loading,disabled:x||j.disabled,onPress:j.onPress,pressAnimation:!1,testID:j.testID,style:[W.action,{minHeight:$.minHeight,alignSelf:ne?"flex-start":"stretch"},b]}):null;return(0,_jsxRuntime.jsxs)(_reactNative.Animated.View,{style:[W.container,{transform:[{translateX:Ve}]},B],children:[ce&&!_e?(0,_jsxRuntime.jsx)(_FieldBase.FieldLabel,{size:S,required:N,help:n,color:Te,style:C,children:i}):null,(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[W.fieldRow,{columnGap:G.spacing.sm,alignItems:ne?"flex-start":"stretch"}],children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:W.fieldWrapper,children:[(0,_jsxRuntime.jsxs)(_FieldBase.FieldBase,{size:S,variant:K,focused:U,disabled:x,error:le,filled:ae,minHeight:ne?X:void 0,borderRadius:ze,fillOverrides:Ne,leading:Je,leadingDivider:null!=f,paddingLeft:Ae?0:void 0,trailing:Xe,slotAlign:ne?"top":"center",slotLineHeight:ne?J:void 0,topNotch:Ce.topNotch,onPress:me,pressFeedback:!1,style:A,children:[Ze,(0,_jsxRuntime.jsxs)(_reactNative.View,{style:W.inputWrap,children:[(0,_jsxRuntime.jsx)(_reactNative.TextInput,{ref:ge,style:[W.input,{color:De,fontSize:$.fontSize,...qe.weightStyle,paddingLeft:Ae?0:void 0,minHeight:ne?X-2*$.paddingVertical:void 0,lineHeight:ne?J:void 0,paddingTop:ne?oe:void 0,textAlignVertical:ne?"top":"center"},k],textAlign:I,placeholder:_e&&!pe||He?void 0:o,placeholderTextColor:Le,value:T&&null!=a?T(a):a,onChangeText:e=>{r&&r(V?V(e):e)},onFocus:Se,onBlur:Re,editable:xe,readOnly:y,secureTextEntry:te&&!Z,multiline:ne,autoCapitalize:te?"none":void 0,autoCorrect:!te&&void 0,maxLength:w,selectionColor:we,accessibilityLabel:Oe,accessibilityState:{disabled:x},"aria-disabled":x,testID:P,...O}),He?(0,_jsxRuntime.jsx)(_FieldBase.RequiredPlaceholder,{text:o,color:Le,fontSize:$.fontSize,weightStyle:qe.weightStyle,align:ne?"top":"center",paddingTop:ne?oe:void 0,textAlign:I}):null]})]}),Ce.node]}),et]}),de||Pe?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[W.footerRow,{marginTop:$.messageGap}],children:[de?(0,_jsxRuntime.jsxs)(_reactNative.Animated.View,{style:[W.messageRow,{columnGap:G.spacing.xs+2,opacity:he}],accessibilityLiveRegion:le?"polite":"none",children:[le?(0,_jsxRuntime.jsx)(_FieldBase.FieldErrorGlyph,{size:$.messageFontSize,color:Ee}):null,(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[W.messageText,{color:Ee,fontSize:$.messageFontSize,...(0,_index2.fontFor)(G,"normal")},q],children:Me})]}):(0,_jsxRuntime.jsx)(_reactNative.View,{style:W.footerSpacer}),Pe?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[W.counterText,{color:G.colors.text.tertiary,fontSize:$.messageFontSize,...(0,_index2.fontFor)(G,"normal")}],children:Pe}):null]}):null]})});Input.displayName="Input";const buildStyles=e=>_reactNative.StyleSheet.create({container:{width:"100%"},fieldRow:{flexDirection:"row"},fieldWrapper:{position:"relative",overflow:"visible",flex:1},action:{flexShrink:0},input:{padding:0,margin:0,includeFontPadding:!1},prefix:{flexShrink:0,includeFontPadding:!1},prefixNode:{flexShrink:0},inputWrap:{flex:1,alignSelf:"stretch",justifyContent:"center"},unit:{includeFontPadding:!1},trailingRow:{flexDirection:"row",alignItems:"center",columnGap:8},footerRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",columnGap:8},footerSpacer:{flex:1},messageRow:{flex:1,flexDirection:"row",alignItems:"center"},messageText:{flexShrink:1,includeFontPadding:!1},counterText:{flexShrink:0,includeFontPadding:!1}});var _default=exports.default=Input;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.Input=void 0;var _react=require("react"),_reactNative=require("react-native"),_index=require("../../hooks/index.js"),_index2=require("../../theme/index.js"),_index3=require("../../utils/index.js"),_defaultIcons=require("../AppIcon/defaultIcons.js"),_slotIcon=require("../AppIcon/slotIcon.js"),_index4=require("../Button/index.js"),_FieldBase=require("../FieldBase/FieldBase.js"),_useFloatingLabel=require("../FieldBase/useFloatingLabel.js"),_Notation=require("../Notation/Notation.js"),_jsxRuntime=require("react/jsx-runtime");const multilineMinHeightMap={sm:72,md:92,lg:110},Input=exports.Input=(0,_react.forwardRef)((e,t)=>{const{label:i,help:n,placeholder:o,value:a,onChangeText:r,error:l,helperText:s,type:d="input",secureTextEntry:c=!1,showPasswordToggle:u=!1,disabled:x=!1,multiline:p=!1,leftIcon:f,rightIcon:g,unit:m,unitStyle:_,prefix:v,prefixStyle:h,readOnly:y=!1,action:j,actionStyle:b,size:S="md",variant:N,labelMode:R,required:F=!1,maxLength:w,showCounter:z=!0,textAlign:I,format:T,parse:V,style:k,containerStyle:B,inputStyle:A,labelStyle:C,messageStyle:q,borderRadius:D,onFocus:L,onBlur:H,accessibilityLabel:P,testID:M,editable:E,...O}=e,G=(0,_index2.useTheme)(),W=(0,_react.useMemo)(()=>buildStyles(G),[G]),$=(0,_FieldBase.resolveFieldSize)(G,S),X=multilineMinHeightMap[S],J=Math.round(1.4*$.fontSize),K=N??G.components.input?.defaultVariant??G.components.field?.defaultVariant??"outlined",Q=R??G.components.input?.defaultLabelMode??"top",[U,Y]=(0,_react.useState)(!1),[Z,ee]=(0,_react.useState)(!1),te="password"===d||u||c,ie="password"===d||u,ne="textarea"===d||p,oe=ne?Math.round(.1*$.fontSize):0,ae="string"==typeof a&&a.length>0,re=(0,_FieldBase.hasFieldText)(l),le=!0===l||re,se=(0,_FieldBase.hasFieldText)(s),de=re||!le&&se,ce=(0,_FieldBase.hasFieldText)(i),ue=(0,_FieldBase.hasFieldText)(v),xe=!x&&!1!==E,pe=U||ae||ue,fe=(0,_react.useRef)(null),ge=(0,_react.useMemo)(()=>(0,_index3.mergeRefs)(fe,t),[t]),me=(0,_react.useCallback)(()=>{xe&&fe.current?.focus()},[xe]),_e=ce&&"float"===Q,ve=(0,_react.useRef)((0,_index2.createAnimatedValue)(0)).current,he=(0,_react.useRef)((0,_index2.createAnimatedValue)(de?1:0)).current;(0,_react.useEffect)(()=>{const e=_reactNative.Animated.timing(he,{toValue:de?1:0,duration:G.motion.duration.fast,easing:_reactNative.Easing.bezier(...G.motion.easing.standard),useNativeDriver:!0});return e.start(),()=>e.stop()},[de,he,G.motion.duration.fast,G.motion.easing.standard]);const ye=(0,_index.useReducedMotion)(),je=G.components.input?.shakeOnError??!1,be=(0,_react.useRef)(le);(0,_react.useEffect)(()=>{if(!je)return void(be.current=le);let e;return le&&!be.current&&(ye||((0,_index2.setNativeValue)(ve,0),e=_reactNative.Animated.sequence([_reactNative.Animated.timing(ve,{toValue:1,duration:50,useNativeDriver:!0}),_reactNative.Animated.timing(ve,{toValue:-1,duration:50,useNativeDriver:!0}),_reactNative.Animated.timing(ve,{toValue:1,duration:50,useNativeDriver:!0}),_reactNative.Animated.timing(ve,{toValue:-1,duration:50,useNativeDriver:!0}),_reactNative.Animated.timing(ve,{toValue:0,duration:100,useNativeDriver:!0})]),e.start()),(0,_index3.triggerHaptic)("notificationError")),be.current=le,()=>e?.stop()},[le,ve,je,ye]);const Se=(0,_react.useCallback)(e=>{Y(!0),L?.(e)},[L]),Ne=(0,_react.useCallback)(e=>{Y(!1),H?.(e)},[H]),Re=(0,_react.useCallback)(()=>{(0,_index3.triggerHaptic)("selection"),ee(e=>!e)},[]),Fe=(0,_react.useMemo)(()=>{const e=G.components.input?.fillColors?.[K];if(!e)return;const t={};return void 0!==e.idleEmpty&&(t.backgroundIdleEmpty=e.idleEmpty),void 0!==e.idleFilled&&(t.backgroundIdleFilled=e.idleFilled),void 0!==e.focus&&(t.backgroundFocused=e.focus),void 0!==e.error&&(t.backgroundError=e.error),void 0!==e.disabled&&(t.backgroundDisabled=e.disabled),Object.keys(t).length>0?t:void 0},[G.components.input?.fillColors,K]),we=G.colors.field.caret,ze=D??G.components.input?.borderRadius,Ie=G.components.input?.tintLabelOnFocus??!1,Te=U&&Ie?G.colors.field.borderFocused:G.colors.field.label,Ve=ve.interpolate({inputRange:[-1,0,1],outputRange:[-6,0,6]}),ke=Boolean(g)||Boolean(m)||ie,Be="underline"===K,Ae=f?$.iconSize+G.spacing.md+1+G.spacing.md:0,Ce=(0,_useFloatingLabel.useFloatingLabel)({label:i,enabled:_e,floated:pe,required:F,variant:K,sizeTokens:$,leadingOffset:Ae,trailingOffset:ke?$.iconSize+G.spacing.sm:0,textAlign:I,paddingLeft:Be?0:$.paddingHorizontal,lineHeight:ne?J:void 0,restNudge:oe,floatTrim:ne?2:0,color:Te,style:C}),qe=(0,_FieldBase.resolveFieldTextStyle)(G,{disabled:x}),De=qe.color,Le=qe.placeholderColor,He=F&&!ce&&!ae&&"string"==typeof o&&o.length>0,Pe=le?l:s,Me=z&&"number"==typeof w&&"string"==typeof a?`${a.length} / ${w}`:null,Ee=le?G.colors.field.message:G.colors.text.secondary,Oe=(0,_Notation.useNotationInk)(q,$.messageFontSize,Ee),Ge=P??(0,_FieldBase.fieldTextAsString)(i)??o,We=G.colors.field,$e=x?We.iconDisabled:U?We.iconFocused:We.icon,Xe={focused:U,disabled:x,error:le,color:$e,size:$.iconSize},renderSlot=e=>(0,_slotIcon.renderSlotIcon)(e,Xe),Je=(()=>{if(ie){const e=(Z?G.icons?.eyeOff:G.icons?.eye)??(Z?_defaultIcons.defaultIcons.eyeOff:_defaultIcons.defaultIcons.eye);return(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:Re,disabled:!xe,hitSlop:8,accessibilityRole:"button",accessibilityLabel:Z?"Hide password":"Show password",children:e({size:$.iconSize,color:$e})})}const e=m?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[W.unit,{fontSize:$.fontSize,color:Le},_],children:m}):null,t=g?(0,_jsxRuntime.jsx)(_reactNative.View,{children:renderSlot(g)}):null;return e&&t?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:W.trailingRow,children:[e,t]}):e??t})(),Ke=f?(0,_jsxRuntime.jsx)(_reactNative.View,{children:renderSlot(f)}):null,Qe=_reactNative.StyleSheet.flatten(h),Ue=Qe?.fontSize??$.fontSize,Ye=Qe?.color??Le,Ze=(0,_react.useMemo)(()=>({fontSize:Ue,color:Ye}),[Ue,Ye]),et=ue?"string"==typeof v||"number"==typeof v?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[W.prefix,{fontSize:$.fontSize,color:Le,marginRight:G.spacing.xs,lineHeight:ne?J:void 0,paddingTop:ne?oe:void 0},h],children:v}):(0,_jsxRuntime.jsx)(_reactNative.View,{style:[W.prefixNode,{marginRight:G.spacing.xs,minHeight:ne?J:void 0,justifyContent:"center",paddingTop:ne?oe:void 0}],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[W.prefix,{fontSize:$.fontSize,color:Le,lineHeight:ne?J:void 0},h],children:(0,_jsxRuntime.jsx)(_Notation.NotationInkContext.Provider,{value:Ze,children:v})})}):null,tt=j?(0,_jsxRuntime.jsx)(_index4.Button,{variant:j.variant??"outline",tone:j.tone??"primary",size:S,title:j.label,leftIcon:j.icon,loading:j.loading,disabled:x||j.disabled,onPress:j.onPress,pressAnimation:!1,testID:j.testID,style:[W.action,{minHeight:$.minHeight,alignSelf:ne?"flex-start":"stretch"},b]}):null;return(0,_jsxRuntime.jsxs)(_reactNative.Animated.View,{style:[W.container,{transform:[{translateX:Ve}]},k],children:[ce&&!_e?(0,_jsxRuntime.jsx)(_FieldBase.FieldLabel,{size:S,required:F,help:n,color:Te,style:C,children:i}):null,(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[W.fieldRow,{columnGap:G.spacing.sm,alignItems:ne?"flex-start":"stretch"}],children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:W.fieldWrapper,children:[(0,_jsxRuntime.jsxs)(_FieldBase.FieldBase,{size:S,variant:K,focused:U,disabled:x,error:le,filled:ae,minHeight:ne?X:void 0,borderRadius:ze,fillOverrides:Fe,leading:Ke,leadingDivider:null!=f,paddingLeft:Be?0:void 0,trailing:Je,slotAlign:ne?"top":"center",slotLineHeight:ne?J:void 0,topNotch:Ce.topNotch,onPress:me,pressFeedback:!1,style:B,children:[et,(0,_jsxRuntime.jsxs)(_reactNative.View,{style:W.inputWrap,children:[(0,_jsxRuntime.jsx)(_reactNative.TextInput,{ref:ge,style:[W.input,{color:De,fontSize:$.fontSize,...qe.weightStyle,paddingLeft:Be?0:void 0,minHeight:ne?X-2*$.paddingVertical:void 0,lineHeight:ne?J:void 0,paddingTop:ne?oe:void 0,textAlignVertical:ne?"top":"center"},A],textAlign:I,placeholder:_e&&!pe||He?void 0:o,placeholderTextColor:Le,value:T&&null!=a?T(a):a,onChangeText:e=>{r&&r(V?V(e):e)},onFocus:Se,onBlur:Ne,editable:xe,readOnly:y,secureTextEntry:te&&!Z,multiline:ne,autoCapitalize:te?"none":void 0,autoCorrect:!te&&void 0,maxLength:w,selectionColor:we,accessibilityLabel:Ge,accessibilityState:{disabled:x},"aria-disabled":x,testID:M,...O}),He?(0,_jsxRuntime.jsx)(_FieldBase.RequiredPlaceholder,{text:o,color:Le,fontSize:$.fontSize,weightStyle:qe.weightStyle,align:ne?"top":"center",paddingTop:ne?oe:void 0,textAlign:I}):null]})]}),Ce.node]}),tt]}),de||Me?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[W.footerRow,{marginTop:$.messageGap}],children:[de?(0,_jsxRuntime.jsxs)(_reactNative.Animated.View,{style:[W.messageRow,{columnGap:G.spacing.xs+2,opacity:he}],accessibilityLiveRegion:le?"polite":"none",children:[le?(0,_jsxRuntime.jsx)(_FieldBase.FieldErrorGlyph,{size:$.messageFontSize,color:Ee}):null,(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[W.messageText,{color:Ee,fontSize:$.messageFontSize,...(0,_index2.fontFor)(G,"normal")},q],children:(0,_jsxRuntime.jsx)(_Notation.NotationInkContext.Provider,{value:Oe,children:Pe})})]}):(0,_jsxRuntime.jsx)(_reactNative.View,{style:W.footerSpacer}),Me?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[W.counterText,{color:G.colors.text.tertiary,fontSize:$.messageFontSize,...(0,_index2.fontFor)(G,"normal")}],children:Me}):null]}):null]})});Input.displayName="Input";const buildStyles=e=>_reactNative.StyleSheet.create({container:{width:"100%"},fieldRow:{flexDirection:"row"},fieldWrapper:{position:"relative",overflow:"visible",flex:1},action:{flexShrink:0},input:{padding:0,margin:0,includeFontPadding:!1},prefix:{flexShrink:0,includeFontPadding:!1},prefixNode:{flexShrink:0},inputWrap:{flex:1,alignSelf:"stretch",justifyContent:"center"},unit:{includeFontPadding:!1},trailingRow:{flexDirection:"row",alignItems:"center",columnGap:8},footerRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",columnGap:8},footerSpacer:{flex:1},messageRow:{flex:1,flexDirection:"row",alignItems:"center"},messageText:{flexShrink:1,includeFontPadding:!1},counterText:{flexShrink:0,includeFontPadding:!1}});var _default=exports.default=Input;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.sym=exports.parseNotation=exports.default=exports.NotationInkContext=exports.Notation=void 0;var _react=require("react"),_reactNative=require("react-native"),_index=require("../../theme/index.js"),_jsxRuntime=require("react/jsx-runtime");const SUBSCRIPTED=/(?<![A-Za-z0-9_])([A-Za-z])_([A-Za-z0-9]+)(?![A-Za-z0-9_])/g,parseNotation=t=>{const e=String(t??""),n=[];let r=0;for(const t of e.matchAll(SUBSCRIPTED)){const o=t.index??0;o>r&&n.push({text:e.slice(r,o)}),n.push({text:t[1],sub:t[2]}),r=o+t[0].length}return r<e.length&&n.push({text:e.slice(r)}),n};exports.parseNotation=parseNotation;const SUB_DROP=.4,NotationInkContext=exports.NotationInkContext=(0,_react.createContext)(null),Subscript=({children:t,color:e})=>{const n=(0,_index.useTheme)(),r=(0,_react.useContext)(NotationInkContext),o=Math.round(.75*(r?.fontSize??n.typography.fontSize.sm));return(0,_jsxRuntime.jsx)(_reactNative.View,{style:{transform:[{translateY:Math.round(.4*o)}]},children:(0,_jsxRuntime.jsx)(_reactNative.Text,{maxFontSizeMultiplier:n.maxFontSizeMultiplier,style:[styles.sub,{fontSize:o,lineHeight:o,color:e??r?.color??n.colors.text.primary,...(0,_index.fontFor)(n,"normal")}],children:t})})},renderNotation=(t,e)=>parseNotation(t).map((t,n)=>t.sub?(0,_jsxRuntime.jsxs)(_react.Fragment,{children:[t.text,(0,_jsxRuntime.jsx)(Subscript,{color:e,children:t.sub})]},n):(0,_jsxRuntime.jsx)(_react.Fragment,{children:t.text},n)),Notation=({text:t,base:e,sub:n,desc:r,color:o,testID:s})=>null!=e?(0,_jsxRuntime.jsxs)(_reactNative.Text,{testID:s,children:[e,n?(0,_jsxRuntime.jsx)(Subscript,{color:o,children:n}):null,r?` ${r}`:null]}):(0,_jsxRuntime.jsx)(_reactNative.Text,{testID:s,children:"string"==typeof t||null==t?renderNotation(t??"",o):t.map((t,e)=>"string"==typeof t?(0,_jsxRuntime.jsx)(_react.Fragment,{children:renderNotation(t,o)},e):(0,_jsxRuntime.jsx)(_react.Fragment,{children:t.verbatim},e))});exports.Notation=Notation;const sym=(t,e,n,r)=>(0,_jsxRuntime.jsx)(Notation,{base:t,sub:e,desc:n,color:r});exports.sym=sym;const styles=_reactNative.StyleSheet.create({sub:{includeFontPadding:!1}});var _default=exports.default=Notation;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.useNotationInk=exports.sym=exports.parseNotation=exports.default=exports.NotationInkContext=exports.Notation=void 0;var _react=require("react"),_reactNative=require("react-native"),_index=require("../../theme/index.js"),_jsxRuntime=require("react/jsx-runtime");const SUBSCRIPTED=/(?<![A-Za-z0-9_])([A-Za-z])_([A-Za-z0-9]+)(?![A-Za-z0-9_])/g,parseNotation=t=>{const e=String(t??""),o=[];let n=0;for(const t of e.matchAll(SUBSCRIPTED)){const r=t.index??0;r>n&&o.push({text:e.slice(n,r)}),o.push({text:t[1],sub:t[2]}),n=r+t[0].length}return n<e.length&&o.push({text:e.slice(n)}),o};exports.parseNotation=parseNotation;const SUB_DROP=.4,NotationInkContext=exports.NotationInkContext=(0,_react.createContext)(null),useNotationInk=(t,e,o)=>{const n=_reactNative.StyleSheet.flatten(t),r=n?.fontSize??e,s=n?.color??o;return(0,_react.useMemo)(()=>({fontSize:r,color:s}),[r,s])};exports.useNotationInk=useNotationInk;const Subscript=({children:t,color:e})=>{const o=(0,_index.useTheme)(),n=(0,_react.useContext)(NotationInkContext),r=Math.round(.75*(n?.fontSize??o.typography.fontSize.sm));return(0,_jsxRuntime.jsx)(_reactNative.View,{style:{transform:[{translateY:Math.round(.4*r)}]},children:(0,_jsxRuntime.jsx)(_reactNative.Text,{maxFontSizeMultiplier:o.maxFontSizeMultiplier,style:[styles.sub,{fontSize:r,lineHeight:r,color:e??n?.color??o.colors.text.primary,...(0,_index.fontFor)(o,"normal")}],children:t})})},renderNotation=(t,e)=>parseNotation(t).map((t,o)=>t.sub?(0,_jsxRuntime.jsxs)(_react.Fragment,{children:[t.text,(0,_jsxRuntime.jsx)(Subscript,{color:e,children:t.sub})]},o):(0,_jsxRuntime.jsx)(_react.Fragment,{children:t.text},o)),Notation=({text:t,base:e,sub:o,desc:n,color:r,testID:s})=>null!=e?(0,_jsxRuntime.jsxs)(_reactNative.Text,{testID:s,children:[e,o?(0,_jsxRuntime.jsx)(Subscript,{color:r,children:o}):null,n?` ${n}`:null]}):(0,_jsxRuntime.jsx)(_reactNative.Text,{testID:s,children:"string"==typeof t||null==t?renderNotation(t??"",r):t.map((t,e)=>"string"==typeof t?(0,_jsxRuntime.jsx)(_react.Fragment,{children:renderNotation(t,r)},e):(0,_jsxRuntime.jsx)(_react.Fragment,{children:t.verbatim},e))});exports.Notation=Notation;const sym=(t,e,o,n)=>(0,_jsxRuntime.jsx)(Notation,{base:t,sub:e,desc:o,color:n});exports.sym=sym;const styles=_reactNative.StyleSheet.create({sub:{includeFontPadding:!1}});var _default=exports.default=Notation;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.OptionSheet=void 0;var _react=require("react"),_reactNative=require("react-native"),_reactNativeGestureHandler=require("react-native-gesture-handler"),_reactNativeKeyboardController=require("react-native-keyboard-controller"),_reactNativeSafeAreaContext=require("react-native-safe-area-context"),_useDragToDismiss=require("../../hooks/useDragToDismiss.js"),_index=require("../../theme/index.js"),_corners=require("../../utils/corners.js"),_defaultIcons=require("../AppIcon/defaultIcons.js"),_ToastProvider=require("../Toast/ToastProvider.js"),_jsxRuntime=require("react/jsx-runtime");const SEARCH_ICON_SIZE=18,OptionSheet=e=>{const{open:t,onClose:i,onAfterClose:r,title:o,options:a,sections:s,renderSectionHeader:n,renderOption:l,alphabetIndex:c=!1,searchPlaceholder:d="Search…",emptyText:u="No options",labelOf:p,getValue:m,disabledOf:h,destructiveOf:g,descriptionOf:x,iconOf:_,isSelected:y,onSelect:b,multi:f=!1,searchable:v=!1,searchSelectionColor:j,accessibilityLabel:R,optionStyle:S,selectedOptionStyle:N,optionTextStyle:T,selectedOptionTextStyle:C,testID:w}=e,k=(0,_index.useTheme)(),I=(0,_reactNativeSafeAreaContext.useSafeAreaInsets)(),V=(0,_react.useMemo)(()=>buildStyles(k),[k]),[z,D]=(0,_react.useState)(""),L=_reactNative.Dimensions.get("window").height,P=Math.round(.7*L),[H,W]=(0,_react.useState)(t),O=(0,_react.useRef)((0,_index.createAnimatedValue)(0)).current,A=(0,_react.useRef)((0,_index.createAnimatedValue)(P)).current,M=(0,_react.useRef)((0,_index.createAnimatedValue)(0)).current,B=(0,_react.useMemo)(()=>_reactNative.Animated.add(A,M),[A,M]);(0,_react.useEffect)(()=>{t&&W(!0)},[t]);const E=(0,_react.useRef)(r);E.current=r;const F=(0,_react.useRef)(H);(0,_react.useEffect)(()=>{F.current&&!H&&"ios"!==_reactNative.Platform.OS&&E.current?.(),F.current=H},[H]),(0,_react.useEffect)(()=>{if(!H)return;t&&(0,_index.setNativeValue)(M,0);const e=t?_reactNative.Animated.parallel([_reactNative.Animated.timing(O,{toValue:1,duration:k.motion.duration.fast,easing:_reactNative.Easing.bezier(...k.motion.easing.standard),useNativeDriver:!1}),_reactNative.Animated.spring(A,{toValue:0,damping:k.motion.spring.snappy.damping,stiffness:k.motion.spring.snappy.stiffness,mass:k.motion.spring.snappy.mass,useNativeDriver:!0})]):_reactNative.Animated.parallel([_reactNative.Animated.timing(O,{toValue:0,duration:k.motion.duration.fast,easing:_reactNative.Easing.bezier(...k.motion.easing.standard),useNativeDriver:!1}),_reactNative.Animated.timing(A,{toValue:P,duration:k.motion.duration.fast,easing:_reactNative.Easing.bezier(...k.motion.easing.accelerate),useNativeDriver:!0})]);return e.start(({finished:e})=>{e&&!t&&W(!1)}),()=>e.stop()},[t,H,O,A,M,P,k.motion.duration.fast,k.motion.easing.standard,k.motion.easing.accelerate,k.motion.spring.snappy]);const{handleGesture:q}=(0,_useDragToDismiss.useDragToDismiss)({drag:M,travel:P,onDismiss:i}),G=(0,_react.useMemo)(()=>_reactNativeGestureHandler.Gesture.Native(),[]),[$,K]=(0,_react.useState)(0),J=(0,_reactNativeKeyboardController.useKeyboardState)(e=>e.height),U=H?Math.max(0,Math.round(J)):0,Y=Math.max(I.top,_reactNative.StatusBar.currentHeight??0)+k.spacing.sm,Z=U>0,Q=Z?Math.max(0,Math.min(P,($>0?$:L)-U-Y)):P;(0,_react.useEffect)(()=>{t||D("")},[t]);const X=(0,_react.useMemo)(()=>{const e=v?z.trim().toLowerCase():"",matches=t=>0===e.length||p(t).toLowerCase().includes(e)||(x(t)??"").toLowerCase().includes(e);if(!s)return a.filter(matches).map(e=>({kind:"option",option:e}));const t=[];return s.forEach((e,i)=>{const r=e.options.filter(matches);if(0!==r.length){t.push({kind:"header",title:e.title});for(const e of r)t.push({kind:"option",option:e,section:i})}}),t},[v,z,a,s,p,x]),ee=(0,_react.useCallback)(()=>{i()},[i]),te=(0,_react.useRef)(null),ie=(0,_react.useMemo)(()=>{const e=new Map;if(!c)return e;let t=0;if(s)for(let e=X.length-1;e>=0;e-=1)if("header"===X[e].kind){t=e+1;break}for(let i=t;i<X.length;i+=1){const t=X[i];if("option"!==t.kind)continue;const r=p(t.option).trim().charAt(0).toUpperCase(),o=/^[A-Z]$/.test(r)?r:"#";e.has(o)||e.set(o,i)}return e},[c,X,s,p]),re=c&&ie.size>0&&0===z.trim().length,oe=(0,_react.useMemo)(()=>[..."ABCDEFGHIJKLMNOPQRSTUVWXYZ",...ie.has("#")?["#"]:[]],[ie]),ae=(0,_react.useCallback)(e=>{const t=ie.get(e);void 0!==t&&te.current?.scrollToIndex({index:t,animated:!0,viewPosition:0})},[ie]),se=(0,_react.useRef)(null),ne=(0,_react.useCallback)(()=>{null!==se.current&&(clearTimeout(se.current),se.current=null)},[]),le=(0,_react.useCallback)(e=>{te.current?.scrollToOffset({offset:e.averageItemLength*e.index,animated:!1}),ne(),se.current=setTimeout(()=>{se.current=null,te.current?.scrollToIndex({index:e.index,animated:!0,viewPosition:0})},50)},[ne]);(0,_react.useEffect)(()=>(H||ne(),ne),[H,ne]);return(0,_jsxRuntime.jsx)(_reactNative.Modal,{visible:H,transparent:!0,animationType:"none",onRequestClose:ee,onDismiss:()=>E.current?.(),statusBarTranslucent:!0,navigationBarTranslucent:!0,children:(0,_jsxRuntime.jsxs)(_reactNativeGestureHandler.GestureHandlerRootView,{collapsable:!1,onLayout:e=>K(e.nativeEvent.layout.height),style:[_reactNative.StyleSheet.absoluteFill,{backgroundColor:k.colors.background.overlay}],children:[(0,_jsxRuntime.jsx)(_reactNative.Pressable,{style:_reactNative.StyleSheet.absoluteFill,onPress:ee,accessibilityRole:"button",accessibilityLabel:"Close picker"}),(0,_jsxRuntime.jsxs)(_reactNative.Animated.View,{testID:w,accessibilityViewIsModal:!0,accessibilityLabel:R??o??"Options",style:[V.sheet,{maxHeight:Q,bottom:U,paddingBottom:Z?16:I.bottom+16,backgroundColor:k.colors.background.elevated,borderTopLeftRadius:k.radius.xl,borderTopRightRadius:k.radius.xl,..._corners.smoothCorners,transform:[{translateY:B}],...k.shadows.xl}],children:[(0,_jsxRuntime.jsx)(_reactNativeGestureHandler.GestureDetector,{gesture:q,children:(0,_jsxRuntime.jsxs)(_reactNative.View,{children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:V.sheetHandleRow,children:(0,_jsxRuntime.jsx)(_reactNative.View,{style:[V.sheetHandle,{backgroundColor:k.components.select?.handleColor??k.components.bottomSheet?.handleColor??k.colors.border.primary}]})}),o?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[V.sheetTitle,{color:k.colors.text.primary,fontSize:k.typography.fontSize.lg,fontWeight:k.typography.fontWeight.semibold,paddingHorizontal:k.spacing.lg,marginBottom:k.spacing.sm}],children:o}):null]})}),v?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[V.searchWrap,{marginHorizontal:k.spacing.lg,marginBottom:k.spacing.sm}],children:(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[V.searchBox,{backgroundColor:k.colors.background.secondary,borderColor:k.colors.border.primary,borderRadius:k.radius.md,..._corners.smoothCorners,paddingHorizontal:k.spacing.md,gap:k.spacing.sm}],children:[(k.icons?.search??_defaultIcons.defaultIcons.search)({size:18,color:k.colors.text.tertiary}),(0,_jsxRuntime.jsx)(_reactNative.TextInput,{value:z,onChangeText:D,placeholder:d,placeholderTextColor:k.colors.text.tertiary,selectionColor:j??k.colors.border.focus,accessibilityLabel:"Search options",style:[V.searchInput,{color:k.colors.text.primary,fontSize:k.typography.fontSize.base,paddingVertical:k.spacing.sm}]}),z.length>0?(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:()=>D(""),hitSlop:8,accessibilityRole:"button",accessibilityLabel:"Clear search",children:(k.icons?.close??_defaultIcons.defaultIcons.close)({size:18,color:k.colors.text.secondary})}):null]})}):null,(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[V.listWrap,re?V.listRow:null],children:[(0,_jsxRuntime.jsx)(_reactNativeGestureHandler.GestureDetector,{gesture:G,children:(0,_jsxRuntime.jsx)(_reactNative.FlatList,{ref:te,data:X,keyExtractor:e=>"header"===e.kind?`h:${e.title}`:`o:${e.section??""}:${String(m(e.option))}`,renderItem:({item:e})=>{if("header"===e.kind)return(0,_jsxRuntime.jsx)(_reactNative.View,{accessible:!0,accessibilityRole:"header",style:[V.sectionHeader,{paddingHorizontal:k.spacing.lg,paddingTop:k.spacing.md}],children:n?n(e.title):(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[V.sectionTitle,{color:k.colors.text.tertiary,fontSize:k.typography.fontSize.xs,fontWeight:k.typography.fontWeight.semibold}],children:e.title.toUpperCase()})});const t=e.option,i=p(t),r=m(t),o=x(t),a=_(t),s=y(r),c=h(t),d=g?.(t)??!1;return(0,_jsxRuntime.jsxs)(_reactNative.Pressable,{onPress:()=>b(t),disabled:c,android_ripple:{color:k.colors.surface.pressed,borderless:!1},accessibilityRole:"button",accessibilityLabel:i,accessibilityState:{selected:s,disabled:c},"aria-selected":s,"aria-disabled":c,style:({pressed:e})=>[V.optionRow,{backgroundColor:s?k.colors.surface.selected:e?k.colors.surface.pressed:"transparent",opacity:c?.5:1,paddingHorizontal:k.spacing.lg,paddingVertical:k.spacing.md},S,s?N:null],children:[l?(0,_jsxRuntime.jsx)(_reactNative.View,{style:V.optionTextWrap,children:l(t,{selected:s,disabled:c})}):(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[a?(0,_jsxRuntime.jsx)(_reactNative.View,{style:V.optionIcon,children:a}):null,(0,_jsxRuntime.jsxs)(_reactNative.View,{style:V.optionTextWrap,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[V.optionLabel,{color:d?k.colors.toneText.error:s?k.colors.primary:k.colors.text.primary,fontSize:k.typography.fontSize.base,fontWeight:s?k.typography.fontWeight.semibold:k.typography.fontWeight.medium},T,s?C:null],children:i}),o?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[V.optionDescription,{color:k.colors.text.tertiary,fontSize:k.typography.fontSize.sm}],numberOfLines:2,children:o}):null]})]}),f?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[V.checkbox,{borderColor:s?k.colors.primary:k.colors.border.primary,backgroundColor:s?k.colors.primary:"transparent"}],children:s?(0,_jsxRuntime.jsx)(_reactNative.View,{style:V.checkboxTick}):null}):s?"icon"===k.components.optionSheet?.selectedMarker?(0,_jsxRuntime.jsx)(_reactNative.View,{style:V.singleSelectedIcon,children:(k.icons?.selectedTick??_defaultIcons.defaultIcons.selectedTick)({size:20,color:k.colors.primary})}):(0,_jsxRuntime.jsx)(_reactNative.View,{style:[V.singleSelectedDot,{backgroundColor:k.colors.primary}]}):null]})},onScrollToIndexFailed:le,overScrollMode:"never",bounces:!1,keyboardShouldPersistTaps:"handled",showsVerticalScrollIndicator:!re,style:re?V.listBesideRail:null,ListEmptyComponent:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[V.empty,{color:k.colors.text.tertiary,fontSize:k.typography.fontSize.sm,paddingVertical:k.spacing.xl}],children:u})})}),re?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[V.rail,{paddingRight:k.spacing.xs}],accessibilityRole:"list",accessibilityLabel:"Jump to letter",testID:"option-sheet-alphabet",children:oe.map(e=>{const t=ie.has(e);return(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:()=>ae(e),disabled:!t,hitSlop:{left:8,right:8},accessibilityRole:"button",accessibilityLabel:`Jump to ${e}`,accessibilityState:{disabled:!t},"aria-disabled":!t,style:V.railLetter,children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[V.railLetterText,{color:t?k.colors.primary:k.colors.text.tertiary,fontSize:k.typography.fontSize.xs,fontWeight:k.typography.fontWeight.semibold,opacity:t?1:.45}],children:e})},e)})}):null]}),f?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[V.sheetFooter,{borderTopColor:k.colors.border.secondary,paddingHorizontal:k.spacing.lg,paddingVertical:k.spacing.md}],children:(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:ee,accessibilityRole:"button",accessibilityLabel:"Done",style:({pressed:e})=>[V.doneButton,{backgroundColor:e?k.colors.primaryPressed:k.colors.primary,borderRadius:k.radius.md,..._corners.smoothCorners,paddingVertical:k.spacing.sm,paddingHorizontal:k.spacing.lg}],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:{color:k.colors.onPrimary,fontSize:k.typography.fontSize.base,fontWeight:k.typography.fontWeight.semibold},children:"Done"})})}):null]}),(0,_jsxRuntime.jsx)(_ToastProvider.ToastHost,{})]})})};exports.OptionSheet=OptionSheet,OptionSheet.displayName="OptionSheet";const buildStyles=e=>_reactNative.StyleSheet.create({sheet:{position:"absolute",left:0,right:0,bottom:0,paddingBottom:16,overflow:"hidden"},sheetHandleRow:{alignItems:"center",paddingTop:10,paddingBottom:8},sheetHandle:{width:36,height:4,borderRadius:2,..._corners.smoothCorners},sheetTitle:{includeFontPadding:!1},searchWrap:{width:"auto"},searchBox:{flexDirection:"row",alignItems:"center",borderWidth:1},searchInput:{flex:1,includeFontPadding:!1},optionRow:{flexDirection:"row",alignItems:"center"},sectionHeader:{paddingBottom:4},listWrap:{flexShrink:1},listRow:{flexDirection:"row"},listBesideRail:{flex:1},rail:{justifyContent:"space-between",alignItems:"center",alignSelf:"stretch",paddingVertical:4},railLetter:{paddingHorizontal:4,minHeight:14,justifyContent:"center"},railLetterText:{includeFontPadding:!1,lineHeight:14},sectionTitle:{includeFontPadding:!1,letterSpacing:.6},optionIcon:{marginRight:12},optionTextWrap:{flex:1},optionLabel:{includeFontPadding:!1},optionDescription:{includeFontPadding:!1,marginTop:2},checkbox:{width:22,height:22,borderRadius:6,..._corners.smoothCorners,borderWidth:2,alignItems:"center",justifyContent:"center",marginLeft:12},checkboxTick:{width:10,height:6,borderLeftWidth:2,borderBottomWidth:2,borderColor:e.colors.onPrimary,transform:[{rotate:"-45deg"},{translateY:-1}]},singleSelectedDot:{width:8,height:8,borderRadius:4,..._corners.smoothCorners,marginLeft:12},singleSelectedIcon:{marginLeft:12},empty:{textAlign:"center"},sheetFooter:{borderTopWidth:_reactNative.StyleSheet.hairlineWidth,alignItems:"flex-end"},doneButton:{alignSelf:"flex-end"}});var _default=exports.default=OptionSheet;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.OptionSheet=void 0;var _react=require("react"),_reactNative=require("react-native"),_reactNativeGestureHandler=require("react-native-gesture-handler"),_reactNativeKeyboardController=require("react-native-keyboard-controller"),_reactNativeSafeAreaContext=require("react-native-safe-area-context"),_useDragToDismiss=require("../../hooks/useDragToDismiss.js"),_index=require("../../theme/index.js"),_corners=require("../../utils/corners.js"),_defaultIcons=require("../AppIcon/defaultIcons.js"),_ToastProvider=require("../Toast/ToastProvider.js"),_jsxRuntime=require("react/jsx-runtime");const SEARCH_ICON_SIZE=18,OptionSheet=e=>{const{open:t,onClose:r,onAfterClose:i,onOpenChange:o,title:a,options:s,sections:n,renderSectionHeader:l,renderOption:c,alphabetIndex:d=!1,searchPlaceholder:u="Search…",emptyText:p="No options",labelOf:m,getValue:h,disabledOf:g,destructiveOf:x,descriptionOf:_,iconOf:y,isSelected:f,onSelect:b,multi:v=!1,searchable:j=!1,searchSelectionColor:R,accessibilityLabel:S,optionStyle:N,selectedOptionStyle:T,optionTextStyle:C,selectedOptionTextStyle:w,testID:k}=e,I=(0,_index.useTheme)(),V=(0,_reactNativeSafeAreaContext.useSafeAreaInsets)(),z=(0,_react.useMemo)(()=>buildStyles(I),[I]),[D,L]=(0,_react.useState)(""),P=_reactNative.Dimensions.get("window").height,H=Math.round(.7*P),[W,O]=(0,_react.useState)(t),A=(0,_react.useRef)((0,_index.createAnimatedValue)(0)).current,M=(0,_react.useRef)((0,_index.createAnimatedValue)(H)).current,B=(0,_react.useRef)((0,_index.createAnimatedValue)(0)).current,E=(0,_react.useMemo)(()=>_reactNative.Animated.add(M,B),[M,B]);(0,_react.useEffect)(()=>{t&&O(!0)},[t]);const F=(0,_react.useRef)(o);F.current=o;const q=(0,_react.useRef)(!1);(0,_react.useEffect)(()=>{q.current!==t&&(q.current=t,F.current?.(t))},[t]);const G=(0,_react.useRef)(i);G.current=i;const $=(0,_react.useRef)(W);(0,_react.useEffect)(()=>{$.current&&!W&&"ios"!==_reactNative.Platform.OS&&G.current?.(),$.current=W},[W]),(0,_react.useEffect)(()=>{if(!W)return;t&&(0,_index.setNativeValue)(B,0);const e=t?_reactNative.Animated.parallel([_reactNative.Animated.timing(A,{toValue:1,duration:I.motion.duration.fast,easing:_reactNative.Easing.bezier(...I.motion.easing.standard),useNativeDriver:!1}),_reactNative.Animated.spring(M,{toValue:0,damping:I.motion.spring.snappy.damping,stiffness:I.motion.spring.snappy.stiffness,mass:I.motion.spring.snappy.mass,useNativeDriver:!0})]):_reactNative.Animated.parallel([_reactNative.Animated.timing(A,{toValue:0,duration:I.motion.duration.fast,easing:_reactNative.Easing.bezier(...I.motion.easing.standard),useNativeDriver:!1}),_reactNative.Animated.timing(M,{toValue:H,duration:I.motion.duration.fast,easing:_reactNative.Easing.bezier(...I.motion.easing.accelerate),useNativeDriver:!0})]);return e.start(({finished:e})=>{e&&!t&&O(!1)}),()=>e.stop()},[t,W,A,M,B,H,I.motion.duration.fast,I.motion.easing.standard,I.motion.easing.accelerate,I.motion.spring.snappy]);const{handleGesture:K}=(0,_useDragToDismiss.useDragToDismiss)({drag:B,travel:H,onDismiss:r}),J=(0,_react.useMemo)(()=>_reactNativeGestureHandler.Gesture.Native(),[]),[U,Y]=(0,_react.useState)(0),Z=(0,_reactNativeKeyboardController.useKeyboardState)(e=>e.height),Q=W?Math.max(0,Math.round(Z)):0,X=Math.max(V.top,_reactNative.StatusBar.currentHeight??0)+I.spacing.sm,ee=Q>0,te=ee?Math.max(0,Math.min(H,(U>0?U:P)-Q-X)):H;(0,_react.useEffect)(()=>{t||L("")},[t]);const re=(0,_react.useMemo)(()=>{const e=j?D.trim().toLowerCase():"",matches=t=>0===e.length||m(t).toLowerCase().includes(e)||(_(t)??"").toLowerCase().includes(e);if(!n)return s.filter(matches).map(e=>({kind:"option",option:e}));const t=[];return n.forEach((e,r)=>{const i=e.options.filter(matches);if(0!==i.length){t.push({kind:"header",title:e.title});for(const e of i)t.push({kind:"option",option:e,section:r})}}),t},[j,D,s,n,m,_]),ie=(0,_react.useCallback)(()=>{r()},[r]),oe=(0,_react.useRef)(null),ae=(0,_react.useMemo)(()=>{const e=new Map;if(!d)return e;let t=0;if(n)for(let e=re.length-1;e>=0;e-=1)if("header"===re[e].kind){t=e+1;break}for(let r=t;r<re.length;r+=1){const t=re[r];if("option"!==t.kind)continue;const i=m(t.option).trim().charAt(0).toUpperCase(),o=/^[A-Z]$/.test(i)?i:"#";e.has(o)||e.set(o,r)}return e},[d,re,n,m]),se=d&&ae.size>0&&0===D.trim().length,ne=(0,_react.useMemo)(()=>[..."ABCDEFGHIJKLMNOPQRSTUVWXYZ",...ae.has("#")?["#"]:[]],[ae]),le=(0,_react.useCallback)(e=>{const t=ae.get(e);void 0!==t&&oe.current?.scrollToIndex({index:t,animated:!0,viewPosition:0})},[ae]),ce=(0,_react.useRef)(null),de=(0,_react.useCallback)(()=>{null!==ce.current&&(clearTimeout(ce.current),ce.current=null)},[]),ue=(0,_react.useCallback)(e=>{oe.current?.scrollToOffset({offset:e.averageItemLength*e.index,animated:!1}),de(),ce.current=setTimeout(()=>{ce.current=null,oe.current?.scrollToIndex({index:e.index,animated:!0,viewPosition:0})},50)},[de]);(0,_react.useEffect)(()=>(W||de(),de),[W,de]);return(0,_jsxRuntime.jsx)(_reactNative.Modal,{visible:W,transparent:!0,animationType:"none",onRequestClose:ie,onDismiss:()=>G.current?.(),statusBarTranslucent:!0,navigationBarTranslucent:!0,children:(0,_jsxRuntime.jsxs)(_reactNativeGestureHandler.GestureHandlerRootView,{collapsable:!1,onLayout:e=>Y(e.nativeEvent.layout.height),style:[_reactNative.StyleSheet.absoluteFill,{backgroundColor:I.colors.background.overlay}],children:[(0,_jsxRuntime.jsx)(_reactNative.Pressable,{style:_reactNative.StyleSheet.absoluteFill,onPress:ie,accessibilityRole:"button",accessibilityLabel:"Close picker"}),(0,_jsxRuntime.jsxs)(_reactNative.Animated.View,{testID:k,accessibilityViewIsModal:!0,accessibilityLabel:S??a??"Options",style:[z.sheet,{maxHeight:te,bottom:Q,paddingBottom:ee?16:V.bottom+16,backgroundColor:I.colors.background.elevated,borderTopLeftRadius:I.radius.xl,borderTopRightRadius:I.radius.xl,..._corners.smoothCorners,transform:[{translateY:E}],...I.shadows.xl}],children:[(0,_jsxRuntime.jsx)(_reactNativeGestureHandler.GestureDetector,{gesture:K,children:(0,_jsxRuntime.jsxs)(_reactNative.View,{children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:z.sheetHandleRow,children:(0,_jsxRuntime.jsx)(_reactNative.View,{style:[z.sheetHandle,{backgroundColor:I.components.select?.handleColor??I.components.bottomSheet?.handleColor??I.colors.border.primary}]})}),a?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[z.sheetTitle,{color:I.colors.text.primary,fontSize:I.typography.fontSize.lg,fontWeight:I.typography.fontWeight.semibold,paddingHorizontal:I.spacing.lg,marginBottom:I.spacing.sm}],children:a}):null]})}),j?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[z.searchWrap,{marginHorizontal:I.spacing.lg,marginBottom:I.spacing.sm}],children:(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[z.searchBox,{backgroundColor:I.colors.background.secondary,borderColor:I.colors.border.primary,borderRadius:I.radius.md,..._corners.smoothCorners,paddingHorizontal:I.spacing.md,gap:I.spacing.sm}],children:[(I.icons?.search??_defaultIcons.defaultIcons.search)({size:18,color:I.colors.text.tertiary}),(0,_jsxRuntime.jsx)(_reactNative.TextInput,{value:D,onChangeText:L,placeholder:u,placeholderTextColor:I.colors.text.tertiary,selectionColor:R??I.colors.border.focus,accessibilityLabel:"Search options",style:[z.searchInput,{color:I.colors.text.primary,fontSize:I.typography.fontSize.base,paddingVertical:I.spacing.sm}]}),D.length>0?(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:()=>L(""),hitSlop:8,accessibilityRole:"button",accessibilityLabel:"Clear search",children:(I.icons?.close??_defaultIcons.defaultIcons.close)({size:18,color:I.colors.text.secondary})}):null]})}):null,(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[z.listWrap,se?z.listRow:null],children:[(0,_jsxRuntime.jsx)(_reactNativeGestureHandler.GestureDetector,{gesture:J,children:(0,_jsxRuntime.jsx)(_reactNative.FlatList,{ref:oe,data:re,keyExtractor:e=>"header"===e.kind?`h:${e.title}`:`o:${e.section??""}:${String(h(e.option))}`,renderItem:({item:e})=>{if("header"===e.kind)return(0,_jsxRuntime.jsx)(_reactNative.View,{accessible:!0,accessibilityRole:"header",style:[z.sectionHeader,{paddingHorizontal:I.spacing.lg,paddingTop:I.spacing.md}],children:l?l(e.title):(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[z.sectionTitle,{color:I.colors.text.tertiary,fontSize:I.typography.fontSize.xs,fontWeight:I.typography.fontWeight.semibold}],children:e.title.toUpperCase()})});const t=e.option,r=m(t),i=h(t),o=_(t),a=y(t),s=f(i),n=g(t),d=x?.(t)??!1;return(0,_jsxRuntime.jsxs)(_reactNative.Pressable,{onPress:()=>b(t),disabled:n,android_ripple:{color:I.colors.surface.pressed,borderless:!1},accessibilityRole:"button",accessibilityLabel:r,accessibilityState:{selected:s,disabled:n},"aria-selected":s,"aria-disabled":n,style:({pressed:e})=>[z.optionRow,{backgroundColor:s?I.colors.surface.selected:e?I.colors.surface.pressed:"transparent",opacity:n?.5:1,paddingHorizontal:I.spacing.lg,paddingVertical:I.spacing.md},N,s?T:null],children:[c?(0,_jsxRuntime.jsx)(_reactNative.View,{style:z.optionTextWrap,children:c(t,{selected:s,disabled:n})}):(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[a?(0,_jsxRuntime.jsx)(_reactNative.View,{style:z.optionIcon,children:a}):null,(0,_jsxRuntime.jsxs)(_reactNative.View,{style:z.optionTextWrap,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[z.optionLabel,{color:d?I.colors.toneText.error:s?I.colors.primary:I.colors.text.primary,fontSize:I.typography.fontSize.base,fontWeight:s?I.typography.fontWeight.semibold:I.typography.fontWeight.medium},C,s?w:null],children:r}),o?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[z.optionDescription,{color:I.colors.text.tertiary,fontSize:I.typography.fontSize.sm}],numberOfLines:2,children:o}):null]})]}),v?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[z.checkbox,{borderColor:s?I.colors.primary:I.colors.border.primary,backgroundColor:s?I.colors.primary:"transparent"}],children:s?(0,_jsxRuntime.jsx)(_reactNative.View,{style:z.checkboxTick}):null}):s?"icon"===I.components.optionSheet?.selectedMarker?(0,_jsxRuntime.jsx)(_reactNative.View,{style:z.singleSelectedIcon,children:(I.icons?.selectedTick??_defaultIcons.defaultIcons.selectedTick)({size:20,color:I.colors.primary})}):(0,_jsxRuntime.jsx)(_reactNative.View,{style:[z.singleSelectedDot,{backgroundColor:I.colors.primary}]}):null]})},onScrollToIndexFailed:ue,overScrollMode:"never",bounces:!1,keyboardShouldPersistTaps:"handled",showsVerticalScrollIndicator:!se,style:se?z.listBesideRail:null,ListEmptyComponent:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[z.empty,{color:I.colors.text.tertiary,fontSize:I.typography.fontSize.sm,paddingVertical:I.spacing.xl}],children:p})})}),se?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[z.rail,{paddingRight:I.spacing.xs}],accessibilityRole:"list",accessibilityLabel:"Jump to letter",testID:"option-sheet-alphabet",children:ne.map(e=>{const t=ae.has(e);return(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:()=>le(e),disabled:!t,hitSlop:{left:8,right:8},accessibilityRole:"button",accessibilityLabel:`Jump to ${e}`,accessibilityState:{disabled:!t},"aria-disabled":!t,style:z.railLetter,children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[z.railLetterText,{color:t?I.colors.primary:I.colors.text.tertiary,fontSize:I.typography.fontSize.xs,fontWeight:I.typography.fontWeight.semibold,opacity:t?1:.45}],children:e})},e)})}):null]}),v?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[z.sheetFooter,{borderTopColor:I.colors.border.secondary,paddingHorizontal:I.spacing.lg,paddingVertical:I.spacing.md}],children:(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:ie,accessibilityRole:"button",accessibilityLabel:"Done",style:({pressed:e})=>[z.doneButton,{backgroundColor:e?I.colors.primaryPressed:I.colors.primary,borderRadius:I.radius.md,..._corners.smoothCorners,paddingVertical:I.spacing.sm,paddingHorizontal:I.spacing.lg}],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:{color:I.colors.onPrimary,fontSize:I.typography.fontSize.base,fontWeight:I.typography.fontWeight.semibold},children:"Done"})})}):null]}),(0,_jsxRuntime.jsx)(_ToastProvider.ToastHost,{})]})})};exports.OptionSheet=OptionSheet,OptionSheet.displayName="OptionSheet";const buildStyles=e=>_reactNative.StyleSheet.create({sheet:{position:"absolute",left:0,right:0,bottom:0,paddingBottom:16,overflow:"hidden"},sheetHandleRow:{alignItems:"center",paddingTop:10,paddingBottom:8},sheetHandle:{width:36,height:4,borderRadius:2,..._corners.smoothCorners},sheetTitle:{includeFontPadding:!1},searchWrap:{width:"auto"},searchBox:{flexDirection:"row",alignItems:"center",borderWidth:1},searchInput:{flex:1,includeFontPadding:!1},optionRow:{flexDirection:"row",alignItems:"center"},sectionHeader:{paddingBottom:4},listWrap:{flexShrink:1},listRow:{flexDirection:"row"},listBesideRail:{flex:1},rail:{justifyContent:"space-between",alignItems:"center",alignSelf:"stretch",paddingVertical:4},railLetter:{paddingHorizontal:4,minHeight:14,justifyContent:"center"},railLetterText:{includeFontPadding:!1,lineHeight:14},sectionTitle:{includeFontPadding:!1,letterSpacing:.6},optionIcon:{marginRight:12},optionTextWrap:{flex:1},optionLabel:{includeFontPadding:!1},optionDescription:{includeFontPadding:!1,marginTop:2},checkbox:{width:22,height:22,borderRadius:6,..._corners.smoothCorners,borderWidth:2,alignItems:"center",justifyContent:"center",marginLeft:12},checkboxTick:{width:10,height:6,borderLeftWidth:2,borderBottomWidth:2,borderColor:e.colors.onPrimary,transform:[{rotate:"-45deg"},{translateY:-1}]},singleSelectedDot:{width:8,height:8,borderRadius:4,..._corners.smoothCorners,marginLeft:12},singleSelectedIcon:{marginLeft:12},empty:{textAlign:"center"},sheetFooter:{borderTopWidth:_reactNative.StyleSheet.hairlineWidth,alignItems:"flex-end"},doneButton:{alignSelf:"flex-end"}});var _default=exports.default=OptionSheet;
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.PermissionPrompt=void 0;var _react=require("react"),_reactNative=require("react-native"),_index=require("../../theme/index.js"),_announce=require("../../utils/announce.js"),_index2=require("../Button/index.js"),_index3=require("../IconBadge/index.js"),_index4=require("../Text/index.js"),_usePermissionPrompt=require("./usePermissionPrompt.js"),_jsxRuntime=require("react/jsx-runtime");const ACCESS={camera:"Camera access",microphone:"Microphone access",photos:"Photo access",photosAdd:"Photo access",mediaLibrary:"Media library access",location:"Location access",locationAlways:"Location access",contacts:"Contacts access",calendar:"Calendar access",reminders:"Reminders access",notifications:"Notification access",bluetooth:"Bluetooth access",storage:"Storage access"},unavailableMessage=(e,t,i)=>{const s=ACCESS[e];return"unavailable"===t?`${s} is not available on this device.`:i?`${s} is off for this app. You can turn it on in Settings.`:`${s} is off, so this cannot be used right now.`},PermissionPrompt=({kind:e,title:t,reason:i,icon:s,onResult:n,fallback:a,haptic:r="selection",style:o,testID:c})=>{const l=(0,_index.useTheme)(),u=(0,_react.useMemo)(()=>buildStyles(l),[l]),d=(0,_usePermissionPrompt.usePermissionPrompt)(e,{onResult:n}),x=unavailableMessage(e,d.status,d.showSettings),m=(0,_react.useRef)(!1);if((0,_react.useEffect)(()=>{"explain"!==d.view?("unavailable"===d.view&&m.current&&(0,_announce.announce)(x),m.current=!1):m.current=!0},[d.view,x]),"explain"!==d.view&&"unavailable"!==d.view)return(0,_jsxRuntime.jsx)(_reactNative.View,{style:o,testID:c});const _="explain"===d.view;return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[u.root,o],testID:c,children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:u.header,children:[s?(0,_jsxRuntime.jsx)(_index3.IconBadge,{icon:s,size:"lg",tone:_?"primary":"neutral"}):null,(0,_jsxRuntime.jsx)(_index4.Text,{variant:"h3",align:"center",children:t}),(0,_jsxRuntime.jsx)(_index4.Text,{variant:"body",color:"secondary",align:"center",children:_?i:x})]}),_?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:u.actions,children:[(0,_jsxRuntime.jsx)(_index2.Button,{haptic:r,title:"Continue",size:"lg",fullWidth:!0,loading:d.requesting,onPress:()=>{d.request()}}),d.cancellable?(0,_jsxRuntime.jsx)(_index2.Button,{haptic:r,title:"Cancel",size:"lg",fullWidth:!0,variant:"ghost",tone:"neutral",disabled:d.requesting,onPress:d.cancel}):null]}):(0,_jsxRuntime.jsxs)(_reactNative.View,{style:u.actions,children:[a?(0,_jsxRuntime.jsx)(_index2.Button,{haptic:r,title:a.label,size:"lg",fullWidth:!0,onPress:a.onPress}):null,d.showSettings?(0,_jsxRuntime.jsx)(_reactNative.View,{style:u.link,children:(0,_jsxRuntime.jsx)(_index2.Button,{haptic:r,title:"Open Settings",variant:"link",onPress:()=>{d.openSettings()}})}):null]})]})};exports.PermissionPrompt=PermissionPrompt;const buildStyles=e=>_reactNative.StyleSheet.create({root:{gap:e.spacing.lg,paddingVertical:e.spacing.lg},header:{alignItems:"center",gap:e.spacing.sm},actions:{gap:e.spacing.sm},link:{alignItems:"center",paddingVertical:e.spacing.sm}});var _default=exports.default=PermissionPrompt;
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"PermissionPrompt",{enumerable:!0,get:function(){return _PermissionPrompt.PermissionPrompt}}),Object.defineProperty(exports,"default",{enumerable:!0,get:function(){return _PermissionPrompt.default}}),Object.defineProperty(exports,"usePermissionPrompt",{enumerable:!0,get:function(){return _usePermissionPrompt.usePermissionPrompt}});var _PermissionPrompt=_interopRequireWildcard(require("./PermissionPrompt.js")),_usePermissionPrompt=require("./usePermissionPrompt.js");function _interopRequireWildcard(e,r){if("function"==typeof WeakMap)var t=new WeakMap,o=new WeakMap;return(_interopRequireWildcard=function(e,r){if(!r&&e&&e.__esModule)return e;var i,n,s={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return s;if(i=r?o:t){if(i.has(e))return i.get(e);i.set(e,s)}for(const r in e)"default"!==r&&{}.hasOwnProperty.call(e,r)&&((n=(i=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,r))&&(n.get||n.set)?i(s,r,n):s[r]=e[r]);return s})(e,r)}
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.usePermissionPrompt=void 0;var _mobileCore=require("@webority/mobile-core"),_permissions=require("@webority/mobile-core/permissions"),_react=require("react"),_reactNative=require("react-native");const INITIAL={view:"pending",status:null,requesting:!1,answered:!1},isAuthorized=e=>"granted"===e||"limited"===e,canAsk=e=>"undetermined"===e||"denied"===e,settledView=e=>isAuthorized(e)?"authorized":"unavailable",safely=async(e,t,r)=>{try{return await r()}catch(r){return _mobileCore.Logger.error(`[@webority/mobile-ui] PermissionPrompt: ${e}(${t}) failed.`,r),"unavailable"}},usePermissionPrompt=(e,{onResult:t}={})=>{const[r,s]=(0,_react.useState)(INITIAL),i=(0,_react.useRef)(r);i.current=r;const n=(0,_react.useRef)(t);n.current=t;const a=(0,_react.useRef)(0),u=(0,_react.useRef)(!1),c="android"===_reactNative.Platform.OS,o=(0,_react.useCallback)(async t=>{if(u.current)return null;u.current=!0,s(e=>({...e,requesting:!0}));const r=await safely("request",e,()=>_permissions.Permissions.request(e));return u.current=!1,t!==a.current||(s({view:settledView(r),status:r,requesting:!1,answered:!0}),n.current?.(r)),r},[e]);(0,_react.useEffect)(()=>{a.current+=1;const t=a.current;s(INITIAL);return(async()=>{const r=await safely("check",e,()=>_permissions.Permissions.check(e));if(t===a.current){if(c&&"undetermined"===r){s({...INITIAL,status:r});return void(null===await o(t)&&t===a.current&&s({...INITIAL,view:"explain",status:r}))}canAsk(r)?s({...INITIAL,view:"explain",status:r}):(s({...INITIAL,view:settledView(r),status:r}),n.current?.(r))}})(),()=>{a.current+=1}},[e,c,o]);const l="unavailable"===r.view&&"blocked"===r.status&&!r.answered;(0,_react.useEffect)(()=>{if(!l)return;const t=a.current,r=_reactNative.AppState.addEventListener("change",r=>{"active"===r&&safely("check",e,()=>_permissions.Permissions.check(e)).then(e=>{t===a.current&&(isAuthorized(e)?(s({view:"authorized",status:e,requesting:!1,answered:!0}),n.current?.(e)):canAsk(e)&&s({...INITIAL,view:"explain",status:e}))})});return()=>r.remove()},[l,e]);const d=(0,_react.useCallback)(()=>o(a.current),[o]),m=(0,_react.useCallback)(()=>{const e=i.current;"explain"!==e.view||null===e.status||e.requesting||(s({...e,view:"unavailable",answered:!0}),n.current?.(e.status))},[]);return{view:r.view,status:r.status,requesting:r.requesting,cancellable:c,showSettings:l,request:d,cancel:m,openSettings:_permissions.Permissions.openSettings}};exports.usePermissionPrompt=usePermissionPrompt;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.parseE164=exports.formatE164=exports.default=exports.PhoneNumberInput=exports.DEFAULT_CALLING_CODES=exports.ALL_CALLING_CODES=void 0;var _mobileCore=require("@webority/mobile-core"),_countries=require("@webority/mobile-core/phone/countries"),_react=require("react"),_reactNative=require("react-native"),_index=require("../../hooks/index.js"),_index2=require("../../theme/index.js"),_index3=require("../../utils/index.js"),_index4=require("../FieldBase/index.js"),_Chevron=require("../FieldBase/Chevron.js"),_useFloatingLabel=require("../FieldBase/useFloatingLabel.js"),_OptionSheet=require("../OptionSheet/OptionSheet.js"),_jsxRuntime=require("react/jsx-runtime");const DEFAULT_CALLING_CODES=exports.DEFAULT_CALLING_CODES=[{iso:"IN",code:"91",label:"India"},{iso:"AE",code:"971",label:"United Arab Emirates"},{iso:"GB",code:"44",label:"United Kingdom"},{iso:"US",code:"1",label:"United States"},{iso:"CA",code:"1",label:"Canada"},{iso:"AU",code:"61",label:"Australia"},{iso:"SG",code:"65",label:"Singapore"},{iso:"SA",code:"966",label:"Saudi Arabia"}],ALL_CALLING_CODES=exports.ALL_CALLING_CODES=(0,_mobileCore.getPhoneCountries)().map(e=>({iso:e.iso,code:e.callingCode,label:_countries.PHONE_COUNTRY_NAMES[e.iso]??e.iso})).sort((e,t)=>e.label.localeCompare(t.label)),digitsOnly=e=>e.replace(/[^0-9]/g,""),formatE164=e=>`+${e.callingCode}${e.nationalNumber}`;exports.formatE164=formatE164;const parseE164=(e,t,i)=>{const o=e.replace(/[^0-9]/g,"");if(!o)return null;const n=(0,_mobileCore.splitPhoneNumber)(`+${o}`);let r=n?.callingCode,l=n?.nationalNumber??"";if(!r){const e=Array.from(new Set(t.map(e=>e.code))).sort((e,t)=>t.length-e.length);if(r=e.find(e=>o.startsWith(e)),!r)return null;l=o.slice(r.length)}const a=t.filter(e=>e.code===r),s=a.find(e=>e.iso===i)?.iso??a.find(e=>e.iso===n?.country)?.iso??n?.country??a[0]?.iso??"";return{callingCode:r,nationalNumber:l,iso:s}};exports.parseE164=parseE164;const planOf=e=>(0,_mobileCore.isSupportedCountry)(e)?e:null,PhoneNumberInput=exports.PhoneNumberInput=(0,_react.forwardRef)((e,t)=>{const{value:i,defaultValue:o,onChange:n,e164:r,onChangeE164:l,returnKeyType:a,submitBehavior:s,onSubmitEditing:u,blurOnSubmit:c,onComplete:d,onValidityChange:b,countries:m=ALL_CALLING_CODES,popularCountries:p,popularCountriesTitle:_="Popular",allCountriesTitle:f="All countries",hiddenCountries:h,showFlag:g=!0,renderFlag:x,renderCountry:C,countrySearchPlaceholder:N,showAlphabetIndex:y,defaultIso:S="IN",validation:v="any",maxLength:L,formatAsYouType:E=!0,countryLocked:I=!1,label:j,labelMode:F="top",labelStyle:O,placeholder:T="Phone number",helperText:A,error:P,invalidMessage:R,required:D,disabled:z=!1,size:w="md",variant:q,borderRadius:k,countrySheetTitle:M="Country code",haptic:V,accessibilityLabel:B,countryAccessibilityLabel:$,onFocus:G,onBlur:U,style:W,testID:H}=e,Y=(0,_index2.useTheme)(),K=(0,_react.useMemo)(()=>buildStyles(Y),[Y]),J=(0,_react.useRef)(null),Q=(0,_react.useMemo)(()=>h?.length?m.filter(e=>!h.includes(e.iso)):m,[m,h]),X=(0,_react.useMemo)(()=>{if(!p?.length)return;const e=p.map(e=>Q.find(t=>t.iso===e)).filter(e=>void 0!==e);return e.length?[{title:_,options:e},{title:f,options:Q}]:void 0},[p,_,f,Q]),Z=(0,_react.useCallback)((e,t,i)=>{if(!e)return null;if(x)return x(e);if(!g)return null;const o=(0,_mobileCore.countryFlagEmoji)(e.iso);return o?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[K.flag,{fontSize:t}],testID:i,children:o}):null},[x,g,K.flag]),ee=(0,_react.useCallback)(e=>{const t=planOf(e),i=t?(0,_mobileCore.maxNationalNumberLength)(t,!1===v?"any":v):Number.POSITIVE_INFINITY;return L?Math.min(i,L):i},[L,v]),te=(0,_react.useCallback)((e,t)=>e.slice(0,ee(t)),[ee]),ie=(0,_react.useCallback)((e,t)=>{const i=planOf(t)??void 0,o=(0,_mobileCore.splitPhoneNumber)(e,i);if(!o)return null;const n=o.country??t,r=m.find(e=>e.iso===n);return{callingCode:r?.code??o.callingCode,nationalNumber:te(o.nationalNumber,n),iso:r?.iso??n}},[m,te]),oe=(0,_react.useMemo)(()=>{const e=Q.find(e=>e.iso===S)??Q[0]??m[0],t={callingCode:e?.code??"91",nationalNumber:"",iso:e?.iso??"IN"};return"string"==typeof o?ie(o,t.iso)??t:o??t},[m,Q,S,o,ie]),ne=(0,_react.useCallback)(e=>{if(!1===v)return e.nationalNumber.length>0;const t=planOf(e.iso);return t?(0,_mobileCore.isValidNationalNumber)(e.nationalNumber,t,v):e.nationalNumber.length>0},[v]),[re,le]=(0,_react.useState)(oe.iso),ae=(0,_react.useMemo)(()=>{if(void 0===r)return;const e=r?parseE164(r,m,re):null;if(e)return{...e,nationalNumber:te(e.nationalNumber,e.iso)};const t=m.find(e=>e.iso===re);return{callingCode:t?.code??oe.callingCode,nationalNumber:"",iso:re}},[r,m,re,oe.callingCode,te]),se=(0,_react.useCallback)(e=>{le(e.iso),n?.(e),l?.(e.nationalNumber?formatE164(e):"",{country:m.find(t=>t.iso===e.iso),national:e.nationalNumber,valid:ne(e)})},[n,l,m,ne]),[ue,ce]=(0,_index.useControllableState)({value:i??ae,defaultValue:oe,onChange:se}),[de,be]=(0,_react.useState)(!1),me=(0,_react.useCallback)(()=>{z||J.current?.focus()},[z]),[pe,_e]=(0,_react.useState)(!1),[fe,he]=(0,_react.useState)(!1),[ge,xe]=(0,_react.useState)(!1),Ce=(0,_react.useRef)(!1);(0,_react.useEffect)(()=>{ge||(Ce.current=!1)},[ge]);const Ne=(0,_index4.resolveFieldSize)(Y,w),ye=(0,_index4.resolveFieldTextStyle)(Y,{disabled:z}),Se=q??Y.components.field?.defaultVariant??"outlined",ve="underline"===Se,Le=k??Y.components.phoneNumberInput?.borderRadius,Ee=Y.spacing.md,[Ie,je]=(0,_react.useState)(0),Fe=Ie+Ee+1+Ee,Oe=ue.nationalNumber.length>0,Te=D&&!j&&!Oe&&T.length>0,Ae=de||Oe,Pe=Boolean(j)&&"float"===F&&Ie>0,Re=(0,_useFloatingLabel.useFloatingLabel)({label:j,enabled:Pe,floated:Ae,required:D,variant:Se,sizeTokens:Ne,leadingOffset:Fe,paddingLeft:ve?0:Ne.paddingHorizontal,color:Y.colors.field.label,style:O}),De=(0,_react.useMemo)(()=>m.find(e=>e.iso===ue.iso),[m,ue.iso]),ze=planOf(ue.iso),we=E&&ze?(0,_mobileCore.formatPhoneAsTyped)(ue.nationalNumber,ze):ue.nationalNumber,qe=ee(ue.iso),ke=0===ue.nationalNumber.length||pe||!Number.isFinite(qe)?void 0:we.length+Math.max(0,qe-ue.nationalNumber.length),Me=ne(ue);(0,_react.useEffect)(()=>{Oe||he(!1)},[Oe]);const Ve=ze?(0,_mobileCore.maxNationalNumberLength)(ze,!1===v?"any":v):Number.POSITIVE_INFINITY,Be=ue.nationalNumber.length>=Ve,$e=P??(!1!==v&&!1!==R&&Oe&&!Me&&(fe||Be)?R||("mobile"===v?"Enter a valid mobile number":"Enter a valid number"):void 0),Ge=(0,_react.useRef)(Me),Ue=(0,_react.useRef)(ue);Ue.current=ue,(0,_react.useEffect)(()=>{Ge.current!==Me&&(Ge.current=Me,b?.(Me),Me&&d?.(formatE164(Ue.current)))},[Me,d,b]);const We=(0,_react.useCallback)(e=>{if(e.includes("+")){const t=ie(e,ue.iso);if(t&&!I&&Q.some(e=>e.iso===t.iso))return void ce(t);if(t&&t.iso===ue.iso)return void ce(t)}ce({...ue,nationalNumber:te(digitsOnly(e),ue.iso)})},[Q,I,ue,ie,te,ce]),He=(0,_react.useCallback)(e=>{const t=e;ce({callingCode:t.code,iso:t.iso,nationalNumber:te(ue.nationalNumber,t.iso)}),xe(!1);const i=(0,_index3.resolveHaptic)(V,"selection");i&&(0,_index3.triggerHaptic)(i)},[ue,V,te,ce]);(0,_react.useImperativeHandle)(t,()=>({focus:()=>J.current?.focus(),blur:()=>J.current?.blur(),clear:()=>ce({...Ue.current,nationalNumber:""}),isFocused:()=>J.current?.isFocused()??!1,getValue:()=>Ue.current,getE164:()=>formatE164(Ue.current),getFormatted:()=>{const e=Ue.current,t=planOf(e.iso);return t?(0,_mobileCore.formatPhoneAsTyped)(e.nationalNumber,t):e.nationalNumber},isValid:()=>ne(Ue.current),getCountry:()=>m.find(e=>e.iso===Ue.current.iso)}),[m,ne,ce]);const Ye=z||I,Ke=(0,_jsxRuntime.jsx)(_index4.FieldBase,{size:w,variant:Se,borderRadius:Le,topNotch:Re.topNotch,focused:de,disabled:z,error:(0,_index4.hasFieldText)($e),filled:Oe,onPress:me,pressFeedback:!1,leadingDivider:!0,paddingLeft:ve?0:void 0,leading:(0,_jsxRuntime.jsxs)(_reactNative.Pressable,{onPress:()=>{Ye||(Ce.current=!0,xe(!0))},disabled:Ye,accessibilityRole:"button",accessibilityLabel:$??`Country code, currently +${ue.callingCode}`,accessibilityState:{disabled:Ye},"aria-disabled":Ye,hitSlop:6,onLayout:e=>{const{width:t}=e.nativeEvent.layout;je(e=>e===t?e:t)},style:K.codeTrigger,testID:H?`${H}-code`:void 0,children:[Z(De,Ne.fontSize,H?`${H}-flag`:void 0),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[K.codeText,{color:ye.color,fontSize:Ne.fontSize}],children:`+${ue.callingCode}`}),I?null:(0,_jsxRuntime.jsx)(_Chevron.Chevron,{color:z?Y.colors.field.iconDisabled:Y.colors.field.icon,size:Ne.iconSize,open:ge})]}),children:(0,_jsxRuntime.jsxs)(_reactNative.View,{style:K.inputWrap,children:[(0,_jsxRuntime.jsx)(_reactNative.TextInput,{ref:J,value:we,maxLength:ke,onChangeText:We,returnKeyType:a,submitBehavior:s,onSubmitEditing:u,blurOnSubmit:c,onSelectionChange:e=>{const{start:t,end:i}=e.nativeEvent.selection;_e(t!==i)},onFocus:()=>{be(!0),G?.()},onBlur:()=>{be(!1),Oe&&!Ce.current&&he(!0),U?.()},editable:!z,placeholder:Pe&&!Ae||Te?void 0:T,placeholderTextColor:ye.placeholderColor,accessibilityLabel:B??j??T,selectionColor:Y.colors.field.caret,keyboardType:"phone-pad",textContentType:"telephoneNumber",autoComplete:"tel",style:[K.input,{color:ye.color,fontSize:Ne.fontSize,...ye.weightStyle,paddingLeft:ve?0:void 0}],testID:H?`${H}-input`:void 0}),Te?(0,_jsxRuntime.jsx)(_index4.RequiredPlaceholder,{text:T,color:ye.placeholderColor,fontSize:Ne.fontSize,weightStyle:ye.weightStyle}):null]})});return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:W,testID:H,children:[j&&"top"===F?(0,_jsxRuntime.jsx)(_index4.FieldLabel,{size:w,required:D,children:j}):null,(0,_jsxRuntime.jsxs)(_reactNative.View,{style:K.fieldWrapper,children:[Ke,Re.node]}),(0,_jsxRuntime.jsx)(_index4.FieldMessage,{size:w,error:(0,_index4.hasFieldText)($e),text:$e??A}),(0,_jsxRuntime.jsx)(_OptionSheet.OptionSheet,{open:ge,onClose:()=>xe(!1),title:M,options:Q,sections:X,labelOf:e=>`${e.label} (+${e.code})`,getValue:e=>e.iso,disabledOf:()=>!1,descriptionOf:()=>{},iconOf:e=>Z(e,Y.typography.fontSize.lg),renderOption:C?(e,t)=>C(e,{selected:t.selected}):void 0,isSelected:e=>e===De?.iso,onSelect:He,searchable:Q.length>8,searchPlaceholder:N,alphabetIndex:y??Q.length>20})]})});PhoneNumberInput.displayName="PhoneNumberInput";const buildStyles=e=>_reactNative.StyleSheet.create({fieldWrapper:{position:"relative",overflow:"visible"},codeTrigger:{flexDirection:"row",alignItems:"center",gap:2},flag:{includeFontPadding:!1,marginRight:4},codeText:{...(0,_index2.fontFor)(e,"semibold"),fontWeight:"600",includeFontPadding:!1,writingDirection:"ltr"},input:{padding:0,margin:0,includeFontPadding:!1,writingDirection:"ltr"},inputWrap:{flex:1,alignSelf:"stretch",justifyContent:"center"}});var _default=exports.default=PhoneNumberInput;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.parseE164=exports.formatE164=exports.default=exports.PhoneNumberInput=exports.DEFAULT_CALLING_CODES=exports.ALL_CALLING_CODES=void 0;var _mobileCore=require("@webority/mobile-core"),_countries=require("@webority/mobile-core/phone/countries"),_react=require("react"),_reactNative=require("react-native"),_index=require("../../hooks/index.js"),_index2=require("../../theme/index.js"),_index3=require("../../utils/index.js"),_index4=require("../FieldBase/index.js"),_Chevron=require("../FieldBase/Chevron.js"),_useFloatingLabel=require("../FieldBase/useFloatingLabel.js"),_OptionSheet=require("../OptionSheet/OptionSheet.js"),_jsxRuntime=require("react/jsx-runtime");const DEFAULT_CALLING_CODES=exports.DEFAULT_CALLING_CODES=[{iso:"IN",code:"91",label:"India"},{iso:"AE",code:"971",label:"United Arab Emirates"},{iso:"GB",code:"44",label:"United Kingdom"},{iso:"US",code:"1",label:"United States"},{iso:"CA",code:"1",label:"Canada"},{iso:"AU",code:"61",label:"Australia"},{iso:"SG",code:"65",label:"Singapore"},{iso:"SA",code:"966",label:"Saudi Arabia"}],ALL_CALLING_CODES=exports.ALL_CALLING_CODES=(0,_mobileCore.getPhoneCountries)().map(e=>({iso:e.iso,code:e.callingCode,label:_countries.PHONE_COUNTRY_NAMES[e.iso]??e.iso})).sort((e,t)=>e.label.localeCompare(t.label)),digitsOnly=e=>e.replace(/[^0-9]/g,""),formatE164=e=>`+${e.callingCode}${e.nationalNumber}`;exports.formatE164=formatE164;const parseE164=(e,t,i)=>{const o=e.replace(/[^0-9]/g,"");if(!o)return null;const n=(0,_mobileCore.splitPhoneNumber)(`+${o}`);let r=n?.callingCode,l=n?.nationalNumber??"";if(!r){const e=Array.from(new Set(t.map(e=>e.code))).sort((e,t)=>t.length-e.length);if(r=e.find(e=>o.startsWith(e)),!r)return null;l=o.slice(r.length)}const a=t.filter(e=>e.code===r),s=a.find(e=>e.iso===i)?.iso??a.find(e=>e.iso===n?.country)?.iso??n?.country??a[0]?.iso??"";return{callingCode:r,nationalNumber:l,iso:s}};exports.parseE164=parseE164;const planOf=e=>(0,_mobileCore.isSupportedCountry)(e)?e:null,PhoneNumberInput=exports.PhoneNumberInput=(0,_react.forwardRef)((e,t)=>{const{value:i,defaultValue:o,onChange:n,e164:r,onChangeE164:l,returnKeyType:a,submitBehavior:s,onSubmitEditing:u,blurOnSubmit:c,onComplete:d,onValidityChange:b,countries:m=ALL_CALLING_CODES,popularCountries:p,popularCountriesTitle:_="Popular",allCountriesTitle:f="All countries",hiddenCountries:h,showFlag:g=!0,renderFlag:x,renderCountry:C,countrySearchPlaceholder:N,showAlphabetIndex:y,defaultIso:S="IN",validation:v="any",maxLength:L,formatAsYouType:E=!0,countryLocked:I=!1,label:j,labelMode:F="top",labelStyle:O,placeholder:T="Phone number",helperText:A,error:P,invalidMessage:R,required:D,disabled:z=!1,size:w="md",variant:q,borderRadius:k,countrySheetTitle:M="Country code",haptic:V,accessibilityLabel:B,countryAccessibilityLabel:$,onFocus:G,onBlur:U,style:W,testID:H}=e,Y=(0,_index2.useTheme)(),K=(0,_react.useMemo)(()=>buildStyles(Y),[Y]),J=(0,_react.useRef)(null),Q=(0,_react.useMemo)(()=>h?.length?m.filter(e=>!h.includes(e.iso)):m,[m,h]),X=(0,_react.useMemo)(()=>{if(!p?.length)return;const e=p.map(e=>Q.find(t=>t.iso===e)).filter(e=>void 0!==e);return e.length?[{title:_,options:e},{title:f,options:Q}]:void 0},[p,_,f,Q]),Z=(0,_react.useCallback)((e,t,i)=>{if(!e)return null;if(x)return x(e);if(!g)return null;const o=(0,_mobileCore.countryFlagEmoji)(e.iso);return o?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[K.flag,{fontSize:t}],testID:i,children:o}):null},[x,g,K.flag]),ee=(0,_react.useCallback)(e=>{const t=planOf(e),i=t?(0,_mobileCore.maxNationalNumberLength)(t,!1===v?"any":v):Number.POSITIVE_INFINITY;return L?Math.min(i,L):i},[L,v]),te=(0,_react.useCallback)((e,t)=>e.slice(0,ee(t)),[ee]),ie=(0,_react.useCallback)((e,t)=>{const i=planOf(t)??void 0,o=(0,_mobileCore.splitPhoneNumber)(e,i);if(!o)return null;const n=o.country??t,r=m.find(e=>e.iso===n);return{callingCode:r?.code??o.callingCode,nationalNumber:te(o.nationalNumber,n),iso:r?.iso??n}},[m,te]),oe=(0,_react.useMemo)(()=>{const e=Q.find(e=>e.iso===S)??Q[0]??m[0],t={callingCode:e?.code??"91",nationalNumber:"",iso:e?.iso??"IN"};return"string"==typeof o?ie(o,t.iso)??t:o??t},[m,Q,S,o,ie]),ne=(0,_react.useCallback)(e=>{if(!1===v)return e.nationalNumber.length>0;const t=planOf(e.iso);return t?(0,_mobileCore.isValidNationalNumber)(e.nationalNumber,t,v):e.nationalNumber.length>0},[v]),[re,le]=(0,_react.useState)(oe.iso),ae=(0,_react.useMemo)(()=>{if(void 0===r)return;const e=r?parseE164(r,m,re):null;if(e)return{...e,nationalNumber:te(e.nationalNumber,e.iso)};const t=m.find(e=>e.iso===re);return{callingCode:t?.code??oe.callingCode,nationalNumber:"",iso:re}},[r,m,re,oe.callingCode,te]),se=(0,_react.useCallback)(e=>{le(e.iso),n?.(e),l?.(e.nationalNumber?formatE164(e):"",{country:m.find(t=>t.iso===e.iso),national:e.nationalNumber,valid:ne(e)})},[n,l,m,ne]),[ue,ce]=(0,_index.useControllableState)({value:i??ae,defaultValue:oe,onChange:se}),[de,be]=(0,_react.useState)(!1),me=(0,_react.useCallback)(()=>{z||J.current?.focus()},[z]),[pe,_e]=(0,_react.useState)(!1),[fe,he]=(0,_react.useState)(!1),[ge,xe]=(0,_react.useState)(!1),Ce=(0,_react.useRef)(!1);(0,_react.useEffect)(()=>{ge||(Ce.current=!1)},[ge]);const Ne=(0,_index4.resolveFieldSize)(Y,w),ye=(0,_index4.resolveFieldTextStyle)(Y,{disabled:z}),Se=q??Y.components.field?.defaultVariant??"outlined",ve="underline"===Se,Le=k??Y.components.phoneNumberInput?.borderRadius,Ee=Y.spacing.md,[Ie,je]=(0,_react.useState)(0),Fe=Ie+Ee+1+Ee,Oe=ue.nationalNumber.length>0,Te=D&&!j&&!Oe&&T.length>0,Ae=de||Oe,Pe=Boolean(j)&&"float"===F&&Ie>0,Re=(0,_useFloatingLabel.useFloatingLabel)({label:j,enabled:Pe,floated:Ae,required:D,variant:Se,sizeTokens:Ne,leadingOffset:Fe,paddingLeft:ve?0:Ne.paddingHorizontal,color:Y.colors.field.label,style:O}),De=(0,_react.useMemo)(()=>m.find(e=>e.iso===ue.iso),[m,ue.iso]),ze=planOf(ue.iso),we=E&&ze?(0,_mobileCore.formatPhoneAsTyped)(ue.nationalNumber,ze):ue.nationalNumber,qe=ee(ue.iso),ke=0===ue.nationalNumber.length||pe||!Number.isFinite(qe)?void 0:we.length+Math.max(0,qe-ue.nationalNumber.length),Me=ne(ue);(0,_react.useEffect)(()=>{Oe||he(!1)},[Oe]);const Ve=ze?(0,_mobileCore.maxNationalNumberLength)(ze,!1===v?"any":v):Number.POSITIVE_INFINITY,Be=ue.nationalNumber.length>=Ve,$e=!1!==v&&!1!==R&&Oe&&!Me&&(fe||Be),Ge="mobile"===v?"Enter a valid mobile number":"Enter a valid number",Ue=(0,_index4.hasFieldText)(P)?P:$e?R||Ge:void 0,We=!0===P||(0,_index4.hasFieldText)(Ue),He=(0,_react.useRef)(Me),Ye=(0,_react.useRef)(ue);Ye.current=ue,(0,_react.useEffect)(()=>{He.current!==Me&&(He.current=Me,b?.(Me),Me&&d?.(formatE164(Ye.current)))},[Me,d,b]);const Ke=(0,_react.useCallback)(e=>{if(e.includes("+")){const t=ie(e,ue.iso);if(t&&!I&&Q.some(e=>e.iso===t.iso))return void ce(t);if(t&&t.iso===ue.iso)return void ce(t)}ce({...ue,nationalNumber:te(digitsOnly(e),ue.iso)})},[Q,I,ue,ie,te,ce]),Je=(0,_react.useCallback)(e=>{const t=e;ce({callingCode:t.code,iso:t.iso,nationalNumber:te(ue.nationalNumber,t.iso)}),xe(!1);const i=(0,_index3.resolveHaptic)(V,"selection");i&&(0,_index3.triggerHaptic)(i)},[ue,V,te,ce]);(0,_react.useImperativeHandle)(t,()=>({focus:()=>J.current?.focus(),blur:()=>J.current?.blur(),clear:()=>ce({...Ye.current,nationalNumber:""}),isFocused:()=>J.current?.isFocused()??!1,getValue:()=>Ye.current,getE164:()=>formatE164(Ye.current),getFormatted:()=>{const e=Ye.current,t=planOf(e.iso);return t?(0,_mobileCore.formatPhoneAsTyped)(e.nationalNumber,t):e.nationalNumber},isValid:()=>ne(Ye.current),getCountry:()=>m.find(e=>e.iso===Ye.current.iso)}),[m,ne,ce]);const Qe=z||I,Xe=(0,_jsxRuntime.jsx)(_index4.FieldBase,{size:w,variant:Se,borderRadius:Le,topNotch:Re.topNotch,focused:de,disabled:z,error:We,filled:Oe,onPress:me,pressFeedback:!1,leadingDivider:!0,paddingLeft:ve?0:void 0,leading:(0,_jsxRuntime.jsxs)(_reactNative.Pressable,{onPress:()=>{Qe||(Ce.current=!0,xe(!0))},disabled:Qe,accessibilityRole:"button",accessibilityLabel:$??`Country code, currently +${ue.callingCode}`,accessibilityState:{disabled:Qe},"aria-disabled":Qe,hitSlop:6,onLayout:e=>{const{width:t}=e.nativeEvent.layout;je(e=>e===t?e:t)},style:K.codeTrigger,testID:H?`${H}-code`:void 0,children:[Z(De,Ne.fontSize,H?`${H}-flag`:void 0),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[K.codeText,{color:ye.color,fontSize:Ne.fontSize}],children:`+${ue.callingCode}`}),I?null:(0,_jsxRuntime.jsx)(_Chevron.Chevron,{color:z?Y.colors.field.iconDisabled:Y.colors.field.icon,size:Ne.iconSize,open:ge})]}),children:(0,_jsxRuntime.jsxs)(_reactNative.View,{style:K.inputWrap,children:[(0,_jsxRuntime.jsx)(_reactNative.TextInput,{ref:J,value:we,maxLength:ke,onChangeText:Ke,returnKeyType:a,submitBehavior:s,onSubmitEditing:u,blurOnSubmit:c,onSelectionChange:e=>{const{start:t,end:i}=e.nativeEvent.selection;_e(t!==i)},onFocus:()=>{be(!0),G?.()},onBlur:()=>{be(!1),Oe&&!Ce.current&&he(!0),U?.()},editable:!z,placeholder:Pe&&!Ae||Te?void 0:T,placeholderTextColor:ye.placeholderColor,accessibilityLabel:B??j??T,selectionColor:Y.colors.field.caret,keyboardType:"phone-pad",textContentType:"telephoneNumber",autoComplete:"tel",style:[K.input,{color:ye.color,fontSize:Ne.fontSize,...ye.weightStyle,paddingLeft:ve?0:void 0}],testID:H?`${H}-input`:void 0}),Te?(0,_jsxRuntime.jsx)(_index4.RequiredPlaceholder,{text:T,color:ye.placeholderColor,fontSize:Ne.fontSize,weightStyle:ye.weightStyle}):null]})});return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:W,testID:H,children:[j&&"top"===F?(0,_jsxRuntime.jsx)(_index4.FieldLabel,{size:w,required:D,children:j}):null,(0,_jsxRuntime.jsxs)(_reactNative.View,{style:K.fieldWrapper,children:[Xe,Re.node]}),(0,_jsxRuntime.jsx)(_index4.FieldMessage,{size:w,error:We,text:We?Ue:A}),(0,_jsxRuntime.jsx)(_OptionSheet.OptionSheet,{open:ge,onClose:()=>xe(!1),title:M,options:Q,sections:X,labelOf:e=>`${e.label} (+${e.code})`,getValue:e=>e.iso,disabledOf:()=>!1,descriptionOf:()=>{},iconOf:e=>Z(e,Y.typography.fontSize.lg),renderOption:C?(e,t)=>C(e,{selected:t.selected}):void 0,isSelected:e=>e===De?.iso,onSelect:Je,searchable:Q.length>8,searchPlaceholder:N,alphabetIndex:y??Q.length>20})]})});PhoneNumberInput.displayName="PhoneNumberInput";const buildStyles=e=>_reactNative.StyleSheet.create({fieldWrapper:{position:"relative",overflow:"visible"},codeTrigger:{flexDirection:"row",alignItems:"center",gap:2},flag:{includeFontPadding:!1,marginRight:4},codeText:{...(0,_index2.fontFor)(e,"semibold"),fontWeight:"600",includeFontPadding:!1,writingDirection:"ltr"},input:{padding:0,margin:0,includeFontPadding:!1,writingDirection:"ltr"},inputWrap:{flex:1,alignSelf:"stretch",justifyContent:"center"}});var _default=exports.default=PhoneNumberInput;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.useRadioGroup=exports.default=exports.RadioGroupContext=exports.Radio=void 0;var _react=require("react"),_reactNative=require("react-native"),_index=require("../../theme/index.js"),_hapticUtils=require("../../utils/hapticUtils.js"),_index2=require("../FieldBase/index.js"),_ChoiceText=require("../FieldBase/ChoiceText.js"),_RadioDot=require("./RadioDot.js"),_jsxRuntime=require("react/jsx-runtime");const RadioGroupContext=exports.RadioGroupContext=(0,_react.createContext)(null),useRadioGroup=()=>(0,_react.useContext)(RadioGroupContext);exports.useRadioGroup=useRadioGroup;const toneColor=(e,t)=>{switch(t){case"success":return e.colors.success;case"warning":return e.colors.warning;case"error":return e.colors.error;default:return e.colors.primary}},Radio=exports.Radio=(0,_react.forwardRef)((e,t)=>{const{value:i,selected:r,onChange:o,disabled:s=!1,label:a,description:l,error:c,size:d="md",tone:n="primary",accessibilityLabel:u,haptic:p,style:x,containerStyle:_,circleStyle:b,dotStyle:h,labelStyle:R,testID:y,...m}=e,C=(0,_index.useTheme)(),j=(0,_react.useMemo)(()=>buildStyles(C),[C]),w=useRadioGroup();__DEV__&&void 0===i&&console.warn("[@webority/mobile-ui] Radio was rendered without a `value`. Selection compares against it, so the group cannot track which option is chosen.");const f=w?w.selectedValue===i:!!r,S=w&&w.disabled||s,v=toneColor(C,n),g=C.components.radio?.labelGap??10,G=u??a;return(0,_jsxRuntime.jsxs)(_reactNative.Pressable,{ref:t,onPress:e=>{if(S)return;const t=(0,_hapticUtils.resolveHaptic)(p,"selection");t&&(0,_hapticUtils.triggerHaptic)(t),w?w.onChange(i):o?.(i)},disabled:S,accessibilityRole:"radio",accessibilityLabel:G,accessibilityHint:m.accessibilityHint??l,accessibilityState:{checked:f,disabled:S},"aria-checked":f,"aria-disabled":S,testID:y,hitSlop:6,...m,style:({pressed:e})=>[j.row,(0,_ChoiceText.hasChoiceDetail)(l,c)?j.rowTop:null,{opacity:S?.55:e?.85:1},x,_],children:[(0,_jsxRuntime.jsx)(_RadioDot.RadioDot,{selected:f,color:v,disabled:S&&!f,size:d,style:[!(0,_index2.hasFieldText)(c)||f||S?null:{borderColor:C.colors.field.borderError},b],dotStyle:h}),(0,_jsxRuntime.jsx)(_ChoiceText.ChoiceText,{label:a,description:l,error:c,disabled:S,labelLines:2,style:{marginLeft:g},labelStyle:R})]})});Radio.displayName="Radio";const buildStyles=e=>_reactNative.StyleSheet.create({row:{flexDirection:"row",alignItems:"center"},rowTop:{alignItems:"flex-start"}});var _default=exports.default=Radio;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.useRadioGroup=exports.default=exports.RadioGroupContext=exports.Radio=void 0;var _react=require("react"),_reactNative=require("react-native"),_index=require("../../theme/index.js"),_hapticUtils=require("../../utils/hapticUtils.js"),_index2=require("../FieldBase/index.js"),_ChoiceText=require("../FieldBase/ChoiceText.js"),_RadioDot=require("./RadioDot.js"),_jsxRuntime=require("react/jsx-runtime");const RadioGroupContext=exports.RadioGroupContext=(0,_react.createContext)(null),useRadioGroup=()=>(0,_react.useContext)(RadioGroupContext);exports.useRadioGroup=useRadioGroup;const toneColor=(e,t)=>{switch(t){case"success":return e.colors.success;case"warning":return e.colors.warning;case"error":return e.colors.error;default:return e.colors.primary}},Radio=exports.Radio=(0,_react.forwardRef)((e,t)=>{const{value:i,selected:r,onChange:o,disabled:s=!1,label:a,description:l,error:c,size:d="md",tone:n="primary",accessibilityLabel:u,haptic:p,style:x,containerStyle:_,circleStyle:b,dotStyle:h,labelStyle:R,testID:y,...m}=e,C=(0,_index.useTheme)(),f=(0,_react.useMemo)(()=>buildStyles(C),[C]),S=useRadioGroup();__DEV__&&void 0===i&&console.warn("[@webority/mobile-ui] Radio was rendered without a `value`. Selection compares against it, so the group cannot track which option is chosen.");const j=S?S.selectedValue===i:!!r,w=S&&S.disabled||s,g=toneColor(C,n),v=C.components.radio?.labelGap??10,T=u??(0,_index2.fieldTextAsString)(a),G=!0===S?.error||!0===c||(0,_index2.hasFieldText)(c);return(0,_jsxRuntime.jsxs)(_reactNative.Pressable,{ref:t,onPress:e=>{if(w)return;const t=(0,_hapticUtils.resolveHaptic)(p,"selection");t&&(0,_hapticUtils.triggerHaptic)(t),S?S.onChange(i):o?.(i)},disabled:w,accessibilityRole:"radio",accessibilityLabel:T,accessibilityHint:m.accessibilityHint??(0,_index2.fieldTextAsString)(l),accessibilityState:{checked:j,disabled:w},"aria-checked":j,"aria-disabled":w,testID:y,hitSlop:6,...m,style:({pressed:e})=>[f.row,(0,_ChoiceText.hasChoiceDetail)(l,c)?f.rowTop:null,{opacity:w?.55:e?.85:1},x,_],children:[(0,_jsxRuntime.jsx)(_RadioDot.RadioDot,{selected:j,color:g,disabled:w&&!j,size:d,style:[!G||j||w?null:{borderColor:C.colors.field.borderError},b],dotStyle:h}),(0,_jsxRuntime.jsx)(_ChoiceText.ChoiceText,{label:a,description:l,error:c,disabled:w,labelLines:2,style:{marginLeft:v},labelStyle:R})]})});Radio.displayName="Radio";const buildStyles=e=>_reactNative.StyleSheet.create({row:{flexDirection:"row",alignItems:"center"},rowTop:{alignItems:"flex-start"}});var _default=exports.default=Radio;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.RadioGroup=void 0;var _react=require("react"),_reactNative=require("react-native"),_index=require("../../hooks/index.js"),_Radio=require("./Radio.js"),_jsxRuntime=require("react/jsx-runtime");const RadioGroup=({value:e,defaultValue:a,onChange:i,children:t,disabled:r=!1,accessibilityLabel:o,style:s,testID:d})=>{const[u,l]=(0,_index.useControllableState)({value:e,defaultValue:a??void 0,onChange:i}),c=(0,_react.useMemo)(()=>({selectedValue:u,onChange:l,disabled:r}),[u,l,r]);return(0,_jsxRuntime.jsx)(_Radio.RadioGroupContext.Provider,{value:c,children:(0,_jsxRuntime.jsx)(_reactNative.View,{accessibilityRole:"radiogroup",accessibilityLabel:o,accessibilityState:{disabled:r},"aria-disabled":r,testID:d,style:s,children:t})})};exports.RadioGroup=RadioGroup,RadioGroup.displayName="RadioGroup";var _default=exports.default=RadioGroup;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.RadioGroup=void 0;var _react=require("react"),_reactNative=require("react-native"),_index=require("../../hooks/index.js"),_index2=require("../FieldBase/index.js"),_ChoiceText=require("../FieldBase/ChoiceText.js"),_Radio=require("./Radio.js"),_jsxRuntime=require("react/jsx-runtime");const RadioGroup=({value:e,defaultValue:i,onChange:r,children:a,disabled:t=!1,error:o,accessibilityLabel:s,style:d,testID:u})=>{const[l,c]=(0,_index.useControllableState)({value:e,defaultValue:i??void 0,onChange:r}),n=!0===o||(0,_index2.hasFieldText)(o),x=(0,_react.useMemo)(()=>({selectedValue:l,onChange:c,disabled:t,error:n}),[l,c,t,n]);return(0,_jsxRuntime.jsxs)(_Radio.RadioGroupContext.Provider,{value:x,children:[(0,_jsxRuntime.jsx)(_reactNative.View,{accessibilityRole:"radiogroup",accessibilityLabel:s,accessibilityState:{disabled:t},"aria-disabled":t,testID:u,style:d,children:a}),(0,_jsxRuntime.jsx)(_ChoiceText.ChoiceText,{error:o})]})};exports.RadioGroup=RadioGroup,RadioGroup.displayName="RadioGroup";var _default=exports.default=RadioGroup;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.segmentedControlTrackPadding=exports.segmentedControlSizes=exports.default=exports.SegmentedControl=void 0;var _react=require("react"),_reactNative=require("react-native"),_index=require("../../hooks/index.js"),_index2=require("../../theme/index.js"),_index3=require("../../utils/index.js"),_corners=require("../../utils/corners.js"),_slotIcon=require("../AppIcon/slotIcon.js"),_index4=require("../FieldBase/index.js"),_SquircleFill=require("../SquircleFill/SquircleFill.js"),_jsxRuntime=require("react/jsx-runtime");const segmentedControlSizes=exports.segmentedControlSizes={sm:{height:32,fontSize:12,paddingHorizontal:10,iconSize:14},md:{height:40,fontSize:14,paddingHorizontal:14,iconSize:16},lg:{height:48,fontSize:16,paddingHorizontal:18,iconSize:18}},segmentedControlTrackPadding=exports.segmentedControlTrackPadding=4,LABEL_LINE_HEIGHT_RATIO=1.25,sizeMap=segmentedControlSizes,TRACK_PADDING=segmentedControlTrackPadding,SegmentedControl=exports.SegmentedControl=(0,_react.forwardRef)((e,t)=>{const{segments:i,label:n,helperText:r,error:l,value:s,defaultValue:o,onChange:a,size:d="md",fullWidth:c=!0,disabled:u=!1,tone:g="primary",variant:m="segmented",radius:h,labelLines:x=1,haptic:p,accessibilityLabel:_,style:f,containerStyle:S,segmentStyle:b,selectedIndicatorStyle:y,textStyle:v,labelStyle:z,testID:j}=e,[C,R]=(0,_index.useControllableState)({value:s,defaultValue:o??i[0]?.value,onChange:a}),I=(0,_index2.useTheme)(),k=I.components.segmentedControl,q=(0,_react.useMemo)(()=>buildStyles(I),[I]),w=sizeMap[d],N={height:k?.[d]?.height??w.height,fontSize:k?.[d]?.fontSize??w.fontSize,paddingHorizontal:k?.[d]?.paddingHorizontal??w.paddingHorizontal,iconSize:k?.[d]?.iconSize??w.iconSize},L=x>=2?2:1,T=L>1,F="segmented"===m,H="underline"===m,M="pills"===m,A=F?k?.trackPadding??TRACK_PADDING:0,P=Math.ceil(1.25*N.fontSize)*(L-1),D=k?.underlineHeight??2,V=k?.pillInset??4,E="number"==typeof h?h:h?I.radius[h]:k?.radius,W=E??I.radius.md,B=void 0===E?I.radius.sm:Math.max(E-A,0),G=E??I.radius.full,O=E??0,[K,X]=(0,_react.useState)(0),J=(0,_react.useRef)((0,_index2.createAnimatedValue)(0)).current,Q=Math.max(0,i.findIndex(e=>e.value===C)),U=K>0?(K-2*A)/Math.max(i.length,1):0,Y=(0,_react.useCallback)((e,t)=>{if(t<=0)return;const i=t*e,n=I.motion.spring.snappy,r=_reactNative.Animated.spring(J,{toValue:i,damping:n.damping,stiffness:n.stiffness,mass:n.mass,overshootClamping:!0,useNativeDriver:!0});return r.start(),r},[I.motion.spring.snappy,J]);(0,_react.useEffect)(()=>{if(U>0){const e=Y(Q,U);return()=>e?.stop()}},[Q,U,Y]);const Z=(0,_react.useCallback)(e=>{const t=e.nativeEvent.layout.width;t!==K&&X(t)},[K]),$=(0,_react.useCallback)(e=>{if(u)return;if(e.value===C)return;const t=(0,_index3.resolveHaptic)(p,"selection");t&&(0,_index3.triggerHaptic)(t),R(e.value)},[u,R,C,p]),ee=F?I.colors.background.elevated:M?I.colors.primaryMuted:I.colors.primary,te=F?B:M?G:O,ie="neutral"===g?I.colors.text.primary:I.colors.primary,ne=I.colors.background.tertiary,re=(0,_SquircleFill.useSquircle)(F,W,Z),le=(0,_index4.hasFieldText)(n),se=(0,_index4.hasFieldText)(l)?l:r,oe=(0,_index4.hasFieldText)(se),ae=_??("string"==typeof n?n:void 0),de=(0,_jsxRuntime.jsxs)(_reactNative.View,{ref:t,accessibilityRole:"radiogroup",accessibilityLabel:ae,testID:j,style:[q.track,{...T?{minHeight:N.height+P}:{height:N.height},opacity:u?.55:1,alignSelf:c?"stretch":"flex-start"},F?{borderRadius:W,..._corners.smoothCorners,backgroundColor:re.active?"transparent":ne,padding:A}:H?{borderBottomColor:I.colors.border.secondary,borderBottomWidth:_reactNative.StyleSheet.hairlineWidth}:null,S,f],onLayout:re.onLayout,children:[re.active&&re.size?(0,_jsxRuntime.jsx)(_SquircleFill.SquircleFill,{width:re.size.width,height:re.size.height,radius:W,fill:ne}):null,(0,_jsxRuntime.jsxs)(_reactNative.View,{style:q.row,children:[U>0?(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{pointerEvents:"none",style:[q.thumb,F?T?{top:0,bottom:0}:{top:0,height:N.height-2*A}:M?{top:V,bottom:V}:{bottom:0,height:D},{width:U,borderRadius:te,..._corners.smoothCorners,backgroundColor:ee,transform:[{translateX:J}]},y]}):null,i.map(e=>{const t=e.value===C,i=t?ie:I.colors.text.tertiary,n=(0,_slotIcon.renderSlotIcon)(e.icon,{color:i,size:N.iconSize,selected:t,disabled:u});return(0,_jsxRuntime.jsxs)(_reactNative.Pressable,{onPress:()=>$(e),disabled:u,accessibilityRole:"radio",accessibilityLabel:e.label,accessibilityState:{checked:t,selected:t,disabled:u},"aria-checked":t,"aria-disabled":u,style:({pressed:e})=>[q.segment,T?q.segmentMultiline:null,{paddingHorizontal:N.paddingHorizontal,opacity:e&&!t?.7:1},b],children:[n?(0,_jsxRuntime.jsx)(_reactNative.View,{style:q.segmentIcon,children:n}):null,(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[q.segmentLabel,T?q.segmentLabelMultiline:null,{color:i,fontSize:N.fontSize,fontWeight:t?I.typography.fontWeight.semibold:I.typography.fontWeight.medium},v,z],numberOfLines:L,children:e.label})]},String(e.value))})]})]});return le||oe?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{alignSelf:c?"stretch":"flex-start"},children:[le?(0,_jsxRuntime.jsx)(_index4.FieldLabel,{size:d,children:n}):null,de,oe?(0,_jsxRuntime.jsx)(_index4.FieldMessage,{size:d,text:se,error:(0,_index4.hasFieldText)(l)}):null]}):de});SegmentedControl.displayName="SegmentedControl";const buildStyles=e=>_reactNative.StyleSheet.create({track:{flexDirection:"row",alignItems:"stretch",position:"relative"},row:{flex:1,flexDirection:"row",alignItems:"stretch",position:"relative",overflow:"hidden"},thumb:{position:"absolute",left:0},segment:{flex:1,flexDirection:"row",alignItems:"center",justifyContent:"center"},segmentIcon:{marginRight:6},segmentMultiline:{paddingVertical:6},segmentLabel:{includeFontPadding:!1},segmentLabelMultiline:{flexShrink:1,textAlign:"center"}});var _default=exports.default=SegmentedControl;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.segmentedControlTrackPadding=exports.segmentedControlSizes=exports.default=exports.SegmentedControl=void 0;var _react=require("react"),_reactNative=require("react-native"),_index=require("../../hooks/index.js"),_index2=require("../../theme/index.js"),_index3=require("../../utils/index.js"),_corners=require("../../utils/corners.js"),_slotIcon=require("../AppIcon/slotIcon.js"),_index4=require("../FieldBase/index.js"),_SquircleFill=require("../SquircleFill/SquircleFill.js"),_jsxRuntime=require("react/jsx-runtime");const segmentedControlSizes=exports.segmentedControlSizes={sm:{height:32,fontSize:12,paddingHorizontal:10,iconSize:14},md:{height:40,fontSize:14,paddingHorizontal:14,iconSize:16},lg:{height:48,fontSize:16,paddingHorizontal:18,iconSize:18}},segmentedControlTrackPadding=exports.segmentedControlTrackPadding=4,LABEL_LINE_HEIGHT_RATIO=1.25,sizeMap=segmentedControlSizes,TRACK_PADDING=segmentedControlTrackPadding,SegmentedControl=exports.SegmentedControl=(0,_react.forwardRef)((e,t)=>{const{segments:i,label:r,helperText:n,error:o,value:l,defaultValue:s,onChange:a,size:d="md",fullWidth:c=!0,disabled:u=!1,tone:g="primary",variant:m="segmented",radius:h,labelLines:x=1,haptic:p,accessibilityLabel:_,style:b,containerStyle:f,segmentStyle:S,selectedIndicatorStyle:y,textStyle:v,labelStyle:z,testID:j}=e,[C,R]=(0,_index.useControllableState)({value:l,defaultValue:s??i[0]?.value,onChange:a}),k=(0,_index2.useTheme)(),I=k.components.segmentedControl,w=(0,_react.useMemo)(()=>buildStyles(k),[k]),N=sizeMap[d],q={height:I?.[d]?.height??N.height,fontSize:I?.[d]?.fontSize??N.fontSize,paddingHorizontal:I?.[d]?.paddingHorizontal??N.paddingHorizontal,iconSize:I?.[d]?.iconSize??N.iconSize},L=x>=2?2:1,F=L>1,H="segmented"===m,M="underline"===m,T="pills"===m,A=H?I?.trackPadding??TRACK_PADDING:0,P=Math.ceil(1.25*q.fontSize)*(L-1),V=I?.underlineHeight??2,D=I?.pillInset??4,E="number"==typeof h?h:h?k.radius[h]:I?.radius,W=E??k.radius.md,B=void 0===E?k.radius.sm:Math.max(E-A,0),G=E??k.radius.full,O=E??0,[K,X]=(0,_react.useState)(0),J=(0,_react.useRef)((0,_index2.createAnimatedValue)(0)).current,Q=Math.max(0,i.findIndex(e=>e.value===C)),U=K>0?(K-2*A)/Math.max(i.length,1):0,Y=(0,_react.useCallback)((e,t)=>{if(t<=0)return;const i=t*e,r=k.motion.spring.snappy,n=_reactNative.Animated.spring(J,{toValue:i,damping:r.damping,stiffness:r.stiffness,mass:r.mass,overshootClamping:!0,useNativeDriver:!0});return n.start(),n},[k.motion.spring.snappy,J]);(0,_react.useEffect)(()=>{if(U>0){const e=Y(Q,U);return()=>e?.stop()}},[Q,U,Y]);const Z=(0,_react.useCallback)(e=>{const t=e.nativeEvent.layout.width;t!==K&&X(t)},[K]),$=(0,_react.useCallback)(e=>{if(u)return;if(e.value===C)return;const t=(0,_index3.resolveHaptic)(p,"selection");t&&(0,_index3.triggerHaptic)(t),R(e.value)},[u,R,C,p]),ee=H?k.colors.background.elevated:T?k.colors.primaryMuted:k.colors.primary,te=H?B:T?G:O,ie="neutral"===g?k.colors.text.primary:k.colors.primary,re=k.colors.background.tertiary,ne=(0,_SquircleFill.useSquircle)(H,W,Z),oe=!0===o||(0,_index4.hasFieldText)(o),le=oe&&!u,se=k.colors.field.borderError,ae=k.colors.border.width,de=(0,_index4.hasFieldText)(r),ce=oe?o:n,ue=(0,_index4.hasFieldText)(ce),ge=_??("string"==typeof r?r:void 0),me=(0,_jsxRuntime.jsxs)(_reactNative.View,{ref:t,accessibilityRole:"radiogroup",accessibilityLabel:ge,testID:j,style:[w.track,{...F?{minHeight:q.height+P}:{height:q.height},opacity:u?.55:1,alignSelf:c?"stretch":"flex-start"},H?{borderRadius:W,..._corners.smoothCorners,backgroundColor:ne.active?"transparent":re,padding:A}:M?{borderBottomColor:le?se:k.colors.border.secondary,borderBottomWidth:_reactNative.StyleSheet.hairlineWidth}:null,f,b],onLayout:ne.onLayout,children:[ne.active&&ne.size?(0,_jsxRuntime.jsx)(_SquircleFill.SquircleFill,{width:ne.size.width,height:ne.size.height,radius:W,fill:re,stroke:le?se:void 0,strokeWidth:ae}):null,(0,_jsxRuntime.jsxs)(_reactNative.View,{style:w.row,children:[U>0?(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{pointerEvents:"none",style:[w.thumb,H?F?{top:0,bottom:0}:{top:0,height:q.height-2*A}:T?{top:D,bottom:D}:{bottom:0,height:V},{width:U,borderRadius:te,..._corners.smoothCorners,backgroundColor:ee,transform:[{translateX:J}]},y]}):null,i.map(e=>{const t=e.value===C,i=t?ie:k.colors.text.tertiary,r=(0,_slotIcon.renderSlotIcon)(e.icon,{color:i,size:q.iconSize,selected:t,disabled:u});return(0,_jsxRuntime.jsxs)(_reactNative.Pressable,{onPress:()=>$(e),disabled:u,accessibilityRole:"radio",accessibilityLabel:e.label,accessibilityState:{checked:t,selected:t,disabled:u},"aria-checked":t,"aria-disabled":u,style:({pressed:e})=>[w.segment,F?w.segmentMultiline:null,{paddingHorizontal:q.paddingHorizontal,opacity:e&&!t?.7:1},S],children:[r?(0,_jsxRuntime.jsx)(_reactNative.View,{style:w.segmentIcon,children:r}):null,(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[w.segmentLabel,F?w.segmentLabelMultiline:null,{color:i,fontSize:q.fontSize,fontWeight:t?k.typography.fontWeight.semibold:k.typography.fontWeight.medium},v,z],numberOfLines:L,children:e.label})]},String(e.value))})]}),!le||M||ne.active?null:(0,_jsxRuntime.jsx)(_reactNative.View,{pointerEvents:"none",style:[_reactNative.StyleSheet.absoluteFill,{borderWidth:ae,borderColor:se,borderRadius:H?W:G,..._corners.smoothCorners}]})]});return de||ue?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{alignSelf:c?"stretch":"flex-start"},children:[de?(0,_jsxRuntime.jsx)(_index4.FieldLabel,{size:d,children:r}):null,me,ue?(0,_jsxRuntime.jsx)(_index4.FieldMessage,{size:d,text:ce,error:oe}):null]}):me});SegmentedControl.displayName="SegmentedControl";const buildStyles=e=>_reactNative.StyleSheet.create({track:{flexDirection:"row",alignItems:"stretch",position:"relative"},row:{flex:1,flexDirection:"row",alignItems:"stretch",position:"relative",overflow:"hidden"},thumb:{position:"absolute",left:0},segment:{flex:1,flexDirection:"row",alignItems:"center",justifyContent:"center"},segmentIcon:{marginRight:6},segmentMultiline:{paddingVertical:6},segmentLabel:{includeFontPadding:!1},segmentLabelMultiline:{flexShrink:1,textAlign:"center"}});var _default=exports.default=SegmentedControl;