@quilted/quilt 0.9.0 → 0.9.2

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.
@@ -0,0 +1,66 @@
1
+ import type { ComponentChildren } from 'preact';
2
+ import type { Navigation, RouteNavigationEntry } from '@quilted/preact-router';
3
+ import type { Localization } from '@quilted/preact-localize';
4
+ import type { BrowserDetails } from '@quilted/preact-browser';
5
+ import type { BrowserAssets } from '@quilted/assets';
6
+ import type { Performance } from '@quilted/preact-performance';
7
+ import type { AsyncActionCache } from '@quilted/async';
8
+ import type { AsyncComponentProps } from '@quilted/preact-async';
9
+ import type { GraphQLClient } from '@quilted/graphql';
10
+ /**
11
+ * The allowlisted set of `QuiltContext` fields that can be passed as props
12
+ * to the `<QuiltFrameworkContext>` component.
13
+ */
14
+ export interface QuiltFrameworkContextProps {
15
+ /** The navigation instance. */
16
+ navigation?: Navigation;
17
+ /** The current route navigation entry (set automatically by `useRoutes()`). */
18
+ navigationEntry?: RouteNavigationEntry<any, any>;
19
+ /** The localization instance. */
20
+ localization?: Localization;
21
+ /** Browser environment details. */
22
+ browser?: BrowserDetails;
23
+ /** The application's asset manifest. */
24
+ assets?: BrowserAssets;
25
+ /** Performance monitoring context. */
26
+ performance?: Performance;
27
+ /**
28
+ * Async context for this application. Enables async action caching,
29
+ * default async component render options, and hydration tracking.
30
+ */
31
+ async?: {
32
+ /** Shared cache for async actions. Required for SSR. */
33
+ cache?: AsyncActionCache;
34
+ /** Default render options for async components. */
35
+ components?: Pick<AsyncComponentProps<any>, 'render'>;
36
+ /**
37
+ * Whether to serialize the cache for client-side hydration.
38
+ * Defaults to `true` when a cache is provided.
39
+ */
40
+ serialize?: boolean;
41
+ };
42
+ /**
43
+ * The GraphQL client for this application, or a plain object with
44
+ * `fetch` (and optional `cache`) properties.
45
+ */
46
+ graphql?: Pick<GraphQLClient, 'fetch' | 'cache'>;
47
+ children?: ComponentChildren;
48
+ }
49
+ /**
50
+ * Provides a `QuiltContext` value to the component tree. Accepts any declared
51
+ * `QuiltContext` fields as props and memoizes the context object so that
52
+ * consumers only re-render when a field they use actually changes.
53
+ *
54
+ * Also manages async hydration tracking and optional async action cache
55
+ * serialization — no separate `<AsyncContext>` needed.
56
+ *
57
+ * Use this component at the root of your application to provide navigation,
58
+ * localization, browser details, and other app-wide context.
59
+ *
60
+ * @example
61
+ * <QuiltFrameworkContext navigation={context.navigation} localization={context.localization}>
62
+ * <App />
63
+ * </QuiltFrameworkContext>
64
+ */
65
+ export declare function QuiltFrameworkContext({ navigation, navigationEntry, localization, browser, assets, performance, async: asyncProp, graphql, children, }: QuiltFrameworkContextProps): import("preact").JSX.Element;
66
+ //# sourceMappingURL=QuiltFrameworkContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QuiltFrameworkContext.d.ts","sourceRoot":"","sources":["../../../source/context/QuiltFrameworkContext.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,QAAQ,CAAC;AAS9C,OAAO,KAAK,EAAC,UAAU,EAAE,oBAAoB,EAAC,MAAM,wBAAwB,CAAC;AAC7E,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,6BAA6B,CAAC;AAC7D,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAC,mBAAmB,EAAe,MAAM,uBAAuB,CAAC;AAE7E,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,kBAAkB,CAAC;AAEpD;;;GAGG;AACH,MAAM,WAAW,0BAA0B;IACzC,+BAA+B;IAC/B,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,+EAA+E;IAC/E,eAAe,CAAC,EAAE,oBAAoB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACjD,iCAAiC;IACjC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,mCAAmC;IACnC,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,wCAAwC;IACxC,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,sCAAsC;IACtC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B;;;OAGG;IACH,KAAK,CAAC,EAAE;QACN,wDAAwD;QACxD,KAAK,CAAC,EAAE,gBAAgB,CAAC;QACzB,mDAAmD;QACnD,UAAU,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;QACtD;;;WAGG;QACH,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC;IACF;;;OAGG;IACH,OAAO,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC;IACjD,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CAC9B;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,UAAU,EACV,eAAe,EACf,YAAY,EACZ,OAAO,EACP,MAAM,EACN,WAAW,EACX,KAAK,EAAE,SAAS,EAChB,OAAO,EACP,QAAQ,GACT,EAAE,0BAA0B,gCAqD5B"}
@@ -0,0 +1,41 @@
1
+ import type { ComponentChildren } from 'preact';
2
+ import { TestNavigation } from '@quilted/preact-router/testing';
3
+ import { TestBrowser } from '@quilted/preact-browser/testing';
4
+ import { Localization } from '@quilted/preact-localize';
5
+ export interface QuiltFrameworkTestContextProps {
6
+ /**
7
+ * A custom navigation instance for the test. Defaults to a new `TestNavigation`
8
+ * pointed at `https://example.com/`.
9
+ *
10
+ * @see TestNavigation
11
+ */
12
+ navigation?: TestNavigation;
13
+ /**
14
+ * The localization instance for the test. Defaults to `new Localization('en')`.
15
+ *
16
+ * @see Localization
17
+ */
18
+ localization?: Localization;
19
+ /**
20
+ * A custom browser mock for the test. Defaults to a new `TestBrowser`.
21
+ *
22
+ * @see TestBrowser
23
+ */
24
+ browser?: TestBrowser;
25
+ children?: ComponentChildren;
26
+ }
27
+ /**
28
+ * Provides a `QuiltContext` configured with test-friendly instances of
29
+ * navigation, localization, and browser details. Use this in unit tests
30
+ * to wrap components that need Quilt context.
31
+ *
32
+ * @example
33
+ * const navigation = new TestNavigation('/my-page');
34
+ * render(
35
+ * <QuiltFrameworkTestContext navigation={navigation} localization={new Localization('fr')}>
36
+ * <MyComponent />
37
+ * </QuiltFrameworkTestContext>
38
+ * );
39
+ */
40
+ export declare function QuiltFrameworkTestContext({ navigation, localization, browser, children, }: QuiltFrameworkTestContextProps): import("preact").JSX.Element;
41
+ //# sourceMappingURL=testing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../../source/context/testing.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,QAAQ,CAAC;AAG9C,OAAO,EAAC,cAAc,EAAC,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAC,WAAW,EAAC,MAAM,iCAAiC,CAAC;AAC5D,OAAO,EAAC,YAAY,EAAC,MAAM,0BAA0B,CAAC;AAEtD,MAAM,WAAW,8BAA8B;IAC7C;;;;;OAKG;IACH,UAAU,CAAC,EAAE,cAAc,CAAC;IAE5B;;;;OAIG;IACH,YAAY,CAAC,EAAE,YAAY,CAAC;IAE5B;;;;OAIG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;IAEtB,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CAC9B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,yBAAyB,CAAC,EACxC,UAAU,EACV,YAAqC,EACrC,OAAO,EACP,QAAQ,GACT,EAAE,8BAA8B,gCAwBhC"}
@@ -1,2 +1,3 @@
1
- export * from '@quilted/preact-context';
1
+ export { QuiltFrameworkContextPreact, useQuiltContext, createOptionalContext, type QuiltContext, type OptionalContext, type OptionalContextOptions, type UseQuiltContextHookType, } from '@quilted/preact-context';
2
+ export { QuiltFrameworkContext, type QuiltFrameworkContextProps, } from './context/QuiltFrameworkContext.tsx';
2
3
  //# sourceMappingURL=context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../source/context.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../source/context.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,2BAA2B,EAC3B,eAAe,EACf,qBAAqB,EACrB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,GAC7B,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,qBAAqB,EACrB,KAAK,0BAA0B,GAChC,MAAM,qCAAqC,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@quilted/quilt",
3
3
  "type": "module",
4
- "version": "0.9.0",
4
+ "version": "0.9.2",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/lemonmade/quilt.git",
@@ -49,6 +49,12 @@
49
49
  "quilt:esnext": "./build/esnext/context.esnext",
50
50
  "import": "./build/esm/context.mjs"
51
51
  },
52
+ "./context/testing": {
53
+ "types": "./build/typescript/context/testing.d.ts",
54
+ "quilt:source": "./source/context/testing.tsx",
55
+ "quilt:esnext": "./build/esnext/context/testing.esnext",
56
+ "import": "./build/esm/context/testing.mjs"
57
+ },
52
58
  "./events": {
53
59
  "types": "./build/typescript/events.d.ts",
54
60
  "quilt:source": "./source/events.ts",
@@ -170,6 +176,9 @@
170
176
  "context": [
171
177
  "./build/typescript/context.d.ts"
172
178
  ],
179
+ "context/testing": [
180
+ "./build/typescript/context/testing.d.ts"
181
+ ],
173
182
  "env": [
174
183
  "./build/typescript/env.d.ts"
175
184
  ],
@@ -229,31 +238,31 @@
229
238
  "./build/esm/signals.mjs"
230
239
  ],
231
240
  "dependencies": {
232
- "@quilted/assets": "^0.1.9",
241
+ "@quilted/assets": "^0.1.11",
233
242
  "@quilted/async": "^0.4.23",
234
- "@quilted/events": "^2.1.3",
235
- "@quilted/graphql": "^3.3.9",
243
+ "@quilted/events": "^2.1.4",
244
+ "@quilted/graphql": "^3.4.0",
236
245
  "@quilted/hono": "^0.2.0",
237
- "@quilted/preact-async": "^0.1.21",
238
- "@quilted/preact-browser": "^0.2.0",
239
- "@quilted/preact-context": "^0.1.3",
240
- "@quilted/preact-graphql": "^0.1.8",
241
- "@quilted/preact-localize": "^0.4.0",
242
- "@quilted/preact-performance": "^0.1.1",
243
- "@quilted/preact-router": "^0.2.13",
244
- "@quilted/preact-signals": "^0.1.2",
245
- "@quilted/preact-testing": "^0.1.8",
246
- "@quilted/preact-workers": "^0.2.1",
246
+ "@quilted/preact-async": "^0.1.23",
247
+ "@quilted/preact-browser": "^0.2.7",
248
+ "@quilted/preact-context": "^0.1.5",
249
+ "@quilted/preact-graphql": "^0.1.10",
250
+ "@quilted/preact-localize": "^0.4.2",
251
+ "@quilted/preact-performance": "^0.1.3",
252
+ "@quilted/preact-router": "^0.2.16",
253
+ "@quilted/preact-signals": "^0.1.3",
254
+ "@quilted/preact-testing": "^0.1.9",
255
+ "@quilted/preact-workers": "^0.2.2",
247
256
  "@quilted/react": "^19.0.0",
248
- "@quilted/react-dom": "^19.0.1",
249
- "@quilted/signals": "^0.2.3",
250
- "@quilted/threads": "^4.0.0",
257
+ "@quilted/react-dom": "^19.0.2",
258
+ "@quilted/signals": "^0.2.4",
259
+ "@quilted/threads": "^4.0.2",
251
260
  "jest-matcher-utils": "^29.0.0",
252
- "preact-render-to-string": "^6.5.13"
261
+ "preact-render-to-string": "^6.6.6"
253
262
  },
254
263
  "peerDependencies": {
255
264
  "graphql": "^16.8.0",
256
- "preact": "^10.26.0",
265
+ "preact": "^10.29.0",
257
266
  "prettier": "^2.0.0 || ^3.0.0",
258
267
  "vitest": "^2.0.0 || ^3.0.0"
259
268
  },
@@ -273,7 +282,7 @@
273
282
  },
274
283
  "devDependencies": {
275
284
  "expect": "^29.0.0",
276
- "preact": "^10.26.0",
285
+ "preact": "^10.29.0",
277
286
  "prettier": "^3.5.1",
278
287
  "vitest": "^3.0.0"
279
288
  },
@@ -0,0 +1,176 @@
1
+ import {useLayoutEffect, useMemo, useContext} from 'preact/hooks';
2
+ import type {ComponentChildren} from 'preact';
3
+
4
+ import {
5
+ QuiltFrameworkContextPreact,
6
+ type QuiltContext,
7
+ } from '@quilted/preact-context';
8
+ import {HTMLAttributes} from '@quilted/preact-browser';
9
+ import {signal} from '@quilted/preact-signals';
10
+
11
+ import type {Navigation, RouteNavigationEntry} from '@quilted/preact-router';
12
+ import type {Localization} from '@quilted/preact-localize';
13
+ import type {BrowserDetails} from '@quilted/preact-browser';
14
+ import type {BrowserAssets} from '@quilted/assets';
15
+ import type {Performance} from '@quilted/preact-performance';
16
+ import type {AsyncActionCache} from '@quilted/async';
17
+ import type {AsyncComponentProps, AsyncContext} from '@quilted/preact-async';
18
+ import {useAsyncActionCacheSerialization} from '@quilted/preact-async';
19
+ import type {GraphQLClient} from '@quilted/graphql';
20
+
21
+ /**
22
+ * The allowlisted set of `QuiltContext` fields that can be passed as props
23
+ * to the `<QuiltFrameworkContext>` component.
24
+ */
25
+ export interface QuiltFrameworkContextProps {
26
+ /** The navigation instance. */
27
+ navigation?: Navigation;
28
+ /** The current route navigation entry (set automatically by `useRoutes()`). */
29
+ navigationEntry?: RouteNavigationEntry<any, any>;
30
+ /** The localization instance. */
31
+ localization?: Localization;
32
+ /** Browser environment details. */
33
+ browser?: BrowserDetails;
34
+ /** The application's asset manifest. */
35
+ assets?: BrowserAssets;
36
+ /** Performance monitoring context. */
37
+ performance?: Performance;
38
+ /**
39
+ * Async context for this application. Enables async action caching,
40
+ * default async component render options, and hydration tracking.
41
+ */
42
+ async?: {
43
+ /** Shared cache for async actions. Required for SSR. */
44
+ cache?: AsyncActionCache;
45
+ /** Default render options for async components. */
46
+ components?: Pick<AsyncComponentProps<any>, 'render'>;
47
+ /**
48
+ * Whether to serialize the cache for client-side hydration.
49
+ * Defaults to `true` when a cache is provided.
50
+ */
51
+ serialize?: boolean;
52
+ };
53
+ /**
54
+ * The GraphQL client for this application, or a plain object with
55
+ * `fetch` (and optional `cache`) properties.
56
+ */
57
+ graphql?: Pick<GraphQLClient, 'fetch' | 'cache'>;
58
+ children?: ComponentChildren;
59
+ }
60
+
61
+ /**
62
+ * Provides a `QuiltContext` value to the component tree. Accepts any declared
63
+ * `QuiltContext` fields as props and memoizes the context object so that
64
+ * consumers only re-render when a field they use actually changes.
65
+ *
66
+ * Also manages async hydration tracking and optional async action cache
67
+ * serialization — no separate `<AsyncContext>` needed.
68
+ *
69
+ * Use this component at the root of your application to provide navigation,
70
+ * localization, browser details, and other app-wide context.
71
+ *
72
+ * @example
73
+ * <QuiltFrameworkContext navigation={context.navigation} localization={context.localization}>
74
+ * <App />
75
+ * </QuiltFrameworkContext>
76
+ */
77
+ export function QuiltFrameworkContext({
78
+ navigation,
79
+ navigationEntry,
80
+ localization,
81
+ browser,
82
+ assets,
83
+ performance,
84
+ async: asyncProp,
85
+ graphql,
86
+ children,
87
+ }: QuiltFrameworkContextProps) {
88
+ const parentContext = useContext(QuiltFrameworkContextPreact);
89
+
90
+ const asyncValue = useAsyncContext(asyncProp);
91
+
92
+ const memoizedValue = useMemo(
93
+ () =>
94
+ ({
95
+ ...parentContext,
96
+ ...(navigation == null ? undefined : {navigation}),
97
+ ...(navigationEntry == null ? undefined : {navigationEntry}),
98
+ ...(localization == null ? undefined : {localization}),
99
+ ...(browser == null ? undefined : {browser}),
100
+ ...(assets == null ? undefined : {assets}),
101
+ ...(performance == null ? undefined : {performance}),
102
+ async: asyncValue,
103
+ ...(graphql == null ? undefined : {graphql}),
104
+ }) satisfies QuiltContext,
105
+ [
106
+ parentContext,
107
+ navigation,
108
+ navigationEntry,
109
+ localization,
110
+ browser,
111
+ assets,
112
+ performance,
113
+ asyncValue,
114
+ graphql,
115
+ ],
116
+ );
117
+
118
+ if (typeof document !== 'object') {
119
+ if (navigation?.cache) {
120
+ // Serialize the navigation cache for server-side rendering.
121
+ useAsyncActionCacheSerialization(navigation.cache, {
122
+ name: 'quilt:router',
123
+ });
124
+ }
125
+ }
126
+
127
+ return (
128
+ <>
129
+ {localization && (
130
+ <HTMLAttributes
131
+ lang={localization.locale}
132
+ dir={localization.direction}
133
+ />
134
+ )}
135
+ <QuiltFrameworkContextPreact.Provider value={memoizedValue}>
136
+ {children}
137
+ </QuiltFrameworkContextPreact.Provider>
138
+ </>
139
+ );
140
+ }
141
+
142
+ function useAsyncContext({
143
+ cache: asyncCache,
144
+ components: asyncComponents,
145
+ serialize: asyncSerialize = true,
146
+ }: NonNullable<QuiltFrameworkContextProps['async']> = {}): AsyncContext {
147
+ // Hydration signal: starts false on the server, flips to true after
148
+ // the first client-side render. Stable across re-renders via useRef.
149
+ const hydratedSignal = useMemo(() => signal(false), []);
150
+
151
+ if (typeof document === 'object') {
152
+ useLayoutEffect(() => {
153
+ hydratedSignal.value = true;
154
+ }, []);
155
+ }
156
+
157
+ if (typeof document !== 'object') {
158
+ // Serialize the async action cache for server-side rendering.
159
+ useAsyncActionCacheSerialization(asyncSerialize ? asyncCache : undefined, {
160
+ name: 'quilt:async',
161
+ optional: true,
162
+ });
163
+ }
164
+
165
+ return useMemo(
166
+ () =>
167
+ ({
168
+ cache: asyncCache,
169
+ components: asyncComponents,
170
+ get isHydrated() {
171
+ return hydratedSignal.value;
172
+ },
173
+ }) satisfies AsyncContext,
174
+ [asyncCache, asyncComponents, hydratedSignal],
175
+ );
176
+ }
@@ -0,0 +1,77 @@
1
+ import {useMemo} from 'preact/hooks';
2
+ import type {ComponentChildren} from 'preact';
3
+
4
+ import {QuiltFrameworkContextPreact} from '@quilted/preact-context';
5
+ import {TestNavigation} from '@quilted/preact-router/testing';
6
+ import {TestBrowser} from '@quilted/preact-browser/testing';
7
+ import {Localization} from '@quilted/preact-localize';
8
+
9
+ export interface QuiltFrameworkTestContextProps {
10
+ /**
11
+ * A custom navigation instance for the test. Defaults to a new `TestNavigation`
12
+ * pointed at `https://example.com/`.
13
+ *
14
+ * @see TestNavigation
15
+ */
16
+ navigation?: TestNavigation;
17
+
18
+ /**
19
+ * The localization instance for the test. Defaults to `new Localization('en')`.
20
+ *
21
+ * @see Localization
22
+ */
23
+ localization?: Localization;
24
+
25
+ /**
26
+ * A custom browser mock for the test. Defaults to a new `TestBrowser`.
27
+ *
28
+ * @see TestBrowser
29
+ */
30
+ browser?: TestBrowser;
31
+
32
+ children?: ComponentChildren;
33
+ }
34
+
35
+ /**
36
+ * Provides a `QuiltContext` configured with test-friendly instances of
37
+ * navigation, localization, and browser details. Use this in unit tests
38
+ * to wrap components that need Quilt context.
39
+ *
40
+ * @example
41
+ * const navigation = new TestNavigation('/my-page');
42
+ * render(
43
+ * <QuiltFrameworkTestContext navigation={navigation} localization={new Localization('fr')}>
44
+ * <MyComponent />
45
+ * </QuiltFrameworkTestContext>
46
+ * );
47
+ */
48
+ export function QuiltFrameworkTestContext({
49
+ navigation,
50
+ localization = new Localization('en'),
51
+ browser,
52
+ children,
53
+ }: QuiltFrameworkTestContextProps) {
54
+ const resolvedNavigation = useMemo(
55
+ () => navigation ?? new TestNavigation(),
56
+ [navigation],
57
+ );
58
+ const resolvedBrowser = useMemo(
59
+ () => browser ?? new TestBrowser(),
60
+ [browser],
61
+ );
62
+
63
+ const value = useMemo(
64
+ () => ({
65
+ navigation: resolvedNavigation,
66
+ localization,
67
+ browser: resolvedBrowser,
68
+ }),
69
+ [resolvedNavigation, localization, resolvedBrowser],
70
+ );
71
+
72
+ return (
73
+ <QuiltFrameworkContextPreact.Provider value={value}>
74
+ {children}
75
+ </QuiltFrameworkContextPreact.Provider>
76
+ );
77
+ }
package/source/context.ts CHANGED
@@ -1 +1,14 @@
1
- export * from '@quilted/preact-context';
1
+ export {
2
+ QuiltFrameworkContextPreact,
3
+ useQuiltContext,
4
+ createOptionalContext,
5
+ type QuiltContext,
6
+ type OptionalContext,
7
+ type OptionalContextOptions,
8
+ type UseQuiltContextHookType,
9
+ } from '@quilted/preact-context';
10
+
11
+ export {
12
+ QuiltFrameworkContext,
13
+ type QuiltFrameworkContextProps,
14
+ } from './context/QuiltFrameworkContext.tsx';