@farm.js/core 0.1.0-beta.21 → 0.1.0-beta.23

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 (266) hide show
  1. package/dist/after.d.mts +25 -0
  2. package/dist/after.d.ts +25 -0
  3. package/dist/agent-runtime.d.mts +97 -0
  4. package/dist/agent-runtime.d.ts +97 -0
  5. package/dist/api/route-manager.d.mts +68 -0
  6. package/dist/api/route-manager.d.ts +68 -0
  7. package/dist/api/runtime.d.mts +3 -0
  8. package/dist/api/runtime.d.ts +3 -0
  9. package/dist/api.cjs +22 -19
  10. package/dist/api.cjs.map +1 -1
  11. package/dist/api.d.mts +50 -0
  12. package/dist/api.d.ts +50 -0
  13. package/dist/api.mjs +2 -1
  14. package/dist/app-CTFnOJaI.d.ts +308 -0
  15. package/dist/app-DA6ospIq.d.mts +308 -0
  16. package/dist/app-markdown.d.mts +25 -0
  17. package/dist/app-markdown.d.ts +25 -0
  18. package/dist/cache.d.mts +192 -0
  19. package/dist/cache.d.ts +192 -0
  20. package/dist/{chunk-MIUW47JX.mjs → chunk-2PEJGY5V.mjs} +15 -20
  21. package/dist/chunk-2PEJGY5V.mjs.map +1 -0
  22. package/dist/{chunk-RIXKJPGI.mjs → chunk-42325TLU.mjs} +2 -2
  23. package/dist/chunk-4IVNW5QD.mjs +82 -0
  24. package/dist/chunk-4IVNW5QD.mjs.map +1 -0
  25. package/dist/{chunk-I3UWA2P2.mjs → chunk-5NOVWCFL.mjs} +2 -2
  26. package/dist/chunk-5NOVWCFL.mjs.map +1 -0
  27. package/dist/chunk-D42BNPZH.mjs +79 -0
  28. package/dist/chunk-D42BNPZH.mjs.map +1 -0
  29. package/dist/{chunk-LLPN5SEZ.mjs → chunk-DVPRBMU2.mjs} +2 -2
  30. package/dist/{chunk-VIC7NJ77.mjs → chunk-FJGTYLCO.mjs} +67 -20
  31. package/dist/chunk-FJGTYLCO.mjs.map +1 -0
  32. package/dist/chunk-GIELMNBG.mjs +15 -0
  33. package/dist/chunk-GIELMNBG.mjs.map +1 -0
  34. package/dist/chunk-GQVQESLY.mjs +25 -0
  35. package/dist/chunk-GQVQESLY.mjs.map +1 -0
  36. package/dist/chunk-H53KVQUU.mjs +48 -0
  37. package/dist/chunk-H53KVQUU.mjs.map +1 -0
  38. package/dist/chunk-HCGQYYHI.mjs +1 -0
  39. package/dist/chunk-HCGQYYHI.mjs.map +1 -0
  40. package/dist/{chunk-4EATUJFO.mjs → chunk-ICTGDDV4.mjs} +20 -22
  41. package/dist/chunk-ICTGDDV4.mjs.map +1 -0
  42. package/dist/{chunk-UCYWGN2P.mjs → chunk-OHNSROHS.mjs} +1 -1
  43. package/dist/{chunk-FRPWCMMG.mjs → chunk-SBWOTAX4.mjs} +63 -2
  44. package/dist/chunk-SBWOTAX4.mjs.map +1 -0
  45. package/dist/{chunk-FKKM7HVF.mjs → chunk-TX54PXAJ.mjs} +109 -58
  46. package/dist/chunk-TX54PXAJ.mjs.map +1 -0
  47. package/dist/{chunk-CEVMYGDL.mjs → chunk-YD5IRKVS.mjs} +13 -9
  48. package/dist/chunk-YD5IRKVS.mjs.map +1 -0
  49. package/dist/chunk-recovery-lnQFzcQP.d.mts +26 -0
  50. package/dist/chunk-recovery-lnQFzcQP.d.ts +26 -0
  51. package/dist/client-BT1mFQas.d.mts +447 -0
  52. package/dist/client-Nn0q4eO4.d.ts +447 -0
  53. package/dist/client-cache-CIlyBlmx.d.ts +6 -0
  54. package/dist/client-cache-D-EZ7XVW.d.mts +6 -0
  55. package/dist/client-plugins-CCilIb_G.d.mts +2092 -0
  56. package/dist/client-plugins-DuuleQKk.d.ts +2092 -0
  57. package/dist/client-plugins.d.mts +25 -0
  58. package/dist/client-plugins.d.ts +25 -0
  59. package/dist/client.cjs +122 -35
  60. package/dist/client.cjs.map +1 -1
  61. package/dist/client.d.mts +454 -0
  62. package/dist/client.d.ts +454 -0
  63. package/dist/client.mjs +13 -2
  64. package/dist/config.d.mts +32 -0
  65. package/dist/config.d.ts +32 -0
  66. package/dist/cron.d.mts +78 -0
  67. package/dist/cron.d.ts +78 -0
  68. package/dist/deferred.d.mts +42 -0
  69. package/dist/deferred.d.ts +42 -0
  70. package/dist/deployment.d.mts +36 -0
  71. package/dist/deployment.d.ts +36 -0
  72. package/dist/{devtools-52FYXIEK.mjs → devtools-326RBQCN.mjs} +7 -6
  73. package/dist/{devtools-52FYXIEK.mjs.map → devtools-326RBQCN.mjs.map} +1 -1
  74. package/dist/docs.cjs.map +1 -1
  75. package/dist/docs.d.mts +80 -0
  76. package/dist/docs.d.ts +80 -0
  77. package/dist/docs.mjs +6 -5
  78. package/dist/env-types.d.mts +12 -0
  79. package/dist/env-types.d.ts +12 -0
  80. package/dist/env.d.mts +45 -0
  81. package/dist/env.d.ts +45 -0
  82. package/dist/environment/vite.d.mts +22 -0
  83. package/dist/environment/vite.d.ts +22 -0
  84. package/dist/environment.d.mts +18 -0
  85. package/dist/environment.d.ts +18 -0
  86. package/dist/font.d.mts +95 -0
  87. package/dist/font.d.ts +95 -0
  88. package/dist/headers.d.mts +22 -0
  89. package/dist/headers.d.ts +22 -0
  90. package/dist/i18n/client.d.mts +32 -0
  91. package/dist/i18n/client.d.ts +32 -0
  92. package/dist/i18n/index.d.mts +20 -0
  93. package/dist/i18n/index.d.ts +20 -0
  94. package/dist/i18n/server.d.mts +30 -0
  95. package/dist/i18n/server.d.ts +30 -0
  96. package/dist/image/server.d.mts +37 -0
  97. package/dist/image/server.d.ts +37 -0
  98. package/dist/image/sharp.d.mts +7 -0
  99. package/dist/image/sharp.d.ts +7 -0
  100. package/dist/image-config-Duob7wER.d.mts +50 -0
  101. package/dist/image-config-Duob7wER.d.ts +50 -0
  102. package/dist/image.d.mts +39 -0
  103. package/dist/image.d.ts +39 -0
  104. package/dist/index.cjs +496 -123
  105. package/dist/index.cjs.map +1 -1
  106. package/dist/index.d.mts +480 -0
  107. package/dist/index.d.ts +480 -0
  108. package/dist/index.mjs +70 -52
  109. package/dist/index.mjs.map +1 -1
  110. package/dist/integration-api-CHT2OKAf.d.mts +93 -0
  111. package/dist/integration-api-CHT2OKAf.d.ts +93 -0
  112. package/dist/integrations.d.mts +25 -0
  113. package/dist/integrations.d.ts +25 -0
  114. package/dist/internal/build-runtime.cjs +386 -83
  115. package/dist/internal/build-runtime.cjs.map +1 -1
  116. package/dist/internal/build-runtime.d.mts +42 -0
  117. package/dist/internal/build-runtime.d.ts +42 -0
  118. package/dist/internal/build-runtime.mjs +17 -13
  119. package/dist/internal/client-runtime.d.mts +17 -0
  120. package/dist/internal/client-runtime.d.ts +17 -0
  121. package/dist/internal/config-runtime.cjs +41 -0
  122. package/dist/internal/config-runtime.cjs.map +1 -1
  123. package/dist/internal/config-runtime.d.mts +42 -0
  124. package/dist/internal/config-runtime.d.ts +42 -0
  125. package/dist/internal/config-runtime.mjs +5 -4
  126. package/dist/internal/metadata-image-runtime.d.mts +25 -0
  127. package/dist/internal/metadata-image-runtime.d.ts +25 -0
  128. package/dist/internal/production-node-env.d.mts +12 -0
  129. package/dist/internal/production-node-env.d.ts +12 -0
  130. package/dist/internal/production-runtime.cjs +178 -0
  131. package/dist/internal/production-runtime.cjs.map +1 -1
  132. package/dist/internal/production-runtime.d.mts +80 -0
  133. package/dist/internal/production-runtime.d.ts +80 -0
  134. package/dist/internal/production-runtime.mjs +13 -1
  135. package/dist/internal/production-runtime.mjs.map +1 -1
  136. package/dist/island-CfGru1MO.d.mts +9 -0
  137. package/dist/island-CfGru1MO.d.ts +9 -0
  138. package/dist/markdown.d.mts +60 -0
  139. package/dist/markdown.d.ts +60 -0
  140. package/dist/metadata-DyPRG0wX.d.ts +22 -0
  141. package/dist/metadata-_GHcAySx.d.mts +22 -0
  142. package/dist/middleware.cjs +17 -17
  143. package/dist/middleware.cjs.map +1 -1
  144. package/dist/middleware.d.mts +172 -0
  145. package/dist/middleware.d.ts +172 -0
  146. package/dist/middleware.mjs +3 -2
  147. package/dist/navigation-errors-Dvwpzaer.d.mts +13 -0
  148. package/dist/navigation-errors-Dvwpzaer.d.ts +13 -0
  149. package/dist/navigation.d.mts +14 -0
  150. package/dist/navigation.d.ts +14 -0
  151. package/dist/observability.d.mts +335 -0
  152. package/dist/observability.d.ts +335 -0
  153. package/dist/params-BALtrRim.d.ts +15 -0
  154. package/dist/params-ry-lxqmy.d.mts +15 -0
  155. package/dist/plugin-BJDf43dc.d.mts +165 -0
  156. package/dist/plugin-BJDf43dc.d.ts +165 -0
  157. package/dist/plugin.cjs +261 -62
  158. package/dist/plugin.cjs.map +1 -1
  159. package/dist/plugin.d.mts +25 -0
  160. package/dist/plugin.d.ts +25 -0
  161. package/dist/plugin.mjs +13 -9
  162. package/dist/production-runtime-C4cO3esK.d.mts +81 -0
  163. package/dist/production-runtime-DrEy8kBO.d.ts +81 -0
  164. package/dist/query/client.d.mts +61 -0
  165. package/dist/query/client.d.ts +61 -0
  166. package/dist/query/index.d.mts +90 -0
  167. package/dist/query/index.d.ts +90 -0
  168. package/dist/query/parsers.d.mts +25 -0
  169. package/dist/query/parsers.d.ts +25 -0
  170. package/dist/query/server.d.mts +55 -0
  171. package/dist/query/server.d.ts +55 -0
  172. package/dist/request-B2PpOxYK.d.mts +6 -0
  173. package/dist/request-D40lt6aN.d.ts +6 -0
  174. package/dist/request.d.mts +26 -0
  175. package/dist/request.d.ts +26 -0
  176. package/dist/resolver-DJqjLMg_.d.mts +14 -0
  177. package/dist/resolver-IH4RmPEl.d.ts +14 -0
  178. package/dist/route-runtime-DoOHzCAD.d.mts +38 -0
  179. package/dist/route-runtime-DoOHzCAD.d.ts +38 -0
  180. package/dist/router.d.mts +36 -0
  181. package/dist/router.d.ts +36 -0
  182. package/dist/routes.d.mts +227 -0
  183. package/dist/routes.d.ts +227 -0
  184. package/dist/runtime-Bpp-c28k.d.ts +231 -0
  185. package/dist/runtime-Cxpq6xZN.d.mts +27 -0
  186. package/dist/runtime-Q3u74Nbq.d.mts +231 -0
  187. package/dist/runtime-bv63eUiO.d.ts +27 -0
  188. package/dist/server-action-security.d.mts +45 -0
  189. package/dist/server-action-security.d.ts +45 -0
  190. package/dist/server-fn-client.d.mts +33 -0
  191. package/dist/server-fn-client.d.ts +33 -0
  192. package/dist/server-fn-error-DDh14a0V.d.mts +26 -0
  193. package/dist/server-fn-error-DDh14a0V.d.ts +26 -0
  194. package/dist/server-fn.d.mts +121 -0
  195. package/dist/server-fn.d.ts +121 -0
  196. package/dist/server-plugins.d.mts +58 -0
  197. package/dist/server-plugins.d.ts +58 -0
  198. package/dist/server-query-client.d.mts +51 -0
  199. package/dist/server-query-client.d.ts +51 -0
  200. package/dist/server-query.d.mts +37 -0
  201. package/dist/server-query.d.ts +37 -0
  202. package/dist/server.cjs +285 -85
  203. package/dist/server.cjs.map +1 -1
  204. package/dist/server.d.mts +53 -0
  205. package/dist/server.d.ts +53 -0
  206. package/dist/server.mjs +26 -31
  207. package/dist/server.mjs.map +1 -1
  208. package/dist/storage.d.mts +52 -0
  209. package/dist/storage.d.ts +52 -0
  210. package/dist/testing.d.mts +104 -0
  211. package/dist/testing.d.ts +104 -0
  212. package/dist/theme/client.cjs +115 -0
  213. package/dist/theme/client.cjs.map +1 -0
  214. package/dist/theme/client.d.mts +17 -0
  215. package/dist/theme/client.d.ts +17 -0
  216. package/dist/theme/client.mjs +16 -0
  217. package/dist/theme/client.mjs.map +1 -0
  218. package/dist/theme/index.cjs +71 -0
  219. package/dist/theme/index.cjs.map +1 -0
  220. package/dist/theme/index.d.mts +6 -0
  221. package/dist/theme/index.d.ts +6 -0
  222. package/dist/theme/index.mjs +9 -0
  223. package/dist/theme/index.mjs.map +1 -0
  224. package/dist/theme/server.cjs +191 -0
  225. package/dist/theme/server.cjs.map +1 -0
  226. package/dist/theme/server.d.mts +8 -0
  227. package/dist/theme/server.d.ts +8 -0
  228. package/dist/theme/server.mjs +18 -0
  229. package/dist/theme/server.mjs.map +1 -0
  230. package/dist/transport-BmbGTXA5.d.mts +49 -0
  231. package/dist/transport-BmbGTXA5.d.ts +49 -0
  232. package/dist/types-BMxWr97v.d.mts +81 -0
  233. package/dist/types-BMxWr97v.d.ts +81 -0
  234. package/dist/types-CsR8fpgF.d.mts +30 -0
  235. package/dist/types-CsR8fpgF.d.ts +30 -0
  236. package/dist/types-D1A6-XvH.d.mts +73 -0
  237. package/dist/types-D1A6-XvH.d.ts +73 -0
  238. package/dist/types-DTzm4TCl.d.mts +78 -0
  239. package/dist/types-DTzm4TCl.d.ts +78 -0
  240. package/dist/utils-3sQgfkya.d.ts +23 -0
  241. package/dist/utils-Bop7bly-.d.mts +23 -0
  242. package/dist/version.cjs +1 -1
  243. package/dist/version.cjs.map +1 -1
  244. package/dist/version.d.mts +3 -0
  245. package/dist/version.d.ts +3 -0
  246. package/dist/version.mjs +1 -1
  247. package/dist/vite.cjs +285 -64
  248. package/dist/vite.cjs.map +1 -1
  249. package/dist/vite.d.mts +25 -0
  250. package/dist/vite.d.ts +25 -0
  251. package/dist/vite.mjs +13 -9
  252. package/dist/workflows-CusFV6mn.d.mts +153 -0
  253. package/dist/workflows-CusFV6mn.d.ts +153 -0
  254. package/dist/workflows.d.mts +1 -0
  255. package/dist/workflows.d.ts +1 -0
  256. package/package.json +25 -1
  257. package/dist/chunk-4EATUJFO.mjs.map +0 -1
  258. package/dist/chunk-CEVMYGDL.mjs.map +0 -1
  259. package/dist/chunk-FKKM7HVF.mjs.map +0 -1
  260. package/dist/chunk-FRPWCMMG.mjs.map +0 -1
  261. package/dist/chunk-I3UWA2P2.mjs.map +0 -1
  262. package/dist/chunk-MIUW47JX.mjs.map +0 -1
  263. package/dist/chunk-VIC7NJ77.mjs.map +0 -1
  264. /package/dist/{chunk-RIXKJPGI.mjs.map → chunk-42325TLU.mjs.map} +0 -0
  265. /package/dist/{chunk-LLPN5SEZ.mjs.map → chunk-DVPRBMU2.mjs.map} +0 -0
  266. /package/dist/{chunk-UCYWGN2P.mjs.map → chunk-OHNSROHS.mjs.map} +0 -0
@@ -0,0 +1,25 @@
1
+ export { a as FarmClientHydrationCompleteEvent, b as FarmClientHydrationEvent, d as FarmClientHydrationMode, e as FarmClientHydrationSession, f as FarmClientLocation, g as FarmClientNavigationAction, h as FarmClientNavigationErrorEvent, i as FarmClientNavigationEvent, j as FarmClientNavigationLoadedEvent, k as FarmClientNavigationResolvedEvent, l as FarmClientNavigationSession, m as FarmClientPerformanceEvent, n as FarmClientPlugin, o as FarmClientPluginCloseEvent, p as FarmClientPluginEnforce, q as FarmClientPluginErrorEvent, r as FarmClientPluginErrorPhase, F as FarmClientPluginManager, s as FarmClientPluginManagerOptions, t as FarmClientPluginMetadata, u as FarmClientPluginRegistration, v as FarmClientPluginRouter, w as FarmClientPluginSetupEvent, x as FarmClientPluginStateEvent, c as createClientPluginManager } from './plugin-BJDf43dc.mjs';
2
+ export { $ as FarmPlugin, aG as FarmPluginContext, aJ as FarmRequestPluginContext, aK as FarmRequestStore } from './client-plugins-CCilIb_G.mjs';
3
+ import 'react';
4
+ import 'http';
5
+ import './types-D1A6-XvH.mjs';
6
+ import 'db0';
7
+ import 'unstorage';
8
+ import './integration-api-CHT2OKAf.mjs';
9
+ import '@farming-labs/orm';
10
+ import './types-DTzm4TCl.mjs';
11
+ import '@farming-labs/docs';
12
+ import './markdown.mjs';
13
+ import './observability.mjs';
14
+ import 'vite';
15
+ import './workflows-CusFV6mn.mjs';
16
+ import './cron.mjs';
17
+ import './env.mjs';
18
+ import './server-action-security.mjs';
19
+ import './server-fn-error-DDh14a0V.mjs';
20
+ import './image-config-Duob7wER.mjs';
21
+ import './types-BMxWr97v.mjs';
22
+ import './cache.mjs';
23
+ import './types-CsR8fpgF.mjs';
24
+ import './route-runtime-DoOHzCAD.mjs';
25
+ import './font.mjs';
@@ -0,0 +1,25 @@
1
+ export { a as FarmClientHydrationCompleteEvent, b as FarmClientHydrationEvent, d as FarmClientHydrationMode, e as FarmClientHydrationSession, f as FarmClientLocation, g as FarmClientNavigationAction, h as FarmClientNavigationErrorEvent, i as FarmClientNavigationEvent, j as FarmClientNavigationLoadedEvent, k as FarmClientNavigationResolvedEvent, l as FarmClientNavigationSession, m as FarmClientPerformanceEvent, n as FarmClientPlugin, o as FarmClientPluginCloseEvent, p as FarmClientPluginEnforce, q as FarmClientPluginErrorEvent, r as FarmClientPluginErrorPhase, F as FarmClientPluginManager, s as FarmClientPluginManagerOptions, t as FarmClientPluginMetadata, u as FarmClientPluginRegistration, v as FarmClientPluginRouter, w as FarmClientPluginSetupEvent, x as FarmClientPluginStateEvent, c as createClientPluginManager } from './plugin-BJDf43dc.js';
2
+ export { $ as FarmPlugin, aG as FarmPluginContext, aJ as FarmRequestPluginContext, aK as FarmRequestStore } from './client-plugins-DuuleQKk.js';
3
+ import 'react';
4
+ import 'http';
5
+ import './types-D1A6-XvH.js';
6
+ import 'db0';
7
+ import 'unstorage';
8
+ import './integration-api-CHT2OKAf.js';
9
+ import '@farming-labs/orm';
10
+ import './types-DTzm4TCl.js';
11
+ import '@farming-labs/docs';
12
+ import './markdown.js';
13
+ import './observability.js';
14
+ import 'vite';
15
+ import './workflows-CusFV6mn.js';
16
+ import './cron.js';
17
+ import './env.js';
18
+ import './server-action-security.js';
19
+ import './server-fn-error-DDh14a0V.js';
20
+ import './image-config-Duob7wER.js';
21
+ import './types-BMxWr97v.js';
22
+ import './cache.js';
23
+ import './types-CsR8fpgF.js';
24
+ import './route-runtime-DoOHzCAD.js';
25
+ import './font.js';
package/dist/client.cjs CHANGED
@@ -52,6 +52,7 @@ __export(client_exports, {
52
52
  fetchServerQuery: () => fetchServerQuery,
53
53
  getIntegrationAPIManifest: () => getIntegrationAPIManifest,
54
54
  getRouter: () => getRouter2,
55
+ getTheme: () => getTheme,
55
56
  installChunkErrorRecovery: () => installChunkErrorRecovery,
56
57
  integrationClients: () => integrationClients,
57
58
  integrationsClient: () => integrationsClient,
@@ -63,6 +64,8 @@ __export(client_exports, {
63
64
  pushState: () => pushState,
64
65
  readPageState: () => readPageState,
65
66
  replaceState: () => replaceState,
67
+ setTheme: () => setTheme,
68
+ toggleTheme: () => toggleTheme,
66
69
  useBlocker: () => useBlocker,
67
70
  useFetcher: () => useFetcher,
68
71
  useMutation: () => useMutation,
@@ -70,7 +73,8 @@ __export(client_exports, {
70
73
  usePageState: () => usePageState,
71
74
  useRouter: () => useRouter,
72
75
  useScrollRestoration: () => useScrollRestoration,
73
- useServerQuery: () => useServerQuery
76
+ useServerQuery: () => useServerQuery,
77
+ useTheme: () => useTheme
74
78
  });
75
79
  module.exports = __toCommonJS(client_exports);
76
80
 
@@ -2684,12 +2688,12 @@ function useServerQuery(query, input, options = {}) {
2684
2688
  const mountedKeyRef = (0, import_react3.useRef)(void 0);
2685
2689
  inputRef.current = input;
2686
2690
  optionsRef.current = options;
2687
- const subscribe = (0, import_react3.useCallback)(
2691
+ const subscribe2 = (0, import_react3.useCallback)(
2688
2692
  (listener) => cache.subscribe(key, listener),
2689
2693
  [cache, key]
2690
2694
  );
2691
2695
  const getSnapshot = (0, import_react3.useCallback)(() => cache.get(key), [cache, key]);
2692
- const entry = (0, import_react3.useSyncExternalStore)(subscribe, getSnapshot, () => void 0);
2696
+ const entry = (0, import_react3.useSyncExternalStore)(subscribe2, getSnapshot, () => void 0);
2693
2697
  const run = (0, import_react3.useCallback)(
2694
2698
  (force = false) => fetchServerQuery(query, inputRef.current, {
2695
2699
  ...optionsRef.current,
@@ -3214,9 +3218,88 @@ function createStore(initialState, extend) {
3214
3218
  }
3215
3219
  __name(createStore, "createStore");
3216
3220
 
3217
- // src/client/link.tsx
3221
+ // src/theme/client.tsx
3218
3222
  var import_react5 = require("react");
3219
3223
 
3224
+ // src/theme/bridge.ts
3225
+ var FALLBACK_SERVER_SNAPSHOT = Object.freeze({
3226
+ theme: "system",
3227
+ resolvedTheme: void 0,
3228
+ mounted: false
3229
+ });
3230
+ var FARM_THEME_SERVER_SNAPSHOT_RESOLVER = /* @__PURE__ */ Symbol.for("farm.js.theme.server-snapshot-resolver");
3231
+ function getFarmThemeServerSnapshot() {
3232
+ return globalThis[FARM_THEME_SERVER_SNAPSHOT_RESOLVER]?.() ?? FALLBACK_SERVER_SNAPSHOT;
3233
+ }
3234
+ __name(getFarmThemeServerSnapshot, "getFarmThemeServerSnapshot");
3235
+
3236
+ // src/theme/client.tsx
3237
+ var FALLBACK_CLIENT_SNAPSHOT = Object.freeze({
3238
+ theme: "system",
3239
+ resolvedTheme: "light",
3240
+ mounted: true
3241
+ });
3242
+ var cachedClientSnapshot = FALLBACK_CLIENT_SNAPSHOT;
3243
+ function snapshotsMatch(left, right) {
3244
+ return left.theme === right.theme && left.resolvedTheme === right.resolvedTheme && left.mounted === right.mounted;
3245
+ }
3246
+ __name(snapshotsMatch, "snapshotsMatch");
3247
+ function getClientSnapshot() {
3248
+ const next = typeof window === "undefined" ? FALLBACK_CLIENT_SNAPSHOT : window.__FARM_THEME__?.snapshot;
3249
+ if (!next) return cachedClientSnapshot;
3250
+ if (!snapshotsMatch(cachedClientSnapshot, next)) cachedClientSnapshot = next;
3251
+ return cachedClientSnapshot;
3252
+ }
3253
+ __name(getClientSnapshot, "getClientSnapshot");
3254
+ function getHydrationSnapshot() {
3255
+ if (typeof window !== "undefined" && window.__FARM_THEME__?.serverSnapshot) {
3256
+ return window.__FARM_THEME__.serverSnapshot;
3257
+ }
3258
+ return getFarmThemeServerSnapshot();
3259
+ }
3260
+ __name(getHydrationSnapshot, "getHydrationSnapshot");
3261
+ function subscribe(listener) {
3262
+ if (typeof window === "undefined") return () => {
3263
+ };
3264
+ const handleThemeChange = /* @__PURE__ */ __name(() => {
3265
+ getClientSnapshot();
3266
+ listener();
3267
+ }, "handleThemeChange");
3268
+ window.addEventListener("farm:themechange", handleThemeChange);
3269
+ return () => window.removeEventListener("farm:themechange", handleThemeChange);
3270
+ }
3271
+ __name(subscribe, "subscribe");
3272
+ function getTheme() {
3273
+ return getClientSnapshot();
3274
+ }
3275
+ __name(getTheme, "getTheme");
3276
+ function setTheme(theme) {
3277
+ const runtime = typeof window === "undefined" ? void 0 : window.__FARM_THEME__;
3278
+ if (!runtime) {
3279
+ throw new Error("The FARMJS theme runtime is not enabled. Add `theme` to farm.config.ts.");
3280
+ }
3281
+ runtime.setTheme(theme);
3282
+ }
3283
+ __name(setTheme, "setTheme");
3284
+ function toggleTheme() {
3285
+ const next = getClientSnapshot().resolvedTheme === "dark" ? "light" : "dark";
3286
+ setTheme(next);
3287
+ return next;
3288
+ }
3289
+ __name(toggleTheme, "toggleTheme");
3290
+ function useTheme() {
3291
+ const snapshot = (0, import_react5.useSyncExternalStore)(subscribe, getClientSnapshot, getHydrationSnapshot);
3292
+ return {
3293
+ ...snapshot,
3294
+ setTheme,
3295
+ toggleTheme
3296
+ };
3297
+ }
3298
+ __name(useTheme, "useTheme");
3299
+
3300
+ // src/client/link.tsx
3301
+ var import_react6 = require("react");
3302
+
3220
3303
  // src/router.ts
3221
3304
  function createFarmRouter(routes) {
3222
3305
  const normalizedRoutes = routes.map(normalizeRouteInput).sort(compareRoutes);
@@ -3615,9 +3698,9 @@ function LinkInner({
3615
3698
  onTouchStart,
3616
3699
  ...props
3617
3700
  }, ref) {
3618
- const elementRef = (0, import_react5.useRef)(null);
3619
- const intentTimeoutRef = (0, import_react5.useRef)(null);
3620
- const hasPrefetched = (0, import_react5.useRef)(false);
3701
+ const elementRef = (0, import_react6.useRef)(null);
3702
+ const intentTimeoutRef = (0, import_react6.useRef)(null);
3703
+ const hasPrefetched = (0, import_react6.useRef)(false);
3621
3704
  const { intent, viewport, render } = normalizePrefetch(prefetch2);
3622
3705
  const baseHref = resolveLinkHref(href, params, {
3623
3706
  query,
@@ -3626,17 +3709,17 @@ function LinkInner({
3626
3709
  });
3627
3710
  const resolvedHref = localizeActiveFarmHref(baseHref, locale);
3628
3711
  const isExternal = isExternalUrl(resolvedHref);
3629
- const doPrefetch = (0, import_react5.useCallback)(() => {
3712
+ const doPrefetch = (0, import_react6.useCallback)(() => {
3630
3713
  if (isExternal || hasPrefetched.current) return;
3631
3714
  const router = getRouter();
3632
3715
  if (!router) return;
3633
3716
  hasPrefetched.current = true;
3634
3717
  router.prefetch(resolvedHref);
3635
3718
  }, [resolvedHref, isExternal]);
3636
- (0, import_react5.useEffect)(() => {
3719
+ (0, import_react6.useEffect)(() => {
3637
3720
  hasPrefetched.current = false;
3638
3721
  }, [resolvedHref]);
3639
- (0, import_react5.useEffect)(() => {
3722
+ (0, import_react6.useEffect)(() => {
3640
3723
  const element = elementRef.current;
3641
3724
  if (!element || isExternal) return;
3642
3725
  const router = getRouter();
@@ -3646,7 +3729,7 @@ function LinkInner({
3646
3729
  return () => router.unobserveForPrefetch(element);
3647
3730
  }
3648
3731
  }, [resolvedHref, viewport, isExternal]);
3649
- (0, import_react5.useEffect)(() => {
3732
+ (0, import_react6.useEffect)(() => {
3650
3733
  if (!render || isExternal) return;
3651
3734
  let cancelled = false;
3652
3735
  let timeoutId = null;
@@ -3668,7 +3751,7 @@ function LinkInner({
3668
3751
  }
3669
3752
  };
3670
3753
  }, [render, isExternal, resolvedHref]);
3671
- (0, import_react5.useEffect)(() => {
3754
+ (0, import_react6.useEffect)(() => {
3672
3755
  return () => {
3673
3756
  if (intentTimeoutRef.current) {
3674
3757
  clearTimeout(intentTimeoutRef.current);
@@ -3676,13 +3759,13 @@ function LinkInner({
3676
3759
  }
3677
3760
  };
3678
3761
  }, []);
3679
- const cancelIntent = (0, import_react5.useCallback)(() => {
3762
+ const cancelIntent = (0, import_react6.useCallback)(() => {
3680
3763
  if (intentTimeoutRef.current) {
3681
3764
  clearTimeout(intentTimeoutRef.current);
3682
3765
  intentTimeoutRef.current = null;
3683
3766
  }
3684
3767
  }, []);
3685
- const scheduleIntentPrefetch = (0, import_react5.useCallback)(() => {
3768
+ const scheduleIntentPrefetch = (0, import_react6.useCallback)(() => {
3686
3769
  if (isExternal || !intent || hasPrefetched.current) return;
3687
3770
  cancelIntent();
3688
3771
  intentTimeoutRef.current = setTimeout(() => {
@@ -3690,42 +3773,42 @@ function LinkInner({
3690
3773
  doPrefetch();
3691
3774
  }, prefetchDelay);
3692
3775
  }, [intent, isExternal, prefetchDelay, doPrefetch, cancelIntent]);
3693
- const handleMouseEnter = (0, import_react5.useCallback)(
3776
+ const handleMouseEnter = (0, import_react6.useCallback)(
3694
3777
  (event) => {
3695
3778
  onMouseEnter?.(event);
3696
3779
  scheduleIntentPrefetch();
3697
3780
  },
3698
3781
  [onMouseEnter, scheduleIntentPrefetch]
3699
3782
  );
3700
- const handleMouseLeave = (0, import_react5.useCallback)(
3783
+ const handleMouseLeave = (0, import_react6.useCallback)(
3701
3784
  (event) => {
3702
3785
  onMouseLeave?.(event);
3703
3786
  cancelIntent();
3704
3787
  },
3705
3788
  [onMouseLeave, cancelIntent]
3706
3789
  );
3707
- const handleTouchStart = (0, import_react5.useCallback)(
3790
+ const handleTouchStart = (0, import_react6.useCallback)(
3708
3791
  (event) => {
3709
3792
  onTouchStart?.(event);
3710
3793
  scheduleIntentPrefetch();
3711
3794
  },
3712
3795
  [onTouchStart, scheduleIntentPrefetch]
3713
3796
  );
3714
- const handleFocus = (0, import_react5.useCallback)(
3797
+ const handleFocus = (0, import_react6.useCallback)(
3715
3798
  (event) => {
3716
3799
  onFocus?.(event);
3717
3800
  scheduleIntentPrefetch();
3718
3801
  },
3719
3802
  [onFocus, scheduleIntentPrefetch]
3720
3803
  );
3721
- const handleBlur = (0, import_react5.useCallback)(
3804
+ const handleBlur = (0, import_react6.useCallback)(
3722
3805
  (event) => {
3723
3806
  onBlur?.(event);
3724
3807
  cancelIntent();
3725
3808
  },
3726
3809
  [onBlur, cancelIntent]
3727
3810
  );
3728
- const handleClick = (0, import_react5.useCallback)(
3811
+ const handleClick = (0, import_react6.useCallback)(
3729
3812
  (event) => {
3730
3813
  onClick?.(event);
3731
3814
  if (event.defaultPrevented) return;
@@ -3750,7 +3833,7 @@ function LinkInner({
3750
3833
  },
3751
3834
  [resolvedHref, replace, scroll, viewTransition, target, isExternal, onClick]
3752
3835
  );
3753
- const setRefs = (0, import_react5.useCallback)(
3836
+ const setRefs = (0, import_react6.useCallback)(
3754
3837
  (node) => {
3755
3838
  elementRef.current = node;
3756
3839
  if (typeof ref === "function") ref(node);
@@ -3779,7 +3862,7 @@ function LinkInner({
3779
3862
  );
3780
3863
  }
3781
3864
  __name(LinkInner, "LinkInner");
3782
- var LinkWithRef = (0, import_react5.forwardRef)(LinkInner);
3865
+ var LinkWithRef = (0, import_react6.forwardRef)(LinkInner);
3783
3866
  LinkWithRef.displayName = "Link";
3784
3867
  var Link = LinkWithRef;
3785
3868
  function resolveLinkHref(href, params, options) {
@@ -3880,7 +3963,7 @@ function matchManifestRoute(pathname, route2) {
3880
3963
  __name(matchManifestRoute, "matchManifestRoute");
3881
3964
 
3882
3965
  // src/client/router.ts
3883
- var import_react6 = require("react");
3966
+ var import_react7 = require("react");
3884
3967
 
3885
3968
  // src/deferred.ts
3886
3969
  var FARM_DEFERRED_CONTENT_TYPE = "application/x-farm-deferred+json";
@@ -4661,14 +4744,14 @@ function useRouter(options = {}) {
4661
4744
  const basePath = options.basePath || "";
4662
4745
  const routes = options.routes;
4663
4746
  const routeKey = routes?.map((route2) => typeof route2 === "string" ? route2 : route2.path).join("\n") || "";
4664
- const routeMatcher = (0, import_react6.useMemo)(
4747
+ const routeMatcher = (0, import_react7.useMemo)(
4665
4748
  () => routeKey ? createFarmRouter(routeKey.split("\n")) : null,
4666
4749
  [routeKey]
4667
4750
  );
4668
- const [state, setState] = (0, import_react6.useState)(() => {
4751
+ const [state, setState] = (0, import_react7.useState)(() => {
4669
4752
  return readRouterState(basePath, routeMatcher);
4670
4753
  });
4671
- (0, import_react6.useEffect)(() => {
4754
+ (0, import_react7.useEffect)(() => {
4672
4755
  if (typeof window === "undefined") return;
4673
4756
  const handlePopState = /* @__PURE__ */ __name(() => {
4674
4757
  setState(readRouterState(basePath, routeMatcher));
@@ -4719,8 +4802,8 @@ function useRouter(options = {}) {
4719
4802
  }
4720
4803
  __name(useRouter, "useRouter");
4721
4804
  function usePageState() {
4722
- const [state, setState] = (0, import_react6.useState)(() => readPageState());
4723
- (0, import_react6.useEffect)(() => {
4805
+ const [state, setState] = (0, import_react7.useState)(() => readPageState());
4806
+ (0, import_react7.useEffect)(() => {
4724
4807
  if (typeof window === "undefined") return;
4725
4808
  const handlePopState = /* @__PURE__ */ __name(() => {
4726
4809
  setState(readPageState());
@@ -4733,10 +4816,10 @@ function usePageState() {
4733
4816
  }
4734
4817
  __name(usePageState, "usePageState");
4735
4818
  function useNavigation() {
4736
- const [state, setState] = (0, import_react6.useState)(
4819
+ const [state, setState] = (0, import_react7.useState)(
4737
4820
  () => getRouter2().getNavigationState()
4738
4821
  );
4739
- (0, import_react6.useEffect)(() => {
4822
+ (0, import_react7.useEffect)(() => {
4740
4823
  if (typeof window === "undefined") return;
4741
4824
  return getRouter2().subscribeNavigation(setState);
4742
4825
  }, []);
@@ -4744,10 +4827,10 @@ function useNavigation() {
4744
4827
  }
4745
4828
  __name(useNavigation, "useNavigation");
4746
4829
  function useBlocker(options) {
4747
- const optionsRef = (0, import_react6.useRef)(options);
4830
+ const optionsRef = (0, import_react7.useRef)(options);
4748
4831
  optionsRef.current = options;
4749
4832
  const active = Boolean(options.when);
4750
- (0, import_react6.useEffect)(() => {
4833
+ (0, import_react7.useEffect)(() => {
4751
4834
  if (typeof window === "undefined" || !active) {
4752
4835
  return;
4753
4836
  }
@@ -4768,8 +4851,8 @@ function useBlocker(options) {
4768
4851
  }
4769
4852
  __name(useBlocker, "useBlocker");
4770
4853
  function useScrollRestoration(key) {
4771
- const ref = (0, import_react6.useRef)(null);
4772
- (0, import_react6.useEffect)(() => {
4854
+ const ref = (0, import_react7.useRef)(null);
4855
+ (0, import_react7.useEffect)(() => {
4773
4856
  const element = ref.current;
4774
4857
  if (!element) return;
4775
4858
  return getRouter2().registerScrollElement(key, element);
@@ -5379,6 +5462,7 @@ __name(isObject, "isObject");
5379
5462
  fetchServerQuery,
5380
5463
  getIntegrationAPIManifest,
5381
5464
  getRouter,
5465
+ getTheme,
5382
5466
  installChunkErrorRecovery,
5383
5467
  integrationClients,
5384
5468
  integrationsClient,
@@ -5390,6 +5474,8 @@ __name(isObject, "isObject");
5390
5474
  pushState,
5391
5475
  readPageState,
5392
5476
  replaceState,
5477
+ setTheme,
5478
+ toggleTheme,
5393
5479
  useBlocker,
5394
5480
  useFetcher,
5395
5481
  useMutation,
@@ -5397,6 +5483,7 @@ __name(isObject, "isObject");
5397
5483
  usePageState,
5398
5484
  useRouter,
5399
5485
  useScrollRestoration,
5400
- useServerQuery
5486
+ useServerQuery,
5487
+ useTheme
5401
5488
  });
5402
5489
  //# sourceMappingURL=client.cjs.map