@fluentui-react-native/use-tokens 0.1.6
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 +200 -0
- package/CHANGELOG.md +53 -0
- package/README.md +85 -0
- package/babel.config.js +1 -0
- package/just.config.js +3 -0
- package/lib/applyPropsToTokens.d.ts +3 -0
- package/lib/applyPropsToTokens.d.ts.map +1 -0
- package/lib/applyPropsToTokens.js +28 -0
- package/lib/applyPropsToTokens.js.map +1 -0
- package/lib/applyPropsToTokens.test.d.ts +2 -0
- package/lib/applyPropsToTokens.test.d.ts.map +1 -0
- package/lib/applyPropsToTokens.test.js +30 -0
- package/lib/applyPropsToTokens.test.js.map +1 -0
- package/lib/applyTokenLayers.d.ts +16 -0
- package/lib/applyTokenLayers.d.ts.map +1 -0
- package/lib/applyTokenLayers.js +25 -0
- package/lib/applyTokenLayers.js.map +1 -0
- package/lib/applyTokenLayers.test.d.ts +2 -0
- package/lib/applyTokenLayers.test.d.ts.map +1 -0
- package/lib/applyTokenLayers.test.js +64 -0
- package/lib/applyTokenLayers.test.js.map +1 -0
- package/lib/buildUseTokens.d.ts +35 -0
- package/lib/buildUseTokens.d.ts.map +1 -0
- package/lib/buildUseTokens.js +62 -0
- package/lib/buildUseTokens.js.map +1 -0
- package/lib/buildUseTokens.test.d.ts +2 -0
- package/lib/buildUseTokens.test.d.ts.map +1 -0
- package/lib/buildUseTokens.test.js +103 -0
- package/lib/buildUseTokens.test.js.map +1 -0
- package/lib/customizable.d.ts +24 -0
- package/lib/customizable.d.ts.map +1 -0
- package/lib/customizable.js +22 -0
- package/lib/customizable.js.map +1 -0
- package/lib/index.d.ts +6 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +6 -0
- package/lib/index.js.map +1 -0
- package/lib/patchTokens.d.ts +12 -0
- package/lib/patchTokens.d.ts.map +1 -0
- package/lib/patchTokens.js +42 -0
- package/lib/patchTokens.js.map +1 -0
- package/lib/patchTokens.test.d.ts +2 -0
- package/lib/patchTokens.test.d.ts.map +1 -0
- package/lib/patchTokens.test.js +38 -0
- package/lib/patchTokens.test.js.map +1 -0
- package/lib/useTokens.samples.test.d.ts +2 -0
- package/lib/useTokens.samples.test.d.ts.map +1 -0
- package/lib/useTokens.samples.test.js +165 -0
- package/lib/useTokens.samples.test.js.map +1 -0
- package/lib-commonjs/applyPropsToTokens.d.ts +3 -0
- package/lib-commonjs/applyPropsToTokens.d.ts.map +1 -0
- package/lib-commonjs/applyPropsToTokens.js +31 -0
- package/lib-commonjs/applyPropsToTokens.js.map +1 -0
- package/lib-commonjs/applyPropsToTokens.test.d.ts +2 -0
- package/lib-commonjs/applyPropsToTokens.test.d.ts.map +1 -0
- package/lib-commonjs/applyPropsToTokens.test.js +32 -0
- package/lib-commonjs/applyPropsToTokens.test.js.map +1 -0
- package/lib-commonjs/applyTokenLayers.d.ts +16 -0
- package/lib-commonjs/applyTokenLayers.d.ts.map +1 -0
- package/lib-commonjs/applyTokenLayers.js +28 -0
- package/lib-commonjs/applyTokenLayers.js.map +1 -0
- package/lib-commonjs/applyTokenLayers.test.d.ts +2 -0
- package/lib-commonjs/applyTokenLayers.test.d.ts.map +1 -0
- package/lib-commonjs/applyTokenLayers.test.js +66 -0
- package/lib-commonjs/applyTokenLayers.test.js.map +1 -0
- package/lib-commonjs/buildUseTokens.d.ts +35 -0
- package/lib-commonjs/buildUseTokens.d.ts.map +1 -0
- package/lib-commonjs/buildUseTokens.js +65 -0
- package/lib-commonjs/buildUseTokens.js.map +1 -0
- package/lib-commonjs/buildUseTokens.test.d.ts +2 -0
- package/lib-commonjs/buildUseTokens.test.d.ts.map +1 -0
- package/lib-commonjs/buildUseTokens.test.js +105 -0
- package/lib-commonjs/buildUseTokens.test.js.map +1 -0
- package/lib-commonjs/customizable.d.ts +24 -0
- package/lib-commonjs/customizable.d.ts.map +1 -0
- package/lib-commonjs/customizable.js +25 -0
- package/lib-commonjs/customizable.js.map +1 -0
- package/lib-commonjs/index.d.ts +6 -0
- package/lib-commonjs/index.d.ts.map +1 -0
- package/lib-commonjs/index.js +11 -0
- package/lib-commonjs/index.js.map +1 -0
- package/lib-commonjs/patchTokens.d.ts +12 -0
- package/lib-commonjs/patchTokens.d.ts.map +1 -0
- package/lib-commonjs/patchTokens.js +45 -0
- package/lib-commonjs/patchTokens.js.map +1 -0
- package/lib-commonjs/patchTokens.test.d.ts +2 -0
- package/lib-commonjs/patchTokens.test.d.ts.map +1 -0
- package/lib-commonjs/patchTokens.test.js +40 -0
- package/lib-commonjs/patchTokens.test.js.map +1 -0
- package/lib-commonjs/useTokens.samples.test.d.ts +2 -0
- package/lib-commonjs/useTokens.samples.test.d.ts.map +1 -0
- package/lib-commonjs/useTokens.samples.test.js +177 -0
- package/lib-commonjs/useTokens.samples.test.js.map +1 -0
- package/package.json +41 -0
- package/src/__snapshots__/useTokens.samples.test.tsx.snap +163 -0
- package/src/applyPropsToTokens.test.ts +47 -0
- package/src/applyPropsToTokens.ts +15 -0
- package/src/applyTokenLayers.test.ts +67 -0
- package/src/applyTokenLayers.ts +40 -0
- package/src/buildUseTokens.test.ts +113 -0
- package/src/buildUseTokens.ts +89 -0
- package/src/customizable.ts +36 -0
- package/src/index.ts +5 -0
- package/src/patchTokens.test.ts +50 -0
- package/src/patchTokens.ts +30 -0
- package/src/useTokens.samples.test.tsx +219 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var applyPropsToTokens_1 = require("./applyPropsToTokens");
|
|
4
|
+
var memo_cache_1 = require("@fluentui-react-native/memo-cache");
|
|
5
|
+
var tokenProps = ['dos', 'quatro', 'cinco'];
|
|
6
|
+
var themeTokens = {
|
|
7
|
+
uno: 'uno',
|
|
8
|
+
dos: 'dos',
|
|
9
|
+
tres: 3,
|
|
10
|
+
quatro: 4,
|
|
11
|
+
cinco: true,
|
|
12
|
+
};
|
|
13
|
+
var props1 = { dos: 'two', quatro: 'four', cinco: false, foo: 'foo', bar: 'bar' };
|
|
14
|
+
// const props2: Props = { dos: 'two' };
|
|
15
|
+
// const props3: Props = { foo: 'foo', bar: 'bar' };
|
|
16
|
+
describe('applyPropsToTokens tests', function () {
|
|
17
|
+
test('props get copied', function () {
|
|
18
|
+
var cache = memo_cache_1.getMemoCache();
|
|
19
|
+
var tokens = applyPropsToTokens_1.applyPropsToTokens(props1, themeTokens, cache, tokenProps)[0];
|
|
20
|
+
expect(tokens).not.toBe(themeTokens);
|
|
21
|
+
for (var _i = 0, tokenProps_1 = tokenProps; _i < tokenProps_1.length; _i++) {
|
|
22
|
+
var key = tokenProps_1[_i];
|
|
23
|
+
expect(tokens[key]).toEqual(props1[key]);
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
test('no copied props does not change tokens', function () {
|
|
27
|
+
var cache = memo_cache_1.getMemoCache();
|
|
28
|
+
var tokens = applyPropsToTokens_1.applyPropsToTokens({}, themeTokens, cache, tokenProps)[0];
|
|
29
|
+
expect(tokens).toBe(themeTokens);
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
//# sourceMappingURL=applyPropsToTokens.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"applyPropsToTokens.test.js","sourceRoot":"","sources":["../src/applyPropsToTokens.test.ts"],"names":[],"mappings":";;AAAA,2DAA0D;AAC1D,gEAAiE;AAWjE,IAAM,UAAU,GAAyB,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AAOpE,IAAM,WAAW,GAAW;IAC1B,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,IAAI;CACZ,CAAC;AAEF,IAAM,MAAM,GAAU,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;AAC3F,wCAAwC;AACxC,oDAAoD;AAEpD,QAAQ,CAAC,0BAA0B,EAAE;IACnC,IAAI,CAAC,kBAAkB,EAAE;QACvB,IAAM,KAAK,GAAG,yBAAY,EAAE,CAAC;QACtB,IAAA,2FAAM,CAA+D;QAC5E,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACrC,KAAkB,UAAU,EAAV,yBAAU,EAAV,wBAAU,EAAV,IAAU,EAAE;YAAzB,IAAM,GAAG,mBAAA;YACZ,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;SAC1C;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,wCAAwC,EAAE;QAC7C,IAAM,KAAK,GAAG,yBAAY,EAAE,CAAC;QACtB,IAAA,uFAAM,CAA2D;QACxE,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { GetMemoValue } from '@fluentui-react-native/memo-cache';
|
|
2
|
+
/**
|
|
3
|
+
* alternatively look them up with a passed in function
|
|
4
|
+
*/
|
|
5
|
+
export declare type HasLayer = (name: string) => boolean;
|
|
6
|
+
/**
|
|
7
|
+
* Apply token layers, building them up applied layer by applied layer, using the cache to store intermediate
|
|
8
|
+
* values
|
|
9
|
+
*
|
|
10
|
+
* @param tokens - input tokens which may have layers to apply
|
|
11
|
+
* @param states - array of states to check for, ordered by precedence
|
|
12
|
+
* @param subCache - cache scoped to the root object with no layers applied
|
|
13
|
+
* @param hasLayer - a function which returns whether a given layer should be applied
|
|
14
|
+
*/
|
|
15
|
+
export declare function applyTokenLayers<TTokens>(tokens: TTokens, states: string[], subCache: GetMemoValue<TTokens>, hasLayer: HasLayer): [TTokens, GetMemoValue<TTokens>];
|
|
16
|
+
//# sourceMappingURL=applyTokenLayers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"applyTokenLayers.d.ts","sourceRoot":"","sources":["../src/applyTokenLayers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAGjE;;GAEG;AACH,oBAAY,QAAQ,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;AAEjD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EACtC,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,MAAM,EAAE,EAChB,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC,EAC/B,QAAQ,EAAE,QAAQ,GACjB,CAAC,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,CAiBlC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var immutable_merge_1 = require("@fluentui-react-native/immutable-merge");
|
|
4
|
+
/**
|
|
5
|
+
* Apply token layers, building them up applied layer by applied layer, using the cache to store intermediate
|
|
6
|
+
* values
|
|
7
|
+
*
|
|
8
|
+
* @param tokens - input tokens which may have layers to apply
|
|
9
|
+
* @param states - array of states to check for, ordered by precedence
|
|
10
|
+
* @param subCache - cache scoped to the root object with no layers applied
|
|
11
|
+
* @param hasLayer - a function which returns whether a given layer should be applied
|
|
12
|
+
*/
|
|
13
|
+
function applyTokenLayers(tokens, states, subCache, hasLayer) {
|
|
14
|
+
var final = { tokens: tokens, subCache: subCache };
|
|
15
|
+
if (states && states.length > 0) {
|
|
16
|
+
// now walk the overrides that are set, merging in props, caching results, and getting a new sub cache
|
|
17
|
+
final = states
|
|
18
|
+
.filter(function (val) { return hasLayer(val); })
|
|
19
|
+
.reduce(function (previous, layerName) {
|
|
20
|
+
var layer = previous.tokens[layerName];
|
|
21
|
+
var _a = previous.subCache(function () { return (layer && typeof layer === 'object' ? immutable_merge_1.immutableMerge(previous.tokens, layer) : previous.tokens); }, [layer]), tokens = _a[0], subCache = _a[1];
|
|
22
|
+
return { tokens: tokens, subCache: subCache };
|
|
23
|
+
}, final);
|
|
24
|
+
}
|
|
25
|
+
return [final.tokens, final.subCache];
|
|
26
|
+
}
|
|
27
|
+
exports.applyTokenLayers = applyTokenLayers;
|
|
28
|
+
//# sourceMappingURL=applyTokenLayers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"applyTokenLayers.js","sourceRoot":"","sources":["../src/applyTokenLayers.ts"],"names":[],"mappings":";;AACA,0EAAwE;AAOxE;;;;;;;;GAQG;AACH,SAAgB,gBAAgB,CAC9B,MAAe,EACf,MAAgB,EAChB,QAA+B,EAC/B,QAAkB;IAGlB,IAAI,KAAK,GAAmB,EAAE,MAAM,QAAA,EAAE,QAAQ,UAAA,EAAE,CAAC;IACjD,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;QAC/B,sGAAsG;QACtG,KAAK,GAAG,MAAM;aACX,MAAM,CAAC,UAAC,GAAG,IAAK,OAAA,QAAQ,CAAC,GAAG,CAAC,EAAb,CAAa,CAAC;aAC9B,MAAM,CAAC,UAAC,QAAwB,EAAE,SAAiB;YAClD,IAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACnC,IAAA,0KAGL,EAHM,cAAM,EAAE,gBAGd,CAAC;YACF,OAAO,EAAE,MAAM,QAAA,EAAE,QAAQ,UAAA,EAAE,CAAC;QAC9B,CAAC,EAAE,KAAK,CAAC,CAAC;KACb;IACD,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;AACxC,CAAC;AAtBD,4CAsBC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"applyTokenLayers.test.d.ts","sourceRoot":"","sources":["../src/applyTokenLayers.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
var applyTokenLayers_1 = require("./applyTokenLayers");
|
|
15
|
+
var memo_cache_1 = require("@fluentui-react-native/memo-cache");
|
|
16
|
+
var stateOrder = ['hover', 'press', 'disabled'];
|
|
17
|
+
var tokens1 = {
|
|
18
|
+
a: 'a',
|
|
19
|
+
b: 'b',
|
|
20
|
+
c: 'c',
|
|
21
|
+
hover: {
|
|
22
|
+
a: 'a-hover',
|
|
23
|
+
b: 'b-hover',
|
|
24
|
+
press: {
|
|
25
|
+
a: 'a-hover-press',
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
press: {
|
|
29
|
+
a: 'a-press',
|
|
30
|
+
b: 'b-press',
|
|
31
|
+
},
|
|
32
|
+
disabled: {
|
|
33
|
+
a: 'disabled',
|
|
34
|
+
b: 'disabled',
|
|
35
|
+
c: 'disabled',
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
function stripLayers(tokens) {
|
|
39
|
+
var t = __assign({}, tokens);
|
|
40
|
+
delete t.hover;
|
|
41
|
+
delete t.press;
|
|
42
|
+
delete t.disabled;
|
|
43
|
+
return t;
|
|
44
|
+
}
|
|
45
|
+
describe('applyLayers tests', function () {
|
|
46
|
+
test('no layers returns tokens', function () {
|
|
47
|
+
var cache = memo_cache_1.getMemoCache();
|
|
48
|
+
var tokens = applyTokenLayers_1.applyTokenLayers(tokens1, stateOrder, cache, function () { return false; })[0];
|
|
49
|
+
expect(tokens).toBe(tokens1);
|
|
50
|
+
});
|
|
51
|
+
test('apply hover works', function () {
|
|
52
|
+
var cache = memo_cache_1.getMemoCache();
|
|
53
|
+
var lookup = function (layer) { return layer === 'hover'; };
|
|
54
|
+
var result1 = applyTokenLayers_1.applyTokenLayers(tokens1, stateOrder, cache, lookup)[0];
|
|
55
|
+
expect(applyTokenLayers_1.applyTokenLayers(tokens1, stateOrder, cache, lookup)[0]).toBe(result1);
|
|
56
|
+
expect(stripLayers(result1)).toEqual({ a: 'a-hover', b: 'b-hover', c: 'c' });
|
|
57
|
+
});
|
|
58
|
+
test('apply hover and press layer correctly', function () {
|
|
59
|
+
var cache = memo_cache_1.getMemoCache();
|
|
60
|
+
var lookup = function (layer) { return layer === 'hover' || layer === 'press'; };
|
|
61
|
+
var result1 = applyTokenLayers_1.applyTokenLayers(tokens1, stateOrder, cache, lookup)[0];
|
|
62
|
+
expect(applyTokenLayers_1.applyTokenLayers(tokens1, stateOrder, cache, lookup)[0]).toBe(result1);
|
|
63
|
+
expect(stripLayers(result1)).toEqual({ a: 'a-hover-press', b: 'b-press', c: 'c' });
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
//# sourceMappingURL=applyTokenLayers.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"applyTokenLayers.test.js","sourceRoot":"","sources":["../src/applyTokenLayers.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,uDAAsD;AACtD,gEAAiE;AAWjE,IAAM,UAAU,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;AAElD,IAAM,OAAO,GAAW;IACtB,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,CAAC,EAAE,GAAG;IACN,KAAK,EAAE;QACL,CAAC,EAAE,SAAS;QACZ,CAAC,EAAE,SAAS;QACZ,KAAK,EAAE;YACL,CAAC,EAAE,eAAe;SACnB;KACF;IACD,KAAK,EAAE;QACL,CAAC,EAAE,SAAS;QACZ,CAAC,EAAE,SAAS;KACb;IACD,QAAQ,EAAE;QACR,CAAC,EAAE,UAAU;QACb,CAAC,EAAE,UAAU;QACb,CAAC,EAAE,UAAU;KACd;CACF,CAAC;AAEF,SAAS,WAAW,CAAC,MAAc;IACjC,IAAM,CAAC,gBAAQ,MAAM,CAAE,CAAC;IACxB,OAAO,CAAC,CAAC,KAAK,CAAC;IACf,OAAO,CAAC,CAAC,KAAK,CAAC;IACf,OAAO,CAAC,CAAC,QAAQ,CAAC;IAClB,OAAO,CAAC,CAAC;AACX,CAAC;AAED,QAAQ,CAAC,mBAAmB,EAAE;IAC5B,IAAI,CAAC,0BAA0B,EAAE;QAC/B,IAAM,KAAK,GAAG,yBAAY,EAAE,CAAC;QAC7B,IAAM,MAAM,GAAG,mCAAgB,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,cAAM,OAAA,KAAK,EAAL,CAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5E,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,mBAAmB,EAAE;QACxB,IAAM,KAAK,GAAG,yBAAY,EAAE,CAAC;QAC7B,IAAM,MAAM,GAAG,UAAC,KAAK,IAAK,OAAA,KAAK,KAAK,OAAO,EAAjB,CAAiB,CAAC;QAC5C,IAAM,OAAO,GAAG,mCAAgB,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,MAAM,CAAC,mCAAgB,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9E,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,uCAAuC,EAAE;QAC5C,IAAM,KAAK,GAAG,yBAAY,EAAE,CAAC;QAC7B,IAAM,MAAM,GAAG,UAAC,KAAK,IAAK,OAAA,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,OAAO,EAAtC,CAAsC,CAAC;QACjE,IAAM,OAAO,GAAG,mCAAgB,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,MAAM,CAAC,mCAAgB,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9E,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IACrF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { GetMemoValue } from '@fluentui-react-native/memo-cache';
|
|
2
|
+
/** A function to generate tokens based on a theme */
|
|
3
|
+
export declare type TokensFromTheme<TTokens, TTheme> = (theme: TTheme) => TTokens;
|
|
4
|
+
/**
|
|
5
|
+
* Types of tokens, can be:
|
|
6
|
+
* - string - will lookup the name in the theme
|
|
7
|
+
* - Tokens - will merge the tokens in directly
|
|
8
|
+
* - Function - will run against the theme once for each unique theme encountered
|
|
9
|
+
*/
|
|
10
|
+
export declare type TokenSettings<TTokens, TTheme> = string | TTokens | TokensFromTheme<TTokens, TTheme>;
|
|
11
|
+
/**
|
|
12
|
+
* The main signature of a useTokens hook is to take the theme and produce a set of resolved tokens,
|
|
13
|
+
* as well as a sub-cache, specific to this particular theme, that can be used for caching various styles
|
|
14
|
+
* or values that are theme specific
|
|
15
|
+
*/
|
|
16
|
+
export declare type UseTokensCore<TTokens, TTheme> = (theme: TTheme) => [TTokens, GetMemoValue<TTokens>];
|
|
17
|
+
/**
|
|
18
|
+
* The full signature also includes a customize function that returns an updated version of useTokens
|
|
19
|
+
* that captures both the previous values, and layers in the new values specified
|
|
20
|
+
*/
|
|
21
|
+
export declare type UseTokens<TTokens, TTheme> = UseTokensCore<TTokens, TTheme> & {
|
|
22
|
+
customize: (...tokens: TokenSettings<TTokens, TTheme>[]) => UseTokens<TTokens, TTheme>;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Helper function that knows how to try to look up token information from the theme
|
|
26
|
+
*/
|
|
27
|
+
export declare type GetComponentInfo<TTokens, TTheme> = (theme: TTheme, name: string) => TTokens | TokensFromTheme<TTokens, TTheme>;
|
|
28
|
+
/**
|
|
29
|
+
* Construct a useStyling hook which returns styled slot props based on props and tokens defined in options and in the theme
|
|
30
|
+
*
|
|
31
|
+
* @param options - options which drive behavior for the generated styling hook
|
|
32
|
+
* @param themeHelper - injected theme functionality
|
|
33
|
+
*/
|
|
34
|
+
export declare function buildUseTokens<TTokens, TTheme>(getComponentInfo: GetComponentInfo<TTokens, TTheme> | undefined, ...tokens: TokenSettings<TTokens, TTheme>[]): UseTokens<TTokens, TTheme>;
|
|
35
|
+
//# sourceMappingURL=buildUseTokens.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildUseTokens.d.ts","sourceRoot":"","sources":["../src/buildUseTokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAG/E,qDAAqD;AACrD,oBAAY,eAAe,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;AAE1E;;;;;GAKG;AACH,oBAAY,aAAa,CAAC,OAAO,EAAE,MAAM,IAAI,MAAM,GAAG,OAAO,GAAG,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAEjG;;;;GAIG;AACH,oBAAY,aAAa,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE,MAAM,KAAK,CAAC,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;AAEjG;;;GAGG;AACH,oBAAY,SAAS,CAAC,OAAO,EAAE,MAAM,IAAI,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG;IACxE,SAAS,EAAE,CAAC,GAAG,MAAM,EAAE,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,KAAK,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;CACxF,CAAC;AAEF;;GAEG;AACH,oBAAY,gBAAgB,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,GAAG,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AA6B5H;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAC5C,gBAAgB,EAAE,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,SAAS,EAC/D,GAAG,MAAM,EAAE,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,GAC1C,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAkB5B"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __spreadArrays = (this && this.__spreadArrays) || function () {
|
|
3
|
+
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
|
|
4
|
+
for (var r = Array(s), k = 0, i = 0; i < il; i++)
|
|
5
|
+
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
|
|
6
|
+
r[k] = a[j];
|
|
7
|
+
return r;
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
var memo_cache_1 = require("@fluentui-react-native/memo-cache");
|
|
11
|
+
var immutable_merge_1 = require("@fluentui-react-native/immutable-merge");
|
|
12
|
+
/**
|
|
13
|
+
* Tokens are defined as either:
|
|
14
|
+
* TTokens - an object
|
|
15
|
+
* string - a name to look up in the theme
|
|
16
|
+
* function - a function to run against the theme to produce tokens
|
|
17
|
+
*
|
|
18
|
+
* This function maps any of these types into a specific TTokens object. A string is first lookup up in the theme, returning a function
|
|
19
|
+
* or object. If the type is a function this will be invoked with the theme to generate the tokens object.
|
|
20
|
+
*
|
|
21
|
+
* @param tokenEntry - token entry to start with
|
|
22
|
+
* @param theme - theme to use for queries
|
|
23
|
+
* @param getComponentInfo - helper to use to lookup the component in the theme
|
|
24
|
+
*/
|
|
25
|
+
function mapToTokens(tokenEntry, theme, getComponentInfo) {
|
|
26
|
+
if (typeof tokenEntry === 'string') {
|
|
27
|
+
tokenEntry = (getComponentInfo && getComponentInfo(theme, tokenEntry)) || {};
|
|
28
|
+
}
|
|
29
|
+
if (typeof tokenEntry === 'function') {
|
|
30
|
+
tokenEntry = tokenEntry(theme);
|
|
31
|
+
}
|
|
32
|
+
return tokenEntry;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Construct a useStyling hook which returns styled slot props based on props and tokens defined in options and in the theme
|
|
36
|
+
*
|
|
37
|
+
* @param options - options which drive behavior for the generated styling hook
|
|
38
|
+
* @param themeHelper - injected theme functionality
|
|
39
|
+
*/
|
|
40
|
+
function buildUseTokens(getComponentInfo) {
|
|
41
|
+
var tokens = [];
|
|
42
|
+
for (var _i = 1; _i < arguments.length; _i++) {
|
|
43
|
+
tokens[_i - 1] = arguments[_i];
|
|
44
|
+
}
|
|
45
|
+
// create a cache instance for use in this particular call to buildUseTokens
|
|
46
|
+
var cache = memo_cache_1.getMemoCache();
|
|
47
|
+
// the core function simply merges layers together, looking up component definitions in the theme as well as executing any
|
|
48
|
+
// theme functions. This turns the tokens into an array of token objects that then get merged together
|
|
49
|
+
var useTokensCore = function (theme) {
|
|
50
|
+
// get the base styles all merged together, these will only depend on internal tokens and theme
|
|
51
|
+
return cache(function () { return immutable_merge_1.immutableMerge.apply(void 0, tokens.map(function (value) { return mapToTokens(value, theme, getComponentInfo); })); }, [theme]);
|
|
52
|
+
};
|
|
53
|
+
// attach a customize function to generate a new use
|
|
54
|
+
useTokensCore.customize = function () {
|
|
55
|
+
var newTokens = [];
|
|
56
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
57
|
+
newTokens[_i] = arguments[_i];
|
|
58
|
+
}
|
|
59
|
+
var mergedTokens = __spreadArrays(tokens, newTokens);
|
|
60
|
+
return buildUseTokens.apply(void 0, __spreadArrays([getComponentInfo], mergedTokens));
|
|
61
|
+
};
|
|
62
|
+
return useTokensCore;
|
|
63
|
+
}
|
|
64
|
+
exports.buildUseTokens = buildUseTokens;
|
|
65
|
+
//# sourceMappingURL=buildUseTokens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildUseTokens.js","sourceRoot":"","sources":["../src/buildUseTokens.ts"],"names":[],"mappings":";;;;;;;;;AAAA,gEAA+E;AAC/E,0EAAwE;AAiCxE;;;;;;;;;;;;GAYG;AACH,SAAS,WAAW,CAClB,UAA+D,EAC/D,KAAa,EACb,gBAA+D;IAE/D,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;QAClC,UAAU,GAAG,CAAC,gBAAgB,IAAK,gBAAgB,CAAC,KAAK,EAAE,UAAU,CAAa,CAAC,IAAK,EAAc,CAAC;KACxG;IACD,IAAI,OAAO,UAAU,KAAK,UAAU,EAAE;QACpC,UAAU,GAAI,UAA+C,CAAC,KAAK,CAAC,CAAC;KACtE;IACD,OAAO,UAA+B,CAAC;AACzC,CAAC;AAED;;;;;GAKG;AACH,SAAgB,cAAc,CAC5B,gBAA+D;IAC/D,gBAA2C;SAA3C,UAA2C,EAA3C,qBAA2C,EAA3C,IAA2C;QAA3C,+BAA2C;;IAE3C,4EAA4E;IAC5E,IAAM,KAAK,GAAG,yBAAY,EAAE,CAAC;IAE7B,0HAA0H;IAC1H,sGAAsG;IACtG,IAAM,aAAa,GAAG,UAAC,KAAa;QAClC,+FAA+F;QAC/F,OAAO,KAAK,CAAC,cAAM,OAAA,gCAAc,eAAI,MAAM,CAAC,GAAG,CAAC,UAAC,KAAK,IAAK,OAAA,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,gBAAgB,CAAC,EAA3C,CAA2C,CAAC,GAApF,CAAqF,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IACrH,CAAC,CAAC;IAEF,oDAAoD;IACpD,aAAa,CAAC,SAAS,GAAG;QAAC,mBAA8C;aAA9C,UAA8C,EAA9C,qBAA8C,EAA9C,IAA8C;YAA9C,8BAA8C;;QACvE,IAAM,YAAY,kBAAO,MAAM,EAAK,SAAS,CAAC,CAAC;QAC/C,OAAO,cAAc,+BAAkB,gBAAgB,GAAK,YAAY,GAAE;IAC5E,CAAC,CAAC;IAEF,OAAO,aAAa,CAAC;AACvB,CAAC;AArBD,wCAqBC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildUseTokens.test.d.ts","sourceRoot":"","sources":["../src/buildUseTokens.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __spreadArrays = (this && this.__spreadArrays) || function () {
|
|
14
|
+
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
|
|
15
|
+
for (var r = Array(s), k = 0, i = 0; i < il; i++)
|
|
16
|
+
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
|
|
17
|
+
r[k] = a[j];
|
|
18
|
+
return r;
|
|
19
|
+
};
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
var buildUseTokens_1 = require("./buildUseTokens");
|
|
22
|
+
var baseTokens = {
|
|
23
|
+
a: 'a-base',
|
|
24
|
+
b: 'b-base',
|
|
25
|
+
c: 'c-base',
|
|
26
|
+
hover: {
|
|
27
|
+
c: 'c-base-hover',
|
|
28
|
+
},
|
|
29
|
+
press: {
|
|
30
|
+
c: 'c-base-press',
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
var defaultTheme = {
|
|
34
|
+
vals: {
|
|
35
|
+
foo: 'foo',
|
|
36
|
+
bar: 'bar',
|
|
37
|
+
},
|
|
38
|
+
components: {
|
|
39
|
+
uno: {
|
|
40
|
+
a: 'uno-a',
|
|
41
|
+
c: 'uno-c',
|
|
42
|
+
},
|
|
43
|
+
dos: {
|
|
44
|
+
b: 'dos-b',
|
|
45
|
+
c: 'dos-c',
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
var variantTheme = {
|
|
50
|
+
vals: {
|
|
51
|
+
foo: 'variant',
|
|
52
|
+
},
|
|
53
|
+
components: {},
|
|
54
|
+
};
|
|
55
|
+
var getComponentInfo = function (theme, name) { return theme.components[name]; };
|
|
56
|
+
var componentTokens = [baseTokens, 'uno', function (theme) { return ({ b: theme.vals.foo }); }];
|
|
57
|
+
var resolvedTokens = {
|
|
58
|
+
a: 'uno-a',
|
|
59
|
+
b: 'foo',
|
|
60
|
+
c: 'uno-c',
|
|
61
|
+
hover: {
|
|
62
|
+
c: 'c-base-hover',
|
|
63
|
+
},
|
|
64
|
+
press: {
|
|
65
|
+
c: 'c-base-press',
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
var variantTokens = {
|
|
69
|
+
a: 'a-base',
|
|
70
|
+
b: 'variant',
|
|
71
|
+
c: 'c-base',
|
|
72
|
+
hover: {
|
|
73
|
+
c: 'c-base-hover',
|
|
74
|
+
},
|
|
75
|
+
press: {
|
|
76
|
+
c: 'c-base-press',
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
describe('buildUseTokens test suite', function () {
|
|
80
|
+
test('basic built hook', function () {
|
|
81
|
+
var useTokens = buildUseTokens_1.buildUseTokens.apply(void 0, __spreadArrays([getComponentInfo], componentTokens));
|
|
82
|
+
var tokens = useTokens(defaultTheme)[0];
|
|
83
|
+
expect(tokens).toEqual(resolvedTokens);
|
|
84
|
+
});
|
|
85
|
+
test('multiple calls return same object', function () {
|
|
86
|
+
var useTokens = buildUseTokens_1.buildUseTokens.apply(void 0, __spreadArrays([getComponentInfo], componentTokens));
|
|
87
|
+
var tokens1 = useTokens(defaultTheme)[0];
|
|
88
|
+
var tokens2 = useTokens(defaultTheme)[0];
|
|
89
|
+
expect(tokens1).toBe(tokens2);
|
|
90
|
+
});
|
|
91
|
+
test('variant theme is separate', function () {
|
|
92
|
+
var useTokens = buildUseTokens_1.buildUseTokens.apply(void 0, __spreadArrays([getComponentInfo], componentTokens));
|
|
93
|
+
var tokensDefault = useTokens(defaultTheme)[0];
|
|
94
|
+
var tokensVariant = useTokens(variantTheme)[0];
|
|
95
|
+
expect(tokensVariant).not.toBe(tokensDefault);
|
|
96
|
+
expect(tokensVariant).toEqual(variantTokens);
|
|
97
|
+
});
|
|
98
|
+
test('simple customization layers on top', function () {
|
|
99
|
+
var useTokens = buildUseTokens_1.buildUseTokens.apply(void 0, __spreadArrays([getComponentInfo], componentTokens));
|
|
100
|
+
var useTokensCustom = useTokens.customize({ a: 'custom' });
|
|
101
|
+
var tokens = useTokensCustom(defaultTheme)[0];
|
|
102
|
+
expect(tokens).toEqual(__assign(__assign({}, resolvedTokens), { a: 'custom' }));
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
//# sourceMappingURL=buildUseTokens.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildUseTokens.test.js","sourceRoot":"","sources":["../src/buildUseTokens.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { TokenSettings, UseTokens } from './buildUseTokens';
|
|
3
|
+
/**
|
|
4
|
+
* A component implementation, with a use tokens hook passed in. Implementing it this way allows the useTokens hook to be
|
|
5
|
+
* modified by the customization handler
|
|
6
|
+
*/
|
|
7
|
+
export declare type InjectableComponent<TProps, TTokens, TTheme> = (props: TProps, useTokens: UseTokens<TTokens, TTheme>) => JSX.Element | null;
|
|
8
|
+
/**
|
|
9
|
+
* A component with an attached customize function, used to create alternatively styled versions of the component
|
|
10
|
+
*/
|
|
11
|
+
export declare type CustomizableComponent<TProps, TTokens, TTheme> = React.FunctionComponent<TProps> & {
|
|
12
|
+
customize: (...tokens: TokenSettings<TTokens, TTheme>[]) => CustomizableComponent<TProps, TTokens, TTheme>;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Function helper for easily creating a customizable component based on the useTokens hook
|
|
16
|
+
*
|
|
17
|
+
* @param injectable - a function component implementation, written in (props, useTokens) => JSX.Element form
|
|
18
|
+
* @param useTokens - a hook function, generally built via buildUseTokens, used to retrieve design tokens for the component
|
|
19
|
+
*
|
|
20
|
+
* @returns - a function component that has a static function called customize attached. Customize will return a
|
|
21
|
+
* new component (which can also be customized)
|
|
22
|
+
*/
|
|
23
|
+
export declare function customizable<TProps, TTokens, TTheme>(injectable: InjectableComponent<TProps, TTokens, TTheme>, useTokens: UseTokens<TTokens, TTheme>): CustomizableComponent<TProps, TTokens, TTheme>;
|
|
24
|
+
//# sourceMappingURL=customizable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"customizable.d.ts","sourceRoot":"","sources":["../src/customizable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE5D;;;GAGG;AACH,oBAAY,mBAAmB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC;AAExI;;GAEG;AACH,oBAAY,qBAAqB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,GAAG;IAC7F,SAAS,EAAE,CAAC,GAAG,MAAM,EAAE,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,KAAK,qBAAqB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;CAC5G,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAClD,UAAU,EAAE,mBAAmB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,EACxD,SAAS,EAAE,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,GACpC,qBAAqB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAOhD"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
/**
|
|
4
|
+
* Function helper for easily creating a customizable component based on the useTokens hook
|
|
5
|
+
*
|
|
6
|
+
* @param injectable - a function component implementation, written in (props, useTokens) => JSX.Element form
|
|
7
|
+
* @param useTokens - a hook function, generally built via buildUseTokens, used to retrieve design tokens for the component
|
|
8
|
+
*
|
|
9
|
+
* @returns - a function component that has a static function called customize attached. Customize will return a
|
|
10
|
+
* new component (which can also be customized)
|
|
11
|
+
*/
|
|
12
|
+
function customizable(injectable, useTokens) {
|
|
13
|
+
var component = function (props) { return injectable(props, useTokens); };
|
|
14
|
+
component.customize = function () {
|
|
15
|
+
var tokens = [];
|
|
16
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
17
|
+
tokens[_i] = arguments[_i];
|
|
18
|
+
}
|
|
19
|
+
var useTokensNew = useTokens.customize.apply(useTokens, tokens);
|
|
20
|
+
return customizable(injectable, useTokensNew);
|
|
21
|
+
};
|
|
22
|
+
return component;
|
|
23
|
+
}
|
|
24
|
+
exports.customizable = customizable;
|
|
25
|
+
//# sourceMappingURL=customizable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"customizable.js","sourceRoot":"","sources":["../src/customizable.ts"],"names":[],"mappings":";;AAgBA;;;;;;;;GAQG;AACH,SAAgB,YAAY,CAC1B,UAAwD,EACxD,SAAqC;IAErC,IAAM,SAAS,GAAG,UAAC,KAAa,IAAK,OAAA,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC,EAA5B,CAA4B,CAAC;IAClE,SAAS,CAAC,SAAS,GAAG;QAAC,gBAA2C;aAA3C,UAA2C,EAA3C,qBAA2C,EAA3C,IAA2C;YAA3C,2BAA2C;;QAChE,IAAM,YAAY,GAAG,SAAS,CAAC,SAAS,OAAnB,SAAS,EAAc,MAAM,CAAC,CAAC;QACpD,OAAO,YAAY,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IAChD,CAAC,CAAC;IACF,OAAO,SAAS,CAAC;AACnB,CAAC;AAVD,oCAUC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
function __export(m) {
|
|
3
|
+
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
|
|
4
|
+
}
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
__export(require("./applyPropsToTokens"));
|
|
7
|
+
__export(require("./applyTokenLayers"));
|
|
8
|
+
__export(require("./buildUseTokens"));
|
|
9
|
+
__export(require("./customizable"));
|
|
10
|
+
__export(require("./patchTokens"));
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;AAAA,0CAAqC;AACrC,wCAAmC;AACnC,sCAAiC;AACjC,oCAA+B;AAC/B,mCAA8B"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { GetMemoValue } from '@fluentui-react-native/memo-cache';
|
|
2
|
+
/**
|
|
3
|
+
* Take a set of tokens (and a memo-cache) and apply changes to those tokens from an additional set of tokens. Only keys which are
|
|
4
|
+
* not undefined will be applied and if no changes are detected the token object will be unchanged.
|
|
5
|
+
*
|
|
6
|
+
* @param tokens - base set of tokens to apply changes to, this will not be modified
|
|
7
|
+
* @param cache - cache corresponding to this set of tokens
|
|
8
|
+
* @param patchValues - new values to apply, values will be obtained via keys in the object
|
|
9
|
+
* @returns - a tuple consisting of a new tokens object and a new memo-cache
|
|
10
|
+
*/
|
|
11
|
+
export declare function patchTokens<TTokens>(tokens: TTokens, cache: GetMemoValue<TTokens>, patchValues: TTokens): [TTokens, GetMemoValue<TTokens>];
|
|
12
|
+
//# sourceMappingURL=patchTokens.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patchTokens.d.ts","sourceRoot":"","sources":["../src/patchTokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAEjE;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,OAAO,EACjC,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,EAC5B,WAAW,EAAE,OAAO,GACnB,CAAC,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,CAclC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
/**
|
|
15
|
+
* Take a set of tokens (and a memo-cache) and apply changes to those tokens from an additional set of tokens. Only keys which are
|
|
16
|
+
* not undefined will be applied and if no changes are detected the token object will be unchanged.
|
|
17
|
+
*
|
|
18
|
+
* @param tokens - base set of tokens to apply changes to, this will not be modified
|
|
19
|
+
* @param cache - cache corresponding to this set of tokens
|
|
20
|
+
* @param patchValues - new values to apply, values will be obtained via keys in the object
|
|
21
|
+
* @returns - a tuple consisting of a new tokens object and a new memo-cache
|
|
22
|
+
*/
|
|
23
|
+
function patchTokens(tokens, cache, patchValues) {
|
|
24
|
+
// reduce the patch values to the set of keys that are defined, and sort them to ensure consistent ordering
|
|
25
|
+
var keys = Object.keys(patchValues)
|
|
26
|
+
.filter(function (v) { return patchValues[v] !== undefined; })
|
|
27
|
+
.sort();
|
|
28
|
+
var _loop_1 = function (key) {
|
|
29
|
+
var _a;
|
|
30
|
+
_a = cache(function () {
|
|
31
|
+
var _a;
|
|
32
|
+
return (__assign(__assign({}, tokens), (_a = {}, _a[key] = patchValues[key], _a)));
|
|
33
|
+
}, [key, patchValues[key]]), tokens = _a[0], cache = _a[1];
|
|
34
|
+
};
|
|
35
|
+
// for each key get an updated tokens collection based on key + value. Value alone isn't sufficient as the values
|
|
36
|
+
// are not necessarily unique. i.e. { a: 'blue' } and { b: 'blue' } would cache to the same without the key
|
|
37
|
+
for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {
|
|
38
|
+
var key = keys_1[_i];
|
|
39
|
+
_loop_1(key);
|
|
40
|
+
}
|
|
41
|
+
// return the updated tokens and cache (if there were any keys applied)
|
|
42
|
+
return [tokens, cache];
|
|
43
|
+
}
|
|
44
|
+
exports.patchTokens = patchTokens;
|
|
45
|
+
//# sourceMappingURL=patchTokens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patchTokens.js","sourceRoot":"","sources":["../src/patchTokens.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAEA;;;;;;;;GAQG;AACH,SAAgB,WAAW,CACzB,MAAe,EACf,KAA4B,EAC5B,WAAoB;IAEpB,2GAA2G;IAC3G,IAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;SAClC,MAAM,CAAC,UAAC,CAAC,IAAK,OAAA,WAAW,CAAC,CAAC,CAAC,KAAK,SAAS,EAA5B,CAA4B,CAAC;SAC3C,IAAI,EAAE,CAAC;4BAIC,GAAG;;QACZ;;;mCAAgG,EAA/F,cAAM,EAAE,aAAK,CAAmF;;IAHnG,iHAAiH;IACjH,2GAA2G;IAC3G,KAAkB,UAAI,EAAJ,aAAI,EAAJ,kBAAI,EAAJ,IAAI;QAAjB,IAAM,GAAG,aAAA;gBAAH,GAAG;KAEb;IAED,uEAAuE;IACvE,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACzB,CAAC;AAlBD,kCAkBC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patchTokens.test.d.ts","sourceRoot":"","sources":["../src/patchTokens.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var patchTokens_1 = require("./patchTokens");
|
|
4
|
+
var memo_cache_1 = require("@fluentui-react-native/memo-cache");
|
|
5
|
+
var themeTokens = {
|
|
6
|
+
uno: 'uno',
|
|
7
|
+
dos: 'dos',
|
|
8
|
+
tres: 3,
|
|
9
|
+
quatro: 4,
|
|
10
|
+
cinco: true,
|
|
11
|
+
};
|
|
12
|
+
describe('patchTokens tests', function () {
|
|
13
|
+
test('props get copied', function () {
|
|
14
|
+
var cache = memo_cache_1.getMemoCache();
|
|
15
|
+
var patchValues = { uno: 'one', quatro: 'quatro' };
|
|
16
|
+
var tokens = patchTokens_1.patchTokens(themeTokens, cache, patchValues)[0];
|
|
17
|
+
expect(tokens).not.toBe(themeTokens);
|
|
18
|
+
for (var key in patchValues) {
|
|
19
|
+
expect(tokens[key]).toEqual(patchValues[key]);
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
test('no copied props does not change tokens', function () {
|
|
23
|
+
var cache = memo_cache_1.getMemoCache();
|
|
24
|
+
var patchValues1 = {};
|
|
25
|
+
var tokens = patchTokens_1.patchTokens(themeTokens, cache, patchValues1)[0];
|
|
26
|
+
expect(tokens).toBe(themeTokens);
|
|
27
|
+
var patchValues2 = { tres: undefined };
|
|
28
|
+
var tokens2 = patchTokens_1.patchTokens(themeTokens, cache, patchValues2)[0];
|
|
29
|
+
expect(tokens2).toBe(themeTokens);
|
|
30
|
+
});
|
|
31
|
+
test('patching tokens cache independent of order', function () {
|
|
32
|
+
var cache = memo_cache_1.getMemoCache();
|
|
33
|
+
var patch1 = { uno: 'one', cinco: false };
|
|
34
|
+
var patch2 = { cinco: false, uno: 'one' };
|
|
35
|
+
var tokens1 = patchTokens_1.patchTokens(themeTokens, cache, patch1)[0];
|
|
36
|
+
var tokens2 = patchTokens_1.patchTokens(themeTokens, cache, patch2)[0];
|
|
37
|
+
expect(tokens1).toBe(tokens2);
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
//# sourceMappingURL=patchTokens.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patchTokens.test.js","sourceRoot":"","sources":["../src/patchTokens.test.ts"],"names":[],"mappings":";;AAAA,6CAA4C;AAC5C,gEAAiE;AAUjE,IAAM,WAAW,GAAW;IAC1B,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,IAAI;CACZ,CAAC;AAEF,QAAQ,CAAC,mBAAmB,EAAE;IAC5B,IAAI,CAAC,kBAAkB,EAAE;QACvB,IAAM,KAAK,GAAG,yBAAY,EAAE,CAAC;QAC7B,IAAM,WAAW,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QAC9C,IAAA,sEAAM,CAAiD;QAC9D,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACrC,KAAK,IAAM,GAAG,IAAI,WAAW,EAAE;YAC7B,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;SAC/C;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,wCAAwC,EAAE;QAC7C,IAAM,KAAK,GAAG,yBAAY,EAAE,CAAC;QAC7B,IAAM,YAAY,GAAG,EAAE,CAAC;QACjB,IAAA,uEAAM,CAAkD;QAC/D,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEjC,IAAM,YAAY,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAClC,IAAA,wEAAO,CAAkD;QAChE,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,4CAA4C,EAAE;QACjD,IAAM,KAAK,GAAG,yBAAY,EAAE,CAAC;QAC7B,IAAM,MAAM,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAC5C,IAAM,MAAM,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;QACrC,IAAA,kEAAO,CAA4C;QACnD,IAAA,kEAAO,CAA4C;QAC1D,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTokens.samples.test.d.ts","sourceRoot":"","sources":["../src/useTokens.samples.test.tsx"],"names":[],"mappings":""}
|