fontdue-js 2.4.1 → 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/__generated__/License_node.graphql.d.ts +2 -1
  3. package/dist/__generated__/License_node.graphql.js +13 -3
  4. package/dist/__generated__/PrecartQuery.graphql.d.ts +1 -1
  5. package/dist/__generated__/PrecartQuery.graphql.js +14 -4
  6. package/dist/__generated__/StoreModalContainerQuery.graphql.d.ts +15 -3
  7. package/dist/__generated__/StoreModalContainerQuery.graphql.js +98 -23
  8. package/dist/__generated__/StoreModalProductLicense_license.graphql.d.ts +2 -1
  9. package/dist/__generated__/StoreModalProductLicense_license.graphql.js +12 -2
  10. package/dist/__generated__/StoreModalProductQuery.graphql.d.ts +1 -1
  11. package/dist/__generated__/StoreModalProductQuery.graphql.js +13 -3
  12. package/dist/components/Precart/License.js +9 -2
  13. package/dist/components/StoreModal/StoreModalContainer.js +17 -3
  14. package/dist/components/StoreModal/StoreModalFamily.d.ts +2 -1
  15. package/dist/components/StoreModal/StoreModalFamily.js +3 -1
  16. package/dist/components/StoreModal/StoreModalProduct.js +1 -0
  17. package/dist/components/StoreModalProductLicenseSelection/LicenseElement.d.ts +1 -0
  18. package/dist/components/StoreModalProductLicenseSelection/LicenseElement.js +10 -2
  19. package/dist/components/StoreModalProductLicenseSelection/StoreModalProductLicense.js +2 -1
  20. package/dist/components/StoreModalProductSummary/index.js +1 -1
  21. package/dist/components/elements/StoreModalContainer/index.d.ts +8 -2
  22. package/dist/components/elements/StoreModalContainer/index.js +9 -6
  23. package/dist/components/elements/StoreModalFamily/index.d.ts +1 -0
  24. package/dist/components/elements/StoreModalFamily/index.js +5 -2
  25. package/dist/fontdue.css +20 -3
  26. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## 2.5.0
2
+
3
+ - Added support for new "Description" field on Licenses, which shows a short description below the license selection
4
+ - Updated some Store Modal headings to use the "UI Font Style Bold" selection in the site settings
5
+ - Improved font selection UX: added a "Select fonts" heading to the font selection page, and updated the language when no fonts are selected from "Please make a selection" to "Please select some fonts"
6
+
1
7
  ## 2.4.1
2
8
 
3
9
  - Fixes NewsletterSignup component not accepting props in some cases
@@ -1,11 +1,12 @@
1
1
  /**
2
- * @generated SignedSource<<763c405fdfe0923a5c762398d6c08948>>
2
+ * @generated SignedSource<<a40cbcfab954c3a91aa6db48a2173c06>>
3
3
  * @lightSyntaxTransform
4
4
  * @nogrep
5
5
  */
6
6
  import { ReaderFragment } from 'relay-runtime';
7
7
  import { FragmentRefs } from "relay-runtime";
8
8
  export type License_node$data = {
9
+ readonly description: string | null;
9
10
  readonly id: string;
10
11
  readonly multiplier: string | null;
11
12
  readonly name: string | null;
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
  /**
8
- * @generated SignedSource<<763c405fdfe0923a5c762398d6c08948>>
8
+ * @generated SignedSource<<a40cbcfab954c3a91aa6db48a2173c06>>
9
9
  * @lightSyntaxTransform
10
10
  * @nogrep
11
11
  */
@@ -47,7 +47,17 @@ const node = function () {
47
47
  "kind": "ScalarField",
48
48
  "name": "url",
49
49
  "storageKey": null
50
- }, v1 /*: any*/, v2 /*: any*/, {
50
+ }, v1 /*: any*/, {
51
+ "alias": null,
52
+ "args": [{
53
+ "kind": "Literal",
54
+ "name": "format",
55
+ "value": "HTML"
56
+ }],
57
+ "kind": "ScalarField",
58
+ "name": "description",
59
+ "storageKey": "description(format:\"HTML\")"
60
+ }, v2 /*: any*/, {
51
61
  "alias": "variables",
52
62
  "args": null,
53
63
  "concreteType": "LicenseVariable",
@@ -83,6 +93,6 @@ const node = function () {
83
93
  "abstractKey": null
84
94
  };
85
95
  }();
86
- node.hash = "215059eeecc274d540639b4247513ee2";
96
+ node.hash = "1550b152731d8412ffc55716cb536407";
87
97
  var _default = node;
88
98
  exports.default = _default;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @generated SignedSource<<d6a6b14950b4a7b5295adcae28814e4d>>
2
+ * @generated SignedSource<<5863f231bf5a9e85364cf3f665a16c6a>>
3
3
  * @lightSyntaxTransform
4
4
  * @nogrep
5
5
  */
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
  /**
8
- * @generated SignedSource<<d6a6b14950b4a7b5295adcae28814e4d>>
8
+ * @generated SignedSource<<5863f231bf5a9e85364cf3f665a16c6a>>
9
9
  * @lightSyntaxTransform
10
10
  * @nogrep
11
11
  */
@@ -242,7 +242,17 @@ const node = function () {
242
242
  "kind": "ScalarField",
243
243
  "name": "url",
244
244
  "storageKey": null
245
- }, v10 /*: any*/, v13 /*: any*/, {
245
+ }, v10 /*: any*/, {
246
+ "alias": null,
247
+ "args": [{
248
+ "kind": "Literal",
249
+ "name": "format",
250
+ "value": "HTML"
251
+ }],
252
+ "kind": "ScalarField",
253
+ "name": "description",
254
+ "storageKey": "description(format:\"HTML\")"
255
+ }, v13 /*: any*/, {
246
256
  "alias": "variables",
247
257
  "args": null,
248
258
  "concreteType": "LicenseVariable",
@@ -296,12 +306,12 @@ const node = function () {
296
306
  }]
297
307
  },
298
308
  "params": {
299
- "cacheID": "674621a783c04736a9f2fe16f2667575",
309
+ "cacheID": "9100aa9ac647943ff260798eae9601f0",
300
310
  "id": null,
301
311
  "metadata": {},
302
312
  "name": "PrecartQuery",
303
313
  "operationKind": "query",
304
- "text": "query PrecartQuery(\n $licenseOptionsSpecs: [LicenseOptionsSpec]!\n $selectedSkuIds: [ID]!\n $collectionId: ID!\n) {\n viewer {\n ...Precart_viewer_DvL55\n id\n }\n collection: node(id: $collectionId) {\n __typename\n ...Precart_collection\n id\n }\n}\n\nfragment License_node on License {\n id\n url\n name\n multiplier\n variables: licenseVariables {\n id\n name\n variableType\n options: licenseOptions {\n id\n amount\n multiplier\n }\n }\n}\n\nfragment Precart_collection on FontCollection {\n name\n}\n\nfragment Precart_viewer_DvL55 on Viewer {\n precart(skuIds: $selectedSkuIds, licenseOptions: $licenseOptionsSpecs) {\n skus {\n id\n price(licenseOptions: $licenseOptionsSpecs) {\n amount\n ...Price_price\n }\n product {\n __typename\n ... on FontCollection {\n name\n totalStyles\n totalStylesPrice(licenseOptions: $licenseOptionsSpecs) {\n amount\n }\n }\n ... on Bundle {\n name\n totalStyles\n totalStylesPrice(licenseOptions: $licenseOptionsSpecs) {\n amount\n }\n }\n ... on FontStyle {\n name\n }\n ... on Node {\n __isNode: __typename\n id\n }\n }\n }\n subtotal {\n amount\n currency\n ...Price_price\n }\n }\n licenses(licenseTypes: [RETAIL]) {\n ...License_node\n name\n id\n defaultSelected\n variables: licenseVariables {\n id\n options: licenseOptions {\n id\n }\n }\n }\n}\n\nfragment Price_price on Money {\n amount\n currency\n}\n"
314
+ "text": "query PrecartQuery(\n $licenseOptionsSpecs: [LicenseOptionsSpec]!\n $selectedSkuIds: [ID]!\n $collectionId: ID!\n) {\n viewer {\n ...Precart_viewer_DvL55\n id\n }\n collection: node(id: $collectionId) {\n __typename\n ...Precart_collection\n id\n }\n}\n\nfragment License_node on License {\n id\n url\n name\n description(format: HTML)\n multiplier\n variables: licenseVariables {\n id\n name\n variableType\n options: licenseOptions {\n id\n amount\n multiplier\n }\n }\n}\n\nfragment Precart_collection on FontCollection {\n name\n}\n\nfragment Precart_viewer_DvL55 on Viewer {\n precart(skuIds: $selectedSkuIds, licenseOptions: $licenseOptionsSpecs) {\n skus {\n id\n price(licenseOptions: $licenseOptionsSpecs) {\n amount\n ...Price_price\n }\n product {\n __typename\n ... on FontCollection {\n name\n totalStyles\n totalStylesPrice(licenseOptions: $licenseOptionsSpecs) {\n amount\n }\n }\n ... on Bundle {\n name\n totalStyles\n totalStylesPrice(licenseOptions: $licenseOptionsSpecs) {\n amount\n }\n }\n ... on FontStyle {\n name\n }\n ... on Node {\n __isNode: __typename\n id\n }\n }\n }\n subtotal {\n amount\n currency\n ...Price_price\n }\n }\n licenses(licenseTypes: [RETAIL]) {\n ...License_node\n name\n id\n defaultSelected\n variables: licenseVariables {\n id\n options: licenseOptions {\n id\n }\n }\n }\n}\n\nfragment Price_price on Money {\n amount\n currency\n}\n"
305
315
  }
306
316
  };
307
317
  }();
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @generated SignedSource<<a5cfb56566c459856b3fca56dcc4a45c>>
2
+ * @generated SignedSource<<602548031710d0196136676f735a8272>>
3
3
  * @lightSyntaxTransform
4
4
  * @nogrep
5
5
  */
@@ -13,8 +13,20 @@ export type StoreModalContainerQuery$data = {
13
13
  }> | null;
14
14
  } | null;
15
15
  readonly settings: {
16
- readonly uiFontName: string | null;
17
- readonly uiFontUrl: string | null;
16
+ readonly uiFontStyle: {
17
+ readonly cssFamily: string | null;
18
+ readonly family: {
19
+ readonly cssUrl: string | null;
20
+ } | null;
21
+ readonly name: string;
22
+ } | null;
23
+ readonly uiFontStyleBold: {
24
+ readonly cssFamily: string | null;
25
+ readonly family: {
26
+ readonly cssUrl: string | null;
27
+ } | null;
28
+ readonly name: string;
29
+ } | null;
18
30
  } | null;
19
31
  };
20
32
  };
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
  /**
8
- * @generated SignedSource<<a5cfb56566c459856b3fca56dcc4a45c>>
8
+ * @generated SignedSource<<602548031710d0196136676f735a8272>>
9
9
  * @lightSyntaxTransform
10
10
  * @nogrep
11
11
  */
@@ -36,25 +36,47 @@ const node = function () {
36
36
  v2 = {
37
37
  "alias": null,
38
38
  "args": null,
39
- "concreteType": "Settings",
39
+ "kind": "ScalarField",
40
+ "name": "name",
41
+ "storageKey": null
42
+ },
43
+ v3 = {
44
+ "alias": null,
45
+ "args": null,
46
+ "kind": "ScalarField",
47
+ "name": "cssFamily",
48
+ "storageKey": null
49
+ },
50
+ v4 = {
51
+ "alias": null,
52
+ "args": null,
53
+ "kind": "ScalarField",
54
+ "name": "cssUrl",
55
+ "storageKey": null
56
+ },
57
+ v5 = [v2 /*: any*/, v3 /*: any*/, {
58
+ "alias": null,
59
+ "args": null,
60
+ "concreteType": "FontCollection",
40
61
  "kind": "LinkedField",
41
- "name": "settings",
62
+ "name": "family",
42
63
  "plural": false,
43
- "selections": [{
44
- "alias": null,
45
- "args": null,
46
- "kind": "ScalarField",
47
- "name": "uiFontUrl",
48
- "storageKey": null
49
- }, {
50
- "alias": null,
51
- "args": null,
52
- "kind": "ScalarField",
53
- "name": "uiFontName",
54
- "storageKey": null
55
- }],
64
+ "selections": [v4 /*: any*/],
65
+
56
66
  "storageKey": null
57
- };
67
+ }],
68
+ v6 = [v2 /*: any*/, v3 /*: any*/, {
69
+ "alias": null,
70
+ "args": null,
71
+ "concreteType": "FontCollection",
72
+ "kind": "LinkedField",
73
+ "name": "family",
74
+ "plural": false,
75
+ "selections": [v4 /*: any*/, v0 /*: any*/],
76
+
77
+ "storageKey": null
78
+ }, v0 /*: any*/];
79
+
58
80
  return {
59
81
  "fragment": {
60
82
  "argumentDefinitions": [],
@@ -78,8 +100,34 @@ const node = function () {
78
100
  "selections": [v1 /*: any*/],
79
101
 
80
102
  "storageKey": null
81
- }, v2 /*: any*/],
82
-
103
+ }, {
104
+ "alias": null,
105
+ "args": null,
106
+ "concreteType": "Settings",
107
+ "kind": "LinkedField",
108
+ "name": "settings",
109
+ "plural": false,
110
+ "selections": [{
111
+ "alias": null,
112
+ "args": null,
113
+ "concreteType": "FontStyle",
114
+ "kind": "LinkedField",
115
+ "name": "uiFontStyle",
116
+ "plural": false,
117
+ "selections": v5 /*: any*/,
118
+ "storageKey": null
119
+ }, {
120
+ "alias": null,
121
+ "args": null,
122
+ "concreteType": "FontStyle",
123
+ "kind": "LinkedField",
124
+ "name": "uiFontStyleBold",
125
+ "plural": false,
126
+ "selections": v5 /*: any*/,
127
+ "storageKey": null
128
+ }],
129
+ "storageKey": null
130
+ }],
83
131
  "storageKey": null
84
132
  }],
85
133
  "type": "RootQueryType",
@@ -107,21 +155,48 @@ const node = function () {
107
155
  "selections": [v1 /*: any*/, v0 /*: any*/],
108
156
 
109
157
  "storageKey": null
110
- }, v2 /*: any*/, v0 /*: any*/],
158
+ }, {
159
+ "alias": null,
160
+ "args": null,
161
+ "concreteType": "Settings",
162
+ "kind": "LinkedField",
163
+ "name": "settings",
164
+ "plural": false,
165
+ "selections": [{
166
+ "alias": null,
167
+ "args": null,
168
+ "concreteType": "FontStyle",
169
+ "kind": "LinkedField",
170
+ "name": "uiFontStyle",
171
+ "plural": false,
172
+ "selections": v6 /*: any*/,
173
+ "storageKey": null
174
+ }, {
175
+ "alias": null,
176
+ "args": null,
177
+ "concreteType": "FontStyle",
178
+ "kind": "LinkedField",
179
+ "name": "uiFontStyleBold",
180
+ "plural": false,
181
+ "selections": v6 /*: any*/,
182
+ "storageKey": null
183
+ }],
184
+ "storageKey": null
185
+ }, v0 /*: any*/],
111
186
 
112
187
  "storageKey": null
113
188
  }]
114
189
  },
115
190
  "params": {
116
- "cacheID": "9f5bb3fef45f2132fe47d71cdcc09394",
191
+ "cacheID": "8b53d0e391aeeeeefd259a13251aca86",
117
192
  "id": null,
118
193
  "metadata": {},
119
194
  "name": "StoreModalContainerQuery",
120
195
  "operationKind": "query",
121
- "text": "query StoreModalContainerQuery {\n viewer {\n currentOrder {\n orderItems {\n id\n }\n id\n }\n settings {\n uiFontUrl\n uiFontName\n }\n id\n }\n}\n"
196
+ "text": "query StoreModalContainerQuery {\n viewer {\n currentOrder {\n orderItems {\n id\n }\n id\n }\n settings {\n uiFontStyle {\n name\n cssFamily\n family {\n cssUrl\n id\n }\n id\n }\n uiFontStyleBold {\n name\n cssFamily\n family {\n cssUrl\n id\n }\n id\n }\n }\n id\n }\n}\n"
122
197
  }
123
198
  };
124
199
  }();
125
- node.hash = "67cf3b7a14c2b8ff47a8138e0f234624";
200
+ node.hash = "dd4757b9238f5ae8689c7191b4abe64c";
126
201
  var _default = node;
127
202
  exports.default = _default;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @generated SignedSource<<7dc96b3e1c1cea74e1df39a055507b58>>
2
+ * @generated SignedSource<<12d307fcc2ca71585e67af5328841e38>>
3
3
  * @lightSyntaxTransform
4
4
  * @nogrep
5
5
  */
@@ -7,6 +7,7 @@ import { ReaderFragment } from 'relay-runtime';
7
7
  import { FragmentRefs } from "relay-runtime";
8
8
  export type StoreModalProductLicense_license$data = {
9
9
  readonly defaultSelected: boolean | null;
10
+ readonly description: string | null;
10
11
  readonly id: string;
11
12
  readonly name: string | null;
12
13
  readonly url: string | null;
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
  /**
8
- * @generated SignedSource<<7dc96b3e1c1cea74e1df39a055507b58>>
8
+ * @generated SignedSource<<12d307fcc2ca71585e67af5328841e38>>
9
9
  * @lightSyntaxTransform
10
10
  * @nogrep
11
11
  */
@@ -41,6 +41,16 @@ const node = function () {
41
41
  "name": "url",
42
42
  "storageKey": null
43
43
  }, v1 /*: any*/, {
44
+ "alias": null,
45
+ "args": [{
46
+ "kind": "Literal",
47
+ "name": "format",
48
+ "value": "HTML"
49
+ }],
50
+ "kind": "ScalarField",
51
+ "name": "description",
52
+ "storageKey": "description(format:\"HTML\")"
53
+ }, {
44
54
  "alias": null,
45
55
  "args": null,
46
56
  "kind": "ScalarField",
@@ -89,6 +99,6 @@ const node = function () {
89
99
  "abstractKey": null
90
100
  };
91
101
  }();
92
- node.hash = "22e24165f79ce30a9190ace765d3d1ce";
102
+ node.hash = "5729815aeedac2b8ea39eaab0a986b48";
93
103
  var _default = node;
94
104
  exports.default = _default;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @generated SignedSource<<b4b764624fbe00d3d774d30ba0b40b3d>>
2
+ * @generated SignedSource<<c70b3a4167e830f3a526f236819eeb80>>
3
3
  * @lightSyntaxTransform
4
4
  * @nogrep
5
5
  */
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
  /**
8
- * @generated SignedSource<<b4b764624fbe00d3d774d30ba0b40b3d>>
8
+ * @generated SignedSource<<c70b3a4167e830f3a526f236819eeb80>>
9
9
  * @lightSyntaxTransform
10
10
  * @nogrep
11
11
  */
@@ -377,6 +377,16 @@ const node = function () {
377
377
  "name": "url",
378
378
  "storageKey": null
379
379
  }, v10 /*: any*/, {
380
+ "alias": null,
381
+ "args": [{
382
+ "kind": "Literal",
383
+ "name": "format",
384
+ "value": "HTML"
385
+ }],
386
+ "kind": "ScalarField",
387
+ "name": "description",
388
+ "storageKey": "description(format:\"HTML\")"
389
+ }, {
380
390
  "alias": null,
381
391
  "args": null,
382
392
  "kind": "ScalarField",
@@ -491,12 +501,12 @@ const node = function () {
491
501
  }]
492
502
  },
493
503
  "params": {
494
- "cacheID": "505ecb8862c17c0dab95c6ae0415862e",
504
+ "cacheID": "4432f6cf13a130d083e8ae9a7116da48",
495
505
  "id": null,
496
506
  "metadata": {},
497
507
  "name": "StoreModalProductQuery",
498
508
  "operationKind": "query",
499
- "text": "query StoreModalProductQuery(\n $productId: ID!\n) {\n collection: node(id: $productId) {\n __typename\n id\n ...StoreModalFamily_collection\n ... on FontCollection {\n children(collectionTypes: [FAMILY]) {\n id\n ...StoreModalFamily_collection\n }\n }\n }\n viewer {\n ...StoreModalProductLicenseSelection_viewer\n ...StoreModalProductSummary_viewer\n endpoint\n stripeAccountId\n id\n }\n}\n\nfragment FontStyle_fontStyle on FontStyle {\n cssFamily\n name\n}\n\nfragment Price_price on Money {\n amount\n currency\n}\n\nfragment SKUPrice_sku on Sku {\n id\n price(licenseOptions: []) {\n amount\n ...Price_price\n }\n}\n\nfragment StoreModalBundleButton_bundle on Bundle {\n name\n sku {\n ...SKUPrice_sku\n id\n }\n fontStyles {\n id\n ...FontStyle_fontStyle\n }\n}\n\nfragment StoreModalFamilyButton_collection on FontCollection {\n isVariableFont\n collectionType\n name\n sku {\n ...SKUPrice_sku\n id\n }\n parent {\n id\n }\n featureStyle {\n ...FontStyle_fontStyle\n id\n }\n totalStyles\n totalStylesPrice {\n ...Price_price\n }\n ...useTotalStyles_fontCollection\n}\n\nfragment StoreModalFamily_collection on FontCollection {\n ...StoreModalFamilyButton_collection\n cssUrl\n collectionType\n sku {\n id\n }\n isVariableFont\n bundles {\n id\n fontStyles {\n id\n cssFamily\n cssWeight\n cssStretch\n ...StoreModalStyleButton_fontStyle\n }\n ...StoreModalBundleButton_bundle\n }\n fontStyles {\n id\n cssFamily\n cssWeight\n cssStretch\n ...StoreModalStyleButton_fontStyle\n }\n}\n\nfragment StoreModalProductLicenseSelection_viewer on Viewer {\n licenses(licenseTypes: [RETAIL]) {\n id\n ...StoreModalProductLicense_license\n }\n}\n\nfragment StoreModalProductLicense_license on License {\n id\n url\n name\n defaultSelected\n variables: licenseVariables {\n id\n name\n variableType\n ...VariableTableAmounts_variable\n options: licenseOptions {\n id\n name\n amount\n ...VariableTableAmounts_option\n }\n }\n}\n\nfragment StoreModalProductSummary_viewer on Viewer {\n precart(skuIds: [], licenseOptions: []) {\n skus {\n price(licenseOptions: []) {\n amount\n }\n product {\n __typename\n ... on FontCollection {\n totalStyles\n totalStylesPrice(licenseOptions: []) {\n amount\n }\n }\n ... on Bundle {\n totalStyles\n totalStylesPrice(licenseOptions: []) {\n amount\n }\n }\n ... on Node {\n __isNode: __typename\n id\n }\n }\n id\n }\n subtotal {\n ...Price_price\n amount\n currency\n }\n }\n}\n\nfragment StoreModalStyleButton_fontStyle on FontStyle {\n ...FontStyle_fontStyle\n id\n name\n sku {\n ...SKUPrice_sku\n id\n }\n variableInstances {\n name\n coordinates {\n axis\n value\n }\n }\n variableAxes {\n name\n }\n}\n\nfragment VariableTableAmounts_option on LicenseOption {\n amounts\n}\n\nfragment VariableTableAmounts_variable on LicenseVariable {\n units\n}\n\nfragment useTotalStyles_fontCollection on FontCollection {\n totalStyles\n children(collectionTypes: [FAMILY]) {\n isVariableFont\n totalStyles\n id\n }\n}\n"
509
+ "text": "query StoreModalProductQuery(\n $productId: ID!\n) {\n collection: node(id: $productId) {\n __typename\n id\n ...StoreModalFamily_collection\n ... on FontCollection {\n children(collectionTypes: [FAMILY]) {\n id\n ...StoreModalFamily_collection\n }\n }\n }\n viewer {\n ...StoreModalProductLicenseSelection_viewer\n ...StoreModalProductSummary_viewer\n endpoint\n stripeAccountId\n id\n }\n}\n\nfragment FontStyle_fontStyle on FontStyle {\n cssFamily\n name\n}\n\nfragment Price_price on Money {\n amount\n currency\n}\n\nfragment SKUPrice_sku on Sku {\n id\n price(licenseOptions: []) {\n amount\n ...Price_price\n }\n}\n\nfragment StoreModalBundleButton_bundle on Bundle {\n name\n sku {\n ...SKUPrice_sku\n id\n }\n fontStyles {\n id\n ...FontStyle_fontStyle\n }\n}\n\nfragment StoreModalFamilyButton_collection on FontCollection {\n isVariableFont\n collectionType\n name\n sku {\n ...SKUPrice_sku\n id\n }\n parent {\n id\n }\n featureStyle {\n ...FontStyle_fontStyle\n id\n }\n totalStyles\n totalStylesPrice {\n ...Price_price\n }\n ...useTotalStyles_fontCollection\n}\n\nfragment StoreModalFamily_collection on FontCollection {\n ...StoreModalFamilyButton_collection\n cssUrl\n collectionType\n sku {\n id\n }\n isVariableFont\n bundles {\n id\n fontStyles {\n id\n cssFamily\n cssWeight\n cssStretch\n ...StoreModalStyleButton_fontStyle\n }\n ...StoreModalBundleButton_bundle\n }\n fontStyles {\n id\n cssFamily\n cssWeight\n cssStretch\n ...StoreModalStyleButton_fontStyle\n }\n}\n\nfragment StoreModalProductLicenseSelection_viewer on Viewer {\n licenses(licenseTypes: [RETAIL]) {\n id\n ...StoreModalProductLicense_license\n }\n}\n\nfragment StoreModalProductLicense_license on License {\n id\n url\n name\n description(format: HTML)\n defaultSelected\n variables: licenseVariables {\n id\n name\n variableType\n ...VariableTableAmounts_variable\n options: licenseOptions {\n id\n name\n amount\n ...VariableTableAmounts_option\n }\n }\n}\n\nfragment StoreModalProductSummary_viewer on Viewer {\n precart(skuIds: [], licenseOptions: []) {\n skus {\n price(licenseOptions: []) {\n amount\n }\n product {\n __typename\n ... on FontCollection {\n totalStyles\n totalStylesPrice(licenseOptions: []) {\n amount\n }\n }\n ... on Bundle {\n totalStyles\n totalStylesPrice(licenseOptions: []) {\n amount\n }\n }\n ... on Node {\n __isNode: __typename\n id\n }\n }\n id\n }\n subtotal {\n ...Price_price\n amount\n currency\n }\n }\n}\n\nfragment StoreModalStyleButton_fontStyle on FontStyle {\n ...FontStyle_fontStyle\n id\n name\n sku {\n ...SKUPrice_sku\n id\n }\n variableInstances {\n name\n coordinates {\n axis\n value\n }\n }\n variableAxes {\n name\n }\n}\n\nfragment VariableTableAmounts_option on LicenseOption {\n amounts\n}\n\nfragment VariableTableAmounts_variable on LicenseVariable {\n units\n}\n\nfragment useTotalStyles_fontCollection on FontCollection {\n totalStyles\n children(collectionTypes: [FAMILY]) {\n isVariableFont\n totalStyles\n id\n }\n}\n"
500
510
  }
501
511
  };
502
512
  }();
@@ -17,11 +17,13 @@ const License = _ref => {
17
17
  onSelectLicense,
18
18
  onSelectLicenseOption
19
19
  } = _ref;
20
- const node = (0, _reactRelay.useFragment)(_License_node !== void 0 ? _License_node : (_License_node = require("../../__generated__/License_node.graphql"), _License_node.hash && _License_node.hash !== "215059eeecc274d540639b4247513ee2" && console.error("The definition of 'License_node' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data."), _License_node), nodeKey);
20
+ const node = (0, _reactRelay.useFragment)(_License_node !== void 0 ? _License_node : (_License_node = require("../../__generated__/License_node.graphql"), _License_node.hash && _License_node.hash !== "1550b152731d8412ffc55716cb536407" && console.error("The definition of 'License_node' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data."), _License_node), nodeKey);
21
21
  if (!node) return null;
22
22
  const selectedLicenseOptions = (0, _reactRedux.useSelector)(state => state.licenseOptions);
23
23
  const selectedOptions = selectedLicenseOptions.find(spec => spec.licenseId === node.id);
24
24
  return /*#__PURE__*/_react.default.createElement("div", {
25
+ className: "pre-cart__license-wrapper"
26
+ }, /*#__PURE__*/_react.default.createElement("div", {
25
27
  className: "pre-cart__license",
26
28
  "data-selected": selected
27
29
  }, /*#__PURE__*/_react.default.createElement("div", {
@@ -59,7 +61,12 @@ const License = _ref => {
59
61
  key: option.id,
60
62
  value: option.id
61
63
  }, option.amount)))));
62
- })));
64
+ }))), node.description && /*#__PURE__*/_react.default.createElement("div", {
65
+ className: "pre-cart__license__description",
66
+ dangerouslySetInnerHTML: {
67
+ __html: node.description
68
+ }
69
+ }));
63
70
  };
64
71
  var _default = License;
65
72
  exports.default = _default;
@@ -37,12 +37,24 @@ const getBackLink = (history, currentRoute) => {
37
37
  if (!previous) return null;
38
38
  return getPageTitle(previous.name);
39
39
  };
40
+ function getFontData(fontStyle) {
41
+ if (!fontStyle) return null;
42
+ const {
43
+ name,
44
+ cssFamily,
45
+ family
46
+ } = fontStyle;
47
+ return {
48
+ name: `${cssFamily} ${name}`,
49
+ cssUrl: (family === null || family === void 0 ? void 0 : family.cssUrl) ?? null
50
+ };
51
+ }
40
52
  const StoreModalContainer = _ref => {
41
53
  var _currentOrder, _currentOrder$orderIt, _settings, _settings2;
42
54
  let {
43
55
  children
44
56
  } = _ref;
45
- const data = (0, _reactRelay.useLazyLoadQuery)(_StoreModalContainerQuery !== void 0 ? _StoreModalContainerQuery : (_StoreModalContainerQuery = require("../../__generated__/StoreModalContainerQuery.graphql"), _StoreModalContainerQuery.hash && _StoreModalContainerQuery.hash !== "67cf3b7a14c2b8ff47a8138e0f234624" && console.error("The definition of 'StoreModalContainerQuery' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data."), _StoreModalContainerQuery), {});
57
+ const data = (0, _reactRelay.useLazyLoadQuery)(_StoreModalContainerQuery !== void 0 ? _StoreModalContainerQuery : (_StoreModalContainerQuery = require("../../__generated__/StoreModalContainerQuery.graphql"), _StoreModalContainerQuery.hash && _StoreModalContainerQuery.hash !== "dd4757b9238f5ae8689c7191b4abe64c" && console.error("The definition of 'StoreModalContainerQuery' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data."), _StoreModalContainerQuery), {});
46
58
  const dispatch = (0, _reactRedux.useDispatch)();
47
59
  const orderItemCount = ((_currentOrder = data.viewer.currentOrder) === null || _currentOrder === void 0 ? void 0 : (_currentOrder$orderIt = _currentOrder.orderItems) === null || _currentOrder$orderIt === void 0 ? void 0 : _currentOrder$orderIt.length) ?? 0;
48
60
  const showCartButton = orderItemCount > 0;
@@ -92,8 +104,10 @@ const StoreModalContainer = _ref => {
92
104
  onClickCart: handleCart,
93
105
  showCartButton: showCartButton,
94
106
  orderItemCount: orderItemCount,
95
- uiFontUrl: (_settings = data.viewer.settings) === null || _settings === void 0 ? void 0 : _settings.uiFontUrl,
96
- uiFontName: (_settings2 = data.viewer.settings) === null || _settings2 === void 0 ? void 0 : _settings2.uiFontName
107
+ fonts: {
108
+ regular: getFontData((_settings = data.viewer.settings) === null || _settings === void 0 ? void 0 : _settings.uiFontStyle),
109
+ bold: getFontData((_settings2 = data.viewer.settings) === null || _settings2 === void 0 ? void 0 : _settings2.uiFontStyleBold)
110
+ }
97
111
  }, {
98
112
  backText: link,
99
113
  pageTitle: getPageTitle(currentRoute),
@@ -3,6 +3,7 @@ import { StoreModalFamily_collection$key } from '../../__generated__/StoreModalF
3
3
  interface StoreModalFamilyProps {
4
4
  collection: StoreModalFamily_collection$key;
5
5
  onSelect: (skuId: string, selected: boolean) => void;
6
+ title?: React.ReactNode;
6
7
  }
7
- export default function StoreModalFamily({ collection: collectionKey, onSelect, }: StoreModalFamilyProps): React.JSX.Element | null;
8
+ export default function StoreModalFamily({ collection: collectionKey, onSelect, title, }: StoreModalFamilyProps): React.JSX.Element | null;
8
9
  export {};
@@ -34,7 +34,8 @@ function StoreModalFamily(_ref) {
34
34
  var _collection$bundles;
35
35
  let {
36
36
  collection: collectionKey,
37
- onSelect
37
+ onSelect,
38
+ title
38
39
  } = _ref;
39
40
  const collection = (0, _reactRelay.useFragment)(_StoreModalFamily_collection !== void 0 ? _StoreModalFamily_collection : (_StoreModalFamily_collection = require("../../__generated__/StoreModalFamily_collection.graphql"), _StoreModalFamily_collection.hash && _StoreModalFamily_collection.hash !== "f0e4764ace2386cb64ef3f8d85128268" && console.error("The definition of 'StoreModalFamily_collection' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data."), _StoreModalFamily_collection), collectionKey);
40
41
  const fontStyles = (0, _react.useMemo)(() => stylesGrouped(collection), [collection]);
@@ -43,6 +44,7 @@ function StoreModalFamily(_ref) {
43
44
  stylesheet: collection.cssUrl && /*#__PURE__*/_react.default.createElement(_Stylesheet.default, {
44
45
  href: collection.cssUrl
45
46
  }) || null,
47
+ title,
46
48
  familyButton: /*#__PURE__*/_react.default.createElement(_StoreModalFamilyButton.default, {
47
49
  collection: collection,
48
50
  onSelectSku: onSelect
@@ -56,6 +56,7 @@ const StoreModalProduct = _ref => {
56
56
  body: /*#__PURE__*/_react.default.createElement(_react.Fragment, null, licensesPosition === 'top' && /*#__PURE__*/_react.default.createElement(_StoreModalProductLicenseSelection.default, {
57
57
  viewer: viewer
58
58
  }), collection && /*#__PURE__*/_react.default.createElement(_StoreModalFamily.default, {
59
+ title: "Select fonts",
59
60
  collection: collection,
60
61
  onSelect: handleSelectProduct
61
62
  }), collection === null || collection === void 0 ? void 0 : (_collection$children = collection.children) === null || _collection$children === void 0 ? void 0 : _collection$children.map(child => /*#__PURE__*/_react.default.createElement(_StoreModalFamily.default, {
@@ -3,6 +3,7 @@ interface LicenseElementProps {
3
3
  onClick: () => void;
4
4
  isSelected: boolean;
5
5
  children: {
6
+ description: string | null;
6
7
  name: React.ReactNode;
7
8
  variables: React.ReactNode;
8
9
  };
@@ -16,6 +16,7 @@ const LicenseElement = _ref => {
16
16
  onClick,
17
17
  isSelected,
18
18
  children: {
19
+ description,
19
20
  name,
20
21
  variables
21
22
  }
@@ -23,7 +24,9 @@ const LicenseElement = _ref => {
23
24
  const {
24
25
  form: config
25
26
  } = (0, _react.useContext)(_ConfigContext.default);
26
- return /*#__PURE__*/_react.default.createElement(_Button.default, {
27
+ return /*#__PURE__*/_react.default.createElement("div", {
28
+ className: "store-modal__license-selection__license"
29
+ }, /*#__PURE__*/_react.default.createElement(_Button.default, {
27
30
  onClick: onClick,
28
31
  className: "store-modal__license-selection__license-button",
29
32
  "data-selected": isSelected
@@ -33,7 +36,12 @@ const LicenseElement = _ref => {
33
36
  className: "store-modal__license-selection__icon-pair"
34
37
  }, isSelected ? config.checkboxStyle === 'check' ? /*#__PURE__*/_react.default.createElement(_Icons.CheckboxChecked, null) : /*#__PURE__*/_react.default.createElement(_Icons.CheckboxCrossed, null) : /*#__PURE__*/_react.default.createElement(_Icons.Checkbox, null), name)), /*#__PURE__*/_react.default.createElement("div", {
35
38
  className: "store-modal__license-selection__variables"
36
- }, variables));
39
+ }, variables)), description && /*#__PURE__*/_react.default.createElement("div", {
40
+ className: "store-modal__license-selection__description",
41
+ dangerouslySetInnerHTML: {
42
+ __html: description
43
+ }
44
+ }));
37
45
  };
38
46
  var _default = LicenseElement;
39
47
  exports.default = _default;
@@ -41,7 +41,7 @@ function StoreModalProduceLicense(_ref) {
41
41
  let {
42
42
  license: licenseKey
43
43
  } = _ref;
44
- const license = (0, _reactRelay.useFragment)(_StoreModalProductLicense_license !== void 0 ? _StoreModalProductLicense_license : (_StoreModalProductLicense_license = require("../../__generated__/StoreModalProductLicense_license.graphql"), _StoreModalProductLicense_license.hash && _StoreModalProductLicense_license.hash !== "22e24165f79ce30a9190ace765d3d1ce" && console.error("The definition of 'StoreModalProductLicense_license' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data."), _StoreModalProductLicense_license), licenseKey);
44
+ const license = (0, _reactRelay.useFragment)(_StoreModalProductLicense_license !== void 0 ? _StoreModalProductLicense_license : (_StoreModalProductLicense_license = require("../../__generated__/StoreModalProductLicense_license.graphql"), _StoreModalProductLicense_license.hash && _StoreModalProductLicense_license.hash !== "5729815aeedac2b8ea39eaab0a986b48" && console.error("The definition of 'StoreModalProductLicense_license' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data."), _StoreModalProductLicense_license), licenseKey);
45
45
  const licenseOptions = (0, _reactRedux.useSelector)(state => state.licenseOptions);
46
46
  const selectedOptions = licenseOptions.find(_ref2 => {
47
47
  let {
@@ -90,6 +90,7 @@ function StoreModalProduceLicense(_ref) {
90
90
  isSelected: isSelected
91
91
  }, {
92
92
  name: license.name,
93
+ description: license.description,
93
94
  variables: license.variables && license.variables.map(variable => {
94
95
  if (variable.variableType === 'text') return null;
95
96
  if (!variable.options) return null;
@@ -129,7 +129,7 @@ const StoreModalProductSummary = _ref => {
129
129
  className: "store-modal__product-summary__nothing-selected"
130
130
  }, "Calculating price...") : /*#__PURE__*/_react.default.createElement("span", {
131
131
  className: "store-modal__product-summary__nothing-selected"
132
- }, anySkusSelected ? 'Please select a license' : 'Please make a selection'), /*#__PURE__*/_react.default.createElement(_Button.default, {
132
+ }, anySkusSelected ? 'Please select a license' : 'Please select some fonts'), /*#__PURE__*/_react.default.createElement(_Button.default, {
133
133
  className: "store-modal__product-summary__add-to-cart-button",
134
134
  onClick: handleAddToCart,
135
135
  disabled: submitting || !hasSelection
@@ -1,4 +1,8 @@
1
1
  import React from 'react';
2
+ interface FontData {
3
+ name: string;
4
+ cssUrl: string | null;
5
+ }
2
6
  interface StoreModalContainerProps {
3
7
  onClickBackground?: () => void;
4
8
  onClickClose?: () => void;
@@ -6,8 +10,10 @@ interface StoreModalContainerProps {
6
10
  onClickCart?: () => void;
7
11
  showCartButton?: boolean;
8
12
  orderItemCount: number;
9
- uiFontUrl: string | null | undefined;
10
- uiFontName: string | null | undefined;
13
+ fonts: {
14
+ regular: FontData | null;
15
+ bold: FontData | null;
16
+ };
11
17
  children: {
12
18
  backText?: React.ReactNode;
13
19
  pageTitle: React.ReactNode;
@@ -8,6 +8,7 @@ var _react = _interopRequireWildcard(require("react"));
8
8
  var _Icons = require("../../Icons");
9
9
  var _StoreModalContainerContext = _interopRequireDefault(require("./StoreModalContainerContext"));
10
10
  var _Stylesheet = _interopRequireDefault(require("../../Stylesheet"));
11
+ var _utils = require("../../../utils");
11
12
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
13
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
13
14
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -19,8 +20,7 @@ const StoreModalContainer = _ref => {
19
20
  onClickCart,
20
21
  showCartButton,
21
22
  orderItemCount,
22
- uiFontUrl,
23
- uiFontName,
23
+ fonts,
24
24
  children: {
25
25
  backText,
26
26
  pageTitle,
@@ -41,16 +41,19 @@ const StoreModalContainer = _ref => {
41
41
  }
42
42
  }, /*#__PURE__*/_react.default.createElement("div", {
43
43
  className: "store-modal__container__overlay"
44
- }, uiFontUrl && /*#__PURE__*/_react.default.createElement(_Stylesheet.default, {
45
- href: uiFontUrl
46
- }), /*#__PURE__*/_react.default.createElement("div", {
44
+ }, [fonts.regular, fonts.bold].filter(_utils.notEmpty).map(font => /*#__PURE__*/_react.default.createElement(_Stylesheet.default, {
45
+ key: font.name,
46
+ href: font.cssUrl
47
+ })), /*#__PURE__*/_react.default.createElement("div", {
47
48
  className: "store-modal__container__background",
48
49
  onClick: onClickBackground
49
50
  }), /*#__PURE__*/_react.default.createElement("div", {
50
51
  className: "store-modal__container__container",
51
52
  ref: container,
52
53
  style: {
53
- fontFamily: uiFontName ? `"${uiFontName}"` : ''
54
+ '--font-family': fonts.regular ? `"${fonts.regular.name}"` : undefined,
55
+ '--font-family__bold': fonts.bold ? `"${fonts.bold.name}"` : undefined,
56
+ fontFamily: 'var(--font-family, inherit)'
54
57
  }
55
58
  }, /*#__PURE__*/_react.default.createElement("nav", {
56
59
  className: "store-modal__container__nav",
@@ -2,6 +2,7 @@ import React from 'react';
2
2
  interface StoreModalFamilyProps {
3
3
  children: {
4
4
  stylesheet: React.ReactElement | null;
5
+ title: React.ReactNode;
5
6
  familyButton: React.ReactElement;
6
7
  bundles?: React.ReactElement[] | null;
7
8
  styleGroups?: React.ReactElement[][] | null;
@@ -12,12 +12,15 @@ const StoreModalFamily = _ref => {
12
12
  stylesheet,
13
13
  bundles,
14
14
  familyButton,
15
- styleGroups
15
+ styleGroups,
16
+ title
16
17
  }
17
18
  } = _ref;
18
19
  return /*#__PURE__*/_react.default.createElement("div", {
19
20
  className: "store-modal__family__container"
20
- }, stylesheet, /*#__PURE__*/_react.default.cloneElement(familyButton, {
21
+ }, stylesheet, title && /*#__PURE__*/_react.default.createElement("h3", {
22
+ className: "store-modal__family__title"
23
+ }, title), /*#__PURE__*/_react.default.cloneElement(familyButton, {
21
24
  className: 'store-modal__family__family-button'
22
25
  }), bundles === null || bundles === void 0 ? void 0 : bundles.map(bundle => /*#__PURE__*/_react.default.cloneElement(bundle, {
23
26
  className: 'store-modal__family__bundle-button'
package/dist/fontdue.css CHANGED
@@ -1205,6 +1205,10 @@ body[data-fontdue-store-modal=open] {
1205
1205
  text-align: center;
1206
1206
  }
1207
1207
 
1208
+ .store-modal__container__title {
1209
+ font-family: var(--font-family__bold, inherit);
1210
+ }
1211
+
1208
1212
  .store-modal__container__buttons {
1209
1213
  text-align: right;
1210
1214
  }
@@ -1330,6 +1334,11 @@ body[data-fontdue-store-modal=open] {
1330
1334
  margin-bottom: 40px;
1331
1335
  }
1332
1336
 
1337
+ .store-modal__family__title {
1338
+ font-family: var(--font-family__bold, inherit);
1339
+ margin-bottom: 20px;
1340
+ }
1341
+
1333
1342
  .store-modal__family__group {
1334
1343
  display: grid;
1335
1344
  grid-template-columns: 1fr;
@@ -1510,6 +1519,11 @@ body[data-fontdue-store-modal=open] {
1510
1519
  }
1511
1520
 
1512
1521
  .store-modal__license-selection__title {
1522
+ font-family: var(--font-family__bold, inherit);
1523
+ margin-bottom: 20px;
1524
+ }
1525
+
1526
+ .store-modal__license-selection__license {
1513
1527
  margin-bottom: 20px;
1514
1528
  }
1515
1529
 
@@ -1532,7 +1546,6 @@ body[data-fontdue-store-modal=open] {
1532
1546
  box-sizing: border-box;
1533
1547
  display: block;
1534
1548
  width: 100%;
1535
- margin-bottom: 20px;
1536
1549
  display: flex;
1537
1550
  align-items: stretch;
1538
1551
  }
@@ -1566,6 +1579,10 @@ body[data-fontdue-store-modal=open] {
1566
1579
  margin-right: 8px;
1567
1580
  }
1568
1581
 
1582
+ .store-modal__license-selection__license-button + .store-modal__license-selection__description {
1583
+ margin-top: 10px;
1584
+ }
1585
+
1569
1586
  .store-modal__license-selection__license-button-label {
1570
1587
  flex: 2 0 40%;
1571
1588
  align-items: flex-start;
@@ -2387,8 +2404,8 @@ body[data-fontdue-store-modal=open] {
2387
2404
  padding-bottom: 50px;
2388
2405
  }
2389
2406
  .checkout-modal__customer-info-message {
2390
- font-size: 32px;
2391
- margin-bottom: 30px;
2407
+ font-family: var(--font-family__bold, inherit);
2408
+ margin-bottom: 20px;
2392
2409
  }
2393
2410
  .checkout-modal__customer-info-message .icon {
2394
2411
  display: none;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fontdue-js",
3
- "version": "2.4.1",
3
+ "version": "2.5.0",
4
4
  "scripts": {
5
5
  "build": "npm run relay && run-p build-js build-css build-ts-declarations",
6
6
  "build-js": "babel src --out-dir dist --extensions .ts,.tsx,.js,.jsx",