@webority/mobile-ui 0.15.0 → 0.16.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/components/Accordion/Accordion.js +1 -1
- package/lib/commonjs/components/AmountSlider/AmountSlider.js +1 -1
- package/lib/commonjs/components/AnimatePresence/AnimatePresence.js +1 -1
- package/lib/commonjs/components/AppBar/AppBar.js +1 -1
- package/lib/commonjs/components/AsyncBlock/AsyncBlock.js +1 -1
- package/lib/commonjs/components/Banner/Banner.js +1 -1
- package/lib/commonjs/components/BottomSheet/BottomSheet.js +1 -1
- package/lib/commonjs/components/Button/Button.js +1 -1
- package/lib/commonjs/components/Calendar/Calendar.js +1 -1
- package/lib/commonjs/components/Card/Card.js +1 -1
- package/lib/commonjs/components/Carousel/Carousel.js +1 -1
- package/lib/commonjs/components/Chip/Chip.js +1 -1
- package/lib/commonjs/components/DatePicker/DatePicker.js +1 -1
- package/lib/commonjs/components/DateRangePicker/DateRangePicker.js +1 -1
- package/lib/commonjs/components/Drawer/Drawer.js +1 -1
- package/lib/commonjs/components/EmptyState/EmptyState.js +1 -1
- package/lib/commonjs/components/FloatingActionButton/FloatingActionButton.js +1 -1
- package/lib/commonjs/components/IconButton/IconButton.js +1 -1
- package/lib/commonjs/components/ListItem/ListItem.js +1 -1
- package/lib/commonjs/components/LoaderOverlay/LoaderOverlay.js +1 -1
- package/lib/commonjs/components/Menu/MenuSurface.js +1 -1
- package/lib/commonjs/components/MessageBubble/MessageBubble.js +1 -1
- package/lib/commonjs/components/Modal/Modal.js +1 -1
- package/lib/commonjs/components/OTPInput/OTPInput.js +1 -1
- package/lib/commonjs/components/OnboardingPager/OnboardingPager.js +1 -1
- package/lib/commonjs/components/OptionSheet/OptionSheet.js +1 -1
- package/lib/commonjs/components/ProgressBar/ProgressBar.js +1 -1
- package/lib/commonjs/components/Screen/Screen.js +1 -0
- package/lib/commonjs/components/Screen/index.js +1 -0
- package/lib/commonjs/components/SignaturePad/SignaturePad.js +1 -1
- package/lib/commonjs/components/Skeleton/Skeleton.js +1 -1
- package/lib/commonjs/components/Skeleton/SkeletonContent.js +1 -1
- package/lib/commonjs/components/Skeleton/SkeletonProvider.js +1 -1
- package/lib/commonjs/components/Skeleton/index.js +1 -1
- package/lib/commonjs/components/Spinner/Spinner.js +1 -1
- package/lib/commonjs/components/TagInput/TagInput.js +1 -1
- package/lib/commonjs/components/Text/Text.js +1 -1
- package/lib/commonjs/components/TimePicker/TimePicker.js +1 -1
- package/lib/commonjs/components/Toast/Toast.js +1 -1
- package/lib/commonjs/components/Tooltip/Tooltip.js +1 -1
- package/lib/commonjs/components/Tour/Tour.js +1 -1
- package/lib/commonjs/components/WheelPicker/Wheel.js +1 -1
- package/lib/commonjs/components/WheelPicker/WheelPicker.js +1 -1
- package/lib/commonjs/components/index.js +1 -1
- package/lib/commonjs/hooks/index.js +1 -1
- package/lib/commonjs/hooks/useDragToDismiss.js +1 -1
- package/lib/commonjs/hooks/useFieldChain.js +1 -0
- package/lib/commonjs/hooks/usePresenceMotion.js +1 -0
- package/lib/commonjs/hooks/usePressAnimation.js +1 -1
- package/lib/commonjs/hooks/useReducedMotion.js +1 -1
- package/lib/commonjs/index.js +1 -1
- package/lib/commonjs/network/NetworkStatusBanner.js +1 -1
- package/lib/commonjs/theme/tokens.js +1 -1
- package/lib/commonjs/utils/hapticUtils.js +1 -1
- package/lib/module/components/Accordion/Accordion.js +1 -1
- package/lib/module/components/AmountSlider/AmountSlider.js +1 -1
- package/lib/module/components/AnimatePresence/AnimatePresence.js +1 -1
- package/lib/module/components/AppBar/AppBar.js +1 -1
- package/lib/module/components/AsyncBlock/AsyncBlock.js +1 -1
- package/lib/module/components/Banner/Banner.js +1 -1
- package/lib/module/components/BottomSheet/BottomSheet.js +1 -1
- package/lib/module/components/Button/Button.js +1 -1
- package/lib/module/components/Calendar/Calendar.js +1 -1
- package/lib/module/components/Card/Card.js +1 -1
- package/lib/module/components/Carousel/Carousel.js +1 -1
- package/lib/module/components/Chip/Chip.js +1 -1
- package/lib/module/components/DatePicker/DatePicker.js +1 -1
- package/lib/module/components/DateRangePicker/DateRangePicker.js +1 -1
- package/lib/module/components/Drawer/Drawer.js +1 -1
- package/lib/module/components/EmptyState/EmptyState.js +1 -1
- package/lib/module/components/FloatingActionButton/FloatingActionButton.js +1 -1
- package/lib/module/components/IconButton/IconButton.js +1 -1
- package/lib/module/components/ListItem/ListItem.js +1 -1
- package/lib/module/components/LoaderOverlay/LoaderOverlay.js +1 -1
- package/lib/module/components/Menu/MenuSurface.js +1 -1
- package/lib/module/components/MessageBubble/MessageBubble.js +1 -1
- package/lib/module/components/Modal/Modal.js +1 -1
- package/lib/module/components/OTPInput/OTPInput.js +1 -1
- package/lib/module/components/OnboardingPager/OnboardingPager.js +1 -1
- package/lib/module/components/OptionSheet/OptionSheet.js +1 -1
- package/lib/module/components/ProgressBar/ProgressBar.js +1 -1
- package/lib/module/components/Screen/Screen.js +1 -0
- package/lib/module/components/Screen/index.js +1 -0
- package/lib/module/components/SignaturePad/SignaturePad.js +1 -1
- package/lib/module/components/Skeleton/Skeleton.js +1 -1
- package/lib/module/components/Skeleton/SkeletonContent.js +1 -1
- package/lib/module/components/Skeleton/SkeletonProvider.js +1 -1
- package/lib/module/components/Skeleton/index.js +1 -1
- package/lib/module/components/Spinner/Spinner.js +1 -1
- package/lib/module/components/TagInput/TagInput.js +1 -1
- package/lib/module/components/Text/Text.js +1 -1
- package/lib/module/components/TimePicker/TimePicker.js +1 -1
- package/lib/module/components/Toast/Toast.js +1 -1
- package/lib/module/components/Tooltip/Tooltip.js +1 -1
- package/lib/module/components/Tour/Tour.js +1 -1
- package/lib/module/components/WheelPicker/Wheel.js +1 -1
- package/lib/module/components/WheelPicker/WheelPicker.js +1 -1
- package/lib/module/components/index.js +1 -1
- package/lib/module/hooks/index.js +1 -1
- package/lib/module/hooks/useDragToDismiss.js +1 -1
- package/lib/module/hooks/useFieldChain.js +1 -0
- package/lib/module/hooks/usePresenceMotion.js +1 -0
- package/lib/module/hooks/usePressAnimation.js +1 -1
- package/lib/module/hooks/useReducedMotion.js +1 -1
- package/lib/module/index.js +1 -1
- package/lib/module/network/NetworkStatusBanner.js +1 -1
- package/lib/module/theme/tokens.js +1 -1
- package/lib/module/utils/hapticUtils.js +1 -1
- package/lib/typescript/commonjs/components/AnimatePresence/AnimatePresence.d.ts +5 -5
- package/lib/typescript/commonjs/components/AsyncBlock/AsyncBlock.d.ts +11 -6
- package/lib/typescript/commonjs/components/BottomSheet/BottomSheet.d.ts +8 -2
- package/lib/typescript/commonjs/components/Button/Button.d.ts +6 -3
- package/lib/typescript/commonjs/components/Card/Card.d.ts +1 -1
- package/lib/typescript/commonjs/components/Carousel/Carousel.d.ts +2 -0
- package/lib/typescript/commonjs/components/ListItem/ListItem.d.ts +1 -1
- package/lib/typescript/commonjs/components/MessageBubble/MessageBubble.d.ts +6 -3
- package/lib/typescript/commonjs/components/OTPInput/OTPInput.d.ts +1 -2
- package/lib/typescript/commonjs/components/Screen/Screen.d.ts +39 -0
- package/lib/typescript/commonjs/components/Screen/index.d.ts +3 -0
- package/lib/typescript/commonjs/components/SignaturePad/SignaturePad.d.ts +6 -0
- package/lib/typescript/commonjs/components/Skeleton/Skeleton.d.ts +2 -2
- package/lib/typescript/commonjs/components/Skeleton/SkeletonProvider.d.ts +3 -11
- package/lib/typescript/commonjs/components/Skeleton/index.d.ts +1 -1
- package/lib/typescript/commonjs/components/WheelPicker/Wheel.d.ts +2 -0
- package/lib/typescript/commonjs/components/WheelPicker/WheelPicker.d.ts +5 -0
- package/lib/typescript/commonjs/components/index.d.ts +3 -1
- package/lib/typescript/commonjs/hooks/index.d.ts +4 -0
- package/lib/typescript/commonjs/hooks/useDragToDismiss.d.ts +10 -2
- package/lib/typescript/commonjs/hooks/useFieldChain.d.ts +10 -0
- package/lib/typescript/commonjs/hooks/usePresenceMotion.d.ts +14 -0
- package/lib/typescript/commonjs/hooks/usePressAnimation.d.ts +2 -2
- package/lib/typescript/commonjs/hooks/useReducedMotion.d.ts +0 -6
- package/lib/typescript/commonjs/index.d.ts +2 -2
- package/lib/typescript/commonjs/theme/types.d.ts +4 -0
- package/lib/typescript/module/components/AnimatePresence/AnimatePresence.d.ts +5 -5
- package/lib/typescript/module/components/AsyncBlock/AsyncBlock.d.ts +11 -6
- package/lib/typescript/module/components/BottomSheet/BottomSheet.d.ts +8 -2
- package/lib/typescript/module/components/Button/Button.d.ts +6 -3
- package/lib/typescript/module/components/Card/Card.d.ts +1 -1
- package/lib/typescript/module/components/Carousel/Carousel.d.ts +2 -0
- package/lib/typescript/module/components/ListItem/ListItem.d.ts +1 -1
- package/lib/typescript/module/components/MessageBubble/MessageBubble.d.ts +6 -3
- package/lib/typescript/module/components/OTPInput/OTPInput.d.ts +1 -2
- package/lib/typescript/module/components/Screen/Screen.d.ts +39 -0
- package/lib/typescript/module/components/Screen/index.d.ts +3 -0
- package/lib/typescript/module/components/SignaturePad/SignaturePad.d.ts +6 -0
- package/lib/typescript/module/components/Skeleton/Skeleton.d.ts +2 -2
- package/lib/typescript/module/components/Skeleton/SkeletonProvider.d.ts +3 -11
- package/lib/typescript/module/components/Skeleton/index.d.ts +1 -1
- package/lib/typescript/module/components/WheelPicker/Wheel.d.ts +2 -0
- package/lib/typescript/module/components/WheelPicker/WheelPicker.d.ts +5 -0
- package/lib/typescript/module/components/index.d.ts +3 -1
- package/lib/typescript/module/hooks/index.d.ts +4 -0
- package/lib/typescript/module/hooks/useDragToDismiss.d.ts +10 -2
- package/lib/typescript/module/hooks/useFieldChain.d.ts +10 -0
- package/lib/typescript/module/hooks/usePresenceMotion.d.ts +14 -0
- package/lib/typescript/module/hooks/usePressAnimation.d.ts +2 -2
- package/lib/typescript/module/hooks/useReducedMotion.d.ts +0 -6
- package/lib/typescript/module/index.d.ts +2 -2
- package/lib/typescript/module/theme/types.d.ts +4 -0
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.OTPInput=void 0;var _react=require("react"),_reactNative=require("react-native"),_index=require("../../hooks/index.js"),_index2=require("../../theme/index.js"),_index3=require("../../utils/index.js"),_corners=require("../../utils/corners.js"),_FieldBase=require("../FieldBase/FieldBase.js"),_jsxRuntime=require("react/jsx-runtime");const sizeMap={sm:{cell:36,fontSize:16,borderRadius:8,gap:8},md:{cell:48,fontSize:20,borderRadius:10,gap:10},lg:{cell:56,fontSize:24,borderRadius:12,gap:12}},sanitizeChar=(e,t)=>e?"number-pad"===t?e.replace(/\D/g,""):e:"",OTPInput=exports.OTPInput=(0,_react.forwardRef)((e,t)=>{const{value:
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.OTPInput=void 0;var _react=require("react"),_reactNative=require("react-native"),_index=require("../../hooks/index.js"),_index2=require("../../theme/index.js"),_index3=require("../../utils/index.js"),_corners=require("../../utils/corners.js"),_FieldBase=require("../FieldBase/FieldBase.js"),_jsxRuntime=require("react/jsx-runtime");const sizeMap={sm:{cell:36,fontSize:16,borderRadius:8,gap:8},md:{cell:48,fontSize:20,borderRadius:10,gap:10},lg:{cell:56,fontSize:24,borderRadius:12,gap:12}},sanitizeChar=(e,t)=>e?"number-pad"===t?e.replace(/\D/g,""):e:"",OTPInput=exports.OTPInput=(0,_react.forwardRef)((e,t)=>{const{value:r,defaultValue:i,onChange:a,onComplete:n,length:s=6,keyboardType:o="number-pad",autoFocus:l=!1,autoFocusDelay:c=0,disabled:u=!1,error:d,size:_="md",secure:m=!1,haptic:p,accessibilityLabel:g,style:f,cellStyle:x,textStyle:h,testID:b}=e,[v,y]=(0,_index.useControllableState)({value:r,defaultValue:i??"",onChange:a}),j=(0,_index2.useTheme)(),N=(0,_react.useMemo)(()=>buildStyles(j),[j]),R={...sizeMap[_],...j.components.otpInput?.[_]??{}},C=(0,_react.useRef)([]),[T,S]=(0,_react.useState)(-1),k=(0,_react.useRef)(null),F=(0,_react.useRef)((0,_index2.createAnimatedValue)(0)).current,V=(0,_react.useRef)(new Map),z=(0,_react.useMemo)(()=>{const e=V.current,t=[];for(let r=0;r<s;r+=1){let i=e.get(r);i||(i=new _reactNative.Animated.Value(0),e.set(r,i)),t.push(i)}for(const t of Array.from(e.keys()))t>=s&&e.delete(t);return t},[s]),I=(0,_react.useRef)(-1),w=j.components.otpInput?.shakeOnError??!1,E=(0,_index.useReducedMotion)(),A=!0===d||(0,_FieldBase.hasFieldText)(d);(0,_react.useEffect)(()=>{let e;return null===k.current||!A||k.current||(p&&(0,_index3.triggerHaptic)("notificationError"),w&&!E&&((0,_index2.setNativeValue)(F,0),e=_reactNative.Animated.sequence([_reactNative.Animated.timing(F,{toValue:1,duration:j.motion.duration.instant,easing:_reactNative.Easing.linear,useNativeDriver:!0}),_reactNative.Animated.timing(F,{toValue:-1,duration:j.motion.duration.instant,easing:_reactNative.Easing.linear,useNativeDriver:!0}),_reactNative.Animated.timing(F,{toValue:1,duration:j.motion.duration.instant,easing:_reactNative.Easing.linear,useNativeDriver:!0}),_reactNative.Animated.timing(F,{toValue:0,duration:j.motion.duration.instant,easing:_reactNative.Easing.linear,useNativeDriver:!0})]),e.start())),k.current=A,()=>e?.stop()},[A,F,w,p,E,j.motion.duration.instant]),(0,_react.useEffect)(()=>{const e=I.current;if(I.current=T,e===T)return;if(-1===e&&-1===T)return;const t=[];return z.forEach((r,i)=>{const a=i===T?1:0;if(i!==T&&i!==e)return;const n=_reactNative.Animated.timing(r,{toValue:a,duration:j.motion.duration.fast,easing:_reactNative.Easing.bezier(...j.motion.easing.standard),useNativeDriver:!0});n.start(),t.push(n)}),()=>t.forEach(e=>e.stop())},[T,z,j]);const M=(0,_react.useCallback)(e=>{const t=C.current[e];t&&t.focus()},[]);(0,_react.useImperativeHandle)(t,()=>({focus:()=>M(0),blur:()=>{const e=C.current[T>=0?T:0];e?.blur()},clear:()=>{y(""),M(0)}}),[M,T,y]),(0,_react.useEffect)(()=>{if(l&&!u){const e=setTimeout(()=>M(0),c);return()=>clearTimeout(e)}},[l,c,u,M]);const O=(0,_react.useMemo)(()=>{const e=new Array(s).fill("");for(let t=0;t<Math.min(v.length,s);t+=1)e[t]=v[t]??"";return e},[v,s]),B=(0,_react.useCallback)(e=>{const t=e.slice(0,s);t!==v&&(y(t),t.length===s&&n&&n(t))},[s,y,n,v]),D=(0,_react.useCallback)((e,t)=>{const r=t.replace(/\u200B/g,""),i=sanitizeChar(r,o);if(!i){const t=O.slice(),r=(t[e]??"").length>0;if(t[e]="",B(t.join("").slice(0,s)),!r&&e>0){const t=O.slice();t[e-1]="",B(t.join("")),M(e-1)}return}const a=O[e]??"",n=a&&i.length>s&&i.startsWith(a)?i.slice(a.length):i;if(n.length>=s){const t=n.slice(0,s),r=v.length;return B(t),t.length!==r&&p&&(0,_index3.triggerHaptic)(p),void C.current[e]?.blur()}const l=O.slice();let c=e;for(let e=0;e<i.length&&c<s;e+=1)l[c]=i[e]??"",c+=1;const u=l.join("").slice(0,s),d=v.length;B(u),u.length!==d&&p&&(0,_index3.triggerHaptic)(p);const _=Math.min(c,s-1);c>=s?C.current[e]?.blur():M(_)},[O,M,o,s,p,B,v]),P=(0,_react.useCallback)((e,t)=>{if("Backspace"!==t.nativeEvent.key)return;if(0===(O[e]??"").length){if(e>0){const t=O.slice();t[e-1]="",B(t.join("")),M(e-1)}}else{const t=O.slice();t[e]="",B(t.join(""))}},[O,M,B]),q=(0,_react.useCallback)(e=>{S(e)},[]),H=(0,_react.useCallback)(()=>{S(-1)},[]),W=(0,_react.useCallback)(()=>{if(u)return;const e=O.findIndex(e=>""===e);M(-1===e?s-1:e)},[O,u,M,s]),L=g??`Enter ${s}-digit code`,$=F.interpolate({inputRange:[-1,1],outputRange:[-6,6]});return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:f,accessible:!0,accessibilityRole:"none",accessibilityLabel:L,accessibilityValue:{text:r},accessibilityState:{disabled:u},"aria-disabled":u,testID:b,children:[(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:W,disabled:u,accessible:!1,children:(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:[N.row,{columnGap:R.gap,transform:[{translateX:$}]}],children:O.map((e,t)=>{const r=T===t,i=e.length>0,a=A?j.colors.border.error:j.colors.border.focus,n=z[t];if(!n)return null;const l=m&&i?"●":e;return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:N.cellWrapper,children:[(0,_jsxRuntime.jsxs)(_FieldBase.FieldBase,{size:_,width:R.cell,height:R.cell,borderRadius:R.borderRadius,borderWidth:1.5,focused:r,error:A,filled:i,disabled:u,paddingHorizontal:0,paddingVertical:0,gap:0,style:x,children:[(0,_jsxRuntime.jsx)(_reactNative.TextInput,{ref:e=>{C.current[t]=e},value:(m&&i?"":e)||"",onChangeText:e=>D(t,e),onKeyPress:e=>P(t,e),onFocus:()=>q(t),onBlur:H,keyboardType:o,editable:!u,selectTextOnFocus:!0,caretHidden:i,maxLength:s+1,textContentType:"oneTimeCode",autoComplete:0===t?"sms-otp":"off",importantForAutofill:0===t?"yes":"no",style:[N.input,{fontSize:R.fontSize,color:j.colors.text.primary,...(0,_index2.fontFor)(j,"semibold")},h]}),m&&i?(0,_jsxRuntime.jsx)(_reactNative.View,{pointerEvents:"none",style:N.maskOverlay,children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[{fontSize:R.fontSize,color:j.colors.text.primary,...(0,_index2.fontFor)(j,"semibold")},h],children:l})}):null]}),(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:[N.underline,{backgroundColor:a,opacity:n}]})]},`otp-cell-${t}`)})})}),(0,_jsxRuntime.jsx)(_FieldBase.FieldMessage,{size:_,error:!0,text:d})]})});OTPInput.displayName="OTPInput";const buildStyles=e=>_reactNative.StyleSheet.create({row:{flexDirection:"row",alignItems:"center"},cellWrapper:{alignItems:"center"},input:{width:"100%",height:"100%",textAlign:"center",padding:0},maskOverlay:{..._reactNative.StyleSheet.absoluteFill,alignItems:"center",justifyContent:"center"},underline:{marginTop:4,height:2,width:"60%",borderRadius:1,..._corners.smoothCorners}});var _default=exports.default=OTPInput;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.OnboardingPager=void 0;var _react=require("react"),_reactNative=require("react-native"),_reactNativeSafeAreaContext=require("react-native-safe-area-context"),_useReducedMotion=require("../../hooks/useReducedMotion.js"),_index=require("../../theme/index.js"),_announce=require("../../utils/announce.js"),_corners=require("../../utils/corners.js"),_index2=require("../Button/index.js"),_index3=require("../Carousel/index.js"),_index4=require("../Text/index.js"),_jsxRuntime=require("react/jsx-runtime");const ONBOARDING_MAX_PAGES=6,CONTROL_HEIGHT=44,DOT_SIZE=8,DOT_ACTIVE_WIDTH=24,defaultStep=(e,t)=>`Step ${e} of ${t}`,OnboardingPager=({pages:e,onDone:t,onSkip:n,doneLabel:i="Get started",labels:a,safeArea:r=!0,haptic:o,testID:s})=>{const c=(0,_index.useTheme)(),l=(0,_reactNativeSafeAreaContext.useSafeAreaInsets)(),u=(0,_useReducedMotion.useReducedMotion)(),d=(0,_react.useMemo)(()=>buildStyles(c),[c]),x=(0,_react.useMemo)(()=>e.slice(0,6),[e]),g=x.length,_=a?.step??defaultStep,p=(0,_react.useRef)(null),[m,b]=(0,_react.useState)(0),j=m>=g-1,y=(0,_react.useCallback)(e=>{e<0||e>=g||p.current?.scrollTo(e,!u)},[g,u]),v=(0,_react.useCallback)(e=>y(m+e),[y,m]),h=(0,_react.useCallback)(()=>{j?t():y(m+1)},[j,t,y,m]),f=(0,_react.useRef)(m);(0,_react.useEffect)(()=>{if(f.current===m)return;f.current=m;const e=x[m];e&&(0,_announce.announce)(`${_(m+1,g)}, ${e.title}`)},[m,x,g,_]);const R=(0,_react.useCallback)((e,t)=>(0,_jsxRuntime.jsx)(_reactNative.ScrollView,{style:d.page,contentContainerStyle:d.pageContent,showsVerticalScrollIndicator:!1,bounces:!1,children:(0,_jsxRuntime.jsxs)(_reactNative.View,{accessible:!0,accessibilityLabel:`${_(t+1,g)}, ${e.title}. ${e.body}`,style:d.pageGroup,children:[e.art?(0,_jsxRuntime.jsx)(_reactNative.View,{style:d.art,children:e.art}):null,(0,_jsxRuntime.jsx)(_index4.Text,{variant:"h2",align:"center",children:e.title}),(0,_jsxRuntime.jsx)(_index4.Text,{variant:"body",color:"secondary",align:"center",children:e.body})]})}),[d,_,g]);return 0===g?null:(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[d.root,r?{paddingTop:l.top,paddingBottom:l.bottom}:null],testID:s,children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:d.skipRow,children:(0,_jsxRuntime.jsx)(_index2.Button,{title:a?.skip??"Skip",variant:"ghost",tone:"neutral",hitSlop:{top:2,bottom:2,left:8,right:8},haptic:o,onPress:n,testID:s?`${s}-skip`:void 0})}),(0,_jsxRuntime.jsx)(_index3.Carousel,{ref:p,data:x,renderItem:R,keyExtractor:e=>e.key,onIndexChange:b,showPagination:!1,containerStyle:d.carousel,testID:s?`${s}-pages`:void 0}),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:d.footer,children:[g>1?(0,_jsxRuntime.jsx)(PageControl,{keys:x.map(e=>e.key),index:m,label:a?.pageControl??"Page",valueText:_(m+1,g),reduceMotion:u,theme:c,onStep:v,testID:s?`${s}-dots`:void 0}):null,(0,_jsxRuntime.jsx)(_index2.Button,{title:j?i:a?.next??"Next",size:"lg",fullWidth:!0,haptic:o,onPress:h,testID:s?`${s}-next`:void 0})]})]})};exports.OnboardingPager=OnboardingPager,OnboardingPager.displayName="OnboardingPager";const PageControl=({keys:e,index:t,label:n,valueText:i,reduceMotion:a,theme:r,onStep:o,testID:s})=>{const c=(0,_react.useCallback)(e=>{"increment"===e.nativeEvent.actionName?o(1):"decrement"===e.nativeEvent.actionName&&o(-1)},[o]);return(0,_jsxRuntime.jsxs)(_reactNative.View,{accessible:!0,accessibilityRole:"adjustable",accessibilityLabel:n,accessibilityValue:{min:0,max:e.length-1,now:t,text:i},accessibilityActions:[{name:"increment"},{name:"decrement"}],onAccessibilityAction:c,style:controlStyles.control,testID:s,children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:controlStyles.dots,pointerEvents:"none",children:e.map((e,n)=>(0,_jsxRuntime.jsx)(Dot,{active:n===t,reduceMotion:a,theme:r},e))}),(0,_jsxRuntime.jsx)(_reactNative.Pressable,{accessible:!1,importantForAccessibility:"no",style:controlStyles.back,onPress:()=>o(-1),testID:s?`${s}-back`:void 0}),(0,_jsxRuntime.jsx)(_reactNative.Pressable,{accessible:!1,importantForAccessibility:"no",style:controlStyles.forward,onPress:()=>o(1),testID:s?`${s}-forward`:void 0})]})},Dot=({active:e,reduceMotion:t,theme:n})=>{const i=(0,_react.useRef)((0,_index.createAnimatedValue)(e?1:0)).current;return(0,_react.useEffect)(()=>{const a=_reactNative.Animated.timing(i,{toValue:e?1:0,duration:t?0:n.motion.duration.normal,easing:_reactNative.Easing.bezier(...n.motion.easing.standard),useNativeDriver:!1});return a.start(),()=>a.stop()},[e,t,i,n]),(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:{width:i.interpolate({inputRange:[0,1],outputRange:[8,24]}),height:8,marginHorizontal:n.spacing.xs,borderRadius:4,..._corners.smoothCorners,backgroundColor:i.interpolate({inputRange:[0,1],outputRange:[n.colors.border.primary,n.colors.primary]})}})},controlStyles=_reactNative.StyleSheet.create({control:{alignSelf:"center",height:44,minWidth:88,alignItems:"center",justifyContent:"center"},dots:{flexDirection:"row",alignItems:"center"},back:{position:"absolute",top:0,bottom:0,start:0,width:"50%"},forward:{position:"absolute",top:0,bottom:0,end:0,width:"50%"}}),buildStyles=e=>_reactNative.StyleSheet.create({root:{flex:1,backgroundColor:e.colors.background.primary},skipRow:{minHeight:44,paddingHorizontal:e.spacing.lg,alignItems:"flex-end",justifyContent:"center"},carousel:{flex:1},page:{flex:1},pageContent:{flexGrow:1,justifyContent:"center",paddingHorizontal:e.spacing.xl,paddingVertical:e.spacing.lg},pageGroup:{alignItems:"center",gap:e.spacing.md},art:{alignItems:"center",marginBottom:e.spacing.xl},footer:{paddingHorizontal:e.spacing.lg,paddingBottom:e.spacing.lg,gap:e.spacing.sm}});var _default=exports.default=OnboardingPager;
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.OnboardingPager=void 0;var _react=require("react"),_reactNative=require("react-native"),_reactNativeSafeAreaContext=require("react-native-safe-area-context"),_useReducedMotion=require("../../hooks/useReducedMotion.js"),_index=require("../../theme/index.js"),_announce=require("../../utils/announce.js"),_corners=require("../../utils/corners.js"),_index2=require("../Button/index.js"),_index3=require("../Carousel/index.js"),_index4=require("../Text/index.js"),_jsxRuntime=require("react/jsx-runtime");const ONBOARDING_MAX_PAGES=6,CONTROL_HEIGHT=44,DOT_SIZE=8,DOT_ACTIVE_WIDTH=24,defaultStep=(e,t)=>`Step ${e} of ${t}`,OnboardingPager=({pages:e,onDone:t,onSkip:n,doneLabel:i="Get started",labels:a,safeArea:r=!0,haptic:o="selection",testID:s})=>{const c=(0,_index.useTheme)(),l=(0,_reactNativeSafeAreaContext.useSafeAreaInsets)(),u=(0,_useReducedMotion.useReducedMotion)(),d=(0,_react.useMemo)(()=>buildStyles(c),[c]),x=(0,_react.useMemo)(()=>e.slice(0,6),[e]),g=x.length,_=a?.step??defaultStep,p=(0,_react.useRef)(null),[m,b]=(0,_react.useState)(0),j=m>=g-1,y=(0,_react.useCallback)(e=>{e<0||e>=g||p.current?.scrollTo(e,!u)},[g,u]),v=(0,_react.useCallback)(e=>y(m+e),[y,m]),h=(0,_react.useCallback)(()=>{j?t():y(m+1)},[j,t,y,m]),f=(0,_react.useRef)(m);(0,_react.useEffect)(()=>{if(f.current===m)return;f.current=m;const e=x[m];e&&(0,_announce.announce)(`${_(m+1,g)}, ${e.title}`)},[m,x,g,_]);const R=(0,_react.useCallback)((e,t)=>(0,_jsxRuntime.jsx)(_reactNative.ScrollView,{style:d.page,contentContainerStyle:d.pageContent,showsVerticalScrollIndicator:!1,bounces:!1,children:(0,_jsxRuntime.jsxs)(_reactNative.View,{accessible:!0,accessibilityLabel:`${_(t+1,g)}, ${e.title}. ${e.body}`,style:d.pageGroup,children:[e.art?(0,_jsxRuntime.jsx)(_reactNative.View,{style:d.art,children:e.art}):null,(0,_jsxRuntime.jsx)(_index4.Text,{variant:"h2",align:"center",children:e.title}),(0,_jsxRuntime.jsx)(_index4.Text,{variant:"body",color:"secondary",align:"center",children:e.body})]})}),[d,_,g]);return 0===g?null:(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[d.root,r?{paddingTop:l.top,paddingBottom:l.bottom}:null],testID:s,children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:d.skipRow,children:(0,_jsxRuntime.jsx)(_index2.Button,{title:a?.skip??"Skip",variant:"ghost",tone:"neutral",hitSlop:{top:2,bottom:2,left:8,right:8},haptic:o,onPress:n,testID:s?`${s}-skip`:void 0})}),(0,_jsxRuntime.jsx)(_index3.Carousel,{ref:p,data:x,renderItem:R,keyExtractor:e=>e.key,onIndexChange:b,showPagination:!1,containerStyle:d.carousel,testID:s?`${s}-pages`:void 0}),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:d.footer,children:[g>1?(0,_jsxRuntime.jsx)(PageControl,{keys:x.map(e=>e.key),index:m,label:a?.pageControl??"Page",valueText:_(m+1,g),reduceMotion:u,theme:c,onStep:v,testID:s?`${s}-dots`:void 0}):null,(0,_jsxRuntime.jsx)(_index2.Button,{title:j?i:a?.next??"Next",size:"lg",fullWidth:!0,haptic:o,onPress:h,testID:s?`${s}-next`:void 0})]})]})};exports.OnboardingPager=OnboardingPager,OnboardingPager.displayName="OnboardingPager";const PageControl=({keys:e,index:t,label:n,valueText:i,reduceMotion:a,theme:r,onStep:o,testID:s})=>{const c=(0,_react.useCallback)(e=>{"increment"===e.nativeEvent.actionName?o(1):"decrement"===e.nativeEvent.actionName&&o(-1)},[o]);return(0,_jsxRuntime.jsxs)(_reactNative.View,{accessible:!0,accessibilityRole:"adjustable",accessibilityLabel:n,accessibilityValue:{min:0,max:e.length-1,now:t,text:i},accessibilityActions:[{name:"increment"},{name:"decrement"}],onAccessibilityAction:c,style:controlStyles.control,testID:s,children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:controlStyles.dots,pointerEvents:"none",children:e.map((e,n)=>(0,_jsxRuntime.jsx)(Dot,{active:n===t,reduceMotion:a,theme:r},e))}),(0,_jsxRuntime.jsx)(_reactNative.Pressable,{accessible:!1,importantForAccessibility:"no",style:controlStyles.back,onPress:()=>o(-1),testID:s?`${s}-back`:void 0}),(0,_jsxRuntime.jsx)(_reactNative.Pressable,{accessible:!1,importantForAccessibility:"no",style:controlStyles.forward,onPress:()=>o(1),testID:s?`${s}-forward`:void 0})]})},Dot=({active:e,reduceMotion:t,theme:n})=>{const i=(0,_react.useRef)((0,_index.createAnimatedValue)(e?1:0)).current;return(0,_react.useEffect)(()=>{const a=_reactNative.Animated.timing(i,{toValue:e?1:0,duration:t?0:n.motion.duration.normal,easing:_reactNative.Easing.bezier(...n.motion.easing.standard),useNativeDriver:!1});return a.start(),()=>a.stop()},[e,t,i,n]),(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:{width:i.interpolate({inputRange:[0,1],outputRange:[8,24]}),height:8,marginHorizontal:n.spacing.xs,borderRadius:4,..._corners.smoothCorners,backgroundColor:i.interpolate({inputRange:[0,1],outputRange:[n.colors.border.primary,n.colors.primary]})}})},controlStyles=_reactNative.StyleSheet.create({control:{alignSelf:"center",height:44,minWidth:88,alignItems:"center",justifyContent:"center"},dots:{flexDirection:"row",alignItems:"center"},back:{position:"absolute",top:0,bottom:0,start:0,width:"50%"},forward:{position:"absolute",top:0,bottom:0,end:0,width:"50%"}}),buildStyles=e=>_reactNative.StyleSheet.create({root:{flex:1,backgroundColor:e.colors.background.primary},skipRow:{minHeight:44,paddingHorizontal:e.spacing.lg,alignItems:"flex-end",justifyContent:"center"},carousel:{flex:1},page:{flex:1},pageContent:{flexGrow:1,justifyContent:"center",paddingHorizontal:e.spacing.xl,paddingVertical:e.spacing.lg},pageGroup:{alignItems:"center",gap:e.spacing.md},art:{alignItems:"center",marginBottom:e.spacing.xl},footer:{paddingHorizontal:e.spacing.lg,paddingBottom:e.spacing.lg,gap:e.spacing.sm}});var _default=exports.default=OnboardingPager;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.OptionSheet=void 0;var _react=require("react"),_reactNative=require("react-native"),_reactNativeGestureHandler=require("react-native-gesture-handler"),_reactNativeKeyboardController=require("react-native-keyboard-controller"),_useDragToDismiss=require("../../hooks/useDragToDismiss.js"),_index=require("../../theme/index.js"),_corners=require("../../utils/corners.js"),_defaultIcons=require("../AppIcon/defaultIcons.js"),_ModalSafeArea=require("../ModalSafeArea/ModalSafeArea.js"),_ToastProvider=require("../Toast/ToastProvider.js"),_jsxRuntime=require("react/jsx-runtime");const SEARCH_ICON_SIZE=18,OptionSheet=e=>{const{open:t,onClose:r,onAfterClose:i,onOpenChange:o,title:a,options:s,sections:n,renderSectionHeader:l,renderOption:c,alphabetIndex:d=!1,searchPlaceholder:u="Search…",emptyText:p="No options",labelOf:m,getValue:h,disabledOf:g,destructiveOf:x,descriptionOf:_,iconOf:y,isSelected:f,onSelect:b,multi:v=!1,searchable:j=!1,searchSelectionColor:R,accessibilityLabel:S,optionStyle:N,selectedOptionStyle:T,optionTextStyle:C,selectedOptionTextStyle:w,testID:k}=e,I=(0,_index.useTheme)(),[V,z]=(0,_ModalSafeArea.useModalInsets)(),D=(0,_react.useMemo)(()=>buildStyles(I),[I]),[L,P]=(0,_react.useState)(""),H=_reactNative.Dimensions.get("window").height,M=Math.round(.7*H),[W,A]=(0,_react.useState)(t),O=(0,_react.useRef)((0,_index.createAnimatedValue)(0)).current,B=(0,_react.useRef)((0,_index.createAnimatedValue)(M)).current,E=(0,_react.useRef)((0,_index.createAnimatedValue)(0)).current,F=(0,_react.useMemo)(()=>_reactNative.Animated.add(B,E),[B,E]);(0,_react.useEffect)(()=>{t&&A(!0)},[t]);const q=(0,_react.useRef)(o);q.current=o;const G=(0,_react.useRef)(!1);(0,_react.useEffect)(()=>{G.current!==t&&(G.current=t,q.current?.(t))},[t]);const $=(0,_react.useRef)(i);$.current=i;const K=(0,_react.useRef)(W);(0,_react.useEffect)(()=>{K.current&&!W&&"ios"!==_reactNative.Platform.OS&&$.current?.(),K.current=W},[W]),(0,_react.useEffect)(()=>{if(!W)return;t&&(0,_index.setNativeValue)(E,0);const e=t?_reactNative.Animated.parallel([_reactNative.Animated.timing(O,{toValue:1,duration:I.motion.duration.fast,easing:_reactNative.Easing.bezier(...I.motion.easing.standard),useNativeDriver:!1}),_reactNative.Animated.spring(B,{toValue:0,damping:I.motion.spring.snappy.damping,stiffness:I.motion.spring.snappy.stiffness,mass:I.motion.spring.snappy.mass,useNativeDriver:!0})]):_reactNative.Animated.parallel([_reactNative.Animated.timing(O,{toValue:0,duration:I.motion.duration.fast,easing:_reactNative.Easing.bezier(...I.motion.easing.standard),useNativeDriver:!1}),_reactNative.Animated.timing(B,{toValue:M,duration:I.motion.duration.fast,easing:_reactNative.Easing.bezier(...I.motion.easing.accelerate),useNativeDriver:!0})]);return e.start(({finished:e})=>{e&&!t&&A(!1)}),()=>e.stop()},[t,W,O,B,E,M,I.motion.duration.fast,I.motion.easing.standard,I.motion.easing.accelerate,I.motion.spring.snappy]);const{handleGesture:J}=(0,_useDragToDismiss.useDragToDismiss)({drag:E,travel:M,onDismiss:r}),U=(0,_react.useMemo)(()=>_reactNativeGestureHandler.Gesture.Native(),[]),[Y,Z]=(0,_react.useState)(0),Q=(0,_reactNativeKeyboardController.useKeyboardState)(e=>e.height),X=W?Math.max(0,Math.round(Q)):0,ee=Math.max(V.top,_reactNative.StatusBar.currentHeight??0)+I.spacing.sm,te=X>0,re=te?Math.max(0,Math.min(M,(Y>0?Y:H)-X-ee)):M;(0,_react.useEffect)(()=>{t||P("")},[t]);const ie=(0,_react.useMemo)(()=>{const e=j?L.trim().toLowerCase():"",matches=t=>0===e.length||m(t).toLowerCase().includes(e)||(_(t)??"").toLowerCase().includes(e);if(!n)return s.filter(matches).map(e=>({kind:"option",option:e}));const t=[];return n.forEach((e,r)=>{const i=e.options.filter(matches);if(0!==i.length){t.push({kind:"header",title:e.title});for(const e of i)t.push({kind:"option",option:e,section:r})}}),t},[j,L,s,n,m,_]),oe=(0,_react.useCallback)(()=>{r()},[r]),ae=(0,_react.useRef)(null),se=(0,_react.useMemo)(()=>{const e=new Map;if(!d)return e;let t=0;if(n)for(let e=ie.length-1;e>=0;e-=1)if("header"===ie[e].kind){t=e+1;break}for(let r=t;r<ie.length;r+=1){const t=ie[r];if("option"!==t.kind)continue;const i=m(t.option).trim().charAt(0).toUpperCase(),o=/^[A-Z]$/.test(i)?i:"#";e.has(o)||e.set(o,r)}return e},[d,ie,n,m]),ne=d&&se.size>0&&0===L.trim().length,le=(0,_react.useMemo)(()=>[..."ABCDEFGHIJKLMNOPQRSTUVWXYZ",...se.has("#")?["#"]:[]],[se]),ce=(0,_react.useCallback)(e=>{const t=se.get(e);void 0!==t&&ae.current?.scrollToIndex({index:t,animated:!0,viewPosition:0})},[se]),de=(0,_react.useRef)(null),ue=(0,_react.useCallback)(()=>{null!==de.current&&(clearTimeout(de.current),de.current=null)},[]),pe=(0,_react.useCallback)(e=>{ae.current?.scrollToOffset({offset:e.averageItemLength*e.index,animated:!1}),ue(),de.current=setTimeout(()=>{de.current=null,ae.current?.scrollToIndex({index:e.index,animated:!0,viewPosition:0})},50)},[ue]);(0,_react.useEffect)(()=>(W||ue(),ue),[W,ue]);return(0,_jsxRuntime.jsx)(_reactNative.Modal,{visible:W,transparent:!0,animationType:"none",onRequestClose:oe,onDismiss:()=>$.current?.(),statusBarTranslucent:!0,navigationBarTranslucent:!0,children:(0,_jsxRuntime.jsx)(_ModalSafeArea.ModalSafeArea,{onInsets:z,children:(0,_jsxRuntime.jsxs)(_reactNativeGestureHandler.GestureHandlerRootView,{collapsable:!1,onLayout:e=>Z(e.nativeEvent.layout.height),style:[_reactNative.StyleSheet.absoluteFill,{backgroundColor:I.colors.background.overlay}],children:[(0,_jsxRuntime.jsx)(_reactNative.Pressable,{style:_reactNative.StyleSheet.absoluteFill,onPress:oe,accessibilityRole:"button",accessibilityLabel:"Close picker"}),(0,_jsxRuntime.jsxs)(_reactNative.Animated.View,{testID:k,accessibilityViewIsModal:!0,accessibilityLabel:S??a??"Options",style:[D.sheet,{maxHeight:re,bottom:X,paddingBottom:te?16:V.bottom+16,backgroundColor:I.colors.background.elevated,borderTopLeftRadius:I.radius.xl,borderTopRightRadius:I.radius.xl,..._corners.smoothCorners,transform:[{translateY:F}],...I.shadows.xl}],children:[(0,_jsxRuntime.jsx)(_reactNativeGestureHandler.GestureDetector,{gesture:J,children:(0,_jsxRuntime.jsxs)(_reactNative.View,{children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:D.sheetHandleRow,children:(0,_jsxRuntime.jsx)(_reactNative.View,{style:[D.sheetHandle,{backgroundColor:I.components.select?.handleColor??I.components.bottomSheet?.handleColor??I.colors.border.primary}]})}),a?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[D.sheetTitle,{color:I.colors.text.primary,fontSize:I.typography.fontSize.lg,fontWeight:I.typography.fontWeight.semibold,paddingHorizontal:I.spacing.lg,marginBottom:I.spacing.sm}],children:a}):null]})}),j?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[D.searchWrap,{marginHorizontal:I.spacing.lg,marginBottom:I.spacing.sm}],children:(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[D.searchBox,{backgroundColor:I.colors.background.secondary,borderColor:I.colors.border.primary,borderRadius:I.radius.md,..._corners.smoothCorners,paddingHorizontal:I.spacing.md,gap:I.spacing.sm}],children:[(I.icons?.search??_defaultIcons.defaultIcons.search)({size:18,color:I.colors.text.tertiary}),(0,_jsxRuntime.jsx)(_reactNative.TextInput,{value:L,onChangeText:P,placeholder:u,placeholderTextColor:I.colors.text.tertiary,selectionColor:R??I.colors.border.focus,accessibilityLabel:"Search options",style:[D.searchInput,{color:I.colors.text.primary,fontSize:I.typography.fontSize.base,paddingVertical:I.spacing.sm}]}),L.length>0?(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:()=>P(""),hitSlop:8,accessibilityRole:"button",accessibilityLabel:"Clear search",children:(I.icons?.close??_defaultIcons.defaultIcons.close)({size:18,color:I.colors.text.secondary})}):null]})}):null,(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[D.listWrap,ne?D.listRow:null],children:[(0,_jsxRuntime.jsx)(_reactNativeGestureHandler.GestureDetector,{gesture:U,children:(0,_jsxRuntime.jsx)(_reactNative.FlatList,{ref:ae,data:ie,keyExtractor:e=>"header"===e.kind?`h:${e.title}`:`o:${e.section??""}:${String(h(e.option))}`,renderItem:({item:e})=>{if("header"===e.kind)return(0,_jsxRuntime.jsx)(_reactNative.View,{accessible:!0,accessibilityRole:"header",style:[D.sectionHeader,{paddingHorizontal:I.spacing.lg,paddingTop:I.spacing.md}],children:l?l(e.title):(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[D.sectionTitle,{color:I.colors.text.tertiary,fontSize:I.typography.fontSize.xs,fontWeight:I.typography.fontWeight.semibold}],children:e.title.toUpperCase()})});const t=e.option,r=m(t),i=h(t),o=_(t),a=y(t),s=f(i),n=g(t),d=x?.(t)??!1;return(0,_jsxRuntime.jsxs)(_reactNative.Pressable,{onPress:()=>b(t),disabled:n,android_ripple:{color:I.colors.surface.pressed,borderless:!1},accessibilityRole:"button",accessibilityLabel:r,accessibilityState:{selected:s,disabled:n},"aria-selected":s,"aria-disabled":n,style:({pressed:e})=>[D.optionRow,{backgroundColor:s?I.colors.surface.selected:e?I.colors.surface.pressed:"transparent",opacity:n?.5:1,paddingHorizontal:I.spacing.lg,paddingVertical:I.spacing.md},N,s?T:null],children:[c?(0,_jsxRuntime.jsx)(_reactNative.View,{style:D.optionTextWrap,children:c(t,{selected:s,disabled:n})}):(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[a?(0,_jsxRuntime.jsx)(_reactNative.View,{style:D.optionIcon,children:a}):null,(0,_jsxRuntime.jsxs)(_reactNative.View,{style:D.optionTextWrap,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[D.optionLabel,{color:d?I.colors.toneText.error:s?I.colors.primary:I.colors.text.primary,fontSize:I.typography.fontSize.base,fontWeight:s?I.typography.fontWeight.semibold:I.typography.fontWeight.medium},C,s?w:null],children:r}),o?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[D.optionDescription,{color:I.colors.text.tertiary,fontSize:I.typography.fontSize.sm}],numberOfLines:2,children:o}):null]})]}),v?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[D.checkbox,{borderColor:s?I.colors.primary:I.colors.border.primary,backgroundColor:s?I.colors.primary:"transparent"}],children:s?(0,_jsxRuntime.jsx)(_reactNative.View,{style:D.checkboxTick}):null}):s?"icon"===I.components.optionSheet?.selectedMarker?(0,_jsxRuntime.jsx)(_reactNative.View,{style:D.singleSelectedIcon,children:(I.icons?.selectedTick??_defaultIcons.defaultIcons.selectedTick)({size:20,color:I.colors.primary})}):(0,_jsxRuntime.jsx)(_reactNative.View,{style:[D.singleSelectedDot,{backgroundColor:I.colors.primary}]}):null]})},onScrollToIndexFailed:pe,overScrollMode:"never",bounces:!1,keyboardShouldPersistTaps:"handled",showsVerticalScrollIndicator:!ne,style:ne?D.listBesideRail:null,ListEmptyComponent:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[D.empty,{color:I.colors.text.tertiary,fontSize:I.typography.fontSize.sm,paddingVertical:I.spacing.xl}],children:p})})}),ne?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[D.rail,{paddingRight:I.spacing.xs}],accessibilityRole:"list",accessibilityLabel:"Jump to letter",testID:"option-sheet-alphabet",children:le.map(e=>{const t=se.has(e);return(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:()=>ce(e),disabled:!t,hitSlop:{left:8,right:8},accessibilityRole:"button",accessibilityLabel:`Jump to ${e}`,accessibilityState:{disabled:!t},"aria-disabled":!t,style:D.railLetter,children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[D.railLetterText,{color:t?I.colors.primary:I.colors.text.tertiary,fontSize:I.typography.fontSize.xs,fontWeight:I.typography.fontWeight.semibold,opacity:t?1:.45}],children:e})},e)})}):null]}),v?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[D.sheetFooter,{borderTopColor:I.colors.border.secondary,paddingHorizontal:I.spacing.lg,paddingVertical:I.spacing.md}],children:(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:oe,accessibilityRole:"button",accessibilityLabel:"Done",style:({pressed:e})=>[D.doneButton,{backgroundColor:e?I.colors.primaryPressed:I.colors.primary,borderRadius:I.radius.md,..._corners.smoothCorners,paddingVertical:I.spacing.sm,paddingHorizontal:I.spacing.lg}],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:{color:I.colors.onPrimary,fontSize:I.typography.fontSize.base,fontWeight:I.typography.fontWeight.semibold},children:"Done"})})}):null]}),(0,_jsxRuntime.jsx)(_ToastProvider.ToastHost,{})]})})})};exports.OptionSheet=OptionSheet,OptionSheet.displayName="OptionSheet";const buildStyles=e=>_reactNative.StyleSheet.create({sheet:{position:"absolute",left:0,right:0,bottom:0,paddingBottom:16,overflow:"hidden"},sheetHandleRow:{alignItems:"center",paddingTop:10,paddingBottom:8},sheetHandle:{width:36,height:4,borderRadius:2,..._corners.smoothCorners},sheetTitle:{includeFontPadding:!1},searchWrap:{width:"auto"},searchBox:{flexDirection:"row",alignItems:"center",borderWidth:1},searchInput:{flex:1,includeFontPadding:!1},optionRow:{flexDirection:"row",alignItems:"center"},sectionHeader:{paddingBottom:4},listWrap:{flexShrink:1},listRow:{flexDirection:"row"},listBesideRail:{flex:1},rail:{justifyContent:"space-between",alignItems:"center",alignSelf:"stretch",paddingVertical:4},railLetter:{paddingHorizontal:4,minHeight:14,justifyContent:"center"},railLetterText:{includeFontPadding:!1,lineHeight:14},sectionTitle:{includeFontPadding:!1,letterSpacing:.6},optionIcon:{marginRight:12},optionTextWrap:{flex:1},optionLabel:{includeFontPadding:!1},optionDescription:{includeFontPadding:!1,marginTop:2},checkbox:{width:22,height:22,borderRadius:6,..._corners.smoothCorners,borderWidth:2,alignItems:"center",justifyContent:"center",marginLeft:12},checkboxTick:{width:10,height:6,borderLeftWidth:2,borderBottomWidth:2,borderColor:e.colors.onPrimary,transform:[{rotate:"-45deg"},{translateY:-1}]},singleSelectedDot:{width:8,height:8,borderRadius:4,..._corners.smoothCorners,marginLeft:12},singleSelectedIcon:{marginLeft:12},empty:{textAlign:"center"},sheetFooter:{borderTopWidth:_reactNative.StyleSheet.hairlineWidth,alignItems:"flex-end"},doneButton:{alignSelf:"flex-end"}});var _default=exports.default=OptionSheet;
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.OptionSheet=void 0;var _react=require("react"),_reactNative=require("react-native"),_reactNativeGestureHandler=require("react-native-gesture-handler"),_reactNativeKeyboardController=require("react-native-keyboard-controller"),_useDragToDismiss=require("../../hooks/useDragToDismiss.js"),_usePresenceMotion=require("../../hooks/usePresenceMotion.js"),_index=require("../../theme/index.js"),_corners=require("../../utils/corners.js"),_defaultIcons=require("../AppIcon/defaultIcons.js"),_ModalSafeArea=require("../ModalSafeArea/ModalSafeArea.js"),_ToastProvider=require("../Toast/ToastProvider.js"),_jsxRuntime=require("react/jsx-runtime");const AnimatedGestureRoot=_reactNative.Animated.createAnimatedComponent(_reactNativeGestureHandler.GestureHandlerRootView),SEARCH_ICON_SIZE=18,OptionSheet=e=>{const{open:t,onClose:r,onAfterClose:i,onOpenChange:a,title:o,options:s,sections:n,renderSectionHeader:l,renderOption:c,alphabetIndex:d=!1,searchPlaceholder:u="Search…",emptyText:p="No options",labelOf:m,getValue:h,disabledOf:g,destructiveOf:_,descriptionOf:x,iconOf:y,isSelected:f,onSelect:b,multi:v=!1,searchable:j=!1,searchSelectionColor:R,accessibilityLabel:S,optionStyle:N,selectedOptionStyle:T,optionTextStyle:C,selectedOptionTextStyle:w,testID:k}=e,I=(0,_index.useTheme)(),V=(0,_usePresenceMotion.usePresenceMotion)(),[M,P]=(0,_ModalSafeArea.useModalInsets)(),z=(0,_react.useMemo)(()=>buildStyles(I),[I]),[D,A]=(0,_react.useState)(""),L=_reactNative.Dimensions.get("window").height,H=Math.round(.7*L),[O,W]=(0,_react.useState)(t),B=(0,_react.useRef)((0,_index.createAnimatedValue)(0)).current,E=(0,_react.useRef)((0,_index.createAnimatedValue)(H)).current,F=(0,_react.useRef)((0,_index.createAnimatedValue)(0)).current,q=(0,_react.useMemo)(()=>V.reduced?F:_reactNative.Animated.add(E,F),[V.reduced,E,F]),G=(0,_react.useMemo)(()=>V.reduced?E.interpolate({inputRange:[0,H],outputRange:[1,0],extrapolate:"clamp"}):1,[V.reduced,E,H]),{handleGesture:$,opacity:K}=(0,_useDragToDismiss.useDragToDismiss)({drag:F,travel:H,onDismiss:r}),J=(0,_react.useMemo)(()=>_reactNative.Animated.multiply(G,K),[G,K]),U=(0,_react.useMemo)(()=>{const e=I.colors.background.overlay;return B.interpolate({inputRange:[0,1],outputRange:[transparentOf(e),e]})},[B,I.colors.background.overlay]);(0,_react.useEffect)(()=>{t&&W(!0)},[t]);const Y=(0,_react.useRef)(a);Y.current=a;const Z=(0,_react.useRef)(!1);(0,_react.useEffect)(()=>{Z.current!==t&&(Z.current=t,Y.current?.(t))},[t]);const Q=(0,_react.useRef)(i);Q.current=i;const X=(0,_react.useRef)(O);(0,_react.useEffect)(()=>{X.current&&!O&&"ios"!==_reactNative.Platform.OS&&Q.current?.(),X.current=O},[O]),(0,_react.useEffect)(()=>{if(!O)return;t&&((0,_index.setNativeValue)(F,0),(0,_index.setNativeValue)(K,1));const e=t?_reactNative.Animated.parallel([_reactNative.Animated.timing(B,{toValue:1,duration:V.duration("normal"),easing:_reactNative.Easing.bezier(...I.motion.easing.standard),useNativeDriver:!1}),V.reduced?_reactNative.Animated.timing(E,{toValue:0,duration:V.duration("normal"),easing:_reactNative.Easing.bezier(...I.motion.easing.standard),useNativeDriver:!0}):_reactNative.Animated.spring(E,{toValue:0,damping:I.motion.spring.snappy.damping,stiffness:I.motion.spring.snappy.stiffness,mass:I.motion.spring.snappy.mass,useNativeDriver:!0})]):_reactNative.Animated.parallel([_reactNative.Animated.timing(B,{toValue:0,duration:V.duration("normal"),easing:_reactNative.Easing.bezier(...I.motion.easing.standard),useNativeDriver:!1}),_reactNative.Animated.timing(E,{toValue:H,duration:V.duration("fast"),easing:_reactNative.Easing.bezier(...I.motion.easing.accelerate),useNativeDriver:!0})]);return e.start(({finished:e})=>{e&&!t&&W(!1)}),()=>e.stop()},[t,O,B,E,F,K,H,V,I.motion.easing.standard,I.motion.easing.accelerate,I.motion.spring.snappy]);const ee=(0,_react.useMemo)(()=>_reactNativeGestureHandler.Gesture.Native(),[]),[te,re]=(0,_react.useState)(0),ie=(0,_reactNativeKeyboardController.useKeyboardState)(e=>e.height),ae=O?Math.max(0,Math.round(ie)):0,oe=Math.max(M.top,_reactNative.StatusBar.currentHeight??0)+I.spacing.sm,se=ae>0,ne=se?Math.max(0,Math.min(H,(te>0?te:L)-ae-oe)):H;(0,_react.useEffect)(()=>{t||A("")},[t]);const le=(0,_react.useMemo)(()=>{const e=j?D.trim().toLowerCase():"",matches=t=>0===e.length||m(t).toLowerCase().includes(e)||(x(t)??"").toLowerCase().includes(e);if(!n)return s.filter(matches).map(e=>({kind:"option",option:e}));const t=[];return n.forEach((e,r)=>{const i=e.options.filter(matches);if(0!==i.length){t.push({kind:"header",title:e.title});for(const e of i)t.push({kind:"option",option:e,section:r})}}),t},[j,D,s,n,m,x]),ce=(0,_react.useCallback)(()=>{r()},[r]),de=(0,_react.useRef)(null),ue=(0,_react.useMemo)(()=>{const e=new Map;if(!d)return e;let t=0;if(n)for(let e=le.length-1;e>=0;e-=1)if("header"===le[e].kind){t=e+1;break}for(let r=t;r<le.length;r+=1){const t=le[r];if("option"!==t.kind)continue;const i=m(t.option).trim().charAt(0).toUpperCase(),a=/^[A-Z]$/.test(i)?i:"#";e.has(a)||e.set(a,r)}return e},[d,le,n,m]),pe=d&&ue.size>0&&0===D.trim().length,me=(0,_react.useMemo)(()=>[..."ABCDEFGHIJKLMNOPQRSTUVWXYZ",...ue.has("#")?["#"]:[]],[ue]),he=(0,_react.useCallback)(e=>{const t=ue.get(e);void 0!==t&&de.current?.scrollToIndex({index:t,animated:!0,viewPosition:0})},[ue]),ge=(0,_react.useRef)(null),xe=(0,_react.useCallback)(()=>{null!==ge.current&&(clearTimeout(ge.current),ge.current=null)},[]),ye=(0,_react.useCallback)(e=>{de.current?.scrollToOffset({offset:e.averageItemLength*e.index,animated:!1}),xe(),ge.current=setTimeout(()=>{ge.current=null,de.current?.scrollToIndex({index:e.index,animated:!0,viewPosition:0})},50)},[xe]);(0,_react.useEffect)(()=>(O||xe(),xe),[O,xe]);return(0,_jsxRuntime.jsx)(_reactNative.Modal,{visible:O,transparent:!0,animationType:"none",onRequestClose:ce,onDismiss:()=>Q.current?.(),statusBarTranslucent:!0,navigationBarTranslucent:!0,children:(0,_jsxRuntime.jsx)(_ModalSafeArea.ModalSafeArea,{onInsets:P,children:(0,_jsxRuntime.jsxs)(AnimatedGestureRoot,{collapsable:!1,onLayout:e=>re(e.nativeEvent.layout.height),style:[_reactNative.StyleSheet.absoluteFill,{backgroundColor:U}],children:[(0,_jsxRuntime.jsx)(_reactNative.Pressable,{style:_reactNative.StyleSheet.absoluteFill,onPress:ce,accessibilityRole:"button",accessibilityLabel:"Close picker"}),(0,_jsxRuntime.jsxs)(_reactNative.Animated.View,{testID:k,accessibilityViewIsModal:!0,accessibilityLabel:S??o??"Options",style:[z.sheet,{maxHeight:ne,bottom:ae,paddingBottom:se?16:M.bottom+16,backgroundColor:I.colors.background.elevated,borderTopLeftRadius:I.radius.xl,borderTopRightRadius:I.radius.xl,..._corners.smoothCorners,opacity:J,transform:[{translateY:q}],...I.shadows.xl}],children:[(0,_jsxRuntime.jsx)(_reactNativeGestureHandler.GestureDetector,{gesture:$,children:(0,_jsxRuntime.jsxs)(_reactNative.View,{children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:z.sheetHandleRow,children:(0,_jsxRuntime.jsx)(_reactNative.View,{style:[z.sheetHandle,{backgroundColor:I.components.select?.handleColor??I.components.bottomSheet?.handleColor??I.colors.border.primary}]})}),o?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[z.sheetTitle,{color:I.colors.text.primary,fontSize:I.typography.fontSize.lg,fontWeight:I.typography.fontWeight.semibold,paddingHorizontal:I.spacing.lg,marginBottom:I.spacing.sm}],children:o}):null]})}),j?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[z.searchWrap,{marginHorizontal:I.spacing.lg,marginBottom:I.spacing.sm}],children:(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[z.searchBox,{backgroundColor:I.colors.background.secondary,borderColor:I.colors.border.primary,borderRadius:I.radius.md,..._corners.smoothCorners,paddingHorizontal:I.spacing.md,gap:I.spacing.sm}],children:[(I.icons?.search??_defaultIcons.defaultIcons.search)({size:18,color:I.colors.text.tertiary}),(0,_jsxRuntime.jsx)(_reactNative.TextInput,{value:D,onChangeText:A,placeholder:u,placeholderTextColor:I.colors.text.tertiary,selectionColor:R??I.colors.border.focus,accessibilityLabel:"Search options",style:[z.searchInput,{color:I.colors.text.primary,fontSize:I.typography.fontSize.base,paddingVertical:I.spacing.sm}]}),D.length>0?(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:()=>A(""),hitSlop:8,accessibilityRole:"button",accessibilityLabel:"Clear search",children:(I.icons?.close??_defaultIcons.defaultIcons.close)({size:18,color:I.colors.text.secondary})}):null]})}):null,(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[z.listWrap,pe?z.listRow:null],children:[(0,_jsxRuntime.jsx)(_reactNativeGestureHandler.GestureDetector,{gesture:ee,children:(0,_jsxRuntime.jsx)(_reactNative.FlatList,{ref:de,data:le,keyExtractor:e=>"header"===e.kind?`h:${e.title}`:`o:${e.section??""}:${String(h(e.option))}`,renderItem:({item:e})=>{if("header"===e.kind)return(0,_jsxRuntime.jsx)(_reactNative.View,{accessible:!0,accessibilityRole:"header",style:[z.sectionHeader,{paddingHorizontal:I.spacing.lg,paddingTop:I.spacing.md}],children:l?l(e.title):(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[z.sectionTitle,{color:I.colors.text.tertiary,fontSize:I.typography.fontSize.xs,fontWeight:I.typography.fontWeight.semibold}],children:e.title.toUpperCase()})});const t=e.option,r=m(t),i=h(t),a=x(t),o=y(t),s=f(i),n=g(t),d=_?.(t)??!1;return(0,_jsxRuntime.jsxs)(_reactNative.Pressable,{onPress:()=>b(t),disabled:n,android_ripple:{color:I.colors.surface.pressed,borderless:!1},accessibilityRole:"button",accessibilityLabel:r,accessibilityState:{selected:s,disabled:n},"aria-selected":s,"aria-disabled":n,style:({pressed:e})=>[z.optionRow,{backgroundColor:s?I.colors.surface.selected:e?I.colors.surface.pressed:"transparent",opacity:n?.5:1,paddingHorizontal:I.spacing.lg,paddingVertical:I.spacing.md},N,s?T:null],children:[c?(0,_jsxRuntime.jsx)(_reactNative.View,{style:z.optionTextWrap,children:c(t,{selected:s,disabled:n})}):(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[o?(0,_jsxRuntime.jsx)(_reactNative.View,{style:z.optionIcon,children:o}):null,(0,_jsxRuntime.jsxs)(_reactNative.View,{style:z.optionTextWrap,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[z.optionLabel,{color:d?I.colors.toneText.error:s?I.colors.primary:I.colors.text.primary,fontSize:I.typography.fontSize.base,fontWeight:s?I.typography.fontWeight.semibold:I.typography.fontWeight.medium},C,s?w:null],children:r}),a?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[z.optionDescription,{color:I.colors.text.tertiary,fontSize:I.typography.fontSize.sm}],numberOfLines:2,children:a}):null]})]}),v?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[z.checkbox,{borderColor:s?I.colors.primary:I.colors.border.primary,backgroundColor:s?I.colors.primary:"transparent"}],children:s?(0,_jsxRuntime.jsx)(_reactNative.View,{style:z.checkboxTick}):null}):s?"icon"===I.components.optionSheet?.selectedMarker?(0,_jsxRuntime.jsx)(_reactNative.View,{style:z.singleSelectedIcon,children:(I.icons?.selectedTick??_defaultIcons.defaultIcons.selectedTick)({size:20,color:I.colors.primary})}):(0,_jsxRuntime.jsx)(_reactNative.View,{style:[z.singleSelectedDot,{backgroundColor:I.colors.primary}]}):null]})},onScrollToIndexFailed:ye,overScrollMode:"never",bounces:!1,keyboardShouldPersistTaps:"handled",showsVerticalScrollIndicator:!pe,style:pe?z.listBesideRail:null,ListEmptyComponent:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[z.empty,{color:I.colors.text.tertiary,fontSize:I.typography.fontSize.sm,paddingVertical:I.spacing.xl}],children:p})})}),pe?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[z.rail,{paddingRight:I.spacing.xs}],accessibilityRole:"list",accessibilityLabel:"Jump to letter",testID:"option-sheet-alphabet",children:me.map(e=>{const t=ue.has(e);return(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:()=>he(e),disabled:!t,hitSlop:{left:8,right:8},accessibilityRole:"button",accessibilityLabel:`Jump to ${e}`,accessibilityState:{disabled:!t},"aria-disabled":!t,style:z.railLetter,children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[z.railLetterText,{color:t?I.colors.primary:I.colors.text.tertiary,fontSize:I.typography.fontSize.xs,fontWeight:I.typography.fontWeight.semibold,opacity:t?1:.45}],children:e})},e)})}):null]}),v?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[z.sheetFooter,{borderTopColor:I.colors.border.secondary,paddingHorizontal:I.spacing.lg,paddingVertical:I.spacing.md}],children:(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:ce,accessibilityRole:"button",accessibilityLabel:"Done",style:({pressed:e})=>[z.doneButton,{backgroundColor:e?I.colors.primaryPressed:I.colors.primary,borderRadius:I.radius.md,..._corners.smoothCorners,paddingVertical:I.spacing.sm,paddingHorizontal:I.spacing.lg}],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:{color:I.colors.onPrimary,fontSize:I.typography.fontSize.base,fontWeight:I.typography.fontWeight.semibold},children:"Done"})})}):null]}),(0,_jsxRuntime.jsx)(_ToastProvider.ToastHost,{})]})})})};exports.OptionSheet=OptionSheet,OptionSheet.displayName="OptionSheet";const transparentOf=e=>{const t=e.match(/^rgba?\(([^)]+)\)$/);if(!t)return"transparent";const[r,i,a]=t[1].split(",").map(e=>e.trim());return`rgba(${r}, ${i}, ${a}, 0)`},buildStyles=e=>_reactNative.StyleSheet.create({sheet:{position:"absolute",left:0,right:0,bottom:0,paddingBottom:16,overflow:"hidden"},sheetHandleRow:{alignItems:"center",paddingTop:10,paddingBottom:8},sheetHandle:{width:36,height:4,borderRadius:2,..._corners.smoothCorners},sheetTitle:{includeFontPadding:!1},searchWrap:{width:"auto"},searchBox:{flexDirection:"row",alignItems:"center",borderWidth:1},searchInput:{flex:1,includeFontPadding:!1},optionRow:{flexDirection:"row",alignItems:"center"},sectionHeader:{paddingBottom:4},listWrap:{flexShrink:1},listRow:{flexDirection:"row"},listBesideRail:{flex:1},rail:{justifyContent:"space-between",alignItems:"center",alignSelf:"stretch",paddingVertical:4},railLetter:{paddingHorizontal:4,minHeight:14,justifyContent:"center"},railLetterText:{includeFontPadding:!1,lineHeight:14},sectionTitle:{includeFontPadding:!1,letterSpacing:.6},optionIcon:{marginRight:12},optionTextWrap:{flex:1},optionLabel:{includeFontPadding:!1},optionDescription:{includeFontPadding:!1,marginTop:2},checkbox:{width:22,height:22,borderRadius:6,..._corners.smoothCorners,borderWidth:2,alignItems:"center",justifyContent:"center",marginLeft:12},checkboxTick:{width:10,height:6,borderLeftWidth:2,borderBottomWidth:2,borderColor:e.colors.onPrimary,transform:[{rotate:"-45deg"},{translateY:-1}]},singleSelectedDot:{width:8,height:8,borderRadius:4,..._corners.smoothCorners,marginLeft:12},singleSelectedIcon:{marginLeft:12},empty:{textAlign:"center"},sheetFooter:{borderTopWidth:_reactNative.StyleSheet.hairlineWidth,alignItems:"flex-end"},doneButton:{alignSelf:"flex-end"}});var _default=exports.default=OptionSheet;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.ProgressBar=void 0;var _react=require("react"),_reactNative=require("react-native"),_useReducedMotion=require("../../hooks/useReducedMotion.js"),_index=require("../../theme/index.js"),_color=require("../../utils/color.js"),_corners=require("../../utils/corners.js"),_jsxRuntime=require("react/jsx-runtime");const toneColor=(e,t)=>{switch(t){case"success":return e.colors.success;case"warning":return e.colors.warning;case"error":return e.colors.error;default:return e.colors.primary}},GLOW_LOCATIONS=[0,.35,.5,.65,1],glowOf=e=>{const t=(0,_color.tintOf)(e,0,"transparent"),r=(0,_color.tintOf)(e,.6,e);return{colors:[t,r,e,r,t],locations:GLOW_LOCATIONS,start:{x:0,y:.5},end:{x:1,y:.5}}},clampProgress=e=>"number"!=typeof e||Number.isNaN(e)||e<0?0:e>1?1:e,ProgressBar=exports.ProgressBar=(0,_react.forwardRef)((e,t)=>{const r=(0,_index.useTheme)(),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.ProgressBar=void 0;var _react=require("react"),_reactNative=require("react-native"),_useReducedMotion=require("../../hooks/useReducedMotion.js"),_index=require("../../theme/index.js"),_color=require("../../utils/color.js"),_corners=require("../../utils/corners.js"),_jsxRuntime=require("react/jsx-runtime");const toneColor=(e,t)=>{switch(t){case"success":return e.colors.success;case"warning":return e.colors.warning;case"error":return e.colors.error;default:return e.colors.primary}},GLOW_LOCATIONS=[0,.35,.5,.65,1],glowOf=e=>{const t=(0,_color.tintOf)(e,0,"transparent"),r=(0,_color.tintOf)(e,.6,e);return{colors:[t,r,e,r,t],locations:GLOW_LOCATIONS,start:{x:0,y:.5},end:{x:1,y:.5}}},clampProgress=e=>"number"!=typeof e||Number.isNaN(e)||e<0?0:e>1?1:e,ProgressBar=exports.ProgressBar=(0,_react.forwardRef)((e,t)=>{const r=(0,_index.useTheme)(),a=(0,_useReducedMotion.useReducedMotion)(),{progress:i,label:s,showPercent:n=!1,indeterminate:o,height:l=6,radius:c,tone:u="primary",trackColor:d,barColor:m,gradient:_,segments:p,animated:g=!0,style:x,containerStyle:y,barStyle:h,accessibilityLabel:f,testID:v}=e,b=o??"number"!=typeof i,R=clampProgress(i),j=(0,_react.useRef)((0,_index.createAnimatedValue)(R)).current,w=(0,_react.useRef)((0,_index.createAnimatedValue)(0)).current,N=(0,_react.useRef)((0,_index.createAnimatedValue)(0)).current,V=(0,_react.useRef)(0),A=r.components.progressBar?.determinateAnimationDuration??400,S=r.components.progressBar?.indeterminateLoopDuration??1500,B=r.components.progressBar?.indeterminateWidth??"30%",C=(0,_react.useMemo)(()=>buildStyles(r),[r]),O=c??r.radius.full,P=d??r.colors.surface.disabled,M=m??toneColor(r,u),L=(0,_react.useMemo)(()=>_?"string"==typeof _?r.gradients[_]??null:_:null,[_,r.gradients]),k=(0,_react.useMemo)(()=>glowOf(M),[M]),D=Array.isArray(p)&&p.length>0;(0,_react.useEffect)(()=>{b||(g?_reactNative.Animated.timing(j,{toValue:R,duration:A,easing:_reactNative.Easing.bezier(...r.motion.easing.standard),useNativeDriver:!1}).start():j.setValue(R))},[g,R,A,j,b,r]),(0,_react.useEffect)(()=>{if(!b)return;(0,_index.setNativeValue)(w,0);const e=_reactNative.Animated.loop(_reactNative.Animated.timing(w,{toValue:1,duration:S,easing:_reactNative.Easing.inOut(_reactNative.Easing.ease),useNativeDriver:!0}));return e.start(),()=>{e.stop()}},[b,w,S]);const q=j.interpolate({inputRange:[0,1],outputRange:["0%","100%"]}),E=w.interpolate({inputRange:[0,1],outputRange:[-1,1]}),G=w.interpolate({inputRange:[0,.5,1],outputRange:[.4,1,.4]}),I=n&&!b&&!D,T=null!=s||I,F=f??("string"==typeof s?s:void 0),z=(0,_jsxRuntime.jsx)(_reactNative.View,{ref:t,accessibilityRole:"progressbar",accessibilityLabel:F,accessibilityValue:b?{text:"Loading"}:{min:0,max:100,now:Math.round(100*R)},testID:v,onLayout:e=>{const t=e.nativeEvent.layout.width;V.current=t,(0,_index.setNativeValue)(N,t)},style:[C.track,{height:l,borderRadius:O,..._corners.smoothCorners,backgroundColor:P},x,y],children:D?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[C.segments,{height:l}],children:(p??[]).map((e,t)=>(0,_jsxRuntime.jsx)(_reactNative.View,{style:{width:100*clampProgress(e.value)+"%",height:l,backgroundColor:e.color??toneColor(r,e.tone??"primary")}},t))}):b?(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:[C.indeterminateBar,{height:l,width:a?"100%":B,opacity:a?G:1,transform:a?[]:[{translateX:_reactNative.Animated.multiply(E,N)}]},h],children:(0,_jsxRuntime.jsx)(_index.Gradient,{gradient:k,style:_reactNative.StyleSheet.absoluteFill})}):(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:[C.determinateBar,{height:l,borderRadius:O,..._corners.smoothCorners,backgroundColor:L?"transparent":M,width:q,overflow:L?"hidden":void 0},h],children:L?(0,_jsxRuntime.jsx)(_index.Gradient,{gradient:L,style:_reactNative.StyleSheet.absoluteFill}):null})});if(!T)return z;const W={fontSize:r.typography.fontSize.sm,...(0,_index.fontFor)(r,"medium")};return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:C.wrapper,children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[C.labelRow,{marginBottom:r.spacing.xs}],children:["string"==typeof s||"number"==typeof s?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[C.label,W,{color:r.colors.text.primary}],children:s}):(0,_jsxRuntime.jsx)(_reactNative.View,{style:C.label,children:s}),I?(0,_jsxRuntime.jsx)(_reactNative.Text,{accessible:!1,importantForAccessibility:"no",style:[W,{color:r.colors.text.secondary}],children:`${Math.round(100*R)}%`}):null]}),z]})});ProgressBar.displayName="ProgressBar";const buildStyles=e=>_reactNative.StyleSheet.create({wrapper:{width:"100%"},labelRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",columnGap:8},label:{flexShrink:1},track:{width:"100%",overflow:"hidden"},determinateBar:{position:"absolute",left:0,top:0},indeterminateBar:{position:"absolute",left:0,top:0},segments:{flexDirection:"row",width:"100%"}});var _default=exports.default=ProgressBar;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Screen=Screen;var _react=require("react"),_reactNative=require("react-native"),_reactNativeKeyboardController=require("react-native-keyboard-controller"),_reactNativeSafeAreaContext=require("react-native-safe-area-context"),_useRefreshControl=require("../../hooks/useRefreshControl.js"),_index=require("../../theme/index.js"),_index2=require("../AppBar/index.js"),_index3=require("../KeyboardAwareScrollView/index.js"),_index4=require("../KeyboardToolbar/index.js"),_jsxRuntime=require("react/jsx-runtime");const DEFAULT_EDGES=["top","bottom"],SCROLL_EVENT_THROTTLE=16,noop=()=>{},buildStyles=e=>_reactNative.StyleSheet.create({flex:{flex:1},root:{flex:1,backgroundColor:e.colors.background.primary},overlay:{position:"absolute",top:0,left:0,right:0},footer:{backgroundColor:e.colors.background.primary,borderTopWidth:_reactNative.StyleSheet.hairlineWidth,borderTopColor:e.colors.border.primary}});function Screen(e){const{title:t,subtitle:r,largeTitle:o=!0,onBack:i,rightActions:n,leading:a,children:l,onRefresh:s,refreshing:d=!1,footer:c,footerStyle:u,scroll:_=!0,list:f,edges:v=DEFAULT_EDGES,keyboardToolbar:x=!0,contentContainerStyle:h,style:p,testID:y}=e,g=(0,_index.useTheme)(),b=(0,_reactNativeSafeAreaContext.useSafeAreaInsets)(),m=(0,_react.useMemo)(()=>buildStyles(g),[g]),[S]=(0,_react.useState)(()=>new _reactNative.Animated.Value(0)),[j,R]=(0,_react.useState)(0),T=void 0!==i,C=(0,_react.useRef)(i);C.current=i;const E=Boolean(t||r||i||a||n?.length),N=o&&void 0!==t,k=N&&(void 0!==f||_),A=k?j:0,L=void 0!==c,{refreshControl:w}=(0,_useRefreshControl.useRefreshControl)({onRefresh:s??noop,refreshing:d}),q=s?(0,_react.cloneElement)(w,{progressViewOffset:A}):void 0,B=(0,_react.useMemo)(()=>_reactNative.Animated.event([{nativeEvent:{contentOffset:{y:S}}}],{useNativeDriver:!1}),[S]),V=(0,_react.useCallback)(e=>{const{height:t}=e.nativeEvent.layout;R(e=>Math.max(e,t))},[]);(0,_react.useEffect)(()=>{if(!T)return;const e=_reactNative.BackHandler.addEventListener("hardwareBackPress",()=>(C.current?.(),!0));return()=>e.remove()},[T]);const D=v.includes("left")?b.left:0,K=v.includes("right")?b.right:0,O=v.includes("bottom")?b.bottom:0,M=v.includes("top")&&!E?b.top:0,F=v.filter(e=>"top"!==e&&!("bottom"===e&&L)),H=E?(0,_jsxRuntime.jsx)(_reactNative.View,{style:k?m.overlay:void 0,onLayout:k?V:void 0,children:(0,_jsxRuntime.jsx)(_index2.AppBar,{title:t,subtitle:r,variant:N?"large":"default",scrollY:k?S:void 0,onBack:i,rightActions:n,leading:a})}):null;let I;I=void 0!==f?(0,_jsxRuntime.jsx)(_reactNative.FlatList,{keyboardShouldPersistTaps:"handled",...f,refreshControl:q,onScroll:k?B:void 0,scrollEventThrottle:SCROLL_EVENT_THROTTLE,style:m.flex,contentContainerStyle:[{paddingTop:A,paddingLeft:D,paddingRight:K},{paddingBottom:L?0:O},f.contentContainerStyle,h]}):_?(0,_jsxRuntime.jsx)(_index3.KeyboardAwareScrollView,{refreshControl:q,onScroll:k?B:void 0,safeAreaEdges:F,style:m.flex,contentContainerStyle:[{paddingTop:A},h],children:l}):(0,_jsxRuntime.jsx)(_reactNative.View,{style:[m.flex,{paddingLeft:D,paddingRight:K,paddingBottom:L?0:O},h],children:l});const P=L?(0,_jsxRuntime.jsx)(_reactNativeKeyboardController.KeyboardStickyView,{style:[m.footer,{paddingLeft:D,paddingRight:K,paddingBottom:O},u],children:c}):null;return(0,_jsxRuntime.jsxs)(_reactNative.View,{testID:y,style:[m.root,{paddingTop:M},p],children:[k?null:H,I,P,k?H:null,x?(0,_jsxRuntime.jsx)(_index4.KeyboardToolbar,{}):null]})}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"Screen",{enumerable:!0,get:function(){return _Screen.Screen}});var _Screen=require("./Screen.js");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.SignaturePad=void 0;var _mobileCore=require("@webority/mobile-core"),_react=require("react"),_reactNative=require("react-native"),_reactNativeGestureHandler=require("react-native-gesture-handler"),_reactNativeSvg=_interopRequireWildcard(require("react-native-svg")),_index=require("../../theme/index.js"),_announce=require("../../utils/announce.js"),_corners=require("../../utils/corners.js"),_index2=require("../Button/index.js"),_index3=require("../Input/index.js"),_index4=require("../Text/index.js"),_signatureGeometry=require("./signatureGeometry.js"),_writePng=require("./writePng"),_jsxRuntime=require("react/jsx-runtime");function _interopRequireWildcard(e,t){if("function"==typeof WeakMap)var n=new WeakMap,r=new WeakMap;return(_interopRequireWildcard=function(e,t){if(!t&&e&&e.__esModule)return e;var a,i,o={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return o;if(a=t?r:n){if(a.has(e))return a.get(e);a.set(e,o)}for(const t in e)"default"!==t&&{}.hasOwnProperty.call(e,t)&&((i=(a=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,t))&&(i.get||i.set)?a(o,t,i):o[t]=e[t]);return o})(e,t)}const DEFAULT_LABELS={pad:"Signature pad",padHint:"Draw with one finger. To sign without drawing, use the type your name action.",caption:"Sign above the line. To start with an up or down stroke, rest your finger a moment first.",typedCaption:"Your typed name is used as your signature.",undo:"Undo",clear:"Clear",typeInstead:"Type your name instead",drawInstead:"Draw instead",typedLabel:"Type your name",typedPlaceholder:"Your full name",empty:"Not signed",signed:"Signed",typingAnnouncement:"Signing by typing your name. Your typed name is used as your signature. Choose Draw instead to sign with your finger.",drawingAnnouncement:"Signing by drawing. Use one finger on the pad.",clearedAnnouncement:"Signature cleared",undoneAnnouncement:"Last stroke removed",emptyError:"Add a signature first."},STROKE_WIDTH=2.5,SIDEWAYS_TO_DRAW=6,UPRIGHT_TO_SCROLL=8,REST_TO_DRAW_MS=200,MIN_POINT_GAP=.8,DEFAULT_HEIGHT=180,DEFAULT_NAME_LENGTH=100,MAX_EXPORT_SCALE=3,MIN_TARGET=44,BASELINE_OPACITY=.3,DISABLED_OPACITY=.5,TARGET_STYLE={minHeight:44},defaultScriptFont=()=>_reactNative.Platform.select({ios:"Snell Roundhand",default:"cursive"}),cssFontStack=e=>"cursive"===e?"cursive":`'${e}', cursive`,useScreenReader=()=>{const[e,t]=(0,_react.useState)(!1);return(0,_react.useEffect)(()=>{let e=!0;_reactNative.AccessibilityInfo.isScreenReaderEnabled().then(n=>{e&&t(n)});const n=_reactNative.AccessibilityInfo.addEventListener("screenReaderChanged",t);return()=>{e=!1,n.remove()}},[]),e},StrokePath=(0,_react.memo)(({points:e,color:t})=>(0,_jsxRuntime.jsx)(_reactNativeSvg.Path,{d:(0,_signatureGeometry.strokePath)(e),stroke:t,strokeWidth:2.5,strokeLinecap:"round",strokeLinejoin:"round",fill:"none"}));StrokePath.displayName="SignaturePadStroke";const Marks=({mode:e,strokes:t,name:n,color:r,fontFamily:a,width:i,height:o})=>"draw"===e?(0,_jsxRuntime.jsx)(_jsxRuntime.Fragment,{children:t.map(e=>(0,_jsxRuntime.jsx)(StrokePath,{points:e.points,color:r},e.id))}):n?(0,_jsxRuntime.jsx)(_reactNativeSvg.Text,{x:i/2,y:o*_signatureGeometry.BASELINE_RATIO,fontSize:(0,_signatureGeometry.typedFontSize)(i,n),fontFamily:a,textAnchor:"middle",fill:r,children:n}):null,SignaturePad=exports.SignaturePad=(0,_react.forwardRef)((e,t)=>{const{initialStrokes:n,onChange:r,initialTypedName:a="",onTypedNameChange:i,defaultMode:o="draw",onModeChange:s,onEmptyChange:c,allowTyped:u=!0,signedBy:d,signedAt:l,height:_=DEFAULT_HEIGHT,maxNameLength:m=DEFAULT_NAME_LENGTH,inkColor:g,paperColor:p,scriptFontFamily:y,labels:h,haptic:x="selection",disabled:f=!1,style:v,testID:w}=e,S=(0,_index.useTheme)(),R=void 0===g&&void 0===p,b=R?S.colors.text.primary:g??_index.lightTheme.colors.text.primary,T=R?S.colors.background.elevated:p??_index.lightTheme.colors.background.elevated,j=R?_index.lightTheme.colors.text.primary:b,E=R?_index.lightTheme.colors.background.elevated:T,A=j!==b||E!==T,C=y??defaultScriptFont(),N=(0,_react.useMemo)(()=>({...DEFAULT_LABELS,...h}),[h]),k=useScreenReader(),I=(0,_react.useRef)(null),L=(0,_react.useRef)(null),[P,D]=(0,_react.useState)(0),[G,M]=(0,_react.useState)(()=>(n??[]).map((e,t)=>({id:t+1,points:[...e]}))),F=(0,_react.useRef)(G),O=(0,_react.useRef)(G.length),H=(0,_react.useRef)(null),q=(0,_react.useRef)(null),[W,B]=(0,_react.useState)(u?o:"draw"),[Y,U]=(0,_react.useState)(a),[$,z]=(0,_react.useState)(null),V=(0,_react.useRef)(!1),K=(0,_react.useRef)({onChange:r,onTypedNameChange:i,onModeChange:s,onEmptyChange:c});(0,_react.useEffect)(()=>{K.current={onChange:r,onTypedNameChange:i,onModeChange:s,onEmptyChange:c}});const X="draw"===W&&!f,J="draw"===W?0===G.length:0===Y.trim().length,Q=(0,_react.useRef)(null);(0,_react.useEffect)(()=>{Q.current!==J&&(Q.current=J,K.current.onEmptyChange?.(J))},[J]);const Z=(0,_react.useCallback)(e=>{F.current=e,M(e)},[]),ee=(0,_react.useCallback)(()=>{z(Date.now()),K.current.onChange?.(F.current.map(e=>e.points))},[]),te=(0,_react.useMemo)(()=>{const pan=e=>_reactNativeGestureHandler.Gesture.Pan().enabled(X).runOnJS(!0).onBegin(e=>{H.current=(0,_signatureGeometry.pointOf)(e.x,e.y)}).onStart(t=>{q.current=e,O.current+=1;const n=(0,_signatureGeometry.pointOf)(t.x,t.y);Z([...F.current,{id:O.current,points:[H.current??n,n]}])}).onUpdate(t=>{if(q.current!==e)return;const n=F.current[F.current.length-1],r=(0,_signatureGeometry.pointOf)(t.x,t.y);(0,_signatureGeometry.distanceBetween)(n.points[n.points.length-1],r)<.8||Z([...F.current.slice(0,-1),{...n,points:[...n.points,r]}])}).onFinalize(()=>{q.current===e&&(q.current=null,ee())}),e=pan("sideways").activeOffsetX([-6,6]).failOffsetY([-8,8]),t=pan("rested").activateAfterLongPress(200);return _reactNativeGestureHandler.Gesture.Race(e,t)},[X,Z,ee]),ne=(0,_react.useCallback)(e=>{B(e),K.current.onModeChange?.(e),(0,_announce.announce)("type"===e?N.typingAnnouncement:N.drawingAnnouncement)},[N.typingAnnouncement,N.drawingAnnouncement]);(0,_react.useEffect)(()=>{k&&u&&!V.current&&"draw"===W&&0===F.current.length&&ne("type")},[k,u,W,ne]);const re=(0,_react.useCallback)(()=>{V.current=!0,ne("draw"===W?"type":"draw")},[W,ne]),ae=(0,_react.useCallback)(e=>{U(e),z(Date.now()),K.current.onTypedNameChange?.(e)},[]),ie=(0,_react.useCallback)(()=>{"type"===W?ae(""):(Z([]),ee()),(0,_announce.announce)(N.clearedAnnouncement)},[W,ae,Z,ee,N.clearedAnnouncement]),oe=(0,_react.useCallback)(()=>{"draw"===W&&0!==F.current.length&&(Z(F.current.slice(0,-1)),ee(),(0,_announce.announce)(N.undoneAnnouncement))},[W,Z,ee,N.undoneAnnouncement]),se=P||_signatureGeometry.FALLBACK_WIDTH;(0,_react.useImperativeHandle)(t,()=>({toFile:()=>new Promise((e,t)=>{if(J)return void t(new Error(N.emptyError));const n=A?L.current:I.current;if(!n)return void t(new Error("The signature pad is not on screen."));const r=Math.min(3,Math.max(1,_reactNative.PixelRatio.get()));n.toDataURL(n=>{try{e((0,_writePng.writePng)(n))}catch(e){t(e)}},{width:se*r,height:_*r})}),toSvg:()=>(0,_signatureGeometry.buildSignatureSvg)({width:se,height:_,mode:W,strokes:G.map(e=>e.points),typedName:Y,ink:j,paper:E,strokeWidth:2.5,fontFamily:cssFontStack(C)}),clear:ie,undo:oe,isEmpty:()=>J}),[J,N.emptyError,se,_,W,G,Y,A,j,E,C,ie,oe]);const ce=(0,_react.useMemo)(()=>[{name:"undo",label:N.undo},{name:"clear",label:N.clear},...u?[{name:"toggleMode",label:"draw"===W?N.typeInstead:N.drawInstead}]:[]],[N.undo,N.clear,N.typeInstead,N.drawInstead,u,W]),ue=(0,_react.useCallback)(e=>{if(f)return;const{actionName:t}=e.nativeEvent;"undo"===t?oe():"clear"===t?ie():"toggleMode"===t&&u&&re()},[f,oe,ie,re,u]),de=(0,_react.useCallback)(e=>{D(e.nativeEvent.layout.width)},[]),le=(0,_react.useMemo)(()=>_reactNative.StyleSheet.create({root:{gap:S.spacing.sm},pad:{height:_,borderWidth:S.colors.border.width,borderColor:S.colors.border.primary,borderRadius:S.radius.md,..._corners.smoothCorners,overflow:"hidden",backgroundColor:T,opacity:f?.5:1},baseline:{position:"absolute",left:S.spacing.md,right:S.spacing.md,top:_*_signatureGeometry.BASELINE_RATIO,height:_reactNative.StyleSheet.hairlineWidth,backgroundColor:b,opacity:.3},actions:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",flexWrap:"wrap",gap:S.spacing.xs},trailing:{flexDirection:"row",alignItems:"center",gap:S.spacing.xs}}),[S,_,T,b,f]),me=Y.trim(),ge=l??$,pe=d&&!J?`Signed by ${d}${ge?`, ${(0,_mobileCore.formatDateTime)(ge)}`:""}`:null,ye="type"===W&&me?`${N.pad}. ${me}`:N.pad;return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[le.root,v],testID:w,children:[(0,_jsxRuntime.jsx)(_reactNativeGestureHandler.GestureDetector,{gesture:te,children:(0,_jsxRuntime.jsxs)(_reactNative.View,{style:le.pad,onLayout:de,accessible:!0,accessibilityRole:"image",accessibilityLabel:ye,accessibilityHint:"draw"===W?N.padHint:void 0,accessibilityValue:{text:J?N.empty:N.signed},accessibilityState:{disabled:f},"aria-disabled":f,accessibilityActions:ce,onAccessibilityAction:ue,children:[A?(0,_jsxRuntime.jsxs)(_reactNativeSvg.default,{ref:L,style:_reactNative.StyleSheet.absoluteFill,width:"100%",height:_,children:[(0,_jsxRuntime.jsx)(_reactNativeSvg.Rect,{x:"0",y:"0",width:"100%",height:"100%",fill:E}),(0,_jsxRuntime.jsx)(Marks,{mode:W,strokes:G,name:me,color:j,fontFamily:C,width:se,height:_})]}):null,(0,_jsxRuntime.jsxs)(_reactNativeSvg.default,{ref:I,width:"100%",height:_,children:[(0,_jsxRuntime.jsx)(_reactNativeSvg.Rect,{x:"0",y:"0",width:"100%",height:"100%",fill:T}),(0,_jsxRuntime.jsx)(Marks,{mode:W,strokes:G,name:me,color:b,fontFamily:C,width:se,height:_})]}),(0,_jsxRuntime.jsx)(_reactNative.View,{pointerEvents:"none",style:le.baseline})]})}),"type"===W?(0,_jsxRuntime.jsx)(_index3.Input,{label:N.typedLabel,placeholder:N.typedPlaceholder,value:Y,onChangeText:ae,maxLength:m,disabled:f,autoComplete:"name",textContentType:"name",autoCapitalize:"words",autoCorrect:!1,returnKeyType:"done",testID:w?`${w}-name`:void 0}):null,(0,_jsxRuntime.jsx)(_index4.Text,{variant:"caption",color:"tertiary",children:"draw"===W?N.caption:N.typedCaption}),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:le.actions,children:[u?(0,_jsxRuntime.jsx)(_index2.Button,{title:"draw"===W?N.typeInstead:N.drawInstead,variant:"ghost",tone:"primary",size:"md",style:TARGET_STYLE,haptic:x,disabled:f,onPress:re,testID:w?`${w}-mode`:void 0}):(0,_jsxRuntime.jsx)(_reactNative.View,{}),"draw"===W&&G.length>0?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:le.trailing,children:[(0,_jsxRuntime.jsx)(_index2.Button,{title:N.undo,variant:"ghost",tone:"primary",size:"md",style:TARGET_STYLE,haptic:x,disabled:f,onPress:oe,testID:w?`${w}-undo`:void 0}),(0,_jsxRuntime.jsx)(_index2.Button,{title:N.clear,variant:"ghost",tone:"primary",size:"md",style:TARGET_STYLE,haptic:x,disabled:f,onPress:ie,testID:w?`${w}-clear`:void 0})]}):null,"type"===W&&me?(0,_jsxRuntime.jsx)(_index2.Button,{title:N.clear,variant:"ghost",tone:"primary",size:"md",style:TARGET_STYLE,haptic:x,disabled:f,onPress:ie,testID:w?`${w}-clear`:void 0}):null]}),pe?(0,_jsxRuntime.jsx)(_index4.Text,{variant:"caption",color:"secondary",children:pe}):null]})});SignaturePad.displayName="SignaturePad";var _default=exports.default=SignaturePad;
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.SignaturePad=void 0;var _mobileCore=require("@webority/mobile-core"),_react=require("react"),_reactNative=require("react-native"),_reactNativeGestureHandler=require("react-native-gesture-handler"),_reactNativeSvg=_interopRequireWildcard(require("react-native-svg")),_index=require("../../theme/index.js"),_announce=require("../../utils/announce.js"),_corners=require("../../utils/corners.js"),_index2=require("../Button/index.js"),_index3=require("../Input/index.js"),_index4=require("../Text/index.js"),_signatureGeometry=require("./signatureGeometry.js"),_writePng=require("./writePng"),_jsxRuntime=require("react/jsx-runtime");function _interopRequireWildcard(e,t){if("function"==typeof WeakMap)var n=new WeakMap,a=new WeakMap;return(_interopRequireWildcard=function(e,t){if(!t&&e&&e.__esModule)return e;var r,i,o={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return o;if(r=t?a:n){if(r.has(e))return r.get(e);r.set(e,o)}for(const t in e)"default"!==t&&{}.hasOwnProperty.call(e,t)&&((i=(r=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,t))&&(i.get||i.set)?r(o,t,i):o[t]=e[t]);return o})(e,t)}const DEFAULT_LABELS={pad:"Signature pad",padHint:"Draw with one finger. To sign without drawing, use the type your name action.",caption:"Sign above the line. To start with an up or down stroke, rest your finger a moment first.",typedCaption:"Your typed name is used as your signature.",undo:"Undo",clear:"Clear",typeInstead:"Type your name instead",drawInstead:"Draw instead",typedLabel:"Type your name",typedPlaceholder:"Your full name",empty:"Not signed",signed:"Signed",typingAnnouncement:"Signing by typing your name. Your typed name is used as your signature. Choose Draw instead to sign with your finger.",drawingAnnouncement:"Signing by drawing. Use one finger on the pad.",clearedAnnouncement:"Signature cleared",undoneAnnouncement:"Last stroke removed",emptyError:"Add a signature first.",expand:"Expand",done:"Done",close:"Close"},STROKE_WIDTH=2.5,SIDEWAYS_TO_DRAW=6,UPRIGHT_TO_SCROLL=8,REST_TO_DRAW_MS=200,MIN_POINT_GAP=.8,DEFAULT_HEIGHT=180,EXPANDED_CHROME=200,DEFAULT_NAME_LENGTH=100,MAX_EXPORT_SCALE=3,MIN_TARGET=44,BASELINE_OPACITY=.3,DISABLED_OPACITY=.5,TARGET_STYLE={minHeight:44},defaultScriptFont=()=>_reactNative.Platform.select({ios:"Snell Roundhand",default:"cursive"}),cssFontStack=e=>"cursive"===e?"cursive":`'${e}', cursive`,useScreenReader=()=>{const[e,t]=(0,_react.useState)(!1);return(0,_react.useEffect)(()=>{let e=!0;_reactNative.AccessibilityInfo.isScreenReaderEnabled().then(n=>{e&&t(n)});const n=_reactNative.AccessibilityInfo.addEventListener("screenReaderChanged",t);return()=>{e=!1,n.remove()}},[]),e},StrokePath=(0,_react.memo)(({points:e,color:t})=>(0,_jsxRuntime.jsx)(_reactNativeSvg.Path,{d:(0,_signatureGeometry.strokePath)(e),stroke:t,strokeWidth:2.5,strokeLinecap:"round",strokeLinejoin:"round",fill:"none"}));StrokePath.displayName="SignaturePadStroke";const Marks=({mode:e,strokes:t,name:n,color:a,fontFamily:r,width:i,height:o})=>"draw"===e?(0,_jsxRuntime.jsx)(_jsxRuntime.Fragment,{children:t.map(e=>(0,_jsxRuntime.jsx)(StrokePath,{points:e.points,color:a},e.id))}):n?(0,_jsxRuntime.jsx)(_reactNativeSvg.Text,{x:i/2,y:o*_signatureGeometry.BASELINE_RATIO,fontSize:(0,_signatureGeometry.typedFontSize)(i,n),fontFamily:r,textAnchor:"middle",fill:a,children:n}):null,SignaturePadSurface=(0,_react.forwardRef)((e,t)=>{const{expandable:n,initialStrokes:a,onChange:r,initialTypedName:i="",onTypedNameChange:o,defaultMode:s="draw",onModeChange:c,onEmptyChange:d,allowTyped:l=!0,signedBy:u,signedAt:_,height:m=DEFAULT_HEIGHT,maxNameLength:p=DEFAULT_NAME_LENGTH,inkColor:g,paperColor:y,scriptFontFamily:h,labels:x,haptic:f="selection",disabled:v=!1,style:S,testID:R}=e,j=(0,_index.useTheme)(),w=void 0===g&&void 0===y,T=w?j.colors.text.primary:g??_index.lightTheme.colors.text.primary,b=w?j.colors.background.elevated:y??_index.lightTheme.colors.background.elevated,E=w?_index.lightTheme.colors.text.primary:T,C=w?_index.lightTheme.colors.background.elevated:b,A=E!==T||C!==b,N=h??defaultScriptFont(),k=(0,_react.useMemo)(()=>({...DEFAULT_LABELS,...x}),[x]),P=useScreenReader(),I=(0,_react.useRef)(null),L=(0,_react.useRef)(null),[D,G]=(0,_react.useState)(0),[M,F]=(0,_react.useState)(()=>(a??[]).map((e,t)=>({id:t+1,points:[...e]}))),O=(0,_react.useRef)(M),H=(0,_react.useRef)(M.length),B=(0,_react.useRef)(null),q=(0,_react.useRef)(null),[W,Y]=(0,_react.useState)(l?s:"draw"),[$,U]=(0,_react.useState)(i),[z,V]=(0,_react.useState)(null),X=(0,_react.useRef)(!1),{height:K}=(0,_reactNative.useWindowDimensions)(),[J,Q]=(0,_react.useState)(!1),[Z,ee]=(0,_react.useState)([]),te=(0,_react.useRef)({onChange:r,onTypedNameChange:o,onModeChange:c,onEmptyChange:d});(0,_react.useEffect)(()=>{te.current={onChange:r,onTypedNameChange:o,onModeChange:c,onEmptyChange:d}});const ne="draw"===W&&!v,ae="draw"===W?0===M.length:0===$.trim().length,re=(0,_react.useRef)(null);(0,_react.useEffect)(()=>{re.current!==ae&&(re.current=ae,te.current.onEmptyChange?.(ae))},[ae]);const ie=(0,_react.useCallback)(e=>{O.current=e,F(e)},[]),oe=(0,_react.useCallback)(()=>{V(Date.now()),te.current.onChange?.(O.current.map(e=>e.points))},[]),se=(0,_react.useMemo)(()=>{const pan=e=>_reactNativeGestureHandler.Gesture.Pan().enabled(ne).runOnJS(!0).onBegin(e=>{B.current=(0,_signatureGeometry.pointOf)(e.x,e.y)}).onStart(t=>{q.current=e,H.current+=1;const n=(0,_signatureGeometry.pointOf)(t.x,t.y);ie([...O.current,{id:H.current,points:[B.current??n,n]}])}).onUpdate(t=>{if(q.current!==e)return;const n=O.current[O.current.length-1],a=(0,_signatureGeometry.pointOf)(t.x,t.y);(0,_signatureGeometry.distanceBetween)(n.points[n.points.length-1],a)<.8||ie([...O.current.slice(0,-1),{...n,points:[...n.points,a]}])}).onFinalize(()=>{q.current===e&&(q.current=null,oe())}),e=pan("sideways").activeOffsetX([-6,6]).failOffsetY([-8,8]),t=pan("rested").activateAfterLongPress(200);return _reactNativeGestureHandler.Gesture.Race(e,t)},[ne,ie,oe]),ce=(0,_react.useCallback)(e=>{Y(e),te.current.onModeChange?.(e),(0,_announce.announce)("type"===e?k.typingAnnouncement:k.drawingAnnouncement)},[k.typingAnnouncement,k.drawingAnnouncement]);(0,_react.useEffect)(()=>{P&&l&&!X.current&&"draw"===W&&0===O.current.length&&ce("type")},[P,l,W,ce]);const de=(0,_react.useCallback)(()=>{X.current=!0,ce("draw"===W?"type":"draw")},[W,ce]),le=(0,_react.useCallback)(e=>{U(e),V(Date.now()),te.current.onTypedNameChange?.(e)},[]),ue=(0,_react.useCallback)(()=>{"type"===W?le(""):(ie([]),oe()),(0,_announce.announce)(k.clearedAnnouncement)},[W,le,ie,oe,k.clearedAnnouncement]),me=(0,_react.useCallback)(()=>{"draw"===W&&0!==O.current.length&&(ie(O.current.slice(0,-1)),oe(),(0,_announce.announce)(k.undoneAnnouncement))},[W,ie,oe,k.undoneAnnouncement]),pe=(0,_react.useCallback)(()=>{ee(O.current.map(e=>e.points)),Q(!0)},[]),ge=(0,_react.useCallback)(()=>{Q(!1)},[]),ye=(0,_react.useCallback)(()=>{ie(Z.map(e=>(H.current+=1,{id:H.current,points:[...e]}))),oe(),Q(!1)},[Z,ie,oe]),he=D||_signatureGeometry.FALLBACK_WIDTH;(0,_react.useImperativeHandle)(t,()=>({toFile:()=>new Promise((e,t)=>{if(ae)return void t(new Error(k.emptyError));const n=A?L.current:I.current;if(!n)return void t(new Error("The signature pad is not on screen."));const a=Math.min(3,Math.max(1,_reactNative.PixelRatio.get()));n.toDataURL(n=>{try{e((0,_writePng.writePng)(n))}catch(e){t(e)}},{width:he*a,height:m*a})}),toSvg:()=>(0,_signatureGeometry.buildSignatureSvg)({width:he,height:m,mode:W,strokes:M.map(e=>e.points),typedName:$,ink:E,paper:C,strokeWidth:2.5,fontFamily:cssFontStack(N)}),clear:ue,undo:me,isEmpty:()=>ae}),[ae,k.emptyError,he,m,W,M,$,A,E,C,N,ue,me]);const xe=(0,_react.useMemo)(()=>[{name:"undo",label:k.undo},{name:"clear",label:k.clear},...l?[{name:"toggleMode",label:"draw"===W?k.typeInstead:k.drawInstead}]:[]],[k.undo,k.clear,k.typeInstead,k.drawInstead,l,W]),fe=(0,_react.useCallback)(e=>{if(v)return;const{actionName:t}=e.nativeEvent;"undo"===t?me():"clear"===t?ue():"toggleMode"===t&&l&&de()},[v,me,ue,de,l]),ve=(0,_react.useCallback)(e=>{G(e.nativeEvent.layout.width)},[]),Se=(0,_react.useMemo)(()=>_reactNative.StyleSheet.create({root:{gap:j.spacing.sm},pad:{height:m,borderWidth:j.colors.border.width,borderColor:j.colors.border.primary,borderRadius:j.radius.md,..._corners.smoothCorners,overflow:"hidden",backgroundColor:b,opacity:v?.5:1},baseline:{position:"absolute",left:j.spacing.md,right:j.spacing.md,top:m*_signatureGeometry.BASELINE_RATIO,height:_reactNative.StyleSheet.hairlineWidth,backgroundColor:T,opacity:.3},actions:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",flexWrap:"wrap",gap:j.spacing.xs},trailing:{flexDirection:"row",alignItems:"center",gap:j.spacing.xs},expandedRoot:{flex:1,padding:j.spacing.md,gap:j.spacing.sm,backgroundColor:j.colors.background.primary},expandedBar:{flexDirection:"row",alignItems:"center",justifyContent:"space-between"}}),[j,m,b,T,v]),Re=$.trim(),je=_??z,we=u&&!ae?`Signed by ${u}${je?`, ${(0,_mobileCore.formatDateTime)(je)}`:""}`:null,Te="type"===W&&Re?`${k.pad}. ${Re}`:k.pad;return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[Se.root,S],testID:R,children:[(0,_jsxRuntime.jsx)(_reactNativeGestureHandler.GestureDetector,{gesture:se,children:(0,_jsxRuntime.jsxs)(_reactNative.View,{style:Se.pad,onLayout:ve,accessible:!0,accessibilityRole:"image",accessibilityLabel:Te,accessibilityHint:"draw"===W?k.padHint:void 0,accessibilityValue:{text:ae?k.empty:k.signed},accessibilityState:{disabled:v},"aria-disabled":v,accessibilityActions:xe,onAccessibilityAction:fe,children:[A?(0,_jsxRuntime.jsxs)(_reactNativeSvg.default,{ref:L,style:_reactNative.StyleSheet.absoluteFill,width:"100%",height:m,children:[(0,_jsxRuntime.jsx)(_reactNativeSvg.Rect,{x:"0",y:"0",width:"100%",height:"100%",fill:C}),(0,_jsxRuntime.jsx)(Marks,{mode:W,strokes:M,name:Re,color:E,fontFamily:N,width:he,height:m})]}):null,(0,_jsxRuntime.jsxs)(_reactNativeSvg.default,{ref:I,width:"100%",height:m,children:[(0,_jsxRuntime.jsx)(_reactNativeSvg.Rect,{x:"0",y:"0",width:"100%",height:"100%",fill:b}),(0,_jsxRuntime.jsx)(Marks,{mode:W,strokes:M,name:Re,color:T,fontFamily:N,width:he,height:m})]}),(0,_jsxRuntime.jsx)(_reactNative.View,{pointerEvents:"none",style:Se.baseline})]})}),"type"===W?(0,_jsxRuntime.jsx)(_index3.Input,{label:k.typedLabel,placeholder:k.typedPlaceholder,value:$,onChangeText:le,maxLength:p,disabled:v,autoComplete:"name",textContentType:"name",autoCapitalize:"words",autoCorrect:!1,returnKeyType:"done",testID:R?`${R}-name`:void 0}):null,(0,_jsxRuntime.jsx)(_index4.Text,{variant:"caption",color:"tertiary",children:"draw"===W?k.caption:k.typedCaption}),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:Se.actions,children:[l?(0,_jsxRuntime.jsx)(_index2.Button,{title:"draw"===W?k.typeInstead:k.drawInstead,variant:"ghost",tone:"primary",size:"md",style:TARGET_STYLE,haptic:f,disabled:v,onPress:de,testID:R?`${R}-mode`:void 0}):(0,_jsxRuntime.jsx)(_reactNative.View,{}),"draw"===W?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:Se.trailing,children:[M.length>0?(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_index2.Button,{title:k.undo,variant:"ghost",tone:"primary",size:"md",style:TARGET_STYLE,haptic:f,disabled:v,onPress:me,testID:R?`${R}-undo`:void 0}),(0,_jsxRuntime.jsx)(_index2.Button,{title:k.clear,variant:"ghost",tone:"primary",size:"md",style:TARGET_STYLE,haptic:f,disabled:v,onPress:ue,testID:R?`${R}-clear`:void 0})]}):null,n?(0,_jsxRuntime.jsx)(_index2.Button,{title:k.expand,variant:"ghost",tone:"primary",size:"md",style:TARGET_STYLE,haptic:f,disabled:v,onPress:pe,testID:R?`${R}-expand`:void 0}):null]}):null,"type"===W&&Re?(0,_jsxRuntime.jsx)(_index2.Button,{title:k.clear,variant:"ghost",tone:"primary",size:"md",style:TARGET_STYLE,haptic:f,disabled:v,onPress:ue,testID:R?`${R}-clear`:void 0}):null]}),we?(0,_jsxRuntime.jsx)(_index4.Text,{variant:"caption",color:"secondary",children:we}):null,n?(0,_jsxRuntime.jsx)(_reactNative.Modal,{visible:J,animationType:"slide",presentationStyle:"fullScreen",onRequestClose:ge,children:(0,_jsxRuntime.jsxs)(ExpandedRoot,{style:Se.expandedRoot,children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:Se.expandedBar,children:[(0,_jsxRuntime.jsx)(_index2.Button,{title:k.close,variant:"ghost",tone:"primary",size:"md",style:TARGET_STYLE,haptic:f,onPress:ge,testID:R?`${R}-close`:void 0}),(0,_jsxRuntime.jsx)(_index2.Button,{title:k.done,variant:"solid",tone:"primary",size:"md",style:TARGET_STYLE,haptic:f,onPress:ye,testID:R?`${R}-done`:void 0})]}),J?(0,_jsxRuntime.jsx)(SignaturePadSurface,{expandable:!1,defaultMode:"draw",allowTyped:!1,initialStrokes:Z,onChange:ee,height:Math.max(DEFAULT_HEIGHT,K-200),inkColor:g,paperColor:y,scriptFontFamily:h,labels:x,haptic:f,testID:R?`${R}-expanded`:void 0}):null]})}):null]})});SignaturePadSurface.displayName="SignaturePadSurface";const ExpandedRoot="android"===_reactNative.Platform.OS?_reactNativeGestureHandler.GestureHandlerRootView:_reactNative.View,SignaturePad=exports.SignaturePad=(0,_react.forwardRef)((e,t)=>(0,_jsxRuntime.jsx)(SignaturePadSurface,{...e,expandable:!0,ref:t}));SignaturePad.displayName="SignaturePad";var _default=exports.default=SignaturePad;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.SkeletonText=exports.SkeletonCircle=exports.Skeleton=void 0;var _react=require("react"),_reactNative=require("react-native"),_index=require("../../theme/index.js"),_Gradient=require("../../theme/Gradient.js"),_index2=require("../../utils/index.js"),_corners=require("../../utils/corners.js"),_SkeletonClock=require("./SkeletonClock.js"),_SkeletonProvider=require("./SkeletonProvider.js"),_jsxRuntime=require("react/jsx-runtime");const resolveRadius=(e,t)=>"number"==typeof t?t:e.radius[t],resolveWidth=e=>void 0===e?"100%":e,radiusForShape=(e,t,
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.SkeletonText=exports.SkeletonCircle=exports.Skeleton=void 0;var _react=require("react"),_reactNative=require("react-native"),_useReducedMotion=require("../../hooks/useReducedMotion.js"),_index=require("../../theme/index.js"),_Gradient=require("../../theme/Gradient.js"),_index2=require("../../utils/index.js"),_corners=require("../../utils/corners.js"),_SkeletonClock=require("./SkeletonClock.js"),_SkeletonProvider=require("./SkeletonProvider.js"),_jsxRuntime=require("react/jsx-runtime");const resolveRadius=(e,t)=>"number"==typeof t?t:e.radius[t],resolveWidth=e=>void 0===e?"100%":e,radiusForShape=(e,t,s,i,r)=>{if(void 0!==r)return resolveRadius(e,r);switch(t){case"circle":return"number"==typeof s?Math.min(s,i)/2:i/2;case"rounded":return e.radius.md;default:return e.radius.sm}},Skeleton=({shape:e="rect",width:t="100%",height:s=16,radius:i,variant:r,speed:o,colors:n,style:a,testID:l})=>{const u=(0,_index.useTheme)(),c=(0,_SkeletonProvider.useSkeletonDefaults)(),d=(0,_SkeletonClock.useSkeletonClock)(),m=(0,_useReducedMotion.useReducedMotion)(),h=r??c.variant??"shimmer",p=m&&"auto"===(c.animation??"auto");let x=h;d.enabled?p&&"shimmer"===h&&(x="pulse"):x="none";const k=n?.background??c.colors?.background??u.colors.skeleton.background,S=n?.highlight??c.colors?.highlight??u.colors.skeleton.highlight,{responsive:_}=(0,_index2.useScreenDimensions)(),v=(0,_react.useMemo)(()=>buildStyles(),[]),y=resolveWidth(t),g=_.size(s),b=radiusForShape(u,e,y,g,i),[j,R]=(0,_react.useState)(0),f=(0,_react.useMemo)(()=>j<=0?0:Math.max(48,.7*j),[j]),w=(0,_react.useMemo)(()=>j<=0?0:d.shimmer.interpolate({inputRange:[0,1],outputRange:[-f,j]}),[d.shimmer,f,j]),C=(0,_react.useMemo)(()=>"none"===x?null:"pulse"===x?(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{pointerEvents:"none",style:[_reactNative.StyleSheet.absoluteFill,{backgroundColor:S,opacity:d.pulse.interpolate({inputRange:[0,1],outputRange:[0,.55]})}]}):j<=0?null:(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{pointerEvents:"none",style:[v.shimmerBand,{width:f,transform:[{translateX:w}],experimental_backgroundImage:[(0,_Gradient.toBackgroundImage)({colors:["transparent",S,"transparent"],locations:[0,.5,1],start:{x:0,y:.5},end:{x:1,y:.5}})]}]}),[x,S,d.pulse,j,v.shimmerBand,f,w]);return(0,_jsxRuntime.jsx)(_reactNative.View,{onLayout:e=>{const t=e.nativeEvent.layout.width;t!==j&&R(t)},accessible:!0,accessibilityLabel:"Loading",accessibilityRole:"progressbar",accessibilityState:{busy:!0},"aria-busy":!0,accessibilityLiveRegion:"polite",testID:l,style:[v.base,{width:y,height:g,borderRadius:b,..._corners.smoothCorners,backgroundColor:k},a],children:C})};exports.Skeleton=Skeleton,Skeleton.displayName="Skeleton";const SkeletonCircle=({size:e,style:t,...s})=>{const{responsive:i}=(0,_index2.useScreenDimensions)(),r=i.size(e);return(0,_jsxRuntime.jsx)(Skeleton,{...s,shape:"circle",width:r,height:e,style:t})};exports.SkeletonCircle=SkeletonCircle,SkeletonCircle.displayName="SkeletonCircle";const SkeletonText=({lines:e=3,lastLineWidth:t="60%",spacing:s,fontSize:i=14,variant:r,speed:o,radius:n="sm",width:a="100%",style:l,testID:u})=>{const c=(0,_index.useTheme)(),d=s??c.spacing.xs,m=Math.max(1,e);return(0,_jsxRuntime.jsx)(_reactNative.View,{style:l,testID:u,children:Array.from({length:m}).map((e,s)=>{const l=s===m-1&&m>1?t:a;return(0,_jsxRuntime.jsx)(Skeleton,{shape:"text",width:l,height:i,radius:n,variant:r,speed:o,style:s<m-1?{marginBottom:d}:void 0},s)})})};exports.SkeletonText=SkeletonText,SkeletonText.displayName="SkeletonText";const buildStyles=()=>_reactNative.StyleSheet.create({base:{overflow:"hidden"},shimmerBand:{position:"absolute",top:0,bottom:0,left:0}});var _default=exports.default=Skeleton;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.SkeletonContent=void 0;var _react=_interopRequireWildcard(require("react")),_reactNative=require("react-native"),_index=require("../../theme/index.js"),_Skeleton=require("./Skeleton.js"),_SkeletonProvider=require("./SkeletonProvider.js"),_SkeletonSkip=require("./SkeletonSkip.js"),_jsxRuntime=require("react/jsx-runtime");function _interopRequireWildcard(e,t){if("function"==typeof WeakMap)var r=new WeakMap,i=new WeakMap;return(_interopRequireWildcard=function(e,t){if(!t&&e&&e.__esModule)return e;var n,o,s={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return s;if(n=t?i:r){if(n.has(e))return n.get(e);n.set(e,s)}for(const t in e)"default"!==t&&{}.hasOwnProperty.call(e,t)&&((o=(n=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,t))&&(o.get||o.set)?n(s,t,o):s[t]=e[t]);return s})(e,t)}const flattenStyle=e=>{if(!e)return{};return _reactNative.StyleSheet.flatten(e)??{}},resolveWidth=(e,t)=>"number"==typeof e?e:"string"!=typeof e||"auto"!==e&&"100%"!==e&&!/^\d+(\.\d+)?%$/.test(e)?t:e,resolveRadius=(e,t)=>"number"==typeof e?e:t,skeletonizeNode=(e,t,r,i,n="r")=>{if(null==e||"boolean"==typeof e)return null;if("string"==typeof e||"number"==typeof e)return(0,_jsxRuntime.jsx)(_Skeleton.Skeleton,{shape:"text",width:"60%",height:14,variant:t,speed:r,colors:i},`${n}-text`);if(Array.isArray(e))return _react.Children.map(e,(e,o)=>skeletonizeNode(e,t,r,i,`${n}-${o}`));if(!(0,_react.isValidElement)(e))return null;const o=e,s=o.props??{},a=o.type;if(a===_SkeletonSkip.SkeletonSkip)return(0,_react.cloneElement)(o,{key:`${n}-skip`});if("function"==typeof a||"object"==typeof a){const e=a.Skeleton;if(e){const t=e;return(0,_jsxRuntime.jsx)(t,{...s},`${n}-self`)}}if(a===_reactNative.Image){const e=flattenStyle(s.style),o=resolveWidth(e.width,"100%"),a="number"==typeof e.height?e.height:120,l=resolveRadius(e.borderRadius,"sm");return(0,_jsxRuntime.jsx)(_Skeleton.Skeleton,{width:o,height:a,radius:l,variant:t,speed:r,colors:i,style:{margin:"number"==typeof e.margin?e.margin:void 0}},`${n}-img`)}if(a===_reactNative.Text){const e=flattenStyle(s.style),o="number"==typeof e.fontSize?e.fontSize:14,a=resolveWidth(e.width,"85%");return(0,_jsxRuntime.jsx)(_Skeleton.Skeleton,{shape:"text",width:a,height:Math.round(1.15*o),variant:t,speed:r,colors:i,style:{marginVertical:2}},`${n}-txt`)}if(null!=s.children)return(0,_react.cloneElement)(o,{key:`${n}-w`},skeletonizeNode(s.children,t,r,i,`${n}-c`));if(a===_reactNative.View){const e=flattenStyle(s.style);if(null!=e.width||null!=e.height){const o=resolveWidth(e.width,"100%"),s="number"==typeof e.height?e.height:20,a=resolveRadius(e.borderRadius,"sm");return(0,_jsxRuntime.jsx)(_Skeleton.Skeleton,{width:o,height:s,radius:a,variant:t,speed:r,colors:i},`${n}-vw`)}}return(0,_react.cloneElement)(o,{key:`${n}-leaf`})},SkeletonContent=({loading:e,children:t,placeholder:r,variant:i,speed:n,count:o=1,colors:s,fadeDuration:a,style:l,testID:u})=>{const c=(0,_SkeletonProvider.useSkeletonDefaults)(),d=a??c.fadeDuration??300,
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.SkeletonContent=void 0;var _react=_interopRequireWildcard(require("react")),_reactNative=require("react-native"),_usePresenceMotion=require("../../hooks/usePresenceMotion.js"),_index=require("../../theme/index.js"),_Skeleton=require("./Skeleton.js"),_SkeletonProvider=require("./SkeletonProvider.js"),_SkeletonSkip=require("./SkeletonSkip.js"),_jsxRuntime=require("react/jsx-runtime");function _interopRequireWildcard(e,t){if("function"==typeof WeakMap)var r=new WeakMap,i=new WeakMap;return(_interopRequireWildcard=function(e,t){if(!t&&e&&e.__esModule)return e;var n,o,s={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return s;if(n=t?i:r){if(n.has(e))return n.get(e);n.set(e,s)}for(const t in e)"default"!==t&&{}.hasOwnProperty.call(e,t)&&((o=(n=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,t))&&(o.get||o.set)?n(s,t,o):s[t]=e[t]);return s})(e,t)}const DEFAULT_REVEAL_FADE_MS=300,flattenStyle=e=>{if(!e)return{};return _reactNative.StyleSheet.flatten(e)??{}},resolveWidth=(e,t)=>"number"==typeof e?e:"string"!=typeof e||"auto"!==e&&"100%"!==e&&!/^\d+(\.\d+)?%$/.test(e)?t:e,resolveRadius=(e,t)=>"number"==typeof e?e:t,skeletonizeNode=(e,t,r,i,n="r")=>{if(null==e||"boolean"==typeof e)return null;if("string"==typeof e||"number"==typeof e)return(0,_jsxRuntime.jsx)(_Skeleton.Skeleton,{shape:"text",width:"60%",height:14,variant:t,speed:r,colors:i},`${n}-text`);if(Array.isArray(e))return _react.Children.map(e,(e,o)=>skeletonizeNode(e,t,r,i,`${n}-${o}`));if(!(0,_react.isValidElement)(e))return null;const o=e,s=o.props??{},a=o.type;if(a===_SkeletonSkip.SkeletonSkip)return(0,_react.cloneElement)(o,{key:`${n}-skip`});if("function"==typeof a||"object"==typeof a){const e=a.Skeleton;if(e){const t=e;return(0,_jsxRuntime.jsx)(t,{...s},`${n}-self`)}}if(a===_reactNative.Image){const e=flattenStyle(s.style),o=resolveWidth(e.width,"100%"),a="number"==typeof e.height?e.height:120,l=resolveRadius(e.borderRadius,"sm");return(0,_jsxRuntime.jsx)(_Skeleton.Skeleton,{width:o,height:a,radius:l,variant:t,speed:r,colors:i,style:{margin:"number"==typeof e.margin?e.margin:void 0}},`${n}-img`)}if(a===_reactNative.Text){const e=flattenStyle(s.style),o="number"==typeof e.fontSize?e.fontSize:14,a=resolveWidth(e.width,"85%");return(0,_jsxRuntime.jsx)(_Skeleton.Skeleton,{shape:"text",width:a,height:Math.round(1.15*o),variant:t,speed:r,colors:i,style:{marginVertical:2}},`${n}-txt`)}if(null!=s.children)return(0,_react.cloneElement)(o,{key:`${n}-w`},skeletonizeNode(s.children,t,r,i,`${n}-c`));if(a===_reactNative.View){const e=flattenStyle(s.style);if(null!=e.width||null!=e.height){const o=resolveWidth(e.width,"100%"),s="number"==typeof e.height?e.height:20,a=resolveRadius(e.borderRadius,"sm");return(0,_jsxRuntime.jsx)(_Skeleton.Skeleton,{width:o,height:s,radius:a,variant:t,speed:r,colors:i},`${n}-vw`)}}return(0,_react.cloneElement)(o,{key:`${n}-leaf`})},SkeletonContent=({loading:e,children:t,placeholder:r,variant:i,speed:n,count:o=1,colors:s,fadeDuration:a,style:l,testID:u})=>{const c=(0,_SkeletonProvider.useSkeletonDefaults)(),d=(0,_usePresenceMotion.usePresenceMotion)(),f=a??c.fadeDuration??(d.reduced?d.duration("normal"):300),_=(0,_react.useRef)(e),p=(0,_react.useRef)((0,_index.createAnimatedValue)(e?0:1)).current;if((0,_react.useEffect)(()=>{let t;return _.current&&!e?(p.setValue(0),t=_reactNative.Animated.timing(p,{toValue:1,duration:f,useNativeDriver:!0}),t.start()):!_.current&&e&&p.setValue(1),_.current=e,()=>t?.stop()},[e,p,f]),!e)return f<=0?(0,_jsxRuntime.jsx)(_jsxRuntime.Fragment,{children:t}):(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:[l,{opacity:p}],testID:u,children:t});if(void 0!==r){const e=o>1?Array.from({length:o},(e,t)=>(0,_jsxRuntime.jsx)(_react.default.Fragment,{children:r},`sk-ph-${t}`)):r;return(0,_jsxRuntime.jsx)(_reactNative.View,{style:l,testID:u,accessible:!0,accessibilityLabel:"Loading",accessibilityRole:"progressbar",accessibilityState:{busy:!0},"aria-busy":!0,accessibilityLiveRegion:"polite",children:e})}const y=o>1?Array.from({length:o},(e,r)=>(0,_jsxRuntime.jsx)(_react.default.Fragment,{children:t},`sk-rep-${r}`)):t;return(0,_jsxRuntime.jsx)(_reactNative.View,{style:l,testID:u,accessible:!0,accessibilityLabel:"Loading",accessibilityRole:"progressbar",accessibilityState:{busy:!0},"aria-busy":!0,accessibilityLiveRegion:"polite",children:skeletonizeNode(y,i,n,s)})};exports.SkeletonContent=SkeletonContent,SkeletonContent.displayName="SkeletonContent";var _default=exports.default=SkeletonContent;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.useSkeletonDefaults=exports.
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.useSkeletonDefaults=exports.SkeletonProvider=void 0;var _react=require("react"),_SkeletonClock=require("./SkeletonClock.js"),_jsxRuntime=require("react/jsx-runtime");const SkeletonDefaultsContext=(0,_react.createContext)({}),SkeletonProvider=({children:e,variant:t,speed:o,placeholderCount:r,radius:n,colors:l,fadeDuration:a,animation:s="auto"})=>{const i="never"!==s,u=o??"normal",d=t??"shimmer",c=(0,_react.useMemo)(()=>({variant:t,speed:o,placeholderCount:r,radius:n,colors:l,fadeDuration:a,animation:s}),[t,o,r,n,l,a,s]);return(0,_jsxRuntime.jsx)(SkeletonDefaultsContext.Provider,{value:c,children:(0,_jsxRuntime.jsx)(_SkeletonClock.SkeletonClockProvider,{speed:u,variant:d,enabled:i,children:e})})};exports.SkeletonProvider=SkeletonProvider,SkeletonProvider.displayName="SkeletonProvider";const useSkeletonDefaults=()=>(0,_react.useContext)(SkeletonDefaultsContext);exports.useSkeletonDefaults=useSkeletonDefaults;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"Skeleton",{enumerable:!0,get:function(){return _Skeleton.Skeleton}}),Object.defineProperty(exports,"SkeletonCircle",{enumerable:!0,get:function(){return _Skeleton.SkeletonCircle}}),Object.defineProperty(exports,"SkeletonClockProvider",{enumerable:!0,get:function(){return _SkeletonClock.SkeletonClockProvider}}),Object.defineProperty(exports,"SkeletonContent",{enumerable:!0,get:function(){return _SkeletonContent.SkeletonContent}}),Object.defineProperty(exports,"SkeletonList",{enumerable:!0,get:function(){return _SkeletonList.SkeletonList}}),Object.defineProperty(exports,"SkeletonProvider",{enumerable:!0,get:function(){return _SkeletonProvider.SkeletonProvider}}),Object.defineProperty(exports,"SkeletonSkip",{enumerable:!0,get:function(){return _SkeletonSkip.SkeletonSkip}}),Object.defineProperty(exports,"SkeletonText",{enumerable:!0,get:function(){return _Skeleton.SkeletonText}}),Object.defineProperty(exports,"default",{enumerable:!0,get:function(){return _Skeleton.default}}),Object.defineProperty(exports,"
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"Skeleton",{enumerable:!0,get:function(){return _Skeleton.Skeleton}}),Object.defineProperty(exports,"SkeletonCircle",{enumerable:!0,get:function(){return _Skeleton.SkeletonCircle}}),Object.defineProperty(exports,"SkeletonClockProvider",{enumerable:!0,get:function(){return _SkeletonClock.SkeletonClockProvider}}),Object.defineProperty(exports,"SkeletonContent",{enumerable:!0,get:function(){return _SkeletonContent.SkeletonContent}}),Object.defineProperty(exports,"SkeletonList",{enumerable:!0,get:function(){return _SkeletonList.SkeletonList}}),Object.defineProperty(exports,"SkeletonProvider",{enumerable:!0,get:function(){return _SkeletonProvider.SkeletonProvider}}),Object.defineProperty(exports,"SkeletonSkip",{enumerable:!0,get:function(){return _SkeletonSkip.SkeletonSkip}}),Object.defineProperty(exports,"SkeletonText",{enumerable:!0,get:function(){return _Skeleton.SkeletonText}}),Object.defineProperty(exports,"default",{enumerable:!0,get:function(){return _Skeleton.default}}),Object.defineProperty(exports,"useSkeletonClock",{enumerable:!0,get:function(){return _SkeletonClock.useSkeletonClock}}),Object.defineProperty(exports,"useSkeletonDefaults",{enumerable:!0,get:function(){return _SkeletonProvider.useSkeletonDefaults}});var _Skeleton=_interopRequireWildcard(require("./Skeleton.js")),_SkeletonClock=require("./SkeletonClock.js"),_SkeletonContent=require("./SkeletonContent.js"),_SkeletonList=require("./SkeletonList.js"),_SkeletonProvider=require("./SkeletonProvider.js"),_SkeletonSkip=require("./SkeletonSkip.js");function _interopRequireWildcard(e,t){if("function"==typeof WeakMap)var n=new WeakMap,r=new WeakMap;return(_interopRequireWildcard=function(e,t){if(!t&&e&&e.__esModule)return e;var o,l,i={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return i;if(o=t?r:n){if(o.has(e))return o.get(e);o.set(e,i)}for(const t in e)"default"!==t&&{}.hasOwnProperty.call(e,t)&&((l=(o=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,t))&&(l.get||l.set)?o(i,t,l):i[t]=e[t]);return i})(e,t)}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.Spinner=void 0;var _react=require("react"),_reactNative=require("react-native"),_index=require("../../theme/index.js"),_announce=require("../../utils/announce.js"),_color=require("../../utils/color.js"),_corners=require("../../utils/corners.js"),_squircle=require("../../utils/squircle.js"),_SquircleFill=require("../SquircleFill/SquircleFill.js"),_jsxRuntime=require("react/jsx-runtime");const sizeMap={sm:20,md:32,lg:48},CONTAINER_RATIO=1.5,DOT_COUNT=3,DOT_STAGGER_MS=150,DOT_CYCLE_MS=600,Dot=({size:e,color:t,delay:i,duration:r})=>{const
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.Spinner=void 0;var _react=require("react"),_reactNative=require("react-native"),_usePresenceMotion=require("../../hooks/usePresenceMotion.js"),_index=require("../../theme/index.js"),_announce=require("../../utils/announce.js"),_color=require("../../utils/color.js"),_corners=require("../../utils/corners.js"),_squircle=require("../../utils/squircle.js"),_SquircleFill=require("../SquircleFill/SquircleFill.js"),_jsxRuntime=require("react/jsx-runtime");const sizeMap={sm:20,md:32,lg:48},CONTAINER_RATIO=1.5,DOT_COUNT=3,DOT_STAGGER_MS=150,DOT_CYCLE_MS=600,DOT_GROW_SCALE=1.4,DOT_PULSE_MIN_OPACITY=.4,Dot=({size:e,color:t,delay:i,duration:r,reduced:n})=>{const a=(0,_react.useRef)((0,_index.createAnimatedValue)(0)).current;(0,_react.useEffect)(()=>{const e=_reactNative.Animated.loop(_reactNative.Animated.sequence([_reactNative.Animated.delay(i),_reactNative.Animated.timing(a,{toValue:1,duration:r/2,easing:_reactNative.Easing.out(_reactNative.Easing.quad),useNativeDriver:!0}),_reactNative.Animated.timing(a,{toValue:0,duration:r/2,easing:_reactNative.Easing.in(_reactNative.Easing.quad),useNativeDriver:!0})]));return e.start(),()=>{e.stop()}},[a,i,r]);const s=(0,_react.useMemo)(()=>({grow:a.interpolate({inputRange:[0,1],outputRange:[1,1.4]}),fade:a.interpolate({inputRange:[0,1],outputRange:[.4,1]})}),[a]);return(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:{width:e,height:e,borderRadius:e/2,..._corners.smoothCorners,backgroundColor:t,...n?{opacity:s.fade}:{transform:[{scale:s.grow}]}}})},Spinner=exports.Spinner=(0,_react.forwardRef)((e,t)=>{const{size:i="md",color:r,message:n,overlay:a=!1,backdropColor:s,variant:o="circular",accessibilityLabel:c,style:l,testID:u}=e,d="contained"===o,g=a&&!d,_=(0,_index.useTheme)(),m=(0,_usePresenceMotion.usePresenceMotion)(),y=m.duration("normal"),v=(0,_react.useRef)((0,_index.createAnimatedValue)(0)).current;(0,_react.useEffect)(()=>{_reactNative.Animated.timing(v,{toValue:1,duration:y,easing:_reactNative.Easing.bezier(..._.motion.easing.standard),useNativeDriver:!0}).start()},[v,_,y]);const h=(0,_react.useMemo)(()=>buildStyles(_),[_]),p=sizeMap[i],x=r??_.colors.primary,f=s??_.colors.background.overlay,j=(0,_react.useMemo)(()=>{if("contained"===o){const e=Math.round(1.5*p);return(0,_jsxRuntime.jsx)(_reactNative.View,{style:[h.container,{width:e,height:e,borderRadius:e/2,backgroundColor:(0,_color.blendOf)(x,.14,_.colors.background.elevated,_.colors.background.secondary)}],children:(0,_jsxRuntime.jsx)(_reactNative.ActivityIndicator,{color:x,size:"sm"===i?"small":"large",style:{width:p,height:p}})})}if("dots"===o){const e=Math.max(6,Math.round(p/4));return(0,_jsxRuntime.jsx)(_reactNative.View,{style:[h.dotsRow,{gap:Math.round(e/2)}],children:Array.from({length:3}).map((t,i)=>(0,_jsxRuntime.jsx)(Dot,{size:e,color:x,delay:150*i,duration:600,reduced:m.reduced},i))})}return(0,_jsxRuntime.jsx)(_reactNative.ActivityIndicator,{color:x,size:"sm"===i?"small":"large",style:{width:p,height:p}})},[o,i,p,x,h.dotsRow,h.container,m.reduced,_.colors.background.elevated,_.colors.background.secondary]),b=c??n??"Loading",R=(0,_react.useRef)(b);R.current=b,(0,_react.useEffect)(()=>{d&&(0,_announce.announce)(R.current)},[d]);const N=(0,_SquircleFill.useSquircle)(g,_.radius.lg),S=N.active&&N.size?{borderRadius:(0,_squircle.squircleHostRadius)(N.size.width,N.size.height,_.radius.lg)}:null;let C=h.inlineContent;g?C=h.overlayContent:d&&(C=h.containedContent);const q=(0,_jsxRuntime.jsxs)(_reactNative.Animated.View,{ref:t,accessible:!0,accessibilityRole:"progressbar",accessibilityLiveRegion:d?"none":"polite",accessibilityLabel:b,accessibilityState:{busy:!0},"aria-busy":!0,testID:u,onLayout:N.onLayout,style:[C,S,{opacity:v}],children:[N.active&&N.size?(0,_jsxRuntime.jsx)(_SquircleFill.SquircleFill,{width:N.size.width,height:N.size.height,radius:_.radius.lg,fill:_.colors.background.elevated}):null,j,n?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[h.message,{color:_.colors.text.primary,fontSize:_.typography.fontSize.base,fontWeight:_.typography.fontWeight.medium,marginTop:_.spacing.md}],numberOfLines:2,children:n}):null]});return g?(0,_jsxRuntime.jsx)(_reactNative.View,{pointerEvents:"auto",style:[h.overlay,{backgroundColor:f},l],children:q}):(0,_jsxRuntime.jsx)(_reactNative.View,{style:[d?h.containedFill:h.inline,l],children:q})});Spinner.displayName="Spinner";const buildStyles=e=>_reactNative.StyleSheet.create({inline:{alignItems:"center",justifyContent:"center"},inlineContent:{alignItems:"center",justifyContent:"center"},containedFill:{flex:1,alignSelf:"stretch",alignItems:"center",justifyContent:"center",minHeight:Math.round(1.5*sizeMap.lg)+2*e.spacing.xl},containedContent:{alignItems:"center",justifyContent:"center",paddingHorizontal:e.spacing.lg},container:{alignItems:"center",justifyContent:"center"},overlay:{..._reactNative.StyleSheet.absoluteFill,alignItems:"center",justifyContent:"center",zIndex:1e3},overlayContent:{alignItems:"center",justifyContent:"center",backgroundColor:e.colors.background.elevated,borderRadius:e.radius.lg,..._corners.smoothCorners,paddingHorizontal:e.spacing.xl,paddingVertical:e.spacing.xl,minWidth:140,...e.shadows.lg},dotsRow:{flexDirection:"row",alignItems:"center",justifyContent:"center"},message:{textAlign:"center"}});var _default=exports.default=Spinner;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.TagInput=void 0;var _react=require("react"),_reactNative=require("react-native"),_index=require("../../hooks/index.js"),_index2=require("../../theme/index.js"),_index3=require("../../utils/index.js"),_index4=require("../Chip/index.js"),_index5=require("../FieldBase/index.js"),_jsxRuntime=require("react/jsx-runtime");const TagInput=exports.TagInput=(0,_react.forwardRef)((e,t)=>{const{value:
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.TagInput=void 0;var _react=require("react"),_reactNative=require("react-native"),_index=require("../../hooks/index.js"),_index2=require("../../theme/index.js"),_index3=require("../../utils/index.js"),_index4=require("../Chip/index.js"),_index5=require("../FieldBase/index.js"),_jsxRuntime=require("react/jsx-runtime");const TagInput=exports.TagInput=(0,_react.forwardRef)((e,t)=>{const{value:i,defaultValue:r,onChange:a,placeholder:n,label:s,helperText:l,error:o,required:u,disabled:d=!1,size:c="md",variant:x,maxTags:p,unique:_=!0,transform:g,separators:h=[","],haptic:m,style:f,testID:j}=e,v=(0,_index2.useTheme)(),b=(0,_react.useMemo)(()=>buildStyles(v),[v]),[y,C]=(0,_index.useControllableState)({value:i,defaultValue:r??[],onChange:a}),[R,S]=(0,_react.useState)(""),[T,q]=(0,_react.useState)(!1),w=(0,_react.useRef)(null),I=(0,_react.useMemo)(()=>(0,_index3.mergeRefs)(w,t),[t]),k=(0,_react.useCallback)(()=>{d||w.current?.focus()},[d]),z="number"==typeof p&&y.length>=p,F=!0===o||(0,_index5.hasFieldText)(o),B=u&&!s&&0===y.length&&0===R.length&&Boolean(n),N=(0,_react.useCallback)(e=>{const t=g?g(e.trim()):e.trim();if(!t)return;if(z)return;if(_&&y.some(e=>e.toLowerCase()===t.toLowerCase()))return void S("");C([...y,t]),S("");const i=(0,_index3.resolveHaptic)(m,"selection");i&&(0,_index3.triggerHaptic)(i)},[z,m,C,y,g,_]),V=(0,_react.useCallback)(e=>{const t=y.filter((t,i)=>i!==e);C(t);const i=(0,_index3.resolveHaptic)(m,"selection");i&&(0,_index3.triggerHaptic)(i)},[m,C,y]),D=(0,_react.useCallback)(e=>{const t=h.find(t=>t.length>0&&e.includes(t));if(t){const[i]=e.split(t);return void N(i)}S(e)},[N,h]),H=(0,_react.useCallback)(e=>{d||"Backspace"===e.nativeEvent.key&&""===R&&y.length>0&&V(y.length-1)},[d,R,V,y.length]),L=(0,_jsxRuntime.jsx)(_index5.FieldBase,{size:c,variant:x,focused:T,disabled:d,error:F,filled:y.length>0||R.length>0,onPress:k,pressFeedback:!1,style:f,children:(0,_jsxRuntime.jsxs)(_reactNative.View,{style:b.wrap,children:[y.map((e,t)=>(0,_jsxRuntime.jsx)(_index4.Chip,{label:e,size:"sm",onClose:d?void 0:()=>V(t),haptic:m},`${e}-${t}`)),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:b.inputBox,children:[(0,_jsxRuntime.jsx)(_reactNative.TextInput,{ref:I,value:R,onChangeText:D,onKeyPress:H,onSubmitEditing:()=>N(R),onFocus:()=>q(!0),onBlur:()=>{q(!1),N(R)},editable:!d&&!z,placeholder:z||B?void 0:n,placeholderTextColor:v.colors.text.tertiary,blurOnSubmit:!1,returnKeyType:"done",accessibilityLabel:s??n,style:[b.input,{color:v.colors.text.primary,fontSize:v.typography.fontSize.base}],testID:j?`${j}-input`:void 0}),B?(0,_jsxRuntime.jsx)(_index5.RequiredPlaceholder,{text:n??"",color:v.colors.text.tertiary,fontSize:v.typography.fontSize.base,weightStyle:(0,_index2.fontFor)(v,"normal")}):null]})]})});return(0,_jsxRuntime.jsxs)(_reactNative.View,{testID:j,children:[s?(0,_jsxRuntime.jsx)(_index5.FieldLabel,{size:c,required:u,children:s}):null,L,(0,_jsxRuntime.jsx)(_index5.FieldMessage,{size:c,error:F,text:F?o:l})]})});TagInput.displayName="TagInput";const buildStyles=e=>_reactNative.StyleSheet.create({wrap:{flex:1,flexDirection:"row",flexWrap:"wrap",alignItems:"center",gap:e.spacing.xs,paddingVertical:e.spacing.xs},inputBox:{flexGrow:1,minWidth:80},input:{...(0,_index2.fontFor)(e,"normal"),padding:0}});var _default=exports.default=TagInput;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.resolveColor=exports.default=exports.Text=void 0;var _react=require("react"),_reactNative=require("react-native"),_index=require("../../theme/index.js"),_jsxRuntime=require("react/jsx-runtime");const VARIANTS={display:{size:"4xl",weight:"bold",line:"tight",color:"primary",heading:!0,fontFamily:"display"},h1:{size:"3xl",weight:"bold",line:"tight",color:"primary",heading:!0,fontFamily:"display"},h2:{size:"2xl",weight:"semibold",line:"tight",color:"primary",heading:!0,fontFamily:"display"},h3:{size:"xl",weight:"semibold",line:"tight",color:"primary",heading:!0},title:{size:"lg",weight:"semibold",line:"normal",color:"primary",fontFamily:"display"},body:{size:"base",weight:"normal",line:"normal",color:"primary"},bodySmall:{size:"sm",weight:"normal",line:"normal",color:"secondary"},caption:{size:"xs",weight:"normal",line:"normal",color:"tertiary"},label:{size:"sm",weight:"medium",line:"normal",color:"secondary"},overline:{size:"xs",weight:"semibold",line:"normal",color:"secondary",uppercase:!0,letterSpacing:"wide"}},TEXT_ROLES={primary:!0,secondary:!0,tertiary:!0,inverse:!0,disabled:!0,link:!0,textStrong:!0},TEXT_ROLE_KEY={textStrong:"strong"},SEMANTIC={success:!0,warning:!0,error:!0,info:!0},resolveColor=(e,i)=>TEXT_ROLES[i]?e.colors.text[TEXT_ROLE_KEY[i]??i]:SEMANTIC[i]?e.colors.toneText[i]:i;exports.resolveColor=resolveColor;const Text=exports.Text=(0,_react.forwardRef)((e,i)=>{const{variant:t="body",color:r,weight:o,size:l,align:n,italic:a,underline:s,style:c,children:d,...p}=e,y=(0,_index.useTheme)(),m=Object.hasOwn(VARIANTS,t),g=y.textVariants,h=!m&&g&&Object.hasOwn(g,t)?g[t]:void 0,x=(0,_react.useMemo)(()=>{if(h){const{typography:e}=y,i="number"==typeof h.size?h.size:e.fontSize[h.size],t="number"==typeof l?l:l?e.fontSize[l]:i,c=h.lineHeight,d=h.letterSpacing;return{fontSize:t,lineHeight:"number"==typeof c?c:c?Math.round(t*e.lineHeight[c]):void 0,color:resolveColor(y,r??h.color??"primary"),textAlign:n,textTransform:h.uppercase?"uppercase":void 0,letterSpacing:"number"!=typeof d&&d?e.letterSpacing[d]:d,fontStyle:a||h.italic?"italic":void 0,fontVariant:h.fontVariant,textDecorationLine:s?"underline":void 0,...(0,_index.fontFor)(y,o??h.weight??"normal",h.fontFamily)}}const e=VARIANTS[m?t:"body"],i="number"==typeof l?l:y.typography.fontSize[l??e.size];return{fontSize:i,lineHeight:Math.round(i*y.typography.lineHeight[e.line]),color:resolveColor(y,r??e.color),textAlign:n,textTransform:e.uppercase?"uppercase":void 0,letterSpacing:e.letterSpacing?y.typography.letterSpacing[e.letterSpacing]:void 0,fontStyle:a?"italic":void 0,textDecorationLine:s?"underline":void 0,...(0,_index.fontFor)(y,o??e.weight,e.fontFamily)}},[y,h,m,t,r,o,l,n,a,s]),u
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.resolveColor=exports.default=exports.Text=void 0;var _react=require("react"),_reactNative=require("react-native"),_index=require("../../theme/index.js"),_jsxRuntime=require("react/jsx-runtime");const VARIANTS={display:{size:"4xl",weight:"bold",line:"tight",color:"primary",heading:!0,fontFamily:"display"},h1:{size:"3xl",weight:"bold",line:"tight",color:"primary",heading:!0,fontFamily:"display"},h2:{size:"2xl",weight:"semibold",line:"tight",color:"primary",heading:!0,fontFamily:"display"},h3:{size:"xl",weight:"semibold",line:"tight",color:"primary",heading:!0},title:{size:"lg",weight:"semibold",line:"normal",color:"primary",fontFamily:"display"},body:{size:"base",weight:"normal",line:"normal",color:"primary"},bodySmall:{size:"sm",weight:"normal",line:"normal",color:"secondary"},caption:{size:"xs",weight:"normal",line:"normal",color:"tertiary"},label:{size:"sm",weight:"medium",line:"normal",color:"secondary"},overline:{size:"xs",weight:"semibold",line:"normal",color:"secondary",uppercase:!0,letterSpacing:"wide"}},TEXT_ROLES={primary:!0,secondary:!0,tertiary:!0,inverse:!0,disabled:!0,link:!0,textStrong:!0},TEXT_ROLE_KEY={textStrong:"strong"},SEMANTIC={success:!0,warning:!0,error:!0,info:!0},resolveColor=(e,i)=>TEXT_ROLES[i]?e.colors.text[TEXT_ROLE_KEY[i]??i]:SEMANTIC[i]?e.colors.toneText[i]:i;exports.resolveColor=resolveColor;const Text=exports.Text=(0,_react.forwardRef)((e,i)=>{const{variant:t="body",color:r,weight:o,size:l,align:n,italic:a,underline:s,style:c,children:d,...p}=e,y=(0,_index.useTheme)(),m=Object.hasOwn(VARIANTS,t),g=y.textVariants,h=!m&&g&&Object.hasOwn(g,t)?g[t]:void 0,x=(0,_react.useMemo)(()=>{if(h){const{typography:e}=y,i="number"==typeof h.size?h.size:e.fontSize[h.size],t="number"==typeof l?l:l?e.fontSize[l]:i,c=h.lineHeight,d=h.letterSpacing;return{fontSize:t,lineHeight:"number"==typeof c?c:c?Math.round(t*e.lineHeight[c]):void 0,color:resolveColor(y,r??h.color??"primary"),textAlign:n,textTransform:h.uppercase?"uppercase":void 0,letterSpacing:"number"!=typeof d&&d?e.letterSpacing[d]:d,fontStyle:a||h.italic?"italic":void 0,fontVariant:h.fontVariant,textDecorationLine:s?"underline":void 0,...(0,_index.fontFor)(y,o??h.weight??"normal",h.fontFamily)}}const e=VARIANTS[m?t:"body"],i="number"==typeof l?l:y.typography.fontSize[l??e.size];return{fontSize:i,lineHeight:Math.round(i*y.typography.lineHeight[e.line]),color:resolveColor(y,r??e.color),textAlign:n,textTransform:e.uppercase?"uppercase":void 0,letterSpacing:e.letterSpacing?y.typography.letterSpacing[e.letterSpacing]:void 0,fontStyle:a?"italic":void 0,textDecorationLine:s?"underline":void 0,...(0,_index.fontFor)(y,o??e.weight,e.fontFamily)}},[y,h,m,t,r,o,l,n,a,s]),u=m?VARIANTS[t].heading:h?.heading;return(0,_jsxRuntime.jsx)(_reactNative.Text,{ref:i,style:[x,c],maxFontSizeMultiplier:y.maxFontSizeMultiplier,accessibilityRole:u?"header":p.accessibilityRole,...p,children:d})});Text.displayName="Text";var _default=exports.default=Text;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.TimePicker=void 0;var _react=require("react"),_reactNative=require("react-native"),_reactNativeGestureHandler=require("react-native-gesture-handler"),_useDragToDismiss=require("../../hooks/useDragToDismiss.js"),_index=require("../../theme/index.js"),_corners=require("../../utils/corners.js"),_hapticUtils=require("../../utils/hapticUtils.js"),_Button=_interopRequireDefault(require("../Button/Button.js")),_ModalSafeArea=require("../ModalSafeArea/ModalSafeArea.js"),_PickerTrigger=require("../PickerTrigger/PickerTrigger.js"),_ToastProvider=require("../Toast/ToastProvider.js"),_index2=require("../WheelPicker/index.js"),_jsxRuntime=require("react/jsx-runtime");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const range=(e,t,i=1)=>{const a=[];for(let r=e;r<=t;r+=i)a.push(r);return a},pad2=e=>e.toString().padStart(2,"0"),to24h=(e,t,i)=>"24h"===i?e:"AM"===t?12===e?0:e:12===e?12:e+12,from24h=(e,t)=>"24h"===t?{displayHour:e,period:"AM"}:0===e?{displayHour:12,period:"AM"}:12===e?{displayHour:12,period:"PM"}:e>12?{displayHour:e-12,period:"PM"}:{displayHour:e,period:"AM"},clampMinuteToStep=(e,t)=>{const i=Math.round(e/t)*t;return Math.min(59,Math.max(0,i))},TimePicker=e=>{const{visible:t,value:i,onChange:a,onClose:r,format:s="12h",minuteStep:n=1,title:o="Select Time",confirmLabel:l="Confirm",cancelLabel:u="Cancel",testID:c,style:d,containerStyle:m,headerLabelStyle:p,footerButtonStyle:g,label:h,placeholder:_,helperText:f,error:x,required:y,disabled:b,size:v,variant:j,clearable:M,onClear:N,formatValue:R,triggerStyle:k,haptic:S}=e,T=void 0!==e.visible,[D,P]=(0,_react.useState)(!1),A=T?t:D,w=T?c:c?`${c}-modal`:void 0,H=(0,_index.useTheme)(),[C,q]=(0,_ModalSafeArea.useModalInsets)(),V=(0,_react.useMemo)(()=>buildStyles(H),[H]),B=(0,_react.useRef)((0,_index.createAnimatedValue)(0)).current,$=(0,_react.useRef)((0,_index.createAnimatedValue)(40)).current,I=(0,_react.useRef)((0,_index.createAnimatedValue)(0)).current,L=(0,_react.useRef)(0),O=(0,_react.useCallback)(()=>{T?r?.():P(!1)},[T,r]),z=(0,_react.useCallback)(()=>{_reactNative.Animated.parallel([_reactNative.Animated.timing(B,{toValue:0,duration:H.motion.duration.fast,easing:_reactNative.Easing.bezier(...H.motion.easing.accelerate),useNativeDriver:!1}),_reactNative.Animated.timing($,{toValue:40,duration:H.motion.duration.fast,easing:_reactNative.Easing.bezier(...H.motion.easing.accelerate),useNativeDriver:!0})]).start(()=>O())},[O,B,$,H.motion.duration.fast,H.motion.easing.accelerate]),{handleGesture:W}=(0,_useDragToDismiss.useDragToDismiss)({drag:I,travel:()=>L.current||320,onDismiss:z}),F=(0,_react.useMemo)(()=>"24h"===s?range(0,23):range(1,12),[s]),E=(0,_react.useMemo)(()=>range(0,59,n),[n]),G=(0,_react.useMemo)(()=>["AM","PM"],[]),U=(0,_react.useMemo)(()=>{const e=i&&Number.isFinite(i.hour)?i.hour:(new Date).getHours(),t=i&&Number.isFinite(i.minute)?i.minute:(new Date).getMinutes(),a=clampMinuteToStep(t,n),{displayHour:r,period:o}=from24h(e,s);return{displayHour:r,minute:a,period:o,hour24:e}},[i,s,n]),[Y,J]=(0,_react.useState)(()=>{const e=F.indexOf(U.displayHour);return e>=0?e:0}),[K,Q]=(0,_react.useState)(()=>{const e=E.indexOf(U.minute);return e>=0?e:0}),[X,Z]=(0,_react.useState)(()=>"PM"===U.period?1:0);(0,_react.useEffect)(()=>{if(!A)return;const e=i&&Number.isFinite(i.hour)?i.hour:(new Date).getHours(),t=i&&Number.isFinite(i.minute)?i.minute:(new Date).getMinutes(),a=clampMinuteToStep(t,n),{displayHour:r,period:o}=from24h(e,s),l=F.indexOf(r);J(l>=0?l:0);const u=E.indexOf(a);Q(u>=0?u:0),Z("PM"===o?1:0)},[A,i,s,n,F,E]),(0,_react.useEffect)(()=>{let e;return A?(e=_reactNative.Animated.parallel([_reactNative.Animated.timing(B,{toValue:1,duration:H.motion.duration.normal,easing:_reactNative.Easing.out(_reactNative.Easing.cubic),useNativeDriver:!1}),_reactNative.Animated.spring($,{toValue:0,damping:H.motion.spring.snappy.damping,stiffness:H.motion.spring.snappy.stiffness,mass:H.motion.spring.snappy.mass,useNativeDriver:!0})]),e.start()):(B.setValue(0),(0,_index.setNativeValue)($,40),(0,_index.setNativeValue)(I,0)),()=>e?.stop()},[A,B,$,I,H.motion]);const ee=(0,_react.useCallback)((e,t)=>{"hour"===e?J(Math.max(0,F.indexOf(Number(t)))):"minute"===e?Q(Math.max(0,E.indexOf(Number(t)))):Z("PM"===t?1:0)},[F,E]),te=(0,_react.useCallback)(()=>{!1!==S&&(0,_hapticUtils.triggerHaptic)("selection"),z()},[z,S]),ie=(0,_react.useCallback)(()=>{const e=F[Y]??0,t=G[X]??"AM",i=to24h(e,t,s),r=E[K]??0;!1!==S&&(0,_hapticUtils.triggerHaptic)("notificationSuccess"),a?.({hour:i,minute:r}),z()},[F,Y,G,X,E,K,s,a,z,S]),ae=(0,_react.useMemo)(()=>{const e=F[Y]??0,t=E[K]??0;if("24h"===s)return`${pad2(e)}:${pad2(t)}`;const i=G[X]??"AM";return`${pad2(e)}:${pad2(t)} ${i}`},[F,Y,E,K,G,X,s]),re=(0,_react.useMemo)(()=>F.map(e=>({value:e,label:pad2(e),accessibilityLabel:`Hour ${e}`})),[F]),se=(0,_react.useMemo)(()=>E.map(e=>({value:e,label:pad2(e),accessibilityLabel:`${e} minutes`})),[E]),ne=(0,_react.useMemo)(()=>G.map(e=>({value:e,label:e})),[G]),oe=(0,_react.useMemo)(()=>{const e=[{key:"hour",label:"Hour",items:re,value:F[Y]??0,separator:":",testID:"time-picker-hour"},{key:"minute",label:"Minute",items:se,value:E[K]??0,gapAfter:"12h"===s?H.spacing.md:void 0,testID:"time-picker-minute"}];return"12h"===s&&e.push({key:"period",label:"Period",items:ne,value:G[X]??"AM",testID:"time-picker-period"}),e},[re,se,ne,F,Y,E,K,G,X,s,H.spacing.md]),le=(0,_react.useCallback)(e=>{if("24h"===s)return`${pad2(e.hour)}:${pad2(e.minute)}`;const{displayHour:t,period:i}=from24h(e.hour,"12h");return`${t}:${pad2(e.minute)} ${i}`},[s]),ue=!T&&i&&Number.isFinite(i.hour)&&Number.isFinite(i.minute)?(R??le)(i):void 0,ce=(0,_jsxRuntime.jsx)(_reactNative.Modal,{visible:A,transparent:!0,statusBarTranslucent:!0,navigationBarTranslucent:!0,animationType:"none",onRequestClose:z,testID:w,children:(0,_jsxRuntime.jsx)(_ModalSafeArea.ModalSafeArea,{onInsets:q,children:(0,_jsxRuntime.jsxs)(_reactNativeGestureHandler.GestureHandlerRootView,{collapsable:!1,style:V.backdrop,children:[(0,_jsxRuntime.jsx)(_reactNative.Pressable,{style:_reactNative.StyleSheet.absoluteFill,onPress:z,accessibilityLabel:"Close time picker",accessibilityRole:"button"}),(0,_jsxRuntime.jsxs)(_reactNative.Animated.View,{style:[V.sheet,{paddingBottom:Math.max(C.bottom,H.spacing.lg),transform:[{translateY:_reactNative.Animated.add($,I)}]},d,m],onLayout:e=>{L.current=e.nativeEvent.layout.height},accessibilityViewIsModal:!0,accessible:!0,accessibilityRole:"none",accessibilityLabel:o,children:[(0,_jsxRuntime.jsx)(_reactNativeGestureHandler.GestureDetector,{gesture:W,children:(0,_jsxRuntime.jsxs)(_reactNative.View,{children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:V.handle}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[V.title,p],accessibilityRole:"header",children:o})]})}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:V.summaryWrap,accessibilityLiveRegion:"polite",accessibilityLabel:`Selected ${ae}`,children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:V.summary,children:ae})}),(0,_jsxRuntime.jsx)(_index2.WheelPicker,{columns:oe,onChange:ee,haptic:S,style:V.wheels}),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:V.footer,children:[(0,_jsxRuntime.jsx)(_Button.default,{title:u,haptic:!1,variant:"ghost",tone:"neutral",onPress:te,style:[V.footerBtn,g],accessibilityHint:"Dismiss without changes",testID:"time-picker-cancel"}),(0,_jsxRuntime.jsx)(_Button.default,{title:l,variant:"solid",tone:"primary",haptic:!1,onPress:ie,style:[V.footerBtn,g],accessibilityHint:"Confirm selected time",testID:"time-picker-confirm"})]})]}),(0,_jsxRuntime.jsx)(_ToastProvider.ToastHost,{})]})})});return T?ce:(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_PickerTrigger.PickerTrigger,{label:h,placeholder:_,helperText:f,error:x,required:y,disabled:b,size:v,variant:j,clearable:M,onClear:N,value:ue,onPress:()=>P(!0),triggerStyle:k,testID:c}),ce]})};exports.TimePicker=TimePicker;const buildStyles=e=>{const t=e.shadows.xl;return _reactNative.StyleSheet.create({backdrop:{flex:1,backgroundColor:e.colors.background.overlay,justifyContent:"flex-end"},sheet:{backgroundColor:e.colors.background.elevated,borderTopLeftRadius:e.radius.xl,borderTopRightRadius:e.radius.xl,..._corners.smoothCorners,paddingTop:e.spacing.sm,paddingHorizontal:e.spacing.lg,paddingBottom:e.spacing.xl,shadowColor:t.shadowColor,shadowOffset:t.shadowOffset,shadowOpacity:t.shadowOpacity,shadowRadius:t.shadowRadius,elevation:t.elevation},handle:{alignSelf:"center",width:e.components.timePicker?.handleWidth??36,height:e.components.timePicker?.handleHeight??4,borderRadius:e.radius.full,..._corners.smoothCorners,backgroundColor:e.colors.border.secondary,marginBottom:e.spacing.sm},title:{textAlign:"center",fontSize:e.typography.fontSize.lg,fontWeight:e.typography.fontWeight.semibold,color:e.colors.text.primary,marginBottom:e.spacing.sm},summaryWrap:{alignItems:"center",marginBottom:e.spacing.md},summary:{fontSize:e.typography.fontSize["2xl"],fontWeight:e.typography.fontWeight.bold,color:e.colors.primary,letterSpacing:e.typography.letterSpacing.wide},wheels:{marginBottom:e.spacing.lg},footer:{flexDirection:"row",justifyContent:"flex-end",alignItems:"center",gap:e.spacing.sm},footerBtn:{paddingHorizontal:e.spacing.lg}})};var _default=exports.default=TimePicker;
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.TimePicker=void 0;var _react=require("react"),_reactNative=require("react-native"),_reactNativeGestureHandler=require("react-native-gesture-handler"),_useDragToDismiss=require("../../hooks/useDragToDismiss.js"),_usePresenceMotion=require("../../hooks/usePresenceMotion.js"),_index=require("../../theme/index.js"),_corners=require("../../utils/corners.js"),_hapticUtils=require("../../utils/hapticUtils.js"),_Button=_interopRequireDefault(require("../Button/Button.js")),_ModalSafeArea=require("../ModalSafeArea/ModalSafeArea.js"),_PickerTrigger=require("../PickerTrigger/PickerTrigger.js"),_ToastProvider=require("../Toast/ToastProvider.js"),_index2=require("../WheelPicker/index.js"),_jsxRuntime=require("react/jsx-runtime");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const AnimatedGestureRoot=_reactNative.Animated.createAnimatedComponent(_reactNativeGestureHandler.GestureHandlerRootView),transparentOf=e=>{const t=e.match(/^rgba?\(([^)]+)\)$/);if(!t)return"transparent";const[a,i,r]=t[1].split(",").map(e=>e.trim());return`rgba(${a}, ${i}, ${r}, 0)`},range=(e,t,a=1)=>{const i=[];for(let r=e;r<=t;r+=a)i.push(r);return i},pad2=e=>e.toString().padStart(2,"0"),to24h=(e,t,a)=>"24h"===a?e:"AM"===t?12===e?0:e:12===e?12:e+12,from24h=(e,t)=>"24h"===t?{displayHour:e,period:"AM"}:0===e?{displayHour:12,period:"AM"}:12===e?{displayHour:12,period:"PM"}:e>12?{displayHour:e-12,period:"PM"}:{displayHour:e,period:"AM"},clampMinuteToStep=(e,t)=>{const a=Math.round(e/t)*t;return Math.min(59,Math.max(0,a))},TimePicker=e=>{const{visible:t,value:a,onChange:i,onClose:r,format:s="12h",minuteStep:n=1,title:o="Select Time",confirmLabel:l="Confirm",cancelLabel:u="Cancel",testID:c,style:d,containerStyle:m,headerLabelStyle:p,footerButtonStyle:_,label:g,placeholder:h,helperText:v,error:f,required:x,disabled:y,size:b,variant:j,clearable:M,onClear:N,formatValue:R,triggerStyle:k,haptic:A}=e,S=void 0!==e.visible,[P,T]=(0,_react.useState)(!1),D=S?t:P,w=S?c:c?`${c}-modal`:void 0,C=(0,_index.useTheme)(),H=(0,_usePresenceMotion.usePresenceMotion)(),[V,q]=(0,_ModalSafeArea.useModalInsets)(),$=(0,_react.useMemo)(()=>buildStyles(C),[C]),B=(0,_react.useRef)((0,_index.createAnimatedValue)(0)).current,I=(0,_react.useRef)((0,_index.createAnimatedValue)(0)).current,O=(0,_react.useRef)((0,_index.createAnimatedValue)(40)).current,L=(0,_react.useRef)((0,_index.createAnimatedValue)(0)).current,z=(0,_react.useRef)(0),W=(0,_react.useCallback)(()=>{S?r?.():T(!1)},[S,r]),F=(0,_react.useCallback)(()=>{const e=_reactNative.Animated.timing(B,{toValue:0,duration:H.duration("fast"),easing:_reactNative.Easing.bezier(...C.motion.easing.accelerate),useNativeDriver:!0}),t=_reactNative.Animated.timing(I,{toValue:0,duration:H.duration("normal"),useNativeDriver:!1});(H.reduced?_reactNative.Animated.parallel([e,t]):_reactNative.Animated.parallel([e,t,_reactNative.Animated.timing(O,{toValue:40,duration:C.motion.duration.fast,easing:_reactNative.Easing.bezier(...C.motion.easing.accelerate),useNativeDriver:!0})])).start(()=>W())},[I,W,B,H,O,C.motion.duration.fast,C.motion.easing.accelerate]),{handleGesture:G,opacity:E}=(0,_useDragToDismiss.useDragToDismiss)({drag:L,travel:()=>z.current||320,onDismiss:F}),U=(0,_react.useMemo)(()=>_reactNative.Animated.multiply(B,E),[B,E]),Y=(0,_react.useMemo)(()=>I.interpolate({inputRange:[0,1],outputRange:[transparentOf(C.colors.background.overlay),C.colors.background.overlay]}),[I,C.colors.background.overlay]),J=(0,_react.useMemo)(()=>"24h"===s?range(0,23):range(1,12),[s]),K=(0,_react.useMemo)(()=>range(0,59,n),[n]),Q=(0,_react.useMemo)(()=>["AM","PM"],[]),X=(0,_react.useMemo)(()=>{const e=a&&Number.isFinite(a.hour)?a.hour:(new Date).getHours(),t=a&&Number.isFinite(a.minute)?a.minute:(new Date).getMinutes(),i=clampMinuteToStep(t,n),{displayHour:r,period:o}=from24h(e,s);return{displayHour:r,minute:i,period:o,hour24:e}},[a,s,n]),[Z,ee]=(0,_react.useState)(()=>{const e=J.indexOf(X.displayHour);return e>=0?e:0}),[te,ae]=(0,_react.useState)(()=>{const e=K.indexOf(X.minute);return e>=0?e:0}),[ie,re]=(0,_react.useState)(()=>"PM"===X.period?1:0);(0,_react.useEffect)(()=>{if(!D)return;const e=a&&Number.isFinite(a.hour)?a.hour:(new Date).getHours(),t=a&&Number.isFinite(a.minute)?a.minute:(new Date).getMinutes(),i=clampMinuteToStep(t,n),{displayHour:r,period:o}=from24h(e,s),l=J.indexOf(r);ee(l>=0?l:0);const u=K.indexOf(i);ae(u>=0?u:0),re("PM"===o?1:0)},[D,a,s,n,J,K]),(0,_react.useEffect)(()=>{let e;if(D){const t=_reactNative.Animated.timing(B,{toValue:1,duration:H.duration("normal"),easing:_reactNative.Easing.out(_reactNative.Easing.cubic),useNativeDriver:!0}),a=_reactNative.Animated.timing(I,{toValue:1,duration:H.duration("normal"),useNativeDriver:!1});H.reduced?((0,_index.setNativeValue)(O,0),e=_reactNative.Animated.parallel([t,a])):e=_reactNative.Animated.parallel([t,a,_reactNative.Animated.spring(O,{toValue:0,damping:C.motion.spring.snappy.damping,stiffness:C.motion.spring.snappy.stiffness,mass:C.motion.spring.snappy.mass,useNativeDriver:!0})]),e.start()}else B.setValue(0),I.setValue(0),(0,_index.setNativeValue)(O,40),(0,_index.setNativeValue)(L,0),(0,_index.setNativeValue)(E,1);return()=>e?.stop()},[D,B,I,H,O,L,E,C.motion]);const se=(0,_react.useCallback)((e,t)=>{"hour"===e?ee(Math.max(0,J.indexOf(Number(t)))):"minute"===e?ae(Math.max(0,K.indexOf(Number(t)))):re("PM"===t?1:0)},[J,K]),ne=(0,_react.useCallback)(()=>{!1!==A&&(0,_hapticUtils.triggerHaptic)("selection"),F()},[F,A]),oe=(0,_react.useCallback)(()=>{const e=J[Z]??0,t=Q[ie]??"AM",a=to24h(e,t,s),r=K[te]??0;!1!==A&&(0,_hapticUtils.triggerHaptic)("notificationSuccess"),i?.({hour:a,minute:r}),F()},[J,Z,Q,ie,K,te,s,i,F,A]),le=(0,_react.useMemo)(()=>{const e=J[Z]??0,t=K[te]??0;if("24h"===s)return`${pad2(e)}:${pad2(t)}`;const a=Q[ie]??"AM";return`${pad2(e)}:${pad2(t)} ${a}`},[J,Z,K,te,Q,ie,s]),ue=(0,_react.useMemo)(()=>J.map(e=>({value:e,label:pad2(e),accessibilityLabel:`Hour ${e}`})),[J]),ce=(0,_react.useMemo)(()=>K.map(e=>({value:e,label:pad2(e),accessibilityLabel:`${e} minutes`})),[K]),de=(0,_react.useMemo)(()=>Q.map(e=>({value:e,label:e})),[Q]),me=(0,_react.useMemo)(()=>{const e=[{key:"hour",label:"Hour",items:ue,value:J[Z]??0,separator:":",testID:"time-picker-hour"},{key:"minute",label:"Minute",items:ce,value:K[te]??0,gapAfter:"12h"===s?C.spacing.md:void 0,testID:"time-picker-minute"}];return"12h"===s&&e.push({key:"period",label:"Period",items:de,value:Q[ie]??"AM",testID:"time-picker-period"}),e},[ue,ce,de,J,Z,K,te,Q,ie,s,C.spacing.md]),pe=(0,_react.useCallback)(e=>{if("24h"===s)return`${pad2(e.hour)}:${pad2(e.minute)}`;const{displayHour:t,period:a}=from24h(e.hour,"12h");return`${t}:${pad2(e.minute)} ${a}`},[s]),ge=!S&&a&&Number.isFinite(a.hour)&&Number.isFinite(a.minute)?(R??pe)(a):void 0,he=(0,_jsxRuntime.jsx)(_reactNative.Modal,{visible:D,transparent:!0,statusBarTranslucent:!0,navigationBarTranslucent:!0,animationType:"none",onRequestClose:F,testID:w,children:(0,_jsxRuntime.jsx)(_ModalSafeArea.ModalSafeArea,{onInsets:q,children:(0,_jsxRuntime.jsxs)(AnimatedGestureRoot,{collapsable:!1,style:[$.backdrop,{backgroundColor:Y}],children:[(0,_jsxRuntime.jsx)(_reactNative.Pressable,{style:_reactNative.StyleSheet.absoluteFill,onPress:F,accessibilityLabel:"Close time picker",accessibilityRole:"button"}),(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:H.reduced?{opacity:U}:void 0,children:(0,_jsxRuntime.jsxs)(_reactNative.Animated.View,{style:[$.sheet,{paddingBottom:Math.max(V.bottom,C.spacing.lg),transform:[{translateY:_reactNative.Animated.add(O,L)}]},d,m],onLayout:e=>{z.current=e.nativeEvent.layout.height},accessibilityViewIsModal:!0,accessible:!0,accessibilityRole:"none",accessibilityLabel:o,children:[(0,_jsxRuntime.jsx)(_reactNativeGestureHandler.GestureDetector,{gesture:G,children:(0,_jsxRuntime.jsxs)(_reactNative.View,{children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:$.handle}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[$.title,p],accessibilityRole:"header",children:o})]})}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:$.summaryWrap,accessibilityLiveRegion:"polite",accessibilityLabel:`Selected ${le}`,children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:$.summary,children:le})}),(0,_jsxRuntime.jsx)(_index2.WheelPicker,{columns:me,onChange:se,haptic:A,style:$.wheels}),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:$.footer,children:[(0,_jsxRuntime.jsx)(_Button.default,{title:u,haptic:!1,variant:"ghost",tone:"neutral",onPress:ne,style:[$.footerBtn,_],accessibilityHint:"Dismiss without changes",testID:"time-picker-cancel"}),(0,_jsxRuntime.jsx)(_Button.default,{title:l,variant:"solid",tone:"primary",haptic:!1,onPress:oe,style:[$.footerBtn,_],accessibilityHint:"Confirm selected time",testID:"time-picker-confirm"})]})]})}),(0,_jsxRuntime.jsx)(_ToastProvider.ToastHost,{})]})})});return S?he:(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_PickerTrigger.PickerTrigger,{label:g,placeholder:h,helperText:v,error:f,required:x,disabled:y,size:b,variant:j,clearable:M,onClear:N,value:ge,onPress:()=>T(!0),triggerStyle:k,testID:c}),he]})};exports.TimePicker=TimePicker;const buildStyles=e=>{const t=e.shadows.xl;return _reactNative.StyleSheet.create({backdrop:{flex:1,justifyContent:"flex-end"},sheet:{backgroundColor:e.colors.background.elevated,borderTopLeftRadius:e.radius.xl,borderTopRightRadius:e.radius.xl,..._corners.smoothCorners,paddingTop:e.spacing.sm,paddingHorizontal:e.spacing.lg,paddingBottom:e.spacing.xl,shadowColor:t.shadowColor,shadowOffset:t.shadowOffset,shadowOpacity:t.shadowOpacity,shadowRadius:t.shadowRadius,elevation:t.elevation},handle:{alignSelf:"center",width:e.components.timePicker?.handleWidth??36,height:e.components.timePicker?.handleHeight??4,borderRadius:e.radius.full,..._corners.smoothCorners,backgroundColor:e.colors.border.secondary,marginBottom:e.spacing.sm},title:{textAlign:"center",fontSize:e.typography.fontSize.lg,fontWeight:e.typography.fontWeight.semibold,color:e.colors.text.primary,marginBottom:e.spacing.sm},summaryWrap:{alignItems:"center",marginBottom:e.spacing.md},summary:{fontSize:e.typography.fontSize["2xl"],fontWeight:e.typography.fontWeight.bold,color:e.colors.primary,letterSpacing:e.typography.letterSpacing.wide},wheels:{marginBottom:e.spacing.lg},footer:{flexDirection:"row",justifyContent:"flex-end",alignItems:"center",gap:e.spacing.sm},footerBtn:{paddingHorizontal:e.spacing.lg}})};var _default=exports.default=TimePicker;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.Toast=void 0;var _react=require("react"),_reactNative=require("react-native"),_useReducedMotion=require("../../hooks/useReducedMotion.js"),_index=require("../../theme/index.js"),_corners=require("../../utils/corners.js"),_jsxRuntime=require("react/jsx-runtime");const DEFAULT_SWIPE_DISMISS_THRESHOLD=80,DEFAULT_SWIPE_VELOCITY_THRESHOLD=.5,DEFAULT_STACK_OFFSET=8,DEFAULT_STACK_SCALE_STEP=.04,DEFAULT_AUTO_DISMISS_MS=3e3,WEB_ACTION_MIN_DURATION_MS=8e3,COUNTDOWN_BAR_HEIGHT=3,ACTION_HIT_SLOP={top:8,bottom:8,left:8,right:8},DISMISS_ACTIONS=[{name:"dismiss",label:"Dismiss"}],Toast=({toast:e,index:t,onDismiss:i,shownAt:a,runtime:n})=>{const r=(0,_index.useTheme)(),s=e.variant??"default",o=e.position??"bottom",c=(0,_react.useMemo)(()=>buildStyles(r),[r]),l=(0,_react.useMemo)(()=>tintFor(r,s),[r,s]),u=(0,_react.useMemo)(()=>inkFor(r,s),[r,s]),d=r.components.toast,m=d?.iconCircleSize??28,_=d?.iconCircleBorderRadius??14,p=d?.iconGlyphFontSize??16,g=d?.tintBarWidth??0,v=d?.swipeDismissThreshold??80,h=d?.swipeVelocityThreshold??.5,f=d?.stackOffset??8,x=d?.stackScaleStep??.04,N=d?.stackMinScale??.9,b=d?.defaultDurationMs??3e3,S=d?.enableSwipeDismiss??!0,y=d?.enterSpringDamping??18,A=d?.enterSpringStiffness??180,R=d?.enterSpringMass??1,w="top"===o?-120:120,T=(0,_react.useRef)((0,_index.createAnimatedValue)(w)).current,M=(0,_react.useRef)((0,_index.createAnimatedValue)(0)).current,D=(0,_react.useRef)((0,_index.createAnimatedValue)(0)).current,C=(0,_react.useRef)(!1),j="top"===o?t*f:-t*f,V=Math.max(1-t*x,N),E=(0,_react.useRef)((0,_index.createAnimatedValue)(j)).current;(0,_react.useEffect)(()=>{(0,_index.setNativeValue)(E,j)},[j,E]);const I=(0,_react.useMemo)(()=>_reactNative.Animated.add(T,E),[T,E]),k=(0,_useReducedMotion.useReducedMotion)(),O=void 0!==e.action,L=e.duration??b,P=L>0&&O&&"web"===_reactNative.Platform.OS?Math.max(L,8e3):L,F=P<=0||O&&!0===n?.screenReaderOn,B=!0===e.countdown&&!F,H=(0,_react.useRef)((0,_index.createAnimatedValue)(1)).current,z=(0,_react.useRef)({initialised:!1,timer:null,remaining:0,startedAt:0}),U=(0,_react.useRef)({touch:!1,pan:!1,hover:!1}),G=(0,_react.useRef)(()=>{}),q=(0,_react.useRef)({id:e.id,totalMs:P,shownAt:a,runtime:n,persistent:F,animateBar:!1});q.current={id:e.id,totalMs:P,shownAt:a,runtime:n,persistent:F,animateBar:B&&!k};const W=(0,_react.useCallback)(()=>{const e=z.current,t=q.current,i=U.current;if(!e.initialised){e.initialised=!0;const i=t.runtime?.readRemaining(t.id),a=void 0===t.shownAt?0:Date.now()-t.shownAt;e.remaining=i??(t.totalMs>0?Math.max(t.totalMs-a,0):0),t.totalMs>0&&e.remaining<t.totalMs&&(0,_index.setNativeValue)(H,e.remaining/t.totalMs)}const a=!(t.persistent||C.current||i.touch||i.pan||i.hover);a&&null===e.timer?(e.startedAt=Date.now(),e.timer=setTimeout(()=>{e.timer=null,e.remaining=0,G.current()},e.remaining),t.animateBar&&_reactNative.Animated.timing(H,{toValue:0,duration:e.remaining,easing:_reactNative.Easing.linear,useNativeDriver:!0}).start()):a||null===e.timer||(clearTimeout(e.timer),e.timer=null,e.remaining=Math.max(e.remaining-(Date.now()-e.startedAt),0),H.stopAnimation())},[H]),dismiss=()=>{C.current||(C.current=!0,W(),_reactNative.Animated.parallel([_reactNative.Animated.timing(D,{toValue:0,duration:r.motion.duration.fast,easing:_reactNative.Easing.bezier(...r.motion.easing.accelerate),useNativeDriver:!0}),_reactNative.Animated.timing(T,{toValue:w,duration:r.motion.duration.fast,easing:_reactNative.Easing.bezier(...r.motion.easing.accelerate),useNativeDriver:!0})]).start(()=>i(e.id)))};G.current=dismiss,(0,_react.useEffect)(()=>{const e=_reactNative.Animated.parallel([_reactNative.Animated.spring(T,{toValue:0,damping:y,stiffness:A,mass:R,useNativeDriver:!0}),_reactNative.Animated.timing(D,{toValue:1,duration:r.motion.duration.fast,useNativeDriver:!0})]);return e.start(),()=>e.stop()},[]),(0,_react.useEffect)(()=>{W()},[F,W]),(0,_react.useEffect)(()=>()=>{const e=z.current,t=q.current;null!==e.timer&&(clearTimeout(e.timer),e.timer=null,e.remaining=Math.max(e.remaining-(Date.now()-e.startedAt),0)),H.stopAnimation(),e.initialised&&t.totalMs>0&&!C.current&&t.runtime?.writeRemaining(t.id,e.remaining)},[H]);const $=(0,_react.useCallback)((e,t)=>{U.current[e]=t,W()},[W]),K=(0,_react.useCallback)(()=>$("touch",!0),[$]),X=(0,_react.useCallback)(e=>$("touch",(e.nativeEvent.touches?.length??0)>0),[$]),Y=(0,_react.useCallback)(()=>$("hover",!0),[$]),J=(0,_react.useCallback)(()=>$("hover",!1),[$]),Q=(0,_react.useMemo)(()=>_reactNative.PanResponder.create({onMoveShouldSetPanResponder:(e,t)=>Math.abs(t.dx)>Math.abs(t.dy)&&Math.abs(t.dx)>6,onPanResponderGrant:()=>$("pan",!0),onPanResponderMove:(e,t)=>{(0,_index.setNativeValue)(M,t.dx);const i=1-.7*Math.min(Math.abs(t.dx)/200,1);(0,_index.setNativeValue)(D,i)},onPanResponderTerminate:()=>{$("pan",!1),_reactNative.Animated.parallel([_reactNative.Animated.spring(M,{toValue:0,damping:r.motion.spring.snappy.damping,stiffness:r.motion.spring.snappy.stiffness,mass:r.motion.spring.snappy.mass,useNativeDriver:!0}),_reactNative.Animated.timing(D,{toValue:1,duration:r.motion.duration.fast,useNativeDriver:!0})]).start()},onPanResponderRelease:(t,a)=>{if(Math.abs(a.dx)>v||Math.abs(a.vx)>h){const t=a.dx>=0?1:-1;C.current=!0,$("pan",!1),_reactNative.Animated.parallel([_reactNative.Animated.timing(M,{toValue:500*t,duration:r.motion.duration.fast,useNativeDriver:!0}),_reactNative.Animated.timing(D,{toValue:0,duration:r.motion.duration.fast,useNativeDriver:!0})]).start(()=>i(e.id))}else $("pan",!1),_reactNative.Animated.parallel([_reactNative.Animated.spring(M,{toValue:0,useNativeDriver:!0}),_reactNative.Animated.spring(D,{toValue:1,useNativeDriver:!0})]).start()}}),[M,D,$,v,h,r.motion.duration.fast,r.motion.spring.snappy.damping,r.motion.spring.snappy.stiffness,r.motion.spring.snappy.mass,i,e.id]),Z={accessibilityActions:DISMISS_ACTIONS,onAccessibilityAction:e=>{"dismiss"===e.nativeEvent.actionName&&dismiss()}},[ee,te]=(0,_react.useState)(0),ie=(0,_react.useMemo)(()=>H.interpolate({inputRange:[0,1],outputRange:[-ee,0]}),[H,ee]),ae=e.description?`${e.message}. ${e.description}`:e.message,ne=e.action&&B?`${e.action.label}, ${Math.ceil(P/1e3)} seconds`:e.action?.label;return(0,_jsxRuntime.jsxs)(_reactNative.Animated.View,{...S?Q.panHandlers:{},...O?{}:{accessible:!0,...Z},..."web"===_reactNative.Platform.OS?{onPointerEnter:Y,onPointerLeave:J}:{},onTouchStart:K,onTouchEnd:X,onTouchCancel:X,accessibilityLabel:ae,testID:e.testID,style:[c.container,{backgroundColor:r.colors.background.elevated,borderRadius:r.radius.lg,..._corners.smoothCorners,padding:r.spacing.md,...r.shadows.md,shadowColor:r.shadows.md.shadowColor,opacity:D,transform:[{translateY:I},{translateX:M},{scale:V}]},e.style,e.containerStyle],children:[g>0?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[c.tintBar,{width:g,backgroundColor:l}]}):null,(0,_jsxRuntime.jsxs)(_reactNative.View,{style:c.row,children:[(()=>{if(e.icon)return e.icon;const t=defaultGlyph(s);return t?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[c.iconCircle,{width:m,height:m,borderRadius:_,..._corners.smoothCorners,backgroundColor:l+"22"},e.iconCircleStyle],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[c.iconGlyph,{color:u,fontSize:p}],accessible:!1,children:t})}):null})(),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:c.textBlock,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[c.message,{color:r.colors.text.primary,fontSize:r.typography.fontSize.base,...(0,_index.fontFor)(r,"semibold")},e.textStyle,e.messageStyle],numberOfLines:2,children:e.message}),e.description?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[c.description,{color:r.colors.text.secondary,fontSize:r.typography.fontSize.sm}],numberOfLines:3,children:e.description}):null]}),e.action?(0,_jsxRuntime.jsx)(_reactNative.Pressable,{accessibilityRole:"button",accessibilityLabel:ne,hitSlop:ACTION_HIT_SLOP,...Z,onPress:()=>{e.action?.onPress(),dismiss()},style:({pressed:t})=>[c.actionBtn,{backgroundColor:t?r.colors.surface.pressed:"transparent"},e.actionButtonStyle],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:{color:l,fontSize:r.typography.fontSize.sm,...(0,_index.fontFor)(r,"semibold")},numberOfLines:1,children:e.action.label})}):null]}),B?(0,_jsxRuntime.jsxs)(_reactNative.View,{pointerEvents:"none",accessibilityElementsHidden:!0,importantForAccessibility:"no-hide-descendants",onLayout:e=>te(e.nativeEvent.layout.width),testID:"toast-countdown",style:[c.countdownTrack,{backgroundColor:l+"22"}],children:[k?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[c.countdownFill,{backgroundColor:l}]}):null,!k&&ee>0?(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:[c.countdownFill,{backgroundColor:l,transform:[{translateX:ie}]}]}):null]}):null]})};exports.Toast=Toast;const tintFor=(e,t)=>{switch(t){case"success":return e.colors.success;case"error":return e.colors.error;case"warning":return e.colors.warning;case"info":return e.colors.info;default:return e.colors.text.primary}},inkFor=(e,t)=>{switch(t){case"success":return e.colors.toneText.success;case"error":return e.colors.toneText.error;case"warning":return e.colors.toneText.warning;case"info":return e.colors.toneText.info;default:return e.colors.text.primary}},defaultGlyph=e=>{switch(e){case"success":return"✓";case"error":return"×";case"warning":return"!";case"info":return"i";default:return""}},buildStyles=e=>_reactNative.StyleSheet.create({container:{overflow:"hidden",marginVertical:4},tintBar:{position:"absolute",left:0,top:0,bottom:0},row:{flexDirection:"row",alignItems:"center",paddingLeft:8},iconCircle:{alignItems:"center",justifyContent:"center",marginRight:12},iconGlyph:{fontWeight:"700",lineHeight:18},textBlock:{flex:1,paddingRight:8},message:{lineHeight:20},description:{marginTop:2,lineHeight:18},countdownTrack:{position:"absolute",left:0,right:0,bottom:0,height:3,overflow:"hidden"},countdownFill:{position:"absolute",left:0,right:0,top:0,bottom:0},actionBtn:{paddingHorizontal:10,paddingVertical:6,borderRadius:8,..._corners.smoothCorners,marginLeft:8}});var _default=exports.default=Toast;
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.Toast=void 0;var _react=require("react"),_reactNative=require("react-native"),_usePresenceMotion=require("../../hooks/usePresenceMotion.js"),_index=require("../../theme/index.js"),_corners=require("../../utils/corners.js"),_jsxRuntime=require("react/jsx-runtime");const DEFAULT_SWIPE_DISMISS_THRESHOLD=80,DEFAULT_SWIPE_VELOCITY_THRESHOLD=.5,DEFAULT_STACK_OFFSET=8,DEFAULT_STACK_SCALE_STEP=.04,DEFAULT_AUTO_DISMISS_MS=3e3,WEB_ACTION_MIN_DURATION_MS=8e3,COUNTDOWN_BAR_HEIGHT=3,ACTION_HIT_SLOP={top:8,bottom:8,left:8,right:8},DISMISS_ACTIONS=[{name:"dismiss",label:"Dismiss"}],Toast=({toast:e,index:t,onDismiss:i,shownAt:a,runtime:r})=>{const n=(0,_index.useTheme)(),s=(0,_usePresenceMotion.usePresenceMotion)(),o=s.duration("fast"),c=e.variant??"default",l=e.position??"bottom",u=(0,_react.useMemo)(()=>buildStyles(n),[n]),d=(0,_react.useMemo)(()=>tintFor(n,c),[n,c]),m=(0,_react.useMemo)(()=>inkFor(n,c),[n,c]),_=n.components.toast,p=_?.iconCircleSize??28,v=_?.iconCircleBorderRadius??14,g=_?.iconGlyphFontSize??16,h=_?.tintBarWidth??0,f=_?.swipeDismissThreshold??80,x=_?.swipeVelocityThreshold??.5,N=_?.stackOffset??8,b=_?.stackScaleStep??.04,S=_?.stackMinScale??.9,A=_?.defaultDurationMs??3e3,y=_?.enableSwipeDismiss??!0,w=_?.enterSpringDamping??18,T=_?.enterSpringStiffness??180,R=_?.enterSpringMass??1,M="top"===l?-120:120,D=(0,_react.useRef)((0,_index.createAnimatedValue)(s.reduced?0:M)).current,V=(0,_react.useRef)((0,_index.createAnimatedValue)(0)).current,C=(0,_react.useRef)((0,_index.createAnimatedValue)(0)).current,j=(0,_react.useRef)(!1),E="top"===l?t*N:-t*N,I=Math.max(1-t*b,S),k=(0,_react.useRef)((0,_index.createAnimatedValue)(E)).current;(0,_react.useEffect)(()=>{(0,_index.setNativeValue)(k,E)},[E,k]);const O=(0,_react.useMemo)(()=>_reactNative.Animated.add(D,k),[D,k]),P=void 0!==e.action,L=e.duration??A,F=L>0&&P&&"web"===_reactNative.Platform.OS?Math.max(L,8e3):L,B=F<=0||P&&!0===r?.screenReaderOn,H=!0===e.countdown&&!B,z=(0,_react.useRef)((0,_index.createAnimatedValue)(1)).current,U=(0,_react.useRef)({initialised:!1,timer:null,remaining:0,startedAt:0}),G=(0,_react.useRef)({touch:!1,pan:!1,hover:!1}),q=(0,_react.useRef)(()=>{}),W=(0,_react.useRef)({id:e.id,totalMs:F,shownAt:a,runtime:r,persistent:B,animateBar:!1});W.current={id:e.id,totalMs:F,shownAt:a,runtime:r,persistent:B,animateBar:H&&!s.reduced};const $=(0,_react.useCallback)(()=>{const e=U.current,t=W.current,i=G.current;if(!e.initialised){e.initialised=!0;const i=t.runtime?.readRemaining(t.id),a=void 0===t.shownAt?0:Date.now()-t.shownAt;e.remaining=i??(t.totalMs>0?Math.max(t.totalMs-a,0):0),t.totalMs>0&&e.remaining<t.totalMs&&(0,_index.setNativeValue)(z,e.remaining/t.totalMs)}const a=!(t.persistent||j.current||i.touch||i.pan||i.hover);a&&null===e.timer?(e.startedAt=Date.now(),e.timer=setTimeout(()=>{e.timer=null,e.remaining=0,q.current()},e.remaining),t.animateBar&&_reactNative.Animated.timing(z,{toValue:0,duration:e.remaining,easing:_reactNative.Easing.linear,useNativeDriver:!0}).start()):a||null===e.timer||(clearTimeout(e.timer),e.timer=null,e.remaining=Math.max(e.remaining-(Date.now()-e.startedAt),0),z.stopAnimation())},[z]),dismiss=()=>{if(j.current)return;j.current=!0,$();const t=[_reactNative.Animated.timing(C,{toValue:0,duration:o,easing:_reactNative.Easing.bezier(...n.motion.easing.accelerate),useNativeDriver:!0})];s.reduced||t.push(_reactNative.Animated.timing(D,{toValue:M,duration:n.motion.duration.fast,easing:_reactNative.Easing.bezier(...n.motion.easing.accelerate),useNativeDriver:!0})),_reactNative.Animated.parallel(t).start(()=>i(e.id))};q.current=dismiss,(0,_react.useEffect)(()=>{const e=s.reduced?_reactNative.Animated.timing(C,{toValue:1,duration:o,useNativeDriver:!0}):_reactNative.Animated.parallel([_reactNative.Animated.spring(D,{toValue:0,damping:w,stiffness:T,mass:R,useNativeDriver:!0}),_reactNative.Animated.timing(C,{toValue:1,duration:o,useNativeDriver:!0})]);return e.start(),()=>e.stop()},[]),(0,_react.useEffect)(()=>{$()},[B,$]),(0,_react.useEffect)(()=>()=>{const e=U.current,t=W.current;null!==e.timer&&(clearTimeout(e.timer),e.timer=null,e.remaining=Math.max(e.remaining-(Date.now()-e.startedAt),0)),z.stopAnimation(),e.initialised&&t.totalMs>0&&!j.current&&t.runtime?.writeRemaining(t.id,e.remaining)},[z]);const K=(0,_react.useCallback)((e,t)=>{G.current[e]=t,$()},[$]),X=(0,_react.useCallback)(()=>K("touch",!0),[K]),Y=(0,_react.useCallback)(e=>K("touch",(e.nativeEvent.touches?.length??0)>0),[K]),J=(0,_react.useCallback)(()=>K("hover",!0),[K]),Q=(0,_react.useCallback)(()=>K("hover",!1),[K]),Z=(0,_react.useMemo)(()=>_reactNative.PanResponder.create({onMoveShouldSetPanResponder:(e,t)=>Math.abs(t.dx)>Math.abs(t.dy)&&Math.abs(t.dx)>6,onPanResponderGrant:()=>K("pan",!0),onPanResponderMove:(e,t)=>{(0,_index.setNativeValue)(V,t.dx);const i=1-.7*Math.min(Math.abs(t.dx)/200,1);(0,_index.setNativeValue)(C,i)},onPanResponderTerminate:()=>{if(K("pan",!1),s.reduced)return(0,_index.setNativeValue)(V,0),void _reactNative.Animated.timing(C,{toValue:1,duration:o,useNativeDriver:!0}).start();_reactNative.Animated.parallel([_reactNative.Animated.spring(V,{toValue:0,damping:n.motion.spring.snappy.damping,stiffness:n.motion.spring.snappy.stiffness,mass:n.motion.spring.snappy.mass,useNativeDriver:!0}),_reactNative.Animated.timing(C,{toValue:1,duration:o,useNativeDriver:!0})]).start()},onPanResponderRelease:(t,a)=>{if(Math.abs(a.dx)>f||Math.abs(a.vx)>x){const t=a.dx>=0?1:-1;j.current=!0,K("pan",!1);const r=[_reactNative.Animated.timing(C,{toValue:0,duration:o,useNativeDriver:!0})];s.reduced||r.push(_reactNative.Animated.timing(V,{toValue:500*t,duration:n.motion.duration.fast,useNativeDriver:!0})),_reactNative.Animated.parallel(r).start(()=>i(e.id))}else K("pan",!1),s.reduced?((0,_index.setNativeValue)(V,0),_reactNative.Animated.timing(C,{toValue:1,duration:o,useNativeDriver:!0}).start()):_reactNative.Animated.parallel([_reactNative.Animated.spring(V,{toValue:0,useNativeDriver:!0}),_reactNative.Animated.spring(C,{toValue:1,useNativeDriver:!0})]).start()}}),[V,C,K,f,x,o,s.reduced,n.motion.duration.fast,n.motion.spring.snappy.damping,n.motion.spring.snappy.stiffness,n.motion.spring.snappy.mass,i,e.id]),ee={accessibilityActions:DISMISS_ACTIONS,onAccessibilityAction:e=>{"dismiss"===e.nativeEvent.actionName&&dismiss()}},[te,ie]=(0,_react.useState)(0),ae=(0,_react.useMemo)(()=>z.interpolate({inputRange:[0,1],outputRange:[-te,0]}),[z,te]),re=e.description?`${e.message}. ${e.description}`:e.message,ne=e.action&&H?`${e.action.label}, ${Math.ceil(F/1e3)} seconds`:e.action?.label;return(0,_jsxRuntime.jsxs)(_reactNative.Animated.View,{...y?Z.panHandlers:{},...P?{}:{accessible:!0,...ee},..."web"===_reactNative.Platform.OS?{onPointerEnter:J,onPointerLeave:Q}:{},onTouchStart:X,onTouchEnd:Y,onTouchCancel:Y,accessibilityLabel:re,testID:e.testID,style:[u.container,{backgroundColor:n.colors.background.elevated,borderRadius:n.radius.lg,..._corners.smoothCorners,padding:n.spacing.md,...n.shadows.md,shadowColor:n.shadows.md.shadowColor,opacity:C,transform:[{translateY:O},{translateX:V},{scale:I}]},e.style,e.containerStyle],children:[h>0?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[u.tintBar,{width:h,backgroundColor:d}]}):null,(0,_jsxRuntime.jsxs)(_reactNative.View,{style:u.row,children:[(()=>{if(e.icon)return e.icon;const t=defaultGlyph(c);return t?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[u.iconCircle,{width:p,height:p,borderRadius:v,..._corners.smoothCorners,backgroundColor:d+"22"},e.iconCircleStyle],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[u.iconGlyph,{color:m,fontSize:g}],accessible:!1,children:t})}):null})(),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:u.textBlock,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[u.message,{color:n.colors.text.primary,fontSize:n.typography.fontSize.base,...(0,_index.fontFor)(n,"semibold")},e.textStyle,e.messageStyle],numberOfLines:2,children:e.message}),e.description?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[u.description,{color:n.colors.text.secondary,fontSize:n.typography.fontSize.sm}],numberOfLines:3,children:e.description}):null]}),e.action?(0,_jsxRuntime.jsx)(_reactNative.Pressable,{accessibilityRole:"button",accessibilityLabel:ne,hitSlop:ACTION_HIT_SLOP,...ee,onPress:()=>{e.action?.onPress(),dismiss()},style:({pressed:t})=>[u.actionBtn,{backgroundColor:t?n.colors.surface.pressed:"transparent"},e.actionButtonStyle],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:{color:d,fontSize:n.typography.fontSize.sm,...(0,_index.fontFor)(n,"semibold")},numberOfLines:1,children:e.action.label})}):null]}),H?(0,_jsxRuntime.jsxs)(_reactNative.View,{pointerEvents:"none",accessibilityElementsHidden:!0,importantForAccessibility:"no-hide-descendants",onLayout:e=>ie(e.nativeEvent.layout.width),testID:"toast-countdown",style:[u.countdownTrack,{backgroundColor:d+"22"}],children:[s.reduced?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[u.countdownFill,{backgroundColor:d}]}):null,!s.reduced&&te>0?(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:[u.countdownFill,{backgroundColor:d,transform:[{translateX:ae}]}]}):null]}):null]})};exports.Toast=Toast;const tintFor=(e,t)=>{switch(t){case"success":return e.colors.success;case"error":return e.colors.error;case"warning":return e.colors.warning;case"info":return e.colors.info;default:return e.colors.text.primary}},inkFor=(e,t)=>{switch(t){case"success":return e.colors.toneText.success;case"error":return e.colors.toneText.error;case"warning":return e.colors.toneText.warning;case"info":return e.colors.toneText.info;default:return e.colors.text.primary}},defaultGlyph=e=>{switch(e){case"success":return"✓";case"error":return"×";case"warning":return"!";case"info":return"i";default:return""}},buildStyles=e=>_reactNative.StyleSheet.create({container:{overflow:"hidden",marginVertical:4},tintBar:{position:"absolute",left:0,top:0,bottom:0},row:{flexDirection:"row",alignItems:"center",paddingLeft:8},iconCircle:{alignItems:"center",justifyContent:"center",marginRight:12},iconGlyph:{fontWeight:"700",lineHeight:18},textBlock:{flex:1,paddingRight:8},message:{lineHeight:20},description:{marginTop:2,lineHeight:18},countdownTrack:{position:"absolute",left:0,right:0,bottom:0,height:3,overflow:"hidden"},countdownFill:{position:"absolute",left:0,right:0,top:0,bottom:0},actionBtn:{paddingHorizontal:10,paddingVertical:6,borderRadius:8,..._corners.smoothCorners,marginLeft:8}});var _default=exports.default=Toast;
|