@civic/auth 0.0.1-beta.28 → 0.0.1-beta.29

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 (261) hide show
  1. package/.turbo/turbo-build.log +3 -3
  2. package/.turbo/turbo-lint.log +14 -0
  3. package/.turbo/turbo-test.log +1678 -0
  4. package/civic-auth-0.0.1-beta.15.tgz +0 -0
  5. package/civic-auth-0.0.1-beta.17.tgz +0 -0
  6. package/dist/AuthProvider-BYZ8w92b.d.mts +15 -0
  7. package/dist/AuthProvider-BgOwv9h8.d.ts +15 -0
  8. package/dist/AuthProvider-Bj_Prt1x.d.ts +21 -0
  9. package/dist/AuthProvider-DUAoX4G9.d.mts +21 -0
  10. package/dist/UserProvider-BA2uflVB.d.ts +16 -0
  11. package/dist/UserProvider-Bl3j1PUO.d.mts +16 -0
  12. package/dist/UserProvider-CMLaYOUD.d.ts +16 -0
  13. package/dist/UserProvider-Cbm8MZkJ.d.mts +16 -0
  14. package/dist/chunk-4PLCDPEN.mjs +599 -0
  15. package/dist/chunk-4PLCDPEN.mjs.map +1 -0
  16. package/dist/chunk-5UQQYXCX.js +1 -0
  17. package/dist/chunk-5UQQYXCX.js.map +1 -0
  18. package/dist/chunk-63YGK3A7.mjs +223 -0
  19. package/dist/chunk-63YGK3A7.mjs.map +1 -0
  20. package/dist/chunk-6RFRDWIP.js +223 -0
  21. package/dist/chunk-6RFRDWIP.js.map +1 -0
  22. package/dist/chunk-7K3QN2AT.js +599 -0
  23. package/dist/chunk-7K3QN2AT.js.map +1 -0
  24. package/dist/chunk-AM2Y662I.js +601 -0
  25. package/dist/chunk-AM2Y662I.js.map +1 -0
  26. package/dist/chunk-AP4627CS.mjs +223 -0
  27. package/dist/chunk-AP4627CS.mjs.map +1 -0
  28. package/dist/chunk-CRTRMMJ7.js +59 -0
  29. package/dist/chunk-CRTRMMJ7.js.map +1 -0
  30. package/dist/chunk-CTVJJBBA.js +118 -0
  31. package/dist/chunk-CTVJJBBA.js.map +1 -0
  32. package/dist/chunk-EKLYHP2D.mjs +711 -0
  33. package/dist/chunk-EKLYHP2D.mjs.map +1 -0
  34. package/dist/chunk-FHRZSX3C.js +710 -0
  35. package/dist/chunk-FHRZSX3C.js.map +1 -0
  36. package/dist/chunk-GB3H3I47.js +711 -0
  37. package/dist/chunk-GB3H3I47.js.map +1 -0
  38. package/dist/chunk-JDZPCA3P.js +173 -0
  39. package/dist/chunk-JDZPCA3P.js.map +1 -0
  40. package/dist/chunk-JEOPLLWO.js +223 -0
  41. package/dist/chunk-JEOPLLWO.js.map +1 -0
  42. package/dist/chunk-MK7557NR.mjs +118 -0
  43. package/dist/chunk-MK7557NR.mjs.map +1 -0
  44. package/dist/chunk-NLRREFOX.mjs +710 -0
  45. package/dist/chunk-NLRREFOX.mjs.map +1 -0
  46. package/dist/chunk-O3WGNLRO.mjs +173 -0
  47. package/dist/chunk-O3WGNLRO.mjs.map +1 -0
  48. package/dist/chunk-OXXUQ36U.mjs +283 -0
  49. package/dist/chunk-OXXUQ36U.mjs.map +1 -0
  50. package/dist/chunk-PMJAV4JJ.mjs +1 -0
  51. package/dist/chunk-PMJAV4JJ.mjs.map +1 -0
  52. package/dist/chunk-Q7DSPTUG.mjs +601 -0
  53. package/dist/chunk-Q7DSPTUG.mjs.map +1 -0
  54. package/dist/chunk-RGHW4PYM.mjs +59 -0
  55. package/dist/chunk-RGHW4PYM.mjs.map +1 -0
  56. package/dist/chunk-TH6FI2XI.js +283 -0
  57. package/dist/chunk-TH6FI2XI.js.map +1 -0
  58. package/dist/cjs/src/browser/storage.d.ts +2 -2
  59. package/dist/cjs/src/browser/storage.d.ts.map +1 -1
  60. package/dist/cjs/src/browser/storage.js +3 -3
  61. package/dist/cjs/src/browser/storage.js.map +1 -1
  62. package/dist/cjs/src/nextjs/GetUser.d.ts +1 -1
  63. package/dist/cjs/src/nextjs/GetUser.d.ts.map +1 -1
  64. package/dist/cjs/src/nextjs/GetUser.js +3 -3
  65. package/dist/cjs/src/nextjs/GetUser.js.map +1 -1
  66. package/dist/cjs/src/nextjs/config.d.ts.map +1 -1
  67. package/dist/cjs/src/nextjs/config.js +0 -2
  68. package/dist/cjs/src/nextjs/config.js.map +1 -1
  69. package/dist/cjs/src/nextjs/cookies.d.ts +4 -4
  70. package/dist/cjs/src/nextjs/cookies.d.ts.map +1 -1
  71. package/dist/cjs/src/nextjs/cookies.js +14 -11
  72. package/dist/cjs/src/nextjs/cookies.js.map +1 -1
  73. package/dist/cjs/src/nextjs/routeHandler.d.ts.map +1 -1
  74. package/dist/cjs/src/nextjs/routeHandler.js +1 -5
  75. package/dist/cjs/src/nextjs/routeHandler.js.map +1 -1
  76. package/dist/cjs/src/reactjs/hooks/index.d.ts +0 -1
  77. package/dist/cjs/src/reactjs/hooks/index.d.ts.map +1 -1
  78. package/dist/cjs/src/reactjs/hooks/index.js +1 -3
  79. package/dist/cjs/src/reactjs/hooks/index.js.map +1 -1
  80. package/dist/cjs/src/server/ServerAuthenticationResolver.d.ts.map +1 -1
  81. package/dist/cjs/src/server/ServerAuthenticationResolver.js +2 -7
  82. package/dist/cjs/src/server/ServerAuthenticationResolver.js.map +1 -1
  83. package/dist/cjs/src/server/login.d.ts +1 -1
  84. package/dist/cjs/src/server/login.d.ts.map +1 -1
  85. package/dist/cjs/src/server/login.js +2 -2
  86. package/dist/cjs/src/server/login.js.map +1 -1
  87. package/dist/cjs/src/services/AuthenticationService.d.ts.map +1 -1
  88. package/dist/cjs/src/services/AuthenticationService.js +6 -16
  89. package/dist/cjs/src/services/AuthenticationService.js.map +1 -1
  90. package/dist/cjs/src/shared/components/CivicAuthIframeContainer.d.ts.map +1 -1
  91. package/dist/cjs/src/shared/components/CivicAuthIframeContainer.js +0 -2
  92. package/dist/cjs/src/shared/components/CivicAuthIframeContainer.js.map +1 -1
  93. package/dist/cjs/src/shared/lib/GenericAuthenticationRefresher.d.ts.map +1 -1
  94. package/dist/cjs/src/shared/lib/GenericAuthenticationRefresher.js +2 -6
  95. package/dist/cjs/src/shared/lib/GenericAuthenticationRefresher.js.map +1 -1
  96. package/dist/cjs/src/shared/lib/UserSession.d.ts +4 -4
  97. package/dist/cjs/src/shared/lib/UserSession.d.ts.map +1 -1
  98. package/dist/cjs/src/shared/lib/UserSession.js +4 -4
  99. package/dist/cjs/src/shared/lib/UserSession.js.map +1 -1
  100. package/dist/cjs/src/shared/lib/session.js +1 -1
  101. package/dist/cjs/src/shared/lib/session.js.map +1 -1
  102. package/dist/cjs/src/shared/lib/storage.d.ts +2 -2
  103. package/dist/cjs/src/shared/lib/storage.d.ts.map +1 -1
  104. package/dist/cjs/src/shared/lib/storage.js.map +1 -1
  105. package/dist/cjs/src/shared/lib/util.d.ts +4 -4
  106. package/dist/cjs/src/shared/lib/util.d.ts.map +1 -1
  107. package/dist/cjs/src/shared/lib/util.js +16 -15
  108. package/dist/cjs/src/shared/lib/util.js.map +1 -1
  109. package/dist/cjs/src/types.d.ts +2 -2
  110. package/dist/cjs/src/types.d.ts.map +1 -1
  111. package/dist/cjs/src/types.js.map +1 -1
  112. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  113. package/dist/esm/src/browser/storage.d.ts +2 -2
  114. package/dist/esm/src/browser/storage.d.ts.map +1 -1
  115. package/dist/esm/src/browser/storage.js +3 -3
  116. package/dist/esm/src/browser/storage.js.map +1 -1
  117. package/dist/esm/src/nextjs/GetUser.d.ts +1 -1
  118. package/dist/esm/src/nextjs/GetUser.d.ts.map +1 -1
  119. package/dist/esm/src/nextjs/GetUser.js +3 -3
  120. package/dist/esm/src/nextjs/GetUser.js.map +1 -1
  121. package/dist/esm/src/nextjs/config.d.ts.map +1 -1
  122. package/dist/esm/src/nextjs/config.js +0 -2
  123. package/dist/esm/src/nextjs/config.js.map +1 -1
  124. package/dist/esm/src/nextjs/cookies.d.ts +4 -4
  125. package/dist/esm/src/nextjs/cookies.d.ts.map +1 -1
  126. package/dist/esm/src/nextjs/cookies.js +14 -11
  127. package/dist/esm/src/nextjs/cookies.js.map +1 -1
  128. package/dist/esm/src/nextjs/routeHandler.d.ts.map +1 -1
  129. package/dist/esm/src/nextjs/routeHandler.js +1 -5
  130. package/dist/esm/src/nextjs/routeHandler.js.map +1 -1
  131. package/dist/esm/src/reactjs/hooks/index.d.ts +0 -1
  132. package/dist/esm/src/reactjs/hooks/index.d.ts.map +1 -1
  133. package/dist/esm/src/reactjs/hooks/index.js +0 -1
  134. package/dist/esm/src/reactjs/hooks/index.js.map +1 -1
  135. package/dist/esm/src/server/ServerAuthenticationResolver.d.ts.map +1 -1
  136. package/dist/esm/src/server/ServerAuthenticationResolver.js +2 -7
  137. package/dist/esm/src/server/ServerAuthenticationResolver.js.map +1 -1
  138. package/dist/esm/src/server/login.d.ts +1 -1
  139. package/dist/esm/src/server/login.d.ts.map +1 -1
  140. package/dist/esm/src/server/login.js +2 -2
  141. package/dist/esm/src/server/login.js.map +1 -1
  142. package/dist/esm/src/services/AuthenticationService.d.ts.map +1 -1
  143. package/dist/esm/src/services/AuthenticationService.js +6 -16
  144. package/dist/esm/src/services/AuthenticationService.js.map +1 -1
  145. package/dist/esm/src/shared/components/CivicAuthIframeContainer.d.ts.map +1 -1
  146. package/dist/esm/src/shared/components/CivicAuthIframeContainer.js +0 -2
  147. package/dist/esm/src/shared/components/CivicAuthIframeContainer.js.map +1 -1
  148. package/dist/esm/src/shared/lib/GenericAuthenticationRefresher.d.ts.map +1 -1
  149. package/dist/esm/src/shared/lib/GenericAuthenticationRefresher.js +2 -6
  150. package/dist/esm/src/shared/lib/GenericAuthenticationRefresher.js.map +1 -1
  151. package/dist/esm/src/shared/lib/UserSession.d.ts +4 -4
  152. package/dist/esm/src/shared/lib/UserSession.d.ts.map +1 -1
  153. package/dist/esm/src/shared/lib/UserSession.js +4 -4
  154. package/dist/esm/src/shared/lib/UserSession.js.map +1 -1
  155. package/dist/esm/src/shared/lib/session.js +1 -1
  156. package/dist/esm/src/shared/lib/session.js.map +1 -1
  157. package/dist/esm/src/shared/lib/storage.d.ts +2 -2
  158. package/dist/esm/src/shared/lib/storage.d.ts.map +1 -1
  159. package/dist/esm/src/shared/lib/storage.js.map +1 -1
  160. package/dist/esm/src/shared/lib/util.d.ts +4 -4
  161. package/dist/esm/src/shared/lib/util.d.ts.map +1 -1
  162. package/dist/esm/src/shared/lib/util.js +16 -15
  163. package/dist/esm/src/shared/lib/util.js.map +1 -1
  164. package/dist/esm/src/types.d.ts +2 -2
  165. package/dist/esm/src/types.d.ts.map +1 -1
  166. package/dist/esm/src/types.js.map +1 -1
  167. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  168. package/dist/index.css +340 -0
  169. package/dist/index.css.map +1 -0
  170. package/dist/index.d.mts +5 -0
  171. package/dist/index.d.ts +5 -0
  172. package/dist/index.js +3 -0
  173. package/dist/index.js.map +1 -0
  174. package/dist/index.mjs +3 -0
  175. package/dist/index.mjs.map +1 -0
  176. package/dist/nextjs/client.css +340 -0
  177. package/dist/nextjs/client.css.map +1 -0
  178. package/dist/nextjs/client.d.mts +10 -0
  179. package/dist/nextjs/client.d.ts +10 -0
  180. package/dist/nextjs/client.js +185 -0
  181. package/dist/nextjs/client.js.map +1 -0
  182. package/dist/nextjs/client.mjs +185 -0
  183. package/dist/nextjs/client.mjs.map +1 -0
  184. package/dist/nextjs.d.mts +267 -0
  185. package/dist/nextjs.d.ts +267 -0
  186. package/dist/nextjs.js +315 -0
  187. package/dist/nextjs.js.map +1 -0
  188. package/dist/nextjs.mjs +315 -0
  189. package/dist/nextjs.mjs.map +1 -0
  190. package/dist/react.d.mts +65 -0
  191. package/dist/react.d.ts +65 -0
  192. package/dist/react.js +226 -0
  193. package/dist/react.js.map +1 -0
  194. package/dist/react.mjs +226 -0
  195. package/dist/react.mjs.map +1 -0
  196. package/dist/server.d.mts +35 -0
  197. package/dist/server.d.ts +35 -0
  198. package/dist/server.js +20 -0
  199. package/dist/server.js.map +1 -0
  200. package/dist/server.mjs +20 -0
  201. package/dist/server.mjs.map +1 -0
  202. package/dist/src/shared/components/LoadingIcon.d.ts.map +1 -1
  203. package/dist/src/shared/components/LoadingIcon.js +0 -6
  204. package/dist/src/shared/components/LoadingIcon.js.map +1 -1
  205. package/dist/storage-ANmRwpZ3.d.ts +25 -0
  206. package/dist/storage-B2eAQNdv.d.ts +25 -0
  207. package/dist/storage-BJPUpxhm.d.mts +25 -0
  208. package/dist/storage-BJyqsZwC.d.mts +25 -0
  209. package/dist/tsconfig.tsbuildinfo +1 -1
  210. package/dist/types-Bqm9OCZN.d.mts +22 -0
  211. package/dist/types-Bqm9OCZN.d.ts +22 -0
  212. package/dist/types-BxAubCqO.d.mts +58 -0
  213. package/dist/types-BxAubCqO.d.ts +58 -0
  214. package/dist/types-DOfl9w7j.d.mts +23 -0
  215. package/dist/types-DOfl9w7j.d.ts +23 -0
  216. package/dist/types-HdCjGldB.d.mts +58 -0
  217. package/dist/types-HdCjGldB.d.ts +58 -0
  218. package/package.json +1 -1
  219. package/src/browser/storage.ts +3 -3
  220. package/src/nextjs/GetUser.ts +3 -3
  221. package/src/nextjs/config.ts +0 -2
  222. package/src/nextjs/cookies.ts +14 -18
  223. package/src/nextjs/routeHandler.ts +1 -5
  224. package/src/reactjs/hooks/index.ts +0 -1
  225. package/src/server/ServerAuthenticationResolver.ts +2 -7
  226. package/src/server/login.ts +2 -2
  227. package/src/services/AuthenticationService.ts +6 -16
  228. package/src/shared/components/CivicAuthIframeContainer.tsx +0 -4
  229. package/src/shared/lib/GenericAuthenticationRefresher.ts +3 -8
  230. package/src/shared/lib/UserSession.ts +6 -6
  231. package/src/shared/lib/session.ts +1 -1
  232. package/src/shared/lib/storage.ts +2 -2
  233. package/src/shared/lib/util.ts +21 -18
  234. package/src/types.ts +2 -2
  235. package/test/unit/nextjs/getUser.test.ts +8 -8
  236. package/test/unit/publicApi/__snapshots__/apiSnapshot.test.ts.snap +0 -7
  237. package/test/unit/server/login.test.ts +20 -18
  238. package/test/unit/server/session.test.ts +4 -4
  239. package/test/unit/services/AuthenticationService.test.ts +3 -3
  240. package/test/unit/services/ServerAuthenticationResolver.test.ts +11 -6
  241. package/test/unit/shared/GenericAuthenticationRefresher.test.ts +4 -4
  242. package/test/unit/shared/UserSession.test.ts +6 -6
  243. package/test/unit/shared/storage.test.ts +6 -6
  244. package/dist/cjs/src/nextjs/client/index.d.ts +0 -2
  245. package/dist/cjs/src/nextjs/client/index.d.ts.map +0 -1
  246. package/dist/cjs/src/nextjs/client/index.js +0 -6
  247. package/dist/cjs/src/nextjs/client/index.js.map +0 -1
  248. package/dist/cjs/src/styles.css +0 -387
  249. package/dist/esm/src/nextjs/client/index.d.ts +0 -2
  250. package/dist/esm/src/nextjs/client/index.d.ts.map +0 -1
  251. package/dist/esm/src/nextjs/client/index.js +0 -2
  252. package/dist/esm/src/nextjs/client/index.js.map +0 -1
  253. package/dist/esm/src/styles.css +0 -387
  254. package/dist/src/nextjs/client/index.d.ts +0 -2
  255. package/dist/src/nextjs/client/index.d.ts.map +0 -1
  256. package/dist/src/nextjs/client/index.js +0 -2
  257. package/dist/src/nextjs/client/index.js.map +0 -1
  258. package/dist/test/unit/nextjs/routeHandler.test.d.ts +0 -2
  259. package/dist/test/unit/nextjs/routeHandler.test.d.ts.map +0 -1
  260. package/dist/test/unit/nextjs/routeHandler.test.js +0 -271
  261. package/dist/test/unit/nextjs/routeHandler.test.js.map +0 -1
package/dist/react.js ADDED
@@ -0,0 +1,226 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+ var _chunkGB3H3I47js = require('./chunk-GB3H3I47.js');
12
+
13
+
14
+
15
+
16
+ var _chunkAM2Y662Ijs = require('./chunk-AM2Y662I.js');
17
+
18
+
19
+
20
+
21
+
22
+ var _chunkCRTRMMJ7js = require('./chunk-CRTRMMJ7.js');
23
+
24
+ // src/react/hooks/useUser.tsx
25
+ var _react = require('react');
26
+
27
+ // src/shared/CivicAuthProvider.tsx
28
+ var _reactquery = require('@tanstack/react-query');
29
+ require('@civic/auth/styles.css');
30
+ var _jsxruntime = require('react/jsx-runtime');
31
+ var queryClient = new (0, _reactquery.QueryClient)();
32
+ var CivicAuthProvider = (_a) => {
33
+ var _b = _a, { children } = _b, props = _chunkCRTRMMJ7js.__objRest.call(void 0, _b, ["children"]);
34
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _reactquery.QueryClientProvider, { client: queryClient, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
35
+ _chunkGB3H3I47js.AuthProvider,
36
+ _chunkCRTRMMJ7js.__spreadProps.call(void 0, _chunkCRTRMMJ7js.__spreadValues.call(void 0, {}, props), {
37
+ pkceConsumer: new (0, _chunkAM2Y662Ijs.BrowserPublicClientPKCEProducer)(),
38
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkGB3H3I47js.UserProvider, { storage: new (0, _chunkAM2Y662Ijs.LocalStorageAdapter)(), children })
39
+ })
40
+ ) });
41
+ };
42
+
43
+ // src/react/hooks/useUser.tsx
44
+ var useUser = () => {
45
+ const context = _react.useContext.call(void 0, _chunkGB3H3I47js.UserContext);
46
+ if (!context) {
47
+ throw new Error("useUser must be used within a UserProvider");
48
+ }
49
+ return context;
50
+ };
51
+
52
+ // src/react/components/UserButton.tsx
53
+
54
+
55
+ var ChevronDown = () => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
56
+ "svg",
57
+ {
58
+ xmlns: "http://www.w3.org/2000/svg",
59
+ width: "24",
60
+ height: "24",
61
+ viewBox: "0 0 24 24",
62
+ fill: "none",
63
+ stroke: "currentColor",
64
+ strokeWidth: "2",
65
+ strokeLinecap: "round",
66
+ strokeLinejoin: "round",
67
+ className: "lucide lucide-chevron-down",
68
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "path", { d: "m6 9 6 6 6-6" })
69
+ }
70
+ );
71
+ var ChevronUp = () => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
72
+ "svg",
73
+ {
74
+ xmlns: "http://www.w3.org/2000/svg",
75
+ width: "24",
76
+ height: "24",
77
+ viewBox: "0 0 24 24",
78
+ fill: "none",
79
+ stroke: "currentColor",
80
+ strokeWidth: "2",
81
+ strokeLinecap: "round",
82
+ strokeLinejoin: "round",
83
+ className: "lucide lucide-chevron-up",
84
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "path", { d: "m18 15-6-6-6 6" })
85
+ }
86
+ );
87
+ var UserButton = ({
88
+ displayMode,
89
+ className
90
+ }) => {
91
+ const [isOpen, setIsOpen] = _react.useState.call(void 0, false);
92
+ const { user, signIn, signOut } = useUser();
93
+ const handleClickOutside = _react.useCallback.call(void 0, (event) => {
94
+ const target = event.target;
95
+ if (!target.closest("#civic-dropdown-container")) {
96
+ setIsOpen(false);
97
+ }
98
+ }, []);
99
+ const handleSignOut = _react.useCallback.call(void 0, () => _chunkCRTRMMJ7js.__async.call(void 0, void 0, null, function* () {
100
+ signOut();
101
+ setIsOpen(false);
102
+ }), [signOut]);
103
+ const handleSignIn = _react.useCallback.call(void 0, () => _chunkCRTRMMJ7js.__async.call(void 0, void 0, null, function* () {
104
+ yield signIn(displayMode);
105
+ setIsOpen(false);
106
+ }), [signIn, displayMode]);
107
+ const handleEscape = _react.useCallback.call(void 0, (event) => {
108
+ if (event.key === "Escape") {
109
+ setIsOpen(false);
110
+ }
111
+ }, []);
112
+ _react.useEffect.call(void 0, () => {
113
+ if (isOpen) {
114
+ window.addEventListener("click", handleClickOutside);
115
+ window.addEventListener("keydown", handleEscape);
116
+ }
117
+ return () => {
118
+ window.removeEventListener("click", handleClickOutside);
119
+ window.removeEventListener("keydown", handleEscape);
120
+ };
121
+ }, [handleClickOutside, handleEscape, isOpen]);
122
+ if (user) {
123
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "cac-relative", id: "civic-dropdown-container", children: [
124
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
125
+ "button",
126
+ {
127
+ className: _chunkAM2Y662Ijs.cn.call(void 0,
128
+ "cac-flex cac-w-full cac-items-center cac-justify-between cac-gap-2 cac-rounded-full cac-border cac-border-neutral-500 cac-px-3 cac-py-2 cac-text-neutral-500 cac-transition-colors hover:cac-bg-neutral-200 hover:cac-bg-opacity-50",
129
+ className
130
+ ),
131
+ onClick: () => setIsOpen((isOpen2) => !isOpen2),
132
+ children: [
133
+ (user == null ? void 0 : user.picture) ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "cac-relative cac-flex cac-h-10 cac-w-10 cac-shrink-0 cac-gap-2 cac-overflow-hidden cac-rounded-full", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
134
+ "img",
135
+ {
136
+ className: "cac-h-full cac-w-full cac-object-cover",
137
+ src: user.picture,
138
+ alt: (user == null ? void 0 : user.name) || (user == null ? void 0 : user.email)
139
+ }
140
+ ) }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", {}),
141
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { children: (user == null ? void 0 : user.name) || (user == null ? void 0 : user.email) }),
142
+ isOpen ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ChevronUp, {}) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ChevronDown, {})
143
+ ]
144
+ }
145
+ ),
146
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
147
+ "div",
148
+ {
149
+ className: isOpen ? "cac-absolute cac-right-0 cac-mt-2 cac-w-full cac-rounded-lg cac-bg-white cac-py-2 cac-text-neutral-500 cac-shadow-xl" : "cac-hidden",
150
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "ul", { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "li", { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
151
+ "button",
152
+ {
153
+ className: "cac-block cac-w-full cac-px-4 cac-py-2 cac-transition-colors hover:cac-bg-neutral-200 hover:cac-bg-opacity-50",
154
+ onClick: handleSignOut,
155
+ children: "Logout"
156
+ }
157
+ ) }) })
158
+ }
159
+ )
160
+ ] });
161
+ }
162
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
163
+ "button",
164
+ {
165
+ "data-testid": "sign-in-button",
166
+ className: _chunkAM2Y662Ijs.cn.call(void 0,
167
+ "cac-rounded-full cac-border cac-border-neutral-500 cac-px-3 cac-py-2 cac-transition-colors hover:cac-bg-neutral-200 hover:cac-bg-opacity-50",
168
+ className
169
+ ),
170
+ onClick: handleSignIn,
171
+ children: "Sign in"
172
+ }
173
+ );
174
+ };
175
+
176
+ // src/react/components/SignInButton.tsx
177
+
178
+ var SignInButton = ({
179
+ displayMode,
180
+ className
181
+ }) => {
182
+ const { signIn } = useUser();
183
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
184
+ "button",
185
+ {
186
+ "data-testid": "sign-in-button",
187
+ className: _chunkAM2Y662Ijs.cn.call(void 0,
188
+ "cac-rounded-full cac-border cac-border-neutral-500 cac-px-3 cac-py-2 cac-transition-colors hover:cac-bg-neutral-200 hover:cac-bg-opacity-50",
189
+ className
190
+ ),
191
+ onClick: () => signIn(displayMode),
192
+ children: "Sign In"
193
+ }
194
+ );
195
+ };
196
+
197
+ // src/react/components/SignOutButton.tsx
198
+
199
+ var SignOutButton = ({ className }) => {
200
+ const { signOut } = useUser();
201
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
202
+ "button",
203
+ {
204
+ className: _chunkAM2Y662Ijs.cn.call(void 0,
205
+ "cac-rounded-full cac-border cac-border-neutral-500 cac-px-3 cac-py-2 cac-transition-colors hover:cac-bg-neutral-200 hover:cac-bg-opacity-50",
206
+ className
207
+ ),
208
+ onClick: () => signOut(),
209
+ children: "Sign Out"
210
+ }
211
+ );
212
+ };
213
+
214
+
215
+
216
+
217
+
218
+
219
+
220
+
221
+
222
+
223
+
224
+
225
+ exports.CivicAuthIframeContainer = _chunkGB3H3I47js.CivicAuthIframeContainer; exports.CivicAuthProvider = CivicAuthProvider; exports.SignInButton = SignInButton; exports.SignOutButton = SignOutButton; exports.UserButton = UserButton; exports.useAuth = _chunkGB3H3I47js.useAuth; exports.useConfig = _chunkGB3H3I47js.useConfig; exports.useIframe = _chunkGB3H3I47js.useIframe; exports.useSession = _chunkGB3H3I47js.useSession; exports.useToken = _chunkGB3H3I47js.useToken; exports.useUser = useUser;
226
+ //# sourceMappingURL=react.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/patrick/Code/civic-auth/packages/civic-auth-client/dist/react.js","../src/react/hooks/useUser.tsx","../src/shared/CivicAuthProvider.tsx","../src/react/components/UserButton.tsx","../src/react/components/SignInButton.tsx","../src/react/components/SignOutButton.tsx"],"names":["jsx","isOpen"],"mappings":"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","file":"/Users/patrick/Code/civic-auth/packages/civic-auth-client/dist/react.js","sourcesContent":[null,"\"use client\";\nimport { useContext } from \"react\";\nimport { UserContext, UserContextType } from \"@/react/providers\";\n\nconst useUser = <\n T extends Record<string, unknown> = Record<string, never>,\n>(): UserContextType<T> => {\n const context = useContext(UserContext);\n\n if (!context) {\n throw new Error(\"useUser must be used within a UserProvider\");\n }\n\n return context as UserContextType<T>;\n};\n\nexport { useUser };\n","\"use client\";\nimport { AuthProvider, AuthProviderProps } from \"./AuthProvider\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\n\n// adding the styles import here to be added to the bundle\nimport \"@civic/auth/styles.css\";\nimport { BrowserPublicClientPKCEProducer } from \"@/services/PKCE\";\nimport { UserProvider } from \"./UserProvider\";\nimport { LocalStorageAdapter } from \"@/browser/storage\";\n\nconst queryClient = new QueryClient();\n\ntype CivicAuthProviderProps = Omit<AuthProviderProps, \"pkceConsumer\">;\n\nconst CivicAuthProvider = ({ children, ...props }: CivicAuthProviderProps) => {\n return (\n <QueryClientProvider client={queryClient}>\n <AuthProvider\n {...props}\n pkceConsumer={new BrowserPublicClientPKCEProducer()}\n >\n <UserProvider storage={new LocalStorageAdapter()}>\n {children}\n </UserProvider>\n </AuthProvider>\n </QueryClientProvider>\n );\n};\n\nexport { CivicAuthProvider, type CivicAuthProviderProps };\n","\"use client\";\nimport { useUser } from \"@/react/hooks\";\nimport { DisplayMode } from \"@/types\";\nimport { cn } from \"@/utils\";\nimport { useCallback, useEffect, useState } from \"react\";\n\nconst ChevronDown = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-chevron-down\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n);\n\nconst ChevronUp = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-chevron-up\"\n >\n <path d=\"m18 15-6-6-6 6\" />\n </svg>\n);\n\nconst UserButton = ({\n displayMode,\n className,\n}: {\n displayMode?: DisplayMode;\n className?: string;\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const { user, signIn, signOut } = useUser();\n\n const handleClickOutside = useCallback((event: MouseEvent) => {\n const target = event.target as HTMLElement;\n\n if (!target.closest(\"#civic-dropdown-container\")) {\n setIsOpen(false);\n }\n }, []);\n\n const handleSignOut = useCallback(async () => {\n signOut();\n\n setIsOpen(false);\n }, [signOut]);\n\n const handleSignIn = useCallback(async () => {\n await signIn(displayMode);\n\n setIsOpen(false);\n }, [signIn, displayMode]);\n\n const handleEscape = useCallback((event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n setIsOpen(false);\n }\n }, []);\n\n useEffect(() => {\n if (isOpen) {\n window.addEventListener(\"click\", handleClickOutside);\n\n window.addEventListener(\"keydown\", handleEscape);\n }\n\n return () => {\n window.removeEventListener(\"click\", handleClickOutside);\n\n window.removeEventListener(\"keydown\", handleEscape);\n };\n }, [handleClickOutside, handleEscape, isOpen]);\n\n if (user) {\n return (\n <div className=\"cac-relative\" id=\"civic-dropdown-container\">\n <button\n className={cn(\n \"cac-flex cac-w-full cac-items-center cac-justify-between cac-gap-2 cac-rounded-full cac-border cac-border-neutral-500 cac-px-3 cac-py-2 cac-text-neutral-500 cac-transition-colors hover:cac-bg-neutral-200 hover:cac-bg-opacity-50\",\n className,\n )}\n onClick={() => setIsOpen((isOpen) => !isOpen)}\n >\n {user?.picture ? (\n <span className=\"cac-relative cac-flex cac-h-10 cac-w-10 cac-shrink-0 cac-gap-2 cac-overflow-hidden cac-rounded-full\">\n <img\n className=\"cac-h-full cac-w-full cac-object-cover\"\n src={user.picture}\n alt={user?.name || user?.email}\n />\n </span>\n ) : (\n <div />\n )}\n\n <span>{user?.name || user?.email}</span>\n\n {isOpen ? <ChevronUp /> : <ChevronDown />}\n </button>\n <div\n className={\n isOpen\n ? \"cac-absolute cac-right-0 cac-mt-2 cac-w-full cac-rounded-lg cac-bg-white cac-py-2 cac-text-neutral-500 cac-shadow-xl\"\n : \"cac-hidden\"\n }\n >\n <ul>\n <li>\n <button\n className=\"cac-block cac-w-full cac-px-4 cac-py-2 cac-transition-colors hover:cac-bg-neutral-200 hover:cac-bg-opacity-50\"\n onClick={handleSignOut}\n >\n Logout\n </button>\n </li>\n </ul>\n </div>\n </div>\n );\n }\n\n return (\n <button\n data-testid=\"sign-in-button\"\n className={cn(\n \"cac-rounded-full cac-border cac-border-neutral-500 cac-px-3 cac-py-2 cac-transition-colors hover:cac-bg-neutral-200 hover:cac-bg-opacity-50\",\n className,\n )}\n onClick={handleSignIn}\n >\n Sign in\n </button>\n );\n};\n\nexport { UserButton };\n","\"use client\";\nimport { cn } from \"@/utils\";\nimport { DisplayMode } from \"@/types\";\nimport { useUser } from \"@/react/hooks\";\n\nconst SignInButton = ({\n displayMode,\n className,\n}: {\n displayMode?: DisplayMode;\n className?: string;\n}) => {\n const { signIn } = useUser();\n\n return (\n <button\n data-testid=\"sign-in-button\"\n className={cn(\n \"cac-rounded-full cac-border cac-border-neutral-500 cac-px-3 cac-py-2 cac-transition-colors hover:cac-bg-neutral-200 hover:cac-bg-opacity-50\",\n className,\n )}\n onClick={() => signIn(displayMode)}\n >\n Sign In\n </button>\n );\n};\n\nexport { SignInButton };\n","\"use client\";\nimport { cn } from \"@/utils\";\nimport { useUser } from \"@/react/hooks\";\n\nconst SignOutButton = ({ className }: { className?: string }) => {\n const { signOut } = useUser();\n\n return (\n <button\n className={cn(\n \"cac-rounded-full cac-border cac-border-neutral-500 cac-px-3 cac-py-2 cac-transition-colors hover:cac-bg-neutral-200 hover:cac-bg-opacity-50\",\n className,\n )}\n onClick={() => signOut()}\n >\n Sign Out\n </button>\n );\n};\n\nexport { SignOutButton };\n"]}
package/dist/react.mjs ADDED
@@ -0,0 +1,226 @@
1
+ import {
2
+ AuthProvider,
3
+ CivicAuthIframeContainer,
4
+ UserContext,
5
+ UserProvider,
6
+ useAuth,
7
+ useConfig,
8
+ useIframe,
9
+ useSession,
10
+ useToken
11
+ } from "./chunk-EKLYHP2D.mjs";
12
+ import {
13
+ BrowserPublicClientPKCEProducer,
14
+ LocalStorageAdapter,
15
+ cn
16
+ } from "./chunk-Q7DSPTUG.mjs";
17
+ import {
18
+ __async,
19
+ __objRest,
20
+ __spreadProps,
21
+ __spreadValues
22
+ } from "./chunk-RGHW4PYM.mjs";
23
+
24
+ // src/react/hooks/useUser.tsx
25
+ import { useContext } from "react";
26
+
27
+ // src/shared/CivicAuthProvider.tsx
28
+ import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
29
+ import "@civic/auth/styles.css";
30
+ import { jsx } from "react/jsx-runtime";
31
+ var queryClient = new QueryClient();
32
+ var CivicAuthProvider = (_a) => {
33
+ var _b = _a, { children } = _b, props = __objRest(_b, ["children"]);
34
+ return /* @__PURE__ */ jsx(QueryClientProvider, { client: queryClient, children: /* @__PURE__ */ jsx(
35
+ AuthProvider,
36
+ __spreadProps(__spreadValues({}, props), {
37
+ pkceConsumer: new BrowserPublicClientPKCEProducer(),
38
+ children: /* @__PURE__ */ jsx(UserProvider, { storage: new LocalStorageAdapter(), children })
39
+ })
40
+ ) });
41
+ };
42
+
43
+ // src/react/hooks/useUser.tsx
44
+ var useUser = () => {
45
+ const context = useContext(UserContext);
46
+ if (!context) {
47
+ throw new Error("useUser must be used within a UserProvider");
48
+ }
49
+ return context;
50
+ };
51
+
52
+ // src/react/components/UserButton.tsx
53
+ import { useCallback, useEffect, useState } from "react";
54
+ import { jsx as jsx2, jsxs } from "react/jsx-runtime";
55
+ var ChevronDown = () => /* @__PURE__ */ jsx2(
56
+ "svg",
57
+ {
58
+ xmlns: "http://www.w3.org/2000/svg",
59
+ width: "24",
60
+ height: "24",
61
+ viewBox: "0 0 24 24",
62
+ fill: "none",
63
+ stroke: "currentColor",
64
+ strokeWidth: "2",
65
+ strokeLinecap: "round",
66
+ strokeLinejoin: "round",
67
+ className: "lucide lucide-chevron-down",
68
+ children: /* @__PURE__ */ jsx2("path", { d: "m6 9 6 6 6-6" })
69
+ }
70
+ );
71
+ var ChevronUp = () => /* @__PURE__ */ jsx2(
72
+ "svg",
73
+ {
74
+ xmlns: "http://www.w3.org/2000/svg",
75
+ width: "24",
76
+ height: "24",
77
+ viewBox: "0 0 24 24",
78
+ fill: "none",
79
+ stroke: "currentColor",
80
+ strokeWidth: "2",
81
+ strokeLinecap: "round",
82
+ strokeLinejoin: "round",
83
+ className: "lucide lucide-chevron-up",
84
+ children: /* @__PURE__ */ jsx2("path", { d: "m18 15-6-6-6 6" })
85
+ }
86
+ );
87
+ var UserButton = ({
88
+ displayMode,
89
+ className
90
+ }) => {
91
+ const [isOpen, setIsOpen] = useState(false);
92
+ const { user, signIn, signOut } = useUser();
93
+ const handleClickOutside = useCallback((event) => {
94
+ const target = event.target;
95
+ if (!target.closest("#civic-dropdown-container")) {
96
+ setIsOpen(false);
97
+ }
98
+ }, []);
99
+ const handleSignOut = useCallback(() => __async(void 0, null, function* () {
100
+ signOut();
101
+ setIsOpen(false);
102
+ }), [signOut]);
103
+ const handleSignIn = useCallback(() => __async(void 0, null, function* () {
104
+ yield signIn(displayMode);
105
+ setIsOpen(false);
106
+ }), [signIn, displayMode]);
107
+ const handleEscape = useCallback((event) => {
108
+ if (event.key === "Escape") {
109
+ setIsOpen(false);
110
+ }
111
+ }, []);
112
+ useEffect(() => {
113
+ if (isOpen) {
114
+ window.addEventListener("click", handleClickOutside);
115
+ window.addEventListener("keydown", handleEscape);
116
+ }
117
+ return () => {
118
+ window.removeEventListener("click", handleClickOutside);
119
+ window.removeEventListener("keydown", handleEscape);
120
+ };
121
+ }, [handleClickOutside, handleEscape, isOpen]);
122
+ if (user) {
123
+ return /* @__PURE__ */ jsxs("div", { className: "cac-relative", id: "civic-dropdown-container", children: [
124
+ /* @__PURE__ */ jsxs(
125
+ "button",
126
+ {
127
+ className: cn(
128
+ "cac-flex cac-w-full cac-items-center cac-justify-between cac-gap-2 cac-rounded-full cac-border cac-border-neutral-500 cac-px-3 cac-py-2 cac-text-neutral-500 cac-transition-colors hover:cac-bg-neutral-200 hover:cac-bg-opacity-50",
129
+ className
130
+ ),
131
+ onClick: () => setIsOpen((isOpen2) => !isOpen2),
132
+ children: [
133
+ (user == null ? void 0 : user.picture) ? /* @__PURE__ */ jsx2("span", { className: "cac-relative cac-flex cac-h-10 cac-w-10 cac-shrink-0 cac-gap-2 cac-overflow-hidden cac-rounded-full", children: /* @__PURE__ */ jsx2(
134
+ "img",
135
+ {
136
+ className: "cac-h-full cac-w-full cac-object-cover",
137
+ src: user.picture,
138
+ alt: (user == null ? void 0 : user.name) || (user == null ? void 0 : user.email)
139
+ }
140
+ ) }) : /* @__PURE__ */ jsx2("div", {}),
141
+ /* @__PURE__ */ jsx2("span", { children: (user == null ? void 0 : user.name) || (user == null ? void 0 : user.email) }),
142
+ isOpen ? /* @__PURE__ */ jsx2(ChevronUp, {}) : /* @__PURE__ */ jsx2(ChevronDown, {})
143
+ ]
144
+ }
145
+ ),
146
+ /* @__PURE__ */ jsx2(
147
+ "div",
148
+ {
149
+ className: isOpen ? "cac-absolute cac-right-0 cac-mt-2 cac-w-full cac-rounded-lg cac-bg-white cac-py-2 cac-text-neutral-500 cac-shadow-xl" : "cac-hidden",
150
+ children: /* @__PURE__ */ jsx2("ul", { children: /* @__PURE__ */ jsx2("li", { children: /* @__PURE__ */ jsx2(
151
+ "button",
152
+ {
153
+ className: "cac-block cac-w-full cac-px-4 cac-py-2 cac-transition-colors hover:cac-bg-neutral-200 hover:cac-bg-opacity-50",
154
+ onClick: handleSignOut,
155
+ children: "Logout"
156
+ }
157
+ ) }) })
158
+ }
159
+ )
160
+ ] });
161
+ }
162
+ return /* @__PURE__ */ jsx2(
163
+ "button",
164
+ {
165
+ "data-testid": "sign-in-button",
166
+ className: cn(
167
+ "cac-rounded-full cac-border cac-border-neutral-500 cac-px-3 cac-py-2 cac-transition-colors hover:cac-bg-neutral-200 hover:cac-bg-opacity-50",
168
+ className
169
+ ),
170
+ onClick: handleSignIn,
171
+ children: "Sign in"
172
+ }
173
+ );
174
+ };
175
+
176
+ // src/react/components/SignInButton.tsx
177
+ import { jsx as jsx3 } from "react/jsx-runtime";
178
+ var SignInButton = ({
179
+ displayMode,
180
+ className
181
+ }) => {
182
+ const { signIn } = useUser();
183
+ return /* @__PURE__ */ jsx3(
184
+ "button",
185
+ {
186
+ "data-testid": "sign-in-button",
187
+ className: cn(
188
+ "cac-rounded-full cac-border cac-border-neutral-500 cac-px-3 cac-py-2 cac-transition-colors hover:cac-bg-neutral-200 hover:cac-bg-opacity-50",
189
+ className
190
+ ),
191
+ onClick: () => signIn(displayMode),
192
+ children: "Sign In"
193
+ }
194
+ );
195
+ };
196
+
197
+ // src/react/components/SignOutButton.tsx
198
+ import { jsx as jsx4 } from "react/jsx-runtime";
199
+ var SignOutButton = ({ className }) => {
200
+ const { signOut } = useUser();
201
+ return /* @__PURE__ */ jsx4(
202
+ "button",
203
+ {
204
+ className: cn(
205
+ "cac-rounded-full cac-border cac-border-neutral-500 cac-px-3 cac-py-2 cac-transition-colors hover:cac-bg-neutral-200 hover:cac-bg-opacity-50",
206
+ className
207
+ ),
208
+ onClick: () => signOut(),
209
+ children: "Sign Out"
210
+ }
211
+ );
212
+ };
213
+ export {
214
+ CivicAuthIframeContainer,
215
+ CivicAuthProvider,
216
+ SignInButton,
217
+ SignOutButton,
218
+ UserButton,
219
+ useAuth,
220
+ useConfig,
221
+ useIframe,
222
+ useSession,
223
+ useToken,
224
+ useUser
225
+ };
226
+ //# sourceMappingURL=react.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/react/hooks/useUser.tsx","../src/shared/CivicAuthProvider.tsx","../src/react/components/UserButton.tsx","../src/react/components/SignInButton.tsx","../src/react/components/SignOutButton.tsx"],"sourcesContent":["\"use client\";\nimport { useContext } from \"react\";\nimport { UserContext, UserContextType } from \"@/react/providers\";\n\nconst useUser = <\n T extends Record<string, unknown> = Record<string, never>,\n>(): UserContextType<T> => {\n const context = useContext(UserContext);\n\n if (!context) {\n throw new Error(\"useUser must be used within a UserProvider\");\n }\n\n return context as UserContextType<T>;\n};\n\nexport { useUser };\n","\"use client\";\nimport { AuthProvider, AuthProviderProps } from \"./AuthProvider\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\n\n// adding the styles import here to be added to the bundle\nimport \"@civic/auth/styles.css\";\nimport { BrowserPublicClientPKCEProducer } from \"@/services/PKCE\";\nimport { UserProvider } from \"./UserProvider\";\nimport { LocalStorageAdapter } from \"@/browser/storage\";\n\nconst queryClient = new QueryClient();\n\ntype CivicAuthProviderProps = Omit<AuthProviderProps, \"pkceConsumer\">;\n\nconst CivicAuthProvider = ({ children, ...props }: CivicAuthProviderProps) => {\n return (\n <QueryClientProvider client={queryClient}>\n <AuthProvider\n {...props}\n pkceConsumer={new BrowserPublicClientPKCEProducer()}\n >\n <UserProvider storage={new LocalStorageAdapter()}>\n {children}\n </UserProvider>\n </AuthProvider>\n </QueryClientProvider>\n );\n};\n\nexport { CivicAuthProvider, type CivicAuthProviderProps };\n","\"use client\";\nimport { useUser } from \"@/react/hooks\";\nimport { DisplayMode } from \"@/types\";\nimport { cn } from \"@/utils\";\nimport { useCallback, useEffect, useState } from \"react\";\n\nconst ChevronDown = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-chevron-down\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n);\n\nconst ChevronUp = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-chevron-up\"\n >\n <path d=\"m18 15-6-6-6 6\" />\n </svg>\n);\n\nconst UserButton = ({\n displayMode,\n className,\n}: {\n displayMode?: DisplayMode;\n className?: string;\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const { user, signIn, signOut } = useUser();\n\n const handleClickOutside = useCallback((event: MouseEvent) => {\n const target = event.target as HTMLElement;\n\n if (!target.closest(\"#civic-dropdown-container\")) {\n setIsOpen(false);\n }\n }, []);\n\n const handleSignOut = useCallback(async () => {\n signOut();\n\n setIsOpen(false);\n }, [signOut]);\n\n const handleSignIn = useCallback(async () => {\n await signIn(displayMode);\n\n setIsOpen(false);\n }, [signIn, displayMode]);\n\n const handleEscape = useCallback((event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n setIsOpen(false);\n }\n }, []);\n\n useEffect(() => {\n if (isOpen) {\n window.addEventListener(\"click\", handleClickOutside);\n\n window.addEventListener(\"keydown\", handleEscape);\n }\n\n return () => {\n window.removeEventListener(\"click\", handleClickOutside);\n\n window.removeEventListener(\"keydown\", handleEscape);\n };\n }, [handleClickOutside, handleEscape, isOpen]);\n\n if (user) {\n return (\n <div className=\"cac-relative\" id=\"civic-dropdown-container\">\n <button\n className={cn(\n \"cac-flex cac-w-full cac-items-center cac-justify-between cac-gap-2 cac-rounded-full cac-border cac-border-neutral-500 cac-px-3 cac-py-2 cac-text-neutral-500 cac-transition-colors hover:cac-bg-neutral-200 hover:cac-bg-opacity-50\",\n className,\n )}\n onClick={() => setIsOpen((isOpen) => !isOpen)}\n >\n {user?.picture ? (\n <span className=\"cac-relative cac-flex cac-h-10 cac-w-10 cac-shrink-0 cac-gap-2 cac-overflow-hidden cac-rounded-full\">\n <img\n className=\"cac-h-full cac-w-full cac-object-cover\"\n src={user.picture}\n alt={user?.name || user?.email}\n />\n </span>\n ) : (\n <div />\n )}\n\n <span>{user?.name || user?.email}</span>\n\n {isOpen ? <ChevronUp /> : <ChevronDown />}\n </button>\n <div\n className={\n isOpen\n ? \"cac-absolute cac-right-0 cac-mt-2 cac-w-full cac-rounded-lg cac-bg-white cac-py-2 cac-text-neutral-500 cac-shadow-xl\"\n : \"cac-hidden\"\n }\n >\n <ul>\n <li>\n <button\n className=\"cac-block cac-w-full cac-px-4 cac-py-2 cac-transition-colors hover:cac-bg-neutral-200 hover:cac-bg-opacity-50\"\n onClick={handleSignOut}\n >\n Logout\n </button>\n </li>\n </ul>\n </div>\n </div>\n );\n }\n\n return (\n <button\n data-testid=\"sign-in-button\"\n className={cn(\n \"cac-rounded-full cac-border cac-border-neutral-500 cac-px-3 cac-py-2 cac-transition-colors hover:cac-bg-neutral-200 hover:cac-bg-opacity-50\",\n className,\n )}\n onClick={handleSignIn}\n >\n Sign in\n </button>\n );\n};\n\nexport { UserButton };\n","\"use client\";\nimport { cn } from \"@/utils\";\nimport { DisplayMode } from \"@/types\";\nimport { useUser } from \"@/react/hooks\";\n\nconst SignInButton = ({\n displayMode,\n className,\n}: {\n displayMode?: DisplayMode;\n className?: string;\n}) => {\n const { signIn } = useUser();\n\n return (\n <button\n data-testid=\"sign-in-button\"\n className={cn(\n \"cac-rounded-full cac-border cac-border-neutral-500 cac-px-3 cac-py-2 cac-transition-colors hover:cac-bg-neutral-200 hover:cac-bg-opacity-50\",\n className,\n )}\n onClick={() => signIn(displayMode)}\n >\n Sign In\n </button>\n );\n};\n\nexport { SignInButton };\n","\"use client\";\nimport { cn } from \"@/utils\";\nimport { useUser } from \"@/react/hooks\";\n\nconst SignOutButton = ({ className }: { className?: string }) => {\n const { signOut } = useUser();\n\n return (\n <button\n className={cn(\n \"cac-rounded-full cac-border cac-border-neutral-500 cac-px-3 cac-py-2 cac-transition-colors hover:cac-bg-neutral-200 hover:cac-bg-opacity-50\",\n className,\n )}\n onClick={() => signOut()}\n >\n Sign Out\n </button>\n );\n};\n\nexport { SignOutButton };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AACA,SAAS,kBAAkB;;;ACC3B,SAAS,aAAa,2BAA2B;AAGjD,OAAO;AAgBC;AAXR,IAAM,cAAc,IAAI,YAAY;AAIpC,IAAM,oBAAoB,CAAC,OAAmD;AAAnD,eAAE,WAd7B,IAc2B,IAAe,kBAAf,IAAe,CAAb;AAC3B,SACE,oBAAC,uBAAoB,QAAQ,aAC3B;AAAA,IAAC;AAAA,qCACK,QADL;AAAA,MAEC,cAAc,IAAI,gCAAgC;AAAA,MAElD,8BAAC,gBAAa,SAAS,IAAI,oBAAoB,GAC5C,UACH;AAAA;AAAA,EACF,GACF;AAEJ;;;ADvBA,IAAM,UAAU,MAEW;AACzB,QAAM,UAAU,WAAW,WAAW;AAEtC,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,4CAA4C;AAAA,EAC9D;AAEA,SAAO;AACT;;;AEVA,SAAS,aAAa,WAAW,gBAAgB;AAe7C,gBAAAA,MA0EI,YA1EJ;AAbJ,IAAM,cAAc,MAClB,gBAAAA;AAAA,EAAC;AAAA;AAAA,IACC,OAAM;AAAA,IACN,OAAM;AAAA,IACN,QAAO;AAAA,IACP,SAAQ;AAAA,IACR,MAAK;AAAA,IACL,QAAO;AAAA,IACP,aAAY;AAAA,IACZ,eAAc;AAAA,IACd,gBAAe;AAAA,IACf,WAAU;AAAA,IAEV,0BAAAA,KAAC,UAAK,GAAE,gBAAe;AAAA;AACzB;AAGF,IAAM,YAAY,MAChB,gBAAAA;AAAA,EAAC;AAAA;AAAA,IACC,OAAM;AAAA,IACN,OAAM;AAAA,IACN,QAAO;AAAA,IACP,SAAQ;AAAA,IACR,MAAK;AAAA,IACL,QAAO;AAAA,IACP,aAAY;AAAA,IACZ,eAAc;AAAA,IACd,gBAAe;AAAA,IACf,WAAU;AAAA,IAEV,0BAAAA,KAAC,UAAK,GAAE,kBAAiB;AAAA;AAC3B;AAGF,IAAM,aAAa,CAAC;AAAA,EAClB;AAAA,EACA;AACF,MAGM;AACJ,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAS,KAAK;AAC1C,QAAM,EAAE,MAAM,QAAQ,QAAQ,IAAI,QAAQ;AAE1C,QAAM,qBAAqB,YAAY,CAAC,UAAsB;AAC5D,UAAM,SAAS,MAAM;AAErB,QAAI,CAAC,OAAO,QAAQ,2BAA2B,GAAG;AAChD,gBAAU,KAAK;AAAA,IACjB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,gBAAgB,YAAY,MAAY;AAC5C,YAAQ;AAER,cAAU,KAAK;AAAA,EACjB,IAAG,CAAC,OAAO,CAAC;AAEZ,QAAM,eAAe,YAAY,MAAY;AAC3C,UAAM,OAAO,WAAW;AAExB,cAAU,KAAK;AAAA,EACjB,IAAG,CAAC,QAAQ,WAAW,CAAC;AAExB,QAAM,eAAe,YAAY,CAAC,UAAyB;AACzD,QAAI,MAAM,QAAQ,UAAU;AAC1B,gBAAU,KAAK;AAAA,IACjB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,YAAU,MAAM;AACd,QAAI,QAAQ;AACV,aAAO,iBAAiB,SAAS,kBAAkB;AAEnD,aAAO,iBAAiB,WAAW,YAAY;AAAA,IACjD;AAEA,WAAO,MAAM;AACX,aAAO,oBAAoB,SAAS,kBAAkB;AAEtD,aAAO,oBAAoB,WAAW,YAAY;AAAA,IACpD;AAAA,EACF,GAAG,CAAC,oBAAoB,cAAc,MAAM,CAAC;AAE7C,MAAI,MAAM;AACR,WACE,qBAAC,SAAI,WAAU,gBAAe,IAAG,4BAC/B;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAW;AAAA,YACT;AAAA,YACA;AAAA,UACF;AAAA,UACA,SAAS,MAAM,UAAU,CAACC,YAAW,CAACA,OAAM;AAAA,UAE3C;AAAA,0CAAM,WACL,gBAAAD,KAAC,UAAK,WAAU,uGACd,0BAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,KAAK,KAAK;AAAA,gBACV,MAAK,6BAAM,UAAQ,6BAAM;AAAA;AAAA,YAC3B,GACF,IAEA,gBAAAA,KAAC,SAAI;AAAA,YAGP,gBAAAA,KAAC,UAAM,wCAAM,UAAQ,6BAAM,QAAM;AAAA,YAEhC,SAAS,gBAAAA,KAAC,aAAU,IAAK,gBAAAA,KAAC,eAAY;AAAA;AAAA;AAAA,MACzC;AAAA,MACA,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,WACE,SACI,yHACA;AAAA,UAGN,0BAAAA,KAAC,QACC,0BAAAA,KAAC,QACC,0BAAAA;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,SAAS;AAAA,cACV;AAAA;AAAA,UAED,GACF,GACF;AAAA;AAAA,MACF;AAAA,OACF;AAAA,EAEJ;AAEA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,eAAY;AAAA,MACZ,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACA,SAAS;AAAA,MACV;AAAA;AAAA,EAED;AAEJ;;;ACvII,gBAAAE,YAAA;AAVJ,IAAM,eAAe,CAAC;AAAA,EACpB;AAAA,EACA;AACF,MAGM;AACJ,QAAM,EAAE,OAAO,IAAI,QAAQ;AAE3B,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,eAAY;AAAA,MACZ,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACA,SAAS,MAAM,OAAO,WAAW;AAAA,MAClC;AAAA;AAAA,EAED;AAEJ;;;AClBI,gBAAAC,YAAA;AAJJ,IAAM,gBAAgB,CAAC,EAAE,UAAU,MAA8B;AAC/D,QAAM,EAAE,QAAQ,IAAI,QAAQ;AAE5B,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MACA,SAAS,MAAM,QAAQ;AAAA,MACxB;AAAA;AAAA,EAED;AAEJ;","names":["jsx","isOpen","jsx","jsx"]}
@@ -0,0 +1,35 @@
1
+ export { C as CookieStorage, a as CookieStorageSettings, S as SessionStorage } from './storage-BJyqsZwC.mjs';
2
+ import { E as Endpoints, A as AuthStorage, O as OIDCTokenResponseBody, U as User } from './types-BxAubCqO.mjs';
3
+ import 'oslo/oauth2';
4
+
5
+ type AuthConfig = {
6
+ clientId: string;
7
+ oauthServer: string;
8
+ redirectUrl: string;
9
+ challengeUrl?: string;
10
+ endpointOverrides?: Partial<Endpoints> | undefined;
11
+ };
12
+
13
+ /**
14
+ * Resolve an OAuth access code to a set of OIDC tokens
15
+ * @param code The access code, typically from a query parameter in the redirect url
16
+ * @param state The oauth random state string, used to distinguish between requests. Typically also passed in the redirect url
17
+ * @param storage The place that this server uses to store session data (e.g. a cookie store)
18
+ * @param config Oauth Server configuration
19
+ */
20
+ declare function resolveOAuthAccessCode(code: string, state: string, storage: AuthStorage, config: AuthConfig): Promise<OIDCTokenResponseBody>;
21
+ declare function isLoggedIn(storage: AuthStorage): boolean;
22
+ declare function buildLoginUrl(config: Pick<AuthConfig, "oauthServer" | "clientId" | "redirectUrl"> & {
23
+ scopes?: string[];
24
+ state?: string;
25
+ nonce?: string;
26
+ }, storage: AuthStorage): Promise<URL>;
27
+
28
+ declare function getUser(storage: AuthStorage): Promise<User | null>;
29
+
30
+ /**
31
+ * Refresh the current set of OIDC tokens
32
+ */
33
+ declare function refreshTokens(storage: AuthStorage, config: AuthConfig): Promise<OIDCTokenResponseBody>;
34
+
35
+ export { buildLoginUrl, getUser, isLoggedIn, refreshTokens, resolveOAuthAccessCode };
@@ -0,0 +1,35 @@
1
+ export { C as CookieStorage, a as CookieStorageSettings, S as SessionStorage } from './storage-ANmRwpZ3.js';
2
+ import { E as Endpoints, A as AuthStorage, O as OIDCTokenResponseBody, U as User } from './types-BxAubCqO.js';
3
+ import 'oslo/oauth2';
4
+
5
+ type AuthConfig = {
6
+ clientId: string;
7
+ oauthServer: string;
8
+ redirectUrl: string;
9
+ challengeUrl?: string;
10
+ endpointOverrides?: Partial<Endpoints> | undefined;
11
+ };
12
+
13
+ /**
14
+ * Resolve an OAuth access code to a set of OIDC tokens
15
+ * @param code The access code, typically from a query parameter in the redirect url
16
+ * @param state The oauth random state string, used to distinguish between requests. Typically also passed in the redirect url
17
+ * @param storage The place that this server uses to store session data (e.g. a cookie store)
18
+ * @param config Oauth Server configuration
19
+ */
20
+ declare function resolveOAuthAccessCode(code: string, state: string, storage: AuthStorage, config: AuthConfig): Promise<OIDCTokenResponseBody>;
21
+ declare function isLoggedIn(storage: AuthStorage): boolean;
22
+ declare function buildLoginUrl(config: Pick<AuthConfig, "oauthServer" | "clientId" | "redirectUrl"> & {
23
+ scopes?: string[];
24
+ state?: string;
25
+ nonce?: string;
26
+ }, storage: AuthStorage): Promise<URL>;
27
+
28
+ declare function getUser(storage: AuthStorage): Promise<User | null>;
29
+
30
+ /**
31
+ * Refresh the current set of OIDC tokens
32
+ */
33
+ declare function refreshTokens(storage: AuthStorage, config: AuthConfig): Promise<OIDCTokenResponseBody>;
34
+
35
+ export { buildLoginUrl, getUser, isLoggedIn, refreshTokens, resolveOAuthAccessCode };
package/dist/server.js ADDED
@@ -0,0 +1,20 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+
4
+
5
+
6
+
7
+ var _chunkJEOPLLWOjs = require('./chunk-JEOPLLWO.js');
8
+
9
+
10
+ var _chunkAM2Y662Ijs = require('./chunk-AM2Y662I.js');
11
+ require('./chunk-CRTRMMJ7.js');
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+ exports.CookieStorage = _chunkJEOPLLWOjs.CookieStorage; exports.buildLoginUrl = _chunkJEOPLLWOjs.buildLoginUrl; exports.getUser = _chunkAM2Y662Ijs.getUser; exports.isLoggedIn = _chunkJEOPLLWOjs.isLoggedIn; exports.refreshTokens = _chunkJEOPLLWOjs.refreshTokens; exports.resolveOAuthAccessCode = _chunkJEOPLLWOjs.resolveOAuthAccessCode;
20
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/patrick/Code/civic-auth/packages/civic-auth-client/dist/server.js"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACA;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B,+BAA4B;AAC5B;AACE;AACA;AACA;AACA;AACA;AACA;AACF,+UAAC","file":"/Users/patrick/Code/civic-auth/packages/civic-auth-client/dist/server.js"}
@@ -0,0 +1,20 @@
1
+ import {
2
+ CookieStorage,
3
+ buildLoginUrl,
4
+ isLoggedIn,
5
+ refreshTokens,
6
+ resolveOAuthAccessCode
7
+ } from "./chunk-63YGK3A7.mjs";
8
+ import {
9
+ getUser
10
+ } from "./chunk-Q7DSPTUG.mjs";
11
+ import "./chunk-RGHW4PYM.mjs";
12
+ export {
13
+ CookieStorage,
14
+ buildLoginUrl,
15
+ getUser,
16
+ isLoggedIn,
17
+ refreshTokens,
18
+ resolveOAuthAccessCode
19
+ };
20
+ //# sourceMappingURL=server.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"LoadingIcon.d.ts","sourceRoot":"","sources":["../../../../src/shared/components/LoadingIcon.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,QAAA,MAAM,WAAW,yBAgDhB,CAAC;AAEF,OAAO,EAAE,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"LoadingIcon.d.ts","sourceRoot":"","sources":["../../../../src/shared/components/LoadingIcon.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,QAAA,MAAM,WAAW,yBAwChB,CAAC;AAEF,OAAO,EAAE,WAAW,EAAE,CAAC"}
@@ -1,11 +1,5 @@
1
1
  import React from "react";
2
2
  const LoadingIcon = () => (React.createElement("div", { role: "status" },
3
- React.createElement("style", null, `
4
- @keyframes spin {
5
- 0% { transform: rotate(0deg); }
6
- 100% { transform: rotate(360deg); }
7
- }
8
- `),
9
3
  React.createElement("svg", { "aria-hidden": "true", style: {
10
4
  display: "inline",
11
5
  height: "2rem",