fontdue-js 3.12.1 → 3.13.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 +5 -0
  2. package/dist/__generated__/StoreModalFamily_collection.graphql.d.ts +1 -1
  3. package/dist/__generated__/StoreModalFamily_collection.graphql.js +8 -4
  4. package/dist/__generated__/StoreModalProductQuery.graphql.d.ts +1 -1
  5. package/dist/__generated__/StoreModalProductQuery.graphql.js +9 -5
  6. package/dist/__generated__/StoreModalProductRefetchQuery.graphql.d.ts +1 -1
  7. package/dist/__generated__/StoreModalProductRefetchQuery.graphql.js +9 -5
  8. package/dist/__generated__/StoreModalProductSlugQuery.graphql.d.ts +1 -1
  9. package/dist/__generated__/StoreModalProductSlugQuery.graphql.js +9 -5
  10. package/dist/__generated__/productState_Query.graphql.d.ts +1 -29
  11. package/dist/__generated__/productState_Query.graphql.js +15 -30
  12. package/dist/__generated__/productState_collection.graphql.d.ts +1 -1
  13. package/dist/__generated__/productState_collection.graphql.js +8 -4
  14. package/dist/__generated__/productState_fontPack.graphql.d.ts +1 -1
  15. package/dist/__generated__/productState_fontPack.graphql.js +7 -3
  16. package/dist/__generated__/productState_node.graphql.d.ts +1 -29
  17. package/dist/__generated__/productState_node.graphql.js +8 -22
  18. package/dist/__tests__/bundleSelectionOrder.test.js +0 -1
  19. package/dist/__tests__/collectionBundleSelection.test.js +31 -6
  20. package/dist/components/Root/productState.js +7 -33
  21. package/dist/components/StoreModal/StoreModalFamily.js +9 -5
  22. package/dist/fontdue.css +8 -0
  23. package/dist/version.js +1 -1
  24. package/package.json +1 -1
  25. package/dist/__generated__/productState_collectionBundle.graphql.d.ts +0 -41
  26. package/dist/__generated__/productState_collectionBundle.graphql.js +0 -81
package/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## 3.13.0
2
+
3
+ - `StoreModal` offers a superfamily’s bundles that mix styles from several of its families, or styles alongside whole families, and shows a superfamily’s bundles even when the superfamily has no price of its own.
4
+ - Fixed the `StoreModal`’s list of collections putting *Buy* right after the name, instead of at the row’s right edge, on rows with no “Aa” sample – every row with `indexLayout: 'styled-font-names'`.
5
+
1
6
  ## 3.12.1
2
7
 
3
8
  - Fixed a `TypeTester`’s style menu showing only the current style on the first click, most visibly in Safari. The style list now loads as the type tester nears the viewport.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @generated SignedSource<<6c31f5ae3be50d8f352ff54f1dcefcf1>>
2
+ * @generated SignedSource<<a7931c30cf5e8e57f8a445e99e660127>>
3
3
  * @lightSyntaxTransform
4
4
  * @nogrep
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @generated SignedSource<<6c31f5ae3be50d8f352ff54f1dcefcf1>>
2
+ * @generated SignedSource<<a7931c30cf5e8e57f8a445e99e660127>>
3
3
  * @lightSyntaxTransform
4
4
  * @nogrep
5
5
  */
@@ -91,7 +91,11 @@ const node = function () {
91
91
  "storageKey": null
92
92
  }, {
93
93
  "alias": null,
94
- "args": null,
94
+ "args": [{
95
+ "kind": "Literal",
96
+ "name": "acrossFamilies",
97
+ "value": true
98
+ }],
95
99
  "concreteType": "Bundle",
96
100
  "kind": "LinkedField",
97
101
  "name": "bundles",
@@ -116,7 +120,7 @@ const node = function () {
116
120
  "kind": "FragmentSpread",
117
121
  "name": "StoreModalBundleButton_bundle"
118
122
  }],
119
- "storageKey": null
123
+ "storageKey": "bundles(acrossFamilies:true)"
120
124
  }, {
121
125
  "alias": null,
122
126
  "args": null,
@@ -137,5 +141,5 @@ const node = function () {
137
141
  "abstractKey": null
138
142
  };
139
143
  }();
140
- node.hash = "f136cd0050f0f75f561221fac75feb85";
144
+ node.hash = "9f2a8cd937ebe2c06f2bf771d38de985";
141
145
  export default node;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @generated SignedSource<<707ad44162117449e3674411f5f6f383>>
2
+ * @generated SignedSource<<6879b49c7ed4c15239072fdee19e8663>>
3
3
  * @lightSyntaxTransform
4
4
  * @nogrep
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @generated SignedSource<<707ad44162117449e3674411f5f6f383>>
2
+ * @generated SignedSource<<6879b49c7ed4c15239072fdee19e8663>>
3
3
  * @lightSyntaxTransform
4
4
  * @nogrep
5
5
  */
@@ -288,7 +288,11 @@ const node = function () {
288
288
  },
289
289
  v30 = {
290
290
  "alias": null,
291
- "args": null,
291
+ "args": [{
292
+ "kind": "Literal",
293
+ "name": "acrossFamilies",
294
+ "value": true
295
+ }],
292
296
  "concreteType": "Bundle",
293
297
  "kind": "LinkedField",
294
298
  "name": "bundles",
@@ -303,7 +307,7 @@ const node = function () {
303
307
  "selections": [v4 /*: any*/, v18 /*: any*/, v27 /*: any*/, v28 /*: any*/, v12 /*: any*/, v22 /*: any*/, v29 /*: any*/, v15 /*: any*/, v20 /*: any*/, v21 /*: any*/],
304
308
  "storageKey": null
305
309
  }, v12 /*: any*/, v15 /*: any*/],
306
- "storageKey": null
310
+ "storageKey": "bundles(acrossFamilies:true)"
307
311
  },
308
312
  v31 = {
309
313
  "alias": null,
@@ -774,12 +778,12 @@ const node = function () {
774
778
  }]
775
779
  },
776
780
  "params": {
777
- "cacheID": "02189659d07ea5233232f832804173b7",
781
+ "cacheID": "38b9ac37413b2104a1a786bdd185db13",
778
782
  "id": null,
779
783
  "metadata": {},
780
784
  "name": "StoreModalProductQuery",
781
785
  "operationKind": "query",
782
- "text": "query StoreModalProductQuery(\n $productId: ID!\n $licenseOptions: [LicenseOptionsSpec]!\n $orderVariables: [OrderVariableSelectionInput!]\n) {\n collection: node(id: $productId) {\n __typename\n id\n ...StoreModalProductContent_collection_4sncub\n }\n viewer {\n ...StoreModalProductViewer_4sncub\n id\n }\n}\n\nfragment FontStyle_fontStyle on FontStyle {\n ...useFontStyle_fontStyle\n}\n\nfragment OrderVariableSelectionRedux_viewer_2ZguDv on Viewer {\n ...OrderVariableSelection_variables_2ZguDv\n detectedCountry\n orderVariables {\n id\n variableType\n }\n}\n\nfragment OrderVariableSelection_variables_2ZguDv on Viewer {\n orderVariables {\n id\n name\n variableType\n description(format: HTML, orderVariables: $orderVariables)\n orderVariableOptions {\n id\n amount\n }\n }\n countries {\n code\n name\n }\n}\n\nfragment Price_price on Money {\n amount\n currency\n}\n\nfragment SKUPrice_sku_4sncub on Sku {\n id\n price(licenseOptions: $licenseOptions, orderVariables: $orderVariables) {\n amount\n ...Price_price\n }\n}\n\nfragment StoreModalBundleButton_bundle_4sncub on Bundle {\n id\n name\n sku {\n ...SKUPrice_sku_4sncub\n id\n }\n fontStyles {\n id\n ...FontStyle_fontStyle\n }\n}\n\nfragment StoreModalFamilyButton_collection_4sncub on FontCollection {\n isVariableFont\n collectionType\n name\n sku {\n ...SKUPrice_sku_4sncub\n id\n }\n parent {\n id\n }\n featureStyle {\n ...FontStyle_fontStyle\n supportedLanguages\n id\n }\n totalStyles\n totalStylesPrice {\n ...Price_price\n }\n ...useTotalStyles_fontCollection\n}\n\nfragment StoreModalFamily_collection_4sncub on FontCollection {\n ...StoreModalFamilyButton_collection_4sncub\n collectionType\n sku {\n id\n }\n isVariableFont\n bundles {\n id\n visibility\n fontStyles {\n id\n cssFamily\n cssWeight\n cssStretch\n ...StoreModalStyleButton_fontStyle_4sncub\n }\n ...StoreModalBundleButton_bundle_4sncub\n }\n fontStyles {\n id\n cssFamily\n cssWeight\n cssStretch\n cssStyle\n ...StoreModalStyleButton_fontStyle_4sncub\n }\n}\n\nfragment StoreModalPackButton_fontPack_4sncub on FontPack {\n name\n sku {\n ...SKUPrice_sku_4sncub\n id\n price(licenseOptions: $licenseOptions, orderVariables: $orderVariables) {\n amount\n }\n }\n featureStyle {\n ...FontStyle_fontStyle\n supportedLanguages\n id\n }\n totalStyles\n totalStylesPrice(licenseOptions: $licenseOptions, orderVariables: $orderVariables) {\n amount\n ...Price_price\n }\n}\n\nfragment StoreModalPack_fontPack_4sncub on FontPack {\n ...StoreModalPackButton_fontPack_4sncub\n members {\n __typename\n ... on FontStyle {\n id\n cssFamily\n cssWeight\n cssStretch\n cssStyle\n family {\n id\n name\n isVariableFont\n visibility\n }\n ...StoreModalStyleButton_fontStyle_4sncub\n }\n ... on FontCollection {\n id\n visibility\n ...StoreModalFamily_collection_4sncub\n children(collectionTypes: [FAMILY]) {\n id\n visibility\n ...StoreModalFamily_collection_4sncub\n }\n }\n ... on Node {\n __isNode: __typename\n id\n }\n }\n}\n\nfragment StoreModalProductContent_collection_4sncub on Node {\n __isNode: __typename\n __typename\n ... on FontCollection {\n id\n visibility\n ...StoreModalFamily_collection_4sncub\n ...StoreModalProductLicenseSelection_licenseable\n children(collectionTypes: [FAMILY]) {\n id\n visibility\n ...StoreModalFamily_collection_4sncub\n }\n }\n ... on FontPack {\n id\n ...StoreModalPack_fontPack_4sncub\n ...StoreModalProductLicenseSelection_licenseable\n }\n id\n}\n\nfragment StoreModalProductLicenseSelection_licenseable on Licenseable {\n __isLicenseable: __typename\n id\n licenses {\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 excludedLicenses {\n id\n }\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_4sncub on Viewer {\n settings {\n taxSystem\n stripeTaxSettings {\n taxBehavior\n }\n }\n taxCollections {\n taxName\n inclusive\n }\n orderVariables {\n id\n variableType\n name\n }\n precart(skuIds: [], licenseOptions: $licenseOptions, orderVariables: $orderVariables) {\n skus {\n price(licenseOptions: $licenseOptions, orderVariables: $orderVariables) {\n amount\n }\n product {\n __typename\n ... on FontCollection {\n totalStyles\n totalStylesPrice(licenseOptions: $licenseOptions, orderVariables: $orderVariables) {\n amount\n }\n }\n ... on Bundle {\n totalStyles\n totalStylesPrice(licenseOptions: $licenseOptions, orderVariables: $orderVariables) {\n amount\n }\n }\n ... on CollectionBundle {\n totalStyles\n totalStylesPrice(licenseOptions: $licenseOptions, orderVariables: $orderVariables) {\n amount\n }\n }\n ... on FontPack {\n totalStyles\n totalStylesPrice(licenseOptions: $licenseOptions, orderVariables: $orderVariables) {\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 StoreModalProductViewer_4sncub on Viewer {\n endpoint\n stripeAccountId\n ...OrderVariableSelectionRedux_viewer_2ZguDv\n ...StoreModalProductSummary_viewer_4sncub\n orderVariables {\n id\n variableType\n name\n }\n settings {\n storeModalSelectLicenseeLabel(format: HTML)\n storeModalLicenseeSelfLabel(format: HTML)\n storeModalLicenseeSelfDescription(format: HTML)\n storeModalLicenseeClientLabel(format: HTML)\n storeModalLicenseeClientDescription(format: HTML)\n storeModalSelectOrderVariablesLabel(format: HTML)\n storeModalSelectLicensesLabel(format: HTML)\n storeModalSelectFontsLabel(format: HTML)\n }\n}\n\nfragment StoreModalStyleButton_fontStyle_4sncub on FontStyle {\n id\n name\n supportedLanguages\n variableInstances {\n name\n coordinates {\n axis\n value\n }\n }\n sku {\n ...SKUPrice_sku_4sncub\n id\n }\n ...FontStyle_fontStyle\n}\n\nfragment VariableTableAmounts_option on LicenseOption {\n amounts\n}\n\nfragment VariableTableAmounts_variable on LicenseVariable {\n units\n}\n\nfragment useFontStyle_fontStyle on FontStyle {\n cssFamily\n name\n webfontSources {\n url\n format\n tech\n }\n verticalMetrics {\n unitsPerEm\n ascender\n descender\n lineGap\n avgCharWidth\n }\n}\n\nfragment useTotalStyles_fontCollection on FontCollection {\n isVariableFont\n totalStyles\n children(collectionTypes: [FAMILY]) {\n isVariableFont\n totalStyles\n id\n }\n}\n"
786
+ "text": "query StoreModalProductQuery(\n $productId: ID!\n $licenseOptions: [LicenseOptionsSpec]!\n $orderVariables: [OrderVariableSelectionInput!]\n) {\n collection: node(id: $productId) {\n __typename\n id\n ...StoreModalProductContent_collection_4sncub\n }\n viewer {\n ...StoreModalProductViewer_4sncub\n id\n }\n}\n\nfragment FontStyle_fontStyle on FontStyle {\n ...useFontStyle_fontStyle\n}\n\nfragment OrderVariableSelectionRedux_viewer_2ZguDv on Viewer {\n ...OrderVariableSelection_variables_2ZguDv\n detectedCountry\n orderVariables {\n id\n variableType\n }\n}\n\nfragment OrderVariableSelection_variables_2ZguDv on Viewer {\n orderVariables {\n id\n name\n variableType\n description(format: HTML, orderVariables: $orderVariables)\n orderVariableOptions {\n id\n amount\n }\n }\n countries {\n code\n name\n }\n}\n\nfragment Price_price on Money {\n amount\n currency\n}\n\nfragment SKUPrice_sku_4sncub on Sku {\n id\n price(licenseOptions: $licenseOptions, orderVariables: $orderVariables) {\n amount\n ...Price_price\n }\n}\n\nfragment StoreModalBundleButton_bundle_4sncub on Bundle {\n id\n name\n sku {\n ...SKUPrice_sku_4sncub\n id\n }\n fontStyles {\n id\n ...FontStyle_fontStyle\n }\n}\n\nfragment StoreModalFamilyButton_collection_4sncub on FontCollection {\n isVariableFont\n collectionType\n name\n sku {\n ...SKUPrice_sku_4sncub\n id\n }\n parent {\n id\n }\n featureStyle {\n ...FontStyle_fontStyle\n supportedLanguages\n id\n }\n totalStyles\n totalStylesPrice {\n ...Price_price\n }\n ...useTotalStyles_fontCollection\n}\n\nfragment StoreModalFamily_collection_4sncub on FontCollection {\n ...StoreModalFamilyButton_collection_4sncub\n collectionType\n sku {\n id\n }\n isVariableFont\n bundles(acrossFamilies: true) {\n id\n visibility\n fontStyles {\n id\n cssFamily\n cssWeight\n cssStretch\n ...StoreModalStyleButton_fontStyle_4sncub\n }\n ...StoreModalBundleButton_bundle_4sncub\n }\n fontStyles {\n id\n cssFamily\n cssWeight\n cssStretch\n cssStyle\n ...StoreModalStyleButton_fontStyle_4sncub\n }\n}\n\nfragment StoreModalPackButton_fontPack_4sncub on FontPack {\n name\n sku {\n ...SKUPrice_sku_4sncub\n id\n price(licenseOptions: $licenseOptions, orderVariables: $orderVariables) {\n amount\n }\n }\n featureStyle {\n ...FontStyle_fontStyle\n supportedLanguages\n id\n }\n totalStyles\n totalStylesPrice(licenseOptions: $licenseOptions, orderVariables: $orderVariables) {\n amount\n ...Price_price\n }\n}\n\nfragment StoreModalPack_fontPack_4sncub on FontPack {\n ...StoreModalPackButton_fontPack_4sncub\n members {\n __typename\n ... on FontStyle {\n id\n cssFamily\n cssWeight\n cssStretch\n cssStyle\n family {\n id\n name\n isVariableFont\n visibility\n }\n ...StoreModalStyleButton_fontStyle_4sncub\n }\n ... on FontCollection {\n id\n visibility\n ...StoreModalFamily_collection_4sncub\n children(collectionTypes: [FAMILY]) {\n id\n visibility\n ...StoreModalFamily_collection_4sncub\n }\n }\n ... on Node {\n __isNode: __typename\n id\n }\n }\n}\n\nfragment StoreModalProductContent_collection_4sncub on Node {\n __isNode: __typename\n __typename\n ... on FontCollection {\n id\n visibility\n ...StoreModalFamily_collection_4sncub\n ...StoreModalProductLicenseSelection_licenseable\n children(collectionTypes: [FAMILY]) {\n id\n visibility\n ...StoreModalFamily_collection_4sncub\n }\n }\n ... on FontPack {\n id\n ...StoreModalPack_fontPack_4sncub\n ...StoreModalProductLicenseSelection_licenseable\n }\n id\n}\n\nfragment StoreModalProductLicenseSelection_licenseable on Licenseable {\n __isLicenseable: __typename\n id\n licenses {\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 excludedLicenses {\n id\n }\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_4sncub on Viewer {\n settings {\n taxSystem\n stripeTaxSettings {\n taxBehavior\n }\n }\n taxCollections {\n taxName\n inclusive\n }\n orderVariables {\n id\n variableType\n name\n }\n precart(skuIds: [], licenseOptions: $licenseOptions, orderVariables: $orderVariables) {\n skus {\n price(licenseOptions: $licenseOptions, orderVariables: $orderVariables) {\n amount\n }\n product {\n __typename\n ... on FontCollection {\n totalStyles\n totalStylesPrice(licenseOptions: $licenseOptions, orderVariables: $orderVariables) {\n amount\n }\n }\n ... on Bundle {\n totalStyles\n totalStylesPrice(licenseOptions: $licenseOptions, orderVariables: $orderVariables) {\n amount\n }\n }\n ... on CollectionBundle {\n totalStyles\n totalStylesPrice(licenseOptions: $licenseOptions, orderVariables: $orderVariables) {\n amount\n }\n }\n ... on FontPack {\n totalStyles\n totalStylesPrice(licenseOptions: $licenseOptions, orderVariables: $orderVariables) {\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 StoreModalProductViewer_4sncub on Viewer {\n endpoint\n stripeAccountId\n ...OrderVariableSelectionRedux_viewer_2ZguDv\n ...StoreModalProductSummary_viewer_4sncub\n orderVariables {\n id\n variableType\n name\n }\n settings {\n storeModalSelectLicenseeLabel(format: HTML)\n storeModalLicenseeSelfLabel(format: HTML)\n storeModalLicenseeSelfDescription(format: HTML)\n storeModalLicenseeClientLabel(format: HTML)\n storeModalLicenseeClientDescription(format: HTML)\n storeModalSelectOrderVariablesLabel(format: HTML)\n storeModalSelectLicensesLabel(format: HTML)\n storeModalSelectFontsLabel(format: HTML)\n }\n}\n\nfragment StoreModalStyleButton_fontStyle_4sncub on FontStyle {\n id\n name\n supportedLanguages\n variableInstances {\n name\n coordinates {\n axis\n value\n }\n }\n sku {\n ...SKUPrice_sku_4sncub\n id\n }\n ...FontStyle_fontStyle\n}\n\nfragment VariableTableAmounts_option on LicenseOption {\n amounts\n}\n\nfragment VariableTableAmounts_variable on LicenseVariable {\n units\n}\n\nfragment useFontStyle_fontStyle on FontStyle {\n cssFamily\n name\n webfontSources {\n url\n format\n tech\n }\n verticalMetrics {\n unitsPerEm\n ascender\n descender\n lineGap\n avgCharWidth\n }\n}\n\nfragment useTotalStyles_fontCollection on FontCollection {\n isVariableFont\n totalStyles\n children(collectionTypes: [FAMILY]) {\n isVariableFont\n totalStyles\n id\n }\n}\n"
783
787
  }
784
788
  };
785
789
  }();
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @generated SignedSource<<3b8420bd66bdd1d36ec4ab67e6ade582>>
2
+ * @generated SignedSource<<5ff6991d572efd3da82bb9b8bc8c60de>>
3
3
  * @lightSyntaxTransform
4
4
  * @nogrep
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @generated SignedSource<<3b8420bd66bdd1d36ec4ab67e6ade582>>
2
+ * @generated SignedSource<<5ff6991d572efd3da82bb9b8bc8c60de>>
3
3
  * @lightSyntaxTransform
4
4
  * @nogrep
5
5
  */
@@ -286,7 +286,11 @@ const node = function () {
286
286
  },
287
287
  v28 = {
288
288
  "alias": null,
289
- "args": null,
289
+ "args": [{
290
+ "kind": "Literal",
291
+ "name": "acrossFamilies",
292
+ "value": true
293
+ }],
290
294
  "concreteType": "Bundle",
291
295
  "kind": "LinkedField",
292
296
  "name": "bundles",
@@ -301,7 +305,7 @@ const node = function () {
301
305
  "selections": [v6 /*: any*/, v16 /*: any*/, v25 /*: any*/, v26 /*: any*/, v10 /*: any*/, v20 /*: any*/, v27 /*: any*/, v13 /*: any*/, v18 /*: any*/, v19 /*: any*/],
302
306
  "storageKey": null
303
307
  }, v10 /*: any*/, v13 /*: any*/],
304
- "storageKey": null
308
+ "storageKey": "bundles(acrossFamilies:true)"
305
309
  },
306
310
  v29 = {
307
311
  "alias": null,
@@ -510,12 +514,12 @@ const node = function () {
510
514
  }]
511
515
  },
512
516
  "params": {
513
- "cacheID": "e76946d384161bdec43aed745ea8b411",
517
+ "cacheID": "60bff65fb72623a576209940b959d91c",
514
518
  "id": null,
515
519
  "metadata": {},
516
520
  "name": "StoreModalProductRefetchQuery",
517
521
  "operationKind": "query",
518
- "text": "query StoreModalProductRefetchQuery(\n $licenseOptions: [LicenseOptionsSpec]!\n $orderVariables: [OrderVariableSelectionInput!]\n $id: ID!\n) {\n node(id: $id) {\n __typename\n ...StoreModalProductContent_collection_4sncub\n id\n }\n}\n\nfragment FontStyle_fontStyle on FontStyle {\n ...useFontStyle_fontStyle\n}\n\nfragment Price_price on Money {\n amount\n currency\n}\n\nfragment SKUPrice_sku_4sncub on Sku {\n id\n price(licenseOptions: $licenseOptions, orderVariables: $orderVariables) {\n amount\n ...Price_price\n }\n}\n\nfragment StoreModalBundleButton_bundle_4sncub on Bundle {\n id\n name\n sku {\n ...SKUPrice_sku_4sncub\n id\n }\n fontStyles {\n id\n ...FontStyle_fontStyle\n }\n}\n\nfragment StoreModalFamilyButton_collection_4sncub on FontCollection {\n isVariableFont\n collectionType\n name\n sku {\n ...SKUPrice_sku_4sncub\n id\n }\n parent {\n id\n }\n featureStyle {\n ...FontStyle_fontStyle\n supportedLanguages\n id\n }\n totalStyles\n totalStylesPrice {\n ...Price_price\n }\n ...useTotalStyles_fontCollection\n}\n\nfragment StoreModalFamily_collection_4sncub on FontCollection {\n ...StoreModalFamilyButton_collection_4sncub\n collectionType\n sku {\n id\n }\n isVariableFont\n bundles {\n id\n visibility\n fontStyles {\n id\n cssFamily\n cssWeight\n cssStretch\n ...StoreModalStyleButton_fontStyle_4sncub\n }\n ...StoreModalBundleButton_bundle_4sncub\n }\n fontStyles {\n id\n cssFamily\n cssWeight\n cssStretch\n cssStyle\n ...StoreModalStyleButton_fontStyle_4sncub\n }\n}\n\nfragment StoreModalPackButton_fontPack_4sncub on FontPack {\n name\n sku {\n ...SKUPrice_sku_4sncub\n id\n price(licenseOptions: $licenseOptions, orderVariables: $orderVariables) {\n amount\n }\n }\n featureStyle {\n ...FontStyle_fontStyle\n supportedLanguages\n id\n }\n totalStyles\n totalStylesPrice(licenseOptions: $licenseOptions, orderVariables: $orderVariables) {\n amount\n ...Price_price\n }\n}\n\nfragment StoreModalPack_fontPack_4sncub on FontPack {\n ...StoreModalPackButton_fontPack_4sncub\n members {\n __typename\n ... on FontStyle {\n id\n cssFamily\n cssWeight\n cssStretch\n cssStyle\n family {\n id\n name\n isVariableFont\n visibility\n }\n ...StoreModalStyleButton_fontStyle_4sncub\n }\n ... on FontCollection {\n id\n visibility\n ...StoreModalFamily_collection_4sncub\n children(collectionTypes: [FAMILY]) {\n id\n visibility\n ...StoreModalFamily_collection_4sncub\n }\n }\n ... on Node {\n __isNode: __typename\n id\n }\n }\n}\n\nfragment StoreModalProductContent_collection_4sncub on Node {\n __isNode: __typename\n __typename\n ... on FontCollection {\n id\n visibility\n ...StoreModalFamily_collection_4sncub\n ...StoreModalProductLicenseSelection_licenseable\n children(collectionTypes: [FAMILY]) {\n id\n visibility\n ...StoreModalFamily_collection_4sncub\n }\n }\n ... on FontPack {\n id\n ...StoreModalPack_fontPack_4sncub\n ...StoreModalProductLicenseSelection_licenseable\n }\n id\n}\n\nfragment StoreModalProductLicenseSelection_licenseable on Licenseable {\n __isLicenseable: __typename\n id\n licenses {\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 excludedLicenses {\n id\n }\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 StoreModalStyleButton_fontStyle_4sncub on FontStyle {\n id\n name\n supportedLanguages\n variableInstances {\n name\n coordinates {\n axis\n value\n }\n }\n sku {\n ...SKUPrice_sku_4sncub\n id\n }\n ...FontStyle_fontStyle\n}\n\nfragment VariableTableAmounts_option on LicenseOption {\n amounts\n}\n\nfragment VariableTableAmounts_variable on LicenseVariable {\n units\n}\n\nfragment useFontStyle_fontStyle on FontStyle {\n cssFamily\n name\n webfontSources {\n url\n format\n tech\n }\n verticalMetrics {\n unitsPerEm\n ascender\n descender\n lineGap\n avgCharWidth\n }\n}\n\nfragment useTotalStyles_fontCollection on FontCollection {\n isVariableFont\n totalStyles\n children(collectionTypes: [FAMILY]) {\n isVariableFont\n totalStyles\n id\n }\n}\n"
522
+ "text": "query StoreModalProductRefetchQuery(\n $licenseOptions: [LicenseOptionsSpec]!\n $orderVariables: [OrderVariableSelectionInput!]\n $id: ID!\n) {\n node(id: $id) {\n __typename\n ...StoreModalProductContent_collection_4sncub\n id\n }\n}\n\nfragment FontStyle_fontStyle on FontStyle {\n ...useFontStyle_fontStyle\n}\n\nfragment Price_price on Money {\n amount\n currency\n}\n\nfragment SKUPrice_sku_4sncub on Sku {\n id\n price(licenseOptions: $licenseOptions, orderVariables: $orderVariables) {\n amount\n ...Price_price\n }\n}\n\nfragment StoreModalBundleButton_bundle_4sncub on Bundle {\n id\n name\n sku {\n ...SKUPrice_sku_4sncub\n id\n }\n fontStyles {\n id\n ...FontStyle_fontStyle\n }\n}\n\nfragment StoreModalFamilyButton_collection_4sncub on FontCollection {\n isVariableFont\n collectionType\n name\n sku {\n ...SKUPrice_sku_4sncub\n id\n }\n parent {\n id\n }\n featureStyle {\n ...FontStyle_fontStyle\n supportedLanguages\n id\n }\n totalStyles\n totalStylesPrice {\n ...Price_price\n }\n ...useTotalStyles_fontCollection\n}\n\nfragment StoreModalFamily_collection_4sncub on FontCollection {\n ...StoreModalFamilyButton_collection_4sncub\n collectionType\n sku {\n id\n }\n isVariableFont\n bundles(acrossFamilies: true) {\n id\n visibility\n fontStyles {\n id\n cssFamily\n cssWeight\n cssStretch\n ...StoreModalStyleButton_fontStyle_4sncub\n }\n ...StoreModalBundleButton_bundle_4sncub\n }\n fontStyles {\n id\n cssFamily\n cssWeight\n cssStretch\n cssStyle\n ...StoreModalStyleButton_fontStyle_4sncub\n }\n}\n\nfragment StoreModalPackButton_fontPack_4sncub on FontPack {\n name\n sku {\n ...SKUPrice_sku_4sncub\n id\n price(licenseOptions: $licenseOptions, orderVariables: $orderVariables) {\n amount\n }\n }\n featureStyle {\n ...FontStyle_fontStyle\n supportedLanguages\n id\n }\n totalStyles\n totalStylesPrice(licenseOptions: $licenseOptions, orderVariables: $orderVariables) {\n amount\n ...Price_price\n }\n}\n\nfragment StoreModalPack_fontPack_4sncub on FontPack {\n ...StoreModalPackButton_fontPack_4sncub\n members {\n __typename\n ... on FontStyle {\n id\n cssFamily\n cssWeight\n cssStretch\n cssStyle\n family {\n id\n name\n isVariableFont\n visibility\n }\n ...StoreModalStyleButton_fontStyle_4sncub\n }\n ... on FontCollection {\n id\n visibility\n ...StoreModalFamily_collection_4sncub\n children(collectionTypes: [FAMILY]) {\n id\n visibility\n ...StoreModalFamily_collection_4sncub\n }\n }\n ... on Node {\n __isNode: __typename\n id\n }\n }\n}\n\nfragment StoreModalProductContent_collection_4sncub on Node {\n __isNode: __typename\n __typename\n ... on FontCollection {\n id\n visibility\n ...StoreModalFamily_collection_4sncub\n ...StoreModalProductLicenseSelection_licenseable\n children(collectionTypes: [FAMILY]) {\n id\n visibility\n ...StoreModalFamily_collection_4sncub\n }\n }\n ... on FontPack {\n id\n ...StoreModalPack_fontPack_4sncub\n ...StoreModalProductLicenseSelection_licenseable\n }\n id\n}\n\nfragment StoreModalProductLicenseSelection_licenseable on Licenseable {\n __isLicenseable: __typename\n id\n licenses {\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 excludedLicenses {\n id\n }\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 StoreModalStyleButton_fontStyle_4sncub on FontStyle {\n id\n name\n supportedLanguages\n variableInstances {\n name\n coordinates {\n axis\n value\n }\n }\n sku {\n ...SKUPrice_sku_4sncub\n id\n }\n ...FontStyle_fontStyle\n}\n\nfragment VariableTableAmounts_option on LicenseOption {\n amounts\n}\n\nfragment VariableTableAmounts_variable on LicenseVariable {\n units\n}\n\nfragment useFontStyle_fontStyle on FontStyle {\n cssFamily\n name\n webfontSources {\n url\n format\n tech\n }\n verticalMetrics {\n unitsPerEm\n ascender\n descender\n lineGap\n avgCharWidth\n }\n}\n\nfragment useTotalStyles_fontCollection on FontCollection {\n isVariableFont\n totalStyles\n children(collectionTypes: [FAMILY]) {\n isVariableFont\n totalStyles\n id\n }\n}\n"
519
523
  }
520
524
  };
521
525
  }();
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @generated SignedSource<<5a1f99f864f7661fe006d3119e6d7c7f>>
2
+ * @generated SignedSource<<b23803b39edffe24d06bd453e4126256>>
3
3
  * @lightSyntaxTransform
4
4
  * @nogrep
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @generated SignedSource<<5a1f99f864f7661fe006d3119e6d7c7f>>
2
+ * @generated SignedSource<<b23803b39edffe24d06bd453e4126256>>
3
3
  * @lightSyntaxTransform
4
4
  * @nogrep
5
5
  */
@@ -293,7 +293,11 @@ const node = function () {
293
293
  },
294
294
  v31 = {
295
295
  "alias": null,
296
- "args": null,
296
+ "args": [{
297
+ "kind": "Literal",
298
+ "name": "acrossFamilies",
299
+ "value": true
300
+ }],
297
301
  "concreteType": "Bundle",
298
302
  "kind": "LinkedField",
299
303
  "name": "bundles",
@@ -308,7 +312,7 @@ const node = function () {
308
312
  "selections": [v4 /*: any*/, v19 /*: any*/, v28 /*: any*/, v29 /*: any*/, v13 /*: any*/, v23 /*: any*/, v30 /*: any*/, v16 /*: any*/, v21 /*: any*/, v22 /*: any*/],
309
313
  "storageKey": null
310
314
  }, v13 /*: any*/, v16 /*: any*/],
311
- "storageKey": null
315
+ "storageKey": "bundles(acrossFamilies:true)"
312
316
  },
313
317
  v32 = {
314
318
  "alias": null,
@@ -814,12 +818,12 @@ const node = function () {
814
818
  }]
815
819
  },
816
820
  "params": {
817
- "cacheID": "15c4e68db3f3b5c73c62182dd26404ac",
821
+ "cacheID": "5393d2c838943cbce941bcca7dd5aa4d",
818
822
  "id": null,
819
823
  "metadata": {},
820
824
  "name": "StoreModalProductSlugQuery",
821
825
  "operationKind": "query",
822
- "text": "query StoreModalProductSlugQuery(\n $productSlug: String!\n $licenseOptions: [LicenseOptionsSpec]!\n $orderVariables: [OrderVariableSelectionInput!]\n) {\n viewer {\n slug(name: $productSlug) {\n collection: fontCollection {\n id\n ...StoreModalProductContent_collection_4sncub\n }\n pack: fontPack {\n id\n ...StoreModalProductContent_collection_4sncub\n }\n id\n }\n ...StoreModalProductViewer_4sncub\n id\n }\n}\n\nfragment FontStyle_fontStyle on FontStyle {\n ...useFontStyle_fontStyle\n}\n\nfragment OrderVariableSelectionRedux_viewer_2ZguDv on Viewer {\n ...OrderVariableSelection_variables_2ZguDv\n detectedCountry\n orderVariables {\n id\n variableType\n }\n}\n\nfragment OrderVariableSelection_variables_2ZguDv on Viewer {\n orderVariables {\n id\n name\n variableType\n description(format: HTML, orderVariables: $orderVariables)\n orderVariableOptions {\n id\n amount\n }\n }\n countries {\n code\n name\n }\n}\n\nfragment Price_price on Money {\n amount\n currency\n}\n\nfragment SKUPrice_sku_4sncub on Sku {\n id\n price(licenseOptions: $licenseOptions, orderVariables: $orderVariables) {\n amount\n ...Price_price\n }\n}\n\nfragment StoreModalBundleButton_bundle_4sncub on Bundle {\n id\n name\n sku {\n ...SKUPrice_sku_4sncub\n id\n }\n fontStyles {\n id\n ...FontStyle_fontStyle\n }\n}\n\nfragment StoreModalFamilyButton_collection_4sncub on FontCollection {\n isVariableFont\n collectionType\n name\n sku {\n ...SKUPrice_sku_4sncub\n id\n }\n parent {\n id\n }\n featureStyle {\n ...FontStyle_fontStyle\n supportedLanguages\n id\n }\n totalStyles\n totalStylesPrice {\n ...Price_price\n }\n ...useTotalStyles_fontCollection\n}\n\nfragment StoreModalFamily_collection_4sncub on FontCollection {\n ...StoreModalFamilyButton_collection_4sncub\n collectionType\n sku {\n id\n }\n isVariableFont\n bundles {\n id\n visibility\n fontStyles {\n id\n cssFamily\n cssWeight\n cssStretch\n ...StoreModalStyleButton_fontStyle_4sncub\n }\n ...StoreModalBundleButton_bundle_4sncub\n }\n fontStyles {\n id\n cssFamily\n cssWeight\n cssStretch\n cssStyle\n ...StoreModalStyleButton_fontStyle_4sncub\n }\n}\n\nfragment StoreModalPackButton_fontPack_4sncub on FontPack {\n name\n sku {\n ...SKUPrice_sku_4sncub\n id\n price(licenseOptions: $licenseOptions, orderVariables: $orderVariables) {\n amount\n }\n }\n featureStyle {\n ...FontStyle_fontStyle\n supportedLanguages\n id\n }\n totalStyles\n totalStylesPrice(licenseOptions: $licenseOptions, orderVariables: $orderVariables) {\n amount\n ...Price_price\n }\n}\n\nfragment StoreModalPack_fontPack_4sncub on FontPack {\n ...StoreModalPackButton_fontPack_4sncub\n members {\n __typename\n ... on FontStyle {\n id\n cssFamily\n cssWeight\n cssStretch\n cssStyle\n family {\n id\n name\n isVariableFont\n visibility\n }\n ...StoreModalStyleButton_fontStyle_4sncub\n }\n ... on FontCollection {\n id\n visibility\n ...StoreModalFamily_collection_4sncub\n children(collectionTypes: [FAMILY]) {\n id\n visibility\n ...StoreModalFamily_collection_4sncub\n }\n }\n ... on Node {\n __isNode: __typename\n id\n }\n }\n}\n\nfragment StoreModalProductContent_collection_4sncub on Node {\n __isNode: __typename\n __typename\n ... on FontCollection {\n id\n visibility\n ...StoreModalFamily_collection_4sncub\n ...StoreModalProductLicenseSelection_licenseable\n children(collectionTypes: [FAMILY]) {\n id\n visibility\n ...StoreModalFamily_collection_4sncub\n }\n }\n ... on FontPack {\n id\n ...StoreModalPack_fontPack_4sncub\n ...StoreModalProductLicenseSelection_licenseable\n }\n id\n}\n\nfragment StoreModalProductLicenseSelection_licenseable on Licenseable {\n __isLicenseable: __typename\n id\n licenses {\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 excludedLicenses {\n id\n }\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_4sncub on Viewer {\n settings {\n taxSystem\n stripeTaxSettings {\n taxBehavior\n }\n }\n taxCollections {\n taxName\n inclusive\n }\n orderVariables {\n id\n variableType\n name\n }\n precart(skuIds: [], licenseOptions: $licenseOptions, orderVariables: $orderVariables) {\n skus {\n price(licenseOptions: $licenseOptions, orderVariables: $orderVariables) {\n amount\n }\n product {\n __typename\n ... on FontCollection {\n totalStyles\n totalStylesPrice(licenseOptions: $licenseOptions, orderVariables: $orderVariables) {\n amount\n }\n }\n ... on Bundle {\n totalStyles\n totalStylesPrice(licenseOptions: $licenseOptions, orderVariables: $orderVariables) {\n amount\n }\n }\n ... on CollectionBundle {\n totalStyles\n totalStylesPrice(licenseOptions: $licenseOptions, orderVariables: $orderVariables) {\n amount\n }\n }\n ... on FontPack {\n totalStyles\n totalStylesPrice(licenseOptions: $licenseOptions, orderVariables: $orderVariables) {\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 StoreModalProductViewer_4sncub on Viewer {\n endpoint\n stripeAccountId\n ...OrderVariableSelectionRedux_viewer_2ZguDv\n ...StoreModalProductSummary_viewer_4sncub\n orderVariables {\n id\n variableType\n name\n }\n settings {\n storeModalSelectLicenseeLabel(format: HTML)\n storeModalLicenseeSelfLabel(format: HTML)\n storeModalLicenseeSelfDescription(format: HTML)\n storeModalLicenseeClientLabel(format: HTML)\n storeModalLicenseeClientDescription(format: HTML)\n storeModalSelectOrderVariablesLabel(format: HTML)\n storeModalSelectLicensesLabel(format: HTML)\n storeModalSelectFontsLabel(format: HTML)\n }\n}\n\nfragment StoreModalStyleButton_fontStyle_4sncub on FontStyle {\n id\n name\n supportedLanguages\n variableInstances {\n name\n coordinates {\n axis\n value\n }\n }\n sku {\n ...SKUPrice_sku_4sncub\n id\n }\n ...FontStyle_fontStyle\n}\n\nfragment VariableTableAmounts_option on LicenseOption {\n amounts\n}\n\nfragment VariableTableAmounts_variable on LicenseVariable {\n units\n}\n\nfragment useFontStyle_fontStyle on FontStyle {\n cssFamily\n name\n webfontSources {\n url\n format\n tech\n }\n verticalMetrics {\n unitsPerEm\n ascender\n descender\n lineGap\n avgCharWidth\n }\n}\n\nfragment useTotalStyles_fontCollection on FontCollection {\n isVariableFont\n totalStyles\n children(collectionTypes: [FAMILY]) {\n isVariableFont\n totalStyles\n id\n }\n}\n"
826
+ "text": "query StoreModalProductSlugQuery(\n $productSlug: String!\n $licenseOptions: [LicenseOptionsSpec]!\n $orderVariables: [OrderVariableSelectionInput!]\n) {\n viewer {\n slug(name: $productSlug) {\n collection: fontCollection {\n id\n ...StoreModalProductContent_collection_4sncub\n }\n pack: fontPack {\n id\n ...StoreModalProductContent_collection_4sncub\n }\n id\n }\n ...StoreModalProductViewer_4sncub\n id\n }\n}\n\nfragment FontStyle_fontStyle on FontStyle {\n ...useFontStyle_fontStyle\n}\n\nfragment OrderVariableSelectionRedux_viewer_2ZguDv on Viewer {\n ...OrderVariableSelection_variables_2ZguDv\n detectedCountry\n orderVariables {\n id\n variableType\n }\n}\n\nfragment OrderVariableSelection_variables_2ZguDv on Viewer {\n orderVariables {\n id\n name\n variableType\n description(format: HTML, orderVariables: $orderVariables)\n orderVariableOptions {\n id\n amount\n }\n }\n countries {\n code\n name\n }\n}\n\nfragment Price_price on Money {\n amount\n currency\n}\n\nfragment SKUPrice_sku_4sncub on Sku {\n id\n price(licenseOptions: $licenseOptions, orderVariables: $orderVariables) {\n amount\n ...Price_price\n }\n}\n\nfragment StoreModalBundleButton_bundle_4sncub on Bundle {\n id\n name\n sku {\n ...SKUPrice_sku_4sncub\n id\n }\n fontStyles {\n id\n ...FontStyle_fontStyle\n }\n}\n\nfragment StoreModalFamilyButton_collection_4sncub on FontCollection {\n isVariableFont\n collectionType\n name\n sku {\n ...SKUPrice_sku_4sncub\n id\n }\n parent {\n id\n }\n featureStyle {\n ...FontStyle_fontStyle\n supportedLanguages\n id\n }\n totalStyles\n totalStylesPrice {\n ...Price_price\n }\n ...useTotalStyles_fontCollection\n}\n\nfragment StoreModalFamily_collection_4sncub on FontCollection {\n ...StoreModalFamilyButton_collection_4sncub\n collectionType\n sku {\n id\n }\n isVariableFont\n bundles(acrossFamilies: true) {\n id\n visibility\n fontStyles {\n id\n cssFamily\n cssWeight\n cssStretch\n ...StoreModalStyleButton_fontStyle_4sncub\n }\n ...StoreModalBundleButton_bundle_4sncub\n }\n fontStyles {\n id\n cssFamily\n cssWeight\n cssStretch\n cssStyle\n ...StoreModalStyleButton_fontStyle_4sncub\n }\n}\n\nfragment StoreModalPackButton_fontPack_4sncub on FontPack {\n name\n sku {\n ...SKUPrice_sku_4sncub\n id\n price(licenseOptions: $licenseOptions, orderVariables: $orderVariables) {\n amount\n }\n }\n featureStyle {\n ...FontStyle_fontStyle\n supportedLanguages\n id\n }\n totalStyles\n totalStylesPrice(licenseOptions: $licenseOptions, orderVariables: $orderVariables) {\n amount\n ...Price_price\n }\n}\n\nfragment StoreModalPack_fontPack_4sncub on FontPack {\n ...StoreModalPackButton_fontPack_4sncub\n members {\n __typename\n ... on FontStyle {\n id\n cssFamily\n cssWeight\n cssStretch\n cssStyle\n family {\n id\n name\n isVariableFont\n visibility\n }\n ...StoreModalStyleButton_fontStyle_4sncub\n }\n ... on FontCollection {\n id\n visibility\n ...StoreModalFamily_collection_4sncub\n children(collectionTypes: [FAMILY]) {\n id\n visibility\n ...StoreModalFamily_collection_4sncub\n }\n }\n ... on Node {\n __isNode: __typename\n id\n }\n }\n}\n\nfragment StoreModalProductContent_collection_4sncub on Node {\n __isNode: __typename\n __typename\n ... on FontCollection {\n id\n visibility\n ...StoreModalFamily_collection_4sncub\n ...StoreModalProductLicenseSelection_licenseable\n children(collectionTypes: [FAMILY]) {\n id\n visibility\n ...StoreModalFamily_collection_4sncub\n }\n }\n ... on FontPack {\n id\n ...StoreModalPack_fontPack_4sncub\n ...StoreModalProductLicenseSelection_licenseable\n }\n id\n}\n\nfragment StoreModalProductLicenseSelection_licenseable on Licenseable {\n __isLicenseable: __typename\n id\n licenses {\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 excludedLicenses {\n id\n }\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_4sncub on Viewer {\n settings {\n taxSystem\n stripeTaxSettings {\n taxBehavior\n }\n }\n taxCollections {\n taxName\n inclusive\n }\n orderVariables {\n id\n variableType\n name\n }\n precart(skuIds: [], licenseOptions: $licenseOptions, orderVariables: $orderVariables) {\n skus {\n price(licenseOptions: $licenseOptions, orderVariables: $orderVariables) {\n amount\n }\n product {\n __typename\n ... on FontCollection {\n totalStyles\n totalStylesPrice(licenseOptions: $licenseOptions, orderVariables: $orderVariables) {\n amount\n }\n }\n ... on Bundle {\n totalStyles\n totalStylesPrice(licenseOptions: $licenseOptions, orderVariables: $orderVariables) {\n amount\n }\n }\n ... on CollectionBundle {\n totalStyles\n totalStylesPrice(licenseOptions: $licenseOptions, orderVariables: $orderVariables) {\n amount\n }\n }\n ... on FontPack {\n totalStyles\n totalStylesPrice(licenseOptions: $licenseOptions, orderVariables: $orderVariables) {\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 StoreModalProductViewer_4sncub on Viewer {\n endpoint\n stripeAccountId\n ...OrderVariableSelectionRedux_viewer_2ZguDv\n ...StoreModalProductSummary_viewer_4sncub\n orderVariables {\n id\n variableType\n name\n }\n settings {\n storeModalSelectLicenseeLabel(format: HTML)\n storeModalLicenseeSelfLabel(format: HTML)\n storeModalLicenseeSelfDescription(format: HTML)\n storeModalLicenseeClientLabel(format: HTML)\n storeModalLicenseeClientDescription(format: HTML)\n storeModalSelectOrderVariablesLabel(format: HTML)\n storeModalSelectLicensesLabel(format: HTML)\n storeModalSelectFontsLabel(format: HTML)\n }\n}\n\nfragment StoreModalStyleButton_fontStyle_4sncub on FontStyle {\n id\n name\n supportedLanguages\n variableInstances {\n name\n coordinates {\n axis\n value\n }\n }\n sku {\n ...SKUPrice_sku_4sncub\n id\n }\n ...FontStyle_fontStyle\n}\n\nfragment VariableTableAmounts_option on LicenseOption {\n amounts\n}\n\nfragment VariableTableAmounts_variable on LicenseVariable {\n units\n}\n\nfragment useFontStyle_fontStyle on FontStyle {\n cssFamily\n name\n webfontSources {\n url\n format\n tech\n }\n verticalMetrics {\n unitsPerEm\n ascender\n descender\n lineGap\n avgCharWidth\n }\n}\n\nfragment useTotalStyles_fontCollection on FontCollection {\n isVariableFont\n totalStyles\n children(collectionTypes: [FAMILY]) {\n isVariableFont\n totalStyles\n id\n }\n}\n"
823
827
  }
824
828
  };
825
829
  }();
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @generated SignedSource<<925530e7d4ec77a773367f26953fcb94>>
2
+ * @generated SignedSource<<c982d977739156bf458823aeab72a167>>
3
3
  * @lightSyntaxTransform
4
4
  * @nogrep
5
5
  */
@@ -67,34 +67,6 @@ export type productState_Query$data = {
67
67
  };
68
68
  } | null;
69
69
  }> | null;
70
- readonly collectionBundles: ReadonlyArray<{
71
- readonly id: string;
72
- readonly memberCollections: ReadonlyArray<{
73
- readonly fontStyles: ReadonlyArray<{
74
- readonly id: string;
75
- readonly sku: {
76
- readonly id: string;
77
- readonly price: {
78
- readonly amount: number;
79
- };
80
- } | null;
81
- }>;
82
- readonly id: string;
83
- readonly sku: {
84
- readonly id: string;
85
- readonly price: {
86
- readonly amount: number;
87
- };
88
- } | null;
89
- }> | null;
90
- readonly name: string;
91
- readonly sku: {
92
- readonly id: string;
93
- readonly price: {
94
- readonly amount: number;
95
- };
96
- } | null;
97
- }> | null;
98
70
  readonly fontStyles: ReadonlyArray<{
99
71
  readonly id: string;
100
72
  readonly sku: {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @generated SignedSource<<925530e7d4ec77a773367f26953fcb94>>
2
+ * @generated SignedSource<<c982d977739156bf458823aeab72a167>>
3
3
  * @lightSyntaxTransform
4
4
  * @nogrep
5
5
  */
@@ -77,34 +77,19 @@ const node = function () {
77
77
  },
78
78
  v7 = {
79
79
  "alias": null,
80
- "args": null,
80
+ "args": [{
81
+ "kind": "Literal",
82
+ "name": "acrossFamilies",
83
+ "value": true
84
+ }],
81
85
  "concreteType": "Bundle",
82
86
  "kind": "LinkedField",
83
87
  "name": "bundles",
84
88
  "plural": true,
85
89
  "selections": [v3 /*: any*/, v4 /*: any*/, v5 /*: any*/, v6 /*: any*/],
86
- "storageKey": null
90
+ "storageKey": "bundles(acrossFamilies:true)"
87
91
  },
88
92
  v8 = {
89
- "alias": null,
90
- "args": null,
91
- "concreteType": "CollectionBundle",
92
- "kind": "LinkedField",
93
- "name": "collectionBundles",
94
- "plural": true,
95
- "selections": [v3 /*: any*/, v4 /*: any*/, v5 /*: any*/, {
96
- "alias": null,
97
- "args": null,
98
- "concreteType": "FontCollection",
99
- "kind": "LinkedField",
100
- "name": "memberCollections",
101
- "plural": true,
102
- "selections": [v3 /*: any*/, v5 /*: any*/, v6 /*: any*/],
103
- "storageKey": null
104
- }],
105
- "storageKey": null
106
- },
107
- v9 = {
108
93
  "alias": null,
109
94
  "args": [{
110
95
  "kind": "Literal",
@@ -118,9 +103,9 @@ const node = function () {
118
103
  "selections": [v3 /*: any*/, v4 /*: any*/, v5 /*: any*/, v6 /*: any*/, v7 /*: any*/],
119
104
  "storageKey": "children(collectionTypes:[\"FAMILY\"])"
120
105
  },
121
- v10 = {
106
+ v9 = {
122
107
  "kind": "InlineFragment",
123
- "selections": [v3 /*: any*/, v4 /*: any*/, v5 /*: any*/, v6 /*: any*/, v7 /*: any*/, v9 /*: any*/],
108
+ "selections": [v3 /*: any*/, v4 /*: any*/, v5 /*: any*/, v6 /*: any*/, v7 /*: any*/, v8 /*: any*/],
124
109
  "type": "FontCollection",
125
110
  "abstractKey": null
126
111
  };
@@ -139,7 +124,7 @@ const node = function () {
139
124
  "plural": false,
140
125
  "selections": [{
141
126
  "kind": "InlineFragment",
142
- "selections": [v2 /*: any*/, v3 /*: any*/, v4 /*: any*/, v5 /*: any*/, v6 /*: any*/, v7 /*: any*/, v8 /*: any*/, v9 /*: any*/],
127
+ "selections": [v2 /*: any*/, v3 /*: any*/, v4 /*: any*/, v5 /*: any*/, v6 /*: any*/, v7 /*: any*/, v8 /*: any*/],
143
128
  "type": "FontCollection",
144
129
  "abstractKey": null
145
130
  }, {
@@ -151,7 +136,7 @@ const node = function () {
151
136
  "kind": "LinkedField",
152
137
  "name": "members",
153
138
  "plural": true,
154
- "selections": [v2 /*: any*/, v10 /*: any*/],
139
+ "selections": [v2 /*: any*/, v9 /*: any*/],
155
140
  "storageKey": null
156
141
  }],
157
142
  "type": "FontPack",
@@ -176,7 +161,7 @@ const node = function () {
176
161
  "plural": false,
177
162
  "selections": [v2 /*: any*/, v3 /*: any*/, {
178
163
  "kind": "InlineFragment",
179
- "selections": [v4 /*: any*/, v5 /*: any*/, v6 /*: any*/, v7 /*: any*/, v8 /*: any*/, v9 /*: any*/],
164
+ "selections": [v4 /*: any*/, v5 /*: any*/, v6 /*: any*/, v7 /*: any*/, v8 /*: any*/],
180
165
  "type": "FontCollection",
181
166
  "abstractKey": null
182
167
  }, {
@@ -188,7 +173,7 @@ const node = function () {
188
173
  "kind": "LinkedField",
189
174
  "name": "members",
190
175
  "plural": true,
191
- "selections": [v2 /*: any*/, v10 /*: any*/, {
176
+ "selections": [v2 /*: any*/, v9 /*: any*/, {
192
177
  "kind": "InlineFragment",
193
178
  "selections": [v3 /*: any*/],
194
179
  "type": "Node",
@@ -203,12 +188,12 @@ const node = function () {
203
188
  }]
204
189
  },
205
190
  "params": {
206
- "cacheID": "47288a3b11085a6e8771d765f203f545",
191
+ "cacheID": "35e4711d9da320d91e489653a128a18e",
207
192
  "id": null,
208
193
  "metadata": {},
209
194
  "name": "productState_Query",
210
195
  "operationKind": "query",
211
- "text": "query productState_Query(\n $id: ID!\n) {\n node(id: $id) {\n __typename\n ... on FontCollection {\n __typename\n id\n name\n sku {\n id\n price {\n amount\n }\n }\n fontStyles {\n id\n sku {\n id\n price {\n amount\n }\n }\n }\n bundles {\n id\n name\n sku {\n id\n price {\n amount\n }\n }\n fontStyles {\n id\n sku {\n id\n price {\n amount\n }\n }\n }\n }\n collectionBundles {\n id\n name\n sku {\n id\n price {\n amount\n }\n }\n memberCollections {\n id\n sku {\n id\n price {\n amount\n }\n }\n fontStyles {\n id\n sku {\n id\n price {\n amount\n }\n }\n }\n }\n }\n children(collectionTypes: [FAMILY]) {\n id\n name\n sku {\n id\n price {\n amount\n }\n }\n fontStyles {\n id\n sku {\n id\n price {\n amount\n }\n }\n }\n bundles {\n id\n name\n sku {\n id\n price {\n amount\n }\n }\n fontStyles {\n id\n sku {\n id\n price {\n amount\n }\n }\n }\n }\n }\n }\n ... on FontPack {\n __typename\n id\n name\n sku {\n id\n price {\n amount\n }\n }\n fontStyles {\n id\n sku {\n id\n price {\n amount\n }\n }\n }\n members {\n __typename\n ... on FontCollection {\n id\n name\n sku {\n id\n price {\n amount\n }\n }\n fontStyles {\n id\n sku {\n id\n price {\n amount\n }\n }\n }\n bundles {\n id\n name\n sku {\n id\n price {\n amount\n }\n }\n fontStyles {\n id\n sku {\n id\n price {\n amount\n }\n }\n }\n }\n children(collectionTypes: [FAMILY]) {\n id\n name\n sku {\n id\n price {\n amount\n }\n }\n fontStyles {\n id\n sku {\n id\n price {\n amount\n }\n }\n }\n bundles {\n id\n name\n sku {\n id\n price {\n amount\n }\n }\n fontStyles {\n id\n sku {\n id\n price {\n amount\n }\n }\n }\n }\n }\n }\n ... on Node {\n __isNode: __typename\n id\n }\n }\n }\n id\n }\n}\n"
196
+ "text": "query productState_Query(\n $id: ID!\n) {\n node(id: $id) {\n __typename\n ... on FontCollection {\n __typename\n id\n name\n sku {\n id\n price {\n amount\n }\n }\n fontStyles {\n id\n sku {\n id\n price {\n amount\n }\n }\n }\n bundles(acrossFamilies: true) {\n id\n name\n sku {\n id\n price {\n amount\n }\n }\n fontStyles {\n id\n sku {\n id\n price {\n amount\n }\n }\n }\n }\n children(collectionTypes: [FAMILY]) {\n id\n name\n sku {\n id\n price {\n amount\n }\n }\n fontStyles {\n id\n sku {\n id\n price {\n amount\n }\n }\n }\n bundles(acrossFamilies: true) {\n id\n name\n sku {\n id\n price {\n amount\n }\n }\n fontStyles {\n id\n sku {\n id\n price {\n amount\n }\n }\n }\n }\n }\n }\n ... on FontPack {\n __typename\n id\n name\n sku {\n id\n price {\n amount\n }\n }\n fontStyles {\n id\n sku {\n id\n price {\n amount\n }\n }\n }\n members {\n __typename\n ... on FontCollection {\n id\n name\n sku {\n id\n price {\n amount\n }\n }\n fontStyles {\n id\n sku {\n id\n price {\n amount\n }\n }\n }\n bundles(acrossFamilies: true) {\n id\n name\n sku {\n id\n price {\n amount\n }\n }\n fontStyles {\n id\n sku {\n id\n price {\n amount\n }\n }\n }\n }\n children(collectionTypes: [FAMILY]) {\n id\n name\n sku {\n id\n price {\n amount\n }\n }\n fontStyles {\n id\n sku {\n id\n price {\n amount\n }\n }\n }\n bundles(acrossFamilies: true) {\n id\n name\n sku {\n id\n price {\n amount\n }\n }\n fontStyles {\n id\n sku {\n id\n price {\n amount\n }\n }\n }\n }\n }\n }\n ... on Node {\n __isNode: __typename\n id\n }\n }\n }\n id\n }\n}\n"
212
197
  }
213
198
  };
214
199
  }();
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @generated SignedSource<<1d5700e0886a4a58d6f96732985e3d02>>
2
+ * @generated SignedSource<<9b7dc1f76b6bd7def12a2a60897ece3d>>
3
3
  * @lightSyntaxTransform
4
4
  * @nogrep
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @generated SignedSource<<1d5700e0886a4a58d6f96732985e3d02>>
2
+ * @generated SignedSource<<9b7dc1f76b6bd7def12a2a60897ece3d>>
3
3
  * @lightSyntaxTransform
4
4
  * @nogrep
5
5
  */
@@ -67,17 +67,21 @@ const node = function () {
67
67
  "name": "productState_collection",
68
68
  "selections": [v0 /*: any*/, v1 /*: any*/, v2 /*: any*/, v3 /*: any*/, {
69
69
  "alias": null,
70
- "args": null,
70
+ "args": [{
71
+ "kind": "Literal",
72
+ "name": "acrossFamilies",
73
+ "value": true
74
+ }],
71
75
  "concreteType": "Bundle",
72
76
  "kind": "LinkedField",
73
77
  "name": "bundles",
74
78
  "plural": true,
75
79
  "selections": [v0 /*: any*/, v1 /*: any*/, v2 /*: any*/, v3 /*: any*/],
76
- "storageKey": null
80
+ "storageKey": "bundles(acrossFamilies:true)"
77
81
  }],
78
82
  "type": "FontCollection",
79
83
  "abstractKey": null
80
84
  };
81
85
  }();
82
- node.hash = "90e56933f956c6773c0958284de81884";
86
+ node.hash = "5ad23bbf68581f27e769ebb0cda70f8e";
83
87
  export default node;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @generated SignedSource<<c00a5a25369b3afa2e42b1f47d1fa26a>>
2
+ * @generated SignedSource<<225503323456f9f96cbe77f3b83dd674>>
3
3
  * @lightSyntaxTransform
4
4
  * @nogrep
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @generated SignedSource<<c00a5a25369b3afa2e42b1f47d1fa26a>>
2
+ * @generated SignedSource<<225503323456f9f96cbe77f3b83dd674>>
3
3
  * @lightSyntaxTransform
4
4
  * @nogrep
5
5
  */
@@ -60,13 +60,17 @@ const node = function () {
60
60
  },
61
61
  v4 = {
62
62
  "alias": null,
63
- "args": null,
63
+ "args": [{
64
+ "kind": "Literal",
65
+ "name": "acrossFamilies",
66
+ "value": true
67
+ }],
64
68
  "concreteType": "Bundle",
65
69
  "kind": "LinkedField",
66
70
  "name": "bundles",
67
71
  "plural": true,
68
72
  "selections": [v0 /*: any*/, v1 /*: any*/, v2 /*: any*/, v3 /*: any*/],
69
- "storageKey": null
73
+ "storageKey": "bundles(acrossFamilies:true)"
70
74
  };
71
75
  return {
72
76
  "argumentDefinitions": [],
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @generated SignedSource<<89ccca0787788a2ceb37d58b6ab5340a>>
2
+ * @generated SignedSource<<7112b01c24002ecc9175f687500a7e12>>
3
3
  * @lightSyntaxTransform
4
4
  * @nogrep
5
5
  */
@@ -63,34 +63,6 @@ export type productState_node$data = {
63
63
  };
64
64
  } | null;
65
65
  }> | null;
66
- readonly collectionBundles: ReadonlyArray<{
67
- readonly id: string;
68
- readonly memberCollections: ReadonlyArray<{
69
- readonly fontStyles: ReadonlyArray<{
70
- readonly id: string;
71
- readonly sku: {
72
- readonly id: string;
73
- readonly price: {
74
- readonly amount: number;
75
- };
76
- } | null;
77
- }>;
78
- readonly id: string;
79
- readonly sku: {
80
- readonly id: string;
81
- readonly price: {
82
- readonly amount: number;
83
- };
84
- } | null;
85
- }> | null;
86
- readonly name: string;
87
- readonly sku: {
88
- readonly id: string;
89
- readonly price: {
90
- readonly amount: number;
91
- };
92
- } | null;
93
- }> | null;
94
66
  readonly fontStyles: ReadonlyArray<{
95
67
  readonly id: string;
96
68
  readonly sku: {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @generated SignedSource<<89ccca0787788a2ceb37d58b6ab5340a>>
2
+ * @generated SignedSource<<7112b01c24002ecc9175f687500a7e12>>
3
3
  * @lightSyntaxTransform
4
4
  * @nogrep
5
5
  */
@@ -60,13 +60,17 @@ const node = function () {
60
60
  },
61
61
  v4 = {
62
62
  "alias": null,
63
- "args": null,
63
+ "args": [{
64
+ "kind": "Literal",
65
+ "name": "acrossFamilies",
66
+ "value": true
67
+ }],
64
68
  "concreteType": "Bundle",
65
69
  "kind": "LinkedField",
66
70
  "name": "bundles",
67
71
  "plural": true,
68
72
  "selections": [v0 /*: any*/, v1 /*: any*/, v2 /*: any*/, v3 /*: any*/],
69
- "storageKey": null
73
+ "storageKey": "bundles(acrossFamilies:true)"
70
74
  };
71
75
  return {
72
76
  "argumentDefinitions": [],
@@ -76,24 +80,6 @@ const node = function () {
76
80
  },
77
81
  "name": "productState_node",
78
82
  "selections": [v0 /*: any*/, v1 /*: any*/, v2 /*: any*/, v3 /*: any*/, v4 /*: any*/, {
79
- "alias": null,
80
- "args": null,
81
- "concreteType": "CollectionBundle",
82
- "kind": "LinkedField",
83
- "name": "collectionBundles",
84
- "plural": true,
85
- "selections": [v0 /*: any*/, v1 /*: any*/, v2 /*: any*/, {
86
- "alias": null,
87
- "args": null,
88
- "concreteType": "FontCollection",
89
- "kind": "LinkedField",
90
- "name": "memberCollections",
91
- "plural": true,
92
- "selections": [v0 /*: any*/, v2 /*: any*/, v3 /*: any*/],
93
- "storageKey": null
94
- }],
95
- "storageKey": null
96
- }, {
97
83
  "alias": null,
98
84
  "args": [{
99
85
  "kind": "Literal",
@@ -111,5 +97,5 @@ const node = function () {
111
97
  "abstractKey": null
112
98
  };
113
99
  }();
114
- node.hash = "a1e172db45ca550a254819d877497d12";
100
+ node.hash = "aab1ef07e0192a0d22a4c300084d9d05";
115
101
  export default node;
@@ -42,7 +42,6 @@ const catalog = {
42
42
  fontStyles: styles.map(style)
43
43
  };
44
44
  }),
45
- collectionBundles: [],
46
45
  children: []
47
46
  }
48
47
  };
@@ -506,6 +506,16 @@ describe('POPULATE_PRODUCT_STATE', () => {
506
506
  fontStyles: [style('vf1', null)],
507
507
  bundles: []
508
508
  };
509
+ const display = {
510
+ id: 'display',
511
+ name: 'Display',
512
+ sku: sku('display-sku', 500),
513
+ fontStyles: [style('d1', 'sd1')],
514
+ bundles: []
515
+ };
516
+ // The superfamily's own bundles, read with `bundles(acrossFamilies: true)`:
517
+ // whole families (what collection bundles were), and styles from two
518
+ // families. The server expands a family member into its styles.
509
519
  const superfamily = {
510
520
  node: {
511
521
  __typename: 'FontCollection',
@@ -513,14 +523,18 @@ describe('POPULATE_PRODUCT_STATE', () => {
513
523
  name: 'Thunder',
514
524
  sku: sku('super-sku', 750),
515
525
  fontStyles: [],
516
- bundles: [],
517
- collectionBundles: [{
526
+ bundles: [{
518
527
  id: 'text-bundle',
519
528
  name: 'Text + Variable',
520
529
  sku: sku('text-bundle-sku', 500),
521
- memberCollections: [textFamily, textVariable]
530
+ fontStyles: [...textFamily.fontStyles, ...textVariable.fontStyles]
531
+ }, {
532
+ id: 'regulars',
533
+ name: 'Regulars',
534
+ sku: sku('regulars-sku', 60),
535
+ fontStyles: [style('f1', 's1'), style('d1', 'sd1')]
522
536
  }],
523
- children: [textFamily, textVariable]
537
+ children: [textFamily, textVariable, display]
524
538
  }
525
539
  };
526
540
  it('records the styles every SKU grants', () => {
@@ -529,14 +543,25 @@ describe('POPULATE_PRODUCT_STATE', () => {
529
543
  data: superfamily
530
544
  });
531
545
  expect(state.skuStyleIds).toEqual({
532
- 'super-sku': ['f1', 'f2', 'vf1'],
546
+ 'super-sku': ['f1', 'f2', 'vf1', 'd1'],
533
547
  'text-bundle-sku': ['f1', 'f2', 'vf1'],
548
+ 'regulars-sku': ['f1', 'd1'],
534
549
  'text-sku': ['f1', 'f2'],
535
550
  'text-var-sku': ['vf1'],
551
+ 'display-sku': ['d1'],
536
552
  'upright-sku': ['f1'],
537
553
  s1: ['f1'],
538
- s2: ['f2']
554
+ s2: ['f2'],
555
+ sd1: ['d1']
556
+ });
557
+ });
558
+ it('rolls styles from two families up to a superfamily bundle', () => {
559
+ const loaded = reducer(makeState(), {
560
+ type: 'POPULATE_PRODUCT_STATE',
561
+ data: superfamily
539
562
  });
563
+ const state = select(select(loaded, 's1'), 'sd1');
564
+ expect(selected(state)).toEqual(['regulars-sku']);
540
565
  });
541
566
  it('prices a SKU picked before its product loaded once it has', () => {
542
567
  const picked = select(makeState(), 'text-sku');
@@ -1,17 +1,15 @@
1
1
  import _productState_Query from "../../__generated__/productState_Query.graphql.js";
2
2
  import _productState_fontPack from "../../__generated__/productState_fontPack.graphql.js";
3
3
  import _productState_node from "../../__generated__/productState_node.graphql.js";
4
- import _productState_collectionBundle from "../../__generated__/productState_collectionBundle.graphql.js";
5
4
  import _productState_bundle from "../../__generated__/productState_bundle.graphql.js";
6
5
  import _productState_collection from "../../__generated__/productState_collection.graphql.js";
7
6
  import _productState_sku from "../../__generated__/productState_sku.graphql.js";
8
7
  import { fetchQuery, graphql } from 'react-relay';
9
8
  import { notEmpty } from '../../utils.js';
10
9
  _productState_sku.hash && _productState_sku.hash !== "2cee6ddddc85699f0c90e2607c0634ef" && console.error("The definition of 'productState_sku' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data."), _productState_sku;
11
- _productState_collection.hash && _productState_collection.hash !== "90e56933f956c6773c0958284de81884" && console.error("The definition of 'productState_collection' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data."), _productState_collection;
10
+ _productState_collection.hash && _productState_collection.hash !== "5ad23bbf68581f27e769ebb0cda70f8e" && console.error("The definition of 'productState_collection' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data."), _productState_collection;
12
11
  _productState_bundle.hash && _productState_bundle.hash !== "fa38bbc9f2062a727da4f5062b362054" && console.error("The definition of 'productState_bundle' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data."), _productState_bundle;
13
- _productState_collectionBundle.hash && _productState_collectionBundle.hash !== "6744aa8f57d14b0111a0c49f488d7b03" && console.error("The definition of 'productState_collectionBundle' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data."), _productState_collectionBundle;
14
- _productState_node.hash && _productState_node.hash !== "a1e172db45ca550a254819d877497d12" && console.error("The definition of 'productState_node' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data."), _productState_node;
12
+ _productState_node.hash && _productState_node.hash !== "aab1ef07e0192a0d22a4c300084d9d05" && console.error("The definition of 'productState_node' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data."), _productState_node;
15
13
 
16
14
  // A pack is one SKU that grants every style in `fontStyles`. Its collection
17
15
  // members (a family or a superfamily with its families) are fetched in the
@@ -41,37 +39,21 @@ const allSkus = function (collection) {
41
39
  var _collection$bundles;
42
40
  bundleSkus = (collection === null || collection === void 0 ? void 0 : (_collection$bundles = collection.bundles) === null || _collection$bundles === void 0 ? void 0 : _collection$bundles.flatMap(bundle => allSkus(bundle, includeCollections, includeFontStyles))) ?? [];
43
41
  }
44
- let collectionBundleSkus = [];
45
- if ('collectionBundles' in collection && collection.collectionBundles) {
46
- collectionBundleSkus = collection.collectionBundles.flatMap(collBundle => allSkus(collBundle, includeCollections, includeFontStyles));
47
- }
48
-
49
- // For collection bundles, get SKUs from member collections
50
- let memberCollectionSkus = [];
51
- if ('memberCollections' in collection && collection.memberCollections) {
52
- memberCollectionSkus = collection.memberCollections.flatMap(member => {
53
- var _member$fontStyles;
54
- return [includeCollections ? member.sku : null, ...(includeFontStyles ? ((_member$fontStyles = member.fontStyles) === null || _member$fontStyles === void 0 ? void 0 : _member$fontStyles.map(style => style.sku)) ?? [] : [])];
55
- }).filter(notEmpty);
56
- }
57
42
  let childrenSkus = [];
58
43
  if ('children' in collection) {
59
44
  var _collection$children;
60
45
  childrenSkus = ((_collection$children = collection.children) === null || _collection$children === void 0 ? void 0 : _collection$children.flatMap(child => allSkus(child, includeCollections, includeFontStyles))) ?? [];
61
46
  }
62
- return [includeCollections ? collection === null || collection === void 0 ? void 0 : collection.sku : null, ...(includeFontStyles && 'fontStyles' in collection ? (collection === null || collection === void 0 ? void 0 : (_collection$fontStyle = collection.fontStyles) === null || _collection$fontStyle === void 0 ? void 0 : _collection$fontStyle.map(style => style.sku)) ?? [] : []), ...bundleSkus, ...collectionBundleSkus, ...memberCollectionSkus, ...childrenSkus].filter(notEmpty);
47
+ return [includeCollections ? collection === null || collection === void 0 ? void 0 : collection.sku : null, ...(includeFontStyles && 'fontStyles' in collection ? (collection === null || collection === void 0 ? void 0 : (_collection$fontStyle = collection.fontStyles) === null || _collection$fontStyle === void 0 ? void 0 : _collection$fontStyle.map(style => style.sku)) ?? [] : []), ...bundleSkus, ...childrenSkus].filter(notEmpty);
63
48
  };
64
49
 
65
50
  // The styles each SKU grants, by SKU id: a style's SKU grants that style, a
66
- // bundle its styles, a family its styles, a superfamily its families' styles
67
- // and a collection bundle its member collections' styles. This is all the
51
+ // bundle its styles (a whole-family member expanded to the family's styles), a
52
+ // family its styles and a superfamily its families' styles. This is all the
68
53
  // selection needs to price any combination of them (see selection.ts).
69
54
 
70
55
  const styleIdsOf = collection => {
71
56
  var _collection$fontStyle2, _collection$children2;
72
- if ('memberCollections' in collection && collection.memberCollections) {
73
- return collection.memberCollections.flatMap(member => member.fontStyles.map(s => s.id));
74
- }
75
57
  const own = 'fontStyles' in collection ? ((_collection$fontStyle2 = collection.fontStyles) === null || _collection$fontStyle2 === void 0 ? void 0 : _collection$fontStyle2.map(s => s.id)) ?? [] : [];
76
58
  const children = 'children' in collection ? ((_collection$children2 = collection.children) === null || _collection$children2 === void 0 ? void 0 : _collection$children2.flatMap(child => {
77
59
  var _child$fontStyles;
@@ -83,8 +65,7 @@ const flattenSkuStyleIds = collection => {
83
65
  var _collection$sku;
84
66
  const result = {};
85
67
  const add = (skuId, styleIds) => {
86
- // A collection that returns no styles of its own (a superfamily listed as
87
- // a collection bundle member) says nothing about what it grants.
68
+ // A SKU that lists no styles says nothing about what it grants.
88
69
  if (skuId && styleIds.length > 0) result[skuId] = styleIds;
89
70
  };
90
71
  const addStyles = fontStyles => {
@@ -95,14 +76,7 @@ const flattenSkuStyleIds = collection => {
95
76
  };
96
77
  add((_collection$sku = collection.sku) === null || _collection$sku === void 0 ? void 0 : _collection$sku.id, styleIdsOf(collection));
97
78
  if ('fontStyles' in collection) addStyles(collection.fontStyles);
98
- if ('memberCollections' in collection) {
99
- for (const member of collection.memberCollections ?? []) {
100
- var _member$sku;
101
- add((_member$sku = member.sku) === null || _member$sku === void 0 ? void 0 : _member$sku.id, member.fontStyles.map(s => s.id));
102
- addStyles(member.fontStyles);
103
- }
104
- }
105
- const nested = [...('bundles' in collection ? collection.bundles ?? [] : []), ...('collectionBundles' in collection ? collection.collectionBundles ?? [] : []), ...('children' in collection ? collection.children ?? [] : [])];
79
+ const nested = [...('bundles' in collection ? collection.bundles ?? [] : []), ...('children' in collection ? collection.children ?? [] : [])];
106
80
  for (const child of nested) Object.assign(result, flattenSkuStyleIds(child));
107
81
  return result;
108
82
  };
@@ -40,18 +40,22 @@ export default function StoreModalFamily(_ref) {
40
40
  onSelect,
41
41
  title
42
42
  } = _ref;
43
- const collection = useFragment((_StoreModalFamily_collection.hash && _StoreModalFamily_collection.hash !== "f136cd0050f0f75f561221fac75feb85" && 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);
43
+ const collection = useFragment((_StoreModalFamily_collection.hash && _StoreModalFamily_collection.hash !== "9f2a8cd937ebe2c06f2bf771d38de985" && 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);
44
44
  const fontStyles = useMemo(() => stylesGrouped(collection.fontStyles), [collection]);
45
- if ((fontStyles === null || fontStyles === void 0 ? void 0 : fontStyles.length) === 0 && collection.collectionType === 'superfamily' && !collection.sku) return null;
45
+ // An unlisted bundle gets no button, but its price still applies as an
46
+ // upgrade: the product state reads every bundle.
47
+ const listedBundles = (_collection$bundles = collection.bundles) === null || _collection$bundles === void 0 ? void 0 : _collection$bundles.filter(bundle => bundle.visibility !== 'UNLISTED');
48
+
49
+ // A superfamily sold only through its families has nothing of its own to
50
+ // show – unless one of its bundles, across its families, has a button.
51
+ if ((fontStyles === null || fontStyles === void 0 ? void 0 : fontStyles.length) === 0 && collection.collectionType === 'superfamily' && !collection.sku && !(listedBundles !== null && listedBundles !== void 0 && listedBundles.length)) return null;
46
52
  return /*#__PURE__*/React.createElement(FamilyElement, null, {
47
53
  title,
48
54
  familyButton: /*#__PURE__*/React.createElement(FamilyButton, {
49
55
  collection: collection,
50
56
  onSelectSku: onSelect
51
57
  }),
52
- // An unlisted bundle gets no button, but its price still applies as an
53
- // upgrade: the product state reads every bundle.
54
- bundles: collection === null || collection === void 0 ? void 0 : (_collection$bundles = collection.bundles) === null || _collection$bundles === void 0 ? void 0 : _collection$bundles.filter(bundle => bundle.visibility !== 'UNLISTED').map(bundle => /*#__PURE__*/React.createElement(StoreModalBundleButton, {
58
+ bundles: listedBundles === null || listedBundles === void 0 ? void 0 : listedBundles.map(bundle => /*#__PURE__*/React.createElement(StoreModalBundleButton, {
55
59
  key: bundle.id,
56
60
  bundle: bundle,
57
61
  onSelectSku: onSelect
package/dist/fontdue.css CHANGED
@@ -2136,6 +2136,14 @@ input:checked + .checkbox__icon {
2136
2136
  font-size: 60px;
2137
2137
  }
2138
2138
 
2139
+ .store-modal__index-item__description:first-child {
2140
+ grid-column: 1/-2;
2141
+ }
2142
+
2143
+ .store-modal__index-item__buy {
2144
+ grid-column: -2/-1;
2145
+ }
2146
+
2139
2147
  .store-modal__index-item__name {
2140
2148
  font-size: 20px;
2141
2149
  line-height: 30px;
package/dist/version.js CHANGED
@@ -8,4 +8,4 @@
8
8
  // (Fontage.ClientVersions) to spot sites that need to upgrade before a
9
9
  // feature that depends on a newer client can work for them.
10
10
  export const CLIENT_VERSION_HEADER = 'fontdue-client-version';
11
- export const version = "3.12.1";
11
+ export const version = "3.13.0";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fontdue-js",
3
- "version": "3.12.1",
3
+ "version": "3.13.0",
4
4
  "type": "module",
5
5
  "scripts": {
6
6
  "build": "npm run relay && run-p build-js build-css build-ts",
@@ -1,41 +0,0 @@
1
- /**
2
- * @generated SignedSource<<c1a8446af3677d58e3851338c54cf16e>>
3
- * @lightSyntaxTransform
4
- * @nogrep
5
- */
6
- import { ReaderFragment } from 'relay-runtime';
7
- import { FragmentRefs } from "relay-runtime";
8
- export type productState_collectionBundle$data = {
9
- readonly id: string;
10
- readonly memberCollections: ReadonlyArray<{
11
- readonly fontStyles: ReadonlyArray<{
12
- readonly id: string;
13
- readonly sku: {
14
- readonly id: string;
15
- readonly price: {
16
- readonly amount: number;
17
- };
18
- } | null;
19
- }>;
20
- readonly id: string;
21
- readonly sku: {
22
- readonly id: string;
23
- readonly price: {
24
- readonly amount: number;
25
- };
26
- } | null;
27
- }> | null;
28
- readonly name: string;
29
- readonly sku: {
30
- readonly id: string;
31
- readonly price: {
32
- readonly amount: number;
33
- };
34
- } | null;
35
- };
36
- export type productState_collectionBundle$key = {
37
- readonly " $data"?: productState_collectionBundle$data;
38
- readonly " $fragmentSpreads": FragmentRefs<"productState_collectionBundle">;
39
- };
40
- declare const node: ReaderFragment;
41
- export default node;
@@ -1,81 +0,0 @@
1
- /**
2
- * @generated SignedSource<<c1a8446af3677d58e3851338c54cf16e>>
3
- * @lightSyntaxTransform
4
- * @nogrep
5
- */
6
-
7
- /* tslint:disable */
8
- /* eslint-disable */
9
- // @ts-nocheck
10
-
11
- const node = function () {
12
- var v0 = {
13
- "alias": null,
14
- "args": null,
15
- "kind": "ScalarField",
16
- "name": "id",
17
- "storageKey": null
18
- },
19
- v1 = {
20
- "alias": null,
21
- "args": null,
22
- "concreteType": "Sku",
23
- "kind": "LinkedField",
24
- "name": "sku",
25
- "plural": false,
26
- "selections": [v0 /*: any*/, {
27
- "alias": null,
28
- "args": null,
29
- "concreteType": "Money",
30
- "kind": "LinkedField",
31
- "name": "price",
32
- "plural": false,
33
- "selections": [{
34
- "alias": null,
35
- "args": null,
36
- "kind": "ScalarField",
37
- "name": "amount",
38
- "storageKey": null
39
- }],
40
- "storageKey": null
41
- }],
42
- "storageKey": null
43
- };
44
- return {
45
- "argumentDefinitions": [],
46
- "kind": "Fragment",
47
- "metadata": {
48
- "mask": false
49
- },
50
- "name": "productState_collectionBundle",
51
- "selections": [v0 /*: any*/, {
52
- "alias": null,
53
- "args": null,
54
- "kind": "ScalarField",
55
- "name": "name",
56
- "storageKey": null
57
- }, v1 /*: any*/, {
58
- "alias": null,
59
- "args": null,
60
- "concreteType": "FontCollection",
61
- "kind": "LinkedField",
62
- "name": "memberCollections",
63
- "plural": true,
64
- "selections": [v0 /*: any*/, v1 /*: any*/, {
65
- "alias": null,
66
- "args": null,
67
- "concreteType": "FontStyle",
68
- "kind": "LinkedField",
69
- "name": "fontStyles",
70
- "plural": true,
71
- "selections": [v0 /*: any*/, v1 /*: any*/],
72
- "storageKey": null
73
- }],
74
- "storageKey": null
75
- }],
76
- "type": "CollectionBundle",
77
- "abstractKey": null
78
- };
79
- }();
80
- node.hash = "6744aa8f57d14b0111a0c49f488d7b03";
81
- export default node;