@webority/mobile-ui 0.98.0 → 0.100.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/canvas-kit/kit.js +6169 -6148
- package/dist/canvas-kit/manifest.json +2 -2
- package/dist/canvas-kit/release.json +6 -6
- package/lib/commonjs/components/Banner/Banner.js +1 -1
- package/lib/commonjs/components/BottomSheet/BottomSheet.js +1 -1
- package/lib/commonjs/components/Card/Card.js +1 -1
- package/lib/commonjs/components/DatePicker/DatePicker.js +1 -1
- package/lib/commonjs/components/FieldBase/FieldBase.js +1 -1
- package/lib/commonjs/components/FilePicker/FilePicker.js +1 -1
- package/lib/commonjs/components/KeyboardAwareScrollView/KeyboardAwareScrollView.js +1 -1
- package/lib/commonjs/components/ListItem/ListItem.js +1 -1
- package/lib/commonjs/components/MessageList/MessageList.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/OptionSheet/OptionSheet.js +1 -1
- package/lib/commonjs/components/Swipeable/Swipeable.js +1 -1
- package/lib/commonjs/components/Toast/Toast.js +1 -1
- package/lib/commonjs/form/path.js +1 -1
- package/lib/commonjs/utils/announce.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/Card/Card.js +1 -1
- package/lib/module/components/DatePicker/DatePicker.js +1 -1
- package/lib/module/components/FieldBase/FieldBase.js +1 -1
- package/lib/module/components/FilePicker/FilePicker.js +1 -1
- package/lib/module/components/KeyboardAwareScrollView/KeyboardAwareScrollView.js +1 -1
- package/lib/module/components/ListItem/ListItem.js +1 -1
- package/lib/module/components/MessageList/MessageList.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/OptionSheet/OptionSheet.js +1 -1
- package/lib/module/components/Swipeable/Swipeable.js +1 -1
- package/lib/module/components/Toast/Toast.js +1 -1
- package/lib/module/form/path.js +1 -1
- package/lib/module/utils/announce.js +1 -1
- package/package.json +7 -7
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"kind": "WeborityPhone",
|
|
3
3
|
"library": {
|
|
4
4
|
"name": "@webority/mobile-ui",
|
|
5
|
-
"version": "0.
|
|
5
|
+
"version": "0.100.0"
|
|
6
6
|
},
|
|
7
7
|
"rendererProtocolVersion": 8,
|
|
8
8
|
"platform": "Phone",
|
|
@@ -19509,7 +19509,7 @@
|
|
|
19509
19509
|
"primary-hover": "Primary fill while a control is hovered or pressed.",
|
|
19510
19510
|
"primary-pressed": "Primary fill while a control is pressed.",
|
|
19511
19511
|
"primary-soft": "Soft primary tint behind selected and highlighted rows.",
|
|
19512
|
-
"primary-text": "Primary as text and small glyphs on a page
|
|
19512
|
+
"primary-text": "Primary as text and small glyphs on a page.",
|
|
19513
19513
|
"primary-wash": "Faint translucent primary wash over a surface.",
|
|
19514
19514
|
"primary-wash-strong": "Stronger translucent primary wash over a surface.",
|
|
19515
19515
|
"scrim": "Dim behind page-level backdrops such as drawers, modals and the shell.",
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "webority-phone",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.100.0",
|
|
4
4
|
"platform": "Phone",
|
|
5
5
|
"kitModuleVersion": 2,
|
|
6
6
|
"rendererProtocolVersion": 8,
|
|
7
7
|
"library": {
|
|
8
8
|
"name": "@webority/mobile-ui",
|
|
9
|
-
"version": "0.
|
|
9
|
+
"version": "0.100.0"
|
|
10
10
|
},
|
|
11
11
|
"files": {
|
|
12
12
|
"manifest.json": {
|
|
13
|
-
"sha256": "
|
|
14
|
-
"bytes":
|
|
13
|
+
"sha256": "5421eeb376029819c284cb7219f6e5e66c542a59302ad31bf53c5d06c3076bd4",
|
|
14
|
+
"bytes": 613046
|
|
15
15
|
},
|
|
16
16
|
"kit.js": {
|
|
17
|
-
"sha256": "
|
|
18
|
-
"bytes":
|
|
17
|
+
"sha256": "18d1c4cea3927d8e14d11fa713ed01bde669021845fc4da42a3235ec7c5dd95a",
|
|
18
|
+
"bytes": 5916562
|
|
19
19
|
},
|
|
20
20
|
"kit.css": {
|
|
21
21
|
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
|
@@ -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"),_usePresenceMotion=require("../../hooks/usePresenceMotion.js"),_index=require("../../theme/index.js"),_corners=require("../../utils/corners.js"),_hapticUtils=require("../../utils/hapticUtils.js"),_hitSlop=require("../../utils/hitSlop.js"),_index2=require("../Skeleton/index.js"),_jsxRuntime=require("react/jsx-runtime");const Banner=exports.Banner=(0,_react.forwardRef)((e,t)=>{const{title:r,message:i,variant:n="info",icon:s,actions:o,dismissible:a=!1,onDismiss:l,haptic:c,visible:d=!0,animateMount:u=!0,loading:x=!1,accessibilityRole:m="alert",accessibilityLabel:p,style:g,containerStyle:h,iconCircleStyle:_,tintBarStyle:y,closeButtonStyle:b,actionButtonStyle:j,testID:f}=e,v=(0,_index.useTheme)(),R=(0,_usePresenceMotion.usePresenceMotion)(),w=(0,_react.useMemo)(()=>buildStyles(v),[v]),S=(0,_react.useMemo)(()=>tintFor(v,n),[v,n]),[N,k]=R.range(-20,0),B=(0,_react.useRef)((0,_index.createAnimatedValue)(u&&d?N:0)).current,C=(0,_react.useRef)((0,_index.createAnimatedValue)(u&&d?0:d?1:0)).current,[V,z]=(0,_react.useState)(d),D=(0,_react.useRef)(!0);if((0,_react.useEffect)(()=>{if(D.current&&(D.current=!1,!u))return;let e;return d?(z(!0),e=_reactNative.Animated.parallel([_reactNative.Animated.timing(B,{toValue:k,duration:v.motion.duration.default,useNativeDriver:!0}),_reactNative.Animated.timing(C,{toValue:1,duration:R.duration("default"),useNativeDriver:!0})]),e.start()):V&&(e=_reactNative.Animated.parallel([_reactNative.Animated.timing(B,{toValue:N,duration:v.motion.duration.fast,useNativeDriver:!0}),_reactNative.Animated.timing(C,{toValue:0,duration:R.duration("fast"),useNativeDriver:!0})]),e.start(()=>{z(!1)})),()=>e?.stop()},[d]),!V)return null;const T=r??" ",H="string"==typeof i?i??" ":"",M="alert"===m?"danger"===n?"assertive":"polite":"none",A=(0,_jsxRuntime.jsxs)(_reactNative.Animated.View,{ref:t,accessibilityRole:m,accessibilityLiveRegion:M,accessibilityLabel:p,testID:f,style:[w.container,{backgroundColor:v.colors["bg-subtle"],borderRadius:v.radius.md,..._corners.smoothCorners,padding:v.space.md,opacity:C,transform:[{translateY:B}]},g,h],children:[v.components.banner["tint-bar-width"]>0?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[w.tintBar,{backgroundColor:S.bar},y]}):null,(0,_jsxRuntime.jsxs)(_reactNative.View,{style:w.row,children:[!1===s?null:s?(0,_jsxRuntime.jsx)(_reactNative.View,{style:w.iconWrap,children:s}):(0,_jsxRuntime.jsx)(_reactNative.View,{style:[w.iconCircle,{backgroundColor
|
|
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"),_hitSlop=require("../../utils/hitSlop.js"),_index2=require("../Skeleton/index.js"),_jsxRuntime=require("react/jsx-runtime");const Banner=exports.Banner=(0,_react.forwardRef)((e,t)=>{const{title:r,message:i,variant:n="info",icon:s,actions:o,dismissible:a=!1,onDismiss:l,haptic:c,visible:d=!0,animateMount:u=!0,loading:x=!1,accessibilityRole:m="alert",accessibilityLabel:p,style:g,containerStyle:h,iconCircleStyle:_,tintBarStyle:y,closeButtonStyle:b,actionButtonStyle:j,testID:f}=e,v=(0,_index.useTheme)(),R=(0,_usePresenceMotion.usePresenceMotion)(),w=(0,_react.useMemo)(()=>buildStyles(v),[v]),S=(0,_react.useMemo)(()=>tintFor(v,n),[v,n]),[N,k]=R.range(-20,0),B=(0,_react.useRef)((0,_index.createAnimatedValue)(u&&d?N:0)).current,C=(0,_react.useRef)((0,_index.createAnimatedValue)(u&&d?0:d?1:0)).current,[V,z]=(0,_react.useState)(d),D=(0,_react.useRef)(!0);if((0,_react.useEffect)(()=>{if(D.current&&(D.current=!1,!u))return;let e;return d?(z(!0),e=_reactNative.Animated.parallel([_reactNative.Animated.timing(B,{toValue:k,duration:v.motion.duration.default,useNativeDriver:!0}),_reactNative.Animated.timing(C,{toValue:1,duration:R.duration("default"),useNativeDriver:!0})]),e.start()):V&&(e=_reactNative.Animated.parallel([_reactNative.Animated.timing(B,{toValue:N,duration:v.motion.duration.fast,useNativeDriver:!0}),_reactNative.Animated.timing(C,{toValue:0,duration:R.duration("fast"),useNativeDriver:!0})]),e.start(()=>{z(!1)})),()=>e?.stop()},[d]),!V)return null;const T=r??" ",H="string"==typeof i?i??" ":"",M="alert"===m?"danger"===n?"assertive":"polite":"none",A=(0,_jsxRuntime.jsxs)(_reactNative.Animated.View,{ref:t,accessibilityRole:m,accessibilityLiveRegion:M,accessibilityLabel:p,testID:f,style:[w.container,{backgroundColor:v.colors["bg-subtle"],borderRadius:v.radius.md,..._corners.smoothCorners,padding:v.space.md,opacity:C,transform:[{translateY:B}]},g,h],children:[v.components.banner["tint-bar-width"]>0?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[w.tintBar,{backgroundColor:S.bar},y]}):null,(0,_jsxRuntime.jsxs)(_reactNative.View,{style:w.row,children:[!1===s?null:s?(0,_jsxRuntime.jsx)(_reactNative.View,{style:w.iconWrap,children:s}):(0,_jsxRuntime.jsx)(_reactNative.View,{style:[w.iconCircle,{backgroundColor:`${S.bar}22`},_],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:[r||x?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:{color:v.colors["text-body"],fontSize:v.text.base.size,...(0,_index.fontFor)(v,"semibold"),lineHeight:20},numberOfLines:2,children:T}):null,"string"==typeof i||x?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:{color:v.colors["text-muted"],fontSize:v.text.sm.size,...(0,_index.fontFor)(v,"normal"),lineHeight:18,marginTop:r?v.space.xxs:0},children:H||" "}):(0,_jsxRuntime.jsx)(_reactNative.View,{style:{marginTop:r?v.space.xxs:0},children:i})]}),a?(0,_jsxRuntime.jsx)(_reactNative.Pressable,{accessibilityRole:"button",accessibilityLabel:"Dismiss banner",onPress:()=>{const e=(0,_hapticUtils.resolveHaptic)(c,"selection");e&&(0,_hapticUtils.triggerHaptic)(e),l?.()},hitSlop:8,...(0,_hitSlop.hitSlopMarker)(8),style:({pressed:e})=>[w.closeBtn,{backgroundColor:e?v.colors["surface-pressed"]:"transparent"},b],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:{color:v.colors["text-muted"],fontSize:v.text.lg.size,fontWeight:v.weight.bold,lineHeight:17},accessible:!1,children:"×"})}):null]}),o&&o.length>0?(0,_jsxRuntime.jsx)(_reactNative.View,{style:w.actionsRow,children:o.map((e,t)=>{const r=e.tone??"primary",i=e.variant??"ghost",n="danger"===r?v.colors.danger:"neutral"===r?v.colors["text-muted"]:S.glyphColor,s="danger"===r?v.colors["danger-text"]:"neutral"===r?v.colors["text-muted"]:S.ink,o="danger"===r?v.colors["on-danger"]:"neutral"===r?v.colors["on-neutral-strong"]:S.on,a="solid"===i;return(0,_jsxRuntime.jsx)(_reactNative.Pressable,{accessibilityRole:"button",accessibilityLabel:e.label,onPress:()=>{const t=(0,_hapticUtils.resolveHaptic)(c,"selection");t&&(0,_hapticUtils.triggerHaptic)(t),e.onPress()},style:({pressed:t})=>[w.actionBtn,"md"===e.size&&w.actionBtnMd,"outline"===i&&{borderWidth:1,borderColor:s},{backgroundColor:a?n:t?v.colors["surface-pressed"]:"transparent",opacity:a&&t?.85:1},j],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:{color:a?o:s,fontSize:v.text.sm.size,textAlign:"center",...(0,_index.fontFor)(v,"semibold")},children:e.label})},`${e.label}-${t}`)})}):null]});return x?(0,_jsxRuntime.jsx)(BannerSkeleton,{...e}):A});Banner.displayName="Banner";const BannerSkeleton=({title:e,actions:t,icon:r,containerStyle:i,style:n})=>{const s=(0,_index.useTheme)(),o=!1!==r;return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[{flexDirection:"row",alignItems:"flex-start",backgroundColor:s.colors.surface,borderRadius:s.radius.md,..._corners.smoothCorners,padding:s.space.md,borderWidth:1,borderColor:s.colors.border},i,n],accessibilityRole:"progressbar",accessibilityState:{busy:!0},"aria-busy":!0,children:[o?(0,_jsxRuntime.jsx)(_reactNative.View,{style:{marginRight:s.space.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:s.space.xs}}):null,(0,_jsxRuntime.jsx)(_index2.SkeletonText,{lines:2,fontSize:s.text.sm.size,lastLineWidth:"70%"}),t&&t.length>0?(0,_jsxRuntime.jsx)(_reactNative.View,{style:{flexDirection:"row",marginTop:s.space.sm},children:t.map((e,t)=>(0,_jsxRuntime.jsx)(_index2.Skeleton,{width:72,height:28,shape:"rounded",style:{marginRight:s.space.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["success-text"],on:e.colors["on-success"],glyph:"✓"};case"warning":return{bar:e.colors.warning,glyphColor:e.colors.warning,ink:e.colors["warning-text"],on:e.colors["on-warning"],glyph:"⚠"};case"danger":return{bar:e.colors.danger,glyphColor:e.colors.danger,ink:e.colors["danger-text"],on:e.colors["on-danger"],glyph:"✗"};case"neutral":return{bar:e.colors["text-subtle"],glyphColor:e.colors["text-muted"],ink:e.colors["text-muted"],on:e.colors["on-neutral-strong"],glyph:"i"};default:return{bar:e.colors.primary,glyphColor:e.colors.primary,ink:e.colors["primary-text"],on:e.colors["on-primary"],glyph:"i"}}},buildStyles=e=>{const t=e.components.banner,r=e.space.sm;return _reactNative.StyleSheet.create({container:{overflow:"hidden",paddingLeft:e.space.md},tintBar:{position:"absolute",left:0,top:0,bottom:0,width:t["tint-bar-width"]},row:{flexDirection:"row",alignItems:"flex-start"},iconWrap:{marginRight:r},iconCircle:{width:28,height:28,borderRadius:e.radius.pill,..._corners.smoothCorners,alignItems:"center",justifyContent:"center",marginRight:r},iconGlyph:{fontSize:e.text.base.size,fontWeight:"700",lineHeight:17},textBlock:{flex:1,paddingRight:e.space.xs},closeBtn:{width:28,height:28,borderRadius:e.radius.pill,..._corners.smoothCorners,alignItems:"center",justifyContent:"center",marginLeft:e.space.xxs},actionsRow:{flexDirection:"row",flexWrap:"wrap",justifyContent:"flex-end",marginTop:e.space.xs,columnGap:e.space.xs,rowGap:e.space.xs},actionBtn:{paddingHorizontal:e.space.sm,paddingVertical:e.space.xs,borderRadius:e.radius.sm,..._corners.smoothCorners,maxWidth:"100%",alignItems:"center",justifyContent:"center"},actionBtnMd:{minHeight:44,paddingHorizontal:e.space.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 cache,_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(!t&&e&&e.__esModule)return e;var a,r,n=Object.defineProperty,o={__proto__:null,default:e};if(Object(e)!==e)return o;if(cache||"function"!=typeof WeakMap||(cache=new WeakMap),cache){if(cache.has(e))return cache.get(e);cache.set(e,o)}for(r in e)"default"!==r&&{}.hasOwnProperty.call(e,r)&&((a=n&&Object.getOwnPropertyDescriptor(e,r))&&(a.get||a.set)?n(o,r,a):o[r]=e[r]);return o}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: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",animateMount:S=!0,handleIndicatorStyle:R,containerStyle:x,header:y,footer:N,headerStyle:g,footerStyle:w,children:C,accessibilityLabel:j,accessibilityViewIsModal:M,testID:k}=e,O=(0,_index.useTheme)(),I=(0,_usePresenceMotion.usePresenceMotion)(),T=(0,_reactNativeSafeAreaContext.useSafeAreaInsets)(),[P,E]=(0,_react.useState)(()=>_reactNative.Dimensions.get("window").height),[A,H]=(0,_react.useState)(()=>_reactNative.Dimensions.get("window").width),B=(0,_react.useCallback)(e=>{const{height:t,width:a}=e.nativeEvent.layout;t>0&&E(e=>e===t?e:t),a>0&&H(e=>e===a?e:a)},[]),D=(0,_reactNative.useWindowDimensions)(),G="dialog"===p||"auto"===p&&Math.min(D.width,D.height)>=600,V=Math.min(560,A-2*O.space.xl),[q,L]=(0,_ModalSafeArea.useModalInsets)(),F="modal"===b?q.top:T.top,J="modal"===b?q.bottom:T.bottom,W=a.includes("content"),[z,Y]=useMeasuredHeight(),[$,K]=useMeasuredHeight(),[U,X,Q]=useMeasuredHeight(),[Z,ee]=useMeasuredHeight(),te=G?O.space.md:z,ae=W?Math.min(te+(null!=y?$:0)+U+(null!=N?Z:0)+J,P-F):0,re=(0,_react.useCallback)((e,t)=>{W&&Q(t),h?.(e,t)},[W,h,Q]),ne=(0,_react.useMemo)(()=>resolveSnapPoints(a,P,ae),[a,P,ae]),oe=P,se=ne[ne.length-1]??0,ie=(0,_reactNativeReanimated.useSharedValue)(oe),ce=(0,_reactNativeReanimated.useSharedValue)(oe),le=(0,_reactNativeReanimated.useSharedValue)(1),ue=(0,_reactNativeReanimated.useSharedValue)(-1),[de,he]=(0,_react.useState)(-1),me=(0,_react.useRef)(!1),[ve,fe]=(0,_react.useState)(!1),[be,pe]=(0,_react.useState)(!1),Se=(0,_react.useRef)(!1),Re=(0,_react.useRef)(s);Re.current=s;const[xe,ye]=(0,_react.useState)(!1),Ne=(0,_react.useRef)(!S&&"number"==typeof r&&r>=0),ge=(0,_react.useRef)(-1),we=(0,_react.useRef)(!1);we.current="modal"===b?be:xe;const Ce=(0,_react.useRef)(l);Ce.current=l;const je=(0,_react.useRef)(!1),Me=(0,_react.useRef)(!0),ke=(0,_react.useRef)([]),Oe=(0,_react.useCallback)(e=>{const t=ke.current;ke.current=[];for(const a of t)a(e)},[]);(0,_react.useEffect)(()=>(Me.current=!0,()=>{Me.current=!1,Oe(!1)}),[Oe]);const Ie=(0,_react.useCallback)(e=>{if(e<0||e>=ne.length)return oe;const t=ne[e];return G?(P-t)/2:P-t},[ne,P,oe,G]),Te=(0,_react.useCallback)(e=>{ge.current=e;de!==e&&(he(e),ue.value=e,n?.(e))},[de,ue,n]),Pe=(0,_react.useCallback)(()=>{me.current=!1,ue.value<0&&(Se.current=!0,"modal"===b?(fe(!1),"ios"!==_reactNative.Platform.OS&&pe(!1)):ye(!1))},[b,ue]),Ee=(0,_react.useCallback)(()=>{Se.current&&pe(!1)},[]);(0,_react.useEffect)(()=>{("modal"===b?!be:!xe)&&Se.current&&(Se.current=!1,Re.current?.(),Oe(!0))},[b,be,xe,Oe]);const Ae=(0,_react.useCallback)((e,t,a)=>{me.current=!0,o?.(t,a),ie.value=(0,_reactNativeReanimated.withSpring)(e,SPRING_CONFIG,e=>{"worklet";e&&(0,_reactNativeReanimated.runOnJS)(Pe)()})},[o,ie,Pe]),He=(0,_react.useCallback)(e=>{const t="number"==typeof e?clamp(e,0,ne.length-1):de>=0?de:0,a=ue.value,r=Ie(t);return Se.current=!1,Oe(!1),"modal"===b?(pe(!0),fe(!0)):ye(!0),a<0&&Ne.current?(ie.value=r,le.value=1,Te(t),void o?.(a,t)):a<0&&I.reduced?(ie.value=r,le.value=0,le.value=(0,_reactNativeReanimated.withTiming)(1,{duration:I.duration("fast"),easing:_reactNativeReanimated.Easing.bezier(...O.motion.ease.decelerate),reduceMotion:_usePresenceMotion.PRESENCE_REDUCE_MOTION}),Te(t),void o?.(a,t)):(a<0&&(ie.value=oe,le.value=1),Te(t),void Ae(r,a,t))},[Ae,oe,de,ue,b,o,I,le,ne.length,Te,Oe,O.motion.ease.decelerate,ie,Ie]),Be=(0,_react.useCallback)(()=>{if(0===ne.length)return;const e=ue.value,t=Ie(0);Te(0),Ae(t,e,0)},[Ae,ue,ne.length,Te,Ie]),De=(0,_react.useCallback)(()=>new Promise(e=>{if(ge.current<0)return void(we.current?ke.current.push(e):e(!0));ke.current.push(e),Ne.current=!1;const t=ue.value;Te(-1),me.current=!0,o?.(t,-1);const a=I.reduced?le:ie,r=I.reduced?0:oe;a.value=(0,_reactNativeReanimated.withTiming)(r,{duration:I.duration("fast"),easing:_reactNativeReanimated.Easing.bezier(...O.motion.ease.accelerate),reduceMotion:_usePresenceMotion.PRESENCE_REDUCE_MOTION},e=>{"worklet";e&&(0,_reactNativeReanimated.runOnJS)(Pe)()})}),[oe,ue,Pe,o,I,le,Te,ie,O.motion.ease.accelerate]),Ge=(0,_react.useCallback)(async()=>{await De()},[De]),Ve=(0,_react.useCallback)((e,t,a)=>{const r=Ce.current;if(!r)return void e();if(je.current)return void t?.();const n=r();"boolean"!=typeof n?(je.current=!0,a?.(),n.then(a=>{je.current=!1,a&&Me.current&&ge.current>=0?e():t?.()},e=>{throw je.current=!1,e})):(n?e:t)?.()},[]),qe=(0,_react.useCallback)(()=>new Promise(e=>{ge.current<0?De().then(e):Ve(()=>{De().then(e)},()=>e(!1))}),[De,Ve]),Le=(0,_react.useCallback)(()=>{c&&qe()},[c,qe]);(0,_react.useImperativeHandle)(t,()=>({expand:He,collapse:Be,close:Ge,requestClose:qe}),[He,Be,Ge,qe]),(0,_react.useEffect)(()=>{"number"==typeof r&&r!==de&&(-1===r?Ge():He(r))},[r]);const Fe=(0,_react.useRef)({hostHeight:P,contentSnap:ae});(0,_react.useEffect)(()=>{const e=Fe.current;if(e.hostHeight===P&&e.contentSnap===ae)return;if(Fe.current={hostHeight:P,contentSnap:ae},e.hostHeight===P&&ue.value<0)return;const t=Ie(ue.value);ie.value=Ne.current?t:(0,_reactNativeReanimated.withSpring)(t,SPRING_CONFIG)},[P,ae]);const Je=P-se,We=(0,_react.useMemo)(()=>ne.map(e=>P-e),[ne,P]),ze=(0,_react.useCallback)(()=>{const e=ge.current;e<0||Ae(Ie(e),e,e)},[Ae,Ie]),Ye=(0,_react.useCallback)((e,t)=>{const a=ue.value;-1!==e?(Te(e),Ae(t,a,e)):Ve(()=>{(0,_index2.triggerHaptic)("selection"),Ge()},ze,ze)},[Ae,Ge,ue,Ve,Te,ze]),$e=(0,_react.useMemo)(()=>_reactNativeGestureHandler.Gesture.Native().withTestId(k?`${k}-content-gesture`:"bottom-sheet-content-gesture"),[k]),Ke=(0,_react.useMemo)(()=>{const e=We,t=oe,a=Je,r=i;return _reactNativeGestureHandler.Gesture.Pan().withTestId(k?`${k}-pan-gesture`:"bottom-sheet-pan-gesture").activeOffsetY([-10,10]).failOffsetX([-15,15]).onStart(()=>{"worklet";ce.value=ie.value}).onUpdate(e=>{"worklet";const t=ce.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)(Ye)(-1,t):void(0,_reactNativeReanimated.runOnJS)(Ye)(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)(Ye)(-1,t):(0,_reactNativeReanimated.runOnJS)(Ye)(o,e[o])})},[oe,ce,i,Ye,Je,We,k,ie]),{height:Ue}=(0,_reactNativeKeyboardController.useReanimatedKeyboardAnimation)(),Xe="shift"===f,Qe=(0,_reactNativeReanimated.useDerivedValue)(()=>Xe?Ue.value:0),Ze=ne[de>=0?de:0]??se,et=O.space.md,tt=(0,_reactNativeReanimated.useAnimatedStyle)(()=>{if(G){const e=Qe.value,t=P+e-Ze-et,a=e<0&&ie.value>t?t:ie.value;return{top:a<F?F:a,opacity:le.value}}const e=ie.value+Qe.value,t=Qe.value<0?F:Je;return{top:e<t?t:e,opacity:le.value}}),at=(0,_reactNativeReanimated.useAnimatedStyle)(()=>{const e=Qe.value;if(G){const t=P+e-Ze-et,a=e<0&&ie.value>t?t:ie.value,r=P+e-et-(a<F?F:a);return{height:r<0?0:r>Ze?Ze:r}}const t=e<0?F:Je,a=ie.value+e,r=P+e-(a<t?t:a);return{height:r<0?0:r>se?se:r}}),rt=de>=0,nt=(0,_react.useMemo)(()=>buildStyles(O),[O]),ot=(0,_react.useCallback)(()=>{c&&Ve(()=>{(0,_index2.triggerHaptic)("selection"),Ge()})},[c,Ge,Ve]),st=(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)(ot)()}),[ot,k]),it=(0,_react.useMemo)(()=>({snapIndex:de,snapPoints:ne,expand:He,collapse:Be,close:Ge,requestClose:qe}),[de,ne,He,Be,Ge,qe]);if("inline"===b&&!xe)return null;if("modal"===b&&!be)return null;const ct=(0,_jsxRuntime.jsxs)(_reactNative.View,{collapsable:!1,style:["modal"===b?nt.backdropModal:nt.backdropInline,{backgroundColor:O.colors.scrim}],onLayout:B,testID:k,accessibilityViewIsModal:M??rt,children:[(0,_jsxRuntime.jsx)(_reactNativeGestureHandler.GestureDetector,{gesture:st,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:j,accessibilityViewIsModal:M??rt,accessibilityActions:[{name:"escape",label:"Close bottom sheet"}],onAccessibilityAction:e=>{"escape"===e.nativeEvent.actionName&&Le()},onAccessibilityEscape:Le,style:[nt.sheet,{height:se,backgroundColor:O.colors.surface,borderTopLeftRadius:O.radius.xl,borderTopRightRadius:O.radius.xl,..._corners.smoothCorners,...O.shadow.modal},G?{height:Ze,left:(A-V)/2,right:void 0,width:V,borderBottomLeftRadius:O.radius.xl,borderBottomRightRadius:O.radius.xl}:null,x,tt],children:(0,_jsxRuntime.jsxs)(SheetBody,{style:[nt.body,at],keyboardOffset:Qe,children:[G?(0,_jsxRuntime.jsx)(_reactNative.View,{style:{height:O.space.md}}):(0,_jsxRuntime.jsx)(_reactNativeGestureHandler.GestureDetector,{gesture:Ke,children:(0,_jsxRuntime.jsx)(_reactNative.View,{style:nt.handleRow,onLayout:W?Y: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:[nt.handle,{backgroundColor:O.colors.border},R]})})}),null!=y&&(0,_jsxRuntime.jsx)(_reactNative.View,{style:[nt.header,g],onLayout:W?K:void 0,children:y}),u?(0,_jsxRuntime.jsx)(_reactNativeGestureHandler.GestureDetector,{gesture:$e,children:(0,_jsxRuntime.jsx)(_reactNative.ScrollView,{ref:d,style:nt.scrollContent,onScroll:_,onContentSizeChange:re,onLayout:m,scrollEventThrottle:v,keyboardShouldPersistTaps:"always",keyboardDismissMode:"none",children:C})}):(0,_jsxRuntime.jsx)(_reactNative.View,{style:W?[nt.content,{overflow:"visible"}]:nt.content,children:W?(0,_jsxRuntime.jsx)(_reactNative.View,{onLayout:X,children:C}):C}),null!=N&&(0,_jsxRuntime.jsx)(_reactNative.View,{style:[nt.footer,w],onLayout:W?ee:void 0,children:N})]})})]}),lt=(0,_jsxRuntime.jsx)(BottomSheetContext.Provider,{value:it,children:ct});return"modal"===b?(0,_jsxRuntime.jsx)(_reactNative.Modal,{transparent:!0,visible:ve,onRequestClose:Le,onDismiss:"ios"===_reactNative.Platform.OS?Ee:void 0,statusBarTranslucent:!0,navigationBarTranslucent:!0,animationType:"none",supportedOrientations:["portrait","landscape"],children:(0,_jsxRuntime.jsxs)(_ModalSafeArea.ModalSafeArea,{onInsets:L,children:["android"===_reactNative.Platform.OS?(0,_jsxRuntime.jsx)(_reactNativeGestureHandler.GestureHandlerRootView,{style:nt.modalRoot,children:lt}):lt,(0,_jsxRuntime.jsx)(_ToastProvider.ToastHost,{})]})}):lt}),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:e.space.md,paddingBottom:e.space.xl},header:{},footer:{},handle:{width:36,height:4,borderRadius:e.radius.pill,..._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 cache,_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(!t&&e&&e.__esModule)return e;var a,r,n=Object.defineProperty,o={__proto__:null,default:e};if(Object(e)!==e)return o;if(cache||"function"!=typeof WeakMap||(cache=new WeakMap),cache){if(cache.has(e))return cache.get(e);cache.set(e,o)}for(r in e)"default"!==r&&{}.hasOwnProperty.call(e,r)&&((a=n&&Object.getOwnPropertyDescriptor(e,r))&&(a.get||a.set)?n(o,r,a):o[r]=e[r]);return o}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: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",animateMount:S=!0,handleIndicatorStyle:R,containerStyle:x,header:y,footer:N,headerStyle:g,footerStyle:w,children:C,accessibilityLabel:j,accessibilityViewIsModal:M,testID:k}=e,O=(0,_index.useTheme)(),I=(0,_usePresenceMotion.usePresenceMotion)(),T=(0,_reactNativeSafeAreaContext.useSafeAreaInsets)(),[P,E]=(0,_react.useState)(()=>_reactNative.Dimensions.get("window").height),[A,H]=(0,_react.useState)(()=>_reactNative.Dimensions.get("window").width),B=(0,_react.useCallback)(e=>{const{height:t,width:a}=e.nativeEvent.layout;t>0&&E(e=>e===t?e:t),a>0&&H(e=>e===a?e:a)},[]),D=(0,_reactNative.useWindowDimensions)(),G="dialog"===p||"auto"===p&&Math.min(D.width,D.height)>=600,V=Math.min(560,A-2*O.space.xl),[q,L]=(0,_ModalSafeArea.useModalInsets)(),F="modal"===b?q.top:T.top,J="modal"===b?q.bottom:T.bottom,W=a.includes("content"),[z,K]=useMeasuredHeight(),[Y,$]=useMeasuredHeight(),[U,X,Q]=useMeasuredHeight(),[Z,ee]=useMeasuredHeight(),te=G?O.space.md:z,ae=W?Math.min(te+(null!=y?Y:0)+U+(null!=N?Z:0)+J,P-F):0,re=(0,_react.useCallback)((e,t)=>{W&&Q(t),h?.(e,t)},[W,h,Q]),ne=(0,_react.useMemo)(()=>resolveSnapPoints(a,P,ae),[a,P,ae]),oe=P,se=ne[ne.length-1]??0,ie=(0,_reactNativeReanimated.useSharedValue)(oe),ce=(0,_reactNativeReanimated.useSharedValue)(oe),le=(0,_reactNativeReanimated.useSharedValue)(1),ue=(0,_reactNativeReanimated.useSharedValue)(-1),[de,he]=(0,_react.useState)(-1),me=(0,_react.useRef)(!1),[ve,fe]=(0,_react.useState)(!1),[be,pe]=(0,_react.useState)(!1),Se=(0,_react.useRef)(!1),Re=(0,_react.useRef)(s);Re.current=s;const[xe,ye]=(0,_react.useState)(!1),Ne=(0,_react.useRef)(!S&&"number"==typeof r&&r>=0),ge=(0,_react.useRef)(-1),we=(0,_react.useRef)(!1);we.current="modal"===b?be:xe;const Ce=(0,_react.useRef)(l);Ce.current=l;const je=(0,_react.useRef)(!1),Me=(0,_react.useRef)(!0),ke=(0,_react.useRef)([]),Oe=(0,_react.useCallback)(e=>{const t=ke.current;ke.current=[];for(const a of t)a(e)},[]);(0,_react.useEffect)(()=>(Me.current=!0,()=>{Me.current=!1,Oe(!1)}),[Oe]);const Ie=(0,_react.useCallback)(e=>{if(e<0||e>=ne.length)return oe;const t=ne[e];return G?(P-t)/2:P-t},[ne,P,oe,G]),Te=(0,_react.useCallback)(e=>{ge.current=e;de!==e&&(he(e),ue.value=e,n?.(e))},[de,ue,n]),Pe=(0,_react.useCallback)(()=>{me.current=!1,ue.value<0&&(Se.current=!0,"modal"===b?(fe(!1),"ios"!==_reactNative.Platform.OS&&pe(!1)):ye(!1))},[b,ue]),Ee=(0,_react.useCallback)(()=>{Se.current&&pe(!1)},[]);(0,_react.useEffect)(()=>{("modal"===b?!be:!xe)&&Se.current&&(Se.current=!1,Re.current?.(),Oe(!0))},[b,be,xe,Oe]);const Ae=(0,_react.useCallback)((e,t,a)=>{me.current=!0,o?.(t,a),ie.value=(0,_reactNativeReanimated.withSpring)(e,SPRING_CONFIG,e=>{"worklet";e&&(0,_reactNativeReanimated.runOnJS)(Pe)()})},[o,ie,Pe]),He=(0,_react.useCallback)(e=>{const t="number"==typeof e?clamp(e,0,ne.length-1):de>=0?de:0,a=ue.value,r=Ie(t);return Se.current=!1,Oe(!1),"modal"===b?(pe(!0),fe(!0)):ye(!0),a<0&&Ne.current?(ie.value=r,le.value=1,Te(t),void o?.(a,t)):a<0&&I.reduced?(ie.value=r,le.value=0,le.value=(0,_reactNativeReanimated.withTiming)(1,{duration:I.duration("fast"),easing:_reactNativeReanimated.Easing.bezier(...O.motion.ease.decelerate),reduceMotion:_usePresenceMotion.PRESENCE_REDUCE_MOTION}),Te(t),void o?.(a,t)):(a<0&&(ie.value=oe,le.value=1),Te(t),void Ae(r,a,t))},[Ae,oe,de,ue,b,o,I,le,ne.length,Te,Oe,O.motion.ease.decelerate,ie,Ie]),Be=(0,_react.useCallback)(()=>{if(0===ne.length)return;const e=ue.value,t=Ie(0);Te(0),Ae(t,e,0)},[Ae,ue,ne.length,Te,Ie]),De=(0,_react.useCallback)(()=>new Promise(e=>{if(ge.current<0)return void(we.current?ke.current.push(e):e(!0));ke.current.push(e),Ne.current=!1;const t=ue.value;Te(-1),me.current=!0,o?.(t,-1);const a=I.reduced?le:ie,r=I.reduced?0:oe;a.value=(0,_reactNativeReanimated.withTiming)(r,{duration:I.duration("fast"),easing:_reactNativeReanimated.Easing.bezier(...O.motion.ease.accelerate),reduceMotion:_usePresenceMotion.PRESENCE_REDUCE_MOTION},e=>{"worklet";e&&(0,_reactNativeReanimated.runOnJS)(Pe)()})}),[oe,ue,Pe,o,I,le,Te,ie,O.motion.ease.accelerate]),Ge=(0,_react.useCallback)(async()=>{await De()},[De]),Ve=(0,_react.useCallback)((e,t,a)=>{const r=Ce.current;if(!r)return void e();if(je.current)return void t?.();const n=r();"boolean"!=typeof n?(je.current=!0,a?.(),n.then(a=>{je.current=!1,a&&Me.current&&ge.current>=0?e():t?.()},e=>{throw je.current=!1,e})):(n?e:t)?.()},[]),qe=(0,_react.useCallback)(()=>new Promise(e=>{ge.current<0?De().then(e):Ve(()=>{De().then(e)},()=>e(!1))}),[De,Ve]),Le=(0,_react.useCallback)(()=>{c&&qe()},[c,qe]);(0,_react.useImperativeHandle)(t,()=>({expand:He,collapse:Be,close:Ge,requestClose:qe}),[He,Be,Ge,qe]),(0,_react.useEffect)(()=>{"number"==typeof r&&r!==de&&(-1===r?Ge():He(r))},[r]);const Fe=(0,_react.useRef)({hostHeight:P,contentSnap:ae});(0,_react.useEffect)(()=>{const e=Fe.current;if(e.hostHeight===P&&e.contentSnap===ae)return;if(Fe.current={hostHeight:P,contentSnap:ae},e.hostHeight===P&&ue.value<0)return;const t=Ie(ue.value);ie.value=Ne.current?t:(0,_reactNativeReanimated.withSpring)(t,SPRING_CONFIG)},[P,ae]);const Je=P-se,We=(0,_react.useMemo)(()=>ne.map(e=>P-e),[ne,P]),ze=(0,_react.useCallback)(()=>{const e=ge.current;e<0||Ae(Ie(e),e,e)},[Ae,Ie]),Ke=(0,_react.useCallback)((e,t)=>{const a=ue.value;-1!==e?(Te(e),Ae(t,a,e)):Ve(()=>{_reactNative.Keyboard.dismiss(),(0,_index2.triggerHaptic)("selection"),Ge()},ze,ze)},[Ae,Ge,ue,Ve,Te,ze]),Ye=(0,_react.useMemo)(()=>_reactNativeGestureHandler.Gesture.Native().withTestId(k?`${k}-content-gesture`:"bottom-sheet-content-gesture"),[k]),$e=(0,_react.useMemo)(()=>{const e=We,t=oe,a=Je,r=i;return _reactNativeGestureHandler.Gesture.Pan().withTestId(k?`${k}-pan-gesture`:"bottom-sheet-pan-gesture").activeOffsetY([-10,10]).failOffsetX([-15,15]).onStart(()=>{"worklet";ce.value=ie.value}).onUpdate(e=>{"worklet";const t=ce.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)(Ke)(-1,t):void(0,_reactNativeReanimated.runOnJS)(Ke)(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)(Ke)(-1,t):(0,_reactNativeReanimated.runOnJS)(Ke)(o,e[o])})},[oe,ce,i,Ke,Je,We,k,ie]),{height:Ue}=(0,_reactNativeKeyboardController.useReanimatedKeyboardAnimation)(),Xe="shift"===f,Qe=(0,_reactNativeReanimated.useDerivedValue)(()=>Xe?Ue.value:0),Ze=ne[de>=0?de:0]??se,et=O.space.md,tt=(0,_reactNativeReanimated.useAnimatedStyle)(()=>{if(G){const e=Qe.value,t=P+e-Ze-et,a=e<0&&ie.value>t?t:ie.value;return{top:a<F?F:a,opacity:le.value}}const e=ie.value+Qe.value,t=Qe.value<0?F:Je;return{top:e<t?t:e,opacity:le.value}}),at=(0,_reactNativeReanimated.useAnimatedStyle)(()=>{const e=Qe.value;if(G){const t=P+e-Ze-et,a=e<0&&ie.value>t?t:ie.value,r=P+e-et-(a<F?F:a);return{height:r<0?0:r>Ze?Ze:r}}const t=e<0?F:Je,a=ie.value+e,r=P+e-(a<t?t:a);return{height:r<0?0:r>se?se:r}}),rt=de>=0,nt=(0,_react.useMemo)(()=>buildStyles(O),[O]),ot=(0,_react.useCallback)(()=>{c&&Ve(()=>{(0,_index2.triggerHaptic)("selection"),Ge()})},[c,Ge,Ve]),st=(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)(ot)()}),[ot,k]),it=(0,_react.useMemo)(()=>({snapIndex:de,snapPoints:ne,expand:He,collapse:Be,close:Ge,requestClose:qe}),[de,ne,He,Be,Ge,qe]);if("inline"===b&&!xe)return null;if("modal"===b&&!be)return null;const ct=(0,_jsxRuntime.jsxs)(_reactNative.View,{collapsable:!1,style:["modal"===b?nt.backdropModal:nt.backdropInline,{backgroundColor:O.colors.scrim}],onLayout:B,testID:k,accessibilityViewIsModal:M??rt,children:[(0,_jsxRuntime.jsx)(_reactNativeGestureHandler.GestureDetector,{gesture:st,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:j,accessibilityViewIsModal:M??rt,accessibilityActions:[{name:"escape",label:"Close bottom sheet"}],onAccessibilityAction:e=>{"escape"===e.nativeEvent.actionName&&Le()},onAccessibilityEscape:Le,style:[nt.sheet,{height:se,backgroundColor:O.colors.surface,borderTopLeftRadius:O.radius.xl,borderTopRightRadius:O.radius.xl,..._corners.smoothCorners,...O.shadow.modal},G?{height:Ze,left:(A-V)/2,right:void 0,width:V,borderBottomLeftRadius:O.radius.xl,borderBottomRightRadius:O.radius.xl}:null,x,tt],children:(0,_jsxRuntime.jsxs)(SheetBody,{style:[nt.body,at],keyboardOffset:Qe,children:[G?(0,_jsxRuntime.jsx)(_reactNative.View,{style:{height:O.space.md}}):(0,_jsxRuntime.jsx)(_reactNativeGestureHandler.GestureDetector,{gesture:$e,children:(0,_jsxRuntime.jsx)(_reactNative.View,{style:nt.handleRow,onLayout:W?K: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:[nt.handle,{backgroundColor:O.colors.border},R]})})}),null!=y&&(0,_jsxRuntime.jsx)(_reactNative.View,{style:[nt.header,g],onLayout:W?$:void 0,children:y}),u?(0,_jsxRuntime.jsx)(_reactNativeGestureHandler.GestureDetector,{gesture:Ye,children:(0,_jsxRuntime.jsx)(_reactNative.ScrollView,{ref:d,style:nt.scrollContent,onScroll:_,onContentSizeChange:re,onLayout:m,scrollEventThrottle:v,keyboardShouldPersistTaps:"always",keyboardDismissMode:"none",children:C})}):(0,_jsxRuntime.jsx)(_reactNative.View,{style:W?[nt.content,{overflow:"visible"}]:nt.content,children:W?(0,_jsxRuntime.jsx)(_reactNative.View,{onLayout:X,children:C}):C}),null!=N&&(0,_jsxRuntime.jsx)(_reactNative.View,{style:[nt.footer,w],onLayout:W?ee:void 0,children:N})]})})]}),lt=(0,_jsxRuntime.jsx)(BottomSheetContext.Provider,{value:it,children:ct});return"modal"===b?(0,_jsxRuntime.jsx)(_reactNative.Modal,{transparent:!0,visible:ve,onRequestClose:Le,onDismiss:"ios"===_reactNative.Platform.OS?Ee:void 0,statusBarTranslucent:!0,navigationBarTranslucent:!0,animationType:"none",supportedOrientations:["portrait","landscape"],children:(0,_jsxRuntime.jsxs)(_ModalSafeArea.ModalSafeArea,{onInsets:L,children:["android"===_reactNative.Platform.OS?(0,_jsxRuntime.jsx)(_reactNativeGestureHandler.GestureHandlerRootView,{style:nt.modalRoot,children:lt}):lt,(0,_jsxRuntime.jsx)(_ToastProvider.ToastHost,{})]})}):lt}),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:e.space.md,paddingBottom:e.space.xl},header:{},footer:{},handle:{width:36,height:4,borderRadius:e.radius.pill,..._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.Card=void 0;var cache,_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"),_themeStyles=require("../../utils/themeStyles.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(!t&&e&&e.__esModule)return e;var i,s,r=Object.defineProperty,n={__proto__:null,default:e};if(Object(e)!==e)return n;if(cache||"function"!=typeof WeakMap||(cache=new WeakMap),cache){if(cache.has(e))return cache.get(e);cache.set(e,n)}for(s in e)"default"!==s&&{}.hasOwnProperty.call(e,s)&&((i=r&&Object.getOwnPropertyDescriptor(e,s))&&(i.get||i.set)?r(n,s,i):n[s]=e[s]);return n}const BACKGROUND_TOKENS=["bg","bg-subtle","bg-muted","surface","scrim","surface-inverse"],paddingMap={none:"none",sm:"sm",md:"lg",lg:"xl",xl:"2xl"},Card=exports.Card=_react.default.memo((0,_react.forwardRef)((e,t)=>{const{children:i,variant:s="elevated",elevation:r="card",radius:n="lg",padding:a="md",interactive:o=!1,bg:l,header:c,title:d,titleFont:u="sans",lead:h,action:x,headerActions:m,collapsible:_=!1,collapsed:p,defaultCollapsed:b=!1,onCollapsedChange:g,collapsedSummary:y,onRemove:j,removeLabel:v="Remove",separatorHeight:R=_reactNative.StyleSheet.hairlineWidth,footer:f,imageSource:S,imageHeight:C=160,imageAspectRatio:w,imageOverlay:A,loading:N=!1,gradient:q,onPress:k,haptic:F,contextMenu:T,accessibilityLabel:B,accessibilityHint:P,accessibilityRole:I,style:L,containerStyle:M,headerStyle:V,bodyStyle:H,footerStyle:O,borderRadius:z,testID:W,onLayout:D,...U}=e,E=(0,_index.useTheme)(),G=o||"function"==typeof k,K=(0,_useContextMenu.useContextMenu)(T,{haptic:F||!1,testID:W,accessibilityActions:U.accessibilityActions,onAccessibilityAction:U.onAccessibilityAction}),$=(0,_react.useMemo)(()=>(0,_mergeRefs.mergeRefs)(t,K.hostRef),[t,K.hostRef]),J=G||K.enabled,{style:Q,pressIn:X,pressOut:Y}=(0,_usePressAnimation.usePressAnimation)({enabled:J}),Z=stylesFor(E),ee=Boolean(S),te=E.space[paddingMap[a]],ie=(0,_react.useMemo)(()=>q?"string"==typeof q?E.settings.gradients[q]??null:q:null,[q,E.settings.gradients]),se="flat"===s,re=se?E.radius.none:z??E.radius[n],ne=resolveBackground(E,l),[ae,oe]=(0,_useControllableState.useControllableState)({value:p,defaultValue:b,onChange:g}),le=_&&ae,ce=hasBuiltInHeaderContent(e),de=Boolean(c)||ce,ue=(0,_SquircleFill.useSquircle)(!ee&&!ie&&!se,re,D),he=_reactNative.StyleSheet.flatten([L,M])??{},xe=he.backgroundColor,me=he.borderColor,pe=xe??ne??("filled"===s?E.colors["bg-subtle"]:E.colors.surface),be="outlined"===s?E.size.border:0,ge=me??E.colors.border,ye="none"===r?void 0:E.shadow[r],je="elevated"===s&&(0,_shadows.supportsBoxShadow)()&&ye?(0,_shadows.toBoxShadow)(ye):void 0,ve=ue.active&&"elevated"===s&&!je,Re=ue.active&&!ve?{backgroundColor:"transparent",borderColor:"transparent"}:null,fe=(0,_react.useMemo)(()=>{const e={borderRadius:ve&&ue.size?(0,_squircle.squircleHostRadius)(ue.size.width,ue.size.height,re):re,..._corners.smoothCorners,padding:ee?E.space.none:te,overflow:ue.active?"visible":"hidden"};switch(s){case"flat":return{...e,backgroundColor:ne??E.colors.surface,borderBottomWidth:R,borderBottomColor:E.colors.border};case"outlined":return{...e,backgroundColor:ue.active?"transparent":ne??E.colors.surface,borderWidth:E.size.border,borderColor:ue.active?"transparent":E.colors.border};case"filled":return{...e,backgroundColor:ue.active?"transparent":ne??E.colors["bg-subtle"]};default:return{...e,backgroundColor:ne??E.colors.surface,...je?{boxShadow:je}:ye}}},[E,s,ye,re,ee,te,ue.active,ue.size,je,ve,ne,R]),Se=(0,_react.useMemo)(()=>({..."number"==typeof w?{width:"100%",aspectRatio:w}:{width:"100%",height:C},borderTopLeftRadius:re,borderTopRightRadius:re,borderBottomLeftRadius:E.radius.none,borderBottomRightRadius:E.radius.none,..._corners.smoothCorners}),[E,re,w,C]),Ce="string"==typeof d?d:"",we=(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:Z.titleColumn,children:["string"==typeof d?(0,_jsxRuntime.jsx)(_index3.Text,{variant:"title",accessibilityRole:"header",style:titleFaceFor(E,u),children:d}):d,h?(0,_jsxRuntime.jsx)(_index3.Text,{variant:"bodySmall",style:Z.lead,children:h}):null,le&&y?(0,_jsxRuntime.jsx)(_index3.Text,{variant:"caption",style:Z.lead,children:y}):null]}),isCardTextAction(x)?(0,_jsxRuntime.jsx)(CardTextActionButton,{action:x,haptic:F}):x?(0,_jsxRuntime.jsx)(_reactNative.View,{style:Z.actionNode,children:x}):null,m,_?(0,_jsxRuntime.jsx)(CardIconAction,{icon:le?"chevron-down":"chevron-up",label:`${le?"Show":"Hide"} ${Ce}`.trim(),expanded:!le,onPress:()=>oe(!le),haptic:F}):null,j?(0,_jsxRuntime.jsx)(CardIconAction,{icon:"trash",label:v,onPress:j,color:E.colors["danger-text"],haptic:F}):null]}),Ae=(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[de?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[Z.header,!c&&Z.headerRow,le&&Z.headerFolded,V],children:c??we}):null,le?null:(0,_jsxRuntime.jsx)(_reactNative.View,{style:[de||f?Z.body:null,H],children:i}),f&&!le?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[Z.footer,O],children:f}):null]}),Ne=ee?(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:Z.imageWrapper,children:[(0,_jsxRuntime.jsx)(_reactNative.Image,{source:S,resizeMode:"cover",style:Se,accessibilityLabel:"",accessible:!1}),A?(0,_jsxRuntime.jsx)(_reactNative.View,{pointerEvents:"box-none",style:Z.imageOverlay,children:A}):null]}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:{padding:te},children:Ae})]}):Ae,qe=ie?(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_index.Gradient,{gradient:ie,style:_reactNative.StyleSheet.absoluteFill}),Ne]}):ue.active&&ue.size?(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_SquircleFill.SquircleFill,{width:ue.size.width,height:ue.size.height,radius:re,fill:pe,stroke:be?ge:void 0,strokeWidth:be,outset:be}),Ne]}):Ne;let ke;if(J){const handlePress=e=>{G&&(F&&(0,_hapticUtils.triggerHaptic)(F),k?.(e))};ke=(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:Q,children:(0,_jsxRuntime.jsx)(_reactNative.Pressable,{ref:$,onPress:handlePress,onPressIn:X,onPressOut:Y,android_ripple:{color:E.colors["surface-pressed"],borderless:!1},accessibilityRole:I??(G?"button":void 0),accessibilityLabel:B,accessibilityHint:P,testID:W,onLayout:ue.onLayout,style:[fe,L,M,Re],...U,...K.hostProps,children:qe})})}else ke=(0,_jsxRuntime.jsx)(_reactNative.View,{ref:t,accessibilityLabel:B,accessibilityHint:P,accessibilityRole:I,testID:W,onLayout:ue.onLayout,style:[fe,L,M,Re],...U,children:qe});return N?(0,_jsxRuntime.jsx)(CardSkeleton,{...e}):K.enabled?(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[ke,K.renderSurface((0,_jsxRuntime.jsx)(_reactNative.View,{style:[fe,L,M,Re,Z.preview],children:qe}))]}):ke}));Card.displayName="Card";const CardSkeleton=({variant:e="elevated",elevation:t,radius:i="lg",padding:s="md",bg:r,header:n,footer:a,imageSource:o,imageHeight:l=160,imageAspectRatio:c,borderRadius:d,containerStyle:u,headerStyle:h,bodyStyle:x,footerStyle:m,style:_,...p})=>{const b=(0,_index.useTheme)(),g=paddingMap[s],y=b.space[g],j="flat"===e?b.radius.none:d??b.radius[i],v=void 0!==n||hasBuiltInHeaderContent(p),R=resolveBackground(b,r)??b.colors.surface,f="outlined"===e?1:0,S="outlined"===e?b.colors.border: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!==o?(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:b.space.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:b.text.base.size,lastLineWidth:"55%"})}),void 0!==a?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[{padding:y,paddingTop:b.space.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:s,color:r,haptic:n})=>{const a=(0,_index.useTheme)();return(0,_jsxRuntime.jsx)(_reactNative.Pressable,{accessibilityRole:"button",accessibilityLabel:t,accessibilityState:void 0===s?void 0:{expanded:s},"aria-expanded":s,onPress:()=>{n&&(0,_hapticUtils.triggerHaptic)(n),i()},style:iconActionStyle,children:(0,_jsxRuntime.jsx)(_AppIcon.AppIcon,{name:e,size:20,color:r??a.colors["text-body"]})})},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"},titleFaceFor=(e,t)=>"serif"===t?(0,_index.fontFor)(e,"semibold","display"):{fontFamily:void 0,...(0,_index.fontFor)(e,"semibold")},resolveBackground=(e,t)=>{if(null!=t)return BACKGROUND_TOKENS.includes(t)?e.colors[t]:t},buildStyles=e=>_reactNative.StyleSheet.create({header:{marginBottom:e.space.md},headerRow:{flexDirection:"row",alignItems:"center",gap:e.space.sm},headerFolded:{marginBottom:e.space.none},titleColumn:{flex:1},lead:{marginTop:e.space.xs},actionNode:{flexShrink:0},body:{flexShrink:1},footer:{marginTop:e.space.md},imageWrapper:{position:"relative"},imageOverlay:{..._reactNative.StyleSheet.absoluteFill},preview:{margin:e.space.none,marginTop:e.space.none,marginBottom:e.space.none,marginLeft:e.space.none,marginRight:e.space.none,marginStart:e.space.none,marginEnd:e.space.none,marginHorizontal:e.space.none,marginVertical:e.space.none,position:"relative",top:0,left:0,width:"100%",height:"100%"}}),stylesFor=(0,_themeStyles.themeStyles)(buildStyles);var _default=exports.default=Card;
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.Card=void 0;var cache,_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"),_themeStyles=require("../../utils/themeStyles.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(!t&&e&&e.__esModule)return e;var i,s,r=Object.defineProperty,n={__proto__:null,default:e};if(Object(e)!==e)return n;if(cache||"function"!=typeof WeakMap||(cache=new WeakMap),cache){if(cache.has(e))return cache.get(e);cache.set(e,n)}for(s in e)"default"!==s&&{}.hasOwnProperty.call(e,s)&&((i=r&&Object.getOwnPropertyDescriptor(e,s))&&(i.get||i.set)?r(n,s,i):n[s]=e[s]);return n}const BACKGROUND_TOKENS=["bg","bg-subtle","bg-muted","surface","scrim","surface-inverse"],paddingMap={none:"none",sm:"sm",md:"lg",lg:"xl",xl:"2xl"},Card=exports.Card=_react.default.memo((0,_react.forwardRef)((e,t)=>{const{children:i,variant:s="elevated",elevation:r="card",radius:n="lg",padding:a="md",interactive:o=!1,bg:l,header:c,title:d,titleFont:u="sans",lead:h,action:x,headerActions:m,collapsible:_=!1,collapsed:p,defaultCollapsed:b=!1,onCollapsedChange:g,collapsedSummary:y,onRemove:j,removeLabel:v="Remove",separatorHeight:R=_reactNative.StyleSheet.hairlineWidth,footer:f,imageSource:S,imageHeight:C=160,imageAspectRatio:w,imageOverlay:q,loading:A=!1,gradient:N,onPress:k,haptic:F,contextMenu:T,accessibilityLabel:B,accessibilityHint:P,accessibilityRole:I,style:L,containerStyle:V,headerStyle:H,bodyStyle:M,footerStyle:z,borderRadius:O,testID:W,onLayout:D,...U}=e,E=(0,_index.useTheme)(),G=o||"function"==typeof k,K=(0,_useContextMenu.useContextMenu)(T,{haptic:F||!1,testID:W,accessibilityActions:U.accessibilityActions,onAccessibilityAction:U.onAccessibilityAction}),$=(0,_react.useMemo)(()=>(0,_mergeRefs.mergeRefs)(t,K.hostRef),[t,K.hostRef]),J=G||K.enabled,{style:Q,pressIn:X,pressOut:Y}=(0,_usePressAnimation.usePressAnimation)({enabled:J}),Z=stylesFor(E),ee=Boolean(S),te=E.space[paddingMap[a]],ie=(0,_react.useMemo)(()=>N?"string"==typeof N?E.settings.gradients[N]??null:N:null,[N,E.settings.gradients]),se="flat"===s,re=se?E.radius.none:O??E.radius[n],ne=resolveBackground(E,l),[ae,oe]=(0,_useControllableState.useControllableState)({value:p,defaultValue:b,onChange:g}),le=_&&ae,ce=hasBuiltInHeaderContent(e),de=Boolean(c)||ce,ue=(0,_SquircleFill.useSquircle)(!ee&&!ie&&!se,re,D),he=_reactNative.StyleSheet.flatten([L,V])??{},xe=he.backgroundColor,me=he.borderColor,pe=xe??ne??("filled"===s?E.colors["bg-subtle"]:E.colors.surface),be="outlined"===s?E.size.border:0,ge=me??E.colors.border,ye="none"===r?void 0:E.shadow[r],je="elevated"===s&&(0,_shadows.supportsBoxShadow)()&&ye?(0,_shadows.toBoxShadow)(ye):void 0,ve=ue.active&&"elevated"===s&&!je,Re=ue.active&&!ve?{backgroundColor:"transparent",borderColor:"transparent"}:null,fe=(0,_react.useMemo)(()=>{const e={borderRadius:ve&&ue.size?(0,_squircle.squircleHostRadius)(ue.size.width,ue.size.height,re):re,..._corners.smoothCorners,padding:ee||ue.active?E.space.none:te,overflow:ue.active?"visible":"hidden"};switch(s){case"flat":return{...e,backgroundColor:ne??E.colors.surface,borderBottomWidth:R,borderBottomColor:E.colors.border};case"outlined":return{...e,backgroundColor:ue.active?"transparent":ne??E.colors.surface,borderWidth:E.size.border,borderColor:ue.active?"transparent":E.colors.border};case"filled":return{...e,backgroundColor:ue.active?"transparent":ne??E.colors["bg-subtle"]};default:return{...e,backgroundColor:ne??E.colors.surface,...je?{boxShadow:je}:ye}}},[E,s,ye,re,ee,te,ue.active,ue.size,je,ve,ne,R]),Se=(0,_react.useMemo)(()=>({..."number"==typeof w?{width:"100%",aspectRatio:w}:{width:"100%",height:C},borderTopLeftRadius:re,borderTopRightRadius:re,borderBottomLeftRadius:E.radius.none,borderBottomRightRadius:E.radius.none,..._corners.smoothCorners}),[E,re,w,C]),Ce="string"==typeof d?d:"",we=(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:Z.titleColumn,children:["string"==typeof d?(0,_jsxRuntime.jsx)(_index3.Text,{variant:"title",accessibilityRole:"header",style:titleFaceFor(E,u),children:d}):d,h?(0,_jsxRuntime.jsx)(_index3.Text,{variant:"bodySmall",style:Z.lead,children:h}):null,le&&y?(0,_jsxRuntime.jsx)(_index3.Text,{variant:"caption",style:Z.lead,children:y}):null]}),isCardTextAction(x)?(0,_jsxRuntime.jsx)(CardTextActionButton,{action:x,haptic:F}):x?(0,_jsxRuntime.jsx)(_reactNative.View,{style:Z.actionNode,children:x}):null,m,_?(0,_jsxRuntime.jsx)(CardIconAction,{icon:le?"chevron-down":"chevron-up",label:`${le?"Show":"Hide"} ${Ce}`.trim(),expanded:!le,onPress:()=>oe(!le),haptic:F}):null,j?(0,_jsxRuntime.jsx)(CardIconAction,{icon:"trash",label:v,onPress:j,color:E.colors["danger-text"],haptic:F}):null]}),qe=(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[de?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[Z.header,!c&&Z.headerRow,le&&Z.headerFolded,H],children:c??we}):null,le?null:(0,_jsxRuntime.jsx)(_reactNative.View,{style:[de||f?Z.body:null,M],children:i}),f&&!le?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[Z.footer,z],children:f}):null]}),Ae=ee?(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:Z.imageWrapper,children:[(0,_jsxRuntime.jsx)(_reactNative.Image,{source:S,resizeMode:"cover",style:Se,accessibilityLabel:"",accessible:!1}),q?(0,_jsxRuntime.jsx)(_reactNative.View,{pointerEvents:"box-none",style:Z.imageOverlay,children:q}):null]}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:{padding:te},children:qe})]}):qe,Ne=ie?(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_index.Gradient,{gradient:ie,style:_reactNative.StyleSheet.absoluteFill}),Ae]}):ue.active&&ue.size?(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_SquircleFill.SquircleFill,{width:ue.size.width,height:ue.size.height,radius:re,fill:pe,stroke:be?ge:void 0,strokeWidth:be,outset:be}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:[Z.squircleClip,{padding:te,borderRadius:ue.size?(0,_squircle.squircleHostRadius)(ue.size.width,ue.size.height,re):re}],children:Ae})]}):Ae;let ke;if(J){const handlePress=e=>{G&&(F&&(0,_hapticUtils.triggerHaptic)(F),k?.(e))};ke=(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:Q,children:(0,_jsxRuntime.jsx)(_reactNative.Pressable,{ref:$,onPress:handlePress,onPressIn:X,onPressOut:Y,accessibilityRole:I??(G?"button":void 0),accessibilityLabel:B,accessibilityHint:P,testID:W,onLayout:ue.onLayout,style:[fe,L,V,Re],...U,...K.hostProps,children:Ne})})}else ke=(0,_jsxRuntime.jsx)(_reactNative.View,{ref:t,accessibilityLabel:B,accessibilityHint:P,accessibilityRole:I,testID:W,onLayout:ue.onLayout,style:[fe,L,V,Re],...U,children:Ne});return A?(0,_jsxRuntime.jsx)(CardSkeleton,{...e}):K.enabled?(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[ke,K.renderSurface((0,_jsxRuntime.jsx)(_reactNative.View,{style:[fe,L,V,Re,Z.preview],children:Ne}))]}):ke}));Card.displayName="Card";const CardSkeleton=({variant:e="elevated",elevation:t,radius:i="lg",padding:s="md",bg:r,header:n,footer:a,imageSource:o,imageHeight:l=160,imageAspectRatio:c,borderRadius:d,containerStyle:u,headerStyle:h,bodyStyle:x,footerStyle:m,style:_,...p})=>{const b=(0,_index.useTheme)(),g=paddingMap[s],y=b.space[g],j="flat"===e?b.radius.none:d??b.radius[i],v=void 0!==n||hasBuiltInHeaderContent(p),R=resolveBackground(b,r)??b.colors.surface,f="outlined"===e?1:0,S="outlined"===e?b.colors.border: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!==o?(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:b.space.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:b.text.base.size,lastLineWidth:"55%"})}),void 0!==a?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[{padding:y,paddingTop:b.space.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:s,color:r,haptic:n})=>{const a=(0,_index.useTheme)();return(0,_jsxRuntime.jsx)(_reactNative.Pressable,{accessibilityRole:"button",accessibilityLabel:t,accessibilityState:void 0===s?void 0:{expanded:s},"aria-expanded":s,onPress:()=>{n&&(0,_hapticUtils.triggerHaptic)(n),i()},style:iconActionStyle,children:(0,_jsxRuntime.jsx)(_AppIcon.AppIcon,{name:e,size:20,color:r??a.colors["text-body"]})})},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"},titleFaceFor=(e,t)=>"serif"===t?(0,_index.fontFor)(e,"semibold","display"):{fontFamily:void 0,...(0,_index.fontFor)(e,"semibold")},resolveBackground=(e,t)=>{if(null!=t)return BACKGROUND_TOKENS.includes(t)?e.colors[t]:t},buildStyles=e=>_reactNative.StyleSheet.create({header:{marginBottom:e.space.md},headerRow:{flexDirection:"row",alignItems:"center",gap:e.space.sm},headerFolded:{marginBottom:e.space.none},titleColumn:{flex:1},lead:{marginTop:e.space.xs},actionNode:{flexShrink:0},body:{flexShrink:1},footer:{marginTop:e.space.md},imageWrapper:{position:"relative"},imageOverlay:{..._reactNative.StyleSheet.absoluteFill},squircleClip:{flexGrow:1,overflow:"hidden",..._corners.smoothCorners},preview:{margin:e.space.none,marginTop:e.space.none,marginBottom:e.space.none,marginLeft:e.space.none,marginRight:e.space.none,marginStart:e.space.none,marginEnd:e.space.none,marginHorizontal:e.space.none,marginVertical:e.space.none,position:"relative",top:0,left:0,width:"100%",height:"100%"}}),stylesFor=(0,_themeStyles.themeStyles)(buildStyles);var _default=exports.default=Card;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.DatePicker=void 0;var _react=require("react"),_reactNative=require("react-native"),_reactNativeGestureHandler=require("react-native-gesture-handler"),_useDragToDismiss=require("../../hooks/useDragToDismiss.js"),_usePresenceMotion=require("../../hooks/usePresenceMotion.js"),_index=require("../../theme/index.js"),_index2=require("../../utils/index.js"),_color=require("../../utils/color.js"),_corners=require("../../utils/corners.js"),_hitSlop=require("../../utils/hitSlop.js"),_defaultIcons=require("../AppIcon/defaultIcons.js"),_ModalSafeArea=require("../ModalSafeArea/ModalSafeArea.js"),_index3=require("../PickerTrigger/index.js"),_ToastProvider=require("../Toast/ToastProvider.js"),_jsxRuntime=require("react/jsx-runtime");const NAV_BUTTON_SIZE=36,AnimatedGestureRoot=_reactNative.Animated.createAnimatedComponent(_reactNativeGestureHandler.GestureHandlerRootView),GRID_SIZE=12,DECADE_SPAN=10,startOfDay=e=>new Date(e.getFullYear(),e.getMonth(),e.getDate()),isSameDay=(e,t)=>e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth()&&e.getDate()===t.getDate(),toIso=e=>`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,"0")}-${String(e.getDate()).padStart(2,"0")}`,addMonths=(e,t)=>new Date(e.getFullYear(),e.getMonth()+t,1),buildMonthMatrix=(e,t)=>{const a=e.getFullYear(),r=e.getMonth(),i=(new Date(a,r,1).getDay()-t+7)%7,s=[];for(let e=0;e<42;e+=1){const t=new Date(a,r,1-i+e);s.push({date:t,inMonth:t.getMonth()===r,iso:toIso(t)})}return s},weekdayLabels=(e,t)=>{const a=new Intl.DateTimeFormat(e,{weekday:"short"}),r=[];for(let e=0;e<7;e+=1){const i=new Date(1970,0,4+(t+e)%7);r.push(a.format(i))}return r},formatMonthYear=(e,t)=>new Intl.DateTimeFormat(t,{month:"long",year:"numeric"}).format(e),decadeStartFor=e=>10*Math.floor(e/10),buildYearCells=e=>{const t=e-4;return Array.from({length:12},(e,a)=>t+a)},buildDecadeCells=e=>{const t=decadeStartFor(e)-40;return Array.from({length:12},(e,a)=>t+10*a)},DatePicker=e=>{const{value:t,onChange:a,onClose:r,minDate:i,maxDate:s,disabledDates:n,mode:o="modal",locale:l="en-IN",weekStartsOn:c=0,title:d="Select Date",confirmLabel:u="Confirm",cancelLabel:m="Cancel",style:_,containerStyle:g,headerLabelStyle:x,navButtonStyle:y,footerButtonStyle:h,haptic:b,testID:p,label:v,placeholder:f,helperText:j,error:N,required:R,disabled:w,size:D,variant:C,clearable:S,onClear:A,formatValue:M,triggerStyle:T}=e,V=void 0!==e.visible,[k,P]=(0,_react.useState)(!1),I=V?e.visible:k,F=V?p:p?`${p}-calendar`:void 0,Y=(0,_index.useTheme)(),L=(0,_usePresenceMotion.usePresenceMotion)(),[z,B]=(0,_ModalSafeArea.useModalInsets)(),$=(0,_react.useMemo)(()=>buildStyles(Y),[Y]),[q,H]=(0,_react.useState)(()=>startOfDay(new Date));(0,_react.useEffect)(()=>{I&&H(startOfDay(new Date))},[I]);const E=t?startOfDay(t):q,[O,W]=(0,_react.useState)(E),[G,X]=(0,_react.useState)(t?startOfDay(t):null),[Z,U]=(0,_react.useState)("days"),J=(0,_react.useRef)((0,_index.createAnimatedValue)(0)).current,K=(0,_react.useRef)((0,_index.createAnimatedValue)(0)).current,Q=(0,_react.useRef)((0,_index.createAnimatedValue)(0)).current,ee=(0,_react.useRef)(0),te=(0,_react.useRef)((0,_index.createAnimatedValue)(0)).current,ae=(0,_react.useRef)((0,_index.createAnimatedValue)(1)).current,re=(0,_react.useRef)((0,_index.createAnimatedValue)(1)).current,ie=(0,_react.useRef)((0,_index.createAnimatedValue)(1)).current,se=(0,_react.useRef)((0,_index.createAnimatedValue)(1)).current,ne=(0,_react.useRef)((0,_index.createAnimatedValue)(1)).current;(0,_react.useEffect)(()=>{if(t){const e=startOfDay(t);X(e),W(e)}else X(null)},[t]);const oe=(0,_react.useMemo)(()=>{const e=new Set;return n?.forEach(t=>e.add(toIso(startOfDay(t)))),e},[n]),le=(0,_react.useMemo)(()=>i?startOfDay(i):null,[i]),ce=(0,_react.useMemo)(()=>s?startOfDay(s):null,[s]),de=(0,_react.useCallback)(e=>!!(le&&e.getTime()<le.getTime())||(!!(ce&&e.getTime()>ce.getTime())||!!oe.has(toIso(e))),[le,ce,oe]),ue=(0,_react.useMemo)(()=>buildMonthMatrix(O,c),[O,c]),me=(0,_react.useMemo)(()=>buildYearCells(O.getFullYear()),[O]),ge=(0,_react.useMemo)(()=>buildDecadeCells(O.getFullYear()),[O]),xe=(0,_react.useMemo)(()=>weekdayLabels(l,c),[l,c]),ye=(0,_react.useMemo)(()=>new Intl.DateTimeFormat(l,{weekday:"long",year:"numeric",month:"long",day:"numeric"}),[l]),he=(0,_react.useMemo)(()=>{if("days"===Z)return formatMonthYear(O,l);if("years"===Z){return`${me[0]} - ${me[me.length-1]}`}return`${ge[0]} - ${ge[ge.length-1]+9}`},[O,ge,l,Z,me]),be=(0,_react.useCallback)(e=>!!(le&&e<le.getFullYear())||!!(ce&&e>ce.getFullYear()),[le,ce]),pe=(0,_react.useCallback)(e=>!!(le&&e+10-1<le.getFullYear())||!!(ce&&e>ce.getFullYear()),[le,ce]),ve=(0,_react.useCallback)(e=>{!1!==b&&(0,_index2.triggerHaptic)("impactLight");const t=e>0?1:-1,a=Y.motion.duration.fast,r=Y.motion.duration.fast,[i]=L.range(32*-t,0),[s]=L.range(32*t,0),n=L.reduced?L.duration("fast"):a,o=L.reduced?L.duration("fast"):r;_reactNative.Animated.sequence([_reactNative.Animated.parallel([_reactNative.Animated.timing(te,{toValue:i,duration:a,easing:_reactNative.Easing.out(_reactNative.Easing.quad),useNativeDriver:!0}),_reactNative.Animated.timing(ae,{toValue:0,duration:n,useNativeDriver:!0})]),_reactNative.Animated.timing(te,{toValue:s,duration:0,useNativeDriver:!0}),_reactNative.Animated.parallel([_reactNative.Animated.timing(te,{toValue:0,duration:r,easing:_reactNative.Easing.out(_reactNative.Easing.cubic),useNativeDriver:!0}),_reactNative.Animated.timing(ae,{toValue:1,duration:o,useNativeDriver:!0})])]).start();const c=addMonths(O,e);W(c),_reactNative.AccessibilityInfo.announceForAccessibility(formatMonthYear(c,l))},[O,b,l,ae,te,L,Y.motion.duration.fast]),fe=(0,_react.useCallback)(()=>{"days"!==Z?(!1!==b&&(0,_index2.triggerHaptic)("impactLight"),W("years"===Z?e=>new Date(e.getFullYear()-12,e.getMonth(),1):e=>new Date(e.getFullYear()-120,e.getMonth(),1))):ve(-1)},[ve,Z,b]),je=(0,_react.useCallback)(()=>{"days"!==Z?(!1!==b&&(0,_index2.triggerHaptic)("impactLight"),W("years"===Z?e=>new Date(e.getFullYear()+12,e.getMonth(),1):e=>new Date(e.getFullYear()+120,e.getMonth(),1))):ve(1)},[ve,Z,b]),Ne=(0,_react.useCallback)(()=>{const[e]=L.range(.9,1),t=L.reduced?L.duration("default"):Y.motion.duration.default;(0,_index.setNativeValue)(ie,0),(0,_index.setNativeValue)(se,e),_reactNative.Animated.parallel([_reactNative.Animated.timing(ie,{toValue:1,duration:t,easing:_reactNative.Easing.out(_reactNative.Easing.cubic),useNativeDriver:!0}),_reactNative.Animated.timing(se,{toValue:1,duration:t,easing:_reactNative.Easing.out(_reactNative.Easing.cubic),useNativeDriver:!0})]).start()},[ie,se,L,Y.motion.duration.default]),Re=(0,_react.useCallback)(()=>{const e=(0,_index2.resolveHaptic)(b,"selection");if(e&&(0,_index2.triggerHaptic)(e),!L.reduced){const e=80,t=100;_reactNative.Animated.sequence([_reactNative.Animated.timing(ne,{toValue:.96,duration:e,useNativeDriver:!0}),_reactNative.Animated.timing(ne,{toValue:1,duration:t,useNativeDriver:!0})]).start()}U(e=>"days"===e?"years":"years"===e?"decades":"years"),Ne()},[Ne,ne,b,L.reduced]),we=(0,_react.useCallback)(e=>{const t=(0,_index2.resolveHaptic)(b,"selection");t&&(0,_index2.triggerHaptic)(t),W(t=>new Date(e,t.getMonth(),1)),U("days"),Ne()},[Ne,b]),De=(0,_react.useCallback)(e=>{const t=(0,_index2.resolveHaptic)(b,"selection");t&&(0,_index2.triggerHaptic)(t),W(t=>new Date(e+4,t.getMonth(),1)),U("years"),Ne()},[Ne,b]),Ce=(0,_react.useCallback)(e=>{if(de(e.date))return;const t=(0,_index2.resolveHaptic)(b,"selection");t&&(0,_index2.triggerHaptic)(t),X(e.date),e.inMonth||W(new Date(e.date.getFullYear(),e.date.getMonth(),1)),L.reduced||((0,_index.setNativeValue)(re,.7),_reactNative.Animated.spring(re,{toValue:1,damping:Y.motion.spring.bouncy.damping,stiffness:Y.motion.spring.bouncy.stiffness,mass:Y.motion.spring.bouncy.mass,useNativeDriver:!0}).start())},[de,L.reduced,re,Y.motion.spring.bouncy,b]),Se=(0,_react.useCallback)(()=>{V||P(!1),r?.()},[V,r]),Ae=(0,_react.useCallback)(()=>{"modal"===o?_reactNative.Animated.parallel([_reactNative.Animated.timing(J,{toValue:0,duration:L.duration("default"),easing:_reactNative.Easing.bezier(...Y.motion.ease.accelerate),useNativeDriver:!1}),_reactNative.Animated.timing(K,{toValue:0,duration:L.duration("fast"),easing:_reactNative.Easing.bezier(...Y.motion.ease.accelerate),useNativeDriver:!0})]).start(()=>{Se()}):Se()},[J,o,Se,L,K,Y.motion.ease.accelerate]),{handleGesture:Me,opacity:Te}=(0,_useDragToDismiss.useDragToDismiss)({drag:Q,travel:()=>ee.current||320,onDismiss:Ae}),Ve=(0,_react.useMemo)(()=>_reactNative.Animated.multiply(K,Te),[K,Te]),ke=(0,_react.useMemo)(()=>J.interpolate({inputRange:[0,1],outputRange:[(0,_color.transparentOf)(Y.colors.scrim),Y.colors.scrim]}),[J,Y.colors.scrim]);(0,_react.useEffect)(()=>{if("modal"===o&&I){J.setValue(0),(0,_index.setNativeValue)(K,0),(0,_index.setNativeValue)(Q,0),(0,_index.setNativeValue)(Te,1);const e=L.reduced?_reactNative.Animated.timing(K,{toValue:1,duration:L.duration("default"),useNativeDriver:!0}):_reactNative.Animated.spring(K,{toValue:1,damping:Y.motion.spring.gentle.damping,stiffness:Y.motion.spring.gentle.stiffness,mass:Y.motion.spring.gentle.mass,useNativeDriver:!0}),t=_reactNative.Animated.parallel([_reactNative.Animated.timing(J,{toValue:1,duration:L.duration("default"),easing:_reactNative.Easing.out(_reactNative.Easing.cubic),useNativeDriver:!1}),e]);return t.start(),()=>t.stop()}},[I,o,J,L,K,Q,Te,Y.motion]);const Pe=(0,_react.useCallback)(()=>{!1!==b&&(0,_index2.triggerHaptic)("selection"),Ae()},[Ae,b]),Ie=(0,_react.useCallback)(()=>{G&&(!1!==b&&(0,_index2.triggerHaptic)("notificationSuccess"),a?.(G),Ae())},[Ae,a,G,b]),Fe=K.interpolate({inputRange:[0,1],outputRange:L.range(320,0)}),Ye=(0,_jsxRuntime.jsx)(_reactNative.View,{style:$.titleRow,children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:$.title,accessibilityRole:"header",children:d})}),Le=(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[$.card,_,g],accessibilityRole:"modal"===o?void 0:"none",accessible:!1,testID:F,children:["modal"===o?(0,_jsxRuntime.jsx)(_reactNativeGestureHandler.GestureDetector,{gesture:Me,children:(0,_jsxRuntime.jsxs)(_reactNative.View,{style:$.grabArea,children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:$.handle}),Ye]})}):Ye,(0,_jsxRuntime.jsxs)(_reactNative.View,{style:$.headerRow,children:[(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:fe,style:({pressed:e})=>[$.navBtn,e&&$.navBtnPressed,y],accessibilityRole:"button",accessibilityLabel:"days"===Z?"Previous month":"years"===Z?"Previous years":"Previous decades",hitSlop:8,...(0,_hitSlop.hitSlopMarker)(8),children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:$.navText,children:"‹"})}),(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:Re,style:[$.headerLabelWrap,x],accessibilityRole:"button",accessibilityLabel:"days"===Z?`${he}, switch to year selection`:"years"===Z?`${he}, switch to decade selection`:`${he}, switch to year selection`,hitSlop:8,...(0,_hitSlop.hitSlopMarker)(8),children:(0,_jsxRuntime.jsxs)(_reactNative.Animated.View,{style:[$.headerLabelInner,{transform:[{scale:ne}],opacity:"days"===Z?ae:1}],children:[(0,_jsxRuntime.jsx)(_reactNative.Animated.Text,{style:[$.headerLabel,{transform:[{translateX:"days"===Z?te:0}]}],accessibilityLiveRegion:"polite",children:he}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:$.headerCaret,children:(Y.settings.icons.chevronDown??_defaultIcons.defaultIcons.chevronDown)({size:Y.text.sm.size,color:Y.colors["text-muted"]})})]})}),(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:je,style:({pressed:e})=>[$.navBtn,e&&$.navBtnPressed,y],accessibilityRole:"button",accessibilityLabel:"days"===Z?"Next month":"years"===Z?"Next years":"Next decades",hitSlop:8,...(0,_hitSlop.hitSlopMarker)(8),children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:$.navText,children:"›"})})]}),"days"===Z?(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:$.weekdayRow,children:xe.map((e,t)=>(0,_jsxRuntime.jsx)(_reactNative.View,{style:$.weekdayCell,children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:$.weekdayText,children:e})},`${e}-${t}`))}),(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:[$.grid,{opacity:ae,transform:[{translateX:te}]}],children:Array.from({length:6}).map((e,t)=>(0,_jsxRuntime.jsx)(_reactNative.View,{style:$.gridRow,children:ue.slice(7*t,7*t+7).map(e=>{const t=de(e.date),a=!!G&&isSameDay(e.date,G),r=isSameDay(e.date,q),i=a?Y.colors.primary:"transparent",s=r&&!a?Y.colors.primary:"transparent",n=a?Y.colors["on-primary"]:e.inMonth?t?Y.colors["text-disabled"]:Y.colors["text-body"]:Y.colors["text-subtle"],o=t?.3:e.inMonth?1:.4;return(0,_jsxRuntime.jsx)(_reactNative.Pressable,{disabled:t,onPress:()=>Ce(e),accessibilityRole:"button",accessibilityLabel:ye.format(e.date),accessibilityState:{selected:a,disabled:t},"aria-selected":a,"aria-disabled":t,style:$.dayCell,children:(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:[$.dayInner,{backgroundColor:i,borderColor:s,borderWidth:r&&!a?1.5:0,opacity:o},a?{transform:[{scale:re}]}:null],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[$.dayText,{color:n}],children:e.date.getDate()})})},e.iso)})},`r-${t}`))})]}):"years"===Z?(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:[$.yearGrid,{opacity:ie,transform:[{scale:se}]}],children:Array.from({length:3}).map((e,t)=>(0,_jsxRuntime.jsx)(_reactNative.View,{style:$.gridRow,children:me.slice(4*t,4*t+4).map(e=>{const t=be(e),a=!!G&&G.getFullYear()===e,r=q.getFullYear()===e,i=a?Y.colors.primary:"transparent",s=r&&!a?Y.colors.primary:"transparent",n=a?Y.colors["on-primary"]:t?Y.colors["text-disabled"]:Y.colors["text-body"],o=t?.3:1;return(0,_jsxRuntime.jsx)(_reactNative.Pressable,{disabled:t,onPress:()=>we(e),accessibilityRole:"button",accessibilityLabel:`Year ${e}`,accessibilityState:{selected:a,disabled:t},"aria-selected":a,"aria-disabled":t,style:$.yearCell,children:(0,_jsxRuntime.jsx)(_reactNative.View,{style:[$.yearInner,{backgroundColor:i,borderColor:s,borderWidth:r&&!a?1.5:0,opacity:o}],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[$.yearText,{color:n}],children:e})})},`year-${e}`)})},`yr-${t}`))}):(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:[$.yearGrid,{opacity:ie,transform:[{scale:se}]}],children:Array.from({length:3}).map((e,t)=>(0,_jsxRuntime.jsx)(_reactNative.View,{style:$.gridRow,children:ge.slice(4*t,4*t+4).map(e=>{const t=e+10-1,a=pe(e),r=!!G&&decadeStartFor(G.getFullYear())===e,i=decadeStartFor(q.getFullYear())===e,s=r?Y.colors.primary:"transparent",n=i&&!r?Y.colors.primary:"transparent",o=r?Y.colors["on-primary"]:a?Y.colors["text-disabled"]:Y.colors["text-body"],l=a?.3:1;return(0,_jsxRuntime.jsx)(_reactNative.Pressable,{disabled:a,onPress:()=>De(e),accessibilityRole:"button",accessibilityLabel:`Decade ${e} to ${t}`,accessibilityState:{selected:r,disabled:a},"aria-selected":r,"aria-disabled":a,style:$.yearCell,children:(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[$.yearInner,{backgroundColor:s,borderColor:n,borderWidth:i&&!r?1.5:0,opacity:l}],children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[$.yearText,{color:o}],children:`${e}s`}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[$.decadeRangeText,{color:r?Y.colors["on-primary"]:Y.colors["text-subtle"]}],children:`${e}-${t}`})]})},`decade-${e}`)})},`dec-${t}`))}),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:$.footer,children:[(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:Pe,style:({pressed:e})=>[$.footerBtn,$.footerCancel,e&&$.footerBtnPressed,h],accessibilityRole:"button",accessibilityLabel:m,children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[$.footerBtnText,{color:Y.colors["text-muted"]}],children:m})}),(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:Ie,disabled:!G,style:({pressed:e})=>[$.footerBtn,$.footerConfirm,{backgroundColor:Y.colors.primary,opacity:G?1:.5},e&&{backgroundColor:Y.colors["primary-hover"]},h],accessibilityRole:"button",accessibilityLabel:u,accessibilityState:{disabled:!G},"aria-disabled":!G,children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[$.footerBtnText,{color:Y.colors["on-primary"]}],children:u})})]})]}),ze=t?(M??(e=>e.toLocaleDateString()))(t):void 0,Be=!V;if("inline"===o)return I||Be?Be?(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_index3.PickerTrigger,{label:v,value:ze,placeholder:f,helperText:j,error:N,required:R,disabled:w,size:D,variant:C,clearable:S,onClear:A,onPress:()=>P(!0),triggerStyle:T,testID:p}),I?Le:null]}):Le:null;const $e=(0,_jsxRuntime.jsx)(_reactNative.Modal,{visible:I,transparent:!0,statusBarTranslucent:!0,navigationBarTranslucent:!0,animationType:"none",onRequestClose:Ae,children:(0,_jsxRuntime.jsx)(_ModalSafeArea.ModalSafeArea,{onInsets:B,children:(0,_jsxRuntime.jsxs)(AnimatedGestureRoot,{collapsable:!1,style:[$.backdrop,{backgroundColor:ke}],children:[(0,_jsxRuntime.jsx)(_reactNative.Pressable,{style:_reactNative.StyleSheet.absoluteFill,onPress:Ae,accessibilityLabel:"Dismiss"}),(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:[$.sheetWrap,{paddingBottom:Math.max(z.bottom,Y.space.lg),opacity:Ve,transform:[{translateY:_reactNative.Animated.add(Fe,Q)}]}],onLayout:e=>{ee.current=e.nativeEvent.layout.height},accessibilityViewIsModal:!0,accessibilityRole:"none",children:Le}),(0,_jsxRuntime.jsx)(_ToastProvider.ToastHost,{})]})})});return Be?(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_index3.PickerTrigger,{label:v,value:ze,placeholder:f,helperText:j,error:N,required:R,disabled:w,size:D,variant:C,clearable:S,onClear:A,onPress:()=>P(!0),triggerStyle:T,testID:p}),$e]}):$e};exports.DatePicker=DatePicker;const buildStyles=e=>{const t=e.shadow.popover;return _reactNative.StyleSheet.create({backdrop:{..._reactNative.StyleSheet.absoluteFill},sheetWrap:{position:"absolute",left:0,right:0,bottom:0,paddingHorizontal:e.space.md,paddingBottom:e.space.lg},card:{backgroundColor:e.colors.surface,borderRadius:e.radius.xl,..._corners.smoothCorners,padding:e.space.lg,shadowColor:t.shadowColor,shadowOffset:t.shadowOffset,shadowOpacity:t.shadowOpacity,shadowRadius:t.shadowRadius,elevation:t.elevation},grabArea:{marginTop:-e.space.lg,paddingTop:e.space.sm},handle:{alignSelf:"center",width:36,height:4,borderRadius:e.radius.pill,..._corners.smoothCorners,backgroundColor:e.colors["border-subtle"],marginBottom:e.space.sm},titleRow:{marginBottom:e.space.sm},title:{fontSize:e.text.lg.size,fontWeight:e.weight.semibold,color:e.colors["text-body"]},headerRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",marginBottom:e.space.md},navBtn:{width:36,height:36,borderRadius:e.radius.pill,..._corners.smoothCorners,alignItems:"center",justifyContent:"center",backgroundColor:e.colors["bg-subtle"]},navBtnPressed:{backgroundColor:e.colors["surface-pressed"]},navText:{fontSize:e.text["2xl"].size,lineHeight:26,color:e.colors["text-body"],fontWeight:e.weight.semibold},headerLabelWrap:{flex:1,alignItems:"center"},headerLabelInner:{flexDirection:"row",alignItems:"center",justifyContent:"center"},headerLabel:{fontSize:e.text.base.size,fontWeight:e.weight.semibold,color:e.colors["text-body"]},headerCaret:{marginLeft:e.space.xs,alignItems:"center",justifyContent:"center"},weekdayRow:{flexDirection:"row",marginBottom:e.space.xs},weekdayCell:{flex:1,alignItems:"center",paddingVertical:e.space.xs},weekdayText:{fontSize:e.text.xs.size,fontWeight:e.weight.medium,color:e.colors["text-subtle"],letterSpacing:e["letter-spacing"].wide},grid:{},gridRow:{flexDirection:"row"},dayCell:{flex:1,aspectRatio:1,alignItems:"center",justifyContent:"center",padding:e.space.xxs},dayInner:{width:"100%",height:"100%",borderRadius:e.radius.pill,..._corners.smoothCorners,alignItems:"center",justifyContent:"center"},dayText:{fontSize:e.text.sm.size,fontWeight:e.weight.medium},yearGrid:{},yearCell:{flex:1,aspectRatio:1.6,alignItems:"center",justifyContent:"center",padding:e.space.xs},yearInner:{width:"100%",height:"100%",borderRadius:e.radius.lg,..._corners.smoothCorners,alignItems:"center",justifyContent:"center"},yearText:{fontSize:e.text.base.size,fontWeight:e.weight.semibold},decadeRangeText:{fontSize:e.text.xs.size,fontWeight:e.weight.medium,marginTop:e.space.xxs},footer:{flexDirection:"row",justifyContent:"flex-end",alignItems:"center",marginTop:e.space.lg,gap:e.space.sm},footerBtn:{paddingHorizontal:e.space.lg,paddingVertical:e.space.sm,borderRadius:e.radius.md,..._corners.smoothCorners,minHeight:40,alignItems:"center",justifyContent:"center"},footerCancel:{backgroundColor:"transparent"},footerConfirm:{},footerBtnPressed:{opacity:.85},footerBtnText:{fontSize:e.text.sm.size,fontWeight:e.weight.semibold}})};var _default=exports.default=DatePicker;
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.DatePicker=void 0;var _react=require("react"),_reactNative=require("react-native"),_reactNativeGestureHandler=require("react-native-gesture-handler"),_useDragToDismiss=require("../../hooks/useDragToDismiss.js"),_usePresenceMotion=require("../../hooks/usePresenceMotion.js"),_index=require("../../theme/index.js"),_index2=require("../../utils/index.js"),_color=require("../../utils/color.js"),_corners=require("../../utils/corners.js"),_hitSlop=require("../../utils/hitSlop.js"),_defaultIcons=require("../AppIcon/defaultIcons.js"),_ModalSafeArea=require("../ModalSafeArea/ModalSafeArea.js"),_index3=require("../PickerTrigger/index.js"),_ToastProvider=require("../Toast/ToastProvider.js"),_jsxRuntime=require("react/jsx-runtime");const NAV_BUTTON_SIZE=36,AnimatedGestureRoot=_reactNative.Animated.createAnimatedComponent(_reactNativeGestureHandler.GestureHandlerRootView),GRID_SIZE=12,DECADE_SPAN=10,startOfDay=e=>new Date(e.getFullYear(),e.getMonth(),e.getDate()),isSameDay=(e,t)=>e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth()&&e.getDate()===t.getDate(),toIso=e=>`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,"0")}-${String(e.getDate()).padStart(2,"0")}`,addMonths=(e,t)=>new Date(e.getFullYear(),e.getMonth()+t,1),buildMonthMatrix=(e,t)=>{const a=e.getFullYear(),r=e.getMonth(),i=(new Date(a,r,1).getDay()-t+7)%7,s=[];for(let e=0;e<42;e+=1){const t=new Date(a,r,1-i+e);s.push({date:t,inMonth:t.getMonth()===r,iso:toIso(t)})}return s},weekdayLabels=(e,t)=>{const a=new Intl.DateTimeFormat(e,{weekday:"short"}),r=[];for(let e=0;e<7;e+=1){const i=new Date(1970,0,4+(t+e)%7);r.push(a.format(i))}return r},formatMonthYear=(e,t)=>new Intl.DateTimeFormat(t,{month:"long",year:"numeric"}).format(e),decadeStartFor=e=>10*Math.floor(e/10),buildYearCells=e=>{const t=e-4;return Array.from({length:12},(e,a)=>t+a)},buildDecadeCells=e=>{const t=decadeStartFor(e)-40;return Array.from({length:12},(e,a)=>t+10*a)},DatePicker=e=>{const{value:t,onChange:a,onClose:r,minDate:i,maxDate:s,disabledDates:n,mode:o="modal",locale:l="en-IN",weekStartsOn:c=0,title:d="Select Date",confirmLabel:u="Confirm",cancelLabel:m="Cancel",style:_,containerStyle:g,headerLabelStyle:x,navButtonStyle:y,footerButtonStyle:h,haptic:b,testID:p,label:v,placeholder:f,helperText:j,error:N,required:R,disabled:w,size:D,variant:C,clearable:S,onClear:A,formatValue:M,triggerStyle:T}=e,V=void 0!==e.visible,[k,P]=(0,_react.useState)(!1),I=V?e.visible:k,F=V?p:p?`${p}-calendar`:void 0,Y=(0,_index.useTheme)(),L=(0,_usePresenceMotion.usePresenceMotion)(),[z,B]=(0,_ModalSafeArea.useModalInsets)(),$=(0,_react.useMemo)(()=>buildStyles(Y),[Y]),[q,H]=(0,_react.useState)(()=>startOfDay(new Date));(0,_react.useEffect)(()=>{I&&H(startOfDay(new Date))},[I]);const E=t?startOfDay(t):q,[O,W]=(0,_react.useState)(E),[G,X]=(0,_react.useState)(t?startOfDay(t):null),[Z,U]=(0,_react.useState)("days"),J=(0,_react.useRef)((0,_index.createAnimatedValue)(0)).current,K=(0,_react.useRef)((0,_index.createAnimatedValue)(0)).current,Q=(0,_react.useRef)((0,_index.createAnimatedValue)(0)).current,ee=(0,_react.useRef)(0),te=(0,_react.useRef)((0,_index.createAnimatedValue)(0)).current,ae=(0,_react.useRef)((0,_index.createAnimatedValue)(1)).current,re=(0,_react.useRef)((0,_index.createAnimatedValue)(1)).current,ie=(0,_react.useRef)((0,_index.createAnimatedValue)(1)).current,se=(0,_react.useRef)((0,_index.createAnimatedValue)(1)).current,ne=(0,_react.useRef)((0,_index.createAnimatedValue)(1)).current;(0,_react.useEffect)(()=>{if(t){const e=startOfDay(t);X(e),W(e)}else X(null)},[t]);const oe=(0,_react.useMemo)(()=>{const e=new Set;return n?.forEach(t=>{e.add(toIso(startOfDay(t)))}),e},[n]),le=(0,_react.useMemo)(()=>i?startOfDay(i):null,[i]),ce=(0,_react.useMemo)(()=>s?startOfDay(s):null,[s]),de=(0,_react.useCallback)(e=>!!(le&&e.getTime()<le.getTime())||(!!(ce&&e.getTime()>ce.getTime())||!!oe.has(toIso(e))),[le,ce,oe]),ue=(0,_react.useMemo)(()=>buildMonthMatrix(O,c),[O,c]),me=(0,_react.useMemo)(()=>buildYearCells(O.getFullYear()),[O]),ge=(0,_react.useMemo)(()=>buildDecadeCells(O.getFullYear()),[O]),xe=(0,_react.useMemo)(()=>weekdayLabels(l,c),[l,c]),ye=(0,_react.useMemo)(()=>new Intl.DateTimeFormat(l,{weekday:"long",year:"numeric",month:"long",day:"numeric"}),[l]),he=(0,_react.useMemo)(()=>{if("days"===Z)return formatMonthYear(O,l);if("years"===Z){return`${me[0]} - ${me[me.length-1]}`}return`${ge[0]} - ${ge[ge.length-1]+9}`},[O,ge,l,Z,me]),be=(0,_react.useCallback)(e=>!!(le&&e<le.getFullYear())||!!(ce&&e>ce.getFullYear()),[le,ce]),pe=(0,_react.useCallback)(e=>!!(le&&e+10-1<le.getFullYear())||!!(ce&&e>ce.getFullYear()),[le,ce]),ve=(0,_react.useCallback)(e=>{!1!==b&&(0,_index2.triggerHaptic)("impactLight");const t=e>0?1:-1,a=Y.motion.duration.fast,r=Y.motion.duration.fast,[i]=L.range(32*-t,0),[s]=L.range(32*t,0),n=L.reduced?L.duration("fast"):a,o=L.reduced?L.duration("fast"):r;_reactNative.Animated.sequence([_reactNative.Animated.parallel([_reactNative.Animated.timing(te,{toValue:i,duration:a,easing:_reactNative.Easing.out(_reactNative.Easing.quad),useNativeDriver:!0}),_reactNative.Animated.timing(ae,{toValue:0,duration:n,useNativeDriver:!0})]),_reactNative.Animated.timing(te,{toValue:s,duration:0,useNativeDriver:!0}),_reactNative.Animated.parallel([_reactNative.Animated.timing(te,{toValue:0,duration:r,easing:_reactNative.Easing.out(_reactNative.Easing.cubic),useNativeDriver:!0}),_reactNative.Animated.timing(ae,{toValue:1,duration:o,useNativeDriver:!0})])]).start();const c=addMonths(O,e);W(c),_reactNative.AccessibilityInfo.announceForAccessibility(formatMonthYear(c,l))},[O,b,l,ae,te,L,Y.motion.duration.fast]),fe=(0,_react.useCallback)(()=>{"days"!==Z?(!1!==b&&(0,_index2.triggerHaptic)("impactLight"),W("years"===Z?e=>new Date(e.getFullYear()-12,e.getMonth(),1):e=>new Date(e.getFullYear()-120,e.getMonth(),1))):ve(-1)},[ve,Z,b]),je=(0,_react.useCallback)(()=>{"days"!==Z?(!1!==b&&(0,_index2.triggerHaptic)("impactLight"),W("years"===Z?e=>new Date(e.getFullYear()+12,e.getMonth(),1):e=>new Date(e.getFullYear()+120,e.getMonth(),1))):ve(1)},[ve,Z,b]),Ne=(0,_react.useCallback)(()=>{const[e]=L.range(.9,1),t=L.reduced?L.duration("default"):Y.motion.duration.default;(0,_index.setNativeValue)(ie,0),(0,_index.setNativeValue)(se,e),_reactNative.Animated.parallel([_reactNative.Animated.timing(ie,{toValue:1,duration:t,easing:_reactNative.Easing.out(_reactNative.Easing.cubic),useNativeDriver:!0}),_reactNative.Animated.timing(se,{toValue:1,duration:t,easing:_reactNative.Easing.out(_reactNative.Easing.cubic),useNativeDriver:!0})]).start()},[ie,se,L,Y.motion.duration.default]),Re=(0,_react.useCallback)(()=>{const e=(0,_index2.resolveHaptic)(b,"selection");if(e&&(0,_index2.triggerHaptic)(e),!L.reduced){const e=80,t=100;_reactNative.Animated.sequence([_reactNative.Animated.timing(ne,{toValue:.96,duration:e,useNativeDriver:!0}),_reactNative.Animated.timing(ne,{toValue:1,duration:t,useNativeDriver:!0})]).start()}U(e=>"days"===e?"years":"years"===e?"decades":"years"),Ne()},[Ne,ne,b,L.reduced]),we=(0,_react.useCallback)(e=>{const t=(0,_index2.resolveHaptic)(b,"selection");t&&(0,_index2.triggerHaptic)(t),W(t=>new Date(e,t.getMonth(),1)),U("days"),Ne()},[Ne,b]),De=(0,_react.useCallback)(e=>{const t=(0,_index2.resolveHaptic)(b,"selection");t&&(0,_index2.triggerHaptic)(t),W(t=>new Date(e+4,t.getMonth(),1)),U("years"),Ne()},[Ne,b]),Ce=(0,_react.useCallback)(e=>{if(de(e.date))return;const t=(0,_index2.resolveHaptic)(b,"selection");t&&(0,_index2.triggerHaptic)(t),X(e.date),e.inMonth||W(new Date(e.date.getFullYear(),e.date.getMonth(),1)),L.reduced||((0,_index.setNativeValue)(re,.7),_reactNative.Animated.spring(re,{toValue:1,damping:Y.motion.spring.bouncy.damping,stiffness:Y.motion.spring.bouncy.stiffness,mass:Y.motion.spring.bouncy.mass,useNativeDriver:!0}).start())},[de,L.reduced,re,Y.motion.spring.bouncy,b]),Se=(0,_react.useCallback)(()=>{V||P(!1),r?.()},[V,r]),Ae=(0,_react.useCallback)(()=>{"modal"===o?_reactNative.Animated.parallel([_reactNative.Animated.timing(J,{toValue:0,duration:L.duration("default"),easing:_reactNative.Easing.bezier(...Y.motion.ease.accelerate),useNativeDriver:!1}),_reactNative.Animated.timing(K,{toValue:0,duration:L.duration("fast"),easing:_reactNative.Easing.bezier(...Y.motion.ease.accelerate),useNativeDriver:!0})]).start(()=>{Se()}):Se()},[J,o,Se,L,K,Y.motion.ease.accelerate]),{handleGesture:Me,opacity:Te}=(0,_useDragToDismiss.useDragToDismiss)({drag:Q,travel:()=>ee.current||320,onDismiss:Ae}),Ve=(0,_react.useMemo)(()=>_reactNative.Animated.multiply(K,Te),[K,Te]),ke=(0,_react.useMemo)(()=>J.interpolate({inputRange:[0,1],outputRange:[(0,_color.transparentOf)(Y.colors.scrim),Y.colors.scrim]}),[J,Y.colors.scrim]);(0,_react.useEffect)(()=>{if("modal"===o&&I){J.setValue(0),(0,_index.setNativeValue)(K,0),(0,_index.setNativeValue)(Q,0),(0,_index.setNativeValue)(Te,1);const e=L.reduced?_reactNative.Animated.timing(K,{toValue:1,duration:L.duration("default"),useNativeDriver:!0}):_reactNative.Animated.spring(K,{toValue:1,damping:Y.motion.spring.gentle.damping,stiffness:Y.motion.spring.gentle.stiffness,mass:Y.motion.spring.gentle.mass,useNativeDriver:!0}),t=_reactNative.Animated.parallel([_reactNative.Animated.timing(J,{toValue:1,duration:L.duration("default"),easing:_reactNative.Easing.out(_reactNative.Easing.cubic),useNativeDriver:!1}),e]);return t.start(),()=>t.stop()}},[I,o,J,L,K,Q,Te,Y.motion]);const Pe=(0,_react.useCallback)(()=>{!1!==b&&(0,_index2.triggerHaptic)("selection"),Ae()},[Ae,b]),Ie=(0,_react.useCallback)(()=>{G&&(!1!==b&&(0,_index2.triggerHaptic)("notificationSuccess"),a?.(G),Ae())},[Ae,a,G,b]),Fe=K.interpolate({inputRange:[0,1],outputRange:L.range(320,0)}),Ye=(0,_jsxRuntime.jsx)(_reactNative.View,{style:$.titleRow,children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:$.title,accessibilityRole:"header",children:d})}),Le=(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[$.card,_,g],accessibilityRole:"modal"===o?void 0:"none",accessible:!1,testID:F,children:["modal"===o?(0,_jsxRuntime.jsx)(_reactNativeGestureHandler.GestureDetector,{gesture:Me,children:(0,_jsxRuntime.jsxs)(_reactNative.View,{style:$.grabArea,children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:$.handle}),Ye]})}):Ye,(0,_jsxRuntime.jsxs)(_reactNative.View,{style:$.headerRow,children:[(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:fe,style:({pressed:e})=>[$.navBtn,e&&$.navBtnPressed,y],accessibilityRole:"button",accessibilityLabel:"days"===Z?"Previous month":"years"===Z?"Previous years":"Previous decades",hitSlop:8,...(0,_hitSlop.hitSlopMarker)(8),children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:$.navText,children:"‹"})}),(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:Re,style:[$.headerLabelWrap,x],accessibilityRole:"button",accessibilityLabel:"days"===Z?`${he}, switch to year selection`:"years"===Z?`${he}, switch to decade selection`:`${he}, switch to year selection`,hitSlop:8,...(0,_hitSlop.hitSlopMarker)(8),children:(0,_jsxRuntime.jsxs)(_reactNative.Animated.View,{style:[$.headerLabelInner,{transform:[{scale:ne}],opacity:"days"===Z?ae:1}],children:[(0,_jsxRuntime.jsx)(_reactNative.Animated.Text,{style:[$.headerLabel,{transform:[{translateX:"days"===Z?te:0}]}],accessibilityLiveRegion:"polite",children:he}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:$.headerCaret,children:(Y.settings.icons.chevronDown??_defaultIcons.defaultIcons.chevronDown)({size:Y.text.sm.size,color:Y.colors["text-muted"]})})]})}),(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:je,style:({pressed:e})=>[$.navBtn,e&&$.navBtnPressed,y],accessibilityRole:"button",accessibilityLabel:"days"===Z?"Next month":"years"===Z?"Next years":"Next decades",hitSlop:8,...(0,_hitSlop.hitSlopMarker)(8),children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:$.navText,children:"›"})})]}),"days"===Z?(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:$.weekdayRow,children:xe.map((e,t)=>(0,_jsxRuntime.jsx)(_reactNative.View,{style:$.weekdayCell,children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:$.weekdayText,children:e})},`${e}-${t}`))}),(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:[$.grid,{opacity:ae,transform:[{translateX:te}]}],children:Array.from({length:6}).map((e,t)=>(0,_jsxRuntime.jsx)(_reactNative.View,{style:$.gridRow,children:ue.slice(7*t,7*t+7).map(e=>{const t=de(e.date),a=!!G&&isSameDay(e.date,G),r=isSameDay(e.date,q),i=a?Y.colors.primary:"transparent",s=r&&!a?Y.colors.primary:"transparent",n=a?Y.colors["on-primary"]:e.inMonth?t?Y.colors["text-disabled"]:Y.colors["text-body"]:Y.colors["text-subtle"],o=t?.3:e.inMonth?1:.4;return(0,_jsxRuntime.jsx)(_reactNative.Pressable,{disabled:t,onPress:()=>Ce(e),accessibilityRole:"button",accessibilityLabel:ye.format(e.date),accessibilityState:{selected:a,disabled:t},"aria-selected":a,"aria-disabled":t,style:$.dayCell,children:(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:[$.dayInner,{backgroundColor:i,borderColor:s,borderWidth:r&&!a?1.5:0,opacity:o},a?{transform:[{scale:re}]}:null],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[$.dayText,{color:n}],children:e.date.getDate()})})},e.iso)})},`r-${t}`))})]}):"years"===Z?(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:[$.yearGrid,{opacity:ie,transform:[{scale:se}]}],children:Array.from({length:3}).map((e,t)=>(0,_jsxRuntime.jsx)(_reactNative.View,{style:$.gridRow,children:me.slice(4*t,4*t+4).map(e=>{const t=be(e),a=!!G&&G.getFullYear()===e,r=q.getFullYear()===e,i=a?Y.colors.primary:"transparent",s=r&&!a?Y.colors.primary:"transparent",n=a?Y.colors["on-primary"]:t?Y.colors["text-disabled"]:Y.colors["text-body"],o=t?.3:1;return(0,_jsxRuntime.jsx)(_reactNative.Pressable,{disabled:t,onPress:()=>we(e),accessibilityRole:"button",accessibilityLabel:`Year ${e}`,accessibilityState:{selected:a,disabled:t},"aria-selected":a,"aria-disabled":t,style:$.yearCell,children:(0,_jsxRuntime.jsx)(_reactNative.View,{style:[$.yearInner,{backgroundColor:i,borderColor:s,borderWidth:r&&!a?1.5:0,opacity:o}],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[$.yearText,{color:n}],children:e})})},`year-${e}`)})},`yr-${t}`))}):(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:[$.yearGrid,{opacity:ie,transform:[{scale:se}]}],children:Array.from({length:3}).map((e,t)=>(0,_jsxRuntime.jsx)(_reactNative.View,{style:$.gridRow,children:ge.slice(4*t,4*t+4).map(e=>{const t=e+10-1,a=pe(e),r=!!G&&decadeStartFor(G.getFullYear())===e,i=decadeStartFor(q.getFullYear())===e,s=r?Y.colors.primary:"transparent",n=i&&!r?Y.colors.primary:"transparent",o=r?Y.colors["on-primary"]:a?Y.colors["text-disabled"]:Y.colors["text-body"],l=a?.3:1;return(0,_jsxRuntime.jsx)(_reactNative.Pressable,{disabled:a,onPress:()=>De(e),accessibilityRole:"button",accessibilityLabel:`Decade ${e} to ${t}`,accessibilityState:{selected:r,disabled:a},"aria-selected":r,"aria-disabled":a,style:$.yearCell,children:(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[$.yearInner,{backgroundColor:s,borderColor:n,borderWidth:i&&!r?1.5:0,opacity:l}],children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[$.yearText,{color:o}],children:`${e}s`}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[$.decadeRangeText,{color:r?Y.colors["on-primary"]:Y.colors["text-subtle"]}],children:`${e}-${t}`})]})},`decade-${e}`)})},`dec-${t}`))}),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:$.footer,children:[(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:Pe,style:({pressed:e})=>[$.footerBtn,$.footerCancel,e&&$.footerBtnPressed,h],accessibilityRole:"button",accessibilityLabel:m,children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[$.footerBtnText,{color:Y.colors["text-muted"]}],children:m})}),(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:Ie,disabled:!G,style:({pressed:e})=>[$.footerBtn,$.footerConfirm,{backgroundColor:Y.colors.primary,opacity:G?1:.5},e&&{backgroundColor:Y.colors["primary-hover"]},h],accessibilityRole:"button",accessibilityLabel:u,accessibilityState:{disabled:!G},"aria-disabled":!G,children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[$.footerBtnText,{color:Y.colors["on-primary"]}],children:u})})]})]}),ze=t?(M??(e=>e.toLocaleDateString()))(t):void 0,Be=!V;if("inline"===o)return I||Be?Be?(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_index3.PickerTrigger,{label:v,value:ze,placeholder:f,helperText:j,error:N,required:R,disabled:w,size:D,variant:C,clearable:S,onClear:A,onPress:()=>P(!0),triggerStyle:T,testID:p}),I?Le:null]}):Le:null;const $e=(0,_jsxRuntime.jsx)(_reactNative.Modal,{visible:I,transparent:!0,statusBarTranslucent:!0,navigationBarTranslucent:!0,animationType:"none",onRequestClose:Ae,children:(0,_jsxRuntime.jsx)(_ModalSafeArea.ModalSafeArea,{onInsets:B,children:(0,_jsxRuntime.jsxs)(AnimatedGestureRoot,{collapsable:!1,style:[$.backdrop,{backgroundColor:ke}],children:[(0,_jsxRuntime.jsx)(_reactNative.Pressable,{style:_reactNative.StyleSheet.absoluteFill,onPress:Ae,accessibilityLabel:"Dismiss"}),(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:[$.sheetWrap,{paddingBottom:Math.max(z.bottom,Y.space.lg),opacity:Ve,transform:[{translateY:_reactNative.Animated.add(Fe,Q)}]}],onLayout:e=>{ee.current=e.nativeEvent.layout.height},accessibilityViewIsModal:!0,accessibilityRole:"none",children:Le}),(0,_jsxRuntime.jsx)(_ToastProvider.ToastHost,{})]})})});return Be?(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_index3.PickerTrigger,{label:v,value:ze,placeholder:f,helperText:j,error:N,required:R,disabled:w,size:D,variant:C,clearable:S,onClear:A,onPress:()=>P(!0),triggerStyle:T,testID:p}),$e]}):$e};exports.DatePicker=DatePicker;const buildStyles=e=>{const t=e.shadow.popover;return _reactNative.StyleSheet.create({backdrop:{..._reactNative.StyleSheet.absoluteFill},sheetWrap:{position:"absolute",left:0,right:0,bottom:0,paddingHorizontal:e.space.md,paddingBottom:e.space.lg},card:{backgroundColor:e.colors.surface,borderRadius:e.radius.xl,..._corners.smoothCorners,padding:e.space.lg,shadowColor:t.shadowColor,shadowOffset:t.shadowOffset,shadowOpacity:t.shadowOpacity,shadowRadius:t.shadowRadius,elevation:t.elevation},grabArea:{marginTop:-e.space.lg,paddingTop:e.space.sm},handle:{alignSelf:"center",width:36,height:4,borderRadius:e.radius.pill,..._corners.smoothCorners,backgroundColor:e.colors["border-subtle"],marginBottom:e.space.sm},titleRow:{marginBottom:e.space.sm},title:{fontSize:e.text.lg.size,fontWeight:e.weight.semibold,color:e.colors["text-body"]},headerRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",marginBottom:e.space.md},navBtn:{width:36,height:36,borderRadius:e.radius.pill,..._corners.smoothCorners,alignItems:"center",justifyContent:"center",backgroundColor:e.colors["bg-subtle"]},navBtnPressed:{backgroundColor:e.colors["surface-pressed"]},navText:{fontSize:e.text["2xl"].size,lineHeight:26,color:e.colors["text-body"],fontWeight:e.weight.semibold},headerLabelWrap:{flex:1,alignItems:"center"},headerLabelInner:{flexDirection:"row",alignItems:"center",justifyContent:"center"},headerLabel:{fontSize:e.text.base.size,fontWeight:e.weight.semibold,color:e.colors["text-body"]},headerCaret:{marginLeft:e.space.xs,alignItems:"center",justifyContent:"center"},weekdayRow:{flexDirection:"row",marginBottom:e.space.xs},weekdayCell:{flex:1,alignItems:"center",paddingVertical:e.space.xs},weekdayText:{fontSize:e.text.xs.size,fontWeight:e.weight.medium,color:e.colors["text-subtle"],letterSpacing:e["letter-spacing"].wide},grid:{},gridRow:{flexDirection:"row"},dayCell:{flex:1,aspectRatio:1,alignItems:"center",justifyContent:"center",padding:e.space.xxs},dayInner:{width:"100%",height:"100%",borderRadius:e.radius.pill,..._corners.smoothCorners,alignItems:"center",justifyContent:"center"},dayText:{fontSize:e.text.sm.size,fontWeight:e.weight.medium},yearGrid:{},yearCell:{flex:1,aspectRatio:1.6,alignItems:"center",justifyContent:"center",padding:e.space.xs},yearInner:{width:"100%",height:"100%",borderRadius:e.radius.lg,..._corners.smoothCorners,alignItems:"center",justifyContent:"center"},yearText:{fontSize:e.text.base.size,fontWeight:e.weight.semibold},decadeRangeText:{fontSize:e.text.xs.size,fontWeight:e.weight.medium,marginTop:e.space.xxs},footer:{flexDirection:"row",justifyContent:"flex-end",alignItems:"center",marginTop:e.space.lg,gap:e.space.sm},footerBtn:{paddingHorizontal:e.space.lg,paddingVertical:e.space.sm,borderRadius:e.radius.md,..._corners.smoothCorners,minHeight:40,alignItems:"center",justifyContent:"center"},footerCancel:{backgroundColor:"transparent"},footerConfirm:{},footerBtnPressed:{opacity:.85},footerBtnText:{fontSize:e.text.sm.size,fontWeight:e.weight.semibold}})};var _default=exports.default=DatePicker;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.resolveVariantColors=exports.resolveFieldTextStyle=exports.pickRepresentativeBorderColor=exports.hasFieldText=exports.fieldTextAsString=exports.default=exports.RequiredPlaceholder=exports.RequiredMark=exports.FieldMessage=exports.FieldLabel=exports.FieldErrorGlyph=exports.FieldBase=void 0;var _react=require("react"),_reactNative=require("react-native"),_index=require("../../theme/index.js"),_ariaState=require("../../utils/ariaState.js"),_corners=require("../../utils/corners.js"),_defaultIcons=require("../AppIcon/defaultIcons.js"),_Notation=require("../Notation/Notation.js"),_SquircleFill=require("../SquircleFill/SquircleFill.js"),_jsxRuntime=require("react/jsx-runtime");const expandColorSides=e=>"string"==typeof e?{top:e,right:e,bottom:e,left:e}:{top:e.top??"transparent",right:e.right??"transparent",bottom:e.bottom??"transparent",left:e.left??"transparent"},expandWidthSides=e=>"number"==typeof e?{top:e,right:e,bottom:e,left:e}:{top:e.top??0,right:e.right??0,bottom:e.bottom??0,left:e.left??0},pickRepresentativeBorderColor=e=>{for(const t of["bottom","top","left","right"]){const r=e[t];if(r&&"transparent"!==r)return r}return e.bottom};exports.pickRepresentativeBorderColor=pickRepresentativeBorderColor;const resolveFieldTextStyle=(e,t={})=>{const{disabled:r=!1}=t;return{color:r?e.colors["field-text-disabled"]:e.colors["field-text"],placeholderColor:r?e.colors["field-placeholder-disabled"]:e.colors["field-placeholder"],weightStyle:(0,_index.fontFor)(e,"normal")}};exports.resolveFieldTextStyle=resolveFieldTextStyle;const RequiredMark=()=>{const e=(0,_index.useTheme)();return(0,_jsxRuntime.jsx)(_reactNative.Text,{style:{color:e.colors["danger-text"]},children:` ${e.settings.components.field?.requiredMarker??"*"}`})};exports.RequiredMark=RequiredMark;const RequiredPlaceholder=({text:e,color:t,fontSize:r,weightStyle:o,align:i="center",paddingTop:l,textAlign:s})=>(0,_jsxRuntime.jsx)(_reactNative.View,{pointerEvents:"none",style:[_reactNative.StyleSheet.absoluteFill,{justifyContent:"top"===i?"flex-start":"center",paddingTop:l}],children:(0,_jsxRuntime.jsxs)(_reactNative.Text,{accessible:!1,numberOfLines:1,style:{color:t,fontSize:r,...o,includeFontPadding:!1,textAlign:s},children:[e,(0,_jsxRuntime.jsx)(RequiredMark,{})]})});exports.RequiredPlaceholder=RequiredPlaceholder;const FieldErrorGlyph=({size:e,color:t})=>{const r=(0,_index.useTheme)().settings.icons.error??_defaultIcons.defaultIcons.error;return(0,_jsxRuntime.jsx)(_jsxRuntime.Fragment,{children:r({size:e,color:t})})};exports.FieldErrorGlyph=FieldErrorGlyph;const hasFieldText=e=>null!=e&&!1!==e&&!0!==e&&""!==e;exports.hasFieldText=hasFieldText;const fieldTextAsString=e=>"string"==typeof e?e:void 0;exports.fieldTextAsString=fieldTextAsString;const FieldLabel=({children:e,size:t="md",required:r=!1,help:o,color:i,style:l})=>{const s=(0,_index.useTheme)(),n=(0,_index.resolveFieldSize)(s,t),a=hasFieldText(o),d=(0,_Notation.useNotationInk)(l,n["label-text"],i??s.colors["field-label"]),c=(0,_jsxRuntime.jsxs)(_reactNative.Text,{style:[familyStyles.label,{color:i??s.colors["field-label"],fontSize:n["label-text"],...(0,_index.fontFor)(s,"semibold"),marginBottom:a?s.space.none:n["label-gap"]},a?familyStyles.labelShrink:null,l],children:[(0,_jsxRuntime.jsx)(_Notation.NotationInkContext.Provider,{value:d,children:e}),r?(0,_jsxRuntime.jsx)(RequiredMark,{}):null]});return a?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[familyStyles.labelRow,{marginBottom:n["label-gap"]}],children:[c,(0,_jsxRuntime.jsx)(_reactNative.View,{style:[familyStyles.help,{marginLeft:s.space.xs}],children:o})]}):c};exports.FieldLabel=FieldLabel;const FieldMessage=({text:e,error:t=!1,size:r="md",style:o})=>{const i=(0,_index.useTheme)(),l=(0,_index.resolveFieldSize)(i,r),s=t?i.colors["field-message"]:i.colors["text-muted"],n=(0,_Notation.useNotationInk)(o,l["message-text"],s);return hasFieldText(e)?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[familyStyles.messageRow,{marginTop:l["message-gap"],columnGap:i.space.xs}],accessibilityLiveRegion:t?"polite":"none",children:[t?(0,_jsxRuntime.jsx)(FieldErrorGlyph,{size:l["message-text"],color:s}):null,(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[familyStyles.messageText,{color:s,fontSize:l["message-text"],...(0,_index.fontFor)(i,"normal")},o],children:(0,_jsxRuntime.jsx)(_Notation.NotationInkContext.Provider,{value:n,children:e})})]}):null};exports.FieldMessage=FieldMessage;const familyStyles=_reactNative.StyleSheet.create({label:{includeFontPadding:!1},labelShrink:{flexShrink:1},labelRow:{flexDirection:"row",alignItems:"center"},help:{flexShrink:0,alignItems:"center",justifyContent:"center"},messageRow:{flexDirection:"row",alignItems:"center"},messageText:{flexShrink:1,includeFontPadding:!1}}),resolveVariantColors=(e,t)=>{let r,o,i,l,s;"outlined"===t?(r=e.colors["field-bg"],o=e.colors["field-bg-focus"],i=e.colors["field-bg-disabled"],l=e.colors["field-border"],s=e.size.border):"underline"===t?(r="transparent",o=void 0,i="transparent",l={bottom:e.colors["field-border"]},s={bottom:e.size.border}):(r=e.colors["field-bg"],o=void 0,i=e.colors["field-bg-disabled"],l="transparent",s=0);const wrapToIdleShape=e=>"string"==typeof l?e:{bottom:e},n=expandColorSides(l),a=expandColorSides(wrapToIdleShape(e.colors["field-border-focus"]));return{backgroundIdleEmpty:r,backgroundIdleFilled:r,backgroundFocused:o,backgroundError:void 0,backgroundDisabled:i,borderIdle:n,borderFocused:a,borderError:expandColorSides(wrapToIdleShape(e.colors["field-border-error"])),borderDisabled:expandColorSides(l),borderWidth:expandWidthSides(s),borderFocusedRepresentative:pickRepresentativeBorderColor(a)}};exports.resolveVariantColors=resolveVariantColors;const FieldBase=e=>{const{size:t="md",variant:r,focused:o=!1,disabled:i=!1,error:l=!1,filled:s=!1,leading:n,leadingDivider:a=!1,trailing:d,slotAlign:c="center",slotLineHeight:u,topNotch:b,children:p,onPress:x,pressFeedback:g=!0,minHeight:m,maxHeight:h,width:f,height:_,paddingHorizontal:R,paddingLeft:y,paddingRight:v,paddingVertical:j,borderRadius:S,borderTopLeftRadius:F,borderTopRightRadius:C,borderBottomLeftRadius:T,borderBottomRightRadius:k,borderWidth:N,borderTopWidth:q,borderRightWidth:w,borderBottomWidth:I,borderLeftWidth:L,gap:B,style:V,testID:z,accessibilityRole:M,accessibilityLabel:E,accessibilityState:W,accessibilityHint:D}=e,P=(0,_index.useTheme)(),A=(0,_react.useMemo)(()=>buildStyles(),[]),H=r??P.settings.components.field?.defaultVariant??"outlined",G=(0,_index.resolveFieldSize)(P,t),O=(0,_react.useMemo)(()=>resolveVariantColors(P,H),[P,H]),$=l?2:o?1:0,J=(0,_react.useRef)((0,_index.createAnimatedValue)($)).current;(0,_react.useEffect)(()=>{const e=_reactNative.Animated.timing(J,{toValue:$,duration:P.motion.duration.fast,easing:_reactNative.Easing.bezier(...P.motion.ease["in-out"]),useNativeDriver:!1});return e.start(),()=>e.stop()},[$,J,P.motion.duration.fast,P.motion.ease["in-out"]]);const K=[0,1,2],Q=s?O.backgroundIdleFilled:O.backgroundIdleEmpty,U=O.backgroundFocused??Q,X=O.backgroundError??Q,Y=i?O.backgroundDisabled:J.interpolate({inputRange:K,outputRange:[Q,U,X]}),Z=O.borderIdle,ee=O.borderFocused,te=O.borderError,re={top:q,right:w,bottom:I,left:L},oe={top:re.top??N??O.borderWidth.top,right:re.right??N??O.borderWidth.right,bottom:re.bottom??N??O.borderWidth.bottom,left:re.left??N??O.borderWidth.left},ie={minHeight:_??m??G["min-height"],maxHeight:h,paddingHorizontal:R??G["padding-x"],paddingVertical:j??G["padding-y"],paddingLeft:y??R??G["padding-x"],paddingRight:v??R??G["padding-x"],backgroundColor:Y,columnGap:B??P.space.md,alignItems:"top"===c?"flex-start":"center"},le="underline"===H,se=le?P.radius.none:S??G.radius,ne=le?{tl:P.radius.none,tr:P.radius.none,bl:P.radius.none,br:P.radius.none}:{tl:F??se,tr:C??se,bl:T??se,br:k??se};ie.borderTopLeftRadius=ne.tl,ie.borderTopRightRadius=ne.tr,ie.borderBottomLeftRadius=ne.bl,ie.borderBottomRightRadius=ne.br,ie.borderCurve=_corners.smoothCorners.borderCurve,ie.borderTopWidth=oe.top,ie.borderRightWidth=oe.right,ie.borderBottomWidth=oe.bottom,ie.borderLeftWidth=oe.left;const sideColor=e=>J.interpolate({inputRange:K,outputRange:[Z[e],ee[e],te[e]]}),sameOnEverySide=e=>e.top===e.right&&e.top===e.bottom&&e.top===e.left,ae=!le&&ne.tl===ne.tr&&ne.tl===ne.bl&&ne.tl===ne.br&&sameOnEverySide(oe)&&sameOnEverySide(Z)&&sameOnEverySide(ee)&&sameOnEverySide(te)&&sameOnEverySide(O.borderDisabled),de=(0,_SquircleFill.useSquircle)(ae,ne.tl);if(de.active)ie.backgroundColor="transparent",ie.borderTopColor="transparent",ie.borderRightColor="transparent",ie.borderBottomColor="transparent",ie.borderLeftColor="transparent";else if(i){const e=O.borderDisabled;ie.borderTopColor=e.top,ie.borderRightColor=e.right,ie.borderBottomColor=e.bottom,ie.borderLeftColor=e.left}else ie.borderTopColor=sideColor("top"),ie.borderRightColor=sideColor("right"),ie.borderBottomColor=sideColor("bottom"),ie.borderLeftColor=sideColor("left");const ce=i?O.borderDisabled.top:sideColor("top"),ue=(0,_react.useRef)($);ue.current=$,(0,_react.useEffect)(()=>{J.setValue(ue.current)},[O,J]),void 0!==f&&(ie.width=f),void 0!==_&&(ie.height=_);const be={disabled:i,...W},pe="top"===c,xe=pe?{alignSelf:"flex-start",marginTop:Math.max(0,((u??G.icon)-G.icon)/2)}:null,ge=_??m??G["min-height"],me=(()=>{if(!b)return 0;const e=Math.min(ne.tl,ge/2),t=b.left;return e<=0||t>=e?0:Math.ceil(e-Math.sqrt(e*e-(e-t)*(e-t)))})(),he=b&&oe.top>0?(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{pointerEvents:"none",style:{position:"absolute",top:-oe.top,left:b.left-oe.left,width:b.width,height:oe.top+me,backgroundColor:Y}}):null,renderInner=e=>(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[de.active&&de.size?(0,_jsxRuntime.jsx)(_SquircleFill.SquircleFill,{width:de.size.width,height:de.size.height,radius:ne.tl,fill:e&&!i?P.colors["surface-pressed"]:Y,stroke:ce,strokeWidth:oe.top,outset:oe.top}):null,he,null!=n?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[A.slot,xe],children:n}):null,null!=n&&a?(0,_jsxRuntime.jsx)(_reactNative.View,{pointerEvents:"none",style:[A.divider,xe,{height:G.icon,backgroundColor:P.colors["field-border"]}]}):null,(0,_jsxRuntime.jsx)(_reactNative.View,{style:[A.content,pe?A.contentTop:null],children:p}),null!=d?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[A.slot,xe],children:d}):null]}),fe=(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{onLayout:de.onLayout,style:[A.box,ie,V],accessibilityRole:M,accessibilityLabel:E,accessibilityHint:D,accessibilityState:be,...(0,_ariaState.ariaFromState)(be),testID:z,children:renderInner(!1)});return x&&!g?(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:x,disabled:i,accessible:!1,children:fe}):x?(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:x,disabled:i,accessibilityRole:M??"button",accessibilityLabel:E,accessibilityHint:D,accessibilityState:be,...(0,_ariaState.ariaFromState)(be),testID:z,children:({pressed:e})=>(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{onLayout:de.onLayout,style:[A.box,ie,!e||i||de.active?null:{backgroundColor:P.colors["surface-pressed"]},V],children:renderInner(e)})}):fe};exports.FieldBase=FieldBase,FieldBase.displayName="FieldBase";const buildStyles=()=>_reactNative.StyleSheet.create({box:{flexDirection:"row",alignItems:"center",overflow:"visible"},slot:{alignItems:"center",justifyContent:"center"},divider:{width:1,alignSelf:"center"},content:{flex:1,flexDirection:"row",alignItems:"center"},contentTop:{alignItems:"flex-start"}});var _default=exports.default=FieldBase;
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.resolveVariantColors=exports.resolveFieldTextStyle=exports.pickRepresentativeBorderColor=exports.hasFieldText=exports.fieldTextAsString=exports.default=exports.RequiredPlaceholder=exports.RequiredMark=exports.FieldMessage=exports.FieldLabel=exports.FieldErrorGlyph=exports.FieldBase=void 0;var _react=require("react"),_reactNative=require("react-native"),_index=require("../../theme/index.js"),_ariaState=require("../../utils/ariaState.js"),_corners=require("../../utils/corners.js"),_defaultIcons=require("../AppIcon/defaultIcons.js"),_Notation=require("../Notation/Notation.js"),_SquircleFill=require("../SquircleFill/SquircleFill.js"),_jsxRuntime=require("react/jsx-runtime");const expandColorSides=e=>"string"==typeof e?{top:e,right:e,bottom:e,left:e}:{top:e.top??"transparent",right:e.right??"transparent",bottom:e.bottom??"transparent",left:e.left??"transparent"},expandWidthSides=e=>"number"==typeof e?{top:e,right:e,bottom:e,left:e}:{top:e.top??0,right:e.right??0,bottom:e.bottom??0,left:e.left??0},pickRepresentativeBorderColor=e=>{for(const t of["bottom","top","left","right"]){const r=e[t];if(r&&"transparent"!==r)return r}return e.bottom};exports.pickRepresentativeBorderColor=pickRepresentativeBorderColor;const resolveFieldTextStyle=(e,t={})=>{const{disabled:r=!1}=t;return{color:r?e.colors["field-text-disabled"]:e.colors["field-text"],placeholderColor:r?e.colors["field-placeholder-disabled"]:e.colors["field-placeholder"],weightStyle:(0,_index.fontFor)(e,"normal")}};exports.resolveFieldTextStyle=resolveFieldTextStyle;const RequiredMark=()=>{const e=(0,_index.useTheme)();return(0,_jsxRuntime.jsx)(_reactNative.Text,{style:{color:e.colors["danger-text"]},children:` ${e.settings.components.field?.requiredMarker??"*"}`})};exports.RequiredMark=RequiredMark;const RequiredPlaceholder=({text:e,color:t,fontSize:r,weightStyle:o,align:i="center",paddingTop:l,textAlign:s})=>(0,_jsxRuntime.jsx)(_reactNative.View,{pointerEvents:"none",style:[_reactNative.StyleSheet.absoluteFill,{justifyContent:"top"===i?"flex-start":"center",paddingTop:l}],children:(0,_jsxRuntime.jsxs)(_reactNative.Text,{accessible:!1,numberOfLines:1,style:{color:t,fontSize:r,...o,includeFontPadding:!1,textAlign:s},children:[e,(0,_jsxRuntime.jsx)(RequiredMark,{})]})});exports.RequiredPlaceholder=RequiredPlaceholder;const FieldErrorGlyph=({size:e,color:t})=>{const r=(0,_index.useTheme)().settings.icons.error??_defaultIcons.defaultIcons.error;return(0,_jsxRuntime.jsx)(_jsxRuntime.Fragment,{children:r({size:e,color:t})})};exports.FieldErrorGlyph=FieldErrorGlyph;const hasFieldText=e=>null!=e&&!1!==e&&!0!==e&&""!==e;exports.hasFieldText=hasFieldText;const fieldTextAsString=e=>"string"==typeof e?e:void 0;exports.fieldTextAsString=fieldTextAsString;const FieldLabel=({children:e,size:t="md",required:r=!1,help:o,color:i,style:l})=>{const s=(0,_index.useTheme)(),n=(0,_index.resolveFieldSize)(s,t),a=hasFieldText(o),d=(0,_Notation.useNotationInk)(l,n["label-text"],i??s.colors["field-label"]),c=(0,_jsxRuntime.jsxs)(_reactNative.Text,{style:[familyStyles.label,{color:i??s.colors["field-label"],fontSize:n["label-text"],...(0,_index.fontFor)(s,"semibold"),marginBottom:a?s.space.none:n["label-gap"]},a?familyStyles.labelShrink:null,l],children:[(0,_jsxRuntime.jsx)(_Notation.NotationInkContext.Provider,{value:d,children:e}),r?(0,_jsxRuntime.jsx)(RequiredMark,{}):null]});return a?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[familyStyles.labelRow,{marginBottom:n["label-gap"]}],children:[c,(0,_jsxRuntime.jsx)(_reactNative.View,{style:[familyStyles.help,{marginLeft:s.space.xs}],children:o})]}):c};exports.FieldLabel=FieldLabel;const FieldMessage=({text:e,error:t=!1,size:r="md",style:o})=>{const i=(0,_index.useTheme)(),l=(0,_index.resolveFieldSize)(i,r),s=t?i.colors["field-message"]:i.colors["text-muted"],n=(0,_Notation.useNotationInk)(o,l["message-text"],s);return hasFieldText(e)?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[familyStyles.messageRow,{marginTop:l["message-gap"],columnGap:i.space.xs}],accessibilityLiveRegion:t?"polite":"none",children:[t?(0,_jsxRuntime.jsx)(FieldErrorGlyph,{size:l["message-text"],color:s}):null,(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[familyStyles.messageText,{color:s,fontSize:l["message-text"],...(0,_index.fontFor)(i,"normal")},o],children:(0,_jsxRuntime.jsx)(_Notation.NotationInkContext.Provider,{value:n,children:e})})]}):null};exports.FieldMessage=FieldMessage;const familyStyles=_reactNative.StyleSheet.create({label:{includeFontPadding:!1},labelShrink:{flexShrink:1},labelRow:{flexDirection:"row",alignItems:"center"},help:{flexShrink:0,alignItems:"center",justifyContent:"center"},messageRow:{flexDirection:"row",alignItems:"center"},messageText:{flexShrink:1,includeFontPadding:!1}}),resolveVariantColors=(e,t)=>{let r,o,i,l,s;"outlined"===t?(r=e.colors["field-bg"],o=e.colors["field-bg-focus"],i=e.colors["field-bg-disabled"],l=e.colors["field-border"],s=e.size.border):"underline"===t?(r="transparent",o=void 0,i="transparent",l={bottom:e.colors["field-border"]},s={bottom:e.size.border}):(r=e.colors["field-bg"],o=void 0,i=e.colors["field-bg-disabled"],l="transparent",s=0);const wrapToIdleShape=e=>"string"==typeof l?e:{bottom:e},n=expandColorSides(l),a=expandColorSides(wrapToIdleShape(e.colors["field-border-focus"]));return{backgroundIdleEmpty:r,backgroundIdleFilled:r,backgroundFocused:o,backgroundError:void 0,backgroundDisabled:i,borderIdle:n,borderFocused:a,borderError:expandColorSides(wrapToIdleShape(e.colors["field-border-error"])),borderDisabled:expandColorSides(l),borderWidth:expandWidthSides(s),borderFocusedRepresentative:pickRepresentativeBorderColor(a)}};exports.resolveVariantColors=resolveVariantColors;const FieldBase=e=>{const{size:t="md",variant:r,focused:o=!1,disabled:i=!1,error:l=!1,filled:s=!1,leading:n,leadingDivider:a=!1,trailing:d,slotAlign:c="center",slotLineHeight:u,topNotch:b,children:p,onPress:x,pressFeedback:g=!0,minHeight:m,maxHeight:h,width:f,height:_,paddingHorizontal:R,paddingLeft:y,paddingRight:v,paddingVertical:j,borderRadius:S,borderTopLeftRadius:F,borderTopRightRadius:C,borderBottomLeftRadius:T,borderBottomRightRadius:k,borderWidth:N,borderTopWidth:q,borderRightWidth:w,borderBottomWidth:I,borderLeftWidth:L,gap:B,style:V,testID:z,accessibilityRole:M,accessibilityLabel:E,accessibilityState:W,accessibilityHint:D}=e,P=(0,_index.useTheme)(),A=(0,_react.useMemo)(()=>buildStyles(),[]),H=r??P.settings.components.field?.defaultVariant??"outlined",G=(0,_index.resolveFieldSize)(P,t),O=(0,_react.useMemo)(()=>resolveVariantColors(P,H),[P,H]),$=l?2:o?1:0,J=(0,_react.useRef)((0,_index.createAnimatedValue)($)).current;(0,_react.useEffect)(()=>{const e=_reactNative.Animated.timing(J,{toValue:$,duration:P.motion.duration.fast,easing:_reactNative.Easing.bezier(...P.motion.ease["in-out"]),useNativeDriver:!1});return e.start(),()=>e.stop()},[$,J,P.motion.duration.fast,P.motion.ease["in-out"]]);const K=[0,1,2],Q=s?O.backgroundIdleFilled:O.backgroundIdleEmpty,U=O.backgroundFocused??Q,X=O.backgroundError??Q,Y=i?O.backgroundDisabled:J.interpolate({inputRange:K,outputRange:[Q,U,X]}),Z=O.borderIdle,ee=O.borderFocused,te=O.borderError,re={top:q,right:w,bottom:I,left:L},oe={top:re.top??N??O.borderWidth.top,right:re.right??N??O.borderWidth.right,bottom:re.bottom??N??O.borderWidth.bottom,left:re.left??N??O.borderWidth.left},ie={minHeight:_??m??G["min-height"],maxHeight:h,paddingHorizontal:R??G["padding-x"],paddingVertical:j??G["padding-y"],paddingLeft:y??R??G["padding-x"],paddingRight:v??R??G["padding-x"],backgroundColor:Y,columnGap:B??P.space.md,alignItems:"top"===c?"flex-start":"center"},le="underline"===H,se=le?P.radius.none:S??G.radius,ne=le?{tl:P.radius.none,tr:P.radius.none,bl:P.radius.none,br:P.radius.none}:{tl:F??se,tr:C??se,bl:T??se,br:k??se};ie.borderTopLeftRadius=ne.tl,ie.borderTopRightRadius=ne.tr,ie.borderBottomLeftRadius=ne.bl,ie.borderBottomRightRadius=ne.br,ie.borderCurve=_corners.smoothCorners.borderCurve,ie.borderTopWidth=oe.top,ie.borderRightWidth=oe.right,ie.borderBottomWidth=oe.bottom,ie.borderLeftWidth=oe.left;const sideColor=e=>J.interpolate({inputRange:K,outputRange:[Z[e],ee[e],te[e]]}),sameOnEverySide=e=>e.top===e.right&&e.top===e.bottom&&e.top===e.left,ae=!le&&ne.tl===ne.tr&&ne.tl===ne.bl&&ne.tl===ne.br&&sameOnEverySide(oe)&&sameOnEverySide(Z)&&sameOnEverySide(ee)&&sameOnEverySide(te)&&sameOnEverySide(O.borderDisabled),de=(0,_SquircleFill.useSquircle)(ae,ne.tl);if(de.active)ie.backgroundColor="transparent",ie.borderTopColor="transparent",ie.borderRightColor="transparent",ie.borderBottomColor="transparent",ie.borderLeftColor="transparent";else if(i){const e=O.borderDisabled;ie.borderTopColor=e.top,ie.borderRightColor=e.right,ie.borderBottomColor=e.bottom,ie.borderLeftColor=e.left}else ie.borderTopColor=sideColor("top"),ie.borderRightColor=sideColor("right"),ie.borderBottomColor=sideColor("bottom"),ie.borderLeftColor=sideColor("left");const ce=i?O.borderDisabled.top:sideColor("top"),ue=(0,_react.useRef)($);ue.current=$,(0,_react.useEffect)(()=>{J.setValue(ue.current)},[O,J]),void 0!==f&&(ie.width=f),void 0!==_&&(ie.height=_);const be={disabled:i,...W},pe="top"===c,xe=pe?{alignSelf:"flex-start",marginTop:Math.max(0,((u??G.icon)-G.icon)/2)}:null,ge=_??m??G["min-height"],me=(()=>{if(!b)return 0;const e=Math.min(ne.tl,ge/2),t=b.left;return e<=0||t>=e?0:Math.ceil(e-Math.sqrt(e*e-(e-t)*(e-t)))})(),he=b&&oe.top>0?(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{pointerEvents:"none",style:{position:"absolute",top:-oe.top,left:b.left-oe.left,width:b.width,height:oe.top+me,backgroundColor:Y}}):null,renderInner=e=>(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[de.active&&de.size?(0,_jsxRuntime.jsx)(_SquircleFill.SquircleFill,{width:de.size.width,height:de.size.height,radius:ne.tl,fill:e&&!i?P.colors["surface-pressed"]:Y,stroke:ce,strokeWidth:oe.top,outset:oe.top}):null,he,null!=n?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[A.slot,xe],children:n}):null,null!=n&&a?(0,_jsxRuntime.jsx)(_reactNative.View,{pointerEvents:"none",style:[A.divider,xe,{height:G.icon,backgroundColor:P.colors["field-border"]}]}):null,(0,_jsxRuntime.jsx)(_reactNative.View,{style:[A.content,pe?A.contentTop:null],children:p}),null!=d?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[A.slot,xe],children:d}):null]}),fe=(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{onLayout:de.onLayout,style:[A.box,ie,V],accessibilityRole:M,accessibilityLabel:E,accessibilityHint:D,accessibilityState:be,...(0,_ariaState.ariaFromState)(be),testID:z,children:renderInner(!1)});return x&&!g?(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:x,disabled:i,accessible:!1,children:fe}):x?(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:x,disabled:i,accessibilityRole:M??"button",accessibilityLabel:E,accessibilityHint:D,accessibilityState:be,...(0,_ariaState.ariaFromState)(be),testID:z,children:({pressed:e})=>(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{onLayout:de.onLayout,style:[A.box,ie,!e||i||de.active?null:{backgroundColor:P.colors["surface-pressed"]},V],children:renderInner(e)})}):fe};exports.FieldBase=FieldBase,FieldBase.displayName="FieldBase";const buildStyles=()=>_reactNative.StyleSheet.create({box:{flexDirection:"row",alignItems:"center",overflow:"visible"},slot:{alignItems:"center",justifyContent:"center"},divider:{width:1,alignSelf:"center"},content:{flex:1,flexDirection:"row",alignItems:"center"},contentTop:{alignItems:"flex-start"}});var _default=exports.default=FieldBase;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.matchesAccept=exports.formatFileSize=exports.default=exports.FilePicker=void 0;var _react=require("react"),_reactNative=require("react-native"),_index=require("../../hooks/index.js"),_index2=require("../../theme/index.js"),_index3=require("../../utils/index.js"),_corners=require("../../utils/corners.js"),_hitSlop=require("../../utils/hitSlop.js"),_defaultIcons=require("../AppIcon/defaultIcons.js"),_index4=require("../FieldBase/index.js"),_OptionSheet=require("../OptionSheet/OptionSheet.js"),_index5=require("../Spinner/index.js"),_jsxRuntime=require("react/jsx-runtime");let fileIdSeq=0;const nextFileId=()=>"wfp-"+ ++fileIdSeq,DEFAULT_LABELS={trigger:"Attach file",addMore:"Add more",sheetTitle:"Add from",removeFile:e=>`Remove ${e}`,retry:"Retry upload",errorTooMany:e=>`You can attach up to ${e} files.`,errorTooLarge:(e,t)=>`${e} is larger than ${t} MB.`,errorWrongType:e=>`${e} is not an accepted file type.`},formatFileSize=e=>{if(void 0===e||e<=0)return"";const t=["B","KB","MB","GB"];let r=e,i=0;for(;r>=1024&&i<t.length-1;)r/=1024,i+=1;return`${r>=10||0===i?Math.round(r):Math.round(10*r)/10} ${t[i]}`};exports.formatFileSize=formatFileSize;const matchesAccept=(e,t)=>!t||0===t.length||!!e&&t.some(t=>"*/*"===t||"*"===t||(t.endsWith("/*")?e.startsWith(t.slice(0,t.length-1)):e===t));exports.matchesAccept=matchesAccept;const isImage=e=>!0===e.type?.startsWith("image/")||!e.type&&/\.(png|jpe?g|gif|webp|heic)$/i.test(e.name),imageSourceOf=e=>e.thumbnailUrl??(isImage(e)?e.uri??e.url:void 0),extensionOf=e=>{const t=e.lastIndexOf(".");return t<=0||t===e.length-1?"FILE":e.slice(t+1).toUpperCase().slice(0,4)},FilePicker=exports.FilePicker=(0,_react.forwardRef)((e,t)=>{const{files:r,defaultFiles:i,onChange:s,sources:o,maxFiles:n,maxSizeMB:l,accept:a,validate:c,process:d,variant:u="card",renderFile:x,renderTrigger:m,disabled:h=!1,helperText:g,error:p,labels:_,haptic:b,onPick:y,onRemove:f,onError:j,onFilePress:v,onRetry:R,style:S,accessibilityLabel:T,testID:C}=e,F=(0,_index2.useTheme)(),w=(0,_react.useMemo)(()=>buildStyles(F),[F]),z=(0,_react.useMemo)(()=>({...DEFAULT_LABELS,..._}),[_]),N=F.radius.md,P=F.colors.primary,[k,I]=(0,_index.useControllableState)({value:r,defaultValue:i??[],onChange:s}),O=(0,_react.useRef)(k);O.current=k;const V=(0,_react.useCallback)(e=>{O.current=e,I(e)},[I]),[M,B]=(0,_react.useState)(null),[L,A]=(0,_react.useState)(!1),$=p??M??void 0,q="number"==typeof n&&k.length>=n,H=(0,_react.useCallback)((e,t)=>{0!==e.length&&(B(e[0]),e.forEach(e=>j?.(e,t)),!1!==b&&(0,_index3.triggerHaptic)("notificationError"))},[j,b]),E=(0,_react.useCallback)(async e=>{let t;try{t=await e.pick()}catch(e){return void H([e instanceof Error?e.message:String(e)])}if(!t||0===t.length)return;const r=[];let i=t.map(e=>({id:nextFileId(),name:e.name??e.uri.split("/").pop()??"file",uri:e.uri,type:e.type,size:e.size,meta:e.meta,status:"idle"}));if("number"==typeof n){const e=Math.max(0,n-O.current.length);i.length>e&&(r.push(z.errorTooMany(n)),i=i.slice(0,e))}const s=[];for(const e of i){if("number"==typeof l&&"number"==typeof e.size&&e.size>1024*l*1024){r.push(z.errorTooLarge(e.name,l));continue}if(!matchesAccept(e.type,a)){r.push(z.errorWrongType(e.name));continue}const t=c?.(e);t?r.push(t):s.push(e)}if(H(r),0===s.length)return;if(!d){V([...O.current,...s]),B(r.length>0?r[0]:null);const e=(0,_index3.resolveHaptic)(b,"selection");return e&&(0,_index3.triggerHaptic)(e),void y?.(s)}const o=s.map(e=>({...e,status:"processing"}));V([...O.current,...o]);const u=[];for(const e of o)try{const t=await d({...e,status:"idle"}),r={...t,id:e.id,status:t.status??"idle"};V(O.current.map(t=>t.id===e.id?r:t)),u.push(r)}catch(t){V(O.current.filter(t=>t.id!==e.id)),H([t instanceof Error?t.message:String(t)],e)}if(u.length>0){0===r.length&&B(null);const e=(0,_index3.resolveHaptic)(b,"selection");e&&(0,_index3.triggerHaptic)(e),y?.(u)}},[n,l,a,c,d,z,H,V,y,b]),W=(0,_react.useCallback)(e=>{if(h||q)return;const t=e?o.find(t=>t.key===e):1===o.length?o[0]:void 0;t?E(t):o.length>1&&A(!0)},[h,q,o,E]),D=(0,_react.useCallback)(e=>{if(h)return;V(O.current.filter(t=>t.id!==e.id)),B(null);const t=(0,_index3.resolveHaptic)(b,"selection");t&&(0,_index3.triggerHaptic)(t),f?.(e)},[h,V,f,b]),U=(0,_react.useCallback)(()=>{V([]),B(null)},[V]);(0,_react.useImperativeHandle)(t,()=>({open:W,clear:U}),[W,U]);const G=0===k.length?z.trigger:`${k.length} file${1===k.length?"":"s"} attached`,K=T??`Attachments. ${G}`,statusText=e=>{switch(e.status){case"processing":return"Processing…";case"uploading":return`Uploading ${Math.round(100*(e.progress??0))}%`;case"done":return"Uploaded";case"error":return e.error??"Failed";default:return""}},fileA11yLabel=e=>[e.name,formatFileSize(e.size),statusText(e)].filter(Boolean).join(", "),Y=F.settings.icons.attachment??_defaultIcons.defaultIcons.attachment,renderStatusOverlay=e=>{if("processing"===e.status)return(0,_jsxRuntime.jsx)(_reactNative.View,{style:[w.tileOverlay,{backgroundColor:F.colors.scrim}],children:(0,_jsxRuntime.jsx)(_index5.Spinner,{size:"sm"})});if("uploading"===e.status){const t=Math.round(100*(e.progress??0));return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[w.tileOverlay,{backgroundColor:F.colors.scrim}],children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[w.tileOverlayText,{color:F.colors["on-scrim"]}],children:`${t}%`}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:[w.tileProgressTrack,{backgroundColor:F.colors.border}],children:(0,_jsxRuntime.jsx)(_reactNative.View,{style:[w.tileProgressFill,{width:`${t}%`,backgroundColor:F.colors.primary}]})})]})}return"done"===e.status?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[w.doneBadge,{backgroundColor:F.colors.success}],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[w.doneBadgeText,{color:F.colors["on-success"]}],children:"✓"})}):null},renderThumbnail=e=>{const t=imageSourceOf(e);return t?(0,_jsxRuntime.jsx)(_reactNative.Image,{source:{uri:t},style:w.thumbnailImage}):(0,_jsxRuntime.jsx)(_reactNative.View,{style:[w.extensionTile,{backgroundColor:F.colors["bg-subtle"]}],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[w.extensionText,{color:F.colors["text-muted"],...(0,_index2.fontFor)(F,"semibold")}],children:extensionOf(e.name)})})},removeButton=e=>(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:()=>D(e),disabled:h,hitSlop:8,...(0,_hitSlop.hitSlopMarker)(8),accessibilityRole:"button",accessibilityLabel:z.removeFile(e.name),style:[w.removeButton,{backgroundColor:F.colors.scrim}],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[w.removeButtonText,{color:F.colors["on-scrim"]}],children:"×"})}),retryButton=e=>R&&"error"===e.status?(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:()=>R(e),disabled:h,hitSlop:8,...(0,_hitSlop.hitSlopMarker)(8),accessibilityRole:"button",accessibilityLabel:z.retry,children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[w.retryText,{color:F.colors.primary}],children:"↻"})}):null,renderOneFile=(e,t)=>{const r={file:e,index:t,disabled:h,remove:()=>D(e),retry:R?()=>R(e):void 0},i=x?x(r):"card"===u?(e=>{const{file:t}=e;return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[w.tile,{width:84,height:84,borderRadius:N,..._corners.smoothCorners,borderColor:"error"===t.status?F.colors.danger:F.colors.border}],children:[renderThumbnail(t),renderStatusOverlay(t),"error"===t.status?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[w.tileOverlay,{backgroundColor:F.colors.scrim}],children:retryButton(t)}):null,removeButton(t)]})})(r):(e=>{const{file:t}=e,r=statusText(t);return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[w.listRow,{borderRadius:N,..._corners.smoothCorners,borderColor:"error"===t.status?F.colors.danger:F.colors.border,backgroundColor:F.colors.bg}],children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[w.listThumb,{borderRadius:F.radius.sm,..._corners.smoothCorners}],children:[renderThumbnail(t),"processing"===t.status?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[w.tileOverlay,{backgroundColor:F.colors.scrim}],children:(0,_jsxRuntime.jsx)(_index5.Spinner,{size:"sm"})}):null]}),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:w.listTextWrap,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{numberOfLines:1,ellipsizeMode:"middle",style:[w.listName,{color:F.colors["text-body"],fontSize:F.text.sm.size,...(0,_index2.fontFor)(F,"medium")}],children:t.name}),(0,_jsxRuntime.jsx)(_reactNative.Text,{numberOfLines:1,style:[w.listSubtitle,{color:"error"===t.status?F.colors["danger-text"]:F.colors["text-subtle"],fontSize:F.text.xs.size}],children:[formatFileSize(t.size),r].filter(Boolean).join(" · ")}),"uploading"===t.status?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[w.listProgressTrack,{backgroundColor:F.colors.border}],children:(0,_jsxRuntime.jsx)(_reactNative.View,{style:[w.listProgressFill,{width:`${Math.round(100*(t.progress??0))}%`,backgroundColor:F.colors.primary}]})}):null]}),retryButton(t),(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:()=>D(t),disabled:h,hitSlop:8,...(0,_hitSlop.hitSlopMarker)(8),accessibilityRole:"button",accessibilityLabel:z.removeFile(t.name),children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[w.listRemoveText,{color:F.colors["text-subtle"]}],children:"×"})})]})})(r);return(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:v?()=>v(e):void 0,disabled:h||!v,accessibilityLabel:fileA11yLabel(e),children:i},e.id)},J={open:W,disabled:h||q,fileCount:k.length,atCapacity:q},dashedTrigger=e=>(0,_jsxRuntime.jsxs)(_reactNative.Pressable,{onPress:()=>W(),disabled:h||q,accessibilityRole:"button",accessibilityLabel:K,accessibilityState:{disabled:h||q},"aria-disabled":h||q,style:({pressed:t})=>[w.trigger,e?w.triggerCompact:null,{borderRadius:N,..._corners.smoothCorners,borderColor:P,backgroundColor:t?F.colors["surface-pressed"]:F.colors.bg,opacity:h||q?.55:1}],children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:w.triggerRow,children:[Y?Y({size:16,color:F.colors.primary}):null,(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[w.triggerText,{color:F.colors.primary,fontSize:F.text.sm.size,...(0,_index2.fontFor)(F,"medium")}],children:0===k.length?z.trigger:z.addMore})]}),!e&&g?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[w.helperText,{color:F.colors["text-subtle"],fontSize:F.text.xs.size}],children:g}):null]}),Q=(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:()=>W(),disabled:h||q,accessibilityRole:"button",accessibilityLabel:z.addMore,style:({pressed:e})=>[w.tile,w.addTile,{width:84,height:84,borderRadius:N,..._corners.smoothCorners,borderColor:P,backgroundColor:e?F.colors["surface-pressed"]:"transparent",opacity:h||q?.55:1}],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[w.addTileText,{color:F.colors.primary}],children:"+"})});return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[w.container,S],testID:C,accessibilityLabel:K,children:["card"===u?0===k.length?m?m(J):dashedTrigger(!1):(0,_jsxRuntime.jsxs)(_reactNative.ScrollView,{horizontal:!0,showsHorizontalScrollIndicator:!1,contentContainerStyle:[w.strip,{columnGap:F.space.sm}],children:[k.map(renderOneFile),m?m(J):q||h?null:Q]}):(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{rowGap:F.space.sm},children:[m?m(J):q?null:dashedTrigger(k.length>0),k.map(renderOneFile)]}),(0,_index4.hasFieldText)($)?(0,_jsxRuntime.jsx)(_reactNative.Text,{accessibilityLiveRegion:"polite",style:[w.errorText,{color:F.colors["danger-text"],fontSize:F.text.xs.size,marginTop:F.space.xxs}],children:$}):null,(0,_jsxRuntime.jsx)(_OptionSheet.OptionSheet,{open:L,onClose:()=>A(!1),title:z.sheetTitle,options:o,labelOf:e=>e.label,getValue:e=>e.key,disabledOf:()=>!1,descriptionOf:e=>e.description,iconOf:e=>e.icon,isSelected:()=>!1,onSelect:e=>{A(!1),E(e)}})]})});FilePicker.displayName="FilePicker";const buildStyles=e=>_reactNative.StyleSheet.create({container:{width:"100%"},trigger:{borderWidth:1,borderStyle:"dashed",alignItems:"center",minHeight:48,paddingVertical:e.space.md,paddingHorizontal:e.space.lg},triggerCompact:{minHeight:40,paddingVertical:e.space.sm},triggerRow:{flexDirection:"row",alignItems:"center",columnGap:e.space.sm},triggerText:{includeFontPadding:!1},helperText:{includeFontPadding:!1,marginTop:e.space.xs,textAlign:"center"},strip:{paddingVertical:e.space.xxs},tile:{borderWidth:1,overflow:"hidden"},addTile:{borderStyle:"dashed",alignItems:"center",justifyContent:"center"},addTileText:{fontSize:e.text["3xl"].size,includeFontPadding:!1},thumbnailImage:{width:"100%",height:"100%",resizeMode:"cover"},extensionTile:{width:"100%",height:"100%",alignItems:"center",justifyContent:"center"},extensionText:{fontSize:e.text.sm.size,letterSpacing:1,includeFontPadding:!1},tileOverlay:{..._reactNative.StyleSheet.absoluteFill,alignItems:"center",justifyContent:"center"},tileOverlayText:{fontSize:e.text.sm.size,includeFontPadding:!1,marginBottom:e.space.xs},tileProgressTrack:{position:"absolute",left:8,right:8,bottom:8,height:3,borderRadius:e.radius.pill,..._corners.smoothCorners,overflow:"hidden"},tileProgressFill:{height:"100%",borderRadius:e.radius.pill,..._corners.smoothCorners},doneBadge:{position:"absolute",right:4,bottom:4,width:18,height:18,borderRadius:e.radius.pill,..._corners.smoothCorners,alignItems:"center",justifyContent:"center"},doneBadgeText:{fontSize:e.text.xs.size,includeFontPadding:!1},removeButton:{position:"absolute",top:4,right:4,width:20,height:20,borderRadius:e.radius.pill,..._corners.smoothCorners,alignItems:"center",justifyContent:"center"},removeButtonText:{fontSize:e.text.sm.size,lineHeight:15,includeFontPadding:!1},retryText:{fontSize:e.text.xl.size,includeFontPadding:!1},listRow:{flexDirection:"row",alignItems:"center",borderWidth:1,padding:e.space.sm,columnGap:e.space.sm},listThumb:{width:40,height:40,overflow:"hidden"},listTextWrap:{flex:1},listName:{includeFontPadding:!1},listSubtitle:{includeFontPadding:!1,marginTop:e.space.xxs},listProgressTrack:{height:3,borderRadius:e.radius.pill,..._corners.smoothCorners,overflow:"hidden",marginTop:e.space.xs},listProgressFill:{height:"100%",borderRadius:e.radius.pill,..._corners.smoothCorners},listRemoveText:{fontSize:e.text["2xl"].size,includeFontPadding:!1,paddingHorizontal:e.space.xs},errorText:{includeFontPadding:!1}});var _default=exports.default=FilePicker;
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.matchesAccept=exports.formatFileSize=exports.default=exports.FilePicker=void 0;var _react=require("react"),_reactNative=require("react-native"),_index=require("../../hooks/index.js"),_index2=require("../../theme/index.js"),_index3=require("../../utils/index.js"),_corners=require("../../utils/corners.js"),_hitSlop=require("../../utils/hitSlop.js"),_defaultIcons=require("../AppIcon/defaultIcons.js"),_index4=require("../FieldBase/index.js"),_OptionSheet=require("../OptionSheet/OptionSheet.js"),_index5=require("../Spinner/index.js"),_jsxRuntime=require("react/jsx-runtime");let fileIdSeq=0;const nextFileId=()=>"wfp-"+ ++fileIdSeq,DEFAULT_LABELS={trigger:"Attach file",addMore:"Add more",sheetTitle:"Add from",removeFile:e=>`Remove ${e}`,retry:"Retry upload",errorTooMany:e=>`You can attach up to ${e} files.`,errorTooLarge:(e,t)=>`${e} is larger than ${t} MB.`,errorWrongType:e=>`${e} is not an accepted file type.`},formatFileSize=e=>{if(void 0===e||e<=0)return"";const t=["B","KB","MB","GB"];let r=e,i=0;for(;r>=1024&&i<t.length-1;)r/=1024,i+=1;return`${r>=10||0===i?Math.round(r):Math.round(10*r)/10} ${t[i]}`};exports.formatFileSize=formatFileSize;const matchesAccept=(e,t)=>!t||0===t.length||!!e&&t.some(t=>"*/*"===t||"*"===t||(t.endsWith("/*")?e.startsWith(t.slice(0,t.length-1)):e===t));exports.matchesAccept=matchesAccept;const isImage=e=>!0===e.type?.startsWith("image/")||!e.type&&/\.(png|jpe?g|gif|webp|heic)$/i.test(e.name),imageSourceOf=e=>e.thumbnailUrl??(isImage(e)?e.uri??e.url:void 0),extensionOf=e=>{const t=e.lastIndexOf(".");return t<=0||t===e.length-1?"FILE":e.slice(t+1).toUpperCase().slice(0,4)},FilePicker=exports.FilePicker=(0,_react.forwardRef)((e,t)=>{const{files:r,defaultFiles:i,onChange:s,sources:o,maxFiles:n,maxSizeMB:l,accept:a,validate:c,process:d,variant:u="card",renderFile:x,renderTrigger:m,disabled:h=!1,helperText:g,error:p,labels:_,haptic:b,onPick:y,onRemove:f,onError:j,onFilePress:v,onRetry:R,style:S,accessibilityLabel:T,testID:C}=e,F=(0,_index2.useTheme)(),w=(0,_react.useMemo)(()=>buildStyles(F),[F]),z=(0,_react.useMemo)(()=>({...DEFAULT_LABELS,..._}),[_]),N=F.radius.md,P=F.colors.primary,[k,I]=(0,_index.useControllableState)({value:r,defaultValue:i??[],onChange:s}),O=(0,_react.useRef)(k);O.current=k;const V=(0,_react.useCallback)(e=>{O.current=e,I(e)},[I]),[M,B]=(0,_react.useState)(null),[L,A]=(0,_react.useState)(!1),$=p??M??void 0,q="number"==typeof n&&k.length>=n,H=(0,_react.useCallback)((e,t)=>{0!==e.length&&(B(e[0]),e.forEach(e=>{j?.(e,t)}),!1!==b&&(0,_index3.triggerHaptic)("notificationError"))},[j,b]),E=(0,_react.useCallback)(async e=>{let t;try{t=await e.pick()}catch(e){return void H([e instanceof Error?e.message:String(e)])}if(!t||0===t.length)return;const r=[];let i=t.map(e=>({id:nextFileId(),name:e.name??e.uri.split("/").pop()??"file",uri:e.uri,type:e.type,size:e.size,meta:e.meta,status:"idle"}));if("number"==typeof n){const e=Math.max(0,n-O.current.length);i.length>e&&(r.push(z.errorTooMany(n)),i=i.slice(0,e))}const s=[];for(const e of i){if("number"==typeof l&&"number"==typeof e.size&&e.size>1024*l*1024){r.push(z.errorTooLarge(e.name,l));continue}if(!matchesAccept(e.type,a)){r.push(z.errorWrongType(e.name));continue}const t=c?.(e);t?r.push(t):s.push(e)}if(H(r),0===s.length)return;if(!d){V([...O.current,...s]),B(r.length>0?r[0]:null);const e=(0,_index3.resolveHaptic)(b,"selection");return e&&(0,_index3.triggerHaptic)(e),void y?.(s)}const o=s.map(e=>({...e,status:"processing"}));V([...O.current,...o]);const u=[];for(const e of o)try{const t=await d({...e,status:"idle"}),r={...t,id:e.id,status:t.status??"idle"};V(O.current.map(t=>t.id===e.id?r:t)),u.push(r)}catch(t){V(O.current.filter(t=>t.id!==e.id)),H([t instanceof Error?t.message:String(t)],e)}if(u.length>0){0===r.length&&B(null);const e=(0,_index3.resolveHaptic)(b,"selection");e&&(0,_index3.triggerHaptic)(e),y?.(u)}},[n,l,a,c,d,z,H,V,y,b]),W=(0,_react.useCallback)(e=>{if(h||q)return;const t=e?o.find(t=>t.key===e):1===o.length?o[0]:void 0;t?E(t):o.length>1&&A(!0)},[h,q,o,E]),D=(0,_react.useCallback)(e=>{if(h)return;V(O.current.filter(t=>t.id!==e.id)),B(null);const t=(0,_index3.resolveHaptic)(b,"selection");t&&(0,_index3.triggerHaptic)(t),f?.(e)},[h,V,f,b]),U=(0,_react.useCallback)(()=>{V([]),B(null)},[V]);(0,_react.useImperativeHandle)(t,()=>({open:W,clear:U}),[W,U]);const G=0===k.length?z.trigger:`${k.length} file${1===k.length?"":"s"} attached`,K=T??`Attachments. ${G}`,statusText=e=>{switch(e.status){case"processing":return"Processing…";case"uploading":return`Uploading ${Math.round(100*(e.progress??0))}%`;case"done":return"Uploaded";case"error":return e.error??"Failed";default:return""}},fileA11yLabel=e=>[e.name,formatFileSize(e.size),statusText(e)].filter(Boolean).join(", "),Y=F.settings.icons.attachment??_defaultIcons.defaultIcons.attachment,renderStatusOverlay=e=>{if("processing"===e.status)return(0,_jsxRuntime.jsx)(_reactNative.View,{style:[w.tileOverlay,{backgroundColor:F.colors.scrim}],children:(0,_jsxRuntime.jsx)(_index5.Spinner,{size:"sm"})});if("uploading"===e.status){const t=Math.round(100*(e.progress??0));return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[w.tileOverlay,{backgroundColor:F.colors.scrim}],children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[w.tileOverlayText,{color:F.colors["on-scrim"]}],children:`${t}%`}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:[w.tileProgressTrack,{backgroundColor:F.colors.border}],children:(0,_jsxRuntime.jsx)(_reactNative.View,{style:[w.tileProgressFill,{width:`${t}%`,backgroundColor:F.colors.primary}]})})]})}return"done"===e.status?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[w.doneBadge,{backgroundColor:F.colors.success}],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[w.doneBadgeText,{color:F.colors["on-success"]}],children:"✓"})}):null},renderThumbnail=e=>{const t=imageSourceOf(e);return t?(0,_jsxRuntime.jsx)(_reactNative.Image,{source:{uri:t},style:w.thumbnailImage}):(0,_jsxRuntime.jsx)(_reactNative.View,{style:[w.extensionTile,{backgroundColor:F.colors["bg-subtle"]}],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[w.extensionText,{color:F.colors["text-muted"],...(0,_index2.fontFor)(F,"semibold")}],children:extensionOf(e.name)})})},removeButton=e=>(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:()=>D(e),disabled:h,hitSlop:8,...(0,_hitSlop.hitSlopMarker)(8),accessibilityRole:"button",accessibilityLabel:z.removeFile(e.name),style:[w.removeButton,{backgroundColor:F.colors.scrim}],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[w.removeButtonText,{color:F.colors["on-scrim"]}],children:"×"})}),retryButton=e=>R&&"error"===e.status?(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:()=>R(e),disabled:h,hitSlop:8,...(0,_hitSlop.hitSlopMarker)(8),accessibilityRole:"button",accessibilityLabel:z.retry,children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[w.retryText,{color:F.colors.primary}],children:"↻"})}):null,renderOneFile=(e,t)=>{const r={file:e,index:t,disabled:h,remove:()=>D(e),retry:R?()=>R(e):void 0},i=x?x(r):"card"===u?(e=>{const{file:t}=e;return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[w.tile,{width:84,height:84,borderRadius:N,..._corners.smoothCorners,borderColor:"error"===t.status?F.colors.danger:F.colors.border}],children:[renderThumbnail(t),renderStatusOverlay(t),"error"===t.status?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[w.tileOverlay,{backgroundColor:F.colors.scrim}],children:retryButton(t)}):null,removeButton(t)]})})(r):(e=>{const{file:t}=e,r=statusText(t);return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[w.listRow,{borderRadius:N,..._corners.smoothCorners,borderColor:"error"===t.status?F.colors.danger:F.colors.border,backgroundColor:F.colors.bg}],children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[w.listThumb,{borderRadius:F.radius.sm,..._corners.smoothCorners}],children:[renderThumbnail(t),"processing"===t.status?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[w.tileOverlay,{backgroundColor:F.colors.scrim}],children:(0,_jsxRuntime.jsx)(_index5.Spinner,{size:"sm"})}):null]}),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:w.listTextWrap,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{numberOfLines:1,ellipsizeMode:"middle",style:[w.listName,{color:F.colors["text-body"],fontSize:F.text.sm.size,...(0,_index2.fontFor)(F,"medium")}],children:t.name}),(0,_jsxRuntime.jsx)(_reactNative.Text,{numberOfLines:1,style:[w.listSubtitle,{color:"error"===t.status?F.colors["danger-text"]:F.colors["text-subtle"],fontSize:F.text.xs.size}],children:[formatFileSize(t.size),r].filter(Boolean).join(" · ")}),"uploading"===t.status?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[w.listProgressTrack,{backgroundColor:F.colors.border}],children:(0,_jsxRuntime.jsx)(_reactNative.View,{style:[w.listProgressFill,{width:`${Math.round(100*(t.progress??0))}%`,backgroundColor:F.colors.primary}]})}):null]}),retryButton(t),(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:()=>D(t),disabled:h,hitSlop:8,...(0,_hitSlop.hitSlopMarker)(8),accessibilityRole:"button",accessibilityLabel:z.removeFile(t.name),children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[w.listRemoveText,{color:F.colors["text-subtle"]}],children:"×"})})]})})(r);return(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:v?()=>v(e):void 0,disabled:h||!v,accessibilityLabel:fileA11yLabel(e),children:i},e.id)},J={open:W,disabled:h||q,fileCount:k.length,atCapacity:q},dashedTrigger=e=>(0,_jsxRuntime.jsxs)(_reactNative.Pressable,{onPress:()=>W(),disabled:h||q,accessibilityRole:"button",accessibilityLabel:K,accessibilityState:{disabled:h||q},"aria-disabled":h||q,style:({pressed:t})=>[w.trigger,e?w.triggerCompact:null,{borderRadius:N,..._corners.smoothCorners,borderColor:P,backgroundColor:t?F.colors["surface-pressed"]:F.colors.bg,opacity:h||q?.55:1}],children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:w.triggerRow,children:[Y?Y({size:16,color:F.colors.primary}):null,(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[w.triggerText,{color:F.colors.primary,fontSize:F.text.sm.size,...(0,_index2.fontFor)(F,"medium")}],children:0===k.length?z.trigger:z.addMore})]}),!e&&g?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[w.helperText,{color:F.colors["text-subtle"],fontSize:F.text.xs.size}],children:g}):null]}),Q=(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:()=>W(),disabled:h||q,accessibilityRole:"button",accessibilityLabel:z.addMore,style:({pressed:e})=>[w.tile,w.addTile,{width:84,height:84,borderRadius:N,..._corners.smoothCorners,borderColor:P,backgroundColor:e?F.colors["surface-pressed"]:"transparent",opacity:h||q?.55:1}],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[w.addTileText,{color:F.colors.primary}],children:"+"})});return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[w.container,S],testID:C,accessibilityLabel:K,children:["card"===u?0===k.length?m?m(J):dashedTrigger(!1):(0,_jsxRuntime.jsxs)(_reactNative.ScrollView,{horizontal:!0,showsHorizontalScrollIndicator:!1,contentContainerStyle:[w.strip,{columnGap:F.space.sm}],children:[k.map(renderOneFile),m?m(J):q||h?null:Q]}):(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{rowGap:F.space.sm},children:[m?m(J):q?null:dashedTrigger(k.length>0),k.map(renderOneFile)]}),(0,_index4.hasFieldText)($)?(0,_jsxRuntime.jsx)(_reactNative.Text,{accessibilityLiveRegion:"polite",style:[w.errorText,{color:F.colors["danger-text"],fontSize:F.text.xs.size,marginTop:F.space.xxs}],children:$}):null,(0,_jsxRuntime.jsx)(_OptionSheet.OptionSheet,{open:L,onClose:()=>A(!1),title:z.sheetTitle,options:o,labelOf:e=>e.label,getValue:e=>e.key,disabledOf:()=>!1,descriptionOf:e=>e.description,iconOf:e=>e.icon,isSelected:()=>!1,onSelect:e=>{A(!1),E(e)}})]})});FilePicker.displayName="FilePicker";const buildStyles=e=>_reactNative.StyleSheet.create({container:{width:"100%"},trigger:{borderWidth:1,borderStyle:"dashed",alignItems:"center",minHeight:48,paddingVertical:e.space.md,paddingHorizontal:e.space.lg},triggerCompact:{minHeight:40,paddingVertical:e.space.sm},triggerRow:{flexDirection:"row",alignItems:"center",columnGap:e.space.sm},triggerText:{includeFontPadding:!1},helperText:{includeFontPadding:!1,marginTop:e.space.xs,textAlign:"center"},strip:{paddingVertical:e.space.xxs},tile:{borderWidth:1,overflow:"hidden"},addTile:{borderStyle:"dashed",alignItems:"center",justifyContent:"center"},addTileText:{fontSize:e.text["3xl"].size,includeFontPadding:!1},thumbnailImage:{width:"100%",height:"100%",resizeMode:"cover"},extensionTile:{width:"100%",height:"100%",alignItems:"center",justifyContent:"center"},extensionText:{fontSize:e.text.sm.size,letterSpacing:1,includeFontPadding:!1},tileOverlay:{..._reactNative.StyleSheet.absoluteFill,alignItems:"center",justifyContent:"center"},tileOverlayText:{fontSize:e.text.sm.size,includeFontPadding:!1,marginBottom:e.space.xs},tileProgressTrack:{position:"absolute",left:8,right:8,bottom:8,height:3,borderRadius:e.radius.pill,..._corners.smoothCorners,overflow:"hidden"},tileProgressFill:{height:"100%",borderRadius:e.radius.pill,..._corners.smoothCorners},doneBadge:{position:"absolute",right:4,bottom:4,width:18,height:18,borderRadius:e.radius.pill,..._corners.smoothCorners,alignItems:"center",justifyContent:"center"},doneBadgeText:{fontSize:e.text.xs.size,includeFontPadding:!1},removeButton:{position:"absolute",top:4,right:4,width:20,height:20,borderRadius:e.radius.pill,..._corners.smoothCorners,alignItems:"center",justifyContent:"center"},removeButtonText:{fontSize:e.text.sm.size,lineHeight:15,includeFontPadding:!1},retryText:{fontSize:e.text.xl.size,includeFontPadding:!1},listRow:{flexDirection:"row",alignItems:"center",borderWidth:1,padding:e.space.sm,columnGap:e.space.sm},listThumb:{width:40,height:40,overflow:"hidden"},listTextWrap:{flex:1},listName:{includeFontPadding:!1},listSubtitle:{includeFontPadding:!1,marginTop:e.space.xxs},listProgressTrack:{height:3,borderRadius:e.radius.pill,..._corners.smoothCorners,overflow:"hidden",marginTop:e.space.xs},listProgressFill:{height:"100%",borderRadius:e.radius.pill,..._corners.smoothCorners},listRemoveText:{fontSize:e.text["2xl"].size,includeFontPadding:!1,paddingHorizontal:e.space.xs},errorText:{includeFontPadding:!1}});var _default=exports.default=FilePicker;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.KeyboardAwareScrollView=void 0;var _react=require("react"),_reactNative=require("react-native"),_reactNativeKeyboardController=require("react-native-keyboard-controller"),_reactNativeSafeAreaContext=require("react-native-safe-area-context"),_index=require("../../theme/index.js"),_jsxRuntime=require("react/jsx-runtime");const tapAreaStyle={flexGrow:1},KeyboardAwareScrollView=exports.KeyboardAwareScrollView=(0,_react.forwardRef)((e,r)=>{const{children:t,bottomOffset:o=24,extraKeyboardSpace:a=0,safeAreaEdges:i=["bottom"],refreshing:s=!1,onRefresh:l,dismissOnTapOutside:n=!1,contentContainerStyle:d,refreshControl:c,...u}=e,f=(0,_index.useTheme)(),b=(0,_reactNativeSafeAreaContext.useSafeAreaInsets)(),y=i.includes("bottom"),p={paddingBottom:y?b.bottom:0,...i.includes("top")?{paddingTop:b.top}:null,...i.includes("left")?{paddingLeft:b.left}:null,...i.includes("right")?{paddingRight:b.right}:null},x=c??(l?(0,_jsxRuntime.jsx)(_reactNative.RefreshControl,{refreshing:s,onRefresh:l,tintColor:f.colors.primary,colors:[f.colors.primary],progressBackgroundColor:f.colors.surface,titleColor:f.colors["text-muted"]}):void 0);return(0,_jsxRuntime.jsx)(_reactNativeKeyboardController.KeyboardAwareScrollView,{ref:r,bottomOffset:o,extraKeyboardSpace:a-(y?b.bottom:0),keyboardShouldPersistTaps:"handled",keyboardDismissMode:"none",contentContainerStyle:[d,p],refreshControl:x,...u,children:n?(0,_jsxRuntime.jsx)(_reactNative.Pressable,{accessible:!1,onPress:_reactNative.Keyboard.dismiss,style:tapAreaStyle,children:t}):t})});KeyboardAwareScrollView.displayName="KeyboardAwareScrollView";var _default=exports.default=KeyboardAwareScrollView;
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.KeyboardAwareScrollView=void 0;var _react=require("react"),_reactNative=require("react-native"),_reactNativeKeyboardController=require("react-native-keyboard-controller"),_reactNativeSafeAreaContext=require("react-native-safe-area-context"),_index=require("../../theme/index.js"),_jsxRuntime=require("react/jsx-runtime");const tapAreaStyle={flexGrow:1},KeyboardAwareScrollView=exports.KeyboardAwareScrollView=(0,_react.forwardRef)((e,r)=>{const{children:t,bottomOffset:o=24,extraKeyboardSpace:a=0,safeAreaEdges:i=["bottom"],refreshing:s=!1,onRefresh:l,dismissOnTapOutside:n=!1,contentContainerStyle:d,refreshControl:c,...u}=e,f=(0,_index.useTheme)(),b=(0,_reactNativeSafeAreaContext.useSafeAreaInsets)(),y=i.includes("bottom"),p={paddingBottom:y?b.bottom:0,...i.includes("top")?{paddingTop:b.top}:null,...i.includes("left")?{paddingLeft:b.left}:null,...i.includes("right")?{paddingRight:b.right}:null},x=c??(l?(0,_jsxRuntime.jsx)(_reactNative.RefreshControl,{refreshing:s,onRefresh:l,tintColor:f.colors.primary,colors:[f.colors.primary],progressBackgroundColor:f.colors.surface,titleColor:f.colors["text-muted"]}):void 0);return(0,_jsxRuntime.jsx)(_reactNativeKeyboardController.KeyboardAwareScrollView,{ref:r,bottomOffset:o,extraKeyboardSpace:a-(y?b.bottom:0),disableScrollOnKeyboardHide:!0,keyboardShouldPersistTaps:"handled",keyboardDismissMode:"none",contentContainerStyle:[d,p],refreshControl:x,...u,children:n?(0,_jsxRuntime.jsx)(_reactNative.Pressable,{accessible:!1,onPress:_reactNative.Keyboard.dismiss,style:tapAreaStyle,children:t}):t})});KeyboardAwareScrollView.displayName="KeyboardAwareScrollView";var _default=exports.default=KeyboardAwareScrollView;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.ListItem=void 0;var cache,_react=_interopRequireWildcard(require("react")),_reactNative=require("react-native"),_reactNativeSvg=_interopRequireWildcard(require("react-native-svg")),_useFlickGuard=require("../../hooks/useFlickGuard.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"),_themeStyles=require("../../utils/themeStyles.js"),_defaultIcons=require("../AppIcon/defaultIcons.js"),_index2=require("../Button/index.js"),_index3=require("../IconBadge/index.js"),_useContextMenu=require("../Menu/useContextMenu.js"),_index4=require("../Skeleton/index.js"),_index5=require("../Swipeable/index.js"),_jsxRuntime=require("react/jsx-runtime");function _interopRequireWildcard(e,t){if(!t&&e&&e.__esModule)return e;var i,s,r=Object.defineProperty,n={__proto__:null,default:e};if(Object(e)!==e)return n;if(cache||"function"!=typeof WeakMap||(cache=new WeakMap),cache){if(cache.has(e))return cache.get(e);cache.set(e,n)}for(s in e)"default"!==s&&{}.hasOwnProperty.call(e,s)&&((i=r&&Object.getOwnPropertyDescriptor(e,s))&&(i.get||i.set)?r(n,s,i):n[s]=e[s]);return n}const Chevron=({color:e})=>{const t=(0,_index.useTheme)();return(0,_jsxRuntime.jsx)(_jsxRuntime.Fragment,{children:(t.settings.icons.chevronRight??_defaultIcons.defaultIcons.chevronRight)({size:20,color:e})})},BADGE_SIZE={sm:"sm",md:"md",lg:"lg"},RIGHT_BELOW_FONT_SCALE=1.2,SelectionBox=({checked:e,disabled:t})=>{const i=(0,_index.useTheme)(),s=(0,_index.resolveCheckboxSize)(i,"md")["box-size"],r=Math.round(.72*s);return(0,_jsxRuntime.jsx)(_reactNative.View,{accessibilityElementsHidden:!0,importantForAccessibility:"no-hide-descendants",pointerEvents:"none",style:{width:s,height:s,alignItems:"center",justifyContent:"center",borderWidth:i.size.border,borderRadius:i.radius.sm,..._corners.smoothCorners,borderColor:e?i.colors.primary:i.colors.border,backgroundColor:e?i.colors.primary:t?i.colors["surface-disabled"]:"transparent"},children:e?(0,_jsxRuntime.jsx)(_reactNativeSvg.default,{width:r,height:r,viewBox:"0 0 24 24",children:(0,_jsxRuntime.jsx)(_reactNativeSvg.Path,{d:"M5 12.5l4.5 4.5L19 7.5",stroke:i.colors["on-primary"],strokeWidth:3,strokeLinecap:"round",strokeLinejoin:"round",fill:"none"})}):null})},isActionList=e=>Array.isArray(e)&&e.length>0&&e.every(e=>null!=e&&"object"==typeof e&&!_react.default.isValidElement(e)&&"label"in e),renderActions=e=>isActionList(e)?e.map(e=>(0,_jsxRuntime.jsx)(_index2.Button,{size:"sm",variant:e.variant??"outline",tone:e.tone,leftIcon:e.icon,disabled:e.disabled,testID:e.testID,title:e.label,onPress:e.onPress},e.label)):e,ListItem=exports.ListItem=_react.default.memo((0,_react.forwardRef)((e,t)=>{const{title:i,loading:s=!1,subtitle:r,description:n,children:l,titleLines:o=1,subtitleLines:a=1,left:c,icon:d,iconTone:u="primary",right:x,rightPlacement:m="auto",selectable:h=!1,checked:_=!1,onCheckedChange:j,actions:p,onPress:g,haptic:b,selected:y=!1,disabled:f=!1,size:v="md",divider:R=!1,chevron:S=!1,leftActions:w,rightActions:I,contextMenu:k,accessibilityLabel:L,accessibilityHint:N,style:C,containerStyle:A,titleStyle:V,subtitleStyle:q,descriptionStyle:P,leftSlotStyle:B,rightSlotStyle:D,testID:z}=e,M=(0,_index.useTheme)(),F=(0,_react.useMemo)(()=>(0,_index.resolveListItemSize)(M,v),[M,v]),T=stylesFor(M),{fontScale:W}=(0,_reactNative.useWindowDimensions)(),O=!!x&&("below"===m||"auto"===m&&W>1.2),H=(0,_useContextMenu.useContextMenu)(f?void 0:k,{haptic:b||!1,testID:z}),E=(0,_react.useMemo)(()=>(0,_mergeRefs.mergeRefs)(t,H.hostRef),[t,H.hostRef]),G=h||!!g,U=G||H.enabled,Z=U&&!f,{style:J,pressIn:K,pressOut:Q}=(0,_usePressAnimation.usePressAnimation)({enabled:Z}),X=(0,_useFlickGuard.useFlickGuard)(),Y=L??("string"==typeof i?i:void 0),isText=e=>"string"==typeof e||"number"==typeof e,$=c??(void 0===d?null:(0,_jsxRuntime.jsx)(_index3.IconBadge,{icon:d,tone:u,size:BADGE_SIZE[v]})),ee=h?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:T.selectionLead,children:[(0,_jsxRuntime.jsx)(SelectionBox,{checked:_,disabled:f}),$?(0,_jsxRuntime.jsx)(_reactNative.View,{style:T.selectionLeadContent,children:$}):null]}):$,te=null!=p&&!1!==p&&!(Array.isArray(p)&&0===p.length),ie=R&&!te,se=(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[T.row,{paddingVertical:F["padding-y"],minHeight:F["min-height"],backgroundColor:y?M.colors["surface-selected"]:"transparent"},ie?T.divider:null,f?T.disabled:null,A],children:[ee?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[T.leftSlot,B],children:ee}):null,(0,_jsxRuntime.jsxs)(_reactNative.View,{style:T.middle,children:[null==i||isText(i)?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[T.title,{fontSize:F["title-text"],...(0,_index.fontFor)(M,"medium"),color:f?M.colors["text-disabled"]:M.colors["text-body"]},V],numberOfLines:o,children:i??" "}):i,null==r||""===r?null:isText(r)?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[T.subtitle,{fontSize:F["subtitle-text"],color:f?M.colors["text-disabled"]:M.colors["text-muted"]},q],numberOfLines:a,children:r}):r,n?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[T.description,{fontSize:F["subtitle-text"],color:f?M.colors["text-disabled"]:M.colors["text-subtle"]},P],numberOfLines:2,children:n}):null,null!=l&&!1!==l?(0,_jsxRuntime.jsx)(_reactNative.View,{style:T.body,children:l}):null,O?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[T.rightBelow,D],children:x}):null]}),x&&!O||S?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[T.rightSlot,O?null:D],children:[O?null:x,S?(0,_jsxRuntime.jsx)(_reactNative.View,{style:x&&!O?T.chevronWithRight:null,children:(0,_jsxRuntime.jsx)(Chevron,{color:f?M.colors["text-disabled"]:M.colors["text-subtle"]})}):null]}):null]}),re=U?(0,_jsxRuntime.jsx)(_reactNative.
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.ListItem=void 0;var cache,_react=_interopRequireWildcard(require("react")),_reactNative=require("react-native"),_reactNativeSvg=_interopRequireWildcard(require("react-native-svg")),_useFlickGuard=require("../../hooks/useFlickGuard.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"),_themeStyles=require("../../utils/themeStyles.js"),_defaultIcons=require("../AppIcon/defaultIcons.js"),_index2=require("../Button/index.js"),_index3=require("../IconBadge/index.js"),_useContextMenu=require("../Menu/useContextMenu.js"),_index4=require("../Skeleton/index.js"),_index5=require("../Swipeable/index.js"),_jsxRuntime=require("react/jsx-runtime");function _interopRequireWildcard(e,t){if(!t&&e&&e.__esModule)return e;var i,s,r=Object.defineProperty,n={__proto__:null,default:e};if(Object(e)!==e)return n;if(cache||"function"!=typeof WeakMap||(cache=new WeakMap),cache){if(cache.has(e))return cache.get(e);cache.set(e,n)}for(s in e)"default"!==s&&{}.hasOwnProperty.call(e,s)&&((i=r&&Object.getOwnPropertyDescriptor(e,s))&&(i.get||i.set)?r(n,s,i):n[s]=e[s]);return n}const Chevron=({color:e})=>{const t=(0,_index.useTheme)();return(0,_jsxRuntime.jsx)(_jsxRuntime.Fragment,{children:(t.settings.icons.chevronRight??_defaultIcons.defaultIcons.chevronRight)({size:20,color:e})})},BADGE_SIZE={sm:"sm",md:"md",lg:"lg"},RIGHT_BELOW_FONT_SCALE=1.2,SelectionBox=({checked:e,disabled:t})=>{const i=(0,_index.useTheme)(),s=(0,_index.resolveCheckboxSize)(i,"md")["box-size"],r=Math.round(.72*s);return(0,_jsxRuntime.jsx)(_reactNative.View,{accessibilityElementsHidden:!0,importantForAccessibility:"no-hide-descendants",pointerEvents:"none",style:{width:s,height:s,alignItems:"center",justifyContent:"center",borderWidth:i.size.border,borderRadius:i.radius.sm,..._corners.smoothCorners,borderColor:e?i.colors.primary:i.colors.border,backgroundColor:e?i.colors.primary:t?i.colors["surface-disabled"]:"transparent"},children:e?(0,_jsxRuntime.jsx)(_reactNativeSvg.default,{width:r,height:r,viewBox:"0 0 24 24",children:(0,_jsxRuntime.jsx)(_reactNativeSvg.Path,{d:"M5 12.5l4.5 4.5L19 7.5",stroke:i.colors["on-primary"],strokeWidth:3,strokeLinecap:"round",strokeLinejoin:"round",fill:"none"})}):null})},isActionList=e=>Array.isArray(e)&&e.length>0&&e.every(e=>null!=e&&"object"==typeof e&&!_react.default.isValidElement(e)&&"label"in e),renderActions=e=>isActionList(e)?e.map(e=>(0,_jsxRuntime.jsx)(_index2.Button,{size:"sm",variant:e.variant??"outline",tone:e.tone,leftIcon:e.icon,disabled:e.disabled,testID:e.testID,title:e.label,onPress:e.onPress},e.label)):e,ListItem=exports.ListItem=_react.default.memo((0,_react.forwardRef)((e,t)=>{const{title:i,loading:s=!1,subtitle:r,description:n,children:l,titleLines:o=1,subtitleLines:a=1,left:c,icon:d,iconTone:u="primary",right:x,rightPlacement:m="auto",selectable:h=!1,checked:_=!1,onCheckedChange:j,actions:p,onPress:g,haptic:b,selected:y=!1,disabled:f=!1,size:v="md",divider:R=!1,chevron:S=!1,leftActions:w,rightActions:I,contextMenu:k,accessibilityLabel:L,accessibilityHint:N,style:C,containerStyle:A,titleStyle:V,subtitleStyle:q,descriptionStyle:P,leftSlotStyle:B,rightSlotStyle:D,testID:z}=e,M=(0,_index.useTheme)(),F=(0,_react.useMemo)(()=>(0,_index.resolveListItemSize)(M,v),[M,v]),T=stylesFor(M),{fontScale:W}=(0,_reactNative.useWindowDimensions)(),O=!!x&&("below"===m||"auto"===m&&W>1.2),H=(0,_useContextMenu.useContextMenu)(f?void 0:k,{haptic:b||!1,testID:z}),E=(0,_react.useMemo)(()=>(0,_mergeRefs.mergeRefs)(t,H.hostRef),[t,H.hostRef]),G=h||!!g,U=G||H.enabled,Z=U&&!f,{style:J,pressIn:K,pressOut:Q}=(0,_usePressAnimation.usePressAnimation)({enabled:Z}),X=(0,_useFlickGuard.useFlickGuard)(),Y=L??("string"==typeof i?i:void 0),isText=e=>"string"==typeof e||"number"==typeof e,$=c??(void 0===d?null:(0,_jsxRuntime.jsx)(_index3.IconBadge,{icon:d,tone:u,size:BADGE_SIZE[v]})),ee=h?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:T.selectionLead,children:[(0,_jsxRuntime.jsx)(SelectionBox,{checked:_,disabled:f}),$?(0,_jsxRuntime.jsx)(_reactNative.View,{style:T.selectionLeadContent,children:$}):null]}):$,te=null!=p&&!1!==p&&!(Array.isArray(p)&&0===p.length),ie=R&&!te,se=(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[T.row,{paddingVertical:F["padding-y"],minHeight:F["min-height"],backgroundColor:y?M.colors["surface-selected"]:"transparent"},ie?T.divider:null,f?T.disabled:null,A],children:[ee?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[T.leftSlot,B],children:ee}):null,(0,_jsxRuntime.jsxs)(_reactNative.View,{style:T.middle,children:[null==i||isText(i)?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[T.title,{fontSize:F["title-text"],...(0,_index.fontFor)(M,"medium"),color:f?M.colors["text-disabled"]:M.colors["text-body"]},V],numberOfLines:o,children:i??" "}):i,null==r||""===r?null:isText(r)?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[T.subtitle,{fontSize:F["subtitle-text"],color:f?M.colors["text-disabled"]:M.colors["text-muted"]},q],numberOfLines:a,children:r}):r,n?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[T.description,{fontSize:F["subtitle-text"],color:f?M.colors["text-disabled"]:M.colors["text-subtle"]},P],numberOfLines:2,children:n}):null,null!=l&&!1!==l?(0,_jsxRuntime.jsx)(_reactNative.View,{style:T.body,children:l}):null,O?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[T.rightBelow,D],children:x}):null]}),x&&!O||S?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[T.rightSlot,O?null:D],children:[O?null:x,S?(0,_jsxRuntime.jsx)(_reactNative.View,{style:x&&!O?T.chevronWithRight:null,children:(0,_jsxRuntime.jsx)(Chevron,{color:f?M.colors["text-disabled"]:M.colors["text-subtle"]})}):null]}):null]}),re=U?(0,_jsxRuntime.jsx)(_reactNative.Pressable,{ref:E,onPress:e=>{Z&&G&&!X.isFlick(e)&&(b&&(0,_hapticUtils.triggerHaptic)(b),h?j?.(!_):g?.(e))},onPressIn:e=>{X.onPressIn(e),K()},onPressOut:Q,disabled:!Z,accessibilityRole:h?"checkbox":g?"button":void 0,accessibilityLabel:Y,accessibilityHint:N,accessibilityState:h?{checked:_,disabled:!Z}:{selected:y,disabled:!Z},"aria-disabled":!Z,...h?{"aria-checked":_}:{"aria-selected":y},testID:z,android_ripple:{color:M.colors["surface-pressed"],borderless:!1},style:({pressed:e})=>[C,e?T.pressed:null],...H.hostProps,children:(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:J,children:se})}):(0,_jsxRuntime.jsx)(_reactNative.View,{ref:t,accessibilityRole:"none",accessibilityLabel:Y,accessibilityHint:N,accessibilityState:{selected:y,disabled:f},"aria-selected":y,"aria-disabled":f,testID:z,style:C,children:se}),ne=w&&w.length>0||I&&I.length>0,le=te?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[y?{backgroundColor:M.colors["surface-selected"]}:null,R?T.divider:null],children:[re,(0,_jsxRuntime.jsx)(_reactNative.View,{style:T.actions,children:renderActions(p)})]}):re,oe=ne?(0,_jsxRuntime.jsx)(_index5.Swipeable,{leftActions:w,rightActions:I,accessibilityLabel:Y,children:le}):le;return s?(0,_jsxRuntime.jsx)(ListItemSkeleton,{...e}):H.enabled?(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[oe,H.renderSurface((0,_jsxRuntime.jsx)(_reactNative.View,{style:T.preview,children:se}))]}):oe}));ListItem.displayName="ListItem";const ListItemSkeleton=({subtitle:e,description:t,left:i,icon:s,right:r,chevron:n,size:l="md",containerStyle:o,style:a})=>{const c=(0,_index.useTheme)(),d=(0,_index.resolveListItemSize)(c,l),u=Math.round(1.15*d["title-text"]),x=Math.round(1.15*d["subtitle-text"]);return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[{flexDirection:"row",alignItems:"center",paddingHorizontal:c.space.md,paddingVertical:d["padding-y"],minHeight:d["min-height"]},o,a],children:[void 0!==i||void 0!==s?(0,_jsxRuntime.jsx)(_reactNative.View,{style:{marginRight:c.space.sm},children:(0,_jsxRuntime.jsx)(_index4.Skeleton,{shape:"circle",width:40,height:40})}):null,(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{flex:1},children:[(0,_jsxRuntime.jsx)(_index4.Skeleton,{shape:"text",width:"70%",height:u,style:{marginBottom:c.space.xs}}),void 0!==e?(0,_jsxRuntime.jsx)(_index4.Skeleton,{shape:"text",width:"50%",height:x,style:void 0!==t?{marginBottom:c.space.xs}:void 0}):null,void 0!==t?(0,_jsxRuntime.jsx)(_index4.Skeleton,{shape:"text",width:"85%",height:x}):null]}),void 0!==r||n?(0,_jsxRuntime.jsx)(_reactNative.View,{style:{marginLeft:c.space.sm},children:(0,_jsxRuntime.jsx)(_index4.Skeleton,{width:20,height:20,radius:"sm"})}):null]})};ListItemSkeleton.displayName="ListItemSkeleton",ListItem.Skeleton=ListItemSkeleton;const buildStyles=e=>_reactNative.StyleSheet.create({row:{flexDirection:"row",alignItems:"center",paddingHorizontal:e.space.md},divider:{borderBottomWidth:_reactNative.StyleSheet.hairlineWidth,borderBottomColor:e.colors.border},pressed:{backgroundColor:e.colors["surface-pressed"]},disabled:{opacity:.55},leftSlot:{marginRight:e.space.md,alignItems:"center",justifyContent:"center"},middle:{flex:1,flexDirection:"column",justifyContent:"center"},selectionLead:{flexDirection:"row",alignItems:"center"},selectionLeadContent:{marginLeft:e.space.sm},body:{marginTop:e.space.xs},rightBelow:{alignSelf:"flex-start",flexDirection:"row",alignItems:"center",marginTop:e.space.xs},rightSlot:{marginLeft:e.space.md,alignItems:"center",justifyContent:"center",flexDirection:"row"},actions:{flexDirection:"row",flexWrap:"wrap",gap:e.space.sm,paddingHorizontal:e.space.md,paddingBottom:e.space.md},chevronWithRight:{marginLeft:e.space.xs},preview:{flex:1,backgroundColor:e.colors.surface,borderRadius:e.radius.md,..._corners.smoothCorners,overflow:"hidden"},title:{letterSpacing:e["letter-spacing"].normal},subtitle:{marginTop:e.space.xxs,...(0,_index.fontFor)(e,"normal")},description:{marginTop:e.space.xxs,...(0,_index.fontFor)(e,"normal")}}),stylesFor=(0,_themeStyles.themeStyles)(buildStyles);var _default=exports.default=ListItem;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.DEFAULT_MESSAGE_LIST_LABELS=void 0,exports.MessageList=MessageList,exports.default=void 0;var _mobileCore=require("@webority/mobile-core"),_react=require("react"),_reactNative=require("react-native"),_reactNativeKeyboardController=require("react-native-keyboard-controller"),_reactNativeSafeAreaContext=require("react-native-safe-area-context"),_useReducedMotion=require("../../hooks/useReducedMotion.js"),_index=require("../../theme/index.js"),_announce=require("../../utils/announce.js"),_corners=require("../../utils/corners.js"),_index2=require("../Badge/index.js"),_index3=require("../DateSeparator/index.js"),_index4=require("../IconButton/index.js"),_index5=require("../Spinner/index.js"),_jsxRuntime=require("react/jsx-runtime");const DEFAULT_MESSAGE_LIST_LABELS=exports.DEFAULT_MESSAGE_LIST_LABELS=Object.freeze({today:"Today",yesterday:"Yesterday",jumpToLatest:"Jump to the latest message",newMessages:e=>1===e?"1 new message":`${e} new messages`,unread:"New messages",loadingOlder:"Loading earlier messages"}),JUMP_AT=160,KEEP_POSITION={minIndexForVisible:0,autoscrollToTopThreshold:JUMP_AT},positionOf=(e,t)=>e?t?"middle":"last":t?"first":"single";function MessageList({messages:e,keyExtractor:t,renderMessage:n,getAuthorKey:
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.DEFAULT_MESSAGE_LIST_LABELS=void 0,exports.MessageList=MessageList,exports.default=void 0;var _mobileCore=require("@webority/mobile-core"),_react=require("react"),_reactNative=require("react-native"),_reactNativeKeyboardController=require("react-native-keyboard-controller"),_reactNativeSafeAreaContext=require("react-native-safe-area-context"),_useReducedMotion=require("../../hooks/useReducedMotion.js"),_index=require("../../theme/index.js"),_announce=require("../../utils/announce.js"),_corners=require("../../utils/corners.js"),_index2=require("../Badge/index.js"),_index3=require("../DateSeparator/index.js"),_index4=require("../IconButton/index.js"),_index5=require("../Spinner/index.js"),_jsxRuntime=require("react/jsx-runtime");const DEFAULT_MESSAGE_LIST_LABELS=exports.DEFAULT_MESSAGE_LIST_LABELS=Object.freeze({today:"Today",yesterday:"Yesterday",jumpToLatest:"Jump to the latest message",newMessages:e=>1===e?"1 new message":`${e} new messages`,unread:"New messages",loadingOlder:"Loading earlier messages"}),JUMP_AT=160,KEEP_POSITION={minIndexForVisible:0,autoscrollToTopThreshold:JUMP_AT},positionOf=(e,t)=>e?t?"middle":"last":t?"first":"single";function MessageList({messages:e,keyExtractor:t,renderMessage:n,getAuthorKey:r,getDate:s,firstUnreadKey:a,onLoadOlder:o,loadingOlder:i=!1,hasOlder:l=!0,typing:u,empty:c,getAnnouncement:d,followNew:_,keyboardAware:m=!0,keyboardOffset:x,labels:p,now:j,onScroll:f,contentContainerStyle:y,style:g,testID:b,...S}){const v=(0,_index.useTheme)(),L=(0,_reactNativeSafeAreaContext.useSafeAreaInsets)(),h=(0,_useReducedMotion.useReducedMotion)(),E=(0,_react.useMemo)(()=>buildStyles(v),[v]),R=(0,_react.useMemo)(()=>({...DEFAULT_MESSAGE_LIST_LABELS,...p}),[p]),w=x??L.bottom,T=(0,_react.useRef)(null),A=(0,_react.useRef)(!1),[C,M]=(0,_react.useState)(!1),[I,N]=(0,_react.useState)(0),O=(0,_react.useMemo)(()=>{const n=s?e.map(e=>(0,_mobileCore.formatDate)(s(e))):null,o=r?e.map(r):null,i=void 0===a?-1:e.findIndex(e=>t(e)===a);return e.map((t,r)=>{const a=r===e.length-1,l=null!==n&&(a||n[r]!==n[r+1]),u=null!==o&&!a&&o[r+1]===o[r]&&!l&&r!==i,c=null!==o&&r>0&&o[r-1]===o[r]&&(null===n||n[r-1]===n[r])&&r-1!==i;return{groupPosition:positionOf(u,c),day:l&&s?(0,_index3.dayLabel)(s(t),{now:j,labels:R}):null,unread:r===i}})},[e,s,r,a,t,j,R]),k=(0,_react.useCallback)(()=>{T.current?.scrollToOffset({offset:0,animated:!h}),N(0)},[h]),q=e.length>0?t(e[0]):null,D=(0,_react.useRef)(q);(0,_react.useEffect)(()=>{const n=D.current;if(D.current=q,null===n||null===q||n===q)return;const r=e.findIndex(e=>t(e)===n);if(-1===r)return void N(0);const s=e.slice(0,r).reverse();for(const e of s){const t=d?.(e);t&&(0,_announce.announce)(t)}_&&s.some(_)?k():A.current&&N(e=>e+s.length)},[q]);const P=(0,_react.useCallback)(e=>{const t=e.nativeEvent.contentOffset.y>JUMP_AT;t!==A.current&&(A.current=t,M(t),t||N(0)),f?.(e)},[f]),V=(0,_react.useCallback)(()=>{l&&!i&&o?.()},[l,i,o]),F=(0,_react.useCallback)(({item:e,index:t})=>{const r=O[t];return(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[r?.day?(0,_jsxRuntime.jsx)(_index3.DateSeparator,{label:r.day}):null,r?.unread?(0,_jsxRuntime.jsx)(_index3.DateSeparator,{label:R.unread,emphasis:!0}):null,n({item:e,index:t,groupPosition:r?.groupPosition??"single"})]})},[O,R.unread,n]),B=(0,_react.useCallback)(e=>t(e),[t]),U=(0,_react.useCallback)(e=>(0,_jsxRuntime.jsx)(_reactNativeKeyboardController.KeyboardChatScrollView,{...e,inverted:!0,offset:w}),[w]),K=I>0?`${R.newMessages(I)}. ${R.jumpToLatest}`:R.jumpToLatest;return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[E.root,g],children:[(0,_jsxRuntime.jsx)(_reactNative.FlatList,{keyboardShouldPersistTaps:"handled",maintainVisibleContentPosition:KEEP_POSITION,...S,ref:T,data:e,renderItem:F,keyExtractor:B,inverted:!0,onScroll:P,onEndReached:o?V:void 0,ListHeaderComponent:u?(0,_jsxRuntime.jsx)(_reactNative.View,{children:u}):null,ListFooterComponent:i?(0,_jsxRuntime.jsx)(_index5.Spinner,{size:"sm",accessibilityLabel:R.loadingOlder,style:E.older}):null,ListEmptyComponent:c?(0,_jsxRuntime.jsx)(_reactNative.View,{style:E.fill,children:c}):null,renderScrollComponent:m?U:void 0,contentContainerStyle:[E.content,0===e.length?E.grow:null,y],testID:b}),C?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:E.jump,pointerEvents:"box-none",children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:E.jumpDisc,children:(0,_jsxRuntime.jsx)(_index4.IconButton,{icon:"arrow-down",accessibilityLabel:K,variant:"ghost",tone:"neutral",onPress:k,testID:b?`${b}-jump`:void 0})}),I>0?(0,_jsxRuntime.jsx)(_reactNative.View,{style:E.count,pointerEvents:"none",importantForAccessibility:"no-hide-descendants",accessibilityElementsHidden:!0,children:(0,_jsxRuntime.jsx)(_index2.Badge,{value:I,max:99,tone:"primary",size:"sm"})}):null]}):null]})}const buildStyles=e=>_reactNative.StyleSheet.create({root:{flex:1},content:{paddingHorizontal:e.space.md,paddingVertical:e.space.sm},grow:{flexGrow:1},fill:{flex:1},older:{paddingVertical:e.space.md},jump:{position:"absolute",right:e.space.md,bottom:e.space.md},jumpDisc:{borderRadius:e.radius.pill,..._corners.smoothCorners,backgroundColor:e.colors.surface,...e.shadow.elevated},count:{position:"absolute",top:-e.space.xs,right:-e.space.xs}});var _default=exports.default=MessageList;
|