@fluentui-react-native/framework-base 0.2.1 → 0.3.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 (187) hide show
  1. package/CHANGELOG.json +1 -1
  2. package/CHANGELOG.md +35 -2
  3. package/README.md +18 -1
  4. package/babel.config.js +1 -1
  5. package/jsx-runtime.js +1 -0
  6. package/lib/component-patterns/directComponent.d.ts +7 -0
  7. package/lib/component-patterns/directComponent.d.ts.map +1 -0
  8. package/lib/component-patterns/directComponent.js +8 -0
  9. package/lib/component-patterns/directComponent.js.map +1 -0
  10. package/lib/component-patterns/extract.d.ts +22 -0
  11. package/lib/component-patterns/extract.d.ts.map +1 -0
  12. package/lib/component-patterns/extract.js +25 -0
  13. package/lib/component-patterns/extract.js.map +1 -0
  14. package/lib/component-patterns/phasedComponent.d.ts +18 -0
  15. package/lib/component-patterns/phasedComponent.d.ts.map +1 -0
  16. package/lib/component-patterns/phasedComponent.js +51 -0
  17. package/lib/component-patterns/phasedComponent.js.map +1 -0
  18. package/lib/component-patterns/render.d.ts +9 -3
  19. package/lib/component-patterns/render.d.ts.map +1 -1
  20. package/lib/component-patterns/render.js +39 -32
  21. package/lib/component-patterns/render.js.map +1 -1
  22. package/lib/component-patterns/render.types.d.ts +60 -34
  23. package/lib/component-patterns/render.types.d.ts.map +1 -1
  24. package/lib/component-patterns/render.types.js +1 -1
  25. package/lib/component-patterns/stagedComponent.d.ts +3 -8
  26. package/lib/component-patterns/stagedComponent.d.ts.map +1 -1
  27. package/lib/component-patterns/stagedComponent.js +10 -27
  28. package/lib/component-patterns/stagedComponent.js.map +1 -1
  29. package/lib/component-patterns/withSlots.d.ts +6 -2
  30. package/lib/component-patterns/withSlots.d.ts.map +1 -1
  31. package/lib/component-patterns/withSlots.js +3 -3
  32. package/lib/component-patterns/withSlots.js.map +1 -1
  33. package/lib/immutable-merge/Merge.d.ts +6 -3
  34. package/lib/immutable-merge/Merge.js +79 -83
  35. package/lib/immutable-merge/Merge.js.map +1 -1
  36. package/lib/immutable-merge/Merge.test.d.ts +1 -1
  37. package/lib/immutable-merge/Merge.test.js +231 -219
  38. package/lib/immutable-merge/Merge.test.js.map +1 -1
  39. package/lib/index.d.ts +33 -5
  40. package/lib/index.d.ts.map +1 -1
  41. package/lib/index.js +13 -4
  42. package/lib/index.js.map +1 -1
  43. package/lib/jsx-namespace.d.ts +65 -0
  44. package/lib/jsx-namespace.d.ts.map +1 -0
  45. package/lib/jsx-namespace.js +2 -0
  46. package/lib/jsx-namespace.js.map +1 -0
  47. package/lib/jsx-runtime.d.ts +6 -4
  48. package/lib/jsx-runtime.d.ts.map +1 -1
  49. package/lib/jsx-runtime.js +9 -7
  50. package/lib/jsx-runtime.js.map +1 -1
  51. package/lib/memo-cache/getCacheEntry.d.ts +13 -13
  52. package/lib/memo-cache/getCacheEntry.js +20 -22
  53. package/lib/memo-cache/getCacheEntry.js.map +1 -1
  54. package/lib/memo-cache/getCacheEntry.test.d.ts +1 -1
  55. package/lib/memo-cache/getCacheEntry.test.js +90 -90
  56. package/lib/memo-cache/getCacheEntry.test.js.map +1 -1
  57. package/lib/memo-cache/getMemoCache.d.ts +1 -1
  58. package/lib/memo-cache/getMemoCache.js +11 -11
  59. package/lib/memo-cache/getMemoCache.js.map +1 -1
  60. package/lib/memo-cache/getMemoCache.test.d.ts +1 -1
  61. package/lib/memo-cache/getMemoCache.test.js +73 -73
  62. package/lib/memo-cache/getMemoCache.test.js.map +1 -1
  63. package/lib/memo-cache/memoize.d.ts +1 -1
  64. package/lib/memo-cache/memoize.js +9 -9
  65. package/lib/memo-cache/memoize.js.map +1 -1
  66. package/lib/memo-cache/memoize.test.d.ts +1 -1
  67. package/lib/memo-cache/memoize.test.js +36 -38
  68. package/lib/memo-cache/memoize.test.js.map +1 -1
  69. package/lib/merge-props/index.d.ts +1 -1
  70. package/lib/merge-props/index.js +1 -1
  71. package/lib/merge-props/mergeProps.d.ts +1 -1
  72. package/lib/merge-props/mergeProps.js +4 -4
  73. package/lib/merge-props/mergeProps.js.map +1 -1
  74. package/lib/merge-props/mergeStyles.d.ts +33 -4
  75. package/lib/merge-props/mergeStyles.d.ts.map +1 -1
  76. package/lib/merge-props/mergeStyles.js +16 -17
  77. package/lib/merge-props/mergeStyles.js.map +1 -1
  78. package/lib/merge-props/mergeStyles.test.d.ts +1 -1
  79. package/lib/merge-props/mergeStyles.test.js +75 -75
  80. package/lib/merge-props/mergeStyles.test.js.map +1 -1
  81. package/lib/merge-props/mergeStyles.types.d.ts +4 -4
  82. package/lib/merge-props/mergeStyles.types.d.ts.map +1 -1
  83. package/lib/merge-props/mergeStyles.types.js +1 -1
  84. package/lib/utilities/filterProps.d.ts +3 -0
  85. package/lib/utilities/filterProps.d.ts.map +1 -0
  86. package/lib/utilities/filterProps.js +12 -0
  87. package/lib/utilities/filterProps.js.map +1 -0
  88. package/lib-commonjs/component-patterns/directComponent.d.ts +7 -0
  89. package/lib-commonjs/component-patterns/directComponent.d.ts.map +1 -0
  90. package/lib-commonjs/component-patterns/directComponent.js +11 -0
  91. package/lib-commonjs/component-patterns/directComponent.js.map +1 -0
  92. package/lib-commonjs/component-patterns/extract.d.ts +22 -0
  93. package/lib-commonjs/component-patterns/extract.d.ts.map +1 -0
  94. package/lib-commonjs/component-patterns/extract.js +30 -0
  95. package/lib-commonjs/component-patterns/extract.js.map +1 -0
  96. package/lib-commonjs/component-patterns/phasedComponent.d.ts +18 -0
  97. package/lib-commonjs/component-patterns/phasedComponent.d.ts.map +1 -0
  98. package/lib-commonjs/component-patterns/phasedComponent.js +60 -0
  99. package/lib-commonjs/component-patterns/phasedComponent.js.map +1 -0
  100. package/lib-commonjs/component-patterns/render.d.ts +9 -3
  101. package/lib-commonjs/component-patterns/render.d.ts.map +1 -1
  102. package/lib-commonjs/component-patterns/render.js +101 -64
  103. package/lib-commonjs/component-patterns/render.js.map +1 -1
  104. package/lib-commonjs/component-patterns/render.types.d.ts +60 -34
  105. package/lib-commonjs/component-patterns/render.types.d.ts.map +1 -1
  106. package/lib-commonjs/component-patterns/render.types.js +3 -3
  107. package/lib-commonjs/component-patterns/stagedComponent.d.ts +3 -8
  108. package/lib-commonjs/component-patterns/stagedComponent.d.ts.map +1 -1
  109. package/lib-commonjs/component-patterns/stagedComponent.js +64 -56
  110. package/lib-commonjs/component-patterns/stagedComponent.js.map +1 -1
  111. package/lib-commonjs/component-patterns/withSlots.d.ts +6 -2
  112. package/lib-commonjs/component-patterns/withSlots.d.ts.map +1 -1
  113. package/lib-commonjs/component-patterns/withSlots.js +7 -8
  114. package/lib-commonjs/component-patterns/withSlots.js.map +1 -1
  115. package/lib-commonjs/immutable-merge/Merge.d.ts +6 -3
  116. package/lib-commonjs/immutable-merge/Merge.js +85 -90
  117. package/lib-commonjs/immutable-merge/Merge.js.map +1 -1
  118. package/lib-commonjs/immutable-merge/Merge.test.d.ts +1 -1
  119. package/lib-commonjs/immutable-merge/Merge.test.js +234 -222
  120. package/lib-commonjs/immutable-merge/Merge.test.js.map +1 -1
  121. package/lib-commonjs/index.d.ts +33 -5
  122. package/lib-commonjs/index.d.ts.map +1 -1
  123. package/lib-commonjs/index.js +184 -31
  124. package/lib-commonjs/index.js.map +1 -1
  125. package/lib-commonjs/jsx-namespace.d.ts +65 -0
  126. package/lib-commonjs/jsx-namespace.d.ts.map +1 -0
  127. package/lib-commonjs/jsx-namespace.js +3 -0
  128. package/lib-commonjs/jsx-namespace.js.map +1 -0
  129. package/lib-commonjs/jsx-runtime.d.ts +6 -4
  130. package/lib-commonjs/jsx-runtime.d.ts.map +1 -1
  131. package/lib-commonjs/jsx-runtime.js +69 -34
  132. package/lib-commonjs/jsx-runtime.js.map +1 -1
  133. package/lib-commonjs/memo-cache/getCacheEntry.d.ts +13 -13
  134. package/lib-commonjs/memo-cache/getCacheEntry.js +23 -26
  135. package/lib-commonjs/memo-cache/getCacheEntry.js.map +1 -1
  136. package/lib-commonjs/memo-cache/getCacheEntry.test.d.ts +1 -1
  137. package/lib-commonjs/memo-cache/getCacheEntry.test.js +93 -93
  138. package/lib-commonjs/memo-cache/getCacheEntry.test.js.map +1 -1
  139. package/lib-commonjs/memo-cache/getMemoCache.d.ts +1 -1
  140. package/lib-commonjs/memo-cache/getMemoCache.js +16 -17
  141. package/lib-commonjs/memo-cache/getMemoCache.js.map +1 -1
  142. package/lib-commonjs/memo-cache/getMemoCache.test.d.ts +1 -1
  143. package/lib-commonjs/memo-cache/getMemoCache.test.js +76 -76
  144. package/lib-commonjs/memo-cache/getMemoCache.test.js.map +1 -1
  145. package/lib-commonjs/memo-cache/memoize.d.ts +1 -1
  146. package/lib-commonjs/memo-cache/memoize.js +13 -14
  147. package/lib-commonjs/memo-cache/memoize.js.map +1 -1
  148. package/lib-commonjs/memo-cache/memoize.test.d.ts +1 -1
  149. package/lib-commonjs/memo-cache/memoize.test.js +39 -41
  150. package/lib-commonjs/memo-cache/memoize.test.js.map +1 -1
  151. package/lib-commonjs/merge-props/index.d.ts +1 -1
  152. package/lib-commonjs/merge-props/index.js +17 -7
  153. package/lib-commonjs/merge-props/index.js.map +1 -1
  154. package/lib-commonjs/merge-props/mergeProps.d.ts +1 -1
  155. package/lib-commonjs/merge-props/mergeProps.js +9 -10
  156. package/lib-commonjs/merge-props/mergeProps.js.map +1 -1
  157. package/lib-commonjs/merge-props/mergeStyles.d.ts +33 -4
  158. package/lib-commonjs/merge-props/mergeStyles.d.ts.map +1 -1
  159. package/lib-commonjs/merge-props/mergeStyles.js +23 -25
  160. package/lib-commonjs/merge-props/mergeStyles.js.map +1 -1
  161. package/lib-commonjs/merge-props/mergeStyles.test.d.ts +1 -1
  162. package/lib-commonjs/merge-props/mergeStyles.test.js +78 -78
  163. package/lib-commonjs/merge-props/mergeStyles.test.js.map +1 -1
  164. package/lib-commonjs/merge-props/mergeStyles.types.d.ts +4 -4
  165. package/lib-commonjs/merge-props/mergeStyles.types.d.ts.map +1 -1
  166. package/lib-commonjs/merge-props/mergeStyles.types.js +3 -3
  167. package/lib-commonjs/utilities/filterProps.d.ts +3 -0
  168. package/lib-commonjs/utilities/filterProps.d.ts.map +1 -0
  169. package/lib-commonjs/utilities/filterProps.js +15 -0
  170. package/lib-commonjs/utilities/filterProps.js.map +1 -0
  171. package/package.json +48 -26
  172. package/src/component-patterns/README.md +53 -16
  173. package/src/component-patterns/directComponent.ts +9 -0
  174. package/src/component-patterns/extract.ts +32 -0
  175. package/src/component-patterns/phasedComponent.ts +54 -0
  176. package/src/component-patterns/render.ts +21 -13
  177. package/src/component-patterns/render.types.ts +55 -30
  178. package/src/component-patterns/stagedComponent.ts +24 -0
  179. package/src/immutable-merge/Merge.test.ts +5 -1
  180. package/src/index.ts +27 -7
  181. package/src/jsx-namespace.ts +83 -0
  182. package/src/jsx-runtime.ts +8 -4
  183. package/src/memo-cache/README.md +1 -1
  184. package/src/merge-props/mergeStyles.ts +52 -4
  185. package/src/merge-props/mergeStyles.types.ts +2 -2
  186. package/src/utilities/filterProps.ts +14 -0
  187. package/src/component-patterns/stagedComponent.tsx +0 -45
@@ -9,8 +9,8 @@ import type { StyleProp } from './mergeStyles.types';
9
9
  *
10
10
  * @param style - StyleProp<TStyle> to flatten, this can be a TStyle or an array
11
11
  */
12
- export function flattenStyle(style: StyleProp<object>): object {
13
- return Array.isArray(style) ? immutableMerge(...style.map((v) => flattenStyle(v))) : style || {};
12
+ export function flattenStyle<T extends object>(style: StyleProp<T>): T {
13
+ return Array.isArray(style) ? immutableMerge<T>(...style.map((v) => flattenStyle(v))) : ((style || {}) as T);
14
14
  }
15
15
 
16
16
  /**
@@ -18,7 +18,25 @@ export function flattenStyle(style: StyleProp<object>): object {
18
18
  *
19
19
  * @param styles - array of styles to merge together. The styles will be flattened as part of the process
20
20
  */
21
- export function mergeAndFlattenStyles(...styles: StyleProp<object>[]): object | undefined {
21
+
22
+ // Overload for 2 arguments with potentially different types
23
+ export function mergeAndFlattenStyles<T1 extends object, T2 extends object>(
24
+ style1: StyleProp<T1>,
25
+ style2: StyleProp<T2>,
26
+ ): (T1 & T2) | undefined;
27
+
28
+ // Overload for 3 arguments with potentially different types
29
+ export function mergeAndFlattenStyles<T1 extends object, T2 extends object, T3 extends object>(
30
+ style1: StyleProp<T1>,
31
+ style2: StyleProp<T2>,
32
+ style3: StyleProp<T3>,
33
+ ): (T1 & T2 & T3) | undefined;
34
+
35
+ // General fallback for any number of arguments of the same type
36
+ export function mergeAndFlattenStyles<TStyle extends object>(...styles: StyleProp<any>[]): TStyle | undefined;
37
+
38
+ // Implementation
39
+ export function mergeAndFlattenStyles(...styles: StyleProp<any>[]): object | undefined {
22
40
  // baseline merge and flatten the objects
23
41
  return immutableMerge(
24
42
  ...styles.map((styleProp: StyleProp<object>) => {
@@ -29,7 +47,37 @@ export function mergeAndFlattenStyles(...styles: StyleProp<object>[]): object |
29
47
 
30
48
  const _styleCache = getMemoCache();
31
49
 
32
- export function mergeStyles(...styles: StyleProp<object>[]): object | undefined {
50
+ /**
51
+ * Function overloads to allow merging styles of different types.
52
+ * This is useful when merging token-based styles with React Native StyleProp types.
53
+ */
54
+
55
+ // Overload for 1 argument, forces flattening of sub arrays
56
+ export function mergeStyles<T1 extends object>(style1: StyleProp<T1>): T1 | undefined;
57
+
58
+ // Overload for 2 arguments with potentially different types
59
+ export function mergeStyles<T1 extends object, T2 extends object>(style1: StyleProp<T1>, style2: StyleProp<T2>): (T1 & T2) | undefined;
60
+
61
+ // Overload for 3 arguments with potentially different types
62
+ export function mergeStyles<T1 extends object, T2 extends object, T3 extends object>(
63
+ style1: StyleProp<T1>,
64
+ style2: StyleProp<T2>,
65
+ style3: StyleProp<T3>,
66
+ ): (T1 & T2 & T3) | undefined;
67
+
68
+ // Overload for 4 arguments with potentially different types
69
+ export function mergeStyles<T1 extends object, T2 extends object, T3 extends object, T4 extends object>(
70
+ style1: StyleProp<T1>,
71
+ style2: StyleProp<T2>,
72
+ style3: StyleProp<T3>,
73
+ style4: StyleProp<T4>,
74
+ ): (T1 & T2 & T3 & T4) | undefined;
75
+
76
+ // General fallback for any number of arguments of the same type
77
+ export function mergeStyles<TStyle extends object>(...styles: StyleProp<TStyle>[]): TStyle | undefined;
78
+
79
+ // Implementation
80
+ export function mergeStyles(...styles: StyleProp<any>[]): object | undefined {
33
81
  // filter the style set to just objects (which might be arrays or plain style objects)
34
82
  const inputs = styles.filter((s) => typeof s === 'object') as object[];
35
83
 
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * This is a copy of the react-native style prop type, copied here to avoid RN dependencies for web clients
3
3
  */
4
- type Falsy = undefined | null | false;
5
- type RecursiveArray<T> = (T | RecursiveArray<T>)[];
4
+ type Falsy = undefined | null | false | '' | 0;
5
+ type RecursiveArray<T> = readonly (T | RecursiveArray<T>)[] | (T | RecursiveArray<T>)[];
6
6
  /** Keep a brand of 'T' so that calls to `StyleSheet.flatten` can take `RegisteredStyle<T>` and return `T`. */
7
7
  type RegisteredStyle<T> = number & { __registeredStyleBrand: T };
8
8
 
@@ -0,0 +1,14 @@
1
+ import { mergeProps } from '../merge-props/mergeProps';
2
+
3
+ export type PropsFilter = (propName: string) => boolean;
4
+
5
+ export function filterProps<TProps>(props: TProps, filter?: PropsFilter): TProps {
6
+ if (filter && typeof props === 'object' && !Array.isArray(props)) {
7
+ const propsToRemove = filter ? Object.keys(props).filter((key) => !filter(key)) : undefined;
8
+ if (propsToRemove?.length > 0) {
9
+ const propsToRemoveObj = Object.fromEntries(propsToRemove.map((prop) => [prop, undefined])) as TProps;
10
+ return mergeProps<TProps>(props, propsToRemoveObj);
11
+ }
12
+ }
13
+ return props;
14
+ }
@@ -1,45 +0,0 @@
1
- /**
2
- * @jsxRuntime classic
3
- * @jsx withSlots
4
- */
5
- import * as React from 'react';
6
- import { withSlots } from './withSlots';
7
-
8
- import type { StagedComponent, TwoStageRender, StagedRender, ComposableFunction } from './render.types';
9
-
10
- function asArray<T>(val: T | T[]): T[] {
11
- return Array.isArray(val) ? val : [val];
12
- }
13
-
14
- /**
15
- * Take a staged render function and make a real component out of it
16
- *
17
- * @param staged - staged render function to wrap into a staged component
18
- * @param memo - optional flag to enable wrapping the created component in a React.memo HOC
19
- */
20
- export function stagedComponent<TProps>(staged: StagedRender<TProps>, memo?: boolean): ComposableFunction<TProps> {
21
- const component = (props: React.PropsWithChildren<TProps>) => {
22
- const { children, ...rest } = props;
23
- return staged(rest as TProps)({} as React.PropsWithChildren<TProps>, asArray(children));
24
- };
25
- const stagedComponent = memo ? React.memo(component) : component;
26
- Object.assign(stagedComponent, { _staged: staged });
27
- return stagedComponent as ComposableFunction<TProps>;
28
- }
29
-
30
- /**
31
- * Take a two stage render function and make a real component out of it, attaching the staged render function
32
- * so it can be split if used in that manner.
33
- * @param staged - two stage render function to wrap into a staged component
34
- */
35
- export function twoStageComponent<TProps>(staged: TwoStageRender<TProps>): StagedComponent<TProps> {
36
- return Object.assign(
37
- (props: React.PropsWithChildren<TProps>) => {
38
- const { children, ...outerProps } = props;
39
- const innerProps = { children } as React.PropsWithChildren<TProps>;
40
- const Inner = staged(outerProps as TProps);
41
- return <Inner {...innerProps} />;
42
- },
43
- { _twoStageRender: staged },
44
- );
45
- }