gemi 0.95.0 → 0.96.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 (183) hide show
  1. package/dist/ai/index.js +2 -2
  2. package/dist/ai/index.js.map +1 -1
  3. package/dist/app/index.js +1 -1
  4. package/dist/bun/plugin.js +1 -1
  5. package/dist/bun/preload.js +1 -1
  6. package/dist/{chunk-p3mdtnvv.js → chunk-1pbwrzwp.js} +2 -2
  7. package/dist/{chunk-j2nx0dtq.js.map → chunk-1pbwrzwp.js.map} +1 -1
  8. package/dist/{chunk-qqev9e50.js → chunk-1vs4xhcg.js} +2 -2
  9. package/dist/{chunk-qqev9e50.js.map → chunk-1vs4xhcg.js.map} +1 -1
  10. package/dist/{chunk-7dnb21s9.js → chunk-2tm56xq1.js} +2 -2
  11. package/dist/{chunk-7dnb21s9.js.map → chunk-2tm56xq1.js.map} +1 -1
  12. package/dist/{chunk-j9x86xsc.js → chunk-3tn480wt.js} +2 -2
  13. package/dist/{chunk-j9x86xsc.js.map → chunk-3tn480wt.js.map} +1 -1
  14. package/dist/{chunk-7hfv5n00.js → chunk-48dek9s7.js} +3 -3
  15. package/dist/{chunk-7hfv5n00.js.map → chunk-48dek9s7.js.map} +1 -1
  16. package/dist/{chunk-b8m6zs7e.js → chunk-4qjy1bts.js} +2 -2
  17. package/dist/{chunk-b8m6zs7e.js.map → chunk-4qjy1bts.js.map} +1 -1
  18. package/dist/{chunk-7s5nh5mx.js → chunk-4rns9cnb.js} +2 -2
  19. package/dist/{chunk-7s5nh5mx.js.map → chunk-4rns9cnb.js.map} +1 -1
  20. package/dist/{chunk-1hnpr3xt.js → chunk-5wgx5n2q.js} +2 -2
  21. package/dist/{chunk-1hnpr3xt.js.map → chunk-5wgx5n2q.js.map} +1 -1
  22. package/dist/{chunk-xtqxy492.js → chunk-6397mbr2.js} +3 -3
  23. package/dist/{chunk-xtqxy492.js.map → chunk-6397mbr2.js.map} +1 -1
  24. package/dist/{chunk-tcefqn3d.js → chunk-63cp4s8g.js} +2 -2
  25. package/dist/{chunk-tcefqn3d.js.map → chunk-63cp4s8g.js.map} +1 -1
  26. package/dist/{chunk-56gce2z7.js → chunk-64j3yef2.js} +2 -2
  27. package/dist/{chunk-56gce2z7.js.map → chunk-64j3yef2.js.map} +1 -1
  28. package/dist/{chunk-j2nx0dtq.js → chunk-68zf43ah.js} +2 -2
  29. package/dist/{chunk-p3mdtnvv.js.map → chunk-68zf43ah.js.map} +1 -1
  30. package/dist/{chunk-7ktsceyz.js → chunk-69yw2pb1.js} +2 -2
  31. package/dist/{chunk-7ktsceyz.js.map → chunk-69yw2pb1.js.map} +1 -1
  32. package/dist/{chunk-x24davqq.js → chunk-6abjjfjr.js} +2 -2
  33. package/dist/{chunk-x24davqq.js.map → chunk-6abjjfjr.js.map} +1 -1
  34. package/dist/{chunk-z9ydpvc8.js → chunk-77kw61f4.js} +2 -2
  35. package/dist/{chunk-z9ydpvc8.js.map → chunk-77kw61f4.js.map} +1 -1
  36. package/dist/{chunk-h24rv10h.js → chunk-7fn3wwyq.js} +2 -2
  37. package/dist/{chunk-h24rv10h.js.map → chunk-7fn3wwyq.js.map} +1 -1
  38. package/dist/{chunk-mf936r5e.js → chunk-7keqx61j.js} +2 -2
  39. package/dist/{chunk-mf936r5e.js.map → chunk-7keqx61j.js.map} +1 -1
  40. package/dist/{chunk-jrp35qrk.js → chunk-80t4tfke.js} +1 -1
  41. package/dist/{chunk-323715e8.js → chunk-8ma08vxq.js} +2 -2
  42. package/dist/{chunk-323715e8.js.map → chunk-8ma08vxq.js.map} +1 -1
  43. package/dist/{chunk-nqabsqty.js → chunk-99wzvsz5.js} +4 -4
  44. package/dist/{chunk-nqabsqty.js.map → chunk-99wzvsz5.js.map} +1 -1
  45. package/dist/{chunk-2jse74pn.js → chunk-a9nxjfdy.js} +2 -2
  46. package/dist/{chunk-2jse74pn.js.map → chunk-a9nxjfdy.js.map} +1 -1
  47. package/dist/{chunk-2yyr5tdc.js → chunk-aa13sgs2.js} +1 -1
  48. package/dist/{chunk-jxhznqhe.js → chunk-bf1q3m7a.js} +2 -2
  49. package/dist/{chunk-jxhznqhe.js.map → chunk-bf1q3m7a.js.map} +1 -1
  50. package/dist/{chunk-3fjkbcra.js → chunk-bvsevtpp.js} +1 -1
  51. package/dist/{chunk-nfhy3sp8.js → chunk-c0k26g4n.js} +2 -2
  52. package/dist/{chunk-nfhy3sp8.js.map → chunk-c0k26g4n.js.map} +1 -1
  53. package/dist/{chunk-ssqxzcad.js → chunk-c9vga0sk.js} +3 -3
  54. package/dist/{chunk-ssqxzcad.js.map → chunk-c9vga0sk.js.map} +1 -1
  55. package/dist/{chunk-w98tp5fa.js → chunk-cp8gxeqs.js} +2 -2
  56. package/dist/{chunk-w98tp5fa.js.map → chunk-cp8gxeqs.js.map} +1 -1
  57. package/dist/{chunk-5en4ydde.js → chunk-dn2mw39y.js} +2 -2
  58. package/dist/{chunk-5en4ydde.js.map → chunk-dn2mw39y.js.map} +1 -1
  59. package/dist/{chunk-qxda7pzm.js → chunk-f6s7ddjz.js} +2 -2
  60. package/dist/{chunk-qxda7pzm.js.map → chunk-f6s7ddjz.js.map} +1 -1
  61. package/dist/chunk-f9t39vwk.js +5 -0
  62. package/dist/chunk-f9t39vwk.js.map +10 -0
  63. package/dist/{chunk-fq03tz45.js → chunk-gykbgtvg.js} +2 -2
  64. package/dist/{chunk-fq03tz45.js.map → chunk-gykbgtvg.js.map} +1 -1
  65. package/dist/{chunk-mym0zxxp.js → chunk-h15bd9vn.js} +2 -2
  66. package/dist/{chunk-mym0zxxp.js.map → chunk-h15bd9vn.js.map} +1 -1
  67. package/dist/{chunk-38k1kjyb.js → chunk-hsec03gh.js} +2 -2
  68. package/dist/{chunk-38k1kjyb.js.map → chunk-hsec03gh.js.map} +1 -1
  69. package/dist/{chunk-2shkf2gs.js → chunk-jhaeemjf.js} +2 -2
  70. package/dist/{chunk-2shkf2gs.js.map → chunk-jhaeemjf.js.map} +1 -1
  71. package/dist/{chunk-bk4f99s4.js → chunk-jv38q9n7.js} +2 -2
  72. package/dist/{chunk-bk4f99s4.js.map → chunk-jv38q9n7.js.map} +1 -1
  73. package/dist/{chunk-fyxp4bn0.js → chunk-kcp39g56.js} +2 -2
  74. package/dist/{chunk-fyxp4bn0.js.map → chunk-kcp39g56.js.map} +1 -1
  75. package/dist/{chunk-qj5ts9d5.js → chunk-msg6re1f.js} +2 -2
  76. package/dist/{chunk-qj5ts9d5.js.map → chunk-msg6re1f.js.map} +1 -1
  77. package/dist/{chunk-kzh8bkg5.js → chunk-n63xjrck.js} +2 -2
  78. package/dist/{chunk-kzh8bkg5.js.map → chunk-n63xjrck.js.map} +1 -1
  79. package/dist/{chunk-9g5cpkkk.js → chunk-nffk2cj3.js} +2 -2
  80. package/dist/{chunk-9g5cpkkk.js.map → chunk-nffk2cj3.js.map} +1 -1
  81. package/dist/{chunk-z16nyxb8.js → chunk-np5b3cd7.js} +2 -2
  82. package/dist/{chunk-z16nyxb8.js.map → chunk-np5b3cd7.js.map} +1 -1
  83. package/dist/{chunk-twhf7w1x.js → chunk-pjg7gqnh.js} +1 -1
  84. package/dist/{chunk-f6veb369.js → chunk-prg5k57m.js} +2 -2
  85. package/dist/{chunk-f6veb369.js.map → chunk-prg5k57m.js.map} +1 -1
  86. package/dist/chunk-qttatc7h.js +5 -0
  87. package/dist/chunk-qttatc7h.js.map +12 -0
  88. package/dist/chunk-rc4z7ykq.js +17 -0
  89. package/dist/{chunk-ykbehyp9.js.map → chunk-rc4z7ykq.js.map} +4 -4
  90. package/dist/{chunk-5px4rkzf.js → chunk-shb51m4y.js} +2 -2
  91. package/dist/{chunk-5px4rkzf.js.map → chunk-shb51m4y.js.map} +1 -1
  92. package/dist/{chunk-8g99gnsd.js → chunk-snz7nze3.js} +2 -2
  93. package/dist/{chunk-8g99gnsd.js.map → chunk-snz7nze3.js.map} +1 -1
  94. package/dist/{chunk-qpek76vn.js → chunk-tymhsmgq.js} +3 -3
  95. package/dist/{chunk-qpek76vn.js.map → chunk-tymhsmgq.js.map} +1 -1
  96. package/dist/{chunk-f6e2t4vb.js → chunk-xf9axxzx.js} +3 -3
  97. package/dist/{chunk-f6e2t4vb.js.map → chunk-xf9axxzx.js.map} +1 -1
  98. package/dist/{chunk-et6thczw.js → chunk-xmjhensy.js} +2 -2
  99. package/dist/{chunk-et6thczw.js.map → chunk-xmjhensy.js.map} +1 -1
  100. package/dist/{chunk-37jb6q13.js → chunk-xp6nr441.js} +2 -2
  101. package/dist/{chunk-37jb6q13.js.map → chunk-xp6nr441.js.map} +1 -1
  102. package/dist/{chunk-bedkys40.js → chunk-y4fp0eg9.js} +2 -2
  103. package/dist/{chunk-bedkys40.js.map → chunk-y4fp0eg9.js.map} +1 -1
  104. package/dist/chunk-yhkffean.js +5 -0
  105. package/dist/{chunk-dhe96f7z.js.map → chunk-yhkffean.js.map} +1 -1
  106. package/dist/{chunk-qz2p0hv5.js → chunk-yk2mtcwv.js} +2 -2
  107. package/dist/{chunk-qz2p0hv5.js.map → chunk-yk2mtcwv.js.map} +1 -1
  108. package/dist/{chunk-zyw42zny.js → chunk-z8jf7jwg.js} +2 -2
  109. package/dist/{chunk-zyw42zny.js.map → chunk-z8jf7jwg.js.map} +1 -1
  110. package/dist/chunks/{ThemeProvider-z_MW40tl.js → ThemeProvider-Cqfwr6dk.js} +2 -2
  111. package/dist/chunks/ThemeProvider-Cqfwr6dk.js.map +1 -0
  112. package/dist/chunks/useParams-BN3XXfmG.js.map +1 -1
  113. package/dist/client/I18nContext.d.ts.map +1 -1
  114. package/dist/client/RouteStateContext.d.ts +3 -0
  115. package/dist/client/RouteStateContext.d.ts.map +1 -1
  116. package/dist/client/ServerDataProvider.d.ts +2 -0
  117. package/dist/client/ServerDataProvider.d.ts.map +1 -1
  118. package/dist/client/index.d.ts +2 -0
  119. package/dist/client/index.d.ts.map +1 -1
  120. package/dist/client/index.js +118 -2
  121. package/dist/client/index.js.map +1 -1
  122. package/dist/client/useDictionary.d.ts +5 -0
  123. package/dist/client/useDictionary.d.ts.map +1 -1
  124. package/dist/client/useFormatter.d.ts +24 -0
  125. package/dist/client/useFormatter.d.ts.map +1 -0
  126. package/dist/client/useRouteData.d.ts +2 -0
  127. package/dist/client/useRouteData.d.ts.map +1 -1
  128. package/dist/config/index.js +1 -1
  129. package/dist/console/run.js +2 -2
  130. package/dist/console/run.js.map +1 -1
  131. package/dist/container/index.js +2 -2
  132. package/dist/container/index.js.map +1 -1
  133. package/dist/database/index.js +1 -1
  134. package/dist/email/index.js +2 -2
  135. package/dist/email/index.js.map +1 -1
  136. package/dist/facades/Lang.d.ts +19 -0
  137. package/dist/facades/Lang.d.ts.map +1 -1
  138. package/dist/facades/index.js +1 -1
  139. package/dist/foundation/index.js +2 -2
  140. package/dist/foundation/index.js.map +1 -1
  141. package/dist/http/index.js +1 -1
  142. package/dist/i18n/Translator.d.ts +17 -0
  143. package/dist/i18n/Translator.d.ts.map +1 -1
  144. package/dist/i18n/config.d.ts +15 -0
  145. package/dist/i18n/config.d.ts.map +1 -1
  146. package/dist/i18n/dictionaryRuntime.js +1 -1
  147. package/dist/i18n/formatter.d.ts +52 -0
  148. package/dist/i18n/formatter.d.ts.map +1 -0
  149. package/dist/i18n/index.d.ts +1 -0
  150. package/dist/i18n/index.d.ts.map +1 -1
  151. package/dist/i18n/index.js +2 -2
  152. package/dist/i18n/index.js.map +2 -2
  153. package/dist/kernel/index.js +2 -2
  154. package/dist/kernel/index.js.map +1 -1
  155. package/dist/orm/index.js +2 -2
  156. package/dist/orm/index.js.map +1 -1
  157. package/dist/server/index.js +2 -2
  158. package/dist/server/index.js.map +1 -1
  159. package/dist/services/index.js +2 -2
  160. package/dist/services/index.js.map +1 -1
  161. package/dist/services/queue/work.js +2 -2
  162. package/dist/services/queue/work.js.map +1 -1
  163. package/dist/services/router/ViewRouteDispatcher.d.ts.map +1 -1
  164. package/dist/support/index.js +2 -2
  165. package/dist/support/index.js.map +1 -1
  166. package/dist/testing/Page.d.ts +2 -0
  167. package/dist/testing/Page.d.ts.map +1 -1
  168. package/dist/testing/index.js +10 -4
  169. package/dist/testing/index.js.map +1 -1
  170. package/package.json +1 -1
  171. package/skills/gemi-react-best-practices/SKILL.md +1 -0
  172. package/skills/gemi-react-best-practices/rules/i18n-format-with-use-formatter.md +41 -0
  173. package/dist/chunk-dhe96f7z.js +0 -5
  174. package/dist/chunk-m3z60v9d.js +0 -5
  175. package/dist/chunk-m3z60v9d.js.map +0 -11
  176. package/dist/chunk-safv6h9x.js +0 -5
  177. package/dist/chunk-safv6h9x.js.map +0 -10
  178. package/dist/chunk-ykbehyp9.js +0 -17
  179. package/dist/chunks/ThemeProvider-z_MW40tl.js.map +0 -1
  180. /package/dist/{chunk-jrp35qrk.js.map → chunk-80t4tfke.js.map} +0 -0
  181. /package/dist/{chunk-2yyr5tdc.js.map → chunk-aa13sgs2.js.map} +0 -0
  182. /package/dist/{chunk-3fjkbcra.js.map → chunk-bvsevtpp.js.map} +0 -0
  183. /package/dist/{chunk-twhf7w1x.js.map → chunk-pjg7gqnh.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"useParams-BN3XXfmG.js","names":[],"sources":["../../client/RouteStateContext.tsx","../../client/useParams.ts"],"sourcesContent":["import type { Action } from \"history\";\nimport { createContext, type PropsWithChildren } from \"react\";\n\nexport interface RouteState {\n views: string[];\n params: Record<string, string>;\n search: string;\n state: Record<string, unknown>;\n pathname: string;\n hash: string;\n action: Action | null;\n routePath: string;\n locale: string | null;\n}\n\nexport type PageData = {\n data: Record<string, unknown>;\n i18n: {\n currentLocale: string;\n dictionary: Record<string, Record<string, unknown>>;\n supportedLocales: string[];\n };\n prefetchedData: Record<string, unknown>;\n breadcrumbs: any;\n appId: string;\n /**\n * Evaluated features, replaced on every navigation.\n *\n * Lives here rather than only on `ServerDataContext` for the same reason\n * `i18n` does: the server re-evaluates on each navigation payload, so reading\n * from route state is what makes switching a feature on land without a hard\n * reload.\n */\n features: Record<string, boolean>;\n};\n\nexport const RouteStateContext = createContext({} as RouteState & PageData);\n\nexport const RouteStateProvider = (\n props: PropsWithChildren<{\n state: RouteState & PageData;\n }>,\n) => {\n return (\n <RouteStateContext.Provider value={props.state}>\n {props.children}\n </RouteStateContext.Provider>\n );\n};\n","import { useContext } from \"react\";\nimport { RouteStateContext } from \"./RouteStateContext\";\n\nexport function useParams() {\n const { params = {} } = useContext(RouteStateContext);\n return params;\n}\n"],"mappings":";;;AAoCA,IAAa,oBAAoB,cAAc,CAAC,CAA0B;AAE1E,IAAa,sBACX,UAGG;CACH,OACE,oBAAC,kBAAkB,UAAnB;EAA4B,OAAO,MAAM;YACtC,MAAM;CACmB,CAAA;AAEhC;;;AC7CA,SAAgB,YAAY;CAC1B,MAAM,EAAE,SAAS,CAAC,MAAM,WAAW,iBAAiB;CACpD,OAAO;AACT"}
1
+ {"version":3,"file":"useParams-BN3XXfmG.js","names":[],"sources":["../../client/RouteStateContext.tsx","../../client/useParams.ts"],"sourcesContent":["import type { Action } from \"history\";\nimport { createContext, type PropsWithChildren } from \"react\";\n\nexport interface RouteState {\n views: string[];\n params: Record<string, string>;\n search: string;\n state: Record<string, unknown>;\n pathname: string;\n hash: string;\n action: Action | null;\n routePath: string;\n locale: string | null;\n}\n\nexport type PageData = {\n data: Record<string, unknown>;\n i18n: {\n currentLocale: string;\n dictionary: Record<string, Record<string, unknown>>;\n supportedLocales: string[];\n defaultLocale?: string;\n /** The IANA zone dates are formatted in, resolved on the server. */\n timeZone?: string;\n };\n prefetchedData: Record<string, unknown>;\n breadcrumbs: any;\n appId: string;\n /**\n * Evaluated features, replaced on every navigation.\n *\n * Lives here rather than only on `ServerDataContext` for the same reason\n * `i18n` does: the server re-evaluates on each navigation payload, so reading\n * from route state is what makes switching a feature on land without a hard\n * reload.\n */\n features: Record<string, boolean>;\n};\n\nexport const RouteStateContext = createContext({} as RouteState & PageData);\n\nexport const RouteStateProvider = (\n props: PropsWithChildren<{\n state: RouteState & PageData;\n }>,\n) => {\n return (\n <RouteStateContext.Provider value={props.state}>\n {props.children}\n </RouteStateContext.Provider>\n );\n};\n","import { useContext } from \"react\";\nimport { RouteStateContext } from \"./RouteStateContext\";\n\nexport function useParams() {\n const { params = {} } = useContext(RouteStateContext);\n return params;\n}\n"],"mappings":";;;AAuCA,IAAa,oBAAoB,cAAc,CAAC,CAA0B;AAE1E,IAAa,sBACX,UAGG;CACH,OACE,oBAAC,kBAAkB,UAAnB;EAA4B,OAAO,MAAM;YACtC,MAAM;CACmB,CAAA;AAEhC;;;AChDA,SAAgB,YAAY;CAC1B,MAAM,EAAE,SAAS,CAAC,MAAM,WAAW,iBAAiB;CACpD,OAAO;AACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"I18nContext.d.ts","sourceRoot":"","sources":["../../client/I18nContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,iBAAiB,EAIvB,MAAM,OAAO,CAAC;AAGf,KAAK,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC/C,KAAK,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;AAE7D,UAAU,gBAAgB;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,gBAAgB,EAAE,CAChB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EACpE,MAAM,CAAC,EAAE,MAAM,KACZ,IAAI,CAAC;IACV,iBAAiB,EAAE,CACjB,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,WAAW,KACjB,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,wBAAwB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClE,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,MAAM,oBAAoB,CAAC,CAAC,IAAI;KACnC,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,WAAW,2CAAwC,CAAC;AAEjE,MAAM,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AAE1E,eAAO,MAAM,YAAY,GAAI,OAAO,iBAAiB,4CAqFpD,CAAC"}
1
+ {"version":3,"file":"I18nContext.d.ts","sourceRoot":"","sources":["../../client/I18nContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,iBAAiB,EAIvB,MAAM,OAAO,CAAC;AAGf,KAAK,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC/C,KAAK,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;AAE7D,UAAU,gBAAgB;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,gBAAgB,EAAE,CAChB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EACpE,MAAM,CAAC,EAAE,MAAM,KACZ,IAAI,CAAC;IACV,iBAAiB,EAAE,CACjB,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,WAAW,KACjB,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,wBAAwB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClE,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,MAAM,oBAAoB,CAAC,CAAC,IAAI;KACnC,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,WAAW,2CAAwC,CAAC;AAEjE,MAAM,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AAE1E,eAAO,MAAM,YAAY,GAAI,OAAO,iBAAiB,4CAuFpD,CAAC"}
@@ -17,6 +17,9 @@ export type PageData = {
17
17
  currentLocale: string;
18
18
  dictionary: Record<string, Record<string, unknown>>;
19
19
  supportedLocales: string[];
20
+ defaultLocale?: string;
21
+ /** The IANA zone dates are formatted in, resolved on the server. */
22
+ timeZone?: string;
20
23
  };
21
24
  prefetchedData: Record<string, unknown>;
22
25
  breadcrumbs: any;
@@ -1 +1 @@
1
- {"version":3,"file":"RouteStateContext.d.ts","sourceRoot":"","sources":["../../client/RouteStateContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAiB,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAE9D,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,IAAI,EAAE;QACJ,aAAa,EAAE,MAAM,CAAC;QACtB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QACpD,gBAAgB,EAAE,MAAM,EAAE,CAAC;KAC5B,CAAC;IACF,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,WAAW,EAAE,GAAG,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd;;;;;;;OAOG;IACH,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC,CAAC;AAEF,eAAO,MAAM,iBAAiB,gDAA6C,CAAC;AAE5E,eAAO,MAAM,kBAAkB,GAC7B,OAAO,iBAAiB,CAAC;IACvB,KAAK,EAAE,UAAU,GAAG,QAAQ,CAAC;CAC9B,CAAC,4CAOH,CAAC"}
1
+ {"version":3,"file":"RouteStateContext.d.ts","sourceRoot":"","sources":["../../client/RouteStateContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAiB,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAE9D,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,IAAI,EAAE;QACJ,aAAa,EAAE,MAAM,CAAC;QACtB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QACpD,gBAAgB,EAAE,MAAM,EAAE,CAAC;QAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,oEAAoE;QACpE,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,WAAW,EAAE,GAAG,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd;;;;;;;OAOG;IACH,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC,CAAC;AAEF,eAAO,MAAM,iBAAiB,gDAA6C,CAAC;AAE5E,eAAO,MAAM,kBAAkB,GAC7B,OAAO,iBAAiB,CAAC;IACvB,KAAK,EAAE,UAAU,GAAG,QAAQ,CAAC;CAC9B,CAAC,4CAOH,CAAC"}
@@ -33,6 +33,8 @@ export interface ServerDataContextValue {
33
33
  currentLocale: string;
34
34
  supportedLocales: string[];
35
35
  defaultLocale: string;
36
+ /** The IANA zone dates are formatted in, resolved on the server. */
37
+ timeZone?: string;
36
38
  };
37
39
  componentTree: ComponentTree;
38
40
  auth: {
@@ -1 +1 @@
1
- {"version":3,"file":"ServerDataProvider.d.ts","sourceRoot":"","sources":["../../client/ServerDataProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAEhC,MAAM,WAAW,sBAAsB;IACrC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACxC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IAC/C,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7D,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACrC,MAAM,EAAE;QACN,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC5B,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,OAAO,CAAC;QACf,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;QAChC,2FAA2F;QAC3F,MAAM,CAAC,EAAE;YACP,IAAI,EAAE,MAAM,CAAC;YACb,KAAK,EAAE,MAAM,CAAC;YACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC/B,MAAM,EAAE,OAAO,CAAC;YAChB,IAAI,EAAE,MAAM,CAAC;YACb,MAAM,EAAE,MAAM,CAAC;SAChB,GAAG,IAAI,CAAC;KACV,CAAC;IACF,IAAI,EAAE;QACJ,UAAU,EAAE,YAAY,CAAC;QACzB,aAAa,EAAE,MAAM,CAAC;QACtB,gBAAgB,EAAE,MAAM,EAAE,CAAC;QAC3B,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,aAAa,EAAE,aAAa,CAAC;IAC7B,IAAI,EAAE;QACJ,IAAI,EAAE,IAAI,CAAC;KACZ,CAAC;IACF;;;;;OAKG;IACH,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACtC,0EAA0E;IAC1E,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAChD,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,GAAG,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,iBAAiB,iDAA8C,CAAC;AAE7E,UAAU,uBAAuB;IAC/B,KAAK,CAAC,EAAE,sBAAsB,CAAC;CAChC;AAED,eAAO,MAAM,kBAAkB,GAC7B,OAAO,iBAAiB,CAAC,uBAAuB,CAAC,4CAgBlD,CAAC"}
1
+ {"version":3,"file":"ServerDataProvider.d.ts","sourceRoot":"","sources":["../../client/ServerDataProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAEhC,MAAM,WAAW,sBAAsB;IACrC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACxC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IAC/C,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7D,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACrC,MAAM,EAAE;QACN,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC5B,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,OAAO,CAAC;QACf,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;QAChC,2FAA2F;QAC3F,MAAM,CAAC,EAAE;YACP,IAAI,EAAE,MAAM,CAAC;YACb,KAAK,EAAE,MAAM,CAAC;YACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC/B,MAAM,EAAE,OAAO,CAAC;YAChB,IAAI,EAAE,MAAM,CAAC;YACb,MAAM,EAAE,MAAM,CAAC;SAChB,GAAG,IAAI,CAAC;KACV,CAAC;IACF,IAAI,EAAE;QACJ,UAAU,EAAE,YAAY,CAAC;QACzB,aAAa,EAAE,MAAM,CAAC;QACtB,gBAAgB,EAAE,MAAM,EAAE,CAAC;QAC3B,aAAa,EAAE,MAAM,CAAC;QACtB,oEAAoE;QACpE,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,aAAa,EAAE,aAAa,CAAC;IAC7B,IAAI,EAAE;QACJ,IAAI,EAAE,IAAI,CAAC;KACZ,CAAC;IACF;;;;;OAKG;IACH,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACtC,0EAA0E;IAC1E,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAChD,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,GAAG,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,iBAAiB,iDAA8C,CAAC;AAE7E,UAAU,uBAAuB;IAC/B,KAAK,CAAC,EAAE,sBAAsB,CAAC;CAChC;AAED,eAAO,MAAM,kBAAkB,GAC7B,OAAO,iBAAiB,CAAC,uBAAuB,CAAC,4CAgBlD,CAAC"}
@@ -52,6 +52,8 @@ export { useTranslator } from "./useTranslator";
52
52
  export { useDictionary } from "./useDictionary";
53
53
  export { defineDictionary, type DictionaryHandle } from "../i18n/defineDictionary";
54
54
  export { useLocale } from "./useLocale";
55
+ export { useFormatter } from "./useFormatter";
56
+ export type { Formatter, DateInput } from "../i18n/formatter";
55
57
  export { OpenGraphImage } from "./OpenGraphImage";
56
58
  export { useTheme } from "./ThemeProvider";
57
59
  export { useAppIdMissmatch } from "./useAppIdMissmatch";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../client/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../client/index.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { A as useLocation, B as QueryManagerProvider, C as useRoute, D as I18nProvider, E as I18nContext, G as retryDelayFor, H as pickDefined, I as toVariantKey, J as Subject, K as shouldRetryQuery, L as applyParams$1, M as isAbsoluteUrl, O as ServerDataContext, P as Action, R as QueryConfigContext, S as routeDataUrl, T as useNavigate, U as DEFAULT_STALE_TIME, V as USER_QUERY_CONFIG_KEYS, W as isRetryableQueryError, _ as loadDictionary, a as useRouteTransition, b as setActiveLocale, c as ComponentsContext, d as loadViewModule, f as subscribeViewModules, g as recoverFromChunkLoadError, h as isChunkLoadError, i as RouteTransitionProvider, j as domainUrl, k as ServerDataProvider, l as ComponentsProvider, m as configureChunkLoadRecovery, n as useTheme, o as ClientRouterContext, p as CHUNK_RELOAD_MARKER, q as QueryError, r as m, s as ClientRouterProvider, t as ThemeProvider, u as initialViewModulesReady, v as loadDictionaryForRender, w as useSearchParams, x as readRoutePayload, y as registerDictionary, z as QueryManagerContext } from "../chunks/ThemeProvider-z_MW40tl.js";
1
+ import { A as useLocation, B as QueryManagerProvider, C as useRoute, D as I18nProvider, E as I18nContext, G as retryDelayFor, H as pickDefined, I as toVariantKey, J as Subject, K as shouldRetryQuery, L as applyParams$1, M as isAbsoluteUrl, O as ServerDataContext, P as Action, R as QueryConfigContext, S as routeDataUrl, T as useNavigate, U as DEFAULT_STALE_TIME, V as USER_QUERY_CONFIG_KEYS, W as isRetryableQueryError, _ as loadDictionary, a as useRouteTransition, b as setActiveLocale, c as ComponentsContext, d as loadViewModule, f as subscribeViewModules, g as recoverFromChunkLoadError, h as isChunkLoadError, i as RouteTransitionProvider, j as domainUrl, k as ServerDataProvider, l as ComponentsProvider, m as configureChunkLoadRecovery, n as useTheme, o as ClientRouterContext, p as CHUNK_RELOAD_MARKER, q as QueryError, r as m, s as ClientRouterProvider, t as ThemeProvider, u as initialViewModulesReady, v as loadDictionaryForRender, w as useSearchParams, x as readRoutePayload, y as registerDictionary, z as QueryManagerContext } from "../chunks/ThemeProvider-Cqfwr6dk.js";
2
2
  import { n as RouteStateContext, r as RouteStateProvider, t as useParams } from "../chunks/useParams-BN3XXfmG.js";
3
3
  import { Fragment, StrictMode, Suspense, createContext, createElement, isValidElement, memo, use, useCallback, useContext, useDeferredValue, useEffect, useMemo, useRef, useState, useSyncExternalStore, useTransition } from "react";
4
4
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
@@ -2294,6 +2294,116 @@ function useTranslator(component) {
2294
2294
  return parse;
2295
2295
  }
2296
2296
  //#endregion
2297
+ //#region i18n/formatter.ts
2298
+ /**
2299
+ * Whether `timeZone` is an IANA zone (or offset) this runtime's `Intl` accepts.
2300
+ * An unknown zone makes `Intl.DateTimeFormat` throw a `RangeError`, so a zone
2301
+ * that comes from a cookie or a user record is checked before it is trusted.
2302
+ */
2303
+ function isValidTimeZone(timeZone) {
2304
+ if (typeof timeZone !== "string" || timeZone.length === 0) return false;
2305
+ try {
2306
+ new Intl.DateTimeFormat("en-US", { timeZone });
2307
+ return true;
2308
+ } catch {
2309
+ return false;
2310
+ }
2311
+ }
2312
+ var cache = /* @__PURE__ */ new Map();
2313
+ var CACHE_LIMIT = 500;
2314
+ function cached(key, create) {
2315
+ let value = cache.get(key);
2316
+ if (value === void 0) {
2317
+ if (cache.size >= CACHE_LIMIT) cache.delete(cache.keys().next().value);
2318
+ value = create();
2319
+ cache.set(key, value);
2320
+ }
2321
+ return value;
2322
+ }
2323
+ function toDate(value) {
2324
+ return value instanceof Date ? value : new Date(value);
2325
+ }
2326
+ function hasDateTimeFields(options) {
2327
+ return options.dateStyle !== void 0 || options.timeStyle !== void 0 || options.weekday !== void 0 || options.era !== void 0 || options.year !== void 0 || options.month !== void 0 || options.day !== void 0 || options.dayPeriod !== void 0 || options.hour !== void 0 || options.minute !== void 0 || options.second !== void 0 || options.fractionalSecondDigits !== void 0 || options.timeZoneName !== void 0;
2328
+ }
2329
+ function createFormatter(init) {
2330
+ const { locale, timeZone } = init;
2331
+ const dateTimeFormat = (options = {}) => {
2332
+ const resolved = {
2333
+ ...options,
2334
+ timeZone: options.timeZone ?? timeZone
2335
+ };
2336
+ return cached(`dt|${locale}|${JSON.stringify(resolved)}`, () => {
2337
+ return new Intl.DateTimeFormat(locale, resolved);
2338
+ });
2339
+ };
2340
+ const withDefaults = (options, defaults) => {
2341
+ if (options && hasDateTimeFields(options)) return options;
2342
+ return {
2343
+ ...defaults,
2344
+ ...options
2345
+ };
2346
+ };
2347
+ return {
2348
+ locale,
2349
+ timeZone,
2350
+ date(value, options) {
2351
+ return dateTimeFormat(withDefaults(options, { dateStyle: "medium" })).format(toDate(value));
2352
+ },
2353
+ time(value, options) {
2354
+ return dateTimeFormat(withDefaults(options, { timeStyle: "short" })).format(toDate(value));
2355
+ },
2356
+ dateTime(value, options) {
2357
+ return dateTimeFormat(withDefaults(options, {
2358
+ dateStyle: "medium",
2359
+ timeStyle: "short"
2360
+ })).format(toDate(value));
2361
+ },
2362
+ number(value, options = {}) {
2363
+ return cached(`n|${locale}|${JSON.stringify(options)}`, () => new Intl.NumberFormat(locale, options)).format(value);
2364
+ },
2365
+ relative(value, unit, options = {}) {
2366
+ return cached(`r|${locale}|${JSON.stringify(options)}`, () => new Intl.RelativeTimeFormat(locale, options)).format(value, unit);
2367
+ },
2368
+ list(values, options = {}) {
2369
+ return cached(`l|${locale}|${JSON.stringify(options)}`, () => new Intl.ListFormat(locale, options)).format(values);
2370
+ },
2371
+ plural(count, options = {}) {
2372
+ return cached(`p|${locale}|${JSON.stringify(options)}`, () => new Intl.PluralRules(locale, options)).select(count);
2373
+ },
2374
+ dateTimeFormat
2375
+ };
2376
+ }
2377
+ //#endregion
2378
+ //#region client/useFormatter.ts
2379
+ /**
2380
+ * Format dates, numbers, relative times and lists in the active locale and the
2381
+ * app's time zone.
2382
+ *
2383
+ * ```tsx
2384
+ * const format = useFormatter();
2385
+ * format.date(order.createdAt, { dateStyle: "long" });
2386
+ * format.number(1199.88, { style: "currency", currency: "USD" });
2387
+ * format.date(order.createdAt, { timeZone: "Europe/Istanbul" }); // per call
2388
+ * ```
2389
+ *
2390
+ * The locale and zone both come from the page payload, so the server render
2391
+ * and the hydrating browser format with the same ones. Prefer this to
2392
+ * `toLocaleDateString()`, which uses the runtime's locale and zone and so
2393
+ * differs between the two.
2394
+ *
2395
+ * Pass `options` to pin a zone for one subtree (`useFormatter({ timeZone })`).
2396
+ */
2397
+ function useFormatter(options = {}) {
2398
+ const { i18n } = useRouteData();
2399
+ const locale = options.locale ?? i18n?.currentLocale ?? i18n?.defaultLocale ?? "en-US";
2400
+ const timeZone = options.timeZone ?? (isValidTimeZone(i18n?.timeZone) ? i18n.timeZone : "UTC");
2401
+ return useMemo(() => createFormatter({
2402
+ locale,
2403
+ timeZone
2404
+ }), [locale, timeZone]);
2405
+ }
2406
+ //#endregion
2297
2407
  //#region client/useDictionary.ts
2298
2408
  /**
2299
2409
  * Read a dictionary declared with `defineDictionary`, next to the component
@@ -2320,6 +2430,7 @@ function useDictionary(dictionary) {
2320
2430
  const sink = useContext(DictionarySinkContext);
2321
2431
  const locale = i18n?.currentLocale ?? dictionary.locales[0];
2322
2432
  setActiveLocale(locale);
2433
+ const format = useFormatter({ locale });
2323
2434
  const thenable = dictionary.loadForRender(locale);
2324
2435
  const strings = thenable.inHand ?? use(thenable);
2325
2436
  sink?.use(dictionary.id, locale, strings);
@@ -2335,6 +2446,11 @@ function useDictionary(dictionary) {
2335
2446
  parse.jsx = (key, ...args) => {
2336
2447
  return parse(key, ...args);
2337
2448
  };
2449
+ /**
2450
+ * Formatting in this dictionary's locale and the app's time zone. See
2451
+ * `useFormatter`.
2452
+ */
2453
+ parse.format = format;
2338
2454
  return parse;
2339
2455
  }
2340
2456
  //#endregion
@@ -2527,6 +2643,6 @@ function useAppIdMissmatch() {
2527
2643
  return current !== next;
2528
2644
  }
2529
2645
  //#endregion
2530
- export { CHUNK_RELOAD_MARKER, Form, FormError, FormFieldContainer, Head, Image, Link, OpenGraphImage, QueryError, QueryManagerProvider, Redirect, ValidationErrors, create, createRoot, defineDictionary, init, isAuthenticationError, isChunkLoadError, isCsrfError, isFormError, isHttpError, isNetworkError, isNotFoundError, isPermissionError, isRateLimitError, isRetryableQueryError, isServerError, isValidationError, mutationErrorKind, recoverFromChunkLoadError, useAppIdMissmatch, useBreadcrumbs, useDelete, useDictionary, useDomain, useEmailCode, useFeature, useFeatures, useForgotPassword, useFormData, useFormStatus, useInfiniteQuery, useIntendedUrl, useIsNavigationPending, useLocale, useLocation, useMutate, useMutation, useMutationStatus, useNavigate, useNavigationProgress, useParams, usePatch, usePost, usePrefetch, usePut, useQuery, useResetPassword, useRoute, useRouteTransition, useSearchParams, useSignIn, useSignOut, useSignUp, useTheme, useTranslator, useUpload, useUser };
2646
+ export { CHUNK_RELOAD_MARKER, Form, FormError, FormFieldContainer, Head, Image, Link, OpenGraphImage, QueryError, QueryManagerProvider, Redirect, ValidationErrors, create, createRoot, defineDictionary, init, isAuthenticationError, isChunkLoadError, isCsrfError, isFormError, isHttpError, isNetworkError, isNotFoundError, isPermissionError, isRateLimitError, isRetryableQueryError, isServerError, isValidationError, mutationErrorKind, recoverFromChunkLoadError, useAppIdMissmatch, useBreadcrumbs, useDelete, useDictionary, useDomain, useEmailCode, useFeature, useFeatures, useForgotPassword, useFormData, useFormStatus, useFormatter, useInfiniteQuery, useIntendedUrl, useIsNavigationPending, useLocale, useLocation, useMutate, useMutation, useMutationStatus, useNavigate, useNavigationProgress, useParams, usePatch, usePost, usePrefetch, usePut, useQuery, useResetPassword, useRoute, useRouteTransition, useSearchParams, useSignIn, useSignOut, useSignUp, useTheme, useTranslator, useUpload, useUser };
2531
2647
 
2532
2648
  //# sourceMappingURL=index.js.map