@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.
- package/CHANGELOG.json +1 -1
- package/CHANGELOG.md +35 -2
- package/README.md +18 -1
- package/babel.config.js +1 -1
- package/jsx-runtime.js +1 -0
- package/lib/component-patterns/directComponent.d.ts +7 -0
- package/lib/component-patterns/directComponent.d.ts.map +1 -0
- package/lib/component-patterns/directComponent.js +8 -0
- package/lib/component-patterns/directComponent.js.map +1 -0
- package/lib/component-patterns/extract.d.ts +22 -0
- package/lib/component-patterns/extract.d.ts.map +1 -0
- package/lib/component-patterns/extract.js +25 -0
- package/lib/component-patterns/extract.js.map +1 -0
- package/lib/component-patterns/phasedComponent.d.ts +18 -0
- package/lib/component-patterns/phasedComponent.d.ts.map +1 -0
- package/lib/component-patterns/phasedComponent.js +51 -0
- package/lib/component-patterns/phasedComponent.js.map +1 -0
- package/lib/component-patterns/render.d.ts +9 -3
- package/lib/component-patterns/render.d.ts.map +1 -1
- package/lib/component-patterns/render.js +39 -32
- package/lib/component-patterns/render.js.map +1 -1
- package/lib/component-patterns/render.types.d.ts +60 -34
- package/lib/component-patterns/render.types.d.ts.map +1 -1
- package/lib/component-patterns/render.types.js +1 -1
- package/lib/component-patterns/stagedComponent.d.ts +3 -8
- package/lib/component-patterns/stagedComponent.d.ts.map +1 -1
- package/lib/component-patterns/stagedComponent.js +10 -27
- package/lib/component-patterns/stagedComponent.js.map +1 -1
- package/lib/component-patterns/withSlots.d.ts +6 -2
- package/lib/component-patterns/withSlots.d.ts.map +1 -1
- package/lib/component-patterns/withSlots.js +3 -3
- package/lib/component-patterns/withSlots.js.map +1 -1
- package/lib/immutable-merge/Merge.d.ts +6 -3
- package/lib/immutable-merge/Merge.js +79 -83
- package/lib/immutable-merge/Merge.js.map +1 -1
- package/lib/immutable-merge/Merge.test.d.ts +1 -1
- package/lib/immutable-merge/Merge.test.js +231 -219
- package/lib/immutable-merge/Merge.test.js.map +1 -1
- package/lib/index.d.ts +33 -5
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +13 -4
- package/lib/index.js.map +1 -1
- package/lib/jsx-namespace.d.ts +65 -0
- package/lib/jsx-namespace.d.ts.map +1 -0
- package/lib/jsx-namespace.js +2 -0
- package/lib/jsx-namespace.js.map +1 -0
- package/lib/jsx-runtime.d.ts +6 -4
- package/lib/jsx-runtime.d.ts.map +1 -1
- package/lib/jsx-runtime.js +9 -7
- package/lib/jsx-runtime.js.map +1 -1
- package/lib/memo-cache/getCacheEntry.d.ts +13 -13
- package/lib/memo-cache/getCacheEntry.js +20 -22
- package/lib/memo-cache/getCacheEntry.js.map +1 -1
- package/lib/memo-cache/getCacheEntry.test.d.ts +1 -1
- package/lib/memo-cache/getCacheEntry.test.js +90 -90
- package/lib/memo-cache/getCacheEntry.test.js.map +1 -1
- package/lib/memo-cache/getMemoCache.d.ts +1 -1
- package/lib/memo-cache/getMemoCache.js +11 -11
- package/lib/memo-cache/getMemoCache.js.map +1 -1
- package/lib/memo-cache/getMemoCache.test.d.ts +1 -1
- package/lib/memo-cache/getMemoCache.test.js +73 -73
- package/lib/memo-cache/getMemoCache.test.js.map +1 -1
- package/lib/memo-cache/memoize.d.ts +1 -1
- package/lib/memo-cache/memoize.js +9 -9
- package/lib/memo-cache/memoize.js.map +1 -1
- package/lib/memo-cache/memoize.test.d.ts +1 -1
- package/lib/memo-cache/memoize.test.js +36 -38
- package/lib/memo-cache/memoize.test.js.map +1 -1
- package/lib/merge-props/index.d.ts +1 -1
- package/lib/merge-props/index.js +1 -1
- package/lib/merge-props/mergeProps.d.ts +1 -1
- package/lib/merge-props/mergeProps.js +4 -4
- package/lib/merge-props/mergeProps.js.map +1 -1
- package/lib/merge-props/mergeStyles.d.ts +33 -4
- package/lib/merge-props/mergeStyles.d.ts.map +1 -1
- package/lib/merge-props/mergeStyles.js +16 -17
- package/lib/merge-props/mergeStyles.js.map +1 -1
- package/lib/merge-props/mergeStyles.test.d.ts +1 -1
- package/lib/merge-props/mergeStyles.test.js +75 -75
- package/lib/merge-props/mergeStyles.test.js.map +1 -1
- package/lib/merge-props/mergeStyles.types.d.ts +4 -4
- package/lib/merge-props/mergeStyles.types.d.ts.map +1 -1
- package/lib/merge-props/mergeStyles.types.js +1 -1
- package/lib/utilities/filterProps.d.ts +3 -0
- package/lib/utilities/filterProps.d.ts.map +1 -0
- package/lib/utilities/filterProps.js +12 -0
- package/lib/utilities/filterProps.js.map +1 -0
- package/lib-commonjs/component-patterns/directComponent.d.ts +7 -0
- package/lib-commonjs/component-patterns/directComponent.d.ts.map +1 -0
- package/lib-commonjs/component-patterns/directComponent.js +11 -0
- package/lib-commonjs/component-patterns/directComponent.js.map +1 -0
- package/lib-commonjs/component-patterns/extract.d.ts +22 -0
- package/lib-commonjs/component-patterns/extract.d.ts.map +1 -0
- package/lib-commonjs/component-patterns/extract.js +30 -0
- package/lib-commonjs/component-patterns/extract.js.map +1 -0
- package/lib-commonjs/component-patterns/phasedComponent.d.ts +18 -0
- package/lib-commonjs/component-patterns/phasedComponent.d.ts.map +1 -0
- package/lib-commonjs/component-patterns/phasedComponent.js +60 -0
- package/lib-commonjs/component-patterns/phasedComponent.js.map +1 -0
- package/lib-commonjs/component-patterns/render.d.ts +9 -3
- package/lib-commonjs/component-patterns/render.d.ts.map +1 -1
- package/lib-commonjs/component-patterns/render.js +101 -64
- package/lib-commonjs/component-patterns/render.js.map +1 -1
- package/lib-commonjs/component-patterns/render.types.d.ts +60 -34
- package/lib-commonjs/component-patterns/render.types.d.ts.map +1 -1
- package/lib-commonjs/component-patterns/render.types.js +3 -3
- package/lib-commonjs/component-patterns/stagedComponent.d.ts +3 -8
- package/lib-commonjs/component-patterns/stagedComponent.d.ts.map +1 -1
- package/lib-commonjs/component-patterns/stagedComponent.js +64 -56
- package/lib-commonjs/component-patterns/stagedComponent.js.map +1 -1
- package/lib-commonjs/component-patterns/withSlots.d.ts +6 -2
- package/lib-commonjs/component-patterns/withSlots.d.ts.map +1 -1
- package/lib-commonjs/component-patterns/withSlots.js +7 -8
- package/lib-commonjs/component-patterns/withSlots.js.map +1 -1
- package/lib-commonjs/immutable-merge/Merge.d.ts +6 -3
- package/lib-commonjs/immutable-merge/Merge.js +85 -90
- package/lib-commonjs/immutable-merge/Merge.js.map +1 -1
- package/lib-commonjs/immutable-merge/Merge.test.d.ts +1 -1
- package/lib-commonjs/immutable-merge/Merge.test.js +234 -222
- package/lib-commonjs/immutable-merge/Merge.test.js.map +1 -1
- package/lib-commonjs/index.d.ts +33 -5
- package/lib-commonjs/index.d.ts.map +1 -1
- package/lib-commonjs/index.js +184 -31
- package/lib-commonjs/index.js.map +1 -1
- package/lib-commonjs/jsx-namespace.d.ts +65 -0
- package/lib-commonjs/jsx-namespace.d.ts.map +1 -0
- package/lib-commonjs/jsx-namespace.js +3 -0
- package/lib-commonjs/jsx-namespace.js.map +1 -0
- package/lib-commonjs/jsx-runtime.d.ts +6 -4
- package/lib-commonjs/jsx-runtime.d.ts.map +1 -1
- package/lib-commonjs/jsx-runtime.js +69 -34
- package/lib-commonjs/jsx-runtime.js.map +1 -1
- package/lib-commonjs/memo-cache/getCacheEntry.d.ts +13 -13
- package/lib-commonjs/memo-cache/getCacheEntry.js +23 -26
- package/lib-commonjs/memo-cache/getCacheEntry.js.map +1 -1
- package/lib-commonjs/memo-cache/getCacheEntry.test.d.ts +1 -1
- package/lib-commonjs/memo-cache/getCacheEntry.test.js +93 -93
- package/lib-commonjs/memo-cache/getCacheEntry.test.js.map +1 -1
- package/lib-commonjs/memo-cache/getMemoCache.d.ts +1 -1
- package/lib-commonjs/memo-cache/getMemoCache.js +16 -17
- package/lib-commonjs/memo-cache/getMemoCache.js.map +1 -1
- package/lib-commonjs/memo-cache/getMemoCache.test.d.ts +1 -1
- package/lib-commonjs/memo-cache/getMemoCache.test.js +76 -76
- package/lib-commonjs/memo-cache/getMemoCache.test.js.map +1 -1
- package/lib-commonjs/memo-cache/memoize.d.ts +1 -1
- package/lib-commonjs/memo-cache/memoize.js +13 -14
- package/lib-commonjs/memo-cache/memoize.js.map +1 -1
- package/lib-commonjs/memo-cache/memoize.test.d.ts +1 -1
- package/lib-commonjs/memo-cache/memoize.test.js +39 -41
- package/lib-commonjs/memo-cache/memoize.test.js.map +1 -1
- package/lib-commonjs/merge-props/index.d.ts +1 -1
- package/lib-commonjs/merge-props/index.js +17 -7
- package/lib-commonjs/merge-props/index.js.map +1 -1
- package/lib-commonjs/merge-props/mergeProps.d.ts +1 -1
- package/lib-commonjs/merge-props/mergeProps.js +9 -10
- package/lib-commonjs/merge-props/mergeProps.js.map +1 -1
- package/lib-commonjs/merge-props/mergeStyles.d.ts +33 -4
- package/lib-commonjs/merge-props/mergeStyles.d.ts.map +1 -1
- package/lib-commonjs/merge-props/mergeStyles.js +23 -25
- package/lib-commonjs/merge-props/mergeStyles.js.map +1 -1
- package/lib-commonjs/merge-props/mergeStyles.test.d.ts +1 -1
- package/lib-commonjs/merge-props/mergeStyles.test.js +78 -78
- package/lib-commonjs/merge-props/mergeStyles.test.js.map +1 -1
- package/lib-commonjs/merge-props/mergeStyles.types.d.ts +4 -4
- package/lib-commonjs/merge-props/mergeStyles.types.d.ts.map +1 -1
- package/lib-commonjs/merge-props/mergeStyles.types.js +3 -3
- package/lib-commonjs/utilities/filterProps.d.ts +3 -0
- package/lib-commonjs/utilities/filterProps.d.ts.map +1 -0
- package/lib-commonjs/utilities/filterProps.js +15 -0
- package/lib-commonjs/utilities/filterProps.js.map +1 -0
- package/package.json +48 -26
- package/src/component-patterns/README.md +53 -16
- package/src/component-patterns/directComponent.ts +9 -0
- package/src/component-patterns/extract.ts +32 -0
- package/src/component-patterns/phasedComponent.ts +54 -0
- package/src/component-patterns/render.ts +21 -13
- package/src/component-patterns/render.types.ts +55 -30
- package/src/component-patterns/stagedComponent.ts +24 -0
- package/src/immutable-merge/Merge.test.ts +5 -1
- package/src/index.ts +27 -7
- package/src/jsx-namespace.ts +83 -0
- package/src/jsx-runtime.ts +8 -4
- package/src/memo-cache/README.md +1 -1
- package/src/merge-props/mergeStyles.ts +52 -4
- package/src/merge-props/mergeStyles.types.ts +2 -2
- package/src/utilities/filterProps.ts +14 -0
- 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<
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
}
|