fontdue-js 3.0.0-alpha1 → 3.0.0-alpha2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__generated__/FontdueProviderQuery.graphql.d.ts +19 -0
- package/dist/__generated__/FontdueProviderQuery.graphql.js +140 -0
- package/dist/__generated__/ServerConfigProvider_viewer.graphql.d.ts +23 -0
- package/dist/__generated__/ServerConfigProvider_viewer.graphql.js +57 -0
- package/dist/__generated__/TestModeBanner_viewer.graphql.d.ts +19 -0
- package/dist/__generated__/TestModeBanner_viewer.graphql.js +36 -0
- package/dist/__generated__/ThemeConfig_viewer.graphql.d.ts +19 -0
- package/dist/__generated__/ThemeConfig_viewer.graphql.js +36 -0
- package/dist/components/BuyButton/index.d.ts +24 -4
- package/dist/components/BuyButton/index.js +58 -15
- package/dist/components/BuyButton/index.server.d.ts +4 -1
- package/dist/components/BuyButton/index.server.js +5 -0
- package/dist/components/CartButton/index.d.ts +9 -6
- package/dist/components/CartButton/index.js +19 -16
- package/dist/components/CartButton/index.server.js +5 -0
- package/dist/components/CharacterViewer/index.d.ts +26 -6
- package/dist/components/CharacterViewer/index.js +63 -13
- package/dist/components/CharacterViewer/index.server.d.ts +4 -1
- package/dist/components/CharacterViewer/index.server.js +6 -0
- package/dist/components/FontdueContextProvider/index.d.ts +17 -0
- package/dist/components/FontdueContextProvider/index.js +108 -0
- package/dist/components/FontdueContextProvider/index.server.d.ts +4 -0
- package/dist/components/FontdueContextProvider/index.server.js +7 -0
- package/dist/components/FontdueProvider/index.d.ts +9 -3
- package/dist/components/FontdueProvider/index.js +61 -23
- package/dist/components/FontdueProvider/index.server.d.ts +3 -3
- package/dist/components/FontdueProvider/index.server.js +14 -24
- package/dist/components/NewsletterSignup/index.d.ts +9 -6
- package/dist/components/NewsletterSignup/index.js +16 -1
- package/dist/components/NewsletterSignup/index.server.js +5 -0
- package/dist/components/ServerConfigProvider/index.d.ts +3 -1
- package/dist/components/ServerConfigProvider/index.js +7 -6
- package/dist/components/StoreModal/index.js +9 -2
- package/dist/components/TestFontsForm/index.d.ts +8 -3
- package/dist/components/TestFontsForm/index.js +16 -1
- package/dist/components/TestFontsForm/index.server.js +5 -0
- package/dist/components/TestModeBanner/index.d.ts +4 -1
- package/dist/components/TestModeBanner/index.js +9 -17
- package/dist/components/ThemeConfig/index.d.ts +3 -5
- package/dist/components/ThemeConfig/index.js +10 -28
- package/dist/components/TypeTester/TypeTesterStandalone.d.ts +19 -5
- package/dist/components/TypeTester/TypeTesterStandalone.js +21 -2
- package/dist/components/TypeTester/TypeTesterStandalone.preload.js +7 -6
- package/dist/components/TypeTester/TypeTesterStandalone.server.d.ts +4 -2
- package/dist/components/TypeTester/TypeTesterStandalone.server.js +11 -4
- package/dist/components/TypeTesters/index.d.ts +18 -2
- package/dist/components/TypeTesters/index.js +58 -8
- package/dist/components/TypeTesters/index.server.js +5 -0
- package/dist/config.d.ts +2 -1
- package/dist/config.js +17 -6
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/loadFontdueProviderQuery.d.ts +4 -0
- package/dist/loadFontdueProviderQuery.js +10 -0
- package/dist/relay/environment.js +4 -5
- package/dist/vite.d.ts +2 -1
- package/dist/vite.js +13 -4
- package/package.json +3 -2
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { TestFontsForm_Query } from '../../__generated__/TestFontsForm_Query.graphql.js';
|
|
3
|
-
import { SerializablePreloadedQuery } from '../../relay/loadSerializableQuery.js';
|
|
3
|
+
import { LoadSerializableQueryOptions, SerializablePreloadedQuery } from '../../relay/loadSerializableQuery.js';
|
|
4
4
|
export interface TestFontsForm_props {
|
|
5
5
|
agreementLabel?: string;
|
|
6
6
|
downloadLabel?: string;
|
|
7
7
|
newsletterCheckboxChecked?: boolean;
|
|
8
8
|
}
|
|
9
|
+
export type TestFontsFormPreloadedQuery = SerializablePreloadedQuery<TestFontsForm_Query>;
|
|
10
|
+
export declare function loadTestFontsFormQuery(options?: LoadSerializableQueryOptions): Promise<TestFontsFormPreloadedQuery>;
|
|
9
11
|
export declare function TestFontsFormPreloadedQueryRenderer({ preloadedQuery, ...rest }: TestFontsForm_props & {
|
|
10
|
-
preloadedQuery:
|
|
12
|
+
preloadedQuery: TestFontsFormPreloadedQuery;
|
|
11
13
|
}): React.JSX.Element;
|
|
12
|
-
export
|
|
14
|
+
export type TestFontsForm_unifiedProps = TestFontsForm_props & {
|
|
15
|
+
preloadedQuery?: TestFontsFormPreloadedQuery;
|
|
16
|
+
};
|
|
17
|
+
export default function TestFontsForm(props: TestFontsForm_unifiedProps): React.JSX.Element;
|
|
@@ -8,8 +8,11 @@ import { commitMutation, graphql, useRelayEnvironment, useLazyLoadQuery, usePrel
|
|
|
8
8
|
import { ReCAPTCHA } from 'react-google-recaptcha';
|
|
9
9
|
import TextField from '../TextField/index.js';
|
|
10
10
|
import { DownloadFonts } from '../Icons/index.js';
|
|
11
|
+
import TestFontsFormQueryNode from '../../__generated__/TestFontsForm_Query.graphql.js';
|
|
11
12
|
import Checkbox from '../Checkbox/index.js';
|
|
13
|
+
import loadSerializableQuery from '../../relay/loadSerializableQuery.js';
|
|
12
14
|
import useSerializablePreloadedQuery from '../../relay/useSerializablePreloadedQuery.js';
|
|
15
|
+
import { EnsureFontdueContext } from '../FontdueContextProvider/index.js';
|
|
13
16
|
const updateCustomerMutation = (_TestFontsFormUpdateCustomerMutation.hash && _TestFontsFormUpdateCustomerMutation.hash !== "ba56958399f0893bd667ff02c33a6975" && console.error("The definition of 'TestFontsFormUpdateCustomerMutation' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data."), _TestFontsFormUpdateCustomerMutation);
|
|
14
17
|
const TestFontsDownloading = _ref => {
|
|
15
18
|
let {
|
|
@@ -191,6 +194,9 @@ const TestFontsFormComponent = _ref2 => {
|
|
|
191
194
|
}));
|
|
192
195
|
};
|
|
193
196
|
const query = (_TestFontsForm_Query.hash && _TestFontsForm_Query.hash !== "cd43f0cacc4dcf01cf94fb1ff97197ca" && console.error("The definition of 'TestFontsForm_Query' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data."), _TestFontsForm_Query);
|
|
197
|
+
export async function loadTestFontsFormQuery(options) {
|
|
198
|
+
return loadSerializableQuery(TestFontsFormQueryNode, {}, options);
|
|
199
|
+
}
|
|
194
200
|
export function TestFontsFormPreloadedQueryRenderer(_ref4) {
|
|
195
201
|
let {
|
|
196
202
|
preloadedQuery,
|
|
@@ -202,9 +208,18 @@ export function TestFontsFormPreloadedQueryRenderer(_ref4) {
|
|
|
202
208
|
data: data
|
|
203
209
|
}, rest));
|
|
204
210
|
}
|
|
205
|
-
|
|
211
|
+
function TestFontsFormLazyQueryRenderer(props) {
|
|
206
212
|
const data = useLazyLoadQuery(query, {});
|
|
207
213
|
return /*#__PURE__*/React.createElement(TestFontsFormComponent, _extends({
|
|
208
214
|
data: data
|
|
209
215
|
}, props));
|
|
216
|
+
}
|
|
217
|
+
// Unified TestFontsForm entry. Accepts an optional preloaded query
|
|
218
|
+
// (server-side preload path) or fetches lazily on mount. `EnsureFontdueContext`
|
|
219
|
+
// only self-wraps with `FontdueContextProvider` when no parent Fontdue
|
|
220
|
+
// context is present.
|
|
221
|
+
export default function TestFontsForm(props) {
|
|
222
|
+
return /*#__PURE__*/React.createElement(EnsureFontdueContext, null, props.preloadedQuery ? /*#__PURE__*/React.createElement(TestFontsFormPreloadedQueryRenderer, _extends({}, props, {
|
|
223
|
+
preloadedQuery: props.preloadedQuery
|
|
224
|
+
})) : /*#__PURE__*/React.createElement(TestFontsFormLazyQueryRenderer, props));
|
|
210
225
|
}
|
|
@@ -3,6 +3,11 @@ import React from 'react';
|
|
|
3
3
|
import loadSerializableQuery from '../../relay/loadSerializableQuery.js';
|
|
4
4
|
import { TestFontsFormPreloadedQueryRenderer } from './index.js';
|
|
5
5
|
import TestFontsFormQueryNode from '../../__generated__/TestFontsForm_Query.graphql.js';
|
|
6
|
+
|
|
7
|
+
// Next RSC variant: awaits the query on the server and hands the response to
|
|
8
|
+
// the client `TestFontsFormPreloadedQueryRenderer`. Lets pages just write
|
|
9
|
+
// `<TestFontsForm />` in an RSC without manually invoking
|
|
10
|
+
// `loadTestFontsFormQuery` + threading `preloadedQuery` through props.
|
|
6
11
|
export default async function TestFontsForm(props) {
|
|
7
12
|
const preloadedQuery = await loadSerializableQuery(TestFontsFormQueryNode, {});
|
|
8
13
|
return /*#__PURE__*/React.createElement(TestFontsFormPreloadedQueryRenderer, _extends({
|
|
@@ -1,2 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
|
|
2
|
+
import type { TestModeBanner_viewer$key } from '../../__generated__/TestModeBanner_viewer.graphql.js';
|
|
3
|
+
export default function TestModeBanner({ viewer }: {
|
|
4
|
+
viewer: TestModeBanner_viewer$key;
|
|
5
|
+
}): React.JSX.Element | null;
|
|
@@ -1,30 +1,22 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import _TestModeBanner_viewer from "../../__generated__/TestModeBanner_viewer.graphql.js";
|
|
4
4
|
import React from 'react';
|
|
5
|
-
import { graphql,
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
import { graphql, useFragment } from 'react-relay';
|
|
6
|
+
const fragment = (_TestModeBanner_viewer.hash && _TestModeBanner_viewer.hash !== "f6b2f851466be9599d63ebf8f39e1a96" && console.error("The definition of 'TestModeBanner_viewer' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data."), _TestModeBanner_viewer);
|
|
7
|
+
export default function TestModeBanner(_ref) {
|
|
8
|
+
var _data$testMode;
|
|
8
9
|
let {
|
|
9
|
-
|
|
10
|
+
viewer
|
|
10
11
|
} = _ref;
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
// hide the banner completely if we're in live mode
|
|
14
|
-
if (!isActive) return null;
|
|
12
|
+
const data = useFragment(fragment, viewer);
|
|
13
|
+
if (!((_data$testMode = data.testMode) !== null && _data$testMode !== void 0 && _data$testMode.isActive)) return null;
|
|
15
14
|
return /*#__PURE__*/React.createElement("div", {
|
|
16
15
|
className: "test-mode-banner__banner",
|
|
17
|
-
"data-test-mode":
|
|
16
|
+
"data-test-mode": true
|
|
18
17
|
}, /*#__PURE__*/React.createElement("div", {
|
|
19
18
|
className: "test-mode-banner__content"
|
|
20
19
|
}, /*#__PURE__*/React.createElement("div", {
|
|
21
20
|
className: "test-mode-banner__title"
|
|
22
21
|
}, "Viewing test data")));
|
|
23
|
-
}
|
|
24
|
-
const query = (_TestModeBannerQuery.hash && _TestModeBannerQuery.hash !== "60ad67ee88ec6b74dd04bdf5572e7faf" && console.error("The definition of 'TestModeBannerQuery' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data."), _TestModeBannerQuery);
|
|
25
|
-
export default function TestModeBanner() {
|
|
26
|
-
const data = useLazyLoadQuery(query, {});
|
|
27
|
-
return /*#__PURE__*/React.createElement(TestModeBannerComponent, {
|
|
28
|
-
data: data
|
|
29
|
-
});
|
|
30
22
|
}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
preloadedQuery: SerializablePreloadedQuery<ThemeConfigQuery>;
|
|
2
|
+
import type { ThemeConfig_viewer$key } from '../../__generated__/ThemeConfig_viewer.graphql.js';
|
|
3
|
+
export default function ThemeConfig({ viewer }: {
|
|
4
|
+
viewer: ThemeConfig_viewer$key;
|
|
6
5
|
}): React.JSX.Element;
|
|
7
|
-
export default function ThemeConfig(): React.JSX.Element;
|
|
@@ -1,38 +1,20 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import _ThemeConfig_viewer from "../../__generated__/ThemeConfig_viewer.graphql.js";
|
|
4
4
|
import React from 'react';
|
|
5
|
-
import { graphql,
|
|
6
|
-
|
|
5
|
+
import { graphql, useFragment } from 'react-relay';
|
|
6
|
+
const fragment = (_ThemeConfig_viewer.hash && _ThemeConfig_viewer.hash !== "191db4fda0651cd596efa7f91699f895" && console.error("The definition of 'ThemeConfig_viewer' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data."), _ThemeConfig_viewer);
|
|
7
7
|
|
|
8
|
-
//
|
|
9
|
-
//
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
function ThemeConfigComponent(_ref) {
|
|
13
|
-
var _data$viewer$themeCon;
|
|
8
|
+
// Renders custom properties entered by tenant admins (with library defaults)
|
|
9
|
+
// as a single :root style block so var(...) lookups resolve everywhere.
|
|
10
|
+
export default function ThemeConfig(_ref) {
|
|
11
|
+
var _data$themeConfig;
|
|
14
12
|
let {
|
|
15
|
-
|
|
13
|
+
viewer
|
|
16
14
|
} = _ref;
|
|
17
|
-
const
|
|
15
|
+
const data = useFragment(fragment, viewer);
|
|
16
|
+
const props = ((_data$themeConfig = data.themeConfig) === null || _data$themeConfig === void 0 ? void 0 : _data$themeConfig.customProperties) ?? [];
|
|
18
17
|
return /*#__PURE__*/React.createElement("style", {
|
|
19
18
|
type: "text/css"
|
|
20
19
|
}, `:root { ${props.join(';')} }`);
|
|
21
|
-
}
|
|
22
|
-
const query = (_ThemeConfigQuery.hash && _ThemeConfigQuery.hash !== "c259bee038c4d2ea14c758fba3381f57" && console.error("The definition of 'ThemeConfigQuery' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data."), _ThemeConfigQuery);
|
|
23
|
-
export function ThemeConfigPreloadedQueryRenderer(_ref2) {
|
|
24
|
-
let {
|
|
25
|
-
preloadedQuery
|
|
26
|
-
} = _ref2;
|
|
27
|
-
const queryRef = useSerializablePreloadedQuery(preloadedQuery);
|
|
28
|
-
const data = usePreloadedQuery(query, queryRef);
|
|
29
|
-
return /*#__PURE__*/React.createElement(ThemeConfigComponent, {
|
|
30
|
-
data: data
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
export default function ThemeConfig() {
|
|
34
|
-
const data = useLazyLoadQuery(query, {});
|
|
35
|
-
return /*#__PURE__*/React.createElement(ThemeConfigComponent, {
|
|
36
|
-
data: data
|
|
37
|
-
});
|
|
38
20
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { Alignment, Direction, FeaturesProp } from './types.js';
|
|
3
|
-
import { SerializablePreloadedQuery } from '../../relay/loadSerializableQuery.js';
|
|
4
|
-
import { TypeTesterStandaloneQuery } from '__generated__/TypeTesterStandaloneQuery.graphql.js';
|
|
3
|
+
import { LoadSerializableQueryOptions, SerializablePreloadedQuery } from '../../relay/loadSerializableQuery.js';
|
|
4
|
+
import { TypeTesterStandaloneQuery } from '../../__generated__/TypeTesterStandaloneQuery.graphql.js';
|
|
5
5
|
interface TypeTesterStandaloneComponent_props {
|
|
6
6
|
lineHeight?: number | null;
|
|
7
7
|
letterSpacing?: number | null;
|
|
@@ -24,12 +24,26 @@ interface TypeTesterStandaloneComponent_props {
|
|
|
24
24
|
onFocus?: () => void;
|
|
25
25
|
onBlur?: () => void;
|
|
26
26
|
}
|
|
27
|
-
export
|
|
27
|
+
export type TypeTesterPreloadedQuery = SerializablePreloadedQuery<TypeTesterStandaloneQuery>;
|
|
28
|
+
export interface LoadTypeTesterQueryVariables {
|
|
28
29
|
familyName: string;
|
|
29
30
|
styleName: string;
|
|
31
|
+
selectable?: boolean;
|
|
30
32
|
}
|
|
33
|
+
export declare function loadTypeTesterQuery(variables: LoadTypeTesterQueryVariables, options?: LoadSerializableQueryOptions): Promise<TypeTesterPreloadedQuery>;
|
|
31
34
|
export declare function TypeTesterStandalonePreloadedQueryRenderer({ preloadedQuery, ...rest }: TypeTesterStandaloneComponent_props & {
|
|
32
|
-
preloadedQuery:
|
|
35
|
+
preloadedQuery: TypeTesterPreloadedQuery;
|
|
33
36
|
}): React.JSX.Element;
|
|
34
|
-
export
|
|
37
|
+
export type TypeTesterStandalone_props = TypeTesterStandaloneComponent_props & ({
|
|
38
|
+
preloadedQuery: TypeTesterPreloadedQuery;
|
|
39
|
+
familyName?: never;
|
|
40
|
+
styleName?: never;
|
|
41
|
+
selectable?: never;
|
|
42
|
+
} | {
|
|
43
|
+
preloadedQuery?: never;
|
|
44
|
+
familyName: string;
|
|
45
|
+
styleName: string;
|
|
46
|
+
selectable?: boolean;
|
|
47
|
+
});
|
|
48
|
+
export default function TypeTesterStandalone(props: TypeTesterStandalone_props): React.JSX.Element;
|
|
35
49
|
export {};
|
|
@@ -8,8 +8,11 @@ import { fetchQuery, graphql, useLazyLoadQuery, usePreloadedQuery, useRelayEnvir
|
|
|
8
8
|
import TypeTester from './index.js';
|
|
9
9
|
import TypeTesterContextComponent from './TypeTesterContext.js';
|
|
10
10
|
import { normalizeFeaturesProp } from './types.js';
|
|
11
|
+
import loadSerializableQuery from '../../relay/loadSerializableQuery.js';
|
|
11
12
|
import useSerializablePreloadedQuery from '../../relay/useSerializablePreloadedQuery.js';
|
|
13
|
+
import TypeTesterStandaloneQueryNode from '../../__generated__/TypeTesterStandaloneQuery.graphql.js';
|
|
12
14
|
import ConfigContext from '../ConfigContext.js';
|
|
15
|
+
import { EnsureFontdueContext } from '../FontdueContextProvider/index.js';
|
|
13
16
|
import { useLicenseAndOrderVariables } from '../../hooks/useLicenseAndOrderVariables.js';
|
|
14
17
|
const changedStylesQuery = (_TypeTesterStandaloneChangedStylesQuery.hash && _TypeTesterStandaloneChangedStylesQuery.hash !== "98374227c6b2c3eceab5b48138e1a662" && console.error("The definition of 'TypeTesterStandaloneChangedStylesQuery' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data."), _TypeTesterStandaloneChangedStylesQuery);
|
|
15
18
|
function TypeTesterStandaloneComponent(_ref) {
|
|
@@ -98,6 +101,13 @@ function TypeTesterStandaloneComponent(_ref) {
|
|
|
98
101
|
}));
|
|
99
102
|
}
|
|
100
103
|
const query = (_TypeTesterStandaloneQuery.hash && _TypeTesterStandaloneQuery.hash !== "57916b8e26a166271a80c5df1b3f68ec" && console.error("The definition of 'TypeTesterStandaloneQuery' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data."), _TypeTesterStandaloneQuery);
|
|
104
|
+
export async function loadTypeTesterQuery(variables, options) {
|
|
105
|
+
return loadSerializableQuery(TypeTesterStandaloneQueryNode, {
|
|
106
|
+
familyName: variables.familyName,
|
|
107
|
+
styleName: variables.styleName,
|
|
108
|
+
selectable: variables.selectable ?? true
|
|
109
|
+
}, options);
|
|
110
|
+
}
|
|
101
111
|
export function TypeTesterStandalonePreloadedQueryRenderer(_ref3) {
|
|
102
112
|
let {
|
|
103
113
|
preloadedQuery,
|
|
@@ -109,11 +119,12 @@ export function TypeTesterStandalonePreloadedQueryRenderer(_ref3) {
|
|
|
109
119
|
data: data
|
|
110
120
|
}, rest));
|
|
111
121
|
}
|
|
112
|
-
|
|
122
|
+
function TypeTesterStandaloneLazyQueryRenderer(_ref4) {
|
|
113
123
|
var _data$viewer4;
|
|
114
124
|
let {
|
|
115
125
|
familyName,
|
|
116
126
|
styleName,
|
|
127
|
+
selectable,
|
|
117
128
|
...rest
|
|
118
129
|
} = _ref4;
|
|
119
130
|
const {
|
|
@@ -122,7 +133,7 @@ export default function TypeTesterStandalone(_ref4) {
|
|
|
122
133
|
const data = useLazyLoadQuery(query, {
|
|
123
134
|
familyName,
|
|
124
135
|
styleName,
|
|
125
|
-
selectable: config.selectable
|
|
136
|
+
selectable: selectable ?? config.selectable
|
|
126
137
|
});
|
|
127
138
|
const fontStyle = (_data$viewer4 = data.viewer) === null || _data$viewer4 === void 0 ? void 0 : _data$viewer4.fontStyle;
|
|
128
139
|
if (!fontStyle) {
|
|
@@ -131,4 +142,12 @@ export default function TypeTesterStandalone(_ref4) {
|
|
|
131
142
|
return /*#__PURE__*/React.createElement(TypeTesterStandaloneComponent, _extends({
|
|
132
143
|
data: data
|
|
133
144
|
}, rest));
|
|
145
|
+
}
|
|
146
|
+
// Unified TypeTester entry point. Accepts either a preloaded query (server-side
|
|
147
|
+
// preload path, used by Astro/Vike/etc.) or `{familyName, styleName}` (lazy
|
|
148
|
+
// path, used inside an existing `<FontdueProvider>` tree like Next layouts).
|
|
149
|
+
// `EnsureFontdueContext` only self-wraps with `FontdueContextProvider` when
|
|
150
|
+
// no parent Fontdue context is present.
|
|
151
|
+
export default function TypeTesterStandalone(props) {
|
|
152
|
+
return /*#__PURE__*/React.createElement(EnsureFontdueContext, null, 'preloadedQuery' in props && props.preloadedQuery ? /*#__PURE__*/React.createElement(TypeTesterStandalonePreloadedQueryRenderer, props) : /*#__PURE__*/React.createElement(TypeTesterStandaloneLazyQueryRenderer, props));
|
|
134
153
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import loadSerializableQuery from '../../relay/loadSerializableQuery.js';
|
|
3
3
|
import TypeTesterStandaloneQueryNode from '../../__generated__/TypeTesterStandaloneQuery.graphql.js';
|
|
4
|
-
import
|
|
4
|
+
import FontdueContextProvider from '../FontdueContextProvider/index.js';
|
|
5
5
|
import { TypeTesterStandalonePreloadedQueryRenderer } from './TypeTesterStandalone.js';
|
|
6
6
|
export async function loadTypeTesterQuery(variables, options) {
|
|
7
7
|
return loadSerializableQuery(TypeTesterStandaloneQueryNode, {
|
|
@@ -10,10 +10,11 @@ export async function loadTypeTesterQuery(variables, options) {
|
|
|
10
10
|
selectable: variables.selectable ?? true
|
|
11
11
|
}, options);
|
|
12
12
|
}
|
|
13
|
-
// Self-wraps with
|
|
14
|
-
//
|
|
15
|
-
//
|
|
16
|
-
//
|
|
13
|
+
// Self-wraps with FontdueContextProvider so consumers don't need to wire up
|
|
14
|
+
// Relay env / Redux store / contexts at the call site. Aux UI (theme,
|
|
15
|
+
// test-mode banner, consent, tracking) is NOT rendered here — that belongs
|
|
16
|
+
// to a single layout-level `<FontdueProvider>` per page. State is shared
|
|
17
|
+
// across multiple preloaded components on a page via module-level singletons.
|
|
17
18
|
export function TypeTesterPreloaded(props) {
|
|
18
|
-
return /*#__PURE__*/React.createElement(
|
|
19
|
+
return /*#__PURE__*/React.createElement(FontdueContextProvider, null, /*#__PURE__*/React.createElement(TypeTesterStandalonePreloadedQueryRenderer, props));
|
|
19
20
|
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { TypeTesterStandalone_props } from './TypeTesterStandalone.js';
|
|
3
|
-
export default function TypeTesterStandalone(
|
|
2
|
+
import type { TypeTesterStandalone_props } from './TypeTesterStandalone.js';
|
|
3
|
+
export default function TypeTesterStandalone(props: Extract<TypeTesterStandalone_props, {
|
|
4
|
+
familyName: string;
|
|
5
|
+
}>): Promise<React.JSX.Element>;
|
|
@@ -3,16 +3,23 @@ import React from 'react';
|
|
|
3
3
|
import loadSerializableQuery from '../../relay/loadSerializableQuery.js';
|
|
4
4
|
import { TypeTesterStandalonePreloadedQueryRenderer } from './TypeTesterStandalone.js';
|
|
5
5
|
import TypeTesterStandaloneQueryNode from '../../__generated__/TypeTesterStandaloneQuery.graphql.js';
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
|
|
7
|
+
// Next RSC variant: awaits the query on the server and hands the response to
|
|
8
|
+
// the client `TypeTesterStandalonePreloadedQueryRenderer`. Lets pages just
|
|
9
|
+
// write `<TypeTester familyName="..." styleName="..." />` in an RSC without
|
|
10
|
+
// manually invoking `loadTypeTesterQuery` + threading `preloadedQuery`
|
|
11
|
+
// through props.
|
|
12
|
+
export default async function TypeTesterStandalone(props) {
|
|
13
|
+
const {
|
|
8
14
|
familyName,
|
|
9
15
|
styleName,
|
|
16
|
+
selectable,
|
|
10
17
|
...rest
|
|
11
|
-
} =
|
|
18
|
+
} = props;
|
|
12
19
|
const preloadedQuery = await loadSerializableQuery(TypeTesterStandaloneQueryNode, {
|
|
13
20
|
familyName,
|
|
14
21
|
styleName,
|
|
15
|
-
selectable: true
|
|
22
|
+
selectable: selectable ?? true
|
|
16
23
|
});
|
|
17
24
|
return /*#__PURE__*/React.createElement(TypeTesterStandalonePreloadedQueryRenderer, _extends({
|
|
18
25
|
preloadedQuery: preloadedQuery
|
|
@@ -2,7 +2,7 @@ import React from 'react';
|
|
|
2
2
|
import { TypeTestersIDQuery } from '../../__generated__/TypeTestersIDQuery.graphql.js';
|
|
3
3
|
import { TypeTestersSlugQuery } from '../../__generated__/TypeTestersSlugQuery.graphql.js';
|
|
4
4
|
import { FeaturesProp } from '../TypeTester/types.js';
|
|
5
|
-
import { SerializablePreloadedQuery } from '../../relay/loadSerializableQuery.js';
|
|
5
|
+
import { LoadSerializableQueryOptions, SerializablePreloadedQuery } from '../../relay/loadSerializableQuery.js';
|
|
6
6
|
export interface TypeTesters_props {
|
|
7
7
|
collectionId?: string;
|
|
8
8
|
collectionSlug?: string;
|
|
@@ -21,4 +21,20 @@ export declare function TypeTestersPreloadedIDQueryRenderer({ preloadedQuery, ..
|
|
|
21
21
|
export declare function TypeTestersPreloadedSlugQueryRenderer({ preloadedQuery, ...rest }: TypeTesters_props & {
|
|
22
22
|
preloadedQuery: SerializablePreloadedQuery<TypeTestersSlugQuery>;
|
|
23
23
|
}): React.JSX.Element;
|
|
24
|
-
export
|
|
24
|
+
export type TypeTestersPreloadedQuery = SerializablePreloadedQuery<TypeTestersIDQuery> | SerializablePreloadedQuery<TypeTestersSlugQuery>;
|
|
25
|
+
export type LoadTypeTestersQueryVariables = ({
|
|
26
|
+
collectionId: string;
|
|
27
|
+
collectionSlug?: never;
|
|
28
|
+
} | {
|
|
29
|
+
collectionId?: never;
|
|
30
|
+
collectionSlug: string;
|
|
31
|
+
}) & {
|
|
32
|
+
tags?: string[] | null;
|
|
33
|
+
excludeTags?: string[] | null;
|
|
34
|
+
selectable?: boolean;
|
|
35
|
+
};
|
|
36
|
+
export declare function loadTypeTestersQuery(variables: LoadTypeTestersQueryVariables, options?: LoadSerializableQueryOptions): Promise<TypeTestersPreloadedQuery>;
|
|
37
|
+
export type TypeTesters_unifiedProps = TypeTesters_props & {
|
|
38
|
+
preloadedQuery?: TypeTestersPreloadedQuery;
|
|
39
|
+
};
|
|
40
|
+
export default function TypeTesters({ collectionId, collectionSlug, preloadedQuery, ...rest }: TypeTesters_unifiedProps): React.JSX.Element | null;
|
|
@@ -10,6 +10,8 @@ import React, { useContext, useState, useCallback, useMemo } from 'react';
|
|
|
10
10
|
import { graphql, useFragment, useLazyLoadQuery, usePreloadedQuery, useRefetchableFragment, useRelayEnvironment, fetchQuery } from 'react-relay';
|
|
11
11
|
import { useSelector } from 'react-redux';
|
|
12
12
|
import PriceBar from '../PriceBar/index.js';
|
|
13
|
+
import TypeTestersIDQueryNode from '../../__generated__/TypeTestersIDQuery.graphql.js';
|
|
14
|
+
import TypeTestersSlugQueryNode from '../../__generated__/TypeTestersSlugQuery.graphql.js';
|
|
13
15
|
import { notEmpty } from '../../utils.js';
|
|
14
16
|
import TypeTesterContext from '../TypeTester/TypeTesterContext.js';
|
|
15
17
|
import ConfigContext from '../ConfigContext.js';
|
|
@@ -19,8 +21,10 @@ import TypeTestersChangedStylesQuery from '../../__generated__/TypeTestersChange
|
|
|
19
21
|
import TypeTester from '../TypeTester/index.js';
|
|
20
22
|
import TypeTesterFloatingToolbar from '../TypeTester/TypeTesterFloatingToolbar.js';
|
|
21
23
|
import { normalizeFeaturesProp } from '../TypeTester/types.js';
|
|
24
|
+
import loadSerializableQuery from '../../relay/loadSerializableQuery.js';
|
|
22
25
|
import useSerializablePreloadedQuery from '../../relay/useSerializablePreloadedQuery.js';
|
|
23
26
|
import { useLicenseAndOrderVariables } from '../../hooks/useLicenseAndOrderVariables.js';
|
|
27
|
+
import { EnsureFontdueContext } from '../FontdueContextProvider/index.js';
|
|
24
28
|
const findPriceBarCollection = (collection, familyId) => {
|
|
25
29
|
if (collection.id === familyId) return collection;
|
|
26
30
|
if (!collection.families) return null;
|
|
@@ -255,21 +259,67 @@ function TypeTestersSlugQueryRenderer(_ref6) {
|
|
|
255
259
|
excludeTags: excludeTags
|
|
256
260
|
}));
|
|
257
261
|
}
|
|
258
|
-
export
|
|
262
|
+
export async function loadTypeTestersQuery(variables, options) {
|
|
263
|
+
const tags = variables.tags ?? null;
|
|
264
|
+
const excludeTags = variables.excludeTags ?? null;
|
|
265
|
+
const selectable = variables.selectable ?? true;
|
|
266
|
+
if (variables.collectionId) {
|
|
267
|
+
return loadSerializableQuery(TypeTestersIDQueryNode, {
|
|
268
|
+
collectionId: variables.collectionId,
|
|
269
|
+
tags,
|
|
270
|
+
excludeTags,
|
|
271
|
+
selectable
|
|
272
|
+
}, options);
|
|
273
|
+
}
|
|
274
|
+
if (variables.collectionSlug) {
|
|
275
|
+
return loadSerializableQuery(TypeTestersSlugQueryNode, {
|
|
276
|
+
collectionSlug: variables.collectionSlug,
|
|
277
|
+
tags,
|
|
278
|
+
excludeTags,
|
|
279
|
+
selectable
|
|
280
|
+
}, options);
|
|
281
|
+
}
|
|
282
|
+
throw new Error('loadTypeTestersQuery expected either collectionId or collectionSlug');
|
|
283
|
+
}
|
|
284
|
+
function TypeTestersPreloadedRenderer(_ref7) {
|
|
285
|
+
let {
|
|
286
|
+
preloadedQuery,
|
|
287
|
+
...rest
|
|
288
|
+
} = _ref7;
|
|
289
|
+
if (preloadedQuery.params.name === 'TypeTestersIDQuery') {
|
|
290
|
+
return /*#__PURE__*/React.createElement(TypeTestersPreloadedIDQueryRenderer, _extends({
|
|
291
|
+
preloadedQuery: preloadedQuery
|
|
292
|
+
}, rest));
|
|
293
|
+
}
|
|
294
|
+
return /*#__PURE__*/React.createElement(TypeTestersPreloadedSlugQueryRenderer, _extends({
|
|
295
|
+
preloadedQuery: preloadedQuery
|
|
296
|
+
}, rest));
|
|
297
|
+
}
|
|
298
|
+
// Unified TypeTesters entry. Accepts an optional preloaded query (server-side
|
|
299
|
+
// preload path) or `{collectionId}`/`{collectionSlug}` for lazy fetch.
|
|
300
|
+
// `EnsureFontdueContext` only self-wraps with `FontdueContextProvider` when
|
|
301
|
+
// no parent Fontdue context is present.
|
|
302
|
+
export default function TypeTesters(_ref8) {
|
|
259
303
|
let {
|
|
260
304
|
collectionId,
|
|
261
305
|
collectionSlug,
|
|
306
|
+
preloadedQuery,
|
|
262
307
|
...rest
|
|
263
|
-
} =
|
|
264
|
-
|
|
265
|
-
|
|
308
|
+
} = _ref8;
|
|
309
|
+
let inner = null;
|
|
310
|
+
if (preloadedQuery) {
|
|
311
|
+
inner = /*#__PURE__*/React.createElement(TypeTestersPreloadedRenderer, _extends({
|
|
312
|
+
preloadedQuery: preloadedQuery
|
|
313
|
+
}, rest));
|
|
314
|
+
} else if (collectionId) {
|
|
315
|
+
inner = /*#__PURE__*/React.createElement(TypeTestersIDQueryRenderer, _extends({
|
|
266
316
|
collectionId: collectionId
|
|
267
317
|
}, rest));
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
return /*#__PURE__*/React.createElement(TypeTestersSlugQueryRenderer, _extends({
|
|
318
|
+
} else if (collectionSlug) {
|
|
319
|
+
inner = /*#__PURE__*/React.createElement(TypeTestersSlugQueryRenderer, _extends({
|
|
271
320
|
collectionSlug: collectionSlug
|
|
272
321
|
}, rest));
|
|
273
322
|
}
|
|
274
|
-
return null;
|
|
323
|
+
if (!inner) return null;
|
|
324
|
+
return /*#__PURE__*/React.createElement(EnsureFontdueContext, null, inner);
|
|
275
325
|
}
|
|
@@ -4,6 +4,11 @@ import loadSerializableQuery from '../../relay/loadSerializableQuery.js';
|
|
|
4
4
|
import { TypeTestersPreloadedIDQueryRenderer, TypeTestersPreloadedSlugQueryRenderer } from './index.js';
|
|
5
5
|
import TypeTestersIDQueryNode from '../../__generated__/TypeTestersIDQuery.graphql.js';
|
|
6
6
|
import TypeTestersSlugQueryNode from '../../__generated__/TypeTestersSlugQuery.graphql.js';
|
|
7
|
+
|
|
8
|
+
// Next RSC variant: awaits the query on the server and hands the response to
|
|
9
|
+
// the client `*PreloadedQueryRenderer`. Lets pages just write
|
|
10
|
+
// `<TypeTesters collectionId={id} />` in an RSC without manually invoking
|
|
11
|
+
// `loadTypeTestersQuery` + threading `preloadedQuery` through props.
|
|
7
12
|
export default async function TypeTesters(_ref) {
|
|
8
13
|
let {
|
|
9
14
|
collectionId,
|
package/dist/config.d.ts
CHANGED
package/dist/config.js
CHANGED
|
@@ -1,14 +1,25 @@
|
|
|
1
1
|
// Module-level global configuration. Consumers call `configure()` once at
|
|
2
|
-
// app startup (
|
|
3
|
-
//
|
|
4
|
-
//
|
|
2
|
+
// app startup (Astro layout, Next layout, Vite entry) and every fontdue-js
|
|
3
|
+
// entry point reads defaults from here.
|
|
4
|
+
//
|
|
5
|
+
// Precedence (low to high):
|
|
6
|
+
// 1. Server admin config (from the tenant dashboard, fetched via Relay)
|
|
7
|
+
// 2. configure({...}) — module-level code defaults
|
|
8
|
+
// 3. <FontdueProvider config={...}> — per-instance prop override
|
|
5
9
|
//
|
|
6
10
|
// Per-request isolation note: `configure` sets module-level state. That's
|
|
7
|
-
// fine for single-tenant apps
|
|
8
|
-
//
|
|
9
|
-
//
|
|
11
|
+
// fine for single-tenant apps. Multi-tenant servers that switch URL per
|
|
12
|
+
// request should pass `url` explicitly to loadSerializableQuery rather than
|
|
13
|
+
// rely on configure().
|
|
14
|
+
|
|
15
|
+
// Network-layer + UI config in one bag. UI fields come from `Config` (the
|
|
16
|
+
// shape passed to ConfigContext); URL + stripeIntegration are network-layer.
|
|
10
17
|
|
|
11
18
|
let current = {};
|
|
19
|
+
|
|
20
|
+
// Shallow-merges with prior values. Calling `configure({tracking: {...}})`
|
|
21
|
+
// replaces the whole `tracking` subtree; pass nested fields fully populated
|
|
22
|
+
// when partial-updating.
|
|
12
23
|
export function configure(opts) {
|
|
13
24
|
current = {
|
|
14
25
|
...current,
|
package/dist/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export type {
|
|
1
|
+
export { default as loadFontdueProviderQuery } from './loadFontdueProviderQuery.js';
|
|
2
|
+
export type { FontdueProviderPreloadedQuery } from './loadFontdueProviderQuery.js';
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { default as loadFontdueProviderQuery } from './loadFontdueProviderQuery.js';
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { LoadSerializableQueryOptions } from './relay/loadSerializableQuery.js';
|
|
2
|
+
import type { FontdueProviderPreloadedQuery } from './components/FontdueProvider/index.js';
|
|
3
|
+
export type { FontdueProviderPreloadedQuery };
|
|
4
|
+
export default function loadFontdueProviderQuery(options?: LoadSerializableQueryOptions): Promise<FontdueProviderPreloadedQuery>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import loadSerializableQuery from './relay/loadSerializableQuery.js';
|
|
2
|
+
import FontdueProviderQueryNode from './__generated__/FontdueProviderQuery.graphql.js';
|
|
3
|
+
// Fetches the data aux UI (theme custom properties, test-mode flag) needs to
|
|
4
|
+
// render synchronously on the server and on hydration. Pass the result to
|
|
5
|
+
// `<FontdueProvider preloadedQuery={…}>` in your layout. Without it, aux UI
|
|
6
|
+
// falls back to lazy-fetching on first client render — which causes a visible
|
|
7
|
+
// theming flash because `ThemeConfig` injects CSS variables.
|
|
8
|
+
export default async function loadFontdueProviderQuery(options) {
|
|
9
|
+
return loadSerializableQuery(FontdueProviderQueryNode, {}, options);
|
|
10
|
+
}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { Environment, Network, RecordSource, Store, QueryResponseCache } from 'relay-runtime';
|
|
2
2
|
import { handlePossibleCorsError } from '../corsError.js';
|
|
3
|
-
import { getConfig } from '../config.js';
|
|
4
3
|
|
|
5
4
|
// `__FONTDUE_JS_VERSION__` is replaced by an inline babel plugin
|
|
6
5
|
// (defineVersionPlugin in .babelrc.cjs) with the literal package.json#version.
|
|
7
|
-
const version = "3.0.0-
|
|
6
|
+
const version = "3.0.0-alpha2";
|
|
8
7
|
const IS_SERVER = typeof window === typeof undefined;
|
|
9
8
|
|
|
10
9
|
// Read env from either process.env (Node/Next.js) or import.meta.env (Vite/Astro).
|
|
@@ -38,9 +37,9 @@ const CACHE_TTL = 10 * 1000; // 10 seconds, to resolve preloaded results
|
|
|
38
37
|
|
|
39
38
|
export function createNetworkFetch(options) {
|
|
40
39
|
return async function networkFetch(request, variables) {
|
|
41
|
-
const base = (options === null || options === void 0 ? void 0 : options.url) ??
|
|
40
|
+
const base = (options === null || options === void 0 ? void 0 : options.url) ?? FONTDUE_URL;
|
|
42
41
|
if (IS_SERVER && (base == null || base === '')) {
|
|
43
|
-
throw new Error('fontdue-js: no Fontdue URL configured for server-side fetch. ' + '
|
|
42
|
+
throw new Error('fontdue-js: no Fontdue URL configured for server-side fetch. ' + 'Set FONTDUE_URL / PUBLIC_FONTDUE_URL / VITE_FONTDUE_URL in your environment, ' + 'or pass `url` explicitly to loadSerializableQuery (or its component-level wrappers).');
|
|
44
43
|
}
|
|
45
44
|
const url = `${base ?? ''}/graphql`;
|
|
46
45
|
for (let attempt = 0; attempt <= 2; attempt++) {
|
|
@@ -51,7 +50,7 @@ export function createNetworkFetch(options) {
|
|
|
51
50
|
headers: {
|
|
52
51
|
Accept: 'application/json',
|
|
53
52
|
'Content-Type': 'application/json',
|
|
54
|
-
'fontdue-stripe-integration': (options === null || options === void 0 ? void 0 : options.stripeIntegration) ??
|
|
53
|
+
'fontdue-stripe-integration': (options === null || options === void 0 ? void 0 : options.stripeIntegration) ?? STRIPE_INTEGRATION ?? 'dynamic',
|
|
55
54
|
'fontdue-client-version': version
|
|
56
55
|
},
|
|
57
56
|
body: JSON.stringify({
|
package/dist/vite.d.ts
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
import type { PluginOption } from 'vite';
|
|
2
|
+
export default function fontdueJs(): PluginOption[];
|