@neko-os/ui 0.1.0 → 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 (132) hide show
  1. package/dist/NekoUI.js +1 -1
  2. package/dist/abstractions/FlatList.native.js +1 -1
  3. package/dist/abstractions/ScrollView.native.js +1 -1
  4. package/dist/components/actions/ActionsDrawer.js +1 -1
  5. package/dist/components/actions/FloatingMenu.js +1 -1
  6. package/dist/components/feedback/alerter.js +1 -1
  7. package/dist/components/feedback/confirmer.js +1 -1
  8. package/dist/components/index.js +1 -1
  9. package/dist/components/inputs/Picker.js +1 -1
  10. package/dist/components/modals/bottomDrawer/native/BottomDrawer.js +1 -0
  11. package/dist/components/modals/bottomDrawer/native/DrawerContext.js +1 -0
  12. package/dist/components/modals/bottomDrawer/native/DrawerHandle.js +1 -0
  13. package/dist/components/modals/bottomDrawer/native/createDrawerScrollComponent.js +1 -0
  14. package/dist/components/modals/bottomDrawer/web/BottomDrawer.js +1 -0
  15. package/dist/components/modals/drawer/Drawer.js +1 -0
  16. package/dist/components/modals/index.js +1 -0
  17. package/dist/components/modals/modal/Modal.js +1 -0
  18. package/dist/components/modals/modal/Modal.native.js +1 -0
  19. package/dist/components/modals/modal/ModalBackdrop.js +1 -0
  20. package/dist/components/modals/modal/ModalContent.js +1 -0
  21. package/dist/components/modals/modal/ModalFooter.js +1 -0
  22. package/dist/components/modals/modal/ModalHeader.js +1 -0
  23. package/dist/components/modals/modal/handler/ModalsHandler.js +1 -0
  24. package/dist/components/modals/router/ModalRoute.js +1 -0
  25. package/dist/components/modals/router/ModalsRouter.js +1 -0
  26. package/dist/components/modals/router/ModalsRouterContext.js +1 -0
  27. package/dist/components/modals/router/index.js +1 -0
  28. package/dist/components/modals/router/useAllModalsParams.js +1 -0
  29. package/dist/components/modals/router/useModalParams.js +1 -0
  30. package/dist/components/modals/router/useModalsNavigation.js +1 -0
  31. package/dist/components/modals/router/useUpdateModalContainer.js +1 -0
  32. package/dist/components/sections/SectionItemDropdown.js +1 -0
  33. package/dist/components/sections/index.js +1 -1
  34. package/dist/components/structure/index.js +1 -1
  35. package/dist/components/structure/popover/Popover.js +1 -1
  36. package/dist/components/structure/popover/Popover.native.js +1 -1
  37. package/dist/components/structure/popover/Popover_BU.js +1 -1
  38. package/dist/components/theme/ThemePickerDrawer.js +1 -1
  39. package/dist/theme/default/blackTheme.js +1 -1
  40. package/dist/theme/default/cyberpunkTheme.js +1 -1
  41. package/dist/theme/default/hackerTheme.js +1 -1
  42. package/dist/theme/default/paperTheme.js +1 -1
  43. package/dist/theme/default/themes.js +1 -1
  44. package/package.json +1 -1
  45. package/src/NekoUI.js +1 -1
  46. package/src/abstractions/FlatList.native.js +2 -1
  47. package/src/abstractions/ScrollView.native.js +2 -2
  48. package/src/components/actions/ActionsDrawer.js +2 -2
  49. package/src/components/actions/FloatingMenu.js +1 -1
  50. package/src/components/feedback/alerter.js +1 -1
  51. package/src/components/feedback/confirmer.js +1 -1
  52. package/src/components/index.js +1 -0
  53. package/src/components/inputs/Picker.js +1 -1
  54. package/src/components/{structure → modals}/bottomDrawer/native/BottomDrawer.js +1 -1
  55. package/src/components/{structure → modals}/bottomDrawer/native/DrawerHandle.js +1 -1
  56. package/src/components/modals/index.js +4 -0
  57. package/src/components/{structure → modals}/modal/Modal.native.js +1 -1
  58. package/src/components/{structure → modals}/modal/ModalBackdrop.js +1 -1
  59. package/src/components/{structure → modals}/modal/ModalContent.js +1 -1
  60. package/src/components/{structure → modals}/modal/ModalFooter.js +1 -1
  61. package/src/components/{structure → modals}/modal/ModalHeader.js +1 -1
  62. package/src/components/modals/router/ModalRoute.js +15 -0
  63. package/src/components/modals/router/ModalsRouter.js +120 -0
  64. package/src/components/modals/router/ModalsRouterContext.js +16 -0
  65. package/src/components/modals/router/index.js +6 -0
  66. package/src/components/modals/router/useAllModalsParams.js +6 -0
  67. package/src/components/modals/router/useModalParams.js +6 -0
  68. package/src/components/modals/router/useModalsNavigation.js +6 -0
  69. package/src/components/modals/router/useUpdateModalContainer.js +6 -0
  70. package/src/components/sections/SectionItemDropdown.js +68 -0
  71. package/src/components/sections/index.js +1 -0
  72. package/src/components/structure/index.js +0 -3
  73. package/src/components/structure/popover/Popover.js +1 -1
  74. package/src/components/structure/popover/Popover.native.js +1 -1
  75. package/src/components/structure/popover/Popover_BU.js +1 -1
  76. package/src/components/theme/ThemePickerDrawer.js +3 -4
  77. package/src/theme/default/blackTheme.js +32 -21
  78. package/src/theme/default/cyberpunkTheme.js +24 -32
  79. package/src/theme/default/hackerTheme.js +23 -16
  80. package/src/theme/default/paperTheme.js +4 -0
  81. package/src/theme/default/themes.js +0 -9
  82. package/dist/components/structure/bottomDrawer/native/BottomDrawer.js +0 -1
  83. package/dist/components/structure/bottomDrawer/native/DrawerContext.js +0 -1
  84. package/dist/components/structure/bottomDrawer/native/DrawerHandle.js +0 -1
  85. package/dist/components/structure/bottomDrawer/native/createDrawerScrollComponent.js +0 -1
  86. package/dist/components/structure/bottomDrawer/web/BottomDrawer.js +0 -1
  87. package/dist/components/structure/drawer/Drawer.js +0 -1
  88. package/dist/components/structure/modal/Modal.js +0 -1
  89. package/dist/components/structure/modal/Modal.native.js +0 -1
  90. package/dist/components/structure/modal/ModalBackdrop.js +0 -1
  91. package/dist/components/structure/modal/ModalContent.js +0 -1
  92. package/dist/components/structure/modal/ModalFooter.js +0 -1
  93. package/dist/components/structure/modal/ModalHeader.js +0 -1
  94. package/dist/components/structure/modal/handler/ModalsHandler.js +0 -1
  95. package/dist/theme/default/deepWoodsTheme.js +0 -1
  96. package/dist/theme/default/forestTheme.js +0 -1
  97. package/dist/theme/default/midnightTheme.js +0 -1
  98. package/dist/theme/default/msdosTheme.js +0 -1
  99. package/dist/theme/default/oceanTheme.js +0 -1
  100. package/dist/theme/default/pastelTheme.js +0 -1
  101. package/dist/theme/default/sunsetTheme.js +0 -1
  102. package/src/theme/default/deepWoodsTheme.js +0 -34
  103. package/src/theme/default/forestTheme.js +0 -34
  104. package/src/theme/default/midnightTheme.js +0 -34
  105. package/src/theme/default/msdosTheme.js +0 -54
  106. package/src/theme/default/oceanTheme.js +0 -34
  107. package/src/theme/default/pastelTheme.js +0 -34
  108. package/src/theme/default/sunsetTheme.js +0 -35
  109. /package/dist/components/{structure → modals}/bottomDrawer/index.js +0 -0
  110. /package/dist/components/{structure → modals}/bottomDrawer/index.native.js +0 -0
  111. /package/dist/components/{structure → modals}/bottomDrawer/index.web.js +0 -0
  112. /package/dist/components/{structure → modals}/bottomDrawer/native/DrawerScrollView.js +0 -0
  113. /package/dist/components/{structure → modals}/bottomDrawer/native/utils.js +0 -0
  114. /package/dist/components/{structure → modals}/drawer/Drawer.native.js +0 -0
  115. /package/dist/components/{structure → modals}/drawer/Drawer.web.js +0 -0
  116. /package/dist/components/{structure → modals}/drawer/index.js +0 -0
  117. /package/dist/components/{structure → modals}/modal/index.js +0 -0
  118. /package/src/components/{structure → modals}/bottomDrawer/index.js +0 -0
  119. /package/src/components/{structure → modals}/bottomDrawer/index.native.js +0 -0
  120. /package/src/components/{structure → modals}/bottomDrawer/index.web.js +0 -0
  121. /package/src/components/{structure → modals}/bottomDrawer/native/DrawerContext.js +0 -0
  122. /package/src/components/{structure → modals}/bottomDrawer/native/DrawerScrollView.js +0 -0
  123. /package/src/components/{structure → modals}/bottomDrawer/native/createDrawerScrollComponent.js +0 -0
  124. /package/src/components/{structure → modals}/bottomDrawer/native/utils.js +0 -0
  125. /package/src/components/{structure → modals}/bottomDrawer/web/BottomDrawer.js +0 -0
  126. /package/src/components/{structure → modals}/drawer/Drawer.js +0 -0
  127. /package/src/components/{structure → modals}/drawer/Drawer.native.js +0 -0
  128. /package/src/components/{structure → modals}/drawer/Drawer.web.js +0 -0
  129. /package/src/components/{structure → modals}/drawer/index.js +0 -0
  130. /package/src/components/{structure → modals}/modal/Modal.js +0 -0
  131. /package/src/components/{structure → modals}/modal/handler/ModalsHandler.js +0 -0
  132. /package/src/components/{structure → modals}/modal/index.js +0 -0
@@ -2,7 +2,7 @@ import { pipe } from 'ramda'
2
2
  import React from 'react'
3
3
 
4
4
  import { AnimatedView } from '../../animations/AnimatedView'
5
- import { SafeAreaView } from '../SafeAreaView'
5
+ import { SafeAreaView } from '../../structure/SafeAreaView'
6
6
  import { useDefaultModifier } from '../../../modifiers/default'
7
7
  import { useThemeComponentModifier } from '../../../modifiers/themeComponent'
8
8
 
@@ -1,6 +1,6 @@
1
1
  import { pipe } from 'ramda'
2
2
 
3
- import { View } from '../View'
3
+ import { View } from '../../structure/View'
4
4
  import { useDefaultModifier } from '../../../modifiers/default'
5
5
  import { useThemeComponentModifier } from '../../../modifiers/themeComponent'
6
6
 
@@ -1,6 +1,6 @@
1
1
  import { pipe } from 'ramda'
2
2
 
3
- import { View } from '../View'
3
+ import { View } from '../../structure/View'
4
4
  import { moveScale } from '../../../theme/helpers/sizeScale'
5
5
  import { useDefaultModifier } from '../../../modifiers/default'
6
6
  import { useSizeConverter } from '../../../modifiers/sizeConverter'
@@ -3,7 +3,7 @@ import { pipe } from 'ramda'
3
3
  import { Icon } from '../../presentation/Icon'
4
4
  import { Link } from '../../actions/Link'
5
5
  import { Text } from '../../text/Text'
6
- import { View } from '../View'
6
+ import { View } from '../../structure/View'
7
7
  import { moveScale } from '../../../theme/helpers/sizeScale'
8
8
  import { useDefaultModifier } from '../../../modifiers/default'
9
9
  import { useSizeConverter } from '../../../modifiers/sizeConverter'
@@ -0,0 +1,15 @@
1
+ import { useEffect } from 'react'
2
+
3
+ import { useModalsRouterContext } from './ModalsRouterContext'
4
+
5
+ export function ModalRoute({ name, component, type = 'modal', ...containerProps }) {
6
+ const { registerRoute, unregisterRoute } = useModalsRouterContext()
7
+
8
+ useEffect(() => {
9
+ if (!name || !registerRoute) return
10
+ registerRoute(name, { component, type, containerProps })
11
+ return () => unregisterRoute?.(name)
12
+ }, [name])
13
+
14
+ return null
15
+ }
@@ -0,0 +1,120 @@
1
+ import React, { useCallback, useMemo, useRef, useState } from 'react'
2
+
3
+ import { BottomDrawer } from '../bottomDrawer'
4
+ import { Drawer } from '../drawer'
5
+ import { Modal } from '../modal/Modal'
6
+ import { ModalRouteContext, ModalsRouterContext, ModalsStackContext } from './ModalsRouterContext'
7
+
8
+ const CONTAINERS = {
9
+ modal: Modal,
10
+ drawer: Drawer,
11
+ bottomDrawer: BottomDrawer,
12
+ }
13
+
14
+ export function ModalsRouter({ children }) {
15
+ const [stack, setStack] = useState([])
16
+ const [renderStack, setRenderStack] = useState([])
17
+ const [containerOverrides, setContainerOverrides] = useState({})
18
+ const keyRef = useRef(0)
19
+ const routesRef = useRef({})
20
+
21
+ const registerRoute = useCallback((name, config) => {
22
+ routesRef.current[name] = config
23
+ }, [])
24
+
25
+ const unregisterRoute = useCallback((name) => {
26
+ delete routesRef.current[name]
27
+ }, [])
28
+
29
+ const updateContainerProps = useCallback((key, props) => {
30
+ setContainerOverrides((prev) => ({
31
+ ...prev,
32
+ [key]: { ...prev[key], ...props },
33
+ }))
34
+ }, [])
35
+
36
+ const push = useCallback((path, params) => {
37
+ const key = ++keyRef.current
38
+ const entry = { key, path, params }
39
+ setStack((prev) => [...prev, entry])
40
+ setRenderStack((prev) => [...prev, { ...entry, open: true }])
41
+ }, [])
42
+
43
+ const closeByKey = useCallback((key) => {
44
+ setStack((prev) => prev.filter((e) => e.key !== key))
45
+ setRenderStack((prev) => prev.map((e) => (e.key === key ? { ...e, open: false } : e)))
46
+ setTimeout(() => {
47
+ setRenderStack((prev) => prev.filter((e) => e.key !== key))
48
+ }, 600)
49
+ }, [])
50
+
51
+ const goBack = useCallback(() => {
52
+ setStack((prev) => {
53
+ if (prev.length === 0) return prev
54
+ const last = prev[prev.length - 1]
55
+ setRenderStack((rs) => rs.map((e) => (e.key === last.key ? { ...e, open: false } : e)))
56
+ setTimeout(() => {
57
+ setRenderStack((rs) => rs.filter((e) => e.key !== last.key))
58
+ }, 600)
59
+ return prev.slice(0, -1)
60
+ })
61
+ }, [])
62
+
63
+ const closeAll = useCallback(() => {
64
+ setStack([])
65
+ setRenderStack((prev) => {
66
+ const closing = prev.map((e) => ({ ...e, open: false }))
67
+ setTimeout(() => {
68
+ setRenderStack([])
69
+ }, 600)
70
+ return closing
71
+ })
72
+ }, [])
73
+
74
+ // Static — never changes, so consumers like useModalsNavigation
75
+ // and ModalRoute don't re-render when the stack changes
76
+ const actionsValue = useMemo(
77
+ () => ({ push, goBack, closeAll, registerRoute, unregisterRoute }),
78
+ [push, goBack, closeAll, registerRoute, unregisterRoute]
79
+ )
80
+
81
+ // Dynamic — only useAllModalsParams subscribes to this
82
+ const stackValue = useMemo(() => ({ stack }), [stack])
83
+
84
+ // Nest modals inside each other so each RN Modal presents from
85
+ // the previous modal's view controller (required for iOS stacking).
86
+ // Context providers go INSIDE Container children so they survive
87
+ // the Portal teleport on web (Portal re-mounts content at PortalHandler level).
88
+ const nestedModals = renderStack.reduceRight((inner, entry) => {
89
+ const route = routesRef.current[entry.path]
90
+ if (!route) return inner
91
+
92
+ const Container = CONTAINERS[route.type] || Modal
93
+ const Component = route.component
94
+
95
+ const overrides = containerOverrides[entry.key]
96
+ const updateContainer = (props) => updateContainerProps(entry.key, props)
97
+
98
+ return (
99
+ <Container key={entry.key} open={entry.open} onClose={() => closeByKey(entry.key)} {...route.containerProps} {...overrides}>
100
+ <ModalsRouterContext.Provider value={actionsValue}>
101
+ <ModalsStackContext.Provider value={stackValue}>
102
+ <ModalRouteContext.Provider value={{ params: entry.params, path: entry.path, key: entry.key, updateContainer }}>
103
+ <Component />
104
+ {inner}
105
+ </ModalRouteContext.Provider>
106
+ </ModalsStackContext.Provider>
107
+ </ModalsRouterContext.Provider>
108
+ </Container>
109
+ )
110
+ }, null)
111
+
112
+ return (
113
+ <ModalsRouterContext.Provider value={actionsValue}>
114
+ <ModalsStackContext.Provider value={stackValue}>
115
+ {children}
116
+ {nestedModals}
117
+ </ModalsStackContext.Provider>
118
+ </ModalsRouterContext.Provider>
119
+ )
120
+ }
@@ -0,0 +1,16 @@
1
+ import React from 'react'
2
+
3
+ // Static context — actions that never change (push, goBack, etc.)
4
+ const ModalsRouterContext = React.createContext(null)
5
+ export const useModalsRouterContext = () => React.useContext(ModalsRouterContext) || {}
6
+ export { ModalsRouterContext }
7
+
8
+ // Dynamic context — stack data that changes on push/goBack
9
+ const ModalsStackContext = React.createContext(null)
10
+ export const useModalsStackContext = () => React.useContext(ModalsStackContext) || {}
11
+ export { ModalsStackContext }
12
+
13
+ // Per-entry context — params for each rendered modal
14
+ const ModalRouteContext = React.createContext(null)
15
+ export const useModalRouteContext = () => React.useContext(ModalRouteContext) || {}
16
+ export { ModalRouteContext }
@@ -0,0 +1,6 @@
1
+ export { ModalsRouter } from './ModalsRouter'
2
+ export { ModalRoute } from './ModalRoute'
3
+ export { useModalsNavigation } from './useModalsNavigation'
4
+ export { useModalParams } from './useModalParams'
5
+ export { useAllModalsParams } from './useAllModalsParams'
6
+ export { useUpdateModalContainer } from './useUpdateModalContainer'
@@ -0,0 +1,6 @@
1
+ import { useModalsStackContext } from './ModalsRouterContext'
2
+
3
+ export function useAllModalsParams() {
4
+ const { stack } = useModalsStackContext()
5
+ return (stack || []).map(({ path, params, key }) => ({ path, params, key }))
6
+ }
@@ -0,0 +1,6 @@
1
+ import { useModalRouteContext } from './ModalsRouterContext'
2
+
3
+ export function useModalParams() {
4
+ const { params } = useModalRouteContext()
5
+ return params || {}
6
+ }
@@ -0,0 +1,6 @@
1
+ import { useModalsRouterContext } from './ModalsRouterContext'
2
+
3
+ export function useModalsNavigation() {
4
+ const { push, goBack, closeAll } = useModalsRouterContext()
5
+ return { push, goBack, closeAll }
6
+ }
@@ -0,0 +1,6 @@
1
+ import { useModalRouteContext } from './ModalsRouterContext'
2
+
3
+ export function useUpdateModalContainer() {
4
+ const { updateContainer } = useModalRouteContext()
5
+ return updateContainer
6
+ }
@@ -0,0 +1,68 @@
1
+ import { pipe } from 'ramda'
2
+
3
+ import { IconLabel } from '../presentation'
4
+ import { Link } from '../actions'
5
+ import { Menu } from '../actions/menu/Menu'
6
+ import { Popover } from '../structure/popover/Popover'
7
+ import { ScrollView } from '../list'
8
+ import { SectionItem } from './SectionItem'
9
+ import { useColorConverter } from '../../modifiers/colorConverter'
10
+ import { useDefaultModifier } from '../../modifiers/default'
11
+ import { useResponsiveValue } from '../../responsive'
12
+ import { useThemeComponentModifier } from '../../modifiers/themeComponent'
13
+
14
+ const DEFAULT_PROPS = {
15
+ paddingV: 'sm',
16
+ minH: 'md',
17
+ icon: 'arrow-down-s-fill',
18
+ }
19
+
20
+ export function SectionItemDropdown({ children, value, valueLabel, items, onChange, ...rootProps }) {
21
+ const [{ color }, formattedProps] = pipe(
22
+ useColorConverter(),
23
+ useThemeComponentModifier('SectionItemDropdown'),
24
+ useDefaultModifier(DEFAULT_PROPS)
25
+ )([{}, rootProps])
26
+
27
+ let { icon, iconLabelProps, trigger = 'click', placement, popoverProps, useBottomDrawer, ...props } = formattedProps
28
+
29
+ useBottomDrawer = useResponsiveValue(useBottomDrawer || { native: true, sm: true, md: true })
30
+
31
+ return (
32
+ <Popover
33
+ useParentMinWidth
34
+ placement={placement || 'bottomRight'}
35
+ trigger={trigger}
36
+ padding={0}
37
+ contentProps={{ padding: 0 }}
38
+ useBottomDrawer={useBottomDrawer}
39
+ {...popoverProps}
40
+ renderContent={({ onClose }) => {
41
+ const handleChange = (...params) => {
42
+ if (onChange) onChange(...params)
43
+ onClose()
44
+ }
45
+ return (
46
+ <ScrollView>
47
+ <Menu
48
+ vertical
49
+ items={items}
50
+ onChange={handleChange}
51
+ linkPaddingH={useBottomDrawer ? 'md' : 'sm'}
52
+ linkMinHeight={useBottomDrawer ? 'xl' : 'md'}
53
+ withDivider={useBottomDrawer}
54
+ />
55
+ </ScrollView>
56
+ )
57
+ }}
58
+ >
59
+ <Link className="neko-section-item-dropdown">
60
+ <SectionItem color={color} {...props}>
61
+ {children || (
62
+ <IconLabel gap={2} invert color={color} {...iconLabelProps} label={valueLabel || value} icon={icon} />
63
+ )}
64
+ </SectionItem>
65
+ </Link>
66
+ </Popover>
67
+ )
68
+ }
@@ -1,3 +1,4 @@
1
1
  export * from './Section'
2
2
  export * from './SectionItem'
3
+ export * from './SectionItemDropdown'
3
4
  export * from './SectionItemLink'
@@ -7,9 +7,6 @@ export * from './SafeAreaView'
7
7
  export * from './Card'
8
8
  export * from './Row'
9
9
  export * from './Col'
10
- export * from './modal'
11
- export * from './drawer'
12
- export * from './bottomDrawer'
13
10
  export * from './popover/Popover'
14
11
  export * from './Segment'
15
12
  export * from './TopBar'
@@ -1,6 +1,6 @@
1
1
  import React from 'react'
2
2
 
3
- import { BottomDrawer } from '../bottomDrawer'
3
+ import { BottomDrawer } from '../../modals/bottomDrawer'
4
4
  import { PopoverContent } from './PopoverContent'
5
5
  import { useRegisterOverlay } from '../overlay/OverlayHandler'
6
6
  import { useResponsiveValue } from '../../../responsive'
@@ -1,7 +1,7 @@
1
1
  import { Modal, TouchableWithoutFeedback } from 'react-native'
2
2
  import React from 'react'
3
3
 
4
- import { BottomDrawer } from '../bottomDrawer'
4
+ import { BottomDrawer } from '../../modals/bottomDrawer'
5
5
  import { PopoverContent } from './PopoverContent'
6
6
  import { View } from '../View'
7
7
  import { calculatePosition } from '../overlay/calculatePosition'
@@ -1,6 +1,6 @@
1
1
  import React from 'react'
2
2
 
3
- import { BottomDrawer } from '../bottomDrawer'
3
+ import { BottomDrawer } from '../../modals/bottomDrawer'
4
4
  import { PopoverContent } from './PopoverContent'
5
5
  import { useRegisterOverlay } from '../overlay/OverlayHandler'
6
6
  import { useResponsiveValue } from '../../../responsive'
@@ -1,13 +1,12 @@
1
- import { BottomDrawer } from '../structure'
2
- import { ScrollView } from '../list/ScrollView'
1
+ import { BottomDrawer, DrawerScrollView } from '../modals/bottomDrawer'
3
2
  import { ThemePicker } from './ThemePicker'
4
3
 
5
4
  export function ThemePickerDrawer({ open, onClose, onChange }) {
6
5
  return (
7
6
  <BottomDrawer open={open} onClose={onClose} maxWidth={550} snapPoints={['50%', '85%']}>
8
- <ScrollView padding="md">
7
+ <DrawerScrollView padding="md">
9
8
  <ThemePicker onChange={onChange} />
10
- </ScrollView>
9
+ </DrawerScrollView>
11
10
  </BottomDrawer>
12
11
  )
13
12
  }
@@ -7,30 +7,41 @@ export const DEFAULT_BLACK_THEME = mergeDeepRight(BASE_THEME, {
7
7
 
8
8
  colors: {
9
9
  primary: '#818DF9',
10
- text: '#FFFFFF',
11
- text2: '#E0E0E0',
12
- text3: '#B0B0B0',
13
- text4: '#8A8A8A',
14
10
 
15
- mainBG: '#0f0f0f',
16
- overlayBG: '#000000',
11
+ text: '#F2F2F2',
12
+ text2: '#CFCFCF',
13
+ text3: '#A6A6A6',
14
+ text4: '#737373',
15
+
16
+ mainBG: '#0A0A0A',
17
+ overlayBG: '#141414',
17
18
  backdrop: '#1f1f1f',
18
- shadow: 'rgba(216, 210, 203, 0.1)',
19
+ shadow: 'rgba(0, 0, 0, 0.7)',
19
20
  transparent: 'rgba(0, 0, 0, 0)',
20
- divider: '#383E44',
21
-
22
- blue: '#4DA3FF',
23
- yellow: '#FFD93B',
24
- green: '#4CAF50',
25
- purple: '#9B59B6',
26
- orange: '#FF7F50',
27
- cyan: '#00BCD4',
28
- red: '#E74C3C',
29
- navy: '#34495E',
21
+ divider: '#262626',
22
+
23
+ blue: '#3A7BFF',
24
+ yellow: '#FFC857',
25
+ green: '#2ECC71',
26
+ purple: '#9B5DE5',
27
+ orange: '#FF8C42',
28
+ cyan: '#00C2D1',
29
+ red: '#FF4D4F',
30
+ navy: '#1F2A44',
30
31
  indigo: '#5C6BC0',
31
- gray: '#9E9E9E',
32
- brown: '#8D6E63',
33
- lylac: '#B39DDB',
34
- pink: '#F48FB1',
32
+ gray: '#8E8E93',
33
+ brown: '#8B5E3C',
34
+ lylac: '#C77DFF',
35
+ pink: '#FF6FAE',
35
36
  },
37
+
38
+ // components: {
39
+ // Card: {
40
+ // border: true,
41
+ // },
42
+
43
+ // Section: {
44
+ // border: true,
45
+ // },
46
+ // },
36
47
  })
@@ -5,40 +5,32 @@ export const CYBERPUNK_DARK_THEME = mergeDeepRight(BASE_THEME, {
5
5
  label: 'Cyberpunk',
6
6
 
7
7
  colors: {
8
- primary: '#FCEE09',
9
- text: '#FFFFFF',
10
- text2: '#B3B3B3',
11
- text3: '#8C8C8C',
12
- text4: '#666666',
8
+ primary: '#FF4FD8',
13
9
 
14
- mainBG: '#14141F',
15
- overlayBG: '#14141F',
16
- backdrop: '#0A0A0F',
17
- shadow: 'rgba(39, 45, 52, 0.6)',
18
- divider: 'rgba(255,255,255, 0.2)',
19
-
20
- blue: '#00E5FF',
21
- yellow: '#FFD600',
22
- green: '#00FF9D',
23
- purple: '#D500F9',
24
- orange: '#FF9100',
25
- cyan: '#00B8D4',
26
- red: '#FF1744',
27
- navy: '#1E2A38',
28
- indigo: '#651FFF',
29
- gray: '#757575',
30
- brown: '#6D4C41',
31
- lylac: '#B388FF',
32
- pink: '#FF80AB',
33
- },
10
+ text: '#F5EFFF',
11
+ text2: '#D6C8FF',
12
+ text3: '#A78BFA',
13
+ text4: '#7C6BB3',
34
14
 
35
- components: {
36
- Card: {
37
- border: true,
38
- },
15
+ mainBG: '#0A0614',
16
+ overlayBG: '#140A26',
17
+ backdrop: '#0A0A0F',
18
+ shadow: 'rgba(0, 0, 0, 0.7)',
19
+ transparent: 'rgba(0, 0, 0, 0)',
20
+ divider: '#24123A',
39
21
 
40
- Section: {
41
- border: true,
42
- },
22
+ blue: '#00B3FF',
23
+ yellow: '#FFD166',
24
+ green: '#00F5A0',
25
+ purple: '#9D4EDD',
26
+ orange: '#FF7A18',
27
+ cyan: '#00E5FF',
28
+ red: '#FF3D6E',
29
+ navy: '#1B1B3A',
30
+ indigo: '#5A67FF',
31
+ gray: '#8E8EAA',
32
+ brown: '#8B5CF6',
33
+ lylac: '#C77DFF',
34
+ pink: '#FF4FD8',
43
35
  },
44
36
  })
@@ -7,30 +7,37 @@ export const DEFAULT_MATRIX_THEME = mergeDeepRight(BASE_THEME, {
7
7
 
8
8
  colors: {
9
9
  primary: '#00FF41',
10
- text: '#00FF41',
11
- text2: '#00CC33',
12
- text3: '#009926',
13
- text4: '#00661A',
10
+
11
+ // text: '#00FF41',
12
+ // text2: '#00CC33',
13
+ // text3: '#009926',
14
+ // text4: '#00661A',
15
+
16
+ text: '#D2FFE9',
17
+ text2: '#A6F5D0',
18
+ text3: '#6EE7B7',
19
+ text4: '#3FAF85',
14
20
 
15
21
  mainBG: '#000000',
16
22
  overlayBG: '#0A0A0A',
17
23
  backdrop: '#000000',
18
24
  shadow: 'rgba(0, 255, 65, 0.2)',
25
+ transparent: 'rgba(0, 0, 0, 0)',
19
26
  divider: 'rgba(0,255,65, 0.3)',
20
27
 
21
- blue: '#0087BD',
22
- yellow: '#AEBF00',
28
+ blue: '#00B3FF',
29
+ yellow: '#E6FF3F',
23
30
  green: '#00FF41',
24
- purple: '#7A1FA2',
25
- orange: '#FF6D00',
26
- cyan: '#00BFA5',
27
- red: '#D50000',
28
- navy: '#003366',
29
- indigo: '#303F9F',
30
- gray: '#4A4A4A',
31
- brown: '#5D4037',
32
- lylac: '#8E24AA',
33
- pink: '#C51162',
31
+ purple: '#9B5DE5',
32
+ orange: '#FF9F1C',
33
+ cyan: '#00FFE0',
34
+ red: '#FF3B3B',
35
+ navy: '#001F2F',
36
+ indigo: '#4B6BFF',
37
+ gray: '#2E2E2E',
38
+ brown: '#5C4033',
39
+ lylac: '#C084FC',
40
+ pink: '#FF4FD8',
34
41
  },
35
42
 
36
43
  radius: {
@@ -41,5 +41,9 @@ export const DEFAULT_PAPER_THEME = mergeDeepRight(BASE_THEME, {
41
41
  Section: {
42
42
  border: true,
43
43
  },
44
+
45
+ TopBar: {
46
+ borderB: true,
47
+ },
44
48
  },
45
49
  })
@@ -3,22 +3,13 @@ import { DEFAULT_BLACK_THEME } from './blackTheme'
3
3
  import { DEFAULT_DARK_THEME } from './darkTheme'
4
4
  import { DEFAULT_LIGHT_THEME } from './lightTheme'
5
5
  import { DEFAULT_MATRIX_THEME } from './hackerTheme'
6
- import { DEFAULT_MSDOS_THEME } from './msdosTheme'
7
6
  import { DEFAULT_PAPER_THEME } from './paperTheme'
8
- import { MIDNIGHT_NEON_THEME } from './midnightTheme'
9
7
 
10
8
  export const DEFAULT_THEMES = {
11
9
  light: DEFAULT_LIGHT_THEME,
12
10
  dark: DEFAULT_DARK_THEME,
13
11
  paper: DEFAULT_PAPER_THEME,
14
12
  black: DEFAULT_BLACK_THEME,
15
- // pastel: PASTEL_DREAM_THEME,
16
- midnight: MIDNIGHT_NEON_THEME,
17
- // sunset: SUNSET_GLOW_THEME,
18
- // ocean: OCEAN_BREEZE_THEME,
19
- // forest: FOREST_MIST_THEME,
20
13
  cyberpunk: CYBERPUNK_DARK_THEME,
21
- // deepWoods: DEEP_WOODS_DARK_THEME,
22
14
  hacker: DEFAULT_MATRIX_THEME,
23
- msdos: DEFAULT_MSDOS_THEME,
24
15
  }
@@ -1 +0,0 @@
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/structure/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"../../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}))});}
@@ -1 +0,0 @@
1
- var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/structure/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;}
@@ -1 +0,0 @@
1
- var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/structure/bottomDrawer/native/DrawerHandle.js";import{Divider}from"../../../helpers/Separator";import{View}from"../../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})});}
@@ -1 +0,0 @@
1
- import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/structure/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;}
@@ -1 +0,0 @@
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/structure/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));};
@@ -1 +0,0 @@
1
- var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/components/structure/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));}
@@ -1 +0,0 @@
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/structure/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}))})});}