@neko-os/ui 0.0.13 → 0.2.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 (239) hide show
  1. package/dist/NekoUI.js +1 -1
  2. package/dist/abstractions/FlatList.native.js +1 -1
  3. package/dist/abstractions/KeyboardAvoidingView.js +1 -0
  4. package/dist/abstractions/KeyboardAvoidingView.native.js +1 -0
  5. package/dist/abstractions/ScrollView.native.js +1 -1
  6. package/dist/components/actions/ActionsDrawer.js +1 -0
  7. package/dist/components/actions/Button.js +1 -1
  8. package/dist/components/actions/FloatingMenu.js +1 -0
  9. package/dist/components/actions/index.js +1 -1
  10. package/dist/components/animations/AnimatedTopBar.js +1 -0
  11. package/dist/components/animations/AnimatedTopBar.native.js +1 -0
  12. package/dist/components/animations/AnimatedTopBar.web.js +1 -0
  13. package/dist/components/animations/ParallaxHeader.js +1 -0
  14. package/dist/components/animations/ParallaxHeader.native.js +1 -0
  15. package/dist/components/animations/ParallaxHeader.web.js +1 -0
  16. package/dist/components/animations/ReanimatedScrollHandler.js +1 -0
  17. package/dist/components/animations/ReanimatedScrollHandler.native.js +1 -0
  18. package/dist/components/animations/ReanimatedScrollHandler.web.js +1 -0
  19. package/dist/components/animations/index.js +1 -1
  20. package/dist/components/feedback/alerter.js +1 -1
  21. package/dist/components/feedback/confirmer.js +1 -1
  22. package/dist/components/form/FormItem.js +1 -1
  23. package/dist/components/form/FormList.js +1 -1
  24. package/dist/components/form/SubmitButton.js +1 -1
  25. package/dist/components/form/index.js +1 -1
  26. package/dist/components/form/useNewForm.js +1 -1
  27. package/dist/components/form/validation/defaultMessages.js +1 -0
  28. package/dist/components/form/validation/index.js +1 -0
  29. package/dist/components/form/validation/normalizeRules.js +1 -0
  30. package/dist/components/form/validation/shouldValidateOn.js +1 -0
  31. package/dist/components/form/validation/validateRules.js +1 -0
  32. package/dist/components/form/validation/validators.js +1 -0
  33. package/dist/components/index.js +1 -1
  34. package/dist/components/inputs/InputWrapper.js +1 -1
  35. package/dist/components/inputs/NumberInput.js +1 -1
  36. package/dist/components/inputs/Picker.js +1 -1
  37. package/dist/components/inputs/Select.js +1 -1
  38. package/dist/components/modals/bottomDrawer/index.js +1 -0
  39. package/dist/components/modals/bottomDrawer/index.native.js +1 -0
  40. package/dist/components/modals/bottomDrawer/index.web.js +1 -0
  41. package/dist/components/modals/bottomDrawer/native/BottomDrawer.js +1 -0
  42. package/dist/components/modals/bottomDrawer/native/DrawerContext.js +1 -0
  43. package/dist/components/modals/bottomDrawer/native/DrawerHandle.js +1 -0
  44. package/dist/components/modals/bottomDrawer/native/DrawerScrollView.js +1 -0
  45. package/dist/components/modals/bottomDrawer/native/createDrawerScrollComponent.js +1 -0
  46. package/dist/components/modals/bottomDrawer/web/BottomDrawer.js +1 -0
  47. package/dist/components/modals/drawer/Drawer.js +1 -0
  48. package/dist/components/modals/index.js +1 -0
  49. package/dist/components/modals/modal/Modal.js +1 -0
  50. package/dist/components/modals/modal/Modal.native.js +1 -0
  51. package/dist/components/modals/modal/ModalBackdrop.js +1 -0
  52. package/dist/components/modals/modal/ModalContent.js +1 -0
  53. package/dist/components/modals/modal/ModalFooter.js +1 -0
  54. package/dist/components/modals/modal/ModalHeader.js +1 -0
  55. package/dist/components/modals/modal/handler/ModalsHandler.js +1 -0
  56. package/dist/components/modals/router/ModalRoute.js +1 -0
  57. package/dist/components/modals/router/ModalsRouter.js +1 -0
  58. package/dist/components/modals/router/ModalsRouterContext.js +1 -0
  59. package/dist/components/modals/router/index.js +1 -0
  60. package/dist/components/modals/router/useAllModalsParams.js +1 -0
  61. package/dist/components/modals/router/useModalParams.js +1 -0
  62. package/dist/components/modals/router/useModalsNavigation.js +1 -0
  63. package/dist/components/modals/router/useUpdateModalContainer.js +1 -0
  64. package/dist/components/presentation/Avatar.js +1 -1
  65. package/dist/components/presentation/AvatarLabel.js +1 -1
  66. package/dist/components/presentation/LabelValue.js +1 -1
  67. package/dist/components/presentation/Result.js +1 -1
  68. package/dist/components/presentation/Tooltip.js +1 -1
  69. package/dist/components/sections/Section.js +1 -0
  70. package/dist/components/sections/SectionItem.js +1 -0
  71. package/dist/components/sections/SectionItemDropdown.js +1 -0
  72. package/dist/components/sections/SectionItemLink.js +1 -0
  73. package/dist/components/sections/index.js +1 -0
  74. package/dist/components/state/StatePresenter.js +1 -0
  75. package/dist/components/state/index.js +1 -1
  76. package/dist/components/structure/BlurView.js +1 -1
  77. package/dist/components/structure/KeyboardAvoidingView.js +1 -0
  78. package/dist/components/structure/TopBar.js +1 -0
  79. package/dist/components/structure/index.js +1 -1
  80. package/dist/components/structure/popover/Popover.js +1 -1
  81. package/dist/components/structure/popover/Popover.native.js +1 -1
  82. package/dist/components/structure/popover/Popover_BU.js +1 -1
  83. package/dist/components/text/DateText.js +1 -0
  84. package/dist/components/text/index.js +1 -1
  85. package/dist/components/theme/ThemePicker.js +1 -1
  86. package/dist/components/theme/ThemePickerDrawer.js +1 -1
  87. package/dist/helpers/index.js +1 -1
  88. package/dist/helpers/storage.js +1 -1
  89. package/dist/responsive/responsiveHooks.js +1 -1
  90. package/dist/theme/ThemeHandler.js +1 -1
  91. package/dist/theme/default/base.js +1 -1
  92. package/dist/theme/default/blackTheme.js +1 -1
  93. package/dist/theme/default/cyberpunkTheme.js +1 -1
  94. package/dist/theme/default/darkTheme.js +1 -1
  95. package/dist/theme/default/hackerTheme.js +1 -1
  96. package/dist/theme/default/lightTheme.js +1 -1
  97. package/dist/theme/default/paperTheme.js +1 -1
  98. package/dist/theme/default/themes.js +1 -1
  99. package/package.json +1 -1
  100. package/src/NekoUI.js +1 -1
  101. package/src/abstractions/FlatList.native.js +2 -1
  102. package/src/abstractions/KeyboardAvoidingView.js +3 -0
  103. package/src/abstractions/KeyboardAvoidingView.native.js +3 -0
  104. package/src/abstractions/ScrollView.native.js +2 -2
  105. package/src/components/actions/ActionsDrawer.js +68 -0
  106. package/src/components/actions/Button.js +2 -1
  107. package/src/components/actions/FloatingMenu.js +39 -0
  108. package/src/components/actions/index.js +2 -0
  109. package/src/components/animations/AnimatedTopBar.js +10 -0
  110. package/src/components/animations/AnimatedTopBar.native.js +34 -0
  111. package/src/components/animations/AnimatedTopBar.web.js +1 -0
  112. package/src/components/animations/ParallaxHeader.js +9 -0
  113. package/src/components/animations/ParallaxHeader.native.js +32 -0
  114. package/src/components/animations/ParallaxHeader.web.js +32 -0
  115. package/src/components/animations/ReanimatedScrollHandler.js +8 -0
  116. package/src/components/animations/ReanimatedScrollHandler.native.js +24 -0
  117. package/src/components/animations/ReanimatedScrollHandler.web.js +1 -0
  118. package/src/components/animations/index.js +3 -0
  119. package/src/components/feedback/alerter.js +1 -1
  120. package/src/components/feedback/confirmer.js +1 -1
  121. package/src/components/form/FormItem.js +42 -5
  122. package/src/components/form/FormList.js +23 -4
  123. package/src/components/form/SubmitButton.js +4 -2
  124. package/src/components/form/index.js +1 -0
  125. package/src/components/form/useNewForm.js +108 -15
  126. package/src/components/form/validation/defaultMessages.js +20 -0
  127. package/src/components/form/validation/index.js +5 -0
  128. package/src/components/form/validation/normalizeRules.js +22 -0
  129. package/src/components/form/validation/shouldValidateOn.js +21 -0
  130. package/src/components/form/validation/validateRules.js +83 -0
  131. package/src/components/form/validation/validators.js +82 -0
  132. package/src/components/index.js +2 -0
  133. package/src/components/inputs/InputWrapper.js +1 -1
  134. package/src/components/inputs/NumberInput.js +6 -5
  135. package/src/components/inputs/Picker.js +3 -2
  136. package/src/components/inputs/Select.js +31 -15
  137. package/src/components/modals/bottomDrawer/index.js +3 -0
  138. package/src/components/{structure → modals}/bottomDrawer/index.native.js +2 -1
  139. package/src/components/{structure → modals}/bottomDrawer/index.web.js +2 -1
  140. package/src/components/{structure → modals}/bottomDrawer/native/BottomDrawer.js +15 -21
  141. package/src/components/{structure → modals}/bottomDrawer/native/DrawerHandle.js +1 -1
  142. package/src/components/modals/bottomDrawer/native/DrawerScrollView.js +5 -0
  143. package/src/components/modals/bottomDrawer/native/createDrawerScrollComponent.js +131 -0
  144. package/src/components/modals/index.js +4 -0
  145. package/src/components/{structure → modals}/modal/Modal.native.js +1 -1
  146. package/src/components/{structure → modals}/modal/ModalBackdrop.js +1 -1
  147. package/src/components/{structure → modals}/modal/ModalContent.js +1 -1
  148. package/src/components/{structure → modals}/modal/ModalFooter.js +1 -1
  149. package/src/components/{structure → modals}/modal/ModalHeader.js +1 -1
  150. package/src/components/modals/router/ModalRoute.js +15 -0
  151. package/src/components/modals/router/ModalsRouter.js +120 -0
  152. package/src/components/modals/router/ModalsRouterContext.js +16 -0
  153. package/src/components/modals/router/index.js +6 -0
  154. package/src/components/modals/router/useAllModalsParams.js +6 -0
  155. package/src/components/modals/router/useModalParams.js +6 -0
  156. package/src/components/modals/router/useModalsNavigation.js +6 -0
  157. package/src/components/modals/router/useUpdateModalContainer.js +6 -0
  158. package/src/components/presentation/Avatar.js +2 -2
  159. package/src/components/presentation/AvatarLabel.js +2 -0
  160. package/src/components/presentation/LabelValue.js +7 -5
  161. package/src/components/presentation/Result.js +2 -2
  162. package/src/components/presentation/Tooltip.js +1 -1
  163. package/src/components/sections/Section.js +50 -0
  164. package/src/components/sections/SectionItem.js +24 -0
  165. package/src/components/sections/SectionItemDropdown.js +68 -0
  166. package/src/components/sections/SectionItemLink.js +33 -0
  167. package/src/components/sections/index.js +4 -0
  168. package/src/components/state/StatePresenter.js +41 -0
  169. package/src/components/state/index.js +1 -0
  170. package/src/components/structure/BlurView.js +1 -0
  171. package/src/components/structure/KeyboardAvoidingView.js +52 -0
  172. package/src/components/structure/TopBar.js +45 -0
  173. package/src/components/structure/index.js +2 -3
  174. package/src/components/structure/popover/Popover.js +1 -1
  175. package/src/components/structure/popover/Popover.native.js +1 -1
  176. package/src/components/structure/popover/Popover_BU.js +1 -1
  177. package/src/components/text/DateText.js +11 -0
  178. package/src/components/text/index.js +1 -0
  179. package/src/components/theme/ThemePicker.js +1 -2
  180. package/src/components/theme/ThemePickerDrawer.js +3 -4
  181. package/src/helpers/index.js +1 -0
  182. package/src/helpers/storage.js +32 -9
  183. package/src/responsive/responsiveHooks.js +6 -0
  184. package/src/theme/ThemeHandler.js +6 -3
  185. package/src/theme/default/base.js +16 -4
  186. package/src/theme/default/blackTheme.js +33 -21
  187. package/src/theme/default/cyberpunkTheme.js +24 -22
  188. package/src/theme/default/darkTheme.js +1 -0
  189. package/src/theme/default/hackerTheme.js +40 -19
  190. package/src/theme/default/lightTheme.js +1 -0
  191. package/src/theme/default/paperTheme.js +14 -0
  192. package/src/theme/default/themes.js +0 -9
  193. package/dist/components/structure/bottomDrawer/index.js +0 -1
  194. package/dist/components/structure/bottomDrawer/index.native.js +0 -1
  195. package/dist/components/structure/bottomDrawer/index.web.js +0 -1
  196. package/dist/components/structure/bottomDrawer/native/BottomDrawer.js +0 -1
  197. package/dist/components/structure/bottomDrawer/native/DrawerContext.js +0 -1
  198. package/dist/components/structure/bottomDrawer/native/DrawerHandle.js +0 -1
  199. package/dist/components/structure/bottomDrawer/native/DrawerScrollView.js +0 -1
  200. package/dist/components/structure/bottomDrawer/web/BottomDrawer.js +0 -1
  201. package/dist/components/structure/drawer/Drawer.js +0 -1
  202. package/dist/components/structure/modal/Modal.js +0 -1
  203. package/dist/components/structure/modal/Modal.native.js +0 -1
  204. package/dist/components/structure/modal/ModalBackdrop.js +0 -1
  205. package/dist/components/structure/modal/ModalContent.js +0 -1
  206. package/dist/components/structure/modal/ModalFooter.js +0 -1
  207. package/dist/components/structure/modal/ModalHeader.js +0 -1
  208. package/dist/components/structure/modal/handler/ModalsHandler.js +0 -1
  209. package/dist/theme/default/deepWoodsTheme.js +0 -1
  210. package/dist/theme/default/forestTheme.js +0 -1
  211. package/dist/theme/default/midnightTheme.js +0 -1
  212. package/dist/theme/default/msdosTheme.js +0 -1
  213. package/dist/theme/default/oceanTheme.js +0 -1
  214. package/dist/theme/default/pastelTheme.js +0 -1
  215. package/dist/theme/default/sunsetTheme.js +0 -1
  216. package/src/components/structure/bottomDrawer/index.js +0 -1
  217. package/src/components/structure/bottomDrawer/native/DrawerScrollView.js +0 -83
  218. package/src/theme/default/deepWoodsTheme.js +0 -34
  219. package/src/theme/default/forestTheme.js +0 -34
  220. package/src/theme/default/midnightTheme.js +0 -34
  221. package/src/theme/default/msdosTheme.js +0 -55
  222. package/src/theme/default/oceanTheme.js +0 -34
  223. package/src/theme/default/pastelTheme.js +0 -34
  224. package/src/theme/default/sunsetTheme.js +0 -35
  225. /package/dist/components/{structure → modals}/bottomDrawer/native/utils.js +0 -0
  226. /package/dist/components/{structure → modals}/drawer/Drawer.native.js +0 -0
  227. /package/dist/components/{structure → modals}/drawer/Drawer.web.js +0 -0
  228. /package/dist/components/{structure → modals}/drawer/index.js +0 -0
  229. /package/dist/components/{structure → modals}/modal/index.js +0 -0
  230. /package/src/components/{structure → modals}/bottomDrawer/native/DrawerContext.js +0 -0
  231. /package/src/components/{structure → modals}/bottomDrawer/native/utils.js +0 -0
  232. /package/src/components/{structure → modals}/bottomDrawer/web/BottomDrawer.js +0 -0
  233. /package/src/components/{structure → modals}/drawer/Drawer.js +0 -0
  234. /package/src/components/{structure → modals}/drawer/Drawer.native.js +0 -0
  235. /package/src/components/{structure → modals}/drawer/Drawer.web.js +0 -0
  236. /package/src/components/{structure → modals}/drawer/index.js +0 -0
  237. /package/src/components/{structure → modals}/modal/Modal.js +0 -0
  238. /package/src/components/{structure → modals}/modal/handler/ModalsHandler.js +0 -0
  239. /package/src/components/{structure → modals}/modal/index.js +0 -0
package/dist/NekoUI.js CHANGED
@@ -1 +1 @@
1
- import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/NekoUI.js";var _excluded=["children","i18n"];import{DynamicStyleTag}from"./DynamicStyleTag";import{I18nProvider}from"./i18n";import{ModalsHandler}from"./components/structure/modal/handler/ModalsHandler";import{NotificationsHandler}from"./components/feedback/notifications/NotificationsHandler";import{OverlayHandler}from"./components/structure/overlay/OverlayHandler";import{PortalHandler}from"./components/helpers/PortalHandler";import{ResponsiveHandler}from"./responsive/ResponsiveHandler";import{ThemeHandler}from"./theme/ThemeHandler";import{ThemePickerDrawer}from"./components/theme";import{useThemeHandler}from"./theme";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";export function NekoUI(_ref){var children=_ref.children,i18n=_ref.i18n,props=_objectWithoutProperties(_ref,_excluded);return _jsxs(ThemeHandler,Object.assign({},props,{children:[_jsx(DynamicStyleTag,{}),_jsx(ResponsiveHandler,{children:_jsx(PortalHandler,{children:_jsx(ModalsHandler,{children:_jsx(I18nProvider,{i18n:i18n,children:_jsx(NotificationsHandler,{children:_jsxs(OverlayHandler,{children:[children,_jsx(FixedComponents,{})]})})})})})})]}));}function FixedComponents(){var _useThemeHandler=useThemeHandler(),themePickerOpen=_useThemeHandler.themePickerOpen,setThemePickerOpen=_useThemeHandler.setThemePickerOpen;return _jsx(ThemePickerDrawer,{open:themePickerOpen,onClose:function onClose(){return setThemePickerOpen(false);}});}
1
+ import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/NekoUI.js";var _excluded=["children","i18n"];import{DynamicStyleTag}from"./DynamicStyleTag";import{I18nProvider}from"./i18n";import{ModalsHandler}from"./components/modals/modal/handler/ModalsHandler";import{NotificationsHandler}from"./components/feedback/notifications/NotificationsHandler";import{OverlayHandler}from"./components/structure/overlay/OverlayHandler";import{PortalHandler}from"./components/helpers/PortalHandler";import{ResponsiveHandler}from"./responsive/ResponsiveHandler";import{ThemeHandler}from"./theme/ThemeHandler";import{ThemePickerDrawer}from"./components/theme";import{useThemeHandler}from"./theme";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";export function NekoUI(_ref){var children=_ref.children,i18n=_ref.i18n,props=_objectWithoutProperties(_ref,_excluded);return _jsxs(ThemeHandler,Object.assign({},props,{children:[_jsx(DynamicStyleTag,{}),_jsx(ResponsiveHandler,{children:_jsx(PortalHandler,{children:_jsx(ModalsHandler,{children:_jsx(I18nProvider,{i18n:i18n,children:_jsx(NotificationsHandler,{children:_jsxs(OverlayHandler,{children:[children,_jsx(FixedComponents,{})]})})})})})})]}));}function FixedComponents(){var _useThemeHandler=useThemeHandler(),themePickerOpen=_useThemeHandler.themePickerOpen,setThemePickerOpen=_useThemeHandler.setThemePickerOpen;return _jsx(ThemePickerDrawer,{open:themePickerOpen,onClose:function onClose(){return setThemePickerOpen(false);}});}
@@ -1 +1 @@
1
- import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _excluded=["height","width"],_excluded2=["style","ItemSeparatorComponent","Separator","renderSeparator","ListEmptyComponent","Empty","renderEmpty","ListFooterComponent","Footer","renderFooter","ListHeaderComponent","Header","renderHeader"];var _this=this,_jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/abstractions/FlatList.native.js";import{FlatList}from"react-native-web";import{jsx as _jsx}from"react/jsx-runtime";export var AbsFlatList=function AbsFlatList(_ref){var _ref$style=_ref.style,height=_ref$style.height,width=_ref$style.width,style=_objectWithoutProperties(_ref$style,_excluded),ItemSeparatorComponent=_ref.ItemSeparatorComponent,Separator=_ref.Separator,renderSeparator=_ref.renderSeparator,ListEmptyComponent=_ref.ListEmptyComponent,Empty=_ref.Empty,renderEmpty=_ref.renderEmpty,ListFooterComponent=_ref.ListFooterComponent,Footer=_ref.Footer,renderFooter=_ref.renderFooter,ListHeaderComponent=_ref.ListHeaderComponent,Header=_ref.Header,renderHeader=_ref.renderHeader,props=_objectWithoutProperties(_ref,_excluded2);ItemSeparatorComponent=ItemSeparatorComponent||Separator||renderSeparator;ListEmptyComponent=ListEmptyComponent||Empty||renderEmpty;ListFooterComponent=ListFooterComponent||Footer||renderFooter;ListHeaderComponent=ListHeaderComponent||Header||renderHeader;return _jsx(FlatList,Object.assign({height:height,width:width},props,{ItemSeparatorComponent:ItemSeparatorComponent,ListEmptyComponent:ListEmptyComponent,ListFooterComponent:ListFooterComponent,ListHeaderComponent:ListHeaderComponent,contentContainerStyle:style}));};
1
+ import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _excluded=["height","width","flex"],_excluded2=["style","ItemSeparatorComponent","Separator","renderSeparator","ListEmptyComponent","Empty","renderEmpty","ListFooterComponent","Footer","renderFooter","ListHeaderComponent","Header","renderHeader"];var _this=this,_jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/abstractions/FlatList.native.js";import{FlatList}from"react-native-web";import{jsx as _jsx}from"react/jsx-runtime";export var AbsFlatList=function AbsFlatList(_ref){var _ref$style=_ref.style,height=_ref$style.height,width=_ref$style.width,flex=_ref$style.flex,style=_objectWithoutProperties(_ref$style,_excluded),ItemSeparatorComponent=_ref.ItemSeparatorComponent,Separator=_ref.Separator,renderSeparator=_ref.renderSeparator,ListEmptyComponent=_ref.ListEmptyComponent,Empty=_ref.Empty,renderEmpty=_ref.renderEmpty,ListFooterComponent=_ref.ListFooterComponent,Footer=_ref.Footer,renderFooter=_ref.renderFooter,ListHeaderComponent=_ref.ListHeaderComponent,Header=_ref.Header,renderHeader=_ref.renderHeader,props=_objectWithoutProperties(_ref,_excluded2);ItemSeparatorComponent=ItemSeparatorComponent||Separator||renderSeparator;ListEmptyComponent=ListEmptyComponent||Empty||renderEmpty;ListFooterComponent=ListFooterComponent||Footer||renderFooter;ListHeaderComponent=ListHeaderComponent||Header||renderHeader;return _jsx(FlatList,Object.assign({height:height,width:width,style:{flex:flex}},props,{ItemSeparatorComponent:ItemSeparatorComponent,ListEmptyComponent:ListEmptyComponent,ListFooterComponent:ListFooterComponent,ListHeaderComponent:ListHeaderComponent,contentContainerStyle:style}));};
@@ -0,0 +1 @@
1
+ import{AbsView}from"./View";export var AbsKeyboardAvoidingView=AbsView;
@@ -0,0 +1 @@
1
+ import{KeyboardAvoidingView}from"react-native-web";export var AbsKeyboardAvoidingView=KeyboardAvoidingView;
@@ -1 +1 @@
1
- import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _excluded=["height","width"],_excluded2=["style"];var _this=this,_jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/abstractions/ScrollView.native.js";import{ScrollView}from"react-native-web";import{jsx as _jsx}from"react/jsx-runtime";export var AbsScrollView=function AbsScrollView(_ref){var _ref$style=_ref.style,height=_ref$style.height,width=_ref$style.width,style=_objectWithoutProperties(_ref$style,_excluded),props=_objectWithoutProperties(_ref,_excluded2);return _jsx(ScrollView,Object.assign({height:height,width:width},props,{contentContainerStyle:style}));};
1
+ import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _excluded=["height","width","flex"],_excluded2=["style"];var _this=this,_jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/abstractions/ScrollView.native.js";import{ScrollView}from"react-native-web";import{jsx as _jsx}from"react/jsx-runtime";export var AbsScrollView=function AbsScrollView(_ref){var _ref$style=_ref.style,height=_ref$style.height,width=_ref$style.width,flex=_ref$style.flex,style=_objectWithoutProperties(_ref$style,_excluded),props=_objectWithoutProperties(_ref,_excluded2);return _jsx(ScrollView,Object.assign({height:height,width:width,style:{flex:flex}},props,{contentContainerStyle:style}));};
@@ -0,0 +1 @@
1
+ import _objectDestructuringEmpty from"@babel/runtime/helpers/objectDestructuringEmpty";import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _excluded=["items","onChange","title","subtitle","onClose"],_excluded2=["topBarProps","menuProps"];var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/actions/ActionsDrawer.js";import{pipe}from'ramda';import{TopBar,View}from"../structure";import{BottomDrawer,DrawerScrollView}from"../modals/bottomDrawer";import{Menu}from"./menu/Menu";import{Section}from"../sections";import{useDefaultModifier}from"../../modifiers/default";import{useThemeComponentModifier}from"../../modifiers/themeComponent";import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from"react/jsx-runtime";var DEFAULT_PROPS={useSafeArea:false,bg:'mainBG',topBarProps:{useSafeArea:false},menuProps:{vertical:true,linkPaddingH:'md',linkMinHeight:'xl',withDivider:true}};function Content(_ref){var items=_ref.items,title=_ref.title,subtitle=_ref.subtitle,onClose=_ref.onClose,onChange=_ref.onChange,topBarProps=_ref.topBarProps,menuProps=_ref.menuProps;var handleChange=function handleChange(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++){params[_key]=arguments[_key];}onChange==null?void 0:onChange.apply(void 0,params);onClose();};return _jsxs(_Fragment,{children:[_jsx(TopBar,Object.assign({title:title,subtitle:subtitle},topBarProps)),_jsx(View,{flex:true,children:_jsxs(DrawerScrollView,{children:[!title&&_jsx(View,{paddingT:"md"}),_jsx(Section,{children:_jsx(Menu,Object.assign({items:items,onChange:handleChange},menuProps))}),_jsx(View,{height:100})]})})]});}export function ActionsDrawer(_ref2){var items=_ref2.items,onChange=_ref2.onChange,title=_ref2.title,subtitle=_ref2.subtitle,onClose=_ref2.onClose,rootProps=_objectWithoutProperties(_ref2,_excluded);var _pipe=pipe(useThemeComponentModifier('ActionsDrawer'),useDefaultModifier(DEFAULT_PROPS))([{},rootProps]),_pipe2=_slicedToArray(_pipe,2);_objectDestructuringEmpty(_pipe2[0]);var formattedProps=_pipe2[1];var topBarProps=formattedProps.topBarProps,menuProps=formattedProps.menuProps,props=_objectWithoutProperties(formattedProps,_excluded2);return _jsx(BottomDrawer,Object.assign({onClose:onClose},props,{children:_jsx(Content,{onClose:onClose,topBarProps:topBarProps,menuProps:menuProps,title:title,subtitle:subtitle,onChange:onChange,items:items})}));}
@@ -1 +1 @@
1
- import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";import _slicedToArray from"@babel/runtime/helpers/slicedToArray";var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/actions/Button.js";var _excluded=["children"],_excluded2=["label","icon","textProps","iconProps","gap","invert","size"];import{pipe}from'ramda';import{AbsTouchableOpacity}from"../../abstractions/TouchableOpacity";import{IconLabel}from"../presentation/IconLabel";import{useBackgroundModifier}from"../../modifiers/background";import{useBorderModifier}from"../../modifiers/border";import{useColorConverter}from"../../modifiers/colorConverter";import{useCursorModifier}from"../../modifiers/cursor";import{useDefaultModifier}from"../../modifiers/default";import{useDisplayModifier}from"../../modifiers/display";import{useFlexModifier}from"../../modifiers/flex";import{useFlexWrapperModifier}from"../../modifiers/flexWrapper";import{useFullColorModifier}from"../../modifiers/fullColor";import{useHoverConverter}from"../../modifiers/hover";import{useMarginModifier}from"../../modifiers/margin";import{usePaddingModifier}from"../../modifiers/padding";import{usePositionModifier}from"../../modifiers/position";import{useSizeConverter}from"../../modifiers/sizeConverter";import{useSizeModifier}from"../../modifiers/size";import{useStateModifier}from"../../modifiers/state";import{useThemeComponentModifier}from"../../modifiers/themeComponent";import{jsx as _jsx}from"react/jsx-runtime";var DEFAULT_PROPS=function DEFAULT_PROPS(_ref){var _ref2=_slicedToArray(_ref,1),sizeCode=_ref2[0].sizeCode;return{paddingH:sizeCode,paddingV:2,height:sizeCode,br:sizeCode,border:1,center:true,pointer:true,hover:{opacity:0.7}};};export function Button(_ref3){var children=_ref3.children,rootProps=_objectWithoutProperties(_ref3,_excluded);var _pipe=pipe(useColorConverter('primary'),useSizeConverter('elementHeights','md'),useThemeComponentModifier('Button'),useDefaultModifier(DEFAULT_PROPS),useHoverConverter,useCursorModifier,useFullColorModifier,useDisplayModifier,useStateModifier,useSizeModifier,usePositionModifier,usePaddingModifier,useMarginModifier,useFlexModifier,useFlexWrapperModifier,useBackgroundModifier,useBorderModifier)([{},rootProps]),_pipe2=_slicedToArray(_pipe,2),_pipe2$=_pipe2[0],loading=_pipe2$.loading,fontColor=_pipe2$.fontColor,sizeCode=_pipe2$.sizeCode,formattedProps=_pipe2[1];var label=formattedProps.label,icon=formattedProps.icon,textProps=formattedProps.textProps,iconProps=formattedProps.iconProps,gap=formattedProps.gap,invert=formattedProps.invert,size=formattedProps.size,props=_objectWithoutProperties(formattedProps,_excluded2);return _jsx(AbsTouchableOpacity,Object.assign({className:"neko-button neko-wave-click-effect",type:"button"},props,{children:children||_jsx(IconLabel,{center:true,color:fontColor,size:sizeCode,label:label,icon:icon,gap:gap,invert:invert,textProps:Object.assign({strong:true},textProps),iconProps:iconProps,loading:loading})}));}
1
+ import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";import _slicedToArray from"@babel/runtime/helpers/slicedToArray";var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/actions/Button.js";var _excluded=["children"],_excluded2=["label","icon","textProps","iconProps","gap","invert","size","iconLabelProps"];import{pipe}from'ramda';import{AbsTouchableOpacity}from"../../abstractions/TouchableOpacity";import{IconLabel}from"../presentation/IconLabel";import{useBackgroundModifier}from"../../modifiers/background";import{useBorderModifier}from"../../modifiers/border";import{useColorConverter}from"../../modifiers/colorConverter";import{useCursorModifier}from"../../modifiers/cursor";import{useDefaultModifier}from"../../modifiers/default";import{useDisplayModifier}from"../../modifiers/display";import{useFlexModifier}from"../../modifiers/flex";import{useFlexWrapperModifier}from"../../modifiers/flexWrapper";import{useFullColorModifier}from"../../modifiers/fullColor";import{useHoverConverter}from"../../modifiers/hover";import{useMarginModifier}from"../../modifiers/margin";import{usePaddingModifier}from"../../modifiers/padding";import{usePositionModifier}from"../../modifiers/position";import{useSizeConverter}from"../../modifiers/sizeConverter";import{useSizeModifier}from"../../modifiers/size";import{useStateModifier}from"../../modifiers/state";import{useThemeComponentModifier}from"../../modifiers/themeComponent";import{jsx as _jsx}from"react/jsx-runtime";var DEFAULT_PROPS=function DEFAULT_PROPS(_ref){var _ref2=_slicedToArray(_ref,1),sizeCode=_ref2[0].sizeCode;return{paddingH:sizeCode,paddingV:2,height:sizeCode,br:sizeCode,border:1,center:true,pointer:true,hover:{opacity:0.7}};};export function Button(_ref3){var children=_ref3.children,rootProps=_objectWithoutProperties(_ref3,_excluded);var _pipe=pipe(useColorConverter('primary'),useSizeConverter('elementHeights','md'),useThemeComponentModifier('Button'),useDefaultModifier(DEFAULT_PROPS),useHoverConverter,useCursorModifier,useFullColorModifier,useDisplayModifier,useStateModifier,useSizeModifier,usePositionModifier,usePaddingModifier,useMarginModifier,useFlexModifier,useFlexWrapperModifier,useBackgroundModifier,useBorderModifier)([{},rootProps]),_pipe2=_slicedToArray(_pipe,2),_pipe2$=_pipe2[0],loading=_pipe2$.loading,fontColor=_pipe2$.fontColor,sizeCode=_pipe2$.sizeCode,formattedProps=_pipe2[1];var label=formattedProps.label,icon=formattedProps.icon,textProps=formattedProps.textProps,iconProps=formattedProps.iconProps,gap=formattedProps.gap,invert=formattedProps.invert,size=formattedProps.size,iconLabelProps=formattedProps.iconLabelProps,props=_objectWithoutProperties(formattedProps,_excluded2);return _jsx(AbsTouchableOpacity,Object.assign({className:"neko-button neko-wave-click-effect",type:"button"},props,{children:children||_jsx(IconLabel,Object.assign({center:true,color:fontColor,size:sizeCode,label:label,icon:icon,gap:gap,invert:invert,textProps:Object.assign({strong:true},textProps),iconProps:iconProps,loading:loading},iconLabelProps))}));}
@@ -0,0 +1 @@
1
+ import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/actions/FloatingMenu.js";var _excluded=["fixed","onChange","items","activeIndex","size","WrapperView"];import{Icon}from"../presentation";import{Link}from"./Link";import{Text}from"../text";import{View}from"../structure";import{moveScale}from"../../theme/helpers/sizeScale";import{useSafeAreaInsets}from"../../abstractions/helpers/useSafeAreaInsets";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";export function FloatingMenu(_ref){var _this=this;var fixed=_ref.fixed,onChange=_ref.onChange,items=_ref.items,activeIndex=_ref.activeIndex,_ref$size=_ref.size,size=_ref$size===void 0?'md':_ref$size,WrapperView=_ref.WrapperView,props=_objectWithoutProperties(_ref,_excluded);var insets=useSafeAreaInsets();var height=moveScale(size,2);var bg=!WrapperView?'overlayBG':null;WrapperView=WrapperView||View;return _jsx(View,{absolute:!fixed,fixed:fixed,left:"md",right:"md",centerH:true,bottom:Math.max(insets.bottom,16),children:_jsx(WrapperView,Object.assign({height:height,shadow:true,round:true,row:true,paddingH:"sm",bg:bg},props,{children:items.map(function(item,index){var _item$icon;var isActive=index===activeIndex;return _jsxs(Link,{onPress:function onPress(){return onChange(item,index);},center:true,padding:"xs",gap:3,width:height,round:true,children:[_jsx(Icon,{name:isActive?(_item$icon=item.icon)==null?void 0:_item$icon.replace(/line(?=[^line]*$)/,'fill'):item.icon,size:height,color:isActive?'primary':'text3'}),!!item.label&&_jsx(Text,{size:"xxs",center:true,color:isActive?'primary':'text3',strong:true,numberOfLines:1,children:item.label})]},index);})}))});}
@@ -1 +1 @@
1
- export*from"./Button";export*from"./FloatingButton";export*from"./Link";export*from"./Pressable";export*from"./Dropdown";export*from"./Breadcrumb";export*from"./menu/Menu";
1
+ export*from"./Button";export*from"./FloatingButton";export*from"./Link";export*from"./Pressable";export*from"./Dropdown";export*from"./Breadcrumb";export*from"./menu/Menu";export*from"./FloatingMenu";export*from"./ActionsDrawer";
@@ -0,0 +1 @@
1
+ var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/animations/AnimatedTopBar.js";import{AnimatedView}from"./AnimatedView";import{TopBar}from"../structure";import{jsx as _jsx}from"react/jsx-runtime";export function AnimatedTopBar(props){return _jsx(AnimatedView,{style:{position:'absolute',top:0,left:0,right:0,zIndex:90},fade:true,children:_jsx(TopBar,Object.assign({},props))});}
@@ -0,0 +1 @@
1
+ import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/animations/AnimatedTopBar.native.js";var _excluded=["showAfter","duration","fade","slide"];import Animated,{useAnimatedStyle,useSharedValue,useAnimatedReaction,withTiming}from'react-native-reanimated';import{TopBar}from"../structure";import{useReanimatedScroll}from"./ReanimatedScrollHandler";import{useSafeAreaInsets}from"../../abstractions/helpers/useSafeAreaInsets";import{jsx as _jsx}from"react/jsx-runtime";export function AnimatedTopBar(_ref){var _ref$showAfter=_ref.showAfter,showAfter=_ref$showAfter===void 0?90:_ref$showAfter,_ref$duration=_ref.duration,duration=_ref$duration===void 0?300:_ref$duration,_ref$fade=_ref.fade,fade=_ref$fade===void 0?true:_ref$fade,slide=_ref.slide,props=_objectWithoutProperties(_ref,_excluded);var _useReanimatedScroll=useReanimatedScroll(),scrollY=_useReanimatedScroll.scrollY;var _useSafeAreaInsets=useSafeAreaInsets(),safeTop=_useSafeAreaInsets.top;var visibility=useSharedValue(0);useAnimatedReaction(function(){return scrollY.value>=showAfter-safeTop;},function(shouldShow,prev){if(shouldShow!==prev){visibility.value=withTiming(shouldShow?1:0,{duration:duration});}});var animatedStyle=useAnimatedStyle(function(){var style={};if(fade)style.opacity=visibility.value;if(slide)style.transform=[{translateY:(1-visibility.value)*(-50-safeTop)}];return style;});return _jsx(Animated.View,{style:[{position:'absolute',top:0,left:0,right:0,zIndex:90},animatedStyle],children:_jsx(TopBar,Object.assign({},props))});}
@@ -0,0 +1 @@
1
+ export{AnimatedTopBar}from"./AnimatedTopBar.native";
@@ -0,0 +1 @@
1
+ import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/animations/ParallaxHeader.js";var _excluded=["children","height"];import{AnimatedView}from"./AnimatedView";import{jsx as _jsx}from"react/jsx-runtime";export function ParallaxHeader(_ref){var children=_ref.children,_ref$height=_ref.height,height=_ref$height===void 0?200:_ref$height,props=_objectWithoutProperties(_ref,_excluded);return _jsx(AnimatedView,Object.assign({height:height,fade:true},props,{children:children}));}
@@ -0,0 +1 @@
1
+ var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/animations/ParallaxHeader.native.js";import Animated,{useAnimatedStyle,interpolate,Extrapolation}from'react-native-reanimated';import{useReanimatedScroll}from"./ReanimatedScrollHandler";import{jsx as _jsx}from"react/jsx-runtime";var SCALE_FACTOR=2;export function ParallaxHeader(_ref){var children=_ref.children,_ref$height=_ref.height,height=_ref$height===void 0?200:_ref$height,_ref$parallaxSpeed=_ref.parallaxSpeed,parallaxSpeed=_ref$parallaxSpeed===void 0?0.5:_ref$parallaxSpeed,disableResistence=_ref.disableResistence;var _useReanimatedScroll=useReanimatedScroll(),scrollY=_useReanimatedScroll.scrollY;var imageStyle=useAnimatedStyle(function(){var scale=scrollY.value<0?1+Math.abs(scrollY.value)/height*SCALE_FACTOR:1;var translateY=scrollY.value<0?0:interpolate(scrollY.value,[0,height],[0,height*parallaxSpeed],Extrapolation.CLAMP);return{transform:[{translateY:translateY},{scale:scale}]};});var containerStyle=useAnimatedStyle(function(){var calcHeight=height;if(disableResistence)calcHeight=scrollY.value<0?height+Math.abs(scrollY.value):height;return{height:calcHeight,overflow:scrollY.value<0?'visible':'hidden',zIndex:-1};});return _jsx(Animated.View,{style:containerStyle,children:_jsx(Animated.View,{style:imageStyle,children:children})});}
@@ -0,0 +1 @@
1
+ var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/animations/ParallaxHeader.web.js";import Animated,{useAnimatedStyle,interpolate,Extrapolation}from'react-native-reanimated';import{useReanimatedScroll}from"./ReanimatedScrollHandler";import{jsx as _jsx}from"react/jsx-runtime";var SCALE_FACTOR=2;export function ParallaxHeader(_ref){var children=_ref.children,_ref$height=_ref.height,height=_ref$height===void 0?200:_ref$height,_ref$parallaxSpeed=_ref.parallaxSpeed,parallaxSpeed=_ref$parallaxSpeed===void 0?0.5:_ref$parallaxSpeed,disableResistence=_ref.disableResistence;var _useReanimatedScroll=useReanimatedScroll(),scrollY=_useReanimatedScroll.scrollY;var imageStyle=useAnimatedStyle(function(){var scale=scrollY.value<0?1+Math.abs(scrollY.value)/height*SCALE_FACTOR:1;var translateY=scrollY.value<0?0:interpolate(scrollY.value,[0,height],[0,height*parallaxSpeed],Extrapolation.CLAMP);return{transform:[{translateY:translateY},{scale:scale}]};});var containerStyle=useAnimatedStyle(function(){var calcHeight=height;if(disableResistence)calcHeight=scrollY.value<0?height+Math.abs(scrollY.value):height;return{height:calcHeight,overflow:scrollY.value<0?'visible':'hidden',zIndex:-1};});return _jsx(Animated.View,{style:containerStyle,children:_jsx(Animated.View,{style:imageStyle,children:children})});}
@@ -0,0 +1 @@
1
+ export function useReanimatedScroll(){if(!context)console.error('useReanimatedScroll its not supported for neko web');return null;}export function ReanimatedScrollHandler(_ref){var children=_ref.children;return children;}
@@ -0,0 +1 @@
1
+ var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/animations/ReanimatedScrollHandler.native.js";import{createContext,useContext,useMemo}from'react';import{useSharedValue,useAnimatedScrollHandler}from'react-native-reanimated';import{jsx as _jsx}from"react/jsx-runtime";var ReanimatedScrollContext=createContext(null);export function useReanimatedScroll(){var context=useContext(ReanimatedScrollContext);if(!context)throw new Error('useReanimatedScroll must be used within ReanimatedScrollHandler');return context;}export function ReanimatedScrollHandler(_ref){var children=_ref.children;var scrollY=useSharedValue(0);var scrollHandler=useAnimatedScrollHandler({onScroll:function onScroll(event){scrollY.value=event.contentOffset.y;}});var value=useMemo(function(){return{scrollY:scrollY,scrollHandler:scrollHandler};},[]);return _jsx(ReanimatedScrollContext.Provider,{value:value,children:children});}
@@ -0,0 +1 @@
1
+ export{ReanimatedScrollHandler,useReanimatedScroll}from"./ReanimatedScrollHandler.native";
@@ -1 +1 @@
1
- export*from"./AnimatedView";export*from"./DraggableSlideView";
1
+ export*from"./AnimatedView";export*from"./DraggableSlideView";export*from"./ReanimatedScrollHandler";export*from"./AnimatedTopBar";export*from"./ParallaxHeader";
@@ -1 +1 @@
1
- import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/feedback/alerter.js";var _excluded=["width","closeLabel","hideClose"];import{is}from'ramda';import{Button}from"../actions";import{Result}from"../presentation";import{useModalOpener}from"../structure/modal";import{jsx as _jsx}from"react/jsx-runtime";export function useAlerter(){var _this=this;var _useModalOpener=useModalOpener(),open=_useModalOpener.open;var alert=function alert(data,type){if(is(String,data))data={title:data};var _ref=data||{},width=_ref.width,closeLabel=_ref.closeLabel,hideClose=_ref.hideClose,resultProps=_objectWithoutProperties(_ref,_excluded);open(function(_ref2){var onClose=_ref2.onClose;return{content:_jsx(Result,Object.assign({},resultProps,{type:type,padding:0,paddingT:"lg",paddingB:"sm"})),footer:!hideClose&&_jsx(Button,{sm:true,label:closeLabel||'Close',outline:true,color:"text_op40",onPress:onClose,fullW:true}),footerProps:{borderT:false,paddingV:'md'},width:width||350};});};return{alert:alert,info:function info(data){return alert(data,'info');},error:function error(data){return alert(data,'error');},warning:function warning(data){return alert(data,'warning');},success:function success(data){return alert(data,'success');}};}
1
+ import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/feedback/alerter.js";var _excluded=["width","closeLabel","hideClose"];import{is}from'ramda';import{Button}from"../actions";import{Result}from"../presentation";import{useModalOpener}from"../modals/modal";import{jsx as _jsx}from"react/jsx-runtime";export function useAlerter(){var _this=this;var _useModalOpener=useModalOpener(),open=_useModalOpener.open;var alert=function alert(data,type){if(is(String,data))data={title:data};var _ref=data||{},width=_ref.width,closeLabel=_ref.closeLabel,hideClose=_ref.hideClose,resultProps=_objectWithoutProperties(_ref,_excluded);open(function(_ref2){var onClose=_ref2.onClose;return{content:_jsx(Result,Object.assign({},resultProps,{type:type,padding:0,paddingT:"lg",paddingB:"sm"})),footer:!hideClose&&_jsx(Button,{sm:true,label:closeLabel||'Close',outline:true,color:"text_op40",onPress:onClose,fullW:true}),footerProps:{borderT:false,paddingV:'md'},width:width||350};});};return{alert:alert,info:function info(data){return alert(data,'info');},error:function error(data){return alert(data,'error');},warning:function warning(data){return alert(data,'warning');},success:function success(data){return alert(data,'success');}};}
@@ -1 +1 @@
1
- import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";import _slicedToArray from"@babel/runtime/helpers/slicedToArray";var _excluded=["width","cancelLabel","confirmLabel","onConfirm"];var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/feedback/confirmer.js";import{is}from'ramda';import React from'react';import{Button}from"../actions";import{RESULT_TYPES}from"../presentation/Result";import{Result}from"../presentation";import{View}from"../structure/View";import{useModalOpener}from"../structure/modal";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";function Footer(_ref){var _RESULT_TYPES$type;var cancelLabel=_ref.cancelLabel,confirmLabel=_ref.confirmLabel,onConfirm=_ref.onConfirm,type=_ref.type,onClose=_ref.onClose;var _React$useState=React.useState(false),_React$useState2=_slicedToArray(_React$useState,2),loading=_React$useState2[0],setLoading=_React$useState2[1];var color=((_RESULT_TYPES$type=RESULT_TYPES[type])==null?void 0:_RESULT_TYPES$type.color)||'primary';return _jsxs(View,{row:true,gap:"xs",centerV:true,children:[_jsx(Button,{sm:true,label:cancelLabel||'Cancel',outline:true,color:"text_op40",onPress:onClose,flex:true,disabled:loading}),_jsx(Button,{disabled:loading,loading:loading,sm:true,label:confirmLabel||'Confirm',color:color,onPress:function onPress(){setLoading(true);Promise.resolve(onConfirm==null?void 0:onConfirm()).then(function(result){if(result!==false){onClose();}}).finally(function(){setLoading(false);});},flex:true})]});}export function useConfirmer(){var _this=this;var _useModalOpener=useModalOpener(),open=_useModalOpener.open;var confirm=function confirm(data,type){var _ref2=data||{},width=_ref2.width,cancelLabel=_ref2.cancelLabel,confirmLabel=_ref2.confirmLabel,onConfirm=_ref2.onConfirm,resultProps=_objectWithoutProperties(_ref2,_excluded);open(function(_ref3){var onClose=_ref3.onClose;return{content:_jsx(Result,Object.assign({},resultProps,{type:type,padding:0,paddingT:"lg",paddingB:"sm"})),footer:_jsx(Footer,{cancelLabel:cancelLabel,confirmLabel:confirmLabel,onConfirm:onConfirm,type:type,onClose:onClose}),footerProps:{borderT:false,paddingV:'md'},width:width||350};});};return{confirm:confirm,info:function info(data){return confirm(data,'info');},error:function error(data){return confirm(data,'error');},warning:function warning(data){return confirm(data,'warning');},success:function success(data){return confirm(data,'success');}};}
1
+ import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";import _slicedToArray from"@babel/runtime/helpers/slicedToArray";var _excluded=["width","cancelLabel","confirmLabel","onConfirm"];var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/feedback/confirmer.js";import{is}from'ramda';import React from'react';import{Button}from"../actions";import{RESULT_TYPES}from"../presentation/Result";import{Result}from"../presentation";import{View}from"../structure/View";import{useModalOpener}from"../modals/modal";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";function Footer(_ref){var _RESULT_TYPES$type;var cancelLabel=_ref.cancelLabel,confirmLabel=_ref.confirmLabel,onConfirm=_ref.onConfirm,type=_ref.type,onClose=_ref.onClose;var _React$useState=React.useState(false),_React$useState2=_slicedToArray(_React$useState,2),loading=_React$useState2[0],setLoading=_React$useState2[1];var color=((_RESULT_TYPES$type=RESULT_TYPES[type])==null?void 0:_RESULT_TYPES$type.color)||'primary';return _jsxs(View,{row:true,gap:"xs",centerV:true,children:[_jsx(Button,{sm:true,label:cancelLabel||'Cancel',outline:true,color:"text_op40",onPress:onClose,flex:true,disabled:loading}),_jsx(Button,{disabled:loading,loading:loading,sm:true,label:confirmLabel||'Confirm',color:color,onPress:function onPress(){setLoading(true);Promise.resolve(onConfirm==null?void 0:onConfirm()).then(function(result){if(result!==false){onClose();}}).finally(function(){setLoading(false);});},flex:true})]});}export function useConfirmer(){var _this=this;var _useModalOpener=useModalOpener(),open=_useModalOpener.open;var confirm=function confirm(data,type){var _ref2=data||{},width=_ref2.width,cancelLabel=_ref2.cancelLabel,confirmLabel=_ref2.confirmLabel,onConfirm=_ref2.onConfirm,resultProps=_objectWithoutProperties(_ref2,_excluded);open(function(_ref3){var onClose=_ref3.onClose;return{content:_jsx(Result,Object.assign({},resultProps,{type:type,padding:0,paddingT:"lg",paddingB:"sm"})),footer:_jsx(Footer,{cancelLabel:cancelLabel,confirmLabel:confirmLabel,onConfirm:onConfirm,type:type,onClose:onClose}),footerProps:{borderT:false,paddingV:'md'},width:width||350};});};return{confirm:confirm,info:function info(data){return confirm(data,'info');},error:function error(data){return confirm(data,'error');},warning:function warning(data){return confirm(data,'warning');},success:function success(data){return confirm(data,'success');}};}
@@ -1 +1 @@
1
- import _defineProperty from"@babel/runtime/helpers/defineProperty";import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/form/FormItem.js";var _excluded=["name","label","isAbsolutePath","children","useDefaultValue"];import React from'react';import{FormGroup,useRelativePath}from"./FormGroup";import{Text}from"../text/Text";import{View}from"../structure/View";import{clearProps}from"../../modifiers/_helpers";import{useFormInstance,useFormState}from"./Form";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";export function FormItem(_ref){var name=_ref.name,label=_ref.label,isAbsolutePath=_ref.isAbsolutePath,children=_ref.children,useDefaultValue=_ref.useDefaultValue,props=_objectWithoutProperties(_ref,_excluded);var form=useFormInstance();var formState=useFormState();var listPath=useRelativePath(name,{isAbsolutePath:isAbsolutePath});var _React$useState=React.useState(form.getFieldValue(listPath)),_React$useState2=_slicedToArray(_React$useState,2),value=_React$useState2[0],setValue=_React$useState2[1];var error=form.getError(listPath);React.useEffect(function(){return form.registerListener(listPath,function(val){return setValue(val);});},[listPath.join('$NEKOJOIN$')]);var handleChange=function handleChange(e){var _e$target$value,_e$target;var val=(_e$target$value=e==null?void 0:(_e$target=e.target)==null?void 0:_e$target.value)!=null?_e$target$value:e;form.setFieldValue(listPath,val);};var valueKey='value';if(!!useDefaultValue)valueKey='defaultValue';var childProps=clearProps(_defineProperty(_defineProperty(_defineProperty({},valueKey,value===undefined?'':value),"onChange",handleChange),"disabled",(formState==null?void 0:formState.disabled)===true||undefined));var content;if(typeof children==='function'){content=children(childProps);}else{var child=React.Children.only(children);content=React.cloneElement(child,Object.assign({},child.props,childProps));}return _jsx(FormGroup,{name:listPath,children:_jsxs(View,Object.assign({},props,{children:[label&&_jsx(Text,{sm:true,marginB:"xxs",children:label}),content,error&&_jsx(Text,{color:"red",children:error})]}))});}
1
+ import _defineProperty from"@babel/runtime/helpers/defineProperty";import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/form/FormItem.js";var _excluded=["name","label","isAbsolutePath","children","useDefaultValue","rules","validateTrigger"];import React from'react';import{FormGroup,useRelativePath}from"./FormGroup";import{Text}from"../text/Text";import{View}from"../structure/View";import{clearProps}from"../../modifiers/_helpers";import{useFormInstance,useFormState}from"./Form";import{shouldValidateOn}from"./validation";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";export function FormItem(_ref){var _child$props;var name=_ref.name,label=_ref.label,isAbsolutePath=_ref.isAbsolutePath,children=_ref.children,useDefaultValue=_ref.useDefaultValue,rules=_ref.rules,_ref$validateTrigger=_ref.validateTrigger,validateTrigger=_ref$validateTrigger===void 0?'onSubmit':_ref$validateTrigger,props=_objectWithoutProperties(_ref,_excluded);var form=useFormInstance();var formState=useFormState();var listPath=useRelativePath(name,{isAbsolutePath:isAbsolutePath});var listPathStr=listPath.join('$NEKOJOIN$');var _React$useState=React.useState(form.getFieldValue(listPath)),_React$useState2=_slicedToArray(_React$useState,2),value=_React$useState2[0],setValue=_React$useState2[1];var _React$useState3=React.useState(form.getError(listPath)),_React$useState4=_slicedToArray(_React$useState3,2),error=_React$useState4[0],setError=_React$useState4[1];React.useEffect(function(){return form.registerRules(listPath,rules,validateTrigger);},[listPathStr,JSON.stringify(rules),validateTrigger]);React.useEffect(function(){return form.registerListener(listPath,function(val){return setValue(val);});},[listPathStr]);React.useEffect(function(){return form.registerErrorListener(listPath,function(err){return setError(err);});},[listPathStr]);var handleChange=function handleChange(e){var _e$target$value,_e$target;var val=(_e$target$value=e==null?void 0:(_e$target=e.target)==null?void 0:_e$target.value)!=null?_e$target$value:e;form.setFieldValue(listPath,val);if(shouldValidateOn('onChange',rules,validateTrigger)){form.validateField(listPath,'onChange');}};var handleBlur=function handleBlur(e,originalOnBlur){if(originalOnBlur)originalOnBlur(e);if(shouldValidateOn('onBlur',rules,validateTrigger)){form.validateField(listPath,'onBlur');}};var valueKey='value';if(!!useDefaultValue)valueKey='defaultValue';var child=typeof children==='function'?null:React.Children.only(children);var originalOnBlur=child==null?void 0:(_child$props=child.props)==null?void 0:_child$props.onBlur;var childProps=clearProps(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({},valueKey,value===undefined?'':value),"onChange",handleChange),"onBlur",function onBlur(e){return handleBlur(e,originalOnBlur);}),"disabled",(formState==null?void 0:formState.disabled)===true||undefined),"error",!!error||undefined));var content;if(typeof children==='function'){content=children(childProps);}else{content=React.cloneElement(child,Object.assign({},child.props,childProps));}return _jsx(FormGroup,{name:listPath,children:_jsxs(View,Object.assign({},props,{children:[label&&_jsx(Text,{sm:true,marginB:"xxs",children:label}),content,error&&_jsx(Text,{color:"red",children:error})]}))});}
@@ -1 +1 @@
1
- import _toConsumableArray from"@babel/runtime/helpers/toConsumableArray";import _slicedToArray from"@babel/runtime/helpers/slicedToArray";var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/form/FormList.js";import React from'react';import{FormGroup,useRelativePath}from"./FormGroup";import{Text}from"../text/Text";import{useFormInstance}from"./Form";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";var FormListContext=React.createContext(null);var useFormList=function useFormList(){return React.useContext(FormListContext);};export function FormList(_ref){var name=_ref.name,isAbsolutePath=_ref.isAbsolutePath,children=_ref.children;var form=useFormInstance();var listPath=useRelativePath(name,{isAbsolutePath:isAbsolutePath});var listPathStr=listPath.join('$NEKOJOIN$');var error=form.getError(listPath);var keyCounter=React.useRef(0);var keysMap=React.useRef(new WeakMap());var generateFields=function generateFields(items){if(!Array.isArray(items))return[];return items.map(function(item,index){var key;if(typeof item==='object'&&item!==null){key=keysMap.current.get(item);if(!key){key=`field_${keyCounter.current++}`;keysMap.current.set(item,key);}}else{key=`field_${keyCounter.current++}`;}return{key:key,name:index};});};var _React$useState=React.useState(function(){var initial=form.getFieldValue(listPath)||[];return generateFields(initial);}),_React$useState2=_slicedToArray(_React$useState,2),fields=_React$useState2[0],setFields=_React$useState2[1];React.useEffect(function(){return form.registerListener(listPath,function(val){setFields(generateFields(val));});},[listPathStr]);var add=function add(){var defaultValue=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var current=form.getFieldValue(listPath)||[];form.setFieldValue(listPath,[].concat(_toConsumableArray(current),[defaultValue]));};var addOn=function addOn(index){var defaultValue=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};var current=form.getFieldValue(listPath)||[];form.setFieldValue(listPath,[].concat(_toConsumableArray(current.slice(0,index)),[defaultValue],_toConsumableArray(current.slice(index))));};var replace=function replace(index,value){var current=form.getFieldValue(listPath)||[];form.setFieldValue(listPath,current.map(function(item,i){return i===index?value:item;}));};var duplicate=function duplicate(index){var current=form.getFieldValue(listPath)||[];var value=current[index];if(!value)return;var clonedValue=typeof value==='object'?Object.assign({},value):value;addOn(index+1,clonedValue);};var move=function move(fromIndex,toIndex){var current=form.getFieldValue(listPath)||[];if(fromIndex<0||fromIndex>=current.length)return;if(toIndex<0||toIndex>=current.length)return;var item=current[fromIndex];var updated=_toConsumableArray(current);updated.splice(fromIndex,1);updated.splice(toIndex,0,item);form.setFieldValue(listPath,updated);};var remove=function remove(index){var current=form.getFieldValue(listPath)||[];form.setFieldValue(listPath,current.filter(function(_,i){return i!==index;}));};var actions=React.useMemo(function(){return{add:add,addOn:addOn,replace:replace,remove:remove,move:move,duplicate:duplicate};},[listPathStr]);var content;if(typeof children==='function'){content=children(fields,actions);}else{var child=React.Children.only(children);content=React.cloneElement(child,Object.assign({},child.props,{fields:fields},actions));}return _jsx(FormGroup,{name:listPath,children:_jsxs(FormListContext.Provider,{value:actions,children:[content,error&&_jsx(Text,{color:"red",children:error})]})});}
1
+ import _toConsumableArray from"@babel/runtime/helpers/toConsumableArray";import _slicedToArray from"@babel/runtime/helpers/slicedToArray";var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/form/FormList.js";import React from'react';import{FormGroup,useRelativePath}from"./FormGroup";import{Text}from"../text/Text";import{useFormInstance}from"./Form";import{shouldValidateOn}from"./validation";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";var FormListContext=React.createContext(null);var useFormList=function useFormList(){return React.useContext(FormListContext);};export function FormList(_ref){var name=_ref.name,isAbsolutePath=_ref.isAbsolutePath,children=_ref.children,rules=_ref.rules,_ref$validateTrigger=_ref.validateTrigger,validateTrigger=_ref$validateTrigger===void 0?'onSubmit':_ref$validateTrigger;var form=useFormInstance();var listPath=useRelativePath(name,{isAbsolutePath:isAbsolutePath});var listPathStr=listPath.join('$NEKOJOIN$');var _React$useState=React.useState(form.getError(listPath)),_React$useState2=_slicedToArray(_React$useState,2),error=_React$useState2[0],setError=_React$useState2[1];var keyCounter=React.useRef(0);var keysMap=React.useRef(new WeakMap());React.useEffect(function(){return form.registerRules(listPath,rules,validateTrigger);},[listPathStr,JSON.stringify(rules),validateTrigger]);React.useEffect(function(){return form.registerErrorListener(listPath,function(err){return setError(err);});},[listPathStr]);var generateFields=function generateFields(items){if(!Array.isArray(items))return[];return items.map(function(item,index){var key;if(typeof item==='object'&&item!==null){key=keysMap.current.get(item);if(!key){key=`field_${keyCounter.current++}`;keysMap.current.set(item,key);}}else{key=`field_${keyCounter.current++}`;}return{key:key,name:index};});};var _React$useState3=React.useState(function(){var initial=form.getFieldValue(listPath)||[];return generateFields(initial);}),_React$useState4=_slicedToArray(_React$useState3,2),fields=_React$useState4[0],setFields=_React$useState4[1];React.useEffect(function(){return form.registerListener(listPath,function(val){setFields(generateFields(val));});},[listPathStr]);var validateOnChange=function validateOnChange(){if(shouldValidateOn('onChange',rules,validateTrigger)){form.validateField(listPath,'onChange');}};var add=function add(){var defaultValue=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var current=form.getFieldValue(listPath)||[];form.setFieldValue(listPath,[].concat(_toConsumableArray(current),[defaultValue]));validateOnChange();};var addOn=function addOn(index){var defaultValue=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};var current=form.getFieldValue(listPath)||[];form.setFieldValue(listPath,[].concat(_toConsumableArray(current.slice(0,index)),[defaultValue],_toConsumableArray(current.slice(index))));validateOnChange();};var replace=function replace(index,value){var current=form.getFieldValue(listPath)||[];form.setFieldValue(listPath,current.map(function(item,i){return i===index?value:item;}));};var duplicate=function duplicate(index){var current=form.getFieldValue(listPath)||[];var value=current[index];if(!value)return;var clonedValue=typeof value==='object'?Object.assign({},value):value;addOn(index+1,clonedValue);};var move=function move(fromIndex,toIndex){var current=form.getFieldValue(listPath)||[];if(fromIndex<0||fromIndex>=current.length)return;if(toIndex<0||toIndex>=current.length)return;var item=current[fromIndex];var updated=_toConsumableArray(current);updated.splice(fromIndex,1);updated.splice(toIndex,0,item);form.setFieldValue(listPath,updated);};var remove=function remove(index){var current=form.getFieldValue(listPath)||[];form.setFieldValue(listPath,current.filter(function(_,i){return i!==index;}));validateOnChange();};var actions=React.useMemo(function(){return{add:add,addOn:addOn,replace:replace,remove:remove,move:move,duplicate:duplicate};},[listPathStr,rules,validateTrigger]);var content;if(typeof children==='function'){content=children(fields,actions);}else{var child=React.Children.only(children);content=React.cloneElement(child,Object.assign({},child.props,{fields:fields},actions));}return _jsx(FormGroup,{name:listPath,children:_jsxs(FormListContext.Provider,{value:actions,children:[content,error&&_jsx(Text,{color:"red",children:error})]})});}
@@ -1 +1 @@
1
- import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/form/SubmitButton.js";var _excluded=["form","disabled"];import{Button}from"../actions/Button";import{useFormInstance,useFormState}from"./Form";import{jsx as _jsx}from"react/jsx-runtime";export function SubmitButton(_ref){var form=_ref.form,disabled=_ref.disabled,props=_objectWithoutProperties(_ref,_excluded);var formState=useFormState();var contextForm=useFormInstance();form=form||contextForm;disabled=(formState==null?void 0:formState.disabled)||disabled;var handleSubmit=function handleSubmit(){if(!form){console.error('No form provided to useWatch. Pass it as params or wrap it inside a <Form> component.');return;}form.handleSubmit();};return _jsx(Button,Object.assign({},props,{disabled:disabled,onPress:handleSubmit}));}
1
+ import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/form/SubmitButton.js";var _excluded=["form","disabled","Wrapper"];import{Button}from"../actions/Button";import{useFormInstance,useFormState}from"./Form";import{jsx as _jsx}from"react/jsx-runtime";export function SubmitButton(_ref){var form=_ref.form,disabled=_ref.disabled,Wrapper=_ref.Wrapper,props=_objectWithoutProperties(_ref,_excluded);var formState=useFormState();var contextForm=useFormInstance();form=form||contextForm;disabled=(formState==null?void 0:formState.disabled)||disabled;Wrapper=Wrapper||Button;var handleSubmit=function handleSubmit(){if(!form){console.error('No form provided to useWatch. Pass it as params or wrap it inside a <Form> component.');return;}form.handleSubmit();};return _jsx(Wrapper,Object.assign({},props,{disabled:disabled,onPress:handleSubmit}));}
@@ -1 +1 @@
1
- export*from"./Form";export*from"./FormItem";export*from"./FormList";export*from"./FormWrapperComponent";export*from"./FormGroup";export*from"./useNewForm";export*from"./useWatch";export*from"./SubmitButton";
1
+ export*from"./Form";export*from"./FormItem";export*from"./FormList";export*from"./FormWrapperComponent";export*from"./FormGroup";export*from"./useNewForm";export*from"./useWatch";export*from"./SubmitButton";export*from"./validation";
@@ -1 +1 @@
1
- import{assocPath,path}from'ramda';import React from'react';export function useNewForm(){var _ref=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{},_ref$initialValues=_ref.initialValues,initialValues=_ref$initialValues===void 0?{}:_ref$initialValues,validate=_ref.validate,onSubmit=_ref.onSubmit;var valuesRef=React.useRef(Object.assign({},initialValues));var errorsRef=React.useRef({});var listenersRef=React.useRef({});var formApi=React.useMemo(function(){var notify=function notify(name){var key=Array.isArray(name)?name.join('.'):name;if(listenersRef.current[key]){listenersRef.current[key].forEach(function(cb){return cb(path(name,valuesRef.current));});}};var setFieldValue=function setFieldValue(name,value){valuesRef.current=assocPath(name,value,valuesRef.current);notify(name);};var getFieldValue=function getFieldValue(name){return path(name,valuesRef.current);};var getError=function getError(name){return path(name,errorsRef.current);};var setError=function setError(name,error){errorsRef.current=assocPath(name,error,errorsRef.current);};var registerListener=function registerListener(name,cb){var key=Array.isArray(name)?name.join('.'):name;if(!listenersRef.current[key]){listenersRef.current[key]=[];}listenersRef.current[key].push(cb);return function(){listenersRef.current[key]=listenersRef.current[key].filter(function(fn){return fn!==cb;});};};var validateForm=function validateForm(){if(!validate)return true;var newErrors=validate(valuesRef.current)||{};errorsRef.current=newErrors;return Object.keys(newErrors).length===0;};var handleSubmit=function handleSubmit(){var isValid=validateForm();if(!isValid)return;console.log('SUBMIT');onSubmit(valuesRef.current);};return{setFieldValue:setFieldValue,getFieldValue:getFieldValue,getError:getError,setError:setError,registerListener:registerListener,handleSubmit:handleSubmit,valuesRef:valuesRef};},[validate,onSubmit]);return formApi;}
1
+ import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import _asyncToGenerator from"@babel/runtime/helpers/asyncToGenerator";import{assocPath,path}from'ramda';import React from'react';import{validateRules,validateAllFields,normalizeRules}from"./validation";export function useNewForm(){var _ref=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{},_ref$initialValues=_ref.initialValues,initialValues=_ref$initialValues===void 0?{}:_ref$initialValues,validate=_ref.validate,onSubmit=_ref.onSubmit;var valuesRef=React.useRef(Object.assign({},initialValues));var errorsRef=React.useRef({});var listenersRef=React.useRef({});var errorListenersRef=React.useRef({});var rulesRegistryRef=React.useRef(new Map());var formApi=React.useMemo(function(){var toKey=function toKey(name){return Array.isArray(name)?name.join('.'):name;};var toPath=function toPath(name){return Array.isArray(name)?name:[name];};var notify=function notify(name){var key=toKey(name);if(listenersRef.current[key]){listenersRef.current[key].forEach(function(cb){return cb(path(toPath(name),valuesRef.current));});}};var notifyError=function notifyError(name){var key=toKey(name);if(errorListenersRef.current[key]){errorListenersRef.current[key].forEach(function(cb){return cb(errorsRef.current[key]);});}};var setFieldValue=function setFieldValue(name,value){valuesRef.current=assocPath(toPath(name),value,valuesRef.current);notify(name);};var getFieldValue=function getFieldValue(name){return path(toPath(name),valuesRef.current);};var getError=function getError(name){var key=toKey(name);return errorsRef.current[key];};var setError=function setError(name,error){var key=toKey(name);if(error){errorsRef.current[key]=error;}else{delete errorsRef.current[key];}notifyError(name);};var clearErrors=function clearErrors(){errorsRef.current={};};var registerListener=function registerListener(name,cb){var key=toKey(name);if(!listenersRef.current[key]){listenersRef.current[key]=[];}listenersRef.current[key].push(cb);return function(){listenersRef.current[key]=listenersRef.current[key].filter(function(fn){return fn!==cb;});};};var registerErrorListener=function registerErrorListener(name,cb){var key=toKey(name);if(!errorListenersRef.current[key]){errorListenersRef.current[key]=[];}errorListenersRef.current[key].push(cb);return function(){errorListenersRef.current[key]=errorListenersRef.current[key].filter(function(fn){return fn!==cb;});};};var registerRules=function registerRules(name,rules){var defaultTrigger=arguments.length>2&&arguments[2]!==undefined?arguments[2]:'onSubmit';if(!rules)return;var key=toKey(name);var rulesArray=normalizeRules(rules).map(function(rule){return Object.assign({},rule,{trigger:rule.trigger||defaultTrigger});});rulesRegistryRef.current.set(key,{path:name,rules:rulesArray});return function(){return rulesRegistryRef.current.delete(key);};};var validateField=function(){var _ref2=_asyncToGenerator(function*(name){var trigger=arguments.length>1&&arguments[1]!==undefined?arguments[1]:'onSubmit';var key=toKey(name);var entry=rulesRegistryRef.current.get(key);if(!entry)return null;var value=path(name,valuesRef.current);var error=yield validateRules(value,entry.rules,trigger);if(error){errorsRef.current[key]=error;}else{delete errorsRef.current[key];}notifyError(name);return error;});return function validateField(_x){return _ref2.apply(this,arguments);};}();var validateForm=function(){var _ref3=_asyncToGenerator(function*(){errorsRef.current={};var rulesErrors=yield validateAllFields(valuesRef.current,rulesRegistryRef.current);var legacyErrors=validate?validate(valuesRef.current)||{}:{};Object.entries(rulesErrors).forEach(function(_ref4){var _ref5=_slicedToArray(_ref4,2),key=_ref5[0],error=_ref5[1];errorsRef.current[key]=error;});Object.entries(legacyErrors).forEach(function(_ref6){var _ref7=_slicedToArray(_ref6,2),key=_ref7[0],error=_ref7[1];if(!errorsRef.current[key]){errorsRef.current[key]=error;}});rulesRegistryRef.current.forEach(function(_,key){notifyError(key);});return Object.keys(errorsRef.current).length===0;});return function validateForm(){return _ref3.apply(this,arguments);};}();var handleSubmit=function(){var _ref8=_asyncToGenerator(function*(){var isValid=yield validateForm();if(!isValid)return;console.log('SUBMIT');onSubmit(valuesRef.current);});return function handleSubmit(){return _ref8.apply(this,arguments);};}();return{setFieldValue:setFieldValue,getFieldValue:getFieldValue,getError:getError,setError:setError,clearErrors:clearErrors,registerListener:registerListener,registerErrorListener:registerErrorListener,registerRules:registerRules,validateField:validateField,handleSubmit:handleSubmit,valuesRef:valuesRef};},[validate,onSubmit]);return formApi;}
@@ -0,0 +1 @@
1
+ export var defaultMessages={required:'This field is required',type:{email:'Please enter a valid email address',url:'Please enter a valid URL',number:'Please enter a valid number',integer:'Please enter a valid integer'},min:{string:function string(min){return`Must be at least ${min} characters`;},number:function number(min){return`Must be at least ${min}`;},array:function array(min){return`Must have at least ${min} items`;}},max:{string:function string(max){return`Must be at most ${max} characters`;},number:function number(max){return`Must be at most ${max}`;},array:function array(max){return`Must have at most ${max} items`;}},pattern:'Invalid format'};
@@ -0,0 +1 @@
1
+ export{defaultMessages}from"./defaultMessages";export{validators}from"./validators";export{validateRules,validateAllFields}from"./validateRules";export{normalizeRules}from"./normalizeRules";export{shouldValidateOn}from"./shouldValidateOn";
@@ -0,0 +1 @@
1
+ import _defineProperty from"@babel/runtime/helpers/defineProperty";import _slicedToArray from"@babel/runtime/helpers/slicedToArray";export function normalizeRules(rules){if(!rules)return[];if(Array.isArray(rules))return rules;if(typeof rules==='object'){return Object.entries(rules).map(function(_ref){var _ref2=_slicedToArray(_ref,2),key=_ref2[0],value=_ref2[1];return _defineProperty({},key,value);});}return[];}
@@ -0,0 +1 @@
1
+ import{normalizeRules}from"./normalizeRules";export function shouldValidateOn(trigger,rules){var validateTrigger=arguments.length>2&&arguments[2]!==undefined?arguments[2]:'onSubmit';if(!rules)return false;var triggers=Array.isArray(validateTrigger)?validateTrigger:[validateTrigger];if(triggers.includes(trigger))return true;var rulesArray=normalizeRules(rules);return rulesArray.some(function(rule){return rule.trigger===trigger||Array.isArray(rule.trigger)&&rule.trigger.includes(trigger);});}
@@ -0,0 +1 @@
1
+ import _asyncToGenerator from"@babel/runtime/helpers/asyncToGenerator";import{path as getPath}from'ramda';import{validators}from"./validators";export function validateRules(_x,_x2){return _validateRules.apply(this,arguments);}function _validateRules(){_validateRules=_asyncToGenerator(function*(value,rules){var trigger=arguments.length>2&&arguments[2]!==undefined?arguments[2]:'onSubmit';if(!rules||rules.length===0)return null;for(var rule of rules){var ruleTrigger=rule.trigger||'onSubmit';var triggers=Array.isArray(ruleTrigger)?ruleTrigger:[ruleTrigger];if(trigger!=='onSubmit'&&!triggers.includes(trigger)){continue;}var error=null;if(rule.validator){try{yield rule.validator(rule,value);}catch(e){error=e.message||rule.message||'Validation failed';}}else{if(rule.required){error=validators.required(value,rule);}if(!error&&rule.type){error=validators.type(value,rule);}if(!error&&rule.min!==undefined){error=validators.min(value,rule);}if(!error&&rule.max!==undefined){error=validators.max(value,rule);}if(!error&&rule.pattern){error=validators.pattern(value,rule);}}if(error){return error;}}return null;});return _validateRules.apply(this,arguments);}export function validateAllFields(_x3,_x4){return _validateAllFields.apply(this,arguments);}function _validateAllFields(){_validateAllFields=_asyncToGenerator(function*(values,rulesRegistry){var errors={};var validationPromises=[];rulesRegistry.forEach(function(_ref,pathKey){var path=_ref.path,rules=_ref.rules;var value=getPath(path,values);validationPromises.push(validateRules(value,rules,'onSubmit').then(function(error){if(error){errors[pathKey]=error;}}));});yield Promise.all(validationPromises);return errors;});return _validateAllFields.apply(this,arguments);}
@@ -0,0 +1 @@
1
+ import{defaultMessages}from"./defaultMessages";var isEmpty=function isEmpty(value){if(value===undefined||value===null)return true;if(typeof value==='string'&&value.trim()==='')return true;if(Array.isArray(value)&&value.length===0)return true;return false;};export var validators={required:function required(value,rule){if(isEmpty(value)){return rule.message||defaultMessages.required;}return null;},type:function type(value,rule){if(isEmpty(value))return null;var typeValidators={email:function email(v){return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(v);},url:function url(v){try{new URL(v);return true;}catch(_unused){return false;}},number:function number(v){return!isNaN(Number(v));},integer:function integer(v){return Number.isInteger(Number(v))&&!isNaN(Number(v));}};var validator=typeValidators[rule.type];if(validator&&!validator(value)){return rule.message||defaultMessages.type[rule.type]||`Invalid ${rule.type}`;}return null;},min:function min(value,rule){if(isEmpty(value))return null;if(typeof value==='string'&&value.length<rule.min){return rule.message||defaultMessages.min.string(rule.min);}if(typeof value==='number'&&value<rule.min){return rule.message||defaultMessages.min.number(rule.min);}if(Array.isArray(value)&&value.length<rule.min){return rule.message||defaultMessages.min.array(rule.min);}return null;},max:function max(value,rule){if(isEmpty(value))return null;if(typeof value==='string'&&value.length>rule.max){return rule.message||defaultMessages.max.string(rule.max);}if(typeof value==='number'&&value>rule.max){return rule.message||defaultMessages.max.number(rule.max);}if(Array.isArray(value)&&value.length>rule.max){return rule.message||defaultMessages.max.array(rule.max);}return null;},pattern:function pattern(value,rule){if(isEmpty(value))return null;var regex=rule.pattern instanceof RegExp?rule.pattern:new RegExp(rule.pattern);if(!regex.test(String(value))){return rule.message||defaultMessages.pattern;}return null;}};
@@ -1 +1 @@
1
- export*from"./actions";export*from"./animations";export*from"./form";export*from"./presentation";export*from"./structure";export*from"./text";export*from"./helpers";export*from"./inputs";export*from"./state";export*from"./layout";export*from"./table";export*from"./feedback";export*from"./calendar";export*from"./list";export*from"./tabs";export*from"./theme";
1
+ export*from"./actions";export*from"./animations";export*from"./form";export*from"./presentation";export*from"./structure";export*from"./modals";export*from"./text";export*from"./helpers";export*from"./inputs";export*from"./state";export*from"./layout";export*from"./table";export*from"./feedback";export*from"./calendar";export*from"./list";export*from"./tabs";export*from"./theme";export*from"./sections";
@@ -1 +1 @@
1
- import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/inputs/InputWrapper.js";var _excluded=["prefix","suffix","prefixIcon","prefixIconColor","suffixIcon","suffixIconColor","loading","error","children","ref"];import{pipe,is}from'ramda';import React from'react';import{Icon}from"../presentation/Icon";import{Loading}from"../state/Loading";import{Text}from"../text/Text";import{View}from"../structure/View";import{useDefaultModifier}from"../../modifiers/default";import{useSizeConverter}from"../../modifiers/sizeConverter";import{useThemeComponentModifier}from"../../modifiers/themeComponent";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";var DEFAULT_PROPS={paddingH:'sm',bg:'overlayBG',border:true,br:'md',row:true,gap:'sm'};export function InputWrapper(_ref){var prefix=_ref.prefix,suffix=_ref.suffix,prefixIcon=_ref.prefixIcon,prefixIconColor=_ref.prefixIconColor,suffixIcon=_ref.suffixIcon,suffixIconColor=_ref.suffixIconColor,loading=_ref.loading,error=_ref.error,children=_ref.children,ref=_ref.ref,rootProps=_objectWithoutProperties(_ref,_excluded);var _React$useState=React.useState(false),_React$useState2=_slicedToArray(_React$useState,2),hover=_React$useState2[0],setHover=_React$useState2[1];var fallbackInputRef=React.useRef();var inputRef=ref||fallbackInputRef;var _pipe=pipe(useSizeConverter('elementHeights','md'),useThemeComponentModifier('InputWrapper'),useDefaultModifier(DEFAULT_PROPS))([{},rootProps]),_pipe2=_slicedToArray(_pipe,2),_pipe2$=_pipe2[0],size=_pipe2$.size,sizeCode=_pipe2$.sizeCode,props=_pipe2[1];var handlePress=function handlePress(){var _inputRef$current;inputRef==null?void 0:(_inputRef$current=inputRef.current)==null?void 0:_inputRef$current.focus==null?void 0:_inputRef$current.focus();};if(!!prefix&&is(String,prefix))prefix=_jsx(Text,{children:prefix});if(!!suffix&&is(String,suffix))suffix=_jsx(Text,{children:suffix});if(!prefix&&!!prefixIcon)prefix=_jsx(Icon,{name:prefixIcon,size:sizeCode,color:prefixIconColor});if(!suffix&&!!suffixIcon)suffix=_jsx(Icon,{name:suffixIcon,size:sizeCode,color:suffixIconColor});if(!prefix&&!!error)suffix=_jsx(Icon,{name:"close-circle-fill",size:sizeCode,red:true});if(!!loading)suffix=_jsx(Loading,{size:sizeCode});var borderColor=!!hover?'primary_op40':'divider';if(!!error)borderColor='red_op40';var child=React.Children.only(children);var childWithProps=React.cloneElement(child,Object.assign({},child.props,{ref:inputRef}));return _jsxs(View,Object.assign({className:"neko-input-wrapper",height:size,onPress:handlePress,borderColor:borderColor,onMouseEnter:function onMouseEnter(){return setHover(true);},onMouseLeave:function onMouseLeave(){return setHover(false);}},props,{children:[!!prefix&&_jsx(View,{paddingV:5,fullHeight:true,center:true,children:prefix}),_jsx(View,{flex:true,fullH:true,children:childWithProps}),!!suffix&&_jsx(View,{paddingV:5,fullHeight:true,center:true,children:suffix})]}));}
1
+ import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/inputs/InputWrapper.js";var _excluded=["prefix","suffix","prefixIcon","prefixIconColor","suffixIcon","suffixIconColor","loading","error","children","ref"];import{pipe,is}from'ramda';import React from'react';import{Icon}from"../presentation/Icon";import{Loading}from"../state/Loading";import{Text}from"../text/Text";import{View}from"../structure/View";import{useDefaultModifier}from"../../modifiers/default";import{useSizeConverter}from"../../modifiers/sizeConverter";import{useThemeComponentModifier}from"../../modifiers/themeComponent";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";var DEFAULT_PROPS={paddingH:'sm',bg:'overlayBG',border:true,br:'md',row:true,gap:'sm'};export function InputWrapper(_ref){var prefix=_ref.prefix,suffix=_ref.suffix,prefixIcon=_ref.prefixIcon,prefixIconColor=_ref.prefixIconColor,suffixIcon=_ref.suffixIcon,suffixIconColor=_ref.suffixIconColor,loading=_ref.loading,error=_ref.error,children=_ref.children,ref=_ref.ref,rootProps=_objectWithoutProperties(_ref,_excluded);var _React$useState=React.useState(false),_React$useState2=_slicedToArray(_React$useState,2),hover=_React$useState2[0],setHover=_React$useState2[1];var fallbackInputRef=React.useRef();var inputRef=ref||fallbackInputRef;var _pipe=pipe(useSizeConverter('elementHeights','md'),useThemeComponentModifier('InputWrapper'),useDefaultModifier(DEFAULT_PROPS))([{},rootProps]),_pipe2=_slicedToArray(_pipe,2),_pipe2$=_pipe2[0],size=_pipe2$.size,sizeCode=_pipe2$.sizeCode,props=_pipe2[1];var handlePress=function handlePress(){var _inputRef$current;inputRef==null?void 0:(_inputRef$current=inputRef.current)==null?void 0:_inputRef$current.focus==null?void 0:_inputRef$current.focus();};if(!!prefix&&is(String,prefix))prefix=_jsx(Text,{children:prefix});if(!!suffix&&is(String,suffix))suffix=_jsx(Text,{children:suffix});if(!prefix&&!!prefixIcon)prefix=_jsx(Icon,{name:prefixIcon,size:sizeCode,color:prefixIconColor});if(!suffix&&!!suffixIcon)suffix=_jsx(Icon,{name:suffixIcon,size:sizeCode,color:suffixIconColor});if(!prefix&&!!error)suffix=_jsx(Icon,{name:"alert-fill",size:sizeCode,red:true});if(!!loading)suffix=_jsx(Loading,{size:sizeCode});var borderColor=!!hover?'primary_op40':'divider';if(!!error)borderColor='red_op40';var child=React.Children.only(children);var childWithProps=React.cloneElement(child,Object.assign({},child.props,{ref:inputRef}));return _jsxs(View,Object.assign({className:"neko-input-wrapper",height:size,onPress:handlePress,borderColor:borderColor,onMouseEnter:function onMouseEnter(){return setHover(true);},onMouseLeave:function onMouseLeave(){return setHover(false);}},props,{children:[!!prefix&&_jsx(View,{paddingV:5,fullHeight:true,center:true,children:prefix}),_jsx(View,{flex:true,fullH:true,children:childWithProps}),!!suffix&&_jsx(View,{paddingV:5,fullHeight:true,center:true,children:suffix})]}));}
@@ -1 +1 @@
1
- import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/inputs/NumberInput.js";var _excluded=["onChange","value","useInt","precision","min","max","error"];import{endsWith,is}from'ramda';import React from'react';import{TextInput}from"./TextInput";import{jsx as _jsx}from"react/jsx-runtime";function isValidNumber(stringValue){var _stringValue$toString;var options=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};var _options$min=options.min,min=_options$min===void 0?Number.MIN_SAFE_INTEGER:_options$min,_options$max=options.max,max=_options$max===void 0?Number.MAX_SAFE_INTEGER:_options$max,useInt=options.useInt,precision=options.precision;if(stringValue===null||stringValue===undefined||stringValue==='')return true;if(isNaN(stringValue))return false;var numericValue=parseFloat(stringValue);if(numericValue<min)return false;if(numericValue>max)return false;var decimalPart=stringValue==null?void 0:(_stringValue$toString=stringValue.toString())==null?void 0:_stringValue$toString.split==null?void 0:_stringValue$toString.split('.')[1];if(decimalPart&&is(Number,precision)){if(decimalPart.length>precision)return false;}return true;}export function formatNumericValue(newValue,prevValue){var options=arguments.length>2&&arguments[2]!==undefined?arguments[2]:{};var _options$min2=options.min,min=_options$min2===void 0?Number.MIN_SAFE_INTEGER:_options$min2,_options$max2=options.max,max=_options$max2===void 0?Number.MAX_SAFE_INTEGER:_options$max2,useInt=options.useInt,precision=options.precision;var numericValue=newValue;if(is(Number,newValue))newValue=newValue.toString();if(newValue===null||newValue===undefined||newValue==='')return null;if(is(String,newValue))newValue=newValue.replace(',','.');if(newValue==='-')return newValue;if(useInt){if(newValue.includes('.'))return prevValue;numericValue=parseInt(newValue,10);}else{var dotsCount=newValue.split('.').length;if(dotsCount>2)return prevValue;if(endsWith('.',newValue))return newValue;numericValue=parseFloat(newValue);}if(isNaN(numericValue))return prevValue;if(numericValue<min)return min;if(numericValue>max)return max;var decimalPart=newValue.split('.')[1];if(decimalPart&&!!precision){if(decimalPart.length>precision)return prevValue;return newValue;}return numericValue;}export function NumberInput(_ref){var _onChange=_ref.onChange,value=_ref.value,useInt=_ref.useInt,precision=_ref.precision,min=_ref.min,max=_ref.max,error=_ref.error,props=_objectWithoutProperties(_ref,_excluded);var _React$useState=React.useState(false),_React$useState2=_slicedToArray(_React$useState,2),hasError=_React$useState2[0],setHasError=_React$useState2[1];var _React$useState3=React.useState(value),_React$useState4=_slicedToArray(_React$useState3,2),inputValue=_React$useState4[0],setInputValue=_React$useState4[1];var _React$useState5=React.useState(value),_React$useState6=_slicedToArray(_React$useState5,2),localValue=_React$useState6[0],setLocalValue=_React$useState6[1];React.useEffect(function(){return setInputValue(value);},[value]);if(useInt)precision=0;if(!useInt&&precision===0)useInt=true;var opts={useInt:useInt,precision:precision,min:min,max:max};return _jsx(TextInput,Object.assign({onChange:function onChange(newValue){var numericValue=formatNumericValue(newValue,localValue,opts);setInputValue((newValue==null?void 0:newValue.toString())||'');setLocalValue(numericValue);_onChange==null?void 0:_onChange(numericValue);setHasError(!isValidNumber(newValue,opts));},onBlur:function onBlur(){setInputValue(localValue);setHasError(!isValidNumber(localValue,opts));},value:inputValue,keyboardType:useInt?'number-pad':'decimal-pad',error:error||hasError},props));}
1
+ import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/inputs/NumberInput.js";var _excluded=["onChange","onBlur","value","useInt","precision","min","max","error"];import{endsWith,is}from'ramda';import React from'react';import{TextInput}from"./TextInput";import{jsx as _jsx}from"react/jsx-runtime";function isValidNumber(stringValue){var _stringValue$toString;var options=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};var _options$min=options.min,min=_options$min===void 0?Number.MIN_SAFE_INTEGER:_options$min,_options$max=options.max,max=_options$max===void 0?Number.MAX_SAFE_INTEGER:_options$max,useInt=options.useInt,precision=options.precision;if(stringValue===null||stringValue===undefined||stringValue==='')return true;if(isNaN(stringValue))return false;var numericValue=parseFloat(stringValue);if(numericValue<min)return false;if(numericValue>max)return false;var decimalPart=stringValue==null?void 0:(_stringValue$toString=stringValue.toString())==null?void 0:_stringValue$toString.split==null?void 0:_stringValue$toString.split('.')[1];if(decimalPart&&is(Number,precision)){if(decimalPart.length>precision)return false;}return true;}export function formatNumericValue(newValue,prevValue){var options=arguments.length>2&&arguments[2]!==undefined?arguments[2]:{};var _options$min2=options.min,min=_options$min2===void 0?Number.MIN_SAFE_INTEGER:_options$min2,_options$max2=options.max,max=_options$max2===void 0?Number.MAX_SAFE_INTEGER:_options$max2,useInt=options.useInt,precision=options.precision;var numericValue=newValue;if(is(Number,newValue))newValue=newValue.toString();if(newValue===null||newValue===undefined||newValue==='')return null;if(is(String,newValue))newValue=newValue.replace(',','.');if(newValue==='-')return newValue;if(useInt){if(newValue.includes('.'))return prevValue;numericValue=parseInt(newValue,10);}else{var dotsCount=newValue.split('.').length;if(dotsCount>2)return prevValue;if(endsWith('.',newValue))return newValue;numericValue=parseFloat(newValue);}if(isNaN(numericValue))return prevValue;if(numericValue<min)return min;if(numericValue>max)return max;var decimalPart=newValue.split('.')[1];if(decimalPart&&!!precision){if(decimalPart.length>precision)return prevValue;return newValue;}return numericValue;}export function NumberInput(_ref){var _onChange=_ref.onChange,_onBlur=_ref.onBlur,value=_ref.value,useInt=_ref.useInt,precision=_ref.precision,min=_ref.min,max=_ref.max,error=_ref.error,props=_objectWithoutProperties(_ref,_excluded);var _React$useState=React.useState(false),_React$useState2=_slicedToArray(_React$useState,2),hasError=_React$useState2[0],setHasError=_React$useState2[1];var _React$useState3=React.useState(value),_React$useState4=_slicedToArray(_React$useState3,2),inputValue=_React$useState4[0],setInputValue=_React$useState4[1];var _React$useState5=React.useState(value),_React$useState6=_slicedToArray(_React$useState5,2),localValue=_React$useState6[0],setLocalValue=_React$useState6[1];React.useEffect(function(){return setInputValue((value==null?void 0:value.toString())||'');},[value]);if(useInt)precision=0;if(!useInt&&precision===0)useInt=true;var opts={useInt:useInt,precision:precision,min:min,max:max};return _jsx(TextInput,Object.assign({},props,{onChange:function onChange(newValue){var numericValue=formatNumericValue(newValue,localValue,opts);setInputValue((newValue==null?void 0:newValue.toString())||'');setLocalValue(numericValue);_onChange==null?void 0:_onChange(numericValue);setHasError(!isValidNumber(newValue,opts));},onBlur:function onBlur(e){setInputValue((localValue==null?void 0:localValue.toString())||'');setHasError(!isValidNumber(localValue,opts));_onBlur==null?void 0:_onBlur(e);},value:inputValue,keyboardType:useInt?'number-pad':'decimal-pad',error:error||hasError}));}
@@ -1 +1 @@
1
- import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";import _toConsumableArray from"@babel/runtime/helpers/toConsumableArray";var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/inputs/Picker.js";var _excluded=["option","onChange","value","renderOption","useRawOption","multiple","labelKey","valueKey"],_excluded2=["renderItem","options"],_excluded3=["renderItem","options","valueKey"],_excluded4=["value","initialValue","onChange","disabled","options","renderOption","colProps","useRawOption","useFlatList","multiple","valueKey","labelKey","Wrapper"];import{is}from'ramda';import React from'react';import{Col}from"../structure/Col";import{FlatList}from"../list/FlatList";import{LoadingView}from"../state/LoadingView";import{Row}from"../structure/Row";import{normalizeString}from"../../helpers/string";import{useOptions}from"../../helpers/options";import{jsx as _jsx}from"react/jsx-runtime";export function getOption(options,value){var config=arguments.length>2&&arguments[2]!==undefined?arguments[2]:{};if(!(options!=null&&options.length))return value;var option=options.find(function(option){return compareOptionsValues(option,value,config);});return option||value;}export function getOptionLabel(options,value){var config=arguments.length>2&&arguments[2]!==undefined?arguments[2]:{};if(!(options!=null&&options.length))return'';var labelKey=config.labelKey;var selectedOption=getOption(options,value,config);var label=(selectedOption==null?void 0:selectedOption[labelKey])||value;if(!is(String,label))return'';return label;}export function searchOptions(options,search){var config=arguments.length>2&&arguments[2]!==undefined?arguments[2]:{};var labelKey=config.labelKey;if(!(options!=null&&options.length))return options;if(!search)return options;return options.filter(function(item){var _normalizeString;return(_normalizeString=normalizeString(item==null?void 0:item[labelKey]))==null?void 0:_normalizeString.includes(normalizeString(search));});}function isSelected(value,option){var config=arguments.length>2&&arguments[2]!==undefined?arguments[2]:{};return!!config.multiple?value==null?void 0:value.some==null?void 0:value.some(function(item){return compareOptionsValues(item,option,config);}):compareOptionsValues(value,option,config);}function compareOptionsValues(optionA,optionB){var config=arguments.length>2&&arguments[2]!==undefined?arguments[2]:{};var valueKey=config.valueKey||'value';var valueA=(optionA==null?void 0:optionA[valueKey])||optionA;var valueB=(optionB==null?void 0:optionB[valueKey])||optionB;if(!valueA||!valueB)return false;return valueA===valueB;}function formatSingleChangeValue(option,value,_ref){var useRawOption=_ref.useRawOption,selected=_ref.selected,valueKey=_ref.valueKey;var selectedOption=option;var selectedValue=option[valueKey];if(!!useRawOption)selectedValue=option;if(selected){selectedOption=null;selectedValue=null;}return selectedValue;}function formatMultipleChangeValue(option,value,_ref2){var useRawOption=_ref2.useRawOption,selected=_ref2.selected,multiple=_ref2.multiple,valueKey=_ref2.valueKey;var selectedOption=option;var selectedValue=option[valueKey];value=_toConsumableArray(value||[]);if(!!useRawOption)selectedValue=option;if(selected){value=value.filter(function(item){return!isSelected(item,selectedOption,{multiple:multiple,valueKey:valueKey});});}else{value.push(selectedValue);}return value;}function PickerItem(_ref3){var option=_ref3.option,onChange=_ref3.onChange,value=_ref3.value,renderOption=_ref3.renderOption,useRawOption=_ref3.useRawOption,multiple=_ref3.multiple,labelKey=_ref3.labelKey,valueKey=_ref3.valueKey,props=_objectWithoutProperties(_ref3,_excluded);var selected=isSelected(value,option,{multiple:multiple,valueKey:valueKey});var handleChange=function handleChange(){var formatChangeValueFunc=multiple?formatMultipleChangeValue:formatSingleChangeValue;var formattedValue=formatChangeValueFunc(option,value,{selected:selected,useRawOption:useRawOption,valueKey:valueKey});onChange(formattedValue,option);};return _jsx(Col,Object.assign({},props,{children:renderOption({option:option,selected:selected,onChange:handleChange,valueKey:valueKey,labelKey:labelKey})}));}function DefaultPickerWrapper(_ref4){var renderItem=_ref4.renderItem,options=_ref4.options,props=_objectWithoutProperties(_ref4,_excluded2);return _jsx(Row,Object.assign({className:"neko-picker",gap:"md"},props,{children:options==null?void 0:options.map==null?void 0:options.map(function(option){return renderItem(option);})}));}function FlatListPickerWrapper(_ref5){var _renderItem=_ref5.renderItem,options=_ref5.options,valueKey=_ref5.valueKey,props=_objectWithoutProperties(_ref5,_excluded3);return _jsx(FlatList,Object.assign({keyExtractor:function keyExtractor(i){return i[valueKey];},data:options,divider:true,fullH:true,renderItem:function renderItem(_ref6){var option=_ref6.item;return _renderItem(option);}},props));}export function Picker(_ref7){var _this=this;var value=_ref7.value,initialValue=_ref7.initialValue,onChange=_ref7.onChange,disabled=_ref7.disabled,options=_ref7.options,renderOption=_ref7.renderOption,colProps=_ref7.colProps,useRawOption=_ref7.useRawOption,useFlatList=_ref7.useFlatList,multiple=_ref7.multiple,valueKey=_ref7.valueKey,labelKey=_ref7.labelKey,Wrapper=_ref7.Wrapper,rootProps=_objectWithoutProperties(_ref7,_excluded4);var _React$useState=React.useState(initialValue),_React$useState2=_slicedToArray(_React$useState,2),localValue=_React$useState2[0],setLocalValue=_React$useState2[1];value=value===undefined?localValue:value;onChange=onChange||setLocalValue;var _useOptions=useOptions(options,{}),finalOptions=_useOptions.options,isFirstLoad=_useOptions.isFirstLoad;var handleChange=function handleChange(v,option){if(!!disabled)return;setLocalValue(v);onChange==null?void 0:onChange(v,option);};valueKey=valueKey||'value';labelKey=labelKey||'label';if(!renderOption){console.error('Picker requires a renderOption prop');return false;}Wrapper=Wrapper||(useFlatList?FlatListPickerWrapper:DefaultPickerWrapper);return _jsx(LoadingView,{active:isFirstLoad,replaceChildren:true,children:_jsx(Wrapper,Object.assign({},rootProps,{valueKey:valueKey,options:finalOptions,renderItem:function renderItem(option){return _jsx(PickerItem,Object.assign({option:option,onChange:handleChange,value:value,renderOption:renderOption,useRawOption:useRawOption,multiple:multiple,valueKey:valueKey,labelKey:labelKey},colProps),option.value);}}))});}
1
+ import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";import _toConsumableArray from"@babel/runtime/helpers/toConsumableArray";var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/inputs/Picker.js";var _excluded=["option","onChange","value","renderOption","useRawOption","multiple","labelKey","valueKey"],_excluded2=["renderItem","options"],_excluded3=["renderItem","options","valueKey"],_excluded4=["value","initialValue","onChange","disabled","options","renderOption","colProps","useRawOption","useFlatList","multiple","valueKey","labelKey","Wrapper"];import{is}from'ramda';import React from'react';import{Col}from"../structure/Col";import{DrawerFlatList}from"../modals/bottomDrawer";import{LoadingView}from"../state/LoadingView";import{Row}from"../structure/Row";import{View}from"../structure";import{normalizeString}from"../../helpers/string";import{useOptions}from"../../helpers/options";import{jsx as _jsx}from"react/jsx-runtime";export function getOption(options,value){var config=arguments.length>2&&arguments[2]!==undefined?arguments[2]:{};if(!(options!=null&&options.length))return value;var option=options.find(function(option){return compareOptionsValues(option,value,config);});return option||value;}export function getOptionLabel(options,value){var config=arguments.length>2&&arguments[2]!==undefined?arguments[2]:{};if(!(options!=null&&options.length))return'';var labelKey=config.labelKey;var selectedOption=getOption(options,value,config);var label=(selectedOption==null?void 0:selectedOption[labelKey])||value;if(!is(String,label))return'';return label;}export function searchOptions(options,search){var config=arguments.length>2&&arguments[2]!==undefined?arguments[2]:{};var labelKey=config.labelKey;if(!(options!=null&&options.length))return options;if(!search)return options;return options.filter(function(item){var _normalizeString;return(_normalizeString=normalizeString(item==null?void 0:item[labelKey]))==null?void 0:_normalizeString.includes(normalizeString(search));});}function isSelected(value,option){var config=arguments.length>2&&arguments[2]!==undefined?arguments[2]:{};return!!config.multiple?value==null?void 0:value.some==null?void 0:value.some(function(item){return compareOptionsValues(item,option,config);}):compareOptionsValues(value,option,config);}function compareOptionsValues(optionA,optionB){var config=arguments.length>2&&arguments[2]!==undefined?arguments[2]:{};var valueKey=config.valueKey||'value';var valueA=(optionA==null?void 0:optionA[valueKey])||optionA;var valueB=(optionB==null?void 0:optionB[valueKey])||optionB;if(!valueA||!valueB)return false;return valueA===valueB;}function formatSingleChangeValue(option,value,_ref){var useRawOption=_ref.useRawOption,selected=_ref.selected,valueKey=_ref.valueKey;var selectedOption=option;var selectedValue=option[valueKey];if(!!useRawOption)selectedValue=option;if(selected){selectedOption=null;selectedValue=null;}return selectedValue;}function formatMultipleChangeValue(option,value,_ref2){var useRawOption=_ref2.useRawOption,selected=_ref2.selected,multiple=_ref2.multiple,valueKey=_ref2.valueKey;var selectedOption=option;var selectedValue=option[valueKey];value=_toConsumableArray(value||[]);if(!!useRawOption)selectedValue=option;if(selected){value=value.filter(function(item){return!isSelected(item,selectedOption,{multiple:multiple,valueKey:valueKey});});}else{value.push(selectedValue);}return value;}function PickerItem(_ref3){var option=_ref3.option,onChange=_ref3.onChange,value=_ref3.value,renderOption=_ref3.renderOption,useRawOption=_ref3.useRawOption,multiple=_ref3.multiple,labelKey=_ref3.labelKey,valueKey=_ref3.valueKey,props=_objectWithoutProperties(_ref3,_excluded);var selected=isSelected(value,option,{multiple:multiple,valueKey:valueKey});var handleChange=function handleChange(){var formatChangeValueFunc=multiple?formatMultipleChangeValue:formatSingleChangeValue;var formattedValue=formatChangeValueFunc(option,value,{selected:selected,useRawOption:useRawOption,valueKey:valueKey});onChange(formattedValue,option);};return _jsx(Col,Object.assign({},props,{children:renderOption({option:option,selected:selected,onChange:handleChange,valueKey:valueKey,labelKey:labelKey})}));}function DefaultPickerWrapper(_ref4){var renderItem=_ref4.renderItem,options=_ref4.options,props=_objectWithoutProperties(_ref4,_excluded2);return _jsx(Row,Object.assign({className:"neko-picker",gap:"md"},props,{children:options==null?void 0:options.map==null?void 0:options.map(function(option){return renderItem(option);})}));}function FlatListPickerWrapper(_ref5){var _renderItem=_ref5.renderItem,options=_ref5.options,valueKey=_ref5.valueKey,props=_objectWithoutProperties(_ref5,_excluded3);return _jsx(DrawerFlatList,Object.assign({keyExtractor:function keyExtractor(i){return i[valueKey];},data:options,divider:true,fullH:true,renderItem:function renderItem(_ref6){var option=_ref6.item;return _renderItem(option);}},props));}export function Picker(_ref7){var _this=this;var value=_ref7.value,initialValue=_ref7.initialValue,onChange=_ref7.onChange,disabled=_ref7.disabled,options=_ref7.options,renderOption=_ref7.renderOption,colProps=_ref7.colProps,useRawOption=_ref7.useRawOption,useFlatList=_ref7.useFlatList,multiple=_ref7.multiple,valueKey=_ref7.valueKey,labelKey=_ref7.labelKey,Wrapper=_ref7.Wrapper,rootProps=_objectWithoutProperties(_ref7,_excluded4);var _React$useState=React.useState(initialValue),_React$useState2=_slicedToArray(_React$useState,2),localValue=_React$useState2[0],setLocalValue=_React$useState2[1];value=value===undefined?localValue:value;onChange=onChange||setLocalValue;var _useOptions=useOptions(options,{}),finalOptions=_useOptions.options,isFirstLoad=_useOptions.isFirstLoad;var handleChange=function handleChange(v,option){if(!!disabled)return;setLocalValue(v);onChange==null?void 0:onChange(v,option);};valueKey=valueKey||'value';labelKey=labelKey||'label';if(!renderOption){console.error('Picker requires a renderOption prop');return false;}Wrapper=Wrapper||(useFlatList?FlatListPickerWrapper:DefaultPickerWrapper);return _jsx(LoadingView,{active:isFirstLoad,replaceChildren:true,children:_jsx(Wrapper,Object.assign({},rootProps,{valueKey:valueKey,options:finalOptions,renderItem:function renderItem(option){return _jsx(PickerItem,Object.assign({option:option,onChange:handleChange,value:value,renderOption:renderOption,useRawOption:useRawOption,multiple:multiple,valueKey:valueKey,labelKey:labelKey},colProps),option.value);}}))});}
@@ -1 +1 @@
1
- import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/inputs/Select.js";var _excluded=["ref"],_excluded2=["value","onChange","onChangeSearch","options","placement","placeholder","initialLabel","useBottomDrawer","useSearch","renderOption","labelKey","valueKey","useRawOption","multiple","onEndReached","renderFooter","renderHeader","pickerProps","popoverProps","popoverMaxHeight"];import React from'react';import{Icon,IconLabel}from"../presentation";import{Link}from"../actions";import{LinkInput}from"./LinkInput";import{Picker,getOptionLabel,searchOptions}from"./Picker";import{Popover}from"../structure/popover/Popover";import{TextInput}from"./TextInput";import{View}from"../structure";import{useResponsiveValue}from"../../responsive";import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from"react/jsx-runtime";function FullWidthInputWrapper(_ref){var ref=_ref.ref,props=_objectWithoutProperties(_ref,_excluded);return _jsx(View,{fullW:true,ref:ref,children:_jsx(TextInput,Object.assign({},props))});}export function Select(_ref2){var _pickerProps,_pickerProps2,_pickerProps3,_pickerProps4,_pickerProps5,_pickerProps6,_pickerProps7,_this=this,_value3;var value=_ref2.value,onChange=_ref2.onChange,onChangeSearch=_ref2.onChangeSearch,options=_ref2.options,placement=_ref2.placement,placeholder=_ref2.placeholder,initialLabel=_ref2.initialLabel,_ref2$useBottomDrawer=_ref2.useBottomDrawer,useBottomDrawer=_ref2$useBottomDrawer===void 0?{native:true,sm:true,md:true}:_ref2$useBottomDrawer,useSearch=_ref2.useSearch,renderOption=_ref2.renderOption,labelKey=_ref2.labelKey,valueKey=_ref2.valueKey,useRawOption=_ref2.useRawOption,multiple=_ref2.multiple,onEndReached=_ref2.onEndReached,renderFooter=_ref2.renderFooter,renderHeader=_ref2.renderHeader,pickerProps=_ref2.pickerProps,popoverProps=_ref2.popoverProps,popoverMaxHeight=_ref2.popoverMaxHeight,props=_objectWithoutProperties(_ref2,_excluded2);var _React$useState=React.useState(false),_React$useState2=_slicedToArray(_React$useState,2),focus=_React$useState2[0],setFocus=_React$useState2[1];var _React$useState3=React.useState(''),_React$useState4=_slicedToArray(_React$useState3,2),search=_React$useState4[0],setSearch=_React$useState4[1];var _React$useState5=React.useState(initialLabel||''),_React$useState6=_slicedToArray(_React$useState5,2),inputValue=_React$useState6[0],setInputValue=_React$useState6[1];var _React$useState7=React.useState(value),_React$useState8=_slicedToArray(_React$useState7,2),localValue=_React$useState8[0],setLocalValue=_React$useState8[1];labelKey=labelKey||((_pickerProps=pickerProps)==null?void 0:_pickerProps.labelKey)||'label';valueKey=valueKey||((_pickerProps2=pickerProps)==null?void 0:_pickerProps2.valueKey)||'value';useRawOption=useRawOption||((_pickerProps3=pickerProps)==null?void 0:_pickerProps3.useRawOption);multiple=multiple||((_pickerProps4=pickerProps)==null?void 0:_pickerProps4.multiple);onEndReached=onEndReached||((_pickerProps5=pickerProps)==null?void 0:_pickerProps5.onEndReached);renderFooter=renderFooter||((_pickerProps6=pickerProps)==null?void 0:_pickerProps6.renderFooter);renderHeader=renderHeader||((_pickerProps7=pickerProps)==null?void 0:_pickerProps7.renderHeader);pickerProps=Object.assign({},pickerProps,{labelKey:labelKey,valueKey:valueKey,useRawOption:useRawOption,multiple:multiple,onEndReached:onEndReached,renderFooter:renderFooter,renderHeader:renderHeader});popoverMaxHeight=popoverMaxHeight||300;useBottomDrawer=useResponsiveValue(useBottomDrawer);value=value||localValue;var handleChange=React.useCallback(function(value,option){if(!!multiple){setInputValue(value.map(function(item){return getOptionLabel(options,item,{valueKey:valueKey,labelKey:labelKey});}).join(', '));}else{setInputValue((option==null?void 0:option[labelKey])||getOptionLabel(options,option,{valueKey:valueKey,labelKey:labelKey}));}setLocalValue(value);onChange==null?void 0:onChange(value);},[labelKey,valueKey]);React.useEffect(function(){if(!!multiple){var _value;setInputValue((_value=value)==null?void 0:_value.map==null?void 0:_value.map(function(item){return getOptionLabel(options,item,{valueKey:valueKey,labelKey:labelKey});}).join(', '));}else{var _value2;var label=((_value2=value)==null?void 0:_value2[labelKey])||getOptionLabel(options,value,{valueKey:valueKey,labelKey:labelKey});if(!!label||!value)setInputValue(label);}},[value]);var handleChangeSearch=React.useCallback(function(v){onChangeSearch==null?void 0:onChangeSearch(v);setSearch(v);},[]);var Input=!useSearch||useBottomDrawer?LinkInput:FullWidthInputWrapper;var valueWatcher=multiple&&localValue;var finalRenderOption=React.useCallback(function(params){if(!!renderOption)return renderOption(params);var option=params.option,labelKey=params.labelKey,selected=params.selected;return _jsx(IconLabel,Object.assign({},option,{label:option==null?void 0:option[labelKey],flex:true,strong:selected}));},[renderOption]);return _jsx(Popover,Object.assign({trigger:"click",placement:placement||'bottomLeft',snapPoints:[450],useBottomDrawer:useBottomDrawer,parentWidth:true,padding:0,watch:[search,options,valueWatcher],unmountOnClose:true,maxHeight:popoverMaxHeight},popoverProps,{renderContent:function renderContent(_ref3){var onClose=_ref3.onClose;return _jsxs(_Fragment,{children:[useBottomDrawer&&useSearch&&_jsx(View,{padding:"md",paddingB:"xs",children:_jsx(TextInput,{prefixIcon:"search-line",prefixIconColor:"text4",value:search,onChange:handleChangeSearch})}),_jsx(Picker,Object.assign({row:false,options:searchOptions(options,search,{labelKey:labelKey}),value:value,gap:0,maxHeight:!useBottomDrawer&&popoverMaxHeight,useFlatList:true,onlyOnScreen:true,itemMinHeight:30,onChange:function onChange(v,option){handleChange(v,option);if(!multiple)onClose();}},pickerProps,{renderOption:function renderOption(_ref4){var option=_ref4.option,selected=_ref4.selected,onChange=_ref4.onChange;return _jsxs(Link,{row:true,paddingH:useBottomDrawer?'md':'sm',paddingV:"xs",minHeight:useBottomDrawer?'xl':'md',gap:"sm",onMouseDown:function onMouseDown(e){return!!multiple&&e.preventDefault();},onPress:onChange,centerV:true,bg:selected&&'primary_op10',children:[_jsx(View,{flex:true,row:true,children:finalRenderOption({option:option,labelKey:labelKey,selected:selected})}),selected&&_jsx(Icon,{name:"checkbox-circle-fill",primary:true})]});}}))]});},children:_jsx(Input,Object.assign({value:!!focus?search:inputValue,onChange:handleChangeSearch,onFocus:function onFocus(){handleChangeSearch('');setFocus(true);},onBlur:function onBlur(){setTimeout(function(){setFocus(false);},200);},placeholder:(!multiple||!((_value3=value)!=null&&_value3.length))&&placeholder,suffixIcon:"arrow-down-s-fill",suffixIconColor:"text4",fullW:true},props))}));}
1
+ import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/inputs/Select.js";var _excluded=["ref"],_excluded2=["value","onChange","onChangeSearch","options","placement","placeholder","initialLabel","useBottomDrawer","useSearch","renderOption","labelKey","valueKey","useRawOption","multiple","onEndReached","renderFooter","renderHeader","pickerProps","popoverProps","popoverMaxHeight","snapPoints"];import{dissoc}from'ramda';import React from'react';import{Icon,IconLabel}from"../presentation";import{Link}from"../actions";import{LinkInput}from"./LinkInput";import{Picker,getOptionLabel,searchOptions}from"./Picker";import{Popover}from"../structure/popover/Popover";import{TextInput}from"./TextInput";import{View}from"../structure";import{useResponsiveValue}from"../../responsive";import{jsx as _jsx,Fragment as _Fragment,jsxs as _jsxs}from"react/jsx-runtime";function FullWidthInputWrapper(_ref){var ref=_ref.ref,props=_objectWithoutProperties(_ref,_excluded);return _jsx(View,{fullW:true,ref:ref,children:_jsx(TextInput,Object.assign({},props))});}export function Select(_ref2){var _pickerProps,_pickerProps2,_pickerProps3,_pickerProps4,_pickerProps5,_pickerProps6,_pickerProps7,_this=this,_value3;var value=_ref2.value,onChange=_ref2.onChange,onChangeSearch=_ref2.onChangeSearch,options=_ref2.options,placement=_ref2.placement,placeholder=_ref2.placeholder,initialLabel=_ref2.initialLabel,_ref2$useBottomDrawer=_ref2.useBottomDrawer,useBottomDrawer=_ref2$useBottomDrawer===void 0?{native:true,sm:true,md:true}:_ref2$useBottomDrawer,useSearch=_ref2.useSearch,renderOption=_ref2.renderOption,labelKey=_ref2.labelKey,valueKey=_ref2.valueKey,useRawOption=_ref2.useRawOption,multiple=_ref2.multiple,onEndReached=_ref2.onEndReached,renderFooter=_ref2.renderFooter,renderHeader=_ref2.renderHeader,pickerProps=_ref2.pickerProps,popoverProps=_ref2.popoverProps,popoverMaxHeight=_ref2.popoverMaxHeight,snapPoints=_ref2.snapPoints,props=_objectWithoutProperties(_ref2,_excluded2);var _React$useState=React.useState(false),_React$useState2=_slicedToArray(_React$useState,2),focus=_React$useState2[0],setFocus=_React$useState2[1];var _React$useState3=React.useState(''),_React$useState4=_slicedToArray(_React$useState3,2),search=_React$useState4[0],setSearch=_React$useState4[1];var _React$useState5=React.useState(initialLabel||''),_React$useState6=_slicedToArray(_React$useState5,2),inputValue=_React$useState6[0],setInputValue=_React$useState6[1];var _React$useState7=React.useState(value),_React$useState8=_slicedToArray(_React$useState7,2),localValue=_React$useState8[0],setLocalValue=_React$useState8[1];labelKey=labelKey||((_pickerProps=pickerProps)==null?void 0:_pickerProps.labelKey)||'label';valueKey=valueKey||((_pickerProps2=pickerProps)==null?void 0:_pickerProps2.valueKey)||'value';useRawOption=useRawOption||((_pickerProps3=pickerProps)==null?void 0:_pickerProps3.useRawOption);multiple=multiple||((_pickerProps4=pickerProps)==null?void 0:_pickerProps4.multiple);onEndReached=onEndReached||((_pickerProps5=pickerProps)==null?void 0:_pickerProps5.onEndReached);renderFooter=renderFooter||((_pickerProps6=pickerProps)==null?void 0:_pickerProps6.renderFooter);renderHeader=renderHeader||((_pickerProps7=pickerProps)==null?void 0:_pickerProps7.renderHeader);pickerProps=Object.assign({},pickerProps,{labelKey:labelKey,valueKey:valueKey,useRawOption:useRawOption,multiple:multiple,onEndReached:onEndReached,renderFooter:renderFooter,renderHeader:renderHeader});popoverMaxHeight=popoverMaxHeight||300;useBottomDrawer=useResponsiveValue(useBottomDrawer);value=value||localValue;var handleChange=React.useCallback(function(value,option){if(!!multiple){setInputValue(value.map(function(item){return getOptionLabel(options,item,{valueKey:valueKey,labelKey:labelKey});}).join(', '));}else{setInputValue((option==null?void 0:option[labelKey])||getOptionLabel(options,option,{valueKey:valueKey,labelKey:labelKey}));}setLocalValue(value);onChange==null?void 0:onChange(value);},[labelKey,valueKey]);React.useEffect(function(){if(!!multiple){var _value;setInputValue((_value=value)==null?void 0:_value.map==null?void 0:_value.map(function(item){return getOptionLabel(options,item,{valueKey:valueKey,labelKey:labelKey});}).join(', '));}else{var _value2;var label=((_value2=value)==null?void 0:_value2[labelKey])||getOptionLabel(options,value,{valueKey:valueKey,labelKey:labelKey});if(!!label||!value)setInputValue(label);}},[value]);var handleChangeSearch=React.useCallback(function(v){onChangeSearch==null?void 0:onChangeSearch(v);setSearch(v);},[]);var Input=!useSearch||useBottomDrawer?LinkInput:FullWidthInputWrapper;var valueWatcher=multiple&&localValue;var finalRenderOption=React.useCallback(function(params){var _option,_option2,_option3;if(!!renderOption)return renderOption(params);var option=params.option,labelKey=params.labelKey,selected=params.selected;if((_option=option)!=null&&_option.id)option=dissoc('id',option);if((_option2=option)!=null&&_option2.color)option=Object.assign({},option,{color:undefined,iconColor:option.color});return _jsx(IconLabel,Object.assign({},option,{label:(_option3=option)==null?void 0:_option3[labelKey],flex:true,strong:selected}));},[renderOption]);return _jsx(Popover,Object.assign({trigger:"click",placement:placement||'bottomLeft',snapPoints:snapPoints||[450],useBottomDrawer:useBottomDrawer,parentWidth:true,padding:0,watch:[search,options,valueWatcher],unmountOnClose:true,maxHeight:popoverMaxHeight},popoverProps,{renderContent:function renderContent(_ref3){var onClose=_ref3.onClose;return _jsx(Picker,Object.assign({row:false,options:searchOptions(options,search,{labelKey:labelKey}),value:value,gap:0,maxHeight:!useBottomDrawer&&popoverMaxHeight,useFlatList:true,onlyOnScreen:true,itemMinHeight:30,onChange:function onChange(v,option){handleChange(v,option);if(!multiple)onClose();}},pickerProps,{renderHeader:useBottomDrawer&&useSearch?function(){return _jsxs(_Fragment,{children:[_jsx(View,{padding:"md",paddingB:"xs",children:_jsx(TextInput,{prefixIcon:"search-line",prefixIconColor:"text4",value:search,onChange:handleChangeSearch})}),renderHeader==null?void 0:renderHeader()]});}:renderHeader,renderOption:function renderOption(_ref4){var option=_ref4.option,selected=_ref4.selected,onChange=_ref4.onChange;return _jsxs(Link,{row:true,paddingH:useBottomDrawer?'md':'sm',paddingV:"xs",minHeight:useBottomDrawer?'xl':'md',gap:"sm",onMouseDown:function onMouseDown(e){return!!multiple&&e.preventDefault();},onPress:onChange,centerV:true,bg:selected&&'primary_op10',children:[_jsx(View,{flex:true,row:true,children:finalRenderOption({option:option,labelKey:labelKey,selected:selected})}),selected&&_jsx(Icon,{name:"checkbox-circle-fill",primary:true})]});}}));},children:_jsx(Input,Object.assign({value:!!focus?search:inputValue,onChange:handleChangeSearch,onFocus:function onFocus(){handleChangeSearch('');setFocus(true);},onBlur:function onBlur(){setTimeout(function(){setFocus(false);},200);},placeholder:(!multiple||!((_value3=value)!=null&&_value3.length))&&placeholder,suffixIcon:"arrow-down-s-fill",suffixIconColor:"text4",fullW:true},props))}));}
@@ -0,0 +1 @@
1
+ export{BottomDrawer}from"./web/BottomDrawer";export{ScrollView as DrawerScrollView}from"../../list/ScrollView";export{FlatList as DrawerFlatList}from"../../list/FlatList";
@@ -0,0 +1 @@
1
+ export{BottomDrawer}from"./native/BottomDrawer";export{DrawerScrollView,DrawerFlatList}from"./native/DrawerScrollView";export{createDrawerScrollComponent}from"./native/createDrawerScrollComponent";export{DrawerHandle}from"./native/DrawerHandle";export{DrawerProvider,useDrawerContext}from"./native/DrawerContext";
@@ -0,0 +1 @@
1
+ export{BottomDrawer}from"./native/BottomDrawer";export{DrawerScrollView,DrawerFlatList}from"./native/DrawerScrollView";export{createDrawerScrollComponent}from"./native/createDrawerScrollComponent";export{DrawerHandle}from"./native/DrawerHandle";export{DrawerProvider,useDrawerContext}from"./native/DrawerContext";
@@ -0,0 +1 @@
1
+ import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import _toConsumableArray from"@babel/runtime/helpers/toConsumableArray";import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/modals/bottomDrawer/native/BottomDrawer.js";var _excluded=["children","render","setRender","open","onClose","snapPoints","useSafeArea","enableOverScroll","enableHandlePanningGesture","enableContentPanningGesture","animationConfig","hideHandle","contentProps"],_excluded2=["open"];import{GestureDetector,Gesture,GestureHandlerRootView}from'react-native-gesture-handler';import{Modal,Dimensions,StyleSheet,BackHandler,Platform}from"react-native-web";import{useSafeAreaInsets}from'react-native-safe-area-context';import Animated,{useSharedValue,useAnimatedStyle,withSpring,runOnJS}from'react-native-reanimated';import React from'react';import{DrawerHandle}from"./DrawerHandle";import{DrawerProvider}from"./DrawerContext";import{Pressable}from"../../../actions/Pressable";import{View}from"../../../structure/View";import{normalizeSnapPoints,findClosestSnapPoint}from"./utils";import{useColors}from"../../../../theme/ThemeHandler";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";function InnerContent(_ref){var children=_ref.children,render=_ref.render,setRender=_ref.setRender,open=_ref.open,onClose=_ref.onClose,_ref$snapPoints=_ref.snapPoints,snapPoints=_ref$snapPoints===void 0?['50%']:_ref$snapPoints,_ref$useSafeArea=_ref.useSafeArea,useSafeArea=_ref$useSafeArea===void 0?true:_ref$useSafeArea,_ref$enableOverScroll=_ref.enableOverScroll,enableOverScroll=_ref$enableOverScroll===void 0?true:_ref$enableOverScroll,_ref$enableHandlePann=_ref.enableHandlePanningGesture,enableHandlePanningGesture=_ref$enableHandlePann===void 0?true:_ref$enableHandlePann,_ref$enableContentPan=_ref.enableContentPanningGesture,enableContentPanningGesture=_ref$enableContentPan===void 0?true:_ref$enableContentPan,_ref$animationConfig=_ref.animationConfig,animationConfig=_ref$animationConfig===void 0?{damping:50,stiffness:500,mass:0.3,overshootClamping:true,restDisplacementThreshold:10,restSpeedThreshold:10}:_ref$animationConfig,hideHandle=_ref.hideHandle,contentProps=_ref.contentProps,props=_objectWithoutProperties(_ref,_excluded);var _Dimensions$get=Dimensions.get('window'),SCREEN_HEIGHT=_Dimensions$get.height;var insets=useSafeAreaInsets();var bottomInset=useSafeArea?insets.bottom:0;var colors=useColors();var translateY=useSharedValue(SCREEN_HEIGHT);var snapIndex=useSharedValue(0);var velocityY=useSharedValue(0);var normalizedSnapPoints=React.useMemo(function(){return normalizeSnapPoints(snapPoints,SCREEN_HEIGHT,bottomInset);},[snapPoints,useSafeArea]);var maxSnapPoint=React.useMemo(function(){return Math.max.apply(Math,_toConsumableArray(normalizedSnapPoints));},[normalizedSnapPoints]);var minSnapPoint=React.useMemo(function(){return Math.min.apply(Math,_toConsumableArray(normalizedSnapPoints));},[normalizedSnapPoints]);React.useEffect(function(){if(open){var targetY=SCREEN_HEIGHT-normalizedSnapPoints[0];translateY.value=withSpring(targetY,animationConfig);snapIndex.value=0;}else{translateY.value=withSpring(SCREEN_HEIGHT,animationConfig,function(){runOnJS(setRender)(false);});snapIndex.value=-1;}},[open]);React.useEffect(function(){if(!onClose||!open||Platform.OS!=='android')return;var backHandler=BackHandler.addEventListener('hardwareBackPress',function(){onClose();return true;});return function(){return backHandler.remove();};},[open,onClose]);var handleClose=React.useCallback(function(){onClose==null?void 0:onClose();},[onClose]);if(!onClose)handleClose=false;var snapTo=React.useCallback(function(index){'worklet';var snapPoint=normalizedSnapPoints[index];if(snapPoint!==undefined){translateY.value=withSpring(SCREEN_HEIGHT-snapPoint,animationConfig);snapIndex.value=index;}},[normalizedSnapPoints]);var gestureStartTranslateY=useSharedValue(0);var panRef=React.useRef();var panGesture=React.useMemo(function(){return Gesture.Pan().withRef(panRef).enabled(enableHandlePanningGesture||enableContentPanningGesture).onStart(function(){gestureStartTranslateY.value=translateY.value;}).onUpdate(function(event){var newTranslateY=gestureStartTranslateY.value+event.translationY;var maxPosition=SCREEN_HEIGHT-maxSnapPoint;if(enableOverScroll&&newTranslateY>=maxPosition){translateY.value=newTranslateY;}else{translateY.value=Math.max(maxPosition,Math.min(SCREEN_HEIGHT,newTranslateY));}velocityY.value=event.velocityY;}).onEnd(function(){var currentPosition=SCREEN_HEIGHT-translateY.value;var shouldClose=!!handleClose&&(velocityY.value>1500||velocityY.value>800&&currentPosition<minSnapPoint||currentPosition<minSnapPoint*0.35);if(shouldClose){runOnJS(handleClose)();}else{var closestSnapIndex=findClosestSnapPoint(currentPosition,normalizedSnapPoints,velocityY.value);var targetSnapPoint=normalizedSnapPoints[closestSnapIndex];translateY.value=withSpring(SCREEN_HEIGHT-targetSnapPoint,animationConfig);snapIndex.value=closestSnapIndex;}});},[enableHandlePanningGesture,enableContentPanningGesture,enableOverScroll,maxSnapPoint,minSnapPoint,normalizedSnapPoints,animationConfig,handleClose]);var animatedSheetStyle=useAnimatedStyle(function(){var currentHeight=SCREEN_HEIGHT-translateY.value;return{transform:[{translateY:translateY.value}],maxHeight:currentHeight};});var contextValue=React.useMemo(function(){return{translateY:translateY,snapIndex:snapIndex,maxSnapPoint:maxSnapPoint,snapTo:snapTo,animationConfig:animationConfig,panRef:panRef,normalizedSnapPoints:normalizedSnapPoints,SCREEN_HEIGHT:SCREEN_HEIGHT,minSnapPoint:minSnapPoint,handleClose:handleClose,velocityY:velocityY};},[maxSnapPoint,normalizedSnapPoints,SCREEN_HEIGHT,minSnapPoint,handleClose]);return _jsxs(GestureHandlerRootView,{style:{flex:1},children:[_jsx(Pressable,{absoluteFill:true,bg:"backdrop_op70",onPress:function onPress(){if(!handleClose)return;runOnJS(handleClose)();}}),_jsx(DrawerProvider,{value:contextValue,children:_jsx(GestureDetector,{gesture:panGesture,children:_jsx(Animated.View,{style:[styles.container,{height:SCREEN_HEIGHT},animatedSheetStyle],pointerEvents:"box-none",children:_jsxs(View,Object.assign({flex:true,bg:"overlayBG",shadow:true,paddingB:useSafeArea&&bottomInset,borderRadiusT:"xxxl",marginL:"auto",marginR:"auto",fullW:true},props,{children:[_jsx(DrawerHandle,{hide:hideHandle}),_jsx(View,Object.assign({flex:true},contentProps,{children:children}))]}))})})})]});}var styles=StyleSheet.create({container:{position:'absolute',left:0,right:0,top:0}});export function BottomDrawer(_ref2){var open=_ref2.open,props=_objectWithoutProperties(_ref2,_excluded2);var _React$useState=React.useState(open),_React$useState2=_slicedToArray(_React$useState,2),render=_React$useState2[0],setRender=_React$useState2[1];React.useEffect(function(){if(open){setRender(true);}},[open]);return _jsx(Modal,{visible:render,transparent:true,statusBarTranslucent:true,navigationBarTranslucent:true,animationType:"none",children:_jsx(InnerContent,Object.assign({},props,{open:open,render:render,setRender:setRender}))});}
@@ -0,0 +1 @@
1
+ var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/modals/bottomDrawer/native/DrawerContext.js";import React from'react';import{jsx as _jsx}from"react/jsx-runtime";var DrawerContext=React.createContext(null);export function DrawerProvider(_ref){var children=_ref.children,value=_ref.value;return _jsx(DrawerContext.Provider,{value:value,children:children});}export function useDrawerContext(){var context=React.useContext(DrawerContext);if(!context){throw new Error('useDrawerContext must be used within a DrawerProvider');}return context;}
@@ -0,0 +1 @@
1
+ var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/modals/bottomDrawer/native/DrawerHandle.js";import{Divider}from"../../../helpers/Separator";import{View}from"../../../structure/View";import{jsx as _jsx}from"react/jsx-runtime";export function DrawerHandle(_ref){var hide=_ref.hide;if(!!hide)return false;return _jsx(View,{center:true,padding:"sm",children:_jsx(Divider,{maxWidth:35,line:4,color:"text4_op30",height:4})});}
@@ -0,0 +1 @@
1
+ import{FlatList,ScrollView}from"../../../list";import{createDrawerScrollComponent}from"./createDrawerScrollComponent";export var DrawerScrollView=createDrawerScrollComponent(ScrollView);export var DrawerFlatList=createDrawerScrollComponent(FlatList);
@@ -0,0 +1 @@
1
+ import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/modals/bottomDrawer/native/createDrawerScrollComponent.js";var _excluded=["ref","onScroll"];import{Gesture,GestureDetector}from'react-native-gesture-handler';import Animated,{useSharedValue,useAnimatedScrollHandler,useAnimatedRef,scrollTo,withSpring,runOnJS}from'react-native-reanimated';import React from'react';import{findClosestSnapPoint,clamp}from"./utils";import{useDrawerContext}from"./DrawerContext";import{jsx as _jsx}from"react/jsx-runtime";export function createDrawerScrollComponent(Component){var AnimatedComponent=Animated.createAnimatedComponent(Component);function DrawerScrollComponent(_ref){var ref=_ref.ref,_onScroll=_ref.onScroll,props=_objectWithoutProperties(_ref,_excluded);var _useDrawerContext=useDrawerContext(),translateY=_useDrawerContext.translateY,panRef=_useDrawerContext.panRef,normalizedSnapPoints=_useDrawerContext.normalizedSnapPoints,SCREEN_HEIGHT=_useDrawerContext.SCREEN_HEIGHT,maxSnapPoint=_useDrawerContext.maxSnapPoint,minSnapPoint=_useDrawerContext.minSnapPoint,handleClose=_useDrawerContext.handleClose,animationConfig=_useDrawerContext.animationConfig,snapIndex=_useDrawerContext.snapIndex;var scrollRef=useAnimatedRef();var scrollOffset=useSharedValue(0);var prevTranslationY=useSharedValue(0);var drawerMoved=useSharedValue(false);React.useImperativeHandle(ref,function(){return scrollRef.current;});var maxPosition=SCREEN_HEIGHT-maxSnapPoint;var panGesture=React.useMemo(function(){return Gesture.Pan().activeOffsetY([-10,10]).blocksExternalGesture(panRef).onStart(function(){prevTranslationY.value=0;drawerMoved.value=false;}).onUpdate(function(event){var delta=event.translationY-prevTranslationY.value;prevTranslationY.value=event.translationY;var currentY=translateY.value;var atMaxSnap=currentY<=maxPosition+1;var atScrollTop=scrollOffset.value<=0;if(drawerMoved.value){var newY=clamp(currentY+delta,maxPosition,SCREEN_HEIGHT);translateY.value=newY;scrollTo(scrollRef,0,0,false);if(newY<=maxPosition+1&&delta<0){drawerMoved.value=false;}}else if(!atMaxSnap){drawerMoved.value=true;var _newY=clamp(currentY+delta,maxPosition,SCREEN_HEIGHT);translateY.value=_newY;scrollTo(scrollRef,0,0,false);}else if(atScrollTop&&delta>0){drawerMoved.value=true;var _newY2=clamp(currentY+delta,maxPosition,SCREEN_HEIGHT);translateY.value=_newY2;scrollTo(scrollRef,0,0,false);}}).onEnd(function(event){if(!drawerMoved.value)return;var currentPosition=SCREEN_HEIGHT-translateY.value;var velocity=event.velocityY;var shouldClose=!!handleClose&&(velocity>1500||velocity>800&&currentPosition<minSnapPoint||currentPosition<minSnapPoint*0.35);if(shouldClose){runOnJS(handleClose)();}else{var closestSnapIndex=findClosestSnapPoint(currentPosition,normalizedSnapPoints,velocity);var targetSnapPoint=normalizedSnapPoints[closestSnapIndex];translateY.value=withSpring(SCREEN_HEIGHT-targetSnapPoint,animationConfig);snapIndex.value=closestSnapIndex;}});},[panRef,maxPosition,normalizedSnapPoints,minSnapPoint,handleClose,animationConfig]);var nativeGesture=React.useMemo(function(){return Gesture.Native();},[]);var composedGesture=React.useMemo(function(){return Gesture.Simultaneous(panGesture,nativeGesture);},[panGesture,nativeGesture]);var animatedScrollHandler=useAnimatedScrollHandler({onScroll:function onScroll(event){scrollOffset.value=event.contentOffset.y;if(_onScroll){runOnJS(_onScroll)(event);}}});return _jsx(GestureDetector,{gesture:composedGesture,children:_jsx(AnimatedComponent,Object.assign({ref:scrollRef,style:{flex:1},onScroll:animatedScrollHandler,scrollEventThrottle:16,bounces:false,overScrollMode:"never"},props))});}return DrawerScrollComponent;}
@@ -0,0 +1 @@
1
+ import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _excluded=["snapPoints","contentProps"];var _this=this,_jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/modals/bottomDrawer/web/BottomDrawer.js";import{Drawer}from"../../drawer";import{jsx as _jsx}from"react/jsx-runtime";export var BottomDrawer=function BottomDrawer(_ref){var snapPoints=_ref.snapPoints,contentProps=_ref.contentProps,props=_objectWithoutProperties(_ref,_excluded);return _jsx(Drawer,Object.assign({height:(snapPoints==null?void 0:snapPoints[0])||400,contentProps:Object.assign({padding:0},contentProps)},props));};
@@ -0,0 +1 @@
1
+ var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/modals/drawer/Drawer.js";import{Modal}from"../modal/Modal";import{jsx as _jsx}from"react/jsx-runtime";export function Drawer(props){return _jsx(Modal,Object.assign({position:"bottom"},props));}
@@ -0,0 +1 @@
1
+ export*from"./modal";export*from"./drawer";export*from"./bottomDrawer";export*from"./router";
@@ -0,0 +1 @@
1
+ import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";import _defineProperty from"@babel/runtime/helpers/defineProperty";import _objectDestructuringEmpty from"@babel/runtime/helpers/objectDestructuringEmpty";import _slicedToArray from"@babel/runtime/helpers/slicedToArray";var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/modals/modal/Modal.js";var _excluded=["open","onClose","title","width","children","header","footer","noLayout","disableOutsideClick"],_excluded2=["contentProps","headerProps","footerProps","position"];import{pipe}from'ramda';import{AnimatedView}from"../../animations/AnimatedView";import{ModalBackdrop}from"./ModalBackdrop";import{ModalContent}from"./ModalContent";import{ModalFooter}from"./ModalFooter";import{ModalHeader}from"./ModalHeader";import{Portal}from"../../helpers/Portal";import{useDefaultModifier}from"../../../modifiers/default";import{useThemeComponentModifier}from"../../../modifiers/themeComponent";import{jsx as _jsx,Fragment as _Fragment,jsxs as _jsxs}from"react/jsx-runtime";var DEFAULT_PROPS=function DEFAULT_PROPS(_ref){var _ref2=_slicedToArray(_ref,2);_objectDestructuringEmpty(_ref2[0]);var position=_ref2[1].position;var radiusKey='br';var height=undefined;if(position==='bottom'){radiusKey='borderRadiusT';height='95%';}else if(position==='top'){radiusKey='borderRadiusB';height='95%';}else if(position==='right'){radiusKey='borderRadiusL';height='100%';}else if(position==='left'){radiusKey='borderRadiusR';height='100%';}return _defineProperty(_defineProperty(_defineProperty(_defineProperty({maxWidth:'100%',maxHeight:!position&&'95%',height:height,scale:!position,fade:!!position,slide:position&&{from:position}},radiusKey,'xl'),"bg",'overlayBG'),"overflow",'hidden'),"shadow",true);};export function Modal(_ref4){var open=_ref4.open,onClose=_ref4.onClose,title=_ref4.title,_ref4$width=_ref4.width,width=_ref4$width===void 0?500:_ref4$width,children=_ref4.children,header=_ref4.header,footer=_ref4.footer,noLayout=_ref4.noLayout,disableOutsideClick=_ref4.disableOutsideClick,rootProps=_objectWithoutProperties(_ref4,_excluded);var _pipe=pipe(useThemeComponentModifier('Modal'),useDefaultModifier(DEFAULT_PROPS))([{},rootProps]),_pipe2=_slicedToArray(_pipe,2);_objectDestructuringEmpty(_pipe2[0]);var formattedProps=_pipe2[1];var contentProps=formattedProps.contentProps,headerProps=formattedProps.headerProps,footerProps=formattedProps.footerProps,position=formattedProps.position,props=_objectWithoutProperties(formattedProps,_excluded2);var content=children;if(!noLayout){content=_jsxs(_Fragment,{children:[_jsx(ModalHeader,Object.assign({title:title,onClose:onClose},headerProps,{children:header})),_jsx(ModalContent,Object.assign({},contentProps,{children:children})),_jsx(ModalFooter,Object.assign({},footerProps,{children:footer}))]});}return _jsx(Portal,{children:_jsx(ModalBackdrop,{open:open,onClose:!disableOutsideClick&&onClose,position:position,children:_jsx(AnimatedView,Object.assign({className:"neko-modal",open:open,width:width},props,{onPress:function onPress(e){return e.stopPropagation();},children:content}))})});}
@@ -0,0 +1 @@
1
+ import _objectDestructuringEmpty from"@babel/runtime/helpers/objectDestructuringEmpty";import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/modals/modal/Modal.native.js";var _excluded=["open","onClose","title","width","children","header","footer","noLayout","disableOutsideClick"],_excluded2=["contentProps","headerProps","footerProps"];import{Modal as RNModal,ScrollView}from"react-native-web";import{pipe}from'ramda';import{ModalBackdrop}from"./ModalBackdrop";import{ModalContent}from"./ModalContent";import{ModalFooter}from"./ModalFooter";import{ModalHeader}from"./ModalHeader";import{Pressable}from"../../actions/Pressable";import{View}from"../../structure/View";import{useDefaultModifier}from"../../../modifiers/default";import{useThemeComponentModifier}from"../../../modifiers/themeComponent";import{jsx as _jsx,Fragment as _Fragment,jsxs as _jsxs}from"react/jsx-runtime";var DEFAULT_PROPS={maxWidth:'90%',maxHeight:'90%',scale:true,br:'xl',bg:'overlayBG',overflow:'hidden',shadow:true};export function Modal(_ref){var open=_ref.open,onClose=_ref.onClose,title=_ref.title,_ref$width=_ref.width,width=_ref$width===void 0?500:_ref$width,children=_ref.children,header=_ref.header,footer=_ref.footer,noLayout=_ref.noLayout,disableOutsideClick=_ref.disableOutsideClick,rootProps=_objectWithoutProperties(_ref,_excluded);var _pipe=pipe(useThemeComponentModifier('Modal'),useDefaultModifier(DEFAULT_PROPS))([{},rootProps]),_pipe2=_slicedToArray(_pipe,2);_objectDestructuringEmpty(_pipe2[0]);var formattedProps=_pipe2[1];var contentProps=formattedProps.contentProps,headerProps=formattedProps.headerProps,footerProps=formattedProps.footerProps,props=_objectWithoutProperties(formattedProps,_excluded2);var content=children;if(!noLayout){content=_jsxs(_Fragment,{children:[_jsx(ModalHeader,Object.assign({title:title,onClose:onClose},headerProps,{children:header})),_jsx(ScrollView,{children:_jsx(ModalContent,Object.assign({},contentProps,{children:children}))}),_jsx(ModalFooter,Object.assign({},footerProps,{children:footer}))]});}return _jsx(RNModal,{animationType:"fade",transparent:true,visible:open,onRequestClose:onClose,allowSwipeDismissal:true,navigationBarTranslucent:true,statusBarTranslucent:true,children:_jsxs(ModalBackdrop,{open:open,useSimpleView:true,children:[_jsx(Pressable,{onPress:!disableOutsideClick?onClose:undefined,absolute:true,top:0,left:0,right:0,bottom:0,pointerEvents:"box-only"}),_jsx(View,Object.assign({width:width},props,{zIndex:10,children:content}))]})});}
@@ -0,0 +1 @@
1
+ import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";import _objectDestructuringEmpty from"@babel/runtime/helpers/objectDestructuringEmpty";import _slicedToArray from"@babel/runtime/helpers/slicedToArray";var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/modals/modal/ModalBackdrop.js";var _excluded=["open","onClose","children","useSimpleView"];import{pipe}from'ramda';import React from'react';import{AnimatedView}from"../../animations/AnimatedView";import{SafeAreaView}from"../../structure/SafeAreaView";import{useDefaultModifier}from"../../../modifiers/default";import{useThemeComponentModifier}from"../../../modifiers/themeComponent";import{jsx as _jsx}from"react/jsx-runtime";var DEFAULT_PROPS=function DEFAULT_PROPS(_ref){var _ref2=_slicedToArray(_ref,2);_objectDestructuringEmpty(_ref2[0]);var position=_ref2[1].position;var justify='center';var align='center';if(position==='bottom'){justify='flex-end';}else if(position==='top'){justify='flex-top';}else if(position==='left'){align='flex-start';}else if(position==='right'){align='flex-end';}return{fixed:true,top:0,left:0,right:0,bottom:0,justify:justify,align:align,lazy:true,unmountOnClose:true,fade:true,zIndex:500,bg:'backdrop_op70'};};export function ModalBackdrop(_ref3){var open=_ref3.open,onClose=_ref3.onClose,children=_ref3.children,useSimpleView=_ref3.useSimpleView,rootProps=_objectWithoutProperties(_ref3,_excluded);var modalRef=React.useRef();var _pipe=pipe(useThemeComponentModifier('ModalBackdrop'),useDefaultModifier(DEFAULT_PROPS))([{},rootProps]),_pipe2=_slicedToArray(_pipe,2);_objectDestructuringEmpty(_pipe2[0]);var props=_pipe2[1];if(useSimpleView){return _jsx(SafeAreaView,Object.assign({className:"neko-modal-backdrop"},props,{children:children}));}return _jsx(AnimatedView,Object.assign({open:open,className:"neko-modal-backdrop",onPress:onClose},props,{children:children}));}
@@ -0,0 +1 @@
1
+ import _objectDestructuringEmpty from"@babel/runtime/helpers/objectDestructuringEmpty";import _slicedToArray from"@babel/runtime/helpers/slicedToArray";import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/modals/modal/ModalContent.js";var _excluded=["children"];import{pipe}from'ramda';import{View}from"../../structure/View";import{useDefaultModifier}from"../../../modifiers/default";import{useThemeComponentModifier}from"../../../modifiers/themeComponent";import{jsx as _jsx}from"react/jsx-runtime";var DEFAULT_PROPS={fullW:true,flex:true,scrollY:true,padding:'md'};export function ModalContent(_ref){var children=_ref.children,rootProps=_objectWithoutProperties(_ref,_excluded);var _pipe=pipe(useThemeComponentModifier('ModalContent'),useDefaultModifier(DEFAULT_PROPS))([{},rootProps]),_pipe2=_slicedToArray(_pipe,2);_objectDestructuringEmpty(_pipe2[0]);var props=_pipe2[1];if(!children)return false;return _jsx(View,Object.assign({className:"neko-modal-content"},props,{children:children}));}
@@ -0,0 +1 @@
1
+ import _objectDestructuringEmpty from"@babel/runtime/helpers/objectDestructuringEmpty";import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";import _slicedToArray from"@babel/runtime/helpers/slicedToArray";var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/modals/modal/ModalFooter.js";var _excluded=["children"];import{pipe}from'ramda';import{View}from"../../structure/View";import{moveScale}from"../../../theme/helpers/sizeScale";import{useDefaultModifier}from"../../../modifiers/default";import{useSizeConverter}from"../../../modifiers/sizeConverter";import{useThemeComponentModifier}from"../../../modifiers/themeComponent";import{jsx as _jsx}from"react/jsx-runtime";var DEFAULT_PROPS=function DEFAULT_PROPS(_ref){var _ref2=_slicedToArray(_ref,2),sizeCode=_ref2[0].sizeCode,_=_ref2[1];return{borderT:true,paddingH:sizeCode,paddingV:moveScale(sizeCode,-2),minHeight:moveScale(sizeCode,1),centerV:true};};export function ModalFooter(_ref3){var children=_ref3.children,rootProps=_objectWithoutProperties(_ref3,_excluded);var _pipe=pipe(useSizeConverter('elementHeights','md'),useThemeComponentModifier('ModalFooter'),useDefaultModifier(DEFAULT_PROPS))([{},rootProps]),_pipe2=_slicedToArray(_pipe,2);_objectDestructuringEmpty(_pipe2[0]);var props=_pipe2[1];if(!children)return false;return _jsx(View,Object.assign({className:"neko-modal-footer"},props,{children:children}));}
@@ -0,0 +1 @@
1
+ import _objectDestructuringEmpty from"@babel/runtime/helpers/objectDestructuringEmpty";import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";import _slicedToArray from"@babel/runtime/helpers/slicedToArray";var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/modals/modal/ModalHeader.js";var _excluded=["onClose","title","children"],_excluded2=["titleProps"];import{pipe}from'ramda';import{Icon}from"../../presentation/Icon";import{Link}from"../../actions/Link";import{Text}from"../../text/Text";import{View}from"../../structure/View";import{moveScale}from"../../../theme/helpers/sizeScale";import{useDefaultModifier}from"../../../modifiers/default";import{useSizeConverter}from"../../../modifiers/sizeConverter";import{useThemeComponentModifier}from"../../../modifiers/themeComponent";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";var DEFAULT_PROPS=function DEFAULT_PROPS(_ref){var _ref2=_slicedToArray(_ref,2),sizeCode=_ref2[0].sizeCode,_=_ref2[1];return{centerV:true,paddingH:sizeCode,paddingV:moveScale(sizeCode,-2),minHeight:moveScale(sizeCode,1),gap:'md',borderB:true,justify:'space-between',titleProps:{strong:true}};};export function ModalHeader(_ref3){var onClose=_ref3.onClose,title=_ref3.title,children=_ref3.children,rootProps=_objectWithoutProperties(_ref3,_excluded);var _pipe=pipe(useSizeConverter('elementHeights','md'),useThemeComponentModifier('ModalHeader'),useDefaultModifier(DEFAULT_PROPS))([{},rootProps]),_pipe2=_slicedToArray(_pipe,2);_objectDestructuringEmpty(_pipe2[0]);var formattedProps=_pipe2[1];var titleProps=formattedProps.titleProps,props=_objectWithoutProperties(formattedProps,_excluded2);if(!title&&!children)return false;return _jsxs(View,Object.assign({className:"neko-modal-header"},props,{row:true,children:[title&&_jsx(Text,Object.assign({},titleProps,{children:title})),children,!!onClose&&_jsx(Link,{onPress:onClose,padding:"sm",marginR:-10,children:_jsx(Icon,{name:"close-line"})})]}));}
@@ -0,0 +1 @@
1
+ import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";import _toConsumableArray from"@babel/runtime/helpers/toConsumableArray";import _slicedToArray from"@babel/runtime/helpers/slicedToArray";var _excluded=["key","content"];var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/modals/modal/handler/ModalsHandler.js";import React from'react';import{Modal}from"../Modal";import{useResponsiveValue}from"../../../../responsive/responsiveHooks";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";var ModalsContext=React.createContext(null);export var useModals=function useModals(){return React.useContext(ModalsContext)||{};};var idCounter=0;export function useModalOpener(){var _useModals=useModals(),add=_useModals.add,remove=_useModals.remove,close=_useModals.close;var open=function open(init){var key=++idCounter;var onClose=function onClose(){return close(key);};var params={onClose:onClose,key:key};var data=init(params);add(key,Object.assign({onClose:onClose},data,{open:true}));return params;};return{open:open};}export function ModalsHandler(_ref){var _this=this;var children=_ref.children;var width=useResponsiveValue({sm:'100%',df:400});var _React$useState=React.useState([]),_React$useState2=_slicedToArray(_React$useState,2),modals=_React$useState2[0],setModals=_React$useState2[1];var add=React.useCallback(function(key,data){setModals(function(prev){return[].concat(_toConsumableArray(prev),[Object.assign({key:key},data)]);});},[]);var remove=React.useCallback(function(key){setModals(function(prev){return prev.filter(function(p){return p.key!==key;});});},[]);var close=React.useCallback(function(key){setModals(function(items){return items.map(function(i){return i.key===key?Object.assign({},i,{open:false}):i;});});setTimeout(function(){return remove(key);},600);},[]);var value=React.useMemo(function(){return{add:add,remove:remove,close:close};},[add,remove,close]);return _jsxs(ModalsContext.Provider,{value:value,children:[children,modals==null?void 0:modals.map==null?void 0:modals.map(function(_ref2){var key=_ref2.key,content=_ref2.content,item=_objectWithoutProperties(_ref2,_excluded);return _jsx(Modal,Object.assign({},item,{children:content}),key);})]});}
@@ -0,0 +1 @@
1
+ import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _excluded=["name","component","type"];import{useEffect}from'react';import{useModalsRouterContext}from"./ModalsRouterContext";export function ModalRoute(_ref){var name=_ref.name,component=_ref.component,_ref$type=_ref.type,type=_ref$type===void 0?'modal':_ref$type,containerProps=_objectWithoutProperties(_ref,_excluded);var _useModalsRouterConte=useModalsRouterContext(),registerRoute=_useModalsRouterConte.registerRoute,unregisterRoute=_useModalsRouterConte.unregisterRoute;useEffect(function(){if(!name||!registerRoute)return;registerRoute(name,{component:component,type:type,containerProps:containerProps});return function(){return unregisterRoute==null?void 0:unregisterRoute(name);};},[name]);return null;}
@@ -0,0 +1 @@
1
+ import _toConsumableArray from"@babel/runtime/helpers/toConsumableArray";import _defineProperty from"@babel/runtime/helpers/defineProperty";import _slicedToArray from"@babel/runtime/helpers/slicedToArray";var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/modals/router/ModalsRouter.js";import React,{useCallback,useMemo,useRef,useState}from'react';import{BottomDrawer}from"../bottomDrawer";import{Drawer}from"../drawer";import{Modal}from"../modal/Modal";import{ModalRouteContext,ModalsRouterContext,ModalsStackContext}from"./ModalsRouterContext";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";var CONTAINERS={modal:Modal,drawer:Drawer,bottomDrawer:BottomDrawer};export function ModalsRouter(_ref){var _this=this;var children=_ref.children;var _useState=useState([]),_useState2=_slicedToArray(_useState,2),stack=_useState2[0],setStack=_useState2[1];var _useState3=useState([]),_useState4=_slicedToArray(_useState3,2),renderStack=_useState4[0],setRenderStack=_useState4[1];var _useState5=useState({}),_useState6=_slicedToArray(_useState5,2),containerOverrides=_useState6[0],setContainerOverrides=_useState6[1];var keyRef=useRef(0);var routesRef=useRef({});var registerRoute=useCallback(function(name,config){routesRef.current[name]=config;},[]);var unregisterRoute=useCallback(function(name){delete routesRef.current[name];},[]);var updateContainerProps=useCallback(function(key,props){setContainerOverrides(function(prev){return Object.assign({},prev,_defineProperty({},key,Object.assign({},prev[key],props)));});},[]);var push=useCallback(function(path,params){var key=++keyRef.current;var entry={key:key,path:path,params:params};setStack(function(prev){return[].concat(_toConsumableArray(prev),[entry]);});setRenderStack(function(prev){return[].concat(_toConsumableArray(prev),[Object.assign({},entry,{open:true})]);});},[]);var closeByKey=useCallback(function(key){setStack(function(prev){return prev.filter(function(e){return e.key!==key;});});setRenderStack(function(prev){return prev.map(function(e){return e.key===key?Object.assign({},e,{open:false}):e;});});setTimeout(function(){setRenderStack(function(prev){return prev.filter(function(e){return e.key!==key;});});},600);},[]);var goBack=useCallback(function(){setStack(function(prev){if(prev.length===0)return prev;var last=prev[prev.length-1];setRenderStack(function(rs){return rs.map(function(e){return e.key===last.key?Object.assign({},e,{open:false}):e;});});setTimeout(function(){setRenderStack(function(rs){return rs.filter(function(e){return e.key!==last.key;});});},600);return prev.slice(0,-1);});},[]);var closeAll=useCallback(function(){setStack([]);setRenderStack(function(prev){var closing=prev.map(function(e){return Object.assign({},e,{open:false});});setTimeout(function(){setRenderStack([]);},600);return closing;});},[]);var actionsValue=useMemo(function(){return{push:push,goBack:goBack,closeAll:closeAll,registerRoute:registerRoute,unregisterRoute:unregisterRoute};},[push,goBack,closeAll,registerRoute,unregisterRoute]);var stackValue=useMemo(function(){return{stack:stack};},[stack]);var nestedModals=renderStack.reduceRight(function(inner,entry){var route=routesRef.current[entry.path];if(!route)return inner;var Container=CONTAINERS[route.type]||Modal;var Component=route.component;var overrides=containerOverrides[entry.key];var updateContainer=function updateContainer(props){return updateContainerProps(entry.key,props);};return _jsx(Container,Object.assign({open:entry.open,onClose:function onClose(){return closeByKey(entry.key);}},route.containerProps,overrides,{children:_jsx(ModalsRouterContext.Provider,{value:actionsValue,children:_jsx(ModalsStackContext.Provider,{value:stackValue,children:_jsxs(ModalRouteContext.Provider,{value:{params:entry.params,path:entry.path,key:entry.key,updateContainer:updateContainer},children:[_jsx(Component,{}),inner]})})})}),entry.key);},null);return _jsx(ModalsRouterContext.Provider,{value:actionsValue,children:_jsxs(ModalsStackContext.Provider,{value:stackValue,children:[children,nestedModals]})});}
@@ -0,0 +1 @@
1
+ import React from'react';var ModalsRouterContext=React.createContext(null);export var useModalsRouterContext=function useModalsRouterContext(){return React.useContext(ModalsRouterContext)||{};};export{ModalsRouterContext};var ModalsStackContext=React.createContext(null);export var useModalsStackContext=function useModalsStackContext(){return React.useContext(ModalsStackContext)||{};};export{ModalsStackContext};var ModalRouteContext=React.createContext(null);export var useModalRouteContext=function useModalRouteContext(){return React.useContext(ModalRouteContext)||{};};export{ModalRouteContext};
@@ -0,0 +1 @@
1
+ export{ModalsRouter}from"./ModalsRouter";export{ModalRoute}from"./ModalRoute";export{useModalsNavigation}from"./useModalsNavigation";export{useModalParams}from"./useModalParams";export{useAllModalsParams}from"./useAllModalsParams";export{useUpdateModalContainer}from"./useUpdateModalContainer";
@@ -0,0 +1 @@
1
+ import{useModalsStackContext}from"./ModalsRouterContext";export function useAllModalsParams(){var _useModalsStackContex=useModalsStackContext(),stack=_useModalsStackContex.stack;return(stack||[]).map(function(_ref){var path=_ref.path,params=_ref.params,key=_ref.key;return{path:path,params:params,key:key};});}
@@ -0,0 +1 @@
1
+ import{useModalRouteContext}from"./ModalsRouterContext";export function useModalParams(){var _useModalRouteContext=useModalRouteContext(),params=_useModalRouteContext.params;return params||{};}
@@ -0,0 +1 @@
1
+ import{useModalsRouterContext}from"./ModalsRouterContext";export function useModalsNavigation(){var _useModalsRouterConte=useModalsRouterContext(),push=_useModalsRouterConte.push,goBack=_useModalsRouterConte.goBack,closeAll=_useModalsRouterConte.closeAll;return{push:push,goBack:goBack,closeAll:closeAll};}