react-native-system-ui 1.0.7 → 1.0.9

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 (98) hide show
  1. package/README.md +13 -13
  2. package/dist/cjs/components/action-sheet/ActionSheet.js +1 -1
  3. package/dist/cjs/components/calendar/Calendar.js +1 -1
  4. package/dist/cjs/components/cascader/Cascader.js +1 -1
  5. package/dist/cjs/components/cascader/useCascaderExtend.js +1 -1
  6. package/dist/cjs/components/cell/Cell.js +1 -1
  7. package/dist/cjs/components/collapse/Collapse.js +1 -1
  8. package/dist/cjs/components/dialog/Dialog.js +1 -1
  9. package/dist/cjs/components/dialog/imperative.js +1 -1
  10. package/dist/cjs/components/empty/Empty.js +1 -1
  11. package/dist/cjs/components/field/Field.js +1 -1
  12. package/dist/cjs/components/form/Form.js +1 -1
  13. package/dist/cjs/components/nav-bar/NavBar.js +1 -1
  14. package/dist/cjs/components/notice-bar/NoticeBar.js +1 -1
  15. package/dist/cjs/components/number-keyboard/NumberKeyboard.js +1 -1
  16. package/dist/cjs/components/overlay/Overlay.js +1 -1
  17. package/dist/cjs/components/picker/Picker.js +1 -1
  18. package/dist/cjs/components/popup/Popup.js +1 -1
  19. package/dist/cjs/components/portal/PortalHost.js +1 -1
  20. package/dist/cjs/components/search/Search.js +1 -1
  21. package/dist/cjs/components/selector/Selector.js +1 -1
  22. package/dist/cjs/components/slider/Slider.js +1 -1
  23. package/dist/cjs/components/stepper/Stepper.js +1 -1
  24. package/dist/cjs/components/swiper/Swiper.js +1 -1
  25. package/dist/cjs/components/tabs/Tabs.js +1 -1
  26. package/dist/cjs/components/tag/Tag.js +1 -1
  27. package/dist/cjs/components/toast/Toast.js +1 -1
  28. package/dist/cjs/hooks/calendar/utils.js +1 -0
  29. package/dist/cjs/hooks/cascader/utils.js +1 -0
  30. package/dist/cjs/hooks/dialog/ActionButton.js +1 -0
  31. package/dist/cjs/hooks/field/renderers.js +1 -0
  32. package/dist/cjs/hooks/form/utils.js +1 -0
  33. package/dist/cjs/hooks/number-keyboard/utils.js +1 -0
  34. package/dist/cjs/hooks/picker/normalize.js +1 -0
  35. package/dist/cjs/hooks/picker/value.js +1 -0
  36. package/dist/cjs/hooks/popup/utils.js +1 -0
  37. package/dist/cjs/hooks/slider/utils.js +1 -0
  38. package/dist/cjs/hooks/swiper/utils.js +1 -0
  39. package/dist/cjs/hooks/tabs/TabBarItem.js +1 -0
  40. package/dist/cjs/hooks/tabs/useTabsInternals.js +1 -0
  41. package/dist/cjs/utils/compare.js +1 -1
  42. package/dist/es/components/action-sheet/ActionSheet.js +1 -1
  43. package/dist/es/components/calendar/Calendar.js +1 -1
  44. package/dist/es/components/cascader/Cascader.js +1 -1
  45. package/dist/es/components/cascader/useCascaderExtend.js +1 -1
  46. package/dist/es/components/cell/Cell.js +1 -1
  47. package/dist/es/components/collapse/Collapse.js +1 -1
  48. package/dist/es/components/dialog/Dialog.js +1 -1
  49. package/dist/es/components/dialog/imperative.js +1 -1
  50. package/dist/es/components/empty/Empty.js +1 -1
  51. package/dist/es/components/field/Field.js +1 -1
  52. package/dist/es/components/form/Form.js +1 -1
  53. package/dist/es/components/nav-bar/NavBar.js +1 -1
  54. package/dist/es/components/notice-bar/NoticeBar.js +1 -1
  55. package/dist/es/components/number-keyboard/NumberKeyboard.js +1 -1
  56. package/dist/es/components/overlay/Overlay.js +1 -1
  57. package/dist/es/components/picker/Picker.js +1 -1
  58. package/dist/es/components/popup/Popup.js +1 -1
  59. package/dist/es/components/portal/PortalHost.js +1 -1
  60. package/dist/es/components/search/Search.js +1 -1
  61. package/dist/es/components/selector/Selector.js +1 -1
  62. package/dist/es/components/slider/Slider.js +1 -1
  63. package/dist/es/components/stepper/Stepper.js +1 -1
  64. package/dist/es/components/swiper/Swiper.js +1 -1
  65. package/dist/es/components/tabs/Tabs.js +1 -1
  66. package/dist/es/components/tag/Tag.js +1 -1
  67. package/dist/es/components/toast/Toast.js +1 -1
  68. package/dist/es/hooks/calendar/utils.js +1 -0
  69. package/dist/es/hooks/cascader/utils.js +1 -0
  70. package/dist/es/hooks/dialog/ActionButton.js +1 -0
  71. package/dist/es/hooks/field/renderers.js +1 -0
  72. package/dist/es/hooks/form/utils.js +1 -0
  73. package/dist/es/hooks/number-keyboard/utils.js +1 -0
  74. package/dist/es/hooks/picker/normalize.js +1 -0
  75. package/dist/es/hooks/picker/value.js +1 -0
  76. package/dist/es/hooks/popup/utils.js +1 -0
  77. package/dist/es/hooks/slider/utils.js +1 -0
  78. package/dist/es/hooks/swiper/utils.js +1 -0
  79. package/dist/es/hooks/tabs/TabBarItem.js +1 -0
  80. package/dist/es/hooks/tabs/useTabsInternals.js +1 -0
  81. package/dist/es/utils/compare.js +1 -1
  82. package/dist/types/components/form/Form.d.ts +1 -1
  83. package/dist/types/components/picker/Picker.d.ts +1 -1
  84. package/dist/types/hooks/calendar/utils.d.ts +1 -0
  85. package/dist/types/hooks/cascader/utils.d.ts +1 -0
  86. package/dist/types/hooks/dialog/ActionButton.d.ts +1 -0
  87. package/dist/types/hooks/field/renderers.d.ts +1 -0
  88. package/dist/types/hooks/form/utils.d.ts +1 -0
  89. package/dist/types/hooks/number-keyboard/utils.d.ts +1 -0
  90. package/dist/types/hooks/picker/normalize.d.ts +1 -0
  91. package/dist/types/hooks/picker/value.d.ts +1 -0
  92. package/dist/types/hooks/popup/utils.d.ts +1 -0
  93. package/dist/types/hooks/slider/utils.d.ts +1 -0
  94. package/dist/types/hooks/swiper/utils.d.ts +1 -0
  95. package/dist/types/hooks/tabs/TabBarItem.d.ts +1 -0
  96. package/dist/types/hooks/tabs/useTabsInternals.d.ts +1 -0
  97. package/dist/types/utils/compare.d.ts +1 -1
  98. package/package.json +125 -126
@@ -1 +1 @@
1
- function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},_extends.apply(null,arguments)}import React,{useCallback,useId,useImperativeHandle,useMemo,useRef,useState}from"react";import{Platform,Pressable,Text,TextInput,View}from"react-native";import{Clear,QuestionO}from"react-native-system-icon";import Cell from"../cell";import Dialog from"../dialog";import{formatNumberInput}from"../../utils/string";import{isDef,isFiniteNumber,isFunction,isObject,isRenderable,isText}from"../../utils/validate";import{useFieldTokens}from"./tokens";const alignMap={left:"flex-start",center:"center",right:"flex-end"},mapKeyboardType=e=>{switch(e){case"number":return"decimal-pad";case"digit":return"number-pad";case"tel":return"phone-pad";default:return}},FieldSlot=({onPress:e,style:t,children:r,accessibilityRole:n="button"})=>r?e?React.createElement(Pressable,{onPress:e,accessibilityRole:n,style:t},r):React.createElement(View,{style:t},r):null,FieldClearButton=({show:e,tokens:t,clearIcon:r,onPressIn:n,onPressOut:l,onPress:i})=>{if(!e)return null;const o="web"===Platform.OS?{onMouseDown:e=>{e.preventDefault?.(),e.stopPropagation?.()}}:void 0;return React.createElement(Pressable,_extends({style:[t.layout.clearIcon,{paddingHorizontal:t.spacing.rightIconGap}]},o,{onPressIn:n,onPressOut:l,onPress:i,accessibilityRole:"button"}),React.isValidElement(r)?r:React.createElement(Clear,{size:t.sizes.clearIcon,fill:t.colors.clear,color:t.colors.clear}))},FieldInput=({inputRef:e,tokens:t,isTextarea:r,disabled:n,error:l,finalTextAlign:i,lineHeight:o,textareaHeight:a,minHeight:s,inputStyle:c,value:u,onChangeText:d,onFocus:g,onBlur:m,onPressIn:p,rows:f,placeholderTextColor:b,keyboardType:y,onContentSizeChange:h,describedBy:x,secureTextEntry:R,editable:T,restInputProps:w})=>{const I=[r?t.layout.textarea:t.layout.input,{color:n?t.colors.disabled:l?t.colors.error:t.colors.input,fontSize:t.typography.inputSize,textAlign:i,...r?{lineHeight:o,height:a,minHeight:s}:{minHeight:t.sizes.controlMinHeight}},c];return React.createElement(TextInput,_extends({ref:e,style:I,value:u,onChangeText:d,onFocus:g,onBlur:m,onPressIn:p,editable:T,secureTextEntry:R,multiline:r,numberOfLines:r?f:void 0,keyboardType:y,placeholderTextColor:b,onContentSizeChange:r?h:void 0},x?{accessibilityDescribedBy:x}:null,{clearButtonMode:"never"},w))},FieldControlRow=({tokens:e,prefixNode:t,leftIconNode:r,controlNode:n,clearNode:l,rightIconNode:i,suffixNode:o})=>React.createElement(View,{style:e.layout.body},t,r,React.createElement(View,{style:[e.layout.controlWrapper,{minHeight:e.sizes.controlMinHeight}]},n,l),i,o),FieldImpl=(e,t)=>{const{tokensOverride:r,label:n,labelWidth:l,labelAlign:i,inputAlign:o,controlAlign:a,required:s=!1,colon:c=!1,intro:u,description:d,tooltip:g,error:m=!1,errorMessage:p,errorMessageAlign:f="left",errorMessagePosition:b="inner",disabled:y=!1,readOnly:h=!1,clearable:x=!1,clearTrigger:R,clearIcon:T,leftIcon:w,rightIcon:I,prefix:S,suffix:C,button:v,extra:P,value:k,defaultValue:E="",type:z="text",rows:M,autoSize:F=!1,formatter:H,formatTrigger:O,showWordLimit:L=!1,onOverlimit:N,onClear:A,onClick:D,onClickInput:B,onClickLeftIcon:V,onClickRightIcon:G,border:W,center:_,clickable:j,isLink:q,arrowDirection:K,size:Q,titleStyle:$,contentStyle:J,inputStyle:U,labelStyle:X,introStyle:Y,errorMessageStyle:Z,style:ee,androidRipple:te,children:re,placeholderTextColor:ne,onFocus:le,onBlur:ie,onPressIn:oe,onChangeText:ae,maxLength:se,...ce}=e,ue=useFieldTokens(r),de=l??ue.defaults.labelWidth,ge=i??ue.defaults.labelAlign,me=o??ue.defaults.inputAlign,pe=a??ue.defaults.controlAlign,fe=R??ue.defaults.clearTrigger,be=M??ue.defaults.rows,ye=O??ue.defaults.formatTrigger,he=[{width:de,minWidth:de,maxWidth:de,flexBasis:de,marginRight:ue.spacing.labelGap,flexShrink:0,flexGrow:0},$],xe=C??v,Re=u??d,Te=ne??(y?ue.colors.disabled:ue.colors.placeholder),we="textarea"===z,Ie=void 0!==k,[Se,Ce]=useState(E),ve=Ie?k??"":Se,[Pe,ke]=useState(!1),[Ee,ze]=useState(!1),Me=useRef(!1),Fe=useRef(null),He=useId(),Oe=useId(),Le=useMemo(()=>{const e=[isRenderable(p)?Oe:null,isRenderable(Re)?He:null].filter(Boolean);return e.length?e:void 0},[Oe,p,He,Re]),Ne=ue.defaults.textareaLineHeight,Ae=F&&isObject(F)?F:void 0,De=we?Ae&&isDef(Ae.minRows)?Math.max(1,Ae.minRows):Math.max(1,be):1,Be=we&&Ae&&isDef(Ae.maxRows)?Math.max(1,Ae.maxRows):void 0,Ve=useMemo(()=>we?Math.max(ue.sizes.textareaMinHeight,De*Ne):void 0,[we,Ne,De,ue.sizes.textareaMinHeight]),Ge=useMemo(()=>we&&Be?Math.max(ue.sizes.textareaMinHeight,Be*Ne):void 0,[we,Ne,Be,ue.sizes.textareaMinHeight]),[We,_e]=useState(Ve),je=useRef(ae);je.current=ae;const qe=useRef(N);qe.current=N;const Ke=useRef(le);Ke.current=le;const Qe=useRef(ie);Qe.current=ie;const $e=useRef(oe);$e.current=oe;const Je=useRef(B);Je.current=B;const Ue=useRef(A);Ue.current=A;const Xe=useCallback((e,t="onChange")=>H&&t===ye?H(e):e,[ye,H]),Ye=useCallback((e,t="onChange")=>{const r=Xe(e,t);Ie||Ce(r),je.current?.(r)},[Xe,Ie]);useImperativeHandle(t,()=>({focus:()=>Fe.current?.focus(),blur:()=>Fe.current?.blur(),clear:()=>Ye(""),get nativeElement(){return Fe.current}}));const Ze="left"!==pe?pe:me,et=x&&!h&&""!==(ve??"")&&("always"===fe||"focus"===fe&&(Pe||Ee)),tt=useCallback(e=>{let t=e??"";if("number"===z||"digit"===z){const e="number"===z;t=formatNumberInput(t,e,e)}isFiniteNumber(se)&&se>=0&&t.length>se&&(qe.current?.(t),t=t.slice(0,se)),Ye(t,"onChange")},[se,z,Ye]),rt=useCallback(e=>{ke(!0),Ke.current?.(e),h&&Fe.current?.blur()},[h]),nt=useCallback(e=>{if("web"!==Platform.OS&&Me.current)return Me.current=!1,ke(!1),void Qe.current?.(e);Ye(ve??"","onBlur"),ke(!1),Qe.current?.(e)},[Ye,ve]),lt=useCallback(e=>{$e.current?.(e),Je.current?.()},[]),it=useCallback(e=>{if(!we)return;const t=e.nativeEvent.contentSize?.height??0;if(!t)return;let r=t;F?(r=Math.max(Ve??t,t),Ge&&(r=Math.min(r,Ge))):Ve&&(r=Math.max(Ve,t)),_e(r)},[F,we,Ge,Ve]),ot=useCallback(()=>{"web"!==Platform.OS&&(Me.current=!0),Ye(""),Fe.current?.clear?.(),Fe.current?.focus?.(),Ue.current?.()},[Ye]),at=useCallback(()=>{ze(!0),"web"!==Platform.OS&&ot()},[ot]),st=useCallback(()=>{ze(!1),Me.current=!1},[]),ct=isRenderable(re)?React.createElement(View,{style:[ue.layout.children,{minHeight:ue.sizes.controlMinHeight}]},re):React.createElement(FieldInput,{inputRef:Fe,tokens:ue,isTextarea:we,disabled:y,error:m,finalTextAlign:Ze,lineHeight:Ne,textareaHeight:We,minHeight:Ve,inputStyle:U,value:ve??"",onChangeText:tt,onFocus:rt,onBlur:nt,onPressIn:lt,rows:be,keyboardType:ce.keyboardType??mapKeyboardType(z),placeholderTextColor:Te,onContentSizeChange:it,describedBy:Le,secureTextEntry:"password"===z,editable:!y&&!h,restInputProps:ce}),ut=[{width:"100%",justifyContent:alignMap[pe]},J],dt=e=>isText(e)?React.createElement(Text,{style:[ue.layout.affixText,{color:ue.colors.input,fontSize:ue.typography.inputSize}],numberOfLines:1},e):e,gt=isRenderable(g)?(()=>{const e=React.createElement(QuestionO,{size:ue.sizes.icon,fill:ue.colors.tooltip,color:ue.colors.tooltip});let t=e,r={message:g};if(!React.isValidElement(g)&&!isText(g)){const{icon:n,...l}=g;t=n??e,r=l}return React.createElement(Pressable,{style:[ue.layout.tooltip,{marginLeft:ue.spacing.rightIconGap}],onPress:()=>Dialog.show(r),accessibilityRole:"button"},t)})():null,mt=isRenderable(n)?(()=>{const e=isText(n)?React.createElement(Text,{style:[{color:y?ue.colors.disabled:ue.colors.label,fontSize:ue.typography.labelSize,textAlign:ge},X],numberOfLines:1},n,c?":":""):n;return React.createElement(View,{style:ue.layout.labelRow},e,gt)})():null,pt=L&&null!=se?(()=>{const e=(ve??"").length,t=isFunction(L)?L({currentCount:e,maxLength:se}):`${e}/${se}`;return isRenderable(t)?isText(t)?React.createElement(Text,{style:[ue.layout.wordLimit,{color:ue.colors.wordLimit,fontSize:ue.typography.wordLimitSize??12,textAlign:"right",alignSelf:"flex-end",marginTop:ue.spacing.wordLimitMarginTop}]},t):t:null})():null,ft=isRenderable(p)?isText(p)?React.createElement(Text,{nativeID:Oe,style:[ue.layout.message,{color:ue.colors.error,fontSize:ue.typography.messageSize,textAlign:f,marginTop:ue.spacing.messageMarginTop},Z],accessibilityLiveRegion:"polite"},p):React.createElement(View,{nativeID:Oe,style:[ue.layout.message,{alignSelf:alignMap[f],marginTop:ue.spacing.messageMarginTop}],accessibilityLiveRegion:"polite"},p):null,bt=isRenderable(Re)?isText(Re)?React.createElement(Text,{nativeID:He,style:[ue.layout.message,{color:ue.colors.intro,fontSize:ue.typography.introSize,textAlign:pe,marginTop:ue.spacing.introMarginTop},Y]},Re):React.createElement(View,{nativeID:He,style:{marginTop:ue.spacing.introMarginTop}},Re):null,yt=S?React.createElement(View,{style:[ue.layout.prefix,{paddingRight:ue.spacing.prefixGap}]},dt(S)):null,ht=xe?React.createElement(View,{style:[ue.layout.suffix,{paddingLeft:ue.spacing.suffixGap}]},dt(xe)):null,xt=w?React.createElement(FieldSlot,{onPress:V,style:[ue.layout.leftIcon,{marginRight:ue.spacing.leftIconGap,minWidth:ue.sizes.icon}]},w):null,Rt=I?React.createElement(FieldSlot,{onPress:G,style:[ue.layout.rightIcon,{paddingHorizontal:ue.spacing.rightIconGap}]},I):null,Tt=et?React.createElement(FieldClearButton,{show:et,tokens:ue,clearIcon:T,onPressIn:at,onPressOut:"web"===Platform.OS?st:void 0,onPress:"web"===Platform.OS?ot:void 0}):null,wt="outer"===b,It=React.createElement(Cell,{title:mt,icon:void 0,required:s,border:W,center:_,size:Q,clickable:j,isLink:q,arrowDirection:K,extra:P,titleStyle:he,style:[ee,wt&&(m||isRenderable(p))?{borderColor:ue.colors.error}:void 0],contentStyle:ut,accessibilityState:m?{invalid:!0}:void 0,accessibilityLabel:isText(n)?String(n):void 0,onPress:D,android_ripple:te},React.createElement(FieldControlRow,{tokens:ue,prefixNode:yt,leftIconNode:xt,controlNode:ct,clearNode:Tt,rightIconNode:Rt,suffixNode:ht}),pt,wt?null:ft,bt);return wt&&ft?React.createElement(React.Fragment,null,It,ft):It},FieldForwardRef=React.forwardRef(FieldImpl);FieldForwardRef.displayName="Field";export const Field=React.memo(FieldForwardRef);export default Field;
1
+ import React,{useCallback,useId,useImperativeHandle,useMemo,useRef,useState}from"react";import{Platform,Pressable,Text,View}from"react-native";import QuestionO from"react-native-system-icon/QuestionO";import Cell from"../cell";import Dialog from"../dialog";import{formatNumberInput}from"../../utils/string";import{isDef,isFiniteNumber,isFunction,isObject,isRenderable,isText}from"../../utils/validate";import{useFieldTokens}from"./tokens";import{alignMap,FieldClearButton,FieldControlRow,FieldInput,FieldSlot,mapKeyboardType,resolveTooltipDialog}from"../../hooks/field/renderers";const FieldImpl=(e,t)=>{const{tokensOverride:r,label:l,labelWidth:i,labelAlign:o,inputAlign:n,controlAlign:a,required:s=!1,colon:c=!1,intro:u,description:d,tooltip:g,error:m=!1,errorMessage:p,errorMessageAlign:f="left",errorMessagePosition:b="inner",disabled:y=!1,readOnly:R=!1,clearable:h=!1,clearTrigger:x,clearIcon:T,leftIcon:w,rightIcon:S,prefix:v,suffix:C,button:I,extra:k,value:F,defaultValue:M="",type:z="text",rows:E,autoSize:P=!1,formatter:L,formatTrigger:O,showWordLimit:D=!1,onOverlimit:H,onClear:A,onClick:N,onClickInput:B,onClickLeftIcon:V,onClickRightIcon:G,border:W,center:j,clickable:Q,isLink:q,arrowDirection:K,size:$,titleStyle:_,contentStyle:J,inputStyle:U,labelStyle:X,introStyle:Y,errorMessageStyle:Z,style:ee,androidRipple:te,children:re,placeholderTextColor:le,onFocus:ie,onBlur:oe,onPressIn:ne,onChangeText:ae,maxLength:se,...ce}=e,ue=useFieldTokens(r),de=i??ue.defaults.labelWidth,ge=o??ue.defaults.labelAlign,me=n??ue.defaults.inputAlign,pe=a??ue.defaults.controlAlign,fe=x??ue.defaults.clearTrigger,be=E??ue.defaults.rows,ye=O??ue.defaults.formatTrigger,Re=[{width:de,minWidth:de,maxWidth:de,flexBasis:de,marginRight:ue.spacing.labelGap,flexShrink:0,flexGrow:0},_],he=C??I,xe=u??d,Te=le??(y?ue.colors.disabled:ue.colors.placeholder),we="textarea"===z,Se=void 0!==F,[ve,Ce]=useState(M),Ie=Se?F??"":ve,[ke,Fe]=useState(!1),[Me,ze]=useState(!1),Ee=useRef(!1),Pe=useRef(null),Le=useId(),Oe=useId(),De=useMemo(()=>{const e=[isRenderable(p)?Oe:null,isRenderable(xe)?Le:null].filter(Boolean);return e.length?e:void 0},[Oe,p,Le,xe]),He=ue.defaults.textareaLineHeight,Ae=P&&isObject(P)?P:void 0,Ne=we?Ae&&isDef(Ae.minRows)?Math.max(1,Ae.minRows):Math.max(1,be):1,Be=we&&Ae&&isDef(Ae.maxRows)?Math.max(1,Ae.maxRows):void 0,Ve=useMemo(()=>we?Math.max(ue.sizes.textareaMinHeight,Ne*He):void 0,[we,He,Ne,ue.sizes.textareaMinHeight]),Ge=useMemo(()=>we&&Be?Math.max(ue.sizes.textareaMinHeight,Be*He):void 0,[we,He,Be,ue.sizes.textareaMinHeight]),[We,je]=useState(Ve),Qe=useRef(ae);Qe.current=ae;const qe=useRef(H);qe.current=H;const Ke=useRef(ie);Ke.current=ie;const $e=useRef(oe);$e.current=oe;const _e=useRef(ne);_e.current=ne;const Je=useRef(B);Je.current=B;const Ue=useRef(A);Ue.current=A;const Xe=useCallback((e,t="onChange")=>L&&t===ye?L(e):e,[ye,L]),Ye=useCallback((e,t="onChange")=>{const r=Xe(e,t);Se||Ce(r),Qe.current?.(r)},[Xe,Se]);useImperativeHandle(t,()=>({focus:()=>Pe.current?.focus(),blur:()=>Pe.current?.blur(),clear:()=>Ye(""),get nativeElement(){return Pe.current}}));const Ze="left"!==pe?pe:me,et=h&&!R&&""!==(Ie??"")&&("always"===fe||"focus"===fe&&(ke||Me)),tt=useCallback(e=>{let t=e??"";if("number"===z||"digit"===z){const e="number"===z;t=formatNumberInput(t,e,e)}isFiniteNumber(se)&&se>=0&&t.length>se&&(qe.current?.(t),t=t.slice(0,se)),Ye(t,"onChange")},[se,z,Ye]),rt=useCallback(e=>{Fe(!0),Ke.current?.(e),R&&Pe.current?.blur()},[R]),lt=useCallback(e=>{if("web"!==Platform.OS&&Ee.current)return Ee.current=!1,Fe(!1),void $e.current?.(e);Ye(Ie??"","onBlur"),Fe(!1),$e.current?.(e)},[Ye,Ie]),it=useCallback(e=>{_e.current?.(e),Je.current?.()},[]),ot=useCallback(e=>{if(!we)return;const t=e.nativeEvent.contentSize?.height??0;if(!t)return;let r=t;P?(r=Math.max(Ve??t,t),Ge&&(r=Math.min(r,Ge))):Ve&&(r=Math.max(Ve,t)),je(r)},[P,we,Ge,Ve]),nt=useCallback(()=>{"web"!==Platform.OS&&(Ee.current=!0),Ye(""),Pe.current?.clear?.(),Pe.current?.focus?.(),Ue.current?.()},[Ye]),at=useCallback(()=>{ze(!0),"web"!==Platform.OS&&nt()},[nt]),st=useCallback(()=>{ze(!1),Ee.current=!1},[]),ct=isRenderable(re)?React.createElement(View,{style:[ue.layout.children,{minHeight:ue.sizes.controlMinHeight}]},re):React.createElement(FieldInput,{inputRef:Pe,tokens:ue,isTextarea:we,disabled:y,error:m,finalTextAlign:Ze,lineHeight:He,textareaHeight:We,minHeight:Ve,inputStyle:U,value:Ie??"",onChangeText:tt,onFocus:rt,onBlur:lt,onPressIn:it,rows:be,keyboardType:ce.keyboardType??mapKeyboardType(z),placeholderTextColor:Te,onContentSizeChange:ot,describedBy:De,secureTextEntry:"password"===z,editable:!y&&!R,restInputProps:ce}),ut=[{width:"100%",justifyContent:alignMap[pe]},J],dt=e=>isText(e)?React.createElement(Text,{style:[ue.layout.affixText,{color:ue.colors.input,fontSize:ue.typography.inputSize}],numberOfLines:1},e):e,gt=isRenderable(g)?(()=>{const e=React.createElement(QuestionO,{size:ue.sizes.icon,fill:ue.colors.tooltip,color:ue.colors.tooltip}),{icon:t,dialogProps:r}=resolveTooltipDialog(g,e);return React.createElement(Pressable,{style:[ue.layout.tooltip,{marginLeft:ue.spacing.rightIconGap}],onPress:()=>Dialog.show(r),accessibilityRole:"button"},t)})():null,mt=isRenderable(l)?(()=>{const e=isText(l)?React.createElement(Text,{style:[{color:y?ue.colors.disabled:ue.colors.label,fontSize:ue.typography.labelSize,textAlign:ge},X],numberOfLines:1},l,c?":":""):l;return React.createElement(View,{style:ue.layout.labelRow},e,gt)})():null,pt=D&&null!=se?(()=>{const e=(Ie??"").length,t=isFunction(D)?D({currentCount:e,maxLength:se}):`${e}/${se}`;return isRenderable(t)?isText(t)?React.createElement(Text,{style:[ue.layout.wordLimit,{color:ue.colors.wordLimit,fontSize:ue.typography.wordLimitSize??12,textAlign:"right",alignSelf:"flex-end",marginTop:ue.spacing.wordLimitMarginTop}]},t):t:null})():null,ft=isRenderable(p)?isText(p)?React.createElement(Text,{nativeID:Oe,style:[ue.layout.message,{color:ue.colors.error,fontSize:ue.typography.messageSize,textAlign:f,marginTop:ue.spacing.messageMarginTop},Z],accessibilityLiveRegion:"polite"},p):React.createElement(View,{nativeID:Oe,style:[ue.layout.message,{alignSelf:alignMap[f],marginTop:ue.spacing.messageMarginTop}],accessibilityLiveRegion:"polite"},p):null,bt=isRenderable(xe)?isText(xe)?React.createElement(Text,{nativeID:Le,style:[ue.layout.message,{color:ue.colors.intro,fontSize:ue.typography.introSize,textAlign:pe,marginTop:ue.spacing.introMarginTop},Y]},xe):React.createElement(View,{nativeID:Le,style:{marginTop:ue.spacing.introMarginTop}},xe):null,yt=v?React.createElement(View,{style:[ue.layout.prefix,{paddingRight:ue.spacing.prefixGap}]},dt(v)):null,Rt=he?React.createElement(View,{style:[ue.layout.suffix,{paddingLeft:ue.spacing.suffixGap}]},dt(he)):null,ht=w?React.createElement(FieldSlot,{onPress:V,style:[ue.layout.leftIcon,{marginRight:ue.spacing.leftIconGap,minWidth:ue.sizes.icon}]},w):null,xt=S?React.createElement(FieldSlot,{onPress:G,style:[ue.layout.rightIcon,{paddingHorizontal:ue.spacing.rightIconGap}]},S):null,Tt=et?React.createElement(FieldClearButton,{show:et,tokens:ue,clearIcon:T,onPressIn:at,onPressOut:"web"===Platform.OS?st:void 0,onPress:"web"===Platform.OS?nt:void 0}):null,wt="outer"===b,St=React.createElement(Cell,{title:mt,icon:void 0,required:s,border:W,center:j,size:$,clickable:Q,isLink:q,arrowDirection:K,extra:k,titleStyle:Re,style:[ee,wt&&(m||isRenderable(p))?{borderColor:ue.colors.error}:void 0],contentStyle:ut,accessibilityState:m?{invalid:!0}:void 0,accessibilityLabel:isText(l)?String(l):void 0,onPress:N,android_ripple:te},React.createElement(FieldControlRow,{tokens:ue,prefixNode:yt,leftIconNode:ht,controlNode:ct,clearNode:Tt,rightIconNode:xt,suffixNode:Rt}),pt,wt?null:ft,bt);return wt&&ft?React.createElement(React.Fragment,null,St,ft):St},FieldForwardRef=React.forwardRef(FieldImpl);FieldForwardRef.displayName="Field";export const Field=React.memo(FieldForwardRef);export default Field;
@@ -1 +1 @@
1
- function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var r=1;r<arguments.length;r++){var t=arguments[r];for(var n in t)({}).hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e},_extends.apply(null,arguments)}import React,{useCallback,useContext,useEffect,useImperativeHandle,useMemo,useRef,useState}from"react";import{View}from"react-native";import{shallowEqualObject,renderTextOrNode}from"../../utils";import{isPromiseLike}from"../../utils/promise";import{isNumber,isString,isText}from"../../utils/validate";import{useLocale}from"../config-provider/useLocale";export const normalizeTrigger=e=>e?Array.isArray(e)?e:[e]:[];export const FORM_ALL_FIELDS_KEY="__form_all__";export const toNamePath=e=>null==e?[]:Array.isArray(e)?e:isNumber(e)?[e]:isString(e)?e.split("."):[String(e)];export const serializeNamePath=e=>toNamePath(e).join(".");export const getValueByName=(e,r)=>toNamePath(r).reduce((e,r)=>{if(null==e)return e;const t=String(r);if(Array.isArray(e)){const r=Number(t);return Number.isFinite(r)?e[r]:e[t]}return"object"==typeof e?e[t]:void 0},e);export const setValueByName=(e,r,t)=>{const n=toNamePath(r);if(!n.length)return e;const a=Array.isArray(e)?[...e]:"object"==typeof e&&null!==e?{...e}:{};let i=a;return n.forEach((e,r)=>{const a=String(e),u=Number(a);if(r===n.length-1)return void(Array.isArray(i)&&Number.isFinite(u)?i[u]=t:i[a]=t);const s=Array.isArray(i)&&Number.isFinite(u)?i[u]:i[a],l=null==s?isNumber(n[r+1])?[]:{}:Array.isArray(s)?[...s]:"object"==typeof s?{...s}:{};Array.isArray(i)&&Number.isFinite(u)?i[u]=l:i[a]=l,i=l}),a};export const FormContext=React.createContext(null);const runRuleValidation=(e,r,t,n)=>{const a=e.message??n??"Validation failed",i=null==r||""===r||Array.isArray(r)&&0===r.length;if(e.required&&(i||e.whitespace&&isString(r)&&0===r.trim().length))return a;if(i)return null;if(e.pattern&&isString(r)&&!e.pattern.test(r))return a;if(void 0!==e.len||void 0!==e.min||void 0!==e.max){const t=isNumber(r)?r:isString(r)||Array.isArray(r)?r.length:0;if(void 0!==e.len&&t!==e.len)return a;if(void 0!==e.min&&t<e.min)return a;if(void 0!==e.max&&t>e.max)return a}if(!e.validator)return null;const u=e=>isString(e)?e:!1===e?a:null,s=e.validator(r,t);return isPromiseLike(s)?s.then(u):u(s)},InternalFormImpl=(e,r)=>{const{initialValues:t,colon:n,labelWidth:a,showValidateMessage:i=!0,onValuesChange:u,onFinish:s,style:l,footer:c,children:o,...m}=e,f=useLocale(),d=useRef({}),g=useRef({}),y=useRef(t??d.current),h=useRef({}),N=useRef(new Map),b=useRef(t??d.current),p=useRef({}),V=useRef(new Set),v=useRef(u),F=useRef(s);v.current=u,F.current=s;const x=t??d.current,[,R]=useState(0),_=useCallback((e,r)=>{V.current.forEach(t=>t(e,r))},[]);useEffect(()=>{shallowEqualObject(y.current,x)||(y.current=x,b.current=x,g.current={},R(e=>e+1),_({[FORM_ALL_FIELDS_KEY]:!0},x))},[x,_]);const A=useCallback((e,r)=>{const t=serializeNamePath(e),n=g.current[t];if(!r.length){if(!n)return;const r={...g.current};return delete r[t],g.current=r,void _({[t]:getValueByName(b.current,e)},b.current)}n?.[0]===r[0]&&n.length===r.length||(g.current={...g.current,[t]:r},_({[t]:getValueByName(b.current,e)},b.current))},[_]),E=useCallback((e,r)=>{const t=serializeNamePath(e),n=h.current[t];if(n?.dependencies?.length)for(const e of n.dependencies){const r=serializeNamePath(e),n=N.current.get(r);n&&(n.delete(t),n.size||N.current.delete(r))}if(h.current[t]={...r,name:e},r.dependencies?.length)for(const e of r.dependencies){const r=serializeNamePath(e),n=N.current.get(r);n?n.add(t):N.current.set(r,new Set([t]))}if(void 0!==r.initialValue){void 0===getValueByName(y.current,e)&&(y.current=setValueByName(y.current,e,r.initialValue));if(void 0===getValueByName(b.current,e)){const n=setValueByName(b.current,e,r.initialValue);b.current=n,_({[t]:r.initialValue},n)}}return()=>{const r=h.current[t];if(delete h.current[t],r?.dependencies?.length)for(const e of r.dependencies){const r=serializeNamePath(e),n=N.current.get(r);n&&(n.delete(t),n.size||N.current.delete(r))}A(e,[])}},[_,A]),P=useRef(f);P.current=f;const B=useCallback(async(e,r,t,n)=>{const a=serializeNamePath(e),i=(p.current[a]??0)+1;p.current[a]=i;const u=h.current[a],s=u?.rules??[];if(!s.length)return A(e,[]),!0;const l=r?s.filter(e=>{const t=e.validateTrigger??u.validateTrigger;return!t||normalizeTrigger(t).includes(r)}):s;if(!l.length)return g.current[a]?.length&&A(e,[]),!0;const c=n??b.current,o=t??getValueByName(c,e),m=P.current?.vanForm?.validationFailed;for(const r of l){const t=runRuleValidation(r,o,c,m),n=isPromiseLike(t)?await t:t;if(p.current[a]!==i)return!0;if(n)return A(e,[n]),!1}return p.current[a]!==i||A(e,[]),!0},[A]),S=useCallback(async e=>{const r=e??Object.values(h.current).map(e=>e.name);if((await Promise.all(r.map(e=>B(e)))).some(e=>!e))throw g.current;return b.current},[B]),C=useCallback((e,r,t,n,a)=>{B(r,t,n,a);const i=N.current.get(e);if(i?.size)for(const e of i){const r=h.current[e];r&&B(r.name,t,getValueByName(a,r.name),a)}},[B]),z=useCallback((e,r,t)=>{const n=serializeNamePath(e),a=b.current;if(getValueByName(a,e)===r)return;const i=setValueByName(a,e,r);b.current=i,v.current?.(i,n,r),C(n,e,t,r,i),_({[n]:r},i)},[_,C]),w=useMemo(()=>({submit:async()=>{try{const e=await S();return F.current?.(e),e}catch{return}},getFieldsValue:()=>b.current,setFieldsValue:(e,r)=>{const t=r?.validate??!1,n=b.current;let a=n;const i={};Object.keys(e).forEach(r=>{const n=e[r];getValueByName(a,r)!==n&&(i[r]=n,a=setValueByName(a,r,n),v.current?.(a,r,n),t&&C(r,r,void 0,n,a))}),a!==n&&(b.current=a,_(i,a))},resetFields:()=>{let e=y.current;Object.values(h.current).forEach(r=>{void 0!==r.initialValue&&void 0===getValueByName(e,r.name)&&(e=setValueByName(e,r.name,r.initialValue))}),b.current=e,g.current={},_({[FORM_ALL_FIELDS_KEY]:!0},e)},validateFields:S,getFieldError:e=>g.current[serializeNamePath(e)]??[]}),[S,C,_]);useImperativeHandle(r,()=>w,[w]);const L=useMemo(()=>({getFieldValue:e=>getValueByName(b.current,e),setFieldValue:z,registerField:E,getFieldError:e=>g.current[serializeNamePath(e)],validateField:(e,r)=>B(e,r),getFieldsValue:()=>b.current,subscribe:e=>(V.current.add(e),()=>V.current.delete(e)),form:w,colon:n,labelWidth:a,showValidateMessage:i}),[z,E,B,w,n,a,i]);return React.createElement(FormContext.Provider,{value:L},React.createElement(View,_extends({style:l},m),o,isText(c)?renderTextOrNode(c,[]):c))},InternalFormRef=React.forwardRef(InternalFormImpl),InternalForm=React.memo(InternalFormRef);export const useWatch=(e,r)=>{const t=useContext(FormContext),n=void 0===e?void 0:Array.isArray(e)?e.length&&isText(e[0])?[e]:e:[e],a=useCallback(e=>{const a=e??t?.getFieldsValue?.()??r?.current?.getFieldsValue?.()??{};if(!n)return a;if(1===n.length)return getValueByName(a,n[0]);const i={};for(const e of n)i[serializeNamePath(e)]=getValueByName(a,e);return i},[t,r,n]),[i,u]=useState(()=>a());return useEffect(()=>{if(t?.subscribe)return t.subscribe((e,r)=>{"__form_all__"in e?u(a(r)):n&&!n.some(r=>serializeNamePath(r)in e)||u(a(r))})},[t,a,n]),useEffect(()=>{u(a())},[a]),i};export const FormSubscribe=({to:e,children:r})=>{const t=useContext(FormContext),[n,a]=useState({});return useEffect(()=>{if(t?.subscribe)return t.subscribe(r=>{(!e||"__form_all__"in r||Object.keys(r).some(r=>e.includes(r)))&&a(r)})},[t,e]),React.createElement(React.Fragment,null,r(n,t?.form||null))};export default InternalForm;
1
+ function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},_extends.apply(null,arguments)}import React,{useCallback,useContext,useEffect,useImperativeHandle,useMemo,useRef,useState}from"react";import{View}from"react-native";import{deepEqualObject,renderTextOrNode}from"../../utils";import{isPromiseLike}from"../../utils/promise";import{isText}from"../../utils/validate";import{useLocale}from"../config-provider/useLocale";import{getValueByName,normalizeTrigger,runRuleValidation,serializeNamePath,setValueByName}from"../../hooks/form/utils";export{getValueByName,normalizeTrigger,serializeNamePath,setValueByName,toNamePath}from"../../hooks/form/utils";export const FORM_ALL_FIELDS_KEY="__form_all__";export const FormContext=React.createContext(null);const InternalFormImpl=(e,t)=>{const{initialValues:r,colon:n,labelWidth:a,showValidateMessage:u=!0,onValuesChange:s,onFinish:l,style:c,footer:i,children:o,...m}=e,f=useLocale(),d=useRef({}),g=useRef({}),h=useRef(r??d.current),V=useRef({}),N=useRef(new Map),F=useRef(r??d.current),b=useRef({}),p=useRef(new Set),y=useRef(s),v=useRef(l);y.current=s,v.current=l;const R=r??d.current,[,_]=useState(0),x=useCallback((e,t)=>{p.current.forEach(r=>r(e,t))},[]);useEffect(()=>{deepEqualObject(h.current,R)||(h.current=R,F.current=R,g.current={},_(e=>e+1),x({[FORM_ALL_FIELDS_KEY]:!0},R))},[R,x]);const B=useCallback((e,t)=>{const r=serializeNamePath(e),n=g.current[r];if(!t.length){if(!n)return;const t={...g.current};return delete t[r],g.current=t,void x({[r]:getValueByName(F.current,e)},F.current)}n?.[0]===t[0]&&n.length===t.length||(g.current={...g.current,[r]:t},x({[r]:getValueByName(F.current,e)},F.current))},[x]),E=useCallback((e,t)=>{const r=serializeNamePath(e),n=V.current[r];if(n?.dependencies?.length)for(const e of n.dependencies){const t=serializeNamePath(e),n=N.current.get(t);n&&(n.delete(r),n.size||N.current.delete(t))}if(V.current[r]={...t,name:e},t.dependencies?.length)for(const e of t.dependencies){const t=serializeNamePath(e),n=N.current.get(t);n?n.add(r):N.current.set(t,new Set([r]))}if(void 0!==t.initialValue){void 0===getValueByName(h.current,e)&&(h.current=setValueByName(h.current,e,t.initialValue));if(void 0===getValueByName(F.current,e)){const n=setValueByName(F.current,e,t.initialValue);F.current=n,x({[r]:t.initialValue},n)}}return()=>{const t=V.current[r];if(delete V.current[r],t?.dependencies?.length)for(const e of t.dependencies){const t=serializeNamePath(e),n=N.current.get(t);n&&(n.delete(r),n.size||N.current.delete(t))}B(e,[])}},[x,B]),z=useRef(f);z.current=f;const P=useCallback(async(e,t,r,n)=>{const a=serializeNamePath(e),u=(b.current[a]??0)+1;b.current[a]=u;const s=V.current[a],l=s?.rules??[];if(!l.length)return B(e,[]),!0;const c=t?l.filter(e=>{const r=e.validateTrigger??s.validateTrigger;return!r||normalizeTrigger(r).includes(t)}):l;if(!c.length)return g.current[a]?.length&&B(e,[]),!0;const i=n??F.current,o=r??getValueByName(i,e),m=z.current?.vanForm?.validationFailed;for(const t of c){const r=runRuleValidation(t,o,i,m),n=isPromiseLike(r)?await r:r;if(b.current[a]!==u)return!0;if(n)return B(e,[n]),!1}return b.current[a]!==u||B(e,[]),!0},[B]),C=useCallback(async e=>{const t=e??Object.values(V.current).map(e=>e.name);if((await Promise.all(t.map(e=>P(e)))).some(e=>!e))throw g.current;return F.current},[P]),k=useCallback((e,t,r,n,a)=>{P(t,r,n,a);const u=N.current.get(e);if(u?.size)for(const e of u){const t=V.current[e];t&&P(t.name,r,getValueByName(a,t.name),a)}},[P]),L=useCallback((e,t,r)=>{const n=serializeNamePath(e),a=F.current;if(getValueByName(a,e)===t)return;const u=setValueByName(a,e,t);F.current=u,y.current?.(u,n,t),k(n,e,r,t,u),x({[n]:t},u)},[x,k]),O=useMemo(()=>({submit:async()=>{try{const e=await C();return v.current?.(e),e}catch{return}},getFieldsValue:()=>F.current,setFieldsValue:(e,t)=>{const r=t?.validate??!1,n=F.current;let a=n;const u={};Object.keys(e).forEach(t=>{const n=e[t];getValueByName(a,t)!==n&&(u[t]=n,a=setValueByName(a,t,n),y.current?.(a,t,n),r&&k(t,t,void 0,n,a))}),a!==n&&(F.current=a,x(u,a))},resetFields:()=>{let e=h.current;Object.values(V.current).forEach(t=>{void 0!==t.initialValue&&void 0===getValueByName(e,t.name)&&(e=setValueByName(e,t.name,t.initialValue))}),h.current=e,F.current=e,g.current={},x({[FORM_ALL_FIELDS_KEY]:!0},e)},validateFields:C,getFieldError:e=>g.current[serializeNamePath(e)]??[]}),[C,k,x]);useImperativeHandle(t,()=>O,[O]);const w=useMemo(()=>({getFieldValue:e=>getValueByName(F.current,e),setFieldValue:L,registerField:E,getFieldError:e=>g.current[serializeNamePath(e)],validateField:(e,t)=>P(e,t),getFieldsValue:()=>F.current,subscribe:e=>(p.current.add(e),()=>p.current.delete(e)),form:O,colon:n,labelWidth:a,showValidateMessage:u}),[L,E,P,O,n,a,u]);return React.createElement(FormContext.Provider,{value:w},React.createElement(View,_extends({style:c},m),o,isText(i)?renderTextOrNode(i,[]):i))},InternalFormRef=React.forwardRef(InternalFormImpl),InternalForm=React.memo(InternalFormRef);export const useWatch=(e,t)=>{const r=useContext(FormContext),n=void 0===e?void 0:Array.isArray(e)?e.length&&isText(e[0])?[e]:e:[e],a=useCallback(e=>{const a=e??r?.getFieldsValue?.()??t?.current?.getFieldsValue?.()??{};if(!n)return a;if(1===n.length)return getValueByName(a,n[0]);const u={};for(const e of n)u[serializeNamePath(e)]=getValueByName(a,e);return u},[r,t,n]),[u,s]=useState(()=>a());return useEffect(()=>{if(r?.subscribe)return r.subscribe((e,t)=>{"__form_all__"in e?s(a(t)):n&&!n.some(t=>serializeNamePath(t)in e)||s(a(t))})},[r,a,n]),useEffect(()=>{s(a())},[a]),u};export const FormSubscribe=({to:e,children:t})=>{const r=useContext(FormContext),[n,a]=useState({});return useEffect(()=>{if(r?.subscribe)return r.subscribe(t=>{(!e||"__form_all__"in t||Object.keys(t).some(t=>e.includes(t)))&&a(t)})},[r,e]),React.createElement(React.Fragment,null,t(n,r?.form||null))};export default InternalForm;
@@ -1 +1 @@
1
- function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var a in r)({}).hasOwnProperty.call(r,a)&&(e[a]=r[a])}return e},_extends.apply(null,arguments)}import React,{useCallback,useState}from"react";import{Platform,Pressable,Text,View}from"react-native";import{ArrowLeft}from"react-native-system-icon";import{useAriaPress}from"../../hooks";import{useLocale}from"../config-provider/useLocale";import{useDirection}from"../config-provider/useDirection";import{createHairlineView}from"../../utils/hairline";import{isRenderable,isText,renderTextOrNode}from"../../utils";import{SafeAreaView}from"../safe-area-view";import{useNavBarTokens}from"./tokens";const NavBarBaseImpl=e=>{const{tokensOverride:t,title:r,description:a,children:o,leftText:i,rightText:l,leftIcon:s,rightIcon:n,leftArrow:c,fixed:d,placeholder:u,zIndex:f,border:y,safeAreaInsetTop:m,background:p,tintColor:b,titleStyle:g,descriptionStyle:h,sideStyle:v,onPressLeft:R,onClickLeft:x,onPressRight:w,onClickRight:B,style:P,...k}=e,E=useLocale(),T=useDirection(),L=useNavBarTokens(t),N=c??L.defaults.leftArrow,S=d??L.defaults.fixed,V=u??L.defaults.placeholder,A=f??L.defaults.zIndex,I=y??L.defaults.border,O=m??S,z=p??L.colors.background,F=R??x,C=w??B,[D,_]=useState(L.sizing.height),$=S&&V,W=useCallback(e=>{if(!$)return;const t=e.nativeEvent.layout.height;_(e=>Math.abs(e-t)<.5?e:t)},[$]),j=b??L.colors.text,H=b??L.colors.icon,M=useAriaPress({disabled:!F,onPress:F,extraProps:{accessibilityRole:"button",accessibilityLabel:isText(i)?`${i}`:E?.vanNavBar?.back??"Back"}}),X=useAriaPress({disabled:!C,onPress:C,extraProps:{accessibilityRole:"button",accessibilityLabel:isText(l)?`${l}`:E?.vanNavBar?.action??"Actions"}}),q=e=>{const t="left"===e,r=t?i:l,a=t?s:n,o=t?M:X,c=t?F:C,d=t?!0===N?React.createElement(ArrowLeft,{size:18,fill:H,color:H,style:"rtl"===T?{transform:[{scaleX:-1}]}:void 0}):isRenderable(N)&&N:null;if(!(!!c||isRenderable(d)||isRenderable(r)||isRenderable(a)))return React.createElement(View,{style:L.layout.sidePlaceholder});const u=React.createElement(React.Fragment,null,d,isRenderable(a)?a:null,isRenderable(r)?isText(r)?React.createElement(Text,{numberOfLines:1,style:[L.layout.sideText,{color:H,fontFamily:L.typography.fontFamily}]},r):r:null),f=[L.layout.side,!t&&L.layout.rightAlign,v];return c?React.createElement(Pressable,_extends({hitSlop:{top:8,right:8,bottom:8,left:8},testID:`rv-navbar-${e}`,style:f},o.interactionProps),u):React.createElement(View,{testID:`rv-navbar-${e}`,style:f},u)},G=isRenderable(o)?o:React.createElement(View,{style:L.layout.titleWrapper},isRenderable(r)&&renderTextOrNode(r,[L.layout.title,{color:j,fontFamily:L.typography.fontFamily,fontSize:L.typography.titleSize,fontWeight:L.typography.titleWeight},g],{numberOfLines:1}),isRenderable(a)&&renderTextOrNode(a,[L.layout.description,{color:b??L.colors.description,fontFamily:L.typography.fontFamily,fontSize:L.typography.descriptionSize},h],{numberOfLines:1})),J=React.createElement(View,{style:[L.layout.bar,{backgroundColor:z}],onLayout:O?void 0:W},q("left"),React.createElement(View,{style:L.layout.center},G),q("right"),I&&React.createElement(View,{style:createHairlineView({position:"bottom",color:L.colors.border,left:0,right:0})})),K=O?React.createElement(SafeAreaView,{onLayout:W,style:{backgroundColor:z}},J):J;return React.createElement(React.Fragment,null,$&&React.createElement(View,{testID:"rv-navbar-placeholder",style:{height:D}}),React.createElement(View,_extends({},k,{accessibilityRole:"web"===Platform.OS?"navigation":void 0,style:[L.layout.container,S&&[L.layout.fixed,{zIndex:A}],P]}),K))},NavBarBase=React.memo(NavBarBaseImpl);NavBarBase.displayName="NavBar";export default NavBarBase;
1
+ function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var a in r)({}).hasOwnProperty.call(r,a)&&(e[a]=r[a])}return e},_extends.apply(null,arguments)}import React,{useCallback,useState}from"react";import{Platform,Pressable,Text,View}from"react-native";import ArrowLeft from"react-native-system-icon/ArrowLeft";import{useAriaPress}from"../../hooks";import{useLocale}from"../config-provider/useLocale";import{useDirection}from"../config-provider/useDirection";import{createHairlineView}from"../../utils/hairline";import{isRenderable,isText,renderTextOrNode}from"../../utils";import{SafeAreaView}from"../safe-area-view";import{useNavBarTokens}from"./tokens";const NavBarBaseImpl=e=>{const{tokensOverride:t,title:r,description:a,children:o,leftText:i,rightText:l,leftIcon:s,rightIcon:n,leftArrow:c,fixed:d,placeholder:f,zIndex:u,border:y,safeAreaInsetTop:m,background:p,tintColor:b,titleStyle:g,descriptionStyle:h,sideStyle:v,onPressLeft:R,onClickLeft:x,onPressRight:w,onClickRight:B,style:P,...k}=e,E=useLocale(),L=useDirection(),T=useNavBarTokens(t),N=c??T.defaults.leftArrow,A=d??T.defaults.fixed,S=f??T.defaults.placeholder,V=u??T.defaults.zIndex,I=y??T.defaults.border,O=m??A,z=p??T.colors.background,F=R??x,C=w??B,[D,_]=useState(T.sizing.height),$=A&&S,W=useCallback(e=>{if(!$)return;const t=e.nativeEvent.layout.height;_(e=>Math.abs(e-t)<.5?e:t)},[$]),j=b??T.colors.text,H=b??T.colors.icon,M=useAriaPress({disabled:!F,onPress:F,extraProps:{accessibilityRole:"button",accessibilityLabel:isText(i)?`${i}`:E?.vanNavBar?.back??"Back"}}),X=useAriaPress({disabled:!C,onPress:C,extraProps:{accessibilityRole:"button",accessibilityLabel:isText(l)?`${l}`:E?.vanNavBar?.action??"Actions"}}),q=e=>{const t="left"===e,r=t?i:l,a=t?s:n,o=t?M:X,c=t?F:C,d=t?!0===N?React.createElement(ArrowLeft,{size:18,fill:H,color:H,style:"rtl"===L?{transform:[{scaleX:-1}]}:void 0}):isRenderable(N)&&N:null;if(!(!!c||isRenderable(d)||isRenderable(r)||isRenderable(a)))return React.createElement(View,{style:T.layout.sidePlaceholder});const f=React.createElement(React.Fragment,null,d,isRenderable(a)?a:null,isRenderable(r)?isText(r)?React.createElement(Text,{numberOfLines:1,style:[T.layout.sideText,{color:H,fontFamily:T.typography.fontFamily}]},r):r:null),u=[T.layout.side,!t&&T.layout.rightAlign,v];return c?React.createElement(Pressable,_extends({hitSlop:{top:8,right:8,bottom:8,left:8},testID:`rv-navbar-${e}`,style:u},o.interactionProps),f):React.createElement(View,{testID:`rv-navbar-${e}`,style:u},f)},G=isRenderable(o)?o:React.createElement(View,{style:T.layout.titleWrapper},isRenderable(r)&&renderTextOrNode(r,[T.layout.title,{color:j,fontFamily:T.typography.fontFamily,fontSize:T.typography.titleSize,fontWeight:T.typography.titleWeight},g],{numberOfLines:1}),isRenderable(a)&&renderTextOrNode(a,[T.layout.description,{color:b??T.colors.description,fontFamily:T.typography.fontFamily,fontSize:T.typography.descriptionSize},h],{numberOfLines:1})),J=React.createElement(View,{style:[T.layout.bar,{backgroundColor:z}],onLayout:O?void 0:W},q("left"),React.createElement(View,{style:T.layout.center},G),q("right"),I&&React.createElement(View,{style:createHairlineView({position:"bottom",color:T.colors.border,left:0,right:0})})),K=O?React.createElement(SafeAreaView,{onLayout:W,style:{backgroundColor:z}},J):J;return React.createElement(React.Fragment,null,$&&React.createElement(View,{testID:"rv-navbar-placeholder",style:{height:D}}),React.createElement(View,_extends({},k,{accessibilityRole:"web"===Platform.OS?"navigation":void 0,style:[T.layout.container,A&&[T.layout.fixed,{zIndex:V}],P]}),K))},NavBarBase=React.memo(NavBarBaseImpl);NavBarBase.displayName="NavBar";export default NavBarBase;
@@ -1 +1 @@
1
- function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var i in a)({}).hasOwnProperty.call(a,i)&&(e[i]=a[i])}return e},_extends.apply(null,arguments)}import React,{useCallback,useEffect,useMemo,useRef,useState}from"react";import{Animated,Easing,Pressable,StyleSheet,Text,View,Platform}from"react-native";import{Arrow,Close}from"react-native-system-icon";import{useAriaPress}from"../../hooks";import{useLocale}from"../config-provider/useLocale";import{useDirection}from"../config-provider/useDirection";import{parseNumber}from"../../utils/number";import{isRenderable,isText}from"../../utils/validate";import{renderTextOrNode}from"../../utils";import{nativeDriverEnabled}from"../../platform";import{useReducedMotion}from"../../hooks/animation";import{useNoticeBarTokens}from"./tokens";const AnimatedText=Animated.createAnimatedComponent(Text),IS_WEB="web"===Platform.OS;if(IS_WEB){const e="undefined"!=typeof globalThis?globalThis:window;void 0===e.global&&(e.global=e)}const NoticeBarImpl=e=>{const{text:t,children:a,color:i,background:n,leftIcon:r,rightIcon:o,mode:s,tokensOverride:l,delay:c=1,speed:d=60,scrollable:u,wrapable:m=!1,direction:p="horizontal",items:f,verticalInterval:y=3e3,verticalDuration:h=300,onPress:g,onClose:b,onReplay:v,textProps:x,style:w,...E}=e,R=useLocale(),A=useDirection(),T=useReducedMotion(),k=useNoticeBarTokens(l),P=i??k.colors.text,V=n??k.colors.background,N=t??a,z=isText(N),C="vertical"===p,[I,M]=useState(!0),{onLayout:L,...D}=x??{},[O,B]=useState(0),[F,W]=useState(0),_=useRef(new Animated.Value(0)).current,H=Math.max(0,parseNumber(c,1)),j=parseNumber(d,60),q=Math.max(0,parseNumber(y,3e3)),X=Math.max(0,parseNumber(h,300)),Y=useMemo(()=>C?f&&f.length?f:(()=>{const e=React.Children.toArray(a);return e.length?e:void 0!==t?[t]:[]})():[],[a,C,f,t]),G=!T&&C&&Y.length>1,J=useMemo(()=>G?[...Y,Y[0]]:Y,[G,Y]),K=useRef(new Animated.Value(0)).current,[Q,U]=useState(0),Z=useCallback(e=>{B(t=>Math.abs(t-e)<.5?t:e)},[]),$=useCallback(e=>{W(t=>Math.abs(t-e)<.5?t:e)},[]),ee=useRef(b);ee.current=b;const te=useRef(v);te.current=v;const ae=useCallback(()=>{M(!1),ee.current?.()},[]),ie=useAriaPress({disabled:"closeable"!==s||!I,onPress:ae,extraProps:{accessibilityRole:"button",accessibilityLabel:R?.vanNoticeBar?.close??"Close"}}),ne=useAriaPress({disabled:!g||!I,onPress:g,extraProps:g?{accessibilityRole:"button"}:void 0}),re="closeable"===s?React.createElement(Pressable,_extends({hitSlop:8},ie.interactionProps),React.createElement(Close,{size:16,fill:P,color:P})):"link"===s?React.createElement(Arrow,{size:16,fill:P,color:P}):o||null,oe=isRenderable(r),se=Boolean(re),le=Math.max(0,F-(oe?k.spacing.sidePadding:0)-(se?k.spacing.sidePadding:0)),ce=!T&&!C&&!m&&(u??O>le);useEffect(()=>{if(!I||C)return void _.stopAnimation();if(!ce||0===O||0===F||j<=0||!Number.isFinite(j))return void _.setValue(0);let e=!1;const t=(O+F)/j*1e3,a="rtl"===A?-1:1,i=n=>{_.setValue(n?0:a*F),Animated.sequence([Animated.delay(1e3*H),Animated.timing(_,{toValue:-a*O,duration:t,easing:Easing.linear,useNativeDriver:nativeDriverEnabled,isInteraction:!1})]).start(({finished:t})=>{t&&!e&&(te.current?.(),i(!1))})};return i(!0),()=>{e=!0,_.stopAnimation()}},[ce,_,I,H,j,O,F,C,A]),useEffect(()=>{if(!I)return void K.stopAnimation();if(!G||0===Q)return void K.setValue(0);const e=[];for(let t=1;t<=Y.length;t+=1)e.push(Animated.delay(q),Animated.timing(K,{toValue:-Q*t,duration:X,easing:Easing.linear,useNativeDriver:nativeDriverEnabled,isInteraction:!1}));e.push(Animated.timing(K,{toValue:0,duration:0,useNativeDriver:nativeDriverEnabled,isInteraction:!1}));const t=Animated.loop(Animated.sequence(e));return t.start(),()=>{t.stop(),K.stopAnimation()}},[I,G,Q,X,q,Y,K]);const de=useCallback(e=>{const t=e?.nativeEvent?.layout?.height;t&&U(e=>0===e||Math.abs(e-t)>=.5?t:e)},[]),ue=useMemo(()=>C&&0!==J.length?G?React.createElement(View,{style:[S.vViewport,Q?{height:Q}:void 0],pointerEvents:"none"},React.createElement(Animated.View,{renderToHardwareTextureAndroid:!0,shouldRasterizeIOS:!0,style:[S.vTrack,{transform:[{translateY:K}]}]},J.map((e,t)=>React.createElement(View,{key:t,onLayout:0===t?de:void 0,style:S.vItem},renderTextOrNode(e,[S.text,{color:P,fontFamily:k.typography.fontFamily,fontSize:k.typography.fontSize}],{numberOfLines:1,...D}))))):renderTextOrNode(J[0],[S.text,{color:P,fontFamily:k.typography.fontFamily,fontSize:k.typography.fontSize}],{numberOfLines:1,...D}):null,[de,G,C,Q,P,D,L,k.typography.fontFamily,k.typography.fontSize,J,K]),me=useCallback(e=>{$(e.nativeEvent.layout.width)},[$]),pe=useCallback(e=>{Z(e.nativeEvent.layout.width),L?.(e)},[Z,L]),fe=useCallback(e=>Z(e.nativeEvent.layout.width),[Z]);return I?React.createElement(Pressable,_extends({style:[S.ctr,{backgroundColor:V,paddingHorizontal:k.spacing.paddingHorizontal,paddingVertical:m?k.spacing.wrapPaddingVertical:k.spacing.paddingVertical,minHeight:k.layout.minHeight,borderRadius:k.layout.radius},w],disabled:ne.states.disabled},ne.interactionProps,E),oe&&React.createElement(View,{style:[S.side,{minWidth:k.layout.sideMinWidth}]},r),React.createElement(View,{onLayout:me,style:[S.content,m&&S.contentWrap,oe&&{paddingLeft:k.spacing.sidePadding},se&&{paddingRight:k.spacing.sidePadding}],pointerEvents:"none"},C?ue:ce?z?React.createElement(AnimatedText,_extends({onLayout:pe,style:[S.text,S.scrollText,{color:P,fontFamily:k.typography.fontFamily,fontSize:k.typography.fontSize,transform:[{translateX:_}]}]},IS_WEB?{}:{numberOfLines:1,ellipsizeMode:"clip"},D),N):React.createElement(Animated.View,{onLayout:fe,renderToHardwareTextureAndroid:!0,shouldRasterizeIOS:!0,style:[S.text,{transform:[{translateX:_}]}]},N):z?React.createElement(Text,_extends({onLayout:pe,style:[S.text,{color:P,fontFamily:k.typography.fontFamily,fontSize:k.typography.fontSize},m&&S.wrapText],numberOfLines:m?void 0:1,ellipsizeMode:m?"tail":"clip"},D),N):React.createElement(View,{onLayout:fe,style:[S.text,m&&S.wrapText]},N)),re&&React.createElement(View,{style:[S.side,{minWidth:k.layout.sideMinWidth}]},re)):null},S=StyleSheet.create({ctr:{flexDirection:"row",alignItems:"center"},side:{alignItems:"center",justifyContent:"center"},content:{flex:1,flexDirection:"row",overflow:"hidden"},text:{flexShrink:0},scrollText:Platform.select({web:{whiteSpace:"nowrap",textOverflow:"clip"},default:{}}),wrapText:{flexWrap:"wrap",flexShrink:1},contentWrap:{flexDirection:"column"},vViewport:{width:"100%",overflow:"hidden"},vTrack:{flexDirection:"column",width:"100%"},vItem:{width:"100%",justifyContent:"center"}});export const NoticeBar=React.memo(NoticeBarImpl);NoticeBar.displayName="NoticeBar";
1
+ function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var i in a)({}).hasOwnProperty.call(a,i)&&(e[i]=a[i])}return e},_extends.apply(null,arguments)}import React,{useCallback,useEffect,useMemo,useRef,useState}from"react";import{Animated,Easing,Pressable,StyleSheet,Text,View,Platform}from"react-native";import Arrow from"react-native-system-icon/Arrow";import Close from"react-native-system-icon/Close";import{useAriaPress}from"../../hooks";import{useLocale}from"../config-provider/useLocale";import{useDirection}from"../config-provider/useDirection";import{parseNumber}from"../../utils/number";import{isRenderable,isText}from"../../utils/validate";import{renderTextOrNode}from"../../utils";import{nativeDriverEnabled}from"../../platform";import{useReducedMotion}from"../../hooks/animation";import{useNoticeBarTokens}from"./tokens";const AnimatedText=Animated.createAnimatedComponent(Text),IS_WEB="web"===Platform.OS;if(IS_WEB){const e="undefined"!=typeof globalThis?globalThis:window;void 0===e.global&&(e.global=e)}const NoticeBarImpl=e=>{const{text:t,children:a,color:i,background:n,leftIcon:r,rightIcon:o,mode:s,tokensOverride:l,delay:c=1,speed:d=60,scrollable:u,wrapable:m=!1,direction:p="horizontal",items:f,verticalInterval:y=3e3,verticalDuration:h=300,onPress:g,onClose:b,onReplay:v,textProps:x,style:w,...E}=e,R=useLocale(),A=useDirection(),T=useReducedMotion(),k=useNoticeBarTokens(l),P=i??k.colors.text,V=n??k.colors.background,N=t??a,z=isText(N),C="vertical"===p,[I,M]=useState(!0),{onLayout:L,...D}=x??{},[O,B]=useState(0),[F,W]=useState(0),_=useRef(new Animated.Value(0)).current,H=Math.max(0,parseNumber(c,1)),j=parseNumber(d,60),q=Math.max(0,parseNumber(y,3e3)),X=Math.max(0,parseNumber(h,300)),Y=useMemo(()=>C?f&&f.length?f:(()=>{const e=React.Children.toArray(a);return e.length?e:void 0!==t?[t]:[]})():[],[a,C,f,t]),G=!T&&C&&Y.length>1,J=useMemo(()=>G?[...Y,Y[0]]:Y,[G,Y]),K=useRef(new Animated.Value(0)).current,[Q,U]=useState(0),Z=useCallback(e=>{B(t=>Math.abs(t-e)<.5?t:e)},[]),$=useCallback(e=>{W(t=>Math.abs(t-e)<.5?t:e)},[]),ee=useRef(b);ee.current=b;const te=useRef(v);te.current=v;const ae=useCallback(()=>{M(!1),ee.current?.()},[]),ie=useAriaPress({disabled:"closeable"!==s||!I,onPress:ae,extraProps:{accessibilityRole:"button",accessibilityLabel:R?.vanNoticeBar?.close??"Close"}}),ne=useAriaPress({disabled:!g||!I,onPress:g,extraProps:g?{accessibilityRole:"button"}:void 0}),re="closeable"===s?React.createElement(Pressable,_extends({hitSlop:8},ie.interactionProps),React.createElement(Close,{size:16,fill:P,color:P})):"link"===s?React.createElement(Arrow,{size:16,fill:P,color:P}):o||null,oe=isRenderable(r),se=Boolean(re),le=Math.max(0,F-(oe?k.spacing.sidePadding:0)-(se?k.spacing.sidePadding:0)),ce=!T&&!C&&!m&&(u??O>le);useEffect(()=>{if(!I||C)return void _.stopAnimation();if(!ce||0===O||0===F||j<=0||!Number.isFinite(j))return void _.setValue(0);let e=!1;const t=(O+F)/j*1e3,a="rtl"===A?-1:1,i=n=>{_.setValue(n?0:a*F),Animated.sequence([Animated.delay(1e3*H),Animated.timing(_,{toValue:-a*O,duration:t,easing:Easing.linear,useNativeDriver:nativeDriverEnabled,isInteraction:!1})]).start(({finished:t})=>{t&&!e&&(te.current?.(),i(!1))})};return i(!0),()=>{e=!0,_.stopAnimation()}},[ce,_,I,H,j,O,F,C,A]),useEffect(()=>{if(!I)return void K.stopAnimation();if(!G||0===Q)return void K.setValue(0);const e=[];for(let t=1;t<=Y.length;t+=1)e.push(Animated.delay(q),Animated.timing(K,{toValue:-Q*t,duration:X,easing:Easing.linear,useNativeDriver:nativeDriverEnabled,isInteraction:!1}));e.push(Animated.timing(K,{toValue:0,duration:0,useNativeDriver:nativeDriverEnabled,isInteraction:!1}));const t=Animated.loop(Animated.sequence(e));return t.start(),()=>{t.stop(),K.stopAnimation()}},[I,G,Q,X,q,Y,K]);const de=useCallback(e=>{const t=e?.nativeEvent?.layout?.height;t&&U(e=>0===e||Math.abs(e-t)>=.5?t:e)},[]),ue=useMemo(()=>C&&0!==J.length?G?React.createElement(View,{style:[S.vViewport,Q?{height:Q}:void 0],pointerEvents:"none"},React.createElement(Animated.View,{renderToHardwareTextureAndroid:!0,shouldRasterizeIOS:!0,style:[S.vTrack,{transform:[{translateY:K}]}]},J.map((e,t)=>React.createElement(View,{key:t,onLayout:0===t?de:void 0,style:S.vItem},renderTextOrNode(e,[S.text,{color:P,fontFamily:k.typography.fontFamily,fontSize:k.typography.fontSize}],{numberOfLines:1,...D}))))):renderTextOrNode(J[0],[S.text,{color:P,fontFamily:k.typography.fontFamily,fontSize:k.typography.fontSize}],{numberOfLines:1,...D}):null,[de,G,C,Q,P,D,L,k.typography.fontFamily,k.typography.fontSize,J,K]),me=useCallback(e=>{$(e.nativeEvent.layout.width)},[$]),pe=useCallback(e=>{Z(e.nativeEvent.layout.width),L?.(e)},[Z,L]),fe=useCallback(e=>Z(e.nativeEvent.layout.width),[Z]);return I?React.createElement(Pressable,_extends({style:[S.ctr,{backgroundColor:V,paddingHorizontal:k.spacing.paddingHorizontal,paddingVertical:m?k.spacing.wrapPaddingVertical:k.spacing.paddingVertical,minHeight:k.layout.minHeight,borderRadius:k.layout.radius},w],disabled:ne.states.disabled},ne.interactionProps,E),oe&&React.createElement(View,{style:[S.side,{minWidth:k.layout.sideMinWidth}]},r),React.createElement(View,{onLayout:me,style:[S.content,m&&S.contentWrap,oe&&{paddingLeft:k.spacing.sidePadding},se&&{paddingRight:k.spacing.sidePadding}],pointerEvents:"none"},C?ue:ce?z?React.createElement(AnimatedText,_extends({onLayout:pe,style:[S.text,S.scrollText,{color:P,fontFamily:k.typography.fontFamily,fontSize:k.typography.fontSize,transform:[{translateX:_}]}]},IS_WEB?{}:{numberOfLines:1,ellipsizeMode:"clip"},D),N):React.createElement(Animated.View,{onLayout:fe,renderToHardwareTextureAndroid:!0,shouldRasterizeIOS:!0,style:[S.text,{transform:[{translateX:_}]}]},N):z?React.createElement(Text,_extends({onLayout:pe,style:[S.text,{color:P,fontFamily:k.typography.fontFamily,fontSize:k.typography.fontSize},m&&S.wrapText],numberOfLines:m?void 0:1,ellipsizeMode:m?"tail":"clip"},D),N):React.createElement(View,{onLayout:fe,style:[S.text,m&&S.wrapText]},N)),re&&React.createElement(View,{style:[S.side,{minWidth:k.layout.sideMinWidth}]},re)):null},S=StyleSheet.create({ctr:{flexDirection:"row",alignItems:"center"},side:{alignItems:"center",justifyContent:"center"},content:{flex:1,flexDirection:"row",overflow:"hidden"},text:{flexShrink:0},scrollText:Platform.select({web:{whiteSpace:"nowrap",textOverflow:"clip"},default:{}}),wrapText:{flexWrap:"wrap",flexShrink:1},contentWrap:{flexDirection:"column"},vViewport:{width:"100%",overflow:"hidden"},vTrack:{flexDirection:"column",width:"100%"},vItem:{width:"100%",justifyContent:"center"}});export const NoticeBar=React.memo(NoticeBarImpl);NoticeBar.displayName="NoticeBar";
@@ -1 +1 @@
1
- function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var o in r)({}).hasOwnProperty.call(r,o)&&(e[o]=r[o])}return e},_extends.apply(null,arguments)}import React,{useCallback,useEffect,useMemo,useRef,useState}from"react";import{Animated,Easing,Pressable,StyleSheet,Text,View}from"react-native";import{useControllableValue}from"../../hooks";import{nativeDriverEnabled}from"../../platform";import{useReducedMotion}from"../../hooks/animation";import{createPlatformShadow}from"../../utils/createPlatformShadow";import{parseNumberLike}from"../../utils/number";import{isRenderable,renderTextOrNode}from"../../utils";import Loading from"../loading";import Portal from"../portal/Portal";import{useLocale}from"../config-provider/useLocale";import{SafeAreaView}from"../safe-area-view";import{useNumberKeyboardTokens}from"./tokens";const registry=new Set,NUM_KEYS=["1","2","3","4","5","6","7","8","9"],ZERO="0",RE_NUM_LIKE=/^\d+$|^\.$|^x$/i,shuffle=e=>{const t=[...e];for(let e=t.length-1;e>0;e--){const r=Math.floor(Math.random()*(e+1));[t[e],t[r]]=[t[r],t[e]]}return t},NumberKeyboard=React.memo(e=>{const{visible:t,title:r,tokensOverride:o,theme:n="default",extraKey:a,randomKeyOrder:i,showDeleteKey:l=!0,closeButtonText:s,deleteButtonText:c,closeButtonLoading:u,onChange:d,onInput:f,onDelete:m,onClose:y,onBlur:p,onHide:g,onShow:x,value:h,defaultValue:b,maxlength:k,blurOnClose:R=!0,safeAreaInsetBottom:w=!0,transition:v=!0,transitionDuration:E=300,numberKeyRender:z,deleteRender:N,extraKeyRender:A,style:T,...B}=e,C=useLocale(),V=useReducedMotion(),F=useNumberKeyboardTokens(o),{colors:M,radii:P,shadow:D,sizing:K,spacing:L,typography:H}=F,[I,O]=useControllableValue(e,{defaultValue:"",valuePropName:"value",defaultValuePropName:"defaultValue",trigger:"onChange"}),_=I??"",$=(()=>{const e=parseNumberLike(k,void 0);return null!=e&&Number.isFinite(e)&&e>=0?Math.floor(e):void 0})(),W=useRef(_),j=useRef($),G=useRef(y),U=useRef(p),Y=useRef(x),Z=useRef(g),q=useRef(m),J=useRef(f);W.current=_,j.current=$,G.current=y,U.current=p,Y.current=x,Z.current=g,q.current=m,J.current=f;const Q="custom"===n,X=C?.vanNumberKeyboard?.close??"Done",ee=Q?s??X:s,te=useCallback(()=>{G.current?.(),R&&U.current?.()},[R]),re=useRef(t);useEffect(()=>{t&&!re.current&&Y.current?.(),!t&&re.current&&Z.current?.(),re.current=t},[t]),useEffect(()=>(t?(registry.add(te),registry.forEach(e=>{e!==te&&e()})):registry.delete(te),()=>{registry.delete(te)}),[t,te]);const oe=useMemo(()=>{const e=(i&&t?shuffle(NUM_KEYS):NUM_KEYS).map(e=>({text:e,type:""}));if(Q){const t=Array.isArray(a)?a:a?[a]:[];return 1===t.length?e.push({text:"0",type:"",wider:!0},{text:t[0],type:"extra"}):t.length>=2?e.push({text:t[0],type:"extra"},{text:"0",type:""},{text:t[1],type:"extra"}):e.push({text:"0",type:""}),e}const r=Array.isArray(a)?a[0]??"":a??"";return e.push({text:r,type:"extra"},{text:"0",type:""},{type:l?"delete":"",text:l?void 0:""}),e},[a,Q,i,l,t]),ne=useCallback((e,t)=>{if("delete"===t){const e=W.current;if(!e)return;return q.current?.(),void O(e.slice(0,-1))}if("close"===t||"extra"===t&&!e)return void te();if(!e)return;const r=W.current,o=j.current;void 0!==o&&r.length>=o||(J.current?.(e),O(`${r}${e}`))},[te,O]),ae=useMemo(()=>createPlatformShadow(D),[D.color,D.elevation,D.offsetY,D.opacity,D.radius]),ie=useCallback((e,t,r=!1,o=!1,n)=>{const a=e.type,i=""===a&&!e.text,l=i||r&&u,s=l?void 0:()=>ne(e.text,a),d=r?M.closeBackground:M.keyBackground,f=r?M.closeActiveBackground:M.keyActiveBackground,m=r?M.closeText:M.keyText,y=r?M.closeText:M.keyTextActive,p=n??(r?K.closeHeight:K.keyHeight),g=K.auxFontSize??Math.round(.64*K.fontSize),x=K.defaultIconFontSize??K.fontSize,h=e.text??"",b="delete"===a?N?.()??c??"⌫":"extra"===a?A?A(h):h||"⌨︎":"close"===a?ee??X:z?z(h):h,k="delete"===a&&null==N&&null==c||"extra"===a&&!A&&!h,R="extra"===a&&"string"==typeof b&&RE_NUM_LIKE.test(b),w=""===a?K.fontSize:k?x:R?K.fontSize:g;return React.createElement(Pressable,{key:`${a}-${t}-${e.text??t}`,onPress:s,disabled:l,style:[{opacity:i?1:l?.6:1},o?{width:"100%",flexBasis:"auto",flexGrow:0,alignSelf:"stretch"}:{flexBasis:0,flexGrow:e.wider?2:1,flexShrink:1,minWidth:0}],accessible:!i,accessibilityRole:i?void 0:"button",accessibilityLabel:i?void 0:"delete"===a?"delete":"close"===a?ee??"close":"extra"===a?h||"collapse":h,accessibilityState:i?void 0:{disabled:!!l},accessibilityElementsHidden:i,importantForAccessibility:i?"no-hide-descendants":void 0},({pressed:e})=>{const t=e&&!l,o=l?M.keyBackground:t?f:d,n=t?y:m;return React.createElement(View,{style:[S.k,{height:p,backgroundColor:o,borderRadius:P.key}]},r&&u?React.createElement(Loading,{size:18,color:n}):isRenderable(b)?renderTextOrNode(b,[S.kTxt,{color:n,fontFamily:H.fontFamily,fontSize:w}]):null)})},[u,M.closeActiveBackground,M.closeBackground,M.closeText,M.keyActiveBackground,M.keyBackground,M.keyText,M.keyTextActive,X,c,N,A,ne,z,P.key,K.auxFontSize,K.closeHeight,K.defaultIconFontSize,K.fontSize,K.keyHeight,H.fontFamily,ee]),le=useRef(new Animated.Value(t?1:0)).current,se=useRef(null),ce=useRef(0),[ue,de]=useState(0),[fe,me]=useState(t),ye=V||!1===v?0:E;useEffect(()=>{ce.current+=1;const e=ce.current;t&&me(!0),se.current?.stop();const r=Animated.timing(le,{toValue:t?1:0,duration:ye,useNativeDriver:nativeDriverEnabled,easing:t?Easing.out(Easing.cubic):Easing.in(Easing.cubic),isInteraction:!1});return se.current=r,r.start(({finished:r})=>{r&&!t&&ce.current===e&&me(!1)}),()=>{se.current?.stop(),se.current=null}},[le,t,ye]);const pe=le.interpolate({inputRange:[0,1],outputRange:[ue||320,0]}),ge=useCallback(e=>{const{height:t}=e.nativeEvent.layout;de(e=>Math.abs(t-e)>.5?t:e)},[]),xe=!Q&&(r||s),he=2*K.keyHeight+L.keyGap,be=useMemo(()=>{const e=L.keyGap,t=L.paddingHorizontal,o={paddingHorizontal:L.titlePadding},n=[S.dRow,{flexDirection:"column",flexWrap:"nowrap",paddingHorizontal:t,paddingTop:e,paddingBottom:e,gap:e}],a={flexDirection:"row",gap:e},i=[S.cRow,{paddingHorizontal:t,paddingTop:xe?0:e,paddingBottom:e,width:"100%"}],s=[S.cMat,{flexDirection:"column",flexWrap:"nowrap",gap:e}],c=[S.cSide,{gap:e,marginLeft:e}],u=oe.map((e,t)=>({key:e,index:t})),d=[];for(let e=0;e<u.length;e+=3)d.push(u.slice(e,e+3));const f=React.createElement(View,{style:n},d.map((e,t)=>React.createElement(View,{key:`l-${t}`,style:a},e.map(e=>ie(e.key,e.index))))),m=[];for(let e=0;e<9&&e<u.length;e+=3)m.push(u.slice(e,e+3));const y=u.slice(9);1===y.length?m.push([{key:{type:""},index:1000001},y[0],{key:{type:""},index:1000002}]):y.length&&m.push(y);const p=React.createElement(View,{style:s},m.map((e,t)=>React.createElement(View,{key:`cl-${t}`,style:a},e.map(e=>ie(e.key,e.index))))),g=l&&ie({type:"delete"},999,!1,!0,he),x=ie({type:"close"},1e3,!0,!0,he),h={color:M.title,fontFamily:H.fontFamily,fontSize:K.titleFontSize},b={color:M.title,fontFamily:H.fontFamily,fontSize:K.auxFontSize??Math.round(.64*K.fontSize)};return{headerNode:xe?React.createElement(View,{style:[S.hdr,o]},React.createElement(Text,{style:[S.tBold,S.tCenter,h],numberOfLines:1},r),ee&&React.createElement(Pressable,{onPress:te,style:S.hdrClose,accessibilityRole:"button",accessibilityLabel:ee},React.createElement(Text,{style:b},ee))):null,bodyNode:Q?React.createElement(View,{style:i},p,React.createElement(View,{style:c},g,x)):f,safeAreaNode:w&&React.createElement(SafeAreaView,{edge:"bottom"})}},[te,M.title,he,xe,Q,oe,ie,ee,w,K.auxFontSize,K.fontSize,K.titleFontSize,L.keyGap,L.paddingHorizontal,L.titlePadding,H.fontFamily,r,l]);return fe||t?React.createElement(Portal,null,React.createElement(Animated.View,_extends({},B,{pointerEvents:t?"auto":"none",renderToHardwareTextureAndroid:!0,shouldRasterizeIOS:!0,onLayout:ge,style:[S.wrap,ae,T,{transform:[{translateY:pe}],backgroundColor:M.background}]}),be.headerNode,be.bodyNode,be.safeAreaNode)):null}),S=StyleSheet.create({wrap:{position:"absolute",left:0,right:0,bottom:0},hdr:{flexDirection:"row",alignItems:"center",justifyContent:"flex-end",height:44,position:"relative"},tBold:{fontWeight:"600"},tCenter:{position:"absolute",left:12,right:12,textAlign:"center"},hdrClose:{minWidth:56,alignItems:"flex-end"},k:{justifyContent:"center",alignItems:"center"},kTxt:{includeFontPadding:!1,textAlign:"center"},dRow:{flexDirection:"row",flexWrap:"wrap"},cRow:{flexDirection:"row"},cMat:{flex:3,flexDirection:"row",flexWrap:"wrap"},cSide:{flex:1,flexDirection:"column",justifyContent:"flex-start"}});export default NumberKeyboard;
1
+ function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var o in r)({}).hasOwnProperty.call(r,o)&&(e[o]=r[o])}return e},_extends.apply(null,arguments)}import React,{useCallback,useEffect,useMemo,useRef,useState}from"react";import{Animated,Easing,Pressable,StyleSheet,Text,View}from"react-native";import{useControllableValue}from"../../hooks";import{nativeDriverEnabled}from"../../platform";import{useReducedMotion}from"../../hooks/animation";import{createPlatformShadow}from"../../utils/createPlatformShadow";import{parseNumberLike}from"../../utils/number";import{isRenderable,renderTextOrNode}from"../../utils";import Loading from"../loading";import Portal from"../portal/Portal";import{useLocale}from"../config-provider/useLocale";import{SafeAreaView}from"../safe-area-view";import{useNumberKeyboardTokens}from"./tokens";import{buildKeyboardKeys,RE_NUM_LIKE}from"../../hooks/number-keyboard/utils";const registry=new Set,NumberKeyboard=React.memo(e=>{const{visible:t,title:r,tokensOverride:o,theme:n="default",extraKey:a,randomKeyOrder:i,showDeleteKey:l=!0,closeButtonText:s,deleteButtonText:c,closeButtonLoading:u,onChange:d,onInput:f,onDelete:m,onClose:y,onBlur:p,onHide:g,onShow:b,value:x,defaultValue:h,maxlength:k,blurOnClose:R=!0,safeAreaInsetBottom:w=!0,transition:v=!0,transitionDuration:E=300,numberKeyRender:z,deleteRender:T,extraKeyRender:C,style:N,...B}=e,V=useLocale(),A=useReducedMotion(),F=useNumberKeyboardTokens(o),{colors:K,radii:P,shadow:D,sizing:L,spacing:M,typography:H}=F,[I,O]=useControllableValue(e,{defaultValue:"",valuePropName:"value",defaultValuePropName:"defaultValue",trigger:"onChange"}),_=I??"",W=(()=>{const e=parseNumberLike(k,void 0);return null!=e&&Number.isFinite(e)&&e>=0?Math.floor(e):void 0})(),$=useRef(_),j=useRef(W),G=useRef(y),U=useRef(p),Y=useRef(b),q=useRef(g),J=useRef(m),Q=useRef(f);$.current=_,j.current=W,G.current=y,U.current=p,Y.current=b,q.current=g,J.current=m,Q.current=f;const X="custom"===n,Z=V?.vanNumberKeyboard?.close??"Done",ee=X?s??Z:s,te=useCallback(()=>{G.current?.(),R&&U.current?.()},[R]),re=useRef(t);useEffect(()=>{t&&!re.current&&Y.current?.(),!t&&re.current&&q.current?.(),re.current=t},[t]),useEffect(()=>(t?(registry.add(te),registry.forEach(e=>{e!==te&&e()})):registry.delete(te),()=>{registry.delete(te)}),[t,te]);const oe=useMemo(()=>buildKeyboardKeys({randomKeyOrder:i,visible:t,isCustom:X,extraKey:a,showDeleteKey:l}),[a,X,i,l,t]),ne=useCallback((e,t)=>{if("delete"===t){const e=$.current;if(!e)return;return J.current?.(),void O(e.slice(0,-1))}if("close"===t||"extra"===t&&!e)return void te();if(!e)return;const r=$.current,o=j.current;void 0!==o&&r.length>=o||(Q.current?.(e),O(`${r}${e}`))},[te,O]),ae=useMemo(()=>createPlatformShadow(D),[D.color,D.elevation,D.offsetY,D.opacity,D.radius]),ie=useCallback((e,t,r=!1,o=!1,n)=>{const a=e.type,i=""===a&&!e.text,l=i||r&&u,s=l?void 0:()=>ne(e.text,a),d=r?K.closeBackground:K.keyBackground,f=r?K.closeActiveBackground:K.keyActiveBackground,m=r?K.closeText:K.keyText,y=r?K.closeText:K.keyTextActive,p=n??(r?L.closeHeight:L.keyHeight),g=L.auxFontSize??Math.round(.64*L.fontSize),b=L.defaultIconFontSize??L.fontSize,x=e.text??"",h="delete"===a?T?.()??c??"⌫":"extra"===a?C?C(x):x||"⌨︎":"close"===a?ee??Z:z?z(x):x,k="delete"===a&&null==T&&null==c||"extra"===a&&!C&&!x,R="extra"===a&&"string"==typeof h&&RE_NUM_LIKE.test(h),w=""===a?L.fontSize:k?b:R?L.fontSize:g;return React.createElement(Pressable,{key:`${a}-${t}-${e.text??t}`,onPress:s,disabled:l,style:[{opacity:i?1:l?.6:1},o?{width:"100%",flexBasis:"auto",flexGrow:0,alignSelf:"stretch"}:{flexBasis:0,flexGrow:e.wider?2:1,flexShrink:1,minWidth:0}],accessible:!i,accessibilityRole:i?void 0:"button",accessibilityLabel:i?void 0:"delete"===a?"delete":"close"===a?ee??"close":"extra"===a?x||"collapse":x,accessibilityState:i?void 0:{disabled:!!l},accessibilityElementsHidden:i,importantForAccessibility:i?"no-hide-descendants":void 0},({pressed:e})=>{const t=e&&!l,o=l?K.keyBackground:t?f:d,n=t?y:m;return React.createElement(View,{style:[S.k,{height:p,backgroundColor:o,borderRadius:P.key}]},r&&u?React.createElement(Loading,{size:18,color:n}):isRenderable(h)?renderTextOrNode(h,[S.kTxt,{color:n,fontFamily:H.fontFamily,fontSize:w}]):null)})},[u,K.closeActiveBackground,K.closeBackground,K.closeText,K.keyActiveBackground,K.keyBackground,K.keyText,K.keyTextActive,Z,c,T,C,ne,z,P.key,L.auxFontSize,L.closeHeight,L.defaultIconFontSize,L.fontSize,L.keyHeight,H.fontFamily,ee]),le=useRef(new Animated.Value(t?1:0)).current,se=useRef(null),ce=useRef(0),[ue,de]=useState(0),[fe,me]=useState(t),ye=A||!1===v?0:E;useEffect(()=>{ce.current+=1;const e=ce.current;t&&me(!0),se.current?.stop();const r=Animated.timing(le,{toValue:t?1:0,duration:ye,useNativeDriver:nativeDriverEnabled,easing:t?Easing.out(Easing.cubic):Easing.in(Easing.cubic),isInteraction:!1});return se.current=r,r.start(({finished:r})=>{r&&!t&&ce.current===e&&me(!1)}),()=>{se.current?.stop(),se.current=null}},[le,t,ye]);const pe=le.interpolate({inputRange:[0,1],outputRange:[ue||320,0]}),ge=useCallback(e=>{const{height:t}=e.nativeEvent.layout;de(e=>Math.abs(t-e)>.5?t:e)},[]),be=!X&&(r||s),xe=2*L.keyHeight+M.keyGap,he=useMemo(()=>{const e=M.keyGap,t=M.paddingHorizontal,o={paddingHorizontal:M.titlePadding},n=[S.dRow,{flexDirection:"column",flexWrap:"nowrap",paddingHorizontal:t,paddingTop:e,paddingBottom:e,gap:e}],a={flexDirection:"row",gap:e},i=[S.cRow,{paddingHorizontal:t,paddingTop:be?0:e,paddingBottom:e,width:"100%"}],s=[S.cMat,{flexDirection:"column",flexWrap:"nowrap",gap:e}],c=[S.cSide,{gap:e,marginLeft:e}],u=oe.map((e,t)=>({key:e,index:t})),d=[];for(let e=0;e<u.length;e+=3)d.push(u.slice(e,e+3));const f=React.createElement(View,{style:n},d.map((e,t)=>React.createElement(View,{key:`l-${t}`,style:a},e.map(e=>ie(e.key,e.index))))),m=[];for(let e=0;e<9&&e<u.length;e+=3)m.push(u.slice(e,e+3));const y=u.slice(9);1===y.length?m.push([{key:{type:""},index:1000001},y[0],{key:{type:""},index:1000002}]):y.length&&m.push(y);const p=React.createElement(View,{style:s},m.map((e,t)=>React.createElement(View,{key:`cl-${t}`,style:a},e.map(e=>ie(e.key,e.index))))),g=l&&ie({type:"delete"},999,!1,!0,xe),b=ie({type:"close"},1e3,!0,!0,xe),x={color:K.title,fontFamily:H.fontFamily,fontSize:L.titleFontSize},h={color:K.title,fontFamily:H.fontFamily,fontSize:L.auxFontSize??Math.round(.64*L.fontSize)};return{headerNode:be?React.createElement(View,{style:[S.hdr,o]},React.createElement(Text,{style:[S.tBold,S.tCenter,x],numberOfLines:1},r),ee&&React.createElement(Pressable,{onPress:te,style:S.hdrClose,accessibilityRole:"button",accessibilityLabel:ee},React.createElement(Text,{style:h},ee))):null,bodyNode:X?React.createElement(View,{style:i},p,React.createElement(View,{style:c},g,b)):f,safeAreaNode:w&&React.createElement(SafeAreaView,{edge:"bottom"})}},[te,K.title,xe,be,X,oe,ie,ee,w,L.auxFontSize,L.fontSize,L.titleFontSize,M.keyGap,M.paddingHorizontal,M.titlePadding,H.fontFamily,r,l]);return fe||t?React.createElement(Portal,null,React.createElement(Animated.View,_extends({},B,{pointerEvents:t?"auto":"none",renderToHardwareTextureAndroid:!0,shouldRasterizeIOS:!0,onLayout:ge,style:[S.wrap,ae,N,{transform:[{translateY:pe}],backgroundColor:K.background}]}),he.headerNode,he.bodyNode,he.safeAreaNode)):null}),S=StyleSheet.create({wrap:{position:"absolute",left:0,right:0,bottom:0},hdr:{flexDirection:"row",alignItems:"center",justifyContent:"flex-end",height:44,position:"relative"},tBold:{fontWeight:"600"},tCenter:{position:"absolute",left:12,right:12,textAlign:"center"},hdrClose:{minWidth:56,alignItems:"flex-end"},k:{justifyContent:"center",alignItems:"center"},kTxt:{includeFontPadding:!1,textAlign:"center"},dRow:{flexDirection:"row",flexWrap:"wrap"},cRow:{flexDirection:"row"},cMat:{flex:3,flexDirection:"row",flexWrap:"wrap"},cSide:{flex:1,flexDirection:"column",justifyContent:"flex-start"}});export default NumberKeyboard;
@@ -1 +1 @@
1
- import React from"react";import{Modal,Platform}from"react-native";import{OverlayContainer}from"@react-native-aria/overlays";import{useKeyboardDismissable}from"@react-native-aria/interactions";import{useOverlayTokens}from"./tokens";const IS_WEB="web"===Platform.OS,OverlayImpl=(e,a)=>{const{children:r,isOpen:t,visible:o,useRNModal:l,useRNModalOnAndroid:s=!1,isKeyboardDismissable:i=!0,animationPreset:n="fade",onRequestClose:m,style:d}=e,y=useOverlayTokens(),c=l??!IS_WEB,v=IS_WEB?{zIndex:y.layer.zIndex,position:"fixed",top:0,left:0,right:0,bottom:0}:void 0,f=t??o??!1;return useKeyboardDismissable({enabled:!IS_WEB&&f&&i,callback:m??(()=>{})}),f?c||s&&"android"===Platform.OS?React.createElement(Modal,{statusBarTranslucent:!0,transparent:!0,visible:f,onRequestClose:m,animationType:n,ref:a},r):React.createElement(OverlayContainer,{style:[d,v]},r):null},OverlayForwardRef=React.forwardRef(OverlayImpl);OverlayForwardRef.displayName="Overlay";export const Overlay=React.memo(OverlayForwardRef);export default Overlay;
1
+ import React from"react";import{Modal,Platform}from"react-native";import{OverlayContainer}from"@react-native-aria/overlays";import{useKeyboardDismissable}from"@react-native-aria/interactions";import{useOverlayTokens}from"./tokens";const IS_WEB="web"===Platform.OS,NOOP=()=>{},OverlayImpl=(e,a)=>{const{children:r,isOpen:t,visible:o,useRNModal:l,useRNModalOnAndroid:s=!1,isKeyboardDismissable:i=!0,animationPreset:n="fade",onRequestClose:m,style:d}=e,y=useOverlayTokens(),O=l??!IS_WEB,c=IS_WEB?{zIndex:y.layer.zIndex,position:"fixed",top:0,left:0,right:0,bottom:0}:void 0,v=t??o??!1;return useKeyboardDismissable({enabled:!IS_WEB&&v&&i,callback:m??NOOP}),v?O||s&&"android"===Platform.OS?React.createElement(Modal,{statusBarTranslucent:!0,transparent:!0,visible:v,onRequestClose:m,animationType:n,ref:a},r):React.createElement(OverlayContainer,{style:[d,c]},r):null},OverlayForwardRef=React.forwardRef(OverlayImpl);OverlayForwardRef.displayName="Overlay";export const Overlay=React.memo(OverlayForwardRef);export default Overlay;
@@ -1 +1 @@
1
- function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},_extends.apply(null,arguments)}import React,{useCallback,useEffect,useMemo,useRef,useState}from"react";import{Pressable,Text,View,Platform,StyleSheet,ScrollView,PanResponder}from"react-native";import Loading from"../loading";import{useLocale}from"../config-provider/useLocale";import{withAlpha}from"../../utils/color";import{isFiniteNumber,isText}from"../../utils/validate";import{clamp,isObject,shallowEqualArray}from"../../utils";import{usePickerTokens}from"./tokens";import{createHairlineView}from"../../utils/hairline";export const toArrayValue=e=>Array.isArray(e)?e.filter(e=>null!=e):null==e?[]:[e];const isColumnWithOptions=e=>!!e&&isObject(e)&&"options"in e&&Array.isArray(e.options),hasChildren=e=>!!e&&isObject(e)&&Array.isArray(e.children)&&e.children.length>0;export const findEnabledIndex=(e,t)=>{if(!e.length)return-1;const n=Math.min(Math.max(t,0),e.length-1);if(!e[n]?.disabled)return n;for(let t=n+1;t<e.length;t+=1)if(!e[t]?.disabled)return t;for(let t=n-1;t>=0;t-=1)if(!e[t]?.disabled)return t;return-1};const normalizeMultiple=(e,t,n)=>{const r=[],o=[];return e.forEach((e,a)=>{const l=n[a],i=void 0!==t[a]?e.findIndex(e=>e.value===t[a]):-1,c=e.findIndex(e=>e.value===l),s=findEnabledIndex(e,c>=0?c:i>=0?i:0),u=s>=0?e[s]:void 0,m=c>=0&&!e[c]?.disabled;r[a]=m?l:u?.value??t[a]??e[0]?.value,o[a]=u}),{columns:e,values:r,options:o}},normalizeCascade=(e,t)=>{const n=[],r=[],o=[];let a=e,l=0;for(;a&&a.length&&l<10;){n.push(a);const e=t[l],i=a.findIndex(t=>t.value===e||String(t.value)===String(e)),c=findEnabledIndex(a,i>=0?i:0),s=c>=0?a[c]:a[0];if(r[l]=s?.value,o[l]=s,!s||!hasChildren(s))break;a=s.children,l+=1}return{columns:n,values:r,options:o}};export const prepareColumns=(e=[])=>{if(!Array.isArray(e)||0===e.length)return{type:"single",columnsList:[],defaults:[],cascadeRoot:[]};const t=e.every(e=>!Array.isArray(e)&&!isColumnWithOptions(e)),n=t&&e.some(e=>hasChildren(e));if(n)return{type:"cascade",columnsList:[],defaults:[],cascadeRoot:e};const r=e,o=[],a=[];return t&&!n?(o.push(e),a.push(void 0)):r.forEach(e=>{if(Array.isArray(e))o.push(e),a.push(void 0);else if(isColumnWithOptions(e)){const t=e;o.push(t.options??[]),a.push(t.defaultValue)}}),{type:"multiple",columnsList:o,defaults:a}};export const normalizePicker=(e,t=[])=>{const n=Array.isArray(t)?t:[];return"cascade"===e.type&&e.cascadeRoot?.length?normalizeCascade(e.cascadeRoot,n):normalizeMultiple(e.columnsList,e.defaults,n)};const W=StyleSheet.create({column:{flex:1},option:{justifyContent:"center",alignItems:"center"},grab:{cursor:"pointer",userSelect:"none",touchAction:"none"}}),WheelPickerItemInner=({item:e,index:t,itemHeight:n,active:r,disabled:o,renderItem:a})=>{const l=a(e,t,{active:r,disabled:o});return React.createElement(View,{style:[W.option,{height:n}]},l)},WheelPickerItem=React.memo(WheelPickerItemInner),getVelocityBucket=e=>{const t=Math.abs(e);return t>1.2?2:t>.6?1:0},adjustIndex=(e,t)=>{const n=t.length;if(!n)return 0;const r=clamp(e,0,n-1),o=findEnabledIndex(t,r);return o>=0?o:r},indexToOffset=(e,t)=>-e*t,offsetToIndex=(e,t,n,r)=>{const o=-Math.max(0,n-1)*t,a=clamp(e,o,0);let l=Math.round(-a/t);l=adjustIndex(l,r);return{index:l,snapOffset:indexToOffset(l,t)}},shouldMomentum=(e,t)=>t<500&&Math.abs(e)>8,momentumTarget=(e,t,n,r,o)=>{const a=Math.abs(e/t),l=clamp(n+a/.0025*(e<0?-1:1),o,0),i=Math.round(-l/r);return indexToOffset(i,r)},WheelPickerInner=({data:e,selectedIndex:t,onChange:n,onInteractStart:r,onInteractEnd:o,renderItem:a,itemHeight:l,visibleRest:i,readOnly:c,indicatorColor:s,decelerationRate:u=Platform.select({ios:.9985,android:.995,default:.995})??"normal",scrollEventThrottle:m=16,swipeDuration:d=300})=>{const f="web"===Platform.OS,p=useRef(null),h=useRef(null),b=i*l,g=e.length,y=Math.max(0,g-1),R=-y*l,E=l*(2*i+1),v=clamp(t,0,y),x=findEnabledIndex(e,v),k=x>=0?x:v,C=2*i+1,w=g>20*C?32:m,I=g>4*C,T=useCallback(()=>React.createElement(View,{style:{height:b}}),[b]),V=useMemo(()=>[S.indicator,{height:l,top:l*i}],[l,i]),P=useRef(null),A=useRef(!1),M=useRef(0),O=useCallback(()=>{P.current&&(clearTimeout(P.current),P.current=null)},[]),D=useCallback((t,r)=>{if(c)return;const{index:o,snapOffset:a}=offsetToIndex(-t,l,g,e),i=-a;Math.abs(i-t)>.5&&p.current?.scrollToOffset({offset:i,animated:r}),n(o)},[e,l,n,c,g]);useEffect(()=>{const e=k*l;f||h.current?.scrollTo({y:e,animated:!1})},[f,l,k]);const[H,z]=useState(()=>indexToOffset(k,l)),L=useRef(H),F=useRef(0),j=useRef(0),[_,q]=useState(0),[G,N]=useState(0),$=useRef(0),B=useRef(null),Y=useRef(0),J=useRef(null),K=useRef(null),Q=useRef(null),U=useRef(null),X=useRef(!1),Z=useRef(r);Z.current=r;const ee=useRef(o);ee.current=o;const te=useCallback(()=>{c||X.current||(X.current=!0,Z.current?.())},[c]),ne=useCallback(()=>{X.current&&(X.current=!1,ee.current?.())},[]),re=useCallback(()=>{null!=U.current&&"undefined"!=typeof cancelAnimationFrame&&(cancelAnimationFrame(U.current),U.current=null),null!=J.current&&"undefined"!=typeof cancelAnimationFrame&&(cancelAnimationFrame(J.current),J.current=null)},[]),oe=useCallback(()=>{Q.current&&(clearTimeout(Q.current),Q.current=null)},[]);useEffect(()=>()=>{O(),oe(),re()},[O,oe,re]);const ae=useCallback(e=>{const t=getVelocityBucket(e);t!==$.current&&($.current=t,N(t))},[]),le=useCallback(e=>{const t=Date.now(),n=B.current;if(null!=n){const r=Math.max(1,t-n);ae(e/r)}B.current=t},[ae]);useEffect(()=>{if(!f)return;oe(),K.current=null,q(0);const e=indexToOffset(k,l);L.current=e,z(e)},[oe,f,l,k,q]);const ie=useCallback(()=>{if(c)return;const e=K.current;null!=e&&(K.current=null,oe(),q(0),ne(),n(e))},[oe,n,c,q]),ce=useCallback(e=>{if(c)return;te();const t=clamp(e,0,y),n=indexToOffset(t,l);oe(),K.current=t,L.current=n,q(d),z(n),d<=0?ie():Q.current=setTimeout(ie,d+80)},[oe,ie,l,y,c,d]),se=useCallback(t=>{if(c)return;const n=t.nativeEvent?.deltaY??0;n&&(Y.current+=n,null==J.current&&"undefined"!=typeof requestAnimationFrame&&(J.current=requestAnimationFrame(()=>{J.current=null;const t=Y.current;if(Y.current=0,!t)return;le(t);const n=t>0?1:-1,{index:r}=offsetToIndex(L.current,l,g,e),o=clamp(r+n,0,y);ce(o)})))},[e,l,y,c,ce,g,le]),ue=clamp(Math.round(-H/l),0,y),me=useMemo(()=>{if(!f||g<=0)return{items:null,topSpacer:null,bottomSpacer:null};let t=0,n=y;if(I){const e=Math.max(2*C,8),r=2===G?4*C:1===G?2*C:0,o=Math.min(e+r,Math.max(6*C,24));t=clamp(ue-o,0,y),n=clamp(ue+o,0,y)}const r=[];for(let o=t;o<=n;o+=1){const t=e[o];t&&r.push(React.createElement(WheelPickerItem,{key:`${o}-${String(t.value??"")}`,item:t,index:o,itemHeight:l,active:o===k,disabled:!!t.disabled,renderItem:a}))}const o=t*l,i=(y-n)*l;return{items:r,topSpacer:o>0&&React.createElement(View,{style:{height:o}}),bottomSpacer:i>0&&React.createElement(View,{style:{height:i}})}},[e,f,l,y,a,k,g,C,ue,G,I]),de=useMemo(()=>({transform:[{translateY:H}]}),[H]),fe=useMemo(()=>_?{transitionProperty:"transform",transitionDuration:_+"ms",transitionTimingFunction:"cubic-bezier(0.23, 1, 0.68, 1)",willChange:"transform"}:void 0,[_]),pe=useCallback(e=>{const t=e.nativeEvent?.propertyName??e.propertyName;t&&"transform"!==t&&"webkitTransform"!==t||ie()},[ie]),he=useMemo(()=>PanResponder.create({onStartShouldSetPanResponder:()=>!c,onMoveShouldSetPanResponder:()=>!c,onPanResponderGrant:()=>{re(),K.current=null,te(),q(0),F.current=L.current,j.current=Date.now()},onPanResponderMove:(e,t)=>{if(c)return;ae(t.vy);const n=clamp(F.current+t.dy,R,0);L.current=n,"undefined"==typeof requestAnimationFrame?z(n):null!=U.current||(U.current=requestAnimationFrame(()=>{U.current=null,z(L.current)}))},onPanResponderRelease:(t,n)=>{if(c)return;ae(0);const r=Date.now()-j.current,o=n.dy;let a=clamp(F.current+o,R,0);shouldMomentum(o,r)&&(a=momentumTarget(o,r,F.current,l,R));const{index:i}=offsetToIndex(a,l,g,e);ce(i)},onPanResponderTerminationRequest:()=>!1,onPanResponderTerminate:()=>{ne(),q(0)}}),[e,l,R,ne,te,c,ae,ce,re,g]),be=!c,ge=useCallback(()=>be,[be]),ye=useMemo(()=>({paddingVertical:b}),[b]),Re=useCallback(e=>{M.current=e.nativeEvent.contentOffset.y},[]),Ee=useCallback(()=>{A.current=!1,O(),te()},[O,te]),ve=useCallback(e=>{if(c)return;const t=e.nativeEvent.contentOffset.y;M.current=t,O(),P.current=setTimeout(()=>{A.current||(D(M.current,!0),ne())},80)},[O,D,ne,c]),xe=useCallback(()=>{A.current=!0,O(),te()},[O,te]),ke=useCallback(e=>{A.current=!1,O();const t=e.nativeEvent.contentOffset.y;M.current=t,D(t,!1),ne()},[O,D,ne]);return f?React.createElement(View,_extends({style:[W.column,{height:E},W.grab],onWheel:se},he.panHandlers),React.createElement(View,{style:V,pointerEvents:"none"},React.createElement(View,{style:createHairlineView({position:"top",color:s,left:0,right:0})}),React.createElement(View,{style:createHairlineView({position:"bottom",color:s,left:0,right:0})})),React.createElement(View,{style:[de,fe],onTransitionEnd:pe},React.createElement(T,null),me.topSpacer,me.items,me.bottomSpacer,React.createElement(T,null))):React.createElement(View,{style:[W.column,{height:E}],collapsable:!1},React.createElement(View,{style:V,pointerEvents:"none"},React.createElement(View,{style:createHairlineView({position:"top",color:s,left:0,right:0})}),React.createElement(View,{style:createHairlineView({position:"bottom",color:s,left:0,right:0})})),React.createElement(ScrollView,{ref:h,showsVerticalScrollIndicator:!1,scrollEventThrottle:w,decelerationRate:u,snapToInterval:l,snapToAlignment:"start",bounces:!1,overScrollMode:"never",nestedScrollEnabled:!0,contentContainerStyle:ye,onStartShouldSetResponderCapture:ge,onMoveShouldSetResponderCapture:ge,onScroll:Re,onScrollBeginDrag:Ee,onScrollEndDrag:ve,onMomentumScrollBegin:xe,onMomentumScrollEnd:ke,scrollEnabled:!c},e.map((e,t)=>React.createElement(WheelPickerItem,{key:`${t}-${String(e.value??"")}`,item:e,index:t,itemHeight:l,active:t===k,disabled:!!e.disabled,renderItem:a}))))},WheelPicker=React.memo(WheelPickerInner);export function usePickerValue({columns:e,valueProp:t,defaultValue:n,emitConfirmOnAutoSelect:r=!0,onChange:o,onConfirm:a}){const l=useMemo(()=>prepareColumns(e),[e]),i=void 0!==t,c=useRef(o),s=useRef(a);c.current=o,s.current=a;const[u,m]=useState(()=>normalizePicker(l,toArrayValue(t??n)).values),d=useRef(u);d.current=u;const f=useCallback(e=>{d.current=e,m(e)},[]);useEffect(()=>{if(!i)return;const e=toArrayValue(t);shallowEqualArray(d.current,e)||f(e)},[f,i,t]);const p=useMemo(()=>normalizePicker(l,u),[l,u]);useEffect(()=>{i||shallowEqualArray(u,p.values)||(f(p.values),c.current?.(p.values,p.options),r&&s.current?.(p.values,p.options))},[f,r,u,i,p]);const h=useCallback((e,t)=>{const n=[...d.current];n[t]=e.value,"cascade"===l.type&&(n.length=t+1);const r=normalizePicker(l,n);shallowEqualArray(d.current,r.values)||(f(r.values),c.current?.(r.values,r.options))},[f,l]),b=useCallback(()=>{s.current?.(p.values,p.options)},[p]);return{preparedColumns:l,normalized:p,handleSelect:h,handleConfirm:b}}const getVisibleCount=e=>{const t=isFiniteNumber(e)?Math.max(3,Math.floor(e)):5;return t%2==0?t+1:t},GRADIENT_OVERLAY_ALPHA=.25,GRADIENT_STEPS=[.95,.75,.55,.35],GRADIENT_STEPS_REVERSED=[.35,.55,.75,.95],GradientMask=({height:e,color:t,position:n,maskType:r})=>{const o=[S.gMask,{height:e},"top"===n?{top:0}:{bottom:0}],a=withAlpha(t,.25);if("solid"===r)return React.createElement(View,{pointerEvents:"none",style:[...o,{backgroundColor:withAlpha(t,.9)}]});if("web"===Platform.OS){const e="top"===n?"180deg":"0deg";return React.createElement(View,{pointerEvents:"none",style:[...o,{backgroundColor:a,backgroundImage:`linear-gradient(${e}, ${withAlpha(t,.98)}, ${withAlpha(t,.4)})`}]})}return React.createElement(View,{pointerEvents:"none",style:[...o,{backgroundColor:a}]},("top"===n?GRADIENT_STEPS:GRADIENT_STEPS_REVERSED).map((e,n)=>React.createElement(View,{key:n,style:{flex:1,backgroundColor:withAlpha(t,e)}})))},PickerColumn=React.memo(e=>{const{columnIndex:t,options:n,value:r,itemHeight:o,visibleItemCount:a,optionRender:l,getOptionTestID:i,getOptionA11yLabel:c,onSelect:s,tokens:u,readOnly:m,decelerationRate:d,scrollEventThrottle:f,swipeDuration:p}=e,h=Math.max(1,Math.floor((a-1)/2)),b=useMemo(()=>new Map(n.map((e,t)=>[e.value,t])),[n]),g=useMemo(()=>{if(!n.length)return 0;const e=b.get(r);return findEnabledIndex(n,"number"==typeof e&&e>=0?e:0)},[n,r,b]),y=useCallback(e=>{const r=findEnabledIndex(n,e),o=n[r];o&&!o.disabled&&s(o,t,r)},[t,s,n]),{text:R,textDisabled:E,textMuted:v}=u.colors,x={fontSize:u.typography.optionSize,fontFamily:u.typography.fontFamily,fontWeight:u.typography.optionWeight},k=useCallback((e,n,r)=>{const{active:a=!1,disabled:s=!1}=r??{},u=s?E:a?R:v,m=l?l(e,{columnIndex:t,active:a}):e.label??e.value,d=i?.(e,{columnIndex:t,active:a}),f=c?.(e,{columnIndex:t,active:a});return React.createElement(View,{style:[W.option,{opacity:s?.5:1,minHeight:o}],testID:d,accessible:!!f,accessibilityLabel:f},isText(m)?React.createElement(Text,{numberOfLines:1,style:[S.optTxt,x,{color:u}]},m):m)},[R,E,v,t,c,i,o,x,l]);return React.createElement(View,{style:[W.column,{height:o*a}]},React.createElement(WheelPicker,{data:n,itemHeight:o,visibleRest:h,selectedIndex:Math.max(0,g),onChange:y,readOnly:m,indicatorColor:u.colors.indicator,decelerationRate:d,scrollEventThrottle:f,swipeDuration:p,renderItem:k}))}),PickerImpl=e=>{const{tokensOverride:t}=e,n=useLocale(),r=usePickerTokens(t),{columns:o=[],value:a,defaultValue:l,title:i,showToolbar:c=r.defaults.showToolbar,toolbarPosition:s=r.defaults.toolbarPosition,confirmButtonText:u=n?.confirm??"Confirm",cancelButtonText:m=n?.cancel??"Cancel",itemHeight:d=r.defaults.itemHeight,visibleItemCount:f=r.defaults.visibleItemCount,loading:p=!1,readOnly:h=!1,decelerationRate:b=Platform.select({ios:.999,android:.997,default:.989})??"normal",swipeDuration:g=r.defaults.swipeDuration,scrollEventThrottle:y=16,columnsTop:R,columnsBottom:E,optionRender:v,getOptionTestID:x,getOptionA11yLabel:k,emitConfirmOnAutoSelect:C=!0,maskColor:w,maskType:I=r.defaults.maskType,onChange:T,onConfirm:V,onCancel:P,style:A,testID:M,...O}=e,W=getVisibleCount(f??r.defaults.visibleItemCount),{normalized:D,handleSelect:H,handleConfirm:z,preparedColumns:L}=usePickerValue({columns:o,valueProp:a,defaultValue:l,emitConfirmOnAutoSelect:C,onChange:T,onConfirm:V}),F="cascade"===L.type,j={fontSize:r.typography.toolbarSize,fontFamily:r.typography.fontFamily,fontWeight:r.typography.toolbarWeight},_=(e,t)=>React.isValidElement(e)?React.createElement(View,{style:S.actW},e):isText(e)?React.createElement(Text,{numberOfLines:1,style:[S.actTxt,j,{color:t}]},e):React.createElement(View,{style:S.actW}),q=c?React.createElement(View,{style:[S.toolbar,{height:r.spacing.toolbarHeight,paddingHorizontal:r.spacing.actionPadding}]},React.createElement(Pressable,{onPress:P,accessibilityRole:"button"},_(m,r.colors.cancel)),null==(G=i)?React.createElement(View,null):React.isValidElement(G)?React.createElement(View,{style:S.ttlW},G):React.createElement(Text,{style:[S.title,j,{color:r.colors.text}],numberOfLines:1},G),React.createElement(Pressable,{onPress:z,accessibilityRole:"button"},_(u,r.colors.confirm)),React.createElement(View,{style:createHairlineView({position:"bottom",color:r.colors.indicator,left:0,right:0})})):null;var G;const N=d*W,$=Math.max(1,Math.floor((W-1)/2)),B=d*$,Y=B,J=D.columns.length>0,K=w??r.colors.mask,Q=J?D.columns.map((e,t)=>{const n=F?`${t}-${D.values.slice(0,t).map(String).join("|")}`:String(t);return React.createElement(PickerColumn,{key:n,columnIndex:t,options:e,value:D.values[t],itemHeight:d,visibleItemCount:W,decelerationRate:b,scrollEventThrottle:y,optionRender:v,getOptionTestID:x,getOptionA11yLabel:k,readOnly:h,swipeDuration:g,onSelect:H,tokens:r})}):null;return React.createElement(View,_extends({},O,{style:[{backgroundColor:r.colors.background,borderRadius:r.radius.container},A],testID:M}),"top"===s&&q,React.createElement(View,{style:[S.body,{height:N}]},React.createElement(View,{style:S.columns,pointerEvents:p?"none":"auto"},R,Q,E,J&&React.createElement(React.Fragment,null,React.createElement(View,{pointerEvents:"none",style:[S.indicator,{top:B,height:d}]},React.createElement(View,{style:createHairlineView({position:"top",color:r.colors.indicator,left:0,right:0})}),React.createElement(View,{style:createHairlineView({position:"bottom",color:r.colors.indicator,left:0,right:0})})),React.createElement(GradientMask,{position:"top",height:Y,color:K,maskType:I}),React.createElement(GradientMask,{position:"bottom",height:Y,color:K,maskType:I}))),p&&React.createElement(View,{style:[S.loading,{backgroundColor:r.colors.loadingMask}]},React.createElement(Loading,null))),"bottom"===s&&q)},S=StyleSheet.create({body:{position:"relative",overflow:"hidden"},columns:{flex:1,flexDirection:"row"},optTxt:{includeFontPadding:!1},indicator:{position:"absolute",left:0,right:0,zIndex:3},gMask:{position:"absolute",left:0,right:0,zIndex:2},toolbar:{flexDirection:"row",alignItems:"center",justifyContent:"space-between"},title:{flex:1,textAlign:"center"},ttlW:{flex:1,alignItems:"center",justifyContent:"center"},actTxt:{minWidth:44,textAlign:"center"},actW:{minWidth:44,alignItems:"center",justifyContent:"center"},loading:{position:"absolute",top:0,left:0,right:0,bottom:0,alignItems:"center",justifyContent:"center"}}),Picker=React.memo(PickerImpl);export default Picker;
1
+ function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},_extends.apply(null,arguments)}import React,{useCallback,useEffect,useMemo,useRef,useState}from"react";import{Pressable,Text,View,Platform,StyleSheet,ScrollView,PanResponder}from"react-native";import Loading from"../loading";import{useLocale}from"../config-provider/useLocale";import{isText}from"../../utils/validate";import{clamp}from"../../utils";import{usePickerTokens}from"./tokens";import{createHairlineView}from"../../utils/hairline";import{findEnabledIndex}from"../../hooks/picker/normalize";import{getVisibleCount,GradientMask,usePickerValue}from"../../hooks/picker/value";export{toArrayValue,findEnabledIndex,prepareColumns,normalizePicker}from"../../hooks/picker/normalize";export{usePickerValue}from"../../hooks/picker/value";const W=StyleSheet.create({column:{flex:1},option:{justifyContent:"center",alignItems:"center"},grab:{cursor:"pointer",userSelect:"none",touchAction:"none"}}),WheelPickerItemInner=({item:e,index:t,itemHeight:n,active:r,disabled:o,renderItem:l})=>{const a=l(e,t,{active:r,disabled:o});return React.createElement(View,{style:[W.option,{height:n}]},a)},WheelPickerItem=React.memo(WheelPickerItemInner),getVelocityBucket=e=>{const t=Math.abs(e);return t>1.2?2:t>.6?1:0},adjustIndex=(e,t)=>{const n=t.length;if(!n)return 0;const r=clamp(e,0,n-1),o=findEnabledIndex(t,r);return o>=0?o:r},indexToOffset=(e,t)=>-e*t,offsetToIndex=(e,t,n,r)=>{const o=-Math.max(0,n-1)*t,l=clamp(e,o,0);let a=Math.round(-l/t);a=adjustIndex(a,r);return{index:a,snapOffset:indexToOffset(a,t)}},shouldMomentum=(e,t)=>t<500&&Math.abs(e)>8,momentumTarget=(e,t,n,r,o)=>{const l=Math.abs(e/t),a=clamp(n+l/.0025*(e<0?-1:1),o,0),i=Math.round(-a/r);return indexToOffset(i,r)},WheelPickerInner=({data:e,selectedIndex:t,onChange:n,onInteractStart:r,onInteractEnd:o,renderItem:l,itemHeight:a,visibleRest:i,readOnly:c,indicatorColor:s,decelerationRate:u=Platform.select({ios:.9985,android:.995,default:.995})??"normal",scrollEventThrottle:m=16,swipeDuration:d=300})=>{const f="web"===Platform.OS,p=useRef(null),h=useRef(null),b=i*a,g=e.length,y=Math.max(0,g-1),R=-y*a,E=a*(2*i+1),k=clamp(t,0,y),x=findEnabledIndex(e,k),v=x>=0?x:k,w=2*i+1,C=g>20*w?32:m,I=g>4*w,T=useCallback(()=>React.createElement(View,{style:{height:b}}),[b]),V=useMemo(()=>[S.indicator,{height:a,top:a*i}],[a,i]),P=useRef(null),M=useRef(!1),O=useRef(0),D=useCallback(()=>{P.current&&(clearTimeout(P.current),P.current=null)},[]),H=useCallback((t,r)=>{if(c)return;const{index:o,snapOffset:l}=offsetToIndex(-t,a,g,e),i=-l;Math.abs(i-t)>.5&&p.current?.scrollToOffset({offset:i,animated:r}),n(o)},[e,a,n,c,g]);useEffect(()=>{const e=v*a;f||h.current?.scrollTo({y:e,animated:!1})},[f,a,v]);const[A,F]=useState(()=>indexToOffset(v,a)),L=useRef(A),z=useRef(0),j=useRef(0),[B,$]=useState(0),[q,_]=useState(0),G=useRef(0),N=useRef(null),Y=useRef(0),J=useRef(null),K=useRef(null),Q=useRef(null),U=useRef(null),X=useRef(!1),Z=useRef(r);Z.current=r;const ee=useRef(o);ee.current=o;const te=useCallback(()=>{c||X.current||(X.current=!0,Z.current?.())},[c]),ne=useCallback(()=>{X.current&&(X.current=!1,ee.current?.())},[]),re=useCallback(()=>{null!=U.current&&"undefined"!=typeof cancelAnimationFrame&&(cancelAnimationFrame(U.current),U.current=null),null!=J.current&&"undefined"!=typeof cancelAnimationFrame&&(cancelAnimationFrame(J.current),J.current=null)},[]),oe=useCallback(()=>{Q.current&&(clearTimeout(Q.current),Q.current=null)},[]);useEffect(()=>()=>{D(),oe(),re()},[D,oe,re]);const le=useCallback(e=>{const t=getVelocityBucket(e);t!==G.current&&(G.current=t,_(t))},[]),ae=useCallback(e=>{const t=Date.now(),n=N.current;if(null!=n){const r=Math.max(1,t-n);le(e/r)}N.current=t},[le]);useEffect(()=>{if(!f)return;oe(),K.current=null,$(0);const e=indexToOffset(v,a);L.current=e,F(e)},[oe,f,a,v,$]);const ie=useCallback(()=>{if(c)return;const e=K.current;null!=e&&(K.current=null,oe(),$(0),ne(),n(e))},[oe,n,c,$]),ce=useCallback(e=>{if(c)return;te();const t=clamp(e,0,y),n=indexToOffset(t,a);oe(),K.current=t,L.current=n,$(d),F(n),d<=0?ie():Q.current=setTimeout(ie,d+80)},[oe,ie,a,y,c,d]),se=useCallback(t=>{if(c)return;const n=t.nativeEvent?.deltaY??0;n&&(Y.current+=n,null==J.current&&"undefined"!=typeof requestAnimationFrame&&(J.current=requestAnimationFrame(()=>{J.current=null;const t=Y.current;if(Y.current=0,!t)return;ae(t);const n=t>0?1:-1,{index:r}=offsetToIndex(L.current,a,g,e),o=clamp(r+n,0,y);ce(o)})))},[e,a,y,c,ce,g,ae]),ue=clamp(Math.round(-A/a),0,y),me=useMemo(()=>{if(!f||g<=0)return{items:null,topSpacer:null,bottomSpacer:null};let t=0,n=y;if(I){const e=Math.max(2*w,8),r=2===q?4*w:1===q?2*w:0,o=Math.min(e+r,Math.max(6*w,24));t=clamp(ue-o,0,y),n=clamp(ue+o,0,y)}const r=[];for(let o=t;o<=n;o+=1){const t=e[o];t&&r.push(React.createElement(WheelPickerItem,{key:`${o}-${String(t.value??"")}`,item:t,index:o,itemHeight:a,active:o===v,disabled:!!t.disabled,renderItem:l}))}const o=t*a,i=(y-n)*a;return{items:r,topSpacer:o>0&&React.createElement(View,{style:{height:o}}),bottomSpacer:i>0&&React.createElement(View,{style:{height:i}})}},[e,f,a,y,l,v,g,w,ue,q,I]),de=useMemo(()=>({transform:[{translateY:A}]}),[A]),fe=useMemo(()=>B?{transitionProperty:"transform",transitionDuration:B+"ms",transitionTimingFunction:"cubic-bezier(0.23, 1, 0.68, 1)",willChange:"transform"}:void 0,[B]),pe=useCallback(e=>{const t=e.nativeEvent?.propertyName??e.propertyName;t&&"transform"!==t&&"webkitTransform"!==t||ie()},[ie]),he=useMemo(()=>PanResponder.create({onStartShouldSetPanResponder:()=>!c,onMoveShouldSetPanResponder:()=>!c,onPanResponderGrant:()=>{re(),K.current=null,te(),$(0),z.current=L.current,j.current=Date.now()},onPanResponderMove:(e,t)=>{if(c)return;le(t.vy);const n=clamp(z.current+t.dy,R,0);L.current=n,"undefined"==typeof requestAnimationFrame?F(n):null!=U.current||(U.current=requestAnimationFrame(()=>{U.current=null,F(L.current)}))},onPanResponderRelease:(t,n)=>{if(c)return;le(0);const r=Date.now()-j.current,o=n.dy;let l=clamp(z.current+o,R,0);shouldMomentum(o,r)&&(l=momentumTarget(o,r,z.current,a,R));const{index:i}=offsetToIndex(l,a,g,e);ce(i)},onPanResponderTerminationRequest:()=>!1,onPanResponderTerminate:()=>{ne(),$(0)}}),[e,a,R,ne,te,c,le,ce,re,g]),be=!c,ge=useCallback(()=>be,[be]),ye=useMemo(()=>({paddingVertical:b}),[b]),Re=useCallback(e=>{O.current=e.nativeEvent.contentOffset.y},[]),Ee=useCallback(()=>{M.current=!1,D(),te()},[D,te]),ke=useCallback(e=>{if(c)return;const t=e.nativeEvent.contentOffset.y;O.current=t,D(),P.current=setTimeout(()=>{M.current||(H(O.current,!0),ne())},80)},[D,H,ne,c]),xe=useCallback(()=>{M.current=!0,D(),te()},[D,te]),Se=useCallback(e=>{M.current=!1,D();const t=e.nativeEvent.contentOffset.y;O.current=t,H(t,!1),ne()},[D,H,ne]);return f?React.createElement(View,_extends({style:[W.column,{height:E},W.grab],onWheel:se},he.panHandlers),React.createElement(View,{style:V,pointerEvents:"none"},React.createElement(View,{style:createHairlineView({position:"top",color:s,left:0,right:0})}),React.createElement(View,{style:createHairlineView({position:"bottom",color:s,left:0,right:0})})),React.createElement(View,{style:[de,fe],onTransitionEnd:pe},React.createElement(T,null),me.topSpacer,me.items,me.bottomSpacer,React.createElement(T,null))):React.createElement(View,{style:[W.column,{height:E}],collapsable:!1},React.createElement(View,{style:V,pointerEvents:"none"},React.createElement(View,{style:createHairlineView({position:"top",color:s,left:0,right:0})}),React.createElement(View,{style:createHairlineView({position:"bottom",color:s,left:0,right:0})})),React.createElement(ScrollView,{ref:h,showsVerticalScrollIndicator:!1,scrollEventThrottle:C,decelerationRate:u,snapToInterval:a,snapToAlignment:"start",bounces:!1,overScrollMode:"never",nestedScrollEnabled:!0,contentContainerStyle:ye,onStartShouldSetResponderCapture:ge,onMoveShouldSetResponderCapture:ge,onScroll:Re,onScrollBeginDrag:Ee,onScrollEndDrag:ke,onMomentumScrollBegin:xe,onMomentumScrollEnd:Se,scrollEnabled:!c},e.map((e,t)=>React.createElement(WheelPickerItem,{key:`${t}-${String(e.value??"")}`,item:e,index:t,itemHeight:a,active:t===v,disabled:!!e.disabled,renderItem:l}))))},WheelPicker=React.memo(WheelPickerInner),PickerColumn=React.memo(e=>{const{columnIndex:t,options:n,value:r,itemHeight:o,visibleItemCount:l,optionRender:a,getOptionTestID:i,getOptionA11yLabel:c,onSelect:s,tokens:u,readOnly:m,decelerationRate:d,scrollEventThrottle:f,swipeDuration:p}=e,h=Math.max(1,Math.floor((l-1)/2)),b=useMemo(()=>new Map(n.map((e,t)=>[e.value,t])),[n]),g=useMemo(()=>{if(!n.length)return 0;const e=b.get(r);return findEnabledIndex(n,"number"==typeof e&&e>=0?e:0)},[n,r,b]),y=useCallback(e=>{const r=findEnabledIndex(n,e),o=n[r];o&&!o.disabled&&s(o,t,r)},[t,s,n]),{text:R,textDisabled:E,textMuted:k}=u.colors,x={fontSize:u.typography.optionSize,fontFamily:u.typography.fontFamily,fontWeight:u.typography.optionWeight},v=useCallback((e,n,r)=>{const{active:l=!1,disabled:s=!1}=r??{},u=s?E:l?R:k,m=a?a(e,{columnIndex:t,active:l}):e.label??e.value,d=i?.(e,{columnIndex:t,active:l}),f=c?.(e,{columnIndex:t,active:l});return React.createElement(View,{style:[W.option,{opacity:s?.5:1,minHeight:o}],testID:d,accessible:!!f,accessibilityLabel:f},isText(m)?React.createElement(Text,{numberOfLines:1,style:[S.optTxt,x,{color:u}]},m):m)},[R,E,k,t,c,i,o,x,a]);return React.createElement(View,{style:[W.column,{height:o*l}]},React.createElement(WheelPicker,{data:n,itemHeight:o,visibleRest:h,selectedIndex:Math.max(0,g),onChange:y,readOnly:m,indicatorColor:u.colors.indicator,decelerationRate:d,scrollEventThrottle:f,swipeDuration:p,renderItem:v}))}),PickerImpl=e=>{const{tokensOverride:t}=e,n=useLocale(),r=usePickerTokens(t),{columns:o=[],value:l,defaultValue:a,title:i,showToolbar:c=r.defaults.showToolbar,toolbarPosition:s=r.defaults.toolbarPosition,confirmButtonText:u=n?.confirm??"Confirm",cancelButtonText:m=n?.cancel??"Cancel",itemHeight:d=r.defaults.itemHeight,visibleItemCount:f=r.defaults.visibleItemCount,loading:p=!1,readOnly:h=!1,decelerationRate:b=Platform.select({ios:.999,android:.997,default:.989})??"normal",swipeDuration:g=r.defaults.swipeDuration,scrollEventThrottle:y=16,columnsTop:R,columnsBottom:E,optionRender:k,getOptionTestID:x,getOptionA11yLabel:v,emitConfirmOnAutoSelect:w=!0,maskColor:C,maskType:I=r.defaults.maskType,onChange:T,onConfirm:V,onCancel:P,style:M,testID:O,...W}=e,D=getVisibleCount(f??r.defaults.visibleItemCount),{normalized:H,handleSelect:A,handleConfirm:F,preparedColumns:L}=usePickerValue({columns:o,valueProp:l,defaultValue:a,emitConfirmOnAutoSelect:w,onChange:T,onConfirm:V}),z="cascade"===L.type,j={fontSize:r.typography.toolbarSize,fontFamily:r.typography.fontFamily,fontWeight:r.typography.toolbarWeight},B=(e,t)=>React.isValidElement(e)?React.createElement(View,{style:S.actW},e):isText(e)?React.createElement(Text,{numberOfLines:1,style:[S.actTxt,j,{color:t}]},e):React.createElement(View,{style:S.actW}),$=c?React.createElement(View,{style:[S.toolbar,{height:r.spacing.toolbarHeight,paddingHorizontal:r.spacing.actionPadding}]},React.createElement(Pressable,{onPress:P,accessibilityRole:"button"},B(m,r.colors.cancel)),null==(q=i)?React.createElement(View,null):React.isValidElement(q)?React.createElement(View,{style:S.ttlW},q):React.createElement(Text,{style:[S.title,j,{color:r.colors.text}],numberOfLines:1},q),React.createElement(Pressable,{onPress:F,accessibilityRole:"button"},B(u,r.colors.confirm)),React.createElement(View,{style:createHairlineView({position:"bottom",color:r.colors.indicator,left:0,right:0})})):null;var q;const _=d*D,G=Math.max(1,Math.floor((D-1)/2)),N=d*G,Y=N,J=H.columns.length>0,K=C??r.colors.mask,Q=J?H.columns.map((e,t)=>{const n=z?`${t}-${H.values.slice(0,t).map(String).join("|")}`:String(t);return React.createElement(PickerColumn,{key:n,columnIndex:t,options:e,value:H.values[t],itemHeight:d,visibleItemCount:D,decelerationRate:b,scrollEventThrottle:y,optionRender:k,getOptionTestID:x,getOptionA11yLabel:v,readOnly:h,swipeDuration:g,onSelect:A,tokens:r})}):null;return React.createElement(View,_extends({},W,{style:[{backgroundColor:r.colors.background,borderRadius:r.radius.container},M],testID:O}),"top"===s&&$,React.createElement(View,{style:[S.body,{height:_}]},React.createElement(View,{style:S.columns,pointerEvents:p?"none":"auto"},R,Q,E,J&&React.createElement(React.Fragment,null,React.createElement(View,{pointerEvents:"none",style:[S.indicator,{top:N,height:d}]},React.createElement(View,{style:createHairlineView({position:"top",color:r.colors.indicator,left:0,right:0})}),React.createElement(View,{style:createHairlineView({position:"bottom",color:r.colors.indicator,left:0,right:0})})),React.createElement(GradientMask,{position:"top",height:Y,color:K,maskType:I}),React.createElement(GradientMask,{position:"bottom",height:Y,color:K,maskType:I}))),p&&React.createElement(View,{style:[S.loading,{backgroundColor:r.colors.loadingMask}]},React.createElement(Loading,null))),"bottom"===s&&$)},S=StyleSheet.create({body:{position:"relative",overflow:"hidden"},columns:{flex:1,flexDirection:"row"},optTxt:{includeFontPadding:!1},indicator:{position:"absolute",left:0,right:0,zIndex:3},toolbar:{flexDirection:"row",alignItems:"center",justifyContent:"space-between"},title:{flex:1,textAlign:"center"},ttlW:{flex:1,alignItems:"center",justifyContent:"center"},actTxt:{minWidth:44,textAlign:"center"},actW:{minWidth:44,alignItems:"center",justifyContent:"center"},loading:{position:"absolute",top:0,left:0,right:0,bottom:0,alignItems:"center",justifyContent:"center"}}),Picker=React.memo(PickerImpl);export default Picker;
@@ -1 +1 @@
1
- function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var o=arguments[t];for(var n in o)({}).hasOwnProperty.call(o,n)&&(e[n]=o[n])}return e},_extends.apply(null,arguments)}import React,{useCallback,useEffect,useMemo,useRef,useState}from"react";import{Animated,Easing,Platform,Pressable,StyleSheet,Text,View,useWindowDimensions}from"react-native";import{SafeAreaView}from"../safe-area-view";import{addPopStateListener,nativeDriverEnabled}from"../../platform";import{useReducedMotion}from"../../hooks/animation";import{createPlatformShadow}from"../../utils/createPlatformShadow";import{isRenderable,isText}from"../../utils/validate";import{Cross}from"react-native-system-icon";import Portal from"../portal/Portal";import{useAriaOverlay,useOverlayStack}from"../../hooks";import{useLocale}from"../config-provider/useLocale";import{useDirection}from"../config-provider/useDirection";import{usePopupTokens}from"./tokens";const AnimatedPressable=Animated.createAnimatedComponent(Pressable),EASE_OUT=Easing.bezier(.075,.82,.165,1),EASE_IN=Easing.bezier(.55,.055,.675,.19),CAPTURE=()=>!0,placementConfig={top:{container:{justifyContent:"flex-start",alignItems:"center"},axis:"y"},bottom:{container:{justifyContent:"flex-end",alignItems:"center"},axis:"y"},left:{container:{justifyContent:"center",alignItems:"flex-start"},axis:"x"},right:{container:{justifyContent:"center",alignItems:"flex-end"},axis:"x"},center:{container:{justifyContent:"center",alignItems:"center"},axis:"y"}},CONTENT_SELF={top:{alignSelf:"stretch"},bottom:{alignSelf:"stretch"},left:{alignSelf:"flex-start"},right:{alignSelf:"flex-end"},center:{alignSelf:"center"}},buildRadius=(e,t,o)=>e?"top"===t?{borderBottomLeftRadius:o,borderBottomRightRadius:o}:"bottom"===t?{borderTopLeftRadius:o,borderTopRightRadius:o}:"left"===t?{borderTopRightRadius:o,borderBottomRightRadius:o}:"right"===t?{borderTopLeftRadius:o,borderBottomLeftRadius:o}:{borderRadius:o}:void 0,hiddenStyle={opacity:0,shadowOpacity:0,shadowRadius:0,elevation:0},PopupImpl=e=>{const t=useLocale(),o=useDirection(),{visible:n,placement:i,position:r,title:a,description:s,tokensOverride:l,overlay:c=!0,overlayStyle:u,overlayAccessibilityLabel:d=t?.vanPopup?.closeOverlay??"Close overlay",closeOnOverlayPress:p,closeOnClickOverlay:m,overlayTestID:f="popup-overlay",closeable:g=!1,closeIcon:y,closeIconPosition:h="top-right",round:b,safeArea:R=!1,safeAreaInsetTop:v=!1,safeAreaInsetBottom:E,lockScroll:C=!0,destroyOnClose:I=!1,duration:O=300,zIndex:P,closeOnBackPress:x=!1,closeOnPopstate:A=!1,children:T,beforeClose:w,onClickOverlay:k,onClose:z,onOpen:L,onOpened:W,onClosed:V,stopPropagation:B=!0,style:D,contentAnimationStyle:F,...H}=e,M=i??r??"center",j=m??p??!0,_="center"===M,N=E??!1,U=usePopupTokens(l),X=useReducedMotion(),Y=useRef({onOpened:W,onClosed:V,onOpen:L,onClose:z,beforeClose:w,onClickOverlay:k});Y.current={onOpened:W,onClosed:V,onOpen:L,onClose:z,beforeClose:w,onClickOverlay:k};const q=useMemo(()=>{const e=createPlatformShadow(U.shadow),{colors:t,spacing:o,typography:n,layout:i}=U;return{popup:{backgroundColor:t.background,padding:o.padding,...e},title:{color:t.title,fontFamily:n.fontFamily,fontSize:n.titleSize,fontWeight:n.titleWeight,marginHorizontal:o.descriptionHorizontal,textAlign:"center"},titleWrap:{marginTop:o.titleTop,marginBottom:o.titleBottom,marginHorizontal:o.descriptionHorizontal,alignItems:"center"},desc:{color:t.description,fontFamily:n.fontFamily,fontSize:n.descriptionSize,lineHeight:n.descriptionLineHeight},descWrap:{marginHorizontal:o.descriptionHorizontal,marginBottom:o.descriptionBottom},closeBase:{minWidth:o.closeIconSize,minHeight:o.closeIconSize,padding:o.closeIconPadding},closeDef:{width:o.closeIconSize,height:o.closeIconSize},side:{width:i.sideWidth,maxWidth:i.maxWidth},center:{minWidth:i.minWidth,maxWidth:i.centerMaxWidth}}},[U]),[G,J]=useState(n),[K,Q]=useState(n),Z=n||K,$=j&&(z||w),ee=useRef(new Animated.Value(0)).current,te=useRef(null),oe=useRef(0),ne=useRef(n),ie=useRef(!1),re="top"===M||"bottom"===M,ae="left"===M||"right"===M,se="top"===M||"left"===M?-1:1,le=useCallback((e,t)=>{oe.current+=1;const o=oe.current;te.current?.stop();const n=t?0:O,i=Animated.timing(ee,{toValue:e?1:0,duration:n,easing:e?EASE_OUT:EASE_IN,useNativeDriver:nativeDriverEnabled,isInteraction:!1});te.current=i,i.start(({finished:t})=>{t&&o===oe.current&&(e?Y.current.onOpened?.():(Q(!1),I&&J(!1),Y.current.onClosed?.()))})},[I,O,ee]);useEffect(()=>{n?(J(!0),Q(!0),le(!0,X)):ne.current&&le(!1,X)},[le,n,X]),useEffect(()=>{n&&!ne.current&&Y.current.onOpen?.(),ne.current=n},[n]),useEffect(()=>()=>{te.current?.stop()},[]);const ce=useCallback(async e=>{if(!ie.current){ie.current=!0;try{if(Y.current.beforeClose){if(!1===await Y.current.beforeClose(e))return}Y.current.onClose?.()}finally{ie.current=!1}}},[]);useEffect(()=>{if(A)return addPopStateListener(()=>{n&&ce("close")})},[A,ce,n]);const ue=useCallback(()=>{Y.current.onClickOverlay?.(),j&&ce("overlay")},[ce,j]),de=useCallback(()=>ce("close-icon"),[ce]),pe=useCallback(()=>ce("close"),[ce]),{zIndex:me}=useOverlayStack({visible:Z,onClose:pe,closeOnBack:x,lockScroll:C,zIndex:P,type:"popup"}),{overlayRef:fe,overlayProps:ge}=useAriaOverlay({isOpen:Z,onClose:()=>ce("overlay"),isDismissable:j,overlayProps:{..."android"===Platform.OS?{}:{accessibilityRole:"dialog"},accessibilityLiveRegion:"polite"}}),{onLayout:ye,...Se}=ge,he=useMemo(()=>B?{...Se,onStartShouldSetResponder:CAPTURE}:Se,[Se,B]),be=placementConfig[M],Re=buildRadius(b,M,U.radius.round),{width:ve,height:Ee}=useWindowDimensions(),Ce=ae?ve:re?Ee:0,Ie=useMemo(()=>{if(_)return null;const e=[Ce*se,0];return"y"===be.axis?{translateY:ee.interpolate({inputRange:[0,1],outputRange:e})}:{translateX:ee.interpolate({inputRange:[0,1],outputRange:e})}},[be.axis,se,Ce,_,ee]),Oe=useMemo(()=>Ie?[Ie]:[],[Ie]),Pe=useMemo(()=>{const e=F?.transform,t=Array.isArray(e)?[...Oe,...e]:Oe,o={...F,transform:t};return _?{...o,opacity:ee}:null==F?.opacity?{...o,opacity:1}:o},[Oe,F,_,ee]),[xe,Ae]=useState(0),Te=useCallback(e=>Ae(e.nativeEvent.layout.height),[]),we=G||n,ke=!Z,ze=isRenderable(a)||isRenderable(s),Le=useMemo(()=>{if(!ze)return null;const e=U.spacing.closeIconRight+U.spacing.closeIconSize,t=g&&h.startsWith("top-")?h.endsWith("right")?{paddingRight:e}:{paddingLeft:e}:void 0,o=(e,t,o)=>isRenderable(e)?isText(e)?React.createElement(Text,{style:t},e):React.createElement(View,{style:o},e):null;return React.createElement(View,{style:[S.header,t]},o(a,[S.title,q.title],q.titleWrap),o(s,[S.desc,q.desc],q.descWrap))},[g,h,s,q,ze,a,U.spacing.closeIconRight,U.spacing.closeIconSize]),We=useMemo(()=>{if(!g)return null;const e=null!=y,t=h.includes("bottom")?{bottom:U.spacing.closeIconTop}:{top:U.spacing.closeIconTop+xe},n="rtl"===o,i=h.endsWith("left")?n?{right:U.spacing.closeIconRight}:{left:U.spacing.closeIconRight}:n?{left:U.spacing.closeIconRight}:{right:U.spacing.closeIconRight};return React.createElement(Pressable,{style:[S.closeBase,q.closeBase,t,i,!e&&q.closeDef],hitSlop:8,onPress:de},e?y:React.createElement(Cross,{size:22,fill:U.colors.closeIcon,color:U.colors.closeIcon}))},[y,h,g,q,de,xe,U.colors.closeIcon,U.spacing.closeIconRight,U.spacing.closeIconTop]),Ve=ze?React.createElement(React.Fragment,null,Le,T):T;if(!we)return null;const Be=me??P,De=R?React.createElement(SafeAreaView,null,Ve):React.createElement(React.Fragment,null,v&&React.createElement(SafeAreaView,{edge:"top",onLayout:Te,pointerEvents:"none"}),Ve,N&&React.createElement(SafeAreaView,{edge:"bottom",pointerEvents:"none"}));return React.createElement(Portal,null,React.createElement(View,{style:[S.root,Be?{zIndex:Be}:void 0],pointerEvents:"box-none"},React.createElement(View,{style:[S.ctr,be.container],pointerEvents:Z?"auto":"none",accessibilityViewIsModal:Z,accessibilityLiveRegion:"polite",onAccessibilityEscape:pe},c&&Z?React.createElement(AnimatedPressable,_extends({testID:f,style:[S.ovl,{backgroundColor:U.colors.overlay,opacity:ee},u],renderToHardwareTextureAndroid:"android"===Platform.OS,shouldRasterizeIOS:"ios"===Platform.OS,pointerEvents:Z?"auto":"none"},$?{accessibilityRole:"button",accessibilityLabel:d,accessibilityHint:t?.vanPopup?.closeHint??"Double-tap to close"}:{accessible:!1},{onPress:ue})):null,!c&&C&&Z?React.createElement(View,{style:S.lock,pointerEvents:"auto",onStartShouldSetResponder:CAPTURE,onMoveShouldSetResponder:CAPTURE}):null,React.createElement(Animated.View,_extends({ref:fe},he,{onLayout:ye,renderToHardwareTextureAndroid:"android"===Platform.OS,shouldRasterizeIOS:"ios"===Platform.OS,style:[q.popup,_&&q.center,re&&S.popV,ae&&q.side,CONTENT_SELF[M],Re,Pe,D,ke&&hiddenStyle]},H),We,De))))},S=StyleSheet.create({root:{...StyleSheet.absoluteFillObject,justifyContent:"center"},ctr:{flex:1},ovl:{...StyleSheet.absoluteFillObject,opacity:0},header:{width:"100%"},title:{includeFontPadding:!1},desc:{includeFontPadding:!1},popV:{alignSelf:"stretch"},closeBase:{position:"absolute",zIndex:999,alignItems:"center",justifyContent:"center"},lock:{...StyleSheet.absoluteFillObject}});export const Popup=React.memo(PopupImpl);export default Popup;
1
+ function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var o=arguments[t];for(var n in o)({}).hasOwnProperty.call(o,n)&&(e[n]=o[n])}return e},_extends.apply(null,arguments)}import React,{useCallback,useEffect,useMemo,useRef,useState}from"react";import{Animated,Platform,Pressable,StyleSheet,Text,View,useWindowDimensions}from"react-native";import{SafeAreaView}from"../safe-area-view";import{addPopStateListener,nativeDriverEnabled}from"../../platform";import{useReducedMotion}from"../../hooks/animation";import{createPlatformShadow}from"../../utils/createPlatformShadow";import{isRenderable,isText}from"../../utils/validate";import Cross from"react-native-system-icon/Cross";import Portal from"../portal/Portal";import{useAriaOverlay,useOverlayStack}from"../../hooks";import{useLocale}from"../config-provider/useLocale";import{useDirection}from"../config-provider/useDirection";import{usePopupTokens}from"./tokens";import{buildRadius,CAPTURE,CONTENT_SELF,EASE_IN,EASE_OUT,hiddenStyle,placementConfig}from"../../hooks/popup/utils";const AnimatedPressable=Animated.createAnimatedComponent(Pressable),PopupImpl=e=>{const t=useLocale(),o=useDirection(),{visible:n,placement:i,position:r,title:s,description:l,tokensOverride:a,overlay:c=!0,overlayStyle:u,overlayAccessibilityLabel:p=t?.vanPopup?.closeOverlay??"Close overlay",closeOnOverlayPress:d,closeOnClickOverlay:m,overlayTestID:f="popup-overlay",closeable:y=!1,closeIcon:g,closeIconPosition:h="top-right",round:b,safeArea:R=!1,safeAreaInsetTop:v=!1,safeAreaInsetBottom:E,lockScroll:C=!0,destroyOnClose:O=!1,duration:P=300,zIndex:I,closeOnBackPress:A=!1,closeOnPopstate:k=!1,children:w,beforeClose:x,onClickOverlay:T,onClose:z,onOpen:W,onOpened:L,onClosed:V,stopPropagation:D=!0,style:F,contentAnimationStyle:H,...M}=e,B=i??r??"center",_=m??d??!0,j="center"===B,N=E??!1,U=usePopupTokens(a),X=useReducedMotion(),Y=useRef({onOpened:L,onClosed:V,onOpen:W,onClose:z,beforeClose:x,onClickOverlay:T});Y.current={onOpened:L,onClosed:V,onOpen:W,onClose:z,beforeClose:x,onClickOverlay:T};const q=useMemo(()=>{const e=createPlatformShadow(U.shadow),{colors:t,spacing:o,typography:n,layout:i}=U;return{popup:{backgroundColor:t.background,padding:o.padding,...e},title:{color:t.title,fontFamily:n.fontFamily,fontSize:n.titleSize,fontWeight:n.titleWeight,marginHorizontal:o.descriptionHorizontal,textAlign:"center"},titleWrap:{marginTop:o.titleTop,marginBottom:o.titleBottom,marginHorizontal:o.descriptionHorizontal,alignItems:"center"},desc:{color:t.description,fontFamily:n.fontFamily,fontSize:n.descriptionSize,lineHeight:n.descriptionLineHeight},descWrap:{marginHorizontal:o.descriptionHorizontal,marginBottom:o.descriptionBottom},closeBase:{minWidth:o.closeIconSize,minHeight:o.closeIconSize,padding:o.closeIconPadding},closeDef:{width:o.closeIconSize,height:o.closeIconSize},side:{width:i.sideWidth,maxWidth:i.maxWidth},center:{minWidth:i.minWidth,maxWidth:i.centerMaxWidth}}},[U]),[G,J]=useState(n),[K,Q]=useState(n),Z=n||K,$=_&&(z||x),ee=useRef(new Animated.Value(0)).current,te=useRef(null),oe=useRef(0),ne=useRef(n),ie=useRef(!1),re="top"===B||"bottom"===B,se="left"===B||"right"===B,le="top"===B||"left"===B?-1:1,ae=useCallback((e,t)=>{oe.current+=1;const o=oe.current;te.current?.stop();const n=t?0:P,i=Animated.timing(ee,{toValue:e?1:0,duration:n,easing:e?EASE_OUT:EASE_IN,useNativeDriver:nativeDriverEnabled,isInteraction:!1});te.current=i,i.start(({finished:t})=>{t&&o===oe.current&&(e?Y.current.onOpened?.():(Q(!1),O&&J(!1),Y.current.onClosed?.()))})},[O,P,ee]);useEffect(()=>{n?(J(!0),Q(!0),ae(!0,X)):ne.current&&ae(!1,X)},[ae,n,X]),useEffect(()=>{n&&!ne.current&&Y.current.onOpen?.(),ne.current=n},[n]),useEffect(()=>()=>{te.current?.stop()},[]);const ce=useCallback(async e=>{if(!ie.current){ie.current=!0;try{if(Y.current.beforeClose){if(!1===await Y.current.beforeClose(e))return}Y.current.onClose?.()}finally{ie.current=!1}}},[]);useEffect(()=>{if(k)return addPopStateListener(()=>{n&&ce("close")})},[k,ce,n]);const ue=useCallback(()=>{Y.current.onClickOverlay?.(),_&&ce("overlay")},[ce,_]),pe=useCallback(()=>ce("close-icon"),[ce]),de=useCallback(()=>ce("close"),[ce]),{zIndex:me}=useOverlayStack({visible:Z,onClose:de,closeOnBack:A,lockScroll:C,zIndex:I,type:"popup"}),{overlayRef:fe,overlayProps:ye}=useAriaOverlay({isOpen:Z,onClose:()=>ce("overlay"),isDismissable:_,overlayProps:{..."android"===Platform.OS?{}:{accessibilityRole:"dialog"},accessibilityLiveRegion:"polite"}}),{onLayout:ge,...Se}=ye,he=useMemo(()=>D?{...Se,onStartShouldSetResponder:CAPTURE}:Se,[Se,D]),be=placementConfig[B],Re=buildRadius(b,B,U.radius.round),{width:ve,height:Ee}=useWindowDimensions(),Ce=se?ve:re?Ee:0,Oe=useMemo(()=>{if(j)return null;const e=[Ce*le,0];return"y"===be.axis?{translateY:ee.interpolate({inputRange:[0,1],outputRange:e})}:{translateX:ee.interpolate({inputRange:[0,1],outputRange:e})}},[be.axis,le,Ce,j,ee]),Pe=useMemo(()=>Oe?[Oe]:[],[Oe]),Ie=useMemo(()=>{const e=H?.transform,t=Array.isArray(e)?[...Pe,...e]:Pe,o={...H,transform:t};return j?{...o,opacity:ee}:null==H?.opacity?{...o,opacity:1}:o},[Pe,H,j,ee]),[Ae,ke]=useState(0),we=useCallback(e=>ke(e.nativeEvent.layout.height),[]),xe=G||n,Te=!Z,ze=isRenderable(s)||isRenderable(l),We=useMemo(()=>{if(!ze)return null;const e=U.spacing.closeIconRight+U.spacing.closeIconSize,t=y&&h.startsWith("top-")?h.endsWith("right")?{paddingRight:e}:{paddingLeft:e}:void 0,o=(e,t,o)=>isRenderable(e)?isText(e)?React.createElement(Text,{style:t},e):React.createElement(View,{style:o},e):null;return React.createElement(View,{style:[S.header,t]},o(s,[S.title,q.title],q.titleWrap),o(l,[S.desc,q.desc],q.descWrap))},[y,h,l,q,ze,s,U.spacing.closeIconRight,U.spacing.closeIconSize]),Le=useMemo(()=>{if(!y)return null;const e=null!=g,t=h.includes("bottom")?{bottom:U.spacing.closeIconTop}:{top:U.spacing.closeIconTop+Ae},n="rtl"===o,i=h.endsWith("left")?n?{right:U.spacing.closeIconRight}:{left:U.spacing.closeIconRight}:n?{left:U.spacing.closeIconRight}:{right:U.spacing.closeIconRight};return React.createElement(Pressable,{style:[S.closeBase,q.closeBase,t,i,!e&&q.closeDef],hitSlop:8,onPress:pe},e?g:React.createElement(Cross,{size:22,fill:U.colors.closeIcon,color:U.colors.closeIcon}))},[g,h,y,q,pe,Ae,U.colors.closeIcon,U.spacing.closeIconRight,U.spacing.closeIconTop]),Ve=ze?React.createElement(React.Fragment,null,We,w):w;if(!xe)return null;const De=me??I,Fe=R?React.createElement(SafeAreaView,null,Ve):React.createElement(React.Fragment,null,v&&React.createElement(SafeAreaView,{edge:"top",onLayout:we,pointerEvents:"none"}),Ve,N&&React.createElement(SafeAreaView,{edge:"bottom",pointerEvents:"none"}));return React.createElement(Portal,null,React.createElement(View,{style:[S.root,De?{zIndex:De}:void 0],pointerEvents:"box-none"},React.createElement(View,{style:[S.ctr,be.container],pointerEvents:Z?"auto":"none",accessibilityViewIsModal:Z,accessibilityLiveRegion:"polite",onAccessibilityEscape:de},c&&Z?React.createElement(AnimatedPressable,_extends({testID:f,style:[S.ovl,{backgroundColor:U.colors.overlay,opacity:ee},u],renderToHardwareTextureAndroid:"android"===Platform.OS,shouldRasterizeIOS:"ios"===Platform.OS,pointerEvents:Z?"auto":"none"},$?{accessibilityRole:"button",accessibilityLabel:p,accessibilityHint:t?.vanPopup?.closeHint??"Double-tap to close"}:{accessible:!1},{onPress:ue})):null,!c&&C&&Z?React.createElement(View,{style:S.lock,pointerEvents:"auto",onStartShouldSetResponder:CAPTURE,onMoveShouldSetResponder:CAPTURE}):null,React.createElement(Animated.View,_extends({ref:fe},he,{onLayout:ge,renderToHardwareTextureAndroid:"android"===Platform.OS,shouldRasterizeIOS:"ios"===Platform.OS,style:[q.popup,j&&q.center,re&&S.popV,se&&q.side,CONTENT_SELF[B],Re,Ie,F,Te&&hiddenStyle]},M),Le,Fe))))},S=StyleSheet.create({root:{...StyleSheet.absoluteFillObject,justifyContent:"center"},ctr:{flex:1},ovl:{...StyleSheet.absoluteFillObject,opacity:0},header:{width:"100%"},title:{includeFontPadding:!1},desc:{includeFontPadding:!1},popV:{alignSelf:"stretch"},closeBase:{position:"absolute",zIndex:999,alignItems:"center",justifyContent:"center"},lock:{...StyleSheet.absoluteFillObject}});export const Popup=React.memo(PopupImpl);export default Popup;
@@ -1 +1 @@
1
- import React,{useCallback,useEffect,useMemo,useRef,useState}from"react";import{DeviceEventEmitter,NativeEventEmitter,Platform,StyleSheet,View}from"react-native";import{isNumber}from"../../utils";import{PortalContext}from"./PortalContext";const AE="RNSU_PORTAL_ADD",UE="RNSU_PORTAL_UPDATE",RE="RNSU_PORTAL_REMOVE",CE="RNSU_PORTAL_CLEAR",TVE=DeviceEventEmitter||new NativeEventEmitter,IW="web"===Platform.OS,ao=(e,t)=>{"mount"===t.type?e.mount(t.children,t.key):"update"===t.type?e.update(t.key,t.children):"clear"===t.type?e.clear():e.unmount(t.key)},PortalManagerView=React.forwardRef((e,t)=>{const[r,n]=useState([]),a=useRef(0),o=useCallback(e=>{n(t=>{const r=t.findIndex(t=>t.key===e.key);return-1===r?[...t,e]:[...t.slice(0,r),e,...t.slice(r+1)]})},[]),l=useCallback((e,t)=>{const r=t??++a.current;return isNumber(t)&&t>=a.current&&(a.current=t+1),o({key:r,children:e}),r},[o]),c=useCallback((e,t)=>{o({key:e,children:t})},[o]),u=useCallback(e=>{n(t=>t.filter(t=>t.key!==e))},[]),s=useCallback(()=>{n([])},[]);return React.useImperativeHandle(t,()=>({mount:l,update:c,unmount:u,clear:s}),[l,c,u,s]),0===r.length?null:React.createElement(View,{pointerEvents:"box-none",style:S.pl,collapsable:!1},r.map(e=>React.createElement(View,{key:e.key,pointerEvents:"box-none",collapsable:!1,style:S.pe},e.children)))});let ah=0,nh=1,ngk=1e4;const gm={mount:(e,t)=>{"undefined"!=typeof __DEV__&&__DEV__&&0===ah&&console.warn("[Portal] Please mount <PortalHost> or <ConfigProvider> at the root to enable imperative APIs.");const r=t??ngk++;return isNumber(t)&&t>=ngk&&(ngk=t+1),TVE.emit(AE,{key:r,children:e}),r},update:(e,t)=>{TVE.emit(UE,{key:e,children:t})},unmount:e=>{TVE.emit(RE,{key:e})}},PortalHostImpl=({children:e})=>{const t=useRef(nh++),r=useRef(null),n=useRef([]),a=useRef(1),o=useCallback(e=>{const t=r.current;t?ao(t,e):n.current.push(e)},[]),l=useMemo(()=>({mount:(e,t)=>{const r=t??a.current++;return isNumber(t)&&t>=a.current&&(a.current=t+1),o({type:"mount",key:r,children:e}),r},update:(e,t)=>{o({type:"update",key:e,children:t})},unmount:e=>{o({type:"unmount",key:e})}}),[o]),c=useCallback(e=>{if(r.current=e,e){if(n.current.length>0){n.current.splice(0,n.current.length).forEach(t=>ao(e,t))}0===ah||ah===t.current?ah=t.current:"undefined"!=typeof __DEV__&&__DEV__&&console.warn("[PortalHost] Multiple PortalHost instances detected. Imperative APIs will only use the first mounted host.")}},[]);return useEffect(()=>()=>{ah===t.current&&(ah=0,n.current=[],portalStore.clear())},[]),useEffect(()=>{const e=TVE.addListener(AE,({key:e,children:r})=>{ah===t.current&&o({type:"mount",key:e,children:r})}),r=TVE.addListener(UE,({key:e,children:r})=>{ah===t.current&&o({type:"update",key:e,children:r})}),a=TVE.addListener(RE,({key:e})=>{ah===t.current&&o({type:"unmount",key:e})}),l=TVE.addListener(CE,()=>{ah===t.current&&(n.current=[],o({type:"clear"}))});return()=>{e.remove(),r.remove(),a.remove(),l.remove()}},[o]),React.createElement(PortalContext.Provider,{value:l},React.createElement(View,{style:S.h,collapsable:!1},React.createElement(View,{style:S.r,collapsable:!1,pointerEvents:"box-none"},e),React.createElement(PortalManagerView,{ref:c})))};export const PortalHost=React.memo(PortalHostImpl);PortalHost.displayName="PortalHost";const S=StyleSheet.create({h:{position:"relative",flex:1},r:{flex:1},pl:IW?{position:"fixed",top:0,left:0,right:0,bottom:0}:{...StyleSheet.absoluteFillObject},pe:{...StyleSheet.absoluteFillObject}});export const portalManager=gm;export const portalStore={clear:()=>{TVE.emit(CE)},hasHosts:()=>0!==ah};
1
+ import React,{useCallback,useEffect,useMemo,useRef,useState}from"react";import{DeviceEventEmitter,NativeEventEmitter,Platform,StyleSheet,View}from"react-native";import{isNumber}from"../../utils";import{PortalContext}from"./PortalContext";const AE="RNSU_PORTAL_ADD",UE="RNSU_PORTAL_UPDATE",RE="RNSU_PORTAL_REMOVE",CE="RNSU_PORTAL_CLEAR",TVE=DeviceEventEmitter||new NativeEventEmitter,IW="web"===Platform.OS,ao=(e,t)=>{"mount"===t.type?e.mount(t.children,t.key):"update"===t.type?e.update(t.key,t.children):"clear"===t.type?e.clear():e.unmount(t.key)},PortalManagerView=React.forwardRef((e,t)=>{const[r,n]=useState([]),a=useRef(0),o=useCallback(e=>{n(t=>{const r=t.findIndex(t=>t.key===e.key);return-1===r?[...t,e]:[...t.slice(0,r),e,...t.slice(r+1)]})},[]),l=useCallback((e,t)=>{const r=t??++a.current;return isNumber(t)&&t>=a.current&&(a.current=t+1),o({key:r,children:e}),r},[o]),c=useCallback((e,t)=>{o({key:e,children:t})},[o]),u=useCallback(e=>{n(t=>t.filter(t=>t.key!==e))},[]),s=useCallback(()=>{n([])},[]);return React.useImperativeHandle(t,()=>({mount:l,update:c,unmount:u,clear:s}),[l,c,u,s]),0===r.length?null:React.createElement(View,{pointerEvents:"box-none",style:S.pl,collapsable:!1},r.map(e=>React.createElement(View,{key:e.key,pointerEvents:"box-none",collapsable:!1,style:S.pe},e.children)))});let ah=0,nh=1,ngk=1e4;const hr=new Set,pickActiveHost=()=>{const e=hr.values().next();return e.done?0:e.value},gm={mount:(e,t)=>{"undefined"!=typeof __DEV__&&__DEV__&&0===ah&&console.warn("[Portal] Please mount <PortalHost> or <ConfigProvider> at the root to enable imperative APIs.");const r=t??ngk++;return isNumber(t)&&t>=ngk&&(ngk=t+1),TVE.emit(AE,{key:r,children:e}),r},update:(e,t)=>{TVE.emit(UE,{key:e,children:t})},unmount:e=>{TVE.emit(RE,{key:e})}},PortalHostImpl=({children:e})=>{const t=useRef(nh++),r=useRef(null),n=useRef([]),a=useRef(1),o=useCallback(e=>{const t=r.current;t?ao(t,e):n.current.push(e)},[]),l=useMemo(()=>({mount:(e,t)=>{const r=t??a.current++;return isNumber(t)&&t>=a.current&&(a.current=t+1),o({type:"mount",key:r,children:e}),r},update:(e,t)=>{o({type:"update",key:e,children:t})},unmount:e=>{o({type:"unmount",key:e})}}),[o]),c=useCallback(e=>{if(r.current=e,e){if(n.current.length>0){n.current.splice(0,n.current.length).forEach(t=>ao(e,t))}0===ah||ah===t.current?ah=t.current:"undefined"!=typeof __DEV__&&__DEV__&&console.warn("[PortalHost] Multiple PortalHost instances detected. Imperative APIs will only use the first mounted host.")}},[]);return useEffect(()=>(hr.add(t.current),0===ah&&(ah=t.current),()=>{hr.delete(t.current),ah===t.current&&(ah=pickActiveHost(),n.current=[],0===ah&&portalStore.clear())}),[]),useEffect(()=>{const e=TVE.addListener(AE,({key:e,children:r})=>{ah===t.current&&o({type:"mount",key:e,children:r})}),r=TVE.addListener(UE,({key:e,children:r})=>{ah===t.current&&o({type:"update",key:e,children:r})}),a=TVE.addListener(RE,({key:e})=>{ah===t.current&&o({type:"unmount",key:e})}),l=TVE.addListener(CE,()=>{ah===t.current&&(n.current=[],o({type:"clear"}))});return()=>{e.remove(),r.remove(),a.remove(),l.remove()}},[o]),React.createElement(PortalContext.Provider,{value:l},React.createElement(View,{style:S.h,collapsable:!1},React.createElement(View,{style:S.r,collapsable:!1,pointerEvents:"box-none"},e),React.createElement(PortalManagerView,{ref:c})))};export const PortalHost=React.memo(PortalHostImpl);PortalHost.displayName="PortalHost";const S=StyleSheet.create({h:{position:"relative",flex:1},r:{flex:1},pl:IW?{position:"fixed",top:0,left:0,right:0,bottom:0}:{...StyleSheet.absoluteFillObject},pe:{...StyleSheet.absoluteFillObject}});export const portalManager=gm;export const portalStore={clear:()=>{TVE.emit(CE)},hasHosts:()=>0!==ah};
@@ -1 +1 @@
1
- function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var r in a)({}).hasOwnProperty.call(a,r)&&(e[r]=a[r])}return e},_extends.apply(null,arguments)}import React,{useCallback,useImperativeHandle,useRef}from"react";import{Pressable,StyleSheet,Text,View}from"react-native";import{Search as SearchIcon}from"react-native-system-icon";import{useAriaPress,useControllableValue}from"../../hooks";import{isText}from"../../utils/validate";import{useLocale}from"../config-provider/useLocale";import Field from"../field";import{useSearchTokens}from"./tokens";const SearchComponent=(e,t)=>{const a=useLocale(),{tokensOverride:r,label:n,action:c,actionText:o,showAction:i=!1,shape:l,background:s,style:u,fieldStyle:d,fieldContentStyle:p,clearTrigger:g,clearable:f=!0,leftIcon:m,rightIcon:h,errorMessage:y,onSearch:b,onCancel:R,onChangeText:x,onSubmitEditing:V,returnKeyType:w,inputStyle:C,align:T,inputAlign:k,...E}=e,v=useSearchTokens(r),I=l??v.defaults.shape,[P,z]=useControllableValue(e,{defaultValue:""}),H=P??"",L=T??k,A=useRef(x),F=useRef(R),G=useRef(b),_=useRef(V),O=useRef(H);A.current=x,F.current=R,G.current=b,_.current=V,O.current=H;const W=useCallback(e=>{z(e),A.current?.(e)},[z]),j=useCallback(()=>{W(""),F.current?.()},[W]),D=useCallback(e=>{G.current?.(O.current),_.current?.(e)},[]),K=s??v.colors.background,M=m??React.createElement(SearchIcon,{size:v.icon.size,fill:v.colors.icon,color:v.colors.icon}),q=g??v.defaults.clearTrigger,B=w??"search",N=!!c||i,J=React.isValidElement(o),Q=N&&!c&&!J,U="round"===I?v.radius.round:v.radius.square,X=useRef(null);useImperativeHandle(t,()=>({focus:()=>X.current?.focus(),blur:()=>X.current?.blur(),clear:()=>W("")}),[W]);const Y=useAriaPress({disabled:!Q,onPress:j,extraProps:{accessibilityRole:"button",testID:"rnsu-search-action"}}),Z=[S.ctr,{paddingHorizontal:v.spacing.paddingHorizontal,paddingVertical:v.spacing.paddingVertical,backgroundColor:K},u],$=[S.cnt,{borderRadius:U,paddingHorizontal:v.spacing.contentPaddingHorizontal,paddingVertical:v.spacing.contentPaddingVertical,backgroundColor:v.colors.contentBackground}],ee=n?isText(n)?React.createElement(Text,{style:{marginRight:v.spacing.labelGap,color:v.colors.label,fontSize:v.typography.label,fontWeight:v.typography.labelWeight}},n):React.createElement(View,{style:{marginRight:v.spacing.labelGap}},n):null,te=c?React.createElement(View,{style:[S.act,{marginLeft:v.spacing.actionGap}]},c):N?J?React.createElement(View,{style:[S.act,{marginLeft:v.spacing.actionGap}]},o):React.createElement(Pressable,_extends({style:[S.act,{marginLeft:v.spacing.actionGap,opacity:Y.states.pressed?v.opacity.actionPressed:1}]},Y.interactionProps),React.createElement(Text,{style:{color:v.colors.action,fontSize:v.typography.action,fontWeight:v.typography.actionWeight}},o??a.cancel)):null;return React.createElement(View,{style:Z},React.createElement(View,{style:$},ee,React.createElement(View,{style:S.field},React.createElement(Field,_extends({ref:X,type:"search",value:H,onChangeText:W,clearable:f,clearTrigger:q,leftIcon:M,rightIcon:h,center:!y,errorMessage:y,inputAlign:L,border:!1,style:[{paddingHorizontal:v.spacing.none,paddingVertical:v.spacing.none},d],contentStyle:[{paddingVertical:v.spacing.none},p],inputStyle:[{paddingVertical:v.spacing.none},C],onSubmitEditing:D,returnKeyType:B},E)))),te)},SearchForwardRef=React.forwardRef(SearchComponent);SearchForwardRef.displayName="Search";export const Search=React.memo(SearchForwardRef);const S=StyleSheet.create({ctr:{flexDirection:"row",alignItems:"center"},cnt:{flex:1,flexDirection:"row",alignItems:"center"},field:{flex:1},act:{justifyContent:"center"}});export default Search;
1
+ function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var r in a)({}).hasOwnProperty.call(a,r)&&(e[r]=a[r])}return e},_extends.apply(null,arguments)}import React,{useCallback,useImperativeHandle,useRef}from"react";import{Pressable,StyleSheet,Text,View}from"react-native";import SearchIcon from"react-native-system-icon/Search";import{useAriaPress,useControllableValue}from"../../hooks";import{isText}from"../../utils/validate";import{useLocale}from"../config-provider/useLocale";import Field from"../field";import{useSearchTokens}from"./tokens";const SearchComponent=(e,t)=>{const a=useLocale(),{tokensOverride:r,label:n,action:c,actionText:o,showAction:i=!1,shape:l,background:s,style:u,fieldStyle:d,fieldContentStyle:p,clearTrigger:g,clearable:f=!0,leftIcon:m,rightIcon:h,errorMessage:y,onSearch:b,onCancel:R,onChangeText:x,onSubmitEditing:V,returnKeyType:w,inputStyle:C,align:T,inputAlign:k,...E}=e,v=useSearchTokens(r),I=l??v.defaults.shape,[P,z]=useControllableValue(e,{defaultValue:""}),H=P??"",L=T??k,A=useRef(x),F=useRef(R),G=useRef(b),_=useRef(V),O=useRef(H);A.current=x,F.current=R,G.current=b,_.current=V,O.current=H;const W=useCallback(e=>{z(e),A.current?.(e)},[z]),j=useCallback(()=>{W(""),F.current?.()},[W]),D=useCallback(e=>{G.current?.(O.current),_.current?.(e)},[]),K=s??v.colors.background,M=m??React.createElement(SearchIcon,{size:v.icon.size,fill:v.colors.icon,color:v.colors.icon}),q=g??v.defaults.clearTrigger,B=w??"search",N=!!c||i,J=React.isValidElement(o),Q=N&&!c&&!J,U="round"===I?v.radius.round:v.radius.square,X=useRef(null);useImperativeHandle(t,()=>({focus:()=>X.current?.focus(),blur:()=>X.current?.blur(),clear:()=>W("")}),[W]);const Y=useAriaPress({disabled:!Q,onPress:j,extraProps:{accessibilityRole:"button",testID:"rnsu-search-action"}}),Z=[S.ctr,{paddingHorizontal:v.spacing.paddingHorizontal,paddingVertical:v.spacing.paddingVertical,backgroundColor:K},u],$=[S.cnt,{borderRadius:U,paddingHorizontal:v.spacing.contentPaddingHorizontal,paddingVertical:v.spacing.contentPaddingVertical,backgroundColor:v.colors.contentBackground}],ee=n?isText(n)?React.createElement(Text,{style:{marginRight:v.spacing.labelGap,color:v.colors.label,fontSize:v.typography.label,fontWeight:v.typography.labelWeight}},n):React.createElement(View,{style:{marginRight:v.spacing.labelGap}},n):null,te=c?React.createElement(View,{style:[S.act,{marginLeft:v.spacing.actionGap}]},c):N?J?React.createElement(View,{style:[S.act,{marginLeft:v.spacing.actionGap}]},o):React.createElement(Pressable,_extends({style:[S.act,{marginLeft:v.spacing.actionGap,opacity:Y.states.pressed?v.opacity.actionPressed:1}]},Y.interactionProps),React.createElement(Text,{style:{color:v.colors.action,fontSize:v.typography.action,fontWeight:v.typography.actionWeight}},o??a.cancel)):null;return React.createElement(View,{style:Z},React.createElement(View,{style:$},ee,React.createElement(View,{style:S.field},React.createElement(Field,_extends({ref:X,type:"search",value:H,onChangeText:W,clearable:f,clearTrigger:q,leftIcon:M,rightIcon:h,center:!y,errorMessage:y,inputAlign:L,border:!1,style:[{paddingHorizontal:v.spacing.none,paddingVertical:v.spacing.none},d],contentStyle:[{paddingVertical:v.spacing.none},p],inputStyle:[{paddingVertical:v.spacing.none},C],onSubmitEditing:D,returnKeyType:B},E)))),te)},SearchForwardRef=React.forwardRef(SearchComponent);SearchForwardRef.displayName="Search";export const Search=React.memo(SearchForwardRef);const S=StyleSheet.create({ctr:{flexDirection:"row",alignItems:"center"},cnt:{flex:1,flexDirection:"row",alignItems:"center"},field:{flex:1},act:{justifyContent:"center"}});export default Search;
@@ -1 +1 @@
1
- function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var o=arguments[t];for(var l in o)({}).hasOwnProperty.call(o,l)&&(e[l]=o[l])}return e},_extends.apply(null,arguments)}import React,{useCallback,useMemo}from"react";import{Pressable,Text,View}from"react-native";import{useSelectorTokens}from"./tokens";import{useAriaPress,useControllableValue}from"../../hooks";import{isText}from"../../utils";const CHECK_MARK="✓",CH=8,CW=10,SelectorOptionItemImpl=({option:e,active:t,disabled:o,multiple:l,showCheckMark:a,basis:i,containerWidth:r,columns:s,gap:c,tokens:n,itemStyle:d,labelStyle:p,descriptionStyle:m,onToggle:u})=>{const y=e.label,b=e.description,g=null!=b,h=isText(y)?String(y):String(e.value),S=isText(b)?String(b):void 0,{interactionProps:f,states:k}=useAriaPress({disabled:o,onPress:()=>u(e),extraProps:{accessibilityRole:l?"checkbox":"radio",accessibilityLabel:h,accessibilityHint:S,accessibilityState:l?{checked:t,disabled:o}:{selected:t,disabled:o}}}),x=r>0?{width:(r-(s-1)*c)/s,flexGrow:0,flexShrink:0}:{flexBasis:i,flexShrink:1};return React.createElement(Pressable,_extends({},f,{style:[n.layout.pressable,x]}),React.createElement(View,{style:[n.layout.item,{paddingHorizontal:n.spacing.paddingHorizontal,paddingVertical:n.spacing.paddingVertical,borderRadius:n.radii.item,borderColor:t?n.colors.borderActive:n.colors.border,backgroundColor:t?n.colors.backgroundActive:n.colors.background,opacity:o?n.states.disabledOpacity:1},k.pressed&&{opacity:.9},d]},isText(y)?React.createElement(Text,{style:[n.layout.label,{color:t?n.colors.textActive:n.colors.text,fontSize:n.typography.fontSize,lineHeight:1.4*n.typography.fontSize,fontFamily:n.typography.fontFamily,fontWeight:n.typography.fontWeight},p]},y):y,g?isText(b)?React.createElement(Text,{style:[n.layout.description,{marginTop:n.spacing.descriptionMarginTop,color:o?n.colors.disabledText:n.colors.description,fontSize:n.typography.descriptionSize,lineHeight:1.4*n.typography.descriptionSize},m]},b):React.createElement(View,{style:{marginTop:n.spacing.descriptionMarginTop}},b):null,t&&a?React.createElement(React.Fragment,null,React.createElement(View,{style:[n.layout.checkMarkTriangle,{borderTopWidth:8,borderBottomWidth:8,borderLeftWidth:10,borderRightWidth:10,borderBottomColor:n.colors.check,borderRightColor:n.colors.check}]}),React.createElement(Text,{style:[n.layout.checkMark,{color:n.colors.checkForeground}]},"✓")):null))},SelectorOptionItemMemo=React.memo(SelectorOptionItemImpl);SelectorOptionItemMemo.displayName="SelectorOptionItem";const SelectorOptionItem=SelectorOptionItemMemo,SelectorImpl=e=>{const{tokensOverride:t,options:o,columns:l,multiple:a,showCheckMark:i,disabled:r,onChange:s,itemStyle:c,labelStyle:n,descriptionStyle:d,style:p,onLayout:m,...u}=e,y=useSelectorTokens(t),[b,g]=React.useState(0),h=l??y.defaults.columns??1,S=a??y.defaults.multiple,f=i??y.defaults.showCheckMark,k=Boolean(r??y.defaults.disabled),[x=[],v]=useControllableValue(e,{defaultValue:[]}),R=useMemo(()=>{const e=new Map;for(const t of o)e.set(t.value,t);return e},[o]),T=Math.max(1,Math.floor(h)),C=100/T+"%",M=y.spacing.gap,w=useMemo(()=>new Set(x),[x]),O=useCallback(e=>{if(k||e.disabled)return;const t=w.has(e.value),o=S?t?x.filter(t=>t!==e.value):[...x,e.value]:t?[]:[e.value];v(o,{items:o.map(e=>R.get(e)).filter(Boolean)})},[k,S,R,w,v,x]),E=useCallback(e=>{g(e.nativeEvent.layout.width),m?.(e)},[m]);return React.createElement(View,_extends({},u,{onLayout:E,style:[y.layout.container,{columnGap:M,rowGap:M},p],accessibilityRole:S?void 0:"radiogroup"}),o.map(e=>React.createElement(SelectorOptionItem,{key:String(e.value),option:e,active:w.has(e.value),disabled:k||Boolean(e.disabled),multiple:S,showCheckMark:f,basis:C,containerWidth:b,columns:T,gap:M,tokens:y,itemStyle:c,labelStyle:n,descriptionStyle:d,onToggle:O})))};export const Selector=React.memo(SelectorImpl);Selector.displayName="Selector";export default Selector;
1
+ function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var o=arguments[t];for(var l in o)({}).hasOwnProperty.call(o,l)&&(e[l]=o[l])}return e},_extends.apply(null,arguments)}import React,{useCallback,useMemo}from"react";import{Pressable,Text,View}from"react-native";import{useSelectorTokens}from"./tokens";import{useAriaPress,useControllableValue}from"../../hooks";import{isText}from"../../utils";const CHECK_MARK="✓",CH=8,CW=10,SelectorOptionItemImpl=({option:e,active:t,disabled:o,multiple:l,showCheckMark:a,basis:r,containerWidth:i,columns:s,gap:c,tokens:n,itemStyle:d,labelStyle:p,descriptionStyle:m,onToggle:u})=>{const y=e.label,b=e.description,g=null!=b,h=isText(y)?String(y):String(e.value),S=isText(b)?String(b):void 0,{interactionProps:f,states:k}=useAriaPress({disabled:o,onPress:()=>u(e),extraProps:{accessibilityRole:l?"checkbox":"radio",accessibilityLabel:h,accessibilityHint:S,accessibilityState:l?{checked:t,disabled:o}:{selected:t,disabled:o}}}),x=i>0?{width:(i-(s-1)*c)/s,flexGrow:0,flexShrink:0}:{flexBasis:r,flexShrink:1};return React.createElement(Pressable,_extends({},f,{style:[n.layout.pressable,x]}),React.createElement(View,{style:[n.layout.item,{paddingHorizontal:n.spacing.paddingHorizontal,paddingVertical:n.spacing.paddingVertical,borderRadius:n.radii.item,borderColor:t?n.colors.borderActive:n.colors.border,backgroundColor:t?n.colors.backgroundActive:n.colors.background,opacity:o?n.states.disabledOpacity:1},k.pressed&&{opacity:.9},d]},isText(y)?React.createElement(Text,{style:[n.layout.label,{color:t?n.colors.textActive:n.colors.text,fontSize:n.typography.fontSize,lineHeight:1.4*n.typography.fontSize,fontFamily:n.typography.fontFamily,fontWeight:n.typography.fontWeight},p]},y):y,g?isText(b)?React.createElement(Text,{style:[n.layout.description,{marginTop:n.spacing.descriptionMarginTop,color:o?n.colors.disabledText:n.colors.description,fontSize:n.typography.descriptionSize,lineHeight:1.4*n.typography.descriptionSize},m]},b):React.createElement(View,{style:{marginTop:n.spacing.descriptionMarginTop}},b):null,t&&a?React.createElement(React.Fragment,null,React.createElement(View,{style:[n.layout.checkMarkTriangle,{borderTopWidth:8,borderBottomWidth:8,borderLeftWidth:10,borderRightWidth:10,borderBottomColor:n.colors.check,borderRightColor:n.colors.check}]}),React.createElement(Text,{style:[n.layout.checkMark,{color:n.colors.checkForeground}]},"✓")):null))},SelectorOptionItemMemo=React.memo(SelectorOptionItemImpl);SelectorOptionItemMemo.displayName="SelectorOptionItem";const SelectorOptionItem=SelectorOptionItemMemo,SelectorImpl=e=>{const{tokensOverride:t,options:o,columns:l,multiple:a,showCheckMark:r,disabled:i,onChange:s,itemStyle:c,labelStyle:n,descriptionStyle:d,style:p,onLayout:m,...u}=e,y=Array.isArray(o)?o:[],b=useSelectorTokens(t),[g,h]=React.useState(0),S=l??b.defaults.columns??1,f=a??b.defaults.multiple,k=r??b.defaults.showCheckMark,x=Boolean(i??b.defaults.disabled),[v=[],R]=useControllableValue(e,{defaultValue:[]}),T=useMemo(()=>{const e=new Map;for(const t of y)e.set(t.value,t);return e},[y]),C=Math.max(1,Math.floor(S)),M=100/C+"%",w=b.spacing.gap,O=useMemo(()=>new Set(v),[v]),E=useCallback(e=>{if(x||e.disabled)return;const t=O.has(e.value),o=f?t?v.filter(t=>t!==e.value):[...v,e.value]:t?[]:[e.value];R(o,{items:o.map(e=>T.get(e)).filter(Boolean)})},[x,f,T,O,R,v]),I=useCallback(e=>{h(e.nativeEvent.layout.width),m?.(e)},[m]);return React.createElement(View,_extends({},u,{onLayout:I,style:[b.layout.container,{columnGap:w,rowGap:w},p],accessibilityRole:f?void 0:"radiogroup"}),y.map(e=>React.createElement(SelectorOptionItem,{key:String(e.value),option:e,active:O.has(e.value),disabled:x||Boolean(e.disabled),multiple:f,showCheckMark:k,basis:M,containerWidth:g,columns:C,gap:w,tokens:b,itemStyle:c,labelStyle:n,descriptionStyle:d,onToggle:E})))};export const Selector=React.memo(SelectorImpl);Selector.displayName="Selector";export default Selector;
@@ -1 +1 @@
1
- function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},_extends.apply(null,arguments)}import{useSlider,useSliderThumb}from"@react-native-aria/slider";import{isRTL}from"@react-native-aria/utils";import{useSliderState}from"@react-stately/slider";import React,{useCallback,useEffect,useMemo,useRef,useState}from"react";import{Platform,Pressable,StyleSheet,View}from"react-native";import{useSliderTokens}from"./tokens";import{parseNumber}from"../../utils/number";import{createHairlineView}from"../../utils/hairline";import{clamp,renderTextOrNode}from"../../utils";import{isFunction,isFiniteNumber,isText}from"../../utils/validate";import{useAriaPress}from"../../hooks";const isSameLayout=(e,t)=>e.width===t.width&&e.height===t.height&&e.x===t.x&&e.y===t.y,normalizeValue=(e,t,r,n)=>t?(()=>{const t=Array.isArray(e)?e:isFiniteNumber(e)?[r,e]:[r,r],i=isFiniteNumber(t[0])?clamp(t[0],r,n):r,a=isFiniteNumber(t[1]??t[0])?clamp(t[1]??t[0],r,n):r;return i<=a?[i,a]:[a,i]})():(()=>{const t=Array.isArray(e)?e[0]:e;return[isFiniteNumber(t)?clamp(t,r,n):r]})(),toSliderValue=(e,t,r)=>t?[e[0]??r,e[1]??e[0]??r]:e[0]??r,createAccessibilityProps=e=>e?(()=>{const{role:t,"aria-value":r,accessibilityActions:n,onAccessibilityAction:i,disabled:a}=e;return{accessible:!0,accessibilityRole:t??"adjustable",accessibilityValue:r,accessibilityActions:n,onAccessibilityAction:i,accessibilityState:{disabled:a}}})():{},defaultNumberFormatter="undefined"!=typeof Intl&&isFunction(Intl.NumberFormat)?new Intl.NumberFormat:{format:e=>String(e)},START_KEYS=["onResponderGrant","onPanResponderGrant"],MOVE_KEYS=["onResponderMove","onPanResponderMove"],END_KEYS=["onResponderRelease","onResponderTerminate","onPanResponderRelease","onPanResponderTerminate"],useTrackLayout=()=>{const e=useRef(null),t=useRef(null),[r,n]=useState({width:0,height:0,x:0,y:0}),i=useCallback(r=>{const{layout:i}=r.nativeEvent,a={width:Math.max(i.width,1),height:Math.max(i.height,1),x:i.x??0,y:i.y??0};n(e=>isSameLayout(e,a)?e:a),"web"===Platform.OS&&"undefined"!=typeof requestAnimationFrame&&null==t.current&&(t.current=requestAnimationFrame(()=>{t.current=null;const r=e.current;r?.measureInWindow&&r.measureInWindow((e,t,r,i)=>{const a={width:Math.max(r,1),height:Math.max(i,1),x:e,y:t};n(e=>isSameLayout(e,a)?e:a)})}))},[]);return useEffect(()=>()=>{null!=t.current&&"function"==typeof cancelAnimationFrame&&cancelAnimationFrame(t.current),t.current=null},[]),{trackRef:e,trackLayout:r,handleTrackLayout:i}},ThumbNode=React.memo(({index:e,orientation:t,ariaReverse:r,trackLayout:n,isDisabled:i,state:a,size:o,activeColor:s,content:u,visualPercent:c,thumbBackgroundColor:l,thumbElevation:m,indicatorSize:d,indicatorColor:h,webGestureStyle:b,enhanceHandlers:f})=>{const p=useRef(null),{thumbProps:v,inputProps:y}=useSliderThumb({index:e,trackLayout:n,inputRef:p,isDisabled:i,orientation:t},a,r),g=v,R=f(g,e)??g??{},w=-o/2,x={width:o,height:o,borderRadius:o/2,borderColor:s,transform:[{translateX:w},{translateY:w}],..."vertical"===t?{top:`${c}%`,left:"50%"}:{left:`${c}%`,top:"50%"},...u?{}:{backgroundColor:l,elevation:m}},k={width:d,height:d,borderRadius:d/2,backgroundColor:h},E=createAccessibilityProps(y);return React.createElement(View,_extends({},R,E,{pointerEvents:i?"none":"auto",style:[u?S.thw:S.t,b,x]}),null!=u?isText(u)?renderTextOrNode(u,[]):u:React.createElement(View,{style:k}),!u&&React.createElement(View,{style:createHairlineView({position:"all",color:s,borderRadius:o/2})}))});ThumbNode.displayName="ThumbNode";const SliderImpl=e=>{const{value:t,min:r=0,max:n=100,step:i=1,range:a=!1,vertical:o=!1,reverse:s=!1,disabled:u=!1,readOnly:c=!1,activeColor:l,inactiveColor:m,barHeight:d,trackHeight:h,buttonSize:b,thumbSize:f,tokensOverride:p,button:v,leftButton:y,rightButton:g,thumb:R,leftThumb:w,rightThumb:x,ariaLabel:k,onChange:E,onChangeAfter:F,onDragStart:M,onDragEnd:C,style:T,onLayout:A,...N}=e,V=useSliderTokens(p),P=o?"vertical":"horizontal",{trackRef:z,trackLayout:L,handleTrackLayout:_}=useTrackLayout(),D=parseNumber(r,0),O=parseNumber(n,100),I=parseNumber(i,1),Y=I>0?I:1,K=Math.max(0,parseNumber(d??h,V.track.height)),j=Math.max(0,parseNumber(b??f,V.thumb.size)),H=u||c,$=l??V.colors.active,B=m??V.colors.inactive,q=Math.max(O-D,1e-5),G=normalizeValue(t,a,D,O),W=void 0!==t,X=useRef(E),J=useRef(F),Q=useRef(M),U=useRef(C);X.current=E,J.current=F,Q.current=M,U.current=C;const Z=useCallback(e=>toSliderValue(e,a,D),[a,D]),ee=useCallback(e=>{X.current?.(Z(e))},[Z]),te=useCallback(e=>{J.current?.(Z(e))},[Z]),re=useMemo(()=>({minValue:D,maxValue:O,step:Y,isDisabled:H,numberFormatter:defaultNumberFormatter,orientation:P,value:W?G:void 0,defaultValue:W?void 0:G,onChange:ee,onChangeEnd:te}),[H,ee,te,W,G,P,O,D,Y]),ne=useSliderState(re),ie="horizontal"===P?s||isRTL():s,ae="horizontal"===P?ie:s,{trackProps:oe}=useSlider({orientation:P,isDisabled:H,"aria-label":k??"Slider"},ne,L,ae),se=oe,{style:ue,onLayout:ce,...le}=se,me=useCallback(e=>{_(e),ce?.(e)},[_,ce]),de=useCallback(e=>{if(H)return;if(!ne.values.every((e,t)=>!ne.isThumbDragging(t)))return;const{locationX:t,locationY:r,pageX:n,pageY:i}=e.nativeEvent,a=isFiniteNumber(t)?t:isFiniteNumber(n)?n-(L.x??0):0,o=isFiniteNumber(r)?r:isFiniteNumber(i)?i-(L.y??0):0,u="vertical"===P?L.height:L.width,c=("vertical"===P?o:a)/Math.max(u,1),l="vertical"===P?s?c:1-c:ie?1-c:c,m=ne.getPercentValue(Math.min(1,Math.max(0,l))),d=ne.values.reduce((e,t,r)=>Math.abs(t-m)<Math.abs(ne.values[e]-m)?r:e,0);d>=0&&ne.isThumbEditable(d)&&(e.preventDefault?.(),ne.setFocusedThumb(d),ne.setThumbDragging(d,!0),ne.setThumbValue(d,m),ne.setThumbDragging(d,!1))},[H,P,s,ie,ne,L.height,L.width,L.x,L.y]),{interactionProps:he}=useAriaPress({disabled:H,onPress:de,extraProps:le}),be=Z(ne.values),fe=useRef(be),pe=useRef([]),ve=useRef([]),ye=useRef([]),ge=useRef([]),Se=useRef(new WeakMap);fe.current=be,useEffect(()=>()=>{const e="function"==typeof cancelAnimationFrame?cancelAnimationFrame:void 0;if(e){for(const t of ye.current)null!=t&&e(t);ye.current=[],ge.current=[]}},[]);const Re=useCallback((e,t)=>{if(!e)return e;if(!Q.current&&!U.current)return e;const r=Se.current.get(e),n=r?.get(t);if(n)return n;if(!(START_KEYS.some(t=>isFunction(e[t]))||MOVE_KEYS.some(t=>isFunction(e[t]))||END_KEYS.some(t=>isFunction(e[t]))))return e;const i={...e},a="function"==typeof requestAnimationFrame?requestAnimationFrame:void 0,o="function"==typeof cancelAnimationFrame?cancelAnimationFrame:void 0;for(const e of MOVE_KEYS){const r=i[e];if(!isFunction(r))continue;const n=r;i[e]=(...e)=>{a?(ge.current[t]=e,null==ye.current[t]&&(ye.current[t]=a(()=>{ye.current[t]=null;const e=ge.current[t];e&&(ge.current[t]=null,n(...e))}))):n(...e)}}const s=(e,t)=>{if(!t)return;const r=i[e];i[e]=(...e)=>{isFunction(r)&&r(...e),t(e[0])}},u=(e,t)=>{if(!t)return;const r=i[e];i[e]=(...e)=>{t(e[0]),isFunction(r)&&r(...e)}};for(const e of START_KEYS)s(e,()=>{pe.current[t]=!1,ve.current[t]=fe.current});for(const e of MOVE_KEYS)u(e,e=>{pe.current[t]||(pe.current[t]=!0,Q.current?.(e,ve.current[t]??fe.current))});const c=e=>{pe.current[t]&&(pe.current[t]=!1,ve.current[t]=void 0,U.current?.(e,fe.current));const r=ye.current[t];null!=r&&o&&(o(r),ye.current[t]=null),ge.current[t]=null};for(const e of END_KEYS)s(e,c);const l=r??new Map;return l.set(t,i),r||Se.current.set(e,l),i},[]),we=ne.values,xe=useMemo(()=>we.map(e=>((e??D)-D)/q*100),[D,q,we]),ke=useMemo(()=>xe.map(e=>"vertical"===P?s?e:100-e:ie?100-e:e),[P,s,ie,xe]),Ee=useMemo(()=>{const e=ke[0]??0,t=ke[1]??e;return a&&ke.length>1?{offset:Math.min(e,t),size:Math.max(e,t)-Math.min(e,t)}:("horizontal"===P?!ie:s)?{offset:0,size:e}:{offset:e,size:100-e}},[P,a,s,ie,ke]),{track:{radius:Fe}}=V,Me=useMemo(()=>({backgroundColor:$,borderRadius:Fe,..."vertical"===P?{left:0,width:"100%",height:`${Math.max(Ee.size,0)}%`,top:`${Math.max(Ee.offset,0)}%`}:{top:0,height:"100%",width:`${Math.max(Ee.size,0)}%`,left:`${Math.max(Ee.offset,0)}%`}}),[Ee.offset,Ee.size,P,$,Fe]),Ce=useMemo(()=>"vertical"===P?[S.tv,{width:K,backgroundColor:B,alignSelf:"center"}]:[S.th,{height:K,backgroundColor:B}],[P,B,K]),Te=isFunction(v)?v({value:be}):v??R,Ae=y??w??Te,Ne=g??x??Te,Ve=useCallback((e,t)=>t>1?0===e?Ae:Ne:Te,[Ae,Ne,Te]),Pe="web"===Platform.OS?{touchAction:"horizontal"===P?"pan-y":"pan-x",userSelect:"none"}:void 0,ze=[S.tp,"vertical"===P?S.tpv:null,Pe],Le=useCallback(e=>[ze,ue(e)],[ze,ue]),_e=ue&&isFunction(ue)?Le:[ze,ue],{spacing:{containerPaddingVertical:De},layout:{verticalMinHeight:Oe,verticalWidth:Ie},states:{disabledOpacity:Ye}}=V,Ke=[S.c,{paddingVertical:De},"vertical"===P&&[S.vc,{minHeight:Oe,width:Ie}],u&&{opacity:Ye},T];return React.createElement(View,_extends({style:Ke,onLayout:A},N),React.createElement(View,{style:[S.tw,"vertical"===P&&S.twv]},React.createElement(Pressable,_extends({ref:z},he,{disabled:H,onLayout:me,style:_e}),React.createElement(View,{style:[S.tb,{borderRadius:Fe},...Ce]},React.createElement(View,{style:[S.a,Me]}))),we.map((e,t)=>React.createElement(ThumbNode,{key:`thumb-${t}`,index:t,orientation:P,ariaReverse:ae,trackLayout:L,isDisabled:H,state:ne,size:j,activeColor:$,content:Ve(t,we.length),visualPercent:ke[t]??0,thumbBackgroundColor:V.colors.thumbBackground,thumbElevation:V.thumb.elevation,indicatorSize:V.thumb.indicatorSize,indicatorColor:V.colors.thumbIndicator,webGestureStyle:Pe,enhanceHandlers:Re}))))},S=StyleSheet.create({c:{position:"relative",justifyContent:"center",width:"100%"},vc:{height:"100%",alignItems:"center",paddingVertical:0},tw:{width:"100%",justifyContent:"center",position:"relative"},twv:{flex:1,justifyContent:"center",alignItems:"center",width:"100%"},tp:{width:"100%",justifyContent:"center"},tpv:{flex:1,alignItems:"center"},tb:{overflow:"hidden",position:"relative"},th:{width:"100%"},tv:{height:"100%"},a:{position:"absolute"},t:{position:"absolute",alignItems:"center",justifyContent:"center"},thw:{position:"absolute",alignItems:"center",justifyContent:"center"}});export const Slider=React.memo(SliderImpl);export default Slider;
1
+ function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var i in r)({}).hasOwnProperty.call(r,i)&&(e[i]=r[i])}return e},_extends.apply(null,arguments)}import{useSlider,useSliderThumb}from"@react-native-aria/slider";import{isRTL}from"@react-native-aria/utils";import{useSliderState}from"@react-stately/slider";import React,{useCallback,useEffect,useMemo,useRef}from"react";import{Platform,Pressable,StyleSheet,View}from"react-native";import{useSliderTokens}from"./tokens";import{parseNumber}from"../../utils/number";import{createHairlineView}from"../../utils/hairline";import{renderTextOrNode}from"../../utils";import{isFunction,isFiniteNumber,isText}from"../../utils/validate";import{useAriaPress}from"../../hooks";import{createAccessibilityProps,defaultNumberFormatter,END_KEYS,MOVE_KEYS,normalizeValue,START_KEYS,toSliderValue,useTrackLayout}from"../../hooks/slider/utils";const ThumbNode=React.memo(({index:e,orientation:t,ariaReverse:r,trackLayout:i,isDisabled:n,state:a,size:o,activeColor:s,content:u,visualPercent:l,thumbBackgroundColor:c,thumbElevation:m,indicatorSize:d,indicatorColor:h,webGestureStyle:f,enhanceHandlers:b})=>{const p=useRef(null),{thumbProps:v,inputProps:g}=useSliderThumb({index:e,trackLayout:i,inputRef:p,isDisabled:n,orientation:t},a,r),y=v,R=b(y,e)??y??{},k=-o/2,w={width:o,height:o,borderRadius:o/2,borderColor:s,transform:[{translateX:k},{translateY:k}],..."vertical"===t?{top:`${l}%`,left:"50%"}:{left:`${l}%`,top:"50%"},...u?{}:{backgroundColor:c,elevation:m}},E={width:d,height:d,borderRadius:d/2,backgroundColor:h},x=createAccessibilityProps(g);return React.createElement(View,_extends({},R,x,{pointerEvents:n?"none":"auto",style:[u?S.thw:S.t,f,w]}),null!=u?isText(u)?renderTextOrNode(u,[]):u:React.createElement(View,{style:E}),!u&&React.createElement(View,{style:createHairlineView({position:"all",color:s,borderRadius:o/2})}))});ThumbNode.displayName="ThumbNode";const SliderImpl=e=>{const{value:t,min:r=0,max:i=100,step:n=1,range:a=!1,vertical:o=!1,reverse:s=!1,disabled:u=!1,readOnly:l=!1,activeColor:c,inactiveColor:m,barHeight:d,trackHeight:h,buttonSize:f,thumbSize:b,tokensOverride:p,button:v,leftButton:g,rightButton:y,thumb:R,leftThumb:k,rightThumb:w,ariaLabel:E,onChange:x,onChangeAfter:C,onDragStart:T,onDragEnd:M,style:V,onLayout:F,...N}=e,z=useSliderTokens(p),P=o?"vertical":"horizontal",{trackRef:_,trackLayout:A,handleTrackLayout:D}=useTrackLayout(),L=parseNumber(r,0),O=parseNumber(i,100),Y=parseNumber(n,1),K=Y>0?Y:1,j=Math.max(0,parseNumber(d??h,z.track.height)),H=Math.max(0,parseNumber(f??b,z.thumb.size)),I=u||l,$=c??z.colors.active,B=m??z.colors.inactive,X=Math.max(O-L,1e-5),q=normalizeValue(t,a,L,O),G=void 0!==t,W=useRef(x),J=useRef(C),Q=useRef(T),U=useRef(M);W.current=x,J.current=C,Q.current=T,U.current=M;const Z=useCallback(e=>toSliderValue(e,a,L),[a,L]),ee=useCallback(e=>{W.current?.(Z(e))},[Z]),te=useCallback(e=>{J.current?.(Z(e))},[Z]),re=useMemo(()=>({minValue:L,maxValue:O,step:K,isDisabled:I,numberFormatter:defaultNumberFormatter,orientation:P,value:G?q:void 0,defaultValue:G?void 0:q,onChange:ee,onChangeEnd:te}),[I,ee,te,G,q,P,O,L,K]),ie=useSliderState(re),ne="horizontal"===P?s||isRTL():s,ae="horizontal"===P?ne:s,{trackProps:oe}=useSlider({orientation:P,isDisabled:I,"aria-label":E??"Slider"},ie,A,ae),se=oe,{style:ue,onLayout:le,...ce}=se,me=useCallback(e=>{D(e),le?.(e)},[D,le]),de=useCallback(e=>{if(I)return;if(!ie.values.every((e,t)=>!ie.isThumbDragging(t)))return;const{locationX:t,locationY:r,pageX:i,pageY:n}=e.nativeEvent,a=isFiniteNumber(t)?t:isFiniteNumber(i)?i-(A.x??0):0,o=isFiniteNumber(r)?r:isFiniteNumber(n)?n-(A.y??0):0,u="vertical"===P?A.height:A.width,l=("vertical"===P?o:a)/Math.max(u,1),c="vertical"===P?s?l:1-l:ne?1-l:l,m=ie.getPercentValue(Math.min(1,Math.max(0,c))),d=ie.values.reduce((e,t,r)=>Math.abs(t-m)<Math.abs(ie.values[e]-m)?r:e,0);d>=0&&ie.isThumbEditable(d)&&(e.preventDefault?.(),ie.setFocusedThumb(d),ie.setThumbDragging(d,!0),ie.setThumbValue(d,m),ie.setThumbDragging(d,!1))},[I,P,s,ne,ie,A.height,A.width,A.x,A.y]),{interactionProps:he}=useAriaPress({disabled:I,onPress:de,extraProps:ce}),fe=Z(ie.values),be=useRef(fe),pe=useRef([]),ve=useRef([]),ge=useRef([]),Se=useRef([]),ye=useRef(new WeakMap);be.current=fe,useEffect(()=>()=>{const e="function"==typeof cancelAnimationFrame?cancelAnimationFrame:void 0;if(e){for(const t of ge.current)null!=t&&e(t);ge.current=[],Se.current=[]}},[]);const Re=useCallback((e,t)=>{if(!e)return e;if(!Q.current&&!U.current)return e;const r=ye.current.get(e),i=r?.get(t);if(i)return i;if(!(START_KEYS.some(t=>isFunction(e[t]))||MOVE_KEYS.some(t=>isFunction(e[t]))||END_KEYS.some(t=>isFunction(e[t]))))return e;const n={...e},a="function"==typeof requestAnimationFrame?requestAnimationFrame:void 0,o="function"==typeof cancelAnimationFrame?cancelAnimationFrame:void 0;for(const e of MOVE_KEYS){const r=n[e];if(!isFunction(r))continue;const i=r;n[e]=(...e)=>{a?(Se.current[t]=e,null==ge.current[t]&&(ge.current[t]=a(()=>{ge.current[t]=null;const e=Se.current[t];e&&(Se.current[t]=null,i(...e))}))):i(...e)}}const s=(e,t)=>{if(!t)return;const r=n[e];n[e]=(...e)=>{isFunction(r)&&r(...e),t(e[0])}},u=(e,t)=>{if(!t)return;const r=n[e];n[e]=(...e)=>{t(e[0]),isFunction(r)&&r(...e)}};for(const e of START_KEYS)s(e,()=>{pe.current[t]=!1,ve.current[t]=be.current});for(const e of MOVE_KEYS)u(e,e=>{pe.current[t]||(pe.current[t]=!0,Q.current?.(e,ve.current[t]??be.current))});const l=e=>{pe.current[t]&&(pe.current[t]=!1,ve.current[t]=void 0,U.current?.(e,be.current));const r=ge.current[t];null!=r&&o&&(o(r),ge.current[t]=null),Se.current[t]=null};for(const e of END_KEYS)s(e,l);const c=r??new Map;return c.set(t,n),r||ye.current.set(e,c),n},[]),ke=ie.values,we=useMemo(()=>ke.map(e=>((e??L)-L)/X*100),[L,X,ke]),Ee=useMemo(()=>we.map(e=>"vertical"===P?s?e:100-e:ne?100-e:e),[P,s,ne,we]),xe=useMemo(()=>{const e=Ee[0]??0,t=Ee[1]??e;return a&&Ee.length>1?{offset:Math.min(e,t),size:Math.max(e,t)-Math.min(e,t)}:("horizontal"===P?!ne:s)?{offset:0,size:e}:{offset:e,size:100-e}},[P,a,s,ne,Ee]),{track:{radius:Ce}}=z,Te=useMemo(()=>({backgroundColor:$,borderRadius:Ce,..."vertical"===P?{left:0,width:"100%",height:`${Math.max(xe.size,0)}%`,top:`${Math.max(xe.offset,0)}%`}:{top:0,height:"100%",width:`${Math.max(xe.size,0)}%`,left:`${Math.max(xe.offset,0)}%`}}),[xe.offset,xe.size,P,$,Ce]),Me=useMemo(()=>"vertical"===P?[S.tv,{width:j,backgroundColor:B,alignSelf:"center"}]:[S.th,{height:j,backgroundColor:B}],[P,B,j]),Ve=isFunction(v)?v({value:fe}):v??R,Fe=g??k??Ve,Ne=y??w??Ve,ze=useCallback((e,t)=>t>1?0===e?Fe:Ne:Ve,[Fe,Ne,Ve]),Pe="web"===Platform.OS?{touchAction:"horizontal"===P?"pan-y":"pan-x",userSelect:"none"}:void 0,_e=[S.tp,"vertical"===P?S.tpv:null,Pe],Ae=useCallback(e=>[_e,ue(e)],[_e,ue]),De=ue&&isFunction(ue)?Ae:[_e,ue],{spacing:{containerPaddingVertical:Le},layout:{verticalMinHeight:Oe,verticalWidth:Ye},states:{disabledOpacity:Ke}}=z,je=[S.c,{paddingVertical:Le},"vertical"===P&&[S.vc,{minHeight:Oe,width:Ye}],u&&{opacity:Ke},V];return React.createElement(View,_extends({style:je,onLayout:F},N),React.createElement(View,{style:[S.tw,"vertical"===P&&S.twv]},React.createElement(Pressable,_extends({ref:_},he,{disabled:I,onLayout:me,style:De}),React.createElement(View,{style:[S.tb,{borderRadius:Ce},...Me]},React.createElement(View,{style:[S.a,Te]}))),ke.map((e,t)=>React.createElement(ThumbNode,{key:`thumb-${t}`,index:t,orientation:P,ariaReverse:ae,trackLayout:A,isDisabled:I,state:ie,size:H,activeColor:$,content:ze(t,ke.length),visualPercent:Ee[t]??0,thumbBackgroundColor:z.colors.thumbBackground,thumbElevation:z.thumb.elevation,indicatorSize:z.thumb.indicatorSize,indicatorColor:z.colors.thumbIndicator,webGestureStyle:Pe,enhanceHandlers:Re}))))},S=StyleSheet.create({c:{position:"relative",justifyContent:"center",width:"100%"},vc:{height:"100%",alignItems:"center",paddingVertical:0},tw:{width:"100%",justifyContent:"center",position:"relative"},twv:{flex:1,justifyContent:"center",alignItems:"center",width:"100%"},tp:{width:"100%",justifyContent:"center"},tpv:{flex:1,alignItems:"center"},tb:{overflow:"hidden",position:"relative"},th:{width:"100%"},tv:{height:"100%"},a:{position:"absolute"},t:{position:"absolute",alignItems:"center",justifyContent:"center"},thw:{position:"absolute",alignItems:"center",justifyContent:"center"}});export const Slider=React.memo(SliderImpl);export default Slider;
@@ -1 +1 @@
1
- function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},_extends.apply(null,arguments)}import React,{useCallback,useEffect,useImperativeHandle,useMemo,useRef,useState}from"react";import{Pressable,StyleSheet,Text,TextInput,View}from"react-native";import{useControllableValue}from"../../hooks";import{parseNumber,addNumber,clampValue,formatNumber,numberToString,parseDecimalLength,isFiniteNumber,isPromiseLike}from"../../utils";import{useDirection}from"../config-provider/useDirection";import{useStepperTokens}from"./tokens";import{createHairlineView}from"../../utils/hairline";const LONG_PRESS_DELAY=600,LONG_PRESS_INTERVAL=100,StepperImpl=(e,t)=>{const r=useStepperTokens(e.tokensOverride),n=useDirection(),{min:o,max:s,step:u=1,autoFixed:l=!0,beforeChange:a,integer:i=!1,decimalLength:c,disabled:d=!1,disablePlus:p=!1,disableMinus:m=!1,disableInput:b=!1,allowEmpty:f=!1,showPlus:g=r.defaults.showPlus,showMinus:h=r.defaults.showMinus,showInput:y=r.defaults.showInput,longPress:k=r.defaults.longPress,theme:C=r.defaults.theme,inputWidth:R,buttonSize:T,name:v,placeholder:x,onClick:P,onPlus:N,onMinus:F,onOverlimit:I,onFocus:w,onBlur:D,inputProps:L,inputStyle:E,buttonStyle:B,style:V,...O}=e,[M,z]=useState(!1),_=useRef(!1),W=useRef(N),H=useRef(F),j=useRef(I),A=useRef(w),G=useRef(D),Y=useRef(P),q=useRef(null),J=useRef(null),K=useRef(""),Q=useRef(L),U=useRef({hadLongPress:!1});W.current=N,H.current=F,j.current=I,A.current=w,G.current=D,Y.current=P,Q.current=L;const X=parseDecimalLength(c),Z=Number(u??1),$=isFiniteNumber(Z)&&Z>0?Z:1,ee=Math.max(0,parseNumber(T,r.defaults.buttonSize)),te=Math.max(0,parseNumber(R,r.defaults.inputWidth)),re=useMemo(()=>{const t=e.defaultValue;if(null===t)return null;const r=isFiniteNumber(t)?t:0,n=formatNumber(r,i,X);return l?clampValue(n,o,s):n},[l,X,i,s,o,e.defaultValue]),[ne,oe]=useControllableValue({...e,defaultValue:re},{defaultValue:re});useEffect(()=>{q.current=ne??null},[ne]),useImperativeHandle(t,()=>({focus:()=>J.current?.focus(),blur:()=>J.current?.blur()}));const[se,ue]=useState(!1),[le,ae]=useState(()=>numberToString(ne,X)),ie=useCallback(e=>{K.current=e,ae(e)},[]);useEffect(()=>{se||ie(numberToString(ne,X))},[X,se,ie,ne]);const ce=useCallback(()=>{const e=q.current;return isFiniteNumber(e)?e:isFiniteNumber(o)?o:0},[o]),de=useCallback(e=>{if(d)return!0;if("plus"===e&&p)return!0;if("minus"===e&&m)return!0;const t=ce();return!!("plus"===e&&isFiniteNumber(s)&&t>=s)||!!("minus"===e&&isFiniteNumber(o)&&t<=o)},[m,p,d,ce,s,o]),pe=useCallback(e=>{const t=q.current??null;return!Object.is(t,e)&&(q.current=e,oe(e,{name:v}),!0)},[v,oe]),me=useCallback(e=>{const t=formatNumber(e,i,X);return l?clampValue(t,o,s):t},[l,X,i,s,o]),be=useCallback((e,t)=>{if(_.current)return"noop";const r=()=>pe(e)?(ie(numberToString(e,X)),t?.(e),"changed"):"noop";if(!a)return r();try{const t=a(e);return isPromiseLike(t)?(_.current=!0,z(!0),t.then(e=>{!1!==e?r():ie(numberToString(q.current,X))}).catch(()=>r()).finally(()=>{_.current=!1,z(!1)}),"pending"):!1===t?(ie(numberToString(q.current,X)),"noop"):r()}catch{return r()}},[a,X,ie,pe]),fe=useCallback((e,t,r)=>{if(_.current)return"noop";const n=r?.emitOverlimit??!0,o=r?.emitButtonCallbacks??Boolean(t);if(de(e))return n&&j.current?.(e),"overlimit";const s=ce(),u=me(addNumber(s,"plus"===e?$:-$));return be(u,r=>{o&&t&&("plus"===e?W.current?.(t,r):H.current?.(t,r))})},[me,ce,de,be,$]),ge=useCallback(()=>{U.current.delay&&(clearTimeout(U.current.delay),U.current.delay=void 0),U.current.interval&&(clearInterval(U.current.interval),U.current.interval=void 0)},[]);useEffect(()=>ge(),[ge]),useEffect(()=>{(d||M||!k)&&ge()},[M,ge,d,k]);const he=useCallback(e=>{k&&(_.current||de(e)||(ge(),U.current.hadLongPress=!1,U.current.delay=setTimeout(()=>{U.current.hadLongPress=!0;"changed"===fe(e,void 0,{emitOverlimit:!0,emitButtonCallbacks:!1})?U.current.interval=setInterval(()=>{"changed"!==fe(e,void 0,{emitOverlimit:!0,emitButtonCallbacks:!1})&&ge()},100):ge()},600)))},[ge,de,k,fe]),ye=useCallback(()=>ge(),[ge]),ke=useCallback((e,t)=>{U.current.hadLongPress?U.current.hadLongPress=!1:(U.current.hadLongPress=!1,fe(e,t,{emitOverlimit:!0,emitButtonCallbacks:!0}))},[fe]),Se=isFiniteNumber(ne)?ne:0,Ce=isFiniteNumber(o)?o:void 0,Re=isFiniteNumber(s)?s:void 0,Te=d||M,ve=Te||m||null!=Ce&&Se<=Ce,xe=Te||p||null!=Re&&Se>=Re,Pe=r.radii.default,Ne=useMemo(()=>({width:ee,height:ee}),[ee]),Fe=useMemo(()=>({width:te,height:ee,marginHorizontal:r.spacing.gap}),[ee,te,r.spacing.gap]),Ie=useCallback((e,t)=>{const o="plus"===e,s=o?xe:ve;if("round"===C){const e=[S.btn,Ne,{borderRadius:ee/2,opacity:s?r.opacity.roundDisabled:1}];return o?[...e,{backgroundColor:r.colors.roundTheme,...t.pressed&&!s&&{opacity:r.opacity.pressed}},B]:[...e,{backgroundColor:r.colors.roundThemeBackground,...t.pressed&&!s&&{opacity:r.opacity.pressed}},B]}const u="minus"===e!=("rtl"===n)?{borderTopLeftRadius:Pe,borderBottomLeftRadius:Pe}:{borderTopRightRadius:Pe,borderBottomRightRadius:Pe},l=s?r.colors.buttonDisabledBackground:t.pressed?r.colors.active:r.colors.background;return[S.btn,Ne,u,{backgroundColor:l},B]},[Ne,B,ve,xe,Pe,ee,C,n,r.colors.active,r.colors.background,r.colors.buttonDisabledBackground,r.colors.roundTheme,r.colors.roundThemeBackground,r.opacity.pressed,r.opacity.roundDisabled]),we=useCallback(e=>{const t="plus"===e,n=t?xe:ve;if("round"===C){const e=t?r.colors.roundThemeText:r.colors.roundTheme;return[S.btnTxt,{color:e,fontFamily:r.typography.fontFamily,fontSize:r.typography.fontSize,fontWeight:r.typography.fontWeight}]}return[S.btnTxt,{color:n?r.colors.buttonDisabledIcon:r.colors.buttonIcon,fontFamily:r.typography.fontFamily,fontSize:r.typography.fontSize,fontWeight:r.typography.fontWeight}]},[ve,xe,C,r.colors.buttonDisabledIcon,r.colors.buttonIcon,r.colors.roundTheme,r.colors.roundThemeText,r.typography.fontFamily,r.typography.fontSize,r.typography.fontWeight]),De=useCallback(e=>{if(b||d||_.current)return;ie(e),Q.current?.onChangeText?.(e);const t=e.trim();if(""===t)return void be(f?null:re);const r=Number.parseFloat(t);Number.isFinite(r)&&be(me(r))},[f,me,_,b,d,Q,be,re,ie]),Le=useCallback(e=>{b?J.current?.blur():(ue(!0),A.current?.(e),Q.current?.onFocus?.(e))},[b]),Ee=useCallback(e=>{if(ue(!1),!_.current){const e=K.current.trim();if(""===e)be(f?null:re);else{const t=Number.parseFloat(e);Number.isFinite(t)&&be(me(t))}}G.current?.(e),Q.current?.onBlur?.(e)},[f,me,be,re]),Be=useCallback(e=>{Y.current?.(e),Q.current?.onPressIn?.(e)},[]),Ve=useCallback(e=>ke("minus",e),[ke]),Oe=useCallback(e=>ke("plus",e),[ke]),Me=useCallback(()=>he("minus"),[he]),ze=useCallback(()=>he("plus"),[he]),_e=useCallback(e=>Ie("minus",e),[Ie]),We=useCallback(e=>Ie("plus",e),[Ie]),He=useCallback(()=>h?React.createElement(Pressable,{key:"minus",testID:"stepper-minus",accessibilityRole:"button",accessibilityLabel:"minus",accessibilityState:{disabled:ve},onPress:Ve,onPressIn:Me,onPressOut:ye,style:_e},React.createElement(Text,{style:we("minus")},"-"),"round"===C&&React.createElement(View,{style:createHairlineView({position:"all",color:r.colors.roundTheme,borderRadius:ee/2})})):null,[we,_e,Ve,Me,ye,ve,h,C,r.colors.roundTheme,ee]),je=useCallback(()=>g?React.createElement(Pressable,{key:"plus",testID:"stepper-plus",accessibilityRole:"button",accessibilityLabel:"add",accessibilityState:{disabled:xe},onPress:Oe,onPressIn:ze,onPressOut:ye,style:We},React.createElement(Text,{style:we("plus")},"+")):null,[we,We,Oe,ze,ye,xe,g]),Ae=useMemo(()=>{if(!y)return null;const e=!Te&&!b,t=Te||b,n="round"===C?r.colors.transparent:t?r.colors.inputDisabledBackground:r.colors.background,o=t?r.colors.inputDisabledText:r.colors.inputText,s=i?"number-pad":"decimal-pad";return React.createElement(TextInput,_extends({ref:J},L,{style:[S.inp,Fe,{backgroundColor:n,color:o,paddingHorizontal:r.spacing.none,paddingVertical:r.spacing.none},E],value:le,placeholder:x,editable:e,keyboardType:s,onChangeText:De,onFocus:Le,onBlur:Ee,onPressIn:Be}))},[Te,b,Ee,De,Le,Be,Fe,L,E,le,i,x,y,C,r.colors.background,r.colors.inputDisabledBackground,r.colors.inputDisabledText,r.colors.inputText,r.colors.transparent,r.spacing.none]);return React.createElement(View,_extends({},O,{style:[S.cnt,V]}),He(),Ae,je())},S=StyleSheet.create({cnt:{flexDirection:"row",alignItems:"center"},btn:{justifyContent:"center",alignItems:"center"},btnTxt:{},inp:{textAlign:"center"}}),StepperForwardRef=React.forwardRef(StepperImpl);StepperForwardRef.displayName="Stepper";export const Stepper=React.memo(StepperForwardRef);export default Stepper;
1
+ function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},_extends.apply(null,arguments)}import React,{useCallback,useEffect,useImperativeHandle,useMemo,useRef,useState}from"react";import{Pressable,StyleSheet,Text,TextInput,View}from"react-native";import{useControllableValue}from"../../hooks";import{parseNumber,addNumber,clampValue,formatNumber,numberToString,parseDecimalLength,isFiniteNumber,isPromiseLike}from"../../utils";import{useDirection}from"../config-provider/useDirection";import{useStepperTokens}from"./tokens";import{createHairlineView}from"../../utils/hairline";const LONG_PRESS_DELAY=600,LONG_PRESS_INTERVAL=100,StepperImpl=(e,t)=>{const r=useStepperTokens(e.tokensOverride),n=useDirection(),{min:o,max:s,step:u=1,autoFixed:l=!0,beforeChange:a,integer:i=!1,decimalLength:c,disabled:d=!1,disablePlus:p=!1,disableMinus:m=!1,disableInput:b=!1,allowEmpty:f=!1,showPlus:g=r.defaults.showPlus,showMinus:h=r.defaults.showMinus,showInput:y=r.defaults.showInput,longPress:k=r.defaults.longPress,theme:C=r.defaults.theme,inputWidth:T,buttonSize:R,name:v,placeholder:x,onClick:P,onPlus:N,onMinus:F,onOverlimit:I,onFocus:w,onBlur:D,inputProps:L,inputStyle:E,buttonStyle:B,style:V,...O}=e,[M,z]=useState(!1),_=useRef(!1),W=useRef(N),H=useRef(F),j=useRef(I),A=useRef(w),G=useRef(D),Y=useRef(P),q=useRef(null),J=useRef(null),K=useRef(""),Q=useRef(L),U=useRef({hadLongPress:!1});W.current=N,H.current=F,j.current=I,A.current=w,G.current=D,Y.current=P,Q.current=L;const X=parseDecimalLength(c),Z=Number(u??1),$=isFiniteNumber(Z)&&Z>0?Z:1,ee=Math.max(0,parseNumber(R,r.defaults.buttonSize)),te=Math.max(0,parseNumber(T,r.defaults.inputWidth)),re=useMemo(()=>{const t=e.defaultValue;if(null===t)return null;const r=isFiniteNumber(t)?t:0,n=formatNumber(r,i,X);return l?clampValue(n,o,s):n},[l,X,i,s,o,e.defaultValue]),[ne,oe]=useControllableValue({...e,defaultValue:re},{defaultValue:re});useEffect(()=>{q.current=ne??null},[ne]),useImperativeHandle(t,()=>({focus:()=>J.current?.focus(),blur:()=>J.current?.blur()}));const[se,ue]=useState(!1),[le,ae]=useState(()=>numberToString(ne,X)),ie=useCallback(e=>{K.current=e,ae(e)},[]);useEffect(()=>{se||ie(numberToString(ne,X))},[X,se,ie,ne]);const ce=useCallback(()=>{const e=q.current;return isFiniteNumber(e)?e:isFiniteNumber(o)?o:0},[o]),de=useCallback(e=>{if(d)return!0;if("plus"===e&&p)return!0;if("minus"===e&&m)return!0;const t=ce();return!!("plus"===e&&isFiniteNumber(s)&&t>=s)||!!("minus"===e&&isFiniteNumber(o)&&t<=o)},[m,p,d,ce,s,o]),pe=useCallback(e=>{const t=q.current??null;return!Object.is(t,e)&&(q.current=e,oe(e,{name:v}),!0)},[v,oe]),me=useCallback(e=>{const t=formatNumber(e,i,X);return l?clampValue(t,o,s):t},[l,X,i,s,o]),be=useCallback((e,t)=>{if(_.current)return"noop";const r=()=>pe(e)?(ie(numberToString(e,X)),t?.(e),"changed"):"noop";if(!a)return r();try{const t=a(e);return isPromiseLike(t)?(_.current=!0,z(!0),t.then(e=>{!1!==e?r():ie(numberToString(q.current,X))}).catch(()=>{ie(numberToString(q.current,X))}).finally(()=>{_.current=!1,z(!1)}),"pending"):!1===t?(ie(numberToString(q.current,X)),"noop"):r()}catch{return r()}},[a,X,ie,pe]),fe=useCallback((e,t,r)=>{if(_.current)return"noop";const n=r?.emitOverlimit??!0,o=r?.emitButtonCallbacks??Boolean(t);if(de(e))return n&&j.current?.(e),"overlimit";const s=ce(),u=me(addNumber(s,"plus"===e?$:-$));return be(u,r=>{o&&t&&("plus"===e?W.current?.(t,r):H.current?.(t,r))})},[me,ce,de,be,$]),ge=useCallback(()=>{U.current.delay&&(clearTimeout(U.current.delay),U.current.delay=void 0),U.current.interval&&(clearInterval(U.current.interval),U.current.interval=void 0)},[]);useEffect(()=>(ge(),()=>ge()),[ge]),useEffect(()=>{(d||M||!k)&&ge()},[M,ge,d,k]);const he=useCallback(e=>{k&&(_.current||de(e)||(ge(),U.current.hadLongPress=!1,U.current.delay=setTimeout(()=>{U.current.hadLongPress=!0;"changed"===fe(e,void 0,{emitOverlimit:!0,emitButtonCallbacks:!1})?U.current.interval=setInterval(()=>{"changed"!==fe(e,void 0,{emitOverlimit:!0,emitButtonCallbacks:!1})&&ge()},100):ge()},600)))},[ge,de,k,fe]),ye=useCallback(()=>ge(),[ge]),ke=useCallback((e,t)=>{U.current.hadLongPress?U.current.hadLongPress=!1:(U.current.hadLongPress=!1,fe(e,t,{emitOverlimit:!0,emitButtonCallbacks:!0}))},[fe]),Se=isFiniteNumber(ne)?ne:0,Ce=isFiniteNumber(o)?o:void 0,Te=isFiniteNumber(s)?s:void 0,Re=d||M,ve=Re||m||null!=Ce&&Se<=Ce,xe=Re||p||null!=Te&&Se>=Te,Pe=r.radii.default,Ne=useMemo(()=>({width:ee,height:ee}),[ee]),Fe=useMemo(()=>({width:te,height:ee,marginHorizontal:r.spacing.gap}),[ee,te,r.spacing.gap]),Ie=useCallback((e,t)=>{const o="plus"===e,s=o?xe:ve;if("round"===C){const e=[S.btn,Ne,{borderRadius:ee/2,opacity:s?r.opacity.roundDisabled:1}];return o?[...e,{backgroundColor:r.colors.roundTheme,...t.pressed&&!s&&{opacity:r.opacity.pressed}},B]:[...e,{backgroundColor:r.colors.roundThemeBackground,...t.pressed&&!s&&{opacity:r.opacity.pressed}},B]}const u="minus"===e!=("rtl"===n)?{borderTopLeftRadius:Pe,borderBottomLeftRadius:Pe}:{borderTopRightRadius:Pe,borderBottomRightRadius:Pe},l=s?r.colors.buttonDisabledBackground:t.pressed?r.colors.active:r.colors.background;return[S.btn,Ne,u,{backgroundColor:l},B]},[Ne,B,ve,xe,Pe,ee,C,n,r.colors.active,r.colors.background,r.colors.buttonDisabledBackground,r.colors.roundTheme,r.colors.roundThemeBackground,r.opacity.pressed,r.opacity.roundDisabled]),we=useCallback(e=>{const t="plus"===e,n=t?xe:ve;if("round"===C){const e=t?r.colors.roundThemeText:r.colors.roundTheme;return[S.btnTxt,{color:e,fontFamily:r.typography.fontFamily,fontSize:r.typography.fontSize,fontWeight:r.typography.fontWeight}]}return[S.btnTxt,{color:n?r.colors.buttonDisabledIcon:r.colors.buttonIcon,fontFamily:r.typography.fontFamily,fontSize:r.typography.fontSize,fontWeight:r.typography.fontWeight}]},[ve,xe,C,r.colors.buttonDisabledIcon,r.colors.buttonIcon,r.colors.roundTheme,r.colors.roundThemeText,r.typography.fontFamily,r.typography.fontSize,r.typography.fontWeight]),De=useCallback(e=>{if(b||d||_.current)return;ie(e),Q.current?.onChangeText?.(e);const t=e.trim();if(""===t)return void be(f?null:re);const r=Number.parseFloat(t);Number.isFinite(r)&&be(me(r))},[f,me,_,b,d,Q,be,re,ie]),Le=useCallback(e=>{b?J.current?.blur():(ue(!0),A.current?.(e),Q.current?.onFocus?.(e))},[b]),Ee=useCallback(e=>{if(ue(!1),!_.current){const e=K.current.trim();if(""===e)be(f?null:re);else{const t=Number.parseFloat(e);Number.isFinite(t)&&be(me(t))}}G.current?.(e),Q.current?.onBlur?.(e)},[f,me,be,re]),Be=useCallback(e=>{Y.current?.(e),Q.current?.onPressIn?.(e)},[]),Ve=useCallback(e=>ke("minus",e),[ke]),Oe=useCallback(e=>ke("plus",e),[ke]),Me=useCallback(()=>he("minus"),[he]),ze=useCallback(()=>he("plus"),[he]),_e=useCallback(e=>Ie("minus",e),[Ie]),We=useCallback(e=>Ie("plus",e),[Ie]),He=useCallback(()=>h?React.createElement(Pressable,{key:"minus",testID:"stepper-minus",accessibilityRole:"button",accessibilityLabel:"minus",accessibilityState:{disabled:ve},onPress:Ve,onPressIn:Me,onPressOut:ye,style:_e},React.createElement(Text,{style:we("minus")},"-"),"round"===C&&React.createElement(View,{style:createHairlineView({position:"all",color:r.colors.roundTheme,borderRadius:ee/2})})):null,[we,_e,Ve,Me,ye,ve,h,C,r.colors.roundTheme,ee]),je=useCallback(()=>g?React.createElement(Pressable,{key:"plus",testID:"stepper-plus",accessibilityRole:"button",accessibilityLabel:"add",accessibilityState:{disabled:xe},onPress:Oe,onPressIn:ze,onPressOut:ye,style:We},React.createElement(Text,{style:we("plus")},"+")):null,[we,We,Oe,ze,ye,xe,g]),Ae=useMemo(()=>{if(!y)return null;const e=!Re&&!b,t=Re||b,n="round"===C?r.colors.transparent:t?r.colors.inputDisabledBackground:r.colors.background,o=t?r.colors.inputDisabledText:r.colors.inputText,s=i?"number-pad":"decimal-pad";return React.createElement(TextInput,_extends({ref:J},L,{style:[S.inp,Fe,{backgroundColor:n,color:o,paddingHorizontal:r.spacing.none,paddingVertical:r.spacing.none},E],value:le,placeholder:x,editable:e,keyboardType:s,onChangeText:De,onFocus:Le,onBlur:Ee,onPressIn:Be}))},[Re,b,Ee,De,Le,Be,Fe,L,E,le,i,x,y,C,r.colors.background,r.colors.inputDisabledBackground,r.colors.inputDisabledText,r.colors.inputText,r.colors.transparent,r.spacing.none]);return React.createElement(View,_extends({},O,{style:[S.cnt,V]}),He(),Ae,je())},S=StyleSheet.create({cnt:{flexDirection:"row",alignItems:"center"},btn:{justifyContent:"center",alignItems:"center"},btnTxt:{},inp:{textAlign:"center"}}),StepperForwardRef=React.forwardRef(StepperImpl);StepperForwardRef.displayName="Stepper";export const Stepper=React.memo(StepperForwardRef);export default Stepper;
@@ -1 +1 @@
1
- function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},_extends.apply(null,arguments)}import React,{useRef,useState,useCallback,useEffect,useImperativeHandle,forwardRef,memo,useMemo,Children,isValidElement}from"react";import{FlatList,View,StyleSheet,Platform}from"react-native";import{clamp}from"../../utils/number";import SwiperPagIndicator from"./SwiperPagIndicator";import{useSwiperTokens}from"./tokens";const SwiperItemImpl=(e,t)=>React.createElement(View,{ref:t,style:[S.item,e.style],testID:e.testID},e.children),SwiperItemFR=forwardRef(SwiperItemImpl);SwiperItemFR.displayName="SwiperItem";export const SwiperItem=memo(SwiperItemFR);const LOOP_THRESHOLD=10,SwiperImpl=(e,t)=>{const{data:r,renderItem:n,children:l,initialSwipe:a=0,touchable:c=!0,loop:u=!0,autoplay:i=!1,vertical:o=!1,onChange:s,indicator:m=!0,indicatorProps:f,style:d,testID:p}=e,h=useSwiperTokens(),w=useRef(null),v=useRef(null),b=useRef(!1),y=useRef(!1),I=useRef(null),E=useRef(!1),R=useRef(null),g=useRef(null),x=useRef(0),C="web"===Platform.OS,[k,T]=useState({width:0,height:0}),M=useCallback(e=>{const{width:t,height:r}=e.nativeEvent.layout;T(e=>e.width===t&&e.height===r?e:{width:t,height:r})},[]),P=useMemo(()=>l?Children.toArray(l).filter(e=>isValidElement(e)):[],[l]),O=Array.isArray(r),V=O?r:P,D=V.length,L=u&&D>1,F=useMemo(()=>L?[V[D-1],...V,V[0]]:V,[V,L,D]),z=F.length,_=L&&z<=10,H=useCallback(e=>L?0===e?D-1:e===z-1?0:e-1:clamp(e,0,D-1),[L,D,z]),j=useCallback(e=>L?clamp(e,0,D-1)+1:clamp(e,0,D-1),[L,D]),A=clamp(a,0,Math.max(0,D-1)),B=j(A),N=useRef(A),[$,X]=useState(A),Y=k.width>0&&k.height>0,U=o?k.height:k.width,q=o?k.width:k.height,G=useMemo(()=>({width:o?q:U,height:o?U:q}),[o,U,q]),J=useCallback(()=>{v.current&&(clearTimeout(v.current),v.current=null)},[]),K=useRef(s);K.current=s;const Q=useCallback(e=>{const t=clamp(e,0,Math.max(0,D-1));N.current!==t&&(N.current=t,X(t),K.current?.(t))},[D]),W=useCallback((e,t)=>{try{w.current?.scrollToIndex({index:e,animated:t})}catch{}},[]),Z=useCallback((e,t=!0)=>{if(0===D)return;if(t&&y.current)return void(I.current=e);const r=clamp(e,0,D-1);let n=j(r);if(L&&t){const e=j(N.current);e===D&&0===r?n=z-1:1===e&&r===D-1&&(n=0)}const l=N.current,a=j(l);if(r!==l||n!==a){if(t&&(y.current=!0),W(n,t),!t&&(Q(r),null!=I.current)){const e=I.current;I.current=null,Z(e,!0)}}else if(null!=I.current){const e=I.current;I.current=null,Z(e,!0)}},[D,j,W,L,z,Q]),ee=useCallback(()=>{const e="number"==typeof i?Math.max(0,i):i?h.defaults.autoplayInterval:0;!e||D<=1||b.current&&!C||(J(),v.current=setTimeout(()=>{b.current&&!C||Z(L?(N.current+1)%D:clamp(N.current+1,0,D-1),!0)},e))},[i,D,J,L,Z,C,h.defaults.autoplayInterval]),te=useCallback(()=>{0!==D&&Z(L?(N.current+1)%D:clamp(N.current+1,0,D-1),!0)},[D,L,Z]),re=useCallback(()=>{0!==D&&Z(L?(N.current-1+D)%D:clamp(N.current-1,0,D-1),!0)},[D,L,Z]);useImperativeHandle(t,()=>({swipeTo:Z,swipeNext:te,swipePrev:re,getCurrentIndex:()=>N.current}),[Z,te,re]),useEffect(()=>{Y&&0!==D&&W(B,!1)},[Y,D,B,W]),useEffect(()=>(ee(),J),[ee,J,$]),useEffect(()=>()=>{g.current&&clearTimeout(g.current)},[]);const ne=useCallback(()=>{y.current=!1,b.current=!1,E.current=!1,ee(),(()=>{if(null==I.current)return;const e=I.current;I.current=null,Z(e,!0)})()},[ee]),le=useCallback(e=>{if(D<=1)return;const t=o?e.nativeEvent.contentOffset.y:e.nativeEvent.contentOffset.x,r=Math.round(t/U),n=clamp(r,0,L?z-1:D-1);if(Q(H(n)),C){g.current&&(clearTimeout(g.current),g.current=null),x.current=t;const e=r*U;Math.abs(t-e)<.5?(L&&(r<=0||r>=z-1)&&W(r<=0?D:1,!1),ne()):g.current=setTimeout(()=>{g.current=null;const e=x.current,t=Math.round(e/U);L&&(t<=0||t>=z-1)&&W(t<=0?D:1,!1),ne()},150)}},[D,o,U,L,z,Q,H,W,ne,C]),ae=useCallback(e=>{if(C||0===D)return;const t=o?e.nativeEvent.contentOffset.y:e.nativeEvent.contentOffset.x,r=Math.round(t/U);let n=r;L&&(0===r&&(n=D),r===z-1&&(n=1)),n!==r&&W(n,!1),Q(H(n)),ne()},[o,D,U,L,z,W,Q,H,ne,C]),ce=useCallback(()=>{b.current=!0,J(),g.current&&(clearTimeout(g.current),g.current=null)},[J]),ue=useCallback(e=>{E.current||ae(e)},[ae]),ie=useCallback(()=>{E.current=!0},[]),oe=useCallback(e=>{W(e.index,!1),Q(H(e.index)),ne()},[W,Q,H,ne]),se=useRef(n);se.current=n;const me=useCallback(e=>{const t=O?se.current?.(e)??null:e.item;return t?React.createElement(View,{style:[S.slide,G]},t):null},[O,G]),fe=useCallback((e,t)=>({length:U,offset:U*t,index:t}),[U]),de=useCallback((e,t)=>`s-${t}`,[]);if(0===D)return null;const pe=!1===m||D<=1?null:"function"==typeof m?m(D,$):React.createElement(SwiperPagIndicator,_extends({},f,{total:D,current:$,vertical:o})),he=C&&c&&D>1?{onPointerDown:e=>{"mouse"===e.nativeEvent.pointerType&&0===e.nativeEvent.button&&(R.current=o?e.nativeEvent.pageY:e.nativeEvent.pageX,b.current=!0,J())},onPointerUp:e=>{const t=R.current;if(R.current=null,null==t||"mouse"!==e.nativeEvent.pointerType)return;const r=(o?e.nativeEvent.pageY:e.nativeEvent.pageX)-t;Math.abs(r)>=.15*U&&(r<0?te():re()),b.current=!1,ee()},onPointerLeave:()=>{null!=R.current&&(R.current=null,b.current=!1,ee())}}:void 0;return Y?React.createElement(View,_extends({accessibilityRole:"adjustable",accessibilityLabel:`swiper, ${$+1} of ${D}`,accessibilityValue:{min:0,max:D-1,now:$},style:[S.ctr,he&&S.web,d],onLayout:M,testID:p},he),React.createElement(FlatList,{ref:w,data:F,renderItem:me,keyExtractor:de,horizontal:!o,getItemLayout:fe,initialScrollIndex:B,scrollEnabled:c&&D>1,removeClippedSubviews:!L||!_,disableVirtualization:L&&_,initialNumToRender:L&&_?z:3,maxToRenderPerBatch:L&&_?z:3,windowSize:L?_?z:7:5,pagingEnabled:!0,snapToInterval:U,decelerationRate:"fast",showsHorizontalScrollIndicator:!1,showsVerticalScrollIndicator:!1,onScrollBeginDrag:ce,onScroll:le,scrollEventThrottle:h.defaults.scrollEventThrottle,onScrollEndDrag:ue,onMomentumScrollBegin:ie,onMomentumScrollEnd:ae,onScrollToIndexFailed:oe}),React.createElement(View,{pointerEvents:"none",style:[S.ind,{zIndex:h.layer.zIndex,elevation:h.layer.elevation}]},pe)):React.createElement(View,{style:[S.ctr,d],onLayout:M,testID:p})},SwiperFR=forwardRef(SwiperImpl),Swiper=memo(SwiperFR),S=StyleSheet.create({ctr:{position:"relative",overflow:"hidden"},web:{cursor:"grab",userSelect:"none"},slide:{flex:1},item:{flex:1},ind:{position:"absolute",left:0,right:0,top:0,bottom:0}});export default Swiper;
1
+ function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)({}).hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},_extends.apply(null,arguments)}import React,{useRef,useState,useCallback,useEffect,useImperativeHandle,forwardRef,memo,useMemo,Children,isValidElement}from"react";import{FlatList,View,StyleSheet,Platform}from"react-native";import{clamp}from"../../utils/number";import SwiperPagIndicator from"./SwiperPagIndicator";import{useSwiperTokens}from"./tokens";import{createWebMouseHandlers,LOOP_THRESHOLD}from"../../hooks/swiper/utils";const SwiperItemImpl=(e,t)=>React.createElement(View,{ref:t,style:[S.item,e.style],testID:e.testID},e.children),SwiperItemFR=forwardRef(SwiperItemImpl);SwiperItemFR.displayName="SwiperItem";export const SwiperItem=memo(SwiperItemFR);const SwiperImpl=(e,t)=>{const{data:r,renderItem:n,children:l,initialSwipe:a=0,touchable:c=!0,loop:u=!0,autoplay:i=!1,vertical:o=!1,onChange:s,indicator:m=!0,indicatorProps:d,style:f,testID:p}=e,h=useSwiperTokens(),w=useRef(null),b=useRef(null),R=useRef(!1),I=useRef(!1),v=useRef(null),y=useRef(!1),g=useRef(null),x=useRef(null),E=useRef(0),k="web"===Platform.OS,[C,T]=useState({width:0,height:0}),M=useCallback(e=>{const{width:t,height:r}=e.nativeEvent.layout;T(e=>e.width===t&&e.height===r?e:{width:t,height:r})},[]),O=useMemo(()=>l?Children.toArray(l).filter(e=>isValidElement(e)):[],[l]),P=Array.isArray(r),V=P?r:O,L=V.length,D=u&&L>1,H=useMemo(()=>D?[V[L-1],...V,V[0]]:V,[V,D,L]),F=H.length,z=D&&F<=LOOP_THRESHOLD,_=useCallback(e=>D?0===e?L-1:e===F-1?0:e-1:clamp(e,0,L-1),[D,L,F]),A=useCallback(e=>D?clamp(e,0,L-1)+1:clamp(e,0,L-1),[D,L]),j=clamp(a,0,Math.max(0,L-1)),B=A(j),N=useRef(j),[$,W]=useState(j),q=C.width>0&&C.height>0,G=o?C.height:C.width,J=o?C.width:C.height,K=useMemo(()=>({width:o?J:G,height:o?G:J}),[o,G,J]),Q=useCallback(()=>{b.current&&(clearTimeout(b.current),b.current=null)},[]),U=useRef(s);U.current=s;const X=useCallback(e=>{const t=clamp(e,0,Math.max(0,L-1));N.current!==t&&(N.current=t,W(t),U.current?.(t))},[L]),Y=useCallback((e,t)=>{try{w.current?.scrollToIndex({index:e,animated:t})}catch{}},[]),Z=useCallback((e,t=!0)=>{if(0===L)return;if(t&&I.current)return void(v.current=e);const r=clamp(e,0,L-1);let n=A(r);if(D&&t){const e=A(N.current);e===L&&0===r?n=F-1:1===e&&r===L-1&&(n=0)}const l=N.current,a=A(l);if(r!==l||n!==a){if(t&&(I.current=!0),Y(n,t),!t&&(X(r),null!=v.current)){const e=v.current;v.current=null,Z(e,!0)}}else if(null!=v.current){const e=v.current;v.current=null,Z(e,!0)}},[L,A,Y,D,F,X]),ee=useCallback(()=>{const e="number"==typeof i?Math.max(0,i):i?h.defaults.autoplayInterval:0;!e||L<=1||R.current&&!k||(Q(),b.current=setTimeout(()=>{R.current&&!k||Z(D?(N.current+1)%L:clamp(N.current+1,0,L-1),!0)},e))},[i,L,Q,D,Z,k,h.defaults.autoplayInterval]),te=useCallback(()=>{0!==L&&Z(D?(N.current+1)%L:clamp(N.current+1,0,L-1),!0)},[L,D,Z]),re=useCallback(()=>{0!==L&&Z(D?(N.current-1+L)%L:clamp(N.current-1,0,L-1),!0)},[L,D,Z]);useImperativeHandle(t,()=>({swipeTo:Z,swipeNext:te,swipePrev:re,getCurrentIndex:()=>N.current}),[Z,te,re]),useEffect(()=>{q&&0!==L&&Y(B,!1)},[q,L,B,Y]),useEffect(()=>(ee(),Q),[ee,Q,$]),useEffect(()=>()=>{x.current&&clearTimeout(x.current)},[]);const ne=useCallback(()=>{I.current=!1,R.current=!1,y.current=!1,ee(),(()=>{if(null==v.current)return;const e=v.current;v.current=null,Z(e,!0)})()},[ee]),le=useCallback(e=>{if(L<=1)return;const t=o?e.nativeEvent.contentOffset.y:e.nativeEvent.contentOffset.x,r=Math.round(t/G),n=clamp(r,0,D?F-1:L-1);if(X(_(n)),k){x.current&&(clearTimeout(x.current),x.current=null),E.current=t;const e=r*G;Math.abs(t-e)<.5?(D&&(r<=0||r>=F-1)&&Y(r<=0?L:1,!1),ne()):x.current=setTimeout(()=>{x.current=null;const e=E.current,t=Math.round(e/G);D&&(t<=0||t>=F-1)&&Y(t<=0?L:1,!1),ne()},150)}},[L,o,G,D,F,X,_,Y,ne,k]),ae=useCallback(e=>{if(k||0===L)return;const t=o?e.nativeEvent.contentOffset.y:e.nativeEvent.contentOffset.x,r=Math.round(t/G);let n=r;D&&(0===r&&(n=L),r===F-1&&(n=1)),n!==r&&Y(n,!1),X(_(n)),ne()},[o,L,G,D,F,Y,X,_,ne,k]),ce=useCallback(()=>{R.current=!0,Q(),x.current&&(clearTimeout(x.current),x.current=null)},[Q]),ue=useCallback(e=>{y.current||ae(e)},[ae]),ie=useCallback(()=>{y.current=!0},[]),oe=useCallback(e=>{const t=clamp(e.index,0,D?F-1:L-1);Y(t,!1),X(_(t)),ne()},[L,F,_,ne,Y,D,X]),se=useRef(n);se.current=n;const me=useCallback(e=>{const t=P?se.current?.(e)??null:e.item;return t?React.createElement(View,{style:[S.slide,K]},t):null},[P,K]),de=useCallback((e,t)=>({length:G,offset:G*t,index:t}),[G]),fe=useCallback((e,t)=>`s-${t}`,[]);if(0===L)return null;const pe=!1===m||L<=1?null:"function"==typeof m?m(L,$):React.createElement(SwiperPagIndicator,_extends({},d,{total:L,current:$,vertical:o})),he=useMemo(()=>createWebMouseHandlers({enabled:k&&c&&L>1,vertical:o,mainSize:G,clearAuto:Q,next:te,prev:re,schedule:ee,dragRef:g,interRef:R}),[k,c,L,o,G,Q,te,re,ee]);return q?React.createElement(View,_extends({accessibilityRole:"adjustable",accessibilityLabel:`swiper, ${$+1} of ${L}`,accessibilityValue:{min:0,max:L-1,now:$},style:[S.ctr,he&&S.web,f],onLayout:M,testID:p},he),React.createElement(FlatList,{ref:w,data:H,renderItem:me,keyExtractor:fe,horizontal:!o,getItemLayout:de,initialScrollIndex:B,scrollEnabled:c&&L>1,removeClippedSubviews:!D||!z,disableVirtualization:D&&z,initialNumToRender:D&&z?F:3,maxToRenderPerBatch:D&&z?F:3,windowSize:D?z?F:7:5,pagingEnabled:!0,snapToInterval:G,decelerationRate:"fast",showsHorizontalScrollIndicator:!1,showsVerticalScrollIndicator:!1,onScrollBeginDrag:ce,onScroll:le,scrollEventThrottle:h.defaults.scrollEventThrottle,onScrollEndDrag:ue,onMomentumScrollBegin:ie,onMomentumScrollEnd:ae,onScrollToIndexFailed:oe}),React.createElement(View,{pointerEvents:"none",style:[S.ind,{zIndex:h.layer.zIndex,elevation:h.layer.elevation}]},pe)):React.createElement(View,{style:[S.ctr,f],onLayout:M,testID:p})},SwiperFR=forwardRef(SwiperImpl),Swiper=memo(SwiperFR),S=StyleSheet.create({ctr:{position:"relative",overflow:"hidden"},web:{cursor:"grab",userSelect:"none"},slide:{flex:1},item:{flex:1},ind:{position:"absolute",left:0,right:0,top:0,bottom:0}});export default Swiper;