@chem-po/react-native 0.0.39 → 0.0.41

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 (102) hide show
  1. package/lib/commonjs/components/button/ActionButton.js +103 -38
  2. package/lib/commonjs/components/button/ActionButton.js.map +1 -1
  3. package/lib/commonjs/components/button/ButtonText.js +52 -0
  4. package/lib/commonjs/components/button/ButtonText.js.map +1 -0
  5. package/lib/commonjs/components/button/DeleteButton.js +27 -81
  6. package/lib/commonjs/components/button/DeleteButton.js.map +1 -1
  7. package/lib/commonjs/components/button/LoadingButton.js +8 -107
  8. package/lib/commonjs/components/button/LoadingButton.js.map +1 -1
  9. package/lib/commonjs/components/button/hooks.js +56 -0
  10. package/lib/commonjs/components/button/hooks.js.map +1 -0
  11. package/lib/commonjs/components/button/index.js +11 -0
  12. package/lib/commonjs/components/button/index.js.map +1 -1
  13. package/lib/commonjs/components/form/input/hooks/useInputStyles.js +3 -15
  14. package/lib/commonjs/components/form/input/hooks/useInputStyles.js.map +1 -1
  15. package/lib/commonjs/components/form/input/index.js +22 -0
  16. package/lib/commonjs/components/form/input/index.js.map +1 -1
  17. package/lib/commonjs/components/loading/CircularProgress.js.map +1 -1
  18. package/lib/commonjs/components/loading/LoadingOverlay.js +8 -5
  19. package/lib/commonjs/components/loading/LoadingOverlay.js.map +1 -1
  20. package/lib/commonjs/contexts/fonts.js +29 -0
  21. package/lib/commonjs/contexts/fonts.js.map +1 -0
  22. package/lib/commonjs/contexts/root.js +40 -33
  23. package/lib/commonjs/contexts/root.js.map +1 -1
  24. package/lib/commonjs/hooks/index.js +22 -0
  25. package/lib/commonjs/hooks/index.js.map +1 -1
  26. package/lib/commonjs/hooks/useFadeIn.js +1 -1
  27. package/lib/commonjs/hooks/useFadeIn.js.map +1 -1
  28. package/lib/commonjs/hooks/useFont.js +26 -0
  29. package/lib/commonjs/hooks/useFont.js.map +1 -0
  30. package/lib/module/components/button/ActionButton.js +100 -35
  31. package/lib/module/components/button/ActionButton.js.map +1 -1
  32. package/lib/module/components/button/ButtonText.js +44 -0
  33. package/lib/module/components/button/ButtonText.js.map +1 -0
  34. package/lib/module/components/button/DeleteButton.js +29 -83
  35. package/lib/module/components/button/DeleteButton.js.map +1 -1
  36. package/lib/module/components/button/LoadingButton.js +10 -109
  37. package/lib/module/components/button/LoadingButton.js.map +1 -1
  38. package/lib/module/components/button/hooks.js +45 -0
  39. package/lib/module/components/button/hooks.js.map +1 -0
  40. package/lib/module/components/button/index.js +1 -0
  41. package/lib/module/components/button/index.js.map +1 -1
  42. package/lib/module/components/form/input/hooks/useInputStyles.js +3 -15
  43. package/lib/module/components/form/input/hooks/useInputStyles.js.map +1 -1
  44. package/lib/module/components/form/input/index.js +2 -0
  45. package/lib/module/components/form/input/index.js.map +1 -1
  46. package/lib/module/components/loading/CircularProgress.js.map +1 -1
  47. package/lib/module/components/loading/LoadingOverlay.js +8 -5
  48. package/lib/module/components/loading/LoadingOverlay.js.map +1 -1
  49. package/lib/module/contexts/fonts.js +20 -0
  50. package/lib/module/contexts/fonts.js.map +1 -0
  51. package/lib/module/contexts/root.js +41 -34
  52. package/lib/module/contexts/root.js.map +1 -1
  53. package/lib/module/hooks/index.js +2 -0
  54. package/lib/module/hooks/index.js.map +1 -1
  55. package/lib/module/hooks/useFadeIn.js +1 -1
  56. package/lib/module/hooks/useFadeIn.js.map +1 -1
  57. package/lib/module/hooks/useFont.js +19 -0
  58. package/lib/module/hooks/useFont.js.map +1 -0
  59. package/lib/typescript/components/button/ActionButton.d.ts +14 -5
  60. package/lib/typescript/components/button/ActionButton.d.ts.map +1 -1
  61. package/lib/typescript/components/button/ButtonText.d.ts +14 -0
  62. package/lib/typescript/components/button/ButtonText.d.ts.map +1 -0
  63. package/lib/typescript/components/button/DeleteButton.d.ts +4 -6
  64. package/lib/typescript/components/button/DeleteButton.d.ts.map +1 -1
  65. package/lib/typescript/components/button/LoadingButton.d.ts +4 -17
  66. package/lib/typescript/components/button/LoadingButton.d.ts.map +1 -1
  67. package/lib/typescript/components/button/hooks.d.ts +7 -0
  68. package/lib/typescript/components/button/hooks.d.ts.map +1 -0
  69. package/lib/typescript/components/button/index.d.ts +1 -0
  70. package/lib/typescript/components/button/index.d.ts.map +1 -1
  71. package/lib/typescript/components/form/input/hooks/useInputStyles.d.ts +0 -9
  72. package/lib/typescript/components/form/input/hooks/useInputStyles.d.ts.map +1 -1
  73. package/lib/typescript/components/form/input/index.d.ts +2 -0
  74. package/lib/typescript/components/form/input/index.d.ts.map +1 -1
  75. package/lib/typescript/components/loading/CircularProgress.d.ts +3 -2
  76. package/lib/typescript/components/loading/CircularProgress.d.ts.map +1 -1
  77. package/lib/typescript/components/loading/LoadingOverlay.d.ts +5 -2
  78. package/lib/typescript/components/loading/LoadingOverlay.d.ts.map +1 -1
  79. package/lib/typescript/contexts/fonts.d.ts +9 -0
  80. package/lib/typescript/contexts/fonts.d.ts.map +1 -0
  81. package/lib/typescript/contexts/root.d.ts +3 -2
  82. package/lib/typescript/contexts/root.d.ts.map +1 -1
  83. package/lib/typescript/hooks/index.d.ts +2 -0
  84. package/lib/typescript/hooks/index.d.ts.map +1 -1
  85. package/lib/typescript/hooks/useFont.d.ts +6 -0
  86. package/lib/typescript/hooks/useFont.d.ts.map +1 -0
  87. package/package.json +3 -3
  88. package/src/components/button/ActionButton.tsx +131 -45
  89. package/src/components/button/ButtonText.tsx +60 -0
  90. package/src/components/button/DeleteButton.tsx +50 -116
  91. package/src/components/button/LoadingButton.tsx +10 -156
  92. package/src/components/button/hooks.ts +66 -0
  93. package/src/components/button/index.ts +1 -0
  94. package/src/components/form/input/hooks/useInputStyles.ts +3 -16
  95. package/src/components/form/input/index.ts +2 -0
  96. package/src/components/loading/CircularProgress.tsx +7 -5
  97. package/src/components/loading/LoadingOverlay.tsx +13 -4
  98. package/src/contexts/fonts.tsx +23 -0
  99. package/src/contexts/root.tsx +64 -49
  100. package/src/hooks/index.ts +2 -0
  101. package/src/hooks/useFadeIn.ts +1 -1
  102. package/src/hooks/useFont.ts +25 -0
@@ -1,15 +1,21 @@
1
1
  import { BackendAdapterInterface, ColorMode, Theme } from '@chem-po/core'
2
- import { ChempoProps, ChempoProvider, useTheme } from '@chem-po/react'
2
+ import { ChempoProps, ChempoProvider, defaultTheme } from '@chem-po/react'
3
3
  import React, { FC, PropsWithChildren, useMemo } from 'react'
4
4
  import { GestureHandlerRootView } from 'react-native-gesture-handler'
5
5
  import { NotifierWrapper } from 'react-native-notifier'
6
- import { configureFonts, PaperProvider, Props as PaperProviderProps } from 'react-native-paper'
6
+ import {
7
+ configureFonts,
8
+ MD3TypescaleKey,
9
+ PaperProvider,
10
+ Props as PaperProviderProps,
11
+ } from 'react-native-paper'
7
12
  import { en, registerTranslation } from 'react-native-paper-dates'
8
- import { MD3Type, MD3TypescaleKey } from 'react-native-paper/lib/typescript/types'
13
+ import { MD3Type, MD3Typescale, ThemeProp } from 'react-native-paper/lib/typescript/types'
9
14
  import { SafeAreaProvider, useSafeAreaInsets } from 'react-native-safe-area-context'
10
15
  import { nativeToast } from '../constants/toast'
11
16
  import { UseThemeProps, useThemeState } from '../hooks/useThemeState'
12
17
  import { initializeScreen } from '../store/useScreen'
18
+ import { ChempoFontsProvider } from './fonts'
13
19
 
14
20
  registerTranslation('en', en)
15
21
 
@@ -25,13 +31,30 @@ export interface ChempoNativeProviderProps<BackendAdapter extends BackendAdapter
25
31
  insetNotifier?: boolean
26
32
  }
27
33
  const createPaperTheme = (
28
- theme: Theme,
29
- fonts: FontConfig | undefined,
34
+ themeConfig: Theme,
35
+ font: FontConfig | undefined,
30
36
  colorMode: ColorMode,
31
- ): PaperProviderProps['theme'] => {
32
- const { colors } = theme
33
-
34
- return {
37
+ ): { theme: PaperProviderProps['theme']; fonts: MD3Typescale } => {
38
+ const { colors } = themeConfig
39
+
40
+ const fonts = configureFonts({
41
+ config: {
42
+ ...font,
43
+ bodyLarge: {
44
+ fontSize: 18,
45
+ ...font?.bodyLarge,
46
+ },
47
+ bodyMedium: {
48
+ fontSize: 17,
49
+ ...font?.bodyMedium,
50
+ },
51
+ bodySmall: {
52
+ fontSize: 16,
53
+ ...font?.bodySmall,
54
+ },
55
+ },
56
+ })
57
+ const theme = {
35
58
  dark: colorMode === 'dark',
36
59
  colors: {
37
60
  primary: colors.accent[300],
@@ -86,45 +109,30 @@ const createPaperTheme = (
86
109
  animation: {
87
110
  scale: 1.0,
88
111
  },
89
- fonts: configureFonts({
90
- config: {
91
- ...fonts,
92
- bodyLarge: {
93
- fontSize: 18,
94
- ...fonts?.bodyLarge,
95
- },
96
- bodyMedium: {
97
- fontSize: 17,
98
- ...fonts?.bodyMedium,
99
- },
100
- bodySmall: {
101
- fontSize: 16,
102
- ...fonts?.bodySmall,
103
- },
104
- },
105
- }),
112
+ fonts,
106
113
  }
114
+ return { theme, fonts }
107
115
  }
108
116
 
109
- const ChempoPaperProvider = ({ children, fonts }: PropsWithChildren<{ fonts?: FontConfig }>) => {
110
- const { theme, colorMode } = useTheme()
111
-
112
- const paperTheme = useMemo(
113
- () => createPaperTheme(theme, fonts, colorMode),
114
- [theme, fonts, colorMode],
115
- )
117
+ const ChempoPaperProvider = ({
118
+ children,
119
+ paperTheme,
120
+ }: PropsWithChildren<{ paperTheme: ThemeProp | undefined }>) => {
116
121
  return <PaperProvider theme={paperTheme}>{children}</PaperProvider>
117
122
  }
118
123
 
119
124
  const ProviderBody = ({
120
125
  children,
121
- fonts,
122
126
  insetNotifier,
123
- }: PropsWithChildren<{ fonts?: FontConfig; insetNotifier?: boolean }>) => {
127
+ paperTheme,
128
+ }: PropsWithChildren<{
129
+ insetNotifier?: boolean
130
+ paperTheme: ThemeProp | undefined
131
+ }>) => {
124
132
  const { top } = useSafeAreaInsets()
125
133
 
126
134
  return (
127
- <ChempoPaperProvider fonts={fonts}>
135
+ <ChempoPaperProvider paperTheme={paperTheme}>
128
136
  <NotifierWrapper containerStyle={{ paddingTop: insetNotifier ? top : 0 }}>
129
137
  {children}
130
138
  </NotifierWrapper>
@@ -136,7 +144,7 @@ export const ChempoNativeProvider = <BackendAdapter extends BackendAdapterInterf
136
144
  theme: themeProp,
137
145
  initialColorMode,
138
146
  children,
139
- fonts,
147
+ fonts: fontConfig,
140
148
  colorModeProp,
141
149
  middlewareProvider: Middleware,
142
150
  insetNotifier,
@@ -148,23 +156,30 @@ export const ChempoNativeProvider = <BackendAdapter extends BackendAdapterInterf
148
156
  )
149
157
  const theme = useThemeState(useThemeProps)
150
158
 
159
+ const { theme: paperTheme, fonts } = useMemo(
160
+ () => createPaperTheme(theme.theme ?? defaultTheme, fontConfig, theme.colorMode),
161
+ [theme, fontConfig],
162
+ )
163
+
151
164
  const body = (
152
- <ProviderBody insetNotifier={insetNotifier} fonts={fonts}>
165
+ <ProviderBody insetNotifier={insetNotifier} paperTheme={paperTheme}>
153
166
  {children}
154
167
  </ProviderBody>
155
168
  )
156
169
 
157
170
  return (
158
- <ChempoProvider
159
- toast={nativeToast}
160
- theme={theme}
161
- initializeScreen={initializeScreen}
162
- {...props}>
163
- <SafeAreaProvider>
164
- <GestureHandlerRootView>
165
- {Middleware ? <Middleware>{body}</Middleware> : body}
166
- </GestureHandlerRootView>
167
- </SafeAreaProvider>
168
- </ChempoProvider>
171
+ <ChempoFontsProvider fonts={fonts}>
172
+ <ChempoProvider
173
+ toast={nativeToast}
174
+ theme={theme}
175
+ initializeScreen={initializeScreen}
176
+ {...props}>
177
+ <SafeAreaProvider>
178
+ <GestureHandlerRootView>
179
+ {Middleware ? <Middleware>{body}</Middleware> : body}
180
+ </GestureHandlerRootView>
181
+ </SafeAreaProvider>
182
+ </ChempoProvider>
183
+ </ChempoFontsProvider>
169
184
  )
170
185
  }
@@ -1 +1,3 @@
1
+ export * from './useFadeIn'
2
+ export * from './useFont'
1
3
  export * from './useThemeState'
@@ -24,7 +24,7 @@ export const useFadeIn = (active: boolean, opts?: FadeInOptions) => {
24
24
  enterDelay = 0,
25
25
  exitDelay = 0,
26
26
  } = opts ?? defaultFadeInOptions
27
- const opacity = useRef(new Animated.Value(0))
27
+ const opacity = useRef(new Animated.Value(active ? activeOpacity : inactiveOpacity))
28
28
 
29
29
  useEffect(() => {
30
30
  if (active) {
@@ -0,0 +1,25 @@
1
+ import { useChempoFonts } from '../contexts/fonts'
2
+
3
+ export type FontFamilyType = 'display' | 'body' | 'label' | 'headline' | 'title'
4
+ export type FontSize = 'lg' | 'md' | 'sm'
5
+ export type FontSizeKey = 'Small' | 'Medium' | 'Large'
6
+ export type FontKey = `${FontFamilyType}${FontSizeKey}`
7
+
8
+ const getFontKeySize = (fontSize: FontSize): FontSizeKey => {
9
+ switch (fontSize) {
10
+ case 'lg':
11
+ return 'Large'
12
+ case 'md':
13
+ return 'Medium'
14
+ default:
15
+ return 'Small'
16
+ }
17
+ }
18
+
19
+ const getFontKey = (fontFamily: FontFamilyType, fontSize: FontSize): FontKey =>
20
+ `${fontFamily}${getFontKeySize(fontSize)}`
21
+
22
+ export const useFont = (fontFamily: FontFamilyType, fontSize: FontSize) => {
23
+ const { fonts } = useChempoFonts()
24
+ return fonts[getFontKey(fontFamily, fontSize)]
25
+ }