@contember/react-utils 1.3.0-alpha.8 → 2.0.0-alpha.1

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 (276) hide show
  1. package/dist/development/context/createContext.cjs +10 -0
  2. package/dist/development/context/createContext.cjs.map +1 -0
  3. package/dist/development/context/createContext.js +10 -0
  4. package/dist/development/context/createContext.js.map +1 -0
  5. package/dist/development/context/{createNonNullableContextFactory.cjs → createRequiredContext.cjs} +6 -5
  6. package/dist/development/context/createRequiredContext.cjs.map +1 -0
  7. package/dist/development/context/{createNonNullableContextFactory.js → createRequiredContext.js} +6 -5
  8. package/dist/development/context/createRequiredContext.js.map +1 -0
  9. package/dist/development/hooks/useAutoHeightTextArea.cjs +1 -1
  10. package/dist/development/hooks/useAutoHeightTextArea.cjs.map +1 -1
  11. package/dist/development/hooks/useAutoHeightTextArea.js +1 -1
  12. package/dist/development/hooks/useAutoHeightTextArea.js.map +1 -1
  13. package/dist/development/hooks/useStoredState.cjs +89 -12
  14. package/dist/development/hooks/useStoredState.cjs.map +1 -1
  15. package/dist/development/hooks/useStoredState.js +91 -14
  16. package/dist/development/hooks/useStoredState.js.map +1 -1
  17. package/dist/development/index.cjs +11 -41
  18. package/dist/development/index.cjs.map +1 -1
  19. package/dist/development/index.js +12 -42
  20. package/dist/development/index.js.map +1 -1
  21. package/dist/production/context/createContext.cjs +10 -0
  22. package/dist/production/context/createContext.cjs.map +1 -0
  23. package/dist/production/context/createContext.js +10 -0
  24. package/dist/production/context/createContext.js.map +1 -0
  25. package/dist/production/context/{createNonNullableContextFactory.cjs → createRequiredContext.cjs} +6 -5
  26. package/dist/production/context/createRequiredContext.cjs.map +1 -0
  27. package/dist/production/context/{createNonNullableContextFactory.js → createRequiredContext.js} +6 -5
  28. package/dist/production/context/createRequiredContext.js.map +1 -0
  29. package/dist/production/hooks/useAutoHeightTextArea.cjs +1 -1
  30. package/dist/production/hooks/useAutoHeightTextArea.cjs.map +1 -1
  31. package/dist/production/hooks/useAutoHeightTextArea.js +1 -1
  32. package/dist/production/hooks/useAutoHeightTextArea.js.map +1 -1
  33. package/dist/production/hooks/useStoredState.cjs +89 -12
  34. package/dist/production/hooks/useStoredState.cjs.map +1 -1
  35. package/dist/production/hooks/useStoredState.js +91 -14
  36. package/dist/production/hooks/useStoredState.js.map +1 -1
  37. package/dist/production/index.cjs +11 -41
  38. package/dist/production/index.cjs.map +1 -1
  39. package/dist/production/index.js +12 -42
  40. package/dist/production/index.js.map +1 -1
  41. package/dist/types/context/createContext.d.ts +3 -0
  42. package/dist/types/context/createContext.d.ts.map +1 -0
  43. package/dist/types/context/createRequiredContext.d.ts +3 -0
  44. package/dist/types/context/createRequiredContext.d.ts.map +1 -0
  45. package/dist/types/context/index.d.ts +2 -2
  46. package/dist/types/context/index.d.ts.map +1 -1
  47. package/dist/types/hooks/index.d.ts +0 -10
  48. package/dist/types/hooks/index.d.ts.map +1 -1
  49. package/dist/types/hooks/useArrayMapMemo.d.ts.map +1 -1
  50. package/dist/types/hooks/useConstantLengthInvariant.d.ts.map +1 -1
  51. package/dist/types/hooks/useConstantValueInvariant.d.ts.map +1 -1
  52. package/dist/types/hooks/useDebounce.d.ts.map +1 -1
  53. package/dist/types/hooks/useObjectMemo.d.ts.map +1 -1
  54. package/dist/types/hooks/usePreviousValue.d.ts.map +1 -1
  55. package/dist/types/hooks/useStoredState.d.ts +14 -1
  56. package/dist/types/hooks/useStoredState.d.ts.map +1 -1
  57. package/dist/types/index.d.ts +0 -1
  58. package/dist/types/index.d.ts.map +1 -1
  59. package/dist/types/referentiallyStable/identityFunction.d.ts.map +1 -1
  60. package/dist/types/referentiallyStable/useReferentiallyStableCallback.d.ts.map +1 -1
  61. package/dist/types/tsconfig.tsbuildinfo +1 -1
  62. package/package.json +3 -3
  63. package/src/context/createContext.ts +9 -0
  64. package/src/context/{createNonNullableContextFactory.ts → createRequiredContext.ts} +6 -4
  65. package/src/context/index.ts +2 -2
  66. package/src/hooks/index.ts +0 -10
  67. package/src/hooks/useAutoHeightTextArea.ts +1 -1
  68. package/src/hooks/useStoredState.ts +103 -14
  69. package/src/index.ts +0 -1
  70. package/dist/development/context/createNonNullableContextFactory.cjs.map +0 -1
  71. package/dist/development/context/createNonNullableContextFactory.js.map +0 -1
  72. package/dist/development/context/createOptionalContextFactory.cjs +0 -13
  73. package/dist/development/context/createOptionalContextFactory.cjs.map +0 -1
  74. package/dist/development/context/createOptionalContextFactory.js +0 -13
  75. package/dist/development/context/createOptionalContextFactory.js.map +0 -1
  76. package/dist/development/hooks/useAddClassNameDuringResize.cjs +0 -32
  77. package/dist/development/hooks/useAddClassNameDuringResize.cjs.map +0 -1
  78. package/dist/development/hooks/useAddClassNameDuringResize.js +0 -32
  79. package/dist/development/hooks/useAddClassNameDuringResize.js.map +0 -1
  80. package/dist/development/hooks/useCloseOnClickOutside.cjs +0 -25
  81. package/dist/development/hooks/useCloseOnClickOutside.cjs.map +0 -1
  82. package/dist/development/hooks/useCloseOnClickOutside.js +0 -25
  83. package/dist/development/hooks/useCloseOnClickOutside.js.map +0 -1
  84. package/dist/development/hooks/useCloseOnEscape.cjs +0 -20
  85. package/dist/development/hooks/useCloseOnEscape.cjs.map +0 -1
  86. package/dist/development/hooks/useCloseOnEscape.js +0 -20
  87. package/dist/development/hooks/useCloseOnEscape.js.map +0 -1
  88. package/dist/development/hooks/useContainerWidth.cjs +0 -14
  89. package/dist/development/hooks/useContainerWidth.cjs.map +0 -1
  90. package/dist/development/hooks/useContainerWidth.js +0 -14
  91. package/dist/development/hooks/useContainerWidth.js.map +0 -1
  92. package/dist/development/hooks/useElementSize.cjs +0 -37
  93. package/dist/development/hooks/useElementSize.cjs.map +0 -1
  94. package/dist/development/hooks/useElementSize.js +0 -37
  95. package/dist/development/hooks/useElementSize.js.map +0 -1
  96. package/dist/development/hooks/useElementTopOffset.cjs +0 -29
  97. package/dist/development/hooks/useElementTopOffset.cjs.map +0 -1
  98. package/dist/development/hooks/useElementTopOffset.js +0 -29
  99. package/dist/development/hooks/useElementTopOffset.js.map +0 -1
  100. package/dist/development/hooks/useEventHandler.cjs +0 -19
  101. package/dist/development/hooks/useEventHandler.cjs.map +0 -1
  102. package/dist/development/hooks/useEventHandler.js +0 -19
  103. package/dist/development/hooks/useEventHandler.js.map +0 -1
  104. package/dist/development/hooks/useOnElementMutation.cjs +0 -35
  105. package/dist/development/hooks/useOnElementMutation.cjs.map +0 -1
  106. package/dist/development/hooks/useOnElementMutation.js +0 -35
  107. package/dist/development/hooks/useOnElementMutation.js.map +0 -1
  108. package/dist/development/hooks/useOnScrollWithin.cjs +0 -52
  109. package/dist/development/hooks/useOnScrollWithin.cjs.map +0 -1
  110. package/dist/development/hooks/useOnScrollWithin.js +0 -52
  111. package/dist/development/hooks/useOnScrollWithin.js.map +0 -1
  112. package/dist/development/hooks/useScrollOffsets.cjs +0 -67
  113. package/dist/development/hooks/useScrollOffsets.cjs.map +0 -1
  114. package/dist/development/hooks/useScrollOffsets.js +0 -67
  115. package/dist/development/hooks/useScrollOffsets.js.map +0 -1
  116. package/dist/development/theming/ColorSchemeProvider.cjs +0 -16
  117. package/dist/development/theming/ColorSchemeProvider.cjs.map +0 -1
  118. package/dist/development/theming/ColorSchemeProvider.js +0 -16
  119. package/dist/development/theming/ColorSchemeProvider.js.map +0 -1
  120. package/dist/development/theming/GlobalClassNamePrefixContext.cjs +0 -6
  121. package/dist/development/theming/GlobalClassNamePrefixContext.cjs.map +0 -1
  122. package/dist/development/theming/GlobalClassNamePrefixContext.js +0 -6
  123. package/dist/development/theming/GlobalClassNamePrefixContext.js.map +0 -1
  124. package/dist/development/theming/contexts.cjs +0 -12
  125. package/dist/development/theming/contexts.cjs.map +0 -1
  126. package/dist/development/theming/contexts.js +0 -12
  127. package/dist/development/theming/contexts.js.map +0 -1
  128. package/dist/development/theming/useClassName.cjs +0 -17
  129. package/dist/development/theming/useClassName.cjs.map +0 -1
  130. package/dist/development/theming/useClassName.js +0 -17
  131. package/dist/development/theming/useClassName.js.map +0 -1
  132. package/dist/development/theming/useClassNameFactory.cjs +0 -22
  133. package/dist/development/theming/useClassNameFactory.cjs.map +0 -1
  134. package/dist/development/theming/useClassNameFactory.js +0 -22
  135. package/dist/development/theming/useClassNameFactory.js.map +0 -1
  136. package/dist/development/theming/useThemedClassName.cjs +0 -17
  137. package/dist/development/theming/useThemedClassName.cjs.map +0 -1
  138. package/dist/development/theming/useThemedClassName.js +0 -17
  139. package/dist/development/theming/useThemedClassName.js.map +0 -1
  140. package/dist/development/theming/useThemedClassNameFactory.cjs +0 -29
  141. package/dist/development/theming/useThemedClassNameFactory.cjs.map +0 -1
  142. package/dist/development/theming/useThemedClassNameFactory.js +0 -29
  143. package/dist/development/theming/useThemedClassNameFactory.js.map +0 -1
  144. package/dist/production/context/createNonNullableContextFactory.cjs.map +0 -1
  145. package/dist/production/context/createNonNullableContextFactory.js.map +0 -1
  146. package/dist/production/context/createOptionalContextFactory.cjs +0 -13
  147. package/dist/production/context/createOptionalContextFactory.cjs.map +0 -1
  148. package/dist/production/context/createOptionalContextFactory.js +0 -13
  149. package/dist/production/context/createOptionalContextFactory.js.map +0 -1
  150. package/dist/production/hooks/useAddClassNameDuringResize.cjs +0 -32
  151. package/dist/production/hooks/useAddClassNameDuringResize.cjs.map +0 -1
  152. package/dist/production/hooks/useAddClassNameDuringResize.js +0 -32
  153. package/dist/production/hooks/useAddClassNameDuringResize.js.map +0 -1
  154. package/dist/production/hooks/useCloseOnClickOutside.cjs +0 -25
  155. package/dist/production/hooks/useCloseOnClickOutside.cjs.map +0 -1
  156. package/dist/production/hooks/useCloseOnClickOutside.js +0 -25
  157. package/dist/production/hooks/useCloseOnClickOutside.js.map +0 -1
  158. package/dist/production/hooks/useCloseOnEscape.cjs +0 -20
  159. package/dist/production/hooks/useCloseOnEscape.cjs.map +0 -1
  160. package/dist/production/hooks/useCloseOnEscape.js +0 -20
  161. package/dist/production/hooks/useCloseOnEscape.js.map +0 -1
  162. package/dist/production/hooks/useContainerWidth.cjs +0 -14
  163. package/dist/production/hooks/useContainerWidth.cjs.map +0 -1
  164. package/dist/production/hooks/useContainerWidth.js +0 -14
  165. package/dist/production/hooks/useContainerWidth.js.map +0 -1
  166. package/dist/production/hooks/useElementSize.cjs +0 -37
  167. package/dist/production/hooks/useElementSize.cjs.map +0 -1
  168. package/dist/production/hooks/useElementSize.js +0 -37
  169. package/dist/production/hooks/useElementSize.js.map +0 -1
  170. package/dist/production/hooks/useElementTopOffset.cjs +0 -29
  171. package/dist/production/hooks/useElementTopOffset.cjs.map +0 -1
  172. package/dist/production/hooks/useElementTopOffset.js +0 -29
  173. package/dist/production/hooks/useElementTopOffset.js.map +0 -1
  174. package/dist/production/hooks/useEventHandler.cjs +0 -19
  175. package/dist/production/hooks/useEventHandler.cjs.map +0 -1
  176. package/dist/production/hooks/useEventHandler.js +0 -19
  177. package/dist/production/hooks/useEventHandler.js.map +0 -1
  178. package/dist/production/hooks/useOnElementMutation.cjs +0 -35
  179. package/dist/production/hooks/useOnElementMutation.cjs.map +0 -1
  180. package/dist/production/hooks/useOnElementMutation.js +0 -35
  181. package/dist/production/hooks/useOnElementMutation.js.map +0 -1
  182. package/dist/production/hooks/useOnScrollWithin.cjs +0 -52
  183. package/dist/production/hooks/useOnScrollWithin.cjs.map +0 -1
  184. package/dist/production/hooks/useOnScrollWithin.js +0 -52
  185. package/dist/production/hooks/useOnScrollWithin.js.map +0 -1
  186. package/dist/production/hooks/useScrollOffsets.cjs +0 -67
  187. package/dist/production/hooks/useScrollOffsets.cjs.map +0 -1
  188. package/dist/production/hooks/useScrollOffsets.js +0 -67
  189. package/dist/production/hooks/useScrollOffsets.js.map +0 -1
  190. package/dist/production/theming/ColorSchemeProvider.cjs +0 -12
  191. package/dist/production/theming/ColorSchemeProvider.cjs.map +0 -1
  192. package/dist/production/theming/ColorSchemeProvider.js +0 -12
  193. package/dist/production/theming/ColorSchemeProvider.js.map +0 -1
  194. package/dist/production/theming/GlobalClassNamePrefixContext.cjs +0 -6
  195. package/dist/production/theming/GlobalClassNamePrefixContext.cjs.map +0 -1
  196. package/dist/production/theming/GlobalClassNamePrefixContext.js +0 -6
  197. package/dist/production/theming/GlobalClassNamePrefixContext.js.map +0 -1
  198. package/dist/production/theming/contexts.cjs +0 -12
  199. package/dist/production/theming/contexts.cjs.map +0 -1
  200. package/dist/production/theming/contexts.js +0 -12
  201. package/dist/production/theming/contexts.js.map +0 -1
  202. package/dist/production/theming/useClassName.cjs +0 -17
  203. package/dist/production/theming/useClassName.cjs.map +0 -1
  204. package/dist/production/theming/useClassName.js +0 -17
  205. package/dist/production/theming/useClassName.js.map +0 -1
  206. package/dist/production/theming/useClassNameFactory.cjs +0 -22
  207. package/dist/production/theming/useClassNameFactory.cjs.map +0 -1
  208. package/dist/production/theming/useClassNameFactory.js +0 -22
  209. package/dist/production/theming/useClassNameFactory.js.map +0 -1
  210. package/dist/production/theming/useThemedClassName.cjs +0 -17
  211. package/dist/production/theming/useThemedClassName.cjs.map +0 -1
  212. package/dist/production/theming/useThemedClassName.js +0 -17
  213. package/dist/production/theming/useThemedClassName.js.map +0 -1
  214. package/dist/production/theming/useThemedClassNameFactory.cjs +0 -29
  215. package/dist/production/theming/useThemedClassNameFactory.cjs.map +0 -1
  216. package/dist/production/theming/useThemedClassNameFactory.js +0 -29
  217. package/dist/production/theming/useThemedClassNameFactory.js.map +0 -1
  218. package/dist/types/context/createNonNullableContextFactory.d.ts +0 -3
  219. package/dist/types/context/createNonNullableContextFactory.d.ts.map +0 -1
  220. package/dist/types/context/createOptionalContextFactory.d.ts +0 -3
  221. package/dist/types/context/createOptionalContextFactory.d.ts.map +0 -1
  222. package/dist/types/hooks/useAddClassNameDuringResize.d.ts +0 -13
  223. package/dist/types/hooks/useAddClassNameDuringResize.d.ts.map +0 -1
  224. package/dist/types/hooks/useCloseOnClickOutside.d.ts +0 -7
  225. package/dist/types/hooks/useCloseOnClickOutside.d.ts.map +0 -1
  226. package/dist/types/hooks/useCloseOnEscape.d.ts +0 -5
  227. package/dist/types/hooks/useCloseOnEscape.d.ts.map +0 -1
  228. package/dist/types/hooks/useContainerWidth.d.ts +0 -4
  229. package/dist/types/hooks/useContainerWidth.d.ts.map +0 -1
  230. package/dist/types/hooks/useElementSize.d.ts +0 -16
  231. package/dist/types/hooks/useElementSize.d.ts.map +0 -1
  232. package/dist/types/hooks/useElementTopOffset.d.ts +0 -3
  233. package/dist/types/hooks/useElementTopOffset.d.ts.map +0 -1
  234. package/dist/types/hooks/useEventHandler.d.ts +0 -10
  235. package/dist/types/hooks/useEventHandler.d.ts.map +0 -1
  236. package/dist/types/hooks/useOnElementMutation.d.ts +0 -3
  237. package/dist/types/hooks/useOnElementMutation.d.ts.map +0 -1
  238. package/dist/types/hooks/useOnScrollWithin.d.ts +0 -10
  239. package/dist/types/hooks/useOnScrollWithin.d.ts.map +0 -1
  240. package/dist/types/hooks/useScrollOffsets.d.ts +0 -14
  241. package/dist/types/hooks/useScrollOffsets.d.ts.map +0 -1
  242. package/dist/types/theming/ColorSchemeProvider.d.ts +0 -6
  243. package/dist/types/theming/ColorSchemeProvider.d.ts.map +0 -1
  244. package/dist/types/theming/GlobalClassNamePrefixContext.d.ts +0 -2
  245. package/dist/types/theming/GlobalClassNamePrefixContext.d.ts.map +0 -1
  246. package/dist/types/theming/contexts.d.ts +0 -12
  247. package/dist/types/theming/contexts.d.ts.map +0 -1
  248. package/dist/types/theming/index.d.ts +0 -8
  249. package/dist/types/theming/index.d.ts.map +0 -1
  250. package/dist/types/theming/useClassName.d.ts +0 -11
  251. package/dist/types/theming/useClassName.d.ts.map +0 -1
  252. package/dist/types/theming/useClassNameFactory.d.ts +0 -17
  253. package/dist/types/theming/useClassNameFactory.d.ts.map +0 -1
  254. package/dist/types/theming/useThemedClassName.d.ts +0 -39
  255. package/dist/types/theming/useThemedClassName.d.ts.map +0 -1
  256. package/dist/types/theming/useThemedClassNameFactory.d.ts +0 -3
  257. package/dist/types/theming/useThemedClassNameFactory.d.ts.map +0 -1
  258. package/src/context/createOptionalContextFactory.ts +0 -13
  259. package/src/hooks/useAddClassNameDuringResize.ts +0 -56
  260. package/src/hooks/useCloseOnClickOutside.ts +0 -27
  261. package/src/hooks/useCloseOnEscape.ts +0 -18
  262. package/src/hooks/useContainerWidth.ts +0 -13
  263. package/src/hooks/useElementSize.ts +0 -56
  264. package/src/hooks/useElementTopOffset.ts +0 -35
  265. package/src/hooks/useEventHandler.ts +0 -24
  266. package/src/hooks/useOnElementMutation.ts +0 -42
  267. package/src/hooks/useOnScrollWithin.ts +0 -68
  268. package/src/hooks/useScrollOffsets.ts +0 -87
  269. package/src/theming/ColorSchemeProvider.tsx +0 -16
  270. package/src/theming/GlobalClassNamePrefixContext.ts +0 -3
  271. package/src/theming/contexts.ts +0 -18
  272. package/src/theming/index.ts +0 -7
  273. package/src/theming/useClassName.ts +0 -28
  274. package/src/theming/useClassNameFactory.ts +0 -50
  275. package/src/theming/useThemedClassName.ts +0 -54
  276. package/src/theming/useThemedClassNameFactory.ts +0 -44
@@ -1,16 +0,0 @@
1
- import { memo } from 'react'
2
- import { ColorSchemeContext, useColorScheme } from './contexts'
3
-
4
- export type ColorSchemeProviderProps = {
5
- children: React.ReactNode
6
- scheme?: string
7
- }
8
-
9
- export const ColorSchemeProvider = memo(({ children, scheme }: ColorSchemeProviderProps) => {
10
- const inheritedColorScheme = useColorScheme()
11
-
12
- return (
13
- <ColorSchemeContext.Provider value={scheme ?? inheritedColorScheme}>{children}</ColorSchemeContext.Provider>
14
- )
15
- })
16
- ColorSchemeProvider.displayName = 'Interface.ColorSchemeProvider'
@@ -1,3 +0,0 @@
1
- import { createContext } from 'react'
2
-
3
- export const GlobalClassNamePrefixContext = createContext<string>('cui-')
@@ -1,18 +0,0 @@
1
- import { createOptionalContextFactory } from '../context'
2
-
3
- export const DEFAULT_COLOR_SCHEME = 'system'
4
-
5
-
6
- /**
7
- * @group UI
8
- *
9
- * @description
10
- * Provides the current color scheme, possible values are `'light'`, `'dark'` or `'system'`.
11
- *
12
- * @see https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme
13
- *
14
- */
15
- export const [ColorSchemeContext, useColorScheme] = createOptionalContextFactory<string>(
16
- 'Interface.ColorScheme',
17
- DEFAULT_COLOR_SCHEME,
18
- )
@@ -1,7 +0,0 @@
1
- export * from './ColorSchemeProvider'
2
- export * from './GlobalClassNamePrefixContext'
3
- export * from './contexts'
4
- export * from './useClassName'
5
- export * from './useClassNameFactory'
6
- export * from './useThemedClassName'
7
- export * from './useThemedClassNameFactory'
@@ -1,28 +0,0 @@
1
- import { NestedClassName, deduplicateClassName, flatClassNameList } from '@contember/utilities'
2
- import { useContext } from 'react'
3
- import { GlobalClassNamePrefixContext } from './GlobalClassNamePrefixContext'
4
-
5
- /**
6
- * Hook for component class name accepting outer class name
7
- *
8
- * @param componentClassName - Component class name
9
- * @param additionalClassName - Additional class name
10
- * @param prefixOverride - Context component prefix override
11
- * @returns Prefixed component class name.
12
- */
13
- export function useClassName (
14
- componentClassName: NestedClassName,
15
- additionalClassName: NestedClassName = null,
16
- prefixOverride?: string | null | undefined,
17
- ) {
18
- const contextPrefix = useContext(GlobalClassNamePrefixContext)
19
- const classNamePrefix: string = prefixOverride === null || prefixOverride === '' ? '' : prefixOverride || contextPrefix
20
-
21
- const componentClassNameList: string[] = flatClassNameList(componentClassName).map(
22
- componentClassName => `${classNamePrefix}${componentClassName}`,
23
- )
24
-
25
- return deduplicateClassName(componentClassNameList.concat(
26
- flatClassNameList(additionalClassName),
27
- )).join(' ')
28
- }
@@ -1,50 +0,0 @@
1
- import { NestedClassName, deduplicateClassName, flatClassNameList } from '@contember/utilities'
2
- import { useContext } from 'react'
3
- import { useReferentiallyStableCallback } from '../referentiallyStable'
4
- import { GlobalClassNamePrefixContext } from './GlobalClassNamePrefixContext'
5
-
6
- /**
7
- * Hook for component class name accepting outer class name
8
- *
9
- * Returns a reusable function almost that is handy for components
10
- * with many sub-component parts that should inherit the root component
11
- * name.
12
- *
13
- * Also, product of the factory is a function that can be used outside of rules of hooks.
14
- *
15
- * @param componentClassName - Component class name
16
- * @param glue - String to use to glue component and sub-component suffix
17
- * @param prefixOverride - Context component prefix override
18
- * @returns
19
- */
20
- export function useClassNameFactory(
21
- componentClassName: NestedClassName,
22
- glue: string | null = '-',
23
- prefixOverride?: string | null | undefined,
24
- ) {
25
- const contextPrefix = useContext(GlobalClassNamePrefixContext)
26
- const classNamePrefix: string = prefixOverride === null || prefixOverride === '' ? '' : prefixOverride || contextPrefix
27
-
28
- const componentClassNameList: string[] = flatClassNameList(componentClassName).map(
29
- componentClassName => `${classNamePrefix}${componentClassName}`,
30
- )
31
-
32
- function componentClassNameFor(
33
- suffix: string | null | undefined = null,
34
- additionalClassName: NestedClassName = null,
35
- ): string {
36
- const classNameSuffix: string = suffix ?? ''
37
-
38
- return deduplicateClassName((classNameSuffix
39
- ? (classNameSuffix.match(/^[a-zA-Z0-9]/)
40
- ? componentClassNameList.map(componentClassName => `${componentClassName}${glue}${classNameSuffix}`)
41
- : componentClassNameList.map(componentClassName => `${componentClassName}${classNameSuffix}`)
42
- )
43
- : componentClassNameList
44
- ).concat(
45
- flatClassNameList(additionalClassName),
46
- )).join(' ')
47
- }
48
-
49
- return useReferentiallyStableCallback(componentClassNameFor)
50
- }
@@ -1,54 +0,0 @@
1
- import { NestedClassName, colorSchemeClassName, filterThemedClassName } from '@contember/utilities'
2
- import { useColorScheme } from './contexts'
3
- import { useClassName } from './useClassName'
4
-
5
- /**
6
- * Hook for component class name accepting outer class name with theme-* and scheme-* class manes
7
- *
8
- * It looks for theme CSS classes in the given class name, deduplicates them and returns final theme class name with scheme CSS class set
9
- * @internal
10
- *
11
- * @param componentClassName - Component class name
12
- * @param additionalClassName - Additional class name
13
- * @param prefixOverride - Context component prefix override
14
- * @returns string
15
- * @see useColorScheme
16
- *
17
- * @example
18
- * ```tsx
19
- * function Button({ className }: { className?: string | string[] }) {
20
- * const [contentThemeClassName, controlsThemeClassName] = useThemedClassName(className)
21
- *
22
- * return (
23
- * <div className={contentThemeClassName}>
24
- * <button className={controlsThemeClassName}>Click me</button>
25
- * </div>
26
- * )
27
- * }
28
- *
29
- * function App() {
30
- * return (
31
- * <Button className="theme-default theme-danger:hover" />
32
- * )
33
- * }
34
- *
35
- * // renders:
36
- * // <div class="scheme-system theme-default-content theme-danger-content:hover">
37
- * // <button class="scheme-system theme-default-controls theme-danger-controls:hover">Click me</button>
38
- * // </div>
39
- * ```
40
- */
41
- export function useThemedClassName(
42
- componentClassName: NestedClassName,
43
- additionalClassName: NestedClassName,
44
- prefixOverride?: string | null | undefined,
45
- ): string {
46
- return useClassName(
47
- componentClassName,
48
- filterThemedClassName(
49
- additionalClassName,
50
- colorSchemeClassName(useColorScheme()),
51
- ),
52
- prefixOverride,
53
- )
54
- }
@@ -1,44 +0,0 @@
1
- import { NestedClassName, colorSchemeClassName, deduplicateClassName, filterThemedClassName, flatClassNameList } from '@contember/utilities'
2
- import { useContext } from 'react'
3
- import { useReferentiallyStableCallback } from '../referentiallyStable'
4
- import { GlobalClassNamePrefixContext } from './GlobalClassNamePrefixContext'
5
- import { useColorScheme } from './contexts'
6
-
7
- export function useThemedClassNameFactory(
8
- componentClassName: NestedClassName,
9
- glue: string | null = '-',
10
- prefixOverride?: string | null | undefined,
11
- ) {
12
- const contextPrefix = useContext(GlobalClassNamePrefixContext)
13
- const classNamePrefix: string = prefixOverride === null || prefixOverride === '' ? '' : prefixOverride || contextPrefix
14
-
15
- const componentClassNameList: string[] = flatClassNameList(componentClassName).map(
16
- componentClassName => `${classNamePrefix}${componentClassName}`,
17
- )
18
-
19
- const colorScheme = colorSchemeClassName(useColorScheme())
20
-
21
- function componentClassNameFor(
22
- suffix: string | null | undefined = null,
23
- additionalClassName: NestedClassName = null,
24
- ): string {
25
- const classNameSuffix: string = suffix ?? ''
26
-
27
- return deduplicateClassName((classNameSuffix
28
- ? (classNameSuffix.match(/^[a-zA-Z0-9]/)
29
- ? componentClassNameList.map(componentClassName => `${componentClassName}${glue}${classNameSuffix}`)
30
- : componentClassNameList.map(componentClassName => `${componentClassName}${classNameSuffix}`)
31
- )
32
- : componentClassNameList
33
- ).concat(
34
- flatClassNameList(
35
- filterThemedClassName(
36
- additionalClassName,
37
- colorScheme,
38
- ),
39
- ),
40
- )).join(' ')
41
- }
42
-
43
- return useReferentiallyStableCallback(componentClassNameFor)
44
- }