@neko-os/ui 0.0.4 → 0.0.5

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 (193) hide show
  1. package/dist/abstractions/BKTouchableOpacity.js +0 -0
  2. package/dist/abstractions/HiddenInput.js +1 -0
  3. package/dist/abstractions/HiddenInput.native.js +1 -0
  4. package/dist/abstractions/Icon.js +1 -1
  5. package/dist/abstractions/Icon.native.js +1 -1
  6. package/dist/abstractions/Icon.web.js +1 -1
  7. package/dist/abstractions/Switch.js +1 -0
  8. package/dist/abstractions/Switch.native.js +1 -0
  9. package/dist/abstractions/TouchableOpacity.js +1 -1
  10. package/dist/abstractions/TouchableOpacity.native.js +1 -0
  11. package/dist/abstractions/TouchableOpacity.web.js +1 -0
  12. package/dist/abstractions/windowWidth.js +1 -0
  13. package/dist/abstractions/windowWidth.native.js +1 -0
  14. package/dist/abstractions/windowWidth.web.js +1 -0
  15. package/dist/components/actions/Button.js +1 -0
  16. package/dist/components/actions/Link.js +1 -0
  17. package/dist/components/actions/index.js +1 -0
  18. package/dist/components/form/Form.js +1 -0
  19. package/dist/components/form/FormGroup.js +1 -0
  20. package/dist/components/form/FormItem.js +1 -0
  21. package/dist/components/form/FormList.js +1 -0
  22. package/dist/components/form/FormWrapperComponent.js +1 -0
  23. package/dist/{form → components/form}/index.js +1 -1
  24. package/dist/components/form/inputs/Checkbox.js +1 -0
  25. package/dist/components/form/inputs/Radio.js +1 -0
  26. package/dist/components/form/inputs/Switch.js +1 -0
  27. package/dist/components/form/inputs/index.js +1 -0
  28. package/dist/components/helpers/Responsive.js +1 -0
  29. package/dist/components/helpers/Separator.js +1 -0
  30. package/dist/components/helpers/index.js +1 -0
  31. package/dist/components/index.js +1 -0
  32. package/dist/components/presentation/ContentLabel.js +1 -0
  33. package/dist/components/presentation/Icon.js +1 -0
  34. package/dist/components/presentation/IconLabel.js +1 -0
  35. package/dist/components/presentation/Tag.js +1 -0
  36. package/dist/components/presentation/index.js +1 -0
  37. package/dist/components/structure/Card.js +1 -0
  38. package/dist/components/structure/View.js +1 -0
  39. package/dist/components/text/Text.js +1 -0
  40. package/dist/helpers/index.js +1 -0
  41. package/dist/helpers/responsive.js +1 -0
  42. package/dist/index.css +5 -0
  43. package/dist/index.js +1 -1
  44. package/dist/modifiers/background.js +1 -1
  45. package/dist/modifiers/border.js +1 -1
  46. package/dist/modifiers/colorConverter.js +1 -0
  47. package/dist/modifiers/default.js +1 -0
  48. package/dist/modifiers/display.js +1 -0
  49. package/dist/modifiers/flex.js +1 -1
  50. package/dist/modifiers/flexWrapper.js +1 -1
  51. package/dist/modifiers/fullColor.js +1 -0
  52. package/dist/modifiers/logger.js +1 -0
  53. package/dist/modifiers/margin.js +1 -1
  54. package/dist/modifiers/padding.js +1 -1
  55. package/dist/modifiers/position.js +1 -1
  56. package/dist/modifiers/shadow.js +1 -1
  57. package/dist/modifiers/size.js +1 -1
  58. package/dist/modifiers/sizeConverter.js +1 -0
  59. package/dist/modifiers/text.js +1 -1
  60. package/dist/modifiers/textConverter.js +1 -0
  61. package/dist/modifiers/themeComponent.js +1 -0
  62. package/dist/theme/ThemeHandler.js +1 -1
  63. package/dist/theme/default/base.js +1 -1
  64. package/dist/theme/default/cyberpunkTheme.js +1 -1
  65. package/dist/theme/default/darkTheme.js +1 -1
  66. package/dist/theme/default/deepWoodsTheme.js +1 -1
  67. package/dist/theme/default/forestTheme.js +1 -1
  68. package/dist/theme/default/hackerTheme.js +1 -0
  69. package/dist/theme/default/lightTheme.js +1 -1
  70. package/dist/theme/default/midnightTheme.js +1 -1
  71. package/dist/theme/default/msdosTheme.js +1 -0
  72. package/dist/theme/default/oceanTheme.js +1 -1
  73. package/dist/theme/default/pastelTheme.js +1 -1
  74. package/dist/theme/default/sunsetTheme.js +1 -1
  75. package/dist/theme/default/themes.js +1 -1
  76. package/dist/theme/helpers/colorScale.js +1 -0
  77. package/dist/theme/helpers/mergePreset.js +1 -0
  78. package/dist/theme/helpers/relatedScales.js +1 -0
  79. package/dist/theme/helpers/sizeScale.js +1 -1
  80. package/dist/theme/helpers/textScale.js +1 -0
  81. package/package.json +1 -1
  82. package/src/abstractions/BKTouchableOpacity.js +12 -0
  83. package/src/abstractions/HiddenInput.js +3 -0
  84. package/src/abstractions/HiddenInput.native.js +3 -0
  85. package/src/abstractions/Icon.js +23 -1
  86. package/src/abstractions/Icon.native.js +11 -2
  87. package/src/abstractions/Icon.web.js +11 -2
  88. package/src/abstractions/Switch.js +97 -0
  89. package/src/abstractions/Switch.native.js +12 -0
  90. package/src/abstractions/TouchableOpacity.js +3 -11
  91. package/src/abstractions/TouchableOpacity.native.js +3 -0
  92. package/src/abstractions/TouchableOpacity.web.js +3 -0
  93. package/src/abstractions/windowWidth.js +13 -0
  94. package/src/abstractions/windowWidth.native.js +6 -0
  95. package/src/abstractions/windowWidth.web.js +6 -0
  96. package/src/components/actions/Button.js +62 -0
  97. package/src/components/actions/Link.js +39 -0
  98. package/src/{actions → components/actions}/index.js +1 -0
  99. package/src/{form → components/form}/FormItem.js +2 -2
  100. package/src/{form → components/form}/FormList.js +2 -2
  101. package/src/{form → components/form}/index.js +1 -0
  102. package/src/components/form/inputs/Checkbox.js +42 -0
  103. package/src/components/form/inputs/Radio.js +42 -0
  104. package/src/components/form/inputs/Switch.js +44 -0
  105. package/src/components/form/inputs/index.js +3 -0
  106. package/src/components/helpers/Responsive.js +18 -0
  107. package/src/components/helpers/Separator.js +49 -0
  108. package/src/components/helpers/index.js +2 -0
  109. package/src/components/index.js +6 -0
  110. package/src/components/presentation/ContentLabel.js +25 -0
  111. package/src/components/presentation/Icon.js +20 -0
  112. package/src/components/presentation/IconLabel.js +29 -0
  113. package/src/components/presentation/Tag.js +72 -0
  114. package/src/{presentation → components/presentation}/index.js +1 -0
  115. package/src/components/structure/Card.js +42 -0
  116. package/src/components/structure/View.js +36 -0
  117. package/src/components/text/Text.js +28 -0
  118. package/src/helpers/index.js +2 -0
  119. package/src/helpers/responsive.js +54 -0
  120. package/src/index.css +5 -0
  121. package/src/index.js +2 -5
  122. package/src/modifiers/background.js +10 -7
  123. package/src/modifiers/border.js +10 -7
  124. package/src/modifiers/colorConverter.js +13 -0
  125. package/src/modifiers/default.js +9 -0
  126. package/src/modifiers/display.js +24 -0
  127. package/src/modifiers/flex.js +10 -7
  128. package/src/modifiers/flexWrapper.js +12 -9
  129. package/src/modifiers/{fullColor.js.js → fullColor.js} +8 -9
  130. package/src/modifiers/logger.js +6 -0
  131. package/src/modifiers/margin.js +10 -7
  132. package/src/modifiers/padding.js +10 -7
  133. package/src/modifiers/position.js +10 -7
  134. package/src/modifiers/shadow.js +10 -7
  135. package/src/modifiers/size.js +8 -5
  136. package/src/modifiers/sizeConverter.js +12 -0
  137. package/src/modifiers/text.js +14 -13
  138. package/src/modifiers/textConverter.js +12 -0
  139. package/src/modifiers/themeComponent.js +11 -0
  140. package/src/theme/ThemeHandler.js +31 -33
  141. package/src/theme/default/base.js +13 -1
  142. package/src/theme/default/cyberpunkTheme.js +1 -0
  143. package/src/theme/default/darkTheme.js +1 -0
  144. package/src/theme/default/deepWoodsTheme.js +1 -0
  145. package/src/theme/default/forestTheme.js +1 -0
  146. package/src/theme/default/hackerTheme.js +32 -0
  147. package/src/theme/default/lightTheme.js +1 -0
  148. package/src/theme/default/midnightTheme.js +1 -0
  149. package/src/theme/default/msdosTheme.js +40 -0
  150. package/src/theme/default/oceanTheme.js +1 -0
  151. package/src/theme/default/pastelTheme.js +1 -0
  152. package/src/theme/default/sunsetTheme.js +1 -0
  153. package/src/theme/default/themes.js +4 -0
  154. package/src/theme/helpers/colorScale.js +11 -0
  155. package/src/theme/helpers/mergePreset.js +7 -0
  156. package/src/theme/helpers/relatedScales.js +34 -0
  157. package/src/theme/helpers/sizeScale.js +12 -4
  158. package/src/theme/helpers/textScale.js +15 -0
  159. package/dist/actions/Button.js +0 -1
  160. package/dist/actions/index.js +0 -1
  161. package/dist/form/Form.js +0 -1
  162. package/dist/form/FormGroup.js +0 -1
  163. package/dist/form/FormItem.js +0 -1
  164. package/dist/form/FormList.js +0 -1
  165. package/dist/form/FormWrapperComponent.js +0 -1
  166. package/dist/modifiers/fullColor.js.js +0 -1
  167. package/dist/presentation/Icon.js +0 -1
  168. package/dist/presentation/Tag.js +0 -1
  169. package/dist/presentation/index.js +0 -1
  170. package/dist/structure/Card.js +0 -1
  171. package/dist/structure/View.js +0 -1
  172. package/dist/text/Text.js +0 -1
  173. package/dist/theme/default/base.native.js +0 -1
  174. package/dist/theme/default/base.web.js +0 -1
  175. package/src/actions/Button.js +0 -48
  176. package/src/presentation/Icon.js +0 -14
  177. package/src/presentation/Tag.js +0 -32
  178. package/src/structure/Card.js +0 -36
  179. package/src/structure/View.js +0 -34
  180. package/src/text/Text.js +0 -20
  181. package/src/theme/default/base.native.js +0 -58
  182. package/src/theme/default/base.web.js +0 -3
  183. /package/dist/{form → components/form}/FormWrapperComponent.native.js +0 -0
  184. /package/dist/{form → components/form}/useForm.js +0 -0
  185. /package/dist/{structure → components/structure}/index.js +0 -0
  186. /package/dist/{text → components/text}/index.js +0 -0
  187. /package/src/{form → components/form}/Form.js +0 -0
  188. /package/src/{form → components/form}/FormGroup.js +0 -0
  189. /package/src/{form → components/form}/FormWrapperComponent.js +0 -0
  190. /package/src/{form → components/form}/FormWrapperComponent.native.js +0 -0
  191. /package/src/{form → components/form}/useForm.js +0 -0
  192. /package/src/{structure → components/structure}/index.js +0 -0
  193. /package/src/{text → components/text}/index.js +0 -0
@@ -0,0 +1,12 @@
1
+ import { getSizeFromProps } from '../theme/helpers/sizeScale'
2
+ import { useGetThemeValue } from '../theme/ThemeHandler'
3
+
4
+ export function useSizeConverter(groupKey, defaultValue) {
5
+ const getSizeValue = useGetThemeValue(groupKey)
6
+
7
+ return ([values, props]) => {
8
+ const [sizeCode, formattedProps] = getSizeFromProps(props, defaultValue)
9
+ const size = getSizeValue(sizeCode)
10
+ return [{ ...values, size, sizeCode }, formattedProps]
11
+ }
12
+ }
@@ -1,14 +1,14 @@
1
1
  import { clearProps } from './_helpers'
2
- import { mergePreset, useGetColor, useTexts } from '../theme/ThemeHandler'
2
+ import { mergePreset } from '../theme/helpers/mergePreset'
3
+ import { useGetColor, useTexts } from '../theme/ThemeHandler'
3
4
 
4
- export function useTextModifier({ size, ...props }) {
5
+ export function useTextModifier([{ color, textCode, ...values }, { ...props }]) {
5
6
  const getColor = useGetColor()
6
7
  const texts = useTexts()
7
8
 
8
- if (!size && !props.inherit) size = 'p'
9
+ if (!textCode && !props.inherit) textCode = 'p'
9
10
 
10
11
  let {
11
- color,
12
12
  opacity,
13
13
  bold,
14
14
  strong,
@@ -23,7 +23,7 @@ export function useTextModifier({ size, ...props }) {
23
23
  inherit,
24
24
  fontSize,
25
25
  ...restProps
26
- } = mergePreset(texts, size, props, 'p')
26
+ } = mergePreset(texts, textCode, props, 'p')
27
27
 
28
28
  let fontStyle
29
29
  if (italic) fontStyle = 'italic'
@@ -38,8 +38,6 @@ export function useTextModifier({ size, ...props }) {
38
38
  fontWeight = fontWeight || weight
39
39
  if (bold || strong) fontWeight = 600
40
40
 
41
- if (!inherit) color = getColor(color || 'text')
42
-
43
41
  const style = clearProps({
44
42
  fontWeight,
45
43
  fontStyle,
@@ -51,11 +49,14 @@ export function useTextModifier({ size, ...props }) {
51
49
  fontSize,
52
50
  })
53
51
 
54
- return {
55
- ...restProps,
56
- style: {
57
- ...props.style,
58
- ...style,
52
+ return [
53
+ values,
54
+ {
55
+ ...restProps,
56
+ style: {
57
+ ...props.style,
58
+ ...style,
59
+ },
59
60
  },
60
- }
61
+ ]
61
62
  }
@@ -0,0 +1,12 @@
1
+ import { getTextFromProps } from '../theme/helpers/textScale'
2
+ import { useGetThemeValue } from '../theme/ThemeHandler'
3
+
4
+ export function useTextConverter(defaultValue) {
5
+ const getTextValue = useGetThemeValue('texts')
6
+
7
+ return ([values, props]) => {
8
+ const [textCode, formattedProps] = getTextFromProps(props, defaultValue)
9
+ const text = getTextValue(textCode)
10
+ return [{ ...values, text, textCode }, formattedProps]
11
+ }
12
+ }
@@ -0,0 +1,11 @@
1
+ import { mergeDeepRight } from 'ramda'
2
+ import { useThemeComponent } from '../theme/ThemeHandler'
3
+
4
+ export function useThemeComponentModifier(componentName) {
5
+ const themeProps = useThemeComponent(componentName)
6
+
7
+ return ([values, props]) => {
8
+ props = mergeDeepRight(themeProps, props)
9
+ return [values, props]
10
+ }
11
+ }
@@ -2,50 +2,48 @@ import { mergeDeepRight } from 'ramda'
2
2
  import React from 'react'
3
3
 
4
4
  import { DEFAULT_LIGHT_THEME } from './default/lightTheme'
5
- import { DEFAULT_THEMES } from './default/themes'
5
+ import { getThemeValue } from './helpers/relatedScales'
6
6
  import { useFormattedTheme } from './format/formatTheme'
7
7
 
8
+ const DEFAULT_BREAKPOINTS = [
9
+ { name: 'sm', value: 768 },
10
+ { name: 'md', value: 1024 },
11
+ { name: 'lg', value: 1440 },
12
+ { name: 'xlg', value: 10000 },
13
+ ]
14
+
8
15
  const ThemeContext = React.createContext(null)
9
16
  export const useThemeHandler = () => React.useContext(ThemeContext) || {}
10
- export const useTheme = () => useThemeHandler().theme || DEFAULT_LIGHT_THEME
11
17
 
12
- export const useColors = () => useTheme().colors || {}
13
- const getColor = (colors, key) => colors[key] || key
14
- export const useGetColor = () => {
15
- const colors = useColors()
16
- return (key) => getColor(colors, key)
17
- }
18
+ export const useBreakpoints = () => useThemeHandler()?.breakpoints || DEFAULT_BREAKPOINTS
18
19
 
19
- export const useSpaces = () => useTheme().spaces || {}
20
- const getSpace = (spaces, key) => spaces[key] || key
21
- export const useGetSpace = () => {
22
- const spaces = useSpaces()
23
- return (key) => getSpace(spaces, key)
20
+ export const useTheme = (groupKey) => {
21
+ const theme = useThemeHandler().theme || DEFAULT_LIGHT_THEME
22
+ if (!groupKey) return theme
23
+ return theme?.[groupKey] || {}
24
24
  }
25
25
 
26
- export const useRadius = () => useTheme().radius || {}
27
- const getRadius = (radius, key) => radius[key] || key
28
- export const useGetRadius = () => {
29
- const radius = useRadius()
30
- return (key) => getRadius(radius, key)
26
+ export const useGetThemeValue = (groupKey) => {
27
+ const group = useTheme(groupKey)
28
+ return (key) => getThemeValue(group, key)
31
29
  }
32
30
 
33
- export const useTexts = () => useTheme().texts || {}
31
+ export const useColors = () => useTheme('colors')
32
+ export const useGetColor = () => useGetThemeValue('colors')
34
33
 
35
- export function mergePreset(presets, key, props, defaultKey) {
36
- if (!key) return props
37
- const preset = presets[key] || presets[defaultKey]
38
- return { ...props, ...preset }
39
- }
34
+ export const useSpaces = () => useTheme('spaces')
35
+ export const useGetSpace = () => useGetThemeValue('spaces')
40
36
 
41
- export const useElementHeights = () => useTheme().elementHeights || {}
42
- const getElementHeight = (elementHeights, key) => elementHeights[key] || key
43
- export const useGetElementHeight = () => {
44
- const elementHeights = useElementHeights()
45
- return (key) => getElementHeight(elementHeights, key)
46
- }
37
+ export const useRadius = () => useTheme('radius')
38
+ export const useGetRadius = () => useGetThemeValue('radius')
39
+
40
+ export const useElementHeights = () => useTheme('elementHeights')
41
+ export const useGetElementHeight = () => useGetThemeValue('elementHeights')
42
+
43
+ export const useTexts = () => useTheme('texts')
44
+ export const useGetText = () => useGetThemeValue('text')
47
45
 
48
- export const useThemeComponents = () => useTheme().components || {}
46
+ export const useThemeComponents = () => useTheme('components')
49
47
  export function useThemeComponent(name) {
50
48
  const components = useThemeComponents()
51
49
  return components[name] || {}
@@ -55,10 +53,10 @@ export function useMergeThemeComponent(name, props) {
55
53
  return mergeDeepRight(themeProps, props)
56
54
  }
57
55
 
58
- export function ThemeHandler({ themes, initTheme, children }) {
56
+ export function ThemeHandler({ breakpoints, themes, initTheme, children }) {
59
57
  const [activeThemeKey, setActiveThemeKey] = React.useState(initTheme || 'light')
60
58
  const theme = useFormattedTheme(themes, activeThemeKey)
61
- const value = { theme, themes, activeThemeKey, setActiveThemeKey }
59
+ const value = { theme, themes, activeThemeKey, setActiveThemeKey, breakpoints: breakpoints || DEFAULT_BREAKPOINTS }
62
60
 
63
61
  return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>
64
62
  }
@@ -23,7 +23,19 @@ export const BASE_THEME = {
23
23
  xxxlg: 18,
24
24
  },
25
25
 
26
- // Buttons, inputs, tags
26
+ icons: {
27
+ xxxsm: 10,
28
+ xxsm: 12,
29
+ xsm: 14,
30
+ sm: 16,
31
+ md: 18,
32
+ lg: 22,
33
+ xlg: 26,
34
+ xxlg: 28,
35
+ xxxlg: 32,
36
+ },
37
+
38
+ // Buttons, inputs, etc.
27
39
  elementHeights: {
28
40
  xsm: 20,
29
41
  sm: 30,
@@ -12,6 +12,7 @@ export const CYBERPUNK_DARK_THEME = mergeDeepRight(BASE_THEME, {
12
12
  bg: '#0A0A0F',
13
13
  overlayBG: '#14141F',
14
14
  shadow: 'rgba(39, 45, 52, 0.6)',
15
+ divider: 'rgba(255,255,255, 0.2)',
15
16
 
16
17
  blue: '#00E5FF',
17
18
  yellow: '#FFD600',
@@ -12,6 +12,7 @@ export const DEFAULT_DARK_THEME = mergeDeepRight(BASE_THEME, {
12
12
  bg: '#383E44',
13
13
  overlayBG: '#272D34',
14
14
  shadow: 'rgba(39, 45, 52, 0.6)',
15
+ divider: 'rgba(255,255,255, 0.2)',
15
16
 
16
17
  blue: '#4DA3FF',
17
18
  yellow: '#FFD93B',
@@ -12,6 +12,7 @@ export const DEEP_WOODS_DARK_THEME = mergeDeepRight(BASE_THEME, {
12
12
  bg: '#0D1B14',
13
13
  overlayBG: '#16281F',
14
14
  shadow: 'rgba(39, 45, 52, 0.6)',
15
+ divider: 'rgba(255,255,255, 0.2)',
15
16
 
16
17
  blue: '#64B5F6',
17
18
  yellow: '#FBC02D',
@@ -12,6 +12,7 @@ export const FOREST_MIST_THEME = mergeDeepRight(BASE_THEME, {
12
12
  bg: '#E9F5EC',
13
13
  overlayBG: '#FFFFFF',
14
14
  shadow: 'rgba(39, 45, 52, 0.15)',
15
+ divider: 'rgba(0,0,0, 0.1)',
15
16
 
16
17
  blue: '#2563EB',
17
18
  yellow: '#F59E0B',
@@ -0,0 +1,32 @@
1
+ import { mergeDeepRight } from 'ramda'
2
+
3
+ import { BASE_THEME } from './base'
4
+
5
+ export const DEFAULT_MATRIX_THEME = mergeDeepRight(BASE_THEME, {
6
+ colors: {
7
+ primary: '#00FF41',
8
+ text: '#00FF41',
9
+ text2: '#00CC33',
10
+ text3: '#009926',
11
+ text4: '#00661A',
12
+
13
+ bg: '#000000',
14
+ overlayBG: '#0A0A0A',
15
+ shadow: 'rgba(0, 255, 65, 0.2)',
16
+ divider: 'rgba(0,255,65, 0.3)',
17
+
18
+ blue: '#0087BD',
19
+ yellow: '#AEBF00',
20
+ green: '#00FF41',
21
+ purple: '#7A1FA2',
22
+ orange: '#FF6D00',
23
+ cyan: '#00BFA5',
24
+ red: '#D50000',
25
+ navy: '#003366',
26
+ indigo: '#303F9F',
27
+ gray: '#4A4A4A',
28
+ brown: '#5D4037',
29
+ lylac: '#8E24AA',
30
+ pink: '#C51162',
31
+ },
32
+ })
@@ -12,6 +12,7 @@ export const DEFAULT_LIGHT_THEME = mergeDeepRight(BASE_THEME, {
12
12
  bg: '#F4F5FE',
13
13
  overlayBG: '#FFFFFF',
14
14
  shadow: 'rgba(39, 45, 52, 0.15)',
15
+ divider: 'rgba(0,0,0, 0.1)',
15
16
 
16
17
  blue: '#4DA3FF',
17
18
  yellow: '#FFD93B',
@@ -12,6 +12,7 @@ export const MIDNIGHT_NEON_THEME = mergeDeepRight(BASE_THEME, {
12
12
  bg: '#0D0D0D',
13
13
  overlayBG: '#1A1A1A',
14
14
  shadow: 'rgba(39, 45, 52, 0.6)',
15
+ divider: 'rgba(255,255,255, 0.2)',
15
16
 
16
17
  blue: '#3B82F6',
17
18
  yellow: '#FACC15',
@@ -0,0 +1,40 @@
1
+ import { mergeDeepRight } from 'ramda'
2
+
3
+ import { BASE_THEME } from './base'
4
+
5
+ export const DEFAULT_MSDOS_THEME = mergeDeepRight(BASE_THEME, {
6
+ colors: {
7
+ primary: '#FFFF00',
8
+ text: '#FFFFFF',
9
+ text2: '#FFD700',
10
+ text3: '#CCCCCC',
11
+ text4: '#999999',
12
+
13
+ bg: '#0000AA',
14
+ overlayBG: '#000088',
15
+ shadow: 'rgba(0, 0, 0, 0.6)',
16
+ divider: 'rgba(255,255,255,0.3)',
17
+
18
+ blue: '#0000FF',
19
+ yellow: '#FFFF00',
20
+ green: '#00FF00',
21
+ purple: '#AA00FF',
22
+ orange: '#FF7700',
23
+ cyan: '#00FFFF',
24
+ red: '#FF0000',
25
+ navy: '#000080',
26
+ indigo: '#4B0082',
27
+ gray: '#B0B0B0',
28
+ brown: '#8B4513',
29
+ lylac: '#9370DB',
30
+ pink: '#FF69B4',
31
+ },
32
+
33
+ components: {
34
+ Card: {
35
+ borderWidth: 1,
36
+ br: 5,
37
+ borderColor: 'divider',
38
+ },
39
+ },
40
+ })
@@ -12,6 +12,7 @@ export const OCEAN_BREEZE_THEME = mergeDeepRight(BASE_THEME, {
12
12
  bg: '#E6F7FF',
13
13
  overlayBG: '#FFFFFF',
14
14
  shadow: 'rgba(39, 45, 52, 0.15)',
15
+ divider: 'rgba(0,0,0, 0.1)',
15
16
 
16
17
  blue: '#1D4ED8',
17
18
  yellow: '#FACC15',
@@ -12,6 +12,7 @@ export const PASTEL_DREAM_THEME = mergeDeepRight(BASE_THEME, {
12
12
  bg: '#FFF7FA',
13
13
  overlayBG: '#FFFFFF',
14
14
  shadow: 'rgba(39, 45, 52, 0.15)',
15
+ divider: 'rgba(255,255,255, 0.2)',
15
16
 
16
17
  blue: '#A5B4FC',
17
18
  yellow: '#FDE68A',
@@ -13,6 +13,7 @@ export const SUNSET_GLOW_THEME = mergeDeepRight(BASE_THEME, {
13
13
  bg: '#FFF5E6',
14
14
  overlayBG: '#FFFFFF',
15
15
  shadow: 'rgba(39, 45, 52, 0.15)',
16
+ divider: 'rgba(255,255,255, 0.2)',
16
17
 
17
18
  blue: '#3B82F6',
18
19
  yellow: '#FBBF24',
@@ -2,6 +2,8 @@ import { CYBERPUNK_DARK_THEME } from './cyberpunkTheme'
2
2
  import { DEEP_WOODS_DARK_THEME } from './deepWoodsTheme'
3
3
  import { DEFAULT_DARK_THEME } from './darkTheme'
4
4
  import { DEFAULT_LIGHT_THEME } from './lightTheme'
5
+ import { DEFAULT_MATRIX_THEME } from './hackerTheme'
6
+ import { DEFAULT_MSDOS_THEME } from './msdosTheme'
5
7
  import { FOREST_MIST_THEME } from './forestTheme'
6
8
  import { MIDNIGHT_NEON_THEME } from './midnightTheme'
7
9
  import { OCEAN_BREEZE_THEME } from './oceanTheme'
@@ -18,4 +20,6 @@ export const DEFAULT_THEMES = {
18
20
  forest: FOREST_MIST_THEME,
19
21
  cyberpunk: CYBERPUNK_DARK_THEME,
20
22
  deepWoods: DEEP_WOODS_DARK_THEME,
23
+ hacker: DEFAULT_MATRIX_THEME,
24
+ msdos: DEFAULT_MSDOS_THEME,
21
25
  }
@@ -0,0 +1,11 @@
1
+ import { omit, keys } from 'ramda'
2
+
3
+ import { DEFAULT_DARK_THEME } from '../default/darkTheme'
4
+
5
+ const SCALE = keys(DEFAULT_DARK_THEME.colors)
6
+
7
+ export function getColorFromProps({ color, ...props }, defaultValue) {
8
+ if (!!color) return [color, props]
9
+ color = SCALE.find((key) => !!props[key]) || defaultValue
10
+ return [color, omit(SCALE, props)]
11
+ }
@@ -0,0 +1,7 @@
1
+ import { getThemeValue } from './relatedScales'
2
+
3
+ export function mergePreset(presets, key, props, defaultKey) {
4
+ if (!key) return props
5
+ const preset = getThemeValue(presets, key, false) || getThemeValue(presets, defaultKey, {})
6
+ return { ...props, ...preset }
7
+ }
@@ -0,0 +1,34 @@
1
+ import { is } from 'ramda'
2
+
3
+ const SCALES = [
4
+ ['xxxsm'],
5
+ ['xxsm'],
6
+ ['xsm'],
7
+ ['sm', 'small'],
8
+ ['md', 'p'],
9
+ ['lg', 'h6'],
10
+ ['xlg', 'h5'],
11
+ ['xxlg', 'h4'],
12
+ ['xxxlg', 'h3'],
13
+ ]
14
+
15
+ export function getScaleSynonyms(key) {
16
+ return SCALES.find((list) => list.includes(key)) || []
17
+ }
18
+
19
+ export function getThemeValue(group, key, defaultValue) {
20
+ defaultValue = defaultValue === undefined ? key : defaultValue
21
+ if (!key) return defaultValue
22
+ let value = group[key]
23
+ if (!!value || !is(String, key)) return value || defaultValue
24
+
25
+ const synonyms = getScaleSynonyms(key)
26
+ for (const synonym of synonyms) {
27
+ if (group?.[synonym]) {
28
+ value = group[synonym]
29
+ break
30
+ }
31
+ }
32
+
33
+ return value || defaultValue
34
+ }
@@ -1,7 +1,15 @@
1
- const SCALES = ['xxxsm', 'xxsm', 'xsm', 'sm', 'md', 'lg', 'xlg', 'xxlg', 'xxxlg']
1
+ import { omit } from 'ramda'
2
2
 
3
- export function moveScaleDown(value, unit = 1) {
4
- const index = SCALES.indexOf(value)
3
+ const SCALE = ['xxxsm', 'xxsm', 'xsm', 'sm', 'md', 'lg', 'xlg', 'xxlg', 'xxxlg']
4
+
5
+ export function moveScale(value, unit = 1) {
6
+ const index = SCALE.indexOf(value)
5
7
  if (!index) return value
6
- return SCALES[index - unit] || value
8
+ return SCALE[index + unit] || value
9
+ }
10
+
11
+ export function getSizeFromProps({ size, ...props }, defaultValue) {
12
+ if (!!size) return [size, props]
13
+ size = SCALE.find((key) => !!props[key]) || defaultValue
14
+ return [size, omit(SCALE, props)]
7
15
  }
@@ -0,0 +1,15 @@
1
+ import { omit } from 'ramda'
2
+
3
+ const SCALE = ['xxxsm', 'xxsm', 'xsm', 'sm', 'p', 'h6', 'h5', 'h4', 'h3', 'h2', 'h1']
4
+
5
+ export function moveTextScale(value, unit = 1) {
6
+ const index = SCALE.indexOf(value)
7
+ if (!index) return value
8
+ return SCALE[index + unit] || value
9
+ }
10
+
11
+ export function getTextFromProps({ size, ...props }, defaultValue) {
12
+ if (!!size) return [size, props]
13
+ size = SCALE.find((key) => !!props[key]) || defaultValue
14
+ return [size, omit(SCALE, props)]
15
+ }
@@ -1 +0,0 @@
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/actions/Button.js";var _excluded=["label","style","textProps","size"];import{pipe}from'ramda';import{AbsTouchableOpacity}from"../abstractions/TouchableOpacity";import{Text}from"../text/Text";import{useBackgroundModifier}from"../modifiers/background";import{useBorderModifier}from"../modifiers/border";import{useFlexModifier}from"../modifiers/flex";import{useFlexWrapperModifier}from"../modifiers/flexWrapper";import{useFullColorModifier}from"../modifiers/fullColor.js";import{useMarginModifier}from"../modifiers/margin";import{useMergeThemeComponent}from"../theme/ThemeHandler";import{usePaddingModifier}from"../modifiers/padding";import{usePositionModifier}from"../modifiers/position";import{useSizeModifier}from"../modifiers/size";import{jsx as _jsx}from"react/jsx-runtime";export function Button(rootProps){var _useMergeThemeCompone=useMergeThemeComponent('Button',rootProps),label=_useMergeThemeCompone.label,style=_useMergeThemeCompone.style,textProps=_useMergeThemeCompone.textProps,_useMergeThemeCompone2=_useMergeThemeCompone.size,size=_useMergeThemeCompone2===void 0?'md':_useMergeThemeCompone2,props=_objectWithoutProperties(_useMergeThemeCompone,_excluded);var defaultProps={paddingH:size,paddingV:2,height:size,br:size,borderWidth:1,color:'primary',center:true,row:true};var _useFullColorModifier=useFullColorModifier(Object.assign({},defaultProps,props,{style:style})),_useFullColorModifier2=_slicedToArray(_useFullColorModifier,2),fontColor=_useFullColorModifier2[0],formattedProps=_useFullColorModifier2[1];props=pipe(useSizeModifier,usePositionModifier,usePaddingModifier,useMarginModifier,useFlexModifier,useFlexWrapperModifier,useBackgroundModifier,useBorderModifier)(formattedProps);return _jsx(AbsTouchableOpacity,Object.assign({className:"neko-button neko-wave-click-effect"},props,{children:_jsx(Text,Object.assign({center:true,color:fontColor,strong:true,size:size},textProps,{children:label}))}));}
@@ -1 +0,0 @@
1
- export*from"./Button";
package/dist/form/Form.js DELETED
@@ -1 +0,0 @@
1
- var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/form/Form.js";import React from'react';import{FormWrapperComponent}from"./FormWrapperComponent";import{jsx as _jsx}from"react/jsx-runtime";var FormContext=React.createContext(null);export var useFormInstance=function useFormInstance(){return React.useContext(FormContext);};export function Form(_ref){var form=_ref.form,children=_ref.children;return _jsx(FormContext.Provider,{value:form,children:_jsx(FormWrapperComponent,{form:form,children:children})});}
@@ -1 +0,0 @@
1
- import _toConsumableArray from"@babel/runtime/helpers/toConsumableArray";var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/form/FormGroup.js";import React from'react';import{jsx as _jsx}from"react/jsx-runtime";var FormGroupContext=React.createContext(null);var useGroupPath=function useGroupPath(){var _React$useContext;return((_React$useContext=React.useContext(FormGroupContext))==null?void 0:_React$useContext.path)||[];};export function useRelativePath(name,opts){var relative=opts.relative;var listPath=!!name?Array.isArray(name)?name:[name]:[];var parentPath=useGroupPath();if(!relative)return listPath;return[].concat(_toConsumableArray(parentPath),_toConsumableArray(listPath));}export function FormGroup(_ref){var name=_ref.name;var path=useRelativePath(name,{relative:true});var value={path:path};return _jsx(FormGroupContext.Provider,{value:value,children:children});}
@@ -1 +0,0 @@
1
- import _slicedToArray from"@babel/runtime/helpers/slicedToArray";var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/form/FormItem.js";import{Text}from"react-native-web";import React from'react';import{FormGroup,useRelativePath}from"./FormGroup";import{useFormInstance}from"./Form";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";export function FormItem(_ref){var name=_ref.name,relative=_ref.relative,children=_ref.children;var form=useFormInstance();var listPath=useRelativePath(name,{relative:relative});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 child=React.Children.only(children);var childWithProps=React.cloneElement(child,{value:value,onChange:handleChange});return _jsxs(FormGroup,{name:listPath,children:[childWithProps,error&&_jsx(Text,{style:{color:'red'},children:error})]});}
@@ -1 +0,0 @@
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/form/FormList.js";import{Text}from"react-native-web";import React from'react';import{FormGroup,useRelativePath}from"./FormGroup";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,relative=_ref.relative,children=_ref.children;var form=useFormInstance();var listPath=useRelativePath(name,{relative:relative});var listPathStr=listPath.join('$NEKOJOIN$');var error=form.getError(listPath);var _React$useState=React.useState(function(){var initial=form.getFieldValue(listPath)||[];return initial.map(function(_,index){return{key:index,name:index};});}),_React$useState2=_slicedToArray(_React$useState,2),fields=_React$useState2[0],setFields=_React$useState2[1];React.useEffect(function(){return form.registerListener(listPath,function(val){if(Array.isArray(val)){setFields(val.map(function(_,index){return{key:index,name:index};}));}});},[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 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};},[listPathStr]);return _jsx(FormGroup,{name:listPath,children:_jsxs(FormListContext.Provider,{value:actions,children:[typeof children==='function'?children(fields,actions):React.cloneElement(React.Children.only(children),Object.assign({fields:fields},actions)),error&&_jsx(Text,{style:{color:'red'},children:error})]})});}
@@ -1 +0,0 @@
1
- import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/form/FormWrapperComponent.js";var _excluded=["children","form"];import{jsx as _jsx}from"react/jsx-runtime";export function FormWrapperComponent(_ref){var children=_ref.children,form=_ref.form,props=_objectWithoutProperties(_ref,_excluded);var handleSubmit=function handleSubmit(e){e.preventDefault();form.handleSubmit();};return _jsx("form",{onSubmit:handleSubmit,children:children});}
@@ -1 +0,0 @@
1
- import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _excluded=["color","outline"];import tinycolor from'tinycolor2';import{useGetColor}from"../theme/ThemeHandler";export function useFullColorModifier(props){var getColor=useGetColor();var color=props.color,outline=props.outline,restProps=_objectWithoutProperties(props,_excluded);var bg=color;var bgObj=tinycolor(getColor(bg));var borderColor=color;var textColor='text';var textColorObj=tinycolor(getColor('text'));if(!!outline){bg='transparent';textColor=color;}else if(bgObj.isDark()===textColorObj.isDark()){textColor='overlayBG';}return[textColor,Object.assign({},restProps,{bg:bg,borderColor:borderColor})];}
@@ -1 +0,0 @@
1
- import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/presentation/Icon.js";var _excluded=["name","color"];import{AbsIcon}from"../abstractions/Icon";import{useGetColor,useMergeThemeComponent}from"../theme/ThemeHandler";import{jsx as _jsx}from"react/jsx-runtime";export function Icon(_ref){var name=_ref.name,color=_ref.color,rootProps=_objectWithoutProperties(_ref,_excluded);var getColor=useGetColor();var props=useMergeThemeComponent('Icon',rootProps);return _jsx(AbsIcon,Object.assign({className:"neko-icon",name:name,color:getColor(color||'text')},props));}
@@ -1 +0,0 @@
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/presentation/Tag.js";var _excluded=["label","style","textProps","size"];import{Text}from"../text/Text";import{View}from"../structure/View";import{moveScaleDown}from"../theme/helpers/sizeScale";import{useFullColorModifier}from"../modifiers/fullColor.js";import{useMergeThemeComponent}from"../theme/ThemeHandler";import{jsx as _jsx}from"react/jsx-runtime";export function Tag(rootProps){var _useMergeThemeCompone=useMergeThemeComponent('Button',rootProps),label=_useMergeThemeCompone.label,style=_useMergeThemeCompone.style,textProps=_useMergeThemeCompone.textProps,_useMergeThemeCompone2=_useMergeThemeCompone.size,size=_useMergeThemeCompone2===void 0?'md':_useMergeThemeCompone2,props=_objectWithoutProperties(_useMergeThemeCompone,_excluded);var oneSizeDown=moveScaleDown(size,1);var twoSizeDown=moveScaleDown(size,2);var threeSizeDown=moveScaleDown(size,3);var defaultProps={paddingH:twoSizeDown,padding:threeSizeDown,outline:true,br:threeSizeDown,borderWidth:1,color:'primary',center:true};var _useFullColorModifier=useFullColorModifier(Object.assign({},defaultProps,props,{style:style})),_useFullColorModifier2=_slicedToArray(_useFullColorModifier,2),fontColor=_useFullColorModifier2[0],formattedProps=_useFullColorModifier2[1];return _jsx(View,{className:"neko-tag",row:true,children:_jsx(View,Object.assign({className:"neko-tag-inner"},formattedProps,{children:_jsx(Text,Object.assign({strong:true,center:true,color:fontColor,size:oneSizeDown},textProps,{children:label}))}))});}
@@ -1 +0,0 @@
1
- export*from"./Tag";export*from"./Icon";
@@ -1 +0,0 @@
1
- import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/structure/Card.js";var _excluded=["children"];import{pipe}from'ramda';import{AbsView}from"../abstractions/View";import{useBackgroundModifier}from"../modifiers/background";import{useBorderModifier}from"../modifiers/border";import{useFlexModifier}from"../modifiers/flex";import{useFlexWrapperModifier}from"../modifiers/flexWrapper";import{useMarginModifier}from"../modifiers/margin";import{useMergeThemeComponent}from"../theme/ThemeHandler";import{usePaddingModifier}from"../modifiers/padding";import{usePositionModifier}from"../modifiers/position";import{useShadowModifier}from"../modifiers/shadow";import{useSizeModifier}from"../modifiers/size";import{jsx as _jsx}from"react/jsx-runtime";export function Card(_ref){var children=_ref.children,rootProps=_objectWithoutProperties(_ref,_excluded);var props=useMergeThemeComponent('Card',rootProps);var defaultProps={padding:'md',br:'xlg',bg:'overlayBG'};props=pipe(useSizeModifier,usePositionModifier,usePaddingModifier,useMarginModifier,useFlexWrapperModifier,useFlexModifier,useBackgroundModifier,useBorderModifier,useShadowModifier)(Object.assign({},defaultProps,props));return _jsx(AbsView,Object.assign({className:"neko-card"},props,{children:children}));}
@@ -1 +0,0 @@
1
- import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/structure/View.js";var _excluded=["children"];import{pipe}from'ramda';import{AbsView}from"../abstractions/View";import{useBackgroundModifier}from"../modifiers/background";import{useBorderModifier}from"../modifiers/border";import{useFlexModifier}from"../modifiers/flex";import{useFlexWrapperModifier}from"../modifiers/flexWrapper";import{useMarginModifier}from"../modifiers/margin";import{useMergeThemeComponent}from"../theme/ThemeHandler";import{usePaddingModifier}from"../modifiers/padding";import{usePositionModifier}from"../modifiers/position";import{useShadowModifier}from"../modifiers/shadow";import{useSizeModifier}from"../modifiers/size";import{jsx as _jsx}from"react/jsx-runtime";export function View(_ref){var children=_ref.children,rootProps=_objectWithoutProperties(_ref,_excluded);var props=useMergeThemeComponent('View',rootProps);props=pipe(useSizeModifier,usePositionModifier,usePaddingModifier,useMarginModifier,useFlexWrapperModifier,useFlexModifier,useBackgroundModifier,useBorderModifier,useShadowModifier)(props);return _jsx(AbsView,Object.assign({className:"neko-view"},props,{children:children}));}
package/dist/text/Text.js DELETED
@@ -1 +0,0 @@
1
- import _objectWithoutProperties from"@babel/runtime/helpers/objectWithoutProperties";var _jsxFileName="/Users/christianstorch/Apps/nekoapps/libs/neko-ui/src/text/Text.js";var _excluded=["children"];import{pipe}from'ramda';import{AbsText}from"../abstractions/Text";import{useFlexModifier}from"../modifiers/flex";import{useMarginModifier}from"../modifiers/margin";import{usePaddingModifier}from"../modifiers/padding";import{useSizeModifier}from"../modifiers/size";import{useTextModifier}from"../modifiers/text";import{jsx as _jsx}from"react/jsx-runtime";export function Text(_ref){var children=_ref.children,props=_objectWithoutProperties(_ref,_excluded);props=pipe(useSizeModifier,usePaddingModifier,useMarginModifier,useFlexModifier,useTextModifier)(props);return _jsx(AbsText,Object.assign({},props,{children:children}));}
@@ -1 +0,0 @@
1
- export var BASE_THEME={spaces:{xxsm:3,xsm:5,sm:10,md:15,lg:20,xlg:30},radius:{xsm:5,sm:7,md:8,lg:10,xlg:12},elementHeights:{xsm:20,sm:30,md:35,lg:50,xlg:60},texts:{h1:{fontSize:32,strong:true},h2:{fontSize:26,strong:true},h3:{fontSize:22,strong:true},h4:{fontSize:18,strong:true},h5:{fontSize:16,strong:true},h6:{fontSize:14,strong:true},p:{fontSize:14},sm:{fontSize:12},xsm:{fontSize:10},xxsm:{fontSize:8}}};
@@ -1 +0,0 @@
1
- import{BASE_THEME as MOBILE_BASE_THEME}from"./base.native";export var BASE_THEME=MOBILE_BASE_THEME;
@@ -1,48 +0,0 @@
1
- import { pipe } from 'ramda'
2
-
3
- import { AbsTouchableOpacity } from '../abstractions/TouchableOpacity'
4
- import { Text } from '../text/Text'
5
- import { useBackgroundModifier } from '../modifiers/background'
6
- import { useBorderModifier } from '../modifiers/border'
7
- import { useFlexModifier } from '../modifiers/flex'
8
- import { useFlexWrapperModifier } from '../modifiers/flexWrapper'
9
- import { useFullColorModifier } from '../modifiers/fullColor.js'
10
- import { useMarginModifier } from '../modifiers/margin'
11
- import { useMergeThemeComponent } from '../theme/ThemeHandler'
12
- import { usePaddingModifier } from '../modifiers/padding'
13
- import { usePositionModifier } from '../modifiers/position'
14
- import { useSizeModifier } from '../modifiers/size'
15
-
16
- export function Button(rootProps) {
17
- let { label, style, textProps, size = 'md', ...props } = useMergeThemeComponent('Button', rootProps)
18
- const defaultProps = {
19
- paddingH: size,
20
- paddingV: 2,
21
- height: size,
22
- br: size,
23
- borderWidth: 1,
24
- color: 'primary',
25
- center: true,
26
- row: true,
27
- }
28
- const [fontColor, formattedProps] = useFullColorModifier({ ...defaultProps, ...props, style })
29
-
30
- props = pipe(
31
- useSizeModifier, //
32
- usePositionModifier,
33
- usePaddingModifier,
34
- useMarginModifier,
35
- useFlexModifier,
36
- useFlexWrapperModifier,
37
- useBackgroundModifier,
38
- useBorderModifier
39
- )(formattedProps)
40
-
41
- return (
42
- <AbsTouchableOpacity className="neko-button neko-wave-click-effect" {...props}>
43
- <Text center color={fontColor} strong size={size} {...textProps}>
44
- {label}
45
- </Text>
46
- </AbsTouchableOpacity>
47
- )
48
- }
@@ -1,14 +0,0 @@
1
- import { AbsIcon } from '../abstractions/Icon'
2
- import { useGetColor, useMergeThemeComponent } from '../theme/ThemeHandler'
3
-
4
- export function Icon({ name, color, ...rootProps }) {
5
- const getColor = useGetColor()
6
- let props = useMergeThemeComponent('Icon', rootProps)
7
-
8
- // props = pipe(
9
- // useSizeModifier, //
10
- // usePositionModifier,
11
- // )(props)
12
-
13
- return <AbsIcon className="neko-icon" name={name} color={getColor(color || 'text')} {...props} />
14
- }