@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.
Files changed (106) hide show
  1. package/CHANGELOG.json +200 -0
  2. package/CHANGELOG.md +53 -0
  3. package/README.md +85 -0
  4. package/babel.config.js +1 -0
  5. package/just.config.js +3 -0
  6. package/lib/applyPropsToTokens.d.ts +3 -0
  7. package/lib/applyPropsToTokens.d.ts.map +1 -0
  8. package/lib/applyPropsToTokens.js +28 -0
  9. package/lib/applyPropsToTokens.js.map +1 -0
  10. package/lib/applyPropsToTokens.test.d.ts +2 -0
  11. package/lib/applyPropsToTokens.test.d.ts.map +1 -0
  12. package/lib/applyPropsToTokens.test.js +30 -0
  13. package/lib/applyPropsToTokens.test.js.map +1 -0
  14. package/lib/applyTokenLayers.d.ts +16 -0
  15. package/lib/applyTokenLayers.d.ts.map +1 -0
  16. package/lib/applyTokenLayers.js +25 -0
  17. package/lib/applyTokenLayers.js.map +1 -0
  18. package/lib/applyTokenLayers.test.d.ts +2 -0
  19. package/lib/applyTokenLayers.test.d.ts.map +1 -0
  20. package/lib/applyTokenLayers.test.js +64 -0
  21. package/lib/applyTokenLayers.test.js.map +1 -0
  22. package/lib/buildUseTokens.d.ts +35 -0
  23. package/lib/buildUseTokens.d.ts.map +1 -0
  24. package/lib/buildUseTokens.js +62 -0
  25. package/lib/buildUseTokens.js.map +1 -0
  26. package/lib/buildUseTokens.test.d.ts +2 -0
  27. package/lib/buildUseTokens.test.d.ts.map +1 -0
  28. package/lib/buildUseTokens.test.js +103 -0
  29. package/lib/buildUseTokens.test.js.map +1 -0
  30. package/lib/customizable.d.ts +24 -0
  31. package/lib/customizable.d.ts.map +1 -0
  32. package/lib/customizable.js +22 -0
  33. package/lib/customizable.js.map +1 -0
  34. package/lib/index.d.ts +6 -0
  35. package/lib/index.d.ts.map +1 -0
  36. package/lib/index.js +6 -0
  37. package/lib/index.js.map +1 -0
  38. package/lib/patchTokens.d.ts +12 -0
  39. package/lib/patchTokens.d.ts.map +1 -0
  40. package/lib/patchTokens.js +42 -0
  41. package/lib/patchTokens.js.map +1 -0
  42. package/lib/patchTokens.test.d.ts +2 -0
  43. package/lib/patchTokens.test.d.ts.map +1 -0
  44. package/lib/patchTokens.test.js +38 -0
  45. package/lib/patchTokens.test.js.map +1 -0
  46. package/lib/useTokens.samples.test.d.ts +2 -0
  47. package/lib/useTokens.samples.test.d.ts.map +1 -0
  48. package/lib/useTokens.samples.test.js +165 -0
  49. package/lib/useTokens.samples.test.js.map +1 -0
  50. package/lib-commonjs/applyPropsToTokens.d.ts +3 -0
  51. package/lib-commonjs/applyPropsToTokens.d.ts.map +1 -0
  52. package/lib-commonjs/applyPropsToTokens.js +31 -0
  53. package/lib-commonjs/applyPropsToTokens.js.map +1 -0
  54. package/lib-commonjs/applyPropsToTokens.test.d.ts +2 -0
  55. package/lib-commonjs/applyPropsToTokens.test.d.ts.map +1 -0
  56. package/lib-commonjs/applyPropsToTokens.test.js +32 -0
  57. package/lib-commonjs/applyPropsToTokens.test.js.map +1 -0
  58. package/lib-commonjs/applyTokenLayers.d.ts +16 -0
  59. package/lib-commonjs/applyTokenLayers.d.ts.map +1 -0
  60. package/lib-commonjs/applyTokenLayers.js +28 -0
  61. package/lib-commonjs/applyTokenLayers.js.map +1 -0
  62. package/lib-commonjs/applyTokenLayers.test.d.ts +2 -0
  63. package/lib-commonjs/applyTokenLayers.test.d.ts.map +1 -0
  64. package/lib-commonjs/applyTokenLayers.test.js +66 -0
  65. package/lib-commonjs/applyTokenLayers.test.js.map +1 -0
  66. package/lib-commonjs/buildUseTokens.d.ts +35 -0
  67. package/lib-commonjs/buildUseTokens.d.ts.map +1 -0
  68. package/lib-commonjs/buildUseTokens.js +65 -0
  69. package/lib-commonjs/buildUseTokens.js.map +1 -0
  70. package/lib-commonjs/buildUseTokens.test.d.ts +2 -0
  71. package/lib-commonjs/buildUseTokens.test.d.ts.map +1 -0
  72. package/lib-commonjs/buildUseTokens.test.js +105 -0
  73. package/lib-commonjs/buildUseTokens.test.js.map +1 -0
  74. package/lib-commonjs/customizable.d.ts +24 -0
  75. package/lib-commonjs/customizable.d.ts.map +1 -0
  76. package/lib-commonjs/customizable.js +25 -0
  77. package/lib-commonjs/customizable.js.map +1 -0
  78. package/lib-commonjs/index.d.ts +6 -0
  79. package/lib-commonjs/index.d.ts.map +1 -0
  80. package/lib-commonjs/index.js +11 -0
  81. package/lib-commonjs/index.js.map +1 -0
  82. package/lib-commonjs/patchTokens.d.ts +12 -0
  83. package/lib-commonjs/patchTokens.d.ts.map +1 -0
  84. package/lib-commonjs/patchTokens.js +45 -0
  85. package/lib-commonjs/patchTokens.js.map +1 -0
  86. package/lib-commonjs/patchTokens.test.d.ts +2 -0
  87. package/lib-commonjs/patchTokens.test.d.ts.map +1 -0
  88. package/lib-commonjs/patchTokens.test.js +40 -0
  89. package/lib-commonjs/patchTokens.test.js.map +1 -0
  90. package/lib-commonjs/useTokens.samples.test.d.ts +2 -0
  91. package/lib-commonjs/useTokens.samples.test.d.ts.map +1 -0
  92. package/lib-commonjs/useTokens.samples.test.js +177 -0
  93. package/lib-commonjs/useTokens.samples.test.js.map +1 -0
  94. package/package.json +41 -0
  95. package/src/__snapshots__/useTokens.samples.test.tsx.snap +163 -0
  96. package/src/applyPropsToTokens.test.ts +47 -0
  97. package/src/applyPropsToTokens.ts +15 -0
  98. package/src/applyTokenLayers.test.ts +67 -0
  99. package/src/applyTokenLayers.ts +40 -0
  100. package/src/buildUseTokens.test.ts +113 -0
  101. package/src/buildUseTokens.ts +89 -0
  102. package/src/customizable.ts +36 -0
  103. package/src/index.ts +5 -0
  104. package/src/patchTokens.test.ts +50 -0
  105. package/src/patchTokens.ts +30 -0
  106. 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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=applyTokenLayers.test.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=buildUseTokens.test.d.ts.map
@@ -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,6 @@
1
+ export * from './applyPropsToTokens';
2
+ export * from './applyTokenLayers';
3
+ export * from './buildUseTokens';
4
+ export * from './customizable';
5
+ export * from './patchTokens';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=patchTokens.test.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=useTokens.samples.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTokens.samples.test.d.ts","sourceRoot":"","sources":["../src/useTokens.samples.test.tsx"],"names":[],"mappings":""}