react-native-system-ui 1.0.7 → 1.0.8

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 (80) hide show
  1. package/README.md +13 -13
  2. package/dist/cjs/components/calendar/Calendar.js +1 -1
  3. package/dist/cjs/components/cascader/Cascader.js +1 -1
  4. package/dist/cjs/components/cascader/useCascaderExtend.js +1 -1
  5. package/dist/cjs/components/dialog/Dialog.js +1 -1
  6. package/dist/cjs/components/dialog/imperative.js +1 -1
  7. package/dist/cjs/components/field/Field.js +1 -1
  8. package/dist/cjs/components/form/Form.js +1 -1
  9. package/dist/cjs/components/number-keyboard/NumberKeyboard.js +1 -1
  10. package/dist/cjs/components/overlay/Overlay.js +1 -1
  11. package/dist/cjs/components/picker/Picker.js +1 -1
  12. package/dist/cjs/components/popup/Popup.js +1 -1
  13. package/dist/cjs/components/portal/PortalHost.js +1 -1
  14. package/dist/cjs/components/selector/Selector.js +1 -1
  15. package/dist/cjs/components/slider/Slider.js +1 -1
  16. package/dist/cjs/components/stepper/Stepper.js +1 -1
  17. package/dist/cjs/components/swiper/Swiper.js +1 -1
  18. package/dist/cjs/components/tabs/Tabs.js +1 -1
  19. package/dist/cjs/hooks/calendar/utils.js +1 -0
  20. package/dist/cjs/hooks/cascader/utils.js +1 -0
  21. package/dist/cjs/hooks/dialog/ActionButton.js +1 -0
  22. package/dist/cjs/hooks/field/renderers.js +1 -0
  23. package/dist/cjs/hooks/form/utils.js +1 -0
  24. package/dist/cjs/hooks/number-keyboard/utils.js +1 -0
  25. package/dist/cjs/hooks/picker/normalize.js +1 -0
  26. package/dist/cjs/hooks/picker/value.js +1 -0
  27. package/dist/cjs/hooks/popup/utils.js +1 -0
  28. package/dist/cjs/hooks/slider/utils.js +1 -0
  29. package/dist/cjs/hooks/swiper/utils.js +1 -0
  30. package/dist/cjs/hooks/tabs/TabBarItem.js +1 -0
  31. package/dist/cjs/hooks/tabs/useTabsInternals.js +1 -0
  32. package/dist/cjs/utils/compare.js +1 -1
  33. package/dist/es/components/calendar/Calendar.js +1 -1
  34. package/dist/es/components/cascader/Cascader.js +1 -1
  35. package/dist/es/components/cascader/useCascaderExtend.js +1 -1
  36. package/dist/es/components/dialog/Dialog.js +1 -1
  37. package/dist/es/components/dialog/imperative.js +1 -1
  38. package/dist/es/components/field/Field.js +1 -1
  39. package/dist/es/components/form/Form.js +1 -1
  40. package/dist/es/components/number-keyboard/NumberKeyboard.js +1 -1
  41. package/dist/es/components/overlay/Overlay.js +1 -1
  42. package/dist/es/components/picker/Picker.js +1 -1
  43. package/dist/es/components/popup/Popup.js +1 -1
  44. package/dist/es/components/portal/PortalHost.js +1 -1
  45. package/dist/es/components/selector/Selector.js +1 -1
  46. package/dist/es/components/slider/Slider.js +1 -1
  47. package/dist/es/components/stepper/Stepper.js +1 -1
  48. package/dist/es/components/swiper/Swiper.js +1 -1
  49. package/dist/es/components/tabs/Tabs.js +1 -1
  50. package/dist/es/hooks/calendar/utils.js +1 -0
  51. package/dist/es/hooks/cascader/utils.js +1 -0
  52. package/dist/es/hooks/dialog/ActionButton.js +1 -0
  53. package/dist/es/hooks/field/renderers.js +1 -0
  54. package/dist/es/hooks/form/utils.js +1 -0
  55. package/dist/es/hooks/number-keyboard/utils.js +1 -0
  56. package/dist/es/hooks/picker/normalize.js +1 -0
  57. package/dist/es/hooks/picker/value.js +1 -0
  58. package/dist/es/hooks/popup/utils.js +1 -0
  59. package/dist/es/hooks/slider/utils.js +1 -0
  60. package/dist/es/hooks/swiper/utils.js +1 -0
  61. package/dist/es/hooks/tabs/TabBarItem.js +1 -0
  62. package/dist/es/hooks/tabs/useTabsInternals.js +1 -0
  63. package/dist/es/utils/compare.js +1 -1
  64. package/dist/types/components/form/Form.d.ts +1 -1
  65. package/dist/types/components/picker/Picker.d.ts +1 -1
  66. package/dist/types/hooks/calendar/utils.d.ts +1 -0
  67. package/dist/types/hooks/cascader/utils.d.ts +1 -0
  68. package/dist/types/hooks/dialog/ActionButton.d.ts +1 -0
  69. package/dist/types/hooks/field/renderers.d.ts +1 -0
  70. package/dist/types/hooks/form/utils.d.ts +1 -0
  71. package/dist/types/hooks/number-keyboard/utils.d.ts +1 -0
  72. package/dist/types/hooks/picker/normalize.d.ts +1 -0
  73. package/dist/types/hooks/picker/value.d.ts +1 -0
  74. package/dist/types/hooks/popup/utils.d.ts +1 -0
  75. package/dist/types/hooks/slider/utils.d.ts +1 -0
  76. package/dist/types/hooks/swiper/utils.d.ts +1 -0
  77. package/dist/types/hooks/tabs/TabBarItem.d.ts +1 -0
  78. package/dist/types/hooks/tabs/useTabsInternals.d.ts +1 -0
  79. package/dist/types/utils/compare.d.ts +1 -1
  80. package/package.json +109 -109
@@ -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 a in o)({}).hasOwnProperty.call(o,a)&&(e[a]=o[a])}return e},_extends.apply(null,arguments)}import React,{useCallback,useEffect,useRef,useState}from"react";import{FlatList,Pressable,Text,View,useWindowDimensions}from"react-native";import{Checked,Cross}from"react-native-system-icon";import{useControllableValue}from"../../hooks";import{shallowEqualArray,renderTextOrNode}from"../../utils";import{isFunction,isNumber,isText}from"../../utils/validate";import Popup from"../popup";import Tabs from"../tabs";import{useLocale}from"../config-provider/useLocale";import{useCascaderTokens}from"./tokens";import{useCascaderExtend}from"./useCascaderExtend";const getFieldKeys=e=>({textKey:e?.text??"text",valueKey:e?.value??"value",childrenKey:e?.children??"children"}),resolveRows=(e=[],t,o)=>{const a=[];let n=e;return o.forEach(e=>{if(!n?.length)return;const o=n.find(o=>o[t.valueKey]===e);o&&(a.push(o),n=o[t.childrenKey]??[])}),a},CascaderImpl=e=>{const{tokensOverride:t,options:o=[],title:a,placeholder:n,activeColor:l,fieldNames:i,optionRender:r,showHeader:s,closeable:c,closeIcon:d,onChange:u,onClose:p,onFinish:g,onClickTab:y,onTabChange:h,swipeable:m,style:b,testID:f,children:C,poppable:v,visible:R,defaultVisible:x,onVisibleChange:T,closeOnClickOverlay:k,closeOnFinish:E,popupPlacement:S,popupRound:w,popupProps:P,loadingText:z,...I}=e,O=useLocale(),V=useCascaderTokens(t),L=a??O?.vanCascader?.placeholder??V.defaults.title,K=n??O?.vanCascader?.placeholder??V.defaults.placeholder,N=l??V.colors.tabActive,H=s??V.defaults.showHeader,A=m??V.defaults.swipeable,F=v??V.defaults.poppable,W=k??V.defaults.closeOnClickOverlay,B=E??V.defaults.closeOnFinish,D=S??V.defaults.popupPlacement,_=w??V.defaults.popupRound,j=z??V.defaults.loadingText,[M,q]=useControllableValue(e,{defaultValue:[],trigger:"onChange"}),$=getFieldKeys(i),G=Array.isArray(M)?M:[],[J,Q]=useState(G),U=c??V.defaults.closeable,[X,Y]=useControllableValue(e,{defaultValue:!1,valuePropName:"visible",defaultValuePropName:"defaultVisible",trigger:"onVisibleChange"}),Z=F?J:G,{tabs:ee,items:te,depth:oe}=useCascaderExtend(o,$,Z),{width:ae}=useWindowDimensions(),[ne,le]=useState(0),ie=useCallback(e=>{const t=e.nativeEvent.layout.width;t&&le(e=>e===t?e:t)},[]),re=resolveRows(o,$,G),[se,ce]=useState(0);useEffect(()=>{let e=Array.isArray(Z)?Z.length:0;e>=oe&&(e=Math.max(oe-1,0)),ce(t=>t===e?t:e)},[Z.length,oe]),useEffect(()=>{F&&X||Q(e=>shallowEqualArray(e,G)?e:G)},[G,F,X]);const de=useCallback(()=>{F&&!X&&(Q(e=>shallowEqualArray(e,G)?e:G),Y(!0))},[G,F,X,Y]),ue=useRef(p),pe=useRef(u),ge=useRef(g),ye=useRef(y),he=useRef(h);ue.current=p,pe.current=u,ge.current=g,ye.current=y,he.current=h;const me=useCallback(e=>{F&&X&&(Y(!1),e&&ue.current?.())},[F,X,Y]),be=useCallback(()=>{F&&(X?me(!0):de())},[me,de,F,X]),fe=isFunction(C),Ce=fe?C:null,ve=useCallback(e=>{const t=isNumber(e.index)?e.index:Number(e.name);if(Number.isNaN(t))return;const o=te[t]?.[$.textKey];ye.current?.(t,isText(o)?String(o):K)},[te,$.textKey,K]),Re=useCallback((e,t)=>{const o=isNumber(t)?t:Number(e);Number.isNaN(o)||(ce(o),he.current?.(o))},[]),xe=useCallback((e,t)=>{if(e.disabled)return;const a=e[$.valueKey];if(null==a)return;const n=[...(F?J:G).slice(0,t),a],l=resolveRows(o,$,n),i=e[$.childrenKey]??[],r=Object.prototype.hasOwnProperty.call(e,$.childrenKey)&&!i.length,s=n.length>=oe,c=!i.length&&!r;F?(Q(n),pe.current?.(n,l)):q(n,l),(c||s)&&(F&&(q(n,l),B&&me(!0)),ge.current?.(n,l))},[G,B,me,oe,$,o,J,F,q]),Te=useCallback(e=>{if(e<=0)return K;const t=te[e-1];if(!t)return K;if(!Object.prototype.hasOwnProperty.call(t,$.childrenKey))return K;return 0===(t[$.childrenKey]??[]).length&&Z.length===e?j:K},[Z.length,te,$.childrenKey,j,K]),ke=F||fe?null:C,Ee=React.createElement(View,_extends({testID:f,style:[V.layout.container,{backgroundColor:V.colors.background},b]},I),H?React.createElement(View,{style:[V.layout.header,{height:V.sizing.headerHeight,paddingHorizontal:V.spacing.headerPaddingHorizontal}]},renderTextOrNode(L,[V.layout.title,{color:V.colors.headerText,fontSize:V.typography.titleSize,fontWeight:V.typography.titleWeight}]),U?React.createElement(Pressable,{hitSlop:8,onPress:()=>{F?me(!0):ue.current?.()},style:[V.layout.closeButton,{marginLeft:V.spacing.closeButtonMarginLeft}],accessibilityRole:"button",accessibilityLabel:O?.vanCascader?.close??"Close"},d??(e=>React.createElement(Cross,{size:V.sizing.closeIconSize,fill:e.pressed?V.colors.closeIconActive:V.colors.closeIcon,color:e.pressed?V.colors.closeIconActive:V.colors.closeIcon}))):null):null,(()=>{if(!ee.length)return React.createElement(CascaderOptionList,{optionList:[],tabIndex:0,selectedValue:Z[0],activeColor:N,keys:$,optionRender:r,onSelect:xe,tokens:V,emptyText:Te(0)});const e=!!A,t=ne||ae||void 0,o={height:V.sizing.headerHeight,paddingHorizontal:V.spacing.tabNavPaddingHorizontal,paddingVertical:V.spacing.tabNavPaddingVertical,backgroundColor:V.colors.background};return React.createElement(View,{style:V.layout.tabsWrapper,onLayout:ie},React.createElement(Tabs,{style:t?{width:t}:void 0,active:se,onChange:Re,onClickTab:ve,align:"center",swipeable:e,swipeThreshold:0,scrollable:!0,animated:!0,duration:300,color:N,lineHeight:V.sizing.indicatorHeight,titleActiveColor:V.colors.tabText,titleInactiveColor:V.colors.tabInactive,tabBarStyle:o,tabStyle:[V.layout.tabsItem,{paddingHorizontal:V.spacing.tabPaddingHorizontal}],titleStyle:[V.layout.tabsTitle,{fontSize:V.typography.tabsTitleSize}],contentStyle:e?void 0:V.layout.tabsContentStatic},ee.map((e,t)=>{const o=te[t],a=isText(o?.[$.textKey])?String(o?.[$.textKey]):"",n=!a;return React.createElement(Tabs.TabPane,{key:t,name:t,title:e=>React.createElement(Text,{style:[V.layout.tabTitleNode,{color:n?V.colors.tabInactive:V.colors.tabText,fontWeight:n?V.typography.tabTitlePlaceholderWeight:V.typography.tabTitleWeight}]},n?K:a)},React.createElement(CascaderOptionList,{optionList:e,tabIndex:t,selectedValue:Z[t],activeColor:N,keys:$,optionRender:r,onSelect:xe,tokens:V,emptyText:Te(t)}))})))})(),ke?React.createElement(View,{style:[V.layout.inlineChildren,{paddingVertical:V.spacing.inlineChildrenPaddingVertical,paddingHorizontal:V.spacing.headerPaddingHorizontal}]},ke):null);if(!F)return Ee;const{closeOnOverlayPress:Se,overlay:we,onOpen:Pe,onOpened:ze,onClose:Ie,onClosed:Oe,...Ve}=P??{},Le=useRef(Ie);Le.current=Ie;const Ke=useCallback(()=>{Le.current?.(),me(!0)},[me]),Ne={open:de,close:()=>me(!0),toggle:be},He=useCallback(e=>{if(!React.isValidElement(e))return e;const t=e.props,o=()=>{t.onPress?.(),t.onClick?.(),de()};return React.cloneElement(e,{onPress:o,onClick:o})},[de])(Ce?Ce(G,re,Ne):fe?null:C||null);return React.createElement(React.Fragment,null,He,React.createElement(Popup,_extends({visible:X,placement:D,round:_,closeOnOverlayPress:Se??W,overlay:we??!0,safeAreaInsetTop:null!=Ve?.safeAreaInsetTop?Ve.safeAreaInsetTop:H&&U,safeAreaInsetBottom:null!=Ve?.safeAreaInsetBottom?Ve.safeAreaInsetBottom:"bottom"===D,onOpen:Pe,onOpened:ze,onClose:Ke,onClosed:Oe},Ve,{style:{paddingLeft:0,paddingRight:0}}),Ee))},CascaderOptionItem=React.memo(({option:e,tabIndex:t,selected:o,activeColor:a,keys:n,optionRender:l,onSelect:i,tokens:r})=>{const s=e[n.valueKey],c=e[n.textKey],d=!!e.disabled,u=e.color??r.colors.optionText,p=d?r.colors.optionDisabled:o?e.color??a:u,g=[r.layout.optionText,{color:p,fontSize:r.typography.optionTextSize},o?{fontWeight:r.typography.optionTextActiveWeight}:null],y=l?l({option:e,selected:o}):renderTextOrNode(c,g),h=isText(y)?renderTextOrNode(y,g):y;return React.createElement(Pressable,{testID:`cascader-option-${t}-${String(s)}`,style:({pressed:e})=>[r.layout.option,{minHeight:r.sizing.optionMinHeight,paddingVertical:r.spacing.optionPaddingVertical,paddingHorizontal:r.spacing.optionPaddingHorizontal},e&&!d&&{backgroundColor:r.colors.optionActiveBackground}],onPress:()=>i(e,t),disabled:d},React.createElement(View,{style:r.layout.optionContent},React.createElement(View,{style:[r.layout.optionLabel,{marginRight:r.spacing.optionLabelMarginRight}]},h),o?React.createElement(Checked,{size:r.sizing.selectedIconSize,fill:a,color:a}):null))}),CascaderOptionList=React.memo(({optionList:e,tabIndex:t,selectedValue:o,activeColor:a,keys:n,optionRender:l,onSelect:i,tokens:r,emptyText:s})=>{const c=useCallback(({item:e})=>React.createElement(CascaderOptionItem,{option:e,tabIndex:t,selected:o===e[n.valueKey],activeColor:a,keys:n,optionRender:l,onSelect:i,tokens:r}),[a,n,i,l,o,t,r]),d=useCallback(e=>String(e[n.valueKey]),[n.valueKey]);return e.length?React.createElement(FlatList,{data:e,style:[r.layout.optionList,{height:r.sizing.optionListHeight}],contentContainerStyle:{paddingTop:r.spacing.optionListPaddingTop,paddingBottom:r.spacing.optionListPaddingBottom},showsVerticalScrollIndicator:!1,renderItem:c,keyExtractor:d,removeClippedSubviews:!0,initialNumToRender:20,windowSize:5}):React.createElement(View,{style:[r.layout.optionList,{height:r.sizing.optionListHeight}]},React.createElement(Text,{style:[r.layout.empty,{color:r.colors.placeholder,paddingVertical:r.spacing.emptyPaddingVertical,fontSize:r.typography.emptyTextSize}]},s))}),Cascader=React.memo(CascaderImpl);export default Cascader;
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 a in o)({}).hasOwnProperty.call(o,a)&&(e[a]=o[a])}return e},_extends.apply(null,arguments)}import React,{useCallback,useEffect,useRef,useState}from"react";import{FlatList,Pressable,Text,View,useWindowDimensions}from"react-native";import{Checked,Cross}from"react-native-system-icon";import{useControllableValue}from"../../hooks";import{shallowEqualArray,renderTextOrNode}from"../../utils";import{isFunction,isNumber,isText}from"../../utils/validate";import Popup from"../popup";import Tabs from"../tabs";import{useLocale}from"../config-provider/useLocale";import{useCascaderTokens}from"./tokens";import{useCascaderExtend}from"./useCascaderExtend";import{getFieldKeys,resolveRows}from"../../hooks/cascader/utils";const CascaderImpl=e=>{const{tokensOverride:t,options:o=[],title:a,placeholder:n,activeColor:l,fieldNames:i,optionRender:r,showHeader:s,closeable:c,closeIcon:d,onChange:u,onClose:p,onFinish:g,onClickTab:y,onTabChange:m,swipeable:h,style:b,testID:f,children:C,poppable:v,visible:R,defaultVisible:x,onVisibleChange:k,closeOnClickOverlay:T,closeOnFinish:E,popupPlacement:S,popupRound:w,popupProps:P,loadingText:z,...I}=e,O=useLocale(),V=useCascaderTokens(t),L=a??O?.vanCascader?.placeholder??V.defaults.title,N=n??O?.vanCascader?.placeholder??V.defaults.placeholder,H=l??V.colors.tabActive,A=s??V.defaults.showHeader,K=h??V.defaults.swipeable,F=v??V.defaults.poppable,W=T??V.defaults.closeOnClickOverlay,B=E??V.defaults.closeOnFinish,D=S??V.defaults.popupPlacement,M=w??V.defaults.popupRound,_=z??V.defaults.loadingText,[j,q]=useControllableValue(e,{defaultValue:[],trigger:"onChange"}),$=getFieldKeys(i),G=Array.isArray(j)?j:[],[J,Q]=useState(G),U=c??V.defaults.closeable,[X,Y]=useControllableValue(e,{defaultValue:!1,valuePropName:"visible",defaultValuePropName:"defaultVisible",trigger:"onVisibleChange"}),Z=F?J:G,{tabs:ee,items:te,depth:oe}=useCascaderExtend(o,$,Z),{width:ae}=useWindowDimensions(),[ne,le]=useState(0),ie=useCallback(e=>{const t=e.nativeEvent.layout.width;t&&le(e=>e===t?e:t)},[]),re=resolveRows(o,$,G),[se,ce]=useState(0);useEffect(()=>{const e=ee.length;let t=Math.max(e-1,0);t>=oe&&(t=Math.max(oe-1,0)),ce(e=>e===t?e:t)},[ee.length,oe]),useEffect(()=>{F&&X||Q(e=>shallowEqualArray(e,G)?e:G)},[G,F,X]);const de=useCallback(()=>{F&&!X&&(Q(e=>shallowEqualArray(e,G)?e:G),Y(!0))},[G,F,X,Y]),ue=useRef(p),pe=useRef(u),ge=useRef(g),ye=useRef(y),me=useRef(m);ue.current=p,pe.current=u,ge.current=g,ye.current=y,me.current=m;const he=useCallback(e=>{F&&X&&(Y(!1),e&&ue.current?.())},[F,X,Y]),be=useCallback(()=>{F&&(X?he(!0):de())},[he,de,F,X]),fe=isFunction(C),Ce=fe?C:null,ve=useCallback(e=>{const t=isNumber(e.index)?e.index:Number(e.name);if(Number.isNaN(t))return;const o=te[t]?.[$.textKey];ye.current?.(t,isText(o)?String(o):N)},[te,$.textKey,N]),Re=useCallback((e,t)=>{const o=isNumber(t)?t:Number(e);Number.isNaN(o)||(ce(o),me.current?.(o))},[]),xe=useCallback((e,t)=>{if(e.disabled)return;const a=e[$.valueKey];if(null==a)return;const n=[...(F?J:G).slice(0,t),a],l=resolveRows(o,$,n),i=e[$.childrenKey]??[],r=Object.prototype.hasOwnProperty.call(e,$.childrenKey)&&!i.length,s=n.length>=oe,c=!i.length&&!r;F?(Q(n),pe.current?.(n,l)):q(n,l),(c||s)&&(F&&(q(n,l),B&&he(!0)),ge.current?.(n,l))},[G,B,he,oe,$,o,J,F,q]),ke=useCallback(e=>{if(e<=0)return N;const t=te[e-1];if(!t)return N;if(!Object.prototype.hasOwnProperty.call(t,$.childrenKey))return N;return 0===(t[$.childrenKey]??[]).length&&Z.length===e?_:N},[Z.length,te,$.childrenKey,_,N]),Te=F||fe?null:C,Ee=React.createElement(View,_extends({testID:f,style:[V.layout.container,{backgroundColor:V.colors.background},b]},I),A?React.createElement(View,{style:[V.layout.header,{height:V.sizing.headerHeight,paddingHorizontal:V.spacing.headerPaddingHorizontal}]},renderTextOrNode(L,[V.layout.title,{color:V.colors.headerText,fontSize:V.typography.titleSize,fontWeight:V.typography.titleWeight}]),U?React.createElement(Pressable,{hitSlop:8,onPress:()=>{F?he(!0):ue.current?.()},style:[V.layout.closeButton,{marginLeft:V.spacing.closeButtonMarginLeft}],accessibilityRole:"button",accessibilityLabel:O?.vanCascader?.close??"Close"},d??(e=>React.createElement(Cross,{size:V.sizing.closeIconSize,fill:e.pressed?V.colors.closeIconActive:V.colors.closeIcon,color:e.pressed?V.colors.closeIconActive:V.colors.closeIcon}))):null):null,(()=>{if(!ee.length)return React.createElement(CascaderOptionList,{optionList:[],tabIndex:0,selectedValue:Z[0],activeColor:H,keys:$,optionRender:r,onSelect:xe,tokens:V,emptyText:ke(0)});const e=!!K,t=ne||ae||void 0,o={height:V.sizing.headerHeight,paddingHorizontal:V.spacing.tabNavPaddingHorizontal,paddingVertical:V.spacing.tabNavPaddingVertical,backgroundColor:V.colors.background};return React.createElement(View,{style:V.layout.tabsWrapper,onLayout:ie},React.createElement(Tabs,{style:t?{width:t}:void 0,active:se,onChange:Re,onClickTab:ve,align:"center",swipeable:e,swipeThreshold:0,scrollable:!0,animated:!0,duration:300,color:H,lineHeight:V.sizing.indicatorHeight,titleActiveColor:V.colors.tabText,titleInactiveColor:V.colors.tabInactive,tabBarStyle:o,tabStyle:[V.layout.tabsItem,{paddingHorizontal:V.spacing.tabPaddingHorizontal}],titleStyle:[V.layout.tabsTitle,{fontSize:V.typography.tabsTitleSize}],contentStyle:e?void 0:V.layout.tabsContentStatic},ee.map((e,t)=>{const o=te[t],a=isText(o?.[$.textKey])?String(o?.[$.textKey]):"",n=!a;return React.createElement(Tabs.TabPane,{key:t,name:t,title:e=>React.createElement(Text,{style:[V.layout.tabTitleNode,{color:n?V.colors.tabInactive:V.colors.tabText,fontWeight:n?V.typography.tabTitlePlaceholderWeight:V.typography.tabTitleWeight}]},n?N:a)},React.createElement(CascaderOptionList,{optionList:e,tabIndex:t,selectedValue:Z[t],activeColor:H,keys:$,optionRender:r,onSelect:xe,tokens:V,emptyText:ke(t)}))})))})(),Te?React.createElement(View,{style:[V.layout.inlineChildren,{paddingVertical:V.spacing.inlineChildrenPaddingVertical,paddingHorizontal:V.spacing.headerPaddingHorizontal}]},Te):null);if(!F)return Ee;const{closeOnOverlayPress:Se,overlay:we,onOpen:Pe,onOpened:ze,onClose:Ie,onClosed:Oe,...Ve}=P??{},Le=useRef(Ie);Le.current=Ie;const Ne=useCallback(()=>{Le.current?.(),he(!0)},[he]),He={open:de,close:()=>he(!0),toggle:be},Ae=useCallback(e=>{if(!React.isValidElement(e))return e;const t=e.props,o=()=>{t.onPress?.(),t.onClick?.(),de()};return React.cloneElement(e,{onPress:o,onClick:o})},[de])(Ce?Ce(G,re,He):fe?null:C||null);return React.createElement(React.Fragment,null,Ae,React.createElement(Popup,_extends({visible:X,placement:D,round:M,closeOnOverlayPress:Se??W,overlay:we??!0,safeAreaInsetTop:null!=Ve?.safeAreaInsetTop?Ve.safeAreaInsetTop:A&&U,safeAreaInsetBottom:null!=Ve?.safeAreaInsetBottom?Ve.safeAreaInsetBottom:"bottom"===D,onOpen:Pe,onOpened:ze,onClose:Ne,onClosed:Oe},Ve,{style:{paddingLeft:0,paddingRight:0}}),Ee))},CascaderOptionItem=React.memo(({option:e,tabIndex:t,selected:o,activeColor:a,keys:n,optionRender:l,onSelect:i,tokens:r})=>{const s=e[n.valueKey],c=e[n.textKey],d=!!e.disabled,u=e.color??r.colors.optionText,p=d?r.colors.optionDisabled:o?e.color??a:u,g=[r.layout.optionText,{color:p,fontSize:r.typography.optionTextSize},o?{fontWeight:r.typography.optionTextActiveWeight}:null],y=l?l({option:e,selected:o}):renderTextOrNode(c,g),m=isText(y)?renderTextOrNode(y,g):y;return React.createElement(Pressable,{testID:`cascader-option-${t}-${String(s)}`,style:({pressed:e})=>[r.layout.option,{minHeight:r.sizing.optionMinHeight,paddingVertical:r.spacing.optionPaddingVertical,paddingHorizontal:r.spacing.optionPaddingHorizontal},e&&!d&&{backgroundColor:r.colors.optionActiveBackground}],onPress:()=>i(e,t),disabled:d},React.createElement(View,{style:r.layout.optionContent},React.createElement(View,{style:[r.layout.optionLabel,{marginRight:r.spacing.optionLabelMarginRight}]},m),o?React.createElement(Checked,{size:r.sizing.selectedIconSize,fill:a,color:a}):null))}),CascaderOptionList=React.memo(({optionList:e,tabIndex:t,selectedValue:o,activeColor:a,keys:n,optionRender:l,onSelect:i,tokens:r,emptyText:s})=>{const c=useCallback(({item:e})=>React.createElement(CascaderOptionItem,{option:e,tabIndex:t,selected:o===e[n.valueKey],activeColor:a,keys:n,optionRender:l,onSelect:i,tokens:r}),[a,n,i,l,o,t,r]),d=useCallback(e=>String(e[n.valueKey]),[n.valueKey]);return e.length?React.createElement(FlatList,{data:e,style:[r.layout.optionList,{height:r.sizing.optionListHeight}],contentContainerStyle:{paddingTop:r.spacing.optionListPaddingTop,paddingBottom:r.spacing.optionListPaddingBottom},showsVerticalScrollIndicator:!1,renderItem:c,keyExtractor:d,removeClippedSubviews:!0,initialNumToRender:20,windowSize:5}):React.createElement(View,{style:[r.layout.optionList,{height:r.sizing.optionListHeight}]},React.createElement(Text,{style:[r.layout.empty,{color:r.colors.placeholder,paddingVertical:r.spacing.emptyPaddingVertical,fontSize:r.typography.emptyTextSize}]},s))}),Cascader=React.memo(CascaderImpl);export default Cascader;
@@ -1 +1 @@
1
- const getDepth=(e,t)=>{let n=1;const r=(e,c)=>{e?.length&&(c>n&&(n=c),e.forEach(e=>{Object.prototype.hasOwnProperty.call(e,t)&&c+1>n&&(n=c+1);const l=e[t];l?.length&&r(l,c+1)}))};return r(e,1),n};export const useCascaderExtend=(e=[],t,n)=>{const r=getDepth(e,t.childrenKey),c=n?.length?n.reduce((e,r,c)=>{if(null==r)return e;const l=e[c];if(!l)return e;const s=l.find(e=>e[t.valueKey]===n[c])?.[t.childrenKey];return s&&e.push(s),e},[e]):[e],l=n?.length?n.map((e,n)=>c[n]?.find(n=>n[t.valueKey]===e)):[];return{tabs:c,items:l,depth:r}};
1
+ const getDepth=(e,t)=>{let n=1;const r=(e,l)=>{e?.length&&(l>n&&(n=l),e.forEach(e=>{Object.prototype.hasOwnProperty.call(e,t)&&l+1>n&&(n=l+1);const c=e[t];c?.length&&r(c,l+1)}))};return r(e,1),n};export const useCascaderExtend=(e=[],t,n)=>{const r=getDepth(e,t.childrenKey),l=[e],c=[];if(n?.length){let r=e;for(let e=0;e<n.length;e+=1){const o=n[e];if(null==o||!r?.length)break;const h=r.find(e=>e[t.valueKey]===o);if(!h)break;c.push(h);if(!Object.prototype.hasOwnProperty.call(h,t.childrenKey))break;const s=h[t.childrenKey]??[];l.push(s),r=s}}return{tabs:l,items:c,depth:r}};
@@ -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}from"react";import{ActivityIndicator,Animated,Easing,Platform,Pressable,StyleSheet,View}from"react-native";import{useLocale}from"../config-provider/useLocale";import{nativeDriverEnabled}from"../../platform";import{useReducedMotion}from"../../hooks/animation";import{createHairlineView}from"../../utils/hairline";import{isPromiseLike}from"../../utils/promise";import{isNumber,isValidNode}from"../../utils/validate";import{renderTextOrNode}from"../../utils";import{Close}from"react-native-system-icon";import Button from"../button";import Popup from"../popup";import{useDialogTokens}from"./tokens";const ActionButton=e=>{const{text:t,color:o,tokens:n,dividerPosition:i="none",loading:r,disabled:a,onPress:s}=e,l=o??n.colors.confirm,c="none"===i?null:[S.btnDiv,{width:0},createHairlineView({position:i,color:n.colors.divider,top:0,bottom:0,[i]:0})];return React.createElement(Pressable,{accessibilityRole:"button",disabled:a||r,style:({pressed:e})=>[S.btn,{height:n.sizes.actionHeight,opacity:!e||a||r?1:.8}],onPress:a||r?void 0:s},c&&React.createElement(View,{style:c,pointerEvents:"none"}),r?React.createElement(ActivityIndicator,{size:"small",color:l}):renderTextOrNode(t??"",{color:l,fontFamily:n.typography.fontFamily,fontSize:n.typography.actionSize,fontWeight:n.typography.actionWeight}))},DialogImpl=e=>{const t=useLocale(),{visible:o,title:n,message:i,messageAlign:r="center",theme:a="default",width:s,closeable:l=!1,closeIcon:c,overlay:d=!0,overlayStyle:g,overlayTestID:p="dialog-overlay",closeOnBackPress:m=!1,closeOnPopstate:u=!0,closeOnOverlayPress:f=!1,closeOnClickOverlay:y=!1,onClickOverlay:b,onClickCloseIcon:h,beforeClose:C,showCancelButton:v=!1,showConfirmButton:P=!0,cancelButtonText:x,cancelButtonColor:w,cancelProps:E,confirmButtonText:R,confirmButtonColor:k,confirmProps:B,footer:z,contentStyle:I,titleStyle:O,messageStyle:H,tokensOverride:V,style:D,children:T,onCancel:L,onConfirm:A,onClose:F,onClosed:W,...N}=e,M=useDialogTokens(V),q=useReducedMotion(),j=isValidNode(n),G=isValidNode(T),_=isValidNode(i)||G,J=v||P,K="round-button"===a,Q=E?.loading,U=B?.loading,X=x??t.cancel,Y=R??t.confirm,Z=useRef({seq:0,beforeClose:C,onClose:F,onCancel:L,onConfirm:A,onClickCloseIcon:h,cancelLoad:Q,confirmLoad:U});Object.assign(Z.current,{beforeClose:C,onClose:F,onCancel:L,onConfirm:A,onClickCloseIcon:h,cancelLoad:Q,confirmLoad:U});const $=useCallback((e,t)=>{const o=Z.current;o.seq+=1;const n=o.seq,i=o.beforeClose;if(!i)return void t?.();let r;try{r=i(e)}catch{return void t?.()}!1!==r&&(isPromiseLike(r)?r.then(e=>{!1!==e&&Z.current.seq===n&&t?.()}).catch(()=>{Z.current.seq===n&&t?.()}):t?.())},[]),ee=useCallback(()=>{Z.current.onClickCloseIcon?.(),$("close",()=>Z.current.onClose?.())},[$]),te=useCallback(()=>{Z.current.cancelLoad||$("cancel",()=>Z.current.onCancel?.())},[$]),oe=useCallback(()=>{Z.current.confirmLoad||$("confirm",()=>Z.current.onConfirm?.())},[$]),ne=useRef(new Animated.Value(.7)).current,ie=useRef(null);useEffect(()=>{ie.current?.stop(),ne.setValue(o?.7:1);const e=Animated.timing(ne,{toValue:o?1:.9,duration:q?0:300,easing:o?Easing.out(Easing.cubic):Easing.in(Easing.cubic),useNativeDriver:nativeDriverEnabled,isInteraction:!1});ie.current=e,e.start()},[ne,o,q]),useEffect(()=>()=>{ie.current?.stop()},[]);const re={transform:[{scale:ne}]},ae=useMemo(()=>j?{wrap:[S.titleWrap,{paddingTop:_?M.spacing.titlePaddingTop:M.spacing.titleIsolatedPadding,paddingBottom:_?0:M.spacing.titleIsolatedPadding,paddingHorizontal:_?M.spacing.paddingHorizontal:0,marginBottom:_?M.spacing.titleGap:0}],text:[S.title,{color:M.colors.title,fontFamily:M.typography.fontFamily,fontSize:M.typography.titleSize,lineHeight:M.typography.titleLineHeight,fontWeight:M.typography.titleWeight},O]}:null,[j,_,O,M]),se=useMemo(()=>({text:[S.msg,{color:K?M.colors.title:M.colors.message,fontFamily:M.typography.fontFamily,fontSize:M.typography.messageSize,lineHeight:M.typography.messageLineHeight,textAlign:r},H],content:G?null:{alignItems:"center"===r?"center":"left"===r?"flex-start":"flex-end"},wrap:[S.msgWrap,{paddingTop:j?M.spacing.messagePaddingTop:M.spacing.messagePadding,paddingBottom:K?M.spacing.roundFooterPadding:M.spacing.messagePadding,paddingHorizontal:M.spacing.messagePaddingHorizontal}]}),[K,r,H,G,j,M]),le=useMemo(()=>({border:[S.footerBorder,createHairlineView({position:"top",color:M.colors.divider,left:0,right:0,top:0})],round:[S.roundFooter,{paddingTop:M.spacing.messagePaddingTop,paddingHorizontal:M.spacing.messagePaddingHorizontal,paddingBottom:M.spacing.roundFooterPadding}]}),[M]),ce=useMemo(()=>{const e=s?isNumber(s)?{width:s}:{width:String(s)}:{width:"90%",maxWidth:M.sizes.maxWidth};return[{backgroundColor:M.colors.background,borderRadius:M.sizes.borderRadius,padding:0},e,D]},[s,D,M]),de=useCallback(()=>{const e=Z.current.beforeClose;if(!e)return!0;try{return e("close")}catch{return!0}},[]),ge=useMemo(()=>J&&React.createElement(View,{style:le.round},v&&React.createElement(View,{style:[S.roundBtnWrap,P&&{marginRight:M.spacing.roundFooterGap}]},React.createElement(Button,{block:!0,round:!0,type:"warning",text:X,color:w,loading:Q,disabled:E?.disabled,onPress:te,style:{minHeight:M.sizes.roundButtonHeight}})),P&&React.createElement(View,{style:[S.roundBtnWrap,v&&{marginLeft:M.spacing.roundFooterGap}]},React.createElement(Button,{block:!0,round:!0,type:"danger",text:Y,color:k,loading:U,disabled:B?.disabled,onPress:oe,style:{minHeight:M.sizes.roundButtonHeight}}))),[w,Q,E?.disabled,X,k,U,B?.disabled,Y,te,oe,J,le.round,v,P,M.sizes.roundButtonHeight,M.spacing.roundFooterGap]),pe=useMemo(()=>J&&React.createElement(View,{style:S.footer},React.createElement(View,{style:le.border,pointerEvents:"none"}),v&&React.createElement(ActionButton,{tokens:M,text:X,color:w??M.colors.cancel,dividerPosition:"none",loading:Q,disabled:E?.disabled,onPress:te}),P&&React.createElement(ActionButton,{tokens:M,text:Y,color:k??M.colors.confirm,dividerPosition:v?"left":"none",loading:U,disabled:B?.disabled,onPress:oe})),[w,Q,E?.disabled,X,k,U,B?.disabled,Y,le.border,te,oe,J,v,P,M]),me=z??(K?ge:pe);return React.createElement(Popup,_extends({visible:o,placement:"center",round:!0,overlay:d,overlayStyle:g,overlayTestID:p,closeOnBackPress:m,closeOnPopstate:u,closeOnClickOverlay:f||y,onClickOverlay:b,beforeClose:de,onClose:F,onClosed:W,contentAnimationStyle:re,style:ce,accessibilityRole:"android"===Platform.OS?"alert":"alertdialog",accessibilityLabel:"string"==typeof n?n:void 0},N),l&&React.createElement(Pressable,{style:[S.closeIcon,{top:M.spacing.paddingTop/2,right:M.spacing.paddingHorizontal/2,padding:M.spacing.closeIconPadding}],hitSlop:{top:8,bottom:8,left:8,right:8},onPress:ee},c??React.createElement(Close,{size:M.sizes.closeSize,fill:M.colors.closeIcon,color:M.colors.closeIcon})),ae&&React.createElement(View,{style:ae.wrap},renderTextOrNode(n,ae.text)),_&&React.createElement(View,{style:[S.content,se.content,I]},G?T:React.createElement(View,{style:se.wrap},renderTextOrNode(i,se.text))),me)},S=StyleSheet.create({titleWrap:{alignItems:"center"},title:{textAlign:"center"},content:{width:"100%"},msg:{textAlign:"center"},footer:{flexDirection:"row",position:"relative"},footerBorder:{position:"absolute",top:0,left:0,right:0,height:0},btn:{flex:1,alignItems:"center",justifyContent:"center"},btnDiv:{position:"absolute",pointerEvents:"none"},msgWrap:{width:"100%"},roundFooter:{width:"100%",flexDirection:"row"},roundBtnWrap:{flex:1},closeIcon:{position:"absolute",zIndex:1}});export const Dialog=React.memo(DialogImpl);Dialog.displayName="Dialog";export default Dialog;
1
+ function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var o=1;o<arguments.length;o++){var t=arguments[o];for(var n in t)({}).hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e},_extends.apply(null,arguments)}import React,{useCallback,useEffect,useMemo,useRef}from"react";import{Animated,Easing,Platform,Pressable,StyleSheet,View}from"react-native";import{useLocale}from"../config-provider/useLocale";import{nativeDriverEnabled}from"../../platform";import{useReducedMotion}from"../../hooks/animation";import{createHairlineView}from"../../utils/hairline";import{isPromiseLike}from"../../utils/promise";import{isNumber,isValidNode}from"../../utils/validate";import{renderTextOrNode}from"../../utils";import{Close}from"react-native-system-icon";import Button from"../button";import Popup from"../popup";import{useDialogTokens}from"./tokens";import{ActionButton}from"../../hooks/dialog/ActionButton";const DialogImpl=e=>{const o=useLocale(),{visible:t,title:n,message:i,messageAlign:r="center",theme:a="default",width:l,closeable:s=!1,closeIcon:c,overlay:d=!0,overlayStyle:g,overlayTestID:p="dialog-overlay",closeOnBackPress:m=!1,closeOnPopstate:u=!0,closeOnOverlayPress:f=!1,closeOnClickOverlay:y=!1,onClickOverlay:b,onClickCloseIcon:h,beforeClose:C,showCancelButton:v=!1,showConfirmButton:P=!0,cancelButtonText:k,cancelButtonColor:x,cancelProps:w,confirmButtonText:B,confirmButtonColor:R,confirmProps:E,footer:O,contentStyle:z,titleStyle:I,messageStyle:H,tokensOverride:V,style:T,children:D,onCancel:L,onConfirm:A,onClose:F,onClosed:N,...W}=e,M=useDialogTokens(V),q=useReducedMotion(),G=isValidNode(n),_=isValidNode(D),j=isValidNode(i)||_,J=v||P,K="round-button"===a,Q=w?.loading,U=E?.loading,X=k??o.cancel,Y=B??o.confirm,Z=useRef({seq:0,beforeClose:C,onClose:F,onCancel:L,onConfirm:A,onClickCloseIcon:h,cancelLoad:Q,confirmLoad:U});Object.assign(Z.current,{beforeClose:C,onClose:F,onCancel:L,onConfirm:A,onClickCloseIcon:h,cancelLoad:Q,confirmLoad:U});const $=useCallback((e,o)=>{const t=Z.current;t.seq+=1;const n=t.seq,i=t.beforeClose;if(!i)return void o?.();let r;try{r=i(e)}catch{return}!1!==r&&(isPromiseLike(r)?r.then(e=>{!1!==e&&Z.current.seq===n&&o?.()}).catch(()=>{}):o?.())},[]),ee=useCallback(()=>{Z.current.onClickCloseIcon?.(),$("close",()=>Z.current.onClose?.())},[$]),oe=useCallback(()=>{Z.current.cancelLoad||$("cancel",()=>Z.current.onCancel?.())},[$]),te=useCallback(()=>{Z.current.confirmLoad||$("confirm",()=>Z.current.onConfirm?.())},[$]),ne=useRef(new Animated.Value(.7)).current,ie=useRef(null);useEffect(()=>{ie.current?.stop(),ne.setValue(t?.7:1);const e=Animated.timing(ne,{toValue:t?1:.9,duration:q?0:300,easing:t?Easing.out(Easing.cubic):Easing.in(Easing.cubic),useNativeDriver:nativeDriverEnabled,isInteraction:!1});ie.current=e,e.start()},[ne,t,q]),useEffect(()=>()=>{ie.current?.stop()},[]);const re={transform:[{scale:ne}]},ae=useMemo(()=>G?{wrap:[S.titleWrap,{paddingTop:j?M.spacing.titlePaddingTop:M.spacing.titleIsolatedPadding,paddingBottom:j?0:M.spacing.titleIsolatedPadding,paddingHorizontal:j?M.spacing.paddingHorizontal:0,marginBottom:j?M.spacing.titleGap:0}],text:[S.title,{color:M.colors.title,fontFamily:M.typography.fontFamily,fontSize:M.typography.titleSize,lineHeight:M.typography.titleLineHeight,fontWeight:M.typography.titleWeight},I]}:null,[G,j,I,M]),le=useMemo(()=>({text:[S.msg,{color:K?M.colors.title:M.colors.message,fontFamily:M.typography.fontFamily,fontSize:M.typography.messageSize,lineHeight:M.typography.messageLineHeight,textAlign:r},H],content:_?null:{alignItems:"center"===r?"center":"left"===r?"flex-start":"flex-end"},wrap:[S.msgWrap,{paddingTop:G?M.spacing.messagePaddingTop:M.spacing.messagePadding,paddingBottom:K?M.spacing.roundFooterPadding:M.spacing.messagePadding,paddingHorizontal:M.spacing.messagePaddingHorizontal}]}),[K,r,H,_,G,M]),se=useMemo(()=>({border:[S.footerBorder,createHairlineView({position:"top",color:M.colors.divider,left:0,right:0,top:0})],round:[S.roundFooter,{paddingTop:M.spacing.messagePaddingTop,paddingHorizontal:M.spacing.messagePaddingHorizontal,paddingBottom:M.spacing.roundFooterPadding}]}),[M]),ce=useMemo(()=>{const e=l?isNumber(l)?{width:l}:{width:String(l)}:{width:"90%",maxWidth:M.sizes.maxWidth};return[{backgroundColor:M.colors.background,borderRadius:M.sizes.borderRadius,padding:0},e,T]},[l,T,M]),de=useCallback(()=>{const e=Z.current.beforeClose;if(!e)return!0;try{return e("close")}catch{return!1}},[]),ge=useMemo(()=>J&&React.createElement(View,{style:se.round},v&&React.createElement(View,{style:[S.roundBtnWrap,P&&{marginRight:M.spacing.roundFooterGap}]},React.createElement(Button,{block:!0,round:!0,type:"warning",text:X,color:x,loading:Q,disabled:w?.disabled,onPress:oe,style:{minHeight:M.sizes.roundButtonHeight}})),P&&React.createElement(View,{style:[S.roundBtnWrap,v&&{marginLeft:M.spacing.roundFooterGap}]},React.createElement(Button,{block:!0,round:!0,type:"danger",text:Y,color:R,loading:U,disabled:E?.disabled,onPress:te,style:{minHeight:M.sizes.roundButtonHeight}}))),[x,Q,w?.disabled,X,R,U,E?.disabled,Y,oe,te,J,se.round,v,P,M.sizes.roundButtonHeight,M.spacing.roundFooterGap]),pe=useMemo(()=>J&&React.createElement(View,{style:S.footer},React.createElement(View,{style:se.border,pointerEvents:"none"}),v&&React.createElement(ActionButton,{tokens:M,text:X,color:x??M.colors.cancel,dividerPosition:"none",loading:Q,disabled:w?.disabled,onPress:oe}),P&&React.createElement(ActionButton,{tokens:M,text:Y,color:R??M.colors.confirm,dividerPosition:v?"left":"none",loading:U,disabled:E?.disabled,onPress:te})),[x,Q,w?.disabled,X,R,U,E?.disabled,Y,se.border,oe,te,J,v,P,M]),me=O??(K?ge:pe);return React.createElement(Popup,_extends({visible:t,placement:"center",round:!0,overlay:d,overlayStyle:g,overlayTestID:p,closeOnBackPress:m,closeOnPopstate:u,closeOnClickOverlay:f||y,onClickOverlay:b,beforeClose:de,onClose:F,onClosed:N,contentAnimationStyle:re,style:ce,accessibilityRole:"android"===Platform.OS?"alert":"alertdialog",accessibilityLabel:"string"==typeof n?n:void 0},W),s&&React.createElement(Pressable,{style:[S.closeIcon,{top:M.spacing.paddingTop/2,right:M.spacing.paddingHorizontal/2,padding:M.spacing.closeIconPadding}],hitSlop:{top:8,bottom:8,left:8,right:8},onPress:ee},c??React.createElement(Close,{size:M.sizes.closeSize,fill:M.colors.closeIcon,color:M.colors.closeIcon})),ae&&React.createElement(View,{style:ae.wrap},renderTextOrNode(n,ae.text)),j&&React.createElement(View,{style:[S.content,le.content,z]},_?D:React.createElement(View,{style:le.wrap},renderTextOrNode(i,le.text))),me)},S=StyleSheet.create({titleWrap:{alignItems:"center"},title:{textAlign:"center"},content:{width:"100%"},msg:{textAlign:"center"},footer:{flexDirection:"row",position:"relative"},footerBorder:{position:"absolute",top:0,left:0,right:0,height:0},msgWrap:{width:"100%"},roundFooter:{width:"100%",flexDirection:"row"},roundBtnWrap:{flex:1},closeIcon:{position:"absolute",zIndex:1}});export const Dialog=React.memo(DialogImpl);Dialog.displayName="Dialog";export default Dialog;
@@ -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,useState}from"react";import{Portal}from"../portal/Portal";import{deepMerge,isString,isUndefined}from"../../utils";import Dialog from"./Dialog";const runHook=async e=>{if(!e)return!0;try{return!1!==await e()}catch(e){return console.error(e),!0}},registry=new Map,defaults={default:{},show:{},alert:{},confirm:{}},requestClose=e=>{const t=registry.get(e);t?t.close?t.close():(Portal.remove(e),registry.delete(e)):Portal.remove(e)},DialogPortalInstance=({options:e,meta:t,portalKeyRef:r})=>{const[o,n]=useState(!0),s=useCallback(()=>{n(!1)},[]);useEffect(()=>{if(!r.current)return;const e=registry.get(r.current);return e&&(e.close=s),()=>{const e=registry.get(r.current??-1);e&&e.close===s&&(e.close=void 0)}},[s,r]),useEffect(()=>()=>{r.current&&registry.delete(r.current)},[r]);const a=useCallback(async(r,o)=>{await runHook(()=>e.beforeClose?.(r))&&await runHook(o)&&(("confirm"===r&&"alert"===t.mode||"confirm"===t.mode)&&t.resolve?.("confirm"===r),s())},[s,t,e.beforeClose]),l=useCallback(()=>{e.onClosed?.(),r.current&&(Portal.remove(r.current),registry.delete(r.current))},[e,r]);return React.createElement(Dialog,_extends({},e,{visible:o,onCancel:e.showCancelButton?()=>a("cancel",e.onCancel):e.onCancel,onConfirm:()=>a("confirm",e.onConfirm),onClose:()=>a("close",e.onClose),onClosed:l}))},mount=(e,t)=>{const r={current:0},o=React.createElement(DialogPortalInstance,{options:e,meta:t,portalKeyRef:r}),n=Portal.add(o);return r.current=n,registry.set(n,{key:n,options:e,meta:t}),()=>requestClose(n)},normalize=(e,t={})=>{const r={...deepMerge(deepMerge(defaults.default,defaults[e]),t),visible:!0};return isUndefined(r.showConfirmButton)&&(r.showConfirmButton=!0),r},setDefaultOptions=(e,t)=>{isString(e)?defaults[e]=deepMerge(defaults[e],t??{}):defaults.default=deepMerge(defaults.default,e)},resetDefaultOptions=e=>{e?defaults[e]={}:(defaults.default={},defaults.show={},defaults.alert={},defaults.confirm={})};export const DialogImperative={show:e=>mount(normalize("show",e),{mode:"show"}),alert:e=>new Promise(t=>{mount(normalize("alert",{...e,showCancelButton:!1}),{mode:"alert",resolve:t})}),confirm:e=>new Promise(t=>{mount(normalize("confirm",{showCancelButton:!0,...e}),{mode:"confirm",resolve:e=>t(void 0===e||e)})}),clear:()=>{registry.forEach((e,t)=>requestClose(t))},setDefaultOptions:setDefaultOptions,resetDefaultOptions:resetDefaultOptions};export const __DIALOG_STORE__={getItems:()=>Array.from(registry.values()).map(({key:e,options:t,meta:r})=>({key:e,options:t,meta:r})),close:requestClose};
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,useState}from"react";import{Portal}from"../portal/Portal";import{deepMerge,isString,isUndefined}from"../../utils";import Dialog from"./Dialog";const runHook=async e=>{if(!e)return!0;try{return!1!==await e()}catch(e){return console.error(e),!1}},registry=new Map,defaults={default:{},show:{},alert:{},confirm:{}},requestClose=e=>{const t=registry.get(e);t?t.close?t.close():(Portal.remove(e),registry.delete(e)):Portal.remove(e)},DialogPortalInstance=({options:e,meta:t,portalKeyRef:r})=>{const[o,n]=useState(!0),s=useCallback(()=>{n(!1)},[]);useEffect(()=>{if(!r.current)return;const e=registry.get(r.current);return e&&(e.close=s),()=>{const e=registry.get(r.current??-1);e&&e.close===s&&(e.close=void 0)}},[s,r]),useEffect(()=>()=>{r.current&&registry.delete(r.current)},[r]);const a=useCallback(async(r,o)=>{await runHook(()=>e.beforeClose?.(r))&&await runHook(o)&&(("confirm"===r&&"alert"===t.mode||"confirm"===t.mode)&&t.resolve?.("confirm"===r),s())},[s,t,e.beforeClose]),l=useCallback(()=>{e.onClosed?.(),r.current&&(Portal.remove(r.current),registry.delete(r.current))},[e,r]);return React.createElement(Dialog,_extends({},e,{visible:o,onCancel:e.showCancelButton?()=>a("cancel",e.onCancel):e.onCancel,onConfirm:()=>a("confirm",e.onConfirm),onClose:()=>a("close",e.onClose),onClosed:l}))},mount=(e,t)=>{const r={current:0},o=React.createElement(DialogPortalInstance,{options:e,meta:t,portalKeyRef:r}),n=Portal.add(o);return r.current=n,registry.set(n,{key:n,options:e,meta:t}),()=>requestClose(n)},normalize=(e,t={})=>{const r={...deepMerge(deepMerge(defaults.default,defaults[e]),t),visible:!0};return isUndefined(r.showConfirmButton)&&(r.showConfirmButton=!0),r},setDefaultOptions=(e,t)=>{isString(e)?defaults[e]=deepMerge(defaults[e],t??{}):defaults.default=deepMerge(defaults.default,e)},resetDefaultOptions=e=>{e?defaults[e]={}:(defaults.default={},defaults.show={},defaults.alert={},defaults.confirm={})};export const DialogImperative={show:e=>mount(normalize("show",e),{mode:"show"}),alert:e=>new Promise(t=>{mount(normalize("alert",{...e,showCancelButton:!1}),{mode:"alert",resolve:t})}),confirm:e=>new Promise(t=>{mount(normalize("confirm",{showCancelButton:!0,...e}),{mode:"confirm",resolve:e=>t(void 0===e||e)})}),clear:()=>{registry.forEach((e,t)=>requestClose(t))},setDefaultOptions:setDefaultOptions,resetDefaultOptions:resetDefaultOptions};export const __DIALOG_STORE__={getItems:()=>Array.from(registry.values()).map(({key:e,options:t,meta:r})=>({key:e,options:t,meta:r})),close:requestClose};
@@ -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";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:K,arrowDirection:Q,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 Ke=useRef(H);Ke.current=H;const Qe=useRef(ie);Qe.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&&(Ke.current?.(t),t=t.slice(0,se)),Ye(t,"onChange")},[se,z,Ye]),rt=useCallback(e=>{Fe(!0),Qe.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:K,arrowDirection:Q,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 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";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:l,description:s,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,le="left"===B||"right"===B,se="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=le?ve:re?Ee:0,Oe=useMemo(()=>{if(j)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,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(l)||isRenderable(s),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(l,[S.title,q.title],q.titleWrap),o(s,[S.desc,q.desc],q.descWrap))},[y,h,s,q,ze,l,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,le&&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 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;