fontdue-js 3.2.6 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/CHANGELOG.md +20 -16
  2. package/dist/__generated__/CharacterViewerIDQuery.graphql.d.ts +1 -1
  3. package/dist/__generated__/CharacterViewerIDQuery.graphql.js +33 -3
  4. package/dist/__generated__/CharacterViewerSlugQuery.graphql.d.ts +1 -1
  5. package/dist/__generated__/CharacterViewerSlugQuery.graphql.js +33 -3
  6. package/dist/__generated__/CharacterViewerStyleRefetchQuery.graphql.d.ts +1 -1
  7. package/dist/__generated__/CharacterViewerStyleRefetchQuery.graphql.js +34 -4
  8. package/dist/__generated__/CharacterViewer_style.graphql.d.ts +2 -2
  9. package/dist/__generated__/CharacterViewer_style.graphql.js +6 -2
  10. package/dist/__generated__/FeatureTesterStandaloneQuery.graphql.d.ts +1 -1
  11. package/dist/__generated__/FeatureTesterStandaloneQuery.graphql.js +15 -20
  12. package/dist/__generated__/FeatureTestersIdQuery.graphql.d.ts +1 -1
  13. package/dist/__generated__/FeatureTestersIdQuery.graphql.js +15 -20
  14. package/dist/__generated__/FeatureTestersSlugQuery.graphql.d.ts +1 -1
  15. package/dist/__generated__/FeatureTestersSlugQuery.graphql.js +15 -20
  16. package/dist/__generated__/TypeTesterStandaloneChangedStylesQuery.graphql.d.ts +1 -1
  17. package/dist/__generated__/TypeTesterStandaloneChangedStylesQuery.graphql.js +14 -20
  18. package/dist/__generated__/TypeTesterStandaloneQuery.graphql.d.ts +1 -1
  19. package/dist/__generated__/TypeTesterStandaloneQuery.graphql.js +14 -20
  20. package/dist/__generated__/TypeTestersChangedStylesQuery.graphql.d.ts +1 -1
  21. package/dist/__generated__/TypeTestersChangedStylesQuery.graphql.js +14 -20
  22. package/dist/__generated__/TypeTestersIDQuery.graphql.d.ts +1 -1
  23. package/dist/__generated__/TypeTestersIDQuery.graphql.js +17 -23
  24. package/dist/__generated__/TypeTestersRefetchQuery.graphql.d.ts +1 -1
  25. package/dist/__generated__/TypeTestersRefetchQuery.graphql.js +17 -23
  26. package/dist/__generated__/TypeTestersSlugQuery.graphql.d.ts +1 -1
  27. package/dist/__generated__/TypeTestersSlugQuery.graphql.js +17 -23
  28. package/dist/__generated__/useFeaturesData_fontStyle.graphql.d.ts +4 -4
  29. package/dist/__generated__/useFeaturesData_fontStyle.graphql.js +6 -6
  30. package/dist/__tests__/trackingRouteChanges.test.js +110 -0
  31. package/dist/components/CharacterViewer/index.js +17 -4
  32. package/dist/components/Tracking/index.js +10 -18
  33. package/dist/components/Tracking/routeChanges.d.ts +19 -0
  34. package/dist/components/Tracking/routeChanges.js +62 -0
  35. package/dist/components/TypeTester/useFeaturesData.d.ts +9 -9
  36. package/dist/components/TypeTester/useFeaturesData.js +13 -23
  37. package/dist/relay/environment.js +1 -1
  38. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,39 +1,43 @@
1
+ ## 3.3.0
2
+
3
+ - Fixed one page being counted as many pageviews. Sites that rewrite the URL without navigating — scroll restoration, shallow routing — counted a view per rewrite, inflating Pageviews and Top pages in your Fontdue dashboard. Only a change of URL counts now.
4
+ - `CharacterViewer` names the OpenType feature a glyph belongs to in the glyph details — "Single-Story a (ss01)" rather than the bare tag. Names come from the font itself where the designer set one, falling back to the standard OpenType names; `TypeTester`'s features panel uses the same names.
5
+
1
6
  ## 3.2.6
2
7
 
3
- - **Fixed `TypeTesters` crashing when `tags` or `excludeTags` is set on a server-rendered page.** In a React Server Component the server entry preloaded the filtered testers but rendered the client component as though no filter had been given, so the refetch that runs once the page hydrates pulled in the collection's *whole* tester list. Rendering a tester the filter had excluded then threw `Cannot destructure property 'content' of … as it is undefined` and took the page down with it. Both filters now reach the client component on the preloaded path, as they already did when the component fetches its own query in the browser. No public API change.
8
+ - Fixed `TypeTesters` taking the page down on hydration when `tags` or `excludeTags` was set on a server-rendered page. Both filters now survive the handoff to the browser.
4
9
 
5
10
  ## 3.2.5
6
11
 
7
- - **`CartButton` is back in the server-rendered HTML.** Since 3.0.0 it rendered nothing at all until its cart query resolved in the browser, so the button was absent from the initial HTML and only appeared after hydration and a network round-trip — missing for crawlers, and a visible pop-in for everyone else. It now server-renders its empty state (`data-count="0"`) and fills in the count once the cart loads, as it did on 2.x. No public API change.
12
+ - `CartButton` is back in the server-rendered HTML. Since 3.0.0 it appeared only after hydration — missing for crawlers, a visible pop-in for everyone else. It now renders its empty state straight away and fills in the count once the cart loads.
8
13
 
9
14
  ## 3.2.4
10
15
 
11
- - **The `StoreModal` checkout no longer advances past the customer step when the customer fails to save.** A rejected save — an invalid email, a duplicate record — previously moved the buyer on to payment with their details unsaved. The step now holds and shows the field errors. No public API change.
12
- - **Per-customer coupon limits are surfaced at checkout.** When a buyer enters an email address that has used up its allowance on a coupon, the checkout shows the reason and keeps them on the customer step so they can remove the code from the cart.
16
+ - The `StoreModal` checkout no longer moves a buyer on to payment when their details fail to save. The step holds and shows the field errors.
17
+ - Per-customer coupon limits are surfaced at checkout. A buyer whose email has used up its allowance on a coupon is told why, and kept on the customer step to remove the code.
13
18
 
14
19
  ## 3.2.3
15
20
 
16
- - **Fixed `TypeTester` text drifting out of alignment at small font sizes.** The automatic columns (`columns: {count: 'auto', width: '40ch', gap: '1em'}` by default) sat on the full-width text container, and `ch` tracks the font size — so once the font was small enough for two columns to fit, multicol partitioned the strip and short content landed in the first column, leaving `alignment="center"` centred within *that column* rather than the tester. Right-aligned and RTL testers drifted the same way. The column properties now ride on the inner `[data-contents]` block, which shrink-wraps (`width: max-content`, capped at 100%) and is placed by alignment-driven auto margins; wrapping content still spans the full width and flows into columns as before. The editable container keeps its full width, so click-anywhere-to-edit and autofit width measurement are unchanged, and the SSR branch renders the same wrapper so the first paint matches. Truncating testers keep their columns on the height-capped container their sideways-overflow design requires. Ships new stylesheet rules, so take the `fontdue-js/dist/fontdue.css` from this version alongside the JS.
17
- - Also fixed centred testers sitting half the autofit side buffer off centre at *every* size the buffer was applied entirely on one side and is now split across both.
18
- - **`FontdueAdminToolbar`: the collapsed pill now carries the Fontdue wordmark** — *Fontdue* idle, *Fontdue · Previewing hidden fonts* while previewing, *Fontdue · Preview expired* when the token lapses, matching the connection-error pill's existing wording. The `F` mark and the warning glyph leave the pill (the mark still brands the panel header, the glyph the expired notice). If you style the toolbar yourself: `__mark` no longer appears inside `__button`, and the expired suffix is a new `__expired-suffix` span. Chrome, sizing, shadow, the panel, and `data-testid="preview-toggle"` are unchanged.
21
+ - Fixed `TypeTester` text drifting out of alignment. Centred, right-aligned and RTL testers sat off-centre once the font was small enough for the text to flow into columns, and centred testers were slightly off at every size. Ships new stylesheet rules, so take `fontdue-js/dist/fontdue.css` from this version alongside the JS.
22
+ - The collapsed `FontdueAdminToolbar` pill now carries the Fontdue wordmark Fontdue, Fontdue · Previewing hidden fonts, Fontdue · Preview expired. If you style the toolbar yourself, `__mark` has left `__button` and the expired suffix is a new `__expired-suffix` span.
19
23
 
20
24
  ## 3.2.2
21
25
 
22
- - **Fixed the reCAPTCHA forms failing to server-render under Vite SSR** (Astro, and any framework whose dev SSR externalizes CJS deps through Node's ESM interop). 3.2.1 switched to `react-google-recaptcha`'s default export, which bundlers honouring the `__esModule` marker (webpack/Next, and Vite's browser optimizer) unwrap straight to the widget wrapper — but Node's strict ESM↔CJS interop models that same default import as the whole module *namespace*, so `<ReCAPTCHA>` was an object at SSR time. React threw "Element type is invalid … got: object" and the checkout, `NewsletterSignup` and `TestFontsForm` islands fell back to client rendering with a console error. The re-export now normalises the binding (`__esModule ? .default : obj`), resolving the wrapper on every path. A no-op for webpack and Vite's browser build. No public API change.
26
+ - Fixed the reCAPTCHA forms failing to server-render under Vite SSR (Astro, and any framework whose dev SSR externalizes CJS dependencies). The checkout, `NewsletterSignup` and `TestFontsForm` islands fell back to client rendering with a console error. A no-op for webpack and Next.
23
27
 
24
28
  ## 3.2.1
25
29
 
26
- - **Fixed checkout, newsletter signup and trial-font downloads hanging forever on reCAPTCHA-enabled foundries.** `StoreModalUnifiedCheckout`, `NewsletterSignup` and `TestFontsForm` imported the *named* `ReCAPTCHA` export from `react-google-recaptcha` — the barebone widget, which never injects Google's `api.js` and expects you to supply `grecaptcha` yourself. So the invisible widget rendered an empty `<div>`, `window.grecaptcha` stayed undefined, `execute()` was a permanent silent no-op, and the submit button froze on "Submitting…" with no network request and no error. All three forms now use the package's default export (the `react-async-script` wrapper that actually loads the script). This has affected every release since 3.0.0. As defence in depth, each form also arms a 15-second timeout after calling `execute()`: if the reCAPTCHA script never loaded, the form resets and surfaces an inline error so the buyer can retry, while a challenge already in progress is never cancelled. No public API change — no new or changed props.
27
- - **Redesigned the admin preview toolbar** (`FontdueAdminToolbar`) the collapsed control is now a bottom-centre pill carrying its state in the label (*Preview* / *Previewing hidden fonts* / *Preview expired*), and the panel leads with the *Hidden fonts* switch. The toolbar chrome no longer inherits the host page's font. If you style the toolbar yourself, note the new element class names (`__brand`, `__mark`, `__toggle-text`, `__switch`, `__status`) and that `__dot` is gone; `data-testid="preview-toggle"` is unchanged.
28
- - `TypeTester` standalone element: comma-separated `axes`, `features` and `features-selected` attributes are now trimmed, so `axes="wght, opsz"` behaves the same as `axes="wght,opsz"` and a trailing comma no longer creates an empty entry (`features="*"` is preserved). Requesting an axis the bound style doesn't expose now logs a console warning naming the axes it does expose, instead of silently rendering no sliders.
29
- - **Unlocking a password-protected collection no longer slows down the rest of the site for that visitor.** The unlock route enabled Next draft mode with its default site-wide bypass cookie (`Path=/`), so after one unlock *every* page the visitor touched skipped the full-route cache and the data cache and was server-rendered live seconds per page on content-heavy pages. `NodePasswordForm` now sends the pathname it unlocked on, and the unlock route scopes the bypass cookie to it: only the unlocked collection's pages render dynamically for that visitor, and everything else keeps serving from the static cache. Unlocking several collections yields several path-scoped cookies that coexist. Admin preview is unchanged — its bypass stays site-wide, which is the point of previewing.
30
+ - Fixed checkout, newsletter signup and trial-font downloads hanging forever on reCAPTCHA-enabled foundries. The submit button froze on "Submitting…" with no network request and no error, on every release since 3.0.0. The forms now also give up after 15 seconds and show an inline error if the reCAPTCHA script never loads.
31
+ - Redesigned the admin preview toolbar (`FontdueAdminToolbar`). The collapsed control is a bottom-centre pill carrying its state in the label, the panel leads with the Hidden fonts switch, and the chrome no longer inherits the host page's font. If you style the toolbar yourself, note the new class names (`__brand`, `__mark`, `__toggle-text`, `__switch`, `__status`) and that `__dot` is gone.
32
+ - `TypeTester` standalone element: comma-separated `axes`, `features` and `features-selected` attributes are now trimmed, so `axes="wght, opsz"` behaves the same as `axes="wght,opsz"`. Requesting an axis the bound style doesn't expose logs a warning naming the ones it does, instead of silently rendering no sliders.
33
+ - Unlocking a password-protected collection no longer slows down the rest of the site for that visitor. Every page they touched used to render live instead of from the cache; now only the unlocked collection's pages do.
30
34
 
31
35
  ## 3.2.0
32
36
 
33
- - **Fixed password-protected collections crashing statically-rendered Next.js storefronts.** Locked slugs are excluded from `generateStaticParams`, so a visitor's first request for one triggers an on-demand static fill of the font page — and the unlock-cookie read during that fill crashed it with a 500 (digest `DYNAMIC_SERVER_USAGE`). A locked page's static fill now renders (and caches) the password form, and unlocking takes that visitor past the static cache instead — the same mechanism as admin preview:
34
- - New route handler `fontdue-js/next/unlock`. Mount it in your app (`export { POST } from "fontdue-js/next/unlock"` in `app/api/unlock/route.ts`): on a successful unlock it enables Next draft mode, whose bypass cookie makes that one visitor's renders dynamic, so the unlock cookie is read and the collection resolves. Everyone else keeps the static pages.
35
- - New `unlockEndpoint` prop on `NodePasswordForm` — the form POSTs the access token there before reloading. Pass `unlockEndpoint="/api/unlock"` on statically-rendered Next storefronts; omit it on frameworks that render per request (Astro, React Router 7, TanStack Start), where the cookie alone unlocks.
36
- - `nodeAccessHeaders()` (`fontdue-js/next`) now reads the unlock cookie only during draft-mode renders, so a locked page's static fill is never flagged dynamic. See [Password-protected collections](https://www.fontdue.com/docs/develop/password-protected-collections).
37
+ - Fixed password-protected collections crashing statically-rendered Next.js storefronts with a 500 on a visitor's first request for a locked page. That page now serves the password form, and unlocking takes the visitor past the static cache:
38
+ - New route handler `fontdue-js/next/unlock`. Mount it in your app: `export { POST } from "fontdue-js/next/unlock"` in `app/api/unlock/route.ts`.
39
+ - New `unlockEndpoint` prop on `NodePasswordForm`. Pass `unlockEndpoint="/api/unlock"` on statically-rendered Next storefronts; omit it on frameworks that render per request (Astro, React Router 7, TanStack Start), where the cookie alone unlocks.
40
+ - See [Password-protected collections](https://www.fontdue.com/docs/develop/password-protected-collections).
37
41
 
38
42
  ## 3.1.0
39
43
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @generated SignedSource<<442dcddc69fa11a97e2285e7cb03fe5e>>
2
+ * @generated SignedSource<<5bd2e4b2c61156f8ffb0e6bacbe9d680>>
3
3
  * @lightSyntaxTransform
4
4
  * @nogrep
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @generated SignedSource<<442dcddc69fa11a97e2285e7cb03fe5e>>
2
+ * @generated SignedSource<<5bd2e4b2c61156f8ffb0e6bacbe9d680>>
3
3
  * @lightSyntaxTransform
4
4
  * @nogrep
5
5
  */
@@ -286,6 +286,36 @@ const node = function () {
286
286
  "storageKey": null
287
287
  }],
288
288
  "storageKey": null
289
+ }, {
290
+ "alias": null,
291
+ "args": null,
292
+ "concreteType": "FontFeatures",
293
+ "kind": "LinkedField",
294
+ "name": "fontFeatures",
295
+ "plural": false,
296
+ "selections": [{
297
+ "alias": null,
298
+ "args": null,
299
+ "kind": "ScalarField",
300
+ "name": "supportedFeatures",
301
+ "storageKey": null
302
+ }, {
303
+ "alias": null,
304
+ "args": null,
305
+ "concreteType": "FeatureName",
306
+ "kind": "LinkedField",
307
+ "name": "featureNames",
308
+ "plural": true,
309
+ "selections": [{
310
+ "alias": null,
311
+ "args": null,
312
+ "kind": "ScalarField",
313
+ "name": "tag",
314
+ "storageKey": null
315
+ }, v4 /*: any*/],
316
+ "storageKey": null
317
+ }],
318
+ "storageKey": null
289
319
  }, v9 /*: any*/, {
290
320
  "alias": null,
291
321
  "args": null,
@@ -324,12 +354,12 @@ const node = function () {
324
354
  }]
325
355
  },
326
356
  "params": {
327
- "cacheID": "4676c508c8a55490bebba6a27becf7c3",
357
+ "cacheID": "032db12ccac3e27db6dcd759460f695d",
328
358
  "id": null,
329
359
  "metadata": {},
330
360
  "name": "CharacterViewerIDQuery",
331
361
  "operationKind": "query",
332
- "text": "query CharacterViewerIDQuery(\n $collectionId: ID!\n) {\n node(id: $collectionId) {\n __typename\n ...CharacterViewer_collection\n id\n }\n}\n\nfragment CharacterViewer_collection on FontCollection {\n id\n name\n isVariableFont\n collectionType\n glyphGroups {\n name\n characterSets {\n features\n characters {\n __typename\n ... on CharacterString {\n string\n }\n ... on CharacterRange {\n first\n last\n }\n }\n }\n }\n featureStyle {\n ...CharacterViewer_style\n id\n }\n fontStyles {\n id\n cssFamily\n name\n variableInstances {\n name\n coordinates {\n axis\n value\n }\n }\n }\n children(collectionTypes: [FAMILY]) {\n id\n name\n isVariableFont\n collectionType\n fontStyles {\n id\n cssFamily\n name\n variableInstances {\n name\n coordinates {\n axis\n value\n }\n }\n }\n }\n}\n\nfragment CharacterViewer_style on FontStyle {\n ...useFontStyle_fontStyle\n variableInstances {\n name\n coordinates {\n axis\n value\n }\n }\n cssFamily\n name\n glyphNames {\n characters\n features\n name\n }\n verticalMetrics {\n unitsPerEm\n ascender\n descender\n xHeight\n capHeight\n lineGap\n }\n id\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"
362
+ "text": "query CharacterViewerIDQuery(\n $collectionId: ID!\n) {\n node(id: $collectionId) {\n __typename\n ...CharacterViewer_collection\n id\n }\n}\n\nfragment CharacterViewer_collection on FontCollection {\n id\n name\n isVariableFont\n collectionType\n glyphGroups {\n name\n characterSets {\n features\n characters {\n __typename\n ... on CharacterString {\n string\n }\n ... on CharacterRange {\n first\n last\n }\n }\n }\n }\n featureStyle {\n ...CharacterViewer_style\n id\n }\n fontStyles {\n id\n cssFamily\n name\n variableInstances {\n name\n coordinates {\n axis\n value\n }\n }\n }\n children(collectionTypes: [FAMILY]) {\n id\n name\n isVariableFont\n collectionType\n fontStyles {\n id\n cssFamily\n name\n variableInstances {\n name\n coordinates {\n axis\n value\n }\n }\n }\n }\n}\n\nfragment CharacterViewer_style on FontStyle {\n ...useFontStyle_fontStyle\n ...useFeaturesData_fontStyle\n variableInstances {\n name\n coordinates {\n axis\n value\n }\n }\n cssFamily\n name\n glyphNames {\n characters\n features\n name\n }\n verticalMetrics {\n unitsPerEm\n ascender\n descender\n xHeight\n capHeight\n lineGap\n }\n id\n}\n\nfragment useFeaturesData_fontStyle on FontStyle {\n fontFeatures {\n supportedFeatures\n featureNames {\n tag\n name\n }\n }\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"
333
363
  }
334
364
  };
335
365
  }();
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @generated SignedSource<<5c7df0a34500d9baf3d8f26576d6337c>>
2
+ * @generated SignedSource<<6dcd669ea9eae985c027da4d029b1d54>>
3
3
  * @lightSyntaxTransform
4
4
  * @nogrep
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @generated SignedSource<<5c7df0a34500d9baf3d8f26576d6337c>>
2
+ * @generated SignedSource<<6dcd669ea9eae985c027da4d029b1d54>>
3
3
  * @lightSyntaxTransform
4
4
  * @nogrep
5
5
  */
@@ -315,6 +315,36 @@ const node = function () {
315
315
  "storageKey": null
316
316
  }],
317
317
  "storageKey": null
318
+ }, {
319
+ "alias": null,
320
+ "args": null,
321
+ "concreteType": "FontFeatures",
322
+ "kind": "LinkedField",
323
+ "name": "fontFeatures",
324
+ "plural": false,
325
+ "selections": [{
326
+ "alias": null,
327
+ "args": null,
328
+ "kind": "ScalarField",
329
+ "name": "supportedFeatures",
330
+ "storageKey": null
331
+ }, {
332
+ "alias": null,
333
+ "args": null,
334
+ "concreteType": "FeatureName",
335
+ "kind": "LinkedField",
336
+ "name": "featureNames",
337
+ "plural": true,
338
+ "selections": [{
339
+ "alias": null,
340
+ "args": null,
341
+ "kind": "ScalarField",
342
+ "name": "tag",
343
+ "storageKey": null
344
+ }, v3 /*: any*/],
345
+ "storageKey": null
346
+ }],
347
+ "storageKey": null
318
348
  }, v8 /*: any*/, {
319
349
  "alias": null,
320
350
  "args": null,
@@ -354,12 +384,12 @@ const node = function () {
354
384
  }]
355
385
  },
356
386
  "params": {
357
- "cacheID": "f288c10ebaa6fb3da19a93d67ff99291",
387
+ "cacheID": "a4a373619982126aadb1f76193223680",
358
388
  "id": null,
359
389
  "metadata": {},
360
390
  "name": "CharacterViewerSlugQuery",
361
391
  "operationKind": "query",
362
- "text": "query CharacterViewerSlugQuery(\n $collectionSlug: String!\n) {\n viewer {\n slug(name: $collectionSlug) {\n fontCollection {\n ...CharacterViewer_collection\n id\n }\n id\n }\n id\n }\n}\n\nfragment CharacterViewer_collection on FontCollection {\n id\n name\n isVariableFont\n collectionType\n glyphGroups {\n name\n characterSets {\n features\n characters {\n __typename\n ... on CharacterString {\n string\n }\n ... on CharacterRange {\n first\n last\n }\n }\n }\n }\n featureStyle {\n ...CharacterViewer_style\n id\n }\n fontStyles {\n id\n cssFamily\n name\n variableInstances {\n name\n coordinates {\n axis\n value\n }\n }\n }\n children(collectionTypes: [FAMILY]) {\n id\n name\n isVariableFont\n collectionType\n fontStyles {\n id\n cssFamily\n name\n variableInstances {\n name\n coordinates {\n axis\n value\n }\n }\n }\n }\n}\n\nfragment CharacterViewer_style on FontStyle {\n ...useFontStyle_fontStyle\n variableInstances {\n name\n coordinates {\n axis\n value\n }\n }\n cssFamily\n name\n glyphNames {\n characters\n features\n name\n }\n verticalMetrics {\n unitsPerEm\n ascender\n descender\n xHeight\n capHeight\n lineGap\n }\n id\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"
392
+ "text": "query CharacterViewerSlugQuery(\n $collectionSlug: String!\n) {\n viewer {\n slug(name: $collectionSlug) {\n fontCollection {\n ...CharacterViewer_collection\n id\n }\n id\n }\n id\n }\n}\n\nfragment CharacterViewer_collection on FontCollection {\n id\n name\n isVariableFont\n collectionType\n glyphGroups {\n name\n characterSets {\n features\n characters {\n __typename\n ... on CharacterString {\n string\n }\n ... on CharacterRange {\n first\n last\n }\n }\n }\n }\n featureStyle {\n ...CharacterViewer_style\n id\n }\n fontStyles {\n id\n cssFamily\n name\n variableInstances {\n name\n coordinates {\n axis\n value\n }\n }\n }\n children(collectionTypes: [FAMILY]) {\n id\n name\n isVariableFont\n collectionType\n fontStyles {\n id\n cssFamily\n name\n variableInstances {\n name\n coordinates {\n axis\n value\n }\n }\n }\n }\n}\n\nfragment CharacterViewer_style on FontStyle {\n ...useFontStyle_fontStyle\n ...useFeaturesData_fontStyle\n variableInstances {\n name\n coordinates {\n axis\n value\n }\n }\n cssFamily\n name\n glyphNames {\n characters\n features\n name\n }\n verticalMetrics {\n unitsPerEm\n ascender\n descender\n xHeight\n capHeight\n lineGap\n }\n id\n}\n\nfragment useFeaturesData_fontStyle on FontStyle {\n fontFeatures {\n supportedFeatures\n featureNames {\n tag\n name\n }\n }\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"
363
393
  }
364
394
  };
365
395
  }();
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @generated SignedSource<<6e2b13903a03fb5159425b2def155914>>
2
+ * @generated SignedSource<<ec378d68ce4b4f2ac50bd750f785a55e>>
3
3
  * @lightSyntaxTransform
4
4
  * @nogrep
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @generated SignedSource<<6e2b13903a03fb5159425b2def155914>>
2
+ * @generated SignedSource<<ec378d68ce4b4f2ac50bd750f785a55e>>
3
3
  * @lightSyntaxTransform
4
4
  * @nogrep
5
5
  */
@@ -159,6 +159,36 @@ const node = function () {
159
159
  "storageKey": null
160
160
  }],
161
161
  "storageKey": null
162
+ }, {
163
+ "alias": null,
164
+ "args": null,
165
+ "concreteType": "FontFeatures",
166
+ "kind": "LinkedField",
167
+ "name": "fontFeatures",
168
+ "plural": false,
169
+ "selections": [{
170
+ "alias": null,
171
+ "args": null,
172
+ "kind": "ScalarField",
173
+ "name": "supportedFeatures",
174
+ "storageKey": null
175
+ }, {
176
+ "alias": null,
177
+ "args": null,
178
+ "concreteType": "FeatureName",
179
+ "kind": "LinkedField",
180
+ "name": "featureNames",
181
+ "plural": true,
182
+ "selections": [{
183
+ "alias": null,
184
+ "args": null,
185
+ "kind": "ScalarField",
186
+ "name": "tag",
187
+ "storageKey": null
188
+ }, v2 /*: any*/],
189
+ "storageKey": null
190
+ }],
191
+ "storageKey": null
162
192
  }, {
163
193
  "alias": null,
164
194
  "args": null,
@@ -218,14 +248,14 @@ const node = function () {
218
248
  }]
219
249
  },
220
250
  "params": {
221
- "cacheID": "bd9e85f4fe8e9fd45dda4c984e45a908",
251
+ "cacheID": "9448857ec005ded82f8b54ba87343851",
222
252
  "id": null,
223
253
  "metadata": {},
224
254
  "name": "CharacterViewerStyleRefetchQuery",
225
255
  "operationKind": "query",
226
- "text": "query CharacterViewerStyleRefetchQuery(\n $id: ID!\n) {\n node(id: $id) {\n __typename\n ...CharacterViewer_style\n id\n }\n}\n\nfragment CharacterViewer_style on FontStyle {\n ...useFontStyle_fontStyle\n variableInstances {\n name\n coordinates {\n axis\n value\n }\n }\n cssFamily\n name\n glyphNames {\n characters\n features\n name\n }\n verticalMetrics {\n unitsPerEm\n ascender\n descender\n xHeight\n capHeight\n lineGap\n }\n id\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"
256
+ "text": "query CharacterViewerStyleRefetchQuery(\n $id: ID!\n) {\n node(id: $id) {\n __typename\n ...CharacterViewer_style\n id\n }\n}\n\nfragment CharacterViewer_style on FontStyle {\n ...useFontStyle_fontStyle\n ...useFeaturesData_fontStyle\n variableInstances {\n name\n coordinates {\n axis\n value\n }\n }\n cssFamily\n name\n glyphNames {\n characters\n features\n name\n }\n verticalMetrics {\n unitsPerEm\n ascender\n descender\n xHeight\n capHeight\n lineGap\n }\n id\n}\n\nfragment useFeaturesData_fontStyle on FontStyle {\n fontFeatures {\n supportedFeatures\n featureNames {\n tag\n name\n }\n }\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"
227
257
  }
228
258
  };
229
259
  }();
230
- node.hash = "8cbf3328030930b88b3ec3601aaf7c45";
260
+ node.hash = "087471e544e0a6ed17f1b17cd0570e28";
231
261
  export default node;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @generated SignedSource<<a44f8429fa268fcdaadf09a4628fcab1>>
2
+ * @generated SignedSource<<0da12f5fe3fcb64cb860991d026a732b>>
3
3
  * @lightSyntaxTransform
4
4
  * @nogrep
5
5
  */
@@ -29,7 +29,7 @@ export type CharacterViewer_style$data = {
29
29
  readonly unitsPerEm: number;
30
30
  readonly xHeight: number | null;
31
31
  };
32
- readonly " $fragmentSpreads": FragmentRefs<"useFontStyle_fontStyle">;
32
+ readonly " $fragmentSpreads": FragmentRefs<"useFeaturesData_fontStyle" | "useFontStyle_fontStyle">;
33
33
  readonly " $fragmentType": "CharacterViewer_style";
34
34
  };
35
35
  export type CharacterViewer_style$key = {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @generated SignedSource<<a44f8429fa268fcdaadf09a4628fcab1>>
2
+ * @generated SignedSource<<0da12f5fe3fcb64cb860991d026a732b>>
3
3
  * @lightSyntaxTransform
4
4
  * @nogrep
5
5
  */
@@ -36,6 +36,10 @@ const node = function () {
36
36
  "args": null,
37
37
  "kind": "FragmentSpread",
38
38
  "name": "useFontStyle_fontStyle"
39
+ }, {
40
+ "args": null,
41
+ "kind": "FragmentSpread",
42
+ "name": "useFeaturesData_fontStyle"
39
43
  }, {
40
44
  "alias": null,
41
45
  "args": null,
@@ -149,5 +153,5 @@ const node = function () {
149
153
  "abstractKey": null
150
154
  };
151
155
  }();
152
- node.hash = "8cbf3328030930b88b3ec3601aaf7c45";
156
+ node.hash = "087471e544e0a6ed17f1b17cd0570e28";
153
157
  export default node;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @generated SignedSource<<f2ab2286dcf091bd52af2d5bc336b434>>
2
+ * @generated SignedSource<<cdc49b02a41cd8473facbd3d1fec6e92>>
3
3
  * @lightSyntaxTransform
4
4
  * @nogrep
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @generated SignedSource<<f2ab2286dcf091bd52af2d5bc336b434>>
2
+ * @generated SignedSource<<cdc49b02a41cd8473facbd3d1fec6e92>>
3
3
  * @lightSyntaxTransform
4
4
  * @nogrep
5
5
  */
@@ -33,6 +33,13 @@ const node = function () {
33
33
  "kind": "ScalarField",
34
34
  "name": "id",
35
35
  "storageKey": null
36
+ },
37
+ v3 = {
38
+ "alias": null,
39
+ "args": null,
40
+ "kind": "ScalarField",
41
+ "name": "name",
42
+ "storageKey": null
36
43
  };
37
44
  return {
38
45
  "fragment": {
@@ -91,13 +98,7 @@ const node = function () {
91
98
  "kind": "ScalarField",
92
99
  "name": "cssFamily",
93
100
  "storageKey": null
94
- }, {
95
- "alias": null,
96
- "args": null,
97
- "kind": "ScalarField",
98
- "name": "name",
99
- "storageKey": null
100
- }, {
101
+ }, v3 /*: any*/, {
101
102
  "alias": null,
102
103
  "args": null,
103
104
  "concreteType": "WebfontSource",
@@ -179,23 +180,17 @@ const node = function () {
179
180
  }, {
180
181
  "alias": null,
181
182
  "args": null,
182
- "concreteType": "StylisticSetName",
183
+ "concreteType": "FeatureName",
183
184
  "kind": "LinkedField",
184
- "name": "stylisticSetNames",
185
+ "name": "featureNames",
185
186
  "plural": true,
186
187
  "selections": [{
187
188
  "alias": null,
188
189
  "args": null,
189
190
  "kind": "ScalarField",
190
- "name": "featureName",
191
- "storageKey": null
192
- }, {
193
- "alias": null,
194
- "args": null,
195
- "kind": "ScalarField",
196
- "name": "humanName",
191
+ "name": "tag",
197
192
  "storageKey": null
198
- }],
193
+ }, v3 /*: any*/],
199
194
  "storageKey": null
200
195
  }],
201
196
  "storageKey": null
@@ -227,12 +222,12 @@ const node = function () {
227
222
  }]
228
223
  },
229
224
  "params": {
230
- "cacheID": "5982e90168f8a77ba758d70535cbb32a",
225
+ "cacheID": "e97104d6039557e6c0e1526539906b06",
231
226
  "id": null,
232
227
  "metadata": {},
233
228
  "name": "FeatureTesterStandaloneQuery",
234
229
  "operationKind": "query",
235
- "text": "query FeatureTesterStandaloneQuery(\n $familyName: String!\n $styleName: String!\n) {\n viewer {\n fontStyle(familyName: $familyName, styleName: $styleName) {\n id\n ...FeatureTesterCard_fontStyle\n }\n id\n }\n}\n\nfragment FeatureTesterCard_fontStyle on FontStyle {\n ...FontStyle_fontStyle\n ...useFeaturesData_fontStyle\n cssFamily\n name\n glyphNames {\n characters\n features\n }\n}\n\nfragment FontStyle_fontStyle on FontStyle {\n ...useFontStyle_fontStyle\n}\n\nfragment useFeaturesData_fontStyle on FontStyle {\n fontFeatures {\n supportedFeatures\n stylisticSetNames {\n featureName\n humanName\n }\n }\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"
230
+ "text": "query FeatureTesterStandaloneQuery(\n $familyName: String!\n $styleName: String!\n) {\n viewer {\n fontStyle(familyName: $familyName, styleName: $styleName) {\n id\n ...FeatureTesterCard_fontStyle\n }\n id\n }\n}\n\nfragment FeatureTesterCard_fontStyle on FontStyle {\n ...FontStyle_fontStyle\n ...useFeaturesData_fontStyle\n cssFamily\n name\n glyphNames {\n characters\n features\n }\n}\n\nfragment FontStyle_fontStyle on FontStyle {\n ...useFontStyle_fontStyle\n}\n\nfragment useFeaturesData_fontStyle on FontStyle {\n fontFeatures {\n supportedFeatures\n featureNames {\n tag\n name\n }\n }\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"
236
231
  }
237
232
  };
238
233
  }();
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @generated SignedSource<<c3ad0b621c332052d7f7324469a05f99>>
2
+ * @generated SignedSource<<3b299a6976d0bf100eb859d7c11a344c>>
3
3
  * @lightSyntaxTransform
4
4
  * @nogrep
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @generated SignedSource<<c3ad0b621c332052d7f7324469a05f99>>
2
+ * @generated SignedSource<<3b299a6976d0bf100eb859d7c11a344c>>
3
3
  * @lightSyntaxTransform
4
4
  * @nogrep
5
5
  */
@@ -25,6 +25,13 @@ const node = function () {
25
25
  "kind": "ScalarField",
26
26
  "name": "id",
27
27
  "storageKey": null
28
+ },
29
+ v3 = {
30
+ "alias": null,
31
+ "args": null,
32
+ "kind": "ScalarField",
33
+ "name": "name",
34
+ "storageKey": null
28
35
  };
29
36
  return {
30
37
  "fragment": {
@@ -190,13 +197,7 @@ const node = function () {
190
197
  "kind": "ScalarField",
191
198
  "name": "cssFamily",
192
199
  "storageKey": null
193
- }, {
194
- "alias": null,
195
- "args": null,
196
- "kind": "ScalarField",
197
- "name": "name",
198
- "storageKey": null
199
- }, {
200
+ }, v3 /*: any*/, {
200
201
  "alias": null,
201
202
  "args": null,
202
203
  "concreteType": "WebfontSource",
@@ -278,23 +279,17 @@ const node = function () {
278
279
  }, {
279
280
  "alias": null,
280
281
  "args": null,
281
- "concreteType": "StylisticSetName",
282
+ "concreteType": "FeatureName",
282
283
  "kind": "LinkedField",
283
- "name": "stylisticSetNames",
284
+ "name": "featureNames",
284
285
  "plural": true,
285
286
  "selections": [{
286
287
  "alias": null,
287
288
  "args": null,
288
289
  "kind": "ScalarField",
289
- "name": "featureName",
290
- "storageKey": null
291
- }, {
292
- "alias": null,
293
- "args": null,
294
- "kind": "ScalarField",
295
- "name": "humanName",
290
+ "name": "tag",
296
291
  "storageKey": null
297
- }],
292
+ }, v3 /*: any*/],
298
293
  "storageKey": null
299
294
  }],
300
295
  "storageKey": null
@@ -331,12 +326,12 @@ const node = function () {
331
326
  }]
332
327
  },
333
328
  "params": {
334
- "cacheID": "2766d928cb71f0b48c390f985625920e",
329
+ "cacheID": "ca34a54862281e0bc708f27b1e97720e",
335
330
  "id": null,
336
331
  "metadata": {},
337
332
  "name": "FeatureTestersIdQuery",
338
333
  "operationKind": "query",
339
- "text": "query FeatureTestersIdQuery(\n $id: ID!\n) {\n node(id: $id) {\n __typename\n ... on FontCollection {\n ...FeatureTesters_collection\n }\n id\n }\n}\n\nfragment FeatureTesterCard_fontStyle on FontStyle {\n ...FontStyle_fontStyle\n ...useFeaturesData_fontStyle\n cssFamily\n name\n glyphNames {\n characters\n features\n }\n}\n\nfragment FeatureTesters_collection on FontCollection {\n featureTesterDefaultOn\n featureTesterShowTag\n featureTesters {\n id\n feature\n label\n content\n size\n lineHeight\n alignment\n autofit\n changedRanges {\n start\n length\n }\n variableSettings {\n axis\n value\n }\n fontStyle {\n ...FeatureTesterCard_fontStyle\n id\n }\n }\n}\n\nfragment FontStyle_fontStyle on FontStyle {\n ...useFontStyle_fontStyle\n}\n\nfragment useFeaturesData_fontStyle on FontStyle {\n fontFeatures {\n supportedFeatures\n stylisticSetNames {\n featureName\n humanName\n }\n }\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"
334
+ "text": "query FeatureTestersIdQuery(\n $id: ID!\n) {\n node(id: $id) {\n __typename\n ... on FontCollection {\n ...FeatureTesters_collection\n }\n id\n }\n}\n\nfragment FeatureTesterCard_fontStyle on FontStyle {\n ...FontStyle_fontStyle\n ...useFeaturesData_fontStyle\n cssFamily\n name\n glyphNames {\n characters\n features\n }\n}\n\nfragment FeatureTesters_collection on FontCollection {\n featureTesterDefaultOn\n featureTesterShowTag\n featureTesters {\n id\n feature\n label\n content\n size\n lineHeight\n alignment\n autofit\n changedRanges {\n start\n length\n }\n variableSettings {\n axis\n value\n }\n fontStyle {\n ...FeatureTesterCard_fontStyle\n id\n }\n }\n}\n\nfragment FontStyle_fontStyle on FontStyle {\n ...useFontStyle_fontStyle\n}\n\nfragment useFeaturesData_fontStyle on FontStyle {\n fontFeatures {\n supportedFeatures\n featureNames {\n tag\n name\n }\n }\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"
340
335
  }
341
336
  };
342
337
  }();
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @generated SignedSource<<45eb26181270bd20d481b2729350270f>>
2
+ * @generated SignedSource<<d0ea0583e639afe74556c1f582bf7066>>
3
3
  * @lightSyntaxTransform
4
4
  * @nogrep
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @generated SignedSource<<45eb26181270bd20d481b2729350270f>>
2
+ * @generated SignedSource<<d0ea0583e639afe74556c1f582bf7066>>
3
3
  * @lightSyntaxTransform
4
4
  * @nogrep
5
5
  */
@@ -25,6 +25,13 @@ const node = function () {
25
25
  "kind": "ScalarField",
26
26
  "name": "id",
27
27
  "storageKey": null
28
+ },
29
+ v3 = {
30
+ "alias": null,
31
+ "args": null,
32
+ "kind": "ScalarField",
33
+ "name": "name",
34
+ "storageKey": null
28
35
  };
29
36
  return {
30
37
  "fragment": {
@@ -209,13 +216,7 @@ const node = function () {
209
216
  "kind": "ScalarField",
210
217
  "name": "cssFamily",
211
218
  "storageKey": null
212
- }, {
213
- "alias": null,
214
- "args": null,
215
- "kind": "ScalarField",
216
- "name": "name",
217
- "storageKey": null
218
- }, {
219
+ }, v3 /*: any*/, {
219
220
  "alias": null,
220
221
  "args": null,
221
222
  "concreteType": "WebfontSource",
@@ -297,23 +298,17 @@ const node = function () {
297
298
  }, {
298
299
  "alias": null,
299
300
  "args": null,
300
- "concreteType": "StylisticSetName",
301
+ "concreteType": "FeatureName",
301
302
  "kind": "LinkedField",
302
- "name": "stylisticSetNames",
303
+ "name": "featureNames",
303
304
  "plural": true,
304
305
  "selections": [{
305
306
  "alias": null,
306
307
  "args": null,
307
308
  "kind": "ScalarField",
308
- "name": "featureName",
309
- "storageKey": null
310
- }, {
311
- "alias": null,
312
- "args": null,
313
- "kind": "ScalarField",
314
- "name": "humanName",
309
+ "name": "tag",
315
310
  "storageKey": null
316
- }],
311
+ }, v3 /*: any*/],
317
312
  "storageKey": null
318
313
  }],
319
314
  "storageKey": null
@@ -351,12 +346,12 @@ const node = function () {
351
346
  }]
352
347
  },
353
348
  "params": {
354
- "cacheID": "2cba5cdcd88e591ea9cb602a16833af7",
349
+ "cacheID": "218c28c9cb4f3d21994a653097625842",
355
350
  "id": null,
356
351
  "metadata": {},
357
352
  "name": "FeatureTestersSlugQuery",
358
353
  "operationKind": "query",
359
- "text": "query FeatureTestersSlugQuery(\n $slug: String!\n) {\n viewer {\n slug(name: $slug) {\n fontCollection {\n ...FeatureTesters_collection\n id\n }\n id\n }\n id\n }\n}\n\nfragment FeatureTesterCard_fontStyle on FontStyle {\n ...FontStyle_fontStyle\n ...useFeaturesData_fontStyle\n cssFamily\n name\n glyphNames {\n characters\n features\n }\n}\n\nfragment FeatureTesters_collection on FontCollection {\n featureTesterDefaultOn\n featureTesterShowTag\n featureTesters {\n id\n feature\n label\n content\n size\n lineHeight\n alignment\n autofit\n changedRanges {\n start\n length\n }\n variableSettings {\n axis\n value\n }\n fontStyle {\n ...FeatureTesterCard_fontStyle\n id\n }\n }\n}\n\nfragment FontStyle_fontStyle on FontStyle {\n ...useFontStyle_fontStyle\n}\n\nfragment useFeaturesData_fontStyle on FontStyle {\n fontFeatures {\n supportedFeatures\n stylisticSetNames {\n featureName\n humanName\n }\n }\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"
354
+ "text": "query FeatureTestersSlugQuery(\n $slug: String!\n) {\n viewer {\n slug(name: $slug) {\n fontCollection {\n ...FeatureTesters_collection\n id\n }\n id\n }\n id\n }\n}\n\nfragment FeatureTesterCard_fontStyle on FontStyle {\n ...FontStyle_fontStyle\n ...useFeaturesData_fontStyle\n cssFamily\n name\n glyphNames {\n characters\n features\n }\n}\n\nfragment FeatureTesters_collection on FontCollection {\n featureTesterDefaultOn\n featureTesterShowTag\n featureTesters {\n id\n feature\n label\n content\n size\n lineHeight\n alignment\n autofit\n changedRanges {\n start\n length\n }\n variableSettings {\n axis\n value\n }\n fontStyle {\n ...FeatureTesterCard_fontStyle\n id\n }\n }\n}\n\nfragment FontStyle_fontStyle on FontStyle {\n ...useFontStyle_fontStyle\n}\n\nfragment useFeaturesData_fontStyle on FontStyle {\n fontFeatures {\n supportedFeatures\n featureNames {\n tag\n name\n }\n }\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"
360
355
  }
361
356
  };
362
357
  }();
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @generated SignedSource<<642da79d6304c9a0bba1e98cb8b9b3fe>>
2
+ * @generated SignedSource<<d8894237f25f4e65144d657d3687ab7c>>
3
3
  * @lightSyntaxTransform
4
4
  * @nogrep
5
5
  */