@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.AccordionGroup=exports.Accordion=void 0;var _react=require("react"),_reactNative=require("react-native"),_index=require("../../theme/index.js"),_corners=require("../../utils/corners.js"),_hapticUtils=require("../../utils/hapticUtils.js"),_defaultIcons=require("../AppIcon/defaultIcons.js"),_index2=require("../Skeleton/index.js"),_jsxRuntime=require("react/jsx-runtime");const AccordionGroupContext=(0,_react.createContext)(null),useAccordionGroup=()=>(0,_react.useContext)(AccordionGroupContext),AccordionGroup=({children:e,allowMultiple:t=!1,defaultExpandedKeys:i,expandedKeys:
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.AccordionGroup=exports.Accordion=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"),_hapticUtils=require("../../utils/hapticUtils.js"),_defaultIcons=require("../AppIcon/defaultIcons.js"),_index2=require("../Skeleton/index.js"),_jsxRuntime=require("react/jsx-runtime");const AccordionGroupContext=(0,_react.createContext)(null),useAccordionGroup=()=>(0,_react.useContext)(AccordionGroupContext),AccordionGroup=({children:e,allowMultiple:t=!1,defaultExpandedKeys:i,expandedKeys:r,onChange:n,style:a,testID:o})=>{const c=void 0!==r,[s,l]=(0,_react.useState)(i??[]),d=c?r:s,u=(0,_react.useCallback)(e=>{c||l(e),n?.(e)},[c,n]),p=(0,_react.useCallback)(e=>{let i;i=d.includes(e)?d.filter(t=>t!==e):t?[...d,e]:[e],u(i)},[d,t,u]),_=(0,_react.useCallback)(e=>d.includes(e),[d]),x=(0,_react.useMemo)(()=>({isExpanded:_,toggle:p,allowMultiple:t}),[_,p,t]);return(0,_jsxRuntime.jsx)(AccordionGroupContext.Provider,{value:x,children:(0,_jsxRuntime.jsx)(_reactNative.View,{style:a,testID:o,children:e})})};exports.AccordionGroup=AccordionGroup,AccordionGroup.displayName="AccordionGroup";const Chevron=({rotate:e,color:t})=>{const i=(0,_index.useTheme)();return(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:[chevronStyles.icon,{transform:[{rotate:e}]}],accessible:!1,children:(i.icons?.chevronDown??_defaultIcons.defaultIcons.chevronDown)({size:16,color:t})})},chevronStyles=_reactNative.StyleSheet.create({icon:{width:16,height:16,alignItems:"center",justifyContent:"center"}}),Accordion=e=>{const{title:t,children:i,id:r,expanded:n,defaultExpanded:a=!1,onChange:o,icon:c,disabled:s=!1,variant:l="plain",accessibilityLabel:d,style:u,headerStyle:p,contentStyle:_,contentWrapperStyle:x,containerStyle:m,testID:h,loading:g=!1,haptic:y}=e,v=(0,_index.useTheme)(),j=(0,_usePresenceMotion.usePresenceMotion)(),b=j.duration("normal"),A=(0,_react.useMemo)(()=>buildStyles(v),[v]),f=useAccordionGroup(),R=void 0!==n,[N,S]=(0,_react.useState)(a),V=f&&r?f.isExpanded(r):null,w=null!==V?V:R?!!n:N,[k,C]=(0,_react.useState)(null),I=(0,_react.useRef)((0,_index.createAnimatedValue)(w?1:0)).current,D=(0,_react.useRef)((0,_index.createAnimatedValue)(w?1:0)).current,G=(0,_react.useRef)((0,_index.createAnimatedValue)(w?1:0)).current,q=(0,_react.useRef)(w);(0,_react.useEffect)(()=>{if(q.current===w)return;q.current=w;const e=w?1:0,t=_reactNative.Easing.bezier(...v.motion.easing.standard),i=_reactNative.Animated.timing(I,{toValue:e,duration:v.motion.duration.normal,easing:t,useNativeDriver:!1}),r=_reactNative.Animated.timing(D,{toValue:e,duration:b,easing:t,useNativeDriver:!1}),n=_reactNative.Animated.timing(G,{toValue:e,duration:v.motion.duration.normal,easing:t,useNativeDriver:!1}),a=j.reduced&&!w?_reactNative.Animated.sequence([r,_reactNative.Animated.parallel([i,n])]):_reactNative.Animated.parallel([i,r,n]);return a.start(),()=>a.stop()},[w,I,D,G,b,j.reduced,v.motion]);const L=(0,_react.useCallback)(e=>{const t=e.nativeEvent.layout.height;t>0&&t!==k&&C(t)},[k]),M=(0,_react.useCallback)(()=>{if(s)return;const e=(0,_hapticUtils.resolveHaptic)(y,"selection");if(e&&(0,_hapticUtils.triggerHaptic)(e),f&&r)return f.toggle(r),void o?.(!w);R||S(!w),o?.(!w)},[s,f,r,w,R,o,y]),P=G.interpolate({inputRange:[0,1],outputRange:["0deg","180deg"]}),E=null===k?void 0:I.interpolate({inputRange:[0,1],outputRange:[0,k]}),z="card"===l?[A.card,v.shadows.sm,{backgroundColor:v.colors.background.elevated,borderRadius:v.radius.md,..._corners.smoothCorners}]:null;return g?(0,_jsxRuntime.jsx)(AccordionSkeleton,{...e}):(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[z,u,m],testID:h,children:[(0,_jsxRuntime.jsxs)(_reactNative.Pressable,{onPress:M,disabled:s,accessibilityRole:"button",accessibilityLabel:d??t,accessibilityState:{expanded:w,disabled:s},"aria-expanded":w,"aria-disabled":s,style:({pressed:e})=>[A.header,p,{opacity:s?.55:e?.85:1}],children:[c?(0,_jsxRuntime.jsx)(_reactNative.View,{style:A.iconLeft,children:c}):null,(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[A.title,{color:s?v.colors.text.disabled:v.colors.text.primary,fontSize:v.typography.fontSize.base,fontWeight:v.typography.fontWeight.semibold}],numberOfLines:2,children:t}),(0,_jsxRuntime.jsx)(Chevron,{rotate:P,color:s?v.colors.text.disabled:v.colors.text.secondary})]}),null===k?(0,_jsxRuntime.jsx)(_reactNative.View,{style:A.measurer,pointerEvents:"none",onLayout:L,children:(0,_jsxRuntime.jsx)(_reactNative.View,{style:[A.content,_],children:i})}):null,(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:[A.contentWrapper,null===k?{height:0,opacity:0}:{height:E,opacity:D},x],children:(0,_jsxRuntime.jsx)(_reactNative.View,{onLayout:L,style:[A.content,_],children:i})})]})};exports.Accordion=Accordion,Accordion.displayName="Accordion";const AccordionSkeleton=({variant:e="plain",style:t})=>{const i=(0,_index.useTheme)(),r="card"===e;return(0,_jsxRuntime.jsx)(_reactNative.View,{style:[r?{paddingHorizontal:i.spacing.md,paddingVertical:i.spacing.sm,backgroundColor:i.colors.background.elevated,borderRadius:i.radius.md,..._corners.smoothCorners}:{paddingVertical:i.spacing.sm},t],accessibilityRole:"progressbar",accessibilityState:{busy:!0},"aria-busy":!0,children:(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{flexDirection:"row",alignItems:"center"},children:[(0,_jsxRuntime.jsx)(_index2.Skeleton,{shape:"text",width:"60%",height:18,style:{flex:1}}),(0,_jsxRuntime.jsx)(_index2.Skeleton,{width:16,height:16,radius:"sm",style:{marginLeft:i.spacing.sm}})]})})};AccordionSkeleton.displayName="AccordionSkeleton",Accordion.Skeleton=AccordionSkeleton,_reactNative.LayoutAnimation;const buildStyles=e=>_reactNative.StyleSheet.create({card:{paddingHorizontal:e.spacing.md,paddingVertical:e.components.accordion?.cardPaddingVertical??4,marginVertical:e.spacing.xs},header:{flexDirection:"row",alignItems:"center",paddingVertical:e.spacing.sm},iconLeft:{marginRight:e.spacing.sm},title:{flex:1},contentWrapper:{overflow:"hidden"},content:{paddingBottom:e.spacing.sm},measurer:{position:"absolute",opacity:0,left:0,right:0,top:0,zIndex:-1}});var _default=exports.default=Accordion;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.scaleAmount=exports.default=exports.AmountSlider=void 0;var _mobileCore=require("@webority/mobile-core"),_react=require("react"),_reactNative=require("react-native"),_index=require("../../hooks/index.js"),_index2=require("../../theme/index.js"),_index3=require("../Input/index.js"),_index4=require("../Slider/index.js"),_valueText=require("../Slider/valueText.js"),_jsxRuntime=require("react/jsx-runtime");const INDIAN_TIERS=[[1e7,"Crore"],[1e5,"Lakh"],[1e3,"Thousand"]],scaleAmount=(e,t)=>{if("indian"===t){const t=Math.abs(e);for(const[i,n]of INDIAN_TIERS)if(t>=i)return{amount:e/i,unit:n}}return{amount:e,unit:""}};exports.scaleAmount=scaleAmount;const formatAmount=(e,t)=>{const i=Math.round(100*e)/100;return t?String(i):(0,_mobileCore.formatCurrency)(Math.round(e),{stripSymbol:!0,maximumFractionDigits:0})},defaultFormatInput=e=>(0,_mobileCore.formatCurrency)(e,{maximumFractionDigits:0}),AmountSlider=exports.AmountSlider=(0,_react.forwardRef)((e,t)=>{const{min:i=0,max:n=100,step:r=1,disabled:a=!1,tone:o,size:u,variant:l="inset",prefix:s="₹",units:c="indian",formatInput:d=defaultFormatInput,animationDuration:m,haptic:x,accessibilityLabel:p,inputAccessibilityLabel:y="Amount",style:_,headerStyle:f,valueStyle:h,unitStyle:v,inputStyle:b,sliderStyle:S,testID:g}=e,j=(0,_index2.useTheme)(),I=(0,_react.useMemo)(()=>buildStyles(j),[j]),R=m??j.motion.duration.normal,[A,T]=(0,_index.useControllableState)({value:e.value,defaultValue:e.defaultValue??i,onChange:e.onChange}),C=(0,_valueText.clampValue)(A,i,n),D=(0,_valueText.useValueDraft)({value:C,min:i,max:n,step:r,format:d,onChange:T}),w=scaleAmount(C,c),N=""!==w.unit,q=(0,_react.useRef)(C),$=(0,_react.useRef)("up");C!==q.current&&($.current=C>q.current?"up":"down",q.current=C);const V=$.current,z=`${s}${formatAmount(w.amount,N)}${N?` ${w.unit}`:""}`;return(0,_jsxRuntime.jsxs)(_reactNative.View,{ref:t,style:[I.container,_],testID:g,children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[I.header,f],children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:I.valueRow,accessible:!0,accessibilityRole:"text",accessibilityLabel:z,children:[s?(0,_jsxRuntime.jsxs)(_reactNative.Text,{style:[I.value,h],children:[s," "]}):null,(0,_jsxRuntime.jsx)(_valueText.RollingText,{text:formatAmount(w.amount,N),direction:V,duration:R,style:[I.value,h],testID:g?`${g}-value`:void 0}),N?(0,_jsxRuntime.jsx)(_valueText.RollingText,{text:` ${w.unit}`,direction:V,duration:R,perCharacter:!1,style:[I.unit,v],testID:g?`${g}-unit`:void 0}):null]}),(0,_jsxRuntime.jsx)(_index3.Input,{size:"sm",value:D.text,onChangeText:D.onChangeText,onFocus:D.onFocus,onBlur:D.onBlur,onSubmitEditing:D.onBlur,keyboardType:"number-pad",returnKeyType:"done",disabled:a,accessibilityLabel:y,style:[I.input,b],testID:g?`${g}-input`:void 0})]}),(0,_jsxRuntime.jsx)(_index4.Slider,{value:C,onChange:T,min:i,max:n,step:r,disabled:a,tone:o,size:u,variant:l,haptic:x,accessibilityLabel:p,style:S,testID:g?`${g}-slider`:void 0})]})});AmountSlider.displayName="AmountSlider";const buildStyles=e=>_reactNative.StyleSheet.create({container:{width:"100%"},header:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:e.spacing.md},valueRow:{flexDirection:"row",alignItems:"baseline",flexShrink:1},value:{color:e.colors.text.primary,fontSize:e.typography.fontSize["3xl"],fontWeight:e.typography.fontWeight.bold,fontVariant:["tabular-nums"]},unit:{color:e.colors.text.primary,fontSize:e.typography.fontSize.lg,fontWeight:e.typography.fontWeight.semibold},input:{width:"45%",maxWidth:180}});var _default=exports.default=AmountSlider;
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.scaleAmount=exports.default=exports.AmountSlider=void 0;var _mobileCore=require("@webority/mobile-core"),_react=require("react"),_reactNative=require("react-native"),_index=require("../../hooks/index.js"),_index2=require("../../theme/index.js"),_index3=require("../Input/index.js"),_index4=require("../Slider/index.js"),_valueText=require("../Slider/valueText.js"),_jsxRuntime=require("react/jsx-runtime");const INDIAN_TIERS=[[1e7,"Crore"],[1e5,"Lakh"],[1e3,"Thousand"]],scaleAmount=(e,t)=>{if("indian"===t){const t=Math.abs(e);for(const[i,n]of INDIAN_TIERS)if(t>=i)return{amount:e/i,unit:n}}return{amount:e,unit:""}};exports.scaleAmount=scaleAmount;const formatAmount=(e,t)=>{const i=Math.round(100*e)/100;return t?String(i):(0,_mobileCore.formatCurrency)(Math.round(e),{currency:"INR",stripSymbol:!0,maximumFractionDigits:0})},defaultFormatInput=e=>(0,_mobileCore.formatCurrency)(e,{currency:"INR",maximumFractionDigits:0}),AmountSlider=exports.AmountSlider=(0,_react.forwardRef)((e,t)=>{const{min:i=0,max:n=100,step:r=1,disabled:a=!1,tone:o,size:u,variant:l="inset",prefix:s="₹",units:c="indian",formatInput:d=defaultFormatInput,animationDuration:m,haptic:x,accessibilityLabel:p,inputAccessibilityLabel:y="Amount",style:_,headerStyle:f,valueStyle:h,unitStyle:v,inputStyle:b,sliderStyle:S,testID:g}=e,j=(0,_index2.useTheme)(),I=(0,_react.useMemo)(()=>buildStyles(j),[j]),R=m??j.motion.duration.normal,[A,T]=(0,_index.useControllableState)({value:e.value,defaultValue:e.defaultValue??i,onChange:e.onChange}),C=(0,_valueText.clampValue)(A,i,n),D=(0,_valueText.useValueDraft)({value:C,min:i,max:n,step:r,format:d,onChange:T}),w=scaleAmount(C,c),N=""!==w.unit,q=(0,_react.useRef)(C),$=(0,_react.useRef)("up");C!==q.current&&($.current=C>q.current?"up":"down",q.current=C);const V=$.current,z=`${s}${formatAmount(w.amount,N)}${N?` ${w.unit}`:""}`;return(0,_jsxRuntime.jsxs)(_reactNative.View,{ref:t,style:[I.container,_],testID:g,children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[I.header,f],children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:I.valueRow,accessible:!0,accessibilityRole:"text",accessibilityLabel:z,children:[s?(0,_jsxRuntime.jsxs)(_reactNative.Text,{style:[I.value,h],children:[s," "]}):null,(0,_jsxRuntime.jsx)(_valueText.RollingText,{text:formatAmount(w.amount,N),direction:V,duration:R,style:[I.value,h],testID:g?`${g}-value`:void 0}),N?(0,_jsxRuntime.jsx)(_valueText.RollingText,{text:` ${w.unit}`,direction:V,duration:R,perCharacter:!1,style:[I.unit,v],testID:g?`${g}-unit`:void 0}):null]}),(0,_jsxRuntime.jsx)(_index3.Input,{size:"sm",value:D.text,onChangeText:D.onChangeText,onFocus:D.onFocus,onBlur:D.onBlur,onSubmitEditing:D.onBlur,keyboardType:"number-pad",returnKeyType:"done",disabled:a,accessibilityLabel:y,style:[I.input,b],testID:g?`${g}-input`:void 0})]}),(0,_jsxRuntime.jsx)(_index4.Slider,{value:C,onChange:T,min:i,max:n,step:r,disabled:a,tone:o,size:u,variant:l,haptic:x,accessibilityLabel:p,style:S,testID:g?`${g}-slider`:void 0})]})});AmountSlider.displayName="AmountSlider";const buildStyles=e=>_reactNative.StyleSheet.create({container:{width:"100%"},header:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:e.spacing.md},valueRow:{flexDirection:"row",alignItems:"baseline",flexShrink:1},value:{color:e.colors.text.primary,fontSize:e.typography.fontSize["3xl"],fontWeight:e.typography.fontWeight.bold,fontVariant:["tabular-nums"]},unit:{color:e.colors.text.primary,fontSize:e.typography.fontSize.lg,fontWeight:e.typography.fontWeight.semibold},input:{width:"45%",maxWidth:180}});var _default=exports.default=AmountSlider;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.AnimatePresence=void 0;var _reactNativeReanimated=_interopRequireWildcard(require("react-native-reanimated")),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.AnimatePresence=void 0;var _reactNativeReanimated=_interopRequireWildcard(require("react-native-reanimated")),_usePresenceMotion=require("../../hooks/usePresenceMotion.js"),_jsxRuntime=require("react/jsx-runtime");function _interopRequireWildcard(e,t){if("function"==typeof WeakMap)var a=new WeakMap,n=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?n:a){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 AnimatePresence=({children:e,preset:t="fade",duration:a,style:n,testID:r})=>{const i=(0,_usePresenceMotion.usePresenceMotion)();if(!(null!=e&&!1!==e))return null;const o=a??i.duration("normal");let d,u;if(i.reduced)d=_reactNativeReanimated.FadeIn.duration(o).reduceMotion(_usePresenceMotion.PRESENCE_REDUCE_MOTION),u=_reactNativeReanimated.FadeOut.duration(o).reduceMotion(_usePresenceMotion.PRESENCE_REDUCE_MOTION);else switch(t){case"scale":d=_reactNativeReanimated.ZoomIn.duration(o),u=_reactNativeReanimated.ZoomOut.duration(o);break;case"slide-up":d=_reactNativeReanimated.FadeInUp.duration(o),u=_reactNativeReanimated.FadeOutDown.duration(o);break;case"slide-down":d=_reactNativeReanimated.FadeInDown.duration(o),u=_reactNativeReanimated.FadeOutUp.duration(o);break;default:d=_reactNativeReanimated.FadeIn.duration(o),u=_reactNativeReanimated.FadeOut.duration(o)}return(0,_jsxRuntime.jsx)(_reactNativeReanimated.default.View,{entering:d,exiting:u,style:n,testID:r,children:e})};exports.AnimatePresence=AnimatePresence,AnimatePresence.displayName="AnimatePresence";var _default=exports.default=AnimatePresence;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.AppBar=void 0;var _react=require("react"),_reactNative=require("react-native"),_reactNativeSafeAreaContext=require("react-native-safe-area-context"),_usePressAnimation=require("../../hooks/usePressAnimation.js"),_index=require("../../theme/index.js"),_corners=require("../../utils/corners.js"),_hapticUtils=require("../../utils/hapticUtils.js"),_AppIcon=require("../AppIcon/AppIcon.js"),_Text=require("../Text/Text.js"),_jsxRuntime=require("react/jsx-runtime");const variantSize=(t,e)=>{switch(e){case"compact":return{height:44,titleSize:t.typography.fontSize.lg,titleWeight:"semibold",alignBottom:!1};case"large":return{height:96,titleSize:t.typography.fontSize["2xl"],titleWeight:"bold",alignBottom:!0};default:return{height:56,titleSize:t.typography.fontSize.lg,titleWeight:"semibold",alignBottom:!1}}},ActionButton=({action:t,side:e,badgeStyle:i,haptic:n,flush:a})=>{const o=(0,_index.useTheme)(),{
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.AppBar=void 0;var _react=require("react"),_reactNative=require("react-native"),_reactNativeSafeAreaContext=require("react-native-safe-area-context"),_usePressAnimation=require("../../hooks/usePressAnimation.js"),_index=require("../../theme/index.js"),_corners=require("../../utils/corners.js"),_hapticUtils=require("../../utils/hapticUtils.js"),_AppIcon=require("../AppIcon/AppIcon.js"),_Text=require("../Text/Text.js"),_jsxRuntime=require("react/jsx-runtime");const variantSize=(t,e)=>{switch(e){case"compact":return{height:44,titleSize:t.typography.fontSize.lg,titleWeight:"semibold",alignBottom:!1};case"large":return{height:96,titleSize:t.typography.fontSize["2xl"],titleWeight:"bold",alignBottom:!0};default:return{height:56,titleSize:t.typography.fontSize.lg,titleWeight:"semibold",alignBottom:!1}}},ActionButton=({action:t,side:e,badgeStyle:i,haptic:n,flush:a})=>{const o=(0,_index.useTheme)(),{style:r,pressIn:s,pressOut:l}=(0,_usePressAnimation.usePressAnimation)({enabled:!0}),c=(0,_react.useMemo)(()=>buildActionStyles(o),[o]),p=t.badge,d=void 0!==p&&0!==p,u=void 0!==t.text;return(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:r,children:(0,_jsxRuntime.jsxs)(_reactNative.Pressable,{onPress:()=>{const e=(0,_hapticUtils.resolveHaptic)(n,"selection");e&&(0,_hapticUtils.triggerHaptic)(e),t.onPress()},onPressIn:s,onPressOut:l,accessibilityRole:"button",accessibilityLabel:t.accessibilityLabel??t.text,testID:t.testID,android_ripple:{color:o.colors.surface.pressed,borderless:!u},style:({pressed:t})=>[u?c.textButton:c.actionButton,a?null:"left"===e?c.actionLeft:c.actionRight,t&&!u?c.actionPressed:null,t&&u?c.textPressed:null],children:[u?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:c.actionText,numberOfLines:1,children:t.text}):(0,_jsxRuntime.jsx)(_reactNative.View,{style:c.iconWrap,children:t.icon}),d?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[c.badge,i],pointerEvents:"none",children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:c.badgeText,numberOfLines:1,children:String(p)})}):null,t.dot?(0,_jsxRuntime.jsx)(_reactNative.View,{testID:t.testID?`${t.testID}-dot`:"appbar-action-dot",style:c.dot,pointerEvents:"none"}):null]})})},COLLAPSE_RANGE=60,LARGE_TITLE_SCALE_END=.71,AppBar=exports.AppBar=(0,_react.forwardRef)((t,e)=>{const{title:i,subtitle:n,titleAlignment:a="left",leftAction:o,rightActions:r,leading:s,trailing:l,onBack:c,gutter:p,titleVariant:d,titleOffset:u,height:g,divider:m,variant:h="default",transparent:x=!1,scrollY:f,style:_,containerStyle:y,titleStyle:b,subtitleStyle:j,badgeStyle:S,haptic:v,testID:B}=t,R=(0,_index.useTheme)(),A=(0,_reactNativeSafeAreaContext.useSafeAreaInsets)(),N=(0,_react.useMemo)(()=>variantSize(R,h),[R,h]),C=(0,_react.useMemo)(()=>buildStyles(R),[R]),z="large"===h&&void 0!==f,w=R.components.appBar?.iconSize??24,I=R.components.appBar?.actionButtonSize??44,T=o??(c?{icon:(0,_jsxRuntime.jsx)(_AppIcon.AppIcon,{name:"arrow-left",size:w,color:R.colors.text.primary}),onPress:c,accessibilityLabel:"Back"}:void 0),W=l?void 0:r?.[r.length-1],opticalInset=t=>void 0===t?0:void 0!==t.text?R.spacing.sm:Math.max((I-w)/2,0),L=void 0===p?null:{paddingLeft:Math.max(p-opticalInset(T),0),paddingRight:Math.max(p-opticalInset(W),0)},O=void 0!==u,P=Boolean(T)||Boolean(s),V=m??!x,H=R.components.appBar?.dividerWidth??_reactNative.StyleSheet.hairlineWidth,D=R.components.appBar?.collapseTranslateDistance??-20,E=(0,_react.useMemo)(()=>{if(!f)return null;const t={inputRange:[0,60],extrapolate:"clamp"};return{titleScale:f.interpolate({...t,outputRange:[1,.71]}),titleTranslateY:f.interpolate({...t,outputRange:[0,D]}),titleTranslateX:f.interpolate({...t,outputRange:"center"===a?[0,0]:[0,8]}),subtitleOpacity:f.interpolate({inputRange:[0,30],outputRange:[1,0],extrapolate:"clamp"}),barHeight:f.interpolate({...t,outputRange:[96,56]}),borderOpacity:f.interpolate({...t,outputRange:[0,1]})}},[f,a,D]),M=z&&E?{transform:[{translateX:E.titleTranslateX},{translateY:E.titleTranslateY},{scale:E.titleScale}]}:null,k=i?d?(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:M,children:(0,_jsxRuntime.jsx)(_Text.Text,{variant:d,align:"center"===a?"center":"left",accessibilityRole:"header",numberOfLines:1,style:[C.titleVariant,b],children:i})}):(0,_jsxRuntime.jsx)(_reactNative.Animated.Text,{accessibilityRole:"header",style:[C.title,{fontSize:N.titleSize,fontWeight:R.typography.fontWeight[N.titleWeight],textAlign:"center"===a?"center":"left"},M,b],numberOfLines:1,children:i}):null,q=n?(0,_jsxRuntime.jsx)(_reactNative.Animated.Text,{style:[C.subtitle,{textAlign:"center"===a?"center":"left"},z&&E?{opacity:E.subtitleOpacity}:null,j],numberOfLines:1,children:n}):null,U=(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[C.titleColumn,"center"===a?C.titleColumnCenter:null,N.alignBottom?C.titleColumnBottom:null],children:[k,q]}),Y=z?_reactNative.Animated.View:_reactNative.View,F=z&&E?{height:_reactNative.Animated.add(E.barHeight,new _reactNative.Animated.Value(A.top))}:{height:(g??N.height)+A.top};return(0,_jsxRuntime.jsxs)(Y,{ref:e,testID:B,style:[C.root,{paddingTop:A.top,backgroundColor:x?"transparent":R.colors.background.elevated},F,!z&&V?{borderBottomWidth:H,borderBottomColor:R.colors.border.primary}:null,_,y],children:[z&&E&&V?(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{pointerEvents:"none",style:[C.animatedBorder,{backgroundColor:R.colors.border.primary,opacity:E.borderOpacity}]}):null,(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[C.row,N.alignBottom?C.rowAlignBottom:null,L,{flex:1}],children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[C.sideSlot,O?C.sideSlotCompact:null],children:[T?(0,_jsxRuntime.jsx)(ActionButton,{action:T,side:"left",haptic:v,flush:O}):null,s]}),(0,_jsxRuntime.jsx)(_reactNative.View,{pointerEvents:"none",style:[C.center,"center"===a?C.centerAligned:C.centerLeft,O?{paddingLeft:P?u:0,paddingRight:0}:null],children:U}),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[C.sideSlot,C.sideSlotRight,O?C.sideSlotCompact:null],children:[r?.map((t,e)=>(0,_jsxRuntime.jsx)(ActionButton,{action:t,side:"right",badgeStyle:S,haptic:v,flush:O},`appbar-right-${e}`)),l]})]})]})});AppBar.displayName="AppBar";const buildStyles=t=>_reactNative.StyleSheet.create({root:{width:"100%"},row:{flexDirection:"row",alignItems:"center",paddingHorizontal:t.spacing.xs},rowAlignBottom:{alignItems:"flex-end",paddingBottom:t.spacing.sm},sideSlot:{flexDirection:"row",alignItems:"center",minWidth:t.components.appBar?.sideSlotMinWidth??48},sideSlotRight:{justifyContent:"flex-end"},sideSlotCompact:{minWidth:0},center:{flex:1,paddingHorizontal:t.spacing.xs},centerAligned:{alignItems:"center"},centerLeft:{alignItems:"flex-start"},titleColumn:{flexDirection:"column"},titleColumnCenter:{alignItems:"center"},titleColumnBottom:{justifyContent:"flex-end"},title:{color:t.colors.text.primary},titleVariant:{includeFontPadding:!1,textAlignVertical:"center"},subtitle:{marginTop:t.components.appBar?.subtitleMarginTop??2,color:t.colors.text.tertiary,fontSize:t.typography.fontSize.sm,fontWeight:t.typography.fontWeight.normal},animatedBorder:{position:"absolute",left:0,right:0,bottom:0,height:_reactNative.StyleSheet.hairlineWidth}}),buildActionStyles=t=>_reactNative.StyleSheet.create({actionButton:{width:t.components.appBar?.actionButtonSize??44,height:t.components.appBar?.actionButtonSize??44,borderRadius:t.radius.full,..._corners.smoothCorners,alignItems:"center",justifyContent:"center"},actionLeft:{marginRight:t.spacing.xs},actionRight:{marginLeft:t.spacing.xs},actionPressed:{backgroundColor:t.colors.surface.pressed},textButton:{minWidth:44,minHeight:44,paddingHorizontal:t.spacing.sm,alignItems:"center",justifyContent:"center"},textPressed:{opacity:.6},actionText:{color:t.colors.text.link,fontSize:t.typography.fontSize.base,...(0,_index.fontFor)(t,"semibold")},dot:{position:"absolute",top:t.components.appBar?.dotOffset??10,right:t.components.appBar?.dotOffset??10,width:t.components.appBar?.dotSize??8,height:t.components.appBar?.dotSize??8,borderRadius:t.radius.full,backgroundColor:t.colors.error},iconWrap:{alignItems:"center",justifyContent:"center"},badge:{position:"absolute",top:t.components.appBar?.badgeOffset??4,right:t.components.appBar?.badgeOffset??4,minWidth:t.components.appBar?.badgeMinWidth??16,height:t.components.appBar?.badgeHeight??16,paddingHorizontal:t.components.appBar?.badgePaddingHorizontal??4,borderRadius:t.radius.full,..._corners.smoothCorners,backgroundColor:t.colors.error,alignItems:"center",justifyContent:"center"},badgeText:{color:t.colors.onError,fontSize:t.components.appBar?.badgeFontSize??10,fontWeight:t.typography.fontWeight.semibold,lineHeight:t.components.appBar?.badgeLineHeight??12}});var _default=exports.default=AppBar;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.AsyncBlock=void 0;var _reactNative=require("react-native"),_index=require("../../theme/index.js"),_index2=require("../AppIcon/index.js"),_index3=require("../EmptyState/index.js"),_index4=require("../Spinner/index.js"),_jsxRuntime=require("react/jsx-runtime");const OFFLINE_HINT="Check your connection, then try again.",AsyncBlock=({loading:e=!1,error:t,errorVariant:i
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.AsyncBlock=void 0;var _mobileCore=require("@webority/mobile-core"),_react=require("react"),_reactNative=require("react-native"),_index=require("../../theme/index.js"),_index2=require("../AppIcon/index.js"),_index3=require("../EmptyState/index.js"),_index4=require("../Spinner/index.js"),_jsxRuntime=require("react/jsx-runtime");const OFFLINE_HINT="Check your connection, then try again.",isNode=e=>(0,_react.isValidElement)(e)||Array.isArray(e),AsyncBlock=({loading:e=!1,error:t,errorVariant:i,empty:r=!1,onRetry:n,skeleton:s,emptyTitle:o="Nothing here yet",emptyDescription:l,emptyIcon:c,errorTitle:a="That didn't load",offlineTitle:d="You're offline",retryLabel:x="Try again",children:u,style:_,testID:m})=>{const y=(0,_index.useTheme)();if(e)return(0,_jsxRuntime.jsx)(_reactNative.View,{style:_,testID:m,children:s??(0,_jsxRuntime.jsx)(_reactNative.View,{style:{paddingVertical:y.spacing["2xl"],alignItems:"center"},children:(0,_jsxRuntime.jsx)(_index4.Spinner,{})})});if(t){const e="string"==typeof t?t:null,r=null!==e||isNode(t)?null:(0,_mobileCore.extractApiError)(t),s="offline"===(i??(r?.code===_mobileCore.OFFLINE_CODE?"offline":"default")),o=e??r?.message??(s?OFFLINE_HINT:void 0);return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:_,testID:m,children:[(0,_jsxRuntime.jsx)(_index3.EmptyState,{icon:s?(0,_jsxRuntime.jsx)(_index2.AppIcon,{name:"cloud-cross",size:"xl",color:y.colors.text.tertiary,testID:"async-block-offline-icon"}):void 0,title:s?d:a,description:o,action:n?{label:x,onPress:n}:void 0}),isNode(t)?t:null]})}return r?(0,_jsxRuntime.jsx)(_reactNative.View,{style:_,testID:m,children:(0,_jsxRuntime.jsx)(_index3.EmptyState,{icon:c,title:o,description:l})}):(0,_jsxRuntime.jsx)(_jsxRuntime.Fragment,{children:u})};exports.AsyncBlock=AsyncBlock;var _default=exports.default=AsyncBlock;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.Banner=void 0;var _react=require("react"),_reactNative=require("react-native"),_index=require("../../theme/index.js"),_corners=require("../../utils/corners.js"),_hapticUtils=require("../../utils/hapticUtils.js"),_index2=require("../Skeleton/index.js"),_jsxRuntime=require("react/jsx-runtime");const Banner=exports.Banner=(0,_react.forwardRef)((e,t)=>{const{title:n,message:r,variant:i="info",icon:o,actions:s,dismissible:a=!1,onDismiss:c,haptic:l,visible:d=!0,animateMount:u=!0,loading:
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.Banner=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"),_hapticUtils=require("../../utils/hapticUtils.js"),_index2=require("../Skeleton/index.js"),_jsxRuntime=require("react/jsx-runtime");const Banner=exports.Banner=(0,_react.forwardRef)((e,t)=>{const{title:n,message:r,variant:i="info",icon:o,actions:s,dismissible:a=!1,onDismiss:c,haptic:l,visible:d=!0,animateMount:u=!0,loading:p=!1,accessibilityRole:m="alert",accessibilityLabel:g,style:x,containerStyle:h,iconCircleStyle:y,tintBarStyle:_,closeButtonStyle:b,actionButtonStyle:j,testID:f}=e,R=(0,_index.useTheme)(),v=(0,_usePresenceMotion.usePresenceMotion)(),w=(0,_react.useMemo)(()=>buildStyles(R),[R]),S=(0,_react.useMemo)(()=>tintFor(R,i),[R,i]),[B,N]=v.range(-20,0),k=(0,_react.useRef)((0,_index.createAnimatedValue)(u&&d?B:0)).current,C=(0,_react.useRef)((0,_index.createAnimatedValue)(u&&d?0:d?1:0)).current,[V,T]=(0,_react.useState)(d),z=(0,_react.useRef)(!0);if((0,_react.useEffect)(()=>{if(z.current&&(z.current=!1,!u))return;let e;return d?(T(!0),e=_reactNative.Animated.parallel([_reactNative.Animated.timing(k,{toValue:N,duration:R.motion.duration.normal,useNativeDriver:!0}),_reactNative.Animated.timing(C,{toValue:1,duration:v.duration("normal"),useNativeDriver:!0})]),e.start()):V&&(e=_reactNative.Animated.parallel([_reactNative.Animated.timing(k,{toValue:B,duration:R.motion.duration.fast,useNativeDriver:!0}),_reactNative.Animated.timing(C,{toValue:0,duration:v.duration("fast"),useNativeDriver:!0})]),e.start(()=>{T(!1)})),()=>e?.stop()},[d]),!V)return null;const P=n??" ",H="string"==typeof r?r??" ":"",W="alert"===m?"error"===i?"assertive":"polite":"none",D=(0,_jsxRuntime.jsxs)(_reactNative.Animated.View,{ref:t,accessibilityRole:m,accessibilityLiveRegion:W,accessibilityLabel:g,testID:f,style:[w.container,{backgroundColor:R.colors.background.secondary,borderRadius:R.radius.md,..._corners.smoothCorners,padding:R.spacing.md,opacity:C,transform:[{translateY:k}]},x,h],children:[(R.components.banner?.tintBarWidth??0)>0?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[w.tintBar,{backgroundColor:S.bar},_]}):null,(0,_jsxRuntime.jsxs)(_reactNative.View,{style:w.row,children:[!1===o?null:o?(0,_jsxRuntime.jsx)(_reactNative.View,{style:w.iconWrap,children:o}):(0,_jsxRuntime.jsx)(_reactNative.View,{style:[w.iconCircle,{backgroundColor:S.bar+"22"},y],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[w.iconGlyph,{color:S.ink}],accessible:!1,children:S.glyph})}),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:w.textBlock,children:[n||p?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:{color:R.colors.text.primary,fontSize:R.typography.fontSize.base,...(0,_index.fontFor)(R,"semibold"),lineHeight:20},numberOfLines:2,children:P}):null,"string"==typeof r||p?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:{color:R.colors.text.secondary,fontSize:R.typography.fontSize.sm,...(0,_index.fontFor)(R,"normal"),lineHeight:18,marginTop:n?2:0},children:H||" "}):(0,_jsxRuntime.jsx)(_reactNative.View,{style:{marginTop:n?2:0},children:r})]}),a?(0,_jsxRuntime.jsx)(_reactNative.Pressable,{accessibilityRole:"button",accessibilityLabel:"Dismiss banner",onPress:()=>{const e=(0,_hapticUtils.resolveHaptic)(l,"selection");e&&(0,_hapticUtils.triggerHaptic)(e),c?.()},hitSlop:8,style:({pressed:e})=>[w.closeBtn,{backgroundColor:e?R.colors.surface.pressed:"transparent"},b],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:{color:R.colors.text.secondary,fontSize:R.components.banner?.closeGlyphFontSize??18,fontWeight:R.typography.fontWeight.bold,lineHeight:18},accessible:!1,children:"×"})}):null]}),s&&s.length>0?(0,_jsxRuntime.jsx)(_reactNative.View,{style:w.actionsRow,children:s.map((e,t)=>{const n=e.tone??"primary",r=e.variant??"ghost",i="danger"===n?R.colors.error:"neutral"===n?R.colors.text.secondary:S.glyphColor,o="danger"===n?R.colors.toneText.error:"neutral"===n?R.colors.text.secondary:S.ink,s="danger"===n?R.colors.onError:"neutral"===n?R.colors.onNeutral:S.on,a="solid"===r;return(0,_jsxRuntime.jsx)(_reactNative.Pressable,{accessibilityRole:"button",accessibilityLabel:e.label,onPress:()=>{const t=(0,_hapticUtils.resolveHaptic)(l,"selection");t&&(0,_hapticUtils.triggerHaptic)(t),e.onPress()},style:({pressed:t})=>[w.actionBtn,"md"===e.size&&w.actionBtnMd,"outline"===r&&{borderWidth:1,borderColor:o},{backgroundColor:a?i:t?R.colors.surface.pressed:"transparent",opacity:a&&t?.85:1},j],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:{color:a?s:o,fontSize:R.typography.fontSize.sm,textAlign:"center",...(0,_index.fontFor)(R,"semibold")},children:e.label})},`${e.label}-${t}`)})}):null]});return p?(0,_jsxRuntime.jsx)(BannerSkeleton,{...e}):D});Banner.displayName="Banner";const BannerSkeleton=({title:e,actions:t,icon:n,containerStyle:r,style:i})=>{const o=(0,_index.useTheme)(),s=!1!==n;return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[{flexDirection:"row",alignItems:"flex-start",backgroundColor:o.colors.background.elevated,borderRadius:o.radius.md,..._corners.smoothCorners,padding:o.spacing.md,borderWidth:1,borderColor:o.colors.border.primary},r,i],accessibilityRole:"progressbar",accessibilityState:{busy:!0},"aria-busy":!0,children:[s?(0,_jsxRuntime.jsx)(_reactNative.View,{style:{marginRight:o.spacing.sm},children:(0,_jsxRuntime.jsx)(_index2.Skeleton,{shape:"circle",width:32,height:32})}):null,(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{flex:1},children:[void 0!==e?(0,_jsxRuntime.jsx)(_index2.Skeleton,{shape:"text",width:"55%",height:16,style:{marginBottom:o.spacing.xs}}):null,(0,_jsxRuntime.jsx)(_index2.SkeletonText,{lines:2,fontSize:13,lastLineWidth:"70%"}),t&&t.length>0?(0,_jsxRuntime.jsx)(_reactNative.View,{style:{flexDirection:"row",marginTop:o.spacing.sm},children:t.map((e,t)=>(0,_jsxRuntime.jsx)(_index2.Skeleton,{width:72,height:28,shape:"rounded",style:{marginRight:o.spacing.sm}},`sk-banner-action-${t}`))}):null]})]})};BannerSkeleton.displayName="BannerSkeleton",Banner.Skeleton=BannerSkeleton;const tintFor=(e,t)=>{switch(t){case"success":return{bar:e.colors.success,glyphColor:e.colors.success,ink:e.colors.toneText.success,on:e.colors.onSuccess,glyph:"✓"};case"warning":return{bar:e.colors.warning,glyphColor:e.colors.warning,ink:e.colors.toneText.warning,on:e.colors.onWarning,glyph:"⚠"};case"error":return{bar:e.colors.error,glyphColor:e.colors.error,ink:e.colors.toneText.error,on:e.colors.onError,glyph:"✗"};case"neutral":return{bar:e.colors.text.tertiary,glyphColor:e.colors.text.secondary,ink:e.colors.text.secondary,on:e.colors.onNeutral,glyph:"i"};default:return{bar:e.colors.primary,glyphColor:e.colors.primary,ink:e.colors.toneText.primary,on:e.colors.onPrimary,glyph:"i"}}},buildStyles=e=>{const t=e.components.banner?.iconCircleSize??28,n=e.components.banner?.closeButtonSize??28;return _reactNative.StyleSheet.create({container:{overflow:"hidden",paddingLeft:e.components.banner?.containerPaddingLeft??e.spacing.md},tintBar:{position:"absolute",left:0,top:0,bottom:0,width:e.components.banner?.tintBarWidth??0},row:{flexDirection:"row",alignItems:"flex-start"},iconWrap:{marginRight:e.components.banner?.iconGap??e.spacing.sm},iconCircle:{width:t,height:t,borderRadius:e.components.banner?.iconCircleRadius??t/2,..._corners.smoothCorners,alignItems:"center",justifyContent:"center",marginRight:e.components.banner?.iconGap??e.spacing.sm},iconGlyph:{fontSize:e.components.banner?.iconGlyphFontSize??15,fontWeight:"700",lineHeight:e.components.banner?.iconGlyphLineHeight??17},textBlock:{flex:1,paddingRight:e.components.banner?.textBlockPaddingRight??e.spacing.xs},closeBtn:{width:n,height:n,borderRadius:e.components.banner?.closeButtonRadius??n/2,..._corners.smoothCorners,alignItems:"center",justifyContent:"center",marginLeft:e.components.banner?.closeButtonMarginLeft??e.spacing.xxs??4},actionsRow:{flexDirection:"row",flexWrap:"wrap",justifyContent:"flex-end",marginTop:e.components.banner?.actionsRowMarginTop??e.spacing.xs,columnGap:e.components.banner?.actionsRowGap??e.spacing.xs,rowGap:e.components.banner?.actionsRowGap??e.spacing.xs},actionBtn:{paddingHorizontal:e.components.banner?.actionButtonPaddingHorizontal??e.spacing.sm,paddingVertical:e.components.banner?.actionButtonPaddingVertical??6,borderRadius:e.components.banner?.actionButtonRadius??e.radius.sm,..._corners.smoothCorners,maxWidth:"100%",alignItems:"center",justifyContent:"center"},actionBtnMd:{minHeight:44,paddingHorizontal:e.spacing.md}})};var _default=exports.default=Banner;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.useBottomSheet=exports.default=exports.BottomSheet=void 0;var _react=require("react"),_reactNative=require("react-native"),_reactNativeGestureHandler=require("react-native-gesture-handler"),_reactNativeKeyboardController=require("react-native-keyboard-controller"),_reactNativeReanimated=_interopRequireWildcard(require("react-native-reanimated")),_reactNativeSafeAreaContext=require("react-native-safe-area-context"),_index=require("../../theme/index.js"),_index2=require("../../utils/index.js"),_corners=require("../../utils/corners.js"),_ModalSafeArea=require("../ModalSafeArea/ModalSafeArea.js"),_ToastProvider=require("../Toast/ToastProvider.js"),_jsxRuntime=require("react/jsx-runtime");function _interopRequireWildcard(e,t){if("function"==typeof WeakMap)var a=new WeakMap,r=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?r:a){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 TABLET_MIN_SHORT_SIDE=600,DIALOG_MAX_WIDTH=560,BottomSheetContext=(0,_react.createContext)(null),useBottomSheet=()=>{const e=(0,_react.useContext)(BottomSheetContext);if(!e)throw new Error("useBottomSheet must be used inside a <BottomSheet>.");return e};exports.useBottomSheet=useBottomSheet;const SPRING_CONFIG={damping:20,stiffness:240,mass:1},CLOSE_VELOCITY_THRESHOLD=1e3,DRAG_ACTIVATION_OFFSET=10,BottomSheet=exports.BottomSheet=(0,_react.forwardRef)((e,t)=>{const{snapPoints:a,index:r,onChange:n,onAnimate:o,onAfterClose:s,enablePanDownToClose:i=!0,enableBackdropPress:l=!0,confirmDismiss:c,scrollable:u=!1,scrollRef:d,onScroll:_,onContentSizeChange:h,onScrollLayout:m,scrollEventThrottle:v,keyboardBehavior:f="shift",mode:b="modal",presentation:p="sheet",handleIndicatorStyle:S,containerStyle:x,header:R,footer:g,headerStyle:y,footerStyle:N,children:w,accessibilityLabel:C,accessibilityViewIsModal:j,testID:k}=e,M=(0,_index.useTheme)(),I=(0,_reactNativeSafeAreaContext.useSafeAreaInsets)(),[O,T]=(0,_react.useState)(()=>_reactNative.Dimensions.get("window").height),[H,B]=(0,_react.useState)(()=>_reactNative.Dimensions.get("window").width),P=(0,_react.useCallback)(e=>{const{height:t,width:a}=e.nativeEvent.layout;t>0&&T(e=>e===t?e:t),a>0&&B(e=>e===a?e:a)},[]),A=(0,_reactNative.useWindowDimensions)(),D="dialog"===p||"auto"===p&&Math.min(A.width,A.height)>=600,G=Math.min(560,H-2*M.spacing.xl),[V,q]=(0,_ModalSafeArea.useModalInsets)(),E="modal"===b?V.top:I.top,L="modal"===b?V.bottom:I.bottom,F=a.includes("content"),[W,J]=useMeasuredHeight(),[z,Y]=useMeasuredHeight(),[$,K,X]=useMeasuredHeight(),[U,Q]=useMeasuredHeight(),Z=D?M.spacing.md:W,ee=F?Math.min(Z+(null!=R?z:0)+$+(null!=g?U:0)+L,O-E):0,te=(0,_react.useCallback)((e,t)=>{F&&X(t),h?.(e,t)},[F,h,X]),ae=(0,_react.useMemo)(()=>resolveSnapPoints(a,O,ee),[a,O,ee]),re=O,ne=ae[ae.length-1]??0,oe=(0,_reactNativeReanimated.useSharedValue)(re),se=(0,_reactNativeReanimated.useSharedValue)(re),ie=(0,_reactNativeReanimated.useSharedValue)(-1),[le,ce]=(0,_react.useState)(-1),ue=(0,_react.useRef)(!1),[de,he]=(0,_react.useState)(!1),[me,ve]=(0,_react.useState)(!1),fe=(0,_react.useRef)(!1),be=(0,_react.useRef)(s);be.current=s;const[pe,Se]=(0,_react.useState)(!1),xe=(0,_react.useRef)(-1),Re=(0,_react.useRef)(!1);Re.current="modal"===b?me:pe;const ge=(0,_react.useRef)(c);ge.current=c;const ye=(0,_react.useRef)(!1),Ne=(0,_react.useRef)(!0),we=(0,_react.useRef)([]),Ce=(0,_react.useCallback)(e=>{const t=we.current;we.current=[];for(const a of t)a(e)},[]);(0,_react.useEffect)(()=>(Ne.current=!0,()=>{Ne.current=!1,Ce(!1)}),[Ce]);const je=(0,_react.useCallback)(e=>{if(e<0||e>=ae.length)return re;const t=ae[e];return D?(O-t)/2:O-t},[ae,O,re,D]),ke=(0,_react.useCallback)(e=>{xe.current=e;le!==e&&(ce(e),ie.value=e,n?.(e))},[le,ie,n]),Me=(0,_react.useCallback)(()=>{ue.current=!1,ie.value<0&&(fe.current=!0,"modal"===b?(he(!1),"ios"!==_reactNative.Platform.OS&&ve(!1)):Se(!1))},[b,ie]),Ie=(0,_react.useCallback)(()=>{fe.current&&ve(!1)},[]);(0,_react.useEffect)(()=>{("modal"===b?!me:!pe)&&fe.current&&(fe.current=!1,be.current?.(),Ce(!0))},[b,me,pe,Ce]);const Oe=(0,_react.useCallback)((e,t,a)=>{ue.current=!0,o?.(t,a),oe.value=(0,_reactNativeReanimated.withSpring)(e,SPRING_CONFIG,e=>{"worklet";e&&(0,_reactNativeReanimated.runOnJS)(Me)()})},[o,oe,Me]),Te=(0,_react.useCallback)(e=>{const t="number"==typeof e?clamp(e,0,ae.length-1):le>=0?le:0,a=ie.value,r=je(t);fe.current=!1,Ce(!1),"modal"===b?(ve(!0),he(!0)):Se(!0),a<0&&(oe.value=re),ke(t),Oe(r,a,t)},[Oe,re,le,ie,b,ae.length,ke,Ce,oe,je]),He=(0,_react.useCallback)(()=>{if(0===ae.length)return;const e=ie.value,t=je(0);ke(0),Oe(t,e,0)},[Oe,ie,ae.length,ke,je]),Be=(0,_react.useCallback)(()=>new Promise(e=>{if(xe.current<0)return void(Re.current?we.current.push(e):e(!0));we.current.push(e);const t=ie.value;ke(-1),ue.current=!0,o?.(t,-1),oe.value=(0,_reactNativeReanimated.withTiming)(re,{duration:M.motion.duration.fast,easing:_reactNativeReanimated.Easing.bezier(...M.motion.easing.accelerate)},e=>{"worklet";e&&(0,_reactNativeReanimated.runOnJS)(Me)()})}),[re,ie,Me,o,ke,oe,M.motion.duration.fast,M.motion.easing.accelerate]),Pe=(0,_react.useCallback)(async()=>{await Be()},[Be]),Ae=(0,_react.useCallback)((e,t,a)=>{const r=ge.current;if(!r)return void e();if(ye.current)return void t?.();const n=r();"boolean"!=typeof n?(ye.current=!0,a?.(),n.then(a=>{ye.current=!1,a&&Ne.current&&xe.current>=0?e():t?.()},e=>{throw ye.current=!1,e})):(n?e:t)?.()},[]),De=(0,_react.useCallback)(()=>new Promise(e=>{xe.current<0?Be().then(e):Ae(()=>{Be().then(e)},()=>e(!1))}),[Be,Ae]),Ge=(0,_react.useCallback)(()=>{Ae(()=>{Pe()})},[Pe,Ae]);(0,_react.useImperativeHandle)(t,()=>({expand:Te,collapse:He,close:Pe,requestClose:De}),[Te,He,Pe,De]),(0,_react.useEffect)(()=>{"number"==typeof r&&r!==le&&(-1===r?Pe():Te(r))},[r]);const Ve=(0,_react.useRef)({hostHeight:O,contentSnap:ee});(0,_react.useEffect)(()=>{const e=Ve.current;e.hostHeight===O&&e.contentSnap===ee||(Ve.current={hostHeight:O,contentSnap:ee},e.hostHeight===O&&ie.value<0||(oe.value=(0,_reactNativeReanimated.withSpring)(je(ie.value),SPRING_CONFIG)))},[O,ee]);const qe=O-ne,Ee=(0,_react.useMemo)(()=>ae.map(e=>O-e),[ae,O]),Le=(0,_react.useCallback)(()=>{const e=xe.current;e<0||Oe(je(e),e,e)},[Oe,je]),Fe=(0,_react.useCallback)((e,t)=>{const a=ie.value;-1!==e?(ke(e),Oe(t,a,e)):Ae(()=>{(0,_index2.triggerHaptic)("selection"),Pe()},Le,Le)},[Oe,Pe,ie,Ae,ke,Le]),We=(0,_react.useMemo)(()=>_reactNativeGestureHandler.Gesture.Native().withTestId(k?`${k}-content-gesture`:"bottom-sheet-content-gesture"),[k]),Je=(0,_react.useMemo)(()=>{const e=Ee,t=re,a=qe,r=i;return _reactNativeGestureHandler.Gesture.Pan().withTestId(k?`${k}-pan-gesture`:"bottom-sheet-pan-gesture").activeOffsetY([-10,10]).failOffsetX([-15,15]).onStart(()=>{"worklet";se.value=oe.value}).onUpdate(e=>{"worklet";const t=se.value+e.translationY;oe.value=t<a?a+.25*(t-a):t}).onEnd(a=>{"worklet";const n=oe.value;if(a.velocityY>1e3)return r?void(0,_reactNativeReanimated.runOnJS)(Fe)(-1,t):void(0,_reactNativeReanimated.runOnJS)(Fe)(0,e[0]);let o=0,s=Math.abs(n-e[0]);for(let t=1;t<e.length;t++){const a=Math.abs(n-e[t]);a<s&&(s=a,o=t)}const i=e[0];r&&n-i>80?(0,_reactNativeReanimated.runOnJS)(Fe)(-1,t):(0,_reactNativeReanimated.runOnJS)(Fe)(o,e[o])})},[re,se,i,Fe,qe,Ee,k,oe]),{height:ze}=(0,_reactNativeKeyboardController.useReanimatedKeyboardAnimation)(),Ye="shift"===f,$e=(0,_reactNativeReanimated.useDerivedValue)(()=>Ye?ze.value:0),Ke=ae[le>=0?le:0]??ne,Xe=M.spacing.md,Ue=(0,_reactNativeReanimated.useAnimatedStyle)(()=>{if(D){const e=$e.value,t=O+e-Ke-Xe,a=e<0&&oe.value>t?t:oe.value;return{top:a<E?E:a}}const e=oe.value+$e.value,t=$e.value<0?E:qe;return{top:e<t?t:e}}),Qe=(0,_reactNativeReanimated.useAnimatedStyle)(()=>{const e=$e.value;if(D){const t=O+e-Ke-Xe,a=e<0&&oe.value>t?t:oe.value,r=O+e-Xe-(a<E?E:a);return{height:r<0?0:r>Ke?Ke:r}}const t=e<0?E:qe,a=oe.value+e,r=O+e-(a<t?t:a);return{height:r<0?0:r>ne?ne:r}}),Ze=le>=0,et=(0,_react.useMemo)(()=>buildStyles(M),[M]),tt=(0,_react.useCallback)(()=>{l&&Ae(()=>{(0,_index2.triggerHaptic)("selection"),Pe()})},[l,Pe,Ae]),at=(0,_react.useMemo)(()=>_reactNativeGestureHandler.Gesture.Tap().withTestId(k?`${k}-backdrop-gesture`:"bottom-sheet-backdrop-gesture").maxDuration(250).onEnd((_e,e)=>{"worklet";e&&(0,_reactNativeReanimated.runOnJS)(tt)()}),[tt,k]),rt=(0,_react.useMemo)(()=>({snapIndex:le,snapPoints:ae,expand:Te,collapse:He,close:Pe,requestClose:De}),[le,ae,Te,He,Pe,De]);if("inline"===b&&!pe)return null;if("modal"===b&&!me)return null;const nt=(0,_jsxRuntime.jsxs)(_reactNative.View,{collapsable:!1,style:["modal"===b?et.backdropModal:et.backdropInline,{backgroundColor:M.colors.background.overlay}],onLayout:P,testID:k,accessibilityViewIsModal:j??Ze,children:[(0,_jsxRuntime.jsx)(_reactNativeGestureHandler.GestureDetector,{gesture:at,children:(0,_jsxRuntime.jsx)(_reactNativeReanimated.default.View,{style:_reactNative.StyleSheet.absoluteFill,accessibilityRole:"button",accessibilityLabel:"Close bottom sheet"})}),(0,_jsxRuntime.jsx)(_reactNativeReanimated.default.View,{accessibilityRole:"alert",accessibilityLabel:C,accessibilityViewIsModal:j??Ze,style:[et.sheet,{height:ne,backgroundColor:M.colors.background.elevated,borderTopLeftRadius:M.radius["2xl"],borderTopRightRadius:M.radius["2xl"],..._corners.smoothCorners,...M.shadows.xl},D?{height:Ke,left:(H-G)/2,right:void 0,width:G,borderBottomLeftRadius:M.radius["2xl"],borderBottomRightRadius:M.radius["2xl"]}:null,x,Ue],children:(0,_jsxRuntime.jsxs)(SheetBody,{style:[et.body,Qe],keyboardOffset:$e,children:[D?(0,_jsxRuntime.jsx)(_reactNative.View,{style:{height:M.spacing.md}}):(0,_jsxRuntime.jsx)(_reactNativeGestureHandler.GestureDetector,{gesture:Je,children:(0,_jsxRuntime.jsx)(_reactNative.View,{style:et.handleRow,onLayout:F?J:void 0,accessible:!0,accessibilityLabel:"Drag handle",accessibilityHint:"Drag up or down to resize the sheet, or swipe down to close it",testID:k?`${k}-handle`:"bottom-sheet-handle",children:(0,_jsxRuntime.jsx)(_reactNative.View,{style:[et.handle,{backgroundColor:M.components.bottomSheet?.handleColor??M.colors.border.primary},S]})})}),null!=R&&(0,_jsxRuntime.jsx)(_reactNative.View,{style:[et.header,y],onLayout:F?Y:void 0,children:R}),u?(0,_jsxRuntime.jsx)(_reactNativeGestureHandler.GestureDetector,{gesture:We,children:(0,_jsxRuntime.jsx)(_reactNative.ScrollView,{ref:d,style:et.scrollContent,onScroll:_,onContentSizeChange:te,onLayout:m,scrollEventThrottle:v,keyboardShouldPersistTaps:"always",keyboardDismissMode:"none",children:w})}):(0,_jsxRuntime.jsx)(_reactNative.View,{style:et.content,children:F?(0,_jsxRuntime.jsx)(_reactNative.View,{onLayout:K,children:w}):w}),null!=g&&(0,_jsxRuntime.jsx)(_reactNative.View,{style:[et.footer,N],onLayout:F?Q:void 0,children:g})]})})]}),ot=(0,_jsxRuntime.jsx)(BottomSheetContext.Provider,{value:rt,children:nt});return"modal"===b?(0,_jsxRuntime.jsx)(_reactNative.Modal,{transparent:!0,visible:de,onRequestClose:Ge,onDismiss:"ios"===_reactNative.Platform.OS?Ie:void 0,statusBarTranslucent:!0,navigationBarTranslucent:!0,animationType:"none",supportedOrientations:["portrait","landscape"],children:(0,_jsxRuntime.jsxs)(_ModalSafeArea.ModalSafeArea,{onInsets:q,children:["android"===_reactNative.Platform.OS?(0,_jsxRuntime.jsx)(_reactNativeGestureHandler.GestureHandlerRootView,{style:et.modalRoot,children:ot}):ot,(0,_jsxRuntime.jsx)(_ToastProvider.ToastHost,{})]})}):ot}),SheetBody=({style:e,keyboardOffset:t,children:a})=>{const r=(0,_reactNativeSafeAreaContext.useSafeAreaInsets)().bottom,n=(0,_reactNativeReanimated.useAnimatedStyle)(()=>{const e=r+t.value;return{paddingBottom:e>0?e:0}});return(0,_jsxRuntime.jsx)(_reactNativeReanimated.default.View,{style:[e,n],children:a})};BottomSheet.displayName="BottomSheet";const useMeasuredHeight=()=>{const[e,t]=(0,_react.useState)(0),a=(0,_react.useCallback)(e=>{t(t=>t===e?t:e)},[]);return[e,(0,_react.useCallback)(e=>a(e.nativeEvent.layout.height),[a]),a]},resolveSnapPoints=(e,t,a)=>[...e.map(e=>{if("number"==typeof e)return e;if("content"===e)return a;const r=parseFloat(e);return Number.isNaN(r)?0:r/100*t})].sort((e,t)=>e-t),clamp=(e,t,a)=>Math.min(Math.max(e,t),a),buildStyles=e=>_reactNative.StyleSheet.create({backdropModal:{flex:1},backdropInline:{..._reactNative.StyleSheet.absoluteFill},sheet:{position:"absolute",left:0,right:0,overflow:"hidden"},body:{overflow:"hidden"},handleRow:{alignItems:"center",justifyContent:"center",alignSelf:"stretch",paddingTop:12,paddingBottom:24},header:{},footer:{},handle:{width:36,height:4,borderRadius:2,..._corners.smoothCorners},content:{flex:1,overflow:"hidden"},scrollContent:{flex:1},modalRoot:{flex:1}});var _default=exports.default=BottomSheet;
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.useBottomSheet=exports.default=exports.BottomSheet=void 0;var _react=require("react"),_reactNative=require("react-native"),_reactNativeGestureHandler=require("react-native-gesture-handler"),_reactNativeKeyboardController=require("react-native-keyboard-controller"),_reactNativeReanimated=_interopRequireWildcard(require("react-native-reanimated")),_reactNativeSafeAreaContext=require("react-native-safe-area-context"),_usePresenceMotion=require("../../hooks/usePresenceMotion.js"),_index=require("../../theme/index.js"),_index2=require("../../utils/index.js"),_corners=require("../../utils/corners.js"),_ModalSafeArea=require("../ModalSafeArea/ModalSafeArea.js"),_ToastProvider=require("../Toast/ToastProvider.js"),_jsxRuntime=require("react/jsx-runtime");function _interopRequireWildcard(e,t){if("function"==typeof WeakMap)var a=new WeakMap,r=new WeakMap;return(_interopRequireWildcard=function(e,t){if(!t&&e&&e.__esModule)return e;var n,o,i={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return i;if(n=t?r:a){if(n.has(e))return n.get(e);n.set(e,i)}for(const t in e)"default"!==t&&{}.hasOwnProperty.call(e,t)&&((o=(n=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,t))&&(o.get||o.set)?n(i,t,o):i[t]=e[t]);return i})(e,t)}const TABLET_MIN_SHORT_SIDE=600,DIALOG_MAX_WIDTH=560,BottomSheetContext=(0,_react.createContext)(null),useBottomSheet=()=>{const e=(0,_react.useContext)(BottomSheetContext);if(!e)throw new Error("useBottomSheet must be used inside a <BottomSheet>.");return e};exports.useBottomSheet=useBottomSheet;const SPRING_CONFIG={damping:20,stiffness:240,mass:1},CLOSE_VELOCITY_THRESHOLD=1e3,DRAG_ACTIVATION_OFFSET=10,BottomSheet=exports.BottomSheet=(0,_react.forwardRef)((e,t)=>{const{snapPoints:a,index:r,onChange:n,onAnimate:o,onAfterClose:i,enablePanDownToClose:s=!0,enableBackdropPress:c=!0,confirmDismiss:l,scrollable:u=!1,scrollRef:d,onScroll:_,onContentSizeChange:h,onScrollLayout:m,scrollEventThrottle:v,keyboardBehavior:f="shift",mode:b="modal",presentation:p="sheet",handleIndicatorStyle:S,containerStyle:R,header:g,footer:x,headerStyle:y,footerStyle:N,children:w,accessibilityLabel:C,accessibilityViewIsModal:j,testID:M}=e,k=(0,_index.useTheme)(),I=(0,_usePresenceMotion.usePresenceMotion)(),O=(0,_reactNativeSafeAreaContext.useSafeAreaInsets)(),[T,P]=(0,_react.useState)(()=>_reactNative.Dimensions.get("window").height),[E,A]=(0,_react.useState)(()=>_reactNative.Dimensions.get("window").width),H=(0,_react.useCallback)(e=>{const{height:t,width:a}=e.nativeEvent.layout;t>0&&P(e=>e===t?e:t),a>0&&A(e=>e===a?e:a)},[]),B=(0,_reactNative.useWindowDimensions)(),D="dialog"===p||"auto"===p&&Math.min(B.width,B.height)>=600,G=Math.min(560,E-2*k.spacing.xl),[V,q]=(0,_ModalSafeArea.useModalInsets)(),L="modal"===b?V.top:O.top,F="modal"===b?V.bottom:O.bottom,W=a.includes("content"),[J,z]=useMeasuredHeight(),[Y,$]=useMeasuredHeight(),[K,U,X]=useMeasuredHeight(),[Q,Z]=useMeasuredHeight(),ee=D?k.spacing.md:J,te=W?Math.min(ee+(null!=g?Y:0)+K+(null!=x?Q:0)+F,T-L):0,ae=(0,_react.useCallback)((e,t)=>{W&&X(t),h?.(e,t)},[W,h,X]),re=(0,_react.useMemo)(()=>resolveSnapPoints(a,T,te),[a,T,te]),ne=T,oe=re[re.length-1]??0,ie=(0,_reactNativeReanimated.useSharedValue)(ne),se=(0,_reactNativeReanimated.useSharedValue)(ne),ce=(0,_reactNativeReanimated.useSharedValue)(1),le=(0,_reactNativeReanimated.useSharedValue)(-1),[ue,de]=(0,_react.useState)(-1),he=(0,_react.useRef)(!1),[me,ve]=(0,_react.useState)(!1),[fe,be]=(0,_react.useState)(!1),pe=(0,_react.useRef)(!1),Se=(0,_react.useRef)(i);Se.current=i;const[Re,ge]=(0,_react.useState)(!1),xe=(0,_react.useRef)(-1),ye=(0,_react.useRef)(!1);ye.current="modal"===b?fe:Re;const Ne=(0,_react.useRef)(l);Ne.current=l;const we=(0,_react.useRef)(!1),Ce=(0,_react.useRef)(!0),je=(0,_react.useRef)([]),Me=(0,_react.useCallback)(e=>{const t=je.current;je.current=[];for(const a of t)a(e)},[]);(0,_react.useEffect)(()=>(Ce.current=!0,()=>{Ce.current=!1,Me(!1)}),[Me]);const ke=(0,_react.useCallback)(e=>{if(e<0||e>=re.length)return ne;const t=re[e];return D?(T-t)/2:T-t},[re,T,ne,D]),Ie=(0,_react.useCallback)(e=>{xe.current=e;ue!==e&&(de(e),le.value=e,n?.(e))},[ue,le,n]),Oe=(0,_react.useCallback)(()=>{he.current=!1,le.value<0&&(pe.current=!0,"modal"===b?(ve(!1),"ios"!==_reactNative.Platform.OS&&be(!1)):ge(!1))},[b,le]),Te=(0,_react.useCallback)(()=>{pe.current&&be(!1)},[]);(0,_react.useEffect)(()=>{("modal"===b?!fe:!Re)&&pe.current&&(pe.current=!1,Se.current?.(),Me(!0))},[b,fe,Re,Me]);const Pe=(0,_react.useCallback)((e,t,a)=>{he.current=!0,o?.(t,a),ie.value=(0,_reactNativeReanimated.withSpring)(e,SPRING_CONFIG,e=>{"worklet";e&&(0,_reactNativeReanimated.runOnJS)(Oe)()})},[o,ie,Oe]),Ee=(0,_react.useCallback)(e=>{const t="number"==typeof e?clamp(e,0,re.length-1):ue>=0?ue:0,a=le.value,r=ke(t);if(pe.current=!1,Me(!1),"modal"===b?(be(!0),ve(!0)):ge(!0),a<0&&I.reduced)return ie.value=r,ce.value=0,ce.value=(0,_reactNativeReanimated.withTiming)(1,{duration:I.duration("fast"),easing:_reactNativeReanimated.Easing.bezier(...k.motion.easing.decelerate),reduceMotion:_usePresenceMotion.PRESENCE_REDUCE_MOTION}),Ie(t),void o?.(a,t);a<0&&(ie.value=ne,ce.value=1),Ie(t),Pe(r,a,t)},[Pe,ne,ue,le,b,o,I,ce,re.length,Ie,Me,k.motion.easing.decelerate,ie,ke]),Ae=(0,_react.useCallback)(()=>{if(0===re.length)return;const e=le.value,t=ke(0);Ie(0),Pe(t,e,0)},[Pe,le,re.length,Ie,ke]),He=(0,_react.useCallback)(()=>new Promise(e=>{if(xe.current<0)return void(ye.current?je.current.push(e):e(!0));je.current.push(e);const t=le.value;Ie(-1),he.current=!0,o?.(t,-1);const a=I.reduced?ce:ie,r=I.reduced?0:ne;a.value=(0,_reactNativeReanimated.withTiming)(r,{duration:I.duration("fast"),easing:_reactNativeReanimated.Easing.bezier(...k.motion.easing.accelerate),reduceMotion:_usePresenceMotion.PRESENCE_REDUCE_MOTION},e=>{"worklet";e&&(0,_reactNativeReanimated.runOnJS)(Oe)()})}),[ne,le,Oe,o,I,ce,Ie,ie,k.motion.easing.accelerate]),Be=(0,_react.useCallback)(async()=>{await He()},[He]),De=(0,_react.useCallback)((e,t,a)=>{const r=Ne.current;if(!r)return void e();if(we.current)return void t?.();const n=r();"boolean"!=typeof n?(we.current=!0,a?.(),n.then(a=>{we.current=!1,a&&Ce.current&&xe.current>=0?e():t?.()},e=>{throw we.current=!1,e})):(n?e:t)?.()},[]),Ge=(0,_react.useCallback)(()=>new Promise(e=>{xe.current<0?He().then(e):De(()=>{He().then(e)},()=>e(!1))}),[He,De]),Ve=(0,_react.useCallback)(()=>{c&&Ge()},[c,Ge]);(0,_react.useImperativeHandle)(t,()=>({expand:Ee,collapse:Ae,close:Be,requestClose:Ge}),[Ee,Ae,Be,Ge]),(0,_react.useEffect)(()=>{"number"==typeof r&&r!==ue&&(-1===r?Be():Ee(r))},[r]);const qe=(0,_react.useRef)({hostHeight:T,contentSnap:te});(0,_react.useEffect)(()=>{const e=qe.current;e.hostHeight===T&&e.contentSnap===te||(qe.current={hostHeight:T,contentSnap:te},e.hostHeight===T&&le.value<0||(ie.value=(0,_reactNativeReanimated.withSpring)(ke(le.value),SPRING_CONFIG)))},[T,te]);const Le=T-oe,Fe=(0,_react.useMemo)(()=>re.map(e=>T-e),[re,T]),We=(0,_react.useCallback)(()=>{const e=xe.current;e<0||Pe(ke(e),e,e)},[Pe,ke]),Je=(0,_react.useCallback)((e,t)=>{const a=le.value;-1!==e?(Ie(e),Pe(t,a,e)):De(()=>{(0,_index2.triggerHaptic)("selection"),Be()},We,We)},[Pe,Be,le,De,Ie,We]),ze=(0,_react.useMemo)(()=>_reactNativeGestureHandler.Gesture.Native().withTestId(M?`${M}-content-gesture`:"bottom-sheet-content-gesture"),[M]),Ye=(0,_react.useMemo)(()=>{const e=Fe,t=ne,a=Le,r=s;return _reactNativeGestureHandler.Gesture.Pan().withTestId(M?`${M}-pan-gesture`:"bottom-sheet-pan-gesture").activeOffsetY([-10,10]).failOffsetX([-15,15]).onStart(()=>{"worklet";se.value=ie.value}).onUpdate(e=>{"worklet";const t=se.value+e.translationY;ie.value=t<a?a+.25*(t-a):t}).onEnd(a=>{"worklet";const n=ie.value;if(a.velocityY>1e3)return r?void(0,_reactNativeReanimated.runOnJS)(Je)(-1,t):void(0,_reactNativeReanimated.runOnJS)(Je)(0,e[0]);let o=0,i=Math.abs(n-e[0]);for(let t=1;t<e.length;t++){const a=Math.abs(n-e[t]);a<i&&(i=a,o=t)}const s=e[0];r&&n-s>80?(0,_reactNativeReanimated.runOnJS)(Je)(-1,t):(0,_reactNativeReanimated.runOnJS)(Je)(o,e[o])})},[ne,se,s,Je,Le,Fe,M,ie]),{height:$e}=(0,_reactNativeKeyboardController.useReanimatedKeyboardAnimation)(),Ke="shift"===f,Ue=(0,_reactNativeReanimated.useDerivedValue)(()=>Ke?$e.value:0),Xe=re[ue>=0?ue:0]??oe,Qe=k.spacing.md,Ze=(0,_reactNativeReanimated.useAnimatedStyle)(()=>{if(D){const e=Ue.value,t=T+e-Xe-Qe,a=e<0&&ie.value>t?t:ie.value;return{top:a<L?L:a,opacity:ce.value}}const e=ie.value+Ue.value,t=Ue.value<0?L:Le;return{top:e<t?t:e,opacity:ce.value}}),et=(0,_reactNativeReanimated.useAnimatedStyle)(()=>{const e=Ue.value;if(D){const t=T+e-Xe-Qe,a=e<0&&ie.value>t?t:ie.value,r=T+e-Qe-(a<L?L:a);return{height:r<0?0:r>Xe?Xe:r}}const t=e<0?L:Le,a=ie.value+e,r=T+e-(a<t?t:a);return{height:r<0?0:r>oe?oe:r}}),tt=ue>=0,at=(0,_react.useMemo)(()=>buildStyles(k),[k]),rt=(0,_react.useCallback)(()=>{c&&De(()=>{(0,_index2.triggerHaptic)("selection"),Be()})},[c,Be,De]),nt=(0,_react.useMemo)(()=>_reactNativeGestureHandler.Gesture.Tap().withTestId(M?`${M}-backdrop-gesture`:"bottom-sheet-backdrop-gesture").maxDuration(250).onEnd((_e,e)=>{"worklet";e&&(0,_reactNativeReanimated.runOnJS)(rt)()}),[rt,M]),ot=(0,_react.useMemo)(()=>({snapIndex:ue,snapPoints:re,expand:Ee,collapse:Ae,close:Be,requestClose:Ge}),[ue,re,Ee,Ae,Be,Ge]);if("inline"===b&&!Re)return null;if("modal"===b&&!fe)return null;const it=(0,_jsxRuntime.jsxs)(_reactNative.View,{collapsable:!1,style:["modal"===b?at.backdropModal:at.backdropInline,{backgroundColor:k.colors.background.overlay}],onLayout:H,testID:M,accessibilityViewIsModal:j??tt,children:[(0,_jsxRuntime.jsx)(_reactNativeGestureHandler.GestureDetector,{gesture:nt,children:(0,_jsxRuntime.jsx)(_reactNativeReanimated.default.View,{style:_reactNative.StyleSheet.absoluteFill,accessibilityRole:"button",accessibilityLabel:"Close bottom sheet"})}),(0,_jsxRuntime.jsx)(_reactNativeReanimated.default.View,{accessibilityRole:"alert",accessibilityLabel:C,accessibilityViewIsModal:j??tt,accessibilityActions:[{name:"escape",label:"Close bottom sheet"}],onAccessibilityAction:e=>{"escape"===e.nativeEvent.actionName&&Ve()},onAccessibilityEscape:Ve,style:[at.sheet,{height:oe,backgroundColor:k.colors.background.elevated,borderTopLeftRadius:k.radius["2xl"],borderTopRightRadius:k.radius["2xl"],..._corners.smoothCorners,...k.shadows.xl},D?{height:Xe,left:(E-G)/2,right:void 0,width:G,borderBottomLeftRadius:k.radius["2xl"],borderBottomRightRadius:k.radius["2xl"]}:null,R,Ze],children:(0,_jsxRuntime.jsxs)(SheetBody,{style:[at.body,et],keyboardOffset:Ue,children:[D?(0,_jsxRuntime.jsx)(_reactNative.View,{style:{height:k.spacing.md}}):(0,_jsxRuntime.jsx)(_reactNativeGestureHandler.GestureDetector,{gesture:Ye,children:(0,_jsxRuntime.jsx)(_reactNative.View,{style:at.handleRow,onLayout:W?z:void 0,accessible:!0,accessibilityLabel:"Drag handle",accessibilityHint:"Drag up or down to resize the sheet, or swipe down to close it",testID:M?`${M}-handle`:"bottom-sheet-handle",children:(0,_jsxRuntime.jsx)(_reactNative.View,{style:[at.handle,{backgroundColor:k.components.bottomSheet?.handleColor??k.colors.border.primary},S]})})}),null!=g&&(0,_jsxRuntime.jsx)(_reactNative.View,{style:[at.header,y],onLayout:W?$:void 0,children:g}),u?(0,_jsxRuntime.jsx)(_reactNativeGestureHandler.GestureDetector,{gesture:ze,children:(0,_jsxRuntime.jsx)(_reactNative.ScrollView,{ref:d,style:at.scrollContent,onScroll:_,onContentSizeChange:ae,onLayout:m,scrollEventThrottle:v,keyboardShouldPersistTaps:"always",keyboardDismissMode:"none",children:w})}):(0,_jsxRuntime.jsx)(_reactNative.View,{style:W?[at.content,{overflow:"visible"}]:at.content,children:W?(0,_jsxRuntime.jsx)(_reactNative.View,{onLayout:U,children:w}):w}),null!=x&&(0,_jsxRuntime.jsx)(_reactNative.View,{style:[at.footer,N],onLayout:W?Z:void 0,children:x})]})})]}),st=(0,_jsxRuntime.jsx)(BottomSheetContext.Provider,{value:ot,children:it});return"modal"===b?(0,_jsxRuntime.jsx)(_reactNative.Modal,{transparent:!0,visible:me,onRequestClose:Ve,onDismiss:"ios"===_reactNative.Platform.OS?Te:void 0,statusBarTranslucent:!0,navigationBarTranslucent:!0,animationType:"none",supportedOrientations:["portrait","landscape"],children:(0,_jsxRuntime.jsxs)(_ModalSafeArea.ModalSafeArea,{onInsets:q,children:["android"===_reactNative.Platform.OS?(0,_jsxRuntime.jsx)(_reactNativeGestureHandler.GestureHandlerRootView,{style:at.modalRoot,children:st}):st,(0,_jsxRuntime.jsx)(_ToastProvider.ToastHost,{})]})}):st}),SheetBody=({style:e,keyboardOffset:t,children:a})=>{const r=(0,_reactNativeSafeAreaContext.useSafeAreaInsets)().bottom,n=(0,_reactNativeReanimated.useAnimatedStyle)(()=>{const e=r+t.value;return{paddingBottom:e>0?e:0}});return(0,_jsxRuntime.jsx)(_reactNativeReanimated.default.View,{style:[e,n],children:a})};BottomSheet.displayName="BottomSheet";const useMeasuredHeight=()=>{const[e,t]=(0,_react.useState)(0),a=(0,_react.useCallback)(e=>{t(t=>t===e?t:e)},[]);return[e,(0,_react.useCallback)(e=>a(e.nativeEvent.layout.height),[a]),a]},resolveSnapPoints=(e,t,a)=>[...e.map(e=>{if("number"==typeof e)return e;if("content"===e)return a;const r=parseFloat(e);return Number.isNaN(r)?0:r/100*t})].sort((e,t)=>e-t),clamp=(e,t,a)=>Math.min(Math.max(e,t),a),buildStyles=e=>_reactNative.StyleSheet.create({backdropModal:{flex:1},backdropInline:{..._reactNative.StyleSheet.absoluteFill},sheet:{position:"absolute",left:0,right:0,overflow:"hidden"},body:{overflow:"hidden"},handleRow:{alignItems:"center",justifyContent:"center",alignSelf:"stretch",paddingTop:12,paddingBottom:24},header:{},footer:{},handle:{width:36,height:4,borderRadius:2,..._corners.smoothCorners},content:{flex:1,overflow:"hidden"},scrollContent:{flex:1},modalRoot:{flex:1}});var _default=exports.default=BottomSheet;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.Button=void 0;var _react=_interopRequireWildcard(require("react")),_reactNative=require("react-native"),_useFlickGuard=require("../../hooks/useFlickGuard.js"),_usePressAnimation=require("../../hooks/usePressAnimation.js"),_index=require("../../theme/index.js"),_animatedValue=require("../../theme/animatedValue.js"),_ariaState=require("../../utils/ariaState.js"),_color=require("../../utils/color.js"),_corners=require("../../utils/corners.js"),_hapticUtils=require("../../utils/hapticUtils.js"),_slotIcon=require("../AppIcon/slotIcon.js"),_index2=require("../Spinner/index.js"),_SquircleFill=require("../SquircleFill/SquircleFill.js"),_jsxRuntime=require("react/jsx-runtime");function _interopRequireWildcard(e,r){if("function"==typeof WeakMap)var t=new WeakMap,o=new WeakMap;return(_interopRequireWildcard=function(e,r){if(!r&&e&&e.__esModule)return e;var i,s,n={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return n;if(i=r?o:t){if(i.has(e))return i.get(e);i.set(e,n)}for(const r in e)"default"!==r&&{}.hasOwnProperty.call(e,r)&&((s=(i=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,r))&&(s.get||s.set)?i(n,r,s):n[r]=e[r]);return n})(e,r)}const Button=exports.Button=(0,_react.forwardRef)((e,r)=>{const{title:t,children:o,variant:i="solid",tone:s="primary",size:n="md",loading:a=!1,disabled:l=!1,fullWidth:d=!1,leftIcon:c,rightIcon:u,iconVariant:b,leftIconBadge:g=!1,haptic:p="selection",rounded:_=!1,gradient:f,style:h,textStyle:m,pressAnimation:x,onPress:y,accessibilityLabel:S,accessibilityHint:j,accessibilityState:v,testID:R,onLayout:C,...k}=e;if(__DEV__&&hasTextChild(o))throw new Error('[@webority/mobile-ui] Button was given its label as text children. Pass it as `title` (<Button title="Save" />): text children draw a blank button with no accessible name.');const I=(0,_index.useTheme)(),w=!l&&!a,z={...v,disabled:!w,busy:a},T="link"===i,F=x??(!T&&"scale"),N=(0,_usePressAnimation.usePressAnimation)({preset:F||"scale",enabled:!1!==F&&w}),q=(0,_useFlickGuard.useFlickGuard)(),W=(0,_react.useMemo)(()=>buildStyles(I),[I]),V={...sizeMap[n],...I.components.button?.[n]??{}},H=(0,_react.useMemo)(()=>toneFor(I,s),[I,s]),P=(0,_react.useMemo)(()=>variantFor(I,i,H,l),[I,i,H,l]),A=(0,_react.useMemo)(()=>!f||l||"solid"!==i?null:"string"==typeof f?I.gradients[f]??null:f,[f,l,i,I.gradients]),L=_reactNative.StyleSheet.flatten(h)?.borderRadius,O=T?0:"number"==typeof L?L:_?I.radius.full:V.borderRadius,E=(0,_SquircleFill.useSquircle)(!A&&"link"!==i,O,C),B=(0,_react.useRef)((0,_animatedValue.createAnimatedValue)(0)).current,[D,M]=(0,_react.useState)(0),G=T?e=>M(e.nativeEvent.layout.width):void 0,U=S??t,K="outline"===i||"ghost"===i,X=!K&&!T,Y={color:P.textColor,size:V.iconSize,disabled:l},J=g&&!T&&Boolean(c),Q=V.minHeight-2*BADGE_INSET-2*P.borderWidth,Z={color:P.badgeInk,size:V.badgeIconSize??V.iconSize,disabled:l},$=(0,_jsxRuntime.jsx)(_reactNative.View,{style:W.contentRow,children:a?(0,_jsxRuntime.jsx)(_index2.Spinner,{variant:"circular",size:"sm",color:P.textColor,accessibilityLabel:"Loading"}):(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[J?(0,_jsxRuntime.jsx)(_reactNative.View,{testID:"button-icon-badge",style:[W.iconLeft,W.iconBadge,{width:Q,height:Q,borderRadius:Q/2,backgroundColor:P.badgeFill}],children:(0,_slotIcon.renderSlotIcon)(c,Z,b)}):c?(0,_jsxRuntime.jsx)(_reactNative.View,{style:W.iconLeft,children:(0,_slotIcon.renderSlotIcon)(c,Y,b)}):null,t?(0,_jsxRuntime.jsxs)(_reactNative.View,{onLayout:G,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[W.label,{color:P.textColor,fontSize:V.fontSize,...(0,_index.fontFor)(I,"semibold")},m],numberOfLines:1,children:t}),T?(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{pointerEvents:"none",testID:"button-link-underline",style:[W.linkUnderline,{backgroundColor:P.textColor,transform:[{translateX:B.interpolate({inputRange:[0,1],outputRange:[-D/2,0]})},{scaleX:B.interpolate({inputRange:[0,1],outputRange:[0,1]})}]}]}):null]}):o,u?(0,_jsxRuntime.jsx)(_reactNative.View,{style:W.iconRight,children:(0,_slotIcon.renderSlotIcon)(u,Y,b)}):null]})});return(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:[N.style,d?W.fullWidth:null],children:(0,_jsxRuntime.jsx)(_reactNative.Pressable,{ref:r,onPress:e=>{w&&!q.isFlick(e)&&(N.press(),!1!==p&&(0,_hapticUtils.triggerHaptic)(p),y?.(e))},onPressIn:e=>{q.onPressIn(e),N.pressIn(),T&&w&&(B.stopAnimation(),B.setValue(0),_reactNative.Animated.timing(B,{toValue:1,duration:I.motion.duration.slower,easing:_reactNative.Easing.bezier(...I.motion.easing.decelerate),useNativeDriver:!0}).start())},onPressOut:()=>{N.pressOut()},disabled:!w,hitSlop:T?LINK_HIT_SLOP:void 0,accessibilityRole:"button",accessibilityLabel:U,accessibilityHint:j,accessibilityState:z,...(0,_ariaState.ariaFromState)(z),testID:R,onLayout:E.onLayout,style:({pressed:e})=>[W.base,{paddingHorizontal:T?0:V.paddingHorizontal,paddingVertical:T?0:J?BADGE_INSET:V.paddingVertical,paddingLeft:J?BADGE_INSET:void 0,minHeight:T?void 0:V.minHeight,borderRadius:O,..._corners.smoothCorners,backgroundColor:A||E.active?"transparent":P.backgroundColor,borderWidth:P.borderWidth,borderColor:E.active?"transparent":P.borderColor,opacity:a?.55:1,overflow:E.active||T?"visible":"hidden"},e&&K&&!E.active?{backgroundColor:I.colors.surface.pressed}:null,d?W.fullWidth:null,h],...k,"aria-disabled":!w,"aria-busy":a,children:({pressed:e})=>(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[E.active&&E.size?(0,_jsxRuntime.jsx)(_SquircleFill.SquircleFill,{width:E.size.width,height:E.size.height,radius:O,fill:e&&K?I.colors.surface.pressed:P.backgroundColor,stroke:P.borderColor,strokeWidth:P.borderWidth,outset:P.borderWidth}):null,A?(0,_jsxRuntime.jsx)(_index.Gradient,{gradient:A,style:[_reactNative.StyleSheet.absoluteFill,{borderRadius:O,..._corners.smoothCorners}]}):null,e&&X?E.active&&E.size?(0,_jsxRuntime.jsx)(_SquircleFill.SquircleFill,{width:E.size.width,height:E.size.height,radius:O,fill:P.pressedTint,outset:P.borderWidth,testID:"button-pressed"}):(0,_jsxRuntime.jsx)(_reactNative.View,{pointerEvents:"none",style:[W.pressedOverlay,{borderRadius:O,backgroundColor:P.pressedTint,..._corners.smoothCorners}],testID:"button-pressed"}):null,$]})})})});Button.displayName="Button";const hasTextChild=e=>_react.default.Children.toArray(e).some(e=>"string"==typeof e||"number"==typeof e),sizeMap={xs:{paddingHorizontal:10,paddingVertical:4,minHeight:28,fontSize:12,borderRadius:8,iconSize:14,badgeIconSize:11},sm:{paddingHorizontal:12,paddingVertical:6,minHeight:34,fontSize:14,borderRadius:10,iconSize:16},md:{paddingHorizontal:16,paddingVertical:9,minHeight:42,fontSize:16,borderRadius:12,iconSize:18},lg:{paddingHorizontal:20,paddingVertical:12,minHeight:50,fontSize:18,borderRadius:14,iconSize:20},xl:{paddingHorizontal:24,paddingVertical:14,minHeight:58,fontSize:20,borderRadius:16,iconSize:22}},SOFT_FILL_OPACITY=.14,toneFor=(e,r)=>{switch(r){case"primary":return{base:e.colors.primary,on:e.colors.onPrimary,fg:e.colors.toneText.primary,soft:(0,_color.tintOf)(e.colors.primary,.14,e.colors.primaryMuted)};case"secondary":return{base:e.colors.secondary,on:e.colors.onSecondary,fg:e.colors.onSecondary,soft:e.colors.secondary};case"success":return{base:e.colors.success,on:e.colors.onSuccess,fg:e.colors.toneText.success,soft:(0,_color.tintOf)(e.colors.success,.14,e.colors.background.secondary)};case"warning":return{base:e.colors.warning,on:e.colors.onWarning,fg:e.colors.toneText.warning,soft:(0,_color.tintOf)(e.colors.warning,.14,e.colors.background.secondary)};case"error":return{base:e.colors.error,on:e.colors.onError,fg:e.colors.toneText.error,soft:(0,_color.tintOf)(e.colors.error,.14,e.colors.background.secondary)};default:return{base:e.colors.background.tertiary,on:e.colors.text.primary,fg:e.colors.text.primary,soft:e.colors.background.secondary}}},BADGE_INSET=4,BUTTON_BORDER_WIDTH=1,LINK_HIT_SLOP={top:8,bottom:8,left:8,right:8},variantFor=(e,r,t,o)=>{const i=o?e.colors.text.disabled:t.fg,s={badgeFill:e.colors.surface.disabled,badgeInk:e.colors.text.disabled},n=o?s:{badgeFill:t.on,badgeInk:t.base},a=o?s:{badgeFill:t.base,badgeInk:t.on};switch(r){case"solid":return{backgroundColor:o?e.colors.surface.disabled:t.base,borderColor:"transparent",borderWidth:1,textColor:o?e.colors.text.disabled:t.on,pressedTint:e.colors.surface.pressed,...n};case"soft":return{backgroundColor:o?e.colors.surface.disabled:t.soft,borderColor:"transparent",borderWidth:1,textColor:i,pressedTint:e.colors.surface.pressed,...a};case"outline":return{backgroundColor:"transparent",borderColor:o?e.colors.border.primary:t.base,borderWidth:1,textColor:i,pressedTint:e.colors.surface.pressed,...a};case"ghost":return{backgroundColor:"transparent",borderColor:"transparent",borderWidth:1,textColor:i,pressedTint:e.colors.surface.pressed,...a};case"link":return{backgroundColor:"transparent",borderColor:"transparent",borderWidth:0,textColor:o?e.colors.text.disabled:e.colors.text.link,pressedTint:e.colors.surface.pressed,...a};case"glass":return{backgroundColor:e.colors.glass.fill,borderColor:e.colors.glass.border,borderWidth:1,textColor:o?e.colors.text.disabled:e.colors.glass.on,pressedTint:_color.ACCENT_PRESSED_TINT,badgeFill:e.colors.glass.badge,badgeInk:o?e.colors.text.disabled:t.base};default:return{backgroundColor:t.base,borderColor:"transparent",borderWidth:1,textColor:t.on,pressedTint:e.colors.surface.pressed,...n}}},buildStyles=e=>_reactNative.StyleSheet.create({pressedOverlay:{position:"absolute",top:0,right:0,bottom:0,left:0},base:{alignItems:"center",justifyContent:"center",flexDirection:"row",overflow:"hidden"},contentRow:{flexDirection:"row",alignItems:"center",justifyContent:"center"},label:{textAlign:"center",includeFontPadding:!1,textAlignVertical:"center"},linkUnderline:{height:1.5,marginTop:1},iconLeft:{marginRight:8},iconBadge:{alignItems:"center",justifyContent:"center"},iconRight:{marginLeft:8},fullWidth:{alignSelf:"stretch"}});var _default=exports.default=Button;
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.Button=void 0;var _react=_interopRequireWildcard(require("react")),_reactNative=require("react-native"),_useFlickGuard=require("../../hooks/useFlickGuard.js"),_usePressAnimation=require("../../hooks/usePressAnimation.js"),_index=require("../../theme/index.js"),_animatedValue=require("../../theme/animatedValue.js"),_ariaState=require("../../utils/ariaState.js"),_color=require("../../utils/color.js"),_corners=require("../../utils/corners.js"),_hapticUtils=require("../../utils/hapticUtils.js"),_slotIcon=require("../AppIcon/slotIcon.js"),_index2=require("../Spinner/index.js"),_SquircleFill=require("../SquircleFill/SquircleFill.js"),_jsxRuntime=require("react/jsx-runtime");function _interopRequireWildcard(e,r){if("function"==typeof WeakMap)var t=new WeakMap,o=new WeakMap;return(_interopRequireWildcard=function(e,r){if(!r&&e&&e.__esModule)return e;var i,s,n={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return n;if(i=r?o:t){if(i.has(e))return i.get(e);i.set(e,n)}for(const r in e)"default"!==r&&{}.hasOwnProperty.call(e,r)&&((s=(i=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,r))&&(s.get||s.set)?i(n,r,s):n[r]=e[r]);return n})(e,r)}const Button=exports.Button=(0,_react.forwardRef)((e,r)=>{const{title:t,children:o,variant:i="solid",tone:s="primary",size:n="md",loading:a=!1,disabled:l=!1,fullWidth:c=!1,leftIcon:d,rightIcon:u,iconVariant:b,leftIconBadge:g=!1,haptic:p,rounded:_=!1,gradient:h,style:f,containerStyle:m,textStyle:x,pressAnimation:y,onPress:S,accessibilityLabel:j,accessibilityHint:v,accessibilityState:I,testID:C,onLayout:R,...k}=e;if(__DEV__&&hasTextChild(o))throw new Error('[@webority/mobile-ui] Button was given its label as text children. Pass it as `title` (<Button title="Save" />): text children draw a blank button with no accessible name.');const w=(0,_index.useTheme)(),T=!l&&!a,z={...I,disabled:!T,busy:a},F="link"===i,N=y??(!F&&"scale"),q=(0,_usePressAnimation.usePressAnimation)({preset:N||"scale",enabled:!1!==N&&T}),H=(0,_useFlickGuard.useFlickGuard)(),L=(0,_react.useMemo)(()=>buildStyles(w),[w]),W={...sizeMap[n],...w.components.button?.[n]??{}},O=(0,_react.useMemo)(()=>toneFor(w,s),[w,s]),P=(0,_react.useMemo)(()=>variantFor(w,i,O,l),[w,i,O,l]),V=(0,_react.useMemo)(()=>!h||l||"solid"!==i?null:"string"==typeof h?w.gradients[h]??null:h,[h,l,i,w.gradients]),A=_reactNative.StyleSheet.flatten(f)?.borderRadius,E=F?0:"number"==typeof A?A:_?w.radius.full:W.borderRadius,B=(0,_SquircleFill.useSquircle)(!V&&"link"!==i,E,R),D=(0,_react.useRef)((0,_animatedValue.createAnimatedValue)(0)).current,[M,G]=(0,_react.useState)(0),[U,K]=(0,_react.useState)(null),X=F?e=>G(e.nativeEvent.layout.width):void 0,Y=j??t,J="outline"===i||"ghost"===i,Q=!J&&!F,Z={color:P.textColor,size:W.iconSize,disabled:l},$=g&&!F&&Boolean(d),ee=W.minHeight-2*BADGE_INSET-2*P.borderWidth,re={color:P.badgeInk,size:W.badgeIconSize??W.iconSize,disabled:l},te=a?(0,_jsxRuntime.jsx)(_index2.Spinner,{variant:"circular",size:"sm",color:$?P.badgeInk:P.textColor,accessibilityLabel:"Loading"}):d?(0,_slotIcon.renderSlotIcon)(d,$?re:Z,b):null,oe=(0,_jsxRuntime.jsxs)(_reactNative.View,{style:L.contentRow,children:[$?(0,_jsxRuntime.jsx)(_reactNative.View,{testID:"button-icon-badge",style:[L.iconLeft,L.iconBadge,{width:ee,height:ee,borderRadius:ee/2,backgroundColor:P.badgeFill}],children:te}):te?(0,_jsxRuntime.jsx)(_reactNative.View,{style:L.iconLeft,children:te}):null,t?(0,_jsxRuntime.jsxs)(_reactNative.View,{onLayout:X,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[L.label,{color:P.textColor,fontSize:W.fontSize,...(0,_index.fontFor)(w,"semibold")},x],numberOfLines:1,children:t}),F?(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{pointerEvents:"none",testID:"button-link-underline",style:[L.linkUnderline,{backgroundColor:P.textColor,transform:[{translateX:D.interpolate({inputRange:[0,1],outputRange:[-M/2,0]})},{scaleX:D.interpolate({inputRange:[0,1],outputRange:[0,1]})}]}]}):null]}):o,u?(0,_jsxRuntime.jsx)(_reactNative.View,{style:L.iconRight,children:(0,_slotIcon.renderSlotIcon)(u,Z,b)}):null]}),ie=F?null===U?LINK_HIT_SLOP:Math.max(LINK_HIT_SLOP,touchSlopFor(U)):touchSlopFor(W.minHeight),se={top:ie,bottom:ie,left:F?LINK_HIT_SLOP:0,right:F?LINK_HIT_SLOP:0};return(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:[q.style,c?L.fullWidth:null,m],children:(0,_jsxRuntime.jsx)(_reactNative.Pressable,{ref:r,onPress:e=>{T&&!H.isFlick(e)&&(q.press(),p&&(0,_hapticUtils.triggerHaptic)(p),S?.(e))},onPressIn:e=>{H.onPressIn(e),q.pressIn(),F&&T&&(D.stopAnimation(),D.setValue(0),_reactNative.Animated.timing(D,{toValue:1,duration:w.motion.duration.slower,easing:_reactNative.Easing.bezier(...w.motion.easing.decelerate),useNativeDriver:!0}).start())},onPressOut:()=>{q.pressOut()},disabled:!T,hitSlop:se,accessibilityRole:"button",accessibilityLabel:Y,accessibilityHint:v,accessibilityState:z,...(0,_ariaState.ariaFromState)(z),testID:C,onLayout:e=>{B.onLayout(e),F&&K(e.nativeEvent.layout.height)},style:({pressed:e})=>[L.base,{paddingHorizontal:F?0:W.paddingHorizontal,paddingVertical:F?0:$?BADGE_INSET:W.paddingVertical,paddingLeft:$?BADGE_INSET:void 0,minHeight:F?void 0:W.minHeight,borderRadius:E,..._corners.smoothCorners,backgroundColor:V||B.active?"transparent":P.backgroundColor,borderWidth:P.borderWidth,borderColor:B.active?"transparent":P.borderColor,opacity:a?.55:1,overflow:B.active||F?"visible":"hidden"},e&&J&&!B.active?{backgroundColor:w.colors.surface.pressed}:null,c?L.fullWidth:null,f],...k,"aria-disabled":!T,"aria-busy":a,children:({pressed:e})=>(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[B.active&&B.size?(0,_jsxRuntime.jsx)(_SquircleFill.SquircleFill,{width:B.size.width,height:B.size.height,radius:E,fill:e&&J?w.colors.surface.pressed:P.backgroundColor,stroke:P.borderColor,strokeWidth:P.borderWidth,outset:P.borderWidth}):null,V?(0,_jsxRuntime.jsx)(_index.Gradient,{gradient:V,style:[_reactNative.StyleSheet.absoluteFill,{borderRadius:E,..._corners.smoothCorners}]}):null,e&&Q?B.active&&B.size?(0,_jsxRuntime.jsx)(_SquircleFill.SquircleFill,{width:B.size.width,height:B.size.height,radius:E,fill:P.pressedTint,outset:P.borderWidth,testID:"button-pressed"}):(0,_jsxRuntime.jsx)(_reactNative.View,{pointerEvents:"none",style:[L.pressedOverlay,{borderRadius:E,backgroundColor:P.pressedTint,..._corners.smoothCorners}],testID:"button-pressed"}):null,oe]})})})});Button.displayName="Button";const hasTextChild=e=>_react.default.Children.toArray(e).some(e=>"string"==typeof e||"number"==typeof e),sizeMap={xs:{paddingHorizontal:10,paddingVertical:4,minHeight:28,fontSize:12,borderRadius:8,iconSize:14,badgeIconSize:11},sm:{paddingHorizontal:12,paddingVertical:6,minHeight:34,fontSize:14,borderRadius:10,iconSize:16},md:{paddingHorizontal:16,paddingVertical:9,minHeight:42,fontSize:16,borderRadius:12,iconSize:18},lg:{paddingHorizontal:20,paddingVertical:12,minHeight:50,fontSize:18,borderRadius:14,iconSize:20},xl:{paddingHorizontal:24,paddingVertical:14,minHeight:58,fontSize:20,borderRadius:16,iconSize:22}},SOFT_FILL_OPACITY=.14,toneFor=(e,r)=>{switch(r){case"primary":return{base:e.colors.primary,on:e.colors.onPrimary,fg:e.colors.toneText.primary,soft:(0,_color.tintOf)(e.colors.primary,.14,e.colors.primaryMuted)};case"secondary":return{base:e.colors.secondary,on:e.colors.onSecondary,fg:e.colors.onSecondary,soft:e.colors.secondary};case"success":return{base:e.colors.success,on:e.colors.onSuccess,fg:e.colors.toneText.success,soft:(0,_color.tintOf)(e.colors.success,.14,e.colors.background.secondary)};case"warning":return{base:e.colors.warning,on:e.colors.onWarning,fg:e.colors.toneText.warning,soft:(0,_color.tintOf)(e.colors.warning,.14,e.colors.background.secondary)};case"error":return{base:e.colors.error,on:e.colors.onError,fg:e.colors.toneText.error,soft:(0,_color.tintOf)(e.colors.error,.14,e.colors.background.secondary)};default:return{base:e.colors.background.tertiary,on:e.colors.text.primary,fg:e.colors.text.primary,soft:e.colors.background.secondary}}},BADGE_INSET=4,BUTTON_BORDER_WIDTH=1,MIN_TOUCH_TARGET=44,LINK_HIT_SLOP=8,touchSlopFor=e=>Math.max(0,Math.ceil((44-e)/2)),variantFor=(e,r,t,o)=>{const i=o?e.colors.text.disabled:t.fg,s={badgeFill:e.colors.surface.disabled,badgeInk:e.colors.text.disabled},n=o?s:{badgeFill:t.on,badgeInk:t.base},a=o?s:{badgeFill:t.base,badgeInk:t.on};switch(r){case"solid":return{backgroundColor:o?e.colors.surface.disabled:t.base,borderColor:"transparent",borderWidth:1,textColor:o?e.colors.text.disabled:t.on,pressedTint:e.colors.surface.pressed,...n};case"soft":return{backgroundColor:o?e.colors.surface.disabled:t.soft,borderColor:"transparent",borderWidth:1,textColor:i,pressedTint:e.colors.surface.pressed,...a};case"outline":return{backgroundColor:"transparent",borderColor:o?e.colors.border.primary:t.base,borderWidth:1,textColor:i,pressedTint:e.colors.surface.pressed,...a};case"ghost":return{backgroundColor:"transparent",borderColor:"transparent",borderWidth:1,textColor:i,pressedTint:e.colors.surface.pressed,...a};case"link":return{backgroundColor:"transparent",borderColor:"transparent",borderWidth:0,textColor:o?e.colors.text.disabled:e.colors.text.link,pressedTint:e.colors.surface.pressed,...a};case"glass":return{backgroundColor:e.colors.glass.fill,borderColor:e.colors.glass.border,borderWidth:1,textColor:o?e.colors.text.disabled:e.colors.glass.on,pressedTint:_color.ACCENT_PRESSED_TINT,badgeFill:e.colors.glass.badge,badgeInk:o?e.colors.text.disabled:t.base};default:return{backgroundColor:t.base,borderColor:"transparent",borderWidth:1,textColor:t.on,pressedTint:e.colors.surface.pressed,...n}}},buildStyles=e=>_reactNative.StyleSheet.create({pressedOverlay:{position:"absolute",top:0,right:0,bottom:0,left:0},base:{alignItems:"center",justifyContent:"center",flexDirection:"row",overflow:"hidden"},contentRow:{flexDirection:"row",alignItems:"center",justifyContent:"center"},label:{textAlign:"center",includeFontPadding:!1,textAlignVertical:"center"},linkUnderline:{height:1.5,marginTop:1},iconLeft:{marginRight:8},iconBadge:{alignItems:"center",justifyContent:"center"},iconRight:{marginLeft:8},fullWidth:{alignSelf:"stretch"}});var _default=exports.default=Button;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.Calendar=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"),_CalendarDay=require("./CalendarDay.js"),_calendarDates=require("./calendarDates.js"),_calendarStyles=require("./calendarStyles.js"),_jsxRuntime=require("react/jsx-runtime");const DEFAULT_TONE={holiday:"error",event:"primary",pending:"warning"},MAX_DOTS=3,DAY_TEXT_MAX_SCALE=1.5,toneColor=(e,t)=>{switch(t){case"success":return e.colors.success;case"warning":return e.colors.warning;case"error":return e.colors.error;case"info":return e.colors.info;case"primary":return e.colors.primary;default:return e.colors.text.secondary}},toneInk=(e,t)=>"neutral"===t?e.colors.text.secondary:e.colors.toneText[t],Calendar=exports.Calendar=(0,_react.forwardRef)((e,t)=>{const{mode:a="single",value:r,onChange:n,month:i,onMonthChange:s,minDate:l,maxDate:o,disabledDates:c,weekStartsOn:d=0,locale:u="en-IN",markedDates:_,strikeMarkedInRange:m=!1,cellSize:y,haptic:h,accessibilityLabel:x,style:
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.Calendar=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"),_CalendarDay=require("./CalendarDay.js"),_calendarDates=require("./calendarDates.js"),_calendarStyles=require("./calendarStyles.js"),_jsxRuntime=require("react/jsx-runtime");const DEFAULT_TONE={holiday:"error",event:"primary",pending:"warning"},MAX_DOTS=3,DAY_TEXT_MAX_SCALE=1.5,toneColor=(e,t)=>{switch(t){case"success":return e.colors.success;case"warning":return e.colors.warning;case"error":return e.colors.error;case"info":return e.colors.info;case"primary":return e.colors.primary;default:return e.colors.text.secondary}},toneInk=(e,t)=>"neutral"===t?e.colors.text.secondary:e.colors.toneText[t],Calendar=exports.Calendar=(0,_react.forwardRef)((e,t)=>{const{mode:a="single",value:r,onChange:n,month:i,onMonthChange:s,minDate:l,maxDate:o,disabledDates:c,weekStartsOn:d=0,locale:u="en-IN",markedDates:_,strikeMarkedInRange:m=!1,cellSize:y,haptic:h,accessibilityLabel:x,style:g,headerLabelStyle:v,navButtonStyle:p,testID:D}=e,b=(0,_index2.useTheme)(),f=(0,_index.usePresenceMotion)(),N=(0,_react.useMemo)(()=>(0,_calendarStyles.buildCalendarStyles)(b),[b]),[M,j]=(0,_index.useControllableState)({value:i?(0,_calendarDates.startOfMonth)(i):void 0,defaultValue:(0,_calendarDates.startOfMonth)(r?.start??new Date),onChange:s}),S=12*M.getFullYear()+M.getMonth(),k=r?.start?(0,_calendarDates.startOfDay)(r.start):null,w="range"===a&&r?.end?(0,_calendarDates.startOfDay)(r.end):null,T=k?.getTime()??null,R=w?.getTime()??null,C=(0,_calendarDates.toIso)(new Date),I=l?(0,_calendarDates.startOfDay)(l).getTime():null,L=o?(0,_calendarDates.startOfDay)(o).getTime():null,A=(0,_react.useMemo)(()=>new Set((c??[]).map(e=>(0,_calendarDates.toIso)(e))),[c]),E=(0,_react.useCallback)(e=>null!==I&&e.getTime()<I||null!==L&&e.getTime()>L||A.has((0,_calendarDates.toIso)(e)),[I,L,A]),O=(0,_react.useMemo)(()=>{const e=new Map;for(const t of _??[]){const a=(0,_calendarDates.toIso)(t.date);let r=e.get(a);r||(r={dots:[],holiday:!1,spoken:[]},e.set(a,r));const n=t.tone??DEFAULT_TONE[t.kind],i=toneColor(b,n);r.dots.length<3&&r.dots.push({key:`${t.kind}-${r.dots.length}`,color:i}),"holiday"===t.kind&&(r.holiday=!0,r.holidayInk??=toneInk(b,n)),t.label&&r.spoken.push(t.label),r.spoken.push(t.kind)}return e},[_,b]),V=(0,_react.useMemo)(()=>(0,_calendarDates.buildMonthMatrix)(new Date(Math.floor(S/12),S%12,1),d),[S,d]),F=(0,_react.useMemo)(()=>(0,_calendarDates.weekdayLabels)(u,d),[u,d]),P=(0,_react.useMemo)(()=>new Intl.DateTimeFormat(u,{month:"long",year:"numeric"}),[u]),q=(0,_react.useMemo)(()=>new Intl.DateTimeFormat(u,{weekday:"short",day:"numeric",month:"long"}),[u]),z=P.format(M),B=null===I||(0,_calendarDates.startOfMonth)(new Date(I)).getTime()<M.getTime(),H=null===L||(0,_calendarDates.startOfMonth)(new Date(L)).getTime()>M.getTime(),X=(0,_react.useRef)((0,_index2.createAnimatedValue)(0)).current,Z=(0,_react.useRef)((0,_index2.createAnimatedValue)(1)).current,$=(0,_react.useRef)(null);(0,_react.useEffect)(()=>()=>$.current?.stop(),[]);const U=(0,_react.useCallback)(e=>{!1!==h&&(0,_index3.triggerHaptic)("impactLight");const t=b.components.dateRangePicker,a=t?.monthSlideDistance??32,r=t?.monthSlideOutDuration??b.motion.duration.fast,n=t?.monthSlideInDuration??b.motion.duration.fast,[i]=f.range(-e*a,0),[s]=f.range(e*a,0),l=f.reduced?f.duration("fast"):r,o=f.reduced?f.duration("fast"):n;$.current?.stop(),$.current=_reactNative.Animated.sequence([_reactNative.Animated.parallel([_reactNative.Animated.timing(X,{toValue:i,duration:r,easing:_reactNative.Easing.out(_reactNative.Easing.quad),useNativeDriver:!0}),_reactNative.Animated.timing(Z,{toValue:0,duration:l,useNativeDriver:!0})]),_reactNative.Animated.timing(X,{toValue:s,duration:0,useNativeDriver:!0}),_reactNative.Animated.parallel([_reactNative.Animated.timing(X,{toValue:0,duration:n,easing:_reactNative.Easing.out(_reactNative.Easing.cubic),useNativeDriver:!0}),_reactNative.Animated.timing(Z,{toValue:1,duration:o,useNativeDriver:!0})])]),$.current.start();const c=(0,_calendarDates.addMonths)(M,e);j(c),_reactNative.AccessibilityInfo.announceForAccessibility(P.format(c))},[h,M,Z,P,X,f,j,b]),Y=(0,_react.useCallback)(()=>U(-1),[U]),G=(0,_react.useCallback)(()=>U(1),[U]),pressDay=e=>{if(E(e.date))return;const t=(0,_index3.resolveHaptic)(h,"selection");t&&(0,_index3.triggerHaptic)(t);const r=e.date;"single"===a||!k||w||r.getTime()<k.getTime()?n({start:r}):n({start:k,end:r}),e.inMonth||j((0,_calendarDates.startOfMonth)(r))},W=(0,_react.useRef)(pressDay);(0,_react.useLayoutEffect)(()=>{W.current=pressDay});const J=(0,_react.useCallback)(e=>W.current(e),[]),K=void 0===y?void 0:Math.max(y,_calendarStyles.MIN_CELL_SIZE),Q=(0,_react.useMemo)(()=>void 0===K?{flex:1}:{width:K},[K]),ee=(0,_react.useMemo)(()=>void 0===K?{flex:1,aspectRatio:1,minHeight:_calendarStyles.MIN_CELL_SIZE}:{width:K,height:K},[K]),te=b.components.dateRangePicker?.navButtonSize??_calendarStyles.NAV_BUTTON_SIZE,ae=Math.max(b.spacing.sm,(_calendarStyles.MIN_CELL_SIZE-te)/2),re=Math.min(b.maxFontSizeMultiplier??1.5,1.5),ne=[];for(let e=0;e<_calendarDates.GRID_CELLS;e+=7)ne.push(V.slice(e,e+7));return(0,_jsxRuntime.jsxs)(_reactNative.View,{ref:t,style:[N.root,g],testID:D,children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:N.headerRow,children:[(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:Y,disabled:!B,style:({pressed:e})=>[N.navBtn,e&&N.navBtnPressed,!B&&N.navBtnDisabled,p],accessibilityRole:"button",accessibilityLabel:"Previous month",accessibilityState:{disabled:!B},"aria-disabled":!B,hitSlop:ae,children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:N.navText,maxFontSizeMultiplier:re,children:"‹"})}),(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:[N.headerLabelWrap,{opacity:Z,transform:[{translateX:X}]},v],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:N.headerLabel,accessibilityRole:"header",accessibilityLabel:x?`${x}, ${z}`:void 0,maxFontSizeMultiplier:b.maxFontSizeMultiplier,children:z})}),(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:G,disabled:!H,style:({pressed:e})=>[N.navBtn,e&&N.navBtnPressed,!H&&N.navBtnDisabled,p],accessibilityRole:"button",accessibilityLabel:"Next month",accessibilityState:{disabled:!H},"aria-disabled":!H,hitSlop:ae,children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:N.navText,maxFontSizeMultiplier:re,children:"›"})})]}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:N.weekdayRow,accessibilityElementsHidden:!0,importantForAccessibility:"no-hide-descendants",children:F.map(({weekday:e,label:t})=>(0,_jsxRuntime.jsx)(_reactNative.View,{style:[N.weekdayCell,Q],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:N.weekdayText,maxFontSizeMultiplier:re,children:t})},e))}),(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:{opacity:Z,transform:[{translateX:X}]},children:ne.map(e=>(0,_jsxRuntime.jsx)(_reactNative.View,{style:N.gridRow,children:e.map(e=>{const t=e.date.getTime(),r=null!==T&&t===T,n=null!==R&&t===R,i=null!==T&&null!==R&&t>=T&&t<=R,s=i&&!r&&!n,l=e.iso===C,o=O.get(e.iso),c=m&&i&&!0===o?.holiday,d=[q.format(e.date),...o?.spoken??[]];return l&&d.push("today"),"range"===a&&(r&&n?d.push("start and end of your range"):r?d.push("start of your range"):n?d.push("end of your range"):s&&d.push("in your range")),c&&d.push("not counted"),(0,_jsxRuntime.jsx)(_CalendarDay.CalendarDay,{cell:e,accessibilityLabel:d.join(", "),disabled:E(e.date),edge:r||n,mid:s,barLeft:i&&(n||s)&&!(r&&n),barRight:i&&(r||s)&&!(r&&n),today:l,struck:c,dots:o?.dots,inkColor:o?.holidayInk,cellStyle:ee,styles:N,maxFontSizeMultiplier:re,onPressDay:J},e.iso)})},e[0].iso))})]})});Calendar.displayName="Calendar";var _default=exports.default=Calendar;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.Card=void 0;var _react=_interopRequireWildcard(require("react")),_reactNative=require("react-native"),_useControllableState=require("../../hooks/useControllableState.js"),_usePressAnimation=require("../../hooks/usePressAnimation.js"),_index=require("../../theme/index.js"),_corners=require("../../utils/corners.js"),_hapticUtils=require("../../utils/hapticUtils.js"),_mergeRefs=require("../../utils/mergeRefs.js"),_shadows=require("../../utils/shadows.js"),_squircle=require("../../utils/squircle.js"),_AppIcon=require("../AppIcon/AppIcon.js"),_useContextMenu=require("../Menu/useContextMenu.js"),_index2=require("../Skeleton/index.js"),_SquircleFill=require("../SquircleFill/SquircleFill.js"),_index3=require("../Text/index.js"),_jsxRuntime=require("react/jsx-runtime");function _interopRequireWildcard(e,t){if("function"==typeof WeakMap)var i=new WeakMap,r=new WeakMap;return(_interopRequireWildcard=function(e,t){if(!t&&e&&e.__esModule)return e;var s,o,a={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return a;if(s=t?r:i){if(s.has(e))return s.get(e);s.set(e,a)}for(const t in e)"default"!==t&&{}.hasOwnProperty.call(e,t)&&((o=(s=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,t))&&(o.get||o.set)?s(a,t,o):a[t]=e[t]);return a})(e,t)}const paddingMap={none:"none",sm:"sm",md:"lg",lg:"xl",xl:"2xl"},Card=exports.Card=(0,_react.forwardRef)((e,t)=>{const{children:i,variant:r="elevated",elevation:s="sm",radius:o="lg",padding:a="md",interactive:n=!1,bg:l,header:c,title:d,lead:u,action:h,headerActions:x,collapsible:m=!1,collapsed:_,defaultCollapsed:p=!1,onCollapsedChange:g,collapsedSummary:b,onRemove:y,removeLabel:j="Remove",separatorHeight:v=_reactNative.StyleSheet.hairlineWidth,footer:R,imageSource:f,imageHeight:S=160,imageAspectRatio:w,imageOverlay:C,loading:k=!1,gradient:A,onPress:q,haptic:N,contextMenu:T,accessibilityLabel:P,accessibilityHint:I,accessibilityRole:B,style:H,containerStyle:M,headerStyle:L,bodyStyle:V,footerStyle:F,borderRadius:W,testID:z,onLayout:O,...U}=e,D=(0,_index.useTheme)(),E=n||"function"==typeof q,G=(0,_useContextMenu.useContextMenu)(T,{haptic:N,testID:z,accessibilityActions:U.accessibilityActions,onAccessibilityAction:U.onAccessibilityAction}),$=(0,_react.useMemo)(()=>(0,_mergeRefs.mergeRefs)(t,G.hostRef),[t,G.hostRef]),J=E||G.enabled,{scale:K,pressIn:Q,pressOut:X}=(0,_usePressAnimation.usePressAnimation)({enabled:J}),Y=(0,_react.useMemo)(()=>buildStyles(D),[D]),Z=Boolean(f),ee=D.spacing[paddingMap[a]],te=(0,_react.useMemo)(()=>A?"string"==typeof A?D.gradients[A]??null:A:null,[A,D.gradients]),ie="flat"===r,re=ie?0:W??D.radius[o],se=resolveBackground(D,l),[oe,ae]=(0,_useControllableState.useControllableState)({value:_,defaultValue:p,onChange:g}),ne=m&&oe,le=hasBuiltInHeaderContent(e),ce=Boolean(c)||le,de=(0,_SquircleFill.useSquircle)(!Z&&!te&&!ie,re,O),ue=_reactNative.StyleSheet.flatten([H,M])??{},he=ue.backgroundColor,xe=ue.borderColor,me=he??se??("filled"===r?D.colors.background.secondary:D.colors.background.elevated),pe="outlined"===r?D.colors.border.width:0,ge=xe??D.colors.border.primary,be="elevated"===r&&(0,_shadows.supportsBoxShadow)()?(0,_shadows.toBoxShadow)(D.shadows[s]):void 0,ye=de.active&&"elevated"===r&&!be,je=de.active&&!ye?{backgroundColor:"transparent",borderColor:"transparent"}:null,ve=(0,_react.useMemo)(()=>{const e={borderRadius:ye&&de.size?(0,_squircle.squircleHostRadius)(de.size.width,de.size.height,re):re,..._corners.smoothCorners,padding:Z?0:ee,overflow:de.active?"visible":"hidden"};switch(r){case"flat":return{...e,backgroundColor:se??D.colors.background.elevated,borderBottomWidth:v,borderBottomColor:D.colors.border.primary};case"outlined":return{...e,backgroundColor:de.active?"transparent":se??D.colors.background.elevated,borderWidth:D.colors.border.width,borderColor:de.active?"transparent":D.colors.border.primary};case"filled":return{...e,backgroundColor:de.active?"transparent":se??D.colors.background.secondary};default:return{...e,backgroundColor:se??D.colors.background.elevated,...be?{boxShadow:be}:D.shadows[s]}}},[D,r,s,re,Z,ee,de.active,de.size,be,ye,se,v]),Re=(0,_react.useMemo)(()=>({..."number"==typeof w?{width:"100%",aspectRatio:w}:{width:"100%",height:S},borderTopLeftRadius:re,borderTopRightRadius:re,borderBottomLeftRadius:0,borderBottomRightRadius:0,..._corners.smoothCorners}),[re,w,S]),fe="string"==typeof d?d:"",Se=(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:Y.titleColumn,children:["string"==typeof d?(0,_jsxRuntime.jsx)(_index3.Text,{variant:"title",accessibilityRole:"header",children:d}):d,u?(0,_jsxRuntime.jsx)(_index3.Text,{variant:"bodySmall",style:Y.lead,children:u}):null,ne&&b?(0,_jsxRuntime.jsx)(_index3.Text,{variant:"caption",style:Y.lead,children:b}):null]}),isCardTextAction(h)?(0,_jsxRuntime.jsx)(CardTextActionButton,{action:h,haptic:N}):h?(0,_jsxRuntime.jsx)(_reactNative.View,{style:Y.actionNode,children:h}):null,x,m?(0,_jsxRuntime.jsx)(CardIconAction,{icon:ne?"chevron-down":"chevron-up",label:`${ne?"Show":"Hide"} ${fe}`.trim(),expanded:!ne,onPress:()=>ae(!ne),haptic:N}):null,y?(0,_jsxRuntime.jsx)(CardIconAction,{icon:"trash",label:j,onPress:y,color:D.colors.toneText.error,haptic:N}):null]}),we=(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[ce?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[Y.header,!c&&Y.headerRow,ne&&Y.headerFolded,L],children:c??Se}):null,ne?null:(0,_jsxRuntime.jsx)(_reactNative.View,{style:[ce||R?Y.body:null,V],children:i}),R&&!ne?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[Y.footer,F],children:R}):null]}),Ce=Z?(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:Y.imageWrapper,children:[(0,_jsxRuntime.jsx)(_reactNative.Image,{source:f,resizeMode:"cover",style:Re,accessibilityLabel:"",accessible:!1}),C?(0,_jsxRuntime.jsx)(_reactNative.View,{pointerEvents:"box-none",style:Y.imageOverlay,children:C}):null]}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:{padding:ee},children:we})]}):we,ke=te?(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_index.Gradient,{gradient:te,style:_reactNative.StyleSheet.absoluteFill}),Ce]}):de.active&&de.size?(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_SquircleFill.SquircleFill,{width:de.size.width,height:de.size.height,radius:re,fill:me,stroke:pe?ge:void 0,strokeWidth:pe,outset:pe}),Ce]}):Ce;let Ae;if(J){const handlePress=e=>{if(!E)return;const t=(0,_hapticUtils.resolveHaptic)(N,"selection");t&&(0,_hapticUtils.triggerHaptic)(t),q?.(e)};Ae=(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:[{transform:[{scale:K}]}],children:(0,_jsxRuntime.jsx)(_reactNative.Pressable,{ref:$,onPress:handlePress,onPressIn:Q,onPressOut:X,android_ripple:{color:D.colors.surface.pressed,borderless:!1},accessibilityRole:B??(E?"button":void 0),accessibilityLabel:P,accessibilityHint:I,testID:z,onLayout:de.onLayout,style:[ve,H,M,je],...U,...G.hostProps,children:ke})})}else Ae=(0,_jsxRuntime.jsx)(_reactNative.View,{ref:t,accessibilityLabel:P,accessibilityHint:I,accessibilityRole:B,testID:z,onLayout:de.onLayout,style:[ve,H,M,je],...U,children:ke});return k?(0,_jsxRuntime.jsx)(CardSkeleton,{...e}):G.enabled?(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[Ae,G.renderSurface((0,_jsxRuntime.jsx)(_reactNative.View,{style:[ve,H,M,je,Y.preview],children:ke}))]}):Ae});Card.displayName="Card";const CardSkeleton=({variant:e="elevated",elevation:t,radius:i="lg",padding:r="md",bg:s,header:o,footer:a,imageSource:n,imageHeight:l=160,imageAspectRatio:c,borderRadius:d,containerStyle:u,headerStyle:h,bodyStyle:x,footerStyle:m,style:_,...p})=>{const g=(0,_index.useTheme)(),b=paddingMap[r],y=g.spacing[b],j="flat"===e?0:d??g.radius[i],v=void 0!==o||hasBuiltInHeaderContent(p),R=resolveBackground(g,s)??g.colors.background.elevated,f="outlined"===e?1:0,S="outlined"===e?g.colors.border.primary:void 0;return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[{backgroundColor:R,borderRadius:j,..._corners.smoothCorners,borderWidth:f,borderColor:S,overflow:"hidden"},u,_],accessibilityRole:"progressbar",accessibilityLabel:"Loading",accessibilityState:{busy:!0},"aria-busy":!0,children:[void 0!==n?(0,_jsxRuntime.jsx)(_index2.Skeleton,{width:"100%",height:c?void 0:l,style:c?{aspectRatio:c,width:"100%"}:void 0}):null,v?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[{padding:y,paddingBottom:g.spacing.sm},h],children:(0,_jsxRuntime.jsx)(_index2.Skeleton,{shape:"text",width:"60%",height:18})}):null,(0,_jsxRuntime.jsx)(_reactNative.View,{style:[{padding:y},x],children:(0,_jsxRuntime.jsx)(_index2.SkeletonText,{lines:3,fontSize:14,lastLineWidth:"55%"})}),void 0!==a?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[{padding:y,paddingTop:g.spacing.sm,flexDirection:"row"},m],children:(0,_jsxRuntime.jsx)(_index2.Skeleton,{width:88,height:32,shape:"rounded"})}):null]})};CardSkeleton.displayName="CardSkeleton",Card.Skeleton=CardSkeleton;const hasBuiltInHeaderContent=e=>Boolean(e.title||e.lead||e.action||e.headerActions||e.collapsible||e.onRemove),isCardTextAction=e=>"object"==typeof e&&null!==e&&!_react.default.isValidElement(e)&&"label"in e&&"onPress"in e,HIT_TARGET=44,CardIconAction=({icon:e,label:t,onPress:i,expanded:r,color:s,haptic:o})=>{const a=(0,_index.useTheme)();return(0,_jsxRuntime.jsx)(_reactNative.Pressable,{accessibilityRole:"button",accessibilityLabel:t,accessibilityState:void 0===r?void 0:{expanded:r},"aria-expanded":r,onPress:()=>{const e=(0,_hapticUtils.resolveHaptic)(o,"selection");e&&(0,_hapticUtils.triggerHaptic)(e),i()},style:iconActionStyle,children:(0,_jsxRuntime.jsx)(_AppIcon.AppIcon,{name:e,size:20,color:s??a.colors.text.primary})})},CardTextActionButton=({action:e,haptic:t})=>{const i=(0,_index.useTheme)();return(0,_jsxRuntime.jsx)(_reactNative.Pressable,{accessibilityRole:"button",accessibilityLabel:e.accessibilityLabel??e.label,onPress:()=>{const i=(0,_hapticUtils.resolveHaptic)(t,"selection");i&&(0,_hapticUtils.triggerHaptic)(i),e.onPress()},style:textActionStyle,children:(0,_jsxRuntime.jsx)(_index3.Text,{variant:"label",weight:"semibold",color:i.colors.primary,children:e.label})})},iconActionStyle={width:44,height:44,alignItems:"center",justifyContent:"center"},textActionStyle={minWidth:44,minHeight:44,alignItems:"center",justifyContent:"center"},resolveBackground=(e,t)=>{if(null==t)return;return e.colors.background[t]??t},buildStyles=e=>_reactNative.StyleSheet.create({header:{marginBottom:e.spacing.md},headerRow:{flexDirection:"row",alignItems:"center",gap:e.spacing.sm},headerFolded:{marginBottom:0},titleColumn:{flex:1},lead:{marginTop:e.spacing.xs},actionNode:{flexShrink:0},body:{flexShrink:1},footer:{marginTop:e.spacing.md},imageWrapper:{position:"relative"},imageOverlay:{..._reactNative.StyleSheet.absoluteFill},preview:{margin:0,marginTop:0,marginBottom:0,marginLeft:0,marginRight:0,marginStart:0,marginEnd:0,marginHorizontal:0,marginVertical:0,position:"relative",top:0,left:0,width:"100%",height:"100%"}});var _default=exports.default=Card;
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.Card=void 0;var _react=_interopRequireWildcard(require("react")),_reactNative=require("react-native"),_useControllableState=require("../../hooks/useControllableState.js"),_usePressAnimation=require("../../hooks/usePressAnimation.js"),_index=require("../../theme/index.js"),_corners=require("../../utils/corners.js"),_hapticUtils=require("../../utils/hapticUtils.js"),_mergeRefs=require("../../utils/mergeRefs.js"),_shadows=require("../../utils/shadows.js"),_squircle=require("../../utils/squircle.js"),_AppIcon=require("../AppIcon/AppIcon.js"),_useContextMenu=require("../Menu/useContextMenu.js"),_index2=require("../Skeleton/index.js"),_SquircleFill=require("../SquircleFill/SquircleFill.js"),_index3=require("../Text/index.js"),_jsxRuntime=require("react/jsx-runtime");function _interopRequireWildcard(e,t){if("function"==typeof WeakMap)var i=new WeakMap,r=new WeakMap;return(_interopRequireWildcard=function(e,t){if(!t&&e&&e.__esModule)return e;var s,a,o={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return o;if(s=t?r:i){if(s.has(e))return s.get(e);s.set(e,o)}for(const t in e)"default"!==t&&{}.hasOwnProperty.call(e,t)&&((a=(s=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,t))&&(a.get||a.set)?s(o,t,a):o[t]=e[t]);return o})(e,t)}const paddingMap={none:"none",sm:"sm",md:"lg",lg:"xl",xl:"2xl"},Card=exports.Card=(0,_react.forwardRef)((e,t)=>{const{children:i,variant:r="elevated",elevation:s="sm",radius:a="lg",padding:o="md",interactive:n=!1,bg:l,header:d,title:c,lead:u,action:x,headerActions:m,collapsible:h=!1,collapsed:_,defaultCollapsed:p=!1,onCollapsedChange:g,collapsedSummary:b,onRemove:y,removeLabel:j="Remove",separatorHeight:v=_reactNative.StyleSheet.hairlineWidth,footer:R,imageSource:f,imageHeight:S=160,imageAspectRatio:w,imageOverlay:C,loading:k=!1,gradient:A,onPress:q,haptic:N,contextMenu:T,accessibilityLabel:P,accessibilityHint:I,accessibilityRole:B,style:M,containerStyle:L,headerStyle:V,bodyStyle:H,footerStyle:F,borderRadius:W,testID:z,onLayout:O,...D}=e,U=(0,_index.useTheme)(),E=n||"function"==typeof q,G=(0,_useContextMenu.useContextMenu)(T,{haptic:N||!1,testID:z,accessibilityActions:D.accessibilityActions,onAccessibilityAction:D.onAccessibilityAction}),$=(0,_react.useMemo)(()=>(0,_mergeRefs.mergeRefs)(t,G.hostRef),[t,G.hostRef]),J=E||G.enabled,{style:K,pressIn:Q,pressOut:X}=(0,_usePressAnimation.usePressAnimation)({enabled:J}),Y=(0,_react.useMemo)(()=>buildStyles(U),[U]),Z=Boolean(f),ee=U.spacing[paddingMap[o]],te=(0,_react.useMemo)(()=>A?"string"==typeof A?U.gradients[A]??null:A:null,[A,U.gradients]),ie="flat"===r,re=ie?0:W??U.radius[a],se=resolveBackground(U,l),[ae,oe]=(0,_useControllableState.useControllableState)({value:_,defaultValue:p,onChange:g}),ne=h&&ae,le=hasBuiltInHeaderContent(e),de=Boolean(d)||le,ce=(0,_SquircleFill.useSquircle)(!Z&&!te&&!ie,re,O),ue=_reactNative.StyleSheet.flatten([M,L])??{},xe=ue.backgroundColor,me=ue.borderColor,he=xe??se??("filled"===r?U.colors.background.secondary:U.colors.background.elevated),pe="outlined"===r?U.colors.border.width:0,ge=me??U.colors.border.primary,be="elevated"===r&&(0,_shadows.supportsBoxShadow)()?(0,_shadows.toBoxShadow)(U.shadows[s]):void 0,ye=ce.active&&"elevated"===r&&!be,je=ce.active&&!ye?{backgroundColor:"transparent",borderColor:"transparent"}:null,ve=(0,_react.useMemo)(()=>{const e={borderRadius:ye&&ce.size?(0,_squircle.squircleHostRadius)(ce.size.width,ce.size.height,re):re,..._corners.smoothCorners,padding:Z?0:ee,overflow:ce.active?"visible":"hidden"};switch(r){case"flat":return{...e,backgroundColor:se??U.colors.background.elevated,borderBottomWidth:v,borderBottomColor:U.colors.border.primary};case"outlined":return{...e,backgroundColor:ce.active?"transparent":se??U.colors.background.elevated,borderWidth:U.colors.border.width,borderColor:ce.active?"transparent":U.colors.border.primary};case"filled":return{...e,backgroundColor:ce.active?"transparent":se??U.colors.background.secondary};default:return{...e,backgroundColor:se??U.colors.background.elevated,...be?{boxShadow:be}:U.shadows[s]}}},[U,r,s,re,Z,ee,ce.active,ce.size,be,ye,se,v]),Re=(0,_react.useMemo)(()=>({..."number"==typeof w?{width:"100%",aspectRatio:w}:{width:"100%",height:S},borderTopLeftRadius:re,borderTopRightRadius:re,borderBottomLeftRadius:0,borderBottomRightRadius:0,..._corners.smoothCorners}),[re,w,S]),fe="string"==typeof c?c:"",Se=(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:Y.titleColumn,children:["string"==typeof c?(0,_jsxRuntime.jsx)(_index3.Text,{variant:"title",accessibilityRole:"header",children:c}):c,u?(0,_jsxRuntime.jsx)(_index3.Text,{variant:"bodySmall",style:Y.lead,children:u}):null,ne&&b?(0,_jsxRuntime.jsx)(_index3.Text,{variant:"caption",style:Y.lead,children:b}):null]}),isCardTextAction(x)?(0,_jsxRuntime.jsx)(CardTextActionButton,{action:x,haptic:N}):x?(0,_jsxRuntime.jsx)(_reactNative.View,{style:Y.actionNode,children:x}):null,m,h?(0,_jsxRuntime.jsx)(CardIconAction,{icon:ne?"chevron-down":"chevron-up",label:`${ne?"Show":"Hide"} ${fe}`.trim(),expanded:!ne,onPress:()=>oe(!ne),haptic:N}):null,y?(0,_jsxRuntime.jsx)(CardIconAction,{icon:"trash",label:j,onPress:y,color:U.colors.toneText.error,haptic:N}):null]}),we=(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[de?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[Y.header,!d&&Y.headerRow,ne&&Y.headerFolded,V],children:d??Se}):null,ne?null:(0,_jsxRuntime.jsx)(_reactNative.View,{style:[de||R?Y.body:null,H],children:i}),R&&!ne?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[Y.footer,F],children:R}):null]}),Ce=Z?(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:Y.imageWrapper,children:[(0,_jsxRuntime.jsx)(_reactNative.Image,{source:f,resizeMode:"cover",style:Re,accessibilityLabel:"",accessible:!1}),C?(0,_jsxRuntime.jsx)(_reactNative.View,{pointerEvents:"box-none",style:Y.imageOverlay,children:C}):null]}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:{padding:ee},children:we})]}):we,ke=te?(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_index.Gradient,{gradient:te,style:_reactNative.StyleSheet.absoluteFill}),Ce]}):ce.active&&ce.size?(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_SquircleFill.SquircleFill,{width:ce.size.width,height:ce.size.height,radius:re,fill:he,stroke:pe?ge:void 0,strokeWidth:pe,outset:pe}),Ce]}):Ce;let Ae;if(J){const handlePress=e=>{E&&(N&&(0,_hapticUtils.triggerHaptic)(N),q?.(e))};Ae=(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:K,children:(0,_jsxRuntime.jsx)(_reactNative.Pressable,{ref:$,onPress:handlePress,onPressIn:Q,onPressOut:X,android_ripple:{color:U.colors.surface.pressed,borderless:!1},accessibilityRole:B??(E?"button":void 0),accessibilityLabel:P,accessibilityHint:I,testID:z,onLayout:ce.onLayout,style:[ve,M,L,je],...D,...G.hostProps,children:ke})})}else Ae=(0,_jsxRuntime.jsx)(_reactNative.View,{ref:t,accessibilityLabel:P,accessibilityHint:I,accessibilityRole:B,testID:z,onLayout:ce.onLayout,style:[ve,M,L,je],...D,children:ke});return k?(0,_jsxRuntime.jsx)(CardSkeleton,{...e}):G.enabled?(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[Ae,G.renderSurface((0,_jsxRuntime.jsx)(_reactNative.View,{style:[ve,M,L,je,Y.preview],children:ke}))]}):Ae});Card.displayName="Card";const CardSkeleton=({variant:e="elevated",elevation:t,radius:i="lg",padding:r="md",bg:s,header:a,footer:o,imageSource:n,imageHeight:l=160,imageAspectRatio:d,borderRadius:c,containerStyle:u,headerStyle:x,bodyStyle:m,footerStyle:h,style:_,...p})=>{const g=(0,_index.useTheme)(),b=paddingMap[r],y=g.spacing[b],j="flat"===e?0:c??g.radius[i],v=void 0!==a||hasBuiltInHeaderContent(p),R=resolveBackground(g,s)??g.colors.background.elevated,f="outlined"===e?1:0,S="outlined"===e?g.colors.border.primary:void 0;return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[{backgroundColor:R,borderRadius:j,..._corners.smoothCorners,borderWidth:f,borderColor:S,overflow:"hidden"},u,_],accessibilityRole:"progressbar",accessibilityLabel:"Loading",accessibilityState:{busy:!0},"aria-busy":!0,children:[void 0!==n?(0,_jsxRuntime.jsx)(_index2.Skeleton,{width:"100%",height:d?void 0:l,style:d?{aspectRatio:d,width:"100%"}:void 0}):null,v?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[{padding:y,paddingBottom:g.spacing.sm},x],children:(0,_jsxRuntime.jsx)(_index2.Skeleton,{shape:"text",width:"60%",height:18})}):null,(0,_jsxRuntime.jsx)(_reactNative.View,{style:[{padding:y},m],children:(0,_jsxRuntime.jsx)(_index2.SkeletonText,{lines:3,fontSize:14,lastLineWidth:"55%"})}),void 0!==o?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[{padding:y,paddingTop:g.spacing.sm,flexDirection:"row"},h],children:(0,_jsxRuntime.jsx)(_index2.Skeleton,{width:88,height:32,shape:"rounded"})}):null]})};CardSkeleton.displayName="CardSkeleton",Card.Skeleton=CardSkeleton;const hasBuiltInHeaderContent=e=>Boolean(e.title||e.lead||e.action||e.headerActions||e.collapsible||e.onRemove),isCardTextAction=e=>"object"==typeof e&&null!==e&&!_react.default.isValidElement(e)&&"label"in e&&"onPress"in e,HIT_TARGET=44,CardIconAction=({icon:e,label:t,onPress:i,expanded:r,color:s,haptic:a})=>{const o=(0,_index.useTheme)();return(0,_jsxRuntime.jsx)(_reactNative.Pressable,{accessibilityRole:"button",accessibilityLabel:t,accessibilityState:void 0===r?void 0:{expanded:r},"aria-expanded":r,onPress:()=>{a&&(0,_hapticUtils.triggerHaptic)(a),i()},style:iconActionStyle,children:(0,_jsxRuntime.jsx)(_AppIcon.AppIcon,{name:e,size:20,color:s??o.colors.text.primary})})},CardTextActionButton=({action:e,haptic:t})=>{const i=(0,_index.useTheme)();return(0,_jsxRuntime.jsx)(_reactNative.Pressable,{accessibilityRole:"button",accessibilityLabel:e.accessibilityLabel??e.label,onPress:()=>{t&&(0,_hapticUtils.triggerHaptic)(t),e.onPress()},style:textActionStyle,children:(0,_jsxRuntime.jsx)(_index3.Text,{variant:"label",weight:"semibold",color:i.colors.primary,children:e.label})})},iconActionStyle={width:44,height:44,alignItems:"center",justifyContent:"center"},textActionStyle={minWidth:44,minHeight:44,alignItems:"center",justifyContent:"center"},resolveBackground=(e,t)=>{if(null==t)return;return e.colors.background[t]??t},buildStyles=e=>_reactNative.StyleSheet.create({header:{marginBottom:e.spacing.md},headerRow:{flexDirection:"row",alignItems:"center",gap:e.spacing.sm},headerFolded:{marginBottom:0},titleColumn:{flex:1},lead:{marginTop:e.spacing.xs},actionNode:{flexShrink:0},body:{flexShrink:1},footer:{marginTop:e.spacing.md},imageWrapper:{position:"relative"},imageOverlay:{..._reactNative.StyleSheet.absoluteFill},preview:{margin:0,marginTop:0,marginBottom:0,marginLeft:0,marginRight:0,marginStart:0,marginEnd:0,marginHorizontal:0,marginVertical:0,position:"relative",top:0,left:0,width:"100%",height:"100%"}});var _default=exports.default=Card;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.Carousel=void 0;var _react=require("react"),_reactNative=require("react-native"),_index=require("../../theme/index.js"),_index2=require("../../utils/index.js"),_corners=require("../../utils/corners.js"),_index3=require("../Skeleton/index.js"),_jsxRuntime=require("react/jsx-runtime");const CarouselInner=(0,_react.forwardRef)((e,t)=>{const{data:n,renderItem:r,keyExtractor:a,index:i,defaultIndex:s=0,onIndexChange:l,autoPlay:
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.Carousel=void 0;var _react=require("react"),_reactNative=require("react-native"),_index=require("../../theme/index.js"),_index2=require("../../utils/index.js"),_corners=require("../../utils/corners.js"),_index3=require("../Skeleton/index.js"),_jsxRuntime=require("react/jsx-runtime");const CarouselInner=(0,_react.forwardRef)((e,t)=>{const{data:n,renderItem:r,keyExtractor:a,index:i,defaultIndex:s=0,onIndexChange:l,onScrollOffsetChange:o,autoPlay:c=!1,autoPlayInterval:u=4e3,loop:d=!1,showPagination:m=!0,paginationStyle:h="dots",itemWidth:x="screen",spacing:g=0,containerStyle:_,accessibilityLabel:y,testID:b,showThumbnails:p=!1,haptic:f,renderThumbnail:S,loading:v=!1}=e,j=(0,_index.useTheme)(),R="number"==typeof i,w=d||c,[C,k]=(0,_react.useState)(()=>_reactNative.Dimensions.get("window").width),I="screen"===x?C:x,N=I+g,T=(0,_react.useRef)(null),A=(0,_react.useRef)((0,_index.createAnimatedValue)(0)).current,V=clamp(R?i:s,0,Math.max(0,n.length-1)),[E,z]=(0,_react.useState)(V),H=(0,_react.useRef)(null),M=(0,_react.useRef)(null),P=(0,_react.useRef)(!1),W=(0,_react.useRef)(E);W.current=E;const D=(0,_react.useCallback)(e=>{const t=clamp(e,0,Math.max(0,n.length-1));z(e=>e===t?e:(l?.(t),t))},[n.length,l]),$=(0,_react.useCallback)((e,t=!0)=>{if(0===n.length)return;const r=clamp(e,0,n.length-1);T.current?.scrollToOffset({offset:r*N,animated:t}),D(r)},[n.length,N,D]),q=(0,_react.useCallback)(()=>{if(0===n.length)return;const e=W.current+1;e>=n.length?w&&$(0,!1):$(e,!0)},[n.length,w,$]),L=(0,_react.useCallback)(()=>{if(0===n.length)return;const e=W.current-1;e<0?w&&$(n.length-1,!1):$(e,!0)},[n.length,w,$]);(0,_react.useImperativeHandle)(t,()=>({scrollTo:$,next:q,prev:L}),[$,q,L]),(0,_react.useEffect)(()=>{R&&i!==E&&$(i,!0)},[i]);const O=(0,_react.useCallback)(()=>{H.current&&(clearInterval(H.current),H.current=null)},[]),F=(0,_react.useCallback)(()=>{!c||n.length<=1||(O(),H.current=setInterval(()=>{if(P.current)return;const e=W.current+1;e>=n.length?$(0,!1):$(e,!0)},u))},[c,u,n.length,$,O]);(0,_react.useEffect)(()=>(F(),()=>{O(),M.current&&clearTimeout(M.current)}),[F,O]);const X=m&&n.length>1&&"numbers"!==h||void 0!==o,B=(0,_react.useMemo)(()=>_reactNative.Animated.event([{nativeEvent:{contentOffset:{x:A}}}],{useNativeDriver:!1,listener:o?e=>o(e.nativeEvent.contentOffset.x):void 0}),[A,o]),G=(0,_react.useCallback)(e=>{if(N<=0)return;const t=e.nativeEvent.contentOffset.x,n=Math.round(t/N);D(n)},[N,D]),J=(0,_react.useCallback)(()=>{P.current=!0,O(),M.current&&(clearTimeout(M.current),M.current=null)},[O]),K=(0,_react.useCallback)(()=>{P.current=!1,c&&(M.current&&clearTimeout(M.current),M.current=setTimeout(()=>{F()},1e3))},[c,F]),Q=(0,_react.useCallback)(e=>{switch(e.nativeEvent.actionName){case"increment":q();break;case"decrement":L()}},[q,L]),U=(0,_react.useMemo)(()=>buildStyles(j),[j]),Y=(0,_react.useCallback)(({item:e,index:t})=>(0,_jsxRuntime.jsx)(_reactNative.View,{style:{width:I,marginRight:t===n.length-1?0:g},accessibilityElementsHidden:t!==E,importantForAccessibility:t===E?"yes":"no-hide-descendants",children:r(e,t)}),[r,I,g,n.length,E]),Z=(0,_react.useCallback)((e,t)=>String(t),[]),ee=(0,_react.useCallback)((e,t)=>({length:N,offset:N*t,index:t}),[N]);return v?(0,_jsxRuntime.jsx)(CarouselSkeleton,{...e,containerWidth:C}):(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[U.container,_],onLayout:e=>k(e.nativeEvent.layout.width),accessibilityRole:"adjustable",accessibilityLabel:y??"Carousel",accessibilityValue:{min:0,max:Math.max(0,n.length-1),now:E,text:`Slide ${E+1} of ${n.length}`},accessibilityActions:[{name:"increment"},{name:"decrement"}],onAccessibilityAction:Q,testID:b,children:[(0,_jsxRuntime.jsx)(_reactNative.FlatList,{ref:T,data:n,keyExtractor:a??Z,renderItem:Y,horizontal:!0,pagingEnabled:"screen"===x&&0===g,snapToInterval:N,snapToAlignment:"start",decelerationRate:"fast",showsHorizontalScrollIndicator:!1,onScroll:X?B:void 0,scrollEventThrottle:X?16:void 0,onMomentumScrollEnd:G,onScrollBeginDrag:J,onScrollEndDrag:K,getItemLayout:ee,initialScrollIndex:V,bounces:!1}),m&&n.length>1?(0,_jsxRuntime.jsx)(Pagination,{count:n.length,currentIndex:E,scrollX:A,slideStride:N,variant:h,theme:j}):null,p&&n.length>0?(0,_jsxRuntime.jsx)(ThumbnailStrip,{data:n,currentIndex:E,renderThumbnail:S,onSelect:e=>{const t=(0,_index2.resolveHaptic)(f,"selection");t&&(0,_index2.triggerHaptic)(t),$(e,!0)},theme:j}):null]})});CarouselInner.displayName="Carousel";const CarouselSkeleton=({itemWidth:e="screen",showPagination:t=!0,paginationStyle:n="dots",containerStyle:r,containerWidth:a})=>{const i="screen"===e?a||320:e;return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[carouselSkeletonStyles.container,r],children:[(0,_jsxRuntime.jsx)(_index3.Skeleton,{width:i,height:160,radius:"md"}),t?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[carouselSkeletonStyles.paginationRow,{marginTop:12}],children:Array.from({length:3}).map((e,t)=>"numbers"===n?(0,_jsxRuntime.jsx)(_index3.Skeleton,{width:24,height:16,radius:"sm",style:{marginHorizontal:4}},`sk-pg-${t}`):"bars"===n?(0,_jsxRuntime.jsx)(_index3.Skeleton,{width:20,height:4,radius:2,style:{marginHorizontal:3}},`sk-pg-${t}`):(0,_jsxRuntime.jsx)(_index3.Skeleton,{shape:"circle",width:8,height:8,style:{marginHorizontal:4}},`sk-pg-${t}`))}):null]})};CarouselSkeleton.displayName="CarouselSkeleton";const carouselSkeletonStyles=_reactNative.StyleSheet.create({container:{alignItems:"center"},paginationRow:{flexDirection:"row",justifyContent:"center"}}),Carousel=exports.Carousel=CarouselInner;Carousel.Skeleton=CarouselSkeleton;const Pagination=({count:e,currentIndex:t,scrollX:n,slideStride:r,variant:a,theme:i})=>{if("numbers"===a)return(0,_jsxRuntime.jsx)(_reactNative.View,{style:paginationStyles.numbersWrap,children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[paginationStyles.numbersText,{color:i.colors.text.secondary,fontSize:i.typography.fontSize.sm,fontWeight:i.typography.fontWeight.medium}],accessibilityLabel:`Slide ${t+1} of ${e}`,children:`${t+1} / ${e}`})});const s=Array.from({length:e},(e,t)=>t),l="bars"===a,o=l?24:6,c=l?36:16,u=l?3:6;return(0,_jsxRuntime.jsx)(_reactNative.View,{style:paginationStyles.dotRow,accessibilityElementsHidden:!0,importantForAccessibility:"no-hide-descendants",children:s.map(e=>{const a=[(e-1)*r,e*r,(e+1)*r],s=n.interpolate({inputRange:a,outputRange:[o,c,o],extrapolate:"clamp"}),l=n.interpolate({inputRange:a,outputRange:[.5,1,.5],extrapolate:"clamp"});return(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:[{width:s,height:u,marginHorizontal:4,borderRadius:u/2,..._corners.smoothCorners,backgroundColor:e===t?i.colors.primary:i.colors.border.primary,opacity:l}]},e)})})},ThumbnailStrip=({data:e,currentIndex:t,renderThumbnail:n,onSelect:r,theme:a})=>(0,_jsxRuntime.jsx)(_reactNative.ScrollView,{horizontal:!0,showsHorizontalScrollIndicator:!1,contentContainerStyle:thumbStyles.row,accessibilityRole:"tablist",children:e.map((e,i)=>(0,_jsxRuntime.jsx)(ThumbnailItem,{item:e,index:i,isActive:i===t,renderThumbnail:n,onPress:()=>r(i),theme:a},i))}),ThumbnailItem=({item:e,index:t,isActive:n,renderThumbnail:r,onPress:a,theme:i})=>{const s=(0,_react.useRef)((0,_index.createAnimatedValue)(n?1.1:1)).current;(0,_react.useEffect)(()=>{const e=_reactNative.Animated.spring(s,{toValue:n?1.1:1,useNativeDriver:!0,friction:6,tension:80});return e.start(),()=>e.stop()},[n,s]);const l=(0,_react.useMemo)(()=>r?r(e,t):e&&"object"==typeof e&&"uri"in e&&"string"==typeof e.uri?(0,_jsxRuntime.jsx)(_reactNative.Image,{source:{uri:e.uri},style:thumbStyles.image,resizeMode:"cover"}):(0,_jsxRuntime.jsx)(_reactNative.View,{style:[thumbStyles.placeholder,{backgroundColor:i.colors.background.secondary}],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:{color:i.colors.text.secondary,fontSize:i.typography.fontSize.xs,fontWeight:i.typography.fontWeight.semibold},children:t+1})}),[e,t,r,i]);return(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:a,accessibilityRole:"tab",accessibilityState:{selected:n},"aria-selected":n,accessibilityLabel:`Go to slide ${t+1}`,children:(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:[thumbStyles.thumb,{borderColor:n?i.colors.primary:"transparent",transform:[{scale:s}]}],children:l})})},thumbStyles=_reactNative.StyleSheet.create({row:{flexDirection:"row",alignItems:"center",paddingHorizontal:8,paddingVertical:8},thumb:{width:40,height:40,marginHorizontal:4,borderRadius:6,..._corners.smoothCorners,borderWidth:2,overflow:"hidden"},image:{width:"100%",height:"100%"},placeholder:{flex:1,alignItems:"center",justifyContent:"center"}}),clamp=(e,t,n)=>Math.min(Math.max(e,t),n),buildStyles=e=>_reactNative.StyleSheet.create({container:{width:"100%"}}),paginationStyles=_reactNative.StyleSheet.create({dotRow:{flexDirection:"row",alignItems:"center",justifyContent:"center",paddingVertical:12},numbersWrap:{alignItems:"center",justifyContent:"center",paddingVertical:12},numbersText:{textAlign:"center"}});var _default=exports.default=Carousel;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.Chip=void 0;var _react=require("react"),_reactNative=require("react-native"),_usePressAnimation=require("../../hooks/usePressAnimation.js"),_index=require("../../theme/index.js"),_color=require("../../utils/color.js"),_corners=require("../../utils/corners.js"),_hapticUtils=require("../../utils/hapticUtils.js"),_slotIcon=require("../AppIcon/slotIcon.js"),_index2=require("../Skeleton/index.js"),_jsxRuntime=require("react/jsx-runtime");const toneFor=(e,r)=>{switch(r){case"primary":return{base:e.colors.primaryMuted,on:e.colors.primary,ink:e.colors.toneText.primary,border:e.colors.primary,selectedBg:e.colors.primaryMuted,selectedOn:e.colors.primary,selectedInk:e.colors.toneText.primary,selectedBorder:e.colors.primary};case"success":return{base:e.colors.background.tertiary,on:e.colors.success,ink:e.colors.toneText.success,border:e.colors.success,selectedBg:e.colors.primaryMuted,selectedOn:e.colors.primary,selectedInk:e.colors.toneText.primary,selectedBorder:e.colors.primary};case"warning":return{base:e.colors.background.tertiary,on:e.colors.warning,ink:e.colors.toneText.warning,border:e.colors.warning,selectedBg:e.colors.primaryMuted,selectedOn:e.colors.primary,selectedInk:e.colors.toneText.primary,selectedBorder:e.colors.primary};case"error":return{base:e.colors.background.tertiary,on:e.colors.error,ink:e.colors.toneText.error,border:e.colors.error,selectedBg:e.colors.primaryMuted,selectedOn:e.colors.primary,selectedInk:e.colors.toneText.primary,selectedBorder:e.colors.primary};case"info":return{base:e.colors.background.tertiary,on:e.colors.info,ink:e.colors.toneText.info,border:e.colors.info,selectedBg:e.colors.primaryMuted,selectedOn:e.colors.primary,selectedInk:e.colors.toneText.primary,selectedBorder:e.colors.primary};default:return{base:e.colors.background.tertiary,on:e.colors.text.primary,ink:e.colors.text.primary,border:e.colors.border.primary,selectedBg:e.colors.primaryMuted,selectedOn:e.colors.primary,selectedInk:e.colors.toneText.primary,selectedBorder:e.colors.primary}}},SOFT_FILL_OPACITY=.14,SOFT_SELECTED_FILL_OPACITY=.24,sizeMap={sm:{paddingH:10,paddingV:4,fontSize:12,minHeight:26,closeSize:16,closeFont:12,gap:6,iconSize:14},md:{paddingH:12,paddingV:6,fontSize:13,minHeight:32,closeSize:18,closeFont:13,gap:8,iconSize:16}},hasChipCount=e=>null!=e&&""!==e,Chip=exports.Chip=(0,_react.forwardRef)((e,r)=>{const{label:t,count:i,selected:
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.Chip=void 0;var _react=require("react"),_reactNative=require("react-native"),_usePressAnimation=require("../../hooks/usePressAnimation.js"),_index=require("../../theme/index.js"),_color=require("../../utils/color.js"),_corners=require("../../utils/corners.js"),_hapticUtils=require("../../utils/hapticUtils.js"),_slotIcon=require("../AppIcon/slotIcon.js"),_index2=require("../Skeleton/index.js"),_jsxRuntime=require("react/jsx-runtime");const toneFor=(e,r)=>{switch(r){case"primary":return{base:e.colors.primaryMuted,on:e.colors.primary,ink:e.colors.toneText.primary,border:e.colors.primary,selectedBg:e.colors.primaryMuted,selectedOn:e.colors.primary,selectedInk:e.colors.toneText.primary,selectedBorder:e.colors.primary};case"success":return{base:e.colors.background.tertiary,on:e.colors.success,ink:e.colors.toneText.success,border:e.colors.success,selectedBg:e.colors.primaryMuted,selectedOn:e.colors.primary,selectedInk:e.colors.toneText.primary,selectedBorder:e.colors.primary};case"warning":return{base:e.colors.background.tertiary,on:e.colors.warning,ink:e.colors.toneText.warning,border:e.colors.warning,selectedBg:e.colors.primaryMuted,selectedOn:e.colors.primary,selectedInk:e.colors.toneText.primary,selectedBorder:e.colors.primary};case"error":return{base:e.colors.background.tertiary,on:e.colors.error,ink:e.colors.toneText.error,border:e.colors.error,selectedBg:e.colors.primaryMuted,selectedOn:e.colors.primary,selectedInk:e.colors.toneText.primary,selectedBorder:e.colors.primary};case"info":return{base:e.colors.background.tertiary,on:e.colors.info,ink:e.colors.toneText.info,border:e.colors.info,selectedBg:e.colors.primaryMuted,selectedOn:e.colors.primary,selectedInk:e.colors.toneText.primary,selectedBorder:e.colors.primary};default:return{base:e.colors.background.tertiary,on:e.colors.text.primary,ink:e.colors.text.primary,border:e.colors.border.primary,selectedBg:e.colors.primaryMuted,selectedOn:e.colors.primary,selectedInk:e.colors.toneText.primary,selectedBorder:e.colors.primary}}},SOFT_FILL_OPACITY=.14,SOFT_SELECTED_FILL_OPACITY=.24,sizeMap={sm:{paddingH:10,paddingV:4,fontSize:12,minHeight:26,closeSize:16,closeFont:12,gap:6,iconSize:14},md:{paddingH:12,paddingV:6,fontSize:13,minHeight:32,closeSize:18,closeFont:13,gap:8,iconSize:16}},hasChipCount=e=>null!=e&&""!==e,Chip=exports.Chip=(0,_react.forwardRef)((e,r)=>{const{label:t,count:i,selected:o=!1,selectionMode:s="single",onPress:l,onClose:n,leftIcon:a,iconVariant:c,variant:d="filled",tone:p="neutral",size:u="md",disabled:m=!1,loading:y=!1,accessibilityLabel:g,haptic:h,style:b,textStyle:x,containerStyle:S,countStyle:f,closeButtonStyle:_,closeIconStyle:z,testID:k}=e,j=(0,_index.useTheme)(),C=!!l&&!m,I="radio"===s,M=!!l&&(!m||I),v=hasChipCount(i),{style:H,pressIn:R,pressOut:T}=(0,_usePressAnimation.usePressAnimation)({enabled:C}),w=(0,_react.useMemo)(()=>toneFor(j,p),[j,p]),F=j.components.chip?.[u],O={paddingH:F?.paddingHorizontal??sizeMap[u].paddingH,paddingV:F?.paddingVertical??sizeMap[u].paddingV,fontSize:F?.fontSize??sizeMap[u].fontSize,minHeight:F?.minHeight??sizeMap[u].minHeight,closeSize:F?.closeSize??sizeMap[u].closeSize,closeFont:F?.closeFontSize??sizeMap[u].closeFont,gap:F?.gap??sizeMap[u].gap,iconSize:F?.iconSize??sizeMap[u].iconSize},B=Math.max(0,Math.ceil((44-O.minHeight)/2)),L=I?{top:B,bottom:B}:void 0,P="filled"===d,N="soft"===d,V=(()=>{if(N){const e=o?w.selectedOn:w.on,r=o?.24:.14;return(0,_color.tintOf)(e,r,o?w.selectedBg:w.base)}return o?P?w.selectedBg:"transparent":P?w.base:"transparent"})(),q=N?"transparent":o?w.selectedBorder:P?"transparent":w.border,A=m?j.colors.text.disabled:o?N?j.colors.text.primary:w.selectedInk:w.ink,D=P||N?0:j.colors.border.width,handlePress=()=>{if(!C)return;const e=(0,_hapticUtils.resolveHaptic)(h,"selection");e&&(0,_hapticUtils.triggerHaptic)(e),l?.()},U=g??(v?`${t}, ${i}`:t),E=(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.row,children:[a?(0,_jsxRuntime.jsx)(_reactNative.View,{style:{marginRight:O.gap},children:(0,_slotIcon.renderSlotIcon)(a,{color:A,size:O.iconSize,disabled:m},c)}):null,(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[styles.label,{color:A,fontSize:O.fontSize,...(0,_index.fontFor)(j,"medium")},x],numberOfLines:1,children:t??" "}),v?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[styles.count,{color:A,fontSize:Math.min(j.typography.fontSize.xs,O.fontSize),marginLeft:j.spacing.xs,...(0,_index.fontFor)(j,"normal")},f],numberOfLines:1,children:i}):null,n?(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:()=>{m||(!1!==h&&(0,_hapticUtils.triggerHaptic)("impactLight"),n?.())},disabled:m,accessibilityRole:"button",accessibilityLabel:`Remove ${t}`,accessibilityState:{disabled:m},"aria-disabled":m,hitSlop:6,style:({pressed:e})=>[styles.close,{width:O.closeSize,height:O.closeSize,borderRadius:O.closeSize/2,..._corners.smoothCorners,marginLeft:O.gap,backgroundColor:e?j.colors.surface.pressed:j.colors.surface.hovered},_],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[{color:A,fontSize:O.closeFont,...(0,_index.fontFor)(j,"bold"),lineHeight:O.closeFont+2},z],maxFontSizeMultiplier:1,children:"×"})}):null]}),$={paddingHorizontal:O.paddingH,paddingVertical:O.paddingV,minHeight:O.minHeight,borderRadius:j.radius.full,..._corners.smoothCorners,backgroundColor:V,borderWidth:D,borderColor:q,opacity:m?.55:1};let Y;return Y=M?(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:[H,{alignSelf:"flex-start"}],children:(0,_jsxRuntime.jsx)(_reactNative.Pressable,{ref:r,onPress:handlePress,onPressIn:R,onPressOut:T,disabled:!C,accessibilityRole:I?"radio":"multiple"===s?"checkbox":"button",accessibilityLabel:U,accessibilityState:I||"multiple"===s?{checked:o,disabled:m}:{selected:o,disabled:m},"aria-checked":I||"multiple"===s?o:void 0,"aria-selected":I||"multiple"===s?void 0:o,"aria-disabled":m,hitSlop:L,android_ripple:{color:j.colors.surface.pressed,borderless:!1},testID:k,style:({pressed:e})=>[styles.base,$,e&&"outlined"===d?{backgroundColor:j.colors.surface.pressed}:null,S,b],children:E})}):(0,_jsxRuntime.jsx)(_reactNative.View,{ref:r,style:[styles.base,$,S,b],accessible:!0,accessibilityRole:"text",accessibilityLabel:U,accessibilityState:{selected:o,disabled:m},"aria-selected":o,"aria-disabled":m,testID:k,children:E}),y?(0,_jsxRuntime.jsx)(ChipSkeleton,{...e}):Y});Chip.displayName="Chip";const ChipSkeleton=({label:e,count:r,size:t="md",leftIcon:i,onClose:o,style:s,containerStyle:l})=>{const n=sizeMap[t],a=Math.max(40,Math.min(120,7*(e??"").length)),c=n.minHeight,d=c/2,p=a+2*n.paddingH+(hasChipCount(r)?n.gap/2+7*String(r).length:0)+(void 0!==i?n.gap+14:0)+(void 0!==o?n.gap+n.closeSize:0);return(0,_jsxRuntime.jsx)(_index2.Skeleton,{width:p,height:c,radius:d,style:[{alignSelf:"flex-start"},l,s]})};ChipSkeleton.displayName="ChipSkeleton",Chip.Skeleton=ChipSkeleton;const styles=_reactNative.StyleSheet.create({base:{alignSelf:"flex-start",flexDirection:"row",alignItems:"center",justifyContent:"center"},row:{flexDirection:"row",alignItems:"center"},label:{flexShrink:1,textAlign:"center"},count:{flexShrink:0,fontVariant:["tabular-nums"]},close:{alignItems:"center",justifyContent:"center"}});var _default=exports.default=Chip;
|