@stackframe/stack 2.4.0 → 2.4.1

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 (279) hide show
  1. package/dist/components/card-frame.js +1 -0
  2. package/dist/components/card-frame.js.map +1 -0
  3. package/dist/components/credential-sign-in.js +1 -0
  4. package/dist/components/credential-sign-in.js.map +1 -0
  5. package/dist/components/credential-sign-up.js +1 -0
  6. package/dist/components/credential-sign-up.js.map +1 -0
  7. package/dist/components/forgot-password.js +1 -0
  8. package/dist/components/forgot-password.js.map +1 -0
  9. package/dist/components/form-warning.js +1 -0
  10. package/dist/components/form-warning.js.map +1 -0
  11. package/dist/components/magic-link-sign-in.js +1 -0
  12. package/dist/components/magic-link-sign-in.js.map +1 -0
  13. package/dist/components/message-card.js +1 -0
  14. package/dist/components/message-card.js.map +1 -0
  15. package/dist/components/oauth-button.js +1 -0
  16. package/dist/components/oauth-button.js.map +1 -0
  17. package/dist/components/oauth-group.js +1 -0
  18. package/dist/components/oauth-group.js.map +1 -0
  19. package/dist/components/password-field.js +1 -0
  20. package/dist/components/password-field.js.map +1 -0
  21. package/dist/components/password-reset-inner.js +1 -0
  22. package/dist/components/password-reset-inner.js.map +1 -0
  23. package/dist/components/redirect-message-card.js +9 -14
  24. package/dist/components/redirect-message-card.js.map +1 -0
  25. package/dist/components/separator-with-text.js +1 -0
  26. package/dist/components/separator-with-text.js.map +1 -0
  27. package/dist/components/user-avatar.d.mts +1 -0
  28. package/dist/components/user-avatar.d.ts +1 -0
  29. package/dist/components/user-avatar.js +1 -0
  30. package/dist/components/user-avatar.js.map +1 -0
  31. package/dist/components/user-button.js +1 -0
  32. package/dist/components/user-button.js.map +1 -0
  33. package/dist/components-core/avatar.js +1 -0
  34. package/dist/components-core/avatar.js.map +1 -0
  35. package/dist/components-core/button.js +1 -0
  36. package/dist/components-core/button.js.map +1 -0
  37. package/dist/components-core/card.js +1 -0
  38. package/dist/components-core/card.js.map +1 -0
  39. package/dist/components-core/collapsible.js +1 -0
  40. package/dist/components-core/collapsible.js.map +1 -0
  41. package/dist/components-core/container.js +1 -0
  42. package/dist/components-core/container.js.map +1 -0
  43. package/dist/components-core/dropdown.js +1 -0
  44. package/dist/components-core/dropdown.js.map +1 -0
  45. package/dist/components-core/index.d.mts +4 -4
  46. package/dist/components-core/index.d.ts +4 -4
  47. package/dist/components-core/index.js +1 -0
  48. package/dist/components-core/index.js.map +1 -0
  49. package/dist/components-core/input.js +1 -0
  50. package/dist/components-core/input.js.map +1 -0
  51. package/dist/components-core/label.js +1 -0
  52. package/dist/components-core/label.js.map +1 -0
  53. package/dist/components-core/link.js +1 -0
  54. package/dist/components-core/link.js.map +1 -0
  55. package/dist/components-core/loading-indicator.js +1 -0
  56. package/dist/components-core/loading-indicator.js.map +1 -0
  57. package/dist/components-core/popover.js +1 -0
  58. package/dist/components-core/popover.js.map +1 -0
  59. package/dist/components-core/separator.js +1 -0
  60. package/dist/components-core/separator.js.map +1 -0
  61. package/dist/components-core/skeleton.js +1 -0
  62. package/dist/components-core/skeleton.js.map +1 -0
  63. package/dist/components-core/tabs.js +4 -2
  64. package/dist/components-core/tabs.js.map +1 -0
  65. package/dist/components-core/text.js +1 -0
  66. package/dist/components-core/text.js.map +1 -0
  67. package/dist/components-core-joy/button.js +1 -0
  68. package/dist/components-core-joy/button.js.map +1 -0
  69. package/dist/components-core-joy/input.js +1 -0
  70. package/dist/components-core-joy/input.js.map +1 -0
  71. package/dist/components-core-joy/separator.js +1 -0
  72. package/dist/components-core-joy/separator.js.map +1 -0
  73. package/dist/components-core-joy/tabs.js +1 -0
  74. package/dist/components-core-joy/tabs.js.map +1 -0
  75. package/dist/components-core-joy/text.js +1 -0
  76. package/dist/components-core-joy/text.js.map +1 -0
  77. package/dist/components-page/account-settings.js +1 -0
  78. package/dist/components-page/account-settings.js.map +1 -0
  79. package/dist/components-page/auth-page.js +1 -0
  80. package/dist/components-page/auth-page.js.map +1 -0
  81. package/dist/components-page/email-verification.js +1 -0
  82. package/dist/components-page/email-verification.js.map +1 -0
  83. package/dist/components-page/forgot-password.js +1 -0
  84. package/dist/components-page/forgot-password.js.map +1 -0
  85. package/dist/components-page/magic-link-callback.js +3 -2
  86. package/dist/components-page/magic-link-callback.js.map +1 -0
  87. package/dist/components-page/oauth-callback.js +1 -0
  88. package/dist/components-page/oauth-callback.js.map +1 -0
  89. package/dist/components-page/password-reset.js +1 -0
  90. package/dist/components-page/password-reset.js.map +1 -0
  91. package/dist/components-page/sign-in.js +1 -0
  92. package/dist/components-page/sign-in.js.map +1 -0
  93. package/dist/components-page/sign-out.js +1 -0
  94. package/dist/components-page/sign-out.js.map +1 -0
  95. package/dist/components-page/sign-up.js +1 -0
  96. package/dist/components-page/sign-up.js.map +1 -0
  97. package/dist/components-page/stack-handler.d.mts +1 -0
  98. package/dist/components-page/stack-handler.d.ts +1 -0
  99. package/dist/components-page/stack-handler.js +1 -0
  100. package/dist/components-page/stack-handler.js.map +1 -0
  101. package/dist/esm/components/card-frame.js +1 -0
  102. package/dist/esm/components/card-frame.js.map +1 -0
  103. package/dist/esm/components/credential-sign-in.js +1 -0
  104. package/dist/esm/components/credential-sign-in.js.map +1 -0
  105. package/dist/esm/components/credential-sign-up.js +1 -0
  106. package/dist/esm/components/credential-sign-up.js.map +1 -0
  107. package/dist/esm/components/forgot-password.js +1 -0
  108. package/dist/esm/components/forgot-password.js.map +1 -0
  109. package/dist/esm/components/form-warning.js +1 -0
  110. package/dist/esm/components/form-warning.js.map +1 -0
  111. package/dist/esm/components/magic-link-sign-in.js +1 -0
  112. package/dist/esm/components/magic-link-sign-in.js.map +1 -0
  113. package/dist/esm/components/message-card.js +1 -0
  114. package/dist/esm/components/message-card.js.map +1 -0
  115. package/dist/esm/components/oauth-button.js +1 -0
  116. package/dist/esm/components/oauth-button.js.map +1 -0
  117. package/dist/esm/components/oauth-group.js +1 -0
  118. package/dist/esm/components/oauth-group.js.map +1 -0
  119. package/dist/esm/components/password-field.js +1 -0
  120. package/dist/esm/components/password-field.js.map +1 -0
  121. package/dist/esm/components/password-reset-inner.js +1 -0
  122. package/dist/esm/components/password-reset-inner.js.map +1 -0
  123. package/dist/esm/components/redirect-message-card.js +9 -14
  124. package/dist/esm/components/redirect-message-card.js.map +1 -0
  125. package/dist/esm/components/separator-with-text.js +1 -0
  126. package/dist/esm/components/separator-with-text.js.map +1 -0
  127. package/dist/esm/components/user-avatar.js +1 -0
  128. package/dist/esm/components/user-avatar.js.map +1 -0
  129. package/dist/esm/components/user-button.js +1 -0
  130. package/dist/esm/components/user-button.js.map +1 -0
  131. package/dist/esm/components-core/avatar.js +1 -0
  132. package/dist/esm/components-core/avatar.js.map +1 -0
  133. package/dist/esm/components-core/button.js +1 -0
  134. package/dist/esm/components-core/button.js.map +1 -0
  135. package/dist/esm/components-core/card.js +1 -0
  136. package/dist/esm/components-core/card.js.map +1 -0
  137. package/dist/esm/components-core/collapsible.js +1 -0
  138. package/dist/esm/components-core/collapsible.js.map +1 -0
  139. package/dist/esm/components-core/container.js +1 -0
  140. package/dist/esm/components-core/container.js.map +1 -0
  141. package/dist/esm/components-core/dropdown.js +1 -0
  142. package/dist/esm/components-core/dropdown.js.map +1 -0
  143. package/dist/esm/components-core/index.js +1 -0
  144. package/dist/esm/components-core/index.js.map +1 -0
  145. package/dist/esm/components-core/input.js +1 -0
  146. package/dist/esm/components-core/input.js.map +1 -0
  147. package/dist/esm/components-core/label.js +1 -0
  148. package/dist/esm/components-core/label.js.map +1 -0
  149. package/dist/esm/components-core/link.js +1 -0
  150. package/dist/esm/components-core/link.js.map +1 -0
  151. package/dist/esm/components-core/loading-indicator.js +1 -0
  152. package/dist/esm/components-core/loading-indicator.js.map +1 -0
  153. package/dist/esm/components-core/popover.js +1 -0
  154. package/dist/esm/components-core/popover.js.map +1 -0
  155. package/dist/esm/components-core/separator.js +1 -0
  156. package/dist/esm/components-core/separator.js.map +1 -0
  157. package/dist/esm/components-core/skeleton.js +1 -0
  158. package/dist/esm/components-core/skeleton.js.map +1 -0
  159. package/dist/esm/components-core/tabs.js +4 -2
  160. package/dist/esm/components-core/tabs.js.map +1 -0
  161. package/dist/esm/components-core/text.js +1 -0
  162. package/dist/esm/components-core/text.js.map +1 -0
  163. package/dist/esm/components-core-joy/button.js +1 -0
  164. package/dist/esm/components-core-joy/button.js.map +1 -0
  165. package/dist/esm/components-core-joy/input.js +1 -0
  166. package/dist/esm/components-core-joy/input.js.map +1 -0
  167. package/dist/esm/components-core-joy/separator.js +1 -0
  168. package/dist/esm/components-core-joy/separator.js.map +1 -0
  169. package/dist/esm/components-core-joy/tabs.js +1 -0
  170. package/dist/esm/components-core-joy/tabs.js.map +1 -0
  171. package/dist/esm/components-core-joy/text.js +1 -0
  172. package/dist/esm/components-core-joy/text.js.map +1 -0
  173. package/dist/esm/components-page/account-settings.js +1 -0
  174. package/dist/esm/components-page/account-settings.js.map +1 -0
  175. package/dist/esm/components-page/auth-page.js +1 -0
  176. package/dist/esm/components-page/auth-page.js.map +1 -0
  177. package/dist/esm/components-page/email-verification.js +1 -0
  178. package/dist/esm/components-page/email-verification.js.map +1 -0
  179. package/dist/esm/components-page/forgot-password.js +1 -0
  180. package/dist/esm/components-page/forgot-password.js.map +1 -0
  181. package/dist/esm/components-page/magic-link-callback.js +3 -2
  182. package/dist/esm/components-page/magic-link-callback.js.map +1 -0
  183. package/dist/esm/components-page/oauth-callback.js +1 -0
  184. package/dist/esm/components-page/oauth-callback.js.map +1 -0
  185. package/dist/esm/components-page/password-reset.js +1 -0
  186. package/dist/esm/components-page/password-reset.js.map +1 -0
  187. package/dist/esm/components-page/sign-in.js +1 -0
  188. package/dist/esm/components-page/sign-in.js.map +1 -0
  189. package/dist/esm/components-page/sign-out.js +1 -0
  190. package/dist/esm/components-page/sign-out.js.map +1 -0
  191. package/dist/esm/components-page/sign-up.js +1 -0
  192. package/dist/esm/components-page/sign-up.js.map +1 -0
  193. package/dist/esm/components-page/stack-handler.js +1 -0
  194. package/dist/esm/components-page/stack-handler.js.map +1 -0
  195. package/dist/esm/index.js +1 -0
  196. package/dist/esm/index.js.map +1 -0
  197. package/dist/esm/joy.js +1 -0
  198. package/dist/esm/joy.js.map +1 -0
  199. package/dist/esm/lib/auth.js +1 -0
  200. package/dist/esm/lib/auth.js.map +1 -0
  201. package/dist/esm/lib/cookie.js +2 -1
  202. package/dist/esm/lib/cookie.js.map +1 -0
  203. package/dist/esm/lib/hooks.js +1 -0
  204. package/dist/esm/lib/hooks.js.map +1 -0
  205. package/dist/esm/lib/stack-app.js +287 -5
  206. package/dist/esm/lib/stack-app.js.map +1 -0
  207. package/dist/esm/providers/component-provider.js +1 -0
  208. package/dist/esm/providers/component-provider.js.map +1 -0
  209. package/dist/esm/providers/design-provider.js +1 -0
  210. package/dist/esm/providers/design-provider.js.map +1 -0
  211. package/dist/esm/providers/joy-provider.js +1 -0
  212. package/dist/esm/providers/joy-provider.js.map +1 -0
  213. package/dist/esm/providers/stack-provider-client.js +1 -0
  214. package/dist/esm/providers/stack-provider-client.js.map +1 -0
  215. package/dist/esm/providers/stack-provider.js +1 -0
  216. package/dist/esm/providers/stack-provider.js.map +1 -0
  217. package/dist/esm/providers/styled-components-registry.js +1 -0
  218. package/dist/esm/providers/styled-components-registry.js.map +1 -0
  219. package/dist/esm/providers/theme-provider.js +1 -0
  220. package/dist/esm/providers/theme-provider.js.map +1 -0
  221. package/dist/esm/utils/browser-script.js +1 -0
  222. package/dist/esm/utils/browser-script.js.map +1 -0
  223. package/dist/esm/utils/constants.js +1 -0
  224. package/dist/esm/utils/constants.js.map +1 -0
  225. package/dist/esm/utils/email.js +1 -0
  226. package/dist/esm/utils/email.js.map +1 -0
  227. package/dist/esm/utils/next.js +1 -0
  228. package/dist/esm/utils/next.js.map +1 -0
  229. package/dist/esm/utils/url.js +1 -0
  230. package/dist/esm/utils/url.js.map +1 -0
  231. package/dist/index.d.mts +2 -1
  232. package/dist/index.d.ts +2 -1
  233. package/dist/index.js +1 -0
  234. package/dist/index.js.map +1 -0
  235. package/dist/joy.js +1 -0
  236. package/dist/joy.js.map +1 -0
  237. package/dist/lib/auth.js +1 -0
  238. package/dist/lib/auth.js.map +1 -0
  239. package/dist/lib/cookie.js +5 -4
  240. package/dist/lib/cookie.js.map +1 -0
  241. package/dist/lib/hooks.d.mts +1 -0
  242. package/dist/lib/hooks.d.ts +1 -0
  243. package/dist/lib/hooks.js +1 -0
  244. package/dist/lib/hooks.js.map +1 -0
  245. package/dist/lib/stack-app.d.mts +78 -22
  246. package/dist/lib/stack-app.d.ts +78 -22
  247. package/dist/lib/stack-app.js +287 -5
  248. package/dist/lib/stack-app.js.map +1 -0
  249. package/dist/providers/component-provider.d.mts +6 -6
  250. package/dist/providers/component-provider.d.ts +6 -6
  251. package/dist/providers/component-provider.js +1 -0
  252. package/dist/providers/component-provider.js.map +1 -0
  253. package/dist/providers/design-provider.js +1 -0
  254. package/dist/providers/design-provider.js.map +1 -0
  255. package/dist/providers/joy-provider.js +1 -0
  256. package/dist/providers/joy-provider.js.map +1 -0
  257. package/dist/providers/stack-provider-client.d.mts +1 -0
  258. package/dist/providers/stack-provider-client.d.ts +1 -0
  259. package/dist/providers/stack-provider-client.js +1 -0
  260. package/dist/providers/stack-provider-client.js.map +1 -0
  261. package/dist/providers/stack-provider.d.mts +1 -0
  262. package/dist/providers/stack-provider.d.ts +1 -0
  263. package/dist/providers/stack-provider.js +1 -0
  264. package/dist/providers/stack-provider.js.map +1 -0
  265. package/dist/providers/styled-components-registry.js +1 -0
  266. package/dist/providers/styled-components-registry.js.map +1 -0
  267. package/dist/providers/theme-provider.js +1 -0
  268. package/dist/providers/theme-provider.js.map +1 -0
  269. package/dist/utils/browser-script.js +1 -0
  270. package/dist/utils/browser-script.js.map +1 -0
  271. package/dist/utils/constants.js +1 -0
  272. package/dist/utils/constants.js.map +1 -0
  273. package/dist/utils/email.js +1 -0
  274. package/dist/utils/email.js.map +1 -0
  275. package/dist/utils/next.js +1 -0
  276. package/dist/utils/next.js.map +1 -0
  277. package/dist/utils/url.js +1 -0
  278. package/dist/utils/url.js.map +1 -0
  279. package/package.json +3 -3
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components-core/loading-indicator.tsx"],"sourcesContent":["import styled, { keyframes } from 'styled-components';\n\nconst l7 = keyframes`\n 33% { background-size: calc(100%/3) 0%, calc(100%/3) 100%, calc(100%/3) 100%; }\n 50% { background-size: calc(100%/3) 100%, calc(100%/3) 0%, calc(100%/3) 100%; }\n 66% { background-size: calc(100%/3) 100%, calc(100%/3) 100%, calc(100%/3) 0%; }\n`;\n\nconst LoadingIndicator = styled.div<{ color: { light: string, dark: string }, size?: number }>`\n width: ${props => props.size || 36}px;\n aspect-ratio: 4;\n background: \n var(--_g) 0% 50%, \n var(--_g) 50% 50%, \n var(--_g) 100% 50%;\n background-size: calc(100%/3) 100%;\n animation: ${l7} 1s infinite linear;\n\n --_g: no-repeat radial-gradient(circle closest-side, ${props => props.color.light} 90%, #0000);\n\n html[data-theme='dark'] & {\n --_g: no-repeat radial-gradient(circle closest-side, ${props => props.color.dark} 90%, #0000);\n }\n`;\nexport default LoadingIndicator;"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+BAAkC;AAElC,IAAM,KAAK;AAAA;AAAA;AAAA;AAAA;AAMX,IAAM,mBAAmB,yBAAAA,QAAO;AAAA,WACrB,WAAS,MAAM,QAAQ,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAOrB,EAAE;AAAA;AAAA,yDAEwC,WAAS,MAAM,MAAM,KAAK;AAAA;AAAA;AAAA,2DAGxB,WAAS,MAAM,MAAM,IAAI;AAAA;AAAA;AAGpF,IAAO,4BAAQ;","names":["styled"]}
@@ -78,3 +78,4 @@ PopoverContent.displayName = "PopoverContent";
78
78
  PopoverContent,
79
79
  PopoverTrigger
80
80
  });
81
+ //# sourceMappingURL=popover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components-core/popover.tsx"],"sourcesContent":["import React from 'react';\nimport * as PopoverPrimitive from '@radix-ui/react-popover';\nimport styled, { css } from 'styled-components';\nimport { useDesign } from '..';\nimport { ColorPalette } from '../providers/design-provider';\n\nconst Popover = PopoverPrimitive.Root;\n\nconst PopoverTrigger = PopoverPrimitive.Trigger;\n\nconst StyledContent = styled(PopoverPrimitive.Content)<{\n $colors: ColorPalette,\n}>`\n z-index: 50;\n width: 18rem;\n border-radius: 0.375rem;\n padding: 1rem;\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1);\n outline: none;\n\n border: 1px solid ${({ $colors }) => $colors.light.neutralColor};\n background-color: ${({ $colors }) => $colors.light.backgroundColor};\n\n html[data-theme='dark'] & {\n border-color: ${({ $colors }) => $colors.dark.neutralColor};\n background-color: ${({ $colors }) => $colors.dark.backgroundColor};\n }\n`;\n\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ align = 'center', sideOffset = 4, ...props }, ref) => {\n const { colors } = useDesign();\n return (\n <PopoverPrimitive.Portal>\n <StyledContent\n $colors={colors}\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n {...props}\n />\n </PopoverPrimitive.Portal>\n );\n});\nPopoverContent.displayName = 'PopoverContent';\n\nexport { Popover, PopoverTrigger, PopoverContent };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAkB;AAClB,uBAAkC;AAClC,+BAA4B;AAC5B,eAA0B;AAiCpB;AA9BN,IAAM,UAA2B;AAEjC,IAAM,iBAAkC;AAExC,IAAM,oBAAgB,yBAAAA,SAAwB,wBAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAU/B,CAAC,EAAE,QAAQ,MAAM,QAAQ,MAAM,YAAY;AAAA,sBAC3C,CAAC,EAAE,QAAQ,MAAM,QAAQ,MAAM,eAAe;AAAA;AAAA;AAAA,oBAGhD,CAAC,EAAE,QAAQ,MAAM,QAAQ,KAAK,YAAY;AAAA,wBACtC,CAAC,EAAE,QAAQ,MAAM,QAAQ,KAAK,eAAe;AAAA;AAAA;AAIrE,IAAM,iBAAiB,aAAAC,QAAM,WAG3B,CAAC,EAAE,QAAQ,UAAU,aAAa,GAAG,GAAG,MAAM,GAAG,QAAQ;AACzD,QAAM,EAAE,OAAO,QAAI,oBAAU;AAC7B,SACE,4CAAkB,yBAAjB,EACC;AAAA,IAAC;AAAA;AAAA,MACC,SAAS;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACC,GAAG;AAAA;AAAA,EACN,GACF;AAEJ,CAAC;AACD,eAAe,cAAc;","names":["styled","React"]}
@@ -68,3 +68,4 @@ Separator.displayName = "Separator";
68
68
  0 && (module.exports = {
69
69
  Separator
70
70
  });
71
+ //# sourceMappingURL=separator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components-core/separator.tsx"],"sourcesContent":["'use client';\n\nimport React from 'react';\nimport * as SeparatorPrimitive from '@radix-ui/react-separator';\nimport styled from 'styled-components';\nimport { useDesign } from '..';\nimport { ColorPalette } from '../providers/design-provider';\n\nconst StyledSeparator = styled(SeparatorPrimitive.Root)<{ \n $orientation: string,\n $color: ColorPalette,\n}>`\n flex-shrink: 0;\n ${(props) =>\n props.$orientation === 'horizontal'\n ? 'height: 1px; width: 100%;'\n : 'height: 100%; width: 1px;'}\n \n background-color: ${props => props.$color.light.neutralColor};\n\n html[data-theme='dark'] & {\n background-color: ${props => props.$color.dark.neutralColor};\n }\n`;\n\nconst Separator = React.forwardRef<\n React.ElementRef<typeof SeparatorPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(({ orientation = 'horizontal', decorative = true, ...props }, ref) => {\n const { colors } = useDesign();\n\n return <StyledSeparator\n ref={ref}\n decorative={decorative}\n $orientation={orientation}\n $color={colors}\n {...props}\n />;\n});\n\nSeparator.displayName = 'Separator';\n\nexport { Separator };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,mBAAkB;AAClB,yBAAoC;AACpC,+BAAmB;AACnB,eAA0B;AA0BjB;AAvBT,IAAM,sBAAkB,yBAAAA,SAA0B,uBAAI;AAAA;AAAA,IAKlD,CAAC,UACD,MAAM,iBAAiB,eACnB,8BACA,2BAA2B;AAAA;AAAA,sBAEb,WAAS,MAAM,OAAO,MAAM,YAAY;AAAA;AAAA;AAAA,wBAGtC,WAAS,MAAM,OAAO,KAAK,YAAY;AAAA;AAAA;AAI/D,IAAM,YAAY,aAAAC,QAAM,WAGtB,CAAC,EAAE,cAAc,cAAc,aAAa,MAAM,GAAG,MAAM,GAAG,QAAQ;AACtE,QAAM,EAAE,OAAO,QAAI,oBAAU;AAE7B,SAAO;AAAA,IAAC;AAAA;AAAA,MACN;AAAA,MACA;AAAA,MACA,cAAc;AAAA,MACd,QAAQ;AAAA,MACP,GAAG;AAAA;AAAA,EACN;AACF,CAAC;AAED,UAAU,cAAc;","names":["styled","React"]}
@@ -84,3 +84,4 @@ Skeleton.displayName = "Skeleton";
84
84
  0 && (module.exports = {
85
85
  Skeleton
86
86
  });
87
+ //# sourceMappingURL=skeleton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components-core/skeleton.tsx"],"sourcesContent":["\"use client\";\n\nimport React from \"react\";\nimport styled, { keyframes } from 'styled-components';\n\nconst getFilterString = (brightness1: number, brightness2: number) => {\n return `\n 0% {\n filter: grayscale(1) contrast(0) brightness(0) invert(1) brightness(${brightness1});\n }\n 100% {\n filter: grayscale(1) contrast(0) brightness(0) invert(1) brightness(${brightness2});\n }\n `;\n};\n\nconst animationLight = keyframes`${getFilterString(0.8, 0.9)}`;\nconst animationDark = keyframes`${getFilterString(0.2, 0.1)}`;\n\nconst Primitive = styled(\"span\")`\n &[data-stack-state=\"activated\"], &[data-stack-state=\"activated\"] * {\n pointer-events: none !important;\n -webkit-user-select: none !important;\n -moz-user-select: none !important;\n user-select: none !important;\n cursor: default !important;\n }\n\n &[data-stack-state=\"activated\"] {\n animation: ${animationLight} 1s infinite alternate-reverse !important;\n }\n\n html[data-theme='dark'] &[data-stack-state=\"activated\"] {\n animation: ${animationDark} 1s infinite alternate-reverse !important;\n }\n`;\n\nconst Skeleton = React.forwardRef<\n React.ElementRef<\"span\">,\n React.ComponentPropsWithoutRef<\"span\"> & { deactivated?: boolean }\n>(\n (props, ref) => {\n return <Primitive\n ref={ref}\n data-stack-state={props.deactivated ? \"deactivated\" : \"activated\"}\n {...props}\n />;\n }\n);\nSkeleton.displayName = \"Skeleton\";\n\nexport { Skeleton };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,mBAAkB;AAClB,+BAAkC;AAuCvB;AArCX,IAAM,kBAAkB,CAAC,aAAqB,gBAAwB;AACpE,SAAO;AAAA;AAAA,4EAEmE,WAAW;AAAA;AAAA;AAAA,4EAGX,WAAW;AAAA;AAAA;AAGvF;AAEA,IAAM,iBAAiB,qCAAY,gBAAgB,KAAK,GAAG,CAAC;AAC5D,IAAM,gBAAgB,qCAAY,gBAAgB,KAAK,GAAG,CAAC;AAE3D,IAAM,gBAAY,yBAAAA,SAAO,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAUd,cAAc;AAAA;AAAA;AAAA;AAAA,iBAId,aAAa;AAAA;AAAA;AAI9B,IAAM,WAAW,aAAAC,QAAM;AAAA,EAIrB,CAAC,OAAO,QAAQ;AACd,WAAO;AAAA,MAAC;AAAA;AAAA,QACN;AAAA,QACA,oBAAkB,MAAM,cAAc,gBAAgB;AAAA,QACrD,GAAG;AAAA;AAAA,IACN;AAAA,EACF;AACF;AACA,SAAS,cAAc;","names":["styled","React"]}
@@ -65,7 +65,8 @@ var TabsList = React.forwardRef((props, ref) => {
65
65
  }
66
66
  );
67
67
  });
68
- var StayledTabsTrigger = (0, import_styled_components.default)(TabsPrimitive.Trigger)`
68
+ var StyledTabsTrigger = (0, import_styled_components.default)(TabsPrimitive.Trigger)`
69
+ all: unset;
69
70
  display: flex;
70
71
  flex-grow: 1;
71
72
  align-items: center;
@@ -94,7 +95,7 @@ var StayledTabsTrigger = (0, import_styled_components.default)(TabsPrimitive.Tri
94
95
  var TabsTrigger = React.forwardRef((props, ref) => {
95
96
  const { colors } = (0, import__.useDesign)();
96
97
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
97
- StayledTabsTrigger,
98
+ StyledTabsTrigger,
98
99
  {
99
100
  $colors: colors,
100
101
  ...props,
@@ -115,3 +116,4 @@ var TabsContent = React.forwardRef((props, ref) => {
115
116
  TabsList,
116
117
  TabsTrigger
117
118
  });
119
+ //# sourceMappingURL=tabs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components-core/tabs.tsx"],"sourcesContent":["import * as React from 'react';\nimport * as TabsPrimitive from '@radix-ui/react-tabs';\nimport styled from 'styled-components';\nimport { useDesign } from '..';\nimport { ColorPalette } from '../providers/design-provider';\n\nconst Tabs = TabsPrimitive.Root;\n\nconst StyledTabsList = styled(TabsPrimitive.List)`\n display: flex;\n height: 2.5rem\n align-items: center;\n justify-content: center;\n border-radius: 0.375rem;\n padding: 0.25rem;\n\n background-color: rgb(244, 244, 245);\n\n html[data-theme='dark'] & {\n background-color: rgb(39, 39, 42);\n }\n`;\n\nconst TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n React.ComponentProps<typeof TabsPrimitive.List>\n>((props, ref) => {\n return <StyledTabsList\n {...props} \n ref={ref} \n />;\n});\n\nconst StyledTabsTrigger = styled(TabsPrimitive.Trigger)<{\n $colors: ColorPalette,\n}>`\n all: unset;\n display: flex;\n flex-grow: 1;\n align-items: center;\n justify-content: center;\n white-space: nowrap;\n border-radius: 0.25rem;\n padding: 0.25rem 0.5rem;\n transition: all;\n outline: none;\n\n &:disabled {\n pointer-events: none;\n opacity: 0.5;\n }\n\n &[data-state='active'] {\n background-color: ${({ $colors }) => $colors.light.backgroundColor};\n }\n\n html[data-theme='dark'] & {\n &[data-state='active'] {\n background-color: ${({ $colors }) => $colors.dark.backgroundColor};\n }\n }\n`;\n\nconst TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n React.ComponentProps<typeof TabsPrimitive.Trigger>\n>((props, ref) => {\n const { colors } = useDesign();\n return <StyledTabsTrigger \n $colors={colors}\n {...props} \n ref={ref} \n />;\n});\n\nconst StyledTabsContent = styled(TabsPrimitive.Content)`\n margin-top: 1.5rem;\n`;\n\nconst TabsContent = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Content>,\n React.ComponentProps<typeof TabsPrimitive.Content>\n>((props, ref) => {\n return <StyledTabsContent {...props} ref={ref} />;\n});\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAAuB;AACvB,oBAA+B;AAC/B,+BAAmB;AACnB,eAA0B;AAwBjB;AArBT,IAAM,OAAqB;AAE3B,IAAM,qBAAiB,yBAAAA,SAAqB,kBAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAehD,IAAM,WAAiB,iBAGrB,CAAC,OAAO,QAAQ;AAChB,SAAO;AAAA,IAAC;AAAA;AAAA,MACL,GAAG;AAAA,MACJ;AAAA;AAAA,EACF;AACF,CAAC;AAED,IAAM,wBAAoB,yBAAAA,SAAqB,qBAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAoB9B,CAAC,EAAE,QAAQ,MAAM,QAAQ,MAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA,0BAK5C,CAAC,EAAE,QAAQ,MAAM,QAAQ,KAAK,eAAe;AAAA;AAAA;AAAA;AAKvE,IAAM,cAAoB,iBAGxB,CAAC,OAAO,QAAQ;AAChB,QAAM,EAAE,OAAO,QAAI,oBAAU;AAC7B,SAAO;AAAA,IAAC;AAAA;AAAA,MACN,SAAS;AAAA,MACR,GAAG;AAAA,MACJ;AAAA;AAAA,EACF;AACF,CAAC;AAED,IAAM,wBAAoB,yBAAAA,SAAqB,qBAAO;AAAA;AAAA;AAItD,IAAM,cAAoB,iBAGxB,CAAC,OAAO,QAAQ;AAChB,SAAO,4CAAC,qBAAmB,GAAG,OAAO,KAAU;AACjD,CAAC;","names":["styled"]}
@@ -95,3 +95,4 @@ Text.displayName = "Text";
95
95
  0 && (module.exports = {
96
96
  Text
97
97
  });
98
+ //# sourceMappingURL=text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components-core/text.tsx"],"sourcesContent":["'use client';\n\nimport React from \"react\";\nimport { createElement } from \"react\";\nimport { FONT_FAMILY, FONT_SIZES, LINE_HEIGHTS, PRIMARY_FONT_COLORS, SECONDARY_FONT_COLORS } from \"../utils/constants\";\nimport styled from \"styled-components\";\nimport { typedFromEntries } from \"@stackframe/stack-shared/dist/utils/objects\";\n\nconst components = ['p', 'h6', 'h5', 'h4', 'h3', 'h2', 'h1'] as const;\nconst StyledComponents = typedFromEntries(components.map((component) => {\n return [\n component,\n styled(component)<{\n $size: 'xs' | 'sm' | 'md' | 'lg' | 'xl',\n $textColor: { light: string, dark: string },\n }>`\n font-family: ${FONT_FAMILY};\n font-size: ${props => FONT_SIZES[props.$size]};\n line-height: ${props => LINE_HEIGHTS[props.$size]};\n margin: 0;\n padding: 0;\n color: ${props => props.$textColor.light};\n \n html[data-theme='dark'] & {\n color: ${props => props.$textColor.dark};\n }\n `\n ] as const;\n}));\n\n\ntype TextProps = {\n variant?: 'primary' | 'secondary' | 'warning' | 'success',\n as?: 'p' | 'h6'| 'h5' | 'h4' | 'h3' | 'h2' | 'h1',\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl',\n} & Omit<React.HTMLProps<HTMLParagraphElement>, 'size'>\n\nconst Text = React.forwardRef<HTMLParagraphElement, TextProps>(({\n variant='primary',\n size='md',\n as='p',\n ...props\n} : TextProps, ref) => {\n let textColor: { light: string, dark: string };\n switch (variant) {\n case 'primary': {\n textColor = PRIMARY_FONT_COLORS;\n break;\n }\n case 'secondary': {\n textColor = SECONDARY_FONT_COLORS;\n break;\n }\n case 'warning': {\n textColor = { light: '#b33b1d', dark: '#ff7b5c' };\n break;\n }\n case 'success': {\n textColor = { light: '#3da63d', dark: '#3da63d' };\n break;\n }\n }\n return createElement(StyledComponents[as], {\n $size: size,\n $textColor: textColor,\n ...props,\n ref,\n });\n});\n\nText.displayName = 'Text';\n\nexport { Text };"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,mBAAkB;AAClB,IAAAA,gBAA8B;AAC9B,uBAAkG;AAClG,+BAAmB;AACnB,qBAAiC;AAEjC,IAAM,aAAa,CAAC,KAAK,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI;AAC3D,IAAM,uBAAmB,iCAAiB,WAAW,IAAI,CAAC,cAAc;AACtE,SAAO;AAAA,IACL;AAAA,QACA,yBAAAC,SAAO,SAAS;AAAA,qBAIC,4BAAW;AAAA,mBACb,WAAS,4BAAW,MAAM,KAAK,CAAC;AAAA,qBAC9B,WAAS,8BAAa,MAAM,KAAK,CAAC;AAAA;AAAA;AAAA,eAGxC,WAAS,MAAM,WAAW,KAAK;AAAA;AAAA;AAAA,iBAG7B,WAAS,MAAM,WAAW,IAAI;AAAA;AAAA;AAAA,EAG7C;AACF,CAAC,CAAC;AASF,IAAM,OAAO,aAAAC,QAAM,WAA4C,CAAC;AAAA,EAC9D,UAAQ;AAAA,EACR,OAAK;AAAA,EACL,KAAG;AAAA,EACH,GAAG;AACL,GAAe,QAAQ;AACrB,MAAI;AACJ,UAAQ,SAAS;AAAA,IACf,KAAK,WAAW;AACd,kBAAY;AACZ;AAAA,IACF;AAAA,IACA,KAAK,aAAa;AAChB,kBAAY;AACZ;AAAA,IACF;AAAA,IACA,KAAK,WAAW;AACd,kBAAY,EAAE,OAAO,WAAW,MAAM,UAAU;AAChD;AAAA,IACF;AAAA,IACA,KAAK,WAAW;AACd,kBAAY,EAAE,OAAO,WAAW,MAAM,UAAU;AAChD;AAAA,IACF;AAAA,EACF;AACA,aAAO,6BAAc,iBAAiB,EAAE,GAAG;AAAA,IACzC,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,GAAG;AAAA,IACH;AAAA,EACF,CAAC;AACH,CAAC;AAED,KAAK,cAAc;","names":["import_react","styled","React"]}
@@ -85,3 +85,4 @@ var Button = import_react.default.forwardRef(({
85
85
  0 && (module.exports = {
86
86
  Button
87
87
  });
88
+ //# sourceMappingURL=button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components-core-joy/button.tsx"],"sourcesContent":["'use client';\n\nimport React from \"react\";\nimport { Button as DefaultButton } from \"../components-core\";\nimport { Button as JoyButton } from '@mui/joy';\nimport Color from \"color\";\n\nexport const Button = React.forwardRef<\n React.ElementRef<typeof DefaultButton>,\n React.ComponentProps<typeof DefaultButton>\n>(({\n variant = \"primary\",\n color,\n size = \"md\",\n loading = false,\n ...props\n}, ref) => {\n const muiVariant: \"primary\" | \"neutral\" | \"danger\" = ({\n primary: \"primary\",\n secondary: \"neutral\",\n warning: \"danger\",\n } as const)[variant] || \"primary\";\n\n const { children, action, ref: _, ...validProps } = props;\n const c = Color(color);\n const changeColor = (value: number) => {\n return c.hsl(\n c.hue(), \n c.saturationl(), \n c.lightness() + (c.isDark() ? value : -value)\n ).toString();\n };\n\n return <JoyButton\n color={muiVariant}\n sx={color ? {\n backgroundColor: color,\n color: c.isDark() ? 'white' : 'black',\n '&:hover': {\n backgroundColor: changeColor(10)\n },\n '&:active': {\n backgroundColor: changeColor(20)\n },\n } : {}}\n size={size}\n loading={loading}\n {...validProps}\n >\n {children}\n </JoyButton>;\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,mBAAkB;AAElB,iBAAoC;AACpC,mBAAkB;AA4BT;AA1BF,IAAM,SAAS,aAAAA,QAAM,WAG1B,CAAC;AAAA,EACD,UAAU;AAAA,EACV;AAAA,EACA,OAAO;AAAA,EACP,UAAU;AAAA,EACV,GAAG;AACL,GAAG,QAAQ;AACT,QAAM,aAAgD;AAAA,IACpD,SAAS;AAAA,IACT,WAAW;AAAA,IACX,SAAS;AAAA,EACX,EAAY,OAAO,KAAK;AAExB,QAAM,EAAE,UAAU,QAAQ,KAAK,GAAG,GAAG,WAAW,IAAI;AACpD,QAAM,QAAI,aAAAC,SAAM,KAAK;AACrB,QAAM,cAAc,CAAC,UAAkB;AACrC,WAAO,EAAE;AAAA,MACP,EAAE,IAAI;AAAA,MACN,EAAE,YAAY;AAAA,MACd,EAAE,UAAU,KAAK,EAAE,OAAO,IAAI,QAAQ,CAAC;AAAA,IACzC,EAAE,SAAS;AAAA,EACb;AAEA,SAAO;AAAA,IAAC,WAAAC;AAAA,IAAA;AAAA,MACN,OAAO;AAAA,MACP,IAAI,QAAQ;AAAA,QACV,iBAAiB;AAAA,QACjB,OAAO,EAAE,OAAO,IAAI,UAAU;AAAA,QAC9B,WAAW;AAAA,UACT,iBAAiB,YAAY,EAAE;AAAA,QACjC;AAAA,QACA,YAAY;AAAA,UACV,iBAAiB,YAAY,EAAE;AAAA,QACjC;AAAA,MACF,IAAI,CAAC;AAAA,MACL;AAAA,MACA;AAAA,MACC,GAAG;AAAA,MAEH;AAAA;AAAA,EACH;AACF,CAAC;","names":["React","Color","JoyButton"]}
@@ -50,3 +50,4 @@ var Input = import_react.default.forwardRef(({
50
50
  0 && (module.exports = {
51
51
  Input
52
52
  });
53
+ //# sourceMappingURL=input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components-core-joy/input.tsx"],"sourcesContent":["'use client';\n\nimport React from 'react';\nimport { Input as DefaultInput } from \"../components-core\";\nimport { Input as JoyInput } from '@mui/joy';\n\nexport const Input = React.forwardRef<\n React.ElementRef<typeof DefaultInput>,\n React.ComponentProps<typeof DefaultInput>\n>(({\n color,\n size,\n ref: _,\n ...validProps\n}, ref) => {\n return <JoyInput {...validProps}/>;\n});"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,mBAAkB;AAElB,iBAAkC;AAWzB;AATF,IAAM,QAAQ,aAAAA,QAAM,WAGzB,CAAC;AAAA,EACD;AAAA,EACA;AAAA,EACA,KAAK;AAAA,EACL,GAAG;AACL,GAAG,QAAQ;AACT,SAAO,4CAAC,WAAAC,OAAA,EAAU,GAAG,YAAW;AAClC,CAAC;","names":["React","JoyInput"]}
@@ -49,3 +49,4 @@ var Separator = import_react.default.forwardRef(({
49
49
  0 && (module.exports = {
50
50
  Separator
51
51
  });
52
+ //# sourceMappingURL=separator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components-core-joy/separator.tsx"],"sourcesContent":["'use client';\n\nimport React from \"react\";\nimport { Separator as DefaultDevider } from \"../components-core\";\nimport { Divider as JoySeparator } from '@mui/joy';\n\nexport const Separator = React.forwardRef<\n React.ElementRef<typeof DefaultDevider>,\n React.ComponentProps<typeof DefaultDevider>\n>(({\n orientation,\n ref: _,\n ...validProps\n}, ref) => {\n return <JoySeparator {...validProps} orientation={orientation} />;\n});"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,mBAAkB;AAElB,iBAAwC;AAU/B;AARF,IAAM,YAAY,aAAAA,QAAM,WAG7B,CAAC;AAAA,EACD;AAAA,EACA,KAAK;AAAA,EACL,GAAG;AACL,GAAG,QAAQ;AACT,SAAO,4CAAC,WAAAC,SAAA,EAAc,GAAG,YAAY,aAA0B;AACjE,CAAC;","names":["React","JoySeparator"]}
@@ -64,3 +64,4 @@ var TabsContent = import_react.default.forwardRef((props, ref) => {
64
64
  TabsList,
65
65
  TabsTrigger
66
66
  });
67
+ //# sourceMappingURL=tabs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components-core-joy/tabs.tsx"],"sourcesContent":["'use client';\n\nimport React from 'react';\nimport { Tabs as DefaultTabs, TabsList as DefaultTabsList, TabsTrigger as DefaultTabsTrigger, TabsContent as DefaultTabsContent } from \"../components-core\";\nimport { Tabs as JoyTabs, TabList as JoyTabsList, Tab as JoyTabsTrigger, TabPanel as JoyTabssContent } from '@mui/joy';\n\nexport const Tabs = React.forwardRef<\n React.ElementRef<typeof DefaultTabs>,\n React.ComponentProps<typeof DefaultTabs>\n>((props, ref) => {\n const { color, onChange, ref: _, ...validProps } = props; // TODO: add onChange\n return <JoyTabs ref={ref} sx={{ bgcolor: \"transparent\" }} {...validProps}/>;\n});\n\nexport const TabsList = React.forwardRef<\n React.ElementRef<typeof DefaultTabsList>,\n React.ComponentProps<typeof DefaultTabsList>\n>((props, ref) => {\n const { color, ref: _, ...validProps } = props;\n return <JoyTabsList ref={ref} {...validProps}/>;\n});\n\nexport const TabsTrigger = React.forwardRef<\n React.ElementRef<typeof DefaultTabsTrigger>,\n React.ComponentProps<typeof DefaultTabsTrigger>\n>((props, ref) => {\n const { style, color, onChange, ref: _, ...validProps } = props; // TODO: add onChange\n return <JoyTabsTrigger ref={ref} {...validProps} style={{ flexGrow: 1, ...style }}/>;\n});\n\nexport const TabsContent = React.forwardRef<\n React.ElementRef<typeof DefaultTabsContent>,\n React.ComponentProps<typeof DefaultTabsContent>\n>((props, ref) => {\n const { color, ref: _, ...validProps } = props;\n return <JoyTabssContent ref={ref} {...validProps}/>;\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,mBAAkB;AAElB,iBAA4G;AAOnG;AALF,IAAM,OAAO,aAAAA,QAAM,WAGxB,CAAC,OAAO,QAAQ;AAChB,QAAM,EAAE,OAAO,UAAU,KAAK,GAAG,GAAG,WAAW,IAAI;AACnD,SAAO,4CAAC,WAAAC,MAAA,EAAQ,KAAU,IAAI,EAAE,SAAS,cAAc,GAAI,GAAG,YAAW;AAC3E,CAAC;AAEM,IAAM,WAAW,aAAAD,QAAM,WAG5B,CAAC,OAAO,QAAQ;AAChB,QAAM,EAAE,OAAO,KAAK,GAAG,GAAG,WAAW,IAAI;AACzC,SAAO,4CAAC,WAAAE,SAAA,EAAY,KAAW,GAAG,YAAW;AAC/C,CAAC;AAEM,IAAM,cAAc,aAAAF,QAAM,WAG/B,CAAC,OAAO,QAAQ;AAChB,QAAM,EAAE,OAAO,OAAO,UAAU,KAAK,GAAG,GAAG,WAAW,IAAI;AAC1D,SAAO,4CAAC,WAAAG,KAAA,EAAe,KAAW,GAAG,YAAY,OAAO,EAAE,UAAU,GAAG,GAAG,MAAM,GAAE;AACpF,CAAC;AAEM,IAAM,cAAc,aAAAH,QAAM,WAG/B,CAAC,OAAO,QAAQ;AAChB,QAAM,EAAE,OAAO,KAAK,GAAG,GAAG,WAAW,IAAI;AACzC,SAAO,4CAAC,WAAAI,UAAA,EAAgB,KAAW,GAAG,YAAW;AACnD,CAAC;","names":["React","JoyTabs","JoyTabsList","JoyTabsTrigger","JoyTabssContent"]}
@@ -67,3 +67,4 @@ var Text = import_react.default.forwardRef((props, ref) => {
67
67
  0 && (module.exports = {
68
68
  Text
69
69
  });
70
+ //# sourceMappingURL=text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components-core-joy/text.tsx"],"sourcesContent":["'use client';\n\nimport React from 'react';\nimport { Text as DefaultText } from \"../components-core\";\nimport { Typography as JoyText } from '@mui/joy';\n\nexport const Text = React.forwardRef<\n React.ElementRef<typeof DefaultText>,\n React.ComponentProps<typeof DefaultText>\n>((props, ref) => {\n const { color, size, as, variant, ref: _, ...validProps } = props;\n const muiLevel = ({\n h1: 'h1',\n h2: 'h2',\n h3: 'h3',\n h4: 'h4',\n h5: 'h4',\n h6: 'h4',\n p: ({\n xl: 'body-lg',\n lg: 'body-lg',\n md: 'body-md',\n sm: 'body-sm',\n xs: 'body-xs'\n } as const)[size || 'md']\n } as const)[as || 'p'];\n const muiColor = ({\n primary: undefined,\n secondary: 'neutral',\n success: 'success',\n warning: 'danger',\n } as const)[variant || 'primary'];\n\n return <JoyText level={muiLevel} color={muiColor} {...validProps}/>;\n});"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,mBAAkB;AAElB,iBAAsC;AA6B7B;AA3BF,IAAM,OAAO,aAAAA,QAAM,WAGxB,CAAC,OAAO,QAAQ;AAChB,QAAM,EAAE,OAAO,MAAM,IAAI,SAAS,KAAK,GAAG,GAAG,WAAW,IAAI;AAC5D,QAAM,WAAY;AAAA,IAChB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,GAAI;AAAA,MACF,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IACN,EAAY,QAAQ,IAAI;AAAA,EAC1B,EAAY,MAAM,GAAG;AACrB,QAAM,WAAY;AAAA,IAChB,SAAS;AAAA,IACT,WAAW;AAAA,IACX,SAAS;AAAA,IACT,SAAS;AAAA,EACX,EAAY,WAAW,SAAS;AAEhC,SAAO,4CAAC,WAAAC,YAAA,EAAQ,OAAO,UAAU,OAAO,UAAW,GAAG,YAAW;AACnE,CAAC;","names":["React","JoyText"]}
@@ -225,3 +225,4 @@ function AccountSettings({ fullPage = false }) {
225
225
  return inner;
226
226
  }
227
227
  }
228
+ //# sourceMappingURL=account-settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components-page/account-settings.tsx"],"sourcesContent":["'use client';\n\nimport React from 'react';\nimport { PasswordField, useUser } from '..';\nimport RedirectMessageCard from '../components/redirect-message-card';\nimport { Text, Label, Input, Button, Card, CardHeader, CardContent, CardFooter, Container } from \"../components-core\";\nimport UserAvatar from '../components/user-avatar';\nimport { useState } from 'react';\nimport FormWarningText from '../components/form-warning';\nimport { getPasswordError } from '@stackframe/stack-shared/dist/helpers/password';\n\nfunction SettingSection(props: {\n title: string, \n desc: string, \n buttonText?: string, \n buttonDisabled?: boolean,\n onButtonClick?: React.ComponentProps<typeof Button>[\"onClick\"],\n buttonVariant?: 'primary' | 'secondary',\n children?: React.ReactNode, \n}) {\n return (\n <Card>\n <CardHeader>\n <Text size='xl' as='h2'>{props.title}</Text>\n <Text variant='secondary'>{props.desc}</Text>\n </CardHeader>\n {props.children && <CardContent>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1.5rem' }}>\n {props.children}\n </div>\n </CardContent>}\n {props.buttonText && <CardFooter>\n <div style={{ display: 'flex', justifyContent: 'flex-end', width: '100%' }}>\n <Button\n disabled={props.buttonDisabled}\n onClick={props.onButtonClick}\n variant={props.buttonVariant}\n >\n {props.buttonText}\n </Button>\n </div>\n </CardFooter>}\n </Card>\n );\n}\n\nfunction ProfileSection() {\n const user = useUser();\n const [userInfo, setUserInfo] = useState<{ displayName: string }>({ displayName: user?.displayName || '' });\n const [changed, setChanged] = useState(false);\n\n return (\n <SettingSection\n title='Profile'\n desc='Your profile information'\n buttonDisabled={!changed}\n buttonText='Save'\n onButtonClick={async () => {\n await user?.update(userInfo);\n setChanged(false);\n }}\n >\n <div style={{ display: 'flex', gap: '1rem', alignItems: 'center' }}>\n <UserAvatar user={user} size={60}/>\n <div style={{ display: 'flex', flexDirection: 'column' }}>\n <Text size='lg'>{user?.displayName}</Text>\n <Text variant='secondary' size='sm'>{user?.primaryEmail}</Text>\n </div>\n </div>\n\n <div style={{ display: 'flex', flexDirection: 'column' }}>\n <Label htmlFor='display-name'>Display Name</Label>\n <Input\n id='display-name'\n value={userInfo.displayName}\n onChange={(e) => {\n setUserInfo((i) => ({...i, displayName: e.target.value }));\n setChanged(true);\n }}\n />\n </div>\n </SettingSection>\n );\n}\n\nfunction EmailVerificationSection() {\n const user = useUser();\n const [emailSent, setEmailSent] = useState(false);\n\n return (\n <SettingSection\n title='Email Verification'\n desc='We want to make sure that you own the email address.'\n buttonDisabled={emailSent}\n buttonText={\n !user?.primaryEmailVerified ? \n emailSent ? \n 'Email sent!' : \n 'Send Email'\n : undefined\n }\n onButtonClick={async () => {\n await user?.sendVerificationEmail();\n setEmailSent(true);\n }}\n >\n {user?.primaryEmailVerified ? \n <Text variant='success'>Your email has been verified</Text> : \n <Text variant='warning'>Your email has not been verified</Text>}\n </SettingSection>\n );\n}\n\nfunction PasswordSection() {\n const user = useUser();\n const [oldPassword, setOldPassword] = useState<string>('');\n const [oldPasswordError, setOldPasswordError] = useState<string>('');\n const [newPassword, setNewPassword] = useState<string>('');\n const [newPasswordError, setNewPasswordError] = useState<string>('');\n\n if (!user?.hasPassword) {\n return null;\n }\n\n return (\n <SettingSection\n title='Password'\n desc='Change your password here.'\n buttonDisabled={!oldPassword || !newPassword}\n buttonText='Save'\n onButtonClick={async () => {\n if (oldPassword && newPassword) {\n const errorMessage = getPasswordError(newPassword);\n if (errorMessage) {\n setNewPasswordError(errorMessage.message);\n } else {\n const errorCode = await user?.updatePassword({ oldPassword, newPassword });\n if (errorCode) {\n setOldPasswordError('Incorrect password');\n } else {\n setOldPassword('');\n setNewPassword('');\n }\n }\n } else if (oldPassword && !newPassword) {\n setNewPasswordError('Please enter a new password');\n } else if (newPassword && !oldPassword) {\n setOldPasswordError('Please enter your old password');\n }\n }}\n >\n <div style={{ display: 'flex', flexDirection: 'column' }}>\n <Label htmlFor='old-password'>Old Password</Label>\n <PasswordField\n id='old-password' \n value={oldPassword} \n onChange={(e) => {\n setOldPassword(e.target.value);\n setOldPasswordError('');\n }}\n />\n <FormWarningText text={oldPasswordError} />\n </div>\n <div style={{ display: 'flex', flexDirection: 'column' }}>\n <Label htmlFor='new-password'>New Password</Label>\n <PasswordField\n id='new-password' \n value={newPassword} \n onChange={(e) => {\n setNewPassword(e.target.value);\n setNewPasswordError('');\n }}\n />\n <FormWarningText text={newPasswordError} />\n </div>\n </SettingSection>\n );\n}\n\nfunction SignOutSection() {\n const user = useUser();\n return (\n <SettingSection\n title='Sign out'\n desc='Sign out of your account on this device.'\n buttonVariant='secondary'\n buttonText='Sign Out'\n onButtonClick={() => user?.signOut()}\n >\n </SettingSection>\n );\n}\n\nexport default function AccountSettings({ fullPage=false }: { fullPage?: boolean }) {\n const user = useUser();\n if (!user) {\n return <RedirectMessageCard type='signedOut' fullPage={fullPage} />;\n }\n\n const inner = (\n <div style={{ padding: fullPage ? '1rem' : 0, display: 'flex', flexDirection: 'column', gap: '1.5rem' }}>\n <div>\n <Text size=\"xl\" as='h2' style={{ marginBottom: '0.5rem', fontWeight: '700' }}>Account Settings</Text>\n <Text variant='secondary'>Manage your account</Text>\n </div>\n \n <ProfileSection />\n <EmailVerificationSection />\n <PasswordSection />\n <SignOutSection />\n </div>\n );\n\n if (fullPage) {\n return (\n <Container size='sm'>\n {inner}\n </Container>\n );\n } else {\n return inner;\n }\n}\n"],"mappings":"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","names":["UserAvatar","FormWarningText","RedirectMessageCard"]}
@@ -78,3 +78,4 @@ function AuthPage({
78
78
  ] }) : project.credentialEnabled ? type === "sign-up" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import__.CredentialSignUp, {}) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_credential_sign_in.default, {}) : project.magicLinkEnabled ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_magic_link_sign_in.default, {}) : null
79
79
  ] });
80
80
  }
81
+ //# sourceMappingURL=auth-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components-page/auth-page.tsx"],"sourcesContent":["'use client';\n\nimport CredentialSignIn from '../components/credential-sign-in';\nimport SeparatorWithText from '../components/separator-with-text';\nimport OAuthGroup from '../components/oauth-group';\nimport CardFrame from '../components/card-frame';\nimport { useUser, useStackApp, CredentialSignUp } from '..';\nimport RedirectMessageCard from '../components/redirect-message-card';\nimport { Link, Tabs, TabsContent, TabsList, TabsTrigger, Text } from \"../components-core\";\nimport MagicLinkSignIn from '../components/magic-link-sign-in';\n\nexport default function AuthPage({ \n fullPage=false,\n type\n}: { \n fullPage?: boolean, \n type: 'sign-in' | 'sign-up',\n}) {\n const stackApp = useStackApp();\n const user = useUser();\n const project = stackApp.useProject();\n\n if (user) {\n return <RedirectMessageCard type='signedIn' fullPage={fullPage} />;\n }\n\n const enableSeparator = (project.credentialEnabled || project.magicLinkEnabled) && project.oauthProviders.filter(p => p.enabled).length > 0;\n\n return (\n <CardFrame fullPage={fullPage}>\n <div style={{ textAlign: 'center', marginBottom: '1.5rem' }}>\n <Text size=\"xl\" as='h2'>{type === 'sign-in' ? 'Sign in to your account' : 'Create a new account'}</Text>\n {type === 'sign-in' ? (\n <Text>\n {\"Don't have an account? \"}\n <Link href={stackApp.urls.signUp}>\n Sign up\n </Link>\n </Text>\n ) : (\n <Text>\n {\"Already have an account? \"}\n <Link href={stackApp.urls.signIn}>\n Sign in\n </Link>\n </Text>\n )}\n </div>\n <OAuthGroup type='signin'/>\n {enableSeparator && <SeparatorWithText text={'Or continue with'} />}\n {project.credentialEnabled && project.magicLinkEnabled ? (\n <Tabs defaultValue='magic-link'>\n <TabsList>\n <TabsTrigger value='magic-link'>Magic Link</TabsTrigger>\n <TabsTrigger value='password'>Password</TabsTrigger>\n </TabsList>\n <TabsContent value='magic-link'>\n <MagicLinkSignIn/>\n </TabsContent>\n <TabsContent value='password'>\n {type === 'sign-up' ? <CredentialSignUp/> : <CredentialSignIn/>}\n </TabsContent>\n </Tabs>\n ) : project.credentialEnabled ? (\n type === 'sign-up' ? <CredentialSignUp/> : <CredentialSignIn/>\n ) : project.magicLinkEnabled ? (\n <MagicLinkSignIn/>\n ) : null}\n </CardFrame>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,gCAA6B;AAC7B,iCAA8B;AAC9B,yBAAuB;AACvB,wBAAsB;AACtB,eAAuD;AACvD,mCAAgC;AAChC,6BAAqE;AACrE,gCAA4B;AAcjB;AAZI,SAAR,SAA0B;AAAA,EAC/B,WAAS;AAAA,EACT;AACF,GAGG;AACD,QAAM,eAAW,sBAAY;AAC7B,QAAM,WAAO,kBAAQ;AACrB,QAAM,UAAU,SAAS,WAAW;AAEpC,MAAI,MAAM;AACR,WAAO,4CAAC,6BAAAA,SAAA,EAAoB,MAAK,YAAW,UAAoB;AAAA,EAClE;AAEA,QAAM,mBAAmB,QAAQ,qBAAqB,QAAQ,qBAAqB,QAAQ,eAAe,OAAO,OAAK,EAAE,OAAO,EAAE,SAAS;AAE1I,SACE,6CAAC,kBAAAC,SAAA,EAAU,UACT;AAAA,iDAAC,SAAI,OAAO,EAAE,WAAW,UAAU,cAAc,SAAS,GACxD;AAAA,kDAAC,+BAAK,MAAK,MAAK,IAAG,MAAM,mBAAS,YAAY,4BAA4B,wBAAuB;AAAA,MAChG,SAAS,YACR,6CAAC,+BACE;AAAA;AAAA,QACD,4CAAC,+BAAK,MAAM,SAAS,KAAK,QAAQ,qBAElC;AAAA,SACF,IAEA,6CAAC,+BACE;AAAA;AAAA,QACD,4CAAC,+BAAK,MAAM,SAAS,KAAK,QAAQ,qBAElC;AAAA,SACF;AAAA,OAEJ;AAAA,IACA,4CAAC,mBAAAC,SAAA,EAAW,MAAK,UAAQ;AAAA,IACxB,mBAAmB,4CAAC,2BAAAC,SAAA,EAAkB,MAAM,oBAAoB;AAAA,IAChE,QAAQ,qBAAqB,QAAQ,mBACpC,6CAAC,+BAAK,cAAa,cACjB;AAAA,mDAAC,mCACC;AAAA,oDAAC,sCAAY,OAAM,cAAa,wBAAU;AAAA,QAC1C,4CAAC,sCAAY,OAAM,YAAW,sBAAQ;AAAA,SACxC;AAAA,MACA,4CAAC,sCAAY,OAAM,cACjB,sDAAC,0BAAAC,SAAA,EAAe,GAClB;AAAA,MACA,4CAAC,sCAAY,OAAM,YAChB,mBAAS,YAAY,4CAAC,6BAAgB,IAAK,4CAAC,0BAAAC,SAAA,EAAgB,GAC/D;AAAA,OACF,IACE,QAAQ,oBACV,SAAS,YAAY,4CAAC,6BAAgB,IAAK,4CAAC,0BAAAA,SAAA,EAAgB,IAC1D,QAAQ,mBACV,4CAAC,0BAAAD,SAAA,EAAe,IACd;AAAA,KACN;AAEJ;","names":["RedirectMessageCard","CardFrame","OAuthGroup","SeparatorWithText","MagicLinkSignIn","CredentialSignIn"]}
@@ -64,3 +64,4 @@ function EmailVerification({
64
64
  }
65
65
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_redirect_message_card.default, { type: "emailVerified", fullPage });
66
66
  }
67
+ //# sourceMappingURL=email-verification.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components-page/email-verification.tsx"],"sourcesContent":["'use client';\n\nimport { use } from \"react\";\nimport { useStackApp } from \"..\";\nimport MessageCard from \"../components/message-card\";\nimport RedirectMessageCard from \"../components/redirect-message-card\";\nimport { KnownErrors } from \"@stackframe/stack-shared\";\n\nexport default function EmailVerification({ \n searchParams: {\n code = \"\",\n } = {},\n fullPage = false,\n}: { \n searchParams?: Record<string, string>,\n fullPage?: boolean,\n}) {\n const stackApp = useStackApp();\n\n const invalidJsx = (\n <MessageCard title=\"Invalid Verification Link\" fullPage={fullPage}>\n <p>Please check if you have the correct link. If you continue to have issues, please contact support.</p>\n </MessageCard>\n );\n\n const expiredJsx = (\n <MessageCard title=\"Expired Verification Link\" fullPage={fullPage}>\n <p>Your email verification link has expired. Please request a new verification link from your account settings.</p>\n </MessageCard>\n );\n\n if (!code) {\n return invalidJsx;\n }\n\n const error = use(stackApp.verifyEmail(code));\n\n if (error instanceof KnownErrors.EmailVerificationCodeNotFound) {\n return invalidJsx;\n } else if (error instanceof KnownErrors.EmailVerificationCodeExpired) {\n return expiredJsx;\n } else if (error instanceof KnownErrors.EmailVerificationCodeAlreadyUsed) {\n // everything fine, continue\n } else if (error) {\n throw error;\n }\n\n return <RedirectMessageCard type='emailVerified' fullPage={fullPage} />;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,mBAAoB;AACpB,eAA4B;AAC5B,0BAAwB;AACxB,mCAAgC;AAChC,0BAA4B;AAetB;AAbS,SAAR,kBAAmC;AAAA,EACxC,cAAc;AAAA,IACZ,OAAO;AAAA,EACT,IAAI,CAAC;AAAA,EACL,WAAW;AACb,GAGG;AACD,QAAM,eAAW,sBAAY;AAE7B,QAAM,aACJ,4CAAC,oBAAAA,SAAA,EAAY,OAAM,6BAA4B,UAC7C,sDAAC,OAAE,gHAAkG,GACvG;AAGF,QAAM,aACJ,4CAAC,oBAAAA,SAAA,EAAY,OAAM,6BAA4B,UAC7C,sDAAC,OAAE,0HAA4G,GACjH;AAGF,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACT;AAEA,QAAM,YAAQ,kBAAI,SAAS,YAAY,IAAI,CAAC;AAE5C,MAAI,iBAAiB,gCAAY,+BAA+B;AAC9D,WAAO;AAAA,EACT,WAAW,iBAAiB,gCAAY,8BAA8B;AACpE,WAAO;AAAA,EACT,WAAW,iBAAiB,gCAAY,kCAAkC;AAAA,EAE1E,WAAW,OAAO;AAChB,UAAM;AAAA,EACR;AAEA,SAAO,4CAAC,6BAAAC,SAAA,EAAoB,MAAK,iBAAgB,UAAoB;AACvE;","names":["MessageCard","RedirectMessageCard"]}
@@ -63,3 +63,4 @@ function ForgotPassword({ fullPage = false }) {
63
63
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_forgot_password.default, { onSent: () => setSent(true) })
64
64
  ] });
65
65
  }
66
+ //# sourceMappingURL=forgot-password.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components-page/forgot-password.tsx"],"sourcesContent":["'use client';\n\nimport ForgotPasswordElement from \"../components/forgot-password\";\nimport CardFrame from \"../components/card-frame\";\nimport { useUser, useStackApp } from \"..\";\nimport RedirectMessageCard from \"../components/redirect-message-card\";\nimport { useState } from \"react\";\nimport { Link, Text } from \"../components-core\";\n\n\nexport default function ForgotPassword({ fullPage=false }: { fullPage?: boolean }) {\n const stackApp = useStackApp();\n const user = useUser();\n const [sent, setSent] = useState(false);\n\n if (user) {\n return <RedirectMessageCard type='signedIn' fullPage={fullPage} />;\n }\n\n if (sent) {\n return <RedirectMessageCard type='emailSent' fullPage={fullPage} />;\n }\n\n return (\n <CardFrame fullPage={fullPage}>\n <div style={{ textAlign: 'center', marginBottom: '1.5rem' }}>\n <Text size=\"xl\" as='h2'>Reset Your Password</Text>\n <Text>\n {\"Don't need to reset? \"}\n <Link href={stackApp.urls['signUp']}>\n Sign In\n </Link>\n </Text>\n </div>\n <ForgotPasswordElement onSent={() => setSent(true)} />\n </CardFrame>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,6BAAkC;AAClC,wBAAsB;AACtB,eAAqC;AACrC,mCAAgC;AAChC,mBAAyB;AACzB,6BAA2B;AAShB;AANI,SAAR,eAAgC,EAAE,WAAS,MAAM,GAA2B;AACjF,QAAM,eAAW,sBAAY;AAC7B,QAAM,WAAO,kBAAQ;AACrB,QAAM,CAAC,MAAM,OAAO,QAAI,uBAAS,KAAK;AAEtC,MAAI,MAAM;AACR,WAAO,4CAAC,6BAAAA,SAAA,EAAoB,MAAK,YAAW,UAAoB;AAAA,EAClE;AAEA,MAAI,MAAM;AACR,WAAO,4CAAC,6BAAAA,SAAA,EAAoB,MAAK,aAAY,UAAoB;AAAA,EACnE;AAEA,SACE,6CAAC,kBAAAC,SAAA,EAAU,UACT;AAAA,iDAAC,SAAI,OAAO,EAAE,WAAW,UAAU,cAAc,SAAS,GACxD;AAAA,kDAAC,+BAAK,MAAK,MAAK,IAAG,MAAK,iCAAmB;AAAA,MAC3C,6CAAC,+BACE;AAAA;AAAA,QACD,4CAAC,+BAAK,MAAM,SAAS,KAAK,QAAQ,GAAG,qBAErC;AAAA,SACF;AAAA,OACF;AAAA,IACA,4CAAC,uBAAAC,SAAA,EAAsB,QAAQ,MAAM,QAAQ,IAAI,GAAG;AAAA,KACtD;AAEJ;","names":["RedirectMessageCard","CardFrame","ForgotPasswordElement"]}
@@ -55,7 +55,7 @@ function MagicLinkCallback({
55
55
  }
56
56
  const invalidJsx = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_message_card.default, { title: "Invalid Magic Link", fullPage, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { children: "Please check if you have the correct link. If you continue to have issues, please contact support." }) });
57
57
  const expiredJsx = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_message_card.default, { title: "Expired Magic Link", fullPage, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { children: "Your magic link has expired. Please request a new magic link if you need to sign-in." }) });
58
- const allredyUsedJsx = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_message_card.default, { title: "Magic Link Already Used", fullPage, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { children: "The magic link has already been used. The link can only be used once. Please request a new magic link if you need to sign-in again." }) });
58
+ const alreadyUsedJsx = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_message_card.default, { title: "Magic Link Already Used", fullPage, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { children: "The magic link has already been used. The link can only be used once. Please request a new magic link if you need to sign-in again." }) });
59
59
  if (!code) {
60
60
  return invalidJsx;
61
61
  }
@@ -65,9 +65,10 @@ function MagicLinkCallback({
65
65
  } else if (error instanceof import_stack_shared.KnownErrors.MagicLinkCodeExpired) {
66
66
  return expiredJsx;
67
67
  } else if (error instanceof import_stack_shared.KnownErrors.MagicLinkCodeAlreadyUsed) {
68
- return allredyUsedJsx;
68
+ return alreadyUsedJsx;
69
69
  } else if (error) {
70
70
  throw error;
71
71
  }
72
72
  (0, import_react.use)((0, import_promises.neverResolve)());
73
73
  }
74
+ //# sourceMappingURL=magic-link-callback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components-page/magic-link-callback.tsx"],"sourcesContent":["'use client';\n\nimport { use } from \"react\";\nimport { useStackApp, useUser } from \"..\";\nimport MessageCard from \"../components/message-card\";\nimport RedirectMessageCard from \"../components/redirect-message-card\";\nimport { KnownErrors } from \"@stackframe/stack-shared\";\nimport { neverResolve } from \"@stackframe/stack-shared/dist/utils/promises\";\n\nexport default function MagicLinkCallback({ \n searchParams: {\n code = \"\",\n } = {},\n fullPage = false,\n}: { \n searchParams?: Record<string, string>,\n fullPage?: boolean,\n}) {\n const stackApp = useStackApp();\n const user = useUser();\n\n if (user) {\n return <RedirectMessageCard type='signedIn' fullPage={fullPage} />;\n }\n\n const invalidJsx = (\n <MessageCard title=\"Invalid Magic Link\" fullPage={fullPage}>\n <p>Please check if you have the correct link. If you continue to have issues, please contact support.</p>\n </MessageCard>\n );\n\n const expiredJsx = (\n <MessageCard title=\"Expired Magic Link\" fullPage={fullPage}>\n <p>Your magic link has expired. Please request a new magic link if you need to sign-in.</p>\n </MessageCard>\n );\n\n const alreadyUsedJsx = (\n <MessageCard title=\"Magic Link Already Used\" fullPage={fullPage}>\n <p>The magic link has already been used. The link can only be used once. Please request a new magic link if you need to sign-in again.</p>\n </MessageCard>\n );\n\n if (!code) {\n return invalidJsx;\n }\n\n const error = use(stackApp.signInWithMagicLink(code));\n\n if (error instanceof KnownErrors.MagicLinkCodeNotFound) {\n return invalidJsx;\n } else if (error instanceof KnownErrors.MagicLinkCodeExpired) {\n return expiredJsx;\n } else if (error instanceof KnownErrors.MagicLinkCodeAlreadyUsed) {\n return alreadyUsedJsx;\n } else if (error) {\n throw error;\n }\n\n use(neverResolve());\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,mBAAoB;AACpB,eAAqC;AACrC,0BAAwB;AACxB,mCAAgC;AAChC,0BAA4B;AAC5B,sBAA6B;AAelB;AAbI,SAAR,kBAAmC;AAAA,EACxC,cAAc;AAAA,IACZ,OAAO;AAAA,EACT,IAAI,CAAC;AAAA,EACL,WAAW;AACb,GAGG;AACD,QAAM,eAAW,sBAAY;AAC7B,QAAM,WAAO,kBAAQ;AAErB,MAAI,MAAM;AACR,WAAO,4CAAC,6BAAAA,SAAA,EAAoB,MAAK,YAAW,UAAoB;AAAA,EAClE;AAEA,QAAM,aACJ,4CAAC,oBAAAC,SAAA,EAAY,OAAM,sBAAqB,UACtC,sDAAC,OAAE,gHAAkG,GACvG;AAGF,QAAM,aACJ,4CAAC,oBAAAA,SAAA,EAAY,OAAM,sBAAqB,UACtC,sDAAC,OAAE,kGAAoF,GACzF;AAGF,QAAM,iBACJ,4CAAC,oBAAAA,SAAA,EAAY,OAAM,2BAA0B,UAC3C,sDAAC,OAAE,iJAAmI,GACxI;AAGF,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACT;AAEA,QAAM,YAAQ,kBAAI,SAAS,oBAAoB,IAAI,CAAC;AAEpD,MAAI,iBAAiB,gCAAY,uBAAuB;AACtD,WAAO;AAAA,EACT,WAAW,iBAAiB,gCAAY,sBAAsB;AAC5D,WAAO;AAAA,EACT,WAAW,iBAAiB,gCAAY,0BAA0B;AAChE,WAAO;AAAA,EACT,WAAW,OAAO;AAChB,UAAM;AAAA,EACR;AAEA,4BAAI,8BAAa,CAAC;AACpB;","names":["RedirectMessageCard","MessageCard"]}
@@ -60,3 +60,4 @@ function OAuthCallback() {
60
60
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { children: "This is most likely an error in Stack. Please report it." })
61
61
  ] }) : null });
62
62
  }
63
+ //# sourceMappingURL=oauth-callback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components-page/oauth-callback.tsx"],"sourcesContent":["'use client';\n\nimport { useRef, useEffect, useState } from \"react\";\nimport { useStackApp } from \"..\";\nimport { runAsynchronously } from \"@stackframe/stack-shared/dist/utils/promises\";\nimport MessageCard from \"../components/message-card\";\n\nexport default function OAuthCallback () {\n const app = useStackApp();\n const called = useRef(false);\n const [error, setError] = useState<unknown>(null);\n\n useEffect(() => runAsynchronously(async () => {\n if (called.current) return;\n called.current = true;\n try {\n await app.callOAuthCallback();\n } catch (e: any) {\n setError(e);\n }\n }), []);\n\n return <MessageCard title='Redirecting...' fullPage>\n {error ? <div>\n <p>Something went wrong while processing the OAuth callback:</p>\n <pre>{JSON.stringify(error, null, 2)}</pre>\n <p>This is most likely an error in Stack. Please report it.</p>\n </div> : null}\n </MessageCard>;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,mBAA4C;AAC5C,eAA4B;AAC5B,sBAAkC;AAClC,0BAAwB;AAkBX;AAhBE,SAAR,gBAAkC;AACvC,QAAM,UAAM,sBAAY;AACxB,QAAM,aAAS,qBAAO,KAAK;AAC3B,QAAM,CAAC,OAAO,QAAQ,QAAI,uBAAkB,IAAI;AAEhD,8BAAU,UAAM,mCAAkB,YAAY;AAC5C,QAAI,OAAO;AAAS;AACpB,WAAO,UAAU;AACjB,QAAI;AACF,YAAM,IAAI,kBAAkB;AAAA,IAC9B,SAAS,GAAQ;AACf,eAAS,CAAC;AAAA,IACZ;AAAA,EACF,CAAC,GAAG,CAAC,CAAC;AAEN,SAAO,4CAAC,oBAAAA,SAAA,EAAY,OAAM,kBAAiB,UAAQ,MAChD,kBAAQ,6CAAC,SACR;AAAA,gDAAC,OAAE,uEAAyD;AAAA,IAC5D,4CAAC,SAAK,eAAK,UAAU,OAAO,MAAM,CAAC,GAAE;AAAA,IACrC,4CAAC,OAAE,sEAAwD;AAAA,KAC7D,IAAS,MACX;AACF;","names":["MessageCard"]}
@@ -70,3 +70,4 @@ function PasswordReset({
70
70
  }
71
71
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_password_reset_inner.default, { code, fullPage });
72
72
  }
73
+ //# sourceMappingURL=password-reset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components-page/password-reset.tsx"],"sourcesContent":["'use client';\n\nimport MessageCard from \"../components/message-card\";\nimport { StackClientApp, useStackApp } from \"..\";\nimport { use } from \"react\";\nimport PasswordResetInner from \"../components/password-reset-inner\";\nimport { cacheFunction } from \"@stackframe/stack-shared/dist/utils/caches\";\nimport { Text } from \"../components-core\";\nimport { KnownErrors } from \"@stackframe/stack-shared\";\nimport React from \"react\";\n\nconst cachedVerifyPasswordResetCode = cacheFunction(async (stackApp: StackClientApp<true>, code: string) => {\n return await stackApp.verifyPasswordResetCode(code);\n});\n\nexport default function PasswordReset({\n searchParams,\n fullPage = false,\n}: { \n searchParams?: Record<string, string>,\n fullPage?: boolean, \n}) {\n const stackApp = useStackApp();\n\n const invalidJsx = (\n <MessageCard title=\"Invalid Password Reset Link\" fullPage={fullPage}>\n <Text>Please double check if you have the correct password reset link.</Text>\n </MessageCard>\n );\n\n const expiredJsx = (\n <MessageCard title=\"Expired Password Reset Link\" fullPage={fullPage}>\n <Text>Your password reset link has expired. Please request a new password reset link from the login page.</Text>\n </MessageCard>\n );\n\n const usedJsx = (\n <MessageCard title=\"Used Password Reset Link\" fullPage={fullPage}>\n <Text>This password reset link has already been used. If you need to reset your password again, please request a new password reset link from the login page.</Text>\n </MessageCard>\n );\n\n const code = searchParams?.code;\n if (!code) {\n return invalidJsx;\n }\n\n const error = use(cachedVerifyPasswordResetCode(stackApp, code));\n \n if (error instanceof KnownErrors.PasswordResetCodeNotFound) {\n return invalidJsx;\n } else if (error instanceof KnownErrors.PasswordResetCodeExpired) {\n return expiredJsx;\n } else if (error instanceof KnownErrors.PasswordResetCodeAlreadyUsed) {\n return usedJsx;\n } else if (error) {\n throw error;\n }\n\n return <PasswordResetInner code={code} fullPage={fullPage} />;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,0BAAwB;AACxB,eAA4C;AAC5C,mBAAoB;AACpB,kCAA+B;AAC/B,oBAA8B;AAC9B,6BAAqB;AACrB,0BAA4B;AAkBtB;AAfN,IAAM,oCAAgC,6BAAc,OAAO,UAAgC,SAAiB;AAC1G,SAAO,MAAM,SAAS,wBAAwB,IAAI;AACpD,CAAC;AAEc,SAAR,cAA+B;AAAA,EACpC;AAAA,EACA,WAAW;AACb,GAGG;AACD,QAAM,eAAW,sBAAY;AAE7B,QAAM,aACJ,4CAAC,oBAAAA,SAAA,EAAY,OAAM,+BAA8B,UAC/C,sDAAC,+BAAK,8EAAgE,GACxE;AAGF,QAAM,aACJ,4CAAC,oBAAAA,SAAA,EAAY,OAAM,+BAA8B,UAC/C,sDAAC,+BAAK,iHAAmG,GAC3G;AAGF,QAAM,UACJ,4CAAC,oBAAAA,SAAA,EAAY,OAAM,4BAA2B,UAC5C,sDAAC,+BAAK,qKAAuJ,GAC/J;AAGF,QAAM,OAAO,cAAc;AAC3B,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACT;AAEA,QAAM,YAAQ,kBAAI,8BAA8B,UAAU,IAAI,CAAC;AAE/D,MAAI,iBAAiB,gCAAY,2BAA2B;AAC1D,WAAO;AAAA,EACT,WAAW,iBAAiB,gCAAY,0BAA0B;AAChE,WAAO;AAAA,EACT,WAAW,iBAAiB,gCAAY,8BAA8B;AACpE,WAAO;AAAA,EACT,WAAW,OAAO;AAChB,UAAM;AAAA,EACR;AAEA,SAAO,4CAAC,4BAAAC,SAAA,EAAmB,MAAY,UAAoB;AAC7D;","names":["MessageCard","PasswordResetInner"]}
@@ -40,3 +40,4 @@ var import_jsx_runtime = require("react/jsx-runtime");
40
40
  function SignIn({ fullPage = false }) {
41
41
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_auth_page.default, { fullPage, type: "sign-in" });
42
42
  }
43
+ //# sourceMappingURL=sign-in.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components-page/sign-in.tsx"],"sourcesContent":["'use client';\nimport AuthPage from './auth-page';\n\nexport default function SignIn({ fullPage=false }: { fullPage?: boolean }) {\n return <AuthPage fullPage={fullPage} type='sign-in' />;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,uBAAqB;AAGZ;AADM,SAAR,OAAwB,EAAE,WAAS,MAAM,GAA2B;AACzE,SAAO,4CAAC,iBAAAA,SAAA,EAAS,UAAoB,MAAK,WAAU;AACtD;","names":["AuthPage"]}
@@ -46,3 +46,4 @@ function Signout() {
46
46
  }
47
47
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_redirect_message_card.default, { type: "signedOut", fullPage: true });
48
48
  }
49
+ //# sourceMappingURL=sign-out.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components-page/sign-out.tsx"],"sourcesContent":["'use client';\n\nimport { use } from \"react\";\nimport { useUser } from \"..\";\nimport GoHomeMessageCard from \"../components/redirect-message-card\";\n\nexport default function Signout() {\n const user = useUser();\n \n if (user) {\n use(user.signOut());\n }\n \n return <GoHomeMessageCard type='signedOut' fullPage />;\n}"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,mBAAoB;AACpB,eAAwB;AACxB,mCAA8B;AASrB;AAPM,SAAR,UAA2B;AAChC,QAAM,WAAO,kBAAQ;AAErB,MAAI,MAAM;AACR,0BAAI,KAAK,QAAQ,CAAC;AAAA,EACpB;AAEA,SAAO,4CAAC,6BAAAA,SAAA,EAAkB,MAAK,aAAY,UAAQ,MAAC;AACtD;","names":["GoHomeMessageCard"]}
@@ -40,3 +40,4 @@ var import_jsx_runtime = require("react/jsx-runtime");
40
40
  function SignUp({ fullPage = false }) {
41
41
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_auth_page.default, { fullPage, type: "sign-up" });
42
42
  }
43
+ //# sourceMappingURL=sign-up.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components-page/sign-up.tsx"],"sourcesContent":["'use client';\nimport AuthPage from './auth-page';\n\nexport default function SignUp({ fullPage=false }: { fullPage?: boolean }) {\n return <AuthPage fullPage={fullPage} type='sign-up' />;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,uBAAqB;AAGZ;AADM,SAAR,OAAwB,EAAE,WAAS,MAAM,GAA2B;AACzE,SAAO,4CAAC,iBAAAA,SAAA,EAAS,UAAoB,MAAK,WAAU;AACtD;","names":["AuthPage"]}
@@ -4,6 +4,7 @@ import '@stackframe/stack-shared';
4
4
  import '@stackframe/stack-shared/dist/interface/clientInterface';
5
5
  import '@stackframe/stack-shared/dist/utils/json';
6
6
  import '@stackframe/stack-shared/dist/interface/adminInterface';
7
+ import '@stackframe/stack-shared/dist/interface/serverInterface';
7
8
 
8
9
  declare function StackHandler<HasTokenStore extends boolean>({ app, params: { stack }, searchParams, }: {
9
10
  app: StackServerApp<HasTokenStore>;
@@ -4,6 +4,7 @@ import '@stackframe/stack-shared';
4
4
  import '@stackframe/stack-shared/dist/interface/clientInterface';
5
5
  import '@stackframe/stack-shared/dist/utils/json';
6
6
  import '@stackframe/stack-shared/dist/interface/adminInterface';
7
+ import '@stackframe/stack-shared/dist/interface/serverInterface';
7
8
 
8
9
  declare function StackHandler<HasTokenStore extends boolean>({ app, params: { stack }, searchParams, }: {
9
10
  app: StackServerApp<HasTokenStore>;
@@ -104,3 +104,4 @@ async function StackHandler({
104
104
  }
105
105
  }
106
106
  }
107
+ //# sourceMappingURL=stack-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components-page/stack-handler.tsx"],"sourcesContent":["import SignUp from \"./sign-up\";\nimport SignIn from \"./sign-in\";\nimport { RedirectType, notFound, redirect } from 'next/navigation';\nimport EmailVerification from \"./email-verification\";\nimport { PasswordReset, StackServerApp } from \"..\";\nimport MessageCard from \"../components/message-card\";\nimport { HandlerUrls } from \"../lib/stack-app\";\nimport Signout from \"./sign-out\";\nimport ForgotPassword from \"./forgot-password\";\nimport OAuthCallback from \"./oauth-callback\";\nimport AccountSettings from \"./account-settings\";\nimport MagicLinkCallback from \"./magic-link-callback\";\n\nexport default async function StackHandler<HasTokenStore extends boolean>({\n app,\n params: { stack } = {},\n searchParams = {},\n}: { \n app: StackServerApp<HasTokenStore>,\n params?: { stack?: string[] }, \n searchParams?: Record<string, string>,\n}) {\n if (!stack) {\n return (\n <MessageCard title=\"Invalid Stack Handler Setup\" fullPage>\n <p>Can't use Stack handler at this location. Make sure that the file is in a folder called [...stack].</p>\n </MessageCard>\n );\n }\n\n function redirectIfNotHandler(name: keyof HandlerUrls) {\n const url = app.urls[name];\n const handlerUrl = app.urls.handler;\n\n if (url.startsWith(handlerUrl)) {\n // don't redirect if the url is a handler url\n return;\n }\n\n redirect(url, RedirectType.replace);\n }\n\n const path = stack.join('/');\n switch (path) {\n case 'signin': {\n redirectIfNotHandler('signIn');\n return <SignIn fullPage/>;\n }\n case 'signup': {\n redirectIfNotHandler('signUp');\n return <SignUp fullPage/>;\n }\n case 'email-verification': {\n redirectIfNotHandler('emailVerification');\n return <EmailVerification searchParams={searchParams} fullPage/>;\n }\n case 'password-reset': {\n redirectIfNotHandler('passwordReset');\n return <PasswordReset searchParams={searchParams} fullPage />;\n }\n case 'forgot-password': {\n redirectIfNotHandler('forgotPassword');\n return <ForgotPassword fullPage />;\n }\n case 'signout': {\n redirectIfNotHandler('signOut');\n return <Signout/>;\n }\n case 'oauth-callback': {\n redirectIfNotHandler('oauthCallback');\n return <OAuthCallback />;\n }\n case 'account-settings': {\n redirectIfNotHandler('accountSettings');\n return <AccountSettings fullPage />;\n }\n case 'magic-link-callback': {\n redirectIfNotHandler('magicLinkCallback');\n return <MagicLinkCallback searchParams={searchParams} fullPage />;\n }\n default: {\n return notFound();\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAmB;AACnB,qBAAmB;AACnB,wBAAiD;AACjD,gCAA8B;AAC9B,eAA8C;AAC9C,0BAAwB;AAExB,sBAAoB;AACpB,6BAA2B;AAC3B,4BAA0B;AAC1B,8BAA4B;AAC5B,iCAA8B;AActB;AAZR,eAAO,aAAmE;AAAA,EACxE;AAAA,EACA,QAAQ,EAAE,MAAM,IAAI,CAAC;AAAA,EACrB,eAAe,CAAC;AAClB,GAIG;AACD,MAAI,CAAC,OAAO;AACV,WACE,4CAAC,oBAAAA,SAAA,EAAY,OAAM,+BAA8B,UAAQ,MACvD,sDAAC,OAAE,iHAAmG,GACxG;AAAA,EAEJ;AAEA,WAAS,qBAAqB,MAAyB;AACrD,UAAM,MAAM,IAAI,KAAK,IAAI;AACzB,UAAM,aAAa,IAAI,KAAK;AAE5B,QAAI,IAAI,WAAW,UAAU,GAAG;AAE9B;AAAA,IACF;AAEA,oCAAS,KAAK,+BAAa,OAAO;AAAA,EACpC;AAEA,QAAM,OAAO,MAAM,KAAK,GAAG;AAC3B,UAAQ,MAAM;AAAA,IACZ,KAAK,UAAU;AACb,2BAAqB,QAAQ;AAC7B,aAAO,4CAAC,eAAAC,SAAA,EAAO,UAAQ;AAAA,IACzB;AAAA,IACA,KAAK,UAAU;AACb,2BAAqB,QAAQ;AAC7B,aAAO,4CAAC,eAAAC,SAAA,EAAO,UAAQ;AAAA,IACzB;AAAA,IACA,KAAK,sBAAsB;AACzB,2BAAqB,mBAAmB;AACxC,aAAO,4CAAC,0BAAAC,SAAA,EAAkB,cAA4B,UAAQ;AAAA,IAChE;AAAA,IACA,KAAK,kBAAkB;AACrB,2BAAqB,eAAe;AACpC,aAAO,4CAAC,0BAAc,cAA4B,UAAQ,MAAC;AAAA,IAC7D;AAAA,IACA,KAAK,mBAAmB;AACtB,2BAAqB,gBAAgB;AACrC,aAAO,4CAAC,uBAAAC,SAAA,EAAe,UAAQ,MAAC;AAAA,IAClC;AAAA,IACA,KAAK,WAAW;AACd,2BAAqB,SAAS;AAC9B,aAAO,4CAAC,gBAAAC,SAAA,EAAO;AAAA,IACjB;AAAA,IACA,KAAK,kBAAkB;AACrB,2BAAqB,eAAe;AACpC,aAAO,4CAAC,sBAAAC,SAAA,EAAc;AAAA,IACxB;AAAA,IACA,KAAK,oBAAoB;AACvB,2BAAqB,iBAAiB;AACtC,aAAO,4CAAC,wBAAAC,SAAA,EAAgB,UAAQ,MAAC;AAAA,IACnC;AAAA,IACA,KAAK,uBAAuB;AAC1B,2BAAqB,mBAAmB;AACxC,aAAO,4CAAC,2BAAAC,SAAA,EAAkB,cAA4B,UAAQ,MAAC;AAAA,IACjE;AAAA,IACA,SAAS;AACP,iBAAO,4BAAS;AAAA,IAClB;AAAA,EACF;AACF;","names":["MessageCard","SignIn","SignUp","EmailVerification","ForgotPassword","Signout","OAuthCallback","AccountSettings","MagicLinkCallback"]}
@@ -37,3 +37,4 @@ function CardFrame({
37
37
  export {
38
38
  CardFrame as default
39
39
  };
40
+ //# sourceMappingURL=card-frame.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/card-frame.tsx"],"sourcesContent":["'use client';\n\nimport { Container } from \"../components-core\";\nimport React, { useEffect, useState } from \"react\";\n\nexport default function CardFrame({ \n children, \n fullPage=true\n}: { \n children: React.ReactNode, \n fullPage?: boolean, \n}) {\n const [hasNoParent, setHasNoParent] = useState(false);\n useEffect(() => {\n const component = document.getElementById('stack-card-frame');\n setHasNoParent(\n !component?.parentElement || \n component?.parentElement === document.body || \n component?.parentElement === document.documentElement\n );\n }, []);\n\n if (fullPage) {\n return (\n <div \n id='stack-card-frame' \n style={{ \n height: hasNoParent ? '100vh' : '100%',\n display: 'flex', \n alignItems: 'center', \n justifyContent: 'center',\n }}\n >\n <Container size={380} style={{ padding: '1rem 1rem' }}>\n {children}\n </Container>\n </div>\n );\n } else {\n return children;\n }\n \n}\n"],"mappings":";;;AAEA,SAAS,iBAAiB;AAC1B,SAAgB,WAAW,gBAAgB;AA8BnC;AA5BO,SAAR,UAA2B;AAAA,EAChC;AAAA,EACA,WAAS;AACX,GAGG;AACD,QAAM,CAAC,aAAa,cAAc,IAAI,SAAS,KAAK;AACpD,YAAU,MAAM;AACd,UAAM,YAAY,SAAS,eAAe,kBAAkB;AAC5D;AAAA,MACE,CAAC,WAAW,iBACZ,WAAW,kBAAkB,SAAS,QACtC,WAAW,kBAAkB,SAAS;AAAA,IACxC;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,MAAI,UAAU;AACZ,WACE;AAAA,MAAC;AAAA;AAAA,QACC,IAAG;AAAA,QACH,OAAO;AAAA,UACL,QAAQ,cAAc,UAAU;AAAA,UAChC,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,gBAAgB;AAAA,QAClB;AAAA,QAEA,8BAAC,aAAU,MAAM,KAAK,OAAO,EAAE,SAAS,YAAY,GACjD,UACH;AAAA;AAAA,IACF;AAAA,EAEJ,OAAO;AACL,WAAO;AAAA,EACT;AAEF;","names":[]}
@@ -80,3 +80,4 @@ function CredentialSignIn() {
80
80
  export {
81
81
  CredentialSignIn as default
82
82
  };
83
+ //# sourceMappingURL=credential-sign-in.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/credential-sign-in.tsx"],"sourcesContent":["'use client';\n\nimport { useState } from \"react\";\nimport FormWarningText from \"./form-warning\";\nimport PasswordField from \"./password-field\";\nimport { validateEmail } from \"../utils/email\";\nimport { useStackApp } from \"..\";\nimport { Button, Input, Label, Link } from \"../components-core\";\nimport { KnownErrors } from \"@stackframe/stack-shared\";\n\nexport default function CredentialSignIn() {\n const [email, setEmail] = useState('');\n const [emailError, setEmailError] = useState('');\n const [password, setPassword] = useState('');\n const [passwordError, setPasswordError] = useState('');\n const app = useStackApp();\n \n const onSubmit = async () => {\n if (!email) {\n setEmailError('Please enter your email');\n return;\n }\n if (!validateEmail(email)) {\n setEmailError('Please enter a valid email');\n return;\n }\n if (!password) {\n setPasswordError('Please enter your password');\n return;\n }\n \n const error = await app.signInWithCredential({ email, password });\n\n if (error instanceof KnownErrors.EmailPasswordMismatch) {\n setPasswordError('Wrong email or password');\n } else if (error) {\n setEmailError(`An error occurred. ${error.message}`);\n }\n };\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'stretch' }}>\n <Label htmlFor=\"email\">Email</Label>\n <Input\n id=\"email\"\n type=\"email\"\n name=\"email\"\n value={email}\n onChange={(e) => {\n setEmail(e.target.value);\n setEmailError('');\n }}\n />\n <FormWarningText text={emailError} />\n\n <Label htmlFor=\"password\" style={{ marginTop: '1rem' }}>Password</Label>\n <PasswordField\n id=\"password\"\n name=\"password\"\n value={password}\n onChange={(e) => {\n setPassword(e.target.value);\n setPasswordError('');\n }}\n />\n <FormWarningText text={passwordError} />\n\n <Link href={app.urls.forgotPassword} size='sm' style={{ marginTop: '0.5rem' }}>\n Forgot password?\n </Link>\n\n <Button\n style={{ marginTop: '1.5rem' }}\n onClick={onSubmit}\n >\n Sign In\n </Button>\n </div>\n );\n}\n"],"mappings":";;;AAEA,SAAS,gBAAgB;AACzB,OAAO,qBAAqB;AAC5B,OAAO,mBAAmB;AAC1B,SAAS,qBAAqB;AAC9B,SAAS,mBAAmB;AAC5B,SAAS,QAAQ,OAAO,OAAO,YAAY;AAC3C,SAAS,mBAAmB;AAiCxB,SACE,KADF;AA/BW,SAAR,mBAAoC;AACzC,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,EAAE;AACrC,QAAM,CAAC,YAAY,aAAa,IAAI,SAAS,EAAE;AAC/C,QAAM,CAAC,UAAU,WAAW,IAAI,SAAS,EAAE;AAC3C,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAAS,EAAE;AACrD,QAAM,MAAM,YAAY;AAExB,QAAM,WAAW,YAAY;AAC3B,QAAI,CAAC,OAAO;AACV,oBAAc,yBAAyB;AACvC;AAAA,IACF;AACA,QAAI,CAAC,cAAc,KAAK,GAAG;AACzB,oBAAc,4BAA4B;AAC1C;AAAA,IACF;AACA,QAAI,CAAC,UAAU;AACb,uBAAiB,4BAA4B;AAC7C;AAAA,IACF;AAEA,UAAM,QAAQ,MAAM,IAAI,qBAAqB,EAAE,OAAO,SAAS,CAAC;AAEhE,QAAI,iBAAiB,YAAY,uBAAuB;AACtD,uBAAiB,yBAAyB;AAAA,IAC5C,WAAW,OAAO;AAChB,oBAAc,sBAAsB,MAAM,OAAO,EAAE;AAAA,IACrD;AAAA,EACF;AAEA,SACE,qBAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,YAAY,UAAU,GAC5E;AAAA,wBAAC,SAAM,SAAQ,SAAQ,mBAAK;AAAA,IAC5B;AAAA,MAAC;AAAA;AAAA,QACC,IAAG;AAAA,QACH,MAAK;AAAA,QACL,MAAK;AAAA,QACL,OAAO;AAAA,QACP,UAAU,CAAC,MAAM;AACf,mBAAS,EAAE,OAAO,KAAK;AACvB,wBAAc,EAAE;AAAA,QAClB;AAAA;AAAA,IACF;AAAA,IACA,oBAAC,mBAAgB,MAAM,YAAY;AAAA,IAEnC,oBAAC,SAAM,SAAQ,YAAW,OAAO,EAAE,WAAW,OAAO,GAAG,sBAAQ;AAAA,IAChE;AAAA,MAAC;AAAA;AAAA,QACC,IAAG;AAAA,QACH,MAAK;AAAA,QACL,OAAO;AAAA,QACP,UAAU,CAAC,MAAM;AACf,sBAAY,EAAE,OAAO,KAAK;AAC1B,2BAAiB,EAAE;AAAA,QACrB;AAAA;AAAA,IACF;AAAA,IACA,oBAAC,mBAAgB,MAAM,eAAe;AAAA,IAEtC,oBAAC,QAAK,MAAM,IAAI,KAAK,gBAAgB,MAAK,MAAK,OAAO,EAAE,WAAW,SAAS,GAAG,8BAE/E;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACC,OAAO,EAAE,WAAW,SAAS;AAAA,QAC7B,SAAS;AAAA,QACV;AAAA;AAAA,IAED;AAAA,KACF;AAEJ;","names":[]}
@@ -112,3 +112,4 @@ function CredentialSignUp() {
112
112
  export {
113
113
  CredentialSignUp as default
114
114
  };
115
+ //# sourceMappingURL=credential-sign-up.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/credential-sign-up.tsx"],"sourcesContent":["'use client';\n\nimport { useState } from \"react\";\nimport PasswordField from \"./password-field\";\nimport FormWarningText from \"./form-warning\";\nimport { validateEmail } from \"../utils/email\";\nimport { getPasswordError } from \"@stackframe/stack-shared/dist/helpers/password\";\nimport { useStackApp } from \"..\";\nimport { Label, Input, Button } from \"../components-core\";\nimport { KnownErrors } from \"@stackframe/stack-shared\";\n\nexport default function CredentialSignUp() {\n const [email, setEmail] = useState('');\n const [emailError, setEmailError] = useState('');\n const [password, setPassword] = useState('');\n const [passwordError, setPasswordError] = useState('');\n const [passwordRepeat, setPasswordRepeat] = useState('');\n const [passwordRepeatError, setPasswordRepeatError] = useState('');\n const app = useStackApp();\n\n const onSubmit = async () => {\n if (!email) {\n setEmailError('Please enter your email');\n return;\n }\n if (!validateEmail(email)) {\n setEmailError('Please enter a valid email');\n return;\n }\n if (!password) {\n setPasswordError('Please enter your password');\n return;\n }\n if (!passwordRepeat) {\n setPasswordRepeatError('Please repeat your password');\n return;\n }\n if (password !== passwordRepeat) {\n setPasswordRepeatError('Passwords do not match');\n return;\n }\n\n const passwordError = getPasswordError(password);\n if (passwordError) {\n setPasswordError(passwordError.message);\n return;\n }\n\n let error;\n error = await app.signUpWithCredential({ email, password });\n \n if (error instanceof KnownErrors.UserEmailAlreadyExists) {\n setEmailError('User already exists');\n } else if (error) {\n setEmailError(`An error occurred. ${error.message}`);\n }\n };\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'stretch' }}>\n <Label htmlFor=\"email\">Email</Label>\n <Input\n id=\"email\"\n type=\"email\"\n name=\"email\"\n value={email}\n onChange={(e) => {\n setEmail(e.target.value);\n setEmailError('');\n }}\n />\n <FormWarningText text={emailError} />\n\n <Label htmlFor=\"password\" style={{ marginTop: '1rem' }}>Password</Label>\n <PasswordField\n id=\"password\"\n name=\"password\"\n value={password}\n onChange={(e) => {\n setPassword(e.target.value);\n setPasswordError('');\n setPasswordRepeatError('');\n }}\n />\n <FormWarningText text={passwordError} />\n \n <Label htmlFor=\"repeat-password\" style={{ marginTop: '1rem' }}>Repeat Password</Label>\n <PasswordField\n id=\"repeat-password\"\n name=\"repeat-password\"\n value={passwordRepeat}\n onChange={(e) => {\n setPasswordRepeat(e.target.value);\n setPasswordError('');\n setPasswordRepeatError('');\n }}\n />\n <FormWarningText text={passwordRepeatError} />\n\n <Button \n style={{ marginTop: '1.5rem' }}\n onClick={onSubmit}\n >\n Sign Up\n </Button>\n </div>\n );\n}\n"],"mappings":"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","names":["passwordError"]}
@@ -53,3 +53,4 @@ function ForgotPassword({ onSent }) {
53
53
  export {
54
54
  ForgotPassword as default
55
55
  };
56
+ //# sourceMappingURL=forgot-password.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/forgot-password.tsx"],"sourcesContent":["'use client';\n\nimport { useState } from \"react\";\nimport FormWarningText from \"./form-warning\";\nimport { validateEmail } from \"../utils/email\";\nimport { useStackApp } from \"..\";\nimport { Button, Input, Label } from \"../components-core\";\n\n\nexport default function ForgotPassword({ onSent }: { onSent?: () => void }) {\n const [email, setEmail] = useState('');\n const [emailError, setEmailError] = useState('');\n const stackApp = useStackApp();\n \n const onSubmit = async () => {\n if (!email) {\n setEmailError('Please enter your email');\n return;\n }\n if (!validateEmail(email)) {\n setEmailError('Please enter a valid email');\n return;\n }\n await stackApp.sendForgotPasswordEmail(email);\n\n onSent?.();\n };\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'stretch' }}>\n <Label htmlFor=\"email\">Your Email</Label>\n <Input\n id=\"email\"\n type=\"email\"\n name=\"email\"\n value={email}\n onChange={(e) => {\n setEmail(e.target.value);\n setEmailError('');\n }}\n />\n <FormWarningText text={emailError} />\n\n <Button\n style={{ marginTop: '1.5rem'}}\n onClick={onSubmit}\n >\n Send Email\n </Button>\n </div>\n );\n}\n"],"mappings":";;;AAEA,SAAS,gBAAgB;AACzB,OAAO,qBAAqB;AAC5B,SAAS,qBAAqB;AAC9B,SAAS,mBAAmB;AAC5B,SAAS,QAAQ,OAAO,aAAa;AAuBjC,SACE,KADF;AApBW,SAAR,eAAgC,EAAE,OAAO,GAA4B;AAC1E,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,EAAE;AACrC,QAAM,CAAC,YAAY,aAAa,IAAI,SAAS,EAAE;AAC/C,QAAM,WAAW,YAAY;AAE7B,QAAM,WAAW,YAAY;AAC3B,QAAI,CAAC,OAAO;AACV,oBAAc,yBAAyB;AACvC;AAAA,IACF;AACA,QAAI,CAAC,cAAc,KAAK,GAAG;AACzB,oBAAc,4BAA4B;AAC1C;AAAA,IACF;AACA,UAAM,SAAS,wBAAwB,KAAK;AAE5C,aAAS;AAAA,EACX;AAEA,SACE,qBAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,YAAY,UAAU,GAC5E;AAAA,wBAAC,SAAM,SAAQ,SAAQ,wBAAU;AAAA,IACjC;AAAA,MAAC;AAAA;AAAA,QACC,IAAG;AAAA,QACH,MAAK;AAAA,QACL,MAAK;AAAA,QACL,OAAO;AAAA,QACP,UAAU,CAAC,MAAM;AACf,mBAAS,EAAE,OAAO,KAAK;AACvB,wBAAc,EAAE;AAAA,QAClB;AAAA;AAAA,IACF;AAAA,IACA,oBAAC,mBAAgB,MAAM,YAAY;AAAA,IAEnC;AAAA,MAAC;AAAA;AAAA,QACC,OAAO,EAAE,WAAW,SAAQ;AAAA,QAC5B,SAAS;AAAA,QACV;AAAA;AAAA,IAED;AAAA,KACF;AAEJ;","names":[]}
@@ -13,3 +13,4 @@ function FormWarningText({ text }) {
13
13
  export {
14
14
  FormWarningText as default
15
15
  };
16
+ //# sourceMappingURL=form-warning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/form-warning.tsx"],"sourcesContent":["'use client';\n\nimport { Text } from \"../components-core\";\n\nexport default function FormWarningText({ text }: { text?: string }) {\n if (!text) {\n return null;\n }\n return (\n <Text size=\"sm\" variant=\"warning\">\n {text}\n </Text>\n );\n}\n"],"mappings":";;;AAEA,SAAS,YAAY;AAOjB;AALW,SAAR,gBAAiC,EAAE,KAAK,GAAsB;AACnE,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACT;AACA,SACE,oBAAC,QAAK,MAAK,MAAK,SAAQ,WACrB,gBACH;AAEJ;","names":[]}
@@ -59,3 +59,4 @@ function MagicLinkSignIn() {
59
59
  export {
60
60
  MagicLinkSignIn as default
61
61
  };
62
+ //# sourceMappingURL=magic-link-sign-in.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/magic-link-sign-in.tsx"],"sourcesContent":["'use client';\n\nimport { useState } from \"react\";\nimport FormWarningText from \"./form-warning\";\nimport { validateEmail } from \"../utils/email\";\nimport { useStackApp } from \"..\";\nimport { Button, Input, Label, Link } from \"../components-core\";\n\nexport default function MagicLinkSignIn() {\n const [email, setEmail] = useState('');\n const [sent, setSent] = useState(false);\n const [error, setError] = useState('');\n const app = useStackApp();\n \n const onSubmit = async () => {\n if (!email) {\n setError('Please enter your email');\n return;\n }\n if (!validateEmail(email)) {\n setError('Please enter a valid email');\n return;\n }\n\n const error = await app.sendMagicLinkEmail(email);\n if (error) {\n setError(error.message);\n return;\n }\n setSent(true);\n };\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'stretch' }}>\n <Label htmlFor=\"email\">Email</Label>\n <Input\n id=\"email\"\n type=\"email\"\n name=\"email\"\n value={email}\n onChange={(e) => {\n setEmail(e.target.value);\n setError('');\n }}\n />\n <FormWarningText text={error} />\n\n <Button\n disabled={sent}\n style={{ marginTop: '1.5rem' }}\n onClick={onSubmit}\n >\n {sent ? 'Email sent' : 'Send magic link'}\n </Button>\n </div>\n );\n}\n"],"mappings":";;;AAEA,SAAS,gBAAgB;AACzB,OAAO,qBAAqB;AAC5B,SAAS,qBAAqB;AAC9B,SAAS,mBAAmB;AAC5B,SAAS,QAAQ,OAAO,aAAmB;AA2BvC,SACE,KADF;AAzBW,SAAR,kBAAmC;AACxC,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,EAAE;AACrC,QAAM,CAAC,MAAM,OAAO,IAAI,SAAS,KAAK;AACtC,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,EAAE;AACrC,QAAM,MAAM,YAAY;AAExB,QAAM,WAAW,YAAY;AAC3B,QAAI,CAAC,OAAO;AACV,eAAS,yBAAyB;AAClC;AAAA,IACF;AACA,QAAI,CAAC,cAAc,KAAK,GAAG;AACzB,eAAS,4BAA4B;AACrC;AAAA,IACF;AAEA,UAAMA,SAAQ,MAAM,IAAI,mBAAmB,KAAK;AAChD,QAAIA,QAAO;AACT,eAASA,OAAM,OAAO;AACtB;AAAA,IACF;AACA,YAAQ,IAAI;AAAA,EACd;AAEA,SACE,qBAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,YAAY,UAAU,GAC5E;AAAA,wBAAC,SAAM,SAAQ,SAAQ,mBAAK;AAAA,IAC5B;AAAA,MAAC;AAAA;AAAA,QACC,IAAG;AAAA,QACH,MAAK;AAAA,QACL,MAAK;AAAA,QACL,OAAO;AAAA,QACP,UAAU,CAAC,MAAM;AACf,mBAAS,EAAE,OAAO,KAAK;AACvB,mBAAS,EAAE;AAAA,QACb;AAAA;AAAA,IACF;AAAA,IACA,oBAAC,mBAAgB,MAAM,OAAO;AAAA,IAE9B;AAAA,MAAC;AAAA;AAAA,QACC,UAAU;AAAA,QACV,OAAO,EAAE,WAAW,SAAS;AAAA,QAC7B,SAAS;AAAA,QAER,iBAAO,eAAe;AAAA;AAAA,IACzB;AAAA,KACF;AAEJ;","names":["error"]}
@@ -14,3 +14,4 @@ function MessageCard({ children, title, fullPage = false }) {
14
14
  export {
15
15
  MessageCard as default
16
16
  };
17
+ //# sourceMappingURL=message-card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/message-card.tsx"],"sourcesContent":["'use client';\n\nimport React from \"react\";\nimport CardFrame from \"./card-frame\";\nimport { Text } from \"../components-core\";\n\nexport default function MessageCard(\n { children, title, fullPage=false }: \n { children?: React.ReactNode, title: string, fullPage?: boolean}\n) {\n return (\n <CardFrame fullPage={fullPage}>\n <div style={{ textAlign: 'center' }}>\n <Text size=\"xl\" as='h2' style={{ marginBottom: '24px' }}>{title}</Text>\n {children}\n </div>\n </CardFrame>\n );\n}\n"],"mappings":";;;AAGA,OAAO,eAAe;AACtB,SAAS,YAAY;AAQf,SACE,KADF;AANS,SAAR,YACL,EAAE,UAAU,OAAO,WAAS,MAAM,GAElC;AACA,SACE,oBAAC,aAAU,UACT,+BAAC,SAAI,OAAO,EAAE,WAAW,SAAS,GAChC;AAAA,wBAAC,QAAK,MAAK,MAAK,IAAG,MAAK,OAAO,EAAE,cAAc,OAAO,GAAI,iBAAM;AAAA,IAC/D;AAAA,KACH,GACF;AAEJ;","names":[]}
@@ -122,3 +122,4 @@ function OAuthButton({
122
122
  export {
123
123
  OAuthButton as default
124
124
  };
125
+ //# sourceMappingURL=oauth-button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/oauth-button.tsx"],"sourcesContent":["'use client';\n\nimport { FaGithub, FaFacebook, FaApple } from 'react-icons/fa';\nimport { useStackApp } from '..';\nimport { Button } from \"../components-core\";\nimport { useDesign } from \"../providers/design-provider\";\nimport Color from 'color';\n\nconst iconSize = 22;\n\nexport default function OAuthButton({\n provider,\n type,\n}: {\n provider: string,\n type: 'signin' | 'signup',\n}) {\n const { colors } = useDesign();\n const stackApp = useStackApp();\n\n let style : {\n backgroundColor: string,\n name: string,\n icon: JSX.Element | null,\n border?: string,\n };\n switch (provider) {\n case 'google': {\n style = {\n backgroundColor: '#fff',\n name: 'Google',\n border: '1px solid #ccc',\n icon: (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width={iconSize} height={iconSize} viewBox=\"0 0 24 24\">\n <path\n fill=\"#4285F4\"\n d=\"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z\"\n />\n <path\n fill=\"#34A853\"\n d=\"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z\"\n />\n <path\n fill=\"#FBBC05\"\n d=\"M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z\"\n />\n <path\n fill=\"#EA4335\"\n d=\"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z\"\n />\n <path fill=\"none\" d=\"M1 1h22v22H1z\" />\n </svg>\n ),\n };\n break;\n }\n case 'github': {\n style = {\n backgroundColor: '#111',\n border: '1px solid #444',\n name: 'GitHub',\n icon: (\n <FaGithub color=\"#fff\" size={iconSize} />\n ),\n };\n break;\n }\n case 'facebook': {\n style = {\n backgroundColor: '#1877F2',\n name: 'Facebook',\n icon: (\n <FaFacebook color=\"#fff\" size={iconSize} />\n ),\n };\n break;\n }\n case 'apple': {\n style = {\n backgroundColor: '#000',\n name: 'Apple',\n icon: (\n <FaApple color=\"#fff\" size={iconSize} />\n ),\n };\n break;\n }\n case 'microsoft': {\n style = {\n backgroundColor: '#2f2f2f',\n name: 'Microsoft',\n icon: (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width={iconSize} height={iconSize} viewBox=\"0 0 21 21\">\n <title>{\"MS-SymbolLockup\"}</title>\n <path fill=\"#f25022\" d=\"M1 1h9v9H1z\" />\n <path fill=\"#00a4ef\" d=\"M1 11h9v9H1z\" />\n <path fill=\"#7fba00\" d=\"M11 1h9v9h-9z\" />\n <path fill=\"#ffb900\" d=\"M11 11h9v9h-9z\" />\n </svg>\n ),\n };\n break;\n }\n default: {\n style = {\n backgroundColor: '#000',\n name: provider,\n icon: null\n };\n }\n }\n\n return (\n <Button\n color={style.backgroundColor}\n style={{ border: style.border }}\n onClick={() => stackApp.signInWithOAuth(provider)}\n >\n <div style={{ display: 'flex', alignItems: 'center', width: '100%' }}>\n {style.icon}\n <span style={{ flexGrow: 1 }}>{type === 'signup' ? 'Sign up with ' : 'Sign in with '}{style.name}</span>\n {<div style={{ visibility: 'hidden' }}>{style.icon}</div>}\n </div>\n </Button>\n );\n}\n"],"mappings":";;;AAEA,SAAS,UAAU,YAAY,eAAe;AAC9C,SAAS,mBAAmB;AAC5B,SAAS,cAAc;AACvB,SAAS,iBAAiB;AA4BhB,SACE,KADF;AAzBV,IAAM,WAAW;AAEF,SAAR,YAA6B;AAAA,EAClC;AAAA,EACA;AACF,GAGG;AACD,QAAM,EAAE,OAAO,IAAI,UAAU;AAC7B,QAAM,WAAW,YAAY;AAE7B,MAAI;AAMJ,UAAQ,UAAU;AAAA,IAChB,KAAK,UAAU;AACb,cAAQ;AAAA,QACN,iBAAiB;AAAA,QACjB,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,MACE,qBAAC,SAAI,OAAM,8BAA6B,OAAO,UAAU,QAAQ,UAAU,SAAQ,aACjF;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,GAAE;AAAA;AAAA,UACJ;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,GAAE;AAAA;AAAA,UACJ;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,GAAE;AAAA;AAAA,UACJ;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,GAAE;AAAA;AAAA,UACJ;AAAA,UACA,oBAAC,UAAK,MAAK,QAAO,GAAE,iBAAgB;AAAA,WACtC;AAAA,MAEJ;AACA;AAAA,IACF;AAAA,IACA,KAAK,UAAU;AACb,cAAQ;AAAA,QACN,iBAAiB;AAAA,QACjB,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,MACE,oBAAC,YAAS,OAAM,QAAO,MAAM,UAAU;AAAA,MAE3C;AACA;AAAA,IACF;AAAA,IACA,KAAK,YAAY;AACf,cAAQ;AAAA,QACN,iBAAiB;AAAA,QACjB,MAAM;AAAA,QACN,MACE,oBAAC,cAAW,OAAM,QAAO,MAAM,UAAU;AAAA,MAE7C;AACA;AAAA,IACF;AAAA,IACA,KAAK,SAAS;AACZ,cAAQ;AAAA,QACN,iBAAiB;AAAA,QACjB,MAAM;AAAA,QACN,MACE,oBAAC,WAAQ,OAAM,QAAO,MAAM,UAAU;AAAA,MAE1C;AACA;AAAA,IACF;AAAA,IACA,KAAK,aAAa;AAChB,cAAQ;AAAA,QACN,iBAAiB;AAAA,QACjB,MAAM;AAAA,QACN,MACE,qBAAC,SAAI,OAAM,8BAA6B,OAAO,UAAU,QAAQ,UAAU,SAAQ,aACjF;AAAA,8BAAC,WAAO,6BAAkB;AAAA,UAC1B,oBAAC,UAAK,MAAK,WAAU,GAAE,eAAc;AAAA,UACrC,oBAAC,UAAK,MAAK,WAAU,GAAE,gBAAe;AAAA,UACtC,oBAAC,UAAK,MAAK,WAAU,GAAE,iBAAgB;AAAA,UACvC,oBAAC,UAAK,MAAK,WAAU,GAAE,kBAAiB;AAAA,WAC1C;AAAA,MAEJ;AACA;AAAA,IACF;AAAA,IACA,SAAS;AACP,cAAQ;AAAA,QACN,iBAAiB;AAAA,QACjB,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAO,MAAM;AAAA,MACb,OAAO,EAAE,QAAQ,MAAM,OAAO;AAAA,MAC9B,SAAS,MAAM,SAAS,gBAAgB,QAAQ;AAAA,MAEhD,+BAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,OAAO,OAAO,GAChE;AAAA,cAAM;AAAA,QACP,qBAAC,UAAK,OAAO,EAAE,UAAU,EAAE,GAAI;AAAA,mBAAS,WAAW,kBAAkB;AAAA,UAAiB,MAAM;AAAA,WAAK;AAAA,QAChG,oBAAC,SAAI,OAAO,EAAE,YAAY,SAAS,GAAI,gBAAM,MAAK;AAAA,SACrD;AAAA;AAAA,EACF;AAEJ;","names":[]}
@@ -15,3 +15,4 @@ function OAuthGroup({
15
15
  export {
16
16
  OAuthGroup as default
17
17
  };
18
+ //# sourceMappingURL=oauth-group.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/oauth-group.tsx"],"sourcesContent":["'use client';\n\nimport { useStackApp } from \"../lib/hooks\";\nimport OAuthButton from \"./oauth-button\";\n\nexport default function OAuthGroup({\n type,\n}: {\n type: 'signin' | 'signup',\n}) {\n const stackApp = useStackApp();\n const project = stackApp.useProject();\n\n return (\n <div style={{ gap: '16px', display: 'flex', flexDirection: 'column', alignItems: 'stretch' }}>\n {project.oauthProviders.filter(p => p.enabled).map(p => (\n <OAuthButton key={p.id} provider={p.id} type={type}/>\n ))}\n </div>\n );\n}\n"],"mappings":";;;AAEA,SAAS,mBAAmB;AAC5B,OAAO,iBAAiB;AAahB;AAXO,SAAR,WAA4B;AAAA,EACjC;AACF,GAEG;AACD,QAAM,WAAW,YAAY;AAC7B,QAAM,UAAU,SAAS,WAAW;AAEpC,SACE,oBAAC,SAAI,OAAO,EAAE,KAAK,QAAQ,SAAS,QAAQ,eAAe,UAAU,YAAY,UAAU,GACxF,kBAAQ,eAAe,OAAO,OAAK,EAAE,OAAO,EAAE,IAAI,OACjD,oBAAC,eAAuB,UAAU,EAAE,IAAI,QAAtB,EAAE,EAA+B,CACpD,GACH;AAEJ;","names":[]}
@@ -80,3 +80,4 @@ var password_field_default = PasswordField;
80
80
  export {
81
81
  password_field_default as default
82
82
  };
83
+ //# sourceMappingURL=password-field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/password-field.tsx"],"sourcesContent":["'use client';\n\nimport { Input } from \"../components-core\";\nimport { forwardRef, useRef, useState } from 'react';\nimport { HiEye, HiEyeOff } from 'react-icons/hi';\nimport { useDesign } from \"..\";\nimport styled from \"styled-components\";\nimport { ColorPalette } from \"../providers/design-provider\";\n\nconst getIconStyle = (colors: ColorPalette) => `\n color: ${colors.light.secondaryColor};\n\n html[data-theme='dark'] & {\n color: ${colors.dark.secondaryColor};\n }\n`;\nconst StyledEyeOff = styled(HiEyeOff)<{ colors: ColorPalette }>`${props => getIconStyle(props.colors)}`;\nconst StyledEye = styled(HiEye)<{ colors: ColorPalette }>`${props => getIconStyle(props.colors)}`;\n\nconst PasswordField = forwardRef<\n HTMLInputElement, \n React.InputHTMLAttributes<HTMLInputElement>\n>(({ id, name, ...props }, ref) => {\n const [isOpen, setIsOpen] = useState(false);\n const { colors } = useDesign();\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n const mergeRef = (node: HTMLInputElement) => {\n if (ref) {\n if (typeof ref === 'function') {\n ref(node);\n } else {\n ref.current = node;\n }\n }\n inputRef.current = node;\n };\n\n const onClickReveal = () => {\n setIsOpen(!isOpen);\n const currentInput = inputRef.current;\n if (currentInput) {\n currentInput.focus({ preventScroll: true });\n }\n };\n\n return (\n <div style={{ position: 'relative', display: 'flex' }}>\n <Input\n id={id}\n ref={mergeRef}\n name={name}\n type={isOpen ? 'text' : 'password'}\n autoComplete=\"current-password\"\n required\n style={{ flex: 1 }}\n {...props}\n />\n <button\n tabIndex={-1}\n type=\"button\"\n style={{ \n position: 'absolute', \n backgroundColor: 'transparent',\n border: 'none',\n top: 0, \n right: 0, \n bottom: 0, \n display: 'flex', \n alignItems: 'center', \n paddingRight: '12px' \n }}\n onClick={onClickReveal}\n aria-label={isOpen ? 'Mask password' : 'Reveal password'}\n >\n {isOpen ? <StyledEyeOff colors={colors} /> : <StyledEye colors={colors} />}\n </button>\n </div>\n );\n});\n\nPasswordField.displayName = 'PasswordField';\n\nexport default PasswordField;\n"],"mappings":";;;AAEA,SAAS,aAAa;AACtB,SAAS,YAAY,QAAQ,gBAAgB;AAC7C,SAAS,OAAO,gBAAgB;AAChC,SAAS,iBAAiB;AAC1B,OAAO,YAAY;AAyCf,SACE,KADF;AAtCJ,IAAM,eAAe,CAAC,WAAyB;AAAA,WACpC,OAAO,MAAM,cAAc;AAAA;AAAA;AAAA,aAGzB,OAAO,KAAK,cAAc;AAAA;AAAA;AAGvC,IAAM,eAAe,OAAO,QAAQ,IAA8B,WAAS,aAAa,MAAM,MAAM,CAAC;AACrG,IAAM,YAAY,OAAO,KAAK,IAA8B,WAAS,aAAa,MAAM,MAAM,CAAC;AAE/F,IAAM,gBAAgB,WAGpB,CAAC,EAAE,IAAI,MAAM,GAAG,MAAM,GAAG,QAAQ;AACjC,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAS,KAAK;AAC1C,QAAM,EAAE,OAAO,IAAI,UAAU;AAC7B,QAAM,WAAW,OAAgC,IAAI;AAErD,QAAM,WAAW,CAAC,SAA2B;AAC3C,QAAI,KAAK;AACP,UAAI,OAAO,QAAQ,YAAY;AAC7B,YAAI,IAAI;AAAA,MACV,OAAO;AACL,YAAI,UAAU;AAAA,MAChB;AAAA,IACF;AACA,aAAS,UAAU;AAAA,EACrB;AAEA,QAAM,gBAAgB,MAAM;AAC1B,cAAU,CAAC,MAAM;AACjB,UAAM,eAAe,SAAS;AAC9B,QAAI,cAAc;AAChB,mBAAa,MAAM,EAAE,eAAe,KAAK,CAAC;AAAA,IAC5C;AAAA,EACF;AAEA,SACE,qBAAC,SAAI,OAAO,EAAE,UAAU,YAAY,SAAS,OAAO,GAClD;AAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,KAAK;AAAA,QACL;AAAA,QACA,MAAM,SAAS,SAAS;AAAA,QACxB,cAAa;AAAA,QACb,UAAQ;AAAA,QACR,OAAO,EAAE,MAAM,EAAE;AAAA,QAChB,GAAG;AAAA;AAAA,IACN;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,UAAU;AAAA,QACV,MAAK;AAAA,QACL,OAAO;AAAA,UACL,UAAU;AAAA,UACV,iBAAiB;AAAA,UACjB,QAAQ;AAAA,UACR,KAAK;AAAA,UACL,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,cAAc;AAAA,QAChB;AAAA,QACA,SAAS;AAAA,QACT,cAAY,SAAS,kBAAkB;AAAA,QAEtC,mBAAS,oBAAC,gBAAa,QAAgB,IAAK,oBAAC,aAAU,QAAgB;AAAA;AAAA,IAC1E;AAAA,KACF;AAEJ,CAAC;AAED,cAAc,cAAc;AAE5B,IAAO,yBAAQ;","names":[]}
@@ -91,3 +91,4 @@ function PasswordResetInner({ code, fullPage = false }) {
91
91
  export {
92
92
  PasswordResetInner as default
93
93
  };
94
+ //# sourceMappingURL=password-reset-inner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/password-reset-inner.tsx"],"sourcesContent":["'use client';\n\nimport { useState } from \"react\";\nimport { getPasswordError } from \"@stackframe/stack-shared/dist/helpers/password\";\nimport { useStackApp } from \"..\";\nimport PasswordField from \"./password-field\";\nimport FormWarningText from \"./form-warning\";\nimport RedirectMessageCard from \"./redirect-message-card\";\nimport MessageCard from \"./message-card\";\nimport CardFrame from \"./card-frame\";\nimport { Button, Label, Text } from \"../components-core\";\n\n\nexport default function PasswordResetInner(\n { code, fullPage = false }:\n { code: string, fullPage?: boolean }\n) {\n const [password, setPassword] = useState('');\n const [passwordError, setPasswordError] = useState('');\n const [passwordRepeat, setPasswordRepeat] = useState('');\n const [passwordRepeatError, setPasswordRepeatError] = useState('');\n const [finished, setFinished] = useState(false);\n const [resetError, setResetError] = useState(false);\n const stackApp = useStackApp();\n\n const onSubmit = async () => {\n if (!password) {\n setPasswordError('Please enter your password');\n return;\n }\n if (!passwordRepeat) {\n setPasswordRepeatError('Please repeat your password');\n return;\n }\n if (password !== passwordRepeat) {\n setPasswordRepeatError('Passwords do not match');\n return;\n }\n\n const passwordError = getPasswordError(password);\n if (passwordError) {\n setPasswordError(passwordError.message);\n return;\n }\n\n const errorCode = await stackApp.resetPassword({ password, code });\n \n // this should not happen, the outer component should verify the code before rendering this component\n if (errorCode) {\n setResetError(true);\n return;\n }\n\n setFinished(true);\n };\n\n if (finished) {\n return <RedirectMessageCard type='passwordReset' fullPage={fullPage} />;\n }\n\n if (resetError) {\n return (\n <MessageCard title=\"Failed to reset password\" fullPage={fullPage}>\n <Text>Failed to reset password. Please request a new password reset link</Text>\n </MessageCard>\n );\n }\n\n return (\n <CardFrame fullPage={fullPage}>\n <div style={{ textAlign: 'center', marginBottom: '1.5rem' }}>\n <Text size=\"xl\" as='h2'>Reset Your Password</Text>\n </div>\n\n <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'stretch' }}>\n <Label htmlFor=\"password\">New Password</Label>\n <PasswordField\n id=\"password\"\n name=\"password\"\n value={password}\n onChange={(e) => {\n setPassword(e.target.value);\n setPasswordError('');\n setPasswordRepeatError('');\n }}\n />\n <FormWarningText text={passwordError} />\n\n <Label htmlFor=\"repeat-password\" style={{ marginTop: \"1rem\" }}>Repeat New Password</Label>\n <PasswordField\n id=\"repeat-password\"\n name=\"repeat-password\"\n value={passwordRepeat}\n onChange={(e) => {\n setPasswordRepeat(e.target.value);\n setPasswordError('');\n setPasswordRepeatError('');\n }}\n />\n <FormWarningText text={passwordRepeatError} />\n\n <Button style={{ marginTop: '1.5rem' }} onClick={() => onSubmit()}>\n Reset Password\n </Button>\n </div>\n </CardFrame>\n ); \n}\n"],"mappings":";;;AAEA,SAAS,gBAAgB;AACzB,SAAS,wBAAwB;AACjC,SAAS,mBAAmB;AAC5B,OAAO,mBAAmB;AAC1B,OAAO,qBAAqB;AAC5B,OAAO,yBAAyB;AAChC,OAAO,iBAAiB;AACxB,OAAO,eAAe;AACtB,SAAS,QAAQ,OAAO,YAAY;AA+CzB,cAiBL,YAjBK;AA5CI,SAAR,mBACL,EAAE,MAAM,WAAW,MAAM,GAEzB;AACA,QAAM,CAAC,UAAU,WAAW,IAAI,SAAS,EAAE;AAC3C,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAAS,EAAE;AACrD,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,SAAS,EAAE;AACvD,QAAM,CAAC,qBAAqB,sBAAsB,IAAI,SAAS,EAAE;AACjE,QAAM,CAAC,UAAU,WAAW,IAAI,SAAS,KAAK;AAC9C,QAAM,CAAC,YAAY,aAAa,IAAI,SAAS,KAAK;AAClD,QAAM,WAAW,YAAY;AAE7B,QAAM,WAAW,YAAY;AAC3B,QAAI,CAAC,UAAU;AACb,uBAAiB,4BAA4B;AAC7C;AAAA,IACF;AACA,QAAI,CAAC,gBAAgB;AACnB,6BAAuB,6BAA6B;AACpD;AAAA,IACF;AACA,QAAI,aAAa,gBAAgB;AAC/B,6BAAuB,wBAAwB;AAC/C;AAAA,IACF;AAEA,UAAMA,iBAAgB,iBAAiB,QAAQ;AAC/C,QAAIA,gBAAe;AACjB,uBAAiBA,eAAc,OAAO;AACtC;AAAA,IACF;AAEA,UAAM,YAAY,MAAM,SAAS,cAAc,EAAE,UAAU,KAAK,CAAC;AAGjE,QAAI,WAAW;AACb,oBAAc,IAAI;AAClB;AAAA,IACF;AAEA,gBAAY,IAAI;AAAA,EAClB;AAEA,MAAI,UAAU;AACZ,WAAO,oBAAC,uBAAoB,MAAK,iBAAgB,UAAoB;AAAA,EACvE;AAEA,MAAI,YAAY;AACd,WACE,oBAAC,eAAY,OAAM,4BAA2B,UAC5C,8BAAC,QAAK,gFAAkE,GAC1E;AAAA,EAEJ;AAEA,SACE,qBAAC,aAAU,UACT;AAAA,wBAAC,SAAI,OAAO,EAAE,WAAW,UAAU,cAAc,SAAS,GACxD,8BAAC,QAAK,MAAK,MAAK,IAAG,MAAK,iCAAmB,GAC7C;AAAA,IAEA,qBAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,eAAe,UAAU,YAAY,UAAU,GAC5E;AAAA,0BAAC,SAAM,SAAQ,YAAW,0BAAY;AAAA,MACtC;AAAA,QAAC;AAAA;AAAA,UACC,IAAG;AAAA,UACH,MAAK;AAAA,UACL,OAAO;AAAA,UACP,UAAU,CAAC,MAAM;AACf,wBAAY,EAAE,OAAO,KAAK;AAC1B,6BAAiB,EAAE;AACnB,mCAAuB,EAAE;AAAA,UAC3B;AAAA;AAAA,MACF;AAAA,MACA,oBAAC,mBAAgB,MAAM,eAAe;AAAA,MAEtC,oBAAC,SAAM,SAAQ,mBAAkB,OAAO,EAAE,WAAW,OAAO,GAAG,iCAAmB;AAAA,MAClF;AAAA,QAAC;AAAA;AAAA,UACC,IAAG;AAAA,UACH,MAAK;AAAA,UACL,OAAO;AAAA,UACP,UAAU,CAAC,MAAM;AACf,8BAAkB,EAAE,OAAO,KAAK;AAChC,6BAAiB,EAAE;AACnB,mCAAuB,EAAE;AAAA,UAC3B;AAAA;AAAA,MACF;AAAA,MACA,oBAAC,mBAAgB,MAAM,qBAAqB;AAAA,MAE5C,oBAAC,UAAO,OAAO,EAAE,WAAW,SAAS,GAAG,SAAS,MAAM,SAAS,GAAG,4BAEnE;AAAA,OACF;AAAA,KACF;AAEJ;","names":["passwordError"]}