@webority/mobile-ui 0.18.1 → 0.19.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.
Files changed (215) hide show
  1. package/lib/commonjs/canvasKit/index.js +1 -1
  2. package/lib/commonjs/components/Accordion/Accordion.js +1 -1
  3. package/lib/commonjs/components/AppBar/AppBar.js +1 -1
  4. package/lib/commonjs/components/Avatar/Avatar.js +1 -1
  5. package/lib/commonjs/components/Badge/Badge.js +1 -1
  6. package/lib/commonjs/components/Banner/Banner.js +1 -1
  7. package/lib/commonjs/components/BarChart/BarChart.js +1 -1
  8. package/lib/commonjs/components/BottomNavigation/BottomNavigation.js +1 -1
  9. package/lib/commonjs/components/BottomSheet/BottomSheet.js +1 -1
  10. package/lib/commonjs/components/Box/Box.js +1 -1
  11. package/lib/commonjs/components/Button/Button.js +1 -1
  12. package/lib/commonjs/components/Calendar/calendarStyles.js +1 -1
  13. package/lib/commonjs/components/Card/Card.js +1 -1
  14. package/lib/commonjs/components/Carousel/Carousel.js +1 -1
  15. package/lib/commonjs/components/Checkbox/Checkbox.js +1 -1
  16. package/lib/commonjs/components/Chip/Chip.js +1 -1
  17. package/lib/commonjs/components/ChoiceGroup/ChoiceGroup.js +1 -1
  18. package/lib/commonjs/components/Composer/Composer.js +1 -1
  19. package/lib/commonjs/components/DatePicker/DatePicker.js +1 -1
  20. package/lib/commonjs/components/DateRangePicker/DateRangePicker.js +1 -1
  21. package/lib/commonjs/components/Descriptions/Descriptions.js +1 -1
  22. package/lib/commonjs/components/Dialog/Dialog.js +1 -1
  23. package/lib/commonjs/components/EmptyState/EmptyState.js +1 -1
  24. package/lib/commonjs/components/FieldBase/ChoiceText.js +1 -1
  25. package/lib/commonjs/components/FieldBase/FieldBase.js +1 -1
  26. package/lib/commonjs/components/FieldBase/index.js +1 -1
  27. package/lib/commonjs/components/FieldBase/useFloatingLabel.js +1 -1
  28. package/lib/commonjs/components/FilePicker/FilePicker.js +1 -1
  29. package/lib/commonjs/components/FloatingActionButton/FloatingActionButton.js +1 -1
  30. package/lib/commonjs/components/ImageGallery/ImageGallery.js +1 -1
  31. package/lib/commonjs/components/InlineSelect/InlineSelect.js +1 -1
  32. package/lib/commonjs/components/Input/Input.js +1 -1
  33. package/lib/commonjs/components/ListItem/ListItem.js +1 -1
  34. package/lib/commonjs/components/Markdown/Markdown.js +1 -1
  35. package/lib/commonjs/components/MessageBubble/MessageBubble.js +1 -1
  36. package/lib/commonjs/components/MessageList/MessageList.js +1 -1
  37. package/lib/commonjs/components/Modal/Modal.js +1 -1
  38. package/lib/commonjs/components/NumberInput/NumberInput.js +1 -1
  39. package/lib/commonjs/components/OTPInput/OTPInput.js +1 -1
  40. package/lib/commonjs/components/OptionSheet/OptionSheet.js +1 -1
  41. package/lib/commonjs/components/PaymentResult/PaymentResult.js +1 -1
  42. package/lib/commonjs/components/PhoneNumberInput/PhoneNumberInput.js +1 -1
  43. package/lib/commonjs/components/PickerTrigger/PickerTrigger.js +1 -1
  44. package/lib/commonjs/components/ProfileCompletion/ProfileCompletion.js +1 -1
  45. package/lib/commonjs/components/ProfilePicker/ProfilePicker.js +1 -1
  46. package/lib/commonjs/components/ProgressBar/ProgressBar.js +1 -1
  47. package/lib/commonjs/components/Radio/Radio.js +1 -1
  48. package/lib/commonjs/components/Radio/RadioDot.js +1 -1
  49. package/lib/commonjs/components/Rating/Rating.js +1 -1
  50. package/lib/commonjs/components/ScannerOverlay/ScannerOverlay.js +1 -1
  51. package/lib/commonjs/components/SearchBar/SearchBar.js +1 -1
  52. package/lib/commonjs/components/SegmentedControl/SegmentedControl.js +1 -1
  53. package/lib/commonjs/components/Select/Select.js +1 -1
  54. package/lib/commonjs/components/Skeleton/Skeleton.js +1 -1
  55. package/lib/commonjs/components/Skeleton/SkeletonContent.js +1 -1
  56. package/lib/commonjs/components/SlideToConfirm/SlideToConfirm.js +1 -1
  57. package/lib/commonjs/components/Slider/Slider.js +1 -1
  58. package/lib/commonjs/components/SliderField/SliderField.js +1 -1
  59. package/lib/commonjs/components/Spinner/Spinner.js +1 -1
  60. package/lib/commonjs/components/StatusBadge/StatusBadge.js +1 -1
  61. package/lib/commonjs/components/Stepper/Stepper.js +1 -1
  62. package/lib/commonjs/components/Swipeable/Swipeable.js +1 -1
  63. package/lib/commonjs/components/Switch/Switch.js +1 -1
  64. package/lib/commonjs/components/Tabs/Tabs.js +1 -1
  65. package/lib/commonjs/components/TagInput/TagInput.js +1 -1
  66. package/lib/commonjs/components/TimePicker/TimePicker.js +1 -1
  67. package/lib/commonjs/components/Timeline/Timeline.js +1 -1
  68. package/lib/commonjs/components/Toast/Toast.js +1 -1
  69. package/lib/commonjs/components/Tooltip/Tooltip.js +1 -1
  70. package/lib/commonjs/components/Tour/Tour.js +1 -1
  71. package/lib/commonjs/components/TypingIndicator/TypingIndicator.js +1 -1
  72. package/lib/commonjs/components/WheelPicker/Wheel.js +1 -1
  73. package/lib/commonjs/index.js +1 -1
  74. package/lib/commonjs/network/NetworkStatusBanner.js +1 -1
  75. package/lib/commonjs/theme/componentSizes.js +1 -0
  76. package/lib/commonjs/theme/componentTokens.js +1 -0
  77. package/lib/commonjs/theme/index.js +1 -1
  78. package/lib/commonjs/theme/merge.js +1 -1
  79. package/lib/commonjs/theme/retiredThemeKeys.js +1 -0
  80. package/lib/commonjs/theme/scale.js +1 -0
  81. package/lib/commonjs/theme/tokens.js +1 -1
  82. package/lib/commonjs/utils/index.js +1 -1
  83. package/lib/module/canvasKit/index.js +1 -1
  84. package/lib/module/components/Accordion/Accordion.js +1 -1
  85. package/lib/module/components/AppBar/AppBar.js +1 -1
  86. package/lib/module/components/Avatar/Avatar.js +1 -1
  87. package/lib/module/components/Badge/Badge.js +1 -1
  88. package/lib/module/components/Banner/Banner.js +1 -1
  89. package/lib/module/components/BarChart/BarChart.js +1 -1
  90. package/lib/module/components/BottomNavigation/BottomNavigation.js +1 -1
  91. package/lib/module/components/BottomSheet/BottomSheet.js +1 -1
  92. package/lib/module/components/Box/Box.js +1 -1
  93. package/lib/module/components/Button/Button.js +1 -1
  94. package/lib/module/components/Calendar/calendarStyles.js +1 -1
  95. package/lib/module/components/Card/Card.js +1 -1
  96. package/lib/module/components/Carousel/Carousel.js +1 -1
  97. package/lib/module/components/Checkbox/Checkbox.js +1 -1
  98. package/lib/module/components/Chip/Chip.js +1 -1
  99. package/lib/module/components/ChoiceGroup/ChoiceGroup.js +1 -1
  100. package/lib/module/components/Composer/Composer.js +1 -1
  101. package/lib/module/components/DatePicker/DatePicker.js +1 -1
  102. package/lib/module/components/DateRangePicker/DateRangePicker.js +1 -1
  103. package/lib/module/components/Descriptions/Descriptions.js +1 -1
  104. package/lib/module/components/Dialog/Dialog.js +1 -1
  105. package/lib/module/components/EmptyState/EmptyState.js +1 -1
  106. package/lib/module/components/FieldBase/ChoiceText.js +1 -1
  107. package/lib/module/components/FieldBase/FieldBase.js +1 -1
  108. package/lib/module/components/FieldBase/index.js +1 -1
  109. package/lib/module/components/FieldBase/useFloatingLabel.js +1 -1
  110. package/lib/module/components/FilePicker/FilePicker.js +1 -1
  111. package/lib/module/components/FloatingActionButton/FloatingActionButton.js +1 -1
  112. package/lib/module/components/ImageGallery/ImageGallery.js +1 -1
  113. package/lib/module/components/InlineSelect/InlineSelect.js +1 -1
  114. package/lib/module/components/Input/Input.js +1 -1
  115. package/lib/module/components/ListItem/ListItem.js +1 -1
  116. package/lib/module/components/Markdown/Markdown.js +1 -1
  117. package/lib/module/components/MessageBubble/MessageBubble.js +1 -1
  118. package/lib/module/components/MessageList/MessageList.js +1 -1
  119. package/lib/module/components/Modal/Modal.js +1 -1
  120. package/lib/module/components/NumberInput/NumberInput.js +1 -1
  121. package/lib/module/components/OTPInput/OTPInput.js +1 -1
  122. package/lib/module/components/OptionSheet/OptionSheet.js +1 -1
  123. package/lib/module/components/PaymentResult/PaymentResult.js +1 -1
  124. package/lib/module/components/PhoneNumberInput/PhoneNumberInput.js +1 -1
  125. package/lib/module/components/PickerTrigger/PickerTrigger.js +1 -1
  126. package/lib/module/components/ProfileCompletion/ProfileCompletion.js +1 -1
  127. package/lib/module/components/ProfilePicker/ProfilePicker.js +1 -1
  128. package/lib/module/components/ProgressBar/ProgressBar.js +1 -1
  129. package/lib/module/components/Radio/Radio.js +1 -1
  130. package/lib/module/components/Radio/RadioDot.js +1 -1
  131. package/lib/module/components/Rating/Rating.js +1 -1
  132. package/lib/module/components/ScannerOverlay/ScannerOverlay.js +1 -1
  133. package/lib/module/components/SearchBar/SearchBar.js +1 -1
  134. package/lib/module/components/SegmentedControl/SegmentedControl.js +1 -1
  135. package/lib/module/components/Select/Select.js +1 -1
  136. package/lib/module/components/Skeleton/Skeleton.js +1 -1
  137. package/lib/module/components/Skeleton/SkeletonContent.js +1 -1
  138. package/lib/module/components/SlideToConfirm/SlideToConfirm.js +1 -1
  139. package/lib/module/components/Slider/Slider.js +1 -1
  140. package/lib/module/components/SliderField/SliderField.js +1 -1
  141. package/lib/module/components/Spinner/Spinner.js +1 -1
  142. package/lib/module/components/StatusBadge/StatusBadge.js +1 -1
  143. package/lib/module/components/Stepper/Stepper.js +1 -1
  144. package/lib/module/components/Swipeable/Swipeable.js +1 -1
  145. package/lib/module/components/Switch/Switch.js +1 -1
  146. package/lib/module/components/Tabs/Tabs.js +1 -1
  147. package/lib/module/components/TagInput/TagInput.js +1 -1
  148. package/lib/module/components/TimePicker/TimePicker.js +1 -1
  149. package/lib/module/components/Timeline/Timeline.js +1 -1
  150. package/lib/module/components/Toast/Toast.js +1 -1
  151. package/lib/module/components/Tooltip/Tooltip.js +1 -1
  152. package/lib/module/components/Tour/Tour.js +1 -1
  153. package/lib/module/components/TypingIndicator/TypingIndicator.js +1 -1
  154. package/lib/module/components/WheelPicker/Wheel.js +1 -1
  155. package/lib/module/index.js +1 -1
  156. package/lib/module/network/NetworkStatusBanner.js +1 -1
  157. package/lib/module/theme/componentSizes.js +1 -0
  158. package/lib/module/theme/componentTokens.js +1 -0
  159. package/lib/module/theme/index.js +1 -1
  160. package/lib/module/theme/merge.js +1 -1
  161. package/lib/module/theme/retiredThemeKeys.js +1 -0
  162. package/lib/module/theme/scale.js +1 -0
  163. package/lib/module/theme/tokens.js +1 -1
  164. package/lib/module/utils/index.js +1 -1
  165. package/lib/typescript/commonjs/components/BottomNavigation/BottomNavigation.d.ts +6 -6
  166. package/lib/typescript/commonjs/components/Box/Box.d.ts +18 -20
  167. package/lib/typescript/commonjs/components/Calendar/calendarStyles.d.ts +1 -1
  168. package/lib/typescript/commonjs/components/Card/Card.d.ts +1 -1
  169. package/lib/typescript/commonjs/components/FieldBase/FieldBase.d.ts +2 -8
  170. package/lib/typescript/commonjs/components/FieldBase/index.d.ts +1 -1
  171. package/lib/typescript/commonjs/components/FieldBase/useFloatingLabel.d.ts +3 -2
  172. package/lib/typescript/commonjs/components/InlineSelect/InlineSelect.d.ts +1 -1
  173. package/lib/typescript/commonjs/components/Input/Input.d.ts +1 -1
  174. package/lib/typescript/commonjs/components/PhoneNumberInput/PhoneNumberInput.d.ts +1 -1
  175. package/lib/typescript/commonjs/components/SearchBar/SearchBar.d.ts +1 -1
  176. package/lib/typescript/commonjs/components/SegmentedControl/SegmentedControl.d.ts +1 -15
  177. package/lib/typescript/commonjs/components/Select/Select.d.ts +2 -2
  178. package/lib/typescript/commonjs/components/Skeleton/Skeleton.d.ts +1 -1
  179. package/lib/typescript/commonjs/components/Tabs/Tabs.d.ts +1 -1
  180. package/lib/typescript/commonjs/index.d.ts +4 -4
  181. package/lib/typescript/commonjs/theme/componentSizes.d.ts +27 -0
  182. package/lib/typescript/commonjs/theme/componentTokens.d.ts +762 -0
  183. package/lib/typescript/commonjs/theme/index.d.ts +4 -1
  184. package/lib/typescript/commonjs/theme/retiredThemeKeys.d.ts +22 -0
  185. package/lib/typescript/commonjs/theme/scale.d.ts +5 -0
  186. package/lib/typescript/commonjs/theme/types.d.ts +6 -790
  187. package/lib/typescript/commonjs/utils/index.d.ts +0 -2
  188. package/lib/typescript/module/components/BottomNavigation/BottomNavigation.d.ts +6 -6
  189. package/lib/typescript/module/components/Box/Box.d.ts +18 -20
  190. package/lib/typescript/module/components/Calendar/calendarStyles.d.ts +1 -1
  191. package/lib/typescript/module/components/Card/Card.d.ts +1 -1
  192. package/lib/typescript/module/components/FieldBase/FieldBase.d.ts +2 -8
  193. package/lib/typescript/module/components/FieldBase/index.d.ts +1 -1
  194. package/lib/typescript/module/components/FieldBase/useFloatingLabel.d.ts +3 -2
  195. package/lib/typescript/module/components/InlineSelect/InlineSelect.d.ts +1 -1
  196. package/lib/typescript/module/components/Input/Input.d.ts +1 -1
  197. package/lib/typescript/module/components/PhoneNumberInput/PhoneNumberInput.d.ts +1 -1
  198. package/lib/typescript/module/components/SearchBar/SearchBar.d.ts +1 -1
  199. package/lib/typescript/module/components/SegmentedControl/SegmentedControl.d.ts +1 -15
  200. package/lib/typescript/module/components/Select/Select.d.ts +2 -2
  201. package/lib/typescript/module/components/Skeleton/Skeleton.d.ts +1 -1
  202. package/lib/typescript/module/components/Tabs/Tabs.d.ts +1 -1
  203. package/lib/typescript/module/index.d.ts +4 -4
  204. package/lib/typescript/module/theme/componentSizes.d.ts +27 -0
  205. package/lib/typescript/module/theme/componentTokens.d.ts +762 -0
  206. package/lib/typescript/module/theme/index.d.ts +4 -1
  207. package/lib/typescript/module/theme/retiredThemeKeys.d.ts +22 -0
  208. package/lib/typescript/module/theme/scale.d.ts +5 -0
  209. package/lib/typescript/module/theme/types.d.ts +6 -790
  210. package/lib/typescript/module/utils/index.d.ts +0 -2
  211. package/package.json +12 -2
  212. package/lib/commonjs/utils/spacing.js +0 -1
  213. package/lib/module/utils/spacing.js +0 -1
  214. package/lib/typescript/commonjs/utils/spacing.d.ts +0 -61
  215. package/lib/typescript/module/utils/spacing.d.ts +0 -61
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"FLOATED_LABEL_SCALE",{enumerable:!0,get:function(){return _useFloatingLabel.FLOATED_LABEL_SCALE}}),Object.defineProperty(exports,"FieldBase",{enumerable:!0,get:function(){return _FieldBase.FieldBase}}),Object.defineProperty(exports,"FieldErrorGlyph",{enumerable:!0,get:function(){return _FieldBase.FieldErrorGlyph}}),Object.defineProperty(exports,"FieldLabel",{enumerable:!0,get:function(){return _FieldBase.FieldLabel}}),Object.defineProperty(exports,"FieldMessage",{enumerable:!0,get:function(){return _FieldBase.FieldMessage}}),Object.defineProperty(exports,"RequiredMark",{enumerable:!0,get:function(){return _FieldBase.RequiredMark}}),Object.defineProperty(exports,"RequiredPlaceholder",{enumerable:!0,get:function(){return _FieldBase.RequiredPlaceholder}}),Object.defineProperty(exports,"default",{enumerable:!0,get:function(){return _FieldBase.default}}),Object.defineProperty(exports,"fieldTextAsString",{enumerable:!0,get:function(){return _FieldBase.fieldTextAsString}}),Object.defineProperty(exports,"hasFieldText",{enumerable:!0,get:function(){return _FieldBase.hasFieldText}}),Object.defineProperty(exports,"resolveFieldSize",{enumerable:!0,get:function(){return _FieldBase.resolveFieldSize}}),Object.defineProperty(exports,"resolveFieldTextStyle",{enumerable:!0,get:function(){return _FieldBase.resolveFieldTextStyle}}),Object.defineProperty(exports,"useFloatingLabel",{enumerable:!0,get:function(){return _useFloatingLabel.useFloatingLabel}});var _FieldBase=_interopRequireWildcard(require("./FieldBase.js")),_useFloatingLabel=require("./useFloatingLabel.js");function _interopRequireWildcard(e,r){if("function"==typeof WeakMap)var t=new WeakMap,n=new WeakMap;return(_interopRequireWildcard=function(e,r){if(!r&&e&&e.__esModule)return e;var i,l,o={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return o;if(i=r?n:t){if(i.has(e))return i.get(e);i.set(e,o)}for(const r in e)"default"!==r&&{}.hasOwnProperty.call(e,r)&&((l=(i=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,r))&&(l.get||l.set)?i(o,r,l):o[r]=e[r]);return o})(e,r)}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"FLOATED_LABEL_SCALE",{enumerable:!0,get:function(){return _useFloatingLabel.FLOATED_LABEL_SCALE}}),Object.defineProperty(exports,"FieldBase",{enumerable:!0,get:function(){return _FieldBase.FieldBase}}),Object.defineProperty(exports,"FieldErrorGlyph",{enumerable:!0,get:function(){return _FieldBase.FieldErrorGlyph}}),Object.defineProperty(exports,"FieldLabel",{enumerable:!0,get:function(){return _FieldBase.FieldLabel}}),Object.defineProperty(exports,"FieldMessage",{enumerable:!0,get:function(){return _FieldBase.FieldMessage}}),Object.defineProperty(exports,"RequiredMark",{enumerable:!0,get:function(){return _FieldBase.RequiredMark}}),Object.defineProperty(exports,"RequiredPlaceholder",{enumerable:!0,get:function(){return _FieldBase.RequiredPlaceholder}}),Object.defineProperty(exports,"default",{enumerable:!0,get:function(){return _FieldBase.default}}),Object.defineProperty(exports,"fieldTextAsString",{enumerable:!0,get:function(){return _FieldBase.fieldTextAsString}}),Object.defineProperty(exports,"hasFieldText",{enumerable:!0,get:function(){return _FieldBase.hasFieldText}}),Object.defineProperty(exports,"resolveFieldTextStyle",{enumerable:!0,get:function(){return _FieldBase.resolveFieldTextStyle}}),Object.defineProperty(exports,"useFloatingLabel",{enumerable:!0,get:function(){return _useFloatingLabel.useFloatingLabel}});var _FieldBase=_interopRequireWildcard(require("./FieldBase.js")),_useFloatingLabel=require("./useFloatingLabel.js");function _interopRequireWildcard(e,r){if("function"==typeof WeakMap)var t=new WeakMap,n=new WeakMap;return(_interopRequireWildcard=function(e,r){if(!r&&e&&e.__esModule)return e;var i,l,o={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return o;if(i=r?n:t){if(i.has(e))return i.get(e);i.set(e,o)}for(const r in e)"default"!==r&&{}.hasOwnProperty.call(e,r)&&((l=(i=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,r))&&(l.get||l.set)?i(o,r,l):o[r]=e[r]);return o})(e,r)}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.useFloatingLabel=exports.FLOATED_LABEL_SCALE=void 0;var _react=require("react"),_reactNative=require("react-native"),_index=require("../../theme/index.js"),_Notation=require("../Notation/Notation.js"),_FieldBase=require("./FieldBase.js"),_jsxRuntime=require("react/jsx-runtime");const FLOATED_LABEL_SCALE=exports.FLOATED_LABEL_SCALE=.85,FLOATED_LABEL_LIFT=1,NOTCH_GAP=4,useFloatingLabel=({label:e,enabled:t,floated:i,required:n=!1,variant:a,sizeTokens:r,leadingOffset:o,trailingOffset:l=0,textAlign:s="left",paddingLeft:u,lineHeight:d,restNudge:c=0,floatTrim:_=0,color:g,style:f})=>{const h=(0,_index.useTheme)(),L=(0,_react.useRef)((0,_index.createAnimatedValue)(i?1:0)).current,x=(0,_react.useRef)((0,_index.createAnimatedValue)(i?1:0)).current,p="outlined"===a,[m,A]=(0,_react.useState)(null);return(0,_react.useEffect)(()=>{const e=i?1:0,timing=(t,i)=>_reactNative.Animated.timing(t,{toValue:e,duration:h.motion.duration.fast,easing:_reactNative.Easing.bezier(...h.motion.easing.standard),useNativeDriver:i});p||x.setValue(e);const t=p?_reactNative.Animated.parallel([timing(L,!0),timing(x,!1)]):timing(L,!0);return t.start(),()=>t.stop()},[i,p,L,x,h.motion.duration.fast,h.motion.easing.standard]),(0,_react.useMemo)(()=>{if(!t||!(0,_FieldBase.hasFieldText)(e))return{node:null,topNotch:void 0};const i=d??m?.height??r.fontSize,a=null!=d?r.paddingVertical+c:Math.max(0,(r.minHeight-i)/2),v=-(a+i/2+1-_),E=L.interpolate({inputRange:[0,1],outputRange:[0,v]}),F=L.interpolate({inputRange:[0,1],outputRange:[1,FLOATED_LABEL_SCALE]}),N=-o,S=L.interpolate({inputRange:[0,1],outputRange:[0,N]}),R="right"===s?{right:r.paddingHorizontal+l,transformOrigin:"right center"}:"center"===s?{alignSelf:"center",transformOrigin:"center"}:{left:u+o,transformOrigin:"left center"},O=m?m.width*FLOATED_LABEL_SCALE:0,T=m?"right"===s?m.width-O:"center"===s?(m.width-O)/2:0:0,j=p&&m?{left:m.x+N+T-4,width:x.interpolate({inputRange:[0,1],outputRange:[0,O+8]})}:void 0,b=_reactNative.StyleSheet.flatten(f),z={fontSize:b?.fontSize??r.fontSize,color:b?.color??g};return{node:(0,_jsxRuntime.jsxs)(_reactNative.Animated.Text,{pointerEvents:"none",onLayout:e=>{const{x:t,width:i,height:n}=e.nativeEvent.layout;A(e=>e&&e.x===t&&e.width===i&&e.height===n?e:{x:t,width:i,height:n})},style:[styles.label,R,{top:a,color:g,fontSize:r.fontSize,lineHeight:d,...(0,_index.fontFor)(h,"medium"),transform:[{translateX:S},{translateY:E},{scale:F}]},f],children:[(0,_jsxRuntime.jsx)(_Notation.NotationInkContext.Provider,{value:z,children:e}),n?(0,_jsxRuntime.jsx)(_FieldBase.RequiredMark,{}):null]}),topNotch:j}},[t,e,n,p,r,o,l,s,u,d,c,_,g,f,L,x,m,h])};exports.useFloatingLabel=useFloatingLabel;const styles=_reactNative.StyleSheet.create({label:{position:"absolute",zIndex:1}});
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.useFloatingLabel=exports.FLOATED_LABEL_SCALE=void 0;var _react=require("react"),_reactNative=require("react-native"),_index=require("../../theme/index.js"),_Notation=require("../Notation/Notation.js"),_FieldBase=require("./FieldBase.js"),_jsxRuntime=require("react/jsx-runtime");const FLOATED_LABEL_SCALE=exports.FLOATED_LABEL_SCALE=.85,FLOATED_LABEL_LIFT=1,useFloatingLabel=({label:e,enabled:t,floated:i,required:n=!1,variant:a,sizeTokens:r,leadingOffset:o,trailingOffset:s=0,textAlign:l="left",paddingLeft:u,lineHeight:d,restNudge:c=0,floatTrim:_=0,color:g,style:x})=>{const h=(0,_index.useTheme)(),L=(0,_react.useRef)((0,_index.createAnimatedValue)(i?1:0)).current,f=(0,_react.useRef)((0,_index.createAnimatedValue)(i?1:0)).current,p="outlined"===a,[m,A]=(0,_react.useState)(null);return(0,_react.useEffect)(()=>{const e=i?1:0,timing=(t,i)=>_reactNative.Animated.timing(t,{toValue:e,duration:h.motion.duration.fast,easing:_reactNative.Easing.bezier(...h.motion.easing.standard),useNativeDriver:i});p||f.setValue(e);const t=p?_reactNative.Animated.parallel([timing(L,!0),timing(f,!1)]):timing(L,!0);return t.start(),()=>t.stop()},[i,p,L,f,h.motion.duration.fast,h.motion.easing.standard]),(0,_react.useMemo)(()=>{if(!t||!(0,_FieldBase.hasFieldText)(e))return{node:null,topNotch:void 0};const i=d??m?.height??r.text,a=null!=d?r.paddingY+c:Math.max(0,(r.minHeight-i)/2),v=-(a+i/2+1-_),E=L.interpolate({inputRange:[0,1],outputRange:[0,v]}),F=L.interpolate({inputRange:[0,1],outputRange:[1,FLOATED_LABEL_SCALE]}),N=-o,R=L.interpolate({inputRange:[0,1],outputRange:[0,N]}),S="right"===l?{right:r.paddingX+s,transformOrigin:"right center"}:"center"===l?{alignSelf:"center",transformOrigin:"center"}:{left:u+o,transformOrigin:"left center"},j=h.spacing.xs,O=m?m.width*FLOATED_LABEL_SCALE:0,T=m?"right"===l?m.width-O:"center"===l?(m.width-O)/2:0:0,b=p&&m?{left:m.x+N+T-j,width:f.interpolate({inputRange:[0,1],outputRange:[0,O+2*j]})}:void 0,B=_reactNative.StyleSheet.flatten(x),y={fontSize:B?.fontSize??r.text,color:B?.color??g};return{node:(0,_jsxRuntime.jsxs)(_reactNative.Animated.Text,{pointerEvents:"none",onLayout:e=>{const{x:t,width:i,height:n}=e.nativeEvent.layout;A(e=>e&&e.x===t&&e.width===i&&e.height===n?e:{x:t,width:i,height:n})},style:[styles.label,S,{top:a,color:g,fontSize:r.text,lineHeight:d,...(0,_index.fontFor)(h,"medium"),transform:[{translateX:R},{translateY:E},{scale:F}]},x],children:[(0,_jsxRuntime.jsx)(_Notation.NotationInkContext.Provider,{value:y,children:e}),n?(0,_jsxRuntime.jsx)(_FieldBase.RequiredMark,{}):null]}),topNotch:b}},[t,e,n,p,r,o,s,l,u,d,c,_,g,x,L,f,m,h])};exports.useFloatingLabel=useFloatingLabel;const styles=_reactNative.StyleSheet.create({label:{position:"absolute",zIndex:1}});
@@ -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"),_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:o,sources:s,maxFiles:n,maxSizeMB:l,accept:a,validate:c,process:d,variant:u="card",renderFile:m,renderTrigger:x,disabled:g=!1,helperText:h,error:p,labels:_,haptic:y,onPick:b,onRemove:f,onError:j,onFilePress:v,onRetry:R,style:T,accessibilityLabel:S,testID:C}=e,F=(0,_index2.useTheme)(),w=(0,_react.useMemo)(()=>buildStyles(F),[F]),k=(0,_react.useMemo)(()=>({...DEFAULT_LABELS,..._}),[_]),N=F.components.filePicker,P=N?.thumbnailSize??84,z=N?.borderRadius??F.radius.md,I=N?.dashedBorderColor??F.colors.primary,[O,V]=(0,_index.useControllableState)({value:r,defaultValue:i??[],onChange:o}),B=(0,_react.useRef)(O);B.current=O;const L=(0,_react.useCallback)(e=>{B.current=e,V(e)},[V]),[M,A]=(0,_react.useState)(null),[$,q]=(0,_react.useState)(!1),H=p??M??void 0,E="number"==typeof n&&O.length>=n,W=(0,_react.useCallback)((e,t)=>{0!==e.length&&(A(e[0]),e.forEach(e=>j?.(e,t)),!1!==y&&(0,_index3.triggerHaptic)("notificationError"))},[j,y]),D=(0,_react.useCallback)(async e=>{let t;try{t=await e.pick()}catch(e){return void W([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-B.current.length);i.length>e&&(r.push(k.errorTooMany(n)),i=i.slice(0,e))}const o=[];for(const e of i){if("number"==typeof l&&"number"==typeof e.size&&e.size>1024*l*1024){r.push(k.errorTooLarge(e.name,l));continue}if(!matchesAccept(e.type,a)){r.push(k.errorWrongType(e.name));continue}const t=c?.(e);t?r.push(t):o.push(e)}if(W(r),0===o.length)return;if(!d){L([...B.current,...o]),A(r.length>0?r[0]:null);const e=(0,_index3.resolveHaptic)(y,"selection");return e&&(0,_index3.triggerHaptic)(e),void b?.(o)}const s=o.map(e=>({...e,status:"processing"}));L([...B.current,...s]);const u=[];for(const e of s)try{const t=await d({...e,status:"idle"}),r={...t,id:e.id,status:t.status??"idle"};L(B.current.map(t=>t.id===e.id?r:t)),u.push(r)}catch(t){L(B.current.filter(t=>t.id!==e.id)),W([t instanceof Error?t.message:String(t)],e)}if(u.length>0){0===r.length&&A(null);const e=(0,_index3.resolveHaptic)(y,"selection");e&&(0,_index3.triggerHaptic)(e),b?.(u)}},[n,l,a,c,d,k,W,L,b,y]),U=(0,_react.useCallback)(e=>{if(g||E)return;const t=e?s.find(t=>t.key===e):1===s.length?s[0]:void 0;t?D(t):s.length>1&&q(!0)},[g,E,s,D]),G=(0,_react.useCallback)(e=>{if(g)return;L(B.current.filter(t=>t.id!==e.id)),A(null);const t=(0,_index3.resolveHaptic)(y,"selection");t&&(0,_index3.triggerHaptic)(t),f?.(e)},[g,L,f,y]),K=(0,_react.useCallback)(()=>{L([]),A(null)},[L]);(0,_react.useImperativeHandle)(t,()=>({open:U,clear:K}),[U,K]);const Y=0===O.length?k.trigger:`${O.length} file${1===O.length?"":"s"} attached`,J=S??`Attachments. ${Y}`,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(", "),Q=F.icons?.attachment??_defaultIcons.defaultIcons.attachment,renderStatusOverlay=e=>{if("processing"===e.status)return(0,_jsxRuntime.jsx)(_reactNative.View,{style:[w.tileOverlay,{backgroundColor:F.colors.background.overlay}],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.background.overlay}],children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[w.tileOverlayText,{color:F.colors.onOverlay}],children:`${t}%`}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:[w.tileProgressTrack,{backgroundColor:F.colors.border.primary}],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.onSuccess}],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.background.secondary}],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[w.extensionText,{color:F.colors.text.secondary,...(0,_index2.fontFor)(F,"semibold")}],children:extensionOf(e.name)})})},removeButton=e=>(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:()=>G(e),disabled:g,hitSlop:8,accessibilityRole:"button",accessibilityLabel:k.removeFile(e.name),style:[w.removeButton,{backgroundColor:F.colors.background.overlay}],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[w.removeButtonText,{color:F.colors.onOverlay}],children:"×"})}),retryButton=e=>R&&"error"===e.status?(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:()=>R(e),disabled:g,hitSlop:8,accessibilityRole:"button",accessibilityLabel:k.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:g,remove:()=>G(e),retry:R?()=>R(e):void 0},i=m?m(r):"card"===u?(e=>{const{file:t}=e;return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[w.tile,{width:P,height:P,borderRadius:z,..._corners.smoothCorners,borderColor:"error"===t.status?F.colors.error:F.colors.border.primary}],children:[renderThumbnail(t),renderStatusOverlay(t),"error"===t.status?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[w.tileOverlay,{backgroundColor:F.colors.background.overlay}],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:z,..._corners.smoothCorners,borderColor:"error"===t.status?F.colors.error:F.colors.border.primary,backgroundColor:F.colors.background.primary}],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.background.overlay}],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.primary,fontSize:F.typography.fontSize.sm,...(0,_index2.fontFor)(F,"medium")}],children:t.name}),(0,_jsxRuntime.jsx)(_reactNative.Text,{numberOfLines:1,style:[w.listSubtitle,{color:"error"===t.status?F.colors.toneText.error:F.colors.text.tertiary,fontSize:F.typography.fontSize.xs}],children:[formatFileSize(t.size),r].filter(Boolean).join(" · ")}),"uploading"===t.status?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[w.listProgressTrack,{backgroundColor:F.colors.border.primary}],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:()=>G(t),disabled:g,hitSlop:8,accessibilityRole:"button",accessibilityLabel:k.removeFile(t.name),children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[w.listRemoveText,{color:F.colors.text.tertiary}],children:"×"})})]})})(r);return(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:v?()=>v(e):void 0,disabled:g||!v,accessibilityLabel:fileA11yLabel(e),children:i},e.id)},X={open:U,disabled:g||E,fileCount:O.length,atCapacity:E},dashedTrigger=e=>(0,_jsxRuntime.jsxs)(_reactNative.Pressable,{onPress:()=>U(),disabled:g||E,accessibilityRole:"button",accessibilityLabel:J,accessibilityState:{disabled:g||E},"aria-disabled":g||E,style:({pressed:t})=>[w.trigger,e?w.triggerCompact:null,{borderRadius:z,..._corners.smoothCorners,borderColor:I,backgroundColor:t?F.colors.surface.pressed:F.colors.background.primary,opacity:g||E?.55:1}],children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:w.triggerRow,children:[Q?Q({size:16,color:F.colors.primary}):null,(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[w.triggerText,{color:F.colors.primary,fontSize:F.typography.fontSize.sm,...(0,_index2.fontFor)(F,"medium")}],children:0===O.length?k.trigger:k.addMore})]}),!e&&h?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[w.helperText,{color:F.colors.text.tertiary,fontSize:F.typography.fontSize.xs}],children:h}):null]}),Z=(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:()=>U(),disabled:g||E,accessibilityRole:"button",accessibilityLabel:k.addMore,style:({pressed:e})=>[w.tile,w.addTile,{width:P,height:P,borderRadius:z,..._corners.smoothCorners,borderColor:I,backgroundColor:e?F.colors.surface.pressed:"transparent",opacity:g||E?.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,T],testID:C,accessibilityLabel:J,children:["card"===u?0===O.length?x?x(X):dashedTrigger(!1):(0,_jsxRuntime.jsxs)(_reactNative.ScrollView,{horizontal:!0,showsHorizontalScrollIndicator:!1,contentContainerStyle:[w.strip,{columnGap:F.spacing.sm}],children:[O.map(renderOneFile),x?x(X):E||g?null:Z]}):(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{rowGap:F.spacing.sm},children:[x?x(X):E?null:dashedTrigger(O.length>0),O.map(renderOneFile)]}),(0,_index4.hasFieldText)(H)?(0,_jsxRuntime.jsx)(_reactNative.Text,{accessibilityLiveRegion:"polite",style:[w.errorText,{color:F.colors.toneText.error,fontSize:F.typography.fontSize.xs,marginTop:F.spacing.xxs}],children:H}):null,(0,_jsxRuntime.jsx)(_OptionSheet.OptionSheet,{open:$,onClose:()=>q(!1),title:k.sheetTitle,options:s,labelOf:e=>e.label,getValue:e=>e.key,disabledOf:()=>!1,descriptionOf:e=>e.description,iconOf:e=>e.icon,isSelected:()=>!1,onSelect:e=>{q(!1),D(e)}})]})});FilePicker.displayName="FilePicker";const buildStyles=e=>_reactNative.StyleSheet.create({container:{width:"100%"},trigger:{borderWidth:1,borderStyle:"dashed",alignItems:"center",paddingVertical:14,paddingHorizontal:16},triggerCompact:{paddingVertical:10},triggerRow:{flexDirection:"row",alignItems:"center",columnGap:8},triggerText:{includeFontPadding:!1},helperText:{includeFontPadding:!1,marginTop:6,textAlign:"center"},strip:{paddingVertical:2},tile:{borderWidth:1,overflow:"hidden"},addTile:{borderStyle:"dashed",alignItems:"center",justifyContent:"center"},addTileText:{fontSize:28,includeFontPadding:!1},thumbnailImage:{width:"100%",height:"100%",resizeMode:"cover"},extensionTile:{width:"100%",height:"100%",alignItems:"center",justifyContent:"center"},extensionText:{fontSize:12,letterSpacing:1,includeFontPadding:!1},tileOverlay:{..._reactNative.StyleSheet.absoluteFill,alignItems:"center",justifyContent:"center"},tileOverlayText:{fontSize:12,includeFontPadding:!1,marginBottom:6},tileProgressTrack:{position:"absolute",left:8,right:8,bottom:8,height:3,borderRadius:2,..._corners.smoothCorners,overflow:"hidden"},tileProgressFill:{height:"100%",borderRadius:2,..._corners.smoothCorners},doneBadge:{position:"absolute",right:4,bottom:4,width:18,height:18,borderRadius:9,..._corners.smoothCorners,alignItems:"center",justifyContent:"center"},doneBadgeText:{fontSize:11,includeFontPadding:!1},removeButton:{position:"absolute",top:4,right:4,width:20,height:20,borderRadius:10,..._corners.smoothCorners,alignItems:"center",justifyContent:"center"},removeButtonText:{fontSize:13,lineHeight:15,includeFontPadding:!1},retryText:{fontSize:20,includeFontPadding:!1},listRow:{flexDirection:"row",alignItems:"center",borderWidth:1,padding:10,columnGap:10},listThumb:{width:40,height:40,overflow:"hidden"},listTextWrap:{flex:1},listName:{includeFontPadding:!1},listSubtitle:{includeFontPadding:!1,marginTop:2},listProgressTrack:{height:3,borderRadius:2,..._corners.smoothCorners,overflow:"hidden",marginTop:6},listProgressFill:{height:"100%",borderRadius:2,..._corners.smoothCorners},listRemoveText:{fontSize:22,includeFontPadding:!1,paddingHorizontal:4},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"),_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:a,accept:l,validate:c,process:d,variant:u="card",renderFile:g,renderTrigger:x,disabled:m=!1,helperText:p,error:h,labels:y,haptic:_,onPick:b,onRemove:f,onError:j,onFilePress:v,onRetry:S,style:R,accessibilityLabel:T,testID:C}=e,z=(0,_index2.useTheme)(),F=(0,_react.useMemo)(()=>buildStyles(z),[z]),w=(0,_react.useMemo)(()=>({...DEFAULT_LABELS,...y}),[y]),k=z.components.filePicker,P=k?.thumbnailSize??84,N=(0,_index2.radiusOf)(z,k?.radius??"md","components.filePicker.radius"),I=k?.dashedBorderColor??z.colors.primary,[O,V]=(0,_index.useControllableState)({value:r,defaultValue:i??[],onChange:s}),B=(0,_react.useRef)(O);B.current=O;const L=(0,_react.useCallback)(e=>{B.current=e,V(e)},[V]),[M,A]=(0,_react.useState)(null),[$,H]=(0,_react.useState)(!1),q=h??M??void 0,E="number"==typeof n&&O.length>=n,W=(0,_react.useCallback)((e,t)=>{0!==e.length&&(A(e[0]),e.forEach(e=>j?.(e,t)),!1!==_&&(0,_index3.triggerHaptic)("notificationError"))},[j,_]),D=(0,_react.useCallback)(async e=>{let t;try{t=await e.pick()}catch(e){return void W([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-B.current.length);i.length>e&&(r.push(w.errorTooMany(n)),i=i.slice(0,e))}const s=[];for(const e of i){if("number"==typeof a&&"number"==typeof e.size&&e.size>1024*a*1024){r.push(w.errorTooLarge(e.name,a));continue}if(!matchesAccept(e.type,l)){r.push(w.errorWrongType(e.name));continue}const t=c?.(e);t?r.push(t):s.push(e)}if(W(r),0===s.length)return;if(!d){L([...B.current,...s]),A(r.length>0?r[0]:null);const e=(0,_index3.resolveHaptic)(_,"selection");return e&&(0,_index3.triggerHaptic)(e),void b?.(s)}const o=s.map(e=>({...e,status:"processing"}));L([...B.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"};L(B.current.map(t=>t.id===e.id?r:t)),u.push(r)}catch(t){L(B.current.filter(t=>t.id!==e.id)),W([t instanceof Error?t.message:String(t)],e)}if(u.length>0){0===r.length&&A(null);const e=(0,_index3.resolveHaptic)(_,"selection");e&&(0,_index3.triggerHaptic)(e),b?.(u)}},[n,a,l,c,d,w,W,L,b,_]),U=(0,_react.useCallback)(e=>{if(m||E)return;const t=e?o.find(t=>t.key===e):1===o.length?o[0]:void 0;t?D(t):o.length>1&&H(!0)},[m,E,o,D]),G=(0,_react.useCallback)(e=>{if(m)return;L(B.current.filter(t=>t.id!==e.id)),A(null);const t=(0,_index3.resolveHaptic)(_,"selection");t&&(0,_index3.triggerHaptic)(t),f?.(e)},[m,L,f,_]),K=(0,_react.useCallback)(()=>{L([]),A(null)},[L]);(0,_react.useImperativeHandle)(t,()=>({open:U,clear:K}),[U,K]);const Y=0===O.length?w.trigger:`${O.length} file${1===O.length?"":"s"} attached`,J=T??`Attachments. ${Y}`,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(", "),Q=z.icons?.attachment??_defaultIcons.defaultIcons.attachment,renderStatusOverlay=e=>{if("processing"===e.status)return(0,_jsxRuntime.jsx)(_reactNative.View,{style:[F.tileOverlay,{backgroundColor:z.colors.background.overlay}],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:[F.tileOverlay,{backgroundColor:z.colors.background.overlay}],children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[F.tileOverlayText,{color:z.colors.onOverlay}],children:`${t}%`}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:[F.tileProgressTrack,{backgroundColor:z.colors.border.primary}],children:(0,_jsxRuntime.jsx)(_reactNative.View,{style:[F.tileProgressFill,{width:`${t}%`,backgroundColor:z.colors.primary}]})})]})}return"done"===e.status?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[F.doneBadge,{backgroundColor:z.colors.success}],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[F.doneBadgeText,{color:z.colors.onSuccess}],children:"✓"})}):null},renderThumbnail=e=>{const t=imageSourceOf(e);return t?(0,_jsxRuntime.jsx)(_reactNative.Image,{source:{uri:t},style:F.thumbnailImage}):(0,_jsxRuntime.jsx)(_reactNative.View,{style:[F.extensionTile,{backgroundColor:z.colors.background.secondary}],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[F.extensionText,{color:z.colors.text.secondary,...(0,_index2.fontFor)(z,"semibold")}],children:extensionOf(e.name)})})},removeButton=e=>(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:()=>G(e),disabled:m,hitSlop:8,accessibilityRole:"button",accessibilityLabel:w.removeFile(e.name),style:[F.removeButton,{backgroundColor:z.colors.background.overlay}],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[F.removeButtonText,{color:z.colors.onOverlay}],children:"×"})}),retryButton=e=>S&&"error"===e.status?(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:()=>S(e),disabled:m,hitSlop:8,accessibilityRole:"button",accessibilityLabel:w.retry,children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[F.retryText,{color:z.colors.primary}],children:"↻"})}):null,renderOneFile=(e,t)=>{const r={file:e,index:t,disabled:m,remove:()=>G(e),retry:S?()=>S(e):void 0},i=g?g(r):"card"===u?(e=>{const{file:t}=e;return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[F.tile,{width:P,height:P,borderRadius:N,..._corners.smoothCorners,borderColor:"error"===t.status?z.colors.error:z.colors.border.primary}],children:[renderThumbnail(t),renderStatusOverlay(t),"error"===t.status?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[F.tileOverlay,{backgroundColor:z.colors.background.overlay}],children:retryButton(t)}):null,removeButton(t)]})})(r):(e=>{const{file:t}=e,r=statusText(t);return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[F.listRow,{borderRadius:N,..._corners.smoothCorners,borderColor:"error"===t.status?z.colors.error:z.colors.border.primary,backgroundColor:z.colors.background.primary}],children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[F.listThumb,{borderRadius:z.radius.sm,..._corners.smoothCorners}],children:[renderThumbnail(t),"processing"===t.status?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[F.tileOverlay,{backgroundColor:z.colors.background.overlay}],children:(0,_jsxRuntime.jsx)(_index5.Spinner,{size:"sm"})}):null]}),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:F.listTextWrap,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{numberOfLines:1,ellipsizeMode:"middle",style:[F.listName,{color:z.colors.text.primary,fontSize:z.typography.fontSize.sm,...(0,_index2.fontFor)(z,"medium")}],children:t.name}),(0,_jsxRuntime.jsx)(_reactNative.Text,{numberOfLines:1,style:[F.listSubtitle,{color:"error"===t.status?z.colors.toneText.error:z.colors.text.tertiary,fontSize:z.typography.fontSize.xs}],children:[formatFileSize(t.size),r].filter(Boolean).join(" · ")}),"uploading"===t.status?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[F.listProgressTrack,{backgroundColor:z.colors.border.primary}],children:(0,_jsxRuntime.jsx)(_reactNative.View,{style:[F.listProgressFill,{width:`${Math.round(100*(t.progress??0))}%`,backgroundColor:z.colors.primary}]})}):null]}),retryButton(t),(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:()=>G(t),disabled:m,hitSlop:8,accessibilityRole:"button",accessibilityLabel:w.removeFile(t.name),children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[F.listRemoveText,{color:z.colors.text.tertiary}],children:"×"})})]})})(r);return(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:v?()=>v(e):void 0,disabled:m||!v,accessibilityLabel:fileA11yLabel(e),children:i},e.id)},X={open:U,disabled:m||E,fileCount:O.length,atCapacity:E},dashedTrigger=e=>(0,_jsxRuntime.jsxs)(_reactNative.Pressable,{onPress:()=>U(),disabled:m||E,accessibilityRole:"button",accessibilityLabel:J,accessibilityState:{disabled:m||E},"aria-disabled":m||E,style:({pressed:t})=>[F.trigger,e?F.triggerCompact:null,{borderRadius:N,..._corners.smoothCorners,borderColor:I,backgroundColor:t?z.colors.surface.pressed:z.colors.background.primary,opacity:m||E?.55:1}],children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:F.triggerRow,children:[Q?Q({size:16,color:z.colors.primary}):null,(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[F.triggerText,{color:z.colors.primary,fontSize:z.typography.fontSize.sm,...(0,_index2.fontFor)(z,"medium")}],children:0===O.length?w.trigger:w.addMore})]}),!e&&p?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[F.helperText,{color:z.colors.text.tertiary,fontSize:z.typography.fontSize.xs}],children:p}):null]}),Z=(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:()=>U(),disabled:m||E,accessibilityRole:"button",accessibilityLabel:w.addMore,style:({pressed:e})=>[F.tile,F.addTile,{width:P,height:P,borderRadius:N,..._corners.smoothCorners,borderColor:I,backgroundColor:e?z.colors.surface.pressed:"transparent",opacity:m||E?.55:1}],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[F.addTileText,{color:z.colors.primary}],children:"+"})});return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[F.container,R],testID:C,accessibilityLabel:J,children:["card"===u?0===O.length?x?x(X):dashedTrigger(!1):(0,_jsxRuntime.jsxs)(_reactNative.ScrollView,{horizontal:!0,showsHorizontalScrollIndicator:!1,contentContainerStyle:[F.strip,{columnGap:z.spacing.sm}],children:[O.map(renderOneFile),x?x(X):E||m?null:Z]}):(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{rowGap:z.spacing.sm},children:[x?x(X):E?null:dashedTrigger(O.length>0),O.map(renderOneFile)]}),(0,_index4.hasFieldText)(q)?(0,_jsxRuntime.jsx)(_reactNative.Text,{accessibilityLiveRegion:"polite",style:[F.errorText,{color:z.colors.toneText.error,fontSize:z.typography.fontSize.xs,marginTop:z.spacing.xxs}],children:q}):null,(0,_jsxRuntime.jsx)(_OptionSheet.OptionSheet,{open:$,onClose:()=>H(!1),title:w.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=>{H(!1),D(e)}})]})});FilePicker.displayName="FilePicker";const buildStyles=e=>_reactNative.StyleSheet.create({container:{width:"100%"},trigger:{borderWidth:1,borderStyle:"dashed",alignItems:"center",minHeight:48,paddingVertical:e.spacing.md,paddingHorizontal:e.spacing.lg},triggerCompact:{minHeight:40,paddingVertical:e.spacing.sm},triggerRow:{flexDirection:"row",alignItems:"center",columnGap:e.spacing.sm},triggerText:{includeFontPadding:!1},helperText:{includeFontPadding:!1,marginTop:e.spacing.xs,textAlign:"center"},strip:{paddingVertical:e.spacing.xxs},tile:{borderWidth:1,overflow:"hidden"},addTile:{borderStyle:"dashed",alignItems:"center",justifyContent:"center"},addTileText:{fontSize:e.typography.fontSize["3xl"],includeFontPadding:!1},thumbnailImage:{width:"100%",height:"100%",resizeMode:"cover"},extensionTile:{width:"100%",height:"100%",alignItems:"center",justifyContent:"center"},extensionText:{fontSize:e.typography.fontSize.sm,letterSpacing:1,includeFontPadding:!1},tileOverlay:{..._reactNative.StyleSheet.absoluteFill,alignItems:"center",justifyContent:"center"},tileOverlayText:{fontSize:e.typography.fontSize.sm,includeFontPadding:!1,marginBottom:e.spacing.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.typography.fontSize.xs,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.typography.fontSize.sm,lineHeight:15,includeFontPadding:!1},retryText:{fontSize:e.typography.fontSize.xl,includeFontPadding:!1},listRow:{flexDirection:"row",alignItems:"center",borderWidth:1,padding:e.spacing.sm,columnGap:e.spacing.sm},listThumb:{width:40,height:40,overflow:"hidden"},listTextWrap:{flex:1},listName:{includeFontPadding:!1},listSubtitle:{includeFontPadding:!1,marginTop:e.spacing.xxs},listProgressTrack:{height:3,borderRadius:e.radius.pill,..._corners.smoothCorners,overflow:"hidden",marginTop:e.spacing.xs},listProgressFill:{height:"100%",borderRadius:e.radius.pill,..._corners.smoothCorners},listRemoveText:{fontSize:e.typography.fontSize["2xl"],includeFontPadding:!1,paddingHorizontal:e.spacing.xs},errorText:{includeFontPadding:!1}});var _default=exports.default=FilePicker;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.FloatingActionButtonGroup=exports.FloatingActionButton=void 0;var _mobileCore=require("@webority/mobile-core"),_react=_interopRequireWildcard(require("react")),_reactNative=require("react-native"),_reactNativeReanimated=_interopRequireWildcard(require("react-native-reanimated")),_reactNativeSafeAreaContext=require("react-native-safe-area-context"),_usePresenceMotion=require("../../hooks/usePresenceMotion.js"),_usePressAnimation=require("../../hooks/usePressAnimation.js"),_index=require("../../theme/index.js"),_announce=require("../../utils/announce.js"),_color=require("../../utils/color.js"),_corners=require("../../utils/corners.js"),_hapticUtils=require("../../utils/hapticUtils.js"),_jsxRuntime=require("react/jsx-runtime");function _interopRequireWildcard(e,t){if("function"==typeof WeakMap)var r=new WeakMap,n=new WeakMap;return(_interopRequireWildcard=function(e,t){if(!t&&e&&e.__esModule)return e;var i,a,o={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return o;if(i=t?n:r){if(i.has(e))return i.get(e);i.set(e,o)}for(const t in e)"default"!==t&&{}.hasOwnProperty.call(e,t)&&((a=(i=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,t))&&(a.get||a.set)?i(o,t,a):o[t]=e[t]);return o})(e,t)}const sizeMap={sm:{diameter:40,iconSize:18,fontSize:13,labelPaddingHorizontal:14},md:{diameter:56,iconSize:22,fontSize:15,labelPaddingHorizontal:18},lg:{diameter:72,iconSize:28,fontSize:16,labelPaddingHorizontal:22}},toneBackground=(e,t)=>{switch(t){case"success":return e.colors.success;case"warning":return e.colors.warning;case"error":return e.colors.error;case"neutral":return e.colors.background.tertiary;default:return e.colors.primary}},pressedTintFor=(e,t)=>"neutral"===t?e.colors.surface.pressed:_color.ACCENT_PRESSED_TINT,toneForeground=(e,t)=>{if("neutral"===t)return e.colors.text.primary;switch(t){case"success":return e.colors.onSuccess;case"warning":return e.colors.onWarning;case"error":return e.colors.onError;default:return e.colors.onPrimary}},FloatingActionButton=exports.FloatingActionButton=(0,_react.forwardRef)((e,t)=>{const{icon:r,onPress:n,label:i,collapsed:a=!1,size:o="md",tone:s="primary",position:c,bottomOffset:l,disabled:u=!1,hideOnScroll:d=!1,isScrolling:m=!1,accessibilityLabel:_,accessibilityHint:p,haptic:g,style:f,containerStyle:b,labelStyle:h,testID:y}=e,v=(0,_index.useTheme)(),x=(0,_reactNativeSafeAreaContext.useSafeAreaInsets)(),R=sizeMap[o],j=(0,_react.useMemo)(()=>buildStyles(v),[v]),{scale:w,opacity:N,pressIn:S,pressOut:A}=(0,_usePressAnimation.usePressAnimation)({enabled:!u}),C=(0,_usePresenceMotion.usePresenceMotion)(),P=v.components.floatingActionButton,E=P?.edgeOffset??24,k=P?.bottomOffset??24,I=(0,_react.useRef)((0,_index.createAnimatedValue)(1)).current,F=C.duration("normal");(0,_react.useEffect)(()=>{if(!d)return void(0,_index.setNativeValue)(I,1);const e=_reactNative.Animated.timing(I,{toValue:m?0:1,duration:F,easing:_reactNative.Easing.bezier(...v.motion.easing.standard),useNativeDriver:!0});return e.start(),()=>e.stop()},[d,m,I,F,v.motion.easing.standard]);const M=R.diameter+(l??k)+x.bottom+E,V=I.interpolate({inputRange:[0,1],outputRange:C.range(M,0)}),z=(0,_react.useMemo)(()=>_reactNative.Animated.multiply(I,N),[I,N]),O=r,D="string"==typeof i&&i.length>0,B=D&&a,T=C.reduced,L=v.spacing.sm,q=R.labelPaddingHorizontal,H=v.motion.duration.fast,W=v.motion.easing.standard,$=(0,_reactNativeReanimated.useSharedValue)(B?1:0),[G,U]=(0,_react.useState)(null);(0,_react.useEffect)(()=>{const e=B?1:0;return $.value=T?e:(0,_reactNativeReanimated.withTiming)(e,{duration:H,easing:_reactNativeReanimated.Easing.bezier(...W)}),()=>(0,_reactNativeReanimated.cancelAnimation)($)},[B,T,$,H,W]);const Y=(0,_react.useCallback)(e=>{const t=Math.ceil(e);U(e=>e===t?e:t)},[]),Q=(0,_reactNativeReanimated.useAnimatedStyle)(()=>({paddingHorizontal:q*(1-$.value)})),X=(0,_reactNativeReanimated.useAnimatedStyle)(()=>{const e=Math.max(0,1-2*$.value);return null===G?$.value>=1?{opacity:e,width:0}:{opacity:e}:{opacity:e,width:(G+L)*(1-$.value)}}),J=u?v.colors.surface.disabled:toneBackground(v,s),K=u?v.colors.text.disabled:toneForeground(v,s),Z=(0,_react.useMemo)(()=>{if(!c)return null;const e=(l??k)+x.bottom;switch(c){case"bottomLeft":return{position:"absolute",bottom:e,left:E};case"bottomCenter":return{position:"absolute",bottom:e,alignSelf:"center"};default:return{position:"absolute",bottom:e,right:E}}},[c,l,x.bottom,k,E]);return(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:[Z,{transform:[{translateY:V},{scale:w}],opacity:z},b,f],pointerEvents:d&&m?"none":"auto",children:(0,_jsxRuntime.jsx)(_reactNative.Pressable,{ref:t,onPress:e=>{if(u)return;const t=(0,_hapticUtils.resolveHaptic)(g,"impactLight");t&&(0,_hapticUtils.triggerHaptic)(t),n()},onPressIn:S,onPressOut:A,disabled:u,accessibilityRole:"button",accessibilityLabel:_,accessibilityHint:p,accessibilityState:{disabled:u},"aria-disabled":u,testID:y,style:[j.base,D?{height:R.diameter,minWidth:R.diameter,borderRadius:R.diameter/2,..._corners.smoothCorners}:{width:R.diameter,height:R.diameter,borderRadius:R.diameter/2,..._corners.smoothCorners},v.shadows.lg,{backgroundColor:J,opacity:u?.55:1}],children:({pressed:e})=>(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[e&&!u?(0,_jsxRuntime.jsx)(_reactNative.View,{pointerEvents:"none",testID:"fab-pressed",style:[j.pressedTint,{backgroundColor:pressedTintFor(v,s),borderRadius:R.diameter/2,..._corners.smoothCorners}]}):null,D?(0,_jsxRuntime.jsxs)(_reactNativeReanimated.default.View,{style:[j.extendedRow,Q],children:[O,(0,_jsxRuntime.jsx)(_reactNativeReanimated.default.View,{style:[j.labelClip,X],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{onLayout:e=>Y(e.nativeEvent.layout.width),style:[j.label,{color:K,fontSize:R.fontSize,fontWeight:v.typography.fontWeight.semibold,marginLeft:L},h],numberOfLines:1,children:i})})]}):O]})})})});FloatingActionButton.displayName="FloatingActionButton";const buildStyles=e=>_reactNative.StyleSheet.create({base:{flexDirection:"row",alignItems:"center",justifyContent:"center",overflow:"hidden"},pressedTint:{position:"absolute",top:0,right:0,bottom:0,left:0},extendedRow:{flexDirection:"row",alignItems:"center"},labelClip:{flexDirection:"row",overflow:"hidden"},label:{includeFontPadding:!1,flexShrink:0}}),FAB_GROUP_MIN_ACTIONS=2,FAB_GROUP_MAX_ACTIONS=6,FAB_GROUP_RANGE="2 to 6",describeActionProblem=e=>e.length<2?`was given ${e.length} action(s); a menu holds 2 to 6.`:e.length>6?`was given ${e.length} actions; a menu holds 2 to 6, so only the first 6 are drawn.`:e.some(e=>"string"!=typeof e.label||""===e.label.trim())?"has an action without a visible `label`; every menu action needs one.":"",FloatingActionButtonGroup=e=>{const{primaryIcon:t,primaryActiveIcon:r,actions:n,open:i,defaultOpen:a=!1,onOpenChange:o,position:s="bottomRight",bottomOffset:c,size:l="md",accessibilityLabel:u="Quick actions",haptic:d,hideOnScroll:m=!1,isScrolling:_=!1,containerStyle:p,secondaryActionStyle:g,labelPillStyle:f,labelStyle:b,testID:h}=e,y=(0,_index.useTheme)(),v=(0,_reactNativeSafeAreaContext.useSafeAreaInsets)(),x=sizeMap[l],R=(0,_react.useMemo)(()=>buildGroupStyles(y),[y]),j=(0,_usePresenceMotion.usePresenceMotion)(),w=j.duration("normal"),N=y.components.floatingActionButton,S=N?.edgeOffset??24,A=N?.bottomOffset??24,C=N?.secondaryGap??16,P=N?.staggerMs??50,E=(0,_react.useMemo)(()=>n.slice(0,6),[n]),k=E.length,I=(0,_react.useMemo)(()=>E.map((e,t)=>({action:e,index:t})).reverse(),[E]),F=__DEV__?describeActionProblem(n):"";(0,_react.useEffect)(()=>{__DEV__&&F&&_mobileCore.Logger.warn(`[@webority/mobile-ui] FloatingActionButtonGroup ${F}`)},[F]);const M="boolean"==typeof i,[V,z]=(0,_react.useState)(a),O=M?i:V,D=(0,_react.useRef)((0,_index.createAnimatedValue)(1)).current;(0,_react.useEffect)(()=>{if(!m)return void(0,_index.setNativeValue)(D,1);const e=_reactNative.Animated.timing(D,{toValue:_?0:1,duration:w,easing:_reactNative.Easing.bezier(...y.motion.easing.standard),useNativeDriver:!0});return e.start(),()=>e.stop()},[m,_,D,w,y.motion.easing.standard]);const B=m&&_;(0,_react.useEffect)(()=>{B&&O&&(M||z(!1),o?.(!1))},[B,O,M,o]);const T=x.diameter+(c??A)+v.bottom+S,L=D.interpolate({inputRange:[0,1],outputRange:j.range(T,0)}),q=D,H=(0,_react.useRef)((0,_index.createAnimatedValue)(O?1:0)).current,W=(0,_react.useRef)([]),[$,G]=(0,_react.useState)(0);(0,_react.useEffect)(()=>{const e=W.current;if(e.length!==k){if(e.length<k){const t=e.slice();for(let r=e.length;r<k;r+=1)t.push(new _reactNative.Animated.Value(O?1:0));W.current=t}else W.current=e.slice(0,k);G(e=>e+1)}},[k]),(0,_react.useEffect)(()=>{const e=_reactNative.Animated.timing(H,{toValue:O?1:0,duration:w,easing:_reactNative.Easing.bezier(...y.motion.easing.standard),useNativeDriver:!0});e.start();const t=W.current.map(e=>_reactNative.Animated.timing(e,{toValue:O?1:0,duration:w,easing:_reactNative.Easing.bezier(...y.motion.easing.standard),useNativeDriver:!0})),r=O?t:[...t].reverse(),n=_reactNative.Animated.stagger(P,r);return n.start(),()=>{e.stop(),n.stop()}},[O,H,w,y.motion.easing.standard,k,$,P]);const U=(0,_react.useCallback)(e=>{const t=(0,_hapticUtils.resolveHaptic)(d,"impactLight");t&&(0,_hapticUtils.triggerHaptic)(t),M||z(e),o?.(e)},[M,o,d]),Y=(0,_react.useRef)(null),Q=(0,_react.useRef)(O),X=(0,_react.useRef)(!1);(0,_react.useEffect)(()=>{if(Q.current===O)return;Q.current=O;const e=X.current;if(X.current=!1,B||e)return;const t=Y.current;t&&("web"===_reactNative.Platform.OS?t.focus?.():_reactNative.AccessibilityInfo.sendAccessibilityEvent(t,"focus"));const r=1===k?"action":"actions";(0,_announce.announce)(O?`${u}, expanded, ${k} ${r}`:`${u}, collapsed`)},[O,B,u,k]);const J=(0,_react.useCallback)(()=>{U(!O)},[O,U]),K=(0,_react.useCallback)(e=>{!1!==d&&(0,_hapticUtils.triggerHaptic)("selection"),X.current=!0,e.onPress(),M||z(!1),o?.(!1)},[M,o,d]),Z=(0,_react.useCallback)(()=>{O&&U(!1)},[O,U]);(0,_react.useEffect)(()=>{if(!O)return;const e=_reactNative.BackHandler.addEventListener("hardwareBackPress",()=>(U(!1),!0));return()=>e.remove()},[O,U]),(0,_react.useEffect)(()=>{if(!O||"web"!==_reactNative.Platform.OS)return;const onKeyDown=e=>{"Escape"===e.key&&U(!1)};return window.addEventListener("keydown",onKeyDown),()=>window.removeEventListener("keydown",onKeyDown)},[O,U]);const ee=(0,_react.useMemo)(()=>{const e=(c??A)+v.bottom;switch(s){case"bottomLeft":return{position:"absolute",bottom:e,left:S,alignItems:"flex-start"};case"bottomCenter":return{position:"absolute",bottom:e,alignSelf:"center",alignItems:"center"};default:return{position:"absolute",bottom:e,right:S,alignItems:"flex-end"}}},[s,c,v.bottom,A,S]),slotOffset=e=>-(x.diameter+C)*(e+1),te=(0,_react.useMemo)(()=>{switch(s){case"bottomLeft":return{left:0,right:0,justifyContent:"flex-start"};case"bottomCenter":return{left:0,right:0,justifyContent:"center"};default:return{left:0,right:0,justifyContent:"flex-end"}}},[s]),re=.78*x.diameter,ne=(0,_react.useMemo)(()=>{const e=re+y.spacing.sm;switch(s){case"bottomLeft":return{left:e,alignItems:"flex-start"};case"bottomCenter":return{right:x.diameter/2+re/2+y.spacing.sm,alignItems:"flex-end"};default:return{right:e,alignItems:"flex-end"}}},[s,re,x.diameter,y.spacing.sm]),ie=H.interpolate({inputRange:[0,1],outputRange:[0,.4]}),ae=H.interpolate(j.reduced?{inputRange:[0,.5,.5001,1],outputRange:["0deg","0deg","45deg","45deg"]}:{inputRange:[0,1],outputRange:["0deg","45deg"]});return(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[O?(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{pointerEvents:O?"auto":"none",style:[_reactNative.StyleSheet.absoluteFill,{backgroundColor:y.colors.background.overlay,opacity:ie}],children:(0,_jsxRuntime.jsx)(_reactNative.Pressable,{style:_reactNative.StyleSheet.absoluteFill,onPress:Z,accessibilityElementsHidden:!0,importantForAccessibility:"no",testID:h?`${h}-backdrop`:void 0})}):null,(0,_jsxRuntime.jsxs)(_reactNative.Animated.View,{pointerEvents:B?"none":"box-none",style:[ee,{transform:[{translateY:L}],opacity:q},p],accessibilityRole:"menu",testID:h,children:[I.map(({action:e,index:t})=>{const r=W.current[t];if(!r)return null;const n=r.interpolate({inputRange:[0,1],outputRange:j.range(0,slotOffset(t))}),i=r.interpolate({inputRange:[0,1],outputRange:j.range(.6,1)}),a=toneBackground(y,e.tone??"primary"),o=toneForeground(y,e.tone??"primary"),s=e.label?(0,_jsxRuntime.jsx)(_reactNative.View,{pointerEvents:"none",style:[R.labelSlot,ne],testID:h?`${h}-label-${e.key}`:void 0,children:(0,_jsxRuntime.jsx)(_reactNative.View,{style:[R.labelPill,y.shadows.sm,{backgroundColor:y.colors.background.elevated,paddingHorizontal:y.spacing.sm,paddingVertical:y.spacing.xs,borderRadius:y.radius.sm,..._corners.smoothCorners},f],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[{color:y.colors.text.primary,fontSize:y.typography.fontSize.sm,fontWeight:y.typography.fontWeight.medium},b],numberOfLines:1,children:e.label})})}):null;return(0,_jsxRuntime.jsxs)(_reactNative.Animated.View,{pointerEvents:O?"auto":"none",accessibilityElementsHidden:!O,importantForAccessibility:O?"auto":"no-hide-descendants","aria-hidden":!O,style:[R.secondaryRow,te,{position:"absolute",bottom:0,opacity:r,transform:[{translateY:n},{scale:i}]}],children:[(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:()=>K(e),focusable:O,accessibilityRole:"menuitem",accessibilityLabel:e.accessibilityLabel,style:[R.fabBase,y.shadows.md,{width:re,height:re,borderRadius:re/2,..._corners.smoothCorners,backgroundColor:a},g],testID:h?`${h}-action-${e.key}`:void 0,children:({pressed:t})=>(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[t?(0,_jsxRuntime.jsx)(_reactNative.View,{pointerEvents:"none",testID:"fab-pressed",style:[R.pressedTint,{backgroundColor:pressedTintFor(y,e.tone??"primary"),borderRadius:re/2,..._corners.smoothCorners}]}):null,_react.default.isValidElement(e.icon)?e.icon:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:{color:o},children:String(e.icon??"")})]})}),s]},e.key)}),(0,_jsxRuntime.jsx)(_reactNative.Pressable,{ref:Y,onPress:J,accessibilityRole:"button",accessibilityLabel:u,accessibilityState:{expanded:O},"aria-expanded":O,style:[R.fabBase,y.shadows.lg,{width:x.diameter,height:x.diameter,borderRadius:x.diameter/2,..._corners.smoothCorners,backgroundColor:y.colors.primary}],testID:h?`${h}-primary`:void 0,children:({pressed:e})=>(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[e?(0,_jsxRuntime.jsx)(_reactNative.View,{pointerEvents:"none",testID:"fab-pressed",style:[R.pressedTint,{backgroundColor:_color.ACCENT_PRESSED_TINT,borderRadius:x.diameter/2,..._corners.smoothCorners}]}):null,(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:r?void 0:{transform:[{rotate:ae}]},children:O&&r?r:t})]})})]})]})};exports.FloatingActionButtonGroup=FloatingActionButtonGroup;const buildGroupStyles=e=>_reactNative.StyleSheet.create({fabBase:{flexDirection:"row",alignItems:"center",justifyContent:"center",overflow:"hidden"},pressedTint:{position:"absolute",top:0,right:0,bottom:0,left:0},secondaryRow:{flexDirection:"row",alignItems:"center"},labelSlot:{position:"absolute",top:0,bottom:0,justifyContent:"center"},labelPill:{alignSelf:"auto"}});var _default=exports.default=FloatingActionButton;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.FloatingActionButtonGroup=exports.FloatingActionButton=void 0;var _mobileCore=require("@webority/mobile-core"),_react=_interopRequireWildcard(require("react")),_reactNative=require("react-native"),_reactNativeReanimated=_interopRequireWildcard(require("react-native-reanimated")),_reactNativeSafeAreaContext=require("react-native-safe-area-context"),_usePresenceMotion=require("../../hooks/usePresenceMotion.js"),_usePressAnimation=require("../../hooks/usePressAnimation.js"),_index=require("../../theme/index.js"),_announce=require("../../utils/announce.js"),_color=require("../../utils/color.js"),_corners=require("../../utils/corners.js"),_hapticUtils=require("../../utils/hapticUtils.js"),_jsxRuntime=require("react/jsx-runtime");function _interopRequireWildcard(e,t){if("function"==typeof WeakMap)var n=new WeakMap,r=new WeakMap;return(_interopRequireWildcard=function(e,t){if(!t&&e&&e.__esModule)return e;var i,a,o={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return o;if(i=t?r:n){if(i.has(e))return i.get(e);i.set(e,o)}for(const t in e)"default"!==t&&{}.hasOwnProperty.call(e,t)&&((a=(i=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,t))&&(a.get||a.set)?i(o,t,a):o[t]=e[t]);return o})(e,t)}const toneBackground=(e,t)=>{switch(t){case"success":return e.colors.success;case"warning":return e.colors.warning;case"error":return e.colors.error;case"neutral":return e.colors.background.tertiary;default:return e.colors.primary}},pressedTintFor=(e,t)=>"neutral"===t?e.colors.surface.pressed:_color.ACCENT_PRESSED_TINT,toneForeground=(e,t)=>{if("neutral"===t)return e.colors.text.primary;switch(t){case"success":return e.colors.onSuccess;case"warning":return e.colors.onWarning;case"error":return e.colors.onError;default:return e.colors.onPrimary}},FloatingActionButton=exports.FloatingActionButton=(0,_react.forwardRef)((e,t)=>{const{icon:n,onPress:r,label:i,collapsed:a=!1,size:o="md",tone:s="primary",position:c,bottomOffset:l,disabled:u=!1,hideOnScroll:d=!1,isScrolling:m=!1,accessibilityLabel:_,accessibilityHint:f,haptic:p,style:g,containerStyle:b,labelStyle:h,testID:y}=e,v=(0,_index.useTheme)(),x=(0,_reactNativeSafeAreaContext.useSafeAreaInsets)(),R=(0,_react.useMemo)(()=>(0,_index.resolveFloatingActionButtonSize)(v,o),[v,o]),j=(0,_react.useMemo)(()=>buildStyles(v),[v]),{scale:w,opacity:A,pressIn:N,pressOut:S}=(0,_usePressAnimation.usePressAnimation)({enabled:!u}),C=(0,_usePresenceMotion.usePresenceMotion)(),E=v.components.floatingActionButton,P=(0,_index.spaceOf)(v,E.edgeOffset,"components.floatingActionButton.edgeOffset"),k=(0,_index.spaceOf)(v,E.bottomOffset,"components.floatingActionButton.bottomOffset"),O=(0,_react.useRef)((0,_index.createAnimatedValue)(1)).current,I=C.duration("normal");(0,_react.useEffect)(()=>{if(!d)return void(0,_index.setNativeValue)(O,1);const e=_reactNative.Animated.timing(O,{toValue:m?0:1,duration:I,easing:_reactNative.Easing.bezier(...v.motion.easing.standard),useNativeDriver:!0});return e.start(),()=>e.stop()},[d,m,O,I,v.motion.easing.standard]);const B=R.diameter+(l??k)+x.bottom+P,F=O.interpolate({inputRange:[0,1],outputRange:C.range(B,0)}),M=(0,_react.useMemo)(()=>_reactNative.Animated.multiply(O,A),[O,A]),V=n,D="string"==typeof i&&i.length>0,T=D&&a,L=C.reduced,q=v.spacing.sm,z=R.labelPaddingX,G=v.motion.duration.fast,W=v.motion.easing.standard,$=(0,_reactNativeReanimated.useSharedValue)(T?1:0),[H,U]=(0,_react.useState)(null);(0,_react.useEffect)(()=>{const e=T?1:0;return $.value=L?e:(0,_reactNativeReanimated.withTiming)(e,{duration:G,easing:_reactNativeReanimated.Easing.bezier(...W)}),()=>(0,_reactNativeReanimated.cancelAnimation)($)},[T,L,$,G,W]);const Y=(0,_react.useCallback)(e=>{const t=Math.ceil(e);U(e=>e===t?e:t)},[]),X=(0,_reactNativeReanimated.useAnimatedStyle)(()=>({paddingHorizontal:z*(1-$.value)})),Q=(0,_reactNativeReanimated.useAnimatedStyle)(()=>{const e=Math.max(0,1-2*$.value);return null===H?$.value>=1?{opacity:e,width:0}:{opacity:e}:{opacity:e,width:(H+q)*(1-$.value)}}),J=u?v.colors.surface.disabled:toneBackground(v,s),K=u?v.colors.text.disabled:toneForeground(v,s),Z=(0,_react.useMemo)(()=>{if(!c)return null;const e=(l??k)+x.bottom;switch(c){case"bottomLeft":return{position:"absolute",bottom:e,left:P};case"bottomCenter":return{position:"absolute",bottom:e,alignSelf:"center"};default:return{position:"absolute",bottom:e,right:P}}},[c,l,x.bottom,k,P]);return(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:[Z,{transform:[{translateY:F},{scale:w}],opacity:M},b,g],pointerEvents:d&&m?"none":"auto",children:(0,_jsxRuntime.jsx)(_reactNative.Pressable,{ref:t,onPress:e=>{if(u)return;const t=(0,_hapticUtils.resolveHaptic)(p,"impactLight");t&&(0,_hapticUtils.triggerHaptic)(t),r()},onPressIn:N,onPressOut:S,disabled:u,accessibilityRole:"button",accessibilityLabel:_,accessibilityHint:f,accessibilityState:{disabled:u},"aria-disabled":u,testID:y,style:[j.base,D?{height:R.diameter,minWidth:R.diameter,borderRadius:R.diameter/2,..._corners.smoothCorners}:{width:R.diameter,height:R.diameter,borderRadius:R.diameter/2,..._corners.smoothCorners},v.shadows.lg,{backgroundColor:J,opacity:u?.55:1}],children:({pressed:e})=>(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[e&&!u?(0,_jsxRuntime.jsx)(_reactNative.View,{pointerEvents:"none",testID:"fab-pressed",style:[j.pressedTint,{backgroundColor:pressedTintFor(v,s),borderRadius:R.diameter/2,..._corners.smoothCorners}]}):null,D?(0,_jsxRuntime.jsxs)(_reactNativeReanimated.default.View,{style:[j.extendedRow,X],children:[V,(0,_jsxRuntime.jsx)(_reactNativeReanimated.default.View,{style:[j.labelClip,Q],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{onLayout:e=>Y(e.nativeEvent.layout.width),style:[j.label,{color:K,fontSize:R.text,fontWeight:v.typography.fontWeight.semibold,marginLeft:q},h],numberOfLines:1,children:i})})]}):V]})})})});FloatingActionButton.displayName="FloatingActionButton";const buildStyles=e=>_reactNative.StyleSheet.create({base:{flexDirection:"row",alignItems:"center",justifyContent:"center",overflow:"hidden"},pressedTint:{position:"absolute",top:0,right:0,bottom:0,left:0},extendedRow:{flexDirection:"row",alignItems:"center"},labelClip:{flexDirection:"row",overflow:"hidden"},label:{includeFontPadding:!1,flexShrink:0}}),FAB_GROUP_MIN_ACTIONS=2,FAB_GROUP_MAX_ACTIONS=6,FAB_GROUP_RANGE="2 to 6",describeActionProblem=e=>e.length<2?`was given ${e.length} action(s); a menu holds 2 to 6.`:e.length>6?`was given ${e.length} actions; a menu holds 2 to 6, so only the first 6 are drawn.`:e.some(e=>"string"!=typeof e.label||""===e.label.trim())?"has an action without a visible `label`; every menu action needs one.":"",FloatingActionButtonGroup=e=>{const{primaryIcon:t,primaryActiveIcon:n,actions:r,open:i,defaultOpen:a=!1,onOpenChange:o,position:s="bottomRight",bottomOffset:c,size:l="md",accessibilityLabel:u="Quick actions",haptic:d,hideOnScroll:m=!1,isScrolling:_=!1,containerStyle:f,secondaryActionStyle:p,labelPillStyle:g,labelStyle:b,testID:h}=e,y=(0,_index.useTheme)(),v=(0,_reactNativeSafeAreaContext.useSafeAreaInsets)(),x=(0,_react.useMemo)(()=>(0,_index.resolveFloatingActionButtonSize)(y,l),[y,l]),R=(0,_react.useMemo)(()=>buildGroupStyles(y),[y]),j=(0,_usePresenceMotion.usePresenceMotion)(),w=j.duration("normal"),A=y.components.floatingActionButton,N=(0,_index.spaceOf)(y,A.edgeOffset,"components.floatingActionButton.edgeOffset"),S=(0,_index.spaceOf)(y,A.bottomOffset,"components.floatingActionButton.bottomOffset"),C=(0,_index.spaceOf)(y,A.secondaryGap,"components.floatingActionButton.secondaryGap"),E=A.staggerMs,P=(0,_react.useMemo)(()=>r.slice(0,6),[r]),k=P.length,O=(0,_react.useMemo)(()=>P.map((e,t)=>({action:e,index:t})).reverse(),[P]),I=__DEV__?describeActionProblem(r):"";(0,_react.useEffect)(()=>{__DEV__&&I&&_mobileCore.Logger.warn(`[@webority/mobile-ui] FloatingActionButtonGroup ${I}`)},[I]);const B="boolean"==typeof i,[F,M]=(0,_react.useState)(a),V=B?i:F,D=(0,_react.useRef)((0,_index.createAnimatedValue)(1)).current;(0,_react.useEffect)(()=>{if(!m)return void(0,_index.setNativeValue)(D,1);const e=_reactNative.Animated.timing(D,{toValue:_?0:1,duration:w,easing:_reactNative.Easing.bezier(...y.motion.easing.standard),useNativeDriver:!0});return e.start(),()=>e.stop()},[m,_,D,w,y.motion.easing.standard]);const T=m&&_;(0,_react.useEffect)(()=>{T&&V&&(B||M(!1),o?.(!1))},[T,V,B,o]);const L=x.diameter+(c??S)+v.bottom+N,q=D.interpolate({inputRange:[0,1],outputRange:j.range(L,0)}),z=D,G=(0,_react.useRef)((0,_index.createAnimatedValue)(V?1:0)).current,W=(0,_react.useRef)([]),[$,H]=(0,_react.useState)(0);(0,_react.useEffect)(()=>{const e=W.current;if(e.length!==k){if(e.length<k){const t=e.slice();for(let n=e.length;n<k;n+=1)t.push(new _reactNative.Animated.Value(V?1:0));W.current=t}else W.current=e.slice(0,k);H(e=>e+1)}},[k]),(0,_react.useEffect)(()=>{const e=_reactNative.Animated.timing(G,{toValue:V?1:0,duration:w,easing:_reactNative.Easing.bezier(...y.motion.easing.standard),useNativeDriver:!0});e.start();const t=W.current.map(e=>_reactNative.Animated.timing(e,{toValue:V?1:0,duration:w,easing:_reactNative.Easing.bezier(...y.motion.easing.standard),useNativeDriver:!0})),n=V?t:[...t].reverse(),r=_reactNative.Animated.stagger(E,n);return r.start(),()=>{e.stop(),r.stop()}},[V,G,w,y.motion.easing.standard,k,$,E]);const U=(0,_react.useCallback)(e=>{const t=(0,_hapticUtils.resolveHaptic)(d,"impactLight");t&&(0,_hapticUtils.triggerHaptic)(t),B||M(e),o?.(e)},[B,o,d]),Y=(0,_react.useRef)(null),X=(0,_react.useRef)(V),Q=(0,_react.useRef)(!1);(0,_react.useEffect)(()=>{if(X.current===V)return;X.current=V;const e=Q.current;if(Q.current=!1,T||e)return;const t=Y.current;t&&("web"===_reactNative.Platform.OS?t.focus?.():_reactNative.AccessibilityInfo.sendAccessibilityEvent(t,"focus"));const n=1===k?"action":"actions";(0,_announce.announce)(V?`${u}, expanded, ${k} ${n}`:`${u}, collapsed`)},[V,T,u,k]);const J=(0,_react.useCallback)(()=>{U(!V)},[V,U]),K=(0,_react.useCallback)(e=>{!1!==d&&(0,_hapticUtils.triggerHaptic)("selection"),Q.current=!0,e.onPress(),B||M(!1),o?.(!1)},[B,o,d]),Z=(0,_react.useCallback)(()=>{V&&U(!1)},[V,U]);(0,_react.useEffect)(()=>{if(!V)return;const e=_reactNative.BackHandler.addEventListener("hardwareBackPress",()=>(U(!1),!0));return()=>e.remove()},[V,U]),(0,_react.useEffect)(()=>{if(!V||"web"!==_reactNative.Platform.OS)return;const onKeyDown=e=>{"Escape"===e.key&&U(!1)};return window.addEventListener("keydown",onKeyDown),()=>window.removeEventListener("keydown",onKeyDown)},[V,U]);const ee=(0,_react.useMemo)(()=>{const e=(c??S)+v.bottom;switch(s){case"bottomLeft":return{position:"absolute",bottom:e,left:N,alignItems:"flex-start"};case"bottomCenter":return{position:"absolute",bottom:e,alignSelf:"center",alignItems:"center"};default:return{position:"absolute",bottom:e,right:N,alignItems:"flex-end"}}},[s,c,v.bottom,S,N]),slotOffset=e=>-(x.diameter+C)*(e+1),te=(0,_react.useMemo)(()=>{switch(s){case"bottomLeft":return{left:0,right:0,justifyContent:"flex-start"};case"bottomCenter":return{left:0,right:0,justifyContent:"center"};default:return{left:0,right:0,justifyContent:"flex-end"}}},[s]),ne=.78*x.diameter,re=(0,_react.useMemo)(()=>{const e=ne+y.spacing.sm;switch(s){case"bottomLeft":return{left:e,alignItems:"flex-start"};case"bottomCenter":return{right:x.diameter/2+ne/2+y.spacing.sm,alignItems:"flex-end"};default:return{right:e,alignItems:"flex-end"}}},[s,ne,x.diameter,y.spacing.sm]),ie=G.interpolate({inputRange:[0,1],outputRange:[0,.4]}),ae=G.interpolate(j.reduced?{inputRange:[0,.5,.5001,1],outputRange:["0deg","0deg","45deg","45deg"]}:{inputRange:[0,1],outputRange:["0deg","45deg"]});return(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[V?(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{pointerEvents:V?"auto":"none",style:[_reactNative.StyleSheet.absoluteFill,{backgroundColor:y.colors.background.overlay,opacity:ie}],children:(0,_jsxRuntime.jsx)(_reactNative.Pressable,{style:_reactNative.StyleSheet.absoluteFill,onPress:Z,accessibilityElementsHidden:!0,importantForAccessibility:"no",testID:h?`${h}-backdrop`:void 0})}):null,(0,_jsxRuntime.jsxs)(_reactNative.Animated.View,{pointerEvents:T?"none":"box-none",style:[ee,{transform:[{translateY:q}],opacity:z},f],accessibilityRole:"menu",testID:h,children:[O.map(({action:e,index:t})=>{const n=W.current[t];if(!n)return null;const r=n.interpolate({inputRange:[0,1],outputRange:j.range(0,slotOffset(t))}),i=n.interpolate({inputRange:[0,1],outputRange:j.range(.6,1)}),a=toneBackground(y,e.tone??"primary"),o=toneForeground(y,e.tone??"primary"),s=e.label?(0,_jsxRuntime.jsx)(_reactNative.View,{pointerEvents:"none",style:[R.labelSlot,re],testID:h?`${h}-label-${e.key}`:void 0,children:(0,_jsxRuntime.jsx)(_reactNative.View,{style:[R.labelPill,y.shadows.sm,{backgroundColor:y.colors.background.elevated,paddingHorizontal:y.spacing.sm,paddingVertical:y.spacing.xs,borderRadius:y.radius.sm,..._corners.smoothCorners},g],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[{color:y.colors.text.primary,fontSize:y.typography.fontSize.sm,fontWeight:y.typography.fontWeight.medium},b],numberOfLines:1,children:e.label})})}):null;return(0,_jsxRuntime.jsxs)(_reactNative.Animated.View,{pointerEvents:V?"auto":"none",accessibilityElementsHidden:!V,importantForAccessibility:V?"auto":"no-hide-descendants","aria-hidden":!V,style:[R.secondaryRow,te,{position:"absolute",bottom:0,opacity:n,transform:[{translateY:r},{scale:i}]}],children:[(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:()=>K(e),focusable:V,accessibilityRole:"menuitem",accessibilityLabel:e.accessibilityLabel,style:[R.fabBase,y.shadows.md,{width:ne,height:ne,borderRadius:ne/2,..._corners.smoothCorners,backgroundColor:a},p],testID:h?`${h}-action-${e.key}`:void 0,children:({pressed:t})=>(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[t?(0,_jsxRuntime.jsx)(_reactNative.View,{pointerEvents:"none",testID:"fab-pressed",style:[R.pressedTint,{backgroundColor:pressedTintFor(y,e.tone??"primary"),borderRadius:ne/2,..._corners.smoothCorners}]}):null,_react.default.isValidElement(e.icon)?e.icon:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:{color:o},children:String(e.icon??"")})]})}),s]},e.key)}),(0,_jsxRuntime.jsx)(_reactNative.Pressable,{ref:Y,onPress:J,accessibilityRole:"button",accessibilityLabel:u,accessibilityState:{expanded:V},"aria-expanded":V,style:[R.fabBase,y.shadows.lg,{width:x.diameter,height:x.diameter,borderRadius:x.diameter/2,..._corners.smoothCorners,backgroundColor:y.colors.primary}],testID:h?`${h}-primary`:void 0,children:({pressed:e})=>(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[e?(0,_jsxRuntime.jsx)(_reactNative.View,{pointerEvents:"none",testID:"fab-pressed",style:[R.pressedTint,{backgroundColor:_color.ACCENT_PRESSED_TINT,borderRadius:x.diameter/2,..._corners.smoothCorners}]}):null,(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:n?void 0:{transform:[{rotate:ae}]},children:V&&n?n:t})]})})]})]})};exports.FloatingActionButtonGroup=FloatingActionButtonGroup;const buildGroupStyles=e=>_reactNative.StyleSheet.create({fabBase:{flexDirection:"row",alignItems:"center",justifyContent:"center",overflow:"hidden"},pressedTint:{position:"absolute",top:0,right:0,bottom:0,left:0},secondaryRow:{flexDirection:"row",alignItems:"center"},labelSlot:{position:"absolute",top:0,bottom:0,justifyContent:"center"},labelPill:{alignSelf:"auto"}});var _default=exports.default=FloatingActionButton;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.ImageGallery=void 0;var _react=_interopRequireWildcard(require("react")),_reactNative=require("react-native"),_reactNativeGestureHandler=require("react-native-gesture-handler"),_reactNativeReanimated=_interopRequireWildcard(require("react-native-reanimated")),_index=require("../../theme/index.js"),_index2=require("../../utils/index.js"),_corners=require("../../utils/corners.js"),_defaultIcons=require("../AppIcon/defaultIcons.js"),_index3=require("../Carousel/index.js"),_index4=require("../Skeleton/index.js"),_ToastProvider=require("../Toast/ToastProvider.js"),_jsxRuntime=require("react/jsx-runtime");function _interopRequireWildcard(e,t){if("function"==typeof WeakMap)var a=new WeakMap,i=new WeakMap;return(_interopRequireWildcard=function(e,t){if(!t&&e&&e.__esModule)return e;var r,n,l={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return l;if(r=t?i:a){if(r.has(e))return r.get(e);r.set(e,l)}for(const t in e)"default"!==t&&{}.hasOwnProperty.call(e,t)&&((n=(r=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,t))&&(n.get||n.set)?r(l,t,n):l[t]=e[t]);return l})(e,t)}const MAX_SCALE_FALLBACK=4,MIN_SCALE_FALLBACK=1,DOUBLE_TAP_SCALE_FALLBACK=2,SPRING_CONFIG={damping:18,stiffness:220,mass:1},ImageGallery=({images:e,initialIndex:t=0,showThumbnails:a=!0,showCounter:i=!0,enableLightbox:r=!0,enablePinchZoom:n=!0,onIndexChange:l,haptic:s,loading:o=!1,accessibilityLabel:c,containerStyle:u,testID:d})=>{const m=(0,_index.useTheme)(),_=(0,_react.useMemo)(()=>buildStyles(m),[m]),[h,g]=(0,_react.useState)(clamp(t,0,Math.max(0,e.length-1))),[v,x]=(0,_react.useState)(!1),p=(0,_react.useCallback)(e=>{g(e),l?.(e)},[l]),b=(0,_react.useCallback)(()=>{if(!r)return;const e=(0,_index2.resolveHaptic)(s,"selection");e&&(0,_index2.triggerHaptic)(e),x(!0)},[r,s]),y=(0,_react.useCallback)(()=>{const e=(0,_index2.resolveHaptic)(s,"selection");e&&(0,_index2.triggerHaptic)(e),x(!1)},[s]),R=(0,_react.useCallback)((t,a)=>{const i=t.alt??`Image ${a+1} of ${e.length}`;return(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:b,accessibilityRole:"image",accessibilityLabel:i,accessibilityHint:r?"Tap to open fullscreen":void 0,style:_.imageWrap,children:(0,_jsxRuntime.jsx)(_reactNative.Image,{source:t.source,style:_.image,resizeMode:"cover"})})},[r,e.length,b,_]),S=(0,_react.useCallback)(e=>(0,_jsxRuntime.jsx)(_reactNative.Image,{source:e.source,style:_.thumbnailImage,resizeMode:"cover"}),[_]),N=(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[_.container,u],testID:d,accessibilityLabel:c??"Image gallery",children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:_.carouselWrap,children:[(0,_jsxRuntime.jsx)(_index3.Carousel,{data:e,defaultIndex:t,onIndexChange:p,renderItem:R,showPagination:!1,showThumbnails:a,renderThumbnail:S,haptic:s}),i&&e.length>0?(0,_jsxRuntime.jsx)(_reactNative.View,{style:_.counterPill,pointerEvents:"none",children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[_.counterText,{color:m.colors.onOverlay}],accessibilityLabel:`Image ${h+1} of ${e.length}`,children:`${h+1} / ${e.length}`})}):null]}),r?(0,_jsxRuntime.jsx)(Lightbox,{visible:v,images:e,initialIndex:h,enablePinchZoom:n,showCounter:i,onClose:y,onIndexChange:p,haptic:s}):null]});return o?(0,_jsxRuntime.jsx)(ImageGallerySkeleton,{images:e,showThumbnails:a,showCounter:i,containerStyle:u,testID:d}):N};exports.ImageGallery=ImageGallery,ImageGallery.displayName="ImageGallery";const ImageGallerySkeleton=({images:e,showThumbnails:t=!0,showCounter:a=!0,containerStyle:i,testID:r})=>{const n=Math.min(e?.length||4,6);return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[{width:"100%"},i],testID:r,accessibilityRole:"progressbar",accessibilityState:{busy:!0},"aria-busy":!0,children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{position:"relative"},children:[(0,_jsxRuntime.jsx)(_index4.Skeleton,{width:"100%",height:280,radius:"lg"}),a?(0,_jsxRuntime.jsx)(_reactNative.View,{style:{position:"absolute",top:12,right:12},children:(0,_jsxRuntime.jsx)(_index4.Skeleton,{width:44,height:22,radius:"full"})}):null]}),t?(0,_jsxRuntime.jsx)(_reactNative.View,{style:{flexDirection:"row",marginTop:12},children:Array.from({length:n}).map((e,t)=>(0,_jsxRuntime.jsx)(_index4.Skeleton,{width:64,height:64,radius:"md",style:{marginRight:8}},`sk-thumb-${t}`))}):null]})};ImageGallerySkeleton.displayName="ImageGallerySkeleton",ImageGallery.Skeleton=ImageGallerySkeleton;const Lightbox=({visible:e,images:t,initialIndex:a,enablePinchZoom:i,showCounter:r,onClose:n,onIndexChange:l,haptic:s})=>{const o=(0,_index.useTheme)(),c=(0,_react.useMemo)(()=>buildLightboxStyles(o),[o]),u=o.components.imageGallery,d=u?.maxScale??4,m=u?.minScale??1,_=u?.doubleTapScale??2,h=(0,_react.useRef)(null),[g,v]=(0,_react.useState)(a),x=(0,_react.useCallback)(e=>{if(e!==g){const t=(0,_index2.resolveHaptic)(s,"selection");t&&(0,_index2.triggerHaptic)(t),v(e),l(e)}},[g,l,s]),p=(0,_react.useCallback)((e,a)=>(0,_jsxRuntime.jsx)(ZoomableImage,{image:e,index:a,total:t.length,active:a===g,enabled:i,maxScale:d,minScale:m,doubleTapScale:_,haptic:s}),[g,i,t.length,d,m,_,s]),b=t[g]?.caption;return(0,_jsxRuntime.jsx)(_reactNative.Modal,{visible:e,transparent:!0,statusBarTranslucent:!0,presentationStyle:"overFullScreen",animationType:"fade",onRequestClose:n,accessibilityViewIsModal:!0,children:(0,_jsxRuntime.jsxs)(_reactNative.View,{style:c.backdrop,accessibilityViewIsModal:!0,children:[(0,_jsxRuntime.jsx)(_index3.Carousel,{ref:h,data:t,defaultIndex:a,onIndexChange:x,renderItem:p,showPagination:!1,haptic:s}),r&&t.length>0?(0,_jsxRuntime.jsx)(_reactNative.View,{style:c.counterPill,pointerEvents:"none",children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[c.counterText,{color:o.colors.onOverlay}],accessibilityLabel:`Image ${g+1} of ${t.length}`,children:`${g+1} / ${t.length}`})}):null,(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:n,accessibilityRole:"button",accessibilityLabel:"Close gallery",style:c.closeButton,hitSlop:12,children:(o.icons?.close??_defaultIcons.defaultIcons.close)({size:24,color:o.colors.onOverlay})}),b?(0,_jsxRuntime.jsx)(_reactNativeReanimated.default.View,{style:c.captionWrap,entering:void 0,accessibilityElementsHidden:!1,children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:c.captionText,numberOfLines:3,children:b})}):null,(0,_jsxRuntime.jsx)(_ToastProvider.ToastHost,{})]})})},ZoomableImage=({image:e,index:t,total:a,active:i,enabled:r,maxScale:n,minScale:l,doubleTapScale:s,haptic:o})=>{const c=_reactNative.Dimensions.get("window"),u=(0,_reactNativeReanimated.useSharedValue)(1),d=(0,_reactNativeReanimated.useSharedValue)(1),m=(0,_reactNativeReanimated.useSharedValue)(0),_=(0,_reactNativeReanimated.useSharedValue)(0),h=(0,_reactNativeReanimated.useSharedValue)(0),g=(0,_reactNativeReanimated.useSharedValue)(0),v=(0,_react.useCallback)(()=>{u.value=(0,_reactNativeReanimated.withSpring)(1,SPRING_CONFIG),d.value=1,m.value=(0,_reactNativeReanimated.withSpring)(0,SPRING_CONFIG),_.value=(0,_reactNativeReanimated.withSpring)(0,SPRING_CONFIG),h.value=0,g.value=0},[u,d,m,_,h,g]);_react.default.useEffect(()=>{i||(u.value=(0,_reactNativeReanimated.withTiming)(1,{duration:150}),m.value=(0,_reactNativeReanimated.withTiming)(0,{duration:150}),_.value=(0,_reactNativeReanimated.withTiming)(0,{duration:150}),d.value=1,h.value=0,g.value=0)},[i,u,m,_,d,h,g]);const x=(0,_react.useCallback)(()=>{!1!==o&&(0,_index2.triggerHaptic)("impactLight")},[o]),p=(0,_react.useMemo)(()=>_reactNativeGestureHandler.Gesture.Pinch().enabled(r).onStart(()=>{"worklet";d.value=u.value}).onUpdate(e=>{"worklet";const t=d.value*e.scale;u.value=t<l?l+.3*(t-l):t>n?n+.2*(t-n):t}).onEnd(()=>{"worklet";return u.value<l?(u.value=(0,_reactNativeReanimated.withSpring)(l,SPRING_CONFIG),m.value=(0,_reactNativeReanimated.withSpring)(0,SPRING_CONFIG),_.value=(0,_reactNativeReanimated.withSpring)(0,SPRING_CONFIG),d.value=l,h.value=0,void(g.value=0)):u.value>n?(u.value=(0,_reactNativeReanimated.withSpring)(n,SPRING_CONFIG),void(d.value=n)):void(d.value=u.value)}),[r,u,d,m,_,h,g,l,n]),b=(0,_react.useMemo)(()=>_reactNativeGestureHandler.Gesture.Pan().minPointers(1).maxPointers(1).onStart(()=>{"worklet";h.value=m.value,g.value=_.value}).onUpdate(e=>{"worklet";u.value<=1||(m.value=h.value+e.translationX,_.value=g.value+e.translationY)}).onEnd(()=>{"worklet";h.value=m.value,g.value=_.value}),[u,m,_,h,g]),y=(0,_react.useMemo)(()=>_reactNativeGestureHandler.Gesture.Tap().numberOfTaps(2).onEnd(()=>{"worklet";(0,_reactNativeReanimated.runOnJS)(x)(),u.value>1?(u.value=(0,_reactNativeReanimated.withSpring)(1,SPRING_CONFIG),m.value=(0,_reactNativeReanimated.withSpring)(0,SPRING_CONFIG),_.value=(0,_reactNativeReanimated.withSpring)(0,SPRING_CONFIG),d.value=1,h.value=0,g.value=0):(u.value=(0,_reactNativeReanimated.withSpring)(s,SPRING_CONFIG),d.value=s)}),[u,d,m,_,h,g,x,s]),R=(0,_react.useMemo)(()=>_reactNativeGestureHandler.Gesture.Race(p,b,y),[p,b,y]),S=(0,_reactNativeReanimated.useAnimatedStyle)(()=>({transform:[{translateX:m.value},{translateY:_.value},{scale:u.value}]}));_react.default.useEffect(()=>{i||v()},[i,v]);const N=e.alt??`Image ${t+1} of ${a}`;return(0,_jsxRuntime.jsx)(_reactNativeGestureHandler.GestureDetector,{gesture:R,children:(0,_jsxRuntime.jsx)(_reactNativeReanimated.default.View,{style:[lightboxImageStyles.container,{width:c.width}],children:(0,_jsxRuntime.jsx)(_reactNativeReanimated.default.Image,{source:e.source,resizeMode:"contain",style:[lightboxImageStyles.image,S],accessibilityLabel:N,accessible:!0})})})},clamp=(e,t,a)=>Math.min(Math.max(e,t),a),buildStyles=e=>_reactNative.StyleSheet.create({container:{width:"100%"},carouselWrap:{width:"100%",position:"relative"},imageWrap:{width:"100%",aspectRatio:16/9,backgroundColor:e.colors.background.secondary,overflow:"hidden",borderRadius:e.radius.md,..._corners.smoothCorners},image:{width:"100%",height:"100%"},thumbnailImage:{width:"100%",height:"100%"},counterPill:{position:"absolute",top:12,alignSelf:"center",paddingHorizontal:12,paddingVertical:4,borderRadius:e.radius.full,..._corners.smoothCorners,backgroundColor:"rgba(0,0,0,0.55)"},counterText:{fontSize:e.typography.fontSize.sm,fontWeight:e.typography.fontWeight.semibold}}),buildLightboxStyles=e=>_reactNative.StyleSheet.create({backdrop:{flex:1,backgroundColor:"#000",justifyContent:"center"},counterPill:{position:"absolute",top:48,alignSelf:"center",paddingHorizontal:14,paddingVertical:6,borderRadius:e.radius.full,..._corners.smoothCorners,backgroundColor:"rgba(0,0,0,0.6)"},counterText:{fontSize:e.typography.fontSize.sm,fontWeight:e.typography.fontWeight.semibold},closeButton:{position:"absolute",top:44,right:16,width:40,height:40,borderRadius:20,..._corners.smoothCorners,alignItems:"center",justifyContent:"center",backgroundColor:"rgba(0,0,0,0.5)"},captionWrap:{position:"absolute",left:0,right:0,bottom:32,paddingHorizontal:24},captionText:{color:"#FFFFFF",fontSize:14,lineHeight:20,textAlign:"center"}}),lightboxImageStyles=_reactNative.StyleSheet.create({container:{flex:1,alignItems:"center",justifyContent:"center"},image:{width:"100%",height:"100%"}});var _default=exports.default=ImageGallery;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.ImageGallery=void 0;var _react=_interopRequireWildcard(require("react")),_reactNative=require("react-native"),_reactNativeGestureHandler=require("react-native-gesture-handler"),_reactNativeReanimated=_interopRequireWildcard(require("react-native-reanimated")),_index=require("../../theme/index.js"),_index2=require("../../utils/index.js"),_corners=require("../../utils/corners.js"),_defaultIcons=require("../AppIcon/defaultIcons.js"),_index3=require("../Carousel/index.js"),_index4=require("../Skeleton/index.js"),_ToastProvider=require("../Toast/ToastProvider.js"),_jsxRuntime=require("react/jsx-runtime");function _interopRequireWildcard(e,t){if("function"==typeof WeakMap)var a=new WeakMap,i=new WeakMap;return(_interopRequireWildcard=function(e,t){if(!t&&e&&e.__esModule)return e;var n,r,l={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return l;if(n=t?i:a){if(n.has(e))return n.get(e);n.set(e,l)}for(const t in e)"default"!==t&&{}.hasOwnProperty.call(e,t)&&((r=(n=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,t))&&(r.get||r.set)?n(l,t,r):l[t]=e[t]);return l})(e,t)}const MAX_SCALE_FALLBACK=4,MIN_SCALE_FALLBACK=1,DOUBLE_TAP_SCALE_FALLBACK=2,SPRING_CONFIG={damping:18,stiffness:220,mass:1},ImageGallery=({images:e,initialIndex:t=0,showThumbnails:a=!0,showCounter:i=!0,enableLightbox:n=!0,enablePinchZoom:r=!0,onIndexChange:l,haptic:s,loading:o=!1,accessibilityLabel:c,containerStyle:u,testID:d})=>{const m=(0,_index.useTheme)(),_=(0,_react.useMemo)(()=>buildStyles(m),[m]),[g,h]=(0,_react.useState)(clamp(t,0,Math.max(0,e.length-1))),[v,x]=(0,_react.useState)(!1),p=(0,_react.useCallback)(e=>{h(e),l?.(e)},[l]),b=(0,_react.useCallback)(()=>{if(!n)return;const e=(0,_index2.resolveHaptic)(s,"selection");e&&(0,_index2.triggerHaptic)(e),x(!0)},[n,s]),y=(0,_react.useCallback)(()=>{const e=(0,_index2.resolveHaptic)(s,"selection");e&&(0,_index2.triggerHaptic)(e),x(!1)},[s]),S=(0,_react.useCallback)((t,a)=>{const i=t.alt??`Image ${a+1} of ${e.length}`;return(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:b,accessibilityRole:"image",accessibilityLabel:i,accessibilityHint:n?"Tap to open fullscreen":void 0,style:_.imageWrap,children:(0,_jsxRuntime.jsx)(_reactNative.Image,{source:t.source,style:_.image,resizeMode:"cover"})})},[n,e.length,b,_]),R=(0,_react.useCallback)(e=>(0,_jsxRuntime.jsx)(_reactNative.Image,{source:e.source,style:_.thumbnailImage,resizeMode:"cover"}),[_]),N=(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[_.container,u],testID:d,accessibilityLabel:c??"Image gallery",children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:_.carouselWrap,children:[(0,_jsxRuntime.jsx)(_index3.Carousel,{data:e,defaultIndex:t,onIndexChange:p,renderItem:S,showPagination:!1,showThumbnails:a,renderThumbnail:R,haptic:s}),i&&e.length>0?(0,_jsxRuntime.jsx)(_reactNative.View,{style:_.counterPill,pointerEvents:"none",children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[_.counterText,{color:m.colors.onOverlay}],accessibilityLabel:`Image ${g+1} of ${e.length}`,children:`${g+1} / ${e.length}`})}):null]}),n?(0,_jsxRuntime.jsx)(Lightbox,{visible:v,images:e,initialIndex:g,enablePinchZoom:r,showCounter:i,onClose:y,onIndexChange:p,haptic:s}):null]});return o?(0,_jsxRuntime.jsx)(ImageGallerySkeleton,{images:e,showThumbnails:a,showCounter:i,containerStyle:u,testID:d}):N};exports.ImageGallery=ImageGallery,ImageGallery.displayName="ImageGallery";const ImageGallerySkeleton=({images:e,showThumbnails:t=!0,showCounter:a=!0,containerStyle:i,testID:n})=>{const r=(0,_index.useTheme)(),l=Math.min(e?.length||4,6);return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[{width:"100%"},i],testID:n,accessibilityRole:"progressbar",accessibilityState:{busy:!0},"aria-busy":!0,children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:{position:"relative"},children:[(0,_jsxRuntime.jsx)(_index4.Skeleton,{width:"100%",height:280,radius:"lg"}),a?(0,_jsxRuntime.jsx)(_reactNative.View,{style:{position:"absolute",top:12,right:12},children:(0,_jsxRuntime.jsx)(_index4.Skeleton,{width:44,height:22,radius:"pill"})}):null]}),t?(0,_jsxRuntime.jsx)(_reactNative.View,{style:{flexDirection:"row",marginTop:r.spacing.md},children:Array.from({length:l}).map((e,t)=>(0,_jsxRuntime.jsx)(_index4.Skeleton,{width:64,height:64,radius:"md",style:{marginRight:r.spacing.sm}},`sk-thumb-${t}`))}):null]})};ImageGallerySkeleton.displayName="ImageGallerySkeleton",ImageGallery.Skeleton=ImageGallerySkeleton;const Lightbox=({visible:e,images:t,initialIndex:a,enablePinchZoom:i,showCounter:n,onClose:r,onIndexChange:l,haptic:s})=>{const o=(0,_index.useTheme)(),c=(0,_react.useMemo)(()=>buildLightboxStyles(o),[o]),u=o.components.imageGallery,d=u?.maxScale??4,m=u?.minScale??1,_=u?.doubleTapScale??2,g=(0,_react.useRef)(null),[h,v]=(0,_react.useState)(a),x=(0,_react.useCallback)(e=>{if(e!==h){const t=(0,_index2.resolveHaptic)(s,"selection");t&&(0,_index2.triggerHaptic)(t),v(e),l(e)}},[h,l,s]),p=(0,_react.useCallback)((e,a)=>(0,_jsxRuntime.jsx)(ZoomableImage,{image:e,index:a,total:t.length,active:a===h,enabled:i,maxScale:d,minScale:m,doubleTapScale:_,haptic:s}),[h,i,t.length,d,m,_,s]),b=t[h]?.caption;return(0,_jsxRuntime.jsx)(_reactNative.Modal,{visible:e,transparent:!0,statusBarTranslucent:!0,presentationStyle:"overFullScreen",animationType:"fade",onRequestClose:r,accessibilityViewIsModal:!0,children:(0,_jsxRuntime.jsxs)(_reactNative.View,{style:c.backdrop,accessibilityViewIsModal:!0,children:[(0,_jsxRuntime.jsx)(_index3.Carousel,{ref:g,data:t,defaultIndex:a,onIndexChange:x,renderItem:p,showPagination:!1,haptic:s}),n&&t.length>0?(0,_jsxRuntime.jsx)(_reactNative.View,{style:c.counterPill,pointerEvents:"none",children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[c.counterText,{color:o.colors.onOverlay}],accessibilityLabel:`Image ${h+1} of ${t.length}`,children:`${h+1} / ${t.length}`})}):null,(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:r,accessibilityRole:"button",accessibilityLabel:"Close gallery",style:c.closeButton,hitSlop:12,children:(o.icons?.close??_defaultIcons.defaultIcons.close)({size:24,color:o.colors.onOverlay})}),b?(0,_jsxRuntime.jsx)(_reactNativeReanimated.default.View,{style:c.captionWrap,entering:void 0,accessibilityElementsHidden:!1,children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:c.captionText,numberOfLines:3,children:b})}):null,(0,_jsxRuntime.jsx)(_ToastProvider.ToastHost,{})]})})},ZoomableImage=({image:e,index:t,total:a,active:i,enabled:n,maxScale:r,minScale:l,doubleTapScale:s,haptic:o})=>{const c=_reactNative.Dimensions.get("window"),u=(0,_reactNativeReanimated.useSharedValue)(1),d=(0,_reactNativeReanimated.useSharedValue)(1),m=(0,_reactNativeReanimated.useSharedValue)(0),_=(0,_reactNativeReanimated.useSharedValue)(0),g=(0,_reactNativeReanimated.useSharedValue)(0),h=(0,_reactNativeReanimated.useSharedValue)(0),v=(0,_react.useCallback)(()=>{u.value=(0,_reactNativeReanimated.withSpring)(1,SPRING_CONFIG),d.value=1,m.value=(0,_reactNativeReanimated.withSpring)(0,SPRING_CONFIG),_.value=(0,_reactNativeReanimated.withSpring)(0,SPRING_CONFIG),g.value=0,h.value=0},[u,d,m,_,g,h]);_react.default.useEffect(()=>{i||(u.value=(0,_reactNativeReanimated.withTiming)(1,{duration:150}),m.value=(0,_reactNativeReanimated.withTiming)(0,{duration:150}),_.value=(0,_reactNativeReanimated.withTiming)(0,{duration:150}),d.value=1,g.value=0,h.value=0)},[i,u,m,_,d,g,h]);const x=(0,_react.useCallback)(()=>{!1!==o&&(0,_index2.triggerHaptic)("impactLight")},[o]),p=(0,_react.useMemo)(()=>_reactNativeGestureHandler.Gesture.Pinch().enabled(n).onStart(()=>{"worklet";d.value=u.value}).onUpdate(e=>{"worklet";const t=d.value*e.scale;u.value=t<l?l+.3*(t-l):t>r?r+.2*(t-r):t}).onEnd(()=>{"worklet";return u.value<l?(u.value=(0,_reactNativeReanimated.withSpring)(l,SPRING_CONFIG),m.value=(0,_reactNativeReanimated.withSpring)(0,SPRING_CONFIG),_.value=(0,_reactNativeReanimated.withSpring)(0,SPRING_CONFIG),d.value=l,g.value=0,void(h.value=0)):u.value>r?(u.value=(0,_reactNativeReanimated.withSpring)(r,SPRING_CONFIG),void(d.value=r)):void(d.value=u.value)}),[n,u,d,m,_,g,h,l,r]),b=(0,_react.useMemo)(()=>_reactNativeGestureHandler.Gesture.Pan().minPointers(1).maxPointers(1).onStart(()=>{"worklet";g.value=m.value,h.value=_.value}).onUpdate(e=>{"worklet";u.value<=1||(m.value=g.value+e.translationX,_.value=h.value+e.translationY)}).onEnd(()=>{"worklet";g.value=m.value,h.value=_.value}),[u,m,_,g,h]),y=(0,_react.useMemo)(()=>_reactNativeGestureHandler.Gesture.Tap().numberOfTaps(2).onEnd(()=>{"worklet";(0,_reactNativeReanimated.runOnJS)(x)(),u.value>1?(u.value=(0,_reactNativeReanimated.withSpring)(1,SPRING_CONFIG),m.value=(0,_reactNativeReanimated.withSpring)(0,SPRING_CONFIG),_.value=(0,_reactNativeReanimated.withSpring)(0,SPRING_CONFIG),d.value=1,g.value=0,h.value=0):(u.value=(0,_reactNativeReanimated.withSpring)(s,SPRING_CONFIG),d.value=s)}),[u,d,m,_,g,h,x,s]),S=(0,_react.useMemo)(()=>_reactNativeGestureHandler.Gesture.Race(p,b,y),[p,b,y]),R=(0,_reactNativeReanimated.useAnimatedStyle)(()=>({transform:[{translateX:m.value},{translateY:_.value},{scale:u.value}]}));_react.default.useEffect(()=>{i||v()},[i,v]);const N=e.alt??`Image ${t+1} of ${a}`;return(0,_jsxRuntime.jsx)(_reactNativeGestureHandler.GestureDetector,{gesture:S,children:(0,_jsxRuntime.jsx)(_reactNativeReanimated.default.View,{style:[lightboxImageStyles.container,{width:c.width}],children:(0,_jsxRuntime.jsx)(_reactNativeReanimated.default.Image,{source:e.source,resizeMode:"contain",style:[lightboxImageStyles.image,R],accessibilityLabel:N,accessible:!0})})})},clamp=(e,t,a)=>Math.min(Math.max(e,t),a),buildStyles=e=>_reactNative.StyleSheet.create({container:{width:"100%"},carouselWrap:{width:"100%",position:"relative"},imageWrap:{width:"100%",aspectRatio:16/9,backgroundColor:e.colors.background.secondary,overflow:"hidden",borderRadius:e.radius.md,..._corners.smoothCorners},image:{width:"100%",height:"100%"},thumbnailImage:{width:"100%",height:"100%"},counterPill:{position:"absolute",top:12,alignSelf:"center",paddingHorizontal:e.spacing.md,paddingVertical:e.spacing.xs,borderRadius:e.radius.pill,..._corners.smoothCorners,backgroundColor:"rgba(0,0,0,0.55)"},counterText:{fontSize:e.typography.fontSize.sm,fontWeight:e.typography.fontWeight.semibold}}),buildLightboxStyles=e=>_reactNative.StyleSheet.create({backdrop:{flex:1,backgroundColor:"#000",justifyContent:"center"},counterPill:{position:"absolute",top:48,alignSelf:"center",paddingHorizontal:e.spacing.md,paddingVertical:e.spacing.xs,borderRadius:e.radius.pill,..._corners.smoothCorners,backgroundColor:"rgba(0,0,0,0.6)"},counterText:{fontSize:e.typography.fontSize.sm,fontWeight:e.typography.fontWeight.semibold},closeButton:{position:"absolute",top:44,right:16,width:40,height:40,borderRadius:e.radius.pill,..._corners.smoothCorners,alignItems:"center",justifyContent:"center",backgroundColor:"rgba(0,0,0,0.5)"},captionWrap:{position:"absolute",left:0,right:0,bottom:32,paddingHorizontal:e.spacing.xl},captionText:{color:"#FFFFFF",fontSize:e.typography.fontSize.base,lineHeight:21,textAlign:"center"}}),lightboxImageStyles=_reactNative.StyleSheet.create({container:{flex:1,alignItems:"center",justifyContent:"center"},image:{width:"100%",height:"100%"}});var _default=exports.default=ImageGallery;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.InlineSelect=void 0;var _react=require("react"),_reactNative=require("react-native"),_index=require("../../theme/index.js"),_index2=require("../../utils/index.js"),_Chevron=require("../FieldBase/Chevron.js"),_FieldBase=require("../FieldBase/FieldBase.js"),_OptionSheet=require("../OptionSheet/OptionSheet.js"),_jsxRuntime=require("react/jsx-runtime");const InlineSelect=exports.InlineSelect=(0,_react.forwardRef)((e,t)=>{const{options:i,getOptionLabel:l,getOptionValue:s,getOptionDisabled:a,getOptionDescription:n,getOptionIcon:r,value:c,onChange:o,placeholder:d,label:u,title:p,searchable:x=!1,haptic:_,disabled:b=!1,size:S="md",color:h,chevronColor:m,chevronSize:y,textStyle:g,style:j,optionStyle:v,selectedOptionStyle:f,optionTextStyle:O,selectedOptionTextStyle:C,accessibilityLabel:F,testID:I}=e,R=(0,_index.useTheme)(),k=(0,_react.useMemo)(()=>buildStyles(R),[R]),q=(0,_FieldBase.resolveFieldSize)(R,S),z=(0,_react.useCallback)(e=>l?l(e):e.label??"",[l]),T=(0,_react.useCallback)(e=>s?s(e):e.value,[s]),N=(0,_react.useCallback)(e=>a?a(e):!0===e.disabled,[a]),B=(0,_react.useCallback)(e=>n?n(e):e.description,[n]),L=(0,_react.useCallback)(e=>r?r(e):e.icon,[r]),[D,H]=(0,_react.useState)(!1),P=(0,_react.useMemo)(()=>{if(null!=c)return i.find(e=>T(e)===c)},[i,c,T]),w=(0,_react.useCallback)(e=>c===e,[c]),M=(0,_react.useCallback)(()=>{if(b)return;const e=(0,_index2.resolveHaptic)(_,"selection");e&&(0,_index2.triggerHaptic)(e),H(!0)},[b,_]),V=(0,_react.useCallback)(()=>{H(!1)},[]),$=(0,_react.useCallback)(e=>{if(N(e))return;const t=(0,_index2.resolveHaptic)(_,"selection");t&&(0,_index2.triggerHaptic)(t),o(T(e)),V()},[N,T,o,V,_]),G=b?R.colors.text.disabled:h??R.components.inlineSelect?.color??R.colors.primary,A=void 0!==P?z(P):d??"Select",E=void 0!==P?`Selected: ${z(P)}`:d??"No selection",J=F??`${u??p??"Select"}. ${E}`,K=(0,_jsxRuntime.jsxs)(_reactNative.Pressable,{ref:t,onPress:M,disabled:b,hitSlop:8,accessibilityRole:"button",accessibilityLabel:J,accessibilityState:{disabled:b,expanded:D},"aria-disabled":b,"aria-expanded":D,testID:I,style:({pressed:e})=>[k.trigger,{columnGap:R.spacing.xs,opacity:e&&!b?.6:1},j],children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[k.triggerText,{color:G,fontSize:q.fontSize,...(0,_index.fontFor)(R,"medium")},g],numberOfLines:1,children:A}),(0,_jsxRuntime.jsx)(_Chevron.Chevron,{color:m??G,size:y??q.iconSize,open:D})]});return(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[u?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:k.labelled,children:[(0,_jsxRuntime.jsx)(_FieldBase.FieldLabel,{size:S,children:u}),K]}):K,(0,_jsxRuntime.jsx)(_OptionSheet.OptionSheet,{open:D,onClose:V,title:p,accessibilityLabel:u??p??d??"Options",options:i,labelOf:z,getValue:T,disabledOf:N,descriptionOf:B,iconOf:L,isSelected:w,onSelect:$,searchable:x,optionStyle:v,selectedOptionStyle:f,optionTextStyle:O,selectedOptionTextStyle:C})]})});InlineSelect.displayName="InlineSelect";const buildStyles=e=>_reactNative.StyleSheet.create({labelled:{alignItems:"flex-start"},trigger:{flexDirection:"row",alignItems:"center"},triggerText:{includeFontPadding:!1}});var _default=exports.default=InlineSelect;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.InlineSelect=void 0;var _react=require("react"),_reactNative=require("react-native"),_index=require("../../theme/index.js"),_index2=require("../../utils/index.js"),_Chevron=require("../FieldBase/Chevron.js"),_FieldBase=require("../FieldBase/FieldBase.js"),_OptionSheet=require("../OptionSheet/OptionSheet.js"),_jsxRuntime=require("react/jsx-runtime");const InlineSelect=exports.InlineSelect=(0,_react.forwardRef)((e,t)=>{const{options:i,getOptionLabel:l,getOptionValue:s,getOptionDisabled:a,getOptionDescription:n,getOptionIcon:r,value:c,onChange:o,placeholder:d,label:u,title:p,searchable:x=!1,haptic:_,disabled:b=!1,size:S="md",color:h,chevronColor:m,chevronSize:y,textStyle:g,style:j,optionStyle:v,selectedOptionStyle:O,optionTextStyle:f,selectedOptionTextStyle:C,accessibilityLabel:I,testID:R}=e,F=(0,_index.useTheme)(),k=(0,_react.useMemo)(()=>buildStyles(F),[F]),q=(0,_index.resolveFieldSize)(F,S),T=(0,_react.useCallback)(e=>l?l(e):e.label??"",[l]),N=(0,_react.useCallback)(e=>s?s(e):e.value,[s]),z=(0,_react.useCallback)(e=>a?a(e):!0===e.disabled,[a]),L=(0,_react.useCallback)(e=>n?n(e):e.description,[n]),B=(0,_react.useCallback)(e=>r?r(e):e.icon,[r]),[D,H]=(0,_react.useState)(!1),P=(0,_react.useMemo)(()=>{if(null!=c)return i.find(e=>N(e)===c)},[i,c,N]),w=(0,_react.useCallback)(e=>c===e,[c]),M=(0,_react.useCallback)(()=>{if(b)return;const e=(0,_index2.resolveHaptic)(_,"selection");e&&(0,_index2.triggerHaptic)(e),H(!0)},[b,_]),V=(0,_react.useCallback)(()=>{H(!1)},[]),$=(0,_react.useCallback)(e=>{if(z(e))return;const t=(0,_index2.resolveHaptic)(_,"selection");t&&(0,_index2.triggerHaptic)(t),o(N(e)),V()},[z,N,o,V,_]),G=b?F.colors.text.disabled:h??F.components.inlineSelect?.color??F.colors.primary,A=void 0!==P?T(P):d??"Select",E=void 0!==P?`Selected: ${T(P)}`:d??"No selection",J=I??`${u??p??"Select"}. ${E}`,K=(0,_jsxRuntime.jsxs)(_reactNative.Pressable,{ref:t,onPress:M,disabled:b,hitSlop:8,accessibilityRole:"button",accessibilityLabel:J,accessibilityState:{disabled:b,expanded:D},"aria-disabled":b,"aria-expanded":D,testID:R,style:({pressed:e})=>[k.trigger,{columnGap:F.spacing.xs,opacity:e&&!b?.6:1},j],children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[k.triggerText,{color:G,fontSize:q.text,...(0,_index.fontFor)(F,"medium")},g],numberOfLines:1,children:A}),(0,_jsxRuntime.jsx)(_Chevron.Chevron,{color:m??G,size:y??q.icon,open:D})]});return(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[u?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:k.labelled,children:[(0,_jsxRuntime.jsx)(_FieldBase.FieldLabel,{size:S,children:u}),K]}):K,(0,_jsxRuntime.jsx)(_OptionSheet.OptionSheet,{open:D,onClose:V,title:p,accessibilityLabel:u??p??d??"Options",options:i,labelOf:T,getValue:N,disabledOf:z,descriptionOf:L,iconOf:B,isSelected:w,onSelect:$,searchable:x,optionStyle:v,selectedOptionStyle:O,optionTextStyle:f,selectedOptionTextStyle:C})]})});InlineSelect.displayName="InlineSelect";const buildStyles=e=>_reactNative.StyleSheet.create({labelled:{alignItems:"flex-start"},trigger:{flexDirection:"row",alignItems:"center"},triggerText:{includeFontPadding:!1}});var _default=exports.default=InlineSelect;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.Input=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"),_defaultIcons=require("../AppIcon/defaultIcons.js"),_slotIcon=require("../AppIcon/slotIcon.js"),_index4=require("../Button/index.js"),_FieldBase=require("../FieldBase/FieldBase.js"),_useFloatingLabel=require("../FieldBase/useFloatingLabel.js"),_Notation=require("../Notation/Notation.js"),_jsxRuntime=require("react/jsx-runtime");const multilineMinHeightMap={sm:72,md:92,lg:110},Input=exports.Input=(0,_react.forwardRef)((e,t)=>{const{label:i,help:n,placeholder:o,value:a,onChangeText:r,error:l,helperText:s,type:d="input",secureTextEntry:c=!1,showPasswordToggle:u=!1,disabled:x=!1,multiline:p=!1,leftIcon:f,rightIcon:g,unit:m,unitStyle:_,prefix:v,prefixStyle:h,readOnly:y=!1,action:j,actionStyle:b,size:S="md",variant:N,labelMode:R,required:F=!1,maxLength:w,showCounter:z=!0,textAlign:I,format:T,parse:V,style:k,containerStyle:B,inputStyle:A,labelStyle:C,messageStyle:q,borderRadius:D,onFocus:L,onBlur:H,accessibilityLabel:P,testID:M,editable:E,...O}=e,G=(0,_index2.useTheme)(),W=(0,_react.useMemo)(()=>buildStyles(G),[G]),$=(0,_FieldBase.resolveFieldSize)(G,S),X=multilineMinHeightMap[S],J=Math.round(1.4*$.fontSize),K=N??G.components.input?.defaultVariant??G.components.field?.defaultVariant??"outlined",Q=R??G.components.input?.defaultLabelMode??"top",[U,Y]=(0,_react.useState)(!1),[Z,ee]=(0,_react.useState)(!1),te="password"===d||u||c,ie="password"===d||u,ne="textarea"===d||p,oe=ne?Math.round(.1*$.fontSize):0,ae="string"==typeof a&&a.length>0,re=(0,_FieldBase.hasFieldText)(l),le=!0===l||re,se=(0,_FieldBase.hasFieldText)(s),de=re||!le&&se,ce=(0,_FieldBase.hasFieldText)(i),ue=(0,_FieldBase.hasFieldText)(v),xe=!x&&!1!==E,pe=U||ae||ue,fe=(0,_react.useRef)(null),ge=(0,_react.useMemo)(()=>(0,_index3.mergeRefs)(fe,t),[t]),me=(0,_react.useCallback)(()=>{xe&&fe.current?.focus()},[xe]),ve=ce&&"float"===Q,he=(0,_react.useRef)((0,_index2.createAnimatedValue)(0)).current,ye=(0,_react.useRef)((0,_index2.createAnimatedValue)(de?1:0)).current;(0,_react.useEffect)(()=>{const e=_reactNative.Animated.timing(ye,{toValue:de?1:0,duration:G.motion.duration.fast,easing:_reactNative.Easing.bezier(...G.motion.easing.standard),useNativeDriver:!0});return e.start(),()=>e.stop()},[de,ye,G.motion.duration.fast,G.motion.easing.standard]);const je=(0,_index.useReducedMotion)(),be=G.components.input?.shakeOnError??!1,Se=(0,_react.useRef)(le);(0,_react.useEffect)(()=>{if(!be)return void(Se.current=le);let e;return le&&!Se.current&&(je||((0,_index2.setNativeValue)(he,0),e=_reactNative.Animated.sequence([_reactNative.Animated.timing(he,{toValue:1,duration:50,useNativeDriver:!0}),_reactNative.Animated.timing(he,{toValue:-1,duration:50,useNativeDriver:!0}),_reactNative.Animated.timing(he,{toValue:1,duration:50,useNativeDriver:!0}),_reactNative.Animated.timing(he,{toValue:-1,duration:50,useNativeDriver:!0}),_reactNative.Animated.timing(he,{toValue:0,duration:100,useNativeDriver:!0})]),e.start()),(0,_index3.triggerHaptic)("notificationError")),Se.current=le,()=>e?.stop()},[le,he,be,je]);const Ne=(0,_react.useCallback)(e=>{Y(!0),L?.(e)},[L]),Re=(0,_react.useCallback)(e=>{Y(!1),H?.(e)},[H]),Fe=(0,_react.useCallback)(()=>{(0,_index3.triggerHaptic)("selection"),ee(e=>!e)},[]),we=(0,_react.useMemo)(()=>{const e=G.components.input?.fillColors?.[K];if(!e)return;const t={};return void 0!==e.idleEmpty&&(t.backgroundIdleEmpty=e.idleEmpty),void 0!==e.idleFilled&&(t.backgroundIdleFilled=e.idleFilled),void 0!==e.focus&&(t.backgroundFocused=e.focus),void 0!==e.error&&(t.backgroundError=e.error),void 0!==e.disabled&&(t.backgroundDisabled=e.disabled),Object.keys(t).length>0?t:void 0},[G.components.input?.fillColors,K]),ze=G.colors.field.caret,Ie=D??G.components.input?.borderRadius,Te=G.components.input?.tintLabelOnFocus??!1,Ve=U&&Te?G.colors.field.borderFocused:G.colors.field.label,ke=he.interpolate({inputRange:[-1,0,1],outputRange:[-6,0,6]}),Be=Boolean(g)||Boolean(m)||ie,Ae="underline"===K,Ce=f?$.iconSize+G.spacing.md+1+G.spacing.md:0,qe=(0,_useFloatingLabel.useFloatingLabel)({label:i,enabled:ve,floated:pe,required:F,variant:K,sizeTokens:$,leadingOffset:Ce,trailingOffset:Be?$.iconSize+G.spacing.sm:0,textAlign:I,paddingLeft:Ae?0:$.paddingHorizontal,lineHeight:ne?J:void 0,restNudge:oe,floatTrim:ne?2:0,color:Ve,style:C}),De=(0,_FieldBase.resolveFieldTextStyle)(G,{disabled:x}),Le=De.color,He=De.placeholderColor,Pe=F&&!ce&&!ae&&"string"==typeof o&&o.length>0,Me=le?l:s,Ee=z&&"number"==typeof w&&"string"==typeof a?`${a.length} / ${w}`:null,Oe=le?G.colors.field.message:G.colors.text.secondary,Ge=(0,_Notation.useNotationInk)(q,$.messageFontSize,Oe),We=P??(0,_FieldBase.fieldTextAsString)(i)??o,$e=G.colors.field,Xe=x?$e.iconDisabled:U?$e.iconFocused:$e.icon,Je={focused:U,disabled:x,error:le,color:Xe,size:$.iconSize},renderSlot=e=>(0,_slotIcon.renderSlotIcon)(e,Je),Ke=(()=>{if(ie){const e=(Z?G.icons?.eyeOff:G.icons?.eye)??(Z?_defaultIcons.defaultIcons.eyeOff:_defaultIcons.defaultIcons.eye);return(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:Fe,disabled:!xe,hitSlop:8,accessibilityRole:"button",accessibilityLabel:Z?"Hide password":"Show password",children:e({size:$.iconSize,color:Xe})})}const e=m?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[W.unit,{fontSize:$.fontSize,color:He},_],children:m}):null,t=g?(0,_jsxRuntime.jsx)(_reactNative.View,{children:renderSlot(g)}):null;return e&&t?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:W.trailingRow,children:[e,t]}):e??t})(),Qe=f?(0,_jsxRuntime.jsx)(_reactNative.View,{children:renderSlot(f)}):null,Ue=_reactNative.StyleSheet.flatten(h),Ye=Ue?.fontSize??$.fontSize,Ze=Ue?.color??He,et=(0,_react.useMemo)(()=>({fontSize:Ye,color:Ze}),[Ye,Ze]),tt=ue?"string"==typeof v||"number"==typeof v?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[W.prefix,{fontSize:$.fontSize,color:He,marginRight:G.spacing.xs,lineHeight:ne?J:void 0,paddingTop:ne?oe:void 0},h],children:v}):(0,_jsxRuntime.jsx)(_reactNative.View,{style:[W.prefixNode,{marginRight:G.spacing.xs,minHeight:ne?J:void 0,justifyContent:"center",paddingTop:ne?oe:void 0}],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[W.prefix,{fontSize:$.fontSize,color:He,lineHeight:ne?J:void 0},h],children:(0,_jsxRuntime.jsx)(_Notation.NotationInkContext.Provider,{value:et,children:v})})}):null,it=j?(0,_jsxRuntime.jsx)(_index4.Button,{variant:j.variant??"outline",tone:j.tone??"primary",size:S,title:j.label,leftIcon:j.icon,loading:j.loading,disabled:x||j.disabled,onPress:j.onPress,pressAnimation:!1,testID:j.testID,style:[W.action,{minHeight:$.minHeight,alignSelf:ne?"flex-start":"stretch"},b]}):null;return(0,_jsxRuntime.jsxs)(_reactNative.Animated.View,{style:[W.container,{transform:[{translateX:ke}]},k],children:[ce&&!ve?(0,_jsxRuntime.jsx)(_FieldBase.FieldLabel,{size:S,required:F,help:n,color:Ve,style:C,children:i}):null,(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[W.fieldRow,{columnGap:G.spacing.sm,alignItems:ne?"flex-start":"stretch"}],children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:W.fieldWrapper,children:[(0,_jsxRuntime.jsxs)(_FieldBase.FieldBase,{size:S,variant:K,focused:U,disabled:x,error:le,filled:ae,minHeight:ne?X:void 0,borderRadius:Ie,fillOverrides:we,leading:Qe,leadingDivider:null!=f,paddingLeft:Ae?0:void 0,trailing:Ke,slotAlign:ne?"top":"center",slotLineHeight:ne?J:void 0,topNotch:qe.topNotch,onPress:me,pressFeedback:!1,style:B,children:[tt,(0,_jsxRuntime.jsxs)(_reactNative.View,{style:W.inputWrap,children:[(0,_jsxRuntime.jsx)(_reactNative.TextInput,{ref:ge,style:[W.input,{color:Le,fontSize:$.fontSize,...De.weightStyle,paddingLeft:Ae?0:void 0,minHeight:ne?X-2*$.paddingVertical:void 0,lineHeight:ne?J:void 0,paddingTop:ne?oe:void 0,textAlignVertical:ne?"top":"center"},A],textAlign:I,placeholder:ve&&!pe||Pe?void 0:o,placeholderTextColor:He,value:T&&null!=a?T(a):a,onChangeText:e=>{r&&r(V?V(e):e)},onFocus:Ne,onBlur:Re,editable:xe,readOnly:y,secureTextEntry:te&&!Z,multiline:ne,autoCapitalize:te?"none":void 0,autoCorrect:!te&&void 0,maxLength:w,selectionColor:ze,accessibilityLabel:We,accessibilityState:{disabled:x},"aria-disabled":x,testID:M,...O}),Pe?(0,_jsxRuntime.jsx)(_FieldBase.RequiredPlaceholder,{text:o,color:He,fontSize:$.fontSize,weightStyle:De.weightStyle,align:ne?"top":"center",paddingTop:ne?oe:void 0,textAlign:I}):null]})]}),qe.node]}),it]}),de||Ee?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[W.footerRow,{marginTop:$.messageGap}],children:[de?(0,_jsxRuntime.jsxs)(_reactNative.Animated.View,{style:[W.messageRow,{columnGap:G.spacing.xs+2,opacity:ye}],accessibilityLiveRegion:le?"polite":"none",children:[le?(0,_jsxRuntime.jsx)(_FieldBase.FieldErrorGlyph,{size:$.messageFontSize,color:Oe}):null,(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[W.messageText,{color:Oe,fontSize:$.messageFontSize,...(0,_index2.fontFor)(G,"normal")},q],children:(0,_jsxRuntime.jsx)(_Notation.NotationInkContext.Provider,{value:Ge,children:Me})})]}):(0,_jsxRuntime.jsx)(_reactNative.View,{style:W.footerSpacer}),Ee?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[W.counterText,{color:G.colors.text.tertiary,fontSize:$.messageFontSize,...(0,_index2.fontFor)(G,"normal")}],children:Ee}):null]}):null]})});Input.displayName="Input";const buildStyles=e=>_reactNative.StyleSheet.create({container:{width:"100%"},fieldRow:{flexDirection:"row"},fieldWrapper:{position:"relative",overflow:"visible",flex:1},action:{flexShrink:0},input:{padding:0,margin:0,includeFontPadding:!1},prefix:{flexShrink:0,includeFontPadding:!1},prefixNode:{flexShrink:0},inputWrap:{flex:1,alignSelf:"stretch",justifyContent:"center"},unit:{includeFontPadding:!1},trailingRow:{flexDirection:"row",alignItems:"center",columnGap:8},footerRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",columnGap:8},footerSpacer:{flex:1},messageRow:{flex:1,flexDirection:"row",alignItems:"center"},messageText:{flexShrink:1,includeFontPadding:!1},counterText:{flexShrink:0,includeFontPadding:!1}});var _default=exports.default=Input;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.Input=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"),_defaultIcons=require("../AppIcon/defaultIcons.js"),_slotIcon=require("../AppIcon/slotIcon.js"),_index4=require("../Button/index.js"),_FieldBase=require("../FieldBase/FieldBase.js"),_useFloatingLabel=require("../FieldBase/useFloatingLabel.js"),_Notation=require("../Notation/Notation.js"),_jsxRuntime=require("react/jsx-runtime");const multilineMinHeightMap={sm:72,md:92,lg:110},Input=exports.Input=(0,_react.forwardRef)((e,t)=>{const{label:i,help:n,placeholder:a,value:o,onChangeText:r,error:l,helperText:s,type:d="input",secureTextEntry:c=!1,showPasswordToggle:u=!1,disabled:x=!1,multiline:p=!1,leftIcon:g,rightIcon:f,unit:m,unitStyle:_,prefix:v,prefixStyle:h,readOnly:y=!1,action:j,actionStyle:b,size:N="md",variant:R,labelMode:F,required:S=!1,maxLength:w,showCounter:I=!0,textAlign:T,format:V,parse:k,style:A,containerStyle:B,inputStyle:z,labelStyle:C,messageStyle:q,borderRadius:D,onFocus:L,onBlur:H,accessibilityLabel:P,testID:M,editable:E,...O}=e,G=(0,_index2.useTheme)(),W=(0,_react.useMemo)(()=>buildStyles(G),[G]),X=(0,_index2.resolveFieldSize)(G,N),$=multilineMinHeightMap[N],Y=Math.round(1.4*X.text),J=R??G.components.input?.defaultVariant??G.components.field?.defaultVariant??"outlined",K=F??G.components.input?.defaultLabelMode??"top",[Q,U]=(0,_react.useState)(!1),[Z,ee]=(0,_react.useState)(!1),te="password"===d||u||c,ie="password"===d||u,ne="textarea"===d||p,ae=ne?Math.round(.1*X.text):0,oe="string"==typeof o&&o.length>0,re=(0,_FieldBase.hasFieldText)(l),le=!0===l||re,se=(0,_FieldBase.hasFieldText)(s),de=re||!le&&se,ce=(0,_FieldBase.hasFieldText)(i),ue=(0,_FieldBase.hasFieldText)(v),xe=!x&&!1!==E,pe=Q||oe||ue,ge=(0,_react.useRef)(null),fe=(0,_react.useMemo)(()=>(0,_index3.mergeRefs)(ge,t),[t]),me=(0,_react.useCallback)(()=>{xe&&ge.current?.focus()},[xe]),ve=ce&&"float"===K,he=(0,_react.useRef)((0,_index2.createAnimatedValue)(0)).current,ye=(0,_react.useRef)((0,_index2.createAnimatedValue)(de?1:0)).current;(0,_react.useEffect)(()=>{const e=_reactNative.Animated.timing(ye,{toValue:de?1:0,duration:G.motion.duration.fast,easing:_reactNative.Easing.bezier(...G.motion.easing.standard),useNativeDriver:!0});return e.start(),()=>e.stop()},[de,ye,G.motion.duration.fast,G.motion.easing.standard]);const je=(0,_index.useReducedMotion)(),be=G.components.input?.shakeOnError??!1,Ne=(0,_react.useRef)(le);(0,_react.useEffect)(()=>{if(!be)return void(Ne.current=le);let e;return le&&!Ne.current&&(je||((0,_index2.setNativeValue)(he,0),e=_reactNative.Animated.sequence([_reactNative.Animated.timing(he,{toValue:1,duration:50,useNativeDriver:!0}),_reactNative.Animated.timing(he,{toValue:-1,duration:50,useNativeDriver:!0}),_reactNative.Animated.timing(he,{toValue:1,duration:50,useNativeDriver:!0}),_reactNative.Animated.timing(he,{toValue:-1,duration:50,useNativeDriver:!0}),_reactNative.Animated.timing(he,{toValue:0,duration:100,useNativeDriver:!0})]),e.start()),(0,_index3.triggerHaptic)("notificationError")),Ne.current=le,()=>e?.stop()},[le,he,be,je]);const Re=(0,_react.useCallback)(e=>{U(!0),L?.(e)},[L]),Fe=(0,_react.useCallback)(e=>{U(!1),H?.(e)},[H]),Se=(0,_react.useCallback)(()=>{(0,_index3.triggerHaptic)("selection"),ee(e=>!e)},[]),we=(0,_react.useMemo)(()=>{const e=G.components.input?.fillColors?.[J];if(!e)return;const t={};return void 0!==e.idleEmpty&&(t.backgroundIdleEmpty=e.idleEmpty),void 0!==e.idleFilled&&(t.backgroundIdleFilled=e.idleFilled),void 0!==e.focus&&(t.backgroundFocused=e.focus),void 0!==e.error&&(t.backgroundError=e.error),void 0!==e.disabled&&(t.backgroundDisabled=e.disabled),Object.keys(t).length>0?t:void 0},[G.components.input?.fillColors,J]),Ie=G.colors.field.caret,Te=D??X.radius,Ve=G.components.input?.tintLabelOnFocus??!1,ke=Q&&Ve?G.colors.field.borderFocused:G.colors.field.label,Ae=he.interpolate({inputRange:[-1,0,1],outputRange:[-6,0,6]}),Be=Boolean(f)||Boolean(m)||ie,ze="underline"===J,Ce=g?X.icon+G.spacing.md+1+G.spacing.md:0,qe=(0,_useFloatingLabel.useFloatingLabel)({label:i,enabled:ve,floated:pe,required:S,variant:J,sizeTokens:X,leadingOffset:Ce,trailingOffset:Be?X.icon+G.spacing.sm:0,textAlign:T,paddingLeft:ze?G.spacing.none:X.paddingX,lineHeight:ne?Y:void 0,restNudge:ae,floatTrim:ne?2:0,color:ke,style:C}),De=(0,_FieldBase.resolveFieldTextStyle)(G,{disabled:x}),Le=De.color,He=De.placeholderColor,Pe=S&&!ce&&!oe&&"string"==typeof a&&a.length>0,Me=le?l:s,Ee=I&&"number"==typeof w&&"string"==typeof o?`${o.length} / ${w}`:null,Oe=le?G.colors.field.message:G.colors.text.secondary,Ge=(0,_Notation.useNotationInk)(q,X.messageText,Oe),We=P??(0,_FieldBase.fieldTextAsString)(i)??a,Xe=G.colors.field,$e=x?Xe.iconDisabled:Q?Xe.iconFocused:Xe.icon,Ye={focused:Q,disabled:x,error:le,color:$e,size:X.icon},renderSlot=e=>(0,_slotIcon.renderSlotIcon)(e,Ye),Je=(()=>{if(ie){const e=(Z?G.icons?.eyeOff:G.icons?.eye)??(Z?_defaultIcons.defaultIcons.eyeOff:_defaultIcons.defaultIcons.eye);return(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:Se,disabled:!xe,hitSlop:8,accessibilityRole:"button",accessibilityLabel:Z?"Hide password":"Show password",children:e({size:X.icon,color:$e})})}const e=m?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[W.unit,{fontSize:X.text,color:He},_],children:m}):null,t=f?(0,_jsxRuntime.jsx)(_reactNative.View,{children:renderSlot(f)}):null;return e&&t?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:W.trailingRow,children:[e,t]}):e??t})(),Ke=g?(0,_jsxRuntime.jsx)(_reactNative.View,{children:renderSlot(g)}):null,Qe=_reactNative.StyleSheet.flatten(h),Ue=Qe?.fontSize??X.text,Ze=Qe?.color??He,et=(0,_react.useMemo)(()=>({fontSize:Ue,color:Ze}),[Ue,Ze]),tt=ue?"string"==typeof v||"number"==typeof v?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[W.prefix,{fontSize:X.text,color:He,marginRight:G.spacing.xs,lineHeight:ne?Y:void 0,paddingTop:ne?ae:void 0},h],children:v}):(0,_jsxRuntime.jsx)(_reactNative.View,{style:[W.prefixNode,{marginRight:G.spacing.xs,minHeight:ne?Y:void 0,justifyContent:"center",paddingTop:ne?ae:void 0}],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[W.prefix,{fontSize:X.text,color:He,lineHeight:ne?Y:void 0},h],children:(0,_jsxRuntime.jsx)(_Notation.NotationInkContext.Provider,{value:et,children:v})})}):null,it=j?(0,_jsxRuntime.jsx)(_index4.Button,{variant:j.variant??"outline",tone:j.tone??"primary",size:N,title:j.label,leftIcon:j.icon,loading:j.loading,disabled:x||j.disabled,onPress:j.onPress,pressAnimation:!1,testID:j.testID,style:[W.action,{minHeight:X.minHeight,alignSelf:ne?"flex-start":"stretch"},b]}):null;return(0,_jsxRuntime.jsxs)(_reactNative.Animated.View,{style:[W.container,{transform:[{translateX:Ae}]},A],children:[ce&&!ve?(0,_jsxRuntime.jsx)(_FieldBase.FieldLabel,{size:N,required:S,help:n,color:ke,style:C,children:i}):null,(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[W.fieldRow,{columnGap:G.spacing.sm,alignItems:ne?"flex-start":"stretch"}],children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:W.fieldWrapper,children:[(0,_jsxRuntime.jsxs)(_FieldBase.FieldBase,{size:N,variant:J,focused:Q,disabled:x,error:le,filled:oe,minHeight:ne?$:void 0,borderRadius:Te,fillOverrides:we,leading:Ke,leadingDivider:null!=g,paddingLeft:ze?G.spacing.none:void 0,trailing:Je,slotAlign:ne?"top":"center",slotLineHeight:ne?Y:void 0,topNotch:qe.topNotch,onPress:me,pressFeedback:!1,style:B,children:[tt,(0,_jsxRuntime.jsxs)(_reactNative.View,{style:W.inputWrap,children:[(0,_jsxRuntime.jsx)(_reactNative.TextInput,{ref:fe,style:[W.input,{color:Le,fontSize:X.text,...De.weightStyle,paddingLeft:ze?G.spacing.none:void 0,minHeight:ne?$-2*X.paddingY:void 0,lineHeight:ne?Y:void 0,paddingTop:ne?ae:void 0,textAlignVertical:ne?"top":"center"},z],textAlign:T,placeholder:ve&&!pe||Pe?void 0:a,placeholderTextColor:He,value:V&&null!=o?V(o):o,onChangeText:e=>{r&&r(k?k(e):e)},onFocus:Re,onBlur:Fe,editable:xe,readOnly:y,secureTextEntry:te&&!Z,multiline:ne,autoCapitalize:te?"none":void 0,autoCorrect:!te&&void 0,maxLength:w,selectionColor:Ie,accessibilityLabel:We,accessibilityState:{disabled:x},"aria-disabled":x,testID:M,...O}),Pe?(0,_jsxRuntime.jsx)(_FieldBase.RequiredPlaceholder,{text:a,color:He,fontSize:X.text,weightStyle:De.weightStyle,align:ne?"top":"center",paddingTop:ne?ae:void 0,textAlign:T}):null]})]}),qe.node]}),it]}),de||Ee?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[W.footerRow,{marginTop:X.messageGap}],children:[de?(0,_jsxRuntime.jsxs)(_reactNative.Animated.View,{style:[W.messageRow,{columnGap:G.spacing.xs,opacity:ye}],accessibilityLiveRegion:le?"polite":"none",children:[le?(0,_jsxRuntime.jsx)(_FieldBase.FieldErrorGlyph,{size:X.messageText,color:Oe}):null,(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[W.messageText,{color:Oe,fontSize:X.messageText,...(0,_index2.fontFor)(G,"normal")},q],children:(0,_jsxRuntime.jsx)(_Notation.NotationInkContext.Provider,{value:Ge,children:Me})})]}):(0,_jsxRuntime.jsx)(_reactNative.View,{style:W.footerSpacer}),Ee?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[W.counterText,{color:G.colors.text.tertiary,fontSize:X.messageText,...(0,_index2.fontFor)(G,"normal")}],children:Ee}):null]}):null]})});Input.displayName="Input";const buildStyles=e=>_reactNative.StyleSheet.create({container:{width:"100%"},fieldRow:{flexDirection:"row"},fieldWrapper:{position:"relative",overflow:"visible",flex:1},action:{flexShrink:0},input:{padding:e.spacing.none,margin:e.spacing.none,includeFontPadding:!1},prefix:{flexShrink:0,includeFontPadding:!1},prefixNode:{flexShrink:0},inputWrap:{flex:1,alignSelf:"stretch",justifyContent:"center"},unit:{includeFontPadding:!1},trailingRow:{flexDirection:"row",alignItems:"center",columnGap:e.spacing.sm},footerRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",columnGap:e.spacing.sm},footerSpacer:{flex:1},messageRow:{flex:1,flexDirection:"row",alignItems:"center"},messageText:{flexShrink:1,includeFontPadding:!1},counterText:{flexShrink:0,includeFontPadding:!1}});var _default=exports.default=Input;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.ListItem=void 0;var _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("function"==typeof WeakMap)var i=new WeakMap,s=new WeakMap;return(_interopRequireWildcard=function(e,t){if(!t&&e&&e.__esModule)return e;var n,r,l={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return l;if(n=t?s:i){if(n.has(e))return n.get(e);n.set(e,l)}for(const t in e)"default"!==t&&{}.hasOwnProperty.call(e,t)&&((r=(n=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,t))&&(r.get||r.set)?n(l,t,r):l[t]=e[t]);return l})(e,t)}const SIZE_FALLBACK={sm:{paddingVertical:"sm",titleFontSize:"sm",subtitleFontSize:"xs",minHeight:44},md:{paddingVertical:"md",titleFontSize:"base",subtitleFontSize:"sm",minHeight:56},lg:{paddingVertical:"lg",titleFontSize:"lg",subtitleFontSize:"sm",minHeight:72}},sizeFor=(e,t)=>{const i={...SIZE_FALLBACK[t],...e.components.listItem?.[t]??{}};return{paddingVertical:e.spacing[i.paddingVertical],titleSize:e.typography.fontSize[i.titleFontSize],subtitleSize:e.typography.fontSize[i.subtitleFontSize],minHeight:i.minHeight}},Chevron=({color:e})=>{const t=(0,_index.useTheme)();return(0,_jsxRuntime.jsx)(_jsxRuntime.Fragment,{children:(t.icons?.chevronRight??_defaultIcons.defaultIcons.chevronRight)({size:20,color:e})})},BADGE_SIZE={sm:"sm",md:"md",lg:"lg"},RIGHT_BELOW_FONT_SCALE=1.2,DEFAULT_BOX_SIZE=20,SelectionBox=({checked:e,disabled:t})=>{const i=(0,_index.useTheme)(),s=i.components.checkbox?.md?.boxSize??20,n=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.colors.border.width,borderRadius:i.radius.xs,..._corners.smoothCorners,borderColor:e?i.colors.primary:i.colors.border.primary,backgroundColor:e?i.colors.primary:t?i.colors.surface.disabled:"transparent"},children:e?(0,_jsxRuntime.jsx)(_reactNativeSvg.default,{width:n,height:n,viewBox:"0 0 24 24",children:(0,_jsxRuntime.jsx)(_reactNativeSvg.Path,{d:"M5 12.5l4.5 4.5L19 7.5",stroke:i.colors.onPrimary,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:n,description:r,children:l,titleLines:o=1,subtitleLines:a=1,left:c,icon:d,iconTone:u="primary",right:m,rightPlacement:x="auto",selectable:h=!1,checked:_=!1,onCheckedChange:g,actions:p,onPress:j,haptic:y,selected:b=!1,disabled:f=!1,size:S="md",divider:v=!1,chevron:R=!1,leftActions:w,rightActions:I,contextMenu:L,accessibilityLabel:k,accessibilityHint:N,style:z,containerStyle:V,titleStyle:F,subtitleStyle:A,descriptionStyle:C,leftSlotStyle:q,rightSlotStyle:B,testID:P}=e,D=(0,_index.useTheme)(),H=(0,_react.useMemo)(()=>sizeFor(D,S),[D,S]),M=stylesFor(D),{fontScale:W}=(0,_reactNative.useWindowDimensions)(),T=!!m&&("below"===x||"auto"===x&&W>1.2),E=(0,_useContextMenu.useContextMenu)(f?void 0:L,{haptic:y||!1,testID:P}),O=(0,_react.useMemo)(()=>(0,_mergeRefs.mergeRefs)(t,E.hostRef),[t,E.hostRef]),G=h||!!j,Z=G||E.enabled,U=Z&&!f,{style:K,pressIn:X,pressOut:J}=(0,_usePressAnimation.usePressAnimation)({enabled:U}),Q=(0,_useFlickGuard.useFlickGuard)(),Y=k??("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[S]})),ee=h?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:M.selectionLead,children:[(0,_jsxRuntime.jsx)(SelectionBox,{checked:_,disabled:f}),$?(0,_jsxRuntime.jsx)(_reactNative.View,{style:M.selectionLeadContent,children:$}):null]}):$,te=null!=p&&!1!==p&&!(Array.isArray(p)&&0===p.length),ie=v&&!te,se=(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[M.row,{paddingVertical:H.paddingVertical,minHeight:H.minHeight,backgroundColor:b?D.colors.surface.selected:"transparent"},ie?M.divider:null,f?M.disabled:null,V],children:[ee?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[M.leftSlot,q],children:ee}):null,(0,_jsxRuntime.jsxs)(_reactNative.View,{style:M.middle,children:[null==i||isText(i)?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[M.title,{fontSize:H.titleSize,...(0,_index.fontFor)(D,"medium"),color:f?D.colors.text.disabled:D.colors.text.primary},F],numberOfLines:o,children:i??" "}):i,null==n||""===n?null:isText(n)?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[M.subtitle,{fontSize:H.subtitleSize,color:f?D.colors.text.disabled:D.colors.text.secondary},A],numberOfLines:a,children:n}):n,r?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[M.description,{fontSize:H.subtitleSize,color:f?D.colors.text.disabled:D.colors.text.tertiary},C],numberOfLines:2,children:r}):null,null!=l&&!1!==l?(0,_jsxRuntime.jsx)(_reactNative.View,{style:M.body,children:l}):null,T?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[M.rightBelow,B],children:m}):null]}),m&&!T||R?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[M.rightSlot,T?null:B],children:[T?null:m,R?(0,_jsxRuntime.jsx)(_reactNative.View,{style:m&&!T?M.chevronWithRight:null,children:(0,_jsxRuntime.jsx)(Chevron,{color:f?D.colors.text.disabled:D.colors.text.tertiary})}):null]}):null]}),ne=Z?(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:[K,z],children:(0,_jsxRuntime.jsx)(_reactNative.Pressable,{ref:O,onPress:e=>{U&&G&&!Q.isFlick(e)&&(y&&(0,_hapticUtils.triggerHaptic)(y),h?g?.(!_):j?.(e))},onPressIn:e=>{Q.onPressIn(e),X()},onPressOut:J,disabled:!U,accessibilityRole:h?"checkbox":j?"button":void 0,accessibilityLabel:Y,accessibilityHint:N,accessibilityState:h?{checked:_,disabled:!U}:{selected:b,disabled:!U},"aria-disabled":!U,...h?{"aria-checked":_}:{"aria-selected":b},testID:P,android_ripple:{color:D.colors.surface.pressed,borderless:!1},style:({pressed:e})=>e?M.pressed:null,...E.hostProps,children:se})}):(0,_jsxRuntime.jsx)(_reactNative.View,{ref:t,accessibilityRole:"none",accessibilityLabel:Y,accessibilityHint:N,accessibilityState:{selected:b,disabled:f},"aria-selected":b,"aria-disabled":f,testID:P,style:z,children:se}),re=w&&w.length>0||I&&I.length>0,le=te?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[b?{backgroundColor:D.colors.surface.selected}:null,v?M.divider:null],children:[ne,(0,_jsxRuntime.jsx)(_reactNative.View,{style:M.actions,children:renderActions(p)})]}):ne,oe=re?(0,_jsxRuntime.jsx)(_index5.Swipeable,{leftActions:w,rightActions:I,accessibilityLabel:Y,children:le}):le;return s?(0,_jsxRuntime.jsx)(ListItemSkeleton,{...e}):E.enabled?(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[oe,E.renderSurface((0,_jsxRuntime.jsx)(_reactNative.View,{style:M.preview,children:se}))]}):oe}));ListItem.displayName="ListItem";const ListItemSkeleton=({subtitle:e,description:t,left:i,icon:s,right:n,chevron:r,size:l="md",containerStyle:o,style:a})=>{const c=(0,_index.useTheme)(),d=sizeFor(c,l),u=Math.round(1.15*d.titleSize),m=Math.round(1.15*d.subtitleSize);return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[{flexDirection:"row",alignItems:"center",paddingHorizontal:c.spacing.md,paddingVertical:d.paddingVertical,minHeight:d.minHeight},o,a],children:[void 0!==i||void 0!==s?(0,_jsxRuntime.jsx)(_reactNative.View,{style:{marginRight:c.spacing.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.spacing.xs}}),void 0!==e?(0,_jsxRuntime.jsx)(_index4.Skeleton,{shape:"text",width:"50%",height:m,style:void 0!==t?{marginBottom:c.spacing.xs}:void 0}):null,void 0!==t?(0,_jsxRuntime.jsx)(_index4.Skeleton,{shape:"text",width:"85%",height:m}):null]}),void 0!==n||r?(0,_jsxRuntime.jsx)(_reactNative.View,{style:{marginLeft:c.spacing.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.spacing.md},divider:{borderBottomWidth:_reactNative.StyleSheet.hairlineWidth,borderBottomColor:e.colors.border.primary},pressed:{backgroundColor:e.colors.surface.pressed},disabled:{opacity:.55},leftSlot:{marginRight:e.spacing.md,alignItems:"center",justifyContent:"center"},middle:{flex:1,flexDirection:"column",justifyContent:"center"},selectionLead:{flexDirection:"row",alignItems:"center"},selectionLeadContent:{marginLeft:e.spacing.sm},body:{marginTop:e.spacing.xs},rightBelow:{alignSelf:"flex-start",flexDirection:"row",alignItems:"center",marginTop:e.spacing.xs},rightSlot:{marginLeft:e.spacing.md,alignItems:"center",justifyContent:"center",flexDirection:"row"},actions:{flexDirection:"row",flexWrap:"wrap",gap:e.spacing.sm,paddingHorizontal:e.spacing.md,paddingBottom:e.spacing.md},chevronWithRight:{marginLeft:e.spacing.xs},preview:{flex:1,backgroundColor:e.colors.background.elevated,borderRadius:e.radius.md,..._corners.smoothCorners,overflow:"hidden"},title:{letterSpacing:e.typography.letterSpacing.normal},subtitle:{marginTop:2,...(0,_index.fontFor)(e,"normal")},description:{marginTop:2,...(0,_index.fontFor)(e,"normal")}}),stylesFor=(0,_themeStyles.themeStyles)(buildStyles);var _default=exports.default=ListItem;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.ListItem=void 0;var _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("function"==typeof WeakMap)var i=new WeakMap,s=new WeakMap;return(_interopRequireWildcard=function(e,t){if(!t&&e&&e.__esModule)return e;var n,r,l={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return l;if(n=t?s:i){if(n.has(e))return n.get(e);n.set(e,l)}for(const t in e)"default"!==t&&{}.hasOwnProperty.call(e,t)&&((r=(n=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,t))&&(r.get||r.set)?n(l,t,r):l[t]=e[t]);return l})(e,t)}const Chevron=({color:e})=>{const t=(0,_index.useTheme)();return(0,_jsxRuntime.jsx)(_jsxRuntime.Fragment,{children:(t.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").boxSize,n=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.colors.border.width,borderRadius:i.radius.sm,..._corners.smoothCorners,borderColor:e?i.colors.primary:i.colors.border.primary,backgroundColor:e?i.colors.primary:t?i.colors.surface.disabled:"transparent"},children:e?(0,_jsxRuntime.jsx)(_reactNativeSvg.default,{width:n,height:n,viewBox:"0 0 24 24",children:(0,_jsxRuntime.jsx)(_reactNativeSvg.Path,{d:"M5 12.5l4.5 4.5L19 7.5",stroke:i.colors.onPrimary,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:n,description:r,children:l,titleLines:o=1,subtitleLines:a=1,left:c,icon:d,iconTone:u="primary",right:x,rightPlacement:m="auto",selectable:_=!1,checked:h=!1,onCheckedChange:g,actions:p,onPress:j,haptic:y,selected:b=!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:T,rightSlotStyle:B,testID:D}=e,M=(0,_index.useTheme)(),W=(0,_react.useMemo)(()=>(0,_index.resolveListItemSize)(M,v),[M,v]),z=stylesFor(M),{fontScale:F}=(0,_reactNative.useWindowDimensions)(),H=!!x&&("below"===m||"auto"===m&&F>1.2),O=(0,_useContextMenu.useContextMenu)(f?void 0:k,{haptic:y||!1,testID:D}),E=(0,_react.useMemo)(()=>(0,_mergeRefs.mergeRefs)(t,O.hostRef),[t,O.hostRef]),G=_||!!j,U=G||O.enabled,Y=U&&!f,{style:Z,pressIn:J,pressOut:K}=(0,_usePressAnimation.usePressAnimation)({enabled:Y}),Q=(0,_useFlickGuard.useFlickGuard)(),X=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=_?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:z.selectionLead,children:[(0,_jsxRuntime.jsx)(SelectionBox,{checked:h,disabled:f}),$?(0,_jsxRuntime.jsx)(_reactNative.View,{style:z.selectionLeadContent,children:$}):null]}):$,te=null!=p&&!1!==p&&!(Array.isArray(p)&&0===p.length),ie=R&&!te,se=(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[z.row,{paddingVertical:W.paddingY,minHeight:W.minHeight,backgroundColor:b?M.colors.surface.selected:"transparent"},ie?z.divider:null,f?z.disabled:null,A],children:[ee?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[z.leftSlot,T],children:ee}):null,(0,_jsxRuntime.jsxs)(_reactNative.View,{style:z.middle,children:[null==i||isText(i)?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[z.title,{fontSize:W.titleText,...(0,_index.fontFor)(M,"medium"),color:f?M.colors.text.disabled:M.colors.text.primary},V],numberOfLines:o,children:i??" "}):i,null==n||""===n?null:isText(n)?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[z.subtitle,{fontSize:W.subtitleText,color:f?M.colors.text.disabled:M.colors.text.secondary},q],numberOfLines:a,children:n}):n,r?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[z.description,{fontSize:W.subtitleText,color:f?M.colors.text.disabled:M.colors.text.tertiary},P],numberOfLines:2,children:r}):null,null!=l&&!1!==l?(0,_jsxRuntime.jsx)(_reactNative.View,{style:z.body,children:l}):null,H?(0,_jsxRuntime.jsx)(_reactNative.View,{style:[z.rightBelow,B],children:x}):null]}),x&&!H||S?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[z.rightSlot,H?null:B],children:[H?null:x,S?(0,_jsxRuntime.jsx)(_reactNative.View,{style:x&&!H?z.chevronWithRight:null,children:(0,_jsxRuntime.jsx)(Chevron,{color:f?M.colors.text.disabled:M.colors.text.tertiary})}):null]}):null]}),ne=U?(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:[Z,C],children:(0,_jsxRuntime.jsx)(_reactNative.Pressable,{ref:E,onPress:e=>{Y&&G&&!Q.isFlick(e)&&(y&&(0,_hapticUtils.triggerHaptic)(y),_?g?.(!h):j?.(e))},onPressIn:e=>{Q.onPressIn(e),J()},onPressOut:K,disabled:!Y,accessibilityRole:_?"checkbox":j?"button":void 0,accessibilityLabel:X,accessibilityHint:N,accessibilityState:_?{checked:h,disabled:!Y}:{selected:b,disabled:!Y},"aria-disabled":!Y,..._?{"aria-checked":h}:{"aria-selected":b},testID:D,android_ripple:{color:M.colors.surface.pressed,borderless:!1},style:({pressed:e})=>e?z.pressed:null,...O.hostProps,children:se})}):(0,_jsxRuntime.jsx)(_reactNative.View,{ref:t,accessibilityRole:"none",accessibilityLabel:X,accessibilityHint:N,accessibilityState:{selected:b,disabled:f},"aria-selected":b,"aria-disabled":f,testID:D,style:C,children:se}),re=w&&w.length>0||I&&I.length>0,le=te?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[b?{backgroundColor:M.colors.surface.selected}:null,R?z.divider:null],children:[ne,(0,_jsxRuntime.jsx)(_reactNative.View,{style:z.actions,children:renderActions(p)})]}):ne,oe=re?(0,_jsxRuntime.jsx)(_index5.Swipeable,{leftActions:w,rightActions:I,accessibilityLabel:X,children:le}):le;return s?(0,_jsxRuntime.jsx)(ListItemSkeleton,{...e}):O.enabled?(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[oe,O.renderSurface((0,_jsxRuntime.jsx)(_reactNative.View,{style:z.preview,children:se}))]}):oe}));ListItem.displayName="ListItem";const ListItemSkeleton=({subtitle:e,description:t,left:i,icon:s,right:n,chevron:r,size:l="md",containerStyle:o,style:a})=>{const c=(0,_index.useTheme)(),d=(0,_index.resolveListItemSize)(c,l),u=Math.round(1.15*d.titleText),x=Math.round(1.15*d.subtitleText);return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[{flexDirection:"row",alignItems:"center",paddingHorizontal:c.spacing.md,paddingVertical:d.paddingY,minHeight:d.minHeight},o,a],children:[void 0!==i||void 0!==s?(0,_jsxRuntime.jsx)(_reactNative.View,{style:{marginRight:c.spacing.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.spacing.xs}}),void 0!==e?(0,_jsxRuntime.jsx)(_index4.Skeleton,{shape:"text",width:"50%",height:x,style:void 0!==t?{marginBottom:c.spacing.xs}:void 0}):null,void 0!==t?(0,_jsxRuntime.jsx)(_index4.Skeleton,{shape:"text",width:"85%",height:x}):null]}),void 0!==n||r?(0,_jsxRuntime.jsx)(_reactNative.View,{style:{marginLeft:c.spacing.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.spacing.md},divider:{borderBottomWidth:_reactNative.StyleSheet.hairlineWidth,borderBottomColor:e.colors.border.primary},pressed:{backgroundColor:e.colors.surface.pressed},disabled:{opacity:.55},leftSlot:{marginRight:e.spacing.md,alignItems:"center",justifyContent:"center"},middle:{flex:1,flexDirection:"column",justifyContent:"center"},selectionLead:{flexDirection:"row",alignItems:"center"},selectionLeadContent:{marginLeft:e.spacing.sm},body:{marginTop:e.spacing.xs},rightBelow:{alignSelf:"flex-start",flexDirection:"row",alignItems:"center",marginTop:e.spacing.xs},rightSlot:{marginLeft:e.spacing.md,alignItems:"center",justifyContent:"center",flexDirection:"row"},actions:{flexDirection:"row",flexWrap:"wrap",gap:e.spacing.sm,paddingHorizontal:e.spacing.md,paddingBottom:e.spacing.md},chevronWithRight:{marginLeft:e.spacing.xs},preview:{flex:1,backgroundColor:e.colors.background.elevated,borderRadius:e.radius.md,..._corners.smoothCorners,overflow:"hidden"},title:{letterSpacing:e.typography.letterSpacing.normal},subtitle:{marginTop:e.spacing.xxs,...(0,_index.fontFor)(e,"normal")},description:{marginTop:e.spacing.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.Markdown=void 0;var _react=require("react"),_reactNative=require("react-native"),_index=require("../../theme/index.js"),_corners=require("../../utils/corners.js"),_index2=require("../Skeleton/index.js"),_parse=require("./parse.js"),_jsxRuntime=require("react/jsx-runtime");const renderInline=(e,t,r,i="i")=>e.map((e,n)=>{const s=`${i}-${n}`;switch(e.type){case"text":return(0,_jsxRuntime.jsx)(_reactNative.Text,{children:e.value},s);case"strong":return(0,_jsxRuntime.jsx)(_reactNative.Text,{style:{fontWeight:t.typography.fontWeight.bold},children:renderInline(e.children,t,r,s)},s);case"em":return(0,_jsxRuntime.jsx)(_reactNative.Text,{style:{fontStyle:"italic"},children:renderInline(e.children,t,r,s)},s);case"strike":return(0,_jsxRuntime.jsx)(_reactNative.Text,{style:{textDecorationLine:"line-through"},children:renderInline(e.children,t,r,s)},s);case"code":return(0,_jsxRuntime.jsx)(_reactNative.Text,{style:{fontFamily:MONO,backgroundColor:t.colors.background.secondary,color:t.colors.text.primary},children:e.value},s);case"link":return(0,_jsxRuntime.jsx)(_reactNative.Text,{accessibilityRole:"link",onPress:()=>r(e.href),style:{color:t.colors.text.link,textDecorationLine:"underline"},children:renderInline(e.children,t,r,s)},s);default:return null}}),MONO=_reactNative.Platform.select({ios:"Menlo",android:"monospace",default:"monospace"}),HEADING_SCALE={1:"3xl",2:"2xl",3:"xl",4:"lg",5:"base",6:"sm"},Markdown=({children:e,onLinkPress:t,loading:r=!1,style:i,textStyle:n,testID:s})=>{const o=(0,_index.useTheme)(),l=(0,_react.useMemo)(()=>createStyles(o),[o]),a=(0,_react.useMemo)(()=>(0,_parse.parseMarkdown)(e??""),[e]),handleLink=e=>{t?t(e):_reactNative.Linking.openURL(e).catch(()=>{})};return r?(0,_jsxRuntime.jsx)(MarkdownSkeleton,{style:i,testID:s}):0===a.length?null:(0,_jsxRuntime.jsx)(_reactNative.View,{style:i,testID:s,children:a.map((e,t)=>(0,_jsxRuntime.jsx)(MarkdownBlock,{block:e,theme:o,styles:l,textStyle:n,onLinkPress:handleLink},`b-${t}`))})};exports.Markdown=Markdown,Markdown.displayName="Markdown";const MarkdownBlock=({block:e,theme:t,styles:r,textStyle:i,onLinkPress:n})=>{switch(e.type){case"heading":return(0,_jsxRuntime.jsx)(_reactNative.Text,{accessibilityRole:"header",style:[r.block,{fontSize:t.typography.fontSize[HEADING_SCALE[e.level]],fontWeight:t.typography.fontWeight.semibold,color:t.colors.text.primary},i],children:renderInline(e.children,t,n)});case"paragraph":return(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[r.block,r.body,i],children:renderInline(e.children,t,n)});case"listItem":return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[r.listRow,{marginLeft:e.depth*t.spacing.md}],children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[r.body,r.bullet,i],children:e.ordered?`${e.index}.`:"•"}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[r.body,r.listText,i],children:renderInline(e.children,t,n)})]});case"quote":return(0,_jsxRuntime.jsx)(_reactNative.View,{style:r.quote,children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[r.body,r.quoteText,i],children:renderInline(e.children,t,n)})});case"codeBlock":return(0,_jsxRuntime.jsx)(_reactNative.View,{style:r.codeBlock,children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:r.codeText,children:e.value})});case"rule":return(0,_jsxRuntime.jsx)(_reactNative.View,{style:r.rule});default:return null}},MarkdownSkeleton=({style:e,testID:t})=>(0,_jsxRuntime.jsxs)(_reactNative.View,{style:e,testID:t,children:[(0,_jsxRuntime.jsx)(_index2.Skeleton,{shape:"text",width:"70%",height:20,style:{marginBottom:8}}),(0,_jsxRuntime.jsx)(_index2.Skeleton,{shape:"text",width:"100%",height:14,style:{marginBottom:6}}),(0,_jsxRuntime.jsx)(_index2.Skeleton,{shape:"text",width:"92%",height:14,style:{marginBottom:6}}),(0,_jsxRuntime.jsx)(_index2.Skeleton,{shape:"text",width:"60%",height:14})]}),createStyles=e=>_reactNative.StyleSheet.create({block:{marginBottom:e.spacing.sm},body:{fontSize:e.typography.fontSize.base,color:e.colors.text.primary,lineHeight:1.5*e.typography.fontSize.base},listRow:{flexDirection:"row",marginBottom:e.spacing.xs},bullet:{width:e.spacing.lg},listText:{flex:1},quote:{borderLeftWidth:3,borderLeftColor:e.colors.border.secondary,paddingLeft:e.spacing.sm,marginBottom:e.spacing.sm},quoteText:{color:e.colors.text.secondary,fontStyle:"italic"},codeBlock:{backgroundColor:e.colors.background.secondary,borderRadius:e.radius.sm,..._corners.smoothCorners,padding:e.spacing.sm,marginBottom:e.spacing.sm},codeText:{fontFamily:MONO,fontSize:e.typography.fontSize.sm,color:e.colors.text.primary},rule:{height:_reactNative.StyleSheet.hairlineWidth,backgroundColor:e.colors.border.primary,marginVertical:e.spacing.md}});
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Markdown=void 0;var _react=require("react"),_reactNative=require("react-native"),_index=require("../../theme/index.js"),_corners=require("../../utils/corners.js"),_index2=require("../Skeleton/index.js"),_parse=require("./parse.js"),_jsxRuntime=require("react/jsx-runtime");const renderInline=(e,t,r,n="i")=>e.map((e,i)=>{const s=`${n}-${i}`;switch(e.type){case"text":return(0,_jsxRuntime.jsx)(_reactNative.Text,{children:e.value},s);case"strong":return(0,_jsxRuntime.jsx)(_reactNative.Text,{style:{fontWeight:t.typography.fontWeight.bold},children:renderInline(e.children,t,r,s)},s);case"em":return(0,_jsxRuntime.jsx)(_reactNative.Text,{style:{fontStyle:"italic"},children:renderInline(e.children,t,r,s)},s);case"strike":return(0,_jsxRuntime.jsx)(_reactNative.Text,{style:{textDecorationLine:"line-through"},children:renderInline(e.children,t,r,s)},s);case"code":return(0,_jsxRuntime.jsx)(_reactNative.Text,{style:{fontFamily:MONO,backgroundColor:t.colors.background.secondary,color:t.colors.text.primary},children:e.value},s);case"link":return(0,_jsxRuntime.jsx)(_reactNative.Text,{accessibilityRole:"link",onPress:()=>r(e.href),style:{color:t.colors.text.link,textDecorationLine:"underline"},children:renderInline(e.children,t,r,s)},s);default:return null}}),MONO=_reactNative.Platform.select({ios:"Menlo",android:"monospace",default:"monospace"}),HEADING_SCALE={1:"3xl",2:"2xl",3:"xl",4:"lg",5:"base",6:"sm"},Markdown=({children:e,onLinkPress:t,loading:r=!1,style:n,textStyle:i,testID:s})=>{const o=(0,_index.useTheme)(),a=(0,_react.useMemo)(()=>createStyles(o),[o]),l=(0,_react.useMemo)(()=>(0,_parse.parseMarkdown)(e??""),[e]),handleLink=e=>{t?t(e):_reactNative.Linking.openURL(e).catch(()=>{})};return r?(0,_jsxRuntime.jsx)(MarkdownSkeleton,{style:n,testID:s}):0===l.length?null:(0,_jsxRuntime.jsx)(_reactNative.View,{style:n,testID:s,children:l.map((e,t)=>(0,_jsxRuntime.jsx)(MarkdownBlock,{block:e,theme:o,styles:a,textStyle:i,onLinkPress:handleLink},`b-${t}`))})};exports.Markdown=Markdown,Markdown.displayName="Markdown";const MarkdownBlock=({block:e,theme:t,styles:r,textStyle:n,onLinkPress:i})=>{switch(e.type){case"heading":return(0,_jsxRuntime.jsx)(_reactNative.Text,{accessibilityRole:"header",style:[r.block,{fontSize:t.typography.fontSize[HEADING_SCALE[e.level]],fontWeight:t.typography.fontWeight.semibold,color:t.colors.text.primary},n],children:renderInline(e.children,t,i)});case"paragraph":return(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[r.block,r.body,n],children:renderInline(e.children,t,i)});case"listItem":return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[r.listRow,{marginLeft:e.depth*t.spacing.md}],children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[r.body,r.bullet,n],children:e.ordered?`${e.index}.`:"•"}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[r.body,r.listText,n],children:renderInline(e.children,t,i)})]});case"quote":return(0,_jsxRuntime.jsx)(_reactNative.View,{style:r.quote,children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[r.body,r.quoteText,n],children:renderInline(e.children,t,i)})});case"codeBlock":return(0,_jsxRuntime.jsx)(_reactNative.View,{style:r.codeBlock,children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:r.codeText,children:e.value})});case"rule":return(0,_jsxRuntime.jsx)(_reactNative.View,{style:r.rule});default:return null}},MarkdownSkeleton=({style:e,testID:t})=>{const r=(0,_index.useTheme)();return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:e,testID:t,children:[(0,_jsxRuntime.jsx)(_index2.Skeleton,{shape:"text",width:"70%",height:20,style:{marginBottom:r.spacing.sm}}),(0,_jsxRuntime.jsx)(_index2.Skeleton,{shape:"text",width:"100%",height:14,style:{marginBottom:r.spacing.xs}}),(0,_jsxRuntime.jsx)(_index2.Skeleton,{shape:"text",width:"92%",height:14,style:{marginBottom:r.spacing.xs}}),(0,_jsxRuntime.jsx)(_index2.Skeleton,{shape:"text",width:"60%",height:14})]})},createStyles=e=>_reactNative.StyleSheet.create({block:{marginBottom:e.spacing.sm},body:{fontSize:e.typography.fontSize.base,color:e.colors.text.primary,lineHeight:1.5*e.typography.fontSize.base},listRow:{flexDirection:"row",marginBottom:e.spacing.xs},bullet:{width:e.spacing.lg},listText:{flex:1},quote:{borderLeftWidth:3,borderLeftColor:e.colors.border.secondary,paddingLeft:e.spacing.sm,marginBottom:e.spacing.sm},quoteText:{color:e.colors.text.secondary,fontStyle:"italic"},codeBlock:{backgroundColor:e.colors.background.secondary,borderRadius:e.radius.sm,..._corners.smoothCorners,padding:e.spacing.sm,marginBottom:e.spacing.sm},codeText:{fontFamily:MONO,fontSize:e.typography.fontSize.sm,color:e.colors.text.primary},rule:{height:_reactNative.StyleSheet.hairlineWidth,backgroundColor:e.colors.border.primary,marginVertical:e.spacing.md}});
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.MessageBubble=exports.DEFAULT_MESSAGE_BUBBLE_LABELS=void 0;var _mobileCore=require("@webority/mobile-core"),_react=require("react"),_reactNative=require("react-native"),_index=require("../../theme/index.js"),_announce=require("../../utils/announce.js"),_corners=require("../../utils/corners.js"),_index2=require("../AppIcon/index.js"),_index3=require("../Button/index.js"),_index4=require("../Markdown/index.js"),_useContextMenu=require("../Menu/useContextMenu.js"),_index5=require("../Text/index.js"),_jsxRuntime=require("react/jsx-runtime");const DEFAULT_MESSAGE_BUBBLE_LABELS=exports.DEFAULT_MESSAGE_BUBBLE_LABELS=Object.freeze({you:"You",sending:"Sending",sent:"Sent",delivered:"Delivered",read:"Read",failed:"Not sent",retry:"Try again",copy:"Copy",replyTo:e=>e?`Reply to ${e}`:"Reply"}),RUN_GAP=2,MAX_WIDTH="85%",STATUS_ICON=14,statusIcon=e=>{switch(e){case"sending":return"clock";case"sent":return"check";case"failed":return"alert-circle";default:return"check-check"}},statusColour=(e,t)=>{switch(t){case"read":return e.colors.toneText.info;case"failed":return e.colors.toneText.error;default:return e.colors.text.tertiary}},MessageBubble=({side:e,text:t,children:s,markdown:r=!1,groupPosition:n="single",author:i,time:o,status:a,replyTo:l,streaming:c=!1,error:u,onRetry:d,actions:x,onCopy:b,onLongPress:_,footer:m,labels:p,haptic:y,style:h,testID:g})=>{const f=(0,_index.useTheme)(),j=(0,_react.useMemo)(()=>buildStyles(f),[f]),L=p?{...DEFAULT_MESSAGE_BUBBLE_LABELS,...p}:DEFAULT_MESSAGE_BUBBLE_LABELS,B="mine"===e,R="single"===n||"first"===n,T="single"===n||"last"===n,E=null==o?"":(0,_mobileCore.formatTime)(o),v=("failed"===a||Boolean(u))&&Boolean(d),S=B?L.you:i??"",M=(0,_react.useMemo)(()=>{const e=[];return b&&!x?.some(e=>"copy"===e.name)&&e.push({name:"copy",label:L.copy,onPress:()=>b(t)}),x&&e.push(...x),l?.onPress&&e.push({name:"openReply",label:L.replyTo(l.author),onPress:l.onPress}),v&&d&&e.push({name:"retry",label:L.retry,onPress:d}),e},[x,b,t,l,v,d,L]),A=(x?.length??0)>0||Boolean(b),P=(0,_react.useMemo)(()=>A?{items:M.map(({name:e,label:t,onPress:s})=>({key:e,label:t,onPress:s}))}:void 0,[A,M]),C=(0,_useContextMenu.useContextMenu)(P,{haptic:y,testID:g}),I=C.hostProps.onLongPress,k=!s||(x?.length??0)>0,D=a&&B?L[a]:"",q=[S,E,t,l?`${L.replyTo(l.author)}: ${l.text}`:"",D].filter(Boolean).join(", "),w=(0,_react.useRef)(c);(0,_react.useEffect)(()=>{w.current&&!c&&!u&&t&&(0,_announce.announce)(S?`${S}, ${t}`:t),w.current=c},[c,u,t,S]);const U=(0,_react.useRef)(u);(0,_react.useEffect)(()=>{u&&u!==U.current&&(0,_announce.announce)(u,{polite:!1}),U.current=u},[u]);const $=(0,_react.useCallback)(e=>{I?.(e),_?.()},[I,_]),N=(0,_react.useCallback)(e=>{M.find(t=>t.name===e.nativeEvent.actionName)?.onPress()},[M]),F=f.radius.xl,z=f.radius.xs,G=B?{borderTopRightRadius:R?F:z,borderBottomRightRadius:T?F:z}:{borderTopLeftRadius:R?F:z,borderBottomLeftRadius:T?F:z},H=s??(r?(0,_jsxRuntime.jsx)(_index4.Markdown,{children:t}):(0,_jsxRuntime.jsx)(_index5.Text,{variant:"body",children:t})),O=l?(0,_jsxRuntime.jsxs)(_reactNative.Pressable,{onPress:l.onPress,disabled:!l.onPress,accessibilityRole:l.onPress?"button":void 0,accessibilityLabel:`${L.replyTo(l.author)}: ${l.text}`,style:j.quote,children:[l.author?(0,_jsxRuntime.jsx)(_index5.Text,{variant:"caption",weight:"semibold",color:"link",numberOfLines:1,children:l.author}):null,(0,_jsxRuntime.jsx)(_index5.Text,{variant:"bodySmall",color:"secondary",numberOfLines:2,children:l.text})]}):null,V=[j.bubble,B?j.mine:j.theirs,G],W=k?{accessible:!0,accessibilityLabel:q,accessibilityState:{busy:c},"aria-busy":c,accessibilityActions:M.map(({name:e,label:t})=>({name:e,label:t})),onAccessibilityAction:N}:{accessible:!1},X=A?(0,_jsxRuntime.jsxs)(_reactNative.Pressable,{ref:C.hostRef,...C.hostProps,onLongPress:$,delayLongPress:350,style:V,testID:g?`${g}-bubble`:void 0,...W,children:[O,H]}):(0,_jsxRuntime.jsxs)(_reactNative.View,{style:V,testID:g?`${g}-bubble`:void 0,...W,children:[O,H]}),Y=T&&(""!==E||B&&a);return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[j.root,B?j.rootMine:j.rootTheirs,{marginTop:R?f.spacing.sm:2},h],testID:g,children:[!B&&R&&i?(0,_jsxRuntime.jsx)(_index5.Text,{variant:"caption",color:"secondary",style:j.author,numberOfLines:1,importantForAccessibility:k?"no-hide-descendants":"auto",accessibilityElementsHidden:k,children:i}):null,X,C.renderSurface(),Y?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[j.meta,B?j.metaMine:null],importantForAccessibility:k?"no-hide-descendants":"auto",accessibilityElementsHidden:k,children:[E?(0,_jsxRuntime.jsx)(_index5.Text,{variant:"caption",color:"tertiary",children:E}):null,B&&a?(0,_jsxRuntime.jsx)(_index2.AppIcon,{name:statusIcon(a),size:14,color:statusColour(f,a),accessibilityLabel:L[a],testID:g?`${g}-status-${a}`:void 0}):null]}):null,u?(0,_jsxRuntime.jsx)(_index5.Text,{variant:"bodySmall",color:"error",style:B?j.endText:null,children:u}):null,v?(0,_jsxRuntime.jsx)(_index3.Button,{title:L.retry,variant:"link",size:"sm",leftIcon:"refresh-cw",onPress:d,testID:g?`${g}-retry`:void 0}):null,m]})};exports.MessageBubble=MessageBubble;const buildStyles=e=>_reactNative.StyleSheet.create({root:{maxWidth:"85%",gap:e.spacing.xs},rootMine:{alignSelf:"flex-end",alignItems:"flex-end"},rootTheirs:{alignSelf:"flex-start",alignItems:"flex-start"},author:{paddingHorizontal:e.spacing.md},bubble:{borderRadius:e.radius.xl,..._corners.smoothCorners,paddingHorizontal:e.spacing.md,paddingVertical:e.spacing.sm,gap:e.spacing.xs},mine:{backgroundColor:e.colors.primaryMuted},theirs:{backgroundColor:e.colors.background.secondary},quote:{borderLeftWidth:3,borderLeftColor:e.colors.primary,paddingLeft:e.spacing.sm,paddingVertical:e.spacing.xs},meta:{flexDirection:"row",alignItems:"center",gap:e.spacing.xs,paddingHorizontal:e.spacing.xs},metaMine:{justifyContent:"flex-end"},endText:{textAlign:"right"}});var _default=exports.default=MessageBubble;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.MessageBubble=exports.DEFAULT_MESSAGE_BUBBLE_LABELS=void 0;var _mobileCore=require("@webority/mobile-core"),_react=require("react"),_reactNative=require("react-native"),_index=require("../../theme/index.js"),_announce=require("../../utils/announce.js"),_corners=require("../../utils/corners.js"),_index2=require("../AppIcon/index.js"),_index3=require("../Button/index.js"),_index4=require("../Markdown/index.js"),_useContextMenu=require("../Menu/useContextMenu.js"),_index5=require("../Text/index.js"),_jsxRuntime=require("react/jsx-runtime");const DEFAULT_MESSAGE_BUBBLE_LABELS=exports.DEFAULT_MESSAGE_BUBBLE_LABELS=Object.freeze({you:"You",sending:"Sending",sent:"Sent",delivered:"Delivered",read:"Read",failed:"Not sent",retry:"Try again",copy:"Copy",replyTo:e=>e?`Reply to ${e}`:"Reply"}),MAX_WIDTH="85%",STATUS_ICON=14,statusIcon=e=>{switch(e){case"sending":return"clock";case"sent":return"check";case"failed":return"alert-circle";default:return"check-check"}},statusColour=(e,t)=>{switch(t){case"read":return e.colors.toneText.info;case"failed":return e.colors.toneText.error;default:return e.colors.text.tertiary}},MessageBubble=({side:e,text:t,children:s,markdown:r=!1,groupPosition:n="single",author:i,time:o,status:a,replyTo:l,streaming:c=!1,error:u,onRetry:d,actions:x,onCopy:b,onLongPress:m,footer:_,labels:p,haptic:y,style:g,testID:h})=>{const f=(0,_index.useTheme)(),j=(0,_react.useMemo)(()=>buildStyles(f),[f]),L=p?{...DEFAULT_MESSAGE_BUBBLE_LABELS,...p}:DEFAULT_MESSAGE_BUBBLE_LABELS,B="mine"===e,T="single"===n||"first"===n,R="single"===n||"last"===n,E=null==o?"":(0,_mobileCore.formatTime)(o),v=("failed"===a||Boolean(u))&&Boolean(d),S=B?L.you:i??"",M=(0,_react.useMemo)(()=>{const e=[];return b&&!x?.some(e=>"copy"===e.name)&&e.push({name:"copy",label:L.copy,onPress:()=>b(t)}),x&&e.push(...x),l?.onPress&&e.push({name:"openReply",label:L.replyTo(l.author),onPress:l.onPress}),v&&d&&e.push({name:"retry",label:L.retry,onPress:d}),e},[x,b,t,l,v,d,L]),A=(x?.length??0)>0||Boolean(b),P=(0,_react.useMemo)(()=>A?{items:M.map(({name:e,label:t,onPress:s})=>({key:e,label:t,onPress:s}))}:void 0,[A,M]),C=(0,_useContextMenu.useContextMenu)(P,{haptic:y,testID:h}),I=C.hostProps.onLongPress,k=!s||(x?.length??0)>0,D=a&&B?L[a]:"",q=[S,E,t,l?`${L.replyTo(l.author)}: ${l.text}`:"",D].filter(Boolean).join(", "),w=(0,_react.useRef)(c);(0,_react.useEffect)(()=>{w.current&&!c&&!u&&t&&(0,_announce.announce)(S?`${S}, ${t}`:t),w.current=c},[c,u,t,S]);const $=(0,_react.useRef)(u);(0,_react.useEffect)(()=>{u&&u!==$.current&&(0,_announce.announce)(u,{polite:!1}),$.current=u},[u]);const U=(0,_react.useCallback)(e=>{I?.(e),m?.()},[I,m]),N=(0,_react.useCallback)(e=>{M.find(t=>t.name===e.nativeEvent.actionName)?.onPress()},[M]),F=f.radius.xl,z=f.radius.sm,H=B?{borderTopRightRadius:T?F:z,borderBottomRightRadius:R?F:z}:{borderTopLeftRadius:T?F:z,borderBottomLeftRadius:R?F:z},O=s??(r?(0,_jsxRuntime.jsx)(_index4.Markdown,{children:t}):(0,_jsxRuntime.jsx)(_index5.Text,{variant:"body",children:t})),G=l?(0,_jsxRuntime.jsxs)(_reactNative.Pressable,{onPress:l.onPress,disabled:!l.onPress,accessibilityRole:l.onPress?"button":void 0,accessibilityLabel:`${L.replyTo(l.author)}: ${l.text}`,style:j.quote,children:[l.author?(0,_jsxRuntime.jsx)(_index5.Text,{variant:"caption",weight:"semibold",color:"link",numberOfLines:1,children:l.author}):null,(0,_jsxRuntime.jsx)(_index5.Text,{variant:"bodySmall",color:"secondary",numberOfLines:2,children:l.text})]}):null,V=[j.bubble,B?j.mine:j.theirs,H],W=k?{accessible:!0,accessibilityLabel:q,accessibilityState:{busy:c},"aria-busy":c,accessibilityActions:M.map(({name:e,label:t})=>({name:e,label:t})),onAccessibilityAction:N}:{accessible:!1},X=A?(0,_jsxRuntime.jsxs)(_reactNative.Pressable,{ref:C.hostRef,...C.hostProps,onLongPress:U,delayLongPress:350,style:V,testID:h?`${h}-bubble`:void 0,...W,children:[G,O]}):(0,_jsxRuntime.jsxs)(_reactNative.View,{style:V,testID:h?`${h}-bubble`:void 0,...W,children:[G,O]}),Y=R&&(""!==E||B&&a);return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[j.root,B?j.rootMine:j.rootTheirs,{marginTop:T?f.spacing.sm:f.spacing.xxs},g],testID:h,children:[!B&&T&&i?(0,_jsxRuntime.jsx)(_index5.Text,{variant:"caption",color:"secondary",style:j.author,numberOfLines:1,importantForAccessibility:k?"no-hide-descendants":"auto",accessibilityElementsHidden:k,children:i}):null,X,C.renderSurface(),Y?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[j.meta,B?j.metaMine:null],importantForAccessibility:k?"no-hide-descendants":"auto",accessibilityElementsHidden:k,children:[E?(0,_jsxRuntime.jsx)(_index5.Text,{variant:"caption",color:"tertiary",children:E}):null,B&&a?(0,_jsxRuntime.jsx)(_index2.AppIcon,{name:statusIcon(a),size:14,color:statusColour(f,a),accessibilityLabel:L[a],testID:h?`${h}-status-${a}`:void 0}):null]}):null,u?(0,_jsxRuntime.jsx)(_index5.Text,{variant:"bodySmall",color:"error",style:B?j.endText:null,children:u}):null,v?(0,_jsxRuntime.jsx)(_index3.Button,{title:L.retry,variant:"link",size:"sm",leftIcon:"refresh-cw",onPress:d,testID:h?`${h}-retry`:void 0}):null,_]})};exports.MessageBubble=MessageBubble;const buildStyles=e=>_reactNative.StyleSheet.create({root:{maxWidth:"85%",gap:e.spacing.xs},rootMine:{alignSelf:"flex-end",alignItems:"flex-end"},rootTheirs:{alignSelf:"flex-start",alignItems:"flex-start"},author:{paddingHorizontal:e.spacing.md},bubble:{borderRadius:e.radius.xl,..._corners.smoothCorners,paddingHorizontal:e.spacing.md,paddingVertical:e.spacing.sm,gap:e.spacing.xs},mine:{backgroundColor:e.colors.primaryMuted},theirs:{backgroundColor:e.colors.background.secondary},quote:{borderLeftWidth:3,borderLeftColor:e.colors.primary,paddingLeft:e.spacing.sm,paddingVertical:e.spacing.xs},meta:{flexDirection:"row",alignItems:"center",gap:e.spacing.xs,paddingHorizontal:e.spacing.xs},metaMine:{justifyContent:"flex-end"},endText:{textAlign:"right"}});var _default=exports.default=MessageBubble;
@@ -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:s,getDate:r,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:g,onScroll:j,contentContainerStyle:f,style:y,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=r?e.map(e=>(0,_mobileCore.formatDate)(r(e))):null,o=s?e.map(s):null,i=void 0===a?-1:e.findIndex(e=>t(e)===a);return e.map((t,s)=>{const a=s===e.length-1,l=null!==n&&(a||n[s]!==n[s+1]),u=null!==o&&!a&&o[s+1]===o[s]&&!l&&s!==i,c=null!==o&&s>0&&o[s-1]===o[s]&&(null===n||n[s-1]===n[s])&&s-1!==i;return{groupPosition:positionOf(u,c),day:l&&r?(0,_index3.dayLabel)(r(t),{now:g,labels:R}):null,unread:s===i}})},[e,r,s,a,t,g,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 s=e.findIndex(e=>t(e)===n);if(-1===s)return void N(0);const r=e.slice(0,s).reverse();for(const e of r){const t=d?.(e);t&&(0,_announce.announce)(t)}_&&r.some(_)?k():A.current&&N(e=>e+r.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)),j?.(e)},[j]),F=(0,_react.useCallback)(()=>{l&&!i&&o?.()},[l,i,o]),V=(0,_react.useCallback)(({item:e,index:t})=>{const s=O[t];return(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[s?.day?(0,_jsxRuntime.jsx)(_index3.DateSeparator,{label:s.day}):null,s?.unread?(0,_jsxRuntime.jsx)(_index3.DateSeparator,{label:R.unread,emphasis:!0}):null,n({item:e,index:t,groupPosition:s?.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,y],children:[(0,_jsxRuntime.jsx)(_reactNative.FlatList,{keyboardShouldPersistTaps:"handled",maintainVisibleContentPosition:KEEP_POSITION,...S,ref:T,data:e,renderItem:V,keyExtractor:B,inverted:!0,onScroll:P,onEndReached:o?F:void 0,ListHeaderComponent:u?(0,_jsxRuntime.jsx)(_jsxRuntime.Fragment,{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,f],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.spacing.md,paddingVertical:e.spacing.sm},grow:{flexGrow:1},fill:{flex:1},older:{paddingVertical:e.spacing.md},jump:{position:"absolute",right:e.spacing.md,bottom:e.spacing.md},jumpDisc:{borderRadius:e.radius.full,..._corners.smoothCorners,backgroundColor:e.colors.background.elevated,...e.shadows.md},count:{position:"absolute",top:-e.spacing.xs,right:-e.spacing.xs}});var _default=exports.default=MessageList;
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:s,getDate:r,firstUnreadKey:a,onLoadOlder:i,loadingOlder:o=!1,hasOlder:l=!0,typing:u,empty:c,getAnnouncement:d,followNew:_,keyboardAware:m=!0,keyboardOffset:x,labels:p,now:g,onScroll:j,contentContainerStyle:f,style:y,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=r?e.map(e=>(0,_mobileCore.formatDate)(r(e))):null,i=s?e.map(s):null,o=void 0===a?-1:e.findIndex(e=>t(e)===a);return e.map((t,s)=>{const a=s===e.length-1,l=null!==n&&(a||n[s]!==n[s+1]),u=null!==i&&!a&&i[s+1]===i[s]&&!l&&s!==o,c=null!==i&&s>0&&i[s-1]===i[s]&&(null===n||n[s-1]===n[s])&&s-1!==o;return{groupPosition:positionOf(u,c),day:l&&r?(0,_index3.dayLabel)(r(t),{now:g,labels:R}):null,unread:s===o}})},[e,r,s,a,t,g,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 s=e.findIndex(e=>t(e)===n);if(-1===s)return void N(0);const r=e.slice(0,s).reverse();for(const e of r){const t=d?.(e);t&&(0,_announce.announce)(t)}_&&r.some(_)?k():A.current&&N(e=>e+r.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)),j?.(e)},[j]),F=(0,_react.useCallback)(()=>{l&&!o&&i?.()},[l,o,i]),V=(0,_react.useCallback)(({item:e,index:t})=>{const s=O[t];return(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[s?.day?(0,_jsxRuntime.jsx)(_index3.DateSeparator,{label:s.day}):null,s?.unread?(0,_jsxRuntime.jsx)(_index3.DateSeparator,{label:R.unread,emphasis:!0}):null,n({item:e,index:t,groupPosition:s?.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,y],children:[(0,_jsxRuntime.jsx)(_reactNative.FlatList,{keyboardShouldPersistTaps:"handled",maintainVisibleContentPosition:KEEP_POSITION,...S,ref:T,data:e,renderItem:V,keyExtractor:B,inverted:!0,onScroll:P,onEndReached:i?F:void 0,ListHeaderComponent:u?(0,_jsxRuntime.jsx)(_jsxRuntime.Fragment,{children:u}):null,ListFooterComponent:o?(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,f],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.spacing.md,paddingVertical:e.spacing.sm},grow:{flexGrow:1},fill:{flex:1},older:{paddingVertical:e.spacing.md},jump:{position:"absolute",right:e.spacing.md,bottom:e.spacing.md},jumpDisc:{borderRadius:e.radius.pill,..._corners.smoothCorners,backgroundColor:e.colors.background.elevated,...e.shadows.md},count:{position:"absolute",top:-e.spacing.xs,right:-e.spacing.xs}});var _default=exports.default=MessageList;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.Modal=exports.MODAL_DISMISS_GRACE_MS=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"),_squircle=require("../../utils/squircle.js"),_ModalSafeArea=require("../ModalSafeArea/ModalSafeArea.js"),_SquircleFill=require("../SquircleFill/SquircleFill.js"),_ToastProvider=require("../Toast/ToastProvider.js"),_jsxRuntime=require("react/jsx-runtime");const MODAL_DISMISS_GRACE_MS=exports.MODAL_DISMISS_GRACE_MS=300,Modal=exports.Modal=(0,_react.forwardRef)((e,t)=>{const{visible:r,onRequestClose:a,presentation:i="centered",backdropOpacity:s,backdropPressClose:n=!0,animationDuration:o,accessibilityLabel:l,hardwareBackPress:c=!0,children:u,contentStyle:d,backdropStyle:m,restoreFocusRef:_,onDismissed:p,haptic:f,testID:g}=e,v=(0,_index.useTheme)(),b=(0,_usePresenceMotion.usePresenceMotion)(),[S,x]=(0,_ModalSafeArea.useModalInsets)(),h=o??b.duration("normal"),M=_reactNative.Dimensions.get("window").height,y=v.components.modal,A=y?.scaleStartValue??.9,N=(0,_react.useRef)((0,_index.createAnimatedValue)(A)).current,R=(0,_react.useRef)((0,_index.createAnimatedValue)(0)).current,j=(0,_react.useRef)((0,_index.createAnimatedValue)(M)).current,q=(0,_react.useRef)((0,_index.createAnimatedValue)(0)).current,C=(0,_react.useRef)(null),V=(0,_react.useRef)(!1),[D,T]=(0,_react.useState)(r),k=(0,_react.useMemo)(()=>buildStyles(v),[v]),w=(0,_react.useMemo)(()=>{const e=v.colors.background.overlay;if("number"!=typeof s)return e;const t=e.match(/^rgba?\(([^)]+)\)$/);if(!t)return e;const[r,a,i]=t[1].split(",").map(e=>e.trim());return`rgba(${r}, ${a}, ${i}, ${s})`},[v.colors.background.overlay,s]),I=(0,_react.useMemo)(()=>q.interpolate({inputRange:[0,1],outputRange:[transparentOf(w),w]}),[q,w]);(0,_react.useEffect)(()=>{r&&T(!0)},[r]),(0,_react.useEffect)(()=>{const e=[];if(r&&D){const t=_reactNative.Animated.timing(q,{toValue:1,duration:b.duration("normal"),useNativeDriver:!1});if(t.start(),e.push(t),b.reduced){R.setValue(0),j.setValue(0),N.setValue(1);const t=_reactNative.Animated.timing(R,{toValue:1,duration:h,useNativeDriver:!0});t.start(),e.push(t)}else if("bottom"===i){R.setValue(1);const t=_reactNative.Animated.spring(j,{toValue:0,damping:v.motion.spring.gentle.damping,stiffness:v.motion.spring.gentle.stiffness,mass:v.motion.spring.gentle.mass,useNativeDriver:!0});t.start(),e.push(t)}else{const t=_reactNative.Animated.parallel([_reactNative.Animated.spring(N,{toValue:1,damping:v.motion.spring.gentle.damping,stiffness:v.motion.spring.gentle.stiffness,mass:v.motion.spring.gentle.mass,useNativeDriver:!0}),_reactNative.Animated.timing(R,{toValue:1,duration:h,useNativeDriver:!0})]);t.start(),e.push(t)}}else if(D){const t=b.duration("fast"),r=_reactNative.Easing.bezier(...v.motion.easing.accelerate),a=_reactNative.Animated.timing(R,{toValue:0,duration:t,easing:r,useNativeDriver:!0}),s=b.reduced?a:"bottom"===i?_reactNative.Animated.timing(j,{toValue:M,duration:t,easing:r,useNativeDriver:!0}):_reactNative.Animated.parallel([_reactNative.Animated.timing(N,{toValue:A,duration:t,easing:r,useNativeDriver:!0}),a]),n=_reactNative.Animated.parallel([s,_reactNative.Animated.timing(q,{toValue:0,duration:b.duration("normal"),useNativeDriver:!1})]);n.start(({finished:e})=>{e&&(j.setValue(M),T(!1))}),e.push(n)}return()=>e.forEach(e=>e.stop())},[r,D,i,h,N,R,q,j,M,v.motion.spring.gentle.damping,v.motion.spring.gentle.stiffness,v.motion.spring.gentle.mass,b,v.motion.easing.accelerate,A]),(0,_react.useEffect)(()=>{if("web"===_reactNative.Platform.OS)return;let e,t;return r?(e=setTimeout(()=>{C.current&&_reactNative.AccessibilityInfo.sendAccessibilityEvent(C.current,"focus")},150),V.current=!0):V.current&&(V.current=!1,_&&_.current&&(t=setTimeout(()=>{const e=_.current;e&&_reactNative.AccessibilityInfo.sendAccessibilityEvent(e,"focus")},h))),()=>{e&&clearTimeout(e),t&&clearTimeout(t)}},[r,h,_]);const E=(0,_react.useRef)(!1);(0,_react.useEffect)(()=>{if(r)return void(E.current=!0);if(!E.current)return;if(E.current=!1,!p)return;const e=setTimeout(p,MODAL_DISMISS_GRACE_MS);return()=>clearTimeout(e)},[r,p]);const P=(0,_react.useCallback)(()=>{if(!n)return;const e=(0,_hapticUtils.resolveHaptic)(f,"selection");e&&(0,_hapticUtils.triggerHaptic)(e),a()},[n,a,f]),z=(0,_react.useCallback)(()=>{c&&a()},[c,a]),L=(0,_SquircleFill.useSquircle)("bottom"!==i&&"fullScreen"!==i,v.radius.xl),F=(0,_react.useMemo)(()=>"fullScreen"===i?[k.fullScreenContent,{backgroundColor:v.colors.background.elevated}]:"bottom"===i?[k.bottomContent,{backgroundColor:v.colors.background.elevated,borderTopLeftRadius:v.radius.xl,borderTopRightRadius:v.radius.xl,..._corners.smoothCorners,paddingTop:v.spacing.lg,paddingHorizontal:v.spacing.lg,paddingBottom:v.spacing.lg+S.bottom},v.shadows.xl]:[k.centeredContent,{backgroundColor:v.colors.background.elevated,borderRadius:L.active&&L.size?(0,_squircle.squircleHostRadius)(L.size.width,L.size.height,v.radius.xl):v.radius.xl,..._corners.smoothCorners,padding:v.spacing.xl},v.shadows.xl],[i,v,k,S.bottom,L.active,L.size]),O=(0,_react.useMemo)(()=>"bottom"===i?k.bottomWrapper:"fullScreen"===i?k.fullScreenWrapper:k.centeredWrapper,[i,k]),$=(0,_react.useMemo)(()=>"bottom"===i?{opacity:R,transform:[{translateY:j}]}:"fullScreen"===i?{opacity:R}:{opacity:R,transform:[{scale:N}]},[i,N,R,j]);return(0,_jsxRuntime.jsx)(_reactNative.Modal,{visible:D,transparent:!0,statusBarTranslucent:!0,navigationBarTranslucent:!0,animationType:"none",onRequestClose:z,testID:g,children:(0,_jsxRuntime.jsx)(_reactNative.View,{ref:e=>{C.current=e,"function"==typeof t?t(e):t&&(t.current=e)},style:k.root,accessible:!1,accessibilityViewIsModal:!0,accessibilityRole:"alert",accessibilityLabel:l,children:(0,_jsxRuntime.jsxs)(_ModalSafeArea.ModalSafeArea,{onInsets:x,children:[(0,_jsxRuntime.jsxs)(_reactNative.Animated.View,{collapsable:!1,style:[_reactNative.StyleSheet.absoluteFill,O,{backgroundColor:I},m],children:[(0,_jsxRuntime.jsx)(_reactNative.Pressable,{style:_reactNative.StyleSheet.absoluteFill,onPress:P,accessibilityRole:"button",accessibilityLabel:"Close modal",disabled:!n}),(0,_jsxRuntime.jsxs)(_reactNative.Animated.View,{style:[F,$,d],onLayout:L.onLayout,pointerEvents:"auto",children:[L.active&&L.size?(0,_jsxRuntime.jsx)(_SquircleFill.SquircleFill,{width:L.size.width,height:L.size.height,radius:v.radius.xl,fill:v.colors.background.elevated}):null,u]})]}),(0,_jsxRuntime.jsx)(_ToastProvider.ToastHost,{})]})})})});Modal.displayName="Modal";const transparentOf=e=>{const t=e.match(/^rgba?\(([^)]+)\)$/);if(!t)return"transparent";const[r,a,i]=t[1].split(",").map(e=>e.trim());return`rgba(${r}, ${a}, ${i}, 0)`},buildStyles=e=>_reactNative.StyleSheet.create({root:{flex:1},centeredWrapper:{flex:1,alignItems:"center",justifyContent:"center",paddingHorizontal:16},centeredContent:{maxWidth:"90%",width:"90%"},bottomWrapper:{flex:1,justifyContent:"flex-end"},bottomContent:{width:"100%"},fullScreenWrapper:{flex:1},fullScreenContent:{flex:1}});var _default=exports.default=Modal;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.Modal=exports.MODAL_DISMISS_GRACE_MS=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"),_squircle=require("../../utils/squircle.js"),_ModalSafeArea=require("../ModalSafeArea/ModalSafeArea.js"),_SquircleFill=require("../SquircleFill/SquircleFill.js"),_ToastProvider=require("../Toast/ToastProvider.js"),_jsxRuntime=require("react/jsx-runtime");const MODAL_DISMISS_GRACE_MS=exports.MODAL_DISMISS_GRACE_MS=300,Modal=exports.Modal=(0,_react.forwardRef)((e,t)=>{const{visible:r,onRequestClose:a,presentation:i="centered",backdropOpacity:s,backdropPressClose:n=!0,animationDuration:o,accessibilityLabel:l,hardwareBackPress:c=!0,children:u,contentStyle:d,backdropStyle:m,restoreFocusRef:_,onDismissed:p,haptic:f,testID:g}=e,v=(0,_index.useTheme)(),b=(0,_usePresenceMotion.usePresenceMotion)(),[S,x]=(0,_ModalSafeArea.useModalInsets)(),h=o??b.duration("normal"),M=_reactNative.Dimensions.get("window").height,y=v.components.modal,A=y?.scaleStartValue??.9,N=(0,_react.useRef)((0,_index.createAnimatedValue)(A)).current,R=(0,_react.useRef)((0,_index.createAnimatedValue)(0)).current,j=(0,_react.useRef)((0,_index.createAnimatedValue)(M)).current,q=(0,_react.useRef)((0,_index.createAnimatedValue)(0)).current,C=(0,_react.useRef)(null),V=(0,_react.useRef)(!1),[D,T]=(0,_react.useState)(r),k=(0,_react.useMemo)(()=>buildStyles(v),[v]),w=(0,_react.useMemo)(()=>{const e=v.colors.background.overlay;if("number"!=typeof s)return e;const t=e.match(/^rgba?\(([^)]+)\)$/);if(!t)return e;const[r,a,i]=t[1].split(",").map(e=>e.trim());return`rgba(${r}, ${a}, ${i}, ${s})`},[v.colors.background.overlay,s]),I=(0,_react.useMemo)(()=>q.interpolate({inputRange:[0,1],outputRange:[transparentOf(w),w]}),[q,w]);(0,_react.useEffect)(()=>{r&&T(!0)},[r]),(0,_react.useEffect)(()=>{const e=[];if(r&&D){const t=_reactNative.Animated.timing(q,{toValue:1,duration:b.duration("normal"),useNativeDriver:!1});if(t.start(),e.push(t),b.reduced){R.setValue(0),j.setValue(0),N.setValue(1);const t=_reactNative.Animated.timing(R,{toValue:1,duration:h,useNativeDriver:!0});t.start(),e.push(t)}else if("bottom"===i){R.setValue(1);const t=_reactNative.Animated.spring(j,{toValue:0,damping:v.motion.spring.gentle.damping,stiffness:v.motion.spring.gentle.stiffness,mass:v.motion.spring.gentle.mass,useNativeDriver:!0});t.start(),e.push(t)}else{const t=_reactNative.Animated.parallel([_reactNative.Animated.spring(N,{toValue:1,damping:v.motion.spring.gentle.damping,stiffness:v.motion.spring.gentle.stiffness,mass:v.motion.spring.gentle.mass,useNativeDriver:!0}),_reactNative.Animated.timing(R,{toValue:1,duration:h,useNativeDriver:!0})]);t.start(),e.push(t)}}else if(D){const t=b.duration("fast"),r=_reactNative.Easing.bezier(...v.motion.easing.accelerate),a=_reactNative.Animated.timing(R,{toValue:0,duration:t,easing:r,useNativeDriver:!0}),s=b.reduced?a:"bottom"===i?_reactNative.Animated.timing(j,{toValue:M,duration:t,easing:r,useNativeDriver:!0}):_reactNative.Animated.parallel([_reactNative.Animated.timing(N,{toValue:A,duration:t,easing:r,useNativeDriver:!0}),a]),n=_reactNative.Animated.parallel([s,_reactNative.Animated.timing(q,{toValue:0,duration:b.duration("normal"),useNativeDriver:!1})]);n.start(({finished:e})=>{e&&(j.setValue(M),T(!1))}),e.push(n)}return()=>e.forEach(e=>e.stop())},[r,D,i,h,N,R,q,j,M,v.motion.spring.gentle.damping,v.motion.spring.gentle.stiffness,v.motion.spring.gentle.mass,b,v.motion.easing.accelerate,A]),(0,_react.useEffect)(()=>{if("web"===_reactNative.Platform.OS)return;let e,t;return r?(e=setTimeout(()=>{C.current&&_reactNative.AccessibilityInfo.sendAccessibilityEvent(C.current,"focus")},150),V.current=!0):V.current&&(V.current=!1,_&&_.current&&(t=setTimeout(()=>{const e=_.current;e&&_reactNative.AccessibilityInfo.sendAccessibilityEvent(e,"focus")},h))),()=>{e&&clearTimeout(e),t&&clearTimeout(t)}},[r,h,_]);const E=(0,_react.useRef)(!1);(0,_react.useEffect)(()=>{if(r)return void(E.current=!0);if(!E.current)return;if(E.current=!1,!p)return;const e=setTimeout(p,MODAL_DISMISS_GRACE_MS);return()=>clearTimeout(e)},[r,p]);const P=(0,_react.useCallback)(()=>{if(!n)return;const e=(0,_hapticUtils.resolveHaptic)(f,"selection");e&&(0,_hapticUtils.triggerHaptic)(e),a()},[n,a,f]),z=(0,_react.useCallback)(()=>{c&&a()},[c,a]),L=(0,_SquircleFill.useSquircle)("bottom"!==i&&"fullScreen"!==i,v.radius.xl),F=(0,_react.useMemo)(()=>"fullScreen"===i?[k.fullScreenContent,{backgroundColor:v.colors.background.elevated}]:"bottom"===i?[k.bottomContent,{backgroundColor:v.colors.background.elevated,borderTopLeftRadius:v.radius.xl,borderTopRightRadius:v.radius.xl,..._corners.smoothCorners,paddingTop:v.spacing.lg,paddingHorizontal:v.spacing.lg,paddingBottom:v.spacing.lg+S.bottom},v.shadows.xl]:[k.centeredContent,{backgroundColor:v.colors.background.elevated,borderRadius:L.active&&L.size?(0,_squircle.squircleHostRadius)(L.size.width,L.size.height,v.radius.xl):v.radius.xl,..._corners.smoothCorners,padding:v.spacing.xl},v.shadows.xl],[i,v,k,S.bottom,L.active,L.size]),O=(0,_react.useMemo)(()=>"bottom"===i?k.bottomWrapper:"fullScreen"===i?k.fullScreenWrapper:k.centeredWrapper,[i,k]),$=(0,_react.useMemo)(()=>"bottom"===i?{opacity:R,transform:[{translateY:j}]}:"fullScreen"===i?{opacity:R}:{opacity:R,transform:[{scale:N}]},[i,N,R,j]);return(0,_jsxRuntime.jsx)(_reactNative.Modal,{visible:D,transparent:!0,statusBarTranslucent:!0,navigationBarTranslucent:!0,animationType:"none",onRequestClose:z,testID:g,children:(0,_jsxRuntime.jsx)(_reactNative.View,{ref:e=>{C.current=e,"function"==typeof t?t(e):t&&(t.current=e)},style:k.root,accessible:!1,accessibilityViewIsModal:!0,accessibilityRole:"alert",accessibilityLabel:l,children:(0,_jsxRuntime.jsxs)(_ModalSafeArea.ModalSafeArea,{onInsets:x,children:[(0,_jsxRuntime.jsxs)(_reactNative.Animated.View,{collapsable:!1,style:[_reactNative.StyleSheet.absoluteFill,O,{backgroundColor:I},m],children:[(0,_jsxRuntime.jsx)(_reactNative.Pressable,{style:_reactNative.StyleSheet.absoluteFill,onPress:P,accessibilityRole:"button",accessibilityLabel:"Close modal",disabled:!n}),(0,_jsxRuntime.jsxs)(_reactNative.Animated.View,{style:[F,$,d],onLayout:L.onLayout,pointerEvents:"auto",children:[L.active&&L.size?(0,_jsxRuntime.jsx)(_SquircleFill.SquircleFill,{width:L.size.width,height:L.size.height,radius:v.radius.xl,fill:v.colors.background.elevated}):null,u]})]}),(0,_jsxRuntime.jsx)(_ToastProvider.ToastHost,{})]})})})});Modal.displayName="Modal";const transparentOf=e=>{const t=e.match(/^rgba?\(([^)]+)\)$/);if(!t)return"transparent";const[r,a,i]=t[1].split(",").map(e=>e.trim());return`rgba(${r}, ${a}, ${i}, 0)`},buildStyles=e=>_reactNative.StyleSheet.create({root:{flex:1},centeredWrapper:{flex:1,alignItems:"center",justifyContent:"center",paddingHorizontal:e.spacing.lg},centeredContent:{maxWidth:"90%",width:"90%"},bottomWrapper:{flex:1,justifyContent:"flex-end"},bottomContent:{width:"100%"},fullScreenWrapper:{flex:1},fullScreenContent:{flex:1}});var _default=exports.default=Modal;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.NumberInput=void 0;var _react=_interopRequireWildcard(require("react")),_reactNative=require("react-native"),_index=require("../../hooks/index.js"),_index2=require("../../theme/index.js"),_index3=require("../../utils/index.js"),_corners=require("../../utils/corners.js"),_FieldBase=require("../FieldBase/FieldBase.js"),_jsxRuntime=require("react/jsx-runtime");function _interopRequireWildcard(e,t){if("function"==typeof WeakMap)var i=new WeakMap,r=new WeakMap;return(_interopRequireWildcard=function(e,t){if(!t&&e&&e.__esModule)return e;var n,a,s={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return s;if(n=t?r:i){if(n.has(e))return n.get(e);n.set(e,s)}for(const t in e)"default"!==t&&{}.hasOwnProperty.call(e,t)&&((a=(n=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,t))&&(a.get||a.set)?n(s,t,a):s[t]=e[t]);return s})(e,t)}const DEFAULT_LONG_PRESS_DELAY=500,DEFAULT_LONG_PRESS_INTERVAL=80,roundToPrecision=(e,t)=>{if(!Number.isFinite(e))return 0;if(t<=0)return Math.round(e);const i=10**t;return Math.round(e*i)/i},clamp=(e,t,i)=>e<t?t:e>i?i:e,formatValue=(e,t,i)=>Number.isFinite(e)?t&&i>0?e.toFixed(i):String(Math.trunc(e)):"",sanitizeTyped=(e,t)=>{if(!e)return"";let i=e.replace(/[^0-9.-]/g,"");if(i=i.replace(/(?!^)-/g,""),t){const e=i.indexOf(".");-1!==e&&(i=i.slice(0,e+1)+i.slice(e+1).replace(/\./g,""))}else i=i.replace(/\./g,"");return i},NumberInput=exports.NumberInput=(0,_react.forwardRef)((e,t)=>{const{value:i,defaultValue:r,onChange:n,min:a=Number.NEGATIVE_INFINITY,max:s=Number.POSITIVE_INFINITY,step:l=1,allowDecimal:c=!1,precision:u=0,label:o,help:d,helperText:b,error:_,disabled:p=!1,size:m="md",variant:f="inline",unit:x,haptic:y,accessibilityLabel:h,style:g,containerStyle:j,inputStyle:N,buttonStyle:S,unitStyle:v,labelStyle:F,textInputProps:I,testID:R}=e,[T,C]=(0,_index.useControllableState)({value:i,defaultValue:r??e.min??0,onChange:n}),P=(0,_index2.useTheme)(),z=(0,_FieldBase.resolveFieldSize)(P,m),w=(0,_FieldBase.resolveFieldTextStyle)(P,{disabled:p}),k=(0,_react.useMemo)(()=>buildStyles(P),[P]),V=P.components.numberInput?.longPressDelayMs??500,L=P.components.numberInput?.longPressIntervalMs??80,B=(0,_react.useRef)(null),[D,E]=(0,_react.useState)(formatValue(T,c,u)),[M,q]=(0,_react.useState)(!1),[O,A]=(0,_react.useState)(!1),W=(0,_react.useCallback)(()=>{p||B.current?.focus()},[p]),H=(0,_react.useRef)(null),G=(0,_react.useRef)(null),Y=(0,_react.useCallback)(()=>{null!==H.current&&(clearTimeout(H.current),H.current=null),null!==G.current&&(clearInterval(G.current),G.current=null)},[]);(0,_react.useEffect)(()=>Y,[Y]),(0,_react.useEffect)(()=>{M||E(formatValue(T,c,u))},[T,c,u,M]);const U=T<=a,$=T>=s,J=!p,K=(0,_react.useCallback)(e=>{const t=roundToPrecision(e,c?u:0),i=clamp(t,a,s);i!==T&&C(i)},[c,s,a,C,u,T]),Q=(0,_react.useCallback)(()=>{if(!J||U)return;const e=(0,_index3.resolveHaptic)(y,"selection");e&&(0,_index3.triggerHaptic)(e),K(T-l)},[U,J,y,K,l,T]),X=(0,_react.useCallback)(()=>{if(!J||$)return;const e=(0,_index3.resolveHaptic)(y,"selection");e&&(0,_index3.triggerHaptic)(e),K(T+l)},[$,J,y,K,l,T]);_react.default.useImperativeHandle(t,()=>({focus:()=>B.current?.focus(),blur:()=>B.current?.blur(),clear:()=>{E(""),Number.isFinite(a)&&a>0?C(a):C(0<a?a:0>s?s:0)}}),[s,a,C]);const Z=(0,_react.useCallback)(e=>{J&&(Y(),H.current=setTimeout(()=>{G.current=setInterval(()=>{"inc"===e?X():Q()},L)},V))},[Y,Q,X,J,V,L]),ee=(0,_react.useCallback)(e=>{const t=sanitizeTyped(e,c);E(t);const i=Number(t);""!==t&&"-"!==t&&"."!==t&&Number.isFinite(i)&&i>=a&&i<=s&&i!==T&&C(roundToPrecision(i,c?u:0))},[c,s,a,C,u,T]),te=(0,_react.useCallback)(()=>{q(!1),A(!1);const e=Number(D);if(""===D||!Number.isFinite(e))return void E(formatValue(T,c,u));const t=roundToPrecision(e,c?u:0),i=clamp(t,a,s);i!==T&&C(i),E(formatValue(i,c,u))},[c,D,s,a,C,u,T]),ie=(0,_react.useCallback)(()=>{q(!0),A(!0)},[]),re=U||p?P.colors.text.disabled:P.colors.text.primary,ne=$||p?P.colors.text.disabled:P.colors.text.primary,ae=z.iconSize+8,renderStepper=(e,t,i,r,n,a)=>(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:t,onLongPress:()=>Z(e),onPressOut:Y,delayLongPress:V,disabled:i,accessibilityRole:"button",accessibilityLabel:r,accessibilityState:{disabled:i},"aria-disabled":i,style:({pressed:e})=>[{width:ae,height:ae,alignItems:"center",justifyContent:"center",borderRadius:ae/2,..._corners.smoothCorners},e&&!i?{backgroundColor:P.colors.surface.pressed}:null,S],testID:`${R??"numberinput"}-${"inc"===e?"plus":"minus"}`,children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:{fontSize:z.iconSize,color:n,fontWeight:P.typography.fontWeight.semibold,lineHeight:z.iconSize+2},children:a})}),se=h??(0,_FieldBase.fieldTextAsString)(o)??"Number input",le=!0===_||(0,_FieldBase.hasFieldText)(_),ce=(0,_jsxRuntime.jsx)(_FieldBase.FieldBase,{size:m,disabled:p,error:le,filled:!0,focused:O,onPress:W,pressFeedback:!1,leading:renderStepper("dec",Q,U||p,"Decrease",re,"−"),trailing:renderStepper("inc",X,$||p,"Increase",ne,"+"),children:(0,_jsxRuntime.jsxs)(_reactNative.View,{style:k.inputRow,children:[(0,_jsxRuntime.jsx)(_reactNative.TextInput,{ref:B,value:D,onChangeText:ee,onFocus:ie,onBlur:te,editable:!p,keyboardType:c?"decimal-pad":"number-pad",selectTextOnFocus:!0,accessibilityRole:"adjustable",accessibilityLabel:se,accessibilityValue:{now:Number.isFinite(T)?T:0},accessibilityState:{disabled:p},"aria-disabled":p,accessibilityActions:[{name:"increment",label:"Increase"},{name:"decrement",label:"Decrease"}],onAccessibilityAction:e=>{"increment"===e.nativeEvent.actionName&&X(),"decrement"===e.nativeEvent.actionName&&Q()},style:[k.input,{fontSize:z.fontSize,color:w.color,...w.weightStyle},N],...I}),x?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[k.unit,{fontSize:z.fontSize,color:w.placeholderColor},v],children:x}):null]})}),ue=(0,_FieldBase.hasFieldText)(o)?(0,_jsxRuntime.jsx)(_FieldBase.FieldLabel,{size:m,help:d,style:F,children:o}):null,oe=(0,_jsxRuntime.jsx)(_FieldBase.FieldMessage,{size:m,error:le,text:le?_:b});return"horizontal"===f?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[k.horizontalContainer,g,j],testID:R,accessibilityState:{disabled:p},"aria-disabled":p,children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:k.horizontalLabelWrap,children:ue}),(0,_jsxRuntime.jsxs)(_reactNative.View,{children:[ce,oe]})]}):(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[g,j],testID:R,accessibilityState:{disabled:p},"aria-disabled":p,children:[ue,ce,oe]})});NumberInput.displayName="NumberInput";const buildStyles=e=>_reactNative.StyleSheet.create({inputRow:{flex:1,flexDirection:"row",alignItems:"center",justifyContent:"center"},input:{flex:1,textAlign:"center",padding:0,margin:0,includeFontPadding:!1},unit:{marginLeft:4},label:{marginBottom:6},helper:{marginTop:6},horizontalContainer:{flexDirection:"row",alignItems:"center",justifyContent:"space-between"},horizontalLabelWrap:{flexShrink:1,paddingRight:12}});var _default=exports.default=NumberInput;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.NumberInput=void 0;var _react=_interopRequireWildcard(require("react")),_reactNative=require("react-native"),_index=require("../../hooks/index.js"),_index2=require("../../theme/index.js"),_index3=require("../../utils/index.js"),_corners=require("../../utils/corners.js"),_FieldBase=require("../FieldBase/FieldBase.js"),_jsxRuntime=require("react/jsx-runtime");function _interopRequireWildcard(e,t){if("function"==typeof WeakMap)var i=new WeakMap,r=new WeakMap;return(_interopRequireWildcard=function(e,t){if(!t&&e&&e.__esModule)return e;var n,a,s={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return s;if(n=t?r:i){if(n.has(e))return n.get(e);n.set(e,s)}for(const t in e)"default"!==t&&{}.hasOwnProperty.call(e,t)&&((a=(n=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,t))&&(a.get||a.set)?n(s,t,a):s[t]=e[t]);return s})(e,t)}const DEFAULT_LONG_PRESS_DELAY=500,DEFAULT_LONG_PRESS_INTERVAL=80,roundToPrecision=(e,t)=>{if(!Number.isFinite(e))return 0;if(t<=0)return Math.round(e);const i=10**t;return Math.round(e*i)/i},clamp=(e,t,i)=>e<t?t:e>i?i:e,formatValue=(e,t,i)=>Number.isFinite(e)?t&&i>0?e.toFixed(i):String(Math.trunc(e)):"",sanitizeTyped=(e,t)=>{if(!e)return"";let i=e.replace(/[^0-9.-]/g,"");if(i=i.replace(/(?!^)-/g,""),t){const e=i.indexOf(".");-1!==e&&(i=i.slice(0,e+1)+i.slice(e+1).replace(/\./g,""))}else i=i.replace(/\./g,"");return i},NumberInput=exports.NumberInput=(0,_react.forwardRef)((e,t)=>{const{value:i,defaultValue:r,onChange:n,min:a=Number.NEGATIVE_INFINITY,max:s=Number.POSITIVE_INFINITY,step:l=1,allowDecimal:c=!1,precision:u=0,label:o,help:d,helperText:b,error:p,disabled:_=!1,size:m="md",variant:x="inline",unit:f,haptic:y,accessibilityLabel:g,style:h,containerStyle:j,inputStyle:N,buttonStyle:v,unitStyle:I,labelStyle:F,textInputProps:S,testID:R}=e,[T,C]=(0,_index.useControllableState)({value:i,defaultValue:r??e.min??0,onChange:n}),P=(0,_index2.useTheme)(),w=(0,_index2.resolveFieldSize)(P,m),k=(0,_FieldBase.resolveFieldTextStyle)(P,{disabled:_}),V=(0,_react.useMemo)(()=>buildStyles(P),[P]),z=P.components.numberInput?.longPressDelayMs??500,L=P.components.numberInput?.longPressIntervalMs??80,D=(0,_react.useRef)(null),[B,E]=(0,_react.useState)(formatValue(T,c,u)),[M,q]=(0,_react.useState)(!1),[O,A]=(0,_react.useState)(!1),W=(0,_react.useCallback)(()=>{_||D.current?.focus()},[_]),H=(0,_react.useRef)(null),G=(0,_react.useRef)(null),Y=(0,_react.useCallback)(()=>{null!==H.current&&(clearTimeout(H.current),H.current=null),null!==G.current&&(clearInterval(G.current),G.current=null)},[]);(0,_react.useEffect)(()=>Y,[Y]),(0,_react.useEffect)(()=>{M||E(formatValue(T,c,u))},[T,c,u,M]);const U=T<=a,$=T>=s,J=!_,K=(0,_react.useCallback)(e=>{const t=roundToPrecision(e,c?u:0),i=clamp(t,a,s);i!==T&&C(i)},[c,s,a,C,u,T]),Q=(0,_react.useCallback)(()=>{if(!J||U)return;const e=(0,_index3.resolveHaptic)(y,"selection");e&&(0,_index3.triggerHaptic)(e),K(T-l)},[U,J,y,K,l,T]),X=(0,_react.useCallback)(()=>{if(!J||$)return;const e=(0,_index3.resolveHaptic)(y,"selection");e&&(0,_index3.triggerHaptic)(e),K(T+l)},[$,J,y,K,l,T]);_react.default.useImperativeHandle(t,()=>({focus:()=>D.current?.focus(),blur:()=>D.current?.blur(),clear:()=>{E(""),Number.isFinite(a)&&a>0?C(a):C(0<a?a:0>s?s:0)}}),[s,a,C]);const Z=(0,_react.useCallback)(e=>{J&&(Y(),H.current=setTimeout(()=>{G.current=setInterval(()=>{"inc"===e?X():Q()},L)},z))},[Y,Q,X,J,z,L]),ee=(0,_react.useCallback)(e=>{const t=sanitizeTyped(e,c);E(t);const i=Number(t);""!==t&&"-"!==t&&"."!==t&&Number.isFinite(i)&&i>=a&&i<=s&&i!==T&&C(roundToPrecision(i,c?u:0))},[c,s,a,C,u,T]),te=(0,_react.useCallback)(()=>{q(!1),A(!1);const e=Number(B);if(""===B||!Number.isFinite(e))return void E(formatValue(T,c,u));const t=roundToPrecision(e,c?u:0),i=clamp(t,a,s);i!==T&&C(i),E(formatValue(i,c,u))},[c,B,s,a,C,u,T]),ie=(0,_react.useCallback)(()=>{q(!0),A(!0)},[]),re=U||_?P.colors.text.disabled:P.colors.text.primary,ne=$||_?P.colors.text.disabled:P.colors.text.primary,ae=w.icon+8,renderStepper=(e,t,i,r,n,a)=>(0,_jsxRuntime.jsx)(_reactNative.Pressable,{onPress:t,onLongPress:()=>Z(e),onPressOut:Y,delayLongPress:z,disabled:i,accessibilityRole:"button",accessibilityLabel:r,accessibilityState:{disabled:i},"aria-disabled":i,style:({pressed:e})=>[{width:ae,height:ae,alignItems:"center",justifyContent:"center",borderRadius:P.radius.pill,..._corners.smoothCorners},e&&!i?{backgroundColor:P.colors.surface.pressed}:null,v],testID:`${R??"numberinput"}-${"inc"===e?"plus":"minus"}`,children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:{fontSize:w.icon,color:n,fontWeight:P.typography.fontWeight.semibold,lineHeight:w.icon+2},children:a})}),se=g??(0,_FieldBase.fieldTextAsString)(o)??"Number input",le=!0===p||(0,_FieldBase.hasFieldText)(p),ce=(0,_jsxRuntime.jsx)(_FieldBase.FieldBase,{size:m,disabled:_,error:le,filled:!0,focused:O,onPress:W,pressFeedback:!1,leading:renderStepper("dec",Q,U||_,"Decrease",re,"−"),trailing:renderStepper("inc",X,$||_,"Increase",ne,"+"),children:(0,_jsxRuntime.jsxs)(_reactNative.View,{style:V.inputRow,children:[(0,_jsxRuntime.jsx)(_reactNative.TextInput,{ref:D,value:B,onChangeText:ee,onFocus:ie,onBlur:te,editable:!_,keyboardType:c?"decimal-pad":"number-pad",selectTextOnFocus:!0,accessibilityRole:"adjustable",accessibilityLabel:se,accessibilityValue:{now:Number.isFinite(T)?T:0},accessibilityState:{disabled:_},"aria-disabled":_,accessibilityActions:[{name:"increment",label:"Increase"},{name:"decrement",label:"Decrease"}],onAccessibilityAction:e=>{"increment"===e.nativeEvent.actionName&&X(),"decrement"===e.nativeEvent.actionName&&Q()},style:[V.input,{fontSize:w.text,color:k.color,...k.weightStyle},N],...S}),f?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[V.unit,{fontSize:w.text,color:k.placeholderColor},I],children:f}):null]})}),ue=(0,_FieldBase.hasFieldText)(o)?(0,_jsxRuntime.jsx)(_FieldBase.FieldLabel,{size:m,help:d,style:F,children:o}):null,oe=(0,_jsxRuntime.jsx)(_FieldBase.FieldMessage,{size:m,error:le,text:le?p:b});return"horizontal"===x?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[V.horizontalContainer,h,j],testID:R,accessibilityState:{disabled:_},"aria-disabled":_,children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:V.horizontalLabelWrap,children:ue}),(0,_jsxRuntime.jsxs)(_reactNative.View,{children:[ce,oe]})]}):(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[h,j],testID:R,accessibilityState:{disabled:_},"aria-disabled":_,children:[ue,ce,oe]})});NumberInput.displayName="NumberInput";const buildStyles=e=>_reactNative.StyleSheet.create({inputRow:{flex:1,flexDirection:"row",alignItems:"center",justifyContent:"center"},input:{flex:1,textAlign:"center",padding:e.spacing.none,margin:e.spacing.none,includeFontPadding:!1},unit:{marginLeft:e.spacing.xs},label:{marginBottom:e.spacing.xs},helper:{marginTop:e.spacing.xs},horizontalContainer:{flexDirection:"row",alignItems:"center",justifyContent:"space-between"},horizontalLabelWrap:{flexShrink:1,paddingRight:e.spacing.md}});var _default=exports.default=NumberInput;